%global appLoc serverName; %let compiled_apploc=/30.SASApps/3030.Projects/303001.DataController/build2/DataController; %let serverName=SASApp; %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 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_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 mf_verifymacvars( verifyVars /* list of macro variable NAMES */ ,makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */ ,mAbort=SOFT )/*/STORE SOURCE*/; %local verifyIterator verifyVar abortmsg; %do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( ))); %let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( )); %if not %symexist(&verifyvar) %then %do; %let abortmsg= Variable &verifyVar is MISSING; %goto exit_err; %end; %if %length(%trim(&&&verifyVar))=0 %then %do; %let abortmsg= Variable &verifyVar is EMPTY; %goto exit_err; %end; %if &makeupcase=YES %then %do; %let &verifyVar=%upcase(&&&verifyvar); %end; %end; %goto exit_success; %exit_err: %put &abortmsg; %mf_abort(iftrue=(&mabort ne SOFT), mac=mf_verifymacvars, msg=%str(&abortmsg) ) 0 %return; %exit_success: 1 %mend mf_verifymacvars; %macro mm_getDirectories( path= ,outds=work.mm_getDirectories ,mDebug=0 )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_getDirectories.sas; %&mD.put _local_; data &outds (keep=directoryuri name directoryname directorydesc ); length directoryuri name directoryname directorydesc $256; call missing(of _all_); __i+1; %if %length(&path)=0 %then %do; do while (metadata_getnobj("omsobj:Directory?@Id contains '.'",__i,directoryuri)>0); %end; %else %do; do while( metadata_getnobj("omsobj:Directory?@DirectoryName='&path'",__i,directoryuri) >0 ); %end; __rc1=metadata_getattr(directoryuri, "Name", name); __rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname); __rc3=metadata_getattr(directoryuri, "Desc", directorydesc); &mD.putlog (_all_) (=); drop __:; __i+1; if sum(of __rc1-__rc3)=0 then output; end; run; %mend mm_getDirectories; %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 mm_updatestpsourcecode(stp= ,stpcode= ,minify=NO ,mdebug=0 ); /* first, check if STP exists */ %local tsuri; %let tsuri=stopifempty ; data _null_; format type uri tsuri value $200.; call missing (of _all_); path="&stp.(StoredProcess)"; /* first, find the STP ID */ if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do; /* get sourcecode */ cnt=1; do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0); rc=metadata_getattr(tsuri,"Name",value); %if &mdebug=1 %then %do; put tsuri= value=; %end; if value="SourceCode" then do; /* found it! */ rc=metadata_getattr(tsuri,"Id",value); call symputx('tsuri',value,'l'); stop; end; cnt+1; end; end; else put (_all_)(=); run; %if &tsuri=stopifempty %then %do; %put %str(WARN)ING: &stp.(StoredProcess) not found!; %return; %end; %if %length(&stpcode)<2 %then %do; %put %str(WARN)ING: No SAS code supplied!!; %return; %end; %local frefin frefout; %let frefin=%mf_getuniquefileref(); %let frefout=%mf_getuniquefileref(); /* write header XML */ data _null_; file &frefin; put "$METAREPOSITORY ','>'); outstr=tranwrd(outstr,"'",'''); outstr=tranwrd(outstr,'"','"'); outstr=tranwrd(outstr,'0A'x,' '); outstr=tranwrd(outstr,'0D'x,' '); outstr=tranwrd(outstr,'$','$'); %if &minify=YES %then %do; outstr=cats(outstr); if outstr ne ''; if not (outstr=:'/*' and subpad(left(reverse(outstr)),1,2)='/*'); %end; outstr=trim(outstr); put outstr ' '; run; %end; data _null_; file &frefin mod; put "'>SAS268435456 "; run; proc metadata in= &frefin out=&frefout; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=32767; input; put _infile_; run; %end; %else %do; filename &frefin clear; filename &frefout clear; %end; %mend mm_updatestpsourcecode; %macro mm_getrepos( outds=work.mm_getrepos )/*/STORE SOURCE*/; * use a temporary fileref to hold the response; filename response temp; /* get list of libraries */ proc metadata in= "1" out=response; run; /* write the response to the log for debugging */ /* data _null_; infile response lrecl=1048576; input; put _infile_; run; */ /* create an XML map to read the response */ filename sxlemap temp; data _null_; file sxlemap; put ''; put "/GetRepositories/Repositories/Repository"; put ""; put ''; put "/GetRepositories/Repositories/Repository/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Name"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Desc"; put ""; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@DefaultNS"; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryType"; put "characterstring20"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryFormat"; put "characterstring10"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@Access"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@CurrentAccess"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@PauseState"; put "characterstring16"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Path"; put ""; put "characterstring256"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Engine"; put ""; put "characterstring8"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Options"; put ""; put "characterstring32"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataCreated"; put "characterstring24"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataUpdated"; put "characterstring24"; put ''; put '
'; run; libname _XML_ xml xmlfileref=response xmlmap=sxlemap; proc sort data= _XML_.SASRepos out=&outds; by name; run; /* clear references */ filename sxlemap clear; filename response clear; libname _XML_ clear; %mend mm_getrepos; %macro mm_getservercontexts( outds=work.mm_getrepos )/*/STORE SOURCE*/; %local repo repocnt x; %let repo=%sysfunc(getoption(metarepository)); /* first get list of available repos */ %mm_getrepos(outds=work.repos) %let repocnt=0; data _null_; set repos; where repositorytype in('CUSTOM','FOUNDATION'); keep id name ; call symputx(cats('repo',_n_),name,'l'); call symputx('repocnt',_n_,'l'); run; filename __mc1 temp; filename __mc2 temp; data &outds; length serveruri servername $200; call missing (of _all_); stop; run; %do x=1 %to &repocnt; options metarepository=&&repo&x; proc metadata in= "$METAREPOSITORY ServerContextSAS 0" out=__mc1; run; /* data _null_; infile __mc1 lrecl=1048576; input; put _infile_; run; */ data _null_; file __mc2; put ''; put "/GetMetadataObjects/Objects/ServerContext"; put ""; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Name"; put ""; put "characterstring200"; put ''; put '
'; run; libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2; proc append base=&outds data=__mc3.SASContexts;run; libname __mc3 clear; %end; options metarepository=&repo; filename __mc1 clear; filename __mc2 clear; %mend mm_getservercontexts; %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_isblank(param )/*/STORE SOURCE*/; %sysevalf(%superq(param)=,boolean) %mend mf_isblank; %macro mp_dropmembers( list /* space separated list of datasets / views */ ,libref=WORK /* can only drop from a single library at a time */ ,iftrue=%str(1=1) )/*/STORE SOURCE*/; %if not(%eval(%unquote(&iftrue))) %then %return; %if %mf_isblank(&list) %then %do; %put NOTE: nothing to drop!; %return; %end; proc datasets lib=&libref nolist; delete &list; delete &list /mtype=view; run; %mend mp_dropmembers; %macro mm_createstp( stpname=SASjs Default STP ,stpdesc=This stp was created automatically by the mm_createstp macro ,filename=mm_createstp.sas ,directory=SASEnvironment/SASCode ,tree=/User Folders/sasdemo ,package=false ,streaming=true ,outds=work.mm_createstp ,mDebug=0 ,server=SASApp ,stptype=1 ,minify=NO ,frefin=mm_in ,frefout=mm_out ,LogicalServerType=Sps )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_CreateSTP.sas; %&mD.put _local_; %mp_abort( iftrue=(%mf_verifymacvars(stpname filename directory tree)=0) ,mac=&sysmacroname ,msg=%str(Empty inputs: stpname filename directory tree) ) %mp_dropmembers(%scan(&outds,2,.)) /* check LogicalServerType validity */ %mp_abort( iftrue=( &LogicalServerType ne Sps and &LogicalServerType ne Wks and &LogicalServerType ne Any ) ,mac=&sysmacroname ,msg=%str(Invalid value for LogicalServerType (&LogicalServerType)) ) /** * check tree exists */ data _null_; length type uri $256; rc=metadata_pathobj("","&tree","Folder",type,uri); call symputx('foldertype',type,'l'); call symputx('treeuri',uri,'l'); run; %if &foldertype ne Tree %then %do; %put %str(WARN)ING: Tree &tree does not exist!; %return; %end; /** * Check STP does not exist already */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&tree/&stpname",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype = ClassifierMap %then %do; %put %str(WARN)ING: Stored Process &stpname already exists in &tree!; %return; %end; /** * Check that the physical file exists */ %if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do; %put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!; %return; %end; %if &stptype=1 %then %do; /* type 1 STP - where code is stored on filesystem */ %if %sysevalf(&sysver lt 9.2) %then %do; %put %str(WARN)ING: Version 9.2 or later required; %return; %end; /* check directory object (where 9.2 source code reference is stored) */ data _null_; length id $20 dirtype $256; rc=metadata_resolve("&directory",dirtype,id); call symputx('checkdirtype',dirtype,'l'); run; %if &checkdirtype ne Directory %then %do; %mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug) %if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do; %put %str(WARN)ING: The directory object does not exist for &directory; %return; %end; %end; %else %do; data &outds; directoryuri="&directory"; run; %end; data &outds (keep=stpuri prompturi fileuri texturi); length stpuri prompturi fileuri texturi serveruri $256 ; if _n_=1 then call missing (of _all_); set &outds; /* final checks on uris */ length id $20 type $256; __rc=metadata_resolve("&treeuri",type,id); if type ne 'Tree' then do; putlog "%str(WARN)ING: Invalid tree URI: &treeuri"; stopme=1; end; __rc=metadata_resolve(directoryuri,type,id); if type ne 'Directory' then do; putlog "%str(WARN)ING: Invalid directory URI: " directoryuri; stopme=1; end; /* get server info */ __rc=metadata_resolve("&server",type,serveruri); if type ne 'LogicalServer' then do; __rc=metadata_getnobj("omsobj:LogicalServer?@Name='&server'",1,serveruri); if serveruri='' then do; putlog "%str(WARN)ING: Invalid server: &server"; stopme=1; end; end; if stopme=1 then do; putlog (_all_)(=); stop; end; /* create empty prompt */ rc1=METADATA_NEWOBJ('PromptGroup',prompturi,'Parameters'); rc2=METADATA_SETATTR(prompturi, 'UsageVersion', '1000000'); rc3=METADATA_SETATTR(prompturi, 'GroupType','2'); rc4=METADATA_SETATTR(prompturi, 'Name','Parameters'); rc5=METADATA_SETATTR(prompturi, 'PublicType','Embedded:PromptGroup'); GroupInfo= ""; rc6 = METADATA_SETATTR(prompturi, 'GroupInfo',groupinfo); if sum(of rc1-rc6) ne 0 then do; putlog "%str(WARN)ING: Issue creating prompt."; if prompturi ne . then do; putlog ' Removing orphan: ' prompturi; rc = METADATA_DELOBJ(prompturi); put rc=; end; stop; end; /* create a file uri */ rc7=METADATA_NEWOBJ('File',fileuri,'SP Source File'); rc8=METADATA_SETATTR(fileuri, 'FileName',"&filename"); rc9=METADATA_SETATTR(fileuri, 'IsARelativeName','1'); rc10=METADATA_SETASSN(fileuri, 'Directories','MODIFY',directoryuri); if sum(of rc7-rc10) ne 0 then do; putlog "%str(WARN)ING: Issue creating file."; if fileuri ne . then do; putlog ' Removing orphans:' prompturi fileuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); put (_all_)(=); end; stop; end; /* create a TextStore object */ rc11= METADATA_NEWOBJ('TextStore',texturi,'Stored Process'); rc12= METADATA_SETATTR(texturi, 'TextRole','StoredProcessConfiguration'); rc13= METADATA_SETATTR(texturi, 'TextType','XML'); storedtext='' !!"" !!""; rc14= METADATA_SETATTR(texturi, 'StoredText',storedtext); if sum(of rc11-rc14) ne 0 then do; putlog "%str(WARN)ING: Issue creating TextStore."; if texturi ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); put (_all_)(=); end; stop; end; /* create meta obj */ rc15= METADATA_NEWOBJ('ClassifierMap',stpuri,"&stpname"); rc16= METADATA_SETASSN(stpuri, 'Trees','MODIFY',treeuri); rc17= METADATA_SETASSN(stpuri, 'ComputeLocations','MODIFY',serveruri); rc18= METADATA_SETASSN(stpuri, 'SourceCode','MODIFY',fileuri); rc19= METADATA_SETASSN(stpuri, 'Prompts','MODIFY',prompturi); rc20= METADATA_SETASSN(stpuri, 'Notes','MODIFY',texturi); rc21= METADATA_SETATTR(stpuri, 'PublicType', 'StoredProcess'); rc22= METADATA_SETATTR(stpuri, 'TransformRole', 'StoredProcess'); rc23= METADATA_SETATTR(stpuri, 'UsageVersion', '1000000'); rc24= METADATA_SETATTR(stpuri, 'Desc', "&stpdesc"); /* tidy up if err */ if sum(of rc15-rc24) ne 0 then do; putlog "%str(WARN)ING: Issue creating STP."; if stpuri ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi stpuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); rc = METADATA_DELOBJ(stpuri); put (_all_)(=); end; end; else do; fullpath=cats('_program=',treepath,"/&stpname"); putlog "NOTE: Stored Process Created!"; putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath; putlog "NOTE- "; putlog "NOTE-"; end; output; stop; run; %end; %else %if &stptype=2 %then %do; /* type 2 stp - code is stored in metadata */ %if %sysevalf(&sysver lt 9.3) %then %do; %put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs; %return; %end; /* check we have the correct ServerContext */ %mm_getservercontexts(outds=contexts) %local serveruri; %let serveruri=NOTFOUND; data _null_; set contexts; where upcase(servername)="%upcase(&server)"; call symputx('serveruri',serveruri); run; %if &serveruri=NOTFOUND %then %do; %put %str(WARN)ING: ServerContext *&server* not found!; %return; %end; /** * First, create a Hello World type 2 stored process */ filename &frefin temp; data _null_; file &frefin; treeuri=quote(symget('treeuri')); serveruri=quote(symget('serveruri')); stpdesc=quote(symget('stpdesc')); stpname=quote(symget('stpname')); put "$METAREPOSITORY "/ ''/ " "/ " "/ " "/ " "/ ' '/ ' ' / " "/ " "/ ' '/ " "/ ""/ "SAS"/ "268435456"; run; filename &frefout temp; proc metadata in= &frefin out=&frefout ; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=1048576; input; put _infile_; run; %end; /** * Next, add the source code */ %mm_updatestpsourcecode(stp=&tree/&stpname ,stpcode="&directory/&filename" ,mdebug=&mdebug ,minify=&minify) %end; %else %do; %put %str(WARN)ING: STPTYPE=*&stptype* not recognised!; %end; %mend mm_createstp; %macro mf_getuser( )/*/STORE SOURCE*/; %local user; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; %let user=&SYS_COMPUTE_SESSION_OWNER; %end; %else %if %symexist(_metaperson) %then %do; %if %length(&_metaperson)=0 %then %let user=&sysuserid; /* sometimes SAS will add @domain extension - remove for consistency */ /* but be sure to quote in case of usernames with commas */ %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); %end; %else %let user=&sysuserid; %quote(&user) %mend mf_getuser; %macro mm_createfolder(path=,mDebug=0); %put &sysmacroname: execution started for &path; %local dbg errorcheck; %if &mDebug=0 %then %let dbg=*; %local parentFolderObjId child errorcheck paths; %let paths=0; %let errorcheck=1; %if &syscc ge 4 %then %do; %put SYSCC=&syscc - this macro requires a clean session; %return; %end; data _null_; length objId parentId objType parent child $200 folderPath $1000; call missing (of _all_); folderPath = "%trim(&path)"; * remove any trailing slash ; if ( substr(folderPath,length(folderPath),1) = '/' ) then folderPath=substr(folderPath,1,length(folderPath)-1); * name must not be blank; if ( folderPath = '' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank"; end; * must have a starting slash ; if ( substr(folderPath,1,1) ne '/' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH param value must have starting slash"; stop; end; * check if folder already exists ; rc=metadata_pathobj('',cats(folderPath,"(Folder)"),"",objType,objId); if rc ge 1 then do; put "NOTE: Folder " folderPath " already exists!"; stop; end; * do not create a root (one level) folder ; if countc(folderPath,'/')=1 then do; put 'ERR' +(-1) "OR: &sysmacroname will not create a new ROOT folder"; stop; end; * check that root folder exists ; root=cats('/',scan(folderpath,1,'/'),"(Folder)"); if metadata_pathobj('',root,"",objType,parentId)<1 then do; put 'ERR' +(-1) "OR: " root " does not exist!"; stop; end; * check that parent folder exists ; child=scan(folderPath,-1,'/'); parent=substr(folderpath,1,length(folderpath)-length(child)-1); rc=metadata_pathobj('',cats(parent,"(Folder)"),"",objType,parentId); if rc<1 then do; putlog 'The following folders will be created:'; /* folder does not exist - so start from top and work down */ length newpath $1000; paths=0; do x=2 to countw(folderpath,'/'); newpath=''; do i=1 to x; newpath=cats(newpath,'/',scan(folderpath,i,'/')); end; rc=metadata_pathobj('',cats(newpath,"(Folder)"),"",objType,parentId); if rc<1 then do; paths+1; call symputx(cats('path',paths),newpath); putlog newpath; end; call symputx('paths',paths); end; end; else putlog "parent " parent " exists"; call symputx('parentFolderObjId',parentId,'l'); call symputx('child',child,'l'); call symputx('errorcheck',0,'l'); &dbg put (_all_)(=); run; %if &errorcheck=1 or &syscc ge 4 %then %return; %if &paths>0 %then %do x=1 %to &paths; %put executing recursive call for &&path&x; %mm_createfolder(path=&&path&x) %end; %else %do; filename __newdir temp; options noquotelenmax; %local inmeta; %put creating: &path; %let inmeta=$METAREPOSITORY SAS268435456 ; proc metadata in="&inmeta" out=__newdir verbose; run ; /* check it was successful */ data _null_; length objId parentId objType parent child $200 ; call missing (of _all_); rc=metadata_pathobj('',cats("&path","(Folder)"),"",objType,objId); if rc ge 1 then do; putlog "SUCCCESS! &path created."; end; else do; putlog 'ERR' +(-1) "OR: unsuccessful attempt to create &path"; call symputx('syscc',8); end; run; /* write the response to the log for debugging */ %if &mDebug ne 0 %then %do; data _null_; infile __newdir lrecl=32767; input; put _infile_; run; %end; filename __newdir clear; %end; %put &sysmacroname: execution finished for &path; %mend mm_createfolder; %macro mm_deletestp( target= )/*/STORE SOURCE*/; /** * Check STP does exist */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&target",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype ne ClassifierMap %then %do; %put NOTE: No Stored Process found at ⌖ %return; %end; filename __in temp lrecl=10000; filename __out temp lrecl=10000; data _null_ ; file __in ; put ""; put "SAS268436480"; put ""; run ; proc metadata in=__in out=__out verbose;run; /* list the result */ data _null_;infile __out; input; list; run; filename __in clear; filename __out clear; /** * Check deletion */ %local isgone; data _null_; length type uri $256; call missing (of _all_); rc=metadata_pathobj("","&target",'Note',type,uri); call symputx('isgone',type,'l'); run; %if &isgone = ClassifierMap %then %do; %put %str(ERR)OR: STP not deleted from ⌖ %let syscc=4; %return; %end; %mend mm_deletestp; /* system macro dependencies for build process end*/ /* system macros for build process */ %macro mm_createwebservice(path= ,name=initService ,precode= ,code=ft15f001 ,desc=This stp was created automagically by the mm_createwebservice macro ,mDebug=0 ,server=SASApp ,replace=YES ,adapter=sasjs )/*/STORE SOURCE*/; %if &syscc ge 4 %then %do; %put &=syscc - &sysmacroname will not execute in this state; %return; %end; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_createwebservice.sas; %&mD.put _local_; * remove any trailing slash ; %if "%substr(&path,%length(&path),1)" = "/" %then %let path=%substr(&path,1,%length(&path)-1); /** * Add webout macro * These put statements are auto generated - to change the macro, change the * source (mm_webout) and run `build.py` */ filename sasjs temp; data _null_; file sasjs lrecl=3000 ; put "/* Created on %sysfunc(datetime(),datetime19.) by %mf_getuser() */"; /* 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 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 ' '; 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 ' '; put ' '; 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 ' '; put '%else %if &action=OPEN %then %do; '; put ' /* fix encoding */ '; put ' OPTIONS NOBOMFILE; '; put ' '; 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 ' '; 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 ' '; put '%end; '; put ' '; 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 ' '; put '%end; '; put ' '; put '%mend mm_webout; '; /* WEBOUT END */ put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO'; put ' ,maxobs=MAX'; put ');'; put ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing'; put ' ,showmeta=&showmeta,maxobs=&maxobs'; put ' )'; put '%mend;'; run; /* add precode and code */ %local work tmpfile; %let work=%sysfunc(pathname(work)); %let tmpfile=__mm_createwebservice.temp; %local x fref freflist mod; %let freflist= &adapter &precode &code ; %do x=1 %to %sysfunc(countw(&freflist)); %if &x>1 %then %let mod=mod; %let fref=%scan(&freflist,&x); %&mD.put &sysmacroname: adding &fref; data _null_; file "&work/&tmpfile" lrecl=3000 &mod; infile &fref; input; put _infile_; run; %end; /* create the metadata folder if not already there */ %mm_createfolder(path=&path) %if &syscc ge 4 %then %return; %if %upcase(&replace)=YES %then %do; %mm_deletestp(target=&path/&name) %end; /* create the web service */ %mm_createstp(stpname=&name ,filename=&tmpfile ,directory=&work ,tree=&path ,stpdesc=&desc ,mDebug=&mdebug ,server=&server ,stptype=2) /* find the web app url */ %local url; %let url=localhost/SASStoredProcess; data _null_; length url $128; rc=METADATA_GETURI("Stored Process Web App",url); if rc=0 then call symputx('url',url,'l'); run; %put &sysmacroname: STP &name successfully created in &path; %put Check it out here:; %put ;%put ;%put ; %put &url?_PROGRAM=&path/&name; %put ;%put ;%put ; %mend mm_createwebservice; /* system macros for build process end */ * BuildInit start; /** @file @brief Initialise build program for SAS 9 DC

SAS Macros

**/ options nomprint; %global _metaperson _url dcpath; /* set webout if not running in STP mode */ data _null_; if "&sysprocessmode" ne "SAS Stored Process Server" then do; call execute('filename _webout temp;'); end; run; * BuildInit end; %let path=services; %let service=clickme; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put '''';'; put 'put '' '';'; put 'put '' Data Controller'';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '''';'; put 'run;'; put '%sasjsout(HTML)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/admin; %let service=configurator; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief provides the web service to create the control tables'; put '@details'; put '

SAS Macros

'; put '@li dc_getusergroups.sas'; put '@li mf_getuser.sas'; put '@li mf_getapploc.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 '%let root=%mf_getapploc();'; put '/* create web page */'; put 'data _null_;'; put 'file _webout;'; put 'infile datalines ;'; put 'input;'; put 'put _infile_;'; put 'datalines4;'; put ''; put ''; put ''; put ''; put 'Data Controller'; put ''; put ''; put ''; put ''; put ''; put '
'; put '
'; put ''; put 'Data Controller'; put '
'; put '
'; put '
'; put '
'; put '
'; put '
'; put ''; put '
'; put '
'; put 'Terms and Conditions'; put '
'; put '
'; put '
'; put '

Due to the way the Demo version is compiled (in an easy-to-deploy but'; put 'inefficient-to-run format), it should not be deployed to production servers.'; put 'Before proceeding with configuration, please confirm that you have read,'; put 'understood, and agreed to the'; put 'Data Controller for SAS© Evaluation Agreement.'; put '

'; put '
'; put '
'; put '>'; put ''; put '
'; put '
'; put '
'; put ''; put ''; put '
'; put '
'; put '
'; put ''; put ''; put ';;;;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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_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 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_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 mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; 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 mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; 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 mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; put '%macro mm_getstpinfo(pgm'; put ',outds=work.mm_getstpinfo'; put ',mDebug=0'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length type stp_uri tsuri servercontext value $200'; put 'StoredProcessConfiguration $1000 sourcecode_first32k $32767;'; put 'keep path stp_uri sourcecode_first32k StoredProcessConfiguration'; put 'servercontext;'; put 'call missing (of _all_);'; put 'path="&pgm(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,stp_uri)>0 then do;'; put '/* get attributes */'; put 'cnt=1;'; put 'do while (metadata_getnasn(stp_uri,"Notes",cnt,tsuri)>0);'; put 'rc1=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put 'rc2=metadata_getattr(tsuri,"StoredText",sourcecode_first32k);'; put 'end;'; put 'else if value="Stored Process" then do;'; put 'rc3=metadata_getattr(tsuri,"StoredText",StoredProcessConfiguration);'; put 'end;'; put 'cnt+1;'; put 'end;'; put '/* get context (should only be one) */'; put 'rc4=metadata_getnasn(stp_uri,"ComputeLocations",1,tsuri);'; put 'rc5=metadata_getattr(tsuri,"Name",servercontext);'; put 'end;'; put 'else do;'; put 'put ''ERR'' +(-1) "OR: could not find " path;'; put 'put (_all_)(=);'; put 'end;'; put '&md.put (_all_)(=);'; put 'run;'; put '%mend mm_getstpinfo ;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief service for creating the configuration tables in DEMO mode.'; put '@details'; put 'STP for creating the configuration tables in DEMO mode.'; put 'It also adds the STAGING directory as subdirectory to the BASE'; put 'library location.'; put 'Note - the CURLIB var is added during the build process.'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mf_getapploc.sas'; put '@li mf_getuser.sas'; put '@li mf_mkdir.sas'; put '@li mm_createdocument.sas'; put '@li mm_createlibrary.sas'; put '@li mm_createstp.sas'; put '@li mm_deletedocument.sas'; put '@li mm_deletestp.sas'; put '@li mm_getstpcode.sas'; put '@li mm_getstpinfo.sas'; put '@li mp_abort.sas'; put '@li mp_init.sas'; put '@li mpe_makedata.sas'; put '@li mpe_makedatamodel.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 '%mp_init()'; put '%global admin repo path; /* URL params from configurator */'; put '%let repo=%sysfunc(coalescec(&repo,Foundation));'; put '%let admin=%sysfunc(coalescec(&admin,dc-admin));'; put '%let dcpath=%sysfunc(coalescec(&path,NOTFOUND));'; put '%mp_abort(iftrue= ("&dcpath" = "NOTFOUND")'; put ',mac=&_program'; put ',msg=%str(PATH variable was not provided)'; put ')'; put '%let root=%mf_getapploc();'; put '%let work=%sysfunc(pathname(work));'; put '%let dc_libref=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let DC_LIBNAME=Data Controller(&dc_libref);'; put '%let dcpath=&dcpath/&dc_libref;'; put '%put _all_;'; put '%mf_mkdir(&dcpath/dc_staging)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Unable to create &dcpath using &sysuserid)'; put ')'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&root/services/admin,name=permTest)'; put '%mm_deletedocument(target=&root/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &_metaperson does not have WriteMetadata on metadata folder:'; put '&root )'; put ')'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'putlog "dcpath=&dcpath/permTest.txt";'; put 'putlog "sysuserid=&sysuserid";'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &dcpath )'; put ')'; put 'filename delfile "&dcpath/permTest.txt";'; put 'data _null_;'; put 'rc=fdelete(''delfile'');'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )'; put ')'; put '/* get the server context from the current STP */'; put '%mm_getstpinfo(&_program,outds=work.stpinfo)'; put 'data _null_;'; put 'set work.stpinfo;'; put 'call symputx(''serverContext'',serverContext);'; put 'run;'; put '/* create the library */'; put '%mm_createlibrary('; put 'libname=&DC_LIBNAME'; put ',libref=&dc_libref'; put ',libdesc=Data Controller for SAS configuration tables'; put ',engine=BASE'; put ',tree=&root/data'; put ',servercontext=&serverContext'; put ',directory=&dcpath'; put ',mDebug=1'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to create &dc_libref library)'; put ')'; put '/* assign the library */'; put 'libname &dc_libref "&dcpath";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to assign the &dc_libref library)'; put ')'; put '/* make the tables */'; put '/* SASAdministrators */'; put '%mpe_makedatamodel(lib=&dc_libref)'; put '%mpe_makedata(lib=&DC_LIBREF,mpeadmins=&admin,path=%str(&dcpath))'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem creating tables in &DC_LIBREF library\n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT)'; put ')'; put '/* register tables in metadata */'; put 'proc metalib;'; put 'omr (library="&DC_LIBNAME");'; put 'folder="&root/data";'; put 'update_rule=(delete);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem registering metadata for tables in &DC_LIBREF library \n'; put 'os user=&sysuserid \n'; put 'metaperson=%mf_getuser() \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put '/* finally, update the app component. The user will need WM perms for this. */'; put 'data _null_;'; put 'file "&work/settings.sas" mod ;'; put 'put '' '';'; put 'put ''%global DC_LIBREF DC_LIBNAME DC_LIBLOC DC_STAGING_AREA DC_ADMIN_GROUP'';'; put 'put '' DC_REPO_USERS DC_DTTMTFMT DC_MACROS;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&DC_LIBREF;";'; put 'put ''%let DC_LIBNAME='' "&DC_LIBNAME;";'; put 'put ''%let DC_LIBLOC='' "&dcpath;";'; put 'put '' '';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'put ''/* This metadata group has unrestricted access to Data Controller */'';'; put 'put ''%let dc_admin_group='' "&admin;";'; put 'put '' '';'; put 'put ''/* This repository is used to query for users and groups */'';'; put 'put ''%let dc_repo_users='' "&repo;";'; put 'put '' '';'; put 'put ''/* This physical location is used for staging data and audit history */'';'; put 'put ''%let dc_staging_area=&dc_libloc/dc_staging;'';'; put 'put '' '';'; put 'put ''data _null_;'';'; put 'put '' set &DC_LIBREF..mpe_config(where=('';'; put 'put '' var_scope="DC" '';'; put 'put '' and &dc_dttmtfmt. lt tx_to'';'; put 'put '' and var_active=1'';'; put 'put " ));";'; put 'put " call symputx(var_name,var_value,''G'');";'; put 'put '' putlog var_name "=" var_value;'';'; put 'put "run;";'; put 'put '' '';'; put 'put ''/* to override any DC macros with client versions, place them below */'';'; put 'put ''options insert=(sasautos=("&dc_macros"));'';'; put 'run;'; put '/*'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put '*/'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=syscc=&syscc when preparing data_controller_settings)'; put ')'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=settings.sas'; put ',directory=&work'; put ',tree=&root/services/public'; put ',Server=&serverContext'; put ',stptype=2'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str('; put 'Problem updating the dc_staging area in'; put '&root/services/public/DataController Settings \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put ''

Data Controller Config

'';'; put 'put ''

The following items have been successfully configured:

'';'; put 'put "";'; put 'put "

Next Steps:

";'; put 'put "
  1. Populate ";'; put 'put "Table Lineage
  2. ";'; put 'put "
  3. Populate";'; put 'put "Data Catalog
  4. ";'; put 'put "
  5. Now, ";'; put 'put "hereLaunch!
";'; put 'run;'; put '/* We ran successfully, now remove configurator and makedata STPs */'; put '%mm_deletestp(target=&root/services/admin/configurator)'; put '%mm_deletestp(target=&_program)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=makelib; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; put '%macro mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; 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 mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; 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 mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; 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 '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Create a demo (base engine) library'; put '@details'; put 'Creates the library'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mm_createlibrary.sas'; put '@li mm_createdocument.sas'; put '@li mm_deletedocument.sas'; put '@li mp_abort.sas'; put '@li dc_assignlib.sas'; put '@li mm_deletestp.sas'; put '@li mm_createstp.sas'; put '@li mf_mkdir.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 dcpath;'; put '%let dclib=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let dclibname=Data Controller(&dclib);'; put '%let work=%sysfunc(pathname(work));'; put '%let dcpath=&dcpath/&dclib;'; put '%mf_mkdir(&dcpath)'; put '%mf_mkdir(&work)'; put '%put &=dcpath;'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &dcpath )'; put ')'; put 'filename delfile "&dcpath/permTest.txt";'; put 'data _null_;'; put 'rc=fdelete(''delfile'');'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to write to &dcpath)'; put ')'; put 'data _null_;'; put 'pgm="&_program";'; put 'rootlen=length(trim(pgm))-length("/services/admin/makelib");'; put 'root=substr(pgm,1,rootlen);'; put 'putlog root=;'; put 'call symputx(''deploy_dir'',root);'; put 'run;'; put 'options noquotelenmax ps=max;'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&deploy_dir/services/admin,name=permTest)'; put '%mm_deletedocument(target=&deploy_dir/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &_metaperson does not have WriteMetadata on SAS folder:'; put '&deploy_dir )'; put ')'; put '/**'; put '* Create library and load data'; put '*/'; put '%let mpelibname=Data Controller (&dclib);'; put '%mm_createlibrary('; put 'libname=&mpelibname'; put ',libref=&dclib'; put ',libdesc=Configuration tables for the MacroPeople Data Controller application'; put ',engine=BASE'; put ',tree=&deploy_dir/data'; put ',servercontext=SASApp'; put ',directory=&dcpath'; put ',mDebug=1)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to create &dclib library)'; put ')'; put '/* get direct libref */'; put '%dc_assignlib(READ,&dclib)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to assign &dclib library)'; put ')'; put '/* create an initial settings service (this will be overwritten in the'; put 'data update step)'; put '*/'; put '%let temploc=&work/temp.txt;'; put 'data _null_;'; put 'file "&temploc" ;'; put 'put ''/* Data Controller Precode */'' / / ;'; put 'put '' '';'; put 'put ''options noquotelenmax ps=max;'';'; put 'put ''%global DC_LIBREF DC_LIBNAME;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&dclib;";'; put 'put ''%let DC_LIBNAME='' "&mpelibname;";'; put 'put '' '';'; put 'put ''/* get physical path for direct libname - needed to track requests */'';'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref=''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'run;'; put '%mm_deletestp(target=&deploy_dir/services/public/Data_Controller_Settings)'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=temp.txt'; put ',directory=&work'; put ',tree=&deploy_dir/services/public'; put ',Server=SASApp'; put ',stptype=2'; put ',mdebug=1'; put ',stpdesc=Data Controller Configuration'; put ',minify=NO)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue creating settings stp)'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put "

Library &dclib successfully assigned

";'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshtablelineage; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshtablelineage.sas'; put '@brief updates the table level lineage'; put '@details extracts all sources/targets from every job'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li bitemporal_dataloader.sas'; put '@li mp_binarycopy.sas'; put '@li mf_getuniquefileref.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 '/* get list of libraries */'; put '%let fileref1=%mf_getuniquefileref();'; put 'filename &fileref1 temp;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'JobSAS'; put ''; put '8452'; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put '"'; put 'out=&fileref1'; put ';'; put 'run;'; put '/* create an XML map and extract dependencies from response */'; put '%macro getTables(type=);'; put '%local x;'; put '%do x=1 %to 2;'; put '%local dir;'; put '%if &x=1 %then %let dir=Source;'; put '%else %let dir=Target;'; put '%local y;'; put '%do y=1 %to 3;'; put '%local maptype;'; put '%if &y=1 %then %let maptype=ClassifierMap;'; put '%else %if &y=2 %then %let maptype=Select;'; put '%else %if &y=3 %then %let maptype=Join;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "";'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities/TransformationActivi"@;'; put 'put "ty/Steps/TransformationStep/Transformations/&maptype/Classifier"@;'; put 'put "&dir.s/&type";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Name";'; put 'put "characterstring128";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations"@;'; put 'put "/&maptype/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations/"@;'; put 'put "&maptype/Classifier&dir.s/&type/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=&fileref1 xmlmap=sxlemap;'; put 'data work.&dir.&type/view=work.&dir.&type;'; put 'set _xml_.&dir.&type;'; put 'length tabletype maptype $16 tabledirection $1;'; put 'jobname=upcase(jobname);'; put 'tabletype="&type";'; put 'maptype="&maptype";'; put 'if "&dir"="Source" then tabledirection="R";'; put 'else tabledirection=''F'';'; put 'run;'; put 'proc append base=work.alldata data=work.&dir.&type;'; put 'run;'; put 'libname _XML_ clear;'; put '%end;'; put '%end;'; put '%mend getTables;'; put '/* list of types:'; put 'https://support.sas.com/documentation/cdl/en/omamodref/63903/HTML/default/viewer.htm#classifiermap.htm'; put '*/'; put '%getTables(type=PhysicalTable)'; put '%getTables(type=ExternalTable)'; put '%getTables(type=QueryTable)'; put '%getTables(type=RelationalTable)'; put '%getTables(type=Report)'; put '%getTables(type=Cube)'; put '%getTables(type=DataTable)'; put '/* remove dups and get tables */'; put 'proc sort data=work.alldata(keep=jobid jobname tableid tabletype tabledirection)'; put 'out=work.sorted nodupkey;'; put 'by _all_;'; put 'run;'; put 'proc sort data=work.sorted(keep=tableid) out=work.tables nodupkey;'; put 'by tableid;'; put 'run;'; put '/* this bit is slow due to lookups but given the different table types'; put 'it was the easiest approach */'; put 'data work.tables2;'; put 'length tablename liburi puri $64 libref schemaname $8 ;'; put 'if _n_=1 then call missing(tablename, liburi, puri, libref, schemaname);'; put 'set work.tables;'; put 'drop rc liburi;'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc= metadata_getattr(liburi, "SchemaName", SchemaName);'; put 'if ^missing(SchemaName) then do;'; put 'if metadata_getnasn(liburi,"UsedByPackages",1,puri)>0 then do;'; put 'rc=metadata_getattr(puri,"Libref",libref);'; put 'end;'; put 'end;'; put 'else rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'tablename=upcase(tablename);'; put 'run;'; put 'proc sql;'; put 'create table work.augmented as'; put 'select a.*'; put ',b.tablename'; put ',b.libref'; put 'from work.sorted a'; put 'left join work.tables2 b'; put 'on a.tableid=b.tableid;'; put 'create table work.mpe_lineage_tabs as'; put 'select distinct'; put 'coalesce(a.jobid,b.jobid) as jobid,'; put 'coalesce(a.jobname,b.jobname) as jobname,'; put 'coalesce(a.tableid,"N/A") as srctableid,'; put 'a.tabletype as srctabletype,'; put 'a.tablename as srctablename,'; put 'coalesce(a.libref,''nolib'') as srclibref,'; put 'coalesce(b.tableid,"N/A") as tgttableid,'; put 'b.tabletype as tgttabletype,'; put 'b.tablename as tgttablename,'; put 'coalesce(b.libref,''nolib'') as tgtlibref'; put 'from work.augmented(where=(tabledirection=''R'')) a'; put 'full join work.augmented(where=(tabledirection=''F'')) b'; put 'on a.jobid=b.jobid'; put ';'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=MPE_LINEAGE_TABS'; put ',append_dsn=MPE_LINEAGE_TABS'; put ',PK=jobid srctableid tgttableid'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%mp_binarycopy(inref=&fileref1, outref=_webout)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 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 '%local isThere;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere>0 %then %do;'; put 'insert into &syslast set alert_user="&from_user";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data emails;'; put 'set 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 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select user_email into: emails separated by ''" "'' from 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 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 '%local isThere;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere>0 %then %do;'; put 'insert into &syslast set alert_user="&from_user";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data emails;'; put 'set 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 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select user_email into: emails separated by ''" "'' from 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 '%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 '* 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mm_getgroupmembers('; put 'group /* metadata group for which to bring back members */'; put ',outds=work.mm_getgroupmembers /* output dataset to contain the results */'; put ',emails=NO /* set to yes to bring back emails also */'; put ',id=NO /* set to yes if passing an ID rather than group name */'; put ')/*/STORE SOURCE*/;'; put 'data &outds ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'euri email length=$64'; put 'GroupDesc length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp uriMem rcGrp rcMem rc i j arc ;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put '%if &id=NO %then %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Name=''&group''",i,uriGrp);'; put '%end;'; put '%else %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Id=''&group''",i,uriGrp);'; put '%end;'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName, MemberType, email);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'if membertype=''User'' and "&emails"=''YES'' then do;'; put 'if metadata_getnasn(uriMem,"EmailAddresses",1,euri)>0 then do;'; put 'arc=metadata_getattr(euri,"Address",email);'; put 'end;'; put 'end;'; put 'output;'; put 'j+1;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_getgroupmembers;'; put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);'; put '%mm_getgroupmembers(&group,outds=&outds)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 'by base_col selectbox_order;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 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 '%local isThere;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere>0 %then %do;'; put 'insert into &syslast set alert_user="&from_user";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data emails;'; put 'set 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 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select user_email into: emails separated by ''" "'' from 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 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 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 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 '%local isThere;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere>0 %then %do;'; put 'insert into &syslast set alert_user="&from_user";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data emails;'; put 'set 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 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select user_email into: emails separated by ''" "'' from 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 dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 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 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/lineage; %let service=fetchcollineage; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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 meta_mapper('; put 'baseds=work.allmap /* base table to contain metamapping (two level) */'; put ', stageds=col_meta /* temp table to append to base*/'; put ', metaid=OMSOBJ:Column\A5HOSDWY.BF00LWQT'; put ', direction=REVERSE /* either REVERSE or FORWARDS */'; put ', level=0 /* system var - show level of nesting */'; put ', job= /* system var - avoid looping same source */'; put ', levelcheck=50 /* system var - avoid going too deep down the rabbit hole */'; put ', append=NO /* system var - when YES means appending within nested loop */'; put ');'; put '%if &level>&levelcheck %then %return;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%if &direction=REVERSE %then %do;'; put '%let start=Target;'; put '%let finish=Source;'; put '%end;'; put '%else %do;'; put '%let start=Source;'; put '%let finish=Target;'; put '%end;'; put '%if &append=NO %then %do;'; put 'proc datasets lib=work;'; put 'delete %scan(&baseds,2,.);'; put 'quit;'; put '%let index_statement=(index=(HASH/unique));'; put '%end;'; put '%else %let index_statement=;'; put 'data &stageds &index_statement ;'; put 'length HASH $32'; put 'jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform targettablename targetcolname targetcoluri'; put 'uri targettableuri tfmuri sourcetableuri scuri tpuri tmpuri mturi $256'; put 'Derived_Rule $500 Marker_ID Name_ID N_Name LibRef engine sourcePublicType'; put 'targetPublicType $64;'; put 'keep HASH jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform'; put 'targettablename targetcolname targetcoluri Derived_Rule level;'; put '/* proc transpose logic only */'; put 'length sourceshorttablename sourcemembertype sourcelocation'; put 'assoc assocuri name sturi foundrefuri foundfinishuri'; put 'targetshorttablename targetlocation targetmembertype trafoName $256'; put 'sourceshorttableuri sourceshortcoluri checkrdm targetshorttableuri'; put 'targetshortcoluri selected_direction $17'; put 'lturi _location $200;'; put 'call missing (of _all_);'; put '&start.coluri="&METAID";'; put 'level=&level;'; put '/* first get table associated with the column */'; put 'if metadata_getnasn(&start.coluri,''Table'',1,&start.tableuri)=0 then do;'; put 'putlog "ERR" "OR: Table not found";'; put 'stop;'; put 'end;'; put 'rc=metadata_getattr(&start.tableuri,"Name",&start.tablename);'; put 'rc=metadata_getattr(&start.coluri,"Name",&start.colname);'; put 'rc=metadata_getattr(&start.tableuri,''PublicType'',&start.PublicType);'; put 'if (metadata_getnasn(&start.tableuri, "TablePackage",1, tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&start.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&start.tablename'; put ');'; put 'end;'; put 'else if (&start.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&start.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&start.tablename);'; put 'end;'; put 'else &start.tablename = ''work. ''||trim(lowcase(&start.tablename));'; put '/* now loop the Source / TargetFeatureMaps */'; put 'tfm=1;'; put 'do while(metadata_getnasn(&start.coluri,"&start.FeatureMaps",tfm,tfmuri)>0);'; put 'call missing(derived_rule);'; put 'rc=metadata_getattr(tfmuri,''TransformRole'',map_type);'; put '/* get job and step name */'; put 'if (metadata_getnasn(tfmuri,''AssociatedClassifierMap'',1,tmpuri)<1) then'; put 'do;'; put 'rc=metadata_getnasn(tfmuri,"&finish.Transformations",1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''AssociatedClassifierMap'',1,tmpuri);'; put 'end ;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',map_transform);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'if Map_Type = ''DERIVED'' then do;'; put 'if(metadata_getnasn(tfmuri,"SourceCode",1, scuri)>0) then do;'; put '/* standard */'; put 'mturi=tfmuri;'; put 'end;'; put 'else do;'; put '/* some SQL joins store transform rules elsewhere */'; put 'rc=metadata_getnasn(tfmuri,"Feature&start.s",1, tmpuri);'; put 'if (metadata_getnasn(tmpuri,"Variables",1, tmpuri)>0)'; put 'then rc=metadata_getnasn(tmpuri,"OwningTransformation",1, mturi);'; put 'else rc=metadata_getnasn(tfmuri,"Transformation&start.s",1, mturi);'; put 'rc=metadata_getnasn(mturi,"SourceCode",1, scuri);'; put 'end;'; put 'rc=metadata_getattr(scuri,"StoredText",Derived_Rule);'; put 'Derived_Rule = compress(Derived_Rule,''0A''x);'; put '/* loop to generate derived rule (swap ref numbers for col descs) */'; put 'sv=1;'; put 'do while(metadata_getnasn(mturi,"SubstitutionVariables",sv,tmpuri)>0);'; put 'rc=metadata_getattr(tmpuri,"Marker",Marker_ID);'; put 'rc=metadata_getattr(tmpuri,"Name",Name_ID);'; put 'N_Name = compress(scan(Name_ID,2,''-''));'; put 'Derived_Rule=tranwrd('; put 'Derived_Rule,compress(Marker_ID),compress(N_Name)'; put ');'; put 'sv+1;'; put 'end;'; put 'end;'; put '/* get source col attributes */'; put 'fs=1;'; put 'do while(metadata_getnasn(tfmuri,"Feature&finish.s",fs,&finish.coluri)>0);'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put 'rc=metadata_getattr(&finish.tableuri,''PublicType'',&finish.PublicType);'; put 'if (metadata_getnasn(&finish.tableuri,"TablePackage",1,tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put 'else if (&finish.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&finish.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&finish.tablename);'; put 'end;'; put 'else &finish.tablename=compress(''work.''||lowcase(&finish.tablename));'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'fs+1;'; put 'end;'; put 'tfm+1;'; put 'end;'; put '/* No finish URI found - so proceed to see if this is due to transpose */'; put 'if missing(&finish.coluri)'; put 'and (metadata_getnasn(&start.tableuri,"&start.ClassifierMaps",1,tmpuri)>0)'; put 'then do;'; put 'length trafoname $256;'; put 'call missing(trafoName);'; put 'rc=metadata_getattr(tmpuri,''Name'',trafoName);'; put '/* get &finsh.tablename and jobname */'; put 'rc=metadata_getnasn(tmpuri,"Classifier&finish.s",1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put 'rc1=metadata_getnasl(&finish.tableuri,n1,assoc);'; put 'if (assoc="Columns") then do;'; put 'rc2=1;n2=1;'; put 'do while(rc2>0 and missing(foundfinishuri));'; put '/* Walk through all column associations: SpecSourceTransformations*/'; put 'rc2=metadata_getnasn(&finish.tableuri,trim(assoc),n2,assocuri);'; put '/* REVERSE */'; put '%if ("&direction." = "REVERSE") %then %do;'; put 'if metadata_getnasn(assocuri,"SpecSourceTransformations",1,sturi)>0'; put 'then do;'; put 'rc=metadata_getattr(sturi,"Name",name);'; put '/* SAS Transpose: varColumns */'; put 'if (name ="varColumns") then do;'; put 'foundfinishuri = "true"; /* do a while exit */'; put 'put "scource colname name=" name;'; put 'put "scource colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOONE";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get SAS Folder location of the table */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose vertical";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end; /* (name = "_VALUE_COLUMN") */'; put 'end; /* (metadata_getnasn(assocuri2,"Spec&finish.xxx",1,sturi)>0) */'; put '%end; /* &direction = "REVERSE" */'; put '/* FORWARDS: if TargetFeatureMaps not available: -> target! */'; put '%if ("&direction." = "FORWARDS") %then %do;'; put 'if (metadata_getnasn(assocuri,"TargetFeatureMaps",1,sfuri)<0)'; put 'then do;'; put 'rc=metadata_getattr(assocuri,"Name",name);'; put 'if not missing(assocuri) then do;'; put 'put "target colname name=" name;'; put 'put "target colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOMANY";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get table''s SAS Folder location */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose horizontal";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end;'; put 'end;'; put '%end; /* (&direction = "FORWARDS" */'; put 'call missing(assocuri);'; put 'n2+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* (assoc="Columns") */'; put 'call missing(assoc);'; put 'n1+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* missing(&finish.coluri) */'; put '/* ################# end mapping for Transpose flat ################# */'; put 'stop;'; put 'run;'; put 'proc append base=&baseds data=&stageds;'; put 'run;'; put 'data _null_;'; put 'set &stageds;'; put 'call execute(''%meta_mapper(metaid=''!!&finish.coluri'; put '!!",baseds=&baseds"'; put '!!",direction=&direction"'; put '!!",level=%eval(&level+1)"'; put '!!",levelcheck=&levelcheck"'; put '!!",job="!!jobname'; put '!!",append=YES)");'; put 'run;'; put '%mend meta_mapper;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch the metadata and server as dotlang'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li bitemporal_dataloader.sas'; put '@li meta_mapper.sas'; put '@version 9.4'; 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 column_id direction refresh;'; put '/* enable col id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%let max_depth=50;'; put '%put &=inds;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''column_id'',coluri);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''refresh'',refresh);'; put 'if input(max_depth,8.)>0 then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth &=refresh;'; put 'data info;'; put 'length coluri colname taburi tabname liburi libref $256;'; put 'call missing(of _all_);'; put 'if metadata_getattr("&column_id","Name",colname)<0 then do;'; put 'putlog "Col &column_id not found";'; put 'call symputx(''syscc'',''1234'');'; put 'stop;'; put 'end;'; put 'rc=metadata_getnasn("&column_id","Table",1,taburi);'; put 'rc=metadata_getattr(taburi,"Name",tabname);'; put 'rc=metadata_getnasn(taburi,"TablePackage",1,liburi);'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'call symputx(''lib'',libref);'; put 'call symputx(''tab'',tabname);'; put 'call symputx(''col'',colname);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro launcher();'; put '/* check whether a lineage run already taken place */'; put 'proc sql noprint;'; put 'create table existing_data as'; put 'select * from &mpelib..mpe_lineage_cols'; put 'where col_id="&column_id"'; put 'and direction="%substr(&direction,1,1)";'; put '/* no data, so make some, and append it */'; put '%if &sqlobs=0 or &refresh=1 %then %do;'; put '%meta_mapper(metaid=&column_id'; put ', direction=&direction /* either REVERSE or FORWARDS */'; put ', baseds=work.allmap'; put ', levelcheck=%eval(&max_depth-1)'; put ')'; put 'data append;'; put 'length col_id $32 direction $1 modified_by $64;'; put 'retain col_id "&column_id";'; put 'retain direction "%substr(&direction,1,1)";'; put '%global modified_by modified_dttm;'; put '%let modified_dttm=%sysfunc(datetime());'; put 'retain modified_dttm &modified_dttm;'; put 'retain modified_by "%mf_getuser()";'; put '%let modified_by=%mf_getuser();'; put 'set allmap;'; put 'drop hash;'; put 'run;'; put 'proc sort data=append out=appendme nodupkey;'; put 'by col_id direction sourcecoluri targetcoluri map_type map_transform;'; put 'run;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_lineage_cols'; put ',append_dsn=appendme'; put ',PK=col_id direction sourcecoluri targetcoluri map_type map_transform'; put ',etlsource=&_program'; put ',loadtype=UPDATE'; put ',close_vars=col_id direction'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%else %do;'; put '/* data exists, so use it */'; put 'data work.allmap(drop=modified_by modified_dttm);'; put 'set existing_data(drop=col_id direction );'; put 'if _n_=1 then do;'; put 'call symputx(''modified_by'',modified_by,''g'');'; put 'call symputx(''modified_dttm'',modified_dttm,''g'');'; put 'end;'; put 'where level < &max_depth;'; put 'run;'; put '%end;'; put '%mend launcher;'; put '%launcher()'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put 'options noquotelenmax;'; put '%macro fcmpconditional();'; put '%if &sysver=9.3 and &sysscp=WIN %then %do;'; put '/* nothing - as the FCMP function causes an exception err in this case */'; put '%end;'; put '%else %do;'; put '/* prepare quick func to enable word wrapping of transformations */'; put 'options cmplib=work.funcs;'; put 'proc fcmp outlib=work.funcs.macrocore;'; put 'function wordwrap(str $,cols,splitchar $) $;'; put 'length outstr $32767 curstr $5000;'; put 'base=0;'; put 'put str=;'; put 'do i=1 to countw(str,'' '','' '');'; put 'curstr=scan(str,i,'' '');'; put 'outstr=trim(outstr)!!'' ''!!curstr;'; put 'base=base+length(curstr)+1;'; put 'if base>cols then do;'; put 'outstr=cats(outstr,splitchar);'; put 'base=0;'; put 'end;'; put 'end;'; put 'return (outstr);'; put 'endsub;'; put 'run;'; put '%end;'; put '%mend fcmpconditional;'; put '%fcmpconditional()'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table jobs as select distinct jobname as job from work.allmap ;'; put 'create table cols as select distinct upcase(scan(cat,1,''.-'')) as tmplib'; put ',cats(calculated tmplib,''.'',upcase(scan(cat,2,''.''))) as tmptab'; put ',cats(calculated tmptab,''.'',upcase(col)) as col'; put 'from (select sourcetablename as cat, sourcecolname as col from work.allmap'; put 'union select targettablename as cat, targetcolname as col from work.allmap )'; put 'having findc(tmplib,''/\'')=0 and tmplib ne ''WORK'';'; put 'create table files as select distinct file'; put 'from (select sourcetablename as file from work.allmap'; put 'where findc(sourcetablename,''/\'')>0'; put 'union select targettablename as file from work.allmap'; put 'where findc(targettablename,''/\'')>0'; put ') ;'; put 'create table libs as select distinct tmplib as lib from cols;'; put 'create table tabs as select distinct tmptab as tab from cols;'; put 'data _null_;'; put 'file tmp;'; put 'put ''digraph G {'; put 'concentrate=true;'; put 'node [style=filled,shape=plain];'; put 'labelloc = "t";'; put ''';'; put 'label= "label=<'; put ''; put ''; put ''; put ''; put ''; put ''; put '
&direction Lineage for &col
Library:
&libGenerated by:&modified_by
Table:&tabGenerated on:'; put '%sysfunc(round(&modified_dttm,2),datetime19.)
>";'; put 'put label;'; put 'if "FORWARD"="&direction" then call symputx(''dirdesc'',''Impacted'');'; put 'else call symputx(''dirdesc'',''Source'');'; put '/* close out if there is no lineage */'; put 'if nobs=0 then put ''x [label="No lineage found" shape=Mdiamond]}'';'; put 'set work.allmap nobs=nobs;'; put 'stop;'; put 'run;'; put 'data graphviz1;'; put 'file tmp mod;'; put 'length line arrow $1000 stab ttab slib tlib $100 sbox tbox tooltip $500;'; put 'if _n_=1 then call missing(line, sbox, tbox, tooltip);'; put 'set work.allmap ;'; put 'sourceid=sourcecoluri;'; put 'targetid=targetcoluri;'; put 'if index(sourcetablename,'':'') then do;'; put 'slib='''';'; put 'stab=sourcetablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'stab=scan(sourcetablename,-1,''/\'');'; put 'slib=subpad(sourcetablename,1,length(sourcetablename)-length(stab));'; put 'end;'; put 'else do;'; put 'slib=scan(sourcetablename,1,''.'');'; put 'stab=scan(sourcetablename,2,''.'');'; put 'end;'; put 'if index(targettablename,'':'') then do;'; put 'tlib='''';'; put 'ttab=targettablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'ttab=scan(targettablename,-1,''/\'');'; put 'tlib=subpad(targettablename,1,length(targettablename)-length(ttab));'; put 'end;'; put 'else do;'; put 'tlib=scan(targettablename,1,''.'');'; put 'ttab=scan(targettablename,2,''.'');'; put 'end;'; put 'if trim(derived_rule) ne '''' then do;'; put 'derived_rule=tranwrd(derived_rule,''"'',''\"'');'; put '%macro quick();'; put '%if "&sysver"="9.3" and "&sysscp"="WIN" %then %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',derived_rule,''"]'');'; put '%end;'; put '%else %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',wordwrap(derived_rule,24,''\n''),''"]'');'; put '%end;'; put '%mend quick; %quick()'; put 'end;'; put 'else arrow=cats(''[ label="'',map_transform,''"]'');'; put 'source=quote(strip(sourceid));'; put 'target=quote(strip(targetid));'; put 'put '' '' source '' -> '' target arrow;'; put 'run;'; put 'data graphviz2 (keep=id tab lib col tooltip map_transform);'; put 'set graphviz1 (rename=(source=id stab=tab slib=lib sourcecolname=col ))'; put 'graphviz1 (rename=(target=id ttab=tab tlib=lib targetcolname=col ));'; put 'if upcase(lib)=:''WORK'' then tooltip=cats('',tooltip="Job:'',jobname,''"'');'; put 'else tooltip='''';'; put 'run;'; put 'proc sort data=graphviz2 out=graphviz3 noduprec; by _all_; run;'; put 'data _null_;'; put 'length shape $100 ;'; put 'set graphviz3 end=last;'; put 'file tmp mod;'; put 'tab=tranwrd(tab,''\'',''\\'');'; put 'tab=tranwrd(tab,''&'',''&'');'; put 'lib=tranwrd(lib,''&'',''&'');'; put 'if upcase(lib)=:''WORK'' then do;'; put 'lib=''WORK'';'; put 'put id ''[label=<
Table'' tab'; put '''
Column'' col'; put '''
> ,fillcolor=lightgrey, shape=" " '' tooltip '']'';'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'put id ''[label="Location: '' lib ''\nFile:'' tab ''\nColumn: '' col'; put '''",shape=parallelogram, fillcolor="#00b300"'' tooltip '']'';'; put 'end;'; put 'else do;'; put 'engine=scan(lib,2,''-'');'; put 'lib=scan(lib,1,''-'');'; put 'if engine=''BASE'' then fillcolour=''lightyellow '';'; put 'else fillcolour=''lightblue'';'; put 'shape='' shape=cylinder, fillcolor= ''!!fillcolour;'; put 'put id ''[label=<
Library'' lib'; put '''
Table'' tab'; put '''
Column'' col'; put '''
> ,'' shape tooltip '']'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file tmp mod;'; put '/* close out if records exist */'; put 'set work.allmap;'; put 'put ''}'';'; put 'stop;'; put 'run;'; put 'data flatdata;'; put 'length type $8 item $256;'; put 'keep type item;'; put 'set cols(in=cols) tabs(in=tabs) files(in=files) libs(in=libs) jobs(in=jobs);'; put 'if cols then do;'; put 'type=''Column'';'; put 'item=col;'; put 'end;'; put 'else if tabs then do;'; put 'type=''Table'';'; put 'item=tab;'; put 'end;'; put 'else if files then do;'; put 'type=''File'';'; put 'item=file;'; put 'end;'; put 'else if libs then do;'; put 'type=''Library'';'; put 'item=lib;'; put 'end;'; put 'else if jobs then do;'; put 'type=''Job'';'; put 'item=job;'; put 'end;'; put 'run;'; put 'data fromSAS;'; put 'infile tmp end=last;'; put 'file tmp;'; put 'input ;'; put 'string=_infile_;'; put 'put string;'; put 'run;'; put 'filename tmp clear;'; put '/* get list of IDs so frontend can make a clickable list */'; put 'proc sql;'; put 'create table ids as select distinct id from graphviz3;'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS)'; put '%webout(OBJ,ids,dslabel=clickableIDS)'; put '%webout(OBJ,info)'; put '%webout(OBJ,flatdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=fetchtablelineage; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch Table Lineage for SAS 9'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; 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 '%global table_id direction graphOrientation;'; put '/* enable table id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put '%let max_depth=50;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''table_id'',table_id);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''graphOrientation'',''LR'');'; put 'if max_depth>''0'' then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth;'; put '%mp_abort(iftrue= (&table_id=undefined)'; put ',mac=&_program'; put ',msg=%str(Table_id UNDEFINED provided from frontend)'; put ')'; put 'data work.info;'; put 'length tableid tablename liburi $64 libref $8;'; put 'drop rc;'; put 'tableid="&table_id";'; put 'call missing(liburi);'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'tablename=upcase(tablename);'; put 'if missing(libref) then libref=''nolib'';'; put 'call symputx(''libds'',cats(libref,''.'',tablename));'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%let src=%sysfunc(ifc(&direction=REVERSE,src,tgt));'; put '%let tgt=%sysfunc(ifc(&direction=REVERSE,tgt,src));'; put 'data work.sourcetable/view=work.sourcetable;'; put 'set &mpelib..MPE_LINEAGE_TABS;'; put 'where &dc_dttmtfmt. lt tx_to ;'; put 'drop tx_from tx_to;'; put 'run;'; put '%macro recursivejoin(iter=0'; put ',maxiter=&max_depth /* avoid infinite loop */'; put ');'; put '%if &iter=0 %then %do;'; put 'data work.baseds ;'; put 'retain level 0;'; put 'set work.sourcetable;'; put 'where &tgt.tableid="&table_id";'; put 'run;'; put '%let iter=1;'; put 'proc sql;'; put '%end;'; put '%else %if &iter>&maxiter %then %return;'; put 'create table work.appendds as'; put 'select distinct &iter as level'; put ',b.*'; put 'from work.baseds a'; put 'left join work.sourcetable b'; put 'on a.&src.tableid=b.&tgt.tableid'; put 'where a.level=%eval(&iter.-1)'; put 'and b.&src.tableid is not null'; put 'and a.&src.tableid is not null'; put 'and a.&src.tableid ne ''N/A'';'; put '%let obs=&sqlobs;'; put 'insert into work.baseds select * from work.appendds;'; put '%if &obs %then %do;'; put '%recursivejoin(iter=%eval(&iter.+1) )'; put '%end;'; put '%mend recursivejoin;'; put '%recursivejoin()'; put 'proc sql;'; put 'create table work.final as'; put 'select distinct *'; put 'from work.baseds(drop=level)'; put 'where jobid is not null;'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table work.jobs as'; put 'select distinct jobid'; put ', jobname'; put ',quote(cats(jobid))||'' [label=''||quote(cats(jobname))||''];'' as line'; put 'from work.final;'; put 'create table work.tables as'; put 'select distinct &src.tableid as tableid'; put ',&src.tablename as tablename'; put ',&src.libref as libref'; put 'from work.final'; put 'where &src.tableid ne ''N/A'''; put 'union select'; put '&tgt.tableid as tableid'; put ',&tgt.tablename as tablename'; put ',&tgt.libref as libref'; put 'from work.final'; put 'where &tgt.tableid ne ''N/A'''; put 'order by libref, tablename;'; put 'create table idlookup as'; put 'select tableid as metaid'; put ',''TABLE'' as metatype'; put ',cats(libref,''.'',tablename) as metaname'; put 'from work.tables'; put 'union'; put 'select jobid as metaid'; put ',''JOB'' as metatype'; put ',jobname as metaname'; put 'from work.jobs'; put 'order by metaid;'; put 'data CRAYONS;'; put 'length attribute value $8;'; put 'infile datalines4 dsd;'; put 'input attribute value;'; put 'call symput(cats(''col'',_n_),quote(trim(value)));'; put 'datalines;'; put 'red,#e6194b'; put 'green,#3cb44b'; put 'blue,#4363d8'; put 'orange,#f58231'; put 'purple,#911eb4'; put 'cyan,#46f0f0'; put 'magenta,#f032e6'; put 'lime,#bcf60c'; put 'pink,#fabebe'; put 'teal,#008080'; put 'lavender,#e6beff'; put 'brown,#9a6324'; put 'beige,#fffac8'; put 'maroon,#800000'; put 'mint,#aaffc3'; put 'olive,#808000'; put 'apricot,#ffd8b1'; put 'navy,#000075'; put 'gray,#808080'; put 'black,#00000'; put 'yellow,#ffe119'; put 'white,#ffffff'; put ';;;;'; put 'run;'; put 'proc sort data=work.tables out=work.libs nodupkey;'; put 'by libref;'; put 'run;'; put 'data work.alllibs;'; put 'set work.libs end=last;'; put 'length line $1000. ;'; put 'crayon=symget(cats(''col'',_n_));'; put 'call symputx(libref,crayon);'; put 'if _n_=1 then do;'; put 'line=''subgraph cluster_libs { label="Libraries";'';output;'; put 'end;'; put 'line=cats(libref)!!'' [label=''||quote(cats(libref))||''; style="filled"; color='''; put '||cats(crayon)||'', shape = Mrecord, fontcolor=white]'';output;'; put 'if last then do;'; put 'line=''}'';output;'; put 'end;'; put 'run;'; put 'data alltables;'; put 'length line $1000. ;'; put 'set work.tables;'; put 'crayon=symget(libref);'; put 'line=quote(cats(tableid))||'' [label="''||cats(tablename)'; put '!!''", color=''!!cats(crayon)'; put '!!'', shape=cylinder,style=filled,fontcolor=white];'';'; put 'output;'; put 'run;'; put 'proc sort'; put 'data=final(keep=&src.tableid jobid &src.libref) out=&src.relations nodupkey;'; put 'by &src.tableid jobid;'; put 'proc sort'; put 'data=final(keep=&tgt.tableid jobid &tgt.libref) out=&tgt.relations nodupkey;'; put 'by jobid &tgt.tableid;'; put 'run;'; put 'data srcrelations;'; put 'set srcrelations;'; put 'length line $1000;'; put 'where srctableid ne ''N/A'';'; put 'line=cats('; put '''"'',cats(srctableid),''" -> "'',jobid,''" [color='',symget(srclibref),''];'''; put ');'; put 'data tgtrelations;'; put 'set tgtrelations;'; put 'where tgttableid ne ''N/A'';'; put 'length line $1000;'; put 'line=cats('; put '''"'',cats(jobid),''" -> "'',tgttableid,''" [color='',symget(tgtlibref),''];'''; put ');'; put 'run;'; put 'data finalfinal;'; put 'set work.alllibs(keep=line) work.alltables (keep=line) work.jobs(keep=line)'; put 'work.&src.relations(keep=line) work.&tgt.relations(keep=line) end=last;'; put 'if _N_ = 1 then do;'; put 'firstline=line;'; put 'line=''strict digraph "''!!"&libds"!!''" {''; output;'; put 'line="rankdir=&graphOrientation; nodesep=0.5; node [shape = octagon];";output;'; put 'line=firstline;'; put 'end;'; put 'output;'; put 'if last then do;'; put 'line=''}'';'; put 'output;'; put 'end;'; put 'drop firstline;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,finalfinal)'; put '%webout(OBJ,info)'; put '%webout(OBJ,final,dslabel=flatdata)'; put '%webout(OBJ,idlookup)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetacols; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetacols.sas'; put '@brief List the cols as defined in metadata'; put '@details Provide a table uri and get list of columns'; put '

SAS Macros

'; put '@li mm_getcols.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 '%global tableuri;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''tableuri'',scan(tableuri,-1,''\''));'; put 'run;'; put '%put &=tableuri;'; put '/* load parameters */'; put '%mm_getcols(tableuri=&tableuri,outds=metacols)'; put 'data out;'; put 'set metacols;'; put 'keep col:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,out,dslabel=metacols)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetatables; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetatables.sas'; put '@brief List the tables as defined in metadata'; put '@details Provide a library uri and get list of tables'; put '

SAS Macros

'; put '@li mm_gettables.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 '%global liburi;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''liburi'',liburi);'; put 'run;'; put '/* load parameters */'; put '%mm_gettables(uri=&liburi,outds=metatables,getauth=NO)'; put 'data out;'; put 'set metatables;'; put 'keep table:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,metatables)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/metanav; %let service=metadetails; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getdetails(uri'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ')/*/STORE SOURCE*/;'; put 'data &outassocs;'; put 'keep assoc assocuri name;'; put 'length assoc assocuri name $256;'; put 'call missing(of _all_);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put '/* Walk through all possible associations of this object. */'; put 'rc1=metadata_getnasl("&uri",n1,assoc);'; put 'rc2=1;n2=1;'; put 'do while(rc2>0);'; put '/* Walk through all the associations on this machine object. */'; put 'rc2=metadata_getnasn("&uri",trim(assoc),n2,assocuri);'; put 'if (rc2>0) then do;'; put 'rc3=metadata_getattr(assocuri,"Name",name);'; put 'output;'; put 'end;'; put 'call missing(name,assocuri);'; put 'n2+1;'; put 'end;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by assoc name;'; put 'run;'; put 'data &outattrs;'; put 'keep type name value;'; put 'length type $4 name $256 value $32767;'; put 'rc1=1;n1=1;type=''Prop'';name='''';value='''';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnprp("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'rc1=1;n1=1;type=''Attr'';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnatr("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by type name;'; put 'run;'; put '%mend mm_getdetails;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metadetails.sas'; put '@brief Retrieves metadata attributes and associations for a particular object'; put '@details'; put '

SAS Macros

'; put '@li mm_getdetails.sas'; put '@li mpe_getvars.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 '%mpe_getvars(SASControlTable, SASControlTable)'; put '%mm_getdetails(&objecturi'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,attributes)'; put '%webout(OBJ,associations)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metaobjects; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getobjects('; put 'type=SASLibrary'; put ',outds=work.mm_getobjects'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"$METAREPOSITORY'; put '&typeSAS'; put '0"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Id";'; put 'put "characterstring200";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Name";'; put 'put "characterstring200";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getobjects;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metaobjects.sas'; put '@brief Retrieves list of objects for a particular metadata type'; put '@details'; put '

SAS Macros

'; put '@li mm_getobjects.sas'; put '@li mpe_getvars.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 '%mpe_getvars(SASControlTable, SASControlTable)'; put 'options metarepository=&repo;'; put '%mm_getobjects('; put 'type=&metatype'; put ',outds=work.objects'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,objects)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metarepos; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metarepos.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_getrepos.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 '%mm_getrepos(outds=work.repos)'; put 'data outrepos;'; put 'set repos;'; put 'if repositorytype in (''CUSTOM'',''FOUNDATION'');'; put 'keep id name description;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,outrepos)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metatypes; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_gettypes('; put 'outds=work.mm_gettypes'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put ''; put 'SAS'; put ''; put '2048'; put ''; put ''; put '$METAREPOSITORY'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put ''//GetTypes/Types/Type'';'; put 'put ''64'';'; put 'put ''//GetTypes/Types/Type/@Id'';'; put 'put ''256'';'; put 'put ''//GetTypes/Types/Type/@Desc'';'; put 'put '''';'; put 'put ''//GetTypes/Types/Type/@HasSubtypes'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.sastypes out=&outds;'; put 'by id;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_gettypes;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metatypes.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_gettypes.sas'; 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 '%mm_gettypes(outds=work.types)'; put '%webout(OPEN)'; put '%webout(OBJ,types)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '%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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; put '%macro mm_createdataset(libds=,tableuri=,outds=work.mm_createdataset,mDebug=0);'; put '%local dbg errorcheck tempds1 tempds2 tempds3;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%let errorcheck=1;'; put '%if %index(&libds,.)>0 %then %do;'; put '/* get lib uri */'; put 'data;run;%let tempds1=&syslast;'; put '%mm_getlibs(outds=&tempds1)'; put 'data _null_;'; put 'set &tempds1;'; put 'if upcase(libraryref)="%upcase(%scan(&libds,1,.))";'; put 'call symputx(''liburi'',LibraryId,''l'');'; put 'run;'; put '/* get ds uri */'; put 'data;run;%let tempds2=&syslast;'; put '%mm_gettables(uri=&liburi,outds=&tempds2)'; put 'data _null_;'; put 'set &tempds2;'; put 'where upcase(tablename)="%upcase(%scan(&libds,2,.))";'; put '&dbg putlog tableuri=;'; put 'call symputx(''tableuri'',tableuri);'; put 'run;'; put '%end;'; put 'data;run;'; put '%let tempds3=&syslast;'; put '%mm_getcols(tableuri=&tableuri,outds=&tempds3)'; put '%if %mf_nobs(&tempds3)=0 %then %do;'; put '%put &libds (&tableuri) has no columns defined!!;'; put 'data &outds;'; put 'run;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'set &tempds3 end=last;'; put 'if _n_=1 then call execute(''data &outds;'');'; put 'length attrib $32767;'; put 'if SAScolumntype=''C'' then type=''$'';'; put 'attrib=''attrib ''!!cats(colname)!!'' length=''!!cats(type,SASColumnLength,''.'');'; put 'if not missing(sasformat) then fmt='' format=''!!cats(sasformat);'; put 'if not missing(sasinformat) then infmt='' informat=''!!cats(sasinformat);'; put 'if not missing(coldesc) then desc='' label=''!!quote(cats(coldesc));'; put 'attrib=trim(attrib)!!fmt!!infmt!!desc!!'';'';'; put 'call execute(attrib);'; put 'if last then call execute(''call missing(of _all_);stop;run;'');'; put 'run;'; put '%mend mm_createdataset;'; put '%macro dc_createdataset(libds=mm_getlibs,outds=viewdata);'; put '%mm_createdataset(libds=&libds,outds=viewdata)'; put '%mend dc_createdataset;'; put '%macro mm_gettableid('; put 'libref='; put ',ds='; put ',outds=work.mm_gettableid'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length uri usingpkguri id type tableuri tablename tmpuri $256;'; put 'call missing(of _all_);'; put 'keep tableuri tablename;'; put 'n=1;'; put 'rc=0;'; put 'if metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",n,uri)<1 then do;'; put 'put "Library &libref not found";'; put 'stop;'; put 'end;'; put '&mD.putlog "uri is " uri;'; put 'if metadata_getnasn(uri, "UsingPackages", 1, usingpkguri)>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put '&mD.putlog "Type is " type;'; put 'end;'; put 'if type=''DatabaseSchema'' then tmpuri=usingpkguri;'; put 'else tmpuri=uri;'; put 't=1;'; put 'do while(metadata_getnasn(tmpuri, "Tables", t, tableuri)>0);'; put 't+1;'; put 'rc= metadata_getattr(tableuri, "Name", tablename);'; put '&mD.putlog "Table is " tablename;'; put 'if upcase(tablename)="%upcase(&ds)" then do;'; put 'output;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_gettableid;'; put '%macro dc_gettableid(libref='; put ',ds='; put ',outds=);'; put '%mm_gettableid(libref=&libref,ds=&ds,outds=&outds)'; put '%if %mf_nobs(&outds)=0 %then %do;'; put 'data &outds;'; put 'tableuri='''';'; put 'tablename="&ds";'; put 'run;'; put '%end;'; 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 '%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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/usernav; %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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 mp_abort.sas'; put '@li mm_getusers.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 '%macro x();'; put '%if %sysfunc(exist(work.iwant)) ne 1 %then %do;'; put '/* macro called by configurator - grab the URI of calling user */'; put '%mm_getusers(user=&_metaperson, outds=work.iwant)'; put '%end;'; put '%mend x;'; put '%x()'; put 'data groups'; put 'roles(rename=(groupuri=roleuri groupname=rolename groupdesc=roledesc)) ;'; put 'length uri groupuri groupname groupdesc publictype str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "WARNING: No groups found for ";'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri, "PublicType", PublicType);'; put 'a+1;'; put 'if PublicType = ''Role'' then output roles;'; put 'else output groups;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'keep groupuri groupname groupdesc;'; put 'if _n_=1 then delete; /* no content so don''t send empty row */'; put 'run;'; put 'data emails;'; put 'keep email type;'; put 'length emailuri email type uri str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put '/* credit'; put 'https://seleritysas.com/data-step-view-of-email-addresses-in-sas-metadata'; put '*/'; put 'emailrc=1;email_count=1;'; put 'do while(emailrc>0);'; put '/* Get Email from Person */'; put 'emailrc=metadata_getnasn(uri,"EmailAddresses",email_count,emailuri);'; put 'arc=1;'; put 'if (emailrc>0) then do;'; put 'arc=metadata_getattr(emailuri,"Address",email);'; put 'arc=metadata_getattr(emailuri,"EmailType",type);'; put 'end;'; put 'if (arc=0) then output emails;'; put 'email_count=email_count+1;'; put 'end;'; put 'run;'; put 'data logins;'; put 'length domain userid loginuri domainuri uri $256;'; put 'keep domain userid;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'login_count=1;'; put 'do while(metadata_getnasn(uri,"Logins",login_count,loginuri)>0);'; put 'rc=metadata_getattr(loginuri,"UserID",userid);'; put 'rc=metadata_getnasn(loginuri,"Domain",1,domainuri);'; put 'rc=metadata_getattr(domainuri,"Name",domain);'; put 'output;'; put 'login_count+1;'; put 'end;'; put 'run;'; put 'data info;'; put 'length uri name displayname metadatacreated metadataupdated $256;'; put 'keep name displayname metadatacreated metadataupdated;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'rc=metadata_getattr(uri,"Name",name);'; put 'rc=metadata_getattr(uri,"DisplayName",displayname);'; put 'rc=metadata_getattr(uri,"MetadataCreated",MetadataCreated);'; put 'rc=metadata_getattr(uri,"MetadataUpdated",MetadataUpdated);'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,emails)'; put '%webout(OBJ,groups)'; put '%webout(OBJ,roles)'; put '%webout(OBJ,logins)'; put '%webout(OBJ,info)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getusers;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getusers(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getusers(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getusers(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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 '@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 sasMembers ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'GroupDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp rcGrp rcMem rc i j;'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(groupid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'output;'; put 'j+1;'; put 'call missing(email,emailuri);'; put 'end;'; put 'end;'; put 'if _n_=1 then delete;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembersbyrole; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembersbyrole.sas'; put '@brief List the members of a role'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.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 'data sasMembers sasgroups;'; put 'attrib uriGrp uriMem roleId roleName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'roleDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(roleid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,roleId,roleName,Group_or_Role'; put ',MemberName,MemberType,roleDesc);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",roleId);'; put 'rc = metadata_getattr(uriGrp,"Name",roleName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",roleDesc);'; put 'j=1;'; put 'if Group_or_Role=''Role'' then do while'; put '(metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'call missing(email,emailuri);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'if membertype=''UserGroup'' then output sasgroups;'; put 'else output sasmembers;'; put 'j+1;'; put 'end;'; put 'end;'; put 'if _n_=1 then delete; /* no roles so don''t send empty row */'; put 'keep uriMem membertype membername MemberCreated MemberUpdated email;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasGroups)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=userroles; 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getroles('; put 'outds=work.mm_getroles'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put 'options noquotelenmax;'; put 'proc metadata in= ''$METAREPOSITORY'; put 'IdentityGroupSAS388'; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Id";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Name";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Desc";'; put 'put "";'; put 'put "characterstring500";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.roles out=&outds;'; put 'by rolename;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getroles;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getroles(outds=mm_getroles);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getroles(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getroles(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getroles;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file userroles.sas'; put '@brief List all SAS Roles'; put '@details Gets a list of all SAS Roles'; put '

SAS Macros

'; put '@li dc_getroles.sas'; put '@li mpeinit.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 '%dc_getroles(outds=roles)'; put '%webout(OPEN)'; put '%webout(OBJ,roles)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_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 '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, 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 mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_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 '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; 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 [out] fref= (_webout) The fileref to which to write the JSON'; 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] 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 '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; 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 webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_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 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 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 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 mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %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 '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; 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 '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; 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; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9; %let service=index-html; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4KICAgIDx0aXRsZT5EYXRhIENvbnRyb2xsZXI8L3RpdGxlPgogICAgPCEtLSA8YmFzZSBocmVmPSIvIj4gLS0+CgogICAgPCEtLSBtZXRhIHRhZ3MgLS0+CiAgICA8bWV0YSBuYW1lPSJk''@;'; put 'put ''ZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVy''@;'; put 'put ''ZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9ImltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8v''@;'; put 'put ''ZGVtby5kYXRhY29udHJvbGxlci5pbyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iRGF0YSBDb250cm9sbGVyIGZvciBTQVPCriIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9n''@;'; put 'put ''OmRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9pbWcvZGNfYmdfQXNzZXQtNUAyeC5wbmciLz4KCiAgICA8bWV0YSBu''@;'; put 'put ''YW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPgogICAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhy''@;'; put 'put ''ZWY9ImltYWdlcy9mYXZpY29uLmljbyIvPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGVzLjU5ZGMxMTk0N2I4MzE0M2MuY3NzIj48L2hlYWQ+CgogIDwhLS0KICAgICMjIFNBU0pTIEFkYXB0ZXIgY29uZmlnIGRldGFpbHMgIyMKCiAgICAqIGFwcExvYzogVGhlIGxvY2F0''@;'; put 'put ''aW9uIGluIG1ldGFkYXRhIG9yIFNBUyBkcml2ZSB3aGVyZSBEQyB3aWxsIGJlIGRlcGxveWVkCiAgICAqIHNlcnZlclR5cGU6IGVpdGhlciBTQVM5LCBTQVNWSVlBIG9yIFNBU0pTCiAgICAqIGxvZ2luTWVjaGFuaXNtOiBVc2UgJ0RlZmF1bHQnIGZvciByZWd1bGFyICh1c2VyL3Bhc3MpIGxv''@;'; put 'put ''Z2lucywgb3IgJ1JlZGlyZWN0ZWQnIGZvciAyRkEvU1NPCiAgICAqIGRlYnVnOiBXaGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBvbiBzdGFydHVwCgogICAgIyMgVml5YSBvbmx5IHNldHRpbmdzICMjCiAgICAqIGFkbWluR3JvdXA6IFRoaXMgZ3JvdXAgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBh''@;'; put 'put ''Y2Nlc3MgKFZpeWEgT25seSkKICAgICogZGNQYXRoOiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gaW4gd2hpY2ggdG8gZGVwbG95IHRoZSBzdGFnaW5nIGFyZWEgKFZpeWEgb25seSkKICAgICogdXNlQ29tcHV0ZUFwaTogQ29ubmVjdGlvbiBtZXRob2QgKFZpeWEgb25seSkKICAgICogY29udGV4''@;'; put 'put ''dE5hbWU6IENvbXB1dGUgQ29udGV4dCAoVml5YSBvbmx5KQoKICAtLT4KCiAgPHNhc2pzIHNlcnZlcnVybD0iIiBhcHBsb2M9Ii9QdWJsaWMvYXBwL2RjIiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1''@;'; put 'put ''ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlv''@;'; put 'put ''biI+CiAgPC9zYXNqcz4KCiAgPGJvZHkgY2xhc3M9Im0tMCI+CiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSJydW50aW1lLmMzMTZhYzUxZDU5NjY3MTMuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InBvbHlmaWxscy44N2RiYmQzZmFhYmVkNTEz''@;'; put 'put ''LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJtYWluLjYzZGEwZDA3ZGVmZmRiYmYuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PC9ib2R5Pgo8L2h0bWw+Cg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.63da0d07deffdbbf-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1sxNzldLHs3NDA5MjpmdW5jdGlvbihhdCl7YXQuZXhwb3J0cz1mdW5jdGlvbihJZSl7dmFyIEY9e307ZnVuY3Rpb24gYWUoeCl7aWYoRlt4XSlyZXR1cm4g''@;'; put 'put ''Rlt4XS5leHBvcnRzO3ZhciBtPUZbeF09e2k6eCxsOiExLGV4cG9ydHM6e319O3JldHVybiBJZVt4XS5jYWxsKG0uZXhwb3J0cyxtLG0uZXhwb3J0cyxhZSksbS5sPSEwLG0uZXhwb3J0c31yZXR1cm4gYWUubT1JZSxhZS5jPUYsYWUuZD1mdW5jdGlvbih4LG0sbGUpe2FlLm8oeCxtKXx8T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KHgsbSx7ZW51bWVyYWJsZTohMCxnZXQ6bGV9KX0sYWUucj1mdW5jdGlvbih4KXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoeCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KHgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxhZS50PWZ1bmN0aW9uKHgsbSl7aWYoMSZtJiYoeD1hZSh4KSksOCZtfHw0Jm0mJiJvYmplY3QiPT10eXBlb2YgeCYmeCYmeC5fX2VzTW9kdWxlKXJldHVybiB4O3ZhciBsZT1PYmplY3QuY3JlYXRlKG51''@;'; put 'put ''bGwpO2lmKGFlLnIobGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6eH0pLDImbSYmInN0cmluZyIhPXR5cGVvZiB4KWZvcih2YXIgTSBpbiB4KWFlLmQobGUsTSxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0uYmluZChudWxsLE0pKTty''@;'; put 'put ''ZXR1cm4gbGV9LGFlLm49ZnVuY3Rpb24oeCl7dmFyIG09eCYmeC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHguZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4geH07cmV0dXJuIGFlLmQobSwiYSIsbSksbX0sYWUubz1mdW5jdGlvbih4LG0pe3JldHVybiBPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoeCxtKX0sYWUucD0iIixhZShhZS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5k''@;'; put 'put ''ICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLkNsYXJpdHlJY29uc0FwaT12b2lkIDA7dmFyIHg9YWUoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2pl''@;'; put 'put ''Y3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLG09e30sbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBNKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTS5zaW5nbGVJbnN0YW5jZXx8''@;'; put 'put ''KE0uc2luZ2xlSW5zdGFuY2U9bmV3IE0pLE0uc2luZ2xlSW5zdGFuY2V9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksTS5wcm90b3R5cGUudmFsaWRhdGVOYW1lPWZ1bmN0aW9uKE8pe2lmKDA9PT1PLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMg''@;'; put 'put ''bXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmchIik7aWYoL1xzLy50ZXN0KE8pKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IG5vdCBjb250YWluIGFueSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMhIik7cmV0dXJuITB9LE0ucHJvdG90eXBlLm5vcm1hbGl6ZVNoYXBl''@;'; put 'put ''TmFtZT1mdW5jdGlvbihPKXtyZXR1cm4gTy50b0xvd2VyQ2FzZSgpfSxNLnByb3RvdHlwZS5zZXRJY29uVGVtcGxhdGU9ZnVuY3Rpb24oTyxSKXt2YXIgej1SLnRyaW0oKTt0aGlzLnZhbGlkYXRlTmFtZShPKSYmKE89dGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoTyksbVtPXSYmZGVsZXRlIG1b''@;'; put 'put ''T10sbVtPXT16LHguU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLmVtaXRDaGFuZ2VzKE8seikpfSxNLnByb3RvdHlwZS5zZXRJY29uQWxpYXNlcz1mdW5jdGlvbihPLFIseil7Zm9yKHZhciBLPTAsST16O0s8SS5sZW5ndGg7SysrKXt2YXIgaz1JW0tdO3RoaXMudmFsaWRhdGVOYW1l''@;'; put 'put ''KGspJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoTyxrLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT1tSXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihPKXtpZigib2JqZWN0IiE9dHlwZW9mIE8pdGhyb3cgbmV3IEVycm9yKCdUaGUg''@;'; put 'put ''YXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiAic2hhcGUtdGVtcGxhdGUiIH0nKTtmb3IodmFyIFIgaW4gTylPLmhhc093blByb3BlcnR5KFIpJiZ0aGlzLnNl''@;'; put 'put ''dEljb25UZW1wbGF0ZShSLE9bUl0pfSxNLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oTyl7cmV0dXJuISFtW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKE8pXX0sTS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKE8pe2lmKCFPKXJldHVybiBtO2lmKCJzdHJpbmciIT10eXBlb2YgTyl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJPbmx5IHN0cmluZyBhcmd1bWVudCBpcyBhbGxvd2VkIGluIHRoaXMgbWV0aG9kLiIpO3JldHVybiBtW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKE8pXX0sTS5wcm90b3R5cGUuYWxpYXM9ZnVuY3Rpb24oTyl7aWYoIm9iamVjdCIhPXR5cGVvZiBPKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGluIHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogWyJhbGlhcy1uYW1lIiwgLi4uXSB9Jyk7Zm9yKHZhciBSIGluIE8paWYoTy5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eShSKSl7aWYoIW0uaGFzT3duUHJvcGVydHkoUikpdGhyb3cgbmV3IEVycm9yKCdBbiBpY29uICInK1IrIlwiIHlvdSBhcmUgdHJ5aW5nIHRvIHNldCBhbGlhc2VzIHRvIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIENsYXJpdHkgSWNvbnMgc2V0cyEiKTt0aGlzLnNldEljb25BbGlhc2VzKG0sUixP''@;'; put 'put ''W1JdKX19LE19KCk7Ri5DbGFyaXR5SWNvbnNBcGk9bGV9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2pl''@;'; put 'put ''Y3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgeD1hZSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLG09YWUoCi8q''@;'; put 'put ''ISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLGxlPTAsTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7TS5jbGFzc05hbWU9ImlzLW9mZi1zY3JlZW4iO3ZhciBP''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIEhUTUxFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gUigpe3ZhciB6PU8uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB6LmNsckljb25VbmlxSWQ9Il9jbHJfaWNvbl8iK2xlLGxlKyssen0ib2JqZWN0Ij09dHlwZW9mIFJlZmxl''@;'; put 'put ''Y3QmJihPPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLEYuQ2xhcml0eUljb25FbGVtZW50PVIsUi5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChSLnByb3RvdHlw''@;'; put 'put ''ZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpSfX0pKS5jb25zdHJ1Y3Rvcj1SLFIucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciB6PU0uY2xvbmVOb2Rl''@;'; put 'put ''KCExKTt6LmlkPXRoaXMuY2xySWNvblVuaXFJZCx6LnRleHRDb250ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKHopfSxSLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oeil7IU51bWJlcih6KXx8TnVtYmVyKHopPDA/KHRoaXMuc3R5bGUud2lk''@;'; put 'put ''dGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5zdHlsZS53aWR0aD16KyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9eisicHgiKX0sUi5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKHope3JldHVybiB6LnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LFIu''@;'; put 'put ''cHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgi''@;'; put 'put ''c2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09SyYmKHRoaXMuY3VycmVudFNpemVBdHRyVmFsPUssdGhpcy5fc2V0SWNvblNpemUoSykpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgST10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hh''@;'; put 'put ''cGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhJLGZ1bmN0aW9uKGope3ouX2luamVjdFRlbXBsYXRlKGopfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPUksIXguQ2xhcml0eUljb25z''@;'; put 'put ''QXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgaz14LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihrPT09dGhpcy5jdXJyZW50''@;'; put 'put ''U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1rfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgRT10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1FJiYodGhpcy5jdXJyZW50VGl0bGVB''@;'; put 'put ''dHRyVmFsPUUpLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LFIucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbih6LEssSSl7dmFyIGs9dGhpcztpZigic2l6ZSI9PT16JiZ0aGlzLl9zZXRJY29uU2l6ZShJ''@;'; put 'put ''KSwic2hhcGUiPT09eil7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKEkpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv''@;'; put 'put ''bj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oRSl7ay5faW5qZWN0VGVtcGxhdGUoRSl9KSksIXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwp''@;'; put 'put ''KXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT16JiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUks''@;'; put 'put ''IXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVjdFRlbXBsYXRlKCl9LFIucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxS''@;'; put 'put ''LnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24oKXt2YXIgej10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksST10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO3o/eiYmei5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmSS5zZXRBdHRy''@;'; put 'put ''aWJ1dGUoImFyaWEtbGFiZWxsZWRieSIseisiICIrdGhpcy5jbHJJY29uVW5pcUlkKTpJLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxSLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oeil7eiYmeiE9PXRoaXMuY3VycmVudFNo''@;'; put 'put ''YXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXopLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0s''@;'; put 'put ''Ui5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRz''@;'; put 'put ''IjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8q''@;'; put 'put ''ISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5DbGFyaXR5SWNvbnM9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksbT1hZSgKLyohIC4vY2xyLWljb25zLWVsZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIiksbGU9YWUoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9p''@;'; put 'put ''Y29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksTT14LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZTtGLkNsYXJpdHlJY29ucz1NLE0uYWRkKGxlLkNvcmVTaGFwZXMpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKXx8KHdpbmRv''@;'; put 'put ''dy5DbGFyaXR5SWNvbnM9TSksY3VzdG9tRWxlbWVudHMuZ2V0KCJjbHItaWNvbiIpfHxjdXN0b21FbGVtZW50cy5kZWZpbmUoImNsci1pY29uIixtLkNsYXJpdHlJY29uRWxlbWVudCkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Db3JlU2hhcGVzPUYuQ2xyU2hhcGVBcnJvdz1GLkNs''@;'; put 'put ''clNoYXBlU3RlcEZvcndhcmQyPUYuQ2xyU2hhcGVFeWVIaWRlPUYuQ2xyU2hhcGVFeWU9Ri5DbHJTaGFwZUV2ZW50PUYuQ2xyU2hhcGVDYWxlbmRhcj1GLkNsclNoYXBlQW5nbGVEb3VibGU9Ri5DbHJTaGFwZVZpZXdDb2x1bW5zPUYuQ2xyU2hhcGVTZWFyY2g9Ri5DbHJTaGFwZVZtQnVnPUYu''@;'; put 'put ''Q2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPUYuQ2xyU2hhcGVGaWx0ZXJHcmlkPUYuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPUYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Ri5DbHJTaGFwZUNsb3VkPUYuQ2xyU2hhcGVJbWFnZT1GLkNsclNoYXBlQmVsbD1GLkNsclNoYXBlRm9sZGVy''@;'; put 'put ''T3Blbj1GLkNsclNoYXBlRm9sZGVyPUYuQ2xyU2hhcGVBbmdsZT1GLkNsclNoYXBlVXNlcj1GLkNsclNoYXBlQmFycz1GLkNsclNoYXBlSGVscEluZm89Ri5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1GLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1GLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPUYu''@;'; put 'put ''Q2xyU2hhcGVJbmZvU3RhbmRhcmQ9Ri5DbHJTaGFwZUluZm9DaXJjbGU9Ri5DbHJTaGFwZUNoZWNrQ2lyY2xlPUYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1GLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1GLkNsclNoYXBlVGltZXM9Ri5DbHJTaGFwZUNoZWNrPUYuQ2xyU2hhcGVD''@;'; put 'put ''b2c9Ri5DbHJTaGFwZUhvbWU9Ri5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2''@;'; put 'put ''Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVVbmtub3duU3RhdHVzPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4''@;'; put 'put ''PSIxNy41OCIgY3k9IjI2LjIzIiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0LjcsMTNhNS4xOCw1LjE4LDAsMCwwLTIuMTYtMy41Niw3LjI2LDcuMjYsMCwwLDAtNS43MS0xLjA5QTExLjM0''@;'; put 'put ''LDExLjM0LDAsMCwwLDEyLDEwLjQ0LDEsMSwwLDEsMCwxMy4yNiwxMmE5LjMyLDkuMzIsMCwwLDEsMy45NC0xLjcyLDUuMjksNS4yOSwwLDAsMSw0LjE2Ljc0LDMuMjEsMy4yMSwwLDAsMSwxLjM1LDIuMTljLjMzLDIuNjktMy4xOSwzLjc1LTUuMzIsNC4xNGwtLjgyLjE1djQuMzZhMSwxLDAs''@;'; put 'put ''MCwwLDIsMFYxOS4xN0MyNC42MSwxNy43OSwyNC44OCwxNC40MSwyNC43LDEzWiIvPicpLEYuQ2xyU2hhcGVIb21lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNzEsMTcuMjlsLTE1LTE1YTEsMSwwLDAs''@;'; put 'put ''MC0xLjQxLDBsLTE1LDE1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTgsNC40MSwzMi4yOSwxOC43MWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMzJoLTVWMjJIMTNW''@;'; put 'put ''MzJIOFYxOEw2LDIwVjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NmwtMi0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywxOWExLDEsMCwwLDEtLjcxLS4yOUwxOCw0''@;'; put 'put ''LjQxLDMuNzEsMTguNzFhMSwxLDAsMCwxLTEuNDEtMS40MWwxNS0xNWExLDEsMCwwLDEsMS40MSwwbDE1LDE1QTEsMSwwLDAsMSwzMywxOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTgsNy43OSw2LDE5Ljgz''@;'; put 'put ''VjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NloiLz4nKSxGLkNsclNoYXBlQ29nPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMSwxMWMtMy45LDAtNywzLjEtNyw3''@;'; put 'put ''czMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdTMjIsMTEsMTguMSwxMXogTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMi44LDAsNSwyLjIsNSw1UzIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMiIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjYtMS41bDEuNC0yLjZjMC4zLTAuNiwwLjItMS40LTAuMy0xLjlsLTIuNC0yLjRjLTAuNS0wLjUtMS4zLTAuNi0xLjktMC4zbC0yLjYsMS40bC0xLjUtMC42bC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRj''@;'; put 'put ''LTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwx''@;'; put 'put ''NS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4x''@;'; put 'put ''aDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwx''@;'; put 'put ''NS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6IE0zMiwxOS40bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0x''@;'; put 'put ''LjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmww''@;'; put 'put ''LjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjQsMC41LDIuMSwwLjlsMC41LDAuM2wzLjMtMS44bDIsMmwtMS44LDMuM2wwLjMsMC41YzAuNCwwLjcsMC43''@;'; put 'put ''LDEuNCwwLjksMi4xbDAuMSwwLjVsMy42LDEuMVYxOS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjEsMThjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN3Mt''@;'; put 'put ''My4xLTctNy03QzE0LjIsMTEsMTEuMSwxNC4xLDExLjEsMTh6IE0yMy4xLDE4YzAsMi44LTIuMiw1LTUsNWMtMi44LDAtNS0yLjItNS01czIuMi01LDUtNUMyMC45LDEzLDIzLjEsMTUuMiwyMy4xLDE4eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjEtMC4zYy0wLjgsMC0xLjYtMC4yLTIuNC0wLjRjMC4zLDAuNiwwLjYsMS4zLDAuOCwxLjlsMC4xLDAuNWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwx''@;'; put 'put ''LjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEu''@;'; put 'put ''OC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAu''@;'; put 'put ''MkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS4zLDAuNSwxLjksMC44Yy0wLjMtMC44LTAuNC0xLjYtMC40LTIuNWwtMC40LTAuMmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4z''@;'; put 'put ''LTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFs''@;'; put 'put ''MC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwy''@;'; put 'put ''LjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy43LDE1LjRoLTUuM3YwLjFsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwt''@;'; put 'put ''MC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAu''@;'; put 'put ''Mi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy40bDEuNC0yLjNsLTAuNi0yQzIxLDIuNCwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUt''@;'; put 'put ''MS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRj''@;'; put 'put ''MCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMt''@;'; put 'put ''MC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNiwzMy45LDE1LjcsMzMu''@;'; put 'put ''NywxNS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMwLjIsMCwwLjUsMCwwLjcsMC4xYy0wLjItMC42LTAu''@;'; put 'put ''My0xLjMtMC4yLTJoLTAuNWMtMy45LDAtNywzLjEtNyw3YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdjMC0wLjktMC4yLTEuOC0wLjUtMi42aC0yLjJjMC41LDAuOCwwLjcsMS42LDAuNywyLjVDMjMuMSwyMC44LDIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAu''@;'; put 'put ''NSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNTcs''@;'; put 'put ''MTUuNzJsLTMuMzUtMWExMS42NSwxMS42NSwwLDAsMC0uOTUtMi4zM2wxLjY0LTMuMDdhLjYxLjYxLDAsMCwwLS4xMS0uNzJMMjcuNDEsNi4yYS42MS42MSwwLDAsMC0uNzItLjExTDIzLjY0LDcuNzJhMTEuNjIsMTEuNjIsMCwwLDAtMi4zNi0xbC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5''@;'; put 'put ''LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEs''@;'; put 'put ''MCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0''@;'; put 'put ''bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYz''@;'; put 'put ''LDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTIuMTIsMTIuMTIsMCwwLDAtLjQ3LTEuMzIsNy40OSw3LjQ5LDAsMCwxLTYuMTQtNi4xNiwxMS44MiwxMS44MiwwLDAsMC0xLjMzLS40OGwtMS0zLjMxQS42''@;'; put 'put ''MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3''@;'; put 'put ''bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDEx''@;'; put 'put ''LjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcy''@;'; put 'put ''bC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMi41NywxNS43MiwzMS41LDE1LjRIMjIuODVBNS41LDUuNSwwLDEsMSwxOCwxMi41YTUuNTMsNS41MywwLDAsMSwuNjUsMEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwyLjA5LTMuNjItLjg2LTIuODNBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFh''@;'; put 'put ''LjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQz''@;'; put 'put ''LjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2Eu''@;'; put 'put ''NjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAs''@;'; put 'put ''MCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVy''@;'; put 'put ''dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVDaGVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEzLjcyLDI3LjY5LDMuMjksMTcuMjdhMSwxLDAsMCwxLDEuNDEtMS40MWw5LDlMMzEuMjksNy4yOWExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicpLEYuQ2xyU2hhcGVUaW1lcz0oMCxtLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjQxLDE4bDguMjktOC4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDkuNzEsOC4yOUExLDEsMCwwLDAsOC4yOSw5LjcxTDE2LjU5LDE4LDguMjksMjYuMjlhMSwxLDAsMSwwLDEu''@;'; put 'put ''NDEsMS40MUwxOCwxOS40MWw4LjI5LDguMjlhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz4nKSxGLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxLjMyYTEu''@;'; put 'put ''MywxLjMsMCwwLDAsMS4zLTEuM1YxNGExLjMsMS4zLDAsMSwwLTIuNiwwdjZBMS4zLDEuMywwLDAsMCwxOCwyMS4zMloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0i''@;'; put 'put ''MS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0''@;'; put 'put ''LTQuNDNabS0xLjc4LDEuOTRhMSwxLDAsMCwxLS44Ni40OUg4LjIxYTEsMSwwLDAsMS0uODgtMS40OEwxNy4wNyw4LjU1YTEsMSwwLDAsMSwxLjc2LDBsOS43NCwxNy45NEExLDEsMCwwLDEsMjguNTUsMjcuNDhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1pNMTYuNDYsMTIuNzRhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40''@;'; put 'put ''OSwwLDEsMS0zLDBaTTE4LDI2LjI1YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI2LjI1WiIvPicpLEYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''ZD0iTTE4LDIwLjA3YTEuMywxLjMsMCwwLDEtMS4zLTEuM3YtNmExLjMsMS4zLDAsMSwxLDIuNiwwdjZBMS4zLDEuMywwLDAsMSwxOCwyMC4wN1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTcuOTUi''@;'; put 'put ''IGN5PSIyMy4wMiIgcj0iMS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTEuNDksNmExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40''@;'; put 'put ''OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjUuNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNS41WiIvPicpLEYuQ2xyU2hhcGVDaGVja0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTE2LjM0LDIzLjc0bC01LTVhMSwxLDAsMCwxLDEuNDEtMS40MWwzLjU5LDMuNTksNi43OC02Ljc4YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDE4QTEyLDEyLDAsMSwx''@;'; put 'put ''LDE4LDYsMTIsMTIsMCwwLDEsMzAsMThabS00Ljc3LTIuMTZhMS40LDEuNCwwLDAsMC0yLTJsLTYuNzcsNi43N0wxMywxNy4xNmExLjQsMS40LDAsMCwwLTIsMmw1LjQ1LDUuNDVaIi8+JyksRi5DbHJTaGFwZUluZm9DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgIGN4PSIxNy45MyIgY3k9IjExLjkiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAgZD0iTTIxLDIzSDE5VjE1SDE2YTEsMSwwLDAsMCwwLDJo''@;'; put 'put ''MXY2SDE1YTEsMSwwLDEsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCww''@;'; put 'put ''LDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIsMiwwLDEsMSwyLDJBMiwy''@;'; put 'put ''LDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPicpLEYuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3Ljk3IiBjeT0iMTAuNDUiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjEsMjVIMTlWMTQuMUgxNmExLDEsMCwwLDAsMCwy''@;'; put 'put ''aDFWMjVIMTVhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwx''@;'; put 'put ''NCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWm0tLjEsNS4yOGEyLDIsMCwxLDEt''@;'; put 'put ''MiwyQTIsMiwwLDAsMSwxNy45LDcuMzhabTMuNiwyMS4yNWgtN2ExLjQsMS40LDAsMSwxLDAtMi44aDIuMXYtOS4ySDE1YTEuNCwxLjQsMCwxLDEsMC0yLjhoNC40djEyaDIuMWExLjQsMS40LDAsMSwxLDAsMi44WiIvPicpLEYuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9KDAsbS5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwxMi4xYTEsMSwwLDAsMC0xLjQxLDBMMTUuNDksMjMuMTVsLTYtNkExLDEsMCwwLDAsOCwxOC41M0wxNS40OSwyNiwyOCwxMy41MkExLDEsMCwwLDAsMjgsMTIuMVoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOC40NSwxMi42MywxNS4zMSwyNS43Niw3LjU1LDE4YTEuNCwxLjQsMCwwLDEsMi0ybDUuNzgsNS43OEwyNi40NywxMC42NWEx''@;'; put 'put ''LjQsMS40LDAsMSwxLDIsMloiLz4nKSxGLkNsclNoYXBlRXJyb3JTdGFuZGFyZD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWk0xNi42LDguOGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI4LjZhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjguNloiLz4n''@;'; put 'put ''KSxGLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg''@;'; put 'put ''ZD0iTTE1LjA2MjA3ODIsMS42ODExOTYgQzE1LjYyOTg4MTksMC42NDkyNjYzNTUgMTYuNzEwOTA5MSwwLjAxMDIyMTkzOTYgMTcuODg1LDAuMDEwMjIxOTM5NiBDMTkuMDU5MDkwOSwwLjAxMDIyMTkzOTYgMjAuMTQwMTE4MSwwLjY0OTI2NjM1NSAyMC43MDg2NDMzLDEuNjgyNTIxMjkgTDM0''@;'; put 'put ''LjU5ODY0NCwyNy4yNDI1MjI1IEMzNS4xNDA3NzQ2LDI4LjI0MDEzOTcgMzUuMTE3NDM0NSwyOS40NDk1MzczIDM0LjUzNzIxNjEsMzAuNDI1NDk0MyBDMzMuOTU2OTk3NywzMS40MDE0NTE0IDMyLjkwNTY3MSwzMS45OTk2OTg0IDMxLjc3LDMyIEw0LjAyMjM5MzIzLDMxLjk5OTc0OTIgQzIu''@;'; put 'put ''ODc0MDkwMDksMzIuMDI1NDY5OSAxLjc5OTAyODQzLDMxLjQzNzU3NTMgMS4yMDEwNjMzNSwzMC40NTY5MTI2IEMwLjYwMzA5ODI2NSwyOS40NzYyNDk5IDAuNTcyNzc3ODk5LDI4LjI1MTMxNzkgMS4xMjIwNzgxOCwyNy4yNDExOTYgTDE1LjA2MjA3ODIsMS42ODExOTYgWiBNMi44Nzg1MDc2''@;'; put 'put ''NywyOC4xOTc3MjgyIEMyLjY3MDYwOTY2LDI4LjU4MDAzNzYgMi42ODIwOTc1LDI5LjA0NDE0MjMgMi45MDg2NTU3LDI5LjQxNTY5NzcgQzMuMTM1MjEzOSwyOS43ODcyNTMyIDMuNTQyNTM1NCwzMC4wMDk5OTU5IDQsMzAgTDMxLjc2OTczNDQsMzAgQzMyLjE5OTkxOTEsMjkuOTk5ODg1OCAz''@;'; put 'put ''Mi41OTgyNDc4LDI5Ljc3MzIyMDggMzIuODE4MDgyMSwyOS40MDM0NDgyIEMzMy4wMzc5MTY0LDI5LjAzMzY3NTcgMzMuMDQ2NzU5NSwyOC41NzU0NTY3IDMyLjg0MTM1NjcsMjguMTk3NDc4NyBMMTguOTUzODczOSwyLjY0MjA4MTk1IEMxOC43Mzk0MjM2LDIuMjUyMzQ0MzYgMTguMzI5ODQx''@;'; put 'put ''OSwyLjAxMDIyMTk0IDE3Ljg4NSwyLjAxMDIyMTk0IEMxNy40NDA2ODg5LDIuMDEwMjIxOTQgMTcuMDMxNTUzOCwyLjI1MTc2NjkyIDE2LjgxNjg5NDYsMi42NDA2ODc1MyBMMi44Nzg1MDc2NywyOC4xOTc3MjgyIFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuNiwyOS4yMSwyMC43MSwzLjY1YTMuMjIsMy4yMiwwLDAsMC01LjY2LDBMMS4xNywyOS4yMUEzLjIyLDMuMjIsMCwwLDAsNCwzNEgzMS43N2EzLjIyLDMuMjIsMCwwLDAsMi44My00Ljc1Wk0xNi42LDEwYTEuNCwxLjQsMCwwLDEsMi44LDB2''@;'; put 'put ''MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjkuODVhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjkuODVaIi8+JyksRi5DbHJTaGFwZUhlbHBJbmZvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4zOSwyNS40NWExLDEsMCwwLDAtMS4zOC4yOWMtMS40''@;'; put 'put ''MSwyLjE2LTQsNC44MS02LjMxLDUuN3MtNC4xMi41Ny00Ljg0LDBjLS4zMS0uMjctMS4xMi0xLS40My0zLjQ5LjQ2LTEuNjYsMy4zMi05LjQ4LDQtMTEuMzhsLTIuMTguMjhjLS42OSwxLjg2LTMuMjksOC44NC0zLjc2LDEwLjU4LS42OCwyLjQ5LS4zNCw0LjMsMS4wOSw1LjU2QTUuNTksNS41''@;'; put 'put ''OSwwLDAsMCwxNSwzNGE5LjUzLDkuNTMsMCwwLDAsMy40NS0uN2MyLjc5LTEuMDksNS43Mi00LjEyLDcuMjYtNi40N0ExLDEsMCwwLDAsMjUuMzksMjUuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4z''@;'; put 'put ''LDExYTQuNSw0LjUsMCwxLDAtNC41LTQuNUE0LjUsNC41LDAsMCwwLDE5LjMsMTFabTAtN2EyLjUsMi41LDAsMSwxLTIuNSwyLjVBMi41LDIuNSwwLDAsMSwxOS4zLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xMS44MSwxNWMuMDYsMCw2LjI3LS44Miw3LjczLTEsLjY1LS4xLDEuMTQsMCwxLjMuMTVzLjIxLjgtLjA3LDEuNjhjLS42MSwxLjg2LTMuNjksMTEtNC41OSwxMy43MWE4LDgsMCwwLDAsMS4yOS0uMzgsNy4zMiw3LjMyLDAsMCwwLDEuMTUtLjZDMTkuODUsMjUsMjIuMTUsMTguMSwyMi42''@;'; put 'put ''NywxNi41MnMuMzktMi43OC0uMy0zLjZhMy4xNiwzLjE2LDAsMCwwLTMuMDgtLjgzYy0xLjQzLjE1LTcuNDcuOTQtNy43MywxYTEsMSwwLDAsMCwuMjYsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjAu''@;'; put 'put ''NzUiIGN5PSI2IiByPSI0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljg0LDI2LjIzYTEsMSwwLDAsMC0xLjQuMjksMTYuNiwxNi42LDAsMCwxLTMuNTEsMy43N2MtLjMzLjI1LTEuNTYsMS4yLTIuMDgsMS0uMzYt''@;'; put 'put ''LjExLS4xNS0uODItLjA4LTEuMTJsLjUzLTEuNTdjLjIyLS42NCw0LjA1LTEyLDQuNDctMTMuMy42Mi0xLjkuMzUtMy43Ny0yLjQ4LTMuMzItLjc3LjA4LTguNTgsMS4wOS04LjcyLDEuMWExLDEsMCwwLDAsLjEzLDJzMy0uMzksMy4zMy0uNDJhLjg4Ljg4LDAsMCwxLC44NS40NCwyLjQ3LDIu''@;'; put 'put ''NDcsMCwwLDEtLjA3LDEuNzFjLS4yNiwxLTQuMzcsMTIuNTgtNC41LDEzLjI1YTIuNzgsMi43OCwwLDAsMCwxLjE4LDMsNSw1LDAsMCwwLDMuMDguODNoMGE4LjUzLDguNTMsMCwwLDAsMy4wOS0uNjJjMi40OS0xLDUuMDktMy42Niw2LjQ2LTUuNzVBMSwxLDAsMCwwLDI0Ljg0LDI2LjIzWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQmFycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDI5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEs''@;'; put 'put ''MCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsMTlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMiw5SDRBMSwxLDAsMCwxLDQsN0gzMmExLDEsMCwwLDEsMCwyWiIvPicpLEYuQ2xyU2hhcGVVc2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwxLDAtNy03QTcsNywwLDAsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEt''@;'; put 'put ''NSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5''@;'; put 'put ''YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3''@;'; put 'put ''YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMjAsMTQuNmE1LDUsMCwxLDEsMS4yNC04LjQybDEtMS43NkE3LDcsMCwxLDAsMTgs''@;'; put 'put ''MTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgs''@;'; put 'put ''MTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4x''@;'; put 'put ''NiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYx''@;'; put 'put ''LDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTAiIHI9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEs''@;'; put 'put ''MjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLjE2LTUuNDdBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4x''@;'; put 'put ''NFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41''@;'; put 'put ''LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcs''@;'; put 'put ''NywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlQW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS41MiwyMi41''@;'; put 'put ''MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPicpLEYuQ2xyU2hhcGVGb2xkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy''@;'; put 'put ''LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIu''@;'; put 'put ''NjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTFhNy41LDcuNSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMCwxNS40VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4x''@;'; put 'put ''MSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVpNNiwxMVY3aDYuNDlsMi43Miw0''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDks''@;'; put 'put ''NUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjMuMTMsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMu''@;'; put 'put ''MjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+''@;'; put 'put ''JyksRi5DbHJTaGFwZUZvbGRlck9wZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41Miwx''@;'; put 'put ''LDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCww''@;'; put 'put ''LDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAs''@;'; put 'put ''MCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45''@;'; put 'put ''bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRoLS4zTDI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0aDkuNDJBMy42NywzLjY3LDAsMCwx''@;'; put 'put ''LDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40Mkwx''@;'; put 'put ''NC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIu''@;'; put 'put ''NTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1''@;'; put 'put ''LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40''@;'; put 'put ''SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwx''@;'; put 'put ''OSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCww''@;'; put 'put ''LDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcx''@;'; put 'put ''LDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4zMS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEy''@;'; put 'put ''LjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlQmVsbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjUxLDI3Ljgz''@;'; put 'put ''QTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYz''@;'; put 'put ''LDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaTTUuMTMsMjguOTRhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0''@;'; put 'put ''LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNWE4Ljc0LDguNzQsMCwxLDEsMTcuNDcsMHY0Ljk0YTE0LjI0LDE0LjI0LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBk''@;'; put 'put ''PSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5LDcuNDQsNy40NCwwLDAsMS0yLjI0LS44NCw4Ljg5LDguODksMCwwLDEsLjQsMi42NHY0Ljk0YTE0LjI0LDE0LjI0''@;'; put 'put ''LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNINS4xM2ExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1QTguOCw4LjgsMCwwLDEsMTgsNi4zMWE4LjYxLDguNjEsMCwwLDEsNC43NiwxLjQ0QTcuNDksNy40OSww''@;'; put 'put ''LDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTgsMTAuNTgsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwx''@;'; put 'put ''LTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWEx''@;'; put 'put ''Mi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40''@;'; put 'put ''LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTUuMzIsMzJhMi42NSwyLjY1LDAsMCwwLDUuMjUsMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5QTcuNSw3LjUsMCwwLDEs''@;'; put 'put ''MjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU3LDEwLjU3LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3''@;'; put 'put ''LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVJbWFnZT0oMCxt''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsMzBWNkgzMlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNOC45MiwxNGEzLDMsMCwxLDAtMy0zQTMsMywwLDAsMCw4LjkyLDE0Wm0wLTQuNkExLjYsMS42LDAsMSwxLDcuMzMsMTEsMS42LDEuNiwwLDAsMSw4LjkyLDkuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTIyLjc4LDE1LjM3bC01LjQsNS40LTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxQTEsMSwwLDAsMCwyMi43OCwxNS4zN1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTMsMTFhMywzLDAsMSwwLTMsM0EzLDMsMCwwLDAsMTEuOTMsMTFabS00LjYsMGExLjYsMS42LDAsMSwxLDEuNiwxLjZBMS42LDEuNiwwLDAsMSw3LjMzLDExWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuMzgsMjAuNzdsLTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUt''@;'; put 'put ''OC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxYTEsMSwwLDAsMC0xLjQxLDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjZIMjIuNWE3LjQ5LDcuNDksMCww''@;'; put 'put ''LDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgz''@;'; put 'put ''MmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwx''@;'; put 'put ''LjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEy''@;'; put 'put ''LjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSww''@;'; put 'put ''TDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzM0gxMC42MkM1LjY3LDMzLDEsMjguMTksMSwyMy4xYTEwLDEwLDAsMCwxLDgtOS43NSwxMC4x''@;'; put 'put ''OSwxMC4xOSwwLDAsMSwyMC4zMywxLjA2QTEwLjA3LDEwLjA3LDAsMCwxLDI5LDE2LjY2YTguMjksOC4yOSwwLDAsMSw2LDhDMzUsMjkuMSwzMS4zMywzMywyNy4xNCwzM1pNMTkuMDksNi4yM2E4LjI0LDguMjQsMCwwLDAtOC4xOSw4bDAsLjg3LS44Ni4xQTcuOTQsNy45NCwwLDAsMCwzLDIz''@;'; put 'put ''LjFjMCw0LDMuNzcsNy45LDcuNjIsNy45SDI3LjE0QzMwLjIxLDMxLDMzLDI4LDMzLDI0LjY1YTYuMzEsNi4zMSwwLDAsMC01LjM3LTYuMjZsLTEuMTgtLjE4LjM5LTEuMTNBOC4xOCw4LjE4LDAsMCwwLDE5LjA5LDYuMjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDUsNy40NSwwLDAsMS0yLjEtLjU0LDgsOCwwLDAsMS0uMyw0LjE2bC0uMzksMS4xMywxLjE4LjE4YTYu''@;'; put 'put ''MzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdhOC4yNCw4LjI0LDAsMCwxLDguMTktOEE4LjEzLDguMTMsMCwwLDEsMjIuNTgs''@;'; put 'put ''N2E3LjUzLDcuNTMsMCwwLDEtLjA4LTEsNy41MSw3LjUxLDAsMCwxLC4wOS0xLjEyQTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2''@;'; put 'put ''LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNCwxMC4xNCwwLDAsMCwuMi0xLjNoLTJhOC4yOCw4LjI4LDAsMCwxLS4zNywxLjcybC0uMzksMS4xMywxLjE4LjE4''@;'; put 'put ''YTYuMzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdBOC4xNiw4LjE2LDAsMCwxLDIxLDYuNDdsMS0xLjhBMTAuMTksMTAuMTks''@;'; put 'put ''MCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1''@;'; put 'put ''LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjgu''@;'; put 'put ''MTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5''@;'; put 'put ''LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ0LDcuNDQsMCwwLDEtNi42LTguNThBMTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMs''@;'; put 'put ''MTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9''@;'; put 'put ''IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNSwxMC4xNSwwLDAsMCwuMi0xLjI2aC03QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5''@;'; put 'put ''bDMtNS4yMUExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPSgwLG0uY2xySWNvblNWRyko''@;'; put 'put ''JzxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRmlsdGVyR3JpZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCww''@;'; put 'put ''LDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjha''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSww''@;'; put 'put ''LDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLEYuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCww''@;'; put 'put ''LTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCww''@;'; put 'put ''LDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0''@;'; put 'put ''LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVs''@;'; put 'put ''My45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxGLkNsclNoYXBlVm1CdWc9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiByeD0iMyIg''@;'; put 'put ''ZmlsbD0iI2ZmZmZmZiIgb3BhY2l0eT0iMC4xNSIgc3R5bGU9Imlzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggZD0iTTMuNzksMTQuODNhMS4wOSwxLjA5LDAsMCwwLTEuNDctLjU2LDEuMDksMS4wOSwwLDAsMC0uNTQsMS40OWwyLjQ3LDUuNGMuMzkuODUuOCwxLjI5LDEuNTcsMS4yOVM3LDIy''@;'; put 'put ''LDcuMzksMjEuMTZsMi4xNy00Ljc3YS4zMy4zMywwLDAsMSwuMzEtLjIuMzUuMzUsMCwwLDEsLjM1LjM1djQuNjFhMS4xNSwxLjE1LDAsMCwwLDEuMTQsMS4zLDEuMTcsMS4xNywwLDAsMCwxLjE3LTEuM1YxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEu''@;'; put 'put ''MTgsMS4ydjMuNzdhMS4xNywxLjE3LDAsMSwwLDIuMzIsMFYxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEuMTgsMS4ydjMuNzdhMS4xNiwxLjE2LDAsMSwwLDIuMzEsMFYxNi44NmEyLjY5LDIuNjksMCwwLDAtMi43OC0yLjY5LDMuNTcsMy41NywwLDAs''@;'; put 'put ''MC0yLjQ3LDEuMDUsMi43NSwyLjc1LDAsMCwwLTIuMzgtMS4wNUEzLjkzLDMuOTMsMCwwLDAsMTIsMTUuMjJhMi44MiwyLjgyLDAsMCwwLTIuMDgtMS4wNUEyLjU1LDIuNTUsMCwwLDAsNy40LDE1Ljg5TDUuODIsMTkuNjNsLTItNC44IiBmaWxsPSIjZmZmZmZmIi8+PHBhdGggZD0iTTMzLDE0''@;'; put 'put ''LjE4QTEuMTQsMS4xNCwwLDAsMCwzMS45LDE1bC0xLjE5LDMuNzNMMjkuNSwxNS4wNWExLjE4LDEuMTgsMCwwLDAtMS4xNS0uODdoLS4xYTEuMiwxLjIsMCwwLDAtMS4xNS44N2wtMS4xOSwzLjcxLTEuMTgtMy43MWExLjE1LDEuMTUsMCwwLDAtMS4xMS0uODcsMS4wOCwxLjA4LDAsMCwwLTEu''@;'; put 'put ''MTIsMS4wNywxLjY4LDEuNjgsMCwwLDAsLjEuNTRsMiw1LjdhMS4yNywxLjI3LDAsMCwwLDEuMjcsMSwxLjI0LDEuMjQsMCwwLDAsMS4yLS45M2wxLjItMy42NCwxLjIsMy42NGExLjI1LDEuMjUsMCwwLDAsMS4yNi45M0ExLjI3LDEuMjcsMCwwLDAsMzIsMjEuNUwzNCwxNS43M2ExLjc3LDEu''@;'; put 'put ''NzcsMCwwLDAsLjA4LS40OEExLjA3LDEuMDcsMCwwLDAsMzMsMTQuMThaIiBmaWxsPSIjZmZmZmZmIi8+JyksRi5DbHJTaGFwZVNlYXJjaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjMzLDUuMDVBMTAu''@;'; put 'put ''OTUsMTAuOTUsMCwxLDEsNS4zOSwxNiwxMSwxMSwwLDAsMSwxNi4zMyw1LjA1bTAtMi4wNWExMywxMywwLDEsMCwxMywxMywxMywxMywwLDAsMC0xMy0xM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTM1''@;'; put 'put ''LDMzLjI5bC03LjM3LTcuNDItMS40MiwxLjQxLDcuMzcsNy40MkExLDEsMCwxLDAsMzUsMzMuMjlaIi8+JyksRi5DbHJTaGFwZVZpZXdDb2x1bW5zPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsNUg1QTIs''@;'; put 'put ''MiwwLDAsMCwzLDdWMjlhMiwyLDAsMCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nKSxGLkNsclNoYXBlQW5nbGVEb3VibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOSwxOS40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCw4LjgzLDcuNzEsMTkuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCw2LDI5LjcxLDE3LjcxQTEsMSwwLDAsMSwyOSwxOS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+JyksRi5DbHJTaGFwZUNhbGVuZGFyPSgw''@;'; put 'put ''LG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu''@;'; put 'put ''NzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjIwIiB5''@;'; put 'put ''PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC05IiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIHg9IjIwIiB5''@;'; put 'put ''PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiBk''@;'; put 'put ''PSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgy''@;'; put 'put ''OC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI4IiB5PSIxNCIgd2lkdGg9''@;'; put 'put ''IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1i''@;'; put 'put ''YWRnZWQiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTki''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEyLS1iYWRnZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMu''@;'; put 'put ''NjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgeD0iMTQi''@;'; put 'put ''IHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgeD0iMjYiIHk9IjE5IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xMC0tYWxlcnRlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9seWdvbiBw''@;'; put 'put ''b2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0z''@;'; put 'put ''Mi4yNSw2aC00VjlhMi4yLDIuMiwwLDEsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCww''@;'; put 'put ''LDAsMCwzMi4yNSw2Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2''@;'; put 'put ''VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41''@;'; put 'put ''LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTEwLDI2''@;'; put 'put ''SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUEx''@;'; put 'put ''Ljc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTYsNUgyNlYyNGgyWm0wLTVIMjZWMTloMloiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVFdmVudD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjE3LDI1Ljg2LDEwLjgxLDIwLjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxNi4xNywy''@;'; put 'put ''M2w4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5''@;'; put 'put ''QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xMCwxMGEx''@;'; put 'put ''LDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAs''@;'; put 'put ''MCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAtMS40MS0xLjQxTDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEs''@;'; put 'put ''MzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0i''@;'; put 'put ''TTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zLS1hbGVydGVkIiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUu''@;'; put 'put ''NEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjI1LDZoLTRWOWEy''@;'; put 'put ''LjIsMi4yLDAsMCwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZa''@;'; put 'put ''TTI1Ljk0LDE2LjU4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0zMy42OCwxNS40SDI2LjNhMS4zNCwxLjM0LDAsMCwxLS4zNiwxLjE4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4LDctN2gtMUEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZo''@;'; put 'put ''LTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4''@;'; put 'put ''LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wm0tNC4wNiwzLjA4LTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksRi5DbHJTaGFwZUV5ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4y''@;'; put 'put ''My05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44''@;'; put 'put ''LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4''@;'; put 'put ''LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwxLDE4LjA5LDIyLjg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42Miwx''@;'; put 'put ''Ny41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjks''@;'; put 'put ''OC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTguMDkiIGN5PSIxOC4wMyIgcj0i''@;'; put 'put ''Ni44NiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVFeWVIaWRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4xOSwyMC40QTYuNzgsNi43OCwwLDAsMCwyNS42MiwxOGE2Ljg2LDYuODYsMCwwLDAtNi44Ni02Ljg2LDYuNzksNi43''@;'; put 'put ''OSwwLDAsMC0yLjM3LjQzTDE4LDEzLjIzYTQuNzgsNC43OCwwLDAsMSwuNzQtLjA2QTQuODcsNC44NywwLDAsMSwyMy42MiwxOGE0Ljc5LDQuNzksMCwwLDEtLjA2Ljc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40Miwx''@;'; put 'put ''LjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40''@;'; put 'put ''OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm05Ljc1LDkuNzUsNi42NSw2LjY1YTQuODEsNC44MSwwLDAsMS0yLjUuNzJBNC44Nyw0Ljg3LDAsMCwxLDEzLjksMTgsNC44MSw0LjgxLDAsMCwxLDE0LjYy''@;'; put 'put ''LDE1LjUzWm0tMS40NS0xLjQ1YTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4zNywxMS4xN0E2Ljc5LDYuNzksMCwwLDAsMTYsMTEuNmw4LjgsOC44QTYuNzgsNi43OCwwLDAsMCwyNS4yMywxOCw2Ljg2LDYuODYsMCwwLDAsMTguMzcsMTEuMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4''@;'; put 'put ''LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5''@;'; put 'put ''LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSww''@;'; put 'put ''LDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVTdGVwRm9yd2FyZDI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTcuMDgsNi41MmExLjY4LDEuNjgsMCwwLDAsMCwyLjRMMTYuNTEsMTgsNy4xMiwyNy4wOGExLjcsMS43LDAsMCwwLDIuMzYsMi40NGgwTDIxLjQsMTgsOS40OCw2LjQ3QTEuNjksMS42OSwwLDAsMCw3LjA4LDYuNTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz48cGF0aCBkPSJNMjYuNDksNWExLjcsMS43LDAsMCwwLTEuNywxLjdWMjkuM2ExLjcsMS43LDAsMCwwLDMuNCwwVjYuN0ExLjcsMS43LDAsMCwwLDI2LjQ5LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQXJyb3c9KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LjY2LDE1LjYxLDE4LDYsOC4zNCwxNS42MUExLDEsMCwxLDAsOS43NSwxN0wxNyw5LjgxVjI4Ljk0YTEsMSwwLDEsMCwyLDBWOS44MUwyNi4yNSwxN2ExLDEsMCwwLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiLz4nKSxGLkNvcmVTaGFwZXM9eyJ1bmtub3duLXN0YXR1cyI6Ri5DbHJTaGFwZVVua25vd25TdGF0dXMsaG9tZTpGLkNsclNoYXBlSG9tZSxjb2c6Ri5DbHJTaGFwZUNvZyxjaGVjazpGLkNsclNoYXBlQ2hlY2ssdGltZXM6Ri5DbHJTaGFwZVRpbWVzLCJleGNsYW1hdGlv''@;'; put 'put ''bi10cmlhbmdsZSI6Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGUsImV4Y2xhbWF0aW9uLWNpcmNsZSI6Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlLCJjaGVjay1jaXJjbGUiOkYuQ2xyU2hhcGVDaGVja0NpcmNsZSwiaW5mby1jaXJjbGUiOkYuQ2xyU2hhcGVJbmZvQ2lyY2xlLCJp''@;'; put 'put ''bmZvLXN0YW5kYXJkIjpGLkNsclNoYXBlSW5mb1N0YW5kYXJkLCJzdWNjZXNzLXN0YW5kYXJkIjpGLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkLCJlcnJvci1zdGFuZGFyZCI6Ri5DbHJTaGFwZUVycm9yU3RhbmRhcmQsIndhcm5pbmctc3RhbmRhcmQiOkYuQ2xyU2hhcGVXYXJuaW5nU3RhbmRh''@;'; put 'put ''cmQsImhlbHAtaW5mbyI6Ri5DbHJTaGFwZUhlbHBJbmZvLGJhcnM6Ri5DbHJTaGFwZUJhcnMsdXNlcjpGLkNsclNoYXBlVXNlcixhbmdsZTpGLkNsclNoYXBlQW5nbGUsZm9sZGVyOkYuQ2xyU2hhcGVGb2xkZXIsImZvbGRlci1vcGVuIjpGLkNsclNoYXBlRm9sZGVyT3BlbixiZWxsOkYuQ2xy''@;'; put 'put ''U2hhcGVCZWxsLGltYWdlOkYuQ2xyU2hhcGVJbWFnZSxjbG91ZDpGLkNsclNoYXBlQ2xvdWQsImVsbGlwc2lzLWhvcml6b250YWwiOkYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWwsImVsbGlwc2lzLXZlcnRpY2FsIjpGLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbCwiZmlsdGVyLWdyaWQi''@;'; put 'put ''OkYuQ2xyU2hhcGVGaWx0ZXJHcmlkLCJmaWx0ZXItZ3JpZC1jaXJjbGUiOkYuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlLCJ2bS1idWciOkYuQ2xyU2hhcGVWbUJ1ZyxzZWFyY2g6Ri5DbHJTaGFwZVNlYXJjaCwidmlldy1jb2x1bW5zIjpGLkNsclNoYXBlVmlld0NvbHVtbnMsImFuZ2xlLWRv''@;'; put 'put ''dWJsZSI6Ri5DbHJTaGFwZUFuZ2xlRG91YmxlLGNhbGVuZGFyOkYuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpGLkNsclNoYXBlRXZlbnQsZXllOkYuQ2xyU2hhcGVFeWUsImV5ZS1oaWRlIjpGLkNsclNoYXBlRXllSGlkZSwic3RlcC1mb3J3YXJkLTIiOkYuQ2xyU2hhcGVTdGVwRm9yd2FyZDIs''@;'; put 'put ''YXJyb3c6Ri5DbHJTaGFwZUFycm93fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJob3VzZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuaG9tZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsInNldHRpbmdzIiwoMCx4LmRlc2Ny''@;'; put 'put ''aXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5jb2cpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJzdWNjZXNzIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5jaGVjaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNsb3NlIiwo''@;'; put 'put ''MCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy50aW1lcykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsIndhcm5pbmciLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi10cmlhbmdsZSJdKSksT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KEYuQ29yZVNoYXBlcywiZXJyb3IiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImluZm8iLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVz''@;'; put 'put ''WyJpbmZvLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBlcywibWVudSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYmFycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImF2YXRhciIsKDAseC5kZXNjcmlwdG9yQ29u''@;'; put 'put ''ZmlnKShGLkNvcmVTaGFwZXMudXNlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNhcmV0IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5hbmdsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImRpcmVjdG9yeSIsKDAseC5k''@;'; put 'put ''ZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuZm9sZGVyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBlcywibm90aWZpY2F0aW9uIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5iZWxsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBl''@;'; put 'put ''cywiY29sbGFwc2UiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJhbmdsZS1kb3VibGUiXSkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''Ki8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLEYuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlv''@;'; put 'put ''biB4KG0pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTptfX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPUYuY2hh''@;'; put 'put ''bmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsRi5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9O3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe3RoaXMuY2FsbGJhY2tzPUYuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sImluc3RhbmNl''@;'; put 'put ''Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uc2luZ2xlSW5zdGFuY2V8fChtLnNpbmdsZUluc3RhbmNlPW5ldyBtKSxtLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG0ucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKGxlLE0pe3ZhciBPPXRo''@;'; put 'put ''aXM7cmV0dXJuIHRoaXMuY2FsbGJhY2tzW2xlXT8tMT09PXRoaXMuY2FsbGJhY2tzW2xlXS5pbmRleE9mKE0pJiZ0aGlzLmNhbGxiYWNrc1tsZV0ucHVzaChNKTp0aGlzLmNhbGxiYWNrc1tsZV09W01dLGZ1bmN0aW9uKCl7dmFyIFI9Ty5jYWxsYmFja3NbbGVdLmluZGV4T2YoTSk7Ty5jYWxs''@;'; put 'put ''YmFja3NbbGVdLnNwbGljZShSLDEpLDA9PT1PLmNhbGxiYWNrc1tsZV0ubGVuZ3RoJiZkZWxldGUgTy5jYWxsYmFja3NbbGVdfX0sbS5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24obGUsTSl7dGhpcy5jYWxsYmFja3NbbGVdJiZ0aGlzLmNhbGxiYWNrc1tsZV0ubWFwKGZ1bmN0aW9u''@;'; put 'put ''KE8pe08oTSl9KX0sbX0oKTtGLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj14fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAg''@;'; put 'put ''ICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz''@;'; put 'put ''IGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmNsckljb25TVkc9dm9pZCAwO0YuY2xySWNvblNWRz1mdW5jdGlvbiBNKE8pe3ZhciBSPSIiO3JldHVybiBPLmluZGV4T2YoIi0t''@;'; put 'put ''YmFkZ2VkIik+LTEmJihSKz0iY2FuLWJhZGdlICIpLE8uaW5kZXhPZigiLS1hbGVydGVkIik+LTEmJihSKz0iY2FuLWFsZXJ0ICIpLE8uaW5kZXhPZigiY2xyLWktc29saWQiKT4tMSYmKFIrPSJoYXMtc29saWQgIiksKFI/JzxzdmcgdmVyc2lvbj0iMS4xIiBjbGFzcz0iJytSKyciIHZpZXdC''@;'; put 'put ''b3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6''@;'; put 'put ''JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNh''@;'; put 'put ''YmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStPKyI8L3N2Zz4ifX19KX0sMzQyMDk6ZnVuY3Rpb24oYXQpe2F0LmV4cG9ydHM9ZnVuY3Rpb24oSWUpe3ZhciBGPXt9O2Z1bmN0aW9uIGFlKHgpe2lmKEZbeF0pcmV0dXJuIEZbeF0uZXhwb3J0czt2YXIgbT1GW3hdPXtpOngsbDohMSxleHBvcnRz''@;'; put 'put ''Ont9fTtyZXR1cm4gSWVbeF0uY2FsbChtLmV4cG9ydHMsbSxtLmV4cG9ydHMsYWUpLG0ubD0hMCxtLmV4cG9ydHN9cmV0dXJuIGFlLm09SWUsYWUuYz1GLGFlLmQ9ZnVuY3Rpb24oeCxtLGxlKXthZS5vKHgsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LG0se2VudW1lcmFibGU6ITAsZ2V0''@;'; put 'put ''OmxlfSl9LGFlLnI9ZnVuY3Rpb24oeCl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHgsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KX0sYWUudD1mdW5jdGlvbih4LG0pe2lmKDEmbSYmKHg9YWUoeCkpLDgmbXx8NCZtJiYib2JqZWN0Ij09dHlwZW9mIHgmJngmJnguX19lc01vZHVsZSlyZXR1cm4geDt2YXIgbGU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihhZS5yKGxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobGUs''@;'; put 'put ''ImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnh9KSwyJm0mJiJzdHJpbmciIT10eXBlb2YgeClmb3IodmFyIE0gaW4geClhZS5kKGxlLE0sZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119LmJpbmQobnVsbCxNKSk7cmV0dXJuIGxlfSxhZS5uPWZ1bmN0aW9uKHgpe3ZhciBtPXgmJnguX19l''@;'; put 'put ''c01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB4LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHh9O3JldHVybiBhZS5kKG0sImEiLG0pLG19LGFlLm89ZnVuY3Rpb24oeCxtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsbSl9LGFlLnA9IiIsYWUoYWUu''@;'; put 'put ''cz0iLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAg''@;'; put 'put ''ICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJ''@;'; put 'put ''ZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQWxsU2hhcGVzPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4vY2hhcnQtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRz''@;'; put 'put ''IiksbT1hZSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksbGU9YWUoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKSxNPWFlKAov''@;'; put 'put ''KiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLE89YWUoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLFI9YWUoCi8qISAuL3Nv''@;'; put 'put ''Y2lhbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIiksej1hZSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLEs9YWUoCi8qISAuL3RleHQt''@;'; put 'put ''ZWRpdC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksST1hZSgKLyohIC4vdHJhdmVsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiKSxrPVtsZS5Db3JlU2hhcGVzLG0uQ29t''@;'; put 'put ''bWVyY2VTaGFwZXMsTS5Fc3NlbnRpYWxTaGFwZXMsTy5NZWRpYVNoYXBlcyxSLlNvY2lhbFNoYXBlcyx6LlRlY2hub2xvZ3lTaGFwZXMsSS5UcmF2ZWxTaGFwZXMseC5DaGFydFNoYXBlcyxLLlRleHRFZGl0U2hhcGVzXSxFPXt9O0YuQWxsU2hhcGVzPUU7Zm9yKHZhciBqPTAsVj1rO2o8Vi5s''@;'; put 'put ''ZW5ndGg7aisrKXt2YXIgQj1WW2pdO2Zvcih2YXIgWSBpbiBCKUIuaGFzT3duUHJvcGVydHkoWSkmJihFW1ldPUJbWV0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChFKX0sIi4vcHJvamVj''@;'; put 'put ''dHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoq''@;'; put 'put ''KiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxGLkNoYXJ0U2hhcGVzPUYuQ2xyU2hhcGVCZWxsQ3VydmU9Ri5DbHJTaGFwZVRpY2tDaGFydD1GLkNsclNoYXBlU2NhdHRlclBsb3Q9Ri5DbHJTaGFwZVBpZUNoYXJ0PUYuQ2xyU2hhcGVMaW5lQ2hhcnQ9Ri5DbHJTaGFwZUhlYXRNYXA9Ri5DbHJTaGFwZUdy''@;'; put 'put ''aWRDaGFydD1GLkNsclNoYXBlQ3VydmVDaGFydD1GLkNsclNoYXBlQ2xvdWRDaGFydD1GLkNsclNoYXBlQnViYmxlQ2hhcnQ9Ri5DbHJTaGFwZUJveFBsb3Q9Ri5DbHJTaGFwZUJhckNoYXJ0PUYuQ2xyU2hhcGVBeGlzQ2hhcnQ9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3Jp''@;'; put 'put ''cHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hh''@;'; put 'put ''cGVBeGlzQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMz''@;'; put 'put ''LjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3''@;'; put 'put ''LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1''@;'; put 'put ''IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg''@;'; put 'put ''NS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0''@;'; put 'put ''LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4y''@;'; put 'put ''MiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBM''@;'; put 'put ''IDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2LjAw''@;'; put 'put ''NyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkg''@;'; put 'put ''MTAuMzEgNiAxMC42NSA2IDExLjAxIEwgNi4wMDcgMjYuNzMxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1''@;'; put 'put ''IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjgu''@;'; put 'put ''MyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMx''@;'; put 'put ''IDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYg''@;'; put 'put ''TCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2''@;'; put 'put ''IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43''@;'; put 'put ''OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4''@;'; put 'put ''LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwg''@;'; put 'put ''MzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLEYu''@;'; put 'put ''Q2xyU2hhcGVCYXJDaGFydD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpN''@;'; put 'put ''NCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8''@;'; put 'put ''cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2''@;'; put 'put ''IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcg''@;'; put 'put ''MTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM''@;'; put 'put ''IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy''@;'; put 'put ''IDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYg''@;'; put 'put ''MjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUg''@;'; put 'put ''MjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3''@;'; put 'put ''IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI1IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2''@;'; put 'put ''IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg''@;'; put 'put ''NS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBM''@;'; put 'put ''IDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxOSBMIDIxIDE5IEwgMjEgMjYgTCAxOS40IDI2IEwgMTkuNCAyMC42IEwgMTYuNiAyMC42IEwgMTYuNiAy''@;'; put 'put ''NiBMIDE1IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAy''@;'; put 'put ''MyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAy''@;'; put 'put ''Ni44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQu''@;'; put 'put ''ODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3''@;'; put 'put ''LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYg''@;'; put 'put ''TCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIu''@;'; put 'put ''OTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQg''@;'; put 'put ''TCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxGLkNsclNoYXBlQm94UGxvdD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40''@;'; put 'put ''IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE5''@;'; put 'put ''IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIEwgMTkgMjQgWiBNIDIwLjYgMTEuNiBMIDI3LjQgMTEuNiBMIDI3LjQgMTcuMiBMIDIwLjYgMTcuMiBMIDIwLjYgMTEuNiBaIE0gMjcuNCAyMi40IEwgMjAuNiAyMi40IEwgMjAuNiAxOC44IEwgMjcuNCAxOC44IEwgMjcuNCAyMi40IFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMw''@;'; put 'put ''LjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0''@;'; put 'put ''IFogTSAxOSAyNCBMIDI5IDI0IEwgMjkgMTAgTCAxOSAxMCBaIE0gMjEgMTIgTCAyNyAxMiBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIg''@;'; put 'put ''MjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYg''@;'; put 'put ''TCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMTAgTCAyMy43MjggMTAgQyAyNC4xMDUgMTAuNTk2IDI0LjU2NCAxMS4xMzUgMjUuMDkgMTEuNiBMIDIwLjYgMTEuNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTIuOTg3IEMgMjcuOTA5IDEz''@;'; put 'put ''LjE3NyAyOC40NDUgMTMuMzEzIDI5IDEzLjM4NyBMIDI5IDI0IEwgMTkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5c''@;'; put 'put ''biAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYz''@;'; put 'put ''MyAxMCBMIDE5IDEwIEwgMTkgMjQgTCAyOSAyNCBMIDI5IDEzLjQyNyBDIDI5LjEwMyAxMy40NCAyOS4yMDYgMTMuNDUxIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAx''@;'; put 'put ''MiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDIxIDEyIEwgMjUuNDcyIDEyIEMgMjUuOTQgMTIuMzUyIDI2LjQ1MiAxMi42NSAyNyAxMi44ODUgTCAyNyAxNyBMIDIxIDE3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEg''@;'; put 'put ''MTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwg''@;'; put 'put ''NCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQg''@;'; put 'put ''MTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAyNCBMIDE5IDI0IEwgMTkgMTUuMzQ1IEMg''@;'; put 'put ''MTkuMDIxIDE1LjM0OCAyMC42IDE1LjM2IDIwLjYgMTUuMzYgTCAyMC42IDE3LjIgTCAyNy40IDE3LjIgTCAyNy40IDE1LjM2IEwgMjkgMTUuMzU3IEwgMjkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBMIDI3LjQgMTguOCBaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAy''@;'; put 'put ''MS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0''@;'; put 'put ''LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl''@;'; put 'put ''cnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDE5IDEwIEwgMTkgMTAuMDQ4IEwgMTcuNjI1IDEyLjM5NSBD''@;'; put 'put ''IDE2LjgwNyAxMy41ODMgMTcuNTcxIDE1LjE5NyAxOSAxNS4zNDUgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAx''@;'; put 'put ''NCBMIDE1IDE0IFogTSAyNyAxNyBMIDIxIDE3IEwgMjEgMTUuMzU3IEwgMjcgMTUuMzU3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAz''@;'; put 'put ''NS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZUJ1YmJsZUNoYXJ0PSgwLG0u''@;'; put 'put ''Y2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1''@;'; put 'put ''IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4z''@;'; put 'put ''NDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3''@;'; put 'put ''LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBD''@;'; put 'put ''IDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAx''@;'; put 'put ''My40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUg''@;'; put 'put ''MjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMg''@;'; put 'put ''MTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0''@;'; put 'put ''IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2''@;'; put 'put ''LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAy''@;'; put 'put ''OSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAy''@;'; put 'put ''Mi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBa''@;'; put 'put ''Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcgMjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2''@;'; put 'put ''LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIyNyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBa''@;'; put 'put ''IE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1''@;'; put 'put ''NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAy''@;'; put 'put ''MS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMw''@;'; put 'put ''LjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEu''@;'; put 'put ''NzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3''@;'; put 'put ''IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAx''@;'; put 'put ''OCAyMCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBM''@;'; put 'put ''IDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4z''@;'; put 'put ''NDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE0IEMgMTUgMTYuMjA5IDEzLjIwOSAxOCAxMSAxOCBDIDguNzkxIDE4IDcgMTYuMjA5IDcgMTQgQyA3IDExLjc5MSA4Ljc5MSAxMCAx''@;'; put 'put ''MSAxMCBDIDEzLjIwOSAxMCAxNSAxMS43OTEgMTUgMTQgWiBNIDExIDExLjYgQyA5LjY3NSAxMS42IDguNiAxMi42NzUgOC42IDE0IEMgOC42IDE1LjMyNSA5LjY3NSAxNi40IDExIDE2LjQgQyAxMi4zMjUgMTYuNCAxMy40IDE1LjMyNSAxMy40IDE0IEMgMTMuNCAxMi42NzUgMTIuMzI1IDEx''@;'; put 'put ''LjYgMTEgMTEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIz''@;'; put 'put ''IEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5''@;'; put 'put ''LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4''@;'; put 'put ''NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAy''@;'; put 'put ''MS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNC41NzkgMTUuMzU3IEMgMjMuNjM5IDE1Ljg2MyAyMyAxNi44NTcgMjMgMTggQyAyMyAx''@;'; put 'put ''OS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2Ljg1NyAyOC4zNjEgMTUuODYzIDI3LjQyMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMg''@;'; put 'put ''MTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1''@;'; put 'put ''NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAy''@;'; put 'put ''Mi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjku''@;'; put 'put ''MDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZUNsb3VkQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0''@;'; put 'put ''QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsMjlWN0gzMlYyOVoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMC45NzEgMTEuMjQzIEMgMjMuMzE0IDEzLjU4NiAyMi4zNjQgMTguMzM1IDE4Ljg0OSAyMS44NDkgQyAx''@;'; put 'put ''NS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy44NzkgOS44NDkgMTguNjI4IDguOSAyMC45NzEgMTEuMjQzIFogTSAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1''@;'; put 'put ''OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDIwLjM4OCAxNy43NjUgMjEuMzM4IDE0LjE1NiAxOS42OTcgMTIuNTE2IEMgMTguMDU3IDEwLjg3NiAxNC40NDggMTEuODI1IDExLjYzNiAxNC42MzcgWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjgg''@;'; put 'put ''MjIgWiBNIDI1IDIwLjYgQyAyNC4yMjcgMjAuNiAyMy42IDIxLjIyNyAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI3IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNyAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEw''@;'; put 'put ''NSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSAxMC4zNjQgMTMuMzY0IEMgNi44NDkgMTYuODc4IDUuODk5IDIxLjYyNyA4LjI0MyAyMy45NyBDIDEwLjU4NiAyNi4zMTQgMTUuMzM0IDI1LjM2NCAxOC44NDkgMjEu''@;'; put 'put ''ODQ5IEMgMjIuMzY0IDE4LjMzNSAyMy4zMTQgMTMuNTg2IDIwLjk3MSAxMS4yNDMgQyAxOC42MjggOC45IDEzLjg3OSA5Ljg0OSAxMC4zNjQgMTMuMzY0IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1''@;'; put 'put ''IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41''@;'; put 'put ''NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQg''@;'; put 'put ''MzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMx''@;'; put 'put ''NCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAy''@;'; put 'put ''NC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1''@;'; put 'put ''IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iNyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu''@;'; put 'put ''ODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIz''@;'; put 'put ''Ljk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAy''@;'; put 'put ''MiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44''@;'; put 'put ''OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1''@;'; put 'put ''LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuMDQ5IDEwLjY3OSAxNi40NTMgOS40OTIgMTguOTU2IDEwLjEyNCBMIDE4LjAwOCAxMS43NDEgQyAxNi4xOCAxMS41MTggMTMuNjk1IDEyLjU3OCAxMS42''@;'; put 'put ''MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDE5LjIyOCAxOC45MjUgMjAuMjM3IDE2Ljk5OCAyMC40NTYgMTUuMzU3IEwgMjIuMjIgMTUuMzU3IEMgMjIuMDA2IDE3''@;'; put 'put ''LjQ3NyAyMC44MzggMTkuODYxIDE4Ljg0OSAyMS44NDkgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUg''@;'; put 'put ''MjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40''@;'; put 'put ''IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQg''@;'; put 'put ''MTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQg''@;'; put 'put ''WiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAy''@;'; put 'put ''Ljg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTguOTU2IDEwLjEyNCBDIDE2LjQ1MyA5LjQ5MiAxMy4wNDkgMTAuNjc5IDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkg''@;'; put 'put ''QyAyMC44MzggMTkuODYxIDIyLjAwNiAxNy40NzcgMjIuMjIgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42''@;'; put 'put ''NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45Mjgg''@;'; put 'put ''MjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5''@;'; put 'put ''LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1''@;'; put 'put ''IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9w''@;'; put 'put ''YXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2''@;'; put 'put ''LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1''@;'; put 'put ''LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAx''@;'; put 'put ''NC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAu''@;'; put 'put ''OTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45''@;'; put 'put ''NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAy''@;'; put 'put ''Mi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAg''@;'; put 'put ''PHBhdGggZD0iTSA3IDExLjggQyA2LjU1OCAxMS44IDYuMiAxMS40NDIgNi4yIDExIEMgNi4yIDEwLjU1OCA2LjU1OCAxMC4yIDcgMTAuMiBMIDEzIDEwLjIgQyAxNS40MDQgMTAuMiAxNi4zNjggMTEuOTA3IDE3LjY1MyAxNi40NzggQyAxNy42OTUgMTYuNjI4IDE3Ljc0NCAxNi44MDMgMTcu''@;'; put 'put ''ODM1IDE3LjEyOSBDIDE3LjkwOSAxNy4zOTIgMTcuOTY0IDE3LjU4OCAxOC4wMTkgMTcuNzggQyAxOS4zMzIgMjIuMzc1IDIwLjU0OSAyNC4yIDIzIDI0LjIgTCAyOSAyNC4yIEMgMjkuNDQyIDI0LjIgMjkuOCAyNC41NTggMjkuOCAyNSBDIDI5LjggMjUuNDQyIDI5LjQ0MiAyNS44IDI5IDI1''@;'; put 'put ''LjggTCAyMyAyNS44IEMgMTkuNTM1IDI1LjggMTcuOTgxIDIzLjQ2OSAxNi40ODEgMTguMjIgQyAxNi40MjUgMTguMDI1IDE2LjM2OSAxNy44MjYgMTYuMjk1IDE3LjU2IEMgMTYuMjAzIDE3LjIzNCAxNi4xNTQgMTcuMDYgMTYuMTEzIDE2LjkxMSBDIDE1LjA0MyAxMy4xMDUgMTQuMzA1IDEx''@;'; put 'put ''LjggMTMgMTEuOCBMIDcgMTEuOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5''@;'; put 'put ''NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMyAxMiBDIDE0Ljgx''@;'; put 'put ''NyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0''@;'; put 'put ''IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2''@;'; put 'put ''IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2''@;'; put 'put ''IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4y''@;'; put 'put ''IDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAy''@;'; put 'put ''OS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4y''@;'; put 'put ''MDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUg''@;'; put 'put ''MjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0''@;'; put 'put ''OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAy''@;'; put 'put ''IDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE3LjQ3NiAxMi42MTIgMTcuMzc5IDEyLjg0MyAxNy4zMyAxMy4wNzcgQyAxNy4yNjIgMTIuOTQ4IDE3LjE5MiAxMi44MiAxNy4xMTggMTIuNjkxIEMgMTYuMTMgMTAuOTYyIDE0Ljc5''@;'; put 'put ''NSAxMCAxMyAxMCBMIDcgMTAgQyA2LjQ0OCAxMCA2IDEwLjQ0OCA2IDExIEMgNiAxMS41NTIgNi40NDggMTIgNyAxMiBMIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTku''@;'; put 'put ''ODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC42NCAxNi41OTggMTguMzg1IDE1Ljc0''@;'; put 'put ''NCAxOC4xNDcgMTUuMDQ0IEMgMTguNDA3IDE1LjIxNSAxOC43MTcgMTUuMzI2IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMz''@;'; put 'put ''LjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4n''@;'; put 'put ''KSxGLkNsclNoYXBlR3JpZENoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwx''@;'; put 'put ''NSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoi''@;'; put 'put ''Lz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4g''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDMyIDYgQyAzMy4xMDUgNiAzNCA2Ljg5NSAzNCA4IEwgMzQgMTUg''@;'; put 'put ''QyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBD''@;'; put 'put ''IDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNIDMyIDMwIEwgMjEgMzAgQyAxOS44OTUgMzAgMTkgMjkuMTA1IDE5IDI4IEwg''@;'; put 'put ''MTkgMjEgQyAxOSAxOS44OTUgMTkuODk1IDE5IDIxIDE5IEwgMzIgMTkgQyAzMy4xMDUgMTkgMzQgMTkuODk1IDM0IDIxIEwgMzQgMjggQyAzNCAyOS4xMDUgMzMuMTA1IDMwIDMyIDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMS1hbGVydGVkIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAxOS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1''@;'; put 'put ''LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtYWxlcnRlZCIg''@;'; put 'put ''ZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC1hbGVydGVkIiBk''@;'; put 'put ''PSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4w''@;'; put 'put ''MzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUg''@;'; put 'put ''MTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAyMC4wMTQgMTcgMTkuMTk1IDE2LjI4NyAxOS4wMyAxNS4zNDggQyAxOS4wNDEgMTUuMzQ5IDE5LjA1MyAxNS4z''@;'; put 'put ''NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDMzLjk2OCAxNS4zNTcgQyAzMy44IDE2LjI5MiAzMi45ODMgMTcgMzIgMTcgWiBNIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjEuMzcyIDYgTCAxOSAxMC4wNDggWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3''@;'; put 'put ''IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkg''@;'; put 'put ''MjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAw''@;'; put 'put ''NCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIy''@;'; put 'put ''LjU5IDYuMDU2IEMgMjIuNTkgNi43MjkgMjIuNjggNy4zODEgMjIuODQ4IDggTCAyMSA4IEwgMjEgMTUgTCAzMiAxNSBMIDMyIDEzLjE3NSBDIDMyLjcxNyAxMi45NzIgMzMuMzg5IDEyLjY2NCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPlxuICA8''@;'; put 'put ''Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg''@;'; put 'put ''ZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIyLjU5IDYgQyAyMi41OSA2LjAxOSAyMi41OSA2LjAzNyAyMi41OSA2''@;'; put 'put ''LjA1NiBDIDIyLjU5IDEwLjE0MSAyNS45MDEgMTMuNDUyIDI5Ljk4NiAxMy40NTIgQyAzMS40NjYgMTMuNDUyIDMyLjg0NCAxMy4wMTggMzQgMTIuMjY5IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1''@;'; put 'put ''IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAz''@;'; put 'put ''MiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2''@;'; put 'put ''IiByPSI1Ii8+JyksRi5DbHJTaGFwZUhlYXRNYXA9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMx''@;'; put 'put ''IDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDI4IDEwIEwgMjggMjYgTCA4IDI2IFogTSA5LjYg''@;'; put 'put ''MjQgTCAxNC4xIDI0IEwgMTQuMSAxOC44IEwgOS42IDE4LjggWiBNIDE0LjEgMTEuNiBMIDkuNiAxMS42IEwgOS42IDE3LjIgTCAxNC4xIDE3LjIgWiBNIDI2IDI0IEwgMjYgMTguOCBMIDIxLjkgMTguOCBMIDIxLjkgMjQgWiBNIDI2IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAy''@;'; put 'put ''NiAxNy4yIFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4z''@;'; put 'put ''MzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjEuOSAxMS42IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDEyLjI4NyBDIDI2LjYxMSAxMi42NzkgMjcuMjg0IDEyLjk4MyAyOCAxMy4xODIgTCAyOCAy''@;'; put 'put ''NiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAxMS42IEwgMTUuNyAx''@;'; put 'put ''Ny4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxMS42IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBa''@;'; put 'put ''Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDE5LjAyOCAxMCBMIDE4LjA5MSAxMS42IEwgMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxNS4zNTcgTCAyMS45IDE1LjM1NyBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgTCAyNiAxNS4zNTcgTCAyOCAxNS4zNTcg''@;'; put 'put ''TCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAyNCBMIDIw''@;'; put 'put ''LjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2''@;'; put 'put ''OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQg''@;'; put 'put ''NyBaIE0gOCAyNiBMIDI4IDI2IEwgMjggMTAgTCA4IDEwIFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTIgTCAy''@;'; put 'put ''NiAxMiBaIE0gMjAgMTIgTCAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAz''@;'; put 'put ''NCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjIuMzEyIDYuODE3IDIyLjczMiA4LjU2NiAyMy42MzMgMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwg''@;'; put 'put ''MjggMTMuMjMyIEMgMjguNDIxIDEzLjM0NSAyOC44NTkgMTMuNDIyIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkg''@;'; put 'put ''TCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI1LjU4NCAxMiBDIDI1LjcxOSAxMi4xIDI1Ljg1OCAxMi4xOTYgMjYgMTIuMjg3IFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAx''@;'; put 'put ''NCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMjItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxOS4wMjggMTAg''@;'; put 'put ''TCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3''@;'; put 'put ''IEwgMjIgMTUuMzU3IEwgMjYgMTUuMzU3IFogTSAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgTCAxNy44NTYgMTIgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3''@;'; put 'put ''IEwgMjAgMTUuMzU3IFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAx''@;'; put 'put ''MS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDEx''@;'; put 'put ''LjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVMaW5lQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBa''@;'; put 'put ''IE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMw''@;'; put 'put ''LjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcG9seWdvbj5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIg''@;'; put 'put ''NyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk2IDMzLjEwNSA1IDMyIDUgWiBNIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTku''@;'; put 'put ''MDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuNjUgMTMgTCAzMS4zNSAxNC4yOCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMy''@;'; put 'put ''IDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMx''@;'; put 'put ''IEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAy''@;'; put 'put ''MS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BvbHlnb24+XG4gIDxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzAu''@;'; put 'put ''MzIgMTMuNDggTCAzMS4zOCAxNC4yOCBMIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuMzEgMTMuNDYgQyAyNS4wNSAxMy4xIDIxLjk2OSA5LjIz''@;'; put 'put ''MyAyMi41NyA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgMTIuMzQgQyAzMi44OTUgMTMuMDM2IDMxLjYyNiAxMy40MjkgMzAuMzIgMTMuNDggWiI+PC9w''@;'; put 'put ''YXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMy''@;'; put 'put ''IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUuNjIgMTUuMjIyIEwgOS42MDIgMjMuOTY4IEwgNS41NSAyMC4zODQgTCA2LjYxIDE5LjE4NiBMIDkuMzA4IDIxLjU3MiBMIDE1LjYzNCAxMi4zOCBMIDIyLjM4NCAyMi4zOTUgTCAyNy43MTcgMTUuMzQ4IEwg''@;'; put 'put ''MjkuNzI0IDE1LjM0OCBMIDIyLjMwOCAyNS4xNDUgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5''@;'; put 'put ''IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUg''@;'; put 'put ''MTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjcuNDUyIDE1LjM1NyBMIDIyLjM4IDIyLjA2IEwgMTUuNjMgMTIgTCA5LjI4IDIxLjI4IEwgNi43NSAxOS4wNCBMIDUu''@;'; put 'put ''NDIgMjAuNTMgTCA5LjY1IDI0LjI4IEwgMTUuNjEgMTUuNTYgTCAyMi4yOCAyNS41IEwgMjkuOTU5IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQi''@;'; put 'put ''IGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEu''@;'; put 'put ''OTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZVBpZUNoYXJ0PSgwLG0uY2xySWNvblNWRyko''@;'; put 'put ''J1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQg''@;'; put 'put ''NyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMu''@;'; put 'put ''NDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIz''@;'; put 'put ''LjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42''@;'; put 'put ''IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg''@;'; put 'put ''MzEgQyAzMiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBD''@;'; put 'put ''IDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM''@;'; put 'put ''IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy''@;'; put 'put ''IDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBM''@;'; put 'put ''IDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQg''@;'; put 'put ''MjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4x''@;'; put 'put ''OTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMg''@;'; put 'put ''MzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAz''@;'; put 'put ''Mi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4''@;'; put 'put ''IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAy''@;'; put 'put ''OSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBN''@;'; put 'put ''IDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI3IDE3IEwgMTkgMTcgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDE5LjA0MyAxNS4zNDkgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAx''@;'; put 'put ''IDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNi44MzEgMTUuMzU3IEMgMjYuOTQyIDE1Ljg4NyAyNyAxNi40MzcgMjcgMTcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2''@;'; put 'put ''IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1''@;'; put 'put ''NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAy''@;'; put 'put ''IDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDE3IEwgMjcgMTcgQyAyNyAxNi40MzcgMjYuOTQyIDE1Ljg4NyAyNi44MzEgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBM''@;'; put 'put ''IDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2''@;'; put 'put ''OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVTY2F0dGVy''@;'; put 'put ''UGxvdD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMx''@;'; put 'put ''IDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjEx''@;'; put 'put ''MSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5''@;'; put 'put ''MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBD''@;'; put 'put ''IDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcg''@;'; put 'put ''MTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBD''@;'; put 'put ''IDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAy''@;'; put 'put ''Ny41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41''@;'; put 'put ''ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45''@;'; put 'put ''MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMx''@;'; put 'put ''IDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45''@;'; put 'put ''NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAu''@;'; put 'put ''OTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAx''@;'; put 'put ''NC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44''@;'; put 'put ''MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4''@;'; put 'put ''LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMg''@;'; put 'put ''MTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42Mzcg''@;'; put 'put ''MjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4z''@;'; put 'put ''NzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAy''@;'; put 'put ''Mi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYu''@;'; put 'put ''NjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4z''@;'; put 'put ''NCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1''@;'; put 'put ''LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYg''@;'; put 'put ''MTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEz''@;'; put 'put ''OSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNIDE1LjE3''@;'; put 'put ''NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAy''@;'; put 'put ''NC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIg''@;'; put 'put ''MjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFoiLz5cbiAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUg''@;'; put 'put ''MjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUu''@;'; put 'put ''NDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4''@;'; put 'put ''MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAy''@;'; put 'put ''Ljg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu''@;'; put 'put ''OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx''@;'; put 'put ''My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5''@;'; put 'put ''IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42''@;'; put 'put ''MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw''@;'; put 'put ''Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w''@;'; put 'put ''ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIg''@;'; put 'put ''MjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUu''@;'; put 'put ''NTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5''@;'; put 'put ''MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBj''@;'; put 'put ''eT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg''@;'; put 'put ''NS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0g''@;'; put 'put ''OS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42''@;'; put 'put ''NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4w''@;'; put 'put ''NjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAx''@;'; put 'put ''OS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYz''@;'; put 'put ''NiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQu''@;'; put 'put ''ODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQu''@;'; put 'put ''MDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAy''@;'; put 'put ''Ny45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41''@;'; put 'put ''OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMu''@;'; put 'put ''MDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAx''@;'; put 'put ''Ny42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu''@;'; put 'put ''OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx''@;'; put 'put ''My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5''@;'; put 'put ''IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42''@;'; put 'put ''MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw''@;'; put 'put ''Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w''@;'; put 'put ''ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIg''@;'; put 'put ''MjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUu''@;'; put 'put ''NTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5''@;'; put 'put ''MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44''@;'; put 'put ''NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1''@;'; put 'put ''IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsLW9wYWNpdHk9IjAiLz4nKSxG''@;'; put 'put ''LkNsclNoYXBlVGlja0NoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIg''@;'; put 'put ''MzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA2IDI1IEwgOCAy''@;'; put 'put ''NSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40''@;'; put 'put ''NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAz''@;'; put 'put ''MSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMg''@;'; put 'put ''MjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUg''@;'; put 'put ''MjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIg''@;'; put 'put ''WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gNiAyNSBMIDggMjUgTCA4IDIyIEwgMTAgMjIgTCAxMCAyNSBMIDEzIDI1IEwgMTMgMjIgTCAxNSAyMiBMIDE1IDI1IEwgMTggMjUgTCAxOCAyMiBMIDIw''@;'; put 'put ''IDIyIEwgMjAgMjUgTCAyMyAyNSBMIDIzIDIyIEwgMjUgMjIgTCAyNSAyNSBMIDI3LjcyMyAyNSBDIDI4LjAyMyAyNS4wMiAyOC4yOTMgMjUuMTggMjguNDYzIDI1LjQzIEMgMjguOTAzIDI2LjA2IDI4LjQ4MyAyNi45MyAyNy43MjMgMjYuOTkgTCA2IDI2Ljk5MSBaIi8+XG4gIDxjaXJjbGUg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0''@;'; put 'put ''IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDgg''@;'; put 'put ''QyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAy''@;'; put 'put ''MyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBM''@;'; put 'put ''IDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBM''@;'; put 'put ''IDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQg''@;'; put 'put ''MTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUg''@;'; put 'put ''TCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA2IDI2Ljk5MSBMIDI3LjcyMyAyNi45OSBDIDI4LjQ4MyAyNi45MyAyOC45MDMg''@;'; put 'put ''MjYuMDYgMjguNDYzIDI1LjQzIEMgMjguMjkzIDI1LjE4IDI4LjAyMyAyNS4wMiAyNy43MjMgMjUgTCAyNSAyNSBMIDI1IDIyIEwgMjMgMjIgTCAyMyAyNSBMIDIwIDI1IEwgMjAgMjIgTCAxOCAyMiBMIDE4IDI1IEwgMTUgMjUgTCAxNSAyMiBMIDEzIDIyIEwgMTMgMjUgTCAxMCAyNSBMIDEw''@;'; put 'put ''IDIyIEwgOCAyMiBMIDggMjUgTCA2IDI1IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQg''@;'; put 'put ''MTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4w''@;'; put 'put ''MDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz4nKSxGLkNsclNoYXBlQmVsbEN1cnZlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyOUgzQTEsMSwwLDEsMSwzLDI3SDMzQTEsMSwwLDEsMSwzMywyOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNWgtLjYyYTguMTEsOC4xMSwwLDAsMS04LTYuNjdDMjMuNjIsMTQuNDQsMjEuODksNy45NCwxOCw3Ljk0cy01LjY5LDYuNTEtNi4zOCwxMC4zOWE4LjExLDguMTEsMCwwLDEtOCw2LjY1SDNhMSwxLDAs''@;'; put 'put ''MSwxLDAtMmguNkE2LjExLDYuMTEsMCwwLDAsOS42LDE4YzEuNDEtNy44OCw0LjMtMTIsOC4zNS0xMnM2LjkzLDQuMTYsOC4zMywxMmE2LjExLDYuMTEsMCwwLDAsNiw1SDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxG''@;'; put 'put ''LkNoYXJ0U2hhcGVzPXsiYXhpcy1jaGFydCI6Ri5DbHJTaGFwZUF4aXNDaGFydCwiYmFyLWNoYXJ0IjpGLkNsclNoYXBlQmFyQ2hhcnQsImJ1YmJsZS1jaGFydCI6Ri5DbHJTaGFwZUJ1YmJsZUNoYXJ0LCJjbG91ZC1jaGFydCI6Ri5DbHJTaGFwZUNsb3VkQ2hhcnQsImN1cnZlLWNoYXJ0IjpG''@;'; put 'put ''LkNsclNoYXBlQ3VydmVDaGFydCwiZ3JpZC1jaGFydCI6Ri5DbHJTaGFwZUdyaWRDaGFydCwibGluZS1jaGFydCI6Ri5DbHJTaGFwZUxpbmVDaGFydCwicGllLWNoYXJ0IjpGLkNsclNoYXBlUGllQ2hhcnQsInRpY2stY2hhcnQiOkYuQ2xyU2hhcGVUaWNrQ2hhcnQsInNjYXR0ZXItcGxvdCI6''@;'; put 'put ''Ri5DbHJTaGFwZVNjYXR0ZXJQbG90LCJib3gtcGxvdCI6Ri5DbHJTaGFwZUJveFBsb3QsImhlYXQtbWFwIjpGLkNsclNoYXBlSGVhdE1hcCwiYmVsbC1jdXJ2ZSI6Ri5DbHJTaGFwZUJlbGxDdXJ2ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ2hhcnRTaGFwZXMsImFuYWx5dGljcyIsKDAs''@;'; put 'put ''eC5kZXNjcmlwdG9yQ29uZmlnKShGLkNoYXJ0U2hhcGVzWyJsaW5lLWNoYXJ0Il0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5DaGFydFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z''@;'; put 'put ''L3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAq''@;'; put 'put ''KiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Db21tZXJjZVNoYXBlcz1GLkNsclNoYXBlRmFjdG9yeT1GLkNsclNoYXBlRW1wbG95ZWU9Ri5DbHJTaGFwZUVtcGxveWVlR3JvdXA9Ri5DbHJTaGFwZVJ1YmxlPUYuQ2xyU2hhcGVQZXNvPUYuQ2xyU2hhcGVDb2luQmFnPUYuQ2xyU2hhcGVCaXRj''@;'; put 'put ''b2luPUYuQ2xyU2hhcGVZZW49Ri5DbHJTaGFwZVdvbj1GLkNsclNoYXBlUnVwZWU9Ri5DbHJTaGFwZVBvdW5kPUYuQ2xyU2hhcGVFQ2hlY2s9Ri5DbHJTaGFwZURvbGxhckJpbGw9Ri5DbHJTaGFwZUJhbms9Ri5DbHJTaGFwZUNyZWRpdENhcmQ9Ri5DbHJTaGFwZURvbGxhcj1GLkNsclNoYXBl''@;'; put 'put ''RXVybz1GLkNsclNoYXBlU3RvcmU9Ri5DbHJTaGFwZVdhbGxldD1GLkNsclNoYXBlU2hvcHBpbmdDYXJ0PUYuQ2xyU2hhcGVQaWdneUJhbms9Ri5DbHJTaGFwZVNob3BwaW5nQmFnPUYuQ2xyU2hhcGVDYWxjdWxhdG9yPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3It''@;'; put 'put ''Y29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlQ2Fs''@;'; put 'put ''Y3VsYXRvcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk04LDMyVjRIMjhWMzJa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEyLDhIMjUuNjdWNkgxMWExLDEsMCwwLDAtMSwxdjQuNjdoMloiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zIiBwb2ludHM9IjEyIDE2IDEwIDE2IDEwIDE4IDE0IDE4IDE0IDE0IDEyIDE0IDEyIDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNCAxNiAyMiAxNiAyMiAxOCAyNiAxOCAyNiAx''@;'; put 'put ''NCAyNCAxNCAyNCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHBvaW50cz0iMTggMTYgMTYgMTYgMTYgMTggMjAgMTggMjAgMTQgMTggMTQgMTggMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBwb2ludHM9IjEyIDIyIDEwIDIyIDEwIDI0IDE0IDI0IDE0IDIwIDEyIDIwIDEyIDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgcG9pbnRzPSIyNCAy''@;'; put 'put ''MiAyMiAyMiAyMiAyNCAyNiAyNCAyNiAyMCAyNCAyMCAyNCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHBvaW50cz0iMTggMjIgMTYgMjIgMTYgMjQgMjAgMjQgMjAgMjAgMTggMjAgMTggMjIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiBwb2ludHM9IjEyIDI4IDEwIDI4IDEwIDMwIDE0IDMwIDE0IDI2IDEyIDI2IDEyIDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMTAiIHBvaW50cz0iMjQgMjggMjIgMjggMjIgMzAgMjYgMzAgMjYgMjYgMjQgMjYgMjQgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgcG9pbnRzPSIxOCAyOCAxNiAyOCAxNiAzMCAyMCAzMCAy''@;'; put 'put ''MCAyNiAxOCAyNiAxOCAyOCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMiwyOEgxMFYy''@;'; put 'put ''NmgyWm0wLTZIMTBWMjBoMlptMC02SDEwVjE0aDJabTcsMTJIMTdWMjZoMlptMC02SDE3VjIwaDJabTAtNkgxN1YxNGgyWm03LDEySDI0VjI2aDJabTAtNkgyNFYyMGgyWm0wLTZIMjRWMTRoMlptMC03SDEwVjVIMjZaIi8+JyksRi5DbHJTaGFwZVNob3BwaW5nQmFnPSgwLG0uY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUsMTJWOS4wNWE3LDcsMCwxLDAtMTQsMHY3YTEsMSwwLDAsMCwyLDBWMTRoOFYxMkgxM1Y5LjA1YTUsNSwwLDEsMSwxMCwwVjE2YTEsMSwwLDEsMCwyLDBWMTRoNVYzMkg2VjE0SDlWMTJI''@;'; put 'put ''NFYzMi4wOUExLjkxLDEuOTEsMCwwLDAsNS45MSwzNEgzMC4wOUExLjkxLDEuOTEsMCwwLDAsMzIsMzIuMDlWMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTMsOS4yMmE1LDUsMCwxLDEsMTAsMFYxMmgyVjkuMjJh''@;'; put 'put ''Nyw3LDAsMSwwLTE0LDBWMTJoMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNSwxMnYzLjFhMSwxLDAsMSwxLTIsMFYxMkgxM3YzLjFhMSwxLDAsMCwxLTIsMFYxMkg0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs''@;'; put 'put ''MCwwLDItMlYxMloiLz4nKSxGLkNsclNoYXBlUGlnZ3lCYW5rPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNzIsMTAuNDdhMTEuNjUsMTEuNjUsMCwwLDAtNi4zMS41MkEuOC44LDAsMSwwLDE0LDEyLjQ4''@;'; put 'put ''LDEwLjExLDEwLjExLDAsMCwxLDE5LjQ0LDEyYS44LjgsMCwxLDAsLjI4LTEuNTdaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjUuMzgiIGN5PSIxNi43MSIgcj0iMS4zNiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNS41MSwxOC42M2ExLDEsMCwwLDAtLjg0LS40NCwzLjQyLDMuNDIsMCwwLDEtMi4wOS0xLjEyLDE3LjM1LDE3LjM1LDAsMCwxLTIuNjMtMy43OGwyLjg4LTQuNUExLjg5LDEuODksMCwwLDAsMzMsN2Ex''@;'; put 'put ''Ljc3LDEuNzcsMCwwLDAtMS4zMy0xLDEwLjEyLDEwLjEyLDAsMCwwLTUuMzkuNzUsMTIuNzIsMTIuNzIsMCwwLDAtMi43MiwxLjYzLDE2Ljk0LDE2Ljk0LDAsMCwwLTUuMTYtMS4zOUMxMS4zMSw2LjMsNC44MywxMC45LDQsMTdINGEyLjU2LDIuNTYsMCwwLDEtMS4zOC0xLjUzLDEuODEsMS44''@;'; put 'put ''MSwwLDAsMSwuMTQtMS40LDEuMTksMS4xOSwwLDAsMSwuNDMtLjQzLDEuMDgsMS4wOCwwLDAsMC0xLjEyLTEuODVBMy4zMSwzLjMxLDAsMCwwLC45MSwxM2E0LDQsMCwwLDAtLjMzLDMuMDhBNC43Niw0Ljc2LDAsMCwwLDMsMTguOTVsLjkyLjQ2YTE3LjU4LDE3LjU4LDAsMCwwLDEuODIsN2wu''@;'; put 'put ''MTcuMzhBMjMsMjMsMCwwLDAsOS4yLDMxLjg4YTEsMSwwLDAsMCwuNzUuMzRoNC41MmExLDEsMCwwLDAsLjkyLTEuMzhMMTUsMjkuOTRsMS4xOC4xM2EyMC4zMywyMC4zMywwLDAsMCw0LDBjLjM3LjYuNzcsMS4yLDEuMjEsMS43OWExLDEsMCwwLDAsLjguNDFoNC4zNGExLDEsMCwwLDAsLjky''@;'; put 'put ''LTEuMzljLS4xNy0uNC0uMzQtLjgzLS40Ny0xLjItLjE4LS41My0uMzItMS0uNDMtMS40NUExMy4xOCwxMy4xOCwwLDAsMCwyOS41NiwyNmExMi41LDEyLjUsMCwwLDAsMywwLDEsMSwwLDAsMCwuNzgtLjYybDIuMjYtNS44MUExLDEsMCwwLDAsMzUuNTEsMTguNjNabS0zLjc4LDUuNDRhMTEu''@;'; put 'put ''MzcsMTEuMzcsMCwwLDEtMi4zNS0uMTFoMGE4LjIsOC4yLDAsMCwxLTIuNTMtLjg3LDEsMSwwLDAsMC0uOTMsMS43NywxMS43MiwxMS43MiwwLDAsMCwxLjI5LjU4LDgsOCwwLDAsMS0xLjgsMS4xNmwtMS4wNi40OHMuNDksMi4xOS44MiwzLjE2SDIyLjc5Yy0uMjQtLjM0LTEuNDUtMi4zNi0x''@;'; put 'put ''LjQ1LTIuMzZsLS42Ny4wOWExOC41MywxOC41MywwLDAsMS00LjI1LjEyYy0uNjYtLjA2LTEuNzYtLjItMi42Mi0uMzVsLTEuNTUtLjI3cy42MywyLjQzLjc1LDIuNzR2MEgxMC40MkEyMC41NywyMC41NywwLDAsMSw3Ljc2LDI2bC0uMTgtLjM5QTE0LjYyLDE0LjYyLDAsMCwxLDYsMTcuNDhj''@;'; put 'put ''LjU0LTUuMTksNi4xMi05LjExLDEyLjE5LTguNTRhMTUuNDcsMTUuNDcsMCwwLDEsNS4wOCwxLjQ4bC42Mi4yOS41LS40N0ExMC4yOSwxMC4yOSwwLDAsMSwyNyw4LjU0YTguMjUsOC4yNSwwLDAsMSw0LS42NWwtMy4zOCw1LjI5LjI1LjVoMGEyMS4xNiwyMS4xNiwwLDAsMCwzLjMxLDQuODQs''@;'; put 'put ''Ni40OSw2LjQ5LDAsMCwwLDIuMTQsMS4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNSwxOC44N0E1LjgzLDUuODMsMCwwLDEsMzMsMTcuNjFhMjEuNjMsMjEuNjMsMCwwLDEtMy4yOS00Ljg0bDMuMzktNS4yOWEu''@;'; put 'put ''OS45LDAsMCwwLS41NC0xLjM4LDkuNjcsOS42NywwLDAsMC01LjEzLjcyLDEyLDEyLDAsMCwwLTMuMTMsMkExNy4zNywxNy4zNywwLDAsMCwxOC42LDcuMTVDMTEuOCw2LjUyLDUuMjcsMTAuOSw0LjU0LDE3bC0uMTQtLjA3QTIuNzYsMi43NiwwLDAsMSwyLjksMTUuMjlhMiwyLDAsMCwxLC4x''@;'; put 'put ''NS0xLjU1LDEuMzIsMS4zMiwwLDAsMSwuNDctLjQ4LDEuMDgsMS4wOCwwLDEsMC0xLjEyLTEuODUsMy40NSwzLjQ1LDAsMCwwLTEuMjMsMS4yNUE0LjE2LDQuMTYsMCwwLDAsLjg0LDE1LjlhNSw1LDAsMCwwLDIuNTcsM2wxLC41NGExOC42MiwxOC42MiwwLDAsMCwyLDcuMywyMywyMywwLDAs''@;'; put 'put ''MCwzLDQuNzksMSwxLDAsMCwwLC44LjM4aDMuNjFhLjUyLjUyLDAsMCwwLC40LS43NUwxNCwzMC4zOGExMSwxMSwwLDAsMS0uMzMtMS4xOGMuOTEuMTYsMi4wOC4zMSwyLjg3LjM4YTIwLjA3LDIwLjA3LDAsMCwwLDMuMTIsMGMuMzkuNy43OSwxLjMzLDEuMTUsMS44NWEuOTMuOTMsMCwwLDAs''@;'; put 'put ''Ljc3LjQxaDMuMTFhLjY1LjY1LDAsMCwwLC42MS0uODVjLS4yMy0uNzQtLjUzLTEuNzUtLjcxLTIuMzdhMTUuOSwxNS45LDAsMCwwLDMuNzUtMS43NmMuMTYtLjExLjMyLS4yNi40OC0uMzlhMTMuNzcsMTMuNzcsMCwwLDEtMi40Mi0xLC44LjgsMCwwLDEsLjc0LTEuNDIsMTEuNjQsMTEuNjQs''@;'; put 'put ''MCwwLDAsMy4xOCwxLjEsMTMuMzEsMTMuMzEsMCwwLDAsMi42OC4xMiwxLDEsMCwwLDAsLjktLjY2bDEuNzMtNC40NEExLDEsMCwwLDAsMzUsMTguODdaTTEzLjc5LDExLjU5YS44Ni44NiwwLDAsMS0uMy4wNS44NS44NSwwLDAsMS0uMy0xLjY0LDEyLjQxLDEyLjQxLDAsMCwxLDYuNjktLjU1''@;'; put 'put ''Ljg1Ljg1LDAsMSwxLS4zLDEuNjdBMTAuNzUsMTAuNzUsMCwwLDAsMTMuNzksMTEuNTlabTEyLjUyLDYuMTJhMS40NCwxLjQ0LDAsMSwxLDEuNDQtMS40NEExLjQ0LDEuNDQsMCwwLDEsMjYuMzIsMTcuNzJaIi8+JyksRi5DbHJTaGFwZVNob3BwaW5nQ2FydD0oMCxtLmNsckljb25TVkcpKCc8''@;'; put 'put ''Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjA4LDUuMzdBMSwxLDAsMCwwLDMyLjMxLDVIMTEuNDlsLjY1LDJIMzFMMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVM''@;'; put 'put ''OS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDMuMTctMTRBMSwxLDAsMCwwLDMzLjA4LDUu''@;'; put 'put ''MzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwLjcxIDcgMjEuODcgNSAxMS40''@;'; put 'put ''OSA1IDEyLjE0IDcgMjAuNzEgNyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMTUsMTUuNCwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42''@;'; put 'put ''MmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEs''@;'; put 'put ''MCwwLDAsMS0uNzhsMS4wOS00LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx''@;'; put 'put ''My4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTcsN2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDExLjQ5bC42NSwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVsLS40MiwwTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2''@;'; put 'put ''LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwxLjU3LTYuOTFBNy41MSw3LjUxLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xLDYuMzlBMSwxLDAsMCwwLDMyLjMxLDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNB''@;'; put 'put ''Mi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMy4yLTEzQTEsMSwwLDAsMCwzMy4xLDYuMzlaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUi''@;'; put 'put ''IGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDkuMjFMOC43Niw0LjU3YTEsMSww''@;'; put 'put ''LDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYt''@;'; put 'put ''MWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEtLjc2bDEuMTktNC44NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu''@;'; put 'put ''MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDku''@;'; put 'put ''OTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjcxLTdBNy40OSw3LjQ5LDAsMCwxLDMwLDEz''@;'; put 'put ''LjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVXYWxsZXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgzMVY5YTEsMSwwLDAsMC0xLTFINmExLDEsMCwwLDEtMS0uODJWNi44MkExLDEsMCwwLDEsNiw2SDI5''@;'; put 'put ''LjU4YTEsMSwwLDAsMCwwLTJINkEzLDMsMCwwLDAsMyw3YTMuMDgsMy4wOCwwLDAsMCwwLC4zNlYyNy45M0E0LjEsNC4xLDAsMCwwLDcuMTMsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNWgxYTEsMSwwLDAsMCwxLTFWMTZBMSwxLDAsMCwwLDMyLDE1Wk0yOSwzMEg3LjEzQTIuMTEsMi4xMSwwLDAs''@;'; put 'put ''MSw1LDI3LjkzVjkuODhBMy4xMSwzLjExLDAsMCwwLDYsMTBIMjl2NUgyMmE1LDUsMCwwLDAsMCwxMGg3Wm0yLTdIMjJhMywzLDAsMCwxLDAtNkgzMVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMy4wMSIg''@;'; put 'put ''Y3k9IjIwIiByPSIxLjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi45NCwxNEgzMVY5YTEsMSwwLDAsMC0xLTFINkExLDEsMCwwLDEsNSw3SDVWN0ExLDEsMCwwLDEsNiw2SDI5LjZhMSwxLDAsMSwwLDAtMkg2QTIu''@;'; put 'put ''OTQsMi45NCwwLDAsMCwzLDYuODh2MjFBNC4xMyw0LjEzLDAsMCwwLDcuMTUsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNmgxLjk0YS45My45MywwLDAsMCwxLS45MXYtMTBBMS4wOCwxLjA4LDAsMCwwLDMyLjk0LDE0Wk0zMiwyNGwtOC41OCwwYTMuODcsMy44NywwLDAsMS0zLjczLTQsMy44Nywz''@;'; put 'put ''Ljg3LDAsMCwxLDMuNzMtNEwzMiwxNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjI0LjA0IiBjeT0iMTkuOTIiIHI9IjEuNSIvPicpLEYuQ2xyU2hhcGVTdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiIGQ9Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwuNDYsMS4yOEE0LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCww''@;'; put 'put ''LDAsMy0xLjA3LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdBMiwyLDAsMCwwLDMzLjc5LDEzLjI3Wk0zMCwxOC4xM0EyLjY4LDIuNjgsMCww''@;'; put 'put ''LDEsMjcuODIsMTdMMjcsMTUuODgsMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OCwyMC4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDE1LDE1Ljg4LDE0LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OCw4LjE4LDE3QTIuNjgsMi42OCwwLDAs''@;'; put 'put ''MSw2LDE4LjEzYTIuNjQsMi42NCwwLDAsMS0yLS44OFYxNC4xN0w4LjA4LDZIMjcuOTJMMzIsMTQuMTZ2LjY3bDAsMi4zOUEyLjY3LDIuNjcsMCwwLDEsMzAsMTguMTNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjgs''@;'; put 'put ''MzBIMTZWMjJIMTR2OEg4VjIySDZ2OGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIs''@;'; put 'put ''NEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCwwLDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAs''@;'; put 'put ''NC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMTUsMTQuNHYxLjUyTDE0LjE4LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OFYxNC40TDExLjU5LDZIMTZabTEy''@;'; put 'put ''LDEuNDhMMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OGwwLDBWMTQuNEwyMCw2aDQuNDVMMjcsMTQuNFoiLz4nKSxGLkNsclNoYXBlRXVybz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i''@;'; put 'put ''TTMxLjQ4LDI4LjQ5YTEsMSwwLDAsMC0xLjM4LS4zMkExMiwxMiwwLDAsMSwxMi40NSwyMkgyNC4xNmExLDEsMCwwLDAsMC0ySDExLjkzYTExLjE2LDExLjE2LDAsMCwxLDAtNEgyNC4xNmExLDEsMCwwLDAsMC0ySDEyLjQ1QTEyLDEyLDAsMCwxLDMwLjA2LDcuOGExLDEsMCwwLDAsMS4wNi0x''@;'; put 'put ''LjdBMTQsMTQsMCwwLDAsMTAuMzQsMTRIMy41NGExLDEsMCwxLDAsMCwySDkuOTFhMTQsMTQsMCwwLDAtLjE2LDIsMTQsMTQsMCwwLDAsLjE2LDJIMy41NGExLDEsMCwxLDAsMCwyaDYuOGExNCwxNCwwLDAsMCwyMC44Myw3Ljg3QTEsMSwwLDAsMCwzMS40OCwyOC40OVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNDIsMjUuMTZBMTAuODgsMTAuODgsMCwwLDEsOS4yMywyMUg1Ljg0YTEsMSwwLDAsMSwwLTJoM2MwLS4zNS0uMDUtLjcx''@;'; put 'put ''LS4wNS0xLjA3czAtLjYzLDAtLjkzaC0zYTEsMSwwLDAsMSwwLTJIOS4xOUExMC44NiwxMC44NiwwLDAsMSwyNS4zOCw4LjY5YTEuMjUsMS4yNSwwLDAsMS0xLjMyLDIuMTJBOC4zNiw4LjM2LDAsMCwwLDExLjgyLDE1aDkuMzZhMSwxLDAsMCwxLDAsMkgxMS4zM2E3LjcyLDcuNzIsMCwwLDAs''@;'; put 'put ''MCwyaDkuODJhMSwxLDAsMCwxLDAsMkgxMS44N2E4LjM2LDguMzYsMCwwLDAsMTIuMjIsNCwxLjI1LDEuMjUsMCwxLDEsMS4zMywyLjEyWiIvPicpLEYuQ2xyU2hhcGVEb2xsYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0yNiwyMS4xNWE2LjkxLDYuOTEsMCwwLDAtNC4zOC0zLjMyQTI2LDI2LDAsMCwwLDE5LDE3LjE5VjguMTJBMTAuMDUsMTAuMDUsMCwwLDEsMjMuODYsMTBhMSwxLDAsMCwwLDEuMzMtMS41QTExLjc1LDExLjc1LDAsMCwwLDE5LDYuMVYzYTEsMSwwLDAsMC0yLDBWNmMtNC40LjEt''@;'; put 'put ''Ni44MywyLjI5LTcuNTcsNC4xOEE1LjU2LDUuNTYsMCwwLDAsMTEuNjYsMTcsMTMuMiwxMy4yLDAsMCwwLDE3LDE4Ljg0VjI4YTEyLjMsMTIuMywwLDAsMS03LjE0LTIuNzRBMSwxLDAsMSwwLDguNDksMjYuNywxNC4wOSwxNC4wOSwwLDAsMCwxNywzMHYzYTEsMSwwLDAsMCwyLDBWMzBjMi44''@;'; put 'put ''Mi0uMTksNi4wNy0xLjA5LDcuMy00Ljc2QTUuMzMsNS4zMywwLDAsMCwyNiwyMS4xNVpNMTIuNzksMTUuMzJhMy41NywzLjU3LDAsMCwxLTEuNDktNC4zOUMxMS40MSwxMC42MywxMi41Myw4LjEyLDE3LDh2OC44QTEwLjcsMTAuNywwLDAsMSwxMi43OSwxNS4zMlpNMjQuNCwyNC41NmMtLjcy''@;'; put 'put ''LDIuMTQtMi4zMiwzLjE3LTUuNCwzLjRWMTkuMjNjLjY0LjE0LDEuMy4zLDIsLjUxYTUsNSwwLDAsMSwzLjE5LDIuMzJBMy4zNCwzLjM0LDAsMCwxLDI0LjQsMjQuNTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNjUsMjEuNTljLTEsMy0zLjYxLDMuODQtNS45LDR2MmExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjcuNTlBMTEuNDcsMTEuNDcsMCwwLDEsMTEsMjVhMS4yNSwxLjI1LDAsMSwxLDEuNzEtMS44''@;'; put 'put ''Myw5LjExLDkuMTEsMCwwLDAsNC41NSwxLjk0VjE4LjgzYTkuNjMsOS42MywwLDAsMS0zLjczLTEuNDEsNC44LDQuOCwwLDAsMS0xLjkxLTUuODRjLjU5LTEuNTEsMi40Mi0zLjIzLDUuNjQtMy41MVY2LjI1YTEuMjUsMS4yNSwwLDAsMSwyLjUsMFY4LjExYTkuNjcsOS42NywwLDAsMSw0Ljks''@;'; put 'put ''MkExLjI1LDEuMjUsMCwwLDEsMjMsMTEuOTVhNy4xNCw3LjE0LDAsMCwwLTMuMjQtMS4zMXY2LjEzYy42LjEzLDEuMjQuMjcsMS45MS40OGE1Ljg1LDUuODUsMCwwLDEsMy42OSwyLjgyQTQuNjQsNC42NCwwLDAsMSwyNS42NSwyMy41OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC45MiwxOS42NGMtLjQtLjEyLS43OS0uMjItMS4xNy0uM3Y1Ljc2YzItLjIsMy4wNy0uOSwzLjUzLTIuM2EyLjE1LDIuMTUsMCwwLDAtLjE1LTEuNThBMy40OSwzLjQ5LDAsMCwwLDIwLjkyLDE5LjY0WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTEzLjk0LDEyLjQ4YTIuMzEsMi4zMSwwLDAsMCwxLDIuODcsNi41Myw2LjUzLDAsMCwwLDIuMzIuOTJWMTAuNTVDMTUuMTYsMTAuOCwxNC4xOSwxMS44NCwxMy45NCwxMi40OFoiLz4nKSxGLkNsclNo''@;'; put 'put ''YXBlQ3JlZGl0Q2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMiwwLDEySDRMNCw4Wk00LDI4VjI0SDMydjRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjMiIHdpZHRoPSIyMiIgaGVpZ2h0PSIzMCIgcng9IjAuOTYiIHJ5PSIwLjk2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNikgcm90YXRlKDkwKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBz''@;'; put 'put ''dHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy''@;'; put 'put ''LDAsMCwwLDMyLDZabTAsMThINFYyMEgzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUJhbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMuNSwxMy41NiwxOCw1LjIzbDE0LjUsOC4zM2ExLDEsMCwwLDAsMS0xLjczTDE4LDIu''@;'; put 'put ''OTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1''@;'; put 'put ''SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjE1LDExLjU4aDMuMjFM''@;'; put 'put ''MTguNjUsNy43MmEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMuOS0yLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42''@;'; put 'put ''M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUuMDIiIHk9IjE0IiB3aWR0aD0iMjYiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmMwLS4xNiwwLS4zMiwwLS40OEwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjIuNzcsOEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwxLDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVBMy41MSwzLjUx''@;'; put 'put ''LDAsMCwxLDIwLDE0SDV2MkgzMVYxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDYsOS43NGwuNjgtMS4xNy0xLjQ5LS44NWEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44''@;'; put 'put ''NmgzLjIxbDMuOS0yLjI0LDEuMS42M0MxOS4zOSw5Ljg5LDE5LjQyLDkuODEsMTkuNDYsOS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMDUsNS4yNSwxOCwyLjkyLDIu''@;'; put 'put ''NSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjEuMDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMuNSwxMy41Niw1LDEyLjY4VjE2SDMxVjEyLjcxbDEuNDguODVhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWk0xNy44NSw3LjExYS44LjgsMCwwLDEsLjgsMEwyNS4zNywxMUgyMi4xNWwtMy45LTIuMjRMMTQuMzUsMTFI''@;'; put 'put ''MTEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEu''@;'; put 'put ''MTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3''@;'; put 'put ''SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAs''@;'; put 'put ''MCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzksMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0bDYuNzItMy44''@;'; put 'put ''NmEuOC44LDAsMCwxLC44LDBsNSwyLjg3QTcuNDUsNy40NSwwLDAsMSwyMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0w1LDEyLjY4VjE2SDMxVjEzLjQyQTcuNTMsNy41MywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45NCwxMy4yNGwuNTYuMzJhMSwxLDAsMCwwLDEuNDQtMS4xOUE3LjQ1LDcuNDUsMCwwLDEsMzEuOTQsMTMuMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwy''@;'; put 'put ''N0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCww''@;'; put 'put ''LDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSwxNWEzLjUxLDMuNTEsMCwwLDEtMy01LjI2bC4xNC0uMjQtMS4zNS0uNzhMMTQuMzUsMTFIMTEuMTRsNi43Mi0z''@;'; put 'put ''Ljg2YS44LjgsMCwwLDEsLjgsMGwxLjc1LDEsMS42NS0yLjg2TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYxNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxGLkNsclNoYXBlRG9sbGFyQmlsbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCw2YTQuMjUsNC4yNSwwLDAsMS0zLjktNEgzMlptMCwxLjYydjQuODNBNS44Nyw1Ljg3LDAsMCwwLDI2LjQ5LDI2aC0xN0E1Ljg3LDUuODcsMCwwLDAsNCwyMC40NFYxNS42QTUuODcsNS44NywwLDAsMCw5LjUxLDEwaDE3QTUuODcs''@;'; put 'put ''NS44NywwLDAsMCwzMiwxNS42Wk03LjksMTBBNC4yNSw0LjI1LDAsMCwxLDQsMTRWMTBaTTQsMjIuMDZBNC4yNSw0LjI1LDAsMCwxLDcuOSwyNkg0Wk0yOC4xLDI2QTQuMjUsNC4yNSwwLDAsMSwzMiwyMi4wNlYyNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTAuODVjLTMuNDcsMC02LjMsMy4yMS02LjMsNy4xNXMyLjgzLDcuMTUsNi4zLDcuMTUsNi4zLTMuMjEsNi4zLTcuMTVTMjEuNDcsMTAuODUsMTgsMTAuODVabTAsMTIuNjljLTIuNTksMC00LjctMi40OS00LjctNS41NXMyLjExLTUuNTUs''@;'; put 'put ''NC43LTUuNTUsNC43LDIuNDksNC43LDUuNTVTMjAuNTksMjMuNTUsMTgsMjMuNTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk00LDI2VjIxLjE1QTUuMTgsNS4xOCwwLDAsMSw4Ljc5LDI2Wk00LDE0Ljg1VjEwSDguNzlBNS4xOCw1LjE4LDAsMCwxLDQsMTQuODVaTTE4LDI1LjE1Yy0zLjQ3LDAtNi4zLTMuMjEtNi4zLTcuMTVzMi44My03LjE1LDYuMy03LjE1LDYuMywzLjIxLDYu''@;'; put 'put ''Myw3LjE1UzIxLjQ3LDI1LjE1LDE4LDI1LjE1Wk0zMiwyNkgyNy4yNUE1LjE4LDUuMTgsMCwwLDEsMzIsMjEuMTVabTAtMTEuMTVBNS4xOCw1LjE4LDAsMCwxLDI3LjI1LDEwSDMyWiIvPlxuICAgICAgICAgICAgPGVsbGlwc2UgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MiIgY3g9IjE4IiBjeT0iMTgiIHJ4PSI0IiByeT0iNC43MiIvPicpLEYuQ2xyU2hhcGVFQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE2IiB5PSIxNiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMCIgeT0iMjEiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM0''@;'; put 'put ''LDhIMTIuOTNhOC4zNSw4LjM1LDAsMCwxLC43OSwySDMzVjI2SDNWMTkuOWE3LjgzLDcuODMsMCwwLDEtMi0xLjM0VjI3YTEsMSwwLDAsMCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTQiIGQ9Ik02LjU3LDE4LjY4YTYuMTcsNi4xNywwLDAsMCw0LjMyLTEuNTksMS4yLDEuMiwwLDAsMCwuMzYtLjg0LDEuMDgsMS4wOCwwLDAsMC0xLjA5LTEuMTEsMSwxLDAsMCwwLS43MS4yNSw0LjMyLDQuMzIsMCwwLDEtMi44NCwxLDMuMzUsMy4zNSwwLDAsMS0z''@;'; put 'put ''LjQ2LTNoNy41M0ExLjI5LDEuMjksMCwwLDAsMTIsMTIuMDYsNS42OCw1LjY4LDAsMCwwLDYuMjcsNi4xNCw2LDYsMCwwLDAsLjQsMTIuNHYwQTYsNiwwLDAsMCw2LjU3LDE4LjY4Wk02LjI1LDguMzljMS44MiwwLDIuODcsMS4zOSwzLDMuMTZIMy4xM0MzLjM4LDkuNjksNC41Niw4LjM5LDYu''@;'; put 'put ''MjUsOC4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCw4SDEyLjkxYTguNjEsOC42MSwwLDAsMSwxLjIsNC4zOSw4LDgsMCwwLDEtNy43OCw4LjI3QTcuNTEsNy41MSwwLDAsMSwxLDE4LjQxVjI3YTEsMSwwLDAs''@;'; put 'put ''MCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4Wk0zMSwyM0gyMFYyMUgzMVptMC01SDE2VjE2SDMxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYuNTcsMTguNjhBNiw2LDAsMCwxLC40LDEyLjQ0''@;'; put 'put ''djBBNiw2LDAsMCwxLDYuMjcsNi4xNCw1LjY4LDUuNjgsMCwwLDEsMTIsMTIuMDZhMS4yOSwxLjI5LDAsMCwxLTEuMywxLjMySDMuMTVhMy4zNSwzLjM1LDAsMCwwLDMuNDYsMyw0LjMyLDQuMzIsMCwwLDAsMi44NC0xLDEsMSwwLDAsMSwuNzEtLjI1LDEuMDgsMS4wOCwwLDAsMSwxLjA5LDEu''@;'; put 'put ''MTEsMS4yLDEuMiwwLDAsMS0uMzYuODRBNi4xNyw2LjE3LDAsMCwxLDYuNTcsMTguNjhaTTkuMywxMS41NWMtLjE4LTEuNzctMS4yMy0zLjE2LTMtMy4xNnMtMi44NywxLjMtMy4xMiwzLjE2WiIvPicpLEYuQ2xyU2hhcGVQb3VuZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjksMzBIMTMuNEE4LjQ1LDguNDUsMCwwLDAsMTUsMjQuNjVWMjFoNC4zMWExLDEsMCwwLDAsMC0ySDE1VjExLjMxQTUuMjQsNS4yNCwwLDAsMSwyMC4yMSw2LDUuMTksNS4xOSwwLDAsMSwyNCw3LjczYTEsMSwwLDAsMCwx''@;'; put 'put ''LjQ4LTEuMzVBNy4xOSw3LjE5LDAsMCwwLDEzLDExLjMxVjE5SDguNzJhMSwxLDAsMSwwLDAsMkgxM3YzLjY1QzEzLDI5LjM4LDEwLjEyLDMwLDEwLDMwYTEsMSwwLDAsMCwuMTcsMkgyNy45YTEsMSwwLDEsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LjUsMjUuOTJIMTEuNzRhMS4yNSwxLjI1LDAsMCwxLS4yMi0yLjQ4Yy4xNSwwLDEuNzItLjQ5LDEuNzItMy41NFYxOWgtMi41YTEsMSwwLDAsMSwwLTJoMi41VjExLjg4YTUu''@;'; put 'put ''ODUsNS44NSwwLDAsMSw1LjcyLTYsNS42Myw1LjYzLDAsMCwxLDQuMjEsMS45NEExLjI1LDEuMjUsMCwxLDEsMjEuMyw5LjUxLDMuMDgsMy4wOCwwLDAsMCwxOSw4LjQyYTMuMzUsMy4zNSwwLDAsMC0zLjIyLDMuNDZWMTdoM2ExLDEsMCwwLDEsMCwyaC0zdjIuOUE3LjY1LDcuNjUsMCwwLDEs''@;'; put 'put ''MTUsMjUuNDJIMjQuNWExLjI1LDEuMjUsMCwwLDEsMCwyLjVaIi8+JyksRi5DbHJTaGFwZVJ1cGVlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsOEgyNC4xNEE3LjUyLDcuNTIsMCwwLDAsMjIuNiw2SDI4''@;'; put 'put ''YTEsMSwwLDAsMCwwLTJIMTBhMSwxLDAsMCwwLDAsMmg3LjU1YTUuNDIsNS40MiwwLDAsMSw0LjIsMkgxMGExLDEsMCwwLDAsMCwySDIyLjc5QTUuNTQsNS41NCwwLDAsMSwyMywxMS41MSw1LjQ4LDUuNDgsMCwwLDEsMTcuNTUsMTdIMTEuMTRhMSwxLDAsMCwwLS43NSwxLjY2TDIyLjA2LDMy''@;'; put 'put ''YTEsMSwwLDEsMCwxLjUtMS4zMkwxMy4zNSwxOWg0LjIxYTcuNTEsNy41MSwwLDAsMCw3LjMtOUgyOGExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYs''@;'; put 'put ''MTYsMCwwLDAsMTgsMlptNS44OCw5SDI2YTEsMSwwLDAsMSwwLDJIMjQuMjZjMCwuMDYsMCwuMTIsMCwuMTlhNi4wOSw2LjA5LDAsMCwxLTYsNi4yaC0ybDYuODIsOC4wNmExLjI1LDEuMjUsMCwwLDEtMS45MSwxLjYyTDEyLjYzLDE4Ljk0YTEuMjUsMS4yNSwwLDAsMSwxLTIuMDZoNC43MWEz''@;'; put 'put ''LjU5LDMuNTksMCwwLDAsMy40OC0zLjY5YzAtLjA3LDAtLjEzLDAtLjJoLTlhMSwxLDAsMCwxLDAtMmg4LjMyYTMuNDEsMy40MSwwLDAsMC0yLjc4LTEuNUgxMi43NWExLjI1LDEuMjUsMCwwLDEsMC0yLjVIMjZhMSwxLDAsMCwxLDAsMkgyMi42OEE2LjIzLDYuMjMsMCwwLDEsMjMuODgsMTFa''@;'; put 'put ''Ii8+JyksRi5DbHJTaGFwZVdvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE4SDI4Ljc1bC41LTJIMzNhMSwxLDAsMCwwLDAtMkgyOS43NGwyLjE3LTguNzZBMSwxLDAsMCwwLDMwLDQuNzZMMjcuNjgs''@;'; put 'put ''MTRIMjEuMzFMMTksNC43NmExLDEsMCwwLDAtMS45NCwwTDE0Ljc5LDE0SDguNDJMNi4xMyw0Ljc2YTEsMSwwLDAsMC0xLjk0LjQ4TDYuMzYsMTRIM2ExLDEsMCwwLDAsMCwySDYuODVsLjUsMkgzYTEsMSwwLDAsMCwwLDJINy44NGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMTUuMzYs''@;'; put 'put ''MjBoNS4zOGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMjguMjUsMjBIMzNhMSwxLDAsMCwwLDAtMlptLTUuODItMi0uNSwySDIyLjNsLS41LTJaTTE4LDkuMTYsMTkuMjUsMTRoLTIuNFpNOC45MSwxNmg1LjM4bC0uNSwySDkuNDFaTTExLjYsMjYuODQsOS45MSwyMEgxMy4zWk0xNS44''@;'; put 'put ''NSwxOGwuNS0yaDMuMzlsLjUsMlptOC42NCw4Ljg0TDIyLjgsMjBoMy4zOVoiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHBvaW50cz0iMTcuNzQgMTYgMTcuMjIgMTggMTguODUgMTggMTguMzIgMTYgMTcuNzQgMTYiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHBvaW50cz0iMTEuOTQgMTggMTQuNjMgMTggMTUuMTYgMTYgMTEuNDEgMTYgMTEuOTQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMiIHBvaW50cz0iMTMuMjkgMjMuMSAxNC4xIDIwIDEyLjQ3IDIwIDEzLjI5IDIzLjEiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHBvaW50cz0iMjEuNDQgMTggMjQuMTMgMTggMjQuNjYgMTYgMjAuOTEg''@;'; put 'put ''MTYgMjEuNDQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIHBvaW50cz0iMjIuNzggMjMuMSAyMy42IDIwIDIxLjk3IDIwIDIyLjc4IDIzLjEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTYiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LDIwSDI2LjE5TDI0LDI4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMMTkuMzgsMjBIMTYuNjlsLTIuMTksOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDkuODgsMjBI''@;'; put 'put ''N2ExLDEsMCwwLDEsMC0ySDkuMzVsLS41My0ySDdhMSwxLDAsMCwxLDAtMkg4LjNsLTEtMy42OGExLjI1LDEuMjUsMCwwLDEsMi40Mi0uNjRMMTAuODgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40MiwwTDIwLjM4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAsMCwx''@;'; put 'put ''LDIuNDIuNjRsLTEsMy42OEgyOWExLDEsMCwwLDEsMCwySDI3LjI0bC0uNTMsMkgyOWExLDEsMCwwLDEsMCwyWiIvPicpLEYuQ2xyU2hhcGVZZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4zNCw0LjU1''@;'; put 'put ''YTEsMSwwLDEsMC0xLjY3LTEuMUwxOCwxOC4yMyw4LjMzLDMuNDVhMSwxLDAsMCwwLTEuNjcsMS4xTDE3LDIwLjM1VjIyLjJIMTJhLjguOCwwLDAsMCwwLDEuNmg1djIuNEgxMmEuOC44LDAsMCwwLDAsMS42aDVWMzJhMSwxLDAsMCwwLDIsMFYyNy44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYy''@;'; put 'put ''My44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYyMC4zNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMDcsNy45MUwxOS43NCwyMEgyMmExLDEs''@;'; put 'put ''MCwwLDEsMCwySDE5LjI1djJIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYyLjc1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNkgxNGExLDEsMCwxLDEsMC0yaDIuNzVWMjJIMTRhMSwxLDAsMSwxLDAtMmgyLjI2TDkuOTMsOS45MWExLjI1LDEuMjUsMCwxLDEsMi4xMi0xLjMzTDE4LDE4LjA4bDUu''@;'; put 'put ''OTUtOS40OWExLjI1LDEuMjUsMCwxLDEsMi4xMiwxLjMzWiIvPicpLEYuQ2xyU2hhcGVCaXRjb2luPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC4xMSwxNi44OEE1LjQ5LDUuNDksMCwwLDAsMjEsN1Y0YTEsMSwwLDAsMC0yLDBWN0gxNlY0YTEsMSwwLDAsMC0yLDBWN0gxMWExLDEs''@;'; put 'put ''MCwwLDAtMSwxVjI4YTEsMSwwLDAsMCwxLDFoM3YzYTEsMSwwLDAsMCwyLDBWMjloM3YzYTEsMSwwLDAsMCwyLDBWMjloLjA4QTYuMDcsNi4wNywwLDAsMCwyNywyMi44MXYtLjYyQTYuMjUsNi4yNSwwLDAsMCwyNC4xMSwxNi44OFpNMTIsOWg4LjY5YTMuNTksMy41OSwwLDAsMSwzLjQzLDIu''@;'; put 'put ''MzZBMy41MSwzLjUxLDAsMCwxLDIwLjc5LDE2SDEyWk0yNSwyMi44MUE0LjA4LDQuMDgsMCwwLDEsMjEuMDYsMjdIMTJWMThoOS4wNkE0LjA4LDQuMDgsMCwwLDEsMjUsMjIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yMS4xOCwxOC40N0gxNC41djZoNi42OGEyLjcsMi43LDAsMCwwLDIuNjMtMi43N3YtLjQ4QTIuNzEsMi43MSwwLDAsMCwyMS4xOCwxOC40N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMTMuNzVh''@;'; put 'put ''Mi4yNCwyLjI0LDAsMCwwLTIuMjMtMi4yNUgxNC41VjE2aDYuM0EyLjIyLDIuMjIsMCwwLDAsMjMsMTMuNzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAs''@;'; put 'put ''MTgsMlptOC4zMSwxOS43M0E1LjIyLDUuMjIsMCwwLDEsMjEuMTgsMjdIMjF2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTd2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTMuMjVBMS4yNSwxLjI1LDAsMCwxLDEyLDI1Ljc1VjE3LjIzaDB2LTdBMS4yNSwxLjI1LDAsMCwxLDEzLjI1LDlIMTVWNy4wN2Ex''@;'; put 'put ''LDEsMCwwLDEsMiwwVjloMlY3LjA3YTEsMSwwLDAsMSwyLDBWOWE0LjcyLDQuNzIsMCwwLDEsMy4yLDgsNS4zMSw1LjMxLDAsMCwxLDIuMTEsNC4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUNvaW5CYWc9KDAsbS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTIxLjYsMjlhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjIuNTQsMjRoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAs''@;'; put 'put ''MCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIsMzJIMTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNywz''@;'; put 'put ''MmgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMy43LDI4aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjc0LDI2YTI4LDI4LDAsMCwwLTIuODItMTAuMTJBMjAuMjQsMjAuMjQsMCwwLDAsMjQuNiw4LjcxTDI3LDMuNDJhMSwxLDAsMCwwLS4wNy0xQTEsMSwwLDAsMCwyNi4xMywySDkuOGExLDEsMCwwLDAtLjkxLDEuNDJsMi40NSw1LjMxYTIwLjMz''@;'; put 'put ''LDIwLjMzLDAsMCwwLTYuMjgsNy4xNWMtMi4xNSw0LTIuODIsOC44OS0zLDEyLjI4YTMuNiwzLjYsMCwwLDAsMSwyLjcxQTMuNzksMy43OSwwLDAsMCw1LjgsMzEuOTRIMTJWMzBINS43MmExLjY4LDEuNjgsMCwwLDEtMS4yMS0uNTIsMS42MiwxLjYyLDAsMCwxLS40NS0xLjIzYy4xNC0yLjYx''@;'; put 'put ''LjY5LTcuNTgsMi43Ni0xMS40NUExOCwxOCwwLDAsMSwxMy4wOCwxMGgxYTMwLjgxLDMwLjgxLDAsMCwwLTEuODcsMi45MiwyMi43OCwyMi43OCwwLDAsMC0xLjQ3LDMuMzRsMS4zNy45MmEyNCwyNCwwLDAsMSwxLjQ5LTMuNDdBMjkuMSwyOS4xLDAsMCwxLDE2LjA1LDEwaDFhMjEuNDUsMjEu''@;'; put 'put ''NDUsMCwwLDEsMS40MSw1LDIyLjU0LDIyLjU0LDAsMCwxLC4zMiwzLjg2bDEuNTgtMS4xMWEyNC4xNSwyNC4xNSwwLDAsMC0uMzItM0EyNC44MiwyNC44MiwwLDAsMCwxOC43NiwxMGguNzhsLjkxLTJIMTMuMjFMMTEuMzYsNEgyNC41N2wtMi41LDUuNDdhOS45Myw5LjkzLDAsMCwxLDEuMjMu''@;'; put 'put ''NzgsMTguNjMsMTguNjMsMCwwLDEsNS44Niw2LjU3QTI2LjU5LDI2LjU5LDAsMCwxLDMxLjczLDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgPHBhdGggZD0iTTI0Ljg5LDI2aDcuODZjLS42Ni04LjcxLTQuNDEtMTQuMTItOS4yMi0xNy4z''@;'; put 'put ''MkwyNS43MiwzLjlhMSwxLDAsMCwwLS45MS0xLjRIMTEuMWExLDEsMCwwLDAtLjkxLDEuNGwxLjIsMi42SDIxLjUxbC0uOSwySDE4Ljc2QTI0LjksMjQuOSwwLDAsMSwyMCwxMy4xOWEyNC40OSwyNC40OSwwLDAsMSwuMzIsM2wtMS41OCwxLjExYTIyLjU0LDIyLjU0LDAsMCwwLS4zMi0zLjg2''@;'; put 'put ''QTIxLjc0LDIxLjc0LDAsMCwwLDE3LDguNWgtMWEyOC4yMiwyOC4yMiwwLDAsMC0yLjQ4LDMuNywyMy45MSwyMy45MSwwLDAsMC0xLjQ5LDMuNDZsLTEuMzctLjkxYTIyLjc4LDIyLjc4LDAsMCwxLDEuNDctMy4zNEEzMC44MSwzMC44MSwwLDAsMSwxNC4wNSw4LjVIMTIuM2wuMDguMTdDNy4w''@;'; put 'put ''OCwxMi4yLDMuMDUsMTguNCwzLjA1LDI4Ljc1QTEuNjUsMS42NSwwLDAsMCw0LjYxLDMwLjVoOEEyLjY3LDIuNjcsMCwwLDEsMTQuMjEsMjZhMi42NywyLjY3LDAsMCwxLS4zNy0xLjM0LDIuNywyLjcsMCwwLDEsMi43LTIuN2g2YTIuNywyLjcsMCwwLDEsMi43LDIuN0EyLjYzLDIuNjMsMCww''@;'; put 'put ''LDEsMjQuODksMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS42LDI4LjVhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjguNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIC8+PHBhdGggZD0iTTIyLjU0LDIzLjVoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwzMS41SDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuNywzMS41aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuNywyNy41aC03YTEsMSwwLDAsMCwwLDJo''@;'; put 'put ''N2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlUGVzbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTMuMkgyNy44OUE2LjgxLDYuODEsMCwwLDAsMjgsMTJhNy44NSw3Ljg1LDAsMCwwLS4xLTEuMTlo''@;'; put 'put ''Mi45M2EuOC44LDAsMCwwLDAtMS42SDI3LjQ2QTguNDQsOC40NCwwLDAsMCwxOS41Nyw0SDExYTEsMSwwLDAsMC0xLDFWOS4ySDdhLjguOCwwLDAsMCwwLDEuNmgzdjIuNEg3YS44LjgsMCwwLDAsMCwxLjZoM1YzMWExLDEsMCwwLDAsMiwwVjIwaDcuNTdhOC40NSw4LjQ1LDAsMCwwLDcuODkt''@;'; put 'put ''NS4ySDMxYS44LjgsMCwwLDAsMC0xLjZaTTEyLDZoNy41N2E2LjUxLDYuNTEsMCwwLDEsNS42OCwzLjJIMTJabTAsNC44SDI1Ljg3YTUuNiw1LjYsMCwwLDEsMCwyLjRIMTJaTTE5LjU3LDE4SDEyVjE0LjhIMjUuMjVBNi41MSw2LjUxLDAsMCwxLDE5LjU3LDE4WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4LDEzLjhWMTZoOS40NWE1LjI2LDUuMjYsMCwwLDAsLjA4LS44OSw0LjcyLDQuNzIsMCwwLDAtLjItMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4''@;'; put 'put ''LDE5LjdoNS4xOWE0LjI4LDQuMjgsMCwwLDAsMy41LTEuOUgxNC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LjM3LDEwLjUxSDE0LjE4VjEyaDguMzdBNC4yMSw0LjIxLDAsMCwwLDE5LjM3LDEwLjUxWiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNjcsMmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxNy42NywyWm0xMC41LDE1LjhIMjUuN2E2Ljg3LDYuODcsMCwwLDEtNi4zMyw0LjRIMTQuMTh2Ni41NGExLjI1LDEuMjUsMCwxLDEtMi41LDBWMTcuOEg4Ljc2''@;'; put 'put ''YS45LjksMCwxLDEsMC0xLjhoMi45MlYxMy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjkuMjZBMS4yNSwxLjI1LDAsMCwxLDEyLjkzLDhoNi40NGE2Ljg0LDYuODQsMCwwLDEsNi4xNSw0aDIuNjVhLjkuOSwwLDAsMSwwLDEuOEgyNi4wOWE2LjkxLDYuOTEsMCwwLDEsLjEyLDEuMyw2''@;'; put 'put ''LjgsNi44LDAsMCwxLS4wNi45aDJhLjkuOSwwLDAsMSwwLDEuOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZVJ1YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC41NywyMEE4LjIzLDguMjMsMCwwLDAsMjksMTJhOC4yMyw4''@;'; put 'put ''LjIzLDAsMCwwLTguNDMtOEgxMmExLDEsMCwwLDAtMSwxVjE4SDlhMSwxLDAsMCwwLDAsMmgydjJIOWExLDEsMCwwLDAsMCwyaDJ2N2ExLDEsMCwwLDAsMiwwVjI0aDlhMSwxLDAsMCwwLDAtMkgxM1YyMFpNMTMsNmg3LjU3QTYuMjQsNi4yNCwwLDAsMSwyNywxMmE2LjIzLDYuMjMsMCwwLDEt''@;'; put 'put ''Ni40Myw2SDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIwLjc1LDkuMjVIMTV2OC44MWg1Ljc5YTQuNjYsNC42NiwwLDAsMCw0Ljg2LTQuNEE0LjY1LDQuNjUsMCwwLDAsMjAuNzUsOS4yNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMi43NSwxOC41NkgxNVYyMmg4LjI5YTEsMSwwLDAsMSwwLDJIMTV2NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjRIMTEuMjVhMSwxLDAsMCwxLDAtMmgxLjIxVjIw''@;'; put 'put ''LjU2SDExLjI1YTEuMjUsMS4yNSwwLDAsMSwwLTIuNWgxLjIxVjhhMS4yNSwxLjI1LDAsMCwxLDEuMjUtMS4yNWg3YTcuMTQsNy4xNCwwLDAsMSw3LjM2LDYuOUE3LjE1LDcuMTUsMCwwLDEsMjAuNzUsMjAuNTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicp''@;'; put 'put ''LEYuQ2xyU2hhcGVFbXBsb3llZUdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0LDMuNzQsMCwwLDAsMTgu''@;'; put 'put ''NDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0''@;'; put 'put ''LDMuNzQsMCwwLDAsMTguNDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS45MSwxNy42NWEyMC42LDIwLjYsMCwwLDAtMTMsMkExLjc3LDEuNzcsMCwwLDAsOCwyMS4yNXYzLjU2YTEsMSwwLDAsMCwyLDBWMjEuMzhh''@;'; put 'put ''MTguOTIsMTguOTIsMCwwLDEsMTItMS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMywyMkgyNi4zVjIwLjUyYTEsMSwwLDAsMC0yLDBWMjJIMTdhMSwxLDAsMCwwLTEsMVYzM2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAs''@;'; put 'put ''MCwxLTFWMjNBMSwxLDAsMCwwLDMzLDIyWk0zMiwzMkgxOFYyNGg2LjN2LjQxYTEsMSwwLDAsMCwyLDBWMjRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cmVjdCB4PSIyMS44MSIgeT0iMjcuNDIiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEu''@;'; put 'put ''NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEwLjg0LDEyLjI0YTE4LDE4LDAsMCwwLTcuOTUsMkExLjY3LDEuNjcsMCwwLDAsMiwxNS43MXYzLjFhMSwxLDAsMCwwLDIsMHYtMi45YTE2LDE2LDAsMCwxLDcuNTgtMS42N0E3LjI4''@;'; put 'put ''LDcuMjgsMCwwLDEsMTAuODQsMTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzMuMTEsMTQuMjNhMTcuOCwxNy44LDAsMCwwLTcuMTItMiw3LjQ2LDcuNDYsMCwwLDEtLjczLDJBMTUuODksMTUuODksMCwwLDEsMzIsMTUu''@;'; put 'put ''OTF2Mi45YTEsMSwwLDEsMCwyLDB2LTMuMUExLjY3LDEuNjcsMCwwLDAsMzMuMTEsMTQuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cGF0aCBkPSJNMTAuNjYsMTAuNjFjMC0uMjMsMC0uNDUsMC0uNjdhMy4wNywzLjA3LDAsMCwxLC41NC02''@;'; put 'put ''LjExLDMuMTUsMy4xNSwwLDAsMSwyLjIuODksOC4xNiw4LjE2LDAsMCwxLDEuNy0xLjA4LDUuMTMsNS4xMywwLDAsMC05LDMuMjcsNS4xLDUuMSwwLDAsMCw0LjcsNUE3LjQyLDcuNDIsMCwwLDEsMTAuNjYsMTAuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''OCIvPlxuICA8cGF0aCBkPSJNMjQuNzcsMS44M2E1LjE3LDUuMTcsMCwwLDAtMy42OSwxLjU1LDcuODcsNy44NywwLDAsMSwxLjksMSwzLjE0LDMuMTQsMCwwLDEsNC45MywyLjUyLDMuMDksMy4wOSwwLDAsMS0xLjc5LDIuNzcsNy4xNCw3LjE0LDAsMCwxLC4wNi45Myw3Ljg4LDcuODgsMCww''@;'; put 'put ''LDEtLjEsMS4yLDUuMSw1LjEsMCwwLDAsMy44My00LjlBNS4xMiw1LjEyLDAsMCwwLDI0Ljc3LDEuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICBcbiAgPGVsbGlwc2UgY3g9IjE4IiBjeT0iMTEuMjgiIHJ4PSI0Ljc2IiByeT0iNC43IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxMS43NWMuMTYsMCwuMzIsMCwuNDgsMCwwLS4xNSwwLS4yOCwwLS40M2E2LjcsNi43LDAsMCwxLDMuNzUtNiw0LjYyLDQuNjIsMCwxLDAtNC4yMSw2LjQ2WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjQuNzYsMTEuMjhjMCwuMTUsMCwuMjgsMCwuNDMuMTYsMCwuMzIsMCwuNDgsMEE0LjU4LDQuNTgsMCwxLDAsMjEsNS4yOSw2LjcsNi43LDAsMCwxLDI0Ljc2LDExLjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjIuMjksMTYuNDVhMjEuNDUsMjEuNDUsMCwwLDEsNS43MSwyLDIuNzEsMi43MSwwLDAsMSwuNjguNTNIMzRWMTUuNTZhLjcyLjcyLDAsMCwwLS4zOC0uNjQsMTgsMTgsMCwwLDAtOC40LTIuMDVsLS42NiwwQTYuNjYsNi42NiwwLDAsMSwyMi4yOSwx''@;'; put 'put ''Ni40NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTYuNTMsMjAuOTJBMi43NiwyLjc2LDAsMCwxLDgsMTguNDdhMjEuNDUsMjEuNDUsMCwwLDEsNS43MS0yLDYuNjYsNi42NiwwLDAsMS0yLjI3LTMuNTVsLS42NiwwYTE4LDE4LDAsMCww''@;'; put 'put ''LTguNCwyLjA1LjcyLjcyLDAsMCwwLS4zOC42NFYyMkg2LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIyMS40NiIgeT0iMjYuNjkiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzIuODEsMjEuMjZIMjUuOTR2LTFhMSwxLDAsMCwwLTIsMHYxSDIyVjE4LjQzQTIwLjE3LDIwLjE3LDAsMCwwLDE4LDE4YTE5LjI3LDE5LjI3LDAsMCwwLTkuMDYsMi4yMi43Ni43NiwwLDAsMC0uNDEuNjh2NS42MWg3LjExdjYuMDlhMSwxLDAsMCww''@;'; put 'put ''LDEsMUgzMi44MWExLDEsMCwwLDAsMS0xVjIyLjI2QTEsMSwwLDAsMCwzMi44MSwyMS4yNlptLTEsMTAuMzZIMTcuNjRWMjMuMjZoNi4zdi45MWExLDEsMCwwLDAsMiwwdi0uOTFoNS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTciLz4nKSxGLkNsclNoYXBlRW1w''@;'; put 'put ''bG95ZWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LjQzLDE2LjY5YTcsNywwLDEsMSw3LTdBNyw3LDAsMCwxLDE2LjQzLDE2LjY5Wm0wLTExLjkyYTUsNSwwLDEsMCw1LDVBNSw1LDAsMCwwLDE2LjQzLDQuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIvPlxuICA8cGF0aCBkPSJNMjIsMTcuOUEyNS40MSwyNS40MSwwLDAsMCw1Ljg4LDE5LjU3YTQuMDYsNC4wNiwwLDAsMC0yLjMxLDMuNjhWMjkuMmExLDEsMCwxLDAsMiwwVjIzLjI1YTIsMiwwLDAsMSwxLjE2LTEuODYsMjIuOTEsMjIuOTEsMCwwLDEsOS43LTIuMTEsMjMuNTgsMjMu''@;'; put 'put ''NTgsMCwwLDEsNS41Ny42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIyLjE0IiB5PSIyNy40MSIgd2lkdGg9IjYuMTQiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu''@;'; put 'put ''ICA8cGF0aCBkPSJNMzMuMTcsMjEuNDdIMjh2Mmg0LjE3djguMzdIMThWMjMuNDdoNi4zdi40MmExLDEsMCwwLDAsMiwwVjIwYTEsMSwwLDAsMC0yLDB2MS40N0gxN2ExLDEsMCwwLDAtMSwxVjMyLjg0YTEsMSwwLDAsMCwxLDFIMzMuMTdhMSwxLDAsMCwwLDEtMVYyMi40N0ExLDEsMCwwLDAs''@;'; put 'put ''MzMuMTcsMjEuNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICBcbiAgPGNpcmNsZSBjeD0iMTYuODYiIGN5PSI5LjczIiByPSI2LjQ2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIxIiB5PSIy''@;'; put 'put ''OCIgd2lkdGg9IjciIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xNSwzMHYzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM2ExLDEsMCwwLDAtMS0xSDI2VjIwLjUzYTEsMSwwLDAsMC0yLDBWMjJIMjJW''@;'; put 'put ''MTguNDJBMzIuMTIsMzIuMTIsMCwwLDAsMTYuODYsMThhMjYsMjYsMCwwLDAtMTEsMi4zOSwzLjI4LDMuMjgsMCwwLDAtMS44OCwzVjMwWm0xNywySDE3VjI0aDd2LjQyYTEsMSwwLDAsMCwyLDBWMjRoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxGLkNs''@;'; put 'put ''clNoYXBlRmFjdG9yeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDcsNy4zN2ExLDEsMCwwLDAtMSwuMDZMMjMsMTMuNzdWOC4yNmExLDEsMCwwLDAtMS42NC0uNzdMMTMuNDgsMTRIMTBWNC42MmExLDEsMCwwLDAtLjc4LTFsLTQtLjlhMSwxLDAsMCwwLS44NS4yQTEsMSwwLDAs''@;'; put 'put ''MCw0LDMuNzNWMTRIM2ExLDEsMCwwLDAtMSwxVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY4LjI2QTEsMSwwLDAsMCwzMy40Nyw3LjM3Wk02LDVsMiwuNDRWMTRINlpNMzIsMzBINFYxNmg5LjgzYTEsMSwwLDAsMCwuNjQtLjIzTDIxLDEwLjM3djUuMjhhMSwxLDAsMCwwLDEu''@;'; put 'put ''NTYuODNMMzIsMTAuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSI2IiB5PSIxNy45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0i''@;'; put 'put ''NiIgeT0iMjEuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjI1Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIvPlxuICA8cmVjdCB4PSIxOSIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHJlY3QgeD0iMjMiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjI0Ljk5IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zMi40NSw4LjQ0LDIyLDE1LjNWOS41MWExLDEsMCwwLDAtMS42My0uNzhMMTQuMDcsMTRIMTBWNC4wNkw0LDIuNzFWMTRIMlYzMWExLDEsMCwwLDAs''@;'; put 'put ''MSwxSDMzYTEsMSwwLDAsMCwxLTFWOS4yN0ExLDEsMCwwLDAsMzIuNDUsOC40NFpNMTQsMjlINlYyN2g4Wm0wLTRINlYyM2g4Wm0wLTRINlYxOWg4Wm04LDhIMjBWMjZoMlptMC02SDIwVjIwaDJabTQsNkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptNCw2SDI4VjI2aDJabTAtNkgyOFYyMGgyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLEYuQ29tbWVyY2VTaGFwZXM9e2NhbGN1bGF0b3I6Ri5DbHJTaGFwZUNhbGN1bGF0b3IsInBpZ2d5LWJhbmsiOkYuQ2xyU2hhcGVQaWdneUJhbmssInNob3BwaW5nLWJhZyI6Ri5DbHJTaGFwZVNob3BwaW5nQmFnLCJz''@;'; put 'put ''aG9wcGluZy1jYXJ0IjpGLkNsclNoYXBlU2hvcHBpbmdDYXJ0LHdhbGxldDpGLkNsclNoYXBlV2FsbGV0LHN0b3JlOkYuQ2xyU2hhcGVTdG9yZSxldXJvOkYuQ2xyU2hhcGVFdXJvLGRvbGxhcjpGLkNsclNoYXBlRG9sbGFyLHBlc286Ri5DbHJTaGFwZVBlc28sImNyZWRpdC1jYXJkIjpGLkNs''@;'; put 'put ''clNoYXBlQ3JlZGl0Q2FyZCxiYW5rOkYuQ2xyU2hhcGVCYW5rLCJkb2xsYXItYmlsbCI6Ri5DbHJTaGFwZURvbGxhckJpbGwsImUtY2hlY2siOkYuQ2xyU2hhcGVFQ2hlY2sscG91bmQ6Ri5DbHJTaGFwZVBvdW5kLHJ1cGVlOkYuQ2xyU2hhcGVSdXBlZSx3b246Ri5DbHJTaGFwZVdvbix5ZW46''@;'; put 'put ''Ri5DbHJTaGFwZVllbixiaXRjb2luOkYuQ2xyU2hhcGVCaXRjb2luLHJ1YmxlOkYuQ2xyU2hhcGVSdWJsZSwiY29pbi1iYWciOkYuQ2xyU2hhcGVDb2luQmFnLCJlbXBsb3llZS1ncm91cCI6Ri5DbHJTaGFwZUVtcGxveWVlR3JvdXAsZW1wbG95ZWU6Ri5DbHJTaGFwZUVtcGxveWVlLGZhY3Rv''@;'; put 'put ''cnk6Ri5DbHJTaGFwZUZhY3Rvcnl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvbW1lcmNlU2hhcGVzLCJzYXZpbmdzIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29tbWVyY2VTaGFwZXNbInBpZ2d5LWJhbmsiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChGLkNvbW1lcmNlU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc''@;'; put 'put ''CiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMg''@;'; put 'put ''Zm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQ29yZVNoYXBlcz1GLkNsclNoYXBlQXJyb3c9Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1GLkNsclNoYXBlRXllSGlkZT1GLkNsclNo''@;'; put 'put ''YXBlRXllPUYuQ2xyU2hhcGVFdmVudD1GLkNsclNoYXBlQ2FsZW5kYXI9Ri5DbHJTaGFwZUFuZ2xlRG91YmxlPUYuQ2xyU2hhcGVWaWV3Q29sdW1ucz1GLkNsclNoYXBlU2VhcmNoPUYuQ2xyU2hhcGVWbUJ1Zz1GLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1GLkNsclNoYXBlRmlsdGVyR3Jp''@;'; put 'put ''ZD1GLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD1GLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPUYuQ2xyU2hhcGVDbG91ZD1GLkNsclNoYXBlSW1hZ2U9Ri5DbHJTaGFwZUJlbGw9Ri5DbHJTaGFwZUZvbGRlck9wZW49Ri5DbHJTaGFwZUZvbGRlcj1GLkNsclNoYXBlQW5nbGU9Ri5DbHJT''@;'; put 'put ''aGFwZVVzZXI9Ri5DbHJTaGFwZUJhcnM9Ri5DbHJTaGFwZUhlbHBJbmZvPUYuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9Ri5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9Ri5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1GLkNsclNoYXBlSW5mb1N0YW5kYXJkPUYuQ2xyU2hhcGVJbmZvQ2lyY2xlPUYu''@;'; put 'put ''Q2xyU2hhcGVDaGVja0NpcmNsZT1GLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9Ri5DbHJTaGFwZVRpbWVzPUYuQ2xyU2hhcGVDaGVjaz1GLkNsclNoYXBlQ29nPUYuQ2xyU2hhcGVIb21lPUYuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZv''@;'; put 'put ''aWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp''@;'; put 'put ''bHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4z''@;'; put 'put ''Miw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywx''@;'; put 'put ''M1oiLz4nKSxGLkNsclNoYXBlSG9tZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEs''@;'; put 'put ''MzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwx''@;'; put 'put ''LDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTkuNzZaIi8+JyksRi5DbHJTaGFwZUNvZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0x''@;'; put 'put ''OC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEu''@;'; put 'put ''NWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4z''@;'; put 'put ''LTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFs''@;'; put 'put ''MC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwy''@;'; put 'put ''LjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwy''@;'; put 'put ''OC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41''@;'; put 'put ''LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwx''@;'; put 'put ''LjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwx''@;'; put 'put ''OGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44''@;'; put 'put ''LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0w''@;'; put 'put ''LjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4x''@;'; put 'put ''LTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUs''@;'; put 'put ''MS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3''@;'; put 'put ''LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIu''@;'; put 'put ''NCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0w''@;'; put 'put ''LjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4x''@;'; put 'put ''bDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0w''@;'; put 'put ''LjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMu''@;'; put 'put ''MiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUu''@;'; put 'put ''MkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIu''@;'; put 'put ''NmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMs''@;'; put 'put ''MS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEs''@;'; put 'put ''Nyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAu''@;'; put 'put ''NC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42''@;'; put 'put ''NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDEx''@;'; put 'put ''LjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywx''@;'; put 'put ''YTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAs''@;'; put 'put ''MCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40''@;'; put 'put ''My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i''@;'; put 'put ''YWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQz''@;'; put 'put ''bC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCww''@;'; put 'put ''LDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNo''@;'; put 'put ''My4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0x''@;'; put 'put ''YS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40''@;'; put 'put ''SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCww''@;'; put 'put ''LTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDEx''@;'; put 'put ''LjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQz''@;'; put 'put ''bDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYu''@;'; put 'put ''MzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy''@;'; put 'put ''Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxGLkNsclNoYXBlVGltZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEu''@;'; put 'put ''NDFaIi8+JyksRi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2''@;'; put 'put ''QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEs''@;'; put 'put ''MCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3''@;'; put 'put ''LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0x''@;'; put 'put ''LjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxGLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAs''@;'; put 'put ''MCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEu''@;'; put 'put ''MywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEu''@;'; put 'put ''NzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxGLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCww''@;'; put 'put ''LDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwz''@;'; put 'put ''LjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQs''@;'; put 'put ''MCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLEYuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMi''@;'; put 'put ''IGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEs''@;'; put 'put ''MSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxGLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIg''@;'; put 'put ''Y3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEu''@;'; put 'put ''NCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxGLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksRi5DbHJTaGFwZUVycm9yU3RhbmRh''@;'; put 'put ''cmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQs''@;'; put 'put ''MTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAs''@;'; put 'put ''MCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksRi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxtLmNsckljb25TVkcp''@;'; put 'put ''KCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwx''@;'; put 'put ''LDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2''@;'; put 'put ''MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1''@;'; put 'put ''LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEu''@;'; put 'put ''MjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3''@;'; put 'put ''NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBD''@;'; put 'put ''MzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwy''@;'; put 'put ''LjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEs''@;'; put 'put ''My42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwx''@;'; put 'put ''LDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLEYuQ2xyU2hhcGVIZWxwSW5mbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEt''@;'; put 'put ''LjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0x''@;'; put 'put ''LjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4z''@;'; put 'put ''LDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0''@;'; put 'put ''LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4''@;'; put 'put ''LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0x''@;'; put 'put ''Miw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4y''@;'; put 'put ''NWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks''@;'; put 'put ''Ri5DbHJTaGFwZUJhcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0''@;'; put 'put ''LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxGLkNsclNoYXBlVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pN''@;'; put 'put ''MjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0''@;'; put 'put ''VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCww''@;'; put 'put ''LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUy''@;'; put 'put ''YTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAs''@;'; put 'put ''MCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYt''@;'; put 'put ''NkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcs''@;'; put 'put ''NywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZUFuZ2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2''@;'; put 'put ''TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxGLkNsclNoYXBlRm9sZGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiww''@;'; put 'put ''LDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEt''@;'; put 'put ''MS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgx''@;'; put 'put ''Ni40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs''@;'; put 'put ''MCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBk''@;'; put 'put ''PSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcy''@;'; put 'put ''LDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLG0uY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCww''@;'; put 'put ''LDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMu''@;'; put 'put ''NzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43''@;'; put 'put ''MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDks''@;'; put 'put ''NUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5''@;'; put 'put ''LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdW''@;'; put 'put ''MjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYu''@;'; put 'put ''NDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQs''@;'; put 'put ''MS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAs''@;'; put 'put ''MCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEy''@;'; put 'put ''LjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0y''@;'; put 'put ''LjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAs''@;'; put 'put ''NS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksRi5DbHJTaGFwZUJlbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0x''@;'; put 'put ''LjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45Mywx''@;'; put 'put ''LDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAs''@;'; put 'put ''MSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAs''@;'; put 'put ''MCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgs''@;'; put 'put ''MzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYz''@;'; put 'put ''LDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUu''@;'; put 'put ''MTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAs''@;'; put 'put ''MCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwx''@;'; put 'put ''LDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgx''@;'; put 'put ''LDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0z''@;'; put 'put ''LjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlSW1hZ2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2''@;'; put 'put ''VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCww''@;'; put 'put ''LDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAs''@;'; put 'put ''MCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSww''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMy''@;'; put 'put ''YTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywz''@;'; put 'put ''LDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEs''@;'; put 'put ''MS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksRi5DbHJTaGFwZUNsb3VkPSgwLG0uY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwy''@;'; put 'put ''OSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywy''@;'; put 'put ''OCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3''@;'; put 'put ''LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDkt''@;'; put 'put ''MS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMx''@;'; put 'put ''LDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0''@;'; put 'put ''LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwz''@;'; put 'put ''NSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42''@;'; put 'put ''NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4y''@;'; put 'put ''OSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCww''@;'; put 'put ''LDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlRWxsaXBz''@;'; put 'put ''aXNIb3Jpem9udGFsPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIx''@;'; put 'put ''OCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIg''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEi''@;'; put 'put ''IHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+''@;'; put 'put ''JyksRi5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAs''@;'; put 'put ''MC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4x''@;'; put 'put ''Mi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxGLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5''@;'; put 'put ''LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCww''@;'; put 'put ''LDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksRi5DbHJTaGFwZVZtQnVnPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRp''@;'; put 'put ''b246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1''@;'; put 'put ''LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4x''@;'; put 'put ''NSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45Mywz''@;'; put 'put ''LjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUs''@;'; put 'put ''MTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4y''@;'; put 'put ''NywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIg''@;'; put 'put ''ZmlsbD0iI2ZmZmZmZiIvPicpLEYuQ2xyU2hhcGVTZWFyY2g9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4w''@;'; put 'put ''NW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAs''@;'; put 'put ''MSwwLDM1LDMzLjI5WiIvPicpLEYuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksRi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43''@;'; put 'put ''MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWEx''@;'; put 'put ''LDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLEYuQ2xyU2hhcGVDYWxlbmRhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1''@;'; put 'put ''LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIy''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEw''@;'; put 'put ''YTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwx''@;'; put 'put ''LDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1''@;'; put 'put ''LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIx''@;'; put 'put ''OSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwy''@;'; put 'put ''LDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9Ijgi''@;'; put 'put ''IHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4y''@;'; put 'put ''LDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVI''@;'; put 'put ''OFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwx''@;'; put 'put ''LDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDks''@;'; put 'put ''M1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgt''@;'; put 'put ''NEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRo''@;'; put 'put ''MlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMu''@;'; put 'put ''NjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJa''@;'; put 'put ''bTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlRXZlbnQ9''@;'; put 'put ''KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAs''@;'; put 'put ''MCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs''@;'; put 'put ''MTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEs''@;'; put 'put ''MjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJW''@;'; put 'put ''MzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEs''@;'; put 'put ''MSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAs''@;'; put 'put ''LjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYg''@;'; put 'put ''MTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFW''@;'; put 'put ''MzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQi''@;'; put 'put ''IGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwx''@;'; put 'put ''LTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcu''@;'; put 'put ''OCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiww''@;'; put 'put ''LDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0x''@;'; put 'put ''VjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwt''@;'; put 'put ''OS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAs''@;'; put 'put ''MCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMs''@;'; put 'put ''MTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41''@;'; put 'put ''QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMu''@;'; put 'put ''NVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVFeWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4''@;'; put 'put ''bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQy''@;'; put 'put ''LDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0''@;'; put 'put ''Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywy''@;'; put 'put ''LDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjgu''@;'; put 'put ''NTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIi''@;'; put 'put ''Lz4nKSxGLkNsclNoYXBlRXllSGlkZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0''@;'; put 'put ''LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2''@;'; put 'put ''LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCww''@;'; put 'put ''LDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1''@;'; put 'put ''bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgu''@;'; put 'put ''MzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5''@;'; put 'put ''LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTku''@;'; put 'put ''OTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIz''@;'; put 'put ''LDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2Ex''@;'; put 'put ''Ny4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxGLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcu''@;'; put 'put ''MTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43''@;'; put 'put ''VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUFycm93PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDgu''@;'; put 'put ''MzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksRi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0''@;'; put 'put ''dXMiOkYuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Ri5DbHJTaGFwZUhvbWUsY29nOkYuQ2xyU2hhcGVDb2csY2hlY2s6Ri5DbHJTaGFwZUNoZWNrLHRpbWVzOkYuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOkYuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJl''@;'; put 'put ''eGNsYW1hdGlvbi1jaXJjbGUiOkYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpGLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpGLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6Ri5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vz''@;'; put 'put ''cy1zdGFuZGFyZCI6Ri5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOkYuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpGLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOkYuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOkYuQ2xy''@;'; put 'put ''U2hhcGVCYXJzLHVzZXI6Ri5DbHJTaGFwZVVzZXIsYW5nbGU6Ri5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpGLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Ri5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpGLkNsclNoYXBlQmVsbCxpbWFnZTpGLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Ri5DbHJT''@;'; put 'put ''aGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpGLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Ri5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpGLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpG''@;'; put 'put ''LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpGLkNsclNoYXBlVm1CdWcsc2VhcmNoOkYuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Ri5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOkYuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpGLkNsclNo''@;'; put 'put ''YXBlQ2FsZW5kYXIsZXZlbnQ6Ri5DbHJTaGFwZUV2ZW50LGV5ZTpGLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Ri5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpGLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OkYuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KEYuQ29yZVNoYXBlcywiaG91c2UiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KEYuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJjbG9zZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMudGltZXMpKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImVycm9yIiwoMCx4LmRlc2NyaXB0b3JD''@;'; put 'put ''b25maWcpKEYuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJpbmZvIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNv''@;'; put 'put ''cmVTaGFwZXMsIm1lbnUiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoRi5Db3JlU2hhcGVzLCJjYXJldCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNo''@;'; put 'put ''YXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJv''@;'; put 'put ''amVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEll''@;'; put 'put ''LEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5DbHJTaGFwZUxvZ291dD1GLkNsclNoYXBlTG9naW49Ri5DbHJTaGFwZUhlbHA9Ri5DbHJTaGFwZUNvcHk9Ri5DbHJTaGFwZUNoaWxkQXJyb3c9Ri5DbHJTaGFwZUNp''@;'; put 'put ''cmNsZUFycm93PUYuQ2xyU2hhcGVBbGFybUNsb2NrPUYuQ2xyU2hhcGVDbG9jaz1GLkNsclNoYXBlSGlzdG9yeT1GLkNsclNoYXBlVGFncz1GLkNsclNoYXBlVGFnPUYuQ2xyU2hhcGVUcmFzaD1GLkNsclNoYXBlVGltZXNDaXJjbGU9Ri5DbHJTaGFwZUJhbj1GLkNsclNoYXBlUGx1c0NpcmNs''@;'; put 'put ''ZT1GLkNsclNoYXBlTWludXNDaXJjbGU9Ri5DbHJTaGFwZU1pbnVzPUYuQ2xyU2hhcGVQbHVzPUYuQ2xyU2hhcGVGaWxlPUYuQ2xyU2hhcGVQaW49Ri5DbHJTaGFwZUZpbHRlcj1GLkNsclNoYXBlUG9wT3V0PUYuQ2xyU2hhcGVVc2Vycz1GLkNsclNoYXBlVW5sb2NrPUYuQ2xyU2hhcGVMb2Nr''@;'; put 'put ''PUYuQ2xyU2hhcGVVcGxvYWQ9Ri5DbHJTaGFwZURvd25sb2FkPUYuQ2xyU2hhcGVMaWdodGJ1bGI9Ri5DbHJTaGFwZVZpZXdDYXJkcz1GLkNsclNoYXBlVmlld0xpc3Q9Ri5DbHJTaGFwZVN5bmM9Ri5DbHJTaGFwZVJlZnJlc2g9Ri5DbHJTaGFwZU5vdGU9Ri5DbHJTaGFwZVBlbmNpbD1GLkNs''@;'; put 'put ''clNoYXBlVGhlcm1vbWV0ZXI9Ri5DbHJTaGFwZUJ1Zz1GLkNsclNoYXBlU2Npc3NvcnM9Ri5DbHJTaGFwZUFzdGVyaXNrPUYuQ2xyU2hhcGVCb29rPUYuQ2xyU2hhcGVPYmplY3RzPUYuQ2xyU2hhcGVSZXNpemU9Ri5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz1GLkNsclNoYXBlQ3Vyc29ySGFu''@;'; put 'put ''ZD1GLkNsclNoYXBlQ3Vyc29yQXJyb3c9Ri5DbHJTaGFwZUdyaWRWaWV3PUYuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj1GLkNsclNoYXBlTmV3PUYuQ2xyU2hhcGVBbGFybU9mZj1GLkNsclNoYXBlUGluYm9hcmQ9Ri5DbHJTaGFwZUFkZFRleHQ9dm9pZCAwLEYuQ2xyU2hhcGVDbG9uZT1G''@;'; put 'put ''LkNsclNoYXBlQ3Vyc29yTW92ZT1GLkNsclNoYXBlV2FuZD1GLkNsclNoYXBlU3VuPUYuQ2xyU2hhcGVNb29uPUYuQ2xyU2hhcGVGaWx0ZXIyPUYuQ2xyU2hhcGVEcmFnSGFuZGxlPUYuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQ9Ri5DbHJTaGFwZUNvbG9yUGlja2VyPUYuQ2xyU2hhcGVCcmll''@;'; put 'put ''ZmNhc2U9Ri5DbHJTaGFwZUV4cGFuZENhcmQ9Ri5DbHJTaGFwZUNvbGxhcHNlQ2FyZD1GLkNsclNoYXBlU29ydEJ5PUYuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Mj1GLkNsclNoYXBlQWNjZXNzaWJpbGl0eTE9Ri5DbHJTaGFwZVNocmluaz1GLkNsclNoYXBlUGFwZXJjbGlwPUYuQ2xyU2hhcGVG''@;'; put 'put ''aWxlR3JvdXA9Ri5DbHJTaGFwZVJlcGVhdD1GLkNsclNoYXBlSWRCYWRnZT1GLkNsclNoYXBlQmFsYW5jZT1GLkNsclNoYXBlT3JnYW5pemF0aW9uPUYuQ2xyU2hhcGVOb0FjY2Vzcz1GLkNsclNoYXBlSG91cmdsYXNzPUYuQ2xyU2hhcGVGbGFtZT1GLkNsclNoYXBlVGFyZ2V0PUYuQ2xyU2hh''@;'; put 'put ''cGVCdWxsc2V5ZT1GLkNsclNoYXBlV3JlbmNoPUYuQ2xyU2hhcGVCb2x0PUYuQ2xyU2hhcGVMaWJyYXJ5PUYuQ2xyU2hhcGVLZXk9Ri5DbHJTaGFwZVpvb21PdXQ9Ri5DbHJTaGFwZVpvb21Jbj1GLkNsclNoYXBlV2luZG93UmVzdG9yZT1GLkNsclNoYXBlV2luZG93TWluPUYuQ2xyU2hhcGVX''@;'; put 'put ''aW5kb3dNYXg9Ri5DbHJTaGFwZVdpbmRvd0Nsb3NlPUYuQ2xyU2hhcGVUb29scz1GLkNsclNoYXBlU3dpdGNoPUYuQ2xyU2hhcGVUd29XYXlBcnJvd3M9Ri5DbHJTaGFwZUZpbGVTZXR0aW5ncz1GLkNsclNoYXBlU2Nyb2xsPUYuQ2xyU2hhcGVVbmRvPUYuQ2xyU2hhcGVSZWRvPUYuQ2xyU2hh''@;'; put 'put ''cGVMaXN0PUYuQ2xyU2hhcGVGaXJld2FsbD1GLkNsclNoYXBlQ2xpcGJvYXJkPUYuQ2xyU2hhcGVTbGlkZXI9Ri5DbHJTaGFwZVdvcmxkPUYuQ2xyU2hhcGVQcmludGVyPXZvaWQgMCxGLkVzc2VudGlhbFNoYXBlcz1GLkNsclNoYXBlQ29sb3JQYWxldHRlPUYuQ2xyU2hhcGVGaXJzdEFpZD1G''@;'; put 'put ''LkNsclNoYXBlQmV0YT1GLkNsclNoYXBlRG90Q2lyY2xlPUYuQ2xyU2hhcGVDaXJjbGU9Ri5DbHJTaGFwZUNyb3NzaGFpcnM9Ri5DbHJTaGFwZVZvbHVtZT1GLkNsclNoYXBlVGFibGU9Ri5DbHJTaGFwZVNub3dmbGFrZT1GLkNsclNoYXBlRnVlbD1GLkNsclNoYXBlRm9ybT1GLkNsclNoYXBl''@;'; put 'put ''RmlzaD1GLkNsclNoYXBlVHJlZT1GLkNsclNoYXBlUmVjeWNsZT1GLkNsclNoYXBlRmlsdGVyT2ZmPUYuQ2xyU2hhcGVGaWxlWmlwPUYuQ2xyU2hhcGVDdXJzb3JIYW5kT3Blbj1GLkNsclNoYXBlQ3Vyc29ySGFuZEdyYWI9Ri5DbHJTaGFwZVRyZWVWaWV3PUYuQ2xyU2hhcGVQb3J0cmFpdD1G''@;'; put 'put ''LkNsclNoYXBlUGFzdGU9Ri5DbHJTaGFwZUxhbmRzY2FwZT1GLkNsclNoYXBlRXJhc2VyPUYuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPUYuQ2xyU2hhcGVEZXRhaWxzPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25z''@;'; put 'put ''L3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxsZT1hZSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO0YuQ2xyU2hhcGVBZGRUZXh0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYz''@;'; put 'put ''LjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxGLkNsclNoYXBlUGluYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMz''@;'; put 'put ''LjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUx''@;'; put 'put ''LDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNsMi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjlj''@;'; put 'put ''Ljc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAs''@;'; put 'put ''MCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTIt''@;'; put 'put ''Ljg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgsMS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLEYuQ2xyU2hh''@;'; put 'put ''cGVBbGFybU9mZj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40''@;'; put 'put ''NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIyQS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45''@;'; put 'put ''MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIu''@;'; put 'put ''NzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0''@;'; put 'put ''LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEu''@;'; put 'put ''NDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1''@;'; put 'put ''LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIsMjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wx''@;'; put 'put ''NywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43''@;'; put 'put ''Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQu''@;'; put 'put ''MTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLEYuQ2xyU2hhcGVOZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4wOC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkz''@;'; put 'put ''LDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCwwLDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIu''@;'; put 'put ''ODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41''@;'; put 'put ''MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAxNi44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41''@;'; put 'put ''IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41''@;'; put 'put ''MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIsMkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMu''@;'; put 'put ''MzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0xLjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEu''@;'; put 'put ''MzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLEYuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44Miww''@;'; put 'put ''LTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4z''@;'; put 'put ''NC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz''@;'; put 'put ''LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEsMCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEs''@;'; put 'put ''MSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLEYuQ2xyU2hhcGVHcmlkVmlldz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAs''@;'; put 'put ''MCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAsNEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIs''@;'; put 'put ''MCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIi''@;'; put 'put ''IGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPicpLEYuQ2xyU2hhcGVDdXJzb3JBcnJvdz0o''@;'; put 'put ''MCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcs''@;'; put 'put ''OC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCwwLDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2''@;'; put 'put ''YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwy''@;'; put 'put ''LjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAsMCwwLDI5LDEyLjM2WiIvPicpLEYuQ2xyU2hhcGVDdXJzb3JIYW5k''@;'; put 'put ''PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMu''@;'; put 'put ''NCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEuNDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3''@;'; put 'put ''LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAsMS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQu''@;'; put 'put ''MTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1''@;'; put 'put ''LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4yOGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1''@;'; put 'put ''VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMuMjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0u''@;'; put 'put ''NDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYxNS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkz''@;'; put 'put ''LDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAsMTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksRi5DbHJTaGFwZUN1''@;'; put 'put ''cnNvckhhbmRDbGljaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0wLjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTEx''@;'; put 'put ''LjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQtMS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywx''@;'; put 'put ''LjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUuOFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYs''@;'; put 'put ''MTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYtMy4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUu''@;'; put 'put ''MkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4z''@;'; put 'put ''LTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjksMC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYz''@;'; put 'put ''bDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwxLjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksRi5DbHJTaGFwZVJlc2l6ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksRi5DbHJTaGFwZU9iamVjdHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgzMlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSwwLDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0w''@;'; put 'put ''LDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUsMjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEs''@;'; put 'put ''MSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwx''@;'; put 'put ''djRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxGLkNs''@;'; put 'put ''clNoYXBlQm9vaz0oMCxtLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDksMSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlh''@;'; put 'put ''MSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5''@;'; put 'put ''Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjks''@;'; put 'put ''OFoiLz4nKSxGLkNsclNoYXBlQXN0ZXJpc2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00''@;'; put 'put ''LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMs''@;'; put 'put ''MCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEtMS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcy''@;'; put 'put ''TDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwy''@;'; put 'put ''MC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQs''@;'; put 'put ''MS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksRi5DbHJTaGFwZVNjaXNzb3JzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwx''@;'; put 'put ''Ljc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41NywwLDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2''@;'; put 'put ''LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMuNzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYs''@;'; put 'put ''MCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYsMEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0z''@;'; put 'put ''LjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwxLDcuNDUsMTMuMjNaIi8+JyksRi5DbHJTaGFwZUJ1Zz0oMCxtLmNs''@;'; put 'put ''ckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIy''@;'; put 'put ''LjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40''@;'; put 'put ''Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcyYTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJh''@;'; put 'put ''MSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwzMS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMu''@;'; put 'put ''NjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMuMTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4x''@;'; put 'put ''Ny0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEsNS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMs''@;'; put 'put ''My4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAs''@;'; put 'put ''Mkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCwwLDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0''@;'; put 'put ''bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0xNCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgs''@;'; put 'put ''MS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRBMTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwx''@;'; put 'put ''LjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAsMSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDku''@;'; put 'put ''MDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLEYuQ2xyU2hhcGVU''@;'; put 'put ''aGVybW9tZXRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4z''@;'; put 'put ''Ni00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxGLkNsclNoYXBlUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwy''@;'; put 'put ''OCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAsMCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wx''@;'; put 'put ''Ljc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQuMjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUs''@;'; put 'put ''Mi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4zMmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcy''@;'; put 'put ''LDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLEYuQ2xyU2hhcGVOb3RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAs''@;'; put 'put ''MCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2''@;'; put 'put ''LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVSZWZyZXNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDksMCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAs''@;'; put 'put ''MSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDExLjY1WiIvPicpLEYuQ2xyU2hhcGVTeW5jPSgwLG0uY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDguNywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAs''@;'; put 'put ''MiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSwwLDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45''@;'; put 'put ''NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCwwLDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwx''@;'; put 'put ''LDAsMCwwLDMwLjA2LDFaIi8+JyksRi5DbHJTaGFwZVZpZXdMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIx''@;'; put 'put ''NCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCww''@;'; put 'put ''LDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLEYuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwx''@;'; put 'put ''N0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRh''@;'; put 'put ''MiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIs''@;'; put 'put ''MiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLEYuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgs''@;'; put 'put ''MTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40NiwxOC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEt''@;'; put 'put ''MS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4x''@;'; put 'put ''OSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSww''@;'; put 'put ''LDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCwwLDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEz''@;'; put 'put ''LTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywxOC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwx''@;'; put 'put ''LC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1''@;'; put 'put ''LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44Ljgs''@;'; put 'put ''MCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAs''@;'; put 'put ''MCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSww''@;'; put 'put ''LDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywz''@;'; put 'put ''LjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEz''@;'; put 'put ''bC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44Ljgs''@;'; put 'put ''MCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlRG93bmxvYWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJI''@;'; put 'put ''MzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDgu''@;'; put 'put ''ODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2''@;'; put 'put ''YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksRi5DbHJTaGFwZVVwbG9hZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44''@;'; put 'put ''MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEz''@;'; put 'put ''LjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9''@;'; put 'put ''Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEs''@;'; put 'put ''MjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwx''@;'; put 'put ''NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVMb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIs''@;'; put 'put ''MCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAsMCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMy''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAsMSw2LDYuMzZaIi8+JyksRi5DbHJTaGFwZVVubG9jaz0oMCxtLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIs''@;'; put 'put ''MCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgy''@;'; put 'put ''MFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVoiLz4nKSxGLkNsclNoYXBlVXNlcnM9KDAsbS5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcu''@;'; put 'put ''M3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDkuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEtMC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVo''@;'; put 'put ''MnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIsMC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIu''@;'; put 'put ''MiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4y''@;'; put 'put ''LDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAuNSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4''@;'; put 'put ''aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMw''@;'; put 'put ''LTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMwLjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0x''@;'; put 'put ''LjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44''@;'; put 'put ''LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwzMEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0w''@;'; put 'put ''LjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4w''@;'; put 'put ''OSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0x''@;'; put 'put ''MywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEtMS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2''@;'; put 'put ''Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUu''@;'; put 'put ''Mjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAs''@;'; put 'put ''MSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40NiwwLDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMu''@;'; put 'put ''NjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDksMCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEs''@;'; put 'put ''NC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42''@;'; put 'put ''NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwxNy44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcs''@;'; put 'put ''Mi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4y''@;'; put 'put ''OHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIzLjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwx''@;'; put 'put ''LDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQyLDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCww''@;'; put 'put ''LDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42''@;'; put 'put ''Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAu''@;'; put 'put ''M0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2''@;'; put 'put ''LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCww''@;'; put 'put ''LDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0''@;'; put 'put ''ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFs''@;'; put 'put ''ZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNBOS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwxLDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcs''@;'; put 'put ''OWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4y''@;'; put 'put ''MywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2''@;'; put 'put ''LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjgu''@;'; put 'put ''NTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4w''@;'; put 'put ''OSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wy''@;'; put 'put ''NS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSww''@;'; put 'put ''LDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlUG9wT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNI''@;'; put 'put ''NWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjku''@;'; put 'put ''NTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxGLkNsclNoYXBlRmlsdGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEs''@;'; put 'put ''MSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSww''@;'; put 'put ''LDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAs''@;'; put 'put ''MCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywxLjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTku''@;'; put 'put ''MTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVBpbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAsMCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5''@;'; put 'put ''QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4y''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEuNDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwxLjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwx''@;'; put 'put ''LjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksRi5DbHJTaGFwZUZpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0uMywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSwwLTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUu''@;'; put 'put ''OTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUu''@;'; put 'put ''NFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEu''@;'; put 'put ''ODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1''@;'; put 'put ''LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJo''@;'; put 'put ''MTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLEYuQ2xyU2hhcGVQbHVzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEsMCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxGLkNsclNo''@;'; put 'put ''YXBlTWludXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxtLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41''@;'; put 'put ''LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdI''@;'; put 'put ''OS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCww''@;'; put 'put ''LDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThBMTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTgu''@;'; put 'put ''NDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicp''@;'; put 'put ''LEYuQ2xyU2hhcGVCYW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1''@;'; put 'put ''LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLEYuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJsLTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4w''@;'; put 'put ''OCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLEYuQ2xyU2hhcGVUcmFzaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEz''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAu''@;'; put 'put ''NzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxGLkNsclNoYXBlVGFnPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCww''@;'; put 'put ''LDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIi''@;'; put 'put ''IHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIyLDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEs''@;'; put 'put ''MS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTku''@;'; put 'put ''OUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwy''@;'; put 'put ''LDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0''@;'; put 'put ''LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwx''@;'; put 'put ''NC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVUYWdzPSgwLG0uY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEEx''@;'; put 'put ''LjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5''@;'; put 'put ''LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMx''@;'; put 'put ''LjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRI''@;'; put 'put ''MjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5''@;'; put 'put ''LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMs''@;'; put 'put ''MS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMu''@;'; put 'put ''NjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEw''@;'; put 'put ''LDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4''@;'; put 'put ''LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42Nywx''@;'; put 'put ''MS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2Ex''@;'; put 'put ''LjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjcz''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEy''@;'; put 'put ''LjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEs''@;'; put 'put ''MSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI''@;'; put 'put ''MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksRi5DbHJTaGFwZUhpc3Rvcnk9KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksRi5DbHJTaGFwZUNsb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCww''@;'; put 'put ''LDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAsMCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCww''@;'; put 'put ''LDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEzLDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEy''@;'; put 'put ''LjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4x''@;'; put 'put ''OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwz''@;'; put 'put ''LjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiww''@;'; put 'put ''LDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxGLkNsclNoYXBlQWxhcm1DbG9jaz0oMCxtLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2''@;'; put 'put ''LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwy''@;'; put 'put ''OS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjkyLDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwy''@;'; put 'put ''NC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwx''@;'; put 'put ''Ni4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEu''@;'; put 'put ''NjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTls''@;'; put 'put ''MS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4''@;'; put 'put ''LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTks''@;'; put 'put ''MTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAs''@;'; put 'put ''MCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu''@;'; put 'put ''MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjks''@;'; put 'put ''MTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEs''@;'; put 'put ''MSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4''@;'; put 'put ''LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3''@;'; put 'put ''LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2''@;'; put 'put ''YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1''@;'; put 'put ''LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMy''@;'; put 'put ''LDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEuNDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUu''@;'; put 'put ''MjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIs''@;'; put 'put ''MEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksRi5DbHJTaGFw''@;'; put 'put ''ZUNoaWxkQXJyb3c9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCwwLDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEs''@;'; put 'put ''MSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvcHk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYy''@;'; put 'put ''NEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41''@;'; put 'put ''QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYs''@;'; put 'put ''MCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0i''@;'; put 'put ''MjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlSGVscD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMw''@;'; put 'put ''QTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45''@;'; put 'put ''MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjlo''@;'; put 'put ''LjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgi''@;'; put 'put ''IGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4yYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4z''@;'; put 'put ''Mi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAs''@;'; put 'put ''MCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9''@;'; put 'put ''IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40''@;'; put 'put ''NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEu''@;'; put 'put ''NjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0x''@;'; put 'put ''LjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMs''@;'; put 'put ''Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwx''@;'; put 'put ''LDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0x''@;'; put 'put ''LjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwx''@;'; put 'put ''OS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlTG9naW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYyMC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4''@;'; put 'put ''LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQx''@;'; put 'put ''LTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVMb2dvdXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0y''@;'; put 'put ''LTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIy''@;'; put 'put ''SDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAs''@;'; put 'put ''MCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4''@;'; put 'put ''LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlUHJpbnRlcj0oMCxtLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAt''@;'; put 'put ''MlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIyLjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQg''@;'; put 'put ''MzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4x''@;'; put 'put ''My0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy''@;'; put 'put ''Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjci''@;'; put 'put ''IHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1Yx''@;'; put 'put ''M0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwxLDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIy''@;'; put 'put ''LjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZW''@;'; put 'put ''MTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwx''@;'; put 'put ''OS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0x''@;'; put 'put ''SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVXb3JsZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRo''@;'; put 'put ''My42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEu''@;'; put 'put ''ODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4z''@;'; put 'put ''N0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcu''@;'; put 'put ''OSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCwwLDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5''@;'; put 'put ''LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFh''@;'; put 'put ''Ny40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQu''@;'; put 'put ''NzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQsMTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAs''@;'; put 'put ''MCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEtMy43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTku''@;'; put 'put ''MzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4zMy0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4z''@;'; put 'put ''NmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNaTTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1''@;'; put 'put ''VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIsMjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVj''@;'; put 'put ''LS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIs''@;'; put 'put ''MCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRj''@;'; put 'put ''LjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4''@;'; put 'put ''LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2''@;'; put 'put ''LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYs''@;'; put 'put ''MjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjku''@;'; put 'put ''NTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjky''@;'; put 'put ''LDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4''@;'; put 'put ''YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44''@;'; put 'put ''Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAsMCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcu''@;'; put 'put ''NDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVTbGlkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDguNDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43''@;'; put 'put ''OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCww''@;'; put 'put ''LDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIs''@;'; put 'put ''MCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMu''@;'; put 'put ''MjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMu''@;'; put 'put ''MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMu''@;'; put 'put ''MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMx''@;'; put 'put ''QTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIu''@;'; put 'put ''MzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEx''@;'; put 'put ''IiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIy''@;'; put 'put ''NiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCww''@;'; put 'put ''VjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNyww''@;'; put 'put ''LDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5''@;'; put 'put ''VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEu''@;'; put 'put ''MzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4z''@;'; put 'put ''MVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCww''@;'; put 'put ''LDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+Jyks''@;'; put 'put ''Ri5DbHJTaGFwZUZpcmV3YWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMydjUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMy''@;'; put 'put ''djYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEuNzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEy''@;'; put 'put ''LDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUsNy41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhI''@;'; put 'put ''MjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45''@;'; put 'put ''VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy''@;'; put 'put ''LDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhI''@;'; put 'put ''MTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRI''@;'; put 'put ''NFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdW''@;'; put 'put ''MTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9''@;'; put 'put ''IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwz''@;'; put 'put ''MEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0i''@;'; put 'put ''OSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIx''@;'; put 'put ''MSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5''@;'; put 'put ''LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0x''@;'; put 'put ''MywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZI''@;'; put 'put ''MTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVSZWRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEzbC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVVbmRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwxMiw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40''@;'; put 'put ''Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVTY3JvbGw9KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAs''@;'; put 'put ''NC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMyLDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYt''@;'; put 'put ''Mi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSww''@;'; put 'put ''djQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAs''@;'; put 'put ''Ni41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4''@;'; put 'put ''YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2''@;'; put 'put ''LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMu''@;'; put 'put ''MTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwx''@;'; put 'put ''NS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41''@;'; put 'put ''LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMu''@;'; put 'put ''NUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEu''@;'; put 'put ''MTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGEx''@;'; put 'put ''LjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0''@;'; put 'put ''LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiww''@;'; put 'put ''LDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQy''@;'; put 'put ''LTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIx''@;'; put 'put ''LDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMu''@;'; put 'put ''MDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTIt''@;'; put 'put ''MSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQu''@;'; put 'put ''MDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZW''@;'; put 'put ''NUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCww''@;'; put 'put ''LS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCww''@;'; put 'put ''LS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44Mywx''@;'; put 'put ''LjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmEx''@;'; put 'put ''LjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCww''@;'; put 'put ''LDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEt''@;'; put 'put ''MS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4y''@;'; put 'put ''Myw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5''@;'; put 'put ''LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2''@;'; put 'put ''LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4x''@;'; put 'put ''NSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGExLjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3''@;'; put 'put ''LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4xNiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCww''@;'; put 'put ''LDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4yOWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0x''@;'; put 'put ''LjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwxLjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2''@;'; put 'put ''LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwxLDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4''@;'; put 'put ''bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEyQTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEs''@;'; put 'put ''MSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAs''@;'; put 'put ''NC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t''@;'; put 'put ''YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgy''@;'; put 'put ''NnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCww''@;'; put 'put ''LDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0u''@;'; put 'put ''MjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJh''@;'; put 'put ''LjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVW''@;'; put 'put ''MjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu''@;'; put 'put ''NTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3''@;'; put 'put ''LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCww''@;'; put 'put ''LC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2''@;'; put 'put ''bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwz''@;'; put 'put ''My41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1''@;'; put 'put ''LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJh''@;'; put 'put ''LjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3''@;'; put 'put ''LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwu''@;'; put 'put ''MzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNyww''@;'; put 'put ''LDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''NS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIC8+JyksRi5DbHJTaGFwZVR3b1dheUFycm93''@;'; put 'put ''cz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjkuNTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEuNDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMu''@;'; put 'put ''MjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFMOS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5''@;'; put 'put ''LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4y''@;'; put 'put ''MSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVUb29scz0oMCxtLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCwwLDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYy''@;'; put 'put ''OGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFMMzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgx''@;'; put 'put ''NmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4Ljky''@;'; put 'put ''LDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCww''@;'; put 'put ''LDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlV2luZG93Q2xvc2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4''@;'; put 'put ''LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4n''@;'; put 'put ''KSxGLkNsclNoYXBlV2luZG93TWF4PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcuODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVdpbmRvd01pbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz4nKSxGLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiIC8+JyksRi5DbHJTaGFwZVpvb21Jbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv''@;'; put 'put ''PicpLEYuQ2xyU2hhcGVab29tT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCwwLDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlS2V5PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMi''@;'; put 'put ''IHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcu''@;'; put 'put ''NDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4''@;'; put 'put ''LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykg''@;'; put 'put ''cm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCwwLDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwy''@;'; put 'put ''OC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBMMjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03''@;'; put 'put ''LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEg''@;'; put 'put ''MTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4w''@;'; put 'put ''NywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywz''@;'; put 'put ''LDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUs''@;'; put 'put ''NSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUu''@;'; put 'put ''NjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjgu''@;'; put 'put ''MjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAs''@;'; put 'put ''MC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCww''@;'; put 'put ''LDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu''@;'; put 'put ''MTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwz''@;'; put 'put ''LjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFM''@;'; put 'put ''MTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlTGlicmFyeT0oMCxtLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBh''@;'; put 'put ''MSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMuOTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJT''@;'; put 'put ''aGFwZUJvbHQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgzMC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGEx''@;'; put 'put ''LDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSwwLDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUuNywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1''@;'; put 'put ''aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVXcmVuY2g9KDAsbS5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcsMCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCww''@;'; put 'put ''LDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4''@;'; put 'put ''LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJv''@;'; put 'put ''dGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAuNUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSww''@;'; put 'put ''LDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAsMSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUJ1bGxzZXllPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBsLTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwy''@;'; put 'put ''LjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEsMSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgs''@;'; put 'put ''NC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42''@;'; put 'put ''LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjks''@;'; put 'put ''NC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEzLjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQu''@;'; put 'put ''MDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlVGFy''@;'; put 'put ''Z2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgsNC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcs''@;'; put 'put ''MCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''OCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLEYuQ2xyU2hhcGVGbGFtZT0o''@;'; put 'put ''MCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMs''@;'; put 'put ''MjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQzLDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4y''@;'; put 'put ''MSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0yLjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0''@;'; put 'put ''LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIsNy44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44''@;'; put 'put ''Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCwwLDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgy''@;'; put 'put ''Mi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43Nyww''@;'; put 'put ''LS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxG''@;'; put 'put ''LkNsclNoYXBlSG91cmdsYXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAs''@;'; put 'put ''MjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJI''@;'; put 'put ''N2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0u''@;'; put 'put ''NjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5''@;'; put 'put ''LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4z''@;'; put 'put ''Niw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAs''@;'; put 'put ''MCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEs''@;'; put 'put ''MCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMTho''@;'; put 'put ''MGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEu''@;'; put 'put ''MjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0''@;'; put 'put ''LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42''@;'; put 'put ''Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBh''@;'; put 'put ''Ni4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwx''@;'; put 'put ''LDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4w''@;'; put 'put ''NywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1''@;'; put 'put ''TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2''@;'; put 'put ''LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQu''@;'; put 'put ''NTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu''@;'; put 'put ''MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''YWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcs''@;'; put 'put ''NEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkx''@;'; put 'put ''LTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwxMS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwx''@;'; put 'put ''MS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZU5vQWNjZXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0''@;'; put 'put ''LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3''@;'; put 'put ''LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4yNUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4y''@;'; put 'put ''NSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYu''@;'; put 'put ''ODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZU9yZ2Fu''@;'; put 'put ''aXphdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4''@;'; put 'put ''LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDItMlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiwwLDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIx''@;'; put 'put ''Ljg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0''@;'; put 'put ''IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZUJhbGFuY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEyYTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIzLDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEu''@;'; put 'put ''Ni44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCww''@;'; put 'put ''LDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0uNjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTgu''@;'; put 'put ''MTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLEYuQ2xyU2hhcGVJZEJhZGdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAs''@;'; put 'put ''MCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiww''@;'; put 'put ''LDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAs''@;'; put 'put ''MCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4y''@;'; put 'put ''Ni0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4''@;'; put 'put ''LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''OCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYu''@;'; put 'put ''ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIwLDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2Ex''@;'; put 'put ''LjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJW''@;'; put 'put ''MzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEw''@;'; put 'put ''LjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4y''@;'; put 'put ''MyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAs''@;'; put 'put ''MCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgi''@;'; put 'put ''IGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwx''@;'; put 'put ''MC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41''@;'; put 'put ''QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZVJlcGVhdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4y''@;'; put 'put ''OCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02''@;'; put 'put ''LjFsLTIsMi4xMloiLz4nKSxGLkNsclNoYXBlRmlsZUdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwxLTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFW''@;'; put 'put ''MzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAsMCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4Vjdh''@;'; put 'put ''MSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLEYuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMyww''@;'; put 'put ''LDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDksMCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYs''@;'; put 'put ''MzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSwwLDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUt''@;'; put 'put ''LjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQuNjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEs''@;'; put 'put ''MjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLEYuQ2xyU2hhcGVTaHJpbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0z''@;'; put 'put ''MiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEs''@;'; put 'put ''MCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksRi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43''@;'; put 'put ''LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4x''@;'; put 'put ''Miw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAsMCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42''@;'; put 'put ''MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAsLjc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgs''@;'; put 'put ''MS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEtLjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4y''@;'; put 'put ''OSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4xMiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjksNy4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwx''@;'; put 'put ''MS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQzLDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43''@;'; put 'put ''Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9''@;'; put 'put ''KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEsMCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWEx''@;'; put 'put ''LDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcu''@;'; put 'put ''OTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwzMy4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCww''@;'; put 'put ''LC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVNvcnRCeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAt''@;'; put 'put ''Mmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyMUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEs''@;'; put 'put ''MSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAt''@;'; put 'put ''MS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAs''@;'; put 'put ''MC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9''@;'; put 'put ''IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4z''@;'; put 'put ''N2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEsMCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjds''@;'; put 'put ''NC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEs''@;'; put 'put ''MSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcu''@;'; put 'put ''NzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcu''@;'; put 'put ''MzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43''@;'; put 'put ''OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAsMCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQnJpZWZjYXNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQs''@;'; put 'put ''Ni43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwxLDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSwwLDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYx''@;'; put 'put ''OEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAsMCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43''@;'; put 'put ''YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEs''@;'; put 'put ''LjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvbG9yUGlja2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1''@;'; put 'put ''LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2EyLjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4w''@;'; put 'put ''NywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBh''@;'; put 'put ''dGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAsMS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42''@;'; put 'put ''LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQuMDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAs''@;'; put 'put ''MCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwx''@;'; put 'put ''Ni43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQu''@;'; put 'put ''MDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcu''@;'; put 'put ''MzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCwwLDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0''@;'; put 'put ''aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQyLTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43''@;'; put 'put ''MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhBMS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMzSDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgy''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUg''@;'; put 'put ''Y3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9''@;'; put 'put ''IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVGaWx0ZXIyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2Ex''@;'; put 'put ''LDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZU1vb249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0xLS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQu''@;'; put 'put ''OTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAsMzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwx''@;'; put 'put ''LDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIu''@;'; put 'put ''MDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+Jyks''@;'; put 'put ''Ri5DbHJTaGFwZVN1bj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0x''@;'; put 'put ''OCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4zMiw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5''@;'; put 'put ''LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSwwLTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwx''@;'; put 'put ''LDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAsMmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQx''@;'; put 'put ''YTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywxMGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAs''@;'; put 'put ''MC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAu''@;'; put 'put ''MDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45''@;'; put 'put ''MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAsMCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2''@;'; put 'put ''LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0xLTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYu''@;'; put 'put ''NDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwy''@;'; put 'put ''Ni4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDkuODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTks''@;'; put 'put ''OC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC05IiAvPicpLEYuQ2xyU2hhcGVXYW5kPSgwLG0uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwy''@;'; put 'put ''LjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjhaTTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMt''@;'; put 'put ''NS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywx''@;'; put 'put ''LjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41''@;'; put 'put ''MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSwwLDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAs''@;'; put 'put ''MCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEuMTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wx''@;'; put 'put ''LjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksRi5DbHJTaGFwZUN1cnNvck1vdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVhMSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUu''@;'; put 'put ''ODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFM''@;'; put 'put ''MTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz4nKSxGLkNsclNoYXBlQ2xvbmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIx''@;'; put 'put ''IDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCww''@;'; put 'put ''LDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwz''@;'; put 'put ''MCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRGV0YWlscz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCww''@;'; put 'put ''LDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwx''@;'; put 'put ''LDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLG0u''@;'; put 'put ''Y2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Lz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBj''@;'; put 'put ''eD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVFcmFzZXI9''@;'; put 'put ''KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0''@;'; put 'put ''bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBs''@;'; put 'put ''Ny4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwyOC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCww''@;'; put 'put ''LDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgzLDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgs''@;'; put 'put ''MTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlTGFuZHNjYXBlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wt''@;'; put 'put ''MS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNsMS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0x''@;'; put 'put ''LjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4wNiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0u''@;'; put 'put ''MzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVBhc3RlPSgwLG0uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBIMjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0i''@;'; put 'put ''MiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVQb3J0cmFpdD0oMCxtLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTguOCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgt''@;'; put 'put ''MS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEuMzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1''@;'; put 'put ''LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlVHJlZVZpZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAs''@;'; put 'put ''MS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2Ex''@;'; put 'put ''LDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJI''@;'; put 'put ''NFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi''@;'; put 'put ''IC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAsMC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEs''@;'; put 'put ''MCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksRi5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAs''@;'; put 'put ''MC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2''@;'; put 'put ''LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAsMCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01''@;'; put 'put ''LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIuMzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwx''@;'; put 'put ''LDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJj''@;'; put 'put ''LjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLG0uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4y''@;'; put 'put ''OC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMu''@;'; put 'put ''MTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4yNVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwu''@;'; put 'put ''NDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgxLjh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZh''@;'; put 'put ''MS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVGaWxlWmlw''@;'; put 'put ''PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIwLjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMw''@;'; put 'put ''LDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0x''@;'; put 'put ''My40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5''@;'; put 'put ''YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQs''@;'; put 'put ''MSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45''@;'; put 'put ''LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMtM3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAu''@;'; put 'put ''NCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFIMTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2''@;'; put 'put ''MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRmlsdGVyT2ZmPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJI''@;'; put 'put ''MzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIu''@;'; put 'put ''MSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAuMWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwyMy45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFsOCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVSZWN5Y2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAu''@;'; put 'put ''NS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCwwLjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42''@;'; put 'put ''LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcuNyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwxLjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0''@;'; put 'put ''XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRcdGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43''@;'; put 'put ''LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUuMiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjktMy42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAu''@;'; put 'put ''My0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwyLjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAs''@;'; put 'put ''MC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4x''@;'; put 'put ''Yy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4y''@;'; put 'put ''LDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEu''@;'; put 'put ''OCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEt''@;'; put 'put ''MC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45''@;'; put 'put ''LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwt''@;'; put 'put ''Ni4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRj''@;'; put 'put ''LTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIy''@;'; put 'put ''LjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlVHJlZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0x''@;'; put 'put ''MywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40''@;'; put 'put ''LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQu''@;'; put 'put ''OSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAuOCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcu''@;'; put 'put ''NywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wz''@;'; put 'put ''LjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBk''@;'; put 'put ''PSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRmlzaD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xl''@;'; put 'put ''IGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43''@;'; put 'put ''NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEuOTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZj''@;'; put 'put ''LTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0uMTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBh''@;'; put 'put ''MjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4xMywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkEx''@;'; put 'put ''LDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVGb3JtPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSwwLDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwx''@;'; put 'put ''LDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEsMCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCww''@;'; put 'put ''LDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEyLjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFh''@;'; put 'put ''MSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAsMCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMz''@;'; put 'put ''LjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCwwLDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCww''@;'; put 'put ''LDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlRnVl''@;'; put 'put ''bD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEuMTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcu''@;'; put 'put ''ODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUs''@;'; put 'put ''My41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCww''@;'; put 'put ''LDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEs''@;'; put 'put ''MSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLEYuQ2xyU2hhcGVTbm93Zmxha2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSww''@;'; put 'put ''LDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4wNywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwx''@;'; put 'put ''LDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwzMS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAu''@;'; put 'put ''ODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEs''@;'; put 'put ''MSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwy''@;'; put 'put ''LjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQu''@;'; put 'put ''OCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAs''@;'; put 'put ''MCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4y''@;'; put 'put ''NiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxGLkNsclNo''@;'; put 'put ''YXBlVGFibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAs''@;'; put 'put ''MCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEtMVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45''@;'; put 'put ''NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMzYTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEtLjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCww''@;'; put 'put ''LDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN''@;'; put 'put ''MjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwy''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxGLkNsclNoYXBlQ3Jv''@;'; put 'put ''c3NoYWlycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwx''@;'; put 'put ''LDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuMSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwy''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQs''@;'; put 'put ''MTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJT''@;'; put 'put ''aGFwZURvdENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCww''@;'; put 'put ''LDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVCZXRhPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYx''@;'; put 'put ''LDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdzLS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1''@;'; put 'put ''Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZIMTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4z''@;'; put 'put ''OC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTguMDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcu''@;'; put 'put ''MDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAsMCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgx''@;'; put 'put ''OVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwx''@;'; put 'put ''Ny41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0w''@;'; put 'put ''LjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40''@;'; put 'put ''LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAuNCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjkt''@;'; put 'put ''MC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwxNS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4y''@;'; put 'put ''aC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC00Ii8+XG4nKSxGLkNsclNoYXBlRmlyc3RBaWQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwy''@;'; put 'put ''LDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgx''@;'; put 'put ''Ni43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCww''@;'; put 'put ''LDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQu''@;'; put 'put ''NWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41''@;'; put 'put ''aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxGLkNsclNoYXBlQ29sb3JQYWxldHRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgsMi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSww''@;'; put 'put ''LDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4xLDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEu''@;'; put 'put ''MUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcyLDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAt''@;'; put 'put ''NC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43MiwyLjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgt''@;'; put 'put ''LjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIyLDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYs''@;'; put 'put ''NCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAtLjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4z''@;'; put 'put ''OS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5''@;'; put 'put ''LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44MywwLDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAs''@;'; put 'put ''MCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEuMTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYs''@;'; put 'put ''MS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAsMS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwx''@;'; put 'put ''NS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0uNS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgs''@;'; put 'put ''MSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43''@;'; put 'put ''OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4wNmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwx''@;'; put 'put ''LC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwx''@;'; put 'put ''LjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAsMC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEs''@;'; put 'put ''MCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwyLjg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAs''@;'; put 'put ''MCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUuNTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQu''@;'; put 'put ''MUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMsMzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIz''@;'; put 'put ''LDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAsMSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwy''@;'; put 'put ''LjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwyLjg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4''@;'; put 'put ''LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEt''@;'; put 'put ''Mi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAsMCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIs''@;'; put 'put ''My4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLEYuRXNzZW50aWFsU2hhcGVzPXsiYWRkLXRleHQiOkYuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYi''@;'; put 'put ''OkYuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpGLkNsclNoYXBlUGluYm9hcmQsbmV3OkYuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Ri5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXciOkYuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpGLkNs''@;'; put 'put ''clNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpGLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOkYuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOkYuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Ri5D''@;'; put 'put ''bHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6Ri5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Ri5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpGLkNsclNoYXBlUmVzaXplLG9iamVjdHM6Ri5DbHJTaGFwZU9iamVjdHMsYm9vazpGLkNsclNoYXBlQm9vayxhc3Rlcmlz''@;'; put 'put ''azpGLkNsclNoYXBlQXN0ZXJpc2ssYnVnOkYuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6Ri5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOkYuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6Ri5DbHJTaGFwZVBlbmNpbCxub3RlOkYuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Ri5DbHJTaGFwZVJl''@;'; put 'put ''ZnJlc2gsc3luYzpGLkNsclNoYXBlU3luYywidmlldy1saXN0IjpGLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOkYuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6Ri5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0YnVsYjpGLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOkYuQ2xy''@;'; put 'put ''U2hhcGVEb3dubG9hZCx1cGxvYWQ6Ri5DbHJTaGFwZVVwbG9hZCxsb2NrOkYuQ2xyU2hhcGVMb2NrLHVubG9jazpGLkNsclNoYXBlVW5sb2NrLHVzZXJzOkYuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6Ri5DbHJTaGFwZVBvcE91dCxmaWx0ZXI6Ri5DbHJTaGFwZUZpbHRlcixwaW46Ri5DbHJT''@;'; put 'put ''aGFwZVBpbixmaWxlOkYuQ2xyU2hhcGVGaWxlLHBsdXM6Ri5DbHJTaGFwZVBsdXMsbWludXM6Ri5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOkYuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOkYuQ2xyU2hhcGVQbHVzQ2lyY2xlLGJhbjpGLkNsclNoYXBlQmFuLCJ0aW1l''@;'; put 'put ''cy1jaXJjbGUiOkYuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpGLkNsclNoYXBlVHJhc2gsY2lyY2xlOkYuQ2xyU2hhcGVDaXJjbGUsdGFnOkYuQ2xyU2hhcGVUYWcsdGFnczpGLkNsclNoYXBlVGFncyxoaXN0b3J5OkYuQ2xyU2hhcGVIaXN0b3J5LGNsb2NrOkYuQ2xyU2hhcGVDbG9jaywi''@;'; put 'put ''YWxhcm0tY2xvY2siOkYuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OmxlLkNsclNoYXBlQXJyb3csImNpcmNsZS1hcnJvdyI6Ri5DbHJTaGFwZUNpcmNsZUFycm93LCJjaGlsZC1hcnJvdyI6Ri5DbHJTaGFwZUNoaWxkQXJyb3csY29weTpGLkNsclNoYXBlQ29weSxoZWxwOkYuQ2xyU2hhcGVI''@;'; put 'put ''ZWxwLGxvZ2luOkYuQ2xyU2hhcGVMb2dpbixsb2dvdXQ6Ri5DbHJTaGFwZUxvZ291dCxwcmludGVyOkYuQ2xyU2hhcGVQcmludGVyLHdvcmxkOkYuQ2xyU2hhcGVXb3JsZCxzbGlkZXI6Ri5DbHJTaGFwZVNsaWRlcixjbGlwYm9hcmQ6Ri5DbHJTaGFwZUNsaXBib2FyZCxmaXJld2FsbDpGLkNs''@;'; put 'put ''clNoYXBlRmlyZXdhbGwsbGlzdDpGLkNsclNoYXBlTGlzdCxyZWRvOkYuQ2xyU2hhcGVSZWRvLHVuZG86Ri5DbHJTaGFwZVVuZG8sc2Nyb2xsOkYuQ2xyU2hhcGVTY3JvbGwsImZpbGUtc2V0dGluZ3MiOkYuQ2xyU2hhcGVGaWxlU2V0dGluZ3MsInR3by13YXktYXJyb3dzIjpGLkNsclNoYXBl''@;'; put 'put ''VHdvV2F5QXJyb3dzLHN3aXRjaDpGLkNsclNoYXBlU3dpdGNoLHRvb2xzOkYuQ2xyU2hhcGVUb29scywid2luZG93LWNsb3NlIjpGLkNsclNoYXBlV2luZG93Q2xvc2UsIndpbmRvdy1tYXgiOkYuQ2xyU2hhcGVXaW5kb3dNYXgsIndpbmRvdy1taW4iOkYuQ2xyU2hhcGVXaW5kb3dNaW4sIndp''@;'; put 'put ''bmRvdy1yZXN0b3JlIjpGLkNsclNoYXBlV2luZG93UmVzdG9yZSwiem9vbS1pbiI6Ri5DbHJTaGFwZVpvb21Jbiwiem9vbS1vdXQiOkYuQ2xyU2hhcGVab29tT3V0LGtleTpGLkNsclNoYXBlS2V5LGxpYnJhcnk6Ri5DbHJTaGFwZUxpYnJhcnksYm9sdDpGLkNsclNoYXBlQm9sdCx3cmVuY2g6''@;'; put 'put ''Ri5DbHJTaGFwZVdyZW5jaCxidWxsc2V5ZTpGLkNsclNoYXBlQnVsbHNleWUsdGFyZ2V0OkYuQ2xyU2hhcGVUYXJnZXQsZmxhbWU6Ri5DbHJTaGFwZUZsYW1lLGhvdXJnbGFzczpGLkNsclNoYXBlSG91cmdsYXNzLCJuby1hY2Nlc3MiOkYuQ2xyU2hhcGVOb0FjY2Vzcyxvcmdhbml6YXRpb246''@;'; put 'put ''Ri5DbHJTaGFwZU9yZ2FuaXphdGlvbixiYWxhbmNlOkYuQ2xyU2hhcGVCYWxhbmNlLCJpZC1iYWRnZSI6Ri5DbHJTaGFwZUlkQmFkZ2UscmVwZWF0OkYuQ2xyU2hhcGVSZXBlYXQsImZpbGUtZ3JvdXAiOkYuQ2xyU2hhcGVGaWxlR3JvdXAscGFwZXJjbGlwOkYuQ2xyU2hhcGVQYXBlcmNsaXAs''@;'; put 'put ''c2hyaW5rOkYuQ2xyU2hhcGVTaHJpbmssImFjY2Vzc2liaWxpdHktMSI6Ri5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxLCJhY2Nlc3NpYmlsaXR5LTIiOkYuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Miwic29ydC1ieSI6Ri5DbHJTaGFwZVNvcnRCeSwiY29sbGFwc2UtY2FyZCI6Ri5DbHJTaGFwZUNv''@;'; put 'put ''bGxhcHNlQ2FyZCwiZXhwYW5kLWNhcmQiOkYuQ2xyU2hhcGVFeHBhbmRDYXJkLGJyaWVmY2FzZTpGLkNsclNoYXBlQnJpZWZjYXNlLCJjb2xvci1waWNrZXIiOkYuQ2xyU2hhcGVDb2xvclBpY2tlciwiY29weS10by1jbGlwYm9hcmQiOkYuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQsImZpbHRl''@;'; put 'put ''ci0yIjpGLkNsclNoYXBlRmlsdGVyMiwiZHJhZy1oYW5kbGUiOkYuQ2xyU2hhcGVEcmFnSGFuZGxlLG1vb246Ri5DbHJTaGFwZU1vb24sc3VuOkYuQ2xyU2hhcGVTdW4sd2FuZDpGLkNsclNoYXBlV2FuZCxjbG9uZTpGLkNsclNoYXBlQ2xvbmUsZGV0YWlsczpGLkNsclNoYXBlRGV0YWlscywi''@;'; put 'put ''ZHJhZy1oYW5kbGUtY29ybmVyIjpGLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcixlcmFzZXI6Ri5DbHJTaGFwZUVyYXNlcixsYW5kc2NhcGU6Ri5DbHJTaGFwZUxhbmRzY2FwZSxwYXN0ZTpGLkNsclNoYXBlUGFzdGUscG9ydHJhaXQ6Ri5DbHJTaGFwZVBvcnRyYWl0LCJmaWxlLXppcCI6Ri5D''@;'; put 'put ''bHJTaGFwZUZpbGVaaXAsImZpbHRlci1vZmYiOkYuQ2xyU2hhcGVGaWx0ZXJPZmYscmVjeWNsZTpGLkNsclNoYXBlUmVjeWNsZSx0cmVlOkYuQ2xyU2hhcGVUcmVlLGZpc2g6Ri5DbHJTaGFwZUZpc2gsZm9ybTpGLkNsclNoYXBlRm9ybSxmdWVsOkYuQ2xyU2hhcGVGdWVsLHNub3dmbGFrZTpG''@;'; put 'put ''LkNsclNoYXBlU25vd2ZsYWtlLHRhYmxlOkYuQ2xyU2hhcGVUYWJsZSwiZG90LWNpcmNsZSI6Ri5DbHJTaGFwZURvdENpcmNsZSx2b2x1bWU6Ri5DbHJTaGFwZVZvbHVtZSxjcm9zc2hhaXJzOkYuQ2xyU2hhcGVDcm9zc2hhaXJzLGJldGE6Ri5DbHJTaGFwZUJldGEsImNvbG9yLXBhbGV0dGUi''@;'; put 'put ''OkYuQ2xyU2hhcGVDb2xvclBhbGV0dGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiZWRpdCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5wZW5jaWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsIm5v''@;'; put 'put ''dGUtZWRpdCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5ub3RlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50aWFsU2hhcGVzLCJncm91cCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy51c2VycykpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiZG9jdW1lbnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMuZmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiYWRkIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuRXNzZW50''@;'; put 'put ''aWFsU2hhcGVzLnBsdXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsImNhbmNlbCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5iYW4pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInJlbW92ZSIsKDAs''@;'; put 'put ''eC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlc1sidGltZXMtY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24taW4iLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMubG9naW4pKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24tb3V0IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuRXNzZW50aWFsU2hhcGVzLmxvZ291dCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywibGlnaHRuaW5nIiwoMCx4LmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KEYuRXNzZW50aWFsU2hhcGVzLmJvbHQpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsImZsb3ctY2hhcnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMub3JnYW5pemF0aW9uKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50''@;'; put 'put ''aWFsU2hhcGVzLCJhbGVydCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlc1siYnViYmxlLWV4Y2xhbWF0aW9uIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInBpbm5lZCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlh''@;'; put 'put ''bFNoYXBlcy5waW5ib2FyZCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMs''@;'; put 'put ''ImF0dGFjaG1lbnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMucGFwZXJjbGlwKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50aWFsU2hhcGVzLCJyZXNpemUtZG93biIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5zaHJp''@;'; put 'put ''bmspKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS11cCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5yZXNpemUpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYm''@;'; put 'put ''d2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5Fc3NlbnRpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAg''@;'; put 'put ''ICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlv''@;'; put 'put ''bihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuTWVkaWFTaGFwZXM9Ri5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPUYuQ2xyU2hhcGVNaWNyb3Bob25lPUYuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9Ri5DbHJTaGFw''@;'; put 'put ''ZVJlcGxheU9uZT1GLkNsclNoYXBlUmVwbGF5QWxsPUYuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9Ri5DbHJTaGFwZU11c2ljTm90ZT1GLkNsclNoYXBlRmlsbVN0cmlwPUYuQ2xyU2hhcGVIZWFkcGhvbmVzPUYuQ2xyU2hhcGVWb2x1bWVNdXRlPUYuQ2xyU2hhcGVWb2x1bWVVcD1GLkNsclNoYXBl''@;'; put 'put ''Vm9sdW1lRG93bj1GLkNsclNoYXBlU2h1ZmZsZT1GLkNsclNoYXBlVmlkZW9DYW1lcmE9Ri5DbHJTaGFwZUNhbWVyYT1GLkNsclNoYXBlRmFzdEZvcndhcmQ9Ri5DbHJTaGFwZVJld2luZD1GLkNsclNoYXBlUG93ZXI9Ri5DbHJTaGFwZVN0b3A9Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkPUYuQ2xy''@;'; put 'put ''U2hhcGVQYXVzZT1GLkNsclNoYXBlUGxheT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlUGxheT0oMCx4LmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguMDcsMzEuNkEyLjA3LDIuMDcsMCwwLDEsNiwyOS41M1Y2LjMyQTIuMDcsMi4wNywwLDAsMSw5LDQuNDdMMzIuMjEsMTYuMDhhMi4wNywyLjA3LDAsMCwxLDAsMy43TDksMzEuMzhBMi4wNiwyLjA2LDAs''@;'; put 'put ''MCwxLDguMDcsMzEuNlptMC0yNS4zNEw4LDYuMzJWMjkuNTNsLjEuMDZMMzEuMzEsMThhLjA2LjA2LDAsMCwwLDAtLjA2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxNi4wOCw4Ljk0LDQuNDdBMi4w''@;'; put 'put ''NywyLjA3LDAsMCwwLDYsNi4zMlYyOS41M2EyLjA2LDIuMDYsMCwwLDAsMywxLjg1TDMyLjE2LDE5Ljc3YTIuMDcsMi4wNywwLDAsMCwwLTMuN1oiLz4nKSxGLkNsclNoYXBlUGF1c2U9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xMi45MywzMkg2LjA3QTIuMDcsMi4wNywwLDAsMSw0LDI5LjkzVjYuMDdBMi4wNywyLjA3LDAsMCwxLDYuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwxNSw2LjA3VjI5LjkzQTIuMDcsMi4wNywwLDAsMSwxMi45MywzMlpNMTMsNkg2VjMwaDdaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOS45MywzMkgyMy4wN0EyLjA3LDIuMDcsMCwwLDEsMjEsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsMjMuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwzMiw2LjA3VjI5LjkzQTIu''@;'; put 'put ''MDcsMi4wNywwLDAsMSwyOS45MywzMlpNMzAsNkgyM1YzMGg3WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjAuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+JyksRi5DbHJTaGFwZVN0ZXBGb3J3YXJkPSgwLHguY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNNSwzMi4yM2EyLDIsMCwwLDEtMi0yVjUuNzdBMiwyLDAsMCwxLDYuMTcsNC4xNEwyMy4yMywxNi4zOGEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xNywzMS44NkEyLDIsMCwwLDEsNSwzMi4yM1pNNSw1Ljc3''@;'; put 'put ''VjMwLjIzTDIyLjA3LDE4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzEsMzJIMjhhMiwyLDAsMCwxLTItMlY2YTIsMiwwLDAsMSwyLTJoM2EyLDIsMCwwLDEsMiwyVjMwQTIsMiwwLDAsMSwzMSwzMlpN''@;'; put 'put ''MjgsNlYzMGgzVjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTUsMzEuOWEyLDIsMCwwLDEtMi0yVjUuNDRBMiwyLDAsMCwxLDYuMTIsMy44MUwyMy4xOCwxNmEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xMiwzMS41''@;'; put 'put ''MkEyLDIsMCwwLDEsNSwzMS45WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHg9IjI1Ljk1IiB5PSIzLjY3IiB3aWR0aD0iNyIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksRi5DbHJTaGFwZVN0b3A9KDAseC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMkg2YTIsMiwwLDAsMS0yLTJWNkEyLDIsMCwwLDEsNiw0SDMwYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMwLDMyWk02LDZWMzBIMzBWNloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIzLjk2IiB5PSI0IiB3aWR0aD0iMjcuOTkiIGhlaWdodD0iMjgiIHJ4PSIyIiByeT0iMiIvPicpLEYuQ2xyU2hhcGVQb3dlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSwwLDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4''@;'; put 'put ''LDM0LjE1YTE1LDE1LDAsMCwxLTcuNTItMjgsMSwxLDAsMCwxLDEsMS43MywxMywxMywwLDEsMCwxMywwLDEsMSwwLDEsMSwxLTEuNzMsMTUsMTUsMCwwLDEtNy41MiwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMCwxLTFWNGExLDEsMCwwLDAtMiwwVjIwQTEsMSwwLDAsMCwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCIgZD0iTTMyLjUxLDE1LjRIMzAuNDRhMTMsMTMsMCwxLDEtMTktNy41LDEsMSwwLDAsMC0xLTEuNzNBMTUsMTUsMCwxLDAsMzMsMTkuMTUsMTQuOSwxNC45LDAsMCwwLDMyLjUxLDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwyMWExLDEsMCwwLDEtMS0xVjRhMSwxLDAsMCwxLDIsMFYyMEExLDEsMCwwLDEsMTgsMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNWwtLjMxLDBBMTMsMTMsMCwxLDEsMTEuNDgsNy45YTEsMSwwLDAsMC0xLTEuNzMsMTUsMTUsMCwxLDAsMjEuMzEsNy4xQTcuNDksNy40OSwwLDAsMSwzMCwxMy41''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptLjA2LDE3LjY4YTEuMjgsMS4yOCwwLDAsMS0xLjI5LTEuMjhWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwVjE4LjRBMS4yOCwxLjI4LDAsMCwxLDE4LjA2LDE5LjY4Wk0x''@;'; put 'put ''OCwyNy43OUE5Ljg4LDkuODgsMCwwLDEsMTIuMTcsOS44NWExLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjQsMS40LDAs''@;'; put 'put ''MCwxLDEuOTQtLjI5QTkuODgsOS44OCwwLDAsMSwxOCwyNy43OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtNkE5LjcsOS43LDAsMCwxLDI4LDE3Ljg5YTEw''@;'; put 'put ''LDEwLDAsMSwxLTE1LjgzLTgsMS40LDEuNCwwLDAsMSwxLjk0LjMxLDEuMzcsMS4zNywwLDAsMS0uMzEsMS45Miw3LjE4LDcuMTgsMCwxLDAsMTEuNDMsNS44LDcuMDgsNy4wOCwwLDAsMC0uNDUtMi40OUgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTR2NC40YTEuMjksMS4yOSwwLDAs''@;'; put 'put ''MS0yLjU4LDBWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwdi43MWwzLjc2LTYuNTFBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMy41Ny0uOUE5LjgzLDkuODMsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywx''@;'; put 'put ''LjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjM4LDEuMzgsMCwwLDEsMS41Mi0uNDksNy40NSw3LjQ1LDAsMCwxLS4zLTYuODMsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5''@;'; put 'put ''LjkzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi43Nyw4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBWMTguNGExLjI5LDEuMjksMCwwLDEtMi41OCwwWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlUmV3aW5kPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcuMDksMzEuNThsLTE1LjMyLTEyYTIsMiwwLDAs''@;'; put 'put ''MSwwLTMuMTVsMTUuMzItMTJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTEuNzcsMS43NywwLDAsMSwyMCw2djYuN0wzMC44Myw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzQsNlYzMGEyLDIsMCwwLDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4y''@;'; put 'put ''MkwyMCwyMy4zMVYzMGExLjc3LDEuNzcsMCwwLDEtLjg1LDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWk0zMiwzMGwuMDYtMjRMMTgsMTYuOFY2TDMsMTgsMTgsMzBWMTkuMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xNi45MiwzMS41OCwxLjYsMTkuNTdhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMkExLjkzLDEuOTMsMCwwLDEsMTksNC4yLDEuODksMS44OSwwLDAsMSwyMCw2djYuN0wzMC42Niw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzMuODMsNlYzMGEyLDIsMCww''@;'; put 'put ''LDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMkwyMCwyMy4zMVYzMGExLjg5LDEuODksMCwwLDEtMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMloiLz4nKSxGLkNsclNoYXBlRmFzdEZvcndhcmQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy43NywzMS45MmEyLDIsMCwwLDEtLjg2LS4yQTEuODEsMS44MSwwLDAsMSwxNiwyOS45M3YtNi43TDUuMjQsMzEuNWExLjk0LDEuOTQsMCwwLDEtMi4wNi4yMiwyLDIsMCwwLDEtMS4xMS0xLjc5di0yNEEyLDIsMCwwLDEsMy4xOCw0''@;'; put 'put ''LjEyYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjYxVjUuOTFhMS44MSwxLjgxLDAsMCwxLC45MS0xLjc5QTEuOTMsMS45MywwLDAsMSwxOSw0LjM0bDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVMMTksMzEuNUEyLDIsMCwwLDEsMTcuNzcsMzEuOTJabTAtMTIuOFYyOS45M2wxNS4y''@;'; put 'put ''Ni0xMi0xNS4zMi0xMiwuMDYsMTAuODFMNCw1LjkxdjI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE3LjcxLDMyYTIsMiwwLDAsMS0uODYtLjJBMS43NywxLjc3LDAsMCwxLDE2LDMwdi02LjdMNS4xNywzMS41OGEx''@;'; put 'put ''Ljk0LDEuOTQsMCwwLDEtMi4wNi4yMkEyLDIsMCwwLDEsMiwzMFY2QTIsMiwwLDAsMSwzLjExLDQuMmExLjkzLDEuOTMsMCwwLDEsMi4wNi4yMkwxNiwxMi42OVY2YTEuNzcsMS43NywwLDAsMSwuODUtMS43OSwxLjkzLDEuOTMsMCwwLDEsMi4wNi4yMmwxNS4zMiwxMmEyLDIsMCwwLDEsMCwz''@;'; put 'put ''LjE1bC0xNS4zMiwxMkEyLDIsMCwwLDEsMTcuNzEsMzJaIi8+JyksRi5DbHJTaGFwZUNhbWVyYT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwyLDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCww''@;'; put 'put ''LDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwyMkg0VjEwaDguNjdsMS41NS00aDcuNTZsMS41NSw0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik05LDE5YTksOSwwLDEsMCw5LTlBOSw5LDAsMCwwLDksMTlabTE2LjQsMEE3LjQsNy40LDAsMSwxLDE4LDExLjYsNy40MSw3LjQxLDAsMCwxLDI1LjQsMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuMzcs''@;'; put 'put ''MTIuODNhLjguOCwwLDAsMC0uOC0uOEg2LjE3YS44LjgsMCwwLDAsMCwxLjZoMi40QS44LjgsMCwwLDAsOS4zNywxMi44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzQsMTlhNS41Nyw1LjU3LDAsMCww''@;'; put 'put ''LDMuMjQsNWwuODUtMS4zN2E0LDQsMCwxLDEsNC4xMS02LjYxbC44Ni0xLjM4QTUuNTYsNS41NiwwLDAsMCwxMi4zNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwy''@;'; put 'put ''LDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNi4xNywxMy42M2EuOC44LDAsMCwxLDAtMS42aDIuNGEuOC44LDAsMCwxLDAsMS42''@;'; put 'put ''Wk0xOCwyOGE5LDksMCwxLDEsOS05QTksOSwwLDAsMSwxOCwyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4xMSwxOS4wNmE3LjA3LDcuMDcsMCwwLDAsNC4xMSw2LjQxbDEuMDktMS43NGE1LDUsMCwxLDEsNS4y''@;'; put 'put ''Mi04LjM5bDEuMDktMS43NmE3LjA2LDcuMDYsMCwwLDAtMTEuNTEsNS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlVmlkZW9DYW1lcmE9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zNCwxMC4zNGEyLjExLDIuMTEsMCwwLDAtMS4xNi0xLjksMiwyLDAsMCwwLTIuMTMuMTVMMjYsMTEuNlY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjRhMiwyLDAsMCwwLDItMlYyNC40bDQuNjQsM2EyLjA3LDIuMDcs''@;'; put 'put ''MCwwLDAsMi4yLjJBMi4xMSwyLjExLDAsMCwwLDM0LDI1LjY2Wk0zMS45MywyNS43N2MtLjA2LDAtLjExLDAtLjE5LS4wNkwyNCwyMC43N1YyOEg2YTIsMiwwLDAsMS0yLTJWMTBBMiwyLDAsMCwxLDYsOEgyNHY3LjIzbDcuOC01YS4xMS4xMSwwLDAsMSwuMTMsMCwuMTEuMTEsMCwwLDEsLjA3''@;'; put 'put ''LjExVjI1LjY2QS4xMS4xMSwwLDAsMSwzMS45MywyNS43N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zLDkuMzUsMjYsMTIuOVY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0''@;'; put 'put ''LDRIMjRhMiwyLDAsMCwwLDItMlYyMy4wOGw2LjMsMy41NUExLjEsMS4xLDAsMCwwLDM0LDI1Ljc3VjEwLjJBMS4xLDEuMSwwLDAsMCwzMi4zLDkuMzVaIi8+JyksRi5DbHJTaGFwZVNodWZmbGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0yMS42MSwxMWg4LjYybC0zLjMsMy4zYTEsMSwwLDEsMCwxLjQxLDEuNDJMMzQsMTAuMDhsLS43MS0uNzFoMEwyOC4zNCw0LjQzYTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTEsOUgyMWExLDEsMCwwLDAtLjg2LjVMMTcuNSwxNC4wOWwxLjE2LDJaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTExLjA3LDI1LjA3SDNhMSwxLDAsMCwwLDAsMmg4LjY1YTEsMSwwLDAsMCwuODYtLjVMMTUuMTgsMjIsMTQsMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI4LjM0LDIwLjE3YTEsMSwwLDAsMC0xLjQxLDEuNDJsMy41LDMuNUgyMS42MUwxMi41MSw5LjUzYTEsMSwwLDAsMC0uODYtLjVIM2ExLDEsMCwxLDAsMCwyaDguMDdsOS4xLDE1LjU1YTEsMSwwLDAsMCwuODYuNUgyOS45bC0zLDNhMSwx''@;'; put 'put ''LDAsMCwwLDEuNDEsMS40Mmw0Ljk1LTQuOTRoMGwuNzEtLjcxWiIvPicpLEYuQ2xyU2hhcGVWb2x1bWVEb3duPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1''@;'; put 'put ''LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwz''@;'; put 'put ''MmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy40MUEyLDIsMCwwLDEsMjAsNlYzMGEyLDIsMCwwLDEtMS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4yOEwxOCwz''@;'; put 'put ''MFY2bC03LjY1LDcuNjhhMSwxLDAsMCwxLS43MS4zWk0xOCw2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjExYTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSww''@;'; put 'put ''LDEsMSwxLTEuNzNBOC4yMSw4LjIxLDAsMCwxLDIzLjk0LDI1LDEsMSwwLDAsMSwyMy40MSwyNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOC4zNCwzLjg3LDksMTJIM2ExLDEsMCwwLDAtMSwxVjIzYTEsMSww''@;'; put 'put ''LDAsMCwxLDFIOC44M2w5LjUxLDguM0ExLDEsMCwwLDAsMjAsMzEuNTVWNC42MkExLDEsMCwwLDAsMTguMzQsMy44N1oiLz4nKSxGLkNsclNoYXBlVm9sdW1lVXA9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0y''@;'; put 'put ''My40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzMi4wNmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy4zOUEyLDIsMCwwLDEsMjAsNnYyNGEyLDIsMCwwLDEt''@;'; put 'put ''MS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMi4wNlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4zTDE4LDMwLjA2VjZMMTAuMzUsMTMuN2ExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBk''@;'; put 'put ''PSJNMjMuNDEsMjUuMjVhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43Myw4LjIxLDguMjEsMCwwLDEsLjI0LDE0LjA2QTEsMSwwLDAsMSwyMy40MSwyNS4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LjMzLDQsOS4wNywxMmgtNmExLDEsMCwwLDAtMSwxdjkuOTJhMSwxLDAsMCwwLDEsMUg4Ljg4bDkuNDYsOC4yNEExLDEsMCwwLDAsMjAsMzEuNDNWNC43MkExLDEsMCwwLDAsMTguMzMsNFoiLz4nKSxG''@;'; put 'put ''LkNsclNoYXBlVm9sdW1lTXV0ZT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMuNjEsNi40MSw5LjE5LDEySDRhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJIOS4xNGw3LjQxLDcuNDdBMiwyLDAsMCww''@;'; put 'put ''LDE4LDMyYTIsMiwwLDAsMCwuNzYtLjE1QTIsMiwwLDAsMCwyMCwzMFYyMi43N2w1Ljg5LDUuODljLS4yNS4xNS0uNDkuMjktLjc1LjQyYTEsMSwwLDAsMCwuOSwxLjc5LDE0LjQsMTQuNCwwLDAsMCwxLjMxLS43NWwyLjI4LDIuMjhMMzEsMzEsNSw1Wk0xOCwzMGwtNy43My03Ljc3QTEsMSww''@;'; put 'put ''LDAsMCw5LjU2LDIySDRWMTRIOS42NGExLDEsMCwwLDAsLjcxLS4zbC4yNi0uMjZMMTgsMjAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0Ljg5LDYuNjlBMTIuNDIsMTIuNDIsMCwwLDEsMjksMjYuMWwx''@;'; put 'put ''LjQyLDEuNDJBMTQuNDIsMTQuNDIsMCwwLDAsMjUuNzYsNC44OGExLDEsMCwxLDAtLjg3LDEuOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4x''@;'; put 'put ''Nyw2LjE3LDAsMCwxLTEuMjQsMy43MUwyNiwyMy4xM0E4LjE1LDguMTUsMCwwLDAsMjcuOCwxOGE4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBk''@;'; put 'put ''PSJNMTgsNnY5LjE1bDIsMlY2YTIsMiwwLDAsMC0zLjQyLTEuNDFMMTIsOS4xN2wxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjQuODcsNi42OUExMi40MiwxMi40MiwwLDAsMSwyOC43NSwyNi4zbDEu''@;'; put 'put ''NDIsMS40MkExNC40MywxNC40MywwLDAsMCwyNS43NCw0Ljg4YTEsMSwwLDAsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI3LjMsMjcuNjdoMGwtMy44NC0zLjg0LS41Ny0uNTdoMEw0LjYzLDUsMy4y''@;'; put 'put ''MSw2LjQxLDguOCwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVYyMy4ybDUuNTksNS41OWMtLjE3LjEtLjM0LjItLjUxLjI5YTEsMSwwLDAsMCwuOSwxLjc5Yy4zNy0uMTkuNzItLjQsMS4wOC0uNjJsMi4xNCwyLjE0''@;'; put 'put ''TDMwLjYxLDMxbC0zLjI1LTMuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4xNyw2LjE3LDAsMCwxLTEuNDIsMy45MmwxLjQyLDEuNDJhOC4xNiw4''@;'; put 'put ''LjE2LDAsMCwwLDItNS4zNCw4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yMCw0LjYyYTEsMSwwLDAsMC0xLjY2LS43NWwtNi40Miw1LjZMMjAs''@;'; put 'put ''MTcuNTRaIi8+JyksRi5DbHJTaGFwZUhlYWRwaG9uZXM9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg5LjJBMi43NCwyLjc0LDAsMCwwLDEyLDI4LjMz''@;'; put 'put ''VjIxLjY3QTIuNzQsMi43NCwwLDAsMCw5LjIsMTlINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYxOUgyNi44QTIuNzQsMi43NCwwLDAsMCwyNCwyMS42N3Y2LjY3QTIuNzQsMi43NCwwLDAsMCwyNi44LDMxSDMyVjE3LjVBMTQuMjcsMTQu''@;'; put 'put ''MjcsMCwwLDAsMTgsM1pNOS4yLDIxYS43NS43NSwwLDAsMSwuOC42N3Y2LjY3YS43NS43NSwwLDAsMS0uOC42N0g2VjIxWk0yNiwyOC4zM1YyMS42N2EuNzUuNzUsMCwwLDEsLjgtLjY3SDMwdjhIMjYuOEEuNzUuNzUsMCwwLDEsMjYsMjguMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsM0ExNC4yNywxNC4yNywwLDAsMCw0LDE3LjVWMzFIOC4yQTEuNzQsMS43NCwwLDAsMCwxMCwyOS4zM1YyMi42N0ExLjc0LDEuNzQsMCwwLDAsOC4yLDIxSDZWMTcuNUExMi4yNywxMi4yNywwLDAsMSwxOCw1LDEyLjI3''@;'; put 'put ''LDEyLjI3LDAsMCwxLDMwLDE3LjVWMjFIMjcuOEExLjc0LDEuNzQsMCwwLDAsMjYsMjIuNjd2Ni42N0ExLjc0LDEuNzQsMCwwLDAsMjcuOCwzMUgzMlYxNy41QTE0LjI3LDE0LjI3LDAsMCwwLDE4LDNaIi8+JyksRi5DbHJTaGFwZUZpbG1TdHJpcD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wm0wLDI2SDZWNkgzMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTQuNiwyMy4wN2ExLjI5LDEuMjksMCwwLDAsMS4yNC4wOWw4LjczLTRhMS4zLDEuMywwLDAsMCwwLTIuMzdoMGwtOC43My00QTEuMywxLjMsMCwwLDAsMTQsMTR2OEExLjI5LDEuMjksMCwwLDAsMTQuNiwyMy4wN1ptMS04LjZM''@;'; put 'put ''MjMuMzEsMTgsMTUuNiwyMS41MVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI4IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNCIgeD0iMTQiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyMCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjI2IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iOCIgeT0iMjYiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIxNCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC05IiB4PSIyMCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTIwLDdoMnYzSDIwWk0xNCw3aDJ2M0gxNFpNMTAsMjlIOFYyNmgyWm0wLTE5''@;'; put 'put ''SDhWN2gyWm02LDE5SDE0VjI2aDJabTYsMEgyMFYyNmgyWm0zLjE2LTEwLjE2TDE1LjM5LDIzLjJBMSwxLDAsMCwxLDE0LDIyLjI4VjEzLjU3YTEsMSwwLDAsMSwxLjQxLS45MUwyNS4xNiwxN0ExLDEsMCwwLDEsMjUuMTYsMTguODRaTTI4LDI5SDI2VjI2aDJabTAtMTlIMjZWN2gyWiIvPicp''@;'; put 'put ''LEYuQ2xyU2hhcGVNdXNpY05vdGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMzRhNS44OSw1''@;'; put 'put ''Ljg5LDAsMCwwLS44Mi0uNTYsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxQzcuNTcsMjIuNyw0LjkyLDI2LjUsNS43OCwyOS44NGE1LjMzLDUuMzMsMCwwLDAsMi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41N2MzLjY3LTEuMTgsNi4xNy00''@;'; put 'put ''LjMzLDYuMDYtNy4zNlY5LjM0YTI5LjE0LDI5LjE0LDAsMCwxLDYuNTUsMS40MywxLDEsMCwxLDAsLjcyLTEuODdBMzEuMzcsMzEuMzcsMCwwLDAsMjEsNy4zM1Y0LjE3YzMuMzMuMzYsOCwxLjM4LDguOTIsMywyLDMuNDEtMi4zMyw3LjM2LTIuMzcsNy40YTEsMSwwLDAsMCwxLjMzLDEuNDlD''@;'; put 'put ''MjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2Wk0xNC4zNSwzMS42N2E2LjQzLDYuNDMsMCwwLDEtNS0uMjYsMy4zMSwzLjMxLDAsMCwxLTEuNjktMi4wN2MtLjYtMi4zMywxLjQ1LTUuMDUsNC41OC02LjA2YTcuNTIsNy41MiwwLDAsMSwyLjMtLjM3LDUuNTIsNS41MiwwLDAsMSwyLjY1''@;'; put 'put ''LjYyLDMuMzEsMy4zMSwwLDAsMSwxLjY5LDIuMDdDMTkuNTQsMjcuOTQsMTcuNDksMzAuNjYsMTQuMzUsMzEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAgICAgICAgICAgIGQ9Ik0zMS42OCw2LjE2Yy0xLjky''@;'; put 'put ''LTMuMy0xMC42LTQtMTEuNTgtNC4wOUwxOSwyVjIyLjI5YTUuODgsNS44OCwwLDAsMC0uODEtLjU1LDguMzMsOC4zMywwLDAsMC02LjUzLS40MWMtNC4xMiwxLjMzLTYuNzcsNS4xMy01LjkxLDguNDdhNS4zMyw1LjMzLDAsMCwwLDIuNjYsMy4zMiw3LjQ4LDcuNDgsMCwwLDAsMy42MS44OEE5''@;'; put 'put ''LjU0LDkuNTQsMCwwLDAsMTUsMzMuNTJjMy43LTEuMTksNi4yLTQuMzcsNi4wNi03LjQyLDAsMCwwLDAsMCwwVjguNDljMSwuMTIsMi4zNy4zMywzLjgyLjY0YTExLjE3LDExLjE3LDAsMCwxLDQuMDYsMS40NmMxLC42Ni4zOCwxLjkuMzMsMmExMS44LDExLjgsMCwwLDEtMS42NiwyLDEsMSww''@;'; put 'put ''LDAsMCwxLjMzLDEuNDlDMjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2WiIvPicpLEYuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMu''@;'; put 'put ''ODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMzIsMzBINFYxMkgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik04LjU2LDE5LjQ1YTMsMywwLDEsMC0zLTNB''@;'; put 'put ''MywzLDAsMCwwLDguNTYsMTkuNDVabTAtNC42QTEuNiwxLjYsMCwxLDEsNywxNi40NSwxLjYsMS42LDAsMCwxLDguNTYsMTQuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy45LDI4bDYtNiwzLjE4LDMuMThMMTQuMjYsMjhoMmw3''@;'; put 'put ''LjQ2LTcuNDZMMzAsMjYuNzd2LTJMMjQuMiwxOWEuNzEuNzEsMCwwLDAtMSwwbC01LjE2LDUuMTZMMTQuMzcsMjAuNWEuNzEuNzEsMCwwLDAtMSwwTDUuOTIsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSww''@;'; put 'put ''LDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwx''@;'; put 'put ''LDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwz''@;'; put 'put ''MC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTguNTYsMTMuNDVhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC41NiwxMy40NVpNMzAsMjhoLTI0bDcuNDYtNy40N2EuNzEuNzEsMCwwLDEsMSwwbDMuNjgsMy42OEwyMy4yMSwxOWEuNzEuNzEsMCwwLDEsMSwwTDMwLDI0Ljc5''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlUmVwbGF5QWxsPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy40NiwyNi4yMmExLjQsMS40LDAsMCwwLDEtLjQybDUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAsLjQyLTEsMS40Niwx''@;'; put 'put ''LjQ2LDAsMCwwLS40Mi0xbC01LjU5LTUuNTZhMS40MywxLjQzLDAsMCwwLTIuNDQsMVYyNC43OWExLjQxLDEuNDEsMCwwLDAsLjg4LDEuMzJBMS41NCwxLjU0LDAsMCwwLDE3LjQ2LDI2LjIyWm0uMTYtMTIuMTYsNS4xOSw1LjE2LTUuMTksNS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEuNDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEu''@;'; put 'put ''NzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVJlcGxheU9uZT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTks''@;'; put 'put ''MjcuMjdhMSwxLDAsMCwwLDEtMVYxNGExLDEsMCwwLDAtMS0xSDE5YTMuOCwzLjgsMCwwLDAtMS4xLjIzbC0yLC42MmEuOTIuOTIsMCwwLDAtLjcyLjg2Ljg4Ljg4LDAsMCwwLC44OC44NiwxLjQ2LDEuNDYsMCwwLDAsLjQzLS4wOEwxOCwxNS4wN3YxMS4yQTEsMSwwLDAsMCwxOSwyNy4yN1oi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEu''@;'; put 'put ''NDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEuNzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVZpZGVvR2FsbGVyeT0oMCx4''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEy''@;'; put 'put ''SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTIuODIsMjYuNzlhMS43NCwxLjc0LDAsMCwwLC45My4yOCwxLjY4LDEuNjgsMCwwLDAsLjY5LS4x''@;'; put 'put ''NWw5Ljc3LTQuMzZhMS42OSwxLjY5LDAsMCwwLDAtMy4xTDE0LjQ0LDE1LjFhMS43LDEuNywwLDAsMC0yLjM5LDEuNTV2OC43MkExLjcsMS43LDAsMCwwLDEyLjgyLDI2Ljc5Wm0uNjMtMTAuMTRhLjI5LjI5LDAsMCwxLC4xNC0uMjUuMy4zLDAsMCwxLC4xNiwwLC4yNy4yNywwLDAsMSwuMTIs''@;'; put 'put ''MGw5Ljc3LDQuMzVhLjI5LjI5LDAsMCwxLC4xOC4yOC4yOC4yOCwwLDAsMS0uMTguMjdsLTkuNzcsNC4zNmEuMjguMjgsMCwwLDEtLjI4LDAsLjMxLjMxLDAsMCwxLS4xNC0uMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIs''@;'; put 'put ''MTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0yNC4xOCwyMS44M2wtOS43Nyw0LjM2QTEsMSwwLDAsMSwxMywyNS4y''@;'; put 'put ''OFYxNi41NmExLDEsMCwwLDEsMS40MS0uOTFMMjQuMTgsMjBBMSwxLDAsMCwxLDI0LjE4LDIxLjgzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlTWljcm9waG9uZT0o''@;'; put 'put ''MCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IE0xMyw5YzAtMi44LDIuMi01LDUtNXM1LDIuMiw1LDV2OFxuXHRcdGMwLDIuOC0yLjIsNS01LDVzLTUtMi4y''@;'; put 'put ''LTUtNVY5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsNS41LTQuNSwxMC0xMCwxMFM4LDIyLjUsOCwxN0g2YzAsNi4zLDQuOCwxMS40LDExLDExLjlWMzJoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMw''@;'; put 'put ''LjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtMy4xQzI1LjIsMjguNCwzMCwyMy4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDI0YzMuOSwwLDctMy4xLDctN1Y5YzAtMy45LTMuMS03LTctN3MtNywz''@;'; put 'put ''LjEtNyw3djhDMTEsMjAuOSwxNC4xLDI0LDE4LDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSww''@;'; put 'put ''LjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZT0oMCx4LmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsNGMyLjgsMCw1LDIuMiw1LDV2OGMwLDAu''@;'; put 'put ''NC0wLjEsMC44LTAuMiwxLjJsMS42LDEuNmMwLjQtMC45LDAuNi0xLjgsMC42LTIuOFY5YzAtMy45LTMuMi03LTcuMS02Ljlcblx0XHRjLTIuOSwwLTUuNiwxLjktNi41LDQuN0wxMyw4LjNDMTMuNSw1LjksMTUuNiw0LjIsMTgsNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40LDAuMi05LjgtNC4xLTEw''@;'; put 'put ''LTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnogTTEzLjgsMTkuN0MxMy4z''@;'; put 'put ''LDE4LjksMTMsMTgsMTMsMTd2LTIuNmw3LjEsNy4xQzE3LjksMjIuNSwxNS4yLDIxLjgsMTMuOCwxOS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsMS44LTAuNSwzLjUtMS40LDVsMS41LDEuNUMyOS4zLDIxLjUs''@;'; put 'put ''MjkuOSwxOS4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUsMTdWOWMwLTMuOS0zLjItNy03LjEtNi45Yy0yLjksMC01LjYsMS45LTYuNSw0LjdsMTMsMTNDMjQuOCwxOC45LDI1LDE3LjksMjUsMTd6IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40''@;'; put 'put ''LDAuMi05LjgtNC4xLTEwLTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5NZWRpYVNoYXBlcz17cGxheTpGLkNsclNoYXBlUGxheSxwYXVzZTpGLkNsclNoYXBlUGF1c2UsInN0ZXAtZm9yd2FyZCI6Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkLHN0b3A6Ri5DbHJTaGFwZVN0b3AscG93ZXI6''@;'; put 'put ''Ri5DbHJTaGFwZVBvd2VyLHJld2luZDpGLkNsclNoYXBlUmV3aW5kLCJmYXN0LWZvcndhcmQiOkYuQ2xyU2hhcGVGYXN0Rm9yd2FyZCxjYW1lcmE6Ri5DbHJTaGFwZUNhbWVyYSwidmlkZW8tY2FtZXJhIjpGLkNsclNoYXBlVmlkZW9DYW1lcmEsc2h1ZmZsZTpGLkNsclNoYXBlU2h1ZmZsZSwi''@;'; put 'put ''dm9sdW1lLXVwIjpGLkNsclNoYXBlVm9sdW1lVXAsInZvbHVtZS1kb3duIjpGLkNsclNoYXBlVm9sdW1lRG93biwidm9sdW1lLW11dGUiOkYuQ2xyU2hhcGVWb2x1bWVNdXRlLGhlYWRwaG9uZXM6Ri5DbHJTaGFwZUhlYWRwaG9uZXMsImZpbG0tc3RyaXAiOkYuQ2xyU2hhcGVGaWxtU3RyaXAs''@;'; put 'put ''Im11c2ljLW5vdGUiOkYuQ2xyU2hhcGVNdXNpY05vdGUsImltYWdlLWdhbGxlcnkiOkYuQ2xyU2hhcGVJbWFnZUdhbGxlcnksInJlcGxheS1hbGwiOkYuQ2xyU2hhcGVSZXBsYXlBbGwsInJlcGxheS1vbmUiOkYuQ2xyU2hhcGVSZXBsYXlPbmUsInZpZGVvLWdhbGxlcnkiOkYuQ2xyU2hhcGVW''@;'; put 'put ''aWRlb0dhbGxlcnksbWljcm9waG9uZTpGLkNsclNoYXBlTWljcm9waG9uZSwibWljcm9waG9uZS1tdXRlIjpGLkNsclNoYXBlTWljcm9waG9uZU11dGV9LHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25z''@;'; put 'put ''LmFkZChGLk1lZGlhU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNv''@;'; put 'put ''bnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Tb2NpYWxTaGFwZXM9Ri5DbHJTaGFwZUhhc2h0YWc9Ri5DbHJTaGFwZUNyb3duPUYuQ2xyU2hhcGVUaHVtYnNEb3duPUYuQ2xyU2hhcGVUaHVtYnNVcD1GLkNsclNoYXBlU2FkRmFjZT1GLkNs''@;'; put 'put ''clNoYXBlTmV1dHJhbEZhY2U9Ri5DbHJTaGFwZUhhcHB5RmFjZT1GLkNsclNoYXBlUGljdHVyZT1GLkNsclNoYXBlQ2hhdEJ1YmJsZT1GLkNsclNoYXBlVGFsa0J1YmJsZXM9Ri5DbHJTaGFwZUhlYXJ0QnJva2VuPUYuQ2xyU2hhcGVIZWFydD1GLkNsclNoYXBlSW5ib3g9Ri5DbHJTaGFwZUZs''@;'; put 'put ''YWc9Ri5DbHJTaGFwZVRhc2tzPUYuQ2xyU2hhcGVFbnZlbG9wZT1GLkNsclNoYXBlQm9va21hcms9Ri5DbHJTaGFwZUhhbGZTdGFyPUYuQ2xyU2hhcGVTdGFyPUYuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9q''@;'; put 'put ''ZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWFlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIiksbGU9YWUoCi8qISAuL2NvcmUtc2hhcGVzICovCiIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKTtGLkNsclNoYXBlU2hhcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQs''@;'; put 'put ''MTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVptMC0yMGEzLDMsMCwxLDEtMywzQTMs''@;'; put 'put ''MywwLDAsMSwyNy41Myw0Wk03LDIxYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDcsMjFaTTI3LjUzLDMyYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDI3LjUzLDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0y''@;'; put 'put ''Ny41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1''@;'; put 'put ''LDAsMSwwLDUtNVoiLz4nKSxGLkNsclNoYXBlU3Rhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE5LDM0YTIuMjIsMi4yMiwwLDAsMS0xLjI0LS4zOGwtNy40Ni01YS4yMi4yMiwwLDAsMC0uMjUsMGwt''@;'; put 'put ''Ny40Niw1QTIuMjIsMi4yMiwwLDAsMSw3LjQsMzEuMjFsMi40NS04LjY0YS4yMy4yMywwLDAsMC0uMDgtLjI0TDIuNzEsMTYuNzhhMi4yMiwyLjIyLDAsMCwxLDEuMjktNGw5LS4zNGEuMjMuMjMsMCwwLDAsLjItLjE1bDMuMS04LjQzYTIuMjIsMi4yMiwwLDAsMSw0LjE3LDBsMy4xLDguNDNh''@;'; put 'put ''LjIzLjIzLDAsMCwwLC4yLjE1bDksLjM0YTIuMjIsMi4yMiwwLDAsMSwxLjI5LDRMMjcsMjIuMzNhLjIyLjIyLDAsMCwwLS4wOC4yNGwyLjQ1LDguNjRBMi4yMywyLjIzLDAsMCwxLDI3LjE5LDM0Wm0tOC44Mi03LjQyQTIuMjEsMi4yMSwwLDAsMSwxOS42LDI3bDcuNDYsNWEuMjIuMjIsMCww''@;'; put 'put ''LDAsLjM0LS4yNWwtMi40NS04LjY0YTIuMjEsMi4yMSwwLDAsMSwuNzctMi4zNWw3LjA2LTUuNTVhLjIyLjIyLDAsMCwwLS4xMy0uNGwtOS0uMzRhMi4yMiwyLjIyLDAsMCwxLTItMS40NmwtMy4xLTguNDNhLjIyLjIyLDAsMCwwLS40MiwwTDE1LjA2LDEzYTIuMjIsMi4yMiwwLDAsMS0yLDEu''@;'; put 'put ''NDZsLTksLjM0YS4yMi4yMiwwLDAsMC0uMTMuNEwxMSwyMC43NmEyLjIyLDIuMjIsMCwwLDEsLjc3LDIuMzVMOS4zMywzMS43NWEuMjEuMjEsMCwwLDAsLjA4LjI0LjIuMiwwLDAsMCwuMjYsMGw3LjQ2LTVBMi4yMiwyLjIyLDAsMCwxLDE4LjM2LDI2LjYyWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEt''@;'; put 'put ''LjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIs''@;'; put 'put ''MCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0WiIvPicpLEYuQ2xyU2hhcGVIYWxmU3Rhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAs''@;'; put 'put ''MC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIyLjIyLDAsMCwxLC4wOC4yNEw3LjM1LDMx''@;'; put 'put ''LjIxQTIuMjMsMi4yMywwLDAsMCw5LjQ5LDM0YTIuMjIsMi4yMiwwLDAsMCwxLjI0LS4zOGw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIyLDIuMjIsMCwwLDAsMy4zOC0yLjQ1bC0yLjQ1LTguNjRhLjIzLjIzLDAsMCwxLC4wOC0uMjRaTTE4LjMzLDI2LjYyaDBhMi4yMSwy''@;'; put 'put ''LjIxLDAsMCwwLTEuMjQuMzhMOS42MiwzMmEuMjIuMjIsMCwwLDEtLjM0LS4yNWwyLjQ1LTguNjRBMi4yMSwyLjIxLDAsMCwwLDExLDIwLjc2TDMuOSwxNS4yMWEuMjIuMjIsMCwwLDEsLjEzLS40bDktLjM0QTIuMjIsMi4yMiwwLDAsMCwxNSwxM2wzLjEtOC40M2EuMi4yLDAsMCwxLC4yMS0u''@;'; put 'put ''MTVoMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcs''@;'; put 'put ''MGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjMuMjMsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFhMi4yMiwyLjIyLDAsMCwwLDMuMzgsMi40NWw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIs''@;'; put 'put ''Mi4yLDAsMCwwLDIuNTUsMCwyLjIsMi4yLDAsMCwwLC44My0yLjRsLTIuNDUtOC42NGEuMjIuMjIsMCwwLDEsLjA4LS4yNFpNMjQuOSwyMy4xMWwyLjQ1LDguNjRBLjIyLjIyLDAsMCwxLDI3LDMybC03LjQ2LTVhMi4yMSwyLjIxLDAsMCwwLTEuMjQtLjM4aDBWNC40NGgwYS4yLjIsMCwwLDEs''@;'; put 'put ''LjIxLjE1TDIxLjYyLDEzYTIuMjIsMi4yMiwwLDAsMCwyLDEuNDZsOSwuMzRhLjIyLjIyLDAsMCwxLC4xMy40bC03LjA2LDUuNTVBMi4yMSwyLjIxLDAsMCwwLDI0LjksMjMuMTFaIi8+JyksRi5DbHJTaGFwZUJvb2ttYXJrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMzRhMiwyLDAsMCwxLTEuNDEtLjU4TDE4LDI2LjgybC02LjU0LDYuNTJBMiwyLDAsMCwxLDgsMzEuOTNWNGEyLDIsMCwwLDEsMi0ySDI2YTIsMiwwLDAsMSwyLDJWMzJhMiwyLDAsMCwxLTIsMlptMC0yaDBWNEgxMFYzMS45M0wx''@;'; put 'put ''OCwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMkgxMEEyLDIsMCwwLDAsOCw0VjMxLjkzYTIsMiwwLDAsMCwzLjQyLDEuNDFsNi41NC02LjUyLDYuNjMsNi42QTIsMiwwLDAsMCwyOCwzMlY0QTIsMiww''@;'; put 'put ''LDAsMCwyNiwyWiIvPicpLEYuQ2xyU2hhcGVFbnZlbG9wZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIs''@;'; put 'put ''MiwwLDAsMCwzMiw2Wk0zMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBMMzIsOS4yMXYxNy41bC03LjM2LTcuMzYtMS40MSwxLjQxWk01LjMxLDhIMzAuMzhMMTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMDhWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEy''@;'; put 'put ''LDIsMCwwLDAsMi44MiwwbDguODMtOC43OGE3LjQ0LDcuNDQsMCwwLDEtMi0uODVsLTguMjYsOC4yMUw1LjMxLDhIMjIuODFhNy40OSw3LjQ5LDAsMCwxLS4zMS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMkE3LjQ1LDcuNDUsMCwwLDEs''@;'; put 'put ''MzIsMTMuMDhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuODYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjI2SDMyVjI2LjcxbC03LjM2LTcuMzYtMS40MSwxLjQxTDMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCww''@;'; put 'put ''LDIuODIsMGw2LjY2LTYuNjNIMjMuMDhsLTUuMjQsNS4yMUw1LjMxLDhIMjAuMDZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zMyw2YTIsMiwwLDAsMC0uNDEsMGgtMjhhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODEsNy4zOSwxOS4yNSwyMS44OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzMuODEsNy4zOVpNNS4zLDI4SDMuOTFWMjYuNTdsNy4y''@;'; put 'put ''Ny03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNiwxMi4zNEE3LjQ5LDcu''@;'; put 'put ''NDksMCwwLDEsMjIuNSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI5''@;'; put 'put ''bC04LjcxLDguNjhhMiwyLDAsMCwxLTIuODIsMEwyLDcuNWEyLDIsMCwwLDAtLjA3LjVWMjhhMiwyLDAsMCwwLDIsMmgyOGEyLDIsMCwwLDAsMi0yVjEyLjM5QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMw''@;'; put 'put ''LjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjUuNzdsLTYuNTIsNi40OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTUuMzhaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yMi45NCwxNS40aC0uN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksRi5DbHJT''@;'; put 'put ''aGFwZVRhc2tzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMjksMzRINi43MUExLjcsMS43LDAsMCwxLDUsMzIuMzFWNi42OUExLjc1LDEuNzUsMCwwLDEsNyw1SDlWN0g3VjMySDI5VjdIMjdWNWgyLjI1''@;'; put 'put ''QTEuNywxLjcsMCwwLDEsMzEsNi42OVYzMi4zMUExLjcsMS43LDAsMCwxLDI5LjI5LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuNjYsMjUuNzYsMTEuMywyMC40QTEsMSwwLDAsMSwxMi43Miwx''@;'; put 'put ''OWwzLjk0LDMuOTQsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNiwxMUgxMFY3LjMzQTIuMzQsMi4zNCwwLDAsMSwxMi4zMyw1aDEuNzlhNCw0LDAs''@;'; put 'put ''MCwxLDcuNzUsMGgxLjc5QTIuMzQsMi4zNCwwLDAsMSwyNiw3LjMzWk0xMiw5SDI0VjcuMzNBLjMzLjMzLDAsMCwwLDIzLjY3LDdIMjBWNmEyLDIsMCwwLDAtNCwwVjdIMTIuMzNhLjMzLjMzLDAsMCwwLS4zMy4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LDkuODksMTkuNTYsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aC43MWwxLjE2LTJhNCw0LDAsMCwwLTcuNzQsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAs''@;'; put 'put ''MTAsNy4zM1YxMWg4LjY0QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjQuMTksMTUuNGwtNy41Myw3LjUzTDEyLjcyLDE5QTEs''@;'; put 'put ''MSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMCwuMi0uMzFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNS40VjMySDdWN0g5''@;'; put 'put ''VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMi43MiwxOUExLDEsMCwwLDAsMTEuMywyMC40bDUuMzYsNS4zNkwyNi43MSwxNS43MWExLDEsMCwwLDAtMS40MS0xLjQxbC04LjY0LDguNjRaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIs''@;'; put 'put ''Ny41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIzLjEzLDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCwwLDEtMS0uMDdWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAs''@;'; put 'put ''MCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjkuMjksNC45NWgtNy4yYTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWNi42NEEx''@;'; put 'put ''LjcsMS43LDAsMCwwLDI5LjI5LDQuOTVabS0xOCwzYTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gzLjQ0YTEsMSwwLDAsMSwxLDFWOS44SDExLjI1Wm0xNC41Miw5LjIzLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwz''@;'; put 'put ''LjI2LDcuMTQtNy4xNGExLjQsMS40LDAsMSwxLDIsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjUuODgsMTUuNGExLjM4LDEuMzgsMCwwLDEtLjExLDEuODFsLTkuMTIsOS4x''@;'; put 'put ''Mi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDctN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwwLS4wOUgxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2guNDJMMjIsNC43NmE0LjMsNC4zLDAsMCwwLTgu''@;'; put 'put ''MDkuMTlIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02LjQ2LTMuN0gxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gyLjI2YTcuNTMs''@;'; put 'put ''Ny41MywwLDAsMS0uMDctMSw3LjUzLDcuNTMsMCwwLDEsLjA4LTEuMDVoLS41YTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTMuNDNBNy41Miw3''@;'; put 'put ''LjUyLDAsMCwxLDMwLDEzLjVabS00LjIzLDMuNzEtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlRmxhZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMzRhMSwxLDAsMCwxLTEt''@;'; put 'put ''MVYzQTEsMSwwLDAsMSw3LDNWMzNBMSwxLDAsMCwxLDYsMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC41NSwzLjgyYTEsMSwwLDAsMC0xLDAsMTQuOSwxNC45LDAsMCwxLTYuMTMsMS4xNiwxMy4x''@;'; put 'put ''MSwxMy4xMSwwLDAsMS01LjE4LTEuNDksMTIuNzgsMTIuNzgsMCwwLDAtNS0xLjQ1QTEwLjg2LDEwLjg2LDAsMCwwLDksMi44NVY1LjA4QTguOCw4LjgsMCwwLDEsMTMuMjUsNGExMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjZBMTguNzUsMTguNzUs''@;'; put 'put ''MCwwLDAsMjksNi4xMlYxOC45NWExNi4xNiwxNi4xNiwwLDAsMS01LjU4LjkzLDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwxNy43OVYyMGE4LjgsOC44LDAsMCwxLDQuMjUtMS4wOCwxMS4yMiwxMS4yMiww''@;'; put 'put ''LDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjYsMTYuNzksMTYuNzksMCwwLDAsNy0xLjM3LDEsMSwwLDAsMCwuNTUtLjg5VjQuNjdBMSwxLDAsMCwwLDMwLjU1LDMuODJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgZD0iTTUuOTIsMmExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsNS45MiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMC41LDMuODJhMSwxLDAsMCwwLTEsMCwx''@;'; put 'put ''NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OUExMi43OCwxMi43OCwwLDAsMCwxMy4yLDIsMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0''@;'; put 'put ''Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNSwzLjgyWiIvPicpLEYuQ2xyU2hhcGVJbmJveD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMjMsMTMuMDlhMSwxLDAsMCwwLDAsMS40MUwx''@;'; put 'put ''OCwyMC4zbDUuNzktNS43OWExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDE2LjQ3VjJBMSwxLDAsMCwwLDE4LDFhMSwxLDAsMCwwLTEsMXYxNC41bC0zLjM4LTMuMzhBMSwxLDAsMCwwLDEyLjIzLDEzLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41LDVIMjJWN2g3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjYu''@;'; put 'put ''NUExLjUsMS41LDAsMCwwLDI5LjUsNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQx''@;'; put 'put ''TDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YyMUgyMy42MWwtLjEuODlhNS40Miw1LjQyLDAsMCwxLTEwLjc3LDBsLS4xLS44OUg3VjdoN1Y1SDYuNUExLjUsMS41LDAsMCwwLDUsNi41djI1QTEuNSwxLjUsMCwwLDAs''@;'; put 'put ''Ni41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVIZWFydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJN''@;'; put 'put ''MTgsMzIuNDNhMSwxLDAsMCwxLS42MS0uMjFDMTEuODMsMjcuOSw4LDI0LjE4LDUuMzIsMjAuNTEsMS45LDE1LjgyLDEuMTIsMTEuNDksMyw3LjY0YzEuMzQtMi43NSw1LjE5LTUsOS42OS0zLjY5QTkuODcsOS44NywwLDAsMSwxOCw3LjcyYTkuODcsOS44NywwLDAsMSw1LjMxLTMuNzdjNC40''@;'; put 'put ''OS0xLjI5LDguMzUuOTQsOS42OSwzLjY5LDEuODgsMy44NSwxLjEsOC4xOC0yLjMyLDEyLjg3QzI4LDI0LjE4LDI0LjE3LDI3LjksMTguNjEsMzIuMjJBMSwxLDAsMCwxLDE4LDMyLjQzWk0xMC4xMyw1LjU4QTUuOSw1LjksMCwwLDAsNC44LDguNTFjLTEuNTUsMy4xOC0uODUsNi43MiwyLjE0''@;'; put 'put ''LDEwLjgxQTU3LjEzLDU3LjEzLDAsMCwwLDE4LDMwLjE2LDU3LjEzLDU3LjEzLDAsMCwwLDI5LjA2LDE5LjMzYzMtNC4xLDMuNjktNy42NCwyLjE0LTEwLjgxLTEtMi00LTMuNTktNy4zNC0yLjY1YTgsOCwwLDAsMC00Ljk0LDQuMiwxLDEsMCwwLDEtMS44NSwwLDcuOTMsNy45MywwLDAsMC00''@;'; put 'put ''Ljk0LTQuMkE3LjMxLDcuMzEsMCwwLDAsMTAuMTMsNS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUE5Ljg3LDkuODcsMCwwLDAsMTgsNy43MmE5''@;'; put 'put ''Ljg3LDkuODcsMCwwLDAtNS4zMS0zLjc3QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEs''@;'; put 'put ''MTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlSGVhcnRCcm9rZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjA5LTUtOS42OS0zLjY5YTkuODcsOS44''@;'; put 'put ''NywwLDAsMC02LDQuODQsMTguOSwxOC45LDAsMCwwLTIuMjMsNS4zM2w1LjI4LDIuMzQtNC42LDQuMzcsMy40OSw0LjEsMS41Mi0xLjNMMTguNTQsMjFsNS40LTUuMTNMMTcuNTgsMTNBMTYuMjMsMTYuMjMsMCwwLDEsMTkuNzUsOC45YTcuNjgsNy42OCwwLDAsMSw0LjExLTNjMy4zNC0uODks''@;'; put 'put ''Ni4zNC42LDcuMzQsMi42NSwxLjU1LDMuMTguODUsNi43Mi0yLjE0LDEwLjgxQTU3LjE2LDU3LjE2LDAsMCwxLDE4LDMwLjE2LDU3LjE2LDU3LjE2LDAsMCwxLDYuOTQsMTkuMzNjLTMtNC4xLTMuNjktNy42NC0yLjE0LTEwLjgxYTUuOSw1LjksMCwwLDEsNS4zMy0yLjkzLDcuMzEsNy4zMSww''@;'; put 'put ''LDAsMSwyLC4yOSw3LjcsNy43LDAsMCwxLDMuMzgsMmwuMTUtLjNhMTAuNjYsMTAuNjYsMCwwLDEsMS0xLjQxLDkuNjQsOS42NCwwLDAsMC0zLjk0LTIuMjJDOC4yLDIuNjYsNC4zNCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45''@;'; put 'put ''LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzktOCwxMi4wNy0xMS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDcu''@;'; put 'put ''NjRjLTEuMzQtMi43NS01LjItNS05LjY5LTMuNjlBMTEuNTUsMTEuNTUsMCwwLDAsMTguMTksNy41YTE2Ljg5LDE2Ljg5LDAsMCwwLTIuNDgsNC41NkwyMi4yNywxNSwxNi43LDIwLjI2LDE5LDIzbC0xLjU3LDEuMzQtMy42LTQuMjIsNC43NC00LjUxLTUuNDQtMi40MWExOS40OSwxOS40OSww''@;'; put 'put ''LDAsMSwyLjMtNS41LDE0Ljc3LDE0Ljc3LDAsMCwxLDEuMDYtMS41NGwuMDYsMGE5LjY2LDkuNjYsMCwwLDAtMy44OS0yLjE4QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwx''@;'; put 'put ''LDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlVGFsa0J1YmJsZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEz''@;'; put 'put ''VjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlW''@;'; put 'put ''N0EzLDMsMCwwLDAsMzEsNFpNMzIsMjIuOTQsMjguNSwyMC4yMWExLDEsMCwwLDAtLjYxLS4yMUgxNGExLDEsMCwwLDEtMS0xVjdhMSwxLDAsMCwxLDEtMUgzMUExLjEsMS4xLDAsMCwxLDMyLDcuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3''@;'; put 'put ''LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2OS43MkwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0x''@;'; put 'put ''LTFWN2ExLDEsMCwwLDEsMS0xSDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTlWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMTRBNiw2LDAsMCwxLDgsMTlaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjdBMywzLDAsMCwwLDMxLDRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYs''@;'; put 'put ''MCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVs''@;'; put 'put ''NC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjEyLjM3QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0i''@;'; put 'put ''NiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlQ2hhdEJ1YmJsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0''@;'; put 'put ''LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVaTTI4LjI5LDI0LjYxYTEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAt''@;'; put 'put ''LjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMDgsMTEuMDgsMCwwLDEsMjguMjksMjQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yNSwxNS41SDExYTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjc1LDIwLjVoLTcuNWExLDEsMCwwLDAsMCwyaDcuNWExLDEs''@;'; put 'put ''MCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuMjgsMTIuNUgyNC43MmExLDEsMCwwLDAsMC0ySDExLjI4YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4zOCwxMi42OWE3LjQzLDcuNDMsMCwwLDEtMS44OS42NkExMC4zNSwxMC4zNSwwLDAsMSwzMiwxNi41YTExLjA4LDExLjA4LDAsMCwxLTMuNzEsOC4xMSwxLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwx''@;'; put 'put ''LDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMmExNiwxNiwwLDAsMSw0LjU1LjY2QTcuNDQsNy40NCwwLDAsMSwyMywzLjIyYTE4LDE4LDAsMCwwLTUtLjcyYy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2''@;'; put 'put ''LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0ExMi4zMiwxMi4zMiwwLDAsMCwzMy4zOCwxMi42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMSwxNS41YTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC4yNSwy''@;'; put 'put ''MC41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjgsMTEuNWExLDEsMCwwLDAsMSwxSDI0LjcyYTEsMSwwLDAsMCwu''@;'; put 'put ''ODMtLjQ3QTcuNTMsNy41MywwLDAsMSwyNCwxMC41SDExLjI4QTEsMSwwLDAsMCwxMC4yOCwxMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz''@;'; put 'put ''LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wm04LDE0YTEsMSwwLDAsMS0xLDFIMTFhMSwxLDAsMCwxLDAtMkgyNUExLDEsMCwwLDEsMjYsMTYuNVptLTMuMjUsNWExLDEsMCwwLDEtMSwxaC03LjVhMSwx''@;'; put 'put ''LDAsMCwxLDAtMmg3LjVBMSwxLDAsMCwxLDIyLjc1LDIxLjVabS0xMi40Ny0xMGExLDEsMCwwLDEsMS0xSDI0LjcyYTEsMSwwLDAsMSwwLDJIMTEuMjhBMSwxLDAsMCwxLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTMwLDEzLjI1YTcuNDYsNy40NiwwLDAsMS00LjM1LTEuNCwxLDEsMCwwLDEtLjkzLjY1SDExLjI4YTEsMSwwLDAsMSwwLTJIMjQuMkE3LjQ2LDcuNDYsMCwwLDEsMjMsMy4yYTE4LDE4LDAsMCwwLTUtLjdjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgs''@;'; put 'put ''MTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3LDEyLjM0LDEyLjM0LDAsMCwwLS42OC00QTcuNDYsNy40NiwwLDAsMSwzMCwxMy4yNVpNMjEuNzUsMjIuNWgtNy41YTEsMSwwLDAsMSwwLTJoNy41YTEsMSwwLDAs''@;'; put 'put ''MSwwLDJabTMuMjUtNUgxMWExLDEsMCwwLDEsMC0ySDI1YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNS43NSIgcj0iNSIgIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVQaWN0dXJlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEy''@;'; put 'put ''LDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywx''@;'; put 'put ''MSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2''@;'; put 'put ''LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAt''@;'; put 'put ''MywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4z''@;'; put 'put ''OCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwz''@;'; put 'put ''MiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45''@;'; put 'put ''bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''MCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYu''@;'; put 'put ''MDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVIYXBweUZhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs''@;'; put 'put ''MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC44OSIgY3k9IjEzLjg5IiByPSIyIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMDUiIGN5PSIxMy44OSIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4xMywy''@;'; put 'put ''OC4yMWE4LjY3LDguNjcsMCwwLDAsOC4yNi02SDkuODdBOC42Nyw4LjY3LDAsMCwwLDE4LjEzLDI4LjIxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDJaTTguODksMTMuODlhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsOC44OSwxMy44OVptOS4yNCwxNC4zMmE4LjY3LDguNjcsMCwwLDEtOC4yNi02SDI2LjM4QTguNjcsOC42NywwLDAsMSwxOC4xMywyOC4yMVptNi45My0xMi4zMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyNS4wNSwx''@;'; put 'put ''NS44OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlTmV1dHJhbEZhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjA1LDIyLjA2aC0xMmExLDEsMCwwLDAsMCwyaDEyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjA1LDIxLjA2YTEsMSwwLDAsMS0xLDFoLTEyYTEsMSwwLDAsMSwwLTJoMTJBMSwxLDAsMCwxLDI1''@;'; put 'put ''LjA1LDIzLjA2Wk0yNywxNC4yOGExLjgsMS44LDAsMSwxLTEuOC0xLjhBMS44LDEuOCwwLDAsMSwyNywxNC4yOFptLTE1LjgsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjE2LDE2LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIv''@;'; put 'put ''PicpLEYuQ2xyU2hhcGVTYWRGYWNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMTYiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTEuNDEiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjE2LDIwYTksOSwwLDAsMC03LjMzLDMuNzgsMSwxLDAsMSwwLDEuNjMsMS4xNiw3LDcsMCwwLDEsMTEuMzEtLjEzLDEsMSwwLDAsMCwxLjYtMS4yQTksOSwwLDAsMCwxOC4x''@;'; put 'put ''NiwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm05LDEyLjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0''@;'; put 'put ''LjI4Wm0tMTUuNTUsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjQxLDE2LjA4Wm0xNCw3LjUzYTEsMSwwLDAsMS0xLjYsMS4yLDcsNywwLDAsMC0xMS4zMS4xMywxLDEsMCwxLDEtMS42My0xLjE2LDksOSwwLDAsMSwxNC41NC0uMTdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksRi5DbHJTaGFwZVRodW1ic1VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwyNmMtMi45MiwxLjgyLTcuMyw0LTkuMzcsNGgtNmExNi42OCwxNi42OCwwLDAsMS0zLjMxLTYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsNCwxNmg5VjZh''@;'; put 'put ''Mi4wNSwyLjA1LDAsMCwxLDEuMjYtMS42OWMuNzcsMiwyLjYyLDYuNTcsNC4yMyw4LjcyQTExLjM5LDExLjM5LDAsMCwwLDI0LDE2LjkxVjE0Ljc4YTkuMTMsOS4xMywwLDAsMS0zLjkxLTNjLTEuODgtMi41MS00LjI5LTkuMTEtNC4zMS05LjE3QTEsMSwwLDAsMCwxNC41OSwyQzEzLjI1LDIu''@;'; put 'put ''MzgsMTEsMy42LDExLDZ2OEgzYTEsMSwwLDAsMC0xLDEsMjksMjksMCwwLDAsMS40LDkuNjJjMS44OSw1LjQsNC4xLDcuMTQsNC4yLDcuMjJhMSwxLDAsMCwwLC42MS4yMWg2LjQyYzIuNDMsMCw2LjU1LTIsOS4zNy0zLjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMzFIMjdhMSwxLDAsMCwxLTEtMVYxNGExLDEsMCwwLDEsMS0xaDdabS02LTJoNFYxNUgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYz''@;'; put 'put ''LDEyLjEyQzE3LjUxLDkuMjgsMTQuODgsMiwxNC44OCwyUzEyLDIuODMsMTIsNS4yNVYxNUgyLjIzYTI5LjQ2LDI5LjQ2LDAsMCwwLDEuNDQsOS43NEM1LjYxLDMwLjI3LDcuOCwzMiw3LjgsMzJoNi44NkMxNi45LDMyLDIxLDMwLjA2LDI0LDI4LjMxVjE1LjUxQTEwLjg0LDEwLjg0LDAsMCwx''@;'; put 'put ''LDE5LjYzLDEyLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNywxM2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwxLDFoN1YxM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+''@;'; put 'put ''JyksRi5DbHJTaGFwZVRodW1ic0Rvd249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEwYzIuOTItMS44Miw3LjMtNCw5LjM3LTRoNmExNi42OCwxNi42OCwwLDAsMSwzLjMxLDYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsMzIsMjBIMjNWMzBhMi4wNSwyLjA1LDAsMCwxLTEuMjYsMS42''@;'; put 'put ''OWMtLjc3LTItMi42Mi02LjU3LTQuMjMtOC43MkExMS4zOSwxMS4zOSwwLDAsMCwxMiwxOS4wOXYyLjEzYTkuMTMsOS4xMywwLDAsMSwzLjkxLDNjMS44OCwyLjUxLDQuMjksOS4xMSw0LjMxLDkuMTdhMSwxLDAsMCwwLDEuMTkuNjNDMjIuNzUsMzMuNjIsMjUsMzIuNCwyNSwzMFYyMmg4YTEs''@;'; put 'put ''MSwwLDAsMCwxLTEsMjksMjksMCwwLDAtMS40LTkuNjJjLTEuODktNS40LTQuMS03LjE0LTQuMi03LjIyQTEsMSwwLDAsMCwyNy43OSw0SDIxLjM3QzE4Ljk0LDQsMTQuODMsNiwxMiw3LjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMiw1SDlhMSwxLDAsMCwxLDEsMVYyMmExLDEsMCwwLDEtMSwxSDJaTTgsN0g0VjIxSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi4zNywyMy44NGMyLjEyLDIuODQsNC43Niwx''@;'; put 'put ''MC4wNyw0Ljc2LDEwLjA3UzI0LDMzLjEzLDI0LDMwLjcxVjIxaDkuNzdhMjkuNDYsMjkuNDYsMCwwLDAtMS40NC05Ljc0QzMwLjM5LDUuNjgsMjguMiw0LDI4LjIsNEgyMS4zNUMxOS4xLDQsMTUsNS45LDEyLDcuNjV2MTIuOEExMC44NCwxMC44NCwwLDAsMSwxNi4zNywyMy44NFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOSwyM2ExLDEsMCwwLDAsMS0xVjZBMSwxLDAsMCwwLDksNUgyVjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQ3Jvd249KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik00LDEzLjMzQTEuMzksMS4zOSwwLDEsMCwyLjYsMTQuNzIsMS4zOSwxLjM5LDAsMCwwLDQsMTMuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuODEsMTUuODRhMjAuMzUs''@;'; put 'put ''MjAuMzUsMCwwLDAtNC41OCwxLjQzLDIyLjcsMjIuNywwLDAsMC0zLjQ4LDIuMUExNy42OSwxNy42OSwwLDAsMSwyMiwxNi41N2E0Ny42NSw0Ny42NSwwLDAsMS0yLjgtNy42OSwxLDEsMCwwLDAtMS0uNzQsMSwxLDAsMCwwLTEsLjc0LDQ2LjcxLDQ2LjcxLDAsMCwxLTIuOCw3LjY5LDE3LDE3''@;'; put 'put ''LDAsMCwxLTEuNzYsMi44LDIyLjcsMjIuNywwLDAsMC0zLjQ4LTIuMSwyMC42NiwyMC42NiwwLDAsMC00LjU4LTEuNDMsMSwxLDAsMCwwLTEsLjM5LDEsMSwwLDAsMC0uMDksMS4wNUE1MC4xMyw1MC4xMywwLDAsMSw3LjgyLDMxLjE3YTEsMSwwLDAsMCwxLC44M0gyNy42MmExLDEsMCwwLDAs''@;'; put 'put ''MS0uODMsNTAuMTUsNTAuMTUsMCwwLDEsNC4yNi0xMy44OSwxLDEsMCwwLDAtLjA5LTEuMDVBMSwxLDAsMCwwLDMxLjgxLDE1Ljg0Wk0yNi43OSwzMEg5LjY0YTU1LjY2LDU1LjY2LDAsMCwwLTMuNC0xMS43MSwxNS43NSwxNS43NSwwLDAsMSwyLjA5Ljc4LDIwLDIwLDAsMCwxLDMuODUsMi40''@;'; put 'put ''NSwxLDEsMCwwLDAsMS4zOS0uMDksMTkuMjgsMTkuMjgsMCwwLDAsMi42Ny00LDQzLjQ2LDQzLjQ2LDAsMCwwLDItNC44OSw0MS43NCw0MS43NCwwLDAsMCwyLDQuODksMTkuOTIsMTkuOTIsMCwwLDAsMi42Niw0LDEsMSwwLDAsMCwxLjQuMDksMTkuMjEsMTkuMjEsMCwwLDEsMy44NS0yLjQ1''@;'; put 'put ''LDE0Ljc3LDE0Ljc3LDAsMCwxLDIuMDktLjc4QTU1LjA3LDU1LjA3LDAsMCwwLDI2Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE4LjIyLDYuMzlBMS4zOSwxLjM5LDAsMSwwLDE2Ljg0LDUsMS4zOSwxLjM5LDAsMCwwLDE4LjIyLDYuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMTguMjMsMjYuMzRhMS4xMSwxLjExLDAsMSwwLDEuMSwxLjFBMS4xLDEuMSwwLDAsMCwxOC4yMywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMi41OCwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUEx''@;'; put 'put ''LjEsMS4xLDAsMCwwLDEyLjU4LDI2LjM0WiIvPjxwYXRoIGQ9Ik0yMy44OSwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDIzLjg5LDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cblxuICA8cGF0aCBkPSJNMi42''@;'; put 'put ''LDExLjkzQTEuNCwxLjQsMCwxLDAsNCwxMy4zMywxLjQsMS40LDAsMCwwLDIuNiwxMS45M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjYzLDE2''@;'; put 'put ''LjFBMTguNjEsMTguNjEsMCwwLDAsMjgsMTcuMzRhMjEuNTcsMjEuNTcsMCwwLDAtNCwyLjQ5LDE5LjIsMTkuMiwwLDAsMS0yLjI2LTMuNDksNDguOTIsNDguOTIsMCwwLDEtMi41Mi02LjU4LDEsMSwwLDAsMC0xLS43MWgwYTEsMSwwLDAsMC0xLC43MSw0OC40Miw0OC40MiwwLDAsMS0yLjUy''@;'; put 'put ''LDYuNTgsMTguNjksMTguNjksMCwwLDEtMi4yNiwzLjQ4LDIyLjgxLDIyLjgxLDAsMCwwLTQtMi40OEExOC44MywxOC44MywwLDAsMCw0LjksMTYuMWExLDEsMCwwLDAtMSwuMzMsMSwxLDAsMCwwLS4xMywxLjA3LDU1LjksNTUuOSwwLDAsMSw0LDEzLjUsMSwxLDAsMCwwLDEsLjgzaDE5YTEs''@;'; put 'put ''MSwwLDAsMCwxLS44Myw1NS45LDU1LjksMCwwLDEsNC0xMy41LDEsMSwwLDAsMC0uMTMtMS4wN0ExLDEsMCwwLDAsMzEuNjMsMTYuMVpNMTEuMDgsMjguNTVhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwxMS4wOCwyOC41NVptNy4xNSwwYTEuMTEsMS4xMSwwLDAs''@;'; put 'put ''MSwwLTIuMjEsMS4xMSwxLjExLDAsMCwxLDAsMi4yMVptNy4xNiwwYTEuMTEsMS4xMSwwLDEsMSwxLjEtMS4xMUExLjExLDEuMTEsMCwwLDEsMjUuMzksMjguNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gICcpLEYuQ2xyU2hhcGVIYXNodGFnPSgwLG0u''@;'; put 'put ''Y2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsMTJIMjUuMzRsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwyMy4zLDEySDE1LjExbDEuNTUtNy43NGExLDEsMCwwLDAtMi0uMzlMMTMuMDcsMTJINmExLDEsMCwwLDAsMCwyaDYuNjdsLTEuNiw4SDRhMSwxLDAsMCwwLDAsMmg2LjY2TDku''@;'; put 'put ''MTEsMzEuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjY4LjY4LDAsMCwwLC4yLDAsMSwxLDAsMCwwLDEtLjhMMTIuNywyNGg4LjE5bC0xLjU1LDcuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjYyLjYyLDAsMCwwLC4xOSwwLDEsMSwwLDAsMCwxLS44TDIyLjkzLDI0SDMwYTEsMSwwLDAsMCwwLTJIMjMu''@;'; put 'put ''MzNsMS42MS04SDMyYTEsMSwwLDAsMCwwLTJaTTIxLjI5LDIySDEzLjFsMS42MS04SDIyLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMS44NywxMEgyNi4zMmwxLTQuODNBMSwxLDAsMCwwLDI2LjM1LDRoLTJhMSwxLDAs''@;'; put 'put ''MCwwLTEsLjc4TDIyLjMzLDEwaC01LjRsMS00LjgzQTEsMSwwLDAsMCwxNyw0SDE1YTEsMSwwLDAsMC0xLC43OEwxMywxMEg3YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJoNS41NUwxMC41LDIyaC02YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJI''@;'; put 'put ''OS42OGwtMSw0LjgzYTEsMSwwLDAsMCwxLDEuMTdoMmExLDEsMCwwLDAsLjk1LS43OEwxMy42NywyNmg1LjRsLTEsNC44M0ExLDEsMCwwLDAsMTksMzJoMmExLDEsMCwwLDAsMS0uNzhMMjMuMDUsMjZoNmExLDEsMCwwLDAsMS0uOGwuNC0yYTEsMSwwLDAsMC0xLTEuMkgyMy44N2wxLjYzLTho''@;'; put 'put ''NmExLDEsMCwwLDAsMS0uOGwuNDEtMkExLDEsMCwwLDAsMzEuODcsMTBabS0xMiwxMmgtNS40bDEuNjQtOGg1LjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLEYuU29jaWFsU2hhcGVzPXtjcm93bjpGLkNsclNoYXBlQ3Jvd24sc2hhcmU6Ri5DbHJT''@;'; put 'put ''aGFwZVNoYXJlLHN0YXI6Ri5DbHJTaGFwZVN0YXIsImhhbGYtc3RhciI6Ri5DbHJTaGFwZUhhbGZTdGFyLGJvb2ttYXJrOkYuQ2xyU2hhcGVCb29rbWFyayxlbnZlbG9wZTpGLkNsclNoYXBlRW52ZWxvcGUsY2FsZW5kYXI6bGUuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpsZS5DbHJTaGFwZUV2''@;'; put 'put ''ZW50LHRhc2tzOkYuQ2xyU2hhcGVUYXNrcyxmbGFnOkYuQ2xyU2hhcGVGbGFnLGluYm94OkYuQ2xyU2hhcGVJbmJveCxoYXNodGFnOkYuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OkYuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpGLkNsclNoYXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxl''@;'; put 'put ''cyI6Ri5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6Ri5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpGLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6Ri5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpGLkNsclNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNl''@;'; put 'put ''IjpGLkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpGLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpGLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlNvY2lh''@;'; put 'put ''bFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlNvY2lhbFNoYXBlcywiZGF0ZSIsKDAseC5kZXNjcmlw''@;'; put 'put ''dG9yQ29uZmlnKShGLlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChGLlNvY2lhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMv''@;'; put 'put ''dGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAg''@;'; put 'put ''ICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxGLkNsclNoYXBlVk1XQXBwPUYuQ2xyU2hhcGVWTT1GLkNsclNoYXBlUm91dGVyPUYuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPUYuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3M9Ri5DbHJTaGFwZU5ldHdvcmtHbG9iZT1GLkNsclNoYXBlVGFibGV0PUYuQ2xyU2hh''@;'; put 'put ''cGVNb2JpbGU9Ri5DbHJTaGFwZUJhdHRlcnk9Ri5DbHJTaGFwZUFwcGxpY2F0aW9uPUYuQ2xyU2hhcGVDb2RlPUYuQ2xyU2hhcGVUZXJtaW5hbD1GLkNsclNoYXBlRGlzcGxheT1GLkNsclNoYXBlQ29tcHV0ZXI9Ri5DbHJTaGFwZUZsb3BweT1GLkNsclNoYXBlUGx1Z2luPUYuQ2xyU2hhcGVE''@;'; put 'put ''b3dubG9hZENsb3VkPUYuQ2xyU2hhcGVVcGxvYWRDbG91ZD1GLkNsclNoYXBlRXhwb3J0PUYuQ2xyU2hhcGVJbXBvcnQ9Ri5DbHJTaGFwZVNoaWVsZFg9Ri5DbHJTaGFwZVNoaWVsZD1GLkNsclNoYXBlU2hpZWxkQ2hlY2s9Ri5DbHJTaGFwZVJlc291cmNlUG9vbD1GLkNsclNoYXBlRGF0YUNs''@;'; put 'put ''dXN0ZXI9Ri5DbHJTaGFwZU1lbW9yeT1GLkNsclNoYXBlQ1BVPUYuQ2xyU2hhcGVCdWlsZGluZz1GLkNsclNoYXBlQXBwbGljYXRpb25zPUYuQ2xyU2hhcGVDbHVzdGVyPUYuQ2xyU2hhcGVTdG9yYWdlPUYuQ2xyU2hhcGVIb3N0PUYuQ2xyU2hhcGVEYXNoYm9hcmQ9Ri5DbHJTaGFwZU1vdXNl''@;'; put 'put ''PUYuQ2xyU2hhcGVLZXlib2FyZD1GLkNsclNoYXBlRGV2aWNlcz1GLkNsclNoYXBlQmFja3VwPUYuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlPUYuQ2xyU2hhcGVIYXJkRGlzaz1GLkNsclNoYXBlUmFja1NlcnZlcj1GLkNsclNoYXBlV2lmaT1GLkNsclNoYXBlQnVuZGxlPUYuQ2xyU2hhcGVCbG9j''@;'; put 'put ''a3NHcm91cD1GLkNsclNoYXBlQmxvY2s9Ri5DbHJTaGFwZUxheWVycz1GLkNsclNoYXBlVW5pbnN0YWxsPUYuQ2xyU2hhcGVJbnN0YWxsPUYuQ2xyU2hhcGVOb1dpZmk9Ri5DbHJTaGFwZVBob25lSGFuZHNldD1GLkNsclNoYXBlUnVsZXJQZW5jaWw9dm9pZCAwLEYuVGVjaG5vbG9neVNoYXBl''@;'; put 'put ''cz1GLkNsclNoYXBlRmlsZVNoYXJlMj1GLkNsclNoYXBlQ2lDZD1GLkNsclNoYXBlQW5pbWF0aW9uPUYuQ2xyU2hhcGVUYXBlRHJpdmU9Ri5DbHJTaGFwZU1lZGlhQ2hhbmdlcj1GLkNsckNvbnRyb2xMdW49Ri5DbHJTaGFwZVBvZD1GLkNsclNoYXBlTm9kZT1GLkNsclNoYXBlTmFtZXNwYWNl''@;'; put 'put ''PUYuQ2xyU2hhcGVOb2Rlcz1GLkNsclNoYXBlTm9kZUdyb3VwPUYuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj1GLkNsclNoYXBlSG9zdEdyb3VwPUYuQ2xyU2hhcGVTcXVpZD1GLkNsclNoYXBlQ2FwYWNpdG9yPUYuQ2xyU2hhcGVSZXNpc3Rvcj1GLkNsclNoYXBlSW5kdWN0b3I9Ri5DbHJTaGFw''@;'; put 'put ''ZVJhZGFyPUYuQ2xyU2hhcGVVc2I9Ri5DbHJTaGFwZVFyQ29kZT1GLkNsclNoYXBlRmlsZVNoYXJlPUYuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9Ri5DbHJTaGFwZUNvbnRhaW5lcj1GLkNsclNoYXBlQ2REdmQ9Ri5DbHJTaGFwZUJhckNvZGU9Ri5DbHJTaGFwZUF0b209Ri5DbHJTaGFwZUFz''@;'; put 'put ''c2lnblVzZXI9Ri5DbHJTaGFwZVByb2Nlc3NPblZNPUYuQ2xyU2hhcGVCbHVldG9vdGhPZmY9Ri5DbHJTaGFwZUJsdWV0b290aD1GLkNsclNoYXBlU1NEPUYuQ2xyU2hhcGVOVk1lPUYuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz1GLkNsclNoYXBlSGFyZERyaXZlPUYuQ2xyU2hhcGVBZG1pbmlz''@;'; put 'put ''dHJhdG9yPUYuQ2xyU2hhcGVGbGFzaz1GLkNsclNoYXBlSGVsaXg9Ri5DbHJTaGFwZURlcGxveT1GLkNsclNoYXBlQ2xvdWRUcmFmZmljPUYuQ2xyU2hhcGVDbG91ZFNjYWxlPUYuQ2xyU2hhcGVDbG91ZE5ldHdvcms9Ri5DbHJTaGFwZVVubGluaz1GLkNsclNoYXBlTGluaz1GLkNsclNoYXBl''@;'; put 'put ''RGlzY29ubmVjdD1GLkNsclNoYXBlQ29ubmVjdD1GLkNsclNoYXBlVW5hcmNoaXZlPUYuQ2xyU2hhcGVBcmNoaXZlPUYuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp''@;'; put 'put ''bHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWFlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Ri5DbHJTaGFwZVJ1bGVyUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwb2x5Z29u''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBwb2ludHM9IjkgMTcuNDEgOSAyNyAxOC41OSAyNyAxNi41OSAyNSAxMSAyNSAxMSAxOS40MSA5IDE3LjQxIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgZD0iTTM0Ljg3LDMyLjI5LDMyLDI5LjM4VjMySDRWMjcuODVINnYtMS42SDRWMTkuNkg2VjE4SDRWMTEuNkg2VjEwSDRWNC40MUwxOS45NCwyMC4yNlYxNy40NEwzLjcxLDEuMjlBMSwxLDAsMCwwLDIsMlYzM2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjQsMzBoNGEyLDIsMCwwLDAsMi0yVjguN0wyNy43LDQuNDdhMiwyLDAsMCwwLTEuNzYtMWgwYTIsMiwwLDAsMC0xLjc2LDEuMDhMMjIsOC43MlYyOEEyLDIsMCwwLDAs''@;'; put 'put ''MjQsMzBaTTI0LDkuMmwxLjk0LTMuNzdMMjgsOS4yMVYyNEgyNFptMCwxNi40M2g0djIuNDRIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuODcsMzIuMjEsMzAsMjcuMzdWOC43NUwyNy43LDQuNTJhMiwyLDAs''@;'; put 'put ''MCwwLTMuNTQsMEwyMiw4Ljc2VjE5LjQxTDMuNzEsMS4yMUExLDEsMCwwLDAsMiwxLjkyVjEwSDQuMTd2MS42SDJWMThINC4xN3YxLjZIMnY2LjY1SDQuMTd2MS42SDJ2NS4wN2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVpNMTAsMjZWMTYuOTRMMTkuMDcsMjZabTE4''@;'; put 'put ''LDIuMTFIMjRWMjUuNjhoNFptMC00SDI0VjkuMjVsMS45NC0zLjc3TDI4LDkuMjZaIi8+XG4nKSxGLkNsclNoYXBlUGhvbmVIYW5kc2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuNzMsMzUuNDRhNC43''@;'; put 'put ''Miw0LjcyLDAsMCwxLTEtLjExLDMzLjkxLDMzLjkxLDAsMCwxLTE2LjYyLTguNzUsMzIuNzEsMzIuNzEsMCwwLDEtOS0xNi4yNUE0LjU4LDQuNTgsMCwwLDEsMi40Niw2LjA1bDQtMy44NUEyLDIsMCwwLDEsOCwxLjY2YTIsMiwwLDAsMSwxLjQ1Ljg3bDUsNy4zOWExLjYsMS42LDAsMCwxLS4x''@;'; put 'put ''MSwxLjlsLTIuNTEsM2ExOC45NCwxOC45NCwwLDAsMCw0LjE3LDUuODloMGExOS4yNiwxOS4yNiwwLDAsMCw2LjA3LDQuMDlsMy4xMS0yLjQ3YTEuNjQsMS42NCwwLDAsMSwxLjg2LS4xMmw3LjU1LDQuODhBMiwyLDAsMCwxLDM1LDMwLjJsLTMuOSwzLjg2QTQuNzQsNC43NCwwLDAsMSwyNy43''@;'; put 'put ''MywzNS40NFpNNy44NCwzLjY0bC00LDMuODVhMi41NCwyLjU0LDAsMCwwLS43NSwyLjQsMzAuNywzMC43LDAsMCwwLDguNDEsMTUuMjYsMzEuOSwzMS45LDAsMCwwLDE1LjY0LDguMjMsMi43NSwyLjc1LDAsMCwwLDIuNS0uNzRsMy45LTMuODYtNy4yOS00LjcxLTMuMzQsMi42NmExLDEsMCww''@;'; put 'put ''LDEtLjkyLjE3LDIwLjA2LDIwLjA2LDAsMCwxLTcuMzYtNC43NWgwYTE5LjQ5LDE5LjQ5LDAsMCwxLTQuODctNy4yQTEsMSwwLDAsMSwxMCwxNGwyLjctMy4yM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4yMiwy''@;'; put 'put ''MC42NGEyMC4zNywyMC4zNywwLDAsMCw3LjQsNC43OWwzLjc3LTNhLjY3LjY3LDAsMCwxLC43NiwwbDcsNC41MWEyLDIsMCwwLDEsLjMzLDMuMThsLTMuMjgsMy4yNGE0LDQsMCwwLDEtMy42MywxLjA3LDM1LjA5LDM1LjA5LDAsMCwxLTE3LjE1LTlBMzMuNzksMzMuNzksMCwwLDEsMS4xNSw4''@;'; put 'put ''LjZhMy43OCwzLjc4LDAsMCwxLDEuMS0zLjU1bDMuNC0zLjI4YTIsMiwwLDAsMSwzLjEyLjMyTDEzLjQzLDlhLjYzLjYzLDAsMCwxLDAsLjc1bC0zLjA3LDMuNjlBMTkuNzUsMTkuNzUsMCwwLDAsMTUuMjIsMjAuNjRaIi8+XG4nKSxGLkNsclNoYXBlTm9XaWZpPSgwLG0uY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuNDJhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMjQuNDJabTAsNmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwxOCwzMC40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYuMjEsMjEuODVhMSwxLDAsMCwwLS4yMy0xLjQsMTMuNTYsMTMuNTYsMCwwLDAtNS0yLjIzbDMuODcsMy44N0ExLDEsMCwwLDAsMjYuMjEsMjEuODVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LjA1LDEwLjcyYTIwLjg4LDIwLjg4LDAsMCwwLTQuMTYuNDNsMS43NCwxLjc0YTE5LDE5LDAsMCwxLDIuNDItLjE3QTE4Ljc2LDE4Ljc2LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAs''@;'; put 'put ''MTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMzLjU1LDguMkEyOC4xMSwyOC4xMSwwLDAsMCw4LjExLDUuMzZMOS42OSw2LjkzQTI2LDI2LDAsMCwxLDMyLjQ1LDkuODdhMSwxLDAsMCwwLDEu''@;'; put 'put ''MS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xLjg0LDQuNzUsNC4yNyw3LjE4Yy0uNjIuMzQtMS4yMy43LTEuODMsMS4xQTEsMSwwLDEsMCwzLjU2LDkuOTRDNC4yNiw5LjQ3LDUsOSw1Ljc0LDguNjVs''@;'; put 'put ''My44NywzLjg3QTIwLjU5LDIwLjU5LDAsMCwwLDYuMjMsMTQuNCwxLDEsMCwwLDAsNy4zNiwxNmExOC44MiwxOC44MiwwLDAsMSwzLjc3LTJsNC4xNiw0LjE2QTEzLjUxLDEzLjUxLDAsMCwwLDEwLDIwLjU1YTEsMSwwLDAsMCwxLjE4LDEuNjFBMTEuNTIsMTEuNTIsMCwwLDEsMTcsMjBsMTAu''@;'; put 'put ''OCwxMC44LDEuNDEtMS40MS0yNi0yNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjkuNTQiIHI9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTIiIGQ9Ik0yOS4xOCwxNy43MWwuMTEtLjE3YTEuNTEsMS41MSwwLDAsMC0uNDctMi4xQTIwLjU3LDIwLjU3LDAsMCwwLDE4LDEyLjM3Yy0uNTYsMC0xLjExLDAtMS42NS4wN2wzLjIxLDMuMjFhMTcuNDEsMTcuNDEsMCwwLDEsNy42LDIuNTJBMS40OSwxLjQ5LDAsMCwwLDI5LjE4LDE3''@;'; put 'put ''LjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjc2LDkuMzhBMjcuOSwyNy45LDAsMCwwLDEwLjE4LDYuMjdMMTIuODEsOC45QTI0LjY4LDI0LjY4LDAsMCwxLDMxLjEsMTIuMTJhMS40OSwxLjQ5LDAsMCwwLDIt''@;'; put 'put ''LjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMyw0Ljc1bDMuMSwzLjFBMjcuMjgsMjcuMjgsMCwwLDAsMy4xOCw5LjQyYTEuNTEsMS41MSwwLDAsMC0u''@;'; put 'put ''NDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY5LDI0LjY5LDAsMCwxLDMuNjctMS45bDMuMTQsMy4xNGEyMC42MywyMC42MywwLDAsMC00LjUzLDIuMDksMS41MSwxLjUxLDAsMCwwLS40NiwyLjFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NkExNy40NiwxNy40''@;'; put 'put ''NiwwLDAsMSwxNC4yNSwxNmwzLjYsMy42YTEzLjM5LDEzLjM5LDAsMCwwLTYuNzksMS45MywxLjUsMS41LDAsMCwwLS40NiwyLjA5bC4xLjE2YTEuNTIsMS41MiwwLDAsMCwyLjA2LjQ0LDEwLjIsMTAuMiwwLDAsMSw5LS43TDI5LDMwLjc1bDEuNDEtMS40MS0yNi0yNloiLz5cbicpLEYuQ2xy''@;'; put 'put ''U2hhcGVJbnN0YWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBh''@;'; put 'put ''MiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCwwLDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEwLjMsMTguODdsNyw2Ljg5YTEsMSwwLDAsMCwxLjQsMGw3''@;'; put 'put ''LTYuODlhMSwxLDAsMCwwLTEuNC0xLjQzTDE5LDIyLjY1VjRhMSwxLDAsMCwwLTIsMFYyMi42NWwtNS4zLTUuMjFhMSwxLDAsMCwwLTEuNCwxLjQzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+PHBhdGggZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEs''@;'; put 'put ''MCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAs''@;'; put 'put ''MCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMi0tYWxlcnRlZCIgZD0iTTMxLDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs''@;'; put 'put ''MS4xNFoiLz5cbicpLEYuQ2xyU2hhcGVVbmluc3RhbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43''@;'; put 'put ''LDI1LjNsLTUuMjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCww''@;'; put 'put ''LDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUu''@;'; put 'put ''MjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEz''@;'; put 'put ''LjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTEuMjksMjYuNzJhMSwxLDAsMCwwLDEuNDEsMEwxOCwyMS40OWw1LjMsNS4yM0ExLDEsMCwwLDAsMjQuNywyNS4zbC01LjI4LTUuMjEsNC43NS00LjY5SDIyLjIzYTMuNjUsMy42NSwwLDAsMS0uODEtLjFMMTgsMTgu''@;'; put 'put ''NjhsLTUuMy01LjIzYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS4yOCw1LjIxTDExLjMsMjUuM0ExLDEsMCwwLDAsMTEuMjksMjYuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMx''@;'; put 'put ''LDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbicpLEYuQ2xyU2hh''@;'; put 'put ''cGVMYXllcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWEx''@;'; put 'put ''LDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVpNNS4zNCwxMi4xNmwxMi42Niw2LDEyLjY2LTZMMTgsNi4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjYuMTZhMSwxLDAs''@;'; put 'put ''MCwxLS40My0uMUwyLjU3LDE5YTEsMSwwLDEsMSwuODUtMS44MUwxOCwyNC4wNmwxNC41Ny02Ljg5QTEsMSwwLDEsMSwzMy40MywxOWwtMTUsNy4wOUExLDEsMCwwLDEsMTgsMjYuMTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWExLDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSww''@;'; put 'put ''LDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xOCwzMi4wN2ExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwuODUtMS44MUwxOCwzMGwxNC41Ny02Ljg5YTEsMSwwLDEsMSwuODUs''@;'; put 'put ''MS44MUwxOC40MywzMkExLDEsMCwwLDEsMTgsMzIuMDdaIi8+XG4nKSxGLkNsclNoYXBlQmxvY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQyLDkuMDlsLTEzLTZhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx''@;'; put 'put ''LDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTBBMSwxLDAsMCwwLDMxLjQyLDkuMDlaTTE4LDUuMSwyOC42MSwxMCwxOCwxNC45LDcuMzksMTBaTTYsMTEuNTZsMTEsNS4wOHYxNC44TDYsMjYuMzZaTTE5LDMxLjQ0VjE2LjY0bDExLTUuMDh2MTQuOFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjUzVjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDIuNTctMS4xOWEzLjY3LDMuNjcsMCwwLDEtMi4xMS0xLjIyTDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsMy4wOCwxLjQyLDEtMS43NEwx''@;'; put 'put ''OC40MiwzLjA5YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjE1LjUzWk0xNywzMS40NCw2LDI2LjM2VjExLjU2bDExLDUuMDhaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxLjI2bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkySDMzLjdhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkyTDI5LjA4LDEuMjZBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDI2Ljg3LDEuMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3''@;'; put 'put ''LDcuNTcsMCwwLDEtMi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx''@;'; put 'put ''LDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMt''@;'; put 'put ''NmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsMTQuOSw3LjM5LDEwLDE4LDUuMSwyOC42MSwxMFpNMzAsMjYu''@;'; put 'put ''MzYsMTksMzEuNDRWMTYuNjRsMTEtNS4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuMzh2MTFMMTksMzEuNDRWMTYuNjRsMi43OS0xLjI5YTMuNjgsMy42OCwwLDAsMS0yLjI1LTEuMTZMMTgsMTQuOSw3''@;'; put 'put ''LjM5LDEwLDE4LDUuMWwzLDEuMzksMS0xLjc1TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTIsMjEuMTMsMTFhMS4yNywxLjI3LDAsMCwwLDEuMSwxLjkxSDMzLjY4QTEuMjcsMS4yNywwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjEyQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3LDcuNTcsMCwwLDEt''@;'; put 'put ''Mi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0''@;'; put 'put ''LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZUJsb2Nrc0dyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0z''@;'; put 'put ''LjQ1YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBs''@;'; put 'put ''Ny41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yLjgxLjkxTDI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1Wk0xOC4xLDQuMDhsNS4xMSwyLjM1TDE4LjEsOC43OCwxMyw2LjQzWk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIy''@;'; put 'put ''LDUuNDksMTkuNjdabTYuNSwxMS40OS02LjUsMy02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhaTTExLjYsMTUuNTdoMFY4bDYuMDgsMi44YTEsMSwwLDAsMCwuODQsMEwyNC42LDh2Ny41OGgwbC02LjUsM1pNMzIuMTEsMjguODFsLTYuNSwzLTYuNTEtM1Yy''@;'; put 'put ''MS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRsNi4wOC0yLjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3aC0ydjBsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCww''@;'; put 'put ''bC4yNC0uMTFhNC4xNyw0LjE3LDAsMCwxLC4yOS0uNjVsMS4zMy0yLjMxLTIuMjgsMUwxMyw2LjQzbDUuMS0yLjM1LDMuNDcsMS42LDEtMS43M0wxOC41LDIuMDhhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTgu''@;'; put 'put ''OTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEw''@;'; put 'put ''LjYsMjIsNS40OSwxOS42N1ptMCwxNC40OS02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTE1LTE0LjQ4LDUuMTEsMi4zNUwyNS42MSwyMiwyMC41LDE5LjY3Wm0wLDE0LjQ5LTYuNTEtM1YyMS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRs''@;'; put 'put ''Ni4wOC0yLjgsMCw3LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4x''@;'; put 'put ''LTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWMTIuN2E3LjU4''@;'; put 'put ''LDcuNTgsMCwwLDEtMi0xLjUxdjQuMzlsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDIzLDguNzJhNy4wNSw3LjA1LDAsMCwxLS40Ny0ybC00LjQ3LDJMMTMsNi40M2w1LjEtMi4zNSw0LjQ0LDJzMC0uMDYsMC0uMDlhNy41NSw3LjU1LDAsMCwxLC4yNy0ybC00LjMt''@;'; put 'put ''MmExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0z''@;'; put 'put ''LjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4x''@;'; put 'put ''MSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4''@;'; put 'put ''PSIzMC4wMyIgY3k9IjYuMDMiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0zLjQ1''@;'; put 'put ''YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41''@;'; put 'put ''LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1LDUuMTEsMi4zNVptLTEtNi40NC02LjQ0LDNWMTAuODdhMSwxLDAsMCwwLC4zNS0uMDhMMjQuNiw4djcuNThaTTE4LjEsNC4wOGw1LjExLDIu''@;'; put 'put ''MzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzaDBWMjQuMTFoMEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhabTE1LDAtNi40NiwzVjI0LjExQTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N3YwaC0ydjBsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOGwuMTQtLjA2QTMuMjMsMy4yMywwLDAsMSwxOSwxMGwxLjI4LTIuMjItMi4xNCwxTDEz''@;'; put 'put ''LDYuNDNsNS4xLTIuMzUsMy4zOSwxLjU2LDEtMS43My00LTEuODNhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTguOTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4''@;'; put 'put ''LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yOCwuOTEsNS4xMS0yLjM2LDUuMTEsMi4zNUwxMC42LDIyWk0xMC42LDMxLjhWMjQuMTFBMS4wOCwxLjA4LDAsMCwwLDExLDI0bDYu''@;'; put 'put ''MDgtMi44LDAsNy42Wm05LjktMTIuMTMsNS4xMS0yLjM1LDUuMTEsMi4zNUwyNS42MSwyMlpNMjUuNjQsMzEuOFYyNC4xMUEuODkuODksMCwwLDAsMjYsMjRsNi4wOC0yLjgsMCw3LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuPHBhdGggZD0iTTI2Ljg5LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjcsMTNIMzMuNzJhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjEsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODksMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi42OWE3LjY2LDcuNjYsMCwwLDEtMi0xLjQ3djQuMzRsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOEwyMyw4LjczYTcuNjUsNy42NSwwLDAs''@;'; put 'put ''MS0uNDgtMmwtNC40MiwyTDEzLDYuNDNsNS4xLTIuMzUsNC4zOCwyVjZhNy41NSw3LjU1LDAsMCwxLC4yNy0yTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwu''@;'; put 'put ''NTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYs''@;'; put 'put ''MzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuPGNpcmNsZSBjeD0iMjkuOTgiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlQnVuZGxlPSgwLG0uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEsMSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwu''@;'; put 'put ''ODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEyLjkxWk01LDEyLjEzLDE2LDE3LjRWMzEuNDZMNSwyNi4y''@;'; put 'put ''Wk0xOCwzMS40NVYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEs''@;'; put 'put ''MSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwuODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEy''@;'; put 'put ''LjkxWm0xLDE1LjhWMTcuMzZsMTMtNi4yOXYxNC4xWiIvPlxuJyksRi5DbHJTaGFwZVdpZmk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy41NSw4LjJhMjguMSwyOC4xLDAsMCwwLTMxLjExLjA4QTEsMSww''@;'; put 'put ''LDEsMCwzLjU2LDkuOTRhMjYuMTEsMjYuMTEsMCwwLDEsMjguODktLjA3LDEsMSwwLDAsMCwxLjEtMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTguMDUsMTAuNzJBMjAuNzQsMjAuNzQsMCwwLDAsNi4y''@;'; put 'put ''MywxNC40LDEsMSwwLDAsMCw3LjM2LDE2LDE4Ljg1LDE4Ljg1LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAsMTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MyIgZD0iTTE4LjA1LDE3LjlhMTMuNTEsMTMuNTEsMCwwLDAtOCwyLjY0LDEsMSwwLDAsMCwxLjE4LDEuNjEsMTEuNTYsMTEuNTYsMCwwLDEsMTMuNjItLjA4QTEsMSwwLDEsMCwyNiwyMC40NiwxMy41MiwxMy41MiwwLDAsMCwxOC4wNSwxNy45WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLjc2LDkuMzhhMjcuODcsMjcuODcsMCwwLDAtMjkuNTcsMCwxLjUxLDEuNTEsMCwwLDAt''@;'; put 'put ''LjQ4LDIuMTFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NiwyNC42OCwyNC42OCwwLDAsMSwyNi4yNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3QTEuNTEsMS41MSwwLDAsMCwzMi43Niw5LjM4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI4LjgyLDE1LjQ0YTIwLjU5LDIwLjU5LDAsMCwwLTIxLjcsMCwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDE3LjQsMTcuNCwwLDAsMSwxOC4zNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3''@;'; put 'put ''QTEuNTEsMS41MSwwLDAsMCwyOC44MiwxNS40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC44OCwyMS40OWExMy40MSwxMy40MSwwLDAsMC0xMy44MiwwLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41''@;'; put 'put ''MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMjcsMTAuMjcsMCwwLDEsMTAuNDIsMCwxLjUyLDEuNTIsMCwwLDAsMi4wNi0uNDVsLjEtLjE2QTEuNDksMS40OSwwLDAsMCwyNC44OCwyMS40OVoiLz5cbicpLEYuQ2xyU2hhcGVSYWNrU2VydmVyPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjY0LDExQTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTB2MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgzMlYyMUg0VjE1SDIwLjU4QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41Nkg0VjdIMjAuNzFsMS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEy''@;'; put 'put ''LDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4x''@;'; put 'put ''MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTAiIHk9IjE3IiB3aWR0aD0iMTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIx''@;'; put 'put ''NCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIGQ9Ik0xMCwxMUgyNHYtLjUxQTcuNDgsNy40OCwwLDAsMSwyMy4xMyw5SDEwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi42OC0uNUg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk00LDE1SDMydjZINFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMTAiIHk9IjkiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDdIMzJ2Nkg0Wm0wLDhIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNiIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEwVjdIMjAuNzFsMS43My0zSDRBMiwyLDAsMCwwLDIsNnY2SDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5Wk04LDlINlY3SDhaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMnY4SDM0VjE1LjM4Wk04LDE5SDZWMTdIOFptMTYsMEgxMFYxN0gyNFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMiwxNHY4SDM0VjE0Wm02LDVINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjQ5LDcuNDksMCwwLDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2djZIMjUuNTFBNy41Miw3LjUyLDAsMCwxLDIzLjEzLDlaTTgs''@;'; put 'put ''OUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDIySDM0VjE0SDJabTgtNUgyNHYySDEwWk02LDE3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2djZIMzRWNkEyLDIsMCwwLDAsMzIs''@;'; put 'put ''NFpNOCw5SDZWN0g4Wk0yNCw5SDEwVjdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4n''@;'; put 'put ''KSxGLkNsclNoYXBlSGFyZERpc2s9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0zNCwyMS4wOGwtMS40LTUuNjhIMzAuNTFsMS40OSw2VjI5SDRWMjEuNDRMNy4wNiw5aDEyLjVsMS4xNS0ySDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFB''@;'; put 'put ''MSwxLDAsMCwwLDM0LDIxLjA4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz''@;'; put 'put ''My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjAiIHdp''@;'; put 'put ''ZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzQsMjEuMDgsMzIsMTMuMjFhNy40OSw3LjQ5LDAsMCwxLTIsLjI5bDIsNy45NFYyOUg0VjIxLjQ0TDcuMDYsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4wNkEyLDIsMCwwLDAsNS4x''@;'; put 'put ''Myw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNCwyMS4wOCwzMC44Niw4LjQzQTIsMiwwLDAsMCwyOC45NCw3SDcuMDZBMiwyLDAsMCwwLDUu''@;'; put 'put ''MTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFBMSwxLDAsMCwwLDM0LDIxLjA4Wk00LDI5VjIxLjQ0TDcuMDYsOUgyOC45M0wzMiwyMS40NFYyOVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIxQTcuNDcsNy40NywwLDAsMSwyMi41Nyw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjg2''@;'; put 'put ''LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMiwyMnY3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYyMlptMjgsNUgyNlYyNWg0WiIvPlxuJyksRi5DbHJTaGFwZUJhY2t1cFJlc3RvcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEuNzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMxLjU4LDE1LjRIMjkuNDZjMSwyLjg1LDIuMzEsNi4zNywyLjU0LDcuMDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjks''@;'; put 'put ''MS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xMiwzNCwyMiwzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVh''@;'; put 'put ''MSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2Mmg3Ljk1QzMwLDE2Ljk0LDMxLjcyLDIxLjY1LDMyLDIyLjQ4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIMTVWMTJINy4wN2ExLjkyLDEuOTIs''@;'; put 'put ''MCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMSwzNCwyMiwzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEzLDkuOTIsMTcs''@;'; put 'put ''NlYxOWExLDEsMCwxLDAsMiwwVjZsNCwzLjk1QTEsMSwwLDEsMCwyNC4zOCw4LjVMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLjg0LDEzLjM3''@;'; put 'put ''QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEu''@;'; put 'put ''NzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyMi4yM0EzLjYyLDMuNjIsMCwwLDEsMjEsMTUuMTZW''@;'; put 'put ''MThhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43OSwyMS40OSwzMy4yOCwyMC4wNywzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsNCwzLjk1YTEsMSwwLDAsMCwuNzEuMjlsLjExLDBhNy40Niw3LjQ2LDAsMCwxLTEuMjUtMy41MkwxOCwyLjE2LDExLjYxLDguNUExLDEs''@;'; put 'put ''MCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2NmEzLDMs''@;'; put 'put ''MCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc3LDIxLjQzLDMzLjE1LDE5LjcsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy''@;'; put 'put ''NFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45''@;'; put 'put ''LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTQsMTkuNjksMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSww''@;'; put 'put ''LDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbicpLEYuQ2xyU2hhcGVCYWNrdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOCwxOS44NGw0LjQ3LTQuNDRoLS4yM2EzLjY3LDMuNjcsMCwwLDEtMi0uNjFMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00''@;'; put 'put ''LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIy''@;'; put 'put ''LjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1''@;'; put 'put ''LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uMjQsMS4zaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBI''@;'; put 'put ''NFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAsMS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3''@;'; put 'put ''LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIGQ9Ik0zMC44NCwxMy4zN0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS4xNCwyaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAs''@;'; put 'put ''MS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw0SDI2VjI2aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNS0uNTEtLjY1LTEuOTMtMi4zNS02LjZIMjUuM2wtNS44OSw1Ljg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''NC0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjQsMy42NCwwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEu''@;'; put 'put ''NDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42''@;'; put 'put ''OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNy0uNTctLjc5LTIuMy0zLjA2LTguNTVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNSw3LjQ2LDcuNDYsMCwwLDEtMy4z''@;'; put 'put ''NS0uOCwzLDMsMCwwLDEtLjg2LDIuMjFsLTYuMzgsNi4zNVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTkuNDEsMjEuMjZsLS43NC43NEgzMy45M2MtLjE3LS41Ny0uNzktMi4zMS0zLjA5LTguNjNBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDI2LjU1YTMsMywwLDAsMS0uNzYsMi45MloiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbicpLEYuQ2xyU2hhcGVEZXZpY2VzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyNkgyNFYxNVpNMjQsMzBWMjcuNmg4VjMwWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMCwyMkg0VjZIMjh2NWgyVjZhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMkgyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjAsMjZIOWExLDEsMCwwLDAsMCwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLDEzSDI0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTVBMiwyLDAsMCwwLDMyLDEzWm0wLDJWMjhIMjRWMTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjgsNEg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMmg4djJIOS4zMkExLjIsMS4yLDAsMCww''@;'; put 'put ''LDgsMjdhMS4yLDEuMiwwLDAsMCwxLjMyLDFIMTkuOTJ2LS4zN0gyMFYyMkg0VjZIMjh2NWgyVjZBMiwyLDAsMCwwLDI4LDRaIi8+XG4nKSxGLkNsclNoYXBlS2V5Ym9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsMThINFYxMEgzMloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI3IiB5''@;'; put 'put ''PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjExIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE1IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjE5IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjI3IiB5''@;'; put 'put ''PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMTEiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjE1IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxOSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjMi''@;'; put 'put ''IHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI3IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiB4PSIyNyIgeT0iMjIiIHdpZHRoPSIxLjk0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgeD0iNyIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTEuMTMiIHk9IjIyIiB3aWR0aD0iMTMuNzUiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNMTksMTNoMnYySDE5Wm0wLDRoMnYySDE5Wm0tNC00aDJ2MkgxNVptMCw0aDJ2MkgxNVptLTQtNGgydjJIMTFaTTksMjRIN1YyMkg5Wm0wLTVIN1Yx''@;'; put 'put ''N0g5Wm0wLTRIN1YxM0g5Wm0yLDJoMnYySDExWm0xMy44OCw3SDExLjEzVjIySDI0Ljg4Wk0yNSwxOUgyM1YxN2gyWm0wLTRIMjNWMTNoMlptMy45NCw5SDI3VjIyaDEuOTRaTTI5LDE5SDI3VjE3aDJabTAtNEgyN1YxM2gyWiIvPlxuJyksRi5DbHJTaGFwZU1vdXNlPSgwLG0uY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMzRBMTAsMTAsMCwwLDEsOCwyNFYxMmExMCwxMCwwLDAsMSwyMCwwVjI0QTEwLDEwLDAsMCwxLDE4LDM0Wk0xOCw0YTgsOCwwLDAsMC04LDhWMjRhOCw4LDAsMCwwLDE2LDBWMTJBOCw4''@;'; put 'put ''LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDE1YTEsMSwwLDAsMS0xLTFWMTBhMSwxLDAsMCwxLDIsMHY0QTEsMSwwLDAsMSwxOCwxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTEwLDEwLDAsMCwwLDgsMTJWMjRhMTAsMTAsMCwwLDAsMjAsMFYxMkExMCwxMCwwLDAsMCwxOCwyWm0xLjMsMTEuNDRhMS4zLDEuMywwLDAsMS0yLjYsMFYxMGExLjMsMS4zLDAsMCwxLDIuNiwwWiIvPlxuJyksRi5D''@;'; put 'put ''bHJTaGFwZURhc2hib2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LjE4LDEyLjMybC01LjkxLDUuODFhMywzLDAsMSwwLDEuNDEsMS40Mmw1LjkyLTUuODFaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTExLjM0LDI1LjVINi42NmExNC40MywxNC40MywwLDAsMS0z''@;'; put 'put ''LjExLTcuODRIN3YtMkgzLjU1QTE0LjQxLDE0LjQxLDAsMCwxLDcsMTEuMjlsMi40NSwyLjQ1LDEuNDEtMS40MUw4LjQzLDkuODdBMTQuNDEsMTQuNDEsMCwwLDEsMTcsNi4yOXYzLjVoMlY2LjNhMTQuNDcsMTQuNDcsMCwwLDEsMTMuNCwxMy42MUgyOC45MnYyaDMuNTNBMTQuNDMsMTQuNDMs''@;'; put 'put ''MCwwLDEsMjkuMzQsMjkuNzVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTUuODUsMTguNjlhMywzLDAsMSwwLDQuODMuODVsNS45Mi01LjgxLTEuNDEtMS40MS01LjkxLDUu''@;'; put 'put ''ODFBMywzLDAsMCwwLDE1Ljg1LDE4LjY5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjU4LDEzYTcuNDUsNy40NSwwLDAsMS0yLjA2LjQ0LDE0LjQsMTQuNCwwLDAsMSwx''@;'; put 'put ''LjkzLDYuNDNIMjguOTJ2MmgzLjUzYTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEsNy44NEg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAs''@;'; put 'put ''MSwxNyw2LjI5djMuNWgyVjYuM0ExNC40MSwxNC40MSwwLDAsMSwyMi41OCw3YTcuNTIsNy41MiwwLDAsMS0uMDgtMSw3LjUyLDcuNTIsMCwwLDEsLjA5LTEuMDlBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNloi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTguNiw5LjQ4LTUuOTIsNS44MWEzLDMsMCwxLDEtMS40MS0xLjQybDUuOTEtNS44MVptLTIzLDYuMTdIN3Yy''@;'; put 'put ''SDMuNTZjMC0uMzktLjA1LS43Ny0uMDUtMS4xN1MzLjUzLDIwLjE4LDMuNTUsMTkuOVptNC44OC0xMCwyLjQ2LDIuNDZMOS40NywxMy43NCw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N1pNMTksOS43OUgxN1Y2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1Wk0zMi40''@;'; put 'put ''OSwyMC43NGMwLC4zOSwwLC43OS0uMDUsMS4xN0gyOC45MnYtMmgzLjUzQzMyLjQ3LDIwLjE4LDMyLjQ5LDIwLjQ2LDMyLjQ5LDIwLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MzIuNTgsMTNhNy40Niw3LjQ2LDAsMCwxLTEwLTguMTJBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNlpNMTcsNi4yOWMuMzIsMCwuNjMsMCwxLDBzLjcsMCwxLC4wNXYzLjVIMTdaTTcsMjEuOTFIMy41NmMwLS4z''@;'; put 'put ''OS0uMDUtLjc3LS4wNS0xLjE3czAtLjU2LDAtLjgzSDdabTIuNTEtOC4xNkw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N2wyLjQ2LDIuNDZabTEwLjYyLDkuMTlhMywzLDAsMSwxLS44Mi00LjgxbDUuOTEtNS44MSwxLjQxLDEuNDEtNS45Miw1LjgxQTMsMywwLDAsMSwyMC4w''@;'; put 'put ''OSwyMi45M1ptMTIuMzUtMUgyOC45MnYtMmgzLjUzYzAsLjI4LDAsLjU1LDAsLjgzUzMyLjQ3LDIxLjUyLDMyLjQ0LDIxLjkxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbicpLEYuQ2xyU2hhcGVIb3N0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuM2EyLjQ4LDIuNDgsMCwxLDAsMi40OCwyLjQ3QTIuNDgsMi40OCwwLDAs''@;'; put 'put ''MCwxOCwyNC4zWm0wLDMuNmExLjEzLDEuMTMsMCwxLDEsMS4xMy0xLjEyQTEuMTMsMS4xMywwLDAsMSwxOCwyNy45WiIvPjxyZWN0IHg9IjEzLjUiIHk9IjIwLjciIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjY1LDMuNkgxMC4zNUExLjM1LDEuMzUsMCwwLDAsOSw0Ljk1VjMyLjRIMjdWNC45NUExLjM1LDEuMzUsMCwwLDAsMjUuNjUsMy42Wm0tLjQ1LDI3SDEwLjhWNS40SDI1LjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjEyLjYiIHk9IjcuMiIgd2lkdGg9IjEwLjgiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi42IiB5PSIxMC44IiB3aWR0''@;'; put 'put ''aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41''@;'; put 'put ''LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVk''@;'; put 'put ''IiBwb2ludHM9IjIxLjMsNiAxMiw2IDEyLDcuNiAyMC40LDcuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTIsMTEuNmg2LjZjMC0wLjYsMC4yLTEuMSwwLjQtMS42aC03''@;'; put 'put ''VjExLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0yNiwxNS40VjMySDEwVjRoMTIuNWwxLjEtMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTUuNEgyNnoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4y''@;'; put 'put ''aDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJz''@;'; put 'put ''MC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIxMyIgeT0iMjEiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yNCwxMC41Yy0wLjEtMC4yLTAuMi0wLjMtMC4zLTAuNUgxMnYxLjZoMTJWMTAuNXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xMiw2djEuNmgxMC43Yy0wLjEtMC41LTAuMi0xLjEtMC4yLTEuNkgxMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC01LS1iYWRnZWQiIGQ9Ik0yNiwxMi4zVjMySDEwVjRoMTIuOGMwLjItMC43LDAuNS0xLjQsMC45LTJIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjJDMjcuMywxMywyNi42LDEyLjcsMjYsMTIuM3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNi41LDJoLTE3QzguNywy''@;'; put 'put ''LDgsMi43LDgsMy41VjM0aDIwVjMuNUMyOCwyLjcsMjcuMywyLDI2LjUsMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnogTTI0LDExLjZIMTJWMTBo''@;'; put 'put ''MTJWMTEuNnogTTI0LDcuNkgxMlY2aDEyVjcuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjNjLTIsMC0zLjctMS42LTMuNy0zLjdIMTJWMTBoNi45YzAtMC4xLDAuMS0wLjIsMC4xLTAuMmwxLjItMi4ySDEyVjZoOS4ybDIuMy00aC0xNEM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS4zSDIy''@;'; put 'put ''LjJ6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6IE0yMywyMi42SDEzVjIxaDEwVjIyLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxbC01Ljcs''@;'; put 'put ''OS45Yy0wLjMsMC42LTAuMSwxLjQsMC41LDEuN2MwLjIsMC4xLDAuNCwwLjIsMC42LDAuMmgxMS40YzAuNywwLDEuMy0wLjYsMS4zLTEuM2MwLTAuMi0wLjEtMC40LTAuMi0wLjZMMjkuMSwxYy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuNywyNywwLjgsMjYuOSwxeiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjQsMTAuM3YxLjJIMTJWMTBoMTEuOGMtMC41LTAuNy0wLjgtMS41LTEtMi40SDEyVjZoMTAuNWMwLDAsMC0wLjEsMC0wLjFjMC0xLjQsMC40LTIuNywx''@;'; put 'put ''LjEtMy45SDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxMy4xQzI2LjQsMTIuNiwyNSwxMS43LDI0LDEwLjN6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6TTIzLDIyLjZIMTNWMjFoMTBW''@;'; put 'put ''MjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1LjkiIHI9IjUiLz5cbicpLEYuQ2xyU2hhcGVTdG9yYWdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMs''@;'; put 'put ''Ni42OWgwYy0uMTgtMy40MS05LjQ3LTQuMzMtMTUtNC4zM1MzLDMuMjksMyw2Ljc4VjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1Y2Ljc4czAsMCwwLDBTMzMsNi43LDMzLDYuNjlabS0yLDcuNTZjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwz''@;'; put 'put ''Ny40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzIsNDMuMzIsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMiw0My4zMiwwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40''@;'; put 'put ''OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjNy43NywwLDEyLjQ2LDEuNTMsMTMsMi4zNy0uNTIuODctNS4yMSwyLjM5LTEzLDIuMzlBMzcuNiwzNy42LDAsMCwxLDcsNy43NlY5Ljg1YTQzLjUz''@;'; put 'put ''LDQzLjUzLDAsMCwwLDExLDEuMjdjNCwwLDkuOTMtLjQ4LDEzLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xOS41MSw5LjA5LDE4LDkuMTFBMzcuNiwzNy42LDAsMCwx''@;'; put 'put ''LDcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjdoLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjguODMs''@;'; put 'put ''MTUuNEEzOC4zNywzOC4zNywwLDAsMSwxOCwxNi43LDM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMyw0My4zMywwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1''@;'; put 'put ''YTQzLjMzLDQzLjMzLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmMxLjUsMCwyLjg5LjA2LDQuMTUuMTZsMS4xLTEuOWMtMS44Ni0uMTgtMy43LS4y''@;'; put 'put ''Ni01LjI1LS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzdi0xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjcsNTQuODIsNTQuODIsMCwwLDAsNi4yLS4zNiw3LjUsNy41LDAsMCwxLTEuMTMtMS44OGMtMS41LjE1LTMuMi4yNC01''@;'; put 'put ''LjA3LjI0QTM3LjYsMzcuNiwwLDAsMSw3LDcuNzZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDN2LjgyYy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUs''@;'; put 'put ''MzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0u''@;'; put 'put ''NDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNywwLDMuMjUuMDgsNC42NC4yYTcuNDQsNy40NCwwLDAsMSwuNjctMS45NGMtMS44OC0uMTgtMy43NS0uMjYtNS4zMS0uMjYtNS41NywwLTE1''@;'; put 'put ''LC45My0xNSw0LjQzVjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NFY4LjU5Yy0uNDMs''@;'; put 'put ''Mi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFDMjYsMTAuNTMsMzIuNTIsOC43OSwzMyw2LjYxaDBDMzIuOCwzLjIsMjMuNTIsMi4yOCwxOCwyLjI4UzMsMy4yMSwzLDYuNzFWMjkuMjljMCwzLjQ5LDkuNDMs''@;'; put 'put ''NC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4wOVYxNi4zNGMtLjQzLDIuMi03LDMuOTQt''@;'; put 'put ''MTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE3LjkxLDIw''@;'; put 'put ''LjI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yYTM5LjQsMzkuNCwwLDAsMCwxMS42NiwxLjUxYzYuOSwwLDEyLjctMS4yNywxNC41MS0zSDIyLjIzYTMuNjcsMy42NywwLDAsMS0zLjU1LTIuNzVoLS43N0EzOS40LDM5LjQsMCwwLDEsNi4yNSwxMVY5YTM5LjQsMzkuNCwwLDAsMCwx''@;'; put 'put ''MS42NiwxLjUxaC44MkEzLjY0LDMuNjQsMCwwLDEsMTksOS43NWw0LjE3LTcuMjJjLTEuODUtLjE4LTMuNjgtLjI1LTUuMjEtLjI1LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYs''@;'; put 'put ''MjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0QzMyLjU3LDE4LjUzLDI2LDIwLjI4LDE3LjkxLDIwLjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NHYtMS42YTcuNDcsNy40NywwLDAsMS03LjM4LS44''@;'; put 'put ''LDQ4LjMsNDguMywwLDAsMS03LjcxLjU5QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTEsNTEsNTEsMCwwLDAsNi0uMzQsNy40Niw3LjQ2LDAsMCwxLS41OS03LjY1Yy0xLjg3LS4xOC0zLjczLS4yNi01LjI4LS4yNi01LjU3LDAtMTUsLjkzLTE1''@;'; put 'put ''LDQuNDNWMjkuMjljMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4w''@;'; put 'put ''OVYxNi4zNGMtLjQzLDIuMi03LDMuOTQtMTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxuJyksRi5DbHJTaGFwZUNsdXN0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjM2LDhIMjcuNXYySDMxVjMwSDI3LjV2MkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+PGVs''@;'; put 'put ''bGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEEx''@;'; put 'put ''LjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMjQsMzBIMTJWNkgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNSwxMEg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdWMzJIOC41VjMwSDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPjxl''@;'; put 'put ''bGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5bC4zOS0uNjhIMTMuNXYxLjZoNS4xN0Ez''@;'; put 'put ''LjY1LDMuNjUsMCwwLDEsMTksOS44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMzBIMTJWNmg5LjI5bDEuMTUtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYz''@;'; put 'put ''MkgyNlYxNS40SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzEgMTUuNCAzMSAzMCAyNy41IDMwIDI3LjUgMzIgMzMgMzIgMzMgMTUuNCAzMSAxNS40IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx''@;'; put 'put ''LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMs''@;'; put 'put ''OS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPjxlbGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI0LDEwLjQ5VjMwSDEyVjZIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzBIMjcuNXYySDMzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zNiw4SDI3LjVWMzJIMzNWOS42N0ExLjY1LDEuNjUsMCwwLDAs''@;'; put 'put ''MzEuMzYsOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEExLjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgy''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl''@;'; put 'put ''cnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuNSIgeT0iMTUuNCIgd2lkdGg9IjUuNSIgaGVpZ2h0PSIxNi42IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMTMuNTZhMy42''@;'; put 'put ''OCwzLjY4LDAsMCwxLS4zMS0zSDEzVjloNi41NmwyLjg5LTVIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaTTE4LDI3Ljc5QTEuNzksMS43OSwwLDEsMSwxOS44MSwyNiwxLjgsMS44LDAsMCwxLDE4LDI3Ljc5''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAs''@;'; put 'put ''MCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy40''@;'; put 'put ''OSw3LjQ5LDAsMCwxLDIyLjUsNlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgyM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi41LS40NFYzMkgzM1YxMi44N0E3LjQ3LDcuNDcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVBcHBsaWNhdGlvbnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQg''@;'; put 'put ''MTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDQgMzAgOCAyNiA4IDI2IDEwIDMyIDEwIDMyIDQgMzAgNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0''@;'; put 'put ''IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUgMzAgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cG9s''@;'; put 'put ''eWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkg''@;'; put 'put ''MzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgOCAxNSA4''@;'; put 'put ''IDE1IDEwIDIxIDEwIDIxIDQgMTkgNCAxOSA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMTkgMTUgMTkgMTUgMjEgMjEgMjEgMjEgMTUgMTkgMTUgMTkgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDMwIDE1IDMwIDE1''@;'; put 'put ''IDMyIDIxIDMyIDIxIDI2IDE5IDI2IDE5IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCA4IDQgOCA0IDEwIDEwIDEwIDEwIDQgOCA0IDggOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0i''@;'; put 'put ''OCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAx''@;'; put 'put ''NSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTUgMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFs''@;'; put 'put ''ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdv''@;'; put 'put ''biBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDhIMTV2Mmg0TDE5LDkuODksMjEsNi41''@;'; put 'put ''VjRIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43''@;'; put 'put ''OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWln''@;'; put 'put ''aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0''@;'; put 'put ''IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9''@;'; put 'put ''IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMTBoNEwxOSw5Ljg5LDIxLDYuNVY0SDE1WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iNCIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC04LS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC05LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUJ1aWxkaW5nPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS44''@;'; put 'put ''OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0gyMlY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxOS44OCwzWk0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1i''@;'; put 'put ''YWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2''@;'; put 'put ''IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4''@;'; put 'put ''LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzVjMxSDIz''@;'; put 'put ''djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9''@;'; put 'put ''IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''MS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCww''@;'; put 'put ''LDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJWOC4yNGwyLTMuNDFBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjE1LjM4YTMuNjgsMy42OCwwLDAsMS0yLS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMxIDIzIDMxIDIzIDMzIDMzIDMzIDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw4SDIyVjMzSDMzVjEwQTIsMiwwLDAsMCwzMSw4Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBI''@;'; put 'put ''MjhWMjNoMlptMC01SDI4VjE4aDJabTAtNUgyOFYxM2gyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWNS4xMkEyLjEyLDIuMTIs''@;'; put 'put ''MCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVWOGgy''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWMTQuNjRhMy42NywzLjY3LDAsMCwxLTEtNC43NmwxLTEuNjVWNS4xMkEyLjEyLDIu''@;'; put 'put ''MTIsMCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVW''@;'; put 'put ''OGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRsLS4yMywwVjMzSDMzVjE1LjRaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm00LDVIMjhWMjNoMlptMC01SDI4''@;'; put 'put ''VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx''@;'; put 'put ''TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0''@;'; put 'put ''LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0w''@;'; put 'put ''LTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTVIMjhWMTMuMjJBNy41LDcuNSwwLDAsMSwyMi43OCw4SDIyVjMz''@;'; put 'put ''SDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBIMjhWMjNoMlptMC01SDI4VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjN2Mmg4VjMxSDIzdjJIMzNWMTBBMiwyLDAsMCww''@;'; put 'put ''LDMxLDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2''@;'; put 'put ''VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9''@;'; put 'put ''IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIy''@;'; put 'put ''MyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIwIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVDUFU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjA4LDIzLjA3aC0xMXYxLjVIMjMuODNhLjc1Ljc1LDAsMCwwLC43''@;'; put 'put ''NS0uNzVWMTEuMzNoLTEuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwxOC4xNWEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWOC4xQTIuMSwyLjEsMCwwLDAs''@;'; put 'put ''MjcuOSw2SDI2LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAs''@;'; put 'put ''MS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMw''@;'; put 'put ''LDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNFpNMjgsMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjcuOWEuMS4xLDAsMCwxLC4xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjA2LDI0LjU3SDIzLjgzYS43NS43NSwwLDAsMCwuNzUtLjc1VjExLjMzaC0xLjVWMjMuMDdoLTExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI4VjI3LjlhLjEuMSwwLDAsMS0uMS4xSDguMWEuMS4xLDAsMCwxLS4xLS4xVjguMUEuMS4xLDAsMCwxLDguMSw4SDIyLjc4YTcuNDksNy40OSww''@;'; put 'put ''LDAsMS0uMjgtMkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSww''@;'; put 'put ''LDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwx''@;'; put 'put ''LDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhoMTJsMS4x''@;'; put 'put ''NS0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZI''@;'; put 'put ''NlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEu''@;'; put 'put ''NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTUuNGgtMS41djcuNjdoLTExWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYx''@;'; put 'put ''NS40SDI1djguNDFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjE1LjRoLS43N0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4x''@;'; put 'put ''VjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMw''@;'; put 'put ''aDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ2LDcuNDYsMCwwLDEtNS0xLjkyVjIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgxLjQyQTcu''@;'; put 'put ''NDYsNy40NiwwLDAsMSwyMi41LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhh''@;'; put 'put ''LjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIu''@;'; put 'put ''MmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40''@;'; put 'put ''VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIu''@;'; put 'put ''MSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40''@;'; put 'put ''Wk0yNSwyMy44MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTFoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZU1lbW9yeT0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB4PSI4IiB5PSIxMiIgd2lkdGg9IjQi''@;'; put 'put ''IGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjI0IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw3SDRBMiwyLDAsMCwwLDIsOXY0SDRWOUgzMnY0aDJWOUEyLDIsMCwwLDAsMzIsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTksMTMuNTZBMy42NiwzLjY2LDAsMCwxLDE4LjU3LDEySDE2djhoNFYxNC42NEEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMjQiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjQuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMTkuNTZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOXY0''@;'; put 'put ''SDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0''@;'; put 'put ''PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyQTcuNDYsNy40NiwwLDAsMSwyNS41MSwx''@;'; put 'put ''MkgyNHY4aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMjMuMTNhNy40NSw3LjQ1LDAsMCwxLS41NS0ySDRBMiwyLDAsMCwwLDIsOXY0SDRaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMzQsMTNWOWEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN0gzMlYxM1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFptOCwwSDI0VjEyaDRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTUuMDdIMjhWMjBIMjRWMTUuMDdIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjMxVjIwSDE2VjEyaDIuNjFBMy42OCwzLjY4LDAsMCwxLDE5LDkuNTVMMjAu''@;'; put 'put ''NTIsN0g0QTIsMiwwLDAsMCwyLDl2NEg0djRIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1SDE5VjI5SDMyYTIsMiwwLDAsMCwyLTJWMTdaTTEyLDIwSDhWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NS44bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNi44QTEuMjgsMS4yOCwwLDAsMCwyNi44NS44WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjEzLjIyYTcuMzMsNy4zMywwLDAsMS00LDBWMjBIMjRWMTJoMS41MWE3LjQ4LDcuNDgsMCwwLDEtMi45NC01SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEYXRhQ2x1c3Rlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcu''@;'; put 'put ''OTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMzIsNy4yNywzMiw3LjkxVjE4LjI0YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQu''@;'; put 'put ''MDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUy''@;'; put 'put ''LTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''OCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDks''@;'; put 'put ''MTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2''@;'; put 'put ''LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDE4LjI0VjcuOTFjMC0uNjUsMi4wOS0xLjg0LDUuNS0xLjg0UzE1LDcuMjcsMTUsNy45MVY5LjdhMTguNzUsMTguNzUsMCwwLDEsMi0uMlY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0''@;'; put 'put ''Ljc3LDIxLjY3LDcuOSwyMlYyMEM1LjQ2LDE5LjY4LDQsMTguNzgsNCwxOC4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuNjUsMTguNTJjLS44NSwxLTMuNDIsMi02LjY1''@;'; put 'put ''LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEy''@;'; put 'put ''Ljc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOGwuNzUsMGEzLjY5LDMuNjksMCwwLDEtLjA4LTJsLS42NiwwYy00LjkzLDAtOC42NSwxLjg4LTgu''@;'; put 'put ''NjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuNGgtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0x''@;'; put 'put ''Ljc1LjYzLTMsMS42OC0zLDMuMTJWOS41bC4yNSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjIuODRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJj''@;'; put 'put ''My4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI''@;'; put 'put ''MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUu''@;'; put 'put ''NDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIs''@;'; put 'put ''NC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVptNi42NSw3LjY3Yy0uODUsMS0zLjQyLDItNi42NSwyQTE0LjQ5LDE0LjQ5LDAsMCwxLDE0LDIwdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYs''@;'; put 'put ''MTIuNzYsMCwwLDAsNi42NS0xLjU2djMuMTJjLS44NSwxLTMuNDIsMi02LjY1LDJhMTQuNDksMTQuNDksMCwwLDEtNC0uNTN2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2Mi4yOWMwLC45NS0yLjY1LDIuMzgtNi42NSwyLjM4cy02LjY1''@;'; put 'put ''LTEuNDMtNi42NS0yLjM4VjE1LjIzYzAtLjk1LDIuNjUtMi4zOCw2LjY1LTIuMzhzNi42NSwxLjQzLDYuNjUsMi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDcuOTFjMC0u''@;'; put 'put ''MzMuNTUtLjgsMS41NC0xLjE4LDAtLjI0LDAtLjQ4LDAtLjczYTcuNTIsNy41MiwwLDAsMSwuMTQtMS40MUMyMC41NSw1LjE5LDE5LDYuMywxOSw3LjkxVjkuNWExOC43NSwxOC43NSwwLDAsMSwyLC4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2NWMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1di01LjlBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI2LjUsNC4wOEMyMi43Nyw0LjA4LDE5LDUuNCwxOSw3LjkxVjkuNDhjNS4zLjI2LDksMi42LDksNS43NnY2LjdsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQuMDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAs''@;'; put 'put ''MCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEu''@;'; put 'put ''MTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQt''@;'; put 'put ''Ny41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjM5LTIuN2wtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43''@;'; put 'put ''NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1''@;'; put 'put ''LTEuMTEsOC42My0zLjExVjE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDQuOGMtMS43NS42My0zLDEuNjgtMywzLjEy''@;'; put 'put ''VjkuNDhsLjI3LDBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOHY2LjUzbC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDkuNDhWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIs''@;'; put 'put ''Ny45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJMOCwyMS45M3YtNi43QzgsMTIuMDgsMTEuNyw5Ljc0LDE3LDkuNDhaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1''@;'; put 'put ''Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4y''@;'; put 'put ''MSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwx''@;'; put 'put ''MC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTQtMS40QzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS40OGExNS4zMywxNS4zMywwLDAs''@;'; put 'put ''MSw1LDFBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI3LjM1LDEzYTQsNCwwLDAsMSwuNywyLjIzdjYu''@;'; put 'put ''N2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxMi4zM0E3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNDlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI1Ljk5IiBy''@;'; put 'put ''PSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlUmVzb3VyY2VQb29sPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxLjczYTE0LDE0LDAsMCwx''@;'; put 'put ''LC4yMiwxLjZIMTcuNDlMOC4zLDI4LjA3QTE0LDE0LDAsMCwxLDIyLjA5LDQuNjJsMS0xLjc2QTE2LDE2LDAsMSwwLDM0LDE4YTE2LDE2LDAsMCwwLS4yMy0yLjYxWk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAs''@;'; put 'put ''MCwwLDE4LDJaTTQsMThhMTQsMTQsMCwwLDEsMjcuOTUtMUgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsNCwxOFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yLDEzLjRhMTMuOTEsMTMuOTEsMCwwLDEsLjc1LDMuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuNjEsNC44YTcuNDMsNy40MywwLDAsMSwuNTgtMS45MiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDku''@;'; put 'put ''OTNBNy40Myw3LjQzLDAsMCwxLDMxLjIsMTMuNFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguNTcsMzAuOUExNiwxNiwwLDAsMCwzMy45NSwxOUgx''@;'; put 'put ''OC40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN0ExNiwxNiwwLDEsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN2ExNS45MSwxNS45MSwwLDAsMC0uODQtNC4xOCw3''@;'; put 'put ''LjQ5LDcuNDksMCwwLDEtOS45Mi05Ljk0QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE2LDE2LDAsMCwwLS4xOC0xLjYxSDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDQuMDYtN0ExNiwxNiwwLDAsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVTaGllbGRDaGVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYu''@;'; put 'put ''NjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUu''@;'; put 'put ''MDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQs''@;'; put 'put ''NDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuODgsMTYuODdhMSwxLDAsMCwwLTEuNDEsMS40MWw2LDZMMjYuNCwxMy43N0ExLDEsMCwwLDAsMjUsMTIuMzNsLTkuNDcsOS4x''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz''@;'; put 'put ''LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVptLTQuNTcsNi42NUwxNS41MSwyNC45LDkuMTksMTguNTdhMS40LDEuNCww''@;'; put 'put ''LDAsMSwyLTJMMTUuNTQsMjEsMjQuNzMsMTJhMS40LDEuNCwwLDEsMSwyLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVTaGllbGQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43''@;'; put 'put ''OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQs''@;'; put 'put ''MCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44''@;'; put 'put ''MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMwLDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjR2LjUzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3''@;'; put 'put ''LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTNjMSwuNjQsMi4yLDEuMjcsMy40MywxLjg5bDEtMS43NGE0MS4xLDQxLjEsMCwwLDEtMy44OS0yLjE4TDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0''@;'; put 'put ''Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41djIuNDNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4''@;'; put 'put ''LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0Ni4xOSw0Ni4xOSwwLDAsMCw0LjUxLDIuNDJjMC0uMSwwLS4xOSwwLS4yOWE3LjQ5LDcuNDksMCwwLDEsLjIzLTEuODMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0''@;'; put 'put ''My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMu''@;'; put 'put ''NjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40Myw0''@;'; put 'put ''YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUs''@;'; put 'put ''MTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40Nyww''@;'; put 'put ''LDAsMS03LjI3LTkuMzMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMu''@;'; put 'put ''MTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZVNoaWVsZFg9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUs''@;'; put 'put ''MCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1''@;'; put 'put ''VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMw''@;'; put 'put ''LDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjgxLDEwLjc5LDE4LDE1LjYxbC00LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxN2wtNC44MSw0LjgxYTEsMSwwLDEsMCwxLjQxLDEu''@;'; put 'put ''NDFMMTgsMTguNDNsNC44MSw0LjgxYTEsMSwwLDAsMCwxLjQxLTEuNDFMMTkuNDEsMTdsNC44MS00LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjI1LDcuNGE0My43''@;'; put 'put ''OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4x''@;'; put 'put ''MmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTI0LjUxLDIxLjU1YTEuNCwxLjQsMCwwLDEtMiwyTDE4LDE5bC00LjUzLDQuNTNhMS40MywxLjQzLDAsMCwxLTIsMCwxLjQsMS40LDAsMCwxLDAtMkwxNiwxN2wtNC41My00LjUzYTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE1bDQu''@;'; put 'put ''NTMtNC41M2ExLjQsMS40LDAsMCwxLDIsMkwyMCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUltcG9ydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsNEgxNC44N0w4LDEwLjg2VjE1aDJWMTMuNjFoNy42''@;'; put 'put ''MVY2SDI4VjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaTTE2LDEySDEwdi0uMzJMMTUuNyw2SDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4y''@;'; put 'put ''OGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQs''@;'; put 'put ''MjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI4LDE1LjRWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42''@;'; put 'put ''MVY2aDMuNjhsMS4xNS0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFs''@;'; put 'put ''ZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQsMjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxMy4yMlYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjE1aDJabTAtMS45MkwxNS43LDZIMTZ2NkgxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42''@;'; put 'put ''OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxNC44''@;'; put 'put ''N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhhMSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhh''@;'; put 'put ''MSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVFeHBvcnQ9KDAsbS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDI0djguMzhoMlY2YTIsMiwwLDAsMC0yLTJIMTAuODdMNCwxMC44N1YzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJINlptMC0xLjkyTDExLjY5LDZIMTJ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNmg3LjY4bDEuMTUtMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQx''@;'; put 'put ''TDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMTIuMzRh''@;'; put 'put ''Ny41Myw3LjUzLDAsMCwxLTItMS44NXYzLjg5aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMC44N0w0''@;'; put 'put ''LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAs''@;'; put 'put ''MCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEu''@;'; put 'put ''NDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMxLjE2LDIx''@;'; put 'put ''SDI2djJoNS4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzUsMjJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjE1LjRIMjIuMjNB''@;'; put 'put ''My42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEu''@;'; put 'put ''NDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjEyLjM0QTcuNDYsNy40NiwwLDAsMSwyMi43OCw0SDEwLjg3TDQsMTAuODZWMzBh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVXBsb2FkQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEs''@;'; put 'put ''MC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMs''@;'; put 'put ''OC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4y''@;'; put 'put ''OCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUu''@;'; put 'put ''NCw4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4''@;'; put 'put ''LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDIxdjJoNS4zOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUt''@;'; put 'put ''NSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgsOCwwLDAsMCw0LjU0LTE0LjU2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwx''@;'; put 'put ''MC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42Niw3LjY2LDAsMCwxLDMuNiwxOC4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyks''@;'; put 'put ''Ri5DbHJTaGFwZURvd25sb2FkQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEsMC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5LjY1LDkuNjUsMCwwLDAsMTAuODksMjhhMywzLDAsMCwx''@;'; put 'put ''LDAtMkE3LjY1LDcuNjUsMCwwLDEsMTEsMTAuNzRsLjY3LDAsLjIzLS42M2E4LjQzLDguNDMsMCwwLDEsOC01LjQsOC4yNiw4LjI2LDAsMCwxLDguNDUsOCw3Ljc1LDcuNzUsMCwwLDEsMCwuOGwtLjA4LjcyLjY1LjNBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSwwLDJoMS4y''@;'; put 'put ''OGE4LDgsMCwwLDAsMy45My0xNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdB''@;'; put 'put ''MSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSww''@;'; put 'put ''LDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg3''@;'; put 'put ''LDQuNjlhOC44MSw4LjgxLDAsMCwxLDIsLjI1bDEtMS44YTEwLjgsMTAuOCwwLDAsMC0zLjA3LS40NSwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTgu''@;'; put 'put ''NDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSww''@;'; put 'put ''LDJoMS4yOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42''@;'; put 'put ''OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdBMSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwxMC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww''@;'; put 'put ''LDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTguNDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCw0LjU0LTE0LjYxWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAg''@;'; put 'put ''ICAgICAnKSxGLkNsclNoYXBlUGx1Z2luPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAs''@;'; put 'put ''MCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2Wm0yLjQxLDdBMywzLDAsMCwxLDMwLDI0SDI3djcuODNINFYy''@;'; put 'put ''NUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoOFYxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEs''@;'; put 'put ''MzIuMjIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyN1YxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEsMzIuMjIsMjMsMywzLDAsMCwxLDMwLDI0''@;'; put 'put ''SDI3djcuODNINFYyNUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoLjY2TDIxLDYuNTlBNS4xMiw1LjEyLDAsMCwwLDE2LjUx''@;'; put 'put ''LDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4x''@;'; put 'put ''NSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEs''@;'; put 'put ''MTZIMjlWMTMuNDNhNy40NSw3LjQ1LDAsMCwxLTItLjU1VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNo''@;'; put 'put ''OVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g0LjA2YTcuNDQsNy40NCwwLDAsMS0uNTEtMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEz''@;'; put 'put ''LjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWOC44M2EyLDIsMCwwLDAtMi0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1''@;'; put 'put ''LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgy''@;'; put 'put ''OXYtLjZIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwy''@;'; put 'put ''M0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWMTMuNDNhNy41LDcuNSwwLDAsMS02LjQ1LTYuNTlIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4x''@;'; put 'put ''MywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFw''@;'; put 'put ''ZUZsb3BweT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuMzYsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjguNzhaTTI1LDMwSDExVjIySDI1Wm01LDBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2''@;'; put 'put ''NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJIMTJWNkgyNi41MUwzMCw5LjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAs''@;'; put 'put ''MCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0xLjY4bC0uNDMtLjNIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwz''@;'; put 'put ''MCwxMy41Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAsMCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMmg3LjM1YTMuNTQsMy41NCwwLDAsMS0uNzctMkgxMlY2aDku''@;'; put 'put ''MjlsMS4xNS0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjUsMzBIMTFWMjJIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSww''@;'; put 'put ''LDAsMSwyNiwyMS41Wk0yNCwxNEgxMmEyLDIsMCwwLDEtMi0yVjZoMnY2SDI2QTIsMiwwLDAsMSwyNCwxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDYsNy40NiwwLDAsMS00LTEuMThBMiwyLDAs''@;'; put 'put ''MCwxLDI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjUuNTRhNy40NSw3LjQ1LDAsMCwxLTIuNzYtOEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUs''@;'; put 'put ''MCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZoNi41OEEzLjY3LDMuNjcsMCwwLDEsMTksOS44OUwyMi40NSw0SDZB''@;'; put 'put ''MiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSwwLDAsMSwyNiwyMS41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQ29tcHV0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI5LjYgMjIuODggOS42IDEwLjYgMjQuNCAxMC42IDI1Ljk4IDkgOCA5IDgg''@;'; put 'put ''MjIuODggOS42IDIyLjg4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsN0gzMFYyM2gyVjYuNUExLjUsMS41LDAsMCwwLDMwLjUsNUg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4zNGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2''@;'; put 'put ''LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4z''@;'; put 'put ''NGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LjYsMjIuODhWMTAuNmg5LjE0QTMuNjQsMy42NCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIOFYyMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDIwLjcxbDEuMTUtMkg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjMwIiB5PSIxNS40IiB3aWR0aD0iMiIgaGVpZ2h0PSI3LjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0''@;'; put 'put ''LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4wNy0xSDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZW''@;'; put 'put ''N0gyMi41N0E3LjUyLDcuNTIsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYyM2gyVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMTMsOUg4VjIyLjg4SDkuNlYxMC42SDI0LjA4QTcuNDksNy40OSwwLDAsMSwyMy4xMyw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjlWMjRoM1Y3LjU3QTEuNTQsMS41NCwwLDAsMCwzMC41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yMy44MSwyNmMtLjM1LjktLjk0LDEuNS0xLjYxLDEuNUgxMy43NGMtLjY4LDAtMS4yNi0uNi0xLjYxLTEuNUgxdjEuNzVBMi40NSwyLjQ1LDAsMCwwLDMuNiwzMEgzMi40QTIuNDUsMi40NSwwLDAsMCwzNSwyNy43NVYyNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI5IiB5PSIxNS40IiB3aWR0aD0iMyIgaGVpZ2h0PSI4LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik03LDEwSDE5TDE5LDkuODksMjEuMjksNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LDEwSDIzLjY2QTcuNDYsNy40NiwwLDAsMSwyMi41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJhNy4xNCw3LjE0LDAsMCwxLTMsLjJWMjRoM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEaXNwbGF5PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwx''@;'; put 'put ''LjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzIsMjVINFY1SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIHBvaW50cz0iNy43IDguNzYgMjguMTMgOC43NiAyOS45NCA3LjE2IDYuMSA3LjE2IDYuMSAyMyA3LjcgMjMgNy43IDguNzYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwz''@;'; put 'put ''LjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCww''@;'; put 'put ''LDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4x''@;'; put 'put ''NywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyNUg0VjVIMjEuODdMMjMsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTUu''@;'; put 'put ''MzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgMjMgNy43IDguNzYgMTkuNyA4Ljc2IDIwLjYyIDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUy''@;'; put 'put ''VjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwy''@;'; put 'put ''NiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuMSwyM0g3LjdWOC43NkgyM2E3LjQ0LDcuNDQsMCwwLDEtLjQzLTEuNkg2LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyNUg0VjVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCww''@;'; put 'put ''LDAsMzQsMjUuNVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwx''@;'; put 'put ''LDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwz''@;'; put 'put ''LjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzEsMjEuODNINVY3SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAs''@;'; put 'put ''MS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMXY2LjQzSDVWN0gyMC43MUwyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYx''@;'; put 'put ''LDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwx''@;'; put 'put ''My40M3Y4LjQxSDVWN0gyMi41N2E3LjI5LDcuMjksMCwwLDEsLjU1LTRIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDQsNy40NCwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYu''@;'; put 'put ''Q2xyU2hhcGVUZXJtaW5hbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMlY5LjJINFpNNCwyOVYxMC44SDMyVjI5WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDE1''@;'; put 'put ''LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCAxMy43OSAxOC44IDcgMjEuOTEgNyAy''@;'; put 'put ''NC4xMSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOUg0VjEwLjhIMTguNjhBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwx''@;'; put 'put ''LjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu''@;'; put 'put ''MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjIzIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQu''@;'; put 'put ''MTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMjlI''@;'; put 'put ''NFYxMC44SDI0LjI0YTcuNTEsNy41MSwwLDAsMS0xLTEuNkg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwx''@;'; put 'put ''My4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNi44LDE1LjgxVjEzLjE3bDEwLDQuNTl2Mi4wOGwtMTAsNC41OVYyMS43OGw2LjUx''@;'; put 'put ''LTNaTTIzLjQsMjUuNEgxN1YyM2g2LjRaTTQsOS4yVjdIMzJWOS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bC40LS42OUg0VjdIMjAuNzFs''@;'; put 'put ''MS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTE2LjgsMTkuODNsLTEwLDQuNTlWMjEuNzhsNi41MS0zLTYuNTEtM1YxMy4xN2wxMCw0LjU5Wm02LjYsNS41N0gxN1YyM2g2LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNi43OC00LjNINFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0u''@;'; put 'put ''MDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYu''@;'; put 'put ''Niw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVDb2RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0x''@;'; put 'put ''LjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwz''@;'; put 'put ''LjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsOS44M2EuOS45LDAsMCwwLTEuMDkuNjZMMTUu''@;'; put 'put ''NDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhsMy40NC0xMy44MUEuOS45LDAsMCwwLDE5Ljk0LDkuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwx''@;'; put 'put ''Mi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTYsMTEuNjIsMTUuNDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhMMTkuNzMsMTQuNGEzLjU5LDMuNTksMCwwLDEtMS4xNi0yLjc5WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTItMS4zOEgyNC42NGwzLjI0LDIuMjEtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCww''@;'; put 'put ''LTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCww''@;'; put 'put ''LDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjIxLDE2Ljc4bC02LjUzLTQuNDVBMSwxLDAsMSwwLDIyLjU1LDE0bDUuMzIsMy42My01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45''@;'; put 'put ''LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUFwcGxpY2F0aW9uPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMyIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsNkgzMnY0LjJINFpNNCwzMFYxMS44SDMyVjMw''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRabTAsNi4ySDRWNkgzMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAn''@;'; put 'put ''KSxGLkNsclNoYXBlQmF0dGVyeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNS4xMiw0SDIzVjMuNThBMS41OCwxLjU4LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44''@;'; put 'put ''OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWNS44OEExLjg4LDEuODgsMCwwLDAsMjUuMTIsNFpNMjUsMzJIMTFWNmg0VjRoNlY2aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRWMzJIMTFWNmg0VjRoNlY2aC4yOGwxLjY0LTIuODVBMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMu''@;'; put 'put ''NThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0x''@;'; put 'put ''LjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDEx''@;'; put 'put ''LjU4VjMySDExVjZoNFY0aDZWNkgyMi41QTcuNDcsNy40NywwLDAsMSwyMywzLjM4LDEuNTcsMS41NywwLDAsMCwyMS40MiwySDE0LjU4QTEuNTgsMS41OCwwLDAsMCwxMywzLjU4VjRIMTAuODhBMS44OCwxLjg4LDAsMCwwLDksNS44OFYzMi4xMkExLjg4LDEuODgsMCwwLDAsMTAuODgsMzRI''@;'; put 'put ''MjUuMTJBMS44OCwxLjg4LDAsMCwwLDI3LDMyLjEyVjEyLjg3QTcuNSw3LjUsMCwwLDEsMjUsMTEuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNFYyLjYyQS42LjYsMCww''@;'; put 'put ''LDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NHYtMjhBMS4wOSwxLjA5LDAsMCwwLDI2LDRaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEy''@;'; put 'put ''LjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42NiwzLjY2LDAsMCwxLDIwLjU1LDE1bDIuNzYsNC43OUwxNi45LDE4LjdsMy4zNiw2LjczYTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmwuMDkuMTVBMy42NiwzLjY2''@;'; put 'put ''LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjJWMi42MkEuNi42LDAsMCwwLDIxLjQyLDJIMTQuNThhLjYuNiwwLDAsMC0uNTguNjJWNEgxMEExLjA5LDEuMDksMCwwLDAsOSw1LjA3djI4QTEsMSwwLDAsMCwxMCwzNEgyNmExLDEsMCwwLDAsMS0uOTRWMTIuODdB''@;'; put 'put ''Ny41LDcuNSwwLDAsMSwyMi41LDZaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVNb2JpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTEsNkgyNVYyNEgxMVpt''@;'; put 'put ''MCwyNFYyNkgyNXY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTksMzBIMTdWMjhoMlptLTgtNFY2SDI1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgJyksRi5DbHJTaGFwZVRhYmxldD0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB4PSIxNyIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEy''@;'; put 'put ''LDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWm0wLDJWMjYuMzhINlY0Wk02LDMyVjI4SDMwdjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''MCwySDZBMiwyLDAsMCwwLDQsNFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMzAsMlpNMTksMzJIMTdWMzBoMlpNNiwyOFY0SDMwVjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFw''@;'; put 'put ''ZU5ldHdvcmtHbG9iZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJh''@;'; put 'put ''MTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWm0wLDJhMTIsMTIsMCwwLDEsOC40NCwzLjQ4YzAsLjMzLDAsLjY2LDAsMUExOC41MSwxOC41MSwwLDAsMCwxNCw4LjUzYTIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBj''@;'; put 'put ''LS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS45MiwxMS45MiwwLDAsMSwxNy43NSw0Wm0tMyw1Ljg3QTE3LDE3LDAsMCwxLDI1LjkyLDEwYTE2LjksMTYuOSwwLDAsMS0zLjExLDcsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42''@;'; put 'put ''M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3Wm0tNC0zLjZjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2''@;'; put 'put ''LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4y''@;'; put 'put ''Ny44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQz''@;'; put 'put ''LDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4Wm02LjUxLTguOWEyLjMzLDIuMzMsMCwwLDAtLjMzLTEuMTksMTguNCwxOC40LDAsMCwwLDMuMzktNy4zN3EuNzUuMzUsMS40''@;'; put 'put ''OC43OGExMiwxMiwwLDAsMSwuNDIsOC4yQTE2LDE2LDAsMCwxLDI0LjI3LDE5LjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRoLTJjMCwuMiwwLC40LDAsLjYxYTEyLDEyLDAsMCwxLS41MywzLjUyLDE2LDE2LDAsMCwxLTUtLjQxLDIuMzMsMi4z''@;'; put 'put ''MywwLDAsMC0uMzMtMS4xOSwxOC44NywxOC44NywwLDAsMCwxLjYyLTIuNTJIMjMuODNhMTcuMjksMTcuMjksMCwwLDEtMSwxLjU0LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43''@;'; put 'put ''N0ExNy4wOCwxNy4wOCwwLDAsMSwxOS41Niw5bC44Ny0xLjUxYTE4LjU5LDE4LjU5LDAsMCwwLTYuMzksMSwyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuODgsMTEuODgsMCwwLDEsMjIsNC43OUwy''@;'; put 'put ''MywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFptLTIxLTkuMTNjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCww''@;'; put 'put ''LTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODks''@;'; put 'put ''Mi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45''@;'; put 'put ''MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCww''@;'; put 'put ''LDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTVsLS41MSwwYTExLjkxLDExLjkxLDAsMCwxLS4yNSw2LDE2LDE2LDAs''@;'; put 'put ''MCwxLTUtLjQxLDIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC41OSwxOC41OSwwLDAsMCwyLjc4LTUuMTgsNy40OSw3LjQ5LDAsMCwxLTEuMzEtLjgyLDE3LDE3LDAsMCwxLTIuNjEsNSwyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQu''@;'; put 'put ''OTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzcsMTcsMTcsMCwwLDEsOC41My0uNjIsNy40Myw3LjQzLDAsMCwxLS41Ni0xLjU5QTE4LjU2LDE4LjU2LDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0u''@;'; put 'put ''MTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDIyLjU3LDVhNy40NSw3LjQ1LDAsMCwxLC41My0yQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00Wk0xMC43Niw2LjI3YzAsLjIxLjA2LjQzLjEuNjQuMDkuNDQu''@;'; put 'put ''MjEuODcuMzMsMS4zYTIuMjgsMi4yOCwwLDAsMC0xLjEsMi4yNUExOC4zMiwxOC4zMiwwLDAsMCw1LjksMTQuMjIsMTIsMTIsMCwwLDEsMTAuNzYsNi4yN1ptMCwxNS43MUEyLjM0LDIuMzQsMCwwLDAsOS4yLDIzLjc0bC0uNjQsMEExMS45NCwxMS45NCwwLDAsMSw1LjgsMTYuOTJsLjExLS4x''@;'; put 'put ''OWExNi45LDE2LjksMCwwLDEsNC44MS00Ljg5LDIuMzEsMi4zMSwwLDAsMCwyLjI4LjYzLDE3LjUzLDE3LjUzLDAsMCwwLDUuMzUsNS42NWMuNDEuMjcuODMuNTIsMS4yNS43NkEyLjMyLDIuMzIsMCwwLDAsMTkuNzgsMjBhMTYuOTQsMTYuOTQsMCwwLDEtNi4yLDMuMTFBMi4zNCwyLjM0LDAs''@;'; put 'put ''MCwwLDEwLjc2LDIyWm03LDZhMTEuOTIsMTEuOTIsMCwwLDEtNS44MS0xLjUxbC4yOC0uMDZhMi4zNCwyLjM0LDAsMCwwLDEuNTctMS43OSwxOC40MywxOC40MywwLDAsMCw3LTMuNSwyLjI5LDIuMjksMCwwLDAsMy0uNjIsMTcuNDEsMTcuNDEsMCwwLDAsNC4zMi41NmwuNTMsMEExMiwxMiww''@;'; put 'put ''LDAsMSwxNy43NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''NC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNi45LDE2LjksMCwwLDAsMy4xMS03QTE3LDE3LDAsMCwwLDE0LjcyLDkuODdaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJhMTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWk0yOC4xLDIxLjA5YTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjks''@;'; put 'put ''Mi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMzLDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIs''@;'; put 'put ''Mi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43''@;'; put 'put ''NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCww''@;'; put 'put ''LDEsMTQsOC41M2ExOC41MSwxOC41MSwwLDAsMSwxMi4xMS0uMDdjMC0uMzIsMC0uNjUsMC0xaDBhMTIsMTIsMCwwLDEsMi42MiwzLjg1aDBxLS43My0uNDMtMS40OC0uNzhhMTguNCwxOC40LDAsMCwxLTMuMzksNy4zNywyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwu''@;'; put 'put ''NDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRIMjUuNTZhMTguODcsMTguODcsMCwwLDEtMS42MiwyLjUyLDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAs''@;'; put 'put ''MS0uNjEsMS41M0gyOC4xYTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjksMi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMz''@;'; put 'put ''LDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIsMi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01''@;'; put 'put ''LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41''@;'; put 'put ''OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCwwLDEsMTQsOC41M2ExOC41OSwxOC41OSwwLDAsMSw2LjM5LTFMMjMsM0ExNCwxNCwwLDAsMCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBBMTQsMTQsMCwwLDAsMzEuNzYsMTZDMzEuNzYsMTUu''@;'; put 'put ''OCwzMS43NCwxNS42LDMxLjczLDE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI2LDExLjY0YTE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4y''@;'; put 'put ''OCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE3LjI5LDE3LjI5LDAsMCwwLDEtMS41NGgtMS42QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlhMTcuMDgsMTcuMDgsMCwwLDAtNC44NC44OCwyLjI1LDIuMjUsMCwwLDEtLjQ3LDEuNzdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx''@;'; put 'put ''LjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNSwxMy4zNWE3LjU0LDcuNTQsMCwwLDEtMS41LjE1LDcuNDYsNy40NiwwLDAsMS0zLjI4LS43NiwxOC41OSwxOC41OSwwLDAsMS0yLjc4LDUuMTgsMi4zMywyLjMzLDAsMCwx''@;'; put 'put ''LC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4w''@;'; put 'put ''NmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdh''@;'; put 'put ''Mi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMyww''@;'; put 'put ''LS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU2LDE4LjU2LDAsMCwxLDguNjUtLjg3LDcuNDUsNy40NSwwLDAsMSwuNDEtNC41OUExNCwxNCwwLDAs''@;'; put 'put ''MCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBhMTQsMTQsMCwxLDAsMjcuNjgtNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzIsOS44N2EyLjI1LDIuMjUsMCwwLDEt''@;'; put 'put ''LjQ3LDEuNzcsMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcsMTcsMCwwLDAsMi42MS01LDcuNTIsNy41MiwwLDAsMS0yLjE2LTIuNjdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xy''@;'; put 'put ''U2hhcGVOZXR3b3JrU2V0dGluZ3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjhjLjU0LS4xNCwxLjA2LS4zMiwxLjU5LS41MXYtMS4yYTIuNzcsMi43NywwLDAsMSwuMDYtLjUxLDE3LjQ0LDE3LjQ0LDAsMCwxLTEuODIu''@;'; put 'put ''NjIsMi4yOCwyLjI4LDAsMCwwLTQuMjguNjNsLS40NSwwaDBhMTEuOTMsMTEuOTMsMCwwLDEtMi44OC03LjI3LDE3Ljc5LDE3Ljc5LDAsMCwxLDUtNC43MiwyLjIzLDIuMjMsMCwwLDAsMi4yOS41NiwxOC41MiwxOC41MiwwLDAsMCw0LjQ3LDUsMi43NCwyLjc0LDAsMCwxLC4yMS0uMjRsLjk1''@;'; put 'put ''LS45MWExNi45LDE2LjksMCwwLDEtNC4zNS00Ljc5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNGwuMTksMGgxLjU2YTE5LDE5LDAsMCwwLC45MS0yLjcyYy40My4xOS44''@;'; put 'put ''NC40MSwxLjI2LjY0YTExLjk0LDExLjk0LDAsMCwxLDEsNC4wOWwwLDBBMi43NywyLjc3LDAsMCwxLDMwLDE2YTIuNzMsMi43MywwLDAsMSwuNjguMUExNCwxNCwwLDEsMCwxNi4wOCwzMWEyLjcyLDIuNzIsMCwwLDEsMC0yQTExLjkzLDExLjkzLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1''@;'; put 'put ''YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCwwLDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAs''@;'; put 'put ''MCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwxOS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI1LDIxLjE5QTMuODQsMy44NCwwLDEsMCwyOC44OCwyNSwzLjg3LDMuODcsMCwwLDAsMjUsMjEuMTlabTAsNi4wOEEyLjI0LDIuMjQsMCwxLDEsMjcuMjgsMjUsMi4yNiwyLjI2LDAsMCwxLDI1LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMTcsMjQuMTRhMS4xNCwxLjE0LDAsMCwwLS43LTEuMWwtMS41Ni0uNDZxLS4xMS0uMzItLjI2LS42M2wuNzItMS4zM2ExLjE0LDEuMTQsMCwwLDAtLjIxLTEuMzRsLTEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAtMS4zNC0uMmwtMS4zNC43''@;'; put 'put ''MWE3LjI4LDcuMjgsMCwwLDAtLjY3LS4yOEwyNywxNi43MWExLjE0LDEuMTQsMCwwLDAtMS4wOC0uNzZIMjRhMS4xNCwxLjE0LDAsMCwwLTEuMDguOGwtLjQ0LDEuNDNhNy4zMiw3LjMyLDAsMCwwLS42OC4yOGwtMS4zMi0uN2ExLjE0LDEuMTQsMCwwLDAtMS4zMy4xOWwtMS4zNywxLjMxYTEu''@;'; put 'put ''MTQsMS4xNCwwLDAsMC0uMjEsMS4zNWwuNywxLjI4cS0uMTYuMzItLjI4LjY1TDE2LjU4LDIzYTEuMTMsMS4xMywwLDAsMC0uODEsMS4wOXYxLjg3QTEuMTQsMS4xNCwwLDAsMCwxNi41OSwyN2wxLjQ3LjQ0cS4xMi4zMi4yOC42NGwtLjcyLDEuMzVhMS4xNCwxLjE0LDAsMCwwLC4yLDEuMzVs''@;'; put 'put ''MS4zNCwxLjMyYTEuMTQsMS4xNCwwLDAsMCwxLjM0LjJsMS4zNy0uNzJxLjMxLjE0LjYzLjI2bC40NCwxLjQ3YTEuMTQsMS4xNCwwLDAsMCwxLjA5LjhoMS45QTEuMTQsMS4xNCwwLDAsMCwyNywzMy4zMWwuNDQtMS40N2MuMjEtLjA3LjQyLS4xNi42Mi0uMjVsMS4zOC43M2ExLjE0LDEuMTQs''@;'; put 'put ''MCwwLDAsMS4zMy0uMmwxLjM0LTEuMzJhMS4xNCwxLjE0LDAsMCwwLC4yMS0xLjM1bC0uNzMtMS4zNHEuMTQtLjMuMjUtLjZsMS41LS40NEExLjEzLDEuMTMsMCwwLDAsMzQuMTcsMjZabS0xLjYsMS41LTIsLjU4LS4xMi40MkE1LjU1LDUuNTUsMCwwLDEsMzAsMjcuNzNsLS4yMS4zOCwxLDEu''@;'; put 'put ''NzktLjg2Ljg0LTEuODItMS0uMzcuMmE1Ljc4LDUuNzgsMCwwLDEtMS4xMi40NmwtLjQyLjEyLS41OSwySDI0LjM4bC0uNTktMS45NS0uNDItLjEyQTUuODYsNS44NiwwLDAsMSwyMi4yNCwzMGwtLjM3LS4yLTEuODEsMS0uODYtLjg1LDEtMS44Mi0uMjItLjM4YTUuNiw1LjYsMCwwLDEtLjQ5''@;'; put 'put ''LTEuMTNsLS4xMy0uNDEtMS45NS0uNThWMjQuNDJsMS45NC0uNTguMTItLjQxYTUuNTMsNS41MywwLDAsMSwuNDktMS4xNGwuMjItLjM5LTEtMS43My44Ny0uODQsMS43Ny45NC4zOC0uMjFhNS44LDUuOCwwLDAsMSwxLjE3LS40OWwuNDEtLjEyLjU5LTEuOTFoMS4yM2wuNTgsMS45LjQxLjEy''@;'; put 'put ''YTUuNzksNS43OSwwLDAsMSwxLjE2LjQ4bC4zOC4yMSwxLjgtLjk1Ljg2Ljg1LTEsMS43Ny4yMS4zOGE1LjUzLDUuNTMsMCwwLDEsLjQ3LDEuMTNsLjEyLjQyLDEuOTMuNTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0zNCwyMy42MywzMiwyM2E3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjksMTcuODZhLjM3LjM3LDAsMCwwLS40NC0uMDdsLTEuODUsMWE3LDcsMCwwLDAtMS40My0uNjFsLS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4z''@;'; put 'put ''Ny4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxTDIwLDE3LjhhLjM3LjM3LDAsMCwwLS40NC4wN0wxOCwxOS4zMWEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LDcsMCwwLDAsMTguMzUsMjNsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCww''@;'; put 'put ''LDAsLjI2LjM1bDIsLjYxQTcsNywwLDAsMCwxOSwyOC4zN2wtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NGwxLjQ1LDEuNDVhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwu''@;'; put 'put ''MzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhBNyw3LDAsMCwwLDMxLjk1LDI3bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjI0QS4zNy4zNywwLDAsMCwzNCwy''@;'; put 'put ''My42M1ptLTguODMsNC43MkEzLjMzLDMuMzMsMCwxLDEsMjguNTMsMjUsMy4zMywzLjMzLDAsMCwxLDI1LjE5LDI4LjM0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44NSwyNy40NGEyLjI5LDIuMjksMCwwLDAs''@;'; put 'put ''MS43NC0xLjY4LDE5LjcxLDE5LjcxLDAsMCwwLDEuODktLjZWMjMuOTVhMiwyLDAsMCwxLC4wOS0uNTUsMTcuNDIsMTcuNDIsMCwwLDEtMi4xNy43OCwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEs''@;'; put 'put ''NS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNjUsNS4wOSwxLjkzLDEuOTMsMCwwLDEsLjIzLS4zMmwuODktLjg3YTE2Ljg5LDE2Ljg5LDAsMCwxLTQuNDktNC44OSwyLjI3LDIuMjcsMCwwLDAsLjM1LTEuMmMwLS4wNywwLS4xNCwwLS4yMkExNy42''@;'; put 'put ''OSwxNy42OSwwLDAsMSwyNSwxMWExNy40OSwxNy40OSwwLDAsMS0xLjE1LDMuMzUsMS45NCwxLjk0LDAsMCwxLC4zMS0uMDVoMS40NWExOS4wNiwxOS4wNiwwLDAsMCwuOS0yLjdjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTMsMTEuOTMsMCwwLDEsMSw0LjYzbDEtLjUxYTIsMiwwLDAsMSwu''@;'; put 'put ''OTItLjIzaC4wOEExNCwxNCwwLDEsMCwxNi40NCwzMWExLjk0LDEuOTQsMCwwLDEsLjEyLTEuNDZsLjI4LS41M2gtLjA3QTExLjkxLDExLjkxLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCww''@;'; put 'put ''LDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAsMCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwx''@;'; put 'put ''OS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMC43''@;'; put 'put ''OCw4LjQxQTIsMiwwLDAsMCwyOC44Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1pNMzIsMjdINFYxOS4wNkw3LjEzLDlIMjgu''@;'; put 'put ''ODdMMzIsMTkuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9''@;'; put 'put ''IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMywxNS40SDMwLjg2TDMyLDE5LjA2''@;'; put 'put ''VjI3SDRWMTkuMDZMNy4xMyw5SDE5LjU2bDEuMTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyLjEyIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIi''@;'; put 'put ''IHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40N2wtMS42NS01LjMyYTcuNDksNy40OSwwLDAsMS0yLC4zM0wzMiwxOS4wNlYyN0g0VjE5LjA2TDcuMTMsOWgxNmE3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCww''@;'; put 'put ''LS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAs''@;'; put 'put ''NS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW''@;'; put 'put ''MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMTNBMiwyLDAs''@;'; put 'put ''MCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW''@;'; put 'put ''MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu''@;'; put 'put ''MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMi4yNiwxMy4xNUE3LjQ5LDcuNDksMCwwLDEsMjIuNTcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNmEyLDIsMCwwLDAtLjA5LS41OVpNOC45MiwyNUg3''@;'; put 'put ''LjEyVjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMEgyMi4xVjIyaDEuOFptNSwwSDI3LjFWMjJoMS44Wk0zMSwxOS40SDVWMThIMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlUm91dGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwx''@;'; put 'put ''NC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zOCwxNS40SDI4LjU0TDMwLjE1LDE3SDIyLjQ2YTEsMSwwLDEsMCwwLDJoNy42OWwtMi43MSwyLjY5YTEsMSwwLDAsMCwxLjQxLDEuNDJMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2wxLjE1LTEuMTYtLjEtLjE1QTMuNjgsMy42OCwwLDAsMSwxOSwxMFYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40''@;'; put 'put ''MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTQuODdsNS4xMS01LjE0''@;'; put 'put ''YTEsMSwwLDEsMC0xLjQyLTEuNDFMMTksMTFWMy4zM2ExLDEsMCwwLDAtMiwwVjExTDE0LjMxLDguMzJhMSwxLDAsMSwwLTEuNDIsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMTgsMS42N2ExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwxLjY3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1''@;'; put 'put ''LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEw''@;'; put 'put ''LjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44''@;'; put 'put ''LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44''@;'; put 'put ''MiwxNS4zOUgyOC42OEwzMSwxNy42N2wtNC4xOSw0LjA5YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMS41LTEuNDdIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTMtMS41MUwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDEsMSwxNSw5''@;'; put 'put ''LjkybDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2NC40OUEzLjY1LDMuNjUsMCwwLDEsMTksOS44OWw0LjIyLTcuMzFBMTYsMTYsMCwxLDAsMzQsMTcuNjcsMTYsMTYsMCwwLDAsMzMuODIsMTUuMzlabS0yMy41LDYuMzVhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQu''@;'; put 'put ''MDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUs''@;'; put 'put ''MjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwy''@;'; put 'put ''MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4yMiwxMi43NkE3LjQ5LDcuNDksMCwwLDEsMjMuMzIsMi42YTE2LDE2LDAsMSwwLDkuOSwxMC4xN1pNMTMuODYsOS45MmEuOC44LDAsMCwxLDEuMTMsMGwyLjIxLDIuMTlWNS45M2EuOC44LDAsMCwxLDEuNiwwdjYuMThMMjEs''@;'; put 'put ''OS45MmEuOC44LDAsMSwxLDEuMTMsMS4xNEwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDAsMSwxMy44Niw5LjkyWk0xMC4zMiwyMS43NGEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAs''@;'; put 'put ''MS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAs''@;'; put 'put ''MCwxLDIyLjE0LDI1LjQxWm00LjY3LTMuNjZhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0yLjItMi4xNGEuOC44LDAsMSwxLDEuMTItMS4xNEwzMSwxNy42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVWTT0oMCxtLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBkPSJNMTEsNUgyNVY4aDJWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTBIMTd2Mmg4djZoMlYxMmgz''@;'; put 'put ''VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjEuODdMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djYuODVoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjE1LjQiIHdpZHRoPSIxLjk5IiBoZWlnaHQ9IjIuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNFYyNkgy''@;'; put 'put ''MlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMTB2MmgxLjU3QTMuNjcsMy42NywwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVoMFYyNkgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40''@;'; put 'put ''OSwwLDAsMSwzMCwxMy41Wk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMmg4djZoMlYxMi44N0E3''@;'; put 'put ''LjUyLDcuNTIsMCwwLDEsMjMuNjYsMTBIMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDI3VjVhMiwyLDAsMCwwLTItMkgxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxNy4xOWEyLDIsMCwwLDAtMiwydjEuNEgyMEEzLjYsMy42LDAsMCwxLDIzLjYsMTd2OEgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEyQTIsMiwwLDAsMCwzMCwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42aDIuNzJMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4xOSwxMGEyLDIs''@;'; put 'put ''MCwwLDAtMiwydjEuNEgxOUEzLjY4LDMuNjgsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjIxLDE1LjRBMy41NSwzLjU1LDAsMCwxLDIzLjYsMTd2OEgyMlYx''@;'; put 'put ''N2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDIyLjlBNy40NSw3LjQ1LDAsMCwxLDIz''@;'; put 'put ''LjEzLDNIMTFBMiwyLDAsMCwwLDksNXY4LjRoNC41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OSw3LjQ5LDAsMCwxLDIzLjY2LDEwSDE3LjE5YTIsMiwwLDAsMC0y''@;'; put 'put ''LDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVk1XQXBwPSgwLG0uY2xySWNvblNWRykoJzxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIg''@;'; put 'put ''MjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMCA0IDIwIDggMjIgOCAyMiA2IDMwIDYgMzAgMTQgMjggMTQgMjggMTYgMzIgMTYgMzIgNCAyMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIx''@;'; put 'put ''MSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjI4IDIyIDMwIDIyIDMwIDMwIDIyIDMwIDIyIDI4IDIwIDI4IDIwIDMyIDMyIDMyIDMyIDIwIDI4IDIwIDI4IDIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRo''@;'; put 'put ''PSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmwwLS4xVjE3aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRl''@;'; put 'put ''ZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjIuNDUgNCAyMCA0IDIwIDggMjAuMTQgOCAyMi40NSA0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIx''@;'; put 'put ''NS40IiB3aWR0aD0iNCIgaGVpZ2h0PSIwLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50''@;'; put 'put ''cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0''@;'; put 'put ''IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDZoLjVhNy40OSw3LjQ5''@;'; put 'put ''LDAsMCwxLC4yOC0ySDIwVjhoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjE0SDI4djJoNFYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxMS41OGE3LjUzLDcuNTMsMCwwLDEtLjU4LS41OEgxOXY2aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC05LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQ2VydGlmaWNh''@;'; put 'put ''dGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhINFY4SDMybDAsOC41NmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxVjhBMiwyLDAsMCwwLDMyLDZaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2''@;'; put 'put ''IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQt''@;'; put 'put ''MTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0i''@;'; put 'put ''MS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYs''@;'; put 'put ''Ni4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIN3YxLjZIMTkuMDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjEuMTZhOC40MSw4''@;'; put 'put ''LjQxLDAsMCwxLDIsMS44MXYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTls''@;'; put 'put ''LjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9Ijci''@;'; put 'put ''IHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIxNiIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAu''@;'; put 'put ''NjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2My4zNGE4LjQxLDgu''@;'; put 'put ''NDEsMCwwLDEsMiwxLjgxdi02QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI4VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0y''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0TDIwLjQxLDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDMwSDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMzJhMiwyLDAsMCwxLDIsMlYxOC4zN2E4LjM0''@;'; put 'put ''LDguMzQsMCwwLDAtMTMuNDksOS43OWwtLjkzLDEuMTRaTTcsMTJ2MS42SDI0VjEyWm0wLDUuNkgxOFYxNkg3Wm0wLDdIMTdWMjNIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNTlhNi4zNyw2LjM3''@;'; put 'put ''LDAsMSwwLTEwLjc3LDQuNTlsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdBNi4zNCw2LjM0LDAsMCwwLDMzLjgzLDIzLjU5Wm0tMTAuNzQsMGE0LjM3LDQuMzcsMCwxLDEsNC4zNyw0LjMxQTQuMzUs''@;'; put 'put ''NC4zNSwwLDAsMSwyMy4xLDIzLjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2''@;'; put 'put ''LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjkuMjVhOC4zNiw4LjM2LDAsMCwxLDQuNzUsM3YtM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTkuMDcsMTMuNkg3VjEySDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRBOC4zNCw4LjM0LDAsMCwxLDI1LjY2LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAs''@;'; put 'put ''MCwxLDE5LjA3LDEzLjZaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjcuNDYsMTcuMjNhNi4zNiw2LjM2LDAsMCwwLTQuNCwxMWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN2E2LjM2LDYuMzYsMCwwLDAtNC40LTExWm0wLDEwLjY4YTQuMzEsNC4z''@;'; put 'put ''MSwwLDEsMSw0LjM3LTQuMzFBNC4zNSw0LjM1LDAsMCwxLDI3LjQ2LDI3LjkxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg0QTIsMiww''@;'; put 'put ''LDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMzQsMTguMzd2LTZBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThabTYtNEg3VjEySDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksRi5DbHJT''@;'; put 'put ''aGFwZUFyY2hpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''NCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwxOEg2VjE0aDRhMywzLDAsMCwxLS42OC0xLjg3czAtLjA5LDAt''@;'; put 'put ''LjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNBMywzLDAsMCwxLDI2LDE0aDR2NEgyMmwtMiwySDMyVjEz''@;'; put 'put ''LjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00''@;'; put 'put ''LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQxLDIwLjYsMTgsMjJsLTEuNDEtMS40TDE2LDIwSDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjIwSDIwWk0yMiwyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNhMywzLDAsMCwx''@;'; put 'put ''LS44OCwyLjEyTDIyLDE4SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yLDE0LjI1YTMsMywwLDAsMS0uODgtMi4xMnMwLS4wOSwwLS4xM0g1LjVBMS41LDEu''@;'; put 'put ''NSwwLDAsMCw0LDEzLjVWMThIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE5LjE4bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTEuNDFsLTQsMy45NVYzYTEsMSwwLDEsMC0yLDB2MTIuNGwtNC0zLjk1YTEs''@;'; put 'put ''MSwwLDAsMC0xLjQxLDEuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVW5hcmNoaXZlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkg3VjIySDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjIySDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQsMjRhMSwxLDAsMCwwLDEsMWg2YTEsMSwwLDAsMCwwLTJIMTVBMSwxLDAsMCwwLDE0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMThINlYxNGg5VjEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNS43OEEzLDMsMCwwLDEsMTUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0zMC41LDEySDIxdjJoOXY0SDIxYTMsMywwLDAsMS0uNzgsMkgzMlYxMy41QTEuNSwxLjUsMCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLDkuNTUsMTcsNS42''@;'; put 'put ''VjE4YTEsMSwwLDEsMCwyLDBWNS42bDQsMy45NWExLDEsMCwxLDAsMS40MS0xLjQyTDE4LDEuNzgsMTEuNjEsOC4xM0ExLDEsMCwwLDAsMTMsOS41NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxYTMs''@;'; put 'put ''MywwLDAsMS0yLjIyLTFINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjAuMjFBMywzLDAsMCwxLDE4LDIxWm00LDNhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwwLDEsMC0yaDZBMSwxLDAsMCwxLDIyLDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMkg1LjVBMS41LDEuNSwwLDAsMCw0LDEzLjVWMThIMTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2NkgzMlYxMy41QTEuNSwxLjUs''@;'; put 'put ''MCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEs''@;'; put 'put ''MSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUNvbm5lY3Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDI4LjIzQTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxNC4xNWE2LjI1LDYu''@;'; put 'put ''MjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLDVIMjJhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFpNMTcuMDgsMjJIMTQuMTVhNC4xNyw0LjE3LDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00aDIuOTRaTTIyLDIySDE5VjE0aDNhNC4xNyw0''@;'; put 'put ''LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjIsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMkgxNC4xNWE2LjI1LDYuMjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiww''@;'; put 'put ''LDAsMCw2LjIyLDVIMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjIzLDE3QTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxOVYyNGgzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLTVIMzRWMTdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlRGlzY29ubmVjdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTcsNkE2LjIxLDYuMjEsMCwwLDAsNiwxMUgyLjEzdjJINmE2LjIzLDYuMjMsMCwwLDAsNi4yMSw1SDE3VjZaTTE1LjEsMTZI''@;'; put 'put ''MTIuMTdhNC4yLDQuMiwwLDAsMS00LjMxLTQsNC4xNyw0LjE3LDAsMCwxLDQuMzEtNEgxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTIsMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgx''@;'; put 'put ''OXYySDE0YTEsMSwwLDEsMCwwLDJoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAsNi4yMi01aDMuNzZabS0xMCw1SDIxVjIwaDIuOTRhNC4xNyw0LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjMuOTQsMjhaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMiw2YTYuMjEsNi4yMSwwLDAsMC02LjIxLDVIMnYySDUuODNBNi4yMyw2LjIzLDAsMCwwLDEyLDE4SDE3VjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjc5LDIzSDMwLjE0YTYuMjUsNi4yNSwwLDAsMC02LjIxLTVIMTl2MkgxNGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAs''@;'; put 'put ''Ni4yMi01aDMuNjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlTGluaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTcuNiwyNC4zMmwtMi40NiwyLjQ0YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwx''@;'; put 'put ''LDAtNS41NWw0LjY5LTQuNjVhNCw0LDAsMCwxLDUuNjIsMCwzLjg2LDMuODYsMCwwLDEsMSwxLjcxQTIsMiwwLDAsMCwyMS4xLDE4bDEuMjktMS4yOGE1Ljg5LDUuODksMCwwLDAtMS4xNS0xLjYyLDYsNiwwLDAsMC04LjQ0LDBMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2''@;'; put 'put ''LDAsMCwwLDguNDQsMGwzLjY1LTMuNjJjLS4xNywwLS4zMywwLS41LDBBOCw4LDAsMCwxLDE3LjYsMjQuMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42MSw3LjgyYTYsNiwwLDAsMC04LjQ0LDBsLTMu''@;'; put 'put ''NjUsMy42MmMuMTcsMCwuMzMsMCwuNDksMGgwYTgsOCwwLDAsMSwyLjEuMjhsMi40Ni0yLjQ0YTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC42OSw0LjY1YTQsNCwwLDAsMS01LjYyLDAsMy44NiwzLjg2LDAsMCwxLTEtMS43MSwyLDIsMCwwLDAtLjI4LjIzbC0x''@;'; put 'put ''LjI5LDEuMjhhNS44OSw1Ljg5LDAsMCwwLDEuMTUsMS42Miw2LDYsMCwwLDAsOC40NCwwbDQuNjktNC42NWE1LjkyLDUuOTIsMCwwLDAsMC04LjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVVbmxpbms9KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsNSwzLjU5LDYuNDFsOSw5TDguMSwxOS43OWE1LjkxLDUuOTEsMCwwLDAsMCw4LjM5LDYsNiwwLDAsMCw4LjQ0LDBMMjEsMjMuNzhsOC42Myw4LjYzTDMxLDMxWk0xNS4xMywyNi43NmE0LDQsMCwwLDEtNS42MiwwLDMuOTIsMy45MiwwLDAsMSww''@;'; put 'put ''LTUuNTVMMTQsMTYuNzlsNS41OCw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNTMsOS4yMmE0LDQsMCwwLDEsNS42MiwwLDMuOTIsMy45MiwwLDAsMSwwLDUuNTVsLTQuNzksNC43NkwyMy43OCwy''@;'; put 'put ''MWw0Ljc5LTQuNzZhNS45Miw1LjkyLDAsMCwwLDAtOC4zOSw2LDYsMCwwLDAtOC40NCwwbC00Ljc2LDQuNzRMMTYuNzgsMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUNsb3VkTmV0d29yaz0oMCxtLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMzAuNzEsMTUuMTh2LTFBMTEuMjgsMTEuMjgsMCwwLDAsMTkuNTYsMi44M2gtLjExYTExLjI4LDExLjI4LDAsMCwwLTExLDguOTMsNy40Nyw3LjQ3LDAsMCwwLDAsMTQuOTRIMjkuMTNhNS44Niw1Ljg2LDAsMCwwLDEuNTgtMTEuNTJaTTI5LjEzLDI0LjdIOC40''@;'; put 'put ''NmE1LjQ3LDUuNDcsMCwxLDEsMC0xMC45NGgxLjY5bC4xMS0uODdhOS4yNyw5LjI3LDAsMCwxLDE4LjQ1LDEuM3YxLjI4YzAsLjA5LDAsLjE4LDAsLjI3bC0uMDcsMS4xNS45NC4xMWEzLjg2LDMuODYsMCwwLDEtLjQzLDcuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41OCwzMS4xOEgxOC44NXYtMi40aC0ydjIuNEg2LjA4YTEsMSwwLDAsMCwwLDJoMjMuNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYu''@;'; put 'put ''Q2xyU2hhcGVDbG91ZFNjYWxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjMyLDExLjExSDcuODRMOCwxMC4yNEE3LjE5LDcuMTksMCwwLDEsMTUuMDcsNGguMDdhNy4xNSw3LjE1LDAsMCwxLDQuNzEsMS44MywxMS4xLDExLjEsMCwwLDEsMy4wOS42NEE5LjE4LDkuMTgsMCwwLDAs''@;'; put 'put ''MTUuMTYsMmgtLjA5QTkuMiw5LjIsMCwwLDAsNi4xMyw5LjExLDYuMTUsNi4xNSwwLDAsMCwyLjMzLDE5Ljk1LDguMDksOC4wOSwwLDAsMSwzLDE3LjcxYTQuMTIsNC4xMiwwLDAsMS0uODEtMi40NEE0LjE2LDQuMTYsMCwwLDEsNi4zMiwxMS4xMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjQsMTYuOTFoMS41MkwxMiwxNmE3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjE3LDcuMTcsMCwwLDEsNS43LDIuOTIsMTEuMDUsMTEuMDUsMCwwLDEsMi43Mi43Nyw5LjIsOS4yLDAsMCwwLTgu''@;'; put 'put ''NC01LjY5aC0uMDlhOS4yLDkuMiwwLDAsMC04Ljk0LDcuMTIsNi4xNSw2LjE1LDAsMCwwLTMuNjQsMTEsOC4xMSw4LjExLDAsMCwxLC43OS0yLDQuMTQsNC4xNCwwLDAsMSwzLTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMi40MiwyNC40N3YtLjYyYTkuMTgsOS4xOCwwLDAsMC0xOC4xMy0yLjE2QTYuMTYsNi4xNiwwLDAsMCwxNC40OCwzNEgzMWE0Ljg4LDQuODgsMCwwLDAsMS40Ni05LjUzWk0zMSwzMkgxNC40OGE0LjE2LDQuMTYsMCwxLDEsMC04LjMySDE2bC4xMS0uODdhNy4xOSw3LjE5LDAs''@;'; put 'put ''MCwxLDcuMTItNi4yNWguMDdhNy4yMSw3LjIxLDAsMCwxLDcuMTIsNy4yNXYxYzAsLjA3LDAsLjEzLDAsLjJsLS4wNywxLjExLjk0LjExQTIuODgsMi44OCwwLDAsMSwzMSwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAnKSxGLkNs''@;'; put 'put ''clNoYXBlQ2xvdWRUcmFmZmljPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41NCwyMC44MmEuODguODgsMCwwLDAtLjg4LS44OEgyMC43NWwxLjEtMS4xQS44OC44OCwwLDAsMCwyMC42LDE3LjZsLTMuMjEsMy4yMkwyMC42LDI0YS44OC44OCwwLDEsMCwxLjI1LTEuMjRMMjAuNzYs''@;'; put 'put ''MjEuN2g0LjlBLjg4Ljg4LDAsMCwwLDI2LjU0LDIwLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMjcsMjEuN2EuODguODgsMCwxLDAsMC0xLjc2aC0uNThhLjg4Ljg4LDAsMSwwLDAsMS43NloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIxLDIwaC0uMDZhLjg1Ljg1LDAsMCwwLS44NS44OC45MS45MSwwLDAsMCwuOTEuODguODguODgsMCwxLDAsMC0xLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuNTksMTFhLjg4Ljg4LDAsMCwwLTEuMjUsMS4yNGwxLjEsMS4xSDI3LjUzYS44OC44OCwwLDEsMCwwLDEuNzZoNC45bC0xLjA5LDEuMDlhLjg4Ljg4LDAsMCwwLDEuMjUsMS4yNGwzLjIxLTMuMjJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC41LDE1LjA3YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuOSwxNC4yN2EuODUuODUsMCwwLDAtLjg1LS44OEgyMWEuODguODgsMCwxLDAsMCwxLjc2QS45MS45MSwwLDAsMCwyMS45LDE0LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzAuMzYsMjMuNjVjMCwuMTMsMCwuMjYsMCwuMzlhMy43NywzLjc3LDAsMCwxLTMuNjIsMy44OUg3LjI4YTUuMzIsNS4zMiwwLDAsMS01LjEzLTUuNDhBNS4zMiw1LjMyLDAsMCwxLDcuMjgsMTdIOC45MUw5LDE2LjEyYTguOTIsOC45MiwwLDAsMSw4LjYyLThoLjA4YTgu''@;'; put 'put ''NDksOC40OSwwLDAsMSw2LjU2LDMuMjloMi4zN2ExMC41NSwxMC41NSwwLDAsMC04LjkxLTUuMjVoLS4xMUExMC44MiwxMC44MiwwLDAsMCw3LjIyLDE1YTcuMjgsNy4yOCwwLDAsMC03LDcuNDMsNy4yNyw3LjI3LDAsMCwwLDcuMDgsNy40M0gyNi43N0E1LjcyLDUuNzIsMCwwLDAsMzIuMzUs''@;'; put 'put ''MjRhMy43NywzLjc3LDAsMCwwLDAtLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEZXBsb3k9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAsMCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgZD0iTTExLjU0LDEwLjczbC05LDUuMTdhMSwxLDAsMCwwLS41Ljg3djExYTEsMSwwLDAsMCwuNS44N2w5LDUuMTVhMSwxLDAsMCwwLDEsMGw5LTUuMTVhMSwxLDAsMCwwLC41LS44N3YtMTFhMSwxLDAsMCwwLS41LS44N2wtOS01LjE3QTEsMSwwLDAsMCwxMS41NCwxMC43M1pN''@;'; put 'put ''MTEsMzEuMDhsLTctNFYxOC40NGw3LDRaTTEyLDIxLDQuODEsMTYuODcsMTIsMTIuNzhsNy4yMSw0LjEyWm04LDYuMDktNyw0VjIyLjQ0bDctNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAs''@;'; put 'put ''MCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTIuNDYsMTAuNzNhMSwx''@;'; put 'put ''LDAsMCwwLTEsMGwtOC42OCw1TDEyLDIxbDkuMTktNS4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDI3LjczYTEsMSwwLDAsMCwuNS44N0wxMSwzMy40NnYtMTFMMiwxNy4yOFoiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xMywzMy40Nmw4LjUtNC44NmExLDEsMCwwLDAsLjUtLjg3VjE3LjI5bC05LDUuMTVaIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVIZWxpeD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguODgsMTMuMDdhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDEsMSwxLDEuNTJMOS4zNywxMi45MkEuOS45LDAsMCwxLDguODgsMTMuMDdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEzLjI1LDE1LjExYS45LjksMCwwLDEtLjQ5LTEuNjZMMTgsMTAuMDhhLjkuOSwwLDEsMSwxLDEuNTJMMTMuNzQsMTVBLjkuOSwwLDAsMSwxMy4yNSwxNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTkuNzIsMzAuMjNhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDAsMSwxLDEuNTJMMjAuMiwzMC4wOUEuOS45LDAsMCwxLDE5LjcyLDMwLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOC45MiwyNS45NGEuOS45LDAsMCwxLS40OS0xLjY2bDUuMjUtMy4zN2EuOS45LDAsMSwxLDEsMS41MUwxOS40LDI1LjhBLjg5Ljg5LDAsMCwxLDE4LjkyLDI1Ljk0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMS41Niw1LjY5YTMuNTksMy41OSwwLDAsMSwuMTUsMy41M0wxOC44MywxNWgyLjI1bDIuNDMtNC44N2E1LjYxLDUuNjEsMCwwLDAtNS04LjE0SDEzLjI2bC0xLDJoNi4yMkEzLjYxLDMuNjEsMCwwLDEsMjEuNTYsNS42OVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuOTEsMjAuNzhBNS41Myw1LjUzLDAsMCwwLDI3LjY2LDE3SDkuMzFhMy41NCwzLjU0LDAsMCwxLTMuNTYtMy42NywzLjYxLDMuNjEsMCwwLDEsLjQyLTEuNTRsNC4yNi04LjQ5YTEsMSww''@;'; put 'put ''LDEsMC0xLjc5LS45TDQuNCwxMC44NEE1LjY3LDUuNjcsMCwwLDAsNCwxNS4yMiw1LjUzLDUuNTMsMCwwLDAsOS4yOCwxOWg3LjZsLTMuNDQsNi44N2E1LjY0LDUuNjQsMCwwLDAsMS41LDYuOTJBNS4zOCw1LjM4LDAsMCwwLDE4LjQxLDM0aDUuMjVsMS0ySDE4LjQzYTMuNTgsMy41OCwwLDAs''@;'; put 'put ''MS0zLjIyLTUuMjFMMTkuMTEsMTloOC41NGEzLjQyLDMuNDIsMCwwLDEsMi4xNS43MSwzLjU3LDMuNTcsMCwwLDEsMSw0LjQzbC00LjEyLDguMjJhMSwxLDAsMSwwLDEuNzkuOWw0LjA2LTguMUE1LjY3LDUuNjcsMCwwLDAsMzIuOTEsMjAuNzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMTYsMTkuNjNBNS41NSw1LjU1LDAsMCwwLDI3LjQyLDE3SDEwLjA2YTQuMzYsNC4zNiwwLDAsMS0zLjY3LTIsNC4wNyw0LjA3LDAsMCwxLS4xOS00LjEzbDMuNjItNywxLjQyLDEuNjMtMi43NCw1LjMsOC44NC01LjY2''@;'; put 'put ''YS45MS45MSwwLDAsMSwxLDEuNTNMNy44NCwxMy4zOGEyLjEzLDIuMTMsMCwwLDAsLjI0LjUyLDIuMjgsMi4yOCwwLDAsMCwxLjY1LDFMMTguMTEsOS41YS45MS45MSwwLDAsMSwxLDEuNTJMMTMsMTQuOTRIMjAuOGwyLjQxLTQuODJhNS42LDUuNiwwLDAsMC01LTguMTJIOWExLDEsMCwwLDAt''@;'; put 'put ''LjkuNTZMMy44OCwxMC44OWE1LjYsNS42LDAsMCwwLDUsOC4xMmg3LjY1bC0zLjQzLDYuODdhNS42LDUuNiwwLDAsMCw1LDguMTJoOS4yOGExLDEsMCwwLDAsLjkzLS42NWw0LjE0LTguMjRBNS41OCw1LjU4LDAsMCwwLDMyLjE2LDE5LjYzWk0xNy43NSwyNS41N0EuOTEuOTEsMCwwLDEsMTgs''@;'; put 'put ''MjQuMzFsNi0zLjg4QS45MS45MSwwLDEsMSwyNSwyMmwtNiwzLjg4YS45MS45MSwwLDAsMS0xLjI2LS4yN1pNMjksMjQuMzRsLTksNS43OGEuOTEuOTEsMCwxLDEtMS0xLjUzbDktNS43OGEuOTEuOTEsMCwxLDEsMSwxLjUzWiIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlRmxhc2s9KDAsbS5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQzLDI3LjI4LDIzLDE0Ljg0VjRoMWExLDEsMCwwLDAsMC0ySDEyYTEsMSwwLDAsMCwwLDJoMVYxNC44NEw0LjUxLDI3LjM2QTQuMjksNC4yOSwwLDAsMCw1LDMyLjgsNC4zOCw0LjM4LDAsMCwwLDguMTUsMzRIMjhhNC4yNCw0LjI0LDAsMCwwLDMu''@;'; put 'put ''NDItNi43MlpNMjkuODUsMzFhMi42MiwyLjYyLDAsMCwxLTIsMUg4YTIuMiwyLjIsMCwwLDEtMi4wNi0xLjQxLDIuNjgsMi42OCwwLDAsMSwuMjktMi4xN2wzLTQuNDQsMTQsMC0xLjMxLTJIMTAuNTdMMTUsMTUuNDZWNGg2VjE1LjQ2bDguODQsMTMuMDVBMi4yMywyLjIzLDAsMCwxLDI5Ljg1''@;'; put 'put ''LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDksMjcuNCwyMywxNC45NFY0aDFhMSwxLDAsMCwwLDAtMkgxMi4wOGExLDEsMCwwLDAsMCwySDEzVjE0Ljk0TDQuNTgsMjcuMzFhNC4zMSw0LjMxLDAs''@;'; put 'put ''MCwwLS43OCwzQTQuMjMsNC4yMywwLDAsMCw4LDM0SDI3Ljg2QTQuMzYsNC4zNiwwLDAsMCwzMSwzMi44LDQuMjMsNC4yMywwLDAsMCwzMS40OSwyNy40Wk0xNSwxNS40OVY0aDZWMTUuNDlMMjYuMTUsMjNIOS44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICcpLEYuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42OCwxNC44MWE2Ljc2LDYuNzYsMCwxLDEsNi43Ni02Ljc1QTYuNzcsNi43NywwLDAsMSwxNC42OCwxNC44MVptMC0xMS41MWE0Ljc2LDQuNzYsMCwxLDAsNC43Niw0Ljc2''@;'; put 'put ''QTQuNzYsNC43NiwwLDAsMCwxNC42OCwzLjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40MiwzMS42OEEyLjE0LDIuMTQsMCwwLDEsMTUuOCwzMEg0VjI0LjIyYTE0LjgxLDE0LjgxLDAsMCwxLDExLjA5''@;'; put 'put ''LTQuNjhsLjcyLDBhMi4yLDIuMiwwLDAsMSwuNjItMS44NWwuMTItLjExYy0uNDcsMC0xLS4wNi0xLjQ2LS4wNkExNi40NywxNi40NywwLDAsMCwyLjIsMjMuMjZhMSwxLDAsMCwwLS4yLjZWMzBhMiwyLDAsMCwwLDIsMkgxNi43WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODcsMTYuMjlhLjM3LjM3LDAsMCwxLC4xNSwwLC40Mi40MiwwLDAsMC0uMTUsMFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwy''@;'; put 'put ''My4zMmwtMi0uNjFhNy4yMSw3LjIxLDAsMCwwLS41OC0xLjQxbDEtMS44NkEuMzguMzgsMCwwLDAsMzIsMTlsLTEuNDUtMS40NWEuMzYuMzYsMCwwLDAtLjQ0LS4wN2wtMS44NCwxYTcuMTUsNy4xNSwwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM2LjM2LDAsMCwwLS4zNi0uMjRIMjMuODJhLjM2''@;'; put 'put ''LjM2LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNmwtMS44Mi0xYS4zNS4zNSwwLDAsMC0uNDMuMDdMMTcuNjksMTlhLjM4LjM4LDAsMCwwLS4wNi40NGwxLDEuODJBNi43Nyw2Ljc3LDAsMCwwLDE4LDIyLjY5bC0yLC42YS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNUEuMzUu''@;'; put 'put ''MzUsMCwwLDAsMTYsMjZsMiwuNjFhNyw3LDAsMCwwLC42LDEuNDFsLTEsMS45MWEuMzYuMzYsMCwwLDAsLjA2LjQzbDEuNDUsMS40NWEuMzguMzgsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA5LDcuMDksMCwwLDAsMS40LjU3bC42LDJhLjM4LjM4LDAsMCwwLC4zNS4yNmgyLjA1YS4zNy4zNyww''@;'; put 'put ''LDAsMCwuMzUtLjI2bC42MS0yLjA1YTYuOTIsNi45MiwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM2LjM2LDAsMCwwLC40My0uMDdMMzIsMzAuNEEuMzUuMzUsMCwwLDAsMzIsMzBsLTEtMS44OGE3LDcsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM2LjM2LDAsMCwwLC4yNi0uMzVWMjMuNjdBLjM2''@;'; put 'put ''LjM2LDAsMCwwLDMzLjY4LDIzLjMyWk0yNC44NSwyOGEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjMzQTMuMzQsMy4zNCwwLDAsMSwyNC44NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTQuNjciIGN5''@;'; put 'put ''PSI4LjMiIHI9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTYuNDQsMzEuODJhMi4xNSwyLjE1LDAsMCwxLS4zOC0yLjU1bC41My0xLTEuMDktLjMzQTIuMTQsMi4xNCwwLDAsMSwxNCwyNS44NFYyMy43OWEyLjE2''@;'; put 'put ''LDIuMTYsMCwwLDEsMS41My0yLjA3bDEuMDktLjMzLS41Mi0xYTIuMTcsMi4xNywwLDAsMSwuMzUtMi41MiwxOC45MiwxOC45MiwwLDAsMC0yLjMyLS4xNkExNS41OCwxNS41OCwwLDAsMCwyLDIzLjA3djcuNzVhMSwxLDAsMCwwLDEsMUgxNi40NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNywyMy40NmwtMi0uNmE2LjczLDYuNzMsMCwwLDAtLjU4LTEuNDJsMS0xLjg2YS4zNS4zNSwwLDAsMC0uMDctLjQzbC0xLjQ1LTEuNDZhLjM4LjM4LDAsMCwwLS40My0uMDdsLTEuODUsMWE3Ljc0LDcuNzQsMCww''@;'; put 'put ''LDAtMS40My0uNmwtLjYxLTJhLjM4LjM4LDAsMCwwLS4zNi0uMjVIMjMuODRhLjM4LjM4LDAsMCwwLS4zNS4yNmwtLjYsMmE2Ljg1LDYuODUsMCwwLDAtMS40NS42MWwtMS44MS0xYS4zOC4zOCwwLDAsMC0uNDQuMDZsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LjI0''@;'; put 'put ''LDcuMjQsMCwwLDAsMTgsMjIuODNsLTIsLjYxYS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNWEuMzYuMzYsMCwwLDAsLjI2LjM1bDIsLjYxYTcuMjksNy4yOSwwLDAsMCwuNiwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LjE2LDMyYS4zOC4zOCwwLDAsMCwuNDQuMDZsMS44Ny0x''@;'; put 'put ''YTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMi4wNWEuMzguMzgsMCwwLDAsLjM2LjI2aDIuMDVhLjM4LjM4LDAsMCwwLC4zNS0uMjZsLjYtMi4wNWE2LjY4LDYuNjgsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zOC4zOCwwLDAsMCwuNDQtLjA2TDMyLDMwLjU1YS4zOC4zOCwwLDAsMCwuMDYt''@;'; put 'put ''LjQ0bC0xLTEuODhhNi45Miw2LjkyLDAsMCwwLC41Ny0xLjM4bDItLjYxYS4zOS4zOSwwLDAsMCwuMjctLjM1VjIzLjgyQS40LjQsMCwwLDAsMzMuNywyMy40NlptLTguODMsNC43MmEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjM0QTMuMzQsMy4zNCwwLDAsMSwyNC44NywyOC4xOFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVIYXJkRHJpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDhhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y''@;'; put 'put ''Wk0zMiwyOEg0VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS44OCwxOC4wOGEzLjU5''@;'; put 'put ''LDMuNTksMCwxLDAsMy41OS0zLjU5LDMuODQsMy44NCwwLDAsMC0uOTEuMTNMMTUsMTYuMTZhMi4wOCwyLjA4LDAsMCwxLC41LS4wNywyLDIsMCwxLDEtMiwyLDEuNjQsMS42NCwwLDAsMSwuMDgtLjVMMTIsMTcuMTZBMy41MywzLjUzLDAsMCwwLDExLjg4LDE4LjA4WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNDcsMjUuNzNhNy42Niw3LjY2LDAsMCwxLTcuNjUtNy42NSw3LjU1LDcuNTUsMCwwLDEsLjI3LTJMNi41NCwxNS43YTkuMjQsOS4yNCwwLDAsMCwxNy44LDQuOTVIMjIuNjZBNy42NCw3''@;'; put 'put ''LjY0LDAsMCwxLDE1LjQ3LDI1LjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjIsMTcuODNhLjguOCwwLDAsMC0uOC0uOEgyNC42NmE5LjI2LDkuMjYsMCwwLDAtOS4xOS04LjIsOS4zNiw5LjM2LDAs''@;'; put 'put ''MCwwLTIuMzguMzJsLjQyLDEuNTRhNy44Niw3Ljg2LDAsMCwxLDItLjI2QTcuNjYsNy42NiwwLDAsMSwyMywxN0gyMC45MmEuOC44LDAsMCwwLDAsMS42aDYuNUEuOC44LDAsMCwwLDI4LjIyLDE3LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEyLDE3LjE2bDEuNTQuNDJhMS42NCwxLjY0LDAsMCwwLS4wOC41LDIsMiwwLDEsMCwyLTIsMi4wOCwyLjA4LDAsMCwwLS41''@;'; put 'put ''LjA3bC0uNDEtMS41NGEzLjg0LDMuODQsMCwwLDEsLjkxLS4xMywzLjU5LDMuNTksMCwxLDEtMy41OSwzLjU5QTMuNTMsMy41MywwLDAsMSwxMiwxNy4xNlpNNS4zMSw4QTEuMjUsMS4yNSwwLDEsMSw0LjA2LDkuMjUsMS4yNSwxLjI1LDAsMCwxLDUuMzEsOFptMCwyMC4wNmExLjI1LDEuMjUs''@;'; put 'put ''MCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSw1LjMxLDI4LjA2Wm0xMC4xNi0uNzNBOS4yMiw5LjIyLDAsMCwxLDYuNTQsMTUuN2wxLjU1LjQxYTcuNTUsNy41NSwwLDAsMC0uMjcsMiw3LjY0LDcuNjQsMCwwLDAsMTQuODQsMi41N2gxLjY4QTkuMjUsOS4yNSwwLDAsMSwxNS40Nywy''@;'; put 'put ''Ny4zM1ptMTItOC43aC02LjVhLjguOCwwLDAsMSwwLTEuNkgyM2E3LjY2LDcuNjYsMCwwLDAtNy41Ny02LjYsNy44Niw3Ljg2LDAsMCwwLTIsLjI2bC0uNDItMS41NGE5LjM2LDkuMzYsMCwwLDEsMi4zOC0uMzJBOS4yNiw5LjI2LDAsMCwxLDI0LjY2LDE3aDIuNzZhLjguOCwwLDAsMSwwLDEu''@;'; put 'put ''NlptMy4zOSw5LjQzYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDI4LjA2Wm0wLTE3LjU2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDEwLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlSGFyZERyaXZlRGlza3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDUuNzRBMS43NCwxLjc0LDAsMCwwLDI0LjI2LDRIMy43NEExLjc0LDEuNzQsMCwwLDAsMiw1Ljc0VjIwLjI2QTEuNzQsMS43NCwwLDAsMCwzLjc0LDIySDRW''@;'; put 'put ''NkgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2''@;'; put 'put ''SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yNiwxMkgxMS43NEExLjc0LDEuNzQsMCwwLDAsMTAsMTMuNzRWMjguMjZBMS43NCwxLjc0LDAsMCwwLDExLjc0LDMwSDMyLjI2QTEuNzQsMS43''@;'; put 'put ''NCwwLDAsMCwzNCwyOC4yNlYxMy43NEExLjc0LDEuNzQsMCwwLDAsMzIuMjYsMTJaTTMyLDI4SDEyVjE0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsMjMuNjhhMi42NCwyLjY0LDAsMSwwLTIu''@;'; put 'put ''Ny0yLjYzQTIuNjcsMi42NywwLDAsMCwxOS45NCwyMy42OFptMC0zLjg3YTEuMjQsMS4yNCwwLDEsMS0xLjI5LDEuMjRBMS4yNywxLjI3LDAsMCwxLDE5Ljk0LDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTkuOTQsMTYuMjJhNC45Myw0LjkzLDAsMCwxLDQuOTUsNC4zNUgyMy43MVYyMmg0LjQxYS43LjcsMCwwLDAsMC0xLjRIMjYuMzFhNi4zMyw2LjMzLDAsMCwwLTYuMzctNS43NSw2LjU4LDYuNTgsMCwwLDAtMS40OC4xN2wuMzUsMS4zN0E0LjczLDQuNzMsMCwwLDEsMTkuOTQsMTYuMjJa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyNy4yN2E2LjQyLDYuNDIsMCwwLDAsNS42Ny0zLjM1SDIzLjkzYTUsNSwwLDAsMS00LDEuOTUsNC45MSw0LjkxLDAsMCwxLTUtNC44Miw1LjE2LDUuMTYs''@;'; put 'put ''MCwwLDEsLjA4LS43OUwxMy42MywyMGE3LDcsMCwwLDAtLjA5LDFBNi4zMiw2LjMyLDAsMCwwLDE5Ljk0LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQu''@;'; put 'put ''MjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCw5Ljc0QTEuNzQsMS43NCwwLDAsMCwyOC4y''@;'; put 'put ''Niw4SDcuNzRBMS43NCwxLjc0LDAsMCwwLDYsOS43NFYyNC4yNkExLjc0LDEuNzQsMCwwLDAsNy43NCwyNkg4VjEwSDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS42MiwyMi42QTEuNTUsMS41NSwwLDEsMCwx''@;'; put 'put ''OCwyMS4wNSwxLjYsMS42LDAsMCwwLDE5LjYyLDIyLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEu''@;'; put 'put ''NzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMTkuNjIsMTcuNzRhMy4zMSwzLjMxLDAsMSwxLTMuMzgsMy4zMUEzLjM1LDMuMzUsMCwwLDEsMTkuNjIsMTcuNzRabTAsMTEuMTNhNy45NCw3Ljk0LDAsMCwxLTgtNy44''@;'; put 'put ''Miw3LjgzLDcuODMsMCwwLDEsLjExLTEuMjlsMS43NS4zYTUuMzYsNS4zNiwwLDAsMC0uMTEsMSw2LjE4LDYuMTgsMCwwLDAsNi4yOCw2LjA2LDYuMzUsNi4zNSwwLDAsMCw1LTIuNDZoMi4xQTguMDYsOC4wNiwwLDAsMSwxOS42MiwyOC44N1pNMjkuODksMjIuMkgyNC4zNlYyMC40NGgxLjQ4''@;'; put 'put ''QTYuMTksNi4xOSwwLDAsMCwxOS42MiwxNWE2LjQ4LDYuNDgsMCwwLDAtMS40MS4xNmwtLjQ1LTEuN2E4LjE2LDguMTYsMCwwLDEsMS44Ni0uMjIsOCw4LDAsMCwxLDgsNy4yMWgyLjI2YS44OC44OCwwLDAsMSwwLDEuNzZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''IiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlTlZNZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjJWMTRhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMkgyNUEyLDIsMCwwLDAsMjcsMjJaTTExLDE0SDI1djhIMTFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI1LjAxIiB5PSI2''@;'; put 'put ''IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LjgsOEgxNi44N1Y2aC0xMUw3Ljc4LDQuMDhhMSwxLDAsMCwwLDAtMS40MiwxLDEsMCwwLDAtMS40MSwwTDIsNyw2LjM3''@;'; put 'put ''LDExLjRhMSwxLDAsMCwwLDEuNDEsMCwxLDEsMCwwLDAsMC0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuNjEsMjQuNjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQyTDMwLjEsMjhI''@;'; put 'put ''MTl2MkgzMC4ybC0yLDJhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsLjcuMjksMSwxLDAsMCwwLC43MS0uMjlMMzQsMjkuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSIyOCIgd2lkdGg9IjQi''@;'; put 'put ''IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSIyOCIgd2lkdGg9IjEuOTciIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAg''@;'; put 'put ''ICAgICcpLEYuQ2xyU2hhcGVTU0Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIySDRWOEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDE4LjYyYzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJzLS41MywxLjA5LTEuNTUsMS4wOWE0LDQsMCwwLDEt''@;'; put 'put ''Mi43MS0xLjExbC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MnMtMS4xNS0yLjA1LTIuODctMi40NGMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwxLjI1LDAsMCwxLDEwLDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMUE0LjU4''@;'; put 'put ''LDQuNTgsMCwwLDAsMTAsMTMuNjljLTEuNzQsMC0zLDEuMDUtMywyLjQ5UzguMjYsMTguMjIsMTAsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44MywyMC45M2E0LDQsMCwwLDEtMi43MS0xLjEx''@;'; put 'put ''bC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MlMxOS43MywxNy42NSwxOCwxNy4yNmMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwxLjI1LDAsMCwxLDE3LjQ4LDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMWE0LjU2LDQuNTYs''@;'; put 'put ''MCwwLDAtMy4xMi0xLjE1Yy0xLjczLDAtMywxLjA1LTMsMi40OXMxLjE5LDIsMi44OSwyLjQ0YzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJTMTguODUsMjAuOTMsMTcuODMsMjAuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yOS45LDE4YzAtMi40MS0xLjkyLTQuMTItNC42NC00LjEyaC0yLjl2OC4yNGgyLjlDMjgsMjIuMDgsMjkuOSwyMC4zNywyOS45LDE4Wm0tNi0yLjc2aDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC04IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk01LjIxLDhBMS4yNSwxLjI1LDAsMSwxLDQsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4yMSw4Wm0w''@;'; put 'put ''LDIwYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMjEsMjhabTUuMDYtNS43OGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIu''@;'; put 'put ''ODktLjg5LTIuODktMi40NHMxLjIyLTIuNDksMy0yLjQ5YTQuNTgsNC41OCwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFBMy42OCwzLjY4LDAsMCwwLDEwLDE1YTEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRT''@;'; put 'put ''MTIuMjQsMjIuMjIsMTAuMjcsMjIuMjJabTcuNTEsMGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIuODktLjg5LTIuODktMi40NHMxLjIzLTIuNDksMy0yLjQ5''@;'; put 'put ''YTQuNTYsNC41NiwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFhMy42OCwzLjY4LDAsMCwwLTIuMzctMSwxLjI1LDEuMjUsMCwwLDAtMS4zOSwxLjA4YzAsLjY3LjYxLjkxLDEuOTIsMS4yMSwxLjcyLjM5LDIuODcuOTQsMi44NywyLjQ0UzE5Ljc1LDIyLjIyLDE3Ljc4LDIyLjIyWm00LjU4LS4x''@;'; put 'put ''NFYxMy44NGgyLjljMi43MiwwLDQuNjQsMS43MSw0LjY0LDQuMTJTMjgsMjIuMDgsMjUuMjYsMjIuMDhaTTMwLjY5LDI4YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjY5LDI4Wm0wLTE3LjVhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUs''@;'; put 'put ''MCwwLDEsMzAuNjksMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMTUuMmgxLjU2YTIuNzcsMi43NywwLDEsMSwwLDUuNTNIMjMuODZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQmx1ZXRvb3RoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi42NCwyNS4yNywxOSwxNy41MywxOSwzLDI1LjIxLDkuNGwtNS42NSw1Ljc5TDIxLDE2LjYybDUuNjgtNS44MmEyLDIsMCwwLDAsMC0yLjc4TDIwLjQ4LDEuN0EyLjA4''@;'; put 'put ''LDIuMDgsMCwwLDAsMTguODUsMSwyLDIsMCwwLDAsMTcsM1YxNS4zOEwxMC4wNSw4LjI3QTEsMSwwLDAsMCw4LjYyLDkuNjZMMTYuNzksMTgsOS4wNiwyNmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzM2EyLjA3LDIuMDcsMCww''@;'; put 'put ''LDAsLjcxLDEuNjJBMiwyLDAsMCwwLDE5LDM1YTEuOTQsMS45NCwwLDAsMCwxLjQyLS42bDYuMjMtNi4zOEEyLDIsMCwwLDAsMjYuNjQsMjUuMjdaTTE5LDMzLjA1VjIwLjI5bDYuMjEsNi4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMjYuNTIsMjQuNTJsLTUuNjUtNS44My0xLjQ2LTEuNXYtMTJMMjMuNzksOS43bC0zLjYsMy43MSwyLjI0LDIuMjksNC4wOS00LjIyYTIuNTQsMi41NCwwLDAsMCwwLTMuNTZMMjAuNTcsMS43OEEyLjU0LDIuNTQsMCwwLDAsMTYuMiwzLjU1VjEzLjg2bC01LjUzLTUuN2ExLjYsMS42''@;'; put 'put ''LDAsMSwwLTIuMywyLjIzTDE1Ljc1LDE4bC03LDcuMTlhMS42LDEuNiwwLDAsMCwwLDIuMjYsMS42MywxLjYzLDAsMCwwLDEuMTIuNDUsMS41OCwxLjU4LDAsMCwwLDEuMTUtLjQ5bDUuMTEtNS4yN1YzMi40NWEyLjUzLDIuNTMsMCwwLDAsMS41OSwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUu''@;'; put 'put ''MTksMi41NiwyLjU2LDAsMCwwLDEuODMtLjc3bDUuOTUtNi4xNUEyLjU0LDIuNTQsMCwwLDAsMjYuNTIsMjQuNTJaTTE5LjQsMzAuODNWMjEuNzdsNC4zOSw0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPSgw''@;'; put 'put ''LG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwzLDI1LjIyLDkuNGwtNS42Niw1LjhMMjEsMTYuNjNsNS42OC01LjgzYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIsMiwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzdjExLjRsMiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuNzcsNSwzLjM2LDYuNDIsMTUuODksMTksOS4wNiwyNmExLDEsMCwwLDAsLjcxLDEuNywxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzMi45NGEyLjA4LDIuMDgsMCwwLDAsLjcxLDEuNjNBMiwyLDAsMCwwLDE5LDM1YTIsMiwwLDAs''@;'; put 'put ''MCwxLjQyLS42bDUuNDEtNS41NCwzLjU0LDMuNTNMMzAuNzcsMzFaTTE5LDMzLjA1di0xMWw1LjQxLDUuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTkuMzEsNS4xNywyMy43LDkuN2wtMy41OSwzLjcxLDIuMjQsMi4yOSw0LjA5''@;'; put 'put ''LTQuMjJhMi41NiwyLjU2LDAsMCwwLDAtMy41NmwtNi02LjE0YTIuNTEsMi41MSwwLDAsMC0yLjc3LS41OSwyLjU0LDIuNTQsMCwwLDAtMS42LDIuMzZ2MTBsMy4yMSwzLjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC41LDUsMy4wOSw2''@;'; put 'put ''LjQyLDE1LjE3LDE4LjUxLDguNywyNS4xOUExLjYsMS42LDAsMCwwLDkuODUsMjcuOSwxLjU3LDEuNTcsMCwwLDAsMTEsMjcuNDFsNS4xMS01LjI3VjMyLjQ1YTIuNTQsMi41NCwwLDAsMCwxLjYsMi4zNiwyLjQ0LDIuNDQsMCwwLDAsLjk1LjE5LDIuNTUsMi41NSwwLDAsMCwxLjgyLS43N2w1''@;'; put 'put ''LjEyLTUuMjksMy40OSwzLjQ4TDMwLjUsMzFaTTE5LjgxLDMwLjgzVjIyLjY1bDQsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVByb2Nlc3NPblZNPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy40OSwyNi4yOGExLDEsMCww''@;'; put 'put ''LDAtMS4yLS43bC0yLjQ5LjY3YTE0LjIzLDE0LjIzLDAsMCwwLDIuNC02Ljc1QTE0LjQ4LDE0LjQ4LDAsMCwwLDI3LjM3LDcuMzUsMSwxLDAsMCwwLDI2LDcuNDRhMSwxLDAsMCwwLC4wOSwxLjQxLDEyLjQ1LDEyLjQ1LDAsMCwxLDQuMTYsMTAuNDYsMTIuMTksMTIuMTksMCwwLDEtMiw1Ljc0''@;'; put 'put ''TDI4LDIyLjU0YTEsMSwwLDEsMC0xLjk1LjE2bC41LDYuNDQsNi4yNS0xLjY2QTEsMSwwLDAsMCwzMy40OSwyNi4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjMxLDE3LjA4YTEuMDYsMS4wNiwwLDAsMCwuNDQuMTYsMSwxLDAs''@;'; put 'put ''MCwwLDEuMTItLjg1QTEyLjIxLDEyLjIxLDAsMCwxLDE4LjY5LDUuODRMMTYuNDUsNy4zN2ExLDEsMCwwLDAsLjQ3LDEuNzlBMSwxLDAsMCwwLDE3LjU2LDlsNS4zMy0zLjY2TDE4LjMzLjc2YTEsMSwwLDEsMC0xLjM5LDEuMzhsMS43LDEuN0ExNC4yLDE0LjIsMCwwLDAsMy44OSwxNi4xMiwx''@;'; put 'put ''LDEsMCwwLDAsNC4zMSwxNy4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMS43MywyOS45M2ExMiwxMiwwLDAsMS00Ljg0LjUxLDEyLjMsMTIuMywwLDAsMS05LjU3LTYuM2wyLjQ5LjkzYTEsMSwwLDAsMCwuNjktMS44NGwtNC41''@;'; put 'put ''OS0xLjdoMEw0LjQ0LDIxLDMuMzMsMjcuMzVhMSwxLDAsMCwwLC43OSwxLjEzbC4xNywwYTEsMSwwLDAsMCwxLS44MWwuNDItMi40YTE0LjMsMTQuMywwLDAsMCwxMSw3LjE0LDEzLjkxLDEzLjkxLDAsMCwwLDUuNjMtLjYsMSwxLDAsMCwwLS42LTEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxM0gxNGExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTRBMSwxLDAsMCwwLDIyLDEzWm0tMSw4SDE1VjE1aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIgLz4nKSxGLkNsclNoYXBlQXNzaWduVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNy40Niw3LjQ2LDAsMSwwLTcuNDUtNy40NkE3LjQ2LDcuNDYsMCwwLDAsMTgsMTdaTTE4LDQuMDdhNS40Niw1LjQ2LDAsMSwxLTUuNDUsNS40NUE1LjQ2LDUuNDYsMCwwLDEsMTgs''@;'; put 'put ''NC4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxLjg5VjI1Ljc3YTE2LjEzLDE2LjEzLDAsMCwxLDEyLTUsMTYuNjEsMTYuNjEsMCwwLDEsOC43MSwyLjMzbDEuMzUtMS41MUExOC41MywxOC41MywwLDAsMCwxOCwxOC43NCwx''@;'; put 'put ''Ny43LDE3LjcsMCwwLDAsNC4yMSwyNC44YTEsMSwwLDAsMC0uMjEuNnY2LjQ5QTIuMDYsMi4wNiwwLDAsMCw2LDM0SDE4LjM5bC0xLjktMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwzMS44OSwzMCwzMkgyNi44NWwtMS44LDJI''@;'; put 'put ''MzBhMi4wNiwyLjA2LDAsMCwwLDItMi4wN1YyNi4ybC0yLDIuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzQuNzYsMTguNjJhMSwxLDAsMCwwLTEuNDEuMDhsLTExLjYyLDEzLTUuMi01LjU5QTEsMSwwLDAsMCwxNS4xMiwyNmEx''@;'; put 'put ''LDEsMCwwLDAtLjA2LDEuNDJsNi42OSw3LjJMMzQuODQsMjBBMSwxLDAsMCwwLDM0Ljc2LDE4LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxMC4zNiIgcj0iNi44MSIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTIsMjYuNjVhMi44LDIuOCwwLDAsMSw0Ljg1LTEuOEwyMC43MSwyOWw2Ljg0LTcuNjNBMTYuODEsMTYuODEsMCwwLDAsMTgsMTguNTUsMTYuMTMsMTYuMTMsMCwwLDAsNS41LDI0YTEsMSwwLDAsMC0uMi42MVYzMGEyLDIsMCwwLDAsMS45''@;'; put 'put ''NCwyaDguNTdsLTMuMDctMy4zQTIuODEsMi44MSwwLDAsMSwxMiwyNi42NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI4Ljc2LDMyYTIsMiwwLDAsMCwxLjk0LTJWMjYuMjRMMjUuNTcsMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMy43NywxOC42MmExLDEsMCwwLDAtMS40Mi4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE0LjEyLDI2YTEsMSwwLDAsMCwwLDEuNDJsNi42OCw3LjJMMzMuODQsMjBBMSwxLDAsMCwwLDMzLjc3LDE4LjYyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlQXRvbT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTQuMDVhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMTQuMDVabTAsNi40NGEyLjQyLDIuNDIsMCwxLDEsMi40Mi0yLjQyQTIuNDIsMi40MiwwLDAs''@;'; put 'put ''MSwxOCwyMC40OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNC4yMywxMS43MWEzOS4xNCwzOS4xNCwwLDAsMC00LjU3LTMuOTIsMjIuODYsMjIuODYsMCwwLDEsMy40OC0xLjcyYy4zMi0uMTIuNjItLjIxLjkyLS4zYTIuMjgsMi4y''@;'; put 'put ''OCwwLDAsMCwzLjgxLS40NiwzLjMxLDMuMzEsMCwwLDEsMS45Mi44NGMxLjE5LDEuMTksMS4yMiwzLjU5LjEsNi41OC40OS42NS45NCwxLjMxLDEuMzUsMiwuMTctLjQuMzUtLjc5LjQ5LTEuMTgsMS40Ny0zLjg1LDEuMjgtNy0uNTMtOC43OGE1LjI5LDUuMjksMCwwLDAtMy4zMy0xLjQ0LDIu''@;'; put 'put ''MjksMi4yOSwwLDAsMC00LjMxLjU0Yy0uMzcuMTEtLjc0LjIyLTEuMTMuMzdhMjUuNzksMjUuNzksMCwwLDAtNC41NywyLjM1QTI2LjIxLDI2LjIxLDAsMCwwLDEzLjI4LDQuMmMtMy44NS0xLjQ2LTctMS4yOC04Ljc3LjUzQzIuODUsNi40LDIuNTgsOS4xNywzLjY4LDEyLjU5YTIuMjgsMi4y''@;'; put 'put ''OCwwLDAsMCwxLjU5LDMuNjdjLjMyLjYxLjY3LDEuMjIsMS4wNiwxLjgyQTI1LjU0LDI1LjU0LDAsMCwwLDQsMjIuNjZjLTEuNDcsMy44NC0xLjI4LDcsLjUzLDguNzdhNS42Myw1LjYzLDAsMCwwLDQuMTIsMS41MSwxMy4zNCwxMy4zNCwwLDAsMCw0LjY1LTEsMjYuMjEsMjYuMjEsMCwwLDAs''@;'; put 'put ''NC41OC0yLjM1QTI1Ljc5LDI1Ljc5LDAsMCwwLDIyLjQzLDMyYTE0LjE2LDE0LjE2LDAsMCwwLDMuNjUuOUEyLjMsMi4zLDAsMCwwLDMwLjQ2LDMyYTQuNTUsNC41NSwwLDAsMCwuNzQtLjU3YzEuODEtMS44MSwyLTQuOTMuNTMtOC43N0EzMi42OCwzMi42OCwwLDAsMCwyNC4yMywxMS43MVpN''@;'; put 'put ''MTIuNTcsMzAuMDljLTMsMS4xNS01LjQ1LDEuMTMtNi42NS0uMDhzLTEuMjMtMy42Mi0uMDctNi42NGEyMi43NywyMi43NywwLDAsMSwxLjcxLTMuNDgsNDAuMTksNDAuMTksMCwwLDAsMy45Miw0LjU2Yy40My40My44Ny44NSwxLjMxLDEuMjVxLjktLjQ2LDEuODMtMS4wNWMtLjU4LS41Mi0x''@;'; put 'put ''LjE2LTEtMS43Mi0xLjYxYTM0LDM0LDAsMCwxLTUuNzQtNy40N0EyLjI5LDIuMjksMCwwLDAsNS41LDExLjY5aDBjLS43NS0yLjUtLjYyLTQuNDkuNDMtNS41NGEzLjcyLDMuNzIsMCwwLDEsMi43Mi0uOTIsMTEuNCwxMS40LDAsMCwxLDMuOTMuODQsMjIuODYsMjIuODYsMCwwLDEsMy40OCwx''@;'; put 'put ''LjcyLDM5LjE0LDM5LjE0LDAsMCwwLTQuNTcsMy45MmMtLjQ0LjQ0LS44Ny45LTEuMjksMS4zNmEyMC4yNywyMC4yNywwLDAsMCwxLDEuODVjLjU0LS42MSwxLjA5LTEuMjEsMS42OC0xLjhhMzYuMzMsMzYuMzMsMCwwLDEsNS00LjE3LDM2Ljg4LDM2Ljg4LDAsMCwxLDQuOTUsNC4xNywzNi4y''@;'; put 'put ''NiwzNi4yNiwwLDAsMSw0LjE3LDUsMzcsMzcsMCwwLDEtNC4xNyw1QTMwLjY4LDMwLjY4LDAsMCwxLDEyLjU3LDMwLjA5Wk0yOS43OSwzMGwtLjE2LjEzYTIuMjcsMi4yNywwLDAsMC0zLjUuNzIsMTIuNTcsMTIuNTcsMCwwLDEtMy0uNzcsMjIsMjIsMCwwLDEtMy40OC0xLjcyLDM5LjE0LDM5''@;'; put 'put ''LjE0LDAsMCwwLDQuNTctMy45MiwzOC4yNiwzOC4yNiwwLDAsMCwzLjkyLTQuNTYsMjIuODgsMjIuODgsMCwwLDEsMS43MiwzLjQ4QzMxLDI2LjM5LDMxLDI4LjgxLDI5Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LjIz''@;'; put 'put ''LDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1''@;'; put 'put ''Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVB''@;'; put 'put ''MjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40''@;'; put 'put ''NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCww''@;'; put 'put ''LDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAs''@;'; put 'put ''MCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIu''@;'; put 'put ''NS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCww''@;'; put 'put ''LDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5''@;'; put 'put ''Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMu''@;'; put 'put ''NDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE3Ljk5IiBjeT0iMTguMDciIHI9IjMuMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIuNjYgMy4xMSkgcm90YXRlKC05LjIyKSIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQmFyQ29kZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw3QTEsMSwwLDAsMCw0LDhWMzBhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSw3QTEsMSwwLDAsMCw4LDhWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMTMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxNyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDIxLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMjUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyOSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTMzLDdhMSwxLDAsMCwwLTEsMVYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDMzLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz4nKSxGLkNsclNoYXBlQ2REdmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMi4zMywxOGE0LjQ2LDQuNDYs''@;'; put 'put ''MCwxLDAtNC40NSw0LjQ2QTQuNDYsNC40NiwwLDAsMCwyMi4zMywxOFpNMTcuODgsMjAuOUEyLjg2LDIuODYsMCwxLDEsMjAuNzMsMTgsMi44NiwyLjg2LDAsMCwxLDE3Ljg4LDIwLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTcu''@;'; put 'put ''ODgsNy40M0gxOFY1Ljg0aC0uMTJBMTIuMjEsMTIuMjEsMCwwLDAsNS42OCwxNy43NWgxLjZBMTAuNjEsMTAuNjEsMCwwLDEsMTcuODgsNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4wOCwxOEgyOC40OXYwQTEwLjYxLDEw''@;'; put 'put ''LjYxLDAsMCwxLDE4LjI1LDI4LjYzdjEuNkExMi4yMiwxMi4yMiwwLDAsMCwzMC4wOSwxOFMzMC4wOCwxOCwzMC4wOCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxMVY5LjQ0aC0uMTJhOC42Miw4LjYyLDAsMCwwLTguNiw4''@;'; put 'put ''LjMyaDEuNmE3LDcsMCwwLDEsNy02LjcyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTE4LjI1LDI1djEuNkE4LjYxLDguNjEsMCwwLDAsMjYuNDgsMTh2MGgtMS42djBBNyw3LDAsMCwxLDE4LjI1LDI1WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE4LjE3LDEuOTJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTguMTcsMS45MlpNMjYuMjMsMThoMS41NGE5LjYxLDkuNjEsMCwwLDEtOS42LDkuNTNIMThWMjZoLjE3QTguMDcsOC4wNywwLDAsMCwyNi4yMywx''@;'; put 'put ''OFpNNi4wNSwxOEg0LjQ1di0uMDhBMTMuNzIsMTMuNzIsMCwwLDEsMTgsNC4yMXYxLjZBMTIuMTMsMTIuMTMsMCwwLDAsNi4wNSwxNy45MlptNC4wNSwwSDguNTZ2LS4wOEE5LjYxLDkuNjEsMCwwLDEsMTgsOC4zMlY5Ljg2YTguMDcsOC4wNywwLDAsMC03LjksOC4wNlptNC4zMi0uMDhhMy43''@;'; put 'put ''NSwzLjc1LDAsMSwxLDMuNzUsMy43NUEzLjc1LDMuNzUsMCwwLDEsMTQuNDIsMTcuOTJabTMuNzUsMTMuNzFIMThWMzBoLjE3QTEyLjEzLDEyLjEzLDAsMCwwLDMwLjI4LDE4aDEuNkExMy43MywxMy43MywwLDAsMSwxOC4xNywzMS42M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvbnRhaW5lcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjI4QTIsMiwwLDAsMSwzMiwzMFpNNCw4VjI4SDMyVjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSw5LDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN''@;'; put 'put ''MTQuOTIsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMTQuOTIsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44Ljgs''@;'; put 'put ''MCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwyMSwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI3LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDI3LDI1LjNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTkuNjMsMjQuMjNhLjc5Ljc5LDAsMCwxLS44MS43N0EuNzkuNzksMCww''@;'; put 'put ''LDEsOCwyNC4yM1YxMS43N0EuNzkuNzksMCwwLDEsOC44MiwxMWEuNzkuNzksMCwwLDEsLjgxLjc3Wm02LDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4yMSwwYS43OS43OSww''@;'; put 'put ''LDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdabTYuMTIsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs''@;'; put 'put ''LjgyLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LDE3LjU4YTMyLjM1LDMyLjM1LDAsMCwwLDYuMy45Miw0LjEzLDQuMTMsMCwwLDEsLjkyLTEuMzcs''@;'; put 'put ''MzAuOTQsMzAuOTQsMCwwLDEtNy4yMi0xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMjhWOC4xOWMuMzQtLjc2LDQuMzEtMi4xMSwxMS0yLjExczEwLjY3LDEuMzUsMTEsMnYuM2MtLjgyLjc5LTQuNTgsMi4wNS0xMS4xMSwyLjA1''@;'; put 'put ''QTMzLjQ4LDMzLjQ4LDAsMCwxLDgsOS40NHYxLjQ0YTM1LjYsMzUuNiwwLDAsMCw4Ljg5LDFjNC4yOSwwLDguOC0uNTgsMTEuMTEtMS44MnY1LjA3YTUuMyw1LjMsMCwwLDEtMS44MS44OEgzMFY4LjEyYzAtMy4xOS04LjE3LTQtMTMtNHMtMTMsLjg1LTEzLDRWMjhDNCwzMC42Myw5LjM5LDMx''@;'; put 'put ''LjY4LDE0LDMyVjMwQzkuMTMsMjkuNjYsNi4yOCwyOC42Miw2LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTgsMjQuMjhhMzEuMywzMS4zLDAsMCwwLDYsLjg5di0xLjRhMjguOTMsMjguOTMsMCwwLDEtNi0uOTNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwzMlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yMSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwwLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDIxLDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsMjEu''@;'; put 'put ''ODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40''@;'; put 'put ''LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwz''@;'; put 'put ''MlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LDIxLjgyYS43LjcsMCwwLDAtLjcuN1YzMGEuNy43LDAsMSwwLDEuNCwwVjIyLjUyQS43LjcsMCwwLDAsMjUsMjEuODJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAt''@;'; put 'put ''LjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxNkgyOFY4LjEyYzAtMS42OC01LjM4LTMtMTItM1M0LDYuNDQsNCw4LjEyVjI4YzAsMS41LDQuMzMs''@;'; put 'put ''Mi43NSwxMCwzVjI1LjIyYTI5LjE3LDI5LjE3LDAsMCwxLTgtMS4yOVYyMi40NGwuMjQuMUEyNi42MywyNi42MywwLDAsMCwxNCwyMy44MlYyMGE0LDQsMCwwLDEsLjI5LTEuNDdBMjkuMTksMjkuMTksMCwwLDEsNiwxNy4yM1YxNS43NWwuMjQuMDlhMjksMjksMCwwLDAsOSwxLjMyaDBBNCw0''@;'; put 'put ''LDAsMCwxLDE4LDE2Wk02LDEwLjU0VjkuMDVsLjI0LjA5QTMwLjEyLDMwLjEyLDAsMCwwLDE2LDEwLjQ3LDI4LjMzLDI4LjMzLDAsMCwwLDI2LDkuMDV2MS41YTMyLjUzLDMyLjUzLDAsMCwxLTEwLDEuMzJBMzIuNDQsMzIuNDQsMCwwLDEsNiwxMC41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTUiIC8+JyksRi5DbHJTaGFwZUZpbGVTaGFyZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFB''@;'; put 'put ''MiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuOTEsMjIuNDhhMi4wNiwyLjA2LDAs''@;'; put 'put ''MCwwLTEuNDQuNjJsLTUuNzItMi42NlYyMGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0LDIuMTIsMi4xMiwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVsLjA4LS4wOCw1LjY3LDIuNjZ2LjNhMi4wOSwyLjA5LDAsMSwwLDIu''@;'; put 'put ''MDgtMi4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAs''@;'; put 'put ''MCwzMCw5Wk02LDdoNi40OWwyLjcyLDRINlpNMjEuOTQsMjYuNjRhMi4wOSwyLjA5LDAsMCwxLTIuMTEtMi4wNmwwLS4zLTUuNjctMi42Ni0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMDgsMi4wOCwwLDEsMSwuNTgsMS40NkwxNC43NSwyMHYuNDds''@;'; put 'put ''NS43MiwyLjY2YTIuMDcsMi4wNywwLDEsMSwxLjQ3LDMuNTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVRckNvZGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUuNiw0QTEuNiwxLjYsMCwwLDAsNCw1LjZWMTJoOFY0Wk0xMCwx''@;'; put 'put ''MEg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDMwLjRBMS42LDEuNiwwLDAsMCw1LjYsMzJIMTJWMjRINFpNNiwyNmg0djRINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0yNCwzMmg2LjRBMS42LDEuNiwwLDAsMCwzMiwzMC40VjI0SDI0Wm0yLTZoNHY0SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQsNEgyNHY4aDhWNS42QTEuNiwxLjYsMCwwLDAsMzAuNCw0Wk0zMCwxMEgyNlY2aDRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwIDEwIDIwIDggMTYgOCAxNiAxMiAxOCAxMiAxOCAxMCAyMCAxMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTIiIHk9''@;'; put 'put ''IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cmVjdCB4PSIxNCIgeT0iMTQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMjAgNiAyMCA4IDIyIDggMjIgNCAxNCA0IDE0IDggMTYgOCAxNiA2IDIwIDYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxyZWN0IHg9IjQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtOSIgLz48cG9seWdvbiBwb2ludHM9IjEyIDE2IDEyIDE4IDEwIDE4IDEwIDE0IDggMTQgOCAxOCA2IDE4IDYgMjAgNCAyMCA0IDIyIDggMjIgOCAyMCAxMCAyMCAxMCAyMiAxMiAyMiAxMiAyMCAxNCAyMCAxNCAxNiAxMiAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEwIiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTYgMjIgMTYgMjIgMTggMjQgMTggMjQgMTYgMjYgMTYgMjYgMTQgMjIgMTQgMjIgMTAgMjAgMTAgMjAgMTIgMTggMTIgMTggMTQgMjAgMTQgMjAgMTYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xMSIgLz48cG9seWdvbiBwb2ludHM9IjE4IDMwIDE0IDMwIDE0IDMyIDIyIDMyIDIyIDMwIDIwIDMwIDIwIDI4IDE4IDI4IDE4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIC8+PHBvbHlnb24gcG9pbnRzPSIyMiAyMCAyMiAxOCAyMCAx''@;'; put 'put ''OCAyMCAxNiAxOCAxNiAxOCAxOCAxNiAxOCAxNiAyMCAxOCAyMCAxOCAyMiAyMCAyMiAyMCAyMCAyMiAyMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiAvPjxyZWN0IHg9IjMwIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiAvPjxyZWN0IHg9IjIyIiB5PSIyMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiAvPjxwb2x5Z29uIHBvaW50cz0iMzAgMTQgMjggMTQgMjggMTYgMjYgMTYgMjYgMTgg''@;'; put 'put ''MjggMTggMjggMjAgMzAgMjAgMzAgMTggMzIgMTggMzIgMTYgMzAgMTYgMzAgMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgLz48cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xNyIgLz48cG9seWdvbiBwb2ludHM9IjE0IDI4IDE2IDI4IDE2IDI2IDE4IDI2IDE4IDI0IDE2IDI0IDE2IDIwIDE0IDIwIDE0IDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTgiIC8+JyksRi5DbHJTaGFwZVVzYj0oMCxtLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMTQuMjksMTEuNGExLjQ5LDEuNDksMCwwLDEsMS4yOC0uNzJoMWEyLjg5LDIuODksMCwwLDAsMi43NSwyLjA5LDMsMywwLDAsMCwwLTUuOTEsMi45LDIuOSwwLDAsMC0yLjY3LDEuODJIMTUuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42NmwtMyw0LjgzaDIuMzZabTUt''@;'; put 'put ''Mi45NEExLjM2LDEuMzYsMCwxLDEsMTgsOS44MSwxLjMyLDEuMzIsMCwwLDEsMTkuMzMsOC40NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zNC4zLDE3LjM3bC02LjExLTMuNjZhLjcuNywwLDAsMC0uNywwLC43MS43MSwwLDAsMC0u''@;'; put 'put ''MzYuNjFWMTdINi45MmEyLjMzLDIuMzMsMCwwLDEsLjMyLDEuMTcsMi40NywyLjQ3LDAsMSwxLTIuNDctMi40NiwyLjM3LDIuMzcsMCwwLDEsMS4xNS4zbC45My0xLjc2QTQuNDQsNC40NCwwLDEsMCw5LjE1LDE5aDMuNThsNC4xNyw2LjY1YTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMS42NnYx''@;'; put 'put ''LjI4YS43OS43OSwwLDAsMCwuOC43OWg0LjQ5YS43OS43OSwwLDAsMCwuOC0uNzl2LTQuNGEuNzkuNzksMCwwLDAtLjgtLjhIMjIuMzRhLjguOCwwLDAsMC0uOC44djEuMTJIMTkuODhhMS41MSwxLjUxLDAsMCwxLTEuMjgtLjcyTDE1LjA5LDE5aDEydjIuNjZhLjY5LjY5LDAsMCwwLC4zNi42''@;'; put 'put ''MS42Ny42NywwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDYuMTEtMy42NmEuNjkuNjksMCwwLDAsLjM0LS42QS43MS43MSwwLDAsMCwzNC4zLDE3LjM3Wk0yMy4xNCwyNUgyNnYyLjhIMjMuMTRabTUuMzktNC41NlYxNS41NWw0LDIuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzQuNzIsMTcuMzdsLTUuNTEtMy4zMWEuNzEuNzEsMCwwLDAtMS4wNy42VjE3SDExLjc3bDMuNTItNS42YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxLjY0YTIuNDEsMi40MSwwLDAsMCwyLjI1LDEuNjEsMi40OCwyLjQ4LDAsMCww''@;'; put 'put ''LDAtNC45NSwyLjM4LDIuMzgsMCwwLDAtMi4xMywxLjM0SDE2LjU3YTMuNDksMy40OSwwLDAsMC0zLDEuNjZMOS40MSwxN0g4YTMuNDYsMy40NiwwLDEsMCwuMDgsMmg1LjY0bDQuMTUsNi42MmEzLjQ5LDMuNDksMCwwLDAsMywxLjY2aDIuNTl2LjkyaDQuNFYyMy44aC00LjR2MS40OEgyMC44''@;'; put 'put ''OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTYuMTEsMTloMTJ2Mi4yOGEuNy43LDAsMCwwLC4zNi42MS43Mi43MiwwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDUuNTItMy4zMWEuNy43LDAsMCwwLDAtMS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz4nKSxGLkNsclNoYXBlUmFkYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDE4YzAsNy43LTYuMywxNC0xNCwxNGMtNy43LDAtMTQtNi4zLTE0LTE0QzQsMTAuNiw5LjcsNC41LDE3LjEsNHYzLjdjLTUuNywwLjUtOS45LDUuNS05LjQsMTEuMnM1LjUsOS45LDExLjIsOS40''@;'; put 'put ''XG5cdGM1LjMtMC41LDkuNC00LjksOS40LTEwLjNoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zcy04LjMtMy43LTguMy04LjNjMC00LjIsMy4xLTcuOCw3LjMtOC4zdjQuNGMtMS44LDAuNC0zLjEsMi0zLjEsMy45XG5cdGMwLDIuMiwxLjgsNCw0LDRzNC0xLjgsNC00YzAtMS44LTEuMy0zLjQt''@;'; put 'put ''My0zLjhWMi4xQzE4LjYsMiwxOC4zLDIsMTgsMkM5LjIsMiwyLDkuMiwyLDE4czcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZIMzJ6IE0yMCwxOFxuXHRjMCwxLjEtMC45LDItMiwycy0yLTAuOS0yLTJzMC45LTIsMi0yUzIwLDE2LjksMjAsMTh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIsMThjMCw3LjctNi4yLDE0LTE0LDE0UzQsMjUuOCw0LDE4YzAtNy40LDUuNy0xMy41LDEzLjEtMTR2My43Yy01LjcsMC41LTkuOCw1LjUtOS4zLDExLjJzNS41LDkuOCwxMS4yLDkuM1xuXHRcdGM1LjMtMC41LDkuMy00LjksOS4zLTEw''@;'; put 'put ''LjJoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zUzkuNywyMi42LDkuNywxOGMwLTQuMiwzLjItNy44LDcuMy04LjJ2NC40Yy0yLjEsMC42LTMuNCwyLjctMi45LDQuOVxuXHRcdGMwLjYsMi4xLDIuNywzLjQsNC45LDIuOWMyLjEtMC42LDMuNC0yLjcsMi45LTQuOWMtMC40LTEuNC0xLjUtMi41''@;'; put 'put ''LTIuOS0yLjlWMmMtMC40LDAtMC43LDAtMS4xLDBjLTguOCwwLTE2LDcuMi0xNiwxNlxuXHRcdGMwLDguOCw3LjIsMTYsMTYsMTZzMTYtNy4yLDE2LTE2YzAsMCwwLDAsMCwwSDMyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlSW5kdWN0''@;'; put 'put ''b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjMxLDI1LjgxYy0xLjc1LDAtMy0yLjQ5LTMtNmExMi43OSwxMi43OSwwLDAsMSwxLjcyLTYuNywyLjU3LDIuNTcsMCwwLDAtMy43OSwwQTEyLjc5LDEyLjc5LDAsMCwxLDIxLDE5Ljc2YzAsMy41Ni0xLjIzLDYtMyw2cy0zLTIuNDkt''@;'; put 'put ''My02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDAsMTIuNzksMTIuNzksMCwwLDEsMS43Miw2LjdjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuODgsMTIuODgsMCwwLDEsMS43MS02LjcsMi43LDIuNywwLDAsMC0xLjg5LS44N0M3LjEs''@;'; put 'put ''MTIuMTksNS42OSwxMy43LDUsMTZsLS4yMy43SDJhMSwxLDAsMCwxLDAtMkgzLjI5YzEuMS0yLjgzLDMuMDYtNC41NSw1LjI0LTQuNTVhNC42Nyw0LjY3LDAsMCwxLDMuMTYsMS4zMiw0LjYyLDQuNjIsMCwwLDEsMy4xNS0xLjMyQTQuNjUsNC42NSwwLDAsMSwxOCwxMS41MWE0LjQzLDQuNDMs''@;'; put 'put ''MCwwLDEsNi4zMSwwLDQuNjcsNC42NywwLDAsMSwzLjE2LTEuMzJjMi4xOCwwLDQuMTQsMS43Miw1LjI0LDQuNTVIMzRhMSwxLDAsMCwxLDAsMkgzMS4yOGwtLjIzLS43Yy0uNzQtMi4zNC0yLjE1LTMuODUtMy41OC0zLjg1YTIuNywyLjcsMCwwLDAtMS44OS44NywxMi44OCwxMi44OCwwLDAs''@;'; put 'put ''MSwxLjcxLDYuN0MyNy4yOSwyMy4zMiwyNi4wNywyNS44MSwyNC4zMSwyNS44MVpNMTgsMTQuOTNhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEuNzEsMCwwLDAsMTgsMTQuOTNabTYuMzEsMGExMS43MSwxMS43''@;'; put 'put ''MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwyNC4zMSwxNC45M1ptLTEyLjYyLDBhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEu''@;'; put 'put ''NzEsMCwwLDAsMTEuNjksMTQuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlUmVzaXN0b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjQzLDI2LjM0aDBBMS40NywxLjQ3LDAsMCwxLDI4LDI1LjIyTDI0Ljg2LDEz''@;'; put 'put ''LjE1LDIxLjc0LDI1LjIyYTEuNDksMS40OSwwLDAsMS0xLjQ1LDEuMTJoMGExLjQ5LDEuNDksMCwwLDEtMS40Ni0xLjEyTDE1LjcxLDEzLjE1LDEyLjYsMjUuMjJhMS41MSwxLjUxLDAsMCwxLTIuOTEsMEw2LjU3LDEzLjE1LDUuMjIsMTguMzdIMmExLDEsMCwwLDEsMC0ySDMuNjdsMS40NS01''@;'; put 'put ''LjU5QTEuNDgsMS40OCwwLDAsMSw2LjU3LDkuNjZoMEExLjQ3LDEuNDcsMCwwLDEsOCwxMC43OGwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS40OSwxLjQ5LDAsMCwxLDEuNDUtMS4xMmgwYTEuNDksMS40OSwwLDAsMSwxLjQ2LDEuMTJsMy4xMiwxMi4wNywzLjEyLTEyLjA3YTEuNSwxLjUsMCww''@;'; put 'put ''LDEsMi45LDBsMy4xMiwxMi4wNywxLjM1LTUuMjJIMzRhMSwxLDAsMCwxLDAsMkgzMi4zM2wtMS40NSw1LjU5QTEuNDgsMS40OCwwLDAsMSwyOS40MywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVDYXBhY2l0b3I9KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwxNSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMSwzNC4wNmExLDEsMCww''@;'; put 'put ''LDEtMS0xVjMuMTVhMSwxLDAsMSwxLDIsMFYzMy4wNkExLDEsMCwwLDEsMjEsMzQuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuNDYsMTlIM2ExLDEsMCwwLDEsMC0ySDE0LjQ2YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsMTlIMjEuNTRhMSwxLDAsMCwxLDAtMkgzM2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZVNxdWlkPSgwLG0uY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0xOCw3YTEsMSwwLDAsMS0xLTFWMy4xOWExLDEsMCwwLDEsMiwwVjZBMSwxLDAsMCwxLDE4LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRhMSwxLDAsMCwxLTEtMVYzMGExLDEsMCwwLDEsMiww''@;'; put 'put ''djNBMSwxLDAsMCwxLDE4LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTcuNDEsMThsMS43OC0xLjc3YTEsMSwwLDEsMC0xLjQyLTEuNDJMNiwxNi41OSw0LjIzLDE0LjgxYTEsMSwwLDEsMC0xLjQyLDEuNDJMNC41OSwxOCwyLjgx''@;'; put 'put ''LDE5Ljc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUw2LDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBk''@;'; put 'put ''PSJNNiwxMy43NmwuMzYtLjM2YTMsMywwLDAsMSwyLjExLS44OCwxMSwxMSwwLDAsMSwxOSwwLDMsMywwLDAsMSwyLjEyLjg4bC4zNi4zNi4yLS4yYTEzLDEzLDAsMCwwLTI0LjQsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMCwy''@;'; put 'put ''Mi4yNGwtLjM2LjM2YTMsMywwLDAsMS0yLjEyLjg4LDExLDExLDAsMCwxLTE5LDAsMywzLDAsMCwxLTIuMTItLjg4TDYsMjIuMjRsLS4yLjJhMTMsMTMsMCwwLDAsMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQxLDE4''@;'; put 'put ''bDEuNzgtMS43N2ExLDEsMCwwLDAtMS40Mi0xLjQyTDMwLDE2LjU5bC0xLjc3LTEuNzhhMSwxLDAsMSwwLTEuNDIsMS40MkwyOC41OSwxOGwtMS43OCwxLjc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzMCwxOS40MWwxLjc3LDEuNzhhMSwx''@;'; put 'put ''LDAsMCwwLDEuNDIsMCwxLDEsMCwwLDAsMC0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUhvc3RHcm91cD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuMDgsMzRoLTE0QTEuMDgsMS4wOCwwLDAsMSw2LDMzVjEy''@;'; put 'put ''YTEuMDgsMS4wOCwwLDAsMSwxLjA4LTEuMDhoMTRBMS4wOCwxLjA4LDAsMCwxLDIyLjE2LDEyVjMzQTEuMDgsMS4wOCwwLDAsMSwyMS4wOCwzNFpNOC4xNiwzMS44OEgyMFYxM0g4LjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cmVjdCB4PSIx''@;'; put 'put ''MC4wOCIgeT0iMTQuOTYiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNi4xLDI3LjgxaC0yVjloLTEyVjdoMTNhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLjA4LDIzaC0yVjVoLTExVjNoMTJhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxyZWN0IHg9IjEzLjA4IiB5PSIyNy44OCIgd2lkdGg9IjIiIGhlaWdodD0iMi4xNiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4wOCwzMSBMMS4wOCwzMSBDMC41MTM0MjcxOTcsMzEuMDAxNTU2NCAwLjA0MTk2NjM3NjUsMzAuNTY1MDE4NiAwLDMwIEww''@;'; put 'put ''LDkgQzAsOC40MDM1MzI0NyAwLjQ4MzUzMjQ3LDcuOTIgMS4wOCw3LjkyIEwxNS4wOCw3LjkyIEMxNS42NzY0Njc1LDcuOTIgMTYuMTYsOC40MDM1MzI0NyAxNi4xNiw5IEwxNi4xNiwzMCBDMTYuMTE4MDMzNiwzMC41NjUwMTg2IDE1LjY0NjU3MjgsMzEuMDAxNTU2NCAxNS4wOCwzMSBaIE00''@;'; put 'put ''LjA4LDExLjk2IEw0LjA4LDEzLjk2IEwxMi4wOCwxMy45NiBMMTIuMDgsMTEuOTYgTDQuMDgsMTEuOTYgWiBNNy4wOCwyNC44OCBMNy4wOCwyNy4wNCBMOS4wOCwyNy4wNCBMOS4wOCwyNC44OCBMNy4wOCwyNC44OCBaIiAvPlxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgZD0iTTIwLjEsMjQuODEgTDE4LjEsMjQuODEgTDE4LjEsNiBMNi4xLDYgTDYuMSw0IEwxOS4xLDQgQzE5LjY1MjI4NDcsNCAyMC4xLDQuNDQ3NzE1MjUgMjAuMSw1IEwyMC4xLDI0LjgxIFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''IiBkPSJNMjQuMDgsMjAgTDIyLjA4LDIwIEwyMi4wOCwyIEwxMS4wOCwyIEwxMS4wOCwwIEwyMy4wOCwwIEMyMy42MzIyODQ3LDAgMjQuMDgsMC40NDc3MTUyNSAyNC4wOCwxIEwyNC4wOCwyMCBaIiAvPicpLEYuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNNi4wNiwzMGExLDEsMCwwLDEtMS0xVjhoLTJhMSwxLDAsMCwxLDAtMmg0VjI5QTEsMSwwLDAsMSw2LjA2LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMwLjA2LDI3aC0yNVY5aDI1YTMsMywwLDAsMSwzLDNWMjRB''@;'; put 'put ''MywzLDAsMCwxLDMwLjA2LDI3Wm0tMjMtMmgyM2ExLDEsMCwwLDAsMS0xVjEyYTEsMSwwLDAsMC0xLTFoLTIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjIuMDYiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMTQiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOS4wNiwyMmgtOFYyMGg3VjE0aDJ2''@;'; put 'put ''N0ExLDEsMCwwLDEsMTkuMDYsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLEYuQ2xyU2hhcGVOb2RlR3JvdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDIxLjU4bC00Ljk0LTIuODNWMTMuMDlhMSwxLDAsMCwwLS41MS0uODdM''@;'; put 'put ''MjIuNjQsOS4xYTEsMSwwLDAsMC0xLDBMMTYuMiwxMi4yMmExLDEsMCwwLDAtLjUxLjg3djUuNjZsLTQuOTQsMi44M2ExLDEsMCwwLDAtLjUuODd2Ni4yNGExLDEsMCwwLDAsLjUuODZsNS40NSwzLjEyYTEsMSwwLDAsMCwxLDBsNC45NS0yLjgzLDQuOTUsMi44M2ExLDEsMCwwLDAsLjUuMTQs''@;'; put 'put ''MSwxLDAsMCwwLC40OS0uMTRsNS40NS0zLjEyYTEsMSwwLDAsMCwuNS0uODZWMjIuNDVBMSwxLDAsMCwwLDMzLjUzLDIxLjU4Wk0yMi4xNCwxMS4xMmw0LjQ1LDIuNTVWMTlsLTQuNDYsMi41Ni00LjQ0LTIuNlYxMy42N1pNMTYuNjksMzAuNjVsLTQuNDQtMi41NFYyM2w0LjY4LTIuNjgsNC40''@;'; put 'put ''LDIuNTdWMjhaTTMyLDI4LjExbC00LjQ0LDIuNTRMMjIuOTMsMjhWMjIuOTNsNC40Ni0yLjU3TDMyLDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTcsMjcuNDNhMSwxLDAsMCwxLTEtMVYxOS45QTEsMSwwLDAsMSw2LjUsMTls''@;'; put 'put ''NC45NS0yLjgzVjEwLjU0YTEsMSwwLDAsMSwuNS0uODdsNS4yMS0zYTEsMSwwLDAsMSwxLjM3LjM3LDEsMSwwLDAsMS0uMzgsMS4zN2wtNC43LDIuNjh2NS42NmExLDEsMCwwLDEtLjUxLjg3TDgsMjAuNDh2NS45NUExLDEsMCwwLDEsNywyNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zLDI1LjA1YTEsMSwwLDAsMS0xLTFWMTcuNTNhMSwxLDAsMCwxLC41LS44Nmw1LTIuODRWOC4xN0ExLDEsMCwwLDEsOCw3LjMxbDUuMjUtM2ExLDEsMCwwLDEsMSwxLjc0TDkuNDUsOC43NXY1LjY2YTEsMSwwLDAsMS0uNTEuODdM''@;'; put 'put ''NCwxOC4xMXY1Ljk0QTEsMSwwLDAsMSwzLDI1LjA1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxGLkNsclNoYXBlTm9kZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUsMzQuMjksMiwyOS4zOVYxOS41OGw4LjUtNC45LDguNSw0Ljl2''@;'; put 'put ''OS44MVpNNCwyOC4yMywxMC41LDMyLDE3LDI4LjIzVjIwLjc0TDEwLjUsMTcsNCwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yNS41LDM0LjI5LDE3LDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk0xOSwy''@;'; put 'put ''OC4yMywyNS41LDMyLDMyLDI4LjIzVjIwLjc0TDI1LjUsMTcsMTksMjAuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTgsMjEuMzJsLTguNS00LjlWNi42MUwxOCwxLjcxbDguNSw0Ljl2OS44MVptLTYuNS02LjA2TDE4LDE5''@;'; put 'put ''bDYuNS0zLjc1VjcuNzdMMTgsNCwxMS41LDcuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVOYW1lc3BhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LDQuMThhMSwxLDAsMSwwLTEsMS43M2w2LDMuNDdWMjYuNjJs''@;'; put 'put ''LTYsMy40N2ExLDEsMCwwLDAtLjM3LDEuMzYsMSwxLDAsMCwwLDEuMzcuMzdsNy00LjA1VjguMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNOS42OCwyOS45LDQsMjYuNjJWOS4zOEw5LjY4LDYuMWExLDEsMCwxLDAtMS0xLjcz''@;'; put 'put ''TDIsOC4yM1YyNy43N2w2LjY4LDMuODZhMSwxLDAsMCwwLDEuMzctLjM3QTEsMSwwLDAsMCw5LjY4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTAsMTJWMjRhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjEy''@;'; put 'put ''YTIsMiwwLDAsMC0yLTJIMTJBMiwyLDAsMCwwLDEwLDEyWm03LDB2NUgxMlYxMlptLTUsN2g1djVIMTJabTcsNVYxOWg1djVabTUtN0gxOVYxMmg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxGLkNsclNoYXBlTm9kZT0oMCxtLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMTgsMzAuNjYsNywyNC4zM1YxMS42N0wxOCw1LjM0bDExLDYuMzNWMjQuMzNaTTksMjMuMThsOSw1LjE3LDktNS4xN1YxMi44MkwxOCw3LjY1LDksMTIuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLEYuQ2xyU2hhcGVQb2Q9''@;'; put 'put ''KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDMySDEwYTYsNiwwLDAsMS02LTZWMTBhNiw2LDAsMCwxLDYtNkgyNmE2LDYsMCwwLDEsNiw2VjI2QTYsNiwwLDAsMSwyNiwzMlpNMTAsNmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjZhNCw0LDAsMCwwLDQtNFYxMGE0LDQs''@;'; put 'put ''MCwwLDAtNC00WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI2LjU2LDE1SDE1LjQ0QTEuNDMsMS40MywwLDAsMCwxNCwxNi40NHY4LjEyQTEuNDMsMS40MywwLDAsMCwxNS40NCwyNkgyNi41NkExLjQzLDEuNDMsMCwwLDAsMjgs''@;'; put 'put ''MjQuNTZWMTYuNDRBMS40MywxLjQzLDAsMCwwLDI2LjU2LDE1Wk0yNiwyNEgxNlYxN0gyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMi40LDE5SDEwVjEySDIwdjEuNGgydi0yQTEuNDMsMS40MywwLDAsMCwyMC41NiwxMEg5''@;'; put 'put ''LjQ0QTEuNDMsMS40MywwLDAsMCw4LDExLjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDkuNDQsMjFoM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksRi5DbHJDb250cm9sTHVuPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNOCwyNC41OWEy''@;'; put 'put ''NS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4czkuMS0uNDUs''@;'; put 'put ''MTItMS44OHY1LjExYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlY4aDBzMCwwLDAtLjA3YzAtMy4zNS04LjgtNC4yNS0xNC00LjI1UzQsNC41''@;'; put 'put ''OCw0LDcuOTN2MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWk0xOCw1LjY4YzcuMTUsMCwxMS41MywxLjQ0LDEyLDIuMjUtLjQ2LjgxLTQuODQsMi4yNS0xMiwyLjI1UzYuMzEsOC42OSw2LDhDNi4zMSw3LjE4LDEwLjcx''@;'; put 'put ''LDUuNjgsMTgsNS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRs''@;'; put 'put ''LTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0xOCwxNy41NEEzNC44''@;'; put 'put ''MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjEzLjIyYTcuMzIsNy4zMiwwLDAsMS0yLC4yOHYxLjkxQzI5LjA5LDE2LjIzLDI1LDE3LjU0LDE4LDE3LjU0WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhhNDcuNjYsNDcuNjYsMCwwLDAsNy4wOS0uNTIsNy40NSw3LjQ1LDAsMCwxLTEuNTEtMS44LDQ3LjQsNDcuNCwwLDAsMS01''@;'; put 'put ''LjU4LjMyQzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjY2LDAsMy4xNi4wOCw0LjUxLjIxYTcuNTYsNy41NiwwLDAsMSwuMjktMmMtMS43LS4xNy0zLjM4LS4yNC00LjgtLjI0LTUuMiwwLTE0LC45LTE0LDQuMjV2MTkuNmMwLDIsMy4xNywzLjE0''@;'; put 'put ''LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTgsMjQuNTlhMjUuNSwyNS41LDAsMCwwLDIuNzUuNTlsMS4yMS0xLjQxYTI0LjEzLDI0LjEzLDAsMCwxLTQtLjgzWiIvPjxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40''@;'; put 'put ''MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRsLTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgs''@;'; put 'put ''MTIsMS44OGguNTlhMy41OSwzLjU5LDAsMCwxLC4zMi0ySDE4QzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjIyLDAsMi4zNS4wNSwzLjQxLjEybDEuMS0xLjkxYy0xLjYtLjE1LTMuMTctLjIxLTQuNTEtLjIxLTUuMiwwLTE0LC45LTE0LDQuMjV2''@;'; put 'put ''MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTgsMTYuMzNWMThhNDAuODYsNDAu''@;'; put 'put ''ODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTUuNEgzMGMtLjkxLjgyLTUsMi4xMy0xMiwyLjEzQTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl''@;'; put 'put ''ZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzIuMDks''@;'; put 'put ''MjFIMzJWMTcuMzJjLTEuOSwyLjkzLTEwLjQ2LDMuMy0xNCwzLjNBNDIuNDMsNDIuNDMsMCwwLDEsOCwxOS41NlYxNy44OEE0MC41OSw0MC41OSwwLDAsMCwxOCwxOWM1LDAsMTMuMi0uODIsMTQtMy44MlYxMC43MmMtMi4yMSwzLjM2LTEwLjQ5LDMuNDYtMTQsMy40NkE0Mi4xMiw0Mi4xMiww''@;'; put 'put ''LDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRjNSwwLDEzLjI4LS44MywxNC0zLjg4VjcuODNoMGMtLjE5LTMuMjctOC44NC00LjE1LTE0LTQuMTVTNC4yMSw0LjU2LDQsNy44M0g0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3''@;'; put 'put ''YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45''@;'; put 'put ''MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgydi0yYTcuMzQsNy4z''@;'; put 'put ''NCwwLDAsMS00LjEyLDAsMzkuNDcsMzkuNDcsMCwwLDEtOS44OCwxQTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNCw0Ny43Niw0Ny43NiwwLDAsMCw3LjA5LS41MkE3LjQ1LDcuNDUsMCwwLDEsMjIuOCwzLjkyYy0xLjctLjE3LTMuMzgtLjI0''@;'; put 'put ''LTQuOC0uMjQtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4y''@;'; put 'put ''NCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4''@;'; put 'put ''LDE5YzQuODUsMCwxMi44LS43OSwxMy45MS0zLjYySDIyLjIzYTMuNjgsMy42OCwwLDAsMS0yLjczLTEuMjNIMThBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0aC41OWEzLjYxLDMuNjEsMCwwLDEsLjQ2LTIuMjlsMy40Ni02Yy0xLjYtLjE1''@;'; put 'put ''LTMuMTctLjIxLTQuNTEtLjIxLTUuMTQsMC0xMy43OS44OC0xNCw0LjE1SDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwz''@;'; put 'put ''LjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxGLkNsclNoYXBlTWVkaWFDaGFuZ2VyPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAs''@;'; put 'put ''MCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wk02LDMwVjZIMzBWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz48cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMjcuMjIsMTBIMjB2NGEuOC44LDAsMSwwLDEuNTksMFYxMS42aDUuNjNh''@;'; put 'put ''LjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cmVj''@;'; put 'put ''dCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9''@;'; put 'put ''IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4''@;'; put 'put ''LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4''@;'; put 'put ''LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMCwxNGEuOC44LDAsMSwwLDEuNTksMFYxMS42SDI1QTcuNzQsNy43NCwwLDAsMSwyMy42NiwxMEgyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgPHBh''@;'; put 'put ''dGggZD0iTTMwLDEzLjVoMFYzMEg2VjZIMjIuNVY2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3''@;'; put 'put ''LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''Mi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTQiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC02LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9Ijgu''@;'; put 'put ''MTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjYiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDZWNkgyMS4yN2wxLjE4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwy''@;'; put 'put ''LTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFM''@;'; put 'put ''MjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4Ljgx''@;'; put 'put ''VjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWm0wLTZIMjBWMTBoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cblxuICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNC0xLjE2VjE0''@;'; put 'put ''SDIwVjEwaDMuNjZBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmE3LjM3LDcuMzcsMCwwLDEsLjI4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJB''@;'; put 'put ''Ny4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMi4yMywxNS40YTMuNjgsMy42OCwwLDAsMS0zLjE4LTUuNTFMMjIuNDUsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0xNywyOEg4''@;'; put 'put ''LjgxVjI2SDE3Wm0wLTRIOC44MVYyMkgxN1ptMC00SDguODFWMThIMTdabTAtNEg4LjgxVjE0SDE3Wm0wLTRIOC44MVYxMEgxN1pNMjIsMjRIMjBWMjJoMlptMC00SDIwVjE4aDJabTQsNEgyNFYyMmgyWm0wLTRIMjRWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLEYuQ2xyU2hhcGVUYXBlRHJpdmU9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCwyOFY4SDMyVjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEzLjMzLDEzLjM1YTQuNTIsNC41MiwwLDEsMCw0LjUzLDQuNTJBNC41Myw0LjUzLDAsMCwwLDEzLjMzLDEzLjM1''@;'; put 'put ''Wm0wLDcuNDRhMi45MiwyLjkyLDAsMSwxLDIuOTMtMi45MkEyLjkyLDIuOTIsMCwwLDEsMTMuMzMsMjAuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNjIsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTIsNC41MkE0LjUz''@;'; put 'put ''LDQuNTMsMCwwLDAsMjMuNjIsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45Mi0yLjkyQTIuOTIsMi45MiwwLDAsMSwyMy42MiwyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik02LDExVjIzLjU1SDhWMTJIMjku''@;'; put 'put ''MzRWMTBIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG5cbiAgPHBhdGggZD0iTTguODEsMTcuODdhNC41Myw0LjUzLDAsMSwwLDQuNTItNC41MkE0LjUzLDQuNTMsMCwwLDAsOC44MSwxNy44N1ptNy40NSwwQTIuOTMsMi45''@;'; put 'put ''MywwLDEsMSwxMy4zMywxNSwyLjkzLDIuOTMsMCwwLDEsMTYuMjYsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE5LjEsMTcuODdhNC41Miw0LjUyLDAsMSwwLDQuNTItNC41MkE0LjUzLDQu''@;'; put 'put ''NTMsMCwwLDAsMTkuMSwxNy44N1ptNy40NCwwQTIuOTIsMi45MiwwLDEsMSwyMy42MiwxNSwyLjkyLDIuOTIsMCwwLDEsMjYuNTQsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLDEzLjIy''@;'; put 'put ''VjI4SDRWOEgyMi43OGE3LjM3LDcuMzcsMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjY1LDcuNjUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyNS41MWE3LjY2LDcuNjYsMCwwLDEtMS44NS0ySDdBMSwxLDAsMCwwLDYsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4Ljgx''@;'; put 'put ''LDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik03LDEwYTEsMSwwLDAsMC0xLDFW''@;'; put 'put ''MjMuNTVIOFYxMkgxOC41N0EzLjcsMy43LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMjhINFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhW''@;'; put 'put ''MjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTIyLjA5LDE1LjM5YTMuNjUsMy42NSwwLDAsMS0xLjgtLjU1LDQuNTEsNC41MSww''@;'; put 'put ''LDEsMCw3LjExLjU2SDI1LjE3YTIuOTIsMi45MiwwLDEsMS0zLjA4LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywx''@;'; put 'put ''M0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMy''@;'; put 'put ''LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0zMCwyNEg2VjEySDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1''@;'; put 'put ''LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIzLjc5LDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDIzLjc5LDIzWm0wLTdhMiwyLDAs''@;'; put 'put ''MSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG5cbiAgPHBhdGggZD0iTTEyLjIxLDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDEyLjIxLDIzWm0wLTdhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTIuMjEsMTZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxMy41VjI0SDZWMTJIMjUuNTFhNy40OSw3LjQ5LDAsMCwxLTMtNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDksNy40''@;'; put 'put ''OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik03LjIsMThhNSw1LDAsMSwwLDUtNUE1LDUsMCwwLDAsNy4yLDE4Wm03LDBhMiwyLDAsMSwxLTItMkEyLDIsMCwwLDEsMTQuMjIsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4g''@;'; put 'put ''IDxwYXRoIGQ9Ik0xOC43OCwxOGE1LDUsMCwxLDAsOS4yNy0yLjZIMjIuMjNhMy43MSwzLjcxLDAsMCwxLTIuMTctLjcxQTUsNSwwLDAsMCwxOC43OCwxOFptNS0yYTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMFYyNEg2VjEySDE4LjU3YTMuNjUsMy42NSwwLDAsMSwuNDgtMi4xMUwyMS4yOSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxGLkNsclNoYXBlQW5pbWF0aW9uPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMC4xNiwzMS43MWE0LjQsNC40LDAsMCwx''@;'; put 'put ''LTQuNjQtMUE0LjM0LDQuMzQsMCwwLDEsNC4yMywyNy42YTQuNDEsNC40MSwwLDAsMSwuMTgtMS4yLDExLjYxLDExLjYxLDAsMCwxLTEtMi41Niw2LjQsNi40LDAsMCwwLDkuMzMsOC42M0ExMS41NSwxMS41NSwwLDAsMSwxMC4xNiwzMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MSwyNy42OGE3LjYxLDcuNjEsMCwwLDEtOS4wOC0xLjI2LDcuNTgsNy41OCwwLDAsMS0xLjI3LTkuMDYsMTQuMjYsMTQuMjYsMCwwLDEtLjM3LTIuODUsOS41OCw5LjU4LDAsMCwwLC4yMiwxMy4zMyw5LjYzLDkuNjMsMCwwLDAs''@;'; put 'put ''MTMuMzUuMjJBMTQuNDYsMTQuNDYsMCwwLDEsMTguNDEsMjcuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNjYsMjYuMjFhMTIuMSwxMi4xLDAsMSwxLDguNTctMy41NGgwQTEyLjExLDEyLjExLDAsMCwxLDIxLjY2LDI2''@;'; put 'put ''LjIxWk0yMS42Niw0QTEwLjExLDEwLjExLDAsMCwwLDExLjU0LDE0LjExYTEwLDEwLDAsMCwwLDMsNy4xNCwxMC4xMiwxMC4xMiwwLDAsMCwxNC4zMSwwQTEwLjExLDEwLjExLDAsMCwwLDIxLjY2LDRabTcuODYsMThoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zIi8+XG4gIFxuICA8cGF0aCBkPSJNMy41LDIzLjc3YTYuNDEsNi40MSwwLDAsMCw5LjMzLDguNjdBMTEuNjUsMTEuNjUsMCwwLDEsMy41LDIzLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy42OCwxNC41M2E5LjYsOS42LDAs''@;'; put 'put ''MCwwLDEzLjQsMTMuN0ExNC4xMSwxNC4xMSwwLDAsMSw3LjY4LDE0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNzgsMkExMi4xMiwxMi4xMiwwLDEsMSw5LjY2LDE0LjE1LDEyLjEyLDEyLjEyLDAsMCwxLDIxLjc4LDIiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgJyksRi5DbHJTaGFwZUNpQ2Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjUzLDE5LjgxYTcuNDUsNy40NSwwLDAsMS0xLjY1LS4xOCwxMC40OCwxMC40OCwwLDAsMSwuNzIsMi4xM2MuMywwLC42MSwwLC45''@;'; put 'put ''MywwYTkuNTIsOS41MiwwLDAsMCwzLS40OWwtLjkzLTEuODFBNy42Nyw3LjY3LDAsMCwxLDIzLjUzLDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjM2LDE3Ljg3LDE4LDE3LjQ5YTcuNCw3LjQsMCwwLDEtMi4yLTUu''@;'; put 'put ''OTIsNy4zMSw3LjMxLDAsMCwxLDEuNTQtNEwxNy4yNiw5QTEsMSwwLDAsMCwxOC4xNywxMGguMDlhMSwxLDAsMCwwLDEtLjkxTDE5LjYsNWExLDEsMCwwLDAtLjI5LS43OUExLDEsMCwwLDAsMTguNTIsNGwtNC4wOS4zNWExLDEsMCwwLDAsLjE3LDJsMS4yOS0uMTFhOS40NSw5LjQ1LDAsMCww''@;'; put 'put ''LTIuMDUsNS4zMiw5LjI4LDkuMjgsMCwwLDAsMi42Nyw3LjI2bC4zMS4zN2E3LjMzLDcuMzMsMCwwLDEsMi4wNiw0LjkxLDcuMzksNy4zOSwwLDAsMS0uMjYsMi40N2wxLjguOTFhOC43Niw4Ljc2LDAsMCwwLC40NS0zLjUxQTkuMjgsOS4yOCwwLDAsMCwxOC4zNiwxNy44N1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi40LDE3LjkxLDMxLjE5LDE4QTkuNjUsOS42NSwwLDAsMCwyMy41MywyLjQ1YTkuMzMsOS4zMywwLDAsMC0zLC40OWwuOTEsMS44YTcuNjcsNy42NywwLDAsMSw5Ljc2LDcuMzksNy41OCw3LjU4LDAs''@;'; put 'put ''MCwxLTEuNjUsNC43MmwuMS0xLjU0YTEsMSwwLDEsMC0yLS4xM2wtLjI4LDQuMDhhMSwxLDAsMCwwLC4zMS43OC45NC45NCwwLDAsMCwuNjkuMjhoLjFsNC4wOC0uNDJhMSwxLDAsMCwwLC45LTEuMUExLDEsMCwwLDAsMzIuNCwxNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik00LjA3LDIwLjQ0aC4wOGw0LjA5LS4zNWExLDEsMCwxLDAtLjE3LTJsLTEuMzkuMTJhNy42Myw3LjYzLDAsMCwxLDQuNTItMS40OSw3LjksNy45LDAsMCwxLDEuNjMuMTgsMTAuMjMsMTAuMjMsMCwwLDEtLjcxLTIuMTNjLS4zLDAtLjYxLDAt''@;'; put 'put ''LjkyLDBhOS42Niw5LjY2LDAsMCwwLTUuOSwybC4xMi0xLjMxYTEsMSwwLDAsMC0uOTItMS4wOCwxLDEsMCwwLDAtMS4wOC45MWwtLjM1LDQuMDhhMSwxLDAsMCwwLDEsMS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC40''@;'; put 'put ''MiwyOC4yM2wtNC4wOS4yN2ExLDEsMCwwLDAsLjEzLDJMMTYsMzAuMzlhNy43MSw3LjcxLDAsMCwxLTEyLjU0LTYsNy42LDcuNiwwLDAsMSwuMjktMkwyLDIxLjQ2YTkuNTksOS41OSwwLDAsMC0uNDcsMi45NUE5LjcsOS43LDAsMCwwLDE3LjE5LDMybC0uMTIsMS4xOGExLDEsMCwwLDAsLjg5''@;'; put 'put ''LDEuMWguMTFhMSwxLDAsMCwwLDEtLjlsLjQyLTQuMDZhMSwxLDAsMCwwLTEuMDYtMS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxGLkNsclNoYXBlRmlsZVNoYXJlMj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEg3LjgzQTEuODks''@;'; put 'put ''MS44OSwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OSwxLjg5LDAsMCwwLDcuODMsMzJIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjA5VjlaTTI0LDUuNzgsMjguMiwxMEgyNFpNOCwzMFY2SDIydjZoNlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik0yMiwyMS44MWEyLjExLDIuMTEsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2di0uNDRsNS42Ni0yLjY1YTIuMDgsMi4wOCwwLDEsMCwuMDYtMi45NGgwYTIuMTQsMi4xNCwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVs''@;'; put 'put ''LjA4LS4wOCw1LjY3LDIuNjZ2LjNBMi4wOSwyLjA5LDAsMSwwLDIyLDIxLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0yNSw0LjA2SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNlYzMC4xNWExLjg5LDEuODksMCwwLDAs''@;'; put 'put ''MS44MywxLjkxSDI4LjE3QTEuODcsMS44NywwLDAsMCwzMCwzMC4xNVY5Wk0yMiwyNmEyLjA5LDIuMDksMCwwLDEtMi4xLTIuMDh2LS4zTDE0LjI3LDIxbC0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMTQsMi4xNCwwLDAsMSwuNjQtMS40OGgwYTIu''@;'; put 'put ''MDgsMi4wOCwwLDEsMS0uMDYsMi45NGwtNS42NiwyLjY1di40NGw1LjcyLDIuNjZBMi4xMSwyLjExLDAsMCwxLDIyLDIxLjgxbDAsMEEyLjA5LDIuMDksMCwwLDEsMjIsMjZabTItMTZWNS44NGw0LjIsNC4yMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxG''@;'; put 'put ''LlRlY2hub2xvZ3lTaGFwZXM9eyJydWxlci1wZW5jaWwiOkYuQ2xyU2hhcGVSdWxlclBlbmNpbCwicGhvbmUtaGFuZHNldCI6Ri5DbHJTaGFwZVBob25lSGFuZHNldCwibm8td2lmaSI6Ri5DbHJTaGFwZU5vV2lmaSxpbnN0YWxsOkYuQ2xyU2hhcGVJbnN0YWxsLHVuaW5zdGFsbDpGLkNsclNo''@;'; put 'put ''YXBlVW5pbnN0YWxsLGxheWVyczpGLkNsclNoYXBlTGF5ZXJzLGJsb2NrOkYuQ2xyU2hhcGVCbG9jaywiYmxvY2tzLWdyb3VwIjpGLkNsclNoYXBlQmxvY2tzR3JvdXAsYnVuZGxlOkYuQ2xyU2hhcGVCdW5kbGUsd2lmaTpGLkNsclNoYXBlV2lmaSwicmFjay1zZXJ2ZXIiOkYuQ2xyU2hhcGVS''@;'; put 'put ''YWNrU2VydmVyLCJoYXJkLWRpc2siOkYuQ2xyU2hhcGVIYXJkRGlzaywiYmFja3VwLXJlc3RvcmUiOkYuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlLGJhY2t1cDpGLkNsclNoYXBlQmFja3VwLGRldmljZXM6Ri5DbHJTaGFwZURldmljZXMsa2V5Ym9hcmQ6Ri5DbHJTaGFwZUtleWJvYXJkLG1vdXNl''@;'; put 'put ''OkYuQ2xyU2hhcGVNb3VzZSxkYXNoYm9hcmQ6Ri5DbHJTaGFwZURhc2hib2FyZCxob3N0OkYuQ2xyU2hhcGVIb3N0LHN0b3JhZ2U6Ri5DbHJTaGFwZVN0b3JhZ2UsY2x1c3RlcjpGLkNsclNoYXBlQ2x1c3RlcixhcHBsaWNhdGlvbnM6Ri5DbHJTaGFwZUFwcGxpY2F0aW9ucyxidWlsZGluZzpG''@;'; put 'put ''LkNsclNoYXBlQnVpbGRpbmcsY3B1OkYuQ2xyU2hhcGVDUFUsbWVtb3J5OkYuQ2xyU2hhcGVNZW1vcnksImRhdGEtY2x1c3RlciI6Ri5DbHJTaGFwZURhdGFDbHVzdGVyLCJyZXNvdXJjZS1wb29sIjpGLkNsclNoYXBlUmVzb3VyY2VQb29sLHNoaWVsZDpGLkNsclNoYXBlU2hpZWxkLCJzaGll''@;'; put 'put ''bGQtY2hlY2siOkYuQ2xyU2hhcGVTaGllbGRDaGVjaywic2hpZWxkLXgiOkYuQ2xyU2hhcGVTaGllbGRYLGltcG9ydDpGLkNsclNoYXBlSW1wb3J0LGV4cG9ydDpGLkNsclNoYXBlRXhwb3J0LCJ1cGxvYWQtY2xvdWQiOkYuQ2xyU2hhcGVVcGxvYWRDbG91ZCwiZG93bmxvYWQtY2xvdWQiOkYu''@;'; put 'put ''Q2xyU2hhcGVEb3dubG9hZENsb3VkLHBsdWdpbjpGLkNsclNoYXBlUGx1Z2luLGZsb3BweTpGLkNsclNoYXBlRmxvcHB5LGNvbXB1dGVyOkYuQ2xyU2hhcGVDb21wdXRlcixkaXNwbGF5OkYuQ2xyU2hhcGVEaXNwbGF5LHRlcm1pbmFsOkYuQ2xyU2hhcGVUZXJtaW5hbCxjb2RlOkYuQ2xyU2hh''@;'; put 'put ''cGVDb2RlLGFwcGxpY2F0aW9uOkYuQ2xyU2hhcGVBcHBsaWNhdGlvbixiYXR0ZXJ5OkYuQ2xyU2hhcGVCYXR0ZXJ5LG1vYmlsZTpGLkNsclNoYXBlTW9iaWxlLHRhYmxldDpGLkNsclNoYXBlVGFibGV0LCJuZXR3b3JrLWdsb2JlIjpGLkNsclNoYXBlTmV0d29ya0dsb2JlLCJuZXR3b3JrLXNl''@;'; put 'put ''dHRpbmdzIjpGLkNsclNoYXBlTmV0d29ya1NldHRpbmdzLCJuZXR3b3JrLXN3aXRjaCI6Ri5DbHJTaGFwZU5ldHdvcmtTd2l0Y2gscm91dGVyOkYuQ2xyU2hhcGVSb3V0ZXIsdm06Ri5DbHJTaGFwZVZNLCJ2bXctYXBwIjpGLkNsclNoYXBlVk1XQXBwLGNlcnRpZmljYXRlOkYuQ2xyU2hhcGVD''@;'; put 'put ''ZXJ0aWZpY2F0ZSxhcmNoaXZlOkYuQ2xyU2hhcGVBcmNoaXZlLHVuYXJjaGl2ZTpGLkNsclNoYXBlVW5hcmNoaXZlLGNvbm5lY3Q6Ri5DbHJTaGFwZUNvbm5lY3QsZGlzY29ubmVjdDpGLkNsclNoYXBlRGlzY29ubmVjdCxsaW5rOkYuQ2xyU2hhcGVMaW5rLHVubGluazpGLkNsclNoYXBlVW5s''@;'; put 'put ''aW5rLCJjbG91ZC1uZXR3b3JrIjpGLkNsclNoYXBlQ2xvdWROZXR3b3JrLCJjbG91ZC1zY2FsZSI6Ri5DbHJTaGFwZUNsb3VkU2NhbGUsImNsb3VkLXRyYWZmaWMiOkYuQ2xyU2hhcGVDbG91ZFRyYWZmaWMsImNvbnRyb2wtbHVuIjpGLkNsckNvbnRyb2xMdW4sZGVwbG95OkYuQ2xyU2hhcGVE''@;'; put 'put ''ZXBsb3ksaGVsaXg6Ri5DbHJTaGFwZUhlbGl4LGZsYXNrOkYuQ2xyU2hhcGVGbGFzayxhZG1pbmlzdHJhdG9yOkYuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yLCJoYXJkLWRyaXZlIjpGLkNsclNoYXBlSGFyZERyaXZlLCJoYXJkLWRyaXZlLWRpc2tzIjpGLkNsclNoYXBlSGFyZERyaXZlRGlza3Ms''@;'; put 'put ''bnZtZTpGLkNsclNoYXBlTlZNZSxzc2Q6Ri5DbHJTaGFwZVNTRCxibHVldG9vdGg6Ri5DbHJTaGFwZUJsdWV0b290aCwiYmx1ZXRvb3RoLW9mZiI6Ri5DbHJTaGFwZUJsdWV0b290aE9mZiwicHJvY2Vzcy1vbi12bSI6Ri5DbHJTaGFwZVByb2Nlc3NPblZNLCJhc3NpZ24tdXNlciI6Ri5DbHJT''@;'; put 'put ''aGFwZUFzc2lnblVzZXIsYXRvbTpGLkNsclNoYXBlQXRvbSwiYmFyLWNvZGUiOkYuQ2xyU2hhcGVCYXJDb2RlLCJjZC1kdmQiOkYuQ2xyU2hhcGVDZER2ZCxjb250YWluZXI6Ri5DbHJTaGFwZUNvbnRhaW5lciwiY29udGFpbmVyLXZvbHVtZSI6Ri5DbHJTaGFwZUNvbnRhaW5lclZvbHVtZSwi''@;'; put 'put ''ZmlsZS1zaGFyZSI6Ri5DbHJTaGFwZUZpbGVTaGFyZSwicXItY29kZSI6Ri5DbHJTaGFwZVFyQ29kZSx1c2I6Ri5DbHJTaGFwZVVzYixyYWRhcjpGLkNsclNoYXBlUmFkYXIsY2FwYWNpdG9yOkYuQ2xyU2hhcGVDYXBhY2l0b3Isc3F1aWQ6Ri5DbHJTaGFwZVNxdWlkLGluZHVjdG9yOkYuQ2xy''@;'; put 'put ''U2hhcGVJbmR1Y3RvcixyZXNpc3RvcjpGLkNsclNoYXBlUmVzaXN0b3IsImhvc3QtZ3JvdXAiOkYuQ2xyU2hhcGVIb3N0R3JvdXAsInN0b3JhZ2UtYWRhcHRlciI6Ri5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyLCJub2RlLWdyb3VwIjpGLkNsclNoYXBlTm9kZUdyb3VwLG5vZGVzOkYuQ2xyU2hh''@;'; put 'put ''cGVOb2RlcyxuYW1lc3BhY2U6Ri5DbHJTaGFwZU5hbWVzcGFjZSxub2RlOkYuQ2xyU2hhcGVOb2RlLHBvZDpGLkNsclNoYXBlUG9kLCJtZWRpYS1jaGFuZ2VyIjpGLkNsclNoYXBlTWVkaWFDaGFuZ2VyLCJ0YXBlLWRyaXZlIjpGLkNsclNoYXBlVGFwZURyaXZlLGFuaW1hdGlvbjpGLkNsclNo''@;'; put 'put ''YXBlQW5pbWF0aW9uLCJjaS1jZCI6Ri5DbHJTaGFwZUNpQ2QsImZpbGUtc2hhcmUtMiI6Ri5DbHJTaGFwZUZpbGVTaGFyZTJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsInNlcnZlciIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRlY2hub2xvZ3lTaGFwZXMu''@;'; put 'put ''aG9zdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsImNvbW1hbmQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5UZWNobm9sb2d5U2hhcGVzLnRlcm1pbmFsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywibW9iaWxlLXBob25l''@;'; put 'put ''IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlcy5tb2JpbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5UZWNobm9sb2d5U2hhcGVzLCJsaWNlbnNlIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlcy5jZXJ0aWZpY2F0ZSkpLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsImRpc2Nvbm5lY3RlZCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRlY2hub2xvZ3lTaGFwZXNbIm5vLXdpZmkiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsInJlY2VpdmVyIiwoMCx4LmRl''@;'; put 'put ''c2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1sicGhvbmUtaGFuZHNldCJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywiZGVzaWduIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1sicnVsZXItcGVuY2lsIl0pKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoRi5UZWNobm9sb2d5U2hhcGVzLCJkbmEiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5UZWNobm9sb2d5U2hhcGVzLmhlbGl4KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywiZm9sZGVyLXNoYXJlIiwoMCx4LmRlc2NyaXB0''@;'; put 'put ''b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1siZmlsZS1zaGFyZSJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKEYuVGVjaG5vbG9neVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z''@;'; put 'put ''L3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50''@;'; put 'put ''cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuVGV4dEVkaXRTaGFwZXM9Ri5DbHJTaGFwZVN1cGVyc2NyaXB0PUYuQ2xyU2hhcGVTdWJzY3JpcHQ9Ri5DbHJTaGFwZVN0cmlrZXRocm91Z2g9Ri5DbHJTaGFwZUluZGVudD1GLkNsclNoYXBlT3V0ZGVudD1GLkNsclNoYXBlSGlnaGxpZ2h0''@;'; put 'put ''ZXI9Ri5DbHJTaGFwZVRleHRDb2xvcj1GLkNsclNoYXBlTGFuZ3VhZ2U9Ri5DbHJTaGFwZUFsaWduVG9wPUYuQ2xyU2hhcGVBbGlnbk1pZGRsZT1GLkNsclNoYXBlQWxpZ25Cb3R0b209Ri5DbHJTaGFwZVVuZGVybGluZT1GLkNsclNoYXBlVGV4dD1GLkNsclNoYXBlQWxpZ25SaWdodFRleHQ9''@;'; put 'put ''Ri5DbHJTaGFwZUJsb2NrUXVvdGU9Ri5DbHJTaGFwZVBhaW50Um9sbGVyPUYuQ2xyU2hhcGVOdW1iZXJMaXN0PUYuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PUYuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1GLkNsclNoYXBlSXRhbGljPUYuQ2xyU2hhcGVBbGlnblJpZ2h0PUYuQ2xyU2hhcGVBbGlnbkxl''@;'; put 'put ''ZnQ9Ri5DbHJTaGFwZUFsaWduQ2VudGVyPUYuQ2xyU2hhcGVGb250U2l6ZT1GLkNsclNoYXBlQ2hlY2tib3hMaXN0PUYuQ2xyU2hhcGVDZW50ZXJUZXh0PUYuQ2xyU2hhcGVCdWxsZXRMaXN0PUYuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2Vu''@;'; put 'put ''ZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVCb2xkPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi40MywxNy41NGE0LjY3LDQuNjcsMCwwLDAsMi44LTQuMzd2LS4wNmE0LjQzLDQuNDMsMCwwLDAtMS4z''@;'; put 'put ''MS0zLjI1LDcuMDksNy4wOSwwLDAsMC01LjEzLTEuNzNoLTdBMS43MSwxLjcxLDAsMCwwLDEwLDkuODZWMjZhMS43MiwxLjcyLDAsMCwwLDEuNzQsMS43NGg3LjMzYzQuMzcsMCw3LjI1LTEuODgsNy4yNS01LjM4VjIyLjNDMjYuMzIsMTkuNjQsMjQuNzMsMTguMzIsMjIuNDMsMTcuNTRaTTEz''@;'; put 'put ''LjY4LDExLjRoNC41NGMyLDAsMy4xNS44OSwzLjE1LDIuMzN2LjA2YzAsMS42OC0xLjM2LDIuNDktMy4zOCwyLjQ5SDEzLjY4Wk0yMi4zNywyMmMwLDEuNTktMS4zMSwyLjQzLTMuNDYsMi40M0gxMy42OFYxOS42Mmg1YzIuNDksMCwzLjY5Ljg4LDMuNjksMi4zN1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVCdWxsZXRMaXN0PSgwLHguY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjUuMjEiIGN5PSI5LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSI1''@;'; put 'put ''LjIxIiBjeT0iMTcuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIyNS4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjQyLDlh''@;'; put 'put ''MSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlQ2VudGVyVGV4dD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuODgs''@;'; put 'put ''OEg1LjEyYTEuMSwxLjEsMCwwLDAsMCwyLjJIMzAuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNS41LDE2LjJhMS4xLDEuMSwwLDEsMCwwLTIuMmgtMTVhMS4xLDEuMSwwLDEsMCwwLDIuMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMC4yNSwyMEg1Ljc1YTEuMSwxLjEsMCwwLDAsMCwyLjJoMjQuNWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBh''@;'; put 'put ''dGggZD0iTTI0Ljg4LDI2SDExLjEyYTEuMSwxLjEsMCwxLDAsMCwyLjJIMjQuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVDaGVja2JveExpc3Q9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTMxLjQzLDE2SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMS40MywyNEgxMHYySDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgLz48cGF0aCBkPSJNMTUuNDUsMTBoMTZhMSwxLDAsMCwwLDAtMmgtMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNSwzLjQyYTEuMDksMS4wOSwwLDAsMC0xLjU1LDBMNy44OSwxMS40OCw0LjUxLDcuODRBMS4x''@;'; put 'put ''LDEuMSwwLDEsMCwyLjksOS4zNGw0Ljk0LDUuM0wxNy41LDVBMS4xLDEuMSwwLDAsMCwxNy41LDMuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlRm9udFNpemU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIxLDkuMDhB''@;'; put 'put ''MS4xMywxLjEzLDAsMCwwLDE5Ljg2LDhINC42MmExLjEsMS4xLDAsMSwwLDAsMi4xOUgxMVYyN2ExLjA5LDEuMDksMCwwLDAsMi4xNywwVjEwLjE5aDYuNjlBMS4xNCwxLjE0LDAsMCwwLDIxLDkuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0''@;'; put 'put ''aCBkPSJNMzAuNjcsMTVIMjEuMTVhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMjVWMjYuNWExLjA5LDEuMDksMCwwLDAsMi4xNywwVjE3LjIzaDMuNTRhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBl''@;'; put 'put ''QWxpZ25DZW50ZXI9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDIwSDE5VjE2aDZhMSwxLDAsMCwwLDEtMVY3YTEsMSwwLDAsMC0xLTFIMTlWMmExLDEsMCwwLDAtMiwwVjZIMTFhMSwxLDAsMCwwLTEsMXY4YTEsMSwwLDAsMCwxLDFoNnY0SDVhMSwxLDAsMCwwLTEsMXY4YTEsMSww''@;'; put 'put ''LDAsMCwxLDFIMTd2NGExLDEsMCwwLDAsMiwwVjMwSDMxYTEsMSwwLDAsMCwxLTFWMjFBMSwxLDAsMCwwLDMxLDIwWk0xMiwxNFY4SDI0djZaTTMwLDI4SDZWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQWxpZ25MZWZ0''@;'; put 'put ''PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDFBMSwxLDAsMCwwLDQsMlYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDUsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwyMEg4VjMwSDMxYTEsMSwwLDAsMCwxLTFW''@;'; put 'put ''MjFBMSwxLDAsMCwwLDMxLDIwWm0tMSw4SDEwVjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDE1VjdhMSwxLDAsMCwwLTEtMUg4VjE2SDIzQTEsMSwwLDAsMCwyNCwxNVptLTItMUgxMFY4SDIyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUFsaWduUmlnaHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDFhMSwxLDAsMCwwLTEsMVYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDMxLDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNCwyMXY4YTEsMSwwLDAsMCwxLDFIMjhWMjBINUExLDEsMCwwLDAsNCwyMVptMiwxSDI2djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMiw3djhhMSwxLDAsMCwwLDEsMUgy''@;'; put 'put ''OFY2SDEzQTEsMSwwLDAsMCwxMiw3Wm0yLDFIMjZ2NkgxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLEYuQ2xyU2hhcGVJdGFsaWM9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjQyLDhIMTcuMWExLjEsMS4xLDAsMSwwLDAsMi4xOWgy''@;'; put 'put ''LjEzTDEzLjExLDI1LjU1SDEwLjQ3YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDE3LjhhMS4xLDEuMSwwLDEsMCwwLTIuMTlIMTUuNTFsNi4xMy0xNS4zNmgyLjc4YTEuMSwxLjEsMCwxLDAsMC0yLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5D''@;'; put 'put ''bHJTaGFwZUp1c3RpZnlUZXh0PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LDEwLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMkg2YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEuNzUs''@;'; put 'put ''MTRINmExLjEsMS4xLDAsMSwwLDAsMi4ySDMxLjc1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzEuMTIsMjBINi42MmExLjEsMS4xLDAsMSwwLDAsMi4yaDI0LjVhMS4xLDEuMSwwLDEsMCwwLTIu''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC40NSwyNS44M0g2LjZhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC40NWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi''@;'; put 'put ''IC8+JyksRi5DbHJTaGFwZUFsaWduTGVmdFRleHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjI1LDI2SDZ2Mi4ySDIwLjI1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMjBINnYy''@;'; put 'put ''LjJIMjhBMS4xLDEuMSwwLDAsMCwyOCwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi42LDE1LjFBMS4xLDEuMSwwLDAsMCwyMS41LDE0SDZ2Mi4ySDIxLjVBMS4xLDEuMSwwLDAsMCwyMi42LDE1LjFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjkuMjUsOEg2djIuMkgyOS4yNWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZU51bWJlckxpc3Q9KDAseC5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI1LjQ2IDcuNDEgNS40NiAxMS41NiA2LjY1IDExLjU2IDYuNjUgNi4wNSA1LjcgNi4wNSA0LjA1IDcuMTYgNC41MiA4IDUuNDYgNy40MSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuNTcsMTQu''@;'; put 'put ''ODJhLjc2Ljc2LDAsMCwxLC44My43M2MwLC4zOC0uMjEuNzQtLjg3LDEuMjdsLTIsMS41N3YxSDcuNjdWMTguMjhINS4zM2wxLS43N2MxLS43LDEuMjgtMS4yNywxLjI4LTJhMS44MywxLjgzLDAsMCwwLTItMS43NiwyLjYzLDIuNjMsMCwwLDAtMi4xNCwxLjA4bC43Ni43M0ExLjc1LDEuNzUs''@;'; put 'put ''MCwwLDEsNS41NywxNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik02LjU2LDI0LjY0YTEuMzIsMS4zMiwwLDAsMCwxLTEuMjdjMC0uODctLjc4LTEuNTEtMi0xLjUxYTIuNjEsMi42MSwwLDAsMC0yLjEsMWwuNjkuNzJhMS43OCwx''@;'; put 'put ''Ljc4LDAsMCwxLDEuMy0uNjRjLjU0LDAsLjkyLjI2LjkyLjY2cy0uMzYuNjItMSwuNjJINC43OXYxaC42NGMuNzQsMCwxLjA3LjIxLDEuMDcuNjNzLS4zNS42OC0xLC42OGEyLDIsMCwwLDEtMS40Ni0uNjVsLS43Ljc4YTIuODUsMi44NSwwLDAsMCwyLjIxLjkzYzEuMjksMCwyLjEzLS42OSwy''@;'; put 'put ''LjEzLTEuNjRBMS4zMywxLjMzLDAsMCwwLDYuNTYsMjQuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVQYWludFJvbGxlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTBWNGEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNHY2YTIsMiwwLDAsMCwyLDJIMjlBMiwyLDAsMCwwLDMx''@;'; put 'put ''LDEwWk02LDRIMjl2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yOUwxOC43LDE2LjU0YTEsMSwwLDAsMC0uNywxVjE5SDE2VjMzYTIsMiwwLDAsMCwyLDJoMmEyLDIsMCwwLDAsMi0yVjE5SDIwdi0uNzNMMzMu''@;'; put 'put ''MywxNGExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMyw2Wk0yMCwzM0gxOFYyMWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHJlY3QgeD0iNCIgeT0iMiIgd2lkdGg9IjI3IiBoZWlnaHQ9IjEwIiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yNEwxOC43MSwxNi40NWExLDEsMCwwLDAtLjcxLDFWMTlIMTZWMzRhMSwxLDAsMCwwLDEsMWg0YTEsMSwwLDAsMCwxLTFWMTlIMjB2LS44MkwzMy4yOSwxNEExLDEsMCwwLDAsMzQsMTNWN0ExLDEsMCww''@;'; put 'put ''LDAsMzMsNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUJsb2NrUXVvdGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTExLjg2LDE2LjU1YTQuMzEsNC4zMSwwLDAsMC0yLjExLjU2LDE0LjQ0LDE0LjQ0LDAsMCwxLDQuMzYtNiwx''@;'; put 'put ''LjEsMS4xLDAsMCwwLTEuNC0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NEE1LjA4LDUuMDgsMCwwLDAsMTAsMjQuNThhNC40LDQuNCwwLDAsMCwxLjg4LjQ0LDQuMjQsNC4yNCwwLDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMjMsMTYuNTVhNC4yOSw0LjI5LDAsMCwwLTIuMTEuNTYsMTQuNSwxNC41LDAsMCwxLDQuMzUtNiwxLjEsMS4xLDAsMSwwLTEuMzktMS43Yy00LDMuMjUtNS43OCw3Ljc1LTUuNzgsMTAuNTRhNS4wOCw1LjA4LDAsMCwwLDMsNC42MUE0LjM3LDQuMzcsMCwwLDAsMjMsMjVh''@;'; put 'put ''NC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNjUsMjcuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMjZI''@;'; put 'put ''MTUuNzVBMS4xLDEuMSwwLDAsMCwxNC42NSwyNy4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYuOSwyMS4xQTEuMSwxLjEsMCwwLDAsOCwyMi4ySDMwVjIwSDhBMS4xLDEuMSwwLDAsMCw2LjksMjEuMVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMy40LDE1LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjE0SDE0LjVBMS4xLDEuMSwwLDAsMCwxMy40LDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJN''@;'; put 'put ''Ni43NSw4YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzBWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVUZXh0PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xOSw4Ljg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMWgtLjEyYTEu''@;'; put 'put ''NDYsMS40NiwwLDAsMC0xLjQyLDFMMS4xNCwyNi41NmExLjI5LDEuMjksMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMiwxLjEyLDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42NWgxMWwyLjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4w''@;'; put 'put ''OCwxLjY0LDEuNjQsMCwwLDAtLjE0LS41N1pNNi4wOCwyMC43MWw0LjU5LTEwLjIyLDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yNCwxNC43OEE2LjM1LDYuMzUsMCwwLDAsMjcuNiwxMy4yYTExLjM2LDExLjM2''@;'; put 'put ''LDAsMCwwLTQuNywxLDEsMSwwLDAsMC0uNTguODksMSwxLDAsMCwwLC45NC45MiwxLjIzLDEuMjMsMCwwLDAsLjM5LS4wOCw4Ljg3LDguODcsMCwwLDEsMy43Mi0uODFjMi43LDAsNC4yOCwxLjMzLDQuMjgsMy45MnYuNWExNS4yOSwxNS4yOSwwLDAsMC00LjQyLS42MWMtMy42NCwwLTYuMTQs''@;'; put 'put ''MS42MS02LjE0LDQuNjR2LjA1YzAsMi45NSwyLjcsNC40OCw1LjM3LDQuNDhhNi4yOSw2LjI5LDAsMCwwLDUuMTktMi40OFYyNi45YTEsMSwwLDAsMCwxLDEsMSwxLDAsMCwwLDEtMS4wNlYxOUE1LjcxLDUuNzEsMCwwLDAsMzIuMjQsMTQuNzhabS0uNTYsNy43YzAsMi4yOC0yLjE3LDMuODkt''@;'; put 'put ''NC44MSwzLjg5LTEuOTQsMC0zLjYxLTEuMDYtMy42MS0yLjg2di0uMDZjMC0xLjgsMS41LTMsNC4yLTNhMTUuMiwxNS4yLDAsMCwxLDQuMjIuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlVW5kZXJsaW5lPSgwLHguY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0xOCwyOC4xN2M1LjA4LDAsOC40OC0zLjA4LDguNDgtOVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44YzAsNC40NC0yLjM4LDYuNzEtNi4xMyw2Ljcxcy02LjIxLTIuNDctNi4yMS02Ljg1VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhDOS41''@;'; put 'put ''MywyNS4wOSwxMywyOC4xNywxOCwyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwzMEg1YTEuMTEsMS4xMSwwLDAsMCwwLDIuMjFIMzFBMS4xMSwxLjExLDAsMCwwLDMxLDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUFsaWduQm90dG9tPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwzMEgyYTEsMSwwLDAsMCwwLDJIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xNiw1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjI4SDE2Wk0xNCwyNkg4VjZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwxM2ExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDFWMjhIMzBaTTI4LDI2''@;'; put 'put ''SDIyVjE0aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQWxpZ25NaWRkbGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDMwVjExYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAsMCwwLTEsMXY2SDE2VjVhMSwxLDAs''@;'; put 'put ''MCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMTdIMmExLDEsMCwwLDAsMCwySDZWMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNHY2YTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjE5aDRhMSwxLDAsMCwwLDAtMlpNMTQsMzBIOFY2aDZabTE0LTZIMjJWMTJoNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVBbGlnblRvcD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsNEgyQTEsMSwwLDAsMCwyLDZIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhINlpNOCwxMGg2VjMwSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMjNhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwx''@;'; put 'put ''LTFWOEgyMFptMi0xM2g2VjIySDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUxhbmd1YWdlPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzSDE0djVoMlY1aDE0YzAuNiwwLDEsMC40LDEsMXYxMWMwLDAuNi0wLjQs''@;'; put 'put ''MS0xLDFIMTd2N2gtNS4zTDgsMjcuOVYyNUg1Yy0wLjYsMC0xLTAuNC0xLTFWMTNjMC0wLjYsMC40LTEsMS0xaDEzdi0ySDVcblx0XHRjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUuMUgxOXYtN2gxMWMxLjcsMCwzLTEuMywzLTNWNkMzMyw0LjMsMzEu''@;'; put 'put ''NywzLDMwLDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi4yLDIyLjloMi40bDAuNi0xLjZoMy4xbDAuNiwxLjZoMi40TDExLjksMTRIOS41TDYuMiwyMi45eiBNMTAuNywxNi41bDEsMy4xaC0yTDEwLjcsMTYuNXoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwxN2MxLjEsMCwyLjYtMC4zLDQtMWMxLjQsMC43LDMsMSw0LDF2LTJjMCwwLTEsMC0yLjEtMC40YzEuMi0xLjIsMi4xLTMsMi4xLTUuNlY4aC0zVjZoLTJ2MmgtM3YyaDUuOVxuXHRcdGMtMC4yLDEuOC0x''@;'; put 'put ''LDIuOS0xLjksMy42Yy0wLjYtMC41LTEuMi0xLjItMS42LTIuMWgtMi4xYzAuNCwxLjMsMSwyLjMsMS44LDMuMUMyMS4xLDE1LDIwLjIsMTUsMjAsMTVWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cG9seWdvbiBwb2ludHM9IjExLDE2LjUgMTAs''@;'; put 'put ''MTkuNiAxMiwxOS42IDExLDE2LjUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjMsM2gtMTZ2NWg0djJoLTEzYy0xLjcsMC0zLDEuMy0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFoNi43di03aDExYzEuNywwLDMt''@;'; put 'put ''MS4zLDMtM1Y2XG5cdFx0QzMzLjMsNC4zLDMyLDMsMzAuMywzeiBNMTMuMSwyMi45bC0wLjUtMS42SDkuNWwtMC42LDEuNkg2LjVMOS44LDE0aDIuNGwzLjMsOC45TDEzLjEsMjIuOXogTTI4LjMsMTV2MmMtMS4zLDAtMi43LTAuNC0zLjktMVxuXHRcdGMtMS4yLDAuNi0yLjYsMC45LTQsMWwt''@;'; put 'put ''MC4xLTJjMC43LDAsMS40LTAuMSwyLjEtMC4zYy0wLjktMC45LTEuNS0yLTEuOC0zLjJoMi4xYzAuMywwLjksMC45LDEuNiwxLjYsMi4yYzEuMS0wLjksMS44LTIuMiwxLjktMy43XG5cdFx0aC02VjhoM1Y2aDJ2MmgzLjNsMC4xLDFjMC4xLDIuMS0wLjcsNC4yLTIuMiw1LjdDMjcuMSwxNC45''@;'; put 'put ''LDI3LjcsMTUsMjguMywxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVRleHRDb2xvcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTkuNDcsMy44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFIMThhMS40NSwxLjQ1LDAsMCwwLTEu''@;'; put 'put ''NDIsMUw4LjQyLDIxLjU2YTEuMzUsMS4zNSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjExLDEuMTEsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNTksMS41OSwwLDAs''@;'; put 'put ''MC0uMTQtLjU3Wk0xMy4zNiwxNS43MSwxOCw1LjQ5bDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjQuMDYiIHk9IjI1IiB3aWR0aD0iMjgiIGhlaWdodD0iOCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVIaWdobGlnaHRlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuODIsMjYuMDZhMSwxLDAsMCwxLS43MS0uMjlMOC42NywxOS4zM2ExLDEsMCwwLDEtLjI5LS43MSwxLDEsMCwwLDEsLjI5LS43MUwyMywzLjU0''@;'; put 'put ''YTUuNTUsNS41NSwwLDEsMSw3Ljg1LDcuODZMMTYuNTMsMjUuNzdBMSwxLDAsMCwxLDE1LjgyLDI2LjA2Wm0tNS03LjQ0LDUsNUwyOS40OCwxMGEzLjU0LDMuNTQsMCwwLDAsMC01LDMuNjMsMy42MywwLDAsMC01LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIvPlxuICA8cGF0aCBkPSJNMTAuMzgsMjguMjhBMSwxLDAsMCwxLDkuNjcsMjhMNi40NSwyNC43N2ExLDEsMCwwLDEtLjIyLTEuMDlsMi4yMi01LjQ0YTEsMSwwLDAsMSwxLjYzLS4zM2w2LjQ1LDYuNDRBMSwxLDAsMCwxLDE2LjIsMjZsLTUuNDQsMi4yMkExLjMzLDEuMzMsMCwwLDEsMTAu''@;'; put 'put ''MzgsMjguMjhaTTguMzMsMjMuODJsMi4yOSwyLjI4LDMuNDMtMS40TDkuNzQsMjAuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNOC45NCwzMGgtNWExLDEsMCwwLDEtLjg0LTEuNTVsMy4yMi00Ljk0YTEsMSwwLDAsMSwxLjU1''@;'; put 'put ''LS4xNmwzLjIxLDMuMjJhMSwxLDAsMCwxLC4wNiwxLjM1TDkuNywyOS42NEExLDEsMCwwLDEsOC45NCwzMFpNNS43OCwyOEg4LjQ3TDksMjcuMzRsLTEuNy0xLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIzLjA2IiB5PSIzMSIg''@;'; put 'put ''d2lkdGg9IjMwIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+JyksRi5DbHJTaGFwZU91dGRlbnQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5''@;'; put 'put ''aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTkuNTYsMjIuNTRhMSwxLDAsMCwxLS43LS4z''@;'; put 'put ''TDQuNjEsMThsNC4yNS00LjI0YTEsMSwwLDAsMSwxLjQxLDEuNDFMNy40NCwxOGwyLjgzLDIuODNhMSwxLDAsMCwxLS43MSwxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxGLkNsclNoYXBlSW5kZW50PSgwLHguY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI0aC0xN2Ex''@;'; put 'put ''LDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSwwLDAsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik01LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0xLjcxTDcuNjgsMTgsNC44NiwxNS4xN2ExLDEsMCwwLDEsMC0xLjQxLDEsMSwwLDAsMSwxLjQxLDBMMTAuNTEsMTgsNi4yNywyMi4yNEExLDEsMCwwLDEsNS41NiwyMi41NFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksRi5DbHJTaGFwZVN0cmlrZXRocm91Z2g9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjg4LDE5LjkyaC0zMGExLDEsMCwxLDEsMC0yaDMwYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy4yNywxNS44NmExMi45LDEyLjksMCwwLDEsMS4yOS0uNTJBNS42OSw1LjY5LDAsMCwxLDEwLjM5LDE1YTMuMTgsMy4xOCwwLDAsMSwyLjc1LDEuMTFBNC40NCw0LjQ0LDAsMCwxLDE0LDE4Ljg1di40OWExMy44MywxMy44MywwLDAsMC00''@;'; put 'put ''LjI5LS43NCw2LjE5LDYuMTksMCwwLDAtMi41OS41NEE1LDUsMCwwLDAsNS44MSwyMEgxNS44OFYxOC44NWE1LjY3LDUuNjcsMCwwLDAtMS4zNy00LDUuMTYsNS4xNiwwLDAsMC00LTEuNDksMTAsMTAsMCwwLDAtMy45MS44OC44Ny44NywwLDAsMC0uNDQsMS4xOEEuODQuODQsMCwwLDAsNy4y''@;'; put 'put ''NywxNS44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMSwyMGE1Ljk0LDUuOTQsMCwwLDEsLjU0LTIuMzEsNC4zNSw0LjM1LDAsMCwxLDEuNTgtMS44Myw0LjI3LDQuMjcsMCwwLDEsNC41OSwwLDQuNDcsNC40NywwLDAsMSwx''@;'; put 'put ''LjU3LDEuODNBNi4xMiw2LjEyLDAsMCwxLDI5Ljg1LDIwaDJhNy43Myw3LjczLDAsMCwwLS43OC0zLjE5LDYsNiwwLDAsMC0yLjE4LTIuNDUsNS43NCw1Ljc0LDAsMCwwLTMuMS0uODgsNS4zOSw1LjM5LDAsMCwwLTIuOC43Myw1LjU1LDUuNTUsMCwwLDAtMiwyLjA1VjEwYS44Ny44NywwLDAs''@;'; put 'put ''MC0uODYtLjg2SDIwYS44Ny44NywwLDAsMC0uODYuODZWMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjkuNjcsMjJhNS42MSw1LjYxLDAsMCwxLS4zNiwxLjA3LDQuNDcsNC40NywwLDAsMS0xLjU3LDEuODUsNC4zMiw0LjMy''@;'; put 'put ''LDAsMCwxLTQuNTksMCw0LjM1LDQuMzUsMCwwLDEtMS41OC0xLjg1QTUuNjQsNS42NCwwLDAsMSwyMS4yLDIySDE5LjA5djQuMTNBLjg3Ljg3LDAsMCwwLDIwLDI3aC4yYS44Ny44NywwLDAsMCwuODYtLjg2VjI0LjUxYTUuNTgsNS41OCwwLDAsMCwyLDIuMDYsNS40OCw1LjQ4LDAsMCwwLDIu''@;'; put 'put ''OC43Miw1LjY2LDUuNjYsMCwwLDAsMy4xLS44OEE1Ljg4LDUuODgsMCwwLDAsMzEuMDksMjQsNy4wOSw3LjA5LDAsMCwwLDMxLjczLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE0LDIydi43NmEzLjM0LDMuMzQsMCwwLDEt''@;'; put 'put ''MS42MiwyLDUuMzQsNS4zNCwwLDAsMS0yLjY5LjcyLDMuNzgsMy43OCwwLDAsMS0yLjM2LS43LDIuMjQsMi4yNCwwLDAsMS0uOTQtMS45LDIuMjksMi4yOSwwLDAsMSwuMi0uOTFINC42MmE0LDQsMCwwLDAtLjEzLDEsMy44MywzLjgzLDAsMCwwLDEuMzUsMy4wNkE1LjE1LDUuMTUsMCwwLDAs''@;'; put 'put ''OS4zMSwyNy4yLDYsNiwwLDAsMCwxMiwyNi41N2E0LjYyLDQuNjIsMCwwLDAsMi0xLjc0VjI2YS44Ni44NiwwLDAsMCwuODYuODZIMTVhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLEYuQ2xyU2hhcGVTdWJz''@;'; put 'put ''Y3JpcHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjU1LDE4bDYuOCw4LjZhMS4xNywxLjE3LDAsMCwxLS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NEwxMywxOS45MSw2LjYsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45''@;'; put 'put ''TDExLjU1LDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4xNywxLjE3LDAsMCwxLDYuNjMsOGw2LjQ0LDguMTNMMTkuNSw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0aDBhMS4xNywxLjE3LDAsMCwxLC45MiwxLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjMsMzEuOCwyNy40OSwyOGE5LjksOS45LDAsMCwwLDEuODgtMi4wNUEzLjQ0LDMuNDQsMCwwLDAsMzAsMjRhMi4zNSwyLjM1LDAsMCwwLS4zNS0xLjI3LDIuNDQsMi40NCwwLDAsMC0xLS44NCwyLjksMi45LDAsMCwwLTEuMjYtLjI4LDMu''@;'; put 'put ''MzYsMy4zNiwwLDAsMC0xLjgzLjUsNS42NCw1LjY0LDAsMCwwLTEuNDgsMS40MmwtMS0uODFhNS4xMSw1LjExLDAsMCwxLDQuMzYtMi4zNyw0LjM1LDQuMzUsMCwwLDEsMiwuNDUsMy40MywzLjQzLDAsMCwxLDIsMy4xOCw0LjQ1LDQuNDUsMCwwLDEtLjY4LDIuMzUsMTAuOSwxMC45LDAsMCwx''@;'; put 'put ''LTIuMjQsMi40NmwtMy4yNCwyLjgxSDMxLjVWMzNIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVTdXBlcnNjcmlwdD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNDMsMThsNi43OSw4LjZhMS4xNywxLjE3LDAsMCwx''@;'; put 'put ''LS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NGwtNi40NC04LjEzTDYuNDcsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45TDExLjQzLDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4yLDEuMiwwLDAsMSw2LjUx''@;'; put 'put ''LDhsNi40Myw4LjEzTDE5LjM4LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMi44NSwxNC40N2w0LjUxLTMuODVhOS4zNyw5LjM3LDAs''@;'; put 'put ''MCwwLDEuODgtMiwzLjQzLDMuNDMsMCwwLDAsLjU5LTEuODYsMi4yNywyLjI3LDAsMCwwLS4zNi0xLjI3LDIuMzgsMi4zOCwwLDAsMC0uOTUtLjgzLDIuNzcsMi43NywwLDAsMC0xLjI2LS4yOSwzLjM5LDMuMzksMCwwLDAtMS44My41LDUuODMsNS44MywwLDAsMC0xLjQ5LDEuNDJsLTEtLjgx''@;'; put 'put ''YTUuMTIsNS4xMiwwLDAsMSw0LjM2LTIuMzcsNC4zNiw0LjM2LDAsMCwxLDIsLjQ1LDMuNDcsMy40NywwLDAsMSwyLDMuMThBNC40NCw0LjQ0LDAsMCwxLDMwLjU4LDlhMTEuMTQsMTEuMTQsMCwwLDEtMi4yNCwyLjQ2TDI1LjEsMTQuMzFoNi4yOHYxLjMzSDIyLjg1WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxGLlRleHRFZGl0U2hhcGVzPXtib2xkOkYuQ2xyU2hhcGVCb2xkLCJidWxsZXQtbGlzdCI6Ri5DbHJTaGFwZUJ1bGxldExpc3QsImNoZWNrYm94LWxpc3QiOkYuQ2xyU2hhcGVDaGVja2JveExpc3QsIm51bWJlci1saXN0IjpGLkNs''@;'; put 'put ''clNoYXBlTnVtYmVyTGlzdCwiZm9udC1zaXplIjpGLkNsclNoYXBlRm9udFNpemUsaXRhbGljOkYuQ2xyU2hhcGVJdGFsaWMsImp1c3RpZnktdGV4dCI6Ri5DbHJTaGFwZUp1c3RpZnlUZXh0LCJjZW50ZXItdGV4dCI6Ri5DbHJTaGFwZUNlbnRlclRleHQsImFsaWduLWxlZnQtdGV4dCI6Ri5D''@;'; put 'put ''bHJTaGFwZUFsaWduTGVmdFRleHQsImFsaWduLXJpZ2h0LXRleHQiOkYuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dCwicGFpbnQtcm9sbGVyIjpGLkNsclNoYXBlUGFpbnRSb2xsZXIsImJsb2NrLXF1b3RlIjpGLkNsclNoYXBlQmxvY2tRdW90ZSx0ZXh0OkYuQ2xyU2hhcGVUZXh0LHVuZGVybGlu''@;'; put 'put ''ZTpGLkNsclNoYXBlVW5kZXJsaW5lLCJhbGlnbi1jZW50ZXIiOkYuQ2xyU2hhcGVBbGlnbkNlbnRlciwiYWxpZ24tbGVmdCI6Ri5DbHJTaGFwZUFsaWduTGVmdCwiYWxpZ24tcmlnaHQiOkYuQ2xyU2hhcGVBbGlnblJpZ2h0LCJhbGlnbi1ib3R0b20iOkYuQ2xyU2hhcGVBbGlnbkJvdHRvbSwi''@;'; put 'put ''YWxpZ24tbWlkZGxlIjpGLkNsclNoYXBlQWxpZ25NaWRkbGUsImFsaWduLXRvcCI6Ri5DbHJTaGFwZUFsaWduVG9wLGxhbmd1YWdlOkYuQ2xyU2hhcGVMYW5ndWFnZSwidGV4dC1jb2xvciI6Ri5DbHJTaGFwZVRleHRDb2xvcixoaWdobGlnaHRlcjpGLkNsclNoYXBlSGlnaGxpZ2h0ZXIsaW5k''@;'; put 'put ''ZW50OkYuQ2xyU2hhcGVJbmRlbnQsb3V0ZGVudDpGLkNsclNoYXBlT3V0ZGVudCxzdHJpa2V0aHJvdWdoOkYuQ2xyU2hhcGVTdHJpa2V0aHJvdWdoLHN1YnNjcmlwdDpGLkNsclNoYXBlU3Vic2NyaXB0LHN1cGVyc2NyaXB0OkYuQ2xyU2hhcGVTdXBlcnNjcmlwdH0sdHlwZW9mIHdpbmRvdzwi''@;'; put 'put ''dSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKEYuVGV4dEVkaXRTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLlRyYXZlbFNoYXBlcz1GLkNsclNoYXBlT25Ib2xpZGF5PUYuQ2xyU2hhcGVU''@;'; put 'put ''cmFpbGVyPUYuQ2xyU2hhcGVGZXJyeT1GLkNsclNoYXBlQ2FyYXZhbj1GLkNsclNoYXBlQ2FtcGVydmFuPUYuQ2xyU2hhcGVCb2F0PUYuQ2xyU2hhcGVCaWN5Y2xlPUYuQ2xyU2hhcGVNYXBNYXJrZXI9Ri5DbHJTaGFwZUNvbXBhc3M9Ri5DbHJTaGFwZU1hcD1GLkNsclNoYXBlQ2FyPUYuQ2xy''@;'; put 'put ''U2hhcGVBaXJwbGFuZT1GLkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJh''@;'; put 'put ''dG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVUcnVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCww''@;'; put 'put ''LTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwxLDAsMCwwLDEsMUg0VjhIMjRWMTkuN2E2LjQ1LDYuNDUsMCwwLDEsMS41Ni0uMmMuMTUsMCwuMjksMCwuNDQsMFYxNGg0YTIsMiwwLDAsMSwyLDJ2MUgyOHYyaDR2NUgyOS42YTQuNTQsNC41NCwwLDAsMC04LjM0LDBIMTQuNDNhNC41LDQuNSww''@;'; put 'put ''LDAsMC00LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDksNC40OSwwLDAsMCw4LjkyLDBIMzNhMSwxLDAsMCwwLDEtMVYxNkE0LDQsMCwwLDAsMzAsMTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcs''@;'; put 'put ''MGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQzLDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwx''@;'; put 'put ''LDAsMCwwLDEsMUg0VjhIMjRWMjEuNDlBNC40NSw0LjQ1LDAsMCwwLDIxLjI1LDI0SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ4LDQuNDgsMCwwLDAsOC45MSwwSDM0VjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4z''@;'; put 'put ''OCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDIsMjhaTTMyLDE3SDI2VjE0aDRhMiwyLDAsMCwxLDIsMloiLz4nKSxGLkNsclNoYXBlQWlycGxhbmU9KDAsbS5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS43Nyw4LjE2YTIuNDMsMi40MywwLDAsMC0xLjktMkwyOCw0Ljg3YTQuNSw0LjUsMCwwLDAtMy42NS43OUw3LDE4LjMsMi4xNCwxOC4xQTEuODYsMS44NiwwLDAsMCwuOTEsMjEu''@;'; put 'put ''NDFsNSwzLjkzYy42LjczLDEsLjU5LDEwLjkzLTQuODJsLjkzLDkuNDJhMS4zNiwxLjM2LDAsMCwwLC44NSwxLjE4LDEuNDMsMS40MywwLDAsMCwuNTQuMSwxLjU0LDEuNTQsMCwwLDAsMS0uNDFsMi4zOS0yLjE4YTEuNTIsMS41MiwwLDAsMCwuNDYtLjgzTDI1LjIsMTUuOWMzLjU3LTIsNi45''@;'; put 'put ''NS0zLjg4LDkuMzYtNS4yNUEyLjQzLDIuNDMsMCwwLDAsMzUuNzcsOC4xNlptLTIuMi43NWMtMi41LDEuNDItNiwzLjQxLTkuNzYsNS40N2wtLjQxLjIzTDIxLjA3LDI3LjI4bC0xLjQ3LDEuMzRMMTguNSwxNy4zMiwxNy4xNywxOEMxMCwyMiw3LjYxLDIzLjE2LDYuNzksMjMuNTJsLTQuMy0z''@;'; put 'put ''LjQxLDUuMDguMjIsMTgtMTMuMDZhMi41MSwyLjUxLDAsMCwxLDItLjQ1bDUuODUsMS4yNmEuNDMuNDMsMCwwLDEsLjM1LjM3QS40Mi40MiwwLDAsMSwzMy41Nyw4LjkxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9''@;'; put 'put ''Ik03LDEyLjU0bDMuNTYsMSwxLjY0LTEuMTktNC0xLjE2TDEwLDEwLjA5bDUuNDctLjE2LDIuMy0xLjY3TDEwLDguNWExLjI1LDEuMjUsMCwwLDAtLjcuMTdMNi42NywxMC4yQTEuMjgsMS4yOCwwLDAsMCw3LDEyLjU0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTYuMjUsMTEuNSwxMiwxMy4xNmw2LjMyLTQuNTktOS4wNy4yNkEuNTIuNTIsMCwwLDAsOSw4LjkxTDYuMTMsMTAuNTZBLjUxLjUxLDAsMCwwLDYuMjUsMTEuNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTIiIGQ9Ik0zNC41Miw2LjM2LDI4LjIyLDVhMy43OCwzLjc4LDAsMCwwLTMuMDcuNjdMNi4xMiwxOS41bC00LjU3LS4yYTEuMjUsMS4yNSwwLDAsMC0uODMsMi4yMmw0LjQ1LDMuNTNhLjU1LjU1LDAsMCwwLC41My4wOWMxLjI3LS40OSw2LTMsMTEuNTktNi4wN2wxLjEyLDEx''@;'; put 'put ''LjUxYS41NS41NSwwLDAsMCwuOS4zN2wyLjUtMi4wOGEuNzYuNzYsMCwwLDAsLjI2LS40NWwyLjM3LTEzLjI5YzQtMi4yMiw3LjgyLTQuMzcsMTAuNTEtNS44OUExLjU1LDEuNTUsMCwwLDAsMzQuNTIsNi4zNloiLz4nKSxGLkNsclNoYXBlQ2FyPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIxNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LjQ1LDE0LjE3QTIyLjEs''@;'; put 'put ''MjIuMSwwLDAsMCwxOS4zOCw3YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40Ny0uMTQuOTItLjIsMS4zNkE0LDQsMCwwLDAsMiwxOHY2LjEzYTIsMiwwLDAsMCwyLDJWMjBINFYxOGEyLDIsMCwwLDEsMi0ySDI0LjczQTcuMjgsNy4yOCwwLDAsMSwz''@;'; put 'put ''MiwyMy4yN1YyNGgtMmE0LjUzLDQuNTMsMCwxLDAsLjMzLDJIMzJhMiwyLDAsMCwwLDItMnYtLjczQTkuMjgsOS4yOCwwLDAsMCwyNi40NSwxNC4xN1pNMTEsMTRINi45M2MwLS4zMS4wOS0uNjMuMTUtMUE2LjUyLDYuNTIsMCwwLDEsMTEsOGgwWm0yLDBWNy41OGE4LjE3LDguMTcsMCwwLDEs''@;'; put 'put ''NS4zNiwxLjE2QTE5LDE5LDAsMCwxLDIzLjksMTRaTTI1LjgsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjUuOCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0''@;'; put 'put ''LjE3LDI0YTQuNTMsNC41MywwLDEsMCwuMzMsMmg1LjNjMC0uMDgsMC0uMTcsMC0uMjVBNiw2LDAsMCwxLDIwLDI0Wk0xMCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYuODcsMTQuMjhBMjIuMzYsMjIuMzYsMCwwLDAsMTkuNjUsNi45YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40OS0uMTUsMS0uMjEsMS40aC0xQTIuNTksMi41OSwwLDAsMCwyLDE2LjU5djguNTVh''@;'; put 'put ''Ljg2Ljg2LDAsMCwwLC44Ni44Nkg0LjU5YzAtLjEzLDAtLjI2LDAtLjM5YTUuNzcsNS43NywwLDAsMSw3LjcxLTUuNDVsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwxNC44MiwyNmg1LjQ4YzAtLjEzLDAtLjI2LDAtLjM5QTUu''@;'; put 'put ''NzcsNS43NywwLDAsMSwyOCwyMC4xNmwtMSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDMwLjUzLDI2aDIuNjFhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjMuMzZBOS4zOSw5LjM5LDAsMCwwLDI2Ljg3LDE0LjI4Wk0xMiwxNEg4YzAt''@;'; put 'put ''LjM1LjEtLjcxLjE2LTEuMDdhNi41Miw2LjUyLDAsMCwxLDMuODctNWgwWk0xMC4zNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMC4zNiwyOC4zNlpNMTksMTlIMTZWMTdoM1ptLTYtNVY3LjQ3YTguMTYsOC4xNiwwLDAsMSw1LjQsMS4xNUExOS4xNSwxOS4x''@;'; put 'put ''NSwwLDAsMSwyNCwxNFpNMjYuMDYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjYuMDYsMjguMzZaIi8+JyksRi5DbHJTaGFwZU1hcD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i''@;'; put 'put ''TTMzLjU5LDYuMTlBMSwxLDAsMCwwLDMyLjcsNkwyMy4wOSw5LDEzLjQ2LDQuMTFhMSwxLDAsMCwwLS44NCwwTDIuNjIsOC4yQTEsMSwwLDAsMCwyLDkuMTNWMjkuNjFhMSwxLDAsMCwwLDEuMzguOTJMMTMsMjYuNThsOS41OSw0LjkyYTEsMSwwLDAsMCwuNDYuMTEsMSwxLDAsMCwwLC4zLDBs''@;'; put 'put ''MTAtMy4xMmExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMy41OSw2LjE5Wk0zMiwyNi43NWwtOC4zMiwyLjZWMjcuMDZoLTEuNnYybC04LjQtNC4zMVYyMy4wNmgtMS42djEuNzJMNCwyOC4xMVY5Ljc5bDguMDgtMy4zM1Y4LjgxaDEuNlY2LjQ3bDguNCw0LjN2Mi4xaDEuNlYxMUwzMiw4''@;'; put 'put ''LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMi4wOCIgeT0iMTUuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyMi4wOCIgeT0iMjEuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi4wOCIgeT0iMTEuMDYiIHdpZHRoPSIx''@;'; put 'put ''LjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMi4wOCIgeT0iMTcuMTMiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy43NSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy4zMSw3LjM1LDI1LDkuOTRWMTRIMjNWMTAuMjlMMTQsNS42OFY5SDEyVjUuMjdsLTkuNjcsNEEuNTMuNTMsMCwwLDAsMiw5Ljc1VjMwLjQ1YS41My41MywwLDAsMCwuNzQuNDlMMTIsMjcuMTJWMjNoMnY0LjUzbDksNC42MVYy''@;'; put 'put ''OGgydjMuNzlsOC42My0yLjdhLjUzLjUzLDAsMCwwLC4zNy0uNTFWNy44NkEuNTMuNTMsMCwwLDAsMzMuMzEsNy4zNVpNMTQsMjFIMTJWMTdoMlptMC02SDEyVjExaDJaTTI1LDI2SDIzVjIyaDJabTAtNkgyM1YxNmgyWiIvPicpLEYuQ2xyU2hhcGVDb21wYXNzPSgwLG0uY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGQ9Ik0yMC44MiwxNS4zMWgwTDEwLjQ2LDljLS40Ni0uMjYtMS4xMS4zNy0uODYuODRsNi4xNSwxMC41NiwxMC41Niw2LjE1YS42Ni42NiwwLDAsMCwuODQtLjg2Wm0tNCw0LDMtMyw0LjU1LDcuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTEsMjkuOTVWMjkuNTNIMTd2Mi40MkExNCwxNCwwLDAsMSw0LjA1LDE5SDYuNDdWMTdINC4wNUExNCwxNCwwLDAsMSwxNyw0LjA1VjYuNDdoMlY0LjA1QTE0LDE0LDAsMCwx''@;'; put 'put ''LDMxLjk1LDE3SDI5LjUzdjJoMi40MkExNCwxNCwwLDAsMSwxOSwzMS45NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNi40NywxOUg0''@;'; put 'put ''LjA1YzAtLjMzLS4wNS0uNjYtLjA1LTFzMC0uNjcuMDUtMUg2LjQ3Wk0xNyw0LjA1Yy4zMywwLC42Ni0uMDUsMS0uMDVzLjY3LDAsMSwuMDVWNi40N0gxN1ptMiwyNy45Yy0uMzMsMC0uNjYuMDUtMSwuMDVzLS42NywwLTEtLjA1VjI5LjUzaDJabTgtNS41OGEuNTkuNTksMCwwLDEtLjY5LjE2''@;'; put 'put ''TDE1Ljc1LDIwLjM4LDkuNiw5LjgyYy0uMjUtLjQ3LjM5LTEuMS44Ni0uODRsMTAuMzcsNi4zM2gwbDYuMzMsMTAuMzdBLjU5LjU5LDAsMCwxLDI3LDI2LjM3Wk0yOS41MywxOVYxN2gyLjQyYzAsLjMzLjA1LjY2LjA1LDFzMCwuNjctLjA1LDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNi43NyAxOS4zNSAyNC4zNSAyMy43NyAxOS44IDE2LjMzIDE2Ljc3IDE5LjM1IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVNYXBNYXJrZXI9KDAsbS5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43''@;'; put 'put ''MywwLDAsMSwxOCwxNi4xN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTEuNzksMTEuNzksMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYx''@;'; put 'put ''LDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwxMS43OSwwLDAsMCwxOCwyWk0yMy41OSwyNGwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45''@;'; put 'put ''LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFhOS43OCw5Ljc4LDAsMSwxLDE5LjU2LDBDMjcuNzgsMTcuNzksMjUuMzYsMjEuNCwyMy41OSwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43MywwLDAsMSwxOCwxNi4x''@;'; put 'put ''N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40OWE3LjQ5LDcuNDksMCwwLDEtMi0uMzNjMCwuMTksMCwuMzgsMCwuNTcsMCw0LjA2LTIuNDIsNy42Ny00LjE5''@;'; put 'put ''LDEwLjMxbC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMtMS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMUE5Ljc3LDkuNzcsMCwwLDEsMjIuNTYsNS4wOWE3LjQ1LDcuNDUsMCwwLDEsLjUyLTJBMTEuNzUs''@;'; put 'put ''MTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43''@;'; put 'put ''OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5''@;'; put 'put ''OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlptMCwxN2E2LjU2LDYuNTYsMCwxLDEsNi41Ni02LjU2QTYuNTYsNi41NiwwLDAsMSwxOCwxOVoiLz5cbiAgICAgICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40''@;'; put 'put ''OUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzgsMTFhNi41OCw2LjU4LDAsMSwxLTEuNjEtMyw3LjQyLDcuNDIsMCwwLDEsLjMxLTQuODRBMTEuNzUsMTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwu''@;'; put 'put ''NzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9''@;'; put 'put ''IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlQmljeWNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOC41LDI5LjY1QTYuNTEsNi41MSwwLDAsMSwyLDIzLjE1YTYuMzksNi4zOSwwLDAsMSw2LjUtNi4zNkE2LjM5LDYuMzksMCwwLDEsMTUsMjMuMTUsNi41MSw2LjUxLDAsMCwxLDguNSwy''@;'; put 'put ''OS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDguNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNy41LDI5LjY1YTYuNTEsNi41MSwwLDAsMS02LjUtNi41LDYuNSw2LjUsMCwwLDEs''@;'; put 'put ''MTMsMEE2LjUxLDYuNTEsMCwwLDEsMjcuNSwyOS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDI3LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjQuNjZIOGExLDEsMCwwLDEt''@;'; put 'put ''Ljg5LTEuNDVsNS0xMCwxLjc4LjlMOS42MiwyMi43M0gxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjEzIiB5PSIxMi42OCIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuOTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00IiAvPjxwYXRoIGQ9Ik0yOCwyNC42NmExLDEsMCwwLDEtLjk0LS42NkwyMi4yOSwxMC42NkgyMGExLDEsMCwwLDEtMS0xLDEsMSwwLDAsMSwxLS45M2gzYS45NC45NCwwLDAsMSwuOTQuNmw1LDE0YTEsMSwwLDAsMS0uNiwxLjI3QTEsMSwwLDAsMSwyOCwyNC42NloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0xMywxNC42NmExLDEsMCwwLDEtLjcxLS4yOWwtMS43LTEuNzFIOGExLDEsMCwwLDEtMS0xLC45NC45NCwwLDAsMSwxLTFoM2ExLjA4LDEuMDgsMCwwLDEsLjc1LjI3bDIsMmExLDEsMCwwLDEsMCwxLjQxQTEs''@;'; put 'put ''MSwwLDAsMSwxMywxNC42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0xNSwyMS45Yy0wLjItMi0xLjItMy44LTIuOS00LjlsLTIuNSw0LjlIMTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik03LjIsMjMuNGMtMC4yLTAuMy0wLjItMC43LDAtMWwzLjItNi4zYy0wLjYtMC4yLTEuMi0wLjItMS44LTAuMkM1LDE1LjksMiwxOC44LDIsMjIuNGMwLDMuNiwyLjksNi41LDYuNSw2LjVcblx0YzMsMCw1LjYtMi4xLDYuMy01SDhDNy43LDIzLjksNy4zLDIzLjcsNy4yLDIzLjR6IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyMS45aC00YzAsMC4yLDAsMC4zLDAsMC41YzAsMC41LTAuMSwxLTAuMiwxLjVIMTlWMjEuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI3LjUs''@;'; put 'put ''MTUuOWMtMC4zLDAtMC42LDAtMC45LDAuMWwyLjQsNi42YzAuMiwwLjUtMC4xLDEuMS0wLjYsMS4zYy0wLjEsMC0wLjIsMC4xLTAuMywwLjFjLTAuNCwwLTAuOC0wLjMtMC45LTAuN2wtMi40LTYuN1xuXHRjLTMuMiwxLjYtNC41LDUuNS0zLDguN2MxLjYsMy4yLDUuNSw0LjUsOC43LDNjMy4y''@;'; put 'put ''LTEuNiw0LjUtNS41LDMtOC43QzMyLjIsMTcuMywzMCwxNS45LDI3LjUsMTUuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTI0LjcsMTYuN2MwLjYtMC4zLDEuMy0wLjUsMS45LTAuNmwtMi43LTcuNEMyMy44LDguMiwyMy40LDgsMjMsNy45''@;'; put 'put ''aC0zYy0wLjYsMC0xLDAuNS0xLDEuMWMwLDAuNSwwLjQsMC45LDEsMC45XG5cdGMwLDAsMCwwLDAsMGgyLjNsMC43LDJoLTkuNmwtMS43LTEuN0MxMS41LDEwLjEsMTEuMywxMCwxMSwxMEg4Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDIuNmwxLjIsMS4ybC0xLjUsM1xuXHRjMC42LDAu''@;'; put 'put ''MiwxLjMsMC41LDEuOCwwLjhsMS42LTMuMmgxMEwyNC43LDE2Ljd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPicpLEYuQ2xyU2hhcGVCb2F0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS4xLDI3LjFDMjgsMjcsMjYuOSwyNy40LDI2LDI4LjJjLTEu''@;'; put 'put ''MSwxLjEtMi45LDEuMS00LjEsMGMtMS0wLjctMi4xLTEuMS0zLjMtMS4xYy0xLjItMC4xLTIuNCwwLjMtMy4zLDEuMVxuXHRcdEMxNC43LDI4LjcsMTQsMjksMTMuMiwyOXMtMS41LTAuMy0yLjEtMC44Yy0xLTAuOC0yLjItMS4yLTMuNC0xLjJzLTIuNCwwLjQtMy40LDEuMkMzLjcsMjguNywy''@;'; put 'put ''LjgsMjksMiwyOXYyXG5cdFx0YzEuMywwLjEsMi42LTAuMywzLjYtMS4yQzYuMiwyOS4zLDcuMSwyOSw3LjksMjljMC43LDAsMS41LDAuMywyLjEsMC44YzEuOCwxLjYsNC42LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOFxuXHRcdGMwLjcsMCwxLjQsMC4zLDIsMC44YzEuOSwx''@;'; put 'put ''LjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhjMC43LDAsMS40LDAuMywxLjksMC44YzAuOSwwLjcsMS45LDEuMSwzLDEuMnYtMlxuXHRcdGMtMSwwLTEuMi0wLjQtMS43LTAuOEMzMS40LDI3LjUsMzAuMywyNy4xLDI5LjEsMjcuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDIzYzAtMC42LDAuNS0xLDEuMS0xSDMybC0zLjUsMy4xaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNy0wLjgsMC42LTIuMS0wLjItMi44XG5cdFx0QzMzLDIwLjIsMzIuNiwyMCwzMi4xLDIw''@;'; put 'put ''aC0yNWMtMS43LDAtMywxLjMtMywzdjMuMmMwLjUtMC41LDEuMi0wLjgsMS45LTEuMVYyM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjksMTlIMTV2LTcuOGMwLTAuNi0wLjMtMS4yLTAuOC0xLjZDMTMuMyw4LjksMTIsOS4xLDEx''@;'; put 'put ''LjQsMTBsLTQuMSw1LjljLTAuNCwwLjYtMC40LDEuNC0wLjEsMi4xQzcuNSwxOC42LDguMiwxOSw4LjksMTlcblx0XHR6IE0xMy4xLDExLjJMMTMsMTdIOC45TDEzLjEsMTEuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNiwxOGMw''@;'; put 'put ''LjQtMC42LDAuNC0xLjQsMC0yTDE5LjcsNS42Yy0wLjQtMC42LTEtMS0xLjctMWMtMS4xLDAtMiwwLjktMiwyVjE5aDguM0MyNSwxOSwyNS43LDE4LjYsMjYsMTh6IE0xNy45LDYuNlxuXHRcdGw2LjQsMTAuNWgtNi40VjYuNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00IiAvPjxwYXRoIGQ9Ik0zNCwzMWMtMS4xLTAuMS0yLjEtMC41LTMtMS4yYy0wLjUtMC41LTEuMi0wLjgtMi0wLjhjLTAuNywwLTEuNSwwLjMtMiwwLjhjLTAuOSwwLjgtMiwxLjEtMy4xLDEuMWMtMS4yLDAtMi40LTAuNC0zLjMtMS4xXG5cdGMtMS4yLTEuMS0zLTEuMS00LjEsMGMt''@;'; put 'put ''MC45LDAuOC0yLjEsMS4yLTMuNCwxLjJjLTEuMiwwLTIuMy0wLjQtMy4yLTEuMmMtMC42LTAuNS0xLjMtMC44LTItMC44Yy0wLjgsMC0xLjcsMC4zLTIuMywwLjhcblx0Yy0xLDAuOC0yLjMsMS4yLTMuNSwxLjFWMjljMC44LDAsMS43LTAuMywyLjMtMC45YzEtMC44LDIuMi0xLjIsMy40LTEu''@;'; put 'put ''MWMxLjIsMCwyLjQsMC40LDMuMywxLjJjMS4yLDEuMSwzLDEuMSw0LjIsMFxuXHRjMS45LTEuNiw0LjctMS42LDYuNSwwYzEuMiwxLjEsMywxLjEsNC4xLDBjMC45LTAuOCwyLjEtMS4yLDMuMy0xLjJjMS4xLDAsMi4yLDAuNCwzLDEuMkMzMi44LDI4LjcsMzMsMjksMzQsMjlMMzQsMzF6IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjEsMjYuMmMwLjYtMC41LDEuMi0wLjgsMS45LTFWMjNjMC0wLjYsMC40LTEuMSwxLTEuMWgyNUwyOC40LDI1aDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yXG5cdGMwLjct''@;'; put 'put ''MC45LDAuNS0yLjEtMC40LTIuOEMzMi45LDIwLjEsMzIuNCwyMCwzMiwyMEg3Yy0xLjcsMC0zLDEuMy0zLDNMNC4xLDI2LjJMNC4xLDI2LjJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45LDE4LjlIOC45Yy0xLjEsMC0yLTAuOS0yLTJj''@;'; put 'put ''MC0wLjQsMC4xLTAuOCwwLjQtMS4ybDQuMS01LjhjMC42LTAuOSwxLjktMS4xLDIuOC0wLjVjMC41LDAuNCwwLjgsMSwwLjgsMS42VjE4Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC4zLDE4LjlIMTZWNi40YzAtMS4xLDAuOS0yLDIt''@;'; put 'put ''MmMwLjcsMCwxLjMsMC40LDEuNywxTDI2LDE1LjhjMC42LDEsMC4yLDIuMi0wLjcsMi43QzI1LDE4LjcsMjQuNiwxOC44LDI0LjMsMTguOVxuXHRMMjQuMywxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlQ2FtcGVydmFuPSgwLG0u''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik05LjUsMjRDOS41LDI0LDkuNSwyNCw5LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVjMCwwLDAsMCwwLDBDNiwyOS40LDcuNiwzMSw5LjUsMzFjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzExLjQsMjQsOS41LDI0eiBNOS41LDI5QzguNywyOSw4''@;'; put 'put ''LDI4LjMsOCwyNy41UzguNywyNiw5LjUsMjZzMS41LDAuNywxLjUsMS41UzEwLjMsMjksOS41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIzLjUsMjRDMjMuNSwyNCwyMy41LDI0LDIzLjUsMjRjLTEuOSwwLTMuNSwxLjYtMy41''@;'; put 'put ''LDMuNWMwLDAsMCwwLDAsMGMwLDEuOSwxLjUsMy41LDMuNSwzLjVjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzI1LjQsMjQsMjMuNSwyNHogTTIzLjUsMjljLTAuOCwwLTEuNS0wLjctMS41LTEuNXMwLjctMS41LDEuNS0xLjVzMS41LDAuNywxLjUsMS41UzI0LjMsMjksMjMuNSwyOXoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMywyMC4xVjIwaC0wLjFsLTMuNS01LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4zVjkuN0MzMiw3LjEsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMs''@;'; put 'put ''MS4zLTMsM1xuXHRcdHYxN2gyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI0djloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwx''@;'; put 'put ''aC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wzMywyMC4xeiBNMjYsMjB2LTVoMS41bDMuMSw1SDI2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHJlY3QgeD0iMTkiIHk9IjkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjIsMjIgMjIsMTMgMTUsMTMgMTUsMjggMTcsMjggMTcsMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik02LDIwaDd2LTdINlYy''@;'; put 'put ''MHogTTgsMTVoM3YzSDhWMTV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41UzcuNiwzMSw5LjUsMzFjMCwwLDAsMCwwLDBjMS45LDAsMy41LTEuNiwzLjUtMy41YzAsMCwwLTAuMSwwLTAu''@;'; put 'put ''MUMxMywyNS41LDExLjQsMjQsOS41LDI0eiJcblx0XHQgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSIyMy41IiBjeT0iMjcuNSIgcj0iMy41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOS41''@;'; put 'put ''LDE0LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4yVjkuN2MwLDAsMCwwLDAtMC4xQzMyLDcsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMsMS4zLTMsM3YxN1xuXHRcdGgyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40''@;'; put 'put ''LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI3aC0zdjloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwxaC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wyOS41LDE0LjV6IiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iNy45IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCwyMiAyMS45LDIyIDIxLjksMTMgMTUsMTMgMTUsMjggMTYuOSwyOCAx''@;'; put 'put ''Ni45LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxyZWN0IHg9IjYiIHk9IjEzIiB3aWR0aD0iNi45IiBoZWlnaHQ9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUNhcmF2YW49KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjUsMjFDMTEsMjEsOSwyMyw5LDI1LjVzMiw0LjUsNC41LDQuNWMyLjUsMCw0LjUtMiw0LjUtNC41QzE4LDIzLDE2LDIxLDEzLjUsMjF6IE0xMy41LDI4Yy0xLjQsMC0yLjUtMS4xLTIuNS0yLjVcblx0XHRzMS4xLTIuNSwyLjUtMi41czIuNSwx''@;'; put 'put ''LjEsMi41LDIuNVMxNC45LDI4LDEzLjUsMjh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEtMS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywy''@;'; put 'put ''LDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRcdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSwwLjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRc''@;'; put 'put ''dGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxMkg3djZoOVYxMnogTTE0LDE2SDl2LTJoNVYxNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0xMy41LDMwQzExLDMwLDksMjgsOSwyNS41czItNC41LDQuNS00LjVzNC41LDIsNC41LDQuNUMxOCwyOCwxNiwzMCwxMy41LDMweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEt''@;'; put 'put ''MS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywyLDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSww''@;'; put 'put ''LjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgzdjEwaC0zdjJoMTNcblx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMThIN3YtNmg5VjE4eiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlRmVycnk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDI1LjFjLTEuMiwwLTIuMywwLjQtMy4zLDEuMWMwLDAsMCwwLDAsMGMtMS4xLDEuMS0zLDEuMS00LjEsMGMtMC45LTAuOC0yLjEtMS4yLTMuMy0x''@;'; put 'put ''LjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMlxuXHRcdGMtMS4yLDEuMS0zLDEuMS00LjIsMEMxMCwyNS40LDguOCwyNSw3LjYsMjVjLTEuMiwwLTIuNCwwLjQtMy40LDEuMUMzLjYsMjYuNywyLjgsMjcsMiwyN3YyYzEuMywwLjEsMi41LTAuNCwzLjQtMS4yXG5cdFx0QzYuMSwyNy4zLDYuOSwy''@;'; put 'put ''Nyw3LjcsMjdjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4zLDIuMSwwLjhcblx0XHRjMS45LDEuNiw0LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjUsMC4zLDIs''@;'; put 'put ''MC44YzAuOSwwLjcsMiwxLjEsMy4xLDEuMnYtMS45Yy0wLjcsMC0xLjQtMC4zLTEuOS0wLjlcblx0XHRDMzEuMywyNS40LDMwLjEsMjUsMjksMjUuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjksMjMuMlYyMEgzMmwtMy41LDNo''@;'; put 'put ''MC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC41LTAuNiwwLjUtMS40LDAuMi0yLjFjLTAuNC0wLjctMS0xLTEuOC0xaC00LjRcblx0XHRMMjIuNSwxMUgxN2MtMS43LDAtMywxLjMtMywzaC0yVjguMUg2djYuMWMtMS4yLDAuNC0yLDEuNS0yLDIuOHYxLjFWMjB2''@;'; put 'put ''NC4zbDAuMS0wLjFDNC42LDIzLjcsNS4yLDIzLjQsNS45LDIzLjJ6IE04LDEwaDJ2NEg4VjEwelxuXHRcdCBNNiwxN2MwLTAuNiwwLjQtMSwxLTFoOXYtMmMwLTAuNiwwLjQtMSwxLTFoNWwwLjYsMUgxOHYyaDUuOGwxLjIsMi4xSDZWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguMiwyNWMtMS4yLDAtMi40LDAuNC0zLjMsMS4yYy0xLjIsMS4xLTMsMS4xLTQuMSwwYy0xLjktMS42LTQuNi0xLjYtNi41LDBjLTEuMiwxLjEtMi45LDEuMS00LjEsMFxuXHRcdGMtMC45LTAuOC0yLTEuMi0zLjItMS4yYy0xLjIsMC0yLjMs''@;'; put 'put ''MC40LTMuMiwxLjJDMy40LDI2LjcsMi43LDI3LDIsMjd2MmMxLjEtMC4xLDIuMi0wLjUsMy4xLTEuMkM1LjYsMjcuMyw2LjMsMjcsNywyN1xuXHRcdGMwLjcsMCwxLjUsMC4zLDIsMC44YzEuOSwxLjYsNC43LDEuNiw2LjYsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4z''@;'; put 'put ''LDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwXG5cdFx0YzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNiwwLjMsMi4xLDAuOGMwLjksMC44LDIuMiwxLjMsMy40LDEuMnYtMmMtMC44LDAtMS42LTAuMy0yLjItMC44QzMwLjcsMjUuNCwyOS41LDI1LDI4LjIsMjV6IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjgsMjMuMnYtMy4zaDI2LjFMMjguNCwyM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4xLTAuMmMwLjctMC45LDAuNS0yLjEtMC40LTIuOGMtMC4zLTAuMy0wLjgtMC40LTEuMi0wLjRc''@;'; put 'put ''blx0XHRoLTQuMWwtNS40LTdoLTUuNWMtMS43LDAtMywxLjMtMywzaC0yVjhINnY2LjJjLTEuMiwwLjQtMi4xLDEuNS0yLjEsMi44bDAsNy4ybDAuMSwwQzQuNSwyMy43LDUuMSwyMy40LDUuOCwyMy4yeiBNMTcuOSwxNGg0LjJcblx0XHRsMS40LDJoLTUuN1YxNHogTTcuOSwxMGgydjRoLTJW''@;'; put 'put ''MTB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVUcmFpbGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01LjgsMi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOFMxOC4yLDE5''@;'; put 'put ''LjIsMTUsMTkuMnogTTE1LDI5LjJjLTIuMywwLTQuMi0xLjktNC4yLTQuMlxuXHRcdHMxLjktNC4yLDQuMi00LjJzNC4yLDEuOSw0LjIsNC4yUzE3LjMsMjkuMiwxNSwyOS4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHJlY3QgeD0iMTQiIHk9IjI0''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAs''@;'; put 'put ''MS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0XHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjExaDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiBNMjYsMTNINHYtMmgyMlYxM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEuOUgyM3YyaDEuMVxuXHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjEx''@;'; put 'put ''aDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42LDUuOC01LjhsMCwwQzIwLjgsMjEuOCwxOC4y''@;'; put 'put ''LDE5LjIsMTUsMTkuMnogTTE2LDI2aC0ydi0yaDJWMjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVPbkhvbGlkYXk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA4LDIuMzRjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgs''@;'; put 'put ''MTQsMTYsMTRBMTcuOTEsMTcuOTEsMCwwLDAsMjMsMjkuNjZsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zLDEsMSwwLDAsMCwuMTYtLjU0VjI1LjYxYTEzLDEzLDAsMCwwLDQtOS4yN0MzNC4wOCw4LjYyLDI2LjksMi4zNCwxOC4wOCwyLjM0Wk0yOC4zNywyNC40NWExLDEsMCwwLDAtLjMy''@;'; put 'put ''LjczdjUuMzRsLTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMSwxNiwxNiwwLDAsMS00Ljc2LjcyYy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMSwxMS4xLDAsMCwxLDI4LjM3LDI0LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjEsMTUuODIsMzEsMTUuNjcsMjguNSwxMy40NGEzLjI1LDMuMjUsMCwwLDAtMi4zOS0uODRsLTUuMzguMzQtMy41OS0zYS44MS44MSwwLDAsMC0uNTItLjE5SDEzLjU2YS43OC43OCwwLDAsMC0uNjkuNC43Ny43NywwLDAsMCwwLC43''@;'; put 'put ''OWwxLjM2LDIuNDQtNC43MS4yOSwxLjMxLDEuNTIsMTUuMzktMWExLjY1LDEuNjUsMCwwLDEsMS4yMi40M2wyLjM2LDIuMTNhLjExLjExLDAsMCwxLDAsLjA3YzAsLjA2LS4wOS4wNS0uMS4wNkgyMS44MmwtLjM1LjM3LTUuMTksNS41M0gxNC42NGwyLjczLTUuOUg4LjU0TDcuMTMsMTQuMTYs''@;'; put 'put ''Ni41MSwxM2EuOC44LDAsMCwwLTEtLjJBLjgxLjgxLDAsMCwwLDUuMiwxMy45bDIsMy45NGExLjIxLDEuMjEsMCwwLDAsMS4wOC42NWg2LjU3bC0xLjk0LDQuMThBMS4yLDEuMiwwLDAsMCwxMywyMy44M2ExLjIyLDEuMjIsMCwwLDAsMSwuNTZoMi40M2ExLjE3LDEuMTcsMCwwLDAsLjg4LS4z''@;'; put 'put ''OWw1LjE4LTUuNTFoNy4xNmExLjY1LDEuNjUsMCwwLDAsMS41Mi0uOTFBMS43NCwxLjc0LDAsMCwwLDMxLjEsMTUuODJaTTE0LjkyLDExLjMxaDEuNDFsMi4wOSwxLjc3TDE2LDEzLjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTcuOTEsMTcuOTEsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zQTEsMSwwLDAsMCwzMCwzMi41VjI1Ljc3YTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwx''@;'; put 'put ''OCwyLjVaTTI5Ljg0LDE4SDIxLjUxYS40Mi40MiwwLDAsMC0uMy4xM2wtNS4zLDUuNjRhLjM5LjM5LDAsMCwxLS4yOS4xM0gxMy4xOWEuNDEuNDEsMCwwLDEtLjM3LS41OGwyLjQ3LTUuMzJINy40NmEuNDIuNDIsMCwwLDEtLjM2LS4yMmwtMi43LTVINi4yNGEuNTMuNTMsMCwwLDEsLjM5LjE4''@;'; put 'put ''bDEuNTYsMS42OWEuMzguMzgsMCwwLDAsLjMzLjE0bDYuMTgtLjM4LTItMy41NWgyLjg5YS40Ny40NywwLDAsMSwuMzEuMTFMMTkuNjMsMTRsNi42OS0uMzVhMi40NCwyLjQ0LDAsMCwxLDEuODEuNjNsMi40NywyLjIzQS45Mi45MiwwLDAsMSwyOS44NCwxOFoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksRi5UcmF2ZWxTaGFwZXM9e3RydWNrOkYuQ2xyU2hhcGVUcnVjayxhaXJwbGFuZTpGLkNsclNoYXBlQWlycGxhbmUsY2FyOkYuQ2xyU2hhcGVDYXIsbWFwOkYuQ2xyU2hhcGVNYXAsY29tcGFzczpGLkNsclNoYXBlQ29tcGFzcywibWFwLW1h''@;'; put 'put ''cmtlciI6Ri5DbHJTaGFwZU1hcE1hcmtlcixiaWN5Y2xlOkYuQ2xyU2hhcGVCaWN5Y2xlLGJvYXQ6Ri5DbHJTaGFwZUJvYXQsY2FtcGVydmFuOkYuQ2xyU2hhcGVDYW1wZXJ2YW4sY2FyYXZhbjpGLkNsclNoYXBlQ2FyYXZhbixmZXJyeTpGLkNsclNoYXBlRmVycnksdHJhaWxlcjpGLkNsclNo''@;'; put 'put ''YXBlVHJhaWxlciwib24taG9saWRheSI6Ri5DbHJTaGFwZU9uSG9saWRheX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVHJhdmVsU2hhcGVzLCJwbGFuZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRyYXZlbFNoYXBlcy5haXJwbGFuZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRy''@;'; put 'put ''YXZlbFNoYXBlcywiYXV0byIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRyYXZlbFNoYXBlcy5jYXIpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5UcmF2ZWxTaGFwZXMpfSwiLi9w''@;'; put 'put ''cm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3Jp''@;'; put 'put ''cHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLEYuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiB4KG0pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTptfX19LCIuL3By''@;'; put 'put ''b2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFn''@;'; put 'put ''LWdlbmVyYXRvci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuY2xySWNvblNWRz12b2lkIDA7Ri5jbHJJY29uU1ZHPWZ1bmN0aW9uIE0oTyl7dmFyIFI9IiI7cmV0dXJuIE8uaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKFIrPSJjYW4tYmFkZ2UgIiksTy5pbmRleE9mKCItLWFsZXJ0''@;'; put 'put ''ZWQiKT4tMSYmKFIrPSJjYW4tYWxlcnQgIiksTy5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoUis9Imhhcy1zb2xpZCAiKSwoUj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK1IrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0''@;'; put 'put ''IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVB''@;'; put 'put ''c3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK08rIjwvc3ZnPiJ9fX0pfSw4MjAyNToo''@;'; put 'put ''YXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPXt9O0YucihhZSksRi5kKGFlLHthcnJheUF2ZzooKT0+UkVlLGFycmF5RWFjaDooKT0+SW4sYXJyYXlGaWx0ZXI6KCk9Pl8xLGFycmF5RmxhdHRlbjooKT0+WGVlLGFycmF5TWFwOigpPT5jcyxhcnJheU1heDooKT0+SUVlLGFycmF5TWlu''@;'; put 'put ''OigpPT5MRWUsYXJyYXlSZWR1Y2U6KCk9PkFsLGFycmF5U3VtOigpPT5LZWUsYXJyYXlVbmlxdWU6KCk9PnJOLGV4dGVuZEFycmF5OigpPT5uTixnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmlOLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5PRWUsZ2V0VW5pb25PZkFycmF5czooKT0+''@;'; put 'put ''UEVlLHBpdm90OigpPT5xYixzdHJpbmdUb0FycmF5OigpPT5vTix0bzJkQXJyYXk6KCk9PnFlZX0pO3ZhciB4PXt9O0Yucih4KSxGLmQoeCx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5ydGUsaXNEZWZpbmVkOigpPT5LaSxpc0VtcHR5OigpPT5wYyxpc1JlZ0V4cDooKT0+SmVlLGlzVW5kZWZp''@;'; put 'put ''bmVkOigpPT5MYSxzdHJpbmdpZnk6KCk9Pl9sfSk7dmFyIG09e307Ri5yKG0pLEYuZChtLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5WRWUsaXNQZXJjZW50VmFsdWU6KCk9PmxOLHJhbmRvbVN0cmluZzooKT0+YU4sc2FuaXRpemU6KCk9Pm5rLHN0cmlwVGFnczooKT0+dU4sc3Vic3RpdHV0ZToo''@;'; put 'put ''KT0+Y04sdG9VcHBlckNhc2VGaXJzdDooKT0+YnV9KTt2YXIgbGU9e307Ri5yKGxlKSxGLmQobGUse0hUTUxfQ0hBUkFDVEVSUzooKT0+bHRlLGFkZENsYXNzOigpPT5waSxhZGRFdmVudDooKT0+ekVlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+Zk4sY2xvc2VzdDooKT0+TnAsY2xvc2VzdERv''@;'; put 'put ''d246KCk9PmV5LGVtcHR5OigpPT5nMixmYXN0SW5uZXJIVE1MOigpPT5nZyxmYXN0SW5uZXJUZXh0OigpPT5qcCxnZXRDYXJldFBvc2l0aW9uOigpPT5oTixnZXRDb21wdXRlZFN0eWxlOigpPT56cCxnZXRDc3NUcmFuc2Zvcm06KCk9PllFZSxnZXRGcmFtZUVsZW1lbnQ6KCk9Pm90ZSxnZXRQ''@;'; put 'put ''YXJlbnQ6KCk9Pml0ZSxnZXRQYXJlbnRXaW5kb3c6KCk9PlFiLGdldFNjcm9sbExlZnQ6KCk9PnJrLGdldFNjcm9sbFRvcDooKT0+dHksZ2V0U2Nyb2xsYWJsZUVsZW1lbnQ6KCk9Pm55LGdldFNjcm9sbGJhcldpZHRoOigpPT5JYyxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+Y3RlLGdl''@;'; put 'put ''dFNlbGVjdGlvblRleHQ6KCk9PnV0ZSxnZXRTdHlsZTooKT0+bjcsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PnZnLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9Pm1nLGdldFdpbmRvd1Njcm9sbFRvcDooKT0+dDcsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PkJFZSxoYXNDbGFzczooKT0+''@;'; put 'put ''Qm8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+aHRlLGhhc1ZlcnRpY2FsU2Nyb2xsYmFyOigpPT5kdGUsaW5kZXg6KCk9PnN0ZSxpbm5lckhlaWdodDooKT0+amYsaW5uZXJXaWR0aDooKT0+cnksaXNDaGlsZE9mOigpPT5WcCxpc0RldGFjaGVkOigpPT5nTixpc0lucHV0OigpPT5zeSxp''@;'; put 'put ''c091dHNpZGVJbnB1dDooKT0+b2ssaXNWaXNpYmxlOigpPT5lNyxtYXRjaGVzQ1NTUnVsZXM6KCk9PmpFZSxvYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2U6KCk9PnB0ZSxvZmZzZXQ6KCk9PnFsLG91dGVySGVpZ2h0OigpPT5hbCxvdXRlcldpZHRoOigpPT53YSxvdmVybGF5Q29udGFpbnNF''@;'; put 'put ''bGVtZW50OigpPT5CcCxyZW1vdmVDbGFzczooKT0+V28scmVtb3ZlRXZlbnQ6KCk9PlVFZSxyZW1vdmVUZXh0Tm9kZXM6KCk9PmROLHJlc2V0Q3NzVHJhbnNmb3JtOigpPT5veSxzZWxlY3RFbGVtZW50SWZBbGxvd2VkOigpPT5mdGUsc2V0Q2FyZXRQb3NpdGlvbjooKT0+aXksc2V0T3Zlcmxh''@;'; put 'put ''eVBvc2l0aW9uOigpPT5pa30pO3ZhciBNPXt9O0YucihNKSxGLmQoTSx7Y3Vycnk6KCk9Pm10ZSxjdXJyeVJpZ2h0OigpPT4kRWUsZGVib3VuY2U6KCk9Pm1OLGZhc3RDYWxsOigpPT5zayxpc0Z1bmN0aW9uOigpPT5SYSxwYXJ0aWFsOigpPT52TixwaXBlOigpPT5HRWUsdGhyb3R0bGU6KCk9''@;'; put 'put ''Pmd0ZSx0aHJvdHRsZUFmdGVySGl0czooKT0+V0VlfSk7dmFyIE89e307Ri5yKE8pLEYuZChPLHtjbG9uZTooKT0+V3UsY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyOigpPT5fZyxkZWVwQ2xvbmU6KCk9Pnl1LGRlZXBFeHRlbmQ6KCk9PmF5LGRlZXBPYmplY3RTaXplOigpPT5jayxkZWZpbmVH''@;'; put 'put ''ZXR0ZXI6KCk9PmZoLGR1Y2tTY2hlbWE6KCk9PnI3LGV4dGVuZDooKT0+S2wsZ2V0UHJvcGVydHk6KCk9PnZ0ZSxoYXNPd25Qcm9wZXJ0eTooKT0+YmwsaW5oZXJpdDooKT0+emYsaXNPYmplY3Q6KCk9PnVzLGlzT2JqZWN0RXF1YWw6KCk9PmFrLG1peGluOigpPT5UYSxvYmplY3RFYWNoOigp''@;'; put 'put ''PT5kcyxzZXRQcm9wZXJ0eTooKT0+bGt9KTt2YXIgUj17fTtGLnIoUiksRi5kKFIse2lzQ2hyb21lOigpPT5fTixpc0Nocm9tZVdlYktpdDooKT0+eXRlLGlzRWRnZTooKT0+Q3RlLGlzRWRnZVdlYktpdDooKT0+S0VlLGlzRmlyZWZveDooKT0+dWssaXNGaXJlZm94V2ViS2l0OigpPT53dGUs''@;'; put 'put ''aXNJT1M6KCk9PmJOLGlzSXBhZE9TOigpPT55Tixpc0xpbnV4T1M6KCk9PlhFZSxpc01hY09TOigpPT5kayxpc01vYmlsZUJyb3dzZXI6KCk9Pm0yLGlzU2FmYXJpOigpPT5xRWUsaXNXaW5kb3dzT1M6KCk9PndOLHNldEJyb3dzZXJNZXRhOigpPT5fdGUsc2V0UGxhdGZvcm1NZXRhOigpPT5i''@;'; put 'put ''dGV9KTt2YXIgej17fTtGLnIoeiksRi5kKHose0tFWV9DT0RFUzooKT0+Y28saXNDdHJsS2V5OigpPT5RRWUsaXNDdHJsTWV0YUtleTooKT0+TXRlLGlzRnVuY3Rpb25LZXk6KCk9PkNOLGlzS2V5OigpPT5vNyxpc1ByaW50YWJsZUNoYXI6KCk9PlN0ZX0pO3ZhciBLPXt9O0YucihLKSxGLmQo''@;'; put 'put ''Syx7aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6KCk9PmJnLGlzTGVmdENsaWNrOigpPT5oayxpc1JpZ2h0Q2xpY2s6KCk9PlVwLHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjooKT0+djJ9KTt2YXIgST17fTtGLnIoSSksRi5kKEkse19kYXRhVG9IVE1MOigpPT5ETixodG1sVG9Hcmlk''@;'; put 'put ''U2V0dGluZ3M6KCk9Pkl0ZSxpbnN0YW5jZVRvSFRNTDooKT0+VE59KTt2YXIgaz17fTtGLnIoayksRi5kKGsse2lzTnVtZXJpYzooKT0+R3UsaXNOdW1lcmljTGlrZTooKT0+THRlLHJhbmdlRWFjaDooKT0+dm8scmFuZ2VFYWNoUmV2ZXJzZTooKT0+bWssdmFsdWVBY2NvcmRpbmdQZXJjZW50''@;'; put 'put ''OigpPT5JTn0pO3ZhciBFPXt9O0YucihFKSxGLmQoRSx7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PnV5LGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+TnRlLGlzVG91Y2hTdXBwb3J0ZWQ6KCk9PkhOLHJlcXVlc3RBbmltYXRpb25GcmFtZTooKT0+Ymt9KTt2YXIgaj17fTtGLnIoaiksRi5k''@;'; put 'put ''KGose2NvdW50Rmlyc3RSb3dLZXlzOigpPT5sVixjcmVhdGVFbXB0eVNwcmVhZHNoZWV0RGF0YTooKT0+bVRlLGNyZWF0ZVNwcmVhZHNoZWV0RGF0YTooKT0+cFRlLGNyZWF0ZVNwcmVhZHNoZWV0T2JqZWN0RGF0YTooKT0+Z1RlLGRhdGFSb3dUb0NoYW5nZXNBcnJheTooKT0+YVYsaXNBcnJh''@;'; put 'put ''eU9mQXJyYXlzOigpPT5wbmUsaXNBcnJheU9mT2JqZWN0czooKT0+Z25lLHNwcmVhZHNoZWV0Q29sdW1uSW5kZXg6KCk9PmZUZSxzcHJlYWRzaGVldENvbHVtbkxhYmVsOigpPT5Ta30pO3ZhciBWPXt9O0YucihWKSxGLmQoVix7Q09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9Pk5W''@;'; put 'put ''LENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+elYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+cVYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+WlYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9PldWLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT5VVixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT4kVixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PllWLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PkdWLENPTlRF''@;'; put 'put ''WFRNRU5VX0lURU1TX0JPUkRFUlM6KCk9PktWLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5RVixDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PmVCLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PkpWLENPTlRFWFRNRU5VX0lURU1TX0JP''@;'; put 'put ''UkRFUlNfVE9QOigpPT5YVixDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9PkFWLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PlRWLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+TFYsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NP''@;'; put 'put ''TFVNTl9HUk9VUF9IRUFERVJTOigpPT5JVixDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9PkRWLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+UlYsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5WVixDT05URVhUTUVOVV9JVEVNU19GUkVF''@;'; put 'put ''WkVfQ09MVU1OOigpPT5PVixDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+aUIsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9PnNCLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT53VixDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PkNWLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX01FUkdFX0NFTExTOigpPT5GVixDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PnJCLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+bkIsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9''@;'; put 'put ''Pl9WLENPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+a1YsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmpWLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PkVWLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT50QixDT05URVhUTUVOVV9J''@;'; put 'put ''VEVNU19SRU1PVkVfQ09MVU1OOigpPT5NVixDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+QlYsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+U1YsQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT5iVixDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6''@;'; put 'put ''KCk9PnlWLENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5vQixDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+YUIsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+eFYsQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5QVixDT05URVhUTUVOVV9JVEVN''@;'; put 'put ''U19VTk1FUkdFX0NFTExTOigpPT5IVixDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5FbmUsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+UkIsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5JQixGSUxURVJTX0JVVFRPTlNfT0s6KCk9PkxCLEZJTFRFUlNfQlVUVE9OU19QTEFD''@;'; put 'put ''RUhPTERFUl9TRUFSQ0g6KCk9Pk9CLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PkZCLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+UEIsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9PkRCLEZJTFRFUlNfQ09ORElUSU9OU19B''@;'; put 'put ''RlRFUjooKT0+Q0IsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+U0IsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5oQixGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+eUIsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT5qVGUsRklMVEVSU19DT05E''@;'; put 'put ''SVRJT05TX0NPTlRBSU5TOigpPT5wQixGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PmxCLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PmZCLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+dUIsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+bUIsRklM''@;'; put 'put ''VEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+dkIsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+X0IsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+YkIsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+eWwsRklM''@;'; put 'put ''VEVSU19DT05ESVRJT05TX05PTkU6KCk9PklrLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+d0IsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5nQixGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5jQixGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VR''@;'; put 'put ''VUFMOigpPT5kQixGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9Pk1CLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+eEIsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+RUIsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PmtCLEZJTFRFUlNfRElW''@;'; put 'put ''U19GSUxURVJfQllfVkFMVUU6KCk9PkFCLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5UQixGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+TGssRklMVEVSU19OQU1FU1BBQ0U6KCk9PiR1LEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5Sa30pO3ZhciBCPXt9O2Z1''@;'; put 'put ''bmN0aW9uIFkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gWChjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90''@;'; put 'put ''b3R5cGUuY29uc3RydWN0b3I9YSxhfUYucihCKSxGLmQoQix7Z2V0Tm9ybWFsaXplZERhdGU6KCk9PmRyZX0pO2NvbnN0IFU9WChjPT5mdW5jdGlvbihhKXtjKHRoaXMpLHRoaXMubWVzc2FnZT1hP2Ake2EubGVuZ3RofSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxu''@;'; put 'put ''JHthLm1hcCgoZCxoKT0+YCR7aCsxfSkgJHtkLnRvU3RyaW5nKCl9YCkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1hfSk7ZnVuY3Rpb24gcShjLGwpe2lmKGMpe2NvbnN0IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNl''@;'; put 'put ''KGEsMSl9fWNsYXNzIGVle2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtj''@;'; put 'put ''b25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFsVGVhcmRvd246ZH09dGhpcztpZihZKGQpKXRyeXtk''@;'; put 'put ''KCl9Y2F0Y2goZil7bD1mIGluc3RhbmNlb2YgVT9mLmVycm9yczpbZl19Y29uc3R7X2ZpbmFsaXplcnM6aH09dGhpcztpZihoKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7Zm9yKGNvbnN0IGYgb2YgaCl0cnl7c2UoZil9Y2F0Y2goXyl7bD1sPz9bXSxfIGluc3RhbmNlb2YgVT9sPVsuLi5sLC4u''@;'; put 'put ''Ll8uZXJyb3JzXTpsLnB1c2goXyl9fWlmKGwpdGhyb3cgbmV3IFUobCl9fWFkZChsKXt2YXIgYTtpZihsJiZsIT09dGhpcylpZih0aGlzLmNsb3NlZClzZShsKTtlbHNle2lmKGwgaW5zdGFuY2VvZiBlZSl7aWYobC5jbG9zZWR8fGwuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47bC5fYWRkUGFy''@;'; put 'put ''ZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oYT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09YT9hOltdKS5wdXNoKGwpfX1faGFzUGFyZW50KGwpe2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpcztyZXR1cm4gYT09PWx8fEFycmF5LmlzQXJyYXkoYSkmJmEuaW5jbHVkZXMo''@;'; put 'put ''bCl9X2FkZFBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7dGhpcy5fcGFyZW50YWdlPUFycmF5LmlzQXJyYXkoYSk/KGEucHVzaChsKSxhKTphP1thLGxdOmx9X3JlbW92ZVBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7YT09PWw/dGhpcy5fcGFyZW50YWdlPW51''@;'; put 'put ''bGw6QXJyYXkuaXNBcnJheShhKSYmcShhLGwpfXJlbW92ZShsKXtjb25zdHtfZmluYWxpemVyczphfT10aGlzO2EmJnEoYSxsKSxsIGluc3RhbmNlb2YgZWUmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19ZWUuRU1QVFk9KCgpPT57Y29uc3QgYz1uZXcgZWU7cmV0dXJuIGMuY2xvc2VkPSEwLGN9''@;'; put 'put ''KSgpO2NvbnN0IHRlPWVlLkVNUFRZO2Z1bmN0aW9uIG9lKGMpe3JldHVybiBjIGluc3RhbmNlb2YgZWV8fGMmJiJjbG9zZWQiaW4gYyYmWShjLnJlbW92ZSkmJlkoYy5hZGQpJiZZKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHNlKGMpe1koYyk/YygpOmMudW5zdWJzY3JpYmUoKX1jb25zdCBo''@;'; put 'put ''ZT17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfSx1ZT17c2V0VGltZW91dChjLGwsLi4uYSl7Y29u''@;'; put 'put ''c3R7ZGVsZWdhdGU6ZH09dWU7cmV0dXJuIGQ/LnNldFRpbWVvdXQ/ZC5zZXRUaW1lb3V0KGMsbCwuLi5hKTpzZXRUaW1lb3V0KGMsbCwuLi5hKX0sY2xlYXJUaW1lb3V0KGMpe2NvbnN0e2RlbGVnYXRlOmx9PXVlO3JldHVybihsPy5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkoYyl9LGRl''@;'; put 'put ''bGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gY2UoYyl7dWUuc2V0VGltZW91dCgoKT0+e2NvbnN0e29uVW5oYW5kbGVkRXJyb3I6bH09aGU7aWYoIWwpdGhyb3cgYztsKGMpfSl9ZnVuY3Rpb24gRygpe31jb25zdCBiPU4oIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIE4oYyxsLGEpe3JldHVy''@;'; put 'put ''bntraW5kOmMsdmFsdWU6bCxlcnJvcjphfX1sZXQgZz1udWxsO2Z1bmN0aW9uIEMoYyl7aWYoaGUudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7Y29uc3QgbD0hZztpZihsJiYoZz17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRo''@;'; put 'put ''cm93bjphLGVycm9yOmR9PWc7aWYoZz1udWxsLGEpdGhyb3cgZH19ZWxzZSBjKCl9Y2xhc3MgdiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhpcy5kZXN0aW5hdGlvbj1sLG9lKGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlv''@;'; put 'put ''bj1MZX1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IG5lKGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP3hlKGZ1bmN0aW9uIEgoYyl7cmV0dXJuIE4oIk4iLGMsdm9pZCAwKX0obCksdGhpcyk6dGhpcy5fbmV4dChsKX1lcnJvcihsKXt0aGlzLmlzU3RvcHBlZD94ZShmdW5j''@;'; put 'put ''dGlvbiBEKGMpe3JldHVybiBOKCJFIix2b2lkIDAsYyl9KGwpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcihsKSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD94ZShiLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX11bnN1YnNjcmliZSgp''@;'; put 'put ''e3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsc3VwZXIudW5zdWJzY3JpYmUoKSx0aGlzLmRlc3RpbmF0aW9uPW51bGwpfV9uZXh0KGwpe3RoaXMuZGVzdGluYXRpb24ubmV4dChsKX1fZXJyb3IobCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uZXJyb3IobCl9ZmluYWxseXt0aGlzLnVu''@;'; put 'put ''c3Vic2NyaWJlKCl9fV9jb21wbGV0ZSgpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fX1jb25zdCBwPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIHcoYyxsKXtyZXR1cm4gcC5jYWxsKGMsbCl9Y2xhc3MgSntjb25z''@;'; put 'put ''dHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7ZGUoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5''@;'; put 'put ''e2EuZXJyb3IobCl9Y2F0Y2goZCl7ZGUoZCl9ZWxzZSBkZShsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxldGUoKX1jYXRjaChhKXtkZShhKX19fWNsYXNzIG5lIGV4dGVuZHMgdntjb25zdHJ1Y3RvcihsLGEsZCl7''@;'; put 'put ''bGV0IGg7aWYoc3VwZXIoKSxZKGwpfHwhbCloPXtuZXh0Omw/P3ZvaWQgMCxlcnJvcjphPz92b2lkIDAsY29tcGxldGU6ZD8/dm9pZCAwfTtlbHNle2xldCBmO3RoaXMmJmhlLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8oZj1PYmplY3QuY3JlYXRlKGwpLGYudW5zdWJzY3JpYmU9KCk9PnRo''@;'; put 'put ''aXMudW5zdWJzY3JpYmUoKSxoPXtuZXh0OmwubmV4dCYmdyhsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmdyhsLmVycm9yLGYpLGNvbXBsZXRlOmwuY29tcGxldGUmJncobC5jb21wbGV0ZSxmKX0pOmg9bH10aGlzLmRlc3RpbmF0aW9uPW5ldyBKKGgpfX1mdW5jdGlvbiBkZShjKXtoZS51c2VE''@;'; put 'put ''ZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIFMoYyl7aGUudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZyYmKGcuZXJyb3JUaHJvd249ITAsZy5lcnJvcj1jKX0oYyk6Y2UoYyl9ZnVuY3Rpb24geGUoYyxsKXtjb25zdHtvblN0b3BwZWRO''@;'; put 'put ''b3RpZmljYXRpb246YX09aGU7YSYmdWUuc2V0VGltZW91dCgoKT0+YShjLGwpKX1jb25zdCBMZT17Y2xvc2VkOiEwLG5leHQ6RyxlcnJvcjpmdW5jdGlvbiBmZShjKXt0aHJvdyBjfSxjb21wbGV0ZTpHfSxGZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8''@;'; put 'put ''IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gT2UoYyl7cmV0dXJuIGN9ZnVuY3Rpb24gV2UoYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9PZToxPT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBLZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBsdChjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIHZ8fGZ1bmN0aW9u''@;'; put 'put ''IEplKGMpe3JldHVybiBjJiZZKGMubmV4dCkmJlkoYy5lcnJvcikmJlkoYy5jb21wbGV0ZSl9KGMpJiZvZShjKX0oYSk/YTpuZXcgbmUoYSxkLGgpO3JldHVybiBDKCgpPT57Y29uc3R7b3BlcmF0b3I6Xyxzb3VyY2U6VH09dGhpcztmLmFkZChfP18uY2FsbChmLFQpOlQ/dGhpcy5fc3Vic2Ny''@;'; put 'put ''aWJlKGYpOnRoaXMuX3RyeVN1YnNjcmliZShmKSl9KSxmfV90cnlTdWJzY3JpYmUoYSl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUoYSl9Y2F0Y2goZCl7YS5lcnJvcihkKX19Zm9yRWFjaChhLGQpe3JldHVybiBuZXcoZD1ZZShkKSkoKGgsZik9Pntjb25zdCBfPW5ldyBuZSh7bmV4dDpU''@;'; put 'put ''PT57dHJ5e2EoVCl9Y2F0Y2goVyl7ZihXKSxfLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpmLGNvbXBsZXRlOmh9KTt0aGlzLnN1YnNjcmliZShfKX0pfV9zdWJzY3JpYmUoYSl7dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuc3Vic2NyaWJl''@;'; put 'put ''KGEpfVtGZV0oKXtyZXR1cm4gdGhpc31waXBlKC4uLmEpe3JldHVybiBXZShhKSh0aGlzKX10b1Byb21pc2UoYSl7cmV0dXJuIG5ldyhhPVllKGEpKSgoZCxoKT0+e2xldCBmO3RoaXMuc3Vic2NyaWJlKF89PmY9XyxfPT5oKF8pLCgpPT5kKGYpKX0pfX1yZXR1cm4gYy5jcmVhdGU9bD0+bmV3''@;'; put 'put ''IGMobCksY30pKCk7ZnVuY3Rpb24gWWUoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1jPz9oZS5Qcm9taXNlKSYmdm9pZCAwIT09bD9sOlByb21pc2V9Y29uc3QgUGU9WChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNz''@;'; put 'put ''YWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBiZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgS2V7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMu''@;'; put 'put ''aGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgQWUodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1hLGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgUGV9bmV4dChhKXtDKCgpPT57aWYodGhpcy5fdGhyb3dJ''@;'; put 'put ''ZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5jdXJyZW50T2JzZXJ2ZXJzfHwodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPUFycmF5LmZyb20odGhpcy5vYnNlcnZlcnMpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpZC5uZXh0KGEpfX0pfWVycm9yKGEpe0MoKCk9''@;'; put 'put ''PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmhhc0Vycm9yPXRoaXMuaXNTdG9wcGVkPSEwLHRoaXMudGhyb3duRXJyb3I9YTtjb25zdHtvYnNlcnZlcnM6ZH09dGhpcztmb3IoO2QubGVuZ3RoOylkLnNoaWZ0KCkuZXJyb3IoYSl9fSl9Y29tcGxldGUo''@;'; put 'put ''KXtDKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlz''@;'; put 'put ''LmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVsbD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0''@;'; put 'put ''e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/dGU6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLGYucHVzaChhKSxuZXcgZWUoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxxKGYsYSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVz''@;'; put 'put ''ZXMoYSl7Y29uc3R7aGFzRXJyb3I6ZCx0aHJvd25FcnJvcjpoLGlzU3RvcHBlZDpmfT10aGlzO2Q/YS5lcnJvcihoKTpmJiZhLmNvbXBsZXRlKCl9YXNPYnNlcnZhYmxlKCl7Y29uc3QgYT1uZXcgS2U7cmV0dXJuIGEuc291cmNlPXRoaXMsYX19cmV0dXJuIGMuY3JlYXRlPShsLGEpPT5uZXcg''@;'; put 'put ''QWUobCxhKSxjfSkoKTtjbGFzcyBBZSBleHRlbmRzIGJle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPWwsdGhpcy5zb3VyY2U9YX1uZXh0KGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6''@;'; put 'put ''YS5uZXh0KXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9ZXJyb3IobCl7dmFyIGEsZDtudWxsPT09KGQ9bnVsbD09PShhPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmVycm9yKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9Y29tcGxldGUoKXt2YXIgbCxhO251bGw9''@;'; put 'put ''PT0oYT1udWxsPT09KGw9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWw/dm9pZCAwOmwuY29tcGxldGUpfHx2b2lkIDA9PT1hfHxhLmNhbGwobCl9X3N1YnNjcmliZShsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGQ9bnVsbD09PShhPXRoaXMuc291cmNlKXx8dm9pZCAwPT09YT92b2lk''@;'; put 'put ''IDA6YS5zdWJzY3JpYmUobCkpJiZ2b2lkIDAhPT1kP2Q6dGV9fWNsYXNzIFRlIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl92YWx1ZT1sfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZShsKXtjb25zdCBhPXN1cGVyLl9zdWJzY3Jp''@;'; put 'put ''YmUobCk7cmV0dXJuIWEuY2xvc2VkJiZsLm5leHQodGhpcy5fdmFsdWUpLGF9Z2V0VmFsdWUoKXtjb25zdHtoYXNFcnJvcjpsLHRocm93bkVycm9yOmEsX3ZhbHVlOmR9PXRoaXM7aWYobCl0aHJvdyBhO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksZH1uZXh0KGwpe3N1cGVyLm5leHQo''@;'; put 'put ''dGhpcy5fdmFsdWU9bCl9fWZ1bmN0aW9uIHFlKGMpe3JldHVybiBZKGM/LmxpZnQpfWZ1bmN0aW9uIFhlKGMpe3JldHVybiBsPT57aWYocWUobCkpcmV0dXJuIGwubGlmdChmdW5jdGlvbihhKXt0cnl7cmV0dXJuIGMoYSx0aGlzKX1jYXRjaChkKXt0aGlzLmVycm9yKGQpfX0pO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlIil9fWZ1bmN0aW9uIFVlKGMsbCxhLGQsaCl7cmV0dXJuIG5ldyBodChjLGwsYSxkLGgpfWNsYXNzIGh0IGV4dGVuZHMgdntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7c3VwZXIobCksdGhpcy5vbkZp''@;'; put 'put ''bmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT1fLHRoaXMuX25leHQ9YT9mdW5jdGlvbihUKXt0cnl7YShUKX1jYXRjaChXKXtsLmVycm9yKFcpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihUKXt0cnl7aChUKX1jYXRjaChXKXtsLmVycm9yKFcpfWZpbmFsbHl7''@;'; put 'put ''dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKFQpe2wuZXJyb3IoVCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5z''@;'; put 'put ''aG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBNZShjLGwpe3Jl''@;'; put 'put ''dHVybiBYZSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoVWUoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1mdW5jdGlvbiBNdChjLGwsYSxkKXt2YXIgXyxoPWFyZ3VtZW50cy5sZW5ndGgsZj1oPDM/bDpudWxsPT09ZD9kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny''@;'; put 'put ''aXB0b3IobCxhKTpkO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpZj1SZWZsZWN0LmRlY29yYXRlKGMsbCxhLGQpO2Vsc2UgZm9yKHZhciBUPWMubGVuZ3RoLTE7VD49MDtULS0pKF89Y1tUXSkmJihmPShoPDM/XyhmKTpo''@;'; put 'put ''PjM/XyhsLGEsZik6XyhsLGEpKXx8Zik7cmV0dXJuIGg+MyYmZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYSxmKSxmfWZ1bmN0aW9uIF90KGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgX3Q/KHRoaXMudj1jLHRoaXMpOm5ldyBfdChjKX1mdW5jdGlvbiBydChjKXtpZighU3ltYm9sLmFz''@;'; put 'put ''eW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGEsbD1jW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gbD9sLmNhbGwoYyk6KGM9ZnVuY3Rpb24gZnQoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGE9bCYmY1tsXSxkPTA7aWYoYSlyZXR1cm4gYS5jYWxsKGMpO2lmKGMmJiJudW1iZXIiPT10eXBlb2YgYy5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyYmZD49Yy5sZW5ndGgmJihjPXZvaWQgMCkse3ZhbHVlOmMmJmNbZCsr''@;'; put 'put ''XSxkb25lOiFjfX19O3Rocm93IG5ldyBUeXBlRXJyb3IobD8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9KGMpLGE9e30sZCgibmV4dCIpLGQoInRocm93IiksZCgicmV0dXJuIiksYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpc30sYSk7ZnVuY3Rpb24gZChmKXthW2ZdPWNbZl0mJmZ1bmN0aW9uKF8pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihULFcpeyFmdW5jdGlvbiBoKGYsXyxULFcpe1Byb21pc2UucmVzb2x2ZShXKS50aGVuKGZ1bmN0aW9uKGllKXtmKHt2YWx1ZTppZSxk''@;'; put 'put ''b25lOlR9KX0sXyl9KFQsVywoXz1jW2ZdKF8pKS5kb25lLF8udmFsdWUpfSl9fX0iZnVuY3Rpb24iPT10eXBlb2YgU3VwcHJlc3NlZEVycm9yJiZTdXBwcmVzc2VkRXJyb3I7Y29uc3QgT249Yz0+YyYmIm51bWJlciI9PXR5cGVvZiBjLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIGM7ZnVu''@;'; put 'put ''Y3Rpb24gJHQoYyl7cmV0dXJuIFkoYz8udGhlbil9ZnVuY3Rpb24gRm4oYyl7cmV0dXJuIFkoY1tGZV0pfWZ1bmN0aW9uIG5pKGMpe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmWShjPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBsbihjKXtyZXR1cm4gbmV3IFR5cGVF''@;'; put 'put ''cnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwg''@;'; put 'put ''QXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IHFyPWZ1bmN0aW9uIGpuKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCk7ZnVuY3Rpb24gZ2koYyl7cmV0dXJuIFko''@;'; put 'put ''Yz8uW3FyXSl9ZnVuY3Rpb24geHIoYyl7cmV0dXJuIGZ1bmN0aW9uIE50KGMsbCxhKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGgsZD1hLmFwcGx5KGMsbHx8W10pLGY9W107''@;'; put 'put ''cmV0dXJuIGg9e30sXygibmV4dCIpLF8oInRocm93IiksXygicmV0dXJuIiksaFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saDtmdW5jdGlvbiBfKEVlKXtkW0VlXSYmKGhbRWVdPWZ1bmN0aW9uKFplKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o''@;'; put 'put ''b3QsZXQpe2YucHVzaChbRWUsWmUsb3QsZXRdKT4xfHxUKEVlLFplKX0pfSl9ZnVuY3Rpb24gVChFZSxaZSl7dHJ5eyFmdW5jdGlvbiBXKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIF90P1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52KS50aGVuKGllLGdlKTp3ZShmWzBdWzJdLEVlKX0oZFtF''@;'; put 'put ''ZV0oWmUpKX1jYXRjaChvdCl7d2UoZlswXVszXSxvdCl9fWZ1bmN0aW9uIGllKEVlKXtUKCJuZXh0IixFZSl9ZnVuY3Rpb24gZ2UoRWUpe1QoInRocm93IixFZSl9ZnVuY3Rpb24gd2UoRWUsWmUpe0VlKFplKSxmLnNoaWZ0KCksZi5sZW5ndGgmJlQoZlswXVswXSxmWzBdWzFdKX19KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgX3QoYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIF90KHZvaWQgMCk7eWllbGQgeWllbGQgX3QoZCl9fWZpbmFsbHl7YS5yZWxlYXNlTG9j''@;'; put 'put ''aygpfX0pfWZ1bmN0aW9uIFVpKGMpe3JldHVybiBZKGM/LmdldFJlYWRlcil9ZnVuY3Rpb24gS3IoYyl7aWYoYyBpbnN0YW5jZW9mIEtlKXJldHVybiBjO2lmKG51bGwhPWMpe2lmKEZuKGMpKXJldHVybiBmdW5jdGlvbiBubyhjKXtyZXR1cm4gbmV3IEtlKGw9Pntjb25zdCBhPWNbRmVdKCk7''@;'; put 'put ''aWYoWShhLnN1YnNjcmliZSkpcmV0dXJuIGEuc3Vic2NyaWJlKGwpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0oYyk7aWYoT24oYykpcmV0dXJuIGZ1bmN0aW9uIEZyKGMpe3Jl''@;'; put 'put ''dHVybiBuZXcgS2UobD0+e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNbYV0pO2wuY29tcGxldGUoKX0pfShjKTtpZigkdChjKSlyZXR1cm4gZnVuY3Rpb24gcWkoYyl7cmV0dXJuIG5ldyBLZShsPT57Yy50aGVuKGE9PntsLmNsb3NlZHx8KGwubmV4dChh''@;'; put 'put ''KSxsLmNvbXBsZXRlKCkpfSxhPT5sLmVycm9yKGEpKS50aGVuKG51bGwsY2UpfSl9KGMpO2lmKG5pKGMpKXJldHVybiBhbyhjKTtpZihnaShjKSlyZXR1cm4gZnVuY3Rpb24gSmkoYyl7cmV0dXJuIG5ldyBLZShsPT57Zm9yKGNvbnN0IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0''@;'; put 'put ''dXJuO2wuY29tcGxldGUoKX0pfShjKTtpZihVaShjKSlyZXR1cm4gZnVuY3Rpb24gcm8oYyl7cmV0dXJuIGFvKHhyKGMpKX0oYyl9dGhyb3cgbG4oYyl9ZnVuY3Rpb24gYW8oYyl7cmV0dXJuIG5ldyBLZShsPT57KGZ1bmN0aW9uIGlvKGMsbCl7dmFyIGEsZCxoLGY7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IFduKGMsbCxhLGQpe3JldHVybiBuZXcoYXx8KGE9UHJvbWlzZSkpKGZ1bmN0aW9uKGYsXyl7ZnVuY3Rpb24gVChnZSl7dHJ5e2llKGQubmV4dChnZSkpfWNhdGNoKHdlKXtfKHdlKX19ZnVuY3Rpb24gVyhnZSl7dHJ5e2llKGQudGhyb3coZ2UpKX1jYXRjaCh3ZSl7Xyh3ZSl9fWZ1bmN0aW9u''@;'; put 'put ''IGllKGdlKXtnZS5kb25lP2YoZ2UudmFsdWUpOmZ1bmN0aW9uIGgoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBhP2Y6bmV3IGEoZnVuY3Rpb24oXyl7XyhmKX0pfShnZS52YWx1ZSkudGhlbihULFcpfWllKChkPWQuYXBwbHkoYyxsfHxbXSkpLm5leHQoKSl9KX0odGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe3RyeXtmb3IoYT1ydChjKTshKGQ9eWllbGQgYS5uZXh0KCkpLmRvbmU7KWlmKGwubmV4dChkLnZhbHVlKSxsLmNsb3NlZClyZXR1cm59Y2F0Y2goXyl7aD17ZXJyb3I6X319ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKGY9YS5yZXR1cm4pJiYoeWllbGQgZi5jYWxsKGEp''@;'; put 'put ''KX1maW5hbGx5e2lmKGgpdGhyb3cgaC5lcnJvcn19bC5jb21wbGV0ZSgpfSl9KShjLGwpLmNhdGNoKGE9PmwuZXJyb3IoYSkpfSl9ZnVuY3Rpb24gR2koYyxsLGEsZD0wLGg9ITEpe2NvbnN0IGY9bC5zY2hlZHVsZShmdW5jdGlvbigpe2EoKSxoP2MuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxk''@;'; put 'put ''KSk6dGhpcy51bnN1YnNjcmliZSgpfSxkKTtpZihjLmFkZChmKSwhaClyZXR1cm4gZn1mdW5jdGlvbiB5cihjLGwsYT0xLzApe3JldHVybiBZKGwpP3lyKChkLGgpPT5NZSgoZixfKT0+bChkLGYsaCxfKSkoS3IoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksWGUoKGQs''@;'; put 'put ''aCk9PmZ1bmN0aW9uIGhvKGMsbCxhLGQsaCxmLF8sVCl7Y29uc3QgVz1bXTtsZXQgaWU9MCxnZT0wLHdlPSExO2NvbnN0IEVlPSgpPT57d2UmJiFXLmxlbmd0aCYmIWllJiZsLmNvbXBsZXRlKCl9LFplPWV0PT5pZTxkP290KGV0KTpXLnB1c2goZXQpLG90PWV0PT57ZiYmbC5uZXh0KGV0KSxp''@;'; put 'put ''ZSsrO2xldCB5dD0hMTtLcihhKGV0LGdlKyspKS5zdWJzY3JpYmUoVWUobCxrdD0+e2g/LihrdCksZj9aZShrdCk6bC5uZXh0KGt0KX0sKCk9Pnt5dD0hMH0sdm9pZCAwLCgpPT57aWYoeXQpdHJ5e2ZvcihpZS0tO1cubGVuZ3RoJiZpZTxkOyl7Y29uc3Qga3Q9Vy5zaGlmdCgpO18/R2kobCxf''@;'; put 'put ''LCgpPT5vdChrdCkpOm90KGt0KX1FZSgpfWNhdGNoKGt0KXtsLmVycm9yKGt0KX19KSl9O3JldHVybiBjLnN1YnNjcmliZShVZShsLFplLCgpPT57d2U9ITAsRWUoKX0pKSwoKT0+e1Q/LigpfX0oZCxoLGMsYSkpKX1mdW5jdGlvbiBQaShjPTEvMCl7cmV0dXJuIHlyKE9lLGMpfWNvbnN0IExv''@;'; put 'put ''PW5ldyBLZShjPT5jLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIExjKGMpe3JldHVybiBjJiZZKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIHVsKGMpe3JldHVybiBjW2MubGVuZ3RoLTFdfWZ1bmN0aW9uIFJjKGMpe3JldHVybiBZKHVsKGMpKT9jLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBOMChjKXtyZXR1''@;'; put 'put ''cm4gTGModWwoYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGsyKGMsbD0wKXtyZXR1cm4gWGUoKGEsZCk9PnthLnN1YnNjcmliZShVZShkLGg9PkdpKGQsYywoKT0+ZC5uZXh0KGgpLGwpLCgpPT5HaShkLGMsKCk9PmQuY29tcGxldGUoKSxsKSxoPT5HaShkLGMsKCk9PmQuZXJyb3IoaCks''@;'; put 'put ''bCkpKX0pfWZ1bmN0aW9uIGUwKGMsbD0wKXtyZXR1cm4gWGUoKGEsZCk9PntkLmFkZChjLnNjaGVkdWxlKCgpPT5hLnN1YnNjcmliZShkKSxsKSl9KX1mdW5jdGlvbiBBMihjLGwpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IEtl''@;'; put 'put ''KGE9PntHaShhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7R2koYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTphLm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIGVhKGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24g''@;'; put 'put ''UGgoYyxsKXtpZihudWxsIT1jKXtpZihGbihjKSlyZXR1cm4gZnVuY3Rpb24geHUoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYoT24oYykpcmV0dXJuIGZ1bmN0aW9uIFBhKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVs''@;'; put 'put ''ZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZigkdChjKSlyZXR1cm4gZnVuY3Rpb24gZnMoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYo''@;'; put 'put ''bmkoYykpcmV0dXJuIEEyKGMsbCk7aWYoZ2koYykpcmV0dXJuIGZ1bmN0aW9uIFNyKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ7cmV0dXJuIEdpKGEsbCwoKT0+e2Q9Y1txcl0oKSxHaShhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2go''@;'; put 'put ''Xyl7cmV0dXJuIHZvaWQgYS5lcnJvcihfKX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PlkoZD8ucmV0dXJuKSYmZC5yZXR1cm4oKX0pfShjLGwpO2lmKFVpKGMpKXJldHVybiBmdW5jdGlvbiBhMyhjLGwpe3JldHVybiBBMih4cihjKSxsKX0oYyxsKX10aHJvdyBsbihj''@;'; put 'put ''KX0oYyxsKTpLcihjKX1mdW5jdGlvbiBpcyguLi5jKXtjb25zdCBsPU4wKGMpLGE9ZnVuY3Rpb24gczMoYyxsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHVsKGMpP2MucG9wKCk6bH0oYywxLzApLGQ9YztyZXR1cm4gZC5sZW5ndGg/MT09PWQubGVuZ3RoP0tyKGRbMF0pOlBpKGEpKGVhKGQs''@;'; put 'put ''bCkpOkxvfWZ1bmN0aW9uIFdpKC4uLmMpe3JldHVybiBlYShjLE4wKGMpKX1mdW5jdGlvbiAkYShjPXt9KXtjb25zdHtjb25uZWN0b3I6bD0oKCk9Pm5ldyBiZSkscmVzZXRPbkVycm9yOmE9ITAscmVzZXRPbkNvbXBsZXRlOmQ9ITAscmVzZXRPblJlZkNvdW50WmVybzpoPSEwfT1jO3JldHVy''@;'; put 'put ''biBmPT57bGV0IF8sVCxXLGllPTAsZ2U9ITEsd2U9ITE7Y29uc3QgRWU9KCk9PntUPy51bnN1YnNjcmliZSgpLFQ9dm9pZCAwfSxaZT0oKT0+e0VlKCksXz1XPXZvaWQgMCxnZT13ZT0hMX0sb3Q9KCk9Pntjb25zdCBldD1fO1plKCksZXQ/LnVuc3Vic2NyaWJlKCl9O3JldHVybiBYZSgoZXQs''@;'; put 'put ''eXQpPT57aWUrKywhd2UmJiFnZSYmRWUoKTtjb25zdCBrdD1XPVc/P2woKTt5dC5hZGQoKCk9PntpZS0tLDA9PT1pZSYmIXdlJiYhZ2UmJihUPXQwKG90LGgpKX0pLGt0LnN1YnNjcmliZSh5dCksIV8mJmllPjAmJihfPW5ldyBuZSh7bmV4dDpTdD0+a3QubmV4dChTdCksZXJyb3I6U3Q9Pnt3''@;'; put 'put ''ZT0hMCxFZSgpLFQ9dDAoWmUsYSxTdCksa3QuZXJyb3IoU3QpfSxjb21wbGV0ZTooKT0+e2dlPSEwLEVlKCksVD10MChaZSxkKSxrdC5jb21wbGV0ZSgpfX0pLEtyKGV0KS5zdWJzY3JpYmUoXykpfSkoZil9fWZ1bmN0aW9uIHQwKGMsbCwuLi5hKXtpZighMD09PWwpcmV0dXJuIHZvaWQgYygp''@;'; put 'put ''O2lmKCExPT09bClyZXR1cm47Y29uc3QgZD1uZXcgbmUoe25leHQ6KCk9PntkLnVuc3Vic2NyaWJlKCksYygpfX0pO3JldHVybiBLcihsKC4uLmEpKS5zdWJzY3JpYmUoZCl9ZnVuY3Rpb24gU2EoYyxsKXtyZXR1cm4gWGUoKGEsZCk9PntsZXQgaD1udWxsLGY9MCxfPSExO2NvbnN0IFQ9KCk9''@;'; put 'put ''Pl8mJiFoJiZkLmNvbXBsZXRlKCk7YS5zdWJzY3JpYmUoVWUoZCxXPT57aD8udW5zdWJzY3JpYmUoKTtsZXQgaWU9MDtjb25zdCBnZT1mKys7S3IoYyhXLGdlKSkuc3Vic2NyaWJlKGg9VWUoZCx3ZT0+ZC5uZXh0KGw/bChXLHdlLGdlLGllKyspOndlKSwoKT0+e2g9bnVsbCxUKCl9KSl9LCgp''@;'; put 'put ''PT57Xz0hMCxUKCl9KSl9KX1mdW5jdGlvbiBFdShjLGwpe3JldHVybiBjPT09bH1mdW5jdGlvbiBBcyhjKXtmb3IobGV0IGwgaW4gYylpZihjW2xdPT09QXMpcmV0dXJuIGw7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJlbmFtZWQgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4iKX1m''@;'; put 'put ''dW5jdGlvbiBuMChjLGwpe2Zvcihjb25zdCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmIWMuaGFzT3duUHJvcGVydHkoYSkmJihjW2FdPWxbYV0pfWZ1bmN0aW9uIHFhKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihBcnJheS5pc0FycmF5KGMpKXJldHVybiJbIitj''@;'; put 'put ''Lm1hcChxYSkuam9pbigiLCAiKSsiXSI7aWYobnVsbD09YylyZXR1cm4iIitjO2lmKGMub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7Yy5vdmVycmlkZGVuTmFtZX1gO2lmKGMubmFtZSlyZXR1cm5gJHtjLm5hbWV9YDtjb25zdCBsPWMudG9TdHJpbmcoKTtpZihudWxsPT1sKXJldHVybiIiK2w7''@;'; put 'put ''Y29uc3QgYT1sLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1hP2w6bC5zdWJzdHJpbmcoMCxhKX1mdW5jdGlvbiB2YyhjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWM/bnVsbD09PWw/IiI6bDpudWxsPT1sfHwiIj09PWw/YzpjKyIgIitsfWNvbnN0IEhoPUFzKHtfX2ZvcndhcmRfcmVmX186''@;'; put 'put ''QXN9KTtmdW5jdGlvbiBJcyhjKXtyZXR1cm4gYy5fX2ZvcndhcmRfcmVmX189SXMsYy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBxYSh0aGlzKCkpfSxjfWZ1bmN0aW9uIGJvKGMpe3JldHVybiByMChjKT9jKCk6Y31mdW5jdGlvbiByMChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''YyYmYy5oYXNPd25Qcm9wZXJ0eShIaCkmJmMuX19mb3J3YXJkX3JlZl9fPT09SXN9ZnVuY3Rpb24gVDIoYyl7cmV0dXJuIGMmJiEhYy5cdTAyNzVwcm92aWRlcnN9Y29uc3QgbDM9Imh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiO2NsYXNzIEFyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0''@;'; put 'put ''b3IobCxhKXtzdXBlcihmdW5jdGlvbiBfYyhjLGwpe3JldHVybmBORzAke01hdGguYWJzKGMpfSR7bD8iOiAiK2w6IiJ9YH0obCxhKSksdGhpcy5jb2RlPWx9fWZ1bmN0aW9uIGtvKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0aW9uIFFp''@;'; put 'put ''KGMsbCl7dGhyb3cgbmV3IEFyKC0yMDEsITEpfWZ1bmN0aW9uIGZyKGMsbCl7bnVsbD09YyYmZnVuY3Rpb24gSG8oYyxsLGEsZCl7dGhyb3cgbmV3IEVycm9yKGBBU1NFUlRJT04gRVJST1I6ICR7Y31gKyhudWxsPT1kPyIiOmAgW0V4cGVjdGVkPT4gJHthfSAke2R9ICR7bH0gPD1BY3R1YWxd''@;'; put 'put ''YCkpfShsLGMsbnVsbCwiIT0iKX1mdW5jdGlvbiBkcihjKXtyZXR1cm57dG9rZW46Yy50b2tlbixwcm92aWRlZEluOmMucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OmMuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIG1pKGMpe3JldHVybntwcm92aWRlcnM6Yy5wcm92aWRlcnN8fFtd''@;'; put 'put ''LGltcG9ydHM6Yy5pbXBvcnRzfHxbXX19ZnVuY3Rpb24geGQoYyl7cmV0dXJuIEIwKGMsYzMpfHxCMChjLE5zKX1mdW5jdGlvbiBCMChjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KGwpP2NbbF06bnVsbH1mdW5jdGlvbiBubShjKXtyZXR1cm4gYyYmKGMuaGFzT3duUHJvcGVydHkoamgp''@;'; put 'put ''fHxjLmhhc093blByb3BlcnR5KHE3KSk/Y1tqaF06bnVsbH1jb25zdCBjMz1Bcyh7XHUwMjc1cHJvdjpBc30pLGpoPUFzKHtcdTAyNzVpbmo6QXN9KSxOcz1Bcyh7bmdJbmplY3RhYmxlRGVmOkFzfSkscTc9QXMoe25nSW5qZWN0b3JEZWY6QXN9KTt2YXIgbnM9ZnVuY3Rpb24oYyl7cmV0dXJu''@;'; put 'put ''IGNbYy5EZWZhdWx0PTBdPSJEZWZhdWx0IixjW2MuSG9zdD0xXT0iSG9zdCIsY1tjLlNlbGY9Ml09IlNlbGYiLGNbYy5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLGNbYy5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGN9KG5zfHx7fSk7bGV0IGg0O2Z1bmN0aW9uIGRpKGMpe2NvbnN0IGw9aDQ7cmV0''@;'; put 'put ''dXJuIGg0PWMsbH1mdW5jdGlvbiBXcyhjLGwsYSl7Y29uc3QgZD14ZChjKTtyZXR1cm4gZCYmInJvb3QiPT1kLnByb3ZpZGVkSW4/dm9pZCAwPT09ZC52YWx1ZT9kLnZhbHVlPWQuZmFjdG9yeSgpOmQudmFsdWU6YSZucy5PcHRpb25hbD9udWxsOnZvaWQgMCE9PWw/bDp2b2lkIFFpKHFhKGMp''@;'; put 'put ''KX1jb25zdCBPaT0oKCk9PnR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpc3x8dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNl''@;'; put 'put ''b2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksczA9e30sazE9Il9fTkdfRElfRkxBR19fIixrdT0ibmdUZW1wVG9rZW5QYXRoIixuYz0vXG4vZ20sb209Il9fc291cmNlIjtsZXQga2Q7ZnVuY3Rpb24gQTEoYyl7Y29uc3QgbD1rZDtyZXR1cm4ga2Q9YyxsfWZ1bmN0aW9uIEs3KGMsbD1u''@;'; put 'put ''cy5EZWZhdWx0KXtpZih2b2lkIDA9PT1rZCl0aHJvdyBuZXcgQXIoLTIwMywhMSk7cmV0dXJuIG51bGw9PT1rZD9XcyhjLHZvaWQgMCxsKTprZC5nZXQoYyxsJm5zLk9wdGlvbmFsP251bGw6dm9pZCAwLGwpfWZ1bmN0aW9uIGFyKGMsbD1ucy5EZWZhdWx0KXtyZXR1cm4oZnVuY3Rpb24gc3Mo''@;'; put 'put ''KXtyZXR1cm4gaDR9KCl8fEs3KShibyhjKSxsKX1mdW5jdGlvbiBGaShjLGw9bnMuRGVmYXVsdCl7cmV0dXJuIGFyKGMsYTAobCkpfWZ1bmN0aW9uIGEwKGMpe3JldHVybiB0eXBlb2YgYz4idSJ8fCJudW1iZXIiPT10eXBlb2YgYz9jOjB8KGMub3B0aW9uYWwmJjgpfChjLmhvc3QmJjEpfChj''@;'; put 'put ''LnNlbGYmJjIpfChjLnNraXBTZWxmJiY0KX1mdW5jdGlvbiBLYyhjKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWJvKGNbYV0pO2lmKEFycmF5LmlzQXJyYXkoZCkpe2lmKDA9PT1kLmxlbmd0aCl0aHJvdyBuZXcgQXIoOTAwLCExKTtsZXQgaCxmPW5z''@;'; put 'put ''LkRlZmF1bHQ7Zm9yKGxldCBfPTA7XzxkLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZFtfXSxXPXNtKFQpOyJudW1iZXIiPT10eXBlb2YgVz8tMT09PVc/aD1ULnRva2VuOmZ8PVc6aD1UfWwucHVzaChhcihoLGYpKX1lbHNlIGwucHVzaChhcihkKSl9cmV0dXJuIGx9ZnVuY3Rpb24gemgoYyxsKXty''@;'; put 'put ''ZXR1cm4gY1trMV09bCxjLnByb3RvdHlwZVtrMV09bCxjfWZ1bmN0aW9uIHNtKGMpe3JldHVybiBjW2sxXX1mdW5jdGlvbiBkdShjKXtyZXR1cm57dG9TdHJpbmc6Y30udG9TdHJpbmcoKX12YXIgVDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5PblB1c2g9MF09Ik9uUHVzaCIsY1tjLkRlZmF1''@;'; put 'put ''bHQ9MV09IkRlZmF1bHQiLGN9KFQxfHx7fSksT2M9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FbXVsYXRlZD0wXT0iRW11bGF0ZWQiLGNbYy5Ob25lPTJdPSJOb25lIixjW2MuU2hhZG93RG9tPTNdPSJTaGFkb3dEb20iLGN9KE9jfHx7fSk7Y29uc3QgWGM9e30sU3M9W10sVGQ9QXMoe1x1MDI3''@;'; put 'put ''NWNtcDpBc30pLFVoPUFzKHtcdTAyNzVkaXI6QXN9KSxKYz1Bcyh7XHUwMjc1cGlwZTpBc30pLEQxPUFzKHtcdTAyNzVtb2Q6QXN9KSxsMD1Bcyh7XHUwMjc1ZmFjOkFzfSksWmg9QXMoe19fTkdfRUxFTUVOVF9JRF9fOkFzfSksbWE9QXMoe19fTkdfRU5WX0lEX186QXN9KTtmdW5jdGlvbiBQ''@;'; put 'put ''YyhjLGwsYSl7bGV0IGQ9Yy5sZW5ndGg7Zm9yKDs7KXtjb25zdCBoPWMuaW5kZXhPZihsLGEpO2lmKC0xPT09aClyZXR1cm4gaDtpZigwPT09aHx8Yy5jaGFyQ29kZUF0KGgtMSk8PTMyKXtjb25zdCBmPWwubGVuZ3RoO2lmKGgrZj09PWR8fGMuY2hhckNvZGVBdChoK2YpPD0zMilyZXR1cm4g''@;'; put 'put ''aH1hPWgrMX19ZnVuY3Rpb24gRGQoYyxsLGEpe2xldCBkPTA7Zm9yKDtkPGEubGVuZ3RoOyl7Y29uc3QgaD1hW2RdO2lmKCJudW1iZXIiPT10eXBlb2YgaCl7aWYoMCE9PWgpYnJlYWs7ZCsrO2NvbnN0IGY9YVtkKytdLF89YVtkKytdLFQ9YVtkKytdO2Muc2V0QXR0cmlidXRlKGwsXyxULGYp''@;'; put 'put ''fWVsc2V7Y29uc3QgZj1oLF89YVsrK2RdO2Y0KGYpP2Muc2V0UHJvcGVydHkobCxmLF8pOmMuc2V0QXR0cmlidXRlKGwsZixfKSxkKyt9fXJldHVybiBkfWZ1bmN0aW9uIFIyKGMpe3JldHVybiAzPT09Y3x8ND09PWN8fDY9PT1jfWZ1bmN0aW9uIGY0KGMpe3JldHVybiA2ND09PWMuY2hhckNv''@;'; put 'put ''ZGVBdCgwKX1mdW5jdGlvbiBZaChjLGwpe2lmKG51bGwhPT1sJiYwIT09bC5sZW5ndGgpaWYobnVsbD09PWN8fDA9PT1jLmxlbmd0aCljPWwuc2xpY2UoKTtlbHNle2xldCBhPS0xO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKXtjb25zdCBoPWxbZF07Im51bWJlciI9PXR5cGVvZiBoP2E9''@;'; put 'put ''aDowPT09YXx8cDQoYyxhLGgsbnVsbCwtMT09PWF8fDI9PT1hP2xbKytkXTpudWxsKX19cmV0dXJuIGN9ZnVuY3Rpb24gcDQoYyxsLGEsZCxoKXtsZXQgZj0wLF89Yy5sZW5ndGg7aWYoLTE9PT1sKV89LTE7ZWxzZSBmb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZisrXTtpZigibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIFQpe2lmKFQ9PT1sKXtfPS0xO2JyZWFrfWlmKFQ+bCl7Xz1mLTE7YnJlYWt9fX1mb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZl07aWYoIm51bWJlciI9PXR5cGVvZiBUKWJyZWFrO2lmKFQ9PT1hKXtpZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsIT09aCYmKGNbZisx''@;'; put 'put ''XT1oKSk7aWYoZD09PWNbZisxXSlyZXR1cm4gdm9pZChjW2YrMl09aCl9ZisrLG51bGwhPT1kJiZmKyssbnVsbCE9PWgmJmYrK30tMSE9PV8mJihjLnNwbGljZShfLDAsbCksZj1fKzEpLGMuc3BsaWNlKGYrKywwLGEpLG51bGwhPT1kJiZjLnNwbGljZShmKyssMCxkKSxudWxsIT09aCYmYy5z''@;'; put 'put ''cGxpY2UoZisrLDAsaCl9Y29uc3QgZzQ9Im5nLXRlbXBsYXRlIjtmdW5jdGlvbiBYNyhjLGwsYSl7bGV0IGQ9MCxoPSEwO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZCsrXTtpZigic3RyaW5nIj09dHlwZW9mIGYmJmgpe2NvbnN0IF89Y1tkKytdO2lmKGEmJiJjbGFzcyI9PT1mJiYtMSE9''@;'; put 'put ''PVBjKF8udG9Mb3dlckNhc2UoKSxsLDApKXJldHVybiEwfWVsc2V7aWYoMT09PWYpe2Zvcig7ZDxjLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZihmPWNbZCsrXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWwpcmV0dXJuITA7cmV0dXJuITF9Im51bWJlciI9PXR5cGVvZiBmJiYoaD0hMSl9fXJl''@;'; put 'put ''dHVybiExfWZ1bmN0aW9uIHUzKGMpe3JldHVybiA0PT09Yy50eXBlJiZjLnZhbHVlIT09ZzR9ZnVuY3Rpb24gTWEoYyxsLGEpe3JldHVybiBsPT09KDQhPT1jLnR5cGV8fGE/Yy52YWx1ZTpnNCl9ZnVuY3Rpb24gYzAoYyxsLGEpe2xldCBkPTQ7Y29uc3QgaD1jLmF0dHJzfHxbXSxmPWZ1bmN0''@;'; put 'put ''aW9uIEo3KGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKFIyKGNbbF0pKXJldHVybiBsO3JldHVybiBjLmxlbmd0aH0oaCk7bGV0IF89ITE7Zm9yKGxldCBUPTA7VDxsLmxlbmd0aDtUKyspe2NvbnN0IFc9bFtUXTtpZigibnVtYmVyIiE9dHlwZW9mIFcpe2lmKCFfKWlmKDQmZCl7''@;'; put 'put ''aWYoZD0yfDEmZCwiIiE9PVcmJiFNYShjLFcsYSl8fCIiPT09VyYmMT09PWwubGVuZ3RoKXtpZihGYyhkKSlyZXR1cm4hMTtfPSEwfX1lbHNle2NvbnN0IGllPTgmZD9XOmxbKytUXTtpZig4JmQmJm51bGwhPT1jLmF0dHJzKXtpZighWDcoYy5hdHRycyxpZSxhKSl7aWYoRmMoZCkpcmV0dXJu''@;'; put 'put ''ITE7Xz0hMH1jb250aW51ZX1jb25zdCB3ZT1kMyg4JmQ/ImNsYXNzIjpXLGgsdTMoYyksYSk7aWYoLTE9PT13ZSl7aWYoRmMoZCkpcmV0dXJuITE7Xz0hMDtjb250aW51ZX1pZigiIiE9PWllKXtsZXQgRWU7RWU9d2U+Zj8iIjpoW3dlKzFdLnRvTG93ZXJDYXNlKCk7Y29uc3QgWmU9OCZkP0Vl''@;'; put 'put ''Om51bGw7aWYoWmUmJi0xIT09UGMoWmUsaWUsMCl8fDImZCYmaWUhPT1FZSl7aWYoRmMoZCkpcmV0dXJuITE7Xz0hMH19fX1lbHNle2lmKCFfJiYhRmMoZCkmJiFGYyhXKSlyZXR1cm4hMTtpZihfJiZGYyhXKSljb250aW51ZTtfPSExLGQ9V3wxJmR9fXJldHVybiBGYyhkKXx8X31mdW5jdGlv''@;'; put 'put ''biBGYyhjKXtyZXR1cm4gMD09KDEmYyl9ZnVuY3Rpb24gZDMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3QgXz1sW2hdO2lmKF89PT1jKXJldHVybiBoO2lmKDM9PT1ffHw2PT09XylmPSEwO2Vs''@;'; put 'put ''c2V7aWYoMT09PV98fDI9PT1fKXtsZXQgVD1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIFQ7KVQ9bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT1fKWJyZWFrO2lmKDA9PT1fKXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24gUTcoYyxsKXtsZXQgYT1j''@;'; put 'put ''LmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBtNChjLGwsYT0hMSl7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0''@;'; put 'put ''aDtkKyspaWYoYzAoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHY0KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsrKWlmKGNbaF0hPT1kW2hd''@;'; put 'put ''KWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIGRsKGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBhbShjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCBfPWNbYV07aWYoInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBfKWlmKDImZCl7Y29uc3QgVD1jWysrYV07aCs9IlsiK18rKFQubGVuZ3RoPjA/Jz0iJytUKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIitfOjQmZCYmKGgrPSIgIitfKTtlbHNlIiIhPT1oJiYhRmMoXykmJihsKz1kbChmLGgpLGg9IiIpLGQ9XyxmPWZ8fCFGYyhkKTthKyt9''@;'; put 'put ''cmV0dXJuIiIhPT1oJiYobCs9ZGwoZixoKSksbH1mdW5jdGlvbiB3cihjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPUM0KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3Rv''@;'; put 'put ''cnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09VDEuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpsLnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3Rvcjpu''@;'; put 'put ''dWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fE9jLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8U3MsXzpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGwsaWQ6IiJ9O2NtKGEpO2NvbnN0''@;'; put 'put ''IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1mMyhkLCExKSxhLnBpcGVEZWZzPWYzKGQsITApLGEuaWQ9ZnVuY3Rpb24gbjkoYyl7bGV0IGw9MDtjb25zdCBhPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RWYXJzLGMuaG9zdEF0dHJzLGMu''@;'; put 'put ''Y29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYy50eXBlLnByb3RvdHlw''@;'; put 'put ''ZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKTw8MDtyZXR1cm4gbCs9MjE0NzQ4MzY0OCwiYyIrbH0oYSksYX0pfWZ1bmN0aW9uIHk0KGMpe3JldHVybiBRbyhjKXx8''@;'; put 'put ''S2EoYyl9ZnVuY3Rpb24gbG0oYyl7cmV0dXJuIG51bGwhPT1jfWZ1bmN0aW9uIHZpKGMpe3JldHVybiBkdSgoKT0+KHt0eXBlOmMudHlwZSxib290c3RyYXA6Yy5ib290c3RyYXB8fFNzLGRlY2xhcmF0aW9uczpjLmRlY2xhcmF0aW9uc3x8U3MsaW1wb3J0czpjLmltcG9ydHN8fFNzLGV4cG9y''@;'; put 'put ''dHM6Yy5leHBvcnRzfHxTcyx0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLGlkOmMuaWR8fG51bGx9KSl9ZnVuY3Rpb24gaDMoYyxsKXtpZihudWxsPT1jKXJldHVybiBYYztjb25zdCBhPXt9O2Zvcihjb25zdCBkIGluIGMpaWYoYy5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eShkKSl7bGV0IGg9Y1tkXSxmPWg7QXJyYXkuaXNBcnJheShoKSYmKGY9aFsxXSxoPWhbMF0pLGFbaF09ZCxsJiYobFtoXT1mKX1yZXR1cm4gYX1mdW5jdGlvbiBDcihjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPUM0KGMpO3JldHVybiBjbShsKSxsfSl9ZnVuY3Rpb24gTmEoYyl7''@;'; put 'put ''cmV0dXJue3R5cGU6Yy50eXBlLG5hbWU6Yy5uYW1lLGZhY3Rvcnk6bnVsbCxwdXJlOiExIT09Yy5wdXJlLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsb25EZXN0cm95OmMudHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIFFvKGMpe3JldHVybiBjW1RkXXx8''@;'; put 'put ''bnVsbH1mdW5jdGlvbiBLYShjKXtyZXR1cm4gY1tVaF18fG51bGx9ZnVuY3Rpb24gUmwoYyl7cmV0dXJuIGNbSmNdfHxudWxsfWZ1bmN0aW9uIEhjKGMsbCl7Y29uc3QgYT1jW0QxXXx8bnVsbDtpZighYSYmITA9PT1sKXRocm93IG5ldyBFcnJvcihgVHlwZSAke3FhKGMpfSBkb2VzIG5vdCBo''@;'; put 'put ''YXZlICdcdTAyNzVtb2QnIHByb3BlcnR5LmApO3JldHVybiBhfWZ1bmN0aW9uIEM0KGMpe2NvbnN0IGw9e307cmV0dXJue3R5cGU6Yy50eXBlLHByb3ZpZGVyc1Jlc29sdmVyOm51bGwsZmFjdG9yeTpudWxsLGhvc3RCaW5kaW5nczpjLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0VmFyczpjLmhv''@;'; put 'put ''c3RWYXJzfHwwLGhvc3RBdHRyczpjLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpjLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRzOmwsaW5wdXRUcmFuc2Zvcm1zOm51bGwsaW5wdXRDb25maWc6Yy5pbnB1dHN8fFhjLGV4cG9ydEFzOmMuZXhwb3J0QXN8fG51bGws''@;'; put 'put ''c3RhbmRhbG9uZTohMD09PWMuc3RhbmRhbG9uZSxzaWduYWxzOiEwPT09Yy5zaWduYWxzLHNlbGVjdG9yczpjLnNlbGVjdG9yc3x8U3Msdmlld1F1ZXJ5OmMudmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOmMuZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2ZURl''@;'; put 'put ''ZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czpoMyhjLmlucHV0cyxsKSxvdXRwdXRzOmgzKGMub3V0cHV0cyl9fWZ1bmN0aW9uIGNtKGMpe2MuZmVhdHVyZXM/LmZvckVhY2gobD0+bChjKSl9ZnVuY3Rpb24gZjMoYyxsKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBhPWw/Umw6''@;'; put 'put ''eTQ7cmV0dXJuKCk9PigiZnVuY3Rpb24iPT10eXBlb2YgYz9jKCk6YykubWFwKGQ9PmEoZCkpLmZpbHRlcihsbSl9Y29uc3QgSGk9MCxCaT0xLERvPTIsdWE9MyxYYT00LEkxPTUsem89NixUdT03LFZhPTgsTGQ9OSxMMT0xMCxWbz0xMSxHaD0xMixTND0xMyxPbD0xNCxKYT0xNSxPMj0xNixQ''@;'; put 'put ''Mj0xNyxodT0xOCwkaD0xOSxSMT0yMCxPMT0yMSx1MD0yMixwMz0yMyxnMz0yNCxwcz0yNSxNND0xLHVtPTIsZDA9NyxIMj05LHJjPTExO2Z1bmN0aW9uIENjKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbTTRdfWZ1bmN0aW9uIGljKGMpe3JldHVybiBB''@;'; put 'put ''cnJheS5pc0FycmF5KGMpJiYhMD09PWNbTTRdfWZ1bmN0aW9uIE9kKGMpe3JldHVybiAwIT0oNCZjLmZsYWdzKX1mdW5jdGlvbiBQMShjKXtyZXR1cm4gYy5jb21wb25lbnRPZmZzZXQ+LTF9ZnVuY3Rpb24gcWgoYyl7cmV0dXJuIDE9PSgxJmMuZmxhZ3MpfWZ1bmN0aW9uIFFjKGMpe3JldHVy''@;'; put 'put ''biEhYy50ZW1wbGF0ZX1mdW5jdGlvbiB4NChjKXtyZXR1cm4gMCE9KDUxMiZjW0RvXSl9ZnVuY3Rpb24gSDEoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShsMCk/Y1tsMF06bnVsbH1sZXQgSGQ9T2kuV2Vha1JlZj8/Y2xhc3MgajB7Y29uc3RydWN0b3IobCl7dGhpcy5yZWY9bH1kZXJl''@;'; put 'put ''Zigpe3JldHVybiB0aGlzLnJlZn19LG1tPTAsRHU9bnVsbCxtMz0hMTtmdW5jdGlvbiBmbChjKXtjb25zdCBsPUR1O3JldHVybiBEdT1jLGx9Y2xhc3MgdjN7Y29uc3RydWN0b3IoKXt0aGlzLmlkPW1tKyssdGhpcy5yZWY9ZnVuY3Rpb24gTjIoYyl7cmV0dXJuIG5ldyBIZChjKX0odGhpcyks''@;'; put 'put ''dGhpcy5wcm9kdWNlcnM9bmV3IE1hcCx0aGlzLmNvbnN1bWVycz1uZXcgTWFwLHRoaXMudHJhY2tpbmdWZXJzaW9uPTAsdGhpcy52YWx1ZVZlcnNpb249MH1jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKXtmb3IoY29uc3RbbCxhXW9mIHRoaXMucHJvZHVjZXJzKXtjb25zdCBkPWEu''@;'; put 'put ''cHJvZHVjZXJOb2RlLmRlcmVmKCk7aWYobnVsbCE9ZCYmYS5hdFRyYWNraW5nVmVyc2lvbj09PXRoaXMudHJhY2tpbmdWZXJzaW9uKXtpZihkLnByb2R1Y2VyUG9sbFN0YXR1cyhhLnNlZW5WYWx1ZVZlcnNpb24pKXJldHVybiEwfWVsc2UgdGhpcy5wcm9kdWNlcnMuZGVsZXRlKGwpLGQ/LmNv''@;'; put 'put ''bnN1bWVycy5kZWxldGUodGhpcy5pZCl9cmV0dXJuITF9cHJvZHVjZXJNYXlIYXZlQ2hhbmdlZCgpe2NvbnN0IGw9bTM7bTM9ITA7dHJ5e2Zvcihjb25zdFthLGRdb2YgdGhpcy5jb25zdW1lcnMpe2NvbnN0IGg9ZC5jb25zdW1lck5vZGUuZGVyZWYoKTtudWxsIT1oJiZoLnRyYWNraW5nVmVy''@;'; put 'put ''c2lvbj09PWQuYXRUcmFja2luZ1ZlcnNpb24/aC5vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCk6KHRoaXMuY29uc3VtZXJzLmRlbGV0ZShhKSxoPy5wcm9kdWNlcnMuZGVsZXRlKHRoaXMuaWQpKX19ZmluYWxseXttMz1sfX1wcm9kdWNlckFjY2Vzc2VkKCl7aWYobTMpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCIiKTtpZihudWxsPT09RHUpcmV0dXJuO2xldCBsPUR1LnByb2R1Y2Vycy5nZXQodGhpcy5pZCk7dm9pZCAwPT09bD8obD17Y29uc3VtZXJOb2RlOkR1LnJlZixwcm9kdWNlck5vZGU6dGhpcy5yZWYsc2VlblZhbHVlVmVyc2lvbjp0aGlzLnZhbHVlVmVyc2lvbixhdFRy''@;'; put 'put ''YWNraW5nVmVyc2lvbjpEdS50cmFja2luZ1ZlcnNpb259LER1LnByb2R1Y2Vycy5zZXQodGhpcy5pZCxsKSx0aGlzLmNvbnN1bWVycy5zZXQoRHUuaWQsbCkpOihsLnNlZW5WYWx1ZVZlcnNpb249dGhpcy52YWx1ZVZlcnNpb24sbC5hdFRyYWNraW5nVmVyc2lvbj1EdS50cmFja2luZ1ZlcnNp''@;'; put 'put ''b24pfWdldCBoYXNQcm9kdWNlcnMoKXtyZXR1cm4gdGhpcy5wcm9kdWNlcnMuc2l6ZT4wfWdldCBwcm9kdWNlclVwZGF0ZXNBbGxvd2VkKCl7cmV0dXJuITEhPT1EdT8uY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlc31wcm9kdWNlclBvbGxTdGF0dXMobCl7cmV0dXJuIHRoaXMudmFsdWVWZXJz''@;'; put 'put ''aW9uIT09bHx8KHRoaXMub25Qcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbigpLHRoaXMudmFsdWVWZXJzaW9uIT09bCl9fWxldCBMdT1udWxsO2Z1bmN0aW9uIEtoKGMpe2NvbnN0IGw9ZmwobnVsbCk7dHJ5e3JldHVybiBjKCl9ZmluYWxseXtmbChsKX19Y29uc3QgVTA9KCk9Pnt9O2NsYXNz''@;'; put 'put ''IF9tIGV4dGVuZHMgdjN7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKCksdGhpcy53YXRjaD1sLHRoaXMuc2NoZWR1bGU9YSx0aGlzLmRpcnR5PSExLHRoaXMuY2xlYW51cEZuPVUwLHRoaXMucmVnaXN0ZXJPbkNsZWFudXA9aD0+e3RoaXMuY2xlYW51cEZuPWh9LHRoaXMuY29uc3VtZXJBbGxv''@;'; put 'put ''d1NpZ25hbFdyaXRlcz1kfW5vdGlmeSgpe3RoaXMuZGlydHl8fHRoaXMuc2NoZWR1bGUodGhpcyksdGhpcy5kaXJ0eT0hMH1vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCl7dGhpcy5ub3RpZnkoKX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fXJ1bigpe2lmKHRo''@;'; put 'put ''aXMuZGlydHk9ITEsMCE9PXRoaXMudHJhY2tpbmdWZXJzaW9uJiYhdGhpcy5jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKSlyZXR1cm47Y29uc3QgbD1mbCh0aGlzKTt0aGlzLnRyYWNraW5nVmVyc2lvbisrO3RyeXt0aGlzLmNsZWFudXBGbigpLHRoaXMuY2xlYW51cEZuPVUwLHRo''@;'; put 'put ''aXMud2F0Y2godGhpcy5yZWdpc3Rlck9uQ2xlYW51cCl9ZmluYWxseXtmbChsKX19Y2xlYW51cCgpe3RoaXMuY2xlYW51cEZuKCl9fWNsYXNzIGc5e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnByZXZpb3VzVmFsdWU9bCx0aGlzLmN1cnJlbnRWYWx1ZT1hLHRoaXMuZmlyc3RDaGFuZ2U9ZH1p''@;'; put 'put ''c0ZpcnN0Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZmlyc3RDaGFuZ2V9fWZ1bmN0aW9uIHZhKCl7cmV0dXJuIFQ0fWZ1bmN0aW9uIFQ0KGMpe3JldHVybiBjLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYoYy5zZXRJbnB1dD12OSksbTl9ZnVuY3Rpb24gbTkoKXtjb25zdCBjPWJtKHRoaXMp''@;'; put 'put ''LGw9Yz8uY3VycmVudDtpZihsKXtjb25zdCBhPWMucHJldmlvdXM7aWYoYT09PVhjKWMucHJldmlvdXM9bDtlbHNlIGZvcihsZXQgZCBpbiBsKWFbZF09bFtkXTtjLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKGwpfX1mdW5jdGlvbiB2OShjLGwsYSxkKXtjb25zdCBoPXRoaXMuZGVj''@;'; put 'put ''bGFyZWRJbnB1dHNbYV0sZj1ibShjKXx8ZnVuY3Rpb24gWjAoYyxsKXtyZXR1cm4gY1tGbF09bH0oYyx7cHJldmlvdXM6WGMsY3VycmVudDpudWxsfSksXz1mLmN1cnJlbnR8fChmLmN1cnJlbnQ9e30pLFQ9Zi5wcmV2aW91cyxXPVRbaF07X1toXT1uZXcgZzkoVyYmVy5jdXJyZW50VmFsdWUs''@;'; put 'put ''bCxUPT09WGMpLGNbZF09bH12YS5uZ0luaGVyaXQ9ITA7Y29uc3QgRmw9Il9fbmdTaW1wbGVDaGFuZ2VzX18iO2Z1bmN0aW9uIGJtKGMpe3JldHVybiBjW0ZsXXx8bnVsbH1jb25zdCBoMD1mdW5jdGlvbihjLGwsYSl7fTtmdW5jdGlvbiBfYShjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9''@;'; put 'put ''Y1tIaV07cmV0dXJuIGN9ZnVuY3Rpb24gWTAoYyxsKXtyZXR1cm4gX2EobFtjXSl9ZnVuY3Rpb24gSGwoYyxsKXtyZXR1cm4gX2EobFtjLmluZGV4XSl9ZnVuY3Rpb24ga2UoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uICRlKGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gbXQoYyxs''@;'; put 'put ''KXtjb25zdCBhPWxbY107cmV0dXJuIENjKGEpP2E6YVtIaV19ZnVuY3Rpb24gRHIoYyxsKXtyZXR1cm4gbnVsbD09bD9udWxsOmNbbF19ZnVuY3Rpb24geW8oYyl7Y1tQMl09MH1mdW5jdGlvbiBlcyhjKXsxMDI0JmNbRG9dfHwoY1tEb118PTEwMjQsb2MoYywxKSl9ZnVuY3Rpb24genMoYyl7''@;'; put 'put ''MTAyNCZjW0RvXSYmKGNbRG9dJj0tMTAyNSxvYyhjLC0xKSl9ZnVuY3Rpb24gb2MoYyxsKXtsZXQgYT1jW3VhXTtpZihudWxsPT09YSlyZXR1cm47YVtJMV0rPWw7bGV0IGQ9YTtmb3IoYT1hW3VhXTtudWxsIT09YSYmKDE9PT1sJiYxPT09ZFtJMV18fC0xPT09bCYmMD09PWRbSTFdKTspYVtJ''@;'; put 'put ''MV0rPWwsZD1hLGE9YVt1YV19Y29uc3QgUG89e2xGcmFtZTpVdyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTpudWxsfTtmdW5jdGlvbiBPdygpe3JldHVybiBQby5iaW5kaW5nc0VuYWJsZWR9ZnVuY3Rpb24gdzMoKXtyZXR1cm4gbnVsbCE9PVBvLnNr''@;'; put 'put ''aXBIeWRyYXRpb25Sb290VE5vZGV9ZnVuY3Rpb24gWHIoKXtyZXR1cm4gUG8ubEZyYW1lLmxWaWV3fWZ1bmN0aW9uIFRzKCl7cmV0dXJuIFBvLmxGcmFtZS50Vmlld31mdW5jdGlvbiBCdChjKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlldz1jLGNbVmFdfWZ1bmN0aW9uIGp0KGMpe3Jl''@;'; put 'put ''dHVybiBQby5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsY31mdW5jdGlvbiBTYygpe2xldCBjPVB3KCk7Zm9yKDtudWxsIT09YyYmNjQ9PT1jLnR5cGU7KWM9Yy5wYXJlbnQ7cmV0dXJuIGN9ZnVuY3Rpb24gUHcoKXtyZXR1cm4gUG8ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBOMShj''@;'; put 'put ''LGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuY3VycmVudFROb2RlPWMsYS5pc1BhcmVudD1sfWZ1bmN0aW9uIF85KCl7cmV0dXJuIFBvLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBDbSgpe1BvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBOYygpe2NvbnN0IGM9UG8ubEZyYW1lO2xldCBs''@;'; put 'put ''PWMuYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PWwmJihsPWMuYmluZGluZ1Jvb3RJbmRleD1jLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSxsfWZ1bmN0aW9uIE5kKCl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gQzMoKXtyZXR1cm4gUG8ubEZyYW1lLmJpbmRp''@;'; put 'put ''bmdJbmRleCsrfWZ1bmN0aW9uIFYxKGMpe2NvbnN0IGw9UG8ubEZyYW1lLGE9bC5iaW5kaW5nSW5kZXg7cmV0dXJuIGwuYmluZGluZ0luZGV4PWwuYmluZGluZ0luZGV4K2MsYX1mdW5jdGlvbiBLVChjLGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuYmluZGluZ0luZGV4PWEuYmluZGluZ1Jvb3RJ''@;'; put 'put ''bmRleD1jLFNtKGwpfWZ1bmN0aW9uIFNtKGMpe1BvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9Y31mdW5jdGlvbiB5OShjKXtjb25zdCBsPVBvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT1sP251bGw6Y1tsXX1mdW5jdGlvbiBWdygpe3JldHVybiBQby5s''@;'; put 'put ''RnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gdzkoYyl7UG8ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PWN9ZnVuY3Rpb24gQncoYyl7Y29uc3QgbD1jW0JpXTtyZXR1cm4gMj09PWwudHlwZT9sLmRlY2xUTm9kZToxPT09bC50eXBlP2Nbem9dOm51bGx9ZnVuY3Rpb24gancoYyxs''@;'; put 'put ''LGEpe2lmKGEmbnMuU2tpcFNlbGYpe2xldCBoPWwsZj1jO2Zvcig7IShoPWgucGFyZW50LG51bGwhPT1ofHxhJm5zLkhvc3R8fChoPUJ3KGYpLG51bGw9PT1ofHwoZj1mW09sXSwxMCZoLnR5cGUpKSk7KTtpZihudWxsPT09aClyZXR1cm4hMTtsPWgsYz1mfWNvbnN0IGQ9UG8ubEZyYW1lPXp3''@;'; put 'put ''KCk7cmV0dXJuIGQuY3VycmVudFROb2RlPWwsZC5sVmlldz1jLCEwfWZ1bmN0aW9uIEM5KGMpe2NvbnN0IGw9encoKSxhPWNbQmldO1BvLmxGcmFtZT1sLGwuY3VycmVudFROb2RlPWEuZmlyc3RDaGlsZCxsLmxWaWV3PWMsbC50Vmlldz1hLGwuY29udGV4dExWaWV3PWMsbC5iaW5kaW5nSW5k''@;'; put 'put ''ZXg9YS5iaW5kaW5nU3RhcnRJbmRleCxsLmluSTE4bj0hMX1mdW5jdGlvbiB6dygpe2NvbnN0IGM9UG8ubEZyYW1lLGw9bnVsbD09PWM/bnVsbDpjLmNoaWxkO3JldHVybiBudWxsPT09bD9VdyhjKTpsfWZ1bmN0aW9uIFV3KGMpe2NvbnN0IGw9e2N1cnJlbnRUTm9kZTpudWxsLGlzUGFyZW50''@;'; put 'put ''OiEwLGxWaWV3Om51bGwsdFZpZXc6bnVsbCxzZWxlY3RlZEluZGV4Oi0xLGNvbnRleHRMVmlldzpudWxsLGVsZW1lbnREZXB0aENvdW50OjAsY3VycmVudE5hbWVzcGFjZTpudWxsLGN1cnJlbnREaXJlY3RpdmVJbmRleDotMSxiaW5kaW5nUm9vdEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSxj''@;'; put 'put ''dXJyZW50UXVlcnlJbmRleDowLHBhcmVudDpjLGNoaWxkOm51bGwsaW5JMThuOiExfTtyZXR1cm4gbnVsbCE9PWMmJihjLmNoaWxkPWwpLGx9ZnVuY3Rpb24gWncoKXtjb25zdCBjPVBvLmxGcmFtZTtyZXR1cm4gUG8ubEZyYW1lPWMucGFyZW50LGMuY3VycmVudFROb2RlPW51bGwsYy5sVmll''@;'; put 'put ''dz1udWxsLGN9Y29uc3QgWXc9Wnc7ZnVuY3Rpb24gTW0oKXtjb25zdCBjPVp3KCk7Yy5pc1BhcmVudD0hMCxjLnRWaWV3PW51bGwsYy5zZWxlY3RlZEluZGV4PS0xLGMuY29udGV4dExWaWV3PW51bGwsYy5lbGVtZW50RGVwdGhDb3VudD0wLGMuY3VycmVudERpcmVjdGl2ZUluZGV4PS0xLGMu''@;'; put 'put ''Y3VycmVudE5hbWVzcGFjZT1udWxsLGMuYmluZGluZ1Jvb3RJbmRleD0tMSxjLmJpbmRpbmdJbmRleD0tMSxjLmN1cnJlbnRRdWVyeUluZGV4PTB9ZnVuY3Rpb24gZXUoKXtyZXR1cm4gUG8ubEZyYW1lLnNlbGVjdGVkSW5kZXh9ZnVuY3Rpb24gWGgoYyl7UG8ubEZyYW1lLnNlbGVjdGVkSW5k''@;'; put 'put ''ZXg9Y31mdW5jdGlvbiBRYSgpe2NvbnN0IGM9UG8ubEZyYW1lO3JldHVybiBrZShjLnRWaWV3LGMuc2VsZWN0ZWRJbmRleCl9bGV0IEd3PSEwO2Z1bmN0aW9uIHhtKCl7cmV0dXJuIEd3fWZ1bmN0aW9uIFZkKGMpe0d3PWN9ZnVuY3Rpb24gRW0oYyxsKXtmb3IobGV0IGE9bC5kaXJlY3RpdmVT''@;'; put 'put ''dGFydCxkPWwuZGlyZWN0aXZlRW5kO2E8ZDthKyspe2NvbnN0IGY9Yy5kYXRhW2FdLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6XyxuZ0FmdGVyQ29udGVudENoZWNrZWQ6VCxuZ0FmdGVyVmlld0luaXQ6VyxuZ0FmdGVyVmlld0NoZWNrZWQ6aWUsbmdPbkRlc3Ryb3k6Z2V9''@;'; put 'put ''PWY7XyYmKGMuY29udGVudEhvb2tzPz89W10pLnB1c2goLWEsXyksVCYmKChjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKGEsVCksKGMuY29udGVudENoZWNrSG9va3M/Pz1bXSkucHVzaChhLFQpKSxXJiYoYy52aWV3SG9va3M/Pz1bXSkucHVzaCgtYSxXKSxpZSYmKChjLnZpZXdIb29rcz8/''@;'; put 'put ''PVtdKS5wdXNoKGEsaWUpLChjLnZpZXdDaGVja0hvb2tzPz89W10pLnB1c2goYSxpZSkpLG51bGwhPWdlJiYoYy5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChhLGdlKX19ZnVuY3Rpb24ga20oYyxsLGEpeyR3KGMsbCwzLGEpfWZ1bmN0aW9uIEFtKGMsbCxhLGQpeygzJmNbRG9dKT09PWEmJiR3''@;'; put 'put ''KGMsbCxhLGQpfWZ1bmN0aW9uIFM5KGMsbCl7bGV0IGE9Y1tEb107KDMmYSk9PT1sJiYoYSY9ODE5MSxhKz0xLGNbRG9dPWEpfWZ1bmN0aW9uICR3KGMsbCxhLGQpe2NvbnN0IGY9ZD8/LTEsXz1sLmxlbmd0aC0xO2xldCBUPTA7Zm9yKGxldCBXPXZvaWQgMCE9PWQ/NjU1MzUmY1tQMl06MDtX''@;'; put 'put ''PF87VysrKWlmKCJudW1iZXIiPT10eXBlb2YgbFtXKzFdKXtpZihUPWxbV10sbnVsbCE9ZCYmVD49ZClicmVha31lbHNlIGxbV108MCYmKGNbUDJdKz02NTUzNiksKFQ8Znx8LTE9PWYpJiYoaUQoYyxhLGwsVyksY1tQMl09KDQyOTQ5MDE3NjAmY1tQMl0pK1crMiksVysrfWZ1bmN0aW9uIHF3''@;'; put 'put ''KGMsbCl7aDAoNCxjLGwpO2NvbnN0IGE9ZmwobnVsbCk7dHJ5e2wuY2FsbChjKX1maW5hbGx5e2ZsKGEpLGgwKDUsYyxsKX19ZnVuY3Rpb24gaUQoYyxsLGEsZCl7Y29uc3QgaD1hW2RdPDAsZj1hW2QrMV0sVD1jW2g/LWFbZF06YVtkXV07aD9jW0RvXT4+MTM8Y1tQMl0+PjE2JiYoMyZjW0Rv''@;'; put 'put ''XSk9PT1sJiYoY1tEb10rPTgxOTIscXcoVCxmKSk6cXcoVCxmKX1jb25zdCBTMz0tMTtjbGFzcyBSNHtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9u''@;'; put 'put ''IEt3KGMpe3JldHVybiBjIT09UzN9ZnVuY3Rpb24gQjIoYyl7cmV0dXJuIDMyNzY3JmN9ZnVuY3Rpb24gTTMoYyxsKXtsZXQgYT1mdW5jdGlvbiB4OShjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW09sXSxhLS07cmV0dXJuIGR9bGV0IE80PSEwO2Z1bmN0aW9uIEIxKGMp''@;'; put 'put ''e2NvbnN0IGw9TzQ7cmV0dXJuIE80PWMsbH1jb25zdCBUbT0yNTUsWHc9NTtsZXQgRG09MDtjb25zdCBqMT17fTtmdW5jdGlvbiBJbShjLGwpe2NvbnN0IGE9SncoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0JpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRl''@;'; put 'put ''eD1sLmxlbmd0aCxKaChkLmRhdGEsYyksSmgobCxudWxsKSxKaChkLmJsdWVwcmludCxudWxsKSk7Y29uc3QgaD1rOShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKEt3KGgpKXtjb25zdCBfPUIyKGgpLFQ9TTMoaCxsKSxXPVRbQmldLmRhdGE7Zm9yKGxldCBpZT0wO2llPDg7aWUrKylsW2Yr''@;'; put 'put ''aWVdPVRbXytpZV18V1tfK2llXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBKaChjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gSncoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmlu''@;'; put 'put ''amVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmluamVjdG9ySW5kZXh9ZnVuY3Rpb24gazkoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9''@;'; put 'put ''bDtmb3IoO251bGwhPT1oOyl7aWYoZD1vQyhoKSxudWxsPT09ZClyZXR1cm4gUzM7aWYoYSsrLGg9aFtPbF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gUzN9ZnVuY3Rpb24gQTkoYyxsLGEpeyFmdW5jdGlvbiBFOShjLGwsYSl7bGV0''@;'; put 'put ''IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFzT3duUHJvcGVydHkoWmgpJiYoZD1hW1poXSksbnVsbD09ZCYmKGQ9YVtaaF09RG0rKyk7Y29uc3QgaD1kJlRtO2wuZGF0YVtjKyhoPj5YdyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gUXcoYyxsLGEpe2lm''@;'; put 'put ''KGEmbnMuT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7UWkoKX1mdW5jdGlvbiBlQyhjLGwsYSxkKXtpZihhJm5zLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKG5zLlNlbGZ8bnMuSG9zdCkpKXtjb25zdCBoPWNbTGRdLGY9ZGkodm9pZCAwKTt0cnl7cmV0dXJuIGg/''@;'; put 'put ''aC5nZXQobCxkLGEmbnMuT3B0aW9uYWwpOldzKGwsZCxhJm5zLk9wdGlvbmFsKX1maW5hbGx5e2RpKGYpfX1yZXR1cm4gUXcoZCwwLGEpfWZ1bmN0aW9uIHRDKGMsbCxhLGQ9bnMuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW0RvXSYmIShkJm5zLlNlbGYpKXtjb25zdCBfPWZ1''@;'; put 'put ''bmN0aW9uIGREKGMsbCxhLGQsaCl7bGV0IGY9YyxfPWw7Zm9yKDtudWxsIT09ZiYmbnVsbCE9PV8mJjIwNDgmX1tEb10mJiEoNTEyJl9bRG9dKTspe2NvbnN0IFQ9bkMoZixfLGEsZHxucy5TZWxmLGoxKTtpZihUIT09ajEpcmV0dXJuIFQ7bGV0IFc9Zi5wYXJlbnQ7aWYoIVcpe2NvbnN0IGll''@;'; put 'put ''PV9bUjFdO2lmKGllKXtjb25zdCBnZT1pZS5nZXQoYSxqMSxkKTtpZihnZSE9PWoxKXJldHVybiBnZX1XPW9DKF8pLF89X1tPbF19Zj1XfXJldHVybiBofShjLGwsYSxkLGoxKTtpZihfIT09ajEpcmV0dXJuIF99Y29uc3QgZj1uQyhjLGwsYSxkLGoxKTtpZihmIT09ajEpcmV0dXJuIGZ9cmV0''@;'; put 'put ''dXJuIGVDKGwsYSxkLGgpfWZ1bmN0aW9uIG5DKGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBjRChjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoWmgpP2NbWmhdOnZvaWQgMDtyZXR1cm4ibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIGw/bD49MD9sJlRtOnVEOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKXtpZighancobCxjLGQpKXJldHVybiBkJm5zLkhvc3Q/UXcoaCwwLGQpOmVDKGwsYSxkLGgpO3RyeXtjb25zdCBfPWYoZCk7aWYobnVsbCE9X3x8ZCZucy5PcHRpb25hbClyZXR1cm4gXztRaSgp''@;'; put 'put ''fWZpbmFsbHl7WXcoKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCBfPW51bGwsVD1KdyhjLGwpLFc9UzMsaWU9ZCZucy5Ib3N0P2xbSmFdW3pvXTpudWxsO2ZvcigoLTE9PT1UfHxkJm5zLlNraXBTZWxmKSYmKFc9LTE9PT1UP2s5KGMsbCk6bFtUKzhdLFchPT1TMyYmaUMoZCwh''@;'; put 'put ''MSk/KF89bFtCaV0sVD1CMihXKSxsPU0zKFcsbCkpOlQ9LTEpOy0xIT09VDspe2NvbnN0IGdlPWxbQmldO2lmKHJDKGYsVCxnZS5kYXRhKSl7Y29uc3Qgd2U9bEQoVCxsLGEsXyxkLGllKTtpZih3ZSE9PWoxKXJldHVybiB3ZX1XPWxbVCs4XSxXIT09UzMmJmlDKGQsbFtCaV0uZGF0YVtUKzhd''@;'; put 'put ''PT09aWUpJiZyQyhmLFQsbCk/KF89Z2UsVD1CMihXKSxsPU0zKFcsbCkpOlQ9LTF9fXJldHVybiBofWZ1bmN0aW9uIGxEKGMsbCxhLGQsaCxmKXtjb25zdCBfPWxbQmldLFQ9Xy5kYXRhW2MrOF0sZ2U9TG0oVCxfLGEsbnVsbD09ZD9QMShUKSYmTzQ6ZCE9XyYmMCE9KDMmVC50eXBlKSxoJm5z''@;'; put 'put ''Lkhvc3QmJmY9PT1UKTtyZXR1cm4gbnVsbCE9PWdlP1FoKGwsXyxnZSxUKTpqMX1mdW5jdGlvbiBMbShjLGwsYSxkLGgpe2NvbnN0IGY9Yy5wcm92aWRlckluZGV4ZXMsXz1sLmRhdGEsVD0xMDQ4NTc1JmYsVz1jLmRpcmVjdGl2ZVN0YXJ0LGdlPWY+PjIwLEVlPWg/VCtnZTpjLmRpcmVjdGl2''@;'; put 'put ''ZUVuZDtmb3IobGV0IFplPWQ/VDpUK2dlO1plPEVlO1plKyspe2NvbnN0IG90PV9bWmVdO2lmKFplPFcmJmE9PT1vdHx8WmU+PVcmJm90LnR5cGU9PT1hKXJldHVybiBaZX1pZihoKXtjb25zdCBaZT1fW1ddO2lmKFplJiZRYyhaZSkmJlplLnR5cGU9PT1hKXJldHVybiBXfXJldHVybiBudWxs''@;'; put 'put ''fWZ1bmN0aW9uIFFoKGMsbCxhLGQpe2xldCBoPWNbYV07Y29uc3QgZj1sLmRhdGE7aWYoZnVuY3Rpb24gb0QoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBSNH0oaCkpe2NvbnN0IF89aDtfLnJlc29sdmluZyYmZnVuY3Rpb24gbzAoYyxsKXtjb25zdCBhPWw/YC4gRGVwZW5kZW5jeSBwYXRoOiAk''@;'; put 'put ''e2wuam9pbigiID4gIil9ID4gJHtjfWA6IiI7dGhyb3cgbmV3IEFyKC0yMDAsYENpcmN1bGFyIGRlcGVuZGVuY3kgaW4gREkgZGV0ZWN0ZWQgZm9yICR7Y30ke2F9YCl9KGZ1bmN0aW9uIENzKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFtZXx8Yy50b1N0cmluZygpOiJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6a28oYyl9KGZbYV0pKTtjb25zdCBUPUIxKF8uY2FuU2VlVmlld1Byb3ZpZGVycyk7Xy5yZXNvbHZpbmc9ITA7Y29uc3QgVz1fLmluamVjdEltcGw/''@;'; put 'put ''ZGkoXy5pbmplY3RJbXBsKTpudWxsO2p3KGMsZCxucy5EZWZhdWx0KTt0cnl7aD1jW2FdPV8uZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiByRChjLGwsYSl7Y29uc3R7bmdPbkNoYW5nZXM6ZCxuZ09uSW5pdDpo''@;'; put 'put ''LG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IF89VDQobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsXyksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyxfKX1oJiYoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goMC1jLGgpLGYmJigo''@;'; put 'put ''YS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PVcmJmRpKFcpLEIxKFQpLF8ucmVzb2x2aW5nPSExLFl3KCl9fXJldHVybiBofWZ1bmN0aW9uIHJDKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4hIShhW2wrKGM+Plh3KV0mMTw8Yyl9ZnVuY3Rpb24gaUMoYyxsKXtyZXR1cm4hKGMmbnMuU2VsZnx8YyZucy5Ib3N0JiZsKX1jbGFzcyB4M3tjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVybiB0Qyh0aGlzLl90Tm9kZSx0aGlz''@;'; put 'put ''Ll9sVmlldyxsLGEwKGQpLGEpfX1mdW5jdGlvbiB1RCgpe3JldHVybiBuZXcgeDMoU2MoKSxYcigpKX1mdW5jdGlvbiB4YShjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtsMF18fEcwKGwpLGQ9T2JqZWN0LnByb3RvdHlwZTtsZXQgaD1PYmpl''@;'; put 'put ''Y3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbbDBdfHxHMChoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9KX1mdW5jdGlvbiBHMChjKXtyZXR1''@;'; put 'put ''cm4gcjAoYyk/KCk9Pntjb25zdCBsPUcwKGJvKGMpKTtyZXR1cm4gbCYmbCgpfTpIMShjKX1mdW5jdGlvbiBvQyhjKXtjb25zdCBsPWNbQmldLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jW3pvXTpudWxsfWZ1bmN0aW9uIFA0KGMpe3JldHVybiBmdW5jdGlvbiBU''@;'; put 'put ''OShjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVuZ3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYoUjIoZikpYnJlYWs7aWYoMD09PWYp''@;'; put 'put ''aCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9fX1yZXR1cm4gbnVsbH0oU2MoKSxjKX1jb25zdCBrMz0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIFQz''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIFJtKGMpe3JldHVybiBmdW5jdGlvbiguLi5hKXtpZihjKXtjb25zdCBkPWMoLi4uYSk7Zm9yKGNvbnN0IGggaW4gZCl0aGlzW2hdPWRbaF19fX0obCk7ZnVuY3Rpb24gaCguLi5mKXtpZih0aGlzIGluc3RhbmNlb2YgaCly''@;'; put 'put ''ZXR1cm4gZC5hcHBseSh0aGlzLGYpLHRoaXM7Y29uc3QgXz1uZXcgaCguLi5mKTtyZXR1cm4gVC5hbm5vdGF0aW9uPV8sVDtmdW5jdGlvbiBUKFcsaWUsZ2Upe2NvbnN0IHdlPVcuaGFzT3duUHJvcGVydHkoazMpP1dbazNdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLGszLHt2YWx1ZTpbXX0p''@;'; put 'put ''W2szXTtmb3IoO3dlLmxlbmd0aDw9Z2U7KXdlLnB1c2gobnVsbCk7cmV0dXJuKHdlW2dlXT13ZVtnZV18fFtdKS5wdXNoKF8pLFd9fXJldHVybiBhJiYoaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0''@;'; put 'put ''aW9uQ2xzPWgsaH0pfWNvbnN0IE9tPUZ1bmN0aW9uO2Z1bmN0aW9uIEY0KGMsbCl7Yy5mb3JFYWNoKGE9PkFycmF5LmlzQXJyYXkoYSk/RjQoYSxsKTpsKGEpKX1mdW5jdGlvbiAkMChjLGwsYSl7bD49Yy5sZW5ndGg/Yy5wdXNoKGEpOmMuc3BsaWNlKGwsMCxhKX1mdW5jdGlvbiBQbShjLGwp''@;'; put 'put ''e3JldHVybiBsPj1jLmxlbmd0aC0xP2MucG9wKCk6Yy5zcGxpY2UobCwxKVswXX1mdW5jdGlvbiBCZChjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxjO2QrKylhLnB1c2gobCk7cmV0dXJuIGF9ZnVuY3Rpb24gTWMoYyxsLGEpe2xldCBkPWpkKGMsbCk7cmV0dXJuIGQ+PTA/Y1sxfGRd''@;'; put 'put ''PWE6KGQ9fmQsZnVuY3Rpb24gbUQoYyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1toLTJdLGgtLTtjW2xdPWEsY1ts''@;'; put 'put ''KzFdPWR9fShjLGQsbCxhKSksZH1mdW5jdGlvbiB0ZihjLGwpe2NvbnN0IGE9amQoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gamQoYyxsKXtyZXR1cm4gZnVuY3Rpb24gdkQoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2ghPT1kOyl7Y29uc3QgZj1kKyho''@;'; put 'put ''LWQ+PjEpLF89Y1tmPDxhXTtpZihsPT09XylyZXR1cm4gZjw8YTtfPmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCB6Mj16aChUMygiT3B0aW9uYWwiKSw4KSxnMD16aChUMygiU2tpcFNlbGYiKSw0KTtmdW5jdGlvbiBZbShjKXtyZXR1cm4gMTI4PT0oMTI4JmMuZmxh''@;'; put 'put ''Z3MpfXZhciBZMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixjW2MuRGFzaENhc2U9Ml09IkRhc2hDYXNlIixjfShZMnx8e30pO2NvbnN0IGtEPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csQUQ9Lyg8fD4pLyxXbT0iXHUyMDBiJDFcdTIwMGIi''@;'; put 'put ''O2NvbnN0IEY5PW5ldyBNYXA7bGV0IEg5PTA7Y29uc3QgVjk9Il9fbmdDb250ZXh0X18iO2Z1bmN0aW9uIFZjKGMsbCl7Q2MobCk/KGNbVjldPWxbJGhdLGZ1bmN0aW9uIGo0KGMpe0Y5LnNldChjWyRoXSxjKX0obCkpOmNbVjldPWx9bGV0IEI5O2Z1bmN0aW9uIGo5KGMsbCl7cmV0dXJuIEI5''@;'; put 'put ''KGMsbCl9ZnVuY3Rpb24gWjQoYyl7Y29uc3QgbD1jW3VhXTtyZXR1cm4gaWMobCk/bFt1YV06bH1mdW5jdGlvbiB3QyhjKXtyZXR1cm4gR20oY1tHaF0pfWZ1bmN0aW9uIENDKGMpe3JldHVybiBHbShjW1hhXSl9ZnVuY3Rpb24gR20oYyl7Zm9yKDtudWxsIT09YyYmIWljKGMpOyljPWNbWGFd''@;'; put 'put ''O3JldHVybiBjfWZ1bmN0aW9uIHJmKGMsbCxhLGQsaCl7aWYobnVsbCE9ZCl7bGV0IGYsXz0hMTtpYyhkKT9mPWQ6Q2MoZCkmJihfPSEwLGQ9ZFtIaV0pO2NvbnN0IFQ9X2EoZCk7MD09PWMmJm51bGwhPT1hP251bGw9PWg/RzIobCxhLFQpOlkxKGwsYSxULGh8fG51bGwsITApOjE9PT1jJiZu''@;'; put 'put ''dWxsIT09YT9ZMShsLGEsVCxofHxudWxsLCEwKToyPT09Yz9mdW5jdGlvbiB0NihjLGwsYSl7Y29uc3QgZD1IMyhjLGwpO2QmJmZ1bmN0aW9uIE91KGMsbCxhLGQpe2MucmVtb3ZlQ2hpbGQobCxhLGQpfShjLGQsbCxhKX0obCxULF8pOjM9PT1jJiZsLmRlc3Ryb3lOb2RlKFQpLG51bGwhPWYm''@;'; put 'put ''JmZ1bmN0aW9uIElDKGMsbCxhLGQsaCl7Y29uc3QgZj1hW2QwXTtmIT09X2EoYSkmJnJmKGwsYyxkLGYsaCk7Zm9yKGxldCBUPXJjO1Q8YS5sZW5ndGg7VCsrKXtjb25zdCBXPWFbVF07RzQoV1tCaV0sVyxjLGwsZCxmKX19KGwsYyxmLGEsaCl9fWZ1bmN0aW9uIHo5KGMsbCl7cmV0dXJuIGMu''@;'; put 'put ''Y3JlYXRlQ29tbWVudChmdW5jdGlvbiBCNChjKXtyZXR1cm4gYy5yZXBsYWNlKGtELGw9PmwucmVwbGFjZShBRCxXbSkpfShsKSl9ZnVuY3Rpb24gcW0oYyxsLGEpe3JldHVybiBjLmNyZWF0ZUVsZW1lbnQobCxhKX1mdW5jdGlvbiBNQyhjLGwpe2NvbnN0IGE9Y1tIMl0sZD1hLmluZGV4T2Yo''@;'; put 'put ''bCk7enMobCksYS5zcGxpY2UoZCwxKX1mdW5jdGlvbiBzZihjLGwpe2lmKGMubGVuZ3RoPD1yYylyZXR1cm47Y29uc3QgYT1yYytsLGQ9Y1thXTtpZihkKXtjb25zdCBoPWRbTzJdO251bGwhPT1oJiZoIT09YyYmTUMoaCxkKSxsPjAmJihjW2EtMV1bWGFdPWRbWGFdKTtjb25zdCBmPVBtKGMs''@;'; put 'put ''cmMrbCk7IWZ1bmN0aW9uIEJEKGMsbCl7RzQoYyxsLGxbVm9dLDIsbnVsbCxudWxsKSxsW0hpXT1udWxsLGxbem9dPW51bGx9KGRbQmldLGQpO2NvbnN0IF89ZltodV07bnVsbCE9PV8mJl8uZGV0YWNoVmlldyhmW0JpXSksZFt1YV09bnVsbCxkW1hhXT1udWxsLGRbRG9dJj0tMTI5fXJldHVy''@;'; put 'put ''biBkfWZ1bmN0aW9uIEttKGMsbCl7aWYoISgyNTYmbFtEb10pKXtjb25zdCBhPWxbVm9dO2xbcDNdPy5kZXN0cm95KCksbFtnM10/LmRlc3Ryb3koKSxhLmRlc3Ryb3lOb2RlJiZHNChjLGwsYSwzLG51bGwsbnVsbCksZnVuY3Rpb24gVUQoYyl7bGV0IGw9Y1tHaF07aWYoIWwpcmV0dXJuIFht''@;'; put 'put ''KGNbQmldLGMpO2Zvcig7bDspe2xldCBhPW51bGw7aWYoQ2MobCkpYT1sW0doXTtlbHNle2NvbnN0IGQ9bFtyY107ZCYmKGE9ZCl9aWYoIWEpe2Zvcig7bCYmIWxbWGFdJiZsIT09YzspQ2MobCkmJlhtKGxbQmldLGwpLGw9bFt1YV07bnVsbD09PWwmJihsPWMpLENjKGwpJiZYbShsW0JpXSxs''@;'; put 'put ''KSxhPWwmJmxbWGFdfWw9YX19KGwpfX1mdW5jdGlvbiBYbShjLGwpe2lmKCEoMjU2JmxbRG9dKSl7bFtEb10mPS0xMjksbFtEb118PTI1NixmdW5jdGlvbiBFQyhjLGwpe2xldCBhO2lmKG51bGwhPWMmJm51bGwhPShhPWMuZGVzdHJveUhvb2tzKSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2Qr''@;'; put 'put ''PTIpe2NvbnN0IGg9bFthW2RdXTtpZighKGggaW5zdGFuY2VvZiBSNCkpe2NvbnN0IGY9YVtkKzFdO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKz0yKXtjb25zdCBUPWhbZltfXV0sVz1mW18rMV07aDAoNCxULFcpO3RyeXtXLmNhbGwoVCl9ZmluYWxseXto''@;'; put 'put ''MCg1LFQsVyl9fWVsc2V7aDAoNCxoLGYpO3RyeXtmLmNhbGwoaCl9ZmluYWxseXtoMCg1LGgsZil9fX19fShjLGwpLGZ1bmN0aW9uIHhDKGMsbCl7Y29uc3QgYT1jLmNsZWFudXAsZD1sW1R1XTtpZihudWxsIT09YSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoLTE7Zis9MilpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGFbZl0pe2NvbnN0IF89YVtmKzNdO18+PTA/ZFtfXSgpOmRbLV9dLnVuc3Vic2NyaWJlKCksZis9Mn1lbHNlIGFbZl0uY2FsbChkW2FbZisxXV0pO251bGwhPT1kJiYobFtUdV09bnVsbCk7Y29uc3QgaD1sW08xXTtpZihudWxsIT09aCl7bFtPMV09bnVsbDtmb3IobGV0IGY9MDtm''@;'; put 'put ''PGgubGVuZ3RoO2YrKykoMCxoW2ZdKSgpfX0oYyxsKSwxPT09bFtCaV0udHlwZSYmbFtWb10uZGVzdHJveSgpO2NvbnN0IGE9bFtPMl07aWYobnVsbCE9PWEmJmljKGxbdWFdKSl7YSE9PWxbdWFdJiZNQyhhLGwpO2NvbnN0IGQ9bFtodV07bnVsbCE9PWQmJmQuZGV0YWNoVmlldyhjKX0hZnVu''@;'; put 'put ''Y3Rpb24gVEQoYyl7RjkuZGVsZXRlKGNbJGhdKX0obCl9fWZ1bmN0aW9uIEYzKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gWTQoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtIaV07e2NvbnN0e2NvbXBv''@;'; put 'put ''bmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRpb246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PU9jLk5vbmV8fGY9PT1PYy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gSGwoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWTEoYyxs''@;'; put 'put ''LGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBHMihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIEptKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WTEoYyxsLGEsZCxoKTpHMihjLGwsYSl9ZnVuY3Rpb24gSDMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwp''@;'; put 'put ''fWZ1bmN0aW9uIFcxKGMsbCxhKXtyZXR1cm4gQUMoYyxsLGEpfWxldCBRbSwkNCxXOSxuNixBQz1mdW5jdGlvbiBrQyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9IbChjLGEpOm51bGx9O2Z1bmN0aW9uIGU2KGMsbCxhLGQpe2NvbnN0IGg9RjMoYyxkLGwpLGY9bFtWb10sVD1XMShkLnBhcmVu''@;'; put 'put ''dHx8bFt6b10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxldCBXPTA7VzxhLmxlbmd0aDtXKyspSm0oZixoLGFbV10sVCwhMSk7ZWxzZSBKbShmLGgsYSxULCExKTt2b2lkIDAhPT1RbSYmUW0oZixkLGwsYSxoKX1mdW5jdGlvbiBXNChjLGwpe2lmKG51bGwhPT1s''@;'; put 'put ''KXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIEhsKGwsYyk7aWYoNCZhKXJldHVybiBaOSgtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gVzQoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBpYyhoKT9aOSgtMSxoKTpf''@;'; put 'put ''YShoKX19aWYoMzImYSlyZXR1cm4gajkobCxjKSgpfHxfYShjW2wuaW5kZXhdKTt7Y29uc3QgZD1UQyhjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06VzQoWjQoY1tKYV0pLGQpOlc0KGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gVEMoYyxsKXtyZXR1''@;'; put 'put ''cm4gbnVsbCE9PWw/Y1tKYV1bem9dLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxsfWZ1bmN0aW9uIFo5KGMsbCl7Y29uc3QgYT1yYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtCaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gVzQoZCxoKX1yZXR1cm4g''@;'; put 'put ''bFtkMF19ZnVuY3Rpb24gWTkoYyxsLGEsZCxoLGYsXyl7Zm9yKDtudWxsIT1hOyl7Y29uc3QgVD1kW2EuaW5kZXhdLFc9YS50eXBlO2lmKF8mJjA9PT1sJiYoVCYmVmMoX2EoVCksZCksYS5mbGFnc3w9MiksMzIhPSgzMiZhLmZsYWdzKSlpZig4JlcpWTkoYyxsLGEuY2hpbGQsZCxoLGYsITEp''@;'; put 'put ''LHJmKGwsYyxoLFQsZik7ZWxzZSBpZigzMiZXKXtjb25zdCBpZT1qOShhLGQpO2xldCBnZTtmb3IoO2dlPWllKCk7KXJmKGwsYyxoLGdlLGYpO3JmKGwsYyxoLFQsZil9ZWxzZSAxNiZXP1dEKGMsbCxkLGEsaCxmKTpyZihsLGMsaCxULGYpO2E9Xz9hLnByb2plY3Rpb25OZXh0OmEubmV4dH19''@;'; put 'put ''ZnVuY3Rpb24gRzQoYyxsLGEsZCxoLGYpe1k5KGEsZCxjLmZpcnN0Q2hpbGQsbCxoLGYsITEpfWZ1bmN0aW9uIFdEKGMsbCxhLGQsaCxmKXtjb25zdCBfPWFbSmFdLFc9X1t6b10ucHJvamVjdGlvbltkLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkoVykpZm9yKGxldCBpZT0wO2llPFcu''@;'; put 'put ''bGVuZ3RoO2llKyspcmYobCxjLGgsV1tpZV0sZik7ZWxzZXtsZXQgaWU9Vztjb25zdCBnZT1fW3VhXTtZbShkKSYmKGllLmZsYWdzfD0xMjgpLFk5KGMsbCxpZSxnZSxoLGYsITApfX1mdW5jdGlvbiBMQyhjLGwsYSl7IiI9PT1hP2MucmVtb3ZlQXR0cmlidXRlKGwsImNsYXNzIik6Yy5zZXRB''@;'; put 'put ''dHRyaWJ1dGUobCwiY2xhc3MiLGEpfWZ1bmN0aW9uIFJDKGMsbCxhKXtjb25zdHttZXJnZWRBdHRyczpkLGNsYXNzZXM6aCxzdHlsZXM6Zn09YTtudWxsIT09ZCYmRGQoYyxsLGQpLG51bGwhPT1oJiZMQyhjLGwsaCksbnVsbCE9PWYmJmZ1bmN0aW9uIEdEKGMsbCxhKXtjLnNldEF0dHJpYnV0''@;'; put 'put ''ZShsLCJzdHlsZSIsYSl9KGMsbCxmKX1mdW5jdGlvbiBOMyhjKXtyZXR1cm4gZnVuY3Rpb24gcTQoKXtpZih2b2lkIDA9PT0kNCYmKCQ0PW51bGwsT2kudHJ1c3RlZFR5cGVzKSl0cnl7JDQ9T2kudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhUTUw6Yz0+Yyxj''@;'; put 'put ''cmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gJDR9KCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24gSzQoKXtpZih2b2lkIDAhPT1XOSlyZXR1cm4gVzk7aWYodHlwZW9mIGRvY3VtZW50PCJ1IilyZXR1cm4gZG9jdW1lbnQ7dGhyb3cgbmV3''@;'; put 'put ''IEFyKDIxMCwhMSl9ZnVuY3Rpb24gRzkoKXtpZih2b2lkIDA9PT1uNiYmKG42PW51bGwsT2kudHJ1c3RlZFR5cGVzKSl0cnl7bjY9T2kudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdDpjPT5jLGNy''@;'; put 'put ''ZWF0ZVNjcmlwdFVSTDpjPT5jfSl9Y2F0Y2h7fXJldHVybiBuNn1mdW5jdGlvbiBGQyhjKXtyZXR1cm4gRzkoKT8uY3JlYXRlSFRNTChjKXx8Y31mdW5jdGlvbiBOQyhjKXtyZXR1cm4gRzkoKT8uY3JlYXRlU2NyaXB0VVJMKGMpfHxjfWNsYXNzIFZDe2NvbnN0cnVjdG9yKGwpe3RoaXMuY2hh''@;'; put 'put ''bmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT1sfXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7bDN9KWB9fWZ1bmN0aW9uICQy''@;'; put 'put ''KGMpe3JldHVybiBjIGluc3RhbmNlb2YgVkM/Yy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5OmN9ZnVuY3Rpb24gWDQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIHRJKGMpe3JldHVybiBjIGluc3RhbmNlb2YgVkMmJmMuZ2V0VHlwZU5hbWUoKXx8bnVsbH0oYyk7aWYobnVs''@;'; put 'put ''bCE9YSYmYSE9PWwpe2lmKCJSZXNvdXJjZVVSTCI9PT1hJiYiVVJMIj09PWwpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhIHNhZmUgJHtsfSwgZ290IGEgJHthfSAoc2VlICR7bDN9KWApfXJldHVybiBhPT09bH1jbGFzcyAkOXtjb25zdHJ1Y3RvcihsKXt0aGlzLmluZXJ0''@;'; put 'put ''RG9jdW1lbnRIZWxwZXI9bH1nZXRJbmVydEJvZHlFbGVtZW50KGwpe2w9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+IitsO3RyeXtjb25zdCBhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE4zKGwpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09YT90aGlz''@;'; put 'put ''LmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5lcnRCb2R5RWxlbWVudChsKTooYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpLGEpfWNhdGNoe3JldHVybiBudWxsfX19Y2xhc3MgcTl7Y29uc3RydWN0b3IobCl7dGhpcy5kZWZhdWx0RG9jPWwsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVm''@;'; put 'put ''YXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpfWdldEluZXJ0Qm9keUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gYS5pbm5lckhUTUw9TjMobCks''@;'; put 'put ''YX19Y29uc3Qgbkk9L14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2k7ZnVuY3Rpb24gSzkoYyl7cmV0dXJuKGM9U3RyaW5nKGMpKS5tYXRjaChuSSk/YzoidW5zYWZlOiIrY31mdW5jdGlvbiBHMShjKXtjb25zdCBsPXt9O2Zvcihjb25z''@;'; put 'put ''dCBhIG9mIGMuc3BsaXQoIiwiKSlsW2FdPSEwO3JldHVybiBsfWZ1bmN0aW9uIEJhKC4uLmMpe2NvbnN0IGw9e307Zm9yKGNvbnN0IGEgb2YgYylmb3IoY29uc3QgZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJihsW2RdPSEwKTtyZXR1cm4gbH1jb25zdCBaZD1HMSgiYXJlYSxicixjb2ws''@;'; put 'put ''aHIsaW1nLHdiciIpLFg5PUcxKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksSjk9RzEoInJwLHJ0IiksUTk9QmEoWmQsQmEoWDksRzEoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRp''@;'; put 'put ''YWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLEJhKEo5LEcxKCJhLGFiYnIsYWNyb255bSxhdWRpbyxi''@;'; put 'put ''LGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8i''@;'; put 'put ''KSksQmEoSjksWDkpKSxldj1HMSgiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIiksakM9QmEoZXYsRzEoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNl''@;'; put 'put ''bGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtp''@;'; put 'put ''bmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5''@;'; put 'put ''LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLEcxKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQsYXJpYS1hdG9taWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50''@;'; put 'put ''LGFyaWEtY29saW5kZXgsYXJpYS1jb2xzcGFuLGFyaWEtY29udHJvbHMsYXJpYS1jdXJyZW50LGFyaWEtZGVzY3JpYmVkYnksYXJpYS1kZXRhaWxzLGFyaWEtZGlzYWJsZWQsYXJpYS1kcm9wZWZmZWN0LGFyaWEtZXJyb3JtZXNzYWdlLGFyaWEtZXhwYW5kZWQsYXJpYS1mbG93dG8sYXJpYS1n''@;'; put 'put ''cmFiYmVkLGFyaWEtaGFzcG9wdXAsYXJpYS1oaWRkZW4sYXJpYS1pbnZhbGlkLGFyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJpYS1sYWJlbGxlZGJ5LGFyaWEtbGV2ZWwsYXJpYS1saXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsYXJpYS1tdWx0aXNlbGVjdGFibGUsYXJpYS1v''@;'; put 'put ''cmllbnRhdGlvbixhcmlhLW93bnMsYXJpYS1wbGFjZWhvbGRlcixhcmlhLXBvc2luc2V0LGFyaWEtcHJlc3NlZCxhcmlhLXJlYWRvbmx5LGFyaWEtcmVsZXZhbnQsYXJpYS1yZXF1aXJlZCxhcmlhLXJvbGVkZXNjcmlwdGlvbixhcmlhLXJvd2NvdW50LGFyaWEtcm93aW5kZXgsYXJpYS1yb3dz''@;'; put 'put ''cGFuLGFyaWEtc2VsZWN0ZWQsYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1ZW5vdyxhcmlhLXZhbHVldGV4dCIpKSxpST1HMSgic2NyaXB0LHN0eWxlLHRlbXBsYXRlIik7Y2xhc3Mgb0l7Y29uc3RydWN0b3IoKXt0aGlzLnNhbml0''@;'; put 'put ''aXplZFNvbWV0aGluZz0hMSx0aGlzLmJ1Zj1bXX1zYW5pdGl6ZUNoaWxkcmVuKGwpe2xldCBhPWwuZmlyc3RDaGlsZCxkPSEwO2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RF''@;'; put 'put ''P3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZClhPWEuZmlyc3RDaGlsZDtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBoPXRoaXMuY2hlY2tD''@;'; put 'put ''bG9iYmVyZWRFbGVtZW50KGEsYS5uZXh0U2libGluZyk7aWYoaCl7YT1oO2JyZWFrfWE9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoYSxhLnBhcmVudE5vZGUpfXJldHVybiB0aGlzLmJ1Zi5qb2luKCIiKX1zdGFydEVsZW1lbnQobCl7Y29uc3QgYT1sLm5vZGVOYW1lLnRvTG93ZXJDYXNl''@;'; put 'put ''KCk7aWYoIVE5Lmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwhaUkuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDto''@;'; put 'put ''Kyspe2NvbnN0IGY9ZC5pdGVtKGgpLF89Zi5uYW1lLFQ9Xy50b0xvd2VyQ2FzZSgpO2lmKCFqQy5oYXNPd25Qcm9wZXJ0eShUKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IFc9Zi52YWx1ZTtldltUXSYmKFc9SzkoVykpLHRoaXMuYnVmLnB1c2goIiAiLF8sJz0i''@;'; put 'put ''Jyx6QyhXKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtROS5oYXNPd25Qcm9wZXJ0eShhKSYmIVpkLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5w''@;'; put 'put ''dXNoKGEpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnMobCl7dGhpcy5idWYucHVzaCh6QyhsKSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KGwsYSl7aWYoYSYmKGwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5E''@;'; put 'put ''T0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHtsLm91dGVySFRNTH1gKTtyZXR1cm4gYX19Y29uc3Qgc0k9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAt''@;'; put 'put ''XHVERkZGXS9nLGFJPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiB6QyhjKXtyZXR1cm4gYy5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShzSSxmdW5jdGlvbihsKXtyZXR1cm4iJiMiKygxMDI0KihsLmNoYXJDb2RlQXQoMCktNTUyOTYpKyhsLmNoYXJDb2RlQXQoMSktNTYzMjApKzY1''@;'; put 'put ''NTM2KSsiOyJ9KS5yZXBsYWNlKGFJLGZ1bmN0aW9uKGwpe3JldHVybiImIyIrbC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWxldCByNjtmdW5jdGlvbiB0dihjKXtyZXR1cm4iY29udGVudCJpbiBjJiZmdW5jdGlvbiBjSShj''@;'; put 'put ''KXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09Yy5ub2RlTmFtZX0oYyk/Yy5jb250ZW50Om51bGx9dmFyIFYzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLkhUTUw9MV09IkhUTUwiLGNbYy5TVFlMRT0yXT0iU1RZ''@;'; put 'put ''TEUiLGNbYy5TQ1JJUFQ9M109IlNDUklQVCIsY1tjLlVSTD00XT0iVVJMIixjW2MuUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLGN9KFYzfHx7fSk7ZnVuY3Rpb24gcTIoYyl7Y29uc3QgbD1KNCgpO3JldHVybiBsP0ZDKGwuc2FuaXRpemUoVjMuSFRNTCxjKXx8IiIpOlg0KGMsIkhU''@;'; put 'put ''TUwiKT9GQygkMihjKSk6ZnVuY3Rpb24gbEkoYyxsKXtsZXQgYT1udWxsO3RyeXtyNj1yNnx8ZnVuY3Rpb24gYWYoYyl7Y29uc3QgbD1uZXcgcTkoYyk7cmV0dXJuIGZ1bmN0aW9uIEJDKCl7dHJ5e3JldHVybiEhKG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoTjMoIiIp''@;'; put 'put ''LCJ0ZXh0L2h0bWwiKX1jYXRjaHtyZXR1cm4hMX19KCk/bmV3ICQ5KGwpOmx9KGMpO2xldCBkPWw/U3RyaW5nKGwpOiIiO2E9cjYuZ2V0SW5lcnRCb2R5RWxlbWVudChkKTtsZXQgaD01LGY9ZDtkb3tpZigwPT09aCl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJl''@;'; put 'put ''Y2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7aC0tLGQ9ZixmPWEuaW5uZXJIVE1MLGE9cjYuZ2V0SW5lcnRCb2R5RWxlbWVudChkKX13aGlsZShkIT09Zik7cmV0dXJuIE4zKChuZXcgb0kpLnNhbml0aXplQ2hpbGRyZW4odHYoYSl8fGEpKX1maW5hbGx5e2lmKGEpe2NvbnN0IGQ9dHYo''@;'; put 'put ''YSl8fGE7Zm9yKDtkLmZpcnN0Q2hpbGQ7KWQucmVtb3ZlQ2hpbGQoZC5maXJzdENoaWxkKX19fShLNCgpLGtvKGMpKX1mdW5jdGlvbiBudihjKXtjb25zdCBsPUo0KCk7cmV0dXJuIGw/bC5zYW5pdGl6ZShWMy5VUkwsYyl8fCIiOlg0KGMsIlVSTCIpPyQyKGMpOks5KGtvKGMpKX1mdW5jdGlv''@;'; put 'put ''biBVQyhjKXtjb25zdCBsPUo0KCk7aWYobClyZXR1cm4gTkMobC5zYW5pdGl6ZShWMy5SRVNPVVJDRV9VUkwsYyl8fCIiKTtpZihYNChjLCJSZXNvdXJjZVVSTCIpKXJldHVybiBOQygkMihjKSk7dGhyb3cgbmV3IEFyKDkwNCwhMSl9ZnVuY3Rpb24gSjQoKXtjb25zdCBjPVhyKCk7cmV0dXJu''@;'; put 'put ''IGMmJmNbTDFdLnNhbml0aXplcn1jbGFzcyBNaXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2Rlc2M9bCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5cdTAyNzVwcm92PXZvaWQgMCwibnVtYmVyIj09dHlwZW9mIGE/dGhpcy5fX05HX0VMRU1FTlRfSURfXz1hOnZv''@;'; put 'put ''aWQgMCE9PWEmJih0aGlzLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOnRoaXMscHJvdmlkZWRJbjphLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmEuZmFjdG9yeX0pKX1nZXQgbXVsdGkoKXtyZXR1cm4gdGhpc310b1N0cmluZygpe3JldHVybmBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rlc2N9''@;'; put 'put ''YH19Y29uc3QgUTQ9bmV3IE1pKCJFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiIpLFlDPW5ldyBNaSgiSU5KRUNUT1IiLC0xKSxXQz1uZXcgTWkoIklOSkVDVE9SX0RFRl9UWVBFUyIpO2NsYXNzIEdDe2dldChsLGE9czApe2lmKGE9PT1zMCl7Y29uc3QgZD1uZXcgRXJyb3IoYE51bGxJbmplY3Rv''@;'; put 'put ''ckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtxYShsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsZH1yZXR1cm4gYX19ZnVuY3Rpb24gZ0koLi4uYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczokQygwLGMpLFx1MDI3NWZyb21OZ01vZHVsZTohMH19ZnVuY3Rpb24gJEMo''@;'; put 'put ''YywuLi5sKXtjb25zdCBhPVtdLGQ9bmV3IFNldDtsZXQgaDtyZXR1cm4gRjQobCxmPT57Y29uc3QgXz1mO2l2KF8sYSxbXSxkKSYmKGh8fD1bXSxoLnB1c2goXykpfSksdm9pZCAwIT09aCYmcUMoaCxhKSxhfWZ1bmN0aW9uIHFDKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2Nv''@;'; put 'put ''bnN0e3Byb3ZpZGVyczpofT1jW2FdO292KGgsZj0+e2wucHVzaChmKX0pfX1mdW5jdGlvbiBpdihjLGwsYSxkKXtpZighKGM9Ym8oYykpKXJldHVybiExO2xldCBoPW51bGwsZj1ubShjKTtjb25zdCBfPSFmJiZRbyhjKTtpZihmfHxfKXtpZihfJiYhXy5zdGFuZGFsb25lKXJldHVybiExO2g9''@;'; put 'put ''Y31lbHNle2NvbnN0IFc9Yy5uZ01vZHVsZTtpZihmPW5tKFcpLCFmKXJldHVybiExO2g9V31jb25zdCBUPWQuaGFzKGgpO2lmKF8pe2lmKFQpcmV0dXJuITE7aWYoZC5hZGQoaCksXy5kZXBlbmRlbmNpZXMpe2NvbnN0IFc9ImZ1bmN0aW9uIj09dHlwZW9mIF8uZGVwZW5kZW5jaWVzP18uZGVw''@;'; put 'put ''ZW5kZW5jaWVzKCk6Xy5kZXBlbmRlbmNpZXM7Zm9yKGNvbnN0IGllIG9mIFcpaXYoaWUsbCxhLGQpfX1lbHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFUKXtsZXQgaWU7ZC5hZGQoaCk7dHJ5e0Y0KGYuaW1wb3J0cyxnZT0+e2l2KGdlLGwsYSxkKSYmKGllfHw9W10s''@;'; put 'put ''aWUucHVzaChnZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09aWUmJnFDKGllLGwpfWlmKCFUKXtjb25zdCBpZT1IMShoKXx8KCgpPT5uZXcgaCk7bC5wdXNoKHtwcm92aWRlOmgsdXNlRmFjdG9yeTppZSxkZXBzOlNzfSx7cHJvdmlkZTpXQyx1c2VWYWx1ZTpoLG11bHRpOiEwfSx7cHJvdmlkZTpR''@;'; put 'put ''NCx1c2VWYWx1ZTooKT0+YXIoaCksbXVsdGk6ITB9KX1jb25zdCBXPWYucHJvdmlkZXJzO251bGw9PVd8fFR8fG92KFcsZ2U9PntsLnB1c2goZ2UpfSl9fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gb3YoYyxsKXtmb3IobGV0IGEgb2YgYylUMihhKSYmKGE9''@;'; put 'put ''YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/b3YoYSxsKTpsKGEpfWNvbnN0IG1JPUFzKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpBc30pO2Z1bmN0aW9uIHN2KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZtSSBpbiBjfWZ1bmN0aW9uIGxmKGMp''@;'; put 'put ''e3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IHQ1PW5ldyBNaSgiU2V0IEluamVjdG9yIHNjb3BlLiIpLG82PXt9LHZJPXt9O2xldCBhdjtmdW5jdGlvbiBzNigpe3JldHVybiB2b2lkIDA9PT1hdiYmKGF2PW5ldyBHQyksYXZ9Y2xhc3MgcTB7fWNsYXNzIGx2IGV4dGVuZHMgcTB7''@;'; put 'put ''Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLnBhcmVudD1hLHRoaXMuc291cmNlPWQsdGhpcy5zY29wZXM9aCx0aGlzLnJlY29yZHM9bmV3IE1hcCx0aGlzLl9uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQsdGhp''@;'; put 'put ''cy5fb25EZXN0cm95SG9va3M9W10sdGhpcy5fZGVzdHJveWVkPSExLHV2KGwsXz0+dGhpcy5wcm9jZXNzUHJvdmlkZXIoXykpLHRoaXMucmVjb3Jkcy5zZXQoWUMsQjModm9pZCAwLHRoaXMpKSxoLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldChxMCxCMyh2b2lkIDAsdGhp''@;'; put 'put ''cykpO2NvbnN0IGY9dGhpcy5yZWNvcmRzLmdldCh0NSk7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBmLnZhbHVlJiZ0aGlzLnNjb3Blcy5hZGQoZi52YWx1ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5nZXQoV0MubXVsdGksU3MsbnMuU2VsZikpfWRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX2Rlc3Ryb3llZD0hMDt0cnl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcylhLm5nT25EZXN0cm95KCk7Y29uc3QgbD10aGlzLl9vbkRlc3Ryb3lIb29rczt0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXTtmb3IoY29uc3Qg''@;'; put 'put ''YSBvZiBsKWEoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKX19b25EZXN0cm95KGwpe3JldHVybiB0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX29uRGVzdHJveUhv''@;'; put 'put ''b2tzLnB1c2gobCksKCk9PnRoaXMucmVtb3ZlT25EZXN0cm95KGwpfXJ1bkluQ29udGV4dChsKXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2NvbnN0IGE9QTEodGhpcyksZD1kaSh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7QTEoYSksZGkoZCl9fWdldChsLGE9czAsZD1ucy5E''@;'; put 'put ''ZWZhdWx0KXtpZih0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGwuaGFzT3duUHJvcGVydHkobWEpKXJldHVybiBsW21hXSh0aGlzKTtkPWEwKGQpO2NvbnN0IGg9QTEodGhpcyksZj1kaSh2b2lkIDApO3RyeXtpZighKGQmbnMuU2tpcFNlbGYpKXtsZXQgVD10aGlzLnJlY29yZHMuZ2V0KGwp''@;'; put 'put ''O2lmKHZvaWQgMD09PVQpe2NvbnN0IFc9ZnVuY3Rpb24gQ0koYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyYmYyBpbnN0YW5jZW9mIE1pfShsKSYmeGQobCk7VD1XJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKFcpP0IzKGN2KGwpLG82KTpudWxs''@;'; put 'put ''LHRoaXMucmVjb3Jkcy5zZXQobCxUKX1pZihudWxsIT1UKXJldHVybiB0aGlzLmh5ZHJhdGUobCxUKX1yZXR1cm4oZCZucy5TZWxmP3M2KCk6dGhpcy5wYXJlbnQpLmdldChsLGE9ZCZucy5PcHRpb25hbCYmYT09PXMwP251bGw6YSl9Y2F0Y2goXyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09''@;'; put 'put ''PV8ubmFtZSl7aWYoKF9ba3VdPV9ba3VdfHxbXSkudW5zaGlmdChxYShsKSksaCl0aHJvdyBfO3JldHVybiBmdW5jdGlvbiBBdShjLGwsYSxkKXtjb25zdCBoPWNba3VdO3Rocm93IGxbb21dJiZoLnVuc2hpZnQobFtvbV0pLGMubWVzc2FnZT1mdW5jdGlvbiBBZChjLGwsYSxkPW51bGwpe2M9''@;'; put 'put ''YyYmIlxuIj09PWMuY2hhckF0KDApJiYiXHUwMjc1Ij09Yy5jaGFyQXQoMSk/Yy5zbGljZSgyKTpjO2xldCBoPXFhKGwpO2lmKEFycmF5LmlzQXJyYXkobCkpaD1sLm1hcChxYSkuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBsKXtsZXQgZj1bXTtmb3IobGV0IF8gaW4g''@;'; put 'put ''bClpZihsLmhhc093blByb3BlcnR5KF8pKXtsZXQgVD1sW19dO2YucHVzaChfKyI6IisoInN0cmluZyI9PXR5cGVvZiBUP0pTT04uc3RyaW5naWZ5KFQpOnFhKFQpKSl9aD1geyR7Zi5qb2luKCIsICIpfX1gfXJldHVybmAke2F9JHtkPyIoIitkKyIpIjoiIn1bJHtofV06ICR7Yy5yZXBsYWNl''@;'; put 'put ''KG5jLCJcbiAgIil9YH0oIlxuIitjLm1lc3NhZ2UsaCxhLGQpLGMubmdUb2tlblBhdGg9aCxjW2t1XT1udWxsLGN9KF8sbCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgX31maW5hbGx5e2RpKGYpLEExKGgpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25z''@;'; put 'put ''dCBsPUExKHRoaXMpLGE9ZGkodm9pZCAwKTt0cnl7Y29uc3QgZD10aGlzLmdldChRNC5tdWx0aSxTcyxucy5TZWxmKTtmb3IoY29uc3QgaCBvZiBkKWgoKX1maW5hbGx5e0ExKGwpLGRpKGEpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5r''@;'; put 'put ''ZXlzKCkpbC5wdXNoKHFhKGQpKTtyZXR1cm5gUjNJbmplY3Rvclske2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPWxmKGw9Ym8obCkpP2w6Ym8obCYmbC5w''@;'; put 'put ''cm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIGJJKGMpe3JldHVybiBzdihjKT9CMyh2b2lkIDAsYy51c2VWYWx1ZSk6QjMoSkMoYyksbzYpfShsKTtpZihsZihsKXx8ITAhPT1sLm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoYSk7ZWxzZXtsZXQgaD10aGlzLnJlY29yZHMuZ2V0KGEpO2h8fChoPUIz''@;'; put 'put ''KHZvaWQgMCxvNiwhMCksaC5mYWN0b3J5PSgpPT5LYyhoLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGEsaCkpLGE9bCxoLm11bHRpLnB1c2gobCl9dGhpcy5yZWNvcmRzLnNldChhLGQpfWh5ZHJhdGUobCxhKXtyZXR1cm4gYS52YWx1ZT09PW82JiYoYS52YWx1ZT12SSxhLnZhbHVlPWEuZmFj''@;'; put 'put ''dG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGEudmFsdWUmJmEudmFsdWUmJmZ1bmN0aW9uIHdJKGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5uZ09uRGVzdHJveX0oYS52YWx1ZSkmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRk''@;'; put 'put ''KGEudmFsdWUpLGEudmFsdWV9aW5qZWN0YWJsZURlZkluU2NvcGUobCl7aWYoIWwucHJvdmlkZWRJbilyZXR1cm4hMTtjb25zdCBhPWJvKGwucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhPyJhbnkiPT09YXx8dGhpcy5zY29wZXMuaGFzKGEpOnRoaXMuaW5qZWN0b3JEZWZU''@;'; put 'put ''eXBlcy5oYXMoYSl9cmVtb3ZlT25EZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3MuaW5kZXhPZihsKTstMSE9PWEmJnRoaXMuX29uRGVzdHJveUhvb2tzLnNwbGljZShhLDEpfX1mdW5jdGlvbiBjdihjKXtjb25zdCBsPXhkKGMpLGE9bnVsbCE9PWw/bC5mYWN0b3J5Okgx''@;'; put 'put ''KGMpO2lmKG51bGwhPT1hKXJldHVybiBhO2lmKGMgaW5zdGFuY2VvZiBNaSl0aHJvdyBuZXcgQXIoMjA0LCExKTtpZihjIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uIF9JKGMpe2NvbnN0IGw9Yy5sZW5ndGg7aWYobD4wKXRocm93IEJkKGwsIj8iKSxuZXcgQXIoMjA0LCEx''@;'; put 'put ''KTtjb25zdCBhPWZ1bmN0aW9uIEhzKGMpe3JldHVybiBjJiYoY1tjM118fGNbTnNdKXx8bnVsbH0oYyk7cmV0dXJuIG51bGwhPT1hPygpPT5hLmZhY3RvcnkoYyk6KCk9Pm5ldyBjfShjKTt0aHJvdyBuZXcgQXIoMjA0LCExKX1mdW5jdGlvbiBKQyhjLGwsYSl7bGV0IGQ7aWYobGYoYykpe2Nv''@;'; put 'put ''bnN0IGg9Ym8oYyk7cmV0dXJuIEgxKGgpfHxjdihoKX1pZihzdihjKSlkPSgpPT5ibyhjLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uIFhDKGMpe3JldHVybiEoIWN8fCFjLnVzZUZhY3RvcnkpfShjKSlkPSgpPT5jLnVzZUZhY3RvcnkoLi4uS2MoYy5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVu''@;'; put 'put ''Y3Rpb24gS0MoYyl7cmV0dXJuISghY3x8IWMudXNlRXhpc3RpbmcpfShjKSlkPSgpPT5hcihibyhjLnVzZUV4aXN0aW5nKSk7ZWxzZXtjb25zdCBoPWJvKGMmJihjLnVzZUNsYXNzfHxjLnByb3ZpZGUpKTtpZighZnVuY3Rpb24geUkoYyl7cmV0dXJuISFjLmRlcHN9KGMpKXJldHVybiBIMSho''@;'; put 'put ''KXx8Y3YoaCk7ZD0oKT0+bmV3IGgoLi4uS2MoYy5kZXBzKSl9cmV0dXJuIGR9ZnVuY3Rpb24gQjMoYyxsLGE9ITEpe3JldHVybntmYWN0b3J5OmMsdmFsdWU6bCxtdWx0aTphP1tdOnZvaWQgMH19ZnVuY3Rpb24gdXYoYyxsKXtmb3IoY29uc3QgYSBvZiBjKUFycmF5LmlzQXJyYXkoYSk/dXYo''@;'; put 'put ''YSxsKTphJiZUMihhKT91dihhLlx1MDI3NXByb3ZpZGVycyxsKTpsKGEpfWNvbnN0IGE2PW5ldyBNaSgiQXBwSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5TSX0pLFNJPSJuZyIsUUM9bmV3IE1pKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLEdzPW5ldyBNaSgiUGxhdGZvcm0g''@;'; put 'put ''SUQiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksZVM9bmV3IE1pKCJBbmltYXRpb25Nb2R1bGVUeXBlIiksbDY9bmV3IE1pKCJDU1Agbm9uY2UiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5LNCgpLmJvZHk/LnF1ZXJ5U2VsZWN0b3IoIltu''@;'; put 'put ''Z0NzcE5vbmNlXSIpPy5nZXRBdHRyaWJ1dGUoIm5nQ3NwTm9uY2UiKXx8bnVsbH0pO2xldCBuUz0oYyxsKT0+bnVsbDtmdW5jdGlvbiBpUyhjLGwpe3JldHVybiBuUyhjLGwpfWNsYXNzIGFTe31jbGFzcyBsU3t9Y2xhc3MgWjN7cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCl7dGhyb3cgZnVu''@;'; put 'put ''Y3Rpb24gYnYoYyl7Y29uc3QgbD1FcnJvcihgTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICR7cWEoYyl9LmApO3JldHVybiBsLm5nQ29tcG9uZW50PWMsbH0obCl9fWxldCBLMD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5OVUxMPW5ldyBaMyxjfSkoKTtmdW5jdGlvbiB5digpe3Jl''@;'; put 'put ''dHVybiBZZChTYygpLFhyKCkpfWZ1bmN0aW9uIFlkKGMsbCl7cmV0dXJuIG5ldyBOaShIbChjLGwpKX1sZXQgTmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9YX19cmV0dXJuIGMuX19OR19FTEVNRU5UX0lEX189eXYsY30pKCk7ZnVuY3Rpb24gZGYo''@;'; put 'put ''Yyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBOaT9jLm5hdGl2ZUVsZW1lbnQ6Y31jbGFzcyBZM3t9bGV0IEZvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRlc3Ryb3lOb2RlPW51bGx9fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPSgpPT5mdW5jdGlvbiBndSgpe2NvbnN0IGM9''@;'; put 'put ''WHIoKSxhPW10KFNjKCkuaW5kZXgsYyk7cmV0dXJuKENjKGEpP2E6YylbVm9dfSgpLGN9KSgpLHA2PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLGN9KSgpO2NsYXNzIHM1e2NvbnN0cnVj''@;'; put 'put ''dG9yKGwpe3RoaXMuZnVsbD1sLHRoaXMubWFqb3I9bC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9bC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9bC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19Y29uc3QgQUk9bmV3IHM1KCIxNi4xLjciKSx3dj17fTtmdW5jdGlvbiBhNShjKXtm''@;'; put 'put ''b3IoO2M7KXtjW0RvXXw9NjQ7Y29uc3QgbD1aNChjKTtpZih4NChjKSYmIWwpcmV0dXJuIGM7Yz1sfXJldHVybiBudWxsfWZ1bmN0aW9uIEN2KGMpe3JldHVybiBjLm5nT3JpZ2luYWxFcnJvcn1jbGFzcyBoZntjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1oYW5kbGVFcnJv''@;'; put 'put ''cihsKXtjb25zdCBhPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKGwpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIixsKSxhJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsYSl9X2ZpbmRPcmlnaW5hbEVycm9yKGwpe2xldCBhPWwmJkN2KGwpO2Zvcig7YSYmQ3YoYSk7''@;'; put 'put ''KWE9Q3YoYSk7cmV0dXJuIGF8fG51bGx9fWNvbnN0IE12PW5ldyBNaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5jdGlvbiBtNihjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGZmKGMpe3JldHVybiBjLm93bmVyRG9jdW1l''@;'; put 'put ''bnR9ZnVuY3Rpb24geHYoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudC5ib2R5fWZ1bmN0aW9uIFdkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/YygpOmN9Y2xhc3MgdjYgZXh0ZW5kcyB2M3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb25zdW1lckFs''@;'; put 'put ''bG93U2lnbmFsV3JpdGVzPSExLHRoaXMuX2xWaWV3PW51bGx9c2V0IGxWaWV3KGwpe3RoaXMuX2xWaWV3PWx9b25Db25zdW1lckRlcGVuZGVuY3lNYXlIYXZlQ2hhbmdlZCgpe2E1KHRoaXMuX2xWaWV3KX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fWdldCBoYXNSZWFkQVNpZ25h''@;'; put 'put ''bCgpe3JldHVybiB0aGlzLmhhc1Byb2R1Y2Vyc31ydW5JbkNvbnRleHQobCxhLGQpe2NvbnN0IGg9ZmwodGhpcyk7dGhpcy50cmFja2luZ1ZlcnNpb24rKzt0cnl7bChhLGQpfWZpbmFsbHl7ZmwoaCl9fWRlc3Ryb3koKXt0aGlzLnRyYWNraW5nVmVyc2lvbisrfX1sZXQgXzY9bnVsbDtmdW5j''@;'; put 'put ''dGlvbiBnUygpe3JldHVybiBfNj8/PW5ldyB2NixfNn1mdW5jdGlvbiBtUyhjLGwpe3JldHVybiBjW2xdPz9nUygpfWZ1bmN0aW9uIHZTKGMsbCl7Y29uc3QgYT1nUygpO2EuaGFzUmVhZEFTaWduYWwmJihjW2xdPV82LGEubFZpZXc9YyxfNj1uZXcgdjYpfWNvbnN0IFpvPXt9O2Z1bmN0aW9u''@;'; put 'put ''IENlKGMpe0V2KFRzKCksWHIoKSxldSgpK2MsITEpfWZ1bmN0aW9uIEV2KGMsbCxhLGQpe2lmKCFkKWlmKDM9PSgzJmxbRG9dKSl7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYma20obCxmLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJkFt''@;'; put 'put ''KGwsZiwwLGEpfVhoKGEpfWZ1bmN0aW9uIGt2KGMsbD1udWxsLGE9bnVsbCxkKXtjb25zdCBoPUF2KGMsbCxhLGQpO3JldHVybiBoLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gQXYoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHxTcyxn''@;'; put 'put ''SShjKV07cmV0dXJuIGQ9ZHx8KCJvYmplY3QiPT10eXBlb2YgYz92b2lkIDA6cWEoYykpLG5ldyBsdihmLGx8fHM2KCksZHx8bnVsbCxoKX1sZXQgRWE9KCgpPT57Y2xhc3MgY3tzdGF0aWMgY3JlYXRlKGEsZCl7aWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4ga3Yoe25hbWU6IiJ9LGQsYSwi''@;'; put 'put ''Iik7e2NvbnN0IGg9YS5uYW1lPz8iIjtyZXR1cm4ga3Yoe25hbWU6aH0sYS5wYXJlbnQsYS5wcm92aWRlcnMsaCl9fX1yZXR1cm4gYy5USFJPV19JRl9OT1RfRk9VTkQ9czAsYy5OVUxMPW5ldyBHQyxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMscHJvdmlkZWRJbjoiYW55IixmYWN0b3J5Oigp''@;'; put 'put ''PT5hcihZQyl9KSxjLl9fTkdfRUxFTUVOVF9JRF9fPS0xLGN9KSgpO2Z1bmN0aW9uIHR0KGMsbD1ucy5EZWZhdWx0KXtjb25zdCBhPVhyKCk7cmV0dXJuIG51bGw9PT1hP2FyKGMsbCk6dEMoU2MoKSxhLGJvKGMpLGwpfWZ1bmN0aW9uIGI2KGMsbCxhLGQsaCxmLF8sVCxXLGllLGdlKXtjb25z''@;'; put 'put ''dCB3ZT1sLmJsdWVwcmludC5zbGljZSgpO3JldHVybiB3ZVtIaV09aCx3ZVtEb109MTQwfGQsKG51bGwhPT1pZXx8YyYmMjA0OCZjW0RvXSkmJih3ZVtEb118PTIwNDgpLHlvKHdlKSx3ZVt1YV09d2VbT2xdPWMsd2VbVmFdPWEsd2VbTDFdPV98fGMmJmNbTDFdLHdlW1ZvXT1UfHxjJiZjW1Zv''@;'; put 'put ''XSx3ZVtMZF09V3x8YyYmY1tMZF18fG51bGwsd2Vbem9dPWYsd2VbJGhdPWZ1bmN0aW9uIFcyKCl7cmV0dXJuIEg5Kyt9KCksd2VbdTBdPWdlLHdlW1IxXT1pZSx3ZVtKYV09Mj09bC50eXBlP2NbSmFdOndlLHdlfWZ1bmN0aW9uIEczKGMsbCxhLGQsaCl7bGV0IGY9Yy5kYXRhW2xdO2lmKG51''@;'; put 'put ''bGw9PT1mKWY9ZnVuY3Rpb24gVHYoYyxsLGEsZCxoKXtjb25zdCBmPVB3KCksXz1fOSgpLFc9Yy5kYXRhW2xdPWZ1bmN0aW9uIHc2KGMsbCxhLGQsaCxmKXtsZXQgXz1sP2wuaW5qZWN0b3JJbmRleDotMSxUPTA7cmV0dXJuIHczKCkmJihUfD0xMjgpLHt0eXBlOmEsaW5kZXg6ZCxpbnNlcnRC''@;'; put 'put ''ZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6XyxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEsY29tcG9uZW50T2Zmc2V0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczpULHByb3ZpZGVySW5kZXhlczowLHZhbHVlOmgs''@;'; put 'put ''YXR0cnM6ZixtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6bCxwcm9qZWN0''@;'; put 'put ''aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAsXz9m''@;'; put 'put ''OmYmJmYucGFyZW50LGEsbCxkLGgpO3JldHVybiBudWxsPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPVcpLG51bGwhPT1mJiYoXz9udWxsPT1mLmNoaWxkJiZudWxsIT09Vy5wYXJlbnQmJihmLmNoaWxkPVcpOm51bGw9PT1mLm5leHQmJihmLm5leHQ9VyxXLnByZXY9ZikpLFd9KGMs''@;'; put 'put ''bCxhLGQsaCksZnVuY3Rpb24gcVQoKXtyZXR1cm4gUG8ubEZyYW1lLmluSTE4bn0oKSYmKGYuZmxhZ3N8PTMyKTtlbHNlIGlmKDY0JmYudHlwZSl7Zi50eXBlPWEsZi52YWx1ZT1kLGYuYXR0cnM9aDtjb25zdCBfPWZ1bmN0aW9uIEw0KCl7Y29uc3QgYz1Qby5sRnJhbWUsbD1jLmN1cnJlbnRU''@;'; put 'put ''Tm9kZTtyZXR1cm4gYy5pc1BhcmVudD9sOmwucGFyZW50fSgpO2YuaW5qZWN0b3JJbmRleD1udWxsPT09Xz8tMTpfLmluamVjdG9ySW5kZXh9cmV0dXJuIE4xKGYsITApLGZ9ZnVuY3Rpb24gbDUoYyxsLGEsZCl7aWYoMD09PWEpcmV0dXJuLTE7Y29uc3QgaD1sLmxlbmd0aDtmb3IobGV0IGY9''@;'; put 'put ''MDtmPGE7ZisrKWwucHVzaChkKSxjLmJsdWVwcmludC5wdXNoKGQpLGMuZGF0YS5wdXNoKG51bGwpO3JldHVybiBofWZ1bmN0aW9uIHhTKGMsbCxhLGQsaCl7Y29uc3QgZj1tUyhsLHAzKSxfPWV1KCksVD0yJmQ7dHJ5e2lmKFhoKC0xKSxUJiZsLmxlbmd0aD5wcyYmRXYoYyxsLHBzLCExKSxo''@;'; put 'put ''MChUPzI6MCxoKSxUKWYucnVuSW5Db250ZXh0KGEsZCxoKTtlbHNle2NvbnN0IGllPWZsKG51bGwpO3RyeXthKGQsaCl9ZmluYWxseXtmbChpZSl9fX1maW5hbGx5e1QmJm51bGw9PT1sW3AzXSYmdlMobCxwMyksWGgoXyksaDAoVD8zOjEsaCl9fWZ1bmN0aW9uIER2KGMsbCxhKXtpZihPZChs''@;'; put 'put ''KSl7Y29uc3QgZD1mbChudWxsKTt0cnl7Y29uc3QgZj1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IF89bC5kaXJlY3RpdmVTdGFydDtfPGY7XysrKXtjb25zdCBUPWMuZGF0YVtfXTtULmNvbnRlbnRRdWVyaWVzJiZULmNvbnRlbnRRdWVyaWVzKDEsYVtfXSxfKX19ZmluYWxseXtmbChkKX19fWZ1''@;'; put 'put ''bmN0aW9uIEl2KGMsbCxhKXtPdygpJiYoZnVuY3Rpb24gWUkoYyxsLGEsZCl7Y29uc3QgaD1hLmRpcmVjdGl2ZVN0YXJ0LGY9YS5kaXJlY3RpdmVFbmQ7UDEoYSkmJmZ1bmN0aW9uIEpJKGMsbCxhKXtjb25zdCBkPUhsKGwsYyksaD1FUyhhKTtsZXQgXz0xNjthLnNpZ25hbHM/Xz00MDk2OmEu''@;'; put 'put ''b25QdXNoJiYoXz02NCk7Y29uc3QgVD1TNihjLGI2KGMsaCxudWxsLF8sZCxsLG51bGwsY1tMMV0ucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGQsYSksbnVsbCxudWxsLG51bGwpKTtjW2wuaW5kZXhdPVR9KGwsYSxjLmRhdGFbaCthLmNvbXBvbmVudE9mZnNldF0pLGMuZmlyc3RD''@;'; put 'put ''cmVhdGVQYXNzfHxJbShhLGwpLFZjKGQsbCk7Y29uc3QgXz1hLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBUPWg7VDxmO1QrKyl7Y29uc3QgVz1jLmRhdGFbVF0saWU9UWgobCxjLFQsYSk7VmMoaWUsbCksbnVsbCE9PV8mJlFJKDAsVC1oLGllLFcsMCxfKSxRYyhXKSYmKG10KGEuaW5kZXgsbClb''@;'; put 'put ''VmFdPVFoKGwsYyxULGEpKX19KGMsbCxhLEhsKGEsbCkpLDY0PT0oNjQmYS5mbGFncykmJkxTKGMsbCxhKSl9ZnVuY3Rpb24geTYoYyxsLGE9SGwpe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtj''@;'; put 'put ''b25zdCBfPWRbZisxXSxUPS0xPT09Xz9hKGwsYyk6Y1tfXTtjW2grK109VH19fWZ1bmN0aW9uIEVTKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PSQzKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGly''@;'; put 'put ''ZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0cyxjLmlkKTpsfWZ1bmN0aW9uICQzKGMsbCxhLGQsaCxmLF8sVCxXLGllLGdlKXtjb25zdCB3ZT1wcytkLEVlPXdlK2gsWmU9ZnVuY3Rpb24ga1MoYyxsKXtjb25zdCBhPVtdO2ZvcihsZXQgZD0wO2Q8''@;'; put 'put ''bDtkKyspYS5wdXNoKGQ8Yz9udWxsOlpvKTtyZXR1cm4gYX0od2UsRWUpLG90PSJmdW5jdGlvbiI9PXR5cGVvZiBpZT9pZSgpOmllO3JldHVybiBaZVtCaV09e3R5cGU6YyxibHVlcHJpbnQ6WmUsdGVtcGxhdGU6YSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OlQsZGVjbFROb2RlOmwsZGF0YTpa''@;'; put 'put ''ZS5zbGljZSgpLmZpbGwobnVsbCx3ZSksYmluZGluZ1N0YXJ0SW5kZXg6d2UsZXhwYW5kb1N0YXJ0SW5kZXg6RWUsaG9zdEJpbmRpbmdPcENvZGVzOm51bGwsZmlyc3RDcmVhdGVQYXNzOiEwLGZpcnN0VXBkYXRlUGFzczohMCxzdGF0aWNWaWV3UXVlcmllczohMSxzdGF0aWNDb250ZW50UXVl''@;'; put 'put ''cmllczohMSxwcmVPcmRlckhvb2tzOm51bGwscHJlT3JkZXJDaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLGNsZWFudXA6bnVsbCxjb250ZW50''@;'; put 'put ''UXVlcmllczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgZj9mKCk6ZixwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIF8/XygpOl8sZmlyc3RDaGlsZDpudWxsLHNjaGVtYXM6Vyxjb25zdHM6b3QsaW5jb21wbGV0ZUZpcnN0''@;'; put 'put ''UGFzczohMSxzc3JJZDpnZX19bGV0IEx2PWM9Pm51bGw7ZnVuY3Rpb24gcGYoYyxsLGEsZCl7Zm9yKGxldCBoIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShoKSl7YT1udWxsPT09YT97fTphO2NvbnN0IGY9Y1toXTtudWxsPT09ZD9DNihhLGwsaCxmKTpkLmhhc093blByb3BlcnR5KGgpJiZD''@;'; put 'put ''NihhLGwsZFtoXSxmKX1yZXR1cm4gYX1mdW5jdGlvbiBDNihjLGwsYSxkKXtjLmhhc093blByb3BlcnR5KGEpP2NbYV0ucHVzaChsLGQpOmNbYV09W2wsZF19ZnVuY3Rpb24gUHUoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBXPUhsKGwsYSk7bGV0IGdlLGllPWwuaW5wdXRzOyFUJiZudWxsIT1p''@;'; put 'put ''ZSYmKGdlPWllW2RdKT8oSHYoYyxhLGdlLGQsaCksUDEobCkmJmZ1bmN0aW9uIGpJKGMsbCl7Y29uc3QgYT1tdChsLGMpOzE2JmFbRG9dfHwoYVtEb118PTY0KX0oYSxsLmluZGV4KSk6MyZsLnR5cGUmJihkPWZ1bmN0aW9uIElTKGMpe3JldHVybiJjbGFzcyI9PT1jPyJjbGFzc05hbWUiOiJm''@;'; put 'put ''b3IiPT09Yz8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09Yz8iZm9ybUFjdGlvbiI6ImlubmVySHRtbCI9PT1jPyJpbm5lckhUTUwiOiJyZWFkb25seSI9PT1jPyJyZWFkT25seSI6InRhYmluZGV4Ij09PWM/InRhYkluZGV4IjpjfShkKSxoPW51bGwhPV8/XyhoLGwudmFsdWV8fCIiLGQpOmgs''@;'; put 'put ''Zi5zZXRQcm9wZXJ0eShXLGQsaCkpfWZ1bmN0aW9uIFJ2KGMsbCxhLGQpe2lmKE93KCkpe2NvbnN0IGg9bnVsbD09PWQ/bnVsbDp7IiI6LTF9LGY9ZnVuY3Rpb24gR0koYyxsKXtjb25zdCBhPWMuZGlyZWN0aXZlUmVnaXN0cnk7bGV0IGQ9bnVsbCxoPW51bGw7aWYoYSlmb3IobGV0IGY9MDtm''@;'; put 'put ''PGEubGVuZ3RoO2YrKyl7Y29uc3QgXz1hW2ZdO2lmKG00KGwsXy5zZWxlY3RvcnMsITEpKWlmKGR8fChkPVtdKSxRYyhfKSlpZihudWxsIT09Xy5maW5kSG9zdERpcmVjdGl2ZURlZnMpe2NvbnN0IFQ9W107aD1ofHxuZXcgTWFwLF8uZmluZEhvc3REaXJlY3RpdmVEZWZzKF8sVCxoKSxkLnVu''@;'; put 'put ''c2hpZnQoLi4uVCxfKSxPdihjLGwsVC5sZW5ndGgpfWVsc2UgZC51bnNoaWZ0KF8pLE92KGMsbCwwKTtlbHNlIGg9aHx8bmV3IE1hcCxfLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8uKF8sZCxoKSxkLnB1c2goXyl9cmV0dXJuIG51bGw9PT1kP251bGw6W2QsaF19KGMsYSk7bGV0IF8sVDtudWxs''@;'; put 'put ''PT09Zj9fPVQ9bnVsbDpbXyxUXT1mLG51bGwhPT1fJiZjNShjLGwsYSxfLGgsVCksaCYmZnVuY3Rpb24gJEkoYyxsLGEpe2lmKGwpe2NvbnN0IGQ9Yy5sb2NhbE5hbWVzPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCs9Mil7Y29uc3QgZj1hW2xbaCsxXV07aWYobnVsbD09Zil0aHJvdyBu''@;'; put 'put ''ZXcgQXIoLTMwMSwhMSk7ZC5wdXNoKGxbaF0sZil9fX0oYSxkLGgpfWEubWVyZ2VkQXR0cnM9WWgoYS5tZXJnZWRBdHRycyxhLmF0dHJzKX1mdW5jdGlvbiBjNShjLGwsYSxkLGgsZil7Zm9yKGxldCBpZT0wO2llPGQubGVuZ3RoO2llKyspQTkoSW0oYSxsKSxjLGRbaWVdLnR5cGUpOyFmdW5j''@;'; put 'put ''dGlvbiBLSShjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJbmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBpZT0wO2llPGQubGVuZ3RoO2llKyspe2NvbnN0IGdlPWRbaWVdO2dlLnByb3Zp''@;'; put 'put ''ZGVyc1Jlc29sdmVyJiZnZS5wcm92aWRlcnNSZXNvbHZlcihnZSl9bGV0IF89ITEsVD0hMSxXPWw1KGMsbCxkLmxlbmd0aCxudWxsKTtmb3IobGV0IGllPTA7aWU8ZC5sZW5ndGg7aWUrKyl7Y29uc3QgZ2U9ZFtpZV07YS5tZXJnZWRBdHRycz1ZaChhLm1lcmdlZEF0dHJzLGdlLmhvc3RBdHRy''@;'; put 'put ''cyksWEkoYyxhLGwsVyxnZSkscUkoVyxnZSxoKSxudWxsIT09Z2UuY29udGVudFF1ZXJpZXMmJihhLmZsYWdzfD00KSwobnVsbCE9PWdlLmhvc3RCaW5kaW5nc3x8bnVsbCE9PWdlLmhvc3RBdHRyc3x8MCE9PWdlLmhvc3RWYXJzKSYmKGEuZmxhZ3N8PTY0KTtjb25zdCB3ZT1nZS50eXBlLnBy''@;'; put 'put ''b3RvdHlwZTshXyYmKHdlLm5nT25DaGFuZ2VzfHx3ZS5uZ09uSW5pdHx8d2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChhLmluZGV4KSxfPSEwKSwhVCYmKHdlLm5nT25DaGFuZ2VzfHx3ZS5uZ0RvQ2hlY2spJiYoKGMucHJlT3JkZXJDaGVja0hvb2tzPz89W10p''@;'; put 'put ''LnB1c2goYS5pbmRleCksVD0hMCksVysrfSFmdW5jdGlvbiBCSShjLGwsYSl7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZCxmPWMuZGF0YSxfPWwuYXR0cnMsVD1bXTtsZXQgVz1udWxsLGllPW51bGw7Zm9yKGxldCBnZT1sLmRpcmVjdGl2ZVN0YXJ0O2dlPGg7Z2UrKyl7Y29uc3Qgd2U9ZltnZV0s''@;'; put 'put ''RWU9YT9hLmdldCh3ZSk6bnVsbCxvdD1FZT9FZS5vdXRwdXRzOm51bGw7Vz1wZih3ZS5pbnB1dHMsZ2UsVyxFZT9FZS5pbnB1dHM6bnVsbCksaWU9cGYod2Uub3V0cHV0cyxnZSxpZSxvdCk7Y29uc3QgZXQ9bnVsbD09PVd8fG51bGw9PT1ffHx1MyhsKT9udWxsOmVMKFcsZ2UsXyk7VC5wdXNo''@;'; put 'put ''KGV0KX1udWxsIT09VyYmKFcuaGFzT3duUHJvcGVydHkoImNsYXNzIikmJihsLmZsYWdzfD04KSxXLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYobC5mbGFnc3w9MTYpKSxsLmluaXRpYWxJbnB1dHM9VCxsLmlucHV0cz1XLGwub3V0cHV0cz1pZX0oYyxhLGYpfWZ1bmN0aW9uIExTKGMsbCxh''@;'; put 'put ''KXtjb25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVuZCxmPWEuaW5kZXgsXz1mdW5jdGlvbiBOdygpe3JldHVybiBQby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4fSgpO3RyeXtYaChmKTtmb3IobGV0IFQ9ZDtUPGg7VCsrKXtjb25zdCBXPWMuZGF0YVtUXSxpZT1s''@;'; put 'put ''W1RdO1NtKFQpLChudWxsIT09Vy5ob3N0QmluZGluZ3N8fDAhPT1XLmhvc3RWYXJzfHxudWxsIT09Vy5ob3N0QXR0cnMpJiZXSShXLGllKX19ZmluYWxseXtYaCgtMSksU20oXyl9fWZ1bmN0aW9uIFdJKGMsbCl7bnVsbCE9PWMuaG9zdEJpbmRpbmdzJiZjLmhvc3RCaW5kaW5ncygxLGwpfWZ1''@;'; put 'put ''bmN0aW9uIE92KGMsbCxhKXtsLmNvbXBvbmVudE9mZnNldD1hLChjLmNvbXBvbmVudHM/Pz1bXSkucHVzaChsLmluZGV4KX1mdW5jdGlvbiBxSShjLGwsYSl7aWYoYSl7aWYobC5leHBvcnRBcylmb3IobGV0IGQ9MDtkPGwuZXhwb3J0QXMubGVuZ3RoO2QrKylhW2wuZXhwb3J0QXNbZF1dPWM7''@;'; put 'put ''UWMobCkmJihhWyIiXT1jKX19ZnVuY3Rpb24gWEkoYyxsLGEsZCxoKXtjLmRhdGFbZF09aDtjb25zdCBmPWguZmFjdG9yeXx8KGguZmFjdG9yeT1IMShoLnR5cGUpKSxfPW5ldyBSNChmLFFjKGgpLHR0KTtjLmJsdWVwcmludFtkXT1fLGFbZF09XyxmdW5jdGlvbiBVSShjLGwsYSxkLGgpe2Nv''@;'; put 'put ''bnN0IGY9aC5ob3N0QmluZGluZ3M7aWYoZil7bGV0IF89Yy5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PV8mJihfPWMuaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtjb25zdCBUPX5sLmluZGV4OyhmdW5jdGlvbiBaSShjKXtsZXQgbD1jLmxlbmd0aDtmb3IoO2w+MDspe2NvbnN0IGE9Y1stLWxd''@;'; put 'put ''O2lmKCJudW1iZXIiPT10eXBlb2YgYSYmYTwwKXJldHVybiBhfXJldHVybiAwfSkoXykhPVQmJl8ucHVzaChUKSxfLnB1c2goYSxkLGYpfX0oYyxsLGQsbDUoYyxhLGguaG9zdFZhcnMsWm8pLGgpfWZ1bmN0aW9uICQxKGMsbCxhLGQsaCxmKXtjb25zdCBfPUhsKGMsbCk7IWZ1bmN0aW9uIFB2''@;'; put 'put ''KGMsbCxhLGQsaCxmLF8pe2lmKG51bGw9PWYpYy5yZW1vdmVBdHRyaWJ1dGUobCxoLGEpO2Vsc2V7Y29uc3QgVD1udWxsPT1fP2tvKGYpOl8oZixkfHwiIixoKTtjLnNldEF0dHJpYnV0ZShsLGgsVCxhKX19KGxbVm9dLF8sZixjLnZhbHVlLGEsZCxoKX1mdW5jdGlvbiBRSShjLGwsYSxkLGgs''@;'; put 'put ''Zil7Y29uc3QgXz1mW2xdO2lmKG51bGwhPT1fKWZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7KVJTKGQsYSxfW1QrK10sX1tUKytdLF9bVCsrXSl9ZnVuY3Rpb24gUlMoYyxsLGEsZCxoKXtjb25zdCBmPWZsKG51bGwpO3RyeXtjb25zdCBfPWMuaW5wdXRUcmFuc2Zvcm1zO251bGwhPT1fJiZfLmhh''@;'; put 'put ''c093blByb3BlcnR5KGQpJiYoaD1fW2RdLmNhbGwobCxoKSksbnVsbCE9PWMuc2V0SW5wdXQ/Yy5zZXRJbnB1dChsLGgsYSxkKTpsW2RdPWh9ZmluYWxseXtmbChmKX19ZnVuY3Rpb24gZUwoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigw''@;'; put 'put ''IT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3duUHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3QgXz1jW2ZdO2ZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7VCs9MilpZihfW1RdPT09bCl7ZC5wdXNoKGYsX1tUKzFdLGFbaCsxXSk7YnJl''@;'; put 'put ''YWt9fWgrPTJ9ZWxzZSBoKz0yO2Vsc2UgaCs9NH1yZXR1cm4gZH1mdW5jdGlvbiBPUyhjLGwsYSxkKXtyZXR1cm5bYywhMCwhMSxsLG51bGwsMCxkLGEsbnVsbCxudWxsLG51bGxdfWZ1bmN0aW9uIFBTKGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzO2lmKG51bGwhPT1hKWZvcihsZXQg''@;'; put 'put ''ZD0wO2Q8YS5sZW5ndGg7ZCs9Mil7Y29uc3QgZj1hW2QrMV07aWYoLTEhPT1mKXtjb25zdCBfPWMuZGF0YVtmXTt3OShhW2RdKSxfLmNvbnRlbnRRdWVyaWVzKDIsbFtmXSxmKX19fWZ1bmN0aW9uIFM2KGMsbCl7cmV0dXJuIGNbR2hdP2NbUzRdW1hhXT1sOmNbR2hdPWwsY1tTNF09bCxsfWZ1''@;'; put 'put ''bmN0aW9uIEZ2KGMsbCxhKXt3OSgwKTtjb25zdCBkPWZsKG51bGwpO3RyeXtsKGMsYSl9ZmluYWxseXtmbChkKX19ZnVuY3Rpb24gRlMoYyl7cmV0dXJuIGNbVHVdfHwoY1tUdV09W10pfWZ1bmN0aW9uIEhTKGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIE5T''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fFFjKGMpKSYmKGE9ZnVuY3Rpb24gSTQoYyl7Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW000XSlyZXR1cm4gYztjPWNbSGldfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVtWb119ZnVuY3Rpb24gVlMoYyxs''@;'; put 'put ''KXtjb25zdCBhPWNbTGRdLGQ9YT9hLmdldChoZixudWxsKTpudWxsO2QmJmQuaGFuZGxlRXJyb3IobCl9ZnVuY3Rpb24gSHYoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3QgXz1hW2YrK10sVD1hW2YrK107UlMoYy5kYXRhW19dLGxbX10sZCxULGgpfX1mdW5jdGlv''@;'; put 'put ''biBHZChjLGwsYSl7Y29uc3QgZD1ZMChsLGMpOyFmdW5jdGlvbiBTQyhjLGwsYSl7Yy5zZXRWYWx1ZShsLGEpfShjW1ZvXSxkLGEpfWZ1bmN0aW9uIHRMKGMsbCl7Y29uc3QgYT1tdChsLGMpLGQ9YVtCaV07IWZ1bmN0aW9uIG5MKGMsbCl7Zm9yKGxldCBhPWwubGVuZ3RoO2E8Yy5ibHVlcHJp''@;'; put 'put ''bnQubGVuZ3RoO2ErKylsLnB1c2goYy5ibHVlcHJpbnRbYV0pfShkLGEpO2NvbnN0IGg9YVtIaV07bnVsbCE9PWgmJm51bGw9PT1hW3UwXSYmKGFbdTBdPWlTKGgsYVtMZF0pKSxOdihkLGEsYVtWYV0pfWZ1bmN0aW9uIE52KGMsbCxhKXtDOShsKTt0cnl7Y29uc3QgZD1jLnZpZXdRdWVyeTtu''@;'; put 'put ''dWxsIT09ZCYmRnYoMSxkLGEpO2NvbnN0IGg9Yy50ZW1wbGF0ZTtudWxsIT09aCYmeFMoYyxsLGgsMSxhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuZmlyc3RDcmVhdGVQYXNzPSExKSxjLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZQUyhjLGwpLGMuc3RhdGljVmlld1F1ZXJpZXMmJkZ2KDIsYy52''@;'; put 'put ''aWV3UXVlcnksYSk7Y29uc3QgZj1jLmNvbXBvbmVudHM7bnVsbCE9PWYmJmZ1bmN0aW9uIEJTKGMsbCl7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspdEwoYyxsW2FdKX0obCxmKX1jYXRjaChkKXt0aHJvdyBjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5jb21wbGV0ZUZpcnN0UGFzcz0hMCxj''@;'; put 'put ''LmZpcnN0Q3JlYXRlUGFzcz0hMSksZH1maW5hbGx5e2xbRG9dJj0tNSxNbSgpfX1sZXQgalM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxsPW5ldyBTZXQsdGhpcy5xdWV1ZT1uZXcgTWFwfWNyZWF0ZShhLGQsaCl7Y29uc3QgZj10eXBlb2YgWm9uZT4idSI/bnVsbDpab25l''@;'; put 'put ''LmN1cnJlbnQsXz1uZXcgX20oYSxpZT0+e3RoaXMuYWxsLmhhcyhpZSkmJnRoaXMucXVldWUuc2V0KGllLGYpfSxoKTtsZXQgVDt0aGlzLmFsbC5hZGQoXyksXy5ub3RpZnkoKTtjb25zdCBXPSgpPT57Xy5jbGVhbnVwKCksVD8uKCksdGhpcy5hbGwuZGVsZXRlKF8pLHRoaXMucXVldWUuZGVs''@;'; put 'put ''ZXRlKF8pfTtyZXR1cm4gVD1kPy5vbkRlc3Ryb3koVykse2Rlc3Ryb3k6V319Zmx1c2goKXtpZigwIT09dGhpcy5xdWV1ZS5zaXplKWZvcihjb25zdFthLGRdb2YgdGhpcy5xdWV1ZSl0aGlzLnF1ZXVlLmRlbGV0ZShhKSxkP2QucnVuKCgpPT5hLnJ1bigpKTphLnJ1bigpfWdldCBpc1F1ZXVl''@;'; put 'put ''RW1wdHkoKXtyZXR1cm4gMD09PXRoaXMucXVldWUuc2l6ZX19cmV0dXJuIGMuXHUwMjc1cHJvdj1kcih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgY30pLGN9KSgpO2Z1bmN0aW9uIE02KGMsbCxhKXtsZXQgZD1hP2Muc3R5bGVzOm51bGwsaD1hP2MuY2xhc3Nl''@;'; put 'put ''czpudWxsLGY9MDtpZihudWxsIT09bClmb3IobGV0IF89MDtfPGwubGVuZ3RoO18rKyl7Y29uc3QgVD1sW19dOyJudW1iZXIiPT10eXBlb2YgVD9mPVQ6MT09Zj9oPXZjKGgsVCk6Mj09ZiYmKGQ9dmMoZCxUKyI6ICIrbFsrK19dKyI7IikpfWE/Yy5zdHlsZXM9ZDpjLnN0eWxlc1dpdGhvdXRI''@;'; put 'put ''b3N0PWQsYT9jLmNsYXNzZXM9aDpjLmNsYXNzZXNXaXRob3V0SG9zdD1ofWZ1bmN0aW9uIHU1KGMsbCxhLGQsaD0hMSl7Zm9yKDtudWxsIT09YTspe2NvbnN0IGY9bFthLmluZGV4XTtpZihudWxsIT09ZiYmZC5wdXNoKF9hKGYpKSxpYyhmKSl7Zm9yKGxldCBUPXJjO1Q8Zi5sZW5ndGg7VCsr''@;'; put 'put ''KXtjb25zdCBXPWZbVF0saWU9V1tCaV0uZmlyc3RDaGlsZDtudWxsIT09aWUmJnU1KFdbQmldLFcsaWUsZCl9ZltkMF0hPT1mW0hpXSYmZC5wdXNoKGZbZDBdKX1jb25zdCBfPWEudHlwZTtpZig4Jl8pdTUoYyxsLGEuY2hpbGQsZCk7ZWxzZSBpZigzMiZfKXtjb25zdCBUPWo5KGEsbCk7bGV0''@;'; put 'put ''IFc7Zm9yKDtXPVQoKTspZC5wdXNoKFcpfWVsc2UgaWYoMTYmXyl7Y29uc3QgVD1UQyhsLGEpO2lmKEFycmF5LmlzQXJyYXkoVCkpZC5wdXNoKC4uLlQpO2Vsc2V7Y29uc3QgVz1aNChsW0phXSk7dTUoV1tCaV0sVyxULGQsITApfX1hPWg/YS5wcm9qZWN0aW9uTmV4dDphLm5leHR9cmV0dXJu''@;'; put 'put ''IGR9ZnVuY3Rpb24geDYoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0wxXS5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbiYmaC5iZWdpbigpO3RyeXt6UyhjLGwsYy50ZW1wbGF0ZSxhKX1jYXRjaChfKXt0aHJvdyBkJiZWUyhsLF8pLF99ZmluYWxseXtoLmVuZCYmaC5lbmQoKSxsW0wxXS5lZmZlY3RN''@;'; put 'put ''YW5hZ2VyPy5mbHVzaCgpfX1mdW5jdGlvbiB6UyhjLGwsYSxkKXtjb25zdCBoPWxbRG9dO2lmKDI1NiE9KDI1NiZoKSl7bFtMMV0uZWZmZWN0TWFuYWdlcj8uZmx1c2goKSxDOShsKTt0cnl7eW8obCksZnVuY3Rpb24gSHcoYyl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXg9Y30oYy5i''@;'; put 'put ''aW5kaW5nU3RhcnRJbmRleCksbnVsbCE9PWEmJnhTKGMsbCxhLDIsZCk7Y29uc3QgXz0zPT0oMyZoKTtpZihfKXtjb25zdCBpZT1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUsbnVsbCl9ZWxzZXtjb25zdCBpZT1jLnByZU9yZGVySG9va3M7bnVsbCE9PWllJiZBbShs''@;'; put 'put ''LGllLDAsbnVsbCksUzkobCwwKX1pZihmdW5jdGlvbiBhTChjKXtmb3IobGV0IGw9d0MoYyk7bnVsbCE9PWw7bD1DQyhsKSl7aWYoIWxbdW1dKWNvbnRpbnVlO2NvbnN0IGE9bFtIMl07Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2VzKGFbZF0pfX19KGwpLFVTKGwsMiksbnVsbCE9PWMu''@;'; put 'put ''Y29udGVudFF1ZXJpZXMmJlBTKGMsbCksXyl7Y29uc3QgaWU9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy5jb250ZW50SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDEpLFM5KGwsMSl9IWZ1bmN0aW9uIE1TKGMsbCl7Y29uc3QgYT1jLmhv''@;'; put 'put ''c3RCaW5kaW5nT3BDb2RlcztpZihudWxsPT09YSlyZXR1cm47Y29uc3QgZD1tUyhsLGczKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZihmPDApWGgofmYpO2Vsc2V7Y29uc3QgXz1mLFQ9YVsrK2hdLFc9YVsrK2hdO0tUKFQsXyksZC5ydW5JbkNvbnRl''@;'; put 'put ''eHQoVywyLGxbX10pfX19ZmluYWxseXtudWxsPT09bFtnM10mJnZTKGwsZzMpLFhoKC0xKX19KGMsbCk7Y29uc3QgVD1jLmNvbXBvbmVudHM7bnVsbCE9PVQmJllTKGwsVCwwKTtjb25zdCBXPWMudmlld1F1ZXJ5O2lmKG51bGwhPT1XJiZGdigyLFcsZCksXyl7Y29uc3QgaWU9Yy52aWV3Q2hl''@;'; put 'put ''Y2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy52aWV3SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDIpLFM5KGwsMil9ITA9PT1jLmZpcnN0VXBkYXRlUGFzcyYmKGMuZmlyc3RVcGRhdGVQYXNzPSExKSxsW0RvXSY9LTczLHpzKGwpfWZpbmFsbHl7TW0oKX19fWZ1''@;'; put 'put ''bmN0aW9uIFVTKGMsbCl7Zm9yKGxldCBhPXdDKGMpO251bGwhPT1hO2E9Q0MoYSkpZm9yKGxldCBkPXJjO2Q8YS5sZW5ndGg7ZCsrKVpTKGFbZF0sbCl9ZnVuY3Rpb24gbEwoYyxsLGEpe1pTKG10KGwsYyksYSl9ZnVuY3Rpb24gWlMoYyxsKXtpZighZnVuY3Rpb24gR3QoYyl7cmV0dXJuIDEy''@;'; put 'put ''OD09KDEyOCZjW0RvXSl9KGMpKXJldHVybjtjb25zdCBhPWNbQmldO2lmKDgwJmNbRG9dJiYwPT09bHx8MTAyNCZjW0RvXXx8Mj09PWwpelMoYSxjLGEudGVtcGxhdGUsY1tWYV0pO2Vsc2UgaWYoY1tJMV0+MCl7VVMoYywxKTtjb25zdCBoPWNbQmldLmNvbXBvbmVudHM7bnVsbCE9PWgmJllT''@;'; put 'put ''KGMsaCwxKX19ZnVuY3Rpb24gWVMoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWxMKGMsbFtkXSxhKX1jbGFzcyBkNXtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbQmldO3JldHVybiB1NShhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3Rvcihs''@;'; put 'put ''LGEpe3RoaXMuX2xWaWV3PWwsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWEsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbVmFdfXNldCBjb250ZXh0KGwpe3RoaXMuX2xWaWV3W1ZhXT1s''@;'; put 'put ''fWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gMjU2PT0oMjU2JnRoaXMuX2xWaWV3W0RvXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3''@;'; put 'put ''W3VhXTtpZihpYyhsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKHNmKGwsZCksUG0oYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9S20odGhpcy5fbFZpZXdbQmldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7IWZ1bmN0aW9uIGYw''@;'; put 'put ''KGMsbCl7aWYoMjU2PT0oMjU2JmNbRG9dKSl0aHJvdyBuZXcgQXIoOTExLCExKTtudWxsPT09Y1tPMV0mJihjW08xXT1bXSksY1tPMV0ucHVzaChsKX0odGhpcy5fbFZpZXcsbCl9bWFya0ZvckNoZWNrKCl7YTUodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNo''@;'; put 'put ''KCl7dGhpcy5fbFZpZXdbRG9dJj0tMTI5fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbRG9dfD0xMjh9ZGV0ZWN0Q2hhbmdlcygpe3g2KHRoaXMuX2xWaWV3W0JpXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lm''@;'; put 'put ''KHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgQXIoOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsZnVuY3Rpb24gekQoYyxsKXtHNChjLGwsbFtWb10sMixudWxsLG51bGwpfSh0aGlzLl9sVmlld1tCaV0s''@;'; put 'put ''dGhpcy5fbFZpZXcpfWF0dGFjaFRvQXBwUmVmKGwpe2lmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXRocm93IG5ldyBBcig5MDIsITEpO3RoaXMuX2FwcFJlZj1sfX1jbGFzcyBjTCBleHRlbmRzIGQ1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuX3ZpZXc9bH1kZXRlY3RD''@;'; put 'put ''aGFuZ2VzKCl7Y29uc3QgbD10aGlzLl92aWV3O3g2KGxbQmldLGwsbFtWYV0sITEpfWNoZWNrTm9DaGFuZ2VzKCl7fWdldCBjb250ZXh0KCl7cmV0dXJuIG51bGx9fWNsYXNzIFdTIGV4dGVuZHMgSzB7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPWx9cmVzb2x2ZUNvbXBv''@;'; put 'put ''bmVudEZhY3RvcnkobCl7Y29uc3QgYT1RbyhsKTtyZXR1cm4gbmV3IGg1KGEsdGhpcy5uZ01vZHVsZSl9fWZ1bmN0aW9uIEdTKGMpe2NvbnN0IGw9W107Zm9yKGxldCBhIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShhKSYmbC5wdXNoKHtwcm9wTmFtZTpjW2FdLHRlbXBsYXRlTmFtZTphfSk7cmV0''@;'; put 'put ''dXJuIGx9Y2xhc3MgZEx7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1hMChkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsd3YsZCk7cmV0dXJuIGghPT13dnx8YT09PXd2P2g6dGhpcy5wYXJlbnRJbmplY3Rv''@;'; put 'put ''ci5nZXQobCxhLGQpfX1jbGFzcyBoNSBleHRlbmRzIGxTe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD1HUyhsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgucHJvcE5hbWUp''@;'; put 'put ''JiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gR1ModGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMuY29tcG9uZW50''@;'; put 'put ''VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiBlOShjKXtyZXR1cm4gYy5tYXAoYW0pLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMuaXNCb3VuZFRv''@;'; put 'put ''TW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7bGV0IGY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIHEwP2g6aD8uaW5qZWN0b3I7ZiYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKGY9dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9u''@;'; put 'put ''ZUluamVjdG9yKGYpfHxmKTtjb25zdCBfPWY/bmV3IGRMKGwsZik6bCxUPV8uZ2V0KFkzLG51bGwpO2lmKG51bGw9PT1UKXRocm93IG5ldyBBcig0MDcsITEpO2NvbnN0IGdlPXtyZW5kZXJlckZhY3Rvcnk6VCxzYW5pdGl6ZXI6Xy5nZXQocDYsbnVsbCksZWZmZWN0TWFuYWdlcjpfLmdldChq''@;'; put 'put ''UyxudWxsKX0sd2U9VC5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxFZT10aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLFplPWQ/ZnVuY3Rpb24gQVMoYyxsLGEsZCl7Y29uc3QgZj1kLmdldChNdiwhMSl8fGE9PT1PYy5TaGFkb3dEb20sXz1j''@;'; put 'put ''LnNlbGVjdFJvb3RFbGVtZW50KGwsZik7cmV0dXJuIGZ1bmN0aW9uIE5JKGMpe0x2KGMpfShfKSxffSh3ZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sXyk6cW0od2UsRWUsZnVuY3Rpb24gdUwoYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJz''@;'; put 'put ''dmciOiJtYXRoIj09PWw/Im1hdGgiOm51bGx9KEVlKSkseXQ9dGhpcy5jb21wb25lbnREZWYuc2lnbmFscz80NjA4OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaD81NzY6NTI4LGt0PSQzKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksU3Q9YjYobnVsbCxr''@;'; put 'put ''dCxudWxsLHl0LG51bGwsbnVsbCxnZSx3ZSxfLG51bGwsbnVsbCk7bGV0IFF0LG5uO0M5KFN0KTt0cnl7Y29uc3QgbW49dGhpcy5jb21wb25lbnREZWY7bGV0IEVuLGxyPW51bGw7bW4uZmluZEhvc3REaXJlY3RpdmVEZWZzPyhFbj1bXSxscj1uZXcgTWFwLG1uLmZpbmRIb3N0RGlyZWN0aXZl''@;'; put 'put ''RGVmcyhtbixFbixsciksRW4ucHVzaChtbikpOkVuPVttbl07Y29uc3QgVnI9ZnVuY3Rpb24gJFMoYyxsKXtjb25zdCBhPWNbQmldLGQ9cHM7cmV0dXJuIGNbZF09bCxHMyhhLGQsMiwiI2hvc3QiLG51bGwpfShTdCxaZSksX2k9ZnVuY3Rpb24gZkwoYyxsLGEsZCxoLGYsXyl7Y29uc3QgVD1o''@;'; put 'put ''W0JpXTshZnVuY3Rpb24gcEwoYyxsLGEsZCl7Zm9yKGNvbnN0IGggb2YgYylsLm1lcmdlZEF0dHJzPVloKGwubWVyZ2VkQXR0cnMsaC5ob3N0QXR0cnMpO251bGwhPT1sLm1lcmdlZEF0dHJzJiYoTTYobCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09YSYmUkMoZCxhLGwpKX0oZCxjLGwsXyk7''@;'; put 'put ''bGV0IFc9bnVsbDtudWxsIT09bCYmKFc9aVMobCxoW0xkXSkpO2NvbnN0IGllPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IGdlPTE2O2Euc2lnbmFscz9nZT00MDk2OmEub25QdXNoJiYoZ2U9NjQpO2NvbnN0IHdlPWI2KGgsRVMoYSksbnVsbCxnZSxoW2MuaW5k''@;'; put 'put ''ZXhdLGMsZixpZSxudWxsLG51bGwsVyk7cmV0dXJuIFQuZmlyc3RDcmVhdGVQYXNzJiZPdihULGMsZC5sZW5ndGgtMSksUzYoaCx3ZSksaFtjLmluZGV4XT13ZX0oVnIsWmUsbW4sRW4sU3QsZ2Usd2UpO25uPWtlKGt0LHBzKSxaZSYmZnVuY3Rpb24gbUwoYyxsLGEsZCl7aWYoZClEZChjLGEs''@;'; put 'put ''WyJuZy12ZXJzaW9uIixBSS5mdWxsXSk7ZWxzZXtjb25zdHthdHRyczpoLGNsYXNzZXM6Zn09ZnVuY3Rpb24gXzQoYyl7Y29uc3QgbD1bXSxhPVtdO2xldCBkPTEsaD0yO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZF07aWYoInN0cmluZyI9PXR5cGVvZiBmKTI9PT1oPyIiIT09ZiYmbC5w''@;'; put 'put ''dXNoKGYsY1srK2RdKTo4PT09aCYmYS5wdXNoKGYpO2Vsc2V7aWYoIUZjKGgpKWJyZWFrO2g9Zn1kKyt9cmV0dXJue2F0dHJzOmwsY2xhc3NlczphfX0obC5zZWxlY3RvcnNbMF0pO2gmJkRkKGMsYSxoKSxmJiZmLmxlbmd0aD4wJiZMQyhjLGEsZi5qb2luKCIgIikpfX0od2UsbW4sWmUsZCks''@;'; put 'put ''dm9pZCAwIT09YSYmZnVuY3Rpb24gdkwoYyxsLGEpe2NvbnN0IGQ9Yy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07ZC5wdXNoKG51bGwhPWY/QXJyYXkuZnJvbShmKTpudWxsKX19KG5uLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGEpLFF0''@;'; put 'put ''PWZ1bmN0aW9uIGdMKGMsbCxhLGQsaCxmKXtjb25zdCBfPVNjKCksVD1oW0JpXSxXPUhsKF8saCk7YzUoVCxoLF8sYSxudWxsLGQpO2ZvcihsZXQgZ2U9MDtnZTxhLmxlbmd0aDtnZSsrKVZjKFFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K2dlLF8pLGgpO0xTKFQsaCxfKSxXJiZWYyhXLGgpO2Nv''@;'; put 'put ''bnN0IGllPVFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K18uY29tcG9uZW50T2Zmc2V0LF8pO2lmKGNbVmFdPWhbVmFdPWllLG51bGwhPT1mKWZvcihjb25zdCBnZSBvZiBmKWdlKGllLGwpO3JldHVybiBEdihULF8sYyksaWV9KF9pLG1uLEVuLGxyLFN0LFtfTF0pLE52KGt0LFN0LG51bGwpfWZp''@;'; put 'put ''bmFsbHl7TW0oKX1yZXR1cm4gbmV3IGhMKHRoaXMuY29tcG9uZW50VHlwZSxRdCxZZChubixTdCksU3Qsbm4pfX1jbGFzcyBoTCBleHRlbmRzIGFTe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhpcy5fdE5vZGU9Zix0''@;'; put 'put ''aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBjTChoKSx0aGlzLmNvbXBvbmVudFR5cGU9bH1zZXRJbnB1dChsLGEpe2NvbnN0IGQ9dGhpcy5fdE5vZGUuaW5wdXRzO2xldCBoO2lmKG51''@;'; put 'put ''bGwhPT1kJiYoaD1kW2xdKSl7aWYodGhpcy5wcmV2aW91c0lucHV0VmFsdWVzPz89bmV3IE1hcCx0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuaGFzKGwpJiZPYmplY3QuaXModGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmdldChsKSxhKSlyZXR1cm47Y29uc3QgZj10aGlzLl9yb290TFZpZXc7''@;'; put 'put ''SHYoZltCaV0sZixoLGwsYSksdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLnNldChsLGEpLGE1KG10KHRoaXMuX3ROb2RlLmluZGV4LGYpKX19Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyB4Myh0aGlzLl90Tm9kZSx0aGlzLl9yb290TFZpZXcpfWRlc3Ryb3koKXt0aGlzLmhvc3RWaWV3LmRl''@;'; put 'put ''c3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5ob3N0Vmlldy5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIF9MKCl7Y29uc3QgYz1TYygpO0VtKFhyKClbQmldLGMpfWZ1bmN0aW9uIGVvKGMpe2xldCBsPWZ1bmN0aW9uIHFTKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5''@;'; put 'put ''cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoUWMoYykpaD1sLlx1MDI3NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0aHJvdyBuZXcgQXIoOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVz''@;'; put 'put ''aChoKTtjb25zdCBfPWM7Xy5pbnB1dHM9RTYoYy5pbnB1dHMpLF8uaW5wdXRUcmFuc2Zvcm1zPUU2KGMuaW5wdXRUcmFuc2Zvcm1zKSxfLmRlY2xhcmVkSW5wdXRzPUU2KGMuZGVjbGFyZWRJbnB1dHMpLF8ub3V0cHV0cz1FNihjLm91dHB1dHMpO2NvbnN0IFQ9aC5ob3N0QmluZGluZ3M7VCYm''@;'; put 'put ''d0woYyxUKTtjb25zdCBXPWgudmlld1F1ZXJ5LGllPWguY29udGVudFF1ZXJpZXM7aWYoVyYmYkwoYyxXKSxpZSYmeUwoYyxpZSksbjAoYy5pbnB1dHMsaC5pbnB1dHMpLG4wKGMuZGVjbGFyZWRJbnB1dHMsaC5kZWNsYXJlZElucHV0cyksbjAoYy5vdXRwdXRzLGgub3V0cHV0cyksbnVsbCE9''@;'; put 'put ''PWguaW5wdXRUcmFuc2Zvcm1zJiYobnVsbD09PV8uaW5wdXRUcmFuc2Zvcm1zJiYoXy5pbnB1dFRyYW5zZm9ybXM9e30pLG4wKF8uaW5wdXRUcmFuc2Zvcm1zLGguaW5wdXRUcmFuc2Zvcm1zKSksUWMoaCkmJmguZGF0YS5hbmltYXRpb24pe2NvbnN0IGdlPWMuZGF0YTtnZS5hbmltYXRpb249''@;'; put 'put ''KGdlLmFuaW1hdGlvbnx8W10pLmNvbmNhdChoLmRhdGEuYW5pbWF0aW9uKX19Y29uc3QgZj1oLmZlYXR1cmVzO2lmKGYpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZltfXTtUJiZULm5nSW5oZXJpdCYmVChjKSxUPT09ZW8mJihhPSExKX19bD1PYmplY3QuZ2V0UHJvdG90''@;'; put 'put ''eXBlT2YobCl9IWZ1bmN0aW9uIFZ2KGMpe2xldCBsPTAsYT1udWxsO2ZvcihsZXQgZD1jLmxlbmd0aC0xO2Q+PTA7ZC0tKXtjb25zdCBoPWNbZF07aC5ob3N0VmFycz1sKz1oLmhvc3RWYXJzLGguaG9zdEF0dHJzPVloKGguaG9zdEF0dHJzLGE9WWgoYSxoLmhvc3RBdHRycykpfX0oZCl9ZnVu''@;'; put 'put ''Y3Rpb24gRTYoYyl7cmV0dXJuIGM9PT1YYz97fTpjPT09U3M/W106Y31mdW5jdGlvbiBiTChjLGwpe2NvbnN0IGE9Yy52aWV3UXVlcnk7Yy52aWV3UXVlcnk9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24geUwoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXM7Yy5jb250''@;'; put 'put ''ZW50UXVlcmllcz1hPyhkLGgsZik9PntsKGQsaCxmKSxhKGQsaCxmKX06bH1mdW5jdGlvbiB3TChjLGwpe2NvbnN0IGE9Yy5ob3N0QmluZGluZ3M7Yy5ob3N0QmluZGluZ3M9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24gUVMoYyl7Y29uc3QgbD1jLmlucHV0Q29uZmlnLGE9''@;'; put 'put ''e307Zm9yKGNvbnN0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07QXJyYXkuaXNBcnJheShoKSYmaFsyXSYmKGFbZF09aFsyXSl9Yy5pbnB1dFRyYW5zZm9ybXM9YX1mdW5jdGlvbiBrNihjKXtyZXR1cm4hIUE2KGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShj''@;'; put 'put ''IGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIEE2KGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1bmN0aW9uIHExKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIEJjKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIGdmKGMsbCxhLGQpe2NvbnN0IGg9QmMoYyxsLGEpO3JldHVybiBCYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBUNihjLGwsYSxkLGgpe2NvbnN0IGY9Z2YoYyxsLGEsZCk7cmV0dXJuIEJjKGMsbCsyLGgpfHxm''@;'; put 'put ''fWZ1bmN0aW9uIG0wKGMsbCxhLGQsaCxmKXtjb25zdCBfPWdmKGMsbCxhLGQpO3JldHVybiBnZihjLGwrMixoLGYpfHxffWZ1bmN0aW9uIFRyKGMsbCxhLGQpe2NvbnN0IGg9WHIoKTtyZXR1cm4gQmMoaCxDMygpLGwpJiYoVHMoKSwkMShRYSgpLGgsYyxsLGEsZCkpLFRyfWZ1bmN0aW9uIEsz''@;'; put 'put ''KGMsbCxhLGQpe3JldHVybiBCYyhjLEMzKCksYSk/bCtrbyhhKStkOlpvfWZ1bmN0aW9uIFFlKGMsbCxhLGQsaCxmLF8sVCl7Y29uc3QgVz1YcigpLGllPVRzKCksZ2U9Yytwcyx3ZT1pZS5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gV0woYyxsLGEsZCxoLGYsXyxULFcpe2NvbnN0IGllPWwu''@;'; put 'put ''Y29uc3RzLGdlPUczKGwsYyw0LF98fG51bGwsRHIoaWUsVCkpO1J2KGwsYSxnZSxEcihpZSxXKSksRW0obCxnZSk7Y29uc3Qgd2U9Z2UudFZpZXc9JDMoMixnZSxkLGgsZixsLmRpcmVjdGl2ZVJlZ2lzdHJ5LGwucGlwZVJlZ2lzdHJ5LG51bGwsbC5zY2hlbWFzLGllLG51bGwpO3JldHVybiBu''@;'; put 'put ''dWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwsZ2UpLHdlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcoZ2UpKSxnZX0oZ2UsaWUsVyxsLGEsZCxoLGYsXyk6aWUuZGF0YVtnZV07TjEod2UsITEpO2NvbnN0IEVlPXF2KGllLFcsd2UsYyk7eG0oKSYmZTYoaWUs''@;'; put 'put ''VyxFZSx3ZSksVmMoRWUsVyksUzYoVyxXW2dlXT1PUyhFZSxXLEVlLHdlKSkscWgod2UpJiZJdihpZSxXLHdlKSxudWxsIT1fJiZ5NihXLHdlLFQpfWxldCBxdj1mdW5jdGlvbiBLdihjLGwsYSxkKXtyZXR1cm4gVmQoITApLGxbVm9dLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiAkaShj''@;'; put 'put ''KXtyZXR1cm4gJGUoZnVuY3Rpb24gJFQoKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlld30oKSxwcytjKX1mdW5jdGlvbiBSZShjLGwsYSl7Y29uc3QgZD1YcigpO3JldHVybiBCYyhkLEMzKCksbCkmJlB1KFRzKCksUWEoKSxkLGMsbCxkW1ZvXSxhLCExKSxSZX1mdW5jdGlvbiBYdihj''@;'; put 'put ''LGwsYSxkLGgpe2NvbnN0IF89aD8iY2xhc3MiOiJzdHlsZSI7SHYoYyxhLGwuaW5wdXRzW19dLF8sZCl9ZnVuY3Rpb24gbWUoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPXBzK2MsVD1oW1ZvXSxXPWYuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIGNNKGMsbCxhLGQsaCxmKXtjb25z''@;'; put 'put ''dCBfPWwuY29uc3RzLFc9RzMobCxjLDIsZCxEcihfLGgpKTtyZXR1cm4gUnYobCxhLFcsRHIoXyxmKSksbnVsbCE9PVcuYXR0cnMmJk02KFcsVy5hdHRycywhMSksbnVsbCE9PVcubWVyZ2VkQXR0cnMmJk02KFcsVy5tZXJnZWRBdHRycywhMCksbnVsbCE9PWwucXVlcmllcyYmbC5xdWVyaWVz''@;'; put 'put ''LmVsZW1lbnRTdGFydChsLFcpLFd9KF8sZixoLGwsYSxkKTpmLmRhdGFbX10saWU9dU0oZixoLFcsVCxsLGMpO2hbX109aWU7Y29uc3QgZ2U9cWgoVyk7cmV0dXJuIE4xKFcsITApLFJDKFQsaWUsVyksMzIhPSgzMiZXLmZsYWdzKSYmeG0oKSYmZTYoZixoLGllLFcpLDA9PT1mdW5jdGlvbiBC''@;'; put 'put ''VCgpe3JldHVybiBQby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnR9KCkmJlZjKGllLGgpLGZ1bmN0aW9uIGpUKCl7UG8ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCksZ2UmJihJdihmLGgsVyksRHYoZixXLGgpKSxudWxsIT09ZCYmeTYoaCxXKSxtZX1mdW5jdGlvbiB5ZSgpe2xldCBj''@;'; put 'put ''PVNjKCk7XzkoKT9DbSgpOihjPWMucGFyZW50LE4xKGMsITEpKTtjb25zdCBsPWM7KGZ1bmN0aW9uIFVUKGMpe3JldHVybiBQby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPT09Y30pKGwpJiZmdW5jdGlvbiBHVCgpe1BvLnNraXBIeWRyYXRpb25Sb290VE5vZGU9bnVsbH0oKSxmdW5jdGlvbiB6''@;'; put 'put ''VCgpe1BvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSgpO2NvbnN0IGE9VHMoKTtyZXR1cm4gYS5maXJzdENyZWF0ZVBhc3MmJihFbShhLGMpLE9kKGMpJiZhLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksbnVsbCE9bC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIHNEKGMpe3JldHVy''@;'; put 'put ''biAwIT0oOCZjLmZsYWdzKX0obCkmJlh2KGEsbCxYcigpLGwuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxsIT1sLnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBhRChjKXtyZXR1cm4gMCE9KDE2JmMuZmxhZ3MpfShsKSYmWHYoYSxsLFhyKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSks''@;'; put 'put ''eWV9ZnVuY3Rpb24gcXQoYyxsLGEsZCl7cmV0dXJuIG1lKGMsbCxhLGQpLHllKCkscXR9bGV0IHVNPShjLGwsYSxkLGgsZik9PihWZCghMCkscW0oZCxoLGZ1bmN0aW9uIFd3KCl7cmV0dXJuIFBvLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSgpKSk7ZnVuY3Rpb24genIoYyxsLGEpe2NvbnN0''@;'; put 'put ''IGQ9WHIoKSxoPVRzKCksZj1jK3BzLF89aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gSnYoYyxsLGEsZCxoKXtjb25zdCBmPWwuY29uc3RzLF89RHIoZixkKSxUPUczKGwsYyw4LCJuZy1jb250YWluZXIiLF8pO3JldHVybiBudWxsIT09XyYmTTYoVCxfLCEwKSxSdihsLGEsVCxEcihmLGgp''@;'; put 'put ''KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsVCksVH0oZixoLGQsbCxhKTpoLmRhdGFbZl07TjEoXywhMCk7Y29uc3QgVD1oTShoLGQsXyxjKTtyZXR1cm4gZFtmXT1ULHhtKCkmJmU2KGgsZCxULF8pLFZjKFQsZCkscWgoXykmJihJdihoLGQsXyksRHYoaCxf''@;'; put 'put ''LGQpKSxudWxsIT1hJiZ5NihkLF8pLHpyfWZ1bmN0aW9uIFlyKCl7bGV0IGM9U2MoKTtjb25zdCBsPVRzKCk7cmV0dXJuIF85KCk/Q20oKTooYz1jLnBhcmVudCxOMShjLCExKSksbC5maXJzdENyZWF0ZVBhc3MmJihFbShsLGMpLE9kKGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksWXJ9''@;'; put 'put ''ZnVuY3Rpb24gamEoYyxsLGEpe3JldHVybiB6cihjLGwsYSksWXIoKSxqYX1sZXQgaE09KGMsbCxhLGQpPT4oVmQoITApLHo5KGxbVm9dLCIiKSk7ZnVuY3Rpb24gVm4oKXtyZXR1cm4gWHIoKX1mdW5jdGlvbiB2NShjKXtyZXR1cm4hIWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59ZnVu''@;'; put 'put ''Y3Rpb24gZk0oYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9ZnVuY3Rpb24geHQoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPVNjKCk7cmV0dXJuIHBNKGYsaCxoW1ZvXSxfLGMsbCxkKSx4dH1mdW5jdGlvbiBRdihjLGwpe2NvbnN0IGE9U2MoKSxk''@;'; put 'put ''PVhyKCksaD1UcygpO3JldHVybiBwTShoLGQsTlMoeTkoaC5kYXRhKSxhLGQpLGEsYyxsKSxRdn1mdW5jdGlvbiBwTShjLGwsYSxkLGgsZixfKXtjb25zdCBUPXFoKGQpLGllPWMuZmlyc3RDcmVhdGVQYXNzJiZIUyhjKSxnZT1sW1ZhXSx3ZT1GUyhsKTtsZXQgRWU9ITA7aWYoMyZkLnR5cGV8''@;'; put 'put ''fF8pe2NvbnN0IGV0PUhsKGQsbCkseXQ9Xz9fKGV0KTpldCxrdD13ZS5sZW5ndGgsU3Q9Xz9ubj0+XyhfYShubltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IFF0PW51bGw7aWYoIV8mJlQmJihRdD1mdW5jdGlvbiBYTChjLGwsYSxkKXtjb25zdCBoPWMuY2xlYW51cDtpZihudWxsIT1oKWZvcihs''@;'; put 'put ''ZXQgZj0wO2Y8aC5sZW5ndGgtMTtmKz0yKXtjb25zdCBfPWhbZl07aWYoXz09PWEmJmhbZisxXT09PWQpe2NvbnN0IFQ9bFtUdV0sVz1oW2YrMl07cmV0dXJuIFQubGVuZ3RoPlc/VFtXXTpudWxsfSJzdHJpbmciPT10eXBlb2YgXyYmKGYrPTIpfXJldHVybiBudWxsfShjLGwsaCxkLmluZGV4''@;'; put 'put ''KSksbnVsbCE9PVF0KShRdC5fX25nTGFzdExpc3RlbmVyRm5fX3x8UXQpLl9fbmdOZXh0TGlzdGVuZXJGbl9fPWYsUXQuX19uZ0xhc3RMaXN0ZW5lckZuX189ZixFZT0hMTtlbHNle2Y9bU0oZCxsLGdlLGYsITEpO2NvbnN0IG5uPWEubGlzdGVuKHl0LGgsZik7d2UucHVzaChmLG5uKSxpZSYm''@;'; put 'put ''aWUucHVzaChoLFN0LGt0LGt0KzEpfX1lbHNlIGY9bU0oZCxsLGdlLGYsITEpO2NvbnN0IFplPWQub3V0cHV0cztsZXQgb3Q7aWYoRWUmJm51bGwhPT1aZSYmKG90PVplW2hdKSl7Y29uc3QgZXQ9b3QubGVuZ3RoO2lmKGV0KWZvcihsZXQgeXQ9MDt5dDxldDt5dCs9Mil7Y29uc3QgbW49bFtv''@;'; put 'put ''dFt5dF1dW290W3l0KzFdXS5zdWJzY3JpYmUoZiksRW49d2UubGVuZ3RoO3dlLnB1c2goZixtbiksaWUmJmllLnB1c2goaCxkLmluZGV4LEVuLC0oRW4rMSkpfX19ZnVuY3Rpb24gZ00oYyxsLGEsZCl7dHJ5e3JldHVybiBoMCg2LGwsYSksITEhPT1hKGQpfWNhdGNoKGgpe3JldHVybiBWUyhj''@;'; put 'put ''LGgpLCExfWZpbmFsbHl7aDAoNyxsLGEpfX1mdW5jdGlvbiBtTShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKF8pe2lmKF89PT1GdW5jdGlvbilyZXR1cm4gZDthNShjLmNvbXBvbmVudE9mZnNldD4tMT9tdChjLmluZGV4LGwpOmwpO2xldCBXPWdNKGwsYSxkLF8pLGllPWYuX19uZ05l''@;'; put 'put ''eHRMaXN0ZW5lckZuX187Zm9yKDtpZTspVz1nTShsLGEsaWUsXykmJlcsaWU9aWUuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09VyYmXy5wcmV2ZW50RGVmYXVsdCgpLFd9fWZ1bmN0aW9uIGplKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIFhUKGMpe3JldHVybihQby5sRnJhbWUu''@;'; put 'put ''Y29udGV4dExWaWV3PWZ1bmN0aW9uIEpUKGMsbCl7Zm9yKDtjPjA7KWw9bFtPbF0sYy0tO3JldHVybiBsfShjLFBvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtWYV19KGMpfWZ1bmN0aW9uIEpMKGMsbCl7bGV0IGE9bnVsbDtjb25zdCBkPWZ1bmN0aW9uIFdoKGMpe2NvbnN0IGw9Yy5hdHRycztp''@;'; put 'put ''ZihudWxsIT1sKXtjb25zdCBhPWwuaW5kZXhPZig1KTtpZighKDEmYSkpcmV0dXJuIGxbYSsxXX1yZXR1cm4gbnVsbH0oYyk7Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKyspe2NvbnN0IGY9bFtoXTtpZigiKiIhPT1mKXtpZihudWxsPT09ZD9tNChjLGYsITApOnY0KGQsZikpcmV0dXJuIGh9''@;'; put 'put ''ZWxzZSBhPWh9cmV0dXJuIGF9ZnVuY3Rpb24gVGkoYyl7Y29uc3QgbD1YcigpW0phXVt6b107aWYoIWwucHJvamVjdGlvbil7Y29uc3QgZD1sLnByb2plY3Rpb249QmQoYz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IF89''@;'; put 'put ''Yz9KTChmLGMpOjA7bnVsbCE9PV8mJihoW19dP2hbX10ucHJvamVjdGlvbk5leHQ9ZjpkW19dPWYsaFtfXT1mKSxmPWYubmV4dH19fWZ1bmN0aW9uIGtyKGMsbD0wLGEpe2NvbnN0IGQ9WHIoKSxoPVRzKCksZj1HMyhoLHBzK2MsMTYsbnVsbCxhfHxudWxsKTtudWxsPT09Zi5wcm9qZWN0aW9u''@;'; put 'put ''JiYoZi5wcm9qZWN0aW9uPWwpLENtKCksKCFkW3UwXXx8dzMoKSkmJjMyIT0oMzImZi5mbGFncykmJmZ1bmN0aW9uIFlEKGMsbCxhKXtXRChsW1ZvXSwwLGwsYSxGMyhjLGEsbCksVzEoYS5wYXJlbnR8fGxbem9dLGEsbCkpfShoLGQsZil9ZnVuY3Rpb24geGMoYyxsLGEpe3JldHVybiBYMihj''@;'; put 'put ''LCIiLGwsIiIsYSkseGN9ZnVuY3Rpb24gWDIoYyxsLGEsZCxoKXtjb25zdCBmPVhyKCksXz1LMyhmLGwsYSxkKTtyZXR1cm4gXyE9PVpvJiZQdShUcygpLFFhKCksZixjLF8sZltWb10saCwhMSksWDJ9ZnVuY3Rpb24gYjUoYyxsKXtyZXR1cm4gYzw8MTd8bDw8Mn1mdW5jdGlvbiBYMChjKXty''@;'; put 'put ''ZXR1cm4gYz4+MTcmMzI3Njd9ZnVuY3Rpb24gZV8oYyl7cmV0dXJuIDJ8Y31mdW5jdGlvbiBKMChjKXtyZXR1cm4oMTMxMDY4JmMpPj4yfWZ1bmN0aW9uIHRfKGMsbCl7cmV0dXJuLTEzMTA2OSZjfGw8PDJ9ZnVuY3Rpb24gbl8oYyl7cmV0dXJuIDF8Y31mdW5jdGlvbiBTTShjLGwsYSxkLGgp''@;'; put 'put ''e2NvbnN0IGY9Y1thKzFdLF89bnVsbD09PWw7bGV0IFQ9ZD9YMChmKTpKMChmKSxXPSExO2Zvcig7MCE9PVQmJighMT09PVd8fF8pOyl7Y29uc3QgZ2U9Y1tUKzFdO25SKGNbVF0sbCkmJihXPSEwLGNbVCsxXT1kP25fKGdlKTplXyhnZSkpLFQ9ZD9YMChnZSk6SjAoZ2UpfVcmJihjW2ErMV09''@;'; put 'put ''ZD9lXyhmKTpuXyhmKSl9ZnVuY3Rpb24gblIoYyxsKXtyZXR1cm4gbnVsbD09PWN8fG51bGw9PWx8fChBcnJheS5pc0FycmF5KGMpP2NbMV06Yyk9PT1sfHwhKCFBcnJheS5pc0FycmF5KGMpfHwic3RyaW5nIiE9dHlwZW9mIGwpJiZqZChjLGwpPj0wfWNvbnN0IFZsPXt0ZXh0RW5kOjAsa2V5''@;'; put 'put ''OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiBNTShjKXtyZXR1cm4gYy5zdWJzdHJpbmcoVmwua2V5LFZsLmtleUVuZCl9ZnVuY3Rpb24geE0oYyxsKXtjb25zdCBhPVZsLnRleHRFbmQ7cmV0dXJuIGE9PT1sPy0xOihsPVZsLmtleUVuZD1mdW5jdGlvbiBzUihjLGws''@;'; put 'put ''YSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChsKT4zMjspbCsrO3JldHVybiBsfShjLFZsLmtleT1sLGEpLHZmKGMsbCxhKSl9ZnVuY3Rpb24gdmYoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQobCk8PTMyOylsKys7cmV0dXJuIGx9ZnVuY3Rpb24gSHUoYyxsLGEpe3JldHVybiB2MChj''@;'; put 'put ''LGwsYSwhMSksSHV9ZnVuY3Rpb24gaHIoYyxsKXtyZXR1cm4gdjAoYyxsLG51bGwsITApLGhyfWZ1bmN0aW9uIEsxKGMsbCl7Zm9yKGxldCBhPWZ1bmN0aW9uIGlSKGMpe3JldHVybiBmdW5jdGlvbiBGdShjKXtWbC5rZXk9MCxWbC5rZXlFbmQ9MCxWbC52YWx1ZT0wLFZsLnZhbHVlRW5kPTAs''@;'; put 'put ''VmwudGV4dEVuZD1jLmxlbmd0aH0oYykseE0oYyx2ZihjLDAsVmwudGV4dEVuZCkpfShsKTthPj0wO2E9eE0obCxhKSlNYyhjLE1NKGwpLCEwKX1mdW5jdGlvbiB2MChjLGwsYSxkKXtjb25zdCBoPVhyKCksZj1UcygpLF89VjEoMik7Zi5maXJzdFVwZGF0ZVBhc3MmJlgxKGYsYyxfLGQpLGwh''@;'; put 'put ''PT1abyYmQmMoaCxfLGwpJiZsXyhmLGYuZGF0YVtldSgpXSxoLGhbVm9dLGMsaFtfKzFdPWZ1bmN0aW9uIElNKGMsbCl7cmV0dXJuIG51bGw9PWN8fCIiPT09Y3x8KCJzdHJpbmciPT10eXBlb2YgbD9jKz1sOiJvYmplY3QiPT10eXBlb2YgYyYmKGM9cWEoJDIoYykpKSksY30obCxhKSxkLF8p''@;'; put 'put ''fWZ1bmN0aW9uIFRNKGMsbCl7cmV0dXJuIGw+PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gWDEoYyxsLGEsZCl7Y29uc3QgaD1jLmRhdGE7aWYobnVsbD09PWhbYSsxXSl7Y29uc3QgZj1oW2V1KCldLF89VE0oYyxhKTtjXyhmLGQpJiZudWxsPT09bCYmIV8mJihsPSExKSxsPWZ1bmN0''@;'; put 'put ''aW9uIGxSKGMsbCxhLGQpe2NvbnN0IGg9eTkoYyk7bGV0IGY9ZD9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1oKTA9PT0oZD9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKSYmKGE9eTUoYT1hXyhudWxsLGMsbCxhLGQpLGwuYXR0cnMsZCksZj1u''@;'; put 'put ''dWxsKTtlbHNle2NvbnN0IF89bC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtpZigtMT09PV98fGNbX10hPT1oKWlmKGE9YV8oaCxjLGwsYSxkKSxudWxsPT09Zil7bGV0IFc9ZnVuY3Rpb24gY1IoYyxsLGEpe2NvbnN0IGQ9YT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzO2lmKDAhPT1K''@;'; put 'put ''MChkKSlyZXR1cm4gY1tYMChkKV19KGMsbCxkKTt2b2lkIDAhPT1XJiZBcnJheS5pc0FycmF5KFcpJiYoVz1hXyhudWxsLGMsbCxXWzFdLGQpLFc9eTUoVyxsLmF0dHJzLGQpLGZ1bmN0aW9uIHVSKGMsbCxhLGQpe2NbWDAoYT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKV09ZH0o''@;'; put 'put ''YyxsLGQsVykpfWVsc2UgZj1mdW5jdGlvbiBkUihjLGwsYSl7bGV0IGQ7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGY9MStsLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2Y8aDtmKyspZD15NShkLGNbZl0uaG9zdEF0dHJzLGEpO3JldHVybiB5NShkLGwuYXR0cnMsYSl9KGMsbCxkKX1y''@;'; put 'put ''ZXR1cm4gdm9pZCAwIT09ZiYmKGQ/bC5yZXNpZHVhbENsYXNzZXM9ZjpsLnJlc2lkdWFsU3R5bGVzPWYpLGF9KGgsZixsLGQpLGZ1bmN0aW9uIGVSKGMsbCxhLGQsaCxmKXtsZXQgXz1mP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MsVD1YMChfKSxXPUowKF8pO2NbZF09YTtsZXQg''@;'; put 'put ''Z2UsaWU9ITE7aWYoQXJyYXkuaXNBcnJheShhKT8oZ2U9YVsxXSwobnVsbD09PWdlfHxqZChhLGdlKT4wKSYmKGllPSEwKSk6Z2U9YSxoKWlmKDAhPT1XKXtjb25zdCBFZT1YMChjW1QrMV0pO2NbZCsxXT1iNShFZSxUKSwwIT09RWUmJihjW0VlKzFdPXRfKGNbRWUrMV0sZCkpLGNbVCsxXT1m''@;'; put 'put ''dW5jdGlvbiBTaShjLGwpe3JldHVybiAxMzEwNzEmY3xsPDwxN30oY1tUKzFdLGQpfWVsc2UgY1tkKzFdPWI1KFQsMCksMCE9PVQmJihjW1QrMV09dF8oY1tUKzFdLGQpKSxUPWQ7ZWxzZSBjW2QrMV09YjUoVywwKSwwPT09VD9UPWQ6Y1tXKzFdPXRfKGNbVysxXSxkKSxXPWQ7aWUmJihjW2Qr''@;'; put 'put ''MV09ZV8oY1tkKzFdKSksU00oYyxnZSxkLCEwKSxTTShjLGdlLGQsITEpLGZ1bmN0aW9uIHRSKGMsbCxhLGQsaCl7Y29uc3QgZj1oP2MucmVzaWR1YWxDbGFzc2VzOmMucmVzaWR1YWxTdHlsZXM7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBsJiZqZChmLGwpPj0wJiYoYVtkKzFdPW5fKGFb''@;'; put 'put ''ZCsxXSkpfShsLGdlLGMsZCxmKSxfPWI1KFQsVyksZj9sLmNsYXNzQmluZGluZ3M9XzpsLnN0eWxlQmluZGluZ3M9X30oaCxmLGwsYSxfLGQpfX1mdW5jdGlvbiBhXyhjLGwsYSxkLGgpe2xldCBmPW51bGw7Y29uc3QgXz1hLmRpcmVjdGl2ZUVuZDtsZXQgVD1hLmRpcmVjdGl2ZVN0eWxpbmdM''@;'; put 'put ''YXN0O2ZvcigtMT09PVQ/VD1hLmRpcmVjdGl2ZVN0YXJ0OlQrKztUPF8mJihmPWxbVF0sZD15NShkLGYuaG9zdEF0dHJzLGgpLGYhPT1jKTspVCsrO3JldHVybiBudWxsIT09YyYmKGEuZGlyZWN0aXZlU3R5bGluZ0xhc3Q9VCksZH1mdW5jdGlvbiB5NShjLGwsYSl7Y29uc3QgZD1hPzE6Mjts''@;'; put 'put ''ZXQgaD0tMTtpZihudWxsIT09bClmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrKyl7Y29uc3QgXz1sW2ZdOyJudW1iZXIiPT10eXBlb2YgXz9oPV86aD09PWQmJihBcnJheS5pc0FycmF5KGMpfHwoYz12b2lkIDA9PT1jP1tdOlsiIixjXSksTWMoYyxfLCEhYXx8bFsrK2ZdKSl9cmV0dXJuIHZv''@;'; put 'put ''aWQgMD09PWM/bnVsbDpjfWZ1bmN0aW9uIGxfKGMsbCxhLGQsaCxmLF8sVCl7aWYoISgzJmwudHlwZSkpcmV0dXJuO2NvbnN0IFc9Yy5kYXRhLGllPVdbVCsxXSxnZT1mdW5jdGlvbiBRTChjKXtyZXR1cm4gMT09KDEmYyl9KGllKT9lbChXLGwsYSxoLEowKGllKSxfKTp2b2lkIDA7SjEoZ2Up''@;'; put 'put ''fHwoSjEoZil8fGZ1bmN0aW9uIENNKGMpe3JldHVybiAyPT0oMiZjKX0oaWUpJiYoZj1lbChXLG51bGwsYSxoLFQsXykpLGZ1bmN0aW9uIElaKGMsbCxhLGQsaCl7aWYobCloP2MuYWRkQ2xhc3MoYSxkKTpjLnJlbW92ZUNsYXNzKGEsZCk7ZWxzZXtsZXQgZj0tMT09PWQuaW5kZXhPZigiLSIp''@;'; put 'put ''P3ZvaWQgMDpZMi5EYXNoQ2FzZTtudWxsPT1oP2MucmVtb3ZlU3R5bGUoYSxkLGYpOigic3RyaW5nIj09dHlwZW9mIGgmJmguZW5kc1dpdGgoIiFpbXBvcnRhbnQiKSYmKGg9aC5zbGljZSgwLC0xMCksZnw9WTIuSW1wb3J0YW50KSxjLnNldFN0eWxlKGEsZCxoLGYpKX19KGQsXyxZMChldSgp''@;'; put 'put ''LGEpLGgsZikpfWZ1bmN0aW9uIGVsKGMsbCxhLGQsaCxmKXtjb25zdCBfPW51bGw9PT1sO2xldCBUO2Zvcig7aD4wOyl7Y29uc3QgVz1jW2hdLGllPUFycmF5LmlzQXJyYXkoVyksZ2U9aWU/V1sxXTpXLHdlPW51bGw9PT1nZTtsZXQgRWU9YVtoKzFdO0VlPT09Wm8mJihFZT13ZT9Tczp2b2lk''@;'; put 'put ''IDApO2xldCBaZT13ZT90ZihFZSxkKTpnZT09PWQ/RWU6dm9pZCAwO2lmKGllJiYhSjEoWmUpJiYoWmU9dGYoVyxkKSksSjEoWmUpJiYoVD1aZSxfKSlyZXR1cm4gVDtjb25zdCBvdD1jW2grMV07aD1fP1gwKG90KTpKMChvdCl9aWYobnVsbCE9PWwpe2xldCBXPWY/bC5yZXNpZHVhbENsYXNz''@;'; put 'put ''ZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1XJiYoVD10ZihXLGQpKX1yZXR1cm4gVH1mdW5jdGlvbiBKMShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiBjXyhjLGwpe3JldHVybiAwIT0oYy5mbGFncyYobD84OjE2KSl9ZnVuY3Rpb24gTmUoYyxsPSIiKXtjb25zdCBhPVhyKCksZD1U''@;'; put 'put ''cygpLGg9YytwcyxmPWQuZmlyc3RDcmVhdGVQYXNzP0czKGQsaCwxLGwsbnVsbCk6ZC5kYXRhW2hdLF89dV8oZCxhLGYsbCxjKTthW2hdPV8seG0oKSYmZTYoZCxhLF8sZiksTjEoZiwhMSl9bGV0IHVfPShjLGwsYSxkLGgpPT4oVmQoITApLGZ1bmN0aW9uICRtKGMsbCl7cmV0dXJuIGMuY3Jl''@;'; put 'put ''YXRlVGV4dChsKX0obFtWb10sZCkpO2Z1bmN0aW9uIG9yKGMpe3JldHVybiBtcigiIixjLCIiKSxvcn1mdW5jdGlvbiBtcihjLGwsYSl7Y29uc3QgZD1YcigpLGg9SzMoZCxjLGwsYSk7cmV0dXJuIGghPT1abyYmR2QoZCxldSgpLGgpLG1yfWZ1bmN0aW9uIGpjKGMsbCxhLGQsaCl7Y29uc3Qg''@;'; put 'put ''Zj1YcigpLF89ZnVuY3Rpb24gWDMoYyxsLGEsZCxoLGYpe2NvbnN0IFQ9Z2YoYyxOZCgpLGEsaCk7cmV0dXJuIFYxKDIpLFQ/bCtrbyhhKStkK2tvKGgpK2Y6Wm99KGYsYyxsLGEsZCxoKTtyZXR1cm4gXyE9PVpvJiZHZChmLGV1KCksXyksamN9ZnVuY3Rpb24gYjAoYyxsLGEsZCxoLGYsXyl7''@;'; put 'put ''Y29uc3QgVD1YcigpLFc9ZnVuY3Rpb24gSjMoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBpZT1UNihjLE5kKCksYSxoLF8pO3JldHVybiBWMSgzKSxpZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUOlpvfShULGMsbCxhLGQsaCxmLF8pO3JldHVybiBXIT09Wm8mJkdkKFQsZXUoKSxXKSxiMH1m''@;'; put 'put ''dW5jdGlvbiB3NShjLGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9WHIoKSxnZT1mdW5jdGlvbiBRMyhjLGwsYSxkLGgsZixfLFQsVyxpZSl7Y29uc3Qgd2U9bTAoYyxOZCgpLGEsaCxfLFcpO3JldHVybiBWMSg0KSx3ZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUK2tvKFcpK2llOlpvfShp''@;'; put 'put ''ZSxjLGwsYSxkLGgsZixfLFQsVyk7cmV0dXJuIGdlIT09Wm8mJkdkKGllLGV1KCksZ2UpLHc1fWZ1bmN0aW9uIFBNKGMsbCxhKXshZnVuY3Rpb24gXzAoYyxsLGEsZCl7Y29uc3QgaD1UcygpLGY9VjEoMik7aC5maXJzdFVwZGF0ZVBhc3MmJlgxKGgsbnVsbCxmLGQpO2NvbnN0IF89WHIoKTtp''@;'; put 'put ''ZihhIT09Wm8mJkJjKF8sZixhKSl7Y29uc3QgVD1oLmRhdGFbZXUoKV07aWYoY18oVCxkKSYmIVRNKGgsZikpe2xldCBXPWQ/VC5jbGFzc2VzV2l0aG91dEhvc3Q6VC5zdHlsZXNXaXRob3V0SG9zdDtudWxsIT09VyYmKGE9dmMoVyxhfHwiIikpLFh2KGgsVCxfLGEsZCl9ZWxzZSFmdW5jdGlv''@;'; put 'put ''biBzYyhjLGwsYSxkLGgsZixfLFQpe2g9PT1abyYmKGg9U3MpO2xldCBXPTAsaWU9MCxnZT0wPGgubGVuZ3RoP2hbMF06bnVsbCx3ZT0wPGYubGVuZ3RoP2ZbMF06bnVsbDtmb3IoO251bGwhPT1nZXx8bnVsbCE9PXdlOyl7Y29uc3QgRWU9VzxoLmxlbmd0aD9oW1crMV06dm9pZCAwLFplPWll''@;'; put 'put ''PGYubGVuZ3RoP2ZbaWUrMV06dm9pZCAwO2xldCBldCxvdD1udWxsO2dlPT09d2U/KFcrPTIsaWUrPTIsRWUhPT1aZSYmKG90PXdlLGV0PVplKSk6bnVsbD09PXdlfHxudWxsIT09Z2UmJmdlPHdlPyhXKz0yLG90PWdlKTooaWUrPTIsb3Q9d2UsZXQ9WmUpLG51bGwhPT1vdCYmbF8oYyxsLGEs''@;'; put 'put ''ZCxvdCxldCxfLFQpLGdlPVc8aC5sZW5ndGg/aFtXXTpudWxsLHdlPWllPGYubGVuZ3RoP2ZbaWVdOm51bGx9fShoLFQsXyxfW1ZvXSxfW2YrMV0sX1tmKzFdPWZ1bmN0aW9uIGhSKGMsbCxhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIFNzO2NvbnN0IGQ9W10saD0kMihhKTtpZihBcnJh''@;'; put 'put ''eS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWMoZCxoW2ZdLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgaClmb3IoY29uc3QgZiBpbiBoKWguaGFzT3duUHJvcGVydHkoZikmJmMoZCxmLGhbZl0pO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGgmJmwoZCxoKTtyZXR1''@;'; put 'put ''cm4gZH0oYyxsLGEpLGQsZil9fShNYyxLMSxLMyhYcigpLGMsbCxhKSwhMCl9ZnVuY3Rpb24gdDEoYyxsLGEpe2NvbnN0IGQ9WHIoKTtyZXR1cm4gQmMoZCxDMygpLGwpJiZQdShUcygpLFFhKCksZCxjLGwsZFtWb10sYSwhMCksdDF9ZnVuY3Rpb24gUzUoYyxsLGEpe2NvbnN0IGQ9WHIoKTtp''@;'; put 'put ''ZihCYyhkLEMzKCksbCkpe2NvbnN0IGY9VHMoKSxfPVFhKCk7UHUoZixfLGQsYyxsLE5TKHk5KGYuZGF0YSksXyxkKSxhLCEwKX1yZXR1cm4gUzV9Y29uc3QgYmY9dm9pZCAwO3ZhciBINj1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLGJmXSxbWyJBTSIsIlBNIl0sYmYsYmZdLFtbIlMi''@;'; put 'put ''LCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwi''@;'; put 'put ''VGgiLCJGciIsIlNhIl1dLGJmLFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnki''@;'; put 'put ''LCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxiZixbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2Qv''@;'; put 'put ''eXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVFRUUsIE1NTU0gZCwgeSJdLFsiaDptbSBhIiwiaDptbTpzcyBhIiwiaDptbTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLGJmLCJ7MX0gJ2F0JyB7MH0iLGJmXSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJc''@;'; put 'put ''eGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIlVTRCIsIiQiLCJVUyBEb2xsYXIiLHt9LCJsdHIiLGZ1bmN0aW9uIGpNKGMpe2NvbnN0IGE9TWF0aC5mbG9vcihNYXRoLmFicyhjKSksZD1jLnRvU3Ry''@;'; put 'put ''aW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09YSYmMD09PWQ/MTo1fV07bGV0ICRkPXt9O2Z1bmN0aW9uIEJsKGMpe2NvbnN0IGw9ZnVuY3Rpb24gRVIoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9dl8o''@;'; put 'put ''bCk7aWYoYSlyZXR1cm4gYTtjb25zdCBkPWwuc3BsaXQoIi0iKVswXTtpZihhPXZfKGQpLGEpcmV0dXJuIGE7aWYoImVuIj09PWQpcmV0dXJuIEg2O3Rocm93IG5ldyBBcig3MDEsITEpfWZ1bmN0aW9uIHZfKGMpe3JldHVybiBjIGluICRkfHwoJGRbY109T2kubmcmJk9pLm5nLmNvbW1vbiYm''@;'; put 'put ''T2kubmcuY29tbW9uLmxvY2FsZXMmJk9pLm5nLmNvbW1vbi5sb2NhbGVzW2NdKSwkZFtjXX12YXIgcW89ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Mb2NhbGVJZD0wXT0iTG9jYWxlSWQiLGNbYy5EYXlQZXJpb2RzRm9ybWF0PTFdPSJEYXlQZXJpb2RzRm9ybWF0IixjW2MuRGF5UGVyaW9kc1N0''@;'; put 'put ''YW5kYWxvbmU9Ml09IkRheVBlcmlvZHNTdGFuZGFsb25lIixjW2MuRGF5c0Zvcm1hdD0zXT0iRGF5c0Zvcm1hdCIsY1tjLkRheXNTdGFuZGFsb25lPTRdPSJEYXlzU3RhbmRhbG9uZSIsY1tjLk1vbnRoc0Zvcm1hdD01XT0iTW9udGhzRm9ybWF0IixjW2MuTW9udGhzU3RhbmRhbG9uZT02XT0i''@;'; put 'put ''TW9udGhzU3RhbmRhbG9uZSIsY1tjLkVyYXM9N109IkVyYXMiLGNbYy5GaXJzdERheU9mV2Vlaz04XT0iRmlyc3REYXlPZldlZWsiLGNbYy5XZWVrZW5kUmFuZ2U9OV09IldlZWtlbmRSYW5nZSIsY1tjLkRhdGVGb3JtYXQ9MTBdPSJEYXRlRm9ybWF0IixjW2MuVGltZUZvcm1hdD0xMV09IlRp''@;'; put 'put ''bWVGb3JtYXQiLGNbYy5EYXRlVGltZUZvcm1hdD0xMl09IkRhdGVUaW1lRm9ybWF0IixjW2MuTnVtYmVyU3ltYm9scz0xM109Ik51bWJlclN5bWJvbHMiLGNbYy5OdW1iZXJGb3JtYXRzPTE0XT0iTnVtYmVyRm9ybWF0cyIsY1tjLkN1cnJlbmN5Q29kZT0xNV09IkN1cnJlbmN5Q29kZSIsY1tj''@;'; put 'put ''LkN1cnJlbmN5U3ltYm9sPTE2XT0iQ3VycmVuY3lTeW1ib2wiLGNbYy5DdXJyZW5jeU5hbWU9MTddPSJDdXJyZW5jeU5hbWUiLGNbYy5DdXJyZW5jaWVzPTE4XT0iQ3VycmVuY2llcyIsY1tjLkRpcmVjdGlvbmFsaXR5PTE5XT0iRGlyZWN0aW9uYWxpdHkiLGNbYy5QbHVyYWxDYXNlPTIwXT0i''@;'; put 'put ''UGx1cmFsQ2FzZSIsY1tjLkV4dHJhRGF0YT0yMV09IkV4dHJhRGF0YSIsY30ocW98fHt9KTtjb25zdCBpcD0iZW4tVVMiO2xldCByZT1pcDtmdW5jdGlvbiBqcihjLGwsYSxkLGgpe2lmKGM9Ym8oYyksQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKylqcihjW2Zd''@;'; put 'put ''LGwsYSxkLGgpO2Vsc2V7Y29uc3QgZj1UcygpLF89WHIoKTtsZXQgVD1sZihjKT9jOmJvKGMucHJvdmlkZSksVz1KQyhjKTtjb25zdCBpZT1TYygpLGdlPTEwNDg1NzUmaWUucHJvdmlkZXJJbmRleGVzLHdlPWllLmRpcmVjdGl2ZVN0YXJ0LEVlPWllLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYo''@;'; put 'put ''bGYoYyl8fCFjLm11bHRpKXtjb25zdCBaZT1uZXcgUjQoVyxoLHR0KSxvdD1saShULGwsaD9nZTpnZStFZSx3ZSk7LTE9PT1vdD8oQTkoSW0oaWUsXyksZixUKSxJcihmLGMsbC5sZW5ndGgpLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5w''@;'; put 'put ''cm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChaZSksXy5wdXNoKFplKSk6KGFbb3RdPVplLF9bb3RdPVplKX1lbHNle2NvbnN0IFplPWxpKFQsbCxnZStFZSx3ZSksb3Q9bGkoVCxsLGdlLGdlK0VlKSx5dD1vdD49MCYmYVtvdF07aWYoaCYmIXl0fHwhaCYmIShaZT49MCYmYVtaZV0p''@;'; put 'put ''KXtBOShJbShpZSxfKSxmLFQpO2NvbnN0IGt0PWZ1bmN0aW9uIFVvKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgUjQoYyxhLHR0KTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCx4aShmLGgsZCYmIWEpLGZ9KGg/cG86Q28sYS5sZW5ndGgsaCxkLFcp''@;'; put 'put ''OyFoJiZ5dCYmKGFbb3RdLnByb3ZpZGVyRmFjdG9yeT1rdCksSXIoZixjLGwubGVuZ3RoLDApLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChrdCksXy5wdXNoKGt0KX1lbHNlIEly''@;'; put 'put ''KGYsYyxaZT4tMT9aZTpvdCx4aShhW2g/b3Q6WmVdLFcsIWgmJmQpKTshaCYmZCYmeXQmJmFbb3RdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gSXIoYyxsLGEsZCl7Y29uc3QgaD1sZihsKSxmPWZ1bmN0aW9uIGU1KGMpe3JldHVybiEhYy51c2VDbGFzc30obCk7aWYoaHx8Zil7''@;'; put 'put ''Y29uc3QgVz0oZj9ibyhsLnVzZUNsYXNzKTpsKS5wcm90b3R5cGUubmdPbkRlc3Ryb3k7aWYoVyl7Y29uc3QgaWU9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IGdlPWllLmluZGV4T2YoYSk7LTE9PT1nZT9pZS5wdXNoKGEsW2QsV10p''@;'; put 'put ''OmllW2dlKzFdLnB1c2goZCxXKX1lbHNlIGllLnB1c2goYSxXKX19fWZ1bmN0aW9uIHhpKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBsaShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJl''@;'; put 'put ''dHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIENvKGMsbCxhLGQpe3JldHVybiBWaSh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBwbyhjLGwsYSxkKXtjb25zdCBoPXRoaXMubXVsdGk7bGV0IGY7aWYodGhpcy5wcm92aWRlckZhY3Rvcnkpe2NvbnN0IF89dGhpcy5wcm92aWRlckZhY3RvcnkuY29t''@;'; put 'put ''cG9uZW50UHJvdmlkZXJzLFQ9UWgoYSxhW0JpXSx0aGlzLnByb3ZpZGVyRmFjdG9yeS5pbmRleCxkKTtmPVQuc2xpY2UoMCxfKSxWaShoLGYpO2ZvcihsZXQgVz1fO1c8VC5sZW5ndGg7VysrKWYucHVzaChUW1ddKX1lbHNlIGY9W10sVmkoaCxmKTtyZXR1cm4gZn1mdW5jdGlvbiBWaShjLGwp''@;'; put 'put ''e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKWwucHVzaCgoMCxjW2FdKSgpKTtyZXR1cm4gbH1mdW5jdGlvbiB0aShjLGw9W10pe3JldHVybiBhPT57YS5wcm92aWRlcnNSZXNvbHZlcj0oZCxoKT0+ZnVuY3Rpb24gYnIoYyxsLGEpe2NvbnN0IGQ9VHMoKTtpZihkLmZpcnN0Q3JlYXRlUGFz''@;'; put 'put ''cyl7Y29uc3QgaD1RYyhjKTtqcihhLGQuZGF0YSxkLmJsdWVwcmludCxoLCEwKSxqcihsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWNsYXNzIHpse31jbGFzcyBsY3t9Y2xhc3Mgd2YgZXh0ZW5kcyB6bHtjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlz''@;'; put 'put ''Ll9wYXJlbnQ9YSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVtdLHRoaXMuZGVzdHJveUNicz1bXSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgV1ModGhpcyk7Y29uc3QgaD1IYyhsKTt0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVdkKGguYm9vdHN0cmFwKSx0aGlzLl9y''@;'; put 'put ''M0luamVjdG9yPUF2KGwsYSxbe3Byb3ZpZGU6emwsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6SzAsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9LC4uLmRdLHFhKGwpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0''@;'; put 'put ''b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KGwpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuX3IzSW5qZWN0b3I7IWwuZGVzdHJveWVkJiZsLmRlc3Ryb3koKSx0aGlzLmRlc3Ry''@;'; put 'put ''b3lDYnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuZGVzdHJveUNicz1udWxsfW9uRGVzdHJveShsKXt0aGlzLmRlc3Ryb3lDYnMucHVzaChsKX19Y2xhc3MgcWQgZXh0ZW5kcyBsY3tjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT1sfWNyZWF0ZShsKXtyZXR1cm4gbmV3IHdm''@;'; put 'put ''KHRoaXMubW9kdWxlVHlwZSxsLFtdKX19Y2xhc3MgUTEgZXh0ZW5kcyB6bHtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBXUyh0aGlzKSx0aGlzLmluc3RhbmNlPW51bGw7Y29uc3QgYT1uZXcgbHYoWy4uLmwucHJvdmlkZXJzLHtwcm92''@;'; put 'put ''aWRlOnpsLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOkswLHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfV0sbC5wYXJlbnR8fHM2KCksbC5kZWJ1Z05hbWUsbmV3IFNldChbImVudmlyb25tZW50Il0pKTt0aGlzLmluamVjdG9yPWEsbC5ydW5FbnZpcm9ubWVudEluaXRp''@;'; put 'put ''YWxpemVycyYmYS5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKX1kZXN0cm95KCl7dGhpcy5pbmplY3Rvci5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaW5qZWN0b3Iub25EZXN0cm95KGwpfX1mdW5jdGlvbiBBUihjLGwsYT1udWxsKXtyZXR1cm4gbmV3IFExKHtwcm92aWRlcnM6''@;'; put 'put ''YyxwYXJlbnQ6bCxkZWJ1Z05hbWU6YSxydW5FbnZpcm9ubWVudEluaXRpYWxpemVyczohMH0pLmluamVjdG9yfWxldCB4bGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFs''@;'; put 'put ''b25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPSRDKDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/QVIoW2RdLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51''@;'; put 'put ''bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlz''@;'; put 'put ''LmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIGMuXHUwMjc1cHJvdj1kcih7dG9rZW46Yyxwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IGMoYXIocTApKX0pLGN9KSgpO2Z1bmN0aW9uIHBZKGMpe2MuZ2V0U3RhbmRhbG9uZUluamVjdG9yPWw9PmwuZ2V0''@;'; put 'put ''KHhsZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoYyl9ZnVuY3Rpb24gJHMoYyxsLGEpe2NvbnN0IGQ9TmMoKStjLGg9WHIoKTtyZXR1cm4gaFtkXT09PVpvP3ExKGgsZCxhP2wuY2FsbChhKTpsKCkpOmZ1bmN0aW9uIGY1KGMsbCl7cmV0dXJuIGNbbF19KGgsZCl9ZnVuY3Rpb24g''@;'; put 'put ''SjIoYyxsLGEsZCl7cmV0dXJuIHdZKFhyKCksTmMoKSxjLGwsYSxkKX1mdW5jdGlvbiBRMihjLGwsYSxkLGgpe3JldHVybiBDWShYcigpLE5jKCksYyxsLGEsZCxoKX1mdW5jdGlvbiBiXyhjLGwsYSxkLGgsZil7cmV0dXJuIFNZKFhyKCksTmMoKSxjLGwsYSxkLGgsZil9ZnVuY3Rpb24gWU0o''@;'; put 'put ''YyxsLGEsZCxoLGYsXyl7cmV0dXJuIGZ1bmN0aW9uIE1ZKGMsbCxhLGQsaCxmLF8sVCxXKXtjb25zdCBpZT1sK2E7cmV0dXJuIG0wKGMsaWUsaCxmLF8sVCk/cTEoYyxpZSs0LFc/ZC5jYWxsKFcsaCxmLF8sVCk6ZChoLGYsXyxUKSk6eV8oYyxpZSs0KX0oWHIoKSxOYygpLGMsbCxhLGQsaCxm''@;'; put 'put ''LF8pfWZ1bmN0aW9uIHlfKGMsbCl7Y29uc3QgYT1jW2xdO3JldHVybiBhPT09Wm8/dm9pZCAwOmF9ZnVuY3Rpb24gd1koYyxsLGEsZCxoLGYpe2NvbnN0IF89bCthO3JldHVybiBCYyhjLF8saCk/cTEoYyxfKzEsZj9kLmNhbGwoZixoKTpkKGgpKTp5XyhjLF8rMSl9ZnVuY3Rpb24gQ1koYyxs''@;'; put 'put ''LGEsZCxoLGYsXyl7Y29uc3QgVD1sK2E7cmV0dXJuIGdmKGMsVCxoLGYpP3ExKGMsVCsyLF8/ZC5jYWxsKF8saCxmKTpkKGgsZikpOnlfKGMsVCsyKX1mdW5jdGlvbiBTWShjLGwsYSxkLGgsZixfLFQpe2NvbnN0IFc9bCthO3JldHVybiBUNihjLFcsaCxmLF8pP3ExKGMsVyszLFQ/ZC5jYWxs''@;'; put 'put ''KFQsaCxmLF8pOmQoaCxmLF8pKTp5XyhjLFcrMyl9ZnVuY3Rpb24gYmEoYyxsKXtjb25zdCBhPVRzKCk7bGV0IGQ7Y29uc3QgaD1jK3BzO2EuZmlyc3RDcmVhdGVQYXNzPyhkPWZ1bmN0aW9uIFZsZShjLGwpe2lmKGwpZm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0pe2NvbnN0IGQ9bFth''@;'; put 'put ''XTtpZihjPT09ZC5uYW1lKXJldHVybiBkfX0obCxhLnBpcGVSZWdpc3RyeSksYS5kYXRhW2hdPWQsZC5vbkRlc3Ryb3kmJihhLmRlc3Ryb3lIb29rcz8/PVtdKS5wdXNoKGgsZC5vbkRlc3Ryb3kpKTpkPWEuZGF0YVtoXTtjb25zdCBmPWQuZmFjdG9yeXx8KGQuZmFjdG9yeT1IMShkLnR5cGUp''@;'; put 'put ''KSxfPWRpKHR0KTt0cnl7Y29uc3QgVD1CMSghMSksVz1mKCk7cmV0dXJuIEIxKFQpLGZ1bmN0aW9uIEdMKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRhdGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9KGEsWHIoKSxoLFcpLFd9ZmluYWxseXtkaShfKX19ZnVu''@;'; put 'put ''Y3Rpb24gVWwoYyxsLGEpe2NvbnN0IGQ9YytwcyxoPVhyKCksZj0kZShoLGQpO3JldHVybiB3XyhoLGQpP3dZKGgsTmMoKSxsLGYudHJhbnNmb3JtLGEsZik6Zi50cmFuc2Zvcm0oYSl9ZnVuY3Rpb24gTTUoYyxsLGEsZCl7Y29uc3QgaD1jK3BzLGY9WHIoKSxfPSRlKGYsaCk7cmV0dXJuIHdf''@;'; put 'put ''KGYsaCk/Q1koZixOYygpLGwsXy50cmFuc2Zvcm0sYSxkLF8pOl8udHJhbnNmb3JtKGEsZCl9ZnVuY3Rpb24gRFIoYyxsLGEsZCxoKXtjb25zdCBmPWMrcHMsXz1YcigpLFQ9JGUoXyxmKTtyZXR1cm4gd18oXyxmKT9TWShfLE5jKCksbCxULnRyYW5zZm9ybSxhLGQsaCxUKTpULnRyYW5zZm9y''@;'; put 'put ''bShhLGQsaCl9ZnVuY3Rpb24gd18oYyxsKXtyZXR1cm4gY1tCaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIElSKGMpe3JldHVybiBsPT57c2V0VGltZW91dChjLHZvaWQgMCxsKX19Y29uc3QgRXI9Y2xhc3MgemxlIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLl9f''@;'; put 'put ''aXNBc3luYz1sfWVtaXQobCl7c3VwZXIubmV4dChsKX1zdWJzY3JpYmUobCxhLGQpe2xldCBoPWwsZj1hfHwoKCk9Pm51bGwpLF89ZDtpZihsJiYib2JqZWN0Ij09dHlwZW9mIGwpe2NvbnN0IFc9bDtoPVcubmV4dD8uYmluZChXKSxmPVcuZXJyb3I/LmJpbmQoVyksXz1XLmNvbXBsZXRlPy5i''@;'; put 'put ''aW5kKFcpfXRoaXMuX19pc0FzeW5jJiYoZj1JUihmKSxoJiYoaD1JUihoKSksXyYmKF89SVIoXykpKTtjb25zdCBUPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpoLGVycm9yOmYsY29tcGxldGU6X30pO3JldHVybiBsIGluc3RhbmNlb2YgZWUmJmwuYWRkKFQpLFR9fTtmdW5jdGlvbiBVbGUoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgZWh7Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEVyKX1jb25zdHJ1Y3RvcihsPSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT1sLHRoaXMuZGly''@;'; put 'put ''dHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtjb25zdCBhPWVoLnByb3RvdHlwZTthW1N5bWJvbC5pdGVyYXRvcl18fChhW1N5bWJv''@;'; put 'put ''bC5pdGVyYXRvcl09VWxlKX1nZXQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbbF19bWFwKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcChsKX1maWx0ZXIobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVyKGwpfWZpbmQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmluZChsKX1yZWR1''@;'; put 'put ''Y2UobCxhKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UobCxhKX1mb3JFYWNoKGwpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaChsKX1zb21lKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNvbWUobCl9dG9BcnJheSgpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9dG9TdHJpbmcoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfXJlc2V0KGwsYSl7Y29uc3QgZD10aGlzO2QuZGlydHk9ITE7Y29uc3QgaD1mdW5jdGlvbiBwMChjKXtyZXR1cm4gYy5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9u''@;'; put 'put ''IHoxKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShmKSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KGQuX3Jlc3VsdHMsaCxhKSkmJihkLl9yZXN1bHRz''@;'; put 'put ''PWgsZC5sZW5ndGg9aC5sZW5ndGgsZC5sYXN0PWhbdGhpcy5sZW5ndGgtMV0sZC5maXJzdD1oWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt0aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLmVt''@;'; put 'put ''aXQodGhpcyl9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwfWRlc3Ryb3koKXt0aGlzLmNoYW5nZXMuY29tcGxldGUoKSx0aGlzLmNoYW5nZXMudW5zdWJzY3JpYmUoKX19bGV0IHphPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPVdsZSxjfSkoKTtjb25zdCBabGU9''@;'; put 'put ''emEsWWxlPWNsYXNzIGV4dGVuZHMgWmxle2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2RlY2xhcmF0aW9uTFZpZXc9bCx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXI9YSx0aGlzLmVsZW1lbnRSZWY9ZH1nZXQgc3NySWQoKXtyZXR1cm4gdGhpcy5fZGVjbGFyYXRpb25UQ29u''@;'; put 'put ''dGFpbmVyLnRWaWV3Py5zc3JJZHx8bnVsbH1jcmVhdGVFbWJlZGRlZFZpZXcobCxhKXtyZXR1cm4gdGhpcy5jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSxudWxsKX1jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSxkKXtjb25zdCBfPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmll''@;'; put 'put ''dyxUPWI2KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsXyxsLDQwOTYmdGhpcy5fZGVjbGFyYXRpb25MVmlld1tEb10/NDA5NjoxNixudWxsLF8uZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLGF8fG51bGwsZHx8bnVsbCk7VFtPMl09dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJh''@;'; put 'put ''dGlvblRDb250YWluZXIuaW5kZXhdO2NvbnN0IGllPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbaHVdO3JldHVybiBudWxsIT09aWUmJihUW2h1XT1pZS5jcmVhdGVFbWJlZGRlZFZpZXcoXykpLE52KF8sVCxsKSxuZXcgZDUoVCl9fTtmdW5jdGlvbiBXbGUoKXtyZXR1cm4gV00oU2MoKSxYcigp''@;'; put 'put ''KX1mdW5jdGlvbiBXTShjLGwpe3JldHVybiA0JmMudHlwZT9uZXcgWWxlKGwsYyxZZChjLGwpKTpudWxsfWxldCBhcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5fX05HX0VMRU1FTlRfSURfXz1RbGUsY30pKCk7ZnVuY3Rpb24gUWxlKCl7cmV0dXJuIElZKFNjKCksWHIoKSl9Y29uc3QgZWNl''@;'; put 'put ''PWFzLFRZPWNsYXNzIGV4dGVuZHMgZWNle2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9bCx0aGlzLl9ob3N0VE5vZGU9YSx0aGlzLl9ob3N0TFZpZXc9ZH1nZXQgZWxlbWVudCgpe3JldHVybiBZZCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1n''@;'; put 'put ''ZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IHgzKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IGw9azkodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoS3cobCkpe2NvbnN0IGE9TTMobCx0aGlzLl9ob3N0TFZpZXcp''@;'; put 'put ''LGQ9QjIobCk7cmV0dXJuIG5ldyB4MyhhW0JpXS5kYXRhW2QrOF0sYSl9cmV0dXJuIG5ldyB4MyhudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldChsKXtjb25zdCBhPURZKHRoaXMuX2xDb250YWlu''@;'; put 'put ''ZXIpO3JldHVybiBudWxsIT09YSYmYVtsXXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLXJjfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEsZCl7bGV0IGgsZjsibnVtYmVyIj09dHlwZW9mIGQ/aD1kOm51bGwhPWQmJihoPWQuaW5kZXgsZj1kLmluamVj''@;'; put 'put ''dG9yKTtjb25zdCBUPWwuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChhfHx7fSxmLG51bGwpO3JldHVybiB0aGlzLmluc2VydEltcGwoVCxoLGZhbHNlKSxUfWNyZWF0ZUNvbXBvbmVudChsLGEsZCxoLGYpe2NvbnN0IF89bCYmIWZ1bmN0aW9uIGVmKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBjfShsKTtsZXQgVDtpZihfKVQ9YTtlbHNle2NvbnN0IGV0PWF8fHt9O1Q9ZXQuaW5kZXgsZD1ldC5pbmplY3RvcixoPWV0LnByb2plY3RhYmxlTm9kZXMsZj1ldC5lbnZpcm9ubWVudEluamVjdG9yfHxldC5uZ01vZHVsZVJlZn1jb25zdCBXPV8/bDpuZXcgaDUoUW8obCkpLGllPWR8fHRo''@;'; put 'put ''aXMucGFyZW50SW5qZWN0b3I7aWYoIWYmJm51bGw9PVcubmdNb2R1bGUpe2NvbnN0IHl0PShfP2llOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChxMCxudWxsKTt5dCYmKGY9eXQpfVFvKFcuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IFplPVcuY3JlYXRlKGllLGgsbnVsbCxmKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5pbnNlcnRJbXBsKFplLmhvc3RWaWV3LFQsZmFsc2UpLFplfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydEltcGwobCxhLCExKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3LGY9aFtCaV07aWYoZnVuY3Rpb24gVW4oYyl7cmV0dXJuIGljKGNbdWFdKX0oaCkp''@;'; put 'put ''e2NvbnN0IFc9dGhpcy5pbmRleE9mKGwpO2lmKC0xIT09Vyl0aGlzLmRldGFjaChXKTtlbHNle2NvbnN0IGllPWhbdWFdLGdlPW5ldyBUWShpZSxpZVt6b10saWVbdWFdKTtnZS5kZXRhY2goZ2UuaW5kZXhPZihsKSl9fWNvbnN0IF89dGhpcy5fYWRqdXN0SW5kZXgoYSksVD10aGlzLl9sQ29u''@;'; put 'put ''dGFpbmVyO2lmKGZ1bmN0aW9uIGRhKGMsbCxhLGQpe2NvbnN0IGg9cmMrZCxmPWEubGVuZ3RoO2Q+MCYmKGFbaC0xXVtYYV09bCksZDxmLXJjPyhsW1hhXT1hW2hdLCQwKGEscmMrZCxsKSk6KGEucHVzaChsKSxsW1hhXT1udWxsKSxsW3VhXT1hO2NvbnN0IF89bFtPMl07bnVsbCE9PV8mJmEh''@;'; put 'put ''PT1fJiZmdW5jdGlvbiBEWihjLGwpe2NvbnN0IGE9Y1tIMl07bFtKYV0hPT1sW3VhXVt1YV1bSmFdJiYoY1t1bV09ITApLG51bGw9PT1hP2NbSDJdPVtsXTphLnB1c2gobCl9KF8sbCk7Y29uc3QgVD1sW2h1XTtudWxsIT09VCYmVC5pbnNlcnRWaWV3KGMpLGxbRG9dfD0xMjh9KGYsaCxULF8p''@;'; put 'put ''LCFkKXtjb25zdCBXPVo5KF8sVCksaWU9aFtWb10sZ2U9SDMoaWUsVFtkMF0pO251bGwhPT1nZSYmZnVuY3Rpb24gakQoYyxsLGEsZCxoLGYpe2RbSGldPWgsZFt6b109bCxHNChjLGQsYSwxLGgsZil9KGYsVFt6b10saWUsaCxnZSxXKX1yZXR1cm4gbC5hdHRhY2hUb1ZpZXdDb250YWluZXJS''@;'; put 'put ''ZWYoKSwkMChSUihUKSxfLGwpLGx9bW92ZShsLGEpe3JldHVybiB0aGlzLmluc2VydChsLGEpfWluZGV4T2YobCl7Y29uc3QgYT1EWSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWE/YS5pbmRleE9mKGwpOi0xfXJlbW92ZShsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGws''@;'; put 'put ''LTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtkJiYoUG0oUlIodGhpcy5fbENvbnRhaW5lciksYSksS20oZFtCaV0sZCkpfWRldGFjaChsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGwsLTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtyZXR1cm4gZCYmbnVsbCE9UG0oUlIodGhp''@;'; put 'put ''cy5fbENvbnRhaW5lciksYSk/bmV3IGQ1KGQpOm51bGx9X2FkanVzdEluZGV4KGwsYT0wKXtyZXR1cm4gbD8/dGhpcy5sZW5ndGgrYX19O2Z1bmN0aW9uIERZKGMpe3JldHVybiBjWzhdfWZ1bmN0aW9uIFJSKGMpe3JldHVybiBjWzhdfHwoY1s4XT1bXSl9ZnVuY3Rpb24gSVkoYyxsKXtsZXQg''@;'; put 'put ''YTtjb25zdCBkPWxbYy5pbmRleF07cmV0dXJuIGljKGQpP2E9ZDooYT1PUyhkLGwsbnVsbCxjKSxsW2MuaW5kZXhdPWEsUzYobCxhKSksTFkoYSxsLGMsZCksbmV3IFRZKGEsYyxsKX1sZXQgTFk9ZnVuY3Rpb24gUlkoYyxsLGEsZCl7aWYoY1tkMF0pcmV0dXJuO2xldCBoO2g9OCZhLnR5cGU/''@;'; put 'put ''X2EoZCk6ZnVuY3Rpb24gdGNlKGMsbCl7Y29uc3QgYT1jW1ZvXSxkPWEuY3JlYXRlQ29tbWVudCgiIiksaD1IbChsLGMpO3JldHVybiBZMShhLEgzKGEsaCksZCxmdW5jdGlvbiBaRChjLGwpe3JldHVybiBjLm5leHRTaWJsaW5nKGwpfShhLGgpLCExKSxkfShsLGEpLGNbZDBdPWh9O2NsYXNz''@;'; put 'put ''IE9Se2NvbnN0cnVjdG9yKGwpe3RoaXMucXVlcnlMaXN0PWwsdGhpcy5tYXRjaGVzPW51bGx9Y2xvbmUoKXtyZXR1cm4gbmV3IE9SKHRoaXMucXVlcnlMaXN0KX1zZXREaXJ0eSgpe3RoaXMucXVlcnlMaXN0LnNldERpcnR5KCl9fWNsYXNzIFBSe2NvbnN0cnVjdG9yKGw9W10pe3RoaXMucXVl''@;'; put 'put ''cmllcz1sfWNyZWF0ZUVtYmVkZGVkVmlldyhsKXtjb25zdCBhPWwucXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1udWxsIT09bC5jb250ZW50UXVlcmllcz9sLmNvbnRlbnRRdWVyaWVzWzBdOmEubGVuZ3RoLGg9W107Zm9yKGxldCBmPTA7ZjxkO2YrKyl7Y29uc3QgXz1hLmdldEJ5SW5k''@;'; put 'put ''ZXgoZik7aC5wdXNoKHRoaXMucXVlcmllc1tfLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgUFIoaCl9cmV0dXJuIG51bGx9aW5zZXJ0VmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRldGFjaFZpZXcobCl7dGhpcy5kaXJ0eVF1ZXJp''@;'; put 'put ''ZXNXaXRoTWF0Y2hlcyhsKX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKXtmb3IobGV0IGE9MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKW51bGwhPT1OWShsLGEpLm1hdGNoZXMmJnRoaXMucXVlcmllc1thXS5zZXREaXJ0eSgpfX1jbGFzcyBPWXtjb25zdHJ1Y3RvcihsLGEsZD1udWxs''@;'; put 'put ''KXt0aGlzLnByZWRpY2F0ZT1sLHRoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZH19Y2xhc3MgRlJ7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9ZWxlbWVudFN0YXJ0KGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLnF1ZXJpZXMubGVuZ3RoO2QrKyl0aGlzLnF1ZXJpZXNbZF0uZWxlbWVu''@;'; put 'put ''dFN0YXJ0KGwsYSl9ZWxlbWVudEVuZChsKXtmb3IobGV0IGE9MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKXRoaXMucXVlcmllc1thXS5lbGVtZW50RW5kKGwpfWVtYmVkZGVkVFZpZXcobCl7bGV0IGE9bnVsbDtmb3IobGV0IGQ9MDtkPHRoaXMubGVuZ3RoO2QrKyl7Y29uc3QgaD1udWxs''@;'; put 'put ''IT09YT9hLmxlbmd0aDowLGY9dGhpcy5nZXRCeUluZGV4KGQpLmVtYmVkZGVkVFZpZXcobCxoKTtmJiYoZi5pbmRleEluRGVjbGFyYXRpb25WaWV3PWQsbnVsbCE9PWE/YS5wdXNoKGYpOmE9W2ZdKX1yZXR1cm4gbnVsbCE9PWE/bmV3IEZSKGEpOm51bGx9dGVtcGxhdGUobCxhKXtmb3IobGV0''@;'; put 'put ''IGQ9MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS50ZW1wbGF0ZShsLGEpfWdldEJ5SW5kZXgobCl7cmV0dXJuIHRoaXMucXVlcmllc1tsXX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sobCl7dGhpcy5xdWVyaWVzLnB1c2go''@;'; put 'put ''bCl9fWNsYXNzIEhSe2NvbnN0cnVjdG9yKGwsYT0tMSl7dGhpcy5tZXRhZGF0YT1sLHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0''@;'; put 'put ''aW9uTm9kZUluZGV4PWF9ZWxlbWVudFN0YXJ0KGwsYSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGEpJiZ0aGlzLm1hdGNoVE5vZGUobCxhKX1lbGVtZW50RW5kKGwpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09bC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1w''@;'; put 'put ''bGF0ZShsLGEpe3RoaXMuZWxlbWVudFN0YXJ0KGwsYSl9ZW1iZWRkZWRUVmlldyhsLGEpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUobCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtbC5pbmRleCxhKSxuZXcgSFIodGhpcy5tZXRhZGF0YSkpOm51bGx9''@;'; put 'put ''aXNBcHBseWluZ1RvTm9kZShsKXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2NvbnN0IGE9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IGQ9bC5wYXJlbnQ7Zm9yKDtudWxsIT09ZCYmOCZkLnR5cGUmJmQuaW5kZXghPT1hOylk''@;'; put 'put ''PWQucGFyZW50O3JldHVybiBhPT09KG51bGwhPT1kP2QuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKGwsYSl7Y29uc3QgZD10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KGQpKWZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7''@;'; put 'put ''aCsrKXtjb25zdCBmPWRbaF07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGljZShhLGYpKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsTG0oYSxsLGYsITEsITEpKX1lbHNlIGQ9PT16YT80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24o''@;'; put 'put ''bCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsTG0oYSxsLGQsITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09Tml8fGg9PT1hc3x8aD09''@;'; put 'put ''PXphJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEuaW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1MbShhLGwsaCwhMSwhMSk7bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRj''@;'; put 'put ''aGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1hdGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBpY2UoYyxsKXtjb25zdCBhPWMubG9jYWxOYW1lcztpZihudWxsIT09YSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrPTIpaWYoYVtkXT09PWwpcmV0dXJuIGFbZCsxXTtyZXR1cm4gbnVsbH1m''@;'; put 'put ''dW5jdGlvbiBzY2UoYyxsLGEsZCl7cmV0dXJuLTE9PT1hP2Z1bmN0aW9uIG9jZShjLGwpe3JldHVybiAxMSZjLnR5cGU/WWQoYyxsKTo0JmMudHlwZT9XTShjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIGFjZShjLGwsYSl7cmV0dXJuIGE9PT1OaT9ZZChsLGMpOmE9PT16YT9XTShs''@;'; put 'put ''LGMpOmE9PT1hcz9JWShsLGMpOnZvaWQgMH0oYyxsLGQpOlFoKGMsY1tCaV0sYSxsKX1mdW5jdGlvbiBQWShjLGwsYSxkKXtjb25zdCBoPWxbaHVdLnF1ZXJpZXNbZF07aWYobnVsbD09PWgubWF0Y2hlcyl7Y29uc3QgZj1jLmRhdGEsXz1hLm1hdGNoZXMsVD1bXTtmb3IobGV0IFc9MDtXPF8u''@;'; put 'put ''bGVuZ3RoO1crPTIpe2NvbnN0IGllPV9bV107VC5wdXNoKGllPDA/bnVsbDpzY2UobCxmW2llXSxfW1crMV0sYS5tZXRhZGF0YS5yZWFkKSl9aC5tYXRjaGVzPVR9cmV0dXJuIGgubWF0Y2hlc31mdW5jdGlvbiBOUihjLGwsYSxkKXtjb25zdCBoPWMucXVlcmllcy5nZXRCeUluZGV4KGEpLGY9''@;'; put 'put ''aC5tYXRjaGVzO2lmKG51bGwhPT1mKXtjb25zdCBfPVBZKGMsbCxoLGEpO2ZvcihsZXQgVD0wO1Q8Zi5sZW5ndGg7VCs9Mil7Y29uc3QgVz1mW1RdO2lmKFc+MClkLnB1c2goX1tULzJdKTtlbHNle2NvbnN0IGllPWZbVCsxXSxnZT1sWy1XXTtmb3IobGV0IHdlPXJjO3dlPGdlLmxlbmd0aDt3''@;'; put 'put ''ZSsrKXtjb25zdCBFZT1nZVt3ZV07RWVbTzJdPT09RWVbdWFdJiZOUihFZVtCaV0sRWUsaWUsZCl9aWYobnVsbCE9PWdlW0gyXSl7Y29uc3Qgd2U9Z2VbSDJdO2ZvcihsZXQgRWU9MDtFZTx3ZS5sZW5ndGg7RWUrKyl7Y29uc3QgWmU9d2VbRWVdO05SKFplW0JpXSxaZSxpZSxkKX19fX19cmV0''@;'; put 'put ''dXJuIGR9ZnVuY3Rpb24gc2koYyl7Y29uc3QgbD1YcigpLGE9VHMoKSxkPVZ3KCk7dzkoZCsxKTtjb25zdCBoPU5ZKGEsZCk7aWYoYy5kaXJ0eSYmZnVuY3Rpb24gTHQoYyl7cmV0dXJuIDQ9PSg0JmNbRG9dKX0obCk9PT0oMj09KDImaC5tZXRhZGF0YS5mbGFncykpKXtpZihudWxsPT09aC5t''@;'; put 'put ''YXRjaGVzKWMucmVzZXQoW10pO2Vsc2V7Y29uc3QgZj1oLmNyb3NzZXNOZ1RlbXBsYXRlP05SKGEsbCxkLFtdKTpQWShhLGwsaCxkKTtjLnJlc2V0KGYsZGYpLGMubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUm8oYyxsLGEpe2NvbnN0IGQ9VHMoKTtkLmZp''@;'; put 'put ''cnN0Q3JlYXRlUGFzcyYmKEhZKGQsbmV3IE9ZKGMsbCxhKSwtMSksMj09KDImbCkmJihkLnN0YXRpY1ZpZXdRdWVyaWVzPSEwKSksRlkoZCxYcigpLGwpfWZ1bmN0aW9uIElvKGMsbCxhLGQpe2NvbnN0IGg9VHMoKTtpZihoLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgZj1TYygpO0hZKGgsbmV3''@;'; put 'put ''IE9ZKGwsYSxkKSxmLmluZGV4KSxmdW5jdGlvbiBjY2UoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXN8fChjLmNvbnRlbnRRdWVyaWVzPVtdKTtsIT09KGEubGVuZ3RoP2FbYS5sZW5ndGgtMV06LTEpJiZhLnB1c2goYy5xdWVyaWVzLmxlbmd0aC0xLGwpfShoLGMpLDI9PSgyJmEpJiYo''@;'; put 'put ''aC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9RlkoaCxYcigpLGEpfWZ1bmN0aW9uIGFpKCl7cmV0dXJuIGZ1bmN0aW9uIGxjZShjLGwpe3JldHVybiBjW2h1XS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oWHIoKSxWdygpKX1mdW5jdGlvbiBGWShjLGwsYSl7Y29uc3QgZD1uZXcgZWgoND09KDQm''@;'; put 'put ''YSkpOyhmdW5jdGlvbiBWSShjLGwsYSxkKXtjb25zdCBoPUZTKGwpO2gucHVzaChhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmSFMoYykucHVzaChkLGgubGVuZ3RoLTEpfSkoYyxsLGQsZC5kZXN0cm95KSxudWxsPT09bFtodV0mJihsW2h1XT1uZXcgUFIpLGxbaHVdLnF1ZXJpZXMucHVzaChuZXcg''@;'; put 'put ''T1IoZCkpfWZ1bmN0aW9uIEhZKGMsbCxhKXtudWxsPT09Yy5xdWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBGUiksYy5xdWVyaWVzLnRyYWNrKG5ldyBIUihsLGEpKX1mdW5jdGlvbiBOWShjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiBFYyhjLGwpe3JldHVybiBX''@;'; put 'put ''TShjLGwpfWNvbnN0IFpSPW5ldyBNaSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKTtsZXQgWVI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29s''@;'; put 'put ''dmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJbml0cz1GaShaUix7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZih2NShm''@;'; put 'put ''KSlhLnB1c2goZik7ZWxzZSBpZihmTShmKSl7Y29uc3QgXz1uZXcgUHJvbWlzZSgoVCxXKT0+e2Yuc3Vic2NyaWJlKHtjb21wbGV0ZTpULGVycm9yOld9KX0pO2EucHVzaChfKX19Y29uc3QgZD0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07UHJvbWlzZS5hbGwoYSkudGhlbigo''@;'; put 'put ''KT0+e2QoKX0pLmNhdGNoKGg9Pnt0aGlzLnJlamVjdChoKX0pLDA9PT1hLmxlbmd0aCYmZCgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3''@;'; put 'put ''NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLHRXPSgoKT0+e2NsYXNzIGN7bG9nKGEpe2NvbnNvbGUubG9nKGEpfXdhcm4oYSl7Y29uc29sZS53YXJuKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCk7Y29uc3QgS2Q9bmV3IE1pKCJMb2NhbGVJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PkZpKEtkLG5zLk9wdGlvbmFsfG5zLlNraXBTZWxmKXx8ZnVuY3Rpb24gRGNlKCl7cmV0dXJu''@;'; put 'put ''IHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxpcH0oKX0pO2xldCAkTT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy50YXNrSWQ9MCx0aGlzLnBlbmRpbmdUYXNrcz1uZXcgU2V0LHRoaXMuaGFzUGVuZGluZ1Rhc2tzPW5ldyBUZSghMSl9YWRkKCl7dGhp''@;'; put 'put ''cy5oYXNQZW5kaW5nVGFza3MubmV4dCghMCk7Y29uc3QgYT10aGlzLnRhc2tJZCsrO3JldHVybiB0aGlzLnBlbmRpbmdUYXNrcy5hZGQoYSksYX1yZW1vdmUoYSl7dGhpcy5wZW5kaW5nVGFza3MuZGVsZXRlKGEpLDA9PT10aGlzLnBlbmRpbmdUYXNrcy5zaXplJiZ0aGlzLmhhc1BlbmRpbmdU''@;'; put 'put ''YXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIFJjZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMubmdNb2R1bGVGYWN0b3J5PWwsdGhpcy5jb21wb25lbnRGYWN0b3JpZXM9YX19bGV0IG5XPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJu''@;'; put 'put ''IG5ldyBxZChhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9V2QoSGMoYSku''@;'; put 'put ''ZGVjbGFyYXRpb25zKS5yZWR1Y2UoKF8sVCk9Pntjb25zdCBXPVFvKFQpO3JldHVybiBXJiZfLnB1c2gobmV3IGg1KFcpKSxffSxbXSk7cmV0dXJuIG5ldyBSY2UoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5j''@;'; put 'put ''b21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rv''@;'; put 'put ''cnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBvVyguLi5jKXt9Y2xhc3MgTm97Y29uc3RydWN0b3Ioe2VuYWJsZUxvbmdTdGFja1RyYWNlOmw9ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjphPSExLHNob3VsZENvYWxlc2NlUnVu''@;'; put 'put ''Q2hhbmdlRGV0ZWN0aW9uOmQ9ITF9KXtpZih0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEVyKCExKSx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEVyKCExKSx0aGlz''@;'; put 'put ''Lm9uU3RhYmxlPW5ldyBFcighMSksdGhpcy5vbkVycm9yPW5ldyBFcighMSksdHlwZW9mIFpvbmU+InUiKXRocm93IG5ldyBBcig5MDgsITEpO1pvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQoKTtjb25zdCBoPXRoaXM7aC5fbmVzdGluZz0wLGguX291dGVyPWguX2lubmVyPVpvbmUuY3VycmVudCxa''@;'; put 'put ''b25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYoaC5faW5uZXI9aC5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLGwmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKGguX2lubmVyPWguX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVj''@;'; put 'put ''KSksaC5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uPSFkJiZhLGguc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb249ZCxoLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxoLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbiBGY2UoKXtjb25z''@;'; put 'put ''dCBjPSJmdW5jdGlvbiI9PXR5cGVvZiBPaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7bGV0IGw9T2lbYz8icmVxdWVzdEFuaW1hdGlvbkZyYW1lIjoic2V0VGltZW91dCJdLGE9T2lbYz8iY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiJjbGVhclRpbWVvdXQiXTtpZih0eXBlb2YgWm9uZTwidSImJmwm''@;'; put 'put ''JmEpe2NvbnN0IGQ9bFtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZCYmKGw9ZCk7Y29uc3QgaD1hW1pvbmUuX19zeW1ib2xfXygiT3JpZ2luYWxEZWxlZ2F0ZSIpXTtoJiYoYT1oKX1yZXR1cm57bmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmwsbmF0aXZlQ2FuY2Vs''@;'; put 'put ''QW5pbWF0aW9uRnJhbWU6YX19KCkubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGZ1bmN0aW9uIFZjZShjKXtjb25zdCBsPSgpPT57IWZ1bmN0aW9uIE5jZShjKXtjLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHwtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkfHwoYy5sYXN0UmVx''@;'; put 'put ''dWVzdEFuaW1hdGlvbkZyYW1lSWQ9Yy5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChPaSwoKT0+e2MuZmFrZVRvcEV2ZW50VGFza3x8KGMuZmFrZVRvcEV2ZW50VGFzaz1ab25lLnJvb3Quc2NoZWR1bGVFdmVudFRhc2soImZha2VUb3BFdmVudFRhc2siLCgpPT57Yy5sYXN0UmVx''@;'; put 'put ''dWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsR1IoYyksYy5pc0NoZWNrU3RhYmxlUnVubmluZz0hMCxXUihjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSx2b2lkIDAsKCk9Pnt9LCgpPT57fSkpLGMuZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0pLEdSKGMpKX0oYyl9O2MuX2lubmVyPWMu''@;'; put 'put ''X2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazooYSxkLGgsZixfLFQpPT57dHJ5e3JldHVybiBzVyhjKSxhLmludm9rZVRhc2soaCxmLF8sVCl9ZmluYWxseXsoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0''@;'; put 'put ''ZWN0aW9uJiYiZXZlbnRUYXNrIj09PWYudHlwZXx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJmwoKSxhVyhjKX19LG9uSW52b2tlOihhLGQsaCxmLF8sVCxXKT0+e3RyeXtyZXR1cm4gc1coYyksYS5pbnZva2UoaCxmLF8sVCxXKX1maW5hbGx5e2Muc2hvdWxkQ29hbGVz''@;'; put 'put ''Y2VSdW5DaGFuZ2VEZXRlY3Rpb24mJmwoKSxhVyhjKX19LG9uSGFzVGFzazooYSxkLGgsZik9PnthLmhhc1Rhc2soaCxmKSxkPT09aCYmKCJtaWNyb1Rhc2siPT1mLmNoYW5nZT8oYy5faGFzUGVuZGluZ01pY3JvdGFza3M9Zi5taWNyb1Rhc2ssR1IoYyksV1IoYykpOiJtYWNyb1Rhc2siPT1m''@;'; put 'put ''LmNoYW5nZSYmKGMuaGFzUGVuZGluZ01hY3JvdGFza3M9Zi5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjooYSxkLGgsZik9PihhLmhhbmRsZUVycm9yKGgsZiksYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vbkVycm9yLmVtaXQoZikpLCExKX0pfShoKX1zdGF0aWMgaXNJbkFuZ3VsYXJa''@;'; put 'put ''b25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighTm8uaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEFyKDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5n''@;'; put 'put ''dWxhclpvbmUoKXtpZihOby5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgQXIoOTA5LCExKX1ydW4obCxhLGQpe3JldHVybiB0aGlzLl9pbm5lci5ydW4obCxhLGQpfXJ1blRhc2sobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pbm5lcixfPWYuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2''@;'; put 'put ''ZW50OiAiK2gsbCxIY2Usb1csb1cpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKF8sYSxkKX1maW5hbGx5e2YuY2FuY2VsVGFzayhfKX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9v''@;'; put 'put ''dXRlci5ydW4obCl9fWNvbnN0IEhjZT17fTtmdW5jdGlvbiBXUihjKXtpZigwPT1jLl9uZXN0aW5nJiYhYy5oYXNQZW5kaW5nTWljcm90YXNrcyYmIWMuaXNTdGFibGUpdHJ5e2MuX25lc3RpbmcrKyxjLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKGMuX25lc3Rpbmct''@;'; put 'put ''LSwhYy5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e2MuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBHUihjKXtjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tz''@;'; put 'put ''fHwoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1jLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gc1coYyl7Yy5fbmVzdGluZysrLGMuaXNTdGFibGUmJihjLmlzU3RhYmxl''@;'; put 'put ''PSExLGMub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBhVyhjKXtjLl9uZXN0aW5nLS0sV1IoYyl9Y2xhc3MgQmNle2NvbnN0cnVjdG9yKCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhp''@;'; put 'put ''cy5vblVuc3RhYmxlPW5ldyBFcix0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEVyLHRoaXMub25TdGFibGU9bmV3IEVyLHRoaXMub25FcnJvcj1uZXcgRXJ9cnVuKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bkd1YXJkZWQobCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9cnVuT3V0''@;'; put 'put ''c2lkZUFuZ3VsYXIobCl7cmV0dXJuIGwoKX1ydW5UYXNrKGwsYSxkLGgpe3JldHVybiBsLmFwcGx5KGEsZCl9fWNvbnN0IGxXPW5ldyBNaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpjV30pO2Z1bmN0aW9uIGNXKCl7Y29uc3QgYz1GaShObyk7bGV0IGw9ITA7cmV0dXJuIGlzKG5l''@;'; put 'put ''dyBLZShoPT57bD1jLmlzU3RhYmxlJiYhYy5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIWMuaGFzUGVuZGluZ01pY3JvdGFza3MsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dChsKSxoLmNvbXBsZXRlKCl9KX0pLG5ldyBLZShoPT57bGV0IGY7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+''@;'; put 'put ''e2Y9Yy5vblN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PnshbCYmIWMuaGFzUGVuZGluZ01hY3JvdGFza3MmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYobD0hMCxoLm5leHQoITApKX0pfSl9KTtjb25zdCBfPWMu''@;'; put 'put ''b25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnRJbkFuZ3VsYXJab25lKCksbCYmKGw9ITEsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dCghMSl9KSl9KTtyZXR1cm4oKT0+e2YudW5zdWJzY3JpYmUoKSxfLnVuc3Vic2NyaWJlKCl9fSkucGlwZSgkYSgpKSl9Y29uc3Qg''@;'; put 'put ''dVc9bmV3IE1pKCIiKSxxTT1uZXcgTWkoIiIpO2xldCBLUiwkUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnJlZ2lzdHJ5PWQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhp''@;'; put 'put ''cy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLEtSfHwoZnVuY3Rpb24gamNlKGMpe0tSPWN9KGgpLGguYWRkVG9XaW5kb3coZCkpLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLGEucnVuKCgpPT57dGhpcy50YXNrVHJhY2tpbmdab25lPXR5cGVvZiBab25lPiJ1''@;'; put 'put ''Ij9udWxsOlpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfV93YXRjaEFuZ3VsYXJFdmVudHMoKXt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pv''@;'; put 'put ''bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57Tm8uYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHko''@;'; put 'put ''KX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH1kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5f''@;'; put 'put ''cGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH1pc1N0YWJsZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10''@;'; put 'put ''aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1bkNhbGxiYWNrc0lmUmVhZHkoKXtpZih0aGlzLmlzU3RhYmxlKCkpcXVldWVNaWNyb3Rhc2soKCk9Pntmb3IoOzAhPT10aGlzLl9jYWxsYmFja3MubGVuZ3RoOyl7bGV0IGE9dGhpcy5fY2Fs''@;'; put 'put ''bGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChhLnRpbWVvdXRJZCksYS5kb25lQ2IodGhpcy5fZGlkV29yayl9dGhpcy5fZGlkV29yaz0hMX0pO2Vsc2V7bGV0IGE9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihkPT4hZC51cGRh''@;'; put 'put ''dGVDYnx8IWQudXBkYXRlQ2IoYSl8fChjbGVhclRpbWVvdXQoZC50aW1lb3V0SWQpLCExKSksdGhpcy5fZGlkV29yaz0hMH19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3Vy''@;'; put 'put ''Y2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soYSxkLGgpe2xldCBmPS0xO2QmJmQ+MCYmKGY9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKF89Pl8u''@;'; put 'put ''dGltZW91dElkIT09ZiksYSh0aGlzLl9kaWRXb3JrLHRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCkpfSxkKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJZDpmLHVwZGF0ZUNiOmh9KX13aGVuU3RhYmxlKGEsZCxoKXtpZihoJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0''@;'; put 'put ''aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24o''@;'; put 'put ''YSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihxUiksYXIocU0pKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxxUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXB9cmVnaXN0ZXJBcHBsaWNhdGlvbihhLGQpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQoYSxkKX11bnJlZ2lzdGVyQXBwbGljYXRpb24o''@;'; put 'put ''YSl7dGhpcy5fYXBwbGljYXRpb25zLmRlbGV0ZShhKX11bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9Z2V0VGVzdGFiaWxpdHkoYSl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQoYSl8fG51bGx9Z2V0QWxsVGVzdGFiaWxpdGllcygp''@;'; put 'put ''e3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52YWx1ZXMoKSl9Z2V0QWxsUm9vdEVsZW1lbnRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKGEsZD0hMCl7cmV0dXJuIEtSPy5maW5kVGVzdGFi''@;'; put 'put ''aWxpdHlJblRyZWUodGhpcyxhLGQpPz9udWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCksc3A9bnVsbDtjb25z''@;'; put 'put ''dCBkVz1uZXcgTWkoIkFsbG93TXVsdGlwbGVUb2tlbiIpLFhSPW5ldyBNaSgiUGxhdGZvcm1EZXN0cm95TGlzdGVuZXJzIiksSlI9bmV3IE1pKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpO2NsYXNzIGZXe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uYW1lPWwsdGhpcy50b2tlbj1hfX1mdW5jdGlv''@;'; put 'put ''biBnVyhjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IE1pKGQpO3JldHVybihmPVtdKT0+e2xldCBfPVFSKCk7aWYoIV98fF8uaW5qZWN0b3IuZ2V0KGRXLCExKSl7Y29uc3QgVD1bLi4uYSwuLi5mLHtwcm92aWRlOmgsdXNlVmFsdWU6ITB9XTtjP2MoVCk6ZnVuY3Rp''@;'; put 'put ''b24gWmNlKGMpe2lmKHNwJiYhc3AuZ2V0KGRXLCExKSl0aHJvdyBuZXcgQXIoNDAwLCExKTsoZnVuY3Rpb24gaFcoKXshZnVuY3Rpb24gaDkoYyl7THU9Y30oKCk9Pnt0aHJvdyBuZXcgQXIoNjAwLCExKX0pfSkoKSxzcD1jO2NvbnN0IGw9Yy5nZXQodlcpOyhmdW5jdGlvbiBwVyhjKXtjLmdl''@;'; put 'put ''dChRQyxudWxsKT8uZm9yRWFjaChhPT5hKCkpfSkoYyl9KGZ1bmN0aW9uIG1XKGM9W10sbCl7cmV0dXJuIEVhLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6dDUsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6WFIsdXNlVmFsdWU6bmV3IFNldChbKCk9PnNwPW51bGxd''@;'; put 'put ''KX0sLi4uY119KX0oVCxkKSl9cmV0dXJuIGZ1bmN0aW9uIFdjZShjKXtjb25zdCBsPVFSKCk7aWYoIWwpdGhyb3cgbmV3IEFyKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIFFSKCl7cmV0dXJuIHNwPy5nZXQodlcpPz9udWxsfWxldCB2Vz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEpe3RoaXMuX2luamVjdG9yPWEsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGEsZCl7Y29uc3QgaD1mdW5jdGlvbiBHY2UoYz0iem9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9u''@;'; put 'put ''ZXcgQmNlOiJ6b25lLmpzIj09PWM/bmV3IE5vKGwpOmN9KGQ/Lm5nWm9uZSxmdW5jdGlvbiBfVyhjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENvYWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVu''@;'; put 'put ''Q2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigoKT0+e2NvbnN0IGY9ZnVuY3Rpb24gX18oYyxsLGEp''@;'; put 'put ''e3JldHVybiBuZXcgd2YoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBTVyhjKXtyZXR1cm5be3Byb3ZpZGU6Tm8sdXNlRmFjdG9yeTpjfSx7cHJvdmlkZTpRNCxtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShxY2Use29wdGlvbmFsOiEwfSk7''@;'; put 'put ''cmV0dXJuKCk9PmwuaW5pdGlhbGl6ZSgpfX0se3Byb3ZpZGU6Q1csdXNlRmFjdG9yeTokY2V9LHtwcm92aWRlOmxXLHVzZUZhY3Rvcnk6Y1d9XX0oKCk9PmgpKSxfPWYuaW5qZWN0b3IuZ2V0KGhmLG51bGwpO3JldHVybiBoLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgVD1oLm9uRXJy''@;'; put 'put ''b3Iuc3Vic2NyaWJlKHtuZXh0Olc9PntfLmhhbmRsZUVycm9yKFcpfX0pO2Yub25EZXN0cm95KCgpPT57S00odGhpcy5fbW9kdWxlcyxmKSxULnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uIGJXKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIHY1KGQpP2QuY2F0Y2goaD0+e3Rocm93''@;'; put 'put ''IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoaCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fShfLGgsKCk9Pntjb25zdCBUPWYuaW5qZWN0b3IuZ2V0KFlSKTtyZXR1cm4gVC5ydW5Jbml0aWFs''@;'; put 'put ''aXplcnMoKSxULmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBwZShjKXtmcihjLCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIiksInN0cmluZyI9PXR5cGVvZiBjJiYocmU9Yy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0oZi5pbmplY3Rvci5nZXQoS2Qs''@;'; put 'put ''aXApfHxpcCksdGhpcy5fbW9kdWxlRG9Cb290c3RyYXAoZiksZikpfSl9KX1ib290c3RyYXBNb2R1bGUoYSxkPVtdKXtjb25zdCBoPXlXKHt9LGQpO3JldHVybiBmdW5jdGlvbiB6Y2UoYyxsLGEpe2NvbnN0IGQ9bmV3IHFkKGEpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZCl9KDAsMCxhKS50''@;'; put 'put ''aGVuKGY9PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShmLGgpKX1fbW9kdWxlRG9Cb290c3RyYXAoYSl7Y29uc3QgZD1hLmluamVjdG9yLmdldCh4NSk7aWYoYS5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MClhLl9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goaD0+ZC5ib290''@;'; put 'put ''c3RyYXAoaCkpO2Vsc2V7aWYoIWEuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcCl0aHJvdyBuZXcgQXIoLTQwMywhMSk7YS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGQpfXRoaXMuX21vZHVsZXMucHVzaChhKX1vbkRlc3Ryb3koYSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpfWdldCBp''@;'; put 'put ''bmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBBcig0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGQ9PmQuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZD0+ZCgp''@;'; put 'put ''KTtjb25zdCBhPXRoaXMuX2luamVjdG9yLmdldChYUixudWxsKTthJiYoYS5mb3JFYWNoKGQ9PmQoKSksYS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpKGFyKEVhKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLGN9KSgpO2Z1bmN0aW9uIHlXKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5yZWR1Y2UoeVcsYyk6ey4uLmMsLi4ubH19''@;'; put 'put ''bGV0IHg1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5pbnRlcm5hbEVycm9ySGFu''@;'; put 'put ''ZGxlcj1GaShDVyksdGhpcy56b25lSXNTdGFibGU9RmkobFcpLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuaXNTdGFibGU9RmkoJE0pLmhhc1BlbmRpbmdUYXNrcy5waXBlKFNhKGE9PmE/V2koITEpOnRoaXMuem9uZUlzU3RhYmxlKSxmdW5jdGlvbiBG''@;'; put 'put ''aChjLGw9T2Upe3JldHVybiBjPWM/P0V1LFhlKChhLGQpPT57bGV0IGgsZj0hMDthLnN1YnNjcmliZShVZShkLF89Pntjb25zdCBUPWwoXyk7KGZ8fCFjKGgsVCkpJiYoZj0hMSxoPVQsZC5uZXh0KF8pKX0pKX0pfSgpLCRhKCkpLHRoaXMuX2luamVjdG9yPUZpKHEwKX1nZXQgZGVzdHJveWVk''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgbFM7aWYoIXRoaXMuX2luamVjdG9yLmdldChZUikuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBJZChjKXtjb25zdCBs''@;'; put 'put ''PVFvKGMpfHxLYShjKXx8UmwoYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBBcig0MDUsITEpO2xldCBfO189aD9hOnRoaXMuX2luamVjdG9yLmdldChLMCkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKF8uY29tcG9u''@;'; put 'put ''ZW50VHlwZSk7Y29uc3QgVD1mdW5jdGlvbiBVY2UoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfShfKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KHpsKSxpZT1fLmNyZWF0ZShFYS5OVUxMLFtdLGR8fF8uc2VsZWN0b3IsVCksZ2U9aWUubG9jYXRpb24ubmF0aXZlRWxlbWVudCx3ZT1p''@;'; put 'put ''ZS5pbmplY3Rvci5nZXQodVcsbnVsbCk7cmV0dXJuIHdlPy5yZWdpc3RlckFwcGxpY2F0aW9uKGdlKSxpZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoaWUuaG9zdFZpZXcpLEtNKHRoaXMuY29tcG9uZW50cyxpZSksd2U/LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihnZSl9KSx0aGlz''@;'; put 'put ''Ll9sb2FkQ29tcG9uZW50KGllKSxpZX10aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEFyKDEwMSwhMSk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwO2ZvcihsZXQgYSBvZiB0aGlzLl92aWV3cylhLmRldGVjdENoYW5nZXMoKX1jYXRjaChhKXt0aGlzLmludGVybmFsRXJy''@;'; put 'put ''b3JIYW5kbGVyKGEpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITF9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2NvbnN0IGQ9YTtLTSh0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21B''@;'; put 'put ''cHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoSlIsW10pO2QucHVzaCguLi50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLGQuZm9y''@;'; put 'put ''RWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhp''@;'; put 'put ''cy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5LTSh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0''@;'; put 'put ''aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBLTShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNl''@;'; put 'put ''KGEsMSl9Y29uc3QgQ1c9bmV3IE1pKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5GaShoZikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7ZnVuY3Rpb24gJGNlKCl7Y29uc3QgYz1GaShObyksbD1GaShoZik7cmV0dXJuIGE9PmMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pmwu''@;'; put 'put ''aGFuZGxlRXJyb3IoYSkpfWxldCBxY2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuem9uZT1GaShObyksdGhpcy5hcHBsaWNhdGlvblJlZj1GaSh4NSl9aW5pdGlhbGl6ZSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb258fCh0aGlzLl9vbk1pY3JvdGFza0Vt''@;'; put 'put ''cHR5U3Vic2NyaXB0aW9uPXRoaXMuem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKX0pfX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24/''@;'; put 'put ''LnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2xldCBVYT0oKCk9PntjbGFzcyBje31yZXR1cm4g''@;'; put 'put ''Yy5fX05HX0VMRU1FTlRfSURfXz1YY2UsY30pKCk7ZnVuY3Rpb24gWGNlKGMpe3JldHVybiBmdW5jdGlvbiBKY2UoYyxsLGEpe2lmKFAxKGMpJiYhYSl7Y29uc3QgZD1tdChjLmluZGV4LGwpO3JldHVybiBuZXcgZDUoZCxkKX1yZXR1cm4gNDcmYy50eXBlP25ldyBkNShsW0phXSxsKTpudWxs''@;'; put 'put ''fShTYygpLFhyKCksMTY9PSgxNiZjKSl9Y2xhc3Mga1d7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHMobCl7cmV0dXJuIGs2KGwpfWNyZWF0ZShsKXtyZXR1cm4gbmV3IGl1ZShsKX19Y29uc3QgcnVlPShjLGwpPT5sO2NsYXNzIGl1ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmxlbmd0aD0wLHRoaXMu''@;'; put 'put ''X2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5f''@;'; put 'put ''bW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49bHx8''@;'; put 'put ''cnVlfWZvckVhY2hJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2l0SGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoT3BlcmF0aW9uKGwpe2xldCBhPXRoaXMuX2l0SGVhZCxkPXRoaXMuX3JlbW92YWxzSGVhZCxoPTAsZj1udWxsO2Zvcig7YXx8ZDspe2NvbnN0IF89IWR8fGEm''@;'; put 'put ''JmEuY3VycmVudEluZGV4PFRXKGQsaCxmKT9hOmQsVD1UVyhfLGgsZiksVz1fLmN1cnJlbnRJbmRleDtpZihfPT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxsPT1fLnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IGllPVQtaCxnZT1X''@;'; put 'put ''LWg7aWYoaWUhPWdlKXtmb3IobGV0IEVlPTA7RWU8aWU7RWUrKyl7Y29uc3QgWmU9RWU8Zi5sZW5ndGg/ZltFZV06ZltFZV09MCxvdD1aZStFZTtnZTw9b3QmJm90PGllJiYoZltFZV09WmUrMSl9ZltfLnByZXZpb3VzSW5kZXhdPWdlLWllfX1UIT09VyYmbChfLFQsVyl9fWZvckVhY2hQcmV2''@;'; put 'put ''aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UHJldmlvdXMpbChhKX1mb3JFYWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNo''@;'; put 'put ''TW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX21vdmVzSGVhZDtudWxsIT09YTthPWEuX25leHRNb3ZlZClsKGEpfWZvckVhY2hSZW1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UmVtb3ZlZClsKGEpfWZvckVhY2hJZGVu''@;'; put 'put ''dGl0eUNoYW5nZShsKXtsZXQgYTtmb3IoYT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dElkZW50aXR5Q2hhbmdlKWwoYSl9ZGlmZihsKXtpZihudWxsPT1sJiYobD1bXSksIWs2KGwpKXRocm93IG5ldyBBcig5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKGwp''@;'; put 'put ''P3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sobCl7dGhpcy5fcmVzZXQoKTtsZXQgaCxmLF8sYT10aGlzLl9pdEhlYWQsZD0hMTtpZihBcnJheS5pc0FycmF5KGwpKXt0aGlzLmxlbmd0aD1sLmxlbmd0aDtmb3IobGV0IFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylmPWxbVF0sXz10aGlzLl90''@;'; put 'put ''cmFja0J5Rm4oVCxmKSxudWxsIT09YSYmT2JqZWN0LmlzKGEudHJhY2tCeUlkLF8pPyhkJiYoYT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihhLGYsXyxUKSksT2JqZWN0LmlzKGEuaXRlbSxmKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoYSxmKSk6KGE9dGhpcy5fbWlzbWF0Y2goYSxmLF8s''@;'; put 'put ''VCksZD0hMCksYT1hLl9uZXh0fWVsc2UgaD0wLGZ1bmN0aW9uIEFMKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsKGNbYV0pO2Vsc2V7Y29uc3QgYT1jW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQgZDtmb3IoOyEoZD1hLm5leHQoKSkuZG9uZTsp''@;'; put 'put ''bChkLnZhbHVlKX19KGwsVD0+e189dGhpcy5fdHJhY2tCeUZuKGgsVCksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCxfKT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxULF8saCkpLE9iamVjdC5pcyhhLml0ZW0sVCl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEs''@;'; put 'put ''VCkpOihhPXRoaXMuX21pc21hdGNoKGEsVCxfLGgpLGQ9ITApLGE9YS5fbmV4dCxoKyt9KSx0aGlzLmxlbmd0aD1oO3JldHVybiB0aGlzLl90cnVuY2F0ZShhKSx0aGlzLmNvbGxlY3Rpb249bCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9u''@;'; put 'put ''c0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKGw9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251''@;'; put 'put ''bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJldmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWls''@;'; put 'put ''PW51bGwsbD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0TW92ZWQpbC5wcmV2aW91c0luZGV4PWwuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5f''@;'; put 'put ''aWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaChsLGEsZCxoKXtsZXQgZjtyZXR1cm4gbnVsbD09PWw/Zj10aGlzLl9pdFRhaWw6KGY9bC5fcHJldix0aGlzLl9yZW1vdmUobCkpLG51bGwhPT0obD1udWxsPT09dGhpcy5fdW5saW5r''@;'; put 'put ''ZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpKT8oT2JqZWN0LmlzKGwuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKSx0aGlzLl9yZWluc2VydEFmdGVyKGwsZixoKSk6bnVsbCE9PShsPW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRz''@;'; put 'put ''P251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoZCxoKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fbW92ZUFmdGVyKGwsZixoKSk6bD10aGlzLl9hZGRBZnRlcihuZXcgb3VlKGEsZCksZixoKSxsfV92ZXJpZnlSZWluc2VydGlv''@;'; put 'put ''bihsLGEsZCxoKXtsZXQgZj1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpO3JldHVybiBudWxsIT09Zj9sPXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoZixsLl9wcmV2LGgpOmwuY3VycmVudEluZGV4IT1oJiYobC5jdXJyZW50''@;'; put 'put ''SW5kZXg9aCx0aGlzLl9hZGRUb01vdmVzKGwsaCkpLGx9X3RydW5jYXRlKGwpe2Zvcig7bnVsbCE9PWw7KXtjb25zdCBhPWwuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpLGw9YX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJl''@;'; put 'put ''Y29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMu''@;'; put 'put ''X2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5n''@;'; put 'put ''ZT1udWxsKX1fcmVpbnNlcnRBZnRlcihsLGEsZCl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBoPWwuX3ByZXZSZW1vdmVkLGY9bC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1oP3RoaXMuX3JlbW92YWxzSGVh''@;'; put 'put ''ZD1mOmguX25leHRSZW1vdmVkPWYsbnVsbD09PWY/dGhpcy5fcmVtb3ZhbHNUYWlsPWg6Zi5fcHJldlJlbW92ZWQ9aCx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X21vdmVBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX3VubGluayhsKSx0aGlzLl9p''@;'; put 'put ''bnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X2FkZEFmdGVyKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD1sOnRoaXMu''@;'; put 'put ''X2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1sLGx9X2luc2VydEFmdGVyKGwsYSxkKXtjb25zdCBoPW51bGw9PT1hP3RoaXMuX2l0SGVhZDphLl9uZXh0O3JldHVybiBsLl9uZXh0PWgsbC5fcHJldj1hLG51bGw9PT1oP3RoaXMuX2l0VGFpbD1sOmguX3ByZXY9bCxudWxsPT09YT90aGlzLl9p''@;'; put 'put ''dEhlYWQ9bDphLl9uZXh0PWwsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBBVyksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQobCksbC5jdXJyZW50SW5kZXg9ZCxsfV9yZW1vdmUobCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5f''@;'; put 'put ''dW5saW5rKGwpKX1fdW5saW5rKGwpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBhPWwuX3ByZXYsZD1sLl9uZXh0O3JldHVybiBudWxsPT09YT90aGlzLl9pdEhlYWQ9ZDphLl9uZXh0PWQsbnVsbD09PWQ/dGhpcy5faXRU''@;'; put 'put ''YWlsPWE6ZC5fcHJldj1hLGx9X2FkZFRvTW92ZXMobCxhKXtyZXR1cm4gbC5wcmV2aW91c0luZGV4PT09YXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD1sOnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPWwpLGx9X2FkZFRvUmVtb3Zh''@;'; put 'put ''bHMobCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IEFXKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudEluZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNU''@;'; put 'put ''YWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVu''@;'; put 'put ''dGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9''@;'; put 'put ''bCxsfX1jbGFzcyBvdWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0''@;'; put 'put ''aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3Mgc3Vl''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxsLl9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10''@;'; put 'put ''aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVsbCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0''@;'; put 'put ''dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hlYWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1hOmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgQVd7Y29uc3RydWN0''@;'; put 'put ''b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXB1dChsKXtjb25zdCBhPWwudHJhY2tCeUlkO2xldCBkPXRoaXMubWFwLmdldChhKTtkfHwoZD1uZXcgc3VlLHRoaXMubWFwLnNldChhLGQpKSxkLmFkZChsKX1nZXQobCxhKXtjb25zdCBoPXRoaXMubWFwLmdldChsKTtyZXR1cm4gaD9oLmdldChsLGEp''@;'; put 'put ''Om51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChhKS5yZW1vdmUobCkmJnRoaXMubWFwLmRlbGV0ZShhKSxsfWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19ZnVuY3Rpb24g''@;'; put 'put ''VFcoYyxsLGEpe2NvbnN0IGQ9Yy5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1kKXJldHVybiBkO2xldCBoPTA7cmV0dXJuIGEmJmQ8YS5sZW5ndGgmJihoPWFbZF0pLGQrbCtofWNsYXNzIERXe2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxBNihs''@;'; put 'put ''KX1jcmVhdGUoKXtyZXR1cm4gbmV3IGF1ZX19Y2xhc3MgYXVle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGws''@;'; put 'put ''dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNI''@;'; put 'put ''ZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3By''@;'; put 'put ''ZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlz''@;'; put 'put ''Ll9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEuX25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8''@;'; put 'put ''fEE2KGwpKSl0aHJvdyBuZXcgQXIoOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2Zv''@;'; put 'put ''ckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBl''@;'; put 'put ''bmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShk''@;'; put 'put ''LmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1u''@;'; put 'put ''dWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtjb25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQm''@;'; put 'put ''JihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9''@;'; put 'put ''YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsXz1oLl9uZXh0''@;'; put 'put ''O3JldHVybiBmJiYoZi5fbmV4dD1fKSxfJiYoXy5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgbHVlKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChsLGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQo''@;'; put 'put ''KXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7''@;'; put 'put ''bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1u''@;'; put 'put ''dWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxsLmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJy''@;'; put 'put ''ZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRk''@;'; put 'put ''aXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wg''@;'; put 'put ''aW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgbHVle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlv''@;'; put 'put ''dXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVuY3Rpb24gSVcoKXtyZXR1cm4gbmV3IHo2KFtuZXcga1ddKX1sZXQgejY9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihudWxsIT1kKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rv''@;'; put 'put ''cnk6ZD0+Yy5jcmVhdGUoYSxkfHxJVygpKSxkZXBzOltbYyxuZXcgZzAsbmV3IHoyXV19fWZpbmQoYSl7Y29uc3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpO2lmKG51bGwhPWQpcmV0dXJuIGQ7dGhyb3cgbmV3IEFyKDkwMSwhMSl9fXJldHVybiBjLlx1MDI3NXBy''@;'; put 'put ''b3Y9ZHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpJV30pLGN9KSgpO2Z1bmN0aW9uIExXKCl7cmV0dXJuIG5ldyBTXyhbbmV3IERXXSl9bGV0IFNfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5mYWN0b3JpZXM9YX1zdGF0aWMgY3JlYXRlKGEsZCl7aWYo''@;'; put 'put ''ZCl7Y29uc3QgaD1kLmZhY3Rvcmllcy5zbGljZSgpO2E9YS5jb25jYXQoaCl9cmV0dXJuIG5ldyBjKGEpfXN0YXRpYyBleHRlbmQoYSl7cmV0dXJue3Byb3ZpZGU6Yyx1c2VGYWN0b3J5OmQ9PmMuY3JlYXRlKGEsZHx8TFcoKSksZGVwczpbW2MsbmV3IGcwLG5ldyB6Ml1dfX1maW5kKGEpe2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBBcig5MDEsITEpfX1yZXR1cm4gYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6TFd9KSxjfSkoKTtjb25zdCBkdWU9Z1cobnVs''@;'; put 'put ''bCwiY29yZSIsW10pO2xldCBodWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKHg1KSl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCk7ZnVuY3Rp''@;'; put 'put ''b24gVTYoYyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYz9jOm51bGwhPWMmJiJmYWxzZSIhPT1jfWxldCBzTz1udWxsO2Z1bmN0aW9uIGFwKCl7cmV0dXJuIHNPfWNsYXNzIE11ZXt9Y29uc3QgTHM9bmV3IE1pKCJEb2N1bWVudFRva2VuIik7bGV0IGFPPSgoKT0+e2NsYXNzIGN7aGlzdG9y''@;'; put 'put ''eUdvKGEpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShFdWUpfSxwcm92aWRlZEluOiJw''@;'; put 'put ''bGF0Zm9ybSJ9KSxjfSkoKTtjb25zdCB4dWU9bmV3IE1pKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpO2xldCBFdWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFPe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kb2M9RmkoTHMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlz''@;'; put 'put ''Ll9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJhc2VIcmVmRnJvbURPTSgpe3JldHVybiBhcCgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVu''@;'; put 'put ''dExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJo''@;'; put 'put ''YXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxo''@;'; put 'put ''KX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxjfSkoKTtmdW5jdGlvbiBsTyhjLGwpe2lmKDA9PWMubGVuZ3RoKXJldHVybiBsO2lmKDA9PWwubGVuZ3Ro''@;'; put 'put ''KXJldHVybiBjO2xldCBhPTA7cmV0dXJuIGMuZW5kc1dpdGgoIi8iKSYmYSsrLGwuc3RhcnRzV2l0aCgiLyIpJiZhKyssMj09YT9jK2wuc3Vic3RyaW5nKDEpOjE9PWE/YytsOmMrIi8iK2x9ZnVuY3Rpb24gVlcoYyl7Y29uc3QgbD1jLm1hdGNoKC8jfFw/fCQvKSxhPWwmJmwuaW5kZXh8fGMu''@;'; put 'put ''bGVuZ3RoO3JldHVybiBjLnNsaWNlKDAsYS0oIi8iPT09Y1thLTFdPzE6MCkpK2Muc2xpY2UoYSl9ZnVuY3Rpb24gQ2YoYyl7cmV0dXJuIGMmJiI/IiE9PWNbMF0/Ij8iK2M6Y31sZXQgazU9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50''@;'; put 'put ''ZWQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIEZpKGpXKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBCVz1uZXcgTWkoImFwcEJhc2VI''@;'; put 'put ''cmVmIik7bGV0IGpXPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLHRoaXMuX2Jhc2VIcmVmPWQ/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhy''@;'; put 'put ''ZWZGcm9tRE9NKCk/P0ZpKExzKS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVz''@;'; put 'put ''aCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gbE8odGhpcy5fYmFzZUhyZWYsYSl9''@;'; put 'put ''cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrQ2YodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLGg9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBoJiZhP2Ake2R9JHtofWA6ZH1wdXNoU3RhdGUoYSxkLGgsZil7Y29uc3Qg''@;'; put 'put ''Xz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsXyl9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2NvbnN0IF89dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtDZihmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBs''@;'; put 'put ''YWNlU3RhdGUoYSxkLF8pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3Ro''@;'; put 'put ''aXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFPKSxhcihCVyw4KSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''fSksY30pKCksa3VlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jhc2VIcmVmPSIiLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLG51bGwhPWQmJih0aGlzLl9iYXNlSHJlZj1kKX1uZ09u''@;'; put 'put ''RGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5f''@;'; put 'put ''cGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7bGV0IGQ9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBudWxsPT1kJiYoZD0iIyIpLGQubGVuZ3RoPjA/ZC5zdWJzdHJpbmcoMSk6''@;'; put 'put ''ZH1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7Y29uc3QgZD1sTyh0aGlzLl9iYXNlSHJlZixhKTtyZXR1cm4gZC5sZW5ndGg+MD8iIyIrZDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtsZXQgXz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTswPT1fLmxlbmd0aCYmKF89dGhpcy5fcGxhdGZv''@;'; put 'put ''cm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxkLF8pfXJlcGxhY2VTdGF0ZShhLGQsaCxmKXtsZXQgXz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTswPT1fLmxlbmd0aCYmKF89dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRo''@;'; put 'put ''bmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLF8pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2Nh''@;'; put 'put ''dGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFPKSxhcihCVyw4KSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0''@;'; put 'put ''b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9zdWJqZWN0PW5ldyBFcix0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1hO2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VQYXRoPWZ1bmN0aW9uIER1ZShjKXtpZihuZXcgUmVnRXhwKCJeKGh0dHBzPzopPy8vIikudGVzdChjKSl7Y29uc3RbLGFdPWMuc3BsaXQoL1wvXC9bXlwvXSsvKTtyZXR1cm4gYX1yZXR1cm4gY30o''@;'; put 'put ''VlcoelcoZCkpKSx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lm9uUG9wU3RhdGUoaD0+e3RoaXMuX3N1YmplY3QuZW1pdCh7dXJsOnRoaXMucGF0aCghMCkscG9wOiEwLHN0YXRlOmguc3RhdGUsdHlwZTpoLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9u''@;'; put 'put ''Py51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXX1wYXRoKGE9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnBhdGgoYSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1''@;'; put 'put ''cnJlbnRQYXRoRXF1YWxUbyhhLGQ9IiIpe3JldHVybiB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoYStDZihkKSl9bm9ybWFsaXplKGEpe3JldHVybiBjLnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbiBUdWUoYyxsKXtpZighY3x8IWwuc3RhcnRzV2l0aChjKSlyZXR1cm4gbDtjb25z''@;'; put 'put ''dCBhPWwuc3Vic3RyaW5nKGMubGVuZ3RoKTtyZXR1cm4iIj09PWF8fFsiLyIsIjsiLCI/IiwiIyJdLmluY2x1ZGVzKGFbMF0pP2E6bH0odGhpcy5fYmFzZVBhdGgselcoYSkpKX1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7cmV0dXJuIGEmJiIvIiE9PWFbMF0mJihhPSIvIithKSx0aGlzLl9sb2Nh''@;'; put 'put ''dGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChhKX1nbyhhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnB1c2hTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErQ2YoZCkpLGgpfXJl''@;'; put 'put ''cGxhY2VTdGF0ZShhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErQ2YoZCkpLGgpfWZvcndhcmQoKXt0aGlzLl9sb2NhdGlvblN0''@;'; put 'put ''cmF0ZWd5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5iYWNrKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5oaXN0b3J5R28/LihhKX1vblVybENoYW5nZShhKXtyZXR1cm4gdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnB1c2goYSksdGhp''@;'; put 'put ''cy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9ufHwodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPXRoaXMuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZC51cmwsZC5zdGF0ZSl9KSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRl''@;'; put 'put ''eE9mKGEpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3Rp''@;'; put 'put ''ZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoYT0iIixkKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZCxjb21wbGV0ZTpofSl9fXJldHVybiBjLm5vcm1h''@;'; put 'put ''bGl6ZVF1ZXJ5UGFyYW1zPUNmLGMuam9pbldpdGhTbGFzaD1sTyxjLnN0cmlwVHJhaWxpbmdTbGFzaD1WVyxjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGs1KSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIEF1ZSgpe3JldHVybiBuZXcgSmQoYXIoazUpKX0oKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiB6VyhjKXtyZXR1cm4gYy5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIGtjPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRm9ybWF0PTBdPSJGb3JtYXQi''@;'; put 'put ''LGNbYy5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixjfShrY3x8e30pLG5hPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmFycm93PTBdPSJOYXJyb3ciLGNbYy5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLGNbYy5XaWRlPTJdPSJXaWRlIixjW2MuU2hvcnQ9M109IlNob3J0IixjfShu''@;'; put 'put ''YXx8e30pLHkwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2hvcnQ9MF09IlNob3J0IixjW2MuTWVkaXVtPTFdPSJNZWRpdW0iLGNbYy5Mb25nPTJdPSJMb25nIixjW2MuRnVsbD0zXT0iRnVsbCIsY30oeTB8fHt9KTtmdW5jdGlvbiBjTyhjLGwsYSl7Y29uc3QgZD1CbChjKSxmPXRkKFtkW3Fv''@;'; put 'put ''LkRheXNGb3JtYXRdLGRbcW8uRGF5c1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gdGQoZixhKX1mdW5jdGlvbiB1TyhjLGwsYSl7Y29uc3QgZD1CbChjKSxmPXRkKFtkW3FvLk1vbnRoc0Zvcm1hdF0sZFtxby5Nb250aHNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIHRkKGYsYSl9ZnVuY3Rpb24gdGQo''@;'; put 'put ''YyxsKXtmb3IobGV0IGE9bDthPi0xO2EtLSlpZih0eXBlb2YgY1thXTwidSIpcmV0dXJuIGNbYV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIFhXKGMsbCl7bD1lbmNvZGVVUklDb21wb25lbnQobCk7Zm9yKGNvbnN0''@;'; put 'put ''IGEgb2YgYy5zcGxpdCgiOyIpKXtjb25zdCBkPWEuaW5kZXhPZigiPSIpLFtoLGZdPS0xPT1kP1thLCIiXTpbYS5zbGljZSgwLGQpLGEuc2xpY2UoZCsxKV07aWYoaC50cmltKCk9PT1sKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZil9cmV0dXJuIG51bGx9Y29uc3QgeU89L1xzKy8sSlc9''@;'; put 'put ''W107bGV0IHVjPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5faXRlcmFibGVEaWZmZXJzPWEsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWQsdGhpcy5fbmdFbD1oLHRoaXMuX3JlbmRlcmVyPWYsdGhpcy5pbml0aWFsQ2xhc3Nlcz1KVyx0aGlzLnN0YXRlTWFwPW5ldyBN''@;'; put 'put ''YXB9c2V0IGtsYXNzKGEpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9YT9hLnRyaW0oKS5zcGxpdCh5Tyk6Sld9c2V0IG5nQ2xhc3MoYSl7dGhpcy5yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGE/YS50cmltKCkuc3BsaXQoeU8pOmF9bmdEb0NoZWNrKCl7Zm9yKGNvbnN0IGQgb2YgdGhp''@;'; put 'put ''cy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtjb25zdCBhPXRoaXMucmF3Q2xhc3M7aWYoQXJyYXkuaXNBcnJheShhKXx8YSBpbnN0YW5jZW9mIFNldClmb3IoY29uc3QgZCBvZiBhKXRoaXMuX3VwZGF0ZVN0YXRlKGQsITApO2Vsc2UgaWYobnVsbCE9YSlmb3IoY29u''@;'; put 'put ''c3QgZCBvZiBPYmplY3Qua2V5cyhhKSl0aGlzLl91cGRhdGVTdGF0ZShkLCEhYVtkXSk7dGhpcy5fYXBwbHlTdGF0ZURpZmYoKX1fdXBkYXRlU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuc3RhdGVNYXAuZ2V0KGEpO3ZvaWQgMCE9PWg/KGguZW5hYmxlZCE9PWQmJihoLmNoYW5nZWQ9ITAsaC5l''@;'; put 'put ''bmFibGVkPWQpLGgudG91Y2hlZD0hMCk6dGhpcy5zdGF0ZU1hcC5zZXQoYSx7ZW5hYmxlZDpkLGNoYW5nZWQ6ITAsdG91Y2hlZDohMH0pfV9hcHBseVN0YXRlRGlmZigpe2Zvcihjb25zdCBhIG9mIHRoaXMuc3RhdGVNYXApe2NvbnN0IGQ9YVswXSxoPWFbMV07aC5jaGFuZ2VkPyh0aGlzLl90''@;'; put 'put ''b2dnbGVDbGFzcyhkLGguZW5hYmxlZCksaC5jaGFuZ2VkPSExKTpoLnRvdWNoZWR8fChoLmVuYWJsZWQmJnRoaXMuX3RvZ2dsZUNsYXNzKGQsITEpLHRoaXMuc3RhdGVNYXAuZGVsZXRlKGQpKSxoLnRvdWNoZWQ9ITF9fV90b2dnbGVDbGFzcyhhLGQpeyhhPWEudHJpbSgpKS5sZW5ndGg+MCYm''@;'; put 'put ''YS5zcGxpdCh5TykuZm9yRWFjaChoPT57ZD90aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpKHR0KHo2KSx0dChTXyksdHQoTmkpLHR0KEZvKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZToh''@;'; put 'put ''MH0pLGN9KSgpO2NsYXNzIGcwZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50PWh9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10''@;'; put 'put ''aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgeHM9KCgpPT57Y2xhc3MgY3tzZXQgbmdGb3JPZihhKXt0aGlzLl9uZ0Zvck9mPWEsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnko''@;'; put 'put ''YSl7dGhpcy5fdHJhY2tCeUZuPWF9Z2V0IG5nRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdG''@;'; put 'put ''b3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1wbGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZl''@;'; put 'put ''ciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdl''@;'; put 'put ''cyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsXyk9PntpZihudWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IGcwZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09''@;'; put 'put ''PV8/dm9pZCAwOl8pO2Vsc2UgaWYobnVsbD09XylkLnJlbW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihudWxsIT09Zil7Y29uc3QgVD1kLmdldChmKTtkLm1vdmUoVCxfKSxlRyhULGgpfX0pO2ZvcihsZXQgaD0wLGY9ZC5sZW5ndGg7aDxmO2grKyl7Y29uc3QgVD1kLmdldChoKS5j''@;'; put 'put ''b250ZXh0O1QuaW5kZXg9aCxULmNvdW50PWYsVC5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9YS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoaD0+e2VHKGQuZ2V0KGguY3VycmVudEluZGV4KSxoKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dCh6YSksdHQoejYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJu''@;'; put 'put ''Z0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksY30pKCk7ZnVuY3Rpb24gZUcoYyxsKXtjLmNvbnRleHQuJGltcGxpY2l0PWwuaXRlbX1sZXQgWmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3ZpZXdDb250YWlu''@;'; put 'put ''ZXI9YSx0aGlzLl9jb250ZXh0PW5ldyBtMGUsdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1kfXNldCBuZ0lmKGEpe3Ro''@;'; put 'put ''aXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj1hLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZlRoZW4oYSl7dEcoIm5nSWZUaGVuIixhKSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9YSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQg''@;'; put 'put ''bmdJZkVsc2UoYSl7dEcoIm5nSWZFbHNlIixhKSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9YSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0Nv''@;'; put 'put ''bnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5f''@;'; put 'put ''ZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVS''@;'; put 'put ''ZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoemEpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''IiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLGN9KSgpO2NsYXNzIG0wZXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51bGx9fWZ1bmN0aW9u''@;'; put 'put ''IHRHKGMsbCl7aWYobCYmIWwuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtjfSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtxYShsKX0nLmApfWNsYXNzIHdPe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1sLHRoaXMu''@;'; put 'put ''X3RlbXBsYXRlUmVmPWEsdGhpcy5fY3JlYXRlZD0hMX1jcmVhdGUoKXt0aGlzLl9jcmVhdGVkPSEwLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKX1kZXN0cm95KCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92aWV3Q29udGFpbmVy''@;'; put 'put ''UmVmLmNsZWFyKCl9ZW5mb3JjZVN0YXRlKGwpe2wmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IWwmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfX1sZXQgbmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWaWV3cz1bXSx0aGlzLl9kZWZhdWx0''@;'; put 'put ''VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChhKXt0aGlzLl9uZ1N3aXRjaD1hLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2Fk''@;'; put 'put ''ZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoYSl7dGhpcy5fZGVmYXVsdFZpZXdzLnB1c2goYSl9X21hdGNoQ2FzZShhKXtjb25zdCBkPWE9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNo''@;'; put 'put ''ZWR8fGQsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0''@;'; put 'put ''Q2FzZXNNYXRjaGVkPSExKSxkfV91cGRhdGVEZWZhdWx0Q2FzZXMoYSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aD4wJiZhIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKWQuZW5mb3JjZVN0YXRl''@;'; put 'put ''KGEpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLHRoPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgd08oYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KHphKSx0dChuZCw5KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNl''@;'; put 'put ''In0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLHJHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nRWw9YSx0aGlzLl9kaWZmZXJzPWQsdGhpcy5fcmVuZGVyZXI9aCx0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoYSl7dGhpcy5f''@;'; put 'put ''bmdTdHlsZT1hLCF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdTdHlsZSk7YSYmdGhpcy5fYXBwbHlDaGFuZ2Vz''@;'; put 'put ''KGEpfX1fc2V0U3R5bGUoYSxkKXtjb25zdFtoLGZdPWEuc3BsaXQoIi4iKSxfPS0xPT09aC5pbmRleE9mKCItIik/dm9pZCAwOlkyLkRhc2hDYXNlO251bGwhPWQ/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsZj9gJHtkfSR7Zn1gOmQsXyk6dGhp''@;'; put 'put ''cy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsXyl9X2FwcGx5Q2hhbmdlcyhhKXthLmZvckVhY2hSZW1vdmVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxudWxsKSksYS5mb3JFYWNoQWRkZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5''@;'; put 'put ''LGQuY3VycmVudFZhbHVlKSksYS5mb3JFYWNoQ2hhbmdlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KFNfKSx0dChGbykpfSxjLlx1MDI3NWRpcj1D''@;'; put 'put ''cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxjfSkoKSxyZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9YSx0aGlzLl92aWV3UmVmPW51bGws''@;'; put 'put ''dGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoYSl7aWYoYS5uZ1RlbXBsYXRlT3V0bGV0fHxhLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7Y29u''@;'; put 'put ''c3QgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJmQucmVtb3ZlKGQuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksdGhpcy5uZ1RlbXBsYXRlT3V0bGV0KXtjb25zdHtuZ1RlbXBsYXRlT3V0bGV0OmgsbmdUZW1wbGF0ZU91dGxldENvbnRleHQ6ZixuZ1RlbXBsYXRl''@;'; put 'put ''T3V0bGV0SW5qZWN0b3I6X309dGhpczt0aGlzLl92aWV3UmVmPWQuY3JlYXRlRW1iZWRkZWRWaWV3KGgsZixfP3tpbmplY3RvcjpffTp2b2lkIDApfWVsc2UgdGhpcy5fdmlld1JlZj1udWxsfWVsc2UgdGhpcy5fdmlld1JlZiYmYS5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCYmdGhpcy5uZ1Rl''@;'; put 'put ''bXBsYXRlT3V0bGV0Q29udGV4dCYmKHRoaXMuX3ZpZXdSZWYuY29udGV4dD10aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6''@;'; put 'put ''W1siIiwibmdUZW1wbGF0ZU91dGxldCIsIiJdXSxpbnB1dHM6e25nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbmdUZW1wbGF0ZU91dGxldDoibmdUZW1wbGF0ZU91dGxldCIsbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOiJuZ1RlbXBsYXRlT3V0bGV0''@;'; put 'put ''SW5qZWN0b3IifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt2YV19KSxjfSkoKTtjbGFzcyBiMGV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIEtoKCgpPT5sLnN1YnNjcmliZSh7bmV4dDphLGVycm9yOmQ9Pnt0aHJvdyBkfX0pKX1kaXNwb3NlKGwpe0toKCgpPT5sLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCkpfX1jbGFzcyB5MGV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIGwudGhlbihhLGQ9Pnt0aHJvdyBkfSl9ZGlzcG9zZShsKXt9fWNvbnN0IHcwZT1uZXcgeTBlLEMwZT1uZXcgYjBlO2xldCBjeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xhdGVzdFZh''@;'; put 'put ''bHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9YX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShhKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fb2JqP2EhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5zZm9ybShhKSk6dGhpcy5fbGF0ZXN0VmFsdWU6KGEmJnRoaXMuX3N1YnNjcmliZShhKSx0aGlzLl9sYXRlc3RWYWx1ZSl9X3N1YnNjcmliZShhKXt0aGlzLl9vYmo9YSx0aGlzLl9zdHJhdGVneT10aGlz''@;'; put 'put ''Ll9zZWxlY3RTdHJhdGVneShhKSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKGEsZD0+dGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKSl9X3NlbGVjdFN0cmF0ZWd5KGEpe2lmKHY1KGEpKXJldHVybiB3MGU7aWYoZk0oYSkpcmV0dXJuIEMw''@;'; put 'put ''ZTt0aHJvdyBmdW5jdGlvbiBlMihjLGwpe3JldHVybiBuZXcgQXIoMjEwMCwhMSl9KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVs''@;'; put 'put ''bH1fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKXthPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZCx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSwxNikpfSxjLlx1MDI3NXBpcGU9TmEo''@;'; put 'put ''e25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSksY30pKCksaUc9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1cGlwZT1OYSh7bmFtZToianNvbiIsdHlwZTpjLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLGN9KSgpLHV4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kaWZmZXJzPWEsdGhpcy5rZXlWYWx1ZXM9W10sdGhpcy5jb21wYXJlRm49b0d9dHJhbnNmb3JtKGEsZD1vRyl7''@;'; put 'put ''aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcnx8KHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKTtjb25zdCBoPXRoaXMuZGlmZmVyLmRpZmYoYSksZj1kIT09dGhpcy5jb21wYXJlRm47''@;'; put 'put ''cmV0dXJuIGgmJih0aGlzLmtleVZhbHVlcz1bXSxoLmZvckVhY2hJdGVtKF89Pnt0aGlzLmtleVZhbHVlcy5wdXNoKGZ1bmN0aW9uIE8wZShjLGwpe3JldHVybntrZXk6Yyx2YWx1ZTpsfX0oXy5rZXksXy5jdXJyZW50VmFsdWUpKX0pKSwoaHx8ZikmJih0aGlzLmtleVZhbHVlcy5zb3J0KGQp''@;'; put 'put ''LHRoaXMuY29tcGFyZUZuPWQpLHRoaXMua2V5VmFsdWVzfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChTXywxNikpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6ImtleXZhbHVlIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSksY30pKCk7''@;'; put 'put ''ZnVuY3Rpb24gb0coYyxsKXtjb25zdCBhPWMua2V5LGQ9bC5rZXk7aWYoYT09PWQpcmV0dXJuIDA7aWYodm9pZCAwPT09YSlyZXR1cm4gMTtpZih2b2lkIDA9PT1kKXJldHVybi0xO2lmKG51bGw9PT1hKXJldHVybiAxO2lmKG51bGw9PT1kKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''YSYmInN0cmluZyI9PXR5cGVvZiBkKXJldHVybiBhPGQ/LTE6MTtpZigibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgZClyZXR1cm4gYS1kO2lmKCJib29sZWFuIj09dHlwZW9mIGEmJiJib29sZWFuIj09dHlwZW9mIGQpcmV0dXJuIGE8ZD8tMToxO2NvbnN0IGg9U3RyaW5n''@;'; put 'put ''KGEpLGY9U3RyaW5nKGQpO3JldHVybiBoPT1mPzA6aDxmPy0xOjF9bGV0IG9vPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2NvbnN0''@;'; put 'put ''IHNHPSJicm93c2VyIjtmdW5jdGlvbiBScyhjKXtyZXR1cm4gYz09PXNHfWZ1bmN0aW9uIGFHKGMpe3JldHVybiJzZXJ2ZXIiPT09Y31sZXQgajBlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3''@;'; put 'put ''IHowZShhcihMcyksd2luZG93KX0pLGN9KSgpO2NsYXNzIHowZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZG9jdW1lbnQ9bCx0aGlzLndpbmRvdz1hLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheShsKT8oKT0+bDpsfWdldFNjcm9s''@;'; put 'put ''bFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKT9bdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsdGhpcy53aW5kb3cucGFnZVlPZmZzZXRdOlswLDBdfXNjcm9sbFRvUG9zaXRpb24obCl7dGhpcy5zdXBwb3J0c1Njcm9sbGluZygpJiZ0aGlzLndpbmRvdy5zY3JvbGxU''@;'; put 'put ''byhsWzBdLGxbMV0pfXNjcm9sbFRvQW5jaG9yKGwpe2lmKCF0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpcmV0dXJuO2NvbnN0IGE9ZnVuY3Rpb24gVTBlKGMsbCl7Y29uc3QgYT1jLmdldEVsZW1lbnRCeUlkKGwpfHxjLmdldEVsZW1lbnRzQnlOYW1lKGwpWzBdO2lmKGEpcmV0dXJuIGE7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlVHJlZVdhbGtlciYmYy5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgYy5ib2R5LmF0dGFjaFNoYWRvdyl7Y29uc3QgZD1jLmNyZWF0ZVRyZWVXYWxrZXIoYy5ib2R5LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtsZXQgaD1kLmN1cnJlbnROb2Rl''@;'; put 'put ''O2Zvcig7aDspe2NvbnN0IGY9aC5zaGFkb3dSb290O2lmKGYpe2NvbnN0IF89Zi5nZXRFbGVtZW50QnlJZChsKXx8Zi5xdWVyeVNlbGVjdG9yKGBbbmFtZT0iJHtsfSJdYCk7aWYoXylyZXR1cm4gX31oPWQubmV4dE5vZGUoKX19cmV0dXJuIG51bGx9KHRoaXMuZG9jdW1lbnQsbCk7YSYmKHRo''@;'; put 'put ''aXMuc2Nyb2xsVG9FbGVtZW50KGEpLGEuZm9jdXMoKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe2NvbnN0IGE9dGhpcy53aW5kb3cuaGlzdG9yeTthJiZhLnNjcm9sbFJlc3RvcmF0aW9uJiYoYS5zY3JvbGxSZXN0''@;'; put 'put ''b3JhdGlvbj1sKX19c2Nyb2xsVG9FbGVtZW50KGwpe2NvbnN0IGE9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWEubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxoPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGY9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxU''@;'; put 'put ''byhkLWZbMF0saC1mWzFdKX1zdXBwb3J0U2Nyb2xsUmVzdG9yYXRpb24oKXt0cnl7aWYoIXRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKSlyZXR1cm4hMTtjb25zdCBsPWxHKHRoaXMud2luZG93Lmhpc3RvcnkpfHxsRyhPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy53aW5kb3cuaGlzdG9yeSkp''@;'; put 'put ''O3JldHVybiEoIWx8fCFsLndyaXRhYmxlJiYhbC5zZXQpfWNhdGNoe3JldHVybiExfX1zdXBwb3J0c1Njcm9sbGluZygpe3RyeXtyZXR1cm4hIXRoaXMud2luZG93JiYhIXRoaXMud2luZG93LnNjcm9sbFRvJiYicGFnZVhPZmZzZXQiaW4gdGhpcy53aW5kb3d9Y2F0Y2h7cmV0dXJuITF9fX1m''@;'; put 'put ''dW5jdGlvbiBsRyhjKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLCJzY3JvbGxSZXN0b3JhdGlvbiIpfWNsYXNzIGNHe31jbGFzcyBoMWUgZXh0ZW5kcyBNdWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9''@;'; put 'put ''ITB9fWNsYXNzIEVPIGV4dGVuZHMgaDFle3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiBTdWUoYyl7c098fChzTz1jKX0obmV3IEVPKX1vbkFuZENhbmNlbChsLGEsZCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCl9''@;'; put 'put ''fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwp''@;'; put 'put ''fWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5F''@;'; put 'put ''TEVNRU5UX05PREV9aXNTaGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3VtZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VI''@;'; put 'put ''cmVmKGwpe2NvbnN0IGE9ZnVuY3Rpb24gZjFlKCl7cmV0dXJuIEFfPUFffHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksQV8/QV8uZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0oKTtyZXR1cm4gbnVsbD09YT9udWxsOmZ1bmN0aW9uIHAxZShjKXtmeD1meHx8ZG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgiYSIpLGZ4LnNldEF0dHJpYnV0ZSgiaHJlZiIsYyk7Y29uc3QgbD1meC5wYXRobmFtZTtyZXR1cm4iLyI9PT1sLmNoYXJBdCgwKT9sOmAvJHtsfWB9KGEpfXJlc2V0QmFzZUVsZW1lbnQoKXtBXz1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9y''@;'; put 'put ''LnVzZXJBZ2VudH1nZXRDb29raWUobCl7cmV0dXJuIFhXKGRvY3VtZW50LmNvb2tpZSxsKX19bGV0IGZ4LEFfPW51bGwsbTFlPSgoKT0+e2NsYXNzIGN7YnVpbGQoKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh''@;'; put 'put ''fHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBrTz1uZXcgTWkoIkV2ZW50TWFuYWdlclBsdWdpbnMiKTtsZXQgcEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3pvbmU9ZCx0aGlzLl9ldmVudE5hbWVU''@;'; put 'put ''b1BsdWdpbj1uZXcgTWFwLGEuZm9yRWFjaChoPT57aC5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWEuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZCkuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl9Z2V0Wm9u''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGEpe2xldCBkPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChhKTtpZihkKXJldHVybiBkO2lmKGQ9dGhpcy5fcGx1Z2lucy5maW5kKGY9PmYuc3VwcG9ydHMoYSkpLCFkKXRocm93IG5ldyBBcig1MTAxLCExKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGEsZCksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa08pLGFyKE5vKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgZ0d7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7dGhpcy5fZG9jPWx9fWNvbnN0IEFPPSJuZy1hcHAtaWQiO2xldCBtRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGY9e30pe3RoaXMuZG9jPWEsdGhpcy5hcHBJZD1kLHRoaXMubm9uY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLnN0eWxlUmVmPW5ldyBN''@;'; put 'put ''YXAsdGhpcy5ob3N0Tm9kZXM9bmV3IFNldCx0aGlzLnN0eWxlTm9kZXNJbkRPTT10aGlzLmNvbGxlY3RTZXJ2ZXJSZW5kZXJlZFN0eWxlcygpLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1hRyhmKSx0aGlzLnJlc2V0SG9zdE5vZGVzKCl9YWRkU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpMT09''@;'; put 'put ''PXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLDEpJiZ0aGlzLm9uU3R5bGVBZGRlZChkKX1yZW1vdmVTdHlsZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSl0aGlzLmNoYW5nZVVzYWdlQ291bnQoZCwtMSk8PTAmJnRoaXMub25TdHlsZVJlbW92ZWQoZCl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMu''@;'; put 'put ''c3R5bGVOb2Rlc0luRE9NO2EmJihhLmZvckVhY2goZD0+ZC5yZW1vdmUoKSksYS5jbGVhcigpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMub25TdHlsZVJlbW92ZWQoZCk7dGhpcy5yZXNldEhvc3ROb2RlcygpfWFkZEhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuYWRk''@;'; put 'put ''KGEpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5hZGRTdHlsZVRvSG9zdChhLGQpfXJlbW92ZUhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuZGVsZXRlKGEpfWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlUmVmLmtleXMoKX1vblN0eWxlQWRkZWQoYSl7Zm9y''@;'; put 'put ''KGNvbnN0IGQgb2YgdGhpcy5ob3N0Tm9kZXMpdGhpcy5hZGRTdHlsZVRvSG9zdChkLGEpfW9uU3R5bGVSZW1vdmVkKGEpe2NvbnN0IGQ9dGhpcy5zdHlsZVJlZjtkLmdldChhKT8uZWxlbWVudHM/LmZvckVhY2goaD0+aC5yZW1vdmUoKSksZC5kZWxldGUoYSl9Y29sbGVjdFNlcnZlclJlbmRl''@;'; put 'put ''cmVkU3R5bGVzKCl7Y29uc3QgYT10aGlzLmRvYy5oZWFkPy5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVske0FPfT0iJHt0aGlzLmFwcElkfSJdYCk7aWYoYT8ubGVuZ3RoKXtjb25zdCBkPW5ldyBNYXA7cmV0dXJuIGEuZm9yRWFjaChoPT57bnVsbCE9aC50ZXh0Q29udGVudCYmZC5zZXQoaC50''@;'; put 'put ''ZXh0Q29udGVudCxoKX0pLGR9cmV0dXJuIG51bGx9Y2hhbmdlVXNhZ2VDb3VudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZVJlZjtpZihoLmhhcyhhKSl7Y29uc3QgZj1oLmdldChhKTtyZXR1cm4gZi51c2FnZSs9ZCxmLnVzYWdlfXJldHVybiBoLnNldChhLHt1c2FnZTpkLGVsZW1lbnRzOltd''@;'; put 'put ''fSksZH1nZXRTdHlsZUVsZW1lbnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVOb2Rlc0luRE9NLGY9aD8uZ2V0KGQpO2lmKGY/LnBhcmVudE5vZGU9PT1hKXJldHVybiBoLmRlbGV0ZShkKSxmLnJlbW92ZUF0dHJpYnV0ZShBTyksZjt7Y29uc3QgXz10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJz''@;'; put 'put ''dHlsZSIpO3JldHVybiB0aGlzLm5vbmNlJiZfLnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2UpLF8udGV4dENvbnRlbnQ9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJl8uc2V0QXR0cmlidXRlKEFPLHRoaXMuYXBwSWQpLF99fWFkZFN0eWxlVG9Ib3N0KGEsZCl7Y29uc3QgaD10aGlz''@;'; put 'put ''LmdldFN0eWxlRWxlbWVudChhLGQpO2EuYXBwZW5kQ2hpbGQoaCk7Y29uc3QgZj10aGlzLnN0eWxlUmVmLF89Zi5nZXQoZCk/LmVsZW1lbnRzO18/Xy5wdXNoKGgpOmYuc2V0KGQse2VsZW1lbnRzOltoXSx1c2FnZToxfSl9cmVzZXRIb3N0Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVz''@;'; put 'put ''O2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTHMpLGFyKGE2KSxhcihsNiw4KSxhcihHcykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgp''@;'; put 'put ''O2NvbnN0IFRPPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxu''@;'; put 'put ''czoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LERPPS8lQ09NUCUvZyx5MWU9bmV3IE1pKCJSZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5j''@;'; put 'put ''dGlvbiBfRyhjLGwpe3JldHVybiBsLm1hcChhPT5hLnJlcGxhY2UoRE8sYykpfWxldCBJTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWU9bnVsbCl7dGhpcy5ldmVudE1hbmFnZXI9YSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZCx0aGlzLmFwcElkPWgsdGhpcy5y''@;'; put 'put ''ZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWYsdGhpcy5kb2M9Xyx0aGlzLnBsYXRmb3JtSWQ9VCx0aGlzLm5nWm9uZT1XLHRoaXMubm9uY2U9aWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFHKFQpLHRoaXMuZGVmYXVsdFJlbmRlcmVyPW5l''@;'; put 'put ''dyBMTyhhLF8sVyx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXIpfWNyZWF0ZVJlbmRlcmVyKGEsZCl7aWYoIWF8fCFkKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjt0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJmQuZW5jYXBzdWxhdGlvbj09PU9jLlNoYWRvd0RvbSYmKGQ9ey4uLmQsZW5jYXBzdWxh''@;'; put 'put ''dGlvbjpPYy5FbXVsYXRlZH0pO2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZVJlbmRlcmVyKGEsZCk7cmV0dXJuIGggaW5zdGFuY2VvZiB5Rz9oLmFwcGx5VG9Ib3N0KGEpOmggaW5zdGFuY2VvZiBSTyYmaC5hcHBseVN0eWxlcygpLGh9Z2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpe2NvbnN0IGg9''@;'; put 'put ''dGhpcy5yZW5kZXJlckJ5Q29tcElkO2xldCBmPWguZ2V0KGQuaWQpO2lmKCFmKXtjb25zdCBfPXRoaXMuZG9jLFQ9dGhpcy5uZ1pvbmUsVz10aGlzLmV2ZW50TWFuYWdlcixpZT10aGlzLnNoYXJlZFN0eWxlc0hvc3QsZ2U9dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95LHdlPXRoaXMu''@;'; put 'put ''cGxhdGZvcm1Jc1NlcnZlcjtzd2l0Y2goZC5lbmNhcHN1bGF0aW9uKXtjYXNlIE9jLkVtdWxhdGVkOmY9bmV3IHlHKFcsaWUsZCx0aGlzLmFwcElkLGdlLF8sVCx3ZSk7YnJlYWs7Y2FzZSBPYy5TaGFkb3dEb206cmV0dXJuIG5ldyBNMWUoVyxpZSxhLGQsXyxULHRoaXMubm9uY2Usd2UpO2Rl''@;'; put 'put ''ZmF1bHQ6Zj1uZXcgUk8oVyxpZSxkLGdlLF8sVCx3ZSl9aC5zZXQoZC5pZCxmKX1yZXR1cm4gZn1uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihwRyksYXIobUcpLGFy''@;'; put 'put ''KGE2KSxhcih5MWUpLGFyKExzKSxhcihHcyksYXIoTm8pLGFyKGw2KSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgTE97Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5ldmVudE1hbmFnZXI9bCx0aGlzLmRvYz1hLHRoaXMubmda''@;'; put 'put ''b25lPWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWgsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3koKXt9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiBhP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhUT1thXXx8YSxsKTp0aGlzLmRv''@;'; put 'put ''Yy5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4gdGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUobCl9YXBwZW5kQ2hpbGQobCxhKXsoYkcobCk/bC5jb250ZW50OmwpLmFwcGVuZENoaWxk''@;'; put 'put ''KGEpfWluc2VydEJlZm9yZShsLGEsZCl7bCYmKGJHKGwpP2wuY29udGVudDpsKS5pbnNlcnRCZWZvcmUoYSxkKX1yZW1vdmVDaGlsZChsLGEpe2wmJmwucmVtb3ZlQ2hpbGQoYSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtsZXQgZD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5kb2MucXVlcnlT''@;'; put 'put ''ZWxlY3RvcihsKTpsO2lmKCFkKXRocm93IG5ldyBBcigtNTEwNCwhMSk7cmV0dXJuIGF8fChkLnRleHRDb250ZW50PSIiKSxkfXBhcmVudE5vZGUobCl7cmV0dXJuIGwucGFyZW50Tm9kZX1uZXh0U2libGluZyhsKXtyZXR1cm4gbC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUobCxhLGQsaCl7''@;'; put 'put ''aWYoaCl7YT1oKyI6IithO2NvbnN0IGY9VE9baF07Zj9sLnNldEF0dHJpYnV0ZU5TKGYsYSxkKTpsLnNldEF0dHJpYnV0ZShhLGQpfWVsc2UgbC5zZXRBdHRyaWJ1dGUoYSxkKX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe2lmKGQpe2NvbnN0IGg9VE9bZF07aD9sLnJlbW92ZUF0dHJpYnV0ZU5T''@;'; put 'put ''KGgsYSk6bC5yZW1vdmVBdHRyaWJ1dGUoYCR7ZH06JHthfWApfWVsc2UgbC5yZW1vdmVBdHRyaWJ1dGUoYSl9YWRkQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5hZGQoYSl9cmVtb3ZlQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5yZW1vdmUoYSl9c2V0U3R5bGUobCxhLGQsaCl7aCYoWTIuRGFzaENh''@;'; put 'put ''c2V8WTIuSW1wb3J0YW50KT9sLnN0eWxlLnNldFByb3BlcnR5KGEsZCxoJlkyLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6bC5zdHlsZVthXT1kfXJlbW92ZVN0eWxlKGwsYSxkKXtkJlkyLkRhc2hDYXNlP2wuc3R5bGUucmVtb3ZlUHJvcGVydHkoYSk6bC5zdHlsZVthXT0iIn1zZXRQcm9w''@;'; put 'put ''ZXJ0eShsLGEsZCl7bFthXT1kfXNldFZhbHVlKGwsYSl7bC5ub2RlVmFsdWU9YX1saXN0ZW4obCxhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmIShsPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5kb2MsbCkpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFy''@;'; put 'put ''Z2V0ICR7bH0gZm9yIGV2ZW50ICR7YX1gKTtyZXR1cm4gdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLGEsdGhpcy5kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGQpKX1kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGwpe3JldHVybiBhPT57aWYoIl9fbmdVbndyYXBfXyI9PT1hKXJl''@;'; put 'put ''dHVybiBsOyExPT09KHRoaXMucGxhdGZvcm1Jc1NlcnZlcj90aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpPT5sKGEpKTpsKGEpKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gYkcoYyl7cmV0dXJuIlRFTVBMQVRFIj09PWMudGFnTmFtZSYmdm9pZCAwIT09Yy5jb250ZW50fWNsYXNz''@;'; put 'put ''IE0xZSBleHRlbmRzIExPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7c3VwZXIobCxmLF8sVyksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5ob3N0RWw9ZCx0aGlzLnNoYWRvd1Jvb3Q9ZC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0''@;'; put 'put ''LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtjb25zdCBpZT1fRyhoLmlkLGguc3R5bGVzKTtmb3IoY29uc3QgZ2Ugb2YgaWUpe2NvbnN0IHdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7VCYmd2Uuc2V0QXR0cmlidXRlKCJub25jZSIsVCksd2UudGV4dENvbnRlbnQ9Z2UsdGhp''@;'; put 'put ''cy5zaGFkb3dSb290LmFwcGVuZENoaWxkKHdlKX19bm9kZU9yU2hhZG93Um9vdChsKXtyZXR1cm4gbD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDpsfWFwcGVuZENoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1pbnNl''@;'; put 'put ''cnRCZWZvcmUobCxhLGQpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX1jbGFzcyBSTyBleHRlbmRzIExPe2NvbnN0cnVjdG9yKGwsYSxkLGgs''@;'; put 'put ''ZixfLFQsVyl7c3VwZXIobCxmLF8sVCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWgsdGhpcy5zdHlsZXM9Vz9fRyhXLGQuc3R5bGVzKTpkLnN0eWxlc31hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXMo''@;'; put 'put ''dGhpcy5zdHlsZXMpfWRlc3Ryb3koKXt0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kmJnRoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVTdHlsZXModGhpcy5zdHlsZXMpfX1jbGFzcyB5RyBleHRlbmRzIFJPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9aCsi''@;'; put 'put ''LSIrZC5pZDtzdXBlcihsLGEsZCxmLF8sVCxXLGllKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uIHcxZShjKXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2UoRE8sYyl9KGllKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uIEMxZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJl''@;'; put 'put ''cGxhY2UoRE8sYyl9KGllKX1hcHBseVRvSG9zdChsKXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1dGUobCx0aGlzLmhvc3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KGwsYSl7Y29uc3QgZD1zdXBlci5jcmVhdGVFbGVtZW50KGwsYSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0''@;'; put 'put ''ZShkLHRoaXMuY29udGVudEF0dHIsIiIpLGR9fWxldCB4MWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGdHe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLCExKSwo''@;'; put 'put ''KT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX1yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5yZW1vdmVFdmVudExpc3RlbmVyKGQsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKExzKSl9LGMuXHUwMjc1cHJv''@;'; put 'put ''dj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qgd0c9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sRTFlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNj''@;'; put 'put ''OiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxrMWU9e2FsdDpjPT5jLmFsdEtleSxjb250cm9sOmM9PmMuY3RybEtl''@;'; put 'put ''eSxtZXRhOmM9PmMubWV0YUtleSxzaGlmdDpjPT5jLnNoaWZ0S2V5fTtsZXQgQTFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBnR3tjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4gbnVsbCE9Yy5wYXJzZUV2ZW50TmFtZShhKX1hZGRFdmVudExpc3RlbmVyKGEsZCxo''@;'; put 'put ''KXtjb25zdCBmPWMucGFyc2VFdmVudE5hbWUoZCksXz1jLmV2ZW50Q2FsbGJhY2soZi5mdWxsS2V5LGgsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmFwKCkub25BbmRDYW5jZWwoYSxmLmRvbUV2ZW50''@;'; put 'put ''TmFtZSxfKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGEpe2NvbnN0IGQ9YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIiksaD1kLnNoaWZ0KCk7aWYoMD09PWQubGVuZ3RofHwia2V5ZG93biIhPT1oJiYia2V5dXAiIT09aClyZXR1cm4gbnVsbDtjb25zdCBmPWMuX25vcm1hbGl6ZUtleShkLnBv''@;'; put 'put ''cCgpKTtsZXQgXz0iIixUPWQuaW5kZXhPZigiY29kZSIpO2lmKFQ+LTEmJihkLnNwbGljZShULDEpLF89ImNvZGUuIiksd0cuZm9yRWFjaChpZT0+e2NvbnN0IGdlPWQuaW5kZXhPZihpZSk7Z2U+LTEmJihkLnNwbGljZShnZSwxKSxfKz1pZSsiLiIpfSksXys9ZiwwIT1kLmxlbmd0aHx8MD09''@;'; put 'put ''PWYubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IFc9e307cmV0dXJuIFcuZG9tRXZlbnROYW1lPWgsVy5mdWxsS2V5PV8sV31zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGEsZCl7bGV0IGg9RTFlW2Eua2V5XXx8YS5rZXksZj0iIjtyZXR1cm4gZC5pbmRleE9mKCJjb2RlLiIpPi0xJiYo''@;'; put 'put ''aD1hLmNvZGUsZj0iY29kZS4iKSwhKG51bGw9PWh8fCFoKSYmKGg9aC50b0xvd2VyQ2FzZSgpLCIgIj09PWg/aD0ic3BhY2UiOiIuIj09PWgmJihoPSJkb3QiKSx3Ry5mb3JFYWNoKF89PntfIT09aCYmKDAsazFlW19dKShhKSYmKGYrPV8rIi4iKX0pLGYrPWgsZj09PWQpfXN0YXRpYyBldmVu''@;'; put 'put ''dENhbGxiYWNrKGEsZCxoKXtyZXR1cm4gZj0+e2MubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGYsYSkmJmgucnVuR3VhcmRlZCgoKT0+ZChmKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGEpe3JldHVybiJlc2MiPT09YT8iZXNjYXBlIjphfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShhcihMcykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IFNHPVt7cHJvdmlkZTpHcyx1c2VWYWx1ZTpzR30se3Byb3ZpZGU6UUMsdXNlVmFsdWU6ZnVuY3Rpb24gVDFlKCl7RU8ubWFrZUN1cnJlbnQo''@;'; put 'put ''KX0sbXVsdGk6ITB9LHtwcm92aWRlOkxzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSTFlKCl7cmV0dXJuIGZ1bmN0aW9uIFBDKGMpe1c5PWN9KGRvY3VtZW50KSxkb2N1bWVudH0sZGVwczpbXX1dLEwxZT1nVyhkdWUsImJyb3dzZXIiLFNHKSxSMWU9bmV3IE1pKCIiKSxNRz1be3Byb3ZpZGU6cU0s''@;'; put 'put ''dXNlQ2xhc3M6Y2xhc3MgZzFle2FkZFRvV2luZG93KGwpe09pLmdldEFuZ3VsYXJUZXN0YWJpbGl0eT0oZCxoPSEwKT0+e2NvbnN0IGY9bC5maW5kVGVzdGFiaWxpdHlJblRyZWUoZCxoKTtpZihudWxsPT1mKXRocm93IG5ldyBBcig1MTAzLCExKTtyZXR1cm4gZn0sT2kuZ2V0QWxsQW5ndWxh''@;'; put 'put ''clRlc3RhYmlsaXRpZXM9KCk9PmwuZ2V0QWxsVGVzdGFiaWxpdGllcygpLE9pLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PmwuZ2V0QWxsUm9vdEVsZW1lbnRzKCksT2kuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChPaS5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksT2kuZnJhbWV3b3Jr''@;'; put 'put ''U3RhYmlsaXplcnMucHVzaChkPT57Y29uc3QgaD1PaS5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcygpO2xldCBmPWgubGVuZ3RoLF89ITE7Y29uc3QgVD1mdW5jdGlvbihXKXtfPV98fFcsZi0tLDA9PWYmJmQoXyl9O2guZm9yRWFjaChXPT57Vy53aGVuU3RhYmxlKFQpfSl9KX1maW5kVGVz''@;'; put 'put ''dGFiaWxpdHlJblRyZWUobCxhLGQpe3JldHVybiBudWxsPT1hP251bGw6bC5nZXRUZXN0YWJpbGl0eShhKT8/KGQ/YXAoKS5pc1NoYWRvd1Jvb3QoYSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYS5wYXJlbnRF''@;'; put 'put ''bGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119LHtwcm92aWRlOnVXLHVzZUNsYXNzOiRSLGRlcHM6W05vLHFSLHFNXX0se3Byb3ZpZGU6JFIsdXNlQ2xhc3M6JFIsZGVwczpbTm8scVIscU1dfV0seEc9W3twcm92aWRlOnQ1LHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6aGYsdXNlRmFjdG9y''@;'; put 'put ''eTpmdW5jdGlvbiBEMWUoKXtyZXR1cm4gbmV3IGhmfSxkZXBzOltdfSx7cHJvdmlkZTprTyx1c2VDbGFzczp4MWUsbXVsdGk6ITAsZGVwczpbTHMsTm8sR3NdfSx7cHJvdmlkZTprTyx1c2VDbGFzczpBMWUsbXVsdGk6ITAsZGVwczpbTHNdfSxJTyxtRyxwRyx7cHJvdmlkZTpZMyx1c2VFeGlz''@;'; put 'put ''dGluZzpJT30se3Byb3ZpZGU6Y0csdXNlQ2xhc3M6bTFlLGRlcHM6W119LFtdXTtsZXQgRUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6YTYsdXNlVmFsdWU6''@;'; put 'put ''YS5hcHBJZH1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoUjFlLDEyKSl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOlsuLi54RywuLi5NR10saW1wb3J0czpbb28saHVlXX0pLGN9KSgpLGtH''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jPWF9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5fZG9jLnRpdGxlfXNldFRpdGxlKGEpe3RoaXMuX2RvYy50aXRsZT1hfHwiIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTHMp''@;'; put 'put ''KX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hP25ldyBhOmZ1bmN0aW9uIFAxZSgpe3JldHVybiBuZXcga0coYXIoTHMpKX0oKSxkfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3R5cGVvZiB3aW5kb3c8InUiJiZ3''@;'; put 'put ''aW5kb3c7Rig3NDA5MiksRigzNDIwOSk7Y29uc3QgUE89e2ZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LEduPXtyb290UGFyYW06IiIsZGNMaWI6IiIseGxtYXBzOltdLGVkaXRvcjp7c3Rh''@;'; put 'put ''cnR1cFNldDohMSx0cmVlTm9kZUxpYnJhcmllczpbXSxsaWJzQW5kVGFibGVzOltdLGxpYnJhcmllczpbXSxsaWJyYXJ5OiIiLHRhYmxlOiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19''@;'; put 'put ''LHZpZXdlcjp7c3RhcnR1cFNldDohMSx0YWJsZXNTZXQ6ITEsbGlicmFyaWVzOltdLHRhYmxlczpudWxsLGxpYnJhcnk6IiIsdGFibGU6IiIsbGliaW5mbzpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixs''@;'; put 'put ''aWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfSxjdXJyZW50U2VsZWN0aW9uOiIifSx2aWV3Ym94ZXM6e30sbGluZWFnZTp7bGlicmFyeUxpc3Q6W10sdGFibGVzTGlzdDpbXSxjb2x1bW5zTGlzdDpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsbGliOiIiLHRhYmxlOiIiLGNvbHVtbjoiIixjdXJy''@;'; put 'put ''ZW50TGluZWFnZVBhdGhMaWJUYWJsZToiIixjdXJyZW50TGluZWFnZVBhdGhDb2x1bW46IiJ9LG1ldGFkYXRhOnttZXRhRGF0YUxpc3Q6dm9pZCAwLG1ldGFEYXRhU2VhcmNoOiIiLG1ldGFPYmplY3RMaXN0OltdLG1ldGFPYmplY3RTZWFyY2g6IiIsbWV0YVJlcG9zaXRvcmllczp2b2lkIDAs''@;'; put 'put ''c2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx2aXlhQXBpOntjb2xsZWN0aW9uc0xpc3Q6dm9pZCAwLGNvbGxlY3Rpb25zU2VhcmNoOiIiLHNlbGVjdGVkUmVwb3NpdG9yeToiIn0sdXNlcm5hdjp7dXNlckxpc3Q6dm9pZCAwLHVzZXJTZWFyY2g6IiIsZ3JvdXBMaXN0OnZvaWQgMCxncm91cFNlYXJj''@;'; put 'put ''aDoiIixyb2xlTGlzdDp2b2lkIDAscm9sZVNlYXJjaDoiIn0sb3BlcmF0b3JzOntudW1PcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSxjaGFyT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4i''@;'; put 'put ''LCJOT1QgSU4iLCJORSJdfX07dmFyIEtvPUYoMTY2NzYpLElHPUYubihLbyk7ZnVuY3Rpb24gTEcoYyxsLGEsZCxoLGYsXyl7dHJ5e3ZhciBUPWNbZl0oXyksVz1ULnZhbHVlfWNhdGNoKGllKXtyZXR1cm4gdm9pZCBhKGllKX1ULmRvbmU/bChXKTpQcm9taXNlLnJlc29sdmUoVykudGhlbihk''@;'; put 'put ''LGgpfWZ1bmN0aW9uIGZpKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMsYT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsaCl7dmFyIGY9Yy5hcHBseShsLGEpO2Z1bmN0aW9uIF8oVyl7TEcoZixkLGgsXyxULCJuZXh0IixXKX1mdW5jdGlvbiBUKFcpe0xH''@;'; put 'put ''KGYsZCxoLF8sVCwidGhyb3ciLFcpfV8odm9pZCAwKX0pfX1mdW5jdGlvbiBGTyhjKXtyZXR1cm4hIWMmJihjIGluc3RhbmNlb2YgS2V8fFkoYy5saWZ0KSYmWShjLnN1YnNjcmliZSkpfWNvbnN0e2lzQXJyYXk6QjFlfT1BcnJheSx7Z2V0UHJvdG90eXBlT2Y6ajFlLHByb3RvdHlwZTp6MWUs''@;'; put 'put ''a2V5czpVMWV9PU9iamVjdDtmdW5jdGlvbiBSRyhjKXtpZigxPT09Yy5sZW5ndGgpe2NvbnN0IGw9Y1swXTtpZihCMWUobCkpcmV0dXJue2FyZ3M6bCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uIFoxZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiZqMWUoYyk9PT16MWV9KGwpKXtj''@;'; put 'put ''b25zdCBhPVUxZShsKTtyZXR1cm57YXJnczphLm1hcChkPT5sW2RdKSxrZXlzOmF9fX1yZXR1cm57YXJnczpjLGtleXM6bnVsbH19Y29uc3R7aXNBcnJheTpZMWV9PUFycmF5O2Z1bmN0aW9uIEhPKGMpe3JldHVybiBNZShsPT5mdW5jdGlvbiBXMWUoYyxsKXtyZXR1cm4gWTFlKGwpP2MoLi4u''@;'; put 'put ''bCk6YyhsKX0oYyxsKSl9ZnVuY3Rpb24gT0coYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gWTYoLi4uYyl7Y29uc3QgbD1OMChjKSxhPVJjKGMpLHthcmdzOmQsa2V5czpofT1SRyhjKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIGVhKFtd''@;'; put 'put ''LGwpO2NvbnN0IGY9bmV3IEtlKGZ1bmN0aW9uIEcxZShjLGwsYT1PZSl7cmV0dXJuIGQ9PntQRyhsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IF89aCxUPWg7Zm9yKGxldCBXPTA7VzxoO1crKylQRyhsLCgpPT57Y29uc3QgaWU9ZWEoY1tXXSxsKTtsZXQgZ2U9''@;'; put 'put ''ITE7aWUuc3Vic2NyaWJlKFVlKGQsd2U9PntmW1ddPXdlLGdlfHwoZ2U9ITAsVC0tKSxUfHxkLm5leHQoYShmLnNsaWNlKCkpKX0sKCk9PnstLV98fGQuY29tcGxldGUoKX0pKX0sZCl9LGQpfX0oZCxsLGg/Xz0+T0coaCxfKTpPZSkpO3JldHVybiBhP2YucGlwZShITyhhKSk6Zn1mdW5jdGlv''@;'; put 'put ''biBQRyhjLGwsYSl7Yz9HaShhLGMsbCk6bCgpfWNvbnN0IHB4PVgoYz0+ZnVuY3Rpb24oKXtjKHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9KTtmdW5jdGlvbiBneCguLi5jKXtyZXR1cm4gZnVuY3Rpb24gJDFlKCl7''@;'; put 'put ''cmV0dXJuIFBpKDEpfSgpKGVhKGMsTjAoYykpKX1mdW5jdGlvbiBGRyhjKXtyZXR1cm4gbmV3IEtlKGw9PntLcihjKCkpLnN1YnNjcmliZShsKX0pfWZ1bmN0aW9uIFRfKGMsbCl7Y29uc3QgYT1ZKGMpP2M6KCk9PmMsZD1oPT5oLmVycm9yKGEoKSk7cmV0dXJuIG5ldyBLZShsP2g9Pmwuc2No''@;'; put 'put ''ZWR1bGUoZCwwLGgpOmQpfWZ1bmN0aW9uIE5PKCl7cmV0dXJuIFhlKChjLGwpPT57bGV0IGE9bnVsbDtjLl9yZWZDb3VudCsrO2NvbnN0IGQ9VWUobCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFjfHxjLl9yZWZDb3VudDw9MHx8MDwtLWMuX3JlZkNvdW50KXJldHVybiB2b2lkKGE9''@;'; put 'put ''bnVsbCk7Y29uc3QgaD1jLl9jb25uZWN0aW9uLGY9YTthPW51bGwsaCYmKCFmfHxoPT09ZikmJmgudW5zdWJzY3JpYmUoKSxsLnVuc3Vic2NyaWJlKCl9KTtjLnN1YnNjcmliZShkKSxkLmNsb3NlZHx8KGE9Yy5jb25uZWN0KCkpfSl9Y2xhc3MgSEcgZXh0ZW5kcyBLZXtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''LGEpe3N1cGVyKCksdGhpcy5zb3VyY2U9bCx0aGlzLnN1YmplY3RGYWN0b3J5PWEsdGhpcy5fc3ViamVjdD1udWxsLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5fY29ubmVjdGlvbj1udWxsLHFlKGwpJiYodGhpcy5saWZ0PWwubGlmdCl9X3N1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5nZXRTdWJq''@;'; put 'put ''ZWN0KCkuc3Vic2NyaWJlKGwpfWdldFN1YmplY3QoKXtjb25zdCBsPXRoaXMuX3N1YmplY3Q7cmV0dXJuKCFsfHxsLmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2NvbnN0''@;'; put 'put ''e19jb25uZWN0aW9uOmx9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsbD8udW5zdWJzY3JpYmUoKX1jb25uZWN0KCl7bGV0IGw9dGhpcy5fY29ubmVjdGlvbjtpZighbCl7bD10aGlzLl9jb25uZWN0aW9uPW5ldyBlZTtjb25zdCBhPXRoaXMuZ2V0U3ViamVjdCgp''@;'; put 'put ''O2wuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShVZShhLHZvaWQgMCwoKT0+e3RoaXMuX3RlYXJkb3duKCksYS5jb21wbGV0ZSgpfSxkPT57dGhpcy5fdGVhcmRvd24oKSxhLmVycm9yKGQpfSwoKT0+dGhpcy5fdGVhcmRvd24oKSkpKSxsLmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVs''@;'; put 'put ''bCxsPWVlLkVNUFRZKX1yZXR1cm4gbH1yZWZDb3VudCgpe3JldHVybiBOTygpKHRoaXMpfX1mdW5jdGlvbiBpZChjKXtyZXR1cm4gYzw9MD8oKT0+TG86WGUoKGwsYSk9PntsZXQgZD0wO2wuc3Vic2NyaWJlKFVlKGEsaD0+eysrZDw9YyYmKGEubmV4dChoKSxjPD1kJiZhLmNvbXBsZXRlKCkp''@;'; put 'put ''fSkpfSl9ZnVuY3Rpb24gY3AoLi4uYyl7Y29uc3QgbD1OMChjKTtyZXR1cm4gWGUoKGEsZCk9PnsobD9neChjLGEsbCk6Z3goYyxhKSkuc3Vic2NyaWJlKGQpfSl9ZnVuY3Rpb24gSWEoYyxsKXtyZXR1cm4gWGUoKGEsZCk9PntsZXQgaD0wO2Euc3Vic2NyaWJlKFVlKGQsZj0+Yy5jYWxsKGws''@;'; put 'put ''ZixoKyspJiZkLm5leHQoZikpKX0pfWZ1bmN0aW9uIG14KGMpe3JldHVybiBYZSgobCxhKT0+e2xldCBkPSExO2wuc3Vic2NyaWJlKFVlKGEsaD0+e2Q9ITAsYS5uZXh0KGgpfSwoKT0+e2R8fGEubmV4dChjKSxhLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBORyhjPXExZSl7cmV0dXJuIFhl''@;'; put 'put ''KChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoVWUoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT5kP2EuY29tcGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIHExZSgpe3JldHVybiBuZXcgcHh9ZnVuY3Rpb24gdXAoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7''@;'; put 'put ''cmV0dXJuIGQ9PmQucGlwZShjP0lhKChoLGYpPT5jKGgsZixkKSk6T2UsaWQoMSksYT9teChsKTpORygoKT0+bmV3IHB4KSl9ZnVuY3Rpb24gVzYoYyxsKXtyZXR1cm4gWShsKT95cihjLGwsMSk6eXIoYywxKX1mdW5jdGlvbiB6YyhjLGwsYSl7Y29uc3QgZD1ZKGMpfHxsfHxhP3tuZXh0OmMs''@;'; put 'put ''ZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP1hlKChoLGYpPT57dmFyIF87bnVsbD09PShfPWQuc3Vic2NyaWJlKXx8dm9pZCAwPT09X3x8Xy5jYWxsKGQpO2xldCBUPSEwO2guc3Vic2NyaWJlKFVlKGYsVz0+e3ZhciBpZTtudWxsPT09KGllPWQubmV4dCl8fHZvaWQgMD09PWllfHxp''@;'; put 'put ''ZS5jYWxsKGQsVyksZi5uZXh0KFcpfSwoKT0+e3ZhciBXO1Q9ITEsbnVsbD09PShXPWQuY29tcGxldGUpfHx2b2lkIDA9PT1XfHxXLmNhbGwoZCksZi5jb21wbGV0ZSgpfSxXPT57dmFyIGllO1Q9ITEsbnVsbD09PShpZT1kLmVycm9yKXx8dm9pZCAwPT09aWV8fGllLmNhbGwoZCxXKSxmLmVy''@;'; put 'put ''cm9yKFcpfSwoKT0+e3ZhciBXLGllO1QmJihudWxsPT09KFc9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PVd8fFcuY2FsbChkKSksbnVsbD09PShpZT1kLmZpbmFsaXplKXx8dm9pZCAwPT09aWV8fGllLmNhbGwoZCl9KSl9KTpPZX1mdW5jdGlvbiBBNShjKXtyZXR1cm4gWGUoKGwsYSk9Pnts''@;'; put 'put ''ZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKFVlKGEsdm9pZCAwLHZvaWQgMCxfPT57Zj1LcihjKF8sQTUoYykobCkpKSxkPyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEp''@;'; put 'put ''KX0pfWZ1bmN0aW9uIFZPKGMpe3JldHVybiBjPD0wPygpPT5MbzpYZSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKFVlKGEsaD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAs''@;'; put 'put ''KCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiBEXyhjKXtyZXR1cm4gWGUoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxseXthLmFkZChjKX19KX1jb25zdCBscz0icHJpbWFyeSIsSV89U3ltYm9sKCJSb3V0ZVRpdGxlIik7Y2xhc3MgUTFle2NvbnN0cnVjdG9yKGwpe3RoaXMucGFy''@;'; put 'put ''YW1zPWx8fHt9fWhhcyhsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLGwpfWdldChsKXtpZih0aGlzLmhhcyhsKSl7Y29uc3QgYT10aGlzLnBhcmFtc1tsXTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9hWzBdOmF9cmV0dXJuIG51bGx9''@;'; put 'put ''Z2V0QWxsKGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5pc0FycmF5KGEpP2E6W2FdfXJldHVybltdfWdldCBrZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKX19ZnVuY3Rpb24gRzYoYyl7cmV0dXJuIG5ldyBRMWUoYyl9''@;'; put 'put ''ZnVuY3Rpb24gZWRlKGMsbCxhKXtjb25zdCBkPWEucGF0aC5zcGxpdCgiLyIpO2lmKGQubGVuZ3RoPmMubGVuZ3RofHwiZnVsbCI9PT1hLnBhdGhNYXRjaCYmKGwuaGFzQ2hpbGRyZW4oKXx8ZC5sZW5ndGg8Yy5sZW5ndGgpKXJldHVybiBudWxsO2NvbnN0IGg9e307Zm9yKGxldCBmPTA7Zjxk''@;'; put 'put ''Lmxlbmd0aDtmKyspe2NvbnN0IF89ZFtmXSxUPWNbZl07aWYoXy5zdGFydHNXaXRoKCI6IikpaFtfLnN1YnN0cmluZygxKV09VDtlbHNlIGlmKF8hPT1ULnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOmMuc2xpY2UoMCxkLmxlbmd0aCkscG9zUGFyYW1zOmh9fWZ1bmN0aW9uIHJo''@;'; put 'put ''KGMsbCl7Y29uc3QgYT1jP09iamVjdC5rZXlzKGMpOnZvaWQgMCxkPWw/T2JqZWN0LmtleXMobCk6dm9pZCAwO2lmKCFhfHwhZHx8YS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2xldCBoO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKWlmKGg9YVtmXSwhQkcoY1toXSxsW2hdKSlyZXR1''@;'; put 'put ''cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBCRyhjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykmJkFycmF5LmlzQXJyYXkobCkpe2lmKGMubGVuZ3RoIT09bC5sZW5ndGgpcmV0dXJuITE7Y29uc3QgYT1bLi4uY10uc29ydCgpLGQ9Wy4uLmxdLnNvcnQoKTtyZXR1cm4gYS5ldmVyeSgoaCxmKT0+ZFtm''@;'; put 'put ''XT09PWgpfXJldHVybiBjPT09bH1mdW5jdGlvbiBqRyhjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gZHAoYyl7cmV0dXJuIEZPKGMpP2M6djUoYyk/ZWEoUHJvbWlzZS5yZXNvbHZlKGMpKTpXaShjKX1jb25zdCBuZGU9e2V4YWN0OmZ1bmN0aW9uIFpH''@;'; put 'put ''KGMsbCxhKXtpZighVDUoYy5zZWdtZW50cyxsLnNlZ21lbnRzKXx8IXZ4KGMuc2VnbWVudHMsbC5zZWdtZW50cyxhKXx8Yy5udW1iZXJPZkNoaWxkcmVuIT09bC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiExO2Zvcihjb25zdCBkIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5bZF18fCFa''@;'; put 'put ''RyhjLmNoaWxkcmVuW2RdLGwuY2hpbGRyZW5bZF0sYSkpcmV0dXJuITE7cmV0dXJuITB9LHN1YnNldDpZR30sekc9e2V4YWN0OmZ1bmN0aW9uIHJkZShjLGwpe3JldHVybiByaChjLGwpfSxzdWJzZXQ6ZnVuY3Rpb24gaWRlKGMsbCl7cmV0dXJuIE9iamVjdC5rZXlzKGwpLmxlbmd0aDw9T2Jq''@;'; put 'put ''ZWN0LmtleXMoYykubGVuZ3RoJiZPYmplY3Qua2V5cyhsKS5ldmVyeShhPT5CRyhjW2FdLGxbYV0pKX0saWdub3JlZDooKT0+ITB9O2Z1bmN0aW9uIFVHKGMsbCxhKXtyZXR1cm4gbmRlW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZ6R1thLnF1ZXJ5UGFyYW1zXShj''@;'; put 'put ''LnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpJiYhKCJleGFjdCI9PT1hLmZyYWdtZW50JiZjLmZyYWdtZW50IT09bC5mcmFnbWVudCl9ZnVuY3Rpb24gWUcoYyxsLGEpe3JldHVybiBXRyhjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBXRyhjLGwsYSxkKXtpZihjLnNlZ21lbnRzLmxlbmd0''@;'; put 'put ''aD5hLmxlbmd0aCl7Y29uc3QgaD1jLnNlZ21lbnRzLnNsaWNlKDAsYS5sZW5ndGgpO3JldHVybiEoIVQ1KGgsYSl8fGwuaGFzQ2hpbGRyZW4oKXx8IXZ4KGgsYSxkKSl9aWYoYy5zZWdtZW50cy5sZW5ndGg9PT1hLmxlbmd0aCl7aWYoIVQ1KGMuc2VnbWVudHMsYSl8fCF2eChjLnNlZ21lbnRz''@;'; put 'put ''LGEsZCkpcmV0dXJuITE7Zm9yKGNvbnN0IGggaW4gbC5jaGlsZHJlbilpZighYy5jaGlsZHJlbltoXXx8IVlHKGMuY2hpbGRyZW5baF0sbC5jaGlsZHJlbltoXSxkKSlyZXR1cm4hMTtyZXR1cm4hMH17Y29uc3QgaD1hLnNsaWNlKDAsYy5zZWdtZW50cy5sZW5ndGgpLGY9YS5zbGljZShjLnNl''@;'; put 'put ''Z21lbnRzLmxlbmd0aCk7cmV0dXJuISEoVDUoYy5zZWdtZW50cyxoKSYmdngoYy5zZWdtZW50cyxoLGQpJiZjLmNoaWxkcmVuW2xzXSkmJldHKGMuY2hpbGRyZW5bbHNdLGwsZixkKX19ZnVuY3Rpb24gdngoYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT56R1thXShjW2hdLnBhcmFtZXRl''@;'; put 'put ''cnMsZC5wYXJhbWV0ZXJzKSl9Y2xhc3MgJDZ7Y29uc3RydWN0b3IobD1uZXcgeWEoW10se30pLGE9e30sZD1udWxsKXt0aGlzLnJvb3Q9bCx0aGlzLnF1ZXJ5UGFyYW1zPWEsdGhpcy5mcmFnbWVudD1kfWdldCBxdWVyeVBhcmFtTWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0''@;'; put 'put ''aGlzLl9xdWVyeVBhcmFtTWFwPUc2KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuIGFkZS5zZXJpYWxpemUodGhpcyl9fWNsYXNzIHlhe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5zZWdtZW50cz1sLHRoaXMuY2hpbGRyZW49YSx0aGlzLnBh''@;'; put 'put ''cmVudD1udWxsLE9iamVjdC52YWx1ZXMoYSkuZm9yRWFjaChkPT5kLnBhcmVudD10aGlzKX1oYXNDaGlsZHJlbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH1nZXQgbnVtYmVyT2ZDaGlsZHJlbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5sZW5ndGh9dG9T''@;'; put 'put ''dHJpbmcoKXtyZXR1cm4gX3godGhpcyl9fWNsYXNzIExfe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5wYXRoPWwsdGhpcy5wYXJhbWV0ZXJzPWF9Z2V0IHBhcmFtZXRlck1hcCgpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXB8fCh0aGlzLl9wYXJhbWV0ZXJNYXA9RzYodGhpcy5wYXJhbWV0ZXJz''@;'; put 'put ''KSksdGhpcy5fcGFyYW1ldGVyTWFwfXRvU3RyaW5nKCl7cmV0dXJuIHFHKHRoaXMpfX1mdW5jdGlvbiBUNShjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCBSXz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJPfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIEJPe3BhcnNlKGwpe2NvbnN0IGE9bmV3IF9kZShsKTtyZXR1cm4g''@;'; put 'put ''bmV3ICQ2KGEucGFyc2VSb290U2VnbWVudCgpLGEucGFyc2VRdWVyeVBhcmFtcygpLGEucGFyc2VGcmFnbWVudCgpKX1zZXJpYWxpemUobCl7Y29uc3QgYT1gLyR7T18obC5yb290LCEwKX1gLGQ9ZnVuY3Rpb24gdWRlKGMpe2NvbnN0IGw9T2JqZWN0LmtleXMoYykubWFwKGE9Pntjb25zdCBk''@;'; put 'put ''PWNbYV07cmV0dXJuIEFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoaD0+YCR7YngoYSl9PSR7YngoaCl9YCkuam9pbigiJiIpOmAke2J4KGEpfT0ke2J4KGQpfWB9KS5maWx0ZXIoYT0+ISFhKTtyZXR1cm4gbC5sZW5ndGg/YD8ke2wuam9pbigiJiIpfWA6IiJ9KGwucXVlcnlQYXJhbXMpO3JldHVy''@;'; put 'put ''bmAke2F9JHtkfSR7InN0cmluZyI9PXR5cGVvZiBsLmZyYWdtZW50P2AjJHtmdW5jdGlvbiBsZGUoYyl7cmV0dXJuIGVuY29kZVVSSShjKX0obC5mcmFnbWVudCl9YDoiIn1gfX1jb25zdCBhZGU9bmV3IEJPO2Z1bmN0aW9uIF94KGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT5xRyhsKSku''@;'; put 'put ''am9pbigiLyIpfWZ1bmN0aW9uIE9fKGMsbCl7aWYoIWMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gX3goYyk7aWYobCl7Y29uc3QgYT1jLmNoaWxkcmVuW2xzXT9PXyhjLmNoaWxkcmVuW2xzXSwhMSk6IiIsZD1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gs''@;'; put 'put ''Zl0pPT57aCE9PWxzJiZkLnB1c2goYCR7aH06JHtPXyhmLCExKX1gKX0pLGQubGVuZ3RoPjA/YCR7YX0oJHtkLmpvaW4oIi8vIil9KWA6YX17Y29uc3QgYT1mdW5jdGlvbiBzZGUoYyxsKXtsZXQgYT1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2QsaF0p''@;'; put 'put ''PT57ZD09PWxzJiYoYT1hLmNvbmNhdChsKGgsZCkpKX0pLE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2QhPT1scyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxhfShjLChkLGgpPT5oPT09bHM/W09fKGMuY2hpbGRyZW5bbHNdLCExKV06W2Ake2h9OiR7T18o''@;'; put 'put ''ZCwhMSl9YF0pO3JldHVybiAxPT09T2JqZWN0LmtleXMoYy5jaGlsZHJlbikubGVuZ3RoJiZudWxsIT1jLmNoaWxkcmVuW2xzXT9gJHtfeChjKX0vJHthWzBdfWA6YCR7X3goYyl9Lygke2Euam9pbigiLy8iKX0pYH19ZnVuY3Rpb24gR0coYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChj''@;'; put 'put ''KS5yZXBsYWNlKC8lNDAvZywiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIil9ZnVuY3Rpb24gYngoYyl7cmV0dXJuIEdHKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIGpPKGMpe3JldHVybiBHRyhjKS5yZXBs''@;'; put 'put ''YWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC8lMjYvZ2ksIiYiKX1mdW5jdGlvbiB5eChjKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGMpfWZ1bmN0aW9uICRHKGMpe3JldHVybiB5eChjLnJlcGxhY2UoL1wrL2csIiUyMCIpKX1mdW5jdGlvbiBxRyhj''@;'; put 'put ''KXtyZXR1cm5gJHtqTyhjLnBhdGgpfSR7ZnVuY3Rpb24gY2RlKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5tYXAobD0+YDske2pPKGwpfT0ke2pPKGNbbF0pfWApLmpvaW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3QgZGRlPS9eW15cLygpPzsjXSsvO2Z1bmN0aW9uIHpPKGMpe2NvbnN0''@;'; put 'put ''IGw9Yy5tYXRjaChkZGUpO3JldHVybiBsP2xbMF06IiJ9Y29uc3QgaGRlPS9eW15cLygpPzs9I10rLyxwZGU9L15bXj0/JiNdKy8sbWRlPS9eW14mI10rLztjbGFzcyBfZGV7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmluZz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgoIiMiKT9uZXcgeWEoW10se30pOm5ldyB5YShbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygp''@;'; put 'put ''e2NvbnN0IGw9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2Rl''@;'; put 'put ''VVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJz''@;'; put 'put ''ZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNX''@;'; put 'put ''aXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW2xz''@;'; put 'put ''XT1uZXcgeWEobCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPXpPKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0aHJvdyBuZXcgQXIoNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgTF8oeXgobCksdGhpcy5wYXJzZU1h''@;'; put 'put ''dHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIGZkZShjKXtjb25zdCBsPWMubWF0Y2goaGRlKTty''@;'; put 'put ''ZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXtjb25zdCBoPXpPKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRoaXMuY2FwdHVyZShkKSl9bFt5eChhKV09eXgo''@;'; put 'put ''ZCl9cGFyc2VRdWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gZ2RlKGMpe2NvbnN0IGw9Yy5tYXRjaChwZGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9''@;'; put 'put ''Iikpe2NvbnN0IF89ZnVuY3Rpb24gdmRlKGMpe2NvbnN0IGw9Yy5tYXRjaChtZGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtfJiYoZD1fLHRoaXMuY2FwdHVyZShkKSl9Y29uc3QgaD0kRyhhKSxmPSRHKGQpO2lmKGwuaGFzT3duUHJvcGVydHkoaCkpe2xldCBfPWxbaF07''@;'; put 'put ''QXJyYXkuaXNBcnJheShfKXx8KF89W19dLGxbaF09XyksXy5wdXNoKGYpfWVsc2UgbFtoXT1mfXBhcnNlUGFyZW5zKGwpe2NvbnN0IGE9e307Zm9yKHRoaXMuY2FwdHVyZSgiKCIpOyF0aGlzLmNvbnN1bWVPcHRpb25hbCgiKSIpJiZ0aGlzLnJlbWFpbmluZy5sZW5ndGg+MDspe2NvbnN0IGQ9''@;'; put 'put ''ek8odGhpcy5yZW1haW5pbmcpLGg9dGhpcy5yZW1haW5pbmdbZC5sZW5ndGhdO2lmKCIvIiE9PWgmJiIpIiE9PWgmJiI7IiE9PWgpdGhyb3cgbmV3IEFyKDQwMTAsITEpO2xldCBmO2QuaW5kZXhPZigiOiIpPi0xPyhmPWQuc2xpY2UoMCxkLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKGYp''@;'; put 'put ''LHRoaXMuY2FwdHVyZSgiOiIpKTpsJiYoZj1scyk7Y29uc3QgXz10aGlzLnBhcnNlQ2hpbGRyZW4oKTthW2ZdPTE9PT1PYmplY3Qua2V5cyhfKS5sZW5ndGg/X1tsc106bmV3IHlhKFtdLF8pLHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvLyIpfXJldHVybiBhfXBlZWtTdGFydHNXaXRoKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnJlbWFpbmluZy5zdGFydHNXaXRoKGwpfWNvbnN1bWVPcHRpb25hbChsKXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgobCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcobC5sZW5ndGgpLCEwKX1jYXB0dXJlKGwpe2lmKCF0aGlzLmNvbnN1''@;'; put 'put ''bWVPcHRpb25hbChsKSl0aHJvdyBuZXcgQXIoNDAxMSwhMSl9fWZ1bmN0aW9uIEtHKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25ldyB5YShbXSx7W2xzXTpjfSk6Y31mdW5jdGlvbiBYRyhjKXtjb25zdCBsPXt9O2Zvcihjb25zdCBkIG9mIE9iamVjdC5rZXlzKGMuY2hpbGRyZW4p''@;'; put 'put ''KXtjb25zdCBmPVhHKGMuY2hpbGRyZW5bZF0pO2lmKGQ9PT1scyYmMD09PWYuc2VnbWVudHMubGVuZ3RoJiZmLmhhc0NoaWxkcmVuKCkpZm9yKGNvbnN0W18sVF1vZiBPYmplY3QuZW50cmllcyhmLmNoaWxkcmVuKSlsW19dPVQ7ZWxzZShmLnNlZ21lbnRzLmxlbmd0aD4wfHxmLmhhc0NoaWxk''@;'; put 'put ''cmVuKCkpJiYobFtkXT1mKX1yZXR1cm4gZnVuY3Rpb24gYmRlKGMpe2lmKDE9PT1jLm51bWJlck9mQ2hpbGRyZW4mJmMuY2hpbGRyZW5bbHNdKXtjb25zdCBsPWMuY2hpbGRyZW5bbHNdO3JldHVybiBuZXcgeWEoYy5zZWdtZW50cy5jb25jYXQobC5zZWdtZW50cyksbC5jaGlsZHJlbil9cmV0''@;'; put 'put ''dXJuIGN9KG5ldyB5YShjLnNlZ21lbnRzLGwpKX1mdW5jdGlvbiBENShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mICQ2fWZ1bmN0aW9uIEpHKGMpe2xldCBsO2NvbnN0IGg9S0coZnVuY3Rpb24gYShmKXtjb25zdCBfPXt9O2Zvcihjb25zdCBXIG9mIGYuY2hpbGRyZW4pe2NvbnN0IGllPWEoVyk7''@;'; put 'put ''X1tXLm91dGxldF09aWV9Y29uc3QgVD1uZXcgeWEoZi51cmwsXyk7cmV0dXJuIGY9PT1jJiYobD1UKSxUfShjLnJvb3QpKTtyZXR1cm4gbD8/aH1mdW5jdGlvbiBRRyhjLGwsYSxkKXtsZXQgaD1jO2Zvcig7aC5wYXJlbnQ7KWg9aC5wYXJlbnQ7aWYoMD09PWwubGVuZ3RoKXJldHVybiBVTyho''@;'; put 'put ''LGgsaCxhLGQpO2NvbnN0IGY9ZnVuY3Rpb24gd2RlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgY1swXSYmMT09PWMubGVuZ3RoJiYiLyI9PT1jWzBdKXJldHVybiBuZXcgdCQoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLF8pPT57aWYoIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IFQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW1csaWVdKT0+e1RbV109InN0cmluZyI9PXR5cGVvZiBpZT9pZS5zcGxpdCgiLyIpOmllfSksWy4uLmgse291dGxldHM6VH1dfWlmKGYuc2VnbWVu''@;'; put 'put ''dFBhdGgpcmV0dXJuWy4uLmgsZi5zZWdtZW50UGF0aF19cmV0dXJuInN0cmluZyIhPXR5cGVvZiBmP1suLi5oLGZdOjA9PT1fPyhmLnNwbGl0KCIvIikuZm9yRWFjaCgoVCxXKT0+ezA9PVcmJiIuIj09PVR8fCgwPT1XJiYiIj09PVQ/YT0hMDoiLi4iPT09VD9sKys6IiIhPVQmJmgucHVzaChU''@;'; put 'put ''KSl9KSxoKTpbLi4uaCxmXX0sW10pO3JldHVybiBuZXcgdCQoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiBVTyhoLGgsbmV3IHlhKFtdLHt9KSxhLGQpO2NvbnN0IF89ZnVuY3Rpb24gQ2RlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBDeChsLCEwLDApO2lmKCFh''@;'; put 'put ''KXJldHVybiBuZXcgQ3gobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IEN4KGEsITAsMCk7Y29uc3QgZD13eChjLmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uIFNkZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFy''@;'; put 'put ''ZW50LCFkKXRocm93IG5ldyBBcig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgQ3goZCwhMSxoLWYpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxjLm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxUPV8ucHJvY2Vzc0NoaWxkcmVuP0ZfKF8uc2VnbWVudEdyb3Vw''@;'; put 'put ''LF8uaW5kZXgsZi5jb21tYW5kcyk6biQoXy5zZWdtZW50R3JvdXAsXy5pbmRleCxmLmNvbW1hbmRzKTtyZXR1cm4gVU8oaCxfLnNlZ21lbnRHcm91cCxULGEsZCl9ZnVuY3Rpb24gd3goYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiYhYy5vdXRsZXRzJiYhYy5zZWdtZW50''@;'; put 'put ''UGF0aH1mdW5jdGlvbiBQXyhjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJmMub3V0bGV0c31mdW5jdGlvbiBVTyhjLGwsYSxkLGgpe2xldCBfLGY9e307ZCYmT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW1csaWVdKT0+e2ZbV109QXJyYXkuaXNBcnJheShpZSk/aWUu''@;'; put 'put ''bWFwKGdlPT5gJHtnZX1gKTpgJHtpZX1gfSksXz1jPT09bD9hOmUkKGMsbCxhKTtjb25zdCBUPUtHKFhHKF8pKTtyZXR1cm4gbmV3ICQ2KFQsZixoKX1mdW5jdGlvbiBlJChjLGwsYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gsZl0p''@;'; put 'put ''PT57ZFtoXT1mPT09bD9hOmUkKGYsbCxhKX0pLG5ldyB5YShjLnNlZ21lbnRzLGQpfWNsYXNzIHQke2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZ3eChkWzBdKSl0''@;'; put 'put ''aHJvdyBuZXcgQXIoNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoUF8pO2lmKGgmJmghPT1qRyhkKSl0aHJvdyBuZXcgQXIoNDAwNCwhMSl9dG9Sb290KCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19fWNsYXNz''@;'; put 'put ''IEN4e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnNlZ21lbnRHcm91cD1sLHRoaXMucHJvY2Vzc0NoaWxkcmVuPWEsdGhpcy5pbmRleD1kfX1mdW5jdGlvbiBuJChjLGwsYSl7aWYoY3x8KGM9bmV3IHlhKFtdLHt9KSksMD09PWMuc2VnbWVudHMubGVuZ3RoJiZjLmhhc0NoaWxkcmVuKCkpcmV0''@;'; put 'put ''dXJuIEZfKGMsbCxhKTtjb25zdCBkPWZ1bmN0aW9uIHhkZShjLGwsYSl7bGV0IGQ9MCxoPWw7Y29uc3QgZj17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2Zvcig7aDxjLnNlZ21lbnRzLmxlbmd0aDspe2lmKGQ+PWEubGVuZ3RoKXJldHVybiBmO2NvbnN0IF89Yy5zZWdt''@;'; put 'put ''ZW50c1toXSxUPWFbZF07aWYoUF8oVCkpYnJlYWs7Y29uc3QgVz1gJHtUfWAsaWU9ZDxhLmxlbmd0aC0xP2FbZCsxXTpudWxsO2lmKGg+MCYmdm9pZCAwPT09VylicmVhaztpZihXJiZpZSYmIm9iamVjdCI9PXR5cGVvZiBpZSYmdm9pZCAwPT09aWUub3V0bGV0cyl7aWYoIWkkKFcsaWUsXykp''@;'; put 'put ''cmV0dXJuIGY7ZCs9Mn1lbHNle2lmKCFpJChXLHt9LF8pKXJldHVybiBmO2QrK31oKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDpoLGNvbW1hbmRJbmRleDpkfX0oYyxsLGEpLGg9YS5zbGljZShkLmNvbW1hbmRJbmRleCk7aWYoZC5tYXRjaCYmZC5wYXRoSW5kZXg8Yy5zZWdtZW50cy5s''@;'; put 'put ''ZW5ndGgpe2NvbnN0IGY9bmV3IHlhKGMuc2VnbWVudHMuc2xpY2UoMCxkLnBhdGhJbmRleCkse30pO3JldHVybiBmLmNoaWxkcmVuW2xzXT1uZXcgeWEoYy5zZWdtZW50cy5zbGljZShkLnBhdGhJbmRleCksYy5jaGlsZHJlbiksRl8oZiwwLGgpfXJldHVybiBkLm1hdGNoJiYwPT09aC5sZW5n''@;'; put 'put ''dGg/bmV3IHlhKGMuc2VnbWVudHMse30pOmQubWF0Y2gmJiFjLmhhc0NoaWxkcmVuKCk/Wk8oYyxsLGEpOmQubWF0Y2g/Rl8oYywwLGgpOlpPKGMsbCxhKX1mdW5jdGlvbiBGXyhjLGwsYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgeWEoYy5zZWdtZW50cyx7fSk7e2NvbnN0IGQ9ZnVu''@;'; put 'put ''Y3Rpb24gTWRlKGMpe3JldHVybiBQXyhjWzBdKT9jWzBdLm91dGxldHM6e1tsc106Y319KGEpLGg9e307aWYoIWRbbHNdJiZjLmNoaWxkcmVuW2xzXSYmMT09PWMubnVtYmVyT2ZDaGlsZHJlbiYmMD09PWMuY2hpbGRyZW5bbHNdLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1GXyhjLmNoaWxk''@;'; put 'put ''cmVuW2xzXSxsLGEpO3JldHVybiBuZXcgeWEoYy5zZWdtZW50cyxmLmNoaWxkcmVuKX1yZXR1cm4gT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2YsX10pPT57InN0cmluZyI9PXR5cGVvZiBfJiYoXz1bX10pLG51bGwhPT1fJiYoaFtmXT1uJChjLmNoaWxkcmVuW2ZdLGwsXykpfSksT2Jq''@;'; put 'put ''ZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2YsX10pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09Xyl9KSxuZXcgeWEoYy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gWk8oYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7''@;'; put 'put ''Y29uc3QgZj1hW2hdO2lmKFBfKGYpKXtjb25zdCBXPUVkZShmLm91dGxldHMpO3JldHVybiBuZXcgeWEoZCxXKX1pZigwPT09aCYmd3goYVswXSkpe2QucHVzaChuZXcgTF8oYy5zZWdtZW50c1tsXS5wYXRoLHIkKGFbMF0pKSksaCsrO2NvbnRpbnVlfWNvbnN0IF89UF8oZik/Zi5vdXRsZXRz''@;'; put 'put ''W2xzXTpgJHtmfWAsVD1oPGEubGVuZ3RoLTE/YVtoKzFdOm51bGw7XyYmVCYmd3goVCk/KGQucHVzaChuZXcgTF8oXyxyJChUKSkpLGgrPTIpOihkLnB1c2gobmV3IExfKF8se30pKSxoKyspfXJldHVybiBuZXcgeWEoZCx7fSl9ZnVuY3Rpb24gRWRlKGMpe2NvbnN0IGw9e307cmV0dXJuIE9i''@;'; put 'put ''amVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGRdKT0+eyJzdHJpbmciPT10eXBlb2YgZCYmKGQ9W2RdKSxudWxsIT09ZCYmKGxbYV09Wk8obmV3IHlhKFtdLHt9KSwwLGQpKX0pLGx9ZnVuY3Rpb24gciQoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgo''@;'; put 'put ''W2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBpJChjLGwsYSl7cmV0dXJuIGM9PWEucGF0aCYmcmgobCxhLnBhcmFtZXRlcnMpfWNvbnN0IEhfPSJpbXBlcmF0aXZlIjtjbGFzcyBpaHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlzLnVybD1hfX1jbGFzcyBZTyBleHRlbmRz''@;'; put 'put ''IGloe2NvbnN0cnVjdG9yKGwsYSxkPSJpbXBlcmF0aXZlIixoPW51bGwpe3N1cGVyKGwsYSksdGhpcy50eXBlPTAsdGhpcy5uYXZpZ2F0aW9uVHJpZ2dlcj1kLHRoaXMucmVzdG9yZWRTdGF0ZT1ofXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25TdGFydChpZDogJHt0aGlzLmlkfSwgdXJs''@;'; put 'put ''OiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIGhwIGV4dGVuZHMgaWh7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMudHlwZT0xfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25FbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhp''@;'; put 'put ''cy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9JylgfX1jbGFzcyBTeCBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9aCx0aGlzLnR5cGU9Mn10b1N0cmluZygpe3JldHVy''@;'; put 'put ''bmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3MgTl8gZXh0ZW5kcyBpaHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPTE2fX1jbGFzcyBXTyBleHRlbmRz''@;'; put 'put ''IGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5lcnJvcj1kLHRoaXMudGFyZ2V0PWgsdGhpcy50eXBlPTN9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVycm9yKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIGVycm9yOiAke3RoaXMuZXJyb3J9''@;'; put 'put ''KWB9fWNsYXNzIGtkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9NH10b1N0cmluZygpe3JldHVybmBSb3V0ZXNSZWNvZ25pemVkKGlkOiAke3RoaXMuaWR9LCB1cmw6ICck''@;'; put 'put ''e3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIEFkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRo''@;'; put 'put ''aXMuc3RhdGU9aCx0aGlzLnR5cGU9N310b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja1N0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9''@;'; put 'put ''fWNsYXNzIFRkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMuc2hvdWxkQWN0aXZhdGU9Zix0aGlzLnR5cGU9OH10b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja0VuZChpZDog''@;'; put 'put ''JHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3RpdmF0ZX0pYH19Y2xhc3MgRGRlIGV4dGVuZHMgaWh7''@;'; put 'put ''Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT01fXRvU3RyaW5nKCl7cmV0dXJuYFJlc29sdmVTdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0''@;'; put 'put ''czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBJZGUgZXh0ZW5kcyBpaHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy50eXBlPTZ9dG9TdHJp''@;'; put 'put ''bmcoKXtyZXR1cm5gUmVzb2x2ZUVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBMZGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0''@;'; put 'put ''ZT1sLHRoaXMudHlwZT05fXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBSZGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT0xMH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xv''@;'; put 'put ''YWRFbmQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNzIE9kZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPTExfXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRo''@;'; put 'put ''aXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBQZGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMudHlwZT0xMn10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYm''@;'; put 'put ''dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIEZkZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPTEzfXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0''@;'; put 'put ''aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgSGRle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9MTR9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlz''@;'; put 'put ''LnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgbyR7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9MTV9dG9TdHJpbmcoKXtyZXR1cm5gU2Nyb2xsKGFuY2hvcjogJyR7dGhp''@;'; put 'put ''cy5hbmNob3J9JywgcG9zaXRpb246ICcke3RoaXMucG9zaXRpb24/YCR7dGhpcy5wb3NpdGlvblswXX0sICR7dGhpcy5wb3NpdGlvblsxXX1gOm51bGx9JylgfX1jbGFzcyBOZGV7Y29uc3RydWN0b3IoKXt0aGlzLm91dGxldD1udWxsLHRoaXMucm91dGU9bnVsbCx0aGlzLmluamVjdG9yPW51''@;'; put 'put ''bGwsdGhpcy5jaGlsZHJlbj1uZXcgVl8sdGhpcy5hdHRhY2hSZWY9bnVsbH19bGV0IFZfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRleHRzPW5ldyBNYXB9b25DaGlsZE91dGxldENyZWF0ZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVDb250ZXh0KGEpO2gu''@;'; put 'put ''b3V0bGV0PWQsdGhpcy5jb250ZXh0cy5zZXQoYSxoKX1vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGEpe2NvbnN0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO2QmJihkLm91dGxldD1udWxsLGQuYXR0YWNoUmVmPW51bGwpfW9uT3V0bGV0RGVhY3RpdmF0ZWQoKXtjb25zdCBhPXRoaXMuY29udGV4dHM7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCxhfW9uT3V0bGV0UmVBdHRhY2hlZChhKXt0aGlzLmNvbnRleHRzPWF9Z2V0T3JDcmVhdGVDb250ZXh0KGEpe2xldCBkPXRoaXMuZ2V0Q29udGV4dChhKTtyZXR1cm4gZHx8KGQ9bmV3IE5kZSx0aGlzLmNvbnRleHRzLnNldChhLGQpKSxkfWdl''@;'; put 'put ''dENvbnRleHQoYSl7cmV0dXJuIHRoaXMuY29udGV4dHMuZ2V0KGEpfHxudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSko''@;'; put 'put ''KTtjbGFzcyBzJHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9yb290PWx9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdC52YWx1ZX1wYXJlbnQobCl7Y29uc3QgYT10aGlzLnBhdGhGcm9tUm9vdChsKTtyZXR1cm4gYS5sZW5ndGg+MT9hW2EubGVuZ3RoLTJdOm51bGx9Y2hpbGRyZW4obCl7Y29u''@;'; put 'put ''c3QgYT1HTyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhP2EuY2hpbGRyZW4ubWFwKGQ9PmQudmFsdWUpOltdfWZpcnN0Q2hpbGQobCl7Y29uc3QgYT1HTyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhJiZhLmNoaWxkcmVuLmxlbmd0aD4wP2EuY2hpbGRyZW5bMF0udmFsdWU6bnVsbH1zaWJsaW5ncyhs''@;'; put 'put ''KXtjb25zdCBhPSRPKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGEubGVuZ3RoPDI/W106YVthLmxlbmd0aC0yXS5jaGlsZHJlbi5tYXAoaD0+aC52YWx1ZSkuZmlsdGVyKGg9PmghPT1sKX1wYXRoRnJvbVJvb3QobCl7cmV0dXJuICRPKGwsdGhpcy5fcm9vdCkubWFwKGE9PmEudmFsdWUpfX1mdW5j''@;'; put 'put ''dGlvbiBHTyhjLGwpe2lmKGM9PT1sLnZhbHVlKXJldHVybiBsO2Zvcihjb25zdCBhIG9mIGwuY2hpbGRyZW4pe2NvbnN0IGQ9R08oYyxhKTtpZihkKXJldHVybiBkfXJldHVybiBudWxsfWZ1bmN0aW9uICRPKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuW2xdO2Zvcihjb25zdCBhIG9mIGwu''@;'; put 'put ''Y2hpbGRyZW4pe2NvbnN0IGQ9JE8oYyxhKTtpZihkLmxlbmd0aClyZXR1cm4gZC51bnNoaWZ0KGwpLGR9cmV0dXJuW119Y2xhc3MgeGZ7Y29uc3RydWN0b3IobCxhKXt0aGlzLnZhbHVlPWwsdGhpcy5jaGlsZHJlbj1hfXRvU3RyaW5nKCl7cmV0dXJuYFRyZWVOb2RlKCR7dGhpcy52YWx1ZX0p''@;'; put 'put ''YH19ZnVuY3Rpb24gcTYoYyl7Y29uc3QgbD17fTtyZXR1cm4gYyYmYy5jaGlsZHJlbi5mb3JFYWNoKGE9PmxbYS52YWx1ZS5vdXRsZXRdPWEpLGx9Y2xhc3MgYSQgZXh0ZW5kcyBzJHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwpLHRoaXMuc25hcHNob3Q9YSxxTyh0aGlzLGwpfXRvU3RyaW5n''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX19ZnVuY3Rpb24gbCQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIFZkZShjLGwpe2NvbnN0IF89bmV3IE14KFtdLHt9LHt9LCIiLHt9LGxzLGwsbnVsbCx7fSk7cmV0dXJuIG5ldyB1JCgiIixuZXcgeGYoXyxbXSkpfSgwLGwpLGQ9bmV3''@;'; put 'put ''IFRlKFtuZXcgTF8oIiIse30pXSksaD1uZXcgVGUoe30pLGY9bmV3IFRlKHt9KSxfPW5ldyBUZSh7fSksVD1uZXcgVGUoIiIpLFc9bmV3IFdsKGQsaCxfLFQsZixscyxsLGEucm9vdCk7cmV0dXJuIFcuc25hcHNob3Q9YS5yb290LG5ldyBhJChuZXcgeGYoVyxbXSksYSl9Y2xhc3MgV2x7Y29u''@;'; put 'put ''c3RydWN0b3IobCxhLGQsaCxmLF8sVCxXKXt0aGlzLnVybFN1YmplY3Q9bCx0aGlzLnBhcmFtc1N1YmplY3Q9YSx0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdD1kLHRoaXMuZnJhZ21lbnRTdWJqZWN0PWgsdGhpcy5kYXRhU3ViamVjdD1mLHRoaXMub3V0bGV0PV8sdGhpcy5jb21wb25lbnQ9VCx0''@;'; put 'put ''aGlzLl9mdXR1cmVTbmFwc2hvdD1XLHRoaXMudGl0bGU9dGhpcy5kYXRhU3ViamVjdD8ucGlwZShNZShpZT0+aWVbSV9dKSk/P1dpKHZvaWQgMCksdGhpcy51cmw9bCx0aGlzLnBhcmFtcz1hLHRoaXMucXVlcnlQYXJhbXM9ZCx0aGlzLmZyYWdtZW50PWgsdGhpcy5kYXRhPWZ9Z2V0IHJvdXRl''@;'; put 'put ''Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnfWdldCByb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9Z2V0IHBhdGhGcm9tUm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9Z2V0IHBhcmFtTWFw''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dGhpcy5wYXJhbXMucGlwZShNZShsPT5HNihsKSkpKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD10aGlzLnF1''@;'; put 'put ''ZXJ5UGFyYW1zLnBpcGUoTWUobD0+RzYobCkpKSksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKTpgRnV0dXJlKCR7dGhpcy5fZnV0dXJlU25hcHNob3R9KWB9fWZ1bmN0aW9uIGMkKGMsbD0iZW1wdHlP''@;'; put 'put ''bmx5Iil7Y29uc3QgYT1jLnBhdGhGcm9tUm9vdDtsZXQgZD0wO2lmKCJhbHdheXMiIT09bClmb3IoZD1hLmxlbmd0aC0xO2Q+PTE7KXtjb25zdCBoPWFbZF0sZj1hW2QtMV07aWYoaC5yb3V0ZUNvbmZpZyYmIiI9PT1oLnJvdXRlQ29uZmlnLnBhdGgpZC0tO2Vsc2V7aWYoZi5jb21wb25lbnQp''@;'; put 'put ''YnJlYWs7ZC0tfX1yZXR1cm4gZnVuY3Rpb24gQmRlKGMpe3JldHVybiBjLnJlZHVjZSgobCxhKT0+KHtwYXJhbXM6ey4uLmwucGFyYW1zLC4uLmEucGFyYW1zfSxkYXRhOnsuLi5sLmRhdGEsLi4uYS5kYXRhfSxyZXNvbHZlOnsuLi5hLmRhdGEsLi4ubC5yZXNvbHZlLC4uLmEucm91dGVDb25m''@;'; put 'put ''aWc/LmRhdGEsLi4uYS5fcmVzb2x2ZWREYXRhfX0pLHtwYXJhbXM6e30sZGF0YTp7fSxyZXNvbHZlOnt9fSl9KGEuc2xpY2UoZCkpfWNsYXNzIE14e2dldCB0aXRsZSgpe3JldHVybiB0aGlzLmRhdGE/LltJX119Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVCxXLGllKXt0aGlzLnVybD1sLHRo''@;'; put 'put ''aXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zix0aGlzLm91dGxldD1fLHRoaXMuY29tcG9uZW50PVQsdGhpcy5yb3V0ZUNvbmZpZz1XLHRoaXMuX3Jlc29sdmU9aWV9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9v''@;'; put 'put ''dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlz''@;'; put 'put ''KX1nZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD1HNih0aGlzLnBhcmFtcykpLHRoaXMuX3BhcmFtTWFwfWdldCBxdWVyeVBhcmFt''@;'; put 'put ''TWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPUc2KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlKHVybDonJHt0aGlzLnVybC5tYXAoZD0+ZC50b1N0cmluZygpKS5qb2luKCIv''@;'; put 'put ''Iil9JywgcGF0aDonJHt0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIn0nKWB9fWNsYXNzIHUkIGV4dGVuZHMgcyR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihhKSx0aGlzLnVybD1sLHFPKHRoaXMsYSl9dG9TdHJpbmcoKXtyZXR1cm4gZCQodGhpcy5fcm9vdCl9fWZ1''@;'; put 'put ''bmN0aW9uIHFPKGMsbCl7bC52YWx1ZS5fcm91dGVyU3RhdGU9YyxsLmNoaWxkcmVuLmZvckVhY2goYT0+cU8oYyxhKSl9ZnVuY3Rpb24gZCQoYyl7Y29uc3QgbD1jLmNoaWxkcmVuLmxlbmd0aD4wP2AgeyAke2MuY2hpbGRyZW4ubWFwKGQkKS5qb2luKCIsICIpfSB9IGA6IiI7cmV0dXJuYCR7''@;'; put 'put ''Yy52YWx1ZX0ke2x9YH1mdW5jdGlvbiBLTyhjKXtpZihjLnNuYXBzaG90KXtjb25zdCBsPWMuc25hcHNob3QsYT1jLl9mdXR1cmVTbmFwc2hvdDtjLnNuYXBzaG90PWEscmgobC5xdWVyeVBhcmFtcyxhLnF1ZXJ5UGFyYW1zKXx8Yy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChhLnF1ZXJ5UGFy''@;'; put 'put ''YW1zKSxsLmZyYWdtZW50IT09YS5mcmFnbWVudCYmYy5mcmFnbWVudFN1YmplY3QubmV4dChhLmZyYWdtZW50KSxyaChsLnBhcmFtcyxhLnBhcmFtcyl8fGMucGFyYW1zU3ViamVjdC5uZXh0KGEucGFyYW1zKSxmdW5jdGlvbiB0ZGUoYyxsKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVy''@;'; put 'put ''biExO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KythKWlmKCFyaChjW2FdLGxbYV0pKXJldHVybiExO3JldHVybiEwfShsLnVybCxhLnVybCl8fGMudXJsU3ViamVjdC5uZXh0KGEudXJsKSxyaChsLmRhdGEsYS5kYXRhKXx8Yy5kYXRhU3ViamVjdC5uZXh0KGEuZGF0YSl9ZWxzZSBjLnNuYXBz''@;'; put 'put ''aG90PWMuX2Z1dHVyZVNuYXBzaG90LGMuZGF0YVN1YmplY3QubmV4dChjLl9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBYTyhjLGwpe2NvbnN0IGE9cmgoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBvZGUoYyxsKXtyZXR1cm4gVDUoYyxsKSYmYy5ldmVyeSgoYSxkKT0+cmgo''@;'; put 'put ''YS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShjLnVybCxsLnVybCk7cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFyZW50fHxYTyhjLnBhcmVudCxsLnBhcmVudCkpfWxldCBmcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmF0ZWQ9''@;'; put 'put ''bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT1scyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBFcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IEVyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBFcix0aGlzLmRldGFjaEV2ZW50cz1uZXcgRXIsdGhpcy5wYXJlbnRDb250''@;'; put 'put ''ZXh0cz1GaShWXyksdGhpcy5sb2NhdGlvbj1GaShhcyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1GaShVYSksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPUZpKHEwKSx0aGlzLmlucHV0QmluZGVyPUZpKHh4LHtvcHRpb25hbDohMH0pLHRoaXMuc3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1''@;'; put 'put ''dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1cm47dGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRl''@;'; put 'put ''eHRzKGgpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyh0aGlzLm5hbWUpJiZ0''@;'; put 'put ''aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1cm4gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250''@;'; put 'put ''ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKSx0aGlzLmFjdGl2YXRl''@;'; put 'put ''ZClyZXR1cm47Y29uc3QgYT10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEucm91dGUsYS5pbmplY3RvcikpfWdldCBpc0FjdGl2''@;'; put 'put ''YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgQXIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0ZSgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBu''@;'; put 'put ''ZXcgQXIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1kZXRhY2goKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhy''@;'; put 'put ''b3cgbmV3IEFyKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQoYS5pbnN0YW5jZSksYX1hdHRhY2goYSxk''@;'; put 'put ''KXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMuX2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hdHRhY2hFdmVudHMuZW1pdChhLmluc3Rh''@;'; put 'put ''bmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdChhKX19YWN0''@;'; put 'put ''aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgQXIoNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sXz1hLnNuYXBzaG90LmNvbXBvbmVudCxUPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0''@;'; put 'put ''KHRoaXMubmFtZSkuY2hpbGRyZW4sVz1uZXcgamRlKGEsVCxoLmluamVjdG9yKTt0aGlzLmFjdGl2YXRlZD1oLmNyZWF0ZUNvbXBvbmVudChfLHtpbmRleDpoLmxlbmd0aCxpbmplY3RvcjpXLGVudmlyb25tZW50SW5qZWN0b3I6ZD8/dGhpcy5lbnZpcm9ubWVudEluamVjdG9yfSksdGhpcy5j''@;'; put 'put ''aGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlucHV0QmluZGVyPy5iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudCh0aGlzKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxpbnB1dHM6e25hbWU6Im5hbWUifSxvdXRwdXRzOnthY3RpdmF0ZUV2ZW50czoiYWN0aXZhdGUiLGRlYWN0aXZhdGVFdmVudHM6ImRlYWN0aXZhdGUiLGF0''@;'; put 'put ''dGFjaEV2ZW50czoiYXR0YWNoIixkZXRhY2hFdmVudHM6ImRldGFjaCJ9LGV4cG9ydEFzOlsib3V0bGV0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdmFdfSksY30pKCk7Y2xhc3MgamRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhp''@;'; put 'put ''cy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PVdsP3RoaXMucm91dGU6bD09PVZfP3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgeHg9bmV3IE1pKCIiKTtsZXQgaCQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0RGF0YVN1''@;'; put 'put ''YnNjcmlwdGlvbnM9bmV3IE1hcH1iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudChhKXt0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKSx0aGlzLnN1YnNjcmliZVRvUm91dGVEYXRhKGEpfXVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKXt0aGlzLm91dGxldERhdGFT''@;'; put 'put ''dWJzY3JpcHRpb25zLmdldChhKT8udW5zdWJzY3JpYmUoKSx0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmRlbGV0ZShhKX1zdWJzY3JpYmVUb1JvdXRlRGF0YShhKXtjb25zdHthY3RpdmF0ZWRSb3V0ZTpkfT1hLGg9WTYoW2QucXVlcnlQYXJhbXMsZC5wYXJhbXMsZC5kYXRhXSkucGlw''@;'; put 'put ''ZShTYSgoW2YsXyxUXSxXKT0+KFQ9ey4uLmYsLi4uXywuLi5UfSwwPT09Vz9XaShUKTpQcm9taXNlLnJlc29sdmUoVCkpKSkuc3Vic2NyaWJlKGY9PntpZighYS5pc0FjdGl2YXRlZHx8IWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmfHxhLmFjdGl2YXRlZFJvdXRlIT09ZHx8bnVsbD09PWQuY29t''@;'; put 'put ''cG9uZW50KXJldHVybiB2b2lkIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpO2NvbnN0IF89ZnVuY3Rpb24gQ3VlKGMpe2NvbnN0IGw9UW8oYyk7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgaDUobCk7cmV0dXJue2dldCBzZWxlY3Rvcigpe3JldHVybiBhLnNlbGVjdG9y''@;'; put 'put ''fSxnZXQgdHlwZSgpe3JldHVybiBhLmNvbXBvbmVudFR5cGV9LGdldCBpbnB1dHMoKXtyZXR1cm4gYS5pbnB1dHN9LGdldCBvdXRwdXRzKCl7cmV0dXJuIGEub3V0cHV0c30sZ2V0IG5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiBhLm5nQ29udGVudFNlbGVjdG9yc30sZ2V0IGlzU3RhbmRh''@;'; put 'put ''bG9uZSgpe3JldHVybiBsLnN0YW5kYWxvbmV9LGdldCBpc1NpZ25hbCgpe3JldHVybiBsLnNpZ25hbHN9fX0oZC5jb21wb25lbnQpO2lmKF8pZm9yKGNvbnN0e3RlbXBsYXRlTmFtZTpUfW9mIF8uaW5wdXRzKWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmLnNldElucHV0KFQsZltUXSk7ZWxzZSB0''@;'; put 'put ''aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKX0pO3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuc2V0KGEsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Y30pLGN9KSgpO2Z1bmN0aW9uIEJfKGMsbCxhKXtpZihhJiZjLnNob3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiBVZGUoYyxsLGEpe3JldHVybiBsLmNoaWxk''@;'; put 'put ''cmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilpZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gQl8oYyxkLGgpO3JldHVybiBCXyhjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IHhmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNo''@;'; put 'put ''KGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7aWYobnVsbCE9PWYpe2NvbnN0IF89Zi5yb3V0ZTtyZXR1cm4gXy52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSxfLmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKFQ9PkJfKGMsVCkpLF99fWNvbnN0IGQ9ZnVuY3Rpb24g''@;'; put 'put ''WmRlKGMpe3JldHVybiBuZXcgV2wobmV3IFRlKGMudXJsKSxuZXcgVGUoYy5wYXJhbXMpLG5ldyBUZShjLnF1ZXJ5UGFyYW1zKSxuZXcgVGUoYy5mcmFnbWVudCksbmV3IFRlKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+Ql8o''@;'; put 'put ''YyxmKSk7cmV0dXJuIG5ldyB4ZihkLGgpfX1jb25zdCBKTz0ibmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IiO2Z1bmN0aW9uIGYkKGMsbCl7Y29uc3R7cmVkaXJlY3RUbzphLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6ZH09RDUobCk/e3JlZGlyZWN0VG86bCxuYXZpZ2F0aW9uQmVoYXZp''@;'; put 'put ''b3JPcHRpb25zOnZvaWQgMH06bCxoPXAkKCExLDAsbCk7cmV0dXJuIGgudXJsPWEsaC5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zPWQsaH1mdW5jdGlvbiBwJChjLGwsYSl7Y29uc3QgZD1uZXcgRXJyb3IoIk5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogIisoY3x8IiIpKTtyZXR1cm4gZFtK''@;'; put 'put ''T109ITAsZC5jYW5jZWxsYXRpb25Db2RlPWwsYSYmKGQudXJsPWEpLGR9ZnVuY3Rpb24gZyQoYyl7cmV0dXJuIG0kKGMpJiZENShjLnVybCl9ZnVuY3Rpb24gbSQoYyl7cmV0dXJuIGMmJmNbSk9dfWxldCB2JD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3BZXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxk''@;'; put 'put ''ZXBlbmRlbmNpZXM6W2ZwXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtmdW5jdGlvbiBRTyhjKXtjb25zdCBsPWMuY2hpbGRyZW4mJmMuY2hpbGRyZW4ubWFwKFFPKSxhPWw/ey4uLmMsY2hpbGRyZW46bH06ey4uLmN9O3JldHVybiFhLmNvbXBvbmVudCYmIWEubG9hZENvbXBvbmVudCYmKGx8''@;'; put 'put ''fGEubG9hZENoaWxkcmVuKSYmYS5vdXRsZXQmJmEub3V0bGV0IT09bHMmJihhLmNvbXBvbmVudD12JCksYX1mdW5jdGlvbiB0MihjKXtyZXR1cm4gYy5vdXRsZXR8fGxzfWZ1bmN0aW9uIGpfKGMpe2lmKCFjKXJldHVybiBudWxsO2lmKGMucm91dGVDb25maWc/Ll9pbmplY3RvcilyZXR1cm4g''@;'; put 'put ''Yy5yb3V0ZUNvbmZpZy5faW5qZWN0b3I7Zm9yKGxldCBsPWMucGFyZW50O2w7bD1sLnBhcmVudCl7Y29uc3QgYT1sLnJvdXRlQ29uZmlnO2lmKGE/Ll9sb2FkZWRJbmplY3RvcilyZXR1cm4gYS5fbG9hZGVkSW5qZWN0b3I7aWYoYT8uX2luamVjdG9yKXJldHVybiBhLl9pbmplY3Rvcn1yZXR1''@;'; put 'put ''cm4gbnVsbH1jbGFzcyBYZGV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1sLHRoaXMuZnV0dXJlU3RhdGU9YSx0aGlzLmN1cnJTdGF0ZT1kLHRoaXMuZm9yd2FyZEV2ZW50PWgsdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPWZ9YWN0aXZhdGUobCl7Y29u''@;'; put 'put ''c3QgYT10aGlzLmZ1dHVyZVN0YXRlLl9yb290LGQ9dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3RhdGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCksS08odGhpcy5mdXR1cmVTdGF0ZS5yb290KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoYSxkLGwpfWRl''@;'; put 'put ''YWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCl7Y29uc3QgaD1xNihhKTtsLmNoaWxkcmVuLmZvckVhY2goZj0+e2NvbnN0IF89Zi52YWx1ZS5vdXRsZXQ7dGhpcy5kZWFjdGl2YXRlUm91dGVzKGYsaFtfXSxkKSxkZWxldGUgaFtfXX0pLE9iamVjdC52YWx1ZXMoaCkuZm9yRWFjaChmPT57dGhp''@;'; put 'put ''cy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmLGQpfSl9ZGVhY3RpdmF0ZVJvdXRlcyhsLGEsZCl7Y29uc3QgaD1sLnZhbHVlLGY9YT9hLnZhbHVlOm51bGw7aWYoaD09PWYpaWYoaC5jb21wb25lbnQpe2NvbnN0IF89ZC5nZXRDb250ZXh0KGgub3V0bGV0KTtfJiZ0aGlzLmRlYWN0''@;'; put 'put ''aXZhdGVDaGlsZFJvdXRlcyhsLGEsXy5jaGlsZHJlbil9ZWxzZSB0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBmJiZ0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGEsZCl9ZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4obCxhKXtsLnZhbHVlLmNv''@;'; put 'put ''bXBvbmVudCYmdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkRGV0YWNoKGwudmFsdWUuc25hcHNob3QpP3RoaXMuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKTp0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChsLGEpfWRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKGws''@;'; put 'put ''YSl7Y29uc3QgZD1hLmdldENvbnRleHQobC52YWx1ZS5vdXRsZXQpLGg9ZCYmbC52YWx1ZS5jb21wb25lbnQ/ZC5jaGlsZHJlbjphLGY9cTYobCk7Zm9yKGNvbnN0IF8gb2YgT2JqZWN0LmtleXMoZikpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmW19dLGgpO2lmKGQmJmQu''@;'; put 'put ''b3V0bGV0KXtjb25zdCBfPWQub3V0bGV0LmRldGFjaCgpLFQ9ZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUobC52YWx1ZS5zbmFwc2hvdCx7Y29tcG9uZW50UmVmOl8scm91dGU6bCxjb250ZXh0czpUfSl9fWRlYWN0aXZhdGVS''@;'; put 'put ''b3V0ZUFuZE91dGxldChsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KSxoPWQmJmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPXE2KGwpO2Zvcihjb25zdCBfIG9mIE9iamVjdC5rZXlzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4o''@;'; put 'put ''ZltfXSxoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCksZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5yb3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPXE2KGEpO2wuY2hpbGRyZW4uZm9y''@;'; put 'put ''RWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRsZXRdLGQpLHRoaXMuZm9yd2FyZEV2ZW50KG5ldyBIZGUoZi52YWx1ZS5zbmFwc2hvdCkpfSksbC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBQZGUobC52YWx1ZS5zbmFwc2hvdCkpfWFj''@;'; put 'put ''dGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihLTyhoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3QgXz1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxfLmNoaWxkcmVuKX1l''@;'; put 'put ''bHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZihoLmNvbXBvbmVudCl7Y29uc3QgXz1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBUPXRoaXMucm91''@;'; put 'put ''dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksXy5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoVC5jb250ZXh0cyksXy5hdHRhY2hSZWY9VC5jb21wb25lbnRSZWYsXy5yb3V0ZT1ULnJv''@;'; put 'put ''dXRlLnZhbHVlLF8ub3V0bGV0JiZfLm91dGxldC5hdHRhY2goVC5jb21wb25lbnRSZWYsVC5yb3V0ZS52YWx1ZSksS08oVC5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCxfLmNoaWxkcmVuKX1lbHNle2NvbnN0IFQ9al8oaC5zbmFwc2hvdCk7Xy5hdHRhY2hS''@;'; put 'put ''ZWY9bnVsbCxfLnJvdXRlPWgsXy5pbmplY3Rvcj1ULF8ub3V0bGV0JiZfLm91dGxldC5hY3RpdmF0ZVdpdGgoaCxfLmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLF8uY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNs''@;'; put 'put ''YXNzIF8ke2NvbnN0cnVjdG9yKGwpe3RoaXMucGF0aD1sLHRoaXMucm91dGU9dGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19fWNsYXNzIEV4e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5jb21wb25lbnQ9bCx0aGlzLnJvdXRlPWF9fWZ1bmN0aW9uIEpkZShjLGwsYSl7Y29uc3QgZD1jLl9y''@;'; put 'put ''b290O3JldHVybiB6XyhkLGw/bC5fcm9vdDpudWxsLGEsW2QudmFsdWVdKX1mdW5jdGlvbiBLNihjLGwpe2NvbnN0IGE9U3ltYm9sKCksZD1sLmdldChjLGEpO3JldHVybiBkPT09YT8iZnVuY3Rpb24iIT10eXBlb2YgY3x8ZnVuY3Rpb24gJDcoYyl7cmV0dXJuIG51bGwhPT14ZChjKX0oYyk/''@;'; put 'put ''bC5nZXQoYyk6YzpkfWZ1bmN0aW9uIHpfKGMsbCxhLGQsaD17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGY9cTYobCk7cmV0dXJuIGMuY2hpbGRyZW4uZm9yRWFjaChfPT57KGZ1bmN0aW9uIGUyZShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVD''@;'; put 'put ''aGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWMudmFsdWUsXz1sP2wudmFsdWU6bnVsbCxUPWE/YS5nZXRDb250ZXh0KGMudmFsdWUub3V0bGV0KTpudWxsO2lmKF8mJmYucm91dGVDb25maWc9PT1fLnJvdXRlQ29uZmlnKXtjb25zdCBXPWZ1bmN0aW9uIHQyZShjLGws''@;'; put 'put ''YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpcmV0dXJuIGEoYyxsKTtzd2l0Y2goYSl7Y2FzZSJwYXRoUGFyYW1zQ2hhbmdlIjpyZXR1cm4hVDUoYy51cmwsbC51cmwpO2Nhc2UicGF0aFBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFUNShjLnVybCxsLnVybCl8fCFyaChjLnF1''@;'; put 'put ''ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpO2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFYTyhjLGwpfHwhcmgoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtkZWZhdWx0OnJldHVybiFYTyhjLGwpfX0oXyxmLGYucm91dGVD''@;'; put 'put ''b25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtXP2guY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgXyQoZCkpOihmLmRhdGE9Xy5kYXRhLGYuX3Jlc29sdmVkRGF0YT1fLl9yZXNvbHZlZERhdGEpLHpfKGMsbCxmLmNvbXBvbmVudD9UP1QuY2hpbGRyZW46bnVsbDphLGQsaCksVyYmVCYm''@;'; put 'put ''VC5vdXRsZXQmJlQub3V0bGV0LmlzQWN0aXZhdGVkJiZoLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgRXgoVC5vdXRsZXQuY29tcG9uZW50LF8pKX1lbHNlIF8mJlVfKGwsVCxoKSxoLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IF8kKGQpKSx6XyhjLG51bGwsZi5jb21wb25lbnQ/''@;'; put 'put ''VD9ULmNoaWxkcmVuOm51bGw6YSxkLGgpfSkoXyxmW18udmFsdWUub3V0bGV0XSxhLGQuY29uY2F0KFtfLnZhbHVlXSksaCksZGVsZXRlIGZbXy52YWx1ZS5vdXRsZXRdfSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW18sVF0pPT5VXyhULGEuZ2V0Q29udGV4dChfKSxoKSksaH1mdW5j''@;'; put 'put ''dGlvbiBVXyhjLGwsYSl7Y29uc3QgZD1xNihjKSxoPWMudmFsdWU7T2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2YsX10pPT57VV8oXyxoLmNvbXBvbmVudD9sP2wuY2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgRXgo''@;'; put 'put ''aC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZD9sLm91dGxldC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gWl8oYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gYiQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBweHx8IkVtcHR5RXJy''@;'; put 'put ''b3IiPT09Yz8ubmFtZX1jb25zdCBreD1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBYNigpe3JldHVybiBTYShjPT5ZNihjLm1hcChsPT5sLnBpcGUoaWQoMSksY3Aoa3gpKSkpLnBpcGUoTWUobD0+e2Zvcihjb25zdCBhIG9mIGwpaWYoITAhPT1hKXtpZihhPT09a3gpcmV0dXJu''@;'; put 'put ''IGt4O2lmKCExPT09YXx8YSBpbnN0YW5jZW9mICQ2KXJldHVybiBhfXJldHVybiEwfSksSWEobD0+bCE9PWt4KSxpZCgxKSkpfWZ1bmN0aW9uIHkkKGMpe3JldHVybiBmdW5jdGlvbiBCZSguLi5jKXtyZXR1cm4gV2UoYyl9KHpjKGw9PntpZihENShsKSl0aHJvdyBmJCgwLGwpfSksTWUobD0+''@;'; put 'put ''ITA9PT1sKSl9Y2xhc3MgQXh7Y29uc3RydWN0b3IobCl7dGhpcy5zZWdtZW50R3JvdXA9bHx8bnVsbH19Y2xhc3MgdyR7Y29uc3RydWN0b3IobCl7dGhpcy51cmxUcmVlPWx9fWZ1bmN0aW9uIEo2KGMpe3JldHVybiBUXyhuZXcgQXgoYykpfWZ1bmN0aW9uIEMkKGMpe3JldHVybiBUXyhuZXcg''@;'; put 'put ''dyQoYykpfWNsYXNzIHcyZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMudXJsU2VyaWFsaXplcj1sLHRoaXMudXJsVHJlZT1hfW5vTWF0Y2hFcnJvcihsKXtyZXR1cm4gbmV3IEFyKDQwMDIsITEpfWxpbmVyYWxpemVTZWdtZW50cyhsLGEpe2xldCBkPVtdLGg9YS5yb290O2Zvcig7Oyl7aWYoZD1k''@;'; put 'put ''LmNvbmNhdChoLnNlZ21lbnRzKSwwPT09aC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBXaShkKTtpZihoLm51bWJlck9mQ2hpbGRyZW4+MXx8IWguY2hpbGRyZW5bbHNdKXJldHVybiBUXyhuZXcgQXIoNGUzLCExKSk7aD1oLmNoaWxkcmVuW2xzXX19YXBwbHlSZWRpcmVjdENvbW1hbmRzKGws''@;'; put 'put ''YSxkKXtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZShhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhKSxsLGQpfWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1''@;'; put 'put ''cm4gbmV3ICQ2KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9Pntp''@;'; put 'put ''Zigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25zdCBUPWYuc3Vic3RyaW5nKDEpO2RbaF09YVtUXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2VnbWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTts''@;'; put 'put ''ZXQgXz17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9yRWFjaCgoW1QsV10pPT57X1tUXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLFcsZCxoKX0pLG5ldyB5YShmLF8pfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRz''@;'; put 'put ''V2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQpKX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgQXIoNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7''@;'; put 'put ''bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3BsaWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBlUD17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25h''@;'; put 'put ''bFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIEMyZShjLGwsYSxkLGgpe2NvbnN0IGY9dFAoYyxsLGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gWWRlKGMsbCl7cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1BUihjLnByb3ZpZGVycyxsLGBS''@;'; put 'put ''b3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0aW9uIF8yZShjLGwsYSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxlbmd0aD9XaShoLm1hcChfPT57Y29uc3QgVD1LNihfLGMpO3JldHVybiBkcChmdW5jdGlvbiBhMmUoYyl7cmV0dXJu''@;'; put 'put ''IGMmJlpfKGMuY2FuTWF0Y2gpfShUKT9ULmNhbk1hdGNoKGwsYSk6Yy5ydW5JbkNvbnRleHQoKCk9PlQobCxhKSkpfSkpLnBpcGUoWDYoKSx5JCgpKTpXaSghMCl9KGQsbCxhKS5waXBlKE1lKF89PiEwPT09Xz9mOnsuLi5lUH0pKSk6V2koZil9ZnVuY3Rpb24gdFAoYyxsLGEpe2lmKCIiPT09''@;'; put 'put ''bC5wYXRoKXJldHVybiJmdWxsIj09PWwucGF0aE1hdGNoJiYoYy5oYXNDaGlsZHJlbigpfHxhLmxlbmd0aD4wKT97Li4uZVB9OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6YSxwYXJhbWV0ZXJzOnt9LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9''@;'; put 'put ''fTtjb25zdCBoPShsLm1hdGNoZXJ8fGVkZSkoYSxjLGwpO2lmKCFoKXJldHVybnsuLi5lUH07Y29uc3QgZj17fTtPYmplY3QuZW50cmllcyhoLnBvc1BhcmFtcz8/e30pLmZvckVhY2goKFtULFddKT0+e2ZbVF09Vy5wYXRofSk7Y29uc3QgXz1oLmNvbnN1bWVkLmxlbmd0aD4wP3suLi5mLC4u''@;'; put 'put ''LmguY29uc3VtZWRbaC5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVyc306ZjtyZXR1cm57bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOmguY29uc3VtZWQscmVtYWluaW5nU2VnbWVudHM6YS5zbGljZShoLmNvbnN1bWVkLmxlbmd0aCkscGFyYW1ldGVyczpfLHBvc2l0aW9uYWxQYXJh''@;'; put 'put ''bVNlZ21lbnRzOmgucG9zUGFyYW1zPz97fX19ZnVuY3Rpb24gUyQoYyxsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjAmJmZ1bmN0aW9uIHgyZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5UeChjLGwsZCkmJnQyKGQpIT09bHMpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgeWEobCxNMmUoZCxu''@;'; put 'put ''ZXcgeWEoYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09YS5sZW5ndGgmJmZ1bmN0aW9uIEUyZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5UeChjLGwsZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgeWEoYy5zZWdtZW50cyxTMmUoYywwLGEsZCxjLmNoaWxkcmVu''@;'; put 'put ''KSksc2xpY2VkU2VnbWVudHM6YX06e3NlZ21lbnRHcm91cDpuZXcgeWEoYy5zZWdtZW50cyxjLmNoaWxkcmVuKSxzbGljZWRTZWdtZW50czphfX1mdW5jdGlvbiBTMmUoYyxsLGEsZCxoKXtjb25zdCBmPXt9O2Zvcihjb25zdCBfIG9mIGQpaWYoVHgoYyxhLF8pJiYhaFt0MihfKV0pe2NvbnN0''@;'; put 'put ''IFQ9bmV3IHlhKFtdLHt9KTtmW3QyKF8pXT1UfXJldHVybnsuLi5oLC4uLmZ9fWZ1bmN0aW9uIE0yZShjLGwpe2NvbnN0IGE9e307YVtsc109bDtmb3IoY29uc3QgZCBvZiBjKWlmKCIiPT09ZC5wYXRoJiZ0MihkKSE9PWxzKXtjb25zdCBoPW5ldyB5YShbXSx7fSk7YVt0MihkKV09aH1yZXR1''@;'; put 'put ''cm4gYX1mdW5jdGlvbiBUeChjLGwsYSl7cmV0dXJuKCEoYy5oYXNDaGlsZHJlbigpfHxsLmxlbmd0aD4wKXx8ImZ1bGwiIT09YS5wYXRoTWF0Y2gpJiYiIj09PWEucGF0aH1jbGFzcyBEMmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVCl7dGhpcy5pbmplY3Rvcj1sLHRoaXMuY29uZmlnTG9h''@;'; put 'put ''ZGVyPWEsdGhpcy5yb290Q29tcG9uZW50VHlwZT1kLHRoaXMuY29uZmlnPWgsdGhpcy51cmxUcmVlPWYsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PV8sdGhpcy51cmxTZXJpYWxpemVyPVQsdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLmFwcGx5UmVkaXJlY3RzPW5ldyB3MmUo''@;'; put 'put ''dGhpcy51cmxTZXJpYWxpemVyLHRoaXMudXJsVHJlZSl9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgQXIoNDAwMiwhMSl9cmVjb2duaXplKCl7Y29uc3QgbD1TJCh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwO3JldHVybiB0aGlzLnByb2Nlc3NT''@;'; put 'put ''ZWdtZW50R3JvdXAodGhpcy5pbmplY3Rvcix0aGlzLmNvbmZpZyxsLGxzKS5waXBlKEE1KGE9PntpZihhIGluc3RhbmNlb2YgdyQpcmV0dXJuIHRoaXMuYWxsb3dSZWRpcmVjdHM9ITEsdGhpcy51cmxUcmVlPWEudXJsVHJlZSx0aGlzLm1hdGNoKGEudXJsVHJlZSk7dGhyb3cgYSBpbnN0YW5j''@;'; put 'put ''ZW9mIEF4P3RoaXMubm9NYXRjaEVycm9yKGEpOmF9KSxNZShhPT57Y29uc3QgZD1uZXcgTXgoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGxzLHRoaXMucm9vdENvbXBvbmVu''@;'; put 'put ''dFR5cGUsbnVsbCx7fSksaD1uZXcgeGYoZCxhKSxmPW5ldyB1JCgiIixoKSxfPWZ1bmN0aW9uIHlkZShjLGwsYT1udWxsLGQ9bnVsbCl7cmV0dXJuIFFHKEpHKGMpLGwsYSxkKX0oZCxbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gXy5x''@;'; put 'put ''dWVyeVBhcmFtcz10aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsZi51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfKSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYuX3Jvb3QpLHtzdGF0ZTpmLHRyZWU6X319KSl9bWF0Y2gobCl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRH''@;'; put 'put ''cm91cCh0aGlzLmluamVjdG9yLHRoaXMuY29uZmlnLGwucm9vdCxscykucGlwZShBNShkPT57dGhyb3cgZCBpbnN0YW5jZW9mIEF4P3RoaXMubm9NYXRjaEVycm9yKGQpOmR9KSl9aW5oZXJpdFBhcmFtc0FuZERhdGEobCl7Y29uc3QgYT1sLnZhbHVlLGQ9YyQoYSx0aGlzLnBhcmFtc0luaGVy''@;'; put 'put ''aXRhbmNlU3RyYXRlZ3kpO2EucGFyYW1zPU9iamVjdC5mcmVlemUoZC5wYXJhbXMpLGEuZGF0YT1PYmplY3QuZnJlZXplKGQuZGF0YSksbC5jaGlsZHJlbi5mb3JFYWNoKGg9PnRoaXMuaW5oZXJpdFBhcmFtc0FuZERhdGEoaCkpfXByb2Nlc3NTZWdtZW50R3JvdXAobCxhLGQsaCl7cmV0dXJu''@;'; put 'put ''IDA9PT1kLnNlZ21lbnRzLmxlbmd0aCYmZC5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKGwsYSxkKTp0aGlzLnByb2Nlc3NTZWdtZW50KGwsYSxkLGQuc2VnbWVudHMsaCwhMCl9cHJvY2Vzc0NoaWxkcmVuKGwsYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIE9iamVj''@;'; put 'put ''dC5rZXlzKGQuY2hpbGRyZW4pKSJwcmltYXJ5Ij09PWY/aC51bnNoaWZ0KGYpOmgucHVzaChmKTtyZXR1cm4gZWEoaCkucGlwZShXNihmPT57Y29uc3QgXz1kLmNoaWxkcmVuW2ZdLFQ9ZnVuY3Rpb24gcWRlKGMsbCl7Y29uc3QgYT1jLmZpbHRlcihkPT50MihkKT09PWwpO3JldHVybiBhLnB1''@;'; put 'put ''c2goLi4uYy5maWx0ZXIoZD0+dDIoZCkhPT1sKSksYX0oYSxmKTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKGwsVCxfLGYpfSksZnVuY3Rpb24gWDFlKGMsbCl7cmV0dXJuIFhlKGZ1bmN0aW9uIEsxZShjLGwsYSxkLGgpe3JldHVybihmLF8pPT57bGV0IFQ9YSxXPWwsaWU9MDtm''@;'; put 'put ''LnN1YnNjcmliZShVZShfLGdlPT57Y29uc3Qgd2U9aWUrKztXPVQ/YyhXLGdlLHdlKTooVD0hMCxnZSksZCYmXy5uZXh0KFcpfSxoJiYoKCk9PntUJiZfLm5leHQoVyksXy5jb21wbGV0ZSgpfSkpKX19KGMsbCxhcmd1bWVudHMubGVuZ3RoPj0yLCEwKSl9KChmLF8pPT4oZi5wdXNoKC4uLl8p''@;'; put 'put ''LGYpKSxteChudWxsKSxmdW5jdGlvbiBKMWUoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjP0lhKChoLGYpPT5jKGgsZixkKSk6T2UsVk8oMSksYT9teChsKTpORygoKT0+bmV3IHB4KSl9KCkseXIoZj0+e2lmKG51bGw9PT1mKXJldHVybiBKNihk''@;'; put 'put ''KTtjb25zdCBfPU0kKGYpO3JldHVybiBmdW5jdGlvbiBJMmUoYyl7Yy5zb3J0KChsLGEpPT5sLnZhbHVlLm91dGxldD09PWxzPy0xOmEudmFsdWUub3V0bGV0PT09bHM/MTpsLnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGEudmFsdWUub3V0bGV0KSl9KF8pLFdpKF8pfSkpfXByb2Nlc3NT''@;'; put 'put ''ZWdtZW50KGwsYSxkLGgsZixfKXtyZXR1cm4gZWEoYSkucGlwZShXNihUPT50aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKFQuX2luamVjdG9yPz9sLGEsVCxkLGgsZixfKS5waXBlKEE1KFc9PntpZihXIGluc3RhbmNlb2YgQXgpcmV0dXJuIFdpKG51bGwpO3Rocm93IFd9KSkpLHVw''@;'; put 'put ''KFQ9PiEhVCksQTUoVD0+e2lmKGIkKFQpKXJldHVybiBmdW5jdGlvbiBBMmUoYyxsLGEpe3JldHVybiAwPT09bC5sZW5ndGgmJiFjLmNoaWxkcmVuW2FdfShkLGgsZik/V2koW10pOko2KGQpO3Rocm93IFR9KSl9cHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGUobCxhLGQsaCxmLF8sVCl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIGsyZShjLGwsYSxkKXtyZXR1cm4hISh0MihjKT09PWR8fGQhPT1scyYmVHgobCxhLGMpKSYmKCIqKiI9PT1jLnBhdGh8fHRQKGwsYyxhKS5tYXRjaGVkKX0oZCxoLGYsXyk/dm9pZCAwPT09ZC5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKGws''@;'; put 'put ''aCxkLGYsXyxUKTpUJiZ0aGlzLmFsbG93UmVkaXJlY3RzP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxoLGEsZCxmLF8pOko2KGgpOko2KGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZixfKXtyZXR1cm4iKioi''@;'; put 'put ''PT09aC5wYXRoP3RoaXMuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGQsaCxfKTp0aGlzLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsXyl9ZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdh''@;'; put 'put ''aW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoKXtjb25zdCBmPXRoaXMuYXBwbHlSZWRpcmVjdHMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKFtdLGQucmVkaXJlY3RUbyx7fSk7cmV0dXJuIGQucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/QyQoZik6dGhpcy5hcHBseVJlZGlyZWN0cy5s''@;'; put 'put ''aW5lcmFsaXplU2VnbWVudHMoZCxmKS5waXBlKHlyKF89Pntjb25zdCBUPW5ldyB5YShfLHt9KTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudChsLGEsVCxfLGgsITEpfSkpfWV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsXyl7Y29uc3R7''@;'; put 'put ''bWF0Y2hlZDpULGNvbnN1bWVkU2VnbWVudHM6VyxyZW1haW5pbmdTZWdtZW50czppZSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpnZX09dFAoYSxoLGYpO2lmKCFUKXJldHVybiBKNihhKTtjb25zdCB3ZT10aGlzLmFwcGx5UmVkaXJlY3RzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhXLGgucmVk''@;'; put 'put ''aXJlY3RUbyxnZSk7cmV0dXJuIGgucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/QyQod2UpOnRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsd2UpLnBpcGUoeXIoRWU9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEsRWUuY29uY2F0KGllKSxfLCExKSkpfW1hdGNo''@;'; put 'put ''U2VnbWVudEFnYWluc3RSb3V0ZShsLGEsZCxoLGYsXyl7bGV0IFQ7aWYoIioqIj09PWQucGF0aCl7Y29uc3QgVz1oLmxlbmd0aD4wP2pHKGgpLnBhcmFtZXRlcnM6e307VD1XaSh7c25hcHNob3Q6bmV3IE14KGgsVyxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9''@;'; put 'put ''KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQseCQoZCksdDIoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLEUkKGQpKSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdfSksYS5jaGlsZHJlbj17fX1lbHNlIFQ9QzJlKGEsZCxoLGwpLnBpcGUo''@;'; put 'put ''TWUoKHttYXRjaGVkOlcsY29uc3VtZWRTZWdtZW50czppZSxyZW1haW5pbmdTZWdtZW50czpnZSxwYXJhbWV0ZXJzOndlfSk9Plc/e3NuYXBzaG90Om5ldyBNeChpZSx3ZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQs''@;'; put 'put ''eCQoZCksdDIoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLEUkKGQpKSxjb25zdW1lZFNlZ21lbnRzOmllLHJlbWFpbmluZ1NlZ21lbnRzOmdlfTpudWxsKSk7cmV0dXJuIFQucGlwZShTYShXPT5udWxsPT09Vz9KNihhKTp0aGlzLmdldENoaWxkQ29uZmlnKGw9''@;'; put 'put ''ZC5faW5qZWN0b3I/P2wsZCxoKS5waXBlKFNhKCh7cm91dGVzOmllfSk9Pntjb25zdCBnZT1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7c25hcHNob3Q6d2UsY29uc3VtZWRTZWdtZW50czpFZSxyZW1haW5pbmdTZWdtZW50czpaZX09Vyx7c2VnbWVudEdyb3VwOm90LHNsaWNlZFNlZ21lbnRzOmV0''@;'; put 'put ''fT1TJChhLEVlLFplLGllKTtpZigwPT09ZXQubGVuZ3RoJiZvdC5oYXNDaGlsZHJlbigpKXJldHVybiB0aGlzLnByb2Nlc3NDaGlsZHJlbihnZSxpZSxvdCkucGlwZShNZShrdD0+bnVsbD09PWt0P251bGw6W25ldyB4Zih3ZSxrdCldKSk7aWYoMD09PWllLmxlbmd0aCYmMD09PWV0Lmxlbmd0''@;'; put 'put ''aClyZXR1cm4gV2koW25ldyB4Zih3ZSxbXSldKTtjb25zdCB5dD10MihkKT09PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQoZ2UsaWUsb3QsZXQseXQ/bHM6ZiwhMCkucGlwZShNZShrdD0+W25ldyB4Zih3ZSxrdCldKSl9KSkpKX1nZXRDaGlsZENvbmZpZyhsLGEsZCl7cmV0dXJuIGEu''@;'; put 'put ''Y2hpbGRyZW4/V2koe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/V2koe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5jdGlvbiB2MmUoYyxsLGEsZCl7Y29u''@;'; put 'put ''c3QgaD1sLmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9XaSghMCk6V2koaC5tYXAoXz0+e2NvbnN0IFQ9SzYoXyxjKTtyZXR1cm4gZHAoZnVuY3Rpb24gcjJlKGMpe3JldHVybiBjJiZaXyhjLmNhbkxvYWQpfShUKT9ULmNhbkxvYWQobCxhKTpjLnJ1bkluQ29udGV4''@;'; put 'put ''dCgoKT0+VChsLGEpKSl9KSkucGlwZShYNigpLHkkKCkpfShsLGEsZCkucGlwZSh5cihoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoemMoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVjdG9yfSkpOmZ1bmN0''@;'; put 'put ''aW9uIHkyZShjKXtyZXR1cm4gVF8ocCQoITEsMykpfSgpKSk6V2koe3JvdXRlczpbXSxpbmplY3RvcjpsfSl9fWZ1bmN0aW9uIEwyZShjKXtjb25zdCBsPWMudmFsdWUucm91dGVDb25maWc7cmV0dXJuIGwmJiIiPT09bC5wYXRofWZ1bmN0aW9uIE0kKGMpe2NvbnN0IGw9W10sYT1uZXcgU2V0''@;'; put 'put ''O2Zvcihjb25zdCBkIG9mIGMpe2lmKCFMMmUoZCkpe2wucHVzaChkKTtjb250aW51ZX1jb25zdCBoPWwuZmluZChmPT5kLnZhbHVlLnJvdXRlQ29uZmlnPT09Zi52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09aD8oaC5jaGlsZHJlbi5wdXNoKC4uLmQuY2hpbGRyZW4pLGEuYWRkKGgpKTps''@;'; put 'put ''LnB1c2goZCl9Zm9yKGNvbnN0IGQgb2YgYSl7Y29uc3QgaD1NJChkLmNoaWxkcmVuKTtsLnB1c2gobmV3IHhmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIHgkKGMpe3JldHVybiBjLmRhdGF8fHt9fWZ1bmN0aW9uIEUkKGMpe3JldHVybiBjLnJl''@;'; put 'put ''c29sdmV8fHt9fWZ1bmN0aW9uIE8yZShjLGwpe3JldHVybiB5cihhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gV2koYSk7bGV0IGY9MDtyZXR1cm4gZWEoaCkucGlwZShXNihfPT5mdW5jdGlvbiBQ''@;'; put 'put ''MmUoYyxsLGEsZCl7Y29uc3QgaD1jLnJvdXRlQ29uZmlnLGY9Yy5fcmVzb2x2ZTtyZXR1cm4gdm9pZCAwIT09aD8udGl0bGUmJiFrJChoKSYmKGZbSV9dPWgudGl0bGUpLGZ1bmN0aW9uIEYyZShjLGwsYSxkKXtjb25zdCBoPWZ1bmN0aW9uIEgyZShjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMo''@;'; put 'put ''YyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19KGMpO2lmKDA9PT1oLmxlbmd0aClyZXR1cm4gV2koe30pO2NvbnN0IGY9e307cmV0dXJuIGVhKGgpLnBpcGUoeXIoXz0+ZnVuY3Rpb24gTjJlKGMsbCxhLGQpe2NvbnN0IGg9al8obCk/P2QsZj1LNihjLGgpO3JldHVybiBk''@;'; put 'put ''cChmLnJlc29sdmU/Zi5yZXNvbHZlKGwsYSk6aC5ydW5JbkNvbnRleHQoKCk9PmYobCxhKSkpfShjW19dLGwsYSxkKS5waXBlKHVwKCksemMoVD0+e2ZbX109VH0pKSksVk8oMSksZnVuY3Rpb24gVkcoYyl7cmV0dXJuIE1lKCgpPT5jKX0oZiksQTUoXz0+YiQoXyk/TG86VF8oXykpKX0oZixj''@;'; put 'put ''LGwsZCkucGlwZShNZShfPT4oYy5fcmVzb2x2ZWREYXRhPV8sYy5kYXRhPWMkKGMsYSkucmVzb2x2ZSxoJiZrJChoKSYmKGMuZGF0YVtJX109aC50aXRsZSksbnVsbCkpKX0oXy5yb3V0ZSxkLGMsbCkpLHpjKCgpPT5mKyspLFZPKDEpLHlyKF89PmY9PT1oLmxlbmd0aD9XaShhKTpMbykpfSl9''@;'; put 'put ''ZnVuY3Rpb24gayQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjLnRpdGxlfHxudWxsPT09Yy50aXRsZX1mdW5jdGlvbiBuUChjKXtyZXR1cm4gU2EobD0+e2NvbnN0IGE9YyhsKTtyZXR1cm4gYT9lYShhKS5waXBlKE1lKCgpPT5sKSk6V2kobCl9KX1jb25zdCBRNj1uZXcgTWkoIlJPVVRF''@;'; put 'put ''UyIpO2xldCByUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9RmkoblcpfWxvYWRDb21wb25lbnQoYSl7aWYodGhpcy5jb21wb25lbnRMb2Fk''@;'; put 'put ''ZXJzLmdldChhKSlyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChhKTtpZihhLl9sb2FkZWRDb21wb25lbnQpcmV0dXJuIFdpKGEuX2xvYWRlZENvbXBvbmVudCk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoYSk7Y29uc3QgZD1kcChh''@;'; put 'put ''LmxvYWRDb21wb25lbnQoKSkucGlwZShNZShBJCksemMoZj0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoYSksYS5fbG9hZGVkQ29tcG9uZW50PWZ9KSxEXygoKT0+e3RoaXMuY29tcG9uZW50TG9hZGVycy5kZWxldGUoYSl9KSksaD1uZXcgSEcoZCwo''@;'; put 'put ''KT0+bmV3IGJlKS5waXBlKE5PKCkpO3JldHVybiB0aGlzLmNvbXBvbmVudExvYWRlcnMuc2V0KGEsaCksaH1sb2FkQ2hpbGRyZW4oYSxkKXtpZih0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQoZCkpcmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKTtpZihkLl9sb2FkZWRSb3V0ZXMp''@;'; put 'put ''cmV0dXJuIFdpKHtyb3V0ZXM6ZC5fbG9hZGVkUm91dGVzLGluamVjdG9yOmQuX2xvYWRlZEluamVjdG9yfSk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZCk7Y29uc3QgZj10aGlzLmxvYWRNb2R1bGVGYWN0b3J5T3JSb3V0ZXMoZC5sb2FkQ2hp''@;'; put 'put ''bGRyZW4pLnBpcGUoTWUoVD0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoZCk7bGV0IFcsaWU7cmV0dXJuIEFycmF5LmlzQXJyYXkoVCk/aWU9VDooVz1ULmNyZWF0ZShhKS5pbmplY3RvcixpZT1XLmdldChRNixbXSxucy5TZWxmfG5zLk9wdGlvbmFs''@;'; put 'put ''KS5mbGF0KCkpLHtyb3V0ZXM6aWUubWFwKFFPKSxpbmplY3RvcjpXfX0pLERfKCgpPT57dGhpcy5jaGlsZHJlbkxvYWRlcnMuZGVsZXRlKGQpfSkpLF89bmV3IEhHKGYsKCk9Pm5ldyBiZSkucGlwZShOTygpKTtyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuc2V0KGQsXyksX31sb2FkTW9k''@;'; put 'put ''dWxlRmFjdG9yeU9yUm91dGVzKGEpe3JldHVybiBkcChhKCkpLnBpcGUoTWUoQSQpLHlyKGQ9PmQgaW5zdGFuY2VvZiBsY3x8QXJyYXkuaXNBcnJheShkKT9XaShkKTplYSh0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyhkKSkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gQSQoYyl7cmV0dXJuIGZ1bmN0aW9uIFYyZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZGVm''@;'; put 'put ''YXVsdCJpbiBjfShjKT9jLmRlZmF1bHQ6Y31sZXQgRHg9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5sYXN0U3VjY2Vzc2Z1''@;'; put 'put ''bE5hdmlnYXRpb249bnVsbCx0aGlzLmV2ZW50cz1uZXcgYmUsdGhpcy5jb25maWdMb2FkZXI9RmkoclApLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1GaShxMCksdGhpcy51cmxTZXJpYWxpemVyPUZpKFJfKSx0aGlzLnJvb3RDb250ZXh0cz1GaShWXyksdGhpcy5pbnB1dEJpbmRpbmdFbmFi''@;'; put 'put ''bGVkPW51bGwhPT1GaSh4eCx7b3B0aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5XaSh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2''@;'; put 'put ''ZW50cy5uZXh0KG5ldyBSZGUoaCkpLHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgTGRlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3Qg''@;'; put 'put ''ZD0rK3RoaXMubmF2aWdhdGlvbklkO3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlvbnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucz1uZXcgVGUoe2lkOjAsY3VycmVudFVybFRyZWU6YS5jdXJyZW50''@;'; put 'put ''VXJsVHJlZSxjdXJyZW50UmF3VXJsOmEuY3VycmVudFVybFRyZWUsZXh0cmFjdGVkVXJsOmEudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEuY3VycmVudFVybFRyZWUpLHVybEFmdGVyUmVkaXJlY3RzOmEudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEuY3VycmVudFVybFRyZWUp''@;'; put 'put ''LHJhd1VybDphLmN1cnJlbnRVcmxUcmVlLGV4dHJhczp7fSxyZXNvbHZlOm51bGwscmVqZWN0Om51bGwscHJvbWlzZTpQcm9taXNlLnJlc29sdmUoITApLHNvdXJjZTpIXyxyZXN0b3JlZFN0YXRlOm51bGwsY3VycmVudFNuYXBzaG90OmEucm91dGVyU3RhdGUuc25hcHNob3QsdGFyZ2V0U25h''@;'; put 'put ''cHNob3Q6bnVsbCxjdXJyZW50Um91dGVyU3RhdGU6YS5yb3V0ZXJTdGF0ZSx0YXJnZXRSb3V0ZXJTdGF0ZTpudWxsLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6W10sY2FuRGVhY3RpdmF0ZUNoZWNrczpbXX0sZ3VhcmRzUmVzdWx0Om51bGx9KSx0aGlzLnRyYW5zaXRpb25zLnBpcGUoSWEo''@;'; put 'put ''ZD0+MCE9PWQuaWQpLE1lKGQ9Pih7Li4uZCxleHRyYWN0ZWRVcmw6YS51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoZC5yYXdVcmwpfSkpLFNhKGQ9PntsZXQgaD0hMSxmPSExO3JldHVybiBXaShkKS5waXBlKHpjKF89Pnt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXtpZDpfLmlkLGluaXRp''@;'; put 'put ''YWxVcmw6Xy5yYXdVcmwsZXh0cmFjdGVkVXJsOl8uZXh0cmFjdGVkVXJsLHRyaWdnZXI6Xy5zb3VyY2UsZXh0cmFzOl8uZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24scHJldmlv''@;'; put 'put ''dXNOYXZpZ2F0aW9uOm51bGx9Om51bGx9fSksU2EoXz0+e2NvbnN0IFQ9YS5icm93c2VyVXJsVHJlZS50b1N0cmluZygpLFc9IWEubmF2aWdhdGVkfHxfLmV4dHJhY3RlZFVybC50b1N0cmluZygpIT09VHx8VCE9PWEuY3VycmVudFVybFRyZWUudG9TdHJpbmcoKTtpZighVyYmInJlbG9hZCIh''@;'; put 'put ''PT0oXy5leHRyYXMub25TYW1lVXJsTmF2aWdhdGlvbj8/YS5vblNhbWVVcmxOYXZpZ2F0aW9uKSl7Y29uc3QgZ2U9IiI7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IE5fKF8uaWQsYS5zZXJpYWxpemVVcmwoZC5yYXdVcmwpLGdlLDApKSxhLnJhd1VybFRyZWU9Xy5yYXdVcmwsXy5yZXNv''@;'; put 'put ''bHZlKG51bGwpLExvfWlmKGEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKF8ucmF3VXJsKSlyZXR1cm4gVCQoXy5zb3VyY2UpJiYoYS5icm93c2VyVXJsVHJlZT1fLmV4dHJhY3RlZFVybCksV2koXykucGlwZShTYShnZT0+e2NvbnN0IHdlPXRoaXMudHJhbnNpdGlvbnM/''@;'; put 'put ''LmdldFZhbHVlKCk7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFlPKGdlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZ2UuZXh0cmFjdGVkVXJsKSxnZS5zb3VyY2UsZ2UucmVzdG9yZWRTdGF0ZSkpLHdlIT09dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKT9MbzpQcm9t''@;'; put 'put ''aXNlLnJlc29sdmUoZ2UpfSksZnVuY3Rpb24gUjJlKGMsbCxhLGQsaCxmKXtyZXR1cm4geXIoXz0+ZnVuY3Rpb24gVDJlKGMsbCxhLGQsaCxmLF89ImVtcHR5T25seSIpe3JldHVybiBuZXcgRDJlKGMsbCxhLGQsaCxfLGYpLnJlY29nbml6ZSgpfShjLGwsYSxkLF8uZXh0cmFjdGVkVXJsLGgs''@;'; put 'put ''ZikucGlwZShNZSgoe3N0YXRlOlQsdHJlZTpXfSk9Pih7Li4uXyx0YXJnZXRTbmFwc2hvdDpULHVybEFmdGVyUmVkaXJlY3RzOld9KSkpKX0odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLHRoaXMuY29uZmlnTG9hZGVyLHRoaXMucm9vdENvbXBvbmVudFR5cGUsYS5jb25maWcsdGhpcy51cmxT''@;'; put 'put ''ZXJpYWxpemVyLGEucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksemMoZ2U9PntpZihkLnRhcmdldFNuYXBzaG90PWdlLnRhcmdldFNuYXBzaG90LGQudXJsQWZ0ZXJSZWRpcmVjdHM9Z2UudXJsQWZ0ZXJSZWRpcmVjdHMsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17Li4udGhpcy5jdXJyZW50''@;'; put 'put ''TmF2aWdhdGlvbixmaW5hbFVybDpnZS51cmxBZnRlclJlZGlyZWN0c30sImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3kpe2lmKCFnZS5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBFZT1hLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZ2UudXJsQWZ0ZXJSZWRpcmVjdHMs''@;'; put 'put ''Z2UucmF3VXJsKTthLnNldEJyb3dzZXJVcmwoRWUsZ2UpfWEuYnJvd3NlclVybFRyZWU9Z2UudXJsQWZ0ZXJSZWRpcmVjdHN9Y29uc3Qgd2U9bmV3IGtkZShnZS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGdlLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlh''@;'; put 'put ''bGl6ZShnZS51cmxBZnRlclJlZGlyZWN0cyksZ2UudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQod2UpfSkpO2lmKFcmJmEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKGEucmF3VXJsVHJlZSkpe2NvbnN0e2lkOmdlLGV4dHJhY3RlZFVybDp3ZSxzb3VyY2U6''@;'; put 'put ''RWUscmVzdG9yZWRTdGF0ZTpaZSxleHRyYXM6b3R9PV8sZXQ9bmV3IFlPKGdlLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUod2UpLEVlLFplKTt0aGlzLmV2ZW50cy5uZXh0KGV0KTtjb25zdCB5dD1sJCgwLHRoaXMucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90O3JldHVybiBXaShk''@;'; put 'put ''PXsuLi5fLHRhcmdldFNuYXBzaG90Onl0LHVybEFmdGVyUmVkaXJlY3RzOndlLGV4dHJhczp7Li4ub3Qsc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSl9e2NvbnN0IGdlPSIiO3JldHVybiB0aGlzLmV2ZW50cy5uZXh0KG5ldyBOXyhfLmlkLGEuc2VyaWFsaXplVXJsKGQu''@;'; put 'put ''ZXh0cmFjdGVkVXJsKSxnZSwxKSksYS5yYXdVcmxUcmVlPV8ucmF3VXJsLF8ucmVzb2x2ZShudWxsKSxMb319KSx6YyhfPT57Y29uc3QgVD1uZXcgQWRlKF8uaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6''@;'; put 'put ''ZShfLnVybEFmdGVyUmVkaXJlY3RzKSxfLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KFQpfSksTWUoXz0+ZD17Li4uXyxndWFyZHM6SmRlKF8udGFyZ2V0U25hcHNob3QsXy5jdXJyZW50U25hcHNob3QsdGhpcy5yb290Q29udGV4dHMpfSksZnVuY3Rpb24gYzJlKGMsbCl7cmV0''@;'; put 'put ''dXJuIHlyKGE9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpkLGN1cnJlbnRTbmFwc2hvdDpoLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6ZixjYW5EZWFjdGl2YXRlQ2hlY2tzOl99fT1hO3JldHVybiAwPT09Xy5sZW5ndGgmJjA9PT1mLmxlbmd0aD9XaSh7Li4uYSxndWFyZHNSZXN1bHQ6ITB9''@;'; put 'put ''KTpmdW5jdGlvbiB1MmUoYyxsLGEsZCl7cmV0dXJuIGVhKGMpLnBpcGUoeXIoaD0+ZnVuY3Rpb24gbTJlKGMsbCxhLGQsaCl7Y29uc3QgZj1sJiZsLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3JldHVybiBmJiYwIT09Zi5sZW5ndGg/V2koZi5tYXAoVD0+''@;'; put 'put ''e2NvbnN0IFc9al8obCk/P2gsaWU9SzYoVCxXKTtyZXR1cm4gZHAoZnVuY3Rpb24gczJlKGMpe3JldHVybiBjJiZaXyhjLmNhbkRlYWN0aXZhdGUpfShpZSk/aWUuY2FuRGVhY3RpdmF0ZShjLGwsYSxkKTpXLnJ1bkluQ29udGV4dCgoKT0+aWUoYyxsLGEsZCkpKS5waXBlKHVwKCkpfSkpLnBp''@;'; put 'put ''cGUoWDYoKSk6V2koITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksdXAoaD0+ITAhPT1oLCEwKSl9KF8sZCxoLGMpLnBpcGUoeXIoVD0+VCYmZnVuY3Rpb24gbjJlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KFQpP2Z1bmN0aW9uIGQyZShjLGwsYSxkKXtyZXR1cm4gZWEo''@;'; put 'put ''bCkucGlwZShXNihoPT5neChmdW5jdGlvbiBmMmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IE9kZShjKSksV2koITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBoMmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IEZkZShjKSksV2koITApfShoLnJvdXRlLGQp''@;'; put 'put ''LGZ1bmN0aW9uIGcyZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAoXz0+ZnVuY3Rpb24gUWRlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDtyZXR1cm4g''@;'; put 'put ''bCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KF8pKS5maWx0ZXIoXz0+bnVsbCE9PV8pLm1hcChfPT5GRygoKT0+V2koXy5ndWFyZHMubWFwKFc9Pntjb25zdCBpZT1qXyhfLm5vZGUpPz9hLGdlPUs2KFcsaWUpO3JldHVybiBkcChmdW5jdGlvbiBvMmUoYyl7cmV0dXJu''@;'; put 'put ''IGMmJlpfKGMuY2FuQWN0aXZhdGVDaGlsZCl9KGdlKT9nZS5jYW5BY3RpdmF0ZUNoaWxkKGQsYyk6aWUucnVuSW5Db250ZXh0KCgpPT5nZShkLGMpKSkucGlwZSh1cCgpKX0pKS5waXBlKFg2KCkpKSk7cmV0dXJuIFdpKGYpLnBpcGUoWDYoKSl9KGMsaC5wYXRoLGEpLGZ1bmN0aW9uIHAyZShj''@;'; put 'put ''LGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBXaSghMCk7Y29uc3QgaD1kLm1hcChmPT5GRygoKT0+e2NvbnN0IF89al8obCk/P2EsVD1LNihmLF8pO3JldHVybiBkcChmdW5jdGlvbiBp''@;'; put 'put ''MmUoYyl7cmV0dXJuIGMmJlpfKGMuY2FuQWN0aXZhdGUpfShUKT9ULmNhbkFjdGl2YXRlKGwsYyk6Xy5ydW5JbkNvbnRleHQoKCk9PlQobCxjKSkpLnBpcGUodXAoKSl9KSk7cmV0dXJuIFdpKGgpLnBpcGUoWDYoKSl9KGMsaC5yb3V0ZSxhKSkpLHVwKGg9PiEwIT09aCwhMCkpfShkLGYsYyxs''@;'; put 'put ''KTpXaShUKSksTWUoVD0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpUfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsXz0+dGhpcy5ldmVudHMubmV4dChfKSksemMoXz0+e2lmKGQuZ3VhcmRzUmVzdWx0PV8uZ3VhcmRzUmVzdWx0LEQ1KF8uZ3VhcmRzUmVzdWx0KSl0aHJvdyBmJCgwLF8u''@;'; put 'put ''Z3VhcmRzUmVzdWx0KTtjb25zdCBUPW5ldyBUZGUoXy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8udXJsQWZ0ZXJSZWRpcmVjdHMpLF8udGFyZ2V0U25hcHNob3QsISFfLmd1YXJkc1Jlc3VsdCk7''@;'; put 'put ''dGhpcy5ldmVudHMubmV4dChUKX0pLElhKF89PiEhXy5ndWFyZHNSZXN1bHR8fChhLnJlc3RvcmVIaXN0b3J5KF8pLHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oXywiIiwzKSwhMSkpLG5QKF89PntpZihfLmd1YXJkcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGgpcmV0dXJuIFdp''@;'; put 'put ''KF8pLnBpcGUoemMoVD0+e2NvbnN0IFc9bmV3IERkZShULmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVC5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVC51cmxBZnRlclJlZGlyZWN0cyksVC50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4''@;'; put 'put ''dChXKX0pLFNhKFQ9PntsZXQgVz0hMTtyZXR1cm4gV2koVCkucGlwZShPMmUoYS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LHRoaXMuZW52aXJvbm1lbnRJbmplY3RvciksemMoe25leHQ6KCk9Plc9ITAsY29tcGxldGU6KCk9PntXfHwoYS5yZXN0b3JlSGlzdG9yeShUKSx0aGlzLmNhbmNl''@;'; put 'put ''bE5hdmlnYXRpb25UcmFuc2l0aW9uKFQsIiIsMikpfX0pKX0pLHpjKFQ9Pntjb25zdCBXPW5ldyBJZGUoVC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFQudXJsQWZ0ZXJSZWRpcmVjdHMpLFQudGFy''@;'; put 'put ''Z2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoVyl9KSl9KSxuUChfPT57Y29uc3QgVD1XPT57Y29uc3QgaWU9W107Vy5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCYmIVcucm91dGVDb25maWcuX2xvYWRlZENvbXBvbmVudCYmaWUucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29t''@;'; put 'put ''cG9uZW50KFcucm91dGVDb25maWcpLnBpcGUoemMoZ2U9PntXLmNvbXBvbmVudD1nZX0pLE1lKCgpPT57fSkpKTtmb3IoY29uc3QgZ2Ugb2YgVy5jaGlsZHJlbilpZS5wdXNoKC4uLlQoZ2UpKTtyZXR1cm4gaWV9O3JldHVybiBZNihUKF8udGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUobXgo''@;'; put 'put ''KSxpZCgxKSl9KSxuUCgoKT0+dGhpcy5hZnRlclByZWFjdGl2YXRpb24oKSksTWUoXz0+e2NvbnN0IFQ9ZnVuY3Rpb24gemRlKGMsbCxhKXtjb25zdCBkPUJfKGMsbC5fcm9vdCxhP2EuX3Jvb3Q6dm9pZCAwKTtyZXR1cm4gbmV3IGEkKGQsbCl9KGEucm91dGVSZXVzZVN0cmF0ZWd5LF8udGFy''@;'; put 'put ''Z2V0U25hcHNob3QsXy5jdXJyZW50Um91dGVyU3RhdGUpO3JldHVybiBkPXsuLi5fLHRhcmdldFJvdXRlclN0YXRlOlR9fSksemMoXz0+e2EuY3VycmVudFVybFRyZWU9Xy51cmxBZnRlclJlZGlyZWN0cyxhLnJhd1VybFRyZWU9YS51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKF8udXJsQWZ0''@;'; put 'put ''ZXJSZWRpcmVjdHMsXy5yYXdVcmwpLGEucm91dGVyU3RhdGU9Xy50YXJnZXRSb3V0ZXJTdGF0ZSwiZGVmZXJyZWQiPT09YS51cmxVcGRhdGVTdHJhdGVneSYmKF8uZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZXx8YS5zZXRCcm93c2VyVXJsKGEucmF3VXJsVHJlZSxfKSxhLmJyb3dzZXJVcmxU''@;'; put 'put ''cmVlPV8udXJsQWZ0ZXJSZWRpcmVjdHMpfSksKChjLGwsYSxkKT0+TWUoaD0+KG5ldyBYZGUobCxoLnRhcmdldFJvdXRlclN0YXRlLGguY3VycmVudFJvdXRlclN0YXRlLGEsZCkuYWN0aXZhdGUoYyksaCkpKSh0aGlzLnJvb3RDb250ZXh0cyxhLnJvdXRlUmV1c2VTdHJhdGVneSxfPT50aGlz''@;'; put 'put ''LmV2ZW50cy5uZXh0KF8pLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZCksaWQoMSksemMoe25leHQ6Xz0+e2g9ITAsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249dGhpcy5jdXJyZW50TmF2aWdhdGlvbixhLm5hdmlnYXRlZD0hMCx0aGlzLmV2ZW50cy5uZXh0KG5ldyBocChfLmlkLHRo''@;'; put 'put ''aXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoXy5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYS5jdXJyZW50VXJsVHJlZSkpKSxhLnRpdGxlU3RyYXRlZ3k/LnVwZGF0ZVRpdGxlKF8udGFyZ2V0Um91dGVyU3RhdGUuc25hcHNob3QpLF8ucmVzb2x2ZSghMCl9''@;'; put 'put ''LGNvbXBsZXRlOigpPT57aD0hMH19KSxEXygoKT0+e2h8fGZ8fHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oZCwiIiwxKSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPy5pZD09PWQuaWQmJih0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwpfSksQTUoXz0+e2lmKGY9ITAsbSQoXykp''@;'; put 'put ''e2ckKF8pfHwoYS5uYXZpZ2F0ZWQ9ITAsYS5yZXN0b3JlSGlzdG9yeShkLCEwKSk7Y29uc3QgVD1uZXcgU3goZC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGQuZXh0cmFjdGVkVXJsKSxfLm1lc3NhZ2UsXy5jYW5jZWxsYXRpb25Db2RlKTtpZih0aGlzLmV2ZW50cy5uZXh0KFQp''@;'; put 'put ''LGckKF8pKXtjb25zdCBXPWEudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShfLnVybCxhLnJhd1VybFRyZWUpLGllPXtza2lwTG9jYXRpb25DaGFuZ2U6ZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6ImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3l8fFQkKGQuc291''@;'; put 'put ''cmNlKX07YS5zY2hlZHVsZU5hdmlnYXRpb24oVyxIXyxudWxsLGllLHtyZXNvbHZlOmQucmVzb2x2ZSxyZWplY3Q6ZC5yZWplY3QscHJvbWlzZTpkLnByb21pc2V9KX1lbHNlIGQucmVzb2x2ZSghMSl9ZWxzZXthLnJlc3RvcmVIaXN0b3J5KGQsITApO2NvbnN0IFQ9bmV3IFdPKGQuaWQsdGhp''@;'; put 'put ''cy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShkLmV4dHJhY3RlZFVybCksXyxkLnRhcmdldFNuYXBzaG90Pz92b2lkIDApO3RoaXMuZXZlbnRzLm5leHQoVCk7dHJ5e2QucmVzb2x2ZShhLmVycm9ySGFuZGxlcihfKSl9Y2F0Y2goVyl7ZC5yZWplY3QoVyl9fXJldHVybiBMb30pKX0pKX1jYW5j''@;'; put 'put ''ZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihhLGQsaCl7Y29uc3QgZj1uZXcgU3goYS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEuZXh0cmFjdGVkVXJsKSxkLGgpO3RoaXMuZXZlbnRzLm5leHQoZiksYS5yZXNvbHZlKCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gVCQoYyl7cmV0dXJuIGMhPT1IX31sZXQgRCQ9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBkLGg9YS5y''@;'; put 'put ''b290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PWxzKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtJX119fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShCMmUpfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLEIyZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRCR7Y29uc3RydWN0b3IoYSl7''@;'; put 'put ''c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa0cpKX0sYy5cdTAyNzVw''@;'; put 'put ''cm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxqMmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIEZpKFUyZSl9LHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y2xhc3MgejJle3Nob3VsZERldGFjaChsKXtyZXR1cm4hMX1zdG9yZShsLGEpe31zaG91bGRBdHRhY2gobCl7cmV0dXJuITF9cmV0cmlldmUobCl7cmV0dXJuIG51bGx9c2hvdWxkUmV1c2VSb3V0ZShs''@;'; put 'put ''LGEpe3JldHVybiBsLnJvdXRlQ29uZmlnPT09YS5yb3V0ZUNvbmZpZ319bGV0IFUyZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgejJle31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXhhKGMpKSkoZHx8Yyl9fSgpLGMu''@;'; put 'put ''XHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3QgSXg9bmV3IE1pKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4oe30pfSk7bGV0IFoyZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gRmkoWTJlKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxZMmU9KCgpPT57Y2xhc3MgY3tzaG91bGRQcm9jZXNzVXJsKGEpe3JldHVybiEw''@;'; put 'put ''fWV4dHJhY3QoYSl7cmV0dXJuIGF9bWVyZ2UoYSxkKXtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7dmFy''@;'; put 'put ''IFlfPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQ09NUExFVEU9MF09IkNPTVBMRVRFIixjW2MuRkFJTEVEPTFdPSJGQUlMRUQiLGNbYy5SRURJUkVDVElORz0yXT0iUkVESVJFQ1RJTkciLGN9KFlffHx7fSk7ZnVuY3Rpb24gSSQoYyxsKXtjLmV2ZW50cy5waXBlKElhKGE9PmEgaW5zdGFuY2Vv''@;'; put 'put ''ZiBocHx8YSBpbnN0YW5jZW9mIFN4fHxhIGluc3RhbmNlb2YgV098fGEgaW5zdGFuY2VvZiBOXyksTWUoYT0+YSBpbnN0YW5jZW9mIGhwfHxhIGluc3RhbmNlb2YgTl8/WV8uQ09NUExFVEU6YSBpbnN0YW5jZW9mIFN4JiYoMD09PWEuY29kZXx8MT09PWEuY29kZSk/WV8uUkVESVJFQ1RJTkc6''@;'; put 'put ''WV8uRkFJTEVEKSxJYShhPT5hIT09WV8uUkVESVJFQ1RJTkcpLGlkKDEpKS5zdWJzY3JpYmUoKCk9PntsKCl9KX1mdW5jdGlvbiBXMmUoYyl7dGhyb3cgY31mdW5jdGlvbiBHMmUoYyxsLGEpe3JldHVybiBsLnBhcnNlKCIvIil9Y29uc3QgJDJlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJp''@;'; put 'put ''Z25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LHEyZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBEcz0oKCk9PntjbGFzcyBje2dldCBuYXZp''@;'; put 'put ''Z2F0aW9uSWQoKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMubmF2aWdhdGlvbklkfWdldCBicm93c2VyUGFnZUlkKCl7aWYoImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbilyZXR1cm4gdGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgpPy5cdTAy''@;'; put 'put ''NzVyb3V0ZXJQYWdlSWR9Z2V0IGV2ZW50cygpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5ldmVudHN9Y29uc3RydWN0b3IoKXt0aGlzLmRpc3Bvc2VkPSExLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMuY29uc29sZT1GaSh0VyksdGhpcy5pc05nWm9uZUVuYWJsZWQ9ITEs''@;'; put 'put ''dGhpcy5vcHRpb25zPUZpKEl4LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLnBlbmRpbmdUYXNrcz1GaSgkTSksdGhpcy5lcnJvckhhbmRsZXI9dGhpcy5vcHRpb25zLmVycm9ySGFuZGxlcnx8VzJlLHRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyPXRoaXMub3B0aW9ucy5tYWxmb3JtZWRV''@;'; put 'put ''cmlFcnJvckhhbmRsZXJ8fEcyZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PUZpKFoyZSksdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9RmkoajJlKSx0aGlzLnRpdGxlU3RyYXRlZ3k9RmkoRCQpLHRoaXMub25TYW1l''@;'; put 'put ''VXJsTmF2aWdhdGlvbj10aGlzLm9wdGlvbnMub25TYW1lVXJsTmF2aWdhdGlvbnx8Imlnbm9yZSIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5fHwiZW1wdHlPbmx5Iix0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5PXRo''@;'; put 'put ''aXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb258fCJyZXBsYWNlIix0aGlzLmNvbmZpZz1GaShRNix7b3B0aW9uYWw6ITB9KT8uZmxh''@;'; put 'put ''dCgpPz9bXSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1GaShEeCksdGhpcy51cmxTZXJpYWxpemVyPUZpKFJfKSx0aGlzLmxvY2F0aW9uPUZpKEpkKSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFGaSh4eCx7b3B0aW9uYWw6ITB9KSx0aGlzLmlzTmdab25lRW5hYmxl''@;'; put 'put ''ZD1GaShObylpbnN0YW5jZW9mIE5vJiZOby5pc0luQW5ndWxhclpvbmUoKSx0aGlzLnJlc2V0Q29uZmlnKHRoaXMuY29uZmlnKSx0aGlzLmN1cnJlbnRVcmxUcmVlPW5ldyAkNix0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmJyb3dzZXJVcmxUcmVlPXRoaXMuY3Vy''@;'; put 'put ''cmVudFVybFRyZWUsdGhpcy5yb3V0ZXJTdGF0ZT1sJCgwLG51bGwpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnNldHVwTmF2aWdhdGlvbnModGhpcykuc3Vic2NyaWJlKGE9Pnt0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9YS5pZCx0aGlzLmN1cnJlbnRQYWdlSWQ9dGhpcy5icm93c2VyUGFn''@;'; put 'put ''ZUlkPz8wfSxhPT57dGhpcy5jb25zb2xlLndhcm4oYFVuaGFuZGxlZCBOYXZpZ2F0aW9uIEVycm9yOiAke2F9YCl9KX1yZXNldFJvb3RDb21wb25lbnRUeXBlKGEpe3RoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9YSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5yb290Q29tcG9u''@;'; put 'put ''ZW50VHlwZT1hfWluaXRpYWxOYXZpZ2F0aW9uKCl7aWYodGhpcy5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSwhdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuaGFzUmVxdWVzdGVkTmF2aWdhdGlvbil7Y29uc3QgYT10aGlzLmxvY2F0aW9uLmdldFN0YXRlKCk7dGhpcy5uYXZpZ2F0''@;'; put 'put ''ZVRvU3luY1dpdGhCcm93c2VyKHRoaXMubG9jYXRpb24ucGF0aCghMCksSF8sYSl9fXNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpe3RoaXMubG9jYXRpb25TdWJzY3JpcHRpb258fCh0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPXRoaXMubG9jYXRpb24uc3Vic2NyaWJlKGE9Pntjb25z''@;'; put 'put ''dCBkPSJwb3BzdGF0ZSI9PT1hLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSI7InBvcHN0YXRlIj09PWQmJnNldFRpbWVvdXQoKCk9Pnt0aGlzLm5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIoYS51cmwsZCxhLnN0YXRlKX0sMCl9KSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQs''@;'; put 'put ''aCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sXz1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IFc9ey4uLmh9O2RlbGV0ZSBXLm5hdmlnYXRpb25JZCxkZWxldGUgVy5cdTAyNzVyb3V0ZXJQYWdlSWQsMCE9PU9iamVjdC5rZXlzKFcpLmxlbmd0aCYmKGYuc3RhdGU9Vyl9Y29u''@;'; put 'put ''c3QgVD10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKFQsZCxfLGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9Z2V0Q3VycmVudE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlv''@;'; put 'put ''bnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb259cmVzZXRDb25maWcoYSl7dGhpcy5jb25maWc9YS5tYXAoUU8pLHRoaXMubmF2aWdhdGVkPSEx''@;'; put 'put ''LHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMX1uZ09uRGVzdHJveSgpe3RoaXMuZGlzcG9zZSgpfWRpc3Bvc2UoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jb21wbGV0ZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb24mJih0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCksdGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuZGlzcG9zZWQ9ITB9Y3JlYXRlVXJsVHJlZShhLGQ9e30pe2NvbnN0e3JlbGF0aXZlVG86aCxxdWVyeVBhcmFtczpmLGZyYWdtZW50Ol8scXVlcnlQYXJhbXNIYW5kbGluZzpULHByZXNlcnZlRnJhZ21lbnQ6V309''@;'; put 'put ''ZCxpZT1XP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6XztsZXQgd2UsZ2U9bnVsbDtzd2l0Y2goVCl7Y2FzZSJtZXJnZSI6Z2U9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uZn07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6Z2U9dGhpcy5jdXJyZW50VXJsVHJlZS5x''@;'; put 'put ''dWVyeVBhcmFtczticmVhaztkZWZhdWx0OmdlPWZ8fG51bGx9bnVsbCE9PWdlJiYoZ2U9dGhpcy5yZW1vdmVFbXB0eVByb3BzKGdlKSk7dHJ5e3dlPUpHKGg/aC5zbmFwc2hvdDp0aGlzLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpfWNhdGNoeygic3RyaW5nIiE9dHlwZW9mIGFbMF18fCFh''@;'; put 'put ''WzBdLnN0YXJ0c1dpdGgoIi8iKSkmJihhPVtdKSx3ZT10aGlzLmN1cnJlbnRVcmxUcmVlLnJvb3R9cmV0dXJuIFFHKHdlLGEsZ2UsaWU/P251bGwpfW5hdmlnYXRlQnlVcmwoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtjb25zdCBoPUQ1KGEpP2E6dGhpcy5wYXJzZVVybChhKSxmPXRo''@;'; put 'put ''aXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShoLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKGYsSF8sbnVsbCxkKX1uYXZpZ2F0ZShhLGQ9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pe3JldHVybiBmdW5jdGlvbiBLMmUoYyl7Zm9yKGxldCBsPTA7''@;'; put 'put ''bDxjLmxlbmd0aDtsKyspaWYobnVsbD09Y1tsXSl0aHJvdyBuZXcgQXIoNDAwOCwhMSl9KGEpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUoYSxkKSxkKX1zZXJpYWxpemVVcmwoYSl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSl9cGFyc2VVcmwo''@;'; put 'put ''YSl7bGV0IGQ7dHJ5e2Q9dGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpfWNhdGNoKGgpe2Q9dGhpcy5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXIoaCx0aGlzLnVybFNlcmlhbGl6ZXIsYSl9cmV0dXJuIGR9aXNBY3RpdmUoYSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4uJDJlfTohMT09PWQ/''@;'; put 'put ''ey4uLnEyZX06ZCxENShhKSlyZXR1cm4gVUcodGhpcy5jdXJyZW50VXJsVHJlZSxhLGgpO2NvbnN0IGY9dGhpcy5wYXJzZVVybChhKTtyZXR1cm4gVUcodGhpcy5jdXJyZW50VXJsVHJlZSxmLGgpfXJlbW92ZUVtcHR5UHJvcHMoYSl7cmV0dXJuIE9iamVjdC5rZXlzKGEpLnJlZHVjZSgoZCxo''@;'; put 'put ''KT0+e2NvbnN0IGY9YVtoXTtyZXR1cm4gbnVsbCE9ZiYmKGRbaF09ZiksZH0se30pfXNjaGVkdWxlTmF2aWdhdGlvbihhLGQsaCxmLF8pe2lmKHRoaXMuZGlzcG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IFQsVyxpZTtfPyhUPV8ucmVzb2x2ZSxXPV8ucmVqZWN0LGllPV8u''@;'; put 'put ''cHJvbWlzZSk6aWU9bmV3IFByb21pc2UoKHdlLEVlKT0+e1Q9d2UsVz1FZX0pO2NvbnN0IGdlPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiBJJCh0aGlzLCgpPT57cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShnZSkpfSksdGhpcy5uYXZpZ2F0aW9u''@;'; put 'put ''VHJhbnNpdGlvbnMuaGFuZGxlTmF2aWdhdGlvblJlcXVlc3Qoe3NvdXJjZTpkLHJlc3RvcmVkU3RhdGU6aCxjdXJyZW50VXJsVHJlZTp0aGlzLmN1cnJlbnRVcmxUcmVlLGN1cnJlbnRSYXdVcmw6dGhpcy5jdXJyZW50VXJsVHJlZSxyYXdVcmw6YSxleHRyYXM6ZixyZXNvbHZlOlQscmVqZWN0''@;'; put 'put ''OlcscHJvbWlzZTppZSxjdXJyZW50U25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjdXJyZW50Um91dGVyU3RhdGU6dGhpcy5yb3V0ZXJTdGF0ZX0pLGllLmNhdGNoKHdlPT5Qcm9taXNlLnJlamVjdCh3ZSkpfXNldEJyb3dzZXJVcmwoYSxkKXtjb25zdCBoPXRoaXMudXJsU2Vy''@;'; put 'put ''aWFsaXplci5zZXJpYWxpemUoYSk7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhoKXx8ZC5leHRyYXMucmVwbGFjZVVybCl7Y29uc3QgXz17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQp''@;'; put 'put ''fTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLCIiLF8pfWVsc2V7Y29uc3QgZj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCwodGhpcy5icm93c2VyUGFnZUlkPz8wKSsxKX07dGhpcy5sb2NhdGlvbi5nbyhoLCIiLGYpfX1yZXN0b3Jl''@;'; put 'put ''SGlzdG9yeShhLGQ9ITEpe2lmKCJjb21wdXRlZCI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24pe2NvbnN0IGY9dGhpcy5jdXJyZW50UGFnZUlkLSh0aGlzLmJyb3dzZXJQYWdlSWQ/P3RoaXMuY3VycmVudFBhZ2VJZCk7MCE9PWY/dGhpcy5sb2NhdGlvbi5oaXN0b3J5R28o''@;'; put 'put ''Zik6dGhpcy5jdXJyZW50VXJsVHJlZT09PXRoaXMuZ2V0Q3VycmVudE5hdmlnYXRpb24oKT8uZmluYWxVcmwmJjA9PT1mJiYodGhpcy5yZXNldFN0YXRlKGEpLHRoaXMuYnJvd3NlclVybFRyZWU9YS5jdXJyZW50VXJsVHJlZSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpKX1lbHNl''@;'; put 'put ''InJlcGxhY2UiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uJiYoZCYmdGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfXJlc2V0U3RhdGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZT1hLmN1cnJlbnRSb3V0ZXJTdGF0ZSx0aGlzLmN1cnJl''@;'; put 'put ''bnRVcmxUcmVlPWEuY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEucmF3VXJsKX1yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVy''@;'; put 'put ''bFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMucmF3VXJsVHJlZSksIiIsdGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUodGhpcy5sYXN0U3VjY2Vzc2Z1bElkLHRoaXMuY3VycmVudFBhZ2VJZCkpfWdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShhLGQpe3JldHVybiJjb21wdXRlZCI9PT10aGlzLmNh''@;'; put 'put ''bmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24/e25hdmlnYXRpb25JZDphLFx1MDI3NXJvdXRlclBhZ2VJZDpkfTp7bmF2aWdhdGlvbklkOmF9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxCdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxUKXt0aGlzLnJvdXRlcj1hLHRoaXMucm91dGU9ZCx0aGlzLnRhYkluZGV4QXR0cmlidXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9Xyx0aGlzLmxv''@;'; put 'put ''Y2F0aW9uU3RyYXRlZ3k9VCx0aGlzLmhyZWY9bnVsbCx0aGlzLmNvbW1hbmRzPW51bGwsdGhpcy5vbkNoYW5nZXM9bmV3IGJlLHRoaXMucHJlc2VydmVGcmFnbWVudD0hMSx0aGlzLnNraXBMb2NhdGlvbkNoYW5nZT0hMSx0aGlzLnJlcGxhY2VVcmw9ITE7Y29uc3QgVz1fLm5hdGl2ZUVsZW1l''@;'; put 'put ''bnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKTt0aGlzLmlzQW5jaG9yRWxlbWVudD0iYSI9PT1XfHwiYXJlYSI9PT1XLHRoaXMuaXNBbmNob3JFbGVtZW50P3RoaXMuc3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShpZT0+e2llIGluc3RhbmNlb2YgaHAmJnRoaXMudXBkYXRlSHJlZigp''@;'; put 'put ''fSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09u''@;'; put 'put ''Q2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhpcy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1zZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25O''@;'; put 'put ''YXRpdmVFbCgiMCIpKToodGhpcy5jb21tYW5kcz1udWxsLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xpY2soYSxkLGgsZixfKXtyZXR1cm4hIShudWxsPT09dGhpcy51cmxUcmVlfHx0aGlzLmlzQW5jaG9yRWxlbWVudCYmKDAhPT1hfHxkfHxofHxmfHxffHwi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldCkpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFRyZWUse3NraXBMb2NhdGlvbkNoYW5nZTp0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOnRoaXMucmVwbGFjZVVybCxz''@;'; put 'put ''dGF0ZTp0aGlzLnN0YXRlfSksIXRoaXMuaXNBbmNob3JFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZUhyZWYoKXt0aGlzLmhyZWY9bnVsbCE9PXRoaXMudXJsVHJlZSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3RoaXMubG9jYXRp''@;'; put 'put ''b25TdHJhdGVneT8ucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKTpudWxsO2NvbnN0IGE9bnVsbD09PXRoaXMuaHJlZj9udWxsOmZ1bmN0aW9uIFpDKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gcEkoYyxsKXtyZXR1cm4ic3JjIj09PWwm''@;'; put 'put ''JigiZW1iZWQiPT09Y3x8ImZyYW1lIj09PWN8fCJpZnJhbWUiPT09Y3x8Im1lZGlhIj09PWN8fCJzY3JpcHQiPT09Yyl8fCJocmVmIj09PWwmJigiYmFzZSI9PT1jfHwibGluayI9PT1jKT9VQzpudn0obCxhKShjKX0odGhpcy5ocmVmLHRoaXMuZWwubmF0aXZlRWxlbWVudC50YWdOYW1lLnRv''@;'; put 'put ''TG93ZXJDYXNlKCksImhyZWYiKTt0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoImhyZWYiLGEpfWFwcGx5QXR0cmlidXRlVmFsdWUoYSxkKXtjb25zdCBoPXRoaXMucmVuZGVyZXIsZj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7bnVsbCE9PWQ/aC5zZXRBdHRyaWJ1dGUoZixhLGQpOmgucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKGYsYSl9Z2V0IHVybFRyZWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuY29tbWFuZHM/bnVsbDp0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dm9pZCAwIT09dGhpcy5yZWxhdGl2ZVRvP3RoaXMucmVsYXRpdmVUbzp0aGlzLnJvdXRl''@;'; put 'put ''LHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OnRoaXMucHJlc2VydmVGcmFnbWVudH0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChEcyksdHQoV2wpLFA0KCJ0YWJpbmRleCIpLHR0KEZvKSx0dChOaSksdHQoazUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh''@;'; put 'put ''LGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNsaWNrKGYuYnV0dG9uLGYuY3RybEtleSxmLnNoaWZ0S2V5LGYuYWx0S2V5LGYubWV0YUtleSl9KSwyJmEmJlRyKCJ0YXJnZXQiLGQudGFyZ2V0KX0saW5wdXRzOnt0YXJnZXQ6InRhcmdldCIscXVlcnlQYXJhbXM6''@;'; put 'put ''InF1ZXJ5UGFyYW1zIixmcmFnbWVudDoiZnJhZ21lbnQiLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InF1ZXJ5UGFyYW1zSGFuZGxpbmciLHN0YXRlOiJzdGF0ZSIscmVsYXRpdmVUbzoicmVsYXRpdmVUbyIscHJlc2VydmVGcmFnbWVudDpbInByZXNlcnZlRnJhZ21lbnQiLCJwcmVzZXJ2ZUZyYWdt''@;'; put 'put ''ZW50IixVNl0sc2tpcExvY2F0aW9uQ2hhbmdlOlsic2tpcExvY2F0aW9uQ2hhbmdlIiwic2tpcExvY2F0aW9uQ2hhbmdlIixVNl0scmVwbGFjZVVybDpbInJlcGxhY2VVcmwiLCJyZXBsYWNlVXJsIixVNl0scm91dGVyTGluazoicm91dGVyTGluayJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6''@;'; put 'put ''W1FTLHZhXX0pLGN9KSgpLFdfPSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9Xyx0aGlz''@;'; put 'put ''LmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IEVyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGhw''@;'; put 'put ''JiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7V2kodGhpcy5saW5rcy5jaGFuZ2VzLFdpKG51bGwpKS5waXBlKFBpKCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExp''@;'; put 'put ''bmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29uc3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1''@;'; put 'put ''YnNjcmlwdGlvbj1lYShhKS5waXBlKFBpKCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNw''@;'; put 'put ''bGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUoKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1''@;'; put 'put ''YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3JvdGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuX2lzQWN0aXZlIT09YSYmKHRoaXMuX2lzQWN0aXZlPWEsdGhpcy5jZHIubWFya0ZvckNoZWNr''@;'; put 'put ''KCksdGhpcy5jbGFzc2VzLmZvckVhY2goZD0+e2E/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxkKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LGQpfSksYSYmdm9pZCAwIT09dGhpcy5hcmlhQ3Vy''@;'; put 'put ''cmVudFdoZW5BY3RpdmU/dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIsdGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmUudG9TdHJpbmcoKSk6dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xpbmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiBYMmUoYyl7cmV0dXJuISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtB''@;'; put 'put ''Y3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBoPT4hIWgudXJsVHJlZSYmYS5pc0FjdGl2ZShoLnVybFRyZWUsZCl9aGFzQWN0aXZlTGlua3MoKXtjb25zdCBhPXRoaXMuaXNMaW5rQWN0aXZlKHRoaXMucm91dGVyKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5saW5rJiZhKHRoaXMubGluayl8fHRoaXMubGlua3Muc29tZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRHMpLHR0KE5pKSx0dChGbyksdHQoVWEpLHR0KEJ1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''Iiwicm91dGVyTGlua0FjdGl2ZSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLEJ1LDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGlua3M9Zil9fSxpbnB1dHM6e3JvdXRlckxpbmtBY3RpdmVPcHRpb25zOiJyb3V0ZXJMaW5rQWN0aXZlT3B0''@;'; put 'put ''aW9ucyIsYXJpYUN1cnJlbnRXaGVuQWN0aXZlOiJhcmlhQ3VycmVudFdoZW5BY3RpdmUiLHJvdXRlckxpbmtBY3RpdmU6InJvdXRlckxpbmtBY3RpdmUifSxvdXRwdXRzOntpc0FjdGl2ZUNoYW5nZToiaXNBY3RpdmVDaGFuZ2UifSxleHBvcnRBczpbInJvdXRlckxpbmtBY3RpdmUiXSxzdGFu''@;'; put 'put ''ZGFsb25lOiEwLGZlYXR1cmVzOlt2YV19KSxjfSkoKTtjbGFzcyBMJHt9bGV0IEoyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yb3V0ZXI9YSx0aGlzLmluamVjdG9yPWgsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9Zix0aGlzLmxvYWRlcj1ffXNldFVwUHJl''@;'; put 'put ''bG9hZGluZygpe3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2ZW50cy5waXBlKElhKGE9PmEgaW5zdGFuY2VvZiBocCksVzYoKCk9PnRoaXMucHJlbG9hZCgpKSkuc3Vic2NyaWJlKCgpPT57fSl9cHJlbG9hZCgpe3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModGhpcy5pbmplY3Rv''@;'; put 'put ''cix0aGlzLnJvdXRlci5jb25maWcpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJvY2Vzc1JvdXRlcyhhLGQpe2NvbnN0IGg9W107Zm9yKGNvbnN0IGYgb2YgZCl7Zi5wcm92aWRlcnMmJiFmLl9pbmplY3RvciYmKGYu''@;'; put 'put ''X2luamVjdG9yPUFSKGYucHJvdmlkZXJzLGEsYFJvdXRlOiAke2YucGF0aH1gKSk7Y29uc3QgXz1mLl9pbmplY3Rvcj8/YSxUPWYuX2xvYWRlZEluamVjdG9yPz9fOyhmLmxvYWRDaGlsZHJlbiYmIWYuX2xvYWRlZFJvdXRlcyYmdm9pZCAwPT09Zi5jYW5Mb2FkfHxmLmxvYWRDb21wb25lbnQm''@;'; put 'put ''JiFmLl9sb2FkZWRDb21wb25lbnQpJiZoLnB1c2godGhpcy5wcmVsb2FkQ29uZmlnKF8sZikpLChmLmNoaWxkcmVufHxmLl9sb2FkZWRSb3V0ZXMpJiZoLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKFQsZi5jaGlsZHJlbj8/Zi5fbG9hZGVkUm91dGVzKSl9cmV0dXJuIGVhKGgpLnBpcGUoUGko''@;'; put 'put ''KSl9cHJlbG9hZENvbmZpZyhhLGQpe3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGQsKCk9PntsZXQgaDtoPWQubG9hZENoaWxkcmVuJiZ2b2lkIDA9PT1kLmNhbkxvYWQ/dGhpcy5sb2FkZXIubG9hZENoaWxkcmVuKGEsZCk6V2kobnVsbCk7Y29uc3QgZj1oLnBpcGUo''@;'; put 'put ''eXIoXz0+bnVsbD09PV8/V2kodm9pZCAwKTooZC5fbG9hZGVkUm91dGVzPV8ucm91dGVzLGQuX2xvYWRlZEluamVjdG9yPV8uaW5qZWN0b3IsdGhpcy5wcm9jZXNzUm91dGVzKF8uaW5qZWN0b3I/P2EsXy5yb3V0ZXMpKSkpO3JldHVybiBkLmxvYWRDb21wb25lbnQmJiFkLl9sb2FkZWRDb21w''@;'; put 'put ''b25lbnQ/ZWEoW2YsdGhpcy5sb2FkZXIubG9hZENvbXBvbmVudChkKV0pLnBpcGUoUGkoKSk6Zn0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihEcyksYXIoblcpLGFyKHEwKSxhcihMJCksYXIoclApKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBpUD1uZXcgTWkoIiIpO2xldCBSJD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXz17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmll''@;'; put 'put ''d3BvcnRTY3JvbGxlcj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz1fLHRoaXMubGFzdElkPTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LF8uc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbj1fLnNjcm9sbFBvc2l0aW9uUmVz''@;'; put 'put ''dG9yYXRpb258fCJkaXNhYmxlZCIsXy5hbmNob3JTY3JvbGxpbmc9Xy5hbmNob3JTY3JvbGxpbmd8fCJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3Jv''@;'; put 'put ''bGxSZXN0b3JhdGlvbigibWFudWFsIiksdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgWU8/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVz''@;'; put 'put ''dG9yZWRJZD1hLnJlc3RvcmVkU3RhdGU/YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNlb2YgaHA/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVjdHMpLmZy''@;'; put 'put ''YWdtZW50KSk6YSBpbnN0YW5jZW9mIE5fJiYwPT09YS5jb2RlJiYodGhpcy5sYXN0U291cmNlPXZvaWQgMCx0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoYSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYS51cmwpLmZyYWdtZW50KSl9KX1jb25zdW1lU2Nyb2xs''@;'; put 'put ''RXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIG8kJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0''@;'; put 'put ''aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxpbmc/''@;'; put 'put ''dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9sbEV2''@;'; put 'put ''ZW50KGEsZCl7dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5uZXh0KG5ldyBvJChhLCJwb3BzdGF0ZSI9PT10aGlzLmxhc3RTb3VyY2U/dGhpcy5zdG9yZVt0aGlzLnJlc3Rv''@;'; put 'put ''cmVkSWRdOm51bGwsZCkpfSl9LDApfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpeyFmdW5j''@;'; put 'put ''dGlvbiBTUygpe3Rocm93IG5ldyBFcnJvcigiaW52YWxpZCIpfSgpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2Z1bmN0aW9uIEVmKGMsbCl7cmV0dXJue1x1MDI3NWtpbmQ6YyxcdTAyNzVwcm92aWRlcnM6bH19ZnVuY3Rpb24gUCQoKXtj''@;'; put 'put ''b25zdCBjPUZpKEVhKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQoeDUpO2lmKGwhPT1hLmNvbXBvbmVudHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoRHMpLGg9Yy5nZXQoRiQpOzE9PT1jLmdldChvUCkmJmQuaW5pdGlhbE5hdmlnYXRpb24oKSxjLmdldChIJCxudWxsLG5zLk9wdGlvbmFs''@;'; put 'put ''KT8uc2V0VXBQcmVsb2FkaW5nKCksYy5nZXQoaVAsbnVsbCxucy5PcHRpb25hbCk/LmluaXQoKSxkLnJlc2V0Um9vdENvbXBvbmVudFR5cGUoYS5jb21wb25lbnRUeXBlc1swXSksaC5jbG9zZWR8fChoLm5leHQoKSxoLmNvbXBsZXRlKCksaC51bnN1YnNjcmliZSgpKX19Y29uc3QgRiQ9bmV3''@;'; put 'put ''IE1pKCIiLHtmYWN0b3J5OigpPT5uZXcgYmV9KSxvUD1uZXcgTWkoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PjF9KSxIJD1uZXcgTWkoIiIpO2Z1bmN0aW9uIG5oZShjKXtyZXR1cm4gRWYoMCxbe3Byb3ZpZGU6SCQsdXNlRXhpc3Rpbmc6SjJlfSx7cHJvdmlkZTpMJCx1c2VF''@;'; put 'put ''eGlzdGluZzpjfV0pfWNvbnN0IE4kPW5ldyBNaSgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSxpaGU9W0pkLHtwcm92aWRlOlJfLHVzZUNsYXNzOkJPfSxEcyxWXyx7cHJvdmlkZTpXbCx1c2VGYWN0b3J5OmZ1bmN0aW9uIE8kKGMpe3JldHVybiBjLnJvdXRlclN0YXRlLnJvb3R9LGRlcHM6W0Rz''@;'; put 'put ''XX0sclAsW11dO2Z1bmN0aW9uIG9oZSgpe3JldHVybiBuZXcgZlcoIlJvdXRlciIsRHMpfWxldCBkYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgZm9yUm9vdChhLGQpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbaWhlLFtdLHtwcm92aWRlOlE2LG11bHRpOiEw''@;'; put 'put ''LHVzZVZhbHVlOmF9LHtwcm92aWRlOk4kLHVzZUZhY3Rvcnk6Y2hlLGRlcHM6W1tEcyxuZXcgejIsbmV3IGcwXV19LHtwcm92aWRlOkl4LHVzZVZhbHVlOmR8fHt9fSxkPy51c2VIYXNoP3twcm92aWRlOms1LHVzZUNsYXNzOmt1ZX06e3Byb3ZpZGU6azUsdXNlQ2xhc3M6ald9LHtwcm92aWRl''@;'; put 'put ''OmlQLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPUZpKGowZSksbD1GaShObyksYT1GaShJeCksZD1GaShEeCksaD1GaShSXyk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCksbmV3IFIkKGgsZCxjLGwsYSl9fSxkPy5wcmVsb2FkaW5nU3RyYXRlZ3k/''@;'; put 'put ''bmhlKGQucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10se3Byb3ZpZGU6ZlcsbXVsdGk6ITAsdXNlRmFjdG9yeTpvaGV9LGQ/LmluaXRpYWxOYXZpZ2F0aW9uP3VoZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/RWYoOCxbaCQse3Byb3ZpZGU6eHgsdXNlRXhp''@;'; put 'put ''c3Rpbmc6aCR9XSkuXHUwMjc1cHJvdmlkZXJzOltdLFt7cHJvdmlkZTpWJCx1c2VGYWN0b3J5OlAkfSx7cHJvdmlkZTpKUixtdWx0aTohMCx1c2VFeGlzdGluZzpWJH1dXX19c3RhdGljIGZvckNoaWxkKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6UTYsbXVsdGk6''@;'; put 'put ''ITAsdXNlVmFsdWU6YX1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTiQsOCkpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2Z1bmN0aW9uIGNoZShjKXtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rp''@;'; put 'put ''b24gdWhlKGMpe3JldHVyblsiZGlzYWJsZWQiPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigzLFt7cHJvdmlkZTpaUixtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShEcyk7cmV0dXJuKCk9PntsLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpfX19LHtwcm92aWRlOm9Q''@;'; put 'put ''LHVzZVZhbHVlOjJ9XSkuXHUwMjc1cHJvdmlkZXJzOltdLCJlbmFibGVkQmxvY2tpbmciPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigyLFt7cHJvdmlkZTpvUCx1c2VWYWx1ZTowfSx7cHJvdmlkZTpaUixtdWx0aTohMCxkZXBzOltFYV0sdXNlRmFjdG9yeTpsPT57Y29uc3QgYT1sLmdldCh4''@;'; put 'put ''dWUsUHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybigpPT5hLnRoZW4oKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPWwuZ2V0KERzKSxmPWwuZ2V0KEYkKTtJJChoLCgpPT57ZCghMCl9KSxsLmdldChEeCkuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT4oZCghMCksZi5jbG9zZWQ/V2kodm9pZCAw''@;'; put 'put ''KTpmKSxoLmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9fV0pLlx1MDI3NXByb3ZpZGVyczpbXV19Y29uc3QgViQ9bmV3IE1pKCIiKTt2YXIgQiQ9RigzNjA3MiksaGhlPUYoNjYzMDQpO2NvbnN0IHNQPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19h''@;'; put 'put ''bGxvd2VkOjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDoh''@;'; put 'put ''MCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIG4xPWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9y''@;'; put 'put ''b3dzX2FsbG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0''@;'; put 'put ''YWJsZXNfaW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQi''@;'; put 'put ''LGNbYy5lZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30objF8fHt9KSxyMT1GKDU2MzIxKSxqJD1GLm4ocjEpLFVjPUYoNzY3NzEpO2xldCBlOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdz''@;'; put 'put ''KGEpe3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxhUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy51c2VyQ2hhbmdlPW5ldyBiZX1zZXQgdXNlcihhKXt0aGlzLl91c2VyPWEsdGhpcy51c2VyQ2hhbmdlLm5leHQoYSl9Z2V0IHVzZXIoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''dXNlcn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksbFA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxlcnRzPW5ldyBiZX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdmw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFsZXJ0c1NlcnZpY2U9YSx0aGlzLm9uU2lkZWJhclRv''@;'; put 'put ''Z2dsZT1uZXcgRXIsdGhpcy5vblN0YXJ0dXBEYXRhTG9hZGVkPW5ldyBFcix0aGlzLm9uU2hvd0Fib3J0TW9kYWw9bmV3IEVyLHRoaXMub25SZXF1ZXN0c01vZGFsT3Blbj1uZXcgRXIsdGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdz1uZXcgRXIsdGhpcy52aWV3TGFzdFVybD1udWxsLHRoaXMu''@;'; put 'put ''c2lkZWJhckNsb3NlTGltaXQ9MTI4MH1zaG93RGVtb0xpbWl0TW9kYWwoYSl7dGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdy5lbWl0KGEpfXNob3dJbmZvTW9kYWwoYT0iSW5mbyIsZCl7dGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQoe21vZGFsVGl0bGU6YSxtZXNzYWdlOmQsc2FzU2Vydmlj''@;'; put 'put ''ZToiIixkZXRhaWxzOm51bGx9KX1zaG93QWJvcnRNb2RhbChhLGQsaCxmPXZvaWQgMCl7aHx8KGg9bnVsbCk7bGV0IF89e3Nhc1NlcnZpY2U6YSxtZXNzYWdlOmQsZGV0YWlsczpofTtmJiYoXy5tb2RhbFRpdGxlPWYpLHRoaXMub25TaG93QWJvcnRNb2RhbC5lbWl0KF8pfW9wZW5SZXF1ZXN0''@;'; put 'put ''c01vZGFsKCl7dGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuLmVtaXQoITApfWNhdGNoUmVzcG9uc2VFcnJvcihhLGQpe2xldCBoPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIjtpZihkLmVycm9yKXtsZXQgZjtoPWQuZXJyb3IubWVzc2FnZSxkLmVycm9yLmRldGFpbHMmJmQuZXJyb3IuZGV0''@;'; put 'put ''YWlscy5sb2cmJihmPWQuZXJyb3IuZGV0YWlscy5sb2cpLCghaHx8aC50cmltKCkubGVuZ3RoPDEpJiYoaD0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLHRoaXMuc2hvd0Fib3J0TW9kYWwoYSxoLHtMT0c6Zn0sIlJlcXVlc3QgZXJyb3IiKX1lbHNlIHRoaXMuc2hvd0Fib3J0TW9kYWwo''@;'; put 'put ''YSxoKX10b2dnbGVTaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCgpfWNsb3NlU2lkZWJhcigpe3dpbmRvdy5pbm5lcldpZHRoPHRoaXMuc2lkZWJhckNsb3NlTGltaXQmJnRoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITF9KX1vcGVuU2lkZWJhcigpe3RoaXMub25T''@;'; put 'put ''aWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITB9KX1zdGFydHVwRGF0YUxvYWRlZCgpe3RoaXMub25TdGFydHVwRGF0YUxvYWRlZC5lbWl0KCl9ZGlzcGF0Y2hFdmVudChhKXtsZXQgZDsiZnVuY3Rpb24iPT10eXBlb2YgRXZlbnQ/ZD1uZXcgRXZlbnQoYSk6KGQ9ZG9jdW1lbnQuY3JlYXRlRXZl''@;'; put 'put ''bnQoIkV2ZW50IiksZC5pbml0RXZlbnQoYSwhMCwhMCkpLHdpbmRvdy5kaXNwYXRjaEV2ZW50KGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihsUCkpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92''@;'; put 'put ''aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIEx4e31jbGFzcyBSeHt9Y2xhc3Mgb2h7Y29uc3RydWN0b3IobCl7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlVcGRhdGU9bnVsbCxsPyJzdHJpbmciPT10eXBlb2YgbD90aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFk''@;'; put 'put ''ZXJzPW5ldyBNYXAsbC5zcGxpdCgiXG4iKS5mb3JFYWNoKGE9Pntjb25zdCBkPWEuaW5kZXhPZigiOiIpO2lmKGQ+MCl7Y29uc3QgaD1hLnNsaWNlKDAsZCksZj1oLnRvTG93ZXJDYXNlKCksXz1hLnNsaWNlKGQrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShoLGYpLHRo''@;'; put 'put ''aXMuaGVhZGVycy5oYXMoZik/dGhpcy5oZWFkZXJzLmdldChmKS5wdXNoKF8pOnRoaXMuaGVhZGVycy5zZXQoZixbX10pfX0pfTp0eXBlb2YgSGVhZGVyczwidSImJmwgaW5zdGFuY2VvZiBIZWFkZXJzPyh0aGlzLmhlYWRlcnM9bmV3IE1hcCxsLmZvckVhY2goKGEsZCk9Pnt0aGlzLnNldEhl''@;'; put 'put ''YWRlckVudHJpZXMoZCxhKX0pKTp0aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsT2JqZWN0LmVudHJpZXMobCkuZm9yRWFjaCgoW2EsZF0pPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGEsZCl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKGwpe3JldHVybiB0aGlz''@;'; put 'put ''LmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKGwudG9Mb3dlckNhc2UoKSl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpO3JldHVybiBhJiZhLmxlbmd0aD4wP2FbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5''@;'; put 'put ''LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiYSJ9KX1zZXQo''@;'; put 'put ''bCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUobCxhKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoYSl8fHRoaXMu''@;'; put 'put ''bm9ybWFsaXplZE5hbWVzLnNldChhLGwpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIG9oP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxh''@;'; put 'put ''enlVcGRhdGUuZm9yRWFjaChsPT50aGlzLmFwcGx5VXBkYXRlKGwpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKGwpe2wuaW5pdCgpLEFycmF5LmZyb20obC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChhPT57dGhpcy5oZWFkZXJzLnNldChhLGwuaGVhZGVycy5nZXQoYSkpLHRo''@;'; put 'put ''aXMubm9ybWFsaXplZE5hbWVzLnNldChhLGwubm9ybWFsaXplZE5hbWVzLmdldChhKSl9KX1jbG9uZShsKXtjb25zdCBhPW5ldyBvaDtyZXR1cm4gYS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2Ygb2g/dGhpcy5sYXp5SW5pdDp0aGlzLGEubGF6eVVw''@;'; put 'put ''ZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFtsXSksYX1hcHBseVVwZGF0ZShsKXtjb25zdCBhPWwubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChsLm9wKXtjYXNlImEiOmNhc2UicyI6bGV0IGQ9bC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIGQmJihkPVtkXSksMD09PWQu''@;'; put 'put ''bGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobC5uYW1lLGEpO2NvbnN0IGg9KCJhIj09PWwub3A/dGhpcy5oZWFkZXJzLmdldChhKTp2b2lkIDApfHxbXTtoLnB1c2goLi4uZCksdGhpcy5oZWFkZXJzLnNldChhLGgpO2JyZWFrO2Nhc2UiZCI6Y29uc3QgZj1sLnZh''@;'; put 'put ''bHVlO2lmKGYpe2xldCBfPXRoaXMuaGVhZGVycy5nZXQoYSk7aWYoIV8pcmV0dXJuO189Xy5maWx0ZXIoVD0+LTE9PT1mLmluZGV4T2YoVCkpLDA9PT1fLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShhKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoYSkpOnRoaXMuaGVhZGVycy5z''@;'; put 'put ''ZXQoYSxfKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpfX1zZXRIZWFkZXJFbnRyaWVzKGwsYSl7Y29uc3QgZD0oQXJyYXkuaXNBcnJheShhKT9hOlthXSkubWFwKGY9PmYudG9TdHJpbmcoKSksaD1sLnRvTG93ZXJDYXNlKCk7dGhp''@;'; put 'put ''cy5oZWFkZXJzLnNldChoLGQpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShsLGgpfWZvckVhY2gobCl7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goYT0+bCh0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSksdGhpcy5oZWFk''@;'; put 'put ''ZXJzLmdldChhKSkpfX1jbGFzcyBmaGV7ZW5jb2RlS2V5KGwpe3JldHVybiB6JChsKX1lbmNvZGVWYWx1ZShsKXtyZXR1cm4geiQobCl9ZGVjb2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19''@;'; put 'put ''Y29uc3QgZ2hlPS8lKFxkW2EtZjAtOV0pL2dpLG1oZT17NDA6IkAiLCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24geiQoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKS5yZXBsYWNlKGdoZSwobCxhKT0+''@;'; put 'put ''bWhlW2FdPz9sKX1mdW5jdGlvbiBPeChjKXtyZXR1cm5gJHtjfWB9Y2xhc3MgcHB7Y29uc3RydWN0b3IobD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9bC5lbmNvZGVyfHxuZXcgZmhlLGwuZnJvbVN0cmluZyl7aWYobC5mcm9tT2Jq''@;'; put 'put ''ZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uIHBoZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYy5sZW5ndGg+MCYmYy5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZv''@;'; put 'put ''ckVhY2goaD0+e2NvbnN0IGY9aC5pbmRleE9mKCI9IiksW18sVF09LTE9PWY/W2wuZGVjb2RlS2V5KGgpLCIiXTpbbC5kZWNvZGVLZXkoaC5zbGljZSgwLGYpKSxsLmRlY29kZVZhbHVlKGguc2xpY2UoZisxKSldLFc9YS5nZXQoXyl8fFtdO1cucHVzaChUKSxhLnNldChfLFcpfSksYX0obC5m''@;'; put 'put ''cm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSBsLmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXMobC5mcm9tT2JqZWN0KS5mb3JFYWNoKGE9Pntjb25zdCBkPWwuZnJvbU9iamVjdFthXSxoPUFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoT3gpOltPeChkKV07dGhpcy5t''@;'; put 'put ''YXAuc2V0KGEsaCl9KSk6dGhpcy5tYXA9bnVsbH1oYXMobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyhsKX1nZXQobCl7dGhpcy5pbml0KCk7Y29uc3QgYT10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGE/YVswXTpudWxsfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhp''@;'; put 'put ''cy5tYXAuZ2V0KGwpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6ImEifSl9YXBwZW5kQWxsKGwpe2NvbnN0IGE9W107cmV0dXJuIE9iamVj''@;'; put 'put ''dC5rZXlzKGwpLmZvckVhY2goZD0+e2NvbnN0IGg9bFtkXTtBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaChmPT57YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmYsb3A6ImEifSl9KTphLnB1c2goe3BhcmFtOmQsdmFsdWU6aCxvcDoiYSJ9KX0pLHRoaXMuY2xvbmUoYSl9c2V0KGwsYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoicyJ9KX1kZWxldGUobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJkIn0pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChsPT57Y29uc3QgYT10aGlzLmVuY29kZXIu''@;'; put 'put ''ZW5jb2RlS2V5KGwpO3JldHVybiB0aGlzLm1hcC5nZXQobCkubWFwKGQ9PmErIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShkKSkuam9pbigiJiIpfSkuZmlsdGVyKGw9PiIiIT09bCkuam9pbigiJiIpfWNsb25lKGwpe2NvbnN0IGE9bmV3IHBwKHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0p''@;'; put 'put ''O3JldHVybiBhLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxhLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChsKSxhfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5p''@;'; put 'put ''bml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2gobD0+dGhpcy5tYXAuc2V0KGwsdGhpcy5jbG9uZUZyb20ubWFwLmdldChsKSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKGw9Pntzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmNvbnN0IGE9KCJhIj09PWwub3A/dGhpcy5tYXAu''@;'; put 'put ''Z2V0KGwucGFyYW0pOnZvaWQgMCl8fFtdO2EucHVzaChPeChsLnZhbHVlKSksdGhpcy5tYXAuc2V0KGwucGFyYW0sYSk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1sLnZhbHVlKXt0aGlzLm1hcC5kZWxldGUobC5wYXJhbSk7YnJlYWt9e2xldCBkPXRoaXMubWFwLmdldChsLnBhcmFtKXx8''@;'; put 'put ''W107Y29uc3QgaD1kLmluZGV4T2YoT3gobC52YWx1ZSkpOy0xIT09aCYmZC5zcGxpY2UoaCwxKSxkLmxlbmd0aD4wP3RoaXMubWFwLnNldChsLnBhcmFtLGQpOnRoaXMubWFwLmRlbGV0ZShsLnBhcmFtKX19fSksdGhpcy5jbG9uZUZyb209dGhpcy51cGRhdGVzPW51bGwpfX1jbGFzcyB2aGV7''@;'; put 'put ''Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldChsLGEpe3JldHVybiB0aGlzLm1hcC5zZXQobCxhKSx0aGlzfWdldChsKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGwpfHx0aGlzLm1hcC5zZXQobCxsLmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQobCl9ZGVsZXRlKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLm1hcC5kZWxldGUobCksdGhpc31oYXMobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19ZnVuY3Rpb24gVSQoYyl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJmMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlv''@;'; put 'put ''biBaJChjKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZjIGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBZJChjKXtyZXR1cm4gdHlwZW9mIEZvcm1EYXRhPCJ1IiYmYyBpbnN0YW5jZW9mIEZvcm1EYXRhfWNsYXNzIEdfe2NvbnN0cnVjdG9yKGwsYSxkLGgpe2xldCBmO2lmKHRoaXMudXJsPWEs''@;'; put 'put ''dGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9bC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uIF9oZShjKXtzd2l0Y2goYyl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpj''@;'; put 'put ''YXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8aD8odGhpcy5ib2R5PXZvaWQgMCE9PWQ/ZDpudWxsLGY9aCk6Zj1kLGYmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhZi5yZXBvcnRQcm9ncmVzcyx0aGlz''@;'; put 'put ''LndpdGhDcmVkZW50aWFscz0hIWYud2l0aENyZWRlbnRpYWxzLGYucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9Zi5yZXNwb25zZVR5cGUpLGYuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1mLmhlYWRlcnMpLGYuY29udGV4dCYmKHRoaXMuY29udGV4dD1mLmNvbnRleHQpLGYucGFy''@;'; put 'put ''YW1zJiYodGhpcy5wYXJhbXM9Zi5wYXJhbXMpKSx0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IG9oKSx0aGlzLmNvbnRleHR8fCh0aGlzLmNvbnRleHQ9bmV3IHZoZSksdGhpcy5wYXJhbXMpe2NvbnN0IF89dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09Xy5sZW5ndGgpdGhp''@;'; put 'put ''cy51cmxXaXRoUGFyYW1zPWE7ZWxzZXtjb25zdCBUPWEuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1hKygtMT09PVQ/Ij8iOlQ8YS5sZW5ndGgtMT8iJiI6IiIpK199fWVsc2UgdGhpcy5wYXJhbXM9bmV3IHBwLHRoaXMudXJsV2l0aFBhcmFtcz1hfXNlcmlhbGl6ZUJvZHkoKXty''@;'; put 'put ''ZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOlUkKHRoaXMuYm9keSl8fFokKHRoaXMuYm9keSl8fFkkKHRoaXMuYm9keSl8fGZ1bmN0aW9uIGJoZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSl8''@;'; put 'put ''fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiBwcD90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/''@;'; put 'put ''SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5fHxZJCh0aGlzLmJvZHkpP251bGw6WiQodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpVJCh0aGlzLmJvZHkp''@;'; put 'put ''P251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIHBwPyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''dGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9Y2xvbmUobD17fSl7Y29uc3QgYT1sLm1ldGhvZHx8dGhpcy5tZXRob2QsZD1sLnVybHx8dGhpcy51cmwsaD1sLnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsZj12b2lk''@;'; put 'put ''IDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxfPXZvaWQgMCE9PWwud2l0aENyZWRlbnRpYWxzP2wud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLFQ9dm9pZCAwIT09bC5yZXBvcnRQcm9ncmVzcz9sLnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3M7bGV0''@;'; put 'put ''IFc9bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsaWU9bC5wYXJhbXN8fHRoaXMucGFyYW1zO2NvbnN0IGdlPWwuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT1sLnNldEhlYWRlcnMmJihXPU9iamVjdC5rZXlzKGwuc2V0SGVhZGVycykucmVkdWNlKCh3ZSxFZSk9PndlLnNl''@;'; put 'put ''dChFZSxsLnNldEhlYWRlcnNbRWVdKSxXKSksbC5zZXRQYXJhbXMmJihpZT1PYmplY3Qua2V5cyhsLnNldFBhcmFtcykucmVkdWNlKCh3ZSxFZSk9PndlLnNldChFZSxsLnNldFBhcmFtc1tFZV0pLGllKSksbmV3IEdfKGEsZCxmLHtwYXJhbXM6aWUsaGVhZGVyczpXLGNvbnRleHQ6Z2UscmVw''@;'; put 'put ''b3J0UHJvZ3Jlc3M6VCxyZXNwb25zZVR5cGU6aCx3aXRoQ3JlZGVudGlhbHM6X30pfX12YXIgdDg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TZW50PTBdPSJTZW50IixjW2MuVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNl''@;'; put 'put ''SGVhZGVyIixjW2MuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsY1tjLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsY1tjLlVzZXI9NV09IlVzZXIiLGN9KHQ4fHx7fSk7Y2xhc3MgY1B7Y29uc3RydWN0b3IobCxhPTIwMCxkPSJPSyIpe3RoaXMuaGVhZGVycz1sLmhlYWRl''@;'; put 'put ''cnN8fG5ldyBvaCx0aGlzLnN0YXR1cz12b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czphLHRoaXMuc3RhdHVzVGV4dD1sLnN0YXR1c1RleHR8fGQsdGhpcy51cmw9bC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIHVQIGV4dGVuZHMg''@;'; put 'put ''Y1B7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPXQ4LlJlc3BvbnNlSGVhZGVyfWNsb25lKGw9e30pe3JldHVybiBuZXcgdVAoe2hlYWRlcnM6bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PWwuc3RhdHVzP2wuc3RhdHVzOnRoaXMuc3RhdHVzLHN0''@;'; put 'put ''YXR1c1RleHQ6bC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOmwudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIG44IGV4dGVuZHMgY1B7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPXQ4LlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT1sLmJvZHk/''@;'; put 'put ''bC5ib2R5Om51bGx9Y2xvbmUobD17fSl7cmV0dXJuIG5ldyBuOCh7Ym9keTp2b2lkIDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0''@;'; put 'put ''Omwuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBXJCBleHRlbmRzIGNQe2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEs''@;'; put 'put ''dGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke2wu''@;'; put 'put ''c3RhdHVzfSAke2wuc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9bC5lcnJvcnx8bnVsbH19ZnVuY3Rpb24gZFAoYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVz''@;'; put 'put ''czpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHN9fWxldCBoUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5z''@;'; put 'put ''dGFuY2VvZiBHXylmPWE7ZWxzZXtsZXQgVyxpZTtXPWguaGVhZGVycyBpbnN0YW5jZW9mIG9oP2guaGVhZGVyczpuZXcgb2goaC5oZWFkZXJzKSxoLnBhcmFtcyYmKGllPWgucGFyYW1zIGluc3RhbmNlb2YgcHA/aC5wYXJhbXM6bmV3IHBwKHtmcm9tT2JqZWN0OmgucGFyYW1zfSkpLGY9bmV3''@;'; put 'put ''IEdfKGEsZCx2b2lkIDAhPT1oLmJvZHk/aC5ib2R5Om51bGwse2hlYWRlcnM6Vyxjb250ZXh0OmguY29udGV4dCxwYXJhbXM6aWUscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRo''@;'; put 'put ''Q3JlZGVudGlhbHN9KX1jb25zdCBfPVdpKGYpLnBpcGUoVzYoVz0+dGhpcy5oYW5kbGVyLmhhbmRsZShXKSkpO2lmKGEgaW5zdGFuY2VvZiBHX3x8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIF87Y29uc3QgVD1fLnBpcGUoSWEoVz0+VyBpbnN0YW5jZW9mIG44KSk7c3dpdGNoKGgub2Jz''@;'; put 'put ''ZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChmLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIFQucGlwZShNZShXPT57aWYobnVsbCE9PVcuYm9keSYmIShXLmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBp''@;'; put 'put ''cyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIFcuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBULnBpcGUoTWUoVz0+e2lmKG51bGwhPT1XLmJvZHkmJiEoVy5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVy''@;'; put 'put ''biBXLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gVC5waXBlKE1lKFc9PntpZihudWxsIT09Vy5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIFcuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gVy5ib2R5fSkpO2RlZmF1bHQ6cmV0dXJuIFQu''@;'; put 'put ''cGlwZShNZShXPT5XLmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gVDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtoLm9ic2VydmV9fWApfX1kZWxldGUoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUi''@;'; put 'put ''LGEsZCl9Z2V0KGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixhLGQpfWhlYWQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixhLGQpfWpzb25wKGEsZCl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGEse3BhcmFtczoobmV3IHBwKS5hcHBlbmQoZCwiSlNP''@;'; put 'put ''TlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGEsZCl9cGF0Y2goYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixhLGRQKGgsZCkpfXBvc3QoYSxk''@;'; put 'put ''LGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGEsZFAoaCxkKSl9cHV0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGEsZFAoaCxkKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEx4KSl9LGMuXHUwMjc1cHJv''@;'; put 'put ''dj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gcSQoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiB3aGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxkKX0pfWNvbnN0IFNoZT1uZXcgTWkoIiIpLCRfPW5ldyBN''@;'; put 'put ''aSgiIiksSyQ9bmV3IE1pKCIiKTtmdW5jdGlvbiBNaGUoKXtsZXQgYz1udWxsO3JldHVybihsLGEpPT57bnVsbD09PWMmJihjPShGaShTaGUse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VSaWdodCh3aGUscSQpKTtjb25zdCBkPUZpKCRNKSxoPWQuYWRkKCk7cmV0dXJuIGMobCxhKS5waXBl''@;'; put 'put ''KERfKCgpPT5kLnJlbW92ZShoKSkpfX1sZXQgWCQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEx4e2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5jaGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPUZpKCRNKX1oYW5kbGUoYSl7aWYo''@;'; put 'put ''bnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdldCgkXyksLi4udGhpcy5pbmplY3Rvci5nZXQoSyQsW10pXSkpO3RoaXMuY2hhaW49aC5yZWR1Y2VSaWdodCgoZixfKT0+ZnVuY3Rpb24gQ2hlKGMsbCxhKXtyZXR1cm4oZCxo''@;'; put 'put ''KT0+YS5ydW5JbkNvbnRleHQoKCk9PmwoZCxmPT5jKGYsaCkpKX0oZixfLHRoaXMuaW5qZWN0b3IpLHEkKX1jb25zdCBkPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiB0aGlzLmNoYWluKGEsaD0+dGhpcy5iYWNrZW5kLmhhbmRsZShoKSkucGlwZShEXygoKT0+dGhpcy5wZW5kaW5n''@;'; put 'put ''VGFza3MucmVtb3ZlKGQpKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFJ4KSxhcihxMCkpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IEFoZT0vXlwpXF1cfScsP1xuLztsZXQg''@;'; put 'put ''USQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnhockZhY3Rvcnk9YX1oYW5kbGUoYSl7aWYoIkpTT05QIj09PWEubWV0aG9kKXRocm93IG5ldyBBcigtMjgwMCwhMSk7Y29uc3QgZD10aGlzLnhockZhY3Rvcnk7cmV0dXJuKGQuXHUwMjc1bG9hZEltcGw/ZWEoZC5cdTAyNzVs''@;'; put 'put ''b2FkSW1wbCgpKTpXaShudWxsKSkucGlwZShTYSgoKT0+bmV3IEtlKGY9Pntjb25zdCBfPWQuYnVpbGQoKTtpZihfLm9wZW4oYS5tZXRob2QsYS51cmxXaXRoUGFyYW1zKSxhLndpdGhDcmVkZW50aWFscyYmKF8ud2l0aENyZWRlbnRpYWxzPSEwKSxhLmhlYWRlcnMuZm9yRWFjaCgoZXQseXQp''@;'; put 'put ''PT5fLnNldFJlcXVlc3RIZWFkZXIoZXQseXQuam9pbigiLCIpKSksYS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fF8uc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIWEuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtjb25z''@;'; put 'put ''dCBldD1hLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWV0JiZfLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZXQpfWlmKGEucmVzcG9uc2VUeXBlKXtjb25zdCBldD1hLnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO18ucmVzcG9uc2VUeXBlPSJqc29uIiE9PWV0''@;'; put 'put ''P2V0OiJ0ZXh0In1jb25zdCBUPWEuc2VyaWFsaXplQm9keSgpO2xldCBXPW51bGw7Y29uc3QgaWU9KCk9PntpZihudWxsIT09VylyZXR1cm4gVztjb25zdCBldD1fLnN0YXR1c1RleHR8fCJPSyIseXQ9bmV3IG9oKF8uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGt0PWZ1bmN0aW9uIFRoZShj''@;'; put 'put ''KXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfShfKXx8YS51cmw7cmV0dXJu''@;'; put 'put ''IFc9bmV3IHVQKHtoZWFkZXJzOnl0LHN0YXR1czpfLnN0YXR1cyxzdGF0dXNUZXh0OmV0LHVybDprdH0pLFd9LGdlPSgpPT57bGV0e2hlYWRlcnM6ZXQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6a3QsdXJsOlN0fT1pZSgpLFF0PW51bGw7MjA0IT09eXQmJihRdD10eXBlb2YgXy5yZXNwb25zZT4i''@;'; put 'put ''dSI/Xy5yZXNwb25zZVRleHQ6Xy5yZXNwb25zZSksMD09PXl0JiYoeXQ9UXQ/MjAwOjApO2xldCBubj15dD49MjAwJiZ5dDwzMDA7aWYoImpzb24iPT09YS5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgUXQpe2NvbnN0IG1uPVF0O1F0PVF0LnJlcGxhY2UoQWhlLCIiKTt0cnl7UXQ9''@;'; put 'put ''IiIhPT1RdD9KU09OLnBhcnNlKFF0KTpudWxsfWNhdGNoKEVuKXtRdD1tbixubiYmKG5uPSExLFF0PXtlcnJvcjpFbix0ZXh0OlF0fSl9fW5uPyhmLm5leHQobmV3IG44KHtib2R5OlF0LGhlYWRlcnM6ZXQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6a3QsdXJsOlN0fHx2b2lkIDB9KSksZi5jb21w''@;'; put 'put ''bGV0ZSgpKTpmLmVycm9yKG5ldyBXJCh7ZXJyb3I6UXQsaGVhZGVyczpldCxzdGF0dXM6eXQsc3RhdHVzVGV4dDprdCx1cmw6U3R8fHZvaWQgMH0pKX0sd2U9ZXQ9Pntjb25zdHt1cmw6eXR9PWllKCksa3Q9bmV3IFckKHtlcnJvcjpldCxzdGF0dXM6Xy5zdGF0dXN8fDAsc3RhdHVzVGV4dDpf''@;'; put 'put ''LnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6eXR8fHZvaWQgMH0pO2YuZXJyb3Ioa3QpfTtsZXQgRWU9ITE7Y29uc3QgWmU9ZXQ9PntFZXx8KGYubmV4dChpZSgpKSxFZT0hMCk7bGV0IHl0PXt0eXBlOnQ4LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmV0LmxvYWRlZH07ZXQubGVu''@;'; put 'put ''Z3RoQ29tcHV0YWJsZSYmKHl0LnRvdGFsPWV0LnRvdGFsKSwidGV4dCI9PT1hLnJlc3BvbnNlVHlwZSYmXy5yZXNwb25zZVRleHQmJih5dC5wYXJ0aWFsVGV4dD1fLnJlc3BvbnNlVGV4dCksZi5uZXh0KHl0KX0sb3Q9ZXQ9PntsZXQgeXQ9e3R5cGU6dDguVXBsb2FkUHJvZ3Jlc3MsbG9hZGVk''@;'; put 'put ''OmV0LmxvYWRlZH07ZXQubGVuZ3RoQ29tcHV0YWJsZSYmKHl0LnRvdGFsPWV0LnRvdGFsKSxmLm5leHQoeXQpfTtyZXR1cm4gXy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixnZSksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsd2UpLF8uYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIsd2Up''@;'; put 'put ''LF8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHdlKSxhLnJlcG9ydFByb2dyZXNzJiYoXy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWmUpLG51bGwhPT1UJiZfLnVwbG9hZCYmXy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLG90KSksXy5zZW5kKFQpLGYubmV4dCh7''@;'; put 'put ''dHlwZTp0OC5TZW50fSksKCk9PntfLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix3ZSksXy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsd2UpLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsZ2UpLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIsd2UpLGEucmVwb3J0''@;'; put 'put ''UHJvZ3Jlc3MmJihfLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixaZSksbnVsbCE9PVQmJl8udXBsb2FkJiZfLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsb3QpKSxfLnJlYWR5U3RhdGUhPT1fLkRPTkUmJl8uYWJvcnQoKX19KSkpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihjRykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGZQPW5ldyBNaSgiWFNSRl9FTkFCTEVEIiksZXE9bmV3IE1pKCJYU1JGX0NPT0tJRV9OQU1FIix7cHJvdmlk''@;'; put 'put ''ZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlhTUkYtVE9LRU4ifSksdHE9bmV3IE1pKCJYU1JGX0hFQURFUl9OQU1FIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlgtWFNSRi1UT0tFTiJ9KTtjbGFzcyBucXt9bGV0IExoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo''@;'; put 'put ''KXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJpbmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25z''@;'; put 'put ''dCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1YVyhhLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWEpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcyksYXIoR3MpLGFyKGVxKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gUmhlKGMsbCl7Y29uc3QgYT1jLnVybC50b0xvd2VyQ2FzZSgpO2lmKCFG''@;'; put 'put ''aShmUCl8fCJHRVQiPT09Yy5tZXRob2R8fCJIRUFEIj09PWMubWV0aG9kfHxhLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBsKGMpO2NvbnN0IGQ9RmkobnEpLmdldFRva2VuKCksaD1GaSh0cSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRl''@;'; put 'put ''cnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5zZXQoaCxkKX0pKSxsKGMpfXZhciBncD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMi''@;'; put 'put ''LGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09''@;'; put 'put ''IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRjaCIsY30oZ3B8fHt9KTtmdW5jdGlvbiBJNShjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIE9oZSguLi5jKXtjb25zdCBsPVtoUCxRJCxYJCx7cHJvdmlkZTpMeCx1c2VF''@;'; put 'put ''eGlzdGluZzpYJH0se3Byb3ZpZGU6UngsdXNlRXhpc3Rpbmc6USR9LHtwcm92aWRlOiRfLHVzZVZhbHVlOlJoZSxtdWx0aTohMH0se3Byb3ZpZGU6ZlAsdXNlVmFsdWU6ITB9LHtwcm92aWRlOm5xLHVzZUNsYXNzOkxoZX1dO2Zvcihjb25zdCBhIG9mIGMpbC5wdXNoKC4uLmEuXHUwMjc1cHJv''@;'; put 'put ''dmlkZXJzKTtyZXR1cm4gZnVuY3Rpb24gcnYoYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpjfX0obCl9Y29uc3QgcnE9bmV3IE1pKCJMRUdBQ1lfSU5URVJDRVBUT1JfRk4iKTtsZXQgRmhlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3''@;'; put 'put ''KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbT2hlKEk1KGdwLkxlZ2FjeUludGVyY2VwdG9ycyxbe3Byb3ZpZGU6cnEsdXNlRmFjdG9yeTpNaGV9LHtwcm92aWRlOiRfLHVzZUV4aXN0aW5nOnJxLG11bHRpOiEwfV0pKV19KSxjfSko''@;'; put 'put ''KSxpcT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3Rv''@;'; put 'put ''cmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1n''@;'; put 'put ''ZXRGaWxlRnJvbURyaXZlKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJs''@;'; put 'put ''fS9mb2xkZXI/X2ZvbGRlclBhdGg9JHthfWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4g''@;'; put 'put ''bmV3IFByb21pc2UoKGQsaCk9Pnt0aGlzLmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBUPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChUKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2Yg''@;'; put 'put ''YS5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZpbmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoaFApLGFyKGU4KSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj''@;'; put 'put ''LHByb3ZpZGVkSW46InJvb3QifSksY30pKCksb2E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnVzZXJTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnNhc2pzU2VydmljZT1mLHRoaXMubG9nZ2VyU2Vy''@;'; put 'put ''dmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBFcix0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXI9bmV3IEVyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IEVyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyhqJCgpKSx0aGlzLmFwcExv''@;'; put 'put ''Y0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyBUZSghMSksdGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3IFRlKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygp''@;'; put 'put ''LHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncyl7c3dpdGNoKHRoaXMuc2FzanNBZGFwdGVyPW5ldyhqJCgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgVWMuRC5TYXNWaXlhOnRo''@;'; put 'put ''aXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBVYy5ELlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIFVjLkQuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVwbG95KCl9IlJlZGly''@;'; put 'put ''ZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2ZW50U2VydmljZS5z''@;'; put 'put ''aG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIrYSxkKSxuZXcgUHJv''@;'; put 'put ''bWlzZSgoXyxUKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihXPT57aWYoITE9PT1XLmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxUKCExKSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmVy5N''@;'; put 'put ''Rl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpXLk1GX0dFVFVTRVJ9KSxXLlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoVy5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNp''@;'; put 'put ''dGVJZCgpLmluY2x1ZGVzKFcuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5lbWl0KFcuU1lTU0lURSkpKSw0MDQ9PT1XLnN0YXR1cyYmVCh7TUVTU0FHRTpXLmJvZHl8fCJTQVMgUmVzcG9uZGVkIHdpdGggZXJyb3IifSksdHlwZW9mIFcuc2FzanNBYm9ydDwidSIpe2Nv''@;'; put 'put ''bnN0IGllPVcsZ2U9aWUuc2FzanNBYm9ydFswXS5NU0csd2U9aWUuc2FzanNBYm9ydFswXS5NQUM7aWYoZ2UuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2Fk''@;'; put 'put ''ZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBUKHtlcnJvcjpnZX0pO2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwiIiksZ2Use1NZU1dBUk5JTkdU''@;'; put 'put ''RVhUOmllLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDppZS5TWVNFUlJPUlRFWFQsTUFDOndlfSksVCh7ZXJyb3I6Z2V9KX1fKFcpfSxXPT57aWYoY29uc29sZS5lcnJvcihXKSxXLmVycm9yKXtsZXQgZ2UsaWU9Vy5lcnJvci5tZXNzYWdlO1cuZXJyb3IuZGV0YWlscyYmVy5lcnJvci5k''@;'; put 'put ''ZXRhaWxzLmxvZyYmKGdlPVcuZXJyb3IuZGV0YWlscy5sb2cpLCghaWV8fGllLnRyaW0oKS5sZW5ndGg8MSkmJihpZT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLGllLHtM''@;'; put 'put ''T0c6Z2V9LCJSZXF1ZXN0IGVycm9yIiksVCh7ZXJyb3I6aWV9KX1UKFcpfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIudXBsb2FkRmlsZShhLGQsaCl9bG9naW4oYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBmPWguZ2V0''@;'; put 'put ''U2VydmVyVHlwZSgpPT09VWMuRC5TYXNqcz8iY2xpZW50SUQxIjp2b2lkIDA7cmV0dXJuIGguc2FzanNBZGFwdGVyLmxvZ0luKGEsZCxmKS50aGVuKF89PihfLmlzTG9nZ2VkSW4mJihoLnVzZXJTZXJ2aWNlLnVzZXI9e3VzZXJuYW1lOl8udXNlck5hbWV9LGguYXBwTG9jQ2hlY2tQZW5kaW5n''@;'; put 'put ''JiYoaC5jaGVja1ZpeWFEZXBsb3koaC5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIiksaC5hcHBMb2NDaGVja1BlbmRpbmc9ITEpKSxoLnNob3VsZExvZ2luLm5leHQoIV8uaXNMb2dnZWRJbiksXy5pc0xvZ2dlZEluKSxfPT4oY29uc29sZS5lcnJvcihfKSxoLnNob3VsZExvZ2luLm5l''@;'; put 'put ''eHQoITApLCExKSkuY2F0Y2goXz0+KDQwMz09PV8mJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgaG9zdCIpLCExKSl9KSgpfWdldExpY2Vuc2VTaXRlSWQoKXtyZXR1cm4gdGhpcy5saWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQoYSl7dGhpcy5saWNlbnNlX3NpdGVf''@;'; put 'put ''aWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIGE/YTpbYV0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJD''@;'; put 'put ''b250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUoZj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRl''@;'; put 'put ''ci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0sZj0+e2YuZXJyb3IuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhhLnNob3VsZExvZ2luLm5leHQoITApLGEuc2hvdWxkTG9naW4uc3Vic2NyaWJlKF89PnshMT09''@;'; put 'put ''PV8mJmxvY2F0aW9uLnJlbG9hZCgpfSkpOmYuZXJyb3IuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJuKCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxhLmV2ZW50U2VydmljZS5zdGFydHVw''@;'; put 'put ''RGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZmkoZnVuY3Rpb24qKGgsZil7''@;'; put 'put ''YS5jaGVja2luZ0ludGVydmFsPXNldEludGVydmFsKGZpKGZ1bmN0aW9uKigpe2Euc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbihfPT57XyYmKGNsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKF8pKX0pLmNhdGNoKF89PntjbGVhckludGVydmFsKGEuY2hlY2tpbmdJ''@;'; put 'put ''bnRlcnZhbCksZihfKX0pfSksMWUzKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2Uo''@;'; put 'put ''KGQsaCk9Pntjb25zdCBfPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShfKS5zdWJzY3JpYmUoVD0+e1QuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITAp''@;'; put 'put ''fSxUPT57VC5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZj0hMTtmPXR5cGVvZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiP3lpZWxk''@;'; put 'put ''IGQuYXBwTG9jQ2hlY2soYSk6eWllbGQgZC5hcHBMb2NDaGVja1ByZUF4aW9zZEFkYXB0ZXIoYSksZiYmZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKX0pKCl9YXBwTG9jQ2hlY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgaD1maShm''@;'; put 'put ''dW5jdGlvbiooZixfKXtsZXQgVyxUPSExO3RyeXtXPXlpZWxkIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcihhKX1jYXRjaChpZSl7IkxvZ2luUmVxdWlyZWRFcnJvciI9PT1pZS5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoITEpKTpUPSEw''@;'; put 'put ''fWlmKFQpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGQuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGYoITEpO2YoITApfSk7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKGYsXyl7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCBfPSExO3JldHVybiBmZXRjaChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRo''@;'; put 'put ''PSR7YX1gKS50aGVuKFQ9Pig0MDQ9PT1ULnN0YXR1cyYmKF89ITApLFQudGV4dCgpKSkudGhlbihUPT57aWYodGhpcy5pc0xvZ2luUmVxdWlyZWQoVCkpdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITAsdGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKTtlbHNle2lmKF8pcmV0dXJuIGNvbnNvbGUu''@;'; put 'put ''d2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2xldCBXPW51bGw7dHJ5e1c9SlNPTi5w''@;'; put 'put ''YXJzZShUKX1jYXRjaHt9aWYoVyYmVy5odHRwU3RhdHVzQ29kZSYmNDA0PT09Vy5odHRwU3RhdHVzQ29kZSlyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERh''@;'; put 'put ''dGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZCghMSk7ZCghMCl9fSkuY2F0Y2goVD0+e2QoITEpfSl9KX1pc0xvZ2luUmVxdWlyZWQoYSl7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uW14iXSopLio+L2dtLnRlc3QoYSl9bG9nb3V0KCl7dGhp''@;'; put 'put ''cy5zYXNqc0FkYXB0ZXIubG9nT3V0KCkudGhlbigoKT0+e2xvY2F0aW9uLnJlbG9hZCgpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKX1nZXRTYXNSZXF1ZXN0cygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1''@;'; put 'put ''ZXN0cygpfXNldERlYnVnU3RhdGUoYSl7dGhpcy5zYXNqc0FkYXB0ZXIuc2V0RGVidWdTdGF0ZShhKX1nZXRTYXNqc0luc3RhbmNlKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyfWdldFNlcnZlclR5cGUoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7cmV0''@;'; put 'put ''dXJuIGEuc2VydmVyVHlwZT9hLnNlcnZlclR5cGU6IlNBU1ZJWUEifWdldEV4ZWN1dGlvblBhdGgoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7c3dpdGNoKGEuc2VydmVyVHlwZSl7Y2FzZSBVYy5ELlNhc1ZpeWE6cmV0dXJuIGEucGF0aFNBU1ZpeWE7Y2Fz''@;'; put 'put ''ZSBVYy5ELlNhczk6cmV0dXJuIGEucGF0aFNBUzk7Y2FzZSBVYy5ELlNhc2pzOnJldHVybiBhLnBhdGhTQVNKU319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGU4KSxhcihhUCksYXIodmwpLGFyKGlxKSxhcih3MCksYXIoRHMpKX0sYy5cdTAy''@;'; put 'put ''NzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSx3MD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaW5qZWN0b3I9YX1sb2coYSxkKXt0aGlzLmluamVjdFNhc1NlcnZpY2UoKSx0aGlzLnNhc2pzQ29uZmlnPy5k''@;'; put 'put ''ZWJ1ZyYmKGQ/Y29uc29sZS5sb2coYSxkKTpjb25zb2xlLmxvZyhhKSl9ZXJyb3IoYSxkKXtjb25zb2xlLmVycm9yKGEsZCl9bG9nUmVxdWVzdERhdGEoYSxkKXtpZih0aGlzLmxvZygiLS0tIEFkYXB0ZXIgUmVxdWVzdCBJbnB1dCAtLS0iKSx0aGlzLmxvZyhhKSxkKXtmb3IobGV0IGggb2Yg''@;'; put 'put ''T2JqZWN0LmtleXMoZCkpdGhpcy5sb2coaCxkW2hdKTt0aGlzLmxvZygiLS0tLS0tIil9ZWxzZSB0aGlzLmxvZygibm8gZGF0YSBzZW50Iil9aW5qZWN0U2FzU2VydmljZSgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnKXtjb25zdCBhPXRoaXMuaW5qZWN0b3IuZ2V0KG9hKTt0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnPWEuZ2V0U2FzanNDb25maWcoKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEVhKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3Qgb3E9ZnVu''@;'; put 'put ''Y3Rpb24gWmhlKGMsbCl7cmV0dXJuIGM9PT1sfHxjIT1jJiZsIT1sfSxGeD1mdW5jdGlvbiBZaGUoYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGg7YS0tOylpZihvcShjW2FdWzBdLGwpKXJldHVybiBhO3JldHVybi0xfTt2YXIgR2hlPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7ZnVuY3Rpb24gcjgo''@;'; put 'put ''Yyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19cjgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHpoZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LHI4LnByb3RvdHlw''@;'; put 'put ''ZS5kZWxldGU9ZnVuY3Rpb24gJGhlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1GeChsLGMpO3JldHVybiEoYTwwfHwoYT09bC5sZW5ndGgtMT9sLnBvcCgpOkdoZS5jYWxsKGwsYSwxKSwtLXRoaXMuc2l6ZSwwKSl9LHI4LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gS2hlKGMpe3ZhciBsPXRo''@;'; put 'put ''aXMuX19kYXRhX18sYT1GeChsLGMpO3JldHVybiBhPDA/dm9pZCAwOmxbYV1bMV19LHI4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSmhlKGMpe3JldHVybiBGeCh0aGlzLl9fZGF0YV9fLGMpPi0xfSxyOC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIGVmZShjLGwpe3ZhciBhPXRoaXMuX19kYXRh''@;'; put 'put ''X18sZD1GeChhLGMpO3JldHVybiBkPDA/KCsrdGhpcy5zaXplLGEucHVzaChbYyxsXSkpOmFbZF1bMV09bCx0aGlzfTtjb25zdCBIeD1yOCxzcT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIGRmZT0ib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IHNoPXNxfHxkZmV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksbXA9c2guU3ltYm9sO3ZhciBhcT1PYmplY3QucHJvdG90eXBlLHBmZT1hcS5oYXNPd25Qcm9wZXJ0eSxnZmU9YXEudG9TdHJpbmcs''@;'; put 'put ''cV89bXA/bXAudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBiZmU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgbHE9bXA/bXAudG9TdHJpbmdUYWc6dm9pZCAwO2NvbnN0IGk4PWZ1bmN0aW9uIE1mZShjKXtyZXR1cm4gbnVsbD09Yz92b2lkIDA9PT1jPyJbb2JqZWN0IFVuZGVmaW5lZF0i''@;'; put 'put ''OiJbb2JqZWN0IE51bGxdIjpscSYmbHEgaW4gT2JqZWN0KGMpP2Z1bmN0aW9uIG1mZShjKXt2YXIgbD1wZmUuY2FsbChjLHFfKSxhPWNbcV9dO3RyeXtjW3FfXT12b2lkIDA7dmFyIGQ9ITB9Y2F0Y2h7fXZhciBoPWdmZS5jYWxsKGMpO3JldHVybiBkJiYobD9jW3FfXT1hOmRlbGV0ZSBjW3Ff''@;'; put 'put ''XSksaH0oYyk6ZnVuY3Rpb24geWZlKGMpe3JldHVybiBiZmUuY2FsbChjKX0oYyl9LEtfPWZ1bmN0aW9uIHhmZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4gbnVsbCE9YyYmKCJvYmplY3QiPT1sfHwiZnVuY3Rpb24iPT1sKX0sY3E9ZnVuY3Rpb24gRGZlKGMpe2lmKCFLXyhjKSlyZXR1cm4h''@;'; put 'put ''MTt2YXIgbD1pOChjKTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IFByb3h5XSI9PWx9O3ZhciBjLElmZT1zaFsiX19jb3JlLWpzX3NoYXJlZF9fIl0sdXE9''@;'; put 'put ''KGM9L1teLl0rJC8uZXhlYyhJZmUmJklmZS5rZXlzJiZJZmUua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK2M6IiI7dmFyIFBmZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgTDU9ZnVuY3Rpb24gRmZlKGMpe2lmKG51bGwhPWMpe3RyeXtyZXR1cm4gUGZl''@;'; put 'put ''LmNhbGwoYyl9Y2F0Y2h7fXRyeXtyZXR1cm4gYysiIn1jYXRjaHt9fXJldHVybiIifTt2YXIgTmZlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFVmZT1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2NvbnN0IFlmZT1mdW5jdGlvbiBaZmUoYyl7cmV0dXJuISghS18oYyl8fGZ1''@;'; put 'put ''bmN0aW9uIExmZShjKXtyZXR1cm4hIXVxJiZ1cSBpbiBjfShjKSkmJihjcShjKT9VZmU6TmZlKS50ZXN0KEw1KGMpKX0sUjU9ZnVuY3Rpb24gJGZlKGMsbCl7dmFyIGE9ZnVuY3Rpb24gV2ZlKGMsbCl7cmV0dXJuIGM/LltsXX0oYyxsKTtyZXR1cm4gWWZlKGEpP2E6dm9pZCAwfSxYXz1SNShz''@;'; put 'put ''aCwiTWFwIiksSl89UjUoT2JqZWN0LCJjcmVhdGUiKTt2YXIgcjNlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGEzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIG84KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlz''@;'; put 'put ''LmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fW84LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBYZmUoKXt0aGlzLl9fZGF0YV9fPUpfP0pfKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxvOC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFFmZShjKXt2YXIg''@;'; put 'put ''bD10aGlzLmhhcyhjKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bY107cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sbzgucHJvdG90eXBlLmdldD1mdW5jdGlvbiBpM2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztpZihKXyl7dmFyIGE9bFtjXTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmlu''@;'; put 'put ''ZWRfXyI9PT1hP3ZvaWQgMDphfXJldHVybiByM2UuY2FsbChsLGMpP2xbY106dm9pZCAwfSxvOC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGwzZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fO3JldHVybiBKXz92b2lkIDAhPT1sW2NdOmEzZS5jYWxsKGwsYyl9LG84LnByb3RvdHlwZS5zZXQ9ZnVu''@;'; put 'put ''Y3Rpb24gZDNlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhjKT8wOjEsYVtjXT1KXyYmdm9pZCAwPT09bD8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6bCx0aGlzfTtjb25zdCBkcT1vOCxOeD1mdW5jdGlvbiB2M2UoYyxsKXt2YXIgYT1j''@;'; put 'put ''Ll9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBnM2UoYyl7dmFyIGw9dHlwZW9mIGM7cmV0dXJuInN0cmluZyI9PWx8fCJudW1iZXIiPT1sfHwic3ltYm9sIj09bHx8ImJvb2xlYW4iPT1sPyJfX3Byb3RvX18iIT09YzpudWxsPT09Y30obCk/YVsic3RyaW5nIj09dHlwZW9mIGw/InN0cmluZyI6''@;'; put 'put ''Imhhc2giXTphLm1hcH07ZnVuY3Rpb24gczgoYyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19czgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGYzZSgpe3RoaXMuc2l6ZT0wLHRo''@;'; put 'put ''aXMuX19kYXRhX189e2hhc2g6bmV3IGRxLG1hcDpuZXcoWF98fEh4KSxzdHJpbmc6bmV3IGRxfX0sczgucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBfM2UoYyl7dmFyIGw9TngodGhpcyxjKS5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sczgucHJvdG90eXBlLmdldD1m''@;'; put 'put ''dW5jdGlvbiB5M2UoYyl7cmV0dXJuIE54KHRoaXMsYykuZ2V0KGMpfSxzOC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIEMzZShjKXtyZXR1cm4gTngodGhpcyxjKS5oYXMoYyl9LHM4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTTNlKGMsbCl7dmFyIGE9TngodGhpcyxjKSxkPWEuc2l6ZTtyZXR1''@;'; put 'put ''cm4gYS5zZXQoYyxsKSx0aGlzLnNpemUrPWEuc2l6ZT09ZD8wOjEsdGhpc307Y29uc3QgZ1A9czg7ZnVuY3Rpb24gYTgoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXz1uZXcgSHgoYyk7dGhpcy5zaXplPWwuc2l6ZX1hOC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gbmZlKCl7dGhpcy5fX2RhdGFf''@;'; put 'put ''Xz1uZXcgSHgsdGhpcy5zaXplPTB9LGE4LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gaWZlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1sLmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5zaXplPWwuc2l6ZSxhfSxhOC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIHNmZShjKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''X2RhdGFfXy5nZXQoYyl9LGE4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gbGZlKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhjKX0sYTgucHJvdG90eXBlLnNldD1mdW5jdGlvbiBrM2UoYyxsKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKGEgaW5zdGFuY2VvZiBIeCl7dmFyIGQ9YS5fX2Rh''@;'; put 'put ''dGFfXztpZighWF98fGQubGVuZ3RoPDE5OSlyZXR1cm4gZC5wdXNoKFtjLGxdKSx0aGlzLnNpemU9KythLnNpemUsdGhpczthPXRoaXMuX19kYXRhX189bmV3IGdQKGQpfXJldHVybiBhLnNldChjLGwpLHRoaXMuc2l6ZT1hLnNpemUsdGhpc307Y29uc3QgVDNlPWE4O3ZhciBMM2U9ZnVuY3Rp''@;'; put 'put ''b24oKXt0cnl7dmFyIGM9UjUoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBjKHt9LCIiLHt9KSxjfWNhdGNoe319KCk7Y29uc3QgaHE9TDNlLGZxPWZ1bmN0aW9uIFIzZShjLGwsYSl7Il9fcHJvdG9fXyI9PWwmJmhxP2hxKGMsbCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6''@;'; put 'put ''ITAsdmFsdWU6YSx3cml0YWJsZTohMH0pOmNbbF09YX07dmFyIFAzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IHBxPWZ1bmN0aW9uIEYzZShjLGwsYSl7dmFyIGQ9Y1tsXTsoIVAzZS5jYWxsKGMsbCl8fCFvcShkLGEpfHx2b2lkIDA9PT1hJiYhKGwgaW4gYykpJiZm''@;'; put 'put ''cShjLGwsYSl9LFZ4PWZ1bmN0aW9uIEgzZShjLGwsYSxkKXt2YXIgaD0hYTthfHwoYT17fSk7Zm9yKHZhciBmPS0xLF89bC5sZW5ndGg7KytmPF87KXt2YXIgVD1sW2ZdLFc9ZD9kKGFbVF0sY1tUXSxULGEsYyk6dm9pZCAwO3ZvaWQgMD09PVcmJihXPWNbVF0pLGg/ZnEoYSxULFcpOnBxKGEs''@;'; put 'put ''VCxXKX1yZXR1cm4gYX0sbDg9ZnVuY3Rpb24gQjNlKGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGN9LGdxPWZ1bmN0aW9uIHozZShjKXtyZXR1cm4gbDgoYykmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1pOChjKX07dmFyIG1xPU9iamVjdC5wcm90b3R5cGUsVTNlPW1xLmhh''@;'; put 'put ''c093blByb3BlcnR5LFozZT1tcS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxZM2U9Z3EoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9ncTpmdW5jdGlvbihjKXtyZXR1cm4gbDgoYykmJlUzZS5jYWxsKGMsImNhbGxlZSIpJiYhWjNlLmNhbGwoYywiY2FsbGVlIil9O2NvbnN0IFczZT1Z''@;'; put 'put ''M2UsYzg9QXJyYXkuaXNBcnJheTt2YXIgdnE9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxfcT12cSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGJxPV9xJiZfcS5l''@;'; put 'put ''eHBvcnRzPT09dnE/c2guQnVmZmVyOnZvaWQgMDtjb25zdCB5cT0oYnE/YnEuaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24gJDNlKCl7cmV0dXJuITF9O3ZhciBlcGU9L14oPzowfFsxLTldXGQqKSQvO2NvbnN0IG5wZT1mdW5jdGlvbiB0cGUoYyxsKXt2YXIgYT10eXBlb2YgYztyZXR1cm4h''@;'; put 'put ''IShsPWw/PzkwMDcxOTkyNTQ3NDA5OTEpJiYoIm51bWJlciI9PWF8fCJzeW1ib2wiIT1hJiZlcGUudGVzdChjKSkmJmM+LTEmJmMlMT09MCYmYzxsfSx3cT1mdW5jdGlvbiBpcGUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9''@;'; put 'put ''O3ZhciBubD17fTtubFsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09bmxbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPW5sWyJbb2JqZWN0IEludDhBcnJheV0iXT1ubFsiW29iamVjdCBJbnQxNkFycmF5XSJdPW5sWyJbb2JqZWN0IEludDMyQXJyYXldIl09bmxbIltvYmplY3QgVWludDhBcnJh''@;'; put 'put ''eV0iXT1ubFsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1ubFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1ubFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxubFsiW29iamVjdCBBcmd1bWVudHNdIl09bmxbIltvYmplY3QgQXJyYXldIl09bmxbIltvYmplY3QgQXJyYXlCdWZmZXJd''@;'; put 'put ''Il09bmxbIltvYmplY3QgQm9vbGVhbl0iXT1ubFsiW29iamVjdCBEYXRhVmlld10iXT1ubFsiW29iamVjdCBEYXRlXSJdPW5sWyJbb2JqZWN0IEVycm9yXSJdPW5sWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPW5sWyJbb2JqZWN0IE1hcF0iXT1ubFsiW29iamVjdCBOdW1iZXJdIl09bmxbIltvYmpl''@;'; put 'put ''Y3QgT2JqZWN0XSJdPW5sWyJbb2JqZWN0IFJlZ0V4cF0iXT1ubFsiW29iamVjdCBTZXRdIl09bmxbIltvYmplY3QgU3RyaW5nXSJdPW5sWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgbVA9ZnVuY3Rpb24gSXBlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciBD''@;'; put 'put ''cT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFFfPUNxJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsdlA9UV8mJlFfLmV4cG9ydHM9PT1DcSYmc3EucHJvY2Vzcztj''@;'; put 'put ''b25zdCB1OD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gUV8mJlFfLnJlcXVpcmUmJlFfLnJlcXVpcmUoInV0aWwiKS50eXBlc3x8dlAmJnZQLmJpbmRpbmcmJnZQLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO3ZhciBTcT11OCYmdTguaXNUeXBlZEFycmF5O2NvbnN0IFBwZT1TcT9tUChTcSk6''@;'; put 'put ''ZnVuY3Rpb24gVHBlKGMpe3JldHVybiBsOChjKSYmd3EoYy5sZW5ndGgpJiYhIW5sW2k4KGMpXX07dmFyIEhwZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IE1xPWZ1bmN0aW9uIE5wZShjLGwpe3ZhciBhPWM4KGMpLGQ9IWEmJlczZShjKSxoPSFhJiYhZCYmeXEoYyks''@;'; put 'put ''Zj0hYSYmIWQmJiFoJiZQcGUoYyksXz1hfHxkfHxofHxmLFQ9Xz9mdW5jdGlvbiBOM2UoYyxsKXtmb3IodmFyIGE9LTEsZD1BcnJheShjKTsrK2E8YzspZFthXT1sKGEpO3JldHVybiBkfShjLmxlbmd0aCxTdHJpbmcpOltdLFc9VC5sZW5ndGg7Zm9yKHZhciBpZSBpbiBjKShsfHxIcGUuY2Fs''@;'; put 'put ''bChjLGllKSkmJighX3x8ISgibGVuZ3RoIj09aWV8fGgmJigib2Zmc2V0Ij09aWV8fCJwYXJlbnQiPT1pZSl8fGYmJigiYnVmZmVyIj09aWV8fCJieXRlTGVuZ3RoIj09aWV8fCJieXRlT2Zmc2V0Ij09aWUpfHxucGUoaWUsVykpKSYmVC5wdXNoKGllKTtyZXR1cm4gVH07dmFyIFZwZT1PYmpl''@;'; put 'put ''Y3QucHJvdG90eXBlO2NvbnN0IF9QPWZ1bmN0aW9uIEJwZShjKXt2YXIgbD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBsJiZsLnByb3RvdHlwZXx8VnBlKX0seHE9ZnVuY3Rpb24ganBlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjKGwo''@;'; put 'put ''YSkpfX0sVXBlPXhxKE9iamVjdC5rZXlzLE9iamVjdCk7dmFyIFlwZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IEVxPWZ1bmN0aW9uICRwZShjKXtyZXR1cm4gbnVsbCE9YyYmd3EoYy5sZW5ndGgpJiYhY3EoYyl9LGJQPWZ1bmN0aW9uIHFwZShjKXtyZXR1cm4gRXEo''@;'; put 'put ''Yyk/TXEoYyk6ZnVuY3Rpb24gV3BlKGMpe2lmKCFfUChjKSlyZXR1cm4gVXBlKGMpO3ZhciBsPVtdO2Zvcih2YXIgYSBpbiBPYmplY3QoYykpWXBlLmNhbGwoYyxhKSYmImNvbnN0cnVjdG9yIiE9YSYmbC5wdXNoKGEpO3JldHVybiBsfShjKX07dmFyIHQ0ZT1PYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5O2NvbnN0IHI0ZT1mdW5jdGlvbiBuNGUoYyl7aWYoIUtfKGMpKXJldHVybiBmdW5jdGlvbiBKcGUoYyl7dmFyIGw9W107aWYobnVsbCE9Yylmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWwucHVzaChhKTtyZXR1cm4gbH0oYyk7dmFyIGw9X1AoYyksYT1bXTtmb3IodmFyIGQg''@;'; put 'put ''aW4gYykiY29uc3RydWN0b3IiPT1kJiYobHx8IXQ0ZS5jYWxsKGMsZCkpfHxhLnB1c2goZCk7cmV0dXJuIGF9LHlQPWZ1bmN0aW9uIGk0ZShjKXtyZXR1cm4gRXEoYyk/TXEoYywhMCk6cjRlKGMpfTt2YXIga3E9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5u''@;'; put 'put ''b2RlVHlwZSYmZXhwb3J0cyxBcT1rcSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLFRxPUFxJiZBcS5leHBvcnRzPT09a3E/c2guQnVmZmVyOnZvaWQgMCxEcT1UcT9UcS5hbGxvY1Vuc2FmZTp2b2lkIDA7Y29uc3QgSXE9ZnVuY3Rp''@;'; put 'put ''b24gcDRlKCl7cmV0dXJuW119O3ZhciBtNGU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxMcT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHY0ZT1McT9mdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09Yz9bXTooYz1PYmplY3QoYyksZnVuY3Rpb24gaDRlKGMsbCl7''@;'; put 'put ''Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9MCxmPVtdOysrYTxkOyl7dmFyIF89Y1thXTtsKF8sYSxjKSYmKGZbaCsrXT1fKX1yZXR1cm4gZn0oTHEoYyksZnVuY3Rpb24obCl7cmV0dXJuIG00ZS5jYWxsKGMsbCl9KSl9OklxO2NvbnN0IHdQPXY0ZSxScT1mdW5jdGlvbiB5''@;'; put 'put ''NGUoYyxsKXtmb3IodmFyIGE9LTEsZD1sLmxlbmd0aCxoPWMubGVuZ3RoOysrYTxkOyljW2grYV09bFthXTtyZXR1cm4gY30sT3E9eHEoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIFM0ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIg''@;'; put 'put ''bD1bXTtjOylScShsLHdQKGMpKSxjPU9xKGMpO3JldHVybiBsfTpJcTtjb25zdCBQcT1TNGUsRnE9ZnVuY3Rpb24gRTRlKGMsbCxhKXt2YXIgZD1sKGMpO3JldHVybiBjOChjKT9kOlJxKGQsYShjKSl9LEE0ZT1mdW5jdGlvbiBrNGUoYyl7cmV0dXJuIEZxKGMsYlAsd1ApfSxENGU9ZnVuY3Rp''@;'; put 'put ''b24gVDRlKGMpe3JldHVybiBGcShjLHlQLFBxKX0sQ1A9UjUoc2gsIkRhdGFWaWV3IiksU1A9UjUoc2gsIlByb21pc2UiKSxNUD1SNShzaCwiU2V0IikseFA9UjUoc2gsIldlYWtNYXAiKTt2YXIgSHE9IltvYmplY3QgTWFwXSIsTnE9IltvYmplY3QgUHJvbWlzZV0iLFZxPSJbb2JqZWN0IFNl''@;'; put 'put ''dF0iLEJxPSJbb2JqZWN0IFdlYWtNYXBdIixqcT0iW29iamVjdCBEYXRhVmlld10iLEY0ZT1MNShDUCksSDRlPUw1KFhfKSxONGU9TDUoU1ApLFY0ZT1MNShNUCksQjRlPUw1KHhQKSxPNT1pODsoQ1AmJk81KG5ldyBDUChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9anF8fFhfJiZPNShuZXcgWF8p''@;'; put 'put ''IT1IcXx8U1AmJk81KFNQLnJlc29sdmUoKSkhPU5xfHxNUCYmTzUobmV3IE1QKSE9VnF8fHhQJiZPNShuZXcgeFApIT1CcSkmJihPNT1mdW5jdGlvbihjKXt2YXIgbD1pOChjKSxhPSJbb2JqZWN0IE9iamVjdF0iPT1sP2MuY29uc3RydWN0b3I6dm9pZCAwLGQ9YT9MNShhKToiIjtpZihkKXN3''@;'; put 'put ''aXRjaChkKXtjYXNlIEY0ZTpyZXR1cm4ganE7Y2FzZSBINGU6cmV0dXJuIEhxO2Nhc2UgTjRlOnJldHVybiBOcTtjYXNlIFY0ZTpyZXR1cm4gVnE7Y2FzZSBCNGU6cmV0dXJuIEJxfXJldHVybiBsfSk7Y29uc3QgRVA9TzU7dmFyIHo0ZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5''@;'; put 'put ''O2NvbnN0IHpxPXNoLlVpbnQ4QXJyYXksa1A9ZnVuY3Rpb24gVzRlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyB6cShsKS5zZXQobmV3IHpxKGMpKSxsfTt2YXIgcTRlPS9cdyokLzt2YXIgVXE9bXA/bXAucHJvdG90eXBlOnZvaWQgMCxacT1V''@;'; put 'put ''cT9VcS52YWx1ZU9mOnZvaWQgMDtjb25zdCBDNWU9ZnVuY3Rpb24gdzVlKGMsbCxhKXt2YXIgZD1jLmNvbnN0cnVjdG9yO3N3aXRjaChsKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4ga1AoYyk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJl''@;'; put 'put ''dHVybiBuZXcgZCgrYyk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGZ1bmN0aW9uIEc0ZShjLGwpe3ZhciBhPWw/a1AoYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmJ5dGVMZW5ndGgpfShjLGEpO2Nhc2UiW29iamVj''@;'; put 'put ''dCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50''@;'; put 'put ''OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBmdW5jdGlvbiBlNWUoYyxsKXt2YXIgYT1sP2tQKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQs''@;'; put 'put ''Yy5sZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBNYXBdIjpjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBkO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBkKGMpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''SzRlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuc291cmNlLHE0ZS5leGVjKGMpKTtyZXR1cm4gbC5sYXN0SW5kZXg9Yy5sYXN0SW5kZXgsbH0oYyk7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBmdW5jdGlvbiBKNGUoYyl7cmV0dXJuIFpxP09iamVjdChacS5jYWxsKGMpKTp7''@;'; put 'put ''fX0oYyl9fTt2YXIgWXE9T2JqZWN0LmNyZWF0ZSxTNWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKCl7fXJldHVybiBmdW5jdGlvbihsKXtpZighS18obCkpcmV0dXJue307aWYoWXEpcmV0dXJuIFlxKGwpO2MucHJvdG90eXBlPWw7dmFyIGE9bmV3IGM7cmV0dXJuIGMucHJvdG90eXBlPXZvaWQg''@;'; put 'put ''MCxhfX0oKTtjb25zdCBNNWU9UzVlO3ZhciBXcT11OCYmdTguaXNNYXA7Y29uc3QgSTVlPVdxP21QKFdxKTpmdW5jdGlvbiBBNWUoYyl7cmV0dXJuIGw4KGMpJiYiW29iamVjdCBNYXBdIj09RVAoYyl9O3ZhciBHcT11OCYmdTguaXNTZXQ7Y29uc3QgRjVlPUdxP21QKEdxKTpmdW5jdGlvbiBS''@;'; put 'put ''NWUoYyl7cmV0dXJuIGw4KGMpJiYiW29iamVjdCBTZXRdIj09RVAoYyl9O3ZhciAkcT0iW29iamVjdCBBcmd1bWVudHNdIixxcT0iW29iamVjdCBGdW5jdGlvbl0iLEtxPSJbb2JqZWN0IE9iamVjdF0iLFlhPXt9O1lhWyRxXT1ZYVsiW29iamVjdCBBcnJheV0iXT1ZYVsiW29iamVjdCBBcnJh''@;'; put 'put ''eUJ1ZmZlcl0iXT1ZYVsiW29iamVjdCBEYXRhVmlld10iXT1ZYVsiW29iamVjdCBCb29sZWFuXSJdPVlhWyJbb2JqZWN0IERhdGVdIl09WWFbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPVlhWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1ZYVsiW29iamVjdCBJbnQ4QXJyYXldIl09WWFbIltv''@;'; put 'put ''YmplY3QgSW50MTZBcnJheV0iXT1ZYVsiW29iamVjdCBJbnQzMkFycmF5XSJdPVlhWyJbb2JqZWN0IE1hcF0iXT1ZYVsiW29iamVjdCBOdW1iZXJdIl09WWFbS3FdPVlhWyJbb2JqZWN0IFJlZ0V4cF0iXT1ZYVsiW29iamVjdCBTZXRdIl09WWFbIltvYmplY3QgU3RyaW5nXSJdPVlhWyJbb2Jq''@;'; put 'put ''ZWN0IFN5bWJvbF0iXT1ZYVsiW29iamVjdCBVaW50OEFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLFlhWyJbb2JqZWN0IEVycm9yXSJdPVlhW3FxXT1ZYVsiW29i''@;'; put 'put ''amVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IGNnZT1mdW5jdGlvbiBCeChjLGwsYSxkLGgsZil7dmFyIF8sVD0xJmwsVz0yJmwsaWU9NCZsO2lmKGEmJihfPWg/YShjLGQsaCxmKTphKGMpKSx2b2lkIDAhPT1fKXJldHVybiBfO2lmKCFLXyhjKSlyZXR1cm4gYzt2YXIgZ2U9YzgoYyk7aWYoZ2Up''@;'; put 'put ''e2lmKF89ZnVuY3Rpb24gVTRlKGMpe3ZhciBsPWMubGVuZ3RoLGE9bmV3IGMuY29uc3RydWN0b3IobCk7cmV0dXJuIGwmJiJzdHJpbmciPT10eXBlb2YgY1swXSYmejRlLmNhbGwoYywiaW5kZXgiKSYmKGEuaW5kZXg9Yy5pbmRleCxhLmlucHV0PWMuaW5wdXQpLGF9KGMpLCFUKXJldHVybiBm''@;'; put 'put ''dW5jdGlvbiB1NGUoYyxsKXt2YXIgYT0tMSxkPWMubGVuZ3RoO2ZvcihsfHwobD1BcnJheShkKSk7KythPGQ7KWxbYV09Y1thXTtyZXR1cm4gbH0oYyxfKX1lbHNle3ZhciB3ZT1FUChjKSxFZT13ZT09cXF8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXdlO2lmKHlxKGMpKXJldHVy''@;'; put 'put ''biBmdW5jdGlvbiBsNGUoYyxsKXtpZihsKXJldHVybiBjLnNsaWNlKCk7dmFyIGE9Yy5sZW5ndGgsZD1EcT9EcShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsVCk7aWYod2U9PUtxfHx3ZT09JHF8fEVlJiYhaCl7aWYoXz1XfHxFZT97fTpmdW5jdGlvbiB4''@;'; put 'put ''NWUoYyl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGMuY29uc3RydWN0b3J8fF9QKGMpP3t9Ok01ZShPcShjKSl9KGMpLCFUKXJldHVybiBXP2Z1bmN0aW9uIE00ZShjLGwpe3JldHVybiBWeChjLFBxKGMpLGwpfShjLGZ1bmN0aW9uIG80ZShjLGwpe3JldHVybiBjJiZWeChsLHlQKGwpLGMp''@;'; put 'put ''fShfLGMpKTpmdW5jdGlvbiBfNGUoYyxsKXtyZXR1cm4gVngoYyx3UChjKSxsKX0oYyxmdW5jdGlvbiBLcGUoYyxsKXtyZXR1cm4gYyYmVngobCxiUChsKSxjKX0oXyxjKSl9ZWxzZXtpZighWWFbd2VdKXJldHVybiBoP2M6e307Xz1DNWUoYyx3ZSxUKX19Znx8KGY9bmV3IFQzZSk7dmFyIFpl''@;'; put 'put ''PWYuZ2V0KGMpO2lmKFplKXJldHVybiBaZTtmLnNldChjLF8pLEY1ZShjKT9jLmZvckVhY2goZnVuY3Rpb24oeXQpe18uYWRkKEJ4KHl0LGwsYSx5dCxjLGYpKX0pOkk1ZShjKSYmYy5mb3JFYWNoKGZ1bmN0aW9uKHl0LGt0KXtfLnNldChrdCxCeCh5dCxsLGEsa3QsYyxmKSl9KTt2YXIgZXQ9''@;'; put 'put ''Z2U/dm9pZCAwOihpZT9XP0Q0ZTpBNGU6Vz95UDpiUCkoYyk7cmV0dXJuIGZ1bmN0aW9uIEQzZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0sYSxjKTspO30oZXR8fGMsZnVuY3Rpb24oeXQsa3Qpe2V0JiYoeXQ9Y1trdD15dF0pLHBx''@;'; put 'put ''KF8sa3QsQngoeXQsbCxhLGt0LGMsZikpfSksX30sang9ZnVuY3Rpb24gaGdlKGMpe3JldHVybiBjZ2UoYyw1KX07dmFyIGZnZT1GKDkyODczKTtsZXQgQWM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5sb2FkTW9yZUNvdW50PTUwLHRo''@;'; put 'put ''aXMuaXNNaWNyb3NvZnQ9ITEsdGhpcy5pc01pY3Jvc29mdD10aGlzLmlzSUVvckVER0UoKSxjb25zb2xlLmxvZygiSXMgSUUgb3IgRWRnZT8iLHRoaXMuaXNNaWNyb3NvZnQpfWNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoYSxkPSJkYXlzIil7bGV0IGgsZj0wO2g9YSBpbnN0YW5jZW9mIERhdGU/''@;'; put 'put ''YTpuZXcgRGF0ZShhKSxmPW5ldyBEYXRlKERhdGUuVVRDKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXREYXRlKCksaC5nZXRIb3VycygpLGguZ2V0TWludXRlcygpLGguZ2V0U2Vjb25kcygpKSkudmFsdWVPZigpO2NvbnN0IFc9ZiszMTU2MTkyZTU7c3dpdGNoKGQpe2Nhc2Ui''@;'; put 'put ''ZGF5cyI6e2xldCBpZT1XLzg2NGU1O3JldHVybiBpZT1NYXRoLmFicyhpZSksaWU9TWF0aC5mbG9vcihpZSksaWV9Y2FzZSJzZWNvbmRzIjpyZXR1cm4gVy8xZTN9cmV0dXJuIDB9Y29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQ9ImRheXMiKXtpZigibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBh''@;'; put 'put ''cnNlRmxvYXQoYSkpLCJzZWNvbmRzIj09PWQpe2xldCBUPTFlMyphLTMxNTYxOTJlNTtyZXR1cm4gVCs9NjAqbmV3IERhdGUoVCkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMsbmV3IERhdGUoVCl9cmV0dXJuIG5ldyBEYXRlKDg2NGU1KmEtMzE1NjE5MmU1KX10cmVlT25GaWx0ZXIoYSxkKXts''@;'; put 'put ''ZXQgaD1hLnNlYXJjaFN0cmluZz9hLnNlYXJjaFN0cmluZzoiIixmPWQuc3BsaXQoIi4iKVswXSxfPWQuc3BsaXQoIi4iKVsxXSxUPWYrIkFsbCI7YVtmXSYmKGFbVF18fChhW1RdPXRoaXMuZGVlcENsb25lKGFbZl0pKSxhW2ZdPXRoaXMuZGVlcENsb25lKGFbVF0pLGgubGVuZ3RoPjAmJihh''@;'; put 'put ''W2ZdPWFbZl0uZmlsdGVyKF8/Vz0+V1tfXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSk6Vz0+Vy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSkpKSl9bGlicmFyeU9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wP2EuZm9yRWFjaChmPT57Zlto''@;'; put 'put ''XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSk/KGYuaGlkZGVuPSExLGYuaW5Gb3JlZ3JvdW5kPSEwKTooZi5oaWRkZW49ITAsZi5pbkZvcmVncm91bmQ9ITEpfSk6KHRoaXMucmVzZXRBcnJheUZpbHRlcihhKSx0aGlzLmRpc3BsYXlMaWJyYXJpZXMoYSkpfWRpc3Bs''@;'; put 'put ''YXlMaWJyYXJpZXMoYSxkKXtkP3RoaXMuc2hvd25MaWJyYXJpZXMrPXRoaXMubG9hZE1vcmVDb3VudDoodGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLnJlc2V0TGlicmFyeUZvcmVncm91bmQoYSkpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGgmJmghPT10aGlzLnNob3duTGlicmFyaWVzO2gr''@;'; put 'put ''KylhW2hdLmluRm9yZWdyb3VuZD0hMH1yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpe2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uaW5Gb3JlZ3JvdW5kPSExfW1ldGFPYmplY3RPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD8odGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLGEuZm9y''@;'; put 'put ''RWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSl8fChmLmhpZGRlbj0hMCl9KSk6dGhpcy5yZXNldEFycmF5RmlsdGVyKGEpfXJlc2V0QXJyYXlGaWx0ZXIoYSl7YS5mb3JFYWNoKGQ9PntkLmhpZGRlbj0hMSxkLmluRm9yZWdyb3VuZCYmZGVsZXRl''@;'; put 'put ''IGQuaW5Gb3JlZ3JvdW5kfSl9aXNJRW9yRURHRSgpe3ZhciBhPXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybiBhLmluZGV4T2YoIk1TSUUgIik+MHx8KGEuaW5kZXhPZigiVHJpZGVudC8iKT4wPyhhLmluZGV4T2YoInJ2OiIpLCEwKTphLmluZGV4T2YoIkVkZ2UvIik+MCl9Y29u''@;'; put 'put ''dmVydE9iamVjdHNUb0FycmF5KGEsZD0hMSl7cmV0dXJuIGQmJihhPXRoaXMuZGVlcENsb25lKGEpKSxhLm1hcChoPT5PYmplY3Qua2V5cyhoKS5tYXAoZj0+aFtmXSkpfWFkZExlYWRpbmdaZXJvKGEpe3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhLmxlbmd0''@;'; put 'put ''aDwyPyIwIithOmF9ZGVsZXRlS2V5c0FuZEhhc2goYSxkLGg9ITApe2NvbnN0IGY9aD90aGlzLmRlZXBDbG9uZShhKTphO2ZvcihsZXQgXyBvZiBkKWRlbGV0ZSBmW19dO3JldHVybiBmZ2UoSlNPTi5zdHJpbmdpZnkoZikpLnRvU3RyaW5nKCl9ZG93bmxvYWRUZXh0RmlsZShhLGQpe2NvbnN0''@;'; put 'put ''IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2guc2V0QXR0cmlidXRlKCJocmVmIiwiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoZCkpLGguc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYSsiLnR4dCIpLGguc3R5bGUuZGlzcGxheT0ibm9u''@;'; put 'put ''ZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxoLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX1jb252ZXJ0QXJyYXlWYWx1ZXMoYSxkKXtpZihhLmxlbmd0aDwxKXJldHVybltdO3N3aXRjaChkKXtjYXNlIm51bWJlciI6cmV0dXJuIGEubWFwKGg9PjEqaCk7Y2Fz''@;'; put 'put ''ZSJzdHJpbmciOnJldHVybiBhLnRvU3RyaW5nKCkuc3BsaXQoIiwiKX19ZGVib3VuY2VDYWxsKGEsZCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KGQsYSl9ZGVlcENsb25lKGEpe3JldHVybiBqeChhKX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksQzA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5sb2dn''@;'; put 'put ''ZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlz''@;'; put 'put ''Ll9saWNlbmNlU3RhdGU9c1AsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19hbGxvd2VkOjEvMCxlZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFibGVzX2lu''@;'; put 'put ''X2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlfbGltaXQ6MS8wLHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNlX2tleTp0''@;'; put 'put ''aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6S28oKS5hZGQoMSwieWVhciIpLmZvcm1hdCgiWVlZWS1NTS1ERCIpLHNpdGVf''@;'; put 'put ''aWQ6IiIsc2l0ZV9pZF9tdWx0aXBsZTpbXX0sdGhpcy5pc0FwcEFjdGl2YXRlZD1uZXcgVGUobnVsbCksdGhpcy5pc0FwcE92ZXJDYXBhY2l0eT1uZXcgVGUoITEpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlcj1uZXcgVGUoITEpLHRoaXMuYXBwTG9ja2VkPW5ldyBUZSghMSksdGhpcy5s''@;'; put 'put ''aWNlbnNlRXhwaXJlc0luRGF5cz1uZXcgVGUobnVsbCksdGhpcy5pc0FwcEZyZWVUaWVyPW5ldyBUZSghMSksdGhpcy5saWNlbmNlUHJvYmxlbT1uZXcgVGUobnVsbCksdGhpcy5ob3RfbGljZW5zZV9rZXk9bmV3IFRlKHZvaWQgMCksdGhpcy5saWNlbmNlU3RhdGU9bmV3IFRlKHRoaXMuX2xp''@;'; put 'put ''Y2VuY2VTdGF0ZSksdGhpcy5zYXNTZXJ2aWNlLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIuc3Vic2NyaWJlKFc9PntpZihudWxsIT09dGhpcy5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmIXRoaXMuaXNBcHBGcmVlVGllci52YWx1ZSl7Y29uc3QgaWU9YC9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3Nt''@;'; put 'put ''YXRjaCZtaXNzbWF0Y2hJZD0ke1d9JmZvcmNlPXRydWVgO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChpZSksdGhpcy5kZWFjdGl2YXRlQXBwKGllKX19KX1hY3RpdmF0aW9uKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGlj''@;'; put 'put ''ZW5zZV9rZXk9ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5saWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVz''@;'; put 'put ''KGEpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1swXS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKCFhfHwhYVswXSl7Y29uc3QgXz0nRXJyb3IgZ2V0dGluZyAi''@;'; put 'put ''R2xvYnZhcnMiIGZyb20gc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UuJztyZXR1cm4gY29uc29sZS5lcnJvcihfKSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYShf''@;'; put 'put ''KX1gKX1sZXQgZj1hWzBdO3JldHVybiB2b2lkIDA9PT1mLkxJQ0VOQ0VfS0VZfHx2b2lkIDA9PT1mLkFDVElWQVRJT05fS0VZfHxudWxsPT1mLlJFR0lTVEVSQ09VTlR8fG51bGw9PWYuSVNSRUdJU1RFUkVEPyhjb25zb2xlLmVycm9yKCJTb21lIG9mIGdsb2J2YXJzIGFyZSBub3QgcHJlc2Vu''@;'; put 'put ''dCIpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlNvbWUgb2YgdGhlIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2UiKSk6Zi5MSUNFTkNFX0tFWSYmZi5BQ1RJVkFUSU9OX0tF''@;'; put 'put ''WT8oaC5saWNlbmNlS2V5PWYuTElDRU5DRV9LRVksaC5hY3RpdmF0aW9uS2V5PWYuQUNUSVZBVElPTl9LRVksdm9pZCh5aWVsZCBoLmRlY3J5cHRMaWNlbnNlS2V5KGYuTElDRU5DRV9LRVksZi5BQ1RJVkFUSU9OX0tFWSkudGhlbihmdW5jdGlvbigpe3ZhciBfPWZpKGZ1bmN0aW9uKihUKXt5''@;'; put 'put ''aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihULGYsZCl9KTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIF8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciBfPWZpKGZ1bmN0aW9uKihUKXtjb25zdCBXPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAk''@;'; put 'put ''e1R9YDtjb25zb2xlLmVycm9yKFcpO2NvbnN0IGllPWAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKFcpfSZmb3JjZT10cnVlYDtoLmxpY2VuY2VQcm9ibGVtLm5leHQoaWUpLGgucm91dGVyLm5hdmlnYXRlQnlVcmwoaWUpLHNldFRpbWVvdXQoKCk9PmguYXBw''@;'; put 'put ''bGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVybiBmdW5jdGlvbihUKXtyZXR1cm4gXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQp''@;'; put 'put ''fSkoKX1hcHBsaWNhdGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpO2xldCBfPXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5''@;'; put 'put ''OnRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlO198fChfPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQoXyksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJz''@;'; put 'put ''QWxsb3dlZChhKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpULGRheXNUb0V4cGlyeTpXfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJ''@;'; put 'put ''bj1XLHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChXKSxXPD0wKXJldHVybiBjb25zb2xlLmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVFeHBpcnkoVCxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxk''@;'; put 'put ''JiZ0aGlzLmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZlYXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1''@;'; put 'put ''cm47cmV0dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29uc3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZh''@;'; put 'put ''bHVlKGRbbjEudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLnN0YWdlX3Jvd3NfYWxsb3dl''@;'; put 'put ''ZF0pLGhpc3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5oaXN0b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0''@;'; put 'put ''OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZpZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5saW5l''@;'; put 'put ''YWdlX2RhaWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW24xLnZpZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbjEuZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtuMS5lZGl0UmVj''@;'; put 'put ''b3JkXSksYWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbjEuYWRkUmVjb3JkXSl9LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50''@;'; put 'put ''KGEpfXBhcnNlRmVhdHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNlbnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1maShmdW5jdGlvbiooXyxUKXtpZighd2luZG93LmNyeXB0b3x8IXdpbmRvdy5jcnlw''@;'; put 'put ''dG8uc3VidGxlKXRyeXtsZXQgRWU9YXRvYihhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpO18oSlNPTi5wYXJzZShFZSkpfWNhdGNoKEVlKXtUKCJFcnJvciBwYXJzaW5nIGh0dHAgbGljZW5zZSBrZXkgZGF0YS4gIitFZSl9bGV0IGllLFc9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVm''@;'; put 'put ''ZmVyKGEpLmNhdGNoKEVlPT57VChFZSl9KTtjb25zdCBnZT15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoZCkuY2F0Y2goRWU9PntUKEVlKX0pO2lmKCFnZSlyZXR1cm4gdm9pZCBUKCJNaXNzaW5nIGFjdGl2YXRpb24ga2V5Iik7bGV0IHdlO2llPWdlO3RyeXt3ZT15aWVsZCB3aW5kb3cu''@;'; put 'put ''Y3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInBrY3M4IixpZSx7bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNIQS0yNTYifSwhMCxbImRlY3J5cHQiXSl9Y2F0Y2goRWUpe1QoIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXk6ICIrRWUpfWlmKHdlKWlmKFcpdHJ5e3dpbmRvdy5jcnlwdG8u''@;'; put 'put ''c3VidGxlLmRlY3J5cHQoe25hbWU6IlJTQS1PQUVQIixoYXNoOntuYW1lOiJTSEEtMjU2In19LHdlLFcpLnRoZW4oRWU9PntsZXQgWmU9KG5ldyBoaGUuVGV4dERlY29kZXIpLmRlY29kZShFZSk7dHJ5e18oSlNPTi5wYXJzZShaZSkpfWNhdGNoKG90KXtUKCJFcnJvciBwYXJzaW5nIGxpY2Vu''@;'; put 'put ''c2Uga2V5IGRhdGEuICIrb3QpfX0sRWU9PntUKEVlKX0pfWNhdGNoKEVlKXtUKEVlKX1lbHNlIFQoIkxpY2Vuc2Uga2V5IGJ5dGVzIG1pc3NpbmciKTtlbHNlIFQoIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXkiKX0pO3JldHVybiBmdW5jdGlvbihfLFQpe3JldHVybiBmLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKX19KCkpfWdldEhvdExpY2Vuc2VLZXkoKXtyZXR1cm4gdGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWV9Z2V0TGljZW5zZUtleURhdGEoKXtyZXR1cm4gdGhpcy5saWNlbnNlS2V5RGF0YX1kZWFjdGl2YXRlQXBwKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZT1zUCx0aGlz''@;'; put 'put ''LmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEpLGEmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYSl9Y2hlY2tMaW5lYWdlTGltaXQoYSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdD09PTEvMClyZXR1cm4hMTtj''@;'; put 'put ''b25zdCBkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiKSxoPUtvKCkudmFsdWVPZigpO2lmKCFkKXJldHVybiBhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMTtjb25zdCBmPXBhcnNlSW50KGQuc3BsaXQoIiwiKVswXSksXz1wYXJzZUludChkLnNwbGl0KCIs''@;'; put 'put ''IilbMV0pO3JldHVybiBLbyhmKS5pc1NhbWUoS28oKSwiZGF5Iik/Xz49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdHx8KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLF8rMSksITEpOihhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMSl9c2V0TGlu''@;'; put 'put ''ZWFnZVJlbmRlcihhLGQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiLGAke2F9LCR7ZH1gKX1iYXNlNjRUb0FycmF5QnVmZmVyKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPWZpKGZ1bmN0aW9uKihoLGYpe2goQiQuSihhKSl9KTtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcnJheUJ1ZmZlclRvQmFzZTY0KGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2QoQiQuYyhhKSl9KX1zZXRTaXRlSWQoYSl7YS5zaXRlX2lkX211bHRpcGxlP3RoaXMuc2FzU2VydmljZS5zZXRM''@;'; put 'put ''aWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZF9tdWx0aXBsZSk6YS5zaXRlX2lkJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWQpfWhhbmRsZVNpdGVJZE1pc3NtYXRjaChhLGQsaCxmKXtsZXQgXz0hMSxUPSExO2lmKCghYS5zaXRlX2lkfHxhLnNpdGVfaWQhPT1oKSYm''@;'; put 'put ''KF89ITApLCghYS5zaXRlX2lkX211bHRpcGxlfHwhYS5zaXRlX2lkX211bHRpcGxlLmluY2x1ZGVzKGgpKSYmKFQ9ITApLF8mJlQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRoZSBrZXkgcHJvdmlkZWQgaXMgZm9yIGRpZmZlcmVudCBvcmdhbml6YXRpb24uIiksdm9pZCBzZXRUaW1lb3V0KCgp''@;'; put 'put ''PT57Y29uc3QgVz0iL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJmZvcmNlPXRydWUiO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChXKSx0aGlzLl9saWNlbmNlU3RhdGU9c1AsdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCks''@;'; put 'put ''Znx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChXKX0pfWNhbGN1bGF0ZUV4cGlyeShhKXtsZXQgZD1LbyhhLnZhbGlkX3VudGlsLCJZWVlZLU1NLUREIikuc3RhcnRPZigiZGF5IiksaD1LbygpLnN0YXJ0T2YoImRheSIpLGY9ZC5kaWZmKGgsImRheXMiKTtyZXR1cm57ZXhwaXJ5X2RhdGU6''@;'; put 'put ''ZCxkYXlzVG9FeHBpcnk6Zn19aGFuZGxlRXhwaXJ5KGEsZCxoLGYpe3NldFRpbWVvdXQoKCk9Pntjb25zdCBfPWAvbGljZW5zaW5nL2tleT9mb3JjZT10cnVlJmVycm9yPWV4cGlyZWQmZGV0YWlscz0ke2J0b2EoIkV4cGlyeSBkYXRlOiAiK2EuZm9ybWF0KCJERC9NTS9ZWVlZIikpfWA7dGhp''@;'; put 'put ''cy5saWNlbmNlUHJvYmxlbS5uZXh0KF8pLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxkLGgsITApLGZ8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXyl9KX1oYW5kbGVVc2Vyc0FsbG93ZWQoYSl7YS5kZW1vJiZ2b2lkIDAhPT10aGlzLl9s''@;'; put 'put ''aWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCYmKGEudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWQ+MD9hLnVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQpLHRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dlZH1oYW5k''@;'; put 'put ''bGVVc2VyUmVnaXN0cmF0aW9uKGEsZCxoKXtpZih0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJihkLlJFR0lTVEVSQ09VTlQ+YS51c2Vyc19hbGxvd2VkPyhjb25zb2xlLndhcm4oIkFwcCBoYXMgbW9yZSB1c2VycyByZWdpc3RlcmVkIHRoZW4gbGljZW5zZWQuIiksdGhpcy5pc0FwcE92ZXJD''@;'; put 'put ''YXBhY2l0eS5uZXh0KCEwKSk6ZC5SRUdJU1RFUkNPVU5UPT09YS51c2Vyc19hbGxvd2VkJiZjb25zb2xlLndhcm4oIkFwcCBoYXMgaGl0IGxpbWl0IG9mIHVzZXJzIHJlZ2lzdGVyZWQuIikpLDEhPT1kLklTUkVHSVNURVJFRClyZXR1cm4gZC5SRUdJU1RFUkNPVU5UPGEudXNlcnNfYWxsb3dl''@;'; put 'put ''ZHx8IXRoaXMudXNlckNvdW50TGltaXRhdGlvbj8oY29uc29sZS5sb2coIlVzZXIgY2FuIHJlZ2lzdGVyIiksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITApLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIv''@;'; put 'put ''bGljZW5zaW5nL3JlZ2lzdGVyIikpKToodGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITEpLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2xpbWl0IikpKTt0aGlzLmlzQXBwQWN0aXZhdGVk''@;'; put 'put ''Lm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcih3MCksYXIoZTgpLGFyKHZsKSxhcihvYSksYXIoQWMpLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''fSksY30pKCkseng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMucm91dGVyPV8sdGhpcy5zeXNzaXRlPW5ldyBUZShu''@;'; put 'put ''dWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz1udWxsLHRoaXMuc3Vic2NyaWJlKCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGhwJiYiL2RlcGxveSI9PT1ULnVybCYmdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0pfXNhc1NlcnZp''@;'; put 'put ''Y2VJbml0KCl7dGhpcy5zYXNTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2NyaWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVwRGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RTaXRlSWRFbWl0''@;'; put 'put ''dGVyLnN1YnNjcmliZShhPT57dGhpcy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZpcm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudEluZm99cGF0Y2hTeXNzaXRlKGEpe2xldCBkPXRoaXMuc3lzc2l0ZS5nZXRWYWx1ZSgpO2QmJihkLmluY2x1ZGVzKGEpfHwoZC5wdXNoKGEp''@;'; put 'put ''LHRoaXMuc3lzc2l0ZS5uZXh0KGQpKSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZD0hMTt5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGg9ZmkoZnVu''@;'; put 'put ''Y3Rpb24qKGYpe2Euc3lzc2l0ZS5uZXh0KFtmLlNZU1NJVEVdKTtsZXQgXz1bXTtpZigoIWYuZ2xvYnZhcnN8fGYuZ2xvYnZhcnMmJiFmLmdsb2J2YXJzWzBdKSYmXy5wdXNoKCJHbG9idmFycyIpLGYuc2FzZGF0YXNldHN8fF8ucHVzaCgiU2FzZGF0YXNldHMiKSxmLnNhc2xpYnN8fF8ucHVz''@;'; put 'put ''aCgiU2FzbGlicyIpLGYueGxtYXBzfHxfLnB1c2goIlhMTWFwcyIpLF8ubGVuZ3RoPjApcmV0dXJuIGQ9ITAsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLGAke18uam9pbigiLCAiKX0gYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZWApLHZvaWQgYS5s''@;'; put 'put ''aWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpmLlNZU1NJVEUsU1lTU0NQTDpmLlNZU1NDUEwsU1lTVENQSVBIT1NUTkFNRTpmLlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6Zi5TWVNWTE9ORyxNRU1TSVpFOmYuTUVNU0la''@;'; put 'put ''RSxTWVNQUk9DRVNTTU9ERTpmLlNZU1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmYuU1lTSE9TVE5BTUUsU1lTSE9TVElORk9MT05HOmYuU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmYuU1lTRU5DT0RJTkcsQVVUT0VYRUM6Zi5BVVRPRVhFQyxJU0FETUlOOmYuZ2xvYnZhcnNbMF0uSVNB''@;'; put 'put ''RE1JTixEQ19BRE1JTl9HUk9VUDpmLmdsb2J2YXJzWzBdLkRDX0FETUlOX0dST1VQfTtsZXQgaWUsZ2UsVD1mLnNhc2RhdGFzZXRzLFc9e307Zm9yKGxldCBvdCBvZiBUKVdbb3QuTElCUkVGXXx8KFdbb3QuTElCUkVGXT1bXSksV1tvdC5MSUJSRUZdLnB1c2gob3QuRFNOKTtsZXQgd2U9SlNP''@;'; put 'put ''Ti5wYXJzZShKU09OLnN0cmluZ2lmeShXKSksRWU9W107Zm9yKGxldCBvdCBvZiBPYmplY3Qua2V5cyh3ZSkpRWUucHVzaCh7TElCUkFSWVJFRjpvdCx0YWJsZXM6d2Vbb3RdfSk7bGV0IFplPUVlO2llPVcsZ2U9T2JqZWN0LmtleXMoVyksdm9pZCAwIT09aWUmJihHbi5lZGl0b3IubGlic0Fu''@;'; put 'put ''ZFRhYmxlcz1pZSksR24ueGxtYXBzPWYueGxtYXBzLm1hcChvdD0+KHtpZDpvdFswXSxkZXNjcmlwdGlvbjpvdFsxXSx0YXJnZXREUzpvdFsyXX0pKSxHbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXM9WmUsR24uZWRpdG9yLmxpYnJhcmllcz1nZSxHbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxH''@;'; put 'put ''bi5kY0xpYj1mLmdsb2J2YXJzWzBdLkRDTElCLHlpZWxkIGEubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbihmKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChoPT57ZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFs''@;'; put 'put ''KCJFcnJvciIsIlRoZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksYS5sb2dnZXJTZXJ2aWNlLmxvZygiQWN0aXZhdGVkOiIsYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRl''@;'; put 'put ''ZC52YWx1ZSksZHx8KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9hLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpOiFhLnJvdXRlci51''@;'; put 'put ''cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc2luZyZmb3JjZT10cnVlIikpfSkoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBuZXcoYXx8YykoYXIoQzApLGFyKHZsKSxhcihvYSksYXIodzApLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgcGdle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5mbj1sLHRoaXMuc3Vic2NyaXB0aW9ucz1hfXVu''@;'; put 'put ''c3Vic2NyaWJlKCl7Y29uc3QgbD10aGlzLnN1YnNjcmlwdGlvbnMuaW5kZXhPZih0aGlzKTstMSE9PWwmJnRoaXMuc3Vic2NyaXB0aW9ucy5zcGxpY2UobCwxKX19ZnVuY3Rpb24gdnAoYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgYyYmITA9PT1jWyJAQGZ1bmN0aW9uYWwv''@;'; put 'put ''cGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBrZihjKXtyZXR1cm4gZnVuY3Rpb24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fHZwKGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGQ4KGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIHZwKGEpP2w6a2YoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2RlZmF1bHQ6cmV0dXJuIHZwKGEpJiZ2cChkKT9sOnZwKGEpP2tmKGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTp2cChkKT9rZihmdW5jdGlvbiho''@;'; put 'put ''KXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19Y29uc3QgVXg9ZDgoZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiBaeChjLGwpe3Jl''@;'; put 'put ''dHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKX12YXIgWHE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztjb25zdCBKcT1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09WHEuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwpe3JldHVy''@;'; put 'put ''biJbb2JqZWN0IEFyZ3VtZW50c10iPT09WHEuY2FsbChsKX06ZnVuY3Rpb24obCl7cmV0dXJuIFp4KCJjYWxsZWUiLGwpfX0oKSxfZ2U9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJmwubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZy5jYWxsKGwpfTtmdW5jdGlvbiBRcShjKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX12YXIgd2dlPWtmKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFz''@;'; put 'put ''eS1sYW5kL2VtcHR5Il0/bFsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0/bC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpu''@;'; put 'put ''dWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5lbXB0eT9sLmVtcHR5KCk6bnVsbCE9bCYmbnVsbCE9bC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGwuY29uc3RydWN0b3IuZW1wdHk/bC5jb25zdHJ1Y3Rvci5lbXB0eSgpOl9nZShsKT9bXTpRcShsKT8iIjpmdW5jdGlvbiBi''@;'; put 'put ''Z2UoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9KGwpP3t9OkpxKGwpP2Z1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKTpmdW5jdGlvbiB5Z2UoYyl7dmFyIGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMp''@;'; put 'put ''O3JldHVybiJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IEludDE2QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQzMkFy''@;'; put 'put ''cmF5XSI9PT1sfHwiW29iamVjdCBVaW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQzMkFycmF5XSI9PT1sfHwiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI9PT1sfShsKT9sLmNv''@;'; put 'put ''bnN0cnVjdG9yLmZyb20oIiIpOnZvaWQgMH0pO2NvbnN0IENnZT13Z2U7ZnVuY3Rpb24gZUsoYyl7Zm9yKHZhciBhLGw9W107IShhPWMubmV4dCgpKS5kb25lOylsLnB1c2goYS52YWx1ZSk7cmV0dXJuIGx9ZnVuY3Rpb24gdEsoYyxsLGEpe2Zvcih2YXIgZD0wLGg9YS5sZW5ndGg7ZDxoOyl7''@;'; put 'put ''aWYoYyhsLGFbZF0pKXJldHVybiEwO2QrPTF9cmV0dXJuITF9Y29uc3QgVFA9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24gTWdlKGMsbCl7cmV0dXJuIGM9PT1sPzAhPT1jfHwxL2M9PTEvbDpjIT1jJiZsIT1sfTt2YXIgeGdlPSF7dG9TdHJpbmc6bnVs''@;'; put 'put ''bH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIiksbks9WyJjb25zdHJ1Y3RvciIsInZhbHVlT2YiLCJpc1Byb3RvdHlwZU9mIiwidG9TdHJpbmciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImhhc093blByb3BlcnR5IiwidG9Mb2NhbGVTdHJpbmciXSxySz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBhcmd1bWVudHMucHJvcGVydHlJc0VudW1lcmFibGUoImxlbmd0aCIpfSgpLEVnZT1mdW5jdGlvbihsLGEpe2Zvcih2YXIgZD0wO2Q8bC5sZW5ndGg7KXtpZihsW2RdPT09YSlyZXR1cm4hMDtkKz0xfXJldHVybiExfTtjb25zdCBpSz1rZigiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0''@;'; put 'put ''LmtleXN8fHJLP2Z1bmN0aW9uKGwpe2lmKE9iamVjdChsKSE9PWwpcmV0dXJuW107dmFyIGEsZCxoPVtdLGY9cksmJkpxKGwpO2ZvcihhIGluIGwpWngoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoeGdlKWZvcihkPW5LLmxlbmd0aC0xO2Q+PTA7KVp4KGE9''@;'; put 'put ''bktbZF0sbCkmJiFFZ2UoaCxhKSYmKGhbaC5sZW5ndGhdPWEpLGQtPTE7cmV0dXJuIGh9OmZ1bmN0aW9uKGwpe3JldHVybiBPYmplY3QobCkhPT1sP1tdOk9iamVjdC5rZXlzKGwpfSksb0s9a2YoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxsIjp2b2lkIDA9PT1sPyJVbmRlZmlu''@;'; put 'put ''ZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIHNLKGMsbCxhLGQpe3ZhciBoPWVLKGMpO2Z1bmN0aW9uIF8oVCxXKXtyZXR1cm4gRFAoVCxXLGEuc2xpY2UoKSxkLnNsaWNlKCkpfXJldHVybiF0SyhmdW5jdGlvbihULFcpe3JldHVy''@;'; put 'put ''biF0SyhfLFcsVCl9LGVLKGwpLGgpfWZ1bmN0aW9uIERQKGMsbCxhLGQpe2lmKFRQKGMsbCkpcmV0dXJuITA7dmFyIGg9b0soYyk7aWYoaCE9PW9LKGwpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBs''@;'; put 'put ''WyJmYW50YXN5LWxhbmQvZXF1YWxzIl0pcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmY1siZmFudGFzeS1sYW5kL2VxdWFscyJdKGwpJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdJiZsWyJmYW50YXN5LWxhbmQv''@;'; put 'put ''ZXF1YWxzIl0oYyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzfHwiZnVuY3Rpb24iPT10eXBlb2YgbC5lcXVhbHMpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzJiZjLmVxdWFscyhsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzJiZsLmVxdWFscyhjKTtzd2l0''@;'; put 'put ''Y2goaCl7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjppZigiZnVuY3Rpb24iPT10eXBlb2YgYy5jb25zdHJ1Y3RvciYmIlByb21pc2UiPT09ZnVuY3Rpb24gU2dlKGMpe3ZhciBsPVN0cmluZyhjKS5tYXRjaCgvXmZ1bmN0aW9uIChcdyopLyk7cmV0dXJuIG51bGw9''@;'; put 'put ''PWw/IiI6bFsxXX0oYy5jb25zdHJ1Y3RvcikpcmV0dXJuIGM9PT1sO2JyZWFrO2Nhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjppZih0eXBlb2YgYyE9dHlwZW9mIGx8fCFUUChjLnZhbHVlT2YoKSxsLnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJEYXRlIjpp''@;'; put 'put ''ZighVFAoYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRXJyb3IiOnJldHVybiBjLm5hbWU9PT1sLm5hbWUmJmMubWVzc2FnZT09PWwubWVzc2FnZTtjYXNlIlJlZ0V4cCI6aWYoYy5zb3VyY2UhPT1sLnNvdXJjZXx8Yy5nbG9iYWwhPT1sLmdsb2JhbHx8Yy5p''@;'; put 'put ''Z25vcmVDYXNlIT09bC5pZ25vcmVDYXNlfHxjLm11bHRpbGluZSE9PWwubXVsdGlsaW5lfHxjLnN0aWNreSE9PWwuc3RpY2t5fHxjLnVuaWNvZGUhPT1sLnVuaWNvZGUpcmV0dXJuITF9Zm9yKHZhciBmPWEubGVuZ3RoLTE7Zj49MDspe2lmKGFbZl09PT1jKXJldHVybiBkW2ZdPT09bDtmLT0x''@;'; put 'put ''fXN3aXRjaChoKXtjYXNlIk1hcCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmc0soYy5lbnRyaWVzKCksbC5lbnRyaWVzKCksYS5jb25jYXQoW2NdKSxkLmNvbmNhdChbbF0pKTtjYXNlIlNldCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmc0soYy52YWx1ZXMoKSxsLnZhbHVlcygpLGEuY29u''@;'; put 'put ''Y2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjpjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJEYXRlIjpjYXNlIkVycm9yIjpjYXNlIlJlZ0V4cCI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWlu''@;'; put 'put ''dDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJBcnJheUJ1ZmZlciI6YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDpyZXR1cm4hMX12YXIgXz1pSyhjKTtpZihfLmxlbmd0aCE9PWlLKGwpLmxlbmd0aClyZXR1cm4hMTt2YXIgVD1hLmNvbmNhdChbY10pLFc9ZC5jb25jYXQoW2xdKTtmb3IoZj1fLmxlbmd0aC0xO2Y+PTA7KXt2YXIgaWU9X1tmXTtpZighWngoaWUsbCl8fCFEUChsW2llXSxjW2ll''@;'; put 'put ''XSxULFcpKXJldHVybiExO2YtPTF9cmV0dXJuITB9Y29uc3QgRGdlPWQ4KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIERQKGwsYSxbXSxbXSl9KSxhSz1rZihmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmRGdlKGwsQ2dlKGwpKX0pO2Z1bmN0aW9uIGViKGMpe3JldHVybiBudWxsPT1jfWZ1bmN0''@;'; put 'put ''aW9uIF9wKGMpe3JldHVybiBlYihjKXx8YUsoYyl9ZnVuY3Rpb24gSVAoYyl7cmV0dXJuIFV4KFN0cmluZyxjKX1mdW5jdGlvbiBZeChjKXtyZXR1cm4gVXgoT2JqZWN0LGMpfWZ1bmN0aW9uIGNLKGMpe3JldHVybiBVeChNYXAsYyl9ZnVuY3Rpb24gdUsoYyxsKXtyZXR1cm4gYyE9PWx9ZnVu''@;'; put 'put ''Y3Rpb24gZEsoYyxsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYyk9PT1KU09OLnN0cmluZ2lmeShsKX1mdW5jdGlvbiBoSyhjKXtjb25zdCBsPW5ldyBNYXA7Zm9yKGNvbnN0W2EsZF1vZiBjKWNLKGQpP2wuc2V0KGEsaEsoZCkpOmwuc2V0KGEsZCk7cmV0dXJuIGx9ZnVuY3Rpb24gSGdlKGMp''@;'; put 'put ''e3N3aXRjaCghMCl7Y2FzZSBjSyhjKTpyZXR1cm4gaEsoYyk7Y2FzZSBZeChjKSYmIUFycmF5LmlzQXJyYXkoYyk6cmV0dXJuIFA1KHt9LGMpO2RlZmF1bHQ6cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpfX1mdW5jdGlvbiBQNSguLi5jKXtjb25zdCBsPXt9O3JldHVybiBj''@;'; put 'put ''Lm1hcChhPT5ZeChhKT97Li4uYX06e30pLmZvckVhY2goYT0+e09iamVjdC5rZXlzKGEpLmZvckVhY2goZD0+e2NvbnN0IGg9YVtkXTtsW2RdPUFycmF5LmlzQXJyYXkoaCk/QXJyYXkuZnJvbShoKTpZeChoKT9QNShsW2RdfHx7fSxoKTpofSl9KSxsfWZ1bmN0aW9uIHBLKGM9d2luZG93KXty''@;'; put 'put ''ZXR1cm4hZWIoYyl9bGV0IFd4LGdLLExQLFJQO2Z1bmN0aW9uIG1LKGM9ITApe2lmKCFjfHwhV3gpe2NvbnN0IGw9ZG9jdW1lbnQmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltuZy12ZXJzaW9uXSIpO1d4PWw/IiIrbC5nZXRBdHRyaWJ1dGUoIm5nLXZlcnNpb24iKTp2b2lkIDB9cmV0dXJu''@;'; put 'put ''IFd4fWZ1bmN0aW9uIHpnZShjPSEwKXtyZXR1cm4gYyYmV3h8fChnSz13aW5kb3c/LmFuZ3VsYXI/LnZlcnNpb24/LmZ1bGwpLGdLfWZ1bmN0aW9uIHZLKGM9ITApe3JldHVybiBjJiZMUHx8KExQPXdpbmRvdz8uQ0RTPy5fcmVhY3Q/LnZlcnNpb24/d2luZG93LkNEUy5fcmVhY3QudmVyc2lv''@;'; put 'put ''bjpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS1yZWFjdHJvb3RdLCBbZGF0YS1yZWFjdGlkXSIpPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMCksTFB9ZnVuY3Rpb24gX0soYz0hMCl7aWYoIWN8fCFSUCl7Y29uc3QgbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIqIik7bGV0IGE7''@;'; put 'put ''Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYobFtkXS5fX3Z1ZV9fKXthPWxbZF07YnJlYWt9UlA9YT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDB9cmV0dXJuIFJQfWZ1bmN0aW9uIEY1KGMpe3JldHVybiBjLnJlcGxhY2UoL1tBLVpdL2csbD0+Ii0iK2wudG9Mb3dlckNhc2UoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gd0soYyl7cmV0dXJuIGMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX1jb25zdCBxZ2U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7aWYodGhpcy5zdXBwb3J0cz17anM6ITB9LCFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIil8fCJuby1q''@;'; put 'put ''cyI9PT1kb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIikpe2NvbnN0IGM9RjUoT2JqZWN0LmtleXModGhpcy5zdXBwb3J0cykucmVkdWNlKChsLGEpPT5gJHtsfSAke3RoaXMuc3VwcG9ydHNbYV0/YToibm8tIithfWAsIiIpKS50cmltKCk7ZG9jdW1lbnQuYm9keS5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIsYyl9fX07ZnVuY3Rpb24gTUsoYyxsKXtzd2l0Y2goYyl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFy''@;'; put 'put ''Z3VtZW50cyl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oYSxkLGgpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA0OnJldHVybiBmdW5jdGlvbihhLGQsaCxmKXty''@;'; put 'put ''ZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNTpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNjpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07''@;'; put 'put ''Y2FzZSA3OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLF8sVCxXKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQsVyxpZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDk6cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGEsZCxoLGYsXyxULFcsaWUsZ2Upe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxMDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmlyc3Qg''@;'; put 'put ''YXJndW1lbnQgdG8gX2FyaXR5IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gdGVuIil9fWZ1bmN0aW9uIHhLKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9YyxfPTA7XzxsLmxlbmd0aHx8aDxhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''Oyl7dmFyIFQ7XzxsLmxlbmd0aCYmKCF2cChsW19dKXx8aD49YXJndW1lbnRzLmxlbmd0aCk/VD1sW19dOihUPWFyZ3VtZW50c1toXSxoKz0xKSxkW19dPVQsdnAoVCl8fChmLT0xKSxfKz0xfXJldHVybiBmPD0wP2EuYXBwbHkodGhpcyxkKTpNSyhmLHhLKGMsZCxhKSl9fWNvbnN0IEVLPWQ4''@;'; put 'put ''KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIDE9PT1sP2tmKGEpOk1LKGwseEsobCxbXSxhKSl9KSxYZ2U9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rpb24obCl7cmV0dXJuIGw8PDA9PT1sfSxRZ2U9ZDgoZnVuY3Rpb24obCxhKXt2YXIgZD1sPDA/YS5sZW5ndGgrbDpsO3JldHVybiBRcShhKT9hLmNo''@;'; put 'put ''YXJBdChkKTphW2RdfSksdG1lPWQ4KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFwKGZ1bmN0aW9uKGQpe2Zvcih2YXIgXyxoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPVhnZShfPWRbZl0pP1FnZShfLGgpOmhbX10sZis9MX1yZXR1cm4gaH0pfSkscm1lPWQ4KGZ1''@;'; put 'put ''bmN0aW9uKGwsYSl7cmV0dXJuIHRtZShbbF0sYSlbMF19KSxvbWU9RUsoMiwoYyxsKT0+dm9pZCAwIT09cm1lKGMsbCkpLGtLPW9tZSh7IkBAZnVuY3Rpb25hbC9wbGFjZWhvbGRlciI6ITB9LHdpbmRvdyk7Y2xhc3MgSDV7c3RhdGljIGxvZyguLi5sKXtGUCgpJiZQUCgpJiZjb25zb2xlLmxv''@;'; put 'put ''ZyguLi5sKX1zdGF0aWMgd2FybiguLi5sKXtGUCgpJiZQUCgpJiZjb25zb2xlLndhcm4oLi4ubCl9c3RhdGljIGVycm9yKC4uLmwpe0ZQKCkmJlBQKCkmJmNvbnNvbGUuZXJyb3IoLi4ubCl9fWZ1bmN0aW9uIFBQKCl7cmV0dXJuIWtLKFsiamFzbWluZSJdKX1mdW5jdGlvbiBGUCgpe3JldHVy''@;'; put 'put ''biF3aW5kb3cuQ0RTLmVudmlyb25tZW50LnByb2R1Y3Rpb259ZnVuY3Rpb24gQUsoKXtwSygpJiYod2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOnFnZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRl''@;'; put 'put ''Ontmb2N1c1RyYXBJdGVtczpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpUSyxsb2dEZXRhaWxzOmFtZX0s''@;'; put 'put ''ZnVuY3Rpb24oKXtjb25zdCBjPSI2LjQuNiI7d2luZG93LkNEUy5fdmVyc2lvbi5pbmRleE9mKGMpPDAmJih3aW5kb3cuQ0RTLl92ZXJzaW9uLnB1c2goYyksZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpPy5zZXRBdHRyaWJ1dGUoImNkcy12ZXJzaW9uIix3aW5kb3cuQ0RTLl92ZXJz''@;'; put 'put ''aW9uLmpvaW4oIiAiKSkpLHdpbmRvdy5DRFMuX3ZlcnNpb24ubGVuZ3RoPjEmJkg1Lndhcm4oIlJ1bm5pbmcgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIENsYXJpdHkgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLiBQbGVhc2UgZW5zdXJlIG9ubHkgb25lIHZlcnNpb24gaXMgbG9hZGVk''@;'; put 'put ''LiIpfSgpLHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkfHwod2luZG93LkNEUy5faXNTdGF0ZVByb3hpZWQ9ITAsd2luZG93LkNEUy5fc3RhdGU9bmV3IFByb3h5KHdpbmRvdy5DRFMuX3N0YXRlLHtzZXQ6KGMsbCxhKT0+e2NvbnN0IGQ9e2tleTpsLHByZXY6d2luZG93LkNEUy5fc3RhdGVb''@;'; put 'put ''bF0sY3VycmVudDphfTtyZXR1cm4gY1tsXT1hLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJDRFNfU1RBVEVfVVBEQVRFIix7ZGV0YWlsOmR9KSksITB9fSkpKX1mdW5jdGlvbiBUSygpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25t''@;'; put 'put ''ZW50OndpbmRvdy5DRFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxhclZlcnNpb246bUsoITEpLGFuZ3VsYXJKU1ZlcnNpb246emdlKCExKSxyZWFjdFZlcnNpb246dksoITEpLHZ1ZVZlcnNpb246''@;'; put 'put ''X0soITEpLHN0YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5KSxtb3Rpb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVn''@;'; put 'put ''aXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMubWFwKGM9PmMuZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIGFtZSgpe0g1LmxvZyhKU09OLnN0cmluZ2lmeShUSygpLG51bGwsMikpfWNvbnN0IEhQPW5ldyBjbGFzcyBnZ2V7Y29uc3RydWN0b3IoKXt0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbnM9W119c3Vic2NyaWJlKGwpe2NvbnN0IGE9bmV3IHBnZShsLHRoaXMuc3Vic2NyaXB0aW9ucyk7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEpLGF9ZW1pdChsKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLmZuKGwpKX10b0V2ZW50T2Jz''@;'; put 'put ''ZXJ2YWJsZSgpe3JldHVybiB0aGlzfX07SFAubGlzdGVuZXI9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiQ0RTX1NUQVRFX1VQREFURSIsYz0+SFAuZW1pdChjLmRldGFpbCkpO2NsYXNzIEdse3N0YXRpYyBnZXQgc3RhdGUoKXtyZXR1cm4gQUsoKSx3aW5kb3cuQ0RTLl9zdGF0ZX1zdGF0''@;'; put 'put ''aWMgZ2V0VmFsdWUobCl7cmV0dXJuIEdsLnN0YXRlW2xdfXN0YXRpYyBzZXRWYWx1ZShsLGEpe0dsLnN0YXRlW2xdPWF9c3RhdGljIGxvZygpe0g1LmxvZyhKU09OLnN0cmluZ2lmeShHbC5zdGF0ZSxudWxsLDIpKX19R2wuc3RhdGVVcGRhdGVzPUhQLnRvRXZlbnRPYnNlcnZhYmxlKCk7Y29u''@;'; put 'put ''c3QgbG1lPVsidW5rbm93biIse291dGxpbmU6JzxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XTtjbGFzcyBWc3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246bG1lWzFdLC4uLkdsLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpe0dsLnN0YXRlLmljb25S''@;'; put 'put ''ZWdpc3RyeT17Li4uR2wuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IVZzLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PlZzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChb''@;'; put 'put ''ZCxoXSk9PmgubWFwKGY9PltmLFZzLnJlZ2lzdHJ5W2RdXSkpO0dsLnN0YXRlLmljb25SZWdpc3RyeT17Li4uR2wuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX1jb25zdCBoOD1b''@;'; put 'put ''ImFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+J31dLG8xPVsiZXhjbGFtYXRpb24tY2lyY2xlIix7b3V0bGlu''@;'; put 'put ''ZTonPHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz48cGF0aCBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkEx''@;'; put 'put ''LjMsMS4zLDAsMCwxLDE4LDIwLjA3WiIvPjxjaXJjbGUgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40''@;'; put 'put ''OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nfV0sczE9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEw''@;'; put 'put ''LDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPjxwYXRoIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwx''@;'; put 'put ''OCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPid9XSxESz1bImVsbGlwc2lzLWhvcml6b250YWwiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIzMS4xIiBjeT0i''@;'; put 'put ''MTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiLz4nLG91dGxpbmVCYWRnZWQ6JzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+''@;'; put 'put ''PGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XSx0Yj1bIndpbmRvdy1jbG9zZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSwxOGw3LjI5LTcuMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSwxMC43MSw5LjI5YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTYuNTksMTgs''@;'; put 'put ''OS4yOSwyNS4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDcuMjksNy4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSxjbWU9WyJldmVudCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42''@;'; put 'put ''NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+PHBhdGggZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwx''@;'; put 'put ''Ljc4LDAsMCwwLDMyLjI1LDZaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz48cmVjdCB4PSIx''@;'; put 'put ''MyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSww''@;'; put 'put ''LDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+PHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCww''@;'; put 'put ''LDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4x''@;'; put 'put ''NywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYz''@;'; put 'put ''MC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+PHBhdGggZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz4nLHNvbGlkOic8cGF0aCBkPSJN''@;'; put 'put ''MTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxwYXRoIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQs''@;'; put 'put ''MFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42''@;'; put 'put ''Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs''@;'; put 'put ''MTBaIi8+PHBhdGggZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIs''@;'; put 'put ''MCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCww''@;'; put 'put ''LDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgs''@;'; put 'put ''MCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPid9XSx1bWU9WyJjYWxlbmRh''@;'; put 'put ''ciIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2''@;'; put 'put ''WiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxyZWN0IHg9IjEzIiB5PSI2IiB3''@;'; put 'put ''aWR0aD0iMTAiIGhlaWdodD0iMiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1''@;'; put 'put ''LjM4WiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhl''@;'; put 'put ''aWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9s''@;'; put 'put ''eWdvbiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx''@;'; put 'put ''Ljc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz48cmVjdCB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE5IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMjQiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAs''@;'; put 'put ''MCwxLDIyLjUsNloiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu''@;'; put 'put ''NzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJa''@;'; put 'put ''bTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCww''@;'; put 'put ''LDAsMjYsMTBaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwz''@;'; put 'put ''Ljc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01''@;'; put 'put ''SDI2VjE5aDJaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0''@;'; put 'put ''aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1''@;'; put 'put ''LDAsMCwxLDMwLDEzLjVaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVI''@;'; put 'put ''MjZWMTRoMloiLz4nfV0sZG1lPVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0''@;'; put 'put ''LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiLz48cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0u''@;'; put 'put ''NDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiLz48cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwx''@;'; put 'put ''OGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAs''@;'; put 'put ''MSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiLz4nLHNvbGlkOic8cGF0aCBkPSJN''@;'; put 'put ''MTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIvPjxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCww''@;'; put 'put ''LDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIvPjxwYXRoIGQ9Ik00Ljg3LDUuNzhs''@;'; put 'put ''NC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42''@;'; put 'put ''LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIvPid9XSxobWU9WyJleWUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEw''@;'; put 'put ''UzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIs''@;'; put 'put ''MzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiLz48cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwx''@;'; put 'put ''LDE4LjA5LDIyLjg5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0x''@;'; put 'put ''Ny44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIvPjxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiLz4nfV0s''@;'; put 'put ''Zm1lPVsiZWxsaXBzaXMtdmVydGljYWwiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiLz4nLG91dGxpbmVCYWRnZWQ6JzxjaXJjbGUgY3g9''@;'; put 'put ''IjE4IiBjeT0iNC45IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIvPid9XSxwbWU9WyJ2aWV3LWNvbHVtbnMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzEsNUg1QTIsMiwwLDAsMCwzLDdWMjlhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nfV0sZ21lPVsiYXJyb3ciLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1LDE3TDE3LDkuODFWMjgu''@;'; put 'put ''OTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIi8+J31dLElLPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDku''@;'; put 'put ''NzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSxtbWU9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2''@;'; put 'put ''LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEuNywx''@;'; put 'put ''LjcsMCwwLDAsMjYuNDksNVoiLz4nfV0sTEs9WyJhbmdsZS1kb3VibGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFa''@;'; put 'put ''Ii8+PHBhdGggZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+J31dLHZtZT1bImZpbHRlci1ncmlkLWNpcmNsZSIse291dGxpbmU6JzxwYXRo''@;'; put 'put ''IGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFh''@;'; put 'put ''MS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs''@;'; put 'put ''MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz48cGF0aCBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40''@;'; put 'put ''MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+J31dLF9tZT1bImZpbHRlci1ncmlkIix7b3V0bGluZTonPHBhdGggZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw''@;'; put 'put ''LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+Jyxzb2xpZDon''@;'; put 'put ''PHBhdGggZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAs''@;'; put 'put ''MCwuMTUtLjM1VjExWiIvPid9XSxSSz1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPGNpcmNsZSBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz48cGF0aCBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+''@;'; put 'put ''PHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIs''@;'; put 'put ''MiwwLDEsMSwyLDJBMiwyLDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPid9XSxibWU9WyJleGNsYW1hdGlvbi10cmlhbmdsZSIse291dGxpbmU6JzxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+PGNpcmNsZSBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0iMS41Ii8+PHBhdGggZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCww''@;'; put 'put ''LDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDguNTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAs''@;'; put 'put ''MSwyOC41NSwyNy40OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYu''@;'; put 'put ''ODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjYuMjVaIi8+J31dLHltZT1bImNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwz''@;'; put 'put ''NFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiLz4nfV0sd21lPVsiZG90LWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCwxMWE3LDcsMCwx''@;'; put 'put ''LDEtNyw3LDcsNywwLDAsMSw3LTciLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz4nfV0sT0s9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxjaXJjbGUgY3g9''@;'; put 'put ''IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz48cGF0aCBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+PHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0''@;'; put 'put ''LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44''@;'; put 'put ''LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPid9XSxDbWU9WyJzdWNjZXNzLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwx''@;'; put 'put ''OCwzMloiLz48cGF0aCBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYs''@;'; put 'put ''MCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+J31dO2NsYXNzIE1tZSBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKX1zY2hlZHVsZShs''@;'; put 'put ''LGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0IEd4PXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09R3g7cmV0dXJuIGQ/LnNldEludGVydmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwuLi5hKX0sY2xlYXJJbnRlcnZhbChjKXtjb25zdHtk''@;'; put 'put ''ZWxlZ2F0ZTpsfT1HeDtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgTlAgZXh0ZW5kcyBNbWV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWEsdGhpcy5wZW5kaW5n''@;'; put 'put ''PSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29uc3QgaD10aGlzLmlkLGY9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZixoLGEpKSx0aGlzLnBlbmRpbmc9''@;'; put 'put ''ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0QXN5bmNJZChmLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gR3guc2V0SW50ZXJ2YWwobC5mbHVzaC5iaW5kKGwsdGhpcyksZCl9''@;'; put 'put ''cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBhO251bGwhPWEmJkd4LmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBh''@;'; put 'put ''IGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZClyZXR1cm4gZDshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51''@;'; put 'put ''bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLGh9dW5zdWJzY3JpYmUoKXtpZigh''@;'; put 'put ''dGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxxKGQsdGhpcyksbnVsbCE9bCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChhLGws''@;'; put 'put ''bnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19Y29uc3QgVlA9e25vdzooKT0+KFZQLmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIG5ie2NvbnN0cnVjdG9yKGwsYT1uYi5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1s''@;'; put 'put ''LHRoaXMubm93PWF9c2NoZWR1bGUobCxhPTAsZCl7cmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyxsKS5zY2hlZHVsZShkLGEpfX1uYi5ub3c9VlAubm93O2NsYXNzIEJQIGV4dGVuZHMgbmJ7Y29uc3RydWN0b3IobCxhPW5iLm5vdyl7c3VwZXIobCxhKSx0aGlzLmFj''@;'; put 'put ''dGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGwpe2NvbnN0e2FjdGlvbnM6YX09dGhpcztpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHZvaWQgYS5wdXNoKGwpO2xldCBkO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihkPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKGw9''@;'; put 'put ''YS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZCl7Zm9yKDtsPWEuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGR9fX1jb25zdCByYj1uZXcgQlAoTlApLHhtZT1yYjtmdW5jdGlvbiBmOChjLGw9cmIpe3JldHVybiBYZSgoYSxkKT0+e2xldCBoPW51bGwsZj1udWxsLF89bnVs''@;'; put 'put ''bDtjb25zdCBUPSgpPT57aWYoaCl7aC51bnN1YnNjcmliZSgpLGg9bnVsbDtjb25zdCBpZT1mO2Y9bnVsbCxkLm5leHQoaWUpfX07ZnVuY3Rpb24gVygpe2NvbnN0IGllPV8rYyxnZT1sLm5vdygpO2lmKGdlPGllKXJldHVybiBoPXRoaXMuc2NoZWR1bGUodm9pZCAwLGllLWdlKSx2b2lkIGQu''@;'; put 'put ''YWRkKGgpO1QoKX1hLnN1YnNjcmliZShVZShkLGllPT57Zj1pZSxfPWwubm93KCksaHx8KGg9bC5zY2hlZHVsZShXLGMpLGQuYWRkKGgpKX0sKCk9PntUKCksZC5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntmPWg9bnVsbH0pKX0pfWZ1bmN0aW9uIGFoKGMpe3JldHVybiBYZSgobCxhKT0+e0ty''@;'; put 'put ''KGMpLnN1YnNjcmliZShVZShhLCgpPT5hLmNvbXBsZXRlKCksRykpLCFhLmNsb3NlZCYmbC5zdWJzY3JpYmUoYSl9KX1mdW5jdGlvbiBqUChjPTAsbCxhPXhtZSl7bGV0IGQ9LTE7cmV0dXJuIG51bGwhPWwmJihMYyhsKT9hPWw6ZD1sKSxuZXcgS2UoaD0+e2xldCBmPWZ1bmN0aW9uIGttZShj''@;'; put 'put ''KXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihjKX0oYyk/K2MtYS5ub3coKTpjO2Y8MCYmKGY9MCk7bGV0IF89MDtyZXR1cm4gYS5zY2hlZHVsZShmdW5jdGlvbigpe2guY2xvc2VkfHwoaC5uZXh0KF8rKyksMDw9ZD90aGlzLnNjaGVkdWxlKHZvaWQgMCxkKTpoLmNvbXBsZXRl''@;'; put 'put ''KCkpfSxmKX0pfWNvbnN0IFRtZT1bImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxEbWU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLEltZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24gbjIoYyxsLGEsZCl7aWYoWShhKSYmKGQ9YSxhPXZvaWQgMCksZCly''@;'; put 'put ''ZXR1cm4gbjIoYyxsLGEpLnBpcGUoSE8oZCkpO2NvbnN0W2gsZl09ZnVuY3Rpb24gT21lKGMpe3JldHVybiBZKGMuYWRkRXZlbnRMaXN0ZW5lcikmJlkoYy5yZW1vdmVFdmVudExpc3RlbmVyKX0oYyk/RG1lLm1hcChfPT5UPT5jW19dKGwsVCxhKSk6ZnVuY3Rpb24gTG1lKGMpe3JldHVybiBZ''@;'; put 'put ''KGMuYWRkTGlzdGVuZXIpJiZZKGMucmVtb3ZlTGlzdGVuZXIpfShjKT9UbWUubWFwKEZLKGMsbCkpOmZ1bmN0aW9uIFJtZShjKXtyZXR1cm4gWShjLm9uKSYmWShjLm9mZil9KGMpP0ltZS5tYXAoRksoYyxsKSk6W107aWYoIWgmJk9uKGMpKXJldHVybiB5cihfPT5uMihfLGwsYSkpKEtyKGMp''@;'; put 'put ''KTtpZighaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgS2UoXz0+e2NvbnN0IFQ9KC4uLlcpPT5fLm5leHQoMTxXLmxlbmd0aD9XOldbMF0pO3JldHVybiBoKFQpLCgpPT5mKFQpfSl9ZnVuY3Rpb24gRksoYyxsKXtyZXR1cm4gYT0+ZD0+''@;'; put 'put ''Y1thXShsLGQpfWNsYXNzICR4IGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobD0xLzAsYT0xLzAsZD1WUCl7c3VwZXIoKSx0aGlzLl9idWZmZXJTaXplPWwsdGhpcy5fd2luZG93VGltZT1hLHRoaXMuX3RpbWVzdGFtcFByb3ZpZGVyPWQsdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGlt''@;'; put 'put ''ZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9YT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsbCksdGhpcy5fd2luZG93VGltZT1NYXRoLm1heCgxLGEpfW5leHQobCl7Y29uc3R7aXNTdG9wcGVkOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aCxf''@;'; put 'put ''dGltZXN0YW1wUHJvdmlkZXI6Zixfd2luZG93VGltZTpffT10aGlzO2F8fChkLnB1c2gobCksIWgmJmQucHVzaChmLm5vdygpK18pKSx0aGlzLl90cmltQnVmZmVyKCksc3VwZXIubmV4dChsKX1fc3Vic2NyaWJlKGwpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7''@;'; put 'put ''Y29uc3QgYT10aGlzLl9pbm5lclN1YnNjcmliZShsKSx7X2luZmluaXRlVGltZVdpbmRvdzpkLF9idWZmZXI6aH09dGhpcyxmPWguc2xpY2UoKTtmb3IobGV0IF89MDtfPGYubGVuZ3RoJiYhbC5jbG9zZWQ7Xys9ZD8xOjIpbC5uZXh0KGZbX10pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXpl''@;'; put 'put ''ZFN0YXR1c2VzKGwpLGF9X3RyaW1CdWZmZXIoKXtjb25zdHtfYnVmZmVyU2l6ZTpsLF90aW1lc3RhbXBQcm92aWRlcjphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93Omh9PXRoaXMsZj0oaD8xOjIpKmw7aWYobDwxLzAmJmY8ZC5sZW5ndGgmJmQuc3BsaWNlKDAsZC5sZW5ndGgtZiks''@;'; put 'put ''IWgpe2NvbnN0IF89YS5ub3coKTtsZXQgVD0wO2ZvcihsZXQgVz0xO1c8ZC5sZW5ndGgmJmRbV108PV87Vys9MilUPVc7VCYmZC5zcGxpY2UoMCxUKzEpfX19Y2xhc3MgSEt7fWNsYXNzIFBtZXt9Y29uc3QgQWY9IioiO2Z1bmN0aW9uIGExKGMsbCl7cmV0dXJue3R5cGU6NyxuYW1lOmMsZGVm''@;'; put 'put ''aW5pdGlvbnM6bCxvcHRpb25zOnt9fX1mdW5jdGlvbiBydShjLGw9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6bCx0aW1pbmdzOmN9fWZ1bmN0aW9uIE5LKGMsbD1udWxsKXtyZXR1cm57dHlwZToyLHN0ZXBzOmMsb3B0aW9uczpsfX1mdW5jdGlvbiBfcyhjKXtyZXR1cm57dHlwZTo2LHN0''@;'; put 'put ''eWxlczpjLG9mZnNldDpudWxsfX1mdW5jdGlvbiBxeChjLGwsYSl7cmV0dXJue3R5cGU6MCxuYW1lOmMsc3R5bGVzOmwsb3B0aW9uczphfX1mdW5jdGlvbiBGbWUoYyl7cmV0dXJue3R5cGU6NSxzdGVwczpjfX1mdW5jdGlvbiBoYyhjLGwsYT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6Yyxh''@;'; put 'put ''bmltYXRpb246bCxvcHRpb25zOmF9fWNsYXNzIGlie2NvbnN0cnVjdG9yKGw9MCxhPTApe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9''@;'; put 'put ''W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPWwrYX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRo''@;'; put 'put ''aXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlz''@;'; put 'put ''Ll9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFz''@;'; put 'put ''aygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9Zmlu''@;'; put 'put ''aXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVz''@;'; put 'put ''dHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihsKXt0aGlzLl9wb3NpdGlv''@;'; put 'put ''bj10aGlzLnRvdGFsVGltZT9sKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5f''@;'; put 'put ''b25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIFZLe2NvbnN0cnVjdG9yKGwpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29u''@;'; put 'put ''RGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPWw7bGV0IGE9MCxkPTAsaD0wO2NvbnN0IGY9dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1mP3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXll''@;'; put 'put ''cnMuZm9yRWFjaChfPT57Xy5vbkRvbmUoKCk9PnsrK2E9PWYmJnRoaXMuX29uRmluaXNoKCl9KSxfLm9uRGVzdHJveSgoKT0+eysrZD09ZiYmdGhpcy5fb25EZXN0cm95KCl9KSxfLm9uU3RhcnQoKCk9PnsrK2g9PWYmJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5w''@;'; put 'put ''bGF5ZXJzLnJlZHVjZSgoXyxUKT0+TWF0aC5tYXgoXyxULnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVy''@;'; put 'put ''cy5mb3JFYWNoKGw9PmwuaW5pdCgpKX1vblN0YXJ0KGwpe3RoaXMuX29uU3RhcnRGbnMucHVzaChsKX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRv''@;'; put 'put ''bmUobCl7dGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBs''@;'; put 'put ''YXllcnMuZm9yRWFjaChsPT5sLnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChs''@;'; put 'put ''PT5sLmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMu''@;'; put 'put ''Zm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKGwpe2NvbnN0IGE9bCp0aGlz''@;'; put 'put ''LnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChkPT57Y29uc3QgaD1kLnRvdGFsVGltZT9NYXRoLm1pbigxLGEvZC50b3RhbFRpbWUpOjE7ZC5zZXRQb3NpdGlvbihoKX0pfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLnBsYXllcnMucmVkdWNlKChhLGQpPT5udWxsPT09YXx8ZC50''@;'; put 'put ''b3RhbFRpbWU+YS50b3RhbFRpbWU/ZDphLG51bGwpO3JldHVybiBudWxsIT1sP2wuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT57bC5iZWZvcmVEZXN0cm95JiZsLmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayhsKXtjb25z''@;'; put 'put ''dCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19bGV0IEJLPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9ZCx0aGlzLm9uQ2hhbmdl''@;'; put 'put ''PWg9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShhLGQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxhLGQpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShh''@;'; put 'put ''KXt0aGlzLm9uQ2hhbmdlPWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjfSksY30pKCks''@;'; put 'put ''TjU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEJLe31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXhhKGMpKSkoZHx8Yyl9fSgpLGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsZmVhdHVyZXM6W2VvXX0pLGN9KSgpO2NvbnN0''@;'; put 'put ''IGxoPW5ldyBNaSgiTmdWYWx1ZUFjY2Vzc29yIiksTm1lPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOklzKCgpPT5TMCksbXVsdGk6ITB9O2xldCBTMD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIixhKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5w''@;'; put 'put ''dXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DaGFuZ2UoZi50YXJnZXQu''@;'; put 'put ''Y2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW05tZV0pLGVvXX0pLGN9KSgpO2NvbnN0IFZtZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+V2EpLG11bHRpOiEwfSxqbWU9bmV3IE1pKCJDb21wb3NpdGlvbkV2''@;'; put 'put ''ZW50TW9kZSIpO2xldCBXYT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQkt7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCksdGhpcy5fY29tcG9zaXRpb25Nb2RlPWgsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9k''@;'; put 'put ''ZT0hZnVuY3Rpb24gQm1lKCl7Y29uc3QgYz1hcCgpP2FwKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3QoYy50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfV9oYW5kbGVJbnB1dChhKXso''@;'; put 'put ''IXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShhKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoYSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMu''@;'; put 'put ''X2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRm8pLHR0KE5pKSx0dChqbWUsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9s''@;'; put 'put ''TmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMs''@;'; put 'put ''InR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5faGFuZGxlSW5wdXQoZi50YXJnZXQudmFsdWUp''@;'; put 'put ''fSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5fY29tcG9zaXRpb25TdGFydCgpfSkoImNvbXBvc2l0aW9uZW5kIixmdW5jdGlvbihmKXtyZXR1cm4gZC5fY29tcG9zaXRpb25FbmQoZi50YXJn''@;'; put 'put ''ZXQudmFsdWUpfSl9LGZlYXR1cmVzOlt0aShbVm1lXSksZW9dfSksY30pKCk7Y29uc3QgaXU9bmV3IE1pKCJOZ1ZhbGlkYXRvcnMiKSx5cD1uZXcgTWkoIk5nQXN5bmNWYWxpZGF0b3JzIik7ZnVuY3Rpb24gS0soYyl7cmV0dXJuIG51bGwhPWN9ZnVuY3Rpb24gWEsoYyl7cmV0dXJuIHY1KGMp''@;'; put 'put ''P2VhKGMpOmN9ZnVuY3Rpb24gSksoYyl7bGV0IGw9e307cmV0dXJuIGMuZm9yRWFjaChhPT57bD1udWxsIT1hP3suLi5sLC4uLmF9Omx9KSwwPT09T2JqZWN0LmtleXMobCkubGVuZ3RoP251bGw6bH1mdW5jdGlvbiBRSyhjLGwpe3JldHVybiBsLm1hcChhPT5hKGMpKX1mdW5jdGlvbiBlWChj''@;'; put 'put ''KXtyZXR1cm4gYy5tYXAobD0+ZnVuY3Rpb24gVW1lKGMpe3JldHVybiFjLnZhbGlkYXRlfShsKT9sOmE9PmwudmFsaWRhdGUoYSkpfWZ1bmN0aW9uIFVQKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIHRYKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoS0spO3JldHVy''@;'; put 'put ''biAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBKSyhRSyhhLGwpKX19KGVYKGMpKTpudWxsfWZ1bmN0aW9uIFpQKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIG5YKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoS0spO3JldHVybiAwPT1sLmxlbmd0''@;'; put 'put ''aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbiBIbWUoLi4uYyl7Y29uc3QgbD1SYyhjKSx7YXJnczphLGtleXM6ZH09UkcoYyksaD1uZXcgS2UoZj0+e2NvbnN0e2xlbmd0aDpffT1hO2lmKCFfKXJldHVybiB2b2lkIGYuY29tcGxldGUoKTtjb25zdCBUPW5ldyBBcnJheShfKTts''@;'; put 'put ''ZXQgVz1fLGllPV87Zm9yKGxldCBnZT0wO2dlPF87Z2UrKyl7bGV0IHdlPSExO0tyKGFbZ2VdKS5zdWJzY3JpYmUoVWUoZixFZT0+e3dlfHwod2U9ITAsaWUtLSksVFtnZV09RWV9LCgpPT5XLS0sdm9pZCAwLCgpPT57KCFXfHwhd2UpJiYoaWV8fGYubmV4dChkP09HKGQsVCk6VCksZi5jb21w''@;'; put 'put ''bGV0ZSgpKX0pKX19KTtyZXR1cm4gbD9oLnBpcGUoSE8obCkpOmh9KFFLKGEsbCkubWFwKFhLKSkucGlwZShNZShKSykpfX0oZVgoYykpOm51bGx9ZnVuY3Rpb24gclgoYyxsKXtyZXR1cm4gbnVsbD09PWM/W2xdOkFycmF5LmlzQXJyYXkoYyk/Wy4uLmMsbF06W2MsbF19ZnVuY3Rpb24gWVAo''@;'; put 'put ''Yyl7cmV0dXJuIGM/QXJyYXkuaXNBcnJheShjKT9jOltjXTpbXX1mdW5jdGlvbiBYeChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2MuaW5jbHVkZXMobCk6Yz09PWx9ZnVuY3Rpb24gc1goYyxsKXtjb25zdCBhPVlQKGwpO3JldHVybiBZUChjKS5mb3JFYWNoKGg9PntYeChhLGgpfHxh''@;'; put 'put ''LnB1c2goaCl9KSxhfWZ1bmN0aW9uIGFYKGMsbCl7cmV0dXJuIFlQKGwpLmZpbHRlcihhPT4hWHgoYyxhKSl9Y2xhc3MgbFh7Y29uc3RydWN0b3IoKXt0aGlzLl9yYXdWYWxpZGF0b3JzPVtdLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119''@;'; put 'put ''Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWU6bnVsbH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxp''@;'; put 'put ''ZDpudWxsfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucGVuZGluZzpudWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpc2FibGVkOm51bGx9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro''@;'; put 'put ''aXMuY29udHJvbC5lbmFibGVkOm51bGx9Z2V0IGVycm9ycygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVycm9yczpudWxsfWdldCBwcmlzdGluZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnByaXN0aW5lOm51bGx9Z2V0IGRpcnR5KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH1nZXQgdG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzOm51bGx9Z2V0IHVudG91Y2hl''@;'; put 'put ''ZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfWdldCBzdGF0dXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlczpudWxsfWdldCB2YWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro''@;'; put 'put ''aXMuY29udHJvbC52YWx1ZUNoYW5nZXM6bnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfV9zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1VUCh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3Jz''@;'; put 'put ''KGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49WlAodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRh''@;'; put 'put ''dG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbnx8bnVsbH1fcmVnaXN0ZXJPbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLnB1c2gobCl9X2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5mb3JFYWNo''@;'; put 'put ''KGw9PmwoKSksdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfXJlc2V0KGw9dm9pZCAwKXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldChsKX1oYXNFcnJvcihsLGEpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IobCxhKX1nZXRFcnJvcihsLGEp''@;'; put 'put ''e3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKGwsYSk6bnVsbH19Y2xhc3MganUgZXh0ZW5kcyBsWHtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fWNsYXNzIHp1IGV4dGVuZHMgbFh7Y29uc3RydWN0b3IoKXtz''@;'; put 'put ''dXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX1jbGFzcyBjWHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9jZD1sfWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdl''@;'; put 'put ''dCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQo''@;'; put 'put ''KXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRo''@;'; put 'put ''aXMuX2NkPy5zdWJtaXR0ZWR9fWxldCBCcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgY1h7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHp1LDIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJuZy11bnRvdWNoZWQiLGQuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixkLmlz''@;'; put 'put ''VG91Y2hlZCkoIm5nLXByaXN0aW5lIixkLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsZC5pc0RpcnR5KSgibmctdmFsaWQiLGQuaXNWYWxpZCkoIm5nLWludmFsaWQiLGQuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsZC5pc1BlbmRpbmcpfSxmZWF0dXJlczpbZW9dfSksY30pKCksd3A9KCgpPT57''@;'; put 'put ''Y2xhc3MgYyBleHRlbmRzIGNYe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChqdSwxMCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXBOYW1lIiwiIl0sWyIi''@;'; put 'put ''LCJmb3JtQXJyYXlOYW1lIiwiIl0sWyIiLCJuZ01vZGVsR3JvdXAiLCIiXSxbIiIsImZvcm1Hcm91cCIsIiJdLFsiZm9ybSIsMywibmdOb0Zvcm0iLCIiXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0VmFyczoxNixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJuZy11bnRvdWNo''@;'; put 'put ''ZWQiLGQuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixkLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixkLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsZC5pc0RpcnR5KSgibmctdmFsaWQiLGQuaXNWYWxpZCkoIm5nLWludmFsaWQiLGQuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsZC5pc1BlbmRp''@;'; put 'put ''bmcpKCJuZy1zdWJtaXR0ZWQiLGQuaXNTdWJtaXR0ZWQpfSxmZWF0dXJlczpbZW9dfSksY30pKCk7Y29uc3Qgb2I9IlZBTElEIixReD0iSU5WQUxJRCIscDg9IlBFTkRJTkciLHNiPSJESVNBQkxFRCI7ZnVuY3Rpb24gJFAoYyl7cmV0dXJuKGVFKGMpP2MudmFsaWRhdG9yczpjKXx8bnVsbH1m''@;'; put 'put ''dW5jdGlvbiBxUChjLGwpe3JldHVybihlRShsKT9sLmFzeW5jVmFsaWRhdG9yczpjKXx8bnVsbH1mdW5jdGlvbiBlRShjKXtyZXR1cm4gbnVsbCE9YyYmIUFycmF5LmlzQXJyYXkoYykmJiJvYmplY3QiPT10eXBlb2YgY31jbGFzcyBmWHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3BlbmRpbmdE''@;'; put 'put ''aXJ0eT0hMSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2Fi''@;'; put 'put ''bGVkQ2hhbmdlPVtdLHRoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGEpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29t''@;'; put 'put ''cG9zZWRWYWxpZGF0b3JGbj1sfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49bH1nZXQgcGFy''@;'; put 'put ''ZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1vYn1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PVF4fWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT1wOH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5z''@;'; put 'put ''dGF0dXM9PT1zYn1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PXNifWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRh''@;'; put 'put ''dGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCl9c2V0QXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhsKX1hZGRWYWxpZGF0b3JzKGwpe3RoaXMu''@;'; put 'put ''c2V0VmFsaWRhdG9ycyhzWChsLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoc1gobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9ycyhhWChsLHRo''@;'; put 'put ''aXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoYVgobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IobCl7cmV0dXJuIFh4KHRoaXMuX3Jhd1ZhbGlkYXRvcnMsbCl9aGFzQXN5bmNWYWxpZGF0''@;'; put 'put ''b3IobCl7cmV0dXJuIFh4KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyxsKX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSEw''@;'; put 'put ''LHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKGwpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGw9PmwubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRv''@;'; put 'put ''dWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChhPT57YS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQo''@;'; put 'put ''bCl9bWFya0FzRGlydHkobD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkobCl9bWFya0FzUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFj''@;'; put 'put ''aENoaWxkKGE9PnthLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShsKX1tYXJrQXNQZW5kaW5nKGw9e30pe3RoaXMuc3RhdHVzPXA4LCExIT09bC5lbWl0RXZlbnQmJnRoaXMuc3Rh''@;'; put 'put ''dHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyhsKX1kaXNhYmxlKGw9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9c2IsdGhpcy5l''@;'; put 'put ''cnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZGlzYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0''@;'; put 'put ''aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITApKX1lbmFibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlz''@;'; put 'put ''LnN0YXR1cz1vYix0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZW5hYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJp''@;'; put 'put ''c3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITEpKX1fdXBkYXRlQW5jZXN0b3JzKGwpe3RoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKSxsLnNraXBQcmlzdGluZUNoZWNrfHx0''@;'; put 'put ''aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudChsKXt0aGlzLl9wYXJlbnQ9bH1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobD17fSl7dGhpcy5fc2V0SW5pdGlh''@;'; put 'put ''bFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhpcy5zdGF0dXM9PT1v''@;'; put 'put ''Ynx8dGhpcy5zdGF0dXM9PT1wOCkmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKGwuZW1pdEV2ZW50KSksITEhPT1sLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQm''@;'; put 'put ''JiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKX1fdXBkYXRlVHJlZVZhbGlkaXR5KGw9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZChhPT5hLl91cGRhdGVUcmVlVmFsaWRpdHkobCkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0''@;'; put 'put ''eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/c2I6b2J9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRvcih0aGlzKTpu''@;'; put 'put ''dWxsfV9ydW5Bc3luY1ZhbGlkYXRvcihsKXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz1wOCx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7Y29uc3QgYT1YSyh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJz''@;'; put 'put ''Y3JpcHRpb249YS5zdWJzY3JpYmUoZD0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhkLHtlbWl0RXZlbnQ6bH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRo''@;'; put 'put ''aXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKGwsYT17fSl7dGhpcy5lcnJvcnM9bCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWEuZW1pdEV2ZW50KX1nZXQo''@;'; put 'put ''bCl7bGV0IGE9bDtyZXR1cm4gbnVsbD09YXx8KEFycmF5LmlzQXJyYXkoYSl8fChhPWEuc3BsaXQoIi4iKSksMD09PWEubGVuZ3RoKT9udWxsOmEucmVkdWNlKChkLGgpPT5kJiZkLl9maW5kKGgpLHRoaXMpfWdldEVycm9yKGwsYSl7Y29uc3QgZD1hP3RoaXMuZ2V0KGEpOnRoaXM7cmV0dXJu''@;'; put 'put ''IGQmJmQuZXJyb3JzP2QuZXJyb3JzW2xdOm51bGx9aGFzRXJyb3IobCxhKXtyZXR1cm4hIXRoaXMuZ2V0RXJyb3IobCxhKX1nZXQgcm9vdCgpe2xldCBsPXRoaXM7Zm9yKDtsLl9wYXJlbnQ7KWw9bC5fcGFyZW50O3JldHVybiBsfV91cGRhdGVDb250cm9sc0Vycm9ycyhsKXt0aGlzLnN0YXR1''@;'; put 'put ''cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSxsJiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpfV9pbml0T2JzZXJ2YWJsZXMoKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgRXIsdGhp''@;'; put 'put ''cy5zdGF0dXNDaGFuZ2VzPW5ldyBFcn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9zYjp0aGlzLmVycm9ycz9ReDp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhwOCk/cDg6''@;'; put 'put ''dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKFF4KT9ReDpvYn1fYW55Q29udHJvbHNIYXZlU3RhdHVzKGwpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhhPT5hLnN0YXR1cz09PWwpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwuZGlydHkpfV9h''@;'; put 'put ''bnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+bC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBk''@;'; put 'put ''YXRlUHJpc3RpbmUobCl9X3VwZGF0ZVRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UobCl7''@;'; put 'put ''dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWx9X3NldFVwZGF0ZVN0cmF0ZWd5KGwpe2VFKGwpJiZudWxsIT1sLnVwZGF0ZU9uJiYodGhpcy5fdXBkYXRlT249bC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5KGwpe3JldHVybiFsJiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQu''@;'; put 'put ''ZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2ZpbmQobCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rp''@;'; put 'put ''b24gR21lKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP1VQKGMpOmN8fG51bGx9KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRB''@;'; put 'put ''c3luY1ZhbGlkYXRvckZuPWZ1bmN0aW9uICRtZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9aUChjKTpjfHxudWxsfSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfX1jbGFzcyB0RSBleHRlbmRzIGZYe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigkUChhKSxxUChkLGEpKSx0aGlzLmNv''@;'; put 'put ''bnRyb2xzPWwsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXJlZ2lzdGVy''@;'; put 'put ''Q29udHJvbChsLGEpe3JldHVybiB0aGlzLmNvbnRyb2xzW2xdP3RoaXMuY29udHJvbHNbbF06KHRoaXMuY29udHJvbHNbbF09YSxhLnNldFBhcmVudCh0aGlzKSxhLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGEpfWFkZENvbnRyb2wobCxh''@;'; put 'put ''LGQ9e30pe3RoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1yZW1vdmVDb250cm9sKGwsYT17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9s''@;'; put 'put ''c1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1tsXSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDphLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wobCxhLGQ9e30p''@;'; put 'put ''e3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sYSYmdGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpk''@;'; put 'put ''LmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfWNvbnRhaW5zKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpJiZ0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWR9c2V0VmFsdWUobCxhPXt9KXsoZnVuY3Rpb24gaFgoYyxsLGEpe2MuX2ZvckVhY2hD''@;'; put 'put ''aGlsZCgoZCxoKT0+e2lmKHZvaWQgMD09PWFbaF0pdGhyb3cgbmV3IEFyKDEwMDIsIiIpfSl9KSh0aGlzLDAsbCksT2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT57KGZ1bmN0aW9uIGRYKGMsbCxhKXtjb25zdCBkPWMuY29udHJvbHM7aWYoIShsP09iamVjdC5rZXlzKGQpOmQpLmxlbmd0aCl0''@;'; put 'put ''aHJvdyBuZXcgQXIoMWUzLCIiKTtpZighZFthXSl0aHJvdyBuZXcgQXIoMTAwMSwiIil9KSh0aGlzLCEwLGQpLHRoaXMuY29udHJvbHNbZF0uc2V0VmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9''@;'; put 'put ''cGF0Y2hWYWx1ZShsLGE9e30pe251bGwhPWwmJihPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuY29udHJvbHNbZF07aCYmaC5wYXRjaFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlk''@;'; put 'put ''aXR5KGEpKX1yZXNldChsPXt9LGE9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2QucmVzZXQobFtoXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShhKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEpLHRoaXMudXBkYXRlVmFs''@;'; put 'put ''dWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwobCxhLGQpPT4obFtkXT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3lu''@;'; put 'put ''Y1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChk''@;'; put 'put ''LGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQobD0+e2wuc2V0UGFyZW50KHRoaXMpLGwuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVl''@;'; put 'put ''KCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+''@;'; put 'put ''KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1kLnZhbHVlKSxhKSl9X3JlZHVjZUNoaWxkcmVuKGwsYSl7bGV0IGQ9bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBP''@;'; put 'put ''YmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5''@;'; put 'put ''KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3QgVjU9bmV3IE1pKCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmFifSksYWI9ImFsd2F5cyI7ZnVuY3Rpb24gbGIoYyxsLGE9YWIpe0tQKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRl''@;'; put 'put ''VmFsdWUoYy52YWx1ZSksKGMuZGlzYWJsZWR8fCJhbHdheXMiPT09YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oYy5kaXNhYmxlZCksZnVuY3Rpb24gWG1lKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMu''@;'; put 'put ''X3BlbmRpbmdDaGFuZ2U9ITAsYy5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09Yy51cGRhdGVPbiYmcFgoYyxsKX0pfShjLGwpLGZ1bmN0aW9uIFFtZShjLGwpe2NvbnN0IGE9KGQsaCk9PntsLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShkKSxoJiZsLnZpZXdUb01vZGVsVXBkYXRlKGQp''@;'; put 'put ''fTtjLnJlZ2lzdGVyT25DaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25DaGFuZ2UoYSl9KX0oYyxsKSxmdW5jdGlvbiBKbWUoYyxsKXtsLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCk9PntjLl9wZW5kaW5nVG91Y2hlZD0hMCwiYmx1''@;'; put 'put ''ciI9PT1jLnVwZGF0ZU9uJiZjLl9wZW5kaW5nQ2hhbmdlJiZwWChjLGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJrQXNUb3VjaGVkKCl9KX0oYyxsKSxmdW5jdGlvbiBLbWUoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1''@;'; put 'put ''ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gaUUoYyxsKXtjLmZvckVhY2goYT0+e2EucmVn''@;'; put 'put ''aXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gS1AoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIGlYKGMpe3JldHVybiBjLl9yYXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKHJYKGEs''@;'; put 'put ''bC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgYSYmYy5zZXRWYWxpZGF0b3JzKFthXSk7Y29uc3QgZD1mdW5jdGlvbiBvWChjKXtyZXR1cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9jLnNldEFzeW5jVmFsaWRhdG9ycyhyWChkLGwu''@;'; put 'put ''YXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZCYmYy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25zdCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtpRShsLl9yYXdWYWxpZGF0b3JzLGgpLGlFKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiBw''@;'; put 'put ''WChjLGwpe2MuX3BlbmRpbmdEaXJ0eSYmYy5tYXJrQXNEaXJ0eSgpLGMuc2V0VmFsdWUoYy5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSxsLnZpZXdUb01vZGVsVXBkYXRlKGMuX3BlbmRpbmdWYWx1ZSksYy5fcGVuZGluZ0NoYW5nZT0hMX1jb25zdCBpNmU9e3By''@;'; put 'put ''b3ZpZGU6anUsdXNlRXhpc3Rpbmc6SXMoKCk9PnIyKX0sY2I9KCgpPT5Qcm9taXNlLnJlc29sdmUoKSkoKTtsZXQgcjI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGp1e2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9aCx0aGlzLnN1Ym1pdHRlZD0h''@;'; put 'put ''MSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgRXIsdGhpcy5mb3JtPW5ldyB0RSh7fSxVUChhKSxaUChkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250''@;'; put 'put ''cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChhKXtjYi50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7YS5jb250cm9sPWQucmVnaXN0''@;'; put 'put ''ZXJDb250cm9sKGEubmFtZSxhLmNvbnRyb2wpLGxiKGEuY29udHJvbCxhLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChhKX0pfWdldENvbnRyb2woYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZm9ybS5nZXQoYS5wYXRoKX1yZW1vdmVDb250cm9sKGEpe2NiLnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShhKX0pfWFkZEZvcm1Hcm91cChhKXtjYi50''@;'; put 'put ''aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCksaD1uZXcgdEUoe30pOyhmdW5jdGlvbiBnWChjLGwpe0tQKGMsbCl9KShoLGEpLGQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxoKSxoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVt''@;'; put 'put ''b3ZlRm9ybUdyb3VwKGEpe2NiLnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKX0pfWdldEZvcm1Hcm91cChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXVwZGF0ZU1vZGVsKGEsZCl7Y2IudGhlbigo''@;'; put 'put ''KT0+e3RoaXMuZm9ybS5nZXQoYS5wYXRoKS5zZXRWYWx1ZShkKX0pfXNldFZhbHVlKGEpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShhKX1vblN1Ym1pdChhKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsZnVuY3Rpb24gbVgoYyxsKXtjLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksbC5mb3JFYWNo''@;'; put 'put ''KGE9Pntjb25zdCBkPWEuY29udHJvbDsic3VibWl0Ij09PWQudXBkYXRlT24mJmQuX3BlbmRpbmdDaGFuZ2UmJihhLnZpZXdUb01vZGVsVXBkYXRlKGQuX3BlbmRpbmdWYWx1ZSksZC5fcGVuZGluZ0NoYW5nZT0hMSl9KX0odGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJt''@;'; put 'put ''aXQuZW1pdChhKSwiZGlhbG9nIj09PWE/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShhPXZvaWQgMCl7dGhpcy5mb3JtLnJlc2V0KGEpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9''@;'; put 'put ''dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKGEpe3JldHVybiBhLnBvcCgpLGEubGVuZ3RoP3RoaXMuZm9ybS5nZXQoYSk6dGhpcy5mb3JtfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKSh0dChpdSwxMCksdHQoeXAsMTApLHR0KFY1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5k''@;'; put 'put ''aW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoInN1Ym1pdCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TdWJtaXQoZil9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25SZXNldCgpfSl9LGlucHV0czp7b3B0aW9uczpbIm5nRm9ybU9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6''@;'; put 'put ''e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W3RpKFtpNmVdKSxlb119KSxjfSkoKTtmdW5jdGlvbiB2WChjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gX1goYyl7cmV0dXJuIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBjJiZudWxsIT09YyYmMj09PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmInZhbHVlImluIGMmJiJkaXNhYmxlZCJpbiBjfWNvbnN0IGVGPWNsYXNzIGV4dGVuZHMgZlh7Y29uc3RydWN0b3IobD1udWxsLGEsZCl7c3VwZXIoJFAoYSkscVAoZCxhKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVs''@;'; put 'put ''bCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2''@;'; put 'put ''ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLGVFKGEpJiYoYS5ub25OdWxsYWJsZXx8YS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9X1gobCk/bC52YWx1ZTpsKX1zZXRWYWx1ZShsLGE9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwsdGhp''@;'; put 'put ''cy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWEuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGQ9PmQodGhpcy52YWx1ZSwhMSE9PWEuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUobCxh''@;'; put 'put ''PXt9KXt0aGlzLnNldFZhbHVlKGwsYSl9cmVzZXQobD10aGlzLmRlZmF1bHRWYWx1ZSxhPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLm1hcmtBc1ByaXN0aW5lKGEpLHRoaXMubWFya0FzVW50b3VjaGVkKGEpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxhKSx0aGlzLl9wZW5k''@;'; put 'put ''aW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHMobCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKGwpe3RoaXMuX29uQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkNoYW5nZShsKXt2''@;'; put 'put ''WCh0aGlzLl9vbkNoYW5nZSxsKX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXt2WCh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLGwpfV9mb3JFYWNoQ2hpbGQobCl7fV9zeW5jUGVu''@;'; put 'put ''ZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRW''@;'; put 'put ''YWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUobCl7X1gobCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwudmFsdWUsbC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxm''@;'; put 'put ''OiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bH19LGE2ZT17cHJvdmlkZTp6dSx1c2VFeGlzdGluZzpJcygoKT0+T3MpfSx5WD0oKCk9PlByb21pc2UucmVzb2x2ZSgpKSgpO2xl''@;'; put 'put ''dCBPcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgenV7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9Xyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPVQsdGhpcy5jb250cm9sPW5ldyBlRix0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMubmFt''@;'; put 'put ''ZT0iIix0aGlzLnVwZGF0ZT1uZXcgRXIsdGhpcy5fcGFyZW50PWEsdGhpcy5fc2V0VmFsaWRhdG9ycyhkKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaCksdGhpcy52YWx1ZUFjY2Vzc29yPWZ1bmN0aW9uIFFQKGMsbCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGEsZCxoO3JldHVybiBBcnJh''@;'; put 'put ''eS5pc0FycmF5KGwpLGwuZm9yRWFjaChmPT57Zi5jb25zdHJ1Y3Rvcj09PVdhP2E9ZjpmdW5jdGlvbiBuNmUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLmNvbnN0cnVjdG9yKT09PU41fShmKT9kPWY6aD1mfSksaHx8ZHx8YXx8bnVsbH0oMCxmKX1uZ09uQ2hhbmdlcyhhKXtp''@;'; put 'put ''Zih0aGlzLl9jaGVja0ZvckVycm9ycygpLCF0aGlzLl9yZWdpc3RlcmVkfHwibmFtZSJpbiBhKXtpZih0aGlzLl9yZWdpc3RlcmVkJiYodGhpcy5fY2hlY2tOYW1lKCksdGhpcy5mb3JtRGlyZWN0aXZlKSl7Y29uc3QgZD1hLm5hbWUucHJldmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUu''@;'; put 'put ''cmVtb3ZlQ29udHJvbCh7bmFtZTpkLHBhdGg6dGhpcy5fZ2V0UGF0aChkKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGEmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGEpLGZ1bmN0aW9uIEpQKGMsbCl7aWYoIWMuaGFzT3duUHJvcGVydHkoIm1vZGVsIikpcmV0dXJuITE7''@;'; put 'put ''Y29uc3QgYT1jLm1vZGVsO3JldHVybiEhYS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXMobCxhLmN1cnJlbnRWYWx1ZSl9KGEsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3Rp''@;'; put 'put ''dmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0ZShhKXt0aGlzLnZpZXdNb2RlbD1hLHRoaXMudXBkYXRlLmVtaXQoYSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGly''@;'; put 'put ''ZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFs''@;'; put 'put ''b25lKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXtsYih0aGlzLmNvbnRyb2wsdGhpcyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSx0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRW''@;'; put 'put ''YWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NoZWNrRm9yRXJyb3JzKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfV9jaGVja1BhcmVudFR5cGUoKXt9X2NoZWNrTmFtZSgpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25z''@;'; put 'put ''Lm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfV91cGRhdGVWYWx1ZShhKXt5WC50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5t''@;'; put 'put ''YXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaD0wIT09ZCYmVTYoZCk7eVgudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRp''@;'; put 'put ''c2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiBuRShjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGp1LDkpLHR0KGl1LDEwKSx0dCh5cCwxMCksdHQobGgsMTApLHR0KFVhLDgpLHR0KFY1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNv''@;'; put 'put ''bnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdLG9wdGlvbnM6WyJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7''@;'; put 'put ''dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W3RpKFthNmVdKSxlbyx2YV19KSxjfSkoKSxDcD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRhdGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSksY30pKCk7Y29uc3QgbDZlPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOklzKCgpPT5zRSksbXVsdGk6ITB9O2xldCBzRT0o''@;'; put 'put ''KCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57YSgiIj09ZD9udWxsOnBhcnNlRmxvYXQoZCkpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIs''@;'; put 'put ''ImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNoYW5nZShmLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW2w2ZV0pLGVvXX0pLGN9KSgpO2NvbnN0IGM2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+YUUpLG11bHRpOiEwfTtsZXQgd1g9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCksdTZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKGEsZCl7dGhpcy5fYWNjZXNzb3JzLnB1c2goW2EsZF0pfXJlbW92ZShh''@;'; put 'put ''KXtmb3IobGV0IGQ9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2Q+PTA7LS1kKWlmKHRoaXMuX2FjY2Vzc29yc1tkXVsxXT09PWEpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShkLDEpfXNlbGVjdChhKXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaChkPT57dGhpcy5faXNTYW1l''@;'; put 'put ''R3JvdXAoZCxhKSYmZFsxXSE9PWEmJmRbMV0uZmlyZVVuY2hlY2soYS52YWx1ZSl9KX1faXNTYW1lR3JvdXAoYSxkKXtyZXR1cm4hIWFbMF0uY29udHJvbCYmYVswXS5fcGFyZW50PT09ZC5fY29udHJvbC5fcGFyZW50JiZhWzFdLm5hbWU9PT1kLm5hbWV9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOndYfSksY30pKCksYUU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCksdGhpcy5fcmVn''@;'; put 'put ''aXN0cnk9aCx0aGlzLl9pbmplY3Rvcj1mLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9RmkoVjUse29wdGlvbmFsOiEwfSk/P2FifW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rv''@;'; put 'put ''ci5nZXQoenUpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoYSl7dGhpcy5fc3RhdGU9YT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0''@;'; put 'put ''eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5fZm49YSx0aGlzLm9uQ2hhbmdlPSgpPT57YSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2FibGVkU3RhdGUoYSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVk''@;'; put 'put ''fHxhfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZpcmVVbmNoZWNrKGEpe3RoaXMud3JpdGVWYWx1ZShhKX1fY2hlY2tO''@;'; put 'put ''YW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoTmkpLHR0KHU2ZSksdHQoRWEpKX0sYy5cdTAyNzVkaXI9''@;'; put 'put ''Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2''@;'; put 'put ''YWx1ZSJ9LGZlYXR1cmVzOlt0aShbYzZlXSksZW9dfSksY30pKCk7Y29uc3QgbkY9bmV3IE1pKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLHY2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+TTApLG11bHRpOiEwfTtmdW5jdGlvbiBFWChjLGwpe3JldHVybiBudWxs''@;'; put 'put ''PT1jP2Ake2x9YDoobCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgTTA9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0''@;'; put 'put ''aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXt0aGlzLnZhbHVlPWE7Y29uc3QgaD1FWCh0aGlzLl9nZXRPcHRpb25JZChhKSxhKTt0aGlzLnNldFByb3BlcnR5KCJ2''@;'; put 'put ''YWx1ZSIsaCl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGQpLGEodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQo''@;'; put 'put ''YSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLGEpKXJldHVybiBkO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZShhKXtjb25zdCBkPWZ1bmN0aW9uIF82ZShjKXtyZXR1cm4gYy5zcGxp''@;'; put 'put ''dCgiOiIpWzBdfShhKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhkKT90aGlzLl9vcHRpb25NYXAuZ2V0KGQpOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVk''@;'; put 'put ''aXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRyb2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwzLCJtdWx0aXBsZSIsIiJdXSxob3N0Qmlu''@;'; put 'put ''ZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2hhbmdlKGYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVh''@;'; put 'put ''dHVyZXM6W3RpKFt2NmVdKSxlb119KSxjfSkoKSxsMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24o''@;'; put 'put ''KSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKEVYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2''@;'; put 'put ''YWx1ZShhKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50''@;'; put 'put ''LCJ2YWx1ZSIsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpKHR0KE5pKSx0dChGbyksdHQoTTAsOSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLGN9KSgpO2NvbnN0IGI2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJ''@;'; put 'put ''cygoKT0+dWIpLG11bHRpOiEwfTtmdW5jdGlvbiBrWChjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDooInN0cmluZyI9PXR5cGVvZiBsJiYobD1gJyR7bH0nYCksbCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgdWI9KCgp''@;'; put 'put ''PT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9''@;'; put 'put ''d3JpdGVWYWx1ZShhKXtsZXQgZDtpZih0aGlzLnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgaD1hLm1hcChmPT50aGlzLl9nZXRPcHRpb25JZChmKSk7ZD0oZixfKT0+e2YuX3NldFNlbGVjdGVkKGguaW5kZXhPZihfLnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBkPShoLGYpPT57aC5f''@;'; put 'put ''c2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChkKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2NvbnN0IGg9W10sZj1kLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1mKXtjb25zdCBfPWY7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKysp''@;'; put 'put ''e2NvbnN0IGllPXRoaXMuX2dldE9wdGlvblZhbHVlKF9bVF0udmFsdWUpO2gucHVzaChpZSl9fWVsc2V7Y29uc3QgXz1kLm9wdGlvbnM7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKyspe2NvbnN0IFc9X1tUXTtpZihXLnNlbGVjdGVkKXtjb25zdCBpZT10aGlzLl9nZXRPcHRpb25WYWx1ZShX''@;'; put 'put ''LnZhbHVlKTtoLnB1c2goaWUpfX19dGhpcy52YWx1ZT1oLGEoaCl9fV9yZWdpc3Rlck9wdGlvbihhKXtjb25zdCBkPSh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLnNldChkLGEpLGR9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRo''@;'; put 'put ''aXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWUsYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24geTZlKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEp''@;'; put 'put ''O3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCkuX3ZhbHVlOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVkaXI9Q3Io''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2hhbmdlKGYudGFyZ2V0KX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W3RpKFtiNmVdKSxl''@;'; put 'put ''b119KSxjfSkoKSxjMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVl''@;'; put 'put ''KGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKGtYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlzLl9zZWxlY3Q/KHRoaXMuX3ZhbHVlPWEsdGhp''@;'; put 'put ''cy5fc2V0RWxlbWVudFZhbHVlKGtYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRoaXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQu''@;'; put 'put ''bmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9zZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRl''@;'; put 'put ''bGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSx0dCh1Yiw5KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSksY30pKCksSFg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWlu''@;'; put 'put ''aj1taSh7aW1wb3J0czpbd1hdfSksY30pKCksJGw9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2FifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIWF19KSxjfSkoKSxENmU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92''@;'; put 'put ''aWRlOm5GLHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2FifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIWF19KSxjfSkoKTtmdW5jdGlvbiBJNmUoYyxsKXt0aGlzLnY9Yyx0aGlzLms9bH1mdW5jdGlvbiB1RShjKXt2YXIgbCxhO2Z1bmN0aW9uIGQoZixfKXt0cnl7dmFyIFQ9Y1tmXShfKSxXPVQudmFsdWUsaWU9VyBp''@;'; put 'put ''bnN0YW5jZW9mIEk2ZTtQcm9taXNlLnJlc29sdmUoaWU/Vy52OlcpLnRoZW4oZnVuY3Rpb24oZ2Upe2lmKGllKXt2YXIgd2U9InJldHVybiI9PT1mPyJyZXR1cm4iOiJuZXh0IjtpZighVy5rfHxnZS5kb25lKXJldHVybiBkKHdlLGdlKTtnZT1jW3dlXShnZSkudmFsdWV9aChULmRvbmU/InJl''@;'; put 'put ''dHVybiI6Im5vcm1hbCIsZ2UpfSxmdW5jdGlvbihnZSl7ZCgidGhyb3ciLGdlKX0pfWNhdGNoKGdlKXtoKCJ0aHJvdyIsZ2UpfX1mdW5jdGlvbiBoKGYsXyl7c3dpdGNoKGYpe2Nhc2UicmV0dXJuIjpsLnJlc29sdmUoe3ZhbHVlOl8sZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ciOmwucmVq''@;'; put 'put ''ZWN0KF8pO2JyZWFrO2RlZmF1bHQ6bC5yZXNvbHZlKHt2YWx1ZTpfLGRvbmU6ITF9KX0obD1sLm5leHQpP2QobC5rZXksbC5hcmcpOmE9bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oZixfKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVCxXKXt2YXIgaWU9e2tleTpmLGFyZzpfLHJl''@;'; put 'put ''c29sdmU6VCxyZWplY3Q6VyxuZXh0Om51bGx9O2E/YT1hLm5leHQ9aWU6KGw9YT1pZSxkKGYsXykpfSl9LCJmdW5jdGlvbiIhPXR5cGVvZiBjLnJldHVybiYmKHRoaXMucmV0dXJuPXZvaWQgMCl9dUUucHJvdG90eXBlWyJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5hc3luY0l0''@;'; put 'put ''ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdUUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsYyl9LHVFLnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0''@;'; put 'put ''aHJvdyIsYyl9LHVFLnByb3RvdHlwZS5yZXR1cm49ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgicmV0dXJuIixjKX07Y2xhc3MgZEV7c3RhdGljIGdldFRyYXBFbGVtZW50cygpe3JldHVyblsuLi5HbC5zdGF0ZS5mb2N1c1RyYXBJdGVtc119c3RhdGljIHNldFRyYXBFbGVtZW50''@;'; put 'put ''cyhsKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImh0bWwiKTtudWxsIT09YSYmZnVuY3Rpb24gc0YoYywuLi5sKXtjJiZsLmZvckVhY2goKFthLGRdKT0+eyExPT09ZHx8bnVsbD09PWQ/Yy5yZW1vdmVBdHRyaWJ1dGUoYSk6Yy5zZXRBdHRyaWJ1dGUoYSxkKyIiKX0pfShhLFsi''@;'; put 'put ''Y2RzLWZvY3VzLXRyYXAiLCEhbC5sZW5ndGgmJiIiXSksR2wuc3RhdGUuZm9jdXNUcmFwSXRlbXM9Wy4uLmxdfXN0YXRpYyByZW1vdmVUcmFwRWxlbWVudChsKXt0aGlzLmdldFRyYXBFbGVtZW50cygpLmxlbmd0aDwxfHx0aGlzLnNldFRyYXBFbGVtZW50cyhbLi4udGhpcy5nZXRUcmFwRWxl''@;'; put 'put ''bWVudHMoKS5maWx0ZXIoYT0+YS5mb2N1c1RyYXBJZCE9PWwuZm9jdXNUcmFwSWQpXSl9c3RhdGljIHNldEN1cnJlbnQobCl7bD8uZm9jdXNUcmFwSWQmJnRoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygpLmZpbHRlcihhPT5hLmZvY3VzVHJhcElkIT09bC5m''@;'; put 'put ''b2N1c1RyYXBJZCksbF0pfXN0YXRpYyBhY3RpdmF0ZVByZXZpb3VzQ3VycmVudCgpe3RoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygpXS5zbGljZSgwLC0xKSl9c3RhdGljIGdldEN1cnJlbnQoKXtyZXR1cm4gZnVuY3Rpb24gTDZlKGMpe3JldHVybiBjLmxl''@;'; put 'put ''bmd0aD9jW2MubGVuZ3RoLTFdOnZvaWQgMH0odGhpcy5nZXRUcmFwRWxlbWVudHMoKSl8fG51bGx9fWNvbnN0IFU2ZT1FSygzLChjLGwsYSk9PnshZnVuY3Rpb24gc21lKGMsbCl7cmV0dXJuIGx8fChsPXdpbmRvdyYmd2luZG93LmN1c3RvbUVsZW1lbnRzKSwhbHx8ISFsLmdldChjKX0oYyl8''@;'; put 'put ''fGZ1bmN0aW9uIFVnZSgpe3JldHVybiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmPy5pbmNsdWRlcygibG9jYWxob3N0OjYwMDYiKX0oKT8oYS5kZWZpbmUoYyxsKSxBSygpLHdpbmRvdyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSkuc29tZShkPT5kPT09''@;'; put 'put ''YykmJih3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnk9ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbY106e319KSk6SDUud2FybihjKyIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBWWChjLGwpe3BLKCkmJmtLKFsiY3VzdG9t''@;'; put 'put ''RWxlbWVudHMiXSkmJlU2ZShjLGwsd2luZG93LmN1c3RvbUVsZW1lbnRzKX1sZXQgQlg9ITE7ZnVuY3Rpb24gWjZlKGMpe2lmKChjPU1hdGgudHJ1bmMoYyl8fDApPDAmJihjKz10aGlzLmxlbmd0aCksIShjPDB8fGM+PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpc1tjXX1pZighQlgpe0JYPSEw''@;'; put 'put ''O2NvbnN0IGM9UmVmbGVjdC5nZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkpO2Zvcihjb25zdCBsIG9mW0FycmF5LFN0cmluZyxjXSlPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImF0Iix7dmFsdWU6WjZlLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''fSl9bGV0IGpYPSExLHpYPSExO2Z1bmN0aW9uIFVYKGMsbCxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUobCk/dGhpcy5nZXRBdHRyaWJ1dGUobCk6bnVsbH0s''@;'; put 'put ''c2V0OmZ1bmN0aW9uKGQpe251bGwhPT1kP3RoaXMuc2V0QXR0cmlidXRlKGwsZCk6dGhpcy5yZW1vdmVBdHRyaWJ1dGUobCl9fSl9alh8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJyb2xlIil8fChVWChFbGVtZW50LnByb3RvdHlwZSwicm9sZSIsInJvbGUiKSxqWD0hMCks''@;'; put 'put ''elh8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJhcmlhTGFiZWwiKXx8KHpYPSEwLFsiQWN0aXZlRGVzY2VuZGFudCIsIkF0b21pYyIsIkF1dG9Db21wbGV0ZSIsIkJ1c3kiLCJDaGVja2VkIiwiQ29sQ291bnQiLCJDb2xJbmRleCIsIkNvbFNwYW4iLCJDb250cm9scyIsIkN1''@;'; put 'put ''cnJlbnQiLCJEZXNjcmliZWRCeSIsIkRldGFpbHMiLCJEaXNhYmxlZCIsIkVycm9yTWVzc2FnZSIsIkV4cGFuZGVkIiwiRmxvd1RvIiwiSGFzUG9wdXAiLCJIaWRkZW4iLCJJbnZhbGlkIiwiS2V5U2hvcnRjdXRzIiwiTGFiZWwiLCJMYWJlbGxlZEJ5IiwiTGV2ZWwiLCJMaXZlIiwiTW9kYWwi''@;'; put 'put ''LCJNdWx0aUxpbmUiLCJNdWx0aVNlbGVjdGFibGUiLCJPcmllbnRhdGlvbiIsIk93bnMiLCJQbGFjZWhvbGRlciIsIlBvc0luU2V0IiwiUHJlc3NlZCIsIlJlYWRPbmx5IiwiUmVsZXZhbnQiLCJSZXF1aXJlZCIsIlJvbGVEZXNjcmlwdGlvbiIsIlJvd0NvdW50IiwiUm93SW5kZXgiLCJSb3dT''@;'; put 'put ''cGFuIiwiU2VsZWN0ZWQiLCJTZXRTaXplIiwiU29ydCIsIlZhbHVlTWF4IiwiVmFsdWVNaW4iLCJWYWx1ZU5vdyIsIlZhbHVlVGV4dCJdLmZvckVhY2goYz0+VVgoRWxlbWVudC5wcm90b3R5cGUsImFyaWEtIitjLnRvTG93ZXJDYXNlKCksImFyaWEiK2MpKSk7Y29uc3QgaEU9d2luZG93LGFG''@;'; put 'put ''PWhFLlNoYWRvd1Jvb3QmJih2b2lkIDA9PT1oRS5TaGFkeUNTU3x8aEUuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLGxGPVN5bWJvbCgpLFpYPW5ldyBX''@;'; put 'put ''ZWFrTWFwO2NsYXNzIFlYe2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLl8kY3NzUmVzdWx0JD0hMCxkIT09bEYpdGhyb3cgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PWwsdGhp''@;'; put 'put ''cy50PWF9Z2V0IHN0eWxlU2hlZXQoKXtsZXQgbD10aGlzLm87Y29uc3QgYT10aGlzLnQ7aWYoYUYmJnZvaWQgMD09PWwpe2NvbnN0IGQ9dm9pZCAwIT09YSYmMT09PWEubGVuZ3RoO2QmJihsPVpYLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVw''@;'; put 'put ''bGFjZVN5bmModGhpcy5jc3NUZXh0KSxkJiZaWC5zZXQoYSxsKSl9cmV0dXJuIGx9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX1jb25zdCBjRj0oYywuLi5sKT0+e2NvbnN0IGE9MT09PWMubGVuZ3RoP2NbMF06bC5yZWR1Y2UoKGQsaCxmKT0+ZCsoXz0+e2lmKCEwPT09Xy5fJGNz''@;'; put 'put ''c1Jlc3VsdCQpcmV0dXJuIF8uY3NzVGV4dDtpZigibnVtYmVyIj09dHlwZW9mIF8pcmV0dXJuIF87dGhyb3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiAiK18rIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mg''@;'; put 'put ''bm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIpfSkoaCkrY1tmKzFdLGNbMF0pO3JldHVybiBuZXcgWVgoYSxjLGxGKX0sV1g9YUY/Yz0+YzpjPT5jIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD8obD0+e2xldCBhPSIiO2Zvcihjb25z''@;'; put 'put ''dCBkIG9mIGwuY3NzUnVsZXMpYSs9ZC5jc3NUZXh0O3JldHVybihjPT5uZXcgWVgoInN0cmluZyI9PXR5cGVvZiBjP2M6YysiIix2b2lkIDAsbEYpKShhKX0pKGMpOmM7dmFyIHVGO2NvbnN0IGZFPXdpbmRvdyxHWD1mRS50cnVzdGVkVHlwZXMsRzZlPUdYP0dYLmVtcHR5U2NyaXB0OiIiLCRY''@;'; put 'put ''PWZFLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxkRj17dG9BdHRyaWJ1dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz9HNmU6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9jOkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9t''@;'; put 'put ''QXR0cmlidXRlKGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1y''@;'; put 'put ''ZXR1cm4gYX19LHFYPShjLGwpPT5sIT09YyYmKGw9PWx8fGM9PWMpLGhGPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOmRGLHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpxWH0sZkY9ImZpbmFsaXplZCI7Y2xhc3MgZzggZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3N1cGVyKCksdGhpcy5fJEVpPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITEsdGhpcy5oYXNVcGRhdGVkPSExLHRoaXMuXyRFbD1udWxsLHRoaXMudSgpfXN0YXRpYyBhZGRJbml0aWFsaXplcihsKXt2YXIgYTt0aGlzLmZpbmFsaXplKCksKG51bGwhPT0oYT10aGlzLmgpJiZ2b2lk''@;'; put 'put ''IDAhPT1hP2E6dGhpcy5oPVtdKS5wdXNoKGwpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7dGhpcy5maW5hbGl6ZSgpO2NvbnN0IGw9W107cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fJEVwKGQsYSk7dm9pZCAwIT09''@;'; put 'put ''aCYmKHRoaXMuXyRFdi5zZXQoaCxkKSxsLnB1c2goaCkpfSksbH1zdGF0aWMgY3JlYXRlUHJvcGVydHkobCxhPWhGKXtpZihhLnN0YXRlJiYoYS5hdHRyaWJ1dGU9ITEpLHRoaXMuZmluYWxpemUoKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChsLGEpLCFhLm5vQWNjZXNzb3ImJiF0aGlz''@;'; put 'put ''LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShsKSl7Y29uc3QgZD0ic3ltYm9sIj09dHlwZW9mIGw/U3ltYm9sKCk6Il9fIitsLGg9dGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxkLGEpO3ZvaWQgMCE9PWgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSxsLGgpfX1z''@;'; put 'put ''dGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGwsYSxkKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXtjb25zdCBmPXRoaXNbbF07dGhpc1thXT1oLHRoaXMucmVxdWVzdFVwZGF0ZShsLGYsZCl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0''@;'; put 'put ''UHJvcGVydHlPcHRpb25zKGwpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmdldChsKXx8aEZ9c3RhdGljIGZpbmFsaXplKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShmRikpcmV0dXJuITE7dGhpc1tmRl09ITA7Y29uc3QgbD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYo''@;'; put 'put ''bC5maW5hbGl6ZSgpLHZvaWQgMCE9PWwuaCYmKHRoaXMuaD1bLi4ubC5oXSksdGhpcy5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwKGwuZWxlbWVudFByb3BlcnRpZXMpLHRoaXMuXyRFdj1uZXcgTWFwLHRoaXMuaGFzT3duUHJvcGVydHkoInByb3BlcnRpZXMiKSl7Y29uc3QgYT10aGlzLnBy''@;'; put 'put ''b3BlcnRpZXMsZD1bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhhKV07Zm9yKGNvbnN0IGggb2YgZCl0aGlzLmNyZWF0ZVByb3BlcnR5KGgsYVtoXSl9cmV0dXJuIHRoaXMuZWxlbWVudFN0eWxlcz10aGlzLmZpbmFsaXpl''@;'; put 'put ''U3R5bGVzKHRoaXMuc3R5bGVzKSwhMH1zdGF0aWMgZmluYWxpemVTdHlsZXMobCl7Y29uc3QgYT1bXTtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBkPW5ldyBTZXQobC5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IoY29uc3QgaCBvZiBkKWEudW5zaGlmdChXWChoKSl9ZWxzZSB2b2lkIDAh''@;'; put 'put ''PT1sJiZhLnB1c2goV1gobCkpO3JldHVybiBhfXN0YXRpYyBfJEVwKGwsYSl7Y29uc3QgZD1hLmF0dHJpYnV0ZTtyZXR1cm4hMT09PWQ/dm9pZCAwOiJzdHJpbmciPT10eXBlb2YgZD9kOiJzdHJpbmciPT10eXBlb2YgbD9sLnRvTG93ZXJDYXNlKCk6dm9pZCAwfXUoKXt2YXIgbDt0aGlzLl8k''@;'; put 'put ''RV89bmV3IFByb21pc2UoYT0+dGhpcy5lbmFibGVVcGRhdGluZz1hKSx0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLl8kRWcoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKSxudWxsPT09KGw9dGhpcy5jb25zdHJ1Y3Rvci5oKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9PmEodGhpcykpfWFkZENvbnRy''@;'; put 'put ''b2xsZXIobCl7dmFyIGEsZDsobnVsbCE9PShhPXRoaXMuXyRFUykmJnZvaWQgMCE9PWE/YTp0aGlzLl8kRVM9W10pLnB1c2gobCksdm9pZCAwIT09dGhpcy5yZW5kZXJSb290JiZ0aGlzLmlzQ29ubmVjdGVkJiYobnVsbD09PShkPWwuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PWR8fGQuY2Fs''@;'; put 'put ''bChsKSl9cmVtb3ZlQ29udHJvbGxlcihsKXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5zcGxpY2UodGhpcy5fJEVTLmluZGV4T2YobCk+Pj4wLDEpfV8kRWcoKXt0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKGwsYSk9Pnt0aGlz''@;'; put 'put ''Lmhhc093blByb3BlcnR5KGEpJiYodGhpcy5fJEVpLnNldChhLHRoaXNbYV0pLGRlbGV0ZSB0aGlzW2FdKX0pfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbDtjb25zdCBhPW51bGwhPT0obD10aGlzLnNoYWRvd1Jvb3QpJiZ2b2lkIDAhPT1sP2w6dGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25z''@;'; put 'put ''dHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7cmV0dXJuKChjLGwpPT57YUY/Yy5hZG9wdGVkU3R5bGVTaGVldHM9bC5tYXAoYT0+YSBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/YTphLnN0eWxlU2hlZXQpOmwuZm9yRWFjaChhPT57Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz''@;'; put 'put ''dHlsZSIpLGg9aEUubGl0Tm9uY2U7dm9pZCAwIT09aCYmZC5zZXRBdHRyaWJ1dGUoIm5vbmNlIixoKSxkLnRleHRDb250ZW50PWEuY3NzVGV4dCxjLmFwcGVuZENoaWxkKGQpfSl9KShhLHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksYX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBs''@;'; put 'put ''O3ZvaWQgMD09PXRoaXMucmVuZGVyUm9vdCYmKHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSksdGhpcy5lbmFibGVVcGRhdGluZyghMCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1h''@;'; put 'put ''Lmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1lbmFibGVVcGRhdGluZyhsKXt9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtudWxsPT09KGw9dGhpcy5fJEVTKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9Pnt2YXIgZDtyZXR1cm4gbnVsbD09PShk''@;'; put 'put ''PWEuaG9zdERpc2Nvbm5lY3RlZCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChhKX0pfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhsLGEsZCl7dGhpcy5fJEFLKGwsZCl9XyRFTyhsLGEsZD1oRil7dmFyIGg7Y29uc3QgZj10aGlzLmNvbnN0cnVjdG9yLl8kRXAobCxkKTtpZih2b2lkIDAh''@;'; put 'put ''PT1mJiYhMD09PWQucmVmbGVjdCl7Y29uc3QgXz0odm9pZCAwIT09KG51bGw9PT0oaD1kLmNvbnZlcnRlcil8fHZvaWQgMD09PWg/dm9pZCAwOmgudG9BdHRyaWJ1dGUpP2QuY29udmVydGVyOmRGKS50b0F0dHJpYnV0ZShhLGQudHlwZSk7dGhpcy5fJEVsPWwsbnVsbD09Xz90aGlzLnJlbW92''@;'; put 'put ''ZUF0dHJpYnV0ZShmKTp0aGlzLnNldEF0dHJpYnV0ZShmLF8pLHRoaXMuXyRFbD1udWxsfX1fJEFLKGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmNvbnN0cnVjdG9yLGY9aC5fJEV2LmdldChsKTtpZih2b2lkIDAhPT1mJiZ0aGlzLl8kRWwhPT1mKXtjb25zdCBfPWguZ2V0UHJvcGVydHlPcHRp''@;'; put 'put ''b25zKGYpLFQ9ImZ1bmN0aW9uIj09dHlwZW9mIF8uY29udmVydGVyP3tmcm9tQXR0cmlidXRlOl8uY29udmVydGVyfTp2b2lkIDAhPT0obnVsbD09PShkPV8uY29udmVydGVyKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5mcm9tQXR0cmlidXRlKT9fLmNvbnZlcnRlcjpkRjt0aGlzLl8kRWw9Zix0''@;'; put 'put ''aGlzW2ZdPVQuZnJvbUF0dHJpYnV0ZShhLF8udHlwZSksdGhpcy5fJEVsPW51bGx9fXJlcXVlc3RVcGRhdGUobCxhLGQpe2xldCBoPSEwO3ZvaWQgMCE9PWwmJigoKGQ9ZHx8dGhpcy5jb25zdHJ1Y3Rvci5nZXRQcm9wZXJ0eU9wdGlvbnMobCkpLmhhc0NoYW5nZWR8fHFYKSh0aGlzW2xdLGEp''@;'; put 'put ''Pyh0aGlzLl8kQUwuaGFzKGwpfHx0aGlzLl8kQUwuc2V0KGwsYSksITA9PT1kLnJlZmxlY3QmJnRoaXMuXyRFbCE9PWwmJih2b2lkIDA9PT10aGlzLl8kRUMmJih0aGlzLl8kRUM9bmV3IE1hcCksdGhpcy5fJEVDLnNldChsLGQpKSk6aD0hMSksIXRoaXMuaXNVcGRhdGVQZW5kaW5nJiZoJiYo''@;'; put 'put ''dGhpcy5fJEVfPXRoaXMuXyRFaigpKX1fJEVqKCl7dmFyIGw9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bC5pc1VwZGF0ZVBlbmRpbmc9ITA7dHJ5e3lpZWxkIGwuXyRFX31jYXRjaChkKXtQcm9taXNlLnJlamVjdChkKX1jb25zdCBhPWwuc2NoZWR1bGVVcGRhdGUoKTtyZXR1cm4gbnVs''@;'; put 'put ''bCE9YSYmKHlpZWxkIGEpLCFsLmlzVXBkYXRlUGVuZGluZ30pKCl9c2NoZWR1bGVVcGRhdGUoKXtyZXR1cm4gdGhpcy5wZXJmb3JtVXBkYXRlKCl9cGVyZm9ybVVwZGF0ZSgpe3ZhciBsO2lmKCF0aGlzLmlzVXBkYXRlUGVuZGluZylyZXR1cm47dGhpcy5fJEVpJiYodGhpcy5fJEVpLmZvckVh''@;'; put 'put ''Y2goKGgsZik9PnRoaXNbZl09aCksdGhpcy5fJEVpPXZvaWQgMCk7bGV0IGE9ITE7Y29uc3QgZD10aGlzLl8kQUw7dHJ5e2E9dGhpcy5zaG91bGRVcGRhdGUoZCksYT8odGhpcy53aWxsVXBkYXRlKGQpLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goaD0+e3Zh''@;'; put 'put ''ciBmO3JldHVybiBudWxsPT09KGY9aC5ob3N0VXBkYXRlKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5jYWxsKGgpfSksdGhpcy51cGRhdGUoZCkpOnRoaXMuXyRFaygpfWNhdGNoKGgpe3Rocm93IGE9ITEsdGhpcy5fJEVrKCksaH1hJiZ0aGlzLl8kQUUoZCl9d2lsbFVwZGF0ZShsKXt9XyRBRShs''@;'; put 'put ''KXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5mb3JFYWNoKGQ9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPWQuaG9zdFVwZGF0ZWQpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmNhbGwoZCl9KSx0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLmhhc1VwZGF0ZWQ9ITAsdGhp''@;'; put 'put ''cy5maXJzdFVwZGF0ZWQobCkpLHRoaXMudXBkYXRlZChsKX1fJEVrKCl7dGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITF9Z2V0IHVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuZ2V0VXBkYXRlQ29tcGxldGUoKX1nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLl8kRV99c2hvdWxkVXBkYXRlKGwpe3JldHVybiEwfXVwZGF0ZShsKXt2b2lkIDAhPT10aGlzLl8kRUMmJih0aGlzLl8kRUMuZm9yRWFjaCgoYSxkKT0+dGhpcy5fJEVPKGQsdGhpc1tkXSxhKSksdGhpcy5fJEVDPXZvaWQgMCksdGhpcy5fJEVrKCl9dXBkYXRlZChsKXt9Zmlyc3RVcGRh''@;'; put 'put ''dGVkKGwpe319dmFyIHBGO2c4W2ZGXT0hMCxnOC5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwLGc4LmVsZW1lbnRTdHlsZXM9W10sZzguc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifSwkWD8uKHtSZWFjdGl2ZUVsZW1lbnQ6Zzh9KSwobnVsbCE9PSh1Rj1mRS5yZWFjdGl2ZUVsZW1l''@;'; put 'put ''bnRWZXJzaW9ucykmJnZvaWQgMCE9PXVGP3VGOmZFLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMiIpO2NvbnN0IHBFPXdpbmRvdyxtOD1wRS50cnVzdGVkVHlwZXMsS1g9bTg/bTguY3JlYXRlUG9saWN5KCJsaXQtaHRtbCIse2NyZWF0ZUhUTUw6Yz0+Y30pOnZvaWQg''@;'; put 'put ''MCxnRT0iJGxpdCQiLFRmPWBsaXQkJHsoTWF0aC5yYW5kb20oKSsiIikuc2xpY2UoOSl9JGAsZ0Y9Ij8iK1RmLCQ2ZT1gPCR7Z0Z9PmAsajU9ZG9jdW1lbnQsZGI9KCk9Pmo1LmNyZWF0ZUNvbW1lbnQoIiIpLGhiPWM9Pm51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMmJiJmdW5jdGlvbiIh''@;'; put 'put ''PXR5cGVvZiBjLFhYPUFycmF5LmlzQXJyYXksbUY9IlsgXHRcblxmXHJdIixmYj0vPCg/OighLS18XC9bXmEtekEtWl0pfChcLz9bYS16QS1aXVtePlxzXSopfChcLz8kKSkvZyxRWD0vLS0+L2csZUo9Lz4vZyx6NT1SZWdFeHAoYD58JHttRn0oPzooW15cXHMiJz49L10rKSgke21GfSo9JHtt''@;'; put 'put ''Rn0qKD86W14gXHRcblxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsImciKSx0Sj0vJy9nLG5KPS8iL2cscko9L14oPzpzY3JpcHR8c3R5bGV8dGV4dGFyZWF8dGl0bGUpJC9pLGlKPWM9PihsLC4uLmEpPT4oe18kbGl0VHlwZSQ6YyxzdHJpbmdzOmwsdmFsdWVzOmF9KSx2Rj1pSigxKSxxNmU9''@;'; put 'put ''aUooMiksdjg9U3ltYm9sLmZvcigibGl0LW5vQ2hhbmdlIiksVGM9U3ltYm9sLmZvcigibGl0LW5vdGhpbmciKSxvSj1uZXcgV2Vha01hcCxVNT1qNS5jcmVhdGVUcmVlV2Fsa2VyKGo1LDEyOSxudWxsLCExKTtmdW5jdGlvbiBzSihjLGwpe2lmKCFBcnJheS5pc0FycmF5KGMpfHwhYy5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eSgicmF3IikpdGhyb3cgRXJyb3IoImludmFsaWQgdGVtcGxhdGUgc3RyaW5ncyBhcnJheSIpO3JldHVybiB2b2lkIDAhPT1LWD9LWC5jcmVhdGVIVE1MKGwpOmx9Y2xhc3MgcGJ7Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFy''@;'; put 'put ''dHM9W107bGV0IGY9MCxfPTA7Y29uc3QgVD1sLmxlbmd0aC0xLFc9dGhpcy5wYXJ0cyxbaWUsZ2VdPSgoYyxsKT0+e2NvbnN0IGE9Yy5sZW5ndGgtMSxkPVtdO2xldCBoLGY9Mj09PWw/Ijxzdmc+IjoiIixfPWZiO2ZvcihsZXQgVD0wO1Q8YTtUKyspe2NvbnN0IFc9Y1tUXTtsZXQgaWUsZ2Us''@;'; put 'put ''d2U9LTEsRWU9MDtmb3IoO0VlPFcubGVuZ3RoJiYoXy5sYXN0SW5kZXg9RWUsZ2U9Xy5leGVjKFcpLG51bGwhPT1nZSk7KUVlPV8ubGFzdEluZGV4LF89PT1mYj8iIS0tIj09PWdlWzFdP189UVg6dm9pZCAwIT09Z2VbMV0/Xz1lSjp2b2lkIDAhPT1nZVsyXT8ockoudGVzdChnZVsyXSkmJiho''@;'; put 'put ''PVJlZ0V4cCgiPC8iK2dlWzJdLCJnIikpLF89ejUpOnZvaWQgMCE9PWdlWzNdJiYoXz16NSk6Xz09PXo1PyI+Ij09PWdlWzBdPyhfPWg/P2ZiLHdlPS0xKTp2b2lkIDA9PT1nZVsxXT93ZT0tMjood2U9Xy5sYXN0SW5kZXgtZ2VbMl0ubGVuZ3RoLGllPWdlWzFdLF89dm9pZCAwPT09Z2VbM10/''@;'; put 'put ''ejU6JyInPT09Z2VbM10/bko6dEopOl89PT1uSnx8Xz09PXRKP189ejU6Xz09PVFYfHxfPT09ZUo/Xz1mYjooXz16NSxoPXZvaWQgMCk7Y29uc3QgWmU9Xz09PXo1JiZjW1QrMV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9Xz09PWZiP1crJDZlOndlPj0wPyhkLnB1c2goaWUpLFcuc2xp''@;'; put 'put ''Y2UoMCx3ZSkrZ0UrVy5zbGljZSh3ZSkrVGYrWmUpOlcrVGYrKC0yPT09d2U/KGQucHVzaCh2b2lkIDApLFQpOlplKX1yZXR1cm5bc0ooYyxmKyhjW2FdfHwiPD8+IikrKDI9PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9cGIuY3JlYXRlRWxlbWVudChpZSxkKSxVNS5j''@;'; put 'put ''dXJyZW50Tm9kZT10aGlzLmVsLmNvbnRlbnQsMj09PWEpe2NvbnN0IHdlPXRoaXMuZWwuY29udGVudCxFZT13ZS5maXJzdENoaWxkO0VlLnJlbW92ZSgpLHdlLmFwcGVuZCguLi5FZS5jaGlsZE5vZGVzKX1mb3IoO251bGwhPT0oaD1VNS5uZXh0Tm9kZSgpKSYmVy5sZW5ndGg8VDspe2lmKDE9''@;'; put 'put ''PT1oLm5vZGVUeXBlKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7Y29uc3Qgd2U9W107Zm9yKGNvbnN0IEVlIG9mIGguZ2V0QXR0cmlidXRlTmFtZXMoKSlpZihFZS5lbmRzV2l0aChnRSl8fEVlLnN0YXJ0c1dpdGgoVGYpKXtjb25zdCBaZT1nZVtfKytdO2lmKHdlLnB1c2goRWUpLHZvaWQgMCE9''@;'; put 'put ''PVplKXtjb25zdCBvdD1oLmdldEF0dHJpYnV0ZShaZS50b0xvd2VyQ2FzZSgpK2dFKS5zcGxpdChUZiksZXQ9LyhbLj9AXSk/KC4qKS8uZXhlYyhaZSk7Vy5wdXNoKHt0eXBlOjEsaW5kZXg6ZixuYW1lOmV0WzJdLHN0cmluZ3M6b3QsY3RvcjoiLiI9PT1ldFsxXT9jSjoiPyI9PT1ldFsxXT91''@;'; put 'put ''SjoiQCI9PT1ldFsxXT9kSjpnYn0pfWVsc2UgVy5wdXNoKHt0eXBlOjYsaW5kZXg6Zn0pfWZvcihjb25zdCBFZSBvZiB3ZSloLnJlbW92ZUF0dHJpYnV0ZShFZSl9aWYockoudGVzdChoLnRhZ05hbWUpKXtjb25zdCB3ZT1oLnRleHRDb250ZW50LnNwbGl0KFRmKSxFZT13ZS5sZW5ndGgtMTtp''@;'; put 'put ''ZihFZT4wKXtoLnRleHRDb250ZW50PW04P204LmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgWmU9MDtaZTxFZTtaZSsrKWguYXBwZW5kKHdlW1plXSxkYigpKSxVNS5uZXh0Tm9kZSgpLFcucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKHdlW0VlXSxkYigpKX19fWVsc2UgaWYoOD09''@;'; put 'put ''PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09Z0YpVy5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IHdlPS0xO2Zvcig7LTEhPT0od2U9aC5kYXRhLmluZGV4T2YoVGYsd2UrMSkpOylXLnB1c2goe3R5cGU6NyxpbmRleDpmfSksd2UrPVRmLmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0''@;'; put 'put ''ZUVsZW1lbnQobCxhKXtjb25zdCBkPWo1LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gWjUoYyxsLGE9YyxkKXt2YXIgaCxmLF8sVDtpZihsPT09djgpcmV0dXJuIGw7bGV0IFc9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8''@;'; put 'put ''dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgaWU9aGIobCk/dm9pZCAwOmwuXyRsaXREaXJlY3RpdmUkO3JldHVybiBXPy5jb25zdHJ1Y3RvciE9PWllJiYobnVsbD09PShmPVc/Ll8kQU8pfHx2b2lkIDA9PT1mfHxmLmNhbGwoVywhMSksdm9pZCAwPT09aWU/Vz12b2lkIDA6''@;'; put 'put ''KFc9bmV3IGllKGMpLFcuXyRBVChjLGEsZCkpLHZvaWQgMCE9PWQ/KG51bGwhPT0oXz0oVD1hKS5fJENvKSYmdm9pZCAwIT09Xz9fOlQuXyRDbz1bXSlbZF09VzphLl8kQ2w9Vyksdm9pZCAwIT09VyYmKGw9WjUoYyxXLl8kQVMoYyxsLnZhbHVlcyksVyxkKSksbH1jbGFzcyBsSntjb25zdHJ1''@;'; put 'put ''Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2Nv''@;'; put 'put ''bnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOmo1KS5pbXBvcnROb2RlKGQsITApO1U1LmN1cnJlbnROb2RlPWY7bGV0IF89VTUubmV4dE5vZGUoKSxUPTAsVz0wLGllPWhbMF07Zm9yKDt2b2lkIDAhPT1pZTsp''@;'; put 'put ''e2lmKFQ9PT1pZS5pbmRleCl7bGV0IGdlOzI9PT1pZS50eXBlP2dlPW5ldyBfOChfLF8ubmV4dFNpYmxpbmcsdGhpcyxsKToxPT09aWUudHlwZT9nZT1uZXcgaWUuY3RvcihfLGllLm5hbWUsaWUuc3RyaW5ncyx0aGlzLGwpOjY9PT1pZS50eXBlJiYoZ2U9bmV3IGhKKF8sdGhpcyxsKSksdGhp''@;'; put 'put ''cy5fJEFWLnB1c2goZ2UpLGllPWhbKytXXX1UIT09aWU/LmluZGV4JiYoXz1VNS5uZXh0Tm9kZSgpLFQrKyl9cmV0dXJuIFU1LmN1cnJlbnROb2RlPWo1LGZ9dihsKXtsZXQgYT0wO2Zvcihjb25zdCBkIG9mIHRoaXMuXyRBVil2b2lkIDAhPT1kJiYodm9pZCAwIT09ZC5zdHJpbmdzPyhkLl8k''@;'; put 'put ''QUkobCxkLGEpLGErPWQuc3RyaW5ncy5sZW5ndGgtMik6ZC5fJEFJKGxbYV0pKSxhKyt9fWNsYXNzIF84e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3ZhciBmO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1UYyx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBQT1sLHRoaXMuXyRBQj1hLHRoaXMuXyRBTT1k''@;'; put 'put ''LHRoaXMub3B0aW9ucz1oLHRoaXMuXyRDcD1udWxsPT09KGY9aD8uaXNDb25uZWN0ZWQpfHx2b2lkIDA9PT1mfHxmfWdldCBfJEFVKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0obD10aGlzLl8kQU0pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLl8kQVUpJiZ2b2lkIDAhPT1hP2E6''@;'; put 'put ''dGhpcy5fJENwfWdldCBwYXJlbnROb2RlKCl7bGV0IGw9dGhpcy5fJEFBLnBhcmVudE5vZGU7Y29uc3QgYT10aGlzLl8kQU07cmV0dXJuIHZvaWQgMCE9PWEmJjExPT09bD8ubm9kZVR5cGUmJihsPWEucGFyZW50Tm9kZSksbH1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQg''@;'; put 'put ''ZW5kTm9kZSgpe3JldHVybiB0aGlzLl8kQUJ9XyRBSShsLGE9dGhpcyl7bD1aNSh0aGlzLGwsYSksaGIobCk/bD09PVRjfHxudWxsPT1sfHwiIj09PWw/KHRoaXMuXyRBSCE9PVRjJiZ0aGlzLl8kQVIoKSx0aGlzLl8kQUg9VGMpOmwhPT10aGlzLl8kQUgmJmwhPT12OCYmdGhpcy5fKGwpOnZv''@;'; put 'put ''aWQgMCE9PWwuXyRsaXRUeXBlJD90aGlzLmcobCk6dm9pZCAwIT09bC5ub2RlVHlwZT90aGlzLiQobCk6KGM9PlhYKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRvcl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5v''@;'; put 'put ''ZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PVRjJiZoYih0aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKGo1LmNyZWF0ZVRl''@;'; put 'put ''eHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09PWguZWwmJihoLmVsPXBiLmNyZWF0ZUVsZW1lbnQoc0ooaC5oLGguaFswXSksdGhpcy5vcHRpb25z''@;'; put 'put ''KSksaCk7aWYoKG51bGw9PT0oYT10aGlzLl8kQUgpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLl8kQUQpPT09Zil0aGlzLl8kQUgudihkKTtlbHNle2NvbnN0IF89bmV3IGxKKGYsdGhpcyksVD1fLnUodGhpcy5vcHRpb25zKTtfLnYoZCksdGhpcy4kKFQpLHRoaXMuXyRBSD1ffX1fJEFDKGwpe2xl''@;'; put 'put ''dCBhPW9KLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZvSi5zZXQobC5zdHJpbmdzLGE9bmV3IHBiKGwpKSxhfVQobCl7WFgodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1bXSx0aGlzLl8kQVIoKSk7Y29uc3QgYT10aGlzLl8kQUg7bGV0IGQsaD0wO2Zvcihjb25zdCBmIG9mIGwp''@;'; put 'put ''aD09PWEubGVuZ3RoP2EucHVzaChkPW5ldyBfOCh0aGlzLmsoZGIoKSksdGhpcy5rKGRiKCkpLHRoaXMsdGhpcy5vcHRpb25zKSk6ZD1hW2hdLGQuXyRBSShmKSxoKys7aDxhLmxlbmd0aCYmKHRoaXMuXyRBUihkJiZkLl8kQUIubmV4dFNpYmxpbmcsaCksYS5sZW5ndGg9aCl9XyRBUihsPXRo''@;'; put 'put ''aXMuXyRBQS5uZXh0U2libGluZyxhKXt2YXIgZDtmb3IobnVsbD09PShkPXRoaXMuXyRBUCl8fHZvaWQgMD09PWR8fGQuY2FsbCh0aGlzLCExLCEwLGEpO2wmJmwhPT10aGlzLl8kQUI7KXtjb25zdCBoPWwubmV4dFNpYmxpbmc7bC5yZW1vdmUoKSxsPWh9fXNldENvbm5lY3RlZChsKXt2YXIg''@;'; put 'put ''YTt2b2lkIDA9PT10aGlzLl8kQU0mJih0aGlzLl8kQ3A9bCxudWxsPT09KGE9dGhpcy5fJEFQKXx8dm9pZCAwPT09YXx8YS5jYWxsKHRoaXMsbCkpfX1jbGFzcyBnYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1UYyx0aGlzLl8kQU49dm9pZCAwLHRoaXMu''@;'; put 'put ''ZWxlbWVudD1sLHRoaXMubmFtZT1hLHRoaXMuXyRBTT1oLHRoaXMub3B0aW9ucz1mLGQubGVuZ3RoPjJ8fCIiIT09ZFswXXx8IiIhPT1kWzFdPyh0aGlzLl8kQUg9QXJyYXkoZC5sZW5ndGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9ZCk6dGhpcy5fJEFIPVRjfWdldCB0YWdO''@;'; put 'put ''YW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVudC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkobCxhPXRoaXMsZCxoKXtjb25zdCBmPXRoaXMuc3RyaW5ncztsZXQgXz0hMTtpZih2b2lkIDA9PT1mKWw9WjUodGhpcyxsLGEsMCksXz0haGIobCl8fGwhPT10aGlz''@;'; put 'put ''Ll8kQUgmJmwhPT12OCxfJiYodGhpcy5fJEFIPWwpO2Vsc2V7Y29uc3QgVD1sO2xldCBXLGllO2ZvcihsPWZbMF0sVz0wO1c8Zi5sZW5ndGgtMTtXKyspaWU9WjUodGhpcyxUW2QrV10sYSxXKSxpZT09PXY4JiYoaWU9dGhpcy5fJEFIW1ddKSxffHwoXz0haGIoaWUpfHxpZSE9PXRoaXMuXyRB''@;'; put 'put ''SFtXXSksaWU9PT1UYz9sPVRjOmwhPT1UYyYmKGwrPShpZT8/IiIpK2ZbVysxXSksdGhpcy5fJEFIW1ddPWllfV8mJiFoJiZ0aGlzLmoobCl9aihsKXtsPT09VGM/dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5u''@;'; put 'put ''YW1lLGw/PyIiKX19Y2xhc3MgY0ogZXh0ZW5kcyBnYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09VGM/dm9pZCAwOmx9fWNvbnN0IEs2ZT1tOD9tOC5lbXB0eVNjcmlwdDoiIjtjbGFzcyB1SiBl''@;'; put 'put ''eHRlbmRzIGdie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9NH1qKGwpe2wmJmwhPT1UYz90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSxLNmUpOnRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKX19Y2xhc3MgZEogZXh0''@;'; put 'put ''ZW5kcyBnYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGwsYSxkLGgsZiksdGhpcy50eXBlPTV9XyRBSShsLGE9dGhpcyl7dmFyIGQ7aWYoKGw9bnVsbCE9PShkPVo1KHRoaXMsbCxhLDApKSYmdm9pZCAwIT09ZD9kOlRjKT09PXY4KXJldHVybjtjb25zdCBoPXRoaXMuXyRBSCxmPWw9''@;'; put 'put ''PT1UYyYmaCE9PVRjfHxsLmNhcHR1cmUhPT1oLmNhcHR1cmV8fGwub25jZSE9PWgub25jZXx8bC5wYXNzaXZlIT09aC5wYXNzaXZlLF89bCE9PVRjJiYoaD09PVRjfHxmKTtmJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxoKSxfJiZ0aGlzLmVsZW1l''@;'; put 'put ''bnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxsKSx0aGlzLl8kQUg9bH1oYW5kbGVFdmVudChsKXt2YXIgYSxkOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl8kQUg/dGhpcy5fJEFILmNhbGwobnVsbCE9PShkPW51bGw9PT0oYT10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT1hP3Zv''@;'; put 'put ''aWQgMDphLmhvc3QpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5lbGVtZW50LGwpOnRoaXMuXyRBSC5oYW5kbGVFdmVudChsKX19Y2xhc3MgaEp7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVudD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25z''@;'; put 'put ''PWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXtaNSh0aGlzLGwpfX1jb25zdCBmSj1wRS5saXRIdG1sUG9seWZpbGxTdXBwb3J0O2ZKPy4ocGIsXzgpLChudWxsIT09KHBGPXBFLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PXBGP3BGOnBFLmxpdEh0bWxWZXJz''@;'; put 'put ''aW9ucz1bXSkucHVzaCgiMi43LjUiKTtjb25zdCBwSj0oYyxsLGEpPT57dmFyIGQsaDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgXz1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09Xyl7Y29uc3QgVD1udWxsIT09KGg9YT8ucmVuZGVyQmVm''@;'; put 'put ''b3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPV89bmV3IF84KGwuaW5zZXJ0QmVmb3JlKGRiKCksVCksVCx2b2lkIDAsYT8/e30pfXJldHVybiBfLl8kQUkoYyksX307dmFyIF9GLGJGO2NsYXNzIGI4IGV4dGVuZHMgZzh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVu''@;'; put 'put ''dHMpLHRoaXMucmVuZGVyT3B0aW9ucz17aG9zdDp0aGlzfSx0aGlzLl8kRG89dm9pZCAwfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbCxhO2NvbnN0IGQ9c3VwZXIuY3JlYXRlUmVuZGVyUm9vdCgpO3JldHVybiBudWxsIT09KGw9KGE9dGhpcy5yZW5kZXJPcHRpb25zKS5yZW5kZXJCZWZvcmUp''@;'; put 'put ''JiZ2b2lkIDAhPT1sfHwoYS5yZW5kZXJCZWZvcmU9ZC5maXJzdENoaWxkKSxkfXVwZGF0ZShsKXtjb25zdCBhPXRoaXMucmVuZGVyKCk7dGhpcy5oYXNVcGRhdGVkfHwodGhpcy5yZW5kZXJPcHRpb25zLmlzQ29ubmVjdGVkPXRoaXMuaXNDb25uZWN0ZWQpLHN1cGVyLnVwZGF0ZShsKSx0aGlz''@;'; put 'put ''Ll8kRG89cEooYSx0aGlzLnJlbmRlclJvb3QsdGhpcy5yZW5kZXJPcHRpb25zKX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBsO3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCEwKX1kaXNjb25uZWN0ZWRD''@;'; put 'put ''YWxsYmFjaygpe3ZhciBsO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCExKX1yZW5kZXIoKXtyZXR1cm4gdjh9fWI4LmZpbmFsaXplZD0hMCxiOC5fJGxpdEVsZW1lbnQkPSEwLG51bGw9PT0oX0Y9''@;'; put 'put ''Z2xvYmFsVGhpcy5saXRFbGVtZW50SHlkcmF0ZVN1cHBvcnQpfHx2b2lkIDA9PT1fRnx8X0YuY2FsbChnbG9iYWxUaGlzLHtMaXRFbGVtZW50OmI4fSk7Y29uc3QgZ0o9Z2xvYmFsVGhpcy5saXRFbGVtZW50UG9seWZpbGxTdXBwb3J0O2dKPy4oe0xpdEVsZW1lbnQ6Yjh9KSwobnVsbCE9PShi''@;'; put 'put ''Rj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PWJGP2JGOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMiIpO2NvbnN0IG1KPWNGYEBjaGFyc2V0ICJVVEYtOCI7Omhvc3QsOnJvb3R7LS3OtDI6dmFyKC0tY2RzLWdsb2JhbC1sYXlv''@;'; put 'put ''dXQtc3BhY2UteHhzLCBjYWxjKDQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Mzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14cywgY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1sYXlvdXQtc3BhY2Utc20sIGNhbGMoMTIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCwgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ2OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnLCBjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDc6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteGwsIGNhbGMoMzIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKX1bY2RzLWxh''@;'; put 'put ''eW91dH49IndyYXA6bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0''@;'; put 'put ''cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXth''@;'; put 'put ''bGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0''@;'; put 'put ''OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2Fs''@;'; put 'put ''aWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2Fs''@;'; put 'put ''aWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''PltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PWdyaWRde2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpzdGFydDthbGlnbi1j''@;'; put 'put ''b250ZW50OnN0YXJ0O2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQodmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzLDEyKSwxZnIpO3dpZHRoOjEwMCV9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPXJvd3Nde2dyaWQtdGVtcGxhdGUtcm93czpyZXBlYXQoMTIsYXV0''@;'; put 'put ''byl9W2Nkcy1sYXlvdXR+PWdyaWRdPltjZHMtbGF5b3V0Kj1yb3dde2FsaWduLXNlbGY6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdo''@;'; put 'put ''dCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpz''@;'; put 'put ''dHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRj''@;'; put 'put ''aH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1p''@;'; put 'put ''dGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVy''@;'; put 'put ''fTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmlu''@;'; put 'put ''c2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9''@;'; put 'put ''ImdhcDp4eHMiXXtnYXA6dmFyKC0tzrQyKX1bY2RzLWxheW91dCo9ImdhcDp4cyJde2dhcDp2YXIoLS3OtDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLc60NCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tzrQ1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dh''@;'; put 'put ''cDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhzIl17cGFkZGluZzp2YXIoLS3OtDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icDpzbSJde3BhZGRpbmc6dmFyKC0tzrQ0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tzrQ1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFk''@;'; put 'put ''ZGluZzp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLc60MykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLc60Nikh''@;'; put 'put ''aW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS3OtDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRp''@;'; put 'put ''bmctbGVmdDp2YXIoLS3OtDUpIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bGciXXtnYXA6dmFyKC0tzrQ2KX1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBt''@;'; put 'put ''ZDp4bCJde21hcmdpbjp2YXIoLS3OtDcpIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpv''@;'; put 'put ''bnRhbC1zdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPjo6c2xvdHRlZCgqKSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCope2ZsZXgt''@;'; put 'put ''Z3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4t''@;'; put 'put ''Ym90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRl''@;'; put 'put ''cn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe21hcmdpbi10b3A6''@;'; put 'put ''YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJdKSxbY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7bWFyZ2luLWJvdHRv''@;'; put 'put ''bTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6''@;'; put 'put ''cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRl''@;'; put 'put ''ZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6''@;'; put 'put ''OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRp''@;'; put 'put ''YSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXttYXJn''@;'; put 'put ''aW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1j''@;'; put 'put ''ZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQG1kOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNs''@;'; put 'put ''b3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21h''@;'; put 'put ''cmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0''@;'; put 'put ''ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChb''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZl''@;'; put 'put ''cnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319W2Nkcy1sYXlvdXR+PWhv''@;'; put 'put ''cml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe2FsaWduLXNl''@;'; put 'put ''bGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0p''@;'; put 'put ''e21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl0pe2FsaWduLXNlbGY6''@;'; put 'put ''ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il0p''@;'; put 'put ''e21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpv''@;'; put 'put ''bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmln''@;'; put 'put ''aHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJv''@;'; put 'put ''dHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkBtZDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDox''@;'; put 'put ''MjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNl''@;'; put 'put ''bnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDph''@;'; put 'put ''dXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChb''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpv''@;'; put 'put ''bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRl''@;'; put 'put ''ciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIi''@;'; put 'put ''XSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9y''@;'; put 'put ''dGFudH19W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49''@;'; put 'put ''Z3JpZF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOjpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1zZWN0aW9uXSxbY2RzLXRleHQqPXN1YnNlY3Rpb25dLFtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtZmFtaWx5OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkw''@;'; put 'put ''MCwjMjEzMzNiKSl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2RzLXRleHQqPW1lc3NhZ2VdLFtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2ssIzAwMCkpfVtjZHMtdGV4dCo9aW5s''@;'; put 'put ''aW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplLGNhbGMoNDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pO2xldHRlci1zcGFjaW5nOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPWRpc3BsYXldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNw''@;'; put 'put ''bGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQsNDAwKTtsaW5lLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcsLS4wMDgzMzNlbSl9W2Nkcy10ZXh0Kj10aXRsZV06OmJlZm9yZXtjb250ZW50OiIiO2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2Vt''@;'; put 'put ''KSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4x''@;'; put 'put ''NDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwx''@;'; put 'put ''LjE2NjY3ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplLGNhbGMoMjAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWN0aW9uLWxldHRlci1zcGFjaW5nLC0uMDFlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdo''@;'; put 'put ''dCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0''@;'; put 'put ''aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LXN1YnNlY3Rpb24tZm9udC1zaXplLGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS4yNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7''@;'; put 'put ''ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEu''@;'; put 'put ''MjVlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAt''@;'; put 'put ''aGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9u''@;'; put 'put ''LWxpbmUtaGVpZ2h0LDEuMjVlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0LDQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1i''@;'; put 'put ''b2R5LWZvbnQtc2l6ZSxjYWxjKDE0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZywtLjAxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pfVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWln''@;'; put 'put ''aHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4xZW0pfVtjZHMtdGV4dCo9Ym9keV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDow''@;'; put 'put ''O21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgt''@;'; put 'put ''aGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQsMS40Mjg1N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2Nv''@;'; put 'put ''bnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuMjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5''@;'; put 'put ''OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnld''@;'; put 'put ''OjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29u''@;'; put 'put ''ZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwj''@;'; put 'put ''MDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29s''@;'; put 'put ''b3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xv''@;'; put 'put ''ci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1m''@;'; put 'put ''YW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxLjFlbX1bY2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO292ZXJmbG93OmhpZGRl''@;'; put 'put ''bjtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwjY2JkNGQ4KSkgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgaW5zZXR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0LDMwMCkhaW1wb3J0YW50fVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9y''@;'; put 'put ''dGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PWxoZV17cGFkZGluZzou''@;'; put 'put ''MDVweCAwfVtjZHMtdGV4dH49bGhlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOjphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtj''@;'; put 'put ''ZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OjIwMDtj''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJv''@;'; put 'put ''dHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgyXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dp''@;'; put 'put ''ZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTo6YmVmb3Jl''@;'; put 'put ''e2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10''@;'; put 'put ''ZXh0Kj1oM106OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''YXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX06aG9zdHthbGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6aW5oZXJp''@;'; put 'put ''dDtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb250YWluOmxheW91dDtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpu''@;'; put 'put ''b25lIWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9c2xvdHtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtkaXNw''@;'; put 'put ''bGF5OmNvbnRlbnRzIWltcG9ydGFudH06OnNsb3R0ZWQoKil7Zm9udC1mYW1pbHk6aW5oZXJpdDtib3gtc2l6aW5nOmluaGVyaXR9OjpzbG90dGVkKCopOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwLHZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItY29uc3RydWN0aW9uLTYwMCwjNGY2MTY5KSl9Omhvc3QoW19pcy1hbmNob3JdKSw6aG9zdChbcm9sZT1idXR0b25dKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRhbnR9Omhvc3QoW19pcy1hbmNob3JdKSA6OnNsb3R0ZWQoKiksOmhvc3QoW3JvbGU9YnV0dG9uXSkgOjpzbG90dGVkKCope2N1''@;'; put 'put ''cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSkgOjpzbG90dGVkKCope2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnQ7cG9pbnRlci1l''@;'; put 'put ''dmVudHM6bm9uZX06aG9zdChbaGlkZGVuXSksW2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdChbaGlkZGVuKj1mYWxzZV0pe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSA6''@;'; put 'put ''OnNsb3R0ZWQoKil7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pLDpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pIDo6c2xvdHRlZCgqKXt2aXNpYmlsaXR5OnZpc2li''@;'; put 'put ''bGUhaW1wb3J0YW50fTpob3N0KFtfZm9jdXNlZF0pIC5pbnB1dCw6aG9zdChbX2ZvY3VzZWRdKSBbZm9jdXNhYmxlXSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cyksOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9jdXMpIFtmb2N1c2FibGVdLFt0YWJpbmRleD0iMCJdW2ZvY3VzYWJsZV06Zm9j''@;'; put 'put ''dXN7b3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4O291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1gO2Z1bmN0aW9uIHlGKGMpe3JldHVy''@;'; put 'put ''bmBjYWxjKCgke2N9IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiAxcmVtKWB9Y29uc3QgdDhlPShjLGwpPT4ibWV0aG9kIj09PWwua2luZCYmbC5kZXNjcmlwdG9yJiYhKCJ2YWx1ZSJpbiBsLmRlc2NyaXB0b3IpP3suLi5sLGZpbmlzaGVyKGEpe2EuY3JlYXRlUHJvcGVydHkobC5rZXks''@;'; put 'put ''Yyl9fTp7a2luZDoiZmllbGQiLGtleTpTeW1ib2woKSxwbGFjZW1lbnQ6Im93biIsZGVzY3JpcHRvcjp7fSxvcmlnaW5hbEtleTpsLmtleSxpbml0aWFsaXplcigpeyJmdW5jdGlvbiI9PXR5cGVvZiBsLmluaXRpYWxpemVyJiYodGhpc1tsLmtleV09bC5pbml0aWFsaXplci5jYWxsKHRoaXMp''@;'; put 'put ''KX0sZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19LG44ZT0oYyxsLGEpPT57bC5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShhLGMpfTtmdW5jdGlvbiB2SihjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT9uOGUoYyxsLGEpOnQ4ZShjLGwpfWZ1bmN0aW9uIF9KKGMs''@;'; put 'put ''bCl7c3dpdGNoKGwmJmwudHlwZSl7Y2FzZSBBcnJheTpjYXNlIE9iamVjdDpyZXR1cm57cmVmbGVjdDohMSwuLi5sfTtjYXNlIFN0cmluZzpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6RjUoYyksY29udmVydGVyOnt0b0F0dHJpYnV0ZTphPT5hfHxudWxsfSwuLi5sfTtjYXNlIE51bWJl''@;'; put 'put ''cjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6RjUoYyksLi4ubH07Y2FzZSBCb29sZWFuOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpGNShjKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOmE9PmE/IiI6bnVsbCxmcm9tQXR0cmlidXRlOmE9PmZ1bmN0aW9uIHo2ZShjKXtyZXR1cm4g''@;'; put 'put ''bnVsbCE9YyYmIiIrYyE9ImZhbHNlIn0oYSl9LC4uLmx9O2Nhc2UgRGF0ZTpyZXR1cm57cmVmbGVjdDohMSxjb252ZXJ0ZXI6e2Zyb21BdHRyaWJ1dGU6YT0+bmV3IERhdGUoYSl9LC4uLmx9O2RlZmF1bHQ6cmV0dXJuey4uLmx9fX1mdW5jdGlvbiBrbChjKXtyZXR1cm4obCxhKT0+KGM/LnJl''@;'; put 'put ''cXVpcmVkJiZmdW5jdGlvbiByOGUoYyxsLGEpe2NvbnN0IGQ9Yy5maXJzdFVwZGF0ZWQ7Yy5maXJzdFVwZGF0ZWQ9ZnVuY3Rpb24oaCl7aWYoYSYmYS5yZXF1aXJlZCYmX3AodGhpc1tsXSkpe2NvbnN0IGY9YS5yZXF1aXJlZE1lc3NhZ2V8fGZ1bmN0aW9uKF89Indhcm5pbmciLFQsVyl7Y29u''@;'; put 'put ''c3QgaWU9Vy50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybmAke3dLKF8pfTogJHtUfSBpcyByZXF1aXJlZCB0byB1c2UgJHtpZX0gY29tcG9uZW50LiBTZXQgdGhlIEpTIFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyhtSygpP2BBbmd1bGFyOiA8JHtpZX0gWyR7VH1dPSIuLi4i''@;'; put 'put ''PjwvJHtpZX0+XG5gOiIiKSsoX0soKT9gVnVlOiA8JHtpZX0gOiR7VH09Ii4uLiI+PC8ke2llfT5cbmA6IiIpKyh2SygpP2BSZWFjdDogPCR7ZnVuY3Rpb24gWWdlKGMpe3JldHVybiB3SyhmdW5jdGlvbiBaZ2UoYyl7cmV0dXJuIGMuc3BsaXQoIi0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQo''@;'; put 'put ''MCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oaWUpfSAke2dlPVQsZ2Uuc3RhcnRzV2l0aCgiYXJpYSIpP0Y1KGdlKTpnZX09ey4uLn0gLz5cbmA6IiIpK2BIVE1MOiA8JHtpZX0gJHtGNShUKX09Ii4uLiI+PC8ke2llfT5cbkphdmFT''@;'; put 'put ''Y3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyR7aWV9JykuJHtUfSA9ICcuLi4nO1xuXG5gO3ZhciBnZX0oYS5yZXF1aXJlZCxsLHRoaXMudGFnTmFtZSk7aWYoImVycm9yIj09PWEucmVxdWlyZWQpdGhyb3cgRXJyb3IoZik7SDUud2FybihmLHRoaXMpfWQmJmQuY2FsbCh0aGlzLGgp''@;'; put 'put ''fX0obCxhLGMpLHZKKF9KKGEsYykpKGwsYSkpfWZ1bmN0aW9uIGJKKGMpe3JldHVybihsLGEpPT57Y29uc3QgZD1fSihhLGMpO3JldHVybiBkJiYoZC5yZWZsZWN0PSEhYz8ucmVmbGVjdCYmYy5yZWZsZWN0LGQucmVmbGVjdCYmIWM/LmF0dHJpYnV0ZSYmKGQuYXR0cmlidXRlPSJfIitGNShh''@;'; put 'put ''KSkpLHZKKGQpKGwsYSl9fXZhciBjaCxzOGU9Y0ZgQGtleWZyYW1lcyBmYWRlSW5BbmRPdXR7MCUsdG97b3BhY2l0eTowfTc1JXtvcGFjaXR5OjF9fTpob3N0ey0tY29sb3I6Y3VycmVudENvbG9yO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcs''@;'; put 'put ''Y2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYg''@;'; put 'put ''KiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZpbGw6dmFyKC0tY29sb3Ip''@;'; put 'put ''O2NvbG9yOnZhcigtLWNvbG9yKTtjb250YWluOnN0cmljdDtjdXJzb3I6aW5oZXJpdH1zdmd7ZGlzcGxheTpibG9ja306aG9zdChbc2l6ZSo9eHNdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lk''@;'; put 'put ''dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXNtXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9bWRdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1sZ10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp''@;'; put 'put ''O3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13''@;'; put 'put ''aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14bF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''LDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp''@;'; put 'put ''O21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14eGxdKXtoZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpfTpob3N0KFtzaXplKj1maXRdKXtoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO2NvbnRhaW46bGF5b3V0fTpob3N0KFtzdGF0dXM9c3VjY2Vzc10pey0tY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtzdGF0dXM9ZGFuZ2VyXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAy''@;'; put 'put ''MjAwKSl9Omhvc3QoW3N0YXR1cz13YXJuaW5nXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbc3RhdHVzPWluZm9dKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtzdGF0dXM9bmV1dHJhbF0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYx''@;'; put 'put ''NjkpKX06aG9zdChbaW52ZXJzZV0pey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCAjY2JkNGQ4KX06aG9zdChbZGlyZWN0aW9uPXVwXSl7dHJhbnNmb3JtOnJvdGF0ZSgwKX06aG9zdChbZGlyZWN0aW9uPWRvd25dKXt0cmFuc2Zvcm06cm90YXRlKDE4''@;'; put 'put ''MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1yaWdodF0pe3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTpob3N0KFtkaXJlY3Rpb249bGVmdF0pe3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX06aG9zdChbZmxpcD1ob3Jpem9udGFsXSl7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9''@;'; put 'put ''Omhvc3QoW2ZsaXA9dmVydGljYWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX0uYWxlcnQsLmJhZGdle2ZpbGw6dmFyKC0tYmFkZ2UtY29sb3IsdmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCNlMDIyMDAp''@;'; put 'put ''KSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2U9ZGFuZ2VyXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04''@;'; put 'put ''MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2U9aW5oZXJpdF0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5''@;'; put 'put ''YWQpKX06aG9zdChbYmFkZ2U9bmV1dHJhbF0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06aG9zdChbYmFkZ2U9aW5oZXJpdC10cmlhbmdsZV0pey0tYmFkZ2Ut''@;'; put 'put ''Y29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZV1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtiYWRnZT1zdWNjZXNzXVtpbnZlcnNlXSl7LS1i''@;'; put 'put ''YWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmct''@;'; put 'put ''ZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2UqPWluaGVyaXRdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2U9aW5mb11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9LmNkcy1pbnRlcm5hbC1kb3QtMXthbmltYXRpb246ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1pbiAwcyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ye2FuaW1hdGlvbjpmYWRlSW5B''@;'; put 'put ''bmRPdXQgMS44cyBlYXNlLW91dCAuNDIycyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLW91dCAuNjc1cyBpbmZpbml0ZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5jZHMtaW50ZXJuYWwtZG90LTEsLmNkcy1p''@;'; put 'put ''bnRlcm5hbC1kb3QtMiwuY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpub25lfX1gO2Z1bmN0aW9uIHU4ZShjLGwpe2xldCBhPSIiO3N3aXRjaChmdW5jdGlvbiBhOGUoYyl7c3dpdGNoKCEwKXtjYXNlIF9wKGMpOnJldHVybiBjaC5OaWxTaXplVmFsdWU7Y2FzZSBmdW5jdGlvbiB5Sihj''@;'; put 'put ''KXtyZXR1cm5bInh4cyIsInhzIiwic20iLCJtZCIsImxnIiwieGwiLCJ4eGwiXS5pbmRleE9mKGMpPi0xfShjKTpyZXR1cm4gY2guVmFsaWRTaXplU3RyaW5nO2Nhc2UgZnVuY3Rpb24gbEsoYyl7cmV0dXJuIElQKGMpJiYhYUsoYy50cmltKCkpJiYrYz09K2N9KGMpOnJldHVybiBjaC5WYWxp''@;'; put 'put ''ZE51bWVyaWNTdHJpbmc7ZGVmYXVsdDpyZXR1cm4gY2guQmFkU2l6ZVZhbHVlfX0oZnVuY3Rpb24gbDhlKGMpe3JldHVybiBfcChjKT8iIjpmdW5jdGlvbiBXZ2UoYyxsLGE9IiIpe2NvbnN0IGQ9Yy5zcGxpdCgiICIpLGg9IiI9PT1hP2QuZmlsdGVyKGY9PmYhPT1sKTpkLm1hcChmPT5mPT09''@;'; put 'put ''bD9hOmYpO3JldHVybiBoLmxlbmd0aD4wP2guam9pbigiICIpOiIifShjLCJmaXQiKX0obCkpKXtjYXNlIGNoLlZhbGlkTnVtZXJpY1N0cmluZzpyZXR1cm4gYT15RihwYXJzZUludChsKSksdm9pZCBmdW5jdGlvbiBRNmUoYywuLi5sKXtsLmZvckVhY2goKFthLGRdKT0+e2Muc3R5bGVbYV09''@;'; put 'put ''ZH0pfShjLC4uLmZ1bmN0aW9uIGM4ZShjLGwpe3JldHVybiFlYihjKSYmYy5pbmRleE9mKCJmaXQiKT4tMT9bWyJ3aWR0aCIsImF1dG8iXSxbImhlaWdodCIsImF1dG8iXSxbIm1pbi13aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV06W1sid2lkdGgiLGxdLFsiaGVpZ2h0IixsXSxbIm1pbi13''@;'; put 'put ''aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV19KGwsYSkpO2Nhc2UgY2guVmFsaWRTaXplU3RyaW5nOmNhc2UgY2guTmlsU2l6ZVZhbHVlOnJldHVybiB2b2lkIGZ1bmN0aW9uIGU4ZShjLC4uLmwpe2wuZm9yRWFjaChhPT57Yy5zdHlsZVthXT0iIn0pfShjLCJ3aWR0aCIsImhlaWdodCIsIm1p''@;'; put 'put ''bi13aWR0aCIsIm1pbi1oZWlnaHQiKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gd0YoYyl7cmV0dXJuIGMuYmFkZ2UmJigiaW5oZXJpdC10cmlhbmdsZSI9PT1jLmJhZGdlfHwid2FybmluZy10cmlhbmdsZSI9PT1jLmJhZGdlKX0hZnVuY3Rpb24oYyl7Yy5CYWRTaXplVmFsdWU9ImJhZC12''@;'; put 'put ''YWx1ZSIsYy5WYWxpZFNpemVTdHJpbmc9InZhbHVlLWlzLXN0cmluZyIsYy5WYWxpZE51bWVyaWNTdHJpbmc9InZhbHVlLWlzLW51bWVyaWMiLGMuTmlsU2l6ZVZhbHVlPSJ2YWx1ZS1pcy1uaWwifShjaHx8KGNoPXt9KSk7Y2xhc3MgbzIgZXh0ZW5kcyBiOHtjb25zdHJ1Y3Rvcigpe3N1cGVy''@;'; put 'put ''KC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW21KLHM4ZV19Z2V0IHNoYXBlKCl7cmV0dXJuIHRoaXMuX3NoYXBlfXNldCBzaGFwZShsKXtpZihmdW5jdGlvbiBPZ2UoYyxs''@;'; put 'put ''KXtyZXR1cm4hX3AoYykmJnVLKGMsbCl9KGwsdGhpcy5fc2hhcGUpKXtjb25zdCBhPXRoaXMuX3NoYXBlO3RoaXMuX3NoYXBlPWwsdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaGFwZSIsYSl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUobCl7aWYoZnVuY3Rpb24gUmdlKGMs''@;'; put 'put ''bCl7cmV0dXJuIGZ1bmN0aW9uIExnZShjKXtyZXR1cm4gVXgoU3RyaW5nLGMpfHxlYihjKX0oYykmJnVLKGMsbCl9KGwsdGhpcy5fc2l6ZSkpe2NvbnN0IGE9dGhpcy5fc2l6ZTt0aGlzLl9zaXplPWwsdThlKHRoaXMsbCksdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaXplIixhKX19dXBkYXRlZChs''@;'; put 'put ''KXtpZihsLmhhcygiaW5uZXJPZmZzZXQiKSYmdGhpcy5pbm5lck9mZnNldD4wKXtjb25zdCBhPXlGKC0xKnRoaXMuaW5uZXJPZmZzZXQpLGQ9YGNhbGMoMTAwJSArICR7eUYoMip0aGlzLmlubmVyT2Zmc2V0KX0pYDt0aGlzLnN2Zy5zdHlsZS53aWR0aD1kLHRoaXMuc3ZnLnN0eWxlLmhlaWdo''@;'; put 'put ''dD1kLHRoaXMuc3ZnLnN0eWxlLm1hcmdpbj1gJHthfSAwIDAgJHthfWB9fWZpcnN0VXBkYXRlZChsKXtpZihzdXBlci5maXJzdFVwZGF0ZWQobCksdGhpcy5pc0Nvbm5lY3RlZCl7bGV0IGE9InVua25vd24iO3RoaXMuc3Vic2NyaXB0aW9uPUdsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZD0+''@;'; put 'put ''eyJpY29uUmVnaXN0cnkiPT09ZC5rZXkmJlZzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdJiZhIT09dGhpcy5zaGFwZSYmKGE9dGhpcy5zaGFwZSx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIikpfSl9fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1yZW5kZXIoKXtyZXR1cm4gSVAoVnMucmVnaXN0cnlbdGhpcy5zaGFwZV0pP3ZGYDxzcGFuIC5pbm5lckhUTUw9IiR7VnMucmVnaXN0cnlbdGhpcy5zaGFwZV19Ij48L3NwYW4+YDpxNmVgPHN2ZyAuaW5uZXJIVE1MPSIke2Z1bmN0aW9u''@;'; put 'put ''IGg4ZShjKXtjb25zdCBsPVZzLnJlZ2lzdHJ5W2Muc2hhcGVdPz9Wcy5yZWdpc3RyeS51bmtub3duO2xldCBhPWMuc29saWQmJmwuc29saWQ/bC5zb2xpZDpsLm91dGxpbmU7cmV0dXJuIGMuYmFkZ2UmJiF3RihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQmFkZ2VkPz9hOmwub3V0bGluZUJhZGdl''@;'; put 'put ''ZD8/YSksd0YoYykmJihhPWMuc29saWQ/bC5zb2xpZEFsZXJ0ZWQ/P2E6bC5vdXRsaW5lQWxlcnRlZD8/YSksYX0odGhpcykrZnVuY3Rpb24gZDhlKGMpe2xldCBsPSIiO3JldHVybiBjLmJhZGdlJiZ3RihjKT9sPSc8cGF0aCBkPSJNMjYuODUgMS4xNEwyMS4xMyAxMWExLjI4IDEuMjggMCAw''@;'; put 'put ''MDEuMSAyaDExLjQ1YTEuMjggMS4yOCAwIDAwMS4xLTJsLTUuNzItOS44NmExLjI4IDEuMjggMCAwMC0yLjIxIDB6IiBjbGFzcz0iYWxlcnQiIC8+JzpjLmJhZGdlJiYobD0nPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iYmFkZ2UiIC8+JyksbH0odGhpcyl9IiB2aWV3Qm94''@;'; put 'put ''PSIwIDAgMzYgMzYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgYXJpYS1oaWRkZW49InRydWUiPjwvc3ZnPmB9fU10KFtrbCh7dHlwZTpTdHJpbmd9KV0sbzIucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxvMi5wcm90b3R5cGUsInNp''@;'; put 'put ''emUiLG51bGwpLE10KFtrbCh7dHlwZTpTdHJpbmd9KV0sbzIucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxvMi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sbzIucHJvdG90eXBlLCJzb2xpZCIsdm9p''@;'; put 'put ''ZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLG8yLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLE10KFtrbCh7dHlwZTpCb29sZWFufSldLG8yLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLG8yLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCks''@;'; put 'put ''TXQoW2JKKHt0eXBlOk51bWJlcn0pXSxvMi5wcm90b3R5cGUsImlubmVyT2Zmc2V0Iix2b2lkIDApLE10KFtmdW5jdGlvbiBvOGUoYyxsKXtyZXR1cm4oKHtmaW5pc2hlcjpjLGRlc2NyaXB0b3I6bH0pPT4oYSxkKT0+e3ZhciBoO2lmKHZvaWQgMD09PWQpe2NvbnN0IGY9bnVsbCE9PShoPWEu''@;'; put 'put ''b3JpZ2luYWxLZXkpJiZ2b2lkIDAhPT1oP2g6YS5rZXksXz1udWxsIT1sP3traW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6ZixkZXNjcmlwdG9yOmwoYS5rZXkpfTp7Li4uYSxrZXk6Zn07cmV0dXJuIG51bGwhPWMmJihfLmZpbmlzaGVyPWZ1bmN0aW9uKFQpe2MoVCxm''@;'; put 'put ''KX0pLF99e2NvbnN0IGY9YS5jb25zdHJ1Y3Rvcjt2b2lkIDAhPT1sJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLGwoZCkpLGM/LihmLGQpfX0pKHtkZXNjcmlwdG9yOmE9Pntjb25zdCBkPXtnZXQoKXt2YXIgaCxmO3JldHVybiBudWxsIT09KGY9bnVsbD09PShoPXRoaXMucmVuZGVyUm9v''@;'; put 'put ''dCl8fHZvaWQgMD09PWg/dm9pZCAwOmgucXVlcnlTZWxlY3RvcihjKSkmJnZvaWQgMCE9PWY/ZjpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07aWYobCl7Y29uc3QgaD0ic3ltYm9sIj09dHlwZW9mIGE/U3ltYm9sKCk6Il9fIithO2QuZ2V0PWZ1bmN0aW9uKCl7dmFyIGYs''@;'; put 'put ''XztyZXR1cm4gdm9pZCAwPT09dGhpc1toXSYmKHRoaXNbaF09bnVsbCE9PShfPW51bGw9PT0oZj10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnF1ZXJ5U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1fP186bnVsbCksdGhpc1toXX19cmV0dXJuIGR9fSl9KCJzdmciKV0sbzIu''@;'; put 'put ''cHJvdG90eXBlLCJzdmciLHZvaWQgMCksVlgoImNkcy1pY29uIixvMik7Y2xhc3MgcDhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RDb25uZWN0ZWQoKXt2YXIgbD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXt5aWVsZCBs''@;'; put 'put ''Lmhvc3QudXBkYXRlQ29tcGxldGUsbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGE9PmwuZW11bGF0ZUFjdGl2ZShhKSksbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsYT0+bC5lbXVsYXRlQWN0aXZlKGEpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigia2V5''@;'; put 'put ''dXAiLCgpPT5sLmVtdWxhdGVJbmFjdGl2ZSgpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9PmwuZW11bGF0ZUluYWN0aXZlKCkpLGwuaG9zdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+bC5lbXVsYXRlSW5hY3RpdmUoKSl9KSgpfWVtdWxhdGVBY3RpdmUobCl7''@;'; put 'put ''dGhpcy5ob3N0LmRpc2FibGVkfHx0aGlzLmhvc3Q/LnNldEF0dHJpYnV0ZSgiY2RzLWFjdGl2ZSIsIiIpLCJTcGFjZSI9PT1sLmNvZGUmJmwudGFyZ2V0PT09dGhpcy5ob3N0JiZsLnByZXZlbnREZWZhdWx0KCl9ZW11bGF0ZUluYWN0aXZlKCl7dGhpcy5ob3N0LnJlbW92ZUF0dHJpYnV0ZSgi''@;'; put 'put ''Y2RzLWFjdGl2ZSIpfX1jbGFzcyBtOGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpeyh0aGlzLmhvc3QuaGFzQXR0cmlidXRlKCJhcmlhLWNvbnRyb2xzIil8fHRoaXMuaG9zdC5hcmlhQ29udHJvbHMpJiYo''@;'; put 'put ''dGhpcy5ob3N0LmFyaWFIYXNQb3B1cD0idHJ1ZSIsdGhpcy5ob3N0LmFyaWFFeHBhbmRlZD0iZmFsc2UiKX19Y2xhc3MgXzhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7bnVsbCE9PXRoaXMuaG9zdC5kaXNh''@;'; put 'put ''YmxlZCYmKHRoaXMuaG9zdC5hcmlhRGlzYWJsZWQ9dGhpcy5ob3N0LmRpc2FibGVkKSx0aGlzLmhvc3QucmVhZG9ubHkmJih0aGlzLmhvc3QuYXJpYURpc2FibGVkPW51bGwpfX1jbGFzcyB5OGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhp''@;'; put 'put ''cyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QucHJlc3NlZCYmKHRoaXMuaG9zdC5hcmlhUHJlc3NlZD10aGlzLmhvc3QucHJlc3NlZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFQcmVzc2VkPW51bGwpfX1jbGFzcyBDOGV7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpe3RoaXMuaG9zdC50YWJJbmRleD0wfWhvc3RVcGRhdGVkKCl7dGhpcy5ob3N0LnJvbGU9dGhpcy5ob3N0LnJlYWRvbmx5P251bGw6ImJ1dHRvbiIsdGhpcy5ob3N0LnRhYklu''@;'; put 'put ''ZGV4PXRoaXMuaG9zdC5kaXNhYmxlZD8tMTowLHRoaXMuaG9zdC5yZWFkb25seSYmdGhpcy5ob3N0LnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX19Y2xhc3MgTThle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWdldCBjdXJyZW50''@;'; put 'put ''QW5jaG9yKCl7cmV0dXJuIkEiPT09dGhpcy5ob3N0LnBhcmVudEVsZW1lbnQ/LnRhZ05hbWU/dGhpcy5ob3N0LnBhcmVudEVsZW1lbnQ6bnVsbH1ob3N0Q29ubmVjdGVkKCl7dGhpcy5zZXRBbmNob3IoKX1ob3N0VXBkYXRlZCgpe3RoaXMuc2V0QW5jaG9yKCl9c2V0QW5jaG9yKCl7dGhpcy5j''@;'; put 'put ''dXJyZW50QW5jaG9yJiZ0aGlzLmN1cnJlbnRBbmNob3IhPT10aGlzLnByZXZpb3VzQW5jaG9yJiYodGhpcy5wcmV2aW91c0FuY2hvcj10aGlzLmN1cnJlbnRBbmNob3IsdGhpcy5ob3N0LnJlYWRvbmx5PSEwLHRoaXMuY3VycmVudEFuY2hvci5zdHlsZS5saW5lSGVpZ2h0PSIwIix0aGlzLmN1''@;'; put 'put ''cnJlbnRBbmNob3Iuc3R5bGUudGV4dERlY29yYXRpb249Im5vbmUiKX19Y29uc3QgQ0Y9Yz0+Yz8/VGM7ZnVuY3Rpb24gd0ooYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCl9Y29uc3QgU0Y9bmV3IE1hcChbWyJhcnJvdy1sZWZ0IiwiQXJyb3dMZWZ0Il0sWyJhcnJv''@;'; put 'put ''dy1yaWdodCIsIkFycm93UmlnaHQiXSxbImFycm93LXVwIiwiQXJyb3dVcCJdLFsiYXJyb3ctZG93biIsIkFycm93RG93biJdLFsidGFiIiwiVGFiIl0sWyJlbnRlciIsIkVudGVyIl0sWyJlc2NhcGUiLCJFc2NhcGUiXSxbInNwYWNlIiwiICJdLFsiaG9tZSIsIkhvbWUiXSxbImVuZCIsIkVu''@;'; put 'put ''ZCJdXSk7Y2xhc3MgRThle3N0YXRpYyBnZXQga2V5Y29kZXMoKXtyZXR1cm4gSGdlKFNGKX1zdGF0aWMgYWRkKGwsYSl7U0Yuc2V0KGwsYSl9c3RhdGljIGhhcyhsKXtyZXR1cm4gU0YuaGFzKGwpfXN0YXRpYyBnZXRDb2RlKGwsYT10aGlzLmtleWNvZGVzKXtyZXR1cm4gZnVuY3Rpb24gazhl''@;'; put 'put ''KGMsbCl7cmV0dXJuIGwuZ2V0KGMpfHwiIn0obCxhKX19ZnVuY3Rpb24gTUYoYyxsKXtyZXR1cm4gRThlLmdldENvZGUobCk9PT1jLmtleX12YXIgdWg7IWZ1bmN0aW9uKGMpe2MuQXJyb3dVcD0iQXJyb3dVcCIsYy5BcnJvd0Rvd249IkFycm93RG93biIsYy5BcnJvd0xlZnQ9IkFycm93TGVm''@;'; put 'put ''dCIsYy5BcnJvd1JpZ2h0PSJBcnJvd1JpZ2h0IixjLkVuZD0iRW5kIixjLkhvbWU9IkhvbWUiLGMuUGFnZVVwPSJQYWdlVXAiLGMuUGFnZURvd249IlBhZ2VEb3duIn0odWh8fCh1aD17fSkpO2NsYXNzIE84ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvc3Q9bCx0aGlzLnRyaWdnZXJOYXRpdmVC''@;'; put 'put ''dXR0b25CZWhhdmlvckhhbmRsZXI9dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IuYmluZCh0aGlzKSx0aGlzLmVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3JIYW5kbGVyPXRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvci5iaW5kKHRoaXMpLHRoaXMuaG9zdC5hZGRD''@;'; put 'put ''b250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7dGhpcy5zZXRCdXR0b25UeXBlKCksdGhpcy5zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl9c2V0QnV0dG9uVHlwZSgpeyF0aGlzLmhvc3QudHlwZSYmdGhpcy5ob3N0LmNsb3Nlc3QoImZvcm0iKSYmKHRoaXMuaG9zdC50eXBlPSJzdWJt''@;'; put 'put ''aXQiKX1zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl7dGhpcy5ob3N0LnJlYWRvbmx5fHx0aGlzLmhvc3QuZGlzYWJsZWQ/KHRoaXMuaG9zdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3JIYW5kbGVyKSx0aGlzLmhvc3QucmVt''@;'; put 'put ''b3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvckhhbmRsZXIpKToodGhpcy5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLnRyaWdnZXJOYXRpdmVCdXR0b25CZWhhdmlvckhhbmRsZXIpLHRoaXMuaG9zdC5hZGRFdmVudExp''@;'; put 'put ''c3RlbmVyKCJrZXl1cCIsdGhpcy5lbXVsYXRlS2V5Qm9hcmRFdmVudEJlaGF2aW9ySGFuZGxlcikpfWVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3IobCl7IWZ1bmN0aW9uIEE4ZShjLGwsYSl7Yy5maWx0ZXIoZD0+TUYobCxkKSkubGVuZ3RoPjAmJmEoKX0oWyJlbnRlciIsInNwYWNlIl0s''@;'; put 'put ''bCwoKT0+eyJzdWJtaXQiPT09dGhpcy5ob3N0LnR5cGU/dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCk6dGhpcy5ob3N0LmNsaWNrKCksd0oobCl9KX10cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCl7aWYodGhpcy5ob3N0LmRpc2FibGVkKXdKKGwpO2Vsc2UgaWYoIWwu''@;'; put 'put ''ZGVmYXVsdFByZXZlbnRlZCl7Y29uc3QgYT1mdW5jdGlvbiBMOGUoYyxsLGEpe2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5hcHBlbmRDaGlsZChkKSxwSihjLGwse3JlbmRlckJlZm9yZTpkLC4uLmF9KTtjb25zdCBoPWQucHJldmlvdXNTaWJsaW5nO3JldHVybiBk''@;'; put 'put ''LnJlbW92ZSgpLGh9KHZGYDxidXR0b24gYXJpYS1oaWRkZW49InRydWUiIHJvbGU9InByZXNlbnRhdGlvbiIgP2Rpc2FibGVkPSIke3RoaXMuaG9zdC5kaXNhYmxlZH0iIHRhYmluZGV4PSItMSIgc3R5bGU9ImRpc3BsYXk6bm9uZSFpbXBvcnRhbnQiIHZhbHVlPSIke0NGKHRoaXMuaG9zdC52''@;'; put 'put ''YWx1ZSl9IiBuYW1lPSIke0NGKHRoaXMuaG9zdC5uYW1lKX0iIHR5cGU9IiR7Q0YodGhpcy5ob3N0LnR5cGUpfSI+PC9idXR0b24+YCx0aGlzLmhvc3QpO2E/LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIix7cmVsYXRlZFRhcmdldDp0aGlzLmhvc3QsY29tcG9zZWQ6ITB9''@;'; put 'put ''KSksYT8ucmVtb3ZlKCl9fX1jbGFzcyBGOGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QuZXhwYW5kZWQmJih0aGlzLmhvc3QuYXJpYUV4cGFuZGVkPXRoaXMuaG9zdC5leHBhbmRl''@;'; put 'put ''ZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFFeHBhbmRlZD1udWxsKX19bGV0IHMyPWNsYXNzIGV4dGVuZHMgYjh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Rpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYyl7Y29uc3QgbD10aGlzLl9kaXNhYmxlZDt0aGlzLl9kaXNhYmxlZD1jLHRoaXMucmVxdWVzdFVwZGF0ZSgiZGlzYWJsZWQiLGwpfX07TXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJwcmVzc2VkIix2b2lkIDApLE10''@;'; put 'put ''KFtrbCh7dHlwZTpCb29sZWFufSldLHMyLnByb3RvdHlwZSwiZXhwYW5kZWQiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJyZWFkb25seSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKSxNdChb''@;'; put 'put ''a2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwidmFsdWUiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJkaXNhYmxlZCIsbnVsbCksTXQoW2tsKHt0eXBl''@;'; put 'put ''OlN0cmluZ30pXSxzMi5wcm90b3R5cGUsInBvcHVwIix2b2lkIDApLHMyPU10KFtmdW5jdGlvbiBmOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgcDhlKGwpKX0oKSxmdW5jdGlvbiB3OGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgQzhlKGwpKX0o''@;'; put 'put ''KSxmdW5jdGlvbiBiOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgeThlKGwpKX0oKSxmdW5jdGlvbiBQOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgRjhlKGwpKX0oKSxmdW5jdGlvbiB2OGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihs''@;'; put 'put ''PT5uZXcgXzhlKGwpKX0oKSxmdW5jdGlvbiBnOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgbThlKGwpKX0oKSxmdW5jdGlvbiBSOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgTzhlKGwpKX0oKSxmdW5jdGlvbiBTOGUoKXtyZXR1cm4gYz0+Yy5h''@;'; put 'put ''ZGRJbml0aWFsaXplcihsPT5uZXcgTThlKGwpKX0oKV0sczIpO2NvbnN0IG1FPXthY3Rpb25zOntzb3J0OiJTb3J0IixleHBhbmQ6IkV4cGFuZCIsY2xvc2U6IkNsb3NlIixyZXNpemU6IlJlc2l6ZSIsZmlsdGVyOiJGaWx0ZXIifSxhbGVydDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3Nl''@;'; put 'put ''Iixsb2FkaW5nOiJMb2FkaW5nIixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIn0sZHJvcGRvd246e29wZW46Ik9wZW4ifSxmaWxlOnticm93c2U6ImJyb3dzZSIsZmlsZXM6ImZpbGVzIixyZW1vdmVGaWxlOiJyZW1vdmUgZmls''@;'; put 'put ''ZSJ9LG1vZGFsOntjbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgbW9kYWwiLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIG1vZGFsIGNvbnRlbnQiLGNvbnRlbnRCb3g6IlNjcm9sbGFibGUgbW9kYWwgYm9keSIsY29udGVudEVuZDoiRW5kIG9mIG1vZGFsIGNvbnRlbnQifSxuYXZpZ2F0''@;'; put 'put ''aW9uOntuYXZpZ2F0aW9uRWxlbWVudDoibmF2aWdhdGlvbiIsbmF2aWdhdGlvbkxhYmVsOiJuYXZpZ2F0aW9uIG1lbnUiLG5hdmlnYXRpb25BYnJpZGdlZFRleHQ6IlZpZXcgYWJyaWRnZWQgbWVudSIsbmF2aWdhdGlvblVuYWJyaWRnZWRUZXh0OiJWaWV3IHVuYWJyaWRnZWQgbWVudSJ9LG92''@;'; put 'put ''ZXJsYXk6e2Nsb3NlQnV0dG9uQXJpYUxhYmVsOiJDbG9zZSBkaWFsb2ciLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIGRpYWxvZyBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgZGlhbG9nIGNvbnRlbnQifSxwb3B1cDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIHBvcHVwIixj''@;'; put 'put ''b250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBwb3B1cCBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgcG9wdXAgY29udGVudCJ9LHBhc3N3b3JkOntzaG93QnV0dG9uQXJpYUxhYmVsOiJTaG93IHBhc3N3b3JkIixoaWRlQnV0dG9uQXJpYUxhYmVsOiJIaWRlIHBhc3N3b3JkIn0scHJvZ3Jl''@;'; put 'put ''c3M6e2xvYWRpbmc6IkxvYWRpbmciLGxvb3Bpbmc6IkxvYWRpbmcifSx0cmVldmlldzp7bG9hZGluZzoiTG9hZGluZyJ9LGdyaWQ6e3Jlc2l6ZUNvbHVtbjoiUmVzaXplIENvbHVtbiIsY2xvc2VEZXRhaWxzOiJDbG9zZSBEZXRhaWxzIixub0RhdGE6Ik5vIFJlc3VsdHMgRm91bmQiLHJvd0Rl''@;'; put 'put ''dGFpbFN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIscm93RGV0YWlsRW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLGZvb3RlckVuZDoiRW5kIG9mIGdyaWQgcm93cyIsYWN0aW9uOiJBY3Rpb24iLGRyb3BUYXJnZXQ6IkRyb3AgSXRlbSIscGFnaW5hdGlvbjp7bGFiZWw6ImdyaWQgcGFnaW5h''@;'; put 'put ''dGlvbiIsZmlyc3RQYWdlOiJnbyB0byBmaXJzdCBwYWdlIixwcmV2aW91c1BhZ2U6ImdvIHRvIHByZXZpb3VzIHBhZ2UiLG5leHRQYWdlOiJnbyB0byBuZXh0IHBhZ2UiLGxhc3RQYWdlOiJnbyB0byBsYXN0IHBhZ2UiLHBhZ2VTaXplOiJyb3dzIHBlciBwYWdlIixwYWdlOiJwYWdlIn19fTtj''@;'; put 'put ''bGFzcyBZNXtzdGF0aWMgZ2V0IGtleXMoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKEdsLnN0YXRlLmkxOG5SZWdpc3RyeSkubGVuZ3RoJiYoR2wuc3RhdGUuaTE4blJlZ2lzdHJ5PVA1KG1FLEdsLnN0YXRlLmkxOG5SZWdpc3RyeSkpLFA1KG1FLEdsLnN0YXRlLmkxOG5SZWdpc3RyeSl9c3Rh''@;'; put 'put ''dGljIGZpbmRLZXkobCl7Y29uc3QgYT1ZNS5rZXlzO3JldHVybiBPYmplY3Qua2V5cyhhKS5maW5kKGQ9PmRLKGFbZF0sbCkpfXN0YXRpYyBnZXQobCl7cmV0dXJuIGwmJlk1LmtleXNbbF18fHt9fXN0YXRpYyByZXNldCgpe0dsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh7fSxtRSl9c3RhdGlj''@;'; put 'put ''IGh5ZHJhdGUobCxhKXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiAkZ2UoYyxsLGEpe3JldHVybiBjLnJlcGxhY2UoL1wkXHsuKz9cfS9nLGQ9PmZ1bmN0aW9uIEZnZShjLGwsYT1gXCR7JHtjfX1gKXtyZXR1cm4gYy5zcGxpdCgiLiIpLnJlZHVjZSgoZCxoKT0+e3RyeXtjb25zdCBmPWRb''@;'; put 'put ''aF07c3dpdGNoKCEwKXtjYXNlIG51bGw9PT1mOmNhc2UhMT09PWY6Y2FzZSIiPT09ZjpjYXNlIDA9PT1mOnJldHVybiBmO2RlZmF1bHQ6cmV0dXJuIGZ8fGF9fWNhdGNoe3JldHVybiBhfX0sbCl9KGQuc3Vic3RyKDIsZC5sZW5ndGgtMykudHJpbSgpLGwsYSkpfShKU09OLnN0cmluZ2lmeShs''@;'; put 'put ''KSxhKSl9c3RhdGljIGxvY2FsaXplKGwpe0dsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNShtRSxHbC5zdGF0ZS5pMThuUmVnaXN0cnksbCl9fXZhciBCOGU9Y0ZgOmhvc3R7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNywgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS13aWR0aDp2YXIoLS1pY29uLXdpZHRoKTstLWhlaWdodDp2YXIoLS1pY29uLXdpZHRoKTstLWN1cnNvcjpw''@;'; put 'put ''b2ludGVyOy0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwLCAjMmQ0MDQ4KSk7LS1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zLCBjYWxjKDEz''@;'; put 'put ''ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS1iYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy0tcGFkZGluZzowOy0tb3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUsIEhpZ2hsaWdodCBzb2xpZCAycHgpOy0tb3V0bGluZS1vZmZz''@;'; put 'put ''ZXQ6Y2FsYyh2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0LCAxcHgpICogLTEpO3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3V0bGluZTowIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dKXtwb2ludGVyLWV2ZW50''@;'; put 'put ''czppbml0aWFsO2N1cnNvcjp2YXIoLS1jdXJzb3IpIWltcG9ydGFudH06aG9zdChbc3RhdHVzPWFjdGl2ZV0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9OjpzbG90dGVkKFtzaGFwZT1jbG9z''@;'; put 'put ''ZV0pLDo6c2xvdHRlZChbc2hhcGU9aW5mby1jaXJjbGVdKSw6OnNsb3R0ZWQoW3NoYXBlPXRpbWVzXSksOmhvc3QoW3NoYXBlPWNsb3NlXSksOmhvc3QoW3NoYXBlPWluZm8tY2lyY2xlXSl7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCwgY2FsYygxOCAqIDFyZW0gLyB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04LCBjYWxjKDE4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSl9Omhvc3QoOmhvdmVyKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tY29sb3ItaG92ZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDAsICMxYjJiMzIpKX06aG9zdCg6YWN0aXZlKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWNvbnN0cnVjdGlvbi0xMDAwLCAjMWIyYjMyKSl9Omhvc3QoOmFjdGl2ZSkgLnByaXZhdGUtaG9zdHt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpLyAyKSl9Omhvc3Qo''@;'; put 'put ''W2Rpc2FibGVkXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDAsICNhZWI4YmMpKX0ucHJpdmF0ZS1ob3N0ey0taWNvbi1jb2xvcjp2YXIoLS1jb2xvcik7YmFj''@;'; put 'put ''a2dyb3VuZDp2YXIoLS1iYWNrZ3JvdW5kKTtwYWRkaW5nOnZhcigtLXBhZGRpbmcpO2NvbG9yOnZhcigtLWNvbG9yKTtmb250LXNpemU6dmFyKC0tZm9udC1zaXplKTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOnZhcigt''@;'; put 'put ''LXdpZHRoKTttaW4taGVpZ2h0OnZhcigtLWhlaWdodCl9OjpzbG90dGVkKGNkcy1pY29uKSxjZHMtaWNvbnt3aWR0aDp2YXIoLS1pY29uLXdpZHRoKTtoZWlnaHQ6dmFyKC0taWNvbi1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmV9OjpzbG90dGVkKGNkcy1pY29uOm5vdChbc3RhdHVzXSkp''@;'; put 'put ''LGNkcy1pY29uey0tY29sb3I6dmFyKC0taWNvbi1jb2xvcil9Omhvc3QoW2Rpc2FibGVkXTphY3RpdmUpe3BvaW50ZXItZXZlbnRzOm5vbmUhaW1wb3J0YW50fS5wcml2YXRlLWhvc3Q6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKC0xKnZhcigtLXdpZHRo''@;'; put 'put ''KSAtIDEpO3RvcDpjYWxjKC0xKnZhcigtLWhlaWdodCkgLSAxKTt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXRvdWNoLXRhcmdldCxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi10b3VjaC10YXJnZXQsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW2Rpc2FibGVkXSkgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZTowIWltcG9ydGFudH06aG9zdCg6Zm9jdXMpIC5wcml2YXRlLWhvc3Q6OmFmdGVy''@;'; put 'put ''e291dGxpbmU6dmFyKC0tb3V0bGluZSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tb3V0bGluZS1vZmZzZXQpfUBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApezpob3N0KDpmb2N1cykgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3Vz''@;'; put 'put ''LXJpbmctY29sb3J9fWA7Y2xhc3MgVzUgZXh0ZW5kcyBzMntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pMThuPVk1LmtleXMuYWN0aW9ucyx0aGlzLmNkc0J1dHRvbkFjdGlvbj0hMH1yZW5kZXIoKXtyZXR1cm4gdkZgPGRpdiBjbGFzcz0icHJpdmF0ZS1ob3N0Ij48''@;'; put 'put ''c2xvdD48Y2RzLWljb24gLnNoYXBlPSIke3RoaXMuc2hhcGU/dGhpcy5zaGFwZToiZWxsaXBzaXMtdmVydGljYWwifSIgLnNpemU9IiR7dGhpcy5pY29uU2l6ZX0iID9zb2xpZD0iJHt0aGlzLnByZXNzZWR8fHRoaXMuZXhwYW5kZWR9IiBpbm5lci1vZmZzZXQ9IiR7MX0iPjwvY2RzLWljb24+''@;'; put 'put ''PC9zbG90PjwvZGl2PmB9dXBkYXRlZChsKXtzdXBlci51cGRhdGVkKGwpLHRoaXMuYXJpYUxhYmVsfHx0aGlzLnJlYWRvbmx5fHxINS53YXJuKCJBIGFyaWEtbGFiZWwgaXMgcmVxdWlyZWQgZm9yIGludGVyYWN0aXZlIGNkcy1idXR0b24tYWN0aW9uIHR5cGUiLHRoaXMpLGwuaGFzKCJyZWFk''@;'; put 'put ''b25seSIpJiYodGhpcy5hcmlhSGlkZGVuPXRoaXMucmVhZG9ubHkmJiF0aGlzLmhhc0F0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpPyJ0cnVlIjpudWxsKX19VzUuc3R5bGVzPVttSixCOGVdLE10KFtrbCh7dHlwZTpTdHJpbmd9KV0sVzUucHJvdG90eXBlLCJzaGFwZSIsdm9pZCAwKSxNdChba2wo''@;'; put 'put ''e3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sVzUucHJvdG90eXBlLCJhY3Rpb24iLHZvaWQgMCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxXNS5wcm90b3R5cGUsImljb25TaXplIix2b2lkIDApLE10KFtmdW5jdGlvbiBIOGUoKXtyZXR1cm4oYyxsKT0+e2NvbnN0IGE9Yy5jb25uZWN0ZWRD''@;'; put 'put ''YWxsYmFjayxkPWMuZGlzY29ubmVjdGVkQ2FsbGJhY2s7Yy5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe2MuX19pMThuU3ViPUdsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZj0+eyJpMThuUmVnaXN0cnkiPT09Zi5rZXkmJnRoaXMucmVxdWVzdFVwZGF0ZShsKX0pLGEmJmEuYXBwbHko''@;'; put 'put ''dGhpcyl9LGMuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtjLl9faTE4blN1Yi51bnN1YnNjcmliZSgpLGQmJmQuYXBwbHkodGhpcyl9O2NvbnN0IGg9e2dldCgpe2NvbnN0IGY9UDUoWTUua2V5c1t0aGlzLl9faTE4bktleV0sdGhpcy5fX2kxOG58fHt9KTtyZXR1cm4gWTUuaHlk''@;'; put 'put ''cmF0ZShmLHRoaXMpfSxzZXQoZil7Y29uc3QgXz1mdW5jdGlvbiBOOGUoYyxsKXtpZihfcChjKSl7bGV0IGE9e307aWYobC5oYXNBdHRyaWJ1dGUoImNkcy1pMThuIikpe2NvbnN0IGQ9bC5nZXRBdHRyaWJ1dGUoImNkcy1pMThuIikrIiI7aWYoX3AoZCkpYT17fTtlbHNlIHRyeXthPUpTT04u''@;'; put 'put ''cGFyc2UoZCl9Y2F0Y2h7SDUud2FybigiQ2xhcml0eSBpMThuOiBJbnZhbGlkIEpTT04gcGFzc2VkIHRvIGNkcy1pMThuIiksYT17fX19cmV0dXJuIGF9cmV0dXJuIGN9KGYsdGhpcyksVD1mdW5jdGlvbiBWOGUoYyxsLGEsZCl7cmV0dXJuIF9wKGMpP2RLKGEsZCk/e3VwZGF0ZTohMX06e3Vw''@;'; put 'put ''ZGF0ZTohMCx2YWx1ZXM6YX06Yz09PWw/e3VwZGF0ZTohMSx2YWx1ZXM6e319Ont1cGRhdGU6ITAsa2V5OmMsdmFsdWVzOnt9fX0oWTUuZmluZEtleShfKXx8IiIsdGhpcy5fX2kxOG5LZXksXyx0aGlzLl9faTE4bik7dm9pZCAwIT09VC5rZXkmJih0aGlzLl9faTE4bktleT1ULmtleSsiIiks''@;'; put 'put ''dm9pZCAwIT09VC52YWx1ZXMmJih0aGlzLl9faTE4bj17Li4uVC52YWx1ZXN9KSwhMD09PVQudXBkYXRlJiZ0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLnJlcXVlc3RVcGRhdGUobCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm4gdm9pZCAwIT09bD9mdW5jdGlvbihm''@;'; put 'put ''LF8sVCl7Y29uc3QgVz1PYmplY3QuZGVmaW5lUHJvcGVydHkoXyxULGYpO3JldHVybiBrbCh7dHlwZTpPYmplY3QsYXR0cmlidXRlOiJjZHMtaTE4biJ9KShXLFQpfShoLGMsbCk6ZnVuY3Rpb24oZixfKXtjb25zdCBUPXtraW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6''@;'; put 'put ''Xy5rZXksZGVzY3JpcHRvcjpmfTtyZXR1cm4ga2woe3R5cGU6T2JqZWN0fSkoVCl9KGgsYyl9fSgpXSxXNS5wcm90b3R5cGUsImkxOG4iLHZvaWQgMCksTXQoW2JKKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMCxhdHRyaWJ1dGU6ImNkcy1idXR0b24tYWN0aW9uIn0pXSxXNS5wcm90b3R5cGUs''@;'; put 'put ''ImNkc0J1dHRvbkFjdGlvbiIsdm9pZCAwKTtjbGFzcyBTSiBleHRlbmRzIFc1e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNoYXBlPSJjbG9zZSJ9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYXJpYUxhYmVsPXRoaXMu''@;'; put 'put ''YXJpYUxhYmVsP3RoaXMuYXJpYUxhYmVsOnRoaXMuaTE4bi5jbG9zZX19TXQoW2tsKHt0eXBlOlN0cmluZ30pXSxTSi5wcm90b3R5cGUsInNoYXBlIix2b2lkIDApLFZYKCJjZHMtaW50ZXJuYWwtY2xvc2UtYnV0dG9uIixTSiksVnMuYWRkSWNvbnMoSUspLFZzLmFkZEFsaWFzZXMoWyJ0aW1l''@;'; put 'put ''cyIsWyJjbG9zZSJdXSk7Y29uc3QgRW89WyIqIl07ZnVuY3Rpb24gejhlKGMsbCl7aWYoMSZjJiYoenIoMCksTmUoMSksWXIoKSksMiZjKXtjb25zdCBhPWplKDMpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFU4ZShjLGwpe2lmKDEmYyYmKG1lKDAs''@;'; put 'put ''ImRpdiIsMTQpLFFlKDEsejhlLDIsMSwibmctY29udGFpbmVyIiwwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQsZD1qZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWQuQWNjb3JkaW9uU3RhdHVzLkVycm9yKX19ZnVuY3Rpb24gWjhlKGMsbCl7aWYoMSZjJiYoenIo''@;'; put 'put ''MCksTmUoMSksWXIoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFk4ZShjLGwpe2lmKDEmYyYmKHpyKDApLE5lKDEpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSgyKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5zdWNjZXNzKX19ZnVuY3Rpb24gVzhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNSkseHQoIkB0b2dnbGUuZG9uZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCkuJGltcGxpY2l0O3JldHVybiBqdChqZSgpLmNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRv''@;'; put 'put ''bmUoaCkpfSksbWUoMSwiZGl2IiwxNiksa3IoMiwyKSx5ZSgpKCl9MiZjJiZSZSgiQHRvZ2dsZSIsdm9pZCAwKX1mdW5jdGlvbiBHOGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTt6cigwKSxRZSgxLFU4ZSwyLDEsImRpdiIsMSksbWUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImJ1dHRv''@;'; put 'put ''biIsNCw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkudG9nZ2xlUGFuZWwoKSl9KSxiYSg2LCJhc3luYyIpLG1lKDcsInNwYW4iLDYpLFFlKDgsWjhlLDIsMSwibmctY29udGFpbmVyIiwwKSxRZSg5LFk4ZSwyLDEsIm5nLWNvbnRhaW5lciIsMCkseWUoKSxt''@;'; put 'put ''ZSgxMCwic3BhbiIsNykscXQoMTEsImNkcy1pY29uIiw4KSgxMiwic3BhbiIsOSkoMTMsImNkcy1pY29uIiwxMCkoMTQsImNkcy1pY29uIiwxMSkseWUoKSxrcigxNSksa3IoMTYsMSkseWUoKSgpLG1lKDE3LCJkaXYiLDEyKSxRZSgxOCxXOGUsMywxLCJkaXYiLDEzKSx5ZSgpKCksWXIoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1qZSgpO2xldCBoO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cyE9PWQuQWNjb3JkaW9uU3RhdHVzLkluYWN0aXZlKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKSksQ2UoMiksaHIoImNsci1hY2NvcmRpb24t''@;'; put 'put ''aGVhZGVyLWhhcy1kZXNjcmlwdGlvbiIsKG51bGw9PShoPVVsKDYsMTYsZC5hY2NvcmRpb25EZXNjcmlwdGlvbi5jaGFuZ2VzKSk/bnVsbDpoLmxlbmd0aCl8fGQuYWNjb3JkaW9uRGVzY3JpcHRpb24ubGVuZ3RoKSxSZSgiaWQiLGQuZ2V0QWNjb3JkaW9uSGVhZGVySWQoYS50ZW1wbGF0ZUlk''@;'; put 'put ''KSkoImRpc2FibGVkIixkLmlzQWNjb3JkaW9uJiZhLmRpc2FibGVkKSxUcigiYXJpYS1kaXNhYmxlZCIsIWQuaXNBY2NvcmRpb24mJmEuZGlzYWJsZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldEFjY29yZGlvbkNvbnRlbnRJZChhLnRlbXBsYXRlSWQpKSgiYXJpYS1leHBhbmRlZCIsYS5vcGVu''@;'; put 'put ''KSxDZSg0KSxSZSgibmdJZiIsYS5zdGF0dXM9PT1kLkFjY29yZGlvblN0YXR1cy5FcnJvciksQ2UoMSksUmUoIm5nSWYiLGEuc3RhdHVzPT09ZC5BY2NvcmRpb25TdGF0dXMuQ29tcGxldGUpLENlKDgpLFJlKCJAc2tpcEluaXRpYWxSZW5kZXIiLHZvaWQgMCkoImlkIixkLmdldEFjY29yZGlv''@;'; put 'put ''bkNvbnRlbnRJZChhLnRlbXBsYXRlSWQpKSxUcigiYXJpYS1oaWRkZW4iLCFhLm9wZW4pKCJhcmlhLWxhYmVsbGVkYnkiLGQuZ2V0QWNjb3JkaW9uSGVhZGVySWQoYS50ZW1wbGF0ZUlkKSksQ2UoMSksUmUoIm5nSWYiLGEub3Blbil9fWNvbnN0IE1KPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxl''@;'; put 'put ''Il0sWyJjbHItc3RlcC10aXRsZSJdXSxbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSwiKiJdLHhKPVsiY2xyLWFjY29yZGlvbi10aXRsZSwgY2xyLXN0ZXAtdGl0bGUiLCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLCBjbHItc3RlcC1k''@;'; put 'put ''ZXNjcmlwdGlvbiIsIioiXSxnN2U9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gbTdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLHF0KDEsInNwYW4iLDIpLHllKCkpLDImYyYmKENlKDEpLFJlKCJAc3Bpbm5lciIsdm9pZCAwKSl9ZnVuY3Rpb24gdjdlKGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PVZuKCk7bWUoMCwic3BhbiIpKDEsInNwYW4iLDMpLHh0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpO3JldHVybiBqdChoLmxvYWRpbmdTdGF0ZUNoYW5nZShoLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0pLHllKCkoKX0yJmMmJihDZSgxKSxSZSgiQHZh''@;'; put 'put ''bGlkYXRlZCIsdm9pZCAwKSl9ZnVuY3Rpb24gXzdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLGtyKDEpLHllKCkpLDImYyYmUmUoIkBkZWZhdWx0QnV0dG9uIix2b2lkIDApfWZ1bmN0aW9uIGI3ZShjLGwpezEmYyYmcXQoMCwibGFiZWwiKX1jb25zdCB5N2U9W1tbIiIsImNsckNoZWNrYm94''@;'; put 'put ''IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0sW1sibGFiZWwiXV1dLHc3ZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJlbCJdO2Z1bmN0aW9uIEM3ZShjLGwpezEmYyYmcXQoMCwibGFiZWwiKX1mdW5jdGlvbiBTN2UoYyxsKXsxJmMmJmtyKDAsMixbIipuZ0lmIiwic2hvd0hl''@;'; put 'put ''bHBlciJdKX1mdW5jdGlvbiBNN2UoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiB4N2UoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBFN2UoYyxsKXsxJmMmJmtyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gazdlKGMsbCl7''@;'; put 'put ''MSZjJiZrcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBBN2U9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1j''@;'; put 'put ''b250cm9sLXN1Y2Nlc3MiXV1dLFQ3ZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl0sRDdlPVsiY2xyS2V5Rm9jdXMiLCIiXTtmdW5j''@;'; put 'put ''dGlvbiBQN2UoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gRjdlKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gSDdlKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gTjdlKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxw''@;'; put 'put ''ZXIiXSl9ZnVuY3Rpb24gVjdlKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEI3ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgajdlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJJbnB1dCIsIiJdXSxbWyJjbHIt''@;'; put 'put ''Y29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sejdlPVsibGFiZWwiLCJbY2xySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rp''@;'; put 'put ''b24gVTdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtUcigiYXJpYS1sYWJlbCIsYS5kYXkpLENlKDEpLG1yKCIgIixhLm5hcnJvdywiICIpfX1mdW5jdGlvbiBaN2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNykscXQo''@;'; put 'put ''MSwiY2xyLWRheSIsOCkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJjbHJEYXlWaWV3IixhKX19ZnVuY3Rpb24gWTdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDUpLFFlKDEsWjdlLDIsMSwidGQiLDYpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtD''@;'; put 'put ''ZSgxKSxSZSgibmdGb3JPZiIsYSl9fWZ1bmN0aW9uIFc3ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXg7cmV0dXJuIGp0KGplKCkuY2hhbmdlTW9udGgoZikpfSksTmUoMSkseWUoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9amUoKTtocigiaXMtc2VsZWN0ZWQiLGQ9PT1oLmNhbGVuZGFyTW9udGhJbmRleCksVHIoInRhYmluZGV4IixoLmdldFRhYkluZGV4KGQpKSxDZSgxKSxtcigiICIsYSwiICIpfX1mdW5jdGlvbiBHN2UoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoKS5jaGFuZ2VZZWFyKGYpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUoKTtocigiaXMtc2Vs''@;'; put 'put ''ZWN0ZWQiLGE9PT1kLmNhbGVuZGFyWWVhciksVHIoInRhYmluZGV4IixkLmdldFRhYkluZGV4KGEpKSxDZSgxKSxtcigiICIsYSwiICIpfX1mdW5jdGlvbiAkN2UoYyxsKXsxJmMmJnF0KDAsImNsci1tb250aHBpY2tlciIpfWZ1bmN0aW9uIHE3ZShjLGwpezEmYyYmcXQoMCwiY2xyLXllYXJw''@;'; put 'put ''aWNrZXIiKX1mdW5jdGlvbiBLN2UoYyxsKXsxJmMmJnF0KDAsImNsci1kYXlwaWNrZXIiKX1jb25zdCBYN2U9WyJhY3Rpb25CdXR0b24iXTtmdW5jdGlvbiBKN2UoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gUTdlKGMsbCl7MSZjJiYobWUoMCwiYnV0dG9uIiw4LDkpLHF0KDIs''@;'; put 'put ''ImNkcy1pY29uIiwxMCkseWUoKSksMiZjJiZSZSgiZGlzYWJsZWQiLGplKCkuaXNJbnB1dERhdGVEaXNhYmxlZCl9ZnVuY3Rpb24gZTllKGMsbCl7MSZjJiZxdCgwLCJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiLDExKX1mdW5jdGlvbiB0OWUoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29u''@;'; put 'put ''IiwxMil9ZnVuY3Rpb24gbjllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsMTMpfWZ1bmN0aW9uIHI5ZShjLGwpezEmYyYma3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGk5ZShjLGwpezEmYyYma3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlv''@;'; put 'put ''biBvOWUoYyxsKXsxJmMmJmtyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IHM5ZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyRGF0ZSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0s''@;'; put 'put ''YTllPVsibGFiZWwiLCJbY2xyRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBsOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9Y29uc3QgYzllPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJl''@;'; put 'put ''bCJdXV0sdTllPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gZDllKGMsbCl7MSZjJiZxdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGg5ZShjLGwpezEmYyYma3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGY5ZShjLGwpezEmYyYmcXQoMCwiY2RzLWljb24iLDUp''@;'; put 'put ''fWZ1bmN0aW9uIHA5ZShjLGwpezEmYyYmcXQoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIGc5ZShjLGwpezEmYyYma3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBtOWUoYyxsKXsxJmMmJmtyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IHY5ZT1bW1si''@;'; put 'put ''bGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLF85ZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJj''@;'; put 'put ''bHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBiOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24geTllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gdzllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVu''@;'; put 'put ''Y3Rpb24gQzllKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gUzllKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIE05ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qg''@;'; put 'put ''eDllPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJTZWxlY3QiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEU5ZT1bImxhYmVsIiwiW2NsclNlbGVjdF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJj''@;'; put 'put ''bHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBrOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gQTllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gVDllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVu''@;'; put 'put ''Y3Rpb24gRDllKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gSTllKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEw5ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qg''@;'; put 'put ''UjllPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sTzllPVsibGFiZWwiLCJbY2xyVGV4dGFyZWFdIiwiY2xyLWNvbnRyb2wtaGVscGVy''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl0sUDllPVsiYW5jaG9yIl07ZnVuY3Rpb24gRjllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImJ1dHRvbiIsNikscXQoMywiY2RzLWljb24iLDcpLHllKCkoKSxrcig0KSx5ZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9amUoKTtSZSgiaWQiLGEucG9wb3ZlcklkKSxUcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJEaWFsb2dBcmlhTGFiZWwpLENlKDMpLFRyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpfX1jb25zdCBIOWU9WyJp''@;'; put 'put ''bnB1dF9sb3ciXSxOOWU9WyJpbnB1dCJdLFY5ZT1bImNvbHVtblBvcnRhbCJdO2Z1bmN0aW9uIEI5ZShjLGwpezEmYyYma3IoMCl9Y29uc3QgajllPVsicmVzaXplVHJhY2tlciJdLHo5ZT1bImNvbHVtbkhhbmRsZSJdO2Z1bmN0aW9uIFU5ZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gWjll''@;'; put 'put ''KGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsMTApLDImYyYmVHIoImRpcmVjdGlvbiIsamUoMikuc29ydERpcmVjdGlvbil9ZnVuY3Rpb24gWTllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0''@;'; put 'put ''KGplKCkuc29ydCgpKX0pLFFlKDEsVTllLDEsMCwibmctY29udGFpbmVyIiw4KSxRZSgyLFo5ZSwxLDEsImNkcy1pY29uIiw5KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1qZSgpLGQ9JGkoNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLENlKDEpLFJlKCJuZ0lmIixhLnNvcnREaXJl''@;'; put 'put ''Y3Rpb24pfX1mdW5jdGlvbiBXOWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTEpLHh0KCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuZmlsdGVyVmFsdWU9aCl9KSx5ZSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1qZSgpO1JlKCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsYS5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlcikoImNsckRnU3RyaW5nRmlsdGVyIixhLnJlZ2lzdGVyZWQpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIEc5ZShjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1WbigpO21lKDAsImNsci1kZy1udW1lcmljLWZpbHRlciIsMTIpLHh0KCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuZmlsdGVyVmFsdWU9aCl9KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1qZSgpO1JlKCJjbHJGaWx0ZXJNYXhQbGFj''@;'; put 'put ''ZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixhLmZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixhLnJlZ2lzdGVyZWQpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1''@;'; put 'put ''bmN0aW9uICQ5ZShjLGwpezEmYyYma3IoMCwxKX1mdW5jdGlvbiBxOWUoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIEs5ZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDEzKSxRZSgxLHE5ZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkseWUoKSksMiZjKXtqZSgpO2NvbnN0IGE9JGkoNik7Q2Uo''@;'; put 'put ''MSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEpfX1mdW5jdGlvbiBYOWUoYyxsKXsxJmMmJnF0KDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIil9Y29uc3QgSjllPVtbWyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1d''@;'; put 'put ''LCIqIl0sUTllPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1maWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiBldmUoYyxsKXsxJmMmJnF0KDAsImRpdiIsNCl9ZnVuY3Rpb24gdHZlKGMsbCl7MSZjJiZrcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdy''@;'; put 'put ''aWQiXSl9ZnVuY3Rpb24gbnZlKGMsbCl7aWYoMSZjJiYoenIoMCksbWUoMSwiYnV0dG9uIiwxKSxxdCgyLCJjZHMtaWNvbiIsMikseWUoKSxZcigpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgyKSxUcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBydmU9WyJjZWxs''@;'; put 'put ''UG9ydGFsIl07ZnVuY3Rpb24gaXZlKGMsbCl7MSZjJiZrcigwKX1jb25zdCBvdmU9WyJyb3dQb3J0YWwiXTtmdW5jdGlvbiBzdmUoYyxsKXsxJmMmJmtyKDApfWNvbnN0IGF2ZT1bImRldGFpbEJ1dHRvbiJdLGx2ZT1bInN0aWNreUNlbGxzIl0sY3ZlPVsic2Nyb2xsYWJsZUNlbGxzIl0sdXZl''@;'; put 'put ''PVsiY2FsY3VsYXRlZENlbGxzIl07ZnVuY3Rpb24gZHZlKGMsbCl7fWZ1bmN0aW9uIGh2ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNyksUWUoMSxkdmUsMCwwLCJuZy10ZW1wbGF0ZSIsOCkseWUoKSksMiZjKXtjb25zdCBhPWplKDIpLGQ9JGkoNik7''@;'; put 'put ''UmUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksQ2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBmdmUoYyxsKXt9ZnVuY3Rpb24gcHZlKGMsbCl7MSZjJiZRZSgwLGZ2ZSwwLDAsIm5nLXRlbXBsYXRlIiw4KSwyJmMmJihqZSgyKSxS''@;'; put 'put ''ZSgibmdUZW1wbGF0ZU91dGxldCIsJGkoNikpKX1mdW5jdGlvbiBndmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDYpLHh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''aCl7QnQoYSk7Y29uc3QgZj1qZSgpO3JldHVybiBqdChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxRZSgxLGh2ZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMSksUWUoMixwdmUsMSwxLG51bGwsMikseWUoKX1pZigyJmMpe2NvbnN0IGE9amUoKTtDZSgxKSxSZSgibmdJ''@;'; put 'put ''ZiIsYS5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gbXZlKGMsbCl7fWZ1bmN0aW9uIHZ2ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNyksUWUoMSxtdmUsMCwwLCJuZy10ZW1w''@;'; put 'put ''bGF0ZSIsOCkseWUoKSksMiZjKXtjb25zdCBhPWplKCksZD0kaSg2KTtSZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIF92ZShjLGwpe31mdW5jdGlvbiBidmUoYyxsKXsxJmMmJlFl''@;'; put 'put ''KDAsX3ZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKGplKCksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLCRpKDYpKSl9ZnVuY3Rpb24geXZlKGMsbCl7MSZjJiZrcigwKX1jb25zdCBFSj1mdW5jdGlvbihjKXtyZXR1cm57ImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiOmN9fTtmdW5jdGlv''@;'; put 'put ''biB3dmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE5KSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIsImlucHV0IiwyMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgyKS50b2dnbGUoaCkpfSkseWUoKSxtZSgzLCJs''@;'; put 'put ''YWJlbCIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLmNsZWFyUmFuZ2VzKGgpKX0pLG1lKDQsInNwYW4iLDIyKSxOZSg1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1qZSgyKTtSZSgibmdDbGFzcyIsSjIoNyxFSiwhYS5jbHJEZ1NlbGVjdGFi''@;'; put 'put ''bGUpKSxDZSgyKSxSZSgibmdNb2RlbCIsYS5zZWxlY3RlZCkoImlkIixhLmNoZWNrYm94SWQpKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxUcigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxDZSgxKSxSZSgiZm9yIixhLmNoZWNrYm94SWQp''@;'; put 'put ''LENlKDIpLG9yKGEuY2xyRGdSb3dBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIEN2ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTkpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDIzKSx4dCgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWgpfSkseWUoKSxtZSgzLCJsYWJlbCIsMjQpKDQsInNwYW4iLDIyKSxOZSg1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1qZSgyKTtSZSgibmdDbGFzcyIsSjIoMTAsRUos''@;'; put 'put ''IWEuY2xyRGdTZWxlY3RhYmxlKSksQ2UoMiksUmUoImlkIixhLnJhZGlvSWQpKCJuYW1lIixhLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixhLml0ZW0pKCJuZ01vZGVsIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlKSgiY2hlY2tlZCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmds''@;'; put 'put ''ZT09PWEuaXRlbSkoImRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLFRyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLENlKDEpLFJlKCJmb3IiLGEucmFkaW9JZCksQ2UoMiksb3IoYS5jbHJEZ1Jvd0FyaWFMYWJlbHx8YS5jb21tb25TdHJpbmdz''@;'; put 'put ''LmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gU3ZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwyNSksa3IoMSwyKSx5ZSgpKX1mdW5jdGlvbiBNdmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGpl''@;'; put 'put ''KDQpLnRvZ2dsZUV4cGFuZCgpKX0pLHF0KDEsImNkcy1pY29uIiwzMCkseWUoKX1pZigyJmMpe2NvbnN0IGE9amUoNCk7VHIoImFyaWEtZXhwYW5kZWQiLGEuZXhwYW5kLmV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5j''@;'; put 'put ''bHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtY29udHJvbHMiLGEuZXhwYW5kYWJsZUlkKSxDZSgxKSxUcigiZGlyZWN0aW9uIixhLmV4cGFuZC5leHBhbmRlZD8iZG93biI6InJpZ2h0IikoInRpdGxlIixhLmV4cGFuZC5leHBhbmRlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5jb2xsYXBzZTph''@;'; put 'put ''LmNvbW1vblN0cmluZ3Mua2V5cy5leHBhbmQpfX1mdW5jdGlvbiB4dmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItc3Bpbm5lciIsMzEpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1qZSg0KTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gRXZlKGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoenIoMCksUWUoMSxNdmUsMiw1LCJidXR0b24iLDI3KSxRZSgyLHh2ZSwyLDEsImNsci1zcGlubmVyIiwyOCksWXIoKSksMiZjKXtjb25zdCBhPWplKDMpO0NlKDEpLFJlKCJuZ0lmIiwhYS5leHBhbmQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuZXhwYW5kLmxvYWRp''@;'; put 'put ''bmcpfX1mdW5jdGlvbiBrdmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDI2KSxRZSgxLEV2ZSwzLDIsIm5nLWNvbnRhaW5lciIsMikseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gQXZlKGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzMikoMSwiYnV0dG9uIiwzMywzNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoMiksZj1qZSgyKTtyZXR1cm4ganQoZi5kZXRhaWxTZXJ2aWNlLnRvZ2dsZShmLml0ZW0saCkpfSkscXQoMywiY2RzLWljb24iLDM1KSx5''@;'; put 'put ''ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLGhyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFRyKCJhcmlhLWxhYmVsIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0Rl''@;'; put 'put ''dGFpbE9wZW5MYWJlbCkoImFyaWEtZXhwYW5kZWQiLGEuZGV0YWlsU2VydmljZS5pc09wZW4pKCJhcmlhLWNvbnRyb2xzIixhLmRldGFpbFNlcnZpY2UuaWQpLENlKDIpLFRyKCJkaXJlY3Rpb24iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT8ibGVmdCI6InJpZ2h0IikoInRp''@;'; put 'put ''dGxlIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2U6YS5jb21tb25TdHJpbmdzLmtleXMub3Blbil9fWZ1bmN0aW9uIFR2ZShjLGwpe31mdW5jdGlvbiBEdmUoYyxsKXsxJmMmJlFlKDAsVHZlLDAsMCwibmctdGVtcGxhdGUiLDgp''@;'; put 'put ''LDImYyYmKGplKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWZ1bmN0aW9uIEl2ZShjLGwpe31mdW5jdGlvbiBMdmUoYyxsKXsxJmMmJlFlKDAsSXZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKGplKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWNvbnN0IFJ2''@;'; put 'put ''ZT1mdW5jdGlvbihjKXtyZXR1cm57ImlzLXJlcGxhY2VkIjpjfX07ZnVuY3Rpb24gT3ZlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJkaXYiLDEwKSx6cigyLG51bGwsMTEpLFFlKDQsd3ZlLDYsOSwiZGl2IiwxMiksUWUoNSxDdmUsNiwxMiwiZGl2IiwxMiksUWUoNixTdmUsMiww''@;'; put 'put ''LCJkaXYiLDEzKSxRZSg3LGt2ZSwyLDEsImRpdiIsMTQpLFFlKDgsQXZlLDQsNywiZGl2IiwxNSksWXIoKSx5ZSgpLG1lKDksImRpdiIsMTYpKDEwLCJkaXYiLDE3KSxrcigxMSwxKSxqYSgxMixudWxsLDE4KSx5ZSgpLFFlKDE0LER2ZSwxLDEsbnVsbCwyKSxRZSgxNSxMdmUsMSwxLG51bGws''@;'; put 'put ''MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoKTtocigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFJlKCJpZCIsYS5pZCksQ2UoNCksUmUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9U''@;'; put 'put ''WVBFLk11bHRpKSxDZSgxKSxSZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxDZSgxKSxSZSgibmdJZiIsYS5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLENlKDEpLFJlKCJuZ0lmIixhLmdsb2JhbEV4cGFuZGFi''@;'; put 'put ''bGUuaGFzRXhwYW5kYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGEuZGV0YWlsU2VydmljZS5lbmFibGVkKSxDZSgxKSxSZSgibmdDbGFzcyIsSjIoMTEsUnZlLGEucmVwbGFjZWQmJmEuZXhwYW5kZWQpKSxDZSg1KSxSZSgibmdJZiIsYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLENl''@;'; put 'put ''KDEpLFJlKCJuZ0lmIiwhYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpfX1jb25zdCBQdmU9W1tbImNsci1kZy1yb3ctZGV0YWlsIl1dLFtbImNsci1kZy1jZWxsIl1dLFtbImNsci1kZy1hY3Rpb24tb3ZlcmZsb3ciXV1dLEZ2ZT1bImNsci1kZy1yb3ctZGV0YWlsIiwiY2xyLWRnLWNl''@;'; put 'put ''bGwiLCJjbHItZGctYWN0aW9uLW92ZXJmbG93Il0sSHZlPVsiZGF0YWdyaWRUYWJsZSJdLE52ZT1bInNjcm9sbGFibGVDb2x1bW5zIl0sVnZlPVsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiXSxCdmU9WyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiXSxqdmU9WyJkaXNwbGF5ZWRSb3dz''@;'; put 'put ''Il0senZlPVsiY2FsY3VsYXRpb25Sb3dzIl07ZnVuY3Rpb24gVXZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwyNCkseHQoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9amUoKTtyZXR1cm4gZi5hbGxTZWxlY3RlZD0hZi5hbGxTZWxlY3Rl''@;'; put 'put ''ZCxqdChoLnByZXZlbnREZWZhdWx0KCkpfSksbWUoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDI2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuYWxsU2VsZWN0ZWQ9aCl9KSx5ZSgpLG1lKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjgpLE5lKDUp''@;'; put 'put ''LHllKCkoKSgpLHF0KDYsImRpdiIsMjkpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKCk7Q2UoMiksUmUoImlkIixhLnNlbGVjdEFsbElkKSgibmdNb2RlbCIsYS5hbGxTZWxlY3RlZCksVHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCksQ2UoMSksUmUoImZv''@;'; put 'put ''ciIsYS5zZWxlY3RBbGxJZCksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKX19ZnVuY3Rpb24gWnZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMCkscXQoMSwiZGl2IiwyOSkseWUoKSksMiZjJiZUcigiYXJpYS1sYWJlbCIsamUoKS5jbHJEZ1NpbmdsZVNlbGVjdGlv''@;'; put 'put ''bkFyaWFMYWJlbCl9ZnVuY3Rpb24gWXZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMSkscXQoMSwiZGl2IiwyOSkseWUoKSksMiZjJiZUcigiYXJpYS1sYWJlbCIsamUoKS5jbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwpfWZ1bmN0aW9uIFd2ZShjLGwpezEmYyYmKG1lKDAsImRpdiIs''@;'; put 'put ''MzIpLHF0KDEsImRpdiIsMjkpLHllKCkpLDImYyYmVHIoImFyaWEtbGFiZWwiLGplKCkuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCl9ZnVuY3Rpb24gR3ZlKGMsbCl7MSZjJiZxdCgwLCJjbHItZGctcGxhY2Vob2xkZXIiKX1mdW5jdGlvbiAkdmUoYyxsKXsxJmMmJihtZSgwLCJkaXYi''@;'; put 'put ''LDMzKSgxLCJjbHItc3Bpbm5lciIsMzQpLE5lKDIsIkxvYWRpbmciKSx5ZSgpKCkpfWNvbnN0IHF2ZT1bW1siY2xyLWRnLWFjdGlvbi1iYXIiXV0sW1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLFtbImNsci1kZy1mb290ZXIiXV0sW1siIiwiY2xySWZEZXRhaWwiLCIiXSxbImNsci1kZy1kZXRh''@;'; put 'put ''aWwiXV1dLEt2ZT1bImNsci1kZy1hY3Rpb24tYmFyIiwiY2xyLWRnLXBsYWNlaG9sZGVyIiwiY2xyLWRnLWZvb3RlciIsIltjbHJJZkRldGFpbF0sY2xyLWRnLWRldGFpbCJdLEp2ZT1bImFsbFNlbGVjdGVkIl07ZnVuY3Rpb24gUXZlKGMsbCl7aWYoMSZjJiYoenIoMCksbWUoMSwiaDIiKSxO''@;'; put 'put ''ZSgyKSx5ZSgpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSgyKTtDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1ucyl9fWZ1bmN0aW9uIGVfZShjLGwpe31mdW5jdGlvbiB0X2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13''@;'; put 'put ''cmFwcGVyIikoMiwiaW5wdXQiLDE0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKDIpLnRvZ2dsZUNvbHVtblN0YXRlKF8sIWgpKX0pLHllKCksbWUoMywibGFiZWwiKSxRZSg0LGVfZSwwLDAsIm5nLXRlbXBsYXRl''@;'; put 'put ''IiwxNSkseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUoMik7Q2UoMiksUmUoImRpc2FibGVkIixkLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhYS5oaWRkZW4pKCJuZ01vZGVsIiwhYS5oaWRkZW4pLENlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRpdGxl''@;'; put 'put ''VGVtcGxhdGVSZWYpfX1mdW5jdGlvbiBuX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDE2KSx4dCgiY2xyQWxsU2VsZWN0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLmFsbENvbHVtbnNTZWxlY3RlZCgp''@;'; put 'put ''KX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLG1yKCIgIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKX19ZnVuY3Rpb24gcl9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyKSgxLCJkaXYiLDMpKDIsImRpdiIsNCw1KSxOZSg0KSx5ZSgpLFFl''@;'; put 'put ''KDUsUXZlLDMsMSwibmctY29udGFpbmVyIiw2KSxrcig2KSxtZSg3LCJidXR0b24iLDcpLHF0KDgsImNkcy1pY29uIiw4KSxtZSg5LCJzcGFuIiw5KSxOZSgxMCkseWUoKSgpKCksbWUoMTEsInVsIiwxMCksUWUoMTIsdF9lLDUsMywibGkiLDExKSx5ZSgpLG1lKDEzLCJkaXYiLDEyKSxrcigx''@;'; put 'put ''NCwxKSxRZSgxNSxuX2UsMiwxLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDEzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgpO1JlKCJpZCIsYS5wb3BvdmVySWQpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiks''@;'; put 'put ''Q2UoNCksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuY3VzdG9tVG9nZ2xlVGl0bGUpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksQ2UoMSksVHIoInRpdGxlIixhLmNvbW1vblN0''@;'; put 'put ''cmluZ3Mua2V5cy5jbG9zZSksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmhpZGVhYmxlQ29sdW1uU3RhdGVzKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbiksQ2UoMyksUmUoIm5nSWYiLCFhLmN1c3RvbVRvZ2dsZUJ1dHRvbil9''@;'; put 'put ''fWNvbnN0IGlfZT1bW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIl1dXSxvX2U9WyJjbHItZGctY29sdW1uLXRvZ2dsZS10aXRsZSIsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdO2Z1bmN0aW9uIGxfZShjLGwpe2lm''@;'; put 'put ''KDEmYyYmKHpyKDApLG1lKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLHF0KDMsImlucHV0IiwzKSxtZSg0LCJsYWJlbCIpLE5lKDUpLHllKCksbWUoNiwic3BhbiIsNCksTmUoNykseWUoKSgpKCksWXIoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoNSksb3IoYS5zZWxl''@;'; put 'put ''Y3Rpb24uY3VycmVudC5sZW5ndGgpLENlKDIpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1bmN0aW9uIGNfZShjLGwpezEmYyYmcXQoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiKX1mdW5jdGlvbiB1X2UoYyxsKXtpZigxJmMmJih6cigwKSxrcigxLDEpLFFlKDIs''@;'; put 'put ''Y19lLDEsMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLDApLG1lKDMsImRpdiIsNSksa3IoNCwyKSx5ZSgpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDIpLFJlKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29sdW1ucyYmIWEudG9nZ2xlKX19Y29uc3QgZF9lPVtbWyJjbHItZGctcGFnaW5hdGlv''@;'; put 'put ''biJdXSxbWyJjbHItZGctY29sdW1uLXRvZ2dsZSJdXSwiKiJdLGhfZT1bImNsci1kZy1wYWdpbmF0aW9uIiwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLCIqIl07ZnVuY3Rpb24gZl9lKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQ7UmUoIm5nVmFsdWUiLGEpLENlKDEpLG9yKGEpfX1jb25zdCBwX2U9WyJjdXJyZW50UGFnZUlucHV0Il07ZnVuY3Rpb24gZ19lKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw0KSxrcigxLDEpLHllKCkpfWZ1bmN0aW9uIG1fZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImlu''@;'; put 'put ''cHV0IiwxNywxOCkseHQoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgzKS51cGRhdGVDdXJyZW50UGFnZShoKSl9KSgiYmx1ciIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKDMpLnVwZGF0ZUN1cnJlbnRQYWdlKGgpKX0pLHllKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPWplKDMpO1JlKCJzaXplIixhLnBhZ2UubGFzdC50b1N0cmluZygpLmxlbmd0aCkoInZhbHVlIixhLnBhZ2UuY3VycmVudCksVHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmN1cnJlbnRQYWdlKX19ZnVuY3Rpb24gdl9lKGMsbCl7aWYoMSZjJiYobWUoMCwi''@;'; put 'put ''c3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgzKTtDZSgxKSxvcihhLnBhZ2UuY3VycmVudCl9fWZ1bmN0aW9uIF9fZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNSkoMSwiYnV0dG9uIiw2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEp''@;'; put 'put ''LGp0KGplKDIpLnBhZ2UuY3VycmVudD0xKX0pLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkscXQoNCwiY2RzLWljb24iLDgpLHllKCksbWUoNSwiYnV0dG9uIiw5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgyKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5w''@;'; put 'put ''YWdlLmN1cnJlbnQtMSl9KSxtZSg2LCJzcGFuIiw3KSxOZSg3KSx5ZSgpLHF0KDgsImNkcy1pY29uIiwxMCkseWUoKSxRZSg5LG1fZSwyLDMsImlucHV0IiwxMSksUWUoMTAsdl9lLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMTIsRWMpLE5lKDEyLCIgXHhhMC9ceGEwIiksbWUoMTMsInNwYW4i''@;'; put 'put ''KSxOZSgxNCkseWUoKSxtZSgxNSwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoMik7cmV0dXJuIGp0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksbWUoMTYsInNwYW4iLDcpLE5lKDE3KSx5ZSgpLHF0KDE4LCJjZHMtaWNvbiIs''@;'; put 'put ''MTQpLHllKCksbWUoMTksImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDIpO3JldHVybiBqdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UubGFzdCl9KSxtZSgyMCwic3BhbiIsNyksTmUoMjEpLHllKCkscXQoMjIsImNkcy1pY29uIiwxNikseWUoKSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT0kaSgxMSksZD1qZSgyKTtDZSgxKSxSZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxDZSgyKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLENlKDIp''@;'; put 'put ''LFJlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksQ2UoMiksUmUoIm5nSWYiLCFkLmRpc2FibGVDdXJyZW50UGFn''@;'; put 'put ''ZUlucHV0KSgibmdJZkVsc2UiLGEpLENlKDQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy50b3RhbFBhZ2VzKSxDZSgxKSxvcihkLnBhZ2UubGFzdCksQ2UoMSksUmUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudD49ZC5wYWdlLmxhc3QpLFRyKCJhcmlhLWxhYmVsIixk''@;'; put 'put ''LmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksQ2UoMiksb3IoZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLENlKDIpLFJlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2Up''@;'; put 'put ''LENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19ZnVuY3Rpb24gYl9lKGMsbCl7aWYoMSZjJiYoenIoMCksUWUoMSxnX2UsMiwwLCJkaXYiLDEpLG1lKDIsImRpdiIsMiksa3IoMykseWUoKSxRZSg0LF9fZSwyMywxNiwiZGl2IiwzKSxZcigpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''amUoKTtDZSgxKSxSZSgibmdJZiIsYS5fcGFnZVNpemVDb21wb25lbnQpLENlKDMpLFJlKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24geV9lKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7enIoMCksbWUoMSwiZGl2IiwxOSksTmUoMikseWUoKSxtZSgzLCJkaXYiLDUpKDQsImJ1''@;'; put 'put ''dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxtZSg1LCJzcGFuIiw3KSxOZSg2KSx5ZSgpLHF0KDcsImNkcy1pY29uIiwxMCkseWUoKSxtZSg4LCJzcGFuIiksTmUoOSks''@;'; put 'put ''eWUoKSxtZSgxMCwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxtZSgxMSwic3BhbiIsNyksTmUoMTIpLHllKCkscXQoMTMsImNkcy1pY29uIiwxNCkseWUoKSgp''@;'; put 'put ''LFlyKCl9aWYoMiZjKXtjb25zdCBhPWplKCk7Q2UoMiksYjAoIiAiLGEucGFnZS5maXJzdEl0ZW0rMSwiLSIsYS5wYWdlLmxhc3RJdGVtKzEsIiAvICIsYS5wYWdlLnRvdGFsSXRlbXMsIiAiKSxDZSgyKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIs''@;'; put 'put ''YS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDMpLG9yKGEucGFnZS5jdXJyZW50KSxDZSgxKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50Pj1hLnBhZ2UubGFzdCksVHIoImFyaWEtbGFi''@;'; put 'put ''ZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0IHdfZT1bIioiLFtbImNsci1kZy1wYWdlLXNpemUiXV1dLENfZT1bIioiLCJjbHItZGctcGFnZS1zaXplIl07ZnVuY3Rpb24gU19lKGMsbCl7MSZj''@;'; put 'put ''JiZxdCgwLCJjZHMtaWNvbiIsNyksMiZjJiZUcigiZGlyZWN0aW9uIixqZSgpLmNhcmV0RGlyZWN0aW9uKX1mdW5jdGlvbiBNX2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiw4KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5z''@;'; put 'put ''dGFja1ZpZXdDaGFuZ2VkKX19ZnVuY3Rpb24geF9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSxrcigxLDIpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpO0h1KCJoZWlnaHQiLGEuZXhwYW5kZWQ/ImF1dG8iOjApLFRyKCJpZCIsYS5nZXRTdGFja0NoaWxkcmVuSWQoKSkoImFyaWEtbGFi''@;'; put 'put ''ZWxsZWRieSIsYS5sYWJlbGxlZEJ5SWQpfX1jb25zdCBFX2U9W1tbImNsci1zdGFjay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxrX2U9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl0sQV9lPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIqIl0s''@;'; put 'put ''VF9lPVsiY2xyLXN0YWNrLWhlYWRlciIsIioiXTtmdW5jdGlvbiBIX2UoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIE5fZShjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsSF9lLDEsMCwibmctY29udGFpbmVyIiwyKSxZcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1qZSgyKTtDZSgx''@;'; put 'put ''KSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGQuZ2V0Q29udGV4dChhKSl9fWZ1bmN0aW9uIFZfZShjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsTl9lLDIsMiwibmctY29udGFpbmVy''@;'; put 'put ''IiwxKSxZcigpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgxKSxSZSgibmdGb3JPZiIsKG51bGw9PWEucGFyZW50P251bGw6YS5wYXJlbnQuY2hpbGRyZW4pfHxhLmNoaWxkcmVuKX19Y29uc3QgQl9lPVsiY29udGVudENvbnRhaW5lciJdO2Z1bmN0aW9uIGpfZShjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1WbigpO21lKDAsImJ1dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLmV4cGFuZFNlcnZpY2UudG9nZ2xlKCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxxdCgxLCJjZHMtaWNv''@;'; put 'put ''biIsMTApLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksVHIoImRpcmVjdGlvbiIsYS5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKX19ZnVuY3Rpb24gel9lKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxMSkscXQoMSwic3BhbiIsMTIpLHllKCkpfWZ1bmN0aW9u''@;'; put 'put ''IFVfZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTMpKDEsImlucHV0IiwxNCkseHQoImNoYW5nZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCk7cmV0dXJuIGp0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlvbihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSko''@;'; put 'put ''ImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSx5ZSgpLHF0KDIsImxhYmVsIiwxNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9amUoKTtDZSgxKSxYMigiaWQiLCIiLGEubm9kZUlkLCItY2hlY2siKSxSZSgiY2hlY2tlZCIsYS5fbW9kZWwu''@;'; put 'put ''c2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuSU5ERVRFUk1JTkFURSksQ2UoMSksWDIoImZvciIsIiIsYS5ub2RlSWQsIi1jaGVjayIpfX1mdW5jdGlvbiBaX2UoYyxsKXsxJmMmJiht''@;'; put 'put ''ZSgwLCJzcGFuIiksTmUoMSwiIHNlbGVjdGVkIikseWUoKSl9ZnVuY3Rpb24gWV9lKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiB1bnNlbGVjdGVkIikseWUoKSl9ZnVuY3Rpb24gV19lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNiksUWUoMSxaX2UsMiwwLCJzcGFuIiwxNyks''@;'; put 'put ''UWUoMixZX2UsMiwwLCJzcGFuIiwxNykseWUoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksUmUoIm5nSWYiLGEuYXJpYVNlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuYXJpYVNlbGVjdGVkKX19Y29uc3QgR19lPVsiKiIsW1siY2xyLXRyZWUtbm9kZSJdXSxbWyIiLCJjbHJJZkV4cGFu''@;'; put 'put ''ZGVkIiwiIl1dXSwkX2U9WyIqIiwiY2xyLXRyZWUtbm9kZSIsIltjbHJJZkV4cGFuZGVkXSJdO2Z1bmN0aW9uIHFfZShjLGwpezEmYyYmcXQoMCwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMSksMiZjJiZSZSgiY2hpbGRyZW4iLGplKCkuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi5yb290''@;'; put 'put ''KX1mdW5jdGlvbiBLX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoMikuY2xvc2UoKSl9KSxxdCgxLCJjZHMtaWNvbiIsNSkseWUoKX0yJmMmJlRyKCJhcmlhLWxhYmVsIixqZSgyKS5j''@;'; put 'put ''bHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCl9ZnVuY3Rpb24gWF9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGtyKDIpLHllKCksUWUoMyxLX2UsMiwxLCJidXR0b24iLDMpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpO2hyKCJhbGVydC1oaWRkZW4iLGEuaGlkZGVuKSgi''@;'; put 'put ''YWxlcnQtc20iLGEuaXNTbWFsbCkoImFsZXJ0LWFwcC1sZXZlbCIsYS5pc0FwcExldmVsKSxSZSgibmdDbGFzcyIsYS5hbGVydENsYXNzKSxDZSgzKSxSZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9uIEpfZShjLGwpezEmYyYmcXQoMCwiY2xyLWFsZXJ0cy1wYWdlciIsMSksMiZjJiZS''@;'; put 'put ''ZSgiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLGplKCkuY3VycmVudEFsZXJ0SW5kZXgpfWNvbnN0IFFfZT1bW1siY2xyLWFsZXJ0Il1dXSxlYmU9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiByYmUoYyxsKXsxJmMmJmtyKDApfWNvbnN0IGliZT1bInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiXTtmdW5j''@;'; put 'put ''dGlvbiBvYmUoYyxsKXtpZigxJmMmJihtZSgwLCJzZWN0aW9uIiwxKSxrcigxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKTtocigiYWN0aXZlIixhLmFjdGl2ZSksUmUoImlkIixhLnRhYkNvbnRlbnRJZCkoImhpZGRlbiIsIWEuYWN0aXZlKSxUcigiYXJpYS1sYWJlbGxlZGJ5IixhLmFyaWFM''@;'; put 'put ''YWJlbGxlZEJ5KSgiYXJpYS1oaWRkZW4iLCFhLmFjdGl2ZSl9fWNvbnN0IHNiZT1bInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIl07ZnVuY3Rpb24gYWJlKGMsbCl7aWYoMSZjJiYoenIoMCksbWUoMSwibGkiLDQpLGphKDIsNSkseWUoKSxZcigpKSwyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGlj''@;'; put 'put ''aXQ7Q2UoMiksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfX1mdW5jdGlvbiBsYmUoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLGFiZSwzLDEsIm5nLWNvbnRhaW5lciIsMiksWXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUo''@;'; put 'put ''KTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmIWEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIGNiZShjLGwpezEmYyYmamEoMCw1KSwyJmMmJlJlKCJuZ1RlbXBsYXRlT3V0bGV0IixqZSgpLiRpbXBsaWNpdC50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9ZnVuY3Rp''@;'; put 'put ''b24gdWJlKGMsbCl7aWYoMSZjJiYoenIoMCksUWUoMSxjYmUsMSwxLCJuZy1jb250YWluZXIiLDEzKSxZcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1qZSgzKTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gZGJlKGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMikseHQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLGZmKSgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEp''@;'; put 'put ''LGplKCk7Y29uc3QgZj0kaSg0KTtyZXR1cm4ganQoamUoKS5jbG9zZU9uT3V0c2lkZUNsaWNrKGgsZikpfSwhMSxmZikoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLFFlKDEsdWJlLDIsMSwibmctY29udGFpbmVyIiwx''@;'; put 'put ''KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1qZSgyKTtDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJMaW5rRGlyZWN0aXZlcyl9fWZ1bmN0aW9uIGhiZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO3pyKDApLG1lKDEsImRpdiIsNikoMiwibGkiLDcpKDMsImJ1dHRvbiIsOCw5KSx4dCgibW91c2Vk''@;'; put 'put ''b3duIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLl9tb3VzZWRvd249ITApfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLm9wZW5PdmVyZmxvd09uRm9jdXMoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkudG9nZ2xl''@;'; put 'put ''T3ZlcmZsb3dPbkNsaWNrKCkpfSkscXQoNSwiY2RzLWljb24iLDEwKSx5ZSgpKCksUWUoNixkYmUsMiwxLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDExKSx5ZSgpLFlyKCl9aWYoMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksaHIoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxDZSgy''@;'; put 'put ''KSxocigiYWN0aXZlIixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cpKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksVHIoInRhYmluZGV4IixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cmJiFhLnRvZ2dsZVNlcnZpY2Uub3Blbj8wOi0xKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUp''@;'; put 'put ''LENlKDIpLFRyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMubW9yZSksQ2UoMSksUmUoIm5nSWYiLGEudG9nZ2xlU2VydmljZS5vcGVuKX19ZnVuY3Rpb24gZmJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEJ0KGEpLGp0KGplKCkudG9nZ2xlQnlCdXR0b24oKSl9KSxxdCgxLCJjZHMtaWNvbiIsNCkseWUoKX1pZigyJmMpe2NvbnN0IGE9amUoKTtocigib24tY29sbGFwc2UiLGEuY29sbGFwc2VkKSxUcigiYXJpYS1leHBhbmRlZCIsYS5hcmlhRXhwYW5kZWQpKCJhcmlhLWxhYmVsIixhLmNv''@;'; put 'put ''bW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksQ2UoMSksVHIoImRpcmVjdGlvbiIsYS5jb2xsYXBzZWQ/InJpZ2h0IjoibGVmdCIpKCJ0aXRsZSIsYS5jb2xsYXBzZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kOmEuY29tbW9uU3RyaW5ncy5rZXlzLmNvbGxhcHNlKX19''@;'; put 'put ''ZnVuY3Rpb24gcGJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuY29sbGFwc2VkPSExKX0pLHllKCl9MiZjJiZUcigiYXJpYS1sYWJlbCIsamUoKS5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''dmVydGljYWxOYXZUb2dnbGUpfWNvbnN0IHZiZT1bImNsclZlcnRpY2FsTmF2TGluayIsIiJdLF9iZT1bW1siIiwiY2xyVmVydGljYWxOYXZJY29uIiwiIl1dLCIqIl0sYmJlPVsiW2NsclZlcnRpY2FsTmF2SWNvbl0iLCIqIl07ZnVuY3Rpb24geWJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu''@;'; put 'put ''KCk7bWUoMCwiYnV0dG9uIiwxMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgyKS5jbG9zZSgpKX0pLHF0KDEsImNkcy1pY29uIiwxMikseWUoKX1pZigyJmMpe2NvbnN0IGE9amUoMik7VHIoImFyaWEtbGFiZWwiLGEuY2xvc2VCdXR0b25BcmlhTGFiZWx8fGEu''@;'; put 'put ''Y29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19ZnVuY3Rpb24gd2JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLHh0KCJAZmFkZURvd24uZG9uZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuZmFkZURvbmUoaCkpfSksbWUoMiwi''@;'; put 'put ''ZGl2IiwzKSxOZSgzKSx5ZSgpLG1lKDQsImRpdiIsNCksa3IoNSksbWUoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpKDgsImRpdiIsNyksa3IoOSwxKSx5ZSgpLFFlKDEwLHliZSwyLDEsImJ1dHRvbiIsOCkseWUoKSxtZSgxMSwiZGl2Iiw5KSxrcigxMiwyKSx5ZSgpLGtyKDEzLDMpLHllKCkoKSxt''@;'; put 'put ''ZSgxNCwiZGl2IiwzKSxOZSgxNSkseWUoKSgpLG1lKDE2LCJkaXYiLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpO3JldHVybiBqdChoLnN0YXRpY0JhY2tkcm9wfHxoLmNsb3NlKCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1qZSgpO0NlKDEpLGhyKCJt''@;'; put 'put ''b2RhbC1zbSIsInNtIj09YS5zaXplKSgibW9kYWwtbGciLCJsZyI9PWEuc2l6ZSkoIm1vZGFsLXhsIiwieGwiPT1hLnNpemUpLFJlKCJAZmFkZURvd24iLGEuc2tpcEFuaW1hdGlvbiksVHIoImFyaWEtaGlkZGVuIiwhYS5fb3BlbikoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5KSxD''@;'; put 'put ''ZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksQ2UoNSkseGMoImlkIixhLm1vZGFsSWQpLENlKDIpLFJlKCJuZ0lmIixhLmNsb3NhYmxlKSxDZSg1KSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpLENlKDEpLFJlKCJAZmFkZSIs''@;'; put 'put ''dm9pZCAwKX19Y29uc3QgQ2JlPVtbWyIiLDgsIm1vZGFsLW5hdiJdXSxbWyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtbIiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3RlciJdXV0sU2JlPVsiLm1vZGFsLW5hdiIsIi5tb2RhbC10aXRsZSIsIi5tb2RhbC1ib2R5IiwiLm1vZGFs''@;'; put 'put ''LWZvb3RlciJdO2xldCBrYT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWljb24iXV19KSxjfSkoKSxxcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2RzLWljb24iXV19KSxjfSkoKSxzYT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIG1ie312YXIgVXU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ERUZBVUxUPTBdPSJERUZBVUxUIixjW2MuTE9BRElORz0xXT0iTE9BRElORyIsY1tjLlNVQ0NFU1M9Ml09IlNV''@;'; put 'put ''Q0NFU1MiLGNbYy5FUlJPUj0zXT0iRVJST1IiLGN9KFV1fHx7fSk7bGV0IFp1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5saXN0ZW5lcj1hLHRoaXMuX2xvYWRpbmdTdGF0ZT1VdS5ERUZBVUxUfWdldCBsb2FkaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ1N0YXRl''@;'; put 'put ''fXNldCBsb2FkaW5nU3RhdGUoYSl7ITA9PT1hP2E9VXUuTE9BRElORzphfHwoYT1VdS5ERUZBVUxUKSxhIT09dGhpcy5fbG9hZGluZ1N0YXRlJiYodGhpcy5fbG9hZGluZ1N0YXRlPWEsdGhpcy5saXN0ZW5lciYmdGhpcy5saXN0ZW5lci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSkpfW5nT25EZXN0''@;'; put 'put ''cm95KCl7dGhpcy5sb2FkaW5nU3RhdGU9VXUuREVGQVVMVH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQobWIsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJMb2FkaW5nIiwiIl1dLGlucHV0czp7bG9hZGlu''@;'; put 'put ''Z1N0YXRlOlsiY2xyTG9hZGluZyIsImxvYWRpbmdTdGF0ZSJdfX0pLGN9KSgpLFl1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGFibGU9MCx0aGlzLl9sb2FkaW5nPSExLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2V4cGFuZENoYW5nZT1uZXcgYmV9Z2V0IGxvYWRp''@;'; put 'put ''bmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhhKXsoYT0hIWEpIT09dGhpcy5fbG9hZGluZyYmKHRoaXMuX2xvYWRpbmc9YSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0''@;'; put 'put ''aGlzLl9leHBhbmRlZD1hLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoKXt0aGlzLmV4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7''@;'; put 'put ''dGhpcy5sb2FkaW5nPWE9PT1VdS5MT0FESU5HfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxHYmU9MDtmdW5jdGlvbiBEYygpe3JldHVybiJjbHItaWQt''@;'; put 'put ''IitHYmUrK31sZXQga0o9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9u''@;'; put 'put ''Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5j''@;'; put 'put ''YXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCk7dmFyIERmPWZ1bmN0aW9uKGMpe3JldHVybiBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShEZnx8e30pO2NvbnN0IGEyPSIwLjJzIGVhc2UtaW4tb3V0Iiwk''@;'; put 'put ''YmU9W2ExKCJza2lwSW5pdGlhbFJlbmRlciIsW2hjKCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtoYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSldKV0seEY9KGExKCJza2lwSW5pdGlhbFJlbmRlciIsW2hj''@;'; put 'put ''KCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtoYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSksaGMoIiogPT4gdm9pZCIsW19zKHtkaXNwbGF5OiJibG9jayJ9KSxydShhMixfcyh7aGVpZ2h0OjAsZGlzcGxh''@;'; put 'put ''eToibm9uZSJ9KSldKV0pLHtvcGVuOiJPcGVuIixjbG9zZToiQ2xvc2UiLHNob3c6IlNob3ciLGhpZGU6IkhpZGUiLGV4cGFuZDoiRXhwYW5kIixjb2xsYXBzZToiQ29sbGFwc2UiLG1vcmU6Ik1vcmUiLHNlbGVjdDoiU2VsZWN0IixzZWxlY3RBbGw6IlNlbGVjdCBBbGwiLHByZXZpb3VzOiJQ''@;'; put 'put ''cmV2aW91cyIsbmV4dDoiTmV4dCIsY3VycmVudDoiSnVtcCB0byBjdXJyZW50IixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIixyb3dBY3Rpb25zOiJBdmFpbGFibGUgYWN0aW9ucyIscGlja0NvbHVtbnM6Ik1hbmFnZSBDb2x1''@;'; put 'put ''bW5zIixzaG93Q29sdW1uczoiU2hvdyBDb2x1bW5zIixzb3J0Q29sdW1uOiJTb3J0IENvbHVtbiIsZmlyc3RQYWdlOiJGaXJzdCBQYWdlIixsYXN0UGFnZToiTGFzdCBQYWdlIixuZXh0UGFnZToiTmV4dCBQYWdlIixwcmV2aW91c1BhZ2U6IlByZXZpb3VzIFBhZ2UiLGN1cnJlbnRQYWdlOiJD''@;'; put 'put ''dXJyZW50IFBhZ2UiLHRvdGFsUGFnZXM6IlRvdGFsIFBhZ2VzIixmaWx0ZXJJdGVtczoiRmlsdGVyIGl0ZW1zIixtaW5WYWx1ZToiTWluIHZhbHVlIixtYXhWYWx1ZToiTWF4IHZhbHVlIixtb2RhbENvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIE1vZGFsIENvbnRlbnQiLG1vZGFsQ29udGVu''@;'; put 'put ''dEVuZDoiRW5kIG9mIE1vZGFsIENvbnRlbnQiLHNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uOiJTaG93IG9yIGhpZGUgY29sdW1ucyBtZW51IixhbGxDb2x1bW5zU2VsZWN0ZWQ6IkFsbCBjb2x1bW5zIHNlbGVjdGVkIixzaWducG9zdFRvZ2dsZToiU2lnbnBvc3QgVG9nZ2xlIixzaWducG9z''@;'; put 'put ''dENsb3NlOiJTaWducG9zdCBDbG9zZSIsbG9hZGluZzoiTG9hZGluZyIsZGV0YWlsUGFuZVN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIsZGV0YWlsUGFuZUVuZDoiRW5kIG9mIHJvdyBkZXRhaWxzIixzaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6IlNpbmdsZSBzZWxlY3Rpb24gaGVhZGVy''@;'; put 'put ''IixzaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJTaW5nbGUgYWN0aW9uYWJsZSBoZWFkZXIiLGRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6IlRvZ2dsZSBtb3JlIHJvdyBjb250ZW50IixkYXRhZ3JpZEZpbHRlckFyaWFMYWJlbDoiVG9nZ2xlIHtDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRG''@;'; put 'put ''aWx0ZXJEaWFsb2dBcmlhTGFiZWw6IkZpbHRlciBkaWFsb2ciLGNvbHVtblNlcGFyYXRvckFyaWFMYWJlbDoiQ29sdW1uIHJlc2l6ZSBoYW5kbGUiLGNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uOiJVc2UgbGVmdCBvciByaWdodCBrZXkgdG8gcmVzaXplIHRoZSBjb2x1bW4iLGFsZXJ0Q2xv''@;'; put 'put ''c2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIGFsZXJ0IixhbGVydE5leHRBbGVydEFyaWFMYWJlbDoiTmV4dCBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yge0NPVU5UfSIsYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsOiJQcmV2aW91cyBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yg''@;'; put 'put ''e0NPVU5UfSIsZGF0ZXBpY2tlckRpYWxvZ0xhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZToiVG9nZ2xlIGRhdGVwaWNrZXIiLGRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsOiJDaGFu''@;'; put 'put ''Z2UgZGF0ZSwge1NFTEVDVEVEX0RBVEV9IixkYXRlcGlja2VyUHJldmlvdXNNb250aDoiUHJldmlvdXMgbW9udGgiLGRhdGVwaWNrZXJDdXJyZW50TW9udGg6IkN1cnJlbnQgbW9udGgiLGRhdGVwaWNrZXJOZXh0TW9udGg6Ik5leHQgbW9udGgiLGRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZToi''@;'; put 'put ''UHJldmlvdXMgZGVjYWRlIixkYXRlcGlja2VyTmV4dERlY2FkZToiTmV4dCBkZWNhZGUiLGRhdGVwaWNrZXJDdXJyZW50RGVjYWRlOiJDdXJyZW50IGRlY2FkZSIsZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dDoiU2VsZWN0IG1vbnRoLCB0aGUgY3VycmVudCBtb250aCBpcyB7Q0FMRU5EQVJf''@;'; put 'put ''TU9OVEh9IixkYXRlcGlja2VyU2VsZWN0WWVhclRleHQ6IlNlbGVjdCB5ZWFyLCB0aGUgY3VycmVudCB5ZWFyIGlzIHtDQUxFTkRBUl9ZRUFSfSIsZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWw6IntGVUxMX0RBVEV9IC0gU2VsZWN0ZWQiLHN0YWNrVmlld0NoYW5nZWQ6IlZhbHVlIGNoYW5nZWQu''@;'; put 'put ''IixyZXNwb25zaXZlTmF2VG9nZ2xlT3BlbjoiTmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6Ik5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiTmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dDbG9z''@;'; put 'put ''ZToiTmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51Iix2ZXJ0aWNhbE5hdkdyb3VwVG9nZ2xlOiJUb2dnbGUgdmVydGljYWwgbmF2aWdhdGlvbiBncm91cCIsdmVydGljYWxOYXZUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIix0aW1lbGluZVN0ZXBOb3RTdGFydGVkOiJOb3Qgc3Rh''@;'; put 'put ''cnRlZCIsdGltZWxpbmVTdGVwQ3VycmVudDoiQ3VycmVudCIsdGltZWxpbmVTdGVwU3VjY2VzczoiQ29tcGxldGVkIix0aW1lbGluZVN0ZXBFcnJvcjoiRXJyb3IiLHRpbWVsaW5lU3RlcFByb2Nlc3Npbmc6IkluIHByb2dyZXNzIixjb21ib2JveERlbGV0ZToiRGVsZXRlIHNlbGVjdGVkIG9w''@;'; put 'put ''dGlvbiIsY29tYm9ib3hTZWFyY2hpbmc6J1NlYXJjaGluZyBmb3IgbWF0Y2hlcyBmb3IgIntJTlBVVH0iJyxjb21ib2JveFNlbGVjdGlvbjoiU2VsZWN0aW9uIixjb21ib2JveFNlbGVjdGVkOiJTZWxlY3RlZCIsY29tYm9ib3hOb1Jlc3VsdHM6Ik5vIHJlc3VsdHMiLGNvbWJvYm94T3Blbjoi''@;'; put 'put ''U2hvdyBvcHRpb25zIixkYXRhZ3JpZEV4cGFuZGFibGVCZWdpbm5pbmdPZjoiQmVnaW5uaW5nIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVFbmRPZjoiRW5kIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVSb3dDb250ZW50OiJFeHBhbmRhYmxlIHJvdyBjb250ZW50IixkYXRhZ3JpZEV4cGFuZGFibGVS''@;'; put 'put ''b3dzSGVscGVyVGV4dDoiU2NyZWVuIHJlYWRlciB0YWJsZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgZm9yIHZpZXdpbmcgZXhwYW5kZWQgY29udGVudCwgcGxlYXNlIHVzZSB5b3VyIHNjcmVlbiByZWFkZXIncyBicm93c2UgbW9kZSB0byByZWFkIHRoZSBjb250ZW50IGV4cG9zZWQgYnkgdGhp''@;'; put 'put ''cyBidXR0b24iLHdpemFyZFN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHdpemFyZFN0ZXBFcnJvcjoiRXJyb3IiLHdpemFyZFN0ZXBuYXZBcmlhTGFiZWw6IlN0ZXAgbmF2aWdhdGlvbiIscGFzc3dvcmRIaWRlOiJIaWRlIHBhc3N3b3JkIixwYXNzd29yZFNob3c6IlNob3cgcGFzc3dvcmQiLHNl''@;'; put 'put ''bGVjdGVkUm93czoiU2VsZWN0ZWQgcm93cyJ9KTtsZXQgRXM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0cmluZ3M9eEZ9Z2V0IGtleXMoKXtyZXR1cm4gdGhpcy5fc3RyaW5nc31sb2NhbGl6ZShhKXt0aGlzLl9zdHJpbmdzPXsuLi50aGlzLl9zdHJpbmdzLC4uLmF9fXBh''@;'; put 'put ''cnNlKGEsZD17fSl7Y29uc3QgaD1PYmplY3Qua2V5cyhkKTtsZXQgZj1hO3JldHVybiBoLmxlbmd0aCYmaC5mb3JFYWNoKF89PntmPWYucmVwbGFjZShgeyR7X319YCxkW19dKX0pLGZ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBy''@;'; put 'put ''b3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3ZhciB2Yj1mdW5jdGlvbihjKXtyZXR1cm4gYy5EZWZhdWx0PSJkZWZhdWx0IixjLk11bHRpPSJtdWx0aSIsY30odmJ8fHt9KTtsZXQgS2JlPTA7Y2xhc3MgWGJle2NvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSl7dGhpcy5pZD1sLHRoaXMuYWNjb3JkaW9uSWQ9YSx0aGlzLnN0YXR1cz1EZi5JbmFjdGl2ZSx0aGlzLmluZGV4PW51bGwsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLm9wZW49ITEsdGhpcy50ZW1wbGF0ZUlkPWAke3RoaXMuaWR9LSR7dGhpcy5hY2NvcmRpb25JZH1gfX1jbGFzcyBBSntj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9dmIuRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PUtiZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFuZWxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGw9PnRoaXMuX3BhbmVsc1tsXSl9c2V0U3RyYXRlZ3kobCl7''@;'; put 'put ''dGhpcy5zdHJhdGVneT1sfXVwZGF0ZVBhbmVsT3JkZXIobCl7bC5mb3JFYWNoKChhLGQpPT50aGlzLl9wYW5lbHNbYV0uaW5kZXg9ZCksdGhpcy5yZW1vdmVPbGRQYW5lbHMobCl9YWRkUGFuZWwobCxhPSExKXt0aGlzLl9wYW5lbHNbbF09bmV3IFhiZShsLHRoaXMuYWNjb3JkaW9uQ291bnQp''@;'; put 'put ''LHRoaXMuX3BhbmVsc1tsXS5vcGVuPWF9dG9nZ2xlUGFuZWwobCxhKXtjb25zdCBoPXZvaWQgMCE9PWE/YTohdGhpcy5fcGFuZWxzW2xdLm9wZW47aCYmdGhpcy5zdHJhdGVneT09PXZiLkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1ofWRpc2Fi''@;'; put 'put ''bGVQYW5lbChsLGEpe3RoaXMuX3BhbmVsc1tsXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhpcy5wYW5lbHMuZm9yRWFjaChsPT50aGlzLl9wYW5lbHNbbC5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGwpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9PT1sLmZpbmQo''@;'; put 'put ''ZD0+ZD09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgX2I9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWNjb3JkaW9uPW5ldyBBSix0aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyBUZSh0aGlzLmFjY29yZGlvbi5wYW5lbHMpfWdldFBh''@;'; put 'put ''bmVsQ2hhbmdlcyhhKXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKE1lKGQ9PmQuZmluZChoPT5oLmlkPT09YSkpKX1zZXRTdHJhdGVneShhKXt0aGlzLmFjY29yZGlvbi5zZXRTdHJhdGVneShhKX1hZGRQYW5lbChhLGQ9ITEpe3RoaXMuYWNjb3JkaW9uLmFkZFBhbmVsKGEsZCks''@;'; put 'put ''dGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRl''@;'; put 'put ''ZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIoYSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihhKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRpb24ucGFuZWxzKX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5hY2NvcmRp''@;'; put 'put ''b25TZXJ2aWNlPWQsdGhpcy5pZkV4cGFuZFNlcnZpY2U9aCx0aGlzLmRpc2FibGVkPSExLHRoaXMucGFuZWxPcGVuPSExLHRoaXMucGFuZWxPcGVuQ2hhbmdlPW5ldyBFcix0aGlzLkFjY29yZGlvblN0YXR1cz1EZix0aGlzLmlzQWNjb3JkaW9uPSEwLHRoaXMuX2lkPURjKCl9Z2V0IGlkKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hfW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQpLnBpcGUoemMoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2Uu''@;'; put 'put ''YWRkUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0''@;'; put 'put ''aGlzLnBhbmVsJiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2Fi''@;'; put 'put ''bGVkJiZhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlzYWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dn''@;'; put 'put ''bGVQYW5lbCh0aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8i''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFjY29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1jb250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25IZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9ZW1pdFBhbmVsQ2hhbmdl''@;'; put 'put ''KGEpe2Eub3BlbiE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW5DaGFuZ2UuZW1pdChhLm9wZW4pLHRoaXMucGFuZWxPcGVuPWEub3BlbiksYS5vcGVuJiYodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKSh0dChFcyksdHQoX2IpLHR0KFl1KSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxrSiw0KSwyJmEpe2xldCBmO3NpKGY9YWko''@;'; put 'put ''KSkmJihkLmFjY29yZGlvbkRlc2NyaXB0aW9uPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJjbHItYWNjb3JkaW9uLXBhbmVsIiwhMCl9LGlucHV0czp7ZGlzYWJsZWQ6WyJjbHJBY2NvcmRpb25QYW5lbERpc2FibGVkIiwiZGlzYWJsZWQiXSxw''@;'; put 'put ''YW5lbE9wZW46WyJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxmZWF0dXJlczpbdGkoW1l1XSksdmFdLG5nQ29udGVudFNlbGVjdG9yczp4SixkZWNsczoyLHZhcnM6Myxj''@;'; put 'put ''b25zdHM6W1s0LCJuZ0lmIl0sWyJhcmlhLWxpdmUiLCJhc3NlcnRpdmUiLCJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIs''@;'; put 'put ''MywiaWQiLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJoZWFkZXJCdXR0b24iLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2xyLWFjY29yZGlvbi1zdGF0dXMiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCIsMSwiY2xyLWFjY29yZGlvbi1hbmdsZSJdLFsxLCJjbHItYWNj''@;'; put 'put ''b3JkaW9uLW51bWJlciJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNsci1hY2NvcmRpb24tZXJyb3ItaWNvbiJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJjbHItYWNjb3JkaW9uLWNvbXBsZXRlLWlj''@;'; put 'put ''b24iXSxbInJvbGUiLCJyZWdpb24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24tY29udGVudCIsNCwibmdJZiJdLFsiYXJpYS1saXZlIiwiYXNzZXJ0aXZlIiwxLCJjbHItc3Itb25seSJdLFsxLCJjbHItYWNjb3JkaW9u''@;'; put 'put ''LWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoTUopLFFlKDAsRzhlLDE5LDE4LCJuZy1jb250YWluZXIiLDApLGJhKDEsImFzeW5jIikpLDImYSYmUmUoIm5nSWYiLFVsKDEsMSxkLnBhbmVsKSl9LGRl''@;'; put 'put ''cGVuZGVuY2llczpbWmksdWMscXMsY3hdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246JGJlfSxjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLFRKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRo''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3RoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVy''@;'; put 'put ''Vmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2''@;'; put 'put ''aWNlLnNldFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD92Yi5NdWx0aTp2Yi5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZShjcCh0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRl''@;'; put 'put ''UGFuZWxPcmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5pZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoX2IpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpm''@;'; put 'put ''dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLHZFLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbImNsckFj''@;'; put 'put ''Y29yZGlvbk11bHRpUGFuZWwiLCJtdWx0aVBhbmVsIl19LGZlYXR1cmVzOlt0aShbX2JdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rp''@;'; put 'put ''b246MH0pLGN9KSgpLERKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sbmdD''@;'; put 'put ''b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLElKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImNsci1hY2NvcmRpb24tdGl0bGUi''@;'; put 'put ''LCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLHk4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRp''@;'; put 'put ''c2FibGVDaG9jb2xhdGVDaGVjaz0hMSx0aGlzLl9jaG9jb2xhdGU9bmV3IGJlfWdldCBjaG9jb2xhdGUoKXtyZXR1cm4gdGhpcy5fY2hvY29sYXRlLmFzT2JzZXJ2YWJsZSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrfHx0aGlzLl9jaG9jb2xhdGUu''@;'; put 'put ''bmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLHc4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnN1YnNjcmlwdGlvbj1kLmNob2NvbGF0ZS5zdWJzY3JpYmUoKCk9''@;'; put 'put ''Pnt0aGlzLmxhdGVzdEZsYXZvciE9PXRoaXMuZmxhdm9yJiYoZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITAsYS5kZXRlY3RDaGFuZ2VzKCksZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5sYXRlc3RGbGF2b3I9dGhpcy5mbGF2b3J9''@;'; put 'put ''bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSksdHQoeTgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLEVGPSgoKT0+e2NsYXNzIGMgZXh0ZW5k''@;'; put 'put ''cyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGZlYXR1cmVzOltlb119KSxjfSko''@;'; put 'put ''KSxMSj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzh7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWFjY29yZGlvbi1wYW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBjbHItYWNjb3JkaW9uIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZD1ofWdl''@;'; put 'put ''dCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFVhKSx0dChFRiw4KSx0dChZdSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBh''@;'; put 'put ''bmVsIl1dLGZlYXR1cmVzOltlb119KSxjfSkoKSxSSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoaDgsbzEsczEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1''@;'; put 'put ''aW5qPW1pKHtpbXBvcnRzOltbb28sc2FdXX0pLGN9KSgpLG55ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2EsUkpdLFJK''@;'; put 'put ''XX0pLGN9KSgpO3ZhciB3bz1mdW5jdGlvbihjKXtyZXR1cm4gYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1VwPSJBcnJvd1VwIixjLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGMuQXJyb3dEb3duPSJBcnJvd0Rvd24iLGMuQmFja3NwYWNlPSJCYWNrc3BhY2UiLGMuVGFiPSJUYWIi''@;'; put 'put ''LGMuRW50ZXI9IkVudGVyIixjLkVzY2FwZT0iRXNjYXBlIixjLlNwYWNlPSJTcGFjZSIsYy5TcGFjZWJhcj0iICIsYy5Ib21lPSJIb21lIixjLkVuZD0iRW5kIixjfSh3b3x8e30pLEc1PWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFycm93RG93bj0iRG93biIsYy5BcnJv''@;'; put 'put ''d1JpZ2h0PSJSaWdodCIsYy5BcnJvd0xlZnQ9IkxlZnQiLGMuU3BhY2U9IlNwYWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShHNXx8e30pO2Z1bmN0aW9uIGwyKGMpe3JldHVybiBjPT09d28uQXJyb3dVcHx8Yz09PUc1LkFycm93VXA/d28uQXJyb3dVcDpjPT09d28uQXJyb3dEb3dufHxjPT09''@;'; put 'put ''RzUuQXJyb3dEb3duP3dvLkFycm93RG93bjpjPT09d28uQXJyb3dSaWdodHx8Yz09PUc1LkFycm93UmlnaHQ/d28uQXJyb3dSaWdodDpjPT09d28uQXJyb3dMZWZ0fHxjPT09RzUuQXJyb3dMZWZ0P3dvLkFycm93TGVmdDpjPT09d28uU3BhY2V8fGM9PT1HNS5TcGFjZT93by5TcGFjZTpjPT09''@;'; put 'put ''d28uRXNjYXBlfHxjPT09RzUuRXNjYXBlP3dvLkVzY2FwZTpjfWZ1bmN0aW9uIFRGKGMpe2NvbnN0IGw9bDIoYy5rZXkpOyhsPT09d28uQXJyb3dVcHx8bD09PXdvLkFycm93RG93bnx8bD09PXdvLkFycm93TGVmdHx8bD09PXdvLkFycm93UmlnaHQpJiZjLnByZXZlbnREZWZhdWx0KCl9bGV0''@;'; put 'put ''IEtzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2U9bmV3IGJlLHRoaXMuX29wZW5FdmVudENoYW5nZT1uZXcgYmUsdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IGJlfWdldCBvcGVuQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5DaGFu''@;'; put 'put ''Z2UuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9c2V0IG9wZW5FdmVudChhKXt0aGlzLl9vcGVuRXZlbnQ9YSx0aGlzLl9vcGVuRXZlbnRDaGFuZ2UubmV4dChhKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3Ro''@;'; put 'put ''aXMuX29wZW4hPT0oYT0hIWEpJiYodGhpcy5fb3Blbj1hLHRoaXMuX29wZW5DaGFuZ2UubmV4dChhKSl9Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdldCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUo''@;'; put 'put ''KX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlV2l0aEV2ZW50KGEpe1RGKGEpLHRoaXMub3BlbkV2ZW50PWEsdGhpcy5vcGVuPSF0aGlzLm9wZW59cG9wb3ZlckFsaWduZWRFbWl0KGEpe3RoaXMuX3BvcG92ZXJBbGln''@;'; put 'put ''bmVkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLElmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9''@;'; put 'put ''YSx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9ZCx0aGlzLmRvY3VtZW50PWgsdGhpcy5vdXRzaWRlQ2xpY2tDbG9zZT0hMCx0aGlzLnNjcm9sbFRvQ2xvc2U9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+e2Y/''@;'; put 'put ''KHRoaXMuYWRkRXNjYXBlTGlzdGVuZXIoKSx0aGlzLmFkZENsaWNrTGlzdGVuZXIoKSx0aGlzLmFkZFNjcm9sbExpc3RlbmVyKCkpOnRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX0pLGQuZ2V0RXZlbnRDaGFuZ2UoKS5zdWJzY3JpYmUoZj0+e3RoaXMuaWdub3JlZEV2ZW50PWZ9KSl9''@;'; put 'put ''bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX1hZGRTY3JvbGxMaXN0ZW5lcigpe3RoaXMuc2Nyb2xsVG9DbG9zZSYmKHRoaXMuZG9jdW1lbnRTY3JvbGxlcj1uMih0aGlzLmRv''@;'; put 'put ''Y3VtZW50LCJzY3JvbGwiLHtjYXB0dXJlOiEwfSksdGhpcy5zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5kb2N1bWVudFNjcm9sbGVyLnBpcGUoSWEodGhpcy50ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcikpLnN1YnNjcmliZSgoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5v''@;'; put 'put ''cGVuPSExLHRoaXMuc2V0QW5jaG9yRm9jdXMoKX0pKX1yZW1vdmVTY3JvbGxMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRTY3JvbGxlciYmKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRTY3JvbGxlcil9YWRkQ2xpY2tMaXN0ZW5lcigp''@;'; put 'put ''e3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJjbGljayIsYT0+e2E9PT10aGlzLmlnbm9yZWRFdmVudD9kZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQ6KHRoaXMuc21hcnRPcGVuU2Vy''@;'; put 'put ''dmljZS5vcGVuPSExLGEudGFyZ2V0LmZvY3VzKCkpfSkpfXJlbW92ZUNsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYoZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50LHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIoKSxk''@;'; put 'put ''ZWxldGUgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIpKX1hZGRFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwia2V5ZG93bi5lc2NhcGUiLCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhp''@;'; put 'put ''cy5zZXRBbmNob3JGb2N1cygpfSl9cmVtb3ZlRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyJiYodGhpcy5lc2NhcGVMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmVzY2FwZUxpc3RlbmVyKX1zZXRDbG9zZUZvY3VzKCl7dGhpcy5jbG9zZUJ1dHRvblJlZi5uYXRpdmVFbGVtZW50''@;'; put 'put ''LmZvY3VzKCl9c2V0QW5jaG9yRm9jdXMoKXt0aGlzLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9dGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIoYSl7bGV0IGQ9YS50YXJnZXQ7Zm9yKDtkLmNsYXNzTGlzdCYmImJvZHkiIT09ZC5wYXJlbnRFbGVtZW50''@;'; put 'put ''LmxvY2FsTmFtZTspZD1kLnBhcmVudEVsZW1lbnQ7cmV0dXJuISFkLmNsYXNzTGlzdCYmIWQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbHItcG9wb3Zlci1jb250ZW50Iil9cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVyKCksdGhpcy5yZW1vdmVDbGlj''@;'; put 'put ''a0xpc3RlbmVyKCksdGhpcy5yZW1vdmVFc2NhcGVMaXN0ZW5lcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihGbyksYXIoS3MpLGFyKExzKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCks''@;'; put 'put ''eWI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe2EuYW5jaG9yQnV0dG9uUmVmPWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KElmKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3Bv''@;'; put 'put ''dmVyQW5jaG9yIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiY2xyLWFuY2hvciIsITApfX0pLGN9KSgpLEZKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNl''@;'; put 'put ''PWQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWgsdGhpcy5jbG9zZUNoYW5nZT1uZXcgRXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGgub3BlbkNoYW5nZS5waXBlKElhKGY9PiFmKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9''@;'; put 'put ''KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxl''@;'; put 'put ''bWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSks''@;'; put 'put ''dHQoSWYpLHR0KEtzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVD''@;'; put 'put ''bGljayhmKX0pLDImYSYmaHIoImNsci1zbWFydC1jbG9zZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn19KSxjfSkoKTt2YXIgdnU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJ''@;'; put 'put ''Wk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfSh2dXx8e30pLFBzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2MuRU5EPTFdPSJFTkQiLGN9KFBzfHx7fSksd2I9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09''@;'; put 'put ''IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGNbYy5UT1A9M109IlRPUCIsY30od2J8fHt9KTtjb25zdCBTcD1jPT4oey4uLmMsc2lkZTotMSpjLnNpZGV9KSxMZj0oYyxsKT0+e2NvbnN0IGE9Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8''@;'; put 'put ''YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24gQzgoYyxsLGEpe3JldHVybiBkPT5sKGMoZCksYSl9ZnVuY3Rpb24gdTEoYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6ZCs9SEooYyxsLGEpLGgtPWEuaGVpZ2h0O2JyZWFrO2Nh''@;'; put 'put ''c2UgMTpkKz1ISihjLGwsYSksaCs9bC5oZWlnaHQ7YnJlYWs7Y2FzZSAwOmQtPWEud2lkdGgsaCs9TkooYyxsLGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPU5KKGMsbCxhKX1yZXR1cm57eE9mZnNldDpkLHlPZmZzZXQ6aH19ZnVuY3Rpb24gSEooYyxsLGEpe2xldCBkPTA7c3dpdGNo''@;'; put 'put ''KGMuYW5jaG9yKXtjYXNlIFBzLlNUQVJUOmJyZWFrO2Nhc2UgUHMuQ0VOVEVSOmQrPWwud2lkdGgvMjticmVhaztjYXNlIFBzLkVORDpkKz1sLndpZHRofXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgUHMuU1RBUlQ6YnJlYWs7Y2FzZSBQcy5DRU5URVI6ZC09YS53aWR0aC8yO2JyZWFrO2Nhc2Ug''@;'; put 'put ''UHMuRU5EOmQtPWEud2lkdGh9cmV0dXJuIGR9ZnVuY3Rpb24gTkooYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIFBzLlNUQVJUOmJyZWFrO2Nhc2UgUHMuQ0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBQcy5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMuY29udGVu''@;'; put 'put ''dCl7Y2FzZSBQcy5TVEFSVDpicmVhaztjYXNlIFBzLkNFTlRFUjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgUHMuRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBTOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLnBsYXRmb3JtSWQ9''@;'; put 'put ''ZCx0aGlzLl9zaG91bGRSZWFsaWduPW5ldyBiZSx0aGlzLnNob3VsZFJlYWxpZ249dGhpcy5fc2hvdWxkUmVhbGlnbi5hc09ic2VydmFibGUoKX1yZWFsaWduKCl7dGhpcy5fc2hvdWxkUmVhbGlnbi5uZXh0KCl9YWxpZ25Db250ZW50KGEpe2lmKCFScyh0aGlzLnBsYXRmb3JtSWQpKXJldHVy''@;'; put 'put ''bnt4T2Zmc2V0OjAseU9mZnNldDowfTt0aGlzLmN1cnJlbnRBbmNob3JDb29yZHM9dGhpcy5ldmVudFNlcnZpY2UuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcz1hLmdldEJvdW5kaW5nQ2xpZW50''@;'; put 'put ''UmVjdCgpLHRoaXMuY29udGVudE9mZnNldHM9dTEodGhpcy5wb3NpdGlvbix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7Y29uc3QgZD1mdW5jdGlvbiBpeWUoYyxsKXtjb25zdCBhPVtdLGRfYm90dG9tPWMueU9mZnNldCtsLmhlaWdodCxkX2xl''@;'; put 'put ''ZnQ9Yy54T2Zmc2V0LGRfcmlnaHQ9Yy54T2Zmc2V0K2wud2lkdGg7cmV0dXJuIGMueU9mZnNldD49MHx8YS5wdXNoKHdiLlRPUCksZF9sZWZ0Pj0wfHxhLnB1c2god2IuTEVGVCksZF9ib3R0b208PSh3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRI''@;'; put 'put ''ZWlnaHQpfHxhLnB1c2god2IuQk9UVE9NKSxkX3JpZ2h0PD0od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl8fGEucHVzaCh3Yi5SSUdIVCksYX0odGhpcy5jb250ZW50T2Zmc2V0cyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSxoPWQu''@;'; put 'put ''cmVkdWNlKChmLF8pPT5mK18sMCk7cmV0dXJuIDE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09dnUuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oaCk6MT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5IT1JJWk9OVEFMP3Ro''@;'; put 'put ''aXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNPbmVWaW9sYXRpb24oaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc1R3b1Zpb2xhdGlvbnMoaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5I''@;'; put 'put ''T1JJWk9OVEFMJiZ0aGlzLmhhbmRsZUhvcml6b250YWxBeGlzVHdvVmlvbGF0aW9ucyhoKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPXUxKFNwKHRoaXMucG9z''@;'; put 'put ''aXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz11MSh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlz''@;'; put 'put ''LmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9dTEoTGYodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29y''@;'; put 'put ''ZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9QzgoU3AsTGYsITApO3RoaXMuY29udGVudE9mZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENv''@;'; put 'put ''b3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPUM4KFNwLExmLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPXUxKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2Ug''@;'; put 'put ''Mjp7Y29uc3QgZD1DOChTcCxMZiwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz11MShkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGQ9QzgoU3AsTGYsITEpO3RoaXMuY29udGVudE9m''@;'; put 'put ''ZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRz''@;'; put 'put ''PXUxKFNwKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz11MShMZih0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJy''@;'; put 'put ''ZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9dTEoTGYodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dp''@;'; put 'put ''dGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9QzgoU3AsTGYsITEpO3RoaXMuY29udGVudE9mZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2Fz''@;'; put 'put ''ZSAyOmNhc2UgMTp7Y29uc3QgZD1DOChTcCxMZiwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz11MShkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShhcihJZiksYXIoR3MpKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxDYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRo''@;'; put 'put ''aXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT1fLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPVQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPVcsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhp''@;'; put 'put ''cy5zaG91bGRSZWFsaWduPSExLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IEVyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSEhYX1zZXQgY29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2Uo''@;'; put 'put ''YSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0''@;'; put 'put ''aGlzLnZpZXcmJnRoaXMuc2hvdWxkUmVhbGlnbiYmdGhpcy5jaGVja0NvbGxlY3Rvci5lbWl0KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgp''@;'; put 'put ''OnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShmOCgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRl''@;'; put 'put ''bnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sIm9wYWNpdHkiLCIxIil9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChh''@;'; put 'put ''PT5hLnVuc3Vic2NyaWJlKCkpfWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVu''@;'; put 'put ''ZGVyZXIuYWRkQ2xhc3MoYSwiY2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwidG9wIiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVt''@;'; put 'put ''b3ZlQ2xpY2tMaXN0ZW5lckZuPXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNsaWNrIixkPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5FdmVudD1kfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGQ9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9k''@;'; put 'put ''eSxkKX0pLHRoaXMuc2hvdWxkUmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7dGhpcy52aWV3JiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9k''@;'; put 'put ''ZXMuZm9yRWFjaChhPT50aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxhKSksdGhpcy5jb250YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3KX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVybjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlv''@;'; put 'put ''blNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxl''@;'; put 'put ''ZnQiLGAke2EueE9mZnNldH1weGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KExzKSx0dChhcyksdHQoemEpLHR0KEZvKSx0''@;'; put 'put ''dChTOCksdHQoSWYpLHR0KEtzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNvbnRlbnRBdDpbImNsclBvcG92ZXJDb250ZW50QXQiLCJjb250''@;'; put 'put ''ZW50QXQiXSxvdXRzaWRlQ2xpY2tDbG9zZTpbImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsInNjcm9sbFRvQ2xvc2UiXX19KSxjfSkoKSxTYj0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZT1hLHRoaXMub3BlbkNsb3NlQ2hhbmdlPW5ldyBFcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2Ny''@;'; put 'put ''aWJlKGQ9Pnt0aGlzLm9wZW5DbG9zZUNoYW5nZS5uZXh0KGQpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChLcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZocigiY2xyLXNtYXJ0LW9wZW4tY2xvc2UiLCEwKX0sb3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn19KSxjfSkoKSxNYj0oKCk9PntjbGFzcyBje31y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbXV19KSxjfSkoKTt2YXIgZDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVVA9InVwIixjLkRPV049ImRvd24iLGMuTEVG''@;'; put 'put ''VD0ibGVmdCIsYy5SSUdIVD0icmlnaHQiLGN9KGQxfHx7fSk7bGV0IHhiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuX3VubGlzdGVuRnVuY3M9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1yZXNldChhKXt0aGlzLl9jdXJy''@;'; put 'put ''ZW50PWF9bGlzdGVuVG9BcnJvd0tleXMoYSl7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3d1cCIsKCk9PiF0aGlzLm1vdmUoZDEuVVApKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEs''@;'; put 'put ''ImtleWRvd24uYXJyb3dkb3duIiwoKT0+IXRoaXMubW92ZShkMS5ET1dOKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93bGVmdCIsKCk9PiF0aGlzLm1vdmUoZDEuTEVGVCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2go''@;'; put 'put ''dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IiwoKT0+IXRoaXMubW92ZShkMS5SSUdIVCkpKX1yZWdpc3RlckNvbnRhaW5lcihhLGQ9IjAiKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsZCksdGhpcy5saXN0ZW5Ub0Fycm93S2V5cyhh''@;'; put 'put ''KSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5zcGFjZSIsKCk9PiF0aGlzLmFjdGl2YXRlQ3VycmVudCgpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZW50ZXIiLCgpPT4h''@;'; put 'put ''dGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpfW1vdmVUbyhhKXt2b2lkIDAhPT1hJiYodGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJlbnQuYmx1cigpLGEuZm9jdXMoKSx0aGlzLl9jdXJyZW50PWEpfW1vdmUoYSl7bGV0IGQ9ITE7aWYodGhpcy5jdXJyZW50KXtjb25zdCBoPXRoaXMuY3VycmVudFth''@;'; put 'put ''XTtoJiYoRk8oaCk/aDpXaShoKSkuc3Vic2NyaWJlKF89PntfJiYodGhpcy5tb3ZlVG8oXyksZD0hMCl9KX1yZXR1cm4gZH1hY3RpdmF0ZUN1cnJlbnQoKXtyZXR1cm4hKCF0aGlzLmN1cnJlbnR8fCF0aGlzLmN1cnJlbnQuYWN0aXZhdGV8fCh0aGlzLmN1cnJlbnQuYWN0aXZhdGUoKSwwKSl9''@;'; put 'put ''ZGV0YWNoTGlzdGVuZXJzKCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9PmEoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7''@;'; put 'put ''Y29uc3Qgako9e3Byb3ZpZGU6eGIsdXNlRmFjdG9yeTpmdW5jdGlvbiBveWUoYyxsKXtyZXR1cm4gY3x8bmV3IHhiKGwpfSxkZXBzOltbbmV3IHoyLG5ldyBnMCx4Yl0sRm9dfTt2YXIgb2Q9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CRUZPUkU9LTFdPSJCRUZPUkUiLGNbYy5BRlRFUj0xXT0i''@;'; put 'put ''QUZURVIiLGN9KG9kfHx7fSk7Y2xhc3MgeDB7fXgwWyJ0b3AtcmlnaHQiXT17YXhpczp2dS5WRVJUSUNBTCxzaWRlOm9kLkJFRk9SRSxhbmNob3I6UHMuRU5ELGNvbnRlbnQ6UHMuRU5EfSx4MFsidG9wLWxlZnQiXT17YXhpczp2dS5WRVJUSUNBTCxzaWRlOm9kLkJFRk9SRSxhbmNob3I6UHMu''@;'; put 'put ''U1RBUlQsY29udGVudDpQcy5TVEFSVH0seDBbImJvdHRvbS1yaWdodCJdPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQUZURVIsYW5jaG9yOlBzLkVORCxjb250ZW50OlBzLkVORH0seDBbImJvdHRvbS1sZWZ0Il09e2F4aXM6dnUuVkVSVElDQUwsc2lkZTpvZC5BRlRFUixhbmNob3I6UHMu''@;'; put 'put ''U1RBUlQsY29udGVudDpQcy5TVEFSVH0seDBbInJpZ2h0LXRvcCJdPXtheGlzOnZ1LkhPUklaT05UQUwsc2lkZTpvZC5BRlRFUixhbmNob3I6UHMuQ0VOVEVSLGNvbnRlbnQ6UHMuRU5EfSx4MFsicmlnaHQtYm90dG9tIl09e2F4aXM6dnUuSE9SSVpPTlRBTCxzaWRlOm9kLkFGVEVSLGFuY2hv''@;'; put 'put ''cjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx4MFsibGVmdC10b3AiXT17YXhpczp2dS5IT1JJWk9OVEFMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5DRU5URVIsY29udGVudDpQcy5FTkR9LHgwWyJsZWZ0LWJvdHRvbSJdPXtheGlzOnZ1LkhPUklaT05UQUwsc2lkZTpvZC5CRUZPUkUs''@;'; put 'put ''YW5jaG9yOlBzLlNUQVJULGNvbnRlbnQ6UHMuU1RBUlR9O2NsYXNzIElGe3N0YXRpYyBsaW5rUGFyZW50KGwsYSxkKXtsLmZvckVhY2goaD0+aFtkXT1hKX1zdGF0aWMgbGlua1ZlcnRpY2FsKGwsYT0hMCl7bC5mb3JFYWNoKChkLGgpPT57aD4wJiYoZC51cD1sW2gtMV0pLGg8bC5sZW5ndGgt''@;'; put 'put ''MSYmKGQuZG93bj1sW2grMV0pfSksYSYmbC5sZW5ndGg+MSYmKGxbMF0udXA9bFtsLmxlbmd0aC0xXSxsW2wubGVuZ3RoLTFdLmRvd249bFswXSl9fWxldCBoMT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7YS5jbGFzc0xpc3QuYWRkKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXpl''@;'; put 'put ''cm8iKTtjb25zdCBkPXRoaXMuY2xpZW50UmVjdChhKS53aWR0aDtyZXR1cm4gYS5jbGFzc0xpc3QucmVtb3ZlKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm8iKSxkfXNjcm9sbEJhcldpZHRoKGEpe3JldHVybiBhLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGh9c2Nyb2xsV2lkdGgoYSl7cmV0''@;'; put 'put ''dXJuIGEuc2Nyb2xsV2lkdGh8fDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZ2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IiksMTApfWNsaWVudFJlY3QoYSl7Y29uc3QgZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6''@;'; put 'put ''cGFyc2VJbnQoZC50b3AsMTApLGJvdHRvbTpwYXJzZUludChkLmJvdHRvbSwxMCksbGVmdDpwYXJzZUludChkLmxlZnQsMTApLHJpZ2h0OnBhcnNlSW50KGQucmlnaHQsMTApLHdpZHRoOnBhcnNlSW50KGQud2lkdGgsMTApLGhlaWdodDpwYXJzZUludChkLmhlaWdodCwxMCl9fW1pbldpZHRo''@;'; put 'put ''KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoIm1pbi13aWR0aCIpLDEwKX1mb2N1cyhhKXthLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2Vu''@;'; put 'put ''OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLF9FPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLnN0YXJ0SGVpZ2h0PTB9Z2V0IGV4cGFuZEFuaW1hdGlvbigpe3JldHVybnt2YWx1ZTp0aGlzLmNsckV4cGFu''@;'; put 'put ''ZFRyaWdnZXIscGFyYW1zOntzdGFydEhlaWdodDp0aGlzLnN0YXJ0SGVpZ2h0fX19YW5pbWF0aW9uRG9uZSgpe3RoaXMudXBkYXRlU3RhcnRIZWlnaHQoKX11cGRhdGVTdGFydEhlaWdodCgpe3RoaXMuc3RhcnRIZWlnaHQ9dGhpcy5kb21BZGFwdGVyLmNvbXB1dGVkSGVpZ2h0KHRoaXMuZWxl''@;'; put 'put ''bWVudC5uYXRpdmVFbGVtZW50KXx8MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KGgxKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiJdXSxob3N0VmFyczoxLGhv''@;'; put 'put ''c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmUXYoIkBleHBhbmRBbmltYXRpb24uZG9uZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hbmltYXRpb25Eb25lKCl9KSwyJmEmJlM1KCJAZXhwYW5kQW5pbWF0aW9uIixkLmV4cGFuZEFuaW1hdGlvbil9LGlucHV0czp7Y2xyRXhwYW5kVHJpZ2dl''@;'; put 'put ''cjoiY2xyRXhwYW5kVHJpZ2dlciJ9LGZlYXR1cmVzOlt0aShbaDFdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9jaztvdmVy''@;'; put 'put ''ZmxvdzpoaWRkZW59Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZXhwYW5kQW5pbWF0aW9uIixbaGMoInRydWUgPD0+IGZhbHNlIixbX3Moe2hlaWdodDoie3tzdGFydEhlaWdodH19cHgifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtoZWlnaHQ6IioifSkpXSldKV19fSksY30pKCksTEY9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSxzeWU9MDtjb25zdCB4OD1uZXcgTWkoIklGX0FDVElWRV9JRCIp''@;'; put 'put ''LGx5ZT17cHJvdmlkZTp4OCx1c2VGYWN0b3J5OmZ1bmN0aW9uIGF5ZSgpe3JldHVybisrc3llfX07bGV0ICQ1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jdXJyZW50Q2hhbmdlPW5ldyBiZX1nZXQgY3VycmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9jdXJyZW50Q2hhbmdl''@;'; put 'put ''LmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY3VycmVudENoYW5nZS5uZXh0KGEpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRTg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5jb250''@;'; put 'put ''YWluZXI9Zix0aGlzLmFjdGl2ZUNoYW5nZT1uZXcgRXIoITEpLHRoaXMud2FzQWN0aXZlPSExLHRoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEuY3VycmVudCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudENoYW5nZS5zdWJzY3JpYmUoXz0+e3RoaXMuY2hl''@;'; put 'put ''Y2tBbmRVcGRhdGVWaWV3KF8pfSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1zZXQgYWN0aXZlKGEpe2EmJih0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PXRoaXMuaWQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9Y2hlY2tBbmRVcGRhdGVWaWV3KGEpe2NvbnN0IGQ9YT09PXRoaXMuaWQ7ZCE9PXRoaXMud2FzQWN0aXZl''@;'; put 'put ''JiYodGhpcy51cGRhdGVWaWV3KGQpLHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQoZCksdGhpcy53YXNBY3RpdmU9ZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KCQ1KSx0dCh4OCksdHQoemEpLHR0KGFzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbIiIsImNscklmQWN0aXZlIiwiIl1dLGlucHV0czp7YWN0aXZlOlsiY2xySWZBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7YWN0aXZlQ2hhbmdlOiJjbHJJZkFjdGl2ZUNoYW5nZSJ9fSksY30pKCksYzI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50ZW1wbGF0ZT1kLHRoaXMuY29udGFpbmVyPWgsdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcighMSksdGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9Pnt0aGlzLnVwZGF0ZVZpZXcoZiksdGhp''@;'; put 'put ''cy5vcGVuQ2hhbmdlLmVtaXQoZil9KX1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1zZXQgb3BlbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/''@;'; put 'put ''dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEtzKSx0dCh6YSksdHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siIiwiY2xySWZPcGVuIiwiIl1dLGlucHV0czp7b3BlbjpbImNscklmT3BlbiIsIm9wZW4iXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn19KSxjfSkoKSx6Sj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy50ZW1w''@;'; put 'put ''bGF0ZT1hLHRoaXMuY29udGFpbmVyPWQsdGhpcy5lbD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmV4cGFuZD1fLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEVyKCEwKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChfLmV4''@;'; put 'put ''cGFuZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnVwZGF0ZVZpZXcoKSx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmQuZXhwYW5kZWQpfSkpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7ImJvb2xlYW4iPT10eXBlb2Yg''@;'; put 'put ''YSYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPWEsdGhpcy5fZXhwYW5kZWQ9YSl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRhdGVWaWV3KCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0sdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNo''@;'; put 'put ''KGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lmKCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0aGlzLnRlbXBsYXRlKXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRl''@;'; put 'put ''bXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2UgdHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNwbGF5Iix0aGlzLmV4cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykodHQoemEsOCksdHQoYXMpLHR0KE5pKSx0dChGbyksdHQoWXUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOlsiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19''@;'; put 'put ''LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJJZkV4cGFuZGVkQ2hhbmdlIn19KSxjfSkoKSxzZD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtp''@;'; put 'put ''bXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIFJme2NvbnN0cnVjdG9yKGwpe3RoaXMuZHJhZ1Bvc2l0aW9uPWwuZHJhZ1Bvc2l0aW9uLHRoaXMuZ3JvdXA9bC5ncm91cCx0aGlzLmRyYWdEYXRhVHJhbnNmZXI9bC5kcmFnRGF0YVRyYW5zZmVyLHRoaXMuZHJvcFBvaW50UG9zaXRpb249bC5k''@;'; put 'put ''cm9wUG9pbnRQb3NpdGlvbn19dmFyIEUwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRFJBR19TVEFSVD0wXT0iRFJBR19TVEFSVCIsY1tjLkRSQUdfTU9WRT0xXT0iRFJBR19NT1ZFIixjW2MuRFJBR19FTkQ9Ml09IkRSQUdfRU5EIixjW2MuRFJBR19FTlRFUj0zXT0iRFJBR19FTlRFUiIsY1tj''@;'; put 'put ''LkRSQUdfTEVBVkU9NF09IkRSQUdfTEVBVkUiLGNbYy5EUk9QPTVdPSJEUk9QIixjfShFMHx8e30pO2xldCBVSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5kcmFnU3RhcnQ9bmV3IGJlLHRoaXMuZHJhZ01vdmU9bmV3IGJlLHRoaXMuZHJhZ0VuZD1uZXcgYmUsdGhpcy5kcm9w''@;'; put 'put ''PW5ldyBiZX1nZXQgZHJhZ1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5kcmFnU3RhcnQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdNb3ZlZCgpe3JldHVybiB0aGlzLmRyYWdNb3ZlLmFzT2JzZXJ2YWJsZSgpfWdldCBkcmFnRW5kZWQoKXtyZXR1cm4gdGhpcy5kcmFnRW5kLmFzT2JzZXJ2YWJsZSgp''@;'; put 'put ''fWdldCBkcm9wcGVkKCl7cmV0dXJuIHRoaXMuZHJvcC5hc09ic2VydmFibGUoKX1icm9hZGNhc3QoYSl7c3dpdGNoKGEudHlwZSl7Y2FzZSBFMC5EUkFHX1NUQVJUOnRoaXMuZHJhZ1N0YXJ0Lm5leHQoYSk7YnJlYWs7Y2FzZSBFMC5EUkFHX01PVkU6dGhpcy5kcmFnTW92ZS5uZXh0KGEpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgRTAuRFJBR19FTkQ6dGhpcy5kcmFnRW5kLm5leHQoYSk7YnJlYWs7Y2FzZSBFMC5EUk9QOnRoaXMuZHJvcC5uZXh0KGEpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMu''@;'; put 'put ''XHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksRWI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1pvbmU9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5ldmVudEJ1cz1oLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9MCx0aGlzLmhhc0RyYWdTdGFydGVkPSExLHRo''@;'; put 'put ''aXMuZHJhZ1N0YXJ0PW5ldyBiZSx0aGlzLmRyYWdNb3ZlPW5ldyBiZSx0aGlzLmRyYWdFbmQ9bmV3IGJlLHRoaXMubGlzdGVuZXJzPVtdfWdldCBkcmFnU3RhcnRlZCgpe3JldHVybiB0aGlzLmRyYWdTdGFydC5hc09ic2VydmFibGUoKX1nZXQgZHJhZ01vdmVkKCl7cmV0dXJuIHRoaXMuZHJh''@;'; put 'put ''Z01vdmUuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdFbmRlZCgpe3JldHVybiB0aGlzLmRyYWdFbmQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdTdGFydFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbFBvc2l0aW9ufWF0dGFjaERyYWdMaXN0ZW5lcnMoYSl7dGhpcy5kcmFnZ2FibGVFbD1h''@;'; put 'put ''LHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5jdXN0b21EcmFnRXZlbnQodGhpcy5kcmFnZ2FibGVFbCwibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIpKSx0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMuY3VzdG9tRHJhZ0V2ZW50KHRoaXMuZHJhZ2dhYmxlRWwsInRvdWNoc3RhcnQi''@;'; put 'put ''LCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpKX1kZXRhY2hEcmFnTGlzdGVuZXJzKCl7dGhpcy5saXN0ZW5lcnMmJnRoaXMubGlzdGVuZXJzLm1hcChhPT5hKCkpLHRoaXMubmVzdGVkTGlzdGVuZXJzJiZ0aGlzLm5lc3RlZExpc3RlbmVycy5tYXAoYT0+YSgpKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0''@;'; put 'put ''Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKX1nZXROYXRpdmVFdmVudE9iamVjdChhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsImNoYW5nZWRUb3VjaGVzIik/YS5jaGFuZ2VkVG91Y2hlc1swXTph''@;'; put 'put ''fWN1c3RvbURyYWdFdmVudChhLGQsaCxmKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0ZW4oYSxkLF89Pnt0aGlzLmluaXRpYWxQb3NpdGlvbj17cGFnZVg6dGhpcy5nZXROYXRpdmVFdmVudE9iamVjdChfKS5wYWdlWCxwYWdlWTp0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KF8pLnBhZ2VZ''@;'; put 'put ''fSx0aGlzLm5lc3RlZExpc3RlbmVycz1bXSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmVzdGVkTGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oImRvY3VtZW50Iiwic2VsZWN0c3RhcnQiLFQ9PntULnByZXZlbnREZWZhdWx0KCksVC5zdG9wSW1t''@;'; put 'put ''ZWRpYXRlUHJvcGFnYXRpb24oKX0pKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnkoaCksdGhpcy5kcmFnU3RhcnREZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0''@;'; put 'put ''ZW5lcigpLHRoaXMuaGFzRHJhZ1N0YXJ0ZWQ9ITAsdGhpcy5icm9hZGNhc3QoXyxFMC5EUkFHX1NUQVJUKSx0aGlzLm5lc3RlZExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsaCxUPT57VC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLmhhc0Ry''@;'; put 'put ''YWdTdGFydGVkJiZ0aGlzLmJyb2FkY2FzdChULEUwLkRSQUdfTU9WRSl9KSl9LHRoaXMuZHJhZ1N0YXJ0RGVsYXkpfSksdGhpcy5uZXN0ZWRMaXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGYsVD0+e3RoaXMuaGFzRHJhZ1N0YXJ0ZWQmJih0aGlzLmhhc0Ry''@;'; put 'put ''YWdTdGFydGVkPSExLHRoaXMuYnJvYWRjYXN0KFQsRTAuRFJBR19FTkQpKSxjbGVhclRpbWVvdXQodGhpcy5kcmFnU3RhcnREZWxheVRpbWVvdXQpLHRoaXMubmVzdGVkTGlzdGVuZXJzLm1hcChXPT5XKCkpLHRoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNr''@;'; put 'put ''RHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcigpfSkpfSl9Y2hlY2tEcmFnU3RhcnRCb3VuZGFyeShhKXt0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGEsZD0+e2NvbnN0IGg9TWF0aC5hYnModGhpcy5nZXROYXRpdmVF''@;'; put 'put ''dmVudE9iamVjdChkKS5wYWdlWC10aGlzLmluaXRpYWxQb3NpdGlvbi5wYWdlWCksZj1NYXRoLmFicyh0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KGQpLnBhZ2VZLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VZKTsoaD4xfHxmPjEpJiYoY2xlYXJUaW1lb3V0KHRoaXMuZHJhZ1N0YXJ0RGVs''@;'; put 'put ''YXlUaW1lb3V0KSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKSl9KX1icm9hZGNhc3QoYSxkKXtjb25zdCBoPXRoaXMuZ2VuZXJhdGVEcmFnRXZlbnQoYSxkKTtzd2l0Y2goaC50eXBlKXtjYXNlIEUwLkRS''@;'; put 'put ''QUdfU1RBUlQ6dGhpcy5kcmFnU3RhcnQubmV4dChoKTticmVhaztjYXNlIEUwLkRSQUdfTU9WRTp0aGlzLmRyYWdNb3ZlLm5leHQoaCk7YnJlYWs7Y2FzZSBFMC5EUkFHX0VORDp0aGlzLmRyYWdFbmQubmV4dChoKX1oLmdob3N0RWxlbWVudD10aGlzLmdob3N0RWxlbWVudCxoLmRyb3BQb2lu''@;'; put 'put ''dFBvc2l0aW9uPXRoaXMuZHJvcFBvaW50UG9zaXRpb24sdGhpcy5ldmVudEJ1cy5icm9hZGNhc3QoaCl9Z2VuZXJhdGVEcmFnRXZlbnQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0TmF0aXZlRXZlbnRPYmplY3QoYSk7cmV0dXJue3R5cGU6ZCxkcmFnUG9zaXRpb246e3BhZ2VYOmgucGFnZVgscGFn''@;'; put 'put ''ZVk6aC5wYWdlWSxtb3ZlWDpoLnBhZ2VYLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VYLG1vdmVZOmgucGFnZVktdGhpcy5pbml0aWFsUG9zaXRpb24ucGFnZVl9LGdyb3VwOnRoaXMuZ3JvdXAsZHJhZ0RhdGFUcmFuc2Zlcjp0aGlzLmRyYWdEYXRhVHJhbnNmZXIsZ2hvc3RFbGVtZW50OnRo''@;'; put 'put ''aXMuZ2hvc3RFbGVtZW50fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTm8pLGFyKEZvKSxhcihVSikpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFJGPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSl7dGhpcy5kb21BZGFwdGVyPWF9Z2V0IGhhc0RyYWdnYWJsZVN0YXRlKCl7cmV0dXJuISF0aGlzLnNuYXBzaG90RHJhZ0V2ZW50JiYhIXRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0fWdldCBjbGllbnRSZWN0KCl7cmV0dXJuIHRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0fWdl''@;'; put 'put ''dCBkcmFnRXZlbnQoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdERyYWdFdmVudH1jYXB0dXJlKGEsZCl7dGhpcy5kcmFnZ2FibGVFbENsaWVudFJlY3Q9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QoYSksdGhpcy5zbmFwc2hvdERyYWdFdmVudD1kfWRpc2NhcmQoKXtkZWxldGUgdGhpcy5kcmFn''@;'; put 'put ''Z2FibGVFbENsaWVudFJlY3QsZGVsZXRlIHRoaXMuc25hcHNob3REcmFnRXZlbnR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGgxKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWko9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe2lmKHRoaXMuZWw9YSx0aGlzLmRyYWdFdmVudExpc3RlbmVyPWQsdGhpcy5kcmFnZ2FibGVTbmFwc2hvdD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLm5nWm9uZT1fLHRoaXMubGVhdmVBbmltQ29uZmlnPXt2YWx1ZTowLHBhcmFtczp7''@;'; put 'put ''dG9wOiIwcHgiLGxlZnQ6IjBweCJ9fSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sIXRoaXMuZHJhZ0V2ZW50TGlzdGVuZXJ8fCF0aGlzLmRyYWdnYWJsZVNuYXBzaG90KXRocm93IG5ldyBFcnJvcigiVGhlIGNsci1kcmFnZ2FibGUtZ2hvc3QgY29tcG9uZW50IGNhbiBvbmx5IGJlIHVzZWQgaW5z''@;'; put 'put ''aWRlIG9mIGEgY2xyRHJhZ2dhYmxlIGRpcmVjdGl2ZS4iKTt0aGlzLmRyYWdnYWJsZUdob3N0RWw9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5kcmFnZ2FibGVHaG9zdEVsLCJkcmFnZ2FibGUtZ2hvc3QiKSx0aGlzLmRyYWdFdmVudExpc3RlbmVy''@;'; put 'put ''Lmdob3N0RWxlbWVudD10aGlzLmRyYWdnYWJsZUdob3N0RWwsdGhpcy5zZXREZWZhdWx0R2hvc3RTaXplKHRoaXMuZHJhZ2dhYmxlR2hvc3RFbCk7Y29uc3QgVD17dG9wOnRoaXMuZHJhZ2dhYmxlU25hcHNob3QuaGFzRHJhZ2dhYmxlU3RhdGU/dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kcmFn''@;'; put 'put ''RXZlbnQuZHJhZ1Bvc2l0aW9uLnBhZ2VZLXRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC50b3A6MCxsZWZ0OnRoaXMuZHJhZ2dhYmxlU25hcHNob3QuaGFzRHJhZ2dhYmxlU3RhdGU/dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kcmFnRXZlbnQuZHJhZ1Bvc2l0aW9uLnBhZ2VYLXRo''@;'; put 'put ''aXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC5sZWZ0OjB9O2xldCBXPSExO3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ01vdmVkLnN1YnNjcmliZShpZT0+e1d8fCh0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRl''@;'; put 'put ''P3RoaXMuYW5pbWF0ZVRvT25MZWF2ZShgJHt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QudG9wfXB4YCxgJHt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QubGVmdH1weGApOnRoaXMuYW5pbWF0ZVRvT25MZWF2ZShgJHt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRy''@;'; put 'put ''YWdTdGFydFBvc2l0aW9uLnBhZ2VZfXB4YCxgJHt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydFBvc2l0aW9uLnBhZ2VZfXB4YCksVz0hMCk7Y29uc3QgZ2U9dGhpcy5maW5kVG9wTGVmdFBvc2l0aW9uKGllLmRyYWdQb3NpdGlvbixUKTt0aGlzLnNldFBvc2l0aW9uU3R5bGUodGhp''@;'; put 'put ''cy5kcmFnZ2FibGVHaG9zdEVsLGdlLnBhZ2VYLGdlLnBhZ2VZKSx0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyb3BQb2ludFBvc2l0aW9uPXRoaXMuZmluZERyb3BQb2ludFBvc2l0aW9uKGdlKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJz''@;'; put 'put ''Y3JpYmUoKSl9c2V0RGVmYXVsdEdob3N0U2l6ZShhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRlJiZ0aGlzLnNldFNpemVTdHlsZShhLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aCx0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJl''@;'; put 'put ''Y3QuaGVpZ2h0KX1hbmltYXRlVG9PbkxlYXZlKGEsZCl7dGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5sZWF2ZUFuaW1Db25maWc9e3ZhbHVlOjAscGFyYW1zOnt0b3A6YSxsZWZ0OmR9fX0pfWZpbmRUb3BMZWZ0UG9zaXRpb24oYSxkKXtyZXR1cm57cGFnZVg6YS5wYWdlWC1kLmxlZnQscGFn''@;'; put 'put ''ZVk6YS5wYWdlWS1kLnRvcH19ZmluZERyb3BQb2ludFBvc2l0aW9uKGEpe3JldHVybiB0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRlP3twYWdlWDphLnBhZ2VYK3RoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aC8yLHBhZ2VZOmEucGFnZVkrdGhp''@;'; put 'put ''cy5kcmFnZ2FibGVTbmFwc2hvdC5jbGllbnRSZWN0LmhlaWdodC8yfTphfXNldFNpemVTdHlsZShhLGQsaCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ3aWR0aCIsYCR7ZH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwiaGVpZ2h0IixgJHtofXB4YCl9c2V0UG9zaXRpb25TdHls''@;'; put 'put ''ZShhLGQsaCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IixgJHtkfXB4YCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ0b3AiLGAke2h9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsInZpc2liaWxpdHkiLCJ2aXNpYmxlIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSx0dChFYiw4KSx0dChSRiw4KSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyYWdnYWJsZS1naG9zdCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm''@;'; put 'put ''YSYmUzUoIkBsZWF2ZUFuaW1hdGlvbiIsZC5sZWF2ZUFuaW1Db25maWcpfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImxlYXZl''@;'; put 'put ''QW5pbWF0aW9uIixbaGMoIjpsZWF2ZSIsW19zKHtsZWZ0OiIqIix0b3A6IioifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHt0b3A6Int7dG9wfX0iLGxlZnQ6Int7bGVmdH19In0pKV0pXSldfX0pLGN9KSgpLFlKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe2lmKHRoaXMu''@;'; put 'put ''dGVtcGxhdGU9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXI9aCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sIXRoaXMuZHJhZ0V2ZW50TGlzdGVuZXJ8fCF0aGlzLmNvbnRhaW5lcil0aHJvdyBuZXcgRXJyb3IoIlRoZSAqY2xySWZEcmFnZ2VkIGRpcmVjdGl2ZSBjYW4g''@;'; put 'put ''b25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsckRyYWdnYWJsZSBkaXJlY3RpdmUuIik7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50''@;'; put 'put ''ZW1wbGF0ZSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnRW5kZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5jb250YWluZXIuY2xlYXIoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3Jp''@;'; put 'put ''YmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHphKSx0dChhcywxMiksdHQoRWIsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkRyYWdnZWQiLCIiXV19KSxjfSkoKSxPRj0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lcj1hLHRoaXMucmVuZGVyZXI9ZH1nZXQgZGVmYXVsdEhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRIYW5kbGVFbH1zZXQgZGVmYXVsdEhhbmRsZUVsKGEpe3RoaXMuX2RlZmF1bHRIYW5kbGVFbD1hLHRoaXMuX2N1''@;'; put 'put ''c3RvbUhhbmRsZUVsfHx0aGlzLm1ha2VFbGVtZW50SGFuZGxlKHRoaXMuX2RlZmF1bHRIYW5kbGVFbCl9Z2V0IGN1c3RvbUhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuX2N1c3RvbUhhbmRsZUVsfXJlZ2lzdGVyQ3VzdG9tSGFuZGxlKGEpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJh''@;'; put 'put ''Z0xpc3RlbmVycygpLHRoaXMuX2N1c3RvbUhhbmRsZUVsPWEsdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9jdXN0b21IYW5kbGVFbCl9dW5yZWdpc3RlckN1c3RvbUhhbmRsZSgpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpLHRoaXMucmVuZGVyZXIu''@;'; put 'put ''cmVtb3ZlQ2xhc3ModGhpcy5fY3VzdG9tSGFuZGxlRWwsImRyYWctaGFuZGxlIiksZGVsZXRlIHRoaXMuX2N1c3RvbUhhbmRsZUVsLHRoaXMuX2RlZmF1bHRIYW5kbGVFbCYmdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9kZWZhdWx0SGFuZGxlRWwpfW1ha2VFbGVtZW50SGFuZGxlKGEp''@;'; put 'put ''e3RoaXMuX2RlZmF1bHRIYW5kbGVFbCYmdGhpcy5fZGVmYXVsdEhhbmRsZUVsIT09YSYmdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9kZWZhdWx0SGFuZGxlRWwsImRyYWctaGFuZGxlIiksdGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5hdHRhY2hEcmFnTGlzdGVuZXJzKGEpLHRoaXMu''@;'; put 'put ''cmVuZGVyZXIuYWRkQ2xhc3MoYSwiZHJhZy1oYW5kbGUiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoRWIpLGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksV0o9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnJlbmRlcmVyPWF9ZW50ZXIoKXt0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksImluLWRyYWciKX1leGl0KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCJpbi1kcmFnIil9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksR0o9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLmVsPWEsdGhpcy5kcmFnRXZl''@;'; put 'put ''bnRMaXN0ZW5lcj1kLHRoaXMuZHJhZ0hhbmRsZVJlZ2lzdHJhcj1oLHRoaXMudmlld0NvbnRhaW5lclJlZj1mLHRoaXMuY2ZyPV8sdGhpcy5pbmplY3Rvcj1ULHRoaXMuZHJhZ2dhYmxlU25hcHNob3Q9Vyx0aGlzLmdsb2JhbERyYWdNb2RlPWllLHRoaXMuZHJhZ1N0YXJ0RW1pdHRlcj1uZXcg''@;'; put 'put ''RXIsdGhpcy5kcmFnTW92ZUVtaXR0ZXI9bmV3IEVyLHRoaXMuZHJhZ0VuZEVtaXR0ZXI9bmV3IEVyLHRoaXMuZHJhZ09uPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRyYWdnYWJsZUVsPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLmNvbXBvbmVudEZhY3Rvcnk9dGhpcy5jZnIu''@;'; put 'put ''cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoWkopfXNldCBkYXRhVHJhbnNmZXIoYSl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnRGF0YVRyYW5zZmVyPWF9c2V0IGdyb3VwKGEpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZ3JvdXA9YX1zZXQgZHJhZ1N0YXJ0RGVsYXkoYSl7Im51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBhP3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ1N0YXJ0RGVsYXk9YToic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydERlbGF5PXBhcnNlSW50KGEsMTApfHwwKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmRyYWdIYW5kbGVS''@;'; put 'put ''ZWdpc3RyYXIuZGVmYXVsdEhhbmRsZUVsPXRoaXMuZHJhZ2dhYmxlRWwsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoYT0+e3RoaXMuZ2xvYmFsRHJhZ01vZGUuZW50ZXIoKSx0aGlzLmRyYWdPbj0hMCx0aGlzLmN1''@;'; put 'put ''c3RvbUdob3N0fHx0aGlzLmNyZWF0ZURlZmF1bHRHaG9zdChhKSx0aGlzLmRyYWdTdGFydEVtaXR0ZXIuZW1pdChuZXcgUmYoYSkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ01vdmVkLnN1YnNjcmliZShhPT57dGhpcy5kcmFnTW92ZUVt''@;'; put 'put ''aXR0ZXIuZW1pdChuZXcgUmYoYSkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ0VuZGVkLnN1YnNjcmliZShhPT57dGhpcy5nbG9iYWxEcmFnTW9kZS5leGl0KCksdGhpcy5kcmFnT249ITEsdGhpcy5jdXN0b21HaG9zdHx8dGhpcy5kZXN0''@;'; put 'put ''cm95RGVmYXVsdEdob3N0KCksdGhpcy5kcmFnRW5kRW1pdHRlci5lbWl0KG5ldyBSZihhKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpfWNy''@;'; put 'put ''ZWF0ZURlZmF1bHRHaG9zdChhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNhcHR1cmUodGhpcy5kcmFnZ2FibGVFbCxhKSx0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50RmFjdG9yeSwwLHRoaXMuaW5qZWN0b3IsW1t0aGlzLmRyYWdnYWJsZUVs''@;'; put 'put ''LmNsb25lTm9kZSghMCldXSl9ZGVzdHJveURlZmF1bHRHaG9zdCgpe3RoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuZGlzY2FyZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoRWIp''@;'; put 'put ''LHR0KE9GKSx0dChhcyksdHQoSzApLHR0KEVhKSx0dChSRiksdHQoV0opKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJhZ2dhYmxlIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsWUosNSksMiZhKXtsZXQgZjtz''@;'; put 'put ''aShmPWFpKCkpJiYoZC5jdXN0b21HaG9zdD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiZHJhZ2dhYmxlIiwhMCkoImJlaW5nLWRyYWdnZWQiLGQuZHJhZ09uKX0saW5wdXRzOntkYXRhVHJhbnNmZXI6WyJjbHJEcmFnZ2FibGUiLCJk''@;'; put 'put ''YXRhVHJhbnNmZXIiXSxncm91cDpbImNsckdyb3VwIiwiZ3JvdXAiXSxkcmFnU3RhcnREZWxheTpbImNsckRyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXX0sb3V0cHV0czp7ZHJhZ1N0YXJ0RW1pdHRlcjoiY2xyRHJhZ1N0YXJ0IixkcmFnTW92ZUVtaXR0ZXI6ImNsckRyYWdNb3Zl''@;'; put 'put ''IixkcmFnRW5kRW1pdHRlcjoiY2xyRHJhZ0VuZCJ9LGZlYXR1cmVzOlt0aShbRWIsT0YsUkYsV0osaDFdKV19KSxjfSkoKSwkSj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMu''@;'; put 'put ''XHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NvbnN0IHFKPW5ldyBNaSgiRk9DVVNfT05fVklFV19JTklUIiksdXllPXtwcm92aWRlOnFKLHVzZVZhbHVlOiEwfTtsZXQgUEY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5lbD1hLHRoaXMu''@;'; put 'put ''cGxhdGZvcm1JZD1kLHRoaXMuZm9jdXNPblZpZXdJbml0PWgsdGhpcy5yZW5kZXJlcj1fLHRoaXMuZGlyZWN0Rm9jdXM9ITAsdGhpcy5kZXN0cm95JD1uZXcgYmUsdGhpcy5faXNFbmFibGVkPXRoaXMuZm9jdXNPblZpZXdJbml0LHRoaXMuZG9jdW1lbnQ9ZixULnJ1bk91dHNpZGVBbmd1bGFy''@;'; put 'put ''KCgpPT5uMihhLm5hdGl2ZUVsZW1lbnQsImZvY3Vzb3V0IikucGlwZShhaCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5kaXJlY3RGb2N1c3x8KHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKSx0aGlzLnJl''@;'; put 'put ''bmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwib3V0bGluZSIsbnVsbCkpfSkpfXNldCBpc0VuYWJsZWQoYSl7dGhpcy5mb2N1c09uVmlld0luaXQmJiJib29sZWFuIj09dHlwZW9mIGEmJih0aGlzLl9pc0VuYWJsZWQ9YSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5mb2N1''@;'; put 'put ''cygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCl9Zm9jdXMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLl9pc0VuYWJsZWQmJnRoaXMuZG9jdW1lbnQmJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudCYmKHRoaXMuZWwubmF0''@;'; put 'put ''aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudCYmKHRoaXMuZGlyZWN0Rm9jdXM9ITEsdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5y''@;'; put 'put ''ZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIm91dGxpbmUiLCJub25lIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEdzKSx0dChxSiksdHQoTHMp''@;'; put 'put ''LHR0KEZvKSx0dChObykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJGb2N1c09uVmlld0luaXQiLCIiXV0saW5wdXRzOntpc0VuYWJsZWQ6WyJjbHJGb2N1c09uVmlld0luaXQiLCJpc0VuYWJsZWQiXX19KSxjfSkoKSxxNT0oKCk9PntjbGFzcyBje31yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W3V5ZV0saW1wb3J0czpbW29vXV19KSxjfSkoKSxkeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3By''@;'; put 'put ''ZXZpb3VzRm9jdXNUcmFwcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wdXNoKHRoaXMuX2N1cnJlbnQpLHRoaXMuX2N1cnJlbnQ9YX1nZXQgbmJGb2N1c1RyYXBwZXJzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X3ByZXZpb3VzRm9jdXNUcmFwcy5sZW5ndGh9YWN0aXZhdGVQcmV2aW91c1RyYXBwZXIoKXt0aGlzLl9jdXJyZW50PXRoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wb3AoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7''@;'; put 'put ''dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksTXA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuZWw9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5mb2N1c1RyYXBzVHJhY2tlcj1oLHRoaXMucmVuZGVyZXI9Zix0aGlz''@;'; put 'put ''LnBsYXRmb3JtSWQ9Xyx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkPSExLHRoaXMuX2NvbmZpZz17c3RyaWN0OiEwfSx0aGlzLmRvY3VtZW50PXRoaXMuaW5qZWN0b3IuZ2V0KExzKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmN1cnJlbnQ9dGhpc31zZXQgY29uZmlnKGEpe3RoaXMuX2NvbmZpZz1P''@;'; put 'put ''YmplY3QuYXNzaWduKHRoaXMuX2NvbmZpZywiIj09PWE/e306YSl9Z2V0IHBvdGVudGlhbGx5Rm9jdXNhYmxlRWxzKCl7cmV0dXJuWy4uLnRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaHJlZl06bm90KFt0YWJpbmRleD0iLTEiXSksIGJ1dHRvbjpub3QoW2Rpc2Fi''@;'; put 'put ''bGVkXSk6bm90KFt0YWJpbmRleD0iLTEiXSksIGlucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgc2VsZWN0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9Ii0xIl0pLCBb''@;'; put 'put ''Y29udGVudGVkaXRhYmxlPSJ0cnVlIl06bm90KFt0YWJpbmRleD0iLTEiXSksIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD0iLTEiXSkgJyldfW5nT25Jbml0KCl7UnModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwi''@;'; put 'put ''dGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQ9dGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMucGFyZW50RWxlbWVudD10aGlz''@;'; put 'put ''LmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCksdGhpcy5hZGRSZWJvdW5kRWxzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZVJlYm91bmRFbHMoKSx0aGlzLnNldFByZXZpb3VzRm9jdXMoKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmFjdGl2YXRlUHJldmlvdXNUcmFwcGVyKCl9''@;'; put 'put ''b25Gb2N1c0luKGEpe2NvbnN0IGQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMuZm9jdXNUcmFwc1RyYWNrZXIuY3VycmVudCE9PXRoaXN8fCFScyh0aGlzLnBsYXRmb3JtSWQpfHx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8KGEudGFyZ2V0PT09dGhp''@;'; put 'put ''cy50b3BSZWJvdW5kRWwmJmQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhpcy5mb2N1c0xhc3RGb2N1c2FibGUoKSx0aGlzLmZvY3VzVHJhcEVsSWZPdXRzaWRlKCkpOmEudGFyZ2V0PT09dGhpcy5ib3R0b21SZWJvdW5kRWwmJmQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhp''@;'; put 'put ''cy5mb2N1c0ZpcnN0Rm9jdXNhYmxlKCksdGhpcy5mb2N1c1RyYXBFbElmT3V0c2lkZSgpKTp0aGlzLl9jb25maWcuc3RyaWN0P3RoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMubG9jYWxGb2N1c0VzY2FwZWQ9ITApfXNldFByZXZpb3VzRm9jdXMoKXt0aGlzLnByZXZpb3VzQWN0''@;'; put 'put ''aXZlRWxlbWVudCYmdGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMucHJldmlvdXNBY3RpdmVFbGVtZW50LmZvY3VzKCl9Y3JlYXRlRm9jdXNhYmxlT2ZmU2NyZWVuRWwoKXtjb25zdCBhPXRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiB0aGlz''@;'; put 'put ''LnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsIjAiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGEsIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxhfWFkZFJlYm91bmRFbHMoKXtpZihScyh0aGlzLnBsYXRmb3JtSWQpKXt0aGlzLnRvcFJlYm91bmRFbD10aGlzLmNyZWF0''@;'; put 'put ''ZUZvY3VzYWJsZU9mZlNjcmVlbkVsKCksdGhpcy5ib3R0b21SZWJvdW5kRWw9dGhpcy5jcmVhdGVGb2N1c2FibGVPZmZTY3JlZW5FbCgpO2NvbnN0IGE9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50RWxlbWVudCx0aGlzLnRvcFJlYm91''@;'; put 'put ''bmRFbCxhKSxhLm5leHRTaWJsaW5nP3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCxhLm5leHRTaWJsaW5nKTp0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCl9fXJlbW92''@;'; put 'put ''ZVJlYm91bmRFbHMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRvcFJlYm91bmRFbCYmdGhpcy5ib3R0b21SZWJvdW5kRWwmJih0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy50b3BSZWJvdW5kRWwpLHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmJv''@;'; put 'put ''dHRvbVJlYm91bmRFbCksZGVsZXRlIHRoaXMudG9wUmVib3VuZEVsLGRlbGV0ZSB0aGlzLmJvdHRvbVJlYm91bmRFbCl9Zm9jdXNGaXJzdEZvY3VzYWJsZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVscy5sZW5ndGgmJih0aGlzLmZpcnN0Rm9jdXNhYmxlRWw9''@;'; put 'put ''dGhpcy5mb2N1c0VsZW1lbnQodGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVsc1thXSksIXRoaXMuZmlyc3RGb2N1c2FibGVFbCk7YSsrKTt9Zm9jdXNMYXN0Rm9jdXNhYmxlKCl7Zm9yKGxldCBhPXRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHMubGVuZ3RoLTE7YT49MCYmKHRoaXMubGFz''@;'; put 'put ''dEZvY3VzYWJsZUVsPXRoaXMuZm9jdXNFbGVtZW50KHRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHNbYV0pLCF0aGlzLmxhc3RGb2N1c2FibGVFbCk7YS0tKTt9Zm9jdXNUcmFwRWxJZk91dHNpZGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxl''@;'; put 'put ''bWVudCl8fHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpfWZvY3VzRWxlbWVudChhKXtyZXR1cm4gYSYmYS5mb2N1cyYmKGEuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09YSk/YTpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KSh0dChOaSksdHQoRWEpLHR0KGR5ZSksdHQoRm8pLHR0KEdzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckZvY3VzVHJhcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJmb2N1c2luIixmdW5jdGlvbihmKXtyZXR1cm4gZC5v''@;'; put 'put ''bkZvY3VzSW4oZil9LDAsZmYpfSxpbnB1dHM6e2NvbmZpZzpbImNsckZvY3VzVHJhcCIsImNvbmZpZyJdfX0pLGN9KSgpLGJFPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5c''@;'; put 'put ''dTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvb11dfSksY30pKCksZnllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90ZXh0Q29udGVudENoYW5nZT1uZXcgYmV9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50fXNldCB0ZXh0Q29udGVudChhKXt0aGlz''@;'; put 'put ''Ll90ZXh0Q29udGVudD1hLHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLm5leHQoYSl9Z2V0IHRleHRDb250ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxweWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7''@;'; put 'put ''aW1wb3J0czpbW29vXV19KSxjfSkoKSxteWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLE1iXV19KSxjfSkoKSxkaD0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmNsckxvYWRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmJ1dHRvblN0YXRlPVV1LHRoaXMuc3RhdGU9VXUuREVGQVVMVH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7aWYoYSE9PXRoaXMu''@;'; put 'put ''c3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWEsYSl7Y2FzZSBVdS5ERUZBVUxUOnRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iKSx0''@;'; put 'put ''aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSBVdS5MT0FESU5HOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2UgVXUuU1VDQ0VTUzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKTticmVhaztjYXNl''@;'; put 'put ''IFV1LkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKFV1LkRFRkFVTFQpfXRoaXMuY2xyTG9hZGluZ0NoYW5nZS5lbWl0KGEpfX1zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCl7aWYodGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGll''@;'; put 'put ''bnRSZWN0KXtjb25zdCBhPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPU1hdGgubWF4KDQyLGEud2lkdGgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYCR7ZH1weGApfX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImJ1dHRvbiIsImNsckxvYWRpbmciLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkaXNhYmxl''@;'; put 'put ''ZCIsZC5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5nQ2hhbmdlIn0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTptYix1c2VFeGlzdGluZzpjfV0pXSxhdHRyczpnN2UsbmdDb250ZW50U2Vs''@;'; put 'put ''ZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bpbm5lci1jaGVjayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh''@;'; put 'put ''LGQpezEmYSYmKFRpKCksenIoMCwwKSxRZSgxLG03ZSwyLDEsInNwYW4iLDEpLFFlKDIsdjdlLDIsMSwic3BhbiIsMSksUWUoMyxfN2UsMiwxLCJzcGFuIiwxKSxZcigpKSwyJmEmJihSZSgibmdTd2l0Y2giLGQuc3RhdGUpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUu''@;'; put 'put ''TE9BRElORyksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0sZGVwZW5kZW5jaWVzOltuZCx0aF0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImRl''@;'; put 'put ''ZmF1bHRCdXR0b24iLFtoYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjB9KV0pXSksYTEoInNwaW5uZXIiLFtoYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1''@;'; put 'put ''KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pLGExKCJ2YWxpZGF0ZWQiLFtoYygiOmVudGVyIixbcnUoIjYwMG1zIixGbWUoW19zKHt0cmFu''@;'; put 'put ''c2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksX3Moe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksX3Moe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEp''@;'; put 'put ''IixvZmZzZXQ6MX0pXSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxfeWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9''@;'; put 'put ''LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSxieWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKERLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbX3llLG15ZV19KSxjfSkoKSx5eWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbIm5nLWNvbXBvbmVudCJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe30sZW5jYXBzdWxhdGlvbjoyfSksY30pKCkseUU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZp''@;'; put 'put ''KHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCksd3llPTAsYWQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250cm9sLSIrICsrd3llLHRoaXMuX2lkQ2hhbmdlPW5ldyBUZSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lk''@;'; put 'put ''fXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0''@;'; put 'put ''b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxDeWU9MCxLNT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRhaW5lci0iKyArK0N5ZSx0aGlzLl9pZENoYW5nZT1uZXcgVGUodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9p''@;'; put 'put ''ZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7''@;'; put 'put ''dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7bGV0IEZGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJhYnN0cmFjdCJ9Z2V0IGlkKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29udGFpbmVySWRTZXJ2aWNlP2Ake3RoaXMuY29udGFpbmVySWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6dGhpcy5jb250cm9sSWRTZXJ2aWNlP2Ake3RoaXMuY29udHJvbElkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOm51''@;'; put 'put ''bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLFN5ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMu''@;'; put 'put ''Y29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImVycm9yIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYWQsOCksdHQoSzUsOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1lcnJvciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJpZCIsZC5pZCksaHIoImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbZW9dLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6''@;'; put 'put ''MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIRj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRT''@;'; put 'put ''ZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImhlbHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtaGVscGVyIl1d''@;'; put 'put ''LGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxocigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGko''@;'; put 'put ''KSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGswPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jb250cm9sQ2hhbmdlcz1uZXcgYmUsdGhpcy5faGVscGVycz1uZXcgYmV9Z2V0IGNvbnRyb2xDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NvbnRyb2xDaGFuZ2VzLmFz''@;'; put 'put ''T2JzZXJ2YWJsZSgpfWdldCBoZWxwZXJzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2hlbHBlcnMuYXNPYnNlcnZhYmxlKCl9c2V0Q29udHJvbChhKXt0aGlzLl9jb250cm9sQ2hhbmdlcy5uZXh0KGEpfXNldEhlbHBlcnMoYSl7dGhpcy5faGVscGVycy5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgQTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuTk9ORT0iTk9ORSIsYy5WQUxJRD0iVkFMSUQiLGMuSU5WQUxJRD0iSU5WQUxJRCIsY30o''@;'; put 'put ''QTB8fHt9KTtsZXQgbGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5nQ29udHJvbFNlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3RhdHVzQ2hhbmdlcz1uZXcgVGUoQTAuTk9ORSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xT''@;'; put 'put ''ZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShkPT57ZCYmKHRoaXMuY29udHJvbD1kLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZSgpfSkpKX0pKX1nZXQgc3RhdHVz''@;'; put 'put ''Q2hhbmdlcygpe3JldHVybiB0aGlzLl9zdGF0dXNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10cmlnZ2VyU3RhdHVzQ2hhbmdlKCl7aWYodGhpcy5jb250cm9sKXtjb25zdCBhPUEwW3Ro''@;'; put 'put ''aXMuY29udHJvbC5zdGF0dXNdO3RoaXMuX3N0YXR1c0NoYW5nZXMubmV4dChbIlZBTElEIiwiSU5WQUxJRCJdLmluY2x1ZGVzKGEpP2E6QTAuTk9ORSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihrMCkpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rv''@;'; put 'put ''a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBYNT1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5DT01QQUNUPSJjb21wYWN0IixjfShYNXx8e30pO2xldCBPZj0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7dGhpcy5taW5MYWJlbFNpemU9MSx0aGlzLm1heExhYmVsU2l6ZT0xMix0aGlzLmxheW91dD1YNS5IT1JJWk9OVEFMLHRoaXMubGF5b3V0VmFsdWVzPU9iamVjdC5rZXlzKFg1KS5tYXAoYT0+WDVbYV0pLHRoaXMuX2xhYmVsU2l6ZT0yfWdldCBsYWJlbFNpemUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fbGFiZWxTaXplfXNldCBsYWJlbFNpemUoYSl7dGhpcy5sYWJlbFNpemVJc1ZhbGlkKGEpJiYodGhpcy5fbGFiZWxTaXplPWEpfWdldCBsYXlvdXRDbGFzcygpe3JldHVybmBjbHItZm9ybS0ke3RoaXMubGF5b3V0fWB9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVg1''@;'; put 'put ''LlZFUlRJQ0FMfWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVg1LkhPUklaT05UQUx9aXNDb21wYWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09WDUuQ09NUEFDVH1pc1ZhbGlkKGEpe3JldHVybiB0aGlzLmxheW91dFZhbHVlcy5pbmRleE9mKGEpPi0xfWxhYmVsU2l6ZUlz''@;'; put 'put ''VmFsaWQoYSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYSkmJmE+PXRoaXMubWluTGFiZWxTaXplJiZhPD10aGlzLm1heExhYmVsU2l6ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMu''@;'; put 'put ''XHUwMjc1ZmFjfSksY30pKCksVXM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmVsPV8sdGhpcy5lbmFibGVH''@;'; put 'put ''cmlkPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgbGFiZWxUZXh0KCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fW5nT25Jbml0KCl7KHRoaXMuY29udHJvbElkU2VydmljZXx8dGhpcy5uZ0NvbnRyb2xTZXJ2aWNl''@;'; put 'put ''KSYmdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb250cm9sLWxhYmVsIiksdGhpcy5lbmFibGVHcmlkJiZ0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRo''@;'; put 'put ''aXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpPDAmJih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbC0xMiIpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGBjbHItY29s''@;'; put 'put ''LW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX1gKSksdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYhdGhpcy5mb3JBdHRyJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWRDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuZm9yQXR0cj1hKSl9bmdP''@;'; put 'put ''bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWRpc2FibGVHcmlkKCl7dGhpcy5lbmFibGVHcmlkPSExfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhZCw4KSx0dChPZiw4KSx0dChrMCw4''@;'; put 'put ''KSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJmb3IiLGQuZm9yQXR0cil9LGlucHV0czp7Zm9yQXR0cjpbImZvciIsImZvckF0dHIiXX19KSxj''@;'; put 'put ''fSkoKSxNeWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZGe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJzdWNjZXNzIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYWQsOCksdHQoSzUsOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxo''@;'; put 'put ''cigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGNkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0''@;'; put 'put ''b3IoYSl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jbGFzc05hbWU9IiJ9Y29udHJvbENsYXNzKGE9QTAuTk9ORSxkPSExLGg9IiIpe2NvbnN0IGY9W3RoaXMuY2xhc3NOYW1lLGhdO3N3aXRjaChhKXtjYXNlIEEwLlZBTElEOmYucHVzaCgiY2xyLXN1Y2Nlc3MiKTticmVhaztjYXNlIEEw''@;'; put 'put ''LklOVkFMSUQ6Zi5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmZi5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLm1heExhYmVsU2l6ZS10aGlzLmxheW91dFNl''@;'; put 'put ''cnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksZi5qb2luKCIgIikudHJpbSgpfWluaXRDb250cm9sQ2xhc3MoYSxkKXtkJiZkLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLGQuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaChmPT57Zi5zdGFydHNXaXRoKCJj''@;'; put 'put ''bHItY29sIikmJmEucmVtb3ZlQ2xhc3MoZCxmKX0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoT2YsOCkpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEE4PSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9Zix0aGlzLl9keW5hbWljPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbnMucHVzaCh0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZShfPT57dGhpcy5zdGF0ZT1fLHRoaXMudXBkYXRlSGVscGVycygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hh''@;'; put 'put ''bmdlcy5zdWJzY3JpYmUoXz0+e3RoaXMuY29udHJvbD1ffSkpfWdldCBzaG93SGVscGVyKCl7cmV0dXJuISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnQmJighIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudCYmKCF0aGlzLnRvdWNoZWR8fHRoaXMuc3RhdGU9PT1BMC5OT05FKXx8IXRo''@;'; put 'put ''aXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRHx8IXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09QTAuSU5WQUxJRCl9Z2V0IHNob3dWYWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRCYm''@;'; put 'put ''ISF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50fWdldCBzaG93SW52YWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BMC5JTlZBTElEJiYhIXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8udG91Y2hl''@;'; put 'put ''ZH1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnVwZGF0ZUhlbHBlcnMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29udHJvbENsYXNzKCl7cmV0dXJuIHRoaXMuY29udHJvbENsYXNzU2VydmljZS5jb250cm9sQ2xhc3Mo''@;'; put 'put ''IXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRHx8IXRoaXMudG91Y2hlZD9BMC5OT05FOnRoaXMuc3RhdGUsdGhpcy5hZGRHcmlkKCkpfWFkZEdyaWQoKXtyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVy''@;'; put 'put ''dGljYWwoKX11cGRhdGVIZWxwZXJzKCl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0SGVscGVycyh7c2hvdzp0aGlzLnNob3dJbnZhbGlkfHx0aGlzLnNob3dIZWxwZXJ8fHRoaXMuc2hvd1ZhbGlkLHNob3dJbnZhbGlkOnRoaXMuc2hvd0ludmFsaWQs''@;'; put 'put ''c2hvd0hlbHBlcjp0aGlzLnNob3dIZWxwZXIsc2hvd1ZhbGlkOnRoaXMuc2hvd1ZhbGlkfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGxkKSx0dChPZiw4KSx0dChjZCksdHQoazApKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxjb250ZW50''@;'; put 'put ''UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoSW8oaCxVcyw1KSxJbyhoLE15ZSw1KSxJbyhoLFN5ZSw1KSxJbyhoLEhGLDUpKSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLmxhYmVsPWYuZmlyc3QpLHNpKGY9YWkoKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50PWYuZmly''@;'; put 'put ''c3QpLHNpKGY9YWkoKSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYuZmlyc3QpfX19KSxjfSkoKTtjbGFzcyB3RXtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3Is''@;'; put 'put ''IXRoaXMuaW5qZWN0b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoSzApLGY9dGhpcy5pbmplY3Rvci5nZXQoTmkpO2EuY3JlYXRlQ29tcG9uZW50KGgucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoeXllKSk7Y29uc3QgXz1oLnJlc29sdmVDb21wb25lbnRGYWN0b3J5''@;'; put 'put ''KGwpLFQ9W107VFtkXT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBXPWEuY3JlYXRlQ29tcG9uZW50KF8sdm9pZCAwLHZvaWQgMCxUKTthLnJlbW92ZSgwKSxXLmluc3RhbmNlLl9keW5hbWljPSEwLHRoaXMuaW5qZWN0b3I9Vy5pbmplY3Rvcn19Z2V0KGwsYSl7cmV0dXJuIHRoaXMuaW5qZWN0''@;'; put 'put ''b3IuZ2V0KGwsYSl9fWxldCBORj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZD1uZXcgYmV9Z2V0IHRvdWNoZWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZC5hc09ic2VydmFibGUoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZC5uZXh0KCl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFQ4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3RoaXMudmNyPWEsdGhpcy53cmFwcGVy''@;'; put 'put ''VHlwZT1kLHRoaXMubmdDb250cm9sPWYsdGhpcy5pbmRleD0wLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnJlbmRlcmVyPV8sdGhpcy5lbD1UO3RyeXt0aGlzLm5nQ29udHJvbFNlcnZpY2U9aC5nZXQoazApLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWguZ2V0KGxkKSx0aGlzLmNv''@;'; put 'put ''bnRyb2xDbGFzc1NlcnZpY2U9aC5nZXQoY2QpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWguZ2V0KE5GKX1jYXRjaHt9dGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlJiZ0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuaW5pdENvbnRyb2xDbGFzcyhfLFQubmF0aXZlRWxlbWVudCksdGhpcy5tYXJr''@;'; put 'put ''Q29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlLnRvdWNoZWRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5tYXJrQXNUb3VjaGVkKCl9KSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0''@;'; put 'put ''aGlzLm5nQ29udHJvbFNlcnZpY2UuaGVscGVyc0NoYW5nZS5zdWJzY3JpYmUoVz0+e3RoaXMuc2V0QXJpYURlc2NyaWJlZEJ5KFcpfSkpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLmNvbnRyb2xJZFNlcnZpY2UmJih0aGlzLmNvbnRyb2xJZFNl''@;'; put 'put ''cnZpY2UuaWQ9YSl9bmdPbkluaXQoKXt0aGlzLl9jb250YWluZXJJbmplY3Rvcj1uZXcgd0UodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGFkKTt0cnl7dGhpcy5jb250YWluZXJJ''@;'; put 'put ''ZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KEs1KX1jYXRjaHt9dGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2VydmljZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2Vy''@;'; put 'put ''dmljZS5zZXRDb250cm9sKHRoaXMubmdDb250cm9sKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYmdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZp''@;'; put 'put ''Y2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7cmV0dXJuIGR9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNo''@;'; put 'put ''ZWQoKSx0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1zZXRBcmlhRGVzY3JpYmVkQnkoYSl7aWYoYS5zaG93KXtjb25zdCBkPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQoYSk7aWYobnVsbCE9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRB''@;'; put 'put ''dHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixkKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiKX1nZXRBcmlhRGVzY3JpYmVkQnlJZChhKXtsZXQgZD0iaGVscGVyIjty''@;'; put 'put ''ZXR1cm4gYS5zaG93SW52YWxpZD9kPSJlcnJvciI6YS5zaG93VmFsaWQmJihkPSJzdWNjZXNzIiksdGhpcy5jb250YWluZXJJZFNlcnZpY2U/dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWQuY29uY2F0KCItIixkKTp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/dGhpcy5jb250cm9sSWRTZXJ2aWNl''@;'; put 'put ''LmlkLmNvbmNhdCgiLSIsZCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KE9tKSx0dChFYSksdHQoenUpLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MSZhJiZ4dCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZ0MSgiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9fSksY30pKCksWEo9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGF5b3V0U2Vydmlj''@;'; put 'put ''ZT1hLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWR9c2V0IGxhYmVsU2l6ZShhKXtjb25zdCBkPXBhcnNlSW50KGEsMTApfHwyO3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemU9ZH1vbkZvcm1TdWJtaXQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJr''@;'; put 'put ''Q29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChPZiksdHQoTkYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpm''@;'; put 'put ''dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFVzLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGFiZWxzPWYpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwy''@;'; put 'put ''JmEmJmhyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2UuaXNDb21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbImNsckxhYmVsU2l6ZSIsImxhYmVs''@;'; put 'put ''U2l6ZSJdfSxmZWF0dXJlczpbdGkoW09mLE5GXSldfSksY30pKCksWmM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxj''@;'; put 'put ''Llx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhXV19KSxjfSkoKTtjb25zdCBWRj1uZXcgTWkoIklTX1RPR0dMRSIpLEF5ZT17cHJvdmlkZTpWRix1c2VGYWN0b3J5OmZ1bmN0aW9uIGt5ZSgpe3JldHVybiBuZXcgVGUoITEpfX07bGV0IFQwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSl7dGhpcy5fZHluYW1pYz0hMSx0aGlzLnRvZ2dsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMudG9nZ2xlPWR9KSl9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdP''@;'; put 'put ''bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChWRikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gt''@;'; put 'put ''d3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsVXMsNyksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MiZhJiZocigiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCFkLnRvZ2dsZSkoImNsci10b2dnbGUtd3JhcHBlciIsZC50b2dnbGUpfSxmZWF0dXJlczpbdGkoW2FkLEF5ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dzdlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSh5N2UpLGtyKDApLGtyKDEsMSksUWUoMixiN2UsMSwwLCJsYWJlbCIsMCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEMD0oKCk9PntjbGFzcyBjIGV4''@;'; put 'put ''dGVuZHMgVDh7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKGEsVDAsZCxoLGYsXyksdGhpcy50b2dnbGU9VH1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCk7Y29uc3QgYT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihWRixudWxsKTthJiZudWxsIT09dGhpcy50b2dnbGUm''@;'; put 'put ''JmEubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSksUDQoImNsclRvZ2dsZSIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyQ2hlY2ti''@;'; put 'put ''b3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxmZWF0dXJlczpbZW9dfSksY30pKCksRDg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRo''@;'; put 'put ''aXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9''@;'; put 'put ''bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5jaGVja2JveGVzLmxlbmd0aD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNk''@;'; put 'put ''KSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LWNvbnRhaW5lciJdLFsiY2xyLXRvZ2dsZS1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxEMCw1KSwyJmEpe2xldCBm''@;'; put 'put ''O3NpKGY9YWkoKSkmJihkLmNoZWNrYm94ZXM9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJyb2xlIixkLnJvbGUpLGhyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9u''@;'; put 'put ''dWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbdGkoW2xkLGswLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpUN2UsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5n''@;'; put 'put ''SWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1''@;'; put 'put ''ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJh''@;'; put 'put ''cmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoQTdl''@;'; put 'put ''KSxrcigwKSxRZSgxLEM3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxRZSg1LFM3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLFFlKDYsTTdlLDEsMCwiY2RzLWljb24iLDMpLFFlKDcseDdlLDEsMCwiY2RzLWljb24iLDQpLFFlKDgsRTdlLDEsMCwi''@;'; put 'put ''bmctY29udGVudCIsMCksUWUoOSxrN2UsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGhyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xh''@;'; put 'put ''c3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W1ppLFVzLHVjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxUeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBl''@;'; put 'put ''OmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLFpjLHlFXSxaY119KSxjfSkoKTtmdW5jdGlvbiB1ZChjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09dHlwZW9mIGM/Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IHUyPSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEwfWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9dWQoYSl9Z2V0IGludmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMu''@;'; put 'put ''X2ludmVyc2U9dWQoYSl9Z2V0IHNtYWxsQ2xhc3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPXVkKGEpfWdldCBtZWRpdW1DbGFzcygpe3JldHVybiF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVt''@;'; put 'put ''PXVkKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNwaW5uZXIiXV0saG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtYnVz''@;'; put 'put ''eSIsITApLGhyKCJzcGlubmVyIixkLnNwaW5uZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFzcykoInNwaW5uZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRz''@;'; put 'put ''OntjbHJJbmxpbmU6ImNscklubGluZSIsY2xySW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3Io''@;'; put 'put ''MCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxrYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO3ZhciB4''@;'; put 'put ''cD1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfSh4cHx8e30pO2xldCBKSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5wbGF0Zm9ybUlk''@;'; put 'put ''PWR9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Zm9jdXMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKSh0dChOaSksdHQoR3MpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXNJdGVtIiwiIl1dfSksY30pKCksSTg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLmRpcmVjdGlvbj14cC5W''@;'; put 'put ''RVJUSUNBTCx0aGlzLmZvY3VzT25Mb2FkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBFcix0aGlzLl9jdXJyZW50PTB9Z2V0IGZvY3VzYWJsZUl0ZW1zKCl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuX2ZvY3VzYWJsZUl0ZW1zOnRoaXMu''@;'; put 'put ''Y2xyS2V5Rm9jdXNJdGVtcz90aGlzLmNscktleUZvY3VzSXRlbXMudG9BcnJheSgpOltdfXNldCBmb2N1c2FibGVJdGVtcyhhKXtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzYWJsZUl0ZW1zPWEsdGhpcy5pbml0aWFsaXplRm9jdXMoKSl9Z2V0IG5hdGl2ZUVsZW1l''@;'; put 'put ''bnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRJdGVtKCl7cmV0dXJuIHRoaXMuZm9jdXNh''@;'; put 'put ''YmxlSXRlbXNbdGhpcy5fY3VycmVudF19Z2V0IGN1cnJlbnRJdGVtRWxlbWVudCgpe3JldHVybiB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQ/dGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50OnRoaXMuY3VycmVudEl0ZW19bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JJdGVtVXBkYXRlcygpKSx0aGlzLmluaXRpYWxpemVGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVLZXlib2FyZEV2ZW50KGEpe2lmKHRoaXMuY3VycmVu''@;'; put 'put ''dEl0ZW1FbGVtZW50IT09YS50YXJnZXQpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO3RoaXMucG9zaXRpb25JblJhbmdlKGQpJiYodGhpcy5jdXJyZW50PWQpfXRoaXMucHJldktleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKT90''@;'; put 'put ''aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQtMSk6dGhpcy5uZXh0S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50KzEpOmEuY29kZT09PXdvLkhvbWU/dGhpcy5tb3ZlVG8oMCk6YS5jb2RlPT09d28uRW5kJiZ0aGlz''@;'; put 'put ''Lm1vdmVUbyh0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSxURihhKX1zZXRDbGlja2VkSXRlbUN1cnJlbnQoYSl7Y29uc3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7ZD4tMSYmdGhpcy5tb3ZlVG8oZCl9Zm9jdXNDdXJyZW50KCl7dGhpcy5jdXJyZW50SXRlbS5mb2N1''@;'; put 'put ''cygpLHRoaXMuZm9jdXNDaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1tb3ZlVG8oYSl7dGhpcy5wb3NpdGlvbkluUmFuZ2UoYSkmJih0aGlzLmN1cnJlbnQ9YSx0aGlzLmZvY3VzQ3VycmVudCgpKX1wb3NpdGlvbkluUmFuZ2UoYSl7cmV0dXJuIGE+PTAmJmE8dGhpcy5mb2N1c2FibGVJdGVt''@;'; put 'put ''cy5sZW5ndGh9Y3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudC0xPj0wfWN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudCsxPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWluaXRpYWxpemVGb2N1cygpe3RoaXMu''@;'; put 'put ''Zm9jdXNhYmxlSXRlbXMmJnRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD49dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLHRoaXMuZm9jdXNPbkxvYWQmJih0aGlzLmN1cnJlbnRJ''@;'; put 'put ''dGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5uZXh0KCkpKX1uZXh0S2V5UHJlc3NlZChhKXtjb25zdCBkPWwyKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgeHAuVkVSVElDQUw6cmV0dXJuIGQ9PT13by5BcnJvd0Rvd247Y2FzZSB4cC5IT1JJWk9OVEFMOnJldHVybiBk''@;'; put 'put ''PT09d28uQXJyb3dSaWdodDtjYXNlIHhwLkJPVEg6cmV0dXJuIGQ9PT13by5BcnJvd0Rvd258fGQ9PT13by5BcnJvd1JpZ2h0O2RlZmF1bHQ6cmV0dXJuITF9fXByZXZLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9bDIoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSB4cC5WRVJUSUNB''@;'; put 'put ''TDpyZXR1cm4gZD09PXdvLkFycm93VXA7Y2FzZSB4cC5IT1JJWk9OVEFMOnJldHVybiBkPT09d28uQXJyb3dMZWZ0O2Nhc2UgeHAuQk9USDpyZXR1cm4gZD09PXdvLkFycm93VXB8fGQ9PT13by5BcnJvd0xlZnQ7ZGVmYXVsdDpyZXR1cm4hMX19Z2V0SXRlbVBvc2l0aW9uKGEpe3JldHVybiB0''@;'; put 'put ''aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YoYSk6dGhpcy5mb2N1c2FibGVJdGVtcy5tYXAoZD0+ZC5uYXRpdmVFbGVtZW50KS5pbmRleE9mKGEpfWxpc3RlbkZvckl0ZW1VcGRhdGVzKCl7cmV0dXJuIHRoaXMuY2xyS2V5Rm9jdXNJdGVtcy5jaGFuZ2Vz''@;'; put 'put ''LnN1YnNjcmliZSgoKT0+e3RoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXMiLCIiXV0sY29udGVudFF1''@;'; put 'put ''ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxKSiw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLmNscktleUZvY3VzSXRlbXM9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVLZXli''@;'; put 'put ''b2FyZEV2ZW50KGYpfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zZXRDbGlja2VkSXRlbUN1cnJlbnQoZil9KX0saW5wdXRzOntkaXJlY3Rpb246WyJjbHJEaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxmb2N1c09uTG9hZDpbImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxm''@;'; put 'put ''b2N1c2FibGVJdGVtczpbImNscktleUZvY3VzIiwiZm9jdXNhYmxlSXRlbXMiXX0sb3V0cHV0czp7Zm9jdXNDaGFuZ2U6ImNsckZvY3VzQ2hhbmdlIn0sYXR0cnM6RDdlLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRp''@;'; put 'put ''KCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxCRj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp''@;'; put 'put ''O2NvbnN0IEw4PW5ldyBNaSgiUE9QT1ZFUl9IT1NUX0FOQ0hPUiIpO2NsYXNzIER5ZXtjb250YWluc0l0ZW0obCl7cmV0dXJuISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJdGVtKGwp''@;'; put 'put ''fWlzRW1wdHkoKXtyZXR1cm4hKHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjApfXBvcCgpe2xldCBsO3JldHVybiB0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wJiYobD10aGlzLm1vZGVsW3RoaXMubW9kZWwubGVuZ3RoLTFdLHRoaXMucmVtb3ZlSXRlbShsKSksbH10b1N0''@;'; put 'put ''cmluZyhsLGE9LTEpe2xldCBkPSIiO3JldHVybiB0aGlzLm1vZGVsJiYoYT4tMT90aGlzLm1vZGVsW2FdJiYoZCs9bCYmdGhpcy5tb2RlbFthXVtsXT90aGlzLm1vZGVsW2FdW2xdOnRoaXMubW9kZWxbYV0udG9TdHJpbmcoKSk6dGhpcy5tb2RlbC5mb3JFYWNoKGg9PntkKz1sJiZoW2xdP2hb''@;'; put 'put ''bF06aC50b1N0cmluZygpLGQrPSIgIn0pKSxkLnRyaW0oKX1hZGRJdGVtKGwpe3RoaXMuY29udGFpbnNJdGVtKGwpfHwodGhpcy5tb2RlbD10aGlzLm1vZGVsfHxbXSx0aGlzLm1vZGVsLnB1c2gobCkpfXJlbW92ZUl0ZW0obCl7aWYobnVsbD09dGhpcy5tb2RlbClyZXR1cm47Y29uc3QgYT10''@;'; put 'put ''aGlzLm1vZGVsLmluZGV4T2YobCk7YT4tMSYmdGhpcy5tb2RlbC5zcGxpY2UoYSwxKSwwPT09dGhpcy5tb2RlbC5sZW5ndGgmJih0aGlzLm1vZGVsPW51bGwpfX1jbGFzcyBJeWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiB0aGlzLm1vZGVsPT09bH1zZWxlY3QobCl7dGhpcy5tb2RlbD1sfXVu''@;'; put 'put ''c2VsZWN0KGwpe3RoaXMuY29udGFpbnNJdGVtKGwpJiYodGhpcy5tb2RlbD1udWxsKX1pc0VtcHR5KCl7cmV0dXJuIXRoaXMubW9kZWx9cG9wKCl7Y29uc3QgbD10aGlzLm1vZGVsO3JldHVybiB0aGlzLm1vZGVsPW51bGwsbH10b1N0cmluZyhsKXtyZXR1cm4gdGhpcy5tb2RlbD9sJiZ0aGlz''@;'; put 'put ''Lm1vZGVsW2xdP3RoaXMubW9kZWxbbF06dGhpcy5tb2RlbC50b1N0cmluZygpOiIifX1jbGFzcyBDRXt9ZnVuY3Rpb24gUUooYyl7cmV0dXJuW2Mse3Byb3ZpZGU6Q0UsdXNlRXhpc3Rpbmc6Y31dfWNsYXNzIEx5ZSBleHRlbmRzIEl5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50''@;'; put 'put ''cyksdGhpcy5fZm9jdXNDaGFuZ2VkPW5ldyBUZShudWxsKX1nZXQgZm9jdXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlZC5hc09ic2VydmFibGUoKX1zZWxlY3QobCl7dGhpcy5tb2RlbCE9PWwmJih0aGlzLm1vZGVsPWwsdGhpcy5fZm9jdXNDaGFuZ2VkLm5leHQobCkpfX1s''@;'; put 'put ''ZXQgUnllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmc9ITEsdGhpcy5fY3VycmVudElucHV0PSIiLHRoaXMuX2lucHV0Q2hhbmdlZD1uZXcgVGUoIiIpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQ9bmV3ICR4KDEpLHRoaXMuaW5wdXRDaGFuZ2VkPXRoaXMuX2lucHV0''@;'; put 'put ''Q2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudElucHV0KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbnB1dH1zZXQgY3VycmVudElucHV0KGEpeyIiPT09YSYmIXRoaXMubXVsdGlzZWxlY3RhYmxlJiZ0aGlzLnNldFNlbGVjdGlvblZhbHVlKG51bGwpLHRoaXMuX2N1cnJlbnRJbnB1''@;'; put 'put ''dD1hLHRoaXMuX2lucHV0Q2hhbmdlZC5uZXh0KGEpfWdldCBzZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IG11bHRpc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsIGluc3RhbmNlb2YgRHllfXNl''@;'; put 'put ''bGVjdChhKXtudWxsPT1hfHx0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dG9nZ2xlKGEpe251bGwhPWEmJih0aGlzLnNlbGVj''@;'; put 'put ''dGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKT90aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpOnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dW5zZWxlY3QoYSl7bnVsbD09YXx8IXRoaXMu''@;'; put 'put ''c2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXNldFNlbGVjdGlvblZhbHVlKGEpeyF0aGlzLnNlbGVjdGlvbk1vZGVsfHx0aGlzLnNl''@;'; put 'put ''bGVjdGlvbk1vZGVsLm1vZGVsPT09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWwmJiFhfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD1hLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO1FKKCgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5zZWxlY3Rpb25TZXJ2aWNlPWgsdGhpcy5wbGF0''@;'; put 'put ''Zm9ybUlkPWYsdGhpcy5wc2V1ZG9Gb2N1cz1uZXcgTHllLHRoaXMub3B0aW9uRGF0YT1bXSx0aGlzLmhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCksdGhpcy5yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQg''@;'; put 'put ''dHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCBsaXN0Ym94KCl7cmV0dXJuIHRoaXMuX2xpc3Rib3h9c2V0IGxpc3Rib3goYSl7dGhpcy5fbGlzdGJveD1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgdGV4dElu''@;'; put 'put ''cHV0KCl7cmV0dXJuIHRoaXMuX3RleHRJbnB1dH1zZXQgdGV4dElucHV0KGEpe3RoaXMuX3RleHRJbnB1dD1hLHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24iLGQ9PiF0aGlzLmhhbmRsZVRleHRJbnB1dChkKSksdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWZvY3VzSW5w''@;'; put 'put ''dXQoKXt0aGlzLnRleHRJbnB1dCYmUnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50ZXh0SW5wdXQuZm9jdXMoKX1mb2N1c0ZpcnN0QWN0aXZlKCl7aWYodGhpcy5vcHRpb25EYXRhLmxlbmd0aD4wKWlmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpdGhp''@;'; put 'put ''cy5wc2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhWzBdKTtlbHNle2xldCBhO2E9dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWxbMF06dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVj''@;'; put 'put ''dGlvbk1vZGVsLm1vZGVsO2NvbnN0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmQoaD0+aC52YWx1ZT09PWEpO3RoaXMucHNldWRvRm9jdXMuc2VsZWN0KGR8fHRoaXMub3B0aW9uRGF0YVswXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgiYXV0byIpfX1hZGRPcHRpb25WYWx1ZXMoYSl7''@;'; put 'put ''dGhpcy5vcHRpb25EYXRhPWF9aGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2F8fCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsPW51bGwpfSl9bW92ZUZvY3VzVG8oYSl7bGV0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmRJ''@;'; put 'put ''bmRleChoPT5oLmVxdWFscyh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsKSk7YT09PWQxLlVQPy0xPT09ZHx8MD09PWQ/ZD10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE6ZC0tOmE9PT1kMS5ET1dOJiYoLTE9PT1kfHxkPT09dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xP2Q9MDpkKyspLHRoaXMucHNl''@;'; put 'put ''dWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVtkXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgpfW9wZW5BbmRNb3ZlVG8oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5tb3ZlRm9jdXNUbyhhKToodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZShp''@;'; put 'put ''ZCgxKSkuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLm1vdmVGb2N1c1RvKGEpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWhhbmRsZVRleHRJbnB1dChhKXtsZXQgZD0hMTtjb25zdCBoPWwyKGEua2V5KTtpZihhKXN3aXRjaChoKXtjYXNlIHdvLkVudGVyOnRoaXMudG9nZ2xlU2Vydmlj''@;'; put 'put ''ZS5vcGVuJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlKHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5w''@;'; put 'put ''c2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSksZD0hMCk7YnJlYWs7Y2FzZSB3by5TcGFjZTp0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbnx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwLGQ9ITApO2JyZWFrO2Nhc2Ugd28uQXJyb3dVcDp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0''@;'; put 'put ''aGlzLm9wZW5BbmRNb3ZlVG8oZDEuVVApLGQ9ITA7YnJlYWs7Y2FzZSB3by5BcnJvd0Rvd246dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKGQxLkRPV04pLGQ9ITA7YnJlYWs7ZGVmYXVsdDphLmtleSE9PXdvLlRhYiYmKCF0aGlzLnNlbGVjdGlv''@;'; put 'put ''blNlcnZpY2UubXVsdGlzZWxlY3RhYmxlfHxhLmtleSE9PXdvLkJhY2tzcGFjZSkmJmEua2V5IT09d28uRXNjYXBlJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9cmV0dXJuIGR9c2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoYT0ic21vb3Ro''@;'; put 'put ''Iil7dGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6YSxibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSl9cHJldmVudFZpZXdwb3J0U2Nyb2xsaW5n''@;'; put 'put ''KGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl7UnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuZm9jdXNPdXRPZkNvbXBvbmVudChkKSYmKHRo''@;'; put 'put ''aXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMuY29tcG9uZW50Q2RSZWYmJnRoaXMuY29tcG9uZW50Q2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX0pfWZvY3VzT3V0T2ZDb21wb25lbnQoYSl7Y29uc3QgZD1hLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuISh0''@;'; put 'put ''aGlzLnRleHRJbnB1dC5jb250YWlucyhkKXx8dGhpcy50cmlnZ2VyLmNvbnRhaW5zKGQpfHx0aGlzLmxpc3Rib3guY29udGFpbnMoZCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihZMyksYXIoS3MpLGFyKFJ5ZSksYXIoR3MpKX0sYy5cdTAy''@;'; put 'put ''NzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSk7bGV0IE95ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEsaDgsdGIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sJGwsc2EsQkYsWmMsc2QsTWIsa2JdLFpjLHNkXX0pLGN9KSgpLGpGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBOHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaW5wdXQtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiY2xyLWZvcm0tY29udHJvbCIsITApKCJj''@;'; put 'put ''bHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOlt0aShbbGQsazAsYWQsY2RdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOno3ZSxkZWNsczoxMCx2YXJzOjcsY29u''@;'; put 'put ''c3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlk''@;'; put 'put ''ZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJk''@;'; put 'put ''YW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh''@;'; put 'put ''JiYoVGkoajdlKSxrcigwKSxRZSgxLFA3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksa3IoNCwxKSxRZSg1LEY3ZSwxLDAsImNkcy1pY29uIiwzKSxRZSg2LEg3ZSwxLDAsImNkcy1pY29uIiw0KSx5ZSgpLFFlKDcsTjdlLDEsMCwibmctY29udGVudCIsMCksUWUo''@;'; put 'put ''OCxWN2UsMSwwLCJuZy1jb250ZW50IiwwKSxRZSg5LEI3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLFJlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxDZSgzKSxSZSgibmdJZiIsZC5zaG93''@;'; put 'put ''SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbWmksVXMsdWMscXNdLGVuY2Fwc3Vs''@;'; put 'put ''YXRpb246Mn0pLGN9KSgpLGYxPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEsakYsZCxoLGYsXyksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0''@;'; put 'put ''KHp1LDEwKSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySW5wdXQiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJjbHItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLGVR''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxaY10sWmNd''@;'; put 'put ''fSksY30pKCksekY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IFRlKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFB5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sZVEsc2FdXX0pLGN9KSgpO2NvbnN0IEh5ZT0vZCsuK20rLit5Ky9pLE55ZT0vbSsuK2QrLit5Ky9pLFZ5ZT0vZCt8bSt8eSsvaSxCeWU9L1xk''@;'; put 'put ''Ky9nLGp5ZT0vTW9iaS9pLHp5ZT0vXHUyMDBmL2csVUY9IllZWVkiLFNFPXtuYW1lOiJMSVRUTEVfRU5ESUFOIixmb3JtYXQ6WyJERCIsIk1NIixVRl19LFdGPXtuYW1lOiJNSURETEVfRU5ESUFOIixmb3JtYXQ6WyJNTSIsIkREIixVRl19LFV5ZT17bmFtZToiQklHX0VORElBTiIsZm9ybWF0''@;'; put 'put ''OltVRiwiTU0iLCJERCJdfTtmdW5jdGlvbiBuUShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5nZXREYXRlKCl9Y2xhc3MgJHlle2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSxfPSExKXt0aGlzLmRheU1vZGVsPWwsdGhpcy5pc1RvZGF5c0RhdGU9YSx0aGlzLmlzRXhj''@;'; put 'put ''bHVkZWQ9ZCx0aGlzLmlzRGlzYWJsZWQ9aCx0aGlzLmlzU2VsZWN0ZWQ9Zix0aGlzLmlzRm9jdXNhYmxlPV99Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgcDF7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlz''@;'; put 'put ''LmRhdGU9ZH1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2Nv''@;'; put 'put ''bnN0IGE9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgcDEoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHAxKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21w''@;'; put 'put ''YXJpc29uU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCl9cGFkKGwpe3JldHVybiBsPDEwP2AwJHtsfWA6''@;'; put 'put ''YCR7bH1gfX1jbGFzcyBxeWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe3RoaXMuY2FsZW5kYXI9bCx0aGlzLnNlbGVjdGVkRGF5PWEsdGhpcy5mb2N1c2FibGVEYXk9ZCx0aGlzLnRvZGF5PWgsdGhpcy5maXJzdERheU9mV2Vlaz1mLHRoaXMuZXhjbHVkZWREYXRlcz1fLHRoaXMuY3Vyck1v''@;'; put 'put ''bnRoRGF5Vmlld3M9W10sdGhpcy5pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl9Z2V0IGNhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9jYWxlbmRhclZpZXd9dXBkYXRlRm9jdXNhYmxlRGF5KGwpe3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMSksdGhpcy5zZXRG''@;'; put 'put ''b2N1c2FibGVGbGFnKGwsITApLHRoaXMuZm9jdXNhYmxlRGF5PWx9aW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpe2NvbnN0IGw9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLGQ9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmll''@;'; put 'put ''dyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksaD00Mi0odGhpcy5jYWxlbmRhci5kYXlzLmxlbmd0aCtkKTtsZXQgZj1bXSxfPVtdO2Q+MCYmKGY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMobC5kYXlzLnNsaWNlKC0xKmQpLCEwLCExKSksdGhpcy5jdXJyTW9u''@;'; put 'put ''dGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRheXMsITEsITApLGg+MCYmKF89dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsaCksITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFy''@;'; put 'put ''VmlldyhmLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsXyksdGhpcy5pbml0aWFsaXplU2VsZWN0ZWREYXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChsKXtjb25zdHttaW5EYXRlOmEsbWF4RGF0ZTpkfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaD1hLnRvQ29t''@;'; put 'put ''cGFyaXNvblN0cmluZygpLGY9ZC50b0NvbXBhcmlzb25TdHJpbmcoKSxfPWwudG9Db21wYXJpc29uU3RyaW5nKCk7cmV0dXJuIShfPj1oJiZfPD1mKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMobCxhLGQpe2NvbnN0IGg9bC5tYXAoZj0+bmV3ICR5ZShmLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRl''@;'; put 'put ''ZChmKSwhMSwhMSkpO3JldHVybiBkJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KSYmKGhbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaH1udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyhsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gWXllKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4gbmV3IERhdGUoYyxsLGEpLmdldERheSgpfShsLGEsMSk7cmV0dXJuIGQ+PXRoaXMuZmlyc3REYXlPZldlZWs/ZC10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZC10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcobCl7cmV0dXJuISF0aGlzLmNhbGVuZGFy''@;'; put 'put ''LmlzRGF5SW5DYWxlbmRhcihsKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhsLGEsZCl7Y29uc3QgaD1bLi4ubCwuLi5hLC4uLmRdLGY9W107Zm9yKGxldCBfPTA7Xzw2O18rKylmW19dPWguc2xpY2UoNypfLDcqKF8rMSkpO3JldHVybiBmfWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2Vs''@;'; put 'put ''ZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KSYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbdGhpcy5zZWxlY3RlZERheS5kYXRlLTFdLmlzU2VsZWN0ZWQ9ITApfWluaXRpYWxpemVGb2N1c2FibGVEYXkoKXt0aGlzLmZvY3VzYWJsZURheSYmdGhp''@;'; put 'put ''cy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuZm9jdXNhYmxlRGF5KT90aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApOnRoaXMuc2VsZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KT8odGhpcy5zZXRGb2N1c2FibGVG''@;'; put 'put ''bGFnKHRoaXMuc2VsZWN0ZWREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9kYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhp''@;'; put 'put ''cy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IHAxKHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKGwsYSl7bCYmKHRoaXMuY3Vy''@;'; put 'put ''ck1vbnRoRGF5Vmlld3NbbC5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfX1sZXQgQWI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxvY2FsZT1hLHRoaXMuX2ZpcnN0RGF5T2ZXZWVrPTAsdGhpcy5pbml0aWFsaXplTG9jYWxlRGF0YSgpfWdldCBmaXJzdERheU9mV2Vlaygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9maXJzdERheU9mV2Vla31nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVEYXlzfWdldCBsb2NhbGVEYXlzTmFycm93KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXMubWFwKGE9PmEubmFycm93KX1nZXQgbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWR9Z2V0IGxvY2FsZU1vbnRoc1dpZGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzV2lkZX1nZXQgbG9jYWxlRGF0ZUZvcm1hdCgpe3JldHVybiB0aGlzLl9sb2NhbGVEYXRlRm9ybWF0fWluaXRpYWxpemVMb2NhbGVEYXRhKCl7dGhp''@;'; put 'put ''cy5pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNXaWRlKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF5cygp''@;'; put 'put ''fWluaXRpYWxpemVMb2NhbGVEYXlzKCl7Y29uc3QgYT1bXSxkPWNPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuV2lkZSkuc2xpY2UoKSxoPWNPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuTmFycm93KS5zbGljZSgpLGY9dGhpcy5maXJzdERheU9mV2Vlaztmb3IobGV0IF89''@;'; put 'put ''MDtfPDc7XysrKWEucHVzaCh7ZGF5OmRbX10sbmFycm93OmhbX119KTtpZihmPjApe2NvbnN0IF89YS5zcGxpY2UoMCxmKTthLnB1c2goLi4uXyl9dGhpcy5fbG9jYWxlRGF5cz1hfWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlh''@;'; put 'put ''dGVkPXVPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuQWJicmV2aWF0ZWQpLnNsaWNlKCl9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKXt0aGlzLl9sb2NhbGVNb250aHNXaWRlPXVPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuV2lkZSkuc2xpY2UoKX1pbml0aWFsaXpl''@;'; put 'put ''Rmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiBQdWUoYyl7cmV0dXJuIEJsKGMpW3FvLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiBNXyhj''@;'; put 'put ''LGwpe3JldHVybiB0ZChCbChjKVtxby5EYXRlRm9ybWF0XSxsKX0odGhpcy5sb2NhbGUseTAuU2hvcnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihLZCkpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p''@;'; put 'put ''LGN9KSgpO2NsYXNzIGQye2NvbnN0cnVjdG9yKGwsYSl7dGhpcy55ZWFyPWwsdGhpcy5tb250aD1hLHRoaXMuaW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGh9aXNEYXlJbkNhbGVu''@;'; put 'put ''ZGFyKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1wcmV2aW91c01vbnRoKCl7cmV0dXJuIDA9PT10aGlzLm1vbnRoP25ldyBkMih0aGlzLnllYXItMSwxMSk6bmV3IGQyKHRoaXMueWVhcix0aGlzLm1vbnRoLTEpfW5leHRNb250aCgpe3Jl''@;'; put 'put ''dHVybiAxMT09PXRoaXMubW9udGg/bmV3IGQyKHRoaXMueWVhcisxLDApOm5ldyBkMih0aGlzLnllYXIsdGhpcy5tb250aCsxKX1pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKXtjb25zdCBsPW5RKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5t''@;'; put 'put ''YXAoKGEsZCk9Pm5ldyBwMSh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IFBmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZT1uZXcgYmUsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJD''@;'; put 'put ''aGFuZ2U9bmV3IGJlLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgYmUsdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgYmV9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBkaXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1n''@;'; put 'put ''ZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpc3BsYXllZENhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c09uQ2Fs''@;'; put 'put ''ZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c2VkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9bm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKGEpe3RoaXMu''@;'; put 'put ''c2VsZWN0ZWREYXk9YSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZS5uZXh0KGEpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBkMih0''@;'; put 'put ''aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IGQyKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEp''@;'; put 'put ''KX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IGQyKGEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1t''@;'; put 'put ''b3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb0N1cnJlbnRNb250aCgpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpfHx0aGlz''@;'; put 'put ''LnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCkpLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5uZXh0KCl9aW5jcmVtZW50Rm9jdXNEYXkoYSl7dGhpcy5mb2N1c2VkRGF5PXRoaXMuZm9jdXNlZERheS5pbmNyZW1lbnRCeShh''@;'; put 'put ''KSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy5mb2N1c2VkRGF5KT90aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLm5leHQodGhpcy5mb2N1c2VkRGF5KTp0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLmZvY3VzZWREYXkueWVhcix0aGlzLmZv''@;'; put 'put ''Y3VzZWREYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfXNldERpc3BsYXllZENhbGVuZGFyKGEpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hh''@;'; put 'put ''bmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgcDEodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1''@;'; put 'put ''bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLE84PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pv''@;'; put 'put ''bmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRl''@;'; put 'put ''eD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+YS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChhKXtyZXR1cm4gUnModGhp''@;'; put 'put ''cy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodXAoKSxJYSgoKT0+UnModGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihObyksYXIoR3MpKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxQOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0''@;'; put 'put ''aGlzLmRpc2FibGVkRGF0ZXM9e21pbkRhdGU6bmV3IHAxKDAsMCwxKSxtYXhEYXRlOm5ldyBwMSg5OTk5LDExLDMxKX0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD0iZGQvTU0veSIsdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PVNFLHRoaXMuZGVsaW1pdGVycz1bIi8iLCIvIl0sdGhpcy5j''@;'; put 'put ''bGRyTG9jYWxlRGF0ZUZvcm1hdD10aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURhdGVGb3JtYXQsdGhpcy5pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpfWdldCBwbGFjZWhvbGRlclRleHQoKXtjb25zdCBhPXRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3JtYXQ7cmV0''@;'; put 'put ''dXJuIGFbMF0rdGhpcy5kZWxpbWl0ZXJzWzBdK2FbMV0rdGhpcy5kZWxpbWl0ZXJzWzFdK2FbMl19c2V0TWluRGF0ZShhKXtpZihhKXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcChfPT5wYXJzZUludChfLDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IHAxKGQsaC0x''@;'; put 'put ''LGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IHAxKDAsMCwxKX1zZXRNYXhEYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKF89PnBhcnNlSW50KF8sMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgcDEoZCxoLTEsZil9ZWxz''@;'; put 'put ''ZSB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgcDEoOTk5OSwxMSwzMSl9dG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpe2lmKGEpe2lmKGlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4iIjtjb25zdCBkPWEuZ2V0RGF0ZSgpLGg9YS5nZXRNb250aCgpKzEsZj1kPjk/ZC50b1N0''@;'; put 'put ''cmluZygpOiIwIitkLF89aD45P2gudG9TdHJpbmcoKToiMCIraDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09U0U/Zit0aGlzLmRlbGltaXRlcnNbMF0rXyt0aGlzLmRlbGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PVdGP18r''@;'; put 'put ''dGhpcy5kZWxpbWl0ZXJzWzBdK2YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTphLmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK18rdGhpcy5kZWxpbWl0ZXJzWzFdK2Z9cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSl7aWYoIWEpcmV0dXJu''@;'; put 'put ''IG51bGw7Y29uc3QgZD1hLm1hdGNoKEJ5ZSk7aWYoIWR8fDMhPT1kLmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdFtoLGYsX109ZDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09U0U/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoXyxmLGgpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1h''@;'; put 'put ''dD09PVdGP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKF8saCxmKTp0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShoLGYsXyl9aW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKXtjb25zdCBhPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLmxvY2Fs''@;'; put 'put ''ZURpc3BsYXlGb3JtYXQ9SHllLnRlc3QoYSk/U0U6TnllLnRlc3QoYSk/V0Y6VXllLHRoaXMuZXh0cmFjdERlbGltaXRlcnMoKX1leHRyYWN0RGVsaW1pdGVycygpe2lmKHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQpe2NvbnN0IGQ9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC5yZXBsYWNl''@;'; put 'put ''KHp5ZSwiIikuc3BsaXQoVnllKTtkJiY0PT09ZC5sZW5ndGg/dGhpcy5kZWxpbWl0ZXJzPVtkWzFdLGRbMl1dOmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgcmVjZWl2ZWQuIERlbGltaXRlcnMgZXh0cmFjdGVkOiAiLGQpfX1pc1ZhbGlkTW9udGgoYSl7cmV0dXJuIGE+''@;'; put 'put ''LTEmJmE8MTJ9aXNWYWxpZERhdGUoYSxkLGgpe3JldHVybiBoPjAmJmg8PW5RKGEsZCl9dmFsaWRhdGVBbmRHZXREYXRlKGEsZCxoKXtjb25zdCBmPSthLF89K2QtMSxUPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aChfKXx8IXRoaXMuaXNWYWxpZERhdGUoZixfLFQpKXJldHVybiBudWxsO2Nv''@;'; put 'put ''bnN0IFc9ZnVuY3Rpb24gV3llKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0xO2lmKGM+OTk5KXJldHVybiBjO2NvbnN0IGw9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAwKk1hdGguZmxvb3IobC8xMDApO3JldHVybiBkPmwrMjAmJihkLT0xMDAp''@;'; put 'put ''LGR9KGYpO3JldHVybi0xIT09Vz9uZXcgRGF0ZShXLF8sVCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoQWIpKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxUYj0oKCk9PntjbGFz''@;'; put 'put ''cyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgYmUsdGhpcy5fZGlydHlDaGFuZ2U9bmV3IGJlfWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rp''@;'; put 'put ''cnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHJRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5fdG9nZ2xlU2VydmljZT1k''@;'; put 'put ''LHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mfWdldCBkYXlWaWV3KCl7cmV0dXJuIHRoaXMuX2RheVZpZXd9c2V0IGRheVZpZXcoYSl7dGhpcy5fZGF5Vmlldz1hfWdldCBkYXlTdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXlWaWV3LmlzU2VsZWN0ZWQ/''@;'; put 'put ''dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RlZExhYmVsLHtGVUxMX0RBVEU6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX0pOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9b25E''@;'; put 'put ''YXlWaWV3Rm9jdXMoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWx9c2VsZWN0RGF5KCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRheVZpZXcuZGF5TW9kZWwpLHRo''@;'; put 'put ''aXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpLHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoUGYpLHR0KEtzKSx0dChUYiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImRheSIsITApfSxpbnB1dHM6e2RheVZpZXc6WyJjbHJEYXlWaWV3IiwiZGF5VmlldyJdfSxkZWNsczoyLHZhcnM6MTMsY29uc3RzOltbInR5cGUiLCJidXR0''@;'; put 'put ''b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9jdXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdG''@;'; put 'put ''b2N1cygpfSksTmUoMSkseWUoKSksMiZhJiYoaHIoImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1Nl''@;'; put 'put ''bGVjdGVkKSxUcigidGFiaW5kZXgiLGQuZGF5Vmlldy50YWJJbmRleCkoImFyaWEtY3VycmVudCIsZC5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGQuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpLENlKDEp''@;'; put 'put ''LG1yKCIgIixkLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksaVE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlz''@;'; put 'put ''Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZGF0ZUlPU2VydmljZT1mLHRoaXMuX2VsUmVmPV8sdGhpcy5fc3Vicz1bXSx0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCksdGhpcy5pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF5c31nZXQgY2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl9''@;'; put 'put ''Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZv''@;'; put 'put ''Y3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vbktleURvd24oYSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaChsMihhLmtleSkpe2Nhc2Ugd28uQXJyb3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhp''@;'; put 'put ''cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIHdvLkFycm93RG93bjphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcpO2JyZWFrO2Nhc2Ugd28uQXJyb3dMZWZ0OmEu''@;'; put 'put ''cHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2Ugd28uQXJyb3dSaWdodDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDEpfX1pbml0''@;'; put 'put ''aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2''@;'; put 'put ''aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX0pKX1nZW5lcmF0ZUNhbGVuZGFyVmlldygpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWw9bmV3IHF5ZSh0aGlzLmNhbGVuZGFyLHRoaXMuc2VsZWN0ZWREYXksdGhpcy5mb2N1c2VkRGF5''@;'; put 'put ''LHRoaXMudG9kYXksdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5maXJzdERheU9mV2Vlayx0aGlzLl9kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBYiksdHQoUGYpLHR0KE84KSx0dChQOCks''@;'; put 'put ''dHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6''@;'; put 'put ''W1sxLCJjYWxlbmRhci10YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ciLCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdlZWtkYXkiLCJyb2xlIiwiaGVhZGluZyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImNhbGVuZGFyLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9m''@;'; put 'put ''Il0sWyJyb2xlIiwiaGVhZGluZyIsMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJihtZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLFFlKDIsVTdlLDIsMiwidGgiLDIpLHllKCksUWUoMyxZN2UsMiwxLCJ0ciIsMykseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksQ2UoMSksUmUoIm5nRm9yT2YiLGQuY2FsZW5kYXJW''@;'; put 'put ''aWV3TW9kZWwuY2FsZW5kYXJWaWV3KSl9LGRlcGVuZGVuY2llczpbclEseHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLE1FPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSx0aGlzLl9kb2N1bWVudCYmKHRo''@;'; put 'put ''aXMuX2lzVXNlckFnZW50TW9iaWxlPWp5ZS50ZXN0KGEuZGVmYXVsdFZpZXcubmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5faW5uZXJXaWR0aD1hLmRlZmF1bHRWaWV3LmlubmVyV2lkdGgpfWdldCBpc0VuYWJsZWQoKXtyZXR1cm4hKHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9pbm5lcldpZHRo''@;'; put 'put ''PDc2OCYmdGhpcy5faXNVc2VyQWdlbnRNb2JpbGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEY4PSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXt0aGlzLnBvc2l0aW9uPXgwWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3Vy''@;'; put 'put ''cmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01vbnRoVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNo''@;'; put 'put ''YW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksb1E9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9ZCx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9aCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWYsdGhpcy5fZWxSZWY9Xyx0aGlzLl9mb2N1c2Vk''@;'; put 'put ''TW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1lcygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlz''@;'; put 'put ''cGxheWVkQ2FsZW5kYXIubW9udGh9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPWwyKGEua2V5KTtkPT09d28uQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5k''@;'; put 'put ''ZXg+MD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dEb3duJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8oYS5wcmV2ZW50RGVmYXVs''@;'; put 'put ''dCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dSaWdodCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8Nj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250''@;'; put 'put ''aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4KzYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD41JiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRN''@;'; put 'put ''b250aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4LTYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19Y2hhbmdlTW9udGgoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKGEpLHRoaXMuX3ZpZXdNYW5hZ2Vy''@;'; put 'put ''U2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gYT09PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4PzA6LTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEY4KSx0dChBYiksdHQoUGYpLHR0KE84KSx0dChOaSkp''@;'; put 'put ''fSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9udGhwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSwyJmEmJmhyKCJtb250aHBp''@;'; put 'put ''Y2tlciIsITApfSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRo''@;'; put 'put ''IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmUWUoMCxXN2UsMiw0LCJidXR0b24iLDApLDImYSYmUmUoIm5nRm9yT2YiLGQubW9udGhOYW1lcyl9LGRlcGVuZGVuY2llczpbeHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIERie2NvbnN0cnVjdG9yKGwp''@;'; put 'put ''e3RoaXMueWVhcj1sLHRoaXMueWVhclJhbmdlPVtdLHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVhcigpe3JldHVybiB0aGlzLnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgRGIodGhpcy55''@;'; put 'put ''ZWFyKzEwKX1wcmV2aW91c0RlY2FkZSgpe3JldHVybiBuZXcgRGIodGhpcy55ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7cmV0dXJuIG5ldyBEYigobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UobCl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YobCk+LTF9Z2VuZXJhdGVZ''@;'; put 'put ''ZWFyUmFuZ2UoKXtjb25zdCBhPXRoaXMueWVhci10aGlzLnllYXIlMTA7dGhpcy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0ZVJhbmdlKGEsYSsxMCl9Z2VuZXJhdGVSYW5nZShsLGEpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YS1sfSwoZCxoKT0+aCtsKX19bGV0IGFRPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9YSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLnllYXJSYW5nZU1v''@;'; put 'put ''ZGVsPW5ldyBEYih0aGlzLmNhbGVuZGFyWWVhciksdGhpcy5fZm9jdXNlZFllYXI9dGhpcy5jYWxlbmRhclllYXJ9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlz''@;'; put 'put ''Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9bDIoYS5rZXkpO2Q9PT13by5BcnJvd1VwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMSkpOmQ9PT13by5BcnJvd0Rv''@;'; put 'put ''d24/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDEpKTpkPT09d28uQXJyb3dSaWdodD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoNSkpOmQ9PT13by5BcnJvd0xlZnQmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5p''@;'; put 'put ''bmNyZW1lbnRGb2N1c1llYXJCeSgtNSkpfX1jaGFuZ2VZZWFyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VZZWFyKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1wcmV2aW91c0RlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhp''@;'; put 'put ''cy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpfWN1cnJlbnREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5LnllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLmN1cnJl''@;'; put 'put ''bnREZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW5leHREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwubmV4dERlY2FkZSgpfWdldFRhYkluZGV4KGEpe3JldHVybiB0aGlzLnllYXJSYW5n''@;'; put 'put ''ZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy5fZm9jdXNlZFllYXI9dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuY2FsZW5kYXJZZWFyKT90aGlzLmNhbGVuZGFyWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLm1pZGRsZVllYXIpLHRoaXMuX2ZvY3VzZWRZ''@;'; put 'put ''ZWFyPT09YT8wOi0xfWluY3JlbWVudEZvY3VzWWVhckJ5KGEpe3RoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuX2ZvY3VzZWRZZWFyK2EsdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9YT4wP3RoaXMueWVhclJhbmdlTW9k''@;'; put 'put ''ZWwubmV4dERlY2FkZSgpOnRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChQZiksdHQo''@;'; put 'put ''RjgpLHR0KE84KSx0dChOaSksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXllYXJwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURv''@;'; put 'put ''d24oZil9KSwyJmEmJmhyKCJ5ZWFycGlja2VyIiwhMCl9LGRlY2xzOjksdmFyczo3LGNvbnN0czpbWzEsInllYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJs''@;'; put 'put ''ZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwieWVhcnMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJidXR0b24iLDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c0RlY2FkZSgpfSkscXQoMiwi''@;'; put 'put ''Y2RzLWljb24iLDIpLHllKCksbWUoMywiYnV0dG9uIiwxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudERlY2FkZSgpfSkscXQoNCwiY2RzLWljb24iLDMpLHllKCksbWUoNSwiYnV0dG9uIiwxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dERlY2Fk''@;'; put 'put ''ZSgpfSkscXQoNiwiY2RzLWljb24iLDQpLHllKCkoKSxtZSg3LCJkaXYiLDUpLFFlKDgsRzdlLDIsNCwiYnV0dG9uIiw2KSx5ZSgpKSwyJmEmJihDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzRGVjYWRlKSxDZSgxKSxUcigidGl0''@;'; put 'put ''bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50RGVjYWRlKSxDZSgxKSxUcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNr''@;'; put 'put ''ZXJDdXJyZW50RGVjYWRlKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLENlKDEpLFRyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLENlKDIpLFJlKCJuZ0Zvck9mIixkLnll''@;'; put 'put ''YXJSYW5nZU1vZGVsLnllYXJSYW5nZSkpfSxkZXBlbmRlbmNpZXM6W3FzLHhzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxsUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1k''@;'; put 'put ''LHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9N''@;'; put 'put ''T05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0''@;'; put 'put ''cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJyZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5n''@;'; put 'put ''ZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5h''@;'; put 'put ''dmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGOCksdHQoUGYpLHR0KEFiKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2Vy''@;'; put 'put ''Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiZGF5cGlja2VyIiwhMCl9LGRlY2xzOjE4LHZhcnM6MTQsY29uc3RzOltbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJi''@;'; put 'put ''dXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRocGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIs''@;'; put 'put ''MSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUo''@;'; put 'put ''MCwiZGl2IiwwKSxOZSgxKSx5ZSgpLG1lKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb01vbnRoVmlldygpfSksTmUoNSkseWUoKSxtZSg2LCJidXR0b24iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxOZSg3KSx5ZSgpKCksbWUoOCwiZGl2Iiw1KSg5LCJidXR0b24iLDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c01vbnRoKCl9KSxxdCgxMCwiY2RzLWljb24iLDcpLHllKCksbWUoMTEsImJ1dHRvbiIsNikseHQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRNb250aCgpfSkscXQoMTIsImNkcy1pY29uIiw4KSx5ZSgpLG1lKDEzLCJidXR0b24iLDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLHF0KDE0LCJjZHMtaWNvbiIsOSkseWUoKSgpKCkscXQo''@;'; put 'put ''MTUsImNsci1jYWxlbmRhciIpLG1lKDE2LCJkaXYiLDApLE5lKDE3KSx5ZSgpKSwyJmEmJihDZSgxKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksQ2UoMyksVHIoImFyaWEtbGFiZWwiLGQubW9udGhBdHRyU3RyaW5nKSgidGl0bGUiLGQubW9udGhBdHRyU3Ry''@;'; put 'put ''aW5nKSxDZSgxKSxtcigiICIsZC5jYWxlbmRhck1vbnRoLCIgIiksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksQ2UoMSksbXIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksQ2UoMiksVHIoImFyaWEtbGFiZWwiLGQuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxDZSgxKSxUcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRN''@;'; put 'put ''b250aCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxDZSgzKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVzOltpUSxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksY1E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29tbW9u''@;'; put 'put ''U3RyaW5ncz1hLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWR9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzTW9udGhWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzWWVhclZpZXd9Z2V0IGlzRGF5''@;'; put 'put ''Vmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc0RheVZpZXd9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChGOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci12''@;'; put 'put ''aWV3LW1hbmFnZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImRpYWxvZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtbW9kYWwiLCEwKSgiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckRpYWxvZ0xhYmVsKSxo''@;'; put 'put ''cigiZGF0ZXBpY2tlciIsITApKX0sZmVhdHVyZXM6W3RpKFtPOF0pXSxkZWNsczozLHZhcnM6Myxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoUWUoMCwkN2UsMSwwLCJjbHItbW9udGhwaWNrZXIiLDApLFFlKDEscTdlLDEsMCwiY2xyLXllYXJwaWNr''@;'; put 'put ''ZXIiLDApLFFlKDIsSzdlLDEsMCwiY2xyLWRheXBpY2tlciIsMCkpLDImYSYmKFJlKCJuZ0lmIixkLmlzTW9udGhWaWV3KSxDZSgxKSxSZSgibmdJZiIsZC5pc1llYXJWaWV3KSxDZSgxKSxSZSgibmdJZiIsZC5pc0RheVZpZXcpKX0sZGVwZW5kZW5jaWVzOltvUSxhUSxsUSxaaV0sZW5jYXBz''@;'; put 'put ''dWxhdGlvbjoyfSksY30pKCksSWI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUsZ2Usd2UsRWUsWmUsb3Qpe3N1cGVyKG90LEVlLHdlLFplKSx0aGlzLnJlbmRlcmVyPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2U9aCx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT1mLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1fLHRoaXMuZGF0ZUlPU2VydmljZT1ULHRoaXMuY29tbW9uU3RyaW5ncz1XLHRoaXMuZm9jdXNTZXJ2aWNlPWllLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWdlLHRo''@;'; put 'put ''aXMuY29udHJvbENsYXNzU2VydmljZT13ZSx0aGlzLmxheW91dFNlcnZpY2U9RWUsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPVplLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPW90LHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb2N1c1NlcnZpY2UuZm9jdXND''@;'; put 'put ''aGFuZ2Uuc3Vic2NyaWJlKGV0PT57dGhpcy5mb2N1cz1ldH0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfSkpfXNldCBjbHJQb3Np''@;'; put 'put ''dGlvbihhKXthJiZ4MFthXSYmKHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9uPXgwW2FdKX1zZXQgYWN0aW9uQnV0dG9uKGEpe3RoaXMudG9nZ2xlQnV0dG9uPWF9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQg''@;'; put 'put ''b3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1nZXQgaXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNh''@;'; put 'put ''YmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMu''@;'; put 'put ''aW5pdGlhbGl6ZUNhbGVuZGFyKCk6dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGF0ZUNoYW5nZXMoKSl9Z2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSl7aWYoYSl7Y29uc3QgZD10aGlzLmRhdGVJ''@;'; put 'put ''T1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEudG9EYXRlKCkpO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJlbCx7U0VMRUNURURfREFURTpkfSl8fHRoaXMuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGV9cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGV9bGlzdGVuRm9yRGF0ZUNoYW5nZXMoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShjcCh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkpLnN1YnNjcmliZShhPT57aWYodGhpcy5pc0VuYWJsZWQpe2NvbnN0IGQ9dGhpcy5nZXRUb2dnbGVCdXR0b25MYWJlbChh''@;'; put 'put ''KSxoPXRoaXMudG9nZ2xlQnV0dG9uLm5hdGl2ZUVsZW1lbnQ7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwiYXJpYS1sYWJlbCIsZCksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwidGl0bGUiLGQpfX0pfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlLmluaXRpYWxpemVDYWxlbmRhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoS3MpLHR0KFBmKSx0dChNRSksdHQoVGIpLHR0KFA4KSx0dChFcyksdHQoekYpLHR0KEY4KSx0dChjZCksdHQoT2YsOCksdHQoazApLHR0''@;'; put 'put ''KGxkKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKFg3ZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmFjdGlvbkJ1dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJz''@;'; put 'put ''OjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJbnB1dERhdGVEaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1''@;'; put 'put ''dHM6e2NsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiJ9LGZlYXR1cmVzOlt0aShbYWQsS3MsSWYsUzgsQWIsY2QsekYsazAsUDgsUGYsTUUsVGIsRjgsbGRdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOmE5ZSxkZWNsczoxMyx2YXJzOjE0LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRy''@;'; put 'put ''b2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbHJQb3BvdmVyQW5jaG9yIiwiIiwxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwiY2xhc3MiLCJjbHItaW5wdXQtZ3Jv''@;'; put 'put ''dXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIiw0LCJuZ0lmIl0sWyJjbHJGb2N1c1RyYXAiLCIiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xs''@;'; put 'put ''VG9DbG9zZSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJj''@;'; put 'put ''bGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCJdLFsiYWN0aW9uQnV0dG9uIiwi''@;'; put 'put ''Il0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2xyRm9jdXNUcmFwIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hl''@;'; put 'put ''Y2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaShzOWUpLGtyKDApLFFlKDEsSjdlLDEsMCwibGFiZWwiLDApLG1lKDIsImRpdiIsMSkoMywiZGl2Iiwy''@;'; put 'put ''KSg0LCJkaXYiLDMpLGtyKDUsMSksUWUoNixRN2UsMywxLCJidXR0b24iLDQpLFFlKDcsZTllLDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw1KSx5ZSgpLFFlKDgsdDllLDEsMCwiY2RzLWljb24iLDYpLFFlKDksbjllLDEsMCwiY2RzLWljb24iLDcpLHllKCksUWUoMTAscjll''@;'; put 'put ''LDEsMCwibmctY29udGVudCIsMCksUWUoMTEsaTllLDEsMCwibmctY29udGVudCIsMCksUWUoMTIsbzllLDEsMCwibmctY29udGVudCIsMCkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNz''@;'; put 'put ''KCkpLENlKDIpLGhyKCJjbHItZm9jdXMiLGQuZm9jdXMpLENlKDIpLFJlKCJuZ0lmIixkLmlzRW5hYmxlZCksQ2UoMSksUmUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnBvcG92ZXJQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lk''@;'; put 'put ''ZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5z''@;'; put 'put ''aG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbY1EsWmksVXMsdWMseWIsU2IscXMsQ2IsTXBdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLCRGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGll''@;'; put 'put ''LGdlLHdlLEVlLFplLG90KXtzdXBlcihhLEliLGQsXyxmLGgpLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPV8sdGhpcy5jb250YWluZXI9VCx0aGlzLmRhdGVJT1NlcnZpY2U9Vyx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1pZSx0aGlzLmRhdGVwaWNrZXJFbmFi''@;'; put 'put ''bGVkU2VydmljZT1nZSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9d2UsdGhpcy5wbGF0Zm9ybUlkPUVlLHRoaXMuZm9jdXNTZXJ2aWNlPVplLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1vdCx0aGlzLmRhdGVDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmluZGV4PTF9c2V0IGRhdGUo''@;'; put 'put ''YSl7dGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UhPT1hJiZ0aGlzLnVwZGF0ZURhdGUodGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPWEpfXNldCBtaW4oYSl7dGhpcy5k''@;'; put 'put ''YXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSl9c2V0IG1heChhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWF4RGF0ZShhKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZDpudWxsfXNl''@;'; put 'put ''dCBkaXNhYmxlZChhKXt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5zZXREaXNhYmxlZCh1ZChhKSl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6dGhpcy5kYXRlSU9T''@;'; put 'put ''ZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dH1nZXQgaW5wdXRUeXBlKCl7cmV0dXJuIFJzKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/ImRhdGUiOiJ0ZXh0In1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5wb3B1bGF0ZVNlcnZpY2VzRnJvbUNv''@;'; put 'put ''bnRhaW5lckNvbXBvbmVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JEaXJ0''@;'; put 'put ''eUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvcklucHV0UmVmb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnByb2Nlc3NJbml0aWFsSW5wdXRzKCl9c2V0Rm9jdXNTdGF0ZXMoKXt0aGlzLnNldEZvY3VzKCEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3N1cGVyLnRyaWdnZXJWYWxpZGF0aW9u''@;'; put 'put ''KCksdGhpcy5zZXRGb2N1cyghMSl9b25WYWx1ZUNoYW5nZShhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKTtpZih0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSYmZCl0aGlzLnVwZGF0ZURhdGUoZCwhMCk7ZWxzZSBp''@;'; put 'put ''Zih0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpKXtjb25zdFtoLGYsX109YS52YWx1ZS5zcGxpdCgiLSIpO3RoaXMudXBkYXRlRGF0ZShuZXcgRGF0ZSgraCwrZi0xLCtfKSwhMCl9ZWxzZSB0aGlzLmVtaXREYXRlT3V0cHV0KG51bGwpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXMoYSl7dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5m''@;'; put 'put ''b2N1c2VkPWEpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoUDgpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJG''@;'; put 'put ''cm9tQ29udGFpbmVyKFBmKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihNRSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKFRiKSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMo''@;'; put 'put ''KXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11''@;'; put 'put ''cGRhdGVEYXRlKGEsZD0hMSl7Y29uc3QgaD10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSk7ZD90aGlzLmVtaXREYXRlT3V0cHV0KGgpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UmJih0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5zZWxlY3RlZERheT1oP25ldyBwMShoLmdldEZ1bGxZZWFyKCksaC5nZXRNb250aCgpLGguZ2V0RGF0ZSgpKTpudWxsKSx0aGlzLnVwZGF0ZUlucHV0KGgpfXVwZGF0ZUlucHV0KGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmlu''@;'; put 'put ''ZyhhKTt0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpPyhhLnNldE1pbnV0ZXMoYS5nZXRNaW51dGVzKCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSx0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWVBc0RhdGUiLGEpKTp0aGlzLmRhdGVwaWNr''@;'; put 'put ''ZXJIYXNGb3JtQ29udHJvbCgpJiZkIT09dGhpcy5jb250cm9sLnZhbHVlP3RoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGQpOnRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZCl9ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5''@;'; put 'put ''KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3JldHVybiB0aGlzLmRhdGVJT1Nl''@;'; put 'put ''cnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZCl9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQoYSl7IWZ1bmN0aW9uIEd5ZShjLGwpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYmbCBpbnN0YW5jZW9mIERhdGUmJmMuZ2V0RnVsbFllYXIoKT09PWwuZ2V0RnVsbFllYXIoKSYm''@;'; put 'put ''Yy5nZXRNb250aCgpPT09bC5nZXRNb250aCgpJiZjLmdldERhdGUoKT09PWwuZ2V0RGF0ZSgpfShhLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQoYSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9YSk6IWEmJnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlJiYo''@;'; put 'put ''dGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJuISF0aGlzLmNvbnRyb2x9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiBXaSh0aGlzLmRhdGVwaWNrZXJIYXNG''@;'; put 'put ''b3JtQ29udHJvbCgpKS5waXBlKElhKGE9PmEpLFNhKCgpPT50aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzKSxJYSgoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVE''@;'; put 'put ''YXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKSkpfWxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRl''@;'; put 'put ''RGF0ZShhLnRvRGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUoSWEoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJv''@;'; put 'put ''bC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKElhKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNv''@;'; put 'put ''bnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShJYShhPT4hIWEpKS5zdWJzY3JpYmUoKCk9PnRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5m''@;'; put 'put ''b2N1c0lucHV0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0KE5pKSx0dChGbyksdHQoenUsMTApLHR0KEliLDgpLHR0KFA4LDgpLHR0KFBmLDgpLHR0KE1FLDgpLHR0KFRiLDgp''@;'; put 'put ''LHR0KEdzKSx0dCh6Riw4KSx0dChPOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2V0Rm9jdXNTdGF0''@;'; put 'put ''ZXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSgiY2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblZhbHVlQ2hhbmdlKGYudGFyZ2V0KX0pLDImYSYmKHQxKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksVHIoInBsYWNlaG9sZGVyIixkLnBs''@;'; put 'put ''YWNlaG9sZGVyVGV4dCkoInR5cGUiLGQuaW5wdXRUeXBlKSxocigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGF0ZTpbImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4iLG1heDoibWF4IixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntk''@;'; put 'put ''YXRlQ2hhbmdlOiJjbHJEYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W3RpKFtPOF0pLGVvXX0pLGN9KSgpLHFGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlPWF9dmFsaWRhdGUoYSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlP''@;'; put 'put ''U2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKSxoPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCksZj10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKGQmJmQ8dGhpcy5kYXRl''@;'; put 'put ''SU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWluRGF0ZS50b0RhdGUoKSlyZXR1cm57bWluOnttaW46aC50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKGQmJmQ+dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWF4RGF0ZS50b0Rh''@;'; put 'put ''dGUoKSlyZXR1cm57bWF4OnttYXg6Zi50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChQOCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXV0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTppdSx1c2VFeGlzdGluZzpjLG11bHRpOiEwfV0pXX0pLGN9KSgpLFh5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEsaDgsY21lLHVtZSl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyx5RSxzZCxNYixzYSxiRSxaY11dfSksY30pKCk7bmV3IE1pKHZvaWQgMCk7bGV0IGV3ZT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoZG1lLGhtZSxvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxaY10sWmNdfSksY30pKCks''@;'; put 'put ''S0Y9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFVzLDcpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh''@;'; put 'put ''LGQpezImYSYmaHIoImNsci1yYWRpby13cmFwcGVyIiwhMCl9LGZlYXR1cmVzOlt0aShbYWRdKV0sbmdDb250ZW50U2VsZWN0b3JzOnU5ZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoYzllKSxrcigwKSxrcigxLDEp''@;'; put 'put ''LFFlKDIsbDllLDEsMCwibGFiZWwiLDApKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltaaSxVc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWEY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxL''@;'; put 'put ''RixkLGgsZixfKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KEVhKSx0dCh6dSwxMCksdHQoRm8pLHR0KE5pKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOltl''@;'; put 'put ''b119KSxjfSkoKSx0d2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3Rh''@;'; put 'put ''dGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMo''@;'; put 'put ''KX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoT2YsOCksdHQoY2QpLHR0KGswKSx0dChsZCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyJjbHItcmFkaW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsWEYsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5yYWRpb3M9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYm''@;'; put 'put ''KFRyKCJyb2xlIixkLnJvbGUpLGhyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxp''@;'; put 'put ''bmUifSxmZWF0dXJlczpbdGkoW2swLGxkLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpfOWUsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNs''@;'; put 'put ''YXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi''@;'; put 'put ''c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIs''@;'; put 'put ''InN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkodjllKSxrcigwKSxRZSgxLGQ5ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxRZSg1LGg5''@;'; put 'put ''ZSwxLDAsIm5nLWNvbnRlbnQiLDApLFFlKDYsZjllLDEsMCwiY2RzLWljb24iLDMpLFFlKDcscDllLDEsMCwiY2RzLWljb24iLDQpLFFlKDgsZzllLDEsMCwibmctY29udGVudCIsMCksUWUoOSxtOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwh''@;'; put 'put ''ZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGhyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJl''@;'; put 'put ''KCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLHVjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxud2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFpjLHlFLHNhXSxaY119KSxjfSkoKSxyd2U9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFpjLHlFLHNhXSxaY119KSxjfSkoKSxIOD0oKCk9''@;'; put 'put ''PntjbGFzcyBjIGV4dGVuZHMgQTh7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLm11''@;'; put 'put ''bHRpPSExfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShhPT57YSYmKHRoaXMubXVsdGk9YS52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgdWIsdGhpcy5jb250cm9sPWEpfSkpfXdyYXBwZXJD''@;'; put 'put ''bGFzcygpe3JldHVybiB0aGlzLm11bHRpPyJjbHItbXVsdGlzZWxlY3Qtd3JhcHBlciI6ImNsci1zZWxlY3Qtd3JhcHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNkKSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9''@;'; put 'put ''d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNlbGVjdC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCx1Yiw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLm11bHRpcGxlPWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W3RpKFtsZCxrMCxhZCxj''@;'; put 'put ''ZF0pLGVvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RTllLGRlY2xzOjEwLHZhcnM6OCxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1h''@;'; put 'put ''dGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxb''@;'; put 'put ''InNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFs''@;'; put 'put ''aWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKHg5ZSksa3IoMCksUWUoMSxiOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksUWUoNSx5OWUsMSwwLCJjZHMtaWNvbiIsMyksUWUoNix3OWUsMSwwLCJjZHMtaWNvbiIs''@;'; put 'put ''NCkseWUoKSxRZSg3LEM5ZSwxLDAsIm5nLWNvbnRlbnQiLDApLFFlKDgsUzllLDEsMCwibmctY29udGVudCIsMCksUWUoOSxNOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIs''@;'; put 'put ''ZC5jb250cm9sQ2xhc3MoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQud3JhcHBlckNsYXNzKCkpLENlKDIpLFJlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dIZWxwZXIpLENlKDEpLFJlKCJuZ0lmIixkLnNo''@;'; put 'put ''b3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltaaSxVcyx1Yyxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTjg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxIOCxkLGgsZixfKSx0''@;'; put 'put ''aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTZWxlY3QiLCIiXV0saG9zdFZhcnM6''@;'; put 'put ''Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJjbHItc2VsZWN0IiwhMCl9LGZlYXR1cmVzOltlb119KSxjfSkoKSxpd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLCRsLHNhLFpjXSxaY119KSxjfSkoKSx1UT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQTh7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRleHRhcmVhLWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImNsci1mb3JtLWNvbnRyb2wi''@;'; put 'put ''LCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbdGkoW2xkLGswLGFkLGNkXSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpPOWUsZGVjbHM6MTAsdmFy''@;'; put 'put ''czo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci10ZXh0YXJlYS13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIi''@;'; put 'put ''LCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwi''@;'; put 'put ''c3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmKFRpKFI5ZSksa3IoMCksUWUoMSxrOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksUWUoNSxBOWUsMSwwLCJjZHMtaWNvbiIsMyksUWUoNixUOWUsMSwwLCJjZHMtaWNvbiIsNCkseWUoKSxRZSg3LEQ5ZSwxLDAsIm5nLWNvbnRl''@;'; put 'put ''bnQiLDApLFFlKDgsSTllLDEsMCwibmctY29udGVudCIsMCksUWUoOSxMOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5n''@;'; put 'put ''SWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLHVjLHFz''@;'; put 'put ''XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxvd2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSx1USxkLGgsZixfKSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFz''@;'; put 'put ''KSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJl''@;'; put 'put ''czpbZW9dfSksY30pKCksc3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6''@;'; put 'put ''W1tvbywkbCxzYSxaY10sWmNdfSksY30pKCksZFE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxaYyxUeWUsT3llLFh5ZSxl''@;'; put 'put ''USxld2UsbndlLGl3ZSxzd2UscndlLFB5ZV19KSxjfSkoKSxoUT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp''@;'; put 'put ''LGF3ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIHhFe31sZXQgTGI9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBiZX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRo''@;'; put 'put ''aXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEVwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURl''@;'; put 'put ''Ym91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IGJlfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8''@;'; put 'put ''KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8''@;'; put 'put ''MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2Vp''@;'; put 'put ''bCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBj''@;'; put 'put ''dXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9u''@;'; put 'put ''ZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVy''@;'; put 'put ''biB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMu''@;'; put 'put ''Y3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMYikpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2Vu''@;'; put 'put ''OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEZmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5nZT1uZXcgYmUsdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdl''@;'; put 'put ''LmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxs''@;'; put 'put ''KWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3JldHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyBFRShhLCgpPT57aWYoaClyZXR1cm47ZC51bnN1''@;'; put 'put ''YnNjcmliZSgpO2NvbnN0IF89dGhpcy5fYWxsLmZpbmRJbmRleChUPT5ULmZpbHRlcj09PWEpO18+PTAmJnRoaXMuX2FsbC5zcGxpY2UoXywxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChm''@;'; put 'put ''KSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNBY3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRF''@;'; put 'put ''bWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoYXIoRXApLGFyKExiKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgRUV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQga0U9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9m''@;'; put 'put ''IEVFP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRmYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLFJiPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrRXtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuc21hcnRU''@;'; put 'put ''b2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5lbGVtZW50UmVmPV8sdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9RGMoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6dnUuVkVSVElDQUwsc2lkZTpvZC5B''@;'; put 'put ''RlRFUixhbmNob3I6UHMuRU5ELGNvbnRlbnQ6UHMuRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKFQ9Pnt0aGlzLm9wZW49VCx0aGlzLmFyaWFFeHBhbmRlZD1UfSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29w''@;'; put 'put ''ZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmUnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29wZW49YSl9''@;'; put 'put ''c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhKX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09u''@;'; put 'put ''RGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8''@;'; put 'put ''fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZmKSx0dChFcyksdHQoS3MpLHR0KEdzKSx0dChOaSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihh''@;'; put 'put ''LGQpe2lmKDEmYSYmUm8oUDllLDUsTmkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuYW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOlsiY2xyRGdGaWx0ZXJPcGVuIiwib3BlbiJdLGN1c3RvbUZpbHRlcjpbImNsckRnRmlsdGVyIiwiY3VzdG9tRmlsdGVyIl19LG91dHB1dHM6e29w''@;'; put 'put ''ZW5DaGFuZ2U6ImNsckRnRmlsdGVyT3BlbkNoYW5nZSJ9LGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6eEUsdXNlRXhpc3Rpbmc6Y31dKSxlbyx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3Ii''@;'; put 'put ''LCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJhbmNob3IiLCIiXSxbInNvbGlkIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQ''@;'; put 'put ''b3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDEsImRhdGFncmlkLWZpbHRlciIs''@;'; put 'put ''MywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEsImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwi''@;'; put 'put ''YnV0dG9uIiwwLDEpLHF0KDIsImNkcy1pY29uIiwyKSx5ZSgpLFFlKDMsRjllLDUsMywiZGl2IiwzKSksMiZhJiYoaHIoImRhdGFncmlkLWZpbHRlci1vcGVuIixkLm9wZW4pKCJkYXRhZ3JpZC1maWx0ZXJlZCIsZC5hY3RpdmUpLFRyKCJhcmlhLWxhYmVsIixkLnRvZ2dsZUJ1dHRvbkFyaWFM''@;'; put 'put ''YWJlbCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpLENlKDIpLFRyKCJzdGF0dXMiLGQuYWN0aXZlPyJpbmZvIjpudWxsKSgic2hhcGUiLGQuYWN0aXZlPyJmaWx0ZXItZ3JpZC1jaXJjbGUiOiJmaWx0ZXItZ3JpZCIpLENlKDEp''@;'; put 'put ''LFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVz''@;'; put 'put ''Olt5YixTYixxcyxDYixNcCxGSl0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgSkZ7Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsbC5pbmRleE9mKCIuIik+PTAmJih0aGlzLnNwbGl0UHJvcD1sLnNwbGl0KCIuIikpfWdldFByb3BWYWx1ZShsKXtpZih0aGlzLnNwbGl0UHJvcCl7''@;'; put 'put ''bGV0IGE9bDtmb3IoY29uc3QgZCBvZiB0aGlzLnNwbGl0UHJvcCl7aWYobnVsbD09PWF8fHR5cGVvZiBhPiJ1Inx8dHlwZW9mIGFbZF0+InUiKXJldHVybjthPWFbZF19cmV0dXJuIGF9cmV0dXJuIGxbdGhpcy5wcm9wXX19Y2xhc3MgQUV7Y29uc3RydWN0b3IobCxhPSExKXt0aGlzLnByb3A9''@;'; put 'put ''bCx0aGlzLmV4YWN0PWEsdGhpcy5uZXN0ZWRQcm9wPW5ldyBKRihsKX1hY2NlcHRzKGwsYSxkKXtjb25zdCBoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh2b2lkIDA9PT1ofHxudWxsIT09YSYmKCJudW1iZXIiIT10eXBlb2YgaHx8aDxhKXx8bnVsbCE9PWQmJigi''@;'; put 'put ''bnVtYmVyIiE9dHlwZW9mIGh8fGg+ZCkpfX1jbGFzcyBKNXtjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgYmUsdGhpcy5fbG93PW51bGwsdGhpcy5faGlnaD1udWxsfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxl''@;'; put 'put ''KCl9Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuX2xvdyx0aGlzLl9oaWdoXX1zZXQgdmFsdWUobCl7Y29uc3QgYT1sWzBdLGQ9bFsxXTsoYSE9PXRoaXMuX2xvd3x8ZCE9PXRoaXMuX2hpZ2gpJiYodGhpcy5fbG93PWEsdGhpcy5faGlnaD1kLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93''@;'; put 'put ''LHRoaXMuX2hpZ2hdKSl9Z2V0IGxvdygpe3JldHVybiB0aGlzLl9sb3d9c2V0IGxvdyhsKXtsIT09dGhpcy5fbG93JiYodGhpcy5fbG93PWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgaGlnaCgpe3JldHVybiB0aGlzLl9oaWdofXNldCBoaWdoKGwp''@;'; put 'put ''e2whPT10aGlzLl9oaWdoJiYodGhpcy5faGlnaD1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBBRT97cHJvcGVydHk6dGhpcy5maWx0ZXJGbi5wcm9wLGxvdzp0aGlzLl9sb3cs''@;'; put 'put ''aGlnaDp0aGlzLl9oaWdofTp0aGlzfWlzQWN0aXZlKCl7cmV0dXJuIG51bGwhPT10aGlzLl9sb3d8fG51bGwhPT10aGlzLmhpZ2h9YWNjZXB0cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5fbG93LHRoaXMuX2hpZ2gpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5j''@;'; put 'put ''ZW9mIEo1JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIEFFP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBBRSYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLmxvdz09PXRoaXMuX2xvdyYmbC5oaWdoPT09dGhpcy5faGlnaDpsPT09dGhpcyl9fWxldCBmUT0oKCk9Pntj''@;'; put 'put ''bGFzcyBjIGV4dGVuZHMga0V7Y29uc3RydWN0b3IoYSxkLGgsZixfKXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlPWYsdGhpcy5uZ1pvbmU9Xyx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBFcix0aGlz''@;'; put 'put ''Lm9wZW49ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF19c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiZBcnJheS5pc0FycmF5KGEpP2EmJihhWzBdIT09dGhpcy5maWx0ZXIubG93fHxhWzFdIT09dGhp''@;'; put 'put ''cy5maWx0ZXIuaGlnaCkmJih0aGlzLmZpbHRlci5sb3c9Im51bWJlciI9PXR5cGVvZiBhWzBdP2FbMF06bnVsbCx0aGlzLmZpbHRlci5oaWdoPSJudW1iZXIiPT10eXBlb2YgYVsxXT9hWzFdOm51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKTp0aGlzLmluaXRGaWx0ZXJWYWx1''@;'; put 'put ''ZXM9YX1zZXQgY3VzdG9tTnVtZXJpY0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2YgRUU/YTpuZXcgSjUoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlcyYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWVzLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZXMpfWdl''@;'; put 'put ''dCBtYXhQbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWF4UGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlfWdldCBtaW5QbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1p''@;'; put 'put ''blZhbHVlfWdldCBsb3coKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmxvdyYmaXNGaW5pdGUodGhpcy5maWx0ZXIubG93KT90aGlzLmZpbHRlci5sb3c6bnVsbH1zZXQgbG93KGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmxvdz8odGhpcy5maWx0''@;'; put 'put ''ZXIubG93PWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5sb3c9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlz''@;'; put 'put ''LmZpbHRlci5oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5oaWdoJiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5oaWdoKT90aGlzLmZpbHRlci5oaWdoOm51bGx9c2V0IGhpZ2goYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIu''@;'; put 'put ''aGlnaD8odGhpcy5maWx0ZXIuaGlnaD1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIuaGlnaD1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhp''@;'; put 'put ''cy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3Vs''@;'; put 'put ''YXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRmYpLHR0KGgxKSx0dChFcyksdHQoS3MpLHR0KE5vKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSx2aWV3UXVlcnk6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhIOWUsNSksUm8oUmIsNSkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksc2koaD1haSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbImNsckZpbHRlck1pblBs''@;'; put 'put ''YWNlaG9sZGVyIiwibWluUGxhY2Vob2xkZXIiXSxtYXhQbGFjZWhvbGRlcjpbImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4UGxhY2Vob2xkZXIiXSx2YWx1ZTpbImNsckZpbHRlclZhbHVlIiwidmFsdWUiXSxjdXN0b21OdW1lcmljRmlsdGVyOlsiY2xyRGdOdW1lcmljRmlsdGVyIiwi''@;'; put 'put ''Y3VzdG9tTnVtZXJpY0ZpbHRlciJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOnhFLHVzZUV4aXN0aW5nOmN9XSksZW9dLGRlY2xzOjYsdmFyczo4LGNvbnN0czpbWzMsImNsckRnRmlsdGVyIiwiY2xy''@;'; put 'put ''RGdGaWx0ZXJPcGVuIiwiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImxvdyIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''XSxbImlucHV0X2xvdyIsIiJdLFsxLCJkYXRhZ3JpZC1maWx0ZXItaW5wdXQtc3BhY2VyIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImhpZ2giLDEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIi''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIl0sWyJpbnB1dF9oaWdoIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLWRnLWZpbHRlciIsMCkseHQoImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub3Blbj1mfSksbWUoMSwiaW5wdXQiLDEsMiks''@;'; put 'put ''eHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmxvdz1mfSkseWUoKSxxdCgzLCJzcGFuIiwzKSxtZSg0LCJpbnB1dCIsNCw1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGlnaD1mfSkseWUoKSgpKSwyJmEmJihSZSgiY2xyRGdGaWx0ZXIi''@;'; put 'put ''LGQucmVnaXN0ZXJlZCkoImNsckRnRmlsdGVyT3BlbiIsZC5vcGVuKSxDZSgxKSxSZSgibmdNb2RlbCIsZC5sb3cpKCJwbGFjZWhvbGRlciIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxUcigiYXJpYS1sYWJlbCIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxDZSgzKSxSZSgibmdNb2RlbCIsZC5o''@;'; put 'put ''aWdoKSgicGxhY2Vob2xkZXIiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSksVHIoImFyaWEtbGFiZWwiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W1JiLHNFLFdhLEJzLE9zXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBURXtjb25zdHJ1Y3RvcihsLGE9ITEp''@;'; put 'put ''e3RoaXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IEpGKGwpfWFjY2VwdHMobCxhKXtjb25zdCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh0eXBlb2YgZD4idSIpJiYodGhpcy5leGFjdD8oIiIrZCkudG9Mb3dlckNhc2UoKT09PWE6''@;'; put 'put ''KCIiK2QpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MCl9fWNsYXNzIFE1e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBiZSx0aGlzLl9sb3dlckNhc2VWYWx1ZT0iIix0aGlzLl9yYXdWYWx1ZT0iIn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBsb3dlckNhc2VWYWx1ZSgpe3JldHVybiB0aGlzLl9sb3dlckNhc2VWYWx1ZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIFRFP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZuLnByb3AsdmFsdWU6dGhpcy52YWx1''@;'; put 'put ''ZX06dGhpc31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fcmF3VmFsdWV9c2V0IHZhbHVlKGwpe2x8fChsPSIiKSxsIT09dGhpcy5fcmF3VmFsdWUmJih0aGlzLl9yYXdWYWx1ZT1sLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPWwudG9Mb3dlckNhc2UoKS50cmltKCksdGhpcy5fY2hhbmdlcy5uZXh0''@;'; put 'put ''KGwpKX1pc0FjdGl2ZSgpe3JldHVybiEhdGhpcy52YWx1ZX1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLmxvd2VyQ2FzZVZhbHVlKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBRNSYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBURT90aGlzLmZp''@;'; put 'put ''bHRlckZuIGluc3RhbmNlb2YgVEUmJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC52YWx1ZT09PXRoaXMudmFsdWU6bD09PXRoaXMpfX1sZXQgUUY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGtFe2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSksdGhpcy5kb21B''@;'; put 'put ''ZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9Zix0aGlzLm5nWm9uZT1fLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEVyLHRoaXMub3Blbj0hMSx0aGlzLnN1YnM9W119c2V0IGN1c3RvbVN0cmluZ0ZpbHRlcihhKXt0aGlzLnNldEZpbHRl''@;'; put 'put ''cihhIGluc3RhbmNlb2YgRUU/YTpuZXcgUTUoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlci52YWx1ZX1zZXQgdmFsdWUoYSl7''@;'; put 'put ''dGhpcy5maWx0ZXImJiJzdHJpbmciPT10eXBlb2YgYT8oYXx8KGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1nZXQgcGxhY2Vob2xkZXJWYWx1ZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pv''@;'; put 'put ''bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEu''@;'; put 'put ''dW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZmKSx0dChoMSksdHQoRXMpLHR0KEtzKSx0dChObykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctc3RyaW5nLWZpbHRlciJdXSx2aWV3''@;'; put 'put ''UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhOOWUsNSksUm8oUmIsNSkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksc2koaD1haSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntwbGFjZWhvbGRlcjpbImNsckZpbHRlclBs''@;'; put 'put ''YWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiXSxjdXN0b21TdHJpbmdGaWx0ZXI6WyJjbHJEZ1N0cmluZ0ZpbHRlciIsImN1c3RvbVN0cmluZ0ZpbHRlciJdLHZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVD''@;'; put 'put ''aGFuZ2UifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOnhFLHVzZUV4aXN0aW5nOmN9XSksZW9dLGRlY2xzOjMsdmFyczo1LGNvbnN0czpbWzMsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIiwiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0''@;'; put 'put ''ZSIsIm9mZiIsIm5hbWUiLCJzZWFyY2giLDEsImNsci1pbnB1dCIsMywibmdNb2RlbCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbENoYW5nZSJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItZGctZmlsdGVyIiwwKSx4dCgiY2xyRGdGaWx0ZXJP''@;'; put 'put ''cGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vcGVuPWZ9KSxtZSgxLCJpbnB1dCIsMSwyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudmFsdWU9Zn0pLHllKCkoKSksMiZhJiYoUmUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpKCJjbHJEZ0ZpbHRl''@;'; put 'put ''ck9wZW4iLGQub3BlbiksQ2UoMSksUmUoIm5nTW9kZWwiLGQudmFsdWUpKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclZhbHVlKSxUcigiYXJpYS1sYWJlbCIsZC5wbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbUmIsV2EsQnMsT3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgp''@;'; put 'put ''LGtwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQi''@;'; put 'put ''XV0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLFY4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGlvbmFibGVDb3VudD0wfWdldCBoYXNBY3Rpb25hYmxlUm93KCl7cmV0dXJuIHRoaXMuYWN0aW9uYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudCsr''@;'; put 'put ''fXVucmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxCOD0oKCk9PntjbGFzcyBjIGV4dGVuZHMg''@;'; put 'put ''dzh7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKGEsZCksdGhpcy5yb3dBY3Rpb25zPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLnJvd0FjdGlv''@;'; put 'put ''bnMuaGFzQWN0aW9uYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEpLHR0KGtwLDgpLHR0KFY4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0''@;'; put 'put ''dXJlczpbZW9dfSksY30pKCksaDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9zdGF0ZT1uZXcgVGUodGhpcy50b2dnbGVTdGF0ZSl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5h''@;'; put 'put ''YmxlZChhKXt0aGlzLl9lbmFibGVkPWF9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xlU3RhdGV9Y2xvc2UoKXt0aGlzLnRvZ2ds''@;'; put 'put ''ZVN0YXRlPSExLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5idXR0b24mJih0aGlzLmJ1dHRvbi5mb2N1cygpLHRoaXMuYnV0dG9uPW51bGwpfW9wZW4oYSxkKXt0aGlzLmNhY2hlPWEsdGhpcy5idXR0b249ZCx0aGlzLnRvZ2dsZVN0YXRlPSEwLHRoaXMuX3N0YXRl''@;'; put 'put ''Lm5leHQodGhpcy50b2dnbGVTdGF0ZSl9dG9nZ2xlKGEsZCl7dGhpcy5pc1Jvd09wZW4oYSl8fCFhP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oYSxkKX1pc1Jvd09wZW4oYSl7cmV0dXJuISghdGhpcy50b2dnbGVTdGF0ZXx8dGhpcy5jYWNoZSE9PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGV0YWlsU2VydmljZT1hLHRoaXMuZXhwYW5kYWJsZUNvdW50PTB9Z2V0IGhhc0V4''@;'; put 'put ''cGFuZGFibGVSb3coKXtyZXR1cm4hdGhpcy5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQmJnRoaXMuZXhwYW5kYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudCsrfXVucmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihoMikpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHo4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3OHtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGct''@;'; put 'put ''cm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZGFibGVDb3VudD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlQ291bnQuaGFzRXhwYW5kYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEpLHR0KGtwLDgpLHR0KGo4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0dXJlczpbZW9dfSksY30pKCk7Y2xhc3MgREV7Y29uc3RydWN0b3IobCl7''@;'; put 'put ''dGhpcy5wcm9wPWwsdGhpcy5uZXN0ZWRQcm9wPW5ldyBKRihsKX1jb21wYXJlKGwsYSl7bGV0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKSxoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUoYSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkJiYoZD1kLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpLCJzdHJpbmciPT10eXBlb2YgaCYmKGg9aC50b0xvd2VyQ2FzZSgpKSx0eXBlb2YgZD4idSJ8fG51bGw9PT1kP3R5cGVvZiBoPiJ1Inx8bnVsbD09PWg/MDoxOnR5cGVvZiBoPiJ1Inx8bnVsbD09PWh8fGQ8aD8tMTpkPmg/MTowfX12YXIgSTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5V''@;'; put 'put ''TlNPUlRFRD0wXT0iVU5TT1JURUQiLGNbYy5BU0M9MV09IkFTQyIsY1tjLkRFU0M9LTFdPSJERVNDIixjfShJMHx8e30pO2xldCBlSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNvbHVtblZpZXc9dGhpcy50ZW1w''@;'; put 'put ''bGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtblZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3Jh''@;'; put 'put ''cHBlZC1jb2x1bW4iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhWOWUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29sdW1uUG9ydGFs''@;'; put 'put ''IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxRZSgwLEI5ZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsRWMpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSUU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5f''@;'; put 'put ''cmV2ZXJzZT0hMSx0aGlzLl9jaGFuZ2U9bmV3IGJlfWdldCBjb21wYXJhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmF0b3J9c2V0IGNvbXBhcmF0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlz''@;'; put 'put ''LnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgcmV2ZXJzZSgpe3JldHVybiB0aGlzLl9yZXZlcnNlfXNldCByZXZlcnNlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9yZXZlcnNlPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNl''@;'; put 'put ''ci5jaGFuZ2VEb25lKCl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKGEsZCl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuY29tcGFyYXRvcj09PWE/dGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmR8fCF0aGlz''@;'; put 'put ''Ll9yZXZlcnNlOih0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmQpLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWNsZWFyKCl7dGhpcy5jb21wYXJhdG9yPW51bGx9Y29tcGFyZShhLGQpe3JldHVybih0aGlz''@;'; put 'put ''LnJldmVyc2U/LTE6MSkqdGhpcy5jb21wYXJhdG9yLmNvbXBhcmUoYSxkKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5leHQodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKExiKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46Yyxm''@;'; put 'put ''YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIGYyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQUxJR05fQ09MVU1OUz0wXT0iQUxJR05fQ09MVU1OUyIsY1tjLkNBTENVTEFURV9NT0RFX09OPTFdPSJDQUxDVUxBVEVfTU9ERV9PTiIsY1tjLkNBTENVTEFURV9NT0RFX09GRj0yXT0iQ0FM''@;'; put 'put ''Q1VMQVRFX01PREVfT0ZGIixjW2MuQ0xFQVJfV0lEVEhTPTNdPSJDTEVBUl9XSURUSFMiLGNbYy5DT01QVVRFX0NPTFVNTl9XSURUSFM9NF09IkNPTVBVVEVfQ09MVU1OX1dJRFRIUyIsY30oZjJ8fHt9KTtsZXQgZWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlbmRlclN0''@;'; put 'put ''ZXA9bmV3IGJlLHRoaXMuYWxyZWFkeVNpemVkPSExfWdldCByZW5kZXJTdGVwKCl7cmV0dXJuIHRoaXMuX3JlbmRlclN0ZXAuYXNPYnNlcnZhYmxlKCl9ZmlsdGVyUmVuZGVyU3RlcHMoYSl7cmV0dXJuIHRoaXMucmVuZGVyU3RlcC5waXBlKElhKGQ9PmE9PT1kKSl9cmVzaXplKCl7dGhpcy5f''@;'; put 'put ''cmVuZGVyU3RlcC5uZXh0KGYyLkNBTENVTEFURV9NT0RFX09OKSx0aGlzLmFscmVhZHlTaXplZCYmdGhpcy5fcmVuZGVyU3RlcC5uZXh0KGYyLkNMRUFSX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0KGYyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0''@;'; put 'put ''KGYyLkFMSUdOX0NPTFVNTlMpLHRoaXMuYWxyZWFkeVNpemVkPSEwLHRoaXMuX3JlbmRlclN0ZXAubmV4dChmMi5DQUxDVUxBVEVfTU9ERV9PRkYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rv''@;'; put 'put ''cnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx0SD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5vcmdhbml6ZXI9aCx0aGlzLl9yZXNpemVkQnk9MH1nZXQgcmVzaXplZEJ5KCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZWRCeX1nZXQg''@;'; put 'put ''bWluQ29sdW1uV2lkdGgoKXtyZXR1cm4gdGhpcy5kb21BZGFwdGVyLm1pbldpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl8fDk2fWdldCBtYXhSZXNpemVSYW5nZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplLXRoaXMubWluQ29sdW1uV2lkdGh9Z2V0IHdpZHRoQWZ0ZXJSZXNp''@;'; put 'put ''emUoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZSt0aGlzLl9yZXNpemVkQnl9c3RhcnRSZXNpemUoKXt0aGlzLl9yZXNpemVkQnk9MCx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITAsdGhpcy53aWR0aEJlZm9yZVJlc2l6ZT10aGlzLmRvbUFkYXB0ZXIuY2xpZW50UmVjdCh0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLndpZHRofWVuZFJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfWNhbGN1bGF0ZVJlc2l6ZShhKXthPC10aGlzLm1heFJlc2l6ZVJhbmdlPyh0aGlzLl9yZXNpemVkQnk9LXRoaXMubWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6''@;'; put 'put ''ZVJhbmdlPSExKToodGhpcy5fcmVzaXplZEJ5PWEsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTmkpLGFyKGgxKSxhcihlZykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhY30pLGN9KSgpLG5IPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wbGF0Zm9ybUlkPWF9Z2V0IHRhYmxlUmVmKCl7cmV0dXJuIHRoaXMuX3RhYmxlUmVmfXNldCB0YWJsZVJlZihhKXt0aGlzLl90YWJsZVJlZj1hfXNldCB0YWJsZShhKXtScyh0aGlzLnBs''@;'; put 'put ''YXRmb3JtSWQpJiZhLm5hdGl2ZUVsZW1lbnQmJih0aGlzLnRhYmxlUmVmPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtdGFibGUiKSl9Z2V0Q29sdW1uRHJhZ0hlaWdodCgpe3JldHVybiB0aGlzLnRhYmxlUmVmP2Ake3RoaXMudGFibGVSZWYuY2xpZW50SGVpZ2h0''@;'; put 'put ''fXB4YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihHcykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGdRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3Ro''@;'; put 'put ''aXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9Zix0aGlzLmNvbW1vblN0cmluZz1fLHRoaXMuZG9jdW1lbnQ9VCx0aGlzLmNvbHVtblNlcGFyYXRvcklkPURjKCksdGhpcy5yZXNpemVTdGFydGVkT25L''@;'; put 'put ''ZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFyYXRvcklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50''@;'; put 'put ''fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMu''@;'; put 'put ''Y29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlzLnNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJhY2tlck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAi''@;'; put 'put ''LGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNoKGE9PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZp''@;'; put 'put ''Y2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdodCIsYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5j''@;'; put 'put ''b2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIu''@;'; put 'put ''c2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhpZGVUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tl''@;'; put 'put ''ckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJhdXRvIil9c2hvd1RyYWNr''@;'; put 'put ''ZXJPbkZpcnN0S2V5RG93bihhKXshdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNz''@;'; put 'put ''KHRoaXMucmVzaXplVHJhY2tlckVsLCJvbi1hcnJvdy1rZXktcmVzaXplIiksdGhpcy5zaG93VHJhY2tlcigpKX1tb3ZlVHJhY2tlck9uS2V5RG93bihhKXt0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSk/dGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6''@;'; put 'put ''ZWRCeS0xMik6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSYmdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMil9aGlkZVRyYWNrZXJPbktleVVwKGEpe3RoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRL''@;'; put 'put ''ZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuaGlkZVRyYWNrZXIoKSx0''@;'; put 'put ''aGlzLmNvbHVtbkhhbmRsZUVsLmZvY3VzKCkpfXJlZEZsYWdUcmFja2VyKCl7dGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPXRoaXMuY29sdW1u''@;'; put 'put ''UmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRy''@;'; put 'put ''YWNrZXJFbCwiZXhjZWVkZWQtbWF4IikpfWlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl7cmV0dXJuIGwyKGEua2V5KT09PXdvLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudChhKXtyZXR1cm4gbDIoYS5rZXkpPT09d28uQXJyb3dSaWdodH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykodHQodEgpLHR0KEZvKSx0dChObyksdHQobkgpLHR0KEVzKSx0dChMcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXNlcGFyYXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhq''@;'; put 'put ''OWUsNSksUm8oejllLDUpKSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLnJlc2l6ZVRyYWNrZXJSZWY9aC5maXJzdCksc2koaD1haSgpKSYmKGQuY29sdW1uSGFuZGxlUmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJkYXRhZ3Jp''@;'; put 'put ''ZC1jb2x1bW4tc2VwYXJhdG9yIiwhMCl9LGRlY2xzOjYsdmFyczo1LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJhZ2dhYmxlIiwiIiwxLCJkYXRhZ3JpZC1jb2x1bW4taGFuZGxlIiwzLCJjbHJHcm91cCIsImNsckRyYWdTdGFydCIsImNsckRyYWdNb3ZlIiwiY2xyRHJhZ0VuZCJd''@;'; put 'put ''LFsiY29sdW1uSGFuZGxlIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdLFsicmVzaXplVHJhY2tlciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImJ1dHRvbiIsMCwxKSx4dCgiY2xyRHJhZ1N0YXJ0Iixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBkLnNob3dUcmFja2VyKCl9KSgiY2xyRHJhZ01vdmUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm1vdmVUcmFja2VyKGYuZHJhZ1Bvc2l0aW9uLm1vdmVYKX0pKCJjbHJEcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBkLmhpZGVUcmFja2VyKCl9KSx5ZSgpLG1lKDIs''@;'; put 'put ''InNwYW4iLDIpLE5lKDMpLHllKCkscXQoNCwiZGl2IiwzLDQpKSwyJmEmJihSZSgiY2xyR3JvdXAiLGQuY29sdW1uU2VwYXJhdG9ySWQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVz''@;'; put 'put ''Y3JpcHRpb25JZCksQ2UoMiksVHIoImlkIixkLmRlc2NyaXB0aW9uSWQpLENlKDEpLG1yKCIgIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uLCIgIikpfSxkZXBlbmRlbmNpZXM6W0dKXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx0Zz0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMga0V7Y29uc3RydWN0b3IoYSxkLGgsZixfKXtzdXBlcihkKSx0aGlzLl9zb3J0PWEsdGhpcy52Y3I9aCx0aGlzLmRldGFpbFNlcnZpY2U9Zix0aGlzLmNoYW5nZURldGVjdG9yUmVmPV8sdGhpcy5zb3J0T3JkZXJDaGFuZ2U9bmV3IEVyLHRoaXMuZmlsdGVyVmFsdWVDaGFu''@;'; put 'put ''Z2U9bmV3IEVyLHRoaXMuc29ydGVkQ2hhbmdlPW5ldyBFcix0aGlzLnNob3dTZXBhcmF0b3I9ITAsdGhpcy5jdXN0b21GaWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0aGlzLl9zb3J0T3JkZXI9STAuVU5TT1JURUQsdGhpcy5fc29ydGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1b''@;'; put 'put ''XSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKSl9Z2V0IGNvbFR5cGUoKXtyZXR1cm4gdGhpcy5fY29sVHlwZX1zZXQgY29sVHlwZShh''@;'; put 'put ''KXt0aGlzLl9jb2xUeXBlPWF9Z2V0IGZpZWxkKCl7cmV0dXJuIHRoaXMuX2ZpZWxkfXNldCBmaWVsZChhKXsic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLl9maWVsZD1hLHRoaXMuX3NvcnRCeXx8KHRoaXMuX3NvcnRCeT1uZXcgREUoYSkpKX1nZXQgc29ydEJ5KCl7cmV0dXJuIHRoaXMuX3Nv''@;'; put 'put ''cnRCeX1zZXQgc29ydEJ5KGEpeyJzdHJpbmciPT10eXBlb2YgYT90aGlzLl9zb3J0Qnk9bmV3IERFKGEpOmE/dGhpcy5fc29ydEJ5PWE6dGhpcy5maWVsZD90aGlzLl9zb3J0Qnk9bmV3IERFKHRoaXMuZmllbGQpOmRlbGV0ZSB0aGlzLl9zb3J0Qnl9Z2V0IHNvcnRPcmRlcigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9zb3J0T3JkZXJ9c2V0IHNvcnRPcmRlcihhKXtpZighKHR5cGVvZiBhPiJ1IikmJnRoaXMuX3NvcnRPcmRlciE9PWEpc3dpdGNoKGEpe2RlZmF1bHQ6Y2FzZSBJMC5VTlNPUlRFRDp0aGlzLl9zb3J0LmNsZWFyKCk7YnJlYWs7Y2FzZSBJMC5BU0M6dGhpcy5zb3J0KCExKTticmVhaztj''@;'; put 'put ''YXNlIEkwLkRFU0M6dGhpcy5zb3J0KCEwKX19Z2V0IHNvcnRlZCgpe3JldHVybiB0aGlzLl9zb3J0ZWR9c2V0IHNvcnRlZChhKXshYSYmdGhpcy5zb3J0ZWQ/KHRoaXMuX3NvcnRlZD0hMSx0aGlzLl9zb3J0LmNsZWFyKCkpOmEmJiF0aGlzLnNvcnRlZCYmdGhpcy5zb3J0KCl9c2V0IHVwZGF0''@;'; put 'put ''ZUZpbHRlclZhbHVlKGEpe3RoaXMuZmlsdGVyP3RoaXMuZmlsdGVyIGluc3RhbmNlb2YgUTU/KCghYXx8InN0cmluZyIhPXR5cGVvZiBhKSYmKGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1JiYoKCFh''@;'; put 'put ''fHwhKGEgaW5zdGFuY2VvZiBBcnJheSkpJiYoYT1bbnVsbCxudWxsXSksMj09PWEubGVuZ3RoJiYoYVswXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzBdfHxhWzFdIT09dGhpcy5maWx0ZXIudmFsdWVbMV0pJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9c2V0''@;'; put 'put ''IHByb2plY3RlZEZpbHRlcihhKXthJiYodGhpcy5kZWxldGVGaWx0ZXIoKSx0aGlzLmN1c3RvbUZpbHRlcj0hMCl9Z2V0IHNvcnRhYmxlKCl7cmV0dXJuISF0aGlzLl9zb3J0Qnl9Z2V0IGFyaWFTb3J0KCl7c3dpdGNoKHRoaXMuX3NvcnRPcmRlcil7ZGVmYXVsdDpjYXNlIEkwLlVOU09SVEVE''@;'; put 'put ''OnJldHVybiJub25lIjtjYXNlIEkwLkFTQzpyZXR1cm4iYXNjZW5kaW5nIjtjYXNlIEkwLkRFU0M6cmV0dXJuImRlc2NlbmRpbmcifX1nZXQgc29ydERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9zb3J0RGlyZWN0aW9ufWdldCBmaWx0ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0''@;'; put 'put ''YW5jZW9mIFE1fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0IGZpbHRlclZhbHVlKGEpeyh0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFE1fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9YSx0aGlz''@;'; put 'put ''LmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGVILHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IHdFKGVILHRoaXMudmNyKX1u''@;'; put 'put ''Z09uQ2hhbmdlcyhhKXthLmNvbFR5cGUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUhPT1hLmNvbFR5cGUucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiYhdGhpcy5maWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5z''@;'; put 'put ''ZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpLGEuZmllbGQmJmEuZmllbGQuY3VycmVudFZhbHVlJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSE9PWEuZmllbGQucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBE''@;'; put 'put ''ZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zb3J0KGEpe3RoaXMuc29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlz''@;'; put 'put ''Ll9zb3J0QnksYSksdGhpcy5fc29ydE9yZGVyPXRoaXMuX3NvcnQucmV2ZXJzZT9JMC5ERVNDOkkwLkFTQyx0aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3NvcnRPcmRlcj09PUkwLkRFU0M/ImRvd24iOiJ1cCIsdGhpcy5zb3J0SWNvbj10aGlzLl9zb3J0T3JkZXI9PT1JMC5ERVNDPyJhcnJv''@;'; put 'put ''dyBkb3duIjoiYXJyb3ciLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0ZWQ9ITAsdGhpcy5zb3J0ZWRDaGFuZ2UuZW1pdCghMCkpfWxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZUNo''@;'; put 'put ''YW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2hvd1NlcGFyYXRvciE9PSFhJiYodGhpcy5zaG93U2VwYXJhdG9yPSFhLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2Ny''@;'; put 'put ''aWJlKGE9Pnt0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc29ydE9yZGVyIT09STAuVU5TT1JURUQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRPcmRlcj1JMC5VTlNPUlRFRCx0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMu''@;'; put 'put ''X3NvcnRPcmRlciksdGhpcy5zb3J0SWNvbj1udWxsLHRoaXMuX3NvcnREaXJlY3Rpb249bnVsbCksdGhpcy5zb3J0ZWQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRlZD0hMSx0aGlzLnNvcnRlZENoYW5nZS5lbWl0KCExKSl9KX1zZXR1cERlZmF1bHRGaWx0ZXIo''@;'; put 'put ''YSxkKXsibnVtYmVyIj09PWQ/dGhpcy5zZXRGaWx0ZXIobmV3IEo1KG5ldyBBRShhKSkpOiJzdHJpbmciPT09ZCYmdGhpcy5zZXRGaWx0ZXIobmV3IFE1KG5ldyBURShhKSkpLHRoaXMuZmlsdGVyJiZ0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9dGhpcy5p''@;'; put 'put ''bml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoSUUpLHR0KEZmKSx0dChhcyksdHQoaDIpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltb''@;'; put 'put ''ImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCx4RSw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLnByb2plY3RlZEZpbHRlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSxob3N0VmFyczoz''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLXNvcnQiLGQuYXJpYVNvcnQpLGhyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciIsImZpbHRlclN0cmluZ1Bs''@;'; put 'put ''YWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciIsImZp''@;'; put 'put ''bHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbImNsckRnQ29sVHlwZSIsImNvbFR5cGUiXSxmaWVsZDpbImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbImNsckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOlsiY2xyRGdTb3J0T3JkZXIiLCJzb3J0T3JkZXIiXSxz''@;'; put 'put ''b3J0ZWQ6WyJjbHJEZ1NvcnRlZCIsInNvcnRlZCJdLHVwZGF0ZUZpbHRlclZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ1cGRhdGVGaWx0ZXJWYWx1ZSJdfSxvdXRwdXRzOntzb3J0T3JkZXJDaGFuZ2U6ImNsckRnU29ydE9yZGVyQ2hhbmdlIixmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVy''@;'; put 'put ''VmFsdWVDaGFuZ2UiLHNvcnRlZENoYW5nZToiY2xyRGdTb3J0ZWRDaGFuZ2UifSxmZWF0dXJlczpbdGkoW1M4LElmLEtzXSksZW8sdmFdLG5nQ29udGVudFNlbGVjdG9yczpROWUsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbMSwiZGF0YWdyaWQtY29sdW1uLWZsZXgiXSxbImNsYXNzIiwiZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uLXRpdGxlIiwidHlwZSIsImJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVy''@;'; put 'put ''TWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbImNvbHVtblRpdGxlIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIs''@;'; put 'put ''NCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsInNvcnQtaWNvbiIsNCwibmdJZiJd''@;'; put 'put ''LFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzMsImNsckZpbHRlck1heFBsYWNlaG9s''@;'; put 'put ''ZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKEo5ZSksbWUoMCwi''@;'; put 'put ''ZGl2IiwwKSxRZSgxLFk5ZSwzLDIsImJ1dHRvbiIsMSksa3IoMiksUWUoMyxXOWUsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMiksUWUoNCxHOWUsMSw0LCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDMpLFFlKDUsJDllLDEsMCwibmctdGVtcGxhdGUiLG51bGwsNCxFYyksUWUoNyxLOWUs''@;'; put 'put ''MiwxLCJzcGFuIiw1KSxRZSg4LFg5ZSwxLDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsZC5zb3J0YWJsZSksQ2UoMiksUmUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmInN0cmluZyI9PWQuY29sVHlwZSksQ2UoMSks''@;'; put 'put ''UmUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmIm51bWJlciI9PWQuY29sVHlwZSksQ2UoMyksUmUoIm5nSWYiLCFkLnNvcnRhYmxlKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93U2VwYXJhdG9yKSl9LGRlcGVuZGVuY2llczpbUUYsZlEsZ1EsWmkscmQscXNdLGVuY2Fwc3VsYXRp''@;'; put 'put ''b246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLEFwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWQsdGhpcy5fcGFnZT1oLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5f''@;'; put 'put ''Y2hhbmdlPW5ldyBiZSx0aGlzLl9hbGxDaGFuZ2VzPW5ldyBiZSx0aGlzLml0ZXJhdG9yVHJhY2tCeT0oZixfKT0+X31nZXQgc21hcnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVybiB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFu''@;'; put 'put ''Z2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVySXRlbXMoKToodGhpcy5fZGlzcGxheWVkPWEsdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdl''@;'; put 'put ''dCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FsbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHVuaW5pdGlhbGl6ZWQoKXtyZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJzU3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYm''@;'; put 'put ''dGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3BhZ2VTdWImJnRoaXMuX3BhZ2VTdWIudW5zdWJzY3JpYmUoKX1zbWFydGVuVXAoKXt0aGlzLl9zbWFydD0hMCx0aGlzLl9maWx0ZXJzU3ViPXRoaXMuX2ZpbHRlcnMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5fZmlsdGVySXRl''@;'; put 'put ''bXMoKSksdGhpcy5fc29ydFN1Yj10aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zb3J0LmNvbXBhcmF0b3I/dGhpcy5fc29ydEl0ZW1zKCk6dGhpcy5fZmlsdGVySXRlbXMoKX0pLHRoaXMuX3BhZ2VTdWI9dGhpcy5fcGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlz''@;'; put 'put ''Ll9jaGFuZ2VQYWdlKCkpfXJlZnJlc2goKXt0aGlzLnNtYXJ0JiZ0aGlzLl9maWx0ZXJJdGVtcygpfWNhblRyYWNrQnkoKXtyZXR1cm4hIXRoaXMuZGF0YWdyaWRUcmFja0J5fHxBcnJheS5pc0FycmF5KHRoaXMuYWxsKX10cmFja0J5KGEsZCl7aWYodGhpcy5kYXRhZ3JpZFRyYWNrQnkpcmV0''@;'; put 'put ''dXJuIHRoaXMuZGF0YWdyaWRUcmFja0J5KGEpO2lmKEFycmF5LmlzQXJyYXkodGhpcy5hbGwpKXJldHVybiBkPWQ/P3RoaXMuYWxsLmluZGV4T2YoYSksdGhpcy5pdGVyYXRvclRyYWNrQnkoZCxhKTt0aHJvdyBuZXcgRXJyb3IoImltcHJvcGVyIGNhbGwgdG8gSXRlbXMjdHJhY2tCeSIpfWVt''@;'; put 'put ''aXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmRpc3BsYXllZCl9ZW1pdEFsbENoYW5nZXMoYSl7dGhpcy5fYWxsQ2hhbmdlcy5uZXh0KGEpfV9maWx0ZXJJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX2ZpbHRlcmVkPXRoaXMuX2ZpbHRlcnMuaGFzQWN0aXZlRmls''@;'; put 'put ''dGVycygpP3RoaXMuX2FsbC5maWx0ZXIoYT0+dGhpcy5fZmlsdGVycy5hY2NlcHRzKGEpKTp0aGlzLl9hbGwuc2xpY2UoKSx0aGlzLl9wYWdlLnRvdGFsSXRlbXM9dGhpcy5fZmlsdGVyZWQubGVuZ3RoLHRoaXMuX3NvcnRJdGVtcygpKX1fc29ydEl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVk''@;'; put 'put ''fHwodGhpcy5fc29ydC5jb21wYXJhdG9yJiZ0aGlzLl9maWx0ZXJlZC5zb3J0KChhLGQpPT50aGlzLl9zb3J0LmNvbXBhcmUoYSxkKSksdGhpcy5fY2hhbmdlUGFnZSgpKX1fY2hhbmdlUGFnZSgpe3RoaXMudW5pbml0aWFsaXplZHx8dGhpcy5fcGFnZS5hY3RpdmF0ZWQmJjA9PT10aGlzLl9w''@;'; put 'put ''YWdlLnNpemV8fCh0aGlzLl9kaXNwbGF5ZWQ9dGhpcy5fcGFnZS5zaXplPjA/dGhpcy5fZmlsdGVyZWQuc2xpY2UodGhpcy5fcGFnZS5maXJzdEl0ZW0sdGhpcy5fcGFnZS5sYXN0SXRlbSsxKTp0aGlzLl9maWx0ZXJlZCx0aGlzLmVtaXRDaGFuZ2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZmKSxhcihJRSksYXIoRXApKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxVOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmRp''@;'; put 'put ''ZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy52Y3I9Zix0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxoLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgeHModGhpcy52Y3IsdGhpcy50ZW1wbGF0ZSx0aGlzLmRpZmZlcnMpLHRoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cy5wdXNoKGguY2hhbmdlLnN1YnNjcmliZShfPT57dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yT2Y9Xyx0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMuaXRlcmF0b3JU''@;'; put 'put ''cmFja0J5PWEsdGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeT1hfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9bmdEb0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRl''@;'; put 'put ''KHRoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vi''@;'; put 'put ''c2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh6YSksdHQoejYpLHR0KEFwKSx0dChhcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEZ0l0ZW1zIiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlu''@;'; put 'put ''cHV0czp7cmF3SXRlbXM6WyJjbHJEZ0l0ZW1zT2YiLCJyYXdJdGVtcyJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX19KSxjfSkoKSxySD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRlbXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEo''@;'; put 'put ''dGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbInJvbGUiLCJy''@;'; put 'put ''b3ciLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyIl0sWyJjbGFzcyIsImRhdGFncmlkLXBsYWNlaG9sZGVyLWltYWdlIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRl''@;'; put 'put ''ci1pbWFnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxRZSgxLGV2ZSwxLDAsImRpdiIsMSksbWUoMiwic3BhbiIsMiksUWUoMyx0dmUsMSwwLCJuZy1jb250ZW50IiwzKSx5ZSgpKCkpLDImYSYmKGhyKCJkYXRhZ3JpZC1lbXB0eSIsZC5lbXB0''@;'; put 'put ''eURhdGFncmlkKSxDZSgxKSxSZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSxDZSgyKSxSZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbWmldLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGlIPSgoKT0+e2NsYXNzIGN7c2V0IHRyaWdnZXJFbChhKXt0aGlzLl90cmln''@;'; put 'put ''Z2VyRWw9YX1mb2N1c1RyaWdnZXIoKXt0aGlzLl90cmlnZ2VyRWwmJnRoaXMuX3RyaWdnZXJFbC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSko''@;'; put 'put ''KSxvSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX1zZXRJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s''@;'; put 'put ''Yy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxMRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMuZWw9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnNpZ25wb3N0SWRT''@;'; put 'put ''ZXJ2aWNlPWYsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1fLHRoaXMucGxhdGZvcm1JZD1XLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PVR9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJFbD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhp''@;'; put 'put ''cy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmFyaWFFeHBhbmRlZD1hO2NvbnN0IGQ9dGhpcy5pc09wZW47dGhpcy5pc09wZW49YSwhdGhpcy5pc09wZW4mJmQmJnRoaXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNp''@;'; put 'put ''Z25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShhPT50aGlzLmFyaWFDb250cm9sPWEpKSx0aGlzLmFkZERlZmF1bHRBcmlhTGFiZWwodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25T''@;'; put 'put ''aWducG9zdFRyaWdnZXJDbGljayhhKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfWFkZERlZmF1bHRBcmlhTGFiZWwoYSl7YS5oYXNBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8YS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRoaXMuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LnNpZ25wb3N0VG9nZ2xlKX1mb2N1c09uQ2xvc2UoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYhdGhpcy5pc09wZW4mJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZG9jdW1lbnQuYm9keSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoS3MpLHR0KE5pKSx0dChFcyksdHQob0gpLHR0KGlIKSx0dChMcyksdHQoR3MpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRy''@;'; put 'put ''czpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5k''@;'; put 'put ''ZWQpKCJhcmlhLWNvbnRyb2xzIixkLmFyaWFDb250cm9sKSxocigiYWN0aXZlIixkLmlzT3BlbikpfX0pLGN9KSgpLHNIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEp''@;'; put 'put ''e3RoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQs''@;'; put 'put ''aCl7aWYoMSZhJiZJbyhoLExFLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigic2lnbnBvc3QiLCEwKX0sZmVhdHVyZXM6W3RpKFtLcyxpSCx7cHJvdmlkZTpM''@;'; put 'put ''OCx1c2VFeGlzdGluZzpOaX0sb0hdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbWFsbCIsImJ0bi1s''@;'; put 'put ''aW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxRZSgwLG52ZSwzLDEsIm5nLWNvbnRhaW5lciIsMCksa3IoMSkpLDImYSYmUmUoIm5nSWYiLCFkLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W1ppLExFLHFzXSxl''@;'; put 'put ''bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNlbGxWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5j''@;'; put 'put ''ZWxsVmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNlbGwiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhydmUsNSks''@;'; put 'put ''MiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksUWUoMCxpdmUsMSwwLCJuZy10''@;'; put 'put ''ZW1wbGF0ZSIsbnVsbCwwLEVjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFRwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52Y3I9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGFILHRoaXMudmNyKS5jZWxsVmlld31uZ09uSW5pdCgp''@;'; put 'put ''e3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyB3RShhSCx0aGlzLnZjcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLGNvbnRlbnRRdWVyaWVz''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsc0gsNCksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5zaWducG9zdD1mKX19LGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiZGF0YWdyaWQtY2Vs''@;'; put 'put ''bCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIixkLnNpZ25wb3N0Lmxlbmd0aD4wKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG1RPTAs''@;'; put 'put ''T2I9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFl1e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyBUZSghMSksdGhpcy5fYW5pbWF0ZT1uZXcgYmUsbVErKyx0aGlzLmV4cGFuZGFibGVJZD0iY2xyLWRnLWV4cGFuZGFibGUtcm93LSIr''@;'; put 'put ''bVF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2FuaW1hdGUubmV4dCgpLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgcmVwbGFjZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9yZXBsYWNlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbmltYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUuYXNPYnNlcnZhYmxlKCl9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3N1cGVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSxhIT09VXUuTE9BRElORyYmdGhpcy5fYW5pbWF0ZS5u''@;'; put 'put ''ZXh0KCl9c2V0UmVwbGFjZShhKXt0aGlzLl9yZXBsYWNlLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBaOD1mdW5jdGlvbihjKXty''@;'; put 'put ''ZXR1cm4gY1tjLkRJU1BMQVk9MF09IkRJU1BMQVkiLGNbYy5DQUxDVUxBVEU9MV09IkNBTENVTEFURSIsY30oWjh8fHt9KSxhYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNbYy5TaW5nbGU9MV09IlNpbmdsZSIsY1tjLk11bHRpPTJdPSJNdWx0aSIsY30oYWF8fHt9''@;'; put 'put ''KTtsZXQgbEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8ob3ZlLDUpLDImYSl7bGV0IGg7c2koaD1haSgp''@;'; put 'put ''KSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksUWUoMCxzdmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEVjKSl9''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGN3ZT0wLFk4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMuX2ZpbHRlcnM9ZCx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSExLHRoaXMucm93U2VsZWN0aW9uTW9kZT0h''@;'; put 'put ''MSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyBiZSx0aGlzLl9zZWxlY3Rpb25UeXBlPWFhLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVj''@;'; put 'put ''dGlvbiIrY3dlKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0''@;'; put 'put ''aGlzLl9pdGVtcy5hbGxDaGFuZ2VzLnN1YnNjcmliZShoPT57Y29uc3QgZj1bXTtzd2l0Y2godGhpcy5zZWxlY3Rpb25UeXBlKXtjYXNlIGFhLk5vbmU6YnJlYWs7Y2FzZSBhYS5TaW5nbGU6e2xldCBfLFQ9ITE7dGhpcy5jdXJyZW50U2luZ2xlJiYhdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9u''@;'; put 'put ''UmVmJiZ0aGlzLl9pdGVtcy5jYW5UcmFja0J5KCkmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5faXRlbXMudHJhY2tCeSh0aGlzLmN1cnJlbnRTaW5nbGUpKSxoLmZvckVhY2goKFcsaWUpPT57Y29uc3QgZ2U9dGhpcy5faXRlbXMudHJhY2tCeShXLGllKTt0aGlzLnByZXZT''@;'; put 'put ''aW5nbGVTZWxlY3Rpb25SZWY9PT1nZSYmKF89VyxUPSEwKSx0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihnZSk+LTEmJmYucHVzaChnZSl9KSx0aGlzLl9pdGVtcy5zbWFydCYmIV8mJihUPSEwKSxzZXRUaW1lb3V0KCgpPT57VCYmKHRoaXMuY3VycmVudFNpbmdsZT1fKX0sMCk7YnJlYWt9Y2Fz''@;'; put 'put ''ZSBhYS5NdWx0aTp7bGV0IF89dGhpcy5jdXJyZW50LnNsaWNlKCksVD0hMTt0aGlzLmN1cnJlbnQubGVuZ3RoPjAmJnRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoIT09dGhpcy5jdXJyZW50Lmxlbmd0aCYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpJiYodGhpcy5wcmV2U2VsZWN0aW9u''@;'; put 'put ''UmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaChXPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHRoaXMuX2l0ZW1zLnRyYWNrQnkoVykpfSkpLGguZm9yRWFjaCgoVyxpZSk9Pntjb25zdCBnZT10aGlzLl9pdGVtcy50cmFja0J5KFcsaWUpO3RoaXMubG9ja2VkUmVmcy5pbmRleE9m''@;'; put 'put ''KGdlKT4tMSYmZi5wdXNoKGdlKX0pLF8ubGVuZ3RoPjAmJihoLmZvckVhY2goKFcsaWUpPT57Y29uc3QgZ2U9dGhpcy5faXRlbXMudHJhY2tCeShXLGllKSx3ZT10aGlzLnByZXZTZWxlY3Rpb25SZWZzLmluZGV4T2YoZ2UpO3dlPi0xJiYoX1t3ZV09VyxUPSEwKX0pLHRoaXMuX2l0ZW1zLnNt''@;'; put 'put ''YXJ0JiYoXz1fLmZpbHRlcihXPT5oLmluZGV4T2YoVyk+LTEpLHRoaXMuY3VycmVudC5sZW5ndGghPT1fLmxlbmd0aCYmKFQ9ITApKSxzZXRUaW1lb3V0KCgpPT57VCYmKHRoaXMuY3VycmVudD1fKX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9Zn0pKSx0aGlzLnN1YnNjcmlwdGlvbnMu''@;'; put 'put ''cHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoZjgoMCkpLnN1YnNjcmliZSgoKT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10aGlzLnNlbGVjdGlvblR5cGUmJih0''@;'; put 'put ''aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PWFhLk5vbmU/ZGVsZXRlIHRoaXMuY3VycmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3VycmVudChhLCEwKX1nZXQgY3VycmVu''@;'; put 'put ''dFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2luZ2xlfXNldCBjdXJyZW50U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLHRoaXMuX2l0ZW1zLmNhblRyYWNrQnkoKSYmYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10''@;'; put 'put ''aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1hYS5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlw''@;'; put 'put ''ZT09PWFhLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMu''@;'; put 'put ''c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudChhLGQpe3RoaXMuX2N1cnJlbnQ9YSxkJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PWFhLlNpbmdsZT90aGlz''@;'; put 'put ''LmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1hYS5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoYSk+PTB9c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9u''@;'; put 'put ''VHlwZSl7Y2FzZSBhYS5Ob25lOmNhc2UgYWEuU2luZ2xlOmJyZWFrO2Nhc2UgYWEuTXVsdGk6aD49MCYmIWQ/dGhpcy5kZXNlbGVjdEl0ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09YWEuTXVsdGl8fCF0''@;'; put 'put ''aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGY9PiExPT09dGhpcy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwxKSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEu''@;'; put 'put ''bGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGg9dGhpcy5faXRlbXMudHJhY2tCeShhKTshMD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tl''@;'; put 'put ''ZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVtcy50cmFja0J5KGEpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09YWEuTm9uZXx8dGhpcy5fc2VsZWN0aW9u''@;'; put 'put ''VHlwZT09PWFhLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9p''@;'; put 'put ''dGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2YoYSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShhKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLl9pdGVtcy5jYW5U''@;'; put 'put ''cmFja0J5KCkmJnRoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaCh0aGlzLl9pdGVtcy50cmFja0J5KGEpKX1kZXNlbGVjdEl0ZW0oYSl7aWYodGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5zbGljZSgwLGEpLmNvbmNhdCh0aGlzLmN1cnJlbnQuc2xpY2UoYSsxKSksYTx0aGlzLnByZXZTZWxl''@;'; put 'put ''Y3Rpb25SZWZzLmxlbmd0aCl7Y29uc3QgZD10aGlzLnByZXZTZWxlY3Rpb25SZWZzLnNwbGljZShhLDEpO3RoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGg9PmghPT1kWzBdKX19Y2FuSXRCZUxvY2tlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlIT09YWEuTm9u''@;'; put 'put ''ZSYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpfWVtaXRDaGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09YWEuU2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9uVHlwZT09PWFhLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlz''@;'; put 'put ''LmN1cnJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihBcCksYXIoRmYpKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu''@;'; put 'put ''X3ZpZXc9bmV3IFRlKFo4LkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKGYyLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dChaOC5DQUxDVUxBVEUpKSksdGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJTdGVwcyhmMi5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFo4LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3Ro''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGVnKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdUg9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVjdGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENsaWNrKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYiSU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVl''@;'; put 'put ''cnlTZWxlY3RvcigiaW5wdXQiKS5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TZWxlY3Rpb25DZWxsQ2xpY2soZil9KX19KSxjfSkoKSxSRT0wLG5nPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSxFZSxaZSl7dGhpcy5zZWxlY3Rpb249YSx0aGlz''@;'; put 'put ''LnJvd0FjdGlvblNlcnZpY2U9ZCx0aGlzLmdsb2JhbEV4cGFuZGFibGU9aCx0aGlzLmV4cGFuZD1mLHRoaXMuZGV0YWlsU2VydmljZT1fLHRoaXMuZGlzcGxheU1vZGU9VCx0aGlzLnZjcj1XLHRoaXMucmVuZGVyZXI9aWUsdGhpcy5lbD1nZSx0aGlzLmNvbW1vblN0cmluZ3M9d2UsdGhpcy5p''@;'; put 'put ''dGVtcz1FZSx0aGlzLmRvY3VtZW50PVplLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZGlzcGxheUNlbGxzPSExLHRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hMSx0aGlzLlNFTEVDVElPTl9UWVBFPWFhLHRo''@;'; put 'put ''aXMuaXRlbUNoYW5nZXM9bmV3ICR4KDEpLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2RldGFpbE9wZW5MYWJlbD0iIix0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPSIiLHRoaXMuX3Jvd0FyaWFMYWJlbD0iIix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc2VsZWN0YWJsZT0hMCxSRSsrLHRo''@;'; put 'put ''aXMuaWQ9ImNsci1kZy1yb3ciK1JFLHRoaXMucmFkaW9JZD0iY2xyLWRnLXJvdy1yZCIrUkUsdGhpcy5jaGVja2JveElkPSJjbHItZGctcm93LWNiIitSRSx0aGlzLmV4cGFuZGFibGVJZD1mLmV4cGFuZGFibGVJZCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChZNih0aGlzLmV4cGFuZC5yZXBs''@;'; put 'put ''YWNlLHRoaXMuZXhwYW5kLmV4cGFuZENoYW5nZSkuc3Vic2NyaWJlKChbb3QsZXRdKT0+e290JiZldD8odGhpcy5yZXBsYWNlZD0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpOih0aGlzLnJlcGxhY2VkPSEx''@;'; put 'put ''LHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSl9KSl9Z2V0IGl0ZW0oKXtyZXR1cm4gdGhpcy5faXRlbX1zZXQgaXRlbShhKXt0aGlzLl9pdGVtPWEsdGhpcy5pdGVtQ2hhbmdlcy5uZXh0KGEpLHRoaXMuY2xy''@;'; put 'put ''RGdTZWxlY3RhYmxlPXRoaXMuX3NlbGVjdGFibGV9Z2V0IGNsckRnU2VsZWN0YWJsZSgpe3JldHVybiF0aGlzLnNlbGVjdGlvbi5pc0xvY2tlZCh0aGlzLml0ZW0pfXNldCBjbHJEZ1NlbGVjdGFibGUoYSl7dGhpcy5pdGVtJiZ0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sImZh''@;'; put 'put ''bHNlIj09PWF8fCExPT09YSksdGhpcy5fc2VsZWN0YWJsZT1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YWEuTm9uZT90aGlzLl9zZWxlY3RlZDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHRoaXMuaXRlbSl9c2V0IHNlbGVjdGVkKGEp''@;'; put 'put ''e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5Ob25lP3RoaXMuX3NlbGVjdGVkPWE6KGEmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5NdWx0aT90aGlzLnJhbmdlU2VsZWN0KCk6dGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD1udWxsLHRoaXMuc2VsZWN0aW9u''@;'; put 'put ''LnNldFNlbGVjdGVkKHRoaXMuaXRlbSxhKSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfXNldCBleHBhbmRlZChhKXt0aGlzLmV4cGFuZC5leHBhbmRlZD1hfWdldCBjbHJEZ0RldGFpbE9wZW5MYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxPcGVuTGFiZWw/''@;'; put 'put ''dGhpcy5fZGV0YWlsT3BlbkxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW59c2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKGEpe3RoaXMuX2RldGFpbE9wZW5MYWJlbD1hfWdldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD90aGlz''@;'; put 'put ''Ll9kZXRhaWxDbG9zZUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlfXNldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoYSl7dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD1hfWdldCBjbHJEZ1Jvd0FyaWFMYWJlbCgpe3JldHVybiB0aGlzLl9yb3dBcmlhTGFiZWw/dGhpcy5fcm93QXJp''@;'; put 'put ''YUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdH1zZXQgY2xyRGdSb3dBcmlhTGFiZWwoYSl7dGhpcy5fcm93QXJpYUxhYmVsPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChsSCx0aGlzLnZjcikucm93Vmlld31uZ09uSW5pdCgpe3RoaXMu''@;'; put 'put ''d3JhcHBlZEluamVjdG9yPW5ldyB3RShsSCx0aGlzLnZjciksdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCExPT09dGhpcy5jbHJEZ1NlbGVjdGFibGUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZGdDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuZGdDZWxs''@;'; put 'put ''cy5mb3JFYWNoKGE9PnthLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChhLl92aWV3KX0pfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRo''@;'; put 'put ''aXMuX3Njcm9sbGFibGVDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuZGV0YWNoKCk7YT09PVo4LkNBTENVTEFURT8odGhp''@;'; put 'put ''cy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLmRpc3BsYXlDZWxscz0hMCx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95''@;'; put 'put ''ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoZC5fdmlldyl9KSl9KSx0aGlzLmV4cGFuZC5hbmltYXRlLnN1YnNjcmliZSgoKT0+e3RoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGUoYT0hdGhpcy5zZWxlY3RlZCl7YSE9PXRoaXMuc2VsZWN0ZWQmJih0aGlzLnNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKSl9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmQuZXhwYW5kYWJs''@;'; put 'put ''ZSYmKHRoaXMuZXhwYW5kQW5pbWF0aW9uLnVwZGF0ZVN0YXJ0SGVpZ2h0KCksdGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWNsZWFyUmFuZ2VzKGEpe2Euc2hpZnRLZXkmJih0aGlzLmRvY3VtZW50LmdldFNlbGVj''@;'; put 'put ''dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpLC0xIT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiRmlyZWZveCIpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlKCEwKSkpfXNlbGVjdFJvdyhhPSF0aGlzLnNlbGVjdGVkLGQpeyJMQUJFTCIhPT1kLnRhcmdldC50''@;'; put 'put ''YWdOYW1lJiYodGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXRoaXMuU0VMRUNUSU9OX1RZUEUuU2luZ2xlP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9dGhpcy5pdGVtOnRoaXMudG9nZ2xlKGEpKX1yYW5nZVNlbGVjdCgpe2NvbnN0IGE9dGhpcy5pdGVtcy5kaXNwbGF5ZWQ7''@;'; put 'put ''aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5pbmRleE9mKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpO2lmKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQmJnRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuaW5jbHVkZXModGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCkmJnRoaXMuc2VsZWN0aW9uLnNo''@;'; put 'put ''aWZ0UHJlc3NlZCYmLTEhPT1kKXtjb25zdCBoPWEuaW5kZXhPZih0aGlzLml0ZW0pLGY9bmV3IFNldCh0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmNvbmNhdChhLnNsaWNlKE1hdGgubWluKGQsaCksTWF0aC5tYXgoZCxoKSsxKSkpO3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhp''@;'; put 'put ''cy5zZWxlY3Rpb24uY3VycmVudC5wdXNoKC4uLmYpfWVsc2UgdGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD10aGlzLml0ZW19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFk4KSx0dChWOCksdHQoajgpLHR0KE9iKSx0dChoMiksdHQoY0gpLHR0''@;'; put 'put ''KGFzKSx0dChGbyksdHQoTmkpLHR0KEVzKSx0dChBcCksdHQoTHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFRwLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYm''@;'; put 'put ''KGQuZGdDZWxscz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKF9FLDUpLFJvKGF2ZSw1KSxSbyhsdmUsNSxhcyksUm8oY3ZlLDUsYXMpLFJvKHV2ZSw1LGFzKSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5leHBhbmRBbmltYXRpb249aC5maXJzdCksc2koaD1h''@;'; put 'put ''aSgpKSYmKGQuZGV0YWlsQnV0dG9uPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLl9zdGlja3lDZWxscz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fc2Nyb2xsYWJsZUNlbGxzPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLl9jYWxjdWxhdGVkQ2VsbHM9aC5maXJzdCl9fSxob3N0QXR0cnM6WyJy''@;'; put 'put ''b2xlIiwicm93Z3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLW93bnMiLGQuaWQpLGhyKCJkYXRhZ3JpZC1yb3ciLCEwKSgiZGF0YWdyaWQtc2VsZWN0ZWQiLGQuc2VsZWN0ZWQpKX0saW5wdXRzOntpdGVtOlsiY2xyRGdJdGVtIiwi''@;'; put 'put ''aXRlbSJdLGNsckRnU2VsZWN0YWJsZToiY2xyRGdTZWxlY3RhYmxlIixzZWxlY3RlZDpbImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRGdFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRGdEZXRhaWxPcGVuTGFiZWw6ImNsckRnRGV0YWlsT3BlbkxhYmVsIixjbHJE''@;'; put 'put ''Z0RldGFpbENsb3NlTGFiZWw6ImNsckRnRGV0YWlsQ2xvc2VMYWJlbCIsY2xyRGdSb3dBcmlhTGFiZWw6ImNsckRnUm93QXJpYUxhYmVsIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRGdFeHBhbmRlZENoYW5nZSJ9''@;'; put 'put ''LGZlYXR1cmVzOlt0aShbT2Ise3Byb3ZpZGU6WXUsdXNlRXhpc3Rpbmc6T2J9LHtwcm92aWRlOm1iLHVzZUV4aXN0aW5nOk9ifV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RnZlLGRlY2xzOjksdmFyczozLGNvbnN0czpbWyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1vdXNl''@;'; put 'put ''ZG93biIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwi''@;'; put 'put ''Y2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbInN0aWNreUNlbGxzIiwiIl0s''@;'; put 'put ''WyJjbGFzcyIsImRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQt''@;'; put 'put ''Y2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJl''@;'; put 'put ''dCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSIsMywibmdDbGFzcyJdLFsxLCJkYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMiXSxbInNjcm9sbGFibGVDZWxscyIsIiJdLFsicm9sZSIsImdyaWRjZWxsIiwx''@;'; put 'put ''LCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIiwzLCJuZ0NsYXNzIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbCIsImlkIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImNsci1jb250''@;'; put 'put ''cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJmb3IiLCJjbGljayJdLFsxLCJjbHItc3Itb25seSJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLDMsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwi''@;'; put 'put ''Y2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZXhwYW5k''@;'; put 'put ''YWJsZS1jYXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLCJkYXRhZ3JpZC1m''@;'; put 'put ''aXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1oYXNwb3B1cCIsImRpYWxvZyIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsImRh''@;'; put 'put ''dGFncmlkLWRldGFpbC1jYXJldC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoUHZlKSxRZSgwLGd2ZSwzLDIsImRpdiIsMCksUWUoMSx2dmUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEpLFFlKDIsYnZlLDEsMSxudWxsLDIpLFFlKDMseXZlLDEsMCwi''@;'; put 'put ''bmctdGVtcGxhdGUiLG51bGwsMyxFYyksUWUoNSxPdmUsMTYsMTMsIm5nLXRlbXBsYXRlIixudWxsLDQsRWMpLGphKDcsbnVsbCw1KSksMiZhJiYoUmUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUpLENlKDEpLFJlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9u''@;'; put 'put ''TW9kZSYmZC5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiYhZC5leHBhbmQuZXhwYW5kYWJsZSkpfSxkZXBlbmRlbmNpZXM6W19FLFQwLEtGLHUyLFppLHJkLHVILHVjLFMwLEQwLEJzLE9zLFVzLGFFLFdhLFhGLHFzXSxl''@;'; put 'put ''bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgTDA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5XSURUSD0wXT0iV0lEVEgiLGNbYy5ISURERU49MV09IkhJRERFTiIsY30oTDB8fHt9KTtjb25zdCB2UT1PYmplY3Qua2V5cyhMMCkubWFwKGM9PkwwW2NdKS5maWx0ZXIoYz0+Yz09PXBhcnNlSW50''@;'; put 'put ''KGMsMTApKTtsZXQgSGY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29sdW1ucz1bXSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5tYXAoYT0+YS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlz''@;'; put 'put ''LmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+YS5oaWRlYWJsZSkubGVuZ3RoPjB9Y2FjaGUoKXt0aGlzLl9jYWNoZT10aGlzLmNvbHVtbnMubWFwKGE9Pntjb25zdCBkPXsuLi5hLnZhbHVlfTtyZXR1cm4gZGVsZXRlIGQuY2hhbmdlcyxkfSl9aGFzQ2FjaGUoKXtyZXR1cm4hIXRoaXMuX2NhY2hl''@;'; put 'put ''Lmxlbmd0aH1yZXNldFRvTGFzdENhY2hlKCl7dGhpcy5fY2FjaGUuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1tkXS5uZXh0KHsuLi5hLGNoYW5nZXM6dlF9KX0pLHRoaXMuX2NhY2hlPVtdfWVtaXRTdGF0ZUNoYW5nZUF0KGEsZCl7dGhpcy5jb2x1bW5zW2FdJiZ0aGlzLmVtaXRTdGF0''@;'; put 'put ''ZUNoYW5nZSh0aGlzLmNvbHVtbnNbYV0sZCl9ZW1pdFN0YXRlQ2hhbmdlKGEsZCl7YS5uZXh0KHsuLi5hLnZhbHVlLC4uLmR9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1''@;'; put 'put ''ZmFjfSksY30pKCksX1E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmZpbHRlcnM9YSx0aGlzLnNvcnQ9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRlYm91bmNlcj1mLHRoaXMuY2hhbmdlPXRoaXMuZGVib3VuY2VyLmNoYW5nZS5waXBlKE1lKCgpPT50aGlzLnN0YXRlKSl9''@;'; put 'put ''Z2V0IHN0YXRlKCl7Y29uc3QgYT17fTt0aGlzLnBhZ2Uuc2l6ZT4wJiYoYS5wYWdlPXtmcm9tOnRoaXMucGFnZS5maXJzdEl0ZW0sdG86dGhpcy5wYWdlLmxhc3RJdGVtLHNpemU6dGhpcy5wYWdlLnNpemUsY3VycmVudDp0aGlzLnBhZ2UuY3VycmVudH0pLHRoaXMuc29ydC5jb21wYXJhdG9y''@;'; put 'put ''JiYoYS5zb3J0PXRoaXMuc29ydC5jb21wYXJhdG9yIGluc3RhbmNlb2YgREU/e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLnByb3AscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX06e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9KTtjb25zdCBkPXRo''@;'; put 'put ''aXMuZmlsdGVycy5nZXRBY3RpdmVGaWx0ZXJzKCk7aWYoZC5sZW5ndGg+MCl7YS5maWx0ZXJzPVtdO2Zvcihjb25zdCBoIG9mIGQpYS5maWx0ZXJzLnB1c2goaC5zdGF0ZT9oLnN0YXRlOmgpfXJldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShhcihGZiksYXIoSUUpLGFyKEVwKSxhcihMYikpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGJRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy56b25lPWEsdGhpcy5saXN0ZW5lcnNBZGRlZD0hMSx0aGlzLmRlc3Ryb3kk''@;'; put 'put ''PW5ldyBiZSx0aGlzLmNvbmZpZz17a2V5R3JpZFJvd3M6Iltyb2xlPXJvd106bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlcikiLGtleUdyaWRDZWxsczoiW3JvbGU9Z3JpZGNlbGxdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50''@;'; put 'put ''KSwgW3JvbGU9Y29sdW1uaGVhZGVyXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLGtleUdyaWQ6Iltyb2xlPWdyaWRdIn19Z2V0IGdyaWQoKXtyZXR1cm4gdGhpcy5ob3N0Py5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLmtleUdyaWQpfWdldCByb3dzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyl9Z2V0IGNlbGxzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5r''@;'; put 'put ''ZXlHcmlkQ2VsbHMpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWFkZExpc3RlbmVycygpe3RoaXMubGlzdGVuZXJzQWRkZWR8fCh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntuMih0aGlzLmdyaWQsIm1vdXNlZG93''@;'; put 'put ''biIpLnBpcGUoYWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoMT09PWEuYnV0dG9ucyYmIWEuY3RybEtleSl7Y29uc3QgZD10aGlzLmNlbGxzP0FycmF5LmZyb20odGhpcy5jZWxscykuZmluZChoPT5oPT09YS50YXJnZXR8fGg9PT1hLnRhcmdldC5jbG9zZXN0KHRoaXMuY29u''@;'; put 'put ''ZmlnLmtleUdyaWRDZWxscykpOm51bGw7ZCYmdGhpcy5zZXRBY3RpdmVDZWxsKGQpfX0pLG4yKHRoaXMuZ3JpZCwia2V5ZG93biIpLnBpcGUoYWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoKCFhLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRyYWctaGFuZGxlIil8fCJB''@;'; put 'put ''cnJvd0xlZnQiIT09YS5jb2RlJiYiQXJyb3dSaWdodCIhPT1hLmNvZGUpJiYoIkFycm93VXAiPT09YS5jb2RlfHwiQXJyb3dEb3duIj09PWEuY29kZXx8IkFycm93TGVmdCI9PT1hLmNvZGV8fCJBcnJvd1JpZ2h0Ij09PWEuY29kZXx8IkVuZCI9PT1hLmNvZGV8fCJIb21lIj09PWEuY29kZXx8''@;'; put 'put ''IlBhZ2VVcCI9PT1hLmNvZGV8fCJQYWdlRG93biI9PT1hLmNvZGUpKXtjb25zdHt4OmQseTpofT10aGlzLmdldE5leHRJdGVtQ29vcmRpbmF0ZShhKSxmPXRoaXMucm93cz9BcnJheS5mcm9tKHRoaXMucm93c1toXS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykp''@;'; put 'put ''W2RdOm51bGw7ZiYmdGhpcy5zZXRBY3RpdmVDZWxsKGYpLGEucHJldmVudERlZmF1bHQoKX19KX0pLHRoaXMubGlzdGVuZXJzQWRkZWQ9ITApfWluaXRpYWxpemVLZXlHcmlkKGEpe3RoaXMuaG9zdD1hLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhpcy5yZXNldEtleUdyaWQoKX1yZXNldEtleUdy''@;'; put 'put ''aWQoKXt0aGlzLmNlbGxzPy5mb3JFYWNoKGQ9PmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlzLmNlbGxzP3RoaXMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIil9c2V0QWN0aXZlQ2VsbChhKXtjb25zdCBkPXRoaXMuY2VsbHM/QXJyYXku''@;'; put 'put ''ZnJvbSh0aGlzLmNlbGxzKS5maW5kKF89PiIwIj09PV8uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsO2QmJmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksYS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpO2NvbnN0IGg9ZnVuY3Rpb24gdXdlKGMpe2NvbnN0IGw9WyJh''@;'; put 'put ''W2hyZWZdIiwiYXJlYVtocmVmXSIsImlucHV0Om5vdChbZGlzYWJsZWRdKSIsImJ1dHRvbjpub3QoW2Rpc2FibGVkXSkiLCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pIiwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIiwiaWZyYW1lIiwib2JqZWN0IiwiZW1iZWQiLCIqW3RhYmluZGV4XSIsIipb''@;'; put 'put ''Y29udGVudGVkaXRhYmxlPXRydWVdIiwiW3JvbGU9YnV0dG9uXTpub3QoW2Rpc2FibGVkXSkiXS5qb2luKCIsIik7cmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGwpKX0oYSk7KCJjb2x1bW5oZWFkZXIiIT09YS5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmaFswXT9oWzBdOmEp''@;'; put 'put ''LmZvY3VzKCl9Z2V0TmV4dEl0ZW1Db29yZGluYXRlKGEpe2xldCBkPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKFplPT4iMCI9PT1aZS5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7IlRhYiI9PT1hLmNvZGUmJihkPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQp''@;'; put 'put ''O2NvbnN0IGg9dGhpcy5yb3dzJiZkP0FycmF5LmZyb20odGhpcy5yb3dzKS5maW5kKFplPT5aZS5jb250YWlucyhkKSk6bnVsbCxmPXRoaXMucm93cz90aGlzLnJvd3MubGVuZ3RoLTE6MCxfPXRoaXMuY2VsbHM/dGhpcy5jZWxscy5sZW5ndGgvdGhpcy5yb3dzLmxlbmd0aC0xOjA7bGV0IFQ9''@;'; put 'put ''aCYmZD9BcnJheS5mcm9tKGgucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGQpOjAsVz1oJiZkJiZ0aGlzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoaCk6MDtjb25zdCBpZT10aGlzLmhvc3QuZGlyLGdlPSJydGwiPT09aWU/''@;'; put 'put ''IkFycm93UmlnaHQiOiJBcnJvd0xlZnQiLHdlPSJydGwiPT09aWU/IkFycm93TGVmdCI6IkFycm93UmlnaHQiLEVlPU1hdGguZmxvb3IodGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKS5jbGllbnRIZWlnaHQvdGhpcy5yb3dzWzBdLmNsaWVudEhlaWdodCktMXx8MDtyZXR1''@;'; put 'put ''cm4iQXJyb3dVcCI9PT1hLmNvZGUmJjAhPT1XP1ctPTE6IkFycm93RG93biI9PT1hLmNvZGUmJlc8Zj9XKz0xOmEuY29kZT09PWdlJiYwIT09VD9ULT0xOmEuY29kZT09PXdlJiZUPF8/VCs9MToiRW5kIj09PWEuY29kZT8oVD1fLGEuY3RybEtleSYmKFc9ZikpOiJIb21lIj09PWEuY29kZT8o''@;'; put 'put ''VD0wLGEuY3RybEtleSYmKFc9MCkpOiJQYWdlVXAiPT09YS5jb2RlP1c9Vy1FZT4wP1ctRWU6MDoiUGFnZURvd24iPT09YS5jb2RlJiYoVz1XK0VlPGY/VytFZTpmKSx7eDpULHk6V319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSl9LGMu''@;'; put 'put ''XHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVzg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLGdlLHdlLEVlLFplLG90LGV0LHl0LGt0KXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLmV4cGFuZGFi''@;'; put 'put ''bGVSb3dzPWgsdGhpcy5zZWxlY3Rpb249Zix0aGlzLnJvd0FjdGlvblNlcnZpY2U9Xyx0aGlzLnN0YXRlUHJvdmlkZXI9VCx0aGlzLmRpc3BsYXlNb2RlPVcsdGhpcy5yZW5kZXJlcj1pZSx0aGlzLmRldGFpbFNlcnZpY2U9Z2UsdGhpcy5kb2N1bWVudD13ZSx0aGlzLmVsPUVlLHRoaXMucGFn''@;'; put 'put ''ZT1aZSx0aGlzLmNvbW1vblN0cmluZ3M9b3QsdGhpcy5jb2x1bW5zU2VydmljZT1ldCx0aGlzLmtleU5hdmlnYXRpb249eXQsdGhpcy56b25lPWt0LHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxh''@;'; put 'put ''YmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVB''@;'; put 'put ''cmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IEVyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgRXIoITEpLHRoaXMucmVmcmVzaD1uZXcgRXIoITEpLHRoaXMuU0VMRUNUSU9OX1RZUEU9YWEsdGhpcy5fc3Vi''@;'; put 'put ''c2NyaXB0aW9ucz1bXTtjb25zdCBTdD1EYygpO3RoaXMuc2VsZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxsLSIrU3QsdGhpcy5kZXRhaWxTZXJ2aWNlLmlkPVN0fWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuaXRlbXMubG9hZGluZ31zZXQgbG9hZGluZyhhKXt0aGlzLml0ZW1zLmxvYWRp''@;'; put 'put ''bmc9YX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hP2FhLk11bHRpOmFhLk5vbmUsdGhpcy5zZWxlY3Rpb24udXBkYXRlQ3VycmVudChhLCExKX1zZXQgc2luZ2xlU2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hYS5TaW5nbGUs''@;'; put 'put ''YT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWE6dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSYmKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9bnVsbCl9c2V0IGNsckRnUHJlc2VydmVTZWxlY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24ucHJlc2VydmVTZWxlY3Rpb249YX1z''@;'; put 'put ''ZXQgcm93U2VsZWN0aW9uTW9kZShhKXt0aGlzLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlPWF9c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVtcy5kYXRhZ3JpZFRyYWNrQnk9YX1nZXQgYWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNBbGxTZWxlY3RlZCgpfXNldCBhbGxT''@;'; put 'put ''ZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi50b2dnbGVBbGwoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9dGhpcy5yb3dzLm1hcChkPT5kLml0ZW0pKTtjb25zdCBhPXRoaXMucm93cy5jaGFuZ2VzLnBpcGUoU2EoZD0+aXMoV2koZC5t''@;'; put 'put ''YXAoaD0+aC5pdGVtKSksWTYoZC5tYXAoaD0+aC5pdGVtQ2hhbmdlcykpLnBpcGUoZjgoMCkpKSkpO3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPWQpfSksdGhpcy5yb3dzLmNoYW5nZXMuc3Vic2NyaWJl''@;'; put 'put ''KCgpPT57Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoLTE7ZD49MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5nZXQoZCkuZGVzdHJveWVkJiZ0aGlzLl9kaXNwbGF5ZWRSb3dzLnJlbW92ZShkKTtpZih0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93''@;'; put 'put ''cy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUmJnRoaXMuZGV0YWlsU2VydmljZS5pc09wZW4pe2NvbnN0IGQ9dGhpcy5pdGVtcy5jYW5UcmFja0J5KCk/dGhpcy5yb3dzLmZpbmQoaD0+dGhpcy5pdGVtcy50cmFja0J5KGguaXRlbSk9PT10aGlzLml0ZW1zLnRy''@;'; put 'put ''YWNrQnkodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlKSk6dm9pZCAwO2Q/dGhpcy5kZXRhaWxTZXJ2aWNlLm9wZW4oZC5pdGVtLGQuZGV0YWlsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpOnRoaXMuZGV0YWlsU2VydmljZS5jbG9zZSgpfX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmtleU5hdmln''@;'; put 'put ''YXRpb24uaW5pdGlhbGl6ZUtleUdyaWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlZnJlc2guZW1pdCh0aGlzLnN0YXRlUHJvdmlkZXIuc3RhdGUpLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlUHJvdmlkZXIuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnJlZnJl''@;'; put 'put ''c2guZW1pdChhKSksdGhpcy5zZWxlY3Rpb24uY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWFhLlNpbmdsZT90aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5NdWx0aSYm''@;'; put 'put ''dGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKX0pLHRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzfHx0aGlzLmRhdGFncmlkVGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygp''@;'; put 'put ''fSksWTYodGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zKS5zdWJzY3JpYmUoKCk9PnRoaXMua2V5TmF2aWdhdGlvbj8ucmVzZXRLZXlHcmlkKCkpLHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5sZW5n''@;'; put 'put ''dGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhp''@;'; put 'put ''cy5fY2FsY3VsYXRpb25Sb3dzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2NhbGN1bGF0aW9uUm93cy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmRldGFjaCgpO2E9PT1aOC5ESVNQTEFZPyh0aGlzLnJlbmRl''@;'; put 'put ''cmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMu''@;'; put 'put ''X2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5z''@;'; put 'put ''Lmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9jYWxjdWxhdGlvblJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpfSkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChuMih0aGlzLmRvY3VtZW50LmJvZHks''@;'; put 'put ''ImtleWRvd24iKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMCl9KSxuMih0aGlzLmRvY3VtZW50LmJvZHksImtleXVwIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNz''@;'; put 'put ''ZWQ9ITEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVmcmVzaCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChlZyksdHQoQXApLHR0KGo4KSx0dChZOCksdHQoVjgpLHR0KF9RKSx0dChjSCksdHQoRm8pLHR0KGgyKSx0dChMcyksdHQoTmkpLHR0KEVwKSx0dChFcyksdHQoSGYpLHR0KGJRKSx0dChObykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgsVTgsNSksSW8oaCxySCw1KSxJbyhoLHRnLDQpLElvKGgsbmcsNCkpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCksc2koZj1haSgp''@;'; put 'put ''KSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCksc2koZj1haSgpKSYmKGQuY29sdW1ucz1mKSxzaShmPWFpKCkpJiYoZC5yb3dzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8oSHZlLDUsTmkpLFJvKE52ZSw1LGFzKSxSbyhWdmUsNSxhcyksUm8oQnZlLDUsYXMpLFJv''@;'; put 'put ''KGp2ZSw1LGFzKSxSbyh6dmUsNSxhcykpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuZGF0YWdyaWRUYWJsZT1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5zY3JvbGxhYmxlQ29sdW1ucz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnM9aC5maXJzdCks''@;'; put 'put ''c2koaD1haSgpKSYmKGQuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fZGlzcGxheWVkUm93cz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fY2FsY3VsYXRpb25Sb3dzPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsyJmEmJmhyKCJkYXRhZ3JpZC1ob3N0IiwhMCkoImRhdGFncmlkLWRldGFpbC1vcGVuIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKX0saW5wdXRzOntjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xl''@;'; put 'put ''QWN0aW9uYWJsZUFyaWFMYWJlbDoiY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsIixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsbG9hZGlu''@;'; put 'put ''ZzpbImNsckRnTG9hZGluZyIsImxvYWRpbmciXSxzZWxlY3RlZDpbImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLHNpbmdsZVNlbGVjdGVkOlsiY2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNlbGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xyRGdQcmVzZXJ2ZVNlbGVj''@;'; put 'put ''dGlvbiIscm93U2VsZWN0aW9uTW9kZTpbImNsckRnUm93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uTW9kZSJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixzaW5nbGVTZWxlY3Rl''@;'; put 'put ''ZENoYW5nZWQ6ImNsckRnU2luZ2xlU2VsZWN0ZWRDaGFuZ2UiLHJlZnJlc2g6ImNsckRnUmVmcmVzaCJ9LGZlYXR1cmVzOlt0aShbWTgsSUUsRmYsRXAsQXAsZWcsVjgsajgsTGIsaDIsX1EsbkgsSGYsY0gsYlFdKV0sbmdDb250ZW50U2VsZWN0b3JzOkt2ZSxkZWNsczozMix2YXJzOjcsY29u''@;'; put 'put ''c3RzOltbMSwiZGF0YWdyaWQtb3V0ZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZC1pbm5lci13cmFwcGVyIl0sWzEsImRhdGFncmlkIl0sWyJkYXRhZ3JpZCIsIiJdLFsxLCJkYXRhZ3JpZC10YWJsZS13cmFwcGVyIl0sWyJyb2xlIiwiZ3JpZCIsInRhYmluZGV4IiwiLTEiLDEsImRhdGFncmlk''@;'; put 'put ''LXRhYmxlIl0sWyJkYXRhZ3JpZFRhYmxlIiwiIl0sWyJyb2xlIiwicm93Z3JvdXAiLDEsImRhdGFncmlkLWhlYWRlciJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93Il0sWzEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCJdLFsxLCJkYXRhZ3JpZC1yb3ct''@;'; put 'put ''c3RpY2t5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUi''@;'; put 'put ''LCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSJdLFsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiLCIiXSxbImRp''@;'; put 'put ''c3BsYXllZFJvd3MiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIiwi''@;'; put 'put ''Il0sWyJjYWxjdWxhdGlvblJvd3MiLCIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidHlwZSIs''@;'; put 'put ''ImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMywiaWQiLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbInJvbGUi''@;'; put 'put ''LCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1''@;'; put 'put ''bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbMSwiZGF0YWdyaWQtc3Bpbm5lciJdLFsiY2xyTWVkaXVtIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MSZhJiYoVGkocXZlKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsImRpdiIsMSkoMywiZGl2IiwyLDMpKDUsImRpdiIsNCkoNiwiZGl2Iiw1LDYpKDgsImRpdiIsNykoOSwiZGl2Iiw4KSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCksUWUoMTIsVXZlLDcsNSwiZGl2IiwxMSksUWUoMTMsWnZlLDIs''@;'; put 'put ''MSwiZGl2IiwxMiksUWUoMTQsWXZlLDIsMSwiZGl2IiwxMyksUWUoMTUsV3ZlLDIsMSwiZGl2IiwxNCkseWUoKSxtZSgxNiwiZGl2IiwxNSksamEoMTcsbnVsbCwxNikseWUoKSgpKCkoKSxqYSgxOSxudWxsLDE3KSxrcigyMSwxKSxRZSgyMixHdmUsMSwwLCJjbHItZGctcGxhY2Vob2xkZXIi''@;'; put 'put ''LDE4KSx5ZSgpKCkoKSxrcigyMywyKSxRZSgyNCwkdmUsMywwLCJkaXYiLDE5KSx5ZSgpLGtyKDI1LDMpLHllKCksbWUoMjYsImRpdiIsMjApKDI3LCJkaXYiLDIxKSxqYSgyOCxudWxsLDIyKSx5ZSgpLGphKDMwLG51bGwsMjMpLHllKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWhpZGRlbiIs''@;'; put 'put ''ISFkLmRldGFpbFNlcnZpY2UuaXNPcGVufHxudWxsKSxDZSg5KSxSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLENlKDEpLFJlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5TaW5n''@;'; put 'put ''bGUpLENlKDEpLFJlKCJuZ0lmIixkLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGQuZXhwYW5kYWJsZVJvd3MuaGFzRXhwYW5kYWJsZVJvd3x8ZC5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLENlKDcpLFJlKCJuZ0lmIiwhZC5wbGFjZWhvbGRlciks''@;'; put 'put ''Q2UoMiksUmUoIm5nSWYiLGQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3JILHUyLFppLHVILFMwLEJzLE9zLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLmFsbFNlbGVjdGVkPW5l''@;'; put 'put ''dyBFcn1nZXQgY2xyQWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RB''@;'; put 'put ''bGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W0wwLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoSGYpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dn''@;'; put 'put ''bGUtYnV0dG9uIl1dLG91dHB1dHM6e2NsckFsbFNlbGVjdGVkOiJjbHJBbGxTZWxlY3RlZCJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJk''@;'; put 'put ''aXNhYmxlZCIsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3RBbGwoKX0pLGtyKDEpLHllKCkpLDImYSYmUmUoImRpc2FibGVkIixkLmFsbEhpZGVhYmxlc1Zpc2li''@;'; put 'put ''bGUpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx5UT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sbmdD''@;'; put 'put ''b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IHdRPWM9PmM7bGV0IGhIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5faXRlbXM9YX1z''@;'; put 'put ''ZXQgdHJhY2tCeShhKXthIT09d1EmJnRoaXMuX2l0ZW1zJiYodGhpcy5faXRlbXMuaXRlcmF0b3JUcmFja0J5PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBcCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs''@;'; put 'put ''Im5nRm9yVHJhY2tCeSIsIiJdXSxpbnB1dHM6e3RyYWNrQnk6WyJuZ0ZvclRyYWNrQnkiLCJ0cmFja0J5Il19fSksY30pKCksZkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3Zlcklk''@;'; put 'put ''PURjKCksdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj13USx0aGlzLnN1YnNjcmlwdGlvbj1oLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9PnRoaXMub3BlblN0''@;'; put 'put ''YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2Vydmlj''@;'; put 'put ''ZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9''@;'; put 'put ''PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0''@;'; put 'put ''ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGgse2hpZGRlbjpkLGNoYW5nZXM6W0wwLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0''@;'; put 'put ''aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChIZiksdHQoS3MpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVt''@;'; put 'put ''bi10b2dnbGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgseVEsNSksSW8oaCxkSCw1KSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5jdXN0b21Ub2dnbGVUaXRsZT1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5jdXN0b21Ub2dnbGVCdXR0b249Zi5m''@;'; put 'put ''aXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKEp2ZSw1LE5pKSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmFsbFNlbGVjdGVkRWxlbWVudD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiY29sdW1uLXN3''@;'; put 'put ''aXRjaC13cmFwcGVyIiwhMCkoImFjdGl2ZSIsZC5vcGVuU3RhdGUpfSxmZWF0dXJlczpbdGkoW0lmLFM4LEtzXSldLG5nQ29udGVudFNlbGVjdG9yczpvX2UsZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIs''@;'; put 'put ''IiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50Iiwi''@;'; put 'put ''Y2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNo''@;'; put 'put ''LWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNyLW9ubHkiXSxbImFsbFNlbGVjdGVkIiwiIl0sWzQsIm5nSWYiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9z''@;'; put 'put ''ZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3Rl''@;'; put 'put ''ciJdLFszLCJjbHJBbGxTZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImRpc2FibGVkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFszLCJjbHJBbGxTZWxlY3RlZCJdXSx0ZW1wbGF0ZTpm''@;'; put 'put ''dW5jdGlvbihhLGQpezEmYSYmKFRpKGlfZSksbWUoMCwiYnV0dG9uIiwwKSxOZSgxKSx5ZSgpLFFlKDIscl9lLDE2LDEwLCJkaXYiLDEpKSwyJmEmJihUcigiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpKCJhcmlhLW93bnMiLGQucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVu''@;'; put 'put ''U3RhdGUpLENlKDEpLG1yKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5waWNrQ29sdW1ucywiICIpLENlKDEpLFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVD''@;'; put 'put ''bGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W1QwLGRILHliLFNiLENiLE1wLFppLEZKLHFzLHhzLGhILFMwLEQwLEJzLE9zLFVzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxTUT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLHRoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRoaXMuZXhwYW5kYWJsZVJvd3NDb3Vu''@;'; put 'put ''dC51bnJlZ2lzdGVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGo4LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLE9FPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1hYX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1Nl''@;'; put 'put ''cnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCksdHQoaDIpLHR0KEhmKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZm9vdGVyIl1dLGNvbnRlbnRR''@;'; put 'put ''dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsZkgsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC50b2dnbGU9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImRhdGFncmlkLWZvb3RlciIsITApfSxuZ0NvbnRlbnRT''@;'; put 'put ''ZWxlY3RvcnM6aF9lLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCJdLFsxLCJkYXRhZ3JpZC1mb290ZXItc2VsZWN0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImNoZWNrZWQiLCJjaGVja2VkIiwi''@;'; put 'put ''ZGlzYWJsZWQiLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLWRlc2NyaXB0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoZF9lKSxRZSgwLGxfZSw4LDIsIm5nLWNvbnRhaW5lciIsMCksUWUoMSx1X2UsNSwxLCJuZy1jb250YWluZXIiLDAp''@;'; put 'put ''LGtyKDIpKSwyJmEmJihSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkmJmQuc2VsZWN0aW9uLmN1cnJlbnQubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W1Qw''@;'; put 'put ''LGZILFppLEQwLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBwSD1uZXcgTWkoIkNPTFVNTl9TVEFURSIpLHZ3ZT17cHJvdmlkZTpwSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIG13ZSgpe3JldHVybiBuZXcgVGUoe2NoYW5nZXM6W119KX19O2xldCBnSD0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEpe3RoaXMucGFnZT1hLHRoaXMucGFnZVNpemVPcHRpb25zSWQ9RGMoKX1uZ09uSW5pdCgpeyghdGhpcy5wYWdlU2l6ZU9wdGlvbnN8fDA9PT10aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGgpJiYodGhpcy5wYWdlU2l6ZU9wdGlvbnM9W3RoaXMucGFnZS5zaXplXSl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdlLXNpemUiXV0saW5wdXRzOntwYWdlU2l6ZU9wdGlvbnM6WyJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6''@;'; put 'put ''ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNpemVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJpZCIsIm5nTW9kZWwiLCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsInNlbGVjdCIsMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3Jl''@;'; put 'put ''dHVybiBkLnBhZ2Uuc2l6ZT1mfSksUWUoMyxmX2UsMiwyLCJvcHRpb24iLDIpLHllKCkoKSksMiZhJiYoQ2UoMiksaHIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCksUmUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSgibmdNb2RlbCIsZC5wYWdlLnNpemUpLENlKDEpLFJlKCJuZ0Zvck9m''@;'; put 'put ''IixkLnBhZ2VTaXplT3B0aW9ucykpfSxkZXBlbmRlbmNpZXM6W00wLEJzLE9zLHhzLGwxLGMxXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxQRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnBhZ2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmRldGFpbFNlcnZp''@;'; put 'put ''Y2U9aCx0aGlzLmN1cnJlbnRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5wYWdlLmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5zaXplPWEpfWdldCB0b3RhbEl0ZW1z''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMucGFnZS50b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPWEpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2UoYSl7Im51bWJlciI9PXR5cGVvZiBh''@;'; put 'put ''JiYodGhpcy5wYWdlLmxhc3Q9YSl9Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UuY3VycmVudD1hKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5maXJzdEl0''@;'; put 'put ''ZW19Z2V0IGxhc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KSx0aGlzLnBhZ2Uu''@;'; put 'put ''Y3VycmVudDx0aGlzLnBhZ2UubGFzdCYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KzEpLGF9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY3VycmVu''@;'; put 'put ''dENoYW5nZWQuZW1pdChhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBhZ2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnByZXZpb3VzKCl9bmV4dCgpe3RoaXMu''@;'; put 'put ''cGFnZS5uZXh0KCl9dXBkYXRlQ3VycmVudFBhZ2UoYSl7Y29uc3QgZD1wYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCk7aXNOYU4oZCl8fCh0aGlzLnBhZ2UuY3VycmVudD1kPDE/MTpkPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OmQpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5u''@;'; put 'put ''YXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFcCksdHQoRXMpLHR0KGgyKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdpbmF0aW9uIl1d''@;'; put 'put ''LGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsZ0gsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5fcGFnZVNpemVDb21wb25lbnQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHBfZSw1KSwyJmEpe2xldCBoO3NpKGg9''@;'; put 'put ''YWkoKSkmJihkLmN1cnJlbnRQYWdlSW5wdXRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoInBhZ2luYXRpb24iLCEwKX0saW5wdXRzOntkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dDpbImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJk''@;'; put 'put ''aXNhYmxlQ3VycmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOlsiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbImNsckRnVG90YWxJdGVtcyIsInRvdGFsSXRlbXMiXSxsYXN0UGFnZTpbImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOlsiY2xyRGdQ''@;'; put 'put ''YWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LG5nQ29udGVudFNlbGVjdG9yczpDX2UsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUiLDQsIm5nSWYiXSxbMSwicGFn''@;'; put 'put ''aW5hdGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWxpc3QiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsx''@;'; put 'put ''LCJjbHItc3Itb25seSJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsImRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJ0''@;'; put 'put ''eXBlIiwidGV4dCIsImNsYXNzIiwicGFnaW5hdGlvbi1jdXJyZW50IGNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsicmVhZE9ubHkiLCIiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIs''@;'; put 'put ''MywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsi''@;'; put 'put ''dHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRlbXBsYXRlOmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7MSZhJiYoVGkod19lKSxRZSgwLGJfZSw1LDIsIm5nLWNvbnRhaW5lciIsMCksUWUoMSx5X2UsMTQsMTAsIm5nLWNvbnRhaW5lciIsMCkpLDImYSYmKFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksQ2UoMSksUmUoIm5nSWYiLGQuZGV0YWlsU2VydmljZS5pc09w''@;'; put 'put ''ZW4pKX0sZGVwZW5kZW5jaWVzOltaaSxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgRzg9ImRhdGFncmlkLWZpeGVkLXdpZHRoIixGRT0iZGF0YWdyaWQtaGlkZGVuLWNvbHVtbiI7bGV0IHJnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlz''@;'; put 'put ''LnJlbmRlcmVyPWQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguZmlsdGVyUmVuZGVyU3RlcHMoZjIuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSl9c2V0IGNvbHVtblN0YXRlKGEpe3RoaXMuc3RhdGVTdWJzY3Jp''@;'; put 'put ''cHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJ1bkFsbENoYW5nZXM9dlEsdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1hLnN1YnNjcmliZShkPT50aGlzLnN0YXRlQ2hhbmdlcyhkKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFj''@;'; put 'put ''aChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuc3RhdGVTdWJzY3JpcHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdGF0ZUNoYW5nZXMoYSl7dGhpcy5ydW5BbGxDaGFuZ2VzJiYoYS5jaGFuZ2VzPXRoaXMucnVuQWxsQ2hhbmdlcyxkZWxldGUgdGhpcy5ydW5B''@;'; put 'put ''bGxDaGFuZ2VzKSxhLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSBMMC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2JyZWFrO2Nhc2UgTDAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLnJl''@;'; put 'put ''bmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LEc4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRl''@;'; put 'put ''cmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxGRSk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsRkUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoRm8pLHR0KGVnKSl9LGMu''@;'; put 'put ''XHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dfSksY30pKCksaWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMub3JnYW5pemVyPWgsdGhpcy5kb21BZGFwdGVyPWYsdGhp''@;'; put 'put ''cy5jb2x1bW5SZXNpemVyU2VydmljZT1fLHRoaXMuY29sdW1uc1NlcnZpY2U9VCx0aGlzLmNvbHVtblN0YXRlPVcsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBFcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25z''@;'; put 'put ''LnB1c2godGhpcy5vcmdhbml6ZXIuZmlsdGVyUmVuZGVyU3RlcHMoZjIuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goVy5zdWJzY3JpYmUoaWU9PnRoaXMuc3RhdGVDaGFuZ2VzKGllKSkpfW5nT25EZXN0cm95''@;'; put 'put ''KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1nZXRDb2x1bW5XaWR0aFN0YXRlKCl7Y29uc3QgYT10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29tcHV0ZVdpZHRoKGEpLHN0cmljdFdpZHRoOmF9fXNldENvbHVtblN0''@;'; put 'put ''YXRlKGEpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1thXT10aGlzLmNvbHVtblN0YXRlfXN0YXRlQ2hhbmdlcyhhKXthLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSBMMC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgTDAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLndpZHRoU2V0JiYhdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCks''@;'; put 'put ''dGhpcy5hdXRvU2V0JiZ0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCl9ZGV0ZWN0U3RyaWN0V2lkdGgoKXtyZXR1cm4gdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnk/dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS53aWR0aEFmdGVy''@;'; put 'put ''UmVzaXplOnRoaXMuYXV0b1NldD8wOnRoaXMuZG9tQWRhcHRlci51c2VyRGVmaW5lZFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl9Y29tcHV0ZVdpZHRoKGEpe2xldCBkPWE7cmV0dXJuIGR8fChkPXRoaXMuZG9tQWRhcHRlci5zY3JvbGxXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQp''@;'; put 'put ''KSxkfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiYodGhpcy5yZXNpemVFbWl0dGVyLmVtaXQoYS53aWR0aCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJw''@;'; put 'put ''eCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEc4KSx0aGlzLmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhpcy5hdXRvU2V0PSEwKX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsRkUpOnRoaXMucmVuZGVyZXIucmVt''@;'; put 'put ''b3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEZFKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSx0dChlZyksdHQoaDEpLHR0KHRIKSx0dChIZiksdHQocEgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siY2xyLWRnLWNvbHVtbiJdXSxvdXRwdXRzOntyZXNpemVFbWl0dGVyOiJjbHJEZ0NvbHVtblJlc2l6ZSJ9LGZlYXR1cmVzOlt0aShbdEgsdndlXSldfSksY30pKCksd3dlPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXty''@;'; put 'put ''ZXR1cm4gMH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGllbnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG9nPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0''@;'; put 'put ''aW9ucz1bXX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENvbHVtblN0YXRlKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Q29sdW1uU3RhdGUoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0Q29sdW1uU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmKGEu''@;'; put 'put ''Y29sdW1uU3RhdGU9dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW2RdKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChIZikpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il0sWyJjbHItZGctcm93''@;'; put 'put ''LWRldGFpbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLHJnLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpO2NvbnN0IEN3ZT1jPT5ScyhjKT9uZXcgaDE6bmV3IHd3ZTtsZXQgJDg9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLGdlLHdlKXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmVsPV8sdGhpcy5yZW5kZXJlcj1ULHRoaXMuZGV0YWlsU2VydmljZT1XLHRoaXMudGFibGVTaXplU2VydmljZT1pZSx0''@;'; put 'put ''aGlzLmNvbHVtbnNTZXJ2aWNlPWdlLHRoaXMubmdab25lPXdlLHRoaXMuX2hlaWdodFNldD0hMSx0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu''@;'; put 'put ''b3JnYW5pemVyLmZpbHRlclJlbmRlclN0ZXBzKGYyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNvbXB1dGVIZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucGFnZS5zaXplQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hl''@;'; put 'put ''aWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmliZShFZT0+dGhpcy50b2dnbGVEZXRhaWxQYW5lKEVlKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu''@;'; put 'put ''aXRlbXMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEwKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmhlYWRlcnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlz''@;'; put 'put ''LnNldHVwQ29sdW1ucygpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3RhYmlsaXplQ29sdW1ucygpfSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGFibGVTaXplU2VydmljZS50YWJsZT10aGlzLmVsfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuc2hvdWxkU3RhYmlsaXpl''@;'; put 'put ''Q29sdW1ucyYmdGhpcy5zdGFiaWxpemVDb2x1bW5zKCksdGhpcy5zaG91bGRDb21wdXRlSGVpZ2h0KCkmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuY29tcHV0ZURhdGFncmlkSGVpZ2h0KCl9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGVEZXRhaWxQYW5lKGEpe3RoaXMuaGVhZGVycyYmKGEmJiF0aGlzLmNvbHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZpY2UuY2FjaGUoKSx0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZCxo''@;'; put 'put ''KT0+e2g+MCYmdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChoLHtjaGFuZ2VzOltMMC5ISURERU5dLGhpZGRlbjphfSl9KSk6YXx8dGhpcy5jb2x1bW5zU2VydmljZS5yZXNldFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3RoaXMuaGVhZGVycy5mb3JFYWNoKChh''@;'; put 'put ''LGQpPT5hLnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMucm93cy5mb3JFYWNoKGE9PmEuc2V0Q29sdW1uU3RhdGUoKSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRT''@;'; put 'put ''ZXQmJnRoaXMucGFnZS5zaXplPjAmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFnZS5zaXplfWNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpe2NvbnN0IGE9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5k''@;'; put 'put ''ZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsYSsicHgiKSx0aGlzLl9oZWlnaHRTZXQ9ITB9cmVzZXREYXRhZ3JpZEhlaWdodCgpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLCIiKSx0aGlzLl9oZWlnaHRT''@;'; put 'put ''ZXQ9ITF9Y29tcHV0ZUhlYWRlcnNXaWR0aCgpe2NvbnN0IGE9dGhpcy5oZWFkZXJzLmxlbmd0aDtsZXQgZD0hMDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoaCxmKT0+e2NvbnN0IF89e2NoYW5nZXM6W0wwLldJRFRIXSwuLi5oLmdldENvbHVtbldpZHRoU3RhdGUoKX07Xy5zdHJpY3RXaWR0aHx8''@;'; put 'put ''KGQ9ITEpLGE9PT1mKzEmJmQmJihfLnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQoZixfKX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITEsIXRoaXMuY29sdW1uc1NpemVzU3RhYmxlJiZ0aGlzLml0''@;'; put 'put ''ZW1zLmRpc3BsYXllZC5sZW5ndGg+MCYmKHRoaXMub3JnYW5pemVyLnJlc2l6ZSgpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoZWcpLHR0KEFwKSx0dChFcCksdHQoaDEpLHR0KE5pKSx0dChG''@;'; put 'put ''byksdHQoaDIpLHR0KG5IKSx0dChIZiksdHQoTm8pKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihJbyhoLGlnLDQpLElvKGgsb2csNSkpLDImYSl7bGV0IGY7c2koZj1h''@;'; put 'put ''aSgpKSYmKGQuaGVhZGVycz1mKSxzaShmPWFpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTpoMSx1c2VGYWN0b3J5OkN3ZSxkZXBzOltHc119XSldfSksY30pKCksU3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhmbWUscG1lLHRiLGdt''@;'; put 'put ''ZSxJSyxtbWUsTEssdm1lLF9tZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxkUSwkbCxMRixzZCxhd2UsaFEsJEosa2IsTWIsQkYsYkUscTVd''@;'; put 'put ''XX0pLGN9KSgpLE1RPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stY29udGVudCJdXX0pLGN9KSgpLG1IPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXt0aGlzLl9nZW5lcmF0ZWRJZD1udWxsLHRoaXMuX2lkPW51bGx9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD0ic3RyaW5nIj09dHlwZW9mIGEmJiIiIT09YT9hOnRoaXMuX2dlbmVyYXRlZElkKyIifW5nT25Jbml0KCl7dGhpcy5fZ2VuZXJhdGVk''@;'; put 'put ''SWQ9ImNsci1zdGFjay1sYWJlbC0iK0RjKCksdGhpcy5pZHx8KHRoaXMuX2lkPXRoaXMuX2dlbmVyYXRlZElkKyIiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1s''@;'; put 'put ''YWJlbCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImlkIixkLmlkKX0saW5wdXRzOntpZDoiaWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5j''@;'; put 'put ''YXBzdWxhdGlvbjoyfSksY30pKCkseFE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZm9j''@;'; put 'put ''dXNlZD0hMSx0aGlzLnVuaXF1ZUlkPURjKCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhp''@;'; put 'put ''cy5fZnVsbHlJbml0aWFsaXplZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhw''@;'; put 'put ''YW5kZWR9Z2V0IG9uU3RhY2tMYWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5h''@;'; put 'put ''cmlhTGV2ZWw/dGhpcy5hcmlhTGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4''@;'; put 'put ''cGFuZGFibGU9ITB9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3Rh''@;'; put 'put ''Y2stY2hpbGRyZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYywxMiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRR''@;'; put 'put ''dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsbUgsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsImhlYWRpbmciKSgiYXJp''@;'; put 'put ''YS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLGhyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5kYWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZhbHVlKSgib24t''@;'; put 'put ''Zm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbImNsclNiRXhwYW5kZWQiLCJleHBhbmRlZCJdLGV4cGFuZGFibGU6WyJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOlsiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxh''@;'; put 'put ''cmlhU2V0c2l6ZTpbImNsclN0YWNrVmlld1NldHNpemUiLCJhcmlhU2V0c2l6ZSJdLGFyaWFQb3NpbnNldDpbImNsclN0YWNrVmlld1Bvc2luc2V0IiwiYXJpYVBvc2luc2V0Il0sc2V0Q2hhbmdlZFZhbHVlOlsiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0''@;'; put 'put ''czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6a19lLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJpZCIsImNsaWNrIiwia2V5dXAuZW50ZXIiLCJrZXl1cC5zcGFjZSIsImtleWRvd24uc3Bh''@;'; put 'put ''Y2UiLCJmb2N1cyIsImJsdXIiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2st''@;'; put 'put ''Y2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsxJmEmJihUaShFX2UpLG1lKDAsImRpdiIsMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLnNwYWNlIixmdW5jdGlvbigpe3JldHVybiBk''@;'; put 'put ''LnRvZ2dsZUV4cGFuZCgpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBmLnByZXZlbnREZWZhdWx0KCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMH0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITF9KSxRZSgxLFNfZSwx''@;'; put 'put ''LDEsImNkcy1pY29uIiwxKSxRZSgyLE1fZSwyLDEsInNwYW4iLDIpLG1lKDMsImRpdiIsMyksa3IoNCkseWUoKSxtZSg1LCJkaXYiLDQpLGtyKDYsMSkseWUoKSgpLG1lKDcsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNSksUWUoOCx4X2UsMiw0LCJkaXYiLDYpLHllKCkpLDImYSYmKFJl''@;'; put 'put ''KCJpZCIsZC51bmlxdWVJZCksVHIoInJvbGUiLGQucm9sZSkoInRhYmluZGV4IixkLnRhYkluZGV4KSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRhYmxlKSxDZSgx''@;'; put 'put ''KSxSZSgibmdJZiIsZC5nZXRDaGFuZ2VkVmFsdWUpLENlKDUpLFJlKCJjbHJFeHBhbmRUcmlnZ2VyIixkLmV4cGFuZGVkKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W19FLFppLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9''@;'; put 'put ''Il19KSxjfSkoKSxxOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zYXZlPW5ldyBFcighMSksdGhpcy5lZGl0YWJsZT0hMSx0aGlzLmVkaXRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLl9lZGl0TW9kZT0hMX1nZXQgZWRpdGluZygpe3JldHVybiB0aGlzLmVkaXRhYmxlJiZ0''@;'; put 'put ''aGlzLl9lZGl0TW9kZX1zZXQgZWRpdGluZyhhKXt0aGlzLmVkaXRhYmxlJiYodGhpcy5fZWRpdE1vZGU9YSx0aGlzLmVkaXRpbmdDaGFuZ2UuZW1pdChhKSxhfHx0aGlzLnNhdmUuZW1pdChudWxsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxvdXRwdXRzOntzYXZlOiJjbHJTdGFja1NhdmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6VF9lLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsxJmEmJihUaShBX2UpLGtyKDApLG1lKDEsImRpdiIsMCksa3IoMiwxKSx5ZSgpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksRXdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCl9fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxoUV1dfSksY30pKCksc2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlz''@;'; put 'put ''LmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBiZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qga1E9e3Byb3ZpZGU6c2csdXNl''@;'; put 'put ''RmFjdG9yeTpmdW5jdGlvbiBrd2UoYyl7cmV0dXJuIGN8fG5ldyBzZ30sZGVwczpbW25ldyB6MixuZXcgZzAsc2ddXX07bGV0IEFRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZXhwYW5kU2VydmljZT1kLGQmJih0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbj10aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShoPT57IWgmJnRoaXMucGFyZW50JiYhdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXImJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkpfXNo''@;'; put 'put ''b3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5t''@;'; put 'put ''b2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQoWXUsOCkpfSxjLlx1MDI3NWNtcD13cih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsImdyb3VwIil9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFy''@;'; put 'put ''czoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmUWUoMCxWX2UsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmUmUoIm5n''@;'; put 'put ''SWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W1ppLHhzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgZmM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRF''@;'; put 'put ''Uk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30oZmN8fHt9KTtjbGFzcyBUUXtjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZyQ9bmV3IFRlKCExKSx0aGlzLnNlbGVjdGVkPW5ldyBUZShmYy5VTlNFTEVDVEVEKSx0aGlzLl9sb2FkaW5nPSExfWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2xvYWRpbmd9c2V0IGxvYWRpbmcobCl7dGhpcy5fbG9hZGluZz1sLHRoaXMubG9hZGluZyQubmV4dChsKX1kZXN0cm95KCl7dGhpcy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxk''@;'; put 'put ''JiZsIT09ZmMuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9Pmguc2V0U2VsZWN0ZWQobCwhMSwhMCkpLGEmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfXRvZ2dsZVNlbGVjdGlvbihs''@;'; put 'put ''KXt0aGlzLnNldFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQudmFsdWU9PT1mYy5TRUxFQ1RFRD9mYy5VTlNFTEVDVEVEOmZjLlNFTEVDVEVELCEwLGwpfV91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKXtjb25zdCBsPXRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCk7''@;'; put 'put ''bCE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQobCksdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9Y29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCl7bGV0IGw9ITEsYT0hMTtmb3IoY29uc3Qg''@;'; put 'put ''ZCBvZiB0aGlzLmNoaWxkcmVuKXN3aXRjaChkLnNlbGVjdGVkLnZhbHVlKXtjYXNlIGZjLklOREVURVJNSU5BVEU6cmV0dXJuIGZjLklOREVURVJNSU5BVEU7Y2FzZSBmYy5TRUxFQ1RFRDppZihsPSEwLGEpcmV0dXJuIGZjLklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwp''@;'; put 'put ''cmV0dXJuIGZjLklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT9mYy5VTlNFTEVDVEVEOmZjLlNFTEVDVEVEOmZjLlVOU0VMRUNURUR9fWNsYXNzIEhFIGV4dGVuZHMgVFF7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLmdldENoaWxkcmVuPWQsdGhpcy5mZWF0dXJlc1NlcnZpY2U9''@;'; put 'put ''aCx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMSx0aGlzLl9jaGlsZHJlbj1bXSx0aGlzLm1vZGVsPWwsdGhpcy5wYXJlbnQ9YX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5mZXRjaENoaWxkcmVuKCksdGhpcy5fY2hpbGRyZW59c2V0IGNoaWxkcmVuKGwpe3RoaXMuX2NoaWxkcmVuPWx9ZGVz''@;'; put 'put ''dHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHN1cGVyLmRlc3Ryb3koKX1jbGVhckNoaWxkcmVuKCl7dGhpcy5fY2hpbGRyZW4uZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuLHRoaXMuY2hpbGRyZW5G''@;'; put 'put ''ZXRjaGVkPSExfWZldGNoQ2hpbGRyZW4oKXtpZih0aGlzLmNoaWxkcmVuRmV0Y2hlZClyZXR1cm47Y29uc3QgbD10aGlzLmdldENoaWxkcmVuKHRoaXMubW9kZWwpOyFmdW5jdGlvbiBBd2UoYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59KGwpP0ZPKGwpPyh0aGlzLmxv''@;'; put 'put ''YWRpbmc9ITAsdGhpcy5zdWJzY3JpcHRpb249bC5zdWJzY3JpYmUoYT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMud3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKTp0aGlzLl9jaGlsZHJlbj1sP3RoaXMud3JhcENoaWxkcmVuKGwpOltdOih0aGlzLmxvYWRpbmc9ITAsbC50aGVuKGE9''@;'; put 'put ''Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlzLmxvYWRpbmc9ITF9KSksdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITAsdGhpcy5mZWF0dXJlc1NlcnZpY2UmJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5uZXh0KCl9d3JhcENoaWxkcmVuKGwpe3Jl''@;'; put 'put ''dHVybiBsLm1hcChhPT5uZXcgSEUoYSx0aGlzLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKX19bGV0IERRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2RyPWh9bmdPbkNo''@;'; put 'put ''YW5nZXMoKXtsZXQgYTthPUFycmF5LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZD0+bmV3IEhFKGQsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSk6W25ldyBIRSh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1''@;'; put 'put ''cmVzU2VydmljZSldLHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQucGlwZShmOCgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygp''@;'; put 'put ''fSkpLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uJiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoemEpLHR0KHNnKSx0dChVYSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOlsi''@;'; put 'put ''Y2xyUmVjdXJzaXZlRm9yT2YiLCJub2RlcyJdLGdldENoaWxkcmVuOlsiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxmZWF0dXJlczpbdmFdfSksY30pKCksdkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgYmUs''@;'; put 'put ''dGhpcy5fZm9jdXNDaGFuZ2U9bmV3IGJlfWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5f''@;'; put 'put ''Zm9jdXNSZXF1ZXN0Lm5leHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKGEpe3RoaXMuZm9jdXNlZE5vZGVJZCE9PWEmJih0aGlzLmZvY3VzZWROb2RlSWQ9YSx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVu''@;'; put 'put ''dCl9Zm9jdXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVB''@;'; put 'put ''Ym92ZShhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUoYSkpfWZvY3VzTm9kZUJlbG93KGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyhhKSl9Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3Rh''@;'; put 'put ''cnRzV2l0aChhLGQpKX1maW5kU2libGluZ3MoYSl7cmV0dXJuIGEucGFyZW50P2EucGFyZW50LmNoaWxkcmVuOnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5Ob2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2Nv''@;'; put 'put ''bnN0IGQ9YS5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtkLmxlbmd0aC0xXSl9cmV0dXJuIGF9ZmluZE5leHRGb2N1c2FibGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4g''@;'; put 'put ''aDxkLmxlbmd0aC0xP2RbaCsxXTpoPT09ZC5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEucGFyZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2Rl''@;'; put 'put ''TW9kZWxzLmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9ZmluZE5vZGVBYm92ZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiAwPT09aD9hLnBhcmVu''@;'; put 'put ''dDpoPjA/dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtoLTFdKTpudWxsfWZpbmROb2RlQmVsb3coYSl7cmV0dXJuIGE/YS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5v''@;'; put 'put ''ZGVTdGFydHNXaXRoKGEsZCl7aWYoZC5leHBhbmRlZCYmZC5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgaCBvZiBkLmNoaWxkcmVuKXtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNX''@;'; put 'put ''aXRoKGEsZCl7Y29uc3QgaD10aGlzLmZpbmRTaWJsaW5ncyhkKTtmb3IobGV0IF89aC5pbmRleE9mKGQpKzE7XzxoLmxlbmd0aDtfKyspe2NvbnN0IFc9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoW19dKTtpZihXKXJldHVybiBXfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dp''@;'; put 'put ''dGgoYSxkKXtmb3IoY29uc3QgaCBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihkLnBhcmVudCYmZC5wYXJlbnQ9PT1oKWNvbnRpbnVlO2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGQp''@;'; put 'put ''e3JldHVybiBkP2QudGV4dENvbnRlbnQuc3RhcnRzV2l0aChhKT9kOnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChhLGQpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpe2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVT''@;'; put 'put ''dGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaDtjb25zdCBmPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChhLGQpO3JldHVybiBmfHwodGhpcy5maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEsZCl8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZC5wYXJlbnQpKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgVHdlIGV4dGVuZHMgVFF7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnBhcmVudD1sLGwmJmwuX2FkZENoaWxk''@;'; put 'put ''KHRoaXMpLHRoaXMuY2hpbGRyZW49W119ZGVzdHJveSgpe3RoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fcmVtb3ZlQ2hpbGQodGhpcyksc3VwZXIuZGVzdHJveSgpfV9hZGRDaGlsZChsKXt0aGlzLmNoaWxkcmVuLnB1c2gobCl9X3JlbW92ZUNoaWxkKGwpe2NvbnN0IGE9dGhpcy5jaGlsZHJl''@;'; put 'put ''bi5pbmRleE9mKGwpO2E+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGEsMSl9fWxldCBEcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWw9YX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFjdGl2ZSIpfWFj''@;'; put 'put ''dGl2YXRlKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2smJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImNsci10cmVlbm9kZS1saW5rIl1dfSksY30pKCksZzE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZvclR5cGVBaGVhZFByb3ZpZGVyPWgsdGhpcy5mZWF0dXJlc1NlcnZp''@;'; put 'put ''Y2U9Zix0aGlzLmV4cGFuZFNlcnZpY2U9Xyx0aGlzLmNvbW1vblN0cmluZ3M9VCx0aGlzLmZvY3VzTWFuYWdlcj1XLHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBFcix0aGlzLlNUQVRFUz1mYyx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRo''@;'; put 'put ''aXMubm9kZUlkPURjKCksdGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9dGhp''@;'; put 'put ''cy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uP2llLnZpZXc/aWUudmlldy5jb250ZXh0LmNsck1vZGVsOmllLl9sVmlld1s4XS5jbHJNb2RlbDpuZXcgVHdlKGQ/ZC5fbW9kZWw6bnVsbCksdGhpcy5fbW9kZWwubm9kZUlkPXRoaXMubm9kZUlkfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPWZjLlVOU0VMRUNURUQpLCJib29sZWFuIj09dHlwZW9mIGEmJihhPWE/ZmMuU0VMRUNURUQ6ZmMuVU5TRUxF''@;'; put 'put ''Q1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFu''@;'; put 'put ''ZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWZjLlNFTEVDVEVEOiEhdGhpcy50cmVlTm9k''@;'; put 'put ''ZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVMaW5rKCl7cmV0dXJuIHRoaXMudHJlZU5vZGVMaW5rTGlzdCYmdGhpcy50cmVlTm9kZUxpbmtMaXN0LmZpcnN0fWdldCBpc1BhcmVudCgpe3JldHVybiB0aGlzLl9tb2RlbC5jaGlsZHJlbiYmdGhpcy5fbW9kZWwuY2hpbGRyZW4ubGVu''@;'; put 'put ''Z3RoPjB9bmdPbkluaXQoKXt0aGlzLl9tb2RlbC5leHBhbmRlZD10aGlzLmV4cGFuZGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoSWEoKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGVkQ2hhbmdl''@;'; put 'put ''LmVtaXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu''@;'; put 'put ''Zm9jdXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0pKSx0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bnMucHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKGY4KDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb3JUeXBlQWhlYWRQcm92aWRlciYmKHRoaXMuX21vZGVsLnRleHRDb250ZW50PXRoaXMuZm9yVHlwZUFo''@;'; put 'put ''ZWFkUHJvdmlkZXIudGV4dENvbnRlbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5waXBlKGY4KDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVh''@;'; put 'put ''ZEtleUJ1ZmZlcj0iIn0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RlbC5kZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1pc0V4cGFuZGFibGUoKXtyZXR1cm4gdHlwZW9mIHRoaXMuZXhwYW5kYWJsZTwidSI/dGhpcy5leHBhbmRhYmxl''@;'; put 'put ''OiEhdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGFibGV8fHRoaXMuaXNQYXJlbnR9aXNTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV9Zm9jdXNUcmVlTm9kZSgpe2NvbnN0IGE9dGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7UnMo''@;'; put 'put ''dGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJih0aGlzLnNldFRhYkluZGV4KDApLGEuZm9jdXMoKSxhLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCl7dGhpcy5m''@;'; put 'put ''b2N1c01hbmFnZXIuYnJvYWRjYXN0Rm9jdXNlZE5vZGUodGhpcy5ub2RlSWQpfW9uS2V5RG93bihhKXtzd2l0Y2goVEYoYSksbDIoYS5rZXkpKXtjYXNlIHdvLkFycm93VXA6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2Ugd28uQXJyb3dE''@;'; put 'put ''b3duOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTticmVhaztjYXNlIHdvLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nhc2Ugd28uQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJlYWs7''@;'; put 'put ''Y2FzZSB3by5Ib21lOmEucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHdvLkVuZDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHdv''@;'; put 'put ''LkVudGVyOnRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Nhc2Ugd28uU3BhY2U6Y2FzZSB3by5TcGFjZWJhcjphLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2RlbC50''@;'; put 'put ''ZXh0Q29udGVudCYmZnVuY3Rpb24gcnllKGMpe2NvbnN0IGw9Yy5rZXk7cmV0dXJuIGwudG9Mb3dlckNhc2UoKSE9PWwudG9VcHBlckNhc2UoKXx8bD49IjAiJiZsPD0iOSJ9KGEpKXJldHVybiB0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcis9YS5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtleUV2''@;'; put 'put ''ZW50Lm5leHQodGhpcy50eXBlQWhlYWRLZXlCdWZmZXIpfXRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifXNldFRhYkluZGV4KGEpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PWEsdGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRl''@;'; put 'put ''eCIsYSl9Y2hlY2tUYWJJbmRleChhKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5kZXgoLTEpfXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmlzRXhwYW5kYWJs''@;'; put 'put ''ZSgpJiYhdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVsdEFjdGlvbigpfWV4cGFuZE9yRm9jdXNGaXJzdENoaWxkKCl7dGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFu''@;'; put 'put ''YWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5leHBhbmRlZD90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITE6dGhpcy5mb2N1''@;'; put 'put ''c01hbmFnZXIuZm9jdXNQYXJlbnQodGhpcy5fbW9kZWwpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhpcy50cmVlTm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJl''@;'; put 'put ''c1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChHcyksdHQoYywxMiksdHQoZnllLDEwKSx0dChzZyksdHQoWXUpLHR0KEVzKSx0dCh2SCksdHQoRWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLERwLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQudHJlZU5vZGVMaW5rTGlzdD1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oQl9lLDcsTmkpLDImYSl7''@;'; put 'put ''bGV0IGg7c2koaD1haSgpKSYmKGQuY29udGVudENvbnRhaW5lcj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiY2xyLXRyZWUtbm9kZSIsITApfSxpbnB1dHM6e2V4cGFuZGFibGU6WyJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJd''@;'; put 'put ''LHNlbGVjdGVkOlsiY2xyU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRXhwYW5kZWQiLCJleHBhbmRlZCJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZToiY2xyU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOlt0''@;'; put 'put ''aShba1EsWXUse3Byb3ZpZGU6bWIsdXNlRXhpc3Rpbmc6WXV9XSldLG5nQ29udGVudFNlbGVjdG9yczokX2UsZGVjbHM6MTIsdmFyczo5LGNvbnN0czpbWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlk''@;'; put 'put ''b3duIiwiZm9jdXMiXSxbImNvbnRlbnRDb250YWluZXIiLCIiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXRy''@;'; put 'put ''ZWVub2RlLXNwaW5uZXItY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIGNsci10cmVlbm9kZS1jaGVja2JveCIsNCwibmdJZiJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2Vkb3duIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0''@;'; put 'put ''LCJuZ0lmIl0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiXSxbInNoYXBlIiwiYW5nbGUiLDEs''@;'; put 'put ''ImNsci10cmVlbm9kZS1jYXJldC1pY29uIl0sWzEsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lciIsInNwaW5uZXIiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCJjbHItdHJlZW5vZGUtY2hlY2tib3giXSxbImFyaWEtaGlkZGVu''@;'; put 'put ''IiwidHJ1ZSIsInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDEsImNsci1jaGVja2JveCIsMywiaWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSIsImZvY3VzIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwzLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbNCwi''@;'; put 'put ''bmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKEdfZSksbWUoMCwiZGl2IiwwLDEpLHh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigp''@;'; put 'put ''fSksUWUoMixqX2UsMiwxLCJidXR0b24iLDIpLFFlKDMsel9lLDIsMCwiZGl2IiwzKSxRZSg0LFVfZSwzLDQsImRpdiIsNCksbWUoNSwiZGl2Iiw1KSx4dCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzVHJlZU5vZGUoKX0pLGtyKDYpLFFlKDcsV19lLDMsMiwiZGl2Iiw2''@;'; put 'put ''KSx5ZSgpKCksbWUoOCwiZGl2Iiw3KSxrcig5LDEpLGtyKDEwLDIpLHF0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSx5ZSgpKSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5pc0V4cGFuZGFibGUoKT9kLmV4cGFuZGVkOm51bGwpKCJhcmlhLXNlbGVjdGVkIixkLmFyaWFTZWxl''@;'; put 'put ''Y3RlZCksQ2UoMiksUmUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmlzTW9kZWxMb2FkaW5nJiYhZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQuZmVh''@;'; put 'put ''dHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLENlKDMpLFJlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfHxkLmFyaWFTZWxlY3RlZCksQ2UoMSksUmUoIkB0b2dnbGVDaGlsZHJlbkFuaW0iLGQuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQi''@;'; put 'put ''KSxUcigicm9sZSIsZC5pc0V4cGFuZGFibGUoKSYmIWQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj8iZ3JvdXAiOm51bGwpLENlKDMpLFJlKCJwYXJlbnQiLGQuX21vZGVsKSl9LGRlcGVuZGVuY2llczpbQVEsWmkscXNdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2ExKCJ0''@;'; put 'put ''b2dnbGVDaGlsZHJlbkFuaW0iLFtoYygiY29sbGFwc2VkID0+IGV4cGFuZGVkIixbX3Moe2hlaWdodDowfSkscnUoMjAwLF9zKHtoZWlnaHQ6IioifSkpXSksaGMoImV4cGFuZGVkID0+IGNvbGxhcHNlZCIsW19zKHtoZWlnaHQ6IioifSkscnUoMjAwLF9zKHtoZWlnaHQ6MH0pKV0pLHF4KCJl''@;'; put 'put ''eHBhbmRlZCIsX3Moe2hlaWdodDoiKiIsIm92ZXJmbG93LXkiOiJ2aXNpYmxlIn0pKSxxeCgiY29sbGFwc2VkIixfcyh7aGVpZ2h0OjB9KSldKV19fSksY30pKCksZGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQse25hdGl2ZUVsZW1lbnQ6aH0sZixfKXt0aGlzLmZlYXR1cmVzU2Vy''@;'; put 'put ''dmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMuc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBUPV8ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4yKGgsImZvY3VzaW4iKS5zdWJzY3JpYmUoVz0+e1cudGFyZ2V0PT09aCYmKHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5mb2N1c0Zp''@;'; put 'put ''cnN0VmlzaWJsZU5vZGUoKSxmLnJlbW92ZUF0dHJpYnV0ZShoLCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChUKX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5mZWF0dXJl''@;'; put 'put ''c1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjB9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Um9vdE5vZGVz''@;'; put 'put ''KCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4h''@;'; put 'put ''YS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQodkgpLHR0KE5pKSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rp''@;'; put 'put ''b24oYSxkLGgpe2lmKDEmYSYmSW8oaCxnMSw0KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsInRyZWUiKSgiYXJpYS1t''@;'; put 'put ''dWx0aXNlbGVjdGFibGUiLGQuaXNNdWx0aVNlbGVjdGFibGUpfSxpbnB1dHM6e2xhenk6WyJjbHJMYXp5IiwibGF6eSJdfSxmZWF0dXJlczpbdGkoW2tRLHZIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjaGlsZHJlbiIsNCwibmdJZiJdLFsz''@;'; put 'put ''LCJjaGlsZHJlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCksUWUoMSxxX2UsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W0FR''@;'; put 'put ''LFppXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxMd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKGg4KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1t''@;'; put 'put ''aSh7aW1wb3J0czpbW29vLHNhLExGXV19KSxjfSkoKSxSd2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbU3dlLEV3ZSxMd2VdfSks''@;'; put 'put ''Y30pKCk7ZnVuY3Rpb24gSVEoYyxsLGEpe3JldHVybiBLZS5jcmVhdGUoZD0+e2woZCk7Y29uc3QgaD1jLnN1YnNjcmliZShkKTtyZXR1cm4oKT0+e2gudW5zdWJzY3JpYmUoKSxhJiZhKGQpfX0pfWxldCBfSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yZW5k''@;'; put 'put ''ZXJlcj1hLHRoaXMucGFyZW50PWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5mb2N1c1NlcnZpY2U9Zix0aGlzLnBsYXRmb3JtSWQ9Xyx0aGlzLmlkPURjKCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXI9ITEsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXSx0aGlzLnJlc2V0Q2hpbGRyZW4oKSx0''@;'; put 'put ''aGlzLm1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCksdGhpcy5wYXJlbnR8fHRoaXMuaGFuZGxlUm9vdEZvY3VzKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5w''@;'; put 'put ''dXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dyaWdodCIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpOih0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3VwIixkPT50aGlz''@;'; put 'put ''LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dkb3duIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5mb2N1c1NlcnZpY2Uu''@;'; put 'put ''bGlzdGVuVG9BcnJvd0tleXMoYSkpfWdldCBjb250YWluZXIoKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfXNldCBjb250YWluZXIoYSl7dGhpcy5fY29udGFpbmVyPWEsdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24udGFiIixkPT50aGlz''@;'; put 'put ''LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZShkMS5MRUZUKSxkLnN0b3BQcm9wYWdhdGlv''@;'; put 'put ''bigpfSkpOih0aGlzLmZvY3VzU2VydmljZS5yZWdpc3RlckNvbnRhaW5lcihhKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxp''@;'; put 'put ''c3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuY2hpbGRyZW4ucGlwZShpZCgxKSkuc3Vic2NyaWJlKGY9PmYuZm9yRWFjaChfPT5fLmJsdXIoKSkpO2NvbnN0IGg9ZC5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O2gmJlJz''@;'; put 'put ''KHRoaXMucGxhdGZvcm1JZCkmJihhLmNvbnRhaW5zKGgpfHxoPT09dGhpcy50cmlnZ2VyKXx8KHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyPSExLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2goYT0+YSgpKSx0''@;'; put 'put ''aGlzLmZvY3VzU2VydmljZS5kZXRhY2hMaXN0ZW5lcnMoKX1tb3ZlVG9GaXJzdEl0ZW1XaGVuT3Blbigpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3JpZ2luYWxFdmVudCYmc2V0VGltZW91dCgoKT0+''@;'; put 'put ''e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmVUbyh0aGlzKSx0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHRoaXMucGFyZW50P2QxLlJJR0hUOmQxLkRPV04pfSl9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlUm9vdEZvY3VzKCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2R8fCh0aGlzLmZvY3VzU2VydmljZS5yZXNldCh0aGlzKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlciYmdGhpcy5mb2N1cygpKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcj1kfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNo''@;'; put 'put ''KCgpPT5hLnVuc3Vic2NyaWJlKCkpfWZvY3VzKCl7dGhpcy50cmlnZ2VyJiZScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKX1ibHVyKCl7dGhpcy50cmlnZ2VyJiZScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuYmx1cigpfWFjdGl2YXRlKCl7UnModGhp''@;'; put 'put ''cy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmNsaWNrKCl9cmVzZXRDaGlsZHJlbigpe3RoaXMuY2hpbGRyZW49bmV3ICR4KDEpLHRoaXMucGFyZW50P3RoaXMucmlnaHQ9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKE1lKGE9PmFbMF0pKToodGhpcy5kb3duPXRoaXMub3BlbkFu''@;'; put 'put ''ZEdldENoaWxkcmVuKCkucGlwZShNZShhPT5hWzBdKSksdGhpcy51cD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTWUoYT0+YVthLmxlbmd0aC0xXSkpKX1hZGRDaGlsZHJlbihhKXtJRi5saW5rVmVydGljYWwoYSksdGhpcy5wYXJlbnQmJklGLmxpbmtQYXJlbnQoYSx0aGlzLmNs''@;'; put 'put ''b3NlQW5kR2V0VGhpcygpLGQxLkxFRlQpLHRoaXMuY2hpbGRyZW4ubmV4dChhKX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gSVEodGhpcy5jaGlsZHJlbiwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiBJUShXaSh0aGlzKSwoKT0+''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihGbyksYXIoYywxMiksYXIoS3MpLGFyKHhiKSxhcihHcykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9''@;'; put 'put ''KSgpO2NvbnN0IE93ZT1RSihfSCk7bGV0IFBiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyBiZX1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVudXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBGd2U9e3Byb3ZpZGU6UGIsdXNlRmFjdG9yeTpmdW5jdGlvbiBQd2UoYyl7cmV0dXJuIGN8fG5ldyBQ''@;'; put 'put ''Yn0sZGVwczpbW25ldyB6MixuZXcgZzAsUGJdXX07bGV0IE5mPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5wYXJlbnQ9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmNkcj1oLHRoaXMuaXNNZW51Q2xvc2FibGU9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRo''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuY2hhbmdlcy5zdWJzY3JpYmUoXz0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49XykpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKSl9bmdPbkRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChjLDEyKSx0dChLcyksdHQoVWEpLHR0KFBiKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs''@;'; put 'put ''ci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLGQudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwiaXNNZW51Q2xv''@;'; put 'put ''c2FibGUiXX0sZmVhdHVyZXM6W3RpKFtGd2Use3Byb3ZpZGU6TDgsdXNlRXhpc3Rpbmc6Tml9LGpKLEtzLE93ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSks''@;'; put 'put ''Y30pKCk7Y29uc3QgSHdlPVt7cHJvdmlkZTpDRSx1c2VDbGFzczooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMucGxhdGZvcm1JZD1oLHRoaXMuaWQ9RGMoKSx0aGlzLmRpc2FibGVkPSExLGQuc2V0QXR0cmlidXRlKGEubmF0''@;'; put 'put ''aXZlRWxlbWVudCwiaWQiLHRoaXMuaWQpLGQuc2V0QXR0cmlidXRlKGEubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpfWZvY3VzKCl7UnModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCIw''@;'; put 'put ''IiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSkpfWJsdXIoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJl''@;'; put 'put ''ci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmJsdXIoKSl9YWN0aXZhdGUoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTmkpLGFyKEZvKSxhcihHcykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpfV07bGV0IEs4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZHJvcGRvd249YSx0''@;'; put 'put ''aGlzLl9kcm9wZG93blNlcnZpY2U9ZCx0aGlzLmZvY3VzYWJsZUl0ZW09aCx0aGlzLnNldEJ5RGVwcmVjYXRlZERpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNh''@;'; put 'put ''YmxlZD0hIWF8fCIiPT09YX1nZXQgZGlzYWJsZWREZXByZWNhdGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWREZXByZWNhdGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8fCIiPT09YSx0aGlzLnNldEJ5RGVwcmVjYXRlZERp''@;'; put 'put ''c2FibGVkPSEwfWdldCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD1hfW9uRHJvcGRvd25JdGVtQ2xpY2soKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5kcm9wZG93bi5pc01lbnVD''@;'; put 'put ''bG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1lbnVzKCl9KX1vblNwYWNlS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFn''@;'; put 'put ''YXRpb25JZkRpc2FibGVkKGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8YykodHQoTmYpLHR0KFBiKSx0dChDRSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93bkl0ZW0iLCIiXV0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5v''@;'; put 'put ''bkRyb3Bkb3duSXRlbUNsaWNrKCl9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TcGFjZUtleWRvd24oZil9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25FbnRlcktleWRvd24oZil9KSwyJmEmJihUcigicm9sZSIsIm1lbnVpdGVtIiko''@;'; put 'put ''ImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCYmZC5zZXRCeURlcHJlY2F0ZWREaXNhYmxlZD8iIjpudWxsKSgiaWQiLGQuZHJvcGRvd25JdGVtSWQpLGhyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCkoImRyb3Bkb3duLWl0ZW0iLCEwKSl9LGlucHV0czp7''@;'; put 'put ''ZGlzYWJsZWQ6WyJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sZGlzYWJsZWREZXByZWNhdGVkOlsiZGlzYWJsZWQiLCJkaXNhYmxlZERlcHJlY2F0ZWQiXSxkcm9wZG93bkl0ZW1JZDpbImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W3RpKFtId2VdKV19KSxjfSkoKTt2YXIgR3I9''@;'; put 'put ''ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9DRU5URVI9MF09IlJJR0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixjW2MuVE9QX1JJR0hUPTRd''@;'; put 'put ''PSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0iVE9QX0xFRlQiLGNbYy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGNbYy5MRUZUX0NFTlRFUj05XT0i''@;'; put 'put ''TEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09IkxFRlRfVE9QIixjW2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30oR3J8fHt9KTtjb25zdCBMUT0iYWJzb2x1dGUiO2NsYXNzIEJ3ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLmJvdW5kT25TY3JvbGxM''@;'; put 'put ''aXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzPVtdLGwuc3R5bGUucG9zaXRpb249TFEsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9y''@;'; put 'put ''KGwsYSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQYXJlbnQ6Xz0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksXyYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IFQ9bC5nZXRCb3VuZGluZ0NsaWVudFJl''@;'; put 'put ''Y3QoKSxXPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgaWU9VC5sZWZ0LVcubGVmdCtoLGdlPVQudG9wLVcudG9wK2Y7c3dpdGNoKGEpe2Nhc2UgR3IuTEVGVF9UT1A6Y2FzZSBHci5UT1BfTEVGVDpicmVhaztjYXNlIEdyLlRPUF9DRU5URVI6aWUrPVQud2lkdGgv''@;'; put 'put ''MjticmVhaztjYXNlIEdyLlRPUF9SSUdIVDpjYXNlIEdyLlJJR0hUX1RPUDppZSs9VC53aWR0aDticmVhaztjYXNlIEdyLkxFRlRfQk9UVE9NOmNhc2UgR3IuQk9UVE9NX0xFRlQ6Z2UrPVQuaGVpZ2h0O2JyZWFrO2Nhc2UgR3IuQk9UVE9NX0NFTlRFUjpnZSs9VC5oZWlnaHQsaWUrPVQud2lk''@;'; put 'put ''dGgvMjticmVhaztjYXNlIEdyLkJPVFRPTV9SSUdIVDpjYXNlIEdyLlJJR0hUX0JPVFRPTTpnZSs9VC5oZWlnaHQsaWUrPVQud2lkdGg7YnJlYWs7Y2FzZSBHci5MRUZUX0NFTlRFUjpnZSs9VC5oZWlnaHQvMjticmVhaztjYXNlIEdyLlJJR0hUX0NFTlRFUjpnZSs9VC5oZWlnaHQvMixpZSs9''@;'; put 'put ''VC53aWR0aH1zd2l0Y2goZCl7Y2FzZSBHci5MRUZUX1RPUDpjYXNlIEdyLlRPUF9MRUZUOmJyZWFrO2Nhc2UgR3IuVE9QX0NFTlRFUjppZS09Vy53aWR0aC8yO2JyZWFrO2Nhc2UgR3IuVE9QX1JJR0hUOmNhc2UgR3IuUklHSFRfVE9QOmllLT1XLndpZHRoO2JyZWFrO2Nhc2UgR3IuTEVGVF9C''@;'; put 'put ''T1RUT006Y2FzZSBHci5CT1RUT01fTEVGVDpnZS09Vy5oZWlnaHQ7YnJlYWs7Y2FzZSBHci5CT1RUT01fQ0VOVEVSOmdlLT1XLmhlaWdodCxpZS09Vy53aWR0aC8yO2JyZWFrO2Nhc2UgR3IuQk9UVE9NX1JJR0hUOmNhc2UgR3IuUklHSFRfQk9UVE9NOmdlLT1XLmhlaWdodCxpZS09Vy53aWR0''@;'; put 'put ''aDticmVhaztjYXNlIEdyLkxFRlRfQ0VOVEVSOmdlLT1XLmhlaWdodC8yO2JyZWFrO2Nhc2UgR3IuUklHSFRfQ0VOVEVSOmdlLT1XLmhlaWdodC8yLGllLT1XLndpZHRofWNvbnN0IHdlPWdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSxFZT1wYXJzZUludCh3ZS5tYXJnaW5MZWZ0LDEw''@;'; put 'put ''KSxaZT1wYXJzZUludCh3ZS5tYXJnaW5SaWdodCwxMCksb3Q9cGFyc2VJbnQod2UubWFyZ2luVG9wLDEwKSxldD1wYXJzZUludCh3ZS5tYXJnaW5Cb3R0b20sMTApO3N3aXRjaChhKXtjYXNlIEdyLkxFRlRfVE9QOmNhc2UgR3IuVE9QX0xFRlQ6Y2FzZSBHci5UT1BfUklHSFQ6Y2FzZSBHci5S''@;'; put 'put ''SUdIVF9UT1A6KGQ9PT1Hci5CT1RUT01fUklHSFR8fGQ9PT1Hci5SSUdIVF9CT1RUT00pJiYoZ2UtPWV0LGllLT1aZSksKGQ9PT1Hci5CT1RUT01fTEVGVHx8ZD09PUdyLkxFRlRfQk9UVE9NKSYmKGdlLT1vdCxpZSs9RWUpLChkPT09R3IuVE9QX0xFRlR8fGQ9PT1Hci5MRUZUX1RPUCkmJihn''@;'; put 'put ''ZSs9b3QsaWUrPUVlKSwoZD09PUdyLlRPUF9SSUdIVHx8ZD09PUdyLlJJR0hUX1RPUCkmJihnZSs9b3QsaWUtPVplKTticmVhaztjYXNlIEdyLkxFRlRfQk9UVE9NOmNhc2UgR3IuQk9UVE9NX0xFRlQ6Y2FzZSBHci5CT1RUT01fUklHSFQ6Y2FzZSBHci5SSUdIVF9CT1RUT006KGQ9PT1Hci5C''@;'; put 'put ''T1RUT01fTEVGVHx8ZD09PUdyLkxFRlRfQk9UVE9NKSYmKGdlLT1ldCxpZSs9RWUpLChkPT09R3IuQk9UVE9NX1JJR0hUfHxkPT09R3IuUklHSFRfQk9UVE9NKSYmKGdlLT1ldCxpZS09WmUpLChkPT09R3IuVE9QX0xFRlR8fGQ9PT1Hci5MRUZUX1RPUCkmJihnZSs9b3QsaWUrPUVlKSwoZD09''@;'; put 'put ''PUdyLlRPUF9SSUdIVHx8ZD09PUdyLlJJR0hUX1RPUCkmJihnZSs9b3QsaWUtPVplKTticmVhaztjYXNlIEdyLlRPUF9DRU5URVI6Z2UtPWV0LGllKz1FZSxpZS09WmU7YnJlYWs7Y2FzZSBHci5CT1RUT01fQ0VOVEVSOmdlKz1vdCxpZSs9RWUsaWUtPVplO2JyZWFrO2Nhc2UgR3IuTEVGVF9D''@;'; put 'put ''RU5URVI6Z2UrPW90LGdlLT1ldCxpZS09WmU7YnJlYWs7Y2FzZSBHci5SSUdIVF9DRU5URVI6Z2UrPW90LGdlLT1ldCxpZSs9RWV9cmV0dXJuIHRoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKGllKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91''@;'; put 'put ''bmQoZ2UpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9uZWQobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpLnBvc2l0''@;'; put 'put ''aW9uO3JldHVybiJyZWxhdGl2ZSI9PT1hfHxhPT09TFF8fCJmaXhlZCI9PT1hfWVtaXRTY3JvbGxFdmVudCgpe3RoaXMuX3Njcm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fc2Nyb2xsPW5ldyBiZTtjb25zdCBhPWw7bGV0IGQ9bDtmb3IoO2QmJmQhPT1kb2N1''@;'; put 'put ''bWVudCYmKHRoaXMuc2Nyb2xscyhkKSYmKGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChkKSksZD09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChkKSk7KWQ9ZC5wYXJlbnROb2RlfXJlbW92''@;'; put 'put ''ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMpbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3Jv''@;'; put 'put ''bGwmJih0aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhpcy5fc2Nyb2xsKX1zY3JvbGxzKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8''@;'; put 'put ''ImF1dG8iPT09YS5vdmVyZmxvd1l9fWxldCBiSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5wYXJlbnRIb3N0PWQsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSExLHRoaXMucG9wb3Zlck9wdGlvbnM9e30sdGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5kb2N1bWVudEVT''@;'; put 'put ''Q0xpc3RlbmVyPW51bGwsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2s9aD0+e3RoaXMuYW5jaG9yRWxlbS5jb250YWlucyhoLnRhcmdldCl8fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9LHRoaXMuZWw9YS5nZXQoTmkpLHRoaXMudG9nZ2xlU2VydmljZT1hLmdldChLcyks''@;'; put 'put ''dGhpcy5yZW5kZXJlcj1hLmdldChGbyksdGhpcy5uZ1pvbmU9YS5nZXQoTm8pLHRoaXMucmVmPWEuZ2V0KFVhKSx0aGlzLmFuY2hvckVsZW09ZC5uYXRpdmVFbGVtZW50LHRoaXMucG9wb3Zlckluc3RhbmNlPW5ldyBCd2UodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoaD0+e2g/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKToodGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy5h''@;'; put 'put ''bmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpfWdldCBpc09mZlNjcmVlbigpe3JldHVybiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNl''@;'; put 'put ''LmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRl''@;'; put 'put ''c3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1yZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zl''@;'; put 'put ''ckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVu''@;'; put 'put ''KCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmbDIoYS5rZXkpPT09d28uRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9j''@;'; put 'put ''dW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigpLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50''@;'; put 'put ''JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYm''@;'; put 'put ''ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRWEpLHR0KE5p''@;'; put 'put ''LDQpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImlzLW9mZi1zY3JlZW4iLGQuaXNPZmZTY3JlZW4pfX0pLGN9KSgpLGFnPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiSHtjb25zdHJ1Y3RvcihhLGQsaCxmKXtp''@;'; put 'put ''ZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoYSxkKSxoPyh0aGlzLmFuY2hvclBvaW50PUdyLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUCk6KHRo''@;'; put 'put ''aXMuYW5jaG9yUG9pbnQ9R3IuQk9UVE9NX0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRz''@;'; put 'put ''aWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hhbmRsZXI9Zn1zZXQgcG9zaXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUdyLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5h''@;'; put 'put ''bmNob3JQb2ludD1Hci5UT1BfTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Hci5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxl''@;'; put 'put ''ZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQb2ludD1Hci5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1Hci5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuTEVGVF9UT1A7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJyaWdodC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9R3IuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2Jy''@;'; put 'put ''ZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9R3IuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMu''@;'; put 'put ''aXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVz''@;'; put 'put ''ZXRDaGlsZHJlbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFYSksdHQoTDgsOCksdHQoYywxMiksdHQoX0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJp''@;'; put 'put ''ZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxDRSw0KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLml0ZW1zPWYpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsIm1lbnUiKSxocigiZHJvcGRvd24tbWVudSIsITApKX0saW5w''@;'; put 'put ''dXRzOntwb3NpdGlvbjpbImNsclBvc2l0aW9uIiwicG9zaXRpb24iXX0sZmVhdHVyZXM6W2VvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbGc9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSEwLGEucGFyZW50JiYodGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMSksZi50cmlnZ2VyPWgubmF0aXZlRWxlbWVudH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMudG9nZ2xlU2VydmljZS5vcGVufW9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soYSl7dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmYpLHR0KEtzKSx0dChOaSksdHQoX0gpKX0s''@;'; put 'put ''Yy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyIiLCJjbHJEcm9wZG93blRvZ2dsZSIsIiJdXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJu''@;'; put 'put ''IGQub25Ecm9wZG93blRyaWdnZXJDbGljayhmKX0pLDImYSYmKFRyKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpKCJhcmlhLWV4cGFuZGVkIixkLmFjdGl2ZSksaHIoImRyb3Bkb3duLXRvZ2dsZSIsZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImRyb3Bkb3duLWl0ZW0iLCFkLmlzUm9vdExldmVsVG9n''@;'; put 'put ''Z2xlKSgiZXhwYW5kYWJsZSIsIWQuaXNSb290TGV2ZWxUb2dnbGUpKCJhY3RpdmUiLGQuYWN0aXZlKSl9fSksY30pKCkseUg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1''@;'; put 'put ''MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxzZCxzYV19KSxjfSkoKTtjb25zdCBqd2U9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiXTtsZXQgd0g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmRlZmF1bHRJY29uU2hh''@;'; put 'put ''cGU9ImluZm8tY2lyY2xlIix0aGlzLl9hbGVydEljb25TaGFwZT0iIix0aGlzLl9hbGVydFR5cGU9ImluZm8ifWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5fYWxlcnRUeXBlfXNldCBhbGVydFR5cGUoYSl7andlLmluZGV4T2YoYSk+LTEmJih0aGlzLl9hbGVydFR5cGU9YSl9Z2V0IGFs''@;'; put 'put ''ZXJ0SWNvblNoYXBlKCl7cmV0dXJuIiI9PT10aGlzLl9hbGVydEljb25TaGFwZT90aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS5zaGFwZTp0aGlzLl9hbGVydEljb25TaGFwZX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7YT9hIT09dGhpcy5fYWxlcnRJY29uU2hhcGUmJih0''@;'; put 'put ''aGlzLl9hbGVydEljb25TaGFwZT1hKTp0aGlzLl9hbGVydEljb25TaGFwZT0iIn1nZXQgYWxlcnRJY29uVGl0bGUoKXtyZXR1cm4gdGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkudGl0bGV9aWNvbkluZm9Gcm9tVHlwZShhKXtjb25zdCBkPXtzaGFwZToiIixjc3NDbGFz''@;'; put 'put ''czoiIix0aXRsZToiIn07c3dpdGNoKGEpe2Nhc2Uid2FybmluZyI6ZC5zaGFwZT0iZXhjbGFtYXRpb24tdHJpYW5nbGUiLGQuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMud2FybmluZzticmVhaztjYXNlImRhbmdlciI6ZC5zaGFwZT0i''@;'; put 'put ''ZXhjbGFtYXRpb24tY2lyY2xlIixkLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyO2JyZWFrO2Nhc2Uic3VjY2VzcyI6ZC5zaGFwZT0iY2hlY2stY2lyY2xlIixkLmNzc0NsYXNzPSJhbGVydC1zdWNjZXNzIixkLnRpdGxlPXRo''@;'; put 'put ''aXMuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3M7YnJlYWs7ZGVmYXVsdDpkLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxkLmNzc0NsYXNzPSJhbGVydC1pbmZvIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0dXJuIGR9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEVzKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksTkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcgYmV9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBhY3RpdmVBbGVydHMoKXtyZXR1cm4gdGhpcy5h''@;'; put 'put ''bGxBbGVydHMmJnRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hYS5fY2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxlcnQoYSl7dGhpcy5jdXJyZW50PXRoaXMuYWN0''@;'; put 'put ''aXZlQWxlcnRzLmluZGV4T2YoYSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYWxsQWxlcnRzPWEs''@;'; put 'put ''dGhpcy5jdXJyZW50PSJudW1iZXIiPT10eXBlb2YgdGhpcy5fY3VycmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuY3VycmVudD49dGhp''@;'; put 'put ''cy5hbGxBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50KzEsdGhpcy5fY2hhbmdl''@;'; put 'put ''Lm5leHQodGhpcy5fY3VycmVudCl9cHJldmlvdXMoKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJl''@;'; put 'put ''bnQpKX1vcGVuKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKGEmJih0aGlzLl9j''@;'; put 'put ''dXJyZW50PU1hdGgubWF4KDAsdGhpcy5jdXJyZW50LTEpKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxGYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWNvblNlcnZpY2U9YSx0aGlzLmNkcj1kLHRoaXMubXVsdGlBbGVydFNlcnZpY2U9aCx0aGlz''@;'; put 'put ''LmNvbW1vblN0cmluZ3M9Zix0aGlzLmlzU21hbGw9ITEsdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsLHRoaXMuX2Nsb3NlZENoYW5n''@;'; put 'put ''ZWQ9bmV3IEVyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1hfXNldCBhbGVydEljb25TaGFw''@;'; put 'put ''ZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlPWF9c2V0IGNsb3NlZChhKXthJiYhdGhpcy5fY2xvc2VkP3RoaXMuY2xvc2UoKTohYSYmdGhpcy5fY2xvc2VkJiZ0aGlzLm9wZW4oKX1nZXQgYWxlcnRDbGFzcygpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmljb25JbmZvRnJv''@;'; put 'put ''bVR5cGUodGhpcy5pY29uU2VydmljZS5hbGVydFR5cGUpLmNzc0NsYXNzfWdldCBoaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVufXNldCBoaWRkZW4oYSl7YSE9PXRoaXMuX2hpZGRlbiYmKHRoaXMuX2hpZGRlbj1hLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSl9bmdPbkluaXQoKXt0aGlz''@;'; put 'put ''Lm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5oaWRkZW49dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQhPT10aGlzfSkpfW5nT25EZXN0cm95KCl7dGhp''@;'; put 'put ''cy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vcGVuKCl7dGhpcy5fY2xvc2VkPSExLHRoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMubXVsdGlBbGVydFNlcnZpY2Uub3BlbigpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMSl9Y2xvc2UoKXtpZighdGhp''@;'; put 'put ''cy5jbG9zYWJsZSlyZXR1cm47Y29uc3QgYT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlPy5jdXJyZW50QWxlcnQ9PT10aGlzO3RoaXMuX2Nsb3NlZD0hMCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1p''@;'; put 'put ''dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHdIKSx0dChVYSksdHQoTkUsOCksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7aXNTbWFsbDpbImNsckFsZXJ0U2l6''@;'; put 'put ''ZVNtYWxsIiwiaXNTbWFsbCJdLGNsb3NhYmxlOlsiY2xyQWxlcnRDbG9zYWJsZSIsImNsb3NhYmxlIl0saXNBcHBMZXZlbDpbImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw6ImNsckNsb3NlQnV0dG9uQXJpYUxhYmVsIixhbGVydFR5cGU6''@;'; put 'put ''WyJjbHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25TaGFwZTpbImNsckFsZXJ0SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOlsiY2xyQWxlcnRDbG9zZWQiLCJjbG9zZWQiXX0sb3V0cHV0czp7X2Nsb3NlZENoYW5nZWQ6ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIn0sZmVh''@;'; put 'put ''dHVyZXM6W3RpKFt3SF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwiYWxlcnQiLDMsIm5nQ2xhc3MiLCJhbGVydC1oaWRkZW4iLCJhbGVydC1zbSIsImFsZXJ0LWFwcC1sZXZlbCIsNCwibmdJZiJdLFsxLCJhbGVydCIsMywibmdDbGFz''@;'; put 'put ''cyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh''@;'; put 'put ''JiYoVGkoKSxRZSgwLFhfZSw0LDgsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLCFkLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W1ppLHVjLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxQUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp''@;'; put 'put ''e3RoaXMuaWNvblNlcnZpY2U9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQod0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0LWl0ZW0iXV0saG9zdEF0dHJzOlsxLCJhbGVydC1pdGVtIl0sbmdDb250''@;'; put 'put ''ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJjZHMtaWNvbiIsMSkseWUo''@;'; put 'put ''KSxrcigyKSksMiZhJiYoQ2UoMSksVHIoInNoYXBlIixkLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsZC5pY29uU2VydmljZS5hbGVydEljb25UaXRsZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIYj0oKCk9PntjbGFzcyBj''@;'; put 'put ''e31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJhbGVydC10ZXh0Il1dfSksY30pKCksRlE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubXVsdGlBbGVydFNl''@;'; put 'put ''cnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgRXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEVyfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0''@;'; put 'put ''IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2Vy''@;'; put 'put ''dmljZS5jdXJyZW50PWF9Z2V0IHByZXZpb3VzQWxlcnRBcmlhTGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbCx7Q1VS''@;'; put 'put ''UkVOVDooMT09PWE/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudDphLTEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9Z2V0IG5leHRBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3Jl''@;'; put 'put ''dHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnROZXh0QWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KGE9PT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PzE6YSsxKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZp''@;'; put 'put ''Y2UuY291bnQudG9TdHJpbmcoKX0pfW5nT25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM9dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5lbWl0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hh''@;'; put 'put ''bmdlLmVtaXQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5hY3RpdmVBbGVydHNbYV0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpfXBhZ2VVcCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpfXBhZ2VEb3duKCl7dGhpcy5t''@;'; put 'put ''dWx0aUFsZXJ0U2VydmljZS5wcmV2aW91cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChORSksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cy1wYWdlciJdXSxob3N0VmFyczoyLGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImFsZXJ0cy1wYWdlciIsITApfSxpbnB1dHM6e2N1cnJlbnRBbGVydDpbImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdLGN1cnJlbnRBbGVydEluZGV4OlsiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRl''@;'; put 'put ''eCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMSwiYWxlcnRzLXBhZ2VyLWNvbnRyb2wiXSxbMSwi''@;'; put 'put ''YWxlcnRzLXBhZ2UtZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYWxlcnRzLXBhZ2VyLWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWzEsImFsZXJ0cy1wYWdlci10ZXh0Il0sWzEsImFsZXJ0cy1wYWdlLXVwIl0sWyJzaGFwZSIsImFu''@;'; put 'put ''Z2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZURvd24oKX0pLHF0KDMsImNkcy1pY29uIiwzKSx5ZSgpKCks''@;'; put 'put ''bWUoNCwiZGl2Iiw0KSxOZSg1KSx5ZSgpLG1lKDYsImRpdiIsNSkoNywiYnV0dG9uIiwyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZVVwKCl9KSxxdCg4LCJjZHMtaWNvbiIsNikseWUoKSgpKCkpLDImYSYmKENlKDIpLFRyKCJhcmlhLWxhYmVsIixkLnByZXZpb3VzQWxl''@;'; put 'put ''cnRBcmlhTGFiZWwpLENlKDMpLGpjKCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFyaWFMYWJlbCkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0''@;'; put 'put ''aW9uOjJ9KSxjfSkoKSxIUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgRXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLnN1YnNjcmlwdGlvbnM9''@;'; put 'put ''W119c2V0IGFsbEFsZXJ0cyhhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm1hbmFnZShhKX1zZXQgX2lucHV0Q3VycmVudEluZGV4KGEpe051bWJlci5pc0ludGVnZXIoYSkmJmE+PTAmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3Vy''@;'; put 'put ''cmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgYWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hMT09PWEuaGlkZGVuKX1nZXQgY3VycmVudEFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2''@;'; put 'put ''aWNlLmN1cnJlbnRBbGVydD90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydC5hbGVydFR5cGU6IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJy''@;'; put 'put ''ZW50QWxlcnRJbmRleENoYW5nZS5uZXh0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLm5leHQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLm11''@;'; put 'put ''bHRpQWxlcnRTZXJ2aWNlLmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTkUpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7''@;'; put 'put ''aWYoMSZhJiZJbyhoLEZiLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuYWxsQWxlcnRzPWYpfX0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiYWxlcnRzIiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PWQuY3VycmVudEFsZXJ0VHlwZSko''@;'; put 'put ''ImFsZXJ0LWluZm8iLCJpbmZvIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nlc3MiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9PWQuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4Olsi''@;'; put 'put ''Y2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50SW5kZXgiXSxjdXJyZW50QWxlcnQ6WyJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hh''@;'; put 'put ''bmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbTkVdKV0sbmdDb250ZW50U2VsZWN0b3JzOmViZSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsNCwibmdJZiJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCJdXSx0''@;'; put 'put ''ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKFFfZSksUWUoMCxKX2UsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwwKSxrcigxKSksMiZhJiZSZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKX0sZGVwZW5kZW5jaWVzOltGUSxaaV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNP''@;'; put 'put ''TVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksTlE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKHMxLFJLLG8xLGJtZSx0Yil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSks''@;'; put 'put ''Yy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5SF1dfSksY30pKCksendlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W05R''@;'; put 'put ''XX0pLGN9KSgpLFhzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLk5BVl9MRVZFTF8xPTEsYy5OQVZfTEVWRUxfMj0yLGMuTkFWX0NMT1NFX0FMTD0iTkFWX0NMT1NFX0FMTCIsYy5OQVZfT1BFTj0iTkFWX09QRU4iLGMuTkFWX0NMT1NFPSJOQVZfQ0xPU0UiLGMuTkFWX1RPR0dMRT0iTkFWX1RP''@;'; put 'put ''R0dMRSIsYy5OQVZfQ0xBU1NfSEFNQlVSR0VSX01FTlU9Im9wZW4taGFtYnVyZ2VyLW1lbnUiLGMuTkFWX0NMQVNTX09WRVJGTE9XX01FTlU9Im9wZW4tb3ZlcmZsb3ctbWVudSIsYy5OQVZfQ0xBU1NfVFJJR0dFUl8xPSJoZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIiLGMuTkFWX0NMQVNTX1RS''@;'; put 'put ''SUdHRVJfMj0iaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIiLGMuTkFWX0NMQVNTX0xFVkVMXzE9ImNsci1uYXYtbGV2ZWwtMSIsYy5OQVZfQ0xBU1NfTEVWRUxfMj0iY2xyLW5hdi1sZXZlbC0yIixjfSkoKTtjbGFzcyBWUXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2NvbnRyb2xDb2RlPWwsdGhp''@;'; put 'put ''cy5fbmF2TGV2ZWw9YX1nZXQgY29udHJvbENvZGUoKXtyZXR1cm4gdGhpcy5fY29udHJvbENvZGV9Z2V0IG5hdkxldmVsKCl7cmV0dXJuIHRoaXMuX25hdkxldmVsfX1sZXQgVkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMucmVzcG9uc2l2ZU5hdkxpc3Q9W10sdGhpcy5yZWdp''@;'; put 'put ''c3Rlck5hdlN1YmplY3Q9bmV3ICR4LHRoaXMuY29udHJvbE5hdlN1YmplY3Q9bmV3IGJlLHRoaXMuY2xvc2VBbGxOYXZzKCl9Z2V0IHJlZ2lzdGVyZWROYXZzKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJOYXZTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfWdldCBuYXZDb250cm9sKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29udHJvbE5hdlN1YmplY3QuYXNPYnNlcnZhYmxlKCl9cmVnaXN0ZXJOYXYoYSl7IWF8fHRoaXMuaXNOYXZSZWdpc3RlcmVkKGEpfHwodGhpcy5yZXNwb25zaXZlTmF2TGlzdC5wdXNoKGEpLHRoaXMucmVnaXN0ZXJOYXZTdWJqZWN0Lm5leHQodGhpcy5yZXNwb25zaXZlTmF2TGlzdCkp''@;'; put 'put ''fWlzTmF2UmVnaXN0ZXJlZChhKXtyZXR1cm4gdGhpcy5yZXNwb25zaXZlTmF2TGlzdC5pbmRleE9mKGEpPi0xJiYoY29uc29sZS5lcnJvcigiTXVsdGlwbGUgY2xyLW5hdi1sZXZlbCAiK2ErIiBhdHRyaWJ1dGVzIGZvdW5kLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgb25seSBvbmUgZXhpc3Rz''@;'; put 'put ''IiksITApfXVucmVnaXN0ZXJOYXYoYSl7Y29uc3QgZD10aGlzLnJlc3BvbnNpdmVOYXZMaXN0LmluZGV4T2YoYSk7ZD4tMSYmKHRoaXMucmVzcG9uc2l2ZU5hdkxpc3Quc3BsaWNlKGQsMSksdGhpcy5yZWdpc3Rlck5hdlN1YmplY3QubmV4dCh0aGlzLnJlc3BvbnNpdmVOYXZMaXN0KSl9c2Vu''@;'; put 'put ''ZENvbnRyb2xNZXNzYWdlKGEsZCl7Y29uc3QgaD1uZXcgVlEoYSxkKTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoaCl9Y2xvc2VBbGxOYXZzKCl7Y29uc3QgYT1uZXcgVlEoWHMuTkFWX0NMT1NFX0FMTCwtOTk5KTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoYSl9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFV3ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2FdXX0pLGN9KSgpO2Z1bmN0aW9uIGpRKGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAi''@;'; put 'put ''KSxsLmNsYXNzTGlzdC5hZGQoIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxsfWNsYXNzIFh3ZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLnJlbmRlcmVyPWwsdGhpcy5hY3RpdmU9ITEsUnMoZCkmJih0aGlzLl9kb2N1bWVudD1hLmdldChMcykpLGguZm9jdXNUcmFwSWR8fChoLmZv''@;'; put 'put ''Y3VzVHJhcElkPWZ1bmN0aW9uIFBnZShjPSJfIil7cmV0dXJuYCR7Y30ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfWB9KCkpLHRoaXMuZm9jdXNUcmFwRWxlbWVudD1ofWVuYWJsZUZvY3VzVHJhcCgpe2NvbnN0IGw9dGhpcy5mb2N1c1RyYXBFbGVtZW50LGE9bC5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKCJbY2RzLWZpcnN0LWZvY3VzXSIpLGQ9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihkRS5nZXRDdXJyZW50KCk9PT1sKXRocm93IG5ldyBFcnJvcigiRm9jdXMgdHJhcCBpcyBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoaXMgaW5zdGFuY2UuIik7dGhpcy5maXJz''@;'; put 'put ''dEZvY3VzRWxlbWVudD1hfHx0aGlzLmZvY3VzVHJhcEVsZW1lbnQsZnVuY3Rpb24gcXdlKGMsbCl7aWYobCYmIWwudG9wUmVib3VuZEVsZW1lbnQmJiFsLmJvdHRvbVJlYm91bmRFbGVtZW50KXtsLnRvcFJlYm91bmRFbGVtZW50PWpRKGMpLGwuYm90dG9tUmVib3VuZEVsZW1lbnQ9alEoYyk7''@;'; put 'put ''Y29uc3QgYT1sLnBhcmVudEVsZW1lbnQsZD1sLm5leHRTaWJsaW5nO2EmJihhLmluc2VydEJlZm9yZShsLnRvcFJlYm91bmRFbGVtZW50LGwpLGQ/YS5pbnNlcnRCZWZvcmUobC5ib3R0b21SZWJvdW5kRWxlbWVudCxkKTphLmFwcGVuZENoaWxkKGwuYm90dG9tUmVib3VuZEVsZW1lbnQpKX19''@;'; put 'put ''KHRoaXMuX2RvY3VtZW50LGwpLGZ1bmN0aW9uIEY2ZShjKXtzd2l0Y2goYy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaW5wdXQiOnJldHVybiJoaWRkZW4iIT09Yy5nZXRBdHRyaWJ1dGUoInR5cGUiKSYmIWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpJiYhYy5oYXNBdHRyaWJ1dGUo''@;'; put 'put ''InJlYWRvbmx5Iik7Y2FzZSJidXR0b24iOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpyZXR1cm4hYy5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIik7Y2FzZSJpZnJhbWUiOmNhc2UiZW1iZWQiOmNhc2Uib2JqZWN0IjpyZXR1cm4hMDtjYXNlImEiOmNhc2UiYXJlYSI6cmV0dXJuIGMuaGFz''@;'; put 'put ''QXR0cmlidXRlKCJocmVmIik7Y2FzZSJhdWRpbyI6Y2FzZSJ2aWRlbyI6cmV0dXJuIGMuaGFzQXR0cmlidXRlKCJjb250cm9scyIpO2RlZmF1bHQ6cmV0dXJuIGMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHwidHJ1ZSI9PT1jLmdldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fCJi''@;'; put 'put ''dXR0b24iPT09Yy5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmIWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfX0obCl8fGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksZCYmZnVuY3Rpb24gVjZlKGMpe3JldHVybiEhYyYmYyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fShkKSYmKHRoaXMu''@;'; put 'put ''cHJldmlvdXNGb2N1cz1kKSxkRS5zZXRDdXJyZW50KGwpO2NvbnN0IGg9c2V0VGltZW91dCgoKT0+e3RoaXMuZmlyc3RGb2N1c0VsZW1lbnQuZm9jdXMoKSxjbGVhclRpbWVvdXQoaCl9LDEwKTt0aGlzLm9uRm9jdXNJbkV2ZW50PXRoaXMub25Gb2N1c0luLmJpbmQodGhpcyksdGhpcy51bmxp''@;'; put 'put ''c3Rlbj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLl9kb2N1bWVudCwiZm9jdXNpbiIsdGhpcy5vbkZvY3VzSW5FdmVudCksdGhpcy5hY3RpdmU9ITB9cmVtb3ZlRm9jdXNUcmFwKCl7dGhpcy51bmxpc3RlbiYmdGhpcy51bmxpc3RlbigpLGZ1bmN0aW9uIEt3ZShjKXtpZihjKXtjb25zdCBs''@;'; put 'put ''PWMucGFyZW50RWxlbWVudDtpZihsKXtjb25zdCBhPWMudG9wUmVib3VuZEVsZW1lbnQsZD1jLmJvdHRvbVJlYm91bmRFbGVtZW50O2EmJmwucmVtb3ZlQ2hpbGQoYSksZCYmbC5yZW1vdmVDaGlsZChkKX1kZWxldGUgYy50b3BSZWJvdW5kRWxlbWVudCxkZWxldGUgYy5ib3R0b21SZWJvdW5k''@;'; put 'put ''RWxlbWVudH19KHRoaXMuZm9jdXNUcmFwRWxlbWVudCksdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5mb2N1c1RyYXBFbGVtZW50LCJ0YWJpbmRleCIpLGRFLmFjdGl2YXRlUHJldmlvdXNDdXJyZW50KCksdGhpcy5hY3RpdmU9ITEsdGhpcy5wcmV2aW91c0ZvY3VzJiZ0aGlz''@;'; put 'put ''LnByZXZpb3VzRm9jdXMuZm9jdXMoKX1vbkZvY3VzSW4obCl7IWZ1bmN0aW9uIEd3ZShjLGwsYSl7Y29uc3QgZD1kRS5nZXRDdXJyZW50KCk9PT1sLGg9ZnVuY3Rpb24gJHdlKGMsbCl7cmV0dXJuIGM9PT1sLnRvcFJlYm91bmRFbGVtZW50fHxjPT09bC5ib3R0b21SZWJvdW5kRWxlbWVudHx8''@;'; put 'put ''IShsLmNvbnRhaW5zKGMpfHxudWxsIT09bCYmbC5jb250YWlucyhjKSl9KGMsbCk7ZCYmaD8oYT1hfHxsKS5mb2N1cygpOmMuZm9jdXMoKX0obC5jb21wb3NlZFBhdGgoKVswXSx0aGlzLmZvY3VzVHJhcEVsZW1lbnQsdGhpcy5maXJzdEZvY3VzRWxlbWVudCl9fWxldCB6UT0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMgWHdle2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoZixfLGEsaC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc3BvbnNpdmVOYXZTZXJ2aWNlPWQsdGhpcy5lbGVtZW50UmVmPWgsdGhpcy5faXNPcGVuPSExLFJzKGEpJiYodGhpcy5fZG9jdW1lbnQ9Xy5nZXQoTHMpKSx0''@;'; put 'put ''aGlzLl9zdWJzY3JpcHRpb249ZC5uYXZDb250cm9sLnBpcGUoSWEoVD0+VC5uYXZMZXZlbD09PXRoaXMubGV2ZWwpLElhKCh7Y29udHJvbENvZGU6VH0pPT5UPT09WHMuTkFWX09QRU4mJiF0aGlzLmlzT3Blbnx8VD09PVhzLk5BVl9DTE9TRSYmdGhpcy5pc09wZW4pKS5zdWJzY3JpYmUoKHtj''@;'; put 'put ''b250cm9sQ29kZTpUfSk9PntUIT09WHMuTkFWX09QRU4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSksdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChkLm5hdkNvbnRyb2wucGlwZShJYSgoe2NvbnRyb2xDb2RlOlR9KT0+VD09PVhzLk5BVl9DTE9TRV9BTEwpKS5zdWJzY3JpYmUoKCk9PnRoaXMu''@;'; put 'put ''Y2xvc2UoKSkpfWdldCBsZXZlbCgpe3JldHVybiB0aGlzLl9sZXZlbH1nZXQgcmVzcG9uc2l2ZU5hdkNvZGVzKCl7cmV0dXJuIFhzfWdldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVufW5nT25Jbml0KCl7dGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbHx8KHRoaXMuY2xvc2VCdXR0b25B''@;'; put 'put ''cmlhTGFiZWw9dGhpcy5fbGV2ZWw9PT1Ycy5OQVZfTEVWRUxfMT94Ri5yZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6eEYucmVzcG9uc2l2ZU5hdk92ZXJmbG93Q2xvc2UpLHRoaXMubGV2ZWw9PT1Ycy5OQVZfTEVWRUxfMXx8dGhpcy5sZXZlbD09PVhzLk5BVl9MRVZFTF8yPyh0aGlzLnJlc3Bv''@;'; put 'put ''bnNpdmVOYXZTZXJ2aWNlLnJlZ2lzdGVyTmF2KHRoaXMubGV2ZWwpLHRoaXMuYWRkTmF2Q2xhc3ModGhpcy5sZXZlbCkpOmNvbnNvbGUuZXJyb3IoIk5hdiBMZXZlbCBjYW4gb25seSBiZSAxIG9yIDIiKX1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCBhPSgoYyxsKT0+e2NvbnN0IGE9dGhpcy5f''@;'; put 'put ''ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2RzLWludGVybmFsLWNsb3NlLWJ1dHRvbiIpO3JldHVybiBhLnNldEF0dHJpYnV0ZSgiaWNvbi1zaXplIiwiMzIiKSxhLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsbCksYS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGEuc2V0''@;'; put 'put ''QXR0cmlidXRlKCJ0eXBlIiwiYnV0dG9uIiksYS5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsInRydWUiKSxhLmNsYXNzTmFtZT0iY2xyLW5hdi1jbG9zZSIsYX0pKDAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbCk7dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLHRoaXMuY2xvc2UuYmlu''@;'; put 'put ''ZCh0aGlzKSksdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYSx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5maXJzdENoaWxkKSx0aGlzLl9kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoPDk5MiYmdGhpcy5jbG9zZSgpfW5nT25E''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS51bnJlZ2lzdGVyTmF2KHRoaXMubGV2ZWwpLHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uUmVzaXplKGEpe2EudGFyZ2V0LmlubmVyV2lkdGg8OTkyJiZ0aGlzLmlzT3Blbj90aGlzLmNsb3NlKCk6dGhpcy5zaG93''@;'; put 'put ''TmF2aWdhdGlvbigpfW9uTW91c2VDbGljayhhKXtsZXQgZD1hO2NvbnN0IGg9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Zm9yKDtkOyl7aWYoZD09PWgpcmV0dXJuO2lmKGQuY2xhc3NMaXN0LmNvbnRhaW5zKCJuYXYtbGluayIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsaWVudFdp''@;'; put 'put ''ZHRoPDk5MilyZXR1cm4gdm9pZCB0aGlzLmNsb3NlKCk7ZD1kLnBhcmVudE5vZGV9fWFkZE5hdkNsYXNzKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2E9PT1Ycy5OQVZfTEVWRUxfMT9kLmFkZChYcy5OQVZfQ0xBU1NfTEVWRUxfMSk6YT09PVhz''@;'; put 'put ''Lk5BVl9MRVZFTF8yJiZkLmFkZChYcy5OQVZfQ0xBU1NfTEVWRUxfMil9b3Blbigpe3RoaXMuX2lzT3Blbj0hMCx0aGlzLnNob3dOYXZpZ2F0aW9uKCksdGhpcy5lbmFibGVGb2N1c1RyYXAoKSx0aGlzLnNob3dDbG9zZUJ1dHRvbigpLHRoaXMucmVzcG9uc2l2ZU5hdlNlcnZpY2Uuc2VuZENv''@;'; put 'put ''bnRyb2xNZXNzYWdlKFhzLk5BVl9PUEVOLHRoaXMubGV2ZWwpfWNsb3NlKCl7dGhpcy5faXNPcGVuPSExLHRoaXMuaGlkZU5hdmlnYXRpb24oKSx0aGlzLnJlbW92ZUZvY3VzVHJhcCgpLHRoaXMuaGlkZUNsb3NlQnV0dG9uKCksdGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS5zZW5kQ29udHJv''@;'; put 'put ''bE1lc3NhZ2UoWHMuTkFWX0NMT1NFLHRoaXMubGV2ZWwpfWhpZGVOYXZpZ2F0aW9uKCl7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxl''@;'; put 'put ''bWVudFJlZi5uYXRpdmVFbGVtZW50LCJoaWRkZW4iLCJ0cnVlIil9c2hvd05hdmlnYXRpb24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRl''@;'; put 'put ''KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJoaWRkZW4iKX1oaWRlQ2xvc2VCdXR0b24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmNsci1uYXYtY2xvc2UiKSwiaGlkZGVuIiwidHJ1ZSIpfXNob3dDbG9zZUJ1dHRvbigpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0''@;'; put 'put ''b3IoIi5jbHItbmF2LWNsb3NlIiksImFyaWEtaGlkZGVuIiwiZmFsc2UiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuY2xyLW5hdi1jbG9zZSIpLCJoaWRkZW4iKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoR3MpLHR0KFZFKSx0dChOaSksdHQoRm8pLHR0KEVhKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsci1uYXYtbGV2ZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgicmVz''@;'; put 'put ''aXplIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblJlc2l6ZShmKX0sMCxtNikoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk1vdXNlQ2xpY2soZi50YXJnZXQpfSl9LGlucHV0czp7X2xldmVsOlsiY2xyLW5hdi1sZXZlbCIsIl9sZXZlbCJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOlsi''@;'; put 'put ''Y2xvc2VBcmlhTGFiZWwiLCJjbG9zZUJ1dHRvbkFyaWFMYWJlbCJdfSxmZWF0dXJlczpbZW9dfSksY30pKCksUXdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp''@;'; put 'put ''bmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5SF1dfSksY30pKCksVVE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHphLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQudGVtcGxhdGU9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLFFlKDAscmJlLDEsMCwibmct''@;'; put 'put ''dGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGVDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9''@;'; put 'put ''KSgpLElwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJd''@;'; put 'put ''XSxmZWF0dXJlczpbZW9dfSksY30pKCksY2c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyVGFiTGluayBhbmQgY2xyLXRhYi1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRh''@;'; put 'put ''YnMiKTtzdXBlcihhLGQpLHRoaXMuaWZBY3RpdmU9Zix0aGlzLmlkPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmlmQWN0aXZlLmN1cnJlbnQ9PT10aGlzLmlkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSksdHQoSXAsOCksdHQoeDgp''@;'; put 'put ''LHR0KCQ1KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXSxbImNsci10YWItY29udGVudCJdXSxmZWF0dXJlczpbZW9dfSksY30pKCk7dmFyIHVnPWZ1bmN0aW9uKGMpe3JldHVybiBjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuVkVS''@;'; put 'put ''VElDQUw9InZlcnRpY2FsIixjfSh1Z3x8e30pO2xldCBOYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sYXlvdXQ9dWcuSE9SSVpPTlRBTCx0aGlzLl9jaGlsZHJlbj1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fY2hpbGRyZW59Z2V0IGFjdGl2ZVRhYigpe3JldHVy''@;'; put 'put ''biB0aGlzLmNoaWxkcmVuLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBvdmVyZmxvd1RhYnMoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT11Zy5WRVJUSUNBTD9bXTp0aGlzLmNoaWxkcmVuLmZpbHRlcihhPT4hMD09PWEudGFiTGluay5pbk92ZXJmbG93KX1yZWdpc3RlcihhKXt0aGlzLl9jaGlsZHJl''@;'; put 'put ''bi5wdXNoKGEpfXVucmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLmNoaWxkcmVuLmluZGV4T2YoYSk7ZD4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoZCwxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46Yyxm''@;'; put 'put ''YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdENlPTAsTHA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFiQ29udGVudElkfHwodGhpcy50YWJDb250ZW50SWQ9ImNsci10''@;'; put 'put ''YWItY29udGVudC0iK3RDZSsrKX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCBhcmlhTGFiZWxsZWRCeSgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJDb250ZW50PT09dGhpcyk/LnRh''@;'; put 'put ''Ykxpbms/LnRhYkxpbmtJZH1zZXQgdGVtcGxhdGVSZWYoYSl7dGhpcy52aWV3UmVmPXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3''@;'; put 'put ''Q29udGFpbmVyLmluZGV4T2YodGhpcy52aWV3UmVmKTthPi0xJiZ0aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLnJlbW92ZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChOYikpfSxjLlx1''@;'; put 'put ''MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLWNvbnRlbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhpYmUsNyksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LGlucHV0czp7dGFiQ29udGVudElkOlsi''@;'; put 'put ''aWQiLCJ0YWJDb250ZW50SWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmKFRpKCksUWUoMCxvYmUsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEVjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG5DZT0wO2NvbnN0IENIPW5ldyBNaSgiVEFCU19JRCIpLGlDZT17cHJvdmlkZTpDSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHJDZSgpe3JldHVybiJj''@;'; put 'put ''bHItdGFicy0iK25DZSsrfX07bGV0IG9DZT0wLFJwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy5lbD1oLHRoaXMuY2ZyPWYsdGhpcy52aWV3Q29udGFpbmVyUmVmPV8sdGhpcy50YWJzU2Vydmlj''@;'; put 'put ''ZT1ULHRoaXMudGFic0lkPVcsdGhpcy50YWJMaW5rSWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIrb0NlKyspO2NvbnN0IGllPXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFVRKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXRoaXMudmlld0NvbnRhaW5lclJl''@;'; put 'put ''Zi5jcmVhdGVDb21wb25lbnQoaWUsdm9pZCAwLHZvaWQgMCxbW3RoaXMuZWwubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5PdmVyZmxvdygpe3JldHVybiB0aGlzLl9pbk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PXVnLlZFUlRJQ0FMfXNldCBpbk92ZXJmbG93''@;'; put 'put ''KGEpe3RoaXMuX2luT3ZlcmZsb3c9YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRoaXMpPy50YWJDb250ZW50Py50YWJDb250''@;'; put 'put ''ZW50SWR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmU/MDotMX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZH19cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChOaSksdHQoSzApLHR0KGFzKSx0dChOYiksdHQoQ0gpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwidGFi''@;'; put 'put ''IiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFjdGl2YXRlKCl9KSwyJmEmJih0MSgiaWQiLGQudGFiTGlua0lkKSxUcigiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJv''@;'; put 'put ''bHMpKCJhcmlhLXNlbGVjdGVkIixkLmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxocigiYnRuIiwhMCkoImJ0bi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LGlucHV0czp7dGFiTGlua0lkOlsi''@;'; put 'put ''aWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93OlsiY2xyVGFiTGlua0luT3ZlcmZsb3ciLCJpbk92ZXJmbG93Il19fSksY30pKCksT3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLGgu''@;'; put 'put ''cmVnaXN0ZXIodGhpcyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1uZ09uRGVzdHJveSgpe3RoaXMudGFic1NlcnZpY2UudW5yZWdpc3Rlcih0aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8YykodHQoJDUpLHR0KHg4KSx0dChOYikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihJbyhoLFJwLDcpLElvKGgsTHAsNykpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQu''@;'; put 'put ''dGFiTGluaz1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC50YWJDb250ZW50PWYuZmlyc3QpfX0sZmVhdHVyZXM6W3RpKFtseWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pLGN9KSgpLFNIPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJkcm9wZG93bi1tZW51IiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkZz0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJzSWQ9Zix0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLnRhYkxpbmtFbGVtZW50cz1bXSx0aGlzLl9tb3VzZWRvd249ITEs''@;'; put 'put ''dGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5sYXlvdXR9c2V0IGxheW91dChhKXtPYmplY3Qua2V5cyh1ZykubWFwKGQ9PnVnW2RdKS5pbmRleE9mKGEpPj0wJiYodGhpcy50YWJzU2Vy''@;'; put 'put ''dmljZS5sYXlvdXQ9YSl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzfWdldCBhY3RpdmVUYWJJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmluZGV4T2YodGhpcy50YWJzU2VydmljZS5hY3RpdmVU''@;'; put 'put ''YWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maW5kSW5kZXgoYT0+YS5hY3RpdmUpfWdldCBpc0N1cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9jdXMuY3VycmVudD49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufWdl''@;'; put 'put ''dCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09dWcuVkVSVElDQUx9c2V0IHRhYk92ZXJmbG93RWwoYSl7dGhpcy5fdGFiT3ZlcmZsb3dFbD1hJiZhLm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmEmJnRoaXMua2V5Rm9jdXMuZm9jdXNDdXJyZW50KCl9''@;'; put 'put ''Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlsdGVyKGE9PiFhLmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQgdGFiQ29udGVudFZpZXdDb250YWluZXIoYSl7dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1hfW5nQWZ0''@;'; put 'put ''ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKSksdHlwZW9mIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBd''@;'; put 'put ''LmFjdGl2YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEpe3RoaXMudG9nZ2xlU2Vydmlj''@;'; put 'put ''ZS5vcGVuPWE+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKGEpeyF0aGlzLmtleUZvY3VzLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhpcy5hY3RpdmVUYWJQb3NpdGlv''@;'; put 'put ''biYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xpY2soKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMub3ZlcmZsb3dQb3NpdGlv''@;'; put 'put ''bi0xOnRoaXMub3ZlcmZsb3dQb3NpdGlvbiksdGhpcy5fbW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXshdGhpcy5fbW91c2Vkb3duJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfWNsb3NlT25G''@;'; put 'put ''b2N1c091dChhKXshdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmIXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1lbnRzW3RoaXMuYWN0aXZlVGFi''@;'; put 'put ''UG9zaXRpb25dPT09YS5yZWxhdGVkVGFyZ2V0JiYodGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pKX1jbG9zZU9uRXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3NlT25PdXRzaWRlQ2xpY2soYSxk''@;'; put 'put ''KXthLnRhcmdldD09PWR8fGQuY29udGFpbnMoYS50YXJnZXQpfHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnRhcmdldCkmJnRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWxpc3RlbkZvclRhYkxp''@;'; put 'put ''bmtDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUoY3AodGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXM9dGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspLHRoaXMudGFiTGlua0VsZW1lbnRzPXRo''@;'; put 'put ''aXMuX3RhYkxpbmtEaXJlY3RpdmVzLm1hcChhPT5hLmVsLm5hdGl2ZUVsZW1lbnQpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KCQ1KSx0dChLcyksdHQoTmIpLHR0KENIKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVj''@;'; put 'put ''dG9yczpbWyJjbHItdGFicyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLE9wLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKEk4LDcpLFJvKFNILDUsTmkpLFJvKHNi''@;'; put 'put ''ZSw3LGFzKSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJ0YWJzLXZlcnRpY2FsIixkLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbImNsckxheW91dCIsImxheW91dCJdfSxmZWF0dXJlczpbdGkoWyQ1LEtzLE5iLGlDZV0pXSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sicm9sZSIsInRhYmxpc3QiLCJj''@;'; put 'put ''bHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNscktleUZvY3VzIiwiY2xyRm9jdXNDaGFuZ2UiLCJmb2N1c291dCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdJZiJdLFsidGFiQ29udGVudFZpZXdDb250YWluZXIiLCIiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsIm5h''@;'; put 'put ''di1pdGVtIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsInRhYnMtb3ZlcmZsb3ciLCJib3R0b20tcmlnaHQiXSxbInJvbGUiLCJhcHBsaWNhdGlvbiIsMSwibmF2LWl0ZW0iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLDEs''@;'; put 'put ''ImJ0biIsImJ0bi1saW5rIiwibmF2LWxpbmsiLCJkcm9wZG93bi10b2dnbGUiLDMsIm1vdXNlZG93biIsImZvY3VzIiwiY2xpY2siXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsic2hhcGUiLCJlbGxpcHNpcy1ob3Jpem9udGFsIiwic3RhdHVzIiwidG9nZ2xlU2VydmljZS5vcGVuID8g''@;'; put 'put ''J2luZm8nIDogbnVsbCJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiLDQsIm5nSWYiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0Il0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLDQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm''@;'; put 'put ''JihtZSgwLCJ1bCIsMCkseHQoImNsckZvY3VzQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVPdmVyZmxvd09uUG9zaXRpb24oZil9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUoZil9KSxRZSgxLGxiZSwyLDEs''@;'; put 'put ''Im5nLWNvbnRhaW5lciIsMSksUWUoMixoYmUsNywxMCwibmctY29udGFpbmVyIiwyKSx5ZSgpLGphKDMsbnVsbCwzKSksMiZhJiYoUmUoImNscktleUZvY3VzIixkLnRhYkxpbmtFbGVtZW50cyksQ2UoMSksUmUoIm5nRm9yT2YiLGQudGFiTGlua0RpcmVjdGl2ZXMpLENlKDEpLFJlKCJuZ0lm''@;'; put 'put ''IixkLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W0k4LFNILHhzLFppLHJkLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxzQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKERLKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNkLHNhLGVDZSxCRl0sc2RdfSksY30pKCksTUg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmF2R3JvdXBDb3VudD0wfXJl''@;'; put 'put ''Z2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMu''@;'; put 'put ''XHUwMjc1ZmFjfSksY30pKCkseEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25zPTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEVIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQ9bmV3IGJlLHRoaXMu''@;'; put 'put ''X2NvbGxhcHNlZENoYW5nZWQ9bmV3IGJlLHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJsZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkQ2hhbmdlZCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2''@;'; put 'put ''aW9yKGEpfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoITEpLHRoaXMuX2NvbGxhcHNp''@;'; put 'put ''YmxlPWEpfXVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5leHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s''@;'; put 'put ''Yy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxaUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX25hdlNlcnZpY2U9YSx0aGlzLl9uYXZJY29uU2VydmljZT1kLHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2Vydmlj''@;'; put 'put ''ZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IEVyKCEwKSx0aGlzLl9zdWI9dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWRDaGFuZ2VkLnN1YnNjcmliZShfPT57dGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5lbWl0KF8pfSl9Z2V0IGNvbGxhcHNpYmxl''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGV9c2V0IGNvbGxhcHNpYmxlKGEpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGU9YX1nZXQgY29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7dGhpcy5fbmF2''@;'; put 'put ''U2VydmljZS5jb2xsYXBzZWQ9YX1nZXQgaGFzTmF2R3JvdXBzKCl7cmV0dXJuIHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2VydmljZS5uYXZHcm91cENvdW50PjB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX25hdkljb25TZXJ2aWNlLmhhc0ljb25zfWdldCBhcmlhRXhwYW5kZWQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jb2xsYXBzaWJsZT90aGlzLmNvbGxhcHNlZD8iZmFsc2UiOiJ0cnVlIjpudWxsfW5nT25EZXN0cm95KCl7dGhpcy5fc3ViLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQnlCdXR0b24oKXt0aGlzLmNvbGxhcHNlZD0hdGhpcy5jb2xsYXBzZWR9fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVIKSx0dCh4SCksdHQoTUgpLHR0KEVzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci12ZXJ0aWNhbC1uYXYiXV0saG9zdEF0dHJzOlsxLCJjbHItdmVydGljYWwtbmF2Il0saG9zdFZhcnM6Nixob3N0''@;'; put 'put ''QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJpcy1jb2xsYXBzZWQiLGQuY29sbGFwc2VkKSgiaGFzLW5hdi1ncm91cHMiLGQuaGFzTmF2R3JvdXBzKSgiaGFzLWljb25zIixkLmhhc0ljb25zKX0saW5wdXRzOntjb2xsYXBzaWJsZTpbImNsclZlcnRpY2FsTmF2Q29sbGFwc2libGUi''@;'; put 'put ''LCJjb2xsYXBzaWJsZSJdLGNvbGxhcHNlZDpbImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbRUgseEgsTUhdKV0sbmdDb250ZW50U2Vs''@;'; put 'put ''ZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtdHJpZ2dlciIsMywib24tY29sbGFwc2UiLCJjbGljayIsNCwibmdJZiJdLFsxLCJuYXYtY29udGVudCJdLFsiY2xhc3MiLCJuYXYtYnRuIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwi''@;'; put 'put ''dGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2VyLWljb24iXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDEs''@;'; put 'put ''Im5hdi1idG4iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxRZSgwLGZiZSwyLDYsImJ1dHRvbiIsMCksbWUoMSwiZGl2IiwxKSxrcigyKSxRZSgzLHBiZSwxLDEsImJ1dHRvbiIsMikseWUoKSksMiZhJiYoUmUoIm5nSWYiLGQuY29sbGFwc2libGUpLENl''@;'; put 'put ''KDMpLFJlKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W1ppLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxrSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBiZX1nZXQgZXhwYW5kQ2hhbmdlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1''@;'; put 'put ''MDI3NWZhY30pLGN9KSgpLFlRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IGJlLGgmJm4yKGEubmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKGFoKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFya0ZvckNo''@;'; put 'put ''ZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoVWEpLHR0KGtILDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmVydGlj''@;'; put 'put ''YWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxhdHRyczp2YmUsbmdDb250ZW50U2VsZWN0b3JzOmJiZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKF9iZSksa3IoMCksbWUoMSwic3Bh''@;'; put 'put ''biIsMCksa3IoMiwxKSx5ZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdUNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCxMSyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlw''@;'; put 'put ''ZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxzZCxxNV0sc2Qsc2EscTVdfSksY30pKCksZENlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp''@;'; put 'put ''bmo9bWkoe2ltcG9ydHM6W1V3ZSxRd2Usc0NlLHVDZV19KSxjfSkoKSxXUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvY3VtZW50PWF9c3RvcFNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgibm8tc2Nyb2xsaW5nIil9cmVzdW1lU2Ny''@;'; put 'put ''b2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoIm5vLXNjcm9sbGluZyIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoIm5vLXNjcm9sbGluZyIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShhcihMcykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG91PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5tb2RhbElkPURjKCksdGhp''@;'; put 'put ''cy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlZD1uZXcgRXIoITEpLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSx0aGlzLnN0YXRpY0JhY2tkcm9wPSEwLHRoaXMuc2tpcEFuaW1hdGlvbj0iZmFsc2UiLHRo''@;'; put 'put ''aXMuYnlwYXNzU2Nyb2xsU2VydmljZT0hMSx0aGlzLnN0b3BDbG9zZT0hMSx0aGlzLmFsdENsb3NlPW5ldyBFcighMSksdGhpcy5sYWJlbGxlZEJ5PXRoaXMubW9kYWxJZH1uZ09uQ2hhbmdlcyhhKXshdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlJiZhJiZPYmplY3QucHJvdG90eXBlLmhhc093''@;'; put 'put ''blByb3BlcnR5LmNhbGwoYSwiX29wZW4iKSYmKGEuX29wZW4uY3VycmVudFZhbHVlP3RoaXMuX3Njcm9sbGluZ1NlcnZpY2Uuc3RvcFNjcm9sbGluZygpOnRoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fc2Nyb2xsaW5nU2Vydmlj''@;'; put 'put ''ZS5yZXN1bWVTY3JvbGxpbmcoKX1vcGVuKCl7dGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITAsdGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMCkpfWNsb3NlKCl7dGhpcy5zdG9wQ2xvc2U/dGhpcy5hbHRDbG9zZS5lbWl0KCExKTohdGhpcy5jbG9zYWJsZXx8IXRoaXMuX29wZW58fCh0aGlzLl9v''@;'; put 'put ''cGVuPSExLHRoaXMuZm9jdXNUcmFwLnNldFByZXZpb3VzRm9jdXMoKSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiZ0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoV1EpLHR0KEVzKSl9''@;'; put 'put ''LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb2RhbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKE1wLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuZm9jdXNUcmFwPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJnh0KCJrZXl1cC5lc2NhcGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0sMCx4diksMiZhJiZocigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29wZW46WyJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxlOlsiY2xyTW9kYWxDbG9zYWJsZSIsImNs''@;'; put 'put ''b3NhYmxlIl0sY2xvc2VCdXR0b25BcmlhTGFiZWw6WyJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOlsiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0YXRpY0JhY2tkcm9wOlsiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsInN0YXRpY0Jh''@;'; put 'put ''Y2tkcm9wIl0sc2tpcEFuaW1hdGlvbjpbImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxieXBhc3NTY3JvbGxTZXJ2aWNlOlsiY2xyTW9kYWxPdmVycmlkZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2aWNlIl0sc3RvcENsb3NlOlsiY2xyTW9kYWxQcmV2''@;'; put 'put ''ZW50Q2xvc2UiLCJzdG9wQ2xvc2UiXSxsYWJlbGxlZEJ5OlsiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOlt0aShb''@;'; put 'put ''XSxbV1FdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOlNiZSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1siY2xyRm9jdXNUcmFwIiwiIiwiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFsiY2xyRm9jdXNUcmFwIiwiIiwxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtbW9kYWwiLCJ0''@;'; put 'put ''cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjbHJGb2N1c09uVmlld0luaXQiLCIiLDEsIm1vZGFsLXRpdGxlLXdyYXBw''@;'; put 'put ''ZXIiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xv''@;'; put 'put ''c2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKENiZSksUWUoMCx3YmUsMTcsMTQsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLGQuX29wZW4pfSxkZXBlbmRlbmNpZXM6W1ppLE1wLFBGLHFzXSxzdHlsZXM6WyJb''@;'; put 'put ''X25naG9zdC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ub3Blbltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmV9Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZmFkZURvd24iLFtoYygiKiA9PiBmYWxzZSIsW19zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSks''@;'; put 'put ''cnUoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGhjKCJmYWxzZSA9PiAqIixbcnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSldKSxhMSgiZmFkZSIsW2hjKCJ2b2lkID0+ICoiLFtfcyh7b3BhY2l0eTowfSkscnUoIjAu''@;'; put 'put ''MnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5Oi44NX0pKV0pLGhjKCIqID0+IHZvaWQiLFtydSgiMC4ycyBlYXNlLWluLW91dCIsX3Moe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLHN1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLmhv''@;'; put 'put ''c3Q9ZCx0aGlzLnRhYmluZGV4PSIwIix0aGlzLnVubGlzdGVuZXJzPVtdLGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhvc3Qu''@;'; put 'put ''bmF0aXZlRWxlbWVudCksdGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwoKT0+e3RoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpfSksdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsIm1vdXNlZG93biIsKCk9Pnt0aGlzLnJlbW92ZVRhYkluZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy51bmxpc3RlbmVycy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9''@;'; put 'put ''YWRkVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLHRoaXMudGFiaW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRh''@;'; put 'put ''YmluZGV4Iil9YWRkT3JSZW1vdmVUYWJJbmRleCgpe2NvbnN0IGE9dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDthJiZhLmNsaWVudEhlaWdodDxhLnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoTmkpLHR0KE5vKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXX0pLGN9KSgpLEdRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyh0''@;'; put 'put ''Yil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxiRSxxNV0sc2EscTVdfSksY30pKCk7Y29uc3QgaENlPXsidG9wLWxlZnQiOnthbmNob3JQb2lu''@;'; put 'put ''dDpHci5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5CT1RUT01fUklHSFQsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwidG9wLW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkdyLkJPVFRPTV9DRU5URVIsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwidG9w''@;'; put 'put ''LXJpZ2h0Ijp7YW5jaG9yUG9pbnQ6R3IuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuQk9UVE9NX0xFRlQsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwicmlnaHQtdG9wIjp7YW5jaG9yUG9pbnQ6R3IuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5MRUZUX0JPVFRPTSxvZmZzZXRZOjIs''@;'; put 'put ''b2Zmc2V0WDoxNH0sInJpZ2h0LW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuTEVGVF9DRU5URVIsb2Zmc2V0WTo2LG9mZnNldFg6MTR9LCJyaWdodC1ib3R0b20iOnthbmNob3JQb2ludDpHci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50Okdy''@;'; put 'put ''LkxFRlRfVE9QLG9mZnNldFk6LTEsb2Zmc2V0WDoxNH0sImJvdHRvbS1yaWdodCI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9MRUZULG9mZnNldFk6OSxvZmZzZXRYOi0xfSwiYm90dG9tLW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9D''@;'; put 'put ''RU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9DRU5URVIsb2Zmc2V0WTo5LG9mZnNldFg6MTJ9LCJib3R0b20tbGVmdCI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9SSUdIVCxvZmZzZXRZOjksb2Zmc2V0WDowfSwibGVmdC1ib3R0b20iOnthbmNo''@;'; put 'put ''b3JQb2ludDpHci5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuUklHSFRfVE9QLG9mZnNldFk6MCxvZmZzZXRYOi0xNH0sImxlZnQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6R3IuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkdyLlJJR0hUX0NFTlRFUixvZmZzZXRZOjQsb2Zmc2V0WDotMTR9''@;'; put 'put ''LCJsZWZ0LXRvcCI6e2FuY2hvclBvaW50OkdyLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5SSUdIVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6LTE0fSxkZWZhdWx0OnthbmNob3JQb2ludDpHci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkdyLkxFRlRfQ0VOVEVSLG9mZnNldFk6''@;'; put 'put ''NixvZmZzZXRYOjE0fX0sZkNlPVsidG9wLWxlZnQiLCJ0b3AtbWlkZGxlIiwidG9wLXJpZ2h0IiwicmlnaHQtdG9wIiwicmlnaHQtbWlkZGxlIiwicmlnaHQtYm90dG9tIiwiYm90dG9tLXJpZ2h0IiwiYm90dG9tLW1pZGRsZSIsImJvdHRvbS1sZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LW1p''@;'; put 'put ''ZGRsZSIsImxlZnQtdG9wIl07bGV0ICRRPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiSHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXtpZihzdXBlcihhLGQpLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9Zix0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPV8s''@;'; put 'put ''dGhpcy5wbGF0Zm9ybUlkPVQsdGhpcy5zaWducG9zdENvbnRlbnRJZD1EYygpLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9uPSJyaWdodC1taWRkbGUiLHRo''@;'; put 'put ''aXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLnNldElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRoaXMuZG9jdW1lbnQ9V31nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe3RoaXMucmVuZGVyZXIucmVt''@;'; put 'put ''b3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMuX3Bvc2l0aW9uPWEmJmZDZS5pbmRleE9mKGEpPi0xP2E6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3Qg''@;'; put 'put ''ZD1oQ2VbdGhpcy5wb3NpdGlvbl07dGhpcy5hbmNob3JQb2ludD1kLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50PWQucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1kLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPWQub2Zmc2V0WH1jbG9z''@;'; put 'put ''ZSgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSxScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3Vz''@;'; put 'put ''TWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRWEpLHR0KEw4LDgpLHR0KEVzKSx0dChvSCksdHQoaUgpLHR0KEdzKSx0dChMcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt''@;'; put 'put ''c2lnbnBvc3QtY29udGVudCJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKHQxKCJpZCIsZC5zaWducG9zdENvbnRlbnRJZCksaHIoInNpZ25wb3N0LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7cG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19''@;'; put 'put ''LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpZ25wb3N0LXdyYXAiXSxbMSwicG9wb3Zlci1wb2ludGVyIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJzaWducG9zdC1hY3Rp''@;'; put 'put ''b24iLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtYm9keSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJkaXYiLDEpLG1lKDIsImRpdiIsMikoMywiYnV0dG9uIiwz''@;'; put 'put ''KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0pLHF0KDQsImNkcy1pY29uIiw0KSx5ZSgpKCksbWUoNSwiZGl2Iiw1KSxrcig2KSx5ZSgpKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJp''@;'; put 'put ''YS1jb250cm9scyIsZC5zaWducG9zdENvbnRlbnRJZCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxwQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25z''@;'; put 'put ''KHRiLFJLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLHE1XSxzZF19KSxjfSkoKSxBSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp''@;'; put 'put ''cy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWN9KSxjfSkoKSxUSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dl''@;'; put 'put ''cigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQo''@;'; put 'put ''KX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko''@;'; put 'put ''YXIoS3MpKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxCYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''Y2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOlt0aShbS3Mse3Byb3ZpZGU6TDgsdXNlRXhpc3Rpbmc6Tml9LEFILFRIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6''@;'; put 'put ''MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBtQ2U9WyJib3R0b20tbGVmdCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0sdkNlPVsieHMiLCJzbSIsIm1k''@;'; put 'put ''IiwibGciXTtsZXQgamI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGJIe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKHN1cGVyKGEsZCksdGhpcy50b29sdGlwSWRTZXJ2aWNlPWgsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWYsIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItdG9vbHRpcC1jb250ZW50''@;'; put 'put ''IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAiKTt0aGlzLmlkPURjKCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXtjb25zdCBkPWF8fCIiO3RoaXMuX2lkPWQsdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGQpfWdldCBwb3NpdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7Y29uc3QgZD10aGlzLl9wb3NpdGlvbixoPW1DZS5pbmNsdWRlcyhhKT9hOiJyaWdodCI7c3dpdGNoKHRoaXMuX3Bvc2l0aW9uPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3''@;'; put 'put ''Q2xhc3M6YHRvb2x0aXAtJHtofWB9KSxoKXtjYXNlInRvcC1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Hci5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UidG9wLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuVE9QX0NFTlRFUix0aGlzLnBv''@;'; put 'put ''cG92ZXJQb2ludD1Hci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUDticmVhaztjYXNlImJvdHRvbS1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUdyLkJPVFRP''@;'; put 'put ''TV9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuUklHSFRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfVE9QO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5hbmNob3JQb2ludD1Hci5MRUZUX0NF''@;'; put 'put ''TlRFUix0aGlzLnBvcG92ZXJQb2ludD1Hci5SSUdIVF9UT1A7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gZ0NlKGMpe3Rocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIHZhbHVlOiAke2N9YCl9KGgpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5fc2l6ZSxoPXZDZS5pbmNsdWRlcyhhKT9hOiJzbSI7dGhpcy5fc2l6ZT1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1gLG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSl9bmdPbkluaXQoKXt0aGlzLnNpemU9dGhpcy5zaXplfHwic20iLHRoaXMucG9zaXRp''@;'; put 'put ''b249dGhpcy5wb3NpdGlvbnx8InJpZ2h0In1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCl9dXBkYXRlQ3NzQ2xhc3Mo''@;'; put 'put ''e29sZENsYXNzOmEsbmV3Q2xhc3M6ZH0pe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKSh0dChFYSksdHQoTDgsOCksdHQoQUgpLHR0KFRIKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwLWNvbnRlbnQiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJtb3VzZWVudGVyIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJih0MSgiaWQiLGQuaWQpLFRyKCJyb2xlIiwidG9vbHRpcCIpLEh1KCJvcGFjaXR5IiwxKSxocigidG9vbHRpcC1jb250ZW50IiwhMCkpfSxp''@;'; put 'put ''bnB1dHM6e2lkOiJpZCIscG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl0sc2l6ZTpbImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigw''@;'; put 'put ''KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHpiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcElkU2VydmljZT1kLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1oLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaCh0''@;'; put 'put ''aGlzLnRvb2x0aXBJZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGY9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWYpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2hvd1Rvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRp''@;'; put 'put ''cCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoS3MpLHR0KEFIKSx0dChUSCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhv''@;'; put 'put ''c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5oaWRlVG9vbHRpcCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVy''@;'; put 'put ''KCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKFRyKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24iKSxocigidG9vbHRpcC10cmlnZ2VyIiwhMCkpfX0pLGN9KSgpLF9DZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dLHNkLHNhXX0pLGN9KSgpLGJDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOlt5SCxwQ2UsX0NlXX0pLGN9KSgpLHlDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpLENDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoeW1lLHdtZSxPSyxDbWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2Esa2JdLHNhLGtiXX0pLGN9KSgpLGtDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoT0spfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sR1EsTlFdXX0pLGN9KSgpLF91PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3''@;'; put 'put ''NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3p3ZSxSd2Usc2EsR1EsTEYsc2QsYkUscTUscHllLGJ5ZSxkUSxkQ2UsYkNlLGtDZSwkSixueWUsa2IseUNlLE1iLENDZV19KSxjfSkoKTtmdW5jdGlvbiBBQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMCksTmUo''@;'; put 'put ''MSwibG9hZGluZyIpLHllKCkpfWZ1bmN0aW9uIFRDZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDExKSxOZSgxLCJsb2FkZWQiKSx5ZSgpKX1mdW5jdGlvbiBEQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMiksTmUoMSwiZmFpbGVkIikseWUoKSl9ZnVuY3Rpb24gSUNlKGMsbCl7aWYoMSZj''@;'; put 'put ''JiYobWUoMCwicCIpKDEsImNvZGUiKSxOZSgyKSx5ZSgpLE5lKDMsIiBceGEwICIpLFFlKDQsQUNlLDIsMCwic3BhbiIsNyksUWUoNSxUQ2UsMiwwLCJzcGFuIiw4KSxRZSg2LERDZSwyLDAsInNwYW4iLDkpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLnByb2dy''@;'; put 'put ''YW0pLENlKDIpLFJlKCJuZ0lmIixhLnJ1bm5pbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLENlKDEpLFJlKCJuZ0lmIiwhYS5ydW5uaW5nJiYhYS5zdWNjZXNzZnVsKX19ZnVuY3Rpb24gTENlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXNpZ25wb3N0LWNv''@;'; put 'put ''bnRlbnQiLDUpLFFlKDEsSUNlLDcsNCwicCIsNikseWUoKSksMiZjKXtjb25zdCBhPWplKCk7UmUoImNsclBvc2l0aW9uIiwiYm90dG9tLW1pZGRsZSIpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnJlcXVlc3RzKX19bGV0IFJDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2Fk''@;'; put 'put ''aW5nPSExLHRoaXMucmVxdWVzdHM9W10sdGhpcy5fbG9hZGluZ1N1Yj1uZXcgZWV9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt0aGlzLl9sb2FkaW5nU3ViLnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNt''@;'; put 'put ''cD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9hZGluZy1pbmRpY2F0b3IiXV0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbMSwibG9hZGluZy1pbmRpY2F0b3IiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJzcGlubmVyLWludmVyc2Ui''@;'; put 'put ''XSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiLDEsImlzLWluZm8iXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiZXJyb3IiLCJzaXplIiwiMjQiLDEsImlzLWVycm9yIl0sWzMsImNsclBvc2l0aW9uIiw0LCJjbHJJZk9wZW4i''@;'; put 'put ''XSxbMywiY2xyUG9zaXRpb24iXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInJ1bm5pbmciLDQsIm5nSWYiXSxbImNsYXNzIiwic3VjY2VzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmYWlsIiw0LCJuZ0lmIl0sWzEsInJ1bm5pbmciXSxbMSwic3VjY2VzcyJdLFsxLCJmYWlsIl1d''@;'; put 'put ''LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJjbHItc2lnbnBvc3QiKSxxdCgyLCJzcGFuIiwxKSgzLCJjbHItaWNvbiIsMikoNCwiY2xyLWljb24iLDMpLFFlKDUsTENlLDIsMiwiY2xyLXNpZ25wb3N0LWNvbnRlbnQiLDQpLHllKCkoKSksMiZhJiYoQ2Uo''@;'; put 'put ''MiksSHUoImRpc3BsYXkiLGQubG9hZGluZz8iaW5saW5lLWJsb2NrIjoibm9uZSIpLENlKDEpLEh1KCJkaXNwbGF5IiwhZC5sb2FkaW5nJiZkLnJlcXVlc3RzLmxlbmd0aD4wJiZkLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSxDZSgxKSxIdSgiZGlzcGxh''@;'; put 'put ''eSIsIWQubG9hZGluZyYmZC5yZXF1ZXN0cy5sZW5ndGg+MCYmIWQucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxrYSxjMixzSCwkUSxMRV0sc3R5bGVzOlsiLmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXtsaW5lLWhlaWdodDoyLjVyZW07aGVpZ2h0OjIuNXJlbTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICAuc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17dmVydGljYWwtYWxpZ246bWlkZGxlfS5sb2Fk''@;'; put 'put ''aW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweDtjb2xvcjojNTY1NjU2O2N1cnNvcjphdXRvfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2ln''@;'; put 'put ''bnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBv''@;'; put 'put ''c3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVde21hcmdpbi1sZWZ0OjEwcHh9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5ydW5uaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xv''@;'; put 'put ''cjojZTliZjA0fS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW4uc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYwYjUxNX0ubG9h''@;'; put 'put ''ZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmZhaWxbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjOTIxMDB9Il19KSxjfSkoKSxPQ2U9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuX3N1YnNjcmlwdGlvbj1uZXcgZWUsdGhpcy5sb2FkaW5nPSExLHRoaXMuYWxlcnRDbG9zZWQ9ITAsdGhpcy5kYXRhPXt1c2VyOm51bGwscGFzczpudWxsfX1uZ09uSW5p''@;'; put 'put ''dCgpeyJSZWRpcmVjdGVkIiE9PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiYodGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5zdWJzY3JpYmUoZD0+e3RoaXMuaXNBY3RpdmU9ZDtsZXQgaD1kb2N1bWVudC5xdWVy''@;'; put 'put ''eVNlbGVjdG9yKCJib2R5Iik7aCYmKGQ/aC5jbGFzc0xpc3QuYWRkKCJzaG91bGQtbG9naW4iKTpoLmNsYXNzTGlzdC5yZW1vdmUoInNob3VsZC1sb2dpbiIpKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXN1Ym1pdCgpe3RoaXMubG9hZGluZ3x8''@;'; put 'put ''KHRoaXMubG9hZGluZz0hMCx0aGlzLmRhdGEudXNlciYmdGhpcy5kYXRhLnBhc3MmJnRoaXMuc2FzU2VydmljZS5sb2dpbih0aGlzLmRhdGEudXNlcix0aGlzLmRhdGEucGFzcykudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLGF8fCh0aGlzLmVycm9yTXNnPSJVc2VybmFtZSBvciBwYXNzd29y''@;'; put 'put ''ZCBpbnZhbGlkIix0aGlzLmFsZXJ0Q2xvc2VkPSExKX0sYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYSksdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3JNc2c9YSx0aGlzLmFsZXJ0Q2xvc2VkPSExfSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KSh0dChvYSksdHQodzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvZ2luIl1dLGRlY2xzOjIwLHZhcnM6OSxjb25zdHM6W1sxLCJsb2dpbi1zaWRlYmFyLXdyYXBwZXIiXSxbMSwibG9naW4tc2lkZWJhciIsInNpZGVCYXJQcm9wcyJdLFsic3JjIiwiL1NB''@;'; put 'put ''U1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJhbHQiLCIiLDEsImxvZ2luLWxvZ28iXSxbMSwibG9naW4iLDMsIm5nU3VibWl0Il0sWzEsInRpdGxlIl0sWzEsIndlbGNvbWUiXSxbMSwiaGlu''@;'; put 'put ''dCJdLFsxLCJsb2dpbi1ncm91cCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwidXNlciIsInR5cGUiLCJ0ZXh0IiwicGxhY2Vob2xkZXIiLCJVc2VybmFtZSIsMSwidXNlcm5hbWUiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJwYXNzIiwidHlw''@;'; put 'put ''ZSIsInBhc3N3b3JkIiwicGxhY2Vob2xkZXIiLCJQYXNzd29yZCIsMSwicGFzc3dvcmQiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0Q2xvc2VkIiwiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiXSxbImNsci1hbGVydC1pdGVtIiwiIiwxLCJh''@;'; put 'put ''bGVydC1pdGVtIl0sWzEsImFsZXJ0LXRleHQiXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbMSwib3ZlcmxheSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwi''@;'; put 'put ''ZGl2IiwxKSxxdCgyLCJpbWciLDIpLG1lKDMsImZvcm0iLDMpLHh0KCJuZ1N1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zdWJtaXQoKX0pLG1lKDQsImxhYmVsIiw0KSg1LCJoMyIsNSksTmUoNiwiV2VsY29tZSB0byIpLHllKCksTmUoNywiIERhdGEgQ29udHJvbGxlciAiKSxtZSg4LCJo''@;'; put 'put ''NSIsNiksTmUoOSwiQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIpLHllKCkoKSxtZSgxMCwiZGl2Iiw3KSgxMSwiaW5wdXQiLDgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kYXRhLnVzZXI9Zn0pLHllKCksbWUoMTIsImlucHV0Iiw5KSx4dCgibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZGF0YS5wYXNzPWZ9KSx5ZSgpLG1lKDEzLCJjbHItYWxlcnQiLDEwKSx4dCgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmFsZXJ0Q2xvc2VkPWZ9KSxtZSgxNCwiZGl2IiwxMSkoMTUsInNwYW4iLDEyKSxO''@;'; put 'put ''ZSgxNikseWUoKSgpKCksbWUoMTcsImJ1dHRvbiIsMTMpLE5lKDE4LCIgTG9nIGluICIpLHllKCkoKSgpKCkscXQoMTksImRpdiIsMTQpLHllKCkpLDImYSYmKGhyKCJhY3RpdmUiLGQuaXNBY3RpdmUpLENlKDExKSxSZSgibmdNb2RlbCIsZC5kYXRhLnVzZXIpLENlKDEpLFJlKCJuZ01vZGVs''@;'; put 'put ''IixkLmRhdGEucGFzcyksQ2UoMSksUmUoImNsckFsZXJ0VHlwZSIsImFsZXJ0LWRhbmdlciIpKCJjbHJBbGVydENsb3NlZCIsZC5hbGVydENsb3NlZCksQ2UoMyksb3IoZC5lcnJvck1zZyksQ2UoMSksUmUoImNsckxvYWRpbmciLGQubG9hZGluZykoImRpc2FibGVkIixkLmxvYWRpbmcpKX0s''@;'; put 'put ''ZGVwZW5kZW5jaWVzOltDcCxXYSxCcyx3cCxPcyxyMixGYixIYixadSxkaCxVcyxmMV0sc3R5bGVzOlsiLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZTBlMGUwfS5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwfS5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXtib3JkZXItY29sb3I6d2hlYXQhaW1wb3J0YW50fS5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2UwZTBlMH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdo''@;'; put 'put ''dDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6MTAwMDB9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gPiAqW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphdXRvfS5sb2dpbi1zaWRl''@;'; put 'put ''YmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjQwMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkO3Bh''@;'; put 'put ''ZGRpbmc6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC00MDBweCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXXt6LWluZGV4OjEwMTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBm''@;'; put 'put ''b3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjMycHg7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjM2cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lk''@;'; put 'put ''ZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV0gICAud2VsY29tZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDozNnB4fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgZm9ybS5sb2dpbltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzo0OHB4IDAgMH0ubG9n''@;'; put 'put ''aW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSA+ICpbX25nY29udGVudC0lQ09NUCVde21h''@;'; put 'put ''cmdpbjo2cHggMCAxOHB4fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3otaW5kZXg6MTAxfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZl''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0''@;'; put 'put ''b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOnJnYmEoMzMsMzMsMzMsLjUpO3otaW5kZXg6MTAwfSAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciwgICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5s''@;'; put 'put ''b2dpbi1ncm91cCAudXNlcm5hbWUsICAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLnBhc3N3b3Jke3dpZHRoOjEwMCV9ICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9ICAubG9naW4tc2lk''@;'; put 'put ''ZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCBidXR0b257bWF4LXdpZHRoOm5vbmV9LmxvZ2luLWxvZ29bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoyMDBweH0iXX0pLGN9KSgpO2Z1bmN0aW9uIFBDZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxxdCgxLCJpbWciLDE5KSx5ZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9amUoKTtDZSgxKSx4Yygic3JjIixhLmdldFBpY3R1cmVVcmwoKSxudil9fWZ1bmN0aW9uIEZDZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDIwKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKTtocigiaGlkZGVuIiwwPT09YS5mYWlsZWRSZXFzLmxlbmd0''@;'; put 'put ''aCksQ2UoMSksb3IoYS5mYWlsZWRSZXFzLmxlbmd0aCl9fWZ1bmN0aW9uIEhDZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDIxKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKTtocigiaGlkZGVuIiwwPT09YS5kZWJ1Z0xvZ3MubGVuZ3RoKSxDZSgxKSxvcihhLmRlYnVnTG9ncy5s''@;'; put 'put ''ZW5ndGgpfX1mdW5jdGlvbiBOQ2UoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyMil9ZnVuY3Rpb24gVkNlKGMsbCl7MSZjJiYoenIoMCksbWUoMSwiYSIsMzMpKDIsInNwYW4iLDM0KSxOZSgzLCJEb2N1bWVudGF0aW9uIikseWUoKSgpLFlyKCkpfWZ1bmN0aW9uIEJDZShjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1kcm9wZG93bi1tZW51IiwyMykoMSwiZGl2IiwyNCwyNSkoMywiY2xyLXRvZ2dsZS1jb250YWluZXIiLDI2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9JGkoMik7cmV0dXJuIGp0KGplKCkub25EZWJ1Z1Jvd0NsaWNrKGgs''@;'; put 'put ''ZikpfSksbWUoNCwiY2xyLXRvZ2dsZS13cmFwcGVyIikoNSwiaW5wdXQiLDI3KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuc2FzanNDb25maWcuZGVidWc9aCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQo''@;'; put 'put ''amUoKS5vbkRlYnVnTW9kZUNoYW5nZSgpKX0pLHllKCksbWUoNiwibGFiZWwiKSxOZSg3LCJEZWJ1ZyBNb2RlIikseWUoKSgpKCkoKSxtZSg4LCJhIiwyOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksbWUoOSwic3Bh''@;'; put 'put ''biIpLE5lKDEwLCJTQVMgUmVxdWVzdHMiKSx5ZSgpKCksUWUoMTEsVkNlLDQsMCwibmctY29udGFpbmVyIiwyKSxxdCgxMiwiZGl2IiwxNSksbWUoMTMsImEiLDI5KSgxNCwic3BhbiIpLE5lKDE1LCJTeXN0ZW0iKSx5ZSgpKCksbWUoMTYsImEiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgp''@;'; put 'put ''e3JldHVybiBCdChhKSxqdChqZSgpLmxvZ291dChoKSl9KSxtZSgxNywic3BhbiIpLE5lKDE4LCJMb2cgT3V0IikseWUoKSxxdCgxOSwiY2xyLWljb24iLDMxKSx5ZSgpLG1lKDIwLCJkaXYiLDMyKSgyMSwic3BhbiIpLE5lKDIyKSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoKTtDZSg1''@;'; put 'put ''KSxSZSgibmdNb2RlbCIsYS5zYXNqc0NvbmZpZy5kZWJ1ZyksQ2UoNiksUmUoIm5nSWYiLCFhLmlzRGVwbG95UGFnZSksQ2UoMTEpLG1yKCJ2IixhLmNvbW1pdFZlciwiIil9fWNvbnN0IGpDZT1mdW5jdGlvbigpe3JldHVybntzdGFuZGFsb25lOiEwfX07bGV0IHpDZT0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudXNlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy51c2VyTmFtZT0iTm90IGxvZ2dlZCBpbiIsdGhpcy5yZXFTdWI9bmV3IGVlLHRoaXMudXNlclN1Yj1uZXcgZWUsdGhp''@;'; put 'put ''cy5hcHBMb2dzPVtdLHRoaXMuZGVidWdMb2dzPVtdLHRoaXMuZmFpbGVkUmVxcz1bXSx0aGlzLnNhc0Vycm9ycz1bXSx0aGlzLmlzVml5YT0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLnJlcXVlc3RzQ291bnQ9MCx0aGlzLmNvbW1pdFZlcj0iIn1uZ09uSW5p''@;'; put 'put ''dCgpe3RoaXMudXNlclN1Yj10aGlzLnVzZXJTZXJ2aWNlLnVzZXJDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnVzZXJOYW1lPWEudXNlcm5hbWV9KSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcu''@;'; put 'put ''c2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKSx0aGlzLmNvbW1pdFZlcj0idjYuNC4wIi5yZXBsYWNlKCJ2IiwiIikrIi5nNjI1YWYxOSJ9bmdPbkRlc3Ryb3koKXt0aGlzLnJlcVN1Yi51bnN1YnNjcmliZSgpLHRoaXMudXNlclN1Yi51bnN1YnNjcmliZSgpfW9wZW5SZXF1ZXN0c01vZGFs''@;'; put 'put ''KCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1vbkRlYnVnTW9kZUNoYW5nZShhKXt0aGlzLnNhc2pzQ29uZmlnJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0RGVidWdTdGF0ZSh0aGlzLnNhc2pzQ29uZmlnLmRlYnVnKX1vbkRlYnVnUm93Q2xpY2soYSxkKXthLnN0b3BQcm9w''@;'; put 'put ''YWdhdGlvbigpLHNldFRpbWVvdXQoKCk9PntkLmNsaWNrKCl9LDMwMCl9bG9nb3V0KGEpe2EucHJldmVudERlZmF1bHQoKTt0cnl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfWNhdGNoKGQpe2NvbnNvbGUuZXJyb3IoZCl9fWdldFBpY3R1cmVVcmwoKXtyZXR1cm5gJHt0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy8ke3RoaXMudXNlck5hbWV9L2F2YXRhci9jb250ZW50YH1nZXQgaXNEZXBsb3lQYWdlKCl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95Iil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpKHR0KGFQKSx0dChvYSksdHQodmwpLHR0KERzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11c2VyLW5hdi1kcm9wZG93biJdXSxkZWNsczozMix2YXJzOjEwLGNvbnN0czpbWzEsImFwcC1uYXYtZHJvcGRvd24iLCJkLW1kLWJsb2NrIl0sWyJj''@;'; put 'put ''bHJEcm9wZG93blRvZ2dsZSIsIiIsMSwibmF2LXRleHQiLCJjb2xvci13aGl0ZSJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImJhZGdlIGJhZGdlLWRhbmdlciIsMywiaGlkZGVuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJhZGdlIGJhZGdlLWluZm8iLDMsImhpZGRlbiIsNCwibmdJZiJdLFsic2hh''@;'; put 'put ''cGUiLCJjYXJldCBkb3duIiw0LCJuZ0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWzEsImNvbnRlbnQtY29udGFpbmVyIiwiaC1hdXRvIl0sWzEsInNpZGVuYXYiLCJkLWJsb2NrIiwiZC1tZC1ub25lIiwzLCJjbHItbmF2LWxldmVsIl0sWzEsInNp''@;'; put 'put ''ZGVuYXYtY29udGVudCJdLFsiaHJlZiIsIi4uLiIsMSwibmF2LWxpbmsiLCJhY3RpdmUiXSxbMSwidG9nZ2xlLXN3aXRjaCJdLFsiaWQiLCJkZWJ1Zy10b2dnbGUyIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiLCJuZ01vZGVsQ2hhbmdlIl0sWyJmb3Ii''@;'; put 'put ''LCJkZWJ1Zy10b2dnbGUyIiwxLCJkZWJ1Zy10b2dnbGUtbGFiZWwiLCJjb2xvci1kYXJrLWdyYXkiXSxbInRhcmdldCIsIl9ibGFuayIsImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8iLDEsIm5hdi1saW5rIiwiZC1ibG9jayJdLFsxLCJzZXBhcmF0b3IiXSxbInJvdXRl''@;'; put 'put ''ckxpbmsiLCIvc3lzdGVtIiwxLCJuYXYtbGluayIsImQtYmxvY2siXSxbInNoYXBlIiwibG9nb3V0Il0sWyJocmVmIiwiLi4uIiwxLCJuYXYtbGluayIsImQtYmxvY2siLDMsImNsaWNrIl0sWyJhbHQiLCIiLDEsImF2YXRhci1pbWciLDMsInNyYyJdLFsxLCJiYWRnZSIsImJhZGdlLWRhbmdl''@;'; put 'put ''ciJdLFsxLCJiYWRnZSIsImJhZGdlLWluZm8iXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZGVidWctc3dpdGNoLWl0ZW0iXSxbImRyb3Bkb3duSXRlbURlYnVnIiwiIl0sWzEsInRvZ2dsZS1z''@;'; put 'put ''d2l0Y2giLDMsImNsaWNrIl0sWyJpZCIsImRlYnVnLXRvZ2dsZTEiLCJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJocmVmIiwiLi4uIiwicm91dGVyTGluayIsIi9z''@;'; put 'put ''eXN0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiXSxbImhyZWYiLCIuLi4iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImxvZ291dCIsMSwiY2xyLWxvZ291dCJdLFsxLCJjb3B5UmlnaHQiXSxbInRhcmdldCIsIl9ibGFuayIsImhyZWYiLCJodHRwczovL2RvY3Mu''@;'; put 'put ''ZGF0YWNvbnRyb2xsZXIuaW8iLCJjbHJEcm9wZG93bkl0ZW0iLCIiXSxbMSwiZHJvcGRvd24tdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNsci1kcm9wZG93biIsMCkoMSwiYnV0dG9uIiwxKSgyLCJzcGFuIiksTmUoMykseWUoKSxRZSg0LFBDZSwyLDEsInNw''@;'; put 'put ''YW4iLDIpLFFlKDUsRkNlLDIsMywic3BhbiIsMyksUWUoNixIQ2UsMiwzLCJzcGFuIiw0KSxRZSg3LE5DZSwxLDAsImNsci1pY29uIiw1KSx5ZSgpLFFlKDgsQkNlLDIzLDMsImNsci1kcm9wZG93bi1tZW51Iiw2KSx5ZSgpLG1lKDksImRpdiIsNykoMTAsIm5hdiIsOCkoMTEsInNlY3Rpb24i''@;'; put 'put ''LDkpKDEyLCJhIiwxMCksTmUoMTMpLHllKCksbWUoMTQsImRpdiIpKDE1LCJmb3JtIikoMTYsImRpdiIsMTEpKDE3LCJpbnB1dCIsMTIpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zYXNqc0NvbmZpZy5kZWJ1Zz1mfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGQub25EZWJ1Z01vZGVDaGFuZ2UoKX0pLHllKCksbWUoMTgsImxhYmVsIiwxMyksTmUoMTksIkRlYnVnIE1vZGUiKSx5ZSgpKCkoKSgpLG1lKDIwLCJhIiwxNCkoMjEsInNwYW4iKSxOZSgyMiwiRG9jdW1lbnRhdGlvbiIpLHllKCkoKSxxdCgyMywiZGl2IiwxNSksbWUoMjQs''@;'; put 'put ''ImEiLDE2KSgyNSwic3BhbiIpLE5lKDI2LCJTeXN0ZW0iKSx5ZSgpLHF0KDI3LCJjbHItaWNvbiIsMTcpLHllKCksbWUoMjgsImEiLDE4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmxvZ291dChmKX0pLG1lKDI5LCJzcGFuIiksTmUoMzAsIkxvZyBPdXQiKSx5ZSgpLHF0KDMx''@;'; put 'put ''LCJjbHItaWNvbiIsMTcpLHllKCkoKSgpKCkpLDImYSYmKENlKDMpLG9yKGQudXNlck5hbWUpLENlKDEpLFJlKCJuZ0lmIiwiTm90IGxvZ2dlZCBpbiIhPT1kLnVzZXJOYW1lJiZkLmlzVml5YSksQ2UoMSksUmUoIm5nSWYiLCFkLnNhc2pzQ29uZmlnLmRlYnVnKSxDZSgxKSxSZSgibmdJZiIs''@;'; put 'put ''ZC5zYXNqc0NvbmZpZy5kZWJ1ZyksQ2UoMSksUmUoIm5nSWYiLCFkLmlzVml5YSksQ2UoMyksUmUoImNsci1uYXYtbGV2ZWwiLDIpLENlKDMpLG1yKCIgIixkLnVzZXJOYW1lLCIgIiksQ2UoNCksUmUoIm5nTW9kZWwiLGQuc2FzanNDb25maWcuZGVidWcpKCJuZ01vZGVsT3B0aW9ucyIsJHMo''@;'; put 'put ''OSxqQ2UpKSl9LGRlcGVuZGVuY2llczpbWmksQ3AsUzAsQnMsd3AsT3MscjIsQnUsa2EsYzIsVXMsRDAsRDgsVDAselEsTmYsYWcsbGcsSzhdLHN0eWxlczpbJy5jb3B5UmlnaHRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweH0uY29weVJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtYnJlYWs6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdo''@;'; put 'put ''dDoxNXB4O2xpbmUtaGVpZ2h0OjNyZW07aGVpZ2h0OjNyZW19LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdID4gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZhZmFmYTtwb3NpdGlvbjpyZWxhdGl2ZX0uYXBwLW5hdi1kcm9wZG93''@;'; put 'put ''bltfbmdjb250ZW50LSVDT01QJV0gPiBidXR0b24uZHJvcGRvd24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcntjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtvcGFjaXR5Oi4xNTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDo0MHB4''@;'; put 'put ''O3RvcDoxMHB4fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGJ1dHRvbi5kcm9wZG93bi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmJhZGdlLmhpZGRlbltfbmdjb250ZW50LSVDT01QJV17dmlzaWJpbGl0eTpoaWRkZW59LmFwcC1uYXYtZHJvcGRvd25bX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM1NjU2NTY7cGFkZGluZy1ib3R0b206MH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAu''@;'; put 'put ''c2VwYXJhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTBweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIGdyYXl9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1b''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDo0NXB4O2xpbmUtaGVpZ2h0OjQwcHh9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bk''@;'; put 'put ''b3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5kcm9wZG93bi10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNTY1NjU2fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9w''@;'; put 'put ''ZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5iYWRnZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MjZweDttYXJnaW4tcmlnaHQ6MH0uYXBwLW5hdi1kcm9wZG93bltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbS5kZWJ1Zy1zd2l0Y2gtaXRlbVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1k''@;'; put 'put ''cm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmFwcC1u''@;'; put 'put ''YXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1sb2dvdXRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjIw''@;'; put 'put ''cHg7dG9wOjE1cHh9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCU7aGVp''@;'; put 'put ''Z2h0OjEwMCV9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgICBjbHItdG9nZ2xlLXdyYXBwZXJ7d2lkdGg6MTAwJTttYXJnaW46MDto''@;'; put 'put ''ZWlnaHQ6MTAwJTtwYWRkaW5nOjEwcHggMjBweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIGlucHV0e2luc2V0OjA7d2lkdGg6''@;'; put 'put ''MTAwJTtoZWlnaHQ6MTAwJTtjdXJzb3I6cG9pbnRlcn0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItdG9nZ2xlLXdyYXBw''@;'; put 'put ''ZXIgaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH0uZGVidWctdG9nZ2xlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWxlZnQ6NDJweH1AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpey5zaWRlbmF2LWNvbnRlbnRbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgYS5uYXYtbGluay5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXQ7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6IzU2NTY1Nn19Lm5hdi1saW5rLmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5iYWRnZVtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV17cG9zaXRpb246YWJzb2x1dGV9LmF2YXRhci1pbWdbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLWxlZnQ6MTBweDtib3JkZXItcmFkaXVzOjUwcHh9J119KSxjfSkoKTtmdW5jdGlvbiBVQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtt''@;'; put 'put ''ZSgwLCJjbHItYWxlcnQiLDIpLHh0KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC5jbG9zZWQ9aCl9KSgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLm9uQWxlcnRDbG9zZSgp''@;'; put 'put ''KX0pLG1lKDEsImRpdiIsMykoMiwic3BhbiIsNCksTmUoMykseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJjbHJBbGVydFR5cGUiLGEudHlwZSkoImNsckFsZXJ0QXBwTGV2ZWwiLCEwKSgiY2xyQWxlcnRDbG9zZWQiLGEuY2xvc2VkKSxDZSgzKSxtcigiICIsYS5t''@;'; put 'put ''ZXNzYWdlLCIgIil9fWZ1bmN0aW9uIFpDZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1hbGVydHMiKSxRZSgxLFVDZSw0LDQsImNsci1hbGVydCIsMSkseWUoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksUmUoIm5nRm9yT2YiLGEuYWxlcnRzKX19bGV0IFlDZT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEpe3RoaXMuX2FsZXJ0c1NlcnZpY2U9YSx0aGlzLmFsZXJ0cz1bXSx0aGlzLmhhc09wZW5BbGVydD0hMSx0aGlzLmFsZXJ0c1N1Yj1uZXcgZWV9bmdPbkluaXQoKXt0aGlzLmFsZXJ0c1N1Yj10aGlzLl9hbGVydHNTZXJ2aWNlLmFsZXJ0cy5zdWJzY3JpYmUoYT0+e3RoaXMu''@;'; put 'put ''YWxlcnRzLnB1c2goYSksdGhpcy5oYXNPcGVuQWxlcnQ9ITAsYS5lcnImJmNvbnNvbGUuZXJyb3IoYS5lcnIpfSl9b25BbGVydENsb3NlKCl7dGhpcy5oYXNPcGVuQWxlcnQ9dGhpcy5hbGVydHMuc29tZShhPT4hYS5jbG9zZWQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKSh0dChsUCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYWxlcnRzIl1dLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbMywiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIiwiY2xy''@;'; put 'put ''QWxlcnRDbG9zZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENoYW5nZSJdLFsxLCJhbGVydC1pdGVtIl0sWzEsImFsZXJ0LXRleHQiXV0sdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJlFlKDAsWkNlLDIsMSwiY2xyLWFsZXJ0cyIsMCksMiZhJiZSZSgibmdJZiIsZC5oYXNPcGVuQWxlcnQpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEZiLEhRLEhiXSxzdHlsZXM6WyJjbHItYWxlcnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSks''@;'; put 'put ''Y30pKCksQkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2xhc3Nlcz0iIn1uZ09uSW5pdCgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNvbnRhY3QtbGluayJd''@;'; put 'put ''XSxpbnB1dHM6e2NsYXNzZXM6ImNsYXNzZXMifSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siaHJlZiIsIm1haWx0bzpzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvP3N1YmplY3Q9TGljZW5jZSIsMywibmdDbGFzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImEiLDAp''@;'; put 'put ''LE5lKDEsInN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx5ZSgpKSwyJmEmJihocigidW5zZXQiLCIiIT09ZC5jbGFzc2VzKSxSZSgibmdDbGFzcyIsZC5jbGFzc2VzKSl9LGRlcGVuZGVuY2llczpbdWNdLHN0eWxlczpbIi51bnNldFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dW5zZXR9''@;'; put 'put ''Il19KSxjfSkoKSxaYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5maWxlT3Zlcj0hMSx0aGlzLmZpbGVEcm9wcGVkPW5ldyBFcix0aGlzLmZpbGVEcmFnZ2VkT3Zlcj1uZXcgRXJ9b25EcmFnT3ZlcihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0''@;'; put 'put ''aGlzLmNvbnRhaW5zRmlsZXMoYSkmJiF0aGlzLmZpbGVPdmVyJiYodGhpcy5maWxlT3Zlcj0hMCx0aGlzLmZpbGVEcmFnZ2VkT3Zlci5lbWl0KCkpfW9uRHJhZ0xlYXZlKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITF9b25kcm9wKGEp''@;'; put 'put ''e2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITE7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlci5maWxlcztkLmxlbmd0aD4wJiZ0aGlzLmZpbGVEcm9wcGVkLmVtaXQoZCl9Y29udGFpbnNGaWxlcyhhKXtpZihhJiZhLmRhdGFUcmFuc2ZlciYmYS5k''@;'; put 'put ''YXRhVHJhbnNmZXIudHlwZXMpZm9yKGxldCBkPTA7ZDxhLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7ZCsrKWlmKCJGaWxlcyI9PWEuZGF0YVRyYW5zZmVyLnR5cGVzW2RdKXJldHVybiEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiZHJhZ292ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJhZ092ZXIoZil9KSgiZHJhZ2xlYXZlIixmdW5jdGlv''@;'; put 'put ''bihmKXtyZXR1cm4gZC5vbkRyYWdMZWF2ZShmKX0pKCJkcm9wIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbmRyb3AoZil9KSwyJmEmJmhyKCJmaWxlb3ZlciIsZC5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dl''@;'; put 'put ''ZE92ZXIifX0pLGN9KSgpO2Z1bmN0aW9uIFdDZShjLGwpezEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIk5vIHJlcXVlc3RzIG1hZGUiKSx5ZSgpKX1mdW5jdGlvbiBHQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIikscXQoMSwiY2xyLWljb24iLDEzKSx5ZSgpKX1mdW5jdGlvbiAkQ2UoYyxsKXsx''@;'; put 'put ''JmMmJihtZSgwLCJzcGFuIikscXQoMSwiY2xyLWljb24iLDE0KSx5ZSgpKX1mdW5jdGlvbiBxQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0LF89amUoMykuaW5k''@;'; put 'put ''ZXg7cmV0dXJuIGp0KGplKDIpLmdvVG9Mb2dMaW5lKGYsInJlcXVlc3RfIitfLCJlcnJvciIpKX0pLG1lKDEsImJ1dHRvbiIsMjIpLE5lKDIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksbXIoIiAiLGEsIiAiKX19Y29uc3QgdWVlPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''W119O2Z1bmN0aW9uIEtDZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlLW5vZGUiLDE4KSxxdCgxLCJjbHItaWNvbiIsMTkpLE5lKDIpLFFlKDMscUNlLDMsMSwiY2xyLXRyZWUtbm9kZSIsMjApLHllKCkpLDImYyl7Y29uc3QgYT1qZSgyKS4kaW1wbGljaXQ7Q2UoMiksbXIoIiBFcnJv''@;'; put 'put ''cnMgKCIsYS5sb2dFcnJvcnMubGVuZ3RoLCIpICIpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmxvZ0Vycm9yc3x8JHMoMix1ZWUpKX19ZnVuY3Rpb24gWENlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25z''@;'; put 'put ''dCBmPUJ0KGEpLiRpbXBsaWNpdCxfPWplKDMpLmluZGV4O3JldHVybiBqdChqZSgyKS5nb1RvTG9nTGluZShmLCJyZXF1ZXN0XyIrXywid2FybmluZyIpKX0pLG1lKDEsImJ1dHRvbiIsMjIpLE5lKDIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksbXIoIiAiLGEs''@;'; put 'put ''IiAiKX19ZnVuY3Rpb24gSkNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIsMTgpLHF0KDEsImNsci1pY29uIiwyMyksTmUoMiksUWUoMyxYQ2UsMywxLCJjbHItdHJlZS1ub2RlIiwyMCkseWUoKSksMiZjKXtjb25zdCBhPWplKDIpLiRpbXBsaWNpdDtDZSgyKSxtcigiIFdh''@;'; put 'put ''cm5pbmdzICgiLGEubG9nV2FybmluZ3MubGVuZ3RoLCIpICIpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmxvZ1dhcm5pbmdzfHwkcygyLHVlZSkpfX1mdW5jdGlvbiBRQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDI0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQo''@;'; put 'put ''YSk7Y29uc3QgaD1qZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKDIpLmRvd25sb2FkTG9nKGgubG9nRmlsZSkpfSksTmUoMSwiIERvd25sb2FkICIpLHllKCl9fWZ1bmN0aW9uIGVTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpKDEsImNsci10cmVlIiksUWUoMixL''@;'; put 'put ''Q2UsNCwzLCJjbHItdHJlZS1ub2RlIiwxNSksUWUoMyxKQ2UsNCwzLCJjbHItdHJlZS1ub2RlIiwxNSkseWUoKSxxdCg0LCJkaXYiLDE2KSxRZSg1LFFDZSwyLDAsImJ1dHRvbiIsMTcpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdJZiIsYS5sb2dFcnJv''@;'; put 'put ''cnMpLENlKDEpLFJlKCJuZ0lmIixhLmxvZ1dhcm5pbmdzKSxDZSgxKSxSZSgiaW5uZXJIVE1MIixhLmxvZ0ZpbGUscTIpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5sb2dGaWxlP251bGw6YS5sb2dGaWxlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIHRTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1W''@;'; put 'put ''bigpO21lKDAsImJ1dHRvbiIsMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoMikuZG93bmxvYWRTb3VyY2VDb2RlKGguc291cmNlQ29kZSkpfSksTmUoMSwiIERvd25sb2FkICIpLHllKCl9fWZ1bmN0aW9uIG5TZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLE5lKDIpLHllKCksUWUoMyx0U2UsMiwwLCJidXR0b24iLDE3KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQ7Q2UoMiksb3IoYS5zb3VyY2VDb2RlKSxDZSgxKSxSZSgibmdJZiIsKG51bGw9''@;'; put 'put ''PWEuc291cmNlQ29kZT9udWxsOmEuc291cmNlQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiByU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDI0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGpl''@;'; put 'put ''KDIpLmRvd25sb2FkR2VuZXJhdGVkQ29kZShoLmdlbmVyYXRlZENvZGUpKX0pLE5lKDEsIiBEb3dubG9hZCAiKSx5ZSgpfX1mdW5jdGlvbiBpU2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI1KSxOZSgyKSx5ZSgpLFFlKDMsclNlLDIsMCwiYnV0dG9u''@;'; put 'put ''IiwxNykseWUoKSksMiZjKXtjb25zdCBhPWplKCkuJGltcGxpY2l0O0NlKDIpLG1yKCIgIixhLmdlbmVyYXRlZENvZGUsIiAiKSxDZSgxKSxSZSgibmdJZiIsKG51bGw9PWEuZ2VuZXJhdGVkQ29kZT9udWxsOmEuZ2VuZXJhdGVkQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBvU2UoYyxsKXtp''@;'; put 'put ''ZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDMxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKDMpLiRpbXBsaWNpdC5zZWxlY3RlZFRhYmxlPWYua2V5KX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxp''@;'; put 'put ''Y2l0O2hyKCJzZWxlY3RlZCIsamUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9PT1hLmtleSksQ2UoMSksbXIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIHNTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1kcm9wZG93bi1tZW51IiksUWUoMSxvU2UsMiwzLCJkaXYiLDMwKSxiYSgyLCJr''@;'; put 'put ''ZXl2YWx1ZSIpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgyKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nRm9yT2YiLFVsKDIsMSxhLlNBU1dPUkspKX19ZnVuY3Rpb24gYVNlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMzUpKDEsInN0cm9uZyIpLE5lKDIpLHllKCkoKSksMiZjKXtjb25zdCBhPWpl''@;'; put 'put ''KDMpLiRpbXBsaWNpdDtDZSgyKSxtcigiIixhLnNlbGVjdGVkVGFibGUsIiAoZmlyc3QgMTAgcm93cykgIil9fWZ1bmN0aW9uIGxTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRoIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLG1yKCIgIixhLmtleSwiICIpfX1m''@;'; put 'put ''dW5jdGlvbiBjU2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWplKCkuJGltcGxpY2l0O0NlKDEpLG1yKCIgIixkW2Eua2V5XSwiICIpfX1mdW5jdGlvbiB1U2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpLFFlKDEsY1Nl''@;'; put 'put ''LDIsMSwidGQiLDM3KSxiYSgyLCJrZXl2YWx1ZSIpLHllKCkpLDImYyl7Y29uc3QgYT1qZSg0KS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nRm9yT2YiLFVsKDIsMSxhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpfX1mdW5jdGlvbiBkU2UoYyxsKXtpZigxJmMmJiht''@;'; put 'put ''ZSgwLCJ0YWJsZSIsMzYpKDEsInRoZWFkIikoMiwidHIiKSxRZSgzLGxTZSwyLDEsInRoIiwzNyksYmEoNCwia2V5dmFsdWUiKSx5ZSgpKCksbWUoNSwidGJvZHkiKSxRZSg2LHVTZSwzLDMsInRyIiwzNykseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoMykuJGltcGxpY2l0O0NlKDMpLFJlKCJu''@;'; put 'put ''Z0Zvck9mIixVbCg0LDIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKSxDZSgzKSxSZSgibmdGb3JPZiIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3MpfX1mdW5jdGlvbiBoU2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiLWNvbnRl''@;'; put 'put ''bnQiKSxRZSgxLGFTZSwzLDEsInAiLDMyKSxtZSgyLCJkaXYiLDMzKSxRZSgzLGRTZSw3LDQsInRhYmxlIiwzNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoMikuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIixhLnNlbGVjdGVkVGFibGUpLENlKDIpLFJlKCJuZ0lmIixhLnNlbGVjdGVkVGFi''@;'; put 'put ''bGUpfX1mdW5jdGlvbiBmU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdGFiIikoMSwiY2xyLWRyb3Bkb3duIiwyNikoMiwiYnV0dG9uIiwyNyksTmUoMywiIFNBUyBXb3JrIFRhYmxlcyAiKSxxdCg0LCJjbHItaWNvbiIsMjgpLHllKCksUWUoNSxzU2UsMywzLCJjbHIt''@;'; put 'put ''ZHJvcGRvd24tbWVudSIsMjkpLHllKCksUWUoNixoU2UsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLHh0KCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKDMpLnRhYmxlc0FjdGl2ZT1oKX0pLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKDMpO0NlKDEpLFJl''@;'; put 'put ''KCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApLENlKDUpLFJlKCJjbHJJZkFjdGl2ZSIsYS50YWJsZXNBY3RpdmUpfX1mdW5jdGlvbiBwU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItc3RhY2stYmxvY2siLDgpKDEsImNsci1zdGFjay1sYWJlbCIpLE5lKDIpLG1l''@;'; put 'put ''KDMsInNwYW4iLDkpLFFlKDQsR0NlLDIsMCwic3BhbiIsNSksUWUoNSwkQ2UsMiwwLCJzcGFuIiw1KSx5ZSgpKCksbWUoNiwiY2xyLXN0YWNrLWNvbnRlbnQiKSxOZSg3KSx5ZSgpLG1lKDgsImNsci1zdGFjay1ibG9jayIsMTApKDksImNsci1zdGFjay1jb250ZW50IikoMTAsImNsci10YWJz''@;'; put 'put ''IikoMTEsImNsci10YWIiKSgxMiwiYnV0dG9uIiwxMSksTmUoMTMsIlNBUyBMb2ciKSx5ZSgpLFFlKDE0LGVTZSw2LDQsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoMikuc2FzTG9nQWN0aXZlPWgpfSkseWUo''@;'; put 'put ''KSxtZSgxNSwiY2xyLXRhYiIpKDE2LCJidXR0b24iLDExKSxOZSgxNywiU0FTIFNvdXJjZSBDb2RlIikseWUoKSxRZSgxOCxuU2UsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLHh0KCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLnNhc1NvdXJjZUNv''@;'; put 'put ''ZGVBY3RpdmU9aCl9KSx5ZSgpLG1lKDE5LCJjbHItdGFiIikoMjAsImJ1dHRvbiIsMTEpLE5lKDIxLCJTQVMgR2VuZXJhdGVkIENvZGUiKSx5ZSgpLFFlKDIyLGlTZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSks''@;'; put 'put ''anQoamUoMikuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT1oKX0pLHllKCksUWUoMjMsZlNlLDcsMiwiY2xyLXRhYiIsNSkseWUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9amUoMik7UmUoImlkIiwicmVxdWVzdF8iK2QpKCJjbHJTdGFja1ZpZXdMZXZl''@;'; put 'put ''bCIsMSkoImNsclN0YWNrVmlld1NldHNpemUiLDMpKCJjbHJTdGFja1ZpZXdQb3NpbnNldCIsMyksQ2UoMiksbXIoIiAiLGEuc2VydmljZUxpbmssIiAiKSxDZSgyKSxSZSgibmdJZiIsKG51bGw9PWEubG9nV2FybmluZ3M/bnVsbDphLmxvZ1dhcm5pbmdzLmxlbmd0aCk+MCksQ2UoMSksUmUo''@;'; put 'put ''Im5nSWYiLChudWxsPT1hLmxvZ0Vycm9ycz9udWxsOmEubG9nRXJyb3JzLmxlbmd0aCk+MCksQ2UoMiksb3IoYS5wYXJzZWRUaW1lc3RhbXApLENlKDcpLFJlKCJjbHJJZkFjdGl2ZSIsaC5zYXNMb2dBY3RpdmUpLENlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsaC5zYXNTb3VyY2VDb2RlQWN0aXZl''@;'; put 'put ''KSxDZSg0KSxSZSgiY2xySWZBY3RpdmUiLGguc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSksQ2UoMSksUmUoIm5nSWYiLGEuU0FTV09SSyl9fWZ1bmN0aW9uIGdTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1zdGFjay12aWV3IiksUWUoMSxwU2UsMjQsMTIsImNsci1zdGFjay1ibG9jayIsNyks''@;'; put 'put ''eWUoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksUmUoIm5nRm9yT2YiLGEuc2FzanNSZXF1ZXN0cyl9fWxldCBtU2U9KCgpPT57Y2xhc3MgY3tnZXQgb3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1zZXQgb3BlbmVkKGEpe3RoaXMuX29wZW5lZD1hLGEmJnRoaXMubW9kYWxPcGVuZWQo''@;'; put 'put ''KSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuc2FzanNSZXF1ZXN0cyl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuX29wZW5lZD0hMSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgRXIs''@;'; put 'put ''dGhpcy5zYXNMb2dBY3RpdmU9ITAsdGhpcy5zYXNTb3VyY2VDb2RlQWN0aXZlPSExLHRoaXMuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT0hMSx0aGlzLnRhYmxlc0FjdGl2ZT0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2FzanNSZXF1''@;'; put 'put ''ZXN0cz1bXX1uZ09uSW5pdCgpe31wYXJzZUxvZ1RpbWVzdGFtcChhKXtyZXR1cm5gJHt0aGlzLmZvcm1hdFRpbWVzdGFtcChhKX0gJHt0aGlzLnRpbWVzdGFtcEZyb21Ob3coYSl9YH1jdXRBcHBMb2MoYSl7cmV0dXJuIGEucmVwbGFjZSh0aGlzLnNhc2pzQ29uZmlnLmFwcExvYysiLyIsIiIp''@;'; put 'put ''fWZvcm1hdFRpbWVzdGFtcChhKXtyZXR1cm4gS28oYSkuZm9ybWF0KCk/S28oYSkuZm9ybWF0KCJkZGRkLCBNTU1NIERvIFlZWVksIGg6bW06c3MgYSIpOmF9dGltZXN0YW1wRnJvbU5vdyhhKXtyZXR1cm4gS28oYSkuZm9ybWF0KCk/YCAoJHtLbyhhKS5mcm9tTm93KCl9KWA6IiJ9bW9kYWxP''@;'; put 'put ''cGVuQ2hhbmdlKGEpe3RoaXMub3BlbmVkPWEsdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLm9wZW5lZCl9bW9kYWxPcGVuZWQoKXt0aGlzLnNhc2pzUmVxdWVzdHM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc1JlcXVlc3RzKCk7Zm9yKGxldCBhIG9mIHRoaXMuc2FzanNSZXF1ZXN0cyl0aGlz''@;'; put 'put ''LnBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSksYS5zZXJ2aWNlTGluaz10aGlzLmN1dEFwcExvYyhhLnNlcnZpY2VMaW5rKSxhLnBhcnNlZFRpbWVzdGFtcD10aGlzLnBhcnNlTG9nVGltZXN0YW1wKGEudGltZXN0YW1wKX1nb1RvTG9nTGluZShhLGQsaCl7bGV0IGY9ZG9jdW1lbnQucXVlcnlT''@;'; put 'put ''ZWxlY3RvckFsbChgIyR7ZH0gLmxvZy13cmFwcGVyLnNhc2xvZyBmb250YCksXz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nYCk7Zm9yKGxldCBUIG9mIGYpVC50ZXh0Q29udGVudC5pbmNsdWRlcyhhKSYmKF8uc2Nyb2xsVG9wPVQub2Zmc2V0VG9w''@;'; put 'put ''LV8ub2Zmc2V0VG9wLFQuc3R5bGUuYmFja2dyb3VuZENvbG9yPSIjNjFhMjIwMmIiLHNldFRpbWVvdXQoKCk9PntULnN0eWxlPSIifSwzZTMpKX1wYXJzZUVycm9yc0FuZFdhcm5pbmdzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKCFhfHwhYS5sb2dGaWxlfHwic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIGEubG9nRmlsZXx8dm9pZCAwIT09YS5sb2dFcnJvcnN8fHZvaWQgMCE9PWEubG9nV2FybmluZ3MpcmV0dXJuO2xldCBoPVtdLGY9W10sXz1hLmxvZ0ZpbGUuc3BsaXQoIlxuIik7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKyspe2lmKC88Lio+RVJST1IvZ20udGVzdChf''@;'; put 'put ''W1RdKSl7bGV0IFc9X1tUXS5zdWJzdHJpbmcoX1tUXS5pbmRleE9mKCJFIiksX1tUXS5sZW5ndGgtMSk7aC5wdXNoKFcpfWVsc2UvXkVSUk9SL2dtLnRlc3QoX1tUXSkmJihoLnB1c2goX1tUXSksX1tUXT0iPGZvbnQ+IitfW1RdKyI8L2ZvbnQ+Iik7aWYoLzwuKj5XQVJOSU5HL2dtLnRlc3Qo''@;'; put 'put ''X1tUXSkpe2xldCBXPV9bVF0uc3Vic3RyaW5nKF9bVF0uaW5kZXhPZigiVyIpLF9bVF0ubGVuZ3RoLTEpO2YucHVzaChXKX1lbHNlL15XQVJOSU5HL2dtLnRlc3QoX1tUXSkmJihmLnB1c2goX1tUXSksX1tUXT0iPGZvbnQ+IitfW1RdKyI8L2ZvbnQ+Iil9ZC5sb2dnZXJTZXJ2aWNlLmxvZyhm''@;'; put 'put ''KSxhLmxvZ0ZpbGU9Xy5qb2luKCJcbiIpLGEubG9nRXJyb3JzPWgsYS5sb2dXYXJuaW5ncz1mfSkoKX1kb3dubG9hZExvZyhhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBsb2dGaWxlLSR7ZH1gLGEpfWRvd25sb2Fk''@;'; put 'put ''U291cmNlQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzb3VyY2VDb2RlLSR7ZH1gLGEpfWRvd25sb2FkR2VuZXJhdGVkQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBnZW5lcmF0ZWRDb2RlLSR7ZH1gLGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSksdHQodzApLHR0KEFjKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXF1''@;'; put 'put ''ZXN0cy1tb2RhbCJdXSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UifSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xyTW9kYWxTaXplIiwieGwiLDEsInJlcXVlc3RzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2Rh''@;'; put 'put ''bE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibXQtMCIsImQtaW5saW5lLWJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiLCJoLTcwdmgiXSxbImNsYXNzIiwibm8tcmVxcyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5vLXJlcXMiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZl''@;'; put 'put ''bCIsImNsclN0YWNrVmlld1NldHNpemUiLCJjbHJTdGFja1ZpZXdQb3NpbnNldCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiLCJjbHJTdGFja1ZpZXdTZXRzaXplIiwiY2xyU3RhY2tWaWV3UG9zaW5zZXQiXSxbMSwibWwtMTAiXSxbMSwiY29udGVu''@;'; put 'put ''dCJdLFsiY2xyVGFiTGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZSIsImNscklmQWN0aXZlQ2hhbmdlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIsImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVk''@;'; put 'put ''Il0sWyJjbGFzcyIsImVyci1saW5rcyIsNCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciIsInNhc2xvZyIsMywiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLWxpbmsiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImVyci1saW5rcyJdLFsic2hhcGUiLCJleGNs''@;'; put 'put ''YW1hdGlvbi10cmlhbmdsZSIsMSwiY29sb3ItcmVkIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJjb2xvci1ncmVlbiJdLFsidHlwZSIsImJ1dHRvbiIs''@;'; put 'put ''MSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFwcGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3du''@;'; put 'put ''Il0sWzQsImNscklmT3BlbiJdLFsiY2xhc3MiLCJkcm9wZG93bi1pdGVtIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZHJvcGRvd24taXRlbSIsMywiY2xpY2siXSxbImNsYXNz''@;'; put 'put ''IiwibXQtMTAiLDQsIm5nSWYiXSxbMSwibWluLWgtNTB2aCJdLFsiY2xhc3MiLCJ0YWJsZSBtdC0xMCIsNCwibmdJZiJdLFsxLCJtdC0xMCJdLFsxLCJ0YWJsZSIsIm10LTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNsci1t''@;'; put 'put ''b2RhbCIsMCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQubW9kYWxPcGVuQ2hhbmdlKGYpfSksbWUoMSwiaDMiLDEpLE5lKDIsIiBSZXF1ZXN0IEhpc3RvcnkgIiksbWUoMywicCIsMiksTmUoNCkseWUoKSgpLG1lKDUsImRpdiIsMyksUWUoNixXQ2UsMiww''@;'; put 'put ''LCJwIiw0KSxRZSg3LGdTZSwyLDEsImNsci1zdGFjay12aWV3Iiw1KSx5ZSgpKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLGQub3BlbmVkKSxDZSg0KSxtcigiQXBwIExvY2F0aW9uOiAiLGQuc2FzanNDb25maWcuYXBwTG9jLCIiKSxDZSgyKSxSZSgibmdJZiIsKG51bGw9PWQuc2FzanNS''@;'; put 'put ''ZXF1ZXN0cz9udWxsOmQuc2FzanNSZXF1ZXN0cy5sZW5ndGgpPDEpLENlKDEpLFJlKCJuZ0lmIixkLm9wZW5lZCYmKG51bGw9PWQuc2FzanNSZXF1ZXN0cz9udWxsOmQuc2FzanNSZXF1ZXN0cy5sZW5ndGgpPjApKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxxOCx4USxtSCxNUSxkZCxnMSxEcCxr''@;'; put 'put ''YSxvdSxzdSxFOCxjMixMcCxPcCxkZyxScCxJcCxjZyxOZixhZyxsZyxLOCx1eF0sc3R5bGVzOlsiLnJlcXVlc3RzLW1vZGFsIC5tb2RhbC1oZWFkZXIgLmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fSAgLnJlcXVlc3RzLW1vZGFsIC5tb2RhbC1jb250ZW50e3BhZGRp''@;'; put 'put ''bmc6MjBweCAxMHB4IDVweH0gIC53b3JrLXRhYmxlcy1kcm9wZG93biBidXR0b257Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yLCAjOGM4YzhjKSFpbXBvcnRhbnR9ICAuc3RhY2stdmlld3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7bWFzay1pbWFnZTpub25lIWltcG9ydGFudDstd2Vi''@;'; put 'put ''a2l0LW1hc2staW1hZ2U6bm9uZSFpbXBvcnRhbnR9ICAuY29udGVudCBjbHItaWNvbnttYXJnaW4tYm90dG9tOjVweH0gIC5jb250ZW50IHByZXt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDttYXgtaGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6dmlzaWJsZTtib3Jk''@;'; put 'put ''ZXI6MH0gIC5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbHt3aWR0aDoxMDAlO3BhZGRpbmctbGVmdDouNnJlbSFpbXBvcnRhbnR9ICAuY29udGVudCAuc3RhY2stYmxvY2stbGFiZWwgLnN0YWNrLXZpZXcta2V5e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9ICAuZXJyLWxpbmtzIC5jbHItdHJl''@;'; put 'put ''ZW5vZGUtY2hpbGRyZW57bWF4LWhlaWdodDo1NXB4O292ZXJmbG93OmF1dG99LmRyb3Bkb3duLWl0ZW0uc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Q4ZTNlOX0ubG9nLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6NTBweDtwYWRkaW5nOjEw''@;'; put 'put ''cHg7bWFyZ2luLXRvcDoxMHB4O3doaXRlLXNwYWNlOnByZS13cmFwO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgI2UyZTJlMjtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7aGVpZ2h0OjQ4dmg7b3ZlcmZsb3c6YXV0b30ubm8tcmVxc1tfbmdjb250ZW50LSVDT01QJV17Ym9y''@;'; put 'put ''ZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTAxOTYwNzg0Myk7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246Y2VudGVyfSJdfSksY30pKCk7Y2xhc3MgdlNle2NvbnN0cnVjdG9yKCl7dGhpcy5zYXNTZXJ2aWNlPW51bGwsdGhpcy5tZXNzYWdlPSIiLHRoaXMuZGV0YWlscz1uZXcg''@;'; put 'put ''ZGVlfX1jbGFzcyBkZWV7fWZ1bmN0aW9uIF9TZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDgpLE5lKDEsIiBTQVMgU2VydmljZTogIiksbWUoMiwic3Ryb25nIiksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgzKSxvcihhLmRhdGEuc2FzU2VydmljZSl9fWZ1bmN0aW9uIGJT''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsOSkoMSwicCIpKDIsInN0cm9uZyIpLE5lKDMsIlNZU1dBUk5JTkdURVhUOiIpLHllKCksTmUoNCkseWUoKSxtZSg1LCJwIikoNiwic3Ryb25nIiksTmUoNywiU1lTRVJST1JURVhUOiIpLHllKCksTmUoOCkseWUoKSxtZSg5LCJwIikoMTAsInN0''@;'; put 'put ''cm9uZyIpLE5lKDExLCJNQUM6IikseWUoKSxOZSgxMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSg0KSxtcigiICIsYS5kYXRhLmRldGFpbHMuU1lTV0FSTklOR1RFWFQsIiIpLENlKDQpLG1yKCIgIixhLmRhdGEuZGV0YWlscy5TWVNFUlJPUlRFWFQsIiIpLENlKDQpLG1yKCIgIixh''@;'; put 'put ''LmRhdGEuZGV0YWlscy5NQUMsIiIpfX1mdW5jdGlvbiB5U2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkub3BlbkNvbmZpZ3VyYXRvcigpKX0pLE5lKDEsIiBPcGVuIGNvbmZpZ3Vy''@;'; put 'put ''YXRvciAiKSx5ZSgpfX1mdW5jdGlvbiB3U2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxOZSgxLCIgT3BlbiByZXF1ZXN0cyBtb2RhbCAi''@;'; put 'put ''KSx5ZSgpfX1mdW5jdGlvbiBDU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuZG93bmxvYWRMb2coKSl9KSxOZSgxLCIgRG93bmxvYWQgbG9nICIpLHllKCl9fWZ1bmN0aW9uIFNT''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5jbG9zZUFib3J0TW9kYWwoKSl9KSxOZSgxLCIgQ2xvc2UgIikseWUoKX19ZnVuY3Rpb24gTVNlKGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PVZuKCk7bWUoMCwiYnV0dG9uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLnJlbG9hZCgpKX0pLE5lKDEsIiBSZWxvYWQgIikseWUoKX19bGV0IHhTZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1h''@;'; put 'put ''LHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2s9bmV3IEVyLHRoaXMuZGF0YT1uZXcgdlNlLHRoaXMuZm9yY2VSZWxvYWQ9ITEsdGhpcy5tb2RhbEVuYWJsZWQ9ITAsdGhpcy5kZWZhdWx0RGF0YT17bW9k''@;'; put 'put ''YWxUaXRsZToiQWJvcnQgTWVzc2FnZSIsc2FzU2VydmljZTpudWxsLG1lc3NhZ2U6IiIsZGV0YWlsczpuZXcgZGVlfX1uZ09uSW5pdCgpe2xldCBhPXsuLi50aGlzLmRlZmF1bHREYXRhLC4uLnRoaXMuZGF0YX07dGhpcy5kYXRhPWF9c2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihhKXtjb25zdCBk''@;'; put 'put ''PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhPy5pbmNsdWRlcygic3RhcnR1cHNlcnZpY2UiKSYmZC5zZXJ2ZXJUeXBlPT09VWMuRC5TYXM5fWNsb3NlQWJvcnRNb2RhbCgpe3RoaXMub25Db25maXJtTW9kYWxDbGljay5lbWl0KCl9b3BlbkNvbmZpZ3VyYXRvcigp''@;'; put 'put ''e3RoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHRoaXMuY2xvc2VBYm9ydE1vZGFsKCl9ZG93bmxvYWRMb2coKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgJHt0aGlzLmRhdGEuc2Fz''@;'; put 'put ''U2VydmljZX0tTE9HYCx0aGlzLmRhdGEuZGV0YWlscz8uTE9HfHwiRXJyb3IgcGFyc2luZyB0aGUgbG9nIil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfXJlbG9hZCgpe2xvY2F0aW9uLnJlbG9hZCgpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBYyksdHQodmwpLHR0KG9hKSx0dChEcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaW5mby1tb2RhbCJdXSxpbnB1dHM6e2RhdGE6ImRhdGEiLGZvcmNlUmVsb2FkOiJmb3JjZVJlbG9hZCJ9LG91''@;'; put 'put ''dHB1dHM6e29uQ29uZmlybU1vZGFsQ2xpY2s6Im9uQ29uZmlybU1vZGFsQ2xpY2sifSxkZWNsczoxMyx2YXJzOjEyLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNsci1hYm9ydC1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIs''@;'; put 'put ''ImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJzYXNTZXJ2aWNlIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiYWJvcnRNc2ciLDMsImlubmVySFRNTCJdLFsiY2xhc3MiLCJzeXN0ZXh0Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJd''@;'; put 'put ''LFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJzYXNTZXJ2aWNlIl0sWzEsInN5c3RleHQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh''@;'; put 'put ''LGQpezEmYSYmKG1lKDAsImNsci1tb2RhbCIsMCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQubW9kYWxFbmFibGVkPWZ9KSxtZSgxLCJoMyIsMSksTmUoMiksUWUoMyxfU2UsNCwxLCJwIiwyKSx5ZSgpLG1lKDQsImRpdiIsMykscXQoNSwiZGl2Iiw0KSxR''@;'; put 'put ''ZSg2LGJTZSwxMywzLCJkaXYiLDUpLHllKCksbWUoNywiZGl2Iiw2KSxRZSg4LHlTZSwyLDAsImJ1dHRvbiIsNyksUWUoOSx3U2UsMiwwLCJidXR0b24iLDcpLFFlKDEwLENTZSwyLDAsImJ1dHRvbiIsNyksUWUoMTEsU1NlLDIsMCwiYnV0dG9uIiw3KSxRZSgxMixNU2UsMiwwLCJidXR0b24i''@;'; put 'put ''LDcpLHllKCkoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC5tb2RhbEVuYWJsZWQpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhZC5mb3JjZVJlbG9hZCksQ2UoMiksbXIoIiAiLGQuZGF0YS5tb2RhbFRpdGxlLCIgIiksQ2UoMSksUmUoIm5nSWYiLGQuZGF0''@;'; put 'put ''YS5zYXNTZXJ2aWNlJiZkLmRhdGEuc2FzU2VydmljZS5sZW5ndGg+MCksQ2UoMiksUmUoImlubmVySFRNTCIsZC5kYXRhLm1lc3NhZ2UscTIpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09ZC5kYXRhLmRldGFpbHMpLENlKDIpLFJlKCJuZ0lmIixkLnNob3dDb25maWd1cmF0b3JCdXR0b24oZC5k''@;'; put 'put ''YXRhLnNhc1NlcnZpY2UpKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWQuZGF0YS5kZXRhaWxzKSxDZSgxKSxSZSgibmdJZiIsKG51bGw9PWQuZGF0YS5kZXRhaWxzP251bGw6ZC5kYXRhLmRldGFpbHMuTE9HKSYmKG51bGw9PWQuZGF0YS5kZXRhaWxzfHxudWxsPT1kLmRhdGEuZGV0YWlscy5M''@;'; put 'put ''T0c/bnVsbDpkLmRhdGEuZGV0YWlscy5MT0cudHJpbSgpLmxlbmd0aCk+MCksQ2UoMSksUmUoIm5nSWYiLCFkLmZvcmNlUmVsb2FkKSxDZSgxKSxSZSgibmdJZiIsZC5mb3JjZVJlbG9hZCkpfSxkZXBlbmRlbmNpZXM6W1ppLG91LHN1LFpiXSxzdHlsZXM6WyIuY2xyLWFib3J0LW1vZGFsW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLXRpdGxlLXdyYXBwZXJ7d2lkdGg6MTAwJX0uY2xyLWFib3J0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFse3otaW5kZXg6MjA1MH0ubW9kYWwtdGl0bGVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5z''@;'; put 'put ''YXNTZXJ2aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O21hcmdpbjowfS5tb2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci10b3A6MXB4IHNvbGlkICNkY2RjZGN9LnN5c3RleHRbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG87bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmc6MTBweCAwO2JvcmRlci10b3A6MXB4IHNvbGlkICNkY2RjZGN9LnN5c3RleHRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO3dvcmQtd3JhcDpi''@;'; put 'put ''cmVhay13b3JkfSJdfSksY30pKCk7ZnVuY3Rpb24gRVNlKGMsbCl7MSZjJiYoenIoMCksbWUoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikscXQoNCwiY2xyLWljb24iLDIzKSx5ZSgpLG1lKDUsImRpdiIsMjQpLE5lKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikg''@;'; put 'put ''LSB0byB1cGdyYWRlIGNvbnRhY3QgIikscXQoNywiY29udGFjdC1saW5rIiwyNSkseWUoKSgpKCksbWUoOCwiYSIsMjYpLE5lKDksIlVwZGF0ZSBMaWNlbmNlIEtleSIpLHllKCksWXIoKSl9ZnVuY3Rpb24ga1NlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7enIoMCksbWUoMSwiZGl2Iiwy''@;'; put 'put ''MCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikscXQoNCwiY2xyLWljb24iLDIzKSx5ZSgpLG1lKDUsImRpdiIsMjQpLE5lKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSBQcm9ibGVtIHdpdGggbGljZW5jZSAiKSx5ZSgpKCkoKSxtZSg3LCJhIiwyNykseHQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe0J0KGEpO2NvbnN0IGg9amUoMyk7cmV0dXJuIGp0KGgubGljZW5jZVByb2JsZW1EZXRhaWxzKGgubGljZW5jZVByb2JsZW0udmFsdWUpKX0pLE5lKDgsIk1vcmUgZGV0YWlscyIpLHllKCksWXIoKX19ZnVuY3Rpb24gQVNlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxOSksUWUo''@;'; put 'put ''MSxFU2UsMTAsMCwibmctY29udGFpbmVyIiwxKSxRZSgyLGtTZSw5LDAsIm5nLWNvbnRhaW5lciIsMSkseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLFJlKCJuZ0lmIixudWxsPT09YS5saWNlbmNlUHJvYmxlbS52YWx1ZSksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpY2VuY2VQ''@;'; put 'put ''cm9ibGVtLnZhbHVlKX19ZnVuY3Rpb24gVFNlKGMsbCl7MSZjJiYobWUoMCwiYSIsMjYpLE5lKDEsIlVwZGF0ZSBMaWNlbmNlIEtleSIpLHllKCkpfWZ1bmN0aW9uIERTZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjgpKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpLHF0''@;'; put 'put ''KDQsImNsci1pY29uIiwyMykseWUoKSxtZSg1LCJkaXYiLDI0KSxOZSg2KSxxdCg3LCJjb250YWN0LWxpbmsiLDI1KSxOZSg4KSx5ZSgpKCkoKSxRZSg5LFRTZSwyLDAsImEiLDI5KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoNiksamMoIiBUaGlzIGxpY2Vuc2Uga2V5IHdpbGwgZXhw''@;'; put 'put ''aXJlIGluICIsYS5saWNlbnNlRXhwaXJpbmdEYXlzLCIgIiwxPT09YS5saWNlbnNlRXhwaXJpbmdEYXlzPyJkYXkiOiJkYXlzIiwiLiBQbGVhc2UgY29udGFjdCAiKSxDZSgyKSxtcigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQg''@;'; put 'put ''IixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxDZSgxKSxSZSgibmdJZiIsIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBJU2UoYyxsKXsxJmMmJihtZSgwLCJhIiwyNiksTmUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IikseWUoKSl9ZnVuY3Rpb24gTFNlKGMsbCl7aWYoMSZjJiYobWUo''@;'; put 'put ''MCwiZGl2IiwyOCkoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikscXQoNCwiY2xyLWljb24iLDIzKSx5ZSgpLG1lKDUsImRpdiIsMjQpLE5lKDYsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxp''@;'; put 'put ''Y2Vuc2UuIFBsZWFzZSBjb250YWN0ICIpLHF0KDcsImNvbnRhY3QtbGluayIsMjUpLE5lKDgpLHllKCkoKSgpLFFlKDksSVNlLDIsMCwiYSIsMjkpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgyKTtDZSg4KSxtcigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2Vu''@;'; put 'put ''Y2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxDZSgxKSxSZSgibmdJZiIsIWEubGljZW5zZUV4cGlyaW5nRGF5cyYmIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBSU2UoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLEFTZSwzLDIsImRpdiIsMTcpLFFlKDIs''@;'; put 'put ''RFNlLDEwLDQsImRpdiIsMTgpLFFlKDMsTFNlLDEwLDIsImRpdiIsMTgpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDEpLFJlKCJuZ0lmIixhLmZyZWVUaWVyQmFubmVyJiYoIWEubGljZW5zZUV4cGlyaW5nRGF5c3x8YS5saWNlbnNlRXhwaXJpbmdEYXlzPDApKSxDZSgxKSxSZSgibmdJ''@;'; put 'put ''ZiIsYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lciksQ2UoMSksUmUoIm5nSWYiLGEuYXBwT3ZlckNhcGFjaXR5KX19ZnVuY3Rpb24gT1NlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBC''@;'; put 'put ''dChhKSxqdChqZSgpLnRvZ2dsZVNpZGViYXIoKSl9KSxxdCgxLCJjbHItaWNvbiIsMzEpLHllKCl9fWNvbnN0IFBTZT1mdW5jdGlvbigpe3JldHVyblsiLyJdfTtmdW5jdGlvbiBGU2UoYyxsKXsxJmMmJihtZSgwLCJhIiwzMikscXQoMSwiaW1nIiwzMykoMiwiaW1nIiwzNCkseWUoKSksMiZj''@;'; put 'put ''JiZSZSgicm91dGVyTGluayIsJHMoMSxQU2UpKX1mdW5jdGlvbiBIU2UoYyxsKXsxJmMmJihtZSgwLCJhIikscXQoMSwic3BhbiIsMzUpLHllKCkpfWNvbnN0IGhlZT1mdW5jdGlvbigpe3JldHVyblsiL3ZpZXciXX0sZmVlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvaG9tZSJdfSxJSD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVyblsiL3Jldmlldy9zdWJtaXR0ZWQiXX07ZnVuY3Rpb24gTlNlKGMsbCl7MSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDQzKSgxLCJhIiw0NCksTmUoMiwiVklFVyIpLHllKCksbWUoMywiYSIsNDQpLE5lKDQsIkxPQUQiKSx5ZSgpLG1lKDUsImEiLDQ0KSxOZSg2LCJS''@;'; put 'put ''RVZJRVciKSx5ZSgpKCkpLDImYyYmKENlKDEpLFJlKCJyb3V0ZXJMaW5rIiwkcygzLGhlZSkpLENlKDIpLFJlKCJyb3V0ZXJMaW5rIiwkcyg0LGZlZSkpLENlKDIpLFJlKCJyb3V0ZXJMaW5rIiwkcyg1LElIKSkpfWZ1bmN0aW9uIFZTZShjLGwpe2lmKDEmYyYmKHpyKDApLG1lKDEsImRpdiIs''@;'; put 'put ''MzYpKDIsImNsci1kcm9wZG93biIpKDMsImJ1dHRvbiIsMzcpLE5lKDQsIiBNZW51ICIpLHllKCksUWUoNSxOU2UsNyw2LCJjbHItZHJvcGRvd24tbWVudSIsMzgpLHllKCkoKSxtZSg2LCJkaXYiLDM5KSg3LCJhIiw0MCksTmUoOCwiVklFVyIpLHllKCksbWUoOSwiYSIsNDEpLE5lKDEwLCJM''@;'; put 'put ''T0FEIikseWUoKSxtZSgxMSwiYSIsNDIpLE5lKDEyLCJSRVZJRVciKSx5ZSgpKCksWXIoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoNyksUmUoInJvdXRlckxpbmsiLCRzKDcsaGVlKSksQ2UoMiksaHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJlZGl0b3IiKXx8YS5yb3V0ZXIu''@;'; put 'put ''dXJsLmluY2x1ZGVzKCJlZGl0LXJlY29yZCIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhvbWUiKSksUmUoInJvdXRlckxpbmsiLCRzKDgsZmVlKSksQ2UoMiksaHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJzdWJtaXR0ZWQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJh''@;'; put 'put ''cHByb3ZlIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxSZSgicm91dGVyTGluayIsJHMoOSxJSCkpfX1jb25zdCBCU2U9ZnVuY3Rpb24oKXtyZXR1cm5bIi9yZXZpZXcvYXBwcm92ZSJdfSxqU2U9ZnVuY3Rpb24oKXtyZXR1cm5bIi9yZXZpZXcvaGlzdG9yeSJdfTtmdW5j''@;'; put 'put ''dGlvbiB6U2UoYyxsKXtpZigxJmMmJihtZSgwLCJuYXYiLDQ1KSgxLCJ1bCIsNDYpKDIsImxpIiw0NykoMywiYSIsNDApLE5lKDQsIlNVQk1JVCIpLHllKCkoKSxtZSg1LCJsaSIsNDcpKDYsImEiLDQwKSxOZSg3LCJBUFBST1ZFIikseWUoKSgpLG1lKDgsImxpIiw0NykoOSwiYSIsNDApLE5l''@;'; put 'put ''KDEwLCJISVNUT1JZIikseWUoKSgpKCkoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMyksUmUoInJvdXRlckxpbmsiLCRzKDUsSUgpKSxDZSgzKSxocigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUiKSksUmUoInJvdXRlckxpbmsiLCRzKDYsQlNlKSksQ2UoMyksUmUo''@;'; put 'put ''InJvdXRlckxpbmsiLCRzKDcsalNlKSl9fWZ1bmN0aW9uIFVTZShjLGwpezEmYyYmcXQoMCwiYXBwLWFsZXJ0cyIpfWZ1bmN0aW9uIFpTZShjLGwpezEmYyYmcXQoMCwicm91dGVyLW91dGxldCIpfWZ1bmN0aW9uIFlTZShjLGwpezEmYyYmcXQoMCwiYXBwLWFsZXJ0cyIpfWZ1bmN0aW9uIFdT''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImFwcC1pbmZvLW1vZGFsIiw0OCkseHQoIm9uQ29uZmlybU1vZGFsQ2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkuY2xvc2VBYm9ydE1vZGFsKGYuaWQpKX0pLHllKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUoKTtSZSgiZGF0YSIsYSkoImZvcmNlUmVsb2FkIiwhZC5zdGFydHVwRGF0YUxvYWRlZCYmMT09PWQuc2FzanNBYm9ydHMubGVuZ3RoKX19ZnVuY3Rpb24gR1NlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw1MikscXQoMSwiZGl2Iiw1MykoMiwiZGl2''@;'; put 'put ''Iiw1NCkoMywiZGl2Iiw1NSkseWUoKSl9ZnVuY3Rpb24gJFNlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0OSkscXQoMSwiaW1nIiw1MCksUWUoMixHU2UsNCwwLCJkaXYiLDUxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgyKSxSZSgibmdJZiIsbnVsbD09PWEuYXBwQWN0aXZlKX19''@;'; put 'put ''bGV0IHFTZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUsZ2Upe3RoaXMuYXBwU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9Zix0aGlzLmxvY2F0aW9uPV8sdGhpcy5ldmVudFNlcnZpY2U9VCx0aGlzLmFw''@;'; put 'put ''cFN0b3JlU2VydmljZT1XLHRoaXMuY2RyPWllLHRoaXMuZWxlbWVudFJlZj1nZSx0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9bnVsbCx0aGlzLnNhc2pzQWJvcnRzPVtdLHRoaXMuZWRpdG9yQWN0aXZlPSExLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSx0aGlzLmZyZWVUaWVyQmFubmVyPXRoaXMu''@;'; put 'put ''bGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllci52YWx1ZSx0aGlzLmxpY2VuY2VQcm9ibGVtPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVByb2JsZW0sdGhpcy5hcHBPdmVyQ2FwYWNpdHk9ITEsdGhpcy5hcHBBY3RpdmU9bnVsbCx0aGlzLnJlcXVlc3RzTW9kYWw9ITEsdGhpcy5zaG93''@;'; put 'put ''UmVnaXN0cmF0aW9uPSEwLHRoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITEsdGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITEsZmVhdHVyZU5hbWU6IiJ9LHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxp''@;'; put 'put ''Y2VuY2VTdGF0ZSx0aGlzLnBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKSx3aW5kb3cuYXBwaW5mbz0oKT0+e2NvbnNvbGUudGFibGUoeyJBZGFwdGVyIHZlcnNpb24iOiI0LjEwLjEiLCJBcHAgdmVyc2lvbiI6InY2LjQuMCIucmVwbGFjZSgidiIsIiIpLCJCdWlsZCB0aW1lc3RhbXAiOktvKHBh''@;'; put 'put ''cnNlSW50KCIxNzA2MTE4NjE4NzM1IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKSwiLi4uIjoiLi4uIn0pfSx0aGlzLnN1YnNjcmliZVRvTGljZW5zZUV2ZW50cygpLHRoaXMuY29tbWl0VmVyPSJ2Ni40LjAiLnJlcGxhY2UoInYiLCIiKSsiLmc2MjVhZjE5IixoLmV2ZW50cy5zdWJz''@;'; put 'put ''Y3JpYmUod2U9PntpZih0aGlzLnJvdXRlVXJsPXRoaXMucm91dGVyLnVybCx0eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjQpe2xldCBFZT10aGlzLnJvdXRlVXJsLnNwbGl0KCIvIilbMV07ImVkaXRvciI9PT1FZT8odGhpcy5lcnJUb3A9ITAsdGhpcy5l''@;'; put 'put ''ZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToiaG9tZSI9PT1FZT8odGhpcy5lcnJUb3A9ITEsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToodGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITEpLEduLnJvb3RQYXJhbT1FZX10''@;'; put 'put ''eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjYmJih0aGlzLmFwcHJvdmVBY3RpdmU9ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJhcHByb3ZlRGV0Iil8fCEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygidG9hcHByb3ZlIikpfSksdGhpcy5zdWJzY3JpYmVU''@;'; put 'put ''b1Nob3dBYm9ydE1vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvU3RhcnR1cERhdGEoKSx0aGlzLnN1YnNjcmliZVRvQXBwQWN0aXZlKCksdGhpcy5zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCksd2luZG93LmZyYW1lRWxlbWVudCYmKHdp''@;'; put 'put ''bmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImhlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246YWJzb2x1dGUiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYWxsb3dmdWxsc2NyZWVuIiwiIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRy''@;'; put 'put ''aWJ1dGUoImZyYW1lYm9yZGVyIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW5oZWlnaHQiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbndpZHRoIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJz''@;'; put 'put ''Y3JvbGxpbmciLCJhdXRvIiksd2luZG93LmZvY3VzKCkpfXBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNhc2pzIik7aWYoIWEpcmV0dXJuIHRoaXMubGljZW5jZVNlcnZpY2UuZGVhY3RpdmF0ZUFwcCgpLHZvaWQgc2V0VGltZW91dCgo''@;'; put 'put ''KT0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIlBsZWFzZSBtYWtlIHN1cmUgJ1NBU0pTJyB0YWcgd2l0aCBjb25maWcgYXR0cmlidXRlcyBpcyBhZGRlZCB0byBpbmRleC5odG1sIixudWxsLCJTQVNqcyBDb25maWcgbm90IGZvdW5kIil9KTtjb25zdCBkPWY9PmEu''@;'; put 'put ''Z2V0QXR0cmlidXRlKGYpfHx2b2lkIDAsaD17c2VydmVyVXJsOmQoInNlcnZlclVybCIpfHwiIixhcHBMb2M6ZCgiYXBwTG9jIil8fCIiLHNlcnZlclR5cGU6ZCgic2VydmVyVHlwZSIpLGxvZ2luTWVjaGFuaXNtOmQoImxvZ2luTWVjaGFuaXNtIil8fCIiLGFkbWluR3JvdXA6ZCgiYWRtaW5H''@;'; put 'put ''cm91cCIpfHwiIixkY1BhdGg6ZCgiZGNQYXRoIil8fCIiLGRlYnVnOiJ0cnVlIj09PWQoImRlYnVnIil8fCExLHVzZUNvbXB1dGVBcGk6dGhpcy5wYXJzZUNvbXB1dGVBcGkoZCgidXNlQ29tcHV0ZUFwaSIpKSxjb250ZXh0TmFtZTpkKCJjb250ZXh0TmFtZSIpfHwiIixob3RMaWNlbmNlS2V5''@;'; put 'put ''OmQoImhvdExpY2VuY2VLZXkiKXx8IiJ9O3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9aCx0aGlzLmFwcFN0b3JlU2VydmljZS5zZXREY0FkYXB0ZXJTZXR0aW5ncyhoKSx0aGlzLmFwcFNlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1saWNlbmNlUHJvYmxlbURldGFpbHMoYSl7dGhpcy5yb3V0ZXIu''@;'; put 'put ''bmF2aWdhdGVCeVVybChhKX1wYXJzZUNvbXB1dGVBcGkoYSl7cmV0dXJuIHZvaWQgMD09PWF8fCJ1bmRlZmluZWQiPT09YXx8Im51bGwiPT09YT9udWxsOiJ0cnVlIj09PWF8fCExfXN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vbkRlbW9MaW1pdE1vZGFs''@;'; put 'put ''U2hvdy5zdWJzY3JpYmUoYT0+e3RoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiEwLGZlYXR1cmVOYW1lOmF9fSl9c3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnN1YnNjcmliZShhPT57dGhpcy5mcmVlVGllckJhbm5lcj1hfSks''@;'; put 'put ''dGhpcy5saWNlbmNlU2VydmljZS5saWNlbnNlRXhwaXJlc0luRGF5cy5zdWJzY3JpYmUoYT0+e2EmJmE8PTE0JiYodGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPWEpfSksdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcE92ZXJDYXBhY2l0eS5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwT3ZlckNhcGFj''@;'; put 'put ''aXR5PWF9KX1zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcEFjdGl2ZT1hfSl9c3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2hvd0Fib3J0TW9kYWwuc3Vi''@;'; put 'put ''c2NyaWJlKGE9PnthLmlkPXRoaXMuc2FzanNBYm9ydHMubGVuZ3RoKzEsdGhpcy5zYXNqc0Fib3J0cy5wdXNoKGEpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pfXN1YnNjcmliZVRvU3RhcnR1cERhdGEoKXt0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmli''@;'; put 'put ''ZSgoKT0+e3RoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITB9KX1zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblJlcXVlc3RzTW9kYWxPcGVuLnN1YnNjcmliZShhPT57dGhpcy5yZXF1ZXN0c01vZGFsPSEwfSl9Y2xvc2VBYm9ydE1vZGFsKGEpe2xldCBkPXRo''@;'; put 'put ''aXMuc2FzanNBYm9ydHMuZmluZEluZGV4KGg9PmguaWQ9PT1hKTt0aGlzLnNhc2pzQWJvcnRzLnNwbGljZShkLDEpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVTaWRlYmFyKCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhh''@;'; put 'put ''KX1vcGVuTGljZW5jaW5nUGFnZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvdXBkYXRlIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHp4KSx0dChDMCksdHQoRHMpLHR0KFdsKSx0dChKZCksdHQodmwpLHR0KGU4''@;'; put 'put ''KSx0dChVYSksdHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibXktYXBwIl1dLGRlY2xzOjI5LHZhcnM6MTcsY29uc3RzOltbMSwibWFpbi1jb250YWluZXIiXSxbNCwibmdJZiJdLFsxLCJhcHAtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJj''@;'; put 'put ''dXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBtbC0xMCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibG9nbyIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImhyZWYiLCIj''@;'; put 'put ''IiwiY2xhc3MiLCJuYXYtbGluayIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsxLCJoZWFkZXItYWN0aW9ucyJdLFsxLCJuYXYtdGV4dCJdLFsxLCJkcm9wZG93biJdLFsiY2xhc3MiLCJzdWJuYXYiLDQsIm5nSWYiXSxbMywib3BlbmVkIiwib3BlbmVkQ2hhbmdlIl0sWzMsImRhdGEiLCJm''@;'; put 'put ''b3JjZVJlbG9hZCIsIm9uQ29uZmlybU1vZGFsQ2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5n''@;'; put 'put ''ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsic2l6ZSIsIjIwIiwic2hhcGUiLCJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiYXBwLWxvYWRpbmciLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LXdhcm5pbmciLCJpZCIsImRlbW8tYmFubmVy''@;'; put 'put ''Iiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC1kYW5nZXIiLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCIsImFsZXJ0LXdhcm5pbmciXSxbMSwiYWxlcnQtaXRlbXMiXSxbMSwiYWxlcnQtaXRlbSIsInN0YXRpYyJdLFsxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsMSwibXQtMiJdLFsxLCJhbGVydC10ZXh0Il0sWyJjbGFzc2Vz''@;'; put 'put ''IiwiY29sb3Itd2hpdGUiXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwidXBkYXRlLWtleSJdLFsxLCJ1cGRhdGUta2V5IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCIsImFsZXJ0LWRhbmdlciJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwiY2xhc3MiLCJ1cGRhdGUta2V5Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjdXJzb3ItcG9pbnRlciIsInNlbGVjdC1ub25lIiwibWwtMTAiLCJkLWZsZXgiLCJjbHItanVz''@;'; put 'put ''dGlmeS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwiMjQiLCJzaGFwZSIsInRyZWUtdmlldyJdLFsiaHJlZiIsIiMiLDEsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dS''@;'; put 'put ''QU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RjLWxvZ28tc3ZnIiwxLCJ3aXRob3V0LXRleHQiLCJkLWJsb2NrIiwiZC1tZC1ub25lIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2Vz''@;'; put 'put ''L2RhdGFjb250cm9sbGVyLXN2ZyIsMSwid2l0aC10ZXh0IiwiZC1ub25lIiwiZC1tZC1ibG9jayJdLFsxLCJjbHItaWNvbiIsImhlYWRlci1sb2dvIiwibWwtMTAiXSxbMSwiaGVhZGVyLW5hdiIsImQtZmxleCIsImQtc20tbm9uZSJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwiYXJpYS1s''@;'; put 'put ''YWJlbCIsInRvZ2dsZSBzZXR0aW5ncyBtZW51IiwxLCJuYXYtaWNvbiIsImNvbG9yLXdoaXRlLWkiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJoZWFkZXItbmF2IiwiZC1ub25lIiwiZC1zbS1mbGV4Il0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0''@;'; put 'put ''aXZlIiwxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsImN1cnNvci1wb2ludGVyIiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRv''@;'; put 'put ''bS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInJvdXRlckxpbmsiXSxbMSwic3VibmF2Il0sWzEsIm5hdiJdLFsxLCJuYXYtaXRlbSJdLFszLCJkYXRhIiwiZm9yY2VSZWxvYWQiLCJvbkNvbmZpcm1Nb2RhbENsaWNrIl0sWzEsImFwcC1sb2FkaW5nIl0sWyJzcmMiLCIvU0FTU3Rv''@;'; put 'put ''cmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsMSwibG9hZGluZy1sb2dvIl0sWyJjbGFzcyIsInNsaWRlciIsNCwibmdJZiJdLFsxLCJzbGlkZXIiXSxbMSwibGluZSJdLFsxLCJzdWJsaW5lIiwiaW5j''@;'; put 'put ''Il0sWzEsInN1YmxpbmUiLCJkZWMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApLFFlKDEsUlNlLDQsMywibmctY29udGFpbmVyIiwxKSxtZSgyLCJoZWFkZXIiLDIpLFFlKDMsT1NlLDIsMCwiZGl2IiwzKSxtZSg0LCJkaXYiLDQpLFFlKDUsRlNlLDMsMiwi''@;'; put 'put ''YSIsNSksUWUoNixIU2UsMiwwLCJhIiwxKSx5ZSgpLFFlKDcsVlNlLDEzLDEwLCJuZy1jb250YWluZXIiLDEpLG1lKDgsImRpdiIsNikoOSwiZGl2Iiw3KSxxdCgxMCwiYXBwLWxvYWRpbmctaW5kaWNhdG9yIikseWUoKSxtZSgxMSwiZGl2Iiw4KSxxdCgxMiwiYXBwLXVzZXItbmF2LWRyb3Bk''@;'; put 'put ''b3duIikseWUoKSgpKCksUWUoMTMselNlLDExLDgsIm5hdiIsOSksUWUoMTQsVVNlLDEsMCwiYXBwLWFsZXJ0cyIsMSksbWUoMTUsImFwcC1yZXF1ZXN0cy1tb2RhbCIsMTApLHh0KCJvcGVuZWRDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlcXVlc3RzTW9kYWw9Zn0pLHllKCksUWUo''@;'; put 'put ''MTYsWlNlLDEsMCwicm91dGVyLW91dGxldCIsMSkscXQoMTcsImFwcC1sb2dpbiIpLFFlKDE4LFlTZSwxLDAsImFwcC1hbGVydHMiLDEpLFFlKDE5LFdTZSwxLDIsImFwcC1pbmZvLW1vZGFsIiwxMSksbWUoMjAsImNsci1tb2RhbCIsMTIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKGYpe3JldHVybiBkLmRlbW9MaW1pdE5vdGljZS5vcGVuPWZ9KSxtZSgyMSwiaDMiLDEzKSxOZSgyMikscXQoMjMsImNsci1pY29uIiwxNCkseWUoKSxtZSgyNCwiZGl2IiwxNSksTmUoMjUsIiBDb250YWN0ICIpLHF0KDI2LCJjb250YWN0LWxpbmsiKSxOZSgyNykseWUoKSgpKCksUWUo''@;'; put 'put ''MjgsJFNlLDMsMSwiZGl2IiwxNikpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksQ2UoMiksUmUoIm5nSWYiLGQuaXNNYWluUm91dGUoInZpZXciKXx8ZC5pc01haW5Sb3V0ZSgiaG9tZSIpJiYhZC5yb3V0ZXIudXJsLmluY2x1ZGVz''@;'; put 'put ''KCJsaWNlbnNpbmciKSksQ2UoMiksUmUoIm5nSWYiLCFkLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSxDZSgxKSxSZSgibmdJZiIsZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSksQ2UoMSksUmUoIm5nSWYiLCFkLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYh''@;'; put 'put ''ZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksQ2UoNiksUmUoIm5nSWYiLGQucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGQucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxkLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksQ2UoMSksUmUo''@;'; put 'put ''Im5nSWYiLCFkLmVyclRvcCksQ2UoMSksUmUoIm9wZW5lZCIsZC5yZXF1ZXN0c01vZGFsKSxDZSgxKSxSZSgibmdJZiIsZC5zdGFydHVwRGF0YUxvYWRlZCksQ2UoMiksUmUoIm5nSWYiLGQuZXJyVG9wKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5zYXNqc0Fib3J0cyksQ2UoMSksUmUoImNsck1v''@;'; put 'put ''ZGFsT3BlbiIsZC5kZW1vTGltaXROb3RpY2Uub3BlbikoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxDZSgyKSxtcigiIExvY2tlZCBGZWF0dXJlICgiLGQuZGVtb0xpbWl0Tm90aWNlLmZlYXR1cmVOYW1lLCIpICIpLENlKDUpLG1yKCIgd2l0aCB5b3VyIHNp''@;'; put 'put ''dGUgaWQgKCIsZC5zeXNzaXRlLnZhbHVlLCIpIHRvIGFjdGl2YXRlISAiKSxDZSgxKSxSZSgibmdJZiIsIWQuc3RhcnR1cERhdGFMb2FkZWQpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxmcCxCdSxXXyxSQ2UsT0NlLHpDZSxZQ2UsQkUsSGIsa2Esb3Usc3UsYzIsTmYsYWcsbGcsSzgsWmIsbVNl''@;'; put 'put ''LHhTZV0sc3R5bGVzOlsiYXBwLXJlcXVlc3RzLW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjEwMDAwfWhlYWRlci5hcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmxvZ29bX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgaW1nLndpdGhvdXQtdGV4dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweH0ubG9nb1tfbmdjb250ZW50LSVDT01QJV0gICBpbWcud2l0aC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMTBweH0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7bWFyZ2luLWxlZnQ6MTBweH0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3Bv''@;'; put 'put ''c2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDt6LWluZGV4OjEwNTtiYWNrZ3JvdW5kOnJnYmEoMzMsMzMsMzMsLjUpfS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLWRl''@;'; put 'put ''dGFpbHNbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzozMHB4O3otaW5kZXg6MTEwO2JhY2tncm91bmQ6IzMxNDM1MX0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1kZXRh''@;'; put 'put ''aWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2UwZTBlMDtmb250LXNpemU6MTZweH0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICAubWFpbHRvW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojOGRjNTNlfS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAudXBkYXRlLWtleVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojZmZmO3BhZGRpbmc6MCAxMHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTQ5MDE5NjA3OCl9LmFsZXJ0LWljb24td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowIWltcG9ydGFudH0ubmF2LXRleHRbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde21hcmdpbi1yaWdodDoyMHB4fS5zaWRlYmFyLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweH0uc2lkZWJhci10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25b''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHh9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXItYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnVuc2V0''@;'; put 'put ''fWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZhZmFmYTtvcGFjaXR5Oi45O2xpbmUtaGVpZ2h0OjEuNDVyZW19aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3gtc2hhZG93Omluc2V0IDAgLTNweCAwIHRyYW5zcGFyZW50O3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMnMgZWFzZS1pbn1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2NvbG9yOiNmYWZhZmE7b3BhY2l0eToxfWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGluay5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2Jh''@;'; put 'put ''Y2tncm91bmQ6IzYxNzE3RDtvcGFjaXR5OjE7Ym94LXNoYWRvdzppbnNldCAwIC0zcHggdHJhbnNwYXJlbnR9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MXJlbX0u''@;'; put 'put ''bm90Zltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMTZhNTdhO2NvbG9yOiNmZmZjZmM7Zm9udC1zaXplOjEycHh9LmJ0bi5idG4tc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM2MmE0MjA7YmFja2dyb3VuZC1jb2xvcjojMTZhNTdhIWltcG9ydGFudDtj''@;'; put 'put ''b2xvcjojZmZmfS5idG4uYnRuLXN1Y2Nlc3NbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJhZGQzOTtjb2xvcjojZmZmfS50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9Y2hlY2tib3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpj''@;'; put 'put ''aGVja2VkICsgbGFiZWxbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItY29sb3I6IzYxNzE3ZDtiYWNrZ3JvdW5kLWNvbG9yOiM2MTcxN2Q7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0ubWFp''@;'; put 'put ''bi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MTAwdmghaW1wb3J0YW50fS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV17cGFkZGluZzowcmVtIDFyZW0gMXJlbX0uY29udGVudC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6MCFpbXBvcnRhbnR9Lm5hdkJhclJlc3BbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6IzQ5''@;'; put 'put ''NUE2Nztjb2xvcjojZmZmfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsubmF2QmFyUmVzcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6IzQ5NUE2Nztjb2xvcjojZmZmfS5tYWluLWNvbnRh''@;'; put 'put ''aW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTFbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''LnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgLjVyZW0gMCAxcmVtO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Ym9yZGVyLXJhZGl1czouMTI1cmVtIDAgMCAuMTI1''@;'; put 'put ''cmVtO2NvbG9yOiM5NWM4NGJ9LmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVdLCAuY2FyZC1mb290ZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAwIDB9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWNvbnRh''@;'; put 'put ''aW5lcltfbmdjb250ZW50LWMwXVtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1hcmVhW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjByZW19fSAgLmh0SW52YWxpZHtiYWNrZ3JvdW5kOmJsYWNrIWltcG9ydGFudH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4''@;'; put 'put ''LXdpZHRoOiA0ODBweCl7ICBoMntmb250LXNpemU6LjdyZW0haW1wb3J0YW50fSAgaDN7Zm9udC1zaXplOi43cmVtfX0gIC5uYXYtbGlua3twYWRkaW5nOjByZW0gMXJlbX0gIC5idG4tcHJpbWFyeSAuYnRuLCAgIC5idG4uYnRuLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjojMzE0MzUxO2NvbG9yOiNmZmZ9ICAuYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xMjVyZW07Ym9yZGVyOjFweCBzb2xpZDttaW4td2lkdGg6M3JlbTttYXgt''@;'; put 'put ''d2lkdGg6MTVyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MS41cmVtO2xldHRlci1zcGFj''@;'; put 'put ''aW5nOi4xMmVtO2ZvbnQtc2l6ZTouNXJlbTtmb250LXdlaWdodDo1MDA7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW07Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzE0MzUxfSAgLmJ0bi5idG4tb3V0bGluZXtib3JkZXItY29s''@;'; put 'put ''b3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMzMTQzNTF9ICAuYnRuLmJ0bi1vdXRsaW5lOmhvdmVye2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzQ5NWE2Nztjb2xvcjojZmZmfSAgLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhv''@;'; put 'put ''dmVye2JhY2tncm91bmQtY29sb3I6IzVlYTcxZjtjb2xvcjojZmZmN2Y3O2JvcmRlci1jb2xvcjojOWE5Njk2fSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyIC5pbnB1dHMgdGV4dGFyZWF7Zm9udC1zaXplOjEzcHQ7Ym9yZGVyOjJweCBzb2xpZCAjNDg1OTY3O2JvcmRlci1yYWRpdXM6NHB4''@;'; put 'put ''Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JveC1zaGFkb3c6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowIDAgMCAxNHB4O3BhZGRpbmc6N3B0O3dpZHRoOjI5MHB4fSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyIC5wb3NpdGlvbkNvbnRyb2xze3dpZHRoOjMzM3B4O3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlO3JpZ2h0OjVwdDt0b3A6NTBweDtib3R0b206MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0gIC5odE1vYmlsZUVkaXRvckNvbnRhaW5lci5hY3RpdmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTIwcHg7d2lkdGg6MzUwcHh9ICAuaGFuZHNvbnRhYmxle2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjNweH0gIC5oYW5kc29udGFibGUgdGh7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfSAgLmh0X2Nsb25lX2xlZnQgdGh7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfSAgLmh0X2Ns''@;'; put 'put ''b25lX3RvcCB0aHtib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfSAgLmh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lciB0aHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9ICAuaHRfbWFzdGVy''@;'; put 'put ''IHRyOm50aC1vZi10eXBlKG9kZCk+dGR7YmFja2dyb3VuZC1jb2xvcjojZjNmM2YzO2JvcmRlcjoxcHggc29saWQgcmdiKDE5NywxOTcsMTk3KTtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2IoMjM2LDIzNSwyMzUpfSAgLmh0X21hc3RlciB0cjpudGgtb2YtdHlwZSgybik+dGR7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgcmdiKDE5NywxOTcsMTk3KTtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2IoMjM2LDIzNSwyMzUpfSAgLnd0Qm9yZGVye2JhY2tncm91bmQtY29sb3I6IzQ5NWE2NyFpbXBvcnRhbnR9ICAuaGFuZHNvbnRhYmxlIC5oYW5kc29udGFi''@;'; put 'put ''bGUuaHRfY2xvbmVfdG9wIC53dEhpZGVye3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjA7Ym9yZGVyLWJvdHRvbTozcHggc29saWQgI2Q2ZDNkM30gIC5jb250ZW50LWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNGNUY2RkZ9ICAuY2FyZHtib3gtc2hhZG93OjAgLjEyNXJlbSAjZDdkN2Q3O2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6MHJlbTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50fSAgLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLCAgIC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZHtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3Jk''@;'; put 'put ''ZXItcmFkaXVzOi4xMjVyZW07YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM1NjU2NTY7bWFyZ2luOjA7bWFyZ2luLXRvcDoxcmVtO21heC13aWR0aDoxMDAlO3dpZHRoOjEwMCU7cGFkZGluZzoxNXB4IDE1cHggNTBweH0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290LCAg''@;'; put 'put ''IC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290e2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MCAuNXJlbTtsaW5lLWhlaWdodDpjYWxjKDEuNXJlbSAtIDNweCk7Zm9udC1zaXplOi40NTgzM3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9y''@;'; put 'put ''ZGVyLXRvcDoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjB9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyLCAgIC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290ZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTVweDt0b3A6MnB4fSAgLmRhdGFncmlkLWNv''@;'; put 'put ''bXBhY3QgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkLCAgIC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZCAuZGF0YWdyaWQtaGVhZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY30gIC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3Rv''@;'; put 'put ''cDoxMDAlO2xlZnQ6MDttYXJnaW4tdG9wOi4wODMzMzNyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kOiNmNWY2ZmY7cGFkZGluZzouNXJlbSAwO2JvcmRlcjoxcHggc29saWQgI2NjYztib3gtc2hhZG93OjAgMXB4IC4xMjVyZW0gIzczNzM3MzQwO21p''@;'; put 'put ''bi13aWR0aDo1cmVtO21heC13aWR0aDoxNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDAwfSAgLnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzU2NTY1NjttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0gIC50YWJsZSB0aHtmb250LXNpemU6LjQ1ODMzcmVtO2ZvbnQtd2VpZ2h0OjYwMDtsZXR0ZXItc3BhY2luZzouMDNlbTtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOiNmZmY7dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfSAgLm1vZGFsLWhlYWRlcntib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZTRlNGU0O3BhZGRpbmc6MCAwIC41cmVtO21hcmdpbi1ib3R0b206''@;'; put 'put ''MXJlbX0gIC5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXJ7bWluLWhlaWdodDowcHg7cG9zaXRpb246cmVsYXRpdmV9LmFwcC1sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2FkaW5nLWxvZ29bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDo0MDBweDt3aWR0aDox''@;'; put 'put ''MDAlfSJdfSksY30pKCk7ZnVuY3Rpb24gcGVlKGMpe3JldHVybiBuZXcgQXIoM2UzLCExKX1mdW5jdGlvbiBGcChjKXtzd2l0Y2goYy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGliO2Nhc2UgMTpyZXR1cm4gY1swXTtkZWZhdWx0OnJldHVybiBuZXcgVksoYyl9fWZ1bmN0aW9uIGdlZShj''@;'; put 'put ''LGwsYT1uZXcgTWFwLGQ9bmV3IE1hcCl7Y29uc3QgaD1bXSxmPVtdO2xldCBfPS0xLFQ9bnVsbDtpZihsLmZvckVhY2goVz0+e2NvbnN0IGllPVcuZ2V0KCJvZmZzZXQiKSxnZT1pZT09Xyx3ZT1nZSYmVHx8bmV3IE1hcDtXLmZvckVhY2goKEVlLFplKT0+e2xldCBvdD1aZSxldD1FZTtpZigi''@;'; put 'put ''b2Zmc2V0IiE9PVplKXN3aXRjaChvdD1jLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShvdCxoKSxldCl7Y2FzZSIhIjpldD1hLmdldChaZSk7YnJlYWs7Y2FzZSBBZjpldD1kLmdldChaZSk7YnJlYWs7ZGVmYXVsdDpldD1jLm5vcm1hbGl6ZVN0eWxlVmFsdWUoWmUsb3QsZXQsaCl9d2Uuc2V0KG90''@;'; put 'put ''LGV0KX0pLGdlfHxmLnB1c2god2UpLFQ9d2UsXz1pZX0pLGgubGVuZ3RoKXRocm93IGZ1bmN0aW9uIF9NZShjKXtyZXR1cm4gbmV3IEFyKDM1MDIsITEpfSgpO3JldHVybiBmfWZ1bmN0aW9uIExIKGMsbCxhLGQpe3N3aXRjaChsKXtjYXNlInN0YXJ0IjpjLm9uU3RhcnQoKCk9PmQoYSYmUkgo''@;'; put 'put ''YSwic3RhcnQiLGMpKSk7YnJlYWs7Y2FzZSJkb25lIjpjLm9uRG9uZSgoKT0+ZChhJiZSSChhLCJkb25lIixjKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6Yy5vbkRlc3Ryb3koKCk9PmQoYSYmUkgoYSwiZGVzdHJveSIsYykpKX19ZnVuY3Rpb24gUkgoYyxsLGEpe2NvbnN0IGY9T0goYy5lbGVt''@;'; put 'put ''ZW50LGMudHJpZ2dlck5hbWUsYy5mcm9tU3RhdGUsYy50b1N0YXRlLGx8fGMucGhhc2VOYW1lLGEudG90YWxUaW1lPz9jLnRvdGFsVGltZSwhIWEuZGlzYWJsZWQpLF89Yy5fZGF0YTtyZXR1cm4gbnVsbCE9XyYmKGYuX2RhdGE9XyksZn1mdW5jdGlvbiBPSChjLGwsYSxkLGg9IiIsZj0wLF8p''@;'; put 'put ''e3JldHVybntlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxmcm9tU3RhdGU6YSx0b1N0YXRlOmQscGhhc2VOYW1lOmgsdG90YWxUaW1lOmYsZGlzYWJsZWQ6ISFffX1mdW5jdGlvbiBtMShjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7cmV0dXJuIGR8fGMuc2V0KGwsZD1hKSxkfWZ1bmN0aW9uIG1lZShj''@;'; put 'put ''KXtjb25zdCBsPWMuaW5kZXhPZigiOiIpO3JldHVybltjLnN1YnN0cmluZygxLGwpLGMuc2xpY2UobCsxKV19Y29uc3QgRE1lPSgoKT0+dHlwZW9mIGRvY3VtZW50PiJ1Ij9udWxsOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkoKTtmdW5jdGlvbiBQSChjKXtjb25zdCBsPWMucGFyZW50Tm9k''@;'; put 'put ''ZXx8Yy5ob3N0fHxudWxsO3JldHVybiBsPT09RE1lP251bGw6bH1sZXQgaGc9bnVsbCx2ZWU9ITE7ZnVuY3Rpb24gX2VlKGMsbCl7Zm9yKDtsOyl7aWYobD09PWMpcmV0dXJuITA7bD1QSChsKX1yZXR1cm4hMX1mdW5jdGlvbiBiZWUoYyxsLGEpe2lmKGEpcmV0dXJuIEFycmF5LmZyb20oYy5x''@;'; put 'put ''dWVyeVNlbGVjdG9yQWxsKGwpKTtjb25zdCBkPWMucXVlcnlTZWxlY3RvcihsKTtyZXR1cm4gZD9bZF06W119bGV0IHllZT0oKCk9PntjbGFzcyBje3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShhKXtyZXR1cm4gZnVuY3Rpb24gTE1lKGMpe2hnfHwoaGc9ZnVuY3Rpb24gUk1lKCl7cmV0dXJuIHR5''@;'; put 'put ''cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9keTpudWxsfSgpfHx7fSx2ZWU9ISFoZy5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gaGcuc3R5bGUpO2xldCBsPSEwO3JldHVybiBoZy5zdHlsZSYmIWZ1bmN0aW9uIElNZShjKXtyZXR1cm4iZWJraXQiPT1jLnN1YnN0cmluZygxLDYp''@;'; put 'put ''fShjKSYmKGw9YyBpbiBoZy5zdHlsZSwhbCYmdmVlJiYobD0iV2Via2l0IitjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc2xpY2UoMSlpbiBoZy5zdHlsZSkpLGx9KGEpfW1hdGNoZXNFbGVtZW50KGEsZCl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGEsZCl7cmV0dXJuIF9lZShhLGQp''@;'; put 'put ''fWdldFBhcmVudEVsZW1lbnQoYSl7cmV0dXJuIFBIKGEpfXF1ZXJ5KGEsZCxoKXtyZXR1cm4gYmVlKGEsZCxoKX1jb21wdXRlU3R5bGUoYSxkLGgpe3JldHVybiBofHwiIn1hbmltYXRlKGEsZCxoLGYsXyxUPVtdLFcpe3JldHVybiBuZXcgaWIoaCxmKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRkg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuTk9PUD1uZXcgeWVlLGN9KSgpO2NvbnN0IE9NZT0xZTMsSEg9Im5nLWVudGVyIixqRT0ibmctbGVh''@;'; put 'put ''dmUiLHpFPSJuZy10cmlnZ2VyIixVRT0iLm5nLXRyaWdnZXIiLENlZT0ibmctYW5pbWF0aW5nIixOSD0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gQmYoYyl7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBjO2NvbnN0IGw9Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4h''@;'; put 'put ''bHx8bC5sZW5ndGg8Mj8wOlZIKHBhcnNlRmxvYXQobFsxXSksbFsyXSl9ZnVuY3Rpb24gVkgoYyxsKXtyZXR1cm4icyI9PT1sP2MqT01lOmN9ZnVuY3Rpb24gWkUoYyxsLGEpe3JldHVybiBjLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP2M6ZnVuY3Rpb24gRk1lKGMsbCxhKXtsZXQgaCxm''@;'; put 'put ''PTAsXz0iIjtpZigic3RyaW5nIj09dHlwZW9mIGMpe2NvbnN0IFQ9Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PVQpcmV0dXJuIGwucHVzaChwZWUoKSkse2R1cmF0aW9u''@;'; put 'put ''OjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2g9VkgocGFyc2VGbG9hdChUWzFdKSxUWzJdKTtjb25zdCBXPVRbM107bnVsbCE9VyYmKGY9VkgocGFyc2VGbG9hdChXKSxUWzRdKSk7Y29uc3QgaWU9VFs1XTtpZSYmKF89aWUpfWVsc2UgaD1jO2lmKCFhKXtsZXQgVD0hMSxXPWwubGVuZ3RoO2g8MCYm''@;'; put 'put ''KGwucHVzaChmdW5jdGlvbiBLU2UoKXtyZXR1cm4gbmV3IEFyKDMxMDAsITEpfSgpKSxUPSEwKSxmPDAmJihsLnB1c2goZnVuY3Rpb24gWFNlKCl7cmV0dXJuIG5ldyBBcigzMTAxLCExKX0oKSksVD0hMCksVCYmbC5zcGxpY2UoVywwLHBlZSgpKX1yZXR1cm57ZHVyYXRpb246aCxkZWxheTpm''@;'; put 'put ''LGVhc2luZzpffX0oYyxsLGEpfWZ1bmN0aW9uIFliKGMsbD17fSl7cmV0dXJuIE9iamVjdC5rZXlzKGMpLmZvckVhY2goYT0+e2xbYV09Y1thXX0pLGx9ZnVuY3Rpb24gU2VlKGMpe2NvbnN0IGw9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMoYykuZm9yRWFjaChhPT57bC5zZXQoYSxjW2Fd''@;'; put 'put ''KX0pLGx9ZnVuY3Rpb24gSHAoYyxsPW5ldyBNYXAsYSl7aWYoYSlmb3IobGV0W2QsaF1vZiBhKWwuc2V0KGQsaCk7Zm9yKGxldFtkLGhdb2YgYylsLnNldChkLGgpO3JldHVybiBsfWZ1bmN0aW9uIGhoKGMsbCxhKXtsLmZvckVhY2goKGQsaCk9Pntjb25zdCBmPWpIKGgpO2EmJiFhLmhhcyho''@;'; put 'put ''KSYmYS5zZXQoaCxjLnN0eWxlW2ZdKSxjLnN0eWxlW2ZdPWR9KX1mdW5jdGlvbiBmZyhjLGwpe2wuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9akgoZCk7Yy5zdHlsZVtoXT0iIn0pfWZ1bmN0aW9uIFdiKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpPzE9PWMubGVuZ3RoP2NbMF06TksoYyk6''@;'; put 'put ''Y31jb25zdCBCSD1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiB4ZWUoYyl7bGV0IGw9W107aWYoInN0cmluZyI9PXR5cGVvZiBjKXtsZXQgYTtmb3IoO2E9QkguZXhlYyhjKTspbC5wdXNoKGFbMV0pO0JILmxhc3RJbmRleD0wfXJldHVybiBsfWZ1bmN0aW9u''@;'; put 'put ''IEdiKGMsbCxhKXtjb25zdCBkPWMudG9TdHJpbmcoKSxoPWQucmVwbGFjZShCSCwoZixfKT0+e2xldCBUPWxbX107cmV0dXJuIG51bGw9PVQmJihhLnB1c2goZnVuY3Rpb24gUVNlKGMpe3JldHVybiBuZXcgQXIoMzAwMywhMSl9KCkpLFQ9IiIpLFQudG9TdHJpbmcoKX0pO3JldHVybiBoPT1k''@;'; put 'put ''P2M6aH1mdW5jdGlvbiBZRShjKXtjb25zdCBsPVtdO2xldCBhPWMubmV4dCgpO2Zvcig7IWEuZG9uZTspbC5wdXNoKGEudmFsdWUpLGE9Yy5uZXh0KCk7cmV0dXJuIGx9Y29uc3QgVk1lPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBqSChjKXtyZXR1cm4gYy5yZXBsYWNlKFZNZSwoLi4ubCk9''@;'; put 'put ''PmxbMV0udG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gdjEoYyxsLGEpe3N3aXRjaChsLnR5cGUpe2Nhc2UgNzpyZXR1cm4gYy52aXNpdFRyaWdnZXIobCxhKTtjYXNlIDA6cmV0dXJuIGMudmlzaXRTdGF0ZShsLGEpO2Nhc2UgMTpyZXR1cm4gYy52aXNpdFRyYW5zaXRpb24obCxhKTtjYXNlIDI6''@;'; put 'put ''cmV0dXJuIGMudmlzaXRTZXF1ZW5jZShsLGEpO2Nhc2UgMzpyZXR1cm4gYy52aXNpdEdyb3VwKGwsYSk7Y2FzZSA0OnJldHVybiBjLnZpc2l0QW5pbWF0ZShsLGEpO2Nhc2UgNTpyZXR1cm4gYy52aXNpdEtleWZyYW1lcyhsLGEpO2Nhc2UgNjpyZXR1cm4gYy52aXNpdFN0eWxlKGwsYSk7Y2Fz''@;'; put 'put ''ZSA4OnJldHVybiBjLnZpc2l0UmVmZXJlbmNlKGwsYSk7Y2FzZSA5OnJldHVybiBjLnZpc2l0QW5pbWF0ZUNoaWxkKGwsYSk7Y2FzZSAxMDpyZXR1cm4gYy52aXNpdEFuaW1hdGVSZWYobCxhKTtjYXNlIDExOnJldHVybiBjLnZpc2l0UXVlcnkobCxhKTtjYXNlIDEyOnJldHVybiBjLnZpc2l0''@;'; put 'put ''U3RhZ2dlcihsLGEpO2RlZmF1bHQ6dGhyb3cgZnVuY3Rpb24gZU1lKGMpe3JldHVybiBuZXcgQXIoMzAwNCwhMSl9KCl9fWZ1bmN0aW9uIEVlZShjLGwpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjKVtsXX1jb25zdCBXRT0iKiI7ZnVuY3Rpb24gek1lKGMsbCl7Y29uc3QgYT1b''@;'; put 'put ''XTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZD0+ZnVuY3Rpb24gVU1lKGMsbCxhKXtpZigiOiI9PWNbMF0pe2NvbnN0IFc9ZnVuY3Rpb24gWk1lKGMsbCl7c3dpdGNoKGMpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjps''@;'; put 'put ''ZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKT5wYXJzZUZsb2F0KGEpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGEsZCk9PnBhcnNlRmxvYXQoZCk8cGFyc2VGbG9hdChhKTtkZWZhdWx0OnJldHVybiBsLnB1c2goZnVu''@;'; put 'put ''Y3Rpb24gcE1lKGMpe3JldHVybiBuZXcgQXIoMzAxNiwhMSl9KCkpLCIqID0+ICoifX0oYyxhKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVylyZXR1cm4gdm9pZCBsLnB1c2goVyk7Yz1XfWNvbnN0IGQ9Yy5tYXRjaCgvXihcKnxbLVx3XSspXHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7''@;'; put 'put ''aWYobnVsbD09ZHx8ZC5sZW5ndGg8NClyZXR1cm4gYS5wdXNoKGZ1bmN0aW9uIGZNZShjKXtyZXR1cm4gbmV3IEFyKDMwMTUsITEpfSgpKSxsO2NvbnN0IGg9ZFsxXSxmPWRbMl0sXz1kWzNdO2wucHVzaChrZWUoaCxfKSk7IjwiPT1mWzBdJiYhKGg9PVdFJiZfPT1XRSkmJmwucHVzaChrZWUo''@;'; put 'put ''XyxoKSl9KGQsYSxsKSk6YS5wdXNoKGMpLGF9Y29uc3QgR0U9bmV3IFNldChbInRydWUiLCIxIl0pLCRFPW5ldyBTZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24ga2VlKGMsbCl7Y29uc3QgYT1HRS5oYXMoYyl8fCRFLmhhcyhjKSxkPUdFLmhhcyhsKXx8JEUuaGFzKGwpO3JldHVybihoLGYp''@;'; put 'put ''PT57bGV0IF89Yz09V0V8fGM9PWgsVD1sPT1XRXx8bD09ZjtyZXR1cm4hXyYmYSYmImJvb2xlYW4iPT10eXBlb2YgaCYmKF89aD9HRS5oYXMoYyk6JEUuaGFzKGMpKSwhVCYmZCYmImJvb2xlYW4iPT10eXBlb2YgZiYmKFQ9Zj9HRS5oYXMobCk6JEUuaGFzKGwpKSxfJiZUfX1jb25zdCBZTWU9''@;'; put 'put ''bmV3IFJlZ0V4cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24gekgoYyxsLGEsZCl7cmV0dXJuIG5ldyBXTWUoYykuYnVpbGQobCxhLGQpfWNsYXNzIFdNZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kcml2ZXI9bH1idWlsZChsLGEsZCl7Y29uc3QgaD1uZXcgcU1lKGEpO3JldHVybiB0aGlz''@;'; put 'put ''Ll9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGgpLHYxKHRoaXMsV2IobCksaCl9X3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUobCl7bC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIixsLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLGwuY29sbGVjdGVkU3R5bGVzLnNldCgiIixuZXcg''@;'; put 'put ''TWFwKSxsLmN1cnJlbnRUaW1lPTB9dmlzaXRUcmlnZ2VyKGwsYSl7bGV0IGQ9YS5xdWVyeUNvdW50PTAsaD1hLmRlcENvdW50PTA7Y29uc3QgZj1bXSxfPVtdO3JldHVybiJAIj09bC5uYW1lLmNoYXJBdCgwKSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBuTWUoKXtyZXR1cm4gbmV3IEFyKDMw''@;'; put 'put ''MDYsITEpfSgpKSxsLmRlZmluaXRpb25zLmZvckVhY2goVD0+e2lmKHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoYSksMD09VC50eXBlKXtjb25zdCBXPVQsaWU9Vy5uYW1lO2llLnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGdlPT57Vy5uYW1lPWdlLGYu''@;'; put 'put ''cHVzaCh0aGlzLnZpc2l0U3RhdGUoVyxhKSl9KSxXLm5hbWU9aWV9ZWxzZSBpZigxPT1ULnR5cGUpe2NvbnN0IFc9dGhpcy52aXNpdFRyYW5zaXRpb24oVCxhKTtkKz1XLnF1ZXJ5Q291bnQsaCs9Vy5kZXBDb3VudCxfLnB1c2goVyl9ZWxzZSBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIHJNZSgp''@;'; put 'put ''e3JldHVybiBuZXcgQXIoMzAwNywhMSl9KCkpfSkse3R5cGU6NyxuYW1lOmwubmFtZSxzdGF0ZXM6Zix0cmFuc2l0aW9uczpfLHF1ZXJ5Q291bnQ6ZCxkZXBDb3VudDpoLG9wdGlvbnM6bnVsbH19dmlzaXRTdGF0ZShsLGEpe2NvbnN0IGQ9dGhpcy52aXNpdFN0eWxlKGwuc3R5bGVzLGEpLGg9''@;'; put 'put ''bC5vcHRpb25zJiZsLm9wdGlvbnMucGFyYW1zfHxudWxsO2lmKGQuY29udGFpbnNEeW5hbWljU3R5bGVzKXtjb25zdCBmPW5ldyBTZXQsXz1ofHx7fTtkLnN0eWxlcy5mb3JFYWNoKFQ9PntUIGluc3RhbmNlb2YgTWFwJiZULmZvckVhY2goVz0+e3hlZShXKS5mb3JFYWNoKGllPT57Xy5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eShpZSl8fGYuYWRkKGllKX0pfSl9KSxmLnNpemUmJihZRShmLnZhbHVlcygpKSxhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGlNZShjLGwpe3JldHVybiBuZXcgQXIoMzAwOCwhMSl9KCkpKX1yZXR1cm57dHlwZTowLG5hbWU6bC5uYW1lLHN0eWxlOmQsb3B0aW9uczpoP3twYXJh''@;'; put 'put ''bXM6aH06bnVsbH19dmlzaXRUcmFuc2l0aW9uKGwsYSl7YS5xdWVyeUNvdW50PTAsYS5kZXBDb3VudD0wO2NvbnN0IGQ9djEodGhpcyxXYihsLmFuaW1hdGlvbiksYSk7cmV0dXJue3R5cGU6MSxtYXRjaGVyczp6TWUobC5leHByLGEuZXJyb3JzKSxhbmltYXRpb246ZCxxdWVyeUNvdW50OmEu''@;'; put 'put ''cXVlcnlDb3VudCxkZXBDb3VudDphLmRlcENvdW50LG9wdGlvbnM6cGcobC5vcHRpb25zKX19dmlzaXRTZXF1ZW5jZShsLGEpe3JldHVybnt0eXBlOjIsc3RlcHM6bC5zdGVwcy5tYXAoZD0+djEodGhpcyxkLGEpKSxvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0R3JvdXAobCxhKXtjb25z''@;'; put 'put ''dCBkPWEuY3VycmVudFRpbWU7bGV0IGg9MDtjb25zdCBmPWwuc3RlcHMubWFwKF89PnthLmN1cnJlbnRUaW1lPWQ7Y29uc3QgVD12MSh0aGlzLF8sYSk7cmV0dXJuIGg9TWF0aC5tYXgoaCxhLmN1cnJlbnRUaW1lKSxUfSk7cmV0dXJuIGEuY3VycmVudFRpbWU9aCx7dHlwZTozLHN0ZXBzOmYs''@;'; put 'put ''b3B0aW9uczpwZyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWZ1bmN0aW9uIFhNZShjLGwpe2lmKGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0dXJuIGM7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBVSChaRShjLGwpLmR1cmF0aW9uLDAsIiIpO2Nv''@;'; put 'put ''bnN0IGE9YztpZihhLnNwbGl0KC9ccysvKS5zb21lKGY9PiJ7Ij09Zi5jaGFyQXQoMCkmJiJ7Ij09Zi5jaGFyQXQoMSkpKXtjb25zdCBmPVVIKDAsMCwiIik7cmV0dXJuIGYuZHluYW1pYz0hMCxmLnN0clZhbHVlPWEsZn1jb25zdCBoPVpFKGEsbCk7cmV0dXJuIFVIKGguZHVyYXRpb24saC5k''@;'; put 'put ''ZWxheSxoLmVhc2luZyl9KGwudGltaW5ncyxhLmVycm9ycyk7YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9ZDtsZXQgaCxmPWwuc3R5bGVzP2wuc3R5bGVzOl9zKHt9KTtpZig1PT1mLnR5cGUpaD10aGlzLnZpc2l0S2V5ZnJhbWVzKGYsYSk7ZWxzZXtsZXQgXz1sLnN0eWxlcyxUPSExO2lmKCFf''@;'; put 'put ''KXtUPSEwO2NvbnN0IGllPXt9O2QuZWFzaW5nJiYoaWUuZWFzaW5nPWQuZWFzaW5nKSxfPV9zKGllKX1hLmN1cnJlbnRUaW1lKz1kLmR1cmF0aW9uK2QuZGVsYXk7Y29uc3QgVz10aGlzLnZpc2l0U3R5bGUoXyxhKTtXLmlzRW1wdHlTdGVwPVQsaD1XfXJldHVybiBhLmN1cnJlbnRBbmltYXRl''@;'; put 'put ''VGltaW5ncz1udWxsLHt0eXBlOjQsdGltaW5nczpkLHN0eWxlOmgsb3B0aW9uczpudWxsfX12aXNpdFN0eWxlKGwsYSl7Y29uc3QgZD10aGlzLl9tYWtlU3R5bGVBc3QobCxhKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChkLGEpLGR9X21ha2VTdHlsZUFzdChsLGEpe2NvbnN0IGQ9''@;'; put 'put ''W10saD1BcnJheS5pc0FycmF5KGwuc3R5bGVzKT9sLnN0eWxlczpbbC5zdHlsZXNdO2ZvcihsZXQgVCBvZiBoKSJzdHJpbmciPT10eXBlb2YgVD9UPT09QWY/ZC5wdXNoKFQpOmEuZXJyb3JzLnB1c2gobmV3IEFyKDMwMDIsITEpKTpkLnB1c2goU2VlKFQpKTtsZXQgZj0hMSxfPW51bGw7cmV0''@;'; put 'put ''dXJuIGQuZm9yRWFjaChUPT57aWYoVCBpbnN0YW5jZW9mIE1hcCYmKFQuaGFzKCJlYXNpbmciKSYmKF89VC5nZXQoImVhc2luZyIpLFQuZGVsZXRlKCJlYXNpbmciKSksIWYpKWZvcihsZXQgVyBvZiBULnZhbHVlcygpKWlmKFcudG9TdHJpbmcoKS5pbmRleE9mKCJ7eyIpPj0wKXtmPSEwO2Jy''@;'; put 'put ''ZWFrfX0pLHt0eXBlOjYsc3R5bGVzOmQsZWFzaW5nOl8sb2Zmc2V0Omwub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpmLG9wdGlvbnM6bnVsbH19X3ZhbGlkYXRlU3R5bGVBc3QobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzO2xldCBoPWEuY3VycmVudFRpbWUsZj1h''@;'; put 'put ''LmN1cnJlbnRUaW1lO2QmJmY+MCYmKGYtPWQuZHVyYXRpb24rZC5kZWxheSksbC5zdHlsZXMuZm9yRWFjaChfPT57InN0cmluZyIhPXR5cGVvZiBfJiZfLmZvckVhY2goKFQsVyk9Pntjb25zdCBpZT1hLmNvbGxlY3RlZFN0eWxlcy5nZXQoYS5jdXJyZW50UXVlcnlTZWxlY3RvciksZ2U9aWUu''@;'; put 'put ''Z2V0KFcpO2xldCB3ZT0hMDtnZSYmKGYhPWgmJmY+PWdlLnN0YXJ0VGltZSYmaDw9Z2UuZW5kVGltZSYmKGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gc01lKGMsbCxhLGQsaCl7cmV0dXJuIG5ldyBBcigzMDEwLCExKX0oKSksd2U9ITEpLGY9Z2Uuc3RhcnRUaW1lKSx3ZSYmaWUuc2V0KFcse3N0''@;'; put 'put ''YXJ0VGltZTpmLGVuZFRpbWU6aH0pLGEub3B0aW9ucyYmZnVuY3Rpb24gTk1lKGMsbCxhKXtjb25zdCBkPWwucGFyYW1zfHx7fSxoPXhlZShjKTtoLmxlbmd0aCYmaC5mb3JFYWNoKGY9PntkLmhhc093blByb3BlcnR5KGYpfHxhLnB1c2goZnVuY3Rpb24gSlNlKGMpe3JldHVybiBuZXcgQXIo''@;'; put 'put ''MzAwMSwhMSl9KCkpfSl9KFQsYS5vcHRpb25zLGEuZXJyb3JzKX0pfSl9dmlzaXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPXt0eXBlOjUsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWEuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGFNZSgp''@;'; put 'put ''e3JldHVybiBuZXcgQXIoMzAxMSwhMSl9KCkpLGQ7bGV0IGY9MDtjb25zdCBfPVtdO2xldCBUPSExLFc9ITEsaWU9MDtjb25zdCBnZT1sLnN0ZXBzLm1hcChrdD0+e2NvbnN0IFN0PXRoaXMuX21ha2VTdHlsZUFzdChrdCxhKTtsZXQgUXQ9bnVsbCE9U3Qub2Zmc2V0P1N0Lm9mZnNldDpmdW5j''@;'; put 'put ''dGlvbiBLTWUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBudWxsO2xldCBsPW51bGw7aWYoQXJyYXkuaXNBcnJheShjKSljLmZvckVhY2goYT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJmEuaGFzKCJvZmZzZXQiKSl7Y29uc3QgZD1hO2w9cGFyc2VGbG9hdChkLmdldCgib2Zmc2V0''@;'; put 'put ''IikpLGQuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBNYXAmJmMuaGFzKCJvZmZzZXQiKSl7Y29uc3QgYT1jO2w9cGFyc2VGbG9hdChhLmdldCgib2Zmc2V0IikpLGEuZGVsZXRlKCJvZmZzZXQiKX1yZXR1cm4gbH0oU3Quc3R5bGVzKSxubj0wO3JldHVybiBudWxs''@;'; put 'put ''IT1RdCYmKGYrKyxubj1TdC5vZmZzZXQ9UXQpLFc9V3x8bm48MHx8bm4+MSxUPVR8fG5uPGllLGllPW5uLF8ucHVzaChubiksU3R9KTtXJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGxNZSgpe3JldHVybiBuZXcgQXIoMzAxMiwhMSl9KCkpLFQmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gY01l''@;'; put 'put ''KCl7cmV0dXJuIG5ldyBBcigzMjAwLCExKX0oKSk7Y29uc3Qgd2U9bC5zdGVwcy5sZW5ndGg7bGV0IEVlPTA7Zj4wJiZmPHdlP2EuZXJyb3JzLnB1c2goZnVuY3Rpb24gdU1lKCl7cmV0dXJuIG5ldyBBcigzMjAyLCExKX0oKSk6MD09ZiYmKEVlPTEvKHdlLTEpKTtjb25zdCBaZT13ZS0xLG90''@;'; put 'put ''PWEuY3VycmVudFRpbWUsZXQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MseXQ9ZXQuZHVyYXRpb247cmV0dXJuIGdlLmZvckVhY2goKGt0LFN0KT0+e2NvbnN0IFF0PUVlPjA/U3Q9PVplPzE6RWUqU3Q6X1tTdF0sbm49UXQqeXQ7YS5jdXJyZW50VGltZT1vdCtldC5kZWxheStubixldC5kdXJh''@;'; put 'put ''dGlvbj1ubix0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGt0LGEpLGt0Lm9mZnNldD1RdCxkLnN0eWxlcy5wdXNoKGt0KX0pLGR9dmlzaXRSZWZlcmVuY2UobCxhKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjp2MSh0aGlzLFdiKGwuYW5pbWF0aW9uKSxhKSxvcHRpb25zOnBnKGwub3B0aW9ucyl9''@;'; put 'put ''fXZpc2l0QW5pbWF0ZUNoaWxkKGwsYSl7cmV0dXJuIGEuZGVwQ291bnQrKyx7dHlwZTo5LG9wdGlvbnM6cGcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKGwsYSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sYSksb3B0aW9uczpw''@;'; put 'put ''ZyhsLm9wdGlvbnMpfX12aXNpdFF1ZXJ5KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRRdWVyeVNlbGVjdG9yLGg9bC5vcHRpb25zfHx7fTthLnF1ZXJ5Q291bnQrKyxhLmN1cnJlbnRRdWVyeT1sO2NvbnN0W2YsX109ZnVuY3Rpb24gR01lKGMpe2NvbnN0IGw9ISFjLnNwbGl0KC9ccyosXHMqLyku''@;'; put 'put ''ZmluZChhPT4iOnNlbGYiPT1hKTtyZXR1cm4gbCYmKGM9Yy5yZXBsYWNlKFlNZSwiIikpLGM9Yy5yZXBsYWNlKC9AXCovZyxVRSkucmVwbGFjZSgvQFx3Ky9nLGE9PlVFKyItIithLnNsaWNlKDEpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csTkgpLFtjLGxdfShsLnNlbGVjdG9yKTthLmN1cnJl''@;'; put 'put ''bnRRdWVyeVNlbGVjdG9yPWQubGVuZ3RoP2QrIiAiK2Y6ZixtMShhLmNvbGxlY3RlZFN0eWxlcyxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG5ldyBNYXApO2NvbnN0IFQ9djEodGhpcyxXYihsLmFuaW1hdGlvbiksYSk7cmV0dXJuIGEuY3VycmVudFF1ZXJ5PW51bGwsYS5jdXJyZW50UXVlcnlT''@;'; put 'put ''ZWxlY3Rvcj1kLHt0eXBlOjExLHNlbGVjdG9yOmYsbGltaXQ6aC5saW1pdHx8MCxvcHRpb25hbDohIWgub3B0aW9uYWwsaW5jbHVkZVNlbGY6XyxhbmltYXRpb246VCxvcmlnaW5hbFNlbGVjdG9yOmwuc2VsZWN0b3Isb3B0aW9uczpwZyhsLm9wdGlvbnMpfX12aXNpdFN0YWdnZXIobCxhKXth''@;'; put 'put ''LmN1cnJlbnRRdWVyeXx8YS5lcnJvcnMucHVzaChmdW5jdGlvbiBkTWUoKXtyZXR1cm4gbmV3IEFyKDMwMTMsITEpfSgpKTtjb25zdCBkPSJmdWxsIj09PWwudGltaW5ncz97ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiZnVsbCJ9OlpFKGwudGltaW5ncyxhLmVycm9ycywhMCk7cmV0dXJu''@;'; put 'put ''e3R5cGU6MTIsYW5pbWF0aW9uOnYxKHRoaXMsV2IobC5hbmltYXRpb24pLGEpLHRpbWluZ3M6ZCxvcHRpb25zOm51bGx9fX1jbGFzcyBxTWV7Y29uc3RydWN0b3IobCl7dGhpcy5lcnJvcnM9bCx0aGlzLnF1ZXJ5Q291bnQ9MCx0aGlzLmRlcENvdW50PTAsdGhpcy5jdXJyZW50VHJhbnNpdGlv''@;'; put 'put ''bj1udWxsLHRoaXMuY3VycmVudFF1ZXJ5PW51bGwsdGhpcy5jdXJyZW50UXVlcnlTZWxlY3Rvcj1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdGhpcy5vcHRpb25zPW51bGwsdGhpcy51''@;'; put 'put ''bnN1cHBvcnRlZENTU1Byb3BlcnRpZXNGb3VuZD1uZXcgU2V0fX1mdW5jdGlvbiBwZyhjKXtyZXR1cm4gYz8oYz1ZYihjKSkucGFyYW1zJiYoYy5wYXJhbXM9ZnVuY3Rpb24gJE1lKGMpe3JldHVybiBjP1liKGMpOm51bGx9KGMucGFyYW1zKSk6Yz17fSxjfWZ1bmN0aW9uIFVIKGMsbCxhKXty''@;'; put 'put ''ZXR1cm57ZHVyYXRpb246YyxkZWxheTpsLGVhc2luZzphfX1mdW5jdGlvbiBaSChjLGwsYSxkLGgsZixfPW51bGwsVD0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50OmMsa2V5ZnJhbWVzOmwscHJlU3R5bGVQcm9wczphLHBvc3RTdHlsZVByb3BzOmQsZHVyYXRpb246aCxkZWxheTpmLHRvdGFs''@;'; put 'put ''VGltZTpoK2YsZWFzaW5nOl8sc3ViVGltZWxpbmU6VH19Y2xhc3MgcUV7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQobCl7cmV0dXJuIHRoaXMuX21hcC5nZXQobCl8fFtdfWFwcGVuZChsLGEpe2xldCBkPXRoaXMuX21hcC5nZXQobCk7ZHx8dGhpcy5fbWFwLnNldChsLGQ9''@;'; put 'put ''W10pLGQucHVzaCguLi5hKX1oYXMobCl7cmV0dXJuIHRoaXMuX21hcC5oYXMobCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19Y29uc3QgZXhlPW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxueGU9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9uIFlIKGMsbCxhLGQsaCxmPW5l''@;'; put 'put ''dyBNYXAsXz1uZXcgTWFwLFQsVyxpZT1bXSl7cmV0dXJuKG5ldyByeGUpLmJ1aWxkS2V5ZnJhbWVzKGMsbCxhLGQsaCxmLF8sVCxXLGllKX1jbGFzcyByeGV7YnVpbGRLZXlmcmFtZXMobCxhLGQsaCxmLF8sVCxXLGllLGdlPVtdKXtpZT1pZXx8bmV3IHFFO2NvbnN0IHdlPW5ldyBXSChsLGEs''@;'; put 'put ''aWUsaCxmLGdlLFtdKTt3ZS5vcHRpb25zPVc7Y29uc3QgRWU9Vy5kZWxheT9CZihXLmRlbGF5KTowO3dlLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKEVlKSx3ZS5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFtfXSxudWxsLHdlLmVycm9ycyxXKSx2MSh0aGlzLGQsd2UpO2NvbnN0''@;'; put 'put ''IFplPXdlLnRpbWVsaW5lcy5maWx0ZXIob3Q9Pm90LmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKFplLmxlbmd0aCYmVC5zaXplKXtsZXQgb3Q7Zm9yKGxldCBldD1aZS5sZW5ndGgtMTtldD49MDtldC0tKXtjb25zdCB5dD1aZVtldF07aWYoeXQuZWxlbWVudD09PWEpe290PXl0O2JyZWFrfX1v''@;'; put 'put ''dCYmIW90LmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCkmJm90LnNldFN0eWxlcyhbVF0sbnVsbCx3ZS5lcnJvcnMsVyl9cmV0dXJuIFplLmxlbmd0aD9aZS5tYXAob3Q9Pm90LmJ1aWxkS2V5ZnJhbWVzKCkpOltaSChhLFtdLFtdLFtdLDAsRWUsIiIsITEpXX12aXNpdFRyaWdnZXIobCxhKXt9''@;'; put 'put ''dmlzaXRTdGF0ZShsLGEpe312aXNpdFRyYW5zaXRpb24obCxhKXt9dmlzaXRBbmltYXRlQ2hpbGQobCxhKXtjb25zdCBkPWEuc3ViSW5zdHJ1Y3Rpb25zLmdldChhLmVsZW1lbnQpO2lmKGQpe2NvbnN0IGg9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyksZj1hLmN1cnJlbnRUaW1lbGlu''@;'; put 'put ''ZS5jdXJyZW50VGltZSxfPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGQsaCxoLm9wdGlvbnMpO2YhPV8mJmEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKF8pfWEucHJldmlvdXNOb2RlPWx9dmlzaXRBbmltYXRlUmVmKGwsYSl7Y29uc3QgZD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRp''@;'; put 'put ''b25zKTtkLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLHRoaXMuX2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKFtsLm9wdGlvbnMsbC5hbmltYXRpb24ub3B0aW9uc10sYSxkKSx0aGlzLnZpc2l0UmVmZXJlbmNlKGwuYW5pbWF0aW9uLGQpLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGQu''@;'; put 'put ''Y3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxhLnByZXZpb3VzTm9kZT1sfV9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhsLGEsZCl7Zm9yKGNvbnN0IGggb2YgbCl7Y29uc3QgZj1oPy5kZWxheTtpZihmKXtjb25zdCBfPSJudW1iZXIiPT10eXBlb2YgZj9mOkJmKEdiKGYsaD8ucGFyYW1z''@;'; put 'put ''Pz97fSxhLmVycm9ycykpO2QuZGVsYXlOZXh0U3RlcChfKX19fV92aXNpdFN1Ykluc3RydWN0aW9ucyhsLGEsZCl7bGV0IGY9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgXz1udWxsIT1kLmR1cmF0aW9uP0JmKGQuZHVyYXRpb24pOm51bGwsVD1udWxsIT1kLmRlbGF5P0Jm''@;'; put 'put ''KGQuZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1fJiZsLmZvckVhY2goVz0+e2NvbnN0IGllPWEuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKFcsXyxUKTtmPU1hdGgubWF4KGYsaWUuZHVyYXRpb24raWUuZGVsYXkpfSksZn12aXNpdFJlZmVyZW5jZShsLGEpe2EudXBkYXRlT3B0aW9ucyhs''@;'; put 'put ''Lm9wdGlvbnMsITApLHYxKHRoaXMsbC5hbmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bH12aXNpdFNlcXVlbmNlKGwsYSl7Y29uc3QgZD1hLnN1YkNvbnRleHRDb3VudDtsZXQgaD1hO2NvbnN0IGY9bC5vcHRpb25zO2lmKGYmJihmLnBhcmFtc3x8Zi5kZWxheSkmJihoPWEuY3JlYXRlU3Vi''@;'; put 'put ''Q29udGV4dChmKSxoLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPWYuZGVsYXkpKXs2PT1oLnByZXZpb3VzTm9kZS50eXBlJiYoaC5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksaC5wcmV2aW91c05vZGU9S0UpO2NvbnN0IF89QmYoZi5kZWxheSk7aC5k''@;'; put 'put ''ZWxheU5leHRTdGVwKF8pfWwuc3RlcHMubGVuZ3RoJiYobC5zdGVwcy5mb3JFYWNoKF89PnYxKHRoaXMsXyxoKSksaC5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaC5zdWJDb250ZXh0Q291bnQ+ZCYmaC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksYS5wcmV2''@;'; put 'put ''aW91c05vZGU9bH12aXNpdEdyb3VwKGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBmPWwub3B0aW9ucyYmbC5vcHRpb25zLmRlbGF5P0JmKGwub3B0aW9ucy5kZWxheSk6MDtsLnN0ZXBzLmZvckVhY2goXz0+e2NvbnN0IFQ9YS5jcmVh''@;'; put 'put ''dGVTdWJDb250ZXh0KGwub3B0aW9ucyk7ZiYmVC5kZWxheU5leHRTdGVwKGYpLHYxKHRoaXMsXyxUKSxoPU1hdGgubWF4KGgsVC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGQucHVzaChULmN1cnJlbnRUaW1lbGluZSl9KSxkLmZvckVhY2goXz0+YS5jdXJyZW50VGltZWxpbmUubWVy''@;'; put 'put ''Z2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhfKSksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCksYS5wcmV2aW91c05vZGU9bH1fdmlzaXRUaW1pbmcobCxhKXtpZihsLmR5bmFtaWMpe2NvbnN0IGQ9bC5zdHJWYWx1ZTtyZXR1cm4gWkUoYS5wYXJhbXM/R2IoZCxhLnBhcmFtcyxhLmVy''@;'; put 'put ''cm9ycyk6ZCxhLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOmwuZHVyYXRpb24sZGVsYXk6bC5kZWxheSxlYXNpbmc6bC5lYXNpbmd9fXZpc2l0QW5pbWF0ZShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcobC50aW1pbmdzLGEpLGg9YS5jdXJy''@;'; put 'put ''ZW50VGltZWxpbmU7ZC5kZWxheSYmKGEuaW5jcmVtZW50VGltZShkLmRlbGF5KSxoLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtjb25zdCBmPWwuc3R5bGU7NT09Zi50eXBlP3RoaXMudmlzaXRLZXlmcmFtZXMoZixhKTooYS5pbmNyZW1lbnRUaW1lKGQuZHVyYXRpb24pLHRoaXMudmlzaXRT''@;'; put 'put ''dHlsZShmLGEpLGguYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsYS5wcmV2aW91c05vZGU9bH12aXNpdFN0eWxlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZSxoPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzOyFoJiZkLmhhc0N1cnJl''@;'; put 'put ''bnRTdHlsZVByb3BlcnRpZXMoKSYmZC5mb3J3YXJkRnJhbWUoKTtjb25zdCBmPWgmJmguZWFzaW5nfHxsLmVhc2luZztsLmlzRW1wdHlTdGVwP2QuYXBwbHlFbXB0eVN0ZXAoZik6ZC5zZXRTdHlsZXMobC5zdHlsZXMsZixhLmVycm9ycyxhLm9wdGlvbnMpLGEucHJldmlvdXNOb2RlPWx9dmlz''@;'; put 'put ''aXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzLGg9YS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24sZj1kLmR1cmF0aW9uLFQ9YS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO1QuZWFzaW5nPWQuZWFzaW5nLGwuc3R5bGVzLmZvckVhY2go''@;'; put 'put ''Vz0+e1QuZm9yd2FyZFRpbWUoKFcub2Zmc2V0fHwwKSpmKSxULnNldFN0eWxlcyhXLnN0eWxlcyxXLmVhc2luZyxhLmVycm9ycyxhLm9wdGlvbnMpLFQuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCl9KSxhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKFQpLGEu''@;'; put 'put ''dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGgrZiksYS5wcmV2aW91c05vZGU9bH12aXNpdFF1ZXJ5KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxoPWwub3B0aW9uc3x8e30sZj1oLmRlbGF5P0JmKGguZGVsYXkpOjA7ZiYmKDY9PT1hLnByZXZpb3VzTm9kZS50''@;'; put 'put ''eXBlfHwwPT1kJiZhLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoYS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksYS5wcmV2aW91c05vZGU9S0UpO2xldCBfPWQ7Y29uc3QgVD1hLmludm9rZVF1ZXJ5KGwuc2VsZWN0b3IsbC5v''@;'; put 'put ''cmlnaW5hbFNlbGVjdG9yLGwubGltaXQsbC5pbmNsdWRlU2VsZiwhIWgub3B0aW9uYWwsYS5lcnJvcnMpO2EuY3VycmVudFF1ZXJ5VG90YWw9VC5sZW5ndGg7bGV0IFc9bnVsbDtULmZvckVhY2goKGllLGdlKT0+e2EuY3VycmVudFF1ZXJ5SW5kZXg9Z2U7Y29uc3Qgd2U9YS5jcmVhdGVTdWJD''@;'; put 'put ''b250ZXh0KGwub3B0aW9ucyxpZSk7ZiYmd2UuZGVsYXlOZXh0U3RlcChmKSxpZT09PWEuZWxlbWVudCYmKFc9d2UuY3VycmVudFRpbWVsaW5lKSx2MSh0aGlzLGwuYW5pbWF0aW9uLHdlKSx3ZS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksXz1NYXRoLm1heChfLHdl''@;'; put 'put ''LmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSl9KSxhLmN1cnJlbnRRdWVyeUluZGV4PTAsYS5jdXJyZW50UXVlcnlUb3RhbD0wLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKF8pLFcmJihhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKFcpLGEuY3Vy''@;'; put 'put ''cmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3RhZ2dlcihsLGEpe2NvbnN0IGQ9YS5wYXJlbnRDb250ZXh0LGg9YS5jdXJyZW50VGltZWxpbmUsZj1sLnRpbWluZ3MsXz1NYXRoLmFicyhmLmR1cmF0aW9uKSxUPV8qKGEuY3VycmVu''@;'; put 'put ''dFF1ZXJ5VG90YWwtMSk7bGV0IFc9XyphLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChmLmR1cmF0aW9uPDA/InJldmVyc2UiOmYuZWFzaW5nKXtjYXNlInJldmVyc2UiOlc9VC1XO2JyZWFrO2Nhc2UiZnVsbCI6Vz1kLmN1cnJlbnRTdGFnZ2VyVGltZX1jb25zdCBnZT1hLmN1cnJlbnRUaW1l''@;'; put 'put ''bGluZTtXJiZnZS5kZWxheU5leHRTdGVwKFcpO2NvbnN0IHdlPWdlLmN1cnJlbnRUaW1lO3YxKHRoaXMsbC5hbmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bCxkLmN1cnJlbnRTdGFnZ2VyVGltZT1oLmN1cnJlbnRUaW1lLXdlKyhoLnN0YXJ0VGltZS1kLmN1cnJlbnRUaW1lbGluZS5zdGFy''@;'; put 'put ''dFRpbWUpfX1jb25zdCBLRT17fTtjbGFzcyBXSHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyxULFcpe3RoaXMuX2RyaXZlcj1sLHRoaXMuZWxlbWVudD1hLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWQsdGhpcy5fZW50ZXJDbGFzc05hbWU9aCx0aGlzLl9sZWF2ZUNsYXNzTmFtZT1mLHRoaXMuZXJy''@;'; put 'put ''b3JzPV8sdGhpcy50aW1lbGluZXM9VCx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPUtFLHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0''@;'; put 'put ''aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1XfHxuZXcgWEUodGhpcy5fZHJpdmVyLGEsMCksVC5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJh''@;'; put 'put ''bXN9dXBkYXRlT3B0aW9ucyhsLGEpe2lmKCFsKXJldHVybjtjb25zdCBkPWw7bGV0IGg9dGhpcy5vcHRpb25zO251bGwhPWQuZHVyYXRpb24mJihoLmR1cmF0aW9uPUJmKGQuZHVyYXRpb24pKSxudWxsIT1kLmRlbGF5JiYoaC5kZWxheT1CZihkLmRlbGF5KSk7Y29uc3QgZj1kLnBhcmFtcztp''@;'; put 'put ''ZihmKXtsZXQgXz1oLnBhcmFtcztffHwoXz10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKFQ9PnsoIWF8fCFfLmhhc093blByb3BlcnR5KFQpKSYmKF9bVF09R2IoZltUXSxfLHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7Y29uc3QgbD17fTtp''@;'; put 'put ''Zih0aGlzLm9wdGlvbnMpe2NvbnN0IGE9dGhpcy5vcHRpb25zLnBhcmFtcztpZihhKXtjb25zdCBkPWwucGFyYW1zPXt9O09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e2RbaF09YVtoXX0pfX1yZXR1cm4gbH1jcmVhdGVTdWJDb250ZXh0KGw9bnVsbCxhLGQpe2NvbnN0IGg9YXx8dGhpcy5l''@;'; put 'put ''bGVtZW50LGY9bmV3IFdIKHRoaXMuX2RyaXZlcixoLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVyQ2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsoaCxkfHwwKSk7cmV0dXJuIGYu''@;'; put 'put ''cHJldmlvdXNOb2RlPXRoaXMucHJldmlvdXNOb2RlLGYuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzLGYub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLGYudXBkYXRlT3B0aW9ucyhsKSxmLmN1cnJlbnRRdWVyeUluZGV4PXRoaXMuY3VycmVudFF1''@;'; put 'put ''ZXJ5SW5kZXgsZi5jdXJyZW50UXVlcnlUb3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLGYucGFyZW50Q29udGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50KyssZn10cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPUtFLHRoaXMuY3VycmVu''@;'; put 'put ''dFRpbWVsaW5lPXRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LGwpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfWFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShsLGEsZCl7Y29uc3QgaD17ZHVyYXRp''@;'; put 'put ''b246YT8/bC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoZD8/MCkrbC5kZWxheSxlYXNpbmc6IiJ9LGY9bmV3IGl4ZSh0aGlzLl9kcml2ZXIsbC5lbGVtZW50LGwua2V5ZnJhbWVzLGwucHJlU3R5bGVQcm9wcyxsLnBvc3RTdHlsZVByb3BzLGgsbC5z''@;'; put 'put ''dHJldGNoU3RhcnRpbmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2goZiksaH1pbmNyZW1lbnRUaW1lKGwpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK2wpfWRlbGF5TmV4dFN0ZXAobCl7bD4wJiZ0aGlz''@;'; put 'put ''LmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKGwpfWludm9rZVF1ZXJ5KGwsYSxkLGgsZixfKXtsZXQgVD1bXTtpZihoJiZULnB1c2godGhpcy5lbGVtZW50KSxsLmxlbmd0aD4wKXtsPShsPWwucmVwbGFjZShleGUsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSkucmVwbGFjZShueGUs''@;'; put 'put ''Ii4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgaWU9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVudCxsLDEhPWQpOzAhPT1kJiYoaWU9ZDwwP2llLnNsaWNlKGllLmxlbmd0aCtkLGllLmxlbmd0aCk6aWUuc2xpY2UoMCxkKSksVC5wdXNoKC4uLmllKX1yZXR1cm4hZiYmMD09VC5s''@;'; put 'put ''ZW5ndGgmJl8ucHVzaChmdW5jdGlvbiBoTWUoYyl7cmV0dXJuIG5ldyBBcigzMDE0LCExKX0oKSksVH19Y2xhc3MgWEV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdGFydFRpbWU9ZCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNM''@;'; put 'put ''b29rdXA9aCx0aGlzLmR1cmF0aW9uPTAsdGhpcy5lYXNpbmc9bnVsbCx0aGlzLl9wcmV2aW91c0tleWZyYW1lPW5ldyBNYXAsdGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1tYXJ5PW5ldyBNYXAsdGhpcy5fbG9jYWxU''@;'; put 'put ''aW1lbGluZVN0eWxlcz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdTdHlsZXM9bmV3IE1hcCx0aGlzLl9iYWNrRmlsbD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGlu''@;'; put 'put ''ZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuZ2V0KGEpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fbG9jYWxUaW1lbGlu''@;'; put 'put ''ZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGEsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykpLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWNvbnRhaW5zQW5pbWF0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2Fz''@;'; put 'put ''ZSAxOnJldHVybiB0aGlzLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKTtkZWZhdWx0OnJldHVybiEwfX1oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zaXplPjB9Z2V0IGN1cnJlbnRUaW1lKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1l''@;'; put 'put ''K3RoaXMuZHVyYXRpb259ZGVsYXlOZXh0U3RlcChsKXtjb25zdCBhPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmdGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplO3RoaXMuZHVyYXRpb258fGE/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZStsKSxhJiZ0aGlzLnNuYXBzaG90Q3Vy''@;'; put 'put ''cmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9bH1mb3JrKGwsYSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IFhFKHRoaXMuX2RyaXZlcixsLGF8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX1fbG9hZEtleWZy''@;'; put 'put ''YW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1''@;'; put 'put ''cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcy5zZXQodGhpcy5kdXJhdGlvbix0aGlzLl9jdXJyZW50S2V5ZnJhbWUpKX1mb3J3YXJkRnJhbWUoKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWZvcndhcmRUaW1lKGwpe3RoaXMuYXBwbHlTdHlsZXNU''@;'; put 'put ''b0tleWZyYW1lKCksdGhpcy5kdXJhdGlvbj1sLHRoaXMuX2xvYWRLZXlmcmFtZSgpfV91cGRhdGVTdHlsZShsLGEpe3RoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhpcy5fc3R5bGVTdW1tYXJ5LnNldChsLHt0''@;'; put 'put ''aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6YX0pfWFsbG93T25seVRpbWVsaW5lU3R5bGVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1hcHBseUVtcHR5U3RlcChsKXtsJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNl''@;'; put 'put ''dCgiZWFzaW5nIixsKTtmb3IobGV0W2EsZF1vZiB0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9iYWNrRmlsbC5zZXQoYSxkfHxBZiksdGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLEFmKTt0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZy''@;'; put 'put ''YW1lfXNldFN0eWxlcyhsLGEsZCxoKXthJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixhKTtjb25zdCBmPWgmJmgucGFyYW1zfHx7fSxfPWZ1bmN0aW9uIG94ZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtsZXQgZDtyZXR1cm4gYy5mb3JFYWNoKGg9PntpZigiKiI9PT1oKXtk''@;'; put 'put ''PWR8fGwua2V5cygpO2ZvcihsZXQgZiBvZiBkKWEuc2V0KGYsQWYpfWVsc2UgSHAoaCxhKX0pLGF9KGwsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO2ZvcihsZXRbVCxXXW9mIF8pe2NvbnN0IGllPUdiKFcsZixkKTt0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChULGllKSx0aGlzLl9sb2Nh''@;'; put 'put ''bFRpbWVsaW5lU3R5bGVzLmhhcyhUKXx8dGhpcy5fYmFja0ZpbGwuc2V0KFQsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuZ2V0KFQpPz9BZiksdGhpcy5fdXBkYXRlU3R5bGUoVCxpZSl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRo''@;'; put 'put ''aXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxsKX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGEp''@;'; put 'put ''fHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsbCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFtsLGFdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChsLGEpLHRoaXMuX3VwZGF0ZVN0eWxlKGwsYSl9Z2V0RmluYWxLZXlm''@;'; put 'put ''cmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGEgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKWwucHVzaChhKTtyZXR1cm4gbH1tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGwpe2wu''@;'; put 'put ''X3N0eWxlU3VtbWFyeS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD10aGlzLl9zdHlsZVN1bW1hcnkuZ2V0KGQpOyghaHx8YS50aW1lPmgudGltZSkmJnRoaXMuX3VwZGF0ZVN0eWxlKGQsYS52YWx1ZSl9KX1idWlsZEtleWZyYW1lcygpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7Y29u''@;'; put 'put ''c3QgbD1uZXcgU2V0LGE9bmV3IFNldCxkPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb247bGV0IGg9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goKFQsVyk9Pntjb25zdCBpZT1IcChULG5ldyBNYXAsdGhpcy5fYmFja0ZpbGwpO2llLmZvckVhY2goKGdlLHdl''@;'; put 'put ''KT0+eyIhIj09PWdlP2wuYWRkKHdlKTpnZT09PUFmJiZhLmFkZCh3ZSl9KSxkfHxpZS5zZXQoIm9mZnNldCIsVy90aGlzLmR1cmF0aW9uKSxoLnB1c2goaWUpfSk7Y29uc3QgZj1sLnNpemU/WUUobC52YWx1ZXMoKSk6W10sXz1hLnNpemU/WUUoYS52YWx1ZXMoKSk6W107aWYoZCl7Y29uc3Qg''@;'; put 'put ''VD1oWzBdLFc9bmV3IE1hcChUKTtULnNldCgib2Zmc2V0IiwwKSxXLnNldCgib2Zmc2V0IiwxKSxoPVtULFddfXJldHVybiBaSCh0aGlzLmVsZW1lbnQsaCxmLF8sdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9fWNsYXNzIGl4ZSBleHRlbmRzIFhFe2NvbnN0''@;'; put 'put ''cnVjdG9yKGwsYSxkLGgsZixfLFQ9ITEpe3N1cGVyKGwsYSxfLmRlbGF5KSx0aGlzLmtleWZyYW1lcz1kLHRoaXMucHJlU3R5bGVQcm9wcz1oLHRoaXMucG9zdFN0eWxlUHJvcHM9Zix0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1ULHRoaXMudGltaW5ncz17ZHVyYXRpb246Xy5kdXJh''@;'; put 'put ''dGlvbixkZWxheTpfLmRlbGF5LGVhc2luZzpfLmVhc2luZ319Y29udGFpbnNBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9YnVpbGRLZXlmcmFtZXMoKXtsZXQgbD10aGlzLmtleWZyYW1lcyx7ZGVsYXk6YSxkdXJhdGlvbjpkLGVhc2luZzpofT10aGlzLnRpbWlu''@;'; put 'put ''Z3M7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJmEpe2NvbnN0IGY9W10sXz1kK2EsVD1hL18sVz1IcChsWzBdKTtXLnNldCgib2Zmc2V0IiwwKSxmLnB1c2goVyk7Y29uc3QgaWU9SHAobFswXSk7aWUuc2V0KCJvZmZzZXQiLERlZShUKSksZi5wdXNoKGllKTtjb25zdCBnZT1s''@;'; put 'put ''Lmxlbmd0aC0xO2ZvcihsZXQgd2U9MTt3ZTw9Z2U7d2UrKyl7bGV0IEVlPUhwKGxbd2VdKTtjb25zdCBaZT1FZS5nZXQoIm9mZnNldCIpO0VlLnNldCgib2Zmc2V0IixEZWUoKGErWmUqZCkvXykpLGYucHVzaChFZSl9ZD1fLGE9MCxoPSIiLGw9Zn1yZXR1cm4gWkgodGhpcy5lbGVtZW50LGws''@;'; put 'put ''dGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsZCxhLGgsITApfX1mdW5jdGlvbiBEZWUoYyxsPTMpe2NvbnN0IGE9TWF0aC5wb3coMTAsbC0xKTtyZXR1cm4gTWF0aC5yb3VuZChjKmEpL2F9Y2xhc3MgR0h7fWNvbnN0IHN4ZT1uZXcgU2V0KFsid2lkdGgiLCJoZWlnaHQi''@;'; put 'put ''LCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwibGVmdCIsInRvcCIsImJvdHRvbSIsInJpZ2h0IiwiZm9udFNpemUiLCJvdXRsaW5lV2lkdGgiLCJvdXRsaW5lT2Zmc2V0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ0JvdHRvbSIsInBh''@;'; put 'put ''ZGRpbmdSaWdodCIsIm1hcmdpblRvcCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5SaWdodCIsImJvcmRlclJhZGl1cyIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tV2lk''@;'; put 'put ''dGgiLCJ0ZXh0SW5kZW50IiwicGVyc3BlY3RpdmUiXSk7Y2xhc3MgYXhlIGV4dGVuZHMgR0h7bm9ybWFsaXplUHJvcGVydHlOYW1lKGwsYSl7cmV0dXJuIGpIKGwpfW5vcm1hbGl6ZVN0eWxlVmFsdWUobCxhLGQsaCl7bGV0IGY9IiI7Y29uc3QgXz1kLnRvU3RyaW5nKCkudHJpbSgpO2lmKHN4''@;'; put 'put ''ZS5oYXMoYSkmJjAhPT1kJiYiMCIhPT1kKWlmKCJudW1iZXIiPT10eXBlb2YgZClmPSJweCI7ZWxzZXtjb25zdCBUPWQubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Etel0qKSQvKTtUJiYwPT1UWzFdLmxlbmd0aCYmaC5wdXNoKGZ1bmN0aW9uIHRNZShjLGwpe3JldHVybiBuZXcgQXIoMzAwNSwh''@;'; put 'put ''MSl9KCkpfXJldHVybiBfK2Z9fWZ1bmN0aW9uIEllZShjLGwsYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSxFZSl7cmV0dXJue3R5cGU6MCxlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxpc1JlbW92YWxUcmFuc2l0aW9uOmgsZnJvbVN0YXRlOmEsZnJvbVN0eWxlczpmLHRvU3RhdGU6ZCx0b1N0eWxl''@;'; put 'put ''czpfLHRpbWVsaW5lczpULHF1ZXJpZWRFbGVtZW50czpXLHByZVN0eWxlUHJvcHM6aWUscG9zdFN0eWxlUHJvcHM6Z2UsdG90YWxUaW1lOndlLGVycm9yczpFZX19Y29uc3QgJEg9e307Y2xhc3MgTGVle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl90cmlnZ2VyTmFtZT1sLHRoaXMuYXN0PWEs''@;'; put 'put ''dGhpcy5fc3RhdGVTdHlsZXM9ZH1tYXRjaChsLGEsZCxoKXtyZXR1cm4gZnVuY3Rpb24gbHhlKGMsbCxhLGQsaCl7cmV0dXJuIGMuc29tZShmPT5mKGwsYSxkLGgpKX0odGhpcy5hc3QubWF0Y2hlcnMsbCxhLGQsaCl9YnVpbGRTdHlsZXMobCxhLGQpe2xldCBoPXRoaXMuX3N0YXRlU3R5bGVz''@;'; put 'put ''LmdldCgiKiIpO3JldHVybiB2b2lkIDAhPT1sJiYoaD10aGlzLl9zdGF0ZVN0eWxlcy5nZXQobD8udG9TdHJpbmcoKSl8fGgpLGg/aC5idWlsZFN0eWxlcyhhLGQpOm5ldyBNYXB9YnVpbGQobCxhLGQsaCxmLF8sVCxXLGllLGdlKXtjb25zdCB3ZT1bXSxFZT10aGlzLmFzdC5vcHRpb25zJiZ0''@;'; put 'put ''aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8JEgsb3Q9dGhpcy5idWlsZFN0eWxlcyhkLFQmJlQucGFyYW1zfHwkSCx3ZSksZXQ9VyYmVy5wYXJhbXN8fCRILHl0PXRoaXMuYnVpbGRTdHlsZXMoaCxldCx3ZSksa3Q9bmV3IFNldCxTdD1uZXcgTWFwLFF0PW5ldyBNYXAsbm49InZvaWQiPT09aCxt''@;'; put 'put ''bj17cGFyYW1zOmN4ZShldCxFZSksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9LEVuPWdlP1tdOllIKGwsYSx0aGlzLmFzdC5hbmltYXRpb24sZixfLG90LHl0LG1uLGllLHdlKTtsZXQgbHI9MDtpZihFbi5mb3JFYWNoKF9pPT57bHI9TWF0aC5tYXgoX2kuZHVyYXRpb24rX2kuZGVs''@;'; put 'put ''YXksbHIpfSksd2UubGVuZ3RoKXJldHVybiBJZWUoYSx0aGlzLl90cmlnZ2VyTmFtZSxkLGgsbm4sb3QseXQsW10sW10sU3QsUXQsbHIsd2UpO0VuLmZvckVhY2goX2k9Pntjb25zdCB1aT1faS5lbGVtZW50LGdyPW0xKFN0LHVpLG5ldyBTZXQpO19pLnByZVN0eWxlUHJvcHMuZm9yRWFjaChV''@;'; put 'put ''cj0+Z3IuYWRkKFVyKSk7Y29uc3QgRWk9bTEoUXQsdWksbmV3IFNldCk7X2kucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChVcj0+RWkuYWRkKFVyKSksdWkhPT1hJiZrdC5hZGQodWkpfSk7Y29uc3QgVnI9WUUoa3QudmFsdWVzKCkpO3JldHVybiBJZWUoYSx0aGlzLl90cmlnZ2VyTmFtZSxkLGgs''@;'; put 'put ''bm4sb3QseXQsRW4sVnIsU3QsUXQsbHIpfX1mdW5jdGlvbiBjeGUoYyxsKXtjb25zdCBhPVliKGwpO2Zvcihjb25zdCBkIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShkKSYmbnVsbCE9Y1tkXSYmKGFbZF09Y1tkXSk7cmV0dXJuIGF9Y2xhc3MgdXhle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnN0''@;'; put 'put ''eWxlcz1sLHRoaXMuZGVmYXVsdFBhcmFtcz1hLHRoaXMubm9ybWFsaXplcj1kfWJ1aWxkU3R5bGVzKGwsYSl7Y29uc3QgZD1uZXcgTWFwLGg9WWIodGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gT2JqZWN0LmtleXMobCkuZm9yRWFjaChmPT57Y29uc3QgXz1sW2ZdO251bGwhPT1fJiYoaFtm''@;'; put 'put ''XT1fKX0pLHRoaXMuc3R5bGVzLnN0eWxlcy5mb3JFYWNoKGY9Pnsic3RyaW5nIiE9dHlwZW9mIGYmJmYuZm9yRWFjaCgoXyxUKT0+e18mJihfPUdiKF8saCxhKSk7Y29uc3QgVz10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplUHJvcGVydHlOYW1lKFQsYSk7Xz10aGlzLm5vcm1hbGl6ZXIubm9y''@;'; put 'put ''bWFsaXplU3R5bGVWYWx1ZShULFcsXyxhKSxkLnNldChULF8pfSl9KSxkfX1jbGFzcyBoeGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMubmFtZT1sLHRoaXMuYXN0PWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz1uZXcgTWFwLGEu''@;'; put 'put ''c3RhdGVzLmZvckVhY2goaD0+e3RoaXMuc3RhdGVzLnNldChoLm5hbWUsbmV3IHV4ZShoLnN0eWxlLGgub3B0aW9ucyYmaC5vcHRpb25zLnBhcmFtc3x8e30sZCkpfSksUmVlKHRoaXMuc3RhdGVzLCJ0cnVlIiwiMSIpLFJlZSh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksYS50cmFuc2l0aW9u''@;'; put 'put ''cy5mb3JFYWNoKGg9Pnt0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgTGVlKGwsaCx0aGlzLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249ZnVuY3Rpb24gZnhlKGMsbCxhKXtyZXR1cm4gbmV3IExlZShjLHt0eXBlOjEsYW5pbWF0aW9uOnt0eXBlOjIsc3RlcHM6''@;'; put 'put ''W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKF8sVCk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LGwpfShsLHRoaXMuc3RhdGVzKX1nZXQgY29udGFpbnNRdWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24obCxh''@;'; put 'put ''LGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKF89Pl8ubWF0Y2gobCxhLGQsaCkpfHxudWxsfW1hdGNoU3R5bGVzKGwsYSxkKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXMobCxhLGQpfX1mdW5jdGlvbiBSZWUoYyxsLGEpe2MuaGFz''@;'; put 'put ''KGwpP2MuaGFzKGEpfHxjLnNldChhLGMuZ2V0KGwpKTpjLmhhcyhhKSYmYy5zZXQobCxjLmdldChhKSl9Y29uc3QgcHhlPW5ldyBxRTtjbGFzcyBneGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuYm9keU5vZGU9bCx0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fYW5p''@;'; put 'put ''bWF0aW9ucz1uZXcgTWFwLHRoaXMuX3BsYXllcnNCeUlkPW5ldyBNYXAsdGhpcy5wbGF5ZXJzPVtdfXJlZ2lzdGVyKGwsYSl7Y29uc3QgZD1bXSxmPXpIKHRoaXMuX2RyaXZlcixhLGQsW10pO2lmKGQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIGJNZShjKXtyZXR1cm4gbmV3IEFyKDM1MDMsITEp''@;'; put 'put ''fSgpO3RoaXMuX2FuaW1hdGlvbnMuc2V0KGwsZil9X2J1aWxkUGxheWVyKGwsYSxkKXtjb25zdCBoPWwuZWxlbWVudCxmPWdlZSh0aGlzLl9ub3JtYWxpemVyLGwua2V5ZnJhbWVzLGEsZCk7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKGgsZixsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNp''@;'; put 'put ''bmcsW10sITApfWNyZWF0ZShsLGEsZD17fSl7Y29uc3QgaD1bXSxmPXRoaXMuX2FuaW1hdGlvbnMuZ2V0KGwpO2xldCBfO2NvbnN0IFQ9bmV3IE1hcDtpZihmPyhfPVlIKHRoaXMuX2RyaXZlcixhLGYsSEgsakUsbmV3IE1hcCxuZXcgTWFwLGQscHhlLGgpLF8uZm9yRWFjaChnZT0+e2NvbnN0''@;'; put 'put ''IHdlPW0xKFQsZ2UuZWxlbWVudCxuZXcgTWFwKTtnZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKEVlPT53ZS5zZXQoRWUsbnVsbCkpfSkpOihoLnB1c2goZnVuY3Rpb24geU1lKCl7cmV0dXJuIG5ldyBBcigzMzAwLCExKX0oKSksXz1bXSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gd01lKGMp''@;'; put 'put ''e3JldHVybiBuZXcgQXIoMzUwNCwhMSl9KCk7VC5mb3JFYWNoKChnZSx3ZSk9PntnZS5mb3JFYWNoKChFZSxaZSk9PntnZS5zZXQoWmUsdGhpcy5fZHJpdmVyLmNvbXB1dGVTdHlsZSh3ZSxaZSxBZikpfSl9KTtjb25zdCBpZT1GcChfLm1hcChnZT0+e2NvbnN0IHdlPVQuZ2V0KGdlLmVsZW1l''@;'; put 'put ''bnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcihnZSxuZXcgTWFwLHdlKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWQuc2V0KGwsaWUpLGllLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KGwpKSx0aGlzLnBsYXllcnMucHVzaChpZSksaWV9ZGVzdHJveShsKXtjb25zdCBhPXRoaXMu''@;'; put 'put ''X2dldFBsYXllcihsKTthLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUobCk7Y29uc3QgZD10aGlzLnBsYXllcnMuaW5kZXhPZihhKTtkPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGQsMSl9X2dldFBsYXllcihsKXtjb25zdCBhPXRoaXMuX3BsYXllcnNCeUlkLmdldChsKTtp''@;'; put 'put ''ZighYSl0aHJvdyBmdW5jdGlvbiBDTWUoYyl7cmV0dXJuIG5ldyBBcigzMzAxLCExKX0oKTtyZXR1cm4gYX1saXN0ZW4obCxhLGQsaCl7Y29uc3QgZj1PSChhLCIiLCIiLCIiKTtyZXR1cm4gTEgodGhpcy5fZ2V0UGxheWVyKGwpLGQsZixoKSwoKT0+e319Y29tbWFuZChsLGEsZCxoKXtpZigi''@;'; put 'put ''cmVnaXN0ZXIiPT1kKXJldHVybiB2b2lkIHRoaXMucmVnaXN0ZXIobCxoWzBdKTtpZigiY3JlYXRlIj09ZClyZXR1cm4gdm9pZCB0aGlzLmNyZWF0ZShsLGEsaFswXXx8e30pO2NvbnN0IGY9dGhpcy5fZ2V0UGxheWVyKGwpO3N3aXRjaChkKXtjYXNlInBsYXkiOmYucGxheSgpO2JyZWFrO2Nh''@;'; put 'put ''c2UicGF1c2UiOmYucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpmLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpmLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6Zi5maW5pc2goKTticmVhaztjYXNlImluaXQiOmYuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOmYuc2V0''@;'; put 'put ''UG9zaXRpb24ocGFyc2VGbG9hdChoWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kobCl9fX1jb25zdCBPZWU9Im5nLWFuaW1hdGUtcXVldWVkIixxSD0ibmctYW5pbWF0ZS1kaXNhYmxlZCIseXhlPVtdLFBlZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxz''@;'; put 'put ''ZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sd3hlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxwMj0iX19uZ19yZW1vdmVkIjtj''@;'; put 'put ''bGFzcyBLSHtnZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9Y29uc3RydWN0b3IobCxhPSIiKXt0aGlzLm5hbWVzcGFjZUlkPWE7Y29uc3QgZD1sJiZsLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24geHhlKGMpe3JldHVybiBjPz9u''@;'; put 'put ''dWxsfShkP2wudmFsdWU6bCksZCl7Y29uc3QgZj1ZYihsKTtkZWxldGUgZi52YWx1ZSx0aGlzLm9wdGlvbnM9Zn1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9YWJzb3JiT3B0aW9ucyhsKXtjb25zdCBhPWwucGFyYW1z''@;'; put 'put ''O2lmKGEpe2NvbnN0IGQ9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGg9PntudWxsPT1kW2hdJiYoZFtoXT1hW2hdKX0pfX19Y29uc3QgJGI9InZvaWQiLFhIPW5ldyBLSCgkYik7Y2xhc3MgQ3hle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmlkPWwsdGhpcy5o''@;'; put 'put ''b3N0RWxlbWVudD1hLHRoaXMuX2VuZ2luZT1kLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz1uZXcgTWFwLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIitsLGhkKGEsdGhpcy5faG9zdENsYXNz''@;'; put 'put ''TmFtZSl9bGlzdGVuKGwsYSxkLGgpe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXMoYSkpdGhyb3cgZnVuY3Rpb24gU01lKGMsbCl7cmV0dXJuIG5ldyBBcigzMzAyLCExKX0oKTtpZihudWxsPT1kfHwwPT1kLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBNTWUoYyl7cmV0dXJuIG5ldyBBcigzMzAzLCEx''@;'; put 'put ''KX0oKTtpZighZnVuY3Rpb24gRXhlKGMpe3JldHVybiJzdGFydCI9PWN8fCJkb25lIj09Y30oZCkpdGhyb3cgZnVuY3Rpb24geE1lKGMsbCl7cmV0dXJuIG5ldyBBcigzNDAwLCExKX0oKTtjb25zdCBmPW0xKHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMsbCxbXSksXz17bmFtZTphLHBoYXNlOmQs''@;'; put 'put ''Y2FsbGJhY2s6aH07Zi5wdXNoKF8pO2NvbnN0IFQ9bTEodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCxsLG5ldyBNYXApO3JldHVybiBULmhhcyhhKXx8KGhkKGwsekUpLGhkKGwsekUrIi0iK2EpLFQuc2V0KGEsWEgpKSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57Y29u''@;'; put 'put ''c3QgVz1mLmluZGV4T2YoXyk7Vz49MCYmZi5zcGxpY2UoVywxKSx0aGlzLl90cmlnZ2Vycy5oYXMoYSl8fFQuZGVsZXRlKGEpfSl9fXJlZ2lzdGVyKGwsYSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzLmhhcyhsKSYmKHRoaXMuX3RyaWdnZXJzLnNldChsLGEpLCEwKX1fZ2V0VHJpZ2dlcihsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuX3RyaWdnZXJzLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBFTWUoYyl7cmV0dXJuIG5ldyBBcigzNDAxLCExKX0oKTtyZXR1cm4gYX10cmlnZ2VyKGwsYSxkLGg9ITApe2NvbnN0IGY9dGhpcy5fZ2V0VHJpZ2dlcihhKSxfPW5ldyBKSCh0aGlzLmlkLGEsbCk7bGV0''@;'; put 'put ''IFQ9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7VHx8KGhkKGwsekUpLGhkKGwsekUrIi0iK2EpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KGwsVD1uZXcgTWFwKSk7bGV0IFc9VC5nZXQoYSk7Y29uc3QgaWU9bmV3IEtIKGQsdGhpcy5pZCk7aWYoIShkJiZk''@;'; put 'put ''Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmVyYmaWUuYWJzb3JiT3B0aW9ucyhXLm9wdGlvbnMpLFQuc2V0KGEsaWUpLFd8fChXPVhIKSxpZS52YWx1ZSE9PSRiJiZXLnZhbHVlPT09aWUudmFsdWUpe2lmKCFmdW5jdGlvbiBUeGUoYyxsKXtjb25zdCBhPU9iamVjdC5rZXlzKGMpLGQ9T2Jq''@;'; put 'put ''ZWN0LmtleXMobCk7aWYoYS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07aWYoIWwuaGFzT3duUHJvcGVydHkoZil8fGNbZl0hPT1sW2ZdKXJldHVybiExfXJldHVybiEwfShXLnBhcmFtcyxpZS5wYXJhbXMpKXtjb25z''@;'; put 'put ''dCBldD1bXSx5dD1mLm1hdGNoU3R5bGVzKFcudmFsdWUsVy5wYXJhbXMsZXQpLGt0PWYubWF0Y2hTdHlsZXMoaWUudmFsdWUsaWUucGFyYW1zLGV0KTtldC5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKGV0KTp0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e2ZnKGwseXQpLGho''@;'; put 'put ''KGwsa3QpfSl9cmV0dXJufWNvbnN0IEVlPW0xKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LGwsW10pO0VlLmZvckVhY2goZXQ9PntldC5uYW1lc3BhY2VJZD09dGhpcy5pZCYmZXQudHJpZ2dlck5hbWU9PWEmJmV0LnF1ZXVlZCYmZXQuZGVzdHJveSgpfSk7bGV0IFplPWYubWF0Y2hU''@;'; put 'put ''cmFuc2l0aW9uKFcudmFsdWUsaWUudmFsdWUsbCxpZS5wYXJhbXMpLG90PSExO2lmKCFaZSl7aWYoIWgpcmV0dXJuO1plPWYuZmFsbGJhY2tUcmFuc2l0aW9uLG90PSEwfXJldHVybiB0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDps''@;'; put 'put ''LHRyaWdnZXJOYW1lOmEsdHJhbnNpdGlvbjpaZSxmcm9tU3RhdGU6Vyx0b1N0YXRlOmllLHBsYXllcjpfLGlzRmFsbGJhY2tUcmFuc2l0aW9uOm90fSksb3R8fChoZChsLE9lZSksXy5vblN0YXJ0KCgpPT57UTgobCxPZWUpfSkpLF8ub25Eb25lKCgpPT57bGV0IGV0PXRoaXMucGxheWVycy5p''@;'; put 'put ''bmRleE9mKF8pO2V0Pj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGV0LDEpO2NvbnN0IHl0PXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZih5dCl7bGV0IGt0PXl0LmluZGV4T2YoXyk7a3Q+PTAmJnl0LnNwbGljZShrdCwxKX19KSx0aGlzLnBsYXllcnMucHVzaChfKSxF''@;'; put 'put ''ZS5wdXNoKF8pLF99ZGVyZWdpc3RlcihsKXt0aGlzLl90cmlnZ2Vycy5kZWxldGUobCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGE9PmEuZGVsZXRlKGwpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGEsZCk9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJz''@;'; put 'put ''LnNldChkLGEuZmlsdGVyKGg9PmgubmFtZSE9bCkpfSl9Y2xlYXJFbGVtZW50Q2FjaGUobCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUobCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUobCk7Y29uc3QgYT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5n''@;'; put 'put ''ZXQobCk7YSYmKGEuZm9yRWFjaChkPT5kLmRlc3Ryb3koKSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKGwpKX1fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkobCxVRSwhMCk7ZC5mb3JFYWNo''@;'; put 'put ''KGg9PntpZihoW3AyXSlyZXR1cm47Y29uc3QgZj10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGgpO2Yuc2l6ZT9mLmZvckVhY2goXz0+Xy50cmlnZ2VyTGVhdmVBbmltYXRpb24oaCxhLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShoKX0pLHRoaXMuX2VuZ2lu''@;'; put 'put ''ZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmQuZm9yRWFjaChoPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCksXz1uZXcgTWFwO2lmKGYpe2Nv''@;'; put 'put ''bnN0IFQ9W107aWYoZi5mb3JFYWNoKChXLGllKT0+e2lmKF8uc2V0KGllLFcudmFsdWUpLHRoaXMuX3RyaWdnZXJzLmhhcyhpZSkpe2NvbnN0IGdlPXRoaXMudHJpZ2dlcihsLGllLCRiLGgpO2dlJiZULnB1c2goZ2UpfX0pLFQubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1l''@;'; put 'put ''bnRBc1JlbW92ZWQodGhpcy5pZCxsLCEwLGEsXyksZCYmRnAoVCkub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZShsKSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGwpe2NvbnN0IGE9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQo''@;'; put 'put ''bCksZD10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihhJiZkKXtjb25zdCBoPW5ldyBTZXQ7YS5mb3JFYWNoKGY9Pntjb25zdCBfPWYubmFtZTtpZihoLmhhcyhfKSlyZXR1cm47aC5hZGQoXyk7Y29uc3QgVz10aGlzLl90cmlnZ2Vycy5nZXQoXykuZmFsbGJhY2tUcmFu''@;'; put 'put ''c2l0aW9uLGllPWQuZ2V0KF8pfHxYSCxnZT1uZXcgS0goJGIpLHdlPW5ldyBKSCh0aGlzLmlkLF8sbCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6bCx0cmlnZ2VyTmFtZTpfLHRyYW5zaXRpb246Vyxmcm9tU3RhdGU6aWUsdG9T''@;'; put 'put ''dGF0ZTpnZSxwbGF5ZXI6d2UsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKGwsYSl7Y29uc3QgZD10aGlzLl9lbmdpbmU7aWYobC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKSx0aGlzLnRyaWdnZXJMZWF2''@;'; put 'put ''ZUFuaW1hdGlvbihsLGEsITApKXJldHVybjtsZXQgaD0hMTtpZihkLnRvdGFsQW5pbWF0aW9ucyl7Y29uc3QgZj1kLnBsYXllcnMubGVuZ3RoP2QucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpOltdO2lmKGYmJmYubGVuZ3RoKWg9ITA7ZWxzZXtsZXQgXz1sO2Zvcig7Xz1fLnBhcmVu''@;'; put 'put ''dE5vZGU7KWlmKGQuc3RhdGVzQnlFbGVtZW50LmdldChfKSl7aD0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGwpLGgpZC5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITEsYSk7ZWxzZXtjb25zdCBmPWxbcDJdOyghZnx8Zj09PVBlZSkm''@;'; put 'put ''JihkLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUobCkpLGQuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKSxkLl9vblJlbW92YWxDb21wbGV0ZShsLGEpKX19aW5zZXJ0Tm9kZShsLGEpe2hkKGwsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9u''@;'; put 'put ''cyhsKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGQ9Pntjb25zdCBoPWQucGxheWVyO2lmKGguZGVzdHJveWVkKXJldHVybjtjb25zdCBmPWQuZWxlbWVudCxfPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGYpO18mJl8uZm9yRWFjaChUPT57aWYoVC5uYW1lPT1k''@;'; put 'put ''LnRyaWdnZXJOYW1lKXtjb25zdCBXPU9IKGYsZC50cmlnZ2VyTmFtZSxkLmZyb21TdGF0ZS52YWx1ZSxkLnRvU3RhdGUudmFsdWUpO1cuX2RhdGE9bCxMSChkLnBsYXllcixULnBoYXNlLFcsVC5jYWxsYmFjayl9fSksaC5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNo''@;'; put 'put ''KCgpPT57aC5kZXN0cm95KCl9KTphLnB1c2goZCl9KSx0aGlzLl9xdWV1ZT1bXSxhLnNvcnQoKGQsaCk9Pntjb25zdCBmPWQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsXz1oLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1mfHwwPT1fP2YtXzp0aGlzLl9lbmdpbmUuZHJpdmVy''@;'; put 'put ''LmNvbnRhaW5zRWxlbWVudChkLmVsZW1lbnQsaC5lbGVtZW50KT8xOi0xfSl9ZGVzdHJveShsKXt0aGlzLnBsYXllcnMuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCxsKX19Y2xhc3MgU3hle19vblJl''@;'; put 'put ''bW92YWxDb21wbGV0ZShsLGEpe3RoaXMub25SZW1vdmFsQ29tcGxldGUobCxhKX1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMu''@;'; put 'put ''cGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMuZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9''@;'; put 'put ''MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9W10sdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNv''@;'; put 'put ''bGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0oaCxmKT0+e319Z2V0IHF1ZXVlZFBsYXllcnMoKXtjb25zdCBsPVtdO3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goYT0+e2EucGxheWVycy5mb3JFYWNoKGQ9PntkLnF1ZXVlZCYmbC5wdXNo''@;'; put 'put ''KGQpfSl9KSxsfWNyZWF0ZU5hbWVzcGFjZShsLGEpe2NvbnN0IGQ9bmV3IEN4ZShsLGEsdGhpcyk7cmV0dXJuIHRoaXMuYm9keU5vZGUmJnRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0aGlzLmJvZHlOb2RlLGEpP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGQsYSk6KHRoaXMubmV3''@;'; put 'put ''SG9zdEVsZW1lbnRzLnNldChhLGQpLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdPWR9X2JhbGFuY2VOYW1lc3BhY2VMaXN0KGwsYSl7Y29uc3QgZD10aGlzLl9uYW1lc3BhY2VMaXN0LGg9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtp''@;'; put 'put ''ZihkLmxlbmd0aC0xPj0wKXtsZXQgXz0hMSxUPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoYSk7Zm9yKDtUOyl7Y29uc3QgVz1oLmdldChUKTtpZihXKXtjb25zdCBpZT1kLmluZGV4T2YoVyk7ZC5zcGxpY2UoaWUrMSwwLGwpLF89ITA7YnJlYWt9VD10aGlzLmRyaXZlci5nZXRQYXJl''@;'; put 'put ''bnRFbGVtZW50KFQpfV98fGQudW5zaGlmdChsKX1lbHNlIGQucHVzaChsKTtyZXR1cm4gaC5zZXQoYSxsKSxsfXJlZ2lzdGVyKGwsYSl7bGV0IGQ9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO3JldHVybiBkfHwoZD10aGlzLmNyZWF0ZU5hbWVzcGFjZShsLGEpKSxkfXJlZ2lzdGVyVHJpZ2dl''@;'; put 'put ''cihsLGEsZCl7bGV0IGg9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO2gmJmgucmVnaXN0ZXIoYSxkKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KGwsYSl7bCYmKHRoaXMuYWZ0ZXJGbHVzaCgoKT0+e30pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57Y29uc3Qg''@;'; put 'put ''ZD10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTt0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShkLmhvc3RFbGVtZW50KTtjb25zdCBoPXRoaXMuX25hbWVzcGFjZUxpc3QuaW5kZXhPZihkKTtoPj0wJiZ0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShoLDEpLGQuZGVzdHJveShh''@;'; put 'put ''KSxkZWxldGUgdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfSkpfV9mZXRjaE5hbWVzcGFjZShsKXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfWZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChsKXtjb25zdCBhPW5ldyBTZXQsZD10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7aWYo''@;'; put 'put ''ZClmb3IobGV0IGggb2YgZC52YWx1ZXMoKSlpZihoLm5hbWVzcGFjZUlkKXtjb25zdCBmPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGgubmFtZXNwYWNlSWQpO2YmJmEuYWRkKGYpfXJldHVybiBhfXRyaWdnZXIobCxhLGQsaCl7aWYoSkUoYSkpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2Uo''@;'; put 'put ''bCk7aWYoZilyZXR1cm4gZi50cmlnZ2VyKGEsZCxoKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKGwsYSxkLGgpe2lmKCFKRShhKSlyZXR1cm47Y29uc3QgZj1hW3AyXTtpZihmJiZmLnNldEZvclJlbW92YWwpe2Yuc2V0Rm9yUmVtb3ZhbD0hMSxmLnNldEZvck1vdmU9ITA7Y29uc3QgXz10aGlz''@;'; put 'put ''LmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihhKTtfPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKF8sMSl9aWYobCl7Y29uc3QgXz10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTtfJiZfLmluc2VydE5vZGUoYSxkKX1oJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1l''@;'; put 'put ''bnQoYSl9Y29sbGVjdEVudGVyRWxlbWVudChsKXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaChsKX1tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKXthP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKGwpLGhkKGwscUgpKTp0aGlzLmRp''@;'; put 'put ''c2FibGVkTm9kZXMuaGFzKGwpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZShsKSxROChsLHFIKSl9cmVtb3ZlTm9kZShsLGEsZCl7aWYoSkUoYSkpe2NvbnN0IGg9bD90aGlzLl9mZXRjaE5hbWVzcGFjZShsKTpudWxsO2g/aC5yZW1vdmVOb2RlKGEsZCk6dGhpcy5tYXJrRWxlbWVudEFz''@;'; put 'put ''UmVtb3ZlZChsLGEsITEsZCk7Y29uc3QgZj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmdldChhKTtmJiZmLmlkIT09bCYmZi5yZW1vdmVOb2RlKGEsZCl9ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShhLGQpfW1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSxkLGgsZil7dGhpcy5j''@;'; put 'put ''b2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goYSksYVtwMl09e25hbWVzcGFjZUlkOmwsc2V0Rm9yUmVtb3ZhbDpoLGhhc0FuaW1hdGlvbjpkLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6Zn19bGlzdGVuKGwsYSxkLGgsZil7cmV0dXJuIEpFKGEpP3Ro''@;'; put 'put ''aXMuX2ZldGNoTmFtZXNwYWNlKGwpLmxpc3RlbihhLGQsaCxmKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24obCxhLGQsaCxmKXtyZXR1cm4gbC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLGwuZWxlbWVudCxsLmZyb21TdGF0ZS52YWx1ZSxsLnRvU3RhdGUudmFsdWUsZCxoLGwuZnJv''@;'; put 'put ''bVN0YXRlLm9wdGlvbnMsbC50b1N0YXRlLm9wdGlvbnMsYSxmKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpe2xldCBhPXRoaXMuZHJpdmVyLnF1ZXJ5KGwsVUUsITApO2EuZm9yRWFjaChkPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChkKSksMCE9dGhpcy5wbGF5''@;'; put 'put ''ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoYT10aGlzLmRyaXZlci5xdWVyeShsLE5ILCEwKSxhLmZvckVhY2goZD0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGQpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGwpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+e2QucXVldWVkP2QubWFya2VkRm9yRGVzdHJveT0hMDpkLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50''@;'; put 'put ''LmdldChsKTthJiZhLmZvckVhY2goZD0+ZC5maW5pc2goKSl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gbmV3IFByb21pc2UobD0+e2lmKHRoaXMucGxheWVycy5sZW5ndGgpcmV0dXJuIEZwKHRoaXMucGxheWVycykub25Eb25lKCgpPT5sKCkpO2woKX0pfXByb2Nlc3NMZWF2ZU5vZGUo''@;'; put 'put ''bCl7Y29uc3QgYT1sW3AyXTtpZihhJiZhLnNldEZvclJlbW92YWwpe2lmKGxbcDJdPVBlZSxhLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCk7Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShhLm5hbWVzcGFjZUlkKTtkJiZkLmNsZWFyRWxlbWVudENhY2hl''@;'; put 'put ''KGwpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGwsYS5zZXRGb3JSZW1vdmFsKX1sLmNsYXNzTGlzdD8uY29udGFpbnMocUgpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChsLCExKSx0aGlzLmRyaXZlci5xdWVyeShsLCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goZD0+''@;'; put 'put ''e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGQsITEpfSl9Zmx1c2gobD0tMSl7bGV0IGE9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKGQsaCk9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGQsaCkpLHRoaXMubmV3''@;'; put 'put ''SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgZD0wO2Q8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtkKyspaGQodGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2Rd''@;'; put 'put ''LCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2NvbnN0IGQ9W107dHJ5e2E9dGhpcy5fZmx1c2hBbmltYXRpb25zKGQsbCl9ZmluYWxs''@;'; put 'put ''eXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylkW2hdKCl9fWVsc2UgZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2QrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2RdKTtpZih0aGlzLnRvdGFsUXVl''@;'; put 'put ''dWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChkPT5kKCkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxhLmxlbmd0aD9GcChhKS5vbkRvbmUoKCk9PntkLmZvckVhY2goaD0+aCgpKX0pOmQuZm9yRWFjaChoPT5oKCkpfX1yZXBvcnRFcnJvcihsKXt0aHJvdyBmdW5jdGlvbiBrTWUoYyl7cmV0dXJuIG5ldyBBcigz''@;'; put 'put ''NDAyLCExKX0oKX1fZmx1c2hBbmltYXRpb25zKGwsYSl7Y29uc3QgZD1uZXcgcUUsaD1bXSxmPW5ldyBNYXAsXz1bXSxUPW5ldyBNYXAsVz1uZXcgTWFwLGllPW5ldyBNYXAsZ2U9bmV3IFNldDt0aGlzLmRpc2FibGVkTm9kZXMuZm9yRWFjaChRbj0+e2dlLmFkZChRbik7Y29uc3QgTXI9dGhp''@;'; put 'put ''cy5kcml2ZXIucXVlcnkoUW4sIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApO2ZvcihsZXQgX3I9MDtfcjxNci5sZW5ndGg7X3IrKylnZS5hZGQoTXJbX3JdKX0pO2NvbnN0IHdlPXRoaXMuYm9keU5vZGUsRWU9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLFplPU5lZShF''@;'; put 'put ''ZSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLG90PW5ldyBNYXA7bGV0IGV0PTA7WmUuZm9yRWFjaCgoUW4sTXIpPT57Y29uc3QgX3I9SEgrZXQrKztvdC5zZXQoTXIsX3IpLFFuLmZvckVhY2godnQ9PmhkKHZ0LF9yKSl9KTtjb25zdCB5dD1bXSxrdD1uZXcgU2V0LFN0PW5ldyBTZXQ7''@;'; put 'put ''Zm9yKGxldCBRbj0wO1FuPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7UW4rKyl7Y29uc3QgTXI9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW1FuXSxfcj1NcltwMl07X3ImJl9yLnNldEZvclJlbW92YWwmJih5dC5wdXNoKE1yKSxrdC5hZGQoTXIpLF9yLmhhc0FuaW1h''@;'; put 'put ''dGlvbj90aGlzLmRyaXZlci5xdWVyeShNciwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKHZ0PT5rdC5hZGQodnQpKTpTdC5hZGQoTXIpKX1jb25zdCBRdD1uZXcgTWFwLG5uPU5lZShFZSxBcnJheS5mcm9tKGt0KSk7bm4uZm9yRWFjaCgoUW4sTXIpPT57Y29uc3QgX3I9akUrZXQr''@;'; put 'put ''KztRdC5zZXQoTXIsX3IpLFFuLmZvckVhY2godnQ9PmhkKHZ0LF9yKSl9KSxsLnB1c2goKCk9PntaZS5mb3JFYWNoKChRbixNcik9Pntjb25zdCBfcj1vdC5nZXQoTXIpO1FuLmZvckVhY2godnQ9PlE4KHZ0LF9yKSl9KSxubi5mb3JFYWNoKChRbixNcik9Pntjb25zdCBfcj1RdC5nZXQoTXIp''@;'; put 'put ''O1FuLmZvckVhY2godnQ9PlE4KHZ0LF9yKSl9KSx5dC5mb3JFYWNoKFFuPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKFFuKX0pfSk7Y29uc3QgbW49W10sRW49W107Zm9yKGxldCBRbj10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO1FuPj0wO1FuLS0pdGhpcy5fbmFtZXNwYWNlTGlzdFtR''@;'; put 'put ''bl0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhhKS5mb3JFYWNoKF9yPT57Y29uc3QgdnQ9X3IucGxheWVyLE90PV9yLmVsZW1lbnQ7aWYobW4ucHVzaCh2dCksdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7Y29uc3QgJHI9T3RbcDJdO2lmKCRyJiYkci5zZXRGb3JNb3ZlKXtp''@;'; put 'put ''Zigkci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiYkci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcyhfci50cmlnZ2VyTmFtZSkpe2NvbnN0IFpyPSRyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KF9yLnRyaWdnZXJOYW1lKSxIcj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQoX3IuZWxl''@;'; put 'put ''bWVudCk7aWYoSHImJkhyLmhhcyhfci50cmlnZ2VyTmFtZSkpe2NvbnN0IFJpPUhyLmdldChfci50cmlnZ2VyTmFtZSk7UmkudmFsdWU9WnIsSHIuc2V0KF9yLnRyaWdnZXJOYW1lLFJpKX19cmV0dXJuIHZvaWQgdnQuZGVzdHJveSgpfX1jb25zdCBjbj0hd2V8fCF0aGlzLmRyaXZlci5jb250''@;'; put 'put ''YWluc0VsZW1lbnQod2UsT3QpLGtuPVF0LmdldChPdCksUG49b3QuZ2V0KE90KSxKbj10aGlzLl9idWlsZEluc3RydWN0aW9uKF9yLGQsUG4sa24sY24pO2lmKEpuLmVycm9ycyYmSm4uZXJyb3JzLmxlbmd0aClyZXR1cm4gdm9pZCBFbi5wdXNoKEpuKTtpZihjbilyZXR1cm4gdnQub25TdGFy''@;'; put 'put ''dCgoKT0+ZmcoT3QsSm4uZnJvbVN0eWxlcykpLHZ0Lm9uRGVzdHJveSgoKT0+aGgoT3QsSm4udG9TdHlsZXMpKSx2b2lkIGgucHVzaCh2dCk7aWYoX3IuaXNGYWxsYmFja1RyYW5zaXRpb24pcmV0dXJuIHZ0Lm9uU3RhcnQoKCk9PmZnKE90LEpuLmZyb21TdHlsZXMpKSx2dC5vbkRlc3Ryb3ko''@;'; put 'put ''KCk9PmhoKE90LEpuLnRvU3R5bGVzKSksdm9pZCBoLnB1c2godnQpO2NvbnN0IE9yPVtdO0puLnRpbWVsaW5lcy5mb3JFYWNoKCRyPT57JHIuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITAsdGhpcy5kaXNhYmxlZE5vZGVzLmhhcygkci5lbGVtZW50KXx8T3IucHVzaCgkcil9KSxKbi50aW1l''@;'; put 'put ''bGluZXM9T3IsZC5hcHBlbmQoT3QsSm4udGltZWxpbmVzKSxfLnB1c2goe2luc3RydWN0aW9uOkpuLHBsYXllcjp2dCxlbGVtZW50Ok90fSksSm4ucXVlcmllZEVsZW1lbnRzLmZvckVhY2goJHI9Pm0xKFQsJHIsW10pLnB1c2godnQpKSxKbi5wcmVTdHlsZVByb3BzLmZvckVhY2goKCRyLFpy''@;'; put 'put ''KT0+e2lmKCRyLnNpemUpe2xldCBIcj1XLmdldChacik7SHJ8fFcuc2V0KFpyLEhyPW5ldyBTZXQpLCRyLmZvckVhY2goKFJpLFhvKT0+SHIuYWRkKFhvKSl9fSksSm4ucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgoJHIsWnIpPT57bGV0IEhyPWllLmdldChacik7SHJ8fGllLnNldChacixIcj1u''@;'; put 'put ''ZXcgU2V0KSwkci5mb3JFYWNoKChSaSxYbyk9PkhyLmFkZChYbykpfSl9KTtpZihFbi5sZW5ndGgpe2NvbnN0IFFuPVtdO0VuLmZvckVhY2goTXI9PntRbi5wdXNoKGZ1bmN0aW9uIEFNZShjLGwpe3JldHVybiBuZXcgQXIoMzUwNSwhMSl9KCkpfSksbW4uZm9yRWFjaChNcj0+TXIuZGVzdHJv''@;'; put 'put ''eSgpKSx0aGlzLnJlcG9ydEVycm9yKFFuKX1jb25zdCBscj1uZXcgTWFwLFZyPW5ldyBNYXA7Xy5mb3JFYWNoKFFuPT57Y29uc3QgTXI9UW4uZWxlbWVudDtkLmhhcyhNcikmJihWci5zZXQoTXIsTXIpLHRoaXMuX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKFFuLnBsYXllci5uYW1lc3BhY2VJZCxR''@;'; put 'put ''bi5pbnN0cnVjdGlvbixscikpfSksaC5mb3JFYWNoKFFuPT57Y29uc3QgTXI9UW4uZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoTXIsITEsUW4ubmFtZXNwYWNlSWQsUW4udHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaCh2dD0+e20xKGxyLE1yLFtdKS5wdXNoKHZ0KSx2dC5kZXN0''@;'; put 'put ''cm95KCl9KX0pO2NvbnN0IF9pPXl0LmZpbHRlcihRbj0+QmVlKFFuLFcsaWUpKSx1aT1uZXcgTWFwO0hlZSh1aSx0aGlzLmRyaXZlcixTdCxpZSxBZikuZm9yRWFjaChRbj0+e0JlZShRbixXLGllKSYmX2kucHVzaChRbil9KTtjb25zdCBFaT1uZXcgTWFwO1plLmZvckVhY2goKFFuLE1yKT0+''@;'; put 'put ''e0hlZShFaSx0aGlzLmRyaXZlcixuZXcgU2V0KFFuKSxXLCIhIil9KSxfaS5mb3JFYWNoKFFuPT57Y29uc3QgTXI9dWkuZ2V0KFFuKSxfcj1FaS5nZXQoUW4pO3VpLnNldChRbixuZXcgTWFwKFsuLi5Ncj8uZW50cmllcygpPz9bXSwuLi5fcj8uZW50cmllcygpPz9bXV0pKX0pO2NvbnN0IFVy''@;'; put 'put ''PVtdLEhuPVtdLFByPXt9O18uZm9yRWFjaChRbj0+e2NvbnN0e2VsZW1lbnQ6TXIscGxheWVyOl9yLGluc3RydWN0aW9uOnZ0fT1RbjtpZihkLmhhcyhNcikpe2lmKGdlLmhhcyhNcikpcmV0dXJuIF9yLm9uRGVzdHJveSgoKT0+aGgoTXIsdnQudG9TdHlsZXMpKSxfci5kaXNhYmxlZD0hMCxf''@;'; put 'put ''ci5vdmVycmlkZVRvdGFsVGltZSh2dC50b3RhbFRpbWUpLHZvaWQgaC5wdXNoKF9yKTtsZXQgT3Q9UHI7aWYoVnIuc2l6ZT4xKXtsZXQga249TXI7Y29uc3QgUG49W107Zm9yKDtrbj1rbi5wYXJlbnROb2RlOyl7Y29uc3QgSm49VnIuZ2V0KGtuKTtpZihKbil7T3Q9Sm47YnJlYWt9UG4ucHVz''@;'; put 'put ''aChrbil9UG4uZm9yRWFjaChKbj0+VnIuc2V0KEpuLE90KSl9Y29uc3QgY249dGhpcy5fYnVpbGRBbmltYXRpb24oX3IubmFtZXNwYWNlSWQsdnQsbHIsZixFaSx1aSk7aWYoX3Iuc2V0UmVhbFBsYXllcihjbiksT3Q9PT1QcilVci5wdXNoKF9yKTtlbHNle2NvbnN0IGtuPXRoaXMucGxheWVy''@;'; put 'put ''c0J5RWxlbWVudC5nZXQoT3QpO2tuJiZrbi5sZW5ndGgmJihfci5wYXJlbnRQbGF5ZXI9RnAoa24pKSxoLnB1c2goX3IpfX1lbHNlIGZnKE1yLHZ0LmZyb21TdHlsZXMpLF9yLm9uRGVzdHJveSgoKT0+aGgoTXIsdnQudG9TdHlsZXMpKSxIbi5wdXNoKF9yKSxnZS5oYXMoTXIpJiZoLnB1c2go''@;'; put 'put ''X3IpfSksSG4uZm9yRWFjaChRbj0+e2NvbnN0IE1yPWYuZ2V0KFFuLmVsZW1lbnQpO2lmKE1yJiZNci5sZW5ndGgpe2NvbnN0IF9yPUZwKE1yKTtRbi5zZXRSZWFsUGxheWVyKF9yKX19KSxoLmZvckVhY2goUW49PntRbi5wYXJlbnRQbGF5ZXI/UW4uc3luY1BsYXllckV2ZW50cyhRbi5wYXJl''@;'; put 'put ''bnRQbGF5ZXIpOlFuLmRlc3Ryb3koKX0pO2ZvcihsZXQgUW49MDtRbjx5dC5sZW5ndGg7UW4rKyl7Y29uc3QgTXI9eXRbUW5dLF9yPU1yW3AyXTtpZihROChNcixqRSksX3ImJl9yLmhhc0FuaW1hdGlvbiljb250aW51ZTtsZXQgdnQ9W107aWYoVC5zaXplKXtsZXQgY249VC5nZXQoTXIpO2Nu''@;'; put 'put ''JiZjbi5sZW5ndGgmJnZ0LnB1c2goLi4uY24pO2xldCBrbj10aGlzLmRyaXZlci5xdWVyeShNcixOSCwhMCk7Zm9yKGxldCBQbj0wO1BuPGtuLmxlbmd0aDtQbisrKXtsZXQgSm49VC5nZXQoa25bUG5dKTtKbiYmSm4ubGVuZ3RoJiZ2dC5wdXNoKC4uLkpuKX19Y29uc3QgT3Q9dnQuZmlsdGVy''@;'; put 'put ''KGNuPT4hY24uZGVzdHJveWVkKTtPdC5sZW5ndGg/a3hlKHRoaXMsTXIsT3QpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShNcil9cmV0dXJuIHl0Lmxlbmd0aD0wLFVyLmZvckVhY2goUW49Pnt0aGlzLnBsYXllcnMucHVzaChRbiksUW4ub25Eb25lKCgpPT57UW4uZGVzdHJveSgpO2NvbnN0IE1y''@;'; put 'put ''PXRoaXMucGxheWVycy5pbmRleE9mKFFuKTt0aGlzLnBsYXllcnMuc3BsaWNlKE1yLDEpfSksUW4ucGxheSgpfSksVXJ9YWZ0ZXJGbHVzaChsKXt0aGlzLl9mbHVzaEZucy5wdXNoKGwpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaChsKX1fZ2V0''@;'; put 'put ''UHJldmlvdXNQbGF5ZXJzKGwsYSxkLGgsZil7bGV0IF89W107aWYoYSl7Y29uc3QgVD10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTtUJiYoXz1UKX1lbHNle2NvbnN0IFQ9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZihUKXtjb25zdCBXPSFmfHxmPT0kYjtULmZv''@;'; put 'put ''ckVhY2goaWU9PntpZS5xdWV1ZWR8fCFXJiZpZS50cmlnZ2VyTmFtZSE9aHx8Xy5wdXNoKGllKX0pfX1yZXR1cm4oZHx8aCkmJihfPV8uZmlsdGVyKFQ9PiEoZCYmZCE9VC5uYW1lc3BhY2VJZHx8aCYmaCE9VC50cmlnZ2VyTmFtZSkpKSxffV9iZWZvcmVBbmltYXRpb25CdWlsZChsLGEsZCl7''@;'; put 'put ''Y29uc3QgZj1hLmVsZW1lbnQsXz1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmwsVD1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmEudHJpZ2dlck5hbWU7Zm9yKGNvbnN0IFcgb2YgYS50aW1lbGluZXMpe2NvbnN0IGllPVcuZWxlbWVudCxnZT1pZSE9PWYsd2U9bTEoZCxpZSxb''@;'; put 'put ''XSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKGllLGdlLF8sVCxhLnRvU3RhdGUpLmZvckVhY2goWmU9Pntjb25zdCBvdD1aZS5nZXRSZWFsUGxheWVyKCk7b3QuYmVmb3JlRGVzdHJveSYmb3QuYmVmb3JlRGVzdHJveSgpLFplLmRlc3Ryb3koKSx3ZS5wdXNoKFplKX0pfWZnKGYsYS5mcm9t''@;'; put 'put ''U3R5bGVzKX1fYnVpbGRBbmltYXRpb24obCxhLGQsaCxmLF8pe2NvbnN0IFQ9YS50cmlnZ2VyTmFtZSxXPWEuZWxlbWVudCxpZT1bXSxnZT1uZXcgU2V0LHdlPW5ldyBTZXQsRWU9YS50aW1lbGluZXMubWFwKG90PT57Y29uc3QgZXQ9b3QuZWxlbWVudDtnZS5hZGQoZXQpO2NvbnN0IHl0PWV0''@;'; put 'put ''W3AyXTtpZih5dCYmeXQucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyBpYihvdC5kdXJhdGlvbixvdC5kZWxheSk7Y29uc3Qga3Q9ZXQhPT1XLFN0PWZ1bmN0aW9uIEF4ZShjKXtjb25zdCBsPVtdO3JldHVybiBWZWUoYyxsKSxsfSgoZC5nZXQoZXQpfHx5eGUpLm1hcChscj0+bHIu''@;'; put 'put ''Z2V0UmVhbFBsYXllcigpKSkuZmlsdGVyKGxyPT4hIWxyLmVsZW1lbnQmJmxyLmVsZW1lbnQ9PT1ldCksUXQ9Zi5nZXQoZXQpLG5uPV8uZ2V0KGV0KSxtbj1nZWUodGhpcy5fbm9ybWFsaXplcixvdC5rZXlmcmFtZXMsUXQsbm4pLEVuPXRoaXMuX2J1aWxkUGxheWVyKG90LG1uLFN0KTtpZihv''@;'; put 'put ''dC5zdWJUaW1lbGluZSYmaCYmd2UuYWRkKGV0KSxrdCl7Y29uc3QgbHI9bmV3IEpIKGwsVCxldCk7bHIuc2V0UmVhbFBsYXllcihFbiksaWUucHVzaChscil9cmV0dXJuIEVufSk7aWUuZm9yRWFjaChvdD0+e20xKHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsb3QuZWxlbWVudCxbXSku''@;'; put 'put ''cHVzaChvdCksb3Qub25Eb25lKCgpPT5mdW5jdGlvbiBNeGUoYyxsLGEpe2xldCBkPWMuZ2V0KGwpO2lmKGQpe2lmKGQubGVuZ3RoKXtjb25zdCBoPWQuaW5kZXhPZihhKTtkLnNwbGljZShoLDEpfTA9PWQubGVuZ3RoJiZjLmRlbGV0ZShsKX1yZXR1cm4gZH0odGhpcy5wbGF5ZXJzQnlRdWVy''@;'; put 'put ''aWVkRWxlbWVudCxvdC5lbGVtZW50LG90KSl9KSxnZS5mb3JFYWNoKG90PT5oZChvdCxDZWUpKTtjb25zdCBaZT1GcChFZSk7cmV0dXJuIFplLm9uRGVzdHJveSgoKT0+e2dlLmZvckVhY2gob3Q9PlE4KG90LENlZSkpLGhoKFcsYS50b1N0eWxlcyl9KSx3ZS5mb3JFYWNoKG90PT57bTEoaCxv''@;'; put 'put ''dCxbXSkucHVzaChaZSl9KSxaZX1fYnVpbGRQbGF5ZXIobCxhLGQpe3JldHVybiBhLmxlbmd0aD4wP3RoaXMuZHJpdmVyLmFuaW1hdGUobC5lbGVtZW50LGEsbC5kdXJhdGlvbixsLmRlbGF5LGwuZWFzaW5nLGQpOm5ldyBpYihsLmR1cmF0aW9uLGwuZGVsYXkpfX1jbGFzcyBKSHtjb25zdHJ1''@;'; put 'put ''Y3RvcihsLGEsZCl7dGhpcy5uYW1lc3BhY2VJZD1sLHRoaXMudHJpZ2dlck5hbWU9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLl9wbGF5ZXI9bmV3IGliLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9bmV3IE1hcCx0aGlzLmRlc3Ryb3llZD0hMSx0aGlz''@;'; put 'put ''LnBhcmVudFBsYXllcj1udWxsLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMudG90YWxUaW1lPTB9c2V0UmVhbFBsYXllcihsKXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9bCx0aGlzLl9xdWV1ZWRD''@;'; put 'put ''YWxsYmFja3MuZm9yRWFjaCgoYSxkKT0+e2EuZm9yRWFjaChoPT5MSChsLGQsdm9pZCAwLGgpKX0pLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5jbGVhcigpLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKGwudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0h''@;'; put 'put ''MSl9Z2V0UmVhbFBsYXllcigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9b3ZlcnJpZGVUb3RhbFRpbWUobCl7dGhpcy50b3RhbFRpbWU9bH1zeW5jUGxheWVyRXZlbnRzKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZsLm9uU3RhcnQoKCk9PmEudHJpZ2dlckNhbGxi''@;'; put 'put ''YWNrKCJzdGFydCIpKSxsLm9uRG9uZSgoKT0+dGhpcy5maW5pc2goKSksbC5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSgpKX1fcXVldWVFdmVudChsLGEpe20xKHRoaXMuX3F1ZXVlZENhbGxiYWNrcyxsLFtdKS5wdXNoKGEpfW9uRG9uZShsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVF''@;'; put 'put ''dmVudCgiZG9uZSIsbCksdGhpcy5fcGxheWVyLm9uRG9uZShsKX1vblN0YXJ0KGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJzdGFydCIsbCksdGhpcy5fcGxheWVyLm9uU3RhcnQobCl9b25EZXN0cm95KGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkZXN0cm95''@;'; put 'put ''IixsKSx0aGlzLl9wbGF5ZXIub25EZXN0cm95KGwpfWluaXQoKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4hdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9cGxheSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBsYXkoKX1wYXVzZSgp''@;'; put 'put ''eyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9cmVzdGFydCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQoKX1maW5pc2goKXt0aGlzLl9wbGF5ZXIuZmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9''@;'; put 'put ''cmVzZXQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfXNldFBvc2l0aW9uKGwpe3RoaXMucXVldWVkfHx0aGlzLl9wbGF5ZXIuc2V0UG9zaXRpb24obCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX10cmln''@;'; put 'put ''Z2VyQ2FsbGJhY2sobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmEudHJpZ2dlckNhbGxiYWNrKGwpfX1mdW5jdGlvbiBKRShjKXtyZXR1cm4gYyYmMT09PWMubm9kZVR5cGV9ZnVuY3Rpb24gRmVlKGMsbCl7Y29uc3QgYT1jLnN0eWxlLmRpc3BsYXk7cmV0dXJu''@;'; put 'put ''IGMuc3R5bGUuZGlzcGxheT1sPz8ibm9uZSIsYX1mdW5jdGlvbiBIZWUoYyxsLGEsZCxoKXtjb25zdCBmPVtdO2EuZm9yRWFjaChXPT5mLnB1c2goRmVlKFcpKSk7Y29uc3QgXz1bXTtkLmZvckVhY2goKFcsaWUpPT57Y29uc3QgZ2U9bmV3IE1hcDtXLmZvckVhY2god2U9Pntjb25zdCBFZT1s''@;'; put 'put ''LmNvbXB1dGVTdHlsZShpZSx3ZSxoKTtnZS5zZXQod2UsRWUpLCghRWV8fDA9PUVlLmxlbmd0aCkmJihpZVtwMl09d3hlLF8ucHVzaChpZSkpfSksYy5zZXQoaWUsZ2UpfSk7bGV0IFQ9MDtyZXR1cm4gYS5mb3JFYWNoKFc9PkZlZShXLGZbVCsrXSkpLF99ZnVuY3Rpb24gTmVlKGMsbCl7Y29u''@;'; put 'put ''c3QgYT1uZXcgTWFwO2lmKGMuZm9yRWFjaChUPT5hLnNldChULFtdKSksMD09bC5sZW5ndGgpcmV0dXJuIGE7Y29uc3QgaD1uZXcgU2V0KGwpLGY9bmV3IE1hcDtmdW5jdGlvbiBfKFQpe2lmKCFUKXJldHVybiAxO2xldCBXPWYuZ2V0KFQpO2lmKFcpcmV0dXJuIFc7Y29uc3QgaWU9VC5wYXJl''@;'; put 'put ''bnROb2RlO3JldHVybiBXPWEuaGFzKGllKT9pZTpoLmhhcyhpZSk/MTpfKGllKSxmLnNldChULFcpLFd9cmV0dXJuIGwuZm9yRWFjaChUPT57Y29uc3QgVz1fKFQpOzEhPT1XJiZhLmdldChXKS5wdXNoKFQpfSksYX1mdW5jdGlvbiBoZChjLGwpe2MuY2xhc3NMaXN0Py5hZGQobCl9ZnVuY3Rp''@;'; put 'put ''b24gUTgoYyxsKXtjLmNsYXNzTGlzdD8ucmVtb3ZlKGwpfWZ1bmN0aW9uIGt4ZShjLGwsYSl7RnAoYSkub25Eb25lKCgpPT5jLnByb2Nlc3NMZWF2ZU5vZGUobCkpfWZ1bmN0aW9uIFZlZShjLGwpe2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV07ZCBpbnN0YW5jZW9m''@;'; put 'put ''IFZLP1ZlZShkLnBsYXllcnMsbCk6bC5wdXNoKGQpfX1mdW5jdGlvbiBCZWUoYyxsLGEpe2NvbnN0IGQ9YS5nZXQoYyk7aWYoIWQpcmV0dXJuITE7bGV0IGg9bC5nZXQoYyk7cmV0dXJuIGg/ZC5mb3JFYWNoKGY9PmguYWRkKGYpKTpsLnNldChjLGQpLGEuZGVsZXRlKGMpLCEwfWNsYXNzIFFF''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShoLGYpPT57fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBTeGUobCxhLGQpLHRo''@;'; put 'put ''aXMuX3RpbWVsaW5lRW5naW5lPW5ldyBneGUobCxhLGQpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KGgsZik9PnRoaXMub25SZW1vdmFsQ29tcGxldGUoaCxmKX1yZWdpc3RlclRyaWdnZXIobCxhLGQsaCxmKXtjb25zdCBfPWwrIi0iK2g7bGV0IFQ9dGhpcy5f''@;'; put 'put ''dHJpZ2dlckNhY2hlW19dO2lmKCFUKXtjb25zdCBXPVtdLGdlPXpIKHRoaXMuX2RyaXZlcixmLFcsW10pO2lmKFcubGVuZ3RoKXRocm93IGZ1bmN0aW9uIHZNZShjLGwpe3JldHVybiBuZXcgQXIoMzQwNCwhMSl9KCk7VD1mdW5jdGlvbiBkeGUoYyxsLGEpe3JldHVybiBuZXcgaHhlKGMsbCxh''@;'; put 'put ''KX0oaCxnZSx0aGlzLl9ub3JtYWxpemVyKSx0aGlzLl90cmlnZ2VyQ2FjaGVbX109VH10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihhLGgsVCl9cmVnaXN0ZXIobCxhKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKGwsYSl9ZGVzdHJveShsLGEpe3RoaXMu''@;'; put 'put ''X3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveShsLGEpfW9uSW5zZXJ0KGwsYSxkLGgpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZShsLGEsZCxoKX1vblJlbW92ZShsLGEsZCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZW1vdmVOb2RlKGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9u''@;'; put 'put ''cyhsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsYSl9cHJvY2VzcyhsLGEsZCxoKXtpZigiQCI9PWQuY2hhckF0KDApKXtjb25zdFtmLF9dPW1lZShkKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5kKGYsYSxfLGgpfWVsc2UgdGhpcy5fdHJh''@;'; put 'put ''bnNpdGlvbkVuZ2luZS50cmlnZ2VyKGwsYSxkLGgpfWxpc3RlbihsLGEsZCxoLGYpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W18sVF09bWVlKGQpO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4oXyxhLFQsZil9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlz''@;'; put 'put ''dGVuKGwsYSxkLGgsZil9Zmx1c2gobD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaChsKX1nZXQgcGxheWVycygpe3JldHVyblsuLi50aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMsLi4udGhpcy5fdGltZWxpbmVFbmdpbmUucGxheWVyc119d2hlblJlbmRlcmluZ0RvbmUo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKX19bGV0IEl4ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fc3RhcnRTdHlsZXM9ZCx0aGlzLl9lbmRTdHlsZXM9aCx0aGlzLl9zdGF0ZT0wO2xldCBmPWMuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5nZXQoYSk7Znx8Yy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LnNldChhLGY9bmV3IE1hcCksdGhpcy5f''@;'; put 'put ''aW5pdGlhbFN0eWxlcz1mfXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZoaCh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwy''@;'; put 'put ''JiYoaGgodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJihoaCh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRl''@;'; put 'put ''PDMmJihjLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVsZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYoZmcodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX2VuZFN0eWxlcyYmKGZnKHRoaXMuX2VsZW1lbnQs''@;'; put 'put ''dGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksaGgodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0zKX19cmV0dXJuIGMuaW5pdGlhbFN0eWxlc0J5RWxlbWVudD1uZXcgV2Vha01hcCxjfSkoKTtmdW5jdGlvbiBRSChjKXtsZXQgbD1u''@;'; put 'put ''dWxsO3JldHVybiBjLmZvckVhY2goKGEsZCk9PnsoZnVuY3Rpb24gTHhlKGMpe3JldHVybiJkaXNwbGF5Ij09PWN8fCJwb3NpdGlvbiI9PT1jfSkoZCkmJihsPWx8fG5ldyBNYXAsbC5zZXQoZCxhKSl9KSxsfWNsYXNzIGplZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLmVsZW1lbnQ9bCx0''@;'; put 'put ''aGlzLmtleWZyYW1lcz1hLHRoaXMub3B0aW9ucz1kLHRoaXMuX3NwZWNpYWxTdHlsZXM9aCx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5faW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRl''@;'; put 'put ''ZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9bmV3IE1hcCx0aGlzLl9kdXJhdGlvbj1kLmR1cmF0''@;'; put 'put ''aW9uLHRoaXMuX2RlbGF5PWQuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWlu''@;'; put 'put ''aXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtjb25zdCBsPXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMu''@;'; put 'put ''X3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LGwsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPWwubGVuZ3RoP2xbbC5sZW5ndGgtMV06bmV3IE1hcCx0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLCgpPT50aGlzLl9vbkZpbmlzaCgpKX1f''@;'; put 'put ''cHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChsKXtjb25zdCBhPVtdO3JldHVybiBsLmZvckVhY2goZD0+e2EucHVzaChPYmplY3Qu''@;'; put 'put ''ZnJvbUVudHJpZXMoZCkpfSksYX1fdHJpZ2dlcldlYkFuaW1hdGlvbihsLGEsZCl7cmV0dXJuIGwuYW5pbWF0ZSh0aGlzLl9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QoYSksZCl9b25TdGFydChsKXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaChsKSx0aGlzLl9vblN0YXJ0Rm5zLnB1''@;'; put 'put ''c2gobCl9b25Eb25lKGwpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2gobCksdGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5f''@;'; put 'put ''b25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSEwLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuc3RhcnQoKSksdGhpcy5kb21QbGF5ZXIucGxheSgpfXBhdXNlKCl7dGhpcy5pbml0KCksdGhpcy5kb21Q''@;'; put 'put ''bGF5ZXIucGF1c2UoKX1maW5pc2goKXt0aGlzLmluaXQoKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmZpbmlzaCgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5kb21QbGF5ZXIuZmluaXNoKCl9cmVzZXQoKXt0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhp''@;'; put 'put ''cy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfV9yZXNldERvbVBsYXllclN0YXRlKCl7dGhpcy5kb21Q''@;'; put 'put ''bGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfXJlc3RhcnQoKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVzZXREb21QbGF5''@;'; put 'put ''ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKGwpe3ZvaWQgMD09PXRoaXMu''@;'; put 'put ''ZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT1sKnRoaXMudGltZX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZS90aGlzLnRpbWV9Z2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJh''@;'; put 'put ''dGlvbn1iZWZvcmVEZXN0cm95KCl7Y29uc3QgbD1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKGQsaCk9Pnsib2Zmc2V0IiE9PWgmJmwuc2V0KGgsdGhpcy5fZmluaXNoZWQ/ZDpFZWUodGhpcy5lbGVtZW50LGgpKX0pLHRoaXMuY3VycmVu''@;'; put 'put ''dFNuYXBzaG90PWx9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgUnhle3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH12YWxpZGF0''@;'; put 'put ''ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KGwsYSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGwsYSl7cmV0dXJuIF9lZShsLGEpfWdldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIFBIKGwpfXF1ZXJ5KGwsYSxkKXtyZXR1cm4gYmVlKGwsYSxk''@;'; put 'put ''KX1jb21wdXRlU3R5bGUobCxhLGQpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShsKVthXX1hbmltYXRlKGwsYSxkLGgsZixfPVtdKXtjb25zdCBXPXtkdXJhdGlvbjpkLGRlbGF5OmgsZmlsbDowPT1oPyJib3RoIjoiZm9yd2FyZHMifTtmJiYoVy5lYXNpbmc9Zik7Y29uc3QgaWU9''@;'; put 'put ''bmV3IE1hcCxnZT1fLmZpbHRlcihaZT0+WmUgaW5zdGFuY2VvZiBqZWUpOyhmdW5jdGlvbiBCTWUoYyxsKXtyZXR1cm4gMD09PWN8fDA9PT1sfSkoZCxoKSYmZ2UuZm9yRWFjaChaZT0+e1plLmN1cnJlbnRTbmFwc2hvdC5mb3JFYWNoKChvdCxldCk9PmllLnNldChldCxvdCkpfSk7bGV0IHdl''@;'; put 'put ''PWZ1bmN0aW9uIEhNZShjKXtyZXR1cm4gYy5sZW5ndGg/Y1swXWluc3RhbmNlb2YgTWFwP2M6Yy5tYXAobD0+U2VlKGwpKTpbXX0oYSkubWFwKFplPT5IcChaZSkpO3dlPWZ1bmN0aW9uIGpNZShjLGwsYSl7aWYoYS5zaXplJiZsLmxlbmd0aCl7bGV0IGQ9bFswXSxoPVtdO2lmKGEuZm9yRWFj''@;'; put 'put ''aCgoZixfKT0+e2QuaGFzKF8pfHxoLnB1c2goXyksZC5zZXQoXyxmKX0pLGgubGVuZ3RoKWZvcihsZXQgZj0xO2Y8bC5sZW5ndGg7ZisrKXtsZXQgXz1sW2ZdO2guZm9yRWFjaChUPT5fLnNldChULEVlZShjLFQpKSl9fXJldHVybiBsfShsLHdlLGllKTtjb25zdCBFZT1mdW5jdGlvbiBEeGUo''@;'; put 'put ''YyxsKXtsZXQgYT1udWxsLGQ9bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg/KGE9UUgobFswXSksbC5sZW5ndGg+MSYmKGQ9UUgobFtsLmxlbmd0aC0xXSkpKTpsIGluc3RhbmNlb2YgTWFwJiYoYT1RSChsKSksYXx8ZD9uZXcgSXhlKGMsYSxkKTpudWxsfShsLHdlKTty''@;'; put 'put ''ZXR1cm4gbmV3IGplZShsLHdlLFcsRWUpfX1sZXQgT3hlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBIS3tjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fbmV4dEFuaW1hdGlvbklkPTAsdGhpcy5fcmVuZGVyZXI9YS5jcmVhdGVSZW5kZXJlcihkLmJvZHkse2lkOiIwIixlbmNhcHN1bGF0''@;'; put 'put ''aW9uOk9jLk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KX1idWlsZChhKXtjb25zdCBkPXRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO3RoaXMuX25leHRBbmltYXRpb25JZCsrO2NvbnN0IGg9QXJyYXkuaXNBcnJheShhKT9OSyhhKTphO3JldHVybiB6ZWUodGhp''@;'; put 'put ''cy5fcmVuZGVyZXIsbnVsbCxkLCJyZWdpc3RlciIsW2hdKSxuZXcgUHhlKGQsdGhpcy5fcmVuZGVyZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihZMyksYXIoTHMpKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAy''@;'; put 'put ''NzVmYWN9KSxjfSkoKTtjbGFzcyBQeGUgZXh0ZW5kcyBQbWV7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuX2lkPWwsdGhpcy5fcmVuZGVyZXI9YX1jcmVhdGUobCxhKXtyZXR1cm4gbmV3IEZ4ZSh0aGlzLl9pZCxsLGF8fHt9LHRoaXMuX3JlbmRlcmVyKX19Y2xhc3MgRnhle2NvbnN0''@;'; put 'put ''cnVjdG9yKGwsYSxkLGgpe3RoaXMuaWQ9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLl9yZW5kZXJlcj1oLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLnRvdGFsVGltZT0wLHRoaXMuX2NvbW1hbmQoImNyZWF0ZSIsZCl9X2xpc3RlbihsLGEpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LGBAQCR7dGhpcy5pZH06JHtsfWAsYSl9X2NvbW1hbmQobCwuLi5hKXtyZXR1cm4gemVlKHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLGwsYSl9b25Eb25lKGwpe3RoaXMuX2xpc3RlbigiZG9uZSIsbCl9b25TdGFydChs''@;'; put 'put ''KXt0aGlzLl9saXN0ZW4oInN0YXJ0IixsKX1vbkRlc3Ryb3kobCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95IixsKX1pbml0KCl7dGhpcy5fY29tbWFuZCgiaW5pdCIpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0''@;'; put 'put ''YXJ0ZWQ9ITB9cGF1c2UoKXt0aGlzLl9jb21tYW5kKCJwYXVzZSIpfXJlc3RhcnQoKXt0aGlzLl9jb21tYW5kKCJyZXN0YXJ0Iil9ZmluaXNoKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9ZGVzdHJveSgpe3RoaXMuX2NvbW1hbmQoImRlc3Ryb3kiKX1yZXNldCgpe3RoaXMuX2NvbW1hbmQo''@;'; put 'put ''InJlc2V0IiksdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbihsKXt0aGlzLl9jb21tYW5kKCJzZXRQb3NpdGlvbiIsbCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZW5naW5lLnBsYXllcnNbK3RoaXMuaWRdPy5nZXRQb3NpdGlvbigpPz8wfX1mdW5jdGlvbiB6ZWUo''@;'; put 'put ''YyxsLGEsZCxoKXtyZXR1cm4gYy5zZXRQcm9wZXJ0eShsLGBAQCR7YX06JHtkfWAsaCl9Y29uc3QgVWVlPSJALmRpc2FibGVkIjtsZXQgSHhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVsZWdhdGU9YSx0aGlzLmVuZ2luZT1kLHRoaXMuX3pvbmU9aCx0aGlzLl9j''@;'; put 'put ''dXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsZC5vblJlbW92YWxDb21wbGV0ZT0oZixfKT0+e2NvbnN0IFQ9Xz8ucGFyZW50Tm9kZShm''@;'; put 'put ''KTtUJiZfLnJlbW92ZUNoaWxkKFQsZil9fWNyZWF0ZVJlbmRlcmVyKGEsZCl7Y29uc3QgZj10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGEsZCk7aWYoIShhJiZkJiZkLmRhdGEmJmQuZGF0YS5hbmltYXRpb24pKXtsZXQgZ2U9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQoZik7cmV0dXJu''@;'; put 'put ''IGdlfHwoZ2U9bmV3IFplZSgiIixmLHRoaXMuZW5naW5lLCgpPT50aGlzLl9yZW5kZXJlckNhY2hlLmRlbGV0ZShmKSksdGhpcy5fcmVuZGVyZXJDYWNoZS5zZXQoZixnZSkpLGdlfWNvbnN0IF89ZC5pZCxUPWQuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlz''@;'; put 'put ''LmVuZ2luZS5yZWdpc3RlcihULGEpO2NvbnN0IFc9Z2U9PntBcnJheS5pc0FycmF5KGdlKT9nZS5mb3JFYWNoKFcpOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihfLFQsYSxnZS5uYW1lLGdlKX07cmV0dXJuIGQuZGF0YS5hbmltYXRpb24uZm9yRWFjaChXKSxuZXcgTnhlKHRoaXMsVCxm''@;'; put 'put ''LHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX21pY3JvdGFza0lkKyt9KX1zY2hlZHVsZUxpc3RlbmVy''@;'; put 'put ''Q2FsbGJhY2soYSxkLGgpe2E+PTAmJmE8dGhpcy5fbWljcm90YXNrSWQ/dGhpcy5fem9uZS5ydW4oKCk9PmQoaCkpOigwPT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIubGVuZ3RoJiZxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5fYW5pbWF0aW9u''@;'; put 'put ''Q2FsbGJhY2tzQnVmZmVyLmZvckVhY2goZj0+e2NvbnN0W18sVF09ZjtfKFQpfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIucHVzaChbZCxoXSkpfWVuZCgpe3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMu''@;'; put 'put ''X2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3NjaGVkdWxlQ291bnRUYXNrKCksdGhpcy5lbmdpbmUuZmx1c2godGhpcy5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmlu''@;'; put 'put ''Z0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoWTMpLGFyKFFFKSxhcihObykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p''@;'; put 'put ''LGN9KSgpO2NsYXNzIFplZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLm5hbWVzcGFjZUlkPWwsdGhpcy5kZWxlZ2F0ZT1hLHRoaXMuZW5naW5lPWQsdGhpcy5fb25EZXN0cm95PWh9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhfWRlc3Ryb3lOb2RlKGwpe3RoaXMuZGVs''@;'; put 'put ''ZWdhdGUuZGVzdHJveU5vZGU/LihsKX1kZXN0cm95KCl7dGhpcy5lbmdpbmUuZGVzdHJveSh0aGlzLm5hbWVzcGFjZUlkLHRoaXMuZGVsZWdhdGUpLHRoaXMuZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+e3F1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5kZWxlZ2F0ZS5kZXN0''@;'; put 'put ''cm95KCl9KX0pLHRoaXMuX29uRGVzdHJveT8uKCl9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQobCxhKX1jcmVhdGVDb21tZW50KGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KGwpfWFwcGVuZENoaWxkKGwsYSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChsLGEpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsYSxsLCExKX1pbnNlcnRCZWZvcmUobCxhLGQsaD0hMCl7dGhpcy5kZWxlZ2F0ZS5pbnNl''@;'; put 'put ''cnRCZWZvcmUobCxhLGQpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsYSxsLGgpfXJlbW92ZUNoaWxkKGwsYSxkKXt0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGEsdGhpcy5kZWxlZ2F0ZSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudChsLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShsKX1uZXh0U2libGluZyhsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyhsKX1zZXRBdHRyaWJ1dGUobCxhLGQsaCl7dGhpcy5k''@;'; put 'put ''ZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUobCxhLGQsaCl9cmVtb3ZlQXR0cmlidXRlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZShsLGEsZCl9YWRkQ2xhc3MobCxhKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKGwsYSl9cmVtb3ZlQ2xhc3MobCxhKXt0aGlzLmRlbGVnYXRlLnJl''@;'; put 'put ''bW92ZUNsYXNzKGwsYSl9c2V0U3R5bGUobCxhLGQsaCl7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZShsLGEsZCxoKX1yZW1vdmVTdHlsZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZShsLGEsZCl9c2V0UHJvcGVydHkobCxhLGQpeyJAIj09YS5jaGFyQXQoMCkmJmE9PVVlZT90aGlz''@;'; put 'put ''LmRpc2FibGVBbmltYXRpb25zKGwsISFkKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGwsYSxkKX1zZXRWYWx1ZShsLGEpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUobCxhKX1saXN0ZW4obCxhLGQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihsLGEsZCl9ZGlzYWJsZUFuaW1hdGlv''@;'; put 'put ''bnMobCxhKXt0aGlzLmVuZ2luZS5kaXNhYmxlQW5pbWF0aW9ucyhsLGEpfX1jbGFzcyBOeGUgZXh0ZW5kcyBaZWV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihhLGQsaCxmKSx0aGlzLmZhY3Rvcnk9bCx0aGlzLm5hbWVzcGFjZUlkPWF9c2V0UHJvcGVydHkobCxhLGQpeyJAIj09YS5j''@;'; put 'put ''aGFyQXQoMCk/Ii4iPT1hLmNoYXJBdCgxKSYmYT09VWVlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMobCxkPXZvaWQgMD09PWR8fCEhZCk6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLGwsYS5zbGljZSgxKSxkKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGwsYSxkKX1s''@;'; put 'put ''aXN0ZW4obCxhLGQpe2lmKCJAIj09YS5jaGFyQXQoMCkpe2NvbnN0IGg9ZnVuY3Rpb24gVnhlKGMpe3N3aXRjaChjKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0''@;'; put 'put ''OnJldHVybiBjfX0obCk7bGV0IGY9YS5zbGljZSgxKSxfPSIiO3JldHVybiJAIiE9Zi5jaGFyQXQoMCkmJihbZixfXT1mdW5jdGlvbiBCeGUoYyl7Y29uc3QgbD1jLmluZGV4T2YoIi4iKTtyZXR1cm5bYy5zdWJzdHJpbmcoMCxsKSxjLnNsaWNlKGwrMSldfShmKSksdGhpcy5lbmdpbmUubGlz''@;'; put 'put ''dGVuKHRoaXMubmFtZXNwYWNlSWQsaCxmLF8sVD0+e3RoaXMuZmFjdG9yeS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soVC5fZGF0YXx8LTEsZCxUKX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihsLGEsZCl9fWxldCBqeGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFFFe2NvbnN0cnVj''@;'; put 'put ''dG9yKGEsZCxoLGYpe3N1cGVyKGEuYm9keSxkLGgpfW5nT25EZXN0cm95KCl7dGhpcy5mbHVzaCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcyksYXIoRkgpLGFyKEdIKSxhcih4NSkpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IFllZT1be3Byb3ZpZGU6SEssdXNlQ2xhc3M6T3hlfSx7cHJvdmlkZTpHSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHp4ZSgpe3JldHVybiBuZXcgYXhlfX0se3Byb3ZpZGU6UUUsdXNlQ2xhc3M6anhlfSx7cHJvdmlkZTpZMyx1c2VGYWN0b3J5''@;'; put 'put ''OmZ1bmN0aW9uIFV4ZShjLGwsYSl7cmV0dXJuIG5ldyBIeGUoYyxsLGEpfSxkZXBzOltJTyxRRSxOb119XSxlTj1be3Byb3ZpZGU6RkgsdXNlRmFjdG9yeTooKT0+bmV3IFJ4ZX0se3Byb3ZpZGU6ZVMsdXNlVmFsdWU6IkJyb3dzZXJBbmltYXRpb25zIn0sLi4uWWVlXSxXZWU9W3twcm92aWRl''@;'; put 'put ''OkZILHVzZUNsYXNzOnllZX0se3Byb3ZpZGU6ZVMsdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uWWVlXTtsZXQgWnhlPSgoKT0+e2NsYXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOmEuZGlzYWJsZUFuaW1hdGlvbnM/V2VlOmVOfX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOmVOLGltcG9ydHM6W0VHXX0pLGN9KSgpLFl4ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0''@;'; put 'put ''KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW5vdC1mb3VuZCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjAsY29uc3RzOltb''@;'; put 'put ''MSwiY29udGVudC1hcmVhIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJwIiksTmUoMiwiNDA0IC0gTm90IEZvdW5kIikseWUoKSgpKX19KSxjfSkoKSxHZWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31kb3dubG9hZEZpbGUoYSxkLGg9InR4''@;'; put 'put ''dCIpe2xldCBmPW5ldyBCbG9iKFthXSx7dHlwZToidGV4dC9wbGFpbiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihmLGAke2R9LiR7aH1gKTtlbHNle2xldCBfPWRvY3VtZW50LmNyZWF0''@;'; put 'put ''ZUVsZW1lbnQoImEiKTtfLmhyZWY9ImRhdGE6dGV4dC9wbGFpbiwiK2VuY29kZVVSSUNvbXBvbmVudChhKSxfLmRvd25sb2FkPWAke2R9LiR7aH1gLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXyksXy5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoXyl9fXJlYWRGaWxlKGEp''@;'; put 'put ''e3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPSgpPT57Zi5yZXN1bHQmJmQoSlNPTi5wYXJzZShmLnJlc3VsdC50b1N0cmluZygpKSl9LGYucmVhZEFzVGV4dChhKX0pfWNsZWFyVXBsb2FkSW5wdXQoYSl7YS50YXJnZXQudmFsdWU9IiJ9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2Z1bmN0aW9uIFd4ZShjLGwpezEmYyYmKHpyKDApLG1lKDEsInNwYW4iLDE5''@;'; put 'put ''KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLG1lKDMsInAiKSxOZSg0LCJEZXBsb3lpbmcuLi4iKSx5ZSgpLFlyKCkpfWZ1bmN0aW9uIEd4ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiAkeGUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24g''@;'; put 'put ''cXhlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uIEt4ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBYeGUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIyKSxRZSgxLHF4ZSwxLDAsImNsci1pY29uIiwyMyksUWUoMixLeGUsMSwwLCJjbHIt''@;'; put 'put ''aWNvbiIsMjQpLG1lKDMsInAiKSxOZSg0LCJDcmVhdGUgZGF0YWJhc2UiKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxDZSgxKSxSZSgibmdJZiIsITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFr''@;'; put 'put ''ZURhdGEpfX1mdW5jdGlvbiBKeGUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gUXhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7enIoMCksbWUoMSwicCIsMjApLE5lKDIsIkRvbmUiKSx5ZSgpLHF0KDMsImhyIiwyMSksbWUoNCwiZGl2IiwyMiksUWUoNSxHeGUs''@;'; put 'put ''MSwwLCJjbHItaWNvbiIsMjMpLFFlKDYsJHhlLDEsMCwiY2xyLWljb24iLDI0KSxtZSg3LCJwIiksTmUoOCwiRGVwbG95IFNBUyBKb2JzIikseWUoKSgpLFFlKDksWHhlLDUsMiwiZGl2IiwyNSkscXQoMTAsImhyIiwyMSksbWUoMTEsImRpdiIsMjYpKDEyLCJidXR0b24iLDI3KSx4dCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksUWUoMTMsSnhlLDEsMCwiY2xyLWljb24iLDI0KSxOZSgxNCwiIExBVU5DSCAvIENPTkZJR1VSRSAiKSx5ZSgpLG1lKDE1LCJidXR0b24iLDI4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQo''@;'; put 'put ''YSk7Y29uc3QgaD1qZSgyKTtyZXR1cm4ganQoaC5kb3dubG9hZEZpbGUoaC5tYWtlRGF0YVJlc3BvbnNlLCJjcmVhdGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksTmUoMTYsIiBEb3dubG9hZCBsb2cgIikseWUoKSgpLHF0KDE3LCJociIsMjEpLG1lKDE4LCJkaXYiLDI2KSgxOSwiYnV0dG9u''@;'; put 'put ''IiwyOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoMik7cmV0dXJuIGguYXV0b2RlcGxveWluZz0hMSxqdChoLmF1dG9kZXBsb3lEb25lPSExKX0pLE5lKDIwLCIgQ2xvc2UgIikseWUoKSxtZSgyMSwiYnV0dG9uIiwyOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBCdChhKSxqdChqZSgyKS5vcGVuU2FzUmVxdWVzdHNNb2RhbCgpKX0pLE5lKDIyLCIgU0FTIFJlcXVlc3RzICIpLHllKCkoKSxZcigpfWlmKDImYyl7Y29uc3QgYT1qZSgyKTtDZSg1KSxSZSgibmdJZiIsYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxDZSgxKSxS''@;'; put 'put ''ZSgibmdJZiIsIWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayksQ2UoMyksUmUoIm5nSWYiLG51bGwhPT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLENlKDQpLFJlKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFja3x8ITE9''@;'; put 'put ''PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpfX1mdW5jdGlvbiBlRWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE2KSgxLCJkaXYiLDE3KSxRZSgyLFd4ZSw1LDAsIm5nLWNvbnRhaW5lciIsMTgpLFFlKDMsUXhlLDIzLDQsIm5nLWNvbnRhaW5lciIsMTgpLHllKCkoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPWplKCk7Q2UoMiksUmUoIm5nSWYiLCFhLmF1dG9kZXBsb3lEb25lKSxDZSgxKSxSZSgibmdJZiIsYS5hdXRvZGVwbG95RG9uZSl9fWxldCB0RWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuZGVwbG95U2Vydmlj''@;'; put 'put ''ZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMuc2FzSnNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgRXIs''@;'; put 'put ''dGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLmF1dG9kZXBsb3lpbmc9ITEsdGhpcy5hdXRvZGVwbG95RG9uZT0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSx0aGlzLmlzU3VibWl0dGluZ0pzb249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9''@;'; put 'put ''ITEsdGhpcy5yZWNyZWF0ZURhdGFiYXNlPSExLHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExLHRoaXMuYXV0b0RlcGxveVN0YXR1cz17ZGVwbG95U2VydmljZVBhY2s6bnVsbCxydW5NYWtlRGF0YTpudWxsfX1uZ09uSW5pdCgpe31leGVjdXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJu''@;'; put 'put ''IGZpKGZ1bmN0aW9uKigpe2EuYXV0b2RlcGxveWluZz0hMCxhLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEuc2FzSnMuZGVwbG95U2VydmljZVBhY2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2Msdm9pZCAwLHZvaWQgMCwhMCksYS5hdXRvRGVwbG95U3Rh''@;'; put 'put ''dHVzLmRlcGxveVNlcnZpY2VQYWNrPSEwLGEuaXNKc29uU3VibWl0dGVkPSEwfWNhdGNoKGQpe2xldCBoPSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBlb2YgZC5tZXNzYWdlP0pTT04uc3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2UsYS5hdXRvRGVwbG95U3RhdHVz''@;'; put 'put ''LmRlcGxveVNlcnZpY2VQYWNrPSExLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/aDpkfWApLGEuYXV0b2RlcGxveWluZz0hMSx2b2lkKGEuYXV0b2RlcGxveURvbmU9ITEpfWEuaXNTdWJtaXR0aW5nSnNvbj0hMSxh''@;'; put 'put ''LnJlY3JlYXRlRGF0YWJhc2U/YS5jcmVhdGVEYXRhYmFzZSgpOmEuYXV0b2RlcGxveURvbmU9ITB9KSgpfWNyZWF0ZURhdGFiYXNlKCl7dGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIse2Zyb21qczpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERD''@;'; put 'put ''UEFUSDp0aGlzLmRjUGF0aH1dfSx7dXNlQ29tcHV0ZUFwaTohMSxjb250ZXh0TmFtZTp0aGlzLnNhc0pzQ29uZmlnLmNvbnRleHROYW1lLGRlYnVnOiEwfSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oaD0+e3RoaXMuYXV0b2RlcGxveURvbmU9ITA7''@;'; put 'put ''dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShoKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9aH10aGlzLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGE9ISEoaC5yZXN1bHQmJmgucmVzdWx0Lmxlbmd0aD4wKX0pLmNhdGNoKGg9Pnt0aGlzLmF1dG9EZXBs''@;'; put 'put ''b3lTdGF0dXMucnVuTWFrZURhdGE9ITEsdGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGgpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1ofX0pfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2''@;'; put 'put ''aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9b25Kc29uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgaD1hLnRhcmdldC5maWxlc1swXTtkLmpzb25GaWxlPXlpZWxkIGQuZGVwbG95U2VydmljZS5yZWFkRmlsZShoKX0pKCl9cmVjcmVhdGVEYXRhYmFz''@;'; put 'put ''ZUNsaWNrZWQoYSl7ITA9PT1hLnRhcmdldC5jaGVja2VkJiYodGhpcy5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITApfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b3BlblNhc1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmlnYXRlVG9Ib21lLmVtaXQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQodmwpLHR0KEdlZSksdHQob2EpLHR0KHcwKSl9LGMuXHUwMjc1Y21wPXdyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hdXRvbWF0aWMtZGVwbG95Il1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyIsYXBwTG9jOiJhcHBMb2MiLGRjUGF0aDoiZGNQYXRoIixzZWxl''@;'; put 'put ''Y3RlZEFkbWluR3JvdXA6InNlbGVjdGVkQWRtaW5Hcm91cCJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo0Nix2YXJzOjEwLGNvbnN0czpbWyJjbGFzcyIsImF1dG8tZGVwbG95Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUi''@;'; put 'put ''XSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsIm10LTAiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiY2hlY2tlZCIs''@;'; put 'put ''IiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5''@;'; put 'put ''IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIsMywiY2xpY2siXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJjbGljayIsImNoYW5nZSJdLFsidXBsb2FkSnNvbkF1dG8iLCIiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJd''@;'; put 'put ''LFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImF1dG8tZGVwbG95Il0sWzEsInNwaW5uZXItYm94Il0sWzQsIm5nSWYiXSxbMSwi''@;'; put 'put ''c3Bpbm5lciIsInNwaW5uZXItbWQiXSxbMSwibS0wIiwiYWxpZ24tc2VsZi1zdGFydCJdLFsxLCJ3LTEwMCJdLFsxLCJkZXBsb3ktc3RhdHVzLXJvdyJdLFsiY2xhc3MiLCJkZXBsb3ktc3VjY2VzcyIsInNoYXBlIiwic3VjY2Vzcy1zdGFuZGFyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkZXBs''@;'; put 'put ''b3ktZXJyb3IiLCJzaGFwZSIsInRpbWVzLWNpcmNsZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkZXBsb3ktc3RhdHVzLXJvdyIsNCwibmdJZiJdLFsxLCJidXR0b25zIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFy''@;'; put 'put ''eS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwiYWxpZ24tc2VsZi1lbmQiLDMsImNsaWNrIl0sWyJzaGFwZSIsInN1Y2Nlc3Mtc3RhbmRhcmQiLDEsImRlcGxveS1zdWNjZXNzIl0sWyJzaGFw''@;'; put 'put ''ZSIsInRpbWVzLWNpcmNsZSIsMSwiZGVwbG95LWVycm9yIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPVZuKCk7UWUoMCxlRWUsNCwyLCJkaXYiLDApLG1lKDEsImg0IiwxKSxOZSgyLCJWaXlhIERlcGxveSIpLHllKCkscXQoMywiaHIiKSxtZSg0LCJsYWJlbCIs''@;'; put 'put ''MiksTmUoNSwiQXBwIExvYyIpLHllKCksbWUoNiwiZGl2IiwzKSg3LCJkaXYiLDQpKDgsInAiLDUpLE5lKDkpLHllKCkoKSgpLG1lKDEwLCJsYWJlbCIsMiksTmUoMTEsIkRDIExvYyIpLHllKCksbWUoMTIsImRpdiIsMykoMTMsImRpdiIsNCkoMTQsInAiLDUpLE5lKDE1KSx5ZSgpKCkoKSxt''@;'; put 'put ''ZSgxNiwibGFiZWwiLDIpLE5lKDE3LCJTQVMgQWRtaW4gZ3JvdXAiKSx5ZSgpLG1lKDE4LCJkaXYiLDMpKDE5LCJkaXYiLDQpKDIwLCJwIiw1KSxOZSgyMSkseWUoKSgpKCksbWUoMjIsImNsci1jaGVja2JveC13cmFwcGVyIikoMjMsImlucHV0Iiw2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oXyl7cmV0dXJuIGQucmVjcmVhdGVEYXRhYmFzZT1ffSkoImNsaWNrIixmdW5jdGlvbihfKXtyZXR1cm4gZC5yZWNyZWF0ZURhdGFiYXNlQ2xpY2tlZChfKX0pLHllKCksbWUoMjQsImxhYmVsIiksTmUoMjUsIlJlY3JlYXRlIGRhdGFiYXNlIikseWUoKSgpLHF0KDI2LCJociIpLG1l''@;'; put 'put ''KDI3LCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5leGVjdXRlSnNvbigpfSksTmUoMjgpLHllKCksbWUoMjksImJ1dHRvbiIsOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChoKSxqdCgkaSgzMikuY2xpY2soKSl9KSxOZSgzMCwiIFVwbG9hZCBk''@;'; put 'put ''aWZmZXJlbnQgZmlsZSB0byBkZXBsb3lcbiIpLHllKCksbWUoMzEsImlucHV0Iiw5LDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKF8pe3JldHVybiBkLmNsZWFyVXBsb2FkSW5wdXQoXyl9KSgiY2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5vbkpzb25GaWxlQ2hhbmdlKF8pfSkseWUoKSxt''@;'; put 'put ''ZSgzMywiY2xyLW1vZGFsIiwxMSkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQucmVjcmVhdGVEYXRhYmFzZU1vZGFsPV99KSxtZSgzNCwiaDMiLDEyKSxOZSgzNSwiV2FybmluZyIpLHllKCksbWUoMzYsImRpdiIsMTMpLE5lKDM3LCIgVGhpcyBhY3Rpb24g''@;'; put 'put ''d2lsbCByZWNyZWF0ZSB0aGUgZGF0YWJhc2UgKGlmIGl0IGV4aXN0cykuIEZvciBhbiBpbml0aWFsIGRlcGxveW1lbnQsIHRoaXMgaXMgZXhwZWN0ZWQuIElmIHRoaXMgaXMgYSByZS1kZXBsb3ltZW50LCB5b3Ugd2lsbCBsb3NlIGFueSBleGlzdGluZyB0YWJsZXMgaW4gIiksbWUoMzgsInN0''@;'; put 'put ''cm9uZyIpLE5lKDM5KSx5ZSgpLE5lKDQwLCIuICIpLHllKCksbWUoNDEsImRpdiIsMTQpKDQyLCJidXR0b24iLDE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLGQucmVjcmVhdGVEYXRhYmFzZT0hMX0pLE5lKDQzLCIgQ2FuY2VsICIp''@;'; put 'put ''LHllKCksbWUoNDQsImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsZC5yZWNyZWF0ZURhdGFiYXNlPSEwfSksTmUoNDUsIiBPayAiKSx5ZSgpKCkoKX0yJmEmJihSZSgibmdJZiIsZC5hdXRvZGVwbG95aW5nKSxDZSg5''@;'; put 'put ''KSxvcihkLmFwcExvYyksQ2UoNiksb3IoZC5kY1BhdGgpLENlKDYpLG9yKGQuc2VsZWN0ZWRBZG1pbkdyb3VwKSxDZSgyKSxSZSgibmdNb2RlbCIsZC5yZWNyZWF0ZURhdGFiYXNlKSxDZSg0KSxSZSgiZGlzYWJsZWQiLCFkLmpzb25GaWxlKSxDZSgxKSxtcigiIERlcGxveSAiLGQuanNvbkZp''@;'; put 'put ''bGU/IiI6Iihqc29uIGZpbGUgaXMgbm90IGF2YWlsYWJsZSkiLCJcbiIpLENlKDUpLFJlKCJjbHJNb2RhbE9wZW4iLGQucmVjcmVhdGVEYXRhYmFzZU1vZGFsKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDYpLG9yKGQuZGNQYXRoKSl9LGRlcGVuZGVuY2llczpbWmksUzAsQnMsT3Msa2Es''@;'; put 'put ''b3Usc3UsVXMsRDAsVDBdLHN0eWxlczpbIi5hdXRvLWRlcGxveVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC40KTt6LWlu''@;'; put 'put ''ZGV4OjEwMH0uc3Bpbm5lci1ib3hbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjQwMHB4O3BhZGRpbmc6MjBweDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kOiNmZmY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0''@;'; put 'put ''aW9uOmNvbHVtbjtib3gtc2hhZG93OjFweCAxcHggOHB4ICMwMDAwMDA4Mn0uc3Bpbm5lci1ib3hbX25nY29udGVudC0lQ09NUCVdICAgLmJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjt3aWR0aDoxMDAlfS5kZXBs''@;'; put 'put ''b3ktc3RhdHVzLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmRlcGxveS1zdGF0dXMtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMCAxMHB4''@;'; put 'put ''fS5kZXBsb3ktc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzZlY2Y0NH0uZGVwbG95LWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTc0YzNjfS5kZXBsb3ktdW5kZXRlcm1pbmF0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjYWNhY2F9aHJbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVde2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3MDU4ODIzNTMpfSJdfSksY30pKCk7ZnVuY3Rpb24gbkVlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw2KSgxLCJwIiw3KSxOZSgyLCJQbGVhc2UgbG9nIGluIGZpcnN0IikseWUoKSxtZSgzLCJs''@;'; put 'put ''YWJlbCIsOCksTmUoNCwiVXNlcm5hbWUiKSx5ZSgpLG1lKDUsImRpdiIsOSkoNiwiZGl2IiwxMCkscXQoNywiaW5wdXQiLDExKSx5ZSgpKCksbWUoOCwibGFiZWwiLDEyKSxOZSg5LCJQYXNzd29yZCIpLHllKCksbWUoMTAsImRpdiIsOSkoMTEsImRpdiIsMTApLHF0KDEyLCJpbnB1dCIsMTMp''@;'; put 'put ''LHllKCkoKSxtZSgxMywiYnV0dG9uIiwxNCksTmUoMTQsIkxvZyBpbiIpLHllKCkoKSl9ZnVuY3Rpb24gckVlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwzNiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS5pZCksQ2UoMSksbXIoIiAiLGEu''@;'; put 'put ''bmFtZSwiICIpfX1mdW5jdGlvbiBpRWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWplKCkuJGltcGxpY2l0O0NlKDEpLG1yKCIoICIsYS5hdHRyaWJ1dGVzLnN5c1VzZXJJZCwiICkiKX19ZnVuY3Rpb24gb0VlKGMsbCl7aWYoMSZjJiYobWUo''@;'; put 'put ''MCwib3B0aW9uIiwzNiksTmUoMSksUWUoMixpRWUsMiwxLCJzcGFuIiw1KSxiYSgzLCJqc29uIikseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS5uYW1lKSxDZSgxKSxtcigiICIsYS5uYW1lLCIgIiksQ2UoMSksUmUoIm5nSWYiLCJ7fSIhPVVsKDMsMyxhLmF0''@;'; put 'put ''dHJpYnV0ZXMpKX19ZnVuY3Rpb24gc0VlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIkpTT04gU3VibWl0dGVkIFN1Y2Nlc3NmdWxseSIpLHllKCkpfWZ1bmN0aW9uIGFFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMzcpLHh0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gQnQoYSksanQoamUoMikuZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpKX0pLHF0KDEsImNsci1pY29uIiwzOCkseWUoKX19ZnVuY3Rpb24gbEVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7enIoMCksbWUoMSwicCIsMzkpLE5lKDIsIkZpbGUgZXhlY3V0ZSBjb21wbGV0''@;'; put 'put ''ZWQiKSx5ZSgpLHF0KDMsImhyIiksbWUoNCwiZGl2IikoNSwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoMik7cmV0dXJuIGp0KGguZG93bmxvYWRGaWxlKGguam9iTG9nLCJleGVjdXRlLXNjcmlwdC1sb2ciLCJ0eHQiKSl9KSxOZSg2LCIgRG93''@;'; put 'put ''bmxvYWQgbG9nICIpLHllKCkoKSxZcigpfX1mdW5jdGlvbiBjRWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQ0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoMyk7Q2UoMSksbXIoIiAiLGEubWFrZURhdGFSZXNwb25zZSwiICIpfX1mdW5jdGlvbiB1RWUoYyxsKXsxJmMmJih6cigw''@;'; put 'put ''KSxtZSgxLCJzcGFuIiwyNSksTmUoMiwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLHllKCksbWUoMywic3BhbiIpLE5lKDQsIiBWYWxpZGF0aW5nIGRlcGxveS4uLiAiKSx5ZSgpLFlyKCkpfWZ1bmN0aW9uIGRFZShjLGwpezEmYyYmKHpyKDApLHF0KDEsImNsci1pY29uIiw0NiksbWUoMiwi''@;'; put 'put ''c3BhbiIpLE5lKDMsIiBWYWxpZGF0aW9uIGZhaWxlZCAiKSx5ZSgpLFlyKCkpfWZ1bmN0aW9uIGhFZShjLGwpezEmYyYmKHpyKDApLHF0KDEsImNsci1pY29uIiw0NyksbWUoMiwic3BhbiIpLE5lKDMsIiBWYWxpZGF0aW9uIHN1Y2NlZWRlZCAiKSx5ZSgpLFlyKCkpfWZ1bmN0aW9uIGZFZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDUpLFFlKDEsdUVlLDUsMCwibmctY29udGFpbmVyIiw1KSxRZSgyLGRFZSw0LDAsIm5nLWNvbnRhaW5lciIsNSksUWUoMyxoRWUsNCwwLCJuZy1jb250YWluZXIiLDUpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5p''@;'; put 'put ''c1ZhbGlkYXRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJlcnJvciI9PT1hLnZhbGlkYXRpb25TdGF0ZSksQ2UoMSksUmUoIm5nSWYiLCFhLmlzVmFsaWRhdGluZyYmInN1Y2Nlc3MiPT09YS52YWxpZGF0aW9uU3RhdGUpfX1mdW5jdGlvbiBwRWUoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9Vm4oKTt6cigwKSxtZSgxLCJwIiwzOSksTmUoMiwiQ3JlYXRlIERhdGFiYXNlIENvbXBsZXRlZCIpLHllKCkscXQoMywiaHIiKSxRZSg0LGNFZSwyLDEsImRpdiIsNDEpLG1lKDUsImJ1dHRvbiIsNDIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUo''@;'; put 'put ''MikubmF2aWdhdGVUb0hvbWUoKSl9KSxOZSg2LCIgTGV0J3MgZ2V0IHN0YXJ0ZWQgIikseWUoKSxtZSg3LCJidXR0b24iLDQyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgyKTtyZXR1cm4ganQoaC5kb3dubG9hZEZpbGUoaC5tYWtlRGF0YVJlc3BvbnNlLCJjcmVh''@;'; put 'put ''dGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksTmUoOCwiIERvd25sb2FkIGxvZyAiKSx5ZSgpLG1lKDksImJ1dHRvbiIsNDIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoMikudmFsaWRhdGVEZXBsb3koKSl9KSxOZSgxMCwiIFZhbGlkYXRlICIpLHllKCksUWUo''@;'; put 'put ''MTEsZkVlLDQsMywiZGl2Iiw0MyksWXIoKX1pZigyJmMpe2NvbnN0IGE9amUoMik7Q2UoNCksUmUoIm5nSWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCksQ2UoNyksUmUoIm5nSWYiLCJub25lIiE9PWEudmFsaWRhdGlvblN0YXRlfHxhLmlzVmFsaWRhdGluZyl9fWNvbnN0IHROPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJue3N0YW5kYWxvbmU6ITB9fTtmdW5jdGlvbiBnRWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTt6cigwKSxtZSgxLCJmb3JtIikoMiwiZGl2IiwxNSkoMywibGFiZWwiLDE2KSxOZSg0LCJBZG1pbiBncm91cCIpLHllKCksbWUoNSwiZGl2IiwxNykoNiwiZGl2Iiwx''@;'; put 'put ''OCkoNywic2VsZWN0IiwxOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLnNlbGVjdGVkQWRtaW5Hcm91cD1oKX0pLFFlKDgsckVlLDIsMiwib3B0aW9uIiwyMCkseWUoKSgpKCkoKSxtZSg5LCJkaXYiLDE1KSgxMCwiZGl2IikoMTEsImxhYmVs''@;'; put 'put ''IiwxNiksTmUoMTIsIkNvbnRleHQiKSx5ZSgpLG1lKDEzLCJkaXYiLDE3KSgxNCwiZGl2IiwxOCkoMTUsInNlbGVjdCIsMjEpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS5zZWxlY3RlZENvbnRleHQ9aCl9KSxRZSgxNixvRWUsNCw1LCJvcHRp''@;'; put 'put ''b24iLDIwKSx5ZSgpKCkoKSxtZSgxNywiYnV0dG9uIiwyMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLmV4ZWN1dGFibGVDb250ZXh0KCkpfSkscXQoMTgsImNsci1pY29uIiwyMykseWUoKSgpLG1lKDE5LCJkaXYiLDI0KSgyMCwic3BhbiIsMjUpLE5lKDIx''@;'; put 'put ''LCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSx5ZSgpLG1lKDIyLCJzcGFuIiksTmUoMjMsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLHllKCkoKSxtZSgyNCwibGFiZWwiLDI2KSxOZSgyNSwiREMgTG9jIikseWUoKSxtZSgyNiwiZGl2Iiw5KSgyNywiZGl2IiwxMCkoMjgsImlucHV0IiwyNyks''@;'; put 'put ''eHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLmRjUGF0aD1oKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5zYXZlRGNQYXRoKCkpfSkseWUoKSgpKCksbWUoMjksInAiLDI4KSxOZSgzMCwiIFNlbGVjdCBKU09O''@;'; put 'put ''IGZpbGUgdG8gdXBsb2FkIChqc29uIGJ1aWxkIGZpbGUgcHJlbG9hZGVkKTogIikseWUoKSxtZSgzMSwiZGl2IiwyOSkoMzIsImlucHV0IiwzMCkseHQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS5jbGVhclVwbG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLm9uSnNvbkZpbGVDaGFuZ2UoaCkpfSkseWUoKSgpLG1lKDMzLCJkaXYiLDMxKSgzNCwiYnV0dG9uIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLmV4ZWN1dGVKc29uKCkpfSksTmUoMzUsIiBTVUJNSVQg''@;'; put 'put ''SlNPTiAiKSx5ZSgpLFFlKDM2LHNFZSwyLDAsInNwYW4iLDUpLHllKCksbWUoMzcsInAiLDI4KSxOZSgzOCwiU2VsZWN0IFNBUyBmaWxlIHRvIHVwbG9hZDoiKSx5ZSgpLG1lKDM5LCJkaXYiLDI5KSg0MCwiaW5wdXQiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxq''@;'; put 'put ''dChqZSgpLmNsZWFyVXBsb2FkSW5wdXQoaCkpfSkoImNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1qZSgpO3JldHVybiBmLm9uU2FzRmlsZUNoYW5nZShoKSxqdChmLmRvd25sb2FkRmlsZUJ0bj0hMCl9KSx5ZSgpLFFlKDQxLGFFZSwyLDAsImJ1dHRvbiIsMzMpLHllKCksbWUo''@;'; put 'put ''NDIsImRpdiIsMzEpKDQzLCJidXR0b24iLDM0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuZXhlY3V0ZVNBUygpKX0pLE5lKDQ0LCIgU1VCTUlUICIpLHllKCkoKSgpLFFlKDQ1LGxFZSw3LDAsIm5nLWNvbnRhaW5lciIsNSksbWUoNDYsImJ1dHRvbiIsMzUp''@;'; put 'put ''LHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5jcmVhdGVEYXRhYmFzZSgpKX0pLE5lKDQ3LCIgQ3JlYXRlIERhdGFiYXNlICIpLHllKCksUWUoNDgscEVlLDEyLDIsIm5nLWNvbnRhaW5lciIsNSkseWUoKSxZcigpfWlmKDImYyl7Y29uc3QgYT1qZSgpO0NlKDcp''@;'; put 'put ''LFJlKCJuZ01vZGVsIixhLnNlbGVjdGVkQWRtaW5Hcm91cCkoIm5nTW9kZWxPcHRpb25zIiwkcygxOSx0TikpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKSxDZSgyKSxocigiaGlkZGVuIixhLmNvbnRleHRzTG9hZGluZyksQ2UoNSksUmUoIm5nTW9kZWwiLGEuc2VsZWN0ZWRD''@;'; put 'put ''b250ZXh0KSgibmdNb2RlbE9wdGlvbnMiLCRzKDIwLHROKSksQ2UoMSksUmUoIm5nRm9yT2YiLGEuYWxsQ29udGV4dHMpLENlKDMpLGhyKCJoaWRkZW4iLCFhLmNvbnRleHRzTG9hZGluZyksQ2UoOSksUmUoIm5nTW9kZWwiLGEuZGNQYXRoKSgibmdNb2RlbE9wdGlvbnMiLCRzKDIxLHROKSks''@;'; put 'put ''Q2UoNiksUmUoImNsckxvYWRpbmciLGEuaXNTdWJtaXR0aW5nSnNvbiksQ2UoMiksUmUoIm5nSWYiLGEuaXNKc29uU3VibWl0dGVkKSxDZSg1KSxSZSgibmdJZiIsYS5kb3dubG9hZEZpbGVCdG4pLENlKDIpLFJlKCJjbHJMb2FkaW5nIixhLmV4ZWN1dGluZ1NjcmlwdCksQ2UoMiksUmUoIm5n''@;'; put 'put ''SWYiLGEuam9iTG9nLmxlbmd0aD4wKSxDZSgxKSxSZSgiY2xyTG9hZGluZyIsYS5jcmVhdGVEYXRhYmFzZUxvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIixhLm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjApfX1sZXQgbUVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5z''@;'; put 'put ''YXNTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLmRlcGxveVNlcnZpY2U9Zix0aGlzLnNhc0pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEVyLHRoaXMubmVlZHNMb2dpbj0hMSx0aGlzLmFk''@;'; put 'put ''bWluR3JvdXBzPVtdLHRoaXMuYWxsQ29udGV4dHM9W10sdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5zZWxlY3RlZENvbnRleHQ9IiIsdGhpcy5qb2JMb2c9IiIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMubGluZXNP''@;'; put 'put ''ZkNvZGU9W10sdGhpcy5maWxlTmFtZT0iIix0aGlzLnByZWxvYWRlZEZpbGU9ITAsdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMSx0aGlzLmNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmV4ZWN1dGluZ1NjcmlwdD0hMSx0aGlzLmRvd25sb2Fk''@;'; put 'put ''RmlsZUJ0bj0hMSx0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJub25lIn1uZ09uSW5pdCgpe31leGVjdXRhYmxlQ29udGV4dCgpe3JldHVy''@;'; put 'put ''biBmaShmdW5jdGlvbiooKXt9KSgpfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b25TYXNGaWxlQ2hhbmdlKGEpe3RoaXMucHJlbG9hZGVkRmlsZT0hMTtsZXQgZD1hLnRhcmdldC5maWxlc1swXTt0aGlzLmZpbGVOYW1lPWQubmFt''@;'; put 'put ''ZTtsZXQgaD1uZXcgRmlsZVJlYWRlcjtoLm9ubG9hZD0oKT0+e2gucmVzdWx0JiYodGhpcy5saW5lc09mQ29kZT1oLnJlc3VsdC5zcGxpdCgiXG4iKSx0aGlzLmxpbmVzT2ZDb2RlPXRoaXMubGluZXNPZkNvZGUuZmlsdGVyKGY9PiIiIT09ZiYmbnVsbCE9PWYpLHRoaXMuZXhlY3V0ZVNBU0Vu''@;'; put 'put ''YWJsZWQ9ITAsdGhpcy5hZGRQcmVjb2RlTGluZXMoKSl9LGgucmVhZEFzVGV4dChkKX1vbkpzb25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBoPWEudGFyZ2V0LmZpbGVzWzBdO2QuanNvbkZpbGU9eWllbGQgZC5kZXBsb3lTZXJ2aWNlLnJlYWRG''@;'; put 'put ''aWxlKGgpfSkoKX1hZGRQcmVjb2RlTGluZXMoKXt0aGlzLmxpbmVzT2ZDb2RlLnVuc2hpZnQoYCVsZXQgY29udGV4dD0ke3RoaXMuc2VsZWN0ZWRDb250ZXh0fTtgLGAlbGV0IGFwcExvYz0ke3RoaXMuYXBwTG9jfTtgLGAlbGV0IGFkbWluPSR7dGhpcy5zZWxlY3RlZEFkbWluR3JvdXB9O2As''@;'; put 'put ''YCVsZXQgZGNwYXRoPSR7dGhpcy5kY1BhdGh9O2ApfWRvd25sb2FkU2FzUHJlY29kZUZpbGUoKXtsZXQgYT10aGlzLmxpbmVzT2ZDb2RlLmpvaW4oIlxuIiksZD10aGlzLmZpbGVOYW1lLnNwbGl0KCIuIilbMF07dGhpcy5kb3dubG9hZEZpbGUoYSxkLCJzYXMiKX1kb3dubG9hZEZpbGUoYSxk''@;'; put 'put ''LGg9InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZpbGUoYSxkLGgpfXNhdmVEY1BhdGgoKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiZGVwbG95X2RjX2xvYyIsdGhpcy5kY1BhdGgpfWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5pc1N1''@;'; put 'put ''Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKGEuanNvbkZpbGUsYS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIix2b2lkIDAsdm9pZCAwLCEwKSxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChkKXtsZXQgaD0iIjtyZXR1cm4gaD0ic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIGQubWVzc2FnZT9KU09OLnN0cmluZ2lmeShkKS5yZXBsYWNlKC9cXC9nbSwiIik6ZC5tZXNzYWdlLHZvaWQgYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCl9YS5pc1N1Ym1pdHRpbmdK''@;'; put 'put ''c29uPSExfSkoKX1leGVjdXRlU0FTKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5leGVjdXRpbmdTY3JpcHQ9ITAsYS5qb2JMb2c9IiIsYS5tYWtlRGF0YVJlc3BvbnNlPSIiO3RyeXtsZXQgZD15aWVsZCBhLnNhc0pzLmV4ZWN1dGVTY3JpcHQoe2ZpbGVOYW1lOmEuZmls''@;'; put 'put ''ZU5hbWUsbGluZXNPZkNvZGU6YS5saW5lc09mQ29kZSxjb250ZXh0TmFtZTphLnNlbGVjdGVkQ29udGV4dH0pO2EubG9nZ2VyU2VydmljZS5sb2coZCksInN0cmluZyI9PXR5cGVvZiBkLmxvZyYmKGQubG9nPUpTT04ucGFyc2UoZC5sb2cpKSwiZXJyb3IiPT09ZC5qb2JTdGF0dXM/YWxlcnQo''@;'; put 'put ''IkVycm9yISIpOmEuam9iTG9nPWQubG9nLml0ZW1zP2QubG9nLml0ZW1zLm1hcChoPT5oLmxpbmUpLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoZC5sb2cpLGEuZXhlY3V0aW5nU2NyaXB0PSExfWNhdGNoe2EuZXhlY3V0aW5nU2NyaXB0PSExfX0pKCl9Y3JlYXRlRGF0YWJhc2UoYT0hMCl7''@;'; put 'put ''aWYoYSl7bGV0IGY9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuc2VydmVyVXJsKyIvU0FTSm9iRXhlY3V0aW9uLz9fcHJvZ3JhbT0iK3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8Ii9hZG1pbi9tYWtlZGF0YSZBRE1JTj0iK3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3Vw''@;'; put 'put ''KyImRENQQVRIPSIrdGhpcy5kY1BhdGgrIiZfZGVidWc9MTMxIjt3aW5kb3cub3BlbihmLCJfYmxhbmsiKX1lbHNlIHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSEwLHRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLHtmcm9tanM6W3tBRE1JTjp0aGlzLnNl''@;'; put 'put ''bGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0se3VzZUNvbXB1dGVBcGk6ITEsY29udGV4dE5hbWU6dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGY9Pnt0cnl7''@;'; put 'put ''dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfXRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExfSkuY2F0Y2goZj0+e3RoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9u''@;'; put 'put ''c2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9fSl9bmF2aWdhdGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfXZhbGlkYXRlRGVwbG95KCl7dGhpcy5pc1ZhbGlkYXRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1''@;'; put 'put ''YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihhPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhhKSx0aGlzLnZhbGlkYXRpb25TdGF0ZT1hLnNhc2xpYnM/InN1Y2Nlc3MiOiJlcnJvciIsdGhpcy5pc1ZhbGlkYXRpbmc9ITF9KS5jYXRjaChhPT57dGhpcy5pc1ZhbGlkYXRpbmc9ITEs''@;'; put 'put ''dGhpcy52YWxpZGF0aW9uU3RhdGU9ImVycm9yIn0pfWRlbGV0ZUtleXMoKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVwbG95X2RjX2xvYyIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSksdHQodmwpLHR0KHcwKSx0dChHZWUpKX0s''@;'; put 'put ''Yy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1hbnVhbC1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRv''@;'; put 'put ''SG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjksdmFyczozLGNvbnN0czpbWzEsImNhcmQtaGVhZGVyIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZC1pbmxpbmUtYmxvY2siLCJtbC0xMCIsIm1iLTEwIiwibXQtMCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImNsZWFyLW1lbW9y''@;'; put 'put ''eS1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayJdLFsiaWQiLCJsb2dpbkZvcm0iLCJjbGFzcyIsImQtbm9uZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJpZCIsImxvZ2luRm9ybSIsMSwiZC1ub25lIl0sWzEsIm1iLTEwIl0sWyJmb3IiLCJ1''@;'; put 'put ''c2VybmFtZSIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInR5cGUiLCJ0ZXh0IiwiaWQiLCJ1c2VybmFtZSIsMSwiY2xyLWlucHV0Il0sWyJmb3IiLCJwYXNzd29yZCIsMSwiY2xyLWNv''@;'; put 'put ''bnRyb2wtbGFiZWwiXSxbInR5cGUiLCJwYXNzd29yZCIsImlkIiwicGFzc3dvcmQiLDEsImNsci1pbnB1dCJdLFsiaWQiLCJsb2dpbkJ0biIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLW5vbmUiXSxbMSwiY2xyLWZvcm0tY29udHJvbCJdLFsiZm9yIiwic2VsZWN0LWZ1bGwiLDEsImNsci1j''@;'; put 'put ''b250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbIm5hbWUiLCJzZWxlY3RlZEFkbWluR3JvdXAiLCJpZCIsImFkbWluR3JvdXBzU2VsZWN0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMi''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm5hbWUiLCJzZWxlY3RlZENvbnRleHQiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsImNvbnRl''@;'; put 'put ''eHRzLWJ0biIsMSwiYnRuIiwiYnRuLWljb24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwiZC1mbGV4Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsIm1yLTEwIl0sWyJmb3IiLCJkY2xvYyIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsibmFtZSIsImRj''@;'; put 'put ''UGF0aCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJkY2xvYyIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiLCJuZ01vZGVsQ2hhbmdlIiwiZm9jdXNvdXQiXSxbMSwibXQtMTAiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbInR5cGUiLCJmaWxlIiwzLCJjbGlj''@;'; put 'put ''ayIsImNoYW5nZSJdLFsxLCJtdC0yMCIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaWQiLCIiLDEsIm10LTAiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1pY29uIG1pbi13LTAgdy00MCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImlk''@;'; put 'put ''IiwiZGVwbG95IiwxLCJtdC0wIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzMsInZhbHVlIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwibWluLXctMCIsInctNDAiLDMsImNsaWNr''@;'; put 'put ''Il0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsIm1iLTAiLCJtdC0xMCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTAiLCJtci0yMCIsMywiY2xpY2siXSxbImNsYXNzIiwibG9nLXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsMywiY2xpY2si''@;'; put 'put ''XSxbImNsYXNzIiwidmFsaWRhdGlvbi1iYXIiLDQsIm5nSWYiXSxbMSwibG9nLXdyYXBwZXIiXSxbMSwidmFsaWRhdGlvbi1iYXIiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJpcy1lcnJvciJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLDEsImlzLXN1Y2Nlc3MiXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApLE5lKDEsIiBDb25maWd1cmF0b3IgIiksbWUoMiwicCIsMSksTmUoMykseWUoKSxtZSg0LCJidXR0b24iLDIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWxldGVLZXlzKCl9KSxOZSg1LCIgQ2xlYXIgbWVt''@;'; put 'put ''b3J5ICIpLHllKCkoKSxtZSg2LCJkaXYiLDMpLFFlKDcsbkVlLDE1LDAsImRpdiIsNCksUWUoOCxnRWUsNDksMjIsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZhJiYoQ2UoMyksbXIoIkFwcCBMb2NhdGlvbjogIixkLmFwcExvYywiIiksQ2UoNCksUmUoIm5nSWYiLGQubmVlZHNMb2dpbiks''@;'; put 'put ''Q2UoMSksUmUoIm5nSWYiLCFkLm5lZWRzTG9naW4pKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxDcCxsMSxjMSxXYSxNMCxCcyx3cCxPcyxyMixrYSxadSxkaCxVcyxpR10sc3R5bGVzOlsiLmNsZWFyLW1lbW9yeS1idXR0b25bX25nY29udGVudC0lQ09NUCVde3JpZ2h0OjEwcHg7dG9wOjJweH0i''@;'; put 'put ''XX0pLGN9KSgpO2Z1bmN0aW9uIHZFZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMTUpLHF0KDEsInByb2dyZXNzIikseWUoKSl9ZnVuY3Rpb24gX0VlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwxNiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIs''@;'; put 'put ''YS5HUk9VUE5BTUUpLENlKDEpLGpjKCIgIixhLkdST1VQTkFNRSwiIC0gIixhLkdST1VQREVTQywiICIpfX1sZXQgYkVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuc2FzanNTZXJ2aWNlPWQsdGhpcy5sb2NhdGlvbj1oLHRoaXMuc2Fz''@;'; put 'put ''SnNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgRXIsdGhpcy5kY0RpcmVjdG9yeT0iIix0aGlzLmRjQWRtaW5Hcm91cD0iRENERUZBVUxUIix0aGlzLk1FVEFQRVJTT049Im4vYSIsdGhpcy5NRVRBVVNFUj0ibi9hIix0aGlzLlNZU1VTRVJJRD0i''@;'; put 'put ''bi9hIix0aGlzLlNZU0hPU1ROQU1FPSJuL2EiLHRoaXMuU1lTVkxPTkc9Im4vYSIsdGhpcy5kY0FkbWluR3JvdXBMaXN0PVtdLHRoaXMubG9hZGluZz0hMSx0aGlzLnNob3dMb2dvdXQ9ITEsdGhpcy50bXBEaXJlY3Rvcmllcz17bGludXg6Ii90bXAvRGF0YUNvbnRyb2xsZXIiLHdpbmRvd3M6''@;'; put 'put ''IkM6XFxEYXRhQ29udHJvbGxlciJ9fW5nT25Jbml0KCl7dGhpcy5nZXRVc2VyR3JvdXBzKCksdGhpcy5nZXRTZXJ2ZXJJbmZvKCl9Z2V0U2VydmVySW5mbygpe3RoaXMuc2FzanNTZXJ2aWNlLmdldFNlcnZlckluZm8oKS5zdWJzY3JpYmUoYT0+eyJkZXNrdG9wIiE9PWEubW9kZSYmKHRoaXMu''@;'; put 'put ''c2hvd0xvZ291dD0hMCl9KX1nZXRVc2VyR3JvdXBzKCl7dGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIsbnVsbCkudGhlbihhPT57dGhpcy5NRVRBUEVSU09OPWEuTUZfR0VUVVNFUix0aGlzLlNZU1VTRVJJRD1hLlNZ''@;'; put 'put ''U1VTRVJJRCx0aGlzLlNZU0hPU1ROQU1FPWEuU1lTSE9TVE5BTUUsdGhpcy5TWVNWTE9ORz1hLlNZU1ZMT05HLHRoaXMuZGNEaXJlY3Rvcnk9dGhpcy50bXBEaXJlY3Rvcmllc1tbIkwiLCJIIiwiQSIsIlMiXS5pbmNsdWRlcyhhLlNZU1NDUEwuc3Vic3RyaW5nKDAsMSkpPyJsaW51eCI6Indp''@;'; put 'put ''bmRvd3MiXSx0aGlzLmRjQWRtaW5Hcm91cExpc3Q9YS5ncm91cHMsdGhpcy5kY0FkbWluR3JvdXA9dGhpcy5kY0FkbWluR3JvdXBMaXN0WzBdLkdST1VQTkFNRSx0aGlzLmxvYWRpbmc9ITF9LGE9Pnt0aGlzLmxvYWRpbmc9ITF9KX1tYWtlRGF0YSgpe2xldCBkPXRoaXMuc2FzU2VydmljZS5n''@;'; put 'put ''ZXRFeGVjdXRpb25QYXRoKCk7Y29uc3QgaD10aGlzLnNhc0pzQ29uZmlnLmFwcExvYztsZXQgZj10aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCxfPXRoaXMuZGNEaXJlY3Rvcnk7dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VWMuRC5TYXNqcz90aGlzLnNhc1NlcnZpY2Uuc2FzanNN''@;'; put 'put ''YWtlZGF0YUNoZWNraW5nKCkudGhlbihXPT57VyYmKHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvIiksbG9jYXRpb24ucmVsb2FkKCkpfSk6dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VWMuRC5TYXM5JiYoZj0iIixkPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rZCsiLyIsXz1l''@;'; put 'put ''bmNvZGVVUklDb21wb25lbnQodGhpcy5kY0RpcmVjdG9yeSkpLHdpbmRvdy5vcGVuKGAke2Z8fCIifSR7ZH0/X3Byb2dyYW09JHtofS9zZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSZhZG1pbj0ke3RoaXMuZGNBZG1pbkdyb3VwfSZwYXRoPSR7X30gYCwiX2JsYW5rIil9bG9nb3V0KCl7dGhpcy5z''@;'; put 'put ''YXNTZXJ2aWNlLmxvZ291dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSksdHQoaXEpLHR0KEpkKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zYXNqcy1jb25maWd1cmF0b3IiXV0saW5wdXRzOntzYXNK''@;'; put 'put ''czoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjQxLHZhcnM6OSxjb25zdHM6W1siY2xhc3MiLCJ0aGluUHJvZ3Jl''@;'; put 'put ''c3MgcHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbMSwibGlnaHQiXSxbMSwibS0wIl0sWzEsIm0tMCIsIm10LTEwIl0sWzEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1j''@;'; put 'put ''b250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInBsYWNlaG9sZGVyIiwiVHlwZSBpbiBkaXJlY3RvcnkiLDEsImNsci1pbnB1dCIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwibWItMTAiLCJtdC0wIiwidy01MHZ3Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9k''@;'; put 'put ''ZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xyLWZsZXgiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJtdC0xNSIsInRleHQtY2VudGVyIiwzLCJjbGljayJdLFsxLCJjYXJkLXRleHQiLCJwYi0xMCJdLFsxLCJ0aGluUHJvZ3Jlc3Mi''@;'; put 'put ''LCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoUWUoMCx2RWUsMiwwLCJkaXYiLDApLG1lKDEsImg0IiwxKSxOZSgyLCJTYXNqcyBEZXBsb3kiKSx5ZSgpLHF0KDMsImhyIiwyKSxtZSg0LCJwIiwzKSxO''@;'; put 'put ''ZSg1LCIgVG8gY29uZmlndXJlIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOlxuIikseWUoKSxtZSg2LCJwIiw0KSxOZSg3LCIgUGxlYXNlIHNwZWNpZnkgYSBwaHlzaWNhbCBkaXJlY3RvcnkgYmVsb3csIHRvIHdoaWNo''@;'; put 'put ''IHVzZXIgIiksbWUoOCwic3Ryb25nIiksTmUoOSkseWUoKSxOZSgxMCwiIGNhbiB3cml0ZSwgb24gYmVoYWxmIG9mIERhdGEgQ29udHJvbGxlcjpcbiIpLHllKCksbWUoMTEsImxhYmVsIiw1KSxOZSgxMiwiREMgRGlyZWN0b3J5IikseWUoKSxtZSgxMywiZGl2Iiw2KSgxNCwiZGl2Iiw3KSgx''@;'; put 'put ''NSwiaW5wdXQiLDgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kY0RpcmVjdG9yeT1mfSkseWUoKSgpKCksbWUoMTYsInAiLDQpLE5lKDE3LCIgQmVsb3cgYXJlIHRoZSBsaXN0IG9mIGdyb3VwcyB0byB3aGljaCB5b3UgYmVsb25nLiBUaGUgZ3JvdXAgeW91IHNl''@;'; put 'put ''bGVjdCB3aWxsIGJlY29tZSB0aGUgRGF0YSBDb250cm9sbGVyIEFkbWluIEdyb3VwLCBhbmQgZXZlcnlvbmUgaW4gaXQgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gRGF0YSBDb250cm9sbGVyLlxuIikseWUoKSxtZSgxOCwibGFiZWwiLDUpLE5lKDE5LCJEYXRhIENvbnRyb2xs''@;'; put 'put ''ZXIgQWRtaW4gZ3JvdXAiKSx5ZSgpLG1lKDIwLCJjbHItc2VsZWN0LWNvbnRhaW5lciIsOSkoMjEsInNlbGVjdCIsMTApLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kY0FkbWluR3JvdXA9Zn0pLFFlKDIyLF9FZSwyLDMsIm9wdGlvbiIsMTEpLHllKCkoKSxtZSgy''@;'; put 'put ''MywicCIsNCksTmUoMjQsIiBOb3csIGNyZWF0ZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgZGVwbG95IHRoZSBjb250cm9sIGxpYnJhcnkgdXNpbmcgdGhlIGFkbWluIGdyb3VwIHNlbGVjdGVkIGFib3ZlOlxuIikseWUoKSxtZSgyNSwiZGl2IiwxMikoMjYsImJ1dHRvbiIsMTMpLHh0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5tYWtlRGF0YSgpfSksTmUoMjcsIiBTVUJNSVQgIikseWUoKSgpLHF0KDI4LCJociIsMiksbWUoMjksImRpdiIsMTQpKDMwLCJwIiksTmUoMzEsIllvdSBhcmUgY29ubmVjdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjcmVkZW50aWFsczoiKSx5ZSgp''@;'; put 'put ''LG1lKDMyLCJ1bCIpKDMzLCJsaSIpLE5lKDM0KSx5ZSgpLG1lKDM1LCJsaSIpLE5lKDM2KSx5ZSgpLG1lKDM3LCJsaSIpLE5lKDM4KSx5ZSgpLG1lKDM5LCJsaSIpLE5lKDQwKSx5ZSgpKCkoKSksMiZhJiYoUmUoIm5nSWYiLGQubG9hZGluZyksQ2UoOSksb3IoZC5TWVNVU0VSSUQpLENlKDYp''@;'; put 'put ''LFJlKCJuZ01vZGVsIixkLmRjRGlyZWN0b3J5KSxDZSg2KSxSZSgibmdNb2RlbCIsZC5kY0FkbWluR3JvdXApLENlKDEpLFJlKCJuZ0Zvck9mIixkLmRjQWRtaW5Hcm91cExpc3QpLENlKDEyKSxtcigiTUVUQVBFUlNPTjogIixkLk1FVEFQRVJTT04sIiIpLENlKDIpLG1yKCJTWVNVU0VSSUQ6''@;'; put 'put ''ICIsZC5TWVNVU0VSSUQsIiIpLENlKDIpLG1yKCJTWVNIT1NUTkFNRTogIixkLlNZU0hPU1ROQU1FLCIiKSxDZSgyKSxtcigiU1lTVkxPTkc6ICIsZC5TWVNWTE9ORywiIikpfSxkZXBlbmRlbmNpZXM6W3hzLFppLGwxLGMxLFdhLE0wLEJzLE9zLFVzLE44LEg4XSxzdHlsZXM6WyIuY2xyLWNv''@;'; put 'put ''bnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MHZ3fS5jbHItaW5wdXQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0sIC5jbHItaW5wdXQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0udGhp''@;'; put 'put ''blByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjA7cmlnaHQ6MDt3aWR0aDp1bnNldDtoZWlnaHQ6MXB4O21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnRoaW5Qcm9ncmVzc1tfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dG9wOjB9Il19KSxjfSkoKTtmdW5jdGlvbiB5RWUoYyxsKXtp''@;'; put 'put ''ZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksTmUoMiwiVGVybXMgYW5kIENvbmRpdGlvbnMiKSx5ZSgpLG1lKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJwIiksTmUoNiwiIFRoZSBEZW1vIHZlcnNpb24gb2YgRGF0YSBDb250cm9sbGVyIGlzIGZyZWUgZm9y''@;'; put 'put ''IEVWQUxVQVRJT04gcHVycG9zZXMgb25seS4gQmVmb3JlIHByb2NlZWRpbmcgd2l0aCBjb25maWd1cmF0aW9uLCBwbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsIGFuZCBhZ3JlZWQgdG8gdGhlICIpLG1lKDcsImEiLDgpLE5lKDgsIkRhdGEgQ29udHJvbGxl''@;'; put 'put ''ciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLHllKCksTmUoOSwiLiAiKSx5ZSgpKCkscXQoMTAsImhyIiw5KSxtZSgxMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMiwiaW5wdXQiLDEwKSx4dCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLnRl''@;'; put 'put ''cm1zQWdyZWVDaGFuZ2UoKSl9KSx5ZSgpLG1lKDEzLCJsYWJlbCIpLE5lKDE0LCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoZSAiKSxtZSgxNSwiYSIsOCksTmUoMTYsIkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLHll''@;'; put 'put ''KCkoKSgpKCkoKX19ZnVuY3Rpb24gd0VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNSkoMSwiYXBwLWF1dG9tYXRpYy1kZXBsb3kiLDE2KSx4dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoMykub25OYXZpZ2F0ZVRvSG9t''@;'; put 'put ''ZSgpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoMyk7Q2UoMSksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncykoImFwcExvYyIsYS5hcHBMb2MpKCJkY1BhdGgiLGEuZGNQ''@;'; put 'put ''YXRoKSgic2VsZWN0ZWRBZG1pbkdyb3VwIixhLnNlbGVjdGVkQWRtaW5Hcm91cCl9fWZ1bmN0aW9uIENFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTcpKDEsImFwcC1tYW51YWwtZGVwbG95IiwxOCkseHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEJ0KGEpLGp0KGplKDMpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWplKDMpO0NlKDEpLFJlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3Mp''@;'; put 'put ''fX1mdW5jdGlvbiBTRWUoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLHdFZSwyLDYsImRpdiIsMTMpLFFlKDIsQ0VlLDIsMywiZGl2IiwxNCksWXIoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmF1dG9kZXBsb3kpLENlKDEpLFJlKCJuZ0lmIiwhYS5hdXRvZGVwbG95''@;'; put 'put ''KX19ZnVuY3Rpb24gTUVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7enIoMCksbWUoMSwiZGl2IiwxNSkoMiwiYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciIsMTgpLHh0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgyKS5vbk5hdmlnYXRlVG9Ib21l''@;'; put 'put ''KCkpfSkseWUoKSgpLFlyKCl9aWYoMiZjKXtjb25zdCBhPWplKDIpO0NlKDIpLFJlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5jdGlvbiB4RWUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9Vm4oKTt6cigwKSxtZSgxLCJkaXYiLDE1KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOCkseHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSx5ZSgpKCksWXIoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9amUoMik7Q2UoMiksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIEVFZShjLGwpe2lmKDEmYyYmKHpyKDAsMTEpLFFlKDEsU0VlLDMsMiwibmctY29udGFp''@;'; put 'put ''bmVyIiwxMiksUWUoMixNRWUsMywzLCJuZy1jb250YWluZXIiLDEyKSxRZSgzLHhFZSwzLDMsIm5nLWNvbnRhaW5lciIsMTIpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSgpO1JlKCJuZ1N3aXRjaCIsITApLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09''@;'; put 'put ''PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19''@;'; put 'put ''bGV0ICRlZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU3RvcmVTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnN0ZXA9MCx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuY2xpZW50X2lk''@;'; put 'put ''PSIiLHRoaXMuY2xpZW50X3NlY3JldD0iIix0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLmF1dG9kZXBsb3k9ITAsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuc2FzSnNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuU2Vy''@;'; put 'put ''dmVyVHlwZT1VYy5ELHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIm1hbnVhbGRlcGxveSIpJiYodGhpcy5hdXRvZGVwbG95PSExKSx0aGlzLnNhc0pzPXRoaXMuc2FzU2Vy''@;'; put 'put ''dmljZS5nZXRTYXNqc0luc3RhbmNlKCksdGhpcy5zYXNKc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmFwcExvYz10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHRoaXMuY2xpZW50X2lkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lf''@;'; put 'put ''Y2xpZW50X2lkIil8fCIiLHRoaXMuY2xpZW50X3NlY3JldD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X3NlY3JldF9rZXkiKXx8IiIsdGhpcy5kY1BhdGg9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9kY19sb2MiKXx8IiJ9bmdPbkluaXQoKXt0aGlzLnNhc0pzQ29uZmlnLnNl''@;'; put 'put ''cnZlclR5cGU9PT1VYy5ELlNhc1ZpeWEmJmZldGNoKCJzYXNidWlsZC92aXlhLmpzb24iKS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1udWxsO3RyeXtkPUpTT04ucGFyc2UoYSl9Y2F0Y2goaCl7Y29uc29sZS5lcnJvcihoKX1kJiYodGhpcy5qc29uRmlsZT1kLHRoaXMubG9n''@;'; put 'put ''Z2VyU2VydmljZS5sb2codGhpcy5qc29uRmlsZSkpfSksdGhpcy5zZXREZXBsb3lEZWZhdWx0cygpfXNldERlcGxveURlZmF1bHRzKCl7dGhpcy5kY1BhdGg9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uZGNQYXRofHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmRjQWRhcHRlclNl''@;'; put 'put ''dHRpbmdzPy5hZG1pbkdyb3VwfHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cHx8KHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSJTQVNBZG1pbmlzdHJhdG9ycyIpfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmF1dG9kZXBsb3l8fHRoaXMuZ2V0QWRtaW5Hcm91cHMoKSx0aGlzLnN0ZXArK31n''@;'; put 'put ''ZXRBZG1pbkdyb3Vwcygpe2ZldGNoKHRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHM/c29ydEJ5PW5hbWUmbGltaXQ9NTAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGQ7''@;'; put 'put ''dHJ5e2Q9SlNPTi5wYXJzZShhKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfWQmJih0aGlzLmFkbWluR3JvdXBzPWQuaXRlbXMsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5hZG1pbkdyb3Vwc1swXS5pZCl9KX1vbk5hdmlnYXRlVG9Ib21lKCl7d2luZG93Lm9wZW4obG9jYXRpb24u''@;'; put 'put ''aHJlZi5zcGxpdCgiIyIpWzBdLCJfYmxhbmsiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoZTgpLHR0KG9hKSx0dCh3MCksdHQoRHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWRlcGxveSJdXSxob3N0QXR0''@;'; put 'put ''cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiY2xyLXJvdyJdLFsiaWQiLCJUQ1MiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxb''@;'; put 'put ''ImlkIiwiVENTIiwxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiY2FyZC10ZXh0Il0sWyJocmVmIiwiaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2V2YWx1YXRpb24tbGljZW5jZS1hZ3JlZW1lbnQiLCJ0YXJnZXQiLCJfYmxhbmsiXSxbMSwi''@;'; put 'put ''bGlnaHQiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJjaGFuZ2UiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImF1dG9kZXBsb3ktc2VjdGlvbiBjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm1haW5ib2R5IiwiY2xhc3MiLCJjYXJk''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWzEsImF1dG9kZXBsb3ktc2VjdGlvbiIsImNhcmQiXSxbMywic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRjQWRhcHRlclNldHRpbmdzIiwiYXBwTG9jIiwiZGNQYXRoIiwic2VsZWN0ZWRBZG1pbkdyb3VwIiwib25OYXZpZ2F0ZVRvSG9tZSJdLFsiaWQiLCJtYWluYm9keSIs''@;'; put 'put ''MSwiY2FyZCJdLFszLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiLCJvbk5hdmlnYXRlVG9Ib21lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFFlKDIseUVlLDE3LDAsImRpdiIsMikseWUoKSxRZSgzLEVF''@;'; put 'put ''ZSw0LDQsIm5nLWNvbnRhaW5lciIsMykseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLDA9PT1kLnN0ZXApLENlKDEpLFJlKCJuZ0lmIixkLnN0ZXA+MCkpfSxkZXBlbmRlbmNpZXM6W1ppLG5kLHRoLFVzLEQwLFQwLHRFZSxtRWUsYkVlXSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV17bWFyZ2luLXRvcDowfS5idG5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweH0ubG9nLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7YmFja2dyb3VuZDojZjBmMGYwO2JvcmRlcjoxcHggc29saWQgI2M5YzljOTtwYWRkaW5nOjEwcHg7b3ZlcmZs''@;'; put 'put ''b3c6YXV0bzt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0jY29udGV4dHMtYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjNweCAwIDA7bWluLXdpZHRoOjMwcHg7bWFyZ2luLWxlZnQ6MTBweDtoZWlnaHQ6MzBweDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyfS52YWxpZGF0aW9uLWJhcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6MjBweDthbGlnbi1pdGVtczpjZW50ZXJ9LnZhbGlkYXRpb24tYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XXttYXJnaW4tcmlnaHQ6NXB4fS5hdXRvZGVwbG95LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAxNXB4fS5hdXRvZGVwbG95LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jaGVja2JveC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBw''@;'; put 'put ''eCAwfS5hdXRvZGVwbG95LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgLmJ0bi1hdXRvZGVwbG95W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO21hcmdpbjoxNXB4IDB9Il19KSxjfSkoKTtjb25zdCBrRWU9W3twYXRoOiIiLGNvbXBvbmVudDokZWV9LHtwYXRoOiJtYW51''@;'; put 'put ''YWxkZXBsb3kiLGNvbXBvbmVudDokZWV9XTtsZXQgQUVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2RjLmZvckNoaWxkKGtFZSks''@;'; put 'put ''ZGNdfSksY30pKCksVEVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLCRsLF91LEFFZV19KSxjfSkoKTtGKDg3MTMpLEYoNTY1''@;'; put 'put ''OCksRig5MTk0NSk7dmFyIERFZT1GKDcwODk2KTtmdW5jdGlvbiBxZWUoYyl7Y29uc3QgbD1jLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTxsOyljW2FdPVtjW2FdXSxhKz0xfWZ1bmN0aW9uIG5OKGMsbCl7Y29uc3QgYT1sLmxlbmd0aDtsZXQgZD0wO2Zvcig7ZDxhOyljLnB1c2gobFtkXSksZCs9''@;'; put 'put ''MX1mdW5jdGlvbiBxYihjKXtjb25zdCBsPVtdO2lmKCFjfHwwPT09Yy5sZW5ndGh8fCFjWzBdfHwwPT09Y1swXS5sZW5ndGgpcmV0dXJuIGw7Y29uc3QgYT1jLmxlbmd0aCxkPWNbMF0ubGVuZ3RoO2ZvcihsZXQgaD0wO2g8YTtoKyspZm9yKGxldCBmPTA7ZjxkO2YrKylsW2ZdfHwobFtmXT1b''@;'; put 'put ''XSksbFtmXVtoXT1jW2hdW2ZdO3JldHVybiBsfWZ1bmN0aW9uIEFsKGMsbCxhLGQpe2xldCBoPS0xLGY9YyxfPWE7QXJyYXkuaXNBcnJheShjKXx8KGY9QXJyYXkuZnJvbShjKSk7Y29uc3QgVD1mLmxlbmd0aDtmb3IoZCYmVCYmKGgrPTEsXz1mW2hdKSxoKz0xO2g8VDspXz1sKF8sZltoXSxo''@;'; put 'put ''LGYpLGgrPTE7cmV0dXJuIF99ZnVuY3Rpb24gXzEoYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoLGY9W107bGV0IF89LTE7Zm9yKDthPGg7KXtjb25zdCBUPWRbYV07bChULGEsZCkmJihfKz0xLGZbX109VCksYSs9''@;'; put 'put ''MX1yZXR1cm4gZn1mdW5jdGlvbiBjcyhjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgXz0tMTtmb3IoO2E8aDspXys9MSxmW19dPWwoZFthXSxhLGQpLGErPTE7cmV0dXJuIGZ9ZnVuY3Rpb24gSW4o''@;'; put 'put ''YyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoO2Zvcig7YTxoJiYhMSE9PWwoZFthXSxhLGQpOylhKz0xO3JldHVybiBjfWZ1bmN0aW9uIEtlZShjKXtyZXR1cm4gQWwoYywobCxhKT0+bCthLDApfWZ1bmN0aW9uIElF''@;'; put 'put ''ZShjKXtyZXR1cm4gQWwoYywobCxhKT0+bD5hP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBMRWUoYyl7cmV0dXJuIEFsKGMsKGwsYSk9Pmw8YT9sOmEsQXJyYXkuaXNBcnJheShjKT9jWzBdOnZvaWQgMCl9ZnVuY3Rpb24gUkVlKGMpe3JldHVybiBjLmxlbmd0''@;'; put 'put ''aD9LZWUoYykvYy5sZW5ndGg6MH1mdW5jdGlvbiBYZWUoYyl7cmV0dXJuIEFsKGMsKGwsYSk9PmwuY29uY2F0KEFycmF5LmlzQXJyYXkoYSk/WGVlKGEpOmEpLFtdKX1mdW5jdGlvbiByTihjKXtjb25zdCBsPVtdO3JldHVybiBJbihjLGE9PnstMT09PWwuaW5kZXhPZihhKSYmbC5wdXNoKGEp''@;'; put 'put ''fSksbH1mdW5jdGlvbiBpTigpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIEluKGgsXz0+e2Y9Zi5maWx0ZXIoVD0+IV8uaW5jbHVkZXMoVCkp''@;'; put 'put ''fSksZn1mdW5jdGlvbiBPRWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBJbihoLF89PntmPWYuZmlsdGVyKFQ9Pl8uaW5jbHVkZXMoVCkp''@;'; put 'put ''fSksZn1mdW5jdGlvbiBQRWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXSxmPW5ldyBTZXQoZCk7cmV0dXJuIEluKGgsXz0+e0luKF8sVD0+e2YuaGFzKFQpfHxmLmFk''@;'; put 'put ''ZChUKX0pfSksQXJyYXkuZnJvbShmKX1mdW5jdGlvbiBvTihjKXtyZXR1cm4gYy5zcGxpdChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiAiKX1mdW5jdGlvbiBBYShjKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJh''@;'; put 'put ''eShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIEFsKGMsKGYsXyxUKT0+ZitfLnJlcGxhY2UoL1xyP1xuXHMqL2csIiIpKyhhW1RdP2FbVF06IiIpLCIiKS50cmltKCl9ZnVuY3Rpb24gX2woYyl7bGV0IGw7c3dpdGNoKHR5cGVvZiBjKXtjYXNlInN0''@;'; put 'put ''cmluZyI6Y2FzZSJudW1iZXIiOmw9YCR7Y31gO2JyZWFrO2Nhc2Uib2JqZWN0IjpsPW51bGw9PT1jPyIiOmMudG9TdHJpbmcoKTticmVhaztjYXNlInVuZGVmaW5lZCI6bD0iIjticmVhaztkZWZhdWx0Omw9Yy50b1N0cmluZygpfXJldHVybiBsfWZ1bmN0aW9uIEtpKGMpe3JldHVybiB0eXBl''@;'; put 'put ''b2YgYzwidSJ9ZnVuY3Rpb24gTGEoYyl7cmV0dXJuIHR5cGVvZiBjPiJ1In1mdW5jdGlvbiBwYyhjKXtyZXR1cm4gbnVsbD09PWN8fCIiPT09Y3x8TGEoYyl9ZnVuY3Rpb24gSmVlKGMpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMp''@;'; put 'put ''fWNvbnN0IEtiPSJsZW5ndGgiLFhiPWM9PnBhcnNlSW50KGMsMTYpLFFlZT1jPT5wYXJzZUludChjLDEwKSx0az0oYyxsLGEpPT5jLnN1YnN0cihsLGEpLEpiPWM9PmMuY29kZVBvaW50QXQoMCktNjUsc049Yz0+YCR7Y31gLnJlcGxhY2UoL1wtL2csIiIpLEZFZT1jPT5YYih0ayhzTihjKSxY''@;'; put 'put ''YigiMTIiKSxKYigiRiIpKSkvKFhiKHRrKHNOKGMpLEpiKCJCIiksfn4hW11bS2JdKSl8fDkpLEhFZT0oKT0+dHlwZW9mIGxvY2F0aW9uPCJ1IiYmL14oW2EtejAtOVwtXStcLik/XHg2OFx4NjFceDZFXHg2NFx4NzNceDZGXHg2RVx4NzRceDYxXHg2Mlx4NkNceDY1XHgyRVx4NjNceDZGXHg2''@;'; put 'put ''RCQvaS50ZXN0KGxvY2F0aW9uLmhvc3QpO2xldCBldGU9ITE7Y29uc3QgdHRlPXtpbnZhbGlkOigpPT5BYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBo''@;'; put 'put ''YW5kc29udGFibGUuY29tLmAsZXhwaXJlZDpjPT57bGV0e2tleVZhbGlkaXR5RGF0ZTpsLGhvdFZlcnNpb246YX09YztyZXR1cm4gQWFgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7bH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0YWxs''@;'; put 'put ''ZWRceDIwCiAgICB2ZXJzaW9uICR7YX0uIFJlbmV3IHlvdXIgbGljZW5zZSBrZXkgYXQgaGFuZHNvbnRhYmxlLmNvbSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yXHgyMAogICAgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc2Fs''@;'; put 'put ''ZXNAaGFuZHNvbnRhYmxlLmNvbS5gfSxtaXNzaW5nOigpPT5BYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNh''@;'; put 'put ''biBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3RceDIwCiAgICB1cyBhdCBz''@;'; put 'put ''dXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9LG50ZT17aW52YWxpZDooKT0+QWFgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2Nz''@;'; put 'put ''L3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IG9uIGhvdyB0b1x4MjAKICAgIGluc3RhbGwgaXQgcHJvcGVybHkgb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhh''@;'; put 'put ''bmRzb250YWJsZS5jb208L2E+LmAsZXhwaXJlZDpjPT57bGV0e2tleVZhbGlkaXR5RGF0ZTpsLGhvdFZlcnNpb246YX09YztyZXR1cm4gQWFgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7bH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0''@;'; put 'put ''YWxsZWRceDIwCiAgICB2ZXJzaW9uICR7YX0uIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9wcmljaW5nIiB0YXJnZXQ9Il9ibGFuayI+UmVuZXc8L2E+IHlvdXJceDIwCiAgICBsaWNlbnNlIGtleSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yIHRv''@;'; put 'put ''ICR7bH0uIElmIHlvdSBuZWVkIGFueVx4MjAKICAgIGhlbHAsIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnNhbGVzQGhhbmRzb250YWJsZS5jb20iPnNhbGVzQGhhbmRzb250YWJsZS5jb208L2E+LmB9LG1pc3Npbmc6KCk9PkFhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5k''@;'; put 'put ''c29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAog''@;'; put 'put ''ICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IGFib3V0IGl0''@;'; put 'put ''IGluXHgyMAogICAgdGhlIGRvY3VtZW50YXRpb24gb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifTtmdW5jdGlvbiBydGUoYyxsKXtjb25z''@;'; put 'put ''dCBhPSFwYyhjKSxkPSJzdHJpbmciPT10eXBlb2YgYyYmIm5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj09PWMudG9Mb3dlckNhc2UoKSxoPSIxMy4xLjAiO2xldCBmLF89ImludmFsaWQiLFQ9ImludmFsaWQiO2NvbnN0IFc9ZnVuY3Rpb24gTkVlKGMpe2xldCBsPVtdW0tiXSxhPWw7''@;'; put 'put ''aWYoY1tLYl0hPT1KYigiWiIpKXJldHVybiExO2ZvcihsZXQgZD0iIixoPSJCPEg0UCsiLnNwbGl0KCIiKSxmPUpiKGguc2hpZnQoKSk7ZjtmPUpiKGguc2hpZnQoKXx8IkEiKSktLWY8IiJbS2JdP2F8PShRZWUoYCR7UWVlKFhiKGQpKyhYYih0ayhjLE1hdGguYWJzKGYpLDIpKStbXSkucGFk''@;'; put 'put ''U3RhcnQoMiwiMCIpKX1gKSU5N3x8Mik+PjE6ZD10ayhjLGYsZj8xPT09aFtLYl0/OTo4OjYpO3JldHVybiBhPT09bH0oYz1zTihjfHwiIikpO2lmKGF8fGR8fFcpaWYoVyl7Y29uc3QgaWU9S28oIjMxLzA4LzIwMjMiLCJERC9NTS9ZWVlZIiksZ2U9TWF0aC5mbG9vcihpZS50b0RhdGUoKS5n''@;'; put 'put ''ZXRUaW1lKCkvODY0ZTUpLHdlPUZFZShjKTtmPUtvKDg2NGU1Kih3ZSsxKSwieCIpLmZvcm1hdCgiTU1NTSBERCwgWVlZWSIpLGdlPndlPyhfPSJleHBpcmVkIixUPSJleHBpcmVkIik6KF89InZhbGlkIixUPSJ2YWxpZCIpfWVsc2UgZD8oXz0ibm9uX2NvbW1lcmNpYWwiLFQ9InZhbGlkIik6''@;'; put 'put ''KF89ImludmFsaWQiLFQ9ImludmFsaWQiKTtlbHNlIF89Im1pc3NpbmciLFQ9Im1pc3NpbmciO2lmKEhFZSgpJiYoXz0idmFsaWQiLFQ9InZhbGlkIiksIWV0ZSYmInZhbGlkIiE9PV8mJih0dGVbX10oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pJiZjb25zb2xlWyJub25fY29t''@;'; put 'put ''bWVyY2lhbCI9PT1fPyJpbmZvIjoid2FybiJdKHR0ZVtfXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkpLGV0ZT0hMCksInZhbGlkIiE9PVQmJmwucGFyZW50Tm9kZSYmbnRlW1RdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSl7Y29uc3QgZ2U9ZG9jdW1lbnQu''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgiZGl2Iik7Z2UuY2xhc3NOYW1lPSJob3QtZGlzcGxheS1saWNlbnNlLWluZm8iLGdlLmlubmVySFRNTD1udGVbVF0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pLGwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZ2UsbC5uZXh0U2libGluZyl9fWZ1bmN0''@;'; put 'put ''aW9uIGJ1KGMpe3JldHVybiBjWzBdLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSl9ZnVuY3Rpb24gVkVlKCl7Y29uc3QgYz1bXTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtsZXQgaD1hLmxlbmd0aDtmb3Io''@;'; put 'put ''O2g7KXtoLT0xO2NvbnN0IGY9X2woYVtoXSkudG9Mb3dlckNhc2UoKTstMT09PWMuaW5kZXhPZihmKSYmYy5wdXNoKGYpfXJldHVybiAxPT09Yy5sZW5ndGh9ZnVuY3Rpb24gYU4oKXtmdW5jdGlvbiBjKCl7cmV0dXJuIE1hdGguZmxvb3IoNjU1MzYqKDErTWF0aC5yYW5kb20oKSkpLnRvU3Ry''@;'; put 'put ''aW5nKDE2KS5zdWJzdHJpbmcoMSl9cmV0dXJuIGMoKStjKCkrYygpK2MoKX1mdW5jdGlvbiBsTihjKXtyZXR1cm4vXihbMC05XVswLTldPyUkKXwoXjEwMCUkKS8udGVzdChjKX1mdW5jdGlvbiBjTihjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06e307cmV0dXJuYCR7Y31gLnJlcGxhY2UoLyg/OlxcKT9cWyhbXltcXV0rKV0vZywoYSxkKT0+IlxcIj09PWEuY2hhckF0KDApP2Euc3Vic3RyKDEsYS5sZW5ndGgtMSk6dm9pZCAwPT09bFtkXT8iIjpsW2RdKX1mdW5jdGlvbiB1TihjKXtyZXR1cm4gbmsoYCR7Y31gLHtB''@;'; put 'put ''TExPV0VEX1RBR1M6W119KX1mdW5jdGlvbiBuayhjLGwpe3JldHVybiBERWUuc2FuaXRpemUoYyxsKX1mdW5jdGlvbiBpdGUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT0tMSxkPW51bGwsaD1jO2Zvcig7bnVsbCE9''@;'; put 'put ''PWg7KXtpZihhPT09bCl7ZD1oO2JyZWFrfWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9oPWguaG9zdDooYSs9MSxoPWgucGFyZW50Tm9kZSl9cmV0dXJuIGR9ZnVuY3Rpb24gb3RlKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wYXJl''@;'; put 'put ''bnQpJiZjLmZyYW1lRWxlbWVudH1mdW5jdGlvbiBRYihjKXtyZXR1cm4gb3RlKGMpJiZjLnBhcmVudH1mdW5jdGlvbiBCRWUoYyl7cmV0dXJuISFPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wYXJlbnQpfWZ1bmN0aW9uIE5wKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2NvbnN0e0VMRU1FTlRfTk9ERTpkLERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6aH09Tm9kZTtsZXQgZj1jO2Zvcig7bnVsbCE9ZiYmZiE9PWE7KXtjb25zdHtub2RlVHlw''@;'; put 'put ''ZTpfLG5vZGVOYW1lOlR9PWY7aWYoXz09PWQmJihsLmluY2x1ZGVzKFQpfHxsLmluY2x1ZGVzKGYpKSlyZXR1cm4gZjtjb25zdHtob3N0Old9PWY7Zj1XJiZfPT09aD9XOmYucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBleShjLGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1jO2Zvcig7''@;'; put 'put ''aCYmKGg9TnAoaCxsLGEpLGgmJighYXx8YS5jb250YWlucyhoKSkpOylkLnB1c2goaCksaD1oLmhvc3QmJmgubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/aC5ob3N0OmgucGFyZW50Tm9kZTtjb25zdCBmPWQubGVuZ3RoO3JldHVybiBmP2RbZi0xXTpudWxsfWZ1bmN0''@;'; put 'put ''aW9uIFZwKGMsbCl7bGV0IGE9Yy5wYXJlbnROb2RlLGQ9W107Zm9yKCJzdHJpbmciPT10eXBlb2YgbD9kPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuZGVmYXVsdFZpZXc/Yy5xdWVyeVNlbGVjdG9yQWxsKGwpOmMub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGwpLDApOmQu''@;'; put 'put ''cHVzaChsKTtudWxsIT09YTspe2lmKGQuaW5kZXhPZihhKT4tMSlyZXR1cm4hMDthPWEucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBzdGUoYyl7bGV0IGw9MCxhPWM7aWYoYS5wcmV2aW91c1NpYmxpbmcpZm9yKDthPWEucHJldmlvdXNTaWJsaW5nOylsKz0xO3JldHVybiBsfWZ1bmN0''@;'; put 'put ''aW9uIEJwKGMsbCxhKXtjb25zdCBkPWEucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKGAuaHRfY2xvbmVfJHtjfWApO3JldHVybiBkP2QuY29udGFpbnMobCk6bnVsbH1mdW5jdGlvbiBhdGUoYyl7cmV0dXJuIGMmJmMubGVuZ3RoP2MuZmlsdGVyKGw9PiEhbCk6W119ZnVuY3Rpb24gQm8o''@;'; put 'put ''YyxsKXtyZXR1cm4gdm9pZCAwIT09Yy5jbGFzc0xpc3QmJiJzdHJpbmciPT10eXBlb2YgbCYmIiIhPT1sJiZjLmNsYXNzTGlzdC5jb250YWlucyhsKX1mdW5jdGlvbiBwaShjLGwpeyJzdHJpbmciPT10eXBlb2YgbCYmKGw9bC5zcGxpdCgiICIpKSwobD1hdGUobCkpLmxlbmd0aD4wJiZjLmNs''@;'; put 'put ''YXNzTGlzdC5hZGQoLi4ubCl9ZnVuY3Rpb24gV28oYyxsKXsic3RyaW5nIj09dHlwZW9mIGwmJihsPWwuc3BsaXQoIiAiKSksKGw9YXRlKGwpKS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QucmVtb3ZlKC4uLmwpfWZ1bmN0aW9uIGROKGMpe2lmKDM9PT1jLm5vZGVUeXBlKWMucGFyZW50Tm9kZS5y''@;'; put 'put ''ZW1vdmVDaGlsZChjKTtlbHNlIGlmKFsiVEFCTEUiLCJUSEVBRCIsIlRCT0RZIiwiVEZPT1QiLCJUUiJdLmluZGV4T2YoYy5ub2RlTmFtZSk+LTEpe2NvbnN0IGw9Yy5jaGlsZE5vZGVzO2ZvcihsZXQgYT1sLmxlbmd0aC0xO2E+PTA7YS0tKWROKGxbYV0pfX1mdW5jdGlvbiBnMihjKXtsZXQg''@;'; put 'put ''bDtmb3IoO2w9Yy5sYXN0Q2hpbGQ7KWMucmVtb3ZlQ2hpbGQobCl9Y29uc3QgbHRlPS8oPCguKik+fCYoLiopOykvO2Z1bmN0aW9uIGdnKGMsbCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtsdGUudGVzdChsKT9jLmlu''@;'; put 'put ''bmVySFRNTD1hP25rKGwpOmw6anAoYyxsKX1mdW5jdGlvbiBqcChjLGwpe2NvbnN0IGE9Yy5maXJzdENoaWxkO2EmJjM9PT1hLm5vZGVUeXBlJiZudWxsPT09YS5uZXh0U2libGluZz9hLnRleHRDb250ZW50PWw6KGcyKGMpLGMuYXBwZW5kQ2hpbGQoYy5vd25lckRvY3VtZW50LmNyZWF0ZVRl''@;'; put 'put ''eHROb2RlKGwpKSl9ZnVuY3Rpb24gZTcoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2xldCBhPWM7Zm9yKDthIT09bDspe2lmKG51bGw9PT1hKXJldHVybiExO2lmKGEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe2lmKGEuaG9zdCl7''@;'; put 'put ''aWYoYS5ob3N0LmltcGwpcmV0dXJuIGU3KGEuaG9zdC5pbXBsKTtpZihhLmhvc3QpcmV0dXJuIGU3KGEuaG9zdCk7dGhyb3cgbmV3IEVycm9yKCJMb3N0IGluIFdlYiBDb21wb25lbnRzIHdvcmxkIil9cmV0dXJuITF9aWYoYS5zdHlsZSYmIm5vbmUiPT09YS5zdHlsZS5kaXNwbGF5KXJldHVy''@;'; put 'put ''biExO2E9YS5wYXJlbnROb2RlfXJldHVybiEwfWZ1bmN0aW9uIHFsKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldyxkPWwuZG9jdW1lbnRFbGVtZW50O2xldCBmLF8sVCxoPWM7Zm9yKGY9aC5vZmZzZXRMZWZ0LF89aC5vZmZzZXRUb3AsVD1oOyhoPWgub2Zmc2V0''@;'; put 'put ''UGFyZW50KSYmaCE9PWwuYm9keTspZis9aC5vZmZzZXRMZWZ0LF8rPWgub2Zmc2V0VG9wLFQ9aDtyZXR1cm4gVCYmImZpeGVkIj09PVQuc3R5bGUucG9zaXRpb24mJihmKz1hLnBhZ2VYT2Zmc2V0fHxkLnNjcm9sbExlZnQsXys9YS5wYWdlWU9mZnNldHx8ZC5zY3JvbGxUb3ApLHtsZWZ0OmYs''@;'; put 'put ''dG9wOl99fWZ1bmN0aW9uIHQ3KCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9sbFl9ZnVuY3Rpb24gbWcoKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn''@;'; put 'put ''dW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWH1mdW5jdGlvbiB0eShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD90NyhsKTpjLnNjcm9sbFRvcH1mdW5jdGlvbiByayhjKXtsZXQgbD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9tZyhsKTpjLnNjcm9sbExlZnR9ZnVuY3Rpb24gbnkoYyl7bGV0IGw9Yy5vd25lckRvY3VtZW50LGE9bD9sLmRlZmF1bHRWaWV3OnZvaWQgMDtsfHwobD1jLmRvY3Vt''@;'; put 'put ''ZW50P2MuZG9jdW1lbnQ6YyxhPWwuZGVmYXVsdFZpZXcpO2NvbnN0IGQ9WyJhdXRvIiwic2Nyb2xsIl07bGV0IGg9Yy5wYXJlbnROb2RlO2Zvcig7aCYmaC5zdHlsZSYmbC5ib2R5IT09aDspe2xldHtvdmVyZmxvdzpmLG92ZXJmbG93WDpfLG92ZXJmbG93WTpUfT1oLnN0eWxlO2lmKFtmLF8s''@;'; put 'put ''VF0uaW5jbHVkZXMoInNjcm9sbCIpKXJldHVybiBoO2lmKCh7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6XyxvdmVyZmxvd1k6VH09YS5nZXRDb21wdXRlZFN0eWxlKGgpKSxkLmluY2x1ZGVzKGYpfHxkLmluY2x1ZGVzKF8pfHxkLmluY2x1ZGVzKFQpfHxoLmNsaWVudEhlaWdodDw9aC5zY3JvbGxI''@;'; put 'put ''ZWlnaHQrMSYmKGQuaW5jbHVkZXMoVCl8fGQuaW5jbHVkZXMoZikpfHxoLmNsaWVudFdpZHRoPD1oLnNjcm9sbFdpZHRoKzEmJihkLmluY2x1ZGVzKF8pfHxkLmluY2x1ZGVzKGYpKSlyZXR1cm4gaDtoPWgucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiB2ZyhjKXtjb25zdCBsPWMub3du''@;'; put 'put ''ZXJEb2N1bWVudCxhPWwuZGVmYXVsdFZpZXc7bGV0IGQ9Yy5wYXJlbnROb2RlO2Zvcig7ZCYmZC5zdHlsZSYmbC5ib2R5IT09ZDspe2lmKCJ2aXNpYmxlIiE9PWQuc3R5bGUub3ZlcmZsb3cmJiIiIT09ZC5zdHlsZS5vdmVyZmxvdylyZXR1cm4gZDtjb25zdCBoPXpwKGQsYSksZj1bInNjcm9s''@;'; put 'put ''bCIsImhpZGRlbiIsImF1dG8iXSxfPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKSxUPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteSIpLFc9aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy14Iik7aWYoZi5pbmNsdWRlcyhfKXx8Zi5pbmNsdWRlcyhUKXx8Zi5pbmNsdWRl''@;'; put 'put ''cyhXKSlyZXR1cm4gZDtkPWQucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBuNyhjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp3aW5kb3c7aWYoIWMpcmV0dXJuO2lmKGM9PT1hKXJldHVybiJ3aWR0aCI9PT1sP2Ak''@;'; put 'put ''e2EuaW5uZXJXaWR0aH1weGA6ImhlaWdodCI9PT1sP2Ake2EuaW5uZXJIZWlnaHR9cHhgOnZvaWQgMDtjb25zdCBkPWMuc3R5bGVbbF07aWYoIiIhPT1kJiZ2b2lkIDAhPT1kKXJldHVybiBkO2NvbnN0IGg9enAoYyxhKTtyZXR1cm4iIiE9PWhbbF0mJnZvaWQgMCE9PWhbbF0/aFtsXTp2b2lk''@;'; put 'put ''IDB9ZnVuY3Rpb24gakVlKGMsbCl7Y29uc3R7c2VsZWN0b3JUZXh0OmF9PWw7bGV0IGQ9ITE7cmV0dXJuIGwudHlwZT09PUNTU1J1bGUuU1RZTEVfUlVMRSYmYSYmKGMubXNNYXRjaGVzU2VsZWN0b3I/ZD1jLm1zTWF0Y2hlc1NlbGVjdG9yKGEpOmMubWF0Y2hlcyYmKGQ9Yy5tYXRjaGVzKGEp''@;'; put 'put ''KSksZH1mdW5jdGlvbiB6cChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjLmN1cnJlbnRTdHlsZXx8bC5nZXRDb21wdXRlZFN0eWxlKGMpfWZ1bmN0aW9uIHdhKGMpe3JldHVybiBjLm9mZnNldFdp''@;'; put 'put ''ZHRofWZ1bmN0aW9uIGFsKGMpe3JldHVybiBjLm9mZnNldEhlaWdodH1mdW5jdGlvbiBqZihjKXtyZXR1cm4gYy5jbGllbnRIZWlnaHR8fGMuaW5uZXJIZWlnaHR9ZnVuY3Rpb24gcnkoYyl7cmV0dXJuIGMuY2xpZW50V2lkdGh8fGMuaW5uZXJXaWR0aH1mdW5jdGlvbiB6RWUoYyxsLGEpe2Mu''@;'; put 'put ''YWRkRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFVFZShjLGwsYSl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gaE4oYyl7cmV0dXJuIGMuc2VsZWN0aW9uU3RhcnQ/Yy5zZWxlY3Rpb25TdGFydDowfWZ1bmN0aW9uIGN0ZShjKXtyZXR1cm4gYy5zZWxlY3Rp''@;'; put 'put ''b25FbmQ/Yy5zZWxlY3Rpb25FbmQ6MH1mdW5jdGlvbiB1dGUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93O2NvbnN0IGw9Yy5kb2N1bWVudDtsZXQgYT0iIjtyZXR1cm4gYy5nZXRTZWxlY3Rpb24/YT1jLmdldFNl''@;'; put 'put ''bGVjdGlvbigpLnRvU3RyaW5nKCk6bC5zZWxlY3Rpb24mJiJDb250cm9sIiE9PWwuc2VsZWN0aW9uLnR5cGUmJihhPWwuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dCksYX1mdW5jdGlvbiBmTigpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy''@;'; put 'put ''Z3VtZW50c1swXTp3aW5kb3c7Yy5nZXRTZWxlY3Rpb24mJihjLmdldFNlbGVjdGlvbigpLmVtcHR5P2MuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTpjLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcyYmYy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSl9ZnVuY3Rpb24gaXko''@;'; put 'put ''YyxsLGEpe2lmKHZvaWQgMD09PWEmJihhPWwpLGMuc2V0U2VsZWN0aW9uUmFuZ2Upe2MuZm9jdXMoKTt0cnl7Yy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpfWNhdGNoe2NvbnN0IGg9Yy5wYXJlbnROb2RlLGY9aC5zdHlsZS5kaXNwbGF5O2guc3R5bGUuZGlzcGxheT0iYmxvY2siLGMuc2V0U2Vs''@;'; put 'put ''ZWN0aW9uUmFuZ2UobCxhKSxoLnN0eWxlLmRpc3BsYXk9Zn19fWxldCBwTjtmdW5jdGlvbiBJYygpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1bWVudDtyZXR1cm4gdm9pZCAwPT09cE4mJihwTj1mdW5jdGlvbiBaRWUo''@;'; put 'put ''KXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7Y29uc3QgbD1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuc3R5bGUuaGVpZ2h0PSIyMDBweCIsbC5zdHlsZS53aWR0aD0iMTAwJSI7Y29uc3QgYT1jLmNyZWF0ZUVs''@;'; put 'put ''ZW1lbnQoImRpdiIpO2Euc3R5bGUuYm94U2l6aW5nPSJjb250ZW50LWJveCIsYS5zdHlsZS5oZWlnaHQ9IjE1MHB4IixhLnN0eWxlLmxlZnQ9IjBweCIsYS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixhLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS50b3A9IjBweCIsYS5zdHls''@;'; put 'put ''ZS53aWR0aD0iMjAwcHgiLGEuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixhLmFwcGVuZENoaWxkKGwpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChhKTtjb25zdCBkPWwub2Zmc2V0V2lkdGg7YS5zdHlsZS5vdmVyZmxvdz0ic2Nyb2xsIjtsZXQgaD1sLm9mZnNl''@;'; put 'put ''dFdpZHRoO3JldHVybiBkPT09aCYmKGg9YS5jbGllbnRXaWR0aCksKGMuYm9keXx8Yy5kb2N1bWVudEVsZW1lbnQpLnJlbW92ZUNoaWxkKGEpLGQtaH0oYykpLHBOfWZ1bmN0aW9uIGR0ZShjKXtyZXR1cm4gYy5vZmZzZXRXaWR0aCE9PWMuY2xpZW50V2lkdGh9ZnVuY3Rpb24gaHRlKGMpe3Jl''@;'; put 'put ''dHVybiBjLm9mZnNldEhlaWdodCE9PWMuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIGlrKGMsbCxhKXtjLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtsfSwke2F9LDApYH1mdW5jdGlvbiBZRWUoYyl7bGV0IGw7cmV0dXJuIGMuc3R5bGUudHJhbnNmb3JtJiYiIiE9PShsPWMuc3R5bGUu''@;'; put 'put ''dHJhbnNmb3JtKT9bInRyYW5zZm9ybSIsbF06LTF9ZnVuY3Rpb24gb3koYyl7Yy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09Yy5zdHlsZS50cmFuc2Zvcm0mJihjLnN0eWxlLnRyYW5zZm9ybT0iIil9ZnVuY3Rpb24gc3koYyl7cmV0dXJuIGMmJihbIklOUFVUIiwiU0VMRUNUIiwiVEVYVEFSRUEi''@;'; put 'put ''XS5pbmRleE9mKGMubm9kZU5hbWUpPi0xfHwidHJ1ZSI9PT1jLmNvbnRlbnRFZGl0YWJsZSl9ZnVuY3Rpb24gb2soYyl7cmV0dXJuIHN5KGMpJiYhMT09PWMuaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpfWZ1bmN0aW9uIGZ0ZShjKXtvayhjLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxl''@;'; put 'put ''bWVudCl8fGMuc2VsZWN0KCl9ZnVuY3Rpb24gZ04oYyl7cmV0dXJuIWMucGFyZW50Tm9kZX1mdW5jdGlvbiBwdGUoYyxsKXtuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGQsaCk9PntkLmZvckVhY2goZj0+e2YuaXNJbnRlcnNlY3RpbmcmJm51bGwhPT1jLm9mZnNldFBhcmVudCYmKGwoKSxo''@;'; put 'put ''LnVub2JzZXJ2ZShjKSl9KX0se3Jvb3Q6Yy5vd25lckRvY3VtZW50LmJvZHl9KS5vYnNlcnZlKGMpfWZ1bmN0aW9uIFJhKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWZ1bmN0aW9uIGd0ZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06MjAwLGE9MDtjb25zdCBkPXtsYXN0Q2FsbFRocm90dGxlZDohMH07bGV0IGg9bnVsbDtyZXR1cm4gZnVuY3Rpb24gZigpe2Zvcih2YXIgXz1hcmd1bWVudHMubGVuZ3RoLFQ9bmV3IEFycmF5KF8pLFc9MDtXPF87VysrKVRbV109YXJndW1lbnRzW1ddO2NvbnN0IGllPURh''@;'; put 'put ''dGUubm93KCk7bGV0IGdlPSExO2QubGFzdENhbGxUaHJvdHRsZWQ9ITAsYXx8KGE9aWUsZ2U9ITApO2NvbnN0IHdlPWwtKGllLWEpO3JldHVybiBnZT8oZC5sYXN0Q2FsbFRocm90dGxlZD0hMSxjLmFwcGx5KHRoaXMsVCkpOihoJiZjbGVhclRpbWVvdXQoaCksaD1zZXRUaW1lb3V0KCgpPT57''@;'; put 'put ''ZC5sYXN0Q2FsbFRocm90dGxlZD0hMSxjLmFwcGx5KHRoaXMsVCksYT0wLGg9dm9pZCAwfSx3ZSkpLGR9fWZ1bmN0aW9uIFdFZShjKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTA7Y29uc3QgZD1ndGUoYyxhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwKTtsZXQgaD1hO2Z1bmN0aW9uIF8oKXtmb3IodmFyIFQ9YXJndW1lbnRzLmxlbmd0aCxXPW5ldyBBcnJheShUKSxpZT0wO2llPFQ7aWUrKylXW2llXT1hcmd1bWVudHNbaWVdO3JldHVybiBoPyhoLT0xLGMu''@;'; put 'put ''YXBwbHkodGhpcyxXKSk6ZC5hcHBseSh0aGlzLFcpfXJldHVybiBfLmNsZWFySGl0cz1mdW5jdGlvbiBmKCl7aD1hfSxffWZ1bmN0aW9uIG1OKGMpe2xldCBkLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPW51bGw7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIGgoKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheShmKSxUPTA7VDxmO1QrKylfW1RdPWFyZ3VtZW50c1tUXTtyZXR1cm4gYSYmY2xlYXJUaW1lb3V0KGEpLGE9c2V0VGltZW91dCgoKT0+e2Q9Yy5hcHBseSh0aGlzLF8pfSxsKSxkfX1mdW5jdGlvbiBH''@;'; put 'put ''RWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPWw7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBfPWFyZ3VtZW50cy5sZW5ndGgsVD1uZXcgQXJyYXkoXyksVz0wO1c8XztXKysp''@;'; put 'put ''VFtXXT1hcmd1bWVudHNbV107cmV0dXJuIEFsKGgsKGllLGdlKT0+Z2UoaWUpLGQuYXBwbHkodGhpcyxUKSl9fWZ1bmN0aW9uIHZOKGMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFdPWFyZ3VtZW50c1tkXTtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheShmKSxUPTA7VDxmO1QrKylfW1RdPWFyZ3VtZW50c1tUXTtyZXR1cm4gYy5hcHBseSh0aGlzLGEuY29uY2F0KF8pKX19ZnVuY3Rpb24gbXRlKGMpe2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIGEoZCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkoZiksVD0wO1Q8ZjtUKyspX1tUXT1hcmd1bWVudHNbVF07Y29uc3QgVz1kLmNvbmNhdChfKTtsZXQgaWU7cmV0dXJuIGllPVcubGVuZ3RoPj1sP2MuYXBwbHkodGhpcyxXKTph''@;'; put 'put ''KFcpLGllfX0oW10pfWZ1bmN0aW9uICRFZShjKXtjb25zdCBsPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KGYpLFQ9MDtUPGY7VCsrKV9bVF09YXJndW1lbnRzW1RdO2NvbnN0IFc9''@;'; put 'put ''ZC5jb25jYXQoXy5yZXZlcnNlKCkpO2xldCBpZTtyZXR1cm4gaWU9Vy5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLFcpOmEoVyksaWV9fShbXSl9ZnVuY3Rpb24gc2soYyxsLGEsZCxoLGYsXyxUKXtyZXR1cm4gS2koVCk/Yy5jYWxsKGwsYSxkLGgsZixfLFQpOktpKF8pP2MuY2FsbChsLGEsZCxo''@;'; put 'put ''LGYsXyk6S2koZik/Yy5jYWxsKGwsYSxkLGgsZik6S2koaCk/Yy5jYWxsKGwsYSxkLGgpOktpKGQpP2MuY2FsbChsLGEsZCk6S2koYSk/Yy5jYWxsKGwsYSk6Yy5jYWxsKGwpfWZ1bmN0aW9uIHI3KGMpe2xldCBsO3JldHVybiBBcnJheS5pc0FycmF5KGMpP2w9Yy5sZW5ndGg/bmV3IEFycmF5''@;'; put 'put ''KGMubGVuZ3RoKS5maWxsKG51bGwpOltdOihsPXt9LGRzKGMsKGEsZCk9PnsiX19jaGlsZHJlbiIhPT1kJiYobFtkXT1hJiYib2JqZWN0Ij09dHlwZW9mIGEmJiFBcnJheS5pc0FycmF5KGEpP3I3KGEpOkFycmF5LmlzQXJyYXkoYSk/YS5sZW5ndGgmJiJvYmplY3QiPT10eXBlb2YgYVswXSYm''@;'; put 'put ''IUFycmF5LmlzQXJyYXkoYVswXSk/W3I3KGFbMF0pXTpbXTpudWxsKX0pKSxsfWZ1bmN0aW9uIHpmKGMsbCl7cmV0dXJuIGwucHJvdG90eXBlLmNvbnN0cnVjdG9yPWwsYy5wcm90b3R5cGU9bmV3IGwsYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjfWZ1bmN0aW9uIEtsKGMsbCxhKXtjb25z''@;'; put 'put ''dCBkPUFycmF5LmlzQXJyYXkoYSk7cmV0dXJuIGRzKGwsKGgsZik9PnsoITE9PT1kfHxhLmluY2x1ZGVzKGYpKSYmKGNbZl09aCl9KSxjfWZ1bmN0aW9uIGF5KGMsbCl7ZHMobCwoYSxkKT0+e2xbZF0mJiJvYmplY3QiPT10eXBlb2YgbFtkXT8oY1tkXXx8KGNbZF09QXJyYXkuaXNBcnJheShs''@;'; put 'put ''W2RdKT9bXToiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobFtkXSk/bFtkXTp7fSksYXkoY1tkXSxsW2RdKSk6Y1tkXT1sW2RdfSl9ZnVuY3Rpb24geXUoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnko''@;'; put 'put ''YykpOmN9ZnVuY3Rpb24gV3UoYyl7Y29uc3QgbD17fTtyZXR1cm4gZHMoYywoYSxkKT0+e2xbZF09YX0pLGx9ZnVuY3Rpb24gVGEoYyl7Yy5NSVhJTlN8fChjLk1JWElOUz1bXSk7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylh''@;'; put 'put ''W2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBJbihhLGg9PntjLk1JWElOUy5wdXNoKGguTUlYSU5fTkFNRSksZHMoaCwoZixfKT0+e2lmKHZvaWQgMCE9PWMucHJvdG90eXBlW19dKXRocm93IG5ldyBFcnJvcihgTWl4aW4gY29uZmxpY3QuIFByb3BlcnR5ICcke199JyBhbHJlYWR5IGV4aXN0''@;'; put 'put ''IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uYCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYpYy5wcm90b3R5cGVbX109ZjtlbHNle2NvbnN0IFc9ZnVuY3Rpb24oZ2Upe2NvbnN0IHdlPWBfJHtnZX1gO3JldHVybiBmdW5jdGlvbihFZSl7dGhpc1t3ZV09RWV9fTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoYy5wcm90b3R5cGUsXyx7Z2V0OmZ1bmN0aW9uKGdlLHdlKXtjb25zdCBFZT1gXyR7Z2V9YDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpc1tFZV0mJih0aGlzW0VlXT0ob3Q9PntsZXQgZXQ9b3Q7cmV0dXJuKEFycmF5LmlzQXJyYXkoZXQpfHx1cyhldCkpJiYo''@;'; put 'put ''ZXQ9eXUoZXQpKSxldH0pKHdlKSksdGhpc1tFZV19fShfLGYpLHNldDpXKF8pLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSksY31mdW5jdGlvbiBhayhjLGwpe3JldHVybiBKU09OLnN0cmluZ2lmeShjKT09PUpTT04uc3RyaW5naWZ5KGwpfWZ1bmN0aW9uIHVzKGMpe3JldHVybiJbb2JqZWN0IE9i''@;'; put 'put ''amVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfWZ1bmN0aW9uIGZoKGMsbCxhLGQpe2QudmFsdWU9YSxkLndyaXRhYmxlPSExIT09ZC53cml0YWJsZSxkLmVudW1lcmFibGU9ITEhPT1kLmVudW1lcmFibGUsZC5jb25maWd1cmFibGU9ITEhPT1kLmNvbmZpZ3VyYWJs''@;'; put 'put ''ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLGQpfWZ1bmN0aW9uIGRzKGMsbCl7Zm9yKGNvbnN0IGEgaW4gYylpZigoIWMuaGFzT3duUHJvcGVydHl8fGMuaGFzT3duUHJvcGVydHkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGEpKSYmITE9PT1sKGNbYV0sYSxj''@;'; put 'put ''KSlicmVhaztyZXR1cm4gY31mdW5jdGlvbiB2dGUoYyxsKXtjb25zdCBhPWwuc3BsaXQoIi4iKTtsZXQgZD1jO3JldHVybiBkcyhhLGg9PntpZihkPWRbaF0sdm9pZCAwPT09ZClyZXR1cm4gZD12b2lkIDAsITF9KSxkfWZ1bmN0aW9uIGxrKGMsbCxhKXtjb25zdCBkPWwuc3BsaXQoIi4iKTts''@;'; put 'put ''ZXQgaD1jO2QuZm9yRWFjaCgoZixfKT0+e18hPT1kLmxlbmd0aC0xPyhibChoLGYpfHwoaFtmXT17fSksaD1oW2ZdKTpoW2ZdPWF9KX1mdW5jdGlvbiBjayhjKXtpZighdXMoYykpcmV0dXJuIDA7Y29uc3QgbD1mdW5jdGlvbihhKXtsZXQgZD0wO3JldHVybiB1cyhhKT9kcyhhLChoLGYpPT57''@;'; put 'put ''Il9fY2hpbGRyZW4iIT09ZiYmKGQrPWwoaCkpfSk6ZCs9MSxkfTtyZXR1cm4gbChjKX1mdW5jdGlvbiBfZyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InZhbHVlIjtjb25zdCBhPWBfJHtsfWAsZD17X3RvdWNoZWQ6ITEs''@;'; put 'put ''W2FdOmMsaXNUb3VjaGVkKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWR9fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsbCx7Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXt0aGlzLl90b3VjaGVkPSEwLHRoaXNbYV09aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxk''@;'; put 'put ''fWZ1bmN0aW9uIGJsKGMsbCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGwpfUYoMTMwMDYpO2NvbnN0IGZkPWM9Pntjb25zdCBsPXt2YWx1ZTohMSx0ZXN0OihhLGQpPT57bC52YWx1ZT1jKGEsZCl9fTtyZXR1cm4gbH0sVWY9e2Nocm9tZTpmZCgoYyxs''@;'; put 'put ''KT0+L0Nocm9tZS8udGVzdChjKSYmL0dvb2dsZS8udGVzdChsKSksY2hyb21lV2ViS2l0OmZkKGM9Pi9DcmlPUy8udGVzdChjKSksZWRnZTpmZChjPT4vRWRnZS8udGVzdChjKSksZWRnZVdlYktpdDpmZChjPT4vRWRnaU9TLy50ZXN0KGMpKSxmaXJlZm94OmZkKGM9Pi9GaXJlZm94Ly50ZXN0''@;'; put 'put ''KGMpKSxmaXJlZm94V2ViS2l0OmZkKGM9Pi9GeGlPUy8udGVzdChjKSksbW9iaWxlOmZkKGM9Pi9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChjKSksc2FmYXJpOmZkKChjLGwpPT4vU2FmYXJpLy50ZXN0KGMpJiYv''@;'; put 'put ''QXBwbGUgQ29tcHV0ZXIvLnRlc3QobCkpfSxpNz17bWFjOmZkKGM9Pi9eTWFjLy50ZXN0KGMpKSx3aW46ZmQoYz0+L15XaW4vLnRlc3QoYykpLGxpbnV4OmZkKGM9Pi9eTGludXgvLnRlc3QoYykpLGlvczpmZChjPT4vaVBob25lfGlQYWR8aVBvZC9pLnRlc3QoYykpfTtmdW5jdGlvbiBfdGUo''@;'; put 'put ''KXtsZXR7dXNlckFnZW50OmM9bmF2aWdhdG9yLnVzZXJBZ2VudCx2ZW5kb3I6bD1uYXZpZ2F0b3IudmVuZG9yfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZHMoVWYsYT0+e2xldHt0ZXN0OmR9PWE7ZChjLGwpfSl9ZnVuY3Rpb24g''@;'; put 'put ''YnRlKCl7bGV0e3BsYXRmb3JtOmM9bmF2aWdhdG9yLnBsYXRmb3JtfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZHMoaTcsbD0+e2xldHt0ZXN0OmF9PWw7YShjKX0pfWZ1bmN0aW9uIF9OKCl7cmV0dXJuIFVmLmNocm9tZS52YWx1''@;'; put 'put ''ZX1mdW5jdGlvbiB5dGUoKXtyZXR1cm4gVWYuY2hyb21lV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIHVrKCl7cmV0dXJuIFVmLmZpcmVmb3gudmFsdWV9ZnVuY3Rpb24gd3RlKCl7cmV0dXJuIFVmLmZpcmVmb3hXZWJLaXQudmFsdWV9ZnVuY3Rpb24gcUVlKCl7cmV0dXJuIFVmLnNhZmFyaS52YWx1''@;'; put 'put ''ZX1mdW5jdGlvbiBDdGUoKXtyZXR1cm4gVWYuZWRnZS52YWx1ZX1mdW5jdGlvbiBLRWUoKXtyZXR1cm4gVWYuZWRnZVdlYktpdC52YWx1ZX1mdW5jdGlvbiBtMigpe3JldHVybiBVZi5tb2JpbGUudmFsdWV9ZnVuY3Rpb24gYk4oKXtyZXR1cm4gaTcuaW9zLnZhbHVlfWZ1bmN0aW9uIHlOKCl7''@;'; put 'put ''bGV0e21heFRvdWNoUG9pbnRzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuYXZpZ2F0b3I7cmV0dXJuIGM+MiYmaTcubWFjLnZhbHVlfWZ1bmN0aW9uIHdOKCl7cmV0dXJuIGk3Lndpbi52YWx1ZX1mdW5jdGlvbiBkaygpe3JldHVy''@;'; put 'put ''biBpNy5tYWMudmFsdWV9ZnVuY3Rpb24gWEVlKCl7cmV0dXJuIGk3LmxpbnV4LnZhbHVlfV90ZSgpLGJ0ZSgpO2NvbnN0IGNvPXtBTFQ6MTgsQVJST1dfRE9XTjo0MCxBUlJPV19MRUZUOjM3LEFSUk9XX1JJR0hUOjM5LEFSUk9XX1VQOjM4LEFVRElPX0RPV046dWsoKT8xODI6MTc0LEFVRElP''@;'; put 'put ''X01VVEU6dWsoKT8xODE6MTczLEFVRElPX1VQOnVrKCk/MTgzOjE3NSxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4LENPTU1BTkRfTEVGVDo5MSxDT01NQU5EX1JJR0hUOjkzLENPTU1BTkRfRklSRUZPWDoyMjQsQ09OVFJPTDoxNyxERUxFVEU6NDYsRU5EOjM1LEVOVEVSOjEz''@;'; put 'put ''LEVTQ0FQRToyNyxGMToxMTIsRjI6MTEzLEYzOjExNCxGNDoxMTUsRjU6MTE2LEY2OjExNyxGNzoxMTgsRjg6MTE5LEY5OjEyMCxGMTA6MTIxLEYxMToxMjIsRjEyOjEyMyxGMTM6MTI0LEYxNDoxMjUsRjE1OjEyNixGMTY6MTI3LEYxNzoxMjgsRjE4OjEyOSxGMTk6MTMwLEhPTUU6MzYsSU5T''@;'; put 'put ''RVJUOjQ1LE1FRElBX05FWFQ6MTc2LE1FRElBX1BMQVlfUEFVU0U6MTc5LE1FRElBX1BSRVY6MTc3LE1FRElBX1NUT1A6MTc4LE5VTEw6MCxOVU1fTE9DSzoxNDQsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEFVU0U6MTksUEVSSU9EOjE5MCxTQ1JPTExfTE9DSzoxNDUsU0hJRlQ6MTYsU1BB''@;'; put 'put ''Q0U6MzIsVEFCOjksQTo2NSxDOjY3LEQ6NjgsRjo3MCxMOjc2LE86NzksUDo4MCxTOjgzLFY6ODYsWDo4OCxZOjg5LFo6OTB9LEpFZT1bY28uQUxULGNvLkFSUk9XX0RPV04sY28uQVJST1dfTEVGVCxjby5BUlJPV19SSUdIVCxjby5BUlJPV19VUCxjby5BVURJT19ET1dOLGNvLkFVRElPX01V''@;'; put 'put ''VEUsY28uQVVESU9fVVAsY28uQkFDS1NQQUNFLGNvLkNBUFNfTE9DSyxjby5ERUxFVEUsY28uRU5ELGNvLkVOVEVSLGNvLkVTQ0FQRSxjby5GMSxjby5GMixjby5GMyxjby5GNCxjby5GNSxjby5GNixjby5GNyxjby5GOCxjby5GOSxjby5GMTAsY28uRjExLGNvLkYxMixjby5GMTMsY28uRjE0''@;'; put 'put ''LGNvLkYxNSxjby5GMTYsY28uRjE3LGNvLkYxOCxjby5GMTksY28uSE9NRSxjby5JTlNFUlQsY28uTUVESUFfTkVYVCxjby5NRURJQV9QTEFZX1BBVVNFLGNvLk1FRElBX1BSRVYsY28uTUVESUFfU1RPUCxjby5OVUxMLGNvLk5VTV9MT0NLLGNvLlBBR0VfRE9XTixjby5QQUdFX1VQLGNvLlBB''@;'; put 'put ''VVNFLGNvLlNDUk9MTF9MT0NLLGNvLlNISUZULGNvLlRBQl07ZnVuY3Rpb24gU3RlKGMpe3JldHVybiAzMj09PWN8fGM+PTQ4JiZjPD01N3x8Yz49OTYmJmM8PTExMXx8Yz49MTg2JiZjPD0xOTJ8fGM+PTIxOSYmYzw9MjIyfHxjPj0yMjZ8fGM+PTY1JiZjPD05MH1mdW5jdGlvbiBDTihjKXty''@;'; put 'put ''ZXR1cm4gSkVlLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIFFFZShjKXtjb25zdCBsPVtdO3JldHVybiBkaygpP2wucHVzaChjby5DT01NQU5EX0xFRlQsY28uQ09NTUFORF9SSUdIVCxjby5DT01NQU5EX0ZJUkVGT1gpOmwucHVzaChjby5DT05UUk9MKSxsLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIE10''@;'; put 'put ''ZShjKXtyZXR1cm5bY28uQ09OVFJPTCxjby5DT01NQU5EX0xFRlQsY28uQ09NTUFORF9SSUdIVCxjby5DT01NQU5EX0ZJUkVGT1hdLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIG83KGMsbCl7Y29uc3QgYT1sLnNwbGl0KCJ8Iik7bGV0IGQ9ITE7cmV0dXJuIEluKGEsaD0+e2lmKGM9PT1jb1toXSly''@;'; put 'put ''ZXR1cm4gZD0hMCwhMX0pLGR9ZnVuY3Rpb24gdjIoYyl7Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZD0hMSxjLmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBiZyhjKXtyZXR1cm4hMT09PWMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWR9ZnVuY3Rpb24gVXAoYyl7cmV0dXJu''@;'; put 'put ''IDI9PT1jLmJ1dHRvbn1mdW5jdGlvbiBoayhjKXtyZXR1cm4gMD09PWMuYnV0dG9ufWZ1bmN0aW9uIEdhKCl7S2koY29uc29sZSkmJmNvbnNvbGUud2FybiguLi5hcmd1bWVudHMpfWZ1bmN0aW9uIFNOKCl7S2koY29uc29sZSkmJmNvbnNvbGUuZXJyb3IoLi4uYXJndW1lbnRzKX1jb25zdCBz''@;'; put 'put ''Nz1bImFmdGVyQ2VsbE1ldGFSZXNldCIsImFmdGVyQ2hhbmdlIiwiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIiwiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsImFm''@;'; put 'put ''dGVyQ29udGV4dE1lbnVIaWRlIiwiYmVmb3JlQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb250ZXh0TWVudVNob3ciLCJhZnRlckNvcHlMaW1pdCIsImJlZm9yZUNyZWF0ZUNvbCIsImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLCJhZnRlckNyZWF0ZUNvbCIsImJlZm9yZUNyZWF0ZVJvdyIs''@;'; put 'put ''ImFmdGVyQ3JlYXRlUm93IiwiYWZ0ZXJEZXNlbGVjdCIsImFmdGVyRGVzdHJveSIsImFmdGVyRG9jdW1lbnRLZXlEb3duIiwiYWZ0ZXJEcmF3U2VsZWN0aW9uIiwiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLCJhZnRlckdldENlbGxNZXRhIiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJhZnRl''@;'; put 'put ''ckdldFJvd0hlYWRlciIsImFmdGVySW5pdCIsImFmdGVyTG9hZERhdGEiLCJhZnRlclVwZGF0ZURhdGEiLCJhZnRlck1vbWVudHVtU2Nyb2xsIiwiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIiwiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLCJh''@;'; put 'put ''ZnRlck9uQ2VsbE1vdXNlVXAiLCJhZnRlck9uQ2VsbENvbnRleHRNZW51IiwiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLCJhZnRlck9uQ2VsbE1vdXNlT3V0IiwiYWZ0ZXJSZW1vdmVDb2wiLCJhZnRlclJlbW92ZVJvdyIsImJlZm9yZVJlbmRlcmVyIiwiYWZ0ZXJSZW5kZXJlciIsImFmdGVyUm93''@;'; put 'put ''U2VxdWVuY2VDaGFuZ2UiLCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsImFmdGVyU2Nyb2xsVmVydGljYWxseSIsImFmdGVyU2VsZWN0aW9uIiwiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLCJhZnRlclNlbGVjdGlvbkVuZCIsImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIiwiYWZ0ZXJTZXRDZWxs''@;'; put 'put ''TWV0YSIsImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLCJhZnRlclNldERhdGFBdENlbGwiLCJhZnRlclNldERhdGFBdFJvd1Byb3AiLCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLCJhZnRlclVwZGF0ZVNldHRpbmdzIiwiYWZ0ZXJWYWxpZGF0ZSIsImJlZm9yZUxhbmd1YWdlQ2hhbmdlIiwiYWZ0''@;'; put 'put ''ZXJMYW5ndWFnZUNoYW5nZSIsImJlZm9yZUF1dG9maWxsIiwiYWZ0ZXJBdXRvZmlsbCIsImJlZm9yZUNlbGxBbGlnbm1lbnQiLCJiZWZvcmVDaGFuZ2UiLCJiZWZvcmVDaGFuZ2VSZW5kZXIiLCJiZWZvcmVEcmF3Qm9yZGVycyIsImJlZm9yZUdldENlbGxNZXRhIiwiYmVmb3JlUmVtb3ZlQ2Vs''@;'; put 'put ''bE1ldGEiLCJiZWZvcmVJbml0IiwiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIiwiYmVmb3JlTG9hZERhdGEiLCJiZWZvcmVVcGRhdGVEYXRhIiwiYmVmb3JlS2V5RG93biIsImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsImJlZm9yZU9uQ2VsbE1vdXNlVXAiLCJiZWZvcmVPbkNlbGxDb250ZXh0TWVu''@;'; put 'put ''dSIsImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsImJlZm9yZU9uQ2VsbE1vdXNlT3V0IiwiYmVmb3JlUmVtb3ZlQ29sIiwiYmVmb3JlUmVtb3ZlUm93IiwiYmVmb3JlVmlld1JlbmRlciIsImFmdGVyVmlld1JlbmRlciIsImJlZm9yZVJlbmRlciIsImFmdGVyUmVuZGVyIiwiYmVmb3JlU2V0Q2Vs''@;'; put 'put ''bE1ldGEiLCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsImJlZm9yZVNldFJhbmdlU3RhcnQiLCJiZWZvcmVTZXRSYW5nZUVuZCIsImJlZm9yZVRvdWNoU2Nyb2xsIiwiYmVmb3JlVmFsaWRhdGUiLCJiZWZvcmVWYWx1ZVJlbmRlciIsImNvbnN0cnVjdCIsImluaXQiLCJtb2RpZnlDb2xIZWFk''@;'; put 'put ''ZXIiLCJtb2RpZnlDb2xXaWR0aCIsIm1vZGlmeVJvd0hlYWRlciIsIm1vZGlmeVJvd0hlaWdodCIsIm1vZGlmeURhdGEiLCJtb2RpZnlTb3VyY2VEYXRhIiwibW9kaWZ5Um93RGF0YSIsIm1vZGlmeUdldENlbGxDb29yZHMiLCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLCJiZWZvcmVI''@;'; put 'put ''aWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwicGVyc2lzdGVudFN0YXRlUmVzZXQiLCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiYmVmb3JlQ29sdW1uU29ydCIsImFmdGVyQ29sdW1uU29ydCIsIm1vZGlmeUF1dG9maWxsUmFuZ2UiLCJtb2RpZnlDb3B5YWJs''@;'; put 'put ''ZVJhbmdlIiwiYmVmb3JlQ3V0IiwiYWZ0ZXJDdXQiLCJiZWZvcmVDb3B5IiwiYWZ0ZXJDb3B5IiwiYmVmb3JlUGFzdGUiLCJhZnRlclBhc3RlIiwiYmVmb3JlQ29sdW1uRnJlZXplIiwiYWZ0ZXJDb2x1bW5GcmVlemUiLCJiZWZvcmVDb2x1bW5Nb3ZlIiwiYWZ0ZXJDb2x1bW5Nb3ZlIiwiYmVm''@;'; put 'put ''b3JlQ29sdW1uVW5mcmVlemUiLCJhZnRlckNvbHVtblVuZnJlZXplIiwiYmVmb3JlUm93TW92ZSIsImFmdGVyUm93TW92ZSIsImJlZm9yZUNvbHVtblJlc2l6ZSIsImFmdGVyQ29sdW1uUmVzaXplIiwiYmVmb3JlUm93UmVzaXplIiwiYWZ0ZXJSb3dSZXNpemUiLCJhZnRlckdldENvbHVtbkhl''@;'; put 'put ''YWRlclJlbmRlcmVycyIsImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIiwiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIiwiYmVmb3JlRmlsdGVyIiwiYWZ0ZXJGaWx0ZXIiLCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsImFmdGVy''@;'; put 'put ''TmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsImFmdGVyU2hlZXRBZGRlZCIsImFmdGVyU2hlZXRSZW5hbWVkIiwiYWZ0ZXJTaGVldFJlbW92ZWQiLCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsImJlZm9yZVVuZG8iLCJiZWZvcmVVbmRvU3RhY2tD''@;'; put 'put ''aGFuZ2UiLCJhZnRlclVuZG8iLCJhZnRlclVuZG9TdGFja0NoYW5nZSIsImJlZm9yZVJlZG8iLCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLCJhZnRlclJlZG8iLCJhZnRlclJlZG9TdGFja0NoYW5nZSIsIm1vZGlmeVJvd0hlYWRlcldpZHRoIiwibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJtb2Rp''@;'; put 'put ''ZnlUcmFuc2Zvcm1FbmQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsImFmdGVyUGx1Z2luc0luaXRp''@;'; put 'put ''YWxpemVkIiwiYmVmb3JlSGlkZVJvd3MiLCJhZnRlckhpZGVSb3dzIiwiYmVmb3JlVW5oaWRlUm93cyIsImFmdGVyVW5oaWRlUm93cyIsImJlZm9yZUhpZGVDb2x1bW5zIiwiYWZ0ZXJIaWRlQ29sdW1ucyIsImJlZm9yZVVuaGlkZUNvbHVtbnMiLCJhZnRlclVuaGlkZUNvbHVtbnMiLCJiZWZv''@;'; put 'put ''cmVUcmltUm93IiwiYWZ0ZXJUcmltUm93IiwiYmVmb3JlVW50cmltUm93IiwiYWZ0ZXJVbnRyaW1Sb3ciLCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiwiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiwiYmVmb3JlQWRkQ2hpbGQiLCJhZnRlckFkZENoaWxk''@;'; put 'put ''IiwiYmVmb3JlRGV0YWNoQ2hpbGQiLCJhZnRlckRldGFjaENoaWxkIiwiYWZ0ZXJCZWdpbkVkaXRpbmciLCJiZWZvcmVNZXJnZUNlbGxzIiwiYWZ0ZXJNZXJnZUNlbGxzIiwiYmVmb3JlVW5tZXJnZUNlbGxzIiwiYWZ0ZXJVbm1lcmdlQ2VsbHMiLCJhZnRlckxpc3RlbiIsImFmdGVyVW5saXN0''@;'; put 'put ''ZW4iLCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsImFmdGVyQ29sdW1uQ29sbGFwc2UiLCJiZWZvcmVDb2x1bW5FeHBhbmQiLCJhZnRlckNvbHVtbkV4cGFuZCIsIm1vZGlmeUF1dG9Db2x1bW5TaXplU2Vl''@;'; put 'put ''ZCJdLGVrZT1BYWBUaGUgcGx1Z2luIGhvb2sgIltob29rTmFtZV0iIHdhcyByZW1vdmVkIGluIEhhbmRzb250YWJsZSBbcmVtb3ZlZEluVmVyc2lvbl0uXHgyMAogIFBsZWFzZSBjb25zdWx0IHJlbGVhc2Ugbm90ZXMgaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFi''@;'; put 'put ''bGUvcmVsZWFzZXMvdGFnL1tyZW1vdmVkSW5WZXJzaW9uXSB0b1x4MjAKICBsZWFybiBhYm91dCB0aGUgbWlncmF0aW9uIHBhdGguYCxNTj1uZXcgTWFwKFtbIm1vZGlmeVJvdyIsIjguMC4wIl0sWyJtb2RpZnlDb2wiLCI4LjAuMCJdLFsidW5tb2RpZnlSb3ciLCI4LjAuMCJdLFsidW5tb2Rp''@;'; put 'put ''ZnlDb2wiLCI4LjAuMCJdLFsic2tpcExlbmd0aENhY2hlIiwiOC4wLjAiXSxbImhpZGRlbkNvbHVtbiIsIjguMC4wIl0sWyJoaWRkZW5Sb3ciLCI4LjAuMCJdXSkseE49bmV3IE1hcChbXSk7Y2xhc3MgeHRle3N0YXRpYyBnZXRTaW5nbGV0b24oKXtyZXR1cm4gZnVuY3Rpb24gbmtlKCl7cmV0''@;'; put 'put ''dXJuIHRrZX0oKX1jb25zdHJ1Y3Rvcigpe3RoaXMuZ2xvYmFsQnVja2V0PXRoaXMuY3JlYXRlRW1wdHlCdWNrZXQoKX1jcmVhdGVFbXB0eUJ1Y2tldCgpe2NvbnN0IGw9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gSW4oczcsYT0+bFthXT1bXSksbH1nZXRCdWNrZXQoKXtsZXQgbD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gbD8obC5wbHVnaW5Ib29rQnVja2V0fHwobC5wbHVnaW5Ib29rQnVja2V0PXRoaXMuY3JlYXRlRW1wdHlCdWNrZXQoKSksbC5wbHVnaW5Ib29rQnVja2V0KTp0aGlzLmdsb2JhbEJ1''@;'; put 'put ''Y2tldH1hZGQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZihBcnJheS5pc0FycmF5KGEpKUluKGEsaD0+dGhpcy5hZGQobCxoLGQpKTtlbHNle01OLmhhcyhsKSYmR2EoY04oZWtlLHtob29rTmFtZTpsLHJl''@;'; put 'put ''bW92ZWRJblZlcnNpb246TU4uZ2V0KGwpfSkpLHhOLmhhcyhsKSYmR2EoeE4uZ2V0KGwpKTtjb25zdCBoPXRoaXMuZ2V0QnVja2V0KGQpO2lmKHR5cGVvZiBoW2xdPiJ1IiYmKHRoaXMucmVnaXN0ZXIobCksaFtsXT1bXSksYS5za2lwPSExLC0xPT09aFtsXS5pbmRleE9mKGEpKXtsZXQgZj0h''@;'; put 'put ''MTthLmluaXRpYWxIb29rJiZJbihoW2xdLChfLFQpPT57aWYoXy5pbml0aWFsSG9vaylyZXR1cm4gaFtsXVtUXT1hLGY9ITAsITF9KSxmfHxoW2xdLnB1c2goYSl9fXJldHVybiB0aGlzfW9uY2UobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9h''@;'; put 'put ''cmd1bWVudHNbMl06bnVsbDtBcnJheS5pc0FycmF5KGEpP0luKGEsaD0+dGhpcy5vbmNlKGwsaCxkKSk6KGEucnVuT25jZT0hMCx0aGlzLmFkZChsLGEsZCkpfXJlbW92ZShsLGEpe2NvbnN0IGg9dGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''Ml0/YXJndW1lbnRzWzJdOm51bGwpO3JldHVybiB0eXBlb2YgaFtsXTwidSImJmhbbF0uaW5kZXhPZihhKT49MCYmKGEuc2tpcD0hMCwhMCl9aGFzKGwpe2NvbnN0IGQ9dGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd''@;'; put 'put ''Om51bGwpO3JldHVybiEodm9pZCAwPT09ZFtsXXx8IWRbbF0ubGVuZ3RoKX1ydW4obCxhLGQsaCxmLF8sVCxXKXt7Y29uc3QgaWU9dGhpcy5nbG9iYWxCdWNrZXRbYV0sZ2U9aWU/aWUubGVuZ3RoOjA7bGV0IHdlPTA7aWYoZ2UpZm9yKDt3ZTxnZTspe2lmKCFpZVt3ZV18fGllW3dlXS5za2lw''@;'; put 'put ''KXt3ZSs9MTtjb250aW51ZX1jb25zdCBFZT1zayhpZVt3ZV0sbCxkLGgsZixfLFQsVyk7dm9pZCAwIT09RWUmJihkPUVlKSxpZVt3ZV0mJmllW3dlXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLGllW3dlXSksd2UrPTF9fXtjb25zdCBpZT10aGlzLmdldEJ1Y2tldChsKVthXSxnZT1pZT9pZS5s''@;'; put 'put ''ZW5ndGg6MDtsZXQgd2U9MDtpZihnZSlmb3IoO3dlPGdlOyl7aWYoIWllW3dlXXx8aWVbd2VdLnNraXApe3dlKz0xO2NvbnRpbnVlfWNvbnN0IEVlPXNrKGllW3dlXSxsLGQsaCxmLF8sVCxXKTt2b2lkIDAhPT1FZSYmKGQ9RWUpLGllW3dlXSYmaWVbd2VdLnJ1bk9uY2UmJnRoaXMucmVtb3Zl''@;'; put 'put ''KGEsaWVbd2VdLGwpLHdlKz0xfX1yZXR1cm4gZH1kZXN0cm95KCl7ZHModGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpLChhLGQsaCk9PmhbZF0ubGVuZ3RoPTApfXJlZ2lzdGVyKGwpe3RoaXMuaXNSZWdp''@;'; put 'put ''c3RlcmVkKGwpfHxzNy5wdXNoKGwpfWRlcmVnaXN0ZXIobCl7dGhpcy5pc1JlZ2lzdGVyZWQobCkmJnM3LnNwbGljZShzNy5pbmRleE9mKGwpLDEpfWlzRGVwcmVjYXRlZChsKXtyZXR1cm4geE4uaGFzKGwpfHxNTi5oYXMobCl9aXNSZWdpc3RlcmVkKGwpe3JldHVybiBzNy5pbmRleE9mKGwp''@;'; put 'put ''Pj0wfWdldFJlZ2lzdGVyZWQoKXtyZXR1cm4gczd9fWNvbnN0IHRrZT1uZXcgeHRlLHNvPXh0ZSxFTj1uZXcgTWFwO2Z1bmN0aW9uIHBkKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjb21tb24iO0VOLmhhcyhjKXx8RU4u''@;'; put 'put ''c2V0KGMsbmV3IE1hcCk7Y29uc3QgbD1FTi5nZXQoYyk7cmV0dXJue3JlZ2lzdGVyOmZ1bmN0aW9uIGEoVCxXKXtsLnNldChULFcpfSxnZXRJdGVtOmZ1bmN0aW9uIGQoVCl7cmV0dXJuIGwuZ2V0KFQpfSxoYXNJdGVtOmZ1bmN0aW9uIGgoVCl7cmV0dXJuIGwuaGFzKFQpfSxnZXROYW1lczpm''@;'; put 'put ''dW5jdGlvbiBmKCl7cmV0dXJuWy4uLmwua2V5cygpXX0sZ2V0VmFsdWVzOmZ1bmN0aW9uIF8oKXtyZXR1cm5bLi4ubC52YWx1ZXMoKV19fX1jb25zdCBrTj1uZXcgV2Vha01hcCx7cmVnaXN0ZXI6cmtlLGdldEl0ZW06RXRlLGhhc0l0ZW06a3RlLGdldE5hbWVzOmlrZX09cGQoImVkaXRvcnMi''@;'; put 'put ''KTtmdW5jdGlvbiBva2UoYyl7Y29uc3QgbD17fSxhPWM7dGhpcy5nZXRDb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBjfSx0aGlzLmdldEluc3RhbmNlPWZ1bmN0aW9uKGQpe3JldHVybiBkLmd1aWQgaW4gbHx8KGxbZC5ndWlkXT1uZXcgYShkKSksbFtkLmd1aWRdfSxzby5nZXRTaW5n''@;'; put 'put ''bGV0b24oKS5hZGQoImFmdGVyRGVzdHJveSIsZnVuY3Rpb24oKXtsW3RoaXMuZ3VpZF09bnVsbH0pfWZ1bmN0aW9uIEF0ZShjLGwpe2xldCBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKWtOLmdldChjKXx8UjAobnVsbCxjKSxhPWtOLmdldChjKTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''Yyl0aHJvdyBFcnJvcignT25seSBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgY2FuIGJlIHBhc3NlZCBhcyAiZWRpdG9yIiBwYXJhbWV0ZXInKTthPUV0ZShjKX1pZighYSl0aHJvdyBFcnJvcihgTm8gZWRpdG9yIHJlZ2lzdGVyZWQgdW5kZXIgbmFtZSAiJHtjfSJgKTtyZXR1cm4gYS5nZXRJbnN0''@;'; put 'put ''YW5jZShsKX1mdW5jdGlvbiBmayhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZigha3RlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIGVkaXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBFdGUoYykuZ2V0Q29uc3RydWN0b3IoKX1mdW5jdGlv''@;'; put 'put ''biBSMChjLGwpe2MmJiJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuRURJVE9SX1RZUEUpO2NvbnN0IGE9bmV3IG9rZShsKTsic3RyaW5nIj09dHlwZW9mIGMmJnJrZShjLGEpLGtOLnNldChsLGEpfWxldCBwaz0wO2NvbnN0IGxsPWNsYXNzIHNrZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY29u''@;'; put 'put ''dGV4dD0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpfHx0aGlzLHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycz1bXSl9YWRkRXZlbnRMaXN0ZW5lcihsLGEsZCl7bGV0IGg9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtmdW5jdGlvbiBmKF8pe2QuY2FsbCh0aGlzLGZ1bmN0aW9uIGFrZShjKXtjb25zdCBsPWMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO3JldHVybiBjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlv''@;'; put 'put ''bj1mdW5jdGlvbigpe2wuYXBwbHkodGhpcyksdjIodGhpcyl9LGN9KF8pKX1yZXR1cm4gdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnB1c2goe2VsZW1lbnQ6bCxldmVudDphLGNhbGxiYWNrOmQsY2FsbGJhY2tQcm94eTpmLG9wdGlvbnM6aCxldmVudE1hbmFnZXI6dGhpc30pLGwuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihhLGYsaCkscGsrPTEsKCk9Pnt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpfX1yZW1vdmVFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgXyxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sZj10aGlzLmNv''@;'; put 'put ''bnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7ZjspaWYoZi09MSxfPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tmXSxfLmV2ZW50PT09YSYmXy5lbGVtZW50PT09bCl7aWYoZCYmZCE9PV8uY2FsbGJhY2t8fGgmJl8uZXZlbnRNYW5hZ2VyIT09dGhpcyljb250aW51ZTt0aGlz''@;'; put 'put ''LmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGYsMSksXy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXy5ldmVudCxfLmNhbGxiYWNrUHJveHksXy5vcHRpb25zKSxway09MX19Y2xlYXJFdmVudHMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1swXSYmYXJndW1lbnRzWzBdO2lmKCF0aGlzLmNvbnRleHQpcmV0dXJuO2xldCBhPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7Zm9yKDthOyl7YS09MTtjb25zdCBkPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1thXTtsJiZkLmV2ZW50TWFuYWdlciE9PXRoaXN8fCh0''@;'; put 'put ''aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGEsMSksZC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZC5ldmVudCxkLmNhbGxiYWNrUHJveHksZC5vcHRpb25zKSxway09MSl9fWNsZWFyKCl7dGhpcy5jbGVhckV2ZW50cygpfWRlc3Ryb3koKXt0aGlzLmNsZWFyRXZlbnRz''@;'; put 'put ''KCksdGhpcy5jb250ZXh0PW51bGx9ZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCl7dGhpcy5jbGVhckV2ZW50cyghMCksdGhpcy5jb250ZXh0PW51bGx9ZmlyZUV2ZW50KGwsYSl7bGV0IGQ9bC5kb2N1bWVudCxoPWw7ZHx8KGQ9bC5vd25lckRvY3VtZW50P2wub3duZXJEb2N1bWVudDpsLGg9''@;'; put 'put ''ZC5kZWZhdWx0Vmlldyk7Y29uc3QgZj17YnViYmxlczohMCxjYW5jZWxhYmxlOiJtb3VzZW1vdmUiIT09YSx2aWV3OmgsZGV0YWlsOjAsc2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjEsY2xpZW50WToxLGN0cmxLZXk6ITEsYWx0S2V5OiExLHNoaWZ0S2V5OiExLG1ldGFLZXk6ITEsYnV0''@;'; put 'put ''dG9uOjAscmVsYXRlZFRhcmdldDp2b2lkIDB9O2xldCBfO2QuY3JlYXRlRXZlbnQ/KF89ZC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSxfLmluaXRNb3VzZUV2ZW50KGEsZi5idWJibGVzLGYuY2FuY2VsYWJsZSxmLnZpZXcsZi5kZXRhaWwsZi5zY3JlZW5YLGYuc2NyZWVuWSxmLmNsaWVu''@;'; put 'put ''dFgsZi5jbGllbnRZLGYuY3RybEtleSxmLmFsdEtleSxmLnNoaWZ0S2V5LGYubWV0YUtleSxmLmJ1dHRvbixmLnJlbGF0ZWRUYXJnZXR8fGQuYm9keS5wYXJlbnROb2RlKSk6Xz1kLmNyZWF0ZUV2ZW50T2JqZWN0KCksbC5kaXNwYXRjaEV2ZW50P2wuZGlzcGF0Y2hFdmVudChfKTpsLmZpcmVF''@;'; put 'put ''dmVudChgb24ke2F9YCxfKX19LGdrPSJlZGl0b3JNYW5hZ2VyLm5hdmlnYXRpb24iLGx5PSJlZGl0b3JNYW5hZ2VyLmhhbmRsaW5nRWRpdG9yIjtjbGFzcyBBTntjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5pbnN0YW5jZT1sLHRoaXMudGFibGVNZXRhPWEsdGhpcy5zZWxlY3Rpb249ZCx0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlcj1uZXcgbGwobCksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5sb2NrPSExLHRoaXMuYWN0aXZlRWRpdG9yPXZvaWQgMCx0aGlzLmNlbGxQcm9wZXJ0aWVzPXZvaWQgMCx0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmFkZENvbnRleHQoImVkaXRvciIpLHRo''@;'; put 'put ''aXMucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmluc3RhbmNlLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixmPT50aGlzLm9uQWZ0ZXJEb2N1bWVudEtleURvd24oZikpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5pbnN0YW5jZS5yb290RG9jdW1lbnQu''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50LCJjb21wb3NpdGlvbnN0YXJ0IixmPT57IXRoaXMuZGVzdHJveWVkJiZ0aGlzLmluc3RhbmNlLmlzTGlzdGVuaW5nKCkmJnRoaXMub3BlbkVkaXRvcigiIixmKX0pLHRoaXMuaW5zdGFuY2Uudmlldy5fd3QudXBkYXRlKCJvbkNlbGxEYmxDbGljayIsKGYsXyxUKT0+''@;'; put 'put ''dGhpcy5vbkNlbGxEYmxDbGljayhmLF8sVCkpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgbD10aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLGE9bC5nZXRDb250ZXh0KCJncmlkIiksZD1sLmdldENvbnRleHQoImVkaXRvciIpLGg9e2dyb3VwOmx5fTtkLmFkZFNob3J0Y3V0''@;'; put 'put ''cyhbe2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIl0sWyJFbnRlciIsIkNvbnRyb2wvTWV0YSIsIlNoaWZ0Il1dLGNhbGxiYWNrOihmLF8pPT57dGhpcy5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKGwuaXNDdHJsUHJlc3NlZCgpKSx0''@;'; put 'put ''aGlzLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKF8uaW5jbHVkZXMoInNoaWZ0IikpfX0se2tleXM6W1siRXNjYXBlIl0sWyJFc2NhcGUiLCJDb250cm9sL01ldGEiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUobC5pc0N0cmxQcmVzc2Vk''@;'; put 'put ''KCkpLHRoaXMuYWN0aXZlRWRpdG9yLmZvY3VzKCl9fV0saCksYS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkYyIl1dLGNhbGxiYWNrOmY9Pnt0aGlzLm9wZW5FZGl0b3IobnVsbCxmLCEwKX19LHtrZXlzOltbIkJhY2tzcGFjZSJdLFsiRGVsZXRlIl1dLGNhbGxiYWNrOigpPT57dGhpcy5pbnN0''@;'; put 'put ''YW5jZS5lbXB0eVNlbGVjdGVkQ2VsbHMoKSx0aGlzLnByZXBhcmVFZGl0b3IoKX19LHtrZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihmLF8pPT57dGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZz90aGlzLmNlbGxQcm9wZXJ0''@;'; put 'put ''aWVzLnJlYWRPbmx5P3RoaXMubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIoKTp0aGlzLm9wZW5FZGl0b3IobnVsbCxmLCEwKTp0aGlzLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKF8uaW5jbHVkZXMoInNoaWZ0IikpLHYyKGYpfX1dLHsuLi5oLHJ1bk9ubHlJZjooKT0+S2kodGhpcy5pbnN0YW5j''@;'; put 'put ''ZS5nZXRTZWxlY3RlZCgpKX0pfWxvY2tFZGl0b3IoKXt0aGlzLmxvY2s9ITB9dW5sb2NrRWRpdG9yKCl7dGhpcy5sb2NrPSExfWRlc3Ryb3lFZGl0b3IobCl7dGhpcy5sb2NrfHx0aGlzLmNsb3NlRWRpdG9yKGwpfWdldEFjdGl2ZUVkaXRvcigpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvcn1w''@;'; put 'put ''cmVwYXJlRWRpdG9yKCl7aWYodGhpcy5sb2NrKXJldHVybjtpZih0aGlzLmFjdGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZUVkaXRvcighMSwhMSxXPT57VyYmdGhpcy5wcmVwYXJlRWRpdG9yKCl9KTtjb25zdHtyb3c6bCxj''@;'; put 'put ''b2w6YX09dGhpcy5pbnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodCxkPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGwsYSk7bGV0IGg9bCxmPWE7QXJyYXkuaXNBcnJheShkKSYmKFtoLGZdPWQpLHRoaXMuY2VsbFByb3BlcnRpZXM9''@;'; put 'put ''dGhpcy5pbnN0YW5jZS5nZXRDZWxsTWV0YShoLGYpO2NvbnN0e2FjdGl2ZUVsZW1lbnQ6X309dGhpcy5pbnN0YW5jZS5yb290RG9jdW1lbnQ7aWYoXyYmb2soXykmJl8uYmx1cigpLCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2Nv''@;'; put 'put ''bnN0IFQ9dGhpcy5pbnN0YW5jZS5nZXRDZWxsKGwsYSwhMCk7aWYoVCl7Y29uc3QgVz10aGlzLmluc3RhbmNlLmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcyksaWU9dGhpcy5pbnN0YW5jZS5jb2xUb1Byb3AoZiksZ2U9dGhpcy5pbnN0YW5jZS5nZXRTb3VyY2VEYXRhQXRDZWxs''@;'; put 'put ''KHRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbFJvdyhoKSxmKTt0aGlzLmFjdGl2ZUVkaXRvcj1BdGUoVyx0aGlzLmluc3RhbmNlKSx0aGlzLmFjdGl2ZUVkaXRvci5wcmVwYXJlKGwsYSxpZSxULGdlLHRoaXMuY2VsbFByb3BlcnRpZXMpfX1pc0VkaXRvck9wZW5lZCgpe3JldHVybiB0aGlzLmFj''@;'; put 'put ''dGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNPcGVuZWQoKX1vcGVuRWRpdG9yKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZih0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpe2lmKCF0aGlzLmFjdGl2ZUVkaXRv''@;'; put 'put ''cil7Y29uc3R7cm93OmgsY29sOmZ9PXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQsXz10aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksVD10aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7dGhpcy5pbnN0YW5jZS52aWV3LnNjcm9sbFZpZXdwb3J0KHRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoXyxUKSksdGhpcy5pbnN0YW5jZS52aWV3LnJlbmRlcigpLHRoaXMucHJlcGFyZUVkaXRvcigpfXRoaXMuYWN0aXZl''@;'; put 'put ''RWRpdG9yJiYoZCYmdGhpcy5hY3RpdmVFZGl0b3IuZW5hYmxlRnVsbEVkaXRNb2RlKCksdGhpcy5hY3RpdmVFZGl0b3IuYmVnaW5FZGl0aW5nKGwsYSkpfWVsc2UgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpfWNsb3NlRWRpdG9yKGwsYSxkKXt0aGlzLmFjdGl2ZUVkaXRvcj90aGlzLmFjdGl2''@;'; put 'put ''ZUVkaXRvci5maW5pc2hFZGl0aW5nKGwsYSxkKTpkJiZkKCExKX1jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKGwpe3RoaXMuY2xvc2VFZGl0b3IoITEsbCl9Y2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShsKXt0aGlzLmNsb3NlRWRpdG9yKCEwLGwpfWNsZWFyQWN0aXZlRWRp''@;'; put 'put ''dG9yKCl7dGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwfWlzQ2VsbEVkaXRhYmxlKCl7Y29uc3QgbD10aGlzLmluc3RhbmNlLmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcykse3JvdzphLGNvbDpkfT10aGlzLmluc3RhbmNlLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0''@;'; put 'put ''LHtyb3dJbmRleE1hcHBlcjpoLGNvbHVtbkluZGV4TWFwcGVyOmZ9PXRoaXMuaW5zdGFuY2UsXz1oLmlzSGlkZGVuKHRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbFJvdyhhKSl8fGYuaXNIaWRkZW4odGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsQ29sdW1uKGQpKTtyZXR1cm4hKHRoaXMuY2VsbFBy''@;'; put 'put ''b3BlcnRpZXMucmVhZE9ubHl8fCFsfHxfKX1tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKXtjb25zdCBhPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzP3RoaXMudGFibGVNZXRhLmVudGVyTW92ZXMoZXZlbnQpOnRoaXMudGFibGVNZXRhLmVudGVyTW92ZXM7''@;'; put 'put ''bD90aGlzLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtYS5yb3csLWEuY29sKTp0aGlzLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydChhLnJvdyxhLmNvbCwhMCl9b25BZnRlckRvY3VtZW50S2V5RG93bihsKXtpZighdGhpcy5pbnN0YW5jZS5pc0xpc3RlbmluZygpKXJldHVybjtjb25zdHtr''@;'; put 'put ''ZXlDb2RlOmF9PWw7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgZD0obC5jdHJsS2V5fHxsLm1ldGFLZXkpJiYhbC5hbHRLZXk7dGhpcy5hY3RpdmVFZGl0b3ImJighdGhpcy5hY3RpdmVFZGl0b3J8fHRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKXx8''@;'; put 'put ''Q04oYSl8fE10ZShhKXx8ZHx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHwodGhpcy5pbnN0YW5jZS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmluc3RhbmNlLnNlbGVj''@;'; put 'put ''dGlvbi50cmFuc2Zvcm1TdGFydCgtMSwwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDEsMCl9fSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmluc3RhbmNlLnNlbGVj''@;'; put 'put ''dGlvbi50cmFuc2Zvcm1TdGFydCgwLC0xKnRoaXMuaW5zdGFuY2UuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsdGhpcy5pbnN0YW5jZS5nZXREaXJlY3Rp''@;'; put 'put ''b25GYWN0b3IoKSl9fV0se3J1bk9ubHlJZjooKT0+S2kodGhpcy5pbnN0YW5jZS5nZXRTZWxlY3RlZCgpKSxncm91cDpna30pLHRoaXMub3BlbkVkaXRvcigiIixsKSl9b25DZWxsRGJsQ2xpY2sobCxhLGQpeyJURCI9PT1kLm5vZGVOYW1lJiZ0aGlzLm9wZW5FZGl0b3IobnVsbCxsLCEwKX1k''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1jb25zdCBUdGU9bmV3IFdlYWtNYXA7QU4uZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oYyxsLGEpe2xldCBkPVR0ZS5nZXQoYyk7cmV0dXJuIGR8fChkPW5ldyBBTihjLGwsYSksVHRlLnNldChjLGQp''@;'; put 'put ''KSxkfTtjb25zdCBja2U9QU4sRHRlPXsiJm5ic3A7IjoiICIsIiZhbXA7IjoiJiIsIiZsdDsiOiI8IiwiJmd0OyI6Ij4ifSx1a2U9bmV3IFJlZ0V4cChPYmplY3Qua2V5cyhEdGUpLm1hcChjPT5gKCR7Y30pYCkuam9pbigifCIpLCJnaSIpO2Z1bmN0aW9uIFROKGMpe2NvbnN0IGw9Yy5oYXND''@;'; put 'put ''b2xIZWFkZXJzKCksYT1jLmhhc1Jvd0hlYWRlcnMoKSxkPVtsPy0xOjAsYT8tMTowLGMuY291bnRSb3dzKCktMSxjLmNvdW50Q29scygpLTFdLGg9Yy5nZXREYXRhKC4uLmQpLGY9aC5sZW5ndGgsXz1mPjA/aFswXS5sZW5ndGg6MCxUPVsiPHRhYmxlPiIsIjwvdGFibGU+Il0sVz1sP1siPHRo''@;'; put 'put ''ZWFkPiIsIjwvdGhlYWQ+Il06W10saWU9WyI8dGJvZHk+IiwiPC90Ym9keT4iXSxnZT1hPzE6MCx3ZT1sPzE6MDtmb3IobGV0IEVlPTA7RWU8ZjtFZSs9MSl7Y29uc3QgWmU9bCYmMD09PUVlLG90PVtdO2ZvcihsZXQgeXQ9MDt5dDxfO3l0Kz0xKXtjb25zdCBrdD0hWmUmJmEmJjA9PT15dDts''@;'; put 'put ''ZXQgU3Q9IiI7aWYoWmUpU3Q9YDx0aD4ke2MuZ2V0Q29sSGVhZGVyKHl0LWdlKX08L3RoPmA7ZWxzZSBpZihrdClTdD1gPHRoPiR7Yy5nZXRSb3dIZWFkZXIoRWUtd2UpfTwvdGg+YDtlbHNle2NvbnN0IFF0PWhbRWVdW3l0XSx7aGlkZGVuOm5uLHJvd3NwYW46bW4sY29sc3BhbjpFbn09Yy5n''@;'; put 'put ''ZXRDZWxsTWV0YShFZS13ZSx5dC1nZSk7aWYoIW5uKXtjb25zdCBscj1bXTtpZihtbiYmbHIucHVzaChgcm93c3Bhbj0iJHttbn0iYCksRW4mJmxyLnB1c2goYGNvbHNwYW49IiR7RW59ImApLHBjKFF0KSlTdD1gPHRkICR7bHIuam9pbigiICIpfT48L3RkPmA7ZWxzZXtjb25zdCBWcj1RdC50''@;'; put 'put ''b1N0cmluZygpLnJlcGxhY2UoIjwiLCImbHQ7IikucmVwbGFjZSgiPiIsIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjAvZ2ksIiZuYnNwOyIpLnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7U3Q9YDx0ZCAk''@;'; put 'put ''e2xyLmpvaW4oIiAiKX0+JHtWcn08L3RkPmB9fX1vdC5wdXNoKFN0KX1jb25zdCBldD1bIjx0cj4iLC4uLm90LCI8L3RyPiJdLmpvaW4oIiIpO1plP1cuc3BsaWNlKDEsMCxldCk6aWUuc3BsaWNlKC0xLDAsZXQpfXJldHVybiBULnNwbGljZSgxLDAsVy5qb2luKCIiKSxpZS5qb2luKCIiKSks''@;'; put 'put ''VC5qb2luKCIiKX1mdW5jdGlvbiBETihjKXtjb25zdCBsPWMubGVuZ3RoLGE9WyI8dGFibGU+Il07Zm9yKGxldCBkPTA7ZDxsO2QrPTEpe2NvbnN0IGg9Y1tkXSxmPWgubGVuZ3RoLF89W107MD09PWQmJmEucHVzaCgiPHRib2R5PiIpO2ZvcihsZXQgVD0wO1Q8ZjtUKz0xKXtjb25zdCBXPWhb''@;'; put 'put ''VF0saWU9cGMoVyk/IiI6Vy50b1N0cmluZygpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMHsyLH0vZ2ksZ2U9PmA8c3BhbiBzdHlsZT0i''@;'; put 'put ''bXNvLXNwYWNlcnVuOiB5ZXMiPiR7IiZuYnNwOyIucmVwZWF0KGdlLmxlbmd0aC0xKX0gPC9zcGFuPmApLnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7Xy5wdXNoKGA8dGQ+JHtpZX08L3RkPmApfWEucHVzaCgiPHRyPiIsLi4uXywiPC90cj4iKSxkKzE9PT1sJiZhLnB1c2goIjwvdGJvZHk+Iil9''@;'; put 'put ''cmV0dXJuIGEucHVzaCgiPC90YWJsZT4iKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIEl0ZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ZG9jdW1lbnQ7Y29uc3QgYT17fSxkPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9''@;'; put 'put ''bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmFwcGVuZENoaWxkKGgpO2xldCBmPWM7aWYoInN0cmluZyI9PXR5cGVvZiBmKXtjb25zdCBRdD1mLnJlcGxhY2UoLzx0ZFxiW14+XSo/PihbXHNcU10qPyk8XC9ccyp0ZD4vZyxubj0+e2NvbnN0IG1uPW5uLm1hdGNoKC88dGRcYltePl0qPz4vZylb''@;'; put 'put ''MF07cmV0dXJuYCR7bW59JHtubi5zdWJzdHJpbmcobW4ubGVuZ3RoLG5uLmxhc3RJbmRleE9mKCI8IikpLnJlcGxhY2UoLyg8KD8hYnIpKFtePl0rKT4pL2dpLCIiKX08L3RkPmB9KTtoLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYCR7UXR9YCksZj1oLnF1ZXJ5U2VsZWN0b3Io''@;'; put 'put ''InRhYmxlIil9aWYoIWZ8fCFmdW5jdGlvbiBka2UoYyl7cmV0dXJuIlRBQkxFIj09PShjJiZjLm5vZGVOYW1lfHwiIil9KGYpKXJldHVybjtjb25zdCBfPWgucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lJD0iZW5lcmF0b3IiXScpLFQ9bnVsbCE9PWYucXVlcnlTZWxlY3RvcigidGJvZHkgdGgi''@;'; put 'put ''KSxXPWYucXVlcnlTZWxlY3RvcigidHIiKSxpZT1XP0FycmF5LmZyb20oVy5jZWxscykucmVkdWNlKChRdCxubik9PlF0K25uLmNvbFNwYW4sMCktKFQ/MTowKTowLGdlPWYudEZvb3QmJkFycmF5LmZyb20oZi50Rm9vdC5yb3dzKXx8W10sd2U9W107bGV0IEVlPSExLFplPTAsb3Q9MDtpZihm''@;'; put 'put ''LnRIZWFkKXtjb25zdCBRdD1BcnJheS5mcm9tKGYudEhlYWQucm93cykuZmlsdGVyKG5uPT57Y29uc3QgbW49bnVsbCE9PW5uLnF1ZXJ5U2VsZWN0b3IoInRkIik7cmV0dXJuIG1uJiZ3ZS5wdXNoKG5uKSwhbW59KTtaZT1RdC5sZW5ndGgsRWU9WmU+MCxaZT4xP2EubmVzdGVkSGVhZGVycz1B''@;'; put 'put ''cnJheS5mcm9tKFF0KS5yZWR1Y2UoKG5uLG1uKT0+e2NvbnN0IEVuPUFycmF5LmZyb20obW4uY2VsbHMpLnJlZHVjZSgobHIsVnIsX2kpPT57aWYoVCYmMD09PV9pKXJldHVybiBscjtjb25zdHtjb2xTcGFuOnVpLGlubmVySFRNTDpncn09VnI7cmV0dXJuIGxyLnB1c2godWk+MT97bGFiZWw6''@;'; put 'put ''Z3IsY29sc3Bhbjp1aX06Z3IpLGxyfSxbXSk7cmV0dXJuIG5uLnB1c2goRW4pLG5ufSxbXSk6RWUmJihhLmNvbEhlYWRlcnM9QXJyYXkuZnJvbShRdFswXS5jaGlsZHJlbikucmVkdWNlKChubixtbixFbik9PihUJiYwPT09RW58fG5uLnB1c2gobW4uaW5uZXJIVE1MKSxubiksW10pKX13ZS5s''@;'; put 'put ''ZW5ndGgmJihhLmZpeGVkUm93c1RvcD13ZS5sZW5ndGgpLGdlLmxlbmd0aCYmKGEuZml4ZWRSb3dzQm90dG9tPWdlLmxlbmd0aCk7Y29uc3QgZXQ9Wy4uLndlLC4uLkFycmF5LmZyb20oZi50Qm9kaWVzKS5yZWR1Y2UoKFF0LG5uKT0+KFF0LnB1c2goLi4uQXJyYXkuZnJvbShubi5yb3dzKSks''@;'; put 'put ''UXQpLFtdKSwuLi5nZV07b3Q9ZXQubGVuZ3RoO2NvbnN0IHl0PW5ldyBBcnJheShvdCk7Zm9yKGxldCBRdD0wO1F0PG90O1F0KyspeXRbUXRdPW5ldyBBcnJheShpZSk7Y29uc3Qga3Q9W10sU3Q9W107Zm9yKGxldCBRdD0wO1F0PG90O1F0Kyspe2NvbnN0IG1uPUFycmF5LmZyb20oZXRbUXRd''@;'; put 'put ''LmNlbGxzKSxFbj1tbi5sZW5ndGg7Zm9yKGxldCBscj0wO2xyPEVuO2xyKyspe2NvbnN0IFZyPW1uW2xyXSx7bm9kZU5hbWU6X2ksaW5uZXJIVE1MOnVpLHJvd1NwYW46Z3IsY29sU3BhbjpFaX09VnIsVXI9eXRbUXRdLmZpbmRJbmRleChIbj0+dm9pZCAwPT09SG4pO2lmKCJURCI9PT1faSl7''@;'; put 'put ''aWYoZ3I+MXx8RWk+MSl7Zm9yKGxldCBNcj1RdDtNcjxRdCtncjtNcisrKWlmKE1yPG90KWZvcihsZXQgX3I9VXI7X3I8VXIrRWk7X3IrKyl5dFtNcl1bX3JdPW51bGw7Y29uc3QgUHI9VnIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO1ByJiZQci5pbmNsdWRlcygibXNvLWlnbm9yZTpjb2xzcGFu''@;'; put 'put ''Iil8fGt0LnB1c2goe2NvbDpVcixyb3c6UXQscm93c3Bhbjpncixjb2xzcGFuOkVpfSl9bGV0IEhuPSIiO0huPV8mJi9leGNlbC9naS50ZXN0KF8uY29udGVudCk/dWkucmVwbGFjZSgvW1xyXG5dW1x4MjBdezAsMn0vZywiICIpLnJlcGxhY2UoLzxicihccyp8XC8pPltcclxuXT9bXHgyMF17''@;'; put 'put ''MCwzfS9naW0sIlxyXG4iKTp1aS5yZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/L2dpbSwiXHJcbiIpLHl0W1F0XVtVcl09SG4ucmVwbGFjZSh1a2UsUHI9PkR0ZVtQcl0pfWVsc2UgU3QucHVzaCh1aSl9fXJldHVybiBrdC5sZW5ndGgmJihhLm1lcmdlQ2VsbHM9a3QpLFN0Lmxlbmd0aCYm''@;'; put 'put ''KGEucm93SGVhZGVycz1TdCkseXQubGVuZ3RoJiYoYS5kYXRhPXl0KSxhfWZ1bmN0aW9uIEd1KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtjb25zdCBhPXR5cGVvZiBjO2lmKCJudW1iZXIiPT09YSlyZXR1cm4haXNO''@;'; put 'put ''YU4oYykmJmlzRmluaXRlKGMpO2lmKCJzdHJpbmciPT09YSl7aWYoMD09PWMubGVuZ3RoKXJldHVybiExO2lmKDE9PT1jLmxlbmd0aClyZXR1cm4vXGQvLnRlc3QoYyk7Y29uc3QgZD1BcnJheS5mcm9tKG5ldyBTZXQoWyIuIiwuLi5sXSkpLm1hcChoPT5gXFwke2h9YCkuam9pbigifCIpO3Jl''@;'; put 'put ''dHVybiBuZXcgUmVnRXhwKGBeWystXT9cXHMqKCgoJHtkfSk/XFxkKygoJHtkfSlcXGQrKT8oZVsrLV0/XFxkKyk/KXwoMHhbYS1mXFxkXSspKSRgLCJpIikudGVzdChjLnRyaW0oKSl9cmV0dXJuIm9iamVjdCI9PT1hJiYhKCFjfHwibnVtYmVyIiE9dHlwZW9mIGMudmFsdWVPZigpfHxjIGlu''@;'; put 'put ''c3RhbmNlb2YgRGF0ZSl9ZnVuY3Rpb24gTHRlKGMpe3JldHVybiBHdShjLFsiLCJdKX1mdW5jdGlvbiB2byhjLGwsYSl7bGV0IGQ9LTE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBsPyhhPWwsbD1jKTpkPWMtMTsrK2Q8PWwmJiExIT09YShkKTspO31mdW5jdGlvbiBtayhjLGwsYSl7bGV0IGQ9''@;'; put 'put ''YysxO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgbCYmKGE9bCxsPTApOy0tZD49bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIElOKGMsbCl7cmV0dXJuIGw9cGFyc2VJbnQobC50b1N0cmluZygpLnJlcGxhY2UoIiUiLCIiKSwxMCksbD1pc05hTihsKT8wOmwscGFyc2VJbnQoYypsLzEwMCwxMCl9''@;'; put 'put ''Y29uc3QgUnRlPW5ldyBNYXAoW1siYXNjIixbLTEsMV1dLFsiZGVzYyIsWzEsLTFdXV0pLGZrZT1jPT5gVGhlIHByaW9yaXR5ICcke2N9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgbWFwLmAscGtlPWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIG5vdCBhIG51bWJlci5gLG1rZT1jPT5g''@;'; put 'put ''VGhlIGlkICcke2N9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgbWFwLmA7ZnVuY3Rpb24gdmsoKXtsZXR7ZXJyb3JJZEV4aXN0czpjfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgbD1uZXcgTWFwO2Z1bmN0aW9uIFQo''@;'; put 'put ''KXtyZXR1cm5bLi4ubF19ZnVuY3Rpb24gVyhpZSl7cmV0dXJuIGwuaGFzKGllKX1yZXR1cm4gYz1SYShjKT9jOm1rZSx7YWRkSXRlbTpmdW5jdGlvbiBhKGllLGdlKXtpZihXKGllKSl0aHJvdyBuZXcgRXJyb3IoYyhpZSkpO2wuc2V0KGllLGdlKX0sY2xlYXI6ZnVuY3Rpb24gaCgpe2wuY2xl''@;'; put 'put ''YXIoKX0sZ2V0SWQ6ZnVuY3Rpb24gZihpZSl7Y29uc3RbZ2VdPVQoKS5maW5kKHdlPT57bGV0W0VlLFplXT13ZTtyZXR1cm4gaWU9PT1aZSYmRWV9KXx8W251bGxdO3JldHVybiBnZX0sZ2V0SXRlbTpmdW5jdGlvbiBfKGllKXtyZXR1cm4gbC5nZXQoaWUpfSxnZXRJdGVtczpULGhhc0l0ZW06''@;'; put 'put ''VyxyZW1vdmVJdGVtOmZ1bmN0aW9uIGQoaWUpe3JldHVybiBsLmRlbGV0ZShpZSl9fX1jb25zdCB2a2U9Yz0+YCcke2N9JyB2YWx1ZSBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgdW5pcXVlIHNldC5gLFJOPWM9PmBUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgIiR7Y30iIHBsdWdpbi5g''@;'; put 'put ''LE90ZT1mdW5jdGlvbiBna2UoKXtsZXR7ZXJyb3JQcmlvcml0eUV4aXN0czpjLGVycm9yUHJpb3JpdHlOYU46bH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYz1SYShjKT9jOmZrZSxsPVJh''@;'; put 'put ''KGwpP2w6cGtlLHthZGRJdGVtOmZ1bmN0aW9uIGQoZixfKXtpZighR3UoZikpdGhyb3cgbmV3IEVycm9yKGwoZikpO2lmKGEuaGFzKGYpKXRocm93IG5ldyBFcnJvcihjKGYpKTthLnNldChmLF8pfSxnZXRJdGVtczpmdW5jdGlvbiBoKCl7bGV0IGY9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJhc2MiO2NvbnN0W18sVF09UnRlLmdldChmKXx8UnRlLmdldCgiYXNjIik7cmV0dXJuWy4uLmFdLnNvcnQoKFcsaWUpPT5XWzBdPGllWzBdP186VCkubWFwKFc9PldbMV0pfX19KHtlcnJvclByaW9yaXR5RXhpc3RzOmM9PmBUaGVyZSBp''@;'; put 'put ''cyBhbHJlYWR5IHJlZ2lzdGVyZWQgcGx1Z2luIG9uIHByaW9yaXR5ICIke2N9Ii5gLGVycm9yUHJpb3JpdHlOYU46Yz0+YFRoZSBwcmlvcml0eSAiJHtjfSIgaXMgbm90IGEgbnVtYmVyLmB9KSxQdGU9ZnVuY3Rpb24gX2tlKCl7bGV0e2Vycm9ySXRlbUV4aXN0czpjfT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgbD1uZXcgU2V0O3JldHVybiBjPVJhKGMpP2M6dmtlLHthZGRJdGVtOmZ1bmN0aW9uIGEoZil7aWYobC5oYXMoZikpdGhyb3cgbmV3IEVycm9yKGMoZikpO2wuYWRkKGYpfSxjbGVhcjpmdW5jdGlvbiBo''@;'; put 'put ''KCl7bC5jbGVhcigpfSxnZXRJdGVtczpmdW5jdGlvbiBkKCl7cmV0dXJuWy4uLmxdfX19KHtlcnJvckl0ZW1FeGlzdHM6Uk59KSxPTj12ayh7ZXJyb3JJZEV4aXN0czpSTn0pO2Z1bmN0aW9uIFBOKCl7cmV0dXJuWy4uLk90ZS5nZXRJdGVtcygpLC4uLlB0ZS5nZXRJdGVtcygpXX1mdW5jdGlv''@;'; put 'put ''biBjeShjKXtjb25zdCBsPWJ1KGMpO3JldHVybiBPTi5nZXRJdGVtKGwpfWZ1bmN0aW9uIGpzKGMsbCxhKXtbYyxsLGFdPWZ1bmN0aW9uIHdrZShjLGwsYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJihjPShsPWMpLlBMVUdJTl9LRVksYT1sLlBMVUdJTl9QUklPUklUWSksW2MsbCxh''@;'; put 'put ''XX0oYyxsLGEpLHZvaWQgMD09PWN5KGMpJiZmdW5jdGlvbiB5a2UoYyxsLGEpe2NvbnN0IGQ9YnUoYyk7aWYoT04uaGFzSXRlbShkKSl0aHJvdyBuZXcgRXJyb3IoUk4oZCkpO3ZvaWQgMD09PWE/UHRlLmFkZEl0ZW0oZCk6T3RlLmFkZEl0ZW0oYSxkKSxPTi5hZGRJdGVtKGQsbCl9KGMsbCxh''@;'; put 'put ''KX1jb25zdHtyZWdpc3RlcjpDa2UsZ2V0SXRlbTpTa2UsaGFzSXRlbTpGdGUsZ2V0TmFtZXM6TWtlfT1wZCgicmVuZGVyZXJzIik7ZnVuY3Rpb24gX2soYyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIUZ0ZShjKSl0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCByZW5k''@;'; put 'put ''ZXJlciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBTa2UoYyl9ZnVuY3Rpb24gcGgoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLlJFTkRFUkVSX1RZUEUpLENrZShjLGwpfWNvbnN0e3JlZ2lzdGVyOnhrZSxnZXRJdGVtOkVrZSxoYXNJdGVtOkh0ZSxnZXROYW1l''@;'; put 'put ''czpra2V9PXBkKCJ2YWxpZGF0b3JzIik7ZnVuY3Rpb24gRk4oYyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIUh0ZShjKSl0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCB2YWxpZGF0b3IgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gRWtlKGMpfWZ1bmN0''@;'; put 'put ''aW9uIGE3KGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5WQUxJREFUT1JfVFlQRSkseGtlKGMsbCl9ZnVuY3Rpb24gYmsoYyl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gdXkoYyl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGMp''@;'; put 'put ''fWZ1bmN0aW9uIEhOKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB3aW5kb3d9bGV0IGw3O2Z1bmN0aW9uIE50ZShjKXtyZXR1cm4gbDd8fChsNz0ib2JqZWN0Ij09dHlwZW9mIEludGw/bmV3IEludGwuQ29sbGF0b3IoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sx''@;'; put 'put ''XT9hcmd1bWVudHNbMV06e30pLmNvbXBhcmU6ImZ1bmN0aW9uIj09dHlwZW9mIFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZT8oYSxkKT0+YCR7YX1gLmxvY2FsZUNvbXBhcmUoZCk6KGEsZCk9PmE9PT1kPzA6YT5kPy0xOjEsbDcpfWNvbnN0IGM3PW5ldyBXZWFrTWFwLFZ0ZT1jbGFz''@;'; put 'put ''cyBBa2V7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe2xldCBUPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsO3RoaXMud3RTZXR0aW5ncz1kLHRoaXMuZG9tQmluZGluZ3M9YSx0aGlzLnd0VGFibGU9Zix0aGlzLnNlbGVjdGlvbnM9''@;'; put 'put ''Xyx0aGlzLnBhcmVudD1ULHRoaXMuZXZlbnRNYW5hZ2VyPWgsdGhpcy5mYWNhZGVHZXR0ZXI9bCxjNy5zZXQodGhpcyx7c2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQ6dm9pZCAwLGRibENsaWNrVGltZW91dDpbbnVsbCxudWxsXSxkYmxDbGlja09yaWdpbjpbbnVsbCxudWxsXX0pLHRoaXMu''@;'; put 'put ''cmVnaXN0ZXJFdmVudHMoKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLmhvbGRlciwiY29udGV4dG1lbnUiLGQ9PnRoaXMub25Db250ZXh0TWVudShkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0''@;'; put 'put ''aGlzLnd0VGFibGUuVEFCTEUsIm1vdXNlb3ZlciIsZD0+dGhpcy5vbk1vdXNlT3ZlcihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuVEFCTEUsIm1vdXNlb3V0IixkPT50aGlzLm9uTW91c2VPdXQoZCkpO2NvbnN0IGw9KCk9Pnt0aGlzLmV2ZW50''@;'; put 'put ''TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5ob2xkZXIsInRvdWNoc3RhcnQiLGQ9PnRoaXMub25Ub3VjaFN0YXJ0KGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5ob2xkZXIsInRvdWNoZW5kIixkPT50aGlzLm9uVG91Y2hF''@;'; put 'put ''bmQoZCkpLHRoaXMubW9tZW50dW1TY3JvbGxpbmd8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nPXt9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5ob2xkZXIsInNjcm9sbCIsKCk9PntjbGVhclRpbWVvdXQodGhpcy5tb21lbnR1bVNjcm9sbGluZy5f''@;'; put 'put ''dGltZW91dCksdGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVUb3VjaFNjcm9sbCIpLHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMCx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0PXNldFRpbWVv''@;'; put 'put ''dXQoKCk9Pnt0aGlzLnRvdWNoQXBwbGllZHx8KHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25BZnRlck1vbWVudHVtU2Nyb2xsIikpfSwyMDApfSl9O20yKCk/bCgpOihITigpJiZsKCksKCgpPT57dGhpcy5ldmVudE1hbmFn''@;'; put 'put ''ZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuaG9sZGVyLCJtb3VzZXVwIixkPT50aGlzLm9uTW91c2VVcChkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuaG9sZGVyLCJtb3VzZWRvd24iLGQ9PnRoaXMub25Nb3VzZURvd24oZCkpfSko''@;'; put 'put ''KSl9c2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChsKXtjb25zdCBhPWM3LmdldCh0aGlzKSxoPXRoaXMucGFyZW50Q2VsbChsKS5jb29yZHM7aWYoYS5zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZCYmaCl7Y29uc3RbZixfXT1baC5yb3csYS5zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZC5mcm9t''@;'; put 'put ''LnJvd10sW1QsV109W2guY29sLGEuc2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQuZnJvbS5jb2xdO3JldHVybiBmPT09XyYmVD09PVd9cmV0dXJuITF9cGFyZW50Q2VsbChsKXtjb25zdCBhPXt9LGg9ZXkobCxbIlREIiwiVEgiXSx0aGlzLnd0VGFibGUuVEFCTEUpO3JldHVybiBoPyhhLmNv''@;'; put 'put ''b3Jkcz10aGlzLnd0VGFibGUuZ2V0Q29vcmRzKGgpLGEuVEQ9aCk6Qm8obCwid3RCb3JkZXIiKSYmQm8obCwiY3VycmVudCIpPyhhLmNvb3Jkcz10aGlzLnNlbGVjdGlvbnMuZ2V0Q2VsbCgpLmNlbGxSYW5nZS5oaWdobGlnaHQsYS5URD10aGlzLnd0VGFibGUuZ2V0Q2VsbChhLmNvb3Jkcykp''@;'; put 'put ''OkJvKGwsInd0Qm9yZGVyIikmJkJvKGwsImFyZWEiKSYmdGhpcy5zZWxlY3Rpb25zLmNyZWF0ZU9yR2V0QXJlYSgpLmNlbGxSYW5nZSYmKGEuY29vcmRzPXRoaXMuc2VsZWN0aW9ucy5jcmVhdGVPckdldEFyZWEoKS5jZWxsUmFuZ2UudG8sYS5URD10aGlzLnd0VGFibGUuZ2V0Q2VsbChhLmNv''@;'; put 'put ''b3JkcykpLGF9b25Nb3VzZURvd24obCl7Y29uc3QgYT1jNy5nZXQodGhpcyksZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LGg9dk4oaXRlLGwudGFyZ2V0KSxmPWwudGFyZ2V0O2lmKGY9PT1kfHxoKDApPT09ZHx8aCgxKT09PWQpcmV0dXJuO2NvbnN0IF89''@;'; put 'put ''dGhpcy5wYXJlbnRDZWxsKGYpO0JvKGYsImNvcm5lciIpP3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkNlbGxDb3JuZXJNb3VzZURvd24iLGwsZik6Xy5URCYmdGhpcy53dFNldHRpbmdzLmhhcygib25DZWxsTW91c2VEb3duIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3Vz''@;'; put 'put ''ZURvd24iLGwsXy5jb29yZHMsXy5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiZfLlREJiYoYS5kYmxDbGlja09yaWdpblswXT1fLlRELGNsZWFyVGltZW91dChhLmRibENsaWNrVGltZW91dFswXSksYS5kYmxDbGlja1RpbWVvdXRbMF09c2V0VGltZW91dCgoKT0+e2Eu''@;'; put 'put ''ZGJsQ2xpY2tPcmlnaW5bMF09bnVsbH0sMWUzKSl9b25Db250ZXh0TWVudShsKXtpZih0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxDb250ZXh0TWVudSIpKXtjb25zdCBhPXRoaXMucGFyZW50Q2VsbChsLnRhcmdldCk7YS5URCYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvbnRleHRN''@;'; put 'put ''ZW51IixsLGEuY29vcmRzLGEuVEQpfX1vbk1vdXNlT3ZlcihsKXtpZighdGhpcy53dFNldHRpbmdzLmhhcygib25DZWxsTW91c2VPdmVyIikpcmV0dXJuO2NvbnN0IGE9dGhpcy53dFRhYmxlLlRBQkxFLGQ9ZXkobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD10aGlzLnBhcmVudHx8dGhpcztk''@;'; put 'put ''JiZkIT09aC5sYXN0TW91c2VPdmVyJiZWcChkLGEpJiYoaC5sYXN0TW91c2VPdmVyPWQsdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlT3ZlciIsbCx0aGlzLnd0VGFibGUuZ2V0Q29vcmRzKGQpLGQpKX1vbk1vdXNlT3V0KGwpe2lmKCF0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxN''@;'; put 'put ''b3VzZU91dCIpKXJldHVybjtjb25zdCBhPXRoaXMud3RUYWJsZS5UQUJMRSxkPWV5KGwudGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGg9ZXkobC5yZWxhdGVkVGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGY9dGhpcy5wYXJlbnR8fHRoaXM7ZCYmZCE9PWgmJlZwKGQsYSkmJih0aGlzLmNhbGxMaXN0ZW5l''@;'; put 'put ''cigib25DZWxsTW91c2VPdXQiLGwsdGhpcy53dFRhYmxlLmdldENvb3JkcyhkKSxkKSxudWxsPT09aCYmKGYubGFzdE1vdXNlT3Zlcj1udWxsKSl9b25Nb3VzZVVwKGwpe2NvbnN0IGE9YzcuZ2V0KHRoaXMpLGQ9dGhpcy5wYXJlbnRDZWxsKGwudGFyZ2V0KTtkLlREJiZ0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuaGFzKCJvbkNlbGxNb3VzZVVwIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZVVwIixsLGQuY29vcmRzLGQuVEQpLCgwPT09bC5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYmKGQuVEQ9PT1hLmRibENsaWNrT3JpZ2luWzBdJiZkLlREPT09YS5kYmxDbGlja09yaWdpblsx''@;'; put 'put ''XT8oQm8obC50YXJnZXQsImNvcm5lciIpP3RoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb3JuZXJEYmxDbGljayIsbCxkLmNvb3JkcyxkLlREKTp0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsRGJsQ2xpY2siLGwsZC5jb29yZHMsZC5URCksYS5kYmxDbGlja09yaWdpblswXT1udWxsLGEuZGJs''@;'; put 'put ''Q2xpY2tPcmlnaW5bMV09bnVsbCk6ZC5URD09PWEuZGJsQ2xpY2tPcmlnaW5bMF0mJihhLmRibENsaWNrT3JpZ2luWzFdPWQuVEQsY2xlYXJUaW1lb3V0KGEuZGJsQ2xpY2tUaW1lb3V0WzFdKSxhLmRibENsaWNrVGltZW91dFsxXT1zZXRUaW1lb3V0KCgpPT57YS5kYmxDbGlja09yaWdpblsx''@;'; put 'put ''XT1udWxsfSw1MDApKSl9b25Ub3VjaFN0YXJ0KGwpe2M3LmdldCh0aGlzKS5zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZD10aGlzLnNlbGVjdGlvbnMuZ2V0Q2VsbCgpLmNlbGxSYW5nZSx0aGlzLnRvdWNoQXBwbGllZD0hMCx0aGlzLm9uTW91c2VEb3duKGwpfW9uVG91Y2hFbmQobCl7dmFy''@;'; put 'put ''IGE7Y29uc3QgZD1sLnRhcmdldCxoPW51bGw9PT0oYT10aGlzLnBhcmVudENlbGwoZCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvb3JkcyxmPUtpKGgpJiZoLnJvdz49MCYmaC5jb2w+PTA7aWYobC5jYW5jZWxhYmxlJiZmJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiaXNEYXRhVmll''@;'; put 'put ''d0luc3RhbmNlIikpe2NvbnN0IFQ9WyJBIiwiQlVUVE9OIiwiSU5QVVQiXTtiTigpJiYoeXRlKCl8fHd0ZSgpKSYmdGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGQpJiYhVC5pbmNsdWRlcyhkLnRhZ05hbWUpP2wucHJldmVudERlZmF1bHQoKTp0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNo''@;'; put 'put ''ZWQoZCl8fGwucHJldmVudERlZmF1bHQoKX10aGlzLm9uTW91c2VVcChsKSx0aGlzLnRvdWNoQXBwbGllZD0hMX1jYWxsTGlzdGVuZXIobCxhLGQsaCl7Y29uc3QgZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUobCk7ZiYmZihhLGQsaCx0aGlzLmZhY2FkZUdldHRlcigpKX1kZXN0''@;'; put 'put ''cm95KCl7Y29uc3QgbD1jNy5nZXQodGhpcyk7Y2xlYXJUaW1lb3V0KGwuZGJsQ2xpY2tUaW1lb3V0WzBdKSxjbGVhclRpbWVvdXQobC5kYmxDbGlja1RpbWVvdXRbMV0pLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19O2NsYXNzIEJ0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY3VycmVudFNp''@;'; put 'put ''emU9MCx0aGlzLm5leHRTaXplPTAsdGhpcy5jdXJyZW50T2Zmc2V0PTAsdGhpcy5uZXh0T2Zmc2V0PTB9c2V0U2l6ZShsKXt0aGlzLmN1cnJlbnRTaXplPXRoaXMubmV4dFNpemUsdGhpcy5uZXh0U2l6ZT1sfXNldE9mZnNldChsKXt0aGlzLmN1cnJlbnRPZmZzZXQ9dGhpcy5uZXh0T2Zmc2V0''@;'; put 'put ''LHRoaXMubmV4dE9mZnNldD1sfX1jbGFzcyBPa2V7Y29uc3RydWN0b3IoKXt0aGlzLnNpemU9bmV3IEJ0ZSx0aGlzLndvcmtpbmdTcGFjZT0wLHRoaXMuc2hhcmVkU2l6ZT1udWxsfXNldFNpemUobCl7dGhpcy5zaXplLnNldFNpemUobCl9c2V0T2Zmc2V0KGwpe3RoaXMuc2l6ZS5zZXRPZmZz''@;'; put 'put ''ZXQobCl9Z2V0Vmlld1NpemUoKXtyZXR1cm4gdGhpcy5zaXplfWlzU2hhcmVkKCl7cmV0dXJuIHRoaXMuc2hhcmVkU2l6ZSBpbnN0YW5jZW9mIEJ0ZX1pc1BsYWNlT24obCl7cmV0dXJuIHRoaXMud29ya2luZ1NwYWNlPT09bH1hcHBlbmQobCl7dGhpcy53b3JraW5nU3BhY2U9MSxsLndvcmtp''@;'; put 'put ''bmdTcGFjZT0yLHRoaXMuc2hhcmVkU2l6ZT1sLmdldFZpZXdTaXplKCl9cHJlcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0yLGwud29ya2luZ1NwYWNlPTEsdGhpcy5zaGFyZWRTaXplPWwuZ2V0Vmlld1NpemUoKX19Y2xhc3MganRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvb3ROb2Rl''@;'; put 'put ''PWwsdGhpcy5ub2Rlc1Bvb2w9YSx0aGlzLnNpemVTZXQ9bmV3IE9rZSx0aGlzLmNoaWxkTm9kZVR5cGU9ZC50b1VwcGVyQ2FzZSgpLHRoaXMudmlzdWFsSW5kZXg9MCx0aGlzLmNvbGxlY3RlZE5vZGVzPVtdfXNldFNpemUobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRTaXplKGwpLHRoaXN9''@;'; put 'put ''c2V0T2Zmc2V0KGwpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0T2Zmc2V0KGwpLHRoaXN9aXNTaGFyZWRWaWV3U2V0KCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5pc1NoYXJlZCgpfWdldE5vZGUobCl7cmV0dXJuIGw8dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg/dGhpcy5jb2xsZWN0ZWROb2Rl''@;'; put 'put ''c1tsXTpudWxsfWdldEN1cnJlbnROb2RlKCl7Y29uc3QgbD10aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aDtyZXR1cm4gbD4wP3RoaXMuY29sbGVjdGVkTm9kZXNbbC0xXTpudWxsfWdldFJlbmRlcmVkQ2hpbGRDb3VudCgpe2NvbnN0e3Jvb3ROb2RlOmwsc2l6ZVNldDphfT10aGlzO2xldCBk''@;'; put 'put ''PTA7aWYodGhpcy5pc1NoYXJlZFZpZXdTZXQoKSl7bGV0IGg9bC5maXJzdEVsZW1lbnRDaGlsZDtmb3IoO2g7KXtpZihoLnRhZ05hbWU9PT10aGlzLmNoaWxkTm9kZVR5cGUpZCs9MTtlbHNlIGlmKGEuaXNQbGFjZU9uKDEpKWJyZWFrO2g9aC5uZXh0RWxlbWVudFNpYmxpbmd9fWVsc2UgZD1s''@;'; put 'put ''LmNoaWxkRWxlbWVudENvdW50O3JldHVybiBkfXN0YXJ0KCl7dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg9MCx0aGlzLnZpc3VhbEluZGV4PTA7Y29uc3R7cm9vdE5vZGU6bCxzaXplU2V0OmF9PXRoaXMsZD10aGlzLmlzU2hhcmVkVmlld1NldCgpLHtuZXh0U2l6ZTpofT1hLmdldFZpZXdT''@;'; put 'put ''aXplKCk7bGV0IGY9dGhpcy5nZXRSZW5kZXJlZENoaWxkQ291bnQoKTtmb3IoO2Y8aDspe2NvbnN0IFQ9dGhpcy5ub2Rlc1Bvb2woKTshZHx8ZCYmYS5pc1BsYWNlT24oMik/bC5hcHBlbmRDaGlsZChUKTpsLmluc2VydEJlZm9yZShULGwuZmlyc3RDaGlsZCksZis9MX1jb25zdCBfPWQmJmEu''@;'; put 'put ''aXNQbGFjZU9uKDEpO2Zvcig7Zj5oOylsLnJlbW92ZUNoaWxkKF8/bC5maXJzdENoaWxkOmwubGFzdENoaWxkKSxmLT0xfXJlbmRlcigpe2NvbnN0e3Jvb3ROb2RlOmwsc2l6ZVNldDphfT10aGlzO2xldCBkPXRoaXMudmlzdWFsSW5kZXg7dGhpcy5pc1NoYXJlZFZpZXdTZXQoKSYmYS5pc1Bs''@;'; put 'put ''YWNlT24oMikmJihkKz1hLnNoYXJlZFNpemUubmV4dFNpemUpO2xldCBoPWwuY2hpbGROb2Rlc1tkXTtpZihoLnRhZ05hbWUhPT10aGlzLmNoaWxkTm9kZVR5cGUpe2NvbnN0IGY9dGhpcy5ub2Rlc1Bvb2woKTtsLnJlcGxhY2VDaGlsZChmLGgpLGg9Zn10aGlzLmNvbGxlY3RlZE5vZGVzLnB1''@;'; put 'put ''c2goaCksdGhpcy52aXN1YWxJbmRleCs9MX1lbmQoKXt9fWNsYXNzIHp0ZSBleHRlbmRzIGp0ZXtwcmVwZW5kVmlldyhsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnByZXBlbmQobC5zaXplU2V0KSxsLnNpemVTZXQuYXBwZW5kKHRoaXMuc2l6ZVNldCksdGhpc31hcHBlbmRWaWV3KGwpe3JldHVy''@;'; put 'put ''biB0aGlzLnNpemVTZXQuYXBwZW5kKGwuc2l6ZVNldCksbC5zaXplU2V0LnByZXBlbmQodGhpcy5zaXplU2V0KSx0aGlzfX1jbGFzcyBQa2V7Y29uc3RydWN0b3IobCl7dGhpcy5ub2RlVHlwZT1sLnRvVXBwZXJDYXNlKCl9c2V0Um9vdERvY3VtZW50KGwpe3RoaXMucm9vdERvY3VtZW50PWx9''@;'; put 'put ''b2J0YWluKCl7cmV0dXJuIHRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5ub2RlVHlwZSl9fWNsYXNzIGR5e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5ub2Rlc1Bvb2w9InN0cmluZyI9PXR5cGVvZiBsP25ldyBQa2UobCk6bnVsbCx0aGlzLm5vZGVUeXBlPWwsdGhpcy5yb290''@;'; put 'put ''Tm9kZT1hLHRoaXMudGFibGU9bnVsbCx0aGlzLnJlbmRlcmVkTm9kZXM9MH1zZXRUYWJsZShsKXt0aGlzLm5vZGVzUG9vbCYmdGhpcy5ub2Rlc1Bvb2wuc2V0Um9vdERvY3VtZW50KGwucm9vdERvY3VtZW50KSx0aGlzLnRhYmxlPWx9YWRqdXN0KCl7fXJlbmRlcigpe319Y2xhc3MgRmtlIGV4''@;'; put 'put ''dGVuZHMgZHl7Y29uc3RydWN0b3IoKXtzdXBlcigiVEgiKSx0aGlzLm9yZGVyVmlld3M9bmV3IFdlYWtNYXAsdGhpcy5zb3VyY2VSb3dJbmRleD0wfW9idGFpbk9yZGVyVmlldyhsKXtsZXQgYTtyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyhsKT9hPXRoaXMub3JkZXJWaWV3cy5nZXQobCk6''@;'; put 'put ''KGE9bmV3IHp0ZShsLGQ9PnRoaXMubm9kZXNQb29sLm9idGFpbih0aGlzLnNvdXJjZVJvd0luZGV4LGQpLHRoaXMubm9kZVR5cGUpLHRoaXMub3JkZXJWaWV3cy5zZXQobCxhKSksYX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dIZWFkZXJGdW5jdGlvbnM6YSxyb3dIZWFkZXJz''@;'; put 'put ''Q291bnQ6ZCxyb3dzOmgsY2VsbHM6Zn09dGhpcy50YWJsZTtmb3IobGV0IF89MDtfPGw7XysrKXtjb25zdCBUPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShfKSxXPWguZ2V0UmVuZGVyZWROb2RlKF8pO3RoaXMuc291cmNlUm93SW5kZXg9VDtjb25zdCBpZT10aGlzLm9idGFpbk9y''@;'; put 'put ''ZGVyVmlldyhXKSxnZT1mLm9idGFpbk9yZGVyVmlldyhXKTtpZS5hcHBlbmRWaWV3KGdlKS5zZXRTaXplKGQpLnNldE9mZnNldCh0aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoMCkpLnN0YXJ0KCk7Zm9yKGxldCB3ZT0wO3dlPGQ7d2UrKyl7aWUucmVuZGVyKCk7Y29uc3QgRWU9''@;'; put 'put ''aWUuZ2V0Q3VycmVudE5vZGUoKTtFZS5jbGFzc05hbWU9IiIsRWUucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLGFbd2VdKFQsRWUsd2UpfWllLmVuZCgpfX19Y2xhc3MgSGtlIGV4dGVuZHMgZHl7Y29uc3RydWN0b3IobCl7c3VwZXIobnVsbCxsKX1hZGp1c3QoKXtjb25zdHtjb2x1bW5IZWFk''@;'; put 'put ''ZXJzQ291bnQ6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTtsZXQgZD10aGlzLnJvb3ROb2RlLmZpcnN0Q2hpbGQ7aWYobCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmh9PXRoaXMudGFibGUsZj1oK2E7Zm9yKGxldCBUPTAsVz1sO1Q8VztUKyspe2ZvcihkPXRoaXMucm9vdE5vZGUu''@;'; put 'put ''Y2hpbGROb2Rlc1tUXSxkfHwoZD10aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLHRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQoZCkpLHRoaXMucmVuZGVyZWROb2Rlcz1kLmNoaWxkTm9kZXMubGVuZ3RoO3RoaXMucmVuZGVyZWROb2RlczxmOylkLmFwcGVuZENo''@;'; put 'put ''aWxkKHRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5mOylkLnJlbW92ZUNoaWxkKGQubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9Y29uc3QgXz10aGlzLnJvb3RO''@;'; put 'put ''b2RlLmNoaWxkTm9kZXMubGVuZ3RoO2lmKF8+bClmb3IobGV0IFQ9bDtUPF87VCsrKXRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpfWVsc2UgZCYmZzIoZCl9cmVuZGVyKCl7Y29uc3R7Y29sdW1uSGVhZGVyc0NvdW50Omx9PXRoaXMudGFibGU7Zm9y''@;'; put 'put ''KGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0e2NvbHVtbkhlYWRlckZ1bmN0aW9uczpkLGNvbHVtbnNUb1JlbmRlcjpoLHJvd0hlYWRlcnNDb3VudDpmfT10aGlzLnRhYmxlLF89dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW2FdO2ZvcihsZXQgVD0tMSpmO1Q8aDtUKz0xKXtjb25zdCBXPXRoaXMu''@;'; put 'put ''dGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShUKSxpZT1fLmNoaWxkTm9kZXNbVCtmXTtpZS5jbGFzc05hbWU9IiIsaWUucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLGRbYV0oVyxpZSxhKX19fX1jbGFzcyBOa2UgZXh0ZW5kcyBkeXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFk''@;'; put 'put ''anVzdCgpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlLGQ9bCthO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPGQ7KXRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIikp''@;'; put 'put ''LHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5kOyl0aGlzLnJvb3ROb2RlLnJlbW92ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9cmVuZGVyKCl7dGhpcy5hZGp1c3QoKTtjb25zdHtjb2x1bW5zVG9SZW5k''@;'; put 'put ''ZXI6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTtmb3IobGV0IGg9MDtoPGE7aCsrKXtjb25zdCBmPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShoKSxfPXRoaXMudGFibGUuY29sdW1uVXRpbHMuZ2V0SGVhZGVyV2lkdGgoZik7dGhpcy5yb290Tm9kZS5jaGlsZE5v''@;'; put 'put ''ZGVzW2hdLnN0eWxlLndpZHRoPWAke199cHhgfWZvcihsZXQgaD0wO2g8bDtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLF89dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRTdHJldGNoZWRDb2x1bW5XaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxk''@;'; put 'put ''Tm9kZXNbaCthXS5zdHlsZS53aWR0aD1gJHtffXB4YH1jb25zdCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtkJiZwaShkLCJyb3dIZWFkZXIiKX19bGV0IFV0ZT0hMTtjbGFzcyBWa2UgZXh0ZW5kcyBkeXtjb25zdHJ1Y3RvcihsKXtzdXBlcigiVFIiLGwpLHRoaXMub3JkZXJWaWV3PW5l''@;'; put 'put ''dyBqdGUobCxhPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oYSksdGhpcy5ub2RlVHlwZSl9Z2V0UmVuZGVyZWROb2RlKGwpe3JldHVybiB0aGlzLm9yZGVyVmlldy5nZXROb2RlKGwpfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsfT10aGlzLnRhYmxlOyFVdGUmJmw+MWUzJiYoVXRlPSEw''@;'; put 'put ''LEdhKEFhYFBlcmZvcm1hbmNlIHRpcDogSGFuZHNvbnRhYmxlIHJlbmRlcmVkIG1vcmUgdGhhbiAxMDAwIHZpc2libGUgcm93cy4gQ29uc2lkZXIgbGltaXRpbmdceDIwCiAgICAgICAgdGhlIG51bWJlciBvZiByZW5kZXJlZCByb3dzIGJ5IHNwZWNpZnlpbmcgdGhlIHRhYmxlIGhlaWdodCBh''@;'; put 'put ''bmQvb3IgdHVybmluZyBvZmYgdGhlICJyZW5kZXJBbGxSb3dzIiBvcHRpb24uYCkpLHRoaXMub3JkZXJWaWV3LnNldFNpemUobCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IGE9MDthPGw7YSsrKXRoaXMub3JkZXJWaWV3LnJl''@;'; put 'put ''bmRlcigpO3RoaXMub3JkZXJWaWV3LmVuZCgpfX1jbGFzcyBCa2UgZXh0ZW5kcyBkeXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJURCIpLHRoaXMub3JkZXJWaWV3cz1uZXcgV2Vha01hcCx0aGlzLnNvdXJjZVJvd0luZGV4PTB9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9y''@;'; put 'put ''ZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5vcmRlclZpZXdzLmdldChsKTooYT1uZXcgenRlKGwsZD0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKHRoaXMuc291cmNlUm93SW5kZXgsZCksdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NU''@;'; put 'put ''b1JlbmRlcjpsLGNvbHVtbnNUb1JlbmRlcjphLHJvd3M6ZCxyb3dIZWFkZXJzOmh9PXRoaXMudGFibGU7Zm9yKGxldCBmPTA7ZjxsO2YrKyl7Y29uc3QgXz10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoZiksVD1kLmdldFJlbmRlcmVkTm9kZShmKTt0aGlzLnNvdXJjZVJvd0luZGV4''@;'; put 'put ''PV87Y29uc3QgVz10aGlzLm9idGFpbk9yZGVyVmlldyhUKSxpZT1oLm9idGFpbk9yZGVyVmlldyhUKTtXLnByZXBlbmRWaWV3KGllKS5zZXRTaXplKGEpLnNldE9mZnNldCh0aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoMCkpLnN0YXJ0KCk7Zm9yKGxldCBnZT0wO2dlPGE7Z2Ur''@;'; put 'put ''Kyl7Vy5yZW5kZXIoKTtjb25zdCB3ZT1XLmdldEN1cnJlbnROb2RlKCksRWU9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGdlKTtCbyh3ZSwiaGlkZSIpfHwod2UuY2xhc3NOYW1lPSIiKSx3ZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksd2UucmVtb3ZlQXR0cmlidXRlKCJk''@;'; put 'put ''aXIiKSx0aGlzLnRhYmxlLmNlbGxSZW5kZXJlcihfLEVlLHdlKX1XLmVuZCgpfX19Y2xhc3Mgamtle2NvbnN0cnVjdG9yKGwpe2xldHtjZWxsUmVuZGVyZXI6YX09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMucm9vdE5vZGU9''@;'; put 'put ''bCx0aGlzLnJvb3REb2N1bWVudD10aGlzLnJvb3ROb2RlLm93bmVyRG9jdW1lbnQsdGhpcy5yb3dIZWFkZXJzPW51bGwsdGhpcy5jb2x1bW5IZWFkZXJzPW51bGwsdGhpcy5jb2xHcm91cD1udWxsLHRoaXMucm93cz1udWxsLHRoaXMuY2VsbHM9bnVsbCx0aGlzLnJvd0ZpbHRlcj1udWxsLHRo''@;'; put 'put ''aXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5yb3dVdGlscz1udWxsLHRoaXMuY29sdW1uVXRpbHM9bnVsbCx0aGlzLnJvd3NUb1JlbmRlcj0wLHRoaXMuY29sdW1uc1RvUmVuZGVyPTAsdGhpcy5yb3dIZWFkZXJGdW5jdGlvbnM9W10sdGhpcy5yb3dIZWFkZXJzQ291bnQ9MCx0aGlzLmNvbHVt''@;'; put 'put ''bkhlYWRlckZ1bmN0aW9ucz1bXSx0aGlzLmNvbHVtbkhlYWRlcnNDb3VudD0wLHRoaXMuY2VsbFJlbmRlcmVyPWF9c2V0QXhpc1V0aWxzKGwsYSl7dGhpcy5yb3dVdGlscz1sLHRoaXMuY29sdW1uVXRpbHM9YX1zZXRWaWV3cG9ydFNpemUobCxhKXt0aGlzLnJvd3NUb1JlbmRlcj1sLHRoaXMu''@;'; put 'put ''Y29sdW1uc1RvUmVuZGVyPWF9c2V0RmlsdGVycyhsLGEpe3RoaXMucm93RmlsdGVyPWwsdGhpcy5jb2x1bW5GaWx0ZXI9YX1zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGwsYSl7dGhpcy5yb3dIZWFkZXJGdW5jdGlvbnM9bCx0aGlzLnJvd0hlYWRlcnNDb3VudD1sLmxlbmd0aCx0aGlzLmNv''@;'; put 'put ''bHVtbkhlYWRlckZ1bmN0aW9ucz1hLHRoaXMuY29sdW1uSGVhZGVyc0NvdW50PWEubGVuZ3RofXNldFJlbmRlcmVycygpe2xldHtyb3dIZWFkZXJzOmwsY29sdW1uSGVhZGVyczphLGNvbEdyb3VwOmQscm93czpoLGNlbGxzOmZ9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzBdP2FyZ3VtZW50c1swXTp7fTtsLnNldFRhYmxlKHRoaXMpLGEuc2V0VGFibGUodGhpcyksZC5zZXRUYWJsZSh0aGlzKSxoLnNldFRhYmxlKHRoaXMpLGYuc2V0VGFibGUodGhpcyksdGhpcy5yb3dIZWFkZXJzPWwsdGhpcy5jb2x1bW5IZWFkZXJzPWEsdGhpcy5jb2xHcm91cD1kLHRo''@;'; put 'put ''aXMucm93cz1oLHRoaXMuY2VsbHM9Zn1yZW5kZXJlZFJvd1RvU291cmNlKGwpe3JldHVybiB0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpfXJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9cmVuZGVy''@;'; put 'put ''KCl7dGhpcy5jb2xHcm91cC5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMuYWRqdXN0KCksdGhpcy5yb3dzLmFkanVzdCgpLHRoaXMucm93SGVhZGVycy5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMucmVuZGVyKCksdGhpcy5yb3dzLnJlbmRlcigpLHRoaXMucm93SGVhZGVycy5yZW5k''@;'; put 'put ''ZXIoKSx0aGlzLmNlbGxzLnJlbmRlcigpLHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhzKCksdGhpcy5jb2xHcm91cC5yZW5kZXIoKTtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dzOmF9PXRoaXM7Zm9yKGxldCBkPTA7ZDxsO2QrKyl7Y29uc3QgaD1hLmdldFJlbmRlcmVkTm9kZShk''@;'; put 'put ''KTtpZihoLmZpcnN0Q2hpbGQpe2NvbnN0IGY9dGhpcy5yZW5kZXJlZFJvd1RvU291cmNlKGQpLF89dGhpcy5yb3dVdGlscy5nZXRIZWlnaHQoZik7aC5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1fP18tMSsicHgiOiIifX19fWNsYXNzIHprZXtjb25zdHJ1Y3Rvcigpe2xldHtUQUJMRTpsLFRI''@;'; put 'put ''RUFEOmEsQ09MR1JPVVA6ZCxUQk9EWTpoLHJvd1V0aWxzOmYsY29sdW1uVXRpbHM6XyxjZWxsUmVuZGVyZXI6VH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMucmVuZGVyZXI9bmV3IGprZShsLHtjZWxsUmVuZGVyZXI6VH0p''@;'; put 'put ''LHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyZXJzKHtyb3dIZWFkZXJzOm5ldyBGa2UsY29sdW1uSGVhZGVyczpuZXcgSGtlKGEpLGNvbEdyb3VwOm5ldyBOa2UoZCkscm93czpuZXcgVmtlKGgpLGNlbGxzOm5ldyBCa2V9KSx0aGlzLnJlbmRlcmVyLnNldEF4aXNVdGlscyhmLF8pfXNldEZpbHRl''@;'; put 'put ''cnMobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRGaWx0ZXJzKGwsYSksdGhpc31zZXRWaWV3cG9ydFNpemUobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRWaWV3cG9ydFNpemUobCxhKSx0aGlzfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXtyZXR1cm4gdGhpcy5yZW5k''@;'; put 'put ''ZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGwsYSksdGhpc31hZGp1c3QoKXt0aGlzLnJlbmRlcmVyLmFkanVzdCgpfXJlbmRlcigpe3RoaXMucmVuZGVyZXIucmVuZGVyKCl9fWNsYXNzIFVrZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud3RT''@;'; put 'put ''ZXR0aW5ncz1hLHRoaXMuaGVhZGVyV2lkdGhzPW5ldyBNYXB9Z2V0V2lkdGgobCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5XaWR0aCIsbCl8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKX1nZXRTdHJldGNoZWRDb2x1''@;'; put 'put ''bW5XaWR0aChsKXtjb25zdCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yO2xldCBkPXRoaXMuZ2V0V2lkdGgobCk7aWYoYSl7Y29uc3QgaD1hLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwsZCk7aCYmKGQ9aCl9cmV0dXJuIGR9Z2V0''@;'; put 'put ''SGVhZGVySGVpZ2h0KGwpe2xldCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0Iik7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYoYT1hP01hdGgu''@;'; put 'put ''bWF4KGEsZCk6ZCksYX1nZXRIZWFkZXJXaWR0aChsKXtyZXR1cm4gdGhpcy5oZWFkZXJXaWR0aHMuZ2V0KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpKX1jYWxjdWxhdGVXaWR0aHMoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRo''@;'; put 'put ''aXMse3d0VGFibGU6YSx3dFZpZXdwb3J0OmQsY2xvbmVTb3VyY2U6aH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LGY9aD9oLnd0VGFibGUuaG9sZGVyOmEuaG9sZGVyLF89Zi5vZmZzZXRIZWlnaHQ8Zi5zY3JvbGxIZWlnaHQ/SWMoKTowO2xldCBUPWwuZ2V0U2V0dGluZygicm93SGVhZGVyV2lk''@;'; put 'put ''dGgiKTtpZihkLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnJlZnJlc2hTdHJldGNoaW5nKGQuZ2V0Vmlld3BvcnRXaWR0aCgpLV8pLFQ9bC5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIixUKSxudWxsIT1UKXtjb25zdCBXPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxl''@;'; put 'put ''bmd0aCxpZT1sLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpO2ZvcihsZXQgZ2U9MDtnZTxXO2dlKyspe2xldCB3ZT1BcnJheS5pc0FycmF5KFQpP1RbZ2VdOlQ7d2U9d2U/P2llLHRoaXMuaGVhZGVyV2lkdGhzLnNldChnZSx3ZSl9fX19Y2xhc3MgWmtle2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSl7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWF9Z2V0SGVpZ2h0KGwpe2xldCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWlnaHQiLGwpO2NvbnN0IGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tsXTty''@;'; put 'put ''ZXR1cm4gdm9pZCAwIT09ZCYmKGE9dm9pZCAwPT09YT9kOk1hdGgubWF4KGEsZCkpLGF9fWNvbnN0IHlnPSJ0b3AiLGdoPSJib3R0b20iLHdnPSJpbmxpbmVfc3RhcnQiLENnPSJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsWnA9ImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIixZa2U9W3ln''@;'; put 'put ''LGdoLHdnLENnLFpwXSxXa2U9bmV3IE1hcChbW3lnLGBodF9jbG9uZV8ke3lnfWBdLFtnaCxgaHRfY2xvbmVfJHtnaH1gXSxbd2csYGh0X2Nsb25lXyR7d2d9IGh0X2Nsb25lX2xlZnRgXSxbQ2csYGh0X2Nsb25lXyR7Q2d9IGh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lcmBdLFtacCxgaHRfY2xv''@;'; put 'put ''bmVfJHtacH0gaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyYF1dKTtmdW5jdGlvbiBtaChjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gR2tlKGMpe3ZhciBsPWZ1bmN0aW9uICRrZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh''@;'; put 'put ''MH0pOmNbbF09YSxjfWNvbnN0IHU3PWNsYXNzIHFrZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe21oKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLG1oKHRoaXMsImRvbUJpbmRpbmdzIix2b2lkIDApLG1oKHRoaXMsIlRCT0RZIixudWxsKSxtaCh0aGlzLCJUSEVBRCIsbnVsbCksbWgodGhpcywi''@;'; put 'put ''Q09MR1JPVVAiLG51bGwpLG1oKHRoaXMsImhhc1RhYmxlSGVpZ2h0IiwhMCksbWgodGhpcywiaGFzVGFibGVXaWR0aCIsITApLG1oKHRoaXMsImlzVGFibGVWaXNpYmxlIiwhMSksbWgodGhpcywidGFibGVPZmZzZXQiLDApLG1oKHRoaXMsImhvbGRlck9mZnNldCIsMCksdGhpcy5kb21CaW5k''@;'; put 'put ''aW5ncz1kLHRoaXMuaXNNYXN0ZXI9Im1hc3RlciI9PT1mLHRoaXMubmFtZT1mLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNldHRpbmdzPWgsdGhpcy5pbnN0YW5jZT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud290LHRoaXMud290PXRoaXMuZGF0''@;'; put 'put ''YUFjY2Vzc09iamVjdC53b3QsdGhpcy5UQUJMRT1kLnJvb3RUYWJsZSxkTih0aGlzLlRBQkxFKSx0aGlzLnNwcmVhZGVyPXRoaXMuY3JlYXRlU3ByZWFkZXIodGhpcy5UQUJMRSksdGhpcy5oaWRlcj10aGlzLmNyZWF0ZUhpZGVyKHRoaXMuc3ByZWFkZXIpLHRoaXMuaG9sZGVyPXRoaXMuY3Jl''@;'; put 'put ''YXRlSG9sZGVyKHRoaXMuaGlkZXIpLHRoaXMud3RSb290RWxlbWVudD10aGlzLmhvbGRlci5wYXJlbnROb2RlLHRoaXMuaXNNYXN0ZXImJnRoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMuZml4VGFibGVEb21UcmVlKCksdGhpcy5yb3dGaWx0ZXI9bnVsbCx0''@;'; put 'put ''aGlzLmNvbHVtbkZpbHRlcj1udWxsLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoPSExO2NvbnN0IF89dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJyb3dIZWFkZXJXaWR0aCIpO3RoaXMud3RTZXR0aW5ncy51cGRhdGUoInJvd0hlYWRlcldpZHRoIiwoKT0+dGhpcy5fbW9kaWZ5Um93''@;'; put 'put ''SGVhZGVyV2lkdGgoXykpLHRoaXMucm93VXRpbHM9bmV3IFprZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLmNvbHVtblV0aWxzPW5ldyBVa2UodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhpcy50YWJsZVJlbmRlcmVyPW5ldyB6''@;'; put 'put ''a2Uoe1RBQkxFOnRoaXMuVEFCTEUsVEhFQUQ6dGhpcy5USEVBRCxDT0xHUk9VUDp0aGlzLkNPTEdST1VQLFRCT0RZOnRoaXMuVEJPRFkscm93VXRpbHM6dGhpcy5yb3dVdGlscyxjb2x1bW5VdGlsczp0aGlzLmNvbHVtblV0aWxzLGNlbGxSZW5kZXJlcjp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0''@;'; put 'put ''dGluZ1B1cmUoImNlbGxSZW5kZXJlciIpfSl9aXMobCl7cmV0dXJuIHRoaXMubmFtZT09PWx9Zml4VGFibGVEb21UcmVlKCl7Y29uc3QgbD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudDt0aGlzLlRCT0RZPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGJvZHkiKSx0aGlzLlRCT0RZ''@;'; put 'put ''fHwodGhpcy5UQk9EWT1sLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksdGhpcy5UQUJMRS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKSksdGhpcy5USEVBRD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRoZWFkIiksdGhpcy5USEVBRHx8KHRoaXMuVEhFQUQ9bC5jcmVhdGVFbGVtZW50KCJ0aGVh''@;'; put 'put ''ZCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuVEhFQUQsdGhpcy5UQk9EWSkpLHRoaXMuQ09MR1JPVVA9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJjb2xncm91cCIpLHRoaXMuQ09MR1JPVVB8fCh0aGlzLkNPTEdST1VQPWwuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSx0aGlz''@;'; put 'put ''LlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLkNPTEdST1VQLHRoaXMuVEhFQUQpKX1jcmVhdGVTcHJlYWRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IUJvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRv''@;'; put 'put ''bUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLmNsYXNzTmFtZT0id3RTcHJlYWRlciIsYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZH1jcmVhdGVIaWRlcihsKXtjb25zdCBhPWwu''@;'; put 'put ''cGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IUJvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLmNsYXNzTmFtZT0id3RIaWRlciIsYSYmYS5pbnNl''@;'; put 'put ''cnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSxkfWNyZWF0ZUhvbGRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IUJvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3RE''@;'; put 'put ''b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZC5jbGFzc05hbWU9Ind0SG9sZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLHRoaXMuaXNNYXN0ZXImJihkLnBhcmVudE5vZGUuY2xhc3NOYW1lKz0iaHRfbWFzdGVyIGhhbmRzb250YWJs''@;'; put 'put ''ZSIsZC5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJ0bE1vZGUiKT8icnRsIjoibHRyIikpLGQuYXBwZW5kQ2hpbGQobCkpLGR9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd''@;'; put 'put ''JiZhcmd1bWVudHNbMF07Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9ydDpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1hLmdldFNldHRpbmcoInRvdGFsUm93cyIpLF89YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxUPWEuZ2V0U2V0dGluZygi''@;'; put 'put ''cm93SGVhZGVycyIpLFc9VC5sZW5ndGgsaWU9YS5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIiksZ2U9aWUubGVuZ3RoO2xldCB3ZT0hMSxFZT1sO2lmKHRoaXMuaXNNYXN0ZXImJih0aGlzLmhvbGRlck9mZnNldD1xbCh0aGlzLmhvbGRlciksRWU9aC5jcmVhdGVSZW5kZXJDYWxjdWxhdG9y''@;'; put 'put ''cyhFZSksVyYmIWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSkpe2NvbnN0IG90PWQuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksZXQ9dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg7dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9MCE9PW90LGV0IT09dGhpcy5j''@;'; put 'put ''b3JyZWN0SGVhZGVyV2lkdGgmJihFZT0hMSl9aWYodGhpcy5pc01hc3RlciYmKHdlPWQudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpKSxFZSl0aGlzLmlzTWFzdGVyJiZoLmNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpLGQmJmQucmVmcmVzaCghMCk7ZWxzZXt0aGlzLnRhYmxlT2Zmc2V0PXRo''@;'; put 'put ''aXMuaXNNYXN0ZXI/cWwodGhpcy5UQUJMRSk6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnBhcmVudFRhYmxlT2Zmc2V0O2NvbnN0IG90PWY+MD90aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTowLGV0PV8+MD90aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTowO3RoaXMucm93RmlsdGVyPW5l''@;'; put 'put ''dyBjbGFzcyBJa2V7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMub2Zmc2V0PWwsdGhpcy50b3RhbD1hLHRoaXMuY291bnRUSD1kfW9mZnNldHRlZChsKXtyZXR1cm4gbCt0aGlzLm9mZnNldH11bk9mZnNldHRlZChsKXtyZXR1cm4gbC10aGlzLm9mZnNldH1yZW5kZXJlZFRvU291cmNlKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLm9mZnNldHRlZChsKX1zb3VyY2VUb1JlbmRlcmVkKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkKGwpfW9mZnNldHRlZFRIKGwpe3JldHVybiBsLXRoaXMuY291bnRUSH11bk9mZnNldHRlZFRIKGwpe3JldHVybiBsK3RoaXMuY291bnRUSH12aXNpYmxlQ29sSGVhZGVkUm93''@;'; put 'put ''VG9Tb3VyY2VSb3cobCl7cmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGwpKX1zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQobCkpfX0ob3QsZixnZSksdGhp''@;'; put 'put ''cy5jb2x1bW5GaWx0ZXI9bmV3IGNsYXNzIFRrZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRl''@;'; put 'put ''cmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZp''@;'; put 'put ''c2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbihsKXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNl''@;'; put 'put ''VG9SZW5kZXJlZChsKSl9fShldCxfLFcpO2xldCB5dD0hMDtpZih0aGlzLmlzTWFzdGVyKXt0aGlzLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKTtjb25zdCBrdD17fTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYmVmb3JlRHJhdyIsITAsa3QpLHl0PSEwIT09a3Qu''@;'; put 'put ''c2tpcFJlbmRlcn1pZih5dCl7bGV0IGt0O2lmKHRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKFQsaWUpLCh0aGlzLmlzKGdoKXx8dGhpcy5pcyhacCkpJiZ0aGlzLnRhYmxlUmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhULFtdKSx0aGlzLnJl''@;'; put 'put ''c2V0T3ZlcnNpemVkUm93cygpLHRoaXMudGFibGVSZW5kZXJlci5zZXRWaWV3cG9ydFNpemUodGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSkuc2V0RmlsdGVycyh0aGlzLnJvd0ZpbHRlcix0aGlzLmNvbHVtbkZpbHRlcikucmVuZGVy''@;'; put 'put ''KCksdGhpcy5pc01hc3RlciYmKGt0PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3Jrc3BhY2VXaWR0aCx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5jb250YWluZXJXaWR0aD1udWxsLHRoaXMubWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMoKSksdGhpcy5hZGp1c3RDb2x1bW5I''@;'; put 'put ''ZWFkZXJIZWlnaHRzKCksKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoZ2gpKSYmdGhpcy5tYXJrT3ZlcnNpemVkUm93cygpLHRoaXMuaXNNYXN0ZXIpe3RoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpLHRoaXMuZGF0YUFjY2Vzc09iamVj''@;'; put 'put ''dC53dE92ZXJsYXlzLnJlZnJlc2goITEpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dE92ZXJsYXlzLmFwcGx5VG9ET00oKTtjb25zdCBTdD13YSh0aGlzLmhpZGVyKSxRdD13YSh0aGlzLlRBQkxFKTswIT09U3QmJlF0IT09U3QmJih0aGlzLmNvbHVtblV0aWxzLmNhbGN1bGF0ZVdpZHRocygp''@;'; put 'put ''LHRoaXMudGFibGVSZW5kZXJlci5yZW5kZXJlci5jb2xHcm91cC5yZW5kZXIoKSksa3QhPT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY29udGFpbmVyV2lkdGg9bnVsbCx0aGlz''@;'; put 'put ''LmNvbHVtblV0aWxzLmNhbGN1bGF0ZVdpZHRocygpLHRoaXMudGFibGVSZW5kZXJlci5yZW5kZXJlci5jb2xHcm91cC5yZW5kZXIoKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uRHJhdyIsITApfWVsc2UgdGhpcy5pcyhnaCkmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5jbG9uZVNv''@;'; put 'put ''dXJjZS53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpfX1sZXQgWmU9ITE7cmV0dXJuIHRoaXMuaXNNYXN0ZXImJihaZT1kLnRvcE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCksZC5ib3R0b21PdmVybGF5LmNsb25lJiYoWmU9ZC5ib3R0b21PdmVybGF5LnJlc2V0Rml4ZWRQb3Np''@;'; put 'put ''dGlvbigpfHxaZSksWmU9ZC5pbmxpbmVTdGFydE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fFplLGQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbUlubGluZVN0YXJ0Q29y''@;'; put 'put ''bmVyT3ZlcmxheSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJmQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpKSxaZT8oZC5yZWZyZXNoQWxsKCksZC5hZGp1c3RFbGVtZW50c1NpemUoKSk6dGhpcy5yZWZyZXNoU2Vs''@;'; put 'put ''ZWN0aW9ucyhFZSksd2UmJmQuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3QuZHJhd249ITAsdGhpc31tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIobCl7Y29uc3QgYT10aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpO2xldCBkPXRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtsZXQgZixfLFQ7Y29uc3QgVz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVySGVpZ2h0''@;'; put 'put ''Iil8fFtdO2Zvcig7ZDspZC09MSxmPXRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KGQpLF89dGhpcy5nZXRDb2x1bW5IZWFkZXIoYSxkKSxfJiYoVD1qZihfKSwoIWYmJmg8VHx8ZjxUKSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNb''@;'; put 'put ''ZF09VCksQXJyYXkuaXNBcnJheShXKT9udWxsIT1XW2RdJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1XW2RdKTppc05hTihXKXx8KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRl''@;'; put 'put ''cnNbZF09VyksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXTwoV1tkXXx8VykmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPVdbZF18fFcpKX1hZGp1c3RDb2x1bW5IZWFk''@;'; put 'put ''ZXJIZWlnaHRzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLGE9dGhpcy5USEVBRC5jaGlsZE5vZGVzLGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVycztmb3IobGV0IGY9MCxfPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxl''@;'; put 'put ''bmd0aDtmPF87ZisrKWlmKGRbZl0pe2lmKCFhW2ZdfHwwPT09YVtmXS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm47YVtmXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodD1gJHtkW2ZdfXB4YH19cmVzZXRPdmVyc2l6ZWRSb3dzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLHt3dFZpZXdw''@;'; put 'put ''b3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZigodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhnaCkpJiYhbC5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSl7Y29uc3QgZD10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk7Zm9yKGxldCBoPTA7aDxkO2grKyl7Y29uc3Qg''@;'; put 'put ''Zj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGgpO2Eub3ZlcnNpemVkUm93cyYmYS5vdmVyc2l6ZWRSb3dzW2ZdJiYoYS5vdmVyc2l6ZWRSb3dzW2ZdPXZvaWQgMCl9fX1yZW1vdmVDbGFzc0Zyb21DZWxscyhsKXtjb25zdCBhPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvckFsbChg''@;'; put 'put ''LiR7bH1gKTtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspV28oYVtkXSxsKX1yZWZyZXNoU2VsZWN0aW9ucyhsKXtjb25zdHt3dFNldHRpbmdzOmF9PXRoaXMse3NlbGVjdGlvbnM6ZH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFkKXJldHVybjtjb25zdCBoPUFycmF5LmZyb20o''@;'; put 'put ''ZCksZj1oLmxlbmd0aDtpZihsKXtjb25zdCBfPVtdO2ZvcihsZXQgaWU9MDtpZTxmO2llKyspe2NvbnN0e2hpZ2hsaWdodEhlYWRlckNsYXNzTmFtZTpnZSxoaWdobGlnaHRSb3dDbGFzc05hbWU6d2UsaGlnaGxpZ2h0Q29sdW1uQ2xhc3NOYW1lOkVlfT1oW2llXS5zZXR0aW5ncyxaZT1oW2ll''@;'; put 'put ''XS5jbGFzc05hbWVzLG90PVplLmxlbmd0aDtmb3IobGV0IGV0PTA7ZXQ8b3Q7ZXQrKylfLmluY2x1ZGVzKFplW2V0XSl8fF8ucHVzaChaZVtldF0pO2dlJiYhXy5pbmNsdWRlcyhnZSkmJl8ucHVzaChnZSksd2UmJiFfLmluY2x1ZGVzKHdlKSYmXy5wdXNoKHdlKSxFZSYmIV8uaW5jbHVkZXMo''@;'; put 'put ''RWUpJiZfLnB1c2goRWUpfWNvbnN0IFQ9YS5nZXRTZXR0aW5nKCJvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIik7aWYoQXJyYXkuaXNBcnJheShUKSlmb3IobGV0IGllPTA7aWU8VC5sZW5ndGg7aWUrKylfLnB1c2goVFtpZV0pO2NvbnN0IFc9Xy5sZW5ndGg7Zm9yKGxldCBpZT0wO2ll''@;'; put 'put ''PFc7aWUrKyl0aGlzLnJlbW92ZUNsYXNzRnJvbUNlbGxzKF9baWVdKX1mb3IobGV0IF89MDtfPGY7XysrKWhbX10uZHJhdyh0aGlzLmZhY2FkZUdldHRlcigpLGwpfWdldENlbGwobCl7bGV0IGE9bC5yb3csZD1sLmNvbDtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1v''@;'; put 'put ''ZGlmeUdldENlbGxDb29yZHMiLGEsZCk7aWYoaCYmQXJyYXkuaXNBcnJheShoKSYmKFthLGRdPWgpLHRoaXMuaXNSb3dCZWZvcmVSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTE7aWYodGhpcy5pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKGEpKXJldHVybi0yO2lmKHRoaXMuaXNDb2x1bW5CZWZvcmVS''@;'; put 'put ''ZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTM7aWYodGhpcy5pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGQpKXJldHVybi00O2NvbnN0IGY9dGhpcy5nZXRSb3coYSk7aWYoIWYmJmE+PTApdGhyb3cgbmV3IEVycm9yKCJUUiB3YXMgZXhwZWN0ZWQgdG8gYmUgcmVuZGVyZWQgYnV0IGlz''@;'; put 'put ''IG5vdCIpO2NvbnN0IF89Zi5jaGlsZE5vZGVzW3RoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihkKV07aWYoIV8mJmQ+PTApdGhyb3cgbmV3IEVycm9yKCJURCBvciBUSCB3YXMgZXhwZWN0ZWQgdG8gYmUgcmVuZGVyZWQgYnV0IGlzIG5vdCIp''@;'; put 'put ''O3JldHVybiBffWdldFJvdyhsKXtsZXQgYT1udWxsLGQ9bnVsbDt2YXIgaCxmO3JldHVybiBsPDA/KGE9bnVsbD09PShoPXRoaXMucm93RmlsdGVyKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCksZD10aGlzLlRIRUFEKTooYT1udWxsPT09''@;'; put 'put ''KGY9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNvdXJjZVRvUmVuZGVyZWQobCksZD10aGlzLlRCT0RZKSx2b2lkIDAhPT1hJiZ2b2lkIDAhPT1kJiYhKGQuY2hpbGROb2Rlcy5sZW5ndGg8YSsxKSYmZC5jaGlsZE5vZGVzW2FdfWdldENvbHVtbkhlYWRlcihsKXtjb25z''@;'; put 'put ''dCBkPXRoaXMuVEhFQUQuY2hpbGROb2Rlc1thcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MF07cmV0dXJuIGQ/LmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpXX1n''@;'; put 'put ''ZXRDb2x1bW5IZWFkZXJzKGwpe2NvbnN0IGE9W10sZD10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCk7cmV0dXJuIHRoaXMuVEhFQUQuY2hpbGROb2Rlcy5mb3JFYWNoKGg9Pntjb25zdCBmPWguY2hpbGROb2Rlc1tkXTtmJiZhLnB1c2go''@;'; put 'put ''Zil9KSxhfWdldFJvd0hlYWRlcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtpZigwPT09dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKDApKXJldHVybjtpZihhPj10''@;'; put 'put ''aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aClyZXR1cm47Y29uc3QgaD10aGlzLlRCT0RZLmNoaWxkTm9kZXNbdGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKV07cmV0dXJuIGg/LmNoaWxkTm9kZXNbYV19Z2V0Um93SGVhZGVycyhsKXtpZigw''@;'; put 'put ''PT09dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKDApKXJldHVybltdO2NvbnN0IGE9W10sZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMu''@;'; put 'put ''VEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXSxfPWY/LmNoaWxkTm9kZXNbaF07XyYmYS5wdXNoKF8pfXJldHVybiBhfWdldENvb3JkcyhsKXtsZXQgYT1sO2lmKCJURCIhPT1hLm5vZGVOYW1lJiYiVEgiIT09YS5ub2RlTmFtZSYmKGE9TnAoYSxb''@;'; put 'put ''IlREIiwiVEgiXSkpLG51bGw9PT1hKXJldHVybiBudWxsO2NvbnN0IGQ9YS5wYXJlbnROb2RlLGg9ZC5wYXJlbnROb2RlO2xldCBmPXN0ZShkKSxfPWEuY2VsbEluZGV4O3JldHVybiBCcChDZyxhLHRoaXMud3RSb290RWxlbWVudCl8fEJwKHlnLGEsdGhpcy53dFJvb3RFbGVtZW50KT8iVEhF''@;'; put 'put ''QUQiPT09aC5ub2RlTmFtZSYmKGYtPWguY2hpbGROb2Rlcy5sZW5ndGgpOmY9QnAoWnAsYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxCcChnaCxhLHRoaXMud3RSb290RWxlbWVudCk/dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLWguY2hpbGROb2Rlcy5sZW5ndGgrZjpo''@;'; put 'put ''PT09dGhpcy5USEVBRD90aGlzLnJvd0ZpbHRlci52aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3coZik6dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShmKSxfPUJwKENnLGEsdGhpcy53dFJvb3RFbGVtZW50KXx8QnAod2csYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxCcChacCxh''@;'; put 'put ''LHRoaXMud3RSb290RWxlbWVudCk/dGhpcy5jb2x1bW5GaWx0ZXIub2Zmc2V0dGVkVEgoXyk6dGhpcy5jb2x1bW5GaWx0ZXIudmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKF8pLHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoZixfKX1tYXJrT3ZlcnNpemVkUm93cygpe2lm''@;'; put 'put ''KHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSlyZXR1cm47bGV0IGgsZixfLFQsVyxsPXRoaXMuVEJPRFkuY2hpbGROb2Rlcy5sZW5ndGg7aWYobCp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpIT1qZih0aGlz''@;'; put 'put ''LlRCT0RZKS0xfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikpZm9yKDtsOylsLT0xLF89dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKSxoPXRoaXMuZ2V0Um93SGVpZ2h0KF8pLFQ9dGhpcy5nZXRUckZvclJvdyhfKSxXPVQucXVlcnlTZWxl''@;'; put 'put ''Y3RvcigidGgiKSxmPVc/amYoVyk6amYoVCktMSwoIWgmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0Iik8Znx8aDxmKSYmKGYrPTEsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tfXT1mKX1nZXRUckZvclJvdyhsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCldfWlzQ29sdW1uSGVhZGVyUmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO3Jl''@;'; put 'put ''dHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0hlYWRlclJlbmRlcmVkKGwpe2lmKGw+PTApcmV0dXJuITE7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMobCk8PWR9aXNSb3dCZWZvcmVSZW5kZXJlZFJvd3Mo''@;'; put 'put ''bCl7Y29uc3QgYT10aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTtyZXR1cm4gbDwwJiZhPD0wPyF0aGlzLmlzUm93SGVhZGVyUmVuZGVyZWQobCk6bDxhfWlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MobCl7cmV0dXJuIGw+dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0NvbHVtbkJlZm9yZVJl''@;'; put 'put ''bmRlcmVkQ29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyhsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXIm''@;'; put 'put ''Jmw+dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1pc0NvbHVtbkFmdGVyVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZsPnRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKX1pc1Jvd0FmdGVyVmlld3BvcnQobCl7cmV0dXJuIHRoaXMucm93RmlsdGVyJiZsPnRoaXMu''@;'; put 'put ''Z2V0TGFzdFZpc2libGVSb3coKX1pc0NvbHVtbkJlZm9yZVZpZXdwb3J0KGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKTwwJiZsPj0wfWlzTGFzdFJvd0Z1bGx5VmlzaWJsZSgpe3JldHVybiB0aGlzLmdldExhc3RWaXNp''@;'; put 'put ''YmxlUm93KCk9PT10aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzTGFzdENvbHVtbkZ1bGx5VmlzaWJsZSgpe3JldHVybiB0aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk9PT10aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWFsbFJvd3NJblZpZXdwb3J0KCl7cmV0dXJuIHRoaXMud3RT''@;'; put 'put ''ZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT09PXRoaXMuZ2V0VmlzaWJsZVJvd3NDb3VudCgpfWFsbENvbHVtbnNJblZpZXdwb3J0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKT09PXRoaXMuZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgp''@;'; put 'put ''fWdldFJvd0hlaWdodChsKXtyZXR1cm4gdGhpcy5yb3dVdGlscy5nZXRIZWlnaHQobCl9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldEhlYWRlckhlaWdodChsKX1nZXRDb2x1bW5XaWR0aChsKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRX''@;'; put 'put ''aWR0aChsKX1nZXRTdHJldGNoZWRDb2x1bW5XaWR0aChsKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRTdHJldGNoZWRDb2x1bW5XaWR0aChsKX1oYXNEZWZpbmVkU2l6ZSgpe3JldHVybiB0aGlzLmhhc1RhYmxlSGVpZ2h0JiZ0aGlzLmhhc1RhYmxlV2lkdGh9Z2V0V2lkdGgoKXtyZXR1''@;'; put 'put ''cm4gd2EodGhpcy5UQUJMRSl9Z2V0SGVpZ2h0KCl7cmV0dXJuIGFsKHRoaXMuVEFCTEUpfWdldFRvdGFsV2lkdGgoKXtjb25zdCBsPXdhKHRoaXMuaGlkZXIpO3JldHVybiAwIT09bD9sOnRoaXMuZ2V0V2lkdGgoKX1nZXRUb3RhbEhlaWdodCgpe2NvbnN0IGw9YWwodGhpcy5oaWRlcik7cmV0''@;'; put 'put ''dXJuIDAhPT1sP2w6dGhpcy5nZXRIZWlnaHQoKX1pc1Zpc2libGUoKXtyZXR1cm4gZTcodGhpcy5UQUJMRSl9X21vZGlmeVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPVJhKGwpP2woKTpudWxsO3JldHVybiBBcnJheS5pc0FycmF5KGEpPyhhPVsuLi5hXSxhW2EubGVuZ3RoLTFdPXRoaXMuX2Nv''@;'; put 'put ''cnJlY3RSb3dIZWFkZXJXaWR0aChhW2EubGVuZ3RoLTFdKSk6YT10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgoYSksYX1fY29ycmVjdFJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBsJiYoYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVm''@;'; put 'put ''YXVsdENvbHVtbldpZHRoIikpLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYoYSs9MSksYX19LFp0ZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe3JldHVybiAwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPy0xOjB9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgp''@;'; put 'put ''e2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksYyl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3Vu''@;'; put 'put ''dCgpfX07ZmgoWnRlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c1RvcCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBZdGU9WnRlLFd0ZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uUmVuZGVyZWQ7''@;'; put 'put ''cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NP''@;'; put 'put ''YmplY3QuZW5kQ29sdW1uUmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1JlbmRlcmVkfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENvbHVtbnNWaXNpYmxlfX07ZmgoV3RlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZENvbHVtbnMi''@;'; put 'put ''LHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgTk49V3RlO2NsYXNzIFZOIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCx5Zyl9fVRhKFZOLFl0ZSksVGEoVk4sTk4pO2NvbnN0IEprZT1WTjtmdW5jdGlvbiBCTihjLGwsYSl7cmV0dXJuIGw9''@;'; put 'put ''ZnVuY3Rpb24gUWtlKGMpe3ZhciBsPWZ1bmN0aW9uIGVBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6''@;'; put 'put ''U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEd0ZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gb0FlKGMpe3ZhciBsPWZ1bmN0''@;'; put 'put ''aW9uIHNBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGh5KGMsbCl7cmV0dXJuIGZ1bmN0aW9uIGFBZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsJHRl''@;'; put 'put ''KGMsbCwiZ2V0IikpfWZ1bmN0aW9uICR0ZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIgU2c9bmV3IFdlYWtNYXA7Y2xhc3Mgak57Y29u''@;'; put 'put ''c3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO0d0ZSh0aGlzLCJyb3ciLG51bGwpLEd0ZSh0aGlzLCJjb2wiLG51bGwpLGZ1bmN0aW9uIHJBZShjLGwsYSl7KGZ1bmN0aW9uIGlBZShjLGwpe2lmKGwuaGFz''@;'; put 'put ''KGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsU2cse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksZnVuY3Rpb24gbEFlKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gY0FlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYywkdGUoYyxsLCJzZXQiKSxhKSxh''@;'; put 'put ''fSh0aGlzLFNnLGQpLHR5cGVvZiBsPCJ1IiYmdHlwZW9mIGE8InUiJiYodGhpcy5yb3c9bCx0aGlzLmNvbD1hKX1pc1ZhbGlkKGwpe3JldHVybiEodGhpcy5yb3c8MHx8dGhpcy5jb2w8MHx8dGhpcy5yb3c+PWwuZ2V0U2V0dGluZygidG90YWxSb3dzIil8fHRoaXMuY29sPj1sLmdldFNldHRp''@;'; put 'put ''bmcoInRvdGFsQ29sdW1ucyIpKX1pc0VxdWFsKGwpe3JldHVybiBsPT09dGhpc3x8dGhpcy5yb3c9PT1sLnJvdyYmdGhpcy5jb2w9PT1sLmNvbH1pc1NvdXRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJihoeSh0aGlzLFNnKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwu''@;'; put 'put ''Y29sKX1pc05vcnRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdzw9bC5yb3cmJihoeSh0aGlzLFNnKT90aGlzLmNvbD49bC5jb2w6dGhpcy5jb2w8PWwuY29sKX1pc1NvdXRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJihoeSh0aGlzLFNnKT90aGlzLmNvbD49bC5jb2w6dGhp''@;'; put 'put ''cy5jb2w8PWwuY29sKX1pc05vcnRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdzw9bC5yb3cmJihoeSh0aGlzLFNnKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwuY29sKX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5yb3c9bnVsbD09PXRoaXMucm93P3RoaXMucm93Ok1hdGgubWF4KHRo''@;'; put 'put ''aXMucm93LDApLHRoaXMuY29sPW51bGw9PT10aGlzLmNvbD90aGlzLmNvbDpNYXRoLm1heCh0aGlzLmNvbCwwKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyBqTih0aGlzLnJvdyx0aGlzLmNvbCxoeSh0aGlzLFNnKSl9dG9PYmplY3QoKXtyZXR1cm57cm93OnRoaXMucm93LGNvbDp0aGlzLmNv''@;'; put 'put ''bH19fWNvbnN0IENrPWpOO2Z1bmN0aW9uIHpOKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBoQWUoYyl7dmFyIGw9ZnVuY3Rpb24gZkFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09''@;'; put 'put ''YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp''@;'; put 'put ''KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gdmgo''@;'; put 'put ''YyxsKXtyZXR1cm4gZnVuY3Rpb24gcEFlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxxdGUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gcXRlKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUg''@;'; put 'put ''ZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBnZD1uZXcgV2Vha01hcDtjbGFzcyBVTntjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpsLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt6Tih0aGlzLCJoaWdobGlnaHQiLG51bGwpLHpOKHRoaXMsImZyb20iLG51bGwpLHpOKHRoaXMsInRvIixudWxsKSxm''@;'; put 'put ''dW5jdGlvbiB1QWUoYyxsLGEpeyhmdW5jdGlvbiBkQWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLGdkLHt3''@;'; put 'put ''cml0YWJsZTohMCx2YWx1ZTohMX0pLHRoaXMuaGlnaGxpZ2h0PWwuY2xvbmUoKS5ub3JtYWxpemUoKSx0aGlzLmZyb209YS5jbG9uZSgpLHRoaXMudG89ZC5jbG9uZSgpLGZ1bmN0aW9uIGdBZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIG1BZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChj''@;'; put 'put ''LGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMscXRlKGMsbCwic2V0IiksYSksYX0odGhpcyxnZCxoKX1zZXRIaWdobGlnaHQobCl7cmV0dXJuIHRoaXMuaGln''@;'; put 'put ''aGxpZ2h0PWwuY2xvbmUoKS5ub3JtYWxpemUoKSx0aGlzfXNldEZyb20obCl7cmV0dXJuIHRoaXMuZnJvbT1sLmNsb25lKCksdGhpc31zZXRUbyhsKXtyZXR1cm4gdGhpcy50bz1sLmNsb25lKCksdGhpc31pc1ZhbGlkKGwpe3JldHVybiB0aGlzLmZyb20uaXNWYWxpZChsKSYmdGhpcy50by5p''@;'; put 'put ''c1ZhbGlkKGwpfWlzU2luZ2xlKCl7cmV0dXJuIHRoaXMuZnJvbS5yb3c+PTAmJnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5mcm9tLmNvbD49MCYmdGhpcy5mcm9tLmNvbD09PXRoaXMudG8uY29sfWdldE91dGVySGVpZ2h0KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5y''@;'; put 'put ''b3csdGhpcy50by5yb3cpLU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpKzF9Z2V0T3V0ZXJXaWR0aCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKS1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSsxfWdldEhlaWdodCgpe2lm''@;'; put 'put ''KHRoaXMuZnJvbS5yb3c8MCYmdGhpcy50by5yb3c8MClyZXR1cm4gMDtjb25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5yb3csMCksYT1NYXRoLm1heCh0aGlzLnRvLnJvdywwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0V2lkdGgoKXtpZih0aGlzLmZyb20uY29s''@;'; put 'put ''PDAmJnRoaXMudG8uY29sPDApcmV0dXJuIDA7Y29uc3QgbD1NYXRoLm1heCh0aGlzLmZyb20uY29sLDApLGE9TWF0aC5tYXgodGhpcy50by5jb2wsMCk7cmV0dXJuIE1hdGgubWF4KGwsYSktTWF0aC5taW4obCxhKSsxfWdldENlbGxzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRXaWR0aCgpKnRo''@;'; put 'put ''aXMuZ2V0SGVpZ2h0KCl9aW5jbHVkZXMobCl7Y29uc3R7cm93OmEsY29sOmR9PWwsaD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxmPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4gaC5yb3c8PWEmJmYucm93Pj1hJiZoLmNvbDw9ZCYmZi5jb2w+PWR9aW5jbHVk''@;'; put 'put ''ZXNSYW5nZShsKXtyZXR1cm4gdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSkmJnRoaXMuaW5jbHVkZXMobC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKX1pc0VxdWFsKGwpe3JldHVybiBNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgu''@;'; put 'put ''bWluKGwuZnJvbS5yb3csbC50by5yb3cpJiZNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgubWF4KGwuZnJvbS5yb3csbC50by5yb3cpJiZNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWluKGwuZnJvbS5jb2wsbC50by5jb2wpJiZN''@;'; put 'put ''YXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWF4KGwuZnJvbS5jb2wsbC50by5jb2wpfW92ZXJsYXBzKGwpe3JldHVybiBsLmlzU291dGhFYXN0T2YodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSkmJmwuaXNOb3J0aFdlc3RPZih0aGlzLmdldE91dGVyQm90''@;'; put 'put ''dG9tUmlnaHRDb3JuZXIoKSl9aXNTb3V0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKX1pc092ZXJsYXBwaW5nSG9yaXpvbnRhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5jb2w+''@;'; put 'put ''PWwuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5jb2w8PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbHx8dGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5jb2w8PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbCYm''@;'; put 'put ''dGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5jb2w+PWwuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuY29sfWlzT3ZlcmxhcHBpbmdWZXJ0aWNhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3c+PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJv''@;'; put 'put ''dyYmdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3d8fHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdzw9bC5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyVG9wUmln''@;'; put 'put ''aHRDb3JuZXIoKS5yb3c+PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvd31leHBhbmQobCl7Y29uc3QgYT10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4obC5yb3c8YS5yb3d8fGwuY29sPGEuY29sfHxsLnJv''@;'; put 'put ''dz5kLnJvd3x8bC5jb2w+ZC5jb2wpJiYodGhpcy5mcm9tPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4oYS5yb3csbC5yb3cpLE1hdGgubWluKGEuY29sLGwuY29sKSksdGhpcy50bz10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGQucm93LGwucm93KSxNYXRoLm1heChk''@;'; put 'put ''LmNvbCxsLmNvbCkpLCEwKX1leHBhbmRCeVJhbmdlKGwpe2lmKHRoaXMuaW5jbHVkZXNSYW5nZShsKXx8IXRoaXMub3ZlcmxhcHMobCkpcmV0dXJuITE7Y29uc3QgYT10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxoPXRoaXMu''@;'; put 'put ''Z2V0RGlyZWN0aW9uKCksZj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxfPWwuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxUPU1hdGgubWluKGEucm93LGYucm93KSxXPU1hdGgubWluKGEuY29sLGYuY29sKSxpZT1NYXRoLm1heChkLnJvdyxfLnJvdyksZ2U9TWF0aC5tYXgoZC5jb2ws''@;'; put 'put ''Xy5jb2wpLHdlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoVCxXKSxFZT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGllLGdlKTtyZXR1cm4gdGhpcy5mcm9tPXdlLHRoaXMudG89RWUsdGhpcy5zZXREaXJlY3Rpb24oaCksdGhpcy5oaWdobGlnaHQucm93PT09dGhpcy5nZXRPdXRlckJvdHRvbVJp''@;'; put 'put ''Z2h0Q29ybmVyKCkucm93JiYiTi1TIj09PXRoaXMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpLHRoaXMuaGlnaGxpZ2h0LmNvbD09PXRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbCYmIlctRSI9PT10aGlzLmdldEhvcml6b250''@;'; put 'put ''YWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCksITB9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbS5pc05vcnRoV2VzdE9mKHRoaXMudG8pPyJOVy1TRSI6dGhpcy5mcm9tLmlzTm9ydGhFYXN0T2YodGhpcy50byk/Ik5FLVNXIjp0aGlzLmZyb20u''@;'; put 'put ''aXNTb3V0aEVhc3RPZih0aGlzLnRvKT8iU0UtTlciOnRoaXMuZnJvbS5pc1NvdXRoV2VzdE9mKHRoaXMudG8pPyJTVy1ORSI6dm9pZCAwfXNldERpcmVjdGlvbihsKXtzd2l0Y2gobCl7Y2FzZSJOVy1TRSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIo''@;'; put 'put ''KSx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKV07YnJlYWs7Y2FzZSJORS1TVyI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTRS1OVyI6W3RoaXMuZnJv''@;'; put 'put ''bSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTVy1ORSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wUmln''@;'; put 'put ''aHRDb3JuZXIoKV19fWdldFZlcnRpY2FsRGlyZWN0aW9uKCl7cmV0dXJuWyJORS1TVyIsIk5XLVNFIl0uaW5kZXhPZih0aGlzLmdldERpcmVjdGlvbigpKT4tMT8iTi1TIjoiUy1OIn1nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCl7cmV0dXJuWyJOVy1TRSIsIlNXLU5FIl0uaW5kZXhPZih0aGlz''@;'; put 'put ''LmdldERpcmVjdGlvbigpKT4tMT8iVy1FIjoiRS1XIn1mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUiKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiU0Ut''@;'; put 'put ''TlciKTticmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKX19ZmxpcERpcmVjdGlvbkhvcml6b250YWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0''@;'; put 'put ''aGlzLnNldERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKTticmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUiKTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiU0UtTlciKX19Z2V0''@;'; put 'put ''VG9wU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wTGVmdENvcm5lcigpe3JldHVybiB2aCh0aGlz''@;'; put 'put ''LGdkKT90aGlzLmdldFRvcEVuZENvcm5lcigpOnRoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKX1nZXRCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRo''@;'; put 'put ''aXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tRW5kQ29ybmVyKCl9Z2V0VG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldFRvcFJpZ2h0Q29ybmVyKCl7cmV0dXJuIHZoKHRoaXMsZ2QpP3RoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldFRvcEVu''@;'; put 'put ''ZENvcm5lcigpfWdldEJvdHRvbVN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbUxlZnRDb3Ju''@;'; put 'put ''ZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5y''@;'; put 'put ''b3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlclRvcExlZnRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpfWdldE91dGVyQm90dG9tRW5kQ29ybmVy''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRPdXRl''@;'; put 'put ''ckJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpfWdldE91dGVyVG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0''@;'; put 'put ''aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpfWdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2Vs''@;'; put 'put ''bENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCl7cmV0dXJuIHZoKHRoaXMsZ2QpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdl''@;'; put 'put ''dE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKX1pc0Nvcm5lcihsLGEpe3JldHVybiEhKGEmJmEuaW5jbHVkZXMobCkmJih0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhhLmZyb20ucm93LGEuZnJvbS5jb2wpKXx8dGhpcy5nZXRPdXRl''@;'; put 'put ''clRvcFJpZ2h0Q29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGEuZnJvbS5yb3csYS50by5jb2wpKXx8dGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoYS50by5yb3csYS5mcm9tLmNvbCkpfHx0aGlzLmdl''@;'; put 'put ''dE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoYS50by5yb3csYS50by5jb2wpKSkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSl8fGwu''@;'; put 'put ''aXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1nZXRPcHBvc2l0ZUNvcm5lcihsLGEpe2lmKCEobCBpbnN0YW5jZW9mIENrKSlyZXR1cm4hMTtpZihhKXtjb25zdHtmcm9tOmQsdG86aH09''@;'; put 'put ''YTtpZihhLmluY2x1ZGVzKGwpKXtpZih0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csZC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO2lmKHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIo''@;'; put 'put ''KS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csaC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk7aWYodGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgucm93LGQuY29s''@;'; put 'put ''KSkpcmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTtpZih0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgucm93LGguY29sKSkpcmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpfX1yZXR1cm4gbC5p''@;'; put 'put ''c0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJU''@;'; put 'put ''b3BFbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dm9pZCAwfWdldEJvcmRlcnNTaGFyZWRXaXRoKGwpe2lmKCF0aGlzLmluY2x1''@;'; put 'put ''ZGVzUmFuZ2UobCkpcmV0dXJuW107Y29uc3QgYV90b3A9TWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksYV9ib3R0b209TWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksYV9sZWZ0PU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLGFfcmlnaHQ9''@;'; put 'put ''TWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksZF90b3A9TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdyksZF9ib3R0b209TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdyksZF9sZWZ0PU1hdGgubWluKGwuZnJvbS5jb2wsbC50by5jb2wpLGRfcmlnaHQ9TWF0aC5tYXgo''@;'; put 'put ''bC5mcm9tLmNvbCxsLnRvLmNvbCksaD1bXTtyZXR1cm4gYV90b3A9PT1kX3RvcCYmaC5wdXNoKCJ0b3AiKSxhX3JpZ2h0PT09ZF9yaWdodCYmaC5wdXNoKCJyaWdodCIpLGFfYm90dG9tPT09ZF9ib3R0b20mJmgucHVzaCgiYm90dG9tIiksYV9sZWZ0PT09ZF9sZWZ0JiZoLnB1c2goImxlZnQi''@;'; put 'put ''KSxofWdldElubmVyKCl7Y29uc3QgbD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxkPVtdO2ZvcihsZXQgaD1sLnJvdztoPD1hLnJvdztoKyspZm9yKGxldCBmPWwuY29sO2Y8PWEuY29sO2YrKykodGhpcy5mcm9tLnJvdyE9''@;'; put 'put ''PWh8fHRoaXMuZnJvbS5jb2whPT1mKSYmKHRoaXMudG8ucm93IT09aHx8dGhpcy50by5jb2whPT1mKSYmZC5wdXNoKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSk7cmV0dXJuIGR9Z2V0QWxsKCl7Y29uc3QgbD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0T3V0''@;'; put 'put ''ZXJCb3R0b21FbmRDb3JuZXIoKSxkPVtdO2ZvcihsZXQgaD1sLnJvdztoPD1hLnJvdztoKyspZm9yKGxldCBmPWwuY29sO2Y8PWEuY29sO2YrKylkLnB1c2gobC5yb3c9PT1oJiZsLmNvbD09PWY/bDphLnJvdz09PWgmJmEuY29sPT09Zj9hOnRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSk7''@;'; put 'put ''cmV0dXJuIGR9Zm9yQWxsKGwpe2NvbnN0IGE9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksZD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBoPWEucm93O2g8PWQucm93O2grKylmb3IobGV0IGY9YS5jb2w7Zjw9ZC5jb2w7ZisrKWlmKCExPT09bChoLGYpKXJl''@;'; put 'put ''dHVybn1jbG9uZSgpe3JldHVybiBuZXcgVU4odGhpcy5oaWdobGlnaHQsdGhpcy5mcm9tLHRoaXMudG8sdmgodGhpcyxnZCkpfXRvT2JqZWN0KCl7cmV0dXJue2Zyb206dGhpcy5mcm9tLnRvT2JqZWN0KCksdG86dGhpcy50by50b09iamVjdCgpfX1fY3JlYXRlQ2VsbENvb3JkcyhsLGEpe3Jl''@;'; put 'put ''dHVybiBuZXcgQ2sobCxhLHZoKHRoaXMsZ2QpKX19Y29uc3QgWk49VU47ZnVuY3Rpb24gXzIoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIHZBZShjKXt2YXIgbD1mdW5jdGlvbiBfQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6''@;'; put 'put ''ITB9KTpjW2xdPWEsY31jbGFzcyBZTntnZXQgZXZlbnRNYW5hZ2VyKCl7cmV0dXJuIG5ldyBsbCh0aGlzKX1jb25zdHJ1Y3RvcihsLGEpe18yKHRoaXMsInd0VGFibGUiLHZvaWQgMCksXzIodGhpcywid3RTY3JvbGwiLHZvaWQgMCksXzIodGhpcywid3RWaWV3cG9ydCIsdm9pZCAwKSxfMih0''@;'; put 'put ''aGlzLCJ3dE92ZXJsYXlzIix2b2lkIDApLF8yKHRoaXMsInNlbGVjdGlvbnMiLHZvaWQgMCksXzIodGhpcywid3RFdmVudCIsdm9pZCAwKSxfMih0aGlzLCJndWlkIixgd3RfJHthTigpfWApLF8yKHRoaXMsImRyYXdJbnRlcnJ1cHRlZCIsITEpLF8yKHRoaXMsImRyYXduIiwhMSksXzIodGhp''@;'; put 'put ''cywiZG9tQmluZGluZ3MiLHZvaWQgMCksXzIodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx0aGlzLmRvbUJpbmRpbmdzPXtyb290VGFibGU6bCxyb290RG9jdW1lbnQ6bC5vd25lckRvY3VtZW50LHJvb3RXaW5kb3c6bC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSx0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3M9YSx0aGlzLnd0U2Nyb2xsPW5ldyBjbGFzcyB0QWV7Y29uc3RydWN0b3IobCl7Qk4odGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSxCTih0aGlzLCJsYXN0U2Nyb2xsZWRDb2x1bW5Qb3MiLC0xKSxCTih0aGlzLCJsYXN0U2Nyb2xsZWRSb3dQb3MiLC0xKSx0aGlzLmRhdGFBY2Nl''@;'; put 'put ''c3NPYmplY3Q9bH1zY3JvbGxWaWV3cG9ydChsLGEsZCxoLGYpe2NvbnN0IF89dGhpcy5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLmNvbCxkLGYpLFQ9dGhpcy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobC5yb3csYSxoKTtyZXR1cm4gX3x8VH1zY3JvbGxWaWV3cG9ydEhvcml6b250''@;'; put 'put ''YWxseShsLGEsZCl7Y29uc3R7ZHJhd246aCx0b3RhbENvbHVtbnM6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFofHwhTnVtYmVyLmlzSW50ZWdlcihsKXx8bDwwfHxsPmYpcmV0dXJuITE7Y29uc3QgXz10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLFQ9dGhpcy5nZXRMYXN0Vmlz''@;'; put 'put ''aWJsZUNvbHVtbigpLFc9dm9pZCAwPT09YSYmdm9pZCAwPT09ZCx7Zml4ZWRDb2x1bW5zU3RhcnQ6aWUsaW5saW5lU3RhcnRPdmVybGF5OmdlfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoVyYmbDxpZSlyZXR1cm4hMTtsZXQgd2U9ITE7cmV0dXJuLTE9PT1fP3dlPWdlLnNjcm9sbFRvKGws''@;'; put 'put ''Vz9sPnRoaXMubGFzdFNjcm9sbGVkQ29sdW1uUG9zOmEpOihXJiYobDxffHxsPlQpfHwhVykmJih3ZT1nZS5zY3JvbGxUbyhsLFc/bD5UOmEpKSx3ZSYmKHRoaXMubGFzdFNjcm9sbGVkQ29sdW1uUG9zPWwpLHdlfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEsZCl7Y29uc3R7ZHJhd246''@;'; put 'put ''aCx0b3RhbFJvd3M6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFofHwhTnVtYmVyLmlzSW50ZWdlcihsKXx8bDwwfHxsPmYpcmV0dXJuITE7Y29uc3QgXz10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLFQ9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpLFc9dm9pZCAwPT09YSYmdm9pZCAw''@;'; put 'put ''PT09ZCx7Zml4ZWRSb3dzQm90dG9tOmllLGZpeGVkUm93c1RvcDpnZSx0b3BPdmVybGF5OndlfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoVyYmKGw8Z2V8fGw+Zi1pZS0xKSlyZXR1cm4hMTtsZXQgRWU9ITE7cmV0dXJuLTE9PT1fP0VlPXdlLnNjcm9sbFRvKGwsVz9sPnRoaXMubGFzdFNj''@;'; put 'put ''cm9sbGVkUm93UG9zOmQpOihXJiYobDxffHxsPlQpfHwhVykmJihFZT13ZS5zY3JvbGxUbyhsLFc/bD5UOmQpKSxFZSYmKHRoaXMubGFzdFNjcm9sbGVkUm93UG9zPWwpLEVlfWdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRv''@;'; put 'put ''dGFsUm93czpoLGZpeGVkUm93c1RvcDpmLHJvb3RXaW5kb3c6X309dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBUPWEuZ2V0Rmlyc3RWaXNpYmxlUm93KCk7aWYobC5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PV8pe2NvbnN0IFc9cWwoYS53dFJvb3RFbGVtZW50KSxpZT1qZihhLmhp''@;'; put 'put ''ZGVyKSxnZT1qZihfKSx3ZT10eShfLF8pO2lmKFcudG9wK2llLWdlPD13ZSl7bGV0IEVlPWQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk7RWUrPWwuc3VtQ2VsbFNpemVzKDAsZik7Zm9yKGxldCBaZT1oO1plPjA7WmUtLSlpZihFZSs9bC5zdW1DZWxsU2l6ZXMoWmUtMSxaZSksVy50b3AraWUt''@;'; put 'put ''RWU8PXdlKXtUPVplO2JyZWFrfX19cmV0dXJuIFR9Z2V0TGFzdFZpc2libGVSb3coKXtjb25zdHt0b3BPdmVybGF5Omwsd3RUYWJsZTphLHd0Vmlld3BvcnQ6ZCx0b3RhbFJvd3M6aCxyb290V2luZG93OmZ9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtsZXQgXz1hLmdldExhc3RWaXNpYmxlUm93''@;'; put 'put ''KCk7aWYobC5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWYpe2NvbnN0IFQ9cWwoYS53dFJvb3RFbGVtZW50KSxXPXR5KGYsZik7aWYoVC50b3A+Vyl7Y29uc3QgaWU9amYoZik7bGV0IGdlPWQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk7Zm9yKGxldCB3ZT0xO3dlPD1oO3dlKyspaWYo''@;'; put 'put ''Z2UrPWwuc3VtQ2VsbFNpemVzKHdlLTEsd2UpLFQudG9wK2dlLVc+PWllKXtfPXdlLTI7YnJlYWt9fX1yZXR1cm4gX31nZXRGaXJzdFZpc2libGVDb2x1bW4oKXtjb25zdHtpbmxpbmVTdGFydE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRvdGFsQ29sdW1uczpoLHJvb3RXaW5k''@;'; put 'put ''b3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBfPWEuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCk7aWYobC5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWYpe2NvbnN0IFQ9cWwoYS53dFJvb3RFbGVtZW50KSxXPXJ5KGEuaGlkZXIpLGllPXJ5KGYpLGdlPU1hdGguYWJzKHJrKGYs''@;'; put 'put ''ZikpO2lmKFQubGVmdCtXLWllPD1nZSl7bGV0IHdlPWQuZ2V0Um93SGVhZGVyV2lkdGgoKTtmb3IobGV0IEVlPWg7RWU+MDtFZS0tKWlmKHdlKz1sLnN1bUNlbGxTaXplcyhFZS0xLEVlKSxULmxlZnQrVy13ZTw9Z2Upe189RWU7YnJlYWt9fX1yZXR1cm4gX31nZXRMYXN0VmlzaWJsZUNvbHVt''@;'; put 'put ''bigpe2NvbnN0e3d0U2V0dGluZ3M6bCxpbmxpbmVTdGFydE92ZXJsYXk6YSx3dFRhYmxlOmQsd3RWaWV3cG9ydDpoLHRvdGFsQ29sdW1uczpmLHJvb3RXaW5kb3c6X309dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBUPWQuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTtpZihhLm1haW5UYWJsZVNj''@;'; put 'put ''cm9sbGFibGVFbGVtZW50PT09Xyl7bGV0IGllPW51bGw7aWYobC5nZXRTZXR0aW5nKCJydGxNb2RlIikpe2NvbnN0IHdlPWQuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWU9TWF0aC5hYnMod2UucmlnaHQtdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvb3RXaW5kb3cuZG9jdW1lbnQu''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoKX1lbHNlIGllPXFsKGQud3RSb290RWxlbWVudCkubGVmdDtjb25zdCBnZT1NYXRoLmFicyhyayhfLF8pKTtpZihpZT5nZSl7Y29uc3Qgd2U9cnkoXyk7bGV0IEVlPWguZ2V0Um93SGVhZGVyV2lkdGgoKTtmb3IobGV0IFplPTE7WmU8PWY7WmUr''@;'; put 'put ''KylpZihFZSs9YS5zdW1DZWxsU2l6ZXMoWmUtMSxaZSksaWUrRWUtZ2U+PXdlKXtUPVplLTI7YnJlYWt9fX1yZXR1cm4gVH19KHRoaXMuY3JlYXRlU2Nyb2xsRGFvKCkpfWZpbmRPcmlnaW5hbEhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzLmxl''@;'; put 'put ''bmd0aCYmdGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGgpe2ZvcihsZXQgYT0wLGQ9dGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKylsLnB1c2godGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9k''@;'; put 'put ''ZXNbMF0uY2hpbGROb2Rlc1thXS5pbm5lckhUTUwpO3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RofHx0aGlzLnd0U2V0dGluZ3MudXBkYXRlKCJjb2x1bW5IZWFkZXJzIixbZnVuY3Rpb24oYSxkKXtqcChkLGxbYV0pfV0pfX1jcmVhdGVDZWxsQ29v''@;'; put 'put ''cmRzKGwsYSl7cmV0dXJuIG5ldyBDayhsLGEsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gbmV3IFpOKGwsYSxkLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikpfWRyYXcoKXtsZXQgbD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMSxsfHx0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCk/dGhpcy53dFRhYmxlLmRyYXcobCk6dGhpcy5kcmF3SW50ZXJydXB0ZWQ9ITAsdGhpc31nZXRD''@;'; put 'put ''ZWxsKGwpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpcmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGwpO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGg9dGhpcy53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLF89dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYobC5yb3c8aCYmbC5jb2w8XylyZXR1cm4gdGhpcy53dE92ZXJs''@;'; put 'put ''YXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5yb3c8aClyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwuY29sPF8mJmwucm93Pj1kLWYpe2lmKHRoaXMud3RPdmVy''@;'; put 'put ''bGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxs''@;'; put 'put ''KGwpfWVsc2V7aWYobC5jb2w8XylyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5yb3c8ZCYmbC5yb3c+PWQtZiYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21P''@;'; put 'put ''dmVybGF5LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9cmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGwpfXNjcm9sbFZpZXdwb3J0KGwsYSxkLGgsZil7cmV0dXJuIShsLmNvbDwwfHxsLnJvdzwwKSYmdGhpcy53''@;'; put 'put ''dFNjcm9sbC5zY3JvbGxWaWV3cG9ydChsLGEsZCxoLGYpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSxkKXtyZXR1cm4hKGw8MCkmJnRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEsZCl7cmV0''@;'; put 'put ''dXJuIShsPDApJiZ0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEsZCl9Z2V0Vmlld3BvcnQoKXtyZXR1cm5bdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSx0aGlzLnd0VGFibGUuZ2V0''@;'; put 'put ''TGFzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKV19ZGVzdHJveSgpe3RoaXMud3RPdmVybGF5cy5kZXN0cm95KCksdGhpcy53dEV2ZW50LmRlc3Ryb3koKX1jcmVhdGVTY3JvbGxEYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCBkcmF3bigpe3Jl''@;'; put 'put ''dHVybiBsLmRyYXdufSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5fSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdldCB3''@;'; put 'put ''dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gbC53dFNldHRpbmdzfSxnZXQgcm9vdFdpbmRvdygpe3JldHVybiBsLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9LGdldCB0b3RhbFJvd3MoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoInRvdGFsUm93cyIpfSxnZXQgdG90YWxDb2x1bW5zKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKX0sZ2V0IGZpeGVkUm93c1RvcCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9LGdldCBmaXhlZFJvd3NC''@;'; put 'put ''b3R0b20oKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpfSxnZXQgZml4ZWRDb2x1bW5zU3RhcnQoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iil9fX1nZXRUYWJsZURhbygpe2NvbnN0IGw9dGhpczty''@;'; put 'put ''ZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgcGFyZW50VGFibGVPZmZzZXQoKXtyZXR1cm4gbC5jbG9uZVNvdXJjZS53dFRhYmxlLnRhYmxlT2Zmc2V0fSxnZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gbC5jbG9uZVNvdXJjZX0sZ2V0IHdvcmtzcGFjZVdpZHRoKCl7cmV0dXJuIGwud3RW''@;'; put 'put ''aWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpfSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiBsLnd0Vmlld3BvcnR9LGdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIGwud3RPdmVybGF5c30sZ2V0IHNlbGVjdGlvbnMoKXtyZXR1cm4gbC5zZWxlY3Rpb25zfSxnZXQgZHJhd24oKXtyZXR1cm4gbC5k''@;'; put 'put ''cmF3bn0sc2V0IGRyYXduKGEpe2wuZHJhd249YX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gbC53dFRhYmxlfSxnZXQgc3RhcnRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBzdGFydENvbHVtblZpc2li''@;'; put 'put ''bGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IGVuZENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBlbmRDb2x1bW5WaXNpYmxlKCl7''@;'; put 'put ''cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgY291bnRDb2x1bW5zUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRDb2x1bW5zVmlzaWJsZSgpe3JldHVy''@;'; put 'put ''biBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgc3RhcnRSb3dSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBzdGFydFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJv''@;'; put 'put ''d3NWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IGVuZFJvd1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBlbmRSb3dWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuZW5k''@;'; put 'put ''Um93fSxnZXQgY291bnRSb3dzUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRSb3dzVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fX19fWZ1bmN0aW9uIEt0ZShj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gYkFlKGMpe3ZhciBsPWZ1bmN0aW9uIHlBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHdBZSBleHRlbmRzIFlOe2NvbnN0cnVjdG9yKGwsYSxkKXtz''@;'; put 'put ''dXBlcihsLGEpLEt0ZSh0aGlzLCJjbG9uZVNvdXJjZSIsdm9pZCAwKSxLdGUodGhpcywiY2xvbmVPdmVybGF5Iix2b2lkIDApO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy5jbG9uZVNvdXJjZT1kLnNvdXJjZSx0aGlzLmNsb25lT3Zlcmxh''@;'; put 'put ''eT1kLm92ZXJsYXksdGhpcy53dFRhYmxlPXRoaXMuY2xvbmVPdmVybGF5LmNyZWF0ZVRhYmxlKHRoaXMuZ2V0VGFibGVEYW8oKSxoLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9ZC52aWV3cG9ydCx0aGlzLnNlbGVjdGlvbnM9ZC5zZWxlY3Rpb25z''@;'; put 'put ''LHRoaXMud3RFdmVudD1uZXcgVnRlKGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9ucyxkLmV2ZW50KSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX19Y2xhc3MgZnl7Y29uc3RydWN0b3IobCxh''@;'; put 'put ''LGQsaCxmKXsoZnVuY3Rpb24gQ0FlKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBTQWUoYyl7dmFyIGw9ZnVuY3Rpb24gTUFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJ3dFNldHRpbmdz''@;'; put 'put ''IixudWxsKSxmaCh0aGlzLCJ3b3QiLGwse3dyaXRhYmxlOiExfSksdGhpcy5kb21CaW5kaW5ncz1mLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNldHRpbmdzPWg7Y29uc3R7VEFCTEU6XyxoaWRlcjpULHNwcmVhZGVyOlcsaG9sZGVyOmllLHd0Um9vdEVsZW1lbnQ6Z2V9PXRoaXMud290''@;'; put 'put ''Lnd0VGFibGU7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLnR5cGU9ZCx0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PW51bGwsdGhpcy5UQUJMRT1fLHRoaXMuaGlkZXI9VCx0aGlzLnNwcmVhZGVyPVcsdGhpcy5ob2xkZXI9aWUsdGhpcy53dFJvb3RFbGVtZW50PWdlLHRoaXMu''@;'; put 'put ''dHJpbW1pbmdDb250YWluZXI9dmcodGhpcy5oaWRlci5wYXJlbnROb2RlLnBhcmVudE5vZGUpLHRoaXMudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpLHRoaXMuY2xvbmU9dGhpcy5tYWtlQ2xvbmUoKX11cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl7Y29uc3QgbD10aGlzLm5lZWRGdWxsUmVuZGVy''@;'; put 'put ''O3RoaXMubmVlZEZ1bGxSZW5kZXI9dGhpcy5zaG91bGRCZVJlbmRlcmVkKCk7Y29uc3QgYT1sIT09dGhpcy5uZWVkRnVsbFJlbmRlcjtyZXR1cm4gYSYmIXRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMucmVzZXQoKSxhfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4hMH11cGRhdGVUcmltbWlu''@;'; put 'put ''Z0NvbnRhaW5lcigpe3RoaXMudHJpbW1pbmdDb250YWluZXI9dmcodGhpcy5oaWRlci5wYXJlbnROb2RlLnBhcmVudE5vZGUpfXVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Qse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5nczt0aGlz''@;'; put 'put ''Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGwud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP3RoaXMud290Lnd0VGFibGUuaG9sZGVyOm55KGwuVEFCTEUpfWdldFJlbGF0aXZlQ2Vs''@;'; put 'put ''bFBvc2l0aW9uKGwsYSxkKXtpZighMT09PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuY29udGFpbnMobCkpcmV0dXJuIHZvaWQgR2EoYFRoZSBwcm92aWRlZCBlbGVtZW50IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSAke3RoaXMudHlwZX0gb3ZlcmxheWApO2NvbnN0IGg9dGhpcy5tYWluVGFi''@;'; put 'put ''bGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyxmPWQ8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksXz1hPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxUPWE+PXRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksVz10aGlzLmNsb25lLnd0VGFibGUuc3ByZWFkZXIsaWU9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKFcpLHRvcDpXLm9mZnNldFRvcH0s''@;'; put 'put ''Z2U9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpLHRvcDpsLm9mZnNldFRvcH07bGV0IHdlPW51bGw7cmV0dXJuIHdlPWg/dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyhfLGYsZ2UsaWUpOnRoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25X''@;'; put 'put ''aXRoaW5Ib2xkZXIoXyxULGYsZ2UsaWUpLHdlfWdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5pc1J0bCgpP2wub2Zmc2V0UGFyZW50Lm9mZnNldFdpZHRoLWwub2Zmc2V0TGVmdC1sLm9mZnNldFdpZHRoOmwub2Zmc2V0TGVmdH1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlv''@;'; put 'put ''bldpdGhpbldpbmRvdyhsLGEsZCxoKXtjb25zdCBmPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgXz0wLFQ9MDtpZihhKXtsZXQgVz1mLmxlZnQ7dGhpcy5pc1J0bCgpJiYoVz10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cuaW5u''@;'; put 'put ''ZXJXaWR0aC0oZi5sZWZ0K2Yud2lkdGgrSWMoKSkpLF89Vzw9MD8tMSpXOjB9ZWxzZSBfPWguc3RhcnQ7cmV0dXJuIFQ9bD90aGlzLmNsb25lLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLWYudG9wOmgudG9wLHtzdGFydDpkLnN0YXJ0K18sdG9wOmQudG9wK1R9''@;'; put 'put ''fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluSG9sZGVyKGwsYSxkLGgsZil7Y29uc3QgX19ob3Jpem9udGFsPXRoaXMud290Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksX192ZXJ0aWNhbD10aGlzLndvdC53dE92ZXJsYXlzLnRvcE92ZXJs''@;'; put 'put ''YXkuZ2V0U2Nyb2xsUG9zaXRpb24oKTtsZXQgVD0wLFc9MDtpZihkfHwoVD1fX2hvcml6b250YWwtZi5zdGFydCksYSl7Y29uc3QgaWU9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1c9LTEqdGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdl''@;'; put 'put ''dEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtpZS50b3B9ZWxzZSBsfHwoVz1fX3ZlcnRpY2FsLWYudG9wKTtyZXR1cm57c3RhcnQ6aC5zdGFydC1ULHRvcDpoLnRvcC1XfX1tYWtlQ2xvbmUoKXtpZigtMT09PVlrZS5pbmRleE9mKHRoaXMudHlwZSkpdGhyb3cgbmV3IEVycm9yKGBDbG9uZSB0''@;'; put 'put ''eXBlICIke3RoaXMudHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmEscm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9YS5jcmVhdGVFbGVtZW50KCJESVYiKSxmPWEuY3JlYXRlRWxlbWVudCgiVEFCTEUiKSxf''@;'; put 'put ''PWwud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2guY2xhc3NOYW1lPWAke1drZS5nZXQodGhpcy50eXBlKX0gaGFuZHNvbnRhYmxlYCxoLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmlzUnRsKCk/InJ0bCI6Imx0ciIpLGguc3R5bGUucG9zaXRpb249ImFic29sdXRlIixoLnN0eWxlLnRvcD0w''@;'; put 'put ''LGguc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHRoaXMuaXNSdGwoKT9oLnN0eWxlLnJpZ2h0PTA6aC5zdHlsZS5sZWZ0PTAsZi5jbGFzc05hbWU9bC5UQUJMRS5jbGFzc05hbWUsaC5hcHBlbmRDaGlsZChmKSxfLmFwcGVuZENoaWxkKGgpO2NvbnN0IFQ9dGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSEwPT09VHx8Imhvcml6b250YWwiPT09VCYmdGhpcy50eXBlPT09eWd8fCJ2ZXJ0aWNhbCI9PT1UJiZ0aGlzLnR5cGU9PT13Zz9kOiJoaWRkZW4iPT09ZC5nZXRDb21wdXRlZFN0''@;'; put 'put ''eWxlKF8pLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6bnkobC5UQUJMRSksbmV3IHdBZShmLHRoaXMud3RTZXR0aW5ncyx7c291cmNlOnRoaXMud290LG92ZXJsYXk6dGhpcyx2aWV3cG9ydDp0aGlzLndvdC53dFZpZXdwb3J0LGV2ZW50OnRoaXMud290Lnd0RXZlbnQs''@;'; put 'put ''c2VsZWN0aW9uczp0aGlzLndvdC5zZWxlY3Rpb25zfSl9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgYT10aGlzLnNob3VsZEJlUmVuZGVyZWQoKTt0aGlzLmNsb25lJiYodGhpcy5uZWVkRnVsbFJl''@;'; put 'put ''bmRlcnx8YSkmJnRoaXMuY2xvbmUuZHJhdyhsKSx0aGlzLm5lZWRGdWxsUmVuZGVyPWF9cmVzZXQoKXtpZighdGhpcy5jbG9uZSlyZXR1cm47Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyO0luKFtsLnN0eWxlLHRoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZSxsLnBhcmVu''@;'; put 'put ''dE5vZGUuc3R5bGVdLF89PntfLndpZHRoPSIiLF8uaGVpZ2h0PSIifSl9aXNSdGwoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKX1kZXN0cm95KCl7dGhpcy5jbG9uZS5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1jbGFzcyBBQWUgZXh0ZW5kcyBmeXtjb25z''@;'; put 'put ''dHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEseWcsZCxoKSxmdW5jdGlvbiB4QWUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIEVBZShjKXt2YXIgbD1mdW5jdGlvbiBrQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n''@;'; put 'put ''Ij09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpj''@;'; put 'put ''W2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dzVG9wIiwtMSksdGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0w''@;'; put 'put ''O2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBKa2UoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxs''@;'; put 'put ''UmVuZGVyfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZl''@;'; put 'put ''bnRPdmVyZmxvdyIpO2xldCBoPTAsZj0hMTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09YXx8ZCYmInZlcnRpY2FsIj09PWQpaD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksb3kobCk7ZWxzZXtjb25zdHt3dFRhYmxlOlR9PXRoaXMud290LFc9VC5oaWRlci5nZXRCb3VuZGluZ0NsaWVu''@;'; put 'put ''dFJlY3QoKTtmPU1hdGguY2VpbChXLmJvdHRvbSk9PT1sLm9mZnNldEhlaWdodCxoPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpLGlrKGwsIjBweCIsYCR7aH1weGApfWNvbnN0IF89dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oaCxmKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50''@;'; put 'put ''c1NpemUoKSxffXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93O2xldCBkPSExO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09YSYmYS5zY3JvbGxZIT09bD8oYS5zY3JvbGxUbyhtZyhhKSxsKSxkPSEwKTp0aGlz''@;'; put 'put ''Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcCE9PWwmJih0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcD1sLGQ9ITApLGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxIb3Jpem9udGFsbHkiKX1zdW1DZWxs''@;'; put 'put ''U2l6ZXMobCxhKXtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0Iik7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KXtjb25zdCBfPXRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGgpO2YrPXZvaWQgMD09PV8/ZDpfLGgrPTF9cmV0dXJuIGZ9YWRq''@;'; put 'put ''dXN0RWxlbWVudHNTaXplKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksKHRoaXMubmVlZEZ1bGxSZW5kZXJ8fGwpJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUo''@;'; put 'put ''KSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmEscm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9SWMoYSksXz10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVy''@;'; put 'put ''LnBhcmVudE5vZGUuc3R5bGUsVD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWR8fCJob3Jpem9udGFsIj09PVQpe2xldCBpZT10aGlzLndvdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCk7dGhp''@;'; put 'put ''cy53b3Qud3RPdmVybGF5cy5oYXNTY3JvbGxiYXJSaWdodCYmKGllLT1oKSxpZT1NYXRoLm1pbihpZSxsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsV2lkdGgpLF8ud2lkdGg9YCR7aWV9cHhgfWVsc2UgXy53aWR0aD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPV8ud2lk''@;'; put 'put ''dGg7bGV0IFc9YWwodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTt0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChXPTApLF8uaGVpZ2h0PWAke1d9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXt2YXIgbDtjb25zdHtob2xkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlLHtz''@;'; put 'put ''ZWxlY3Rpb25zOmR9PXRoaXMud290LGg9dGhpcy5mYWNhZGVHZXR0ZXIoKSxmPU1hdGguYWJzKG51bGwhPT0obD1kPy5nZXRDZWxsKCkuZ2V0Qm9yZGVyKGgpLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0KSYmdm9pZCAwIT09bD9sOjApO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53''@;'; put 'put ''aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGEuc3R5bGUud2lkdGg9YS5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGEuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGEucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsMTApK2Z9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxh''@;'; put 'put ''dG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVl''@;'; put 'put ''ZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IGw9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0''@;'; put 'put ''Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d290OmQsd3RTZXR0aW5nczpofT10aGlzLF89KGQu''@;'; put 'put ''Y2xvbmVTb3VyY2U/ZC5jbG9uZVNvdXJjZTpkKS53dFRhYmxlLmhvbGRlcjtsZXQgVD10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksVz0wO2lmKGEmJnRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGwpPnRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKSYmKGE9''@;'; put 'put ''ITEpLGEmJl8ub2Zmc2V0SGVpZ2h0IT09Xy5jbGllbnRIZWlnaHQmJihXPUljKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYSl7Y29uc3QgaWU9aC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxnZT1oLmdldFNldHRpbmcoInRvdGFsUm93cyIpO1QrPXRoaXMuc3VtQ2Vs''@;'; put 'put ''bFNpemVzKDAsbCsxKSxULT1kLnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKS10aGlzLnN1bUNlbGxTaXplcyhnZS1pZSxnZSksVCs9MX1lbHNlIFQrPXRoaXMuc3VtQ2VsbFNpemVzKGguZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksbCk7cmV0dXJuIFQrPVcsdGhpcy5zZXRTY3Jv''@;'; put 'put ''bGxQb3NpdGlvbihUKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHR5KHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVy''@;'; put 'put ''ZmxvdyIpO2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lcj09PWwmJighYXx8InZlcnRpY2FsIiE9PWEpKXtjb25zdCBfPXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKS10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKTtkPU1hdGgubWF4KHRoaXMuZ2V0''@;'; put 'put ''U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksMCksZD5fJiYoZD0wKX1yZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25z''@;'; put 'put ''dCBkPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpP1dvKGQsImVtcHR5Q29sdW1ucyIpOnBpKGQsImVtcHR5Q29sdW1ucyIpO2xldCBmPSExO2lmKCFhKXtjb25zdCBfPXRoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxUPXRoaXMuY2FjaGVkRml4ZWRSb3dzVG9wIT09XyxXPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7aWYoKFR8fDA9PT1fKSYmVy5sZW5ndGg+MCl7Y29uc3QgaWU9Qm8oZCwiaW5uZXJCb3JkZXJUb3AiKTt0aGlz''@;'; put 'put ''LmNhY2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksbHx8MD09PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT8ocGkoZCwiaW5uZXJCb3JkZXJUb3AiKSxmPSFpZSk6KFdvKGQsImlubmVyQm9yZGVyVG9wIiks''@;'; put 'put ''Zj1pZSl9fXJldHVybiBmfX1jb25zdCBYdGU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxhPWMtbDtyZXR1cm4gMD09PWN8''@;'; put 'put ''fDA9PT1sPy0xOmE8MD8wOmF9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xfSxnZXRMYXN0VmlzaWJsZVJvdygp''@;'; put 'put ''e3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9t''@;'; put 'put ''IiksYyl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpfX07ZmgoWHRlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c0JvdHRvbSIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBKdGU9WHRlO2NsYXNzIFdOIGV4dGVuZHMg''@;'; put 'put ''dTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxnaCl9fVRhKFdOLEp0ZSksVGEoV04sTk4pO2NvbnN0IERBZT1XTjtjbGFzcyBPQWUgZXh0ZW5kcyBmeXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZ2gsZCxoKSxmdW5jdGlvbiBJQWUoYyxsLGEpe3JldHVybiBs''@;'; put 'put ''PWZ1bmN0aW9uIExBZShjKXt2YXIgbD1mdW5jdGlvbiBSQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s''@;'; put 'put ''OlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dzQm90dG9tIiwtMSksdGhpcy5jYWNoZWRGaXhlZFJvd3NC''@;'; put 'put ''b3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBEQWUoLi4uYSl9c2hvdWxk''@;'; put 'put ''QmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4h''@;'; put 'put ''MTtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7YS5zdHlsZS50b3A9IiI7bGV0IGQ9MDtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt0aGlzLnRyaW1t''@;'; put 'put ''aW5nQ29udGFpbmVyIT09bHx8aCYmInZlcnRpY2FsIj09PWg/KGQ9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKSk6KGQ9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksYS5zdHlsZS5ib3R0b209YCR7ZH1weGApO2NvbnN0IGY9dGhpcy5hZGp1c3RIZWFk''@;'; put 'put ''ZXJCb3JkZXJzUG9zaXRpb24oZCk7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksZn1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuY2xvbmUud3RU''@;'; put 'put ''YWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoZis9SWMoZCkpLGguc3R5''@;'; put 'put ''bGUuYm90dG9tPWAke2Z9cHhgfXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztsZXQgZD0hMTtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWE/KGEuc2Nyb2xsVG8obWcoYSksbCksZD0hMCk6dGhpcy5tYWlu''@;'; put 'put ''VGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3AhPT1sJiYodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A9bCxkPSEwKSxkfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVz''@;'; put 'put ''KGwsYSl7Y29uc3R7d3RUYWJsZTpkLHd0U2V0dGluZ3M6aH09dGhpcy53b3QsZj1oLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtsZXQgXz1sLFQ9MDtmb3IoO188YTspe2NvbnN0IFc9ZC5nZXRSb3dIZWlnaHQoXyk7VCs9dm9pZCAwPT09Vz9mOlcsXys9MX1yZXR1cm4gVH1hZGp1''@;'; put 'put ''c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwodGhpcy5uZWVkRnVsbFJlbmRlcnx8bCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgp''@;'; put 'put ''LHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLGY9SWMoZCksVD10aGlzLmNsb25lLnd0''@;'; put 'put ''VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsVz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJob3Jpem9udGFsIj09PVcpe2xldCBnZT1hLmdldFdvcmtzcGFjZVdpZHRoKCk7dGhpcy53b3Qu''@;'; put 'put ''d3RPdmVybGF5cy5oYXNTY3JvbGxiYXJSaWdodCYmKGdlLT1mKSxnZT1NYXRoLm1pbihnZSxsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsV2lkdGgpLFQud2lkdGg9YCR7Z2V9cHhgfWVsc2UgVC53aWR0aD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPVQud2lkdGg7bGV0''@;'; put 'put ''IGllPWFsKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7dGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoaWU9MCksVC5oZWlnaHQ9YCR7aWV9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6bH09dGhpcy5jbG9uZS53dFRhYmxlO3RoaXMuY2xvbmUu''@;'; put 'put ''d3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwuc3R5bGUuaGVpZ2h0PWwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHR9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0''@;'; put 'put ''b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5zcHJlYWRlci5zdHlsZS5ib3R0b209IiIsdGhpcy5uZWVk''@;'; put 'put ''RnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTthLnN0eWxlW2xdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RW''@;'; put 'put ''aWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtsZXQgZD10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCk7Y29u''@;'; put 'put ''c3QgZj0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCBfPTA7YSYmZi5vZmZzZXRIZWlnaHQhPT1mLmNsaWVudEhlaWdodCYmKF89SWModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhkKz10aGlz''@;'; put 'put ''LnN1bUNlbGxTaXplcygwLGwrMSksZC09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLGQrPTEpOmQrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxsKSxkKz1fLHRoaXMuc2V0U2Nyb2xsUG9zaXRp''@;'; put 'put ''b24oZCl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiB0eSh0''@;'; put 'put ''aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTts''@;'; put 'put ''ZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3QgaD10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksXz1oLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLFQ9dGhpcy5kb21CaW5kaW5ncy5yb290''@;'; put 'put ''RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtkPU1hdGgubWF4KHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktVCtoLDApLGQ+XyYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGQ9dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b20hPT1hLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtsZXQgZj0hMTtpZigoZHx8MD09PWEpJiZoLmxlbmd0aD4wKXtj''@;'; put 'put ''b25zdCBfPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsVD1CbyhfLCJpbm5lckJvcmRlckJvdHRvbSIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxsfHwwPT09dGhpcy53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhwaShfLCJpbm5lckJvcmRlckJvdHRvbSIpLGY9IVQpOihXbyhfLCJpbm5lckJvcmRlckJvdHRvbSIpLGY9VCl9cmV0dXJuIGZ9fWNvbnN0IFF0ZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0''@;'; put 'put ''YXJ0Um93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFB''@;'; put 'put ''Y2Nlc3NPYmplY3QuZW5kUm93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1JlbmRlcmVkfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NWaXNpYmxlfX07ZmgoUXRlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZFJvd3MiLHt3cml0YWJsZTohMSxlbnVt''@;'; put 'put ''ZXJhYmxlOiExfSk7Y29uc3QgZW5lPVF0ZSx0bmU9e2dldEZpcnN0UmVuZGVyZWRDb2x1bW4oKXtyZXR1cm4gMD09PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKT8tMTowfSxnZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRl''@;'; put 'put ''cmVkQ29sdW1uKCl9LGdldExhc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtj''@;'; put 'put ''b25zdCBjPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKTtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksYyl9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJl''@;'; put 'put ''ZENvbHVtbnNDb3VudCgpfX07ZmgodG5lLCJNSVhJTl9OQU1FIiwic3RpY2t5Q29sdW1uc1N0YXJ0Iix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IEdOPXRuZTtjbGFzcyAkTiBleHRlbmRzIHU3e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsd2cpfX1UYSgk''@;'; put 'put ''TixlbmUpLFRhKCROLEdOKTtjb25zdCBIQWU9JE47Y2xhc3MgTkFlIGV4dGVuZHMgZnl7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLHdnLGQsaCl9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFy''@;'; put 'put ''Z3VtZW50c1tkXTtyZXR1cm4gbmV3IEhBZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290''@;'; put 'put ''O2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhbC5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJl''@;'; put 'put ''dmVudE92ZXJmbG93Iik7bGV0IGY9MDt0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09YXx8aCYmImhvcml6b250YWwiPT09aD8oZj10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksb3koZCkpOihmPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSksaWsoZCxgJHtmfXB4''@;'; put 'put ''YCwiMHB4IikpO2NvbnN0IF89dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksX31zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7bGV0IGQ9ITE7cmV0dXJuIHRo''@;'; put 'put ''aXMuaXNSdGwoKSYmKGw9LWwpLHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1hJiZhLnNjcm9sbFghPT1sPyhhLnNjcm9sbFRvKGwsdDcoYSkpLGQ9ITApOnRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCE9PWwmJih0aGlzLm1haW5UYWJsZVNjcm9s''@;'; put 'put ''bGFibGVFbGVtZW50LnNjcm9sbExlZnQ9bCxkPSEwKSxkfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsVmVydGljYWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0''@;'; put 'put ''aCIpO2xldCBoPWwsZj0wO2Zvcig7aDxhOylmKz10aGlzLndvdC53dFRhYmxlLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGgpfHxkLGgrPTE7cmV0dXJuIGZ9YWRqdXN0RWxlbWVudHNTaXplKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3Vt''@;'; put 'put ''ZW50c1swXTt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksKHRoaXMubmVlZEZ1bGxSZW5kZXJ8fGwpJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTps''@;'; put 'put ''fT10aGlzLndvdCx7cm9vdERvY3VtZW50OmEscm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9SWMoYSksXz10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsVD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhp''@;'; put 'put ''cy50cmltbWluZ0NvbnRhaW5lciE9PWR8fCJ2ZXJ0aWNhbCI9PT1UKXtsZXQgaWU9dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKTt0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJhckJvdHRvbSYmKGllLT1oKSxpZT1NYXRoLm1pbihpZSxsLnd0Um9vdEVsZW1l''@;'; put 'put ''bnQuc2Nyb2xsSGVpZ2h0KSxfLmhlaWdodD1gJHtpZX1weGB9ZWxzZSBfLmhlaWdodD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLmhlaWdodD1fLmhlaWdodDtjb25zdCBXPXdhKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Xy53aWR0aD1gJHtXfXB4YH1hZGp1c3RSb290''@;'; put 'put ''Q2hpbGRyZW5TaXplKCl7dmFyIGw7Y29uc3R7aG9sZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZSx7c2VsZWN0aW9uczpkfT10aGlzLndvdCxoPXRoaXMuZmFjYWRlR2V0dGVyKCksZj1NYXRoLmFicyhudWxsIT09KGw9ZD8uZ2V0Q2VsbCgpLmdldEJvcmRlcihoKS5jb3JuZXJDZW50ZXJQb2lu''@;'; put 'put ''dE9mZnNldCkmJnZvaWQgMCE9PWw/bDowKTt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGlkZXIuc3R5bGUuaGVpZ2h0LGEuc3R5bGUuaGVpZ2h0PWEucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsYS5zdHlsZS53aWR0aD1gJHtwYXJzZUludChhLnBhcmVudE5v''@;'; put 'put ''ZGUuc3R5bGUud2lkdGgsMTApK2Z9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxhPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0IjtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1u''@;'; put 'put ''c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPWAke3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1''@;'; put 'put ''ZSBvZiB0aGUgY29sdW1uc1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPSIwIn10aGlzLmlzUnRsKCk/dGhpcy5zcHJlYWRlci5zdHlsZS5sZWZ0PSIiOnRoaXMuc3ByZWFkZXIuc3R5bGUucmlnaHQ9IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3Zl''@;'; put 'put ''cmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLnN0eWxlLnRvcD0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0''@;'; put 'put ''LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7bGV0IGQ9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpO2NvbnN0IGY9KHRoaXMud290LmNsb25lU291cmNlP3RoaXMud290LmNsb25lU291cmNlOnRoaXMud290KS53dFRhYmxlLmhvbGRl''@;'; put 'put ''cjtsZXQgXz0wO3JldHVybiBhJiZ0aGlzLndvdC53dFRhYmxlLmdldENvbHVtbldpZHRoKGwpPnRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpJiYoYT0hMSksYSYmZi5vZmZzZXRXaWR0aCE9PWYuY2xpZW50V2lkdGgmJihfPUljKHRoaXMuZG9tQmluZGluZ3Mucm9vdERv''@;'; put 'put ''Y3VtZW50KSksYT8oZCs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLGQtPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpKTpkKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxsKSxkKz1fLHRoaXMu''@;'; put 'put ''c2V0U2Nyb2xsUG9zaXRpb24oZCl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtsZXQgYT0wO3JldHVybiF0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93IikmJnRoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cmJihhPXRo''@;'; put 'put ''aXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LmxlZnQpLGF9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gTWF0aC5hYnMocmsodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpKX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9v''@;'; put 'put ''dFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7cmV0dXJuIHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1sfHxhJiYiaG9yaXpvbnRhbCI9PT1hfHwoZD10aGlzLmlzUnRsKCk/TWF0aC5hYnMo''@;'; put 'put ''TWF0aC5taW4odGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSwwKSk6TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwwKSxkPnRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxXaWR0aCgp''@;'; put 'put ''LXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCkmJihkPTApKSxkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLGg9''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpP1dvKGEsImVtcHR5Um93cyIpOnBpKGEsImVtcHR5Um93cyIpO2xldCBfPSExO2lmKGgmJiFkLmxlbmd0aClwaShhLCJpbm5lckJvcmRl''@;'; put 'put ''ckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2Vsc2UgaWYoIWgmJmQubGVuZ3RoKXtjb25zdCBUPUJvKGEsImlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtsPyhwaShhLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLF89IVQpOihXbyhhLCJpbm5lckJvcmRl''@;'; put 'put ''ckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLF89VCl9cmV0dXJuIF99fWNsYXNzIHFOIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxDZyl9fVRhKHFOLFl0ZSksVGEocU4sR04pO2NvbnN0IFZBZT1xTjtmdW5jdGlvbiBubmUoYyxsLGEpe3JldHVy''@;'; put 'put ''biBsPWZ1bmN0aW9uIEJBZShjKXt2YXIgbD1mdW5jdGlvbiBqQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''bD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB6QWUgZXh0ZW5kcyBmeXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7c3VwZXIo''@;'; put 'put ''bCxhLENnLGQsaCksbm5lKHRoaXMsInRvcE92ZXJsYXkiLHZvaWQgMCksbm5lKHRoaXMsImlubGluZVN0YXJ0T3ZlcmxheSIsdm9pZCAwKSx0aGlzLnRvcE92ZXJsYXk9Zix0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT1ffWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''YT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBWQWUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0''@;'; put 'put ''U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYodGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRh''@;'; put 'put ''YmxlLmhvbGRlci5wYXJlbnROb2RlO3RoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/aWsobCx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSsicHgiLGAke3RoaXMudG9wT3Zlcmxh''@;'; put 'put ''eS5nZXRPdmVybGF5T2Zmc2V0KCl9cHhgKTpveShsKTtsZXQgYT1hbCh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2NvbnN0IGQ9d2EodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4gdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoYT0wKSxsLnN0eWxlLmhlaWdo''@;'; put 'put ''dD1gJHthfXB4YCxsLnN0eWxlLndpZHRoPWAke2R9cHhgLCExfX1jbGFzcyBLTiBleHRlbmRzIHU3e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsWnApfX1UYShLTixKdGUpLFRhKEtOLEdOKTtjb25zdCBVQWU9S047Y2xhc3MgWkFlIGV4dGVuZHMgZnl7Y29uc3RydWN0b3Io''@;'; put 'put ''bCxhLGQsaCxmLF8pe3N1cGVyKGwsYSxacCxkLGgpLHRoaXMuYm90dG9tT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PV99Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTty''@;'; put 'put ''ZXR1cm4gbmV3IFVBZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1y''@;'; put 'put ''ZXNldEZpeGVkUG9zaXRpb24oKXtjb25zdHt3b3Q6bH09dGhpcztpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIWwud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtpZihhLnN0eWxl''@;'; put 'put ''LnRvcD0iIix0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KXtjb25zdCBmPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSxfPXRoaXMuYm90dG9tT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCk7YS5zdHlsZVt0aGlz''@;'; put 'put ''LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2Z9cHhgLGEuc3R5bGUuYm90dG9tPWAke199cHhgfWVsc2Ugb3koYSksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpO2xldCBkPWFsKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgaD13YSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUp''@;'; put 'put ''O3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChkPTApLGEuc3R5bGUuaGVpZ2h0PWAke2R9cHhgLGEuc3R5bGUud2lkdGg9YCR7aH1weGAsITF9cmVwb3NpdGlvbk92ZXJsYXkoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERv''@;'; put 'put ''Y3VtZW50OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7bGV0IGY9MDthLmhhc1ZlcnRpY2FsU2Nyb2xsKCl8fChmKz1hLmdldFdvcmtzcGFjZUhlaWdodCgpLWwuZ2V0VG90YWxIZWlnaHQoKSksYS5oYXNWZXJ0aWNhbFNjcm9sbCgp''@;'; put 'put ''JiZhLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKGYrPUljKGQpKSxoLnN0eWxlLmJvdHRvbT1gJHtmfXB4YH19ZnVuY3Rpb24gWmYoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIFlBZShjKXt2YXIgbD1mdW5jdGlvbiBXQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJl''@;'; put 'put ''dHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0''@;'; put 'put ''aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBybmUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIHFBZShjKXt2YXIgbD1mdW5jdGlvbiBLQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n''@;'; put 'put ''Ij09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpj''@;'; put 'put ''W2xdPWEsY31jbGFzcyBYQWV7Y29uc3RydWN0b3IobCl7cm5lKHRoaXMsInNldHRpbmdzIix7fSkscm5lKHRoaXMsImRlZmF1bHRzIixPYmplY3QuZnJlZXplKHRoaXMuZ2V0RGVmYXVsdHMoKSkpLGRzKHRoaXMuZGVmYXVsdHMsKGEsZCk9PntpZih2b2lkIDAhPT1sW2RdKXRoaXMuc2V0dGlu''@;'; put 'put ''Z3NbZF09bFtkXTtlbHNle2lmKHZvaWQgMD09PWEpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVpcmVkIHNldHRpbmcgIiR7ZH0iIHdhcyBub3QgcHJvdmlkZWRgKTt0aGlzLnNldHRpbmdzW2RdPWF9fSl9Z2V0RGVmYXVsdHMoKXtyZXR1cm57ZmFjYWRlOnZvaWQgMCx0YWJsZTp2b2lkIDAsaXNE''@;'; put 'put ''YXRhVmlld0luc3RhbmNlOiEwLGV4dGVybmFsUm93Q2FsY3VsYXRvcjohMSxzdHJldGNoSDoibm9uZSIsY3VycmVudFJvd0NsYXNzTmFtZTpudWxsLGN1cnJlbnRDb2x1bW5DbGFzc05hbWU6bnVsbCxwcmV2ZW50T3ZlcmZsb3c6KCk9PiExLHByZXZlbnRXaGVlbDohMSxkYXRhOnZvaWQgMCxm''@;'; put 'put ''cmVlemVPdmVybGF5czohMSxmaXhlZENvbHVtbnNTdGFydDowLGZpeGVkUm93c1RvcDowLGZpeGVkUm93c0JvdHRvbTowLHNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPjB8fHRoaXMuZ2V0U2V0dGluZygicm93''@;'; put 'put ''SGVhZGVycyIpLmxlbmd0aD4wLHNob3VsZFJlbmRlclRvcE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIik+MHx8dGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0''@;'; put 'put ''aW5nKCJmaXhlZFJvd3NCb3R0b20iKT4wLG1pblNwYXJlUm93czowLHJvd0hlYWRlcnM6KCk9PltdLGNvbHVtbkhlYWRlcnM6KCk9PltdLHRvdGFsUm93czp2b2lkIDAsdG90YWxDb2x1bW5zOnZvaWQgMCxjZWxsUmVuZGVyZXI6KGwsYSxkKT0+e2pwKGQsdGhpcy5nZXRTZXR0aW5nKCJkYXRh''@;'; put 'put ''IixsLGEpPz8iIil9LGNvbHVtbldpZHRoKCl7fSxyb3dIZWlnaHQoKXt9LGRlZmF1bHRSb3dIZWlnaHQ6MjMsZGVmYXVsdENvbHVtbldpZHRoOjUwLHNlbGVjdGlvbnM6bnVsbCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOiExLHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOm51bGws''@;'; put 'put ''dmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCxvbkNlbGxNb3VzZURvd246bnVsbCxvbkNlbGxDb250ZXh0TWVudTpudWxsLG9uQ2VsbE1vdXNlT3ZlcjpudWxsLG9uQ2VsbE1vdXNlT3V0Om51bGwsb25DZWxsTW91c2VVcDpudWxsLG9uQ2VsbERibENsaWNrOm51bGwsb25D''@;'; put 'put ''ZWxsQ29ybmVyTW91c2VEb3duOm51bGwsb25DZWxsQ29ybmVyRGJsQ2xpY2s6bnVsbCxiZWZvcmVEcmF3Om51bGwsb25EcmF3Om51bGwsb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczpudWxsLG9uQWZ0ZXJEcmF3U2VsZWN0aW9uOm51bGwsb25CZWZvcmVEcmF3Qm9yZGVyczpudWxsLG9u''@;'; put 'put ''U2Nyb2xsVmVydGljYWxseTpudWxsLG9uU2Nyb2xsSG9yaXpvbnRhbGx5Om51bGwsb25CZWZvcmVUb3VjaFNjcm9sbDpudWxsLG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDpudWxsLG9uQmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoOmw9Pmwsb25Nb2RpZnlSb3dIZWFkZXJXaWR0aDpudWxsLG9u''@;'; put 'put ''TW9kaWZ5R2V0Q2VsbENvb3JkczpudWxsLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOmw9Pmwsb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6bD0+bCxvbldpbmRvd1Jlc2l6ZTpudWxsLG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTpudWxsLHJlbmRlckFsbFJvd3M6ITEs''@;'; put 'put ''Z3JvdXBzOiExLHJvd0hlYWRlcldpZHRoOm51bGwsY29sdW1uSGVhZGVySGVpZ2h0Om51bGwsaGVhZGVyQ2xhc3NOYW1lOm51bGwscnRsTW9kZTohMX19dXBkYXRlKGwsYSl7cmV0dXJuIHZvaWQgMD09PWE/ZHMobCwoZCxoKT0+e3RoaXMuc2V0dGluZ3NbaF09ZH0pOnRoaXMuc2V0dGluZ3Nb''@;'; put 'put ''bF09YSx0aGlzfWdldFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5nc1tsXT90aGlzLnNldHRpbmdzW2xdKGEsZCxoLGYpOnZvaWQgMCE9PWEmJkFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5nc1tsXSk/dGhpcy5zZXR0aW5nc1tsXVthXTp0''@;'; put 'put ''aGlzLnNldHRpbmdzW2xdfWdldFNldHRpbmdQdXJlKGwpe3JldHVybiB0aGlzLnNldHRpbmdzW2xdfWhhcyhsKXtyZXR1cm4hIXRoaXMuc2V0dGluZ3NbbF19fWNsYXNzIFhOIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCwibWFzdGVyIil9YWxpZ25PdmVy''@;'; put 'put ''bGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpe2NvbnN0IGw9dmcodGhpcy53dFJvb3RFbGVtZW50KSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2lmKGw9PT1hKXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKXx8KHRoaXMuaG9sZGVyLnN0eWxl''@;'; put 'put ''Lm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLnd0Um9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiKTtlbHNle2NvbnN0IGQ9bC5wYXJlbnRFbGVtZW50LGg9bjcobCwiaGVpZ2h0IixhKSxmPW43KGwsIm92ZXJmbG93IixhKSxfPXRoaXMuaG9sZGVyLnN0eWxlLHtzY3JvbGxXaWR0''@;'; put 'put ''aDpULHNjcm9sbEhlaWdodDpXfT1sO2xldHt3aWR0aDppZSxoZWlnaHQ6Z2V9PWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZCYmWyJhdXRvIiwiaGlkZGVuIiwic2Nyb2xsIl0uaW5jbHVkZXMoZikpe2NvbnN0IEVlPWwuY2xvbmVOb2RlKCExKTtFZS5zdHlsZS5vdmVyZmxvdz0iYXV0''@;'; put 'put ''byIsRWUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLm5leHRFbGVtZW50U2libGluZz9kLmluc2VydEJlZm9yZShFZSxsLm5leHRFbGVtZW50U2libGluZyk6ZC5hcHBlbmRDaGlsZChFZSk7Y29uc3QgWmU9cGFyc2VJbnQoenAoRWUsYSkuaGVpZ2h0LDEwKTtkLnJlbW92ZUNoaWxkKEVl''@;'; put 'put ''KSwwPT09WmUmJihnZT0wKX1nZT1NYXRoLm1pbihnZSxXKSxfLmhlaWdodD0iYXV0byI9PT1oPyJhdXRvIjpgJHtnZX1weGAsaWU9TWF0aC5taW4oaWUsVCksXy53aWR0aD1gJHtpZX1weGAsXy5vdmVyZmxvdz0iIix0aGlzLmhhc1RhYmxlSGVpZ2h0PSJhdXRvIj09PV8uaGVpZ2h0fHxnZT4w''@;'; put 'put ''LHRoaXMuaGFzVGFibGVXaWR0aD1pZT4wfXRoaXMuaXNUYWJsZVZpc2libGU9ZTcodGhpcy5UQUJMRSl9bWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3d0Vmlld3BvcnQ6YX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LGQ9Im1hc3RlciIsZj1s''@;'; put 'put ''LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoZiYmIWEuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFtkXSl7Y29uc3QgVD1sLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgsVz10aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk7Zm9yKGxldCBp''@;'; put 'put ''ZT0wO2llPGY7aWUrKylmb3IobGV0IGdlPS0xKlQ7Z2U8VztnZSsrKXRoaXMubWFya0lmT3ZlcnNpemVkQ29sdW1uSGVhZGVyKGdlKTthLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbZF09ITB9fX1UYShYTixlbmUpLFRhKFhOLE5OKTtjb25zdCBKQWU9WE47Rig1MTAxKTtjb25z''@;'; put 'put ''dCBpbmU9bmV3IFdlYWtNYXA7Y2xhc3MgSk57c3RhdGljIGdldCBERUZBVUxUX0hFSUdIVCgpe3JldHVybiAyM31jb25zdHJ1Y3Rvcigpe2xldHt2aWV3cG9ydFNpemU6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbEl0ZW1zOmQsaXRlbVNpemVGbjpoLG92ZXJyaWRlRm46ZixjYWxjdWxhdGlvblR5''@;'; put 'put ''cGU6XyxzY3JvbGxiYXJIZWlnaHQ6VH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2luZS5zZXQodGhpcyx7dmlld3BvcnRIZWlnaHQ6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbFJvd3M6ZCxyb3dIZWlnaHRGbjpoLG92ZXJyaWRlRm46''@;'; put 'put ''ZixjYWxjdWxhdGlvblR5cGU6Xyxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OlR9KSx0aGlzLmNvdW50PTAsdGhpcy5zdGFydFJvdz1udWxsLHRoaXMuZW5kUm93PW51bGwsdGhpcy5zdGFydFBvc2l0aW9uPW51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSExLHRoaXMu''@;'; put 'put ''Y2FsY3VsYXRlKCl9Y2FsY3VsYXRlKCl7Y29uc3QgbD1pbmUuZ2V0KHRoaXMpLGE9bC5jYWxjdWxhdGlvblR5cGUsZD1sLm92ZXJyaWRlRm4saD1sLnJvd0hlaWdodEZuLGY9bC5zY3JvbGxPZmZzZXQsXz1NYXRoLm1heChsLnNjcm9sbE9mZnNldCwwKSxUPWwudG90YWxSb3dzLFc9bC52aWV3''@;'; put 'put ''cG9ydEhlaWdodCxpZT1sLmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHR8fDA7bGV0IGdlPTAsd2U9ITA7Y29uc3QgRWU9W107bGV0IFplLG90PTAsZXQ9MDtmb3IobGV0IFF0PTA7UXQ8VDtRdCsrKWlmKFplPWgoUXQpLGlzTmFOKFplKSYmKFplPUpOLkRFRkFVTFRfSEVJR0hUKSxnZTw9XyYm''@;'; put 'put ''MiE9PWEmJih0aGlzLnN0YXJ0Um93PVF0LG90PVplKSxnZT49XyYmZ2UrKDI9PT1hP1plOjApPD1fK1ctaWUmJihudWxsPT09dGhpcy5zdGFydFJvdyYmKHRoaXMuc3RhcnRSb3c9UXQsb3Q9WmUpLHRoaXMuZW5kUm93PVF0KSxFZS5wdXNoKGdlKSxnZSs9WmUsZXQ9WmUsMiE9PWEmJih0aGlz''@;'; put 'put ''LmVuZFJvdz1RdCksZ2U+PV8rVy1pZSl7d2U9ITE7YnJlYWt9Y29uc3QgU3Q9Mj09PWE/MDpldDtpZih0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShmK1ctaWU8KDI9PT1hP290OjApfHxmPkVlLmF0KC0xKStTdCksdGhpcy5lbmRSb3c9PT1ULTEmJndlKWZvcih0aGlzLnN0''@;'; put 'put ''YXJ0Um93PXRoaXMuZW5kUm93O3RoaXMuc3RhcnRSb3c+MDspe2NvbnN0IFF0PUVlW3RoaXMuZW5kUm93XStaZS1FZVt0aGlzLnN0YXJ0Um93LTFdO2lmKChRdDw9Vy1pZXx8MiE9PWEpJiYodGhpcy5zdGFydFJvdy09MSksUXQ+PVctaWUpYnJlYWt9MT09PWEmJm51bGwhPT10aGlzLnN0YXJ0''@;'; put 'put ''Um93JiZkJiZkKHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbj1FZVt0aGlzLnN0YXJ0Um93XSx2b2lkIDA9PT10aGlzLnN0YXJ0UG9zaXRpb24mJih0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCksVDx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PVQtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0''@;'; put 'put ''aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWNvbnN0IG9uZT1KTixkNz1uZXcgV2Vha01hcDtjbGFzcyBRTntzdGF0aWMgZ2V0IERFRkFVTFRfV0lEVEgoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3IoKXtsZXR7dmlld3BvcnRTaXplOmwsc2Nyb2xsT2Zmc2V0OmEsdG90''@;'; put 'put ''YWxJdGVtczpkLGl0ZW1TaXplRm46aCxvdmVycmlkZUZuOmYsY2FsY3VsYXRpb25UeXBlOl8sc3RyZXRjaE1vZGU6VCxzdHJldGNoaW5nSXRlbVdpZHRoRm46Vz0oZ2U9PmdlKSxpbmxpbmVTdGFydE9mZnNldDppZX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/''@;'; put 'put ''YXJndW1lbnRzWzBdOnt9O2Q3LnNldCh0aGlzLHt2aWV3cG9ydFdpZHRoOmwsc2Nyb2xsT2Zmc2V0OmEsdG90YWxDb2x1bW5zOmQsY29sdW1uV2lkdGhGbjpoLG92ZXJyaWRlRm46ZixjYWxjdWxhdGlvblR5cGU6XyxzdHJldGNoaW5nQ29sdW1uV2lkdGhGbjpXLGlubGluZVN0YXJ0T2Zmc2V0''@;'; put 'put ''OmllfSksdGhpcy5jb3VudD0wLHRoaXMuc3RhcnRDb2x1bW49bnVsbCx0aGlzLmVuZENvbHVtbj1udWxsLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsLHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hMSx0aGlzLnN0cmV0Y2hBbGxSYXRpbz0wLHRoaXMuc3RyZXRjaExhc3RXaWR0''@;'; put 'put ''aD0wLHRoaXMuc3RyZXRjaD1ULHRoaXMudG90YWxUYXJnZXRXaWR0aD0wLHRoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0hMCx0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGg9W10sdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXtsZXQgbD0wLGE9ITA7Y29uc3QgZD1bXTtsZXQg''@;'; put 'put ''aCxmPTAsXz0wO2NvbnN0IFQ9ZDcuZ2V0KHRoaXMpLFc9VC5jYWxjdWxhdGlvblR5cGUsaWU9VC5vdmVycmlkZUZuLGdlPVQuc2Nyb2xsT2Zmc2V0LHdlPU1hdGgubWF4KFQuc2Nyb2xsT2Zmc2V0LDApLEVlPVQudG90YWxDb2x1bW5zLFplPVQudmlld3BvcnRXaWR0aCxvdD13ZT4wP1plKzE6''@;'; put 'put ''WmU7Zm9yKGxldCBTdD0wO1N0PEVlO1N0KyspaWYoaD10aGlzLl9nZXRDb2x1bW5XaWR0aChTdCksbDw9d2UmJjIhPT1XJiYodGhpcy5zdGFydENvbHVtbj1TdCxmPWgpLGw+PXdlJiZsKygyPT09Vz9oOjApPD13ZStvdCYmKG51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0YXJ0Q29s''@;'; put 'put ''dW1uPVN0LGY9aCksdGhpcy5lbmRDb2x1bW49U3QpLGQucHVzaChsKSxsKz1oLF89aCwyIT09VyYmKHRoaXMuZW5kQ29sdW1uPVN0KSxsPj13ZStaZSl7YT0hMTticmVha31jb25zdCB5dD0yPT09Vz8wOl8sa3Q9Mj09PVc/ZjowO2lmKHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5l''@;'; put 'put ''cj0hKGdlK1plLW90PC0xKlQuaW5saW5lU3RhcnRPZmZzZXR8fGdlPmQuYXQoLTEpK3l0fHwtMSpULnNjcm9sbE9mZnNldC1ULnZpZXdwb3J0V2lkdGg+LTEqa3QpLHRoaXMuZW5kQ29sdW1uPT09RWUtMSYmYSlmb3IodGhpcy5zdGFydENvbHVtbj10aGlzLmVuZENvbHVtbjt0aGlzLnN0YXJ0''@;'; put 'put ''Q29sdW1uPjA7KXtjb25zdCBTdD1kW3RoaXMuZW5kQ29sdW1uXStoLWRbdGhpcy5zdGFydENvbHVtbi0xXTtpZigoU3Q8PVplfHwyIT09VykmJih0aGlzLnN0YXJ0Q29sdW1uLT0xKSxTdD5aZSlicmVha30xPT09VyYmbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJmllJiZpZSh0aGlzKSx0aGlz''@;'; put 'put ''LnN0YXJ0UG9zaXRpb249ZFt0aGlzLnN0YXJ0Q29sdW1uXSx2b2lkIDA9PT10aGlzLnN0YXJ0UG9zaXRpb24mJih0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCksRWU8dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1FZS0xKSxudWxsIT09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuY291''@;'; put 'put ''bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX1yZWZyZXNoU3RyZXRjaGluZyhsKXtpZigibm9uZSI9PT10aGlzLnN0cmV0Y2gpcmV0dXJuO2xldCBhPWw7dGhpcy50b3RhbFRhcmdldFdpZHRoPWE7Y29uc3QgZD1kNy5nZXQodGhpcyksaD1kLnRvdGFsQ29sdW1ucztsZXQg''@;'; put 'put ''Zj0wO2ZvcihsZXQgVD0wO1Q8aDtUKyspe2NvbnN0IFc9dGhpcy5fZ2V0Q29sdW1uV2lkdGgoVCksaWU9ZC5zdHJldGNoaW5nQ29sdW1uV2lkdGhGbih2b2lkIDAsVCk7Im51bWJlciI9PXR5cGVvZiBpZT9hLT1pZTpmKz1XfWNvbnN0IF89YS1mO2lmKCJhbGwiPT09dGhpcy5zdHJldGNoJiZf''@;'; put 'put ''PjApdGhpcy5zdHJldGNoQWxsUmF0aW89YS9mLHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aD1bXSx0aGlzLm5lZWRWZXJpZnlMYXN0Q29sdW1uV2lkdGg9ITA7ZWxzZSBpZigibGFzdCI9PT10aGlzLnN0cmV0Y2gmJmEhPT0xLzApe2NvbnN0IFQ9dGhpcy5fZ2V0Q29sdW1uV2lkdGgoaC0x''@;'; put 'put ''KSxXPV8rVDt0aGlzLnN0cmV0Y2hMYXN0V2lkdGg9Vz49MD9XOlR9fWdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4iYWxsIj09PXRoaXMuc3RyZXRjaCYmMCE9PXRoaXMuc3RyZXRjaEFsbFJhdGlvP2Q9dGhpcy5fZ2V0U3RyZXRjaGVkQWxsQ29sdW1uV2lk''@;'; put 'put ''dGgobCxhKToibGFzdCI9PT10aGlzLnN0cmV0Y2gmJjAhPT10aGlzLnN0cmV0Y2hMYXN0V2lkdGgmJihkPXRoaXMuX2dldFN0cmV0Y2hlZExhc3RDb2x1bW5XaWR0aChsKSksZH1fZ2V0U3RyZXRjaGVkQWxsQ29sdW1uV2lkdGgobCxhKXtsZXQgZD0wO2NvbnN0IGg9ZDcuZ2V0KHRoaXMpLGY9''@;'; put 'put ''aC50b3RhbENvbHVtbnM7aWYoIXRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFtsXSl7Y29uc3QgXz1NYXRoLnJvdW5kKGEqdGhpcy5zdHJldGNoQWxsUmF0aW8pLFQ9aC5zdHJldGNoaW5nQ29sdW1uV2lkdGhGbihfLGwpO3RoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFtsXT12b2lkIDA9''@;'; put 'put ''PT1UP186aXNOYU4oVCk/dGhpcy5fZ2V0Q29sdW1uV2lkdGgobCk6VH1pZih0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGgubGVuZ3RoPT09ZiYmdGhpcy5uZWVkVmVyaWZ5TGFzdENvbHVtbldpZHRoKXt0aGlzLm5lZWRWZXJpZnlMYXN0Q29sdW1uV2lkdGg9ITE7Zm9yKGxldCBfPTA7Xzx0''@;'; put 'put ''aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGgubGVuZ3RoO18rKylkKz10aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGhbX107ZCE9PXRoaXMudG90YWxUYXJnZXRXaWR0aCYmKHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFt0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGgubGVuZ3RoLTFd''@;'; put 'put ''Kz10aGlzLnRvdGFsVGFyZ2V0V2lkdGgtZCl9cmV0dXJuIHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFtsXX1fZ2V0U3RyZXRjaGVkTGFzdENvbHVtbldpZHRoKGwpe3JldHVybiBsPT09ZDcuZ2V0KHRoaXMpLnRvdGFsQ29sdW1ucy0xP3RoaXMuc3RyZXRjaExhc3RXaWR0aDpudWxsfV9n''@;'; put 'put ''ZXRDb2x1bW5XaWR0aChsKXtsZXQgYT1kNy5nZXQodGhpcykuY29sdW1uV2lkdGhGbihsKTtyZXR1cm4gaXNOYU4oYSkmJihhPVFOLkRFRkFVTFRfV0lEVEgpLGF9fWNvbnN0IGVWPVFOO2NsYXNzIHRUZSBleHRlbmRzIFlOe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxuZXcgWEFlKGEpKTtj''@;'; put 'put ''b25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMud3RUYWJsZT1uZXcgSkFlKHRoaXMuZ2V0VGFibGVEYW8oKSxkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9bmV3IGNsYXNzIFFBZXtjb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEsZCxoLGYpe3RoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud290PWwud290LHRoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5kb21CaW5kaW5ncz1hLHRoaXMud3RTZXR0aW5ncz1kLHRoaXMud3RUYWJsZT1mLHRoaXMub3ZlcnNpemVkUm93cz1bXSx0aGlzLm92ZXJzaXplZENv''@;'; put 'put ''bHVtbkhlYWRlcnM9W10sdGhpcy5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkPXt9LHRoaXMuY2xpZW50SGVpZ2h0PTAsdGhpcy5jb250YWluZXJXaWR0aD1OYU4sdGhpcy5yb3dIZWFkZXJXaWR0aD1OYU4sdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCx0aGlzLmNvbHVt''@;'; put 'put ''bnNWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyPWgsdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csInJlc2l6ZSIsKCk9Pnt0aGlzLmNsaWVudEhlaWdodD10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgp''@;'; put 'put ''fSl9Z2V0V29ya3NwYWNlSGVpZ2h0KCl7Y29uc3QgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyO2xldCBkPTA7cmV0dXJuIGQ9YT09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1''@;'; put 'put ''bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OmFsKGEpPjAmJmEuY2xpZW50SGVpZ2h0PjA/YS5jbGllbnRIZWlnaHQ6MS8wLGR9Z2V0V29ya3NwYWNlV2lkdGgoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3Jvb3REb2N1bWVudDphLHJvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxo''@;'; put 'put ''PXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcixmPWEuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoLF89bC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxUPWwuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93IiksVz1sLmdldFNl''@;'; put 'put ''dHRpbmcoInJ0bE1vZGUiKSxpZT10aGlzLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksd2U9Zi0oVz9pZS5yaWdodC1mOmllLmxlZnQpO2xldCBFZSxaZTtpZihUKXJldHVybiB3YSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudCk7aWYoRWU9bC5nZXRTZXR0aW5nKCJm''@;'; put 'put ''cmVlemVPdmVybGF5cyIpP01hdGgubWluKHdlLGYpOk1hdGgubWluKHRoaXMuZ2V0Q29udGFpbmVyRmlsbFdpZHRoKCksd2UsZiksaD09PWQmJl8+MCYmdGhpcy5zdW1Db2x1bW5XaWR0aHMoMCxfLTEpPkVlKXJldHVybiBhLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtpZihoIT09ZCYm''@;'; put 'put ''KFplPW43KHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lciwib3ZlcmZsb3ciLGQpLCJzY3JvbGwiPT09WmV8fCJoaWRkZW4iPT09WmV8fCJhdXRvIj09PVplKSlyZXR1cm4gTWF0aC5tYXgoRWUsaC5jbGllbnRXaWR0aCk7Y29uc3Qgb3Q9''@;'; put 'put ''bC5nZXRTZXR0aW5nKCJzdHJldGNoSCIpO3JldHVybiJub25lIiE9PW90JiZvdD9FZTpNYXRoLm1heChFZSx3YSh0aGlzLnd0VGFibGUuVEFCTEUpKX1oYXNWZXJ0aWNhbFNjcm9sbCgpe3JldHVybiB0aGlzLnd0VGFibGUuaGlkZXIub2Zmc2V0SGVpZ2h0PnRoaXMuZ2V0V29ya3NwYWNlSGVp''@;'; put 'put ''Z2h0KCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe3JldHVybiB0aGlzLnd0VGFibGUuaGlkZXIub2Zmc2V0V2lkdGg+dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpfXN1bUNvbHVtbldpZHRocyhsLGEpe2xldCBkPTAsaD1sO2Zvcig7aDxhOylkKz10aGlzLnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgo''@;'; put 'put ''aCksaCs9MTtyZXR1cm4gZH1nZXRDb250YWluZXJGaWxsV2lkdGgoKXtpZih0aGlzLmNvbnRhaW5lcldpZHRoKXJldHVybiB0aGlzLmNvbnRhaW5lcldpZHRoO2NvbnN0IGw9dGhpcy53dFRhYmxlLmhvbGRlcixhPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''ImRpdiIpO2Euc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuaGVpZ2h0PSIxcHgiLGwuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgZD1hLm9mZnNldFdpZHRoO3JldHVybiB0aGlzLmNvbnRhaW5lcldpZHRoPWQsbC5yZW1vdmVDaGlsZChhKSxkfWdldFdvcmtzcGFjZU9mZnNldCgpe3JldHVybiBx''@;'; put 'put ''bCh0aGlzLnd0VGFibGUuVEFCTEUpfWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD9pc05hTih0aGlzLmNvbHVtbkhlYWRlckhlaWdodCkmJih0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1hbCh0''@;'; put 'put ''aGlzLnd0VGFibGUuVEhFQUQpKTp0aGlzLmNvbHVtbkhlYWRlckhlaWdodD0wLHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0fWdldFZpZXdwb3J0SGVpZ2h0KCl7bGV0IGw9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRDb2x1bW5I''@;'; put 'put ''ZWFkZXJIZWlnaHQoKTtyZXR1cm4gYT4wJiYobC09YSksbH1nZXRSb3dIZWFkZXJXaWR0aCgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIiksYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpO2lmKGwpe3RoaXMucm93''@;'; put 'put ''SGVhZGVyV2lkdGg9MDtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspdGhpcy5yb3dIZWFkZXJXaWR0aCs9bFtkXXx8bH1pZihpc05hTih0aGlzLnJvd0hlYWRlcldpZHRoKSlpZihhLmxlbmd0aCl7bGV0IGQ9dGhpcy53dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoIlRIIik7dGhp''@;'; put 'put ''cy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgaD0wLGY9YS5sZW5ndGg7aDxmO2grKylkPyh0aGlzLnJvd0hlYWRlcldpZHRoKz13YShkKSxkPWQubmV4dFNpYmxpbmcpOnRoaXMucm93SGVhZGVyV2lkdGgrPTUwfWVsc2UgdGhpcy5yb3dIZWFkZXJXaWR0aD0wO3JldHVybiB0aGlzLnJvd0hl''@;'; put 'put ''YWRlcldpZHRoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIix0aGlzLnJvd0hlYWRlcldpZHRoKXx8dGhpcy5yb3dIZWFkZXJXaWR0aCx0aGlzLnJvd0hlYWRlcldpZHRofWdldFZpZXdwb3J0V2lkdGgoKXtjb25zdCBsPXRoaXMuZ2V0V29ya3Nw''@;'; put 'put ''YWNlV2lkdGgoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRSb3dIZWFkZXJXaWR0aCgpO3JldHVybiBhPjA/bC1hOmx9Y3JlYXRlUm93c0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06''@;'; put 'put ''MTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBoLGYsXzt0aGlzLnJvd0hlYWRlcldpZHRoPU5hTixoPWEuZ2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIpJiYxPT09bD8xLzA6dGhpcy5nZXRWaWV3cG9ydEhlaWdodCgpO2xldCBUPXRoaXMuZGF0YUFjY2Vzc09iamVj''@;'; put 'put ''dC50b3BTY3JvbGxQb3NpdGlvbi10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wUGFyZW50T2Zmc2V0O2NvbnN0IFc9YS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxpZT1hLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGdlPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJu''@;'; put 'put ''IFcmJlQ+PTAmJihfPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLFcpLFQrPV8saC09XyksaWUmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LmNsb25lJiYoXz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuYm90dG9tT3ZlcmxheS5zdW1D''@;'; put 'put ''ZWxsU2l6ZXMoZ2UtaWUsZ2UpLGgtPV8pLGY9ZC5ob2xkZXIuY2xpZW50SGVpZ2h0PT09ZC5ob2xkZXIub2Zmc2V0SGVpZ2h0PzA6SWModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpLG5ldyBvbmUoe3ZpZXdwb3J0U2l6ZTpoLHNjcm9sbE9mZnNldDpULHRvdGFsSXRlbXM6YS5nZXRT''@;'; put 'put ''ZXR0aW5nKCJ0b3RhbFJvd3MiKSxpdGVtU2l6ZUZuOndlPT5kLmdldFJvd0hlaWdodCh3ZSksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIpLGNhbGN1bGF0aW9uVHlwZTpsLHNjcm9sbGJhckhlaWdodDpmfSl9Y3JlYXRlQ29sdW1u''@;'; put 'put ''c0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBoPXRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpLGY9TWF0aC5hYnModGhpcy5kYXRhQWNj''@;'; put 'put ''ZXNzT2JqZWN0LmlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24pLXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldDt0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1OYU47Y29uc3QgXz1hLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYoXyYmZj49MCl7''@;'; put 'put ''Y29uc3QgVD10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLF8pO2YrPVQsaC09VH1yZXR1cm4gZC5ob2xkZXIuY2xpZW50V2lkdGghPT1kLmhvbGRlci5vZmZzZXRXaWR0aCYmKGgtPUljKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50''@;'; put 'put ''KSksbmV3IGVWKHt2aWV3cG9ydFNpemU6aCxzY3JvbGxPZmZzZXQ6Zix0b3RhbEl0ZW1zOmEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksaXRlbVNpemVGbjpUPT5kLmdldENvbHVtbldpZHRoKFQpLG92ZXJyaWRlRm46YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRDb2x1bW5DYWxjdWxh''@;'; put 'put ''dG9yT3ZlcnJpZGUiKSxjYWxjdWxhdGlvblR5cGU6bCxzdHJldGNoTW9kZTphLmdldFNldHRpbmcoInN0cmV0Y2hIIiksc3RyZXRjaGluZ0l0ZW1XaWR0aEZuOihULFcpPT5hLmdldFNldHRpbmcoIm9uQmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixULFcpLGlubGluZVN0YXJ0T2Zmc2V0''@;'; put 'put ''OnRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldH0pfWNyZWF0ZVJlbmRlckNhbGN1bGF0b3JzKCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZihhKXtjb25zdCBkPXRoaXMuY3JlYXRlUm93''@;'; put 'put ''c0NhbGN1bGF0b3IoMiksaD10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKDIpO3RoaXMuYXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChkKSYmdGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkKGgpfHwoYT0hMSl9cmV0dXJu''@;'; put 'put ''IGF8fCh0aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoMSksdGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKDEpKSx0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1u''@;'; put 'put ''c1Zpc2libGVDYWxjdWxhdG9yPW51bGwsYX1jcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKXt0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj10aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKDIpLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0''@;'; put 'put ''b3IoMil9YXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChsKXtpZighdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7Y29uc3R7c3RhcnRSb3c6YSxlbmRSb3c6ZCxpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyOmh9PWw7aWYobnVsbD09PWEmJm51''@;'; put 'put ''bGw9PT1kKXJldHVybiFoO2NvbnN0e3N0YXJ0Um93OmYsZW5kUm93Ol99PXRoaXMucm93c1JlbmRlckNhbGN1bGF0b3I7cmV0dXJuIShhPGZ8fGE9PT1mJiZhPjB8fGQ+X3x8ZD09PV8mJmQ8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEpfWFyZUFsbFByb3Bvc2Vk''@;'; put 'put ''VmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQobCl7aWYoIXRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO2NvbnN0e3N0YXJ0Q29sdW1uOmEsZW5kQ29sdW1uOmQsaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcjpofT1sO2lmKG51bGw9PT1hJiZudWxsPT09ZCly''@;'; put 'put ''ZXR1cm4haDtjb25zdHtzdGFydENvbHVtbjpmLGVuZENvbHVtbjpffT10aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yO3JldHVybiEoYTxmfHxhPT09ZiYmYT4wfHxkPl98fGQ9PT1fJiZkPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xKX1yZXNldEhhc092''@;'; put 'put ''ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKXtkcyh0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQsKGwsYSxkKT0+e2RbYV09dm9pZCAwfSl9fSh0aGlzLmdldFZpZXdwb3J0RGFvKCksdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFn''@;'; put 'put ''ZXIsdGhpcy53dFRhYmxlKSx0aGlzLnNlbGVjdGlvbnM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNlbGVjdGlvbnMiKSx0aGlzLnd0RXZlbnQ9bmV3IFZ0ZShkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlz''@;'; put 'put ''LnNlbGVjdGlvbnMpLHRoaXMud3RPdmVybGF5cz1uZXcgY2xhc3MgR0Fle2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfKXtaZih0aGlzLCJ3b3QiLG51bGwpLFpmKHRoaXMsInRvcE92ZXJsYXkiLG51bGwpLFpmKHRoaXMsImJvdHRvbU92ZXJsYXkiLG51bGwpLFpmKHRoaXMsImlubGluZVN0YXJ0''@;'; put 'put ''T3ZlcmxheSIsbnVsbCksWmYodGhpcywidG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSxaZih0aGlzLCJib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLFpmKHRoaXMsImJyb3dzZXJMaW5lSGVpZ2h0Iix2b2lkIDApLFpmKHRoaXMsInd0U2V0dGluZ3MiLG51''@;'; put 'put ''bGwpLFpmKHRoaXMsInJlc2l6ZU9ic2VydmVyIixuZXcgUmVzaXplT2JzZXJ2ZXIoZ2U9PntiaygoKT0+eyFBcnJheS5pc0FycmF5KGdlKXx8IWdlLmxlbmd0aHx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZSIpfSl9KSksdGhpcy53b3Q9bCx0''@;'; put 'put ''aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0VGFibGU9Xztjb25zdHtyb290RG9jdW1lbnQ6VCxyb290V2luZG93Old9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmV2ZW50TWFuYWdlcj1m''@;'; put 'put ''LHRoaXMuc2Nyb2xsYmFyU2l6ZT1JYyhUKTtjb25zdCBpZT0iaGlkZGVuIj09PVcuZ2V0Q29tcHV0ZWRTdHlsZShfLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50PWllP18uaG9sZGVyOm55KF8uVEFC''@;'; put 'put ''TEUpLHRoaXMuaW5pdE92ZXJsYXlzKCksdGhpcy5oYXNTY3JvbGxiYXJCb3R0b209ITEsdGhpcy5oYXNTY3JvbGxiYXJSaWdodD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmtleVByZXNzZWQ9ITEsdGhpcy5zcHJlYWRlckxhc3RTaXplPXt3aWR0aDpudWxsLGhlaWdodDpudWxsfSx0aGlz''@;'; put 'put ''LnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMSx0aGlzLmluaXRCcm93c2VyTGluZUhlaWdodCgpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSx0aGlzLmxhc3RTY3JvbGxYPVcuc2Nyb2xsWCx0aGlzLmxhc3RTY3JvbGxZPVcuc2Nyb2xsWX1nZXRPdmVy''@;'; put 'put ''bGF5cygpe2NvbnN0IGE9W3RoaXMudG9wT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldO3JldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdJiZhLnB1c2godGhpcy53dFRhYmxlKSxhfWluaXRCcm93c2VyTGluZUhlaWdodCgpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RG9jdW1lbnQ6YX09dGhpcy5kb21CaW5kaW5ncyxkPWwuZ2V0Q29tcHV0ZWRTdHlsZShh''@;'; put 'put ''LmJvZHkpLGg9cGFyc2VJbnQoZC5saW5lSGVpZ2h0LDEwKSxmPTEuMipwYXJzZUludChkLmZvbnRTaXplLDEwKTt0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0PWh8fGZ9aW5pdE92ZXJsYXlzKCl7Y29uc3QgbD1bdGhpcy53b3QsdGhpcy5mYWNhZGVHZXR0ZXIsdGhpcy53dFNldHRpbmdzLHRoaXMu''@;'; put 'put ''ZG9tQmluZGluZ3NdO3RoaXMudG9wT3ZlcmxheT1uZXcgQUFlKC4uLmwpLHRoaXMuYm90dG9tT3ZlcmxheT1uZXcgT0FlKC4uLmwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PW5ldyBOQWUoLi4ubCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IHpBZSguLi5sLHRoaXMu''@;'; put 'put ''dG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IFpBZSguLi5sLHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSl9dXBkYXRlU3RhdGVPZlJlbmRlcmluZygpe2xldCBsPXRoaXMu''@;'; put 'put ''dG9wT3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCk7cmV0dXJuIGw9dGhpcy5ib3R0b21PdmVybGF5LnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXx8bCxsPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXx8bCx0aGlzLmlubGluZVN0YXJ0T3Zl''@;'; put 'put ''cmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMudG9wT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKGw9dGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJihsPXRoaXMuYm90''@;'; put 'put ''dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXx8bCkpLGx9cmVmcmVzaEFsbCgpe2lmKHRoaXMud290LmRyYXduKXtpZighdGhpcy53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiB2b2lkIHRoaXMuZGVzdHJveSgpO3RoaXMud290LmRy''@;'; put 'put ''YXcoITApLHRoaXMudmVydGljYWxTY3JvbGxpbmcmJnRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nJiZ0aGlzLnRvcE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9s''@;'; put 'put ''bGluZz0hMX19cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3Mse21haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50OmR9PXRoaXMudG9wT3ZlcmxheSx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6aH09dGhpcy5p''@;'; put 'put ''bmxpbmVTdGFydE92ZXJsYXk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5ZG93biIsd2U9PnRoaXMub25LZXlEb3duKHdlKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5dXAi''@;'; put 'put ''LCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJ2aXNpYmlsaXR5Y2hhbmdlIiwoKT0+dGhpcy5vbktleVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwic2Nyb2xsIix3ZT0+dGhpcy5vblRhYmxlU2Nyb2xs''@;'; put 'put ''KHdlKSx7cGFzc2l2ZTohMH0pLGQhPT1oJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsInNjcm9sbCIsd2U9PnRoaXMub25UYWJsZVNjcm9sbCh3ZSkse3Bhc3NpdmU6ITB9KTtjb25zdCBmPWEuZGV2aWNlUGl4ZWxSYXRpbyYmYS5kZXZpY2VQaXhlbFJhdGlvPjEsXz10''@;'; put 'put ''aGlzLnNjcm9sbGFibGVFbGVtZW50PT09YSxUPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50V2hlZWwiKSxXPXtwYXNzaXZlOl99O2xldCBnZTsoVHx8Znx8IV9OKCkpJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS53dFJvb3RFbGVt''@;'; put 'put ''ZW50LCJ3aGVlbCIsd2U9PnRoaXMub25DbG9uZVdoZWVsKHdlLFQpLFcpLFt0aGlzLnRvcE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJP''@;'; put 'put ''dmVybGF5XS5mb3JFYWNoKHdlPT57aWYod2UmJndlLm5lZWRGdWxsUmVuZGVyKXtjb25zdHtob2xkZXI6RWV9PXdlLmNsb25lLnd0VGFibGU7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihFZSwid2hlZWwiLFplPT50aGlzLm9uQ2xvbmVXaGVlbChaZSxUKSxXKX19KSx0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInJlc2l6ZSIsKCk9PntjbGVhclRpbWVvdXQoZ2UpLGdlPXNldFRpbWVvdXQoKCk9Pnt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25XaW5kb3dSZXNpemUiKX0sMjAwKX0pLF98fHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2''@;'; put 'put ''ZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnRFbGVtZW50KX1kZXJlZ2lzdGVyTGlzdGVuZXJzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXJFdmVudHMoITApfW9uVGFibGVTY3JvbGwobCl7Y29uc3QgYT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZD10aGlzLmlubGlu''@;'; put 'put ''ZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxoPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPWwudGFyZ2V0O3RoaXMua2V5UHJlc3NlZCYmKGghPT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGgpfHxkIT09YSYmZiE9PWEm''@;'; put 'put ''JiFsLnRhcmdldC5jb250YWlucyhkKSl8fHRoaXMuc3luY1Njcm9sbFBvc2l0aW9ucyhsKX1vbkNsb25lV2hlZWwobCxhKXtjb25zdHtyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPXRo''@;'; put 'put ''aXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxfPWwudGFyZ2V0LFQ9ZiE9PWQmJl8hPT1kJiYhXy5jb250YWlucyhmKSxXPWghPT1kJiZfIT09ZCYmIV8uY29udGFpbnMoaCk7aWYodGhpcy5rZXlQcmVzc2VkJiYoVHx8VykpcmV0dXJuO2NvbnN0IGllPXRoaXMudHJh''@;'; put 'put ''bnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGwpOyhhfHx0aGlzLnNjcm9sbGFibGVFbGVtZW50IT09ZCYmaWUpJiZsLnByZXZlbnREZWZhdWx0KCl9b25LZXlEb3duKGwpe3RoaXMua2V5UHJlc3NlZD1vNyhsLmtleUNvZGUsIkFSUk9XX1VQfEFSUk9XX1JJR0hUfEFSUk9XX0RPV058QVJST1df''@;'; put 'put ''TEVGVCIpfW9uS2V5VXAoKXt0aGlzLmtleVByZXNzZWQ9ITF9dHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGwpe2xldCBhPWlzTmFOKGwuZGVsdGFZKT8tMSpsLndoZWVsRGVsdGFZOmwuZGVsdGFZLGQ9aXNOYU4obC5kZWx0YVgpPy0xKmwud2hlZWxEZWx0YVg6bC5kZWx0YVg7MT09PWwu''@;'; put 'put ''ZGVsdGFNb2RlJiYoZCs9ZCp0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0LGErPWEqdGhpcy5icm93c2VyTGluZUhlaWdodCk7Y29uc3QgaD10aGlzLnNjcm9sbFZlcnRpY2FsbHkoYSksZj10aGlzLnNjcm9sbEhvcml6b250YWxseShkKTtyZXR1cm4gaHx8Zn1zY3JvbGxWZXJ0aWNhbGx5KGwpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7cmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wKz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcH1zY3JvbGxIb3Jpem9udGFsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVF''@;'; put 'put ''bGVtZW50LnNjcm9sbExlZnQ7cmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCs9bCxhIT09dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0fXN5bmNTY3JvbGxQb3NpdGlvbnMoKXtpZih0aGlzLmRlc3Ryb3llZClyZXR1cm47Y29uc3R7cm9vdFdpbmRvdzps''@;'; put 'put ''fT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLGQ9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIsW2gsZl09W3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCx0aGlzLnNjcm9sbGFibGVFbGVt''@;'; put 'put ''ZW50LnNjcm9sbFRvcF07aWYodGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPWEuc2Nyb2xsTGVmdCE9PWh8fHRoaXMubGFzdFNjcm9sbFghPT1sLnNjcm9sbFgsdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz1kLnNjcm9sbFRvcCE9PWZ8fHRoaXMubGFzdFNjcm9sbFkhPT1sLnNjcm9sbFksdGhpcy5s''@;'; put 'put ''YXN0U2Nyb2xsWD1sLnNjcm9sbFgsdGhpcy5sYXN0U2Nyb2xsWT1sLnNjcm9sbFksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nKXthLnNjcm9sbExlZnQ9aDtjb25zdCBfPXRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlcj90aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5o''@;'; put 'put ''b2xkZXI6bnVsbDtfJiYoXy5zY3JvbGxMZWZ0PWgpfXRoaXMudmVydGljYWxTY3JvbGxpbmcmJihkLnNjcm9sbFRvcD1mKSx0aGlzLnJlZnJlc2hBbGwoKX1zeW5jU2Nyb2xsV2l0aE1hc3Rlcigpe2NvbnN0IGw9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHtz''@;'; put 'put ''Y3JvbGxMZWZ0OmEsc2Nyb2xsVG9wOmR9PWw7dGhpcy50b3BPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9YSksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5ib3R0b21PdmVybGF5''@;'; put 'put ''LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9YSksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxUb3A9ZCl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygp''@;'; put 'put ''e3RoaXMuZGVyZWdpc3Rlckxpc3RlbmVycygpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMudG9wT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRo''@;'; put 'put ''aXMuYm90dG9tT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKTtjb25zdHt3dFRhYmxlOmx9PXRoaXMse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5nczt0aGlzLnNjcm9sbGFibGVFbGVtZW50PSJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGwud3RSb290RWxl''@;'; put 'put ''bWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP2wuaG9sZGVyOm55KGwuVEFCTEUpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKX1kZXN0cm95KCl7dGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRo''@;'; put 'put ''aXMudG9wT3ZlcmxheS5kZXN0cm95KCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkuZGVzdHJveSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmRlc3Ryb3koKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFy''@;'; put 'put ''dENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuZGVzdHJveWVk''@;'; put 'put ''PSEwfXJlZnJlc2goKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpJiZ0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5i''@;'; put 'put ''b3R0b21PdmVybGF5LnJlZnJlc2gobCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkucmVmcmVzaChsKSx0aGlzLnRvcE92ZXJsYXkucmVmcmVzaChsKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKSx0''@;'; put 'put ''aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2gobCl9dXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpe2NvbnN0IGw9dGhpcy53''@;'; put 'put ''dFRhYmxlLnNwcmVhZGVyLGE9bC5jbGllbnRXaWR0aCxkPWwuY2xpZW50SGVpZ2h0LGg9YSE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aHx8ZCE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ7cmV0dXJuIGgmJih0aGlzLnNwcmVhZGVyTGFzdFNpemUud2lkdGg9YSx0aGlzLnNw''@;'; put 'put ''cmVhZGVyTGFzdFNpemUuaGVpZ2h0PWQpLGh9YWRqdXN0RWxlbWVudHNTaXplKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFZpZXdwb3J0OmF9PXRoaXMud290LHt3dFRhYmxlOmR9PXRoaXMsaD10aGlzLnd0''@;'; put 'put ''U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksXz1hLmdldFJvd0hlYWRlcldpZHRoKCksVD1hLmdldENvbHVtbkhlYWRlckhlaWdodCgpLFc9ZC5oaWRlci5zdHlsZTtpZihXLndpZHRoPWAke18rdGhp''@;'; put 'put ''cy5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsaCl9cHhgLFcuaGVpZ2h0PWAke1QrdGhpcy50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLGYpKzF9cHhgLHRoaXMuc2Nyb2xsYmFyU2l6ZT4wKXtjb25zdHtzY3JvbGxIZWlnaHQ6aWUsc2Nyb2xsV2lkdGg6Z2V9PWQud3RSb290''@;'; put 'put ''RWxlbWVudCx7c2Nyb2xsSGVpZ2h0OndlLHNjcm9sbFdpZHRoOkVlfT1kLmhvbGRlcjt0aGlzLmhhc1Njcm9sbGJhclJpZ2h0PWllPHdlLHRoaXMuaGFzU2Nyb2xsYmFyQm90dG9tPWdlPEVlLHRoaXMuaGFzU2Nyb2xsYmFyUmlnaHQmJmQuaGlkZXIuc2Nyb2xsV2lkdGgrdGhpcy5zY3JvbGxi''@;'; put 'put ''YXJTaXplPmdlP3RoaXMuaGFzU2Nyb2xsYmFyQm90dG9tPSEwOnRoaXMuaGFzU2Nyb2xsYmFyQm90dG9tJiZkLmhpZGVyLnNjcm9sbEhlaWdodCt0aGlzLnNjcm9sbGJhclNpemU+aWUmJih0aGlzLmhhc1Njcm9sbGJhclJpZ2h0PSEwKX10aGlzLnRvcE92ZXJsYXkuYWRqdXN0RWxlbWVudHNT''@;'; put 'put ''aXplKGwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZShsKSx0aGlzLmJvdHRvbU92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKGwpfWFwcGx5VG9ET00oKXt0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCkmJih0aGlzLnRvcE92ZXJsYXkuYXBwbHlUb0RPTSgpLHRo''@;'; put 'put ''aXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LmFwcGx5VG9ET00oKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hcHBseVRvRE9NKCkpfWdldFBhcmVudE92ZXJsYXkobCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtyZXR1cm4gSW4oW3RoaXMudG9wT3Zl''@;'; put 'put ''cmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLGg9PntoJiZoLmNsb25lJiZoLmNsb25lLnd0VGFibGUuVEFCTEUuY29udGFpbnMo''@;'; put 'put ''bCkmJihkPWguY2xvbmUpfSksZH1zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpe2NvbnN0IGw9dGhpcy53dFRhYmxlLlRBQkxFO0luKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJP''@;'; put 'put ''dmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxkPT57ZCYmKGQuY2xvbmUud3RUYWJsZS5UQUJMRS5jbGFzc05hbWU9bC5jbGFzc05hbWUpfSl9fSh0aGlzLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53''@;'; put 'put ''dFRhYmxlKSx0aGlzLmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKXtjb25zdCBhPVtdLGQ9W107ZHMoe3Jvd0hlYWRlcnM6Imh0Um93SGVhZGVycyIsY29sdW1uSGVhZGVyczoiaHRDb2x1''@;'; put 'put ''bW5IZWFkZXJzIn0sKGgsZik9Pnt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhmKS5sZW5ndGgmJmQucHVzaChoKSxhLnB1c2goaCl9KSxXbyh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlLGEpLHBpKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUs''@;'; put 'put ''ZCl9Z2V0Vmlld3BvcnREYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1cm4gbH0sZ2V0IHRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0IGlubGluZVN0YXJ0T3Zlcmxh''@;'; put 'put ''eVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCB0b3BTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQgdG9wUGFy''@;'; put 'put ''ZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCBpbmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IGlu''@;'; put 'put ''bGluZVN0YXJ0UGFyZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1''@;'; put 'put ''cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IGJvdHRvbU92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXl9fX19Y2xhc3MgdFZ7Y29uc3RydWN0b3IobCl7bCBpbnN0YW5jZW9mIFlOP3RoaXMuX3dvdD1sOnRoaXMuX2luaXRGcm9tU2V0dGlu''@;'; put 'put ''Z3MobCl9X2luaXRGcm9tU2V0dGluZ3MobCl7bC5mYWNhZGU9YT0+e2NvbnN0IGQ9bmV3IHRWKGEpO3JldHVybigpPT5kfSx0aGlzLl93b3Q9bmV3IHRUZShsLnRhYmxlLGwpfWdldCBndWlkKCl7cmV0dXJuIHRoaXMuX3dvdC5ndWlkfWdldCByb290RG9jdW1lbnQoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d290LmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudH1nZXQgcm9vdFdpbmRvdygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31nZXQgd3RTZXR0aW5ncygpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5nc31nZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gdGhpcy5fd290''@;'; put 'put ''LmNsb25lU291cmNlfWdldCBjbG9uZU92ZXJsYXkoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheX1nZXQgc2VsZWN0aW9ucygpe3JldHVybiB0aGlzLl93b3Quc2VsZWN0aW9uc31nZXQgd3RWaWV3cG9ydCgpe3JldHVybiB0aGlzLl93b3Qud3RWaWV3cG9ydH1nZXQgd3RPdmVybGF5''@;'; put 'put ''cygpe3JldHVybiB0aGlzLl93b3Qud3RPdmVybGF5c31nZXQgd3RUYWJsZSgpe3JldHVybiB0aGlzLl93b3Qud3RUYWJsZX1nZXQgd3RFdmVudCgpe3JldHVybiB0aGlzLl93b3Qud3RFdmVudH1nZXQgd3RTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2Nyb2xsfWdldCBkcmF3bigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl93b3QuZHJhd259c2V0IGRyYXduKGwpe3RoaXMuX3dvdC5kcmF3bj1sfWdldCBkcmF3SW50ZXJydXB0ZWQoKXtyZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZH1zZXQgZHJhd0ludGVycnVwdGVkKGwpe3RoaXMuX3dvdC5kcmF3SW50ZXJydXB0ZWQ9bH1nZXQgbGFz''@;'; put 'put ''dE1vdXNlT3Zlcigpe3JldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3Zlcn1zZXQgbGFzdE1vdXNlT3ZlcihsKXt0aGlzLl93b3QubGFzdE1vdXNlT3Zlcj1sfWdldCBtb21lbnR1bVNjcm9sbGluZygpe3JldHVybiB0aGlzLl93b3QubW9tZW50dW1TY3JvbGxpbmd9c2V0IG1vbWVudHVtU2Ny''@;'; put 'put ''b2xsaW5nKGwpe3RoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZz1sfWdldCB0b3VjaEFwcGxpZWQoKXtyZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZH1zZXQgdG91Y2hBcHBsaWVkKGwpe3RoaXMuX3dvdC50b3VjaEFwcGxpZWQ9bH1nZXQgZG9tQmluZGluZ3MoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d290LmRvbUJpbmRpbmdzfWdldCBldmVudExpc3RlbmVycygpe3JldHVybiB0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnN9c2V0IGV2ZW50TGlzdGVuZXJzKGwpe3RoaXMuX3dvdC5ldmVudExpc3RlbmVycz1sfWdldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LmV2ZW50TWFuYWdl''@;'; put 'put ''cn1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5jcmVhdGVDZWxsQ29vcmRzKGwsYSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxSYW5nZShsLGEsZCl9ZHJhdygpe3JldHVybiB0aGlzLl93b3QuZHJhdyhhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSx0aGlzfWdldENlbGwobCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRDZWxsKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2Nyb2xsVmlld3BvcnQobCxh''@;'; put 'put ''LGQsaCxmKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0KGwsYSxkLGgsZil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEs''@;'; put 'put ''ZCl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhLGQpfWdldFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRWaWV3cG9ydCgpfWdldE92ZXJsYXlOYW1lKCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJsYXk/dGhpcy5fd290LmNsb25lT3Zlcmxh''@;'; put 'put ''eS50eXBlOiJtYXN0ZXIifWV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl7cmV0dXJuIHRoaXMuX3dvdC5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpfXVwZGF0ZShsLGEpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy51cGRhdGUobCxhKSx0aGlzfWdldFNldHRpbmcobCxhLGQs''@;'; put 'put ''aCxmKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhsLGEsZCxoLGYpfWhhc1NldHRpbmcobCl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLmhhc1NldHRpbmcobCl9ZGVzdHJveSgpe3RoaXMuX3dvdC5kZXN0cm95KCl9fWZ1bmN0aW9uIHNuZShjKXtsZXR7aXNT''@;'; put 'put ''aGlmdEtleTpsLGlzTGVmdENsaWNrOmEsaXNSaWdodENsaWNrOmQsY29vcmRzOmgsc2VsZWN0aW9uOmYsY29udHJvbGxlcjpfLGNlbGxDb29yZHNGYWN0b3J5OlR9PWM7Y29uc3QgVz1mLmlzU2VsZWN0ZWQoKT9mLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCk6bnVsbCxpZT1mLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeUNvcm5lcigpLGdlPWYuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYobCYmVyloLnJvdz49MCYmaC5jb2w+PTAmJiFfLmNlbGw/Zi5zZXRSYW5nZUVuZChoKTooaWV8fGdlKSYmaC5yb3c+PTAmJmguY29sPj0wJiYhXy5jZWxsP2Yuc2V0UmFuZ2VFbmQoVChoLnJvdyxoLmNvbCkp''@;'; put 'put ''OmllJiZoLnJvdzwwJiYhXy5jb2x1bW4/Zi5zZXRSYW5nZUVuZChUKFcudG8ucm93LGguY29sKSk6Z2UmJmguY29sPDAmJiFfLnJvdz9mLnNldFJhbmdlRW5kKFQoaC5yb3csVy50by5jb2wpKTooIWllJiYhZ2UmJmguY29sPDB8fGllJiZoLmNvbDwwKSYmIV8ucm93P2Yuc2VsZWN0Um93cyhN''@;'; put 'put ''YXRoLm1heChXLmZyb20ucm93LDApLGgucm93LGguY29sKTooIWllJiYhZ2UmJmgucm93PDB8fGdlJiZoLnJvdzwwKSYmIV8uY29sdW1uJiZmLnNlbGVjdENvbHVtbnMoTWF0aC5tYXgoVy5mcm9tLmNvbCwwKSxoLmNvbCxoLnJvdyk7ZWxzZXtjb25zdCB3ZT0hZi5pbkluU2VsZWN0aW9uKGgp''@;'; put 'put ''LEVlPWF8fGQmJndlO2gucm93PDAmJmguY29sPj0wJiYhXy5jb2x1bW4/RWUmJmYuc2VsZWN0Q29sdW1ucyhoLmNvbCxoLmNvbCxoLnJvdyk6aC5jb2w8MCYmaC5yb3c+PTAmJiFfLnJvdz9FZSYmZi5zZWxlY3RSb3dzKGgucm93LGgucm93LGguY29sKTpoLmNvbD49MCYmaC5yb3c+PTAmJiFf''@;'; put 'put ''LmNlbGw/RWUmJmYuc2V0UmFuZ2VTdGFydChoKTpoLmNvbDwwJiZoLnJvdzwwJiZmLnNlbGVjdEFsbCghMCwhMCl9fWNvbnN0IHJUZT1uZXcgTWFwKFtbIm1vdXNlZG93biIsc25lXSxbIm1vdXNlb3ZlciIsZnVuY3Rpb24gblRlKGMpe2xldHtpc0xlZnRDbGljazpsLGNvb3JkczphLHNlbGVj''@;'; put 'put ''dGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmfT1jO2lmKCFsKXJldHVybjtjb25zdCBfPWQuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksVD1kLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLFc9ZC50YWJsZVByb3BzLmNvdW50Q29scygpLGllPWQudGFibGVQcm9wcy5j''@;'; put 'put ''b3VudFJvd3MoKTtUJiYhaC5jb2x1bW4/ZC5zZXRSYW5nZUVuZChmKGllLTEsYS5jb2wpKTpfJiYhaC5yb3c/ZC5zZXRSYW5nZUVuZChmKGEucm93LFctMSkpOmguY2VsbHx8ZC5zZXRSYW5nZUVuZChhKX1dLFsidG91Y2hzdGFydCIsc25lXV0pO2Z1bmN0aW9uIGFuZShjLGwpe2xldHtjb29y''@;'; put 'put ''ZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zn09bDtyVGUuZ2V0KGMudHlwZSkoe2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmLGlzU2hpZnRLZXk6Yy5zaGlmdEtleSxpc0xlZnRDbGljazpoayhjKXx8''@;'; put 'put ''InRvdWNoc3RhcnQiPT09Yy50eXBlLGlzUmlnaHRDbGljazpVcChjKX0pfWNvbnN0IGxuZT1uZXcgV2Vha01hcCxuVj1TeW1ib2woInJvb3RJbnN0YW5jZSIpO2Z1bmN0aW9uIHJWKGMpe3JldHVybiBsbmUuaGFzKGMpfWZ1bmN0aW9uIGNuZShjLGwsYSl7KGZ1bmN0aW9uIHNUZShjLGwpe2lm''@;'; put 'put ''KGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gWXAoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGFUZShjKXt2YXIgbD1m''@;'; put 'put ''dW5jdGlvbiBsVGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB1bmUoYyxsKXtyZXR1cm4gZnVuY3Rpb24gY1RlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0o''@;'; put 'put ''YyxobmUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gZG5lKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gdVRlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRl''@;'; put 'put ''IGZpZWxkIik7bC52YWx1ZT1hfX0oYyxobmUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIGhuZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1j''@;'; put 'put ''b25zdCB4Zz1uZXcgV2Vha01hcDt2YXIgaVY9bmV3IFdlYWtNYXAsb1Y9bmV3IFdlYWtNYXA7Y29uc3QgaFRlPWNsYXNzIGRUZXtjb25zdHJ1Y3RvcihsKXtZcCh0aGlzLCJpbnN0YW5jZSIsdm9pZCAwKSxZcCh0aGlzLCJldmVudE1hbmFnZXIiLHZvaWQgMCksWXAodGhpcywic2V0dGluZ3Mi''@;'; put 'put ''LHZvaWQgMCksWXAodGhpcywiVEhFQUQiLHZvaWQgMCksWXAodGhpcywiVEJPRFkiLHZvaWQgMCksWXAodGhpcywiX3d0Iix2b2lkIDApLFlwKHRoaXMsImFjdGl2ZVd0Iix2b2lkIDApLGNuZSh0aGlzLGlWLHt3cml0YWJsZTohMCx2YWx1ZTowfSksY25lKHRoaXMsb1Yse3dyaXRhYmxlOiEw''@;'; put 'put ''LHZhbHVlOjB9KSxZcCh0aGlzLCJwb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUiLCExKSx0aGlzLmluc3RhbmNlPWwsdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMuaW5zdGFuY2UpLHRoaXMuc2V0dGluZ3M9dGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLHhnLnNldCh0aGlzLHtz''@;'; put 'put ''ZWxlY3Rpb25Nb3VzZURvd246ITEsbW91c2VEb3duOnZvaWQgMCx0YWJsZTp2b2lkIDAsbGFzdFdpZHRoOjAsbGFzdEhlaWdodDowfSksdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmluaXRpYWxpemVXYWxrb250YWJsZSgpfXJlbmRlcigpe3RoaXMu''@;'; put 'put ''aW5zdGFuY2UuaXNSZW5kZXJTdXNwZW5kZWQoKXx8KHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlbmRlciIsdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIpLHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplJiYodGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1Np''@;'; put 'put ''emU9ITEsdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoITApKSx0aGlzLl93dC5kcmF3KCF0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlciksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJSZW5kZXIiLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyKSx0aGlzLmluc3RhbmNlLmZv''@;'; put 'put ''cmNlRnVsbFJlbmRlcj0hMSx0aGlzLmluc3RhbmNlLnJlbmRlckNhbGw9ITEpfWFkanVzdEVsZW1lbnRzU2l6ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy5pbnN0YW5jZS5pc1JlbmRlclN1c3BlbmRlZCgpP3Ro''@;'; put 'put ''aXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplPSEwOnRoaXMuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKGwpfWdldENlbGxBdENvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5fd3QuZ2V0Q2VsbChsLGEpO3JldHVybiBkPDA/bnVsbDpkfXNjcm9sbFZpZXdwb3J0KGwsYSxk''@;'; put 'put ''LGgsZil7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0KGwsYSxkLGgsZil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0IGw9eGcuZ2V0KHRoaXMpLHtyb290RWxlbWVudDphLHJvb3REb2N1bWVudDpkfT10aGlzLmluc3RhbmNlLGg9YS5nZXRBdHRyaWJ1dGUoInN0eWxlIik7aCYmYS5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoImRhdGEtb3JpZ2luYWxzdHlsZSIsaCkscGkoYSwiaGFuZHNvbnRhYmxlIiksbC50YWJsZT1kLmNyZWF0ZUVsZW1lbnQoIlRBQkxFIikscGkobC50YWJsZSwiaHRDb3JlIiksdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lJiZwaShsLnRhYmxlLHRo''@;'; put 'put ''aXMuaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSksdGhpcy5USEVBRD1kLmNyZWF0ZUVsZW1lbnQoIlRIRUFEIiksbC50YWJsZS5hcHBlbmRDaGlsZCh0aGlzLlRIRUFEKSx0aGlzLlRCT0RZPWQuY3JlYXRlRWxlbWVudCgiVEJPRFkiKSxsLnRhYmxlLmFwcGVuZENoaWxk''@;'; put 'put ''KHRoaXMuVEJPRFkpLHRoaXMuaW5zdGFuY2UudGFibGU9bC50YWJsZSx0aGlzLmluc3RhbmNlLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUobC50YWJsZSx0aGlzLmluc3RhbmNlLmNvbnRhaW5lci5maXJzdENoaWxkKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0IGw9eGcuZ2V0KHRoaXMpLHtyb290''@;'; put 'put ''RWxlbWVudDphLHJvb3REb2N1bWVudDpkLHNlbGVjdGlvbjpofT10aGlzLmluc3RhbmNlLGY9ZC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLF89PntpZihsLnNlbGVjdGlvbk1vdXNlRG93bj0hMCwhdGhpcy5pc1RleHRT''@;'; put 'put ''ZWxlY3Rpb25BbGxvd2VkKF8udGFyZ2V0KSl7Y29uc3R7cm9vdFdpbmRvdzpUfT10aGlzLmluc3RhbmNlO2ZOKFQpLF8ucHJldmVudERlZmF1bHQoKSxULmZvY3VzKCl9fSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIiwoKT0+e2wuc2VsZWN0aW9uTW91''@;'; put 'put ''c2VEb3duPSExfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLF89PntsLnNlbGVjdGlvbk1vdXNlRG93biYmIXRoaXMuaXNUZXh0U2VsZWN0aW9uQWxsb3dlZChfLnRhcmdldCkmJih0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZmTih0''@;'; put 'put ''aGlzLmluc3RhbmNlLnJvb3RXaW5kb3cpLF8ucHJldmVudERlZmF1bHQoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImtleXVwIixfPT57aC5pc0luUHJvZ3Jlc3MoKSYmIV8uc2hpZnRLZXkmJmguZmluaXNoKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVu''@;'; put 'put ''dExpc3RlbmVyKGYsIm1vdXNldXAiLF89PntoLmlzSW5Qcm9ncmVzcygpJiZoayhfKSYmaC5maW5pc2goKSxsLm1vdXNlRG93bj0hMSwob2soZC5hY3RpdmVFbGVtZW50KXx8IWguaXNTZWxlY3RlZCgpJiYhaC5pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKSYmIWEuY29udGFpbnMoXy50YXJnZXQp''@;'; put 'put ''JiYhVXAoXykpJiZ0aGlzLmluc3RhbmNlLnVubGlzdGVuKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImNvbnRleHRtZW51IixfPT57aC5pc0luUHJvZ3Jlc3MoKSYmVXAoXykmJihoLmZpbmlzaCgpLGwubW91c2VEb3duPSExKX0pLHRoaXMuZXZlbnRNYW5hZ2Vy''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIoZiwidG91Y2hlbmQiLCgpPT57aC5pc0luUHJvZ3Jlc3MoKSYmaC5maW5pc2goKSxsLm1vdXNlRG93bj0hMX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2Vkb3duIixfPT57Y29uc3QgVD1fLnRhcmdldCxXPV8ueHx8Xy5jbGll''@;'; put 'put ''bnRYLGllPV8ueXx8Xy5jbGllbnRZO2xldCBnZT1fLnRhcmdldDtpZihsLm1vdXNlRG93bnx8IWF8fCF0aGlzLmluc3RhbmNlLnZpZXcpcmV0dXJuO2NvbnN0e2hvbGRlcjp3ZX09dGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFRhYmxlO2lmKGdlPT09d2Upe2NvbnN0IFplPUljKGQpO2lmKGQu''@;'; put 'put ''ZWxlbWVudEZyb21Qb2ludChXK1plLGllKSE9PXdlfHxkLmVsZW1lbnRGcm9tUG9pbnQoVyxpZStaZSkhPT13ZSlyZXR1cm59ZWxzZSBmb3IoO2dlIT09Zjspe2lmKG51bGw9PT1nZSl7aWYoXy5pc1RhcmdldFdlYkNvbXBvbmVudClicmVhaztyZXR1cm59aWYoZ2U9PT1hKXJldHVybjtnZT1n''@;'; put 'put ''ZS5wYXJlbnROb2RlfSgiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM/dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMoVCk6dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMpP3RoaXMuaW5zdGFuY2UuZGVzZWxl''@;'; put 'put ''Y3RDZWxsKCk6dGhpcy5pbnN0YW5jZS5kZXN0cm95RWRpdG9yKCExLCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC50YWJsZSwic2VsZWN0c3RhcnQiLF89Pnt0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9ufHxzeShfLnRhcmdldCl8fF8ucHJldmVudERl''@;'; put 'put ''ZmF1bHQoKX0pfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiB0aGlzLmluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGEsZCkpfXRyYW5z''@;'; put 'put ''bGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChsLGEpe2xldCBkPWw+PTA/dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpOmwsaD1hPj0wP3RoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJl''@;'; put 'put ''bmRlcmFibGVJbmRleChhKTphO3JldHVybiBudWxsPT09ZCYmKGQ9bCksbnVsbD09PWgmJihoPWEpLFtkLGhdfWNvdW50UmVuZGVyYWJsZUluZGV4ZXMobCxhKXtjb25zdCBkPU1hdGgubWluKGwuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxhKSxoPWwuZ2V0TmVhcmVzdE5vdEhpZGRl''@;'; put 'put ''bkluZGV4KGQtMSwtMSk7cmV0dXJuIG51bGw9PT1oPzA6bC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpKzF9Y291bnRSZW5kZXJhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlcix0aGlz''@;'; put 'put ''LnNldHRpbmdzLm1heENvbHMpfWNvdW50UmVuZGVyYWJsZVJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVzKHRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsdGhpcy5zZXR0aW5ncy5tYXhSb3dzKX1jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMobCxhKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLHRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCkpfWNvdW50Tm90SGlkZGVuQ29sdW1uSW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhsLGEsdGhpcy5p''@;'; put 'put ''bnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSl9Y291bnROb3RIaWRkZW5JbmRleGVzKGwsYSxkLGgpe2lmKGlzTmFOKGwpfHxsPDApcmV0dXJuIDA7Y29uc3QgZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEpLF89ZC5nZXRSZW5k''@;'; put 'put ''ZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKF8pKXJldHVybiAwO2xldCBUPTA7cmV0dXJuIGE8MD9UPV8rMTphPjAmJihUPWgtXyksVH1jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl7Y29uc3QgbD10aGlzLmluc3RhbmNlLmNvdW50Q29scygp''@;'; put 'put ''LGE9TWF0aC5taW4ocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkNvbHVtbkluZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuY291bnRS''@;'; put 'put ''b3dzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuY291bnRS''@;'; put 'put ''b3dzKCksYT1NYXRoLm1heChsLXBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tLDEwKSwwKTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwxKX1pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKXtjb25zdCBsPXRoaXMuY291bnRO''@;'; put 'put ''b3RIaWRkZW5GaXhlZFJvd3NUb3AoKSt0aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksYT10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb3VudFJlbmRlcmVkUm93cygpPmwmJnRoaXMuaW5zdGFuY2UuY291bnRS''@;'; put 'put ''ZW5kZXJlZENvbHMoKT5hfWluaXRpYWxpemVXYWxrb250YWJsZSgpe2NvbnN0IGw9eGcuZ2V0KHRoaXMpLGE9e3J0bE1vZGU6dGhpcy5pbnN0YW5jZS5pc1J0bCgpLGV4dGVybmFsUm93Q2FsY3VsYXRvcjp0aGlzLmluc3RhbmNlLmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKSYmdGhpcy5pbnN0''@;'; put 'put ''YW5jZS5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikuaXNFbmFibGVkKCksdGFibGU6bC50YWJsZSxpc0RhdGFWaWV3SW5zdGFuY2U6KCk9PnJWKHRoaXMuaW5zdGFuY2UpLHByZXZlbnRPdmVyZmxvdzooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50T3ZlcmZsb3cscHJldmVudFdoZWVsOigpPT50''@;'; put 'put ''aGlzLnNldHRpbmdzLnByZXZlbnRXaGVlbCxzdHJldGNoSDooKT0+dGhpcy5zZXR0aW5ncy5zdHJldGNoSCxkYXRhOihfLFQpPT50aGlzLmluc3RhbmNlLmdldERhdGFBdENlbGwoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoXyxUKSksdG90YWxSb3dzOigp''@;'; put 'put ''PT50aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSx0b3RhbENvbHVtbnM6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGZpeGVkQ29sdW1uc1N0YXJ0OigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKSxmaXhlZFJvd3NUb3A6KCk9PnRoaXMuY291bnRO''@;'; put 'put ''b3RIaWRkZW5GaXhlZFJvd3NUb3AoKSxmaXhlZFJvd3NCb3R0b206KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQ+MHx8YS5yb3dIZWFkZXJzKCku''@;'; put 'put ''bGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3A+MHx8YS5jb2x1bW5IZWFkZXJzKCkubGVuZ3RoPjAsc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NCb3R0b20+MCxtaW5TcGFyZVJv''@;'; put 'put ''d3M6KCk9PnRoaXMuc2V0dGluZ3MubWluU3BhcmVSb3dzLHJlbmRlckFsbFJvd3M6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxSb3dzLHJvd0hlYWRlcnM6KCk9Pntjb25zdCBfPVtdO3JldHVybiB0aGlzLmluc3RhbmNlLmhhc1Jvd0hlYWRlcnMoKSYmXy5wdXNoKChULFcpPT57Y29uc3QgaWU9''@;'; put 'put ''VD49MD90aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoVCk6VDt0aGlzLmFwcGVuZFJvd0hlYWRlcihpZSxXKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixfKSxkbmUodGhpcyxvVixf''@;'; put 'put ''Lmxlbmd0aCksX30sY29sdW1uSGVhZGVyczooKT0+e2NvbnN0IF89W107cmV0dXJuIHRoaXMuaW5zdGFuY2UuaGFzQ29sSGVhZGVycygpJiZfLnB1c2goKFQsVyk9Pntjb25zdCBpZT1UPj0wP3RoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJ''@;'; put 'put ''bmRleChUKTpUO3RoaXMuYXBwZW5kQ29sSGVhZGVyKGllLFcpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLF8pLGRuZSh0aGlzLGlWLF8ubGVuZ3RoKSxffSxjb2x1bW5XaWR0aDpfPT57Y29uc3QgVD10aGlzLmluc3RhbmNlLmNvbHVt''@;'; put 'put ''bkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoXyk7cmV0dXJuIHRoaXMuaW5zdGFuY2UuZ2V0Q29sV2lkdGgobnVsbD09PVQ/XzpUKX0scm93SGVpZ2h0Ol89Pntjb25zdCBUPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFi''@;'; put 'put ''bGVJbmRleChfKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5nZXRSb3dIZWlnaHQobnVsbD09PVQ/XzpUKX0sY2VsbFJlbmRlcmVyOihfLFQsVyk9Pntjb25zdFtpZSxnZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoXyxUKSx3ZT10aGlzLmluc3RhbmNlLnJ1bkhv''@;'; put 'put ''b2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixpZSxnZSk7bGV0IEVlPWllLFplPWdlO0FycmF5LmlzQXJyYXkod2UpJiYoW0VlLFplXT13ZSk7Y29uc3Qgb3Q9dGhpcy5pbnN0YW5jZS5nZXRDZWxsTWV0YShFZSxaZSksZXQ9dGhpcy5pbnN0YW5jZS5jb2xUb1Byb3AoWmUpO2xldCB5dD10aGlz''@;'; put 'put ''Lmluc3RhbmNlLmdldERhdGFBdFJvd1Byb3AoRWUsZXQpO3RoaXMuaW5zdGFuY2UuaGFzSG9vaygiYmVmb3JlVmFsdWVSZW5kZXIiKSYmKHl0PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVZhbHVlUmVuZGVyIix5dCxvdCkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJl''@;'; put 'put ''bmRlcmVyIixXLGllLGdlLGV0LHl0LG90KSx0aGlzLmluc3RhbmNlLmdldENlbGxSZW5kZXJlcihvdCkodGhpcy5pbnN0YW5jZSxXLGllLGdlLGV0LHl0LG90KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlbmRlcmVyIixXLGllLGdlLGV0LHl0LG90KX0sc2VsZWN0aW9uczp0aGlz''@;'; put 'put ''Lmluc3RhbmNlLnNlbGVjdGlvbi5oaWdobGlnaHQsaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlcjooKT0+dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbixvbldpbmRvd1Jlc2l6ZTooKT0+e3RoaXMuaW5zdGFuY2UmJiF0aGlzLmluc3RhbmNlLmlzRGVzdHJveWVkJiZ0aGlzLmluc3Rh''@;'; put 'put ''bmNlLnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTooKT0+e3RoaXMuaW5zdGFuY2UmJiF0aGlzLmluc3RhbmNlLmlzRGVzdHJveWVkJiZ0aGlzLmluc3RhbmNlLnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ2VsbE1vdXNlRG93bjooXyxULFcsaWUpPT57Y29u''@;'; put 'put ''c3QgZ2U9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKFQpLHdlPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuaW5zdGFuY2UubGlzdGVuKCksdGhpcy5hY3RpdmVXdD1pZSxsLm1vdXNlRG93bj0hMCx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVPbkNlbGxNb3VzZURvd24iLF8sZ2UsVyx3ZSksIWJnKF8pJiYoYW5lKF8se2Nvb3JkczpnZSxzZWxlY3Rpb246dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24sY29udHJvbGxlcjp3ZSxjZWxsQ29vcmRzRmFjdG9yeTooRWUsWmUpPT50aGlzLmluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKEVl''@;'; put 'put ''LFplKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VEb3duIixfLGdlLFcpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxDb250ZXh0TWVudTooXyxULFcsaWUpPT57Y29uc3QgZ2U9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29v''@;'; put 'put ''cmRzKFQpO3RoaXMuYWN0aXZlV3Q9aWUsbC5tb3VzZURvd249ITEsdGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24uaXNJblByb2dyZXNzKCkmJnRoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLmZpbmlzaCgpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IixfLGdl''@;'; put 'put ''LFcpLCFiZyhfKSYmKHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLF8sZ2UsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3V0OihfLFQsVyxpZSk9Pntjb25zdCBnZT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1''@;'; put 'put ''YWxDb29yZHMoVCk7dGhpcy5hY3RpdmVXdD1pZSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsXyxnZSxXKSwhYmcoXykmJih0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3V0IixfLGdlLFcpLHRoaXMuYWN0aXZlV3Q9dGhpcy5f''@;'; put 'put ''d3QpfSxvbkNlbGxNb3VzZU92ZXI6KF8sVCxXLGllKT0+e2NvbnN0IGdlPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhUKSx3ZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmFjdGl2ZVd0PWllLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9y''@;'; put 'put ''ZU9uQ2VsbE1vdXNlT3ZlciIsXyxnZSxXLHdlKSwhYmcoXykmJihsLm1vdXNlRG93biYmYW5lKF8se2Nvb3JkczpnZSxzZWxlY3Rpb246dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24sY29udHJvbGxlcjp3ZSxjZWxsQ29vcmRzRmFjdG9yeTooRWUsWmUpPT50aGlzLmluc3RhbmNlLl9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKEVlLFplKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdmVyIixfLGdlLFcpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZVVwOihfLFQsVyxpZSk9Pntjb25zdCBnZT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9W''@;'; put 'put ''aXN1YWxDb29yZHMoVCk7dGhpcy5hY3RpdmVXdD1pZSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZVVwIixfLGdlLFcpLCFiZyhfKSYmIXRoaXMuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJih0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlVXAi''@;'; put 'put ''LF8sZ2UsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvcm5lck1vdXNlRG93bjpfPT57Xy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixfKX0sb25DZWxsQ29ybmVyRGJsQ2xpY2s6Xz0+e18ucHJl''@;'; put 'put ''dmVudERlZmF1bHQoKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixfKX0sYmVmb3JlRHJhdzooXyxUKT0+dGhpcy5iZWZvcmVSZW5kZXIoXyxUKSxvbkRyYXc6Xz0+dGhpcy5hZnRlclJlbmRlcihfKSxvblNjcm9sbFZlcnRpY2FsbHk6KCk9PnRo''@;'; put 'put ''aXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyU2Nyb2xsVmVydGljYWxseSIpLG9uU2Nyb2xsSG9yaXpvbnRhbGx5OigpPT50aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIpLG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6KCk9PnRoaXMuaW5zdGFu''@;'; put 'put ''Y2UucnVuSG9va3MoImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiksb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6KF8sVCxXKT0+e2NvbnN0IGllPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsZ2U9aWUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChfKSx3ZT10aGlz''@;'; put 'put ''Lmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLGdlLFQsVyk7cmV0dXJuIGllLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHdlLDEpKX0sb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6''@;'; put 'put ''KF8sVCxXKT0+e2NvbnN0IGllPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIsZ2U9aWUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChfKSx3ZT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGdlLFQsVyk7cmV0dXJuIGll''@;'; put 'put ''LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHdlLDEpKX0sb25BZnRlckRyYXdTZWxlY3Rpb246KF8sVCxXKT0+e2xldCBpZTtjb25zdFtnZSx3ZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoXyxUKSxF''@;'; put 'put ''ZT10aGlzLmluc3RhbmNlLnNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCksWmU9RWUuc2l6ZSgpO2lmKFplPjApe2NvbnN0IGV0PUVlLnBlZWtCeUluZGV4KChXPz8wKSsxLVplKTtpZT1bZXQuZnJvbS5yb3csZXQuZnJvbS5jb2wsZXQudG8ucm93LGV0LnRvLmNvbF19cmV0dXJuIHRoaXMu''@;'; put 'put ''aW5zdGFuY2UucnVuSG9va3MoImFmdGVyRHJhd1NlbGVjdGlvbiIsZ2Usd2UsaWUsVyl9LG9uQmVmb3JlRHJhd0JvcmRlcnM6KF8sVCk9Pntjb25zdFtXLGllLGdlLHdlXT1fLEVlPVt0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoVyks''@;'; put 'put ''dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGllKSx0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZ2UpLHRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Vmlz''@;'; put 'put ''dWFsRnJvbVJlbmRlcmFibGVJbmRleCh3ZSldO3JldHVybiB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVEcmF3Qm9yZGVycyIsRWUsVCl9LG9uQmVmb3JlVG91Y2hTY3JvbGw6KCk9PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVRvdWNoU2Nyb2xsIiksb25BZnRlck1vbWVu''@;'; put 'put ''dHVtU2Nyb2xsOigpPT50aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck1vbWVudHVtU2Nyb2xsIiksb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6KF8sVCk9Pntjb25zdCBXPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRl''@;'; put 'put ''eChUKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixfLFcpfSxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOl89PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlcldpZHRoIixfKSxvbk1vZGlmeUdldENlbGxDb29y''@;'; put 'put ''ZHM6KF8sVCxXKT0+e2NvbnN0IGllPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsZ2U9dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlcix3ZT1UPj0wP2dlLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoVCk6VCxFZT1fPj0wP2llLmdldFZpc3VhbEZyb21SZW5kZXJhYmxl''@;'; put 'put ''SW5kZXgoXyk6XyxaZT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixFZSx3ZSxXKTtpZihBcnJheS5pc0FycmF5KFplKSl7Y29uc3Rbb3QsZXQseXQsa3RdPVplO3JldHVybltvdD49MD9pZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGllLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleChvdCwxKSk6b3QsZXQ+PTA/Z2UuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChnZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZXQsMSkpOmV0LHl0Pj0wP2llLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaWUuZ2V0TmVhcmVzdE5vdEhpZGRl''@;'; put 'put ''bkluZGV4KHl0LC0xKSk6eXQsa3Q+PTA/Z2UuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChnZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoa3QsLTEpKTprdF19fSx2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTpfPT57bGV0IFQ9dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1Jl''@;'; put 'put ''bmRlcmluZ09mZnNldDtpZigiYXV0byI9PT1UJiZ0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCYmKFQ9MTApLFQ+MHx8ImF1dG8iPT09VCl7Y29uc3QgVz10aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxpZT1fLnN0YXJ0Um93LGdlPV8uZW5kUm93O2lmKCJudW1iZXIiPT10eXBlb2YgVClf''@;'; put 'put ''LnN0YXJ0Um93PU1hdGgubWF4KGllLVQsMCksXy5lbmRSb3c9TWF0aC5taW4oZ2UrVCxXLTEpO2Vsc2UgaWYoImF1dG8iPT09VCl7Y29uc3Qgd2U9TWF0aC5jZWlsKGdlL1cqMTIpO18uc3RhcnRSb3c9TWF0aC5tYXgoaWUtd2UsMCksXy5lbmRSb3c9TWF0aC5taW4oZ2Urd2UsVy0xKX19dGhp''@;'; put 'put ''cy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsXyl9LHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOl89PntsZXQgVD10aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PVQmJnRo''@;'; put 'put ''aXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQmJihUPTEwKSxUPjB8fCJhdXRvIj09PVQpe2NvbnN0IFc9dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksaWU9Xy5zdGFydENvbHVtbixnZT1fLmVuZENvbHVtbjtpZigibnVtYmVyIj09dHlwZW9mIFQmJihfLnN0YXJ0Q29sdW1uPU1h''@;'; put 'put ''dGgubWF4KGllLVQsMCksXy5lbmRDb2x1bW49TWF0aC5taW4oZ2UrVCxXLTEpKSwiYXV0byI9PT1UKXtjb25zdCB3ZT1NYXRoLmNlaWwoZ2UvVyo2KTtfLnN0YXJ0Q29sdW1uPU1hdGgubWF4KGllLXdlLDApLF8uZW5kQ29sdW1uPU1hdGgubWluKGdlK3dlLFctMSl9fXRoaXMuaW5zdGFuY2Uu''@;'; put 'put ''cnVuSG9va3MoImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLF8pfSxyb3dIZWFkZXJXaWR0aDooKT0+dGhpcy5zZXR0aW5ncy5yb3dIZWFkZXJXaWR0aCxjb2x1bW5IZWFkZXJIZWlnaHQ6KCk9Pntjb25zdCBfPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeUNv''@;'; put 'put ''bHVtbkhlYWRlckhlaWdodCIpO3JldHVybiB0aGlzLnNldHRpbmdzLmNvbHVtbkhlYWRlckhlaWdodHx8X319O3RoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUluaXRXYWxrb250YWJsZSIsYSksdGhpcy5fd3Q9bmV3IHRWKGEpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3Q7Y29uc3QgZD10''@;'; put 'put ''aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyLHt3aWR0aDpoLGhlaWdodDpmfT10aGlzLmluc3RhbmNlLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc2V0TGFzdFNpemUoaCxmKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGQsIm1vdXNlZG93biIs''@;'; put 'put ''Xz0+e18udGFyZ2V0PT09ZCYmMz09PV8ud2hpY2gmJl8uc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGQsImNvbnRleHRtZW51IixfPT57Xy50YXJnZXQ9PT1kJiYzPT09Xy53aGljaCYmXy5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZl''@;'; put 'put ''bnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5pbnN0YW5jZS5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLnNldHRpbmdzLm9ic2VydmVET01WaXNpYmlsaXR5JiZ0aGlzLl93dC5kcmF3SW50ZXJydXB0ZWQmJih0aGlzLmluc3RhbmNlLmZvcmNl''@;'; put 'put ''RnVsbFJlbmRlcj0hMCx0aGlzLnJlbmRlcigpKX0pfWlzVGV4dFNlbGVjdGlvbkFsbG93ZWQobCl7aWYoc3kobCkpcmV0dXJuITA7Y29uc3QgYT1WcChsLHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RUYWJsZS5zcHJlYWRlcik7cmV0dXJuISEoITA9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50''@;'; put 'put ''U2VsZWN0aW9uJiZhfHwiY2VsbCI9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpJiZhfHwhdGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc0NlbGxFZGl0ZWQoKSYmdGhpcy5pc1NlbGVjdGVkT25seUNlbGwo''@;'; put 'put ''KSl9aXNNb3VzZURvd24oKXtyZXR1cm4geGcuZ2V0KHRoaXMpLm1vdXNlRG93bn1pc1NlbGVjdGVkT25seUNlbGwoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGw9bnVsbD09PShhPXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNT''@;'; put 'put ''aW5nbGUoKSkmJnZvaWQgMCE9PWwmJmx9aXNDZWxsRWRpdGVkKCl7Y29uc3QgbD10aGlzLmluc3RhbmNlLmdldEFjdGl2ZUVkaXRvcigpO3JldHVybiBsJiZsLmlzT3BlbmVkKCl9YmVmb3JlUmVuZGVyKGwsYSl7bCYmdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVmlld1JlbmRlciIs''@;'; put 'put ''dGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIsYSl9YWZ0ZXJSZW5kZXIobCl7bCYmdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJWaWV3UmVuZGVyIix0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcil9YXBwZW5kUm93SGVhZGVyKGwsYSl7aWYoYS5maXJzdENoaWxkKXtjb25z''@;'; put 'put ''dCBkPWEuZmlyc3RDaGlsZDtpZighQm8oZCwicmVsYXRpdmUiKSlyZXR1cm4gZzIoYSksdm9pZCB0aGlzLmFwcGVuZFJvd0hlYWRlcihsLGEpO3RoaXMudXBkYXRlQ2VsbEhlYWRlcihkLnF1ZXJ5U2VsZWN0b3IoIi5yb3dIZWFkZXIiKSxsLHRoaXMuaW5zdGFuY2UuZ2V0Um93SGVhZGVyKX1l''@;'; put 'put ''bHNle2NvbnN0e3Jvb3REb2N1bWVudDpkLGdldFJvd0hlYWRlcjpofT10aGlzLmluc3RhbmNlLGY9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxfPWQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2YuY2xhc3NOYW1lPSJyZWxhdGl2ZSIsXy5jbGFzc05hbWU9InJvd0hlYWRlciIsdGhpcy51cGRhdGVD''@;'; put 'put ''ZWxsSGVhZGVyKF8sbCxoKSxmLmFwcGVuZENoaWxkKF8pLGEuYXBwZW5kQ2hpbGQoZil9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGwsYSl9YXBwZW5kQ29sSGVhZGVyKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''Ml0/YXJndW1lbnRzWzJdOnRoaXMuaW5zdGFuY2UuZ2V0Q29sSGVhZGVyLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjA7aWYoYS5maXJzdENoaWxkKXtjb25zdCBmPWEuZmlyc3RDaGlsZDtCbyhmLCJyZWxhdGl2ZSIpP3RoaXMudXBk''@;'; put 'put ''YXRlQ2VsbEhlYWRlcihmLnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKSxsLGQsaCk6KGcyKGEpLHRoaXMuYXBwZW5kQ29sSGVhZGVyKGwsYSxkLGgpKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDpmfT10aGlzLmluc3RhbmNlLF89Zi5jcmVhdGVFbGVtZW50KCJkaXYiKSxUPWYuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgic3BhbiIpO18uY2xhc3NOYW1lPSJyZWxhdGl2ZSIsVC5jbGFzc05hbWU9ImNvbEhlYWRlciIsdGhpcy51cGRhdGVDZWxsSGVhZGVyKFQsbCxkLGgpLF8uYXBwZW5kQ2hpbGQoVCksYS5hcHBlbmRDaGlsZChfKX10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckdldENvbEhl''@;'; put 'put ''YWRlciIsbCxhLGgpfXVwZGF0ZUNlbGxIZWFkZXIobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLGY9YTtjb25zdCBfPXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3ZlcmxheShsKXx8dGhpcy5fd3Q7bC5w''@;'; put 'put ''YXJlbnROb2RlJiYoQm8obCwiY29sSGVhZGVyIik/Zj1fLnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSk6Qm8obCwicm93SGVhZGVyIikmJihmPV8ud3RUYWJsZS5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKSkpLGY+LTE/Z2cobCxkKGEsaCkpOihqcChsLFN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoMTYwKSkscGkobCwiY29ybmVySGVhZGVyIikpfW1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpLWw7cmV0dXJuIGQ+MD9kOjB9bWF4aW11bVZpc2libGVFbGVtZW50SGVp''@;'; put 'put ''Z2h0KGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sO3JldHVybiBkPjA/ZDowfXNldExhc3RTaXplKGwsYSl7Y29uc3QgZD14Zy5nZXQodGhpcyk7W2QubGFzdFdpZHRoLGQubGFzdEhlaWdodF09W2wsYV19Z2V0TGFzdFNpemUoKXtjb25zdCBs''@;'; put 'put ''PXhnLmdldCh0aGlzKTtyZXR1cm57d2lkdGg6bC5sYXN0V2lkdGgsaGVpZ2h0OmwubGFzdEhlaWdodH19Z2V0Rmlyc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uu''@;'; put 'put ''dmlldy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlUm93KCkpfWdldExhc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RTY3JvbGwuZ2V0''@;'; put 'put ''TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlQ29s''@;'; put 'put ''dW1uKCkpfWdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Q29s''@;'; put 'put ''dW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIHVuZSh0aGlzLGlWKX1nZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gdW5lKHRoaXMsb1YpfWRlc3Ryb3koKXt0aGlzLl93dC5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX0sZm5lPSJBQkNERUZHSElKS0xNTk9QUVJTVFVW''@;'; put 'put ''V1hZWiIsc1Y9Zm5lLmxlbmd0aDtmdW5jdGlvbiBTayhjKXtsZXQgZCxsPWMrMSxhPSIiO2Zvcig7bD4wOylkPShsLTEpJXNWLGE9U3RyaW5nLmZyb21DaGFyQ29kZSg2NStkKSthLGw9cGFyc2VJbnQoKGwtZCkvc1YsMTApO3JldHVybiBhfWZ1bmN0aW9uIGZUZShjKXtsZXQgbD0wO2lmKGMp''@;'; put 'put ''Zm9yKGxldCBhPTAsZD1jLmxlbmd0aC0xO2E8Yy5sZW5ndGg7YSs9MSxkLT0xKWwrPXNWKipkKihmbmUuaW5kZXhPZihjW2FdKSsxKTtyZXR1cm4gbC09MSxsfWZ1bmN0aW9uIHBUZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1sw''@;'; put 'put ''XToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPVtdO2ZvcihoPTA7aDxsO2grKylmLnB1c2goU2soaCkrKGQrMSkpO2EucHVzaChmKX1yZXR1cm4g''@;'; put 'put ''YX1mdW5jdGlvbiBnVGUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTAwLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7Y29uc3QgYT1bXTtsZXQgZCxoO2Zvcihk''@;'; put 'put ''PTA7ZDxjO2QrKyl7Y29uc3QgZj17fTtmb3IoaD0wO2g8bDtoKyspZltgcHJvcCR7aH1gXT1TayhoKSsoZCsxKTthLnB1c2goZil9cmV0dXJuIGF9ZnVuY3Rpb24gbVRlKGMsbCl7Y29uc3QgYT1bXTtsZXQgZDtmb3IobGV0IGg9MDtoPGM7aCsrKXtkPVtdO2ZvcihsZXQgZj0wO2Y8bDtmKysp''@;'; put 'put ''ZC5wdXNoKCIiKTthLnB1c2goZCl9cmV0dXJuIGF9ZnVuY3Rpb24gYVYoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT1jO2NvbnN0IGQ9W107cmV0dXJuKCFBcnJheS5pc0FycmF5KGMpfHwhQXJyYXkuaXNBcnJheShj''@;'; put 'put ''WzBdKSkmJihhPVtjXSksYS5mb3JFYWNoKChoLGYpPT57QXJyYXkuaXNBcnJheShoKT9oLmZvckVhY2goKF8sVCk9PntkLnB1c2goW2YrbCxULF9dKX0pOk9iamVjdC5rZXlzKGgpLmZvckVhY2goXz0+e2QucHVzaChbZitsLF8saFtfXV0pfSl9KSxkfWZ1bmN0aW9uIGxWKGMpe2xldCBsPTA7''@;'; put 'put ''cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJihjWzBdJiZBcnJheS5pc0FycmF5KGNbMF0pP2w9Y1swXS5sZW5ndGg6Y1swXSYmdXMoY1swXSkmJihsPWNrKGNbMF0pKSksbH1mdW5jdGlvbiBwbmUoYyl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGgmJmMuZXZlcnkobD0+QXJy''@;'; put 'put ''YXkuaXNBcnJheShsKSkpfWZ1bmN0aW9uIGduZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT4ib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJheS5pc0FycmF5KGwpJiZudWxsIT09bCkpfWNvbnN0IF9UZT1jbGFzcyB2VGV7Y29uc3RydWN0b3IobCl7''@;'; put 'put ''bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO3RoaXMuaG90PWwsdGhpcy5kYXRhPWEsdGhpcy5kYXRhVHlwZT0iYXJyYXkiLHRoaXMuY29sVG9Qcm9wPSgpPT57fSx0aGlzLnByb3BUb0NvbD0oKT0+e319bW9kaWZ5Um93RGF0''@;'; put 'put ''YShsKXtsZXQgYTtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5Um93RGF0YSIpJiYoYT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsbCkpLHZvaWQgMD09PWF8fE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdOmF9Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRh''@;'; put 'put ''dGEmJjAhPT10aGlzLmRhdGEubGVuZ3RoP3RoaXMuZ2V0QnlSYW5nZShudWxsLG51bGwsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSk6dGhpcy5kYXRhfXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0QXRDb2x1bW4obCl7Y29uc3QgYT1b''@;'; put 'put ''XTtyZXR1cm4gSW4odGhpcy5kYXRhLChkLGgpPT57Y29uc3QgZj10aGlzLmdldEF0Q2VsbChoLGwpO2EucHVzaChmKX0pLGF9Z2V0QXRSb3cobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Y29uc3QgZj12b2lkIDA9''@;'; put 'put ''PT1hJiZ2b2lkIDA9PT1kO2xldCBfPW51bGwsVD1udWxsO2lmKF89dGhpcy5tb2RpZnlSb3dEYXRhKGwpLEFycmF5LmlzQXJyYXkoXykpVD1bXSxmP18uZm9yRWFjaCgoVyxpZSk9PntUW2llXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsaWUsXyl9KTp2byhhLGQsVz0+e1RbVy1hXT10aGlz''@;'; put 'put ''LmdldEF0UGh5c2ljYWxDZWxsKGwsVyxfKX0pO2Vsc2UgaWYodXMoXyl8fFJhKF8pKWlmKFQ9aD9bXTp7fSwhZnx8aCl7Y29uc3QgaWU9dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLTE7dm8oMCxpZSxnZT0+e2NvbnN0IHdlPXRoaXMuY29sVG9Qcm9wKGdlKTtpZihnZT49KGF8fDApJiZnZTw9''@;'; put 'put ''KGR8fGllKSYmIU51bWJlci5pc0ludGVnZXIod2UpKXtjb25zdCBFZT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsd2UsXyk7aD9ULnB1c2goRWUpOmxrKFQsd2UsRWUpfX0pfWVsc2UgZHMoXywoVyxpZSk9PntsayhULGllLHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxpZSxfKSl9KTtyZXR1''@;'; put 'put ''cm4gVH1zZXRBdENlbGwobCxhLGQpe2lmKCEobD49dGhpcy5jb3VudFJvd3MoKXx8YT49dGhpcy5jb3VudEZpcnN0Um93S2V5cygpKSl7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBoPV9nKGQpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VE''@;'; put 'put ''YXRhIixsLGEsaCwic2V0IiksaC5pc1RvdWNoZWQoKSYmKGQ9aC52YWx1ZSl9TnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF1bYV09ZDpsayh0aGlzLmRhdGFbbF0sYSxkKX19Z2V0QXRQaHlzaWNhbENlbGwobCxhLGQpe2xldCBoPW51bGw7aWYoZCYmKGg9InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBhP3Z0ZShkLGEpOiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoZCk6ZFthXSksdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBmPV9nKGgpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixsLGEsZiwiZ2V0IiksZi5pc1RvdWNoZWQoKSYmKGg9''@;'; put 'put ''Zi52YWx1ZSl9cmV0dXJuIGh9Z2V0QXRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLm1vZGlmeVJvd0RhdGEobCk7cmV0dXJuIHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx0aGlzLmNvbFRvUHJvcChhKSxkKX1nZXRCeVJhbmdlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0hMSxmPW51bGwsXz1u''@;'; put 'put ''dWxsLFQ9bnVsbCxXPW51bGw7bnVsbD09PWx8fG51bGw9PT1hPyhoPSEwLGY9MCxUPXRoaXMuY291bnRSb3dzKCktMSk6KGY9TWF0aC5taW4obC5yb3csYS5yb3cpLF89TWF0aC5taW4obC5jb2wsYS5jb2wpLFQ9TWF0aC5tYXgobC5yb3csYS5yb3cpLFc9TWF0aC5tYXgobC5jb2wsYS5jb2wp''@;'; put 'put ''KTtjb25zdCBpZT1bXTtyZXR1cm4gdm8oZixULGdlPT57aWUucHVzaChoP3RoaXMuZ2V0QXRSb3coZ2Usdm9pZCAwLHZvaWQgMCxkKTp0aGlzLmdldEF0Um93KGdlLF8sVyxkKSl9KSxpZX1jb3VudFJvd3MoKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiKSl7Y29u''@;'; put 'put ''c3QgbD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlTGVuZ3RoIik7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbH1yZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBsVih0aGlzLmRhdGEpfWRlc3Ryb3koKXt0aGlzLmRhdGE9bnVs''@;'; put 'put ''bCx0aGlzLmhvdD1udWxsfX0sbW5lPXtfbG9jYWxIb29rczpPYmplY3QuY3JlYXRlKG51bGwpLGFkZExvY2FsSG9vayhjLGwpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzW2NdfHwodGhpcy5fbG9jYWxIb29rc1tjXT1bXSksdGhpcy5fbG9jYWxIb29rc1tjXS5wdXNoKGwpLHRoaXN9LHJ1bkxv''@;'; put 'put ''Y2FsSG9va3MoYyxsLGEsZCxoLGYsXyl7aWYodGhpcy5fbG9jYWxIb29rc1tjXSl7Y29uc3QgVD10aGlzLl9sb2NhbEhvb2tzW2NdLmxlbmd0aDtmb3IobGV0IFc9MDtXPFQ7VysrKXNrKHRoaXMuX2xvY2FsSG9va3NbY11bV10sdGhpcyxsLGEsZCxoLGYsXyl9fSxjbGVhckxvY2FsSG9va3Mo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fbG9jYWxIb29rcz17fSx0aGlzfX07ZmgobW5lLCJNSVhJTl9OQU1FIiwibG9jYWxIb29rcyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBPMD1tbmU7Y2xhc3MgRWd7Y29uc3RydWN0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLmluZGV4ZWRWYWx1ZXM9W10sdGhpcy5pbml0VmFsdWVPckZuPWx9Z2V0VmFsdWVzKCl7cmV0dXJuIHRoaXMuaW5kZXhlZFZhbHVlc31nZXRWYWx1ZUF0SW5kZXgobCl7Y29uc3QgYT10aGlzLmluZGV4ZWRWYWx1ZXM7aWYo''@;'; put 'put ''bDxhLmxlbmd0aClyZXR1cm4gYVtsXX1zZXRWYWx1ZXMobCl7dGhpcy5pbmRleGVkVmFsdWVzPWwuc2xpY2UoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXNldFZhbHVlQXRJbmRleChsLGEpe3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRW''@;'; put 'put ''YWx1ZXNbbF09YSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhcigpe3RoaXMuc2V0RGVmYXVsdFZhbHVlcygpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmdldFZhbHVlcygpLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aD0wLFJhKHRoaXMuaW5pdFZhbHVlT3JGbik/dm8obC0xLGE9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRoaXMuaW5pdFZhbHVlT3JGbihh''@;'; put 'put ''KSkpOnZvKGwtMSwoKT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1pbml0KGwpe3JldHVybiB0aGlzLnNldERlZmF1bHRWYWx1ZXMobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbml0IiksdGhpc31pbnNl''@;'; put 'put ''cnQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXJlbW92ZSgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5pbmRleGVkVmFsdWVzPW51bGwsdGhpcy5pbml0VmFsdWVPckZuPW51bGx9fWZ1bmN0aW9uIGNW''@;'; put 'put ''KGMsbCxhKXtyZXR1cm5bLi4uYy5zbGljZSgwLGwpLC4uLmEsLi4uYy5zbGljZShsKV19ZnVuY3Rpb24gcHkoYyxsKXtyZXR1cm4gXzEoYyxhPT4hMT09PWwuaW5jbHVkZXMoYSkpfWZ1bmN0aW9uIHVWKGMsbCl7cmV0dXJuIGNzKGMsYT0+YS1sLmZpbHRlcihkPT5kPGEpLmxlbmd0aCl9ZnVu''@;'; put 'put ''Y3Rpb24gZFYoYyxsKXtjb25zdCBhPWxbMF0sZD1sLmxlbmd0aDtyZXR1cm4gY3MoYyxoPT5oPj1hP2grZDpoKX1UYShFZyxPMCk7Y2xhc3Mgdm5lIGV4dGVuZHMgRWd7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPWRWKHRoaXMuaW5kZXhlZFZhbHVlcyxh''@;'; put 'put ''KTt0aGlzLmluZGV4ZWRWYWx1ZXM9Y1YoZCxsLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPXB5KHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9dVYoYSxsKSxzdXBlci5yZW1vdmUobCl9fWZ1bmN0aW9uIGhWKGMsbCxhLGQpe2NvbnN0IGg9''@;'; put 'put ''YS5sZW5ndGg/YVswXTp2b2lkIDA7cmV0dXJuWy4uLmMuc2xpY2UoMCxoKSwuLi5hLm1hcCgoZixfKT0+UmEoZCk/ZChmLF8pOmQpLC4uLnZvaWQgMD09PWg/W106Yy5zbGljZShoKV19ZnVuY3Rpb24gZlYoYyxsKXtyZXR1cm4gXzEoYywoYSxkKT0+ITE9PT1sLmluY2x1ZGVzKGQpKX1jbGFz''@;'; put 'put ''cyBXcCBleHRlbmRzIEVne2luc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1oVih0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1mVih0aGlzLmluZGV4ZWRWYWx1ZXMsbCks''@;'; put 'put ''c3VwZXIucmVtb3ZlKGwpfX1jbGFzcyBNayBleHRlbmRzIFdwe2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0SGlkZGVuSW5kZXhlcygpe3JldHVybiBBbCh0aGlzLmdldFZhbHVlcygpLChsLGEs''@;'; put 'put ''ZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jbGFzcyB4ayBleHRlbmRzIEVne2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiB5VGUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIHdUZShjKXt2YXIgbD1mdW5jdGlvbiBDVGUoYyxsKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11''@;'; put 'put ''c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEs''@;'; put 'put ''ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywib3JkZXJPZkluZGV4ZXMiLFtdKX1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+dGhpcy5pbmRleGVkVmFsdWVzW2xdKX1zZXRWYWx1ZXMobCl7dGhp''@;'; put 'put ''cy5vcmRlck9mSW5kZXhlcz1bLi4uQXJyYXkobC5sZW5ndGgpLmtleXMoKV0sc3VwZXIuc2V0VmFsdWVzKGwpfXNldFZhbHVlQXRJbmRleChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLm9yZGVyT2ZJbmRleGVz''@;'; put 'put ''Lmxlbmd0aDtyZXR1cm4gbDx0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhpcy5pbmRleGVkVmFsdWVzW2xdPWEsITE9PT10aGlzLm9yZGVyT2ZJbmRleGVzLmluY2x1ZGVzKGwpJiZ0aGlzLm9yZGVyT2ZJbmRleGVzLnNwbGljZShkLDAsbCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFu''@;'; put 'put ''Z2UiKSwhMCl9Y2xlYXJWYWx1ZShsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPXB5KHRoaXMub3JkZXJPZkluZGV4ZXMsW2xdKSxSYSh0aGlzLmluaXRWYWx1ZU9yRm4pP3N1cGVyLnNldFZhbHVlQXRJbmRleChsLHRoaXMuaW5pdFZhbHVlT3JGbihsKSk6c3VwZXIuc2V0VmFsdWVBdEluZGV4KGws''@;'; put 'put ''dGhpcy5pbml0VmFsdWVPckZuKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGh9c2V0RGVmYXVsdFZhbHVlcygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmluZGV4ZWRWYWx1ZXMu''@;'; put 'put ''bGVuZ3RoO3RoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoPTAsc3VwZXIuc2V0RGVmYXVsdFZhbHVlcyhsKX1pbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9aFYodGhpcy5pbmRleGVkVmFsdWVzLDAsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHRoaXMub3JkZXJPZkluZGV4ZXM9ZFYodGhp''@;'; put 'put ''cy5vcmRlck9mSW5kZXhlcyxhKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWZWKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPXB5KHRoaXMub3JkZXJPZkluZGV4ZXMsbCksdGhpcy5vcmRlck9mSW5kZXhlcz11Vih0aGlz''@;'; put 'put ''Lm9yZGVyT2ZJbmRleGVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXRFbnRyaWVzKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKGw9PltsLHRoaXMuZ2V0VmFsdWVBdEluZGV4KGwpXSl9fWNsYXNzIGd5IGV4dGVuZHMgV3B7Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRUcmltbWVkSW5kZXhlcygpe3JldHVybiBBbCh0aGlzLmdldFZhbHVlcygpLChsLGEsZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jb25zdCBfbmU9bmV3IE1hcChbWyJoaWRpbmciLE1rXSxbImluZGV4IixF''@;'; put 'put ''Z10sWyJsaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZSIseGtdLFsicGh5c2ljYWxJbmRleFRvVmFsdWUiLFdwXSxbInRyaW1taW5nIixneV1dKTtsZXQgcFY9MDtjbGFzcyBnVntjb25zdHJ1Y3Rvcigpe3RoaXMuY29sbGVjdGlvbj1uZXcgTWFwfXJlZ2lzdGVyKGwsYSl7ITE9PT10aGlzLmNv''@;'; put 'put ''bGxlY3Rpb24uaGFzKGwpJiYodGhpcy5jb2xsZWN0aW9uLnNldChsLGEpLGEuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSkpLHBWKz0xKX11bnJlZ2lzdGVyKGwpe2NvbnN0IGE9dGhpcy5jb2xsZWN0aW9uLmdldChsKTtLaShhKSYmKGEu''@;'; put 'put ''ZGVzdHJveSgpLHRoaXMuY29sbGVjdGlvbi5kZWxldGUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGEpLHBWLT0xKX11bnJlZ2lzdGVyQWxsKCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKGwsYSk9PnRoaXMudW5yZWdpc3RlcihhKSksdGhpcy5jb2xsZWN0aW9uLmNsZWFyKCl9''@;'; put 'put ''Z2V0KGwpe3JldHVybiBMYShsKT9BcnJheS5mcm9tKHRoaXMuY29sbGVjdGlvbi52YWx1ZXMoKSk6dGhpcy5jb2xsZWN0aW9uLmdldChsKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5jb2xsZWN0aW9uLnNpemV9cmVtb3ZlRnJvbUV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9''@;'; put 'put ''PnthLnJlbW92ZShsKX0pfWluc2VydFRvRXZlcnkobCxhKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChkPT57ZC5pbnNlcnQobCxhKX0pfWluaXRFdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChhPT57YS5pbml0KGwpfSl9fVRhKGdWLE8wKTtjbGFzcyBibmUgZXh0ZW5kcyBnVntj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5tZXJnZWRWYWx1ZXNDYWNoZT1bXSx0aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb249bCx0aGlzLmZhbGxiYWNrVmFsdWU9YX1nZXRNZXJnZWRWYWx1ZXMoKXtpZighMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzBdKXx8YXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5tZXJnZWRWYWx1ZXNDYWNoZTtpZigwPT09dGhpcy5nZXRMZW5ndGgoKSlyZXR1cm5bXTtjb25zdCBhPWNzKHRoaXMuZ2V0KCksZj0+Zi5nZXRWYWx1ZXMoKSksZD1bXSxoPUtpKGFbMF0pJiZhWzBdLmxlbmd0aHx8MDtmb3IobGV0IGY9''@;'; put 'put ''MDtmPGg7Zis9MSl7Y29uc3QgXz1bXTtmb3IobGV0IFQ9MDtUPHRoaXMuZ2V0TGVuZ3RoKCk7VCs9MSlfLnB1c2goYVtUXVtmXSk7ZC5wdXNoKF8pfXJldHVybiBjcyhkLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbil9Z2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwsYSl7Y29uc3QgZD10aGlzLmdl''@;'; put 'put ''dE1lcmdlZFZhbHVlcyhhKVtsXTtyZXR1cm4gS2koZCk/ZDp0aGlzLmZhbGxiYWNrVmFsdWV9dXBkYXRlQ2FjaGUoKXt0aGlzLm1lcmdlZFZhbHVlc0NhY2hlPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKCExKX19ZnVuY3Rpb24geW5lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBtVj1uZXcgV2Vha01hcDtjbGFzcyB3bmV7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24geFRlKGMsbCxhKXsoZnVuY3Rpb24gRVRlKGMsbCl7aWYobC5oYXMo''@;'; put 'put ''YykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxtVix7d3JpdGFibGU6ITAsdmFsdWU6W119KX1zdWJzY3JpYmUobCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''YWRkTG9jYWxIb29rKCJjaGFuZ2UiLGwpLHRoaXMuX3dyaXRlKGZ1bmN0aW9uIFRUZShjLGwpe3JldHVybiBmdW5jdGlvbiBEVGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLHluZShjLGwsImdldCIpKX0odGhpcyxtVikpLHRoaXN9dW5zdWJzY3JpYmUoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJ1bnN1YnNjcmliZSIpLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpc31fd3JpdGUobCl7cmV0dXJuIGwubGVuZ3RoPjAmJnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsKSx0aGlzfV93cml0ZUluaXRpYWxDaGFuZ2VzKGwpeyFmdW5jdGlv''@;'; put 'put ''biBrVGUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBBVGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLHlu''@;'; put 'put ''ZShjLGwsInNldCIpLGEpLGF9KHRoaXMsbVYsbCl9fWZ1bmN0aW9uIENuZShjLGwpe2NvbnN0IGE9W107bGV0IGQ9MCxoPTA7Zm9yKDtkPGMubGVuZ3RoJiZoPGwubGVuZ3RoO2QrKyxoKyspY1tkXSE9PWxbaF0mJmEucHVzaCh7b3A6InJlcGxhY2UiLGluZGV4Omgsb2xkVmFsdWU6Y1tkXSxu''@;'; put 'put ''ZXdWYWx1ZTpsW2hdfSk7Zm9yKDtkPGwubGVuZ3RoO2QrKylhLnB1c2goe29wOiJpbnNlcnQiLGluZGV4OmQsb2xkVmFsdWU6dm9pZCAwLG5ld1ZhbHVlOmxbZF19KTtmb3IoO2g8Yy5sZW5ndGg7aCsrKWEucHVzaCh7b3A6InJlbW92ZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2hdLG5ld1ZhbHVl''@;'; put 'put ''OnZvaWQgMH0pO3JldHVybiBhfWZ1bmN0aW9uIG15KGMsbCxhKXsoZnVuY3Rpb24gSVRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5z''@;'; put 'put ''ZXQoYyxhKX1mdW5jdGlvbiBtZChjLGwpe3JldHVybiBmdW5jdGlvbiBMVGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLFNuZShjLGwsImdldCIpKX1mdW5jdGlvbiBFayhjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIFJUZShjLGwsYSl7aWYobC5zZXQpbC5zZXQu''@;'; put 'put ''Y2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsU25lKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBTbmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9VGEod25lLE8wKTt2YXIga2s9bmV3IFdlYWtNYXAsdnk9bmV3IFdlYWtNYXAsQWs9bmV3IFdlYWtNYXAsVGs9bmV3IFdlYWtNYXAsRGs9bmV3''@;'; put 'put ''IFdlYWtNYXA7Y2xhc3MgT1Rle2NvbnN0cnVjdG9yKCl7bGV0e2luaXRpYWxJbmRleFZhbHVlOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtteSh0aGlzLGtrLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgU2V0fSksbXkodGhpcyx2''@;'; put 'put ''eSx7d3JpdGFibGU6ITAsdmFsdWU6W119KSxteSh0aGlzLEFrLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLG15KHRoaXMsVGsse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksbXkodGhpcyxEayx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxFayh0aGlzLERrLGw/PyExKX1jcmVhdGVPYnNlcnZlcigp''@;'; put 'put ''e2NvbnN0IGw9bmV3IHduZTtyZXR1cm4gbWQodGhpcyxraykuYWRkKGwpLGwuYWRkTG9jYWxIb29rKCJ1bnN1YnNjcmliZSIsKCk9PnttZCh0aGlzLGtrKS5kZWxldGUobCl9KSxsLl93cml0ZUluaXRpYWxDaGFuZ2VzKENuZShtZCh0aGlzLHZ5KSxtZCh0aGlzLEFrKSkpLGx9ZW1pdChsKXts''@;'; put 'put ''ZXQgYT1tZCh0aGlzLEFrKTsoIW1kKHRoaXMsVGspfHxtZCh0aGlzLHZ5KS5sZW5ndGghPT1sLmxlbmd0aCkmJigwPT09bC5sZW5ndGg/bD1uZXcgQXJyYXkoYS5sZW5ndGgpLmZpbGwobWQodGhpcyxEaykpOkVrKHRoaXMsdnksbmV3IEFycmF5KGwubGVuZ3RoKS5maWxsKG1kKHRoaXMsRGsp''@;'; put 'put ''KSksbWQodGhpcyxUayl8fChFayh0aGlzLFRrLCEwKSxhPW1kKHRoaXMsdnkpKSk7Y29uc3QgZD1DbmUoYSxsKTttZCh0aGlzLGtrKS5mb3JFYWNoKGg9PmguX3dyaXRlKGQpKSxFayh0aGlzLEFrLGwpfX1jbGFzcyB2Vntjb25zdHJ1Y3Rvcigpe3RoaXMuaW5kZXhlc1NlcXVlbmNlPW5ldyB2''@;'; put 'put ''bmUsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uPW5ldyBibmUobD0+bC5zb21lKGE9PiEwPT09YSksITEpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb249bmV3IGJuZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb249bmV3IGdWLHRoaXMuaGlk''@;'; put 'put ''aW5nQ2hhbmdlc09ic2VydmFibGU9bmV3IE9UZSh7aW5pdGlhbEluZGV4VmFsdWU6ITF9KSx0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9W10sdGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU9W10sdGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRo''@;'; put 'put ''aXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITEsdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMSx0aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZT1bXSx0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hl''@;'; put 'put ''PW5ldyBNYXAsdGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlPW5ldyBNYXAsdGhpcy5pbmRleGVzU2VxdWVuY2UuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT57dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxv''@;'; put 'put ''Y2FsSG9va3MoImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsdGhpcy5pbmRleGVzU2VxdWVuY2UsbnVsbCl9KSx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2Ui''@;'; put 'put ''LGw9Pnt0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9''@;'; put 'put ''Pnt0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhp''@;'; put 'put ''cy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24pfSl9c3VzcGVuZE9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMH1yZXN1bWVPcGVyYXRpb25zKCl7dGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy51cGRhdGVDYWNoZSgpfWNyZWF0ZUNoYW5nZXNP''@;'; put 'put ''YnNlcnZlcihsKXtpZigiaGlkaW5nIiE9PWwpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbmRleCBtYXAgdHlwZSAiJHtsfSIuYCk7cmV0dXJuIHRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuY3JlYXRlT2JzZXJ2ZXIoKX1jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKGwsYSxk''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5yZWdpc3Rlck1hcChsLGZ1bmN0aW9uIFNUZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtpZighX25lLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBtYXAgdHlwZSAo''@;'; put 'put ''IiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gbmV3KF9uZS5nZXQoYykpKGwpfShhLGQpKX1yZWdpc3Rlck1hcChsLGEpe2lmKHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlzLnZhcmlvdXNNYXBz''@;'; put 'put ''Q29sbGVjdGlvbi5nZXQobCkpdGhyb3cgRXJyb3IoYE1hcCB3aXRoIG5hbWUgIiR7bH0iIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTthIGluc3RhbmNlb2YgZ3k/dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk6YSBpbnN0YW5jZW9mIE1rP3RoaXMuaGlk''@;'; put 'put ''aW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTp0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpO2NvbnN0IGQ9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtyZXR1cm4gZD4wJiZhLmluaXQoZCksYX11bnJlZ2lzdGVyTWFwKGwpe3RoaXMudHJpbW1pbmdNYXBz''@;'; put 'put ''Q29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgp''@;'; put 'put ''LHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKX1nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZVtsXTtyZXR1cm4gS2ko''@;'; put 'put ''YSk/YTpudWxsfWdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKXtjb25zdCBhPXRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlW2xdO3JldHVybiBLaShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21QaHlzaWNh''@;'; put 'put ''bFRvVmlzdWFsSW5kZXhlc0NhY2hlLmdldChsKTtyZXR1cm4gS2koYSk/YTpudWxsfWdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCl7cmV0dXJuIHRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgobCkpfWdldFJl''@;'; put 'put ''bmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuZ2V0KGwpO3JldHVybiBLaShhKT9hOm51bGx9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihudWxsPT09dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKSlyZXR1cm4gbnVsbDtpZih0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuaGFzKGwpKXJldHVybiBsO2NvbnN0IGY9QXJyYXkuZnJvbSh0''@;'; put 'put ''aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUua2V5cygpKTtsZXQgXz0tMTtyZXR1cm4gXz1hPjA/Zi5maW5kSW5kZXgoVD0+VD5sKTpmLnJldmVyc2UoKS5maW5kSW5kZXgoVD0+VDxsKSwtMT09PV8/ZD90aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLC1hLCEx''@;'; put 'put ''KTpudWxsOmZbX119aW5pdFRvTGVuZ3RoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkobCkua2V5cygp''@;'; put 'put ''XSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5pdCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5pdChsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9''@;'; put 'put ''dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmlu''@;'; put 'put ''aXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKX1maXRUb0xlbmd0aChsKXtjb25zdCBhPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7aWYobDxhKXtjb25zdCBkPVsuLi5BcnJheSh0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLWwp''@;'; put 'put ''LmtleXMoKV0ubWFwKGg9PmgrbCk7dGhpcy5yZW1vdmVJbmRleGVzKGQpfWVsc2UgdGhpcy5pbnNlcnRJbmRleGVzKGEsbC1hKX1nZXRJbmRleGVzU2VxdWVuY2UoKXtyZXR1cm4gdGhpcy5pbmRleGVzU2VxdWVuY2UuZ2V0VmFsdWVzKCl9c2V0SW5kZXhlc1NlcXVlbmNlKGwpe3ZvaWQgMD09''@;'; put 'put ''PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0idXBkYXRlIiksdGhpcy5pbmRleGVzU2VxdWVuY2Uuc2V0VmFsdWVzKGwpLCJ1cGRhdGUiPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQg''@;'; put 'put ''MCl9Z2V0Tm90VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9''@;'; put 'put ''PT10aGlzLmlzVHJpbW1lZChkKSl9Z2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmxlbmd0aH1nZXROb3RIaWRkZW5JbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXROb3RIaWRkZW5JbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhl''@;'; put 'put ''cygpLmxlbmd0aH1nZXRSZW5kZXJhYmxlSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlOnRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4''@;'; put 'put ''ZXMoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCkubGVuZ3RofWdldE51bWJlck9mSW5kZXhlcygpe3JldHVybiB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmxl''@;'; put 'put ''bmd0aH1tb3ZlSW5kZXhlcyhsLGEpeyJudW1iZXIiPT10eXBlb2YgbCYmKGw9W2xdKTtjb25zdCBkPWNzKGwsaWU9PnRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoaWUpKSxoPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxmPWwubGVuZ3RoLF89cHkodGhpcy5nZXRJ''@;'; put 'put ''bmRleGVzU2VxdWVuY2UoKSxkKSxUPV8uZmlsdGVyKGllPT4hMT09PXRoaXMuaXNUcmltbWVkKGllKSk7bGV0IFc9Xy5pbmRleE9mKFRbVC5sZW5ndGgtMV0pKzE7YStmPGgmJihXPV8uaW5kZXhPZihUW2FdKSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJtb3ZlIix0aGlzLnNldEluZGV4''@;'; put 'put ''ZXNTZXF1ZW5jZShjVihfLFcsZCkpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDB9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwpfWlzSGlkZGVuKGwpe3JldHVybiB0aGlzLmhpZGluZ01hcHNDb2xs''@;'; put 'put ''ZWN0aW9uLmdldE1lcmdlZFZhbHVlQXRJbmRleChsKX1pbnNlcnRJbmRleGVzKGwsYSl7Y29uc3QgZD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKClbbF0saD1LaShkKT9kOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksZj10aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluY2x1ZGVzKGQp''@;'; put 'put ''P3RoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5kZXhPZihkKTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLF89Y3MobmV3IEFycmF5KGEpLmZpbGwoaCksKFQsVyk9PlQrVyk7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5zZXJ0Iix0aGlz''@;'; put 'put ''LmluZGV4ZXNTZXF1ZW5jZS5pbnNlcnQoZixfKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsXyksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsXyksdGhpcy52YXJpb3Vz''@;'; put 'put ''TWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLF8pLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfXJlbW92ZUluZGV4ZXMobCl7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0icmVtb3ZlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5yZW1vdmUobCks''@;'; put 'put ''dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVy''@;'; put 'put ''eShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX11cGRhdGVDYWNoZSgpeyghMD09PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKXx8ITE9PT10aGlzLmlzQmF0Y2hlZCYmITA9PT0odGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkfHx0''@;'; put 'put ''aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZHx8dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZCkpJiYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51cGRhdGVDYWNoZSgpLHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNo''@;'; put 'put ''ZT10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCExKSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT10aGlzLmdldE5vdEhpZGRlbkluZGV4ZXMoITEpLHRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoITEpLHRoaXMuY2FjaGVG''@;'; put 'put ''cm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXMoKSx0aGlzLmNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkJiZ0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmVtaXQodGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJn''@;'; put 'put ''ZWRWYWx1ZXMoKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjYWNoZVVwZGF0ZWQiLHtpbmRleGVzU2VxdWVuY2VDaGFuZ2VkOnRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZCx0cmltbWVkSW5kZXhlc0NoYW5nZWQ6dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQsaGlkZGVuSW5kZXhlc0NoYW5n''@;'; put 'put ''ZWQ6dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZH0pLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMSx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSExKX1jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpe2NvbnN0IGw9''@;'; put 'put ''dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGEpO3RoaXMuZnJvbVBoeXNpY2FsVG9W''@;'; put 'put ''aXN1YWxJbmRleGVzQ2FjaGUuc2V0KGQsYSl9fWNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKXtjb25zdCBsPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9''@;'; put 'put ''MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChhKSxoPXRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoZCk7dGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLnNldChoLGEpfX19ZnVuY3Rpb24gTW5lKGMpe2Nv''@;'; put 'put ''bnN0IGE9L14oW2EtekEtWl17Mn0pLShbYS16QS1aXXsyfSkkLy5leGVjKGMpO3JldHVybiBhP2Ake2FbMV0udG9Mb3dlckNhc2UoKX0tJHthWzJdLnRvVXBwZXJDYXNlKCl9YDpjfWZ1bmN0aW9uIHhuZShjKXtLaShjKSYmU04oQWFgTGFuZ3VhZ2Ugd2l0aCBjb2RlICIke2N9IiB3YXMgbm90''@;'; put 'put ''IGZvdW5kLiBZb3Ugc2hvdWxkIHJlZ2lzdGVyIHBhcnRpY3VsYXIgbGFuZ3VhZ2VceDIwCiAgICBiZWZvcmUgdXNpbmcgaXQuIFJlYWQgbW9yZSBhYm91dCB0aGlzIGlzc3VlIGF0OiBodHRwczovL2RvY3MuaGFuZHNvbnRhYmxlLmNvbS9pMThuL21pc3NpbmctbGFuZ3VhZ2UtY29kZS5gKX1U''@;'; put 'put ''YSh2VixPMCk7Y29uc3R7cmVnaXN0ZXI6SFRlLGdldFZhbHVlczpOVGV9PXBkKCJwaHJhc2VGb3JtYXR0ZXJzIik7IWZ1bmN0aW9uIFZUZShjLGwpe0hUZShjLGwpfSgicGx1cmFsaXplIixmdW5jdGlvbiBGVGUoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmTnVtYmVyLmlzSW50ZWdl''@;'; put 'put ''cihsKT9jW2xdOmN9KTtjb25zdCBFbmU9IkNvbnRleHRNZW51Oml0ZW1zIixfVj1gJHtFbmV9Lm5vSXRlbXNgLGJWPWAke0VuZX0uaW5zZXJ0Um93QWJvdmVgLHlWPWAke0VuZX0uaW5zZXJ0Um93QmVsb3dgLHdWPWAke0VuZX0uaW5zZXJ0Q29sdW1uT25UaGVMZWZ0YCxDVj1gJHtFbmV9Lmlu''@;'; put 'put ''c2VydENvbHVtbk9uVGhlUmlnaHRgLFNWPWAke0VuZX0ucmVtb3ZlUm93YCxNVj1gJHtFbmV9LnJlbW92ZUNvbHVtbmAseFY9YCR7RW5lfS51bmRvYCxFVj1gJHtFbmV9LnJlZG9gLGtWPWAke0VuZX0ucmVhZE9ubHlgLEFWPWAke0VuZX0uY2xlYXJDb2x1bW5gLFRWPWAke0VuZX0uY29weWAs''@;'; put 'put ''RFY9YCR7RW5lfS5jb3B5V2l0aEhlYWRlcnNgLElWPWAke0VuZX0uY29weVdpdGhHcm91cEhlYWRlcnNgLExWPWAke0VuZX0uY29weUhlYWRlcnNPbmx5YCxSVj1gJHtFbmV9LmN1dGAsT1Y9YCR7RW5lfS5mcmVlemVDb2x1bW5gLFBWPWAke0VuZX0udW5mcmVlemVDb2x1bW5gLEZWPWAke0Vu''@;'; put 'put ''ZX0ubWVyZ2VDZWxsc2AsSFY9YCR7RW5lfS51bm1lcmdlQ2VsbHNgLE5WPWAke0VuZX0uYWRkQ29tbWVudGAsVlY9YCR7RW5lfS5lZGl0Q29tbWVudGAsQlY9YCR7RW5lfS5yZW1vdmVDb21tZW50YCxqVj1gJHtFbmV9LnJlYWRPbmx5Q29tbWVudGAselY9YCR7RW5lfS5hbGlnbmAsVVY9YCR7''@;'; put 'put ''RW5lfS5hbGlnbi5sZWZ0YCxaVj1gJHtFbmV9LmFsaWduLmNlbnRlcmAsWVY9YCR7RW5lfS5hbGlnbi5yaWdodGAsV1Y9YCR7RW5lfS5hbGlnbi5qdXN0aWZ5YCxHVj1gJHtFbmV9LmFsaWduLnRvcGAsJFY9YCR7RW5lfS5hbGlnbi5taWRkbGVgLHFWPWAke0VuZX0uYWxpZ24uYm90dG9tYCxL''@;'; put 'put ''Vj1gJHtFbmV9LmJvcmRlcnNgLFhWPWAke0VuZX0uYm9yZGVycy50b3BgLEpWPWAke0VuZX0uYm9yZGVycy5yaWdodGAsUVY9YCR7RW5lfS5ib3JkZXJzLmJvdHRvbWAsZUI9YCR7RW5lfS5ib3JkZXJzLmxlZnRgLHRCPWAke0VuZX0uYm9yZGVycy5yZW1vdmVgLG5CPWAke0VuZX0ubmVzdGVk''@;'; put 'put ''SGVhZGVycy5pbnNlcnRDaGlsZFJvd2AsckI9YCR7RW5lfS5uZXN0ZWRIZWFkZXJzLmRldGFjaEZyb21QYXJlbnRgLGlCPWAke0VuZX0uaGlkZUNvbHVtbmAsb0I9YCR7RW5lfS5zaG93Q29sdW1uYCxzQj1gJHtFbmV9LmhpZGVSb3dgLGFCPWAke0VuZX0uc2hvd1Jvd2AsJHU9IkZpbHRlcnM6''@;'; put 'put ''Iix5bD1gJHskdX1jb25kaXRpb25zYCxJaz1gJHt5bH0ubm9uZWAsbEI9YCR7eWx9LmlzRW1wdHlgLGNCPWAke3lsfS5pc05vdEVtcHR5YCx1Qj1gJHt5bH0uaXNFcXVhbFRvYCxkQj1gJHt5bH0uaXNOb3RFcXVhbFRvYCxoQj1gJHt5bH0uYmVnaW5zV2l0aGAsZkI9YCR7eWx9LmVuZHNXaXRo''@;'; put 'put ''YCxwQj1gJHt5bH0uY29udGFpbnNgLGdCPWAke3lsfS5kb2VzTm90Q29udGFpbmAsalRlPWAke3lsfS5ieVZhbHVlYCxtQj1gJHt5bH0uZ3JlYXRlclRoYW5gLHZCPWAke3lsfS5ncmVhdGVyVGhhbk9yRXF1YWxUb2AsX0I9YCR7eWx9Lmxlc3NUaGFuYCxiQj1gJHt5bH0ubGVzc1RoYW5PckVx''@;'; put 'put ''dWFsVG9gLHlCPWAke3lsfS5pc0JldHdlZW5gLHdCPWAke3lsfS5pc05vdEJldHdlZW5gLENCPWAke3lsfS5hZnRlcmAsU0I9YCR7eWx9LmJlZm9yZWAsTUI9YCR7eWx9LnRvZGF5YCx4Qj1gJHt5bH0udG9tb3Jyb3dgLEVCPWAke3lsfS55ZXN0ZXJkYXlgLGtCPWAkeyR1fWxhYmVscy5maWx0''@;'; put 'put ''ZXJCeUNvbmRpdGlvbmAsQUI9YCR7JHV9bGFiZWxzLmZpbHRlckJ5VmFsdWVgLFRCPWAkeyR1fWxhYmVscy5jb25qdW5jdGlvbmAsTGs9YCR7JHV9bGFiZWxzLmRpc2p1bmN0aW9uYCxSaz1gJHskdX12YWx1ZXMuYmxhbmtDZWxsc2AsREI9YCR7JHV9YnV0dG9ucy5zZWxlY3RBbGxgLElCPWAk''@;'; put 'put ''eyR1fWJ1dHRvbnMuY2xlYXJgLExCPWAkeyR1fWJ1dHRvbnMub2tgLFJCPWAkeyR1fWJ1dHRvbnMuY2FuY2VsYCxPQj1gJHskdX1idXR0b25zLnBsYWNlaG9sZGVyLnNlYXJjaGAsUEI9YCR7JHV9YnV0dG9ucy5wbGFjZWhvbGRlci52YWx1ZWAsRkI9YCR7JHV9YnV0dG9ucy5wbGFjZWhvbGRl''@;'; put 'put ''ci5zZWNvbmRWYWx1ZWAsa25lPXtsYW5ndWFnZUNvZGU6ImVuLVVTIixbX1ZdOiJObyBhdmFpbGFibGUgb3B0aW9ucyIsW2JWXToiSW5zZXJ0IHJvdyBhYm92ZSIsW3lWXToiSW5zZXJ0IHJvdyBiZWxvdyIsW3dWXToiSW5zZXJ0IGNvbHVtbiBsZWZ0IixbQ1ZdOiJJbnNlcnQgY29sdW1uIHJp''@;'; put 'put ''Z2h0IixbU1ZdOlsiUmVtb3ZlIHJvdyIsIlJlbW92ZSByb3dzIl0sW01WXTpbIlJlbW92ZSBjb2x1bW4iLCJSZW1vdmUgY29sdW1ucyJdLFt4Vl06IlVuZG8iLFtFVl06IlJlZG8iLFtrVl06IlJlYWQgb25seSIsW0FWXToiQ2xlYXIgY29sdW1uIixbelZdOiJBbGlnbm1lbnQiLFtVVl06Ikxl''@;'; put 'put ''ZnQiLFtaVl06IkNlbnRlciIsW1lWXToiUmlnaHQiLFtXVl06Ikp1c3RpZnkiLFtHVl06IlRvcCIsWyRWXToiTWlkZGxlIixbcVZdOiJCb3R0b20iLFtPVl06IkZyZWV6ZSBjb2x1bW4iLFtQVl06IlVuZnJlZXplIGNvbHVtbiIsW0tWXToiQm9yZGVycyIsW1hWXToiVG9wIixbSlZdOiJSaWdo''@;'; put 'put ''dCIsW1FWXToiQm90dG9tIixbZUJdOiJMZWZ0IixbdEJdOiJSZW1vdmUgYm9yZGVyKHMpIixbTlZdOiJBZGQgY29tbWVudCIsW1ZWXToiRWRpdCBjb21tZW50IixbQlZdOiJEZWxldGUgY29tbWVudCIsW2pWXToiUmVhZC1vbmx5IGNvbW1lbnQiLFtGVl06Ik1lcmdlIGNlbGxzIixbSFZdOiJV''@;'; put 'put ''bm1lcmdlIGNlbGxzIixbVFZdOiJDb3B5IixbRFZdOlsiQ29weSB3aXRoIGhlYWRlciIsIkNvcHkgd2l0aCBoZWFkZXJzIl0sW0lWXTpbIkNvcHkgd2l0aCBncm91cCBoZWFkZXIiLCJDb3B5IHdpdGggZ3JvdXAgaGVhZGVycyJdLFtMVl06WyJDb3B5IGhlYWRlciBvbmx5IiwiQ29weSBoZWFk''@;'; put 'put ''ZXJzIG9ubHkiXSxbUlZdOiJDdXQiLFtuQl06Ikluc2VydCBjaGlsZCByb3ciLFtyQl06IkRldGFjaCBmcm9tIHBhcmVudCIsW2lCXTpbIkhpZGUgY29sdW1uIiwiSGlkZSBjb2x1bW5zIl0sW29CXTpbIlNob3cgY29sdW1uIiwiU2hvdyBjb2x1bW5zIl0sW3NCXTpbIkhpZGUgcm93IiwiSGlk''@;'; put 'put ''ZSByb3dzIl0sW2FCXTpbIlNob3cgcm93IiwiU2hvdyByb3dzIl0sW0lrXToiTm9uZSIsW2xCXToiSXMgZW1wdHkiLFtjQl06IklzIG5vdCBlbXB0eSIsW3VCXToiSXMgZXF1YWwgdG8iLFtkQl06IklzIG5vdCBlcXVhbCB0byIsW2hCXToiQmVnaW5zIHdpdGgiLFtmQl06IkVuZHMgd2l0aCIs''@;'; put 'put ''W3BCXToiQ29udGFpbnMiLFtnQl06IkRvZXMgbm90IGNvbnRhaW4iLFttQl06IkdyZWF0ZXIgdGhhbiIsW3ZCXToiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIixbX0JdOiJMZXNzIHRoYW4iLFtiQl06Ikxlc3MgdGhhbiBvciBlcXVhbCB0byIsW3lCXToiSXMgYmV0d2VlbiIsW3dCXToiSXMg''@;'; put 'put ''bm90IGJldHdlZW4iLFtDQl06IkFmdGVyIixbU0JdOiJCZWZvcmUiLFtNQl06IlRvZGF5IixbeEJdOiJUb21vcnJvdyIsW0VCXToiWWVzdGVyZGF5IixbUmtdOiJCbGFuayBjZWxscyIsW2tCXToiRmlsdGVyIGJ5IGNvbmRpdGlvbiIsW0FCXToiRmlsdGVyIGJ5IHZhbHVlIixbVEJdOiJBbmQi''@;'; put 'put ''LFtMa106Ik9yIixbREJdOiJTZWxlY3QgYWxsIixbSUJdOiJDbGVhciIsW0xCXToiT0siLFtSQl06IkNhbmNlbCIsW09CXToiU2VhcmNoIixbUEJdOiJWYWx1ZSIsW0ZCXToiU2Vjb25kIHZhbHVlIn0selRlPVYsSEI9a25lLmxhbmd1YWdlQ29kZSx7cmVnaXN0ZXI6VVRlLGdldEl0ZW06QW5l''@;'; put 'put ''LGhhc0l0ZW06WlRlLGdldFZhbHVlczpZVGV9PXBkKCJsYW5ndWFnZXNEaWN0aW9uYXJpZXMiKTtmdW5jdGlvbiBUbmUoYyxsKXtsZXQgYT1jLGQ9bDtyZXR1cm4gdXMoYykmJihkPWMsYT1kLmxhbmd1YWdlQ29kZSksZnVuY3Rpb24gV1RlKGMsbCl7YyE9PUhCJiZmdW5jdGlvbiBQVGUoYyxs''@;'; put 'put ''KXtkcyhsLChhLGQpPT57TGEoY1tkXSkmJihjW2RdPWEpfSl9KGwsQW5lKEhCKSl9KGEsZCksVVRlKGEseXUoZCkpLHl1KGQpfWZ1bmN0aW9uIERuZShjKXtyZXR1cm4gTkIoYyk/eXUoQW5lKGMpKTpudWxsfWZ1bmN0aW9uIE5CKGMpe3JldHVybiBaVGUoYyl9ZnVuY3Rpb24gSW5lKGMsbCxh''@;'; put 'put ''KXtjb25zdCBkPURuZShjKTtpZihudWxsPT09ZClyZXR1cm4gbnVsbDtjb25zdCBoPWRbbF07aWYoTGEoaCkpcmV0dXJuIG51bGw7Y29uc3QgZj1mdW5jdGlvbiAkVGUoYyxsKXtsZXQgYT1jO3JldHVybiBJbihmdW5jdGlvbiBCVGUoKXtyZXR1cm4gTlRlKCl9KCksZD0+e2E9ZChjLGwpfSks''@;'; put 'put ''YX0oaCxhKTtyZXR1cm4gQXJyYXkuaXNBcnJheShmKT9mWzBdOmZ9VG5lKGtuZSk7Y29uc3QgT2s9ImFjdGl2ZS1oZWFkZXIiLFBrPSJhcmVhIixfeT0iY2VsbCIsVkI9ImZpbGwiLGJ5PSJoZWFkZXIiLEJCPSJjdXN0b20tc2VsZWN0aW9uIixRVGU9Y2xhc3MgSlRle2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSl7dGhpcy5zZXR0aW5ncz1sLHRoaXMuY2VsbFJhbmdlPWF8fG51bGwsdGhpcy5pbnN0YW5jZUJvcmRlcnM9e30sdGhpcy5jbGFzc05hbWVzPVt0aGlzLnNldHRpbmdzLmNsYXNzTmFtZV0sdGhpcy5jbGFzc05hbWVHZW5lcmF0b3I9dGhpcy5saW5lYXJDbGFzc05hbWVHZW5lcmF0b3IodGhp''@;'; put 'put ''cy5zZXR0aW5ncy5jbGFzc05hbWUsdGhpcy5zZXR0aW5ncy5sYXllckxldmVsKX1nZXRCb3JkZXIobCl7cmV0dXJuIHRoaXMuaW5zdGFuY2VCb3JkZXJzW2wuZ3VpZF18fCh0aGlzLmluc3RhbmNlQm9yZGVyc1tsLmd1aWRdPW5ldyBjbGFzcyBLVGV7Y29uc3RydWN0b3IobCxhKXthJiYodGhp''@;'; put 'put ''cy5ldmVudE1hbmFnZXI9bC5ldmVudE1hbmFnZXIsdGhpcy5pbnN0YW5jZT1sLHRoaXMud290PWwsdGhpcy5zZXR0aW5ncz1hLHRoaXMubW91c2VEb3duPSExLHRoaXMubWFpbj1udWxsLHRoaXMudG9wPW51bGwsdGhpcy5ib3R0b209bnVsbCx0aGlzLnN0YXJ0PW51bGwsdGhpcy5lbmQ9bnVs''@;'; put 'put ''bCx0aGlzLnRvcFN0eWxlPW51bGwsdGhpcy5ib3R0b21TdHlsZT1udWxsLHRoaXMuc3RhcnRTdHlsZT1udWxsLHRoaXMuZW5kU3R5bGU9bnVsbCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZT17d2lkdGg6IjZweCIsaGVpZ2h0OiI2cHgiLGJvcmRlcldpZHRoOiIxcHgiLGJvcmRlclN0eWxlOiJz''@;'; put 'put ''b2xpZCIsYm9yZGVyQ29sb3I6IiNGRkYifSx0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0PS1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMix0aGlzLmNvcm5lcj1udWxsLHRoaXMuY29ybmVyU3R5bGU9bnVsbCx0aGlzLmNyZWF0ZUJvcmRlcnMoYSksdGhp''@;'; put 'put ''cy5yZWdpc3Rlckxpc3RlbmVycygpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLCgpPT50aGlzLm9uTW91c2VEb3duKCkpLHRoaXMuZXZlbnRNYW5h''@;'; put 'put ''Z2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpO2ZvcihsZXQgYT0wLGQ9dGhpcy5tYWluLmNoaWxkTm9kZXMubGVuZ3RoO2E8ZDthKyspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm1haW4uY2hpbGROb2Rlc1thXSwi''@;'; put 'put ''bW91c2VlbnRlciIsZj0+dGhpcy5vbk1vdXNlRW50ZXIoZix0aGlzLm1haW4uY2hpbGROb2Rlc1thXSkpfW9uTW91c2VEb3duKCl7dGhpcy5tb3VzZURvd249ITB9b25Nb3VzZVVwKCl7dGhpcy5tb3VzZURvd249ITF9b25Nb3VzZUVudGVyKGwsYSl7aWYoIXRoaXMubW91c2VEb3dufHwhdGhp''@;'; put 'put ''cy53b3QuZ2V0U2V0dGluZygiaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlciIpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksdjIobCk7Y29uc3QgZD10aGlzLGg9dGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHksZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Euc3R5bGUuZGlzcGxheT0i''@;'; put 'put ''bm9uZSIsdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLGZ1bmN0aW9uIFQoVyl7KGZ1bmN0aW9uIF8oVyl7aWYoVy5jbGllbnRZPE1hdGguZmxvb3IoZi50b3ApfHxXLmNsaWVudFk+TWF0aC5jZWlsKGYudG9wK2YuaGVpZ2h0KXx8Vy5jbGllbnRYPE1h''@;'; put 'put ''dGguZmxvb3IoZi5sZWZ0KXx8Vy5jbGllbnRYPk1hdGguY2VpbChmLmxlZnQrZi53aWR0aCkpcmV0dXJuITB9KShXKSYmKGQuZXZlbnRNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoaCwibW91c2Vtb3ZlIixUKSxhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9KX1jcmVhdGVCb3JkZXJzKGwp''@;'; put 'put ''e2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLndvdDt0aGlzLm1haW49YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtjb25zdCBkPVsidG9wIiwic3RhcnQiLCJib3R0b20iLCJlbmQiLCJjb3JuZXIiXTtsZXQgaD10aGlzLm1haW4uc3R5bGU7aC5wb3NpdGlvbj0iYWJzb2x1dGUiLGgudG9wPTAs''@;'; put 'put ''aC5sZWZ0PTA7Zm9yKGxldCBUPTA7VDw1O1QrKyl7Y29uc3QgVz1kW1RdLGllPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWUuY2xhc3NOYW1lPWB3dEJvcmRlciAke3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lfHwiIn1gLHRoaXMuc2V0dGluZ3NbV10mJnRoaXMuc2V0dGluZ3NbV10uaGlkZSYm''@;'; put 'put ''KGllLmNsYXNzTmFtZSs9IiBoaWRkZW4iKSxoPWllLnN0eWxlLGguYmFja2dyb3VuZENvbG9yPXRoaXMuc2V0dGluZ3NbV10mJnRoaXMuc2V0dGluZ3NbV10uY29sb3I/dGhpcy5zZXR0aW5nc1tXXS5jb2xvcjpsLmJvcmRlci5jb2xvcixoLmhlaWdodD10aGlzLnNldHRpbmdzW1ddJiZ0aGlz''@;'; put 'put ''LnNldHRpbmdzW1ddLndpZHRoP2Ake3RoaXMuc2V0dGluZ3NbV10ud2lkdGh9cHhgOmAke2wuYm9yZGVyLndpZHRofXB4YCxoLndpZHRoPXRoaXMuc2V0dGluZ3NbV10mJnRoaXMuc2V0dGluZ3NbV10ud2lkdGg/YCR7dGhpcy5zZXR0aW5nc1tXXS53aWR0aH1weGA6YCR7bC5ib3JkZXIud2lk''@;'; put 'put ''dGh9cHhgLHRoaXMubWFpbi5hcHBlbmRDaGlsZChpZSl9dGhpcy50b3A9dGhpcy5tYWluLmNoaWxkTm9kZXNbMF0sdGhpcy5zdGFydD10aGlzLm1haW4uY2hpbGROb2Rlc1sxXSx0aGlzLmJvdHRvbT10aGlzLm1haW4uY2hpbGROb2Rlc1syXSx0aGlzLmVuZD10aGlzLm1haW4uY2hpbGROb2Rl''@;'; put 'put ''c1szXSx0aGlzLnRvcFN0eWxlPXRoaXMudG9wLnN0eWxlLHRoaXMuc3RhcnRTdHlsZT10aGlzLnN0YXJ0LnN0eWxlLHRoaXMuYm90dG9tU3R5bGU9dGhpcy5ib3R0b20uc3R5bGUsdGhpcy5lbmRTdHlsZT10aGlzLmVuZC5zdHlsZSx0aGlzLmNvcm5lcj10aGlzLm1haW4uY2hpbGROb2Rlc1s0''@;'; put 'put ''XSx0aGlzLmNvcm5lci5jbGFzc05hbWUrPSIgY29ybmVyIix0aGlzLmNvcm5lclN0eWxlPXRoaXMuY29ybmVyLnN0eWxlLHRoaXMuY29ybmVyU3R5bGUud2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsdGhpcy5jb3JuZXJTdHlsZS5oZWlnaHQ9dGhpcy5jb3JuZXJEZWZhdWx0''@;'; put 'put ''U3R5bGUuaGVpZ2h0LHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyPVt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJTdHlsZSx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJDb2xvcl0uam9pbigiICIpLG0yKCkmJnRo''@;'; put 'put ''aXMuY3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKSx0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFibGU6Zn09dGhpcy53b3Q7bGV0IF89Zi5ib3JkZXJzSG9sZGVyO198fChfPWEuY3JlYXRlRWxlbWVudCgiZGl2IiksXy5jbGFzc05hbWU9Imh0Qm9yZGVycyIsZi5ib3JkZXJzSG9s''@;'; put 'put ''ZGVyPV8sZi5zcHJlYWRlci5hcHBlbmRDaGlsZChfKSksXy5hcHBlbmRDaGlsZCh0aGlzLm1haW4pfWNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMud290O3RoaXMuc2VsZWN0aW9uSGFuZGxlcz17dG9wOmwuY3JlYXRlRWxlbWVudCgi''@;'; put 'put ''RElWIiksdG9wSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbUhpdEFyZWE6bC5jcmVhdGVFbGVtZW50KCJESVYiKX0sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZSB0''@;'; put 'put ''b3BMZWZ0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbS5jbGFzc05hbWU9''@;'; put 'put ''ImJvdHRvbVNlbGVjdGlvbkhhbmRsZSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuY2xhc3NOYW1lPSJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0''@;'; put 'put ''aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzPXt0b3A6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5zdHlsZSx0b3BIaXRBcmVhOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLnN0eWxlLGJvdHRvbTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLnN0eWxlLGJvdHRvbUhp''@;'; put 'put ''dEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuc3R5bGV9LGRzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiNDBweCIsd2lkdGg6IjQwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCg0MC8xLjUsMTApfXB4YH0sKF8sVCk9Pnt0aGlzLnNlbGVjdGlv''@;'; put 'put ''bkhhbmRsZXMuc3R5bGVzLmJvdHRvbUhpdEFyZWFbVF09Xyx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWFbVF09X30pLGRzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiMTBweCIsd2lkdGg6IjEwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCgxMC8x''@;'; put 'put ''LjUsMTApfXB4YCxiYWNrZ3JvdW5kOiIjRjVGNUZGIixib3JkZXI6IjFweCBzb2xpZCAjNDI4NWM4In0sKF8sVCk9Pnt0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbVtUXT1fLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wW1RdPV99KSx0aGlzLm1haW4uYXBwZW5k''@;'; put 'put ''Q2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcCksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRo''@;'; put 'put ''aXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhKX1pc1BhcnRSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy53b3Quc2VsZWN0aW9ucy5jcmVhdGVPckdldEFyZWEoKTtyZXR1cm4hKCFkLmNlbGxSYW5nZXx8bD09PWQuY2VsbFJhbmdlLnRvLnJvdyYmYT09PWQuY2VsbFJhbmdlLnRvLmNv''@;'; put 'put ''bCl9dXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24obCxhLGQsaCxmLF8pe2NvbnN0IFc9dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIik/InJpZ2h0IjoibGVmdCIse3RvcDppZSx0b3BIaXRBcmVhOmdlLGJvdHRvbTp3ZSxib3R0b21IaXRBcmVh''@;'; put 'put ''OkVlfT10aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLFplPXBhcnNlSW50KGllLmJvcmRlcldpZHRoLDEwKSxvdD1wYXJzZUludChpZS53aWR0aCwxMCksZXQ9cGFyc2VJbnQoZ2Uud2lkdGgsMTApLHl0PXRoaXMud290Lnd0VGFibGUuZ2V0V2lkdGgoKSxrdD10aGlzLndvdC53dFRhYmxl''@;'; put 'put ''LmdldEhlaWdodCgpO2llLnRvcD1gJHtwYXJzZUludChkLW90LTEsMTApfXB4YCxpZVtXXT1gJHtwYXJzZUludChoLW90LTEsMTApfXB4YCxnZS50b3A9YCR7cGFyc2VJbnQoZC1ldC80KjMsMTApfXB4YCxnZVtXXT1gJHtwYXJzZUludChoLWV0LzQqMywxMCl9cHhgO2NvbnN0IFN0PU1hdGgu''@;'; put 'put ''bWluKHBhcnNlSW50KGgrZiwxMCkseXQtb3QtMipaZSksUXQ9TWF0aC5taW4ocGFyc2VJbnQoaCtmLWV0LzQsMTApLHl0LWV0LTIqWmUpO3dlW1ddPWAke1N0fXB4YCxFZVtXXT1gJHtRdH1weGA7Y29uc3Qgbm49TWF0aC5taW4ocGFyc2VJbnQoZCtfLDEwKSxrdC1vdC0yKlplKSxtbj1NYXRo''@;'; put 'put ''Lm1pbihwYXJzZUludChkK18tZXQvNCwxMCksa3QtZXQtMipaZSk7d2UudG9wPWAke25ufXB4YCxFZS50b3A9YCR7bW59cHhgLHRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUmJnRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUoKT8oaWUuZGlzcGxheT0iYmxvY2si''@;'; put 'put ''LGdlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmlzUGFydFJhbmdlKGwsYSk/KHdlLmRpc3BsYXk9Im5vbmUiLEVlLmRpc3BsYXk9Im5vbmUiKTood2UuZGlzcGxheT0iYmxvY2siLEVlLmRpc3BsYXk9ImJsb2NrIikpOihpZS5kaXNwbGF5PSJub25lIix3ZS5kaXNwbGF5PSJub25lIixnZS5kaXNw''@;'; put 'put ''bGF5PSJub25lIixFZS5kaXNwbGF5PSJub25lIiksbD09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil8fGE9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik/KGllLnpJbmRleD0iOTk5OSIsZ2UuekluZGV4''@;'; put 'put ''PSI5OTk5Iik6KGllLnpJbmRleD0iIixnZS56SW5kZXg9IiIpfWFwcGVhcihsKXtpZih0aGlzLmRpc2FibGVkKXJldHVybjtjb25zdHt3dFRhYmxlOmEscm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLndvdDtsZXQgZixfLFQsVyxpZSxnZTtjb25zdCB3ZT1hLmdldFJlbmRlcmVk''@;'; put 'put ''Um93c0NvdW50KCk7Zm9yKGxldCBfcj0wO19yPHdlO19yKz0xKXtjb25zdCB2dD1hLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKF9yKTtpZih2dD49bFswXSYmdnQ8PWxbMl0pe2Y9dnQsaWU9bFswXTticmVha319Zm9yKGxldCBfcj13ZS0xO19yPj0wO19yLT0xKXtjb25zdCB2dD1hLnJv''@;'; put 'put ''d0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKF9yKTtpZih2dD49bFswXSYmdnQ8PWxbMl0pe189dnQ7YnJlYWt9fWNvbnN0IEVlPWEuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IF9yPTA7X3I8RWU7X3IrPTEpe2NvbnN0IHZ0PWEuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3Vy''@;'; put 'put ''Y2UoX3IpO2lmKHZ0Pj1sWzFdJiZ2dDw9bFszXSl7VD12dCxnZT1sWzFdO2JyZWFrfX1mb3IobGV0IF9yPUVlLTE7X3I+PTA7X3ItPTEpe2NvbnN0IHZ0PWEuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoX3IpO2lmKHZ0Pj1sWzFdJiZ2dDw9bFszXSl7Vz12dDticmVha319aWYodm9p''@;'; put 'put ''ZCAwPT09Znx8dm9pZCAwPT09VClyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2xldCBaZT1hLmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLFQpKTtjb25zdCBvdD1mIT09X3x8VCE9PVcsZXQ9b3Q/YS5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoXyxX''@;'; put 'put ''KSk6WmUseXQ9cWwoWmUpLGt0PW90P3FsKGV0KTp5dCxTdD1xbChhLlRBQkxFKSxRdD13YShhLlRBQkxFKSxubj15dC50b3AsbW49eXQubGVmdCxFbj10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKTtsZXQgbHI9MCxWcj0wO2lmKEVuKXtjb25zdCBfcj13YShaZSk7''@;'; put 'put ''VnI9bW4rX3Ita3QubGVmdCxscj1oLmlubmVyV2lkdGgtbW4tX3ItKGguaW5uZXJXaWR0aC1TdC5sZWZ0LVF0KS0xfWVsc2UgVnI9a3QubGVmdCt3YShldCktbW4sbHI9bW4tU3QubGVmdC0xO2lmKHRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZChmLF8pKXtjb25zdCBfcj10aGlzLmdldERp''@;'; put 'put ''bWVuc2lvbnNGcm9tSGVhZGVyKCJjb2x1bW5zIixULFcsaWUsU3QpO2xldCB2dD1udWxsO19yJiYoW3Z0LGxyLFZyXT1fciksdnQmJihaZT12dCl9bGV0IF9pPW5uLVN0LnRvcC0xLHVpPWt0LnRvcCthbChldCktbm47aWYodGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKFQsVykpe2NvbnN0IF9y''@;'; put 'put ''PXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoInJvd3MiLGYsXyxnZSxTdCk7bGV0IHZ0PW51bGw7X3ImJihbdnQsX2ksdWldPV9yKSx2dCYmKFplPXZ0KX1jb25zdCBncj16cChaZSxoKTtwYXJzZUludChnci5ib3JkZXJUb3BXaWR0aCwxMCk+MCYmKF9pKz0xLHVpPXVpPjA/dWktMTow''@;'; put 'put ''KSxwYXJzZUludChncltFbj8iYm9yZGVyUmlnaHRXaWR0aCI6ImJvcmRlckxlZnRXaWR0aCJdLDEwKT4wJiYobHIrPTEsVnI9VnI+MD9Wci0xOjApO2NvbnN0IEVpPUVuPyJyaWdodCI6ImxlZnQiO3RoaXMudG9wU3R5bGUudG9wPWAke19pfXB4YCx0aGlzLnRvcFN0eWxlW0VpXT1gJHtscn1w''@;'; put 'put ''eGAsdGhpcy50b3BTdHlsZS53aWR0aD1gJHtWcn1weGAsdGhpcy50b3BTdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5zdGFydFN0eWxlLnRvcD1gJHtfaX1weGAsdGhpcy5zdGFydFN0eWxlW0VpXT1gJHtscn1weGAsdGhpcy5zdGFydFN0eWxlLmhlaWdodD1gJHt1aX1weGAsdGhpcy5zdGFy''@;'; put 'put ''dFN0eWxlLmRpc3BsYXk9ImJsb2NrIjtjb25zdCBVcj1NYXRoLmZsb29yKHRoaXMuc2V0dGluZ3MuYm9yZGVyLndpZHRoLzIpO3RoaXMuYm90dG9tU3R5bGUudG9wPV9pK3VpLVVyKyJweCIsdGhpcy5ib3R0b21TdHlsZVtFaV09YCR7bHJ9cHhgLHRoaXMuYm90dG9tU3R5bGUud2lkdGg9YCR7''@;'; put 'put ''VnJ9cHhgLHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuZW5kU3R5bGUudG9wPWAke19pfXB4YCx0aGlzLmVuZFN0eWxlW0VpXT1scitWci1VcisicHgiLHRoaXMuZW5kU3R5bGUuaGVpZ2h0PWAke3VpKzF9cHhgLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0iYmxvY2siO2xl''@;'; put 'put ''dCBIbj10aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxlO0huPSJmdW5jdGlvbiI9PXR5cGVvZiBIbj9Ibih0aGlzLnNldHRpbmdzLmxheWVyTGV2ZWwpOkhuO2NvbnN0IFByPXRoaXMud290LmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsXyxXKTtsZXRbUW4sTXJd''@;'; put 'put ''PVtfLFddO2lmKFByJiZBcnJheS5pc0FycmF5KFByKSYmKFssLFFuLE1yXT1QciksbTIoKXx8IUhufHx0aGlzLmlzUGFydFJhbmdlKFFuLE1yKSl0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2Vsc2V7dGhpcy5jb3JuZXJTdHlsZS50b3A9X2krdWkrdGhpcy5jb3JuZXJDZW50ZXJQ''@;'; put 'put ''b2ludE9mZnNldC0xKyJweCIsdGhpcy5jb3JuZXJTdHlsZVtFaV09bHIrVnIrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC0xKyJweCIsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJSaWdodFdpZHRoPXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoLHRoaXMuY29ybmVyU3R5''@;'; put 'put ''bGUud2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIjtsZXQgX3I9dmcoYS5UQUJMRSk7Y29uc3QgdnQ9X3I9PT1oO3Z0JiYoX3I9ZC5kb2N1bWVudEVsZW1lbnQpO2NvbnN0IE90PXBhcnNlSW50KHRoaXMuY29ybmVyRGVm''@;'; put 'put ''YXVsdFN0eWxlLndpZHRoLDEwKS8yLGNuPXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMjtpZihXPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiktMSl7Y29uc3Qga249dnQ/ZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDpldC5v''@;'; put 'put ''ZmZzZXRMZWZ0O2xldCBQbj0hMSxKbj0wO0VuPyhKbj1rbi1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMixQbj1KbjwwKTooSm49a24rd2EoZXQpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLFBuPUpuPj1yeShfcikpLFBu''@;'; put 'put ''JiYodGhpcy5jb3JuZXJTdHlsZVtFaV09YCR7TWF0aC5mbG9vcihscitWcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LU90KX1weGAsdGhpcy5jb3JuZXJTdHlsZVtFbj8iYm9yZGVyTGVmdFdpZHRoIjoiYm9yZGVyUmlnaHRXaWR0aCJdPTApfV89PT10aGlzLndvdC5nZXRTZXR0aW5n''@;'; put 'put ''KCJ0b3RhbFJvd3MiKS0xJiYodnQ/ZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOmV0Lm9mZnNldFRvcCkrYWwoZXQpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMj49amYoX3IpJiYodGhpcy5jb3JuZXJTdHlsZS50b3A9YCR7TWF0aC5mbG9vcihf''@;'; put 'put ''aSt1aSt0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LWNuKX1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD0wKSx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9ImJsb2NrIn1tMigpJiZ0aGlzLnVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKF8s''@;'; put 'put ''VyxfaSxscixWcix1aSl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpfWlzRW50aXJlUm93U2VsZWN0ZWQobCxhKXtyZXR1''@;'; put 'put ''cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1nZXREaW1lbnNpb25zRnJvbUhlYWRlcihsLGEsZCxoLGYpe2NvbnN0e3d0VGFibGU6X309dGhpcy53b3QsVD1fLnd0Um9v''@;'; put 'put ''dEVsZW1lbnQucGFyZW50Tm9kZTtsZXQgVz1udWxsLGllPW51bGwsZ2U9bnVsbCx3ZT1udWxsLEVlPW51bGwsWmU9bnVsbCxvdD1udWxsLGV0PW51bGw7c3dpdGNoKGwpe2Nhc2Uicm93cyI6Vz1mdW5jdGlvbigpe3JldHVybiBfLmdldFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSxpZT1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBhbCguLi5hcmd1bWVudHMpfSxnZT0iaHRfX3NlbGVjdGlvbi0tcm93cyIsWmU9InRvcCI7YnJlYWs7Y2FzZSJjb2x1bW5zIjpXPWZ1bmN0aW9uKCl7cmV0dXJuIF8uZ2V0Q29sdW1uSGVhZGVyKC4uLmFyZ3VtZW50cyl9LGllPWZ1bmN0aW9uKCl7cmV0dXJuIHdhKC4u''@;'; put 'put ''LmFyZ3VtZW50cyl9LGdlPSJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIixaZT0ibGVmdCJ9aWYoVC5jbGFzc0xpc3QuY29udGFpbnMoZ2UpKXtjb25zdCB5dD10aGlzLndvdC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKG90PVcoYSx5dC1oKSxldD1XKGQseXQtaCksIW90''@;'; put 'put ''fHwhZXQpcmV0dXJuITE7Y29uc3Qga3Q9cWwob3QpLFN0PXFsKGV0KTtyZXR1cm4gb3QmJmV0JiYod2U9a3RbWmVdLWZbWmVdLTEsRWU9U3RbWmVdK2llKGV0KS1rdFtaZV0pLFtvdCx3ZSxFZV19cmV0dXJuITF9Y2hhbmdlQm9yZGVyU3R5bGUobCxhKXtjb25zdCBkPXRoaXNbbF0uc3R5bGUs''@;'; put 'put ''aD1hW2xdOyFofHxoLmhpZGU/cGkodGhpc1tsXSwiaGlkZGVuIik6KEJvKHRoaXNbbF0sImhpZGRlbiIpJiZXbyh0aGlzW2xdLCJoaWRkZW4iKSxkLmJhY2tncm91bmRDb2xvcj1oLmNvbG9yLCgidG9wIj09PWx8fCJib3R0b20iPT09bCkmJihkLmhlaWdodD1gJHtoLndpZHRofXB4YCksKCJz''@;'; put 'put ''dGFydCI9PT1sfHwiZW5kIj09PWwpJiYoZC53aWR0aD1gJHtoLndpZHRofXB4YCkpfWNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlKGwpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZTtkLmJhY2tncm91bmRDb2xvcj0iIzAwMCIsZC53aWR0aD0iMXB4IixkLmhlaWdodD0iMXB4In10b2dnbGVIaWRk''@;'; put 'put ''ZW5DbGFzcyhsLGEpe3RoaXMuY2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCksYT9waSh0aGlzW2xdLCJoaWRkZW4iKTpXbyh0aGlzW2xdLCJoaWRkZW4iKX1kaXNhcHBlYXIoKXt0aGlzLnRvcFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheT0ibm9uZSIs''@;'; put 'put ''dGhpcy5zdGFydFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIixtMigpJiYodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3AuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5k''@;'; put 'put ''bGVzLnN0eWxlcy50b3BIaXRBcmVhLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYS5kaXNwbGF5PSJub25lIil9ZGVzdHJveSgpe3RoaXMuZXZl''@;'; put 'put ''bnRNYW5hZ2VyLmRlc3Ryb3lXaXRoT3duRXZlbnRzT25seSgpLHRoaXMubWFpbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubWFpbil9fShsLHRoaXMuc2V0dGluZ3MpKSx0aGlzLmluc3RhbmNlQm9yZGVyc1tsLmd1aWRdfWlzRW1wdHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuY2VsbFJh''@;'; put 'put ''bmdlfWFkZChsKXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dGhpcy5jZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy5jZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9cmVwbGFjZShsLGEpe2lmKCF0aGlzLmlzRW1wdHkoKSl7aWYodGhpcy5jZWxsUmFuZ2UuZnJv''@;'; put 'put ''bS5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS5mcm9tPWEsITA7aWYodGhpcy5jZWxsUmFuZ2UudG8uaXNFcXVhbChsKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UudG89YSwhMH1yZXR1cm4hMX1jbGVhcigpe3JldHVybiB0aGlzLmNlbGxSYW5nZT1udWxsLHRoaXN9Z2V0Q29ybmVy''@;'; put 'put ''cygpe2NvbnN0IGw9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm5bbC5yb3csbC5jb2wsYS5yb3csYS5jb2xdfWFkZENsYXNzQXRDb29yZHMobCxhLGQsaCl7bGV0IGY9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0mJmFyZ3VtZW50c1s0XTtjb25zdCBfPWwud3RUYWJsZS5nZXRDZWxsKHRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhhLGQpKTtpZigib2JqZWN0Ij09dHlwZW9mIF8pe2xldCBUPWg7ZiYmKFQ9dGhpcy5jbGFzc05hbWVH''@;'; put 'put ''ZW5lcmF0b3IoXyksdGhpcy5jbGFzc05hbWVzLmluY2x1ZGVzKFQpfHx0aGlzLmNsYXNzTmFtZXMucHVzaChUKSkscGkoXyxUKX1yZXR1cm4gdGhpc31saW5lYXJDbGFzc05hbWVHZW5lcmF0b3IobCxhKXtyZXR1cm4gZnVuY3Rpb24gZChoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjEmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTE7aWYoMD09PWF8fDA9PT1mKXJldHVybiBsO2xldCBfPWY+PTA/ZjphLFQ9bDtyZXR1cm4gXy09MSxUPUJvKGgsMD09PV8/bDpgJHtsfS0ke199YCk/YCR7bH0tJHtfKzF9YDpkKGgsXyksVH19ZHJhdyhsKXtpZih0aGlzLmlzRW1w''@;'; put 'put ''dHkoKSlyZXR1cm4gdm9pZCh0aGlzLnNldHRpbmdzLmJvcmRlciYmdGhpcy5nZXRCb3JkZXIobCkuZGlzYXBwZWFyKCkpO2NvbnN0IGE9bC53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCksZD1sLnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSxoPXRoaXMuZ2V0Q29ybmVy''@;'; put 'put ''cygpLFtmLF8sVCxXXT1oLHtoaWdobGlnaHRIZWFkZXJDbGFzc05hbWU6aWUsaGlnaGxpZ2h0Q29sdW1uQ2xhc3NOYW1lOmdlLGhpZ2hsaWdodFJvd0NsYXNzTmFtZTp3ZSxoaWdobGlnaHRPbmx5Q2xvc2VzdEhlYWRlcjpFZSxzZWxlY3Rpb25UeXBlOlplfT10aGlzLnNldHRpbmdzLG90PXZv''@;'; put 'put ''aWQgMD09PVplfHxbImFjdGl2ZS1oZWFkZXIiLCJoZWFkZXIiXS5pbmNsdWRlcyhaZSk7aWYob3QmJm51bGwhPT1fJiZudWxsIT09Vyl7bGV0IGV0PTA7Zm9yKGxldCB5dD0wO3l0PGQ7eXQrPTEpe2NvbnN0IGt0PWwud3RUYWJsZS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZSh5dCk7''@;'; put 'put ''aWYoa3Q+PV8mJmt0PD1XKXtsZXQgU3Q9bC53dFRhYmxlLmdldENvbHVtbkhlYWRlcnMoa3QpO2NvbnN0IFF0PVN0Lmxlbmd0aC0xO0VlJiZTdC5sZW5ndGg+MSYmKFN0PVtTdFtRdF1dKTtmb3IobGV0IG5uPTA7bm48U3QubGVuZ3RoO25uKz0xKXtjb25zdCBtbj1bXTtsZXQgRW49U3Rbbm5d''@;'; put 'put ''O2llJiZtbi5wdXNoKGllKSxnZSYmbW4ucHVzaChnZSksbm49RWU/UXQ6bm47Y29uc3QgbHI9bC5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsa3Qsbm4se3NlbGVjdGlvblR5cGU6WmUsY29sdW1uQ3Vyc29yOmV0LHNlbGVjdGlvbldpZHRoOlctXysxLGNs''@;'; put 'put ''YXNzTmFtZXM6bW59KTtsciE9PWt0JiYoRW49bC53dFRhYmxlLmdldENvbHVtbkhlYWRlcihscixubikpLHBpKEVuLG1uKX1ldCs9MX19fWlmKG51bGwhPT1mJiZudWxsIT09VCl7bGV0IGV0PTA7Zm9yKGxldCB5dD0wO3l0PGE7eXQrPTEpe2NvbnN0IGt0PWwud3RUYWJsZS5yb3dGaWx0ZXIu''@;'; put 'put ''cmVuZGVyZWRUb1NvdXJjZSh5dCk7aWYob3QmJmt0Pj1mJiZrdDw9VCl7bGV0IFN0PWwud3RUYWJsZS5nZXRSb3dIZWFkZXJzKGt0KTtjb25zdCBRdD1TdC5sZW5ndGgtMTtFZSYmU3QubGVuZ3RoPjEmJihTdD1bU3RbUXRdXSk7Zm9yKGxldCBubj0wO25uPFN0Lmxlbmd0aDtubis9MSl7Y29u''@;'; put 'put ''c3QgbW49W107bGV0IEVuPVN0W25uXTtpZSYmbW4ucHVzaChpZSksd2UmJm1uLnB1c2god2UpLG5uPUVlP1F0Om5uO2NvbnN0IGxyPWwuZ2V0U2V0dGluZygib25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLGt0LG5uLHtzZWxlY3Rpb25UeXBlOlplLHJvd0N1cnNvcjpldCxzZWxlY3Rp''@;'; put 'put ''b25IZWlnaHQ6VC1mKzEsY2xhc3NOYW1lczptbn0pO2xyIT09a3QmJihFbj1sLnd0VGFibGUuZ2V0Um93SGVhZGVyKGxyLG5uKSkscGkoRW4sbW4pfWV0Kz0xfWlmKG51bGwhPT1fJiZudWxsIT09Vylmb3IobGV0IFN0PTA7U3Q8ZDtTdCs9MSl7Y29uc3QgUXQ9bC53dFRhYmxlLmNvbHVtbkZp''@;'; put 'put ''bHRlci5yZW5kZXJlZFRvU291cmNlKFN0KTtrdD49ZiYma3Q8PVQmJlF0Pj1fJiZRdDw9Vz90aGlzLnNldHRpbmdzLmNsYXNzTmFtZSYmdGhpcy5hZGRDbGFzc0F0Q29vcmRzKGwsa3QsUXQsdGhpcy5zZXR0aW5ncy5jbGFzc05hbWUsdGhpcy5zZXR0aW5ncy5tYXJrSW50ZXJzZWN0aW9ucyk6''@;'; put 'put ''a3Q+PWYmJmt0PD1UP3dlJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxrdCxRdCx3ZSk6UXQ+PV8mJlF0PD1XJiZnZSYmdGhpcy5hZGRDbGFzc0F0Q29vcmRzKGwsa3QsUXQsZ2UpO2NvbnN0IG5uPWwuZ2V0U2V0dGluZygib25BZnRlckRyYXdTZWxlY3Rpb24iLGt0LFF0LHRoaXMuc2V0dGlu''@;'; put 'put ''Z3MubGF5ZXJMZXZlbCk7InN0cmluZyI9PXR5cGVvZiBubiYmdGhpcy5hZGRDbGFzc0F0Q29vcmRzKGwsa3QsUXQsbm4pfX19bC5nZXRTZXR0aW5nKCJvbkJlZm9yZURyYXdCb3JkZXJzIixoLHRoaXMuc2V0dGluZ3MuY2xhc3NOYW1lKSx0aGlzLnNldHRpbmdzLmJvcmRlciYmdGhpcy5nZXRC''@;'; put 'put ''b3JkZXIobCkuYXBwZWFyKGgpfWRlc3Ryb3koKXtPYmplY3QudmFsdWVzKHRoaXMuaW5zdGFuY2VCb3JkZXJzKS5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKX19O2NvbnN0IGg3PWNsYXNzIHJEZSBleHRlbmRzIFFUZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsbnVsbCksZnVuY3Rpb24gZURl''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiB0RGUoYyl7dmFyIGw9ZnVuY3Rpb24gbkRlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInZpc3VhbENlbGxSYW5nZSIsbnVsbCksdGhpcy52aXN1''@;'; put 'put ''YWxDZWxsUmFuZ2U9YXx8bnVsbCx0aGlzLmNvbW1pdCgpfWFkZChsKXtyZXR1cm4gbnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlP3RoaXMudmlzdWFsQ2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGwpOnRoaXMudmlzdWFsQ2VsbFJhbmdlLmV4cGFuZChsKSx0aGlz''@;'; put 'put ''fWNsZWFyKCl7cmV0dXJuIHRoaXMudmlzdWFsQ2VsbFJhbmdlPW51bGwsc3VwZXIuY2xlYXIoKX10cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkobCl7bGV0e2Zyb206YSx0bzpkfT1sLGg9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGEsMSksZj10aGlzLmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5Db29yZHMoZCwtMSk7aWYobnVsbD09PWh8fG51bGw9PT1mKXJldHVybiBudWxsO2lmKGgucm93PmYucm93fHxoLmNvbD5mLmNvbCl7aWYoImhlYWRlciIhPT10aGlzLnNldHRpbmdzLnR5cGUmJiJhY3RpdmUtaGVhZGVyIiE9PXRoaXMuc2V0dGluZ3MudHlwZSlyZXR1cm4gbnVsbDto''@;'; put 'put ''PWEsZj1kfXJldHVybiB0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShoLGgsZil9Z2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphO2NvbnN0IGg9dGhpcy5nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5yb3dJbmRleE1hcHBlcigpLGwucm93LGEpO2lmKG51bGw9PT1oKXJldHVybiBudWxsO2NvbnN0IGY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5jb2x1bW5JbmRleE1hcHBlcigpLGwuY29sLGQpO3Jl''@;'; put 'put ''dHVybiBudWxsPT09Zj9udWxsOnRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEsZCl7aWYoYTwwKXJldHVybiBhO2NvbnN0IGg9bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYSxkKTtyZXR1cm4iaGVhZGVyIiE9PXRoaXMu''@;'; put 'put ''c2V0dGluZ3MudHlwZSYmImFjdGl2ZS1oZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlfHxudWxsIT09aD9oOi0xfWNvbW1pdCgpe2lmKG51bGw9PT10aGlzLnZpc3VhbENlbGxSYW5nZSlyZXR1cm4gdGhpcztjb25zdCBsPXRoaXMudHJpbVRvVmlzaWJsZUNlbGxzUmFuZ2VPbmx5KHRoaXMu''@;'; put 'put ''dmlzdWFsQ2VsbFJhbmdlKTtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbD09PWw/bnVsbDp0aGlzLmNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UobC5mcm9tLGwudG8pLHRoaXN9c3luY1dpdGgobCl7Y29uc3QgYT0iTi1TIj09PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKT8xOi0xLGQ9Ilct''@;'; put 'put ''RSI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKT8xOi0xLGg9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwuZnJvbS5jbG9uZSgpLm5vcm1hbGl6ZSgpLGEsZCk7aWYobnVsbCE9PWgmJmwub3ZlcmxhcHMoaCkpe2lmKG51bGw9PT10aGlzLmNlbGxSYW5nZSl7Y29uc3QgZj10''@;'; put 'put ''aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKTt0aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShmKX1yZXR1cm4gbC5zZXRIaWdobGlnaHQoaCksdGhpc31yZXR1cm4gbC5zZXRIaWdobGlnaHQobC5mcm9tKSx0aGlzfWdldENvcm5lcnMo''@;'; put 'put ''KXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5jZWxsUmFuZ2UsZD1udWxsPT09bC5yb3d8fG51bGw9PT1hLnJvdyxoPW51bGw9PT1sLmNvbHx8bnVsbD09PWEuY29sLGY9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGQ/bnVsbDpNYXRoLm1pbihsLnJvdyxhLnJvdyksaD9udWxsOk1h''@;'; put 'put ''dGgubWluKGwuY29sLGEuY29sKSksXz10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoZD9udWxsOk1hdGgubWF4KGwucm93LGEucm93KSxoP251bGw6TWF0aC5tYXgobC5jb2wsYS5jb2wpKTtyZXR1cm5bZi5yb3csZi5jb2wsXy5yb3csXy5jb2xdfWdldFZpc3VhbENvcm5lcnMoKXtj''@;'; put 'put ''b25zdCBsPXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCkpLGE9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkpO3JldHVy''@;'; put 'put ''bltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19Y3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMobCksaD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhhKTtyZXR1cm4gdGhpcy5z''@;'; put 'put ''ZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoZCxkLGgpfX0se3JlZ2lzdGVyOmY3LGdldEl0ZW06bURlfT1wZCgiaGlnaGxpZ2h0L3R5cGVzIik7ZnVuY3Rpb24gcDcoYyxsKXtyZXR1cm4gbURlKGMpKHt0eXBlOmMsLi4ubH0pfWY3KE9rLGZ1bmN0aW9uIGlEZShjKXtsZXR7YWN0aXZlSGVhZGVy''@;'; put 'put ''Q2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IGg3KHtoaWdobGlnaHRIZWFkZXJDbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6T2t9KX0pLGY3KFBrLGZ1bmN0aW9uIHNEZShjKXtsZXR7bGF5ZXJMZXZlbDpsLGFyZWFDb3JuZXJWaXNpYmxlOmEsLi4uZH09YztyZXR1cm4gbmV3''@;'; put 'put ''IGg3KHtjbGFzc05hbWU6ImFyZWEiLG1hcmtJbnRlcnNlY3Rpb25zOiEwLGxheWVyTGV2ZWw6TWF0aC5taW4obCw3KSxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiM0Yjg5ZmYiLGNvcm5lclZpc2libGU6YX0sLi4uZCxzZWxlY3Rpb25UeXBlOlBrfSl9KSxmNyhfeSxmdW5jdGlvbiBsRGUoYyl7''@;'; put 'put ''bGV0e2NlbGxDb3JuZXJWaXNpYmxlOmwsLi4uYX09YztyZXR1cm4gbmV3IGg3KHtjbGFzc05hbWU6ImN1cnJlbnQiLGJvcmRlcjp7d2lkdGg6Mixjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTpsfSwuLi5hLHNlbGVjdGlvblR5cGU6X3l9KX0pLGY3KEJCLGZ1bmN0aW9uIHVEZShjKXts''@;'; put 'put ''ZXR7Ym9yZGVyOmwsdmlzdWFsQ2VsbFJhbmdlOmEsLi4uZH09YztyZXR1cm4gbmV3IGg3KHsuLi5sLC4uLmQsc2VsZWN0aW9uVHlwZTpCQn0sYSl9KSxmNyhWQixmdW5jdGlvbiBoRGUoYyl7bGV0ey4uLmx9PWM7cmV0dXJuIG5ldyBoNyh7Y2xhc3NOYW1lOiJmaWxsIixib3JkZXI6e3dpZHRo''@;'; put 'put ''OjEsY29sb3I6IiNmZjAwMDAifSwuLi5sLHNlbGVjdGlvblR5cGU6VkJ9KX0pLGY3KGJ5LGZ1bmN0aW9uIHBEZShjKXtsZXR7aGVhZGVyQ2xhc3NOYW1lOmwscm93Q2xhc3NOYW1lOmEsY29sdW1uQ2xhc3NOYW1lOmQsLi4uaH09YztyZXR1cm4gbmV3IGg3KHtjbGFzc05hbWU6ImhpZ2hsaWdo''@;'; put 'put ''dCIsaGlnaGxpZ2h0SGVhZGVyQ2xhc3NOYW1lOmwsaGlnaGxpZ2h0Um93Q2xhc3NOYW1lOmEsaGlnaGxpZ2h0Q29sdW1uQ2xhc3NOYW1lOmQsLi4uaCxoaWdobGlnaHRPbmx5Q2xvc2VzdEhlYWRlcjohMCxzZWxlY3Rpb25UeXBlOmJ5fSl9KTtjbGFzcyB2RGV7Y29uc3RydWN0b3IobCl7dGhp''@;'; put 'put ''cy5vcHRpb25zPWwsdGhpcy5sYXllckxldmVsPTAsdGhpcy5jZWxsPXA3KF95LGwpLHRoaXMuZmlsbD1wNyhWQixsKSx0aGlzLmFyZWFzPW5ldyBNYXAsdGhpcy5oZWFkZXJzPW5ldyBNYXAsdGhpcy5hY3RpdmVIZWFkZXJzPW5ldyBNYXAsdGhpcy5jdXN0b21TZWxlY3Rpb25zPVtdfWlzRW5h''@;'; put 'put ''YmxlZEZvcihsLGEpe2xldCBkPWw7bD09PV95JiYoZD0iY3VycmVudCIpO2xldCBoPXRoaXMub3B0aW9ucy5kaXNhYmxlZENlbGxTZWxlY3Rpb24oYS5yb3csYS5jb2wpO3JldHVybiJzdHJpbmciPT10eXBlb2YgaCYmKGg9W2hdKSwhMT09PWh8fEFycmF5LmlzQXJyYXkoaCkmJiFoLmluY2x1''@;'; put 'put ''ZGVzKGQpfXVzZUxheWVyTGV2ZWwoKXtyZXR1cm4gdGhpcy5sYXllckxldmVsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLHRoaXN9Z2V0Q2VsbCgpe3JldHVybiB0aGlzLmNlbGx9Z2V0RmlsbCgpe3JldHVybiB0aGlzLmZpbGx9Y3Jl''@;'; put 'put ''YXRlT3JHZXRBcmVhKCl7Y29uc3QgbD10aGlzLmxheWVyTGV2ZWw7bGV0IGE7cmV0dXJuIHRoaXMuYXJlYXMuaGFzKGwpP2E9dGhpcy5hcmVhcy5nZXQobCk6KGE9cDcoUGsse2xheWVyTGV2ZWw6bCwuLi50aGlzLm9wdGlvbnN9KSx0aGlzLmFyZWFzLnNldChsLGEpKSxhfWdldEFyZWFzKCl7''@;'; put 'put ''cmV0dXJuWy4uLnRoaXMuYXJlYXMudmFsdWVzKCldfWNyZWF0ZU9yR2V0SGVhZGVyKCl7Y29uc3QgbD10aGlzLmxheWVyTGV2ZWw7bGV0IGE7cmV0dXJuIHRoaXMuaGVhZGVycy5oYXMobCk/YT10aGlzLmhlYWRlcnMuZ2V0KGwpOihhPXA3KGJ5LHsuLi50aGlzLm9wdGlvbnN9KSx0aGlzLmhl''@;'; put 'put ''YWRlcnMuc2V0KGwsYSkpLGF9Z2V0SGVhZGVycygpe3JldHVyblsuLi50aGlzLmhlYWRlcnMudmFsdWVzKCldfWNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyKCl7Y29uc3QgbD10aGlzLmxheWVyTGV2ZWw7bGV0IGE7cmV0dXJuIHRoaXMuYWN0aXZlSGVhZGVycy5oYXMobCk/YT10aGlzLmFjdGl2''@;'; put 'put ''ZUhlYWRlcnMuZ2V0KGwpOihhPXA3KE9rLHsuLi50aGlzLm9wdGlvbnN9KSx0aGlzLmFjdGl2ZUhlYWRlcnMuc2V0KGwsYSkpLGF9Z2V0QWN0aXZlSGVhZGVycygpe3JldHVyblsuLi50aGlzLmFjdGl2ZUhlYWRlcnMudmFsdWVzKCldfWdldEN1c3RvbVNlbGVjdGlvbnMoKXtyZXR1cm5bLi4u''@;'; put 'put ''dGhpcy5jdXN0b21TZWxlY3Rpb25zLnZhbHVlcygpXX1hZGRDdXN0b21TZWxlY3Rpb24obCl7dGhpcy5jdXN0b21TZWxlY3Rpb25zLnB1c2gocDcoQkIsey4uLnRoaXMub3B0aW9ucywuLi5sfSkpfWNsZWFyKCl7dGhpcy5jZWxsLmNsZWFyKCksdGhpcy5maWxsLmNsZWFyKCksSW4odGhpcy5h''@;'; put 'put ''cmVhcy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksSW4odGhpcy5oZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxJbih0aGlzLmFjdGl2ZUhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuW3RoaXMuY2VsbCx0aGlzLmZpbGws''@;'; put 'put ''Li4udGhpcy5hcmVhcy52YWx1ZXMoKSwuLi50aGlzLmhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuY3VzdG9tU2VsZWN0aW9uc11bU3ltYm9sLml0ZXJhdG9yXSgpfX1jb25zdCBfRGU9dkRlO2NsYXNzIGJEZXtjb25zdHJ1Y3RvcihsKXt0''@;'; put 'put ''aGlzLnJhbmdlcz1bXSx0aGlzLmNyZWF0ZUNlbGxSYW5nZT1sfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuc2l6ZSgpfXNldChsKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFuZ2UobCkpLHRoaXN9YWRkKGwpe3JldHVybiB0aGlzLnJh''@;'; put 'put ''bmdlcy5wdXNoKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKGwpKSx0aGlzfXBvcCgpe3JldHVybiB0aGlzLnJhbmdlcy5wb3AoKSx0aGlzfWN1cnJlbnQoKXtyZXR1cm4gdGhpcy5wZWVrQnlJbmRleCgwKX1wcmV2aW91cygpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KC0xKX1pbmNsdWRlcyhsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5yYW5nZXMuc29tZShhPT5hLmluY2x1ZGVzKGwpKX1jbGVhcigpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGg9MCx0aGlzfXNpemUoKXtyZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RofXBlZWtCeUluZGV4KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7Y29uc3QgYT10aGlzLnNpemUoKStsLTE7bGV0IGQ7cmV0dXJuIGE+PTAmJihkPXRoaXMucmFuZ2VzW2FdKSxkfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMucmFuZ2VzW1N5bWJvbC5pdGVyYXRvcl0oKX19Y29uc3QgeURlPWJEZTtj''@;'; put 'put ''bGFzcyBMbmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnJhbmdlPWwsdGhpcy5vcHRpb25zPWF9dHJhbnNmb3JtU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9dGhpcy5vcHRpb25zLmNyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMobCxhKSxmPXRoaXMucmFuZ2UuY3VycmVudCgpLmhpZ2hsaWdodCx7cm93Ol8sY29sOlR9PXRoaXMub3B0aW9ucy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoZik7bGV0IFc9ZixpZT0wLGdlPTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIs''@;'; put 'put ''aCksbnVsbCE9PV8mJm51bGwhPT1UKXtsZXQgd2U9dGhpcy5vcHRpb25zLmNvdW50Um93cygpLEVlPXRoaXMub3B0aW9ucy5jb3VudENvbHMoKTtjb25zdCBaZT10aGlzLm9wdGlvbnMuZml4ZWRSb3dzQm90dG9tKCksb3Q9dGhpcy5vcHRpb25zLm1pblNwYXJlUm93cygpLGV0PXRoaXMub3B0''@;'; put 'put ''aW9ucy5taW5TcGFyZUNvbHMoKSx5dD10aGlzLm9wdGlvbnMuYXV0b1dyYXBSb3coKSxrdD10aGlzLm9wdGlvbnMuYXV0b1dyYXBDb2woKTtfK2w+d2UtMT9kJiZvdD4wJiYhKFplJiZfPj13ZS1aZS0xKT8odGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIix3ZSksd2U9dGhp''@;'; put 'put ''cy5vcHRpb25zLmNvdW50Um93cygpKTprdCYmKGgucm93PTEtd2UsaC5jb2w9VCtoLmNvbD09PUVlLTE/MS1FZToxKTprdCYmXytoLnJvdzwwJiZUK2guY29sPj0wJiYoaC5yb3c9d2UtMSxoLmNvbD1UK2guY29sPT09MD9FZS0xOi0xKSxUK2guY29sPkVlLTE/ZCYmZXQ+MD8odGhpcy5ydW5M''@;'; put 'put ''b2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1aXJlIixFZSksRWU9dGhpcy5vcHRpb25zLmNvdW50Q29scygpKTp5dCYmKGgucm93PV8raC5yb3c9PT13ZS0xPzEtd2U6MSxoLmNvbD0xLUVlKTp5dCYmVCtoLmNvbDwwJiZfK2gucm93Pj0wJiYoaC5yb3c9XytoLnJvdz09PTA/d2UtMTotMSxoLmNv''@;'; put 'put ''bD1FZS0xKTtjb25zdCBTdD10aGlzLm9wdGlvbnMuY3JlYXRlQ2VsbENvb3JkcyhfK2gucm93LFQraC5jb2wpO2llPTAsZ2U9MCxTdC5yb3c8MD8oaWU9LTEsU3Qucm93PTApOlN0LnJvdz4wJiZTdC5yb3c+PXdlJiYoaWU9MSxTdC5yb3c9d2UtMSksU3QuY29sPDA/KGdlPS0xLFN0LmNvbD0w''@;'; put 'put ''KTpTdC5jb2w+MCYmU3QuY29sPj1FZSYmKGdlPTEsU3QuY29sPUVlLTEpLFc9dGhpcy5vcHRpb25zLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhTdCl9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsVyxpZSxnZSksV310cmFuc2Zvcm1FbmQobCxhKXtj''@;'; put 'put ''b25zdCBkPXRoaXMub3B0aW9ucy5jcmVhdGVDZWxsQ29vcmRzKGwsYSksaD10aGlzLnJhbmdlLmN1cnJlbnQoKTtsZXQgZj1oLnRvLF89MCxUPTA7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGQpO2NvbnN0e3JvdzpXLGNvbDppZX09dGhpcy5vcHRpb25zLnZpc3Vh''@;'; put 'put ''bFRvUmVuZGVyYWJsZUNvb3JkcyhoLmhpZ2hsaWdodCk7aWYobnVsbCE9PVcmJm51bGwhPT1pZSl7Y29uc3QgZ2U9dGhpcy5vcHRpb25zLmNvdW50Um93cygpLHdlPXRoaXMub3B0aW9ucy5jb3VudENvbHMoKSx7cm93OkVlLGNvbDpaZX09dGhpcy5vcHRpb25zLnZpc3VhbFRvUmVuZGVyYWJs''@;'; put 'put ''ZUNvb3JkcyhoLnRvKSxvdD10aGlzLm9wdGlvbnMuY3JlYXRlQ2VsbENvb3JkcyhFZStkLnJvdyxaZStkLmNvbCk7Xz0wLFQ9MCxvdC5yb3c8MD8oXz0tMSxvdC5yb3c9MCk6b3Qucm93PjAmJm90LnJvdz49Z2UmJihfPTEsb3Qucm93PWdlLTEpLG90LmNvbDwwPyhUPS0xLG90LmNvbD0wKTpv''@;'; put 'put ''dC5jb2w+MCYmb3QuY29sPj13ZSYmKFQ9MSxvdC5jb2w9d2UtMSksZj10aGlzLm9wdGlvbnMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKG90KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybUVuZCIsZixfLFQpLGZ9fVRhKExuZSxPMCk7Y29uc3Qgd0RlPUxuZSxD''@;'; put 'put ''RGU9WzMsMl0sU0RlPVtbIm51bWJlciJdLFsibnVtYmVyIiwic3RyaW5nIl0sWyJudW1iZXIiLCJ1bmRlZmluZWQiXSxbIm51bWJlciIsInN0cmluZyIsInVuZGVmaW5lZCJdXSx6Qj1TeW1ib2woInJvb3QiKSxPbmU9U3ltYm9sKCJjaGlsZCIpO2Z1bmN0aW9uIGc3KGMpe2xldCBsPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp6QjtpZihsIT09ekImJmwhPT1PbmUpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uIik7Y29u''@;'; put 'put ''c3QgYT1BcnJheS5pc0FycmF5KGMpLGQ9bD09PXpCO2xldCBoPTA7aWYoYSl7Y29uc3QgZj1jWzBdOzA9PT1jLmxlbmd0aD9oPTE6ZCYmZiBpbnN0YW5jZW9mIFpOP2g9MzpkJiZBcnJheS5pc0FycmF5KGYpP2g9ZzcoZixPbmUpOmMubGVuZ3RoPj0yJiZjLmxlbmd0aDw9NCYmIWMuc29tZSgo''@;'; put 'put ''VCxXKT0+IVNEZVtXXS5pbmNsdWRlcyh0eXBlb2YgVCkpJiYoaD0yKX1yZXR1cm4gaH1mdW5jdGlvbiB5eShjKXtsZXR7a2VlcERpcmVjdGlvbjpsPSExLHByb3BUb0NvbDphfT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIUNE''@;'; put 'put ''ZS5pbmNsdWRlcyhjKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNlbGVjdGlvbiByYW5nZXMgc2NoZW1hIHR5cGUgd2FzIHByb3ZpZGVkLiIpO3JldHVybiBmdW5jdGlvbihkKXtjb25zdCBoPTM9PT1jO2xldCBmPWg/ZC5mcm9tLnJvdzpkWzBdLF89aD9kLmZyb20uY29sOmRbMV0s''@;'; put 'put ''VD1oP2QudG8ucm93OmRbMl0sVz1oP2QudG8uY29sOmRbM107aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJigic3RyaW5nIj09dHlwZW9mIF8mJihfPWEoXykpLCJzdHJpbmciPT10eXBlb2YgVyYmKFc9YShXKSkpLExhKFQpJiYoVD1mKSxMYShXKSYmKFc9XyksIWwpe2NvbnN0IGllPWYsZ2U9''@;'; put 'put ''Xyx3ZT1ULEVlPVc7Zj1NYXRoLm1pbihpZSx3ZSksXz1NYXRoLm1pbihnZSxFZSksVD1NYXRoLm1heChpZSx3ZSksVz1NYXRoLm1heChnZSxFZSl9cmV0dXJuW2YsXyxULFddfX1mdW5jdGlvbiBHcChjKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGMmJmM+PTAmJmM8KGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLzApfWNsYXNzIFBuZXtjb25zdHJ1Y3RvcihsLGEpe3ZhciBkPXRoaXM7dGhpcy5zZXR0aW5ncz1sLHRoaXMudGFibGVQcm9wcz1hLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLnNlbGVjdGVkQnlDb3JuZXI9ITEsdGhp''@;'; put 'put ''cy5zZWxlY3RlZEJ5Um93SGVhZGVyPW5ldyBTZXQsdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyPW5ldyBTZXQsdGhpcy5zZWxlY3RlZFJhbmdlPW5ldyB5RGUoKGgsZixfKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLGYsXykpLHRoaXMuaGlnaGxpZ2h0PW5ldyBfRGUo''@;'; put 'put ''e2hlYWRlckNsYXNzTmFtZTpsLmN1cnJlbnRIZWFkZXJDbGFzc05hbWUsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOmwuYWN0aXZlSGVhZGVyQ2xhc3NOYW1lLHJvd0NsYXNzTmFtZTpsLmN1cnJlbnRSb3dDbGFzc05hbWUsY29sdW1uQ2xhc3NOYW1lOmwuY3VycmVudENvbENsYXNzTmFtZSxkaXNh''@;'; put 'put ''YmxlZENlbGxTZWxlY3Rpb246KGgsZik9PnRoaXMudGFibGVQcm9wcy5pc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbihoLGYpLGNlbGxDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNDZWxsQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSxhcmVhQ29ybmVyVmlzaWJsZTpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBkLmlzQXJlYUNvcm5lclZpc2libGUoLi4uYXJndW1lbnRzKX0sdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9w''@;'; put 'put ''cy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxjcmVhdGVDZWxsUmFuZ2U6KGgsZixfKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLGYsXykscm93SW5kZXhN''@;'; put 'put ''YXBwZXI6KCk9PnRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcigpLGNvbHVtbkluZGV4TWFwcGVyOigpPT50aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIoKX0pLHRoaXMudHJhbnNmb3JtYXRpb249bmV3IHdEZSh0aGlzLnNlbGVjdGVkUmFuZ2Use2NvdW50Um93czooKT0+''@;'; put 'put ''dGhpcy50YWJsZVByb3BzLmNvdW50Um93c1RyYW5zbGF0ZWQoKSxjb3VudENvbHM6KCk9PnRoaXMudGFibGVQcm9wcy5jb3VudENvbHNUcmFuc2xhdGVkKCksdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVu''@;'; put 'put ''ZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxmaXhlZFJvd3NCb3R0b206KCk9PmwuZml4ZWRSb3dzQm90''@;'; put 'put ''dG9tLG1pblNwYXJlUm93czooKT0+bC5taW5TcGFyZVJvd3MsbWluU3BhcmVDb2xzOigpPT5sLm1pblNwYXJlQ29scyxhdXRvV3JhcFJvdzooKT0+bC5hdXRvV3JhcFJvdyxhdXRvV3JhcENvbDooKT0+bC5hdXRvV3JhcENvbH0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJi''@;'; put 'put ''ZWZvcmVUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uZil9KSx0''@;'; put 'put ''aGlzLnRyYW5zZm9ybWF0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRl''@;'; put 'put ''ck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksXz0wO188aDtfKyspZltfXT1hcmd1bWVudHNb''@;'; put 'put ''X107cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheSho''@;'; put 'put ''KSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uZil9KSx0aGlzLnRyYW5zZm9ybWF0aW9uLmFkZExvY2FsSG9vaygiaW5zZXJ0Um93UmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUiLC4uLmYpfSl9Z2V0U2VsZWN0ZWRSYW5nZSgpe3JldHVybiB0aGlzLnNlbGVj''@;'; put 'put ''dGVkUmFuZ2V9YmVnaW4oKXt0aGlzLmluUHJvZ3Jlc3M9ITB9ZmluaXNoKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIixBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkpLHRoaXMuaW5Qcm9ncmVzcz0hMX1pc0luUHJvZ3Jlc3MoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pblByb2dyZXNzfXNldFJhbmdlU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9Im11bHRpcGxlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSxmPUxhKGEpP3RoaXMudGFibGVQcm9w''@;'; put 'put ''cy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk6YSxfPWwucm93PDAsVD1sLmNvbDwwLFc9XyYmVCxpZT1sLmNsb25lKCk7dGhpcy5zZWxlY3RlZEJ5Q29ybmVyPVcsdGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IisoZD8iT25seSI6IiIpLGllKSwo''@;'; put 'put ''IWh8fGgmJiFmJiZMYShhKSkmJnRoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuc2VsZWN0ZWRSYW5nZS5hZGQoaWUpLDA9PT10aGlzLmdldExheWVyTGV2ZWwoKSYmKHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5jbGVhcigpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5jbGVh''@;'; put 'put ''cigpKSwhVyYmVCYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksIVcmJl8mJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLGR8fHRoaXMuc2V0UmFuZ2VFbmQobCl9c2V0UmFuZ2VTdGFydE9ubHko''@;'; put 'put ''bCxhKXt0aGlzLnNldFJhbmdlU3RhcnQobCxhLCEwKX1zZXRSYW5nZUVuZChsKXtpZih0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXJldHVybjtjb25zdCBhPWwuY2xvbmUoKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIixhKSx0aGlzLmJlZ2luKCk7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpOyJzaW5nbGUiIT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlJiZkLnNldFRvKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEucm93LGEuY29sKSksdGhpcy5oaWdobGlnaHQuZ2V0Q2VsbCgpLmNsZWFyKCksdGhpcy5o''@;'; put 'put ''aWdobGlnaHQuaXNFbmFibGVkRm9yKF95LGQuaGlnaGxpZ2h0KSYmdGhpcy5oaWdobGlnaHQuZ2V0Q2VsbCgpLmFkZCh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmhpZ2hsaWdodCkuY29tbWl0KCkuc3luY1dpdGgoZCk7Y29uc3QgaD10aGlzLmdldExheWVyTGV2ZWwoKTtoPHRoaXMu''@;'; put 'put ''aGlnaGxpZ2h0LmxheWVyTGV2ZWwmJihJbih0aGlzLmhpZ2hsaWdodC5nZXRBcmVhcygpLFc9PntXLmNsZWFyKCl9KSxJbih0aGlzLmhpZ2hsaWdodC5nZXRIZWFkZXJzKCksVz0+e1cuY2xlYXIoKX0pLEluKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2ZUhlYWRlcnMoKSxXPT57Vy5jbGVhcigp''@;'; put 'put ''fSkpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCk7Y29uc3QgZj10aGlzLmhpZ2hsaWdodC5jcmVhdGVPckdldEFyZWEoKSxfPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0SGVhZGVyKCksVD10aGlzLmhpZ2hsaWdodC5jcmVhdGVPckdldEFjdGl2ZUhlYWRlcigpO2lmKGYuY2xl''@;'; put 'put ''YXIoKSxfLmNsZWFyKCksVC5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihQayxkLmhpZ2hsaWdodCkmJih0aGlzLmlzTXVsdGlwbGUoKXx8aD49MSkmJihmLmFkZChkLmZyb20pLmFkZChkLnRvKS5jb21taXQoKSwxPT09aCkpe2NvbnN0IFc9dGhpcy5zZWxlY3RlZFJhbmdl''@;'; put 'put ''LnByZXZpb3VzKCk7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoLTEpLmNyZWF0ZU9yR2V0QXJlYSgpLmFkZChXLmZyb20pLmNvbW1pdCgpLnN5bmNXaXRoKFcpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCl9aWYodGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKGJ5LGQu''@;'; put 'put ''aGlnaGxpZ2h0KSl7Y29uc3QgVz0wPT09dGhpcy50YWJsZVByb3BzLmNvdW50Um93c1RyYW5zbGF0ZWQoKSxpZT0wPT09dGhpcy50YWJsZVByb3BzLmNvdW50Q29sc1RyYW5zbGF0ZWQoKTtsZXQgZ2U9ZDsoV3x8aWUpJiYoZ2U9ZC5jbG9uZSgpKSxXJiYoZ2UuZnJvbS5yb3c9LTEpLGllJiYo''@;'; put 'put ''Z2UuZnJvbS5jb2w9LTEpLCJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlPyh0aGlzLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiZnZS5mcm9tLm5vcm1hbGl6ZSgpLF8uYWRkKGdlLmZyb20pLmNvbW1pdCgpKTpfLmFkZChnZS5mcm9tKS5hZGQoZ2UudG8pLmNvbW1pdCgp''@;'; put 'put ''LHRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk9PT1kLmdldFdpZHRoKCkmJlQuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGQuZnJvbS5yb3csLTEpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''ZC50by5yb3csLTEpKS5jb21taXQoKSx0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKSYmdGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpPT09ZC5nZXRIZWlnaHQoKSYmVC5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsZC5mcm9tLmNvbCkpLmFkZCh0aGlzLnRh''@;'; put 'put ''YmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxkLnRvLmNvbCkpLmNvbW1pdCgpfXRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZXRSYW5nZUVuZCIsbCl9aXNNdWx0aXBsZSgpe2NvbnN0IGw9X2coIXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaXNTaW5nbGUoKSk7cmV0dXJuIHRo''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixsKSxsLnZhbHVlfXRyYW5zZm9ybVN0YXJ0KGwsYSl7dGhpcy5zZXRSYW5nZVN0YXJ0KHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtU3RhcnQobCxhLGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzJdJiZhcmd1bWVudHNbMl0pKX10cmFuc2Zvcm1FbmQobCxhKXt0aGlzLnNldFJhbmdlRW5kKHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtRW5kKGwsYSkpfWdldExheWVyTGV2ZWwoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKS0xfWlzU2VsZWN0ZWQoKXty''@;'; put 'put ''ZXR1cm4hdGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKX1pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5''@;'; put 'put ''Q29ybmVyKGwpJiZ0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQobCl9aXNFbnRpcmVSb3dTZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4tMT09PWw/dGhpcy5zZWxl''@;'; put 'put ''Y3RlZEJ5Um93SGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKGwpfWlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTty''@;'; put 'put ''ZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmdGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGwpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxl''@;'; put 'put ''dmVsKCk7cmV0dXJuLTE9PT1sP3RoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5zaXplPjA6dGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmhhcyhsKX1pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0''@;'; put 'put ''ZWRCeUNvbHVtbkhlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCl9aXNTZWxlY3RlZEJ5Q29ybmVyKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRCeUNvcm5lcn1pbkluU2VsZWN0aW9uKGwpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2UuaW5jbHVkZXMobCl9aXNDZWxsQ29ybmVy''@;'; put 'put ''VmlzaWJsZSgpe3JldHVybiB0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmIXRoaXMuaXNNdWx0aXBsZSgpfWlzQXJlYUNvcm5lclZpc2libGUobCl7cmV0dXJuKCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPT09dGhpcy5nZXRMYXll''@;'; put 'put ''ckxldmVsKCkpJiZ0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmdGhpcy5pc011bHRpcGxlKCl9Y2xlYXIoKXt0aGlzLnNlbGVjdGVkUmFuZ2UuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5jbGVhcigpfWRlc2VsZWN0KCl7dGhpcy5p''@;'; put 'put ''c1NlbGVjdGVkKCkmJih0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJEZXNlbGVjdCIpKX1zZWxlY3RBbGwoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxoPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtpZighKGx8fGF8fDAhPT1kJiYwIT09aCkpcmV0dXJuO2NvbnN0IGY9dGhpcy50YWJs''@;'; put 'put ''ZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYT8tMTowLGw/LTE6MCksXz10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhkLTEsaC0xKTt0aGlzLmNsZWFyKCksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShmKSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJM''@;'; put 'put ''ZXZlbCgpKSx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKF8pLHRoaXMuZmluaXNoKCl9c2VsZWN0Q2VsbHMobCl7Y29uc3QgYT1nNyhsKTtpZigxPT09YSlyZXR1cm4hMTtpZigwPT09YSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoQWFgVW5zdXBwb3J0ZWQgZm9ybWF0IG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2VzIHdhcyBwYXNzZWQuIFRvIHNlbGVjdCBjZWxscyBwYXNzXHgyMAogICAgICAgIHRoZSBjb29yZGluYXRlcyBhcyBhbiBhcnJheSBvZiBhcnJheXMgKFtbcm93U3RhcnQsIGNvbHVtblN0YXJ0L2NvbHVtblBy''@;'; put 'put ''b3BTdGFydCwgcm93RW5kLFx4MjAKICAgICAgICBjb2x1bW5FbmQvY29sdW1uUHJvcEVuZF1dKSBvciBhcyBhbiBhcnJheSBvZiBDZWxsUmFuZ2Ugb2JqZWN0cy5gKTtjb25zdCBkPXl5KGEse3Byb3BUb0NvbDpUPT50aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKFQpLGtlZXBEaXJlY3Rpb246''@;'; put 'put ''ITB9KSxoPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxmPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxfPSFsLnNvbWUoVD0+e2NvbnN0W1csaWUsZ2Usd2VdPWQoVCk7cmV0dXJuIShHcChXLGgpJiZHcChpZSxmKSYmR3AoZ2UsaCkmJkdwKHdlLGYpKX0pO3JldHVybiBfJiYodGhp''@;'; put 'put ''cy5jbGVhcigpLEluKGwsVD0+e2NvbnN0W1csaWUsZ2Usd2VdPWQoVCk7dGhpcy5zZXRSYW5nZVN0YXJ0T25seSh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhXLGllKSwhMSksdGhpcy5zZXRSYW5nZUVuZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhnZSx3ZSkp''@;'; put 'put ''LHRoaXMuZmluaXNoKCl9KSksX31zZWxlY3RDb2x1bW5zKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOi0xO2NvbnN0''@;'; put 'put ''IGg9InN0cmluZyI9PXR5cGVvZiBsP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2wobCk6bCxmPSJzdHJpbmciPT10eXBlb2YgYT90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGEpOmEsXz10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksVD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCks''@;'; put 'put ''Vz1HcChoLF8pJiZHcChmLF8pO3JldHVybiBXJiYodGhpcy5zZXRSYW5nZVN0YXJ0T25seSh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhkLGgpKSx0aGlzLnNldFJhbmdlRW5kKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFQtMSxmKSksdGhpcy5maW5pc2goKSks''@;'; put 'put ''V31zZWxlY3RSb3dzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOi0xO2NvbnN0IGg9dGhpcy50YWJsZVByb3BzLmNv''@;'; put 'put ''dW50Um93cygpLGY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLF89R3AobCxoKSYmR3AoYSxoKTtyZXR1cm4gXyYmKHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobCxkKSksdGhpcy5zZXRSYW5nZUVuZCh0aGlzLnRhYmxlUHJvcHMu''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhhLGYtMSkpLHRoaXMuZmluaXNoKCkpLF99cmVmcmVzaCgpe2lmKHRoaXMuaGlnaGxpZ2h0LmdldEN1c3RvbVNlbGVjdGlvbnMoKS5mb3JFYWNoKGg9PntoLmNvbW1pdCgpfSksIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBhPXRoaXMuaGlnaGxpZ2h0''@;'; put 'put ''LmdldENlbGwoKSxkPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2EuY29tbWl0KCkuc3luY1dpdGgodGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSk7Zm9yKGxldCBoPTA7aDx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpO2grPTEpe3RoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCk7Y29u''@;'; put 'put ''c3QgZj10aGlzLmhpZ2hsaWdodC5jcmVhdGVPckdldEFyZWEoKSxfPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0SGVhZGVyKCksVD10aGlzLmhpZ2hsaWdodC5jcmVhdGVPckdldEFjdGl2ZUhlYWRlcigpO2YuY29tbWl0KCksXy5jb21taXQoKSxULmNvbW1pdCgpfXRoaXMuaGlnaGxpZ2h0''@;'; put 'put ''LnVzZUxheWVyTGV2ZWwoZCl9fVRhKFBuZSxPMCk7Y29uc3QgRURlPVBuZSx7cmVnaXN0ZXI6a0RlLGdldEl0ZW06QURlLGhhc0l0ZW06Rm5lLGdldE5hbWVzOlREZX09cGQoImNlbGxUeXBlcyIpO2Z1bmN0aW9uIFVCKGMpe2lmKCFGbmUoYykpdGhyb3cgRXJyb3IoYFlvdSBkZWNsYXJlZCBj''@;'; put 'put ''ZWxsIHR5cGUgIiR7Y30iIGFzIGEgc3RyaW5nIHRoYXQgaXMgbm90IG1hcHBlZCB0byBhIGtub3duIG9iamVjdC5cbiAgICAgICAgICAgICAgICAgQ2VsbCB0eXBlIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgc3RyaW5nIG1hcHBlZCB0byBhbiBvYmplY3QgcmVnaXN0ZXJlZCBieVxuICAgICAg''@;'; put 'put ''ICAgICAgICAgICAiSGFuZHNvbnRhYmxlLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlIiBtZXRob2RgKTtyZXR1cm4gQURlKGMpfWZ1bmN0aW9uIGIyKGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5DRUxMX1RZUEUpO2NvbnN0e2VkaXRvcjphLHJlbmRlcmVyOmQsdmFsaWRh''@;'; put 'put ''dG9yOmh9PWw7YSYmUjAoYyxhKSxkJiZwaChjLGQpLGgmJmE3KGMsaCksa0RlKGMsbCl9ZnVuY3Rpb24gTmsoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Yztjb25zdCBkPSJzdHJpbmciPT10eXBlb2YgbC50eXBlP1VC''@;'; put 'put ''KGwudHlwZSk6bC50eXBlO2lmKGMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmZHMobCwoZixfKT0+e2MuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcy5kZWxldGUoXyl9KSwhdXMoZCkpcmV0dXJuO2E9PT1jJiYhYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVBy''@;'; put 'put ''b3BzJiYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzPW5ldyBTZXQpO2NvbnN0IGg9e307ZHMoZCwoZixfKT0+e3ZhciBUOyhmdW5jdGlvbiBERGUoYyxsKXt2YXIgYTtyZXR1cm4iQ0VMTF9UWVBFIiE9PWMmJigobnVsbD09PShhPWwuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1l''@;'; put 'put ''dGFQcm9wcyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGFzKGMpKXx8IWJsKGwsYykpfSkoXyxhKSYmKGhbX109ZixudWxsPT09KFQ9Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09VHx8VC5hZGQoXykpfSksS2woYyxoKX1mdW5jdGlvbiBWayhjKXtyZXR1cm4g''@;'; put 'put ''TnVtYmVyLmlzSW50ZWdlcihjKSYmYz49MH1mdW5jdGlvbiBCayhjLGwpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb24gZmFpbGVkOiAke2x9YCl9ZnVuY3Rpb24gamsoYyl7cmV0dXJuIG51bGw9PWN9Y29uc3QgSG5lPSgpPT4oe19hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRh''@;'; put 'put ''UHJvcHM6dm9pZCAwLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToiaHRfX2FjdGl2ZV9oaWdobGlnaHQiLGFsbG93RW1wdHk6ITAsYWxsb3dIdG1sOiExLGFsbG93SW5zZXJ0Q29sdW1uOiEwLGFsbG93SW5zZXJ0Um93OiEwLGFsbG93SW52YWxpZDohMCxhbGxvd1JlbW92ZUNvbHVtbjohMCxhbGxv''@;'; put 'put ''d1JlbW92ZVJvdzohMCxhdXRvQ29sdW1uU2l6ZTp2b2lkIDAsYXV0b1Jvd1NpemU6dm9pZCAwLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGJpbmRSb3dzV2l0aEhlYWRlcnM6dm9pZCAwLGNlbGw6W10sY2VsbHM6dm9pZCAwLGNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAsY2xhc3NOYW1l''@;'; put 'put ''OnZvaWQgMCxjb2xIZWFkZXJzOm51bGwsY29sbGFwc2libGVDb2x1bW5zOnZvaWQgMCxjb2x1bW5IZWFkZXJIZWlnaHQ6dm9pZCAwLGNvbHVtbnM6dm9pZCAwLGNvbHVtblNvcnRpbmc6dm9pZCAwLGNvbHVtblN1bW1hcnk6dm9pZCAwLGNvbFdpZHRoczp2b2lkIDAsY29tbWVudGVkQ2VsbENs''@;'; put 'put ''YXNzTmFtZToiaHRDb21tZW50Q2VsbCIsY29tbWVudHM6ITEsY29udGV4dE1lbnU6dm9pZCAwLGNvcHlhYmxlOiEwLGNvcHlQYXN0ZTohMCxjb3JyZWN0Rm9ybWF0OiExLGN1cnJlbnRDb2xDbGFzc05hbWU6dm9pZCAwLGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6Imh0X19oaWdobGlnaHQiLGN1''@;'; put 'put ''cnJlbnRSb3dDbGFzc05hbWU6dm9pZCAwLGN1c3RvbUJvcmRlcnM6ITEsZGF0YTp2b2lkIDAsZGF0YVNjaGVtYTp2b2lkIDAsZGF0ZUZvcm1hdDoiREQvTU0vWVlZWSIsZGF0ZVBpY2tlckNvbmZpZzp2b2lkIDAsZGVmYXVsdERhdGU6dm9pZCAwLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ITEs''@;'; put 'put ''ZHJhZ1RvU2Nyb2xsOiEwLGRyb3Bkb3duTWVudTp2b2lkIDAsZWRpdG9yOnZvaWQgMCxlbnRlckJlZ2luc0VkaXRpbmc6ITAsZW50ZXJNb3Zlczp7Y29sOjAscm93OjF9LGZpbGxIYW5kbGU6e2F1dG9JbnNlcnRSb3c6ITF9LGZpbHRlcjohMCxmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiExLGZp''@;'; put 'put ''bHRlcnM6dm9pZCAwLGZpeGVkQ29sdW1uc0xlZnQ6MCxmaXhlZENvbHVtbnNTdGFydDowLGZpeGVkUm93c0JvdHRvbTowLGZpeGVkUm93c1RvcDowLGZvcm11bGFzOnZvaWQgMCxmcmFnbWVudFNlbGVjdGlvbjohMSxoZWlnaHQ6dm9pZCAwLGhpZGRlbkNvbHVtbnM6dm9pZCAwLGhpZGRlblJv''@;'; put 'put ''d3M6dm9pZCAwLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGlzRW1wdHlDb2woYyl7bGV0IGwsYSxkO2ZvcihsPTAsYT10aGlzLmNvdW50Um93cygpO2w8YTtsKyspaWYoZD10aGlzLmdldERhdGFBdENlbGwobCxjKSwhMT09PXBjKGQpKXJldHVybiExO3JldHVybiEwfSxpc0Vt''@;'; put 'put ''cHR5Um93KGMpe2xldCBsLGEsZCxoO2ZvcihsPTAsYT10aGlzLmNvdW50Q29scygpO2w8YTtsKyspaWYoZD10aGlzLmdldERhdGFBdENlbGwoYyxsKSwhMT09PXBjKGQpKXJldHVybiJvYmplY3QiPT10eXBlb2YgZCYmKGg9dGhpcy5nZXRDZWxsTWV0YShjLGwpLGFrKHRoaXMuZ2V0U2NoZW1h''@;'; put 'put ''KClbaC5wcm9wXSxkKSk7cmV0dXJuITB9LGxhYmVsOnZvaWQgMCxsYW5ndWFnZToiZW4tVVMiLGxheW91dERpcmVjdGlvbjoiaW5oZXJpdCIsbGljZW5zZUtleTp2b2lkIDAsbG9jYWxlOiJlbi1VUyIsbWFudWFsQ29sdW1uRnJlZXplOnZvaWQgMCxtYW51YWxDb2x1bW5Nb3ZlOnZvaWQgMCxt''@;'; put 'put ''YW51YWxDb2x1bW5SZXNpemU6dm9pZCAwLG1hbnVhbFJvd01vdmU6dm9pZCAwLG1hbnVhbFJvd1Jlc2l6ZTp2b2lkIDAsbWF4Q29sczoxLzAsbWF4Um93czoxLzAsbWVyZ2VDZWxsczohMSxtaW5Db2xzOjAsbWluUm93czowLG1pblNwYXJlQ29sczowLG1pblNwYXJlUm93czowLG11bHRpQ29s''@;'; put 'put ''dW1uU29ydGluZzp2b2lkIDAsbmVzdGVkSGVhZGVyczp2b2lkIDAsbmVzdGVkUm93czp2b2lkIDAsbm9Xb3JkV3JhcENsYXNzTmFtZToiaHROb1dyYXAiLG51bWVyaWNGb3JtYXQ6dm9pZCAwLG9ic2VydmVET01WaXNpYmlsaXR5OiEwLG91dHNpZGVDbGlja0Rlc2VsZWN0czohMCxwZXJzaXN0''@;'; put 'put ''ZW50U3RhdGU6dm9pZCAwLHBsYWNlaG9sZGVyOnZvaWQgMCxwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU6Imh0UGxhY2Vob2xkZXIiLHByZXZlbnRPdmVyZmxvdzohMSxwcmV2ZW50V2hlZWw6ITEscmVhZE9ubHk6ITEscmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJodERpbW1lZCIscmVuZGVyQWxs''@;'; put 'put ''Um93czp2b2lkIDAscmVuZGVyZXI6dm9pZCAwLHJvd0hlYWRlcnM6dm9pZCAwLHJvd0hlYWRlcldpZHRoOnZvaWQgMCxyb3dIZWlnaHRzOnZvaWQgMCxzZWFyY2g6ITEsc2VsZWN0aW9uTW9kZToibXVsdGlwbGUiLHNlbGVjdE9wdGlvbnM6dm9pZCAwLHNraXBDb2x1bW5PblBhc3RlOiExLHNr''@;'; put 'put ''aXBSb3dPblBhc3RlOiExLHNvcnRCeVJlbGV2YW5jZTohMCxzb3VyY2U6dm9pZCAwLHN0YXJ0Q29sczo1LHN0YXJ0Um93czo1LHN0cmV0Y2hIOiJub25lIixzdHJpY3Q6dm9pZCAwLHRhYmxlQ2xhc3NOYW1lOnZvaWQgMCx0YWJNb3Zlczp7cm93OjAsY29sOjF9LHRpdGxlOnZvaWQgMCx0cmlt''@;'; put 'put ''RHJvcGRvd246ITAsdHJpbVJvd3M6dm9pZCAwLHRyaW1XaGl0ZXNwYWNlOiEwLHR5cGU6InRleHQiLHVuY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCx1bmRvOnZvaWQgMCx2YWxpZGF0b3I6dm9pZCAwLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aWV3cG9ydFJvd1JlbmRl''@;'; put 'put ''cmluZ09mZnNldDoiYXV0byIsdmlzaWJsZVJvd3M6MTAsd2lkdGg6dm9pZCAwLHdvcmRXcmFwOiEwfSk7Y2xhc3MgUkRle2NvbnN0cnVjdG9yKGwpe3RoaXMubWV0YUN0b3I9Y2xhc3N7fSx0aGlzLm1ldGE9dGhpcy5tZXRhQ3Rvci5wcm90b3R5cGUsS2wodGhpcy5tZXRhLEhuZSgpKSx0aGlz''@;'; put 'put ''Lm1ldGEuaW5zdGFuY2U9bH1nZXRNZXRhQ29uc3RydWN0b3IoKXtyZXR1cm4gdGhpcy5tZXRhQ3Rvcn1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe3ZhciBhO0tsKHRoaXMubWV0YSxsKSxOayh0aGlzLm1ldGEsey4uLmwsdHlwZTpudWxsIT09KGE9bC50eXBlKSYm''@;'; put 'put ''dm9pZCAwIT09YT9hOnRoaXMubWV0YS50eXBlfSxsKX19Y2xhc3MgT0Rle2NvbnN0cnVjdG9yKGwpe2NvbnN0IGE9bC5nZXRNZXRhQ29uc3RydWN0b3IoKTt0aGlzLm1ldGE9bmV3IGF9Z2V0TWV0YSgpe3JldHVybiB0aGlzLm1ldGF9dXBkYXRlTWV0YShsKXtLbCh0aGlzLm1ldGEsbCksTmso''@;'; put 'put ''dGhpcy5tZXRhLGwsbCl9fWNsYXNzIFpCe2NvbnN0cnVjdG9yKGwpe3RoaXMudmFsdWVGYWN0b3J5PWwsdGhpcy5kYXRhPVtdLHRoaXMuaW5kZXg9W10sdGhpcy5ob2xlcz1uZXcgU2V0fW9idGFpbihsKXtCaygoKT0+VmsobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29u''@;'; put 'put ''c3QgYT10aGlzLl9nZXRTdG9yYWdlSW5kZXhCeUtleShsKTtsZXQgZDtpZihhPj0wKWQ9dGhpcy5kYXRhW2FdLHZvaWQgMD09PWQmJihkPXRoaXMudmFsdWVGYWN0b3J5KGwpLHRoaXMuZGF0YVthXT1kKTtlbHNlIGlmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5ob2xlcy5zaXplPjAp''@;'; put 'put ''e2NvbnN0IGg9dGhpcy5ob2xlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7dGhpcy5ob2xlcy5kZWxldGUoaCksdGhpcy5kYXRhW2hdPWQsdGhpcy5pbmRleFtsXT1ofWVsc2UgdGhpcy5kYXRhLnB1c2goZCksdGhpcy5pbmRleFtsXT10aGlzLmRhdGEubGVuZ3RoLTE7cmV0dXJuIGR9aW5zZXJ0''@;'; put 'put ''KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO0JrKCgpPT5WayhsKXx8amsobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3QgZD1bXSxoPXRoaXMu''@;'; put 'put ''ZGF0YS5sZW5ndGg7Zm9yKGxldCBfPTA7XzxhO18rKylkLnB1c2goaCtfKSx0aGlzLmRhdGEucHVzaCh2b2lkIDApO2NvbnN0IGY9amsobCk/dGhpcy5pbmRleC5sZW5ndGg6bDt0aGlzLmluZGV4PVsuLi50aGlzLmluZGV4LnNsaWNlKDAsZiksLi4uZCwuLi50aGlzLmluZGV4LnNsaWNlKGYp''@;'; put 'put ''XX1yZW1vdmUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7QmsoKCk9PlZrKGwpfHxqayhsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPXRo''@;'; put 'put ''aXMuaW5kZXguc3BsaWNlKGprKGwpP3RoaXMuaW5kZXgubGVuZ3RoLWE6bCxhKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdOyJudW1iZXIiPT10eXBlb2YgZiYmdGhpcy5ob2xlcy5hZGQoZil9fXNpemUoKXtyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aC10aGlzLmhv''@;'; put 'put ''bGVzLnNpemV9dmFsdWVzKCl7cmV0dXJuIF8xKHRoaXMuZGF0YSwobCxhKT0+IXRoaXMuaG9sZXMuaGFzKGEpKVtTeW1ib2wuaXRlcmF0b3JdKCl9ZW50cmllcygpe2NvbnN0IGw9W107Zm9yKGxldCBkPTA7ZDx0aGlzLmRhdGEubGVuZ3RoO2QrKyl7Y29uc3QgaD10aGlzLl9nZXRLZXlCeVN0''@;'; put 'put ''b3JhZ2VJbmRleChkKTstMSE9PWgmJmwucHVzaChbaCx0aGlzLmRhdGFbZF1dKX1sZXQgYT0wO3JldHVybntuZXh0OigpPT57aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdO3JldHVybiBhKz0xLHt2YWx1ZTpkLGRvbmU6ITF9fXJldHVybntkb25lOiEwfX19fWNsZWFyKCl7dGhpcy5kYXRh''@;'; put 'put ''PVtdLHRoaXMuaW5kZXg9W10sdGhpcy5ob2xlcy5jbGVhcigpfV9nZXRTdG9yYWdlSW5kZXhCeUtleShsKXtyZXR1cm4gdGhpcy5pbmRleC5sZW5ndGg+bD90aGlzLmluZGV4W2xdOi0xfV9nZXRLZXlCeVN0b3JhZ2VJbmRleChsKXtyZXR1cm4gdGhpcy5pbmRleC5pbmRleE9mKGwpfVtTeW1i''@;'; put 'put ''b2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfX1jb25zdCBQRGU9WyJkYXRhIiwid2lkdGgiXTtjbGFzcyBGRGV7Y29uc3RydWN0b3IobCl7dGhpcy5nbG9iYWxNZXRhPWwsdGhpcy5tZXRhcz1uZXcgWkIoKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSl9dXBkYXRlTWV0YShsLGEp''@;'; put 'put ''e2NvbnN0IGQ9dGhpcy5nZXRNZXRhKGwpO0tsKGQsYSksTmsoZCxhKX1jcmVhdGVDb2x1bW4obCxhKXt0aGlzLm1ldGFzLmluc2VydChsLGEpfXJlbW92ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMucmVtb3ZlKGwsYSl9Z2V0TWV0YShsKXtyZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4obCl9Z2V0''@;'; put 'put ''TWV0YUNvbnN0cnVjdG9yKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihsKS5jb25zdHJ1Y3Rvcn1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVNZXRhKCl7cmV0dXJuIGZ1bmN0aW9uIElEZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107ZnVuY3Rpb24gYSgpe316ZihhLGMpO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWEucHJvdG90eXBlW2xbZF1dPXZvaWQgMDtyZXR1cm4gYX0odGhpcy5nbG9iYWxNZXRhLmdldE1ldGFDb25zdHJ1Y3RvcigpLFBEZSkucHJvdG90eXBlfX1j''@;'; put 'put ''bGFzcyBIRGV7Y29uc3RydWN0b3IobCl7dGhpcy5jb2x1bW5NZXRhPWwsdGhpcy5tZXRhcz1uZXcgWkIoKCk9PnRoaXMuX2NyZWF0ZVJvdygpKX11cGRhdGVNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0TWV0YShsLGEpO0tsKGgsZCksTmsoaCxkKX1jcmVhdGVSb3cobCxhKXt0aGlzLm1l''@;'; put 'put ''dGFzLmluc2VydChsLGEpfWNyZWF0ZUNvbHVtbihsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXRhcy5zaXplKCk7ZCsrKXRoaXMubWV0YXMub2J0YWluKGQpLmluc2VydChsLGEpfXJlbW92ZVJvdyhsLGEpe3RoaXMubWV0YXMucmVtb3ZlKGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7Zm9yKGxl''@;'; put 'put ''dCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkucmVtb3ZlKGwsYSl9Z2V0TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSk7cmV0dXJuIHZvaWQgMD09PWQ/aDpoW2RdfXNldE1ldGEobCxhLGQsaCl7dmFyIGY7''@;'; put 'put ''Y29uc3QgXz10aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSk7bnVsbD09PShmPV8uX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PWZ8fGYuZGVsZXRlKGQpLF9bZF09aH1yZW1vdmVNZXRhKGwsYSxkKXtkZWxldGUgdGhpcy5tZXRhcy5vYnRhaW4obCkub2J0''@;'; put 'put ''YWluKGEpW2RdfWdldE1ldGFzKCl7Y29uc3QgbD1bXSxhPUFycmF5LmZyb20odGhpcy5tZXRhcy52YWx1ZXMoKSk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspbC5wdXNoKC4uLmFbZF0udmFsdWVzKCkpO3JldHVybiBsfWdldE1ldGFzQXRSb3cobCl7QmsoKCk9PlZrKGwpLCJFeHBlY3Rp''@;'; put 'put ''bmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9bmV3IE1hcCh0aGlzLm1ldGFzKTtyZXR1cm4gYS5oYXMobCk/QXJyYXkuZnJvbShhLmdldChsKS52YWx1ZXMoKSk6W119Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlUm93KCl7cmV0dXJuIG5ldyBaQihsPT50''@;'; put 'put ''aGlzLl9jcmVhdGVNZXRhKGwpKX1fY3JlYXRlTWV0YShsKXtyZXR1cm4gbmV3KHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhQ29uc3RydWN0b3IobCkpfX1jbGFzcyBObmV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l''@;'; put 'put ''bnRzWzFdOnt9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO3RoaXMuaG90PWwsdGhpcy5nbG9iYWxNZXRhPW5ldyBSRGUobCksdGhpcy50YWJsZU1ldGE9bmV3IE9EZSh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY29sdW1uTWV0YT1u''@;'; put 'put ''ZXcgRkRlKHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jZWxsTWV0YT1uZXcgSERlKHRoaXMuY29sdW1uTWV0YSksZC5mb3JFYWNoKGg9Pm5ldyBoKHRoaXMpKSx0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShhKX1nZXRHbG9iYWxNZXRhKCl7cmV0dXJuIHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRh''@;'; put 'put ''KCl9dXBkYXRlR2xvYmFsTWV0YShsKXt0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShsKX1nZXRUYWJsZU1ldGEoKXtyZXR1cm4gdGhpcy50YWJsZU1ldGEuZ2V0TWV0YSgpfXVwZGF0ZVRhYmxlTWV0YShsKXt0aGlzLnRhYmxlTWV0YS51cGRhdGVNZXRhKGwpfWdldENvbHVtbk1ldGEobCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhKGwpfXVwZGF0ZUNvbHVtbk1ldGEobCxhKXt0aGlzLmNvbHVtbk1ldGEudXBkYXRlTWV0YShsLGEpfWdldENlbGxNZXRhKGwsYSxkKXtsZXR7dmlzdWFsUm93OmgsdmlzdWFsQ29sdW1uOmZ9PWQ7Y29uc3QgXz10aGlzLmNlbGxNZXRhLmdl''@;'; put 'put ''dE1ldGEobCxhKTtyZXR1cm4gXy52aXN1YWxSb3c9aCxfLnZpc3VhbENvbD1mLF8ucm93PWwsXy5jb2w9YSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLF8pLF99Z2V0Q2VsbE1ldGFLZXlWYWx1ZShsLGEsZCl7aWYoInN0cmluZyIhPXR5cGVvZiBkKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVGhlIHBhc3NlZCBjZWxsIG1ldGEgb2JqZWN0IGtleSBpcyBub3QgYSBzdHJpbmciKTtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhKGwsYSxkKX1zZXRDZWxsTWV0YShsLGEsZCxoKXt0aGlzLmNlbGxNZXRhLnNldE1ldGEobCxhLGQsaCl9dXBkYXRlQ2VsbE1ldGEobCxhLGQp''@;'; put 'put ''e3RoaXMuY2VsbE1ldGEudXBkYXRlTWV0YShsLGEsZCl9cmVtb3ZlQ2VsbE1ldGEobCxhLGQpe3RoaXMuY2VsbE1ldGEucmVtb3ZlTWV0YShsLGEsZCl9Z2V0Q2VsbHNNZXRhKCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXMoKX1nZXRDZWxsc01ldGFBdFJvdyhsKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jZWxsTWV0YS5nZXRNZXRhc0F0Um93KGwpfWNyZWF0ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLmNyZWF0ZVJvdyhsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX1yZW1vdmVSb3cobCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVSb3cobCxh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9Y3JlYXRlQ29sdW1uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEuY3JlYXRlQ29sdW1uKGws''@;'; put 'put ''YSksdGhpcy5jb2x1bW5NZXRhLmNyZWF0ZUNvbHVtbihsLGEpfXJlbW92ZUNvbHVtbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNlbGxNZXRhLnJlbW92ZUNvbHVtbihsLGEpLHRoaXMuY29sdW1uTWV0YS5y''@;'; put 'put ''ZW1vdmVDb2x1bW4obCxhKX1jbGVhckNlbGxzQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKX1jbGVhckNhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCksdGhpcy5jb2x1bW5NZXRhLmNsZWFyQ2FjaGUoKX19VGEoTm5lLE8wKTtjbGFzcyBORGV7Y29uc3RydWN0b3Io''@;'; put 'put ''bCl7dGhpcy5tZXRhTWFuYWdlcj1sLHRoaXMubWV0YVN5bmNNZW1vPW5ldyBNYXAsbC5hZGRMb2NhbEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLGE9PnRoaXMuZXh0ZW5kQ2VsbE1ldGEoYSkpLHNvLmdldFNpbmdsZXRvbigpLmFkZCgiYmVmb3JlUmVuZGVyIixhPT57YSYmdGhpcy5tZXRhU3lu''@;'; put 'put ''Y01lbW8uY2xlYXIoKX0sdGhpcy5tZXRhTWFuYWdlci5ob3QpfWV4dGVuZENlbGxNZXRhKGwpe3ZhciBhO2NvbnN0e3JvdzpkLGNvbDpofT1sO2lmKG51bGwhPT0oYT10aGlzLm1ldGFTeW5jTWVtby5nZXQoZCkpJiZ2b2lkIDAhPT1hJiZhLmhhcyhoKSlyZXR1cm47Y29uc3R7dmlzdWFsUm93''@;'; put 'put ''OmYsdmlzdWFsQ29sOl99PWwsVD10aGlzLm1ldGFNYW5hZ2VyLmhvdCxXPVQuY29sVG9Qcm9wKF8pO2wucHJvcD1XLFQucnVuSG9va3MoImJlZm9yZUdldENlbGxNZXRhIixmLF8sbCk7Y29uc3QgaWU9YmwobCwidHlwZSIpP2wudHlwZTpudWxsO2xldCBnZT1SYShsLmNlbGxzKT9sLmNlbGxz''@;'; put 'put ''KGQsaCxXKTpudWxsO2lmKGllKWlmKGdlKXt2YXIgd2U7Z2UudHlwZT1udWxsIT09KHdlPWdlLnR5cGUpJiZ2b2lkIDAhPT13ZT93ZTppZX1lbHNlIGdlPXt0eXBlOmllfTtnZSYmdGhpcy5tZXRhTWFuYWdlci51cGRhdGVDZWxsTWV0YShkLGgsZ2UpLFQucnVuSG9va3MoImFmdGVyR2V0Q2Vs''@;'; put 'put ''bE1ldGEiLGYsXyxsKSx0aGlzLm1ldGFTeW5jTWVtby5oYXMoZCl8fHRoaXMubWV0YVN5bmNNZW1vLnNldChkLG5ldyBTZXQpLHRoaXMubWV0YVN5bmNNZW1vLmdldChkKS5hZGQoaCl9fWNsYXNzIFZEZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy51c2FnZVRyYWNr''@;'; put 'put ''ZXI9bmV3IFNldCx0aGlzLnByb3BEZXNjcmlwdG9ycz1uZXcgTWFwKFtbImZpeGVkQ29sdW1uc0xlZnQiLHt0YXJnZXQ6ImZpeGVkQ29sdW1uc1N0YXJ0IixvbkNoYW5nZShhKXtpZih0aGlzLm1ldGFNYW5hZ2VyLmhvdC5pc1J0bCgpJiYiZml4ZWRDb2x1bW5zTGVmdCI9PT1hKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBpcyBub3Qgc3VwcG9ydGVkIGZvciBSVEwuIFBsZWFzZSB1c2Ugb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIik7aWYodGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNMZWZ0IikmJnRoaXMudXNhZ2VUcmFja2VyLmhh''@;'; put 'put ''cygiZml4ZWRDb2x1bW5zU3RhcnQiKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgZml4ZWRDb2x1bW5zTGVmdGAgYW5kIGBmaXhlZENvbHVtbnNTdGFydGAgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLiIp''@;'; put 'put ''fX1dLFsibGF5b3V0RGlyZWN0aW9uIix7b25DaGFuZ2UoYSxkLGgpe2lmKCFoKXRocm93IG5ldyBFcnJvcihgVGhlIFxgJHthfVxgIG9wdGlvbiBjYW4gbm90IGJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIEhhbmRzb250YWJsZSBpcyBpbml0aWFsaXplZC5gKX19XV0pLHRoaXMuZXh0ZW5kTWV0YVBy''@;'; put 'put ''b3BzKCl9ZXh0ZW5kTWV0YVByb3BzKCl7dGhpcy5wcm9wRGVzY3JpcHRvcnMuZm9yRWFjaCgobCxhKT0+e2NvbnN0e3RhcmdldDpkLG9uQ2hhbmdlOmg9KCgpPT57fSl9PWwsZj0ic3RyaW5nIj09dHlwZW9mIGQsXz1mP2Q6YSxUPWBfJHtffWA7dGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRh''@;'; put 'put ''Lm1ldGFbVF09dGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbX10sdGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoYSxULGgpLGYmJnRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGQsVCxoKX0pfWluc3RhbGxQcm9wV2F0Y2hlcihsLGEsZCl7Y29uc3QgaD10aGlzO09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSh0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YSxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGYpe2NvbnN0IF89IWgudXNhZ2VUcmFja2VyLmhhcyhsKTtoLnVzYWdlVHJhY2tlci5hZGQobCksZC5jYWxsKGgsbCxmLF8pLHRoaXNbYV09Zn0sZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITB9KX19Y29uc3QgVm5lPS9eKFxyXG58XG5ccnxccnxcbikvLEJEZT0vXlteXHRcclxuXSsvLEJuZT0vXlx0LztmdW5jdGlvbiB3eShjKXtsZXQgbCxhLGQsaCxfLGY9IiI7Zm9yKGw9MCxhPWMubGVuZ3RoO2w8YTtsKz0xKXtmb3IoaD1jW2xdLmxlbmd0aCxkPTA7''@;'; put 'put ''ZDxoO2QrPTEpZD4wJiYoZis9Ilx0IiksXz1jW2xdW2RdLCJzdHJpbmciPT10eXBlb2YgXz9fLmluZGV4T2YoIlxuIik+LTE/Zis9YCIke18ucmVwbGFjZSgvIi9nLCciIicpfSJgOmYrPV86Zis9bnVsbD09Xz8iIjpfO2whPT1hLTEmJihmKz0iXG4iKX1yZXR1cm4gZn1jbGFzcyBtN3tzdGF0''@;'; put 'put ''aWMgZ2V0IERFU1RJTkFUSU9OX1JFTkRFUkVSKCl7cmV0dXJuIDF9c3RhdGljIGdldCBERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKCl7cmV0dXJuIDJ9Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuaW5zdGFuY2U9bCx0aGlzLm1ldGFNYW5hZ2VyPWQsdGhpcy50YWJsZU1ldGE9ZC5n''@;'; put 'put ''ZXRUYWJsZU1ldGEoKSx0aGlzLmRhdGFTb3VyY2U9YSx0aGlzLmR1Y2tTY2hlbWE9dGhpcy5jcmVhdGVEdWNrU2NoZW1hKCksdGhpcy5jb2xUb1Byb3BDYWNoZT12b2lkIDAsdGhpcy5wcm9wVG9Db2xDYWNoZT12b2lkIDAsdGhpcy5jcmVhdGVNYXAoKX1jcmVhdGVNYXAoKXtjb25zdCBsPXRo''@;'; put 'put ''aXMuZ2V0U2NoZW1hKCk7aWYodHlwZW9mIGw+InUiKXRocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGNyZWF0ZSBgY29sdW1uc2AgZGVmaW5pdGlvbiBidXQgeW91IGRpZG4ndCBwcm92aWRlIGBzY2hlbWFgIG5vciBgZGF0YWAiKTtjb25zdCBhPXRoaXMudGFibGVNZXRhLmNvbHVtbnM7bGV0''@;'; put 'put ''IGQ7aWYodGhpcy5jb2xUb1Byb3BDYWNoZT1bXSx0aGlzLnByb3BUb0NvbENhY2hlPW5ldyBNYXAsYSl7bGV0IGg9MCxmPTAsXz0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl7Y29uc3QgVD1jayhsKTtoPVQ+MD9UOnRoaXMuY291bnRGaXJzdFJvd0tleXMoKSxfPSEwfWVsc2UgaD1NYXRo''@;'; put 'put ''Lm1pbih0aGlzLnRhYmxlTWV0YS5tYXhDb2xzLGEubGVuZ3RoKTtmb3IoZD0wO2Q8aDtkKyspe2NvbnN0IFQ9Xz9hKGQpOmFbZF07aWYodXMoVCkpe2lmKHR5cGVvZiBULmRhdGE8InUiKXtjb25zdCBXPV8/ZjpkO3RoaXMuY29sVG9Qcm9wQ2FjaGVbV109VC5kYXRhLHRoaXMucHJvcFRvQ29s''@;'; put 'put ''Q2FjaGUuc2V0KFQuZGF0YSxXKX1mKz0xfX19ZWxzZSB0aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKGwpfWNvdW50Rmlyc3RSb3dLZXlzKCl7cmV0dXJuIGxWKHRoaXMuZGF0YVNvdXJjZSl9cmVjdXJzaXZlRHVja0NvbHVtbnMobCxhLGQpe2xldCBfLGg9YSxmPWQ7cmV0dXJuIHR5cGVvZiBo''@;'; put 'put ''PiJ1IiYmKGg9MCxmPSIiKSwib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJheS5pc0FycmF5KGwpJiZkcyhsLChULFcpPT57bnVsbD09PVQ/KF89ZitXLHRoaXMuY29sVG9Qcm9wQ2FjaGUucHVzaChfKSx0aGlzLnByb3BUb0NvbENhY2hlLnNldChfLGgpLGgrPTEpOmg9dGhpcy5yZWN1cnNpdmVE''@;'; put 'put ''dWNrQ29sdW1ucyhULGgsYCR7V30uYCl9KSxofWNvbFRvUHJvcChsKXtpZighMT09PU51bWJlci5pc0ludGVnZXIobCkpcmV0dXJuIGw7Y29uc3QgYT10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4obCk7cmV0dXJuIG51bGw9PT1hP2w6dGhpcy5jb2xUb1Byb3BDYWNoZSYmS2kodGhp''@;'; put 'put ''cy5jb2xUb1Byb3BDYWNoZVthXSk/dGhpcy5jb2xUb1Byb3BDYWNoZVthXTphfXByb3BUb0NvbChsKXtjb25zdCBhPXRoaXMucHJvcFRvQ29sQ2FjaGUuZ2V0KGwpO2lmKEtpKGEpKXJldHVybiB0aGlzLmluc3RhbmNlLnRvVmlzdWFsQ29sdW1uKGEpO2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS50''@;'; put 'put ''b1Zpc3VhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWQ/bDpkfWdldFNjaGVtYSgpe2NvbnN0IGw9dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYTtyZXR1cm4gbD8iZnVuY3Rpb24iPT10eXBlb2YgbD9sKCk6bDp0aGlzLmR1Y2tTY2hlbWF9Y3JlYXRlRHVja1NjaGVtYSgpe3JldHVybiB0aGlz''@;'; put 'put ''LmRhdGFTb3VyY2UmJnRoaXMuZGF0YVNvdXJjZVswXT9yNyh0aGlzLmRhdGFTb3VyY2VbMF0pOnt9fXJlZnJlc2hEdWNrU2NoZW1hKCl7dGhpcy5kdWNrU2NoZW1hPXRoaXMuY3JlYXRlRHVja1NjaGVtYSgpfWNyZWF0ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSx7c291cmNlOmQsbW9kZTpoPSJhYm92ZSJ9PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBmPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7bGV0IF89ZixUPTAs''@;'; put 'put ''Vz1sO2lmKCgibnVtYmVyIiE9dHlwZW9mIFd8fFc+PWYpJiYoVz1mKSxXPHRoaXMuaW5zdGFuY2UuY291bnRSb3dzKCkmJihfPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbFJvdyhXKSksITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLFcsYSxkKXx8bnVsbD09''@;'; put 'put ''PV8pcmV0dXJue2RlbHRhOjB9O2NvbnN0IGdlPXRoaXMudGFibGVNZXRhLm1heFJvd3Msd2U9dGhpcy5nZXRTY2hlbWEoKS5sZW5ndGgsRWU9W107Zm9yKDtUPGEmJmYrVDxnZTspe2xldCBvdD1udWxsOyJhcnJheSI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlP3RoaXMudGFibGVNZXRhLmRh''@;'; put 'put ''dGFTY2hlbWE/b3Q9eXUodGhpcy5nZXRTY2hlbWEoKSk6KG90PVtdLHZvKHdlLTEsKCk9Pm90LnB1c2gobnVsbCkpKToiZnVuY3Rpb24iPT09dGhpcy5pbnN0YW5jZS5kYXRhVHlwZT9vdD10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKFcrVCk6KG90PXt9LGF5KG90LHRoaXMuZ2V0U2NoZW1h''@;'; put 'put ''KCkpKSxFZS5wdXNoKG90KSxUKz0xfXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhXLFQpLCJiZWxvdyI9PT1oJiYoXz1NYXRoLm1pbihfKzEsZikpLHRoaXMuc3BsaWNlRGF0YShfLDAsRWUpO2NvbnN0IFplPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxSb3coXyk7''@;'; put 'put ''cmV0dXJuIHRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk9PT1FZS5sZW5ndGgmJnRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuaW5zdGFuY2UuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLFQ+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdl''@;'; put 'put ''ci5jcmVhdGVSb3cobnVsbCxUKToiYXV0byIhPT1kJiZ0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhfLGEpKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsWmUsVCxkKSx0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcj0hMCx7ZGVsdGE6VCxzdGFydFBoeXNp''@;'; put 'put ''Y2FsSW5kZXg6X319Y3JlYXRlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHtzb3VyY2U6ZCxtb2RlOmg9InN0YXJ0In09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRz''@;'; put 'put ''WzJdOnt9O2lmKCF0aGlzLmluc3RhbmNlLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSBuZXcgY29sdW1uLiBXaGVuIGRhdGEgc291cmNlIGluIGFuIG9iamVjdCwgeW91IGNhbiBvbmx5IGhhdmUgYXMgbXVjaCBjb2x1bW5zIGFz''@;'; put 'put ''IGRlZmluZWQgaW4gZmlyc3QgZGF0YSByb3csIGRhdGEgc2NoZW1hIG9yIGluIHRoZSAnY29sdW1ucycgc2V0dGluZy5JZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGFkZCBuZXcgY29sdW1ucywgeW91IGhhdmUgdG8gdXNlIGFycmF5IGRhdGFzb3VyY2UuIik7Y29uc3QgZj10aGlzLmRhdGFT''@;'; put 'put ''b3VyY2UsXz10aGlzLnRhYmxlTWV0YS5tYXhDb2xzLFQ9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZUNvbHMoKTtsZXQgVz1sO2lmKCgibnVtYmVyIiE9dHlwZW9mIFd8fFc+PVQpJiYoVz1UKSwhMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUNyZWF0ZUNvbCIsVyxhLGQpKXJl''@;'; put 'put ''dHVybntkZWx0YTowfTtsZXQgZ2U9VDtXPHRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCkmJihnZT10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4oVykpO2NvbnN0IHdlPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7bGV0IEVlPXRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCks''@;'; put 'put ''WmU9MCxvdD1nZTsiZW5kIj09PWgmJihvdD1NYXRoLm1pbihvdCsxLFQpKTtjb25zdCBldD1vdDtmb3IoO1plPGEmJkVlPF87KXtpZigibnVtYmVyIiE9dHlwZW9mIFd8fFc+PUVlKWlmKHdlPjApZm9yKGxldCBrdD0wO2t0PHdlO2t0Kz0xKXR5cGVvZiBmW2t0XT4idSImJihmW2t0XT1bXSks''@;'; put 'put ''ZltrdF0ucHVzaChudWxsKTtlbHNlIGYucHVzaChbbnVsbF0pO2Vsc2UgZm9yKGxldCBrdD0wO2t0PHdlO2t0KyspZltrdF0uc3BsaWNlKG90LDAsbnVsbCk7WmUrPTEsb3QrPTEsRWUrPTF9dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKFcsWmUpLFplPjAm''@;'; put 'put ''JihudWxsPT1sP3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKG51bGwsWmUpOiJhdXRvIiE9PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKGV0LGEpKTtjb25zdCB5dD10aGlzLmluc3RhbmNlLnRvVmlzdWFsQ29sdW1uKGV0KTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJDcmVhdGVDb2wiLHl0LFplLGQpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSx7ZGVsdGE6WmUsc3RhcnRQaHlzaWNhbEluZGV4OmV0fX1yZW1vdmVSb3cobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEsZD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxoPU51bWJlci5pc0ludGVnZXIobCk/bDotYTtjb25zdCBmPXRoaXMudmlzdWFsUm93c1RvUGh5c2ljYWwoaCxhKSxfPXRoaXMuaW5zdGFuY2UuY291bnRTb3Vy''@;'; put 'put ''Y2VSb3dzKCk7aWYoaD0oXytoKSVfLCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlUm93IixoLGYubGVuZ3RoLGYsZCkpcmV0dXJuITE7Y29uc3QgVz1mLmxlbmd0aDtpZih0aGlzLmZpbHRlckRhdGEoaCxXLGYpLGg8dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSl7''@;'; put 'put ''dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKGYpO2NvbnN0IGdlPUtpKHRoaXMudGFibGVNZXRhLmNvbHVtbnMpfHxLaSh0aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKTswPT09dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhl''@;'; put 'put ''c0xlbmd0aCgpJiYhMT09PWdlJiZ0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSl9cmV0dXJuIGYuc2xpY2UoMCkuc29ydCgoZ2Usd2UpPT53ZS1nZSkuZm9yRWFjaChnZT0+e3RoaXMubWV0YU1hbmFnZXIucmVtb3ZlUm93KGdlLDEpfSksdGhp''@;'; put 'put ''cy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVSb3ciLGgsVyxmLGQpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLCEwfXJlbW92ZUNvbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJvYmplY3QiPT09dGhpcy5pbnN0YW5jZS5kYXRhVHlwZXx8dGhpcy50YWJsZU1ldGEuY29sdW1ucyl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCByZW1vdmUgY29sdW1uIHdpdGggb2JqZWN0IGRhdGEgc291cmNlIG9yIGNvbHVt''@;'; put 'put ''bnMgb3B0aW9uIHNwZWNpZmllZCIpO2xldCBoPSJudW1iZXIiIT10eXBlb2YgbD8tYTpsO2g9KHRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCkraCkldGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKTtjb25zdCBmPXRoaXMudmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoaCxhKSxfPWYuc2xpY2UoMCku''@;'; put 'put ''c29ydCgod2UsRWUpPT5FZS13ZSk7aWYoITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDb2wiLGgsYSxmLGQpKXJldHVybiExO2xldCBXPSEwO2NvbnN0IGllPV8ubGVuZ3RoLGdlPXRoaXMuZGF0YVNvdXJjZTtmb3IobGV0IHdlPTA7d2U8aWU7d2UrKylXJiZmWzBd''@;'; put 'put ''IT09Zlt3ZV0td2UmJihXPSExKTtpZihXKWZvcihsZXQgd2U9MCxFZT10aGlzLmluc3RhbmNlLmNvdW50U291cmNlUm93cygpO3dlPEVlO3dlKyspZ2Vbd2VdLnNwbGljZShmWzBdLGEpLDA9PT13ZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4oZlswXSxhKTtlbHNlIGZvcihsZXQg''@;'; put 'put ''d2U9MCxFZT10aGlzLmluc3RhbmNlLmNvdW50U291cmNlUm93cygpO3dlPEVlO3dlKyspZm9yKGxldCBaZT0wO1plPGllO1plKyspZ2Vbd2VdLnNwbGljZShfW1plXSwxKSwwPT09d2UmJnRoaXMubWV0YU1hbmFnZXIucmVtb3ZlQ29sdW1uKF9bWmVdLDEpO3JldHVybiBoPHRoaXMuaW5zdGFu''@;'; put 'put ''Y2UuY291bnRDb2xzKCkmJih0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLnJlbW92ZUluZGV4ZXMoZiksMD09PXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSYmdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5zZXRJ''@;'; put 'put ''bmRleGVzU2VxdWVuY2UoW10pKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNvbCIsaCxhLGYsZCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLCEwfXNwbGljZUNvbChsLGEsZCl7Y29uc3QgaD10aGlzLmluc3Rh''@;'; put 'put ''bmNlLmdldERhdGFBdENvbChsKSxmPWguc2xpY2UoYSxhK2QpLF89aC5zbGljZShhK2QpO2Zvcih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KFQ+Mz9ULTM6MCksaWU9MztpZTxUO2llKyspV1tpZS0zXT1hcmd1bWVudHNbaWVdO25OKFcsXyk7bGV0IGdlPTA7Zm9yKDtnZTxk''@;'; put 'put ''OylXLnB1c2gobnVsbCksZ2UrPTE7cmV0dXJuIHFlZShXKSx0aGlzLmluc3RhbmNlLnBvcHVsYXRlRnJvbUFycmF5KGEsbCxXLG51bGwsbnVsbCwic3BsaWNlQ29sIiksZn1zcGxpY2VSb3cobCxhLGQpe2NvbnN0IGg9dGhpcy5pbnN0YW5jZS5nZXRTb3VyY2VEYXRhQXRSb3cobCksZj1oLnNs''@;'; put 'put ''aWNlKGEsYStkKSxfPWguc2xpY2UoYStkKTtmb3IodmFyIFQ9YXJndW1lbnRzLmxlbmd0aCxXPW5ldyBBcnJheShUPjM/VC0zOjApLGllPTM7aWU8VDtpZSsrKVdbaWUtM109YXJndW1lbnRzW2llXTtuTihXLF8pO2xldCBnZT0wO2Zvcig7Z2U8ZDspVy5wdXNoKG51bGwpLGdlKz0xO3JldHVy''@;'; put 'put ''biB0aGlzLmluc3RhbmNlLnBvcHVsYXRlRnJvbUFycmF5KGwsYSxbV10sbnVsbCxudWxsLCJzcGxpY2VSb3ciKSxmfXNwbGljZURhdGEobCxhLGQpe2lmKCExIT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlRGF0YVNwbGljZSIsbCxhLGQpKXtjb25zdCBmPVsuLi50aGlzLmRhdGFT''@;'; put 'put ''b3VyY2Uuc2xpY2UoMCxsKSwuLi5kLC4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZShsKV07dGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLGYuZm9yRWFjaChfPT50aGlzLmRhdGFTb3VyY2UucHVzaChfKSl9fWZpbHRlckRhdGEobCxhLGQpe2xldCBoPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImZp''@;'; put 'put ''bHRlckRhdGEiLGwsYSxkKTshMT09PUFycmF5LmlzQXJyYXkoaCkmJihoPXRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKGYsXyk9Pi0xPT09ZC5pbmRleE9mKF8pKSksdGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuZGF0YVNvdXJjZSxoKX1n''@;'; put 'put ''ZXQobCxhKXtjb25zdCBkPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbFJvdyhsKTtsZXQgaD10aGlzLmRhdGFTb3VyY2VbZF07Y29uc3QgZj10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixkKTtoPWlzTmFOKGYpP2Y6aDtsZXQgXz1udWxsO2lmKGgmJmguaGFzT3duUHJv''@;'; put 'put ''cGVydHkmJmJsKGgsYSkpXz1oW2FdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7Y29uc3QgVD1hLnNwbGl0KCIuIik7bGV0IFc9aDtpZighVylyZXR1cm4gbnVsbDtmb3IobGV0IGllPTAsZ2U9VC5sZW5ndGg7aWU8Z2U7aWUrKylpZihXPVdbVFtpZV1d''@;'; put 'put ''LHR5cGVvZiBXPiJ1IilyZXR1cm4gbnVsbDtfPVd9ZWxzZSJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoXz1hKHRoaXMuZGF0YVNvdXJjZS5zbGljZShkLGQrMSlbMF0pKTtpZih0aGlzLmluc3RhbmNlLmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgVD1fZyhfKTt0aGlzLmluc3RhbmNlLnJ1''@;'; put 'put ''bkhvb2tzKCJtb2RpZnlEYXRhIixkLHRoaXMucHJvcFRvQ29sKGEpLFQsImdldCIpLFQuaXNUb3VjaGVkKCkmJihfPVQudmFsdWUpfXJldHVybiBffWdldENvcHlhYmxlKGwsYSl7cmV0dXJuIHRoaXMuaW5zdGFuY2UuZ2V0Q2VsbE1ldGEobCx0aGlzLnByb3BUb0NvbChhKSkuY29weWFibGU/''@;'; put 'put ''dGhpcy5nZXQobCxhKToiIn1zZXQobCxhLGQpe2NvbnN0IGg9dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KGwpO2xldCBmPWQsXz10aGlzLmRhdGFTb3VyY2VbaF07Y29uc3QgVD10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixoKTtpZihfPWlzTmFOKFQpP1Q6Xyx0''@;'; put 'put ''aGlzLmluc3RhbmNlLmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgVz1fZyhmKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlEYXRhIixoLHRoaXMucHJvcFRvQ29sKGEpLFcsInNldCIpLFcuaXNUb3VjaGVkKCkmJihmPVcudmFsdWUpfWlmKF8mJl8uaGFzT3duUHJvcGVydHkm''@;'; put 'put ''JmJsKF8sYSkpX1thXT1mO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7Y29uc3QgVz1hLnNwbGl0KCIuIik7bGV0IHdlLGllPV8sZ2U9MDtmb3IoZ2U9MCx3ZT1XLmxlbmd0aC0xO2dlPHdlO2dlKyspdHlwZW9mIGllW1dbZ2VdXT4idSImJihpZVtXW2dl''@;'; put 'put ''XV09e30pLGllPWllW1dbZ2VdXTtpZVtXW2dlXV09Zn1lbHNlImZ1bmN0aW9uIj09dHlwZW9mIGE/YSh0aGlzLmRhdGFTb3VyY2Uuc2xpY2UoaCxoKzEpWzBdLGYpOl9bYV09Zn12aXN1YWxSb3dzVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3Mo''@;'; put 'put ''KSxoPVtdO2xldCBULGY9KGQrbCklZCxfPWE7Zm9yKDtmPGQmJl87KVQ9dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KGYpLGgucHVzaChUKSxfLT0xLGYrPTE7cmV0dXJuIGh9dmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwobCxhKXtjb25zdCBkPXRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCks''@;'; put 'put ''aD1bXTtsZXQgZj0oZCtsKSVkLF89YTtmb3IoO2Y8ZCYmXzspe2NvbnN0IFQ9dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsQ29sdW1uKGYpO2gucHVzaChUKSxfLT0xLGYrPTF9cmV0dXJuIGh9Y2xlYXIoKXtmb3IobGV0IGw9MDtsPHRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7bCsr''@;'; put 'put ''KWZvcihsZXQgYT0wO2E8dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKTthKyspdGhpcy5zZXQobCx0aGlzLmNvbFRvUHJvcChhKSwiIil9Z2V0TGVuZ3RoKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5tYXhSb3dzO2xldCBhO2E9bDwwfHwwPT09bD8wOmx8fDEvMDtjb25zdCBkPXRoaXMuaW5z''@;'; put 'put ''dGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1cm4gTWF0aC5taW4oZCxhKX1nZXRBbGwoKXtjb25zdCBsPXtyb3c6MCxjb2w6MH0sYT17cm93Ok1hdGgubWF4KHRoaXMuaW5zdGFuY2UuY291bnRSb3dzKCktMSwwKSxjb2w6TWF0aC5tYXgodGhp''@;'; put 'put ''cy5pbnN0YW5jZS5jb3VudENvbHMoKS0xLDApfTtyZXR1cm4gbC5yb3ctYS5yb3chPTB8fHRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk/dGhpcy5nZXRSYW5nZShsLGEsbTcuREVTVElOQVRJT05fUkVOREVSRVIpOltdfWNvdW50Q2FjaGVkQ29sdW1ucygpe3JldHVybiB0aGlzLmNv''@;'; put 'put ''bFRvUHJvcENhY2hlLmxlbmd0aH1nZXRSYW5nZShsLGEsZCl7Y29uc3QgaD1bXTtsZXQgZixfLFQ7Y29uc3QgVz10aGlzLnRhYmxlTWV0YS5tYXhSb3dzLGllPXRoaXMudGFibGVNZXRhLm1heENvbHM7aWYoMD09PVd8fDA9PT1pZSlyZXR1cm5bXTtjb25zdCBnZT1kPT09bTcuREVTVElOQVRJ''@;'; put 'put ''T05fQ0xJUEJPQVJEX0dFTkVSQVRPUj90aGlzLmdldENvcHlhYmxlOnRoaXMuZ2V0LHdlPU1hdGgubWluKE1hdGgubWF4KFctMSwwKSxNYXRoLm1heChsLnJvdyxhLnJvdykpLEVlPU1hdGgubWluKE1hdGgubWF4KGllLTEsMCksTWF0aC5tYXgobC5jb2wsYS5jb2wpKTtmb3IoZj1NYXRoLm1p''@;'; put 'put ''bihsLnJvdyxhLnJvdyk7Zjw9d2U7ZisrKXtUPVtdO2NvbnN0IFplPWY+PTA/dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KGYpOmY7Zm9yKF89TWF0aC5taW4obC5jb2wsYS5jb2wpO188PUVlJiZudWxsIT09WmU7XysrKVQucHVzaChnZS5jYWxsKHRoaXMsZix0aGlzLmNvbFRvUHJvcChf''@;'; put 'put ''KSkpO251bGwhPT1aZSYmaC5wdXNoKFQpfXJldHVybiBofWdldFRleHQobCxhKXtyZXR1cm4gd3kodGhpcy5nZXRSYW5nZShsLGEsbTcuREVTVElOQVRJT05fUkVOREVSRVIpKX1nZXRDb3B5YWJsZVRleHQobCxhKXtyZXR1cm4gd3kodGhpcy5nZXRSYW5nZShsLGEsbTcuREVTVElOQVRJT05f''@;'; put 'put ''Q0xJUEJPQVJEX0dFTkVSQVRPUikpfWRlc3Ryb3koKXt0aGlzLmluc3RhbmNlPW51bGwsdGhpcy5tZXRhTWFuYWdlcj1udWxsLHRoaXMuZGF0YVNvdXJjZT1udWxsLHRoaXMuZHVja1NjaGVtYT1udWxsLHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RoPTAsdGhpcy5wcm9wVG9Db2xDYWNoZS5j''@;'; put 'put ''bGVhcigpLHRoaXMucHJvcFRvQ29sQ2FjaGU9dm9pZCAwfX1jb25zdCB6RGU9bTc7ZnVuY3Rpb24gam5lKGMsbCxhLGQpe2NvbnN0e2hvdEluc3RhbmNlOmgsZGF0YU1hcDpmLGRhdGFTb3VyY2U6XyxpbnRlcm5hbFNvdXJjZTpULHNvdXJjZTpXLG1ldGFNYW5hZ2VyOmllLGZpcnN0UnVuOmdl''@;'; put 'put ''fT1kLHdlPWJ1KFQpLEVlPWguZ2V0U2V0dGluZ3MoKTtoLmRhdGFUeXBlPUFycmF5LmlzQXJyYXkoRWUuZGF0YVNjaGVtYSk/ImFycmF5IjpSYShFZS5kYXRhU2NoZW1hKT8iZnVuY3Rpb24iOiJvYmplY3QiLGYmJmYuZGVzdHJveSgpLGM9aC5ydW5Ib29rcyhgYmVmb3JlJHt3ZX1gLGMsZ2Us''@;'; put 'put ''Vyk7Y29uc3QgWmU9bmV3IHpEZShoLGMsaWUpO2lmKGwoWmUpLCJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9PWMpYy5wdXNoJiZjLnNwbGljZXx8KGM9W2NdKTtlbHNle2lmKG51bGwhPT1jKXRocm93IG5ldyBFcnJvcihgJHtUfSBvbmx5IGFjY2VwdHMgYXJyYXkgb2Ygb2JqZWN0cyBvciBh''@;'; put 'put ''cnJheSBvZiBhcnJheXMgKCR7dHlwZW9mIGN9IGdpdmVuKWApO3tjb25zdCBvdD1aZS5nZXRTY2hlbWEoKTtjPVtdO2xldCBldCx5dD0wLGt0PTA7Zm9yKHl0PTAsa3Q9RWUuc3RhcnRSb3dzO3l0PGt0O3l0KyspaWYoIm9iamVjdCIhPT1oLmRhdGFUeXBlJiYiZnVuY3Rpb24iIT09aC5kYXRh''@;'; put 'put ''VHlwZXx8IUVlLmRhdGFTY2hlbWEpaWYoImFycmF5Ij09PWguZGF0YVR5cGUpZXQ9eXUob3RbMF0pLGMucHVzaChldCk7ZWxzZXtldD1bXTtmb3IobGV0IFN0PTAsUXQ9RWUuc3RhcnRDb2xzO1N0PFF0O1N0KyspZXQucHVzaChudWxsKTtjLnB1c2goZXQpfWVsc2UgZXQ9eXUob3QpLGMucHVz''@;'; put 'put ''aChldCl9fUFycmF5LmlzQXJyYXkoY1swXSkmJihoLmRhdGFUeXBlPSJhcnJheSIpLEVlLmRhdGE9YyxaZS5kYXRhU291cmNlPWMsXy5kYXRhPWMsXy5kYXRhVHlwZT1oLmRhdGFUeXBlLF8uY29sVG9Qcm9wPVplLmNvbFRvUHJvcC5iaW5kKFplKSxfLnByb3BUb0NvbD1aZS5wcm9wVG9Db2wu''@;'; put 'put ''YmluZChaZSksXy5jb3VudENhY2hlZENvbHVtbnM9WmUuY291bnRDYWNoZWRDb2x1bW5zLmJpbmQoWmUpLGEoWmUpLGgucnVuSG9va3MoYGFmdGVyJHt3ZX1gLGMsZ2UsVyksZ2V8fChoLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsbnVsbCxUKSxoLnJlbmRlcigpKX1jb25zdCB6bmU9bmV3IE1h''@;'; put 'put ''cChbWyIgIiwic3BhY2UiXSxbInNwYWNlYmFyIiwic3BhY2UiXSxbInNjcm9sbCIsInNjcm9sbGxvY2siXSxbImRlbCIsImRlbGV0ZSJdLFsiZXNjIiwiZXNjYXBlIl0sWyJtZWRpYW5leHR0cmFjayIsIm1lZGlhdHJhY2tuZXh0Il0sWyJtZWRpYXByZXZpb3VzdHJhY2siLCJtZWRpYXRyYWNr''@;'; put 'put ''cHJldmlvdXMiXSxbInZvbHVtZXVwIiwiYXVkaW92b2x1bWV1cCJdLFsidm9sdW1lZG93biIsImF1ZGlvdm9sdW1lZG93biJdLFsidm9sdW1lbXV0ZSIsImF1ZGlvdm9sdW1lbXV0ZSJdLFsibXVsdGlwbHkiLCIqIl0sWyJhZGQiLCIrIl0sWyJkaXZpZGUiLCIvIl0sWyJzdWJ0cmFjdCIsIi0i''@;'; put 'put ''XSxbImxlZnQiLCJhcnJvd2xlZnQiXSxbInJpZ2h0IiwiYXJyb3dyaWdodCJdLFsidXAiLCJhcnJvd3VwIl0sWyJkb3duIiwiYXJyb3dkb3duIl1dKSx6az1jPT5jLm1hcChsPT57Y29uc3QgYT1sLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHpuZS5oYXMoYSk/em5lLmdldChhKTphfSkuc29ydCgp''@;'; put 'put ''LmpvaW4oIisiKSxVbmU9Yz0+Yy50b0xvd2VyQ2FzZSgpLFdEZT1bIm1ldGEiLCJhbHQiLCJzaGlmdCIsImNvbnRyb2wiXSxDeT1mdW5jdGlvbiBZRGUoKXtjb25zdCBjPW5ldyBTZXQ7cmV0dXJue3ByZXNzKGwpe2MuYWRkKGwpfSxyZWxlYXNlKGwpe2MuZGVsZXRlKGwpfSxyZWxlYXNlQWxs''@;'; put 'put ''KCl7Yy5jbGVhcigpfSxpc1ByZXNzZWQ6bD0+Yy5oYXMobCl9fSgpLCREZT1jPT57bGV0e293bmVyV2luZG93OmwsaGFuZGxlRXZlbnQ6YSxiZWZvcmVLZXlEb3duOmQsYWZ0ZXJLZXlEb3duOmh9PWM7Y29uc3QgZj12ayh7ZXJyb3JJZEV4aXN0czpaZT0+YFRoZSAiJHtaZX0iIGNvbnRleHQg''@;'; put 'put ''bmFtZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pO2xldCBfPSJncmlkIjtjb25zdCBXPSgpPT5fLGllPVplPT5mLmdldEl0ZW0oWmUpO2xldCB3ZT0hMTtjb25zdCBFZT1mdW5jdGlvbiBHRGUoYyxsLGEsZCxoKXtjb25zdCBmPUVlPT5XRGUuaW5jbHVkZXMoRWUpLF89ZnVuY3Rpb24oRWUp''@;'; put 'put ''e2xldCBaZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IG90PVtdO3JldHVybiBFZS5hbHRLZXkmJm90LnB1c2goImFsdCIpLFplJiYoRWUuY3RybEtleXx8RWUubWV0YUtleSk/b3QucHVzaCgiY29udHJvbC9tZXRhIik6KEVl''@;'; put 'put ''LmN0cmxLZXkmJm90LnB1c2goImNvbnRyb2wiKSxFZS5tZXRhS2V5JiZvdC5wdXNoKCJtZXRhIikpLEVlLnNoaWZ0S2V5JiZvdC5wdXNoKCJzaGlmdCIpLG90fSxUPUVlPT57aWYoITE9PT1sKEVlKSlyZXR1cm47Y29uc3QgWmU9YShFZSk7aWYoMjI5PT09RWUua2V5Q29kZXx8ITE9PT1aZXx8''@;'; put 'put ''YmcoRWUpKXJldHVybjtjb25zdCBvdD1VbmUoRWUua2V5KTtsZXQgZXQ9W107ZihvdCk/Q3kucHJlc3Mob3QpOmV0PV8oRWUpO2NvbnN0IHl0PVtvdF0uY29uY2F0KGV0KTshaChFZSx5dCkmJihkaygpJiZldC5pbmNsdWRlcygibWV0YSIpfHwhZGsoKSYmZXQuaW5jbHVkZXMoImNvbnRyb2wi''@;'; put 'put ''KSkmJmgoRWUsW290XS5jb25jYXQoXyhFZSwhMCkpKSxkKEVlKX0sVz1FZT0+e2lmKCExPT09bChFZSkpcmV0dXJuO2NvbnN0IFplPVVuZShFZS5rZXkpOyExIT09ZihaZSkmJkN5LnJlbGVhc2UoWmUpfSxpZT0oKT0+e0N5LnJlbGVhc2VBbGwoKX07cmV0dXJue21vdW50OigpPT57bGV0IEVl''@;'; put 'put ''PWM7Zm9yKDtFZTspRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLFQpLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsVyksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlz''@;'; put 'put ''dGVuZXIoImJsdXIiLGllKSxFZT1RYihFZSl9LHVubW91bnQ6KCk9PntsZXQgRWU9Yztmb3IoO0VlOylFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVCksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVu''@;'; put 'put ''ZXIoImtleXVwIixXKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsaWUpLEVlPVFiKEVlKX0saXNQcmVzc2VkOkVlPT5DeS5pc1ByZXNzZWQoRWUpLHJlbGVhc2VQcmVzc2VkS2V5czooKT0+Q3kucmVsZWFzZUFsbCgpfX0obCxhLGQsaCwo''@;'; put 'put ''WmUsb3QpPT57Y29uc3QgZXQ9aWUoVygpKTtsZXQgeXQ9ITE7aWYoIWV0Lmhhc1Nob3J0Y3V0KG90KSlyZXR1cm4geXQ7Y29uc3Qga3Q9ZXQuZ2V0U2hvcnRjdXRzKG90KTtmb3IobGV0IFN0PTA7U3Q8a3QubGVuZ3RoO1N0Kyspe2NvbnN0e2NhbGxiYWNrOlF0LHJ1bk9ubHlJZjpubixwcmV2''@;'; put 'put ''ZW50RGVmYXVsdDptbixzdG9wUHJvcGFnYXRpb246RW4sY2FwdHVyZUN0cmw6bHJ9PWt0W1N0XTtpZighMSE9PW5uKFplKSYmKHdlPWxyLHl0PSExPT09UXQoWmUsb3QpLHdlPSExLG1uJiZaZS5wcmV2ZW50RGVmYXVsdCgpLEVuJiZaZS5zdG9wUHJvcGFnYXRpb24oKSx5dCkpYnJlYWt9cmV0''@;'; put 'put ''dXJuIHl0fSk7cmV0dXJuIEVlLm1vdW50KCkse2FkZENvbnRleHQ6WmU9Pntjb25zdCBvdD0oYz0+e2NvbnN0IGw9dmsoe2Vycm9ySWRFeGlzdHM6Vz0+YFRoZSAiJHtXfSIgc2hvcnRjdXQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGluIHRoZSAiJHtjfSIgY29udGV4dC5gfSksYT1mdW5jdGlv''@;'; put 'put ''bigpe2xldHtrZXlzOlcsY2FsbGJhY2s6aWUsZ3JvdXA6Z2UscnVuT25seUlmOndlPSgoKT0+ITApLGNhcHR1cmVDdHJsOkVlPSExLHByZXZlbnREZWZhdWx0OlplPSEwLHN0b3BQcm9wYWdhdGlvbjpvdD0hMSxyZWxhdGl2ZVRvR3JvdXA6ZXQscG9zaXRpb246eXR9PWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZihMYShnZSkpdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBkZWZpbmUgdGhlIHNob3J0Y3V0J3MgZ3JvdXAuIik7aWYoITE9PT1SYShpZSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2hvcnRjdXQncyBjYWxs''@;'; put 'put ''YmFjayBuZWVkcyB0byBiZSBhIGZ1bmN0aW9uLiIpO2lmKCExPT09QXJyYXkuaXNBcnJheShXKSl0aHJvdyBuZXcgRXJyb3IoQWFgUGFzcyB0aGUgc2hvcnRjdXRcJ3Mga2V5cyBhcyBhbiBhcnJheSBvZiBhcnJheXMsXHgyMAogICAgICB1c2luZyB0aGUgS2V5Ym9hcmRFdmVudC5rZXkgcHJv''@;'; put 'put ''cGVydGllczpceDIwCiAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzLmApO2NvbnN0IGt0PXtjYWxsYmFjazppZSxncm91cDpnZSxydW5Pbmx5SWY6d2UsY2FwdHVyZUN0cmw6RWUscHJldmVu''@;'; put 'put ''dERlZmF1bHQ6WmUsc3RvcFByb3BhZ2F0aW9uOm90fTtLaShldCkmJihba3QucmVsYXRpdmVUb0dyb3VwLGt0LnBvc2l0aW9uXT1bZXQseXRdKSxXLmZvckVhY2goU3Q9Pntjb25zdCBRdD16ayhTdCk7aWYobC5oYXNJdGVtKFF0KSl7Y29uc3QgbW49bC5nZXRJdGVtKFF0KTtsZXQgRW49bW4u''@;'; put 'put ''ZmluZEluZGV4KGxyPT5sci5ncm91cD09PWV0KTstMSE9PUVuPyJiZWZvcmUiPT09eXQ/RW4tPTE6RW4rPTE6RW49bW4ubGVuZ3RoLG1uLnNwbGljZShFbiwwLGt0KX1lbHNlIGwuYWRkSXRlbShRdCxba3RdKX0pfSxoPVc9Pntjb25zdCBpZT16ayhXKTtsLnJlbW92ZUl0ZW0oaWUpfTtyZXR1''@;'; put 'put ''cm57YWRkU2hvcnRjdXQ6YSxhZGRTaG9ydGN1dHM6ZnVuY3Rpb24oVyl7bGV0IGllPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtXLmZvckVhY2goZ2U9PntkcyhpZSwod2UsRWUpPT57ITE9PT1PYmplY3QucHJvdG90eXBlLmhhc093''@;'; put 'put ''blByb3BlcnR5LmNhbGwoZ2UsRWUpJiYoZ2VbRWVdPWllW0VlXSl9KSxhKGdlKX0pfSxnZXRTaG9ydGN1dHM6Vz0+e2NvbnN0IGllPXprKFcpLGdlPWwuZ2V0SXRlbShpZSk7cmV0dXJuIEtpKGdlKT9nZS5zbGljZSgpOltdfSxoYXNTaG9ydGN1dDpXPT57Y29uc3QgaWU9emsoVyk7cmV0dXJu''@;'; put 'put ''IGwuaGFzSXRlbShpZSl9LHJlbW92ZVNob3J0Y3V0c0J5S2V5czpoLHJlbW92ZVNob3J0Y3V0c0J5R3JvdXA6Vz0+e2wuZ2V0SXRlbXMoKS5mb3JFYWNoKGdlPT57bGV0W3dlLEVlXT1nZTtjb25zdCBaZT1FZS5maWx0ZXIob3Q9Pm90Lmdyb3VwIT09Vyk7MD09PVplLmxlbmd0aD9oKChjPT5j''@;'; put 'put ''LnNwbGl0KCIrIikpKHdlKSk6KEVlLmxlbmd0aD0wLEVlLnB1c2goLi4uWmUpKX0pfX19KShaZSk7cmV0dXJuIGYuYWRkSXRlbShaZSxvdCksb3R9LGdldEFjdGl2ZUNvbnRleHROYW1lOlcsZ2V0Q29udGV4dDppZSxzZXRBY3RpdmVDb250ZXh0TmFtZTpaZT0+e189WmV9LGlzQ3RybFByZXNz''@;'; put 'put ''ZWQ6KCk9PiF3ZSYmKEVlLmlzUHJlc3NlZCgiY29udHJvbCIpfHxFZS5pc1ByZXNzZWQoIm1ldGEiKSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5FZS5yZWxlYXNlUHJlc3NlZEtleXMoKSxkZXN0cm95OigpPT5FZS51bm1vdW50KCl9fSxxRGU9ImdyaWREZWZhdWx0IjtsZXQgWUI9bnVsbDtm''@;'; put 'put ''dW5jdGlvbiBXQihjLGwpe3ZhciBhO2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0hMSxmPXRoaXM7Y29uc3QgXz1uZXcgbGwoZik7bGV0IFQsVyxpZSxnZSx3ZT0hMDsoZnVuY3Rpb24gb1RlKGMpe3JldHVybiBjPT09blZ9''@;'; put 'put ''KShkKSYmZnVuY3Rpb24gaVRlKGMpe2xuZS5zZXQoYywhMCl9KHRoaXMpLHRoaXMucm9vdEVsZW1lbnQ9Yyx0aGlzLnJvb3REb2N1bWVudD1jLm93bmVyRG9jdW1lbnQsdGhpcy5yb290V2luZG93PXRoaXMucm9vdERvY3VtZW50LmRlZmF1bHRWaWV3LHRoaXMuaXNEZXN0cm95ZWQ9ITEsdGhp''@;'; put 'put ''cy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPTAsdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPTA7Y29uc3QgRWU9bnVsbCE9PShhPWw/LmxheW91dERpcmVjdGlvbikmJnZvaWQgMCE9PWE/YToiaW5oZXJpdCIsWmU9WyJydGwiLCJsdHIiXS5pbmNsdWRlcyhFZSk/RWU6dGhpcy5yb290''@;'; put 'put ''V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yb290RWxlbWVudCkuZGlyZWN0aW9uO3RoaXMucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkaXIiLFplKSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1aZX0sdGhpcy5pc0x0cj1mdW5jdGlvbigpe3JldHVybiFmLmlz''@;'; put 'put ''UnRsKCl9LHRoaXMuZ2V0RGlyZWN0aW9uRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGYuaXNMdHIoKT8xOi0xfSxsLmxhbmd1YWdlPWZ1bmN0aW9uIHFUZShjKXtsZXQgbD1NbmUoYyk7cmV0dXJuIE5CKGwpfHwobD1IQix4bmUoYykpLGx9KGwubGFuZ3VhZ2UpO2NvbnN0IG90PW5ldyBObmUo''@;'; put 'put ''ZixsLFtORGUsVkRlXSksZXQ9b3QuZ2V0VGFibGVNZXRhKCkseXQ9b3QuZ2V0R2xvYmFsTWV0YSgpLGt0PXZrKCk7dGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5yZW5kZXJDYWxsPSExLGMuaW5zZXJ0QmVmb3JlKHRoaXMuY29udGFp''@;'; put 'put ''bmVyLGMuZmlyc3RDaGlsZCksclYodGhpcykmJnJ0ZShsLmxpY2Vuc2VLZXksYyksdGhpcy5ndWlkPWBodF8ke2FOKCl9YCx0aGlzLmNvbHVtbkluZGV4TWFwcGVyPW5ldyB2Vix0aGlzLnJvd0luZGV4TWFwcGVyPW5ldyB2Vix0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygi''@;'; put 'put ''aW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix2dD0+e2YucnVuSG9va3MoImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHZ0KX0pLHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHZ0PT57Zi5ydW5Ib29rcygiYWZ0ZXJSb3dTZXF1ZW5jZUNo''@;'; put 'put ''YW5nZSIsdnQpfSksVz1uZXcgX1RlKGYpLCghdGhpcy5yb290RWxlbWVudC5pZHx8Imh0XyI9PT10aGlzLnJvb3RFbGVtZW50LmlkLnN1YnN0cmluZygwLDMpKSYmKHRoaXMucm9vdEVsZW1lbnQuaWQ9dGhpcy5ndWlkKTtjb25zdCBTdD12dD0+e2NvbnN0e3JvdzpPdCxjb2w6Y259PXZ0O3Jl''@;'; put 'put ''dHVybiBmLl9jcmVhdGVDZWxsQ29vcmRzKE90Pj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChPdCk6T3QsY24+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGNuKTpjbil9O2xldCBubj1uZXcgRURlKGV0''@;'; put 'put ''LHtyb3dJbmRleE1hcHBlcjooKT0+Zi5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjooKT0+Zi5jb2x1bW5JbmRleE1hcHBlcixjb3VudENvbHM6KCk9PmYuY291bnRDb2xzKCksY291bnRSb3dzOigpPT5mLmNvdW50Um93cygpLHByb3BUb0NvbDp2dD0+VC5wcm9wVG9Db2wodnQp''@;'; put 'put ''LGlzRWRpdG9yT3BlbmVkOigpPT4hIWYuZ2V0QWN0aXZlRWRpdG9yKCkmJmYuZ2V0QWN0aXZlRWRpdG9yKCkuaXNPcGVuZWQoKSxjb3VudENvbHNUcmFuc2xhdGVkOigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGNvdW50Um93c1RyYW5zbGF0ZWQ6KCk9PnRoaXMudmll''@;'; put 'put ''dy5jb3VudFJlbmRlcmFibGVSb3dzKCksZ2V0U2hvcnRjdXRNYW5hZ2VyOigpPT5mLmdldFNob3J0Y3V0TWFuYWdlcigpLGNyZWF0ZUNlbGxDb29yZHM6KHZ0LE90KT0+Zi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxPdCksY3JlYXRlQ2VsbFJhbmdlOih2dCxPdCxjbik9PmYuX2NyZWF0ZUNlbGxS''@;'; put 'put ''YW5nZSh2dCxPdCxjbiksdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOlN0LHJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkczp2dD0+e2NvbnN0e3JvdzpPdCxjb2w6Y259PXZ0O3JldHVybiBmLl9jcmVhdGVDZWxsQ29vcmRzKE90Pj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRl''@;'; put 'put ''cmFibGVJbmRleChPdCk6T3QsY24+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGNuKTpjbil9LGlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uOih2dCxPdCk9PmYuZ2V0Q2VsbE1ldGEodnQsT3QpLmRpc2FibGVWaXN1YWxTZWxlY3Rpb259KTt0aGlz''@;'; put 'put ''LnNlbGVjdGlvbj1ubjtjb25zdCBtbj12dD0+e2xldHtoaWRkZW5JbmRleGVzQ2hhbmdlZDpPdH09dnQ7T3QmJnRoaXMuc2VsZWN0aW9uLnJlZnJlc2goKX07ZnVuY3Rpb24gRW4odnQpe2NvbnN0IE90PU1uZSh2dCk7TkIoT3QpPyhmLnJ1bkhvb2tzKCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIs''@;'; put 'put ''T3QpLHl0Lmxhbmd1YWdlPU90LGYucnVuSG9va3MoImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLE90KSk6eG5lKHZ0KX1mdW5jdGlvbiBscih2dCxPdCl7Y29uc3QgY249ImNsYXNzTmFtZSI9PT12dD9mLnJvb3RFbGVtZW50OmYudGFibGU7aWYod2UpcGkoY24sT3QpO2Vsc2V7bGV0IGtuPVtdLFBu''@;'; put 'put ''PVtdO3l0W3Z0XSYmKGtuPUFycmF5LmlzQXJyYXkoeXRbdnRdKT95dFt2dF06b04oeXRbdnRdKSksT3QmJihQbj1BcnJheS5pc0FycmF5KE90KT9PdDpvTihPdCkpO2NvbnN0IEpuPWlOKGtuLFBuKSxPcj1pTihQbixrbik7Sm4ubGVuZ3RoJiZXbyhjbixKbiksT3IubGVuZ3RoJiZwaShjbixP''@;'; put 'put ''cil9eXRbdnRdPU90fWZ1bmN0aW9uIFZyKCl7bGV0IHZ0PSExO3JldHVybnt2YWxpZGF0b3JzSW5RdWV1ZTowLHZhbGlkOiEwLGFkZFZhbGlkYXRvclRvUXVldWUoKXt0aGlzLnZhbGlkYXRvcnNJblF1ZXVlKz0xLHZ0PSExfSxyZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKXt0aGlzLnZhbGlk''@;'; put 'put ''YXRvcnNJblF1ZXVlPXRoaXMudmFsaWRhdG9yc0luUXVldWUtMTwwPzA6dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xLHRoaXMuY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSxvblF1ZXVlRW1wdHkoKXt9LGNoZWNrSWZRdWV1ZUlzRW1wdHkoKXswPT09dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSYmITE9''@;'; put 'put ''PT12dCYmKHZ0PSEwLHRoaXMub25RdWV1ZUVtcHR5KHRoaXMudmFsaWQpKX19fWZ1bmN0aW9uIF9pKHZ0KXtjb25zdCBPdD12dC5yZXBsYWNlKCIsIiwiLiIpO3JldHVybiExPT09aXNOYU4ocGFyc2VGbG9hdChPdCkpP3BhcnNlRmxvYXQoT3QpOnZ0fWZ1bmN0aW9uIHVpKHZ0LE90LGNuKXtp''@;'; put 'put ''ZighdnQubGVuZ3RoKXJldHVybjtjb25zdCBrbj1mLmdldEFjdGl2ZUVkaXRvcigpLFBuPW5ldyBWcjtsZXQgSm49ITA7UG4ub25RdWV1ZUVtcHR5PU9yPT57a24mJkpuJiZrbi5jYW5jZWxDaGFuZ2VzKCksY24oT3IpfTtmb3IobGV0IE9yPXZ0Lmxlbmd0aC0xO09yPj0wO09yLS0pe2NvbnN0''@;'; put 'put ''W1JyLCRyLCxacl09dnRbT3JdLEhyPVQucHJvcFRvQ29sKCRyKSxSaT1mLmdldENlbGxNZXRhKFJyLEhyKTsibnVtZXJpYyI9PT1SaS50eXBlJiYic3RyaW5nIj09dHlwZW9mIFpyJiZMdGUoWnIpJiYodnRbT3JdWzNdPV9pKFpyKSksZi5nZXRDZWxsVmFsaWRhdG9yKFJpKSYmKFBuLmFkZFZh''@;'; put 'put ''bGlkYXRvclRvUXVldWUoKSxmLnZhbGlkYXRlQ2VsbCh2dFtPcl1bM10sUmksZnVuY3Rpb24oWG8sR28pe3JldHVybiBmdW5jdGlvbihKcyl7aWYoImJvb2xlYW4iIT10eXBlb2YgSnMpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4iKTtp''@;'; put 'put ''ZighMT09PUpzJiYhMT09PUdvLmFsbG93SW52YWxpZCl7Sm49ITEsdnQuc3BsaWNlKFhvLDEpLEdvLnZhbGlkPSEwO2NvbnN0IGdhPWYuZ2V0Q2VsbChHby52aXN1YWxSb3csR28udmlzdWFsQ29sKTtudWxsIT09Z2EmJldvKGdhLGV0LmludmFsaWRDZWxsQ2xhc3NOYW1lKX1Qbi5yZW1vdmVW''@;'; put 'put ''YWxpZGF0b3JGb3JtUXVldWUoKX19KE9yLFJpKSxPdCkpfVBuLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX1mdW5jdGlvbiBncih2dCxPdCl7bGV0IGNuPXZ0Lmxlbmd0aC0xO2lmKGNuPDApcmV0dXJuO2Zvcig7Y24+PTA7Y24tLSl7bGV0IFBuPSExO2lmKG51bGwhPT12dFtjbl0pe2lmKG51bGwh''@;'; put 'put ''PXZ0W2NuXVsyXXx8bnVsbCE9dnRbY25dWzNdKXtpZihldC5hbGxvd0luc2VydFJvdylmb3IoO3Z0W2NuXVswXT5mLmNvdW50Um93cygpLTE7KXtjb25zdHtkZWx0YTpKbn09VC5jcmVhdGVSb3codm9pZCAwLHZvaWQgMCx7c291cmNlOk90fSk7aWYoMD09PUpuKXtQbj0hMDticmVha319aWYo''@;'; put 'put ''ImFycmF5Ij09PWYuZGF0YVR5cGUmJighZXQuY29sdW1uc3x8MD09PWV0LmNvbHVtbnMubGVuZ3RoKSYmZXQuYWxsb3dJbnNlcnRDb2x1bW4pZm9yKDtULnByb3BUb0NvbCh2dFtjbl1bMV0pPmYuY291bnRDb2xzKCktMTspe2NvbnN0e2RlbHRhOkpufT1ULmNyZWF0ZUNvbCh2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLHtzb3VyY2U6T3R9KTtpZigwPT09Sm4pe1BuPSEwO2JyZWFrfX1Qbnx8VC5zZXQodnRbY25dWzBdLHZ0W2NuXVsxXSx2dFtjbl1bM10pfX1lbHNlIHZ0LnNwbGljZShjbiwxKX1mLmZvcmNlRnVsbFJlbmRlcj0hMCxpZS5hZGp1c3RSb3dzQW5kQ29scygpLGYucnVuSG9va3MoImJlZm9y''@;'; put 'put ''ZUNoYW5nZVJlbmRlciIsdnQsT3QpLGdlLmxvY2tFZGl0b3IoKSxmLl9yZWZyZXNoQm9yZGVycyhudWxsKSxnZS51bmxvY2tFZGl0b3IoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLHZ0LE90fHwiZWRpdCIpO2NvbnN0IGtuPWYuZ2V0QWN0''@;'; put 'put ''aXZlRWRpdG9yKCk7a24mJktpKGtuLnJlZnJlc2hWYWx1ZSkmJmtuLnJlZnJlc2hWYWx1ZSgpfWZ1bmN0aW9uIEVpKHZ0LE90LGNuKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh2dCk/dnQ6W1t2dCxPdCxjbl1dfWZ1bmN0aW9uIFVyKHZ0LE90KXtjb25zdCBjbj1mLmdldEFjdGl2ZUVkaXRvcigp''@;'; put 'put ''LGtuPWYucnVuSG9va3MoImJlZm9yZUNoYW5nZSIsdnQsT3R8fCJlZGl0IiksUG49dnQuZmlsdGVyKEpuPT5udWxsIT09Sm4pO3JldHVybiExPT09a258fDA9PT1Qbi5sZW5ndGg/KGNuJiZjbi5jYW5jZWxDaGFuZ2VzKCksW10pOlBufXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxI''@;'; put 'put ''b29rKCJjYWNoZVVwZGF0ZWQiLG1uKSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIixtbiksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0Iix2dD0+e3RoaXMucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQi''@;'; put 'put ''LHZ0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLHZ0PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLHZ0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VFbmQiLHZ0PT57''@;'; put 'put ''dGhpcy5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLHZ0KSx2dC5yb3c8MCYmKHZ0LnJvdz10aGlzLnZpZXcuX3d0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCkpLHZ0LmNvbDwwJiYodnQuY29sPXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9''@;'; put 'put ''KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0UmFuZ2VFbmQiLHZ0PT57Y29uc3QgT3Q9X2coITEpLGNuPXRoaXMuc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKSx7ZnJvbTprbix0bzpQbn09Y24uY3VycmVudCgpLEpuPWNuLnNpemUoKS0xO3RoaXMucnVuSG9va3Mo''@;'; put 'put ''ImFmdGVyU2VsZWN0aW9uIixrbi5yb3csa24uY29sLFBuLnJvdyxQbi5jb2wsT3QsSm4pLHRoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uQnlQcm9wIixrbi5yb3csZi5jb2xUb1Byb3Aoa24uY29sKSxQbi5yb3csZi5jb2xUb1Byb3AoUG4uY29sKSxPdCxKbik7Y29uc3QgT3I9dGhpcy5z''@;'; put 'put ''ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCksUnI9dGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7bGV0ICRyPSEwO2gmJigkcj0hMSksT3QuaXNUb3VjaGVkKCkmJigkcj0hT3QudmFsdWUpO2NvbnN0IFpyPXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJv''@;'; put 'put ''d0hlYWRlcigpLEhyPXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpOyExIT09JHImJihPcj9acj90aGlzLnZpZXcuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGYucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2dC5yb3cpKTpIciYm''@;'; put 'put ''dGhpcy52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2dC5jb2wpKTpSciYmIXRoaXMuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKT90aGlzLnZpZXcuc2Nyb2xsVmlld3BvcnQoU3QoUnIuZnJvbSkp''@;'; put 'put ''OnRoaXMudmlldy5zY3JvbGxWaWV3cG9ydChTdCh2dCkpKSxaciYmSHI/cGkodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pOlpyPyhXbyh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIikscGko''@;'; put 'put ''dGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpKTpIcj8oV28odGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpLHBpKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSk6V28odGhpcy5yb290RWxlbWVudCxbImh0X19zZWxl''@;'; put 'put ''Y3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLHRoaXMuX3JlZnJlc2hCb3JkZXJzKG51bGwpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIix2dD0+e2NvbnN0IE90PXZ0Lmxlbmd0aC0xLHtmcm9tOmNuLHRvOmtufT12''@;'; put 'put ''dFtPdF07dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmQiLGNuLnJvdyxjbi5jb2wsa24ucm93LGtuLmNvbCxPdCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLGNuLnJvdyxmLmNvbFRvUHJvcChjbi5jb2wpLGtuLnJvdyxmLmNvbFRvUHJvcChrbi5jb2wp''@;'; put 'put ''LE90KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dD0+e2NvbnN0IE90PXRoaXMucnVuSG9va3MoImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsdnQudmFsdWUpO3Z0LnZhbHVlJiYodnQudmFsdWU9T3QpfSksdGhpcy5zZWxlY3Rp''@;'; put 'put ''b24uYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1TdGFydCIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsdnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwodnQsT3QsY24pPT57dGhp''@;'; put 'put ''cy5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsdnQsT3QsY24pfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLHZ0PT57dGhpcy5ydW5Ib29rcygibW9kaWZ5VHJhbnNmb3JtRW5kIix2dCl9KSx0aGlzLnNlbGVjdGlv''@;'; put 'put ''bi5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwodnQsT3QsY24pPT57dGhpcy5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLHZ0LE90LGNuKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJEZXNlbGVjdCIsKCk9PntnZS5kZXN0cm95''@;'; put 'put ''RWRpdG9yKCksdGhpcy5fcmVmcmVzaEJvcmRlcnMoKSxXbyh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSksdGhpcy5ydW5Ib29rcygiYWZ0ZXJEZXNlbGVjdCIpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJp''@;'; put 'put ''bnNlcnRSb3dSZXF1aXJlIix2dD0+e3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLHZ0LDEsImF1dG8iKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsdnQ9Pnt0aGlzLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0Iix2dCwxLCJhdXRvIil9KSxp''@;'; put 'put ''ZT17YWx0ZXIodnQsT3Qpe3ZhciBjbixrbjtsZXQgUG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjEsSm49YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAsT3I9YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0''@;'; put 'put ''XTp2b2lkIDA7Y29uc3QgUnI9JHI9PntpZigwPT09JHIubGVuZ3RoKXJldHVybltdO2NvbnN0IFpyPVsuLi4kcl07cmV0dXJuIFpyLnNvcnQoKFJpLFhvKT0+e2xldFtHb109UmksW0pzXT1YbztyZXR1cm4gR289PT1Kcz8wOkdvPkpzPzE6LTF9KSxBbChaciwoUmksWG8pPT57bGV0W0dvLEpz''@;'; put 'put ''XT1Ybztjb25zdCBnYT1SaVtSaS5sZW5ndGgtMV0sW3VvLEF0XT1nYSxJaT11bytBdDtpZihHbzw9SWkpe2NvbnN0IFFzPU1hdGgubWF4KEpzLShJaS1HbyksMCk7Z2FbMV0rPVFzfWVsc2UgUmkucHVzaChbR28sSnNdKTtyZXR1cm4gUml9LFtaclswXV0pfTtzd2l0Y2godnQpe2Nhc2UiaW5z''@;'; put 'put ''ZXJ0X3Jvd19iZWxvdyI6Y2FzZSJpbnNlcnRfcm93X2Fib3ZlIjpjb25zdCAkcj1mLmNvdW50U291cmNlUm93cygpO2lmKGV0Lm1heFJvd3M9PT0kcilyZXR1cm47Y29uc3QgWnI9Imluc2VydF9yb3dfYmVsb3ciPT09dnQ/ImJlbG93IjoiYWJvdmUiO090PW51bGwhPT0oY249T3QpJiZ2b2lk''@;'; put 'put ''IDAhPT1jbj9jbjoiYmVsb3ciPT09WnI/JHI6MDtjb25zdHtkZWx0YTpIcixzdGFydFBoeXNpY2FsSW5kZXg6Uml9PVQuY3JlYXRlUm93KE90LFBuLHtzb3VyY2U6Sm4sbW9kZTpacn0pO2lmKEhyKXtjb25zdCBBdD1ubi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSxJaT1BdD8uZnJvbSxRcz1J''@;'; put 'put ''aT8ucm93LGxhPWYudG9WaXN1YWxSb3coUmkpO2lmKG5uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKWYuc2VsZWN0QWxsKCk7ZWxzZSBpZihLaShRcykmJlFzPj1sYSl7Y29uc3R7cm93OkZzLGNvbDplY309QXQudG87bGV0IENhPUlpLmNvbDtubi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmKENh''@;'; put 'put ''PS0xKSxubi5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCksbm4uc2V0UmFuZ2VTdGFydE9ubHkoZi5fY3JlYXRlQ2VsbENvb3JkcyhRcytIcixDYSksITApLG5uLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMoRnMrSHIsZWMpKX1lbHNlIGYuX3JlZnJlc2hCb3JkZXJzKCl9YnJlYWs7''@;'; put 'put ''Y2FzZSJpbnNlcnRfY29sX3N0YXJ0IjpjYXNlImluc2VydF9jb2xfZW5kIjpjb25zdCBYbz0iaW5zZXJ0X2NvbF9lbmQiPT09dnQ/ImVuZCI6InN0YXJ0IjtPdD1udWxsIT09KGtuPU90KSYmdm9pZCAwIT09a24/a246ImVuZCI9PT1Ybz9mLmNvdW50U291cmNlQ29scygpOjA7Y29uc3R7ZGVs''@;'; put 'put ''dGE6R28sc3RhcnRQaHlzaWNhbEluZGV4OkpzfT1ULmNyZWF0ZUNvbChPdCxQbix7c291cmNlOkpuLG1vZGU6WG99KTtpZihHbyl7aWYoQXJyYXkuaXNBcnJheShldC5jb2xIZWFkZXJzKSl7Y29uc3QgRnM9W2YudG9WaXN1YWxDb2x1bW4oSnMpLDBdO0ZzLmxlbmd0aCs9R28sQXJyYXkucHJv''@;'; put 'put ''dG90eXBlLnNwbGljZS5hcHBseShldC5jb2xIZWFkZXJzLEZzKX1jb25zdCBBdD1ubi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSxJaT1BdD8uZnJvbSxRcz1JaT8uY29sLGxhPWYudG9WaXN1YWxDb2x1bW4oSnMpO2lmKG5uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKWYuc2VsZWN0QWxsKCk7ZWxz''@;'; put 'put ''ZSBpZihLaShRcykmJlFzPj1sYSl7Y29uc3R7cm93OkZzLGNvbDplY309QXQudG87bGV0IENhPUlpLnJvdztubi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmKENhPS0xKSxubi5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCksbm4uc2V0UmFuZ2VTdGFydE9ubHkoZi5fY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhDYSxRcytHbyksITApLG5uLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMoRnMsZWMrR28pKX1lbHNlIGYuX3JlZnJlc2hCb3JkZXJzKCl9YnJlYWs7Y2FzZSJyZW1vdmVfcm93Ijpjb25zdCBnYT1BdD0+e2xldCBJaT0wO0luKEF0LFFzPT57bGV0W2xhLEZzXT1Rcztjb25z''@;'; put 'put ''dCBlYz1wYyhsYSk/Zi5jb3VudFJvd3MoKS0xOk1hdGgubWF4KGxhLUlpLDApO2lmKE51bWJlci5pc0ludGVnZXIobGEpJiYobGE9TWF0aC5tYXgobGEtSWksMCkpLCFULnJlbW92ZVJvdyhsYSxGcyxKbikpcmV0dXJuO2NvbnN0IFJoPWYuY291bnRSb3dzKCksUzE9ZXQuZml4ZWRSb3dzVG9w''@;'; put 'put ''O1MxPj1lYysxJiYoZXQuZml4ZWRSb3dzVG9wLT1NYXRoLm1pbihGcyxTMS1lYykpO2NvbnN0IERsPWV0LmZpeGVkUm93c0JvdHRvbTtEbCYmZWM+PVJoLURsJiYoZXQuZml4ZWRSb3dzQm90dG9tLT1NYXRoLm1pbihGcyxEbCkpLElpKz1Gc30pfTtBcnJheS5pc0FycmF5KE90KT9nYShScihP''@;'; put 'put ''dCkpOmdhKFtbT3QsUG5dXSksaWUuYWRqdXN0Um93c0FuZENvbHMoKSxmLl9yZWZyZXNoQm9yZGVycygpO2JyZWFrO2Nhc2UicmVtb3ZlX2NvbCI6Y29uc3QgdW89QXQ9PntsZXQgSWk9MDtJbihBdCxRcz0+e2xldFtsYSxGc109UXM7Y29uc3QgZWM9cGMobGEpP2YuY291bnRDb2xzKCktMTpN''@;'; put 'put ''YXRoLm1heChsYS1JaSwwKTtsZXQgQ2E9Zi50b1BoeXNpY2FsQ29sdW1uKGVjKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGxhKSYmKGxhPU1hdGgubWF4KGxhLUlpLDApKSwhVC5yZW1vdmVDb2wobGEsRnMsSm4pKXJldHVybjtjb25zdCBTMT1ldC5maXhlZENvbHVtbnNTdGFydDtTMT49ZWMrMSYm''@;'; put 'put ''KGV0LmZpeGVkQ29sdW1uc1N0YXJ0LT1NYXRoLm1pbihGcyxTMS1lYykpLEFycmF5LmlzQXJyYXkoZXQuY29sSGVhZGVycykmJih0eXBlb2YgQ2E+InUiJiYoQ2E9LTEpLGV0LmNvbEhlYWRlcnMuc3BsaWNlKENhLEZzKSksSWkrPUZzfSl9O0FycmF5LmlzQXJyYXkoT3QpP3VvKFJyKE90KSk6''@;'; put 'put ''dW8oW1tPdCxQbl1dKSxpZS5hZGp1c3RSb3dzQW5kQ29scygpLGYuX3JlZnJlc2hCb3JkZXJzKCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHN1Y2ggYWN0aW9uICIke3Z0fSJgKX1Pcnx8aWUuYWRqdXN0Um93c0FuZENvbHMoKX0sYWRqdXN0Um93c0FuZENv''@;'; put 'put ''bHMoKXtjb25zdCB2dD1ldC5taW5Sb3dzLE90PWV0Lm1pblNwYXJlUm93cyxjbj1ldC5taW5Db2xzLGtuPWV0Lm1pblNwYXJlQ29scztpZigwPT09Zi5jb3VudFJvd3MoKSYmMD09PWYuY291bnRDb2xzKCkmJm5uLmRlc2VsZWN0KCksdnQpe2NvbnN0IFBuPWYuY291bnRSb3dzKCk7UG48dnQm''@;'; put 'put ''JlQuY3JlYXRlUm93KFBuLHZ0LVBuLHtzb3VyY2U6ImF1dG8ifSl9aWYoT3Qpe2NvbnN0IFBuPWYuY291bnRFbXB0eVJvd3MoITApO2lmKFBuPE90KXtjb25zdCBPcj1NYXRoLm1pbihPdC1QbixldC5tYXhSb3dzLWYuY291bnRTb3VyY2VSb3dzKCkpO1QuY3JlYXRlUm93KGYuY291bnRSb3dz''@;'; put 'put ''KCksT3Ise3NvdXJjZToiYXV0byJ9KX19e2xldCBQbjsoY258fGtuKSYmKFBuPWYuY291bnRFbXB0eUNvbHMoITApKTtsZXQgSm49Zi5jb3VudENvbHMoKTtpZihjbiYmIWV0LmNvbHVtbnMmJkpuPGNuKXtjb25zdCBPcj1jbi1KbjtQbis9T3IsVC5jcmVhdGVDb2woSm4sT3Ise3NvdXJjZToi''@;'; put 'put ''YXV0byJ9KX1pZihrbiYmIWV0LmNvbHVtbnMmJiJhcnJheSI9PT1mLmRhdGFUeXBlJiZQbjxrbil7Sm49Zi5jb3VudENvbHMoKTtjb25zdCBScj1NYXRoLm1pbihrbi1QbixldC5tYXhDb2xzLUpuKTtULmNyZWF0ZUNvbChKbixScix7c291cmNlOiJhdXRvIn0pfX1pZihubi5pc1NlbGVjdGVk''@;'; put 'put ''KCkpe2NvbnN0IFBuPWYuY291bnRSb3dzKCksSm49Zi5jb3VudENvbHMoKTtJbihubi5zZWxlY3RlZFJhbmdlLE9yPT57bGV0IFJyPSExLCRyPU9yLmZyb20ucm93LFpyPU9yLmZyb20uY29sLEhyPU9yLnRvLnJvdyxSaT1Pci50by5jb2w7JHI+UG4tMT8oJHI9UG4tMSxScj0hMCxIcj4kciYm''@;'; put 'put ''KEhyPSRyKSk6SHI+UG4tMSYmKEhyPVBuLTEsUnI9ITAsJHI+SHImJigkcj1IcikpLFpyPkpuLTE/KFpyPUpuLTEsUnI9ITAsUmk+WnImJihSaT1acikpOlJpPkpuLTEmJihSaT1Kbi0xLFJyPSEwLFpyPlJpJiYoWnI9UmkpKSxSciYmZi5zZWxlY3RDZWxsKCRyLFpyLEhyLFJpKX0pfWYudmll''@;'; put 'put ''dyYmZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxwb3B1bGF0ZUZyb21BcnJheSh2dCxPdCxjbixrbixQbil7bGV0IEpuLE9yLFJyLCRyO2NvbnN0IFpyPVtdLEhyPXt9LFJpPVtdLFhvPXZ0LnJvdyxHbz12dC5jb2w7aWYoT3I9T3QubGVuZ3RoLDA9PT1PcilyZXR1cm4hMTtsZXQgSnM9''@;'; put 'put ''MCxnYT0wO3N3aXRjaCh1cyhjbikmJihKcz1jbi5jb2wtR28rMSxnYT1jbi5yb3ctWG8rMSksUG4pe2Nhc2Uic2hpZnRfZG93biI6Y29uc3QgdW89cWIoT3QpLEF0PXVvLmxlbmd0aCxJaT1NYXRoLm1heChBdCxKcyksUXM9Zi5nZXREYXRhKCkuc2xpY2UoWG8pLGxhPXFiKFFzKS5zbGljZShH''@;'; put 'put ''byxHbytJaSk7Zm9yKFJyPTA7UnI8SWk7UnIrPTEpaWYoUnI8QXQpe2ZvcihKbj0wLE9yPXVvW1JyXS5sZW5ndGg7Sm48Z2EtT3I7Sm4rPTEpdW9bUnJdLnB1c2godW9bUnJdW0puJU9yXSk7UmkucHVzaCh1b1tScl0uY29uY2F0KFJyPGxhLmxlbmd0aD9sYVtScl06bmV3IEFycmF5KFFzLmxl''@;'; put 'put ''bmd0aCkuZmlsbChudWxsKSkpfWVsc2UgUmkucHVzaCh1b1tSciVBdF0uY29uY2F0KGxhW1JyXSkpO2YucG9wdWxhdGVGcm9tQXJyYXkoWG8sR28scWIoUmkpKTticmVhaztjYXNlInNoaWZ0X3JpZ2h0Ijpjb25zdCBGcz1PdC5sZW5ndGgsZWM9TWF0aC5tYXgoRnMsZ2EpLENhPWYuZ2V0RGF0''@;'; put 'put ''YSgpLnNsaWNlKFhvKS5tYXAoJGM9PiRjLnNsaWNlKEdvKSk7Zm9yKEpuPTA7Sm48ZWM7Sm4rPTEpaWYoSm48RnMpe2ZvcihScj0wLCRyPU90W0puXS5sZW5ndGg7UnI8SnMtJHI7UnIrPTEpT3RbSm5dLnB1c2goT3RbSm5dW1JyJSRyXSk7aWYoSm48Q2EubGVuZ3RoKWZvcihsZXQgJGM9MDsk''@;'; put 'put ''YzxDYVtKbl0ubGVuZ3RoOyRjKz0xKU90W0puXS5wdXNoKENhW0puXVskY10pO2Vsc2UgT3RbSm5dLnB1c2goLi4ubmV3IEFycmF5KENhWzBdLmxlbmd0aCkuZmlsbChudWxsKSl9ZWxzZSBPdC5wdXNoKE90W0puJU9yXS5zbGljZSgwLGVjKS5jb25jYXQoQ2FbSm5dKSk7Zi5wb3B1bGF0ZUZy''@;'; put 'put ''b21BcnJheShYbyxHbyxPdCk7YnJlYWs7ZGVmYXVsdDpIci5yb3c9dnQucm93LEhyLmNvbD12dC5jb2w7bGV0IHgyLFJoPTAsUzE9MCxEbD0hMDtjb25zdCB1ND1mdW5jdGlvbihTZCl7bGV0IEp1PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx''@;'; put 'put ''XTpudWxsO2NvbnN0IE0xPU90W1NkJU90Lmxlbmd0aF07cmV0dXJuIG51bGwhPT1KdT9NMVtKdSVNMS5sZW5ndGhdOk0xfSxPaD1PdC5sZW5ndGgsQ2Q9Y24/Y24ucm93LXZ0LnJvdysxOjA7Zm9yKE9yPWNuP0NkOk1hdGgubWF4KE9oLENkKSxKbj0wO0puPE9yJiYhKGNuJiZIci5yb3c+Y24u''@;'; put 'put ''cm93JiZDZD5PaHx8IWV0LmFsbG93SW5zZXJ0Um93JiZIci5yb3c+Zi5jb3VudFJvd3MoKS0xfHxIci5yb3c+PWV0Lm1heFJvd3MpO0puKyspe2NvbnN0ICRjPUpuLVJoLFNkPXU0KCRjKS5sZW5ndGgsSnU9Y24/Y24uY29sLXZ0LmNvbCsxOjA7aWYoJHI9Y24/SnU6TWF0aC5tYXgoU2QsSnUp''@;'; put 'put ''LEhyLmNvbD12dC5jb2wseDI9Zi5nZXRDZWxsTWV0YShIci5yb3csSHIuY29sKSwiQ29weVBhc3RlLnBhc3RlIiE9PWtuJiYiQXV0b2ZpbGwuZmlsbCIhPT1rbnx8IXgyLnNraXBSb3dPblBhc3RlKXtmb3IoUzE9MCxScj0wO1JyPCRyJiYhKGNuJiZIci5jb2w+Y24uY29sJiZKdT5TZHx8IWV0''@;'; put 'put ''LmFsbG93SW5zZXJ0Q29sdW1uJiZIci5jb2w+Zi5jb3VudENvbHMoKS0xfHxIci5jb2w+PWV0Lm1heENvbHMpO1JyKyspe2lmKHgyPWYuZ2V0Q2VsbE1ldGEoSHIucm93LEhyLmNvbCksKCJDb3B5UGFzdGUucGFzdGUiPT09a258fCJBdXRvZmlsbC5maWxsIj09PWtuKSYmeDIuc2tpcENvbHVt''@;'; put 'put ''bk9uUGFzdGUpe1MxKz0xLEhyLmNvbCs9MSwkcis9MTtjb250aW51ZX1pZih4Mi5yZWFkT25seSYmIlVuZG9SZWRvLnVuZG8iIT09a24pe0hyLmNvbCs9MTtjb250aW51ZX1sZXQgTXU9dTQoJGMsUnItUzEpLGF1PWYuZ2V0RGF0YUF0Q2VsbChIci5yb3csSHIuY29sKTtpZihudWxsIT09TXUm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgTXUpaWYoQXJyYXkuaXNBcnJheShNdSkmJm51bGw9PT1hdSYmKGF1PVtdKSxudWxsPT09YXV8fCJvYmplY3QiIT10eXBlb2YgYXUpRGw9ITE7ZWxzZXtjb25zdCB4MT1yNyhBcnJheS5pc0FycmF5KGF1KT9hdTphdVswXXx8YXUpLEUyPXI3KEFycmF5LmlzQXJy''@;'; put 'put ''YXkoTXUpP011Ok11WzBdfHxNdSk7YWsoeDEsRTIpfHxBcnJheS5pc0FycmF5KHgxKSYmQXJyYXkuaXNBcnJheShFMik/TXU9eXUoTXUpOkRsPSExfWVsc2UgbnVsbCE9PWF1JiYib2JqZWN0Ij09dHlwZW9mIGF1JiYoRGw9ITEpO0RsJiZaci5wdXNoKFtIci5yb3csSHIuY29sLE11XSksRGw9''@;'; put 'put ''ITAsSHIuY29sKz0xfUhyLnJvdys9MX1lbHNlIFJoKz0xLEhyLnJvdys9MSxPcis9MX1mLnNldERhdGFBdENlbGwoWnIsbnVsbCxudWxsLGtufHwicG9wdWxhdGVGcm9tQXJyYXkiKX19fSx0aGlzLmluaXQ9ZnVuY3Rpb24oKXtXLnNldERhdGEoZXQuZGF0YSksZi5ydW5Ib29rcygiYmVmb3Jl''@;'; put 'put ''SW5pdCIpLChtMigpfHx5TigpKSYmcGkoZi5yb290RWxlbWVudCwibW9iaWxlIiksdGhpcy51cGRhdGVTZXR0aW5ncyhldCwhMCksdGhpcy52aWV3PW5ldyBoVGUodGhpcyksZ2U9Y2tlLmdldEluc3RhbmNlKGYsZXQsbm4pLGYucnVuSG9va3MoImluaXQiKSx0aGlzLmZvcmNlRnVsbFJlbmRl''@;'; put 'put ''cj0hMCx0aGlzLnZpZXcucmVuZGVyKCksd2UmJm51bGw9PT1mLnJvb3RFbGVtZW50Lm9mZnNldFBhcmVudCYmcHRlKGYucm9vdEVsZW1lbnQsKCk9PntmLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpLGYucmVuZGVyKCksZi52aWV3LmFkanVzdEVsZW1lbnRz''@;'; put 'put ''U2l6ZSgpfSksIm9iamVjdCI9PXR5cGVvZiB3ZSYmKGYucnVuSG9va3MoImFmdGVyQ2hhbmdlIix3ZVswXSx3ZVsxXSksd2U9ITEpLGYucnVuSG9va3MoImFmdGVySW5pdCIpfSx0aGlzLl9jcmVhdGVDZWxsQ29vcmRzPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKHZ0LE90KX0sdGhpcy5fY3JlYXRlQ2VsbFJhbmdlPWZ1bmN0aW9uKHZ0LE90LGNuKXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVDZWxsUmFuZ2UodnQsT3QsY24pfSx0aGlzLnZhbGlkYXRlQ2VsbD1mdW5jdGlvbih2dCxPdCxjbixrbil7bGV0IFBuPWYuZ2V0Q2VsbFZhbGlk''@;'; put 'put ''YXRvcihPdCk7ZnVuY3Rpb24gSm4oT3Ipe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiYhYXJndW1lbnRzWzFdfHwhMD09PU90LmhpZGRlbilyZXR1cm4gdm9pZCBjbihPcik7Y29uc3QgJHI9T3QudmlzdWFsQ29sLFpyPU90LnZpc3VhbFJvdyxIcj1mLmdl''@;'; put 'put ''dENlbGwoWnIsJHIsITApO2lmKEhyJiYiVEgiIT09SHIubm9kZU5hbWUpe2NvbnN0IFJpPWYucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaciksWG89Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KCRyKTtmLnZpZXcu''@;'; put 'put ''X3d0LmdldFNldHRpbmcoImNlbGxSZW5kZXJlciIsUmksWG8sSHIpfWNuKE9yKX12YXIgT3I7SmVlKFBuKSYmKE9yPVBuLFBuPWZ1bmN0aW9uKFJyLCRyKXskcihPci50ZXN0KFJyKSl9KSxSYShQbik/KHZ0PWYucnVuSG9va3MoImJlZm9yZVZhbGlkYXRlIix2dCxPdC52aXN1YWxSb3csT3Qu''@;'; put 'put ''cHJvcCxrbiksZi5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9PntQbi5jYWxsKE90LHZ0LE9yPT57ZiYmKE9yPWYucnVuSG9va3MoImFmdGVyVmFsaWRhdGUiLE9yLHZ0LE90LnZpc3VhbFJvdyxPdC5wcm9wLGtuKSxPdC52YWxpZD1PcixKbihPciksZi5ydW5Ib29rcygicG9zdEFmdGVyVmFsaWRh''@;'; put 'put ''dGUiLE9yLHZ0LE90LnZpc3VhbFJvdyxPdC5wcm9wLGtuKSl9KX0pKTpmLl9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e090LnZhbGlkPSEwLEpuKE90LnZhbGlkLCExKX0pfSx0aGlzLnNldERhdGFBdENlbGw9ZnVuY3Rpb24odnQsT3QsY24sa24pe2NvbnN0IFBuPUVpKHZ0LE90LGNuKSxKbj1b''@;'; put 'put ''XTtsZXQgUnIsJHIsWnIsT3I9a247Zm9yKFJyPTAsJHI9UG4ubGVuZ3RoO1JyPCRyO1JyKyspe2lmKCJvYmplY3QiIT10eXBlb2YgUG5bUnJdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBudW1iZXIgb3IgY2hhbmdlcyBhcnJheSBvZiBhcnJh''@;'; put 'put ''eXMgYXMgaXRzIGZpcnN0IHBhcmFtZXRlciIpO2lmKCJudW1iZXIiIT10eXBlb2YgUG5bUnJdWzFdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBhbmQgY29sdW1uIG51bWJlciBhcyBpdHMgcGFyYW1ldGVycy4gSWYgeW91IHdhbnQgdG8gdXNl''@;'; put 'put ''IG9iamVjdCBwcm9wZXJ0eSBuYW1lLCB1c2UgbWV0aG9kIGBzZXREYXRhQXRSb3dQcm9wYCIpO1pyPVBuW1JyXVsxXT49dGhpcy5jb3VudENvbHMoKT9QbltScl1bMV06VC5jb2xUb1Byb3AoUG5bUnJdWzFdKSxKbi5wdXNoKFtQbltScl1bMF0sWnIsVy5nZXRBdENlbGwodGhpcy50b1BoeXNp''@;'; put 'put ''Y2FsUm93KFBuW1JyXVswXSksUG5bUnJdWzFdKSxQbltScl1bMl1dKX0hT3ImJiJvYmplY3QiPT10eXBlb2YgdnQmJihPcj1PdCk7Y29uc3QgSHI9VXIoSm4sa24pO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Q2VsbCIsSHIsT3IpLHVpKEhyLE9yLCgpPT57Z3IoSHIsT3IpfSl9LHRoaXMu''@;'; put 'put ''c2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih2dCxPdCxjbixrbil7Y29uc3QgUG49RWkodnQsT3QsY24pLEpuPVtdO2xldCBSciwkcixPcj1rbjtmb3IoUnI9MCwkcj1Qbi5sZW5ndGg7UnI8JHI7UnIrKylKbi5wdXNoKFtQbltScl1bMF0sUG5bUnJdWzFdLFcuZ2V0QXRDZWxsKHRoaXMudG9Q''@;'; put 'put ''aHlzaWNhbFJvdyhQbltScl1bMF0pLFBuW1JyXVsxXSksUG5bUnJdWzJdXSk7IU9yJiYib2JqZWN0Ij09dHlwZW9mIHZ0JiYoT3I9T3QpO2NvbnN0IFpyPVVyKEpuLGtuKTtmLnJ1bkhvb2tzKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLFpyLE9yKSx1aShacixPciwoKT0+e2dyKFpyLE9yKX0p''@;'; put 'put ''fSx0aGlzLmxpc3Rlbj1mdW5jdGlvbigpe2YmJiFmLmlzTGlzdGVuaW5nKCkmJihZQj1mLmd1aWQsZi5ydW5Ib29rcygiYWZ0ZXJMaXN0ZW4iKSl9LHRoaXMudW5saXN0ZW49ZnVuY3Rpb24oKXt0aGlzLmlzTGlzdGVuaW5nKCkmJihZQj1udWxsLGYucnVuSG9va3MoImFmdGVyVW5saXN0ZW4i''@;'; put 'put ''KSl9LHRoaXMuaXNMaXN0ZW5pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gWUI9PT1mLmd1aWR9LHRoaXMuZGVzdHJveUVkaXRvcj1mdW5jdGlvbigpe2YuX3JlZnJlc2hCb3JkZXJzKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sIShhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9LHRoaXMucG9wdWxhdGVGcm9tQXJyYXk9ZnVuY3Rpb24odnQsT3QsY24sa24sUG4sSm4sT3Ipe2lmKCJvYmplY3QiIT10eXBlb2YgY258fCJvYmplY3QiIT10eXBlb2YgY25bMF0pdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJwb3B1bGF0ZUZyb21BcnJheSBwYXJhbWV0ZXIgYGlucHV0YCBtdXN0IGJlIGFuIGFycmF5IG9mIGFycmF5cyIpO2NvbnN0IFJyPSJudW1iZXIiPT10eXBlb2Yga24/Zi5fY3JlYXRlQ2VsbENvb3JkcyhrbixQbik6bnVsbDtyZXR1cm4gaWUucG9wdWxhdGVGcm9tQXJyYXkoZi5fY3Jl''@;'; put 'put ''YXRlQ2VsbENvb3Jkcyh2dCxPdCksY24sUnIsSm4sT3IpfSx0aGlzLnNwbGljZUNvbD1mdW5jdGlvbih2dCxPdCxjbil7Zm9yKHZhciBrbj1hcmd1bWVudHMubGVuZ3RoLFBuPW5ldyBBcnJheShrbj4zP2tuLTM6MCksSm49MztKbjxrbjtKbisrKVBuW0puLTNdPWFyZ3VtZW50c1tKbl07cmV0''@;'; put 'put ''dXJuIFQuc3BsaWNlQ29sKHZ0LE90LGNuLC4uLlBuKX0sdGhpcy5zcGxpY2VSb3c9ZnVuY3Rpb24odnQsT3QsY24pe2Zvcih2YXIga249YXJndW1lbnRzLmxlbmd0aCxQbj1uZXcgQXJyYXkoa24+Mz9rbi0zOjApLEpuPTM7Sm48a247Sm4rKylQbltKbi0zXT1hcmd1bWVudHNbSm5dO3JldHVy''@;'; put 'put ''biBULnNwbGljZVJvdyh2dCxPdCxjbiwuLi5Qbil9LHRoaXMuZ2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oKXtpZihubi5pc1NlbGVjdGVkKCkpcmV0dXJuIGNzKG5uLmdldFNlbGVjdGVkUmFuZ2UoKSx2dD0+e2xldHtmcm9tOk90LHRvOmNufT12dDtyZXR1cm5bT3Qucm93LE90LmNvbCxjbi5yb3cs''@;'; put 'put ''Y24uY29sXX0pfSx0aGlzLmdldFNlbGVjdGVkTGFzdD1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgT3Q7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE90PXZ0W3Z0Lmxlbmd0aC0xXSksT3R9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZT1mdW5jdGlvbigpe2lmKG5u''@;'; put 'put ''LmlzU2VsZWN0ZWQoKSlyZXR1cm4gQXJyYXkuZnJvbShubi5nZXRTZWxlY3RlZFJhbmdlKCkpfSx0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IE90O3JldHVybiB2dCYmdnQubGVuZ3RoPjAmJihPdD12dFt2''@;'; put 'put ''dC5sZW5ndGgtMV0pLE90fSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscz1mdW5jdGlvbih2dCl7aWYoIW5uLmlzU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybjtjb25zdCBPdD1bXTtJbihubi5nZXRTZWxlY3RlZFJhbmdlKCksY249''@;'; put 'put ''Pntjb25zdCBrbj1jbi5nZXRUb3BTdGFydENvcm5lcigpLFBuPWNuLmdldEJvdHRvbUVuZENvcm5lcigpO3ZvKGtuLnJvdyxQbi5yb3csSm49Pnt2byhrbi5jb2wsUG4uY29sLE9yPT57dGhpcy5nZXRDZWxsTWV0YShKbixPcikucmVhZE9ubHl8fE90LnB1c2goW0puLE9yLG51bGxdKX0pfSl9''@;'; put 'put ''KSxPdC5sZW5ndGg+MCYmdGhpcy5zZXREYXRhQXRDZWxsKE90LHZ0KX0sdGhpcy5pc1JlbmRlclN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJTdXNwZW5kZWRD''@;'; put 'put ''b3VudGVyKz0xfSx0aGlzLnJlc3VtZVJlbmRlcj1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlci0xO3RoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heCh2dCwwKSwhdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpJiZ2dD09PXRoaXMucmVuZGVy''@;'; put 'put ''U3VzcGVuZGVkQ291bnRlciYmKHRoaXMucmVuZGVyQ2FsbD90aGlzLnJlbmRlcigpOnRoaXMuX3JlZnJlc2hCb3JkZXJzKG51bGwpKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnZpZXcmJih0aGlzLnJlbmRlckNhbGw9ITAsdGhpcy5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5pc1Jl''@;'; put 'put ''bmRlclN1c3BlbmRlZCgpfHwoZ2UubG9ja0VkaXRvcigpLHRoaXMuX3JlZnJlc2hCb3JkZXJzKG51bGwpLGdlLnVubG9ja0VkaXRvcigpKSl9LHRoaXMuYmF0Y2hSZW5kZXI9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpO2NvbnN0IE90PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1l''@;'; put 'put ''UmVuZGVyKCksT3R9LHRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZEV4ZWN1dGlvbj1mdW5jdGlvbigpe3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcis9MSx0aGlzLmNv''@;'; put 'put ''bHVtbkluZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpfSx0aGlzLnJlc3VtZUV4ZWN1dGlvbj1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1l''@;'; put 'put ''bnRzWzBdO2NvbnN0IE90PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlci0xO3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heChPdCwwKSwoIXRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQoKSYmT3Q9PT10aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXJ8fHZ0''@;'; put 'put ''KSYmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpKX0sdGhpcy5iYXRjaEV4ZWN1dGlvbj1mdW5jdGlvbih2dCl7bGV0IE90PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzFdJiZhcmd1bWVudHNbMV07dGhpcy5zdXNwZW5kRXhlY3V0aW9uKCk7Y29uc3QgY249dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVFeGVjdXRpb24oT3QpLGNufSx0aGlzLmJhdGNoPWZ1bmN0aW9uKHZ0KXt0aGlzLnN1c3BlbmRSZW5kZXIoKSx0aGlzLnN1c3BlbmRFeGVjdXRpb24oKTtjb25z''@;'; put 'put ''dCBPdD12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbigpLHRoaXMucmVzdW1lUmVuZGVyKCksT3R9LHRoaXMucmVmcmVzaERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtpZighZi52aWV3KXJldHVybjtjb25zdHt3aWR0aDp2dCxoZWlnaHQ6T3R9PWYudmlldy5nZXRMYXN0U2l6ZSgpLHt3''@;'; put 'put ''aWR0aDpjbixoZWlnaHQ6a259PWYucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUG49Y24hPT12dHx8a24hPT1PdDshMSE9PWYucnVuSG9va3MoImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6dnQsaGVpZ2h0Ok90fSx7d2lkdGg6Y24saGVpZ2h0OmtufSxQbikm''@;'; put 'put ''JigoUG58fGYudmlldy5fd3Qud3RPdmVybGF5cy5zY3JvbGxhYmxlRWxlbWVudD09PWYucm9vdFdpbmRvdykmJihmLnZpZXcuc2V0TGFzdFNpemUoY24sa24pLGYucmVuZGVyKCkpLGYucnVuSG9va3MoImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDp2dCxoZWlnaHQ6T3R9LHt3aWR0''@;'; put 'put ''aDpjbixoZWlnaHQ6a259LFBuKSl9LHRoaXMudXBkYXRlRGF0YT1mdW5jdGlvbih2dCxPdCl7am5lKHZ0LGNuPT57VD1jbn0sY249PntUPWNuLGYuY29sdW1uSW5kZXhNYXBwZXIuZml0VG9MZW5ndGgodGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksZi5yb3dJbmRleE1hcHBlci5maXRU''@;'; put 'put ''b0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93cygpKSxpZS5hZGp1c3RSb3dzQW5kQ29scygpfSx7aG90SW5zdGFuY2U6ZixkYXRhTWFwOlQsZGF0YVNvdXJjZTpXLGludGVybmFsU291cmNlOiJ1cGRhdGVEYXRhIixzb3VyY2U6T3QsbWV0YU1hbmFnZXI6b3QsZmlyc3RSdW46d2V9KX0sdGhp''@;'; put 'put ''cy5sb2FkRGF0YT1mdW5jdGlvbih2dCxPdCl7am5lKHZ0LGNuPT57VD1jbn0sKCk9PntvdC5jbGVhckNlbGxzQ2FjaGUoKSxmLmluaXRJbmRleE1hcHBlcnMoKSxpZS5hZGp1c3RSb3dzQW5kQ29scygpLHdlJiYod2U9W251bGwsImxvYWREYXRhIl0pfSx7aG90SW5zdGFuY2U6ZixkYXRhTWFw''@;'; put 'put ''OlQsZGF0YVNvdXJjZTpXLGludGVybmFsU291cmNlOiJsb2FkRGF0YSIsc291cmNlOk90LG1ldGFNYW5hZ2VyOm90LGZpcnN0UnVuOndlfSl9LHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9ZXQuY29sdW1ucztsZXQgT3Q9MDtpZihBcnJheS5pc0FycmF5''@;'; put 'put ''KHZ0KSlPdD12dC5sZW5ndGg7ZWxzZSBpZihSYSh2dCkpaWYoImFycmF5Ij09PWYuZGF0YVR5cGUpe2NvbnN0IGNuPXRoaXMuY291bnRTb3VyY2VDb2xzKCk7Zm9yKGxldCBrbj0wO2tuPGNuO2tuKz0xKXZ0KGtuKSYmKE90Kz0xKX1lbHNlKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ImZ1bmN0''@;'; put 'put ''aW9uIj09PWYuZGF0YVR5cGUpJiYoT3Q9VC5jb2xUb1Byb3BDYWNoZS5sZW5ndGgpO2Vsc2UgaWYoS2koZXQuZGF0YVNjaGVtYSkpe2NvbnN0IGNuPVQuZ2V0U2NoZW1hKCk7T3Q9QXJyYXkuaXNBcnJheShjbik/Y24ubGVuZ3RoOmNrKGNuKX1lbHNlIE90PXRoaXMuY291bnRTb3VyY2VDb2xz''@;'; put 'put ''KCk7cmV0dXJuIE90fSx0aGlzLmluaXRJbmRleE1hcHBlcnM9ZnVuY3Rpb24oKXt0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSx0aGlzLnJvd0luZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93''@;'; put 'put ''cygpKX0sdGhpcy5nZXREYXRhPWZ1bmN0aW9uKHZ0LE90LGNuLGtuKXtyZXR1cm4gTGEodnQpP1QuZ2V0QWxsKCk6VC5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGNuLGtuKSxULkRFU1RJTkFUSU9OX1JFTkRFUkVSKX0sdGhpcy5nZXRD''@;'; put 'put ''b3B5YWJsZVRleHQ9ZnVuY3Rpb24odnQsT3QsY24sa24pe3JldHVybiBULmdldENvcHlhYmxlVGV4dChmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGNuLGtuKSl9LHRoaXMuZ2V0Q29weWFibGVEYXRhPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVC5nZXRD''@;'; put 'put ''b3B5YWJsZSh2dCxULmNvbFRvUHJvcChPdCkpfSx0aGlzLmdldFNjaGVtYT1mdW5jdGlvbigpe3JldHVybiBULmdldFNjaGVtYSgpfSx0aGlzLnVwZGF0ZVNldHRpbmdzPWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3Vt''@;'; put 'put ''ZW50c1sxXTtjb25zdCBjbj0od2U/Zi5sb2FkRGF0YTpmLnVwZGF0ZURhdGEpLmJpbmQodGhpcyk7bGV0IFBuLEpuLGtuPSExO2lmKEtpKHZ0LnJvd3MpKXRocm93IG5ldyBFcnJvcignVGhlICJyb3dzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0''@;'; put 'put ''Um93cywgbWluUm93cyBvciBtYXhSb3dzPycpO2lmKEtpKHZ0LmNvbHMpKXRocm93IG5ldyBFcnJvcignVGhlICJjb2xzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0Q29scywgbWluQ29scyBvciBtYXhDb2xzPycpO2lmKEtpKHZ0LmdhbnR0Q2hh''@;'; put 'put ''cnQpKXRocm93IG5ldyBFcnJvcignU2luY2UgOC4wLjAgdGhlICJnYW50dENoYXJ0IiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuJyk7Zm9yKFBuIGluIHZ0KSJkYXRhIj09PVBufHwoImxhbmd1YWdlIj09PVBuP0VuKHZ0Lmxhbmd1YWdlKToiY2xhc3NOYW1lIj09PVBuP2xyKCJj''@;'; put 'put ''bGFzc05hbWUiLHZ0LmNsYXNzTmFtZSk6InRhYmxlQ2xhc3NOYW1lIj09PVBuJiZmLnRhYmxlPyhscigidGFibGVDbGFzc05hbWUiLHZ0LnRhYmxlQ2xhc3NOYW1lKSxmLnZpZXcuX3d0Lnd0T3ZlcmxheXMuc3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKSk6c28uZ2V0U2luZ2xldG9uKCku''@;'; put 'put ''aXNSZWdpc3RlcmVkKFBuKXx8c28uZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKFBuKT8oUmEodnRbUG5dKXx8QXJyYXkuaXNBcnJheSh2dFtQbl0pKSYmKHZ0W1BuXS5pbml0aWFsSG9vaz0hMCxmLmFkZEhvb2soUG4sdnRbUG5dKSk6IU90JiZibCh2dCxQbikmJih5dFtQbl09dnRbUG5d''@;'; put 'put ''KSk7dm9pZCAwPT09dnQuZGF0YSYmdm9pZCAwPT09ZXQuZGF0YT9jbihudWxsLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmRhdGE/Y24odnQuZGF0YSwidXBkYXRlU2V0dGluZ3MiKTp2b2lkIDAhPT12dC5jb2x1bW5zJiYoVC5jcmVhdGVNYXAoKSxmLmluaXRJbmRleE1hcHBlcnMo''@;'; put 'put ''KSk7Y29uc3QgT3I9Zi5jb3VudENvbHMoKSxScj1ldC5jb2x1bW5zO2lmKFJyJiZSYShScikmJihrbj0hMCksKHZvaWQgMCE9PXZ0LmNlbGx8fHZvaWQgMCE9PXZ0LmNlbGxzfHx2b2lkIDAhPT12dC5jb2x1bW5zKSYmb3QuY2xlYXJDYWNoZSgpLE9yPjApZm9yKFBuPTAsSm49MDtQbjxPcjtQ''@;'; put 'put ''bisrKXtpZihScil7Y29uc3QgSHI9a24/UnIoUG4pOlJyW0puXTtIciYmb3QudXBkYXRlQ29sdW1uTWV0YShKbixIcil9Sm4rPTF9S2kodnQuY2VsbCkmJmRzKHZ0LmNlbGwsSHI9PntmLnNldENlbGxNZXRhT2JqZWN0KEhyLnJvdyxIci5jb2wsSHIpfSksZi5ydW5Ib29rcygiYWZ0ZXJDZWxs''@;'; put 'put ''TWV0YVJlc2V0Iik7bGV0ICRyPWYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0OyIiIT09JHImJigkcj1wYXJzZUludChmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodCwxMCkpO2xldCBacj12dC5oZWlnaHQ7aWYoUmEoWnIpJiYoWnI9WnIoKSksT3QmJmYucm9vdEVsZW1lbnQuZ2V0QXR0cmli''@;'; put 'put ''dXRlKCJzdHlsZSIpJiZmLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1pbml0aWFsc3R5bGUiLGYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxudWxsPT09WnIpe2NvbnN0IEhyPWYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIp''@;'; put 'put ''O0hyJiYoSHIuaW5kZXhPZigiaGVpZ2h0Iik+LTF8fEhyLmluZGV4T2YoIm92ZXJmbG93Iik+LTEpP2Yucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsSHIpOihmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD0iIixmLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSIiKX1lbHNl''@;'; put 'put ''IHZvaWQgMCE9PVpyJiYoZi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ9aXNOYU4oWnIpP2Ake1pyfWA6YCR7WnJ9cHhgLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2lmKHR5cGVvZiB2dC53aWR0aDwidSIpe2xldCBIcj12dC53aWR0aDtSYShIcikmJihIcj1Icigp''@;'; put 'put ''KSxmLnJvb3RFbGVtZW50LnN0eWxlLndpZHRoPWlzTmFOKEhyKT9gJHtIcn1gOmAke0hyfXB4YH1PdHx8KGYudmlldyYmKGYudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKSxmLnZpZXcuX3d0LmV4cG9ydFNldHRpbmdzQXNDbGFzc05h''@;'; put 'put ''bWVzKCkpLGYucnVuSG9va3MoImFmdGVyVXBkYXRlU2V0dGluZ3MiLHZ0KSksaWUuYWRqdXN0Um93c0FuZENvbHMoKSxmLnZpZXcmJiF3ZSYmKGYuZm9yY2VGdWxsUmVuZGVyPSEwLGdlLmxvY2tFZGl0b3IoKSxmLl9yZWZyZXNoQm9yZGVycyhudWxsKSxmLnZpZXcuX3d0Lnd0T3ZlcmxheXMu''@;'; put 'put ''YWRqdXN0RWxlbWVudHNTaXplKCksZ2UudW5sb2NrRWRpdG9yKCkpLCFPdCYmZi52aWV3JiYoIiI9PT0kcnx8IiI9PT1acnx8dm9pZCAwPT09WnIpJiYkciE9PVpyJiZmLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpfSx0aGlzLmdldFZhbHVlPWZ1''@;'; put 'put ''bmN0aW9uKCl7Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZExhc3QoKTtpZihldC5nZXRWYWx1ZSl7aWYoUmEoZXQuZ2V0VmFsdWUpKXJldHVybiBldC5nZXRWYWx1ZS5jYWxsKGYpO2lmKHZ0KXJldHVybiBmLmdldERhdGEoKVt2dFswXVswXV1bZXQuZ2V0VmFsdWVdfWVsc2UgaWYodnQpcmV0dXJu''@;'; put 'put ''IGYuZ2V0RGF0YUF0Q2VsbCh2dFswXSx2dFsxXSl9LHRoaXMuZ2V0U2V0dGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gZXR9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdEFsbCgpLHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzKCl9LHRoaXMuYWx0ZXI9ZnVuY3Rpb24odnQsT3QsY24s''@;'; put 'put ''a24sUG4pe2llLmFsdGVyKHZ0LE90LGNuLGtuLFBuKX0sdGhpcy5nZXRDZWxsPWZ1bmN0aW9uKHZ0LE90KXtsZXQgY249YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxrbj1PdCxQbj12dDtpZihPdD49MCl7aWYodGhpcy5jb2x1bW5JbmRl''@;'; put 'put ''eE1hcHBlci5pc0hpZGRlbih0aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpKSlyZXR1cm4gbnVsbDtrbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoT3QpfWlmKHZ0Pj0wKXtpZih0aGlzLnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9Q''@;'; put 'put ''aHlzaWNhbFJvdyh2dCkpKXJldHVybiBudWxsO1BuPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2dCl9cmV0dXJuIG51bGw9PT1Qbnx8bnVsbD09PWtuP251bGw6Zi52aWV3LmdldENlbGxBdENvb3JkcyhmLl9jcmVhdGVDZWxsQ29vcmRzKFBuLGtu''@;'; put 'put ''KSxjbil9LHRoaXMuZ2V0Q29vcmRzPWZ1bmN0aW9uKHZ0KXtjb25zdCBPdD10aGlzLnZpZXcuX3d0Lnd0VGFibGUuZ2V0Q29vcmRzKHZ0KTtpZihudWxsPT09T3QpcmV0dXJuIG51bGw7Y29uc3R7cm93OmNuLGNvbDprbn09T3Q7bGV0IFBuPWNuLEpuPWtuO3JldHVybiBjbj49MCYmKFBuPXRo''@;'; put 'put ''aXMucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChjbikpLGtuPj0wJiYoSm49dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGtuKSksZi5fY3JlYXRlQ2VsbENvb3JkcyhQbixKbil9LHRoaXMuY29sVG9Qcm9wPWZ1''@;'; put 'put ''bmN0aW9uKHZ0KXtyZXR1cm4gVC5jb2xUb1Byb3AodnQpfSx0aGlzLnByb3BUb0NvbD1mdW5jdGlvbih2dCl7cmV0dXJuIFQucHJvcFRvQ29sKHZ0KX0sdGhpcy50b1Zpc3VhbFJvdz12dD0+dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh2dCksdGhpcy50''@;'; put 'put ''b1Zpc3VhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh2dCksdGhpcy50b1BoeXNpY2FsUm93PXZ0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1''@;'; put 'put ''bW49dnQ9PnRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMuZ2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCl7cmV0dXJuIFQuZ2V0KHZ0LFQuY29sVG9Qcm9wKE90KSl9LHRoaXMuZ2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih2dCxP''@;'; put 'put ''dCl7cmV0dXJuIFQuZ2V0KHZ0LE90KX0sdGhpcy5nZXREYXRhQXRDb2w9ZnVuY3Rpb24odnQpe2NvbnN0IE90PVtdLGNuPVQuZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3JkcygwLHZ0KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGV0LmRhdGEubGVuZ3RoLTEsdnQpLFQuREVTVElOQVRJT05fUkVO''@;'; put 'put ''REVSRVIpO2ZvcihsZXQga249MDtrbjxjbi5sZW5ndGg7a24rPTEpZm9yKGxldCBQbj0wO1BuPGNuW2tuXS5sZW5ndGg7UG4rPTEpT3QucHVzaChjbltrbl1bUG5dKTtyZXR1cm4gT3R9LHRoaXMuZ2V0RGF0YUF0UHJvcD1mdW5jdGlvbih2dCl7Y29uc3QgT3Q9W10sY249VC5nZXRSYW5nZShm''@;'; put 'put ''Ll9jcmVhdGVDZWxsQ29vcmRzKDAsVC5wcm9wVG9Db2wodnQpKSxmLl9jcmVhdGVDZWxsQ29vcmRzKGV0LmRhdGEubGVuZ3RoLTEsVC5wcm9wVG9Db2wodnQpKSxULkRFU1RJTkFUSU9OX1JFTkRFUkVSKTtmb3IobGV0IGtuPTA7a248Y24ubGVuZ3RoO2tuKz0xKWZvcihsZXQgUG49MDtQbjxj''@;'; put 'put ''bltrbl0ubGVuZ3RoO1BuKz0xKU90LnB1c2goY25ba25dW1BuXSk7cmV0dXJuIE90fSx0aGlzLmdldFNvdXJjZURhdGE9ZnVuY3Rpb24odnQsT3QsY24sa24pe2xldCBQbjtyZXR1cm4gUG49dm9pZCAwPT09dnQ/Vy5nZXREYXRhKCk6Vy5nZXRCeVJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''dnQsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sa24pKSxQbn0sdGhpcy5nZXRTb3VyY2VEYXRhQXJyYXk9ZnVuY3Rpb24odnQsT3QsY24sa24pe2xldCBQbjtyZXR1cm4gUG49dm9pZCAwPT09dnQ/Vy5nZXREYXRhKCEwKTpXLmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxP''@;'; put 'put ''dCksZi5fY3JlYXRlQ2VsbENvb3JkcyhjbixrbiksITApLFBufSx0aGlzLmdldFNvdXJjZURhdGFBdENvbD1mdW5jdGlvbih2dCl7cmV0dXJuIFcuZ2V0QXRDb2x1bW4odnQpfSx0aGlzLnNldFNvdXJjZURhdGFBdENlbGw9ZnVuY3Rpb24odnQsT3QsY24sa24pe2NvbnN0IFBuPUVpKHZ0LE90''@;'; put 'put ''LGNuKSxKbj10aGlzLmhhc0hvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIpLE9yPVtdO0puJiZJbihQbiwkcj0+e2xldFtacixIcixSaV09JHI7T3IucHVzaChbWnIsSHIsVy5nZXRBdENlbGwoWnIsSHIpLFJpXSl9KSxJbihQbiwkcj0+e2xldFtacixIcixSaV09JHI7Vy5zZXRBdENl''@;'; put 'put ''bGwoWnIsSHIsUmkpfSksSm4mJnRoaXMucnVuSG9va3MoImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsT3Isa24pLHRoaXMucmVuZGVyKCk7Y29uc3QgUnI9Zi5nZXRBY3RpdmVFZGl0b3IoKTtSciYmS2koUnIucmVmcmVzaFZhbHVlKSYmUnIucmVmcmVzaFZhbHVlKCl9LHRoaXMuZ2V0U291''@;'; put 'put ''cmNlRGF0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gVy5nZXRBdFJvdyh2dCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCl7cmV0dXJuIFcuZ2V0QXRDZWxsKHZ0LE90KX0sdGhpcy5nZXREYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBULmdldFJhbmdl''@;'; put 'put ''KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsMCksZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCx0aGlzLmNvdW50Q29scygpLTEpLFQuREVTVElOQVRJT05fUkVOREVSRVIpWzBdfHxbXX0sdGhpcy5nZXREYXRhVHlwZT1mdW5jdGlvbih2dCxPdCxjbixrbil7Y29uc3QgUG49dm9pZCAwPT09dnQ/WzAs''@;'; put 'put ''MCx0aGlzLmNvdW50Um93cygpLHRoaXMuY291bnRDb2xzKCldOlt2dCxPdCxjbixrbl0sW0puLE9yXT1QbjtsZXRbLCxSciwkcl09UG4sWnI9bnVsbCxIcj1udWxsO3ZvaWQgMD09PVJyJiYoUnI9Sm4pLHZvaWQgMD09PSRyJiYoJHI9T3IpO2xldCBSaT0ibWl4ZWQiO3JldHVybiB2byhNYXRo''@;'; put 'put ''Lm1heChNYXRoLm1pbihKbixSciksMCksTWF0aC5tYXgoSm4sUnIpLFhvPT57bGV0IEdvPSEwO3JldHVybiB2byhNYXRoLm1heChNYXRoLm1pbihPciwkciksMCksTWF0aC5tYXgoT3IsJHIpLEpzPT4oSHI9dGhpcy5nZXRDZWxsTWV0YShYbyxKcykudHlwZSxacj9Hbz1acj09PUhyOlpyPUhy''@;'; put 'put ''LEdvKSksUmk9R28/SHI6Im1peGVkIixHb30pLFJpfSx0aGlzLnJlbW92ZUNlbGxNZXRhPWZ1bmN0aW9uKHZ0LE90LGNuKXtjb25zdFtrbixQbl09W3RoaXMudG9QaHlzaWNhbFJvdyh2dCksdGhpcy50b1BoeXNpY2FsQ29sdW1uKE90KV07bGV0IEpuPW90LmdldENlbGxNZXRhS2V5VmFsdWUo''@;'; put 'put ''a24sUG4sY24pOyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLHZ0LE90LGNuLEpuKSYmKG90LnJlbW92ZUNlbGxNZXRhKGtuLFBuLGNuKSxmLnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNlbGxNZXRhIix2dCxPdCxjbixKbikpLEpuPW51bGx9LHRoaXMuc3BsaWNlQ2VsbHNN''@;'; put 'put ''ZXRhPWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7Zm9yKHZhciBjbj1hcmd1bWVudHMubGVuZ3RoLGtuPW5ldyBBcnJheShjbj4yP2NuLTI6MCksUG49MjtQbjxjbjtQbisrKWtuW1BuLTJdPWFyZ3Vt''@;'; put 'put ''ZW50c1tQbl07aWYoa24ubGVuZ3RoPjAmJiFBcnJheS5pc0FycmF5KGtuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSAzcmQgYXJndW1lbnQgKGNlbGxNZXRhUm93cykgaGFzIHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBjZWxsIG1ldGEgb2JqZWN0cyBhcnJheS4iKTtPdD4wJiZvdC5y''@;'; put 'put ''ZW1vdmVSb3codGhpcy50b1BoeXNpY2FsUm93KHZ0KSxPdCksa24ubGVuZ3RoPjAmJkluKGtuLnJldmVyc2UoKSxKbj0+e290LmNyZWF0ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3codnQpKSxJbihKbiwoT3IsUnIpPT50aGlzLnNldENlbGxNZXRhT2JqZWN0KHZ0LFJyLE9yKSl9KSxmLnJlbmRl''@;'; put 'put ''cigpfSx0aGlzLnNldENlbGxNZXRhT2JqZWN0PWZ1bmN0aW9uKHZ0LE90LGNuKXsib2JqZWN0Ij09dHlwZW9mIGNuJiZkcyhjbiwoa24sUG4pPT57dGhpcy5zZXRDZWxsTWV0YSh2dCxPdCxQbixrbil9KX0sdGhpcy5zZXRDZWxsTWV0YT1mdW5jdGlvbih2dCxPdCxjbixrbil7aWYoITE9PT1m''@;'; put 'put ''LnJ1bkhvb2tzKCJiZWZvcmVTZXRDZWxsTWV0YSIsdnQsT3QsY24sa24pKXJldHVybjtsZXQgSm49dnQsT3I9T3Q7dnQ8dGhpcy5jb3VudFJvd3MoKSYmKEpuPXRoaXMudG9QaHlzaWNhbFJvdyh2dCkpLE90PHRoaXMuY291bnRDb2xzKCkmJihPcj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3Qp''@;'; put 'put ''KSxvdC5zZXRDZWxsTWV0YShKbixPcixjbixrbiksZi5ydW5Ib29rcygiYWZ0ZXJTZXRDZWxsTWV0YSIsdnQsT3QsY24sa24pfSx0aGlzLmdldENlbGxzTWV0YT1mdW5jdGlvbigpe3JldHVybiBvdC5nZXRDZWxsc01ldGEoKX0sdGhpcy5nZXRDZWxsTWV0YT1mdW5jdGlvbih2dCxPdCl7bGV0''@;'; put 'put ''IGNuPXRoaXMudG9QaHlzaWNhbFJvdyh2dCksa249dGhpcy50b1BoeXNpY2FsQ29sdW1uKE90KTtyZXR1cm4gbnVsbD09PWNuJiYoY249dnQpLG51bGw9PT1rbiYmKGtuPU90KSxvdC5nZXRDZWxsTWV0YShjbixrbix7dmlzdWFsUm93OnZ0LHZpc3VhbENvbHVtbjpPdH0pfSx0aGlzLmdldENl''@;'; put 'put ''bGxNZXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBvdC5nZXRDZWxsc01ldGFBdFJvdyh2dCl9LHRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkPWZ1bmN0aW9uKCl7cmV0dXJuISgib2JqZWN0Ij09PWYuZGF0YVR5cGV8fGV0LmNvbHVtbnMpfSx0aGlzLmdldENlbGxSZW5kZXJl''@;'; put 'put ''cj1mdW5jdGlvbih2dCxPdCl7Y29uc3QgY249Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE90KS5yZW5kZXJlcjp2dC5yZW5kZXJlcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGNuP19rKGNuKTpMYShjbik/X2soInRleHQiKTpjbn0sdGhpcy5nZXRDZWxsRWRpdG9yPWZ1''@;'; put 'put ''bmN0aW9uKHZ0LE90KXtjb25zdCBjbj0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsT3QpLmVkaXRvcjp2dC5lZGl0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjbj9mayhjbik6TGEoY24pP2ZrKCJ0ZXh0Iik6Y259LHRoaXMuZ2V0Q2VsbFZhbGlkYXRvcj1mdW5jdGlv''@;'; put 'put ''bih2dCxPdCl7Y29uc3QgY249Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE90KS52YWxpZGF0b3I6dnQudmFsaWRhdG9yO3JldHVybiJzdHJpbmciPT10eXBlb2YgY24/Rk4oY24pOmNufSx0aGlzLnZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24odnQpe3RoaXMuX3ZhbGlkYXRl''@;'; put 'put ''Q2VsbHModnQpfSx0aGlzLnZhbGlkYXRlUm93cz1mdW5jdGlvbih2dCxPdCl7aWYoIUFycmF5LmlzQXJyYXkodnQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVSb3dzIHBhcmFtZXRlciBgcm93c2AgbXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoT3QsdnQpfSx0aGlz''@;'; put 'put ''LnZhbGlkYXRlQ29sdW1ucz1mdW5jdGlvbih2dCxPdCl7aWYoIUFycmF5LmlzQXJyYXkodnQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVDb2x1bW5zIHBhcmFtZXRlciBgY29sdW1uc2AgbXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoT3Qsdm9pZCAwLHZ0KX0sdGhp''@;'; put 'put ''cy5fdmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCxPdCxjbil7Y29uc3Qga249bmV3IFZyO3Z0JiYoa24ub25RdWV1ZUVtcHR5PXZ0KTtsZXQgUG49Zi5jb3VudFJvd3MoKS0xO2Zvcig7UG4+PTA7KXtpZih2b2lkIDAhPT1PdCYmLTE9PT1PdC5pbmRleE9mKFBuKSl7UG4tPTE7Y29udGludWV9''@;'; put 'put ''bGV0IEpuPWYuY291bnRDb2xzKCktMTtmb3IoO0puPj0wOyl2b2lkIDA9PT1jbnx8LTEhPT1jbi5pbmRleE9mKEpuKT8oa24uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVDZWxsKGYuZ2V0RGF0YUF0Q2VsbChQbixKbiksZi5nZXRDZWxsTWV0YShQbixKbiksT3I9PntpZigiYm9v''@;'; put 'put ''bGVhbiIhPXR5cGVvZiBPcil0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpOyExPT09T3ImJihrbi52YWxpZD0hMSksa24ucmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl9LCJ2YWxpZGF0ZUNlbGxzIiksSm4tPTEpOkpuLT0xO1BuLT0x''@;'; put 'put ''fWtuLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sdGhpcy5nZXRSb3dIZWFkZXI9ZnVuY3Rpb24odnQpe2xldCBPdD1ldC5yb3dIZWFkZXJzLGNuPXZ0O3JldHVybiB2b2lkIDAhPT1jbiYmKGNuPWYucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlciIsY24pKSx2b2lkIDA9PT1jbj8oT3Q9W10sdm8o''@;'; put 'put ''Zi5jb3VudFJvd3MoKS0xLGtuPT57T3QucHVzaChmLmdldFJvd0hlYWRlcihrbikpfSkpOkFycmF5LmlzQXJyYXkoT3QpJiZ2b2lkIDAhPT1PdFtjbl0/T3Q9T3RbY25dOlJhKE90KT9PdD1PdChjbik6T3QmJiJzdHJpbmciIT10eXBlb2YgT3QmJiJudW1iZXIiIT10eXBlb2YgT3QmJihPdD1j''@;'; put 'put ''bisxKSxPdH0sdGhpcy5oYXNSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuISFldC5yb3dIZWFkZXJzfSx0aGlzLmhhc0NvbEhlYWRlcnM9ZnVuY3Rpb24oKXtpZihudWxsIT1ldC5jb2xIZWFkZXJzKXJldHVybiEhZXQuY29sSGVhZGVycztmb3IobGV0IHZ0PTAsT3Q9Zi5jb3VudENvbHMo''@;'; put 'put ''KTt2dDxPdDt2dCsrKWlmKGYuZ2V0Q29sSGVhZGVyKHZ0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdGhpcy5nZXRDb2xIZWFkZXI9ZnVuY3Rpb24odnQpe2xldCBPdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTE7Y29uc3QgY249Zi5ydW5I''@;'; put 'put ''b29rcygibW9kaWZ5Q29sSGVhZGVyIix2dCk7aWYodm9pZCAwPT09Y24pe2NvbnN0IFJyPVtdLCRyPWYuY291bnRDb2xzKCk7Zm9yKGxldCBacj0wO1pyPCRyO1pyKyspUnIucHVzaChmLmdldENvbEhlYWRlcihacikpO3JldHVybiBScn1sZXQga249ZXQuY29sSGVhZGVycztjb25zdCBKbj1m''@;'; put 'put ''LnRvUGh5c2ljYWxDb2x1bW4oY24pLE9yPWZ1bmN0aW9uKFJyKXtjb25zdCAkcj1bXSxacj1mLmNvdW50Q29scygpO2xldCBIcj0wO2Zvcig7SHI8WnI7SHIrKylSYShldC5jb2x1bW5zKSYmZXQuY29sdW1ucyhIcikmJiRyLnB1c2goSHIpO3JldHVybiAkcltScl19KEpuKTtyZXR1cm4hMT09''@;'; put 'put ''PWV0LmNvbEhlYWRlcnM/a249bnVsbDpldC5jb2x1bW5zJiZSYShldC5jb2x1bW5zKSYmZXQuY29sdW1ucyhPcikmJmV0LmNvbHVtbnMoT3IpLnRpdGxlP2tuPWV0LmNvbHVtbnMoT3IpLnRpdGxlOmV0LmNvbHVtbnMmJmV0LmNvbHVtbnNbSm5dJiZldC5jb2x1bW5zW0puXS50aXRsZT9rbj1l''@;'; put 'put ''dC5jb2x1bW5zW0puXS50aXRsZTpBcnJheS5pc0FycmF5KGV0LmNvbEhlYWRlcnMpJiZ2b2lkIDAhPT1ldC5jb2xIZWFkZXJzW0puXT9rbj1ldC5jb2xIZWFkZXJzW0puXTpSYShldC5jb2xIZWFkZXJzKT9rbj1ldC5jb2xIZWFkZXJzKEpuKTpldC5jb2xIZWFkZXJzJiYic3RyaW5nIiE9dHlw''@;'; put 'put ''ZW9mIGV0LmNvbEhlYWRlcnMmJiJudW1iZXIiIT10eXBlb2YgZXQuY29sSGVhZGVycyYmKGtuPVNrKGNuKSksa249Zi5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLGtuLHZ0LE90KSxrbn0sdGhpcy5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBP''@;'; put 'put ''dDtpZih2dD49MCYmKE90PWYuZ2V0Q2VsbE1ldGEoMCx2dCkud2lkdGgpLCh2b2lkIDA9PT1PdHx8T3Q9PT1ldC53aWR0aCkmJihPdD1ldC5jb2xXaWR0aHMpLG51bGwhPU90KXtzd2l0Y2godHlwZW9mIE90KXtjYXNlIm9iamVjdCI6T3Q9T3RbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOk90''@;'; put 'put ''PU90KHZ0KX0ic3RyaW5nIj09dHlwZW9mIE90JiYoT3Q9cGFyc2VJbnQoT3QsMTApKX1yZXR1cm4gT3R9LHRoaXMuZ2V0Q29sV2lkdGg9ZnVuY3Rpb24odnQpe2xldCBPdD1mLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyh2dCk7cmV0dXJuIE90PWYucnVuSG9va3MoIm1vZGlmeUNvbFdpZHRo''@;'; put 'put ''IixPdCx2dCksdm9pZCAwPT09T3QmJihPdD1lVi5ERUZBVUxUX1dJRFRIKSxPdH0sdGhpcy5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzPWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9ZXQucm93SGVpZ2h0cztpZihudWxsIT1PdCl7c3dpdGNoKHR5cGVvZiBPdCl7Y2FzZSJvYmplY3QiOk90PU90W3Z0''@;'; put 'put ''XTticmVhaztjYXNlImZ1bmN0aW9uIjpPdD1PdCh2dCl9InN0cmluZyI9PXR5cGVvZiBPdCYmKE90PXBhcnNlSW50KE90LDEwKSl9cmV0dXJuIE90fSx0aGlzLmdldFJvd0hlaWdodD1mdW5jdGlvbih2dCl7bGV0IE90PWYuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncyh2dCk7cmV0dXJuIE90''@;'; put 'put ''PWYucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodCIsT3QsdnQpLE90fSx0aGlzLmNvdW50U291cmNlUm93cz1mdW5jdGlvbigpe3JldHVybiBXLmNvdW50Um93cygpfSx0aGlzLmNvdW50U291cmNlQ29scz1mdW5jdGlvbigpe3JldHVybiBXLmNvdW50Rmlyc3RSb3dLZXlzKCl9LHRoaXMuY291''@;'; put 'put ''bnRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIFQuZ2V0TGVuZ3RoKCl9LHRoaXMuY291bnRDb2xzPWZ1bmN0aW9uKCl7Y29uc3QgdnQ9ZXQubWF4Q29scyxPdD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKHZ0LE90KX0s''@;'; put 'put ''dGhpcy5jb3VudFJlbmRlcmVkUm93cz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZFJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZp''@;'; put 'put ''ZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZVJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50UmVuZGVyZWRDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxl''@;'; put 'put ''Q29scz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRFbXB0eVJvd3M9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MF0mJmFyZ3VtZW50c1swXSxPdD0wO3JldHVybiBtayhmLmNvdW50Um93cygpLTEsY249PntpZihmLmlzRW1wdHlSb3coY24pKU90Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1cm4hMX0pLE90fSx0aGlzLmNvdW50RW1wdHlDb2xzPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sT3Q9MDtyZXR1cm4gbWsoZi5jb3VudENvbHMoKS0xLGNuPT57aWYoZi5pc0VtcHR5Q29sKGNuKSlPdCs9MTtlbHNlIGlmKCEwPT09dnQpcmV0dXJuITF9KSxPdH0sdGhpcy5pc0VtcHR5Um93PWZ1bmN0aW9uKHZ0KXtyZXR1''@;'; put 'put ''cm4gZXQuaXNFbXB0eVJvdy5jYWxsKGYsdnQpfSx0aGlzLmlzRW1wdHlDb2w9ZnVuY3Rpb24odnQpe3JldHVybiBldC5pc0VtcHR5Q29sLmNhbGwoZix2dCl9LHRoaXMuc2VsZWN0Q2VsbD1mdW5jdGlvbih2dCxPdCxjbixrbil7bGV0IFBuPSEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0sSm49IShhcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtyZXR1cm4hTGEodnQpJiYhTGEoT3QpJiZ0aGlzLnNlbGVjdENlbGxzKFtbdnQsT3QsY24sa25dXSxQbixKbil9LHRoaXMuc2Vs''@;'; put 'put ''ZWN0Q2VsbHM9ZnVuY3Rpb24oKXtsZXQgY249IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTshMT09PSghKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKSYmKGg9ITApO2NvbnN0''@;'; put 'put ''IGtuPW5uLnNlbGVjdENlbGxzKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbW11dKTtyZXR1cm4ga24mJmNuJiZmLmxpc3RlbigpLGg9ITEsa259LHRoaXMuc2VsZWN0Q29sdW1ucz1mdW5jdGlvbih2dCl7cmV0dXJuIG5uLnNlbGVjdENv''@;'; put 'put ''bHVtbnModnQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0KX0sdGhpcy5zZWxlY3RSb3dzPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gbm4uc2VsZWN0Um93cyh2dCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06dnQpfSx0aGlzLmRlc2VsZWN0Q2VsbD1mdW5jdGlvbigpe25uLmRlc2VsZWN0KCl9LHRoaXMuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7bGV0IHZ0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07Y29uc3QgT3Q9dnQm''@;'; put 'put ''JnRoaXMuaGFzUm93SGVhZGVycygpLGNuPXZ0JiZ0aGlzLmhhc0NvbEhlYWRlcnMoKTtoPSEwLG5uLnNlbGVjdEFsbChPdCxjbiksaD0hMX07Y29uc3QgSG49KHZ0LE90KT0+dnQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LDEsITApO3RoaXMuc2Nyb2xsVmlld3BvcnRUbz1mdW5jdGlv''@;'; put 'put ''bih2dCxPdCl7bGV0IGNuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sa249YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBKbj0hY24sT3I9IWtuO2xldCBScj12dCwkcj1P''@;'; put 'put ''dDtpZighKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdKXtjb25zdCBSaT1OdW1iZXIuaXNJbnRlZ2VyKHZ0KSxYbz1OdW1iZXIuaXNJbnRlZ2VyKE90KSxHbz1SaT9Ibih0aGlzLnJvd0luZGV4TWFwcGVyLHZ0KTp2b2lkIDAsSnM9WG8/''@;'; put 'put ''SG4odGhpcy5jb2x1bW5JbmRleE1hcHBlcixPdCk6dm9pZCAwO2lmKG51bGw9PT1Hb3x8bnVsbD09PUpzKXJldHVybiExO1JyPVJpP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChHbyk6dm9pZCAwLCRyPVhvP2YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVu''@;'; put 'put ''ZGVyYWJsZUZyb21WaXN1YWxJbmRleChKcyk6dm9pZCAwfWNvbnN0IFpyPU51bWJlci5pc0ludGVnZXIoUnIpLEhyPU51bWJlci5pc0ludGVnZXIoJHIpO3JldHVybiBaciYmSHI/Zi52aWV3LnNjcm9sbFZpZXdwb3J0KGYuX2NyZWF0ZUNlbGxDb29yZHMoUnIsJHIpLEpuLGtuLGNuLE9yKTpa''@;'; put 'put ''ciYmITE9PT1Icj9mLnZpZXcuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KFJyLEpuLGNuKTohKCFIcnx8ITEhPT1acikmJmYudmlldy5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseSgkcixrbixPcil9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2lmKGYuX2NsZWFyVGltZW91dHMoKSxmLl9j''@;'; put 'put ''bGVhckltbWVkaWF0ZXMoKSxmLnZpZXcmJmYudmlldy5kZXN0cm95KCksVyYmVy5kZXN0cm95KCksVz1udWxsLHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZGVzdHJveSgpLG90LmNsZWFyQ2FjaGUoKSxyVihmKSl7Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQucXVlcnlTZWxlY3Rvcigi''@;'; put 'put ''LmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO3Z0JiZ2dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHZ0KX1nMihmLnJvb3RFbGVtZW50KSxfLmRlc3Ryb3koKSxnZSYmZ2UuZGVzdHJveSgpLGYuYmF0Y2hFeGVjdXRpb24oKCk9PntmLnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxm''@;'; put 'put ''LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxrdC5nZXRJdGVtcygpLmZvckVhY2godnQ9PntsZXRbLE90XT12dDtPdC5kZXN0cm95KCl9KSxrdC5jbGVhcigpLGYucnVuSG9va3MoImFmdGVyRGVzdHJveSIpfSwhMCksc28uZ2V0U2luZ2xldG9uKCkuZGVzdHJveShmKSxkcyhm''@;'; put 'put ''LCh2dCxPdCxjbik9PntSYSh2dCk/Y25bT3RdPWZ1bmN0aW9uIFByKHZ0KXtyZXR1cm4oKT0+e3Rocm93IG5ldyBFcnJvcihgVGhlICIke3Z0fSIgbWV0aG9kIGNhbm5vdCBiZSBjYWxsZWQgYmVjYXVzZSB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWRgKX19''@;'; put 'put ''KE90KToiZ3VpZCIhPT1PdCYmKGNuW090XT1udWxsKX0pLGYuaXNEZXN0cm95ZWQ9ITAsVCYmVC5kZXN0cm95KCksVD1udWxsLGllPW51bGwsbm49bnVsbCxnZT1udWxsLGY9bnVsbH0sdGhpcy5nZXRBY3RpdmVFZGl0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZ2UuZ2V0QWN0aXZlRWRpdG9yKCl9''@;'; put 'put ''LHRoaXMuZ2V0UGx1Z2luPWZ1bmN0aW9uKHZ0KXtjb25zdCBPdD1idSh2dCk7cmV0dXJuIlVuZG9SZWRvIj09PU90P3RoaXMudW5kb1JlZG86a3QuZ2V0SXRlbShPdCl9LHRoaXMuZ2V0UGx1Z2luTmFtZT1mdW5jdGlvbih2dCl7cmV0dXJuIHZ0PT09dGhpcy51bmRvUmVkbz90aGlzLnVuZG9S''@;'; put 'put ''ZWRvLmNvbnN0cnVjdG9yLlBMVUdJTl9LRVk6a3QuZ2V0SWQodnQpfSx0aGlzLmdldEluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHRoaXMuYWRkSG9vaz1mdW5jdGlvbih2dCxPdCl7c28uZ2V0U2luZ2xldG9uKCkuYWRkKHZ0LE90LGYpfSx0aGlzLmhhc0hvb2s9ZnVuY3Rpb24odnQp''@;'; put 'put ''e3JldHVybiBzby5nZXRTaW5nbGV0b24oKS5oYXModnQsZil8fHNvLmdldFNpbmdsZXRvbigpLmhhcyh2dCl9LHRoaXMuYWRkSG9va09uY2U9ZnVuY3Rpb24odnQsT3Qpe3NvLmdldFNpbmdsZXRvbigpLm9uY2UodnQsT3QsZil9LHRoaXMucmVtb3ZlSG9vaz1mdW5jdGlvbih2dCxPdCl7c28u''@;'; put 'put ''Z2V0U2luZ2xldG9uKCkucmVtb3ZlKHZ0LE90LGYpfSx0aGlzLnJ1bkhvb2tzPWZ1bmN0aW9uKHZ0LE90LGNuLGtuLFBuLEpuLE9yKXtyZXR1cm4gc28uZ2V0U2luZ2xldG9uKCkucnVuKGYsdnQsT3QsY24sa24sUG4sSm4sT3IpfSx0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2U9ZnVuY3Rpb24o''@;'; put 'put ''dnQsT3Qpe3JldHVybiBJbmUoZXQubGFuZ3VhZ2UsdnQsT3QpfSx0aGlzLnRvSFRNTD0oKT0+VE4odGhpcyksdGhpcy50b1RhYmxlRWxlbWVudD0oKT0+e2NvbnN0IHZ0PXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB2dC5pbnNlcnRBZGphY2VudEhUTUwo''@;'; put 'put ''ImFmdGVyYmVnaW4iLFROKHRoaXMpKSx2dC5maXJzdEVsZW1lbnRDaGlsZH0sdGhpcy50aW1lb3V0cz1bXSx0aGlzLl9yZWdpc3RlclRpbWVvdXQ9ZnVuY3Rpb24odnQpe2xldCBjbj12dDsiZnVuY3Rpb24iPT10eXBlb2YgY24mJihjbj1zZXRUaW1lb3V0KGNuLGFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowKSksdGhpcy50aW1lb3V0cy5wdXNoKGNuKX0sdGhpcy5fY2xlYXJUaW1lb3V0cz1mdW5jdGlvbigpe0luKHRoaXMudGltZW91dHMsdnQ9PntjbGVhclRpbWVvdXQodnQpfSl9LHRoaXMuaW1tZWRpYXRlcz1bXSx0aGlzLl9y''@;'; put 'put ''ZWdpc3RlckltbWVkaWF0ZT1mdW5jdGlvbih2dCl7dGhpcy5pbW1lZGlhdGVzLnB1c2goc2V0SW1tZWRpYXRlKHZ0KSl9LHRoaXMuX2NsZWFySW1tZWRpYXRlcz1mdW5jdGlvbigpe0luKHRoaXMuaW1tZWRpYXRlcyx2dD0+e2NsZWFySW1tZWRpYXRlKHZ0KX0pfSx0aGlzLl9yZWZyZXNoQm9y''@;'; put 'put ''ZGVycz1mdW5jdGlvbigpe2xldCBPdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2dlLmRlc3Ryb3lFZGl0b3IoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSksZi52aWV3LnJl''@;'; put 'put ''bmRlcigpLE90JiZubi5pc1NlbGVjdGVkKCkmJmdlLnByZXBhcmVFZGl0b3IoKX0sdGhpcy5pc1J0bD1mdW5jdGlvbigpe3JldHVybiJydGwiPT09Zi5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUoZi5yb290RWxlbWVudCkuZGlyZWN0aW9ufSx0aGlzLmlzTHRyPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIWYuaXNSdGwoKX0sdGhpcy5nZXREaXJlY3Rpb25GYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0x0cigpPzE6LTF9O2NvbnN0IFFuPSREZSh7aGFuZGxlRXZlbnQ6dnQ9PmYuaXNMaXN0ZW5pbmcoKSYmdm9pZCAwIT09dnQ/LmtleSxiZWZvcmVLZXlEb3duOnZ0PT50aGlzLnJ1bkhv''@;'; put 'put ''b2tzKCJiZWZvcmVLZXlEb3duIix2dCksYWZ0ZXJLZXlEb3duOnZ0PT57dGhpcy5pc0Rlc3Ryb3llZHx8Zi5ydW5Ib29rcygiYWZ0ZXJEb2N1bWVudEtleURvd24iLHZ0KX0sb3duZXJXaW5kb3c6dGhpcy5yb290V2luZG93fSk7dGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24i''@;'; put 'put ''LHZ0PT57ITE9PT12dC5jdHJsS2V5JiYhMT09PXZ0Lm1ldGFLZXkmJlFuLnJlbGVhc2VQcmVzc2VkS2V5cygpfSksdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gUW59O2NvbnN0IE1yPVFuLmFkZENvbnRleHQoImdyaWQiKSxfcj17cnVuT25seUlmOigpPT5LaShm''@;'; put 'put ''LmdldFNlbGVjdGVkKCkpJiZmLmNvdW50UmVuZGVyZWRSb3dzKCk+MCYmZi5jb3VudFJlbmRlcmVkQ29scygpPjAsZ3JvdXA6cURlfTtRbi5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpLE1yLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazoo''@;'; put 'put ''KT0+e2Yuc2VsZWN0QWxsKCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0IHZ0PWYuZ2V0U2VsZWN0ZWRSYW5nZSgpLHtyb3c6T3QsY29sOmNufT12dFt2dC5sZW5ndGgtMV0uaGlnaGxpZ2h0LGtuPWYuZ2V0RGF0YUF0Q2VsbChPdCxjbiks''@;'; put 'put ''UG49bmV3IE1hcDtmb3IobGV0IEpuPTA7Sm48dnQubGVuZ3RoO0puKyspdnRbSm5dLmZvckFsbCgoT3IsUnIpPT57aWYoT3I+PTAmJlJyPj0wJiYoT3IhPT1PdHx8UnIhPT1jbikpe2NvbnN0e3JlYWRPbmx5OiRyfT1mLmdldENlbGxNZXRhKE9yLFJyKTskcnx8UG4uc2V0KGAke09yfXgke1Jy''@;'; put 'put ''fWAsW09yLFJyLGtuXSl9fSk7Zi5zZXREYXRhQXRDZWxsKEFycmF5LmZyb20oUG4udmFsdWVzKCkpKX0scnVuT25seUlmOigpPT5mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0Q2VsbHNDb3VudCgpPjF9LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pntubi50cmFuc2Zvcm1T''@;'; put 'put ''dGFydCgtMSwwKX19LHtrZXlzOltbIkFycm93VXAiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntubi5zZXRSYW5nZVN0YXJ0KGYuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKSxmLmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LmNvbCkpfX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57bm4udHJhbnNmb3JtRW5kKC0xLDApfX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNh''@;'; put 'put ''bGxiYWNrOigpPT57Y29uc3R7ZnJvbTp2dCx0bzpPdH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSk7bm4uc2V0UmFuZ2VTdGFydCh2dC5jbG9uZSgpKSxubi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKGNuLE90LmNvbCkpfSxydW5Pbmx5SWY6KCk9PiEoZi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57bm4udHJhbnNmb3JtU3RhcnQo''@;'; put 'put ''MSwwKX19LHtrZXlzOltbIkFycm93RG93biIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e25uLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Um93cygp''@;'; put 'put ''LTEsLTEpLGYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQuY29sKSl9fSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e25uLnRyYW5zZm9ybUVuZCgxLDApfX0se2tleXM6W1siQXJyb3dEb3duIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2Fw''@;'; put 'put ''dHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdHtmcm9tOnZ0LHRvOk90fT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksY249Zi5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZi5jb3VudFJvd3MoKS0xLC0xKTtubi5zZXRSYW5nZVN0YXJ0KHZ0LmNsb25lKCkp''@;'; put 'put ''LG5uLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sT3QuY29sKSl9LHJ1bk9ubHlJZjooKT0+IShmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Zi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2Fs''@;'; put 'put ''bGJhY2s6KCk9Pntubi50cmFuc2Zvcm1TdGFydCgwLC0xKmYuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dMZWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hs''@;'; put 'put ''aWdodC5yb3csT3Q9Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uZi5pc1J0bCgpP1tmLmNvdW50Q29scygpLTEsLTFdOlswLDFdKTtubi5zZXRSYW5nZVN0YXJ0KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpKX19LHtrZXlzOltbIkFycm93TGVmdCIs''@;'; put 'put ''IlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57bm4udHJhbnNmb3JtRW5kKDAsLTEqZi5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd0xlZnQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0e2Zyb206dnQsdG86T3R9''@;'; put 'put ''PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxjbj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5mLmlzUnRsKCk/W2YuY291bnRDb2xzKCktMSwtMV06WzAsMV0pO25uLnNldFJhbmdlU3RhcnQodnQuY2xvbmUoKSksbm4uc2V0UmFuZ2VFbmQoZi5fY3Jl''@;'; put 'put ''YXRlQ2VsbENvb3JkcyhPdC5yb3csY24pKX0scnVuT25seUlmOigpPT4hKGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pntubi50cmFuc2Zvcm1T''@;'; put 'put ''dGFydCgwLGYuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0IHZ0PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LE90PWYuY29sdW1uSW5kZXhN''@;'; put 'put ''YXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmYuaXNSdGwoKT9bMCwxXTpbZi5jb3VudENvbHMoKS0xLC0xXSk7bm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntu''@;'; put 'put ''bi50cmFuc2Zvcm1FbmQoMCxmLmdldERpcmVjdGlvbkZhY3RvcigpKX19LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0e2Zyb206dnQsdG86T3R9PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxj''@;'; put 'put ''bj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5mLmlzUnRsKCk/WzAsMV06W2YuY291bnRDb2xzKCktMSwtMV0pO25uLnNldFJhbmdlU3RhcnQodnQuY2xvbmUoKSksbm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhPdC5yb3csY24pKX0s''@;'; put 'put ''cnVuT25seUlmOigpPT4hKGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkhvbWUiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1wYXJzZUludChmLmdldFNldHRpbmdz''@;'; put 'put ''KCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLE90PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZ0LDEpO25uLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhPdCxjbikp''@;'; put 'put ''fSxydW5Pbmx5SWY6KCk9PmYudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siSG9tZSIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57bm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3Jkcyhubi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5m''@;'; put 'put ''cm9tLnJvdyxmLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpKSl9fSx7a2V5czpbWyJIb21lIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9cGFyc2VJbnQoZi5nZXRTZXR0aW5ncygpLmZpeGVkUm93''@;'; put 'put ''c1RvcCwxMCksT3Q9cGFyc2VJbnQoZi5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxjbj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2dCwxKSxrbj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPdCwxKTtu''@;'; put 'put ''bi5zZXRSYW5nZVN0YXJ0KGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sa24pKX0scnVuT25seUlmOigpPT5mLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e25uLnNldFJhbmdlU3Rh''@;'; put 'put ''cnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhmLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxmLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Q29scygpLTEsLTEpKSl9LHJ1bk9ubHlJZjooKT0+Zi52aWV3LmlzTWFpblRhYmxlTm90''@;'; put 'put ''RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJFbmQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e25uLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMobm4uc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuZnJvbS5yb3csZi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0''@;'; put 'put ''Tm90SGlkZGVuSW5kZXgoZi5jb3VudENvbHMoKS0xLC0xKSkpfX0se2tleXM6W1siRW5kIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9cGFyc2VJbnQoZi5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSwxMCksT3Q9Zi5yb3dJbmRl''@;'; put 'put ''eE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZi5jb3VudFJvd3MoKS12dC0xLC0xKSxjbj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Q29scygpLTEsLTEpO25uLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhPdCxj''@;'; put 'put ''bikpfSxydW5Pbmx5SWY6KCk9PmYudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT57bm4udHJhbnNmb3JtU3RhcnQoLWYuY291bnRWaXNpYmxlUm93cygpLDApfX0se2tleXM6W1siUGFnZVVwIiwiU2hp''@;'; put 'put ''ZnQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHt0bzp2dH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLE90PU1hdGgubWF4KHZ0LnJvdy1mLmNvdW50VmlzaWJsZVJvd3MoKSwwKSxjbj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPdCwxKTtpZihudWxsIT09Y24p''@;'; put 'put ''e2NvbnN0IGtuPWYuX2NyZWF0ZUNlbGxDb29yZHMoY24sdnQuY29sKSxQbj12dC5yb3ctZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksSm49TWF0aC5tYXgoa24ucm93LVBuLDApO25uLnNldFJhbmdlRW5kKGtuKSxmLnNjcm9sbFZpZXdwb3J0VG8oSm4pfX19LHtrZXlzOltbIlBh''@;'; put 'put ''Z2VEb3duIl1dLGNhbGxiYWNrOigpPT57bm4udHJhbnNmb3JtU3RhcnQoZi5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJQYWdlRG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57Y29uc3R7dG86dnR9PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxPdD1NYXRoLm1pbih2dC5y''@;'; put 'put ''b3crZi5jb3VudFZpc2libGVSb3dzKCksZi5jb3VudFJvd3MoKS0xKSxjbj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPdCwtMSk7aWYobnVsbCE9PWNuKXtjb25zdCBrbj1mLl9jcmVhdGVDZWxsQ29vcmRzKGNuLHZ0LmNvbCksUG49dnQucm93LWYudmlldy5n''@;'; put 'put ''ZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLEpuPU1hdGgubWluKGtuLnJvdy1QbixmLmNvdW50Um93cygpLTEpO25uLnNldFJhbmdlRW5kKGtuKSxmLnNjcm9sbFZpZXdwb3J0VG8oSm4pfX19LHtrZXlzOltbIlRhYiJdXSxjYWxsYmFjazp2dD0+e2NvbnN0IE90PSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBldC50YWJNb3Zlcz9ldC50YWJNb3Zlcyh2dCk6ZXQudGFiTW92ZXM7bm4udHJhbnNmb3JtU3RhcnQoT3Qucm93LE90LmNvbCwhMCl9fSx7a2V5czpbWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazp2dD0+e2NvbnN0IE90PSJmdW5jdGlvbiI9PXR5cGVvZiBldC50YWJNb3Zlcz9ldC50YWJN''@;'; put 'put ''b3Zlcyh2dCk6ZXQudGFiTW92ZXM7bm4udHJhbnNmb3JtU3RhcnQoLU90LnJvdywtT3QuY29sKX19XSxfciksUE4oKS5mb3JFYWNoKHZ0PT57Y29uc3QgT3Q9Y3kodnQpO2t0LmFkZEl0ZW0odnQsbmV3IE90KHRoaXMpKX0pLHNvLmdldFNpbmdsZXRvbigpLnJ1bihmLCJjb25zdHJ1Y3QiKX1j''@;'; put 'put ''b25zdCBabmU9e19ob29rc1N0b3JhZ2U6T2JqZWN0LmNyZWF0ZShudWxsKSxhZGRIb29rKGMsbCl7cmV0dXJuIHRoaXMuX2hvb2tzU3RvcmFnZVtjXXx8KHRoaXMuX2hvb2tzU3RvcmFnZVtjXT1bXSksdGhpcy5ob3QuYWRkSG9vayhjLGwpLHRoaXMuX2hvb2tzU3RvcmFnZVtjXS5wdXNoKGwp''@;'; put 'put ''LHRoaXN9LHJlbW92ZUhvb2tzQnlLZXkoYyl7SW4odGhpcy5faG9va3NTdG9yYWdlW2NdfHxbXSxsPT57dGhpcy5ob3QucmVtb3ZlSG9vayhjLGwpfSl9LGNsZWFySG9va3MoKXtkcyh0aGlzLl9ob29rc1N0b3JhZ2UsKGMsbCk9PnRoaXMucmVtb3ZlSG9va3NCeUtleShsKSksdGhpcy5faG9v''@;'; put 'put ''a3NTdG9yYWdlPXt9fX07ZmgoWm5lLCJNSVhJTl9OQU1FIiwiaG9va3NSZWZSZWdpc3RlcmVyIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFhEZT1abmUsWWM9T2JqZWN0LmZyZWV6ZSh7VklSR0lOOiJTVEFURV9WSVJHSU4iLEVESVRJTkc6IlNUQVRFX0VESVRJTkciLFdB''@;'; put 'put ''SVRJTkc6IlNUQVRFX1dBSVRJTkciLEZJTklTSEVEOiJTVEFURV9GSU5JU0hFRCJ9KSxHQj0iYmFzZUVkaXRvciI7Y2xhc3Mgdjd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJiYXNlIn1jb25zdHJ1Y3RvcihsKXt0aGlzLmhvdD1sLHRoaXMuaW5zdGFuY2U9bCx0aGlzLnN0YXRl''@;'; put 'put ''PVljLlZJUkdJTix0aGlzLl9vcGVuZWQ9ITEsdGhpcy5fZnVsbEVkaXRNb2RlPSExLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCx0aGlzLlREPW51bGwsdGhpcy5yb3c9bnVsbCx0aGlzLmNvbD1udWxsLHRoaXMucHJvcD1udWxsLHRoaXMub3JpZ2luYWxWYWx1ZT1udWxsLHRoaXMuY2VsbFBy''@;'; put 'put ''b3BlcnRpZXM9bnVsbCx0aGlzLmluaXQoKX1fZmlyZUNhbGxiYWNrcyhsKXt0aGlzLl9jbG9zZUNhbGxiYWNrJiYodGhpcy5fY2xvc2VDYWxsYmFjayhsKSx0aGlzLl9jbG9zZUNhbGxiYWNrPW51bGwpfWluaXQoKXt9Z2V0VmFsdWUoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGdldFZhbHVlKCkg''@;'; put 'put ''bWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1zZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3Igc2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfW9wZW4oKXt0aHJvdyBFcnJvcigiRWRpdG9yIG9wZW4oKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfWNsb3NlKCl7dGhyb3cgRXJyb3Io''@;'; put 'put ''IkVkaXRvciBjbG9zZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9cHJlcGFyZShsLGEsZCxoLGYsXyl7dGhpcy5URD1oLHRoaXMucm93PWwsdGhpcy5jb2w9YSx0aGlzLnByb3A9ZCx0aGlzLm9yaWdpbmFsVmFsdWU9Zix0aGlzLmNlbGxQcm9wZXJ0aWVzPV8sdGhpcy5zdGF0ZT1ZYy5WSVJH''@;'; put 'put ''SU59ZXh0ZW5kKCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdGhpcy5jb25zdHJ1Y3Rvcnt9fXNhdmVWYWx1ZShsLGEpe2xldCBkLGgsZixfO2lmKGEpe2NvbnN0IHdlPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpO2Q9TWF0aC5tYXgoTWF0aC5taW4od2VbMF0sd2VbMl0pLDApLGg9TWF0aC5t''@;'; put 'put ''YXgoTWF0aC5taW4od2VbMV0sd2VbM10pLDApLGY9TWF0aC5tYXgod2VbMF0sd2VbMl0pLF89TWF0aC5tYXgod2VbMV0sd2VbM10pfWVsc2VbZCxoLGYsX109W3RoaXMucm93LHRoaXMuY29sLG51bGwsbnVsbF07Y29uc3QgVD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3Jk''@;'; put 'put ''cyIsZCxoKTtBcnJheS5pc0FycmF5KFQpJiYoW2QsaF09VCk7Y29uc3QgaWU9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksZ2U9e3J1bk9ubHlJZjooKT0+S2kodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6R0J9O3RoaXMuaXNJbkZ1bGxF''@;'; put 'put ''ZGl0TW9kZSgpJiZpZS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLTEsMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNm''@;'; put 'put ''b3JtU3RhcnQoMSwwKX19LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLC0xKnRoaXMuaG90LmdldERpcmVjdGlvbkZhY3RvcigpKX19LHtrZXlzOltbIkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pnt0aGlz''@;'; put 'put ''LmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCx0aGlzLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fV0sZ2UpLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGQsaCxsLGYsXywiZWRpdCIpfWJlZ2luRWRpdGluZyhsLGEpe2lmKHRoaXMuc3RhdGUhPT1ZYy5WSVJHSU4pcmV0dXJu''@;'; put 'put ''O2NvbnN0IGQ9dGhpcy5ob3QsaD1kLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLGY9ZC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKTtpZihkLnZpZXcuc2Nyb2xsVmlld3BvcnQoZC5f''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhoLGYpKSx0aGlzLnN0YXRlPVljLkVESVRJTkcsdGhpcy5pc0luRnVsbEVkaXRNb2RlKCkpe2NvbnN0IF89InN0cmluZyI9PXR5cGVvZiBsP2w6X2wodGhpcy5vcmlnaW5hbFZhbHVlKTt0aGlzLnNldFZhbHVlKF8pfXRoaXMub3BlbihhKSx0aGlzLl9vcGVuZWQ9''@;'; put 'put ''ITAsdGhpcy5mb2N1cygpLGQudmlldy5yZW5kZXIoKSxkLnJ1bkhvb2tzKCJhZnRlckJlZ2luRWRpdGluZyIsdGhpcy5yb3csdGhpcy5jb2wpfWZpbmlzaEVkaXRpbmcobCxhLGQpe2xldCBoO2lmKGQpe2NvbnN0IFQ9dGhpcy5fY2xvc2VDYWxsYmFjazt0aGlzLl9jbG9zZUNhbGxiYWNrPVc9''@;'; put 'put ''PntUJiZUKFcpLGQoVyksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX19aWYodGhpcy5pc1dhaXRpbmcoKSlyZXR1cm47Y29uc3QgXz10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTtpZihfLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoR0IpLF8ucmVtb3Zl''@;'; put 'put ''U2hvcnRjdXRzQnlHcm91cChnayksdGhpcy5zdGF0ZSE9PVljLlZJUkdJTil7aWYodGhpcy5zdGF0ZT09PVljLkVESVRJTkcpe2lmKGwpcmV0dXJuIHRoaXMuY2FuY2VsQ2hhbmdlcygpLHZvaWQgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtjb25zdCBUPXRoaXMuZ2V0VmFsdWUoKTtoPXRoaXMu''@;'; put 'put ''Y2VsbFByb3BlcnRpZXMudHJpbVdoaXRlc3BhY2U/W1sic3RyaW5nIj09dHlwZW9mIFQ/U3RyaW5nLnByb3RvdHlwZS50cmltLmNhbGwoVHx8IiIpOlRdXTpbW1RdXSx0aGlzLnN0YXRlPVljLldBSVRJTkcsdGhpcy5zYXZlVmFsdWUoaCxhKSx0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKHRo''@;'; put 'put ''aXMuY2VsbFByb3BlcnRpZXMpP3RoaXMuaG90LmFkZEhvb2tPbmNlKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsVz0+e3RoaXMuc3RhdGU9WWMuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKFcpfSk6KHRoaXMuc3RhdGU9WWMuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKCEwKSl9fWVsc2Ug''@;'; put 'put ''dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuX2ZpcmVDYWxsYmFja3MoITApfSl9Y2FuY2VsQ2hhbmdlcygpe3RoaXMuc3RhdGU9WWMuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKCl9ZGlzY2FyZEVkaXRvcihsKXt0aGlzLnN0YXRlPT09WWMuRklOSVNIRUQmJighMT09''@;'; put 'put ''PWwmJiEwIT09dGhpcy5jZWxsUHJvcGVydGllcy5hbGxvd0ludmFsaWQ/KHRoaXMuaG90LnNlbGVjdENlbGwodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuZm9jdXMoKSx0aGlzLnN0YXRlPVljLkVESVRJTkcsdGhpcy5fZmlyZUNhbGxiYWNrcyghMSkpOih0aGlzLmNsb3NlKCksdGhpcy5fb3Bl''@;'; put 'put ''bmVkPSExLHRoaXMuX2Z1bGxFZGl0TW9kZT0hMSx0aGlzLnN0YXRlPVljLlZJUkdJTix0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpKSl9ZW5hYmxlRnVsbEVkaXRNb2RlKCl7dGhpcy5fZnVs''@;'; put 'put ''bEVkaXRNb2RlPSEwfWlzSW5GdWxsRWRpdE1vZGUoKXtyZXR1cm4gdGhpcy5fZnVsbEVkaXRNb2RlfWlzT3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1pc1dhaXRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0ZT09PVljLldBSVRJTkd9Z2V0RWRpdGVkQ2VsbFJlY3QoKXt2YXIgbDtjb25zdCBh''@;'; put 'put ''PXRoaXMuZ2V0RWRpdGVkQ2VsbCgpO2lmKCFhKXJldHVybjtjb25zdHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9ydDpofT10aGlzLmhvdC52aWV3Ll93dCxmPXRoaXMuaG90LnJvb3RXaW5kb3csXz1xbChhKSxUPXdhKGEpLFc9cWwodGhpcy5ob3Qucm9vdEVsZW1lbnQpLGllPXdhKHRoaXMuaG90''@;'; put 'put ''LnJvb3RFbGVtZW50KSxnZT1kLnRvcE92ZXJsYXkuaG9sZGVyLHdlPWQuaW5saW5lU3RhcnRPdmVybGF5LmhvbGRlcixFZT1nZSE9PWY/Z2Uuc2Nyb2xsVG9wOjAsWmU9d2UhPT1mP3dlLnNjcm9sbExlZnQ6MCxvdD1mLmlubmVyV2lkdGgtVy5sZWZ0LWllLHt3dFRhYmxlOmV0fT1udWxsIT09''@;'; put 'put ''KGw9ZC5nZXRQYXJlbnRPdmVybGF5KGEpKSYmdm9pZCAwIT09bD9sOnRoaXMuaG90LnZpZXcuX3d0LHl0PWV0Lm5hbWUsa3Q9WyJtYXN0ZXIiLCJpbmxpbmVfc3RhcnQiXS5pbmNsdWRlcyh5dCk/RWU6MCxTdD1bIm1hc3RlciIsInRvcCIsImJvdHRvbSJdLmluY2x1ZGVzKHl0KT9aZTowO2xl''@;'; put 'put ''dCBubj1fLnRvcC1XLnRvcC0oXy50b3A9PT1XLnRvcD8wOjEpLWt0LG1uPTA7bW49dGhpcy5ob3QuaXNSdGwoKT9mLmlubmVyV2lkdGgtXy5sZWZ0LVQtb3QtMStTdDpfLmxlZnQtVy5sZWZ0LTEtU3QsWyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHl0KSYmKG5u''@;'; put 'put ''Kz1kLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSxbImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoeXQpJiYobW4rPU1hdGguYWJzKGQuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSkpO2NvbnN0IEVuPXRoaXMuaG90''@;'; put 'put ''Lmhhc0NvbEhlYWRlcnMoKSxscj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMucm93KSxWcj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKSx1aT10aGlzLmhvdC5y''@;'; put 'put ''b3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpOyhFbiYmbHI8PTB8fGxyPT09dWkpJiYobm4rPTEpLFZyPD0wJiYobW4rPTEpO2NvbnN0IGdyPWgucm93c1JlbmRlckNhbGN1bGF0''@;'; put 'put ''b3Iuc3RhcnRQb3NpdGlvbixFaT1oLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24sVXI9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSksSG49ZC50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksUHI9SWModGhpcy5ob3Qu''@;'; put 'put ''cm9vdERvY3VtZW50KSxRbj1hLm9mZnNldFRvcCtnci1IbjtsZXQgTXI9MDtpZih0aGlzLmhvdC5pc1J0bCgpKXtjb25zdCBacj1hLm9mZnNldExlZnQ7TXI9WnI+PTA/ZXQuZ2V0V2lkdGgoKS1hLm9mZnNldExlZnQ6TWF0aC5hYnMoWnIpLE1yKz1FaS1Vci1UfWVsc2UgTXI9YS5vZmZzZXRM''@;'; put 'put ''ZWZ0K0VpLVVyO2NvbnN0IF9yPXpwKHRoaXMuVEQsdGhpcy5ob3Qucm9vdFdpbmRvdyksdnQ9dGhpcy5ob3QuaXNSdGwoKT8iYm9yZGVyUmlnaHRXaWR0aCI6ImJvcmRlckxlZnRXaWR0aCIsT3Q9cGFyc2VJbnQoX3JbdnRdLDEwKT4wPzA6MSxjbj1wYXJzZUludChfci5ib3JkZXJUb3BXaWR0''@;'; put 'put ''aCwxMCk+MD8wOjEsa249d2EoYSkrT3QsUG49YWwoYSkrY24sSm49ZHRlKGdlKT9QcjowLE9yPWh0ZSh3ZSk/UHI6MCxScj10aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKE1yKS1KbitPdDtyZXR1cm57dG9wOm5uLHN0YXJ0Om1uLGhlaWdodDpQbixtYXhIZWlnaHQ6''@;'; put 'put ''TWF0aC5tYXgodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQoUW4pLU9yK2NuLDIzKSx3aWR0aDprbixtYXhXaWR0aDpScn19Z2V0RWRpdGVkQ2VsbHNMYXllckNsYXNzKCl7c3dpdGNoKHRoaXMuY2hlY2tFZGl0b3JTZWN0aW9uKCkpe2Nhc2UiaW5saW5lLXN0YXJ0''@;'; put 'put ''IjpyZXR1cm4iaHRfY2xvbmVfbGVmdCBodF9jbG9uZV9pbmxpbmVfc3RhcnQiO2Nhc2UiYm90dG9tIjpyZXR1cm4iaHRfY2xvbmVfYm90dG9tIjtjYXNlImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyIGh0X2Nsb25lX2JvdHRv''@;'; put 'put ''bV9pbmxpbmVfc3RhcnRfY29ybmVyIjtjYXNlInRvcCI6cmV0dXJuImh0X2Nsb25lX3RvcCI7Y2FzZSJ0b3AtaW5saW5lLXN0YXJ0LWNvcm5lciI6cmV0dXJuImh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lciBodF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI7ZGVmYXVsdDpyZXR1cm4i''@;'; put 'put ''aHRfY2xvbmVfbWFzdGVyIn19Z2V0RWRpdGVkQ2VsbCgpe3JldHVybiB0aGlzLmhvdC5nZXRDZWxsKHRoaXMucm93LHRoaXMuY29sLCEwKX1jaGVja0VkaXRvclNlY3Rpb24oKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpO2xldCBhPSIiO3JldHVybiB0aGlzLnJvdzx0aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcD9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/InRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjoidG9wIjp0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSYmdGhpcy5yb3c+PWwtdGhp''@;'; put 'put ''cy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20/YT10aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PyJib3R0b20taW5saW5lLXN0YXJ0LWNvcm5lciI6ImJvdHRvbSI6dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENv''@;'; put 'put ''bHVtbnNTdGFydCYmKGE9ImlubGluZS1zdGFydCIpLGF9fWZ1bmN0aW9uIFFEZSgpe3ZhciBsLGM9e21pbkhlaWdodDoyMDAsbWF4SGVpZ2h0OjMwMCxtaW5XaWR0aDoxMDAsbWF4V2lkdGg6MzAwfSxhPWRvY3VtZW50LmJvZHksZD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIiksaD1kb2N1''@;'; put 'put ''bWVudC5jcmVhdGVFbGVtZW50KCJTUEFOIiksZj1mdW5jdGlvbihFZSxaZSxvdCl7RWUuYWRkRXZlbnRMaXN0ZW5lcihaZSxvdCwhMSl9LF89ZnVuY3Rpb24oRWUsWmUsb3Qpe0VlLnJlbW92ZUV2ZW50TGlzdGVuZXIoWmUsb3QsITEpfSxUPWZ1bmN0aW9uKEVlKXt2YXIgWmUsb3Q7RWU/L15b''@;'; put 'put ''YS16QS1aIFwuLFxcXC9cfDAtOV0kLy50ZXN0KEVlKXx8KEVlPSIuIik6RWU9IiIsdm9pZCAwIT09ZC50ZXh0Q29udGVudD9kLnRleHRDb250ZW50PWwudmFsdWUrRWU6ZC5kYXRhPWwudmFsdWUrRWUsaC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGguc3R5bGUuZm9udFNpemU9d2UobCku''@;'; put 'put ''Zm9udFNpemUsaC5zdHlsZS5mb250RmFtaWx5PXdlKGwpLmZvbnRGYW1pbHksaC5zdHlsZS53aGl0ZVNwYWNlPSJwcmUiLGEuYXBwZW5kQ2hpbGQoaCksWmU9aC5jbGllbnRXaWR0aCsyLGEucmVtb3ZlQ2hpbGQoaCksbC5zdHlsZS5oZWlnaHQ9Yy5taW5IZWlnaHQrInB4IixsLnN0eWxlLndp''@;'; put 'put ''ZHRoPWMubWluV2lkdGg+WmU/Yy5taW5XaWR0aCsicHgiOlplPmMubWF4V2lkdGg/Yy5tYXhXaWR0aCsicHgiOlplKyJweCIsYy5taW5IZWlnaHQ+KG90PWwuc2Nyb2xsSGVpZ2h0P2wuc2Nyb2xsSGVpZ2h0LTE6MCk/bC5zdHlsZS5oZWlnaHQ9Yy5taW5IZWlnaHQrInB4IjpjLm1heEhlaWdo''@;'; put 'put ''dDxvdD8obC5zdHlsZS5oZWlnaHQ9Yy5tYXhIZWlnaHQrInB4IixsLnN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIpOmwuc3R5bGUuaGVpZ2h0PW90KyJweCJ9LFc9ZnVuY3Rpb24oKXt3aW5kb3cuc2V0VGltZW91dChULDApfTtmdW5jdGlvbiB3ZShFZSl7cmV0dXJuIEVlLmN1cnJlbnRTdHls''@;'; put 'put ''ZXx8ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShFZSl9cmV0dXJue2luaXQ6ZnVuY3Rpb24oRWUsWmUsb3QpeyFmdW5jdGlvbihFZSxaZSxvdCl7bD1FZSxmdW5jdGlvbihFZSl7aWYoRWUmJkVlLm1pbkhlaWdodClpZigiaW5oZXJpdCI9PUVlLm1pbkhlaWdodCljLm1p''@;'; put 'put ''bkhlaWdodD1sLmNsaWVudEhlaWdodDtlbHNle3ZhciBaZT1wYXJzZUludChFZS5taW5IZWlnaHQpO2lzTmFOKFplKXx8KGMubWluSGVpZ2h0PVplKX1pZihFZSYmRWUubWF4SGVpZ2h0KWlmKCJpbmhlcml0Ij09RWUubWF4SGVpZ2h0KWMubWF4SGVpZ2h0PWwuY2xpZW50SGVpZ2h0O2Vsc2V7''@;'; put 'put ''dmFyIG90PXBhcnNlSW50KEVlLm1heEhlaWdodCk7aXNOYU4ob3QpfHwoYy5tYXhIZWlnaHQ9b3QpfWlmKEVlJiZFZS5taW5XaWR0aClpZigiaW5oZXJpdCI9PUVlLm1pbldpZHRoKWMubWluV2lkdGg9bC5jbGllbnRXaWR0aDtlbHNle3ZhciBldD1wYXJzZUludChFZS5taW5XaWR0aCk7aXNO''@;'; put 'put ''YU4oZXQpfHwoYy5taW5XaWR0aD1ldCl9aWYoRWUmJkVlLm1heFdpZHRoKWlmKCJpbmhlcml0Ij09RWUubWF4V2lkdGgpYy5tYXhXaWR0aD1sLmNsaWVudFdpZHRoO2Vsc2V7dmFyIHl0PXBhcnNlSW50KEVlLm1heFdpZHRoKTtpc05hTih5dCl8fChjLm1heFdpZHRoPXl0KX1oLmZpcnN0Q2hp''@;'; put 'put ''bGR8fChoLmNsYXNzTmFtZT0iYXV0b1Jlc2l6ZSIsaC5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLGguYXBwZW5kQ2hpbGQoZCkpfShaZSksIlRFWFRBUkVBIj09bC5ub2RlTmFtZSYmKGwuc3R5bGUucmVzaXplPSJub25lIixsLnN0eWxlLm92ZXJmbG93WT0iIixsLnN0eWxlLmhlaWdo''@;'; put 'put ''dD1jLm1pbkhlaWdodCsicHgiLGwuc3R5bGUubWluV2lkdGg9Yy5taW5XaWR0aCsicHgiLGwuc3R5bGUubWF4V2lkdGg9Yy5tYXhXaWR0aCsicHgiLGwuc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSxvdCYmKGYobCwiY2hhbmdlIixUKSxmKGwsImN1dCIsVyksZihsLCJwYXN0ZSIsVyksZihs''@;'; put 'put ''LCJkcm9wIixXKSxmKGwsImtleWRvd24iLFcpLGYobCwiZm9jdXMiLFQpLGYobCwiY29tcG9zaXRpb25zdGFydCIsVyksZihsLCJjb21wb3NpdGlvbnVwZGF0ZSIsVyksZihsLCJjb21wb3NpdGlvbmVuZCIsVykpLFQoKX0oRWUsWmUsb3QpfSx1bk9ic2VydmU6ZnVuY3Rpb24oKXtfKGwsImNo''@;'; put 'put ''YW5nZSIsVCksXyhsLCJjdXQiLFcpLF8obCwicGFzdGUiLFcpLF8obCwiZHJvcCIsVyksXyhsLCJrZXlkb3duIixXKSxfKGwsImZvY3VzIixUKSxfKGwsImNvbXBvc2l0aW9uc3RhcnQiLFcpLF8obCwiY29tcG9zaXRpb251cGRhdGUiLFcpLF8obCwiY29tcG9zaXRpb25lbmQiLFcpfSxyZXNp''@;'; put 'put ''emU6VH19ZnVuY3Rpb24gWW5lKGMsbCl7Y29uc3QgYT1oTihsKSxkPWwudmFsdWUuc3BsaXQoIlxuIik7bGV0IGg9YSxmPTA7Zm9yKGxldCBfPTA7XzxkLmxlbmd0aDtfKyspezAhPT1fJiYoZis9ZFtfLTFdLmxlbmd0aCsxKTtjb25zdCBXPWYrZFtfXS5sZW5ndGg7aWYoImhvbWUiPT09Yz9o''@;'; put 'put ''PWY6ImVuZCI9PT1jJiYoaD1XKSxhPD1XKWJyZWFrfWl5KGwsaCl9VGEodjcsWERlKTtjb25zdCBVaz0iaHRfZWRpdG9yX2hpZGRlbiIsV25lPSJ0ZXh0RWRpdG9yIjtjbGFzcyBrZyBleHRlbmRzIHY3e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4idGV4dCJ9Y29uc3RydWN0b3Io''@;'; put 'put ''bCl7c3VwZXIobCksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYXV0b1Jlc2l6ZT1RRGUoKSx0aGlzLlRFWFRBUkVBPXZvaWQgMCx0aGlzLnRleHRhcmVhU3R5bGU9dm9pZCAwLHRoaXMuVEVYVEFSRUFfUEFSRU5UPXZvaWQgMCx0aGlzLnRleHRhcmVhUGFyZW50U3R5bGU9''@;'; put 'put ''dm9pZCAwLHRoaXMubGF5ZXJDbGFzcz12b2lkIDAsdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMuYmluZEV2ZW50cygpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckRlc3Ryb3kiLCgpPT50aGlzLmRlc3Ryb3koKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5URVhUQVJFQS52YWx1ZX1z''@;'; put 'put ''ZXRWYWx1ZShsKXt0aGlzLlRFWFRBUkVBLnZhbHVlPWx9b3Blbigpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5hZGRIb29r''@;'; put 'put ''KCJhZnRlckRvY3VtZW50S2V5RG93biIsYT0+dGhpcy5vbkFmdGVyRG9jdW1lbnRLZXlEb3duKGEpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCl9Y2xvc2UoKXt0aGlzLmF1dG9SZXNpemUudW5PYnNlcnZlKCksdGhpcy5ob3Qucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLlRF''@;'; put 'put ''WFRBUkVBJiZ0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhpZGVFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImFmdGVyRG9jdW1lbnRLZXlEb3duIil9cHJlcGFyZShsLGEsZCxoLGYsXyl7Y29uc3QgVD10aGlzLnN0YXRl''@;'; put 'put ''O2lmKHN1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pLCFfLnJlYWRPbmx5KXt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCEwKTtjb25zdHthbGxvd0ludmFsaWQ6VyxmcmFnbWVudFNlbGVjdGlvbjppZX09XztXJiYodGhpcy5URVhUQVJFQS52YWx1ZT0iIiksVCE9PVljLkZJTklTSEVEJiZ0aGlz''@;'; put 'put ''LmhpZGVFZGl0YWJsZUVsZW1lbnQoKSwhaWUmJiFtMigpJiZ0aGlzLmZvY3VzKCl9fWJlZ2luRWRpdGluZyhsLGEpe3RoaXMuc3RhdGU9PT1ZYy5WSVJHSU4mJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiLHN1cGVyLmJlZ2luRWRpdGluZyhsLGEpKX1mb2N1cygpe3RoaXMuVEVYVEFSRUEuc2Vs''@;'; put 'put ''ZWN0KCksaXkodGhpcy5URVhUQVJFQSx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3Q7dGhpcy5URVhUQVJFQT1sLmNyZWF0ZUVsZW1lbnQoIlRFWFRBUkVBIiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoImRhdGEtaG90LWlucHV0IiwiIiksdGhpcy5URVhUQVJFQS50YWJJbmRleD0tMSxwaSh0aGlzLlRFWFRBUkVBLCJoYW5kc29udGFibGVJbnB1dCIpLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aD0wLHRoaXMudGV4dGFy''@;'; put 'put ''ZWFTdHlsZS5oZWlnaHQ9MCx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIix0aGlzLlRFWFRBUkVBX1BBUkVOVD1sLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHBpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULCJoYW5kc29udGFibGVJbnB1dEhvbGRlciIpLEJvKHRoaXMuVEVYVEFS''@;'; put 'put ''RUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykmJldvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykscGkodGhpcy5URVhUQVJFQV9QQVJFTlQsVWspLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZT10aGlzLlRFWFRBUkVBX1BBUkVOVC5zdHlsZSx0aGlzLlRFWFRBUkVBX1BB''@;'; put 'put ''UkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBX1BBUkVOVCl9aGlkZUVkaXRhYmxlRWxlbWVudCgpe0N0ZSgpJiYodGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQ9Ii05OTk5OXB4IiksdGhpcy50''@;'; put 'put ''ZXh0YXJlYVN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjAiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IjFweCIsV28odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxwaSh0aGlzLlRFWFRBUkVB''@;'; put 'put ''X1BBUkVOVCxVayl9c2hvd0VkaXRhYmxlRWxlbWVudCgpe3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm92ZXJmbG93PSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5wb3NpdGlvbj0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5''@;'; put 'put ''bGVbdGhpcy5ob3QuaXNSdGwoKT8ibGVmdCI6InJpZ2h0Il09ImF1dG8iLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5PSIxIix0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iIix0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iO2NvbnN0IGw9dGhpcy5U''@;'; put 'put ''RVhUQVJFQV9QQVJFTlQuY2hpbGROb2RlcztsZXQgYT0hMTt2byhsLmxlbmd0aC0xLGQ9PntpZihCbyhsW2RdLCJoYW5kc29udGFibGVFZGl0b3IiKSlyZXR1cm4gYT0hMCwhMX0pLEJvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULFVrKSYmV28odGhpcy5URVhUQVJFQV9QQVJFTlQsVWspLGE/KHRo''@;'; put 'put ''aXMubGF5ZXJDbGFzcz0iaHRfZWRpdG9yX3Zpc2libGUiLHBpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpOih0aGlzLmxheWVyQ2xhc3M9dGhpcy5nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKSxwaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3Mp''@;'; put 'put ''KX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codGhpcy5yb3cpLGE9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChsLHRoaXMuY29sKTt0aGlzLm9yaWdpbmFsVmFsdWU9YSx0aGlzLnNldFZhbHVlKGEpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1y''@;'; put 'put ''ZWZyZXNoRGltZW5zaW9ucygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5zdGF0ZSE9PVljLkVESVRJTkcmJiFsKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVy''@;'; put 'put ''biB2b2lkKGx8fHRoaXMuY2xvc2UoKSk7Y29uc3R7dG9wOmEsc3RhcnQ6ZCx3aWR0aDpoLG1heFdpZHRoOmYsaGVpZ2h0Ol8sbWF4SGVpZ2h0OlR9PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUudG9wPWAke2F9cHhgLHRoaXMudGV4dGFyZWFQYXJl''@;'; put 'put ''bnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHtkfXB4YCx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKTtjb25zdCBXPXpwKHRoaXMuVEQsdGhpcy5ob3Qucm9vdFdpbmRvdyk7dGhpcy5URVhUQVJFQS5zdHlsZS5mb250U2l6ZT1XLmZvbnRTaXplLHRoaXMuVEVY''@;'; put 'put ''VEFSRUEuc3R5bGUuZm9udEZhbWlseT1XLmZvbnRGYW1pbHksdGhpcy5URVhUQVJFQS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5URC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7Y29uc3QgaWU9enAodGhpcy5URVhUQVJFQSksZ2U9cGFyc2VJbnQoaWUucGFkZGluZ0xlZnQsMTApK3BhcnNl''@;'; put 'put ''SW50KGllLnBhZGRpbmdSaWdodCwxMCksd2U9cGFyc2VJbnQoaWUucGFkZGluZ1RvcCwxMCkrcGFyc2VJbnQoaWUucGFkZGluZ0JvdHRvbSwxMCksWmU9Xy13ZSxvdD1mLWdlLGV0PVQtd2U7dGhpcy5hdXRvUmVzaXplLmluaXQodGhpcy5URVhUQVJFQSx7bWluV2lkdGg6TWF0aC5taW4oaC1n''@;'; put 'put ''ZSxvdCksbWluSGVpZ2h0Ok1hdGgubWluKFplLGV0KSxtYXhXaWR0aDpvdCxtYXhIZWlnaHQ6ZXR9LCEwKX1iaW5kRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJjdXQiLGw9Pmwuc3RvcFByb3BhZ2F0aW9uKCkpLHRoaXMuZXZlbnRN''@;'; put 'put ''YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5URVhUQVJFQSwicGFzdGUiLGw9Pmwuc3RvcFByb3BhZ2F0aW9uKCkpLGJOKCkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5URVhUQVJFQSwiZm9jdXNvdXQiLCgpPT50aGlzLmZpbmlzaEVkaXRpbmcoITEpKSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblJlc2l6''@;'; put 'put ''ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5mb2N1cygpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5mb2N1cygpfSl9YWxsb3dLZXlFdmVudFByb3BhZ2F0aW9uKCl7fWRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGg9KCk9Pnt0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImlu''@;'; put 'put ''c2VydFRleHQiLCExLCJcbiIpfTthLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl1dLGNhbGxiYWNrOmY9Pntjb25zdCBfPXRoaXMuaG90LmdldFNldHRpbmdzKCksVD0iZnVuY3Rpb24iPT10eXBlb2YgXy50YWJNb3Zlcz9fLnRhYk1vdmVzKGYpOl8udGFiTW92ZXM7dGhpcy5ob3Quc2Vs''@;'; put 'put ''ZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KFQucm93LFQuY29sLCEwKX19LHtrZXlzOltbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOmY9Pntjb25zdCBfPXRoaXMuaG90LmdldFNldHRpbmdzKCksVD0iZnVuY3Rpb24iPT10eXBlb2YgXy50YWJNb3Zlcz9fLnRhYk1vdmVzKGYpOl8udGFiTW92ZXM7''@;'; put 'put ''dGhpcy5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC1ULnJvdywtVC5jb2wpfX0se2tleXM6W1siQ29udHJvbCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6Zj0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCkmJiFmLmFsdEtleSxyZWxhdGl2''@;'; put 'put ''ZVRvR3JvdXA6bHkscG9zaXRpb246ImJlZm9yZSJ9LHtrZXlzOltbIk1ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSkscnVuT25seUlmOigpPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSxyZWxhdGl2ZVRvR3JvdXA6bHkscG9zaXRpb246ImJlZm9yZSJ9LHtr''@;'; put 'put ''ZXlzOltbIkFsdCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxyZWxhdGl2ZVRvR3JvdXA6bHkscG9zaXRpb246ImJlZm9yZSJ9LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtdGhpcy5ob3QuY291bnRW''@;'; put 'put ''aXNpYmxlUm93cygpLDApfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQodGhpcy5ob3QuY291bnRWaXNpYmxlUm93cygpLDApfX0se2tleXM6W1siSG9tZSJdXSxjYWxsYmFjazooZixfKT0+e2xldFtUXT1fO1lu''@;'; put 'put ''ZShULHRoaXMuVEVYVEFSRUEpfX0se2tleXM6W1siRW5kIl1dLGNhbGxiYWNrOihmLF8pPT57bGV0W1RdPV87WW5lKFQsdGhpcy5URVhUQVJFQSl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJaIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOigpPT57dGhpcy5ob3QuX3JlZ2lzdGVy''@;'; put 'put ''VGltZW91dCgoKT0+e3RoaXMuYXV0b1Jlc2l6ZS5yZXNpemUoKX0sMTApfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJaIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOigpPT57dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuYXV0b1Jlc2l6ZS5yZXNp''@;'; put 'put ''emUoKX0sMTApfX1dLHtydW5Pbmx5SWY6KCk9PktpKHRoaXMuaG90LmdldFNlbGVjdGVkKCkpLGdyb3VwOlduZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO2EucmVtb3ZlU2hvcnRjdXRz''@;'; put 'put ''QnlHcm91cChnayksYS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFduZSksYS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEdCKX1vbkFmdGVyRG9jdW1lbnRLZXlEb3duKGwpey0xPT09W2NvLkFSUk9XX1VQLGNvLkFSUk9XX1JJR0hULGNvLkFSUk9XX0RPV04sY28uQVJST1dfTEVGVF0uaW5kZXhP''@;'; put 'put ''ZihsLmtleUNvZGUpJiZ0aGlzLmF1dG9SZXNpemUucmVzaXplKFN0cmluZy5mcm9tQ2hhckNvZGUobC5rZXlDb2RlKSl9fWZ1bmN0aW9uIFN5KGMsbCxhLGQsaCxmLF8pe2NvbnN0IFQ9W10sVz1bXTtfLmNsYXNzTmFtZSYmcGkobCxfLmNsYXNzTmFtZSksXy5yZWFkT25seSYmVC5wdXNoKF8u''@;'; put 'put ''cmVhZE9ubHlDZWxsQ2xhc3NOYW1lKSwhMT09PV8udmFsaWQmJl8uaW52YWxpZENlbGxDbGFzc05hbWU/VC5wdXNoKF8uaW52YWxpZENlbGxDbGFzc05hbWUpOlcucHVzaChfLmludmFsaWRDZWxsQ2xhc3NOYW1lKSwhMT09PV8ud29yZFdyYXAmJl8ubm9Xb3JkV3JhcENsYXNzTmFtZSYmVC5w''@;'; put 'put ''dXNoKF8ubm9Xb3JkV3JhcENsYXNzTmFtZSksIWYmJl8ucGxhY2Vob2xkZXImJlQucHVzaChfLnBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZSksV28obCxXKSxwaShsLFQpfWZ1bmN0aW9uICRwKGMsbCxhLGQsaCxmLF8pe1N5LmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLF9dKTtsZXQgVD1mO2lm''@;'; put 'put ''KCFUJiZfLnBsYWNlaG9sZGVyJiYoVD1fLnBsYWNlaG9sZGVyKSxUPV9sKFQpLF8udHJpbVdoaXRlc3BhY2UmJihUPVQudHJpbSgpKSxfLnJlbmRlcmVyVGVtcGxhdGUpe2cyKGwpO2NvbnN0IFc9Yy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEVNUExBVEUiKTtXLnNldEF0dHJpYnV0''@;'; put 'put ''ZSgiYmluZCIsInt7fX0iKSxXLmlubmVySFRNTD1fLnJlbmRlcmVyVGVtcGxhdGUsSFRNTFRlbXBsYXRlRWxlbWVudC5kZWNvcmF0ZShXKSxXLm1vZGVsPWMuZ2V0U291cmNlRGF0YUF0Um93KGEpLGwuYXBwZW5kQ2hpbGQoVyl9ZWxzZSBqcChsLFQpfVN5LlJFTkRFUkVSX1RZUEU9ImJhc2Ui''@;'; put 'put ''LCRwLlJFTkRFUkVSX1RZUEU9InRleHQiO2NvbnN0IEduZT17Q0VMTF9UWVBFOiJ0ZXh0IixlZGl0b3I6a2cscmVuZGVyZXI6JHB9O2Z1bmN0aW9uIHkyKGMsbCl7Y29uc3QgYT1uZXcgV0IoYyxsfHx7fSxuVik7cmV0dXJuIGEuaW5pdCgpLGF9YjIoR25lKSx5Mi5lZGl0b3JzPXtCYXNlRWRp''@;'; put 'put ''dG9yOnY3fSx5Mi5Db3JlPWZ1bmN0aW9uKGMpe3JldHVybiBuZXcgV0IoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sblYpfSx5Mi5EZWZhdWx0U2V0dGluZ3M9SG5lKCkseTIuaG9va3M9c28uZ2V0U2luZ2xldG9uKCkseTIuQ2Vs''@;'; put 'put ''bENvb3Jkcz1Dayx5Mi5DZWxsUmFuZ2U9Wk4seTIucGFja2FnZU5hbWU9ImhhbmRzb250YWJsZSIseTIuYnVpbGREYXRlPSIzMS8wOC8yMDIzIDA4OjIzOjMzIix5Mi52ZXJzaW9uPSIxMy4xLjAiLHkyLmxhbmd1YWdlcz17ZGljdGlvbmFyeUtleXM6elRlLGdldExhbmd1YWdlRGljdGlvbmFy''@;'; put 'put ''eTpEbmUsZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzOmZ1bmN0aW9uIEdUZSgpe3JldHVybiBZVGUoKX0scmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnk6VG5lLGdldFRyYW5zbGF0ZWRQaHJhc2U6SW5lfTtjb25zdCBtcz15MixpSWU9WyJjb250YWluZXIiXSwkQj1uZXcgTWFwLCRuZT0iVGhl''@;'; put 'put ''IEhhbmRzb250YWJsZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudCB3YXMgZGVzdHJveWVkIGFuZCBjYW5ub3QgYmUgdXNlZCBwcm9wZXJseS4iO2xldCBBZz0oKCk9PntjbGFzcyBje2dldEluc3RhbmNlKGEpe2NvbnN0IGQ9JEIuZ2V0KGEpO3JldHVybiBkLmlzRGVzdHJveWVk''@;'; put 'put ''Pyhjb25zb2xlLndhcm4oJG5lKSxudWxsKTpkfXJlZ2lzdGVySW5zdGFuY2UoYSxkKXtyZXR1cm4gJEIuc2V0KGEsZCl9cmVtb3ZlSW5zdGFuY2UoYSl7cmV0dXJuICRCLmRlbGV0ZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1''@;'; put 'put ''cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qgb0llPU9iamVjdC5rZXlzKG1zLkRlZmF1bHRTZXR0aW5ncykscW5lPW1zLmhvb2tzLmdldFJlZ2lzdGVyZWQoKTtsZXQgS25lPSgoKT0+e2NsYXNzIGN7bWVyZ2VTZXR0aW5ncyhhKXtjb25zdCBkPSJz''@;'; put 'put ''ZXR0aW5ncyJpbiBhJiYib2JqZWN0Ij09dHlwZW9mIGEuc2V0dGluZ3MsaD1kP2Euc2V0dGluZ3M6e307cmV0dXJuIHFuZS5jb25jYXQob0llKS5mb3JFYWNoKF89Pntjb25zdCBUPXFuZS5pbmRleE9mKF8pPi0xO2xldCBXO2QmJlQmJihXPWEuc2V0dGluZ3NbX10pLHZvaWQgMCE9PWFbX10m''@;'; put 'put ''JihXPWFbX10pLHZvaWQgMCE9PVcmJihoW19dPSJuZ1pvbmUiaW4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFcmJlQ/ZnVuY3Rpb24oLi4uaWUpe3JldHVybiBhLm5nWm9uZS5ydW4oKCk9PlcuYXBwbHkodGhpcyxpZSkpfTpXKX0pLGh9cHJlcGFyZUNoYW5nZXMoYSl7Y29uc3QgZD17fTtyZXR1''@;'; put 'put ''cm4gT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmPT57YS5oYXNPd25Qcm9wZXJ0eShmKSYmKGRbZl09YVtmXS5jdXJyZW50VmFsdWUpfSksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMu''@;'; put 'put ''XHUwMjc1ZmFjfSksY30pKCksTXk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5faG90VGFibGVSZWdpc3RlcmVyPWEsdGhpcy5faG90U2V0dGluZ3NSZXNvbHZlcj1kLHRoaXMubmdab25lPWgsdGhpcy5fX2hvdEluc3RhbmNlPW51bGwsdGhpcy5jb2x1bW5zQ29tcG9u''@;'; put 'put ''ZW50cz1bXSx0aGlzLmhvdElkPSIifWdldCBob3RJbnN0YW5jZSgpe3JldHVybiF0aGlzLl9faG90SW5zdGFuY2V8fHRoaXMuX19ob3RJbnN0YW5jZSYmIXRoaXMuX19ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZD90aGlzLl9faG90SW5zdGFuY2U6KHRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5y''@;'; put 'put ''ZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKSxjb25zb2xlLndhcm4oJG5lKSxudWxsKX1zZXQgaG90SW5zdGFuY2UoYSl7dGhpcy5fX2hvdEluc3RhbmNlPWF9bmdBZnRlclZpZXdJbml0KCl7Y29uc3QgYT10aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3ModGhpcyk7aWYo''@;'; put 'put ''dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCl7Y29uc3QgZD1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goaD0+e2QucHVzaCh0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3MoaCkpfSksYS5jb2x1bW5zPWR9dGhpcy5uZ1pvbmUucnVuT3V0c2lk''@;'; put 'put ''ZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlPW5ldyBtcy5Db3JlKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5ob3RJZCYmdGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlZ2lzdGVySW5zdGFuY2UodGhpcy5ob3RJZCx0aGlzLmhvdEluc3RhbmNlKSx0aGlzLmhv''@;'; put 'put ''dEluc3RhbmNlLmluaXQoKX0pfW5nT25DaGFuZ2VzKGEpe2lmKG51bGw9PT10aGlzLmhvdEluc3RhbmNlKXJldHVybjtjb25zdCBkPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIucHJlcGFyZUNoYW5nZXMoYSk7dGhpcy51cGRhdGVIb3RUYWJsZShkKX1uZ09uRGVzdHJveSgpe3RoaXMubmda''@;'; put 'put ''b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS5kZXN0cm95KCl9KSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVtb3ZlSW5zdGFuY2UodGhpcy5ob3RJZCl9dXBkYXRlSG90VGFibGUoYSl7dGhpcy5ob3RJ''@;'; put 'put ''bnN0YW5jZSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKGEsITEpfSl9b25BZnRlckNvbHVtbnNDaGFuZ2UoKXtpZih2b2lkIDAhPT10aGlzLmNvbHVtbnNDb21wb25lbnRzJiZ0aGlzLmNvbHVtbnNDb21wb25lbnRz''@;'; put 'put ''Lmxlbmd0aD4wKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxlKHtjb2x1bW5zOmF9KX19b25BZnRlckNvbHVtbnNOdW1iZXJD''@;'; put 'put ''aGFuZ2UoKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjAmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChkPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhkKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxlKHtjb2x1''@;'; put 'put ''bW5zOmF9KX1hZGRDb2x1bW4oYSl7dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5wdXNoKGEpLHRoaXMub25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKX1yZW1vdmVDb2x1bW4oYSl7Y29uc3QgZD10aGlzLmNvbHVtbnNDb21wb25lbnRzLmluZGV4T2YoYSk7dGhpcy5jb2x1bW5zQ29tcG9uZW50''@;'; put 'put ''cy5zcGxpY2UoZCwxKSx0aGlzLm9uQWZ0ZXJDb2x1bW5zTnVtYmVyQ2hhbmdlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFnKSx0dChLbmUpLHR0KE5vKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImhvdC10YWJs''@;'; put 'put ''ZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKGlJZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmNvbnRhaW5lcj1oLmZpcnN0KX19LGlucHV0czp7c2V0dGluZ3M6InNldHRpbmdzIixob3RJZDoiaG90SWQiLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToiYWN0aXZl''@;'; put 'put ''SGVhZGVyQ2xhc3NOYW1lIixhbGxvd0VtcHR5OiJhbGxvd0VtcHR5IixhbGxvd0h0bWw6ImFsbG93SHRtbCIsYWxsb3dJbnNlcnRDb2x1bW46ImFsbG93SW5zZXJ0Q29sdW1uIixhbGxvd0luc2VydFJvdzoiYWxsb3dJbnNlcnRSb3ciLGFsbG93SW52YWxpZDoiYWxsb3dJbnZhbGlkIixhbGxv''@;'; put 'put ''d1JlbW92ZUNvbHVtbjoiYWxsb3dSZW1vdmVDb2x1bW4iLGFsbG93UmVtb3ZlUm93OiJhbGxvd1JlbW92ZVJvdyIsYXV0b0NvbHVtblNpemU6ImF1dG9Db2x1bW5TaXplIixhdXRvUm93U2l6ZToiYXV0b1Jvd1NpemUiLGF1dG9XcmFwQ29sOiJhdXRvV3JhcENvbCIsYXV0b1dyYXBSb3c6ImF1''@;'; put 'put ''dG9XcmFwUm93IixiaW5kUm93c1dpdGhIZWFkZXJzOiJiaW5kUm93c1dpdGhIZWFkZXJzIixjZWxsOiJjZWxsIixjZWxsczoiY2VsbHMiLGNoZWNrZWRUZW1wbGF0ZToiY2hlY2tlZFRlbXBsYXRlIixjbGFzc05hbWU6ImNsYXNzTmFtZSIsY29sSGVhZGVyczoiY29sSGVhZGVycyIsY29sbGFw''@;'; put 'put ''c2libGVDb2x1bW5zOiJjb2xsYXBzaWJsZUNvbHVtbnMiLGNvbHVtbkhlYWRlckhlaWdodDoiY29sdW1uSGVhZGVySGVpZ2h0Iixjb2x1bW5zOiJjb2x1bW5zIixjb2x1bW5Tb3J0aW5nOiJjb2x1bW5Tb3J0aW5nIixjb2x1bW5TdW1tYXJ5OiJjb2x1bW5TdW1tYXJ5Iixjb2xXaWR0aHM6ImNv''@;'; put 'put ''bFdpZHRocyIsY29tbWVudGVkQ2VsbENsYXNzTmFtZToiY29tbWVudGVkQ2VsbENsYXNzTmFtZSIsY29tbWVudHM6ImNvbW1lbnRzIixjb250ZXh0TWVudToiY29udGV4dE1lbnUiLGNvcHlhYmxlOiJjb3B5YWJsZSIsY29weVBhc3RlOiJjb3B5UGFzdGUiLGNvcnJlY3RGb3JtYXQ6ImNvcnJl''@;'; put 'put ''Y3RGb3JtYXQiLGN1cnJlbnRDb2xDbGFzc05hbWU6ImN1cnJlbnRDb2xDbGFzc05hbWUiLGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1cnJlbnRIZWFkZXJDbGFzc05hbWUiLGN1cnJlbnRSb3dDbGFzc05hbWU6ImN1cnJlbnRSb3dDbGFzc05hbWUiLGN1c3RvbUJvcmRlcnM6ImN1c3RvbUJv''@;'; put 'put ''cmRlcnMiLGRhdGE6ImRhdGEiLGRhdGFTY2hlbWE6ImRhdGFTY2hlbWEiLGRhdGVGb3JtYXQ6ImRhdGVGb3JtYXQiLGRhdGVQaWNrZXJDb25maWc6ImRhdGVQaWNrZXJDb25maWciLGRlZmF1bHREYXRlOiJkZWZhdWx0RGF0ZSIsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiZGlzYWJsZVZpc3Vh''@;'; put 'put ''bFNlbGVjdGlvbiIsZHJhZ1RvU2Nyb2xsOiJkcmFnVG9TY3JvbGwiLGRyb3Bkb3duTWVudToiZHJvcGRvd25NZW51IixlZGl0b3I6ImVkaXRvciIsZW50ZXJCZWdpbnNFZGl0aW5nOiJlbnRlckJlZ2luc0VkaXRpbmciLGVudGVyTW92ZXM6ImVudGVyTW92ZXMiLGZpbGxIYW5kbGU6ImZpbGxI''@;'; put 'put ''YW5kbGUiLGZpbHRlcjoiZmlsdGVyIixmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiJmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIixmaWx0ZXJzOiJmaWx0ZXJzIixmaXhlZENvbHVtbnNMZWZ0OiJmaXhlZENvbHVtbnNMZWZ0IixmaXhlZENvbHVtbnNTdGFydDoiZml4ZWRDb2x1bW5zU3RhcnQiLGZp''@;'; put 'put ''eGVkUm93c0JvdHRvbToiZml4ZWRSb3dzQm90dG9tIixmaXhlZFJvd3NUb3A6ImZpeGVkUm93c1RvcCIsZm9ybXVsYXM6ImZvcm11bGFzIixmcmFnbWVudFNlbGVjdGlvbjoiZnJhZ21lbnRTZWxlY3Rpb24iLGhlaWdodDoiaGVpZ2h0IixoaWRkZW5Db2x1bW5zOiJoaWRkZW5Db2x1bW5zIixo''@;'; put 'put ''aWRkZW5Sb3dzOiJoaWRkZW5Sb3dzIixpbnZhbGlkQ2VsbENsYXNzTmFtZToiaW52YWxpZENlbGxDbGFzc05hbWUiLGxhYmVsOiJsYWJlbCIsbGFuZ3VhZ2U6Imxhbmd1YWdlIixsYXlvdXREaXJlY3Rpb246ImxheW91dERpcmVjdGlvbiIsbGljZW5zZUtleToibGljZW5zZUtleSIsbG9jYWxl''@;'; put 'put ''OiJsb2NhbGUiLG1hbnVhbENvbHVtbkZyZWV6ZToibWFudWFsQ29sdW1uRnJlZXplIixtYW51YWxDb2x1bW5Nb3ZlOiJtYW51YWxDb2x1bW5Nb3ZlIixtYW51YWxDb2x1bW5SZXNpemU6Im1hbnVhbENvbHVtblJlc2l6ZSIsbWFudWFsUm93TW92ZToibWFudWFsUm93TW92ZSIsbWFudWFsUm93''@;'; put 'put ''UmVzaXplOiJtYW51YWxSb3dSZXNpemUiLG1heENvbHM6Im1heENvbHMiLG1heFJvd3M6Im1heFJvd3MiLG1lcmdlQ2VsbHM6Im1lcmdlQ2VsbHMiLG1pbkNvbHM6Im1pbkNvbHMiLG1pblJvd3M6Im1pblJvd3MiLG1pblNwYXJlQ29sczoibWluU3BhcmVDb2xzIixtaW5TcGFyZVJvd3M6Im1p''@;'; put 'put ''blNwYXJlUm93cyIsbXVsdGlDb2x1bW5Tb3J0aW5nOiJtdWx0aUNvbHVtblNvcnRpbmciLG5lc3RlZEhlYWRlcnM6Im5lc3RlZEhlYWRlcnMiLG5lc3RlZFJvd3M6Im5lc3RlZFJvd3MiLG5vV29yZFdyYXBDbGFzc05hbWU6Im5vV29yZFdyYXBDbGFzc05hbWUiLG51bWVyaWNGb3JtYXQ6Im51''@;'; put 'put ''bWVyaWNGb3JtYXQiLG9ic2VydmVET01WaXNpYmlsaXR5OiJvYnNlcnZlRE9NVmlzaWJpbGl0eSIsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiJvdXRzaWRlQ2xpY2tEZXNlbGVjdHMiLHBlcnNpc3RlbnRTdGF0ZToicGVyc2lzdGVudFN0YXRlIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHBs''@;'; put 'put ''YWNlaG9sZGVyQ2VsbENsYXNzTmFtZToicGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lIixwcmV2ZW50T3ZlcmZsb3c6InByZXZlbnRPdmVyZmxvdyIscHJldmVudFdoZWVsOiJwcmV2ZW50V2hlZWwiLHJlYWRPbmx5OiJyZWFkT25seSIscmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJyZWFkT25seUNl''@;'; put 'put ''bGxDbGFzc05hbWUiLHJlbmRlckFsbFJvd3M6InJlbmRlckFsbFJvd3MiLHJlbmRlcmVyOiJyZW5kZXJlciIscm93SGVhZGVyczoicm93SGVhZGVycyIscm93SGVhZGVyV2lkdGg6InJvd0hlYWRlcldpZHRoIixyb3dIZWlnaHRzOiJyb3dIZWlnaHRzIixzZWFyY2g6InNlYXJjaCIsc2VsZWN0''@;'; put 'put ''aW9uTW9kZToic2VsZWN0aW9uTW9kZSIsc2VsZWN0T3B0aW9uczoic2VsZWN0T3B0aW9ucyIsc2tpcENvbHVtbk9uUGFzdGU6InNraXBDb2x1bW5PblBhc3RlIixza2lwUm93T25QYXN0ZToic2tpcFJvd09uUGFzdGUiLHNvcnRCeVJlbGV2YW5jZToic29ydEJ5UmVsZXZhbmNlIixzb3VyY2U6''@;'; put 'put ''InNvdXJjZSIsc3RhcnRDb2xzOiJzdGFydENvbHMiLHN0YXJ0Um93czoic3RhcnRSb3dzIixzdHJldGNoSDoic3RyZXRjaEgiLHN0cmljdDoic3RyaWN0Iix0YWJsZUNsYXNzTmFtZToidGFibGVDbGFzc05hbWUiLHRhYk1vdmVzOiJ0YWJNb3ZlcyIsdGl0bGU6InRpdGxlIix0cmltRHJvcGRv''@;'; put 'put ''d246InRyaW1Ecm9wZG93biIsdHJpbVJvd3M6InRyaW1Sb3dzIix0cmltV2hpdGVzcGFjZToidHJpbVdoaXRlc3BhY2UiLHR5cGU6InR5cGUiLHVuY2hlY2tlZFRlbXBsYXRlOiJ1bmNoZWNrZWRUZW1wbGF0ZSIsdW5kbzoidW5kbyIsdmFsaWRhdG9yOiJ2YWxpZGF0b3IiLHZpZXdwb3J0Q29s''@;'; put 'put ''dW1uUmVuZGVyaW5nT2Zmc2V0OiJ2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldCIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6InZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iix2aXNpYmxlUm93czoidmlzaWJsZVJvd3MiLHdpZHRoOiJ3aWR0aCIsd29yZFdyYXA6IndvcmRXcmFw''@;'; put 'put ''IixhZnRlckFkZENoaWxkOiJhZnRlckFkZENoaWxkIixhZnRlckF1dG9maWxsOiJhZnRlckF1dG9maWxsIixhZnRlckJlZ2luRWRpdGluZzoiYWZ0ZXJCZWdpbkVkaXRpbmciLGFmdGVyQ2VsbE1ldGFSZXNldDoiYWZ0ZXJDZWxsTWV0YVJlc2V0IixhZnRlckNoYW5nZToiYWZ0ZXJDaGFuZ2Ui''@;'; put 'put ''LGFmdGVyQ2hhbmdlc09ic2VydmVkOiJhZnRlckNoYW5nZXNPYnNlcnZlZCIsYWZ0ZXJDb2x1bW5Db2xsYXBzZToiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJDb2x1bW5FeHBhbmQ6ImFmdGVyQ29sdW1uRXhwYW5kIixhZnRlckNvbHVtbkZyZWV6ZToiYWZ0ZXJDb2x1bW5GcmVlemUiLGFm''@;'; put 'put ''dGVyQ29sdW1uTW92ZToiYWZ0ZXJDb2x1bW5Nb3ZlIixhZnRlckNvbHVtblJlc2l6ZToiYWZ0ZXJDb2x1bW5SZXNpemUiLGFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2U6ImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLGFmdGVyQ29sdW1uU29ydDoiYWZ0ZXJDb2x1bW5Tb3J0IixhZnRlckNv''@;'; put 'put ''bHVtblVuZnJlZXplOiJhZnRlckNvbHVtblVuZnJlZXplIixhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnM6ImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYWZ0ZXJDb250ZXh0TWVudUhpZGU6ImFmdGVyQ29udGV4dE1lbnVIaWRlIixhZnRlckNvbnRleHRNZW51U2hvdzoi''@;'; put 'put ''YWZ0ZXJDb250ZXh0TWVudVNob3ciLGFmdGVyQ29weToiYWZ0ZXJDb3B5IixhZnRlckNvcHlMaW1pdDoiYWZ0ZXJDb3B5TGltaXQiLGFmdGVyQ3JlYXRlQ29sOiJhZnRlckNyZWF0ZUNvbCIsYWZ0ZXJDcmVhdGVSb3c6ImFmdGVyQ3JlYXRlUm93IixhZnRlckN1dDoiYWZ0ZXJDdXQiLGFmdGVy''@;'; put 'put ''RGVzZWxlY3Q6ImFmdGVyRGVzZWxlY3QiLGFmdGVyRGVzdHJveToiYWZ0ZXJEZXN0cm95IixhZnRlckRldGFjaENoaWxkOiJhZnRlckRldGFjaENoaWxkIixhZnRlckRvY3VtZW50S2V5RG93bjoiYWZ0ZXJEb2N1bWVudEtleURvd24iLGFmdGVyRHJhd1NlbGVjdGlvbjoiYWZ0ZXJEcmF3U2Vs''@;'; put 'put ''ZWN0aW9uIixhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zOiJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixhZnRlckRyb3Bkb3duTWVudUhpZGU6ImFmdGVyRHJvcGRvd25NZW51SGlkZSIsYWZ0ZXJEcm9wZG93bk1lbnVTaG93OiJhZnRlckRyb3Bkb3duTWVudVNob3ci''@;'; put 'put ''LGFmdGVyRmlsdGVyOiJhZnRlckZpbHRlciIsYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZToiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYWZ0ZXJHZXRDZWxsTWV0YToiYWZ0ZXJHZXRDZWxsTWV0YSIsYWZ0ZXJHZXRDb2xIZWFkZXI6ImFmdGVyR2V0Q29sSGVhZGVyIixhZnRlckdldENv''@;'; put 'put ''bHVtbkhlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGFmdGVyR2V0Um93SGVhZGVyOiJhZnRlckdldFJvd0hlYWRlciIsYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnM6ImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixhZnRlckhpZGVDb2x1bW5zOiJh''@;'; put 'put ''ZnRlckhpZGVDb2x1bW5zIixhZnRlckhpZGVSb3dzOiJhZnRlckhpZGVSb3dzIixhZnRlckluaXQ6ImFmdGVySW5pdCIsYWZ0ZXJMYW5ndWFnZUNoYW5nZToiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsYWZ0ZXJMaXN0ZW46ImFmdGVyTGlzdGVuIixhZnRlckxvYWREYXRhOiJhZnRlckxvYWREYXRh''@;'; put 'put ''IixhZnRlck1lcmdlQ2VsbHM6ImFmdGVyTWVyZ2VDZWxscyIsYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIixhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixhZnRlck1vbWVudHVtU2Nyb2xsOiJhZnRl''@;'; put 'put ''ck1vbWVudHVtU2Nyb2xsIixhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkOiJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYWZ0ZXJPbkNlbGxDb250ZXh0TWVudToiYWZ0ZXJPbkNlbGxD''@;'; put 'put ''b250ZXh0TWVudSIsYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljazoiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd246ImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixhZnRlck9uQ2VsbE1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxNb3VzZURvd24i''@;'; put 'put ''LGFmdGVyT25DZWxsTW91c2VPdXQ6ImFmdGVyT25DZWxsTW91c2VPdXQiLGFmdGVyT25DZWxsTW91c2VPdmVyOiJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsYWZ0ZXJPbkNlbGxNb3VzZVVwOiJhZnRlck9uQ2VsbE1vdXNlVXAiLGFmdGVyUGFzdGU6ImFmdGVyUGFzdGUiLGFmdGVyUGx1Z2luc0lu''@;'; put 'put ''aXRpYWxpemVkOiJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsYWZ0ZXJSZWRvOiJhZnRlclJlZG8iLGFmdGVyUmVkb1N0YWNrQ2hhbmdlOiJhZnRlclJlZG9TdGFja0NoYW5nZSIsYWZ0ZXJSZWZyZXNoRGltZW5zaW9uczoiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIsYWZ0ZXJSZW1vdmVDZWxs''@;'; put 'put ''TWV0YToiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsYWZ0ZXJSZW1vdmVDb2w6ImFmdGVyUmVtb3ZlQ29sIixhZnRlclJlbW92ZVJvdzoiYWZ0ZXJSZW1vdmVSb3ciLGFmdGVyUmVuZGVyOiJhZnRlclJlbmRlciIsYWZ0ZXJSZW5kZXJlcjoiYWZ0ZXJSZW5kZXJlciIsYWZ0ZXJSb3dNb3ZlOiJhZnRl''@;'; put 'put ''clJvd01vdmUiLGFmdGVyUm93UmVzaXplOiJhZnRlclJvd1Jlc2l6ZSIsYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZToiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHk6ImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IixhZnRlclNjcm9sbFZlcnRpY2FsbHk6ImFm''@;'; put 'put ''dGVyU2Nyb2xsVmVydGljYWxseSIsYWZ0ZXJTZWxlY3Rpb246ImFmdGVyU2VsZWN0aW9uIixhZnRlclNlbGVjdGlvbkJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLGFmdGVyU2VsZWN0aW9uRW5kOiJhZnRlclNlbGVjdGlvbkVuZCIsYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3A6ImFmdGVy''@;'; put 'put ''U2VsZWN0aW9uRW5kQnlQcm9wIixhZnRlclNldENlbGxNZXRhOiJhZnRlclNldENlbGxNZXRhIixhZnRlclNldERhdGFBdENlbGw6ImFmdGVyU2V0RGF0YUF0Q2VsbCIsYWZ0ZXJTZXREYXRhQXRSb3dQcm9wOiJhZnRlclNldERhdGFBdFJvd1Byb3AiLGFmdGVyU2V0U291cmNlRGF0YUF0Q2Vs''@;'; put 'put ''bDoiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixhZnRlclNoZWV0QWRkZWQ6ImFmdGVyU2hlZXRBZGRlZCIsYWZ0ZXJTaGVldFJlbmFtZWQ6ImFmdGVyU2hlZXRSZW5hbWVkIixhZnRlclNoZWV0UmVtb3ZlZDoiYWZ0ZXJTaGVldFJlbW92ZWQiLGFmdGVyVHJpbVJvdzoiYWZ0ZXJUcmltUm93''@;'; put 'put ''IixhZnRlclVuZG86ImFmdGVyVW5kbyIsYWZ0ZXJVbmRvU3RhY2tDaGFuZ2U6ImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixhZnRlclVuaGlkZUNvbHVtbnM6ImFmdGVyVW5oaWRlQ29sdW1ucyIsYWZ0ZXJVbmhpZGVSb3dzOiJhZnRlclVuaGlkZVJvd3MiLGFmdGVyVW5saXN0ZW46ImFmdGVyVW5s''@;'; put 'put ''aXN0ZW4iLGFmdGVyVW5tZXJnZUNlbGxzOiJhZnRlclVubWVyZ2VDZWxscyIsYWZ0ZXJVbnRyaW1Sb3c6ImFmdGVyVW50cmltUm93IixhZnRlclVwZGF0ZURhdGE6ImFmdGVyVXBkYXRlRGF0YSIsYWZ0ZXJVcGRhdGVTZXR0aW5nczoiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsYWZ0ZXJWYWxpZGF0''@;'; put 'put ''ZToiYWZ0ZXJWYWxpZGF0ZSIsYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZToiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZToiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlk''@;'; put 'put ''ZSIsYWZ0ZXJWaWV3UmVuZGVyOiJhZnRlclZpZXdSZW5kZXIiLGJlZm9yZUFkZENoaWxkOiJiZWZvcmVBZGRDaGlsZCIsYmVmb3JlQXV0b2ZpbGw6ImJlZm9yZUF1dG9maWxsIixiZWZvcmVDZWxsQWxpZ25tZW50OiJiZWZvcmVDZWxsQWxpZ25tZW50IixiZWZvcmVDaGFuZ2U6ImJlZm9yZUNo''@;'; put 'put ''YW5nZSIsYmVmb3JlQ2hhbmdlUmVuZGVyOiJiZWZvcmVDaGFuZ2VSZW5kZXIiLGJlZm9yZUNvbHVtbkNvbGxhcHNlOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYmVmb3JlQ29sdW1uRXhwYW5kOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGJlZm9yZUNvbHVtbkZyZWV6ZToiYmVmb3JlQ29sdW1uRnJl''@;'; put 'put ''ZXplIixiZWZvcmVDb2x1bW5Nb3ZlOiJiZWZvcmVDb2x1bW5Nb3ZlIixiZWZvcmVDb2x1bW5SZXNpemU6ImJlZm9yZUNvbHVtblJlc2l6ZSIsYmVmb3JlQ29sdW1uU29ydDoiYmVmb3JlQ29sdW1uU29ydCIsYmVmb3JlQ29sdW1uVW5mcmVlemU6ImJlZm9yZUNvbHVtblVuZnJlZXplIixiZWZv''@;'; put 'put ''cmVDb250ZXh0TWVudVNldEl0ZW1zOiJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIixiZWZvcmVDb250ZXh0TWVudVNob3c6ImJlZm9yZUNvbnRleHRNZW51U2hvdyIsYmVmb3JlQ29weToiYmVmb3JlQ29weSIsYmVmb3JlQ3JlYXRlQ29sOiJiZWZvcmVDcmVhdGVDb2wiLGJlZm9yZUNyZWF0''@;'; put 'put ''ZVJvdzoiYmVmb3JlQ3JlYXRlUm93IixiZWZvcmVDdXQ6ImJlZm9yZUN1dCIsYmVmb3JlRGV0YWNoQ2hpbGQ6ImJlZm9yZURldGFjaENoaWxkIixiZWZvcmVEcmF3Qm9yZGVyczoiYmVmb3JlRHJhd0JvcmRlcnMiLGJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zOiJiZWZvcmVEcm9wZG93bk1l''@;'; put 'put ''bnVTZXRJdGVtcyIsYmVmb3JlRHJvcGRvd25NZW51U2hvdzoiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsYmVmb3JlRmlsdGVyOiJiZWZvcmVGaWx0ZXIiLGJlZm9yZUdldENlbGxNZXRhOiJiZWZvcmVHZXRDZWxsTWV0YSIsYmVmb3JlSGlkZUNvbHVtbnM6ImJlZm9yZUhpZGVDb2x1bW5zIixi''@;'; put 'put ''ZWZvcmVIaWRlUm93czoiYmVmb3JlSGlkZVJvd3MiLGJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6ImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsYmVmb3JlSW5pdDoi''@;'; put 'put ''YmVmb3JlSW5pdCIsYmVmb3JlSW5pdFdhbGtvbnRhYmxlOiJiZWZvcmVJbml0V2Fsa29udGFibGUiLGJlZm9yZUtleURvd246ImJlZm9yZUtleURvd24iLGJlZm9yZUxhbmd1YWdlQ2hhbmdlOiJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsYmVmb3JlTG9hZERhdGE6ImJlZm9yZUxvYWREYXRhIixi''@;'; put 'put ''ZWZvcmVNZXJnZUNlbGxzOiJiZWZvcmVNZXJnZUNlbGxzIixiZWZvcmVPbkNlbGxDb250ZXh0TWVudToiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLGJlZm9yZU9uQ2VsbE1vdXNlRG93bjoiYmVmb3JlT25DZWxsTW91c2VEb3duIixiZWZvcmVPbkNlbGxNb3VzZU91dDoiYmVmb3JlT25DZWxs''@;'; put 'put ''TW91c2VPdXQiLGJlZm9yZU9uQ2VsbE1vdXNlT3ZlcjoiYmVmb3JlT25DZWxsTW91c2VPdmVyIixiZWZvcmVPbkNlbGxNb3VzZVVwOiJiZWZvcmVPbkNlbGxNb3VzZVVwIixiZWZvcmVQYXN0ZToiYmVmb3JlUGFzdGUiLGJlZm9yZVJlZG86ImJlZm9yZVJlZG8iLGJlZm9yZVJlZG9TdGFja0No''@;'; put 'put ''YW5nZToiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixiZWZvcmVSZWZyZXNoRGltZW5zaW9uczoiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLGJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOiJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsYmVmb3JlUmVtb3ZlQ2VsbE1ldGE6ImJlZm9yZVJl''@;'; put 'put ''bW92ZUNlbGxNZXRhIixiZWZvcmVSZW1vdmVDb2w6ImJlZm9yZVJlbW92ZUNvbCIsYmVmb3JlUmVtb3ZlUm93OiJiZWZvcmVSZW1vdmVSb3ciLGJlZm9yZVJlbmRlcjoiYmVmb3JlUmVuZGVyIixiZWZvcmVSZW5kZXJlcjoiYmVmb3JlUmVuZGVyZXIiLGJlZm9yZVJvd01vdmU6ImJlZm9yZVJv''@;'; put 'put ''d01vdmUiLGJlZm9yZVJvd1Jlc2l6ZToiYmVmb3JlUm93UmVzaXplIixiZWZvcmVTZXRDZWxsTWV0YToiYmVmb3JlU2V0Q2VsbE1ldGEiLGJlZm9yZVNldFJhbmdlRW5kOiJiZWZvcmVTZXRSYW5nZUVuZCIsYmVmb3JlU2V0UmFuZ2VTdGFydDoiYmVmb3JlU2V0UmFuZ2VTdGFydCIsYmVmb3Jl''@;'; put 'put ''U2V0UmFuZ2VTdGFydE9ubHk6ImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IixiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6ImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsYmVmb3JlVG91Y2hTY3JvbGw6ImJlZm9yZVRvdWNoU2Nyb2xsIixiZWZvcmVUcmltUm93OiJiZWZvcmVUcmlt''@;'; put 'put ''Um93IixiZWZvcmVVbmRvOiJiZWZvcmVVbmRvIixiZWZvcmVVbmRvU3RhY2tDaGFuZ2U6ImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsYmVmb3JlVW5oaWRlQ29sdW1uczoiYmVmb3JlVW5oaWRlQ29sdW1ucyIsYmVmb3JlVW5oaWRlUm93czoiYmVmb3JlVW5oaWRlUm93cyIsYmVmb3JlVW5tZXJn''@;'; put 'put ''ZUNlbGxzOiJiZWZvcmVVbm1lcmdlQ2VsbHMiLGJlZm9yZVVudHJpbVJvdzoiYmVmb3JlVW50cmltUm93IixiZWZvcmVVcGRhdGVEYXRhOiJiZWZvcmVVcGRhdGVEYXRhIixiZWZvcmVWYWxpZGF0ZToiYmVmb3JlVmFsaWRhdGUiLGJlZm9yZVZhbHVlUmVuZGVyOiJiZWZvcmVWYWx1ZVJlbmRl''@;'; put 'put ''ciIsYmVmb3JlVmlld1JlbmRlcjoiYmVmb3JlVmlld1JlbmRlciIsY29uc3RydWN0OiJjb25zdHJ1Y3QiLGluaXQ6ImluaXQiLG1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZDoibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixtb2RpZnlBdXRvZmlsbFJhbmdlOiJtb2RpZnlBdXRvZmlsbFJhbmdl''@;'; put 'put ''Iixtb2RpZnlDb2xIZWFkZXI6Im1vZGlmeUNvbEhlYWRlciIsbW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0OiJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLG1vZGlmeUNvbHVtbkhlYWRlclZhbHVlOiJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsbW9kaWZ5Q29sV2lkdGg6Im1vZGlmeUNvbFdp''@;'; put 'put ''ZHRoIixtb2RpZnlDb3B5YWJsZVJhbmdlOiJtb2RpZnlDb3B5YWJsZVJhbmdlIixtb2RpZnlEYXRhOiJtb2RpZnlEYXRhIixtb2RpZnlHZXRDZWxsQ29vcmRzOiJtb2RpZnlHZXRDZWxsQ29vcmRzIixtb2RpZnlSb3dEYXRhOiJtb2RpZnlSb3dEYXRhIixtb2RpZnlSb3dIZWFkZXI6Im1vZGlm''@;'; put 'put ''eVJvd0hlYWRlciIsbW9kaWZ5Um93SGVhZGVyV2lkdGg6Im1vZGlmeVJvd0hlYWRlcldpZHRoIixtb2RpZnlSb3dIZWlnaHQ6Im1vZGlmeVJvd0hlaWdodCIsbW9kaWZ5U291cmNlRGF0YToibW9kaWZ5U291cmNlRGF0YSIsbW9kaWZ5VHJhbnNmb3JtRW5kOiJtb2RpZnlUcmFuc2Zvcm1FbmQi''@;'; put 'put ''LG1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJtb2RpZnlUcmFuc2Zvcm1TdGFydCIscGVyc2lzdGVudFN0YXRlTG9hZDoicGVyc2lzdGVudFN0YXRlTG9hZCIscGVyc2lzdGVudFN0YXRlUmVzZXQ6InBlcnNpc3RlbnRTdGF0ZVJlc2V0IixwZXJzaXN0ZW50U3RhdGVTYXZlOiJwZXJzaXN0ZW50U3Rh''@;'; put 'put ''dGVTYXZlIn0sZmVhdHVyZXM6W3RpKFtBZyxLbmVdKSx2YV0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMywiaWQiXSxbImNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwiZGl2IiwwLDEpLDImYSYmUmUoImlkIixkLmhvdElkKX0sZW5jYXBzdWxhdGlv''@;'; put 'put ''bjoyfSksY30pKCksXzc9KCgpPT57Y2xhc3MgY3tzdGF0aWMgZm9yUm9vdCgpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbQWddfX19cmV0dXJuIGMudmVyc2lvbj0iMTMuMS4wIixjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7''@;'; put 'put ''dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2NvbnN0IFhuZT0iaGFuZHNvbnRhYmxlRWRpdG9yIjtjbGFzcyBxQiBleHRlbmRzIGtne3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iaGFuZHNvbnRhYmxlIn1vcGVuKCl7c3VwZXIub3BlbigpLHRoaXMuaHRFZGl0b3Im''@;'; put 'put ''JnRoaXMuaHRFZGl0b3IuZGVzdHJveSgpLCJub25lIj09PXRoaXMuaHRDb250YWluZXIuc3R5bGUuZGlzcGxheSYmKHRoaXMuaHRDb250YWluZXIuc3R5bGUuZGlzcGxheT0iIiksdGhpcy5odEVkaXRvcj1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5odENvbnRhaW5lcix0aGlzLmh0''@;'; put 'put ''T3B0aW9ucyksdGhpcy5odEVkaXRvci5pbml0KCksdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0P3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbCgwLDApOnRoaXMuaHRFZGl0b3IuZGVzZWxlY3RDZWxsKCksaXkodGhp''@;'; put 'put ''cy5URVhUQVJFQSwwLHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9Y2xvc2UoKXt0aGlzLmh0RWRpdG9yJiYodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZv''@;'; put 'put ''cmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKX1wcmVwYXJlKGwsYSxkLGgsZixfKXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZixfKTtjb25zdCBUPXRoaXMsVz17c3RhcnRSb3dzOjAsc3RhcnRDb2xzOjAsbWluUm93czowLG1pbkNvbHM6MCxjbGFzc05hbWU6Imxpc3Rib3giLGNvcHlQYXN0ZToh''@;'; put 'put ''MSxhdXRvQ29sdW1uU2l6ZTohMSxhdXRvUm93U2l6ZTohMSxyZWFkT25seTohMCxmaWxsSGFuZGxlOiExLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGFmdGVyT25DZWxsTW91c2VEb3duKGllLGdlKXtjb25zdCB3ZT10aGlzLmdldFNvdXJjZURhdGEoZ2Uucm93LGdlLmNvbCk7dm9p''@;'; put 'put ''ZCAwIT09d2UmJlQuc2V0VmFsdWUod2UpLFQuaW5zdGFuY2UuZGVzdHJveUVkaXRvcigpfSxwcmV2ZW50V2hlZWw6ITAsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9O3RoaXMuY2VsbFByb3BlcnRpZXMuaGFuZHNvbnRhYmxlJiZLbChXLF8uaGFuZHNvbnRh''@;'; put 'put ''YmxlKSx0aGlzLmh0T3B0aW9ucz1XfWJlZ2luRWRpdGluZyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vbkJlZ2luRWRpdGluZztkJiYhMT09PWQoKXx8c3VwZXIuYmVnaW5FZGl0aW5nKGwsYSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpO2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2wuY2xhc3NOYW1lPSJoYW5kc29udGFibGVFZGl0b3IiLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKGwpLHRoaXMuaHRDb250YWluZXI9bCx0aGlzLmFzc2lnbkhvb2tzKCl9ZmluaXNoRWRp''@;'; put 'put ''dGluZyhsLGEsZCl7aWYodGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5pc0xpc3RlbmluZygpJiZ0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmdldFNlbGVjdGVkTGFzdCgpKXtjb25zdCBoPXRoaXMuaHRFZGl0b3IuZ2V0SW5zdGFuY2UoKS5nZXRW''@;'; put 'put ''YWx1ZSgpO3ZvaWQgMCE9PWgmJnRoaXMuc2V0VmFsdWUoaCl9c3VwZXIuZmluaXNoRWRpdGluZyhsLGEsZCl9YXNzaWduSG9va3MoKXt0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5kZXN0cm95KCl9KX1yZWdpc3RlclNo''@;'; put 'put ''b3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIucmVnaXN0ZXJTaG9ydGN1dHMoKTtjb25zdCBoPShmLF8pPT57Y29uc3QgVD10aGlzLmh0RWRpdG9yLmdldEluc3RhbmNlKCk7aWYodm9pZCAwIT09ZiYmKGY8''@;'; put 'put ''MHx8VC5mbGlwcGVkJiZmPlQuY291bnRSb3dzKCktMT9ULmRlc2VsZWN0Q2VsbCgpOlQuc2VsZWN0Q2VsbChmLDApLFQuZ2V0RGF0YSgpLmxlbmd0aCkpcmV0dXJuIF8ucHJldmVudERlZmF1bHQoKSx2MihfKSx0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLlRFWFRBUkVBLmZvY3VzKCksITF9O2Eu''@;'; put 'put ''YWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOmY9Pntjb25zdCBfPXRoaXMuaHRFZGl0b3IuZ2V0SW5zdGFuY2UoKTtsZXQgVCxXO3JldHVybiFfLmdldFNlbGVjdGVkTGFzdCgpJiZfLmZsaXBwZWQ/VD1fLmNvdW50Um93cygpLTE6Xy5nZXRTZWxlY3RlZExhc3Qo''@;'; put 'put ''KSYmKF8uZmxpcHBlZD8oVz1fLmdldFNlbGVjdGVkTGFzdCgpWzBdLFQ9TWF0aC5tYXgoMCxXLTEpKTooVz1fLmdldFNlbGVjdGVkTGFzdCgpWzBdLFQ9Vy0xKSksaChULGYpfSxwcmV2ZW50RGVmYXVsdDohMX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOmY9Pntjb25zdCBfPXRo''@;'; put 'put ''aXMuaHRFZGl0b3IuZ2V0SW5zdGFuY2UoKTtsZXQgVCxXO2lmKF8uZ2V0U2VsZWN0ZWRMYXN0KCl8fF8uZmxpcHBlZCl7aWYoXy5nZXRTZWxlY3RlZExhc3QoKSlpZihfLmZsaXBwZWQpVD1fLmdldFNlbGVjdGVkTGFzdCgpWzBdKzE7ZWxzZSBpZighXy5mbGlwcGVkKXtjb25zdCBpZT1fLmNv''@;'; put 'put ''dW50Um93cygpLTE7Vz1fLmdldFNlbGVjdGVkTGFzdCgpWzBdLFQ9TWF0aC5taW4oaWUsVysxKX19ZWxzZSBUPTA7cmV0dXJuIGgoVCxmKX0scHJldmVudERlZmF1bHQ6ITF9XSx7Z3JvdXA6WG5lLHJlbGF0aXZlVG9Hcm91cDpnayxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9y''@;'; put 'put ''dGN1dHMoKXtzdXBlci51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChYbmUpfX1jb25zdCBLQj1uZXcgV2Vha01hcDtjbGFzcyBYQiBleHRlbmRzIHFCe3N0YXRpYyBn''@;'; put 'put ''ZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iYXV0b2NvbXBsZXRlIn1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBhSWUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGxJZShjKXt2YXIgbD1mdW5jdGlvbiBjSWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJl''@;'; put 'put ''dHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0''@;'; put 'put ''aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywic29ydEJ5UmVsZXZhbmNlIixmdW5jdGlvbihhLGQsaCl7Y29uc3QgZj1bXSxfPVtdLFQ9YS5sZW5ndGg7bGV0IGllLGdlLHdlLEVlLFc9ZC5sZW5ndGg7aWYoMD09PVQpe2Zvcih3ZT0wO3dlPFc7d2UrKylfLnB1c2go''@;'; put 'put ''d2UpO3JldHVybiBffWZvcih3ZT0wO3dlPFc7d2UrKyl7aWYoZ2U9dU4oX2woZFt3ZV0pKSxoKUVlPWdlLmluZGV4T2YoYSk7ZWxzZXtjb25zdCBaZT10aGlzLmNlbGxQcm9wZXJ0aWVzLmxvY2FsZTtFZT1nZS50b0xvY2FsZUxvd2VyQ2FzZShaZSkuaW5kZXhPZihhLnRvTG9jYWxlTG93ZXJD''@;'; put 'put ''YXNlKFplKSl9LTEhPT1FZSYmKGllPWdlLmxlbmd0aC1FZS1ULGYucHVzaCh7YmFzZUluZGV4OndlLGluZGV4OkVlLGNoYXJzTGVmdDppZSx2YWx1ZTpnZX0pKX1mb3IoZi5zb3J0KChaZSxvdCk9PntpZigtMT09PW90LmluZGV4KXJldHVybi0xO2lmKC0xPT09WmUuaW5kZXgpcmV0dXJuIDE7''@;'; put 'put ''aWYoWmUuaW5kZXg8b3QuaW5kZXgpcmV0dXJuLTE7aWYob3QuaW5kZXg8WmUuaW5kZXgpcmV0dXJuIDE7aWYoWmUuaW5kZXg9PT1vdC5pbmRleCl7aWYoWmUuY2hhcnNMZWZ0PG90LmNoYXJzTGVmdClyZXR1cm4tMTtpZihaZS5jaGFyc0xlZnQ+b3QuY2hhcnNMZWZ0KXJldHVybiAxfXJldHVy''@;'; put 'put ''biAwfSksd2U9MCxXPWYubGVuZ3RoO3dlPFc7d2UrKylfLnB1c2goZlt3ZV0uYmFzZUluZGV4KTtyZXR1cm4gX30pLHRoaXMucXVlcnk9bnVsbCx0aGlzLnN0cmlwcGVkQ2hvaWNlcz1bXSx0aGlzLnJhd0Nob2ljZXM9W10sS0Iuc2V0KHRoaXMse3NraXBPbmU6ITEsaXNNYWNPUzp0aGlzLmhv''@;'; put 'put ''dC5yb290V2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCJNYWMiKT4tMX0pfWdldFZhbHVlKCl7Y29uc3QgbD10aGlzLnJhd0Nob2ljZXMuZmluZChhPT50aGlzLnN0cmlwVmFsdWVJZk5lZWRlZChhKT09PXRoaXMuVEVYVEFSRUEudmFsdWUpO3JldHVybiBLaShsKT9sOnRoaXMu''@;'; put 'put ''VEVYVEFSRUEudmFsdWV9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHBpKHRoaXMuaHRDb250YWluZXIsImF1dG9jb21wbGV0ZUVkaXRvciIpLHBpKHRoaXMuaHRDb250YWluZXIsLTE9PT10aGlzLmhvdC5yb290V2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRl''@;'; put 'put ''eE9mKCJNYWMiKT8iIjoiaHRNYWNTY3JvbGwiKX1vcGVuKCl7Y29uc3QgbD1LQi5nZXQodGhpcyk7c3VwZXIub3BlbigpO2NvbnN0IGE9dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpLGQ9dm9pZCAwPT09dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd258fHRoaXMuY2VsbFByb3Bl''@;'; put 'put ''cnRpZXMudHJpbURyb3Bkb3duO3RoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXMoKTtsZXQgaD1JYygpOzA9PT1oJiZsLmlzTWFjT1MmJihoKz0xNSksdGhpcy5hZGRIb29rKCJiZWZvcmVLZXlEb3duIixmPT50aGlzLm9uQmVmb3JlS2V5RG93bihmKSksYS51cGRhdGVTZXR0''@;'; put 'put ''aW5ncyh7Y29sV2lkdGhzOmQ/W3dhKHRoaXMuVEVYVEFSRUEpLTJdOnZvaWQgMCx3aWR0aDpkP3dhKHRoaXMuVEVYVEFSRUEpK2g6dm9pZCAwLHJlbmRlcmVyOihmLF8sVCxXLGllLGdlLHdlKT0+eyRwKGYsXyxULFcsaWUsZ2Usd2UpO2NvbnN0e2ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6RWUs''@;'; put 'put ''YWxsb3dIdG1sOlplLGxvY2FsZTpvdH09dGhpcy5jZWxsUHJvcGVydGllcyxldD10aGlzLnF1ZXJ5O2xldCBrdCxTdCx5dD1fbChnZSk7eXQmJiFaZSYmKGt0PSEwPT09RWU/eXQuaW5kZXhPZihldCk6eXQudG9Mb2NhbGVMb3dlckNhc2Uob3QpLmluZGV4T2YoZXQudG9Mb2NhbGVMb3dlckNh''@;'; put 'put ''c2Uob3QpKSwtMSE9PWt0JiYoU3Q9eXQuc3Vic3RyKGt0LGV0Lmxlbmd0aCkseXQ9eXQucmVwbGFjZShTdCxgPHN0cm9uZz4ke1N0fTwvc3Ryb25nPmApKSksXy5pbm5lckhUTUw9eXR9LGF1dG9Db2x1bW5TaXplOiEwfSksbC5za2lwT25lJiYobC5za2lwT25lPSExKSx0aGlzLmhvdC5fcmVn''@;'; put 'put ''aXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhUQVJFQS52YWx1ZSl9KX1jbG9zZSgpe3RoaXMucmVtb3ZlSG9va3NCeUtleSgiYmVmb3JlS2V5RG93biIpLHN1cGVyLmNsb3NlKCl9ZGlzY2FyZEVkaXRvcihsKXtzdXBlci5kaXNjYXJkRWRpdG9yKGwpLHRoaXMu''@;'; put 'put ''aG90LnZpZXcucmVuZGVyKCl9cXVlcnlDaG9pY2VzKGwpe2NvbnN0IGE9dGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2U7dGhpcy5xdWVyeT1sLCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuY2FsbCh0aGlzLmNlbGxQcm9wZXJ0aWVzLGwsZD0+e3RoaXMucmF3Q2hvaWNlcz1kLHRoaXMudXBkYXRl''@;'; put 'put ''Q2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGQpKX0pOkFycmF5LmlzQXJyYXkoYSk/KHRoaXMucmF3Q2hvaWNlcz1hLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGEpKSk6dGhpcy51cGRhdGVDaG9pY2VzTGlzdChbXSl9dXBkYXRl''@;'; put 'put ''Q2hvaWNlc0xpc3QobCl7Y29uc3QgYT1oTih0aGlzLlRFWFRBUkVBKSxkPWN0ZSh0aGlzLlRFWFRBUkVBKSxoPXRoaXMuY2VsbFByb3BlcnRpZXMuc29ydEJ5UmVsZXZhbmNlLGY9dGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXI7bGV0IF89bnVsbCxUPW51bGwsVz1sO2gmJihfPXRoaXMuc29y''@;'; put 'put ''dEJ5UmVsZXZhbmNlKHRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKHRoaXMuZ2V0VmFsdWUoKSksVyx0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUpKTtjb25zdCBpZT1BcnJheS5pc0FycmF5KF8pP18ubGVuZ3RoOjA7aWYoITE9PT1mKWllJiYoVD1fWzBdKTtlbHNl''@;'; put 'put ''e2NvbnN0IGdlPVtdO2ZvcihsZXQgd2U9MCxFZT1XLmxlbmd0aDt3ZTxFZSYmIShoJiZpZTw9d2UpO3dlKyspZ2UucHVzaChpZT9XW19bd2VdXTpXW3dlXSk7VD0wLFc9Z2V9dGhpcy5zdHJpcHBlZENob2ljZXM9Vyx0aGlzLmh0RWRpdG9yLmxvYWREYXRhKHFiKFtXXSkpLHRoaXMudXBkYXRl''@;'; put 'put ''RHJvcGRvd25IZWlnaHQoKSx0aGlzLmZsaXBEcm9wZG93bklmTmVlZGVkKCksITA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdCYmdGhpcy5oaWdobGlnaHRCZXN0TWF0Y2hpbmdDaG9pY2UoVCksdGhpcy5ob3QubGlzdGVuKCksaXkodGhpcy5URVhUQVJFQSxhLGE9PT1kP3ZvaWQgMDpk''@;'; put 'put ''KX1mbGlwRHJvcGRvd25JZk5lZWRlZCgpe2NvbnN0IGw9dmcodGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5UQUJMRSksYT1sPT09dGhpcy5ob3Qucm9vdFdpbmRvdyxkPXRoaXMuY2VsbFByb3BlcnRpZXMucHJldmVudE92ZXJmbG93O2lmKGF8fCFhJiYoZHx8Imhvcml6b250YWwiPT09ZCkp''@;'; put 'put ''cmV0dXJuITE7Y29uc3QgaD1xbCh0aGlzLlRFWFRBUkVBKSxmPWFsKHRoaXMuVEVYVEFSRUEpLF89dGhpcy5nZXREcm9wZG93bkhlaWdodCgpLFQ9bC5zY3JvbGxUb3AsVz1hbCh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRIRUFEKSxpZT1xbChsKSxnZT1oLnRvcC1pZS50b3AtVytULHdl''@;'; put 'put ''PWwuc2Nyb2xsSGVpZ2h0LWdlLVctZixFZT1fPndlJiZnZT53ZTtyZXR1cm4gRWU/dGhpcy5mbGlwRHJvcGRvd24oXyk6dGhpcy51bmZsaXBEcm9wZG93bigpLHRoaXMubGltaXREcm9wZG93bklmTmVlZGVkKEVlP2dlOndlLF8pLEVlfWxpbWl0RHJvcGRvd25JZk5lZWRlZChsLGEpe2lmKGE+''@;'; put 'put ''bCl7bGV0IGQ9MCxoPTAsZj0wLF89bnVsbDtkb3tmPXRoaXMuaHRFZGl0b3IuZ2V0Um93SGVpZ2h0KGgpfHx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0LmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKSxkKz1mLGgrPTF9d2hpbGUoZDxsKTtfPWQtZix0aGlzLmh0RWRpdG9yLmZsaXBwZWQm''@;'; put 'put ''Jih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcD1wYXJzZUludCh0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcCwxMCkrYS1fKyJweCIpLHRoaXMuc2V0RHJvcGRvd25IZWlnaHQoZC1mKX19ZmxpcERyb3Bkb3duKGwpe2NvbnN0IGE9dGhpcy5odEVkaXRvci5y''@;'; put 'put ''b290RWxlbWVudC5zdHlsZTthLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS50b3A9LWwrInB4Iix0aGlzLmh0RWRpdG9yLmZsaXBwZWQ9ITB9dW5mbGlwRHJvcGRvd24oKXtjb25zdCBsPXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7bC5wb3NpdGlvbj0iYWJzb2x1dGUiLGwudG9wPSIi''@;'; put 'put ''LHRoaXMuaHRFZGl0b3IuZmxpcHBlZD12b2lkIDB9dXBkYXRlRHJvcGRvd25IZWlnaHQoKXtjb25zdCBsPXRoaXMuaHRFZGl0b3IuZ2V0Q29sV2lkdGgoMCkrSWModGhpcy5ob3Qucm9vdERvY3VtZW50KSsyLGE9dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd247dGhpcy5odEVkaXRv''@;'; put 'put ''ci51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuZ2V0RHJvcGRvd25IZWlnaHQoKSx3aWR0aDphP3ZvaWQgMDpsfSksdGhpcy5odEVkaXRvci52aWV3Ll93dC53dFRhYmxlLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKX1zZXREcm9wZG93bkhlaWdodChsKXt0aGlzLmh0''@;'; put 'put ''RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6bH0pfWhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShsKXsibnVtYmVyIj09dHlwZW9mIGw/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKGwsMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwhMSk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwo''@;'; put 'put ''KX1nZXREcm9wZG93bkhlaWdodCgpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpLmdldFJvd0hlaWdodCgwKXx8MjMsYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnZpc2libGVSb3dzO3JldHVybiB0aGlzLnN0cmlwcGVkQ2hvaWNlcy5sZW5ndGg+PWE/YSpsOnRoaXMuc3RyaXBw''@;'; put 'put ''ZWRDaG9pY2VzLmxlbmd0aCpsKzh9c3RyaXBWYWx1ZUlmTmVlZGVkKGwpe3JldHVybiB0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoW2xdKVswXX1zdHJpcFZhbHVlc0lmTmVlZGVkKGwpe2NvbnN0e2FsbG93SHRtbDphfT10aGlzLmNlbGxQcm9wZXJ0aWVzLGQ9Y3MobCxmPT5fbChmKSk7cmV0''@;'; put 'put ''dXJuIGNzKGQsZj0+YT9mOnVOKGYpKX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24obCl7Y29uc3QgYT10aGlzLmh0RWRpdG9yLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZF9yb3c9YT9hLmZyb20ucm93Oi0xO2xldCBoPSExO3JldHVybiBsPT09Y28uQVJST1dfRE9XTiYmZF9yb3c+MCYmZF9y''@;'; put 'put ''b3c8dGhpcy5odEVkaXRvci5jb3VudFJvd3MoKS0xJiYoaD0hMCksbD09PWNvLkFSUk9XX1VQJiZkX3Jvdz4tMSYmKGg9ITApLGh9b25CZWZvcmVLZXlEb3duKGwpe2NvbnN0IGE9S0IuZ2V0KHRoaXMpO2lmKGEuc2tpcE9uZT0hMSxTdGUobC5rZXlDb2RlKXx8bC5rZXlDb2RlPT09Y28uQkFD''@;'; put 'put ''S1NQQUNFfHxsLmtleUNvZGU9PT1jby5ERUxFVEV8fGwua2V5Q29kZT09PWNvLklOU0VSVCl7bGV0IGQ9MTA7aWYobC5rZXlDb2RlPT09Y28uQyYmKGwuY3RybEtleXx8bC5tZXRhS2V5KSlyZXR1cm47dGhpcy5pc09wZW5lZCgpfHwoZCs9MTApLHRoaXMuaHRFZGl0b3ImJnRoaXMuaG90Ll9y''@;'; put 'put ''ZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKSxhLnNraXBPbmU9ITB9LGQpfX19Y2xhc3MgSm5lIGV4dGVuZHMgdjd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJjaGVja2JveCJ9YmVnaW5FZGl0aW5nKGwsYSl7aWYoYSYm''@;'; put 'put ''Im1vdXNldXAiPT09YS50eXBlKXtjb25zdCBkPXRoaXMuVEQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iY2hlY2tib3giXScpO0JvKGQsImh0QmFkVmFsdWUiKXx8ZC5jbGljaygpfX1maW5pc2hFZGl0aW5nKCl7fWluaXQoKXt9b3Blbigpe31jbG9zZSgpe31nZXRWYWx1ZSgpe31zZXRW''@;'; put 'put ''YWx1ZSgpe31mb2N1cygpe319dmFyIFFuZT1GKDE3NDgwKTtjb25zdCBlcmU9ImRhdGUiLHRyZT0iZGF0ZUVkaXRvciI7Y2xhc3MgbnJlIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiBlcmV9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5kZWZhdWx0RGF0''@;'; put 'put ''ZUZvcm1hdD0iREQvTU0vWVlZWSIsdGhpcy5pc0NlbGxFZGl0ZWQ9ITEsdGhpcy5wYXJlbnREZXN0cm95ZWQ9ITEsdGhpcy4kZGF0ZVBpY2tlcj1udWxsfWluaXQoKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgS28pdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBpbmNsdWRlIG1vbWVudC5q''@;'; put 'put ''cyB0byB5b3VyIHByb2plY3QuIik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFFuZSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGluY2x1ZGUgUGlrYWRheSB0byB5b3VyIHByb2plY3QuIik7c3VwZXIuaW5pdCgpLHRoaXMuaW5zdGFuY2UuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IiwoKT0+''@;'; put 'put ''e3RoaXMucGFyZW50RGVzdHJveWVkPSEwLHRoaXMuZGVzdHJveUVsZW1lbnRzKCl9KX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5kYXRlUGlja2VyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmRhdGVQaWNrZXJT''@;'; put 'put ''dHlsZT10aGlzLmRhdGVQaWNrZXIuc3R5bGUsdGhpcy5kYXRlUGlja2VyU3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmRhdGVQaWNrZXJTdHlsZS50b3A9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS5sZWZ0PTAsdGhpcy5kYXRlUGlja2VyU3R5bGUuekluZGV4PTk5OTksdGhpcy5kYXRl''@;'; put 'put ''UGlja2VyLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIiKSxwaSh0aGlzLmRhdGVQaWNrZXIsImh0RGF0ZXBpY2tlckhvbGRlciIpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZGF0ZVBpY2tlciksbmV3IGxsKHRoaXMp''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kYXRlUGlja2VyLCJtb3VzZWRvd24iLGE9PmEuc3RvcFByb3BhZ2F0aW9uKCkpfWRlc3Ryb3lFbGVtZW50cygpe2NvbnN0IGw9dGhpcy5kYXRlUGlja2VyLnBhcmVudE5vZGU7dGhpcy4kZGF0ZVBpY2tlciYmdGhpcy4kZGF0ZVBpY2tlci5kZXN0cm95''@;'; put 'put ''KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmRhdGVQaWNrZXIpfXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pfW9wZW4oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtjb25zdCBk''@;'; put 'put ''PXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO3N1cGVyLm9wZW4oKSx0aGlzLnNob3dEYXRlcGlja2VyKGwpLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6aD0+e2guc3RvcFByb3BhZ2F0aW9uKCl9LGdyb3VwOnRyZX0p''@;'; put 'put ''fWNsb3NlKCl7dmFyIGw7dGhpcy5fb3BlbmVkPSExLG51bGwhPT0obD10aGlzLiRkYXRlUGlja2VyKSYmdm9pZCAwIT09bCYmbC5kZXN0cm95JiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSx0aGlzLmluc3RhbmNlLl9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLmluc3RhbmNlLl9yZWZy''@;'; put 'put ''ZXNoQm9yZGVycygpfSksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCh0cmUpLHN1cGVyLmNsb3NlKCl9ZmluaXNoRWRpdGluZygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzBdJiZhcmd1bWVudHNbMF0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKGwpe2NvbnN0IGQ9dGhpcy5vcmlnaW5hbFZhbHVlO3ZvaWQgMCE9PWQmJnRoaXMuc2V0VmFsdWUoZCl9c3VwZXIuZmluaXNoRWRpdGluZyhsLGEp''@;'; put 'put ''fXNob3dEYXRlcGlja2VyKGwpe2NvbnN0IGE9dGhpcy5URC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdHx8dGhpcy5kZWZhdWx0RGF0ZUZvcm1hdCxoPXRoaXMuaW5zdGFuY2Uudmlldy5pc01vdXNlRG93bigpLGY9ISFsJiZDTihsLmtl''@;'; put 'put ''eUNvZGUpO2xldCBfO3RoaXMuZGF0ZVBpY2tlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy4kZGF0ZVBpY2tlcj1uZXcgUW5lKHRoaXMuZ2V0RGF0ZVBpY2tlckNvbmZpZygpKSx0aGlzLiRkYXRlUGlja2VyLl9vbklucHV0Rm9jdXM9ZnVuY3Rpb24oKXt9LHRoaXMuZGF0ZVBpY2tlclN0''@;'; put 'put ''eWxlLnRvcD1gJHt0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0K2EudG9wK2FsKHRoaXMuVEQpfXB4YDtsZXQgVD10aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0O1Q9dGhpcy5ob3QuaXNSdGwoKT9hLnJpZ2h0LXdhKHRoaXMuZGF0ZVBpY2tlcik6YS5sZWZ0LHRoaXMuZGF0''@;'; put 'put ''ZVBpY2tlclN0eWxlLmxlZnQ9YCR7VH1weGAsdGhpcy5vcmlnaW5hbFZhbHVlPyhfPXRoaXMub3JpZ2luYWxWYWx1ZSxLbyhfLGQsITApLmlzVmFsaWQoKSYmdGhpcy4kZGF0ZVBpY2tlci5zZXRNb21lbnQoS28oXyxkKSwhMCksdGhpcy5nZXRWYWx1ZSgpIT09dGhpcy5vcmlnaW5hbFZhbHVl''@;'; put 'put ''JiZ0aGlzLnNldFZhbHVlKHRoaXMub3JpZ2luYWxWYWx1ZSksIWYmJiFoJiZ0aGlzLnNldFZhbHVlKCIiKSk6dGhpcy5jZWxsUHJvcGVydGllcy5kZWZhdWx0RGF0ZT8oXz10aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlLEtvKF8sZCwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlj''@;'; put 'put ''a2VyLnNldE1vbWVudChLbyhfLGQpLCEwKSwhZiYmIWgmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLiRkYXRlUGlja2VyLmdvdG9Ub2RheSgpfWhpZGVEYXRlcGlja2VyKCl7dGhpcy5kYXRlUGlja2VyU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy4kZGF0ZVBpY2tlci5oaWRlKCl9Z2V0RGF0''@;'; put 'put ''ZVBpY2tlckNvbmZpZygpe2NvbnN0IGw9dGhpcy5URVhUQVJFQSxhPXt9O3RoaXMuY2VsbFByb3BlcnRpZXMmJnRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyYmYXkoYSx0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVQaWNrZXJDb25maWcpO2NvbnN0IGQ9YS5vblNlbGVjdCxo''@;'; put 'put ''PWEub25DbG9zZTtyZXR1cm4gYS5maWVsZD1sLGEudHJpZ2dlcj1sLGEuY29udGFpbmVyPXRoaXMuZGF0ZVBpY2tlcixhLmJvdW5kPSExLGEuZm9ybWF0PWEuZm9ybWF0fHx0aGlzLmRlZmF1bHREYXRlRm9ybWF0LGEucmVwb3NpdGlvbj1hLnJlcG9zaXRpb258fCExLGEuaXNSVEw9ITEsYS5v''@;'; put 'put ''blNlbGVjdD1mPT57bGV0IF89Zjtpc05hTihfLmdldFRpbWUoKSl8fChfPUtvKF8pLmZvcm1hdCh0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVGb3JtYXR8fHRoaXMuZGVmYXVsdERhdGVGb3JtYXQpKSx0aGlzLnNldFZhbHVlKF8pLHRoaXMuaGlkZURhdGVwaWNrZXIoKSxkJiZkKCl9LGEub25D''@;'; put 'put ''bG9zZT0oKT0+e3RoaXMucGFyZW50RGVzdHJveWVkfHx0aGlzLmZpbmlzaEVkaXRpbmcoITEpLGgmJmgoKX0sYX19Y2xhc3MgSkIgZXh0ZW5kcyBYQntzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImRyb3Bkb3duIn1wcmVwYXJlKGwsYSxkLGgsZixfKXtzdXBlci5wcmVwYXJlKGws''@;'; put 'put ''YSxkLGgsZixfKSx0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcj0hMSx0aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdD0hMH19c28uZ2V0U2luZ2xldG9uKCkuYWRkKCJiZWZvcmVWYWxpZGF0ZSIsZnVuY3Rpb24oYyxsLGEpe2NvbnN0IGQ9dGhpcy5nZXRDZWxsTWV0YShsLHRoaXMucHJvcFRv''@;'; put 'put ''Q29sKGEpKTtkLmVkaXRvcj09PUpCJiZ2b2lkIDA9PT1kLnN0cmljdCYmKGQuZmlsdGVyPSExLGQuc3RyaWN0PSEwKX0pO2NsYXNzIHJyZSBleHRlbmRzIGtne3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4ibnVtZXJpYyJ9fWNsYXNzIGlyZSBleHRlbmRzIGtne3N0YXRpYyBnZXQg''@;'; put 'put ''RURJVE9SX1RZUEUoKXtyZXR1cm4icGFzc3dvcmQifWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLlRFWFRBUkVBPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKCJ0eXBlIiwi''@;'; put 'put ''cGFzc3dvcmQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSx0aGlzLlRFWFRBUkVBLmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlSW5wdXQiLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFTdHlsZS53aWR0''@;'; put 'put ''aD0wLHRoaXMudGV4dGFyZWFTdHlsZS5oZWlnaHQ9MCxnMih0aGlzLlRFWFRBUkVBX1BBUkVOVCksdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSl9fWNvbnN0IFFCPSJodF9lZGl0b3JfdmlzaWJsZSIsb3JlPSJzZWxlY3RFZGl0b3IiO2NsYXNzIG1JZSBl''@;'; put 'put ''eHRlbmRzIHY3e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4ic2VsZWN0In1pbml0KCl7dGhpcy5zZWxlY3Q9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNFTEVDVCIpLHBpKHRoaXMuc2VsZWN0LCJodFNlbGVjdEVkaXRvciIpLHRoaXMuc2VsZWN0LnN0eWxl''@;'; put 'put ''LmRpc3BsYXk9Im5vbmUiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0KSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnNlbGVjdC52YWx1ZX1zZXRWYWx1ZShsKXt0aGlzLnNlbGVjdC52YWx1ZT1sfW9wZW4oKXt0aGlzLl9v''@;'; put 'put ''cGVuZWQ9ITAsdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2VsZWN0LnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImVkaXRvciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuX29w''@;'; put 'put ''ZW5lZD0hMSx0aGlzLnNlbGVjdC5zdHlsZS5kaXNwbGF5PSJub25lIixCbyh0aGlzLnNlbGVjdCxRQikmJldvKHRoaXMuc2VsZWN0LFFCKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmNsZWFySG9va3MoKX1mb2N1cygpe3RoaXMuc2VsZWN0LmZvY3VzKCl9cmVnaXN0ZXJIb29r''@;'; put 'put ''cygpe3RoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1u''@;'; put 'put ''UmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKX1wcmVwYXJlKGwsYSxkLGgsZixfKXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZixfKTtjb25zdCBUPXRoaXMuY2VsbFBy''@;'; put 'put ''b3BlcnRpZXMuc2VsZWN0T3B0aW9ucztsZXQgVztXPXRoaXMucHJlcGFyZU9wdGlvbnMoImZ1bmN0aW9uIj09dHlwZW9mIFQ/VCh0aGlzLnJvdyx0aGlzLmNvbCx0aGlzLnByb3ApOlQpLGcyKHRoaXMuc2VsZWN0KSxkcyhXLChpZSxnZSk9Pntjb25zdCB3ZT10aGlzLmhvdC5yb290RG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7d2UudmFsdWU9Z2UsZ2cod2UsaWUpLHRoaXMuc2VsZWN0LmFwcGVuZENoaWxkKHdlKX0pfXByZXBhcmVPcHRpb25zKGwpe2xldCBhPXt9O2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBkPTAsaD1sLmxlbmd0aDtkPGg7ZCsrKWFbbFtkXV09''@;'; put 'put ''bFtkXTtlbHNlIm9iamVjdCI9PXR5cGVvZiBsJiYoYT1sKTtyZXR1cm4gYX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5yb3csdGhpcy5wcm9wKTt0aGlzLm9yaWdpbmFsVmFsdWU9bCx0aGlzLnNldFZhbHVlKGwpLHRoaXMucmVmcmVz''@;'; put 'put ''aERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2lmKHRoaXMuc3RhdGUhPT1ZYy5FRElUSU5HKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuY2xvc2UoKTtjb25zdHt0b3A6bCxzdGFydDphLHdpZHRoOmQsaGVp''@;'; put 'put ''Z2h0Omh9PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKSxmPXRoaXMuc2VsZWN0LnN0eWxlO2YuaGVpZ2h0PWAke2h9cHhgLGYud2lkdGg9YCR7ZH1weGAsZi50b3A9YCR7bH1weGAsZlt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHthfXB4YCxmLm1hcmdpbj0iMHB4IixwaSh0''@;'; put 'put ''aGlzLnNlbGVjdCxRQil9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGQ9e2dyb3VwOm9yZX07ITEhPT10aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSYmYS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFy''@;'; put 'put ''cm93VXAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgtMTtoPj0wJiYodGhpcy5zZWxlY3RbaF0uc2VsZWN0ZWQ9ITApfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4''@;'; put 'put ''KzE7aDw9dGhpcy5zZWxlY3QubGVuZ3RoLTEmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fV0sZCl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAob3JlKX19''@;'; put 'put ''Y2xhc3Mgc3JlIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0aW1lIn1wcmVwYXJlKGwsYSxkLGgsZixfKXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZixfKSx0aGlzLlRFWFRBUkVBLmRpcj0ibHRyIn19ZnVuY3Rpb24gZWooYyxsLGEsZCxoLGYsXyl7U3kuYXBw''@;'; put 'put ''bHkodGhpcyxbYyxsLGEsZCxoLGYsX10pLGdnKGwsZj8/IiIsITEpfWZ1bmN0aW9uIGI3KGMsbCxhLGQsaCxmLF8pe2NvbnN0e3Jvb3REb2N1bWVudDpUfT1jLFc9Xy5hbGxvd0h0bWw/ZWo6JHAsaWU9VC5jcmVhdGVFbGVtZW50KCJESVYiKTtpZihpZS5jbGFzc05hbWU9Imh0QXV0b2NvbXBs''@;'; put 'put ''ZXRlQXJyb3ciLGllLmFwcGVuZENoaWxkKFQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLmZyb21DaGFyQ29kZSg5NjYwKSkpLFcuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsX10pLGwuZmlyc3RDaGlsZHx8bC5hcHBlbmRDaGlsZChULmNyZWF0ZVRleHROb2RlKFN0cmluZy5mcm9tQ2hhckNvZGUo''@;'; put 'put ''MTYwKSkpLGwuaW5zZXJ0QmVmb3JlKGllLGwuZmlyc3RDaGlsZCkscGkobCwiaHRBdXRvY29tcGxldGUiKSwhYy5hY0Fycm93TGlzdGVuZXIpe2NvbnN0IGdlPW5ldyBsbChjKTtjLmFjQXJyb3dMaXN0ZW5lcj1mdW5jdGlvbih3ZSl7Qm8od2UudGFyZ2V0LCJodEF1dG9jb21wbGV0ZUFycm93''@;'; put 'put ''IikmJmMudmlldy5fd3QuZ2V0U2V0dGluZygib25DZWxsRGJsQ2xpY2siLG51bGwsYy5fY3JlYXRlQ2VsbENvb3JkcyhhLGQpLGwpfSxnZS5hZGRFdmVudExpc3RlbmVyKGMucm9vdEVsZW1lbnQsIm1vdXNlZG93biIsYy5hY0Fycm93TGlzdGVuZXIpLGMuYWRkSG9va09uY2UoImFmdGVyRGVz''@;'; put 'put ''dHJveSIsKCk9PntnZS5kZXN0cm95KCl9KX19ZWouUkVOREVSRVJfVFlQRT0iaHRtbCIsYjcuUkVOREVSRVJfVFlQRT0iYXV0b2NvbXBsZXRlIjtjb25zdCBhcmU9bmV3IFdlYWtNYXAsbHJlPW5ldyBXZWFrTWFwLHdJZT0iaHRCYWRWYWx1ZSIseTc9ImRhdGEtcm93Iix3Nz0iZGF0YS1jb2wi''@;'; put 'put ''LENJZT0iY2hlY2tib3hSZW5kZXJlciI7ZnVuY3Rpb24gdGooYyxsLGEsZCxoLGYsXyl7Y29uc3R7cm9vdERvY3VtZW50OlR9PWM7U3kuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsX10pLGZ1bmN0aW9uIFNJZShjKXtsZXQgbD1scmUuZ2V0KGMpO2lmKCFsKXtjb25zdHtyb290RWxlbWVudDph''@;'; put 'put ''fT1jO2w9bmV3IGxsKGMpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjbGljayIsZD0+ZnVuY3Rpb24ga0llKGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIW5qKGEpfHwhYS5oYXNBdHRyaWJ1dGUoeTcpfHwhYS5oYXNBdHRyaWJ1dGUodzcpKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0''@;'; put 'put ''QXR0cmlidXRlKHk3KSwxMCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZSh3NyksMTApO2wuZ2V0Q2VsbE1ldGEoZCxoKS5yZWFkT25seSYmYy5wcmV2ZW50RGVmYXVsdCgpfShkLGMpKSxsLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsZD0+ZnVuY3Rpb24gRUllKGMsbCl7Y29uc3R7''@;'; put 'put ''dGFyZ2V0OmF9PWM7bmooYSkmJighYS5oYXNBdHRyaWJ1dGUoeTcpfHwhYS5oYXNBdHRyaWJ1dGUodzcpfHxzZXRUaW1lb3V0KGwubGlzdGVuLDEwKSl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjaGFuZ2UiLGQ9PmZ1bmN0aW9uIEFJZShjLGwpe2NvbnN0e3RhcmdldDphfT1jO2lm''@;'; put 'put ''KCFuaihhKXx8IWEuaGFzQXR0cmlidXRlKHk3KXx8IWEuaGFzQXR0cmlidXRlKHc3KSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZSh5NyksMTApLGg9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUodzcpLDEwKSxmPWwuZ2V0Q2VsbE1ldGEoZCxoKTtpZighZi5yZWFkT25s''@;'; put 'put ''eSl7bGV0IF89bnVsbDtfPWMudGFyZ2V0LmNoZWNrZWQ/dm9pZCAwPT09Zi51bmNoZWNrZWRUZW1wbGF0ZXx8Zi5jaGVja2VkVGVtcGxhdGU6dm9pZCAwIT09Zi51bmNoZWNrZWRUZW1wbGF0ZSYmZi51bmNoZWNrZWRUZW1wbGF0ZSxsLnNldERhdGFBdENlbGwoZCxoLF8pfX0oZCxjKSksbHJl''@;'; put 'put ''LnNldChjLGwpfX0oYyk7bGV0IFc9ZnVuY3Rpb24gTUllKGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBsLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVySW5wdXQiLGwudHlwZT0iY2hlY2tib3giLGwuc2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCJv''@;'; put 'put ''ZmYiKSxsLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGwuY2xvbmVOb2RlKCExKX0oVCk7Y29uc3QgaWU9Xy5sYWJlbDtsZXQgZ2U9ITE7aWYodHlwZW9mIF8uY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKF8uY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2YgXy51bmNoZWNrZWRUZW1wbGF0''@;'; put 'put ''ZT4idSImJihfLnVuY2hlY2tlZFRlbXBsYXRlPSExKSxnMihsKSxmPT09Xy5jaGVja2VkVGVtcGxhdGV8fF9sKGYpLnRvTG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT09PV9sKF8uY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZShfLmxvY2FsZSk/Vy5jaGVja2VkPSEwOmY9PT1f''@;'; put 'put ''LnVuY2hlY2tlZFRlbXBsYXRlfHxfbChmKS50b0xvY2FsZUxvd2VyQ2FzZShfLmxvY2FsZSk9PT1fbChfLnVuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZShfLmxvY2FsZSk/Vy5jaGVja2VkPSExOnBjKGYpP3BpKFcsIm5vVmFsdWUiKTooVy5zdHlsZS5kaXNwbGF5PSJub25l''@;'; put 'put ''IixwaShXLHdJZSksZ2U9ITApLFcuc2V0QXR0cmlidXRlKHk3LGEpLFcuc2V0QXR0cmlidXRlKHc3LGQpLCFnZSYmaWUpe2xldCBvdD0iIjtpZihpZS52YWx1ZSlvdD0iZnVuY3Rpb24iPT10eXBlb2YgaWUudmFsdWU/aWUudmFsdWUuY2FsbCh0aGlzLGEsZCxoLGYpOmllLnZhbHVlO2Vsc2Ug''@;'; put 'put ''aWYoaWUucHJvcGVydHkpe2NvbnN0IHl0PWMuZ2V0RGF0YUF0Um93UHJvcChhLGllLnByb3BlcnR5KTtvdD1udWxsIT09eXQ/eXQ6IiJ9Y29uc3QgZXQ9ZnVuY3Rpb24geEllKGMsbCxhKXtjb25zdCBkPWMuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtyZXR1cm4gZC5jbGFzc05hbWU9Imh0Q2hl''@;'; put 'put ''Y2tib3hSZW5kZXJlckxhYmVsICIrKGE/ImZ1bGxXaWR0aCI6IiIpLGQuYXBwZW5kQ2hpbGQoYy5jcmVhdGVUZXh0Tm9kZShsKSksZC5jbG9uZU5vZGUoITApfShULG90LCEwIT09aWUuc2VwYXJhdGVkKTsiYmVmb3JlIj09PWllLnBvc2l0aW9uP2llLnNlcGFyYXRlZD8obC5hcHBlbmRDaGls''@;'; put 'put ''ZChldCksbC5hcHBlbmRDaGlsZChXKSk6KGV0LmFwcGVuZENoaWxkKFcpLFc9ZXQpOighaWUucG9zaXRpb258fCJhZnRlciI9PT1pZS5wb3NpdGlvbikmJihpZS5zZXBhcmF0ZWQ/KGwuYXBwZW5kQ2hpbGQoVyksbC5hcHBlbmRDaGlsZChldCkpOihldC5pbnNlcnRCZWZvcmUoVyxldC5maXJz''@;'; put 'put ''dENoaWxkKSxXPWV0KSl9ZnVuY3Rpb24gRWUoKXtsZXQgb3Q9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBldD1jLmdldFNlbGVjdGVkUmFuZ2UoKTtpZihldClmb3IobGV0IHl0PTA7eXQ8ZXQubGVuZ3RoO3l0Kyspe2NvbnN0''@;'; put 'put ''e3JvdzprdCxjb2w6U3R9PWV0W3l0XS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6UXQsY29sOm5ufT1ldFt5dF0uZ2V0Qm90dG9tRW5kQ29ybmVyKCksbW49W107Zm9yKGxldCBFbj1rdDtFbjw9UXQ7RW4rPTEpZm9yKGxldCBscj1TdDtscjw9bm47bHIrPTEpe2NvbnN0IFZyPWMuZ2V0Q2Vs''@;'; put 'put ''bE1ldGEoRW4sbHIpO2lmKCJjaGVja2JveCIhPT1Wci50eXBlKXJldHVybjtpZighMD09PVZyLnJlYWRPbmx5KWNvbnRpbnVlO3R5cGVvZiBWci5jaGVja2VkVGVtcGxhdGU+InUiJiYoVnIuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2YgVnIudW5jaGVja2VkVGVtcGxhdGU+InUiJiYoVnIu''@;'; put 'put ''dW5jaGVja2VkVGVtcGxhdGU9ITEpO2NvbnN0IF9pPWMuZ2V0RGF0YUF0Q2VsbChFbixscik7ITE9PT1vdD9bVnIuY2hlY2tlZFRlbXBsYXRlLFZyLmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpXS5pbmNsdWRlcyhfaSk/bW4ucHVzaChbRW4sbHIsVnIudW5jaGVja2VkVGVtcGxhdGVdKTpb''@;'; put 'put ''VnIudW5jaGVja2VkVGVtcGxhdGUsVnIudW5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKSxudWxsLHZvaWQgMF0uaW5jbHVkZXMoX2kpJiZtbi5wdXNoKFtFbixscixWci5jaGVja2VkVGVtcGxhdGVdKTptbi5wdXNoKFtFbixscixWci51bmNoZWNrZWRUZW1wbGF0ZV0pfW1uLmxlbmd0aD4w''@;'; put 'put ''JiZjLnNldERhdGFBdENlbGwobW4pfX1mdW5jdGlvbiBaZSgpe2NvbnN0IG90PWMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKG90KXtmb3IobGV0IGV0PTA7ZXQ8b3QubGVuZ3RoO2V0Kyspe2NvbnN0IHl0PW90W2V0XS5nZXRUb3BTdGFydENvcm5lcigpLGt0PW90W2V0XS5nZXRCb3R0b21FbmRD''@;'; put 'put ''b3JuZXIoKTtmb3IobGV0IFN0PXl0LnJvdztTdDw9a3Qucm93O1N0KyspZm9yKGxldCBRdD15dC5jb2w7UXQ8PWt0LmNvbDtRdCsrKXtjb25zdCBubj1jLmdldENlbGxNZXRhKFN0LFF0KTtpZigiY2hlY2tib3giIT09bm4udHlwZSlyZXR1cm4hMTtjb25zdCBtbj1jLmdldENlbGwoU3QsUXQp''@;'; put 'put ''O2lmKG51bGw9PW1uKXJldHVybiEwO2lmKG1uLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9Y2hlY2tib3hdIikubGVuZ3RoPjAmJiFubi5yZWFkT25seSlyZXR1cm4hMH19cmV0dXJuITF9fSghaWV8fGllJiYhaWUuc2VwYXJhdGVkKSYmbC5hcHBlbmRDaGlsZChXKSxnZSYmbC5hcHBl''@;'; put 'put ''bmRDaGlsZChULmNyZWF0ZVRleHROb2RlKCIjYmFkLXZhbHVlIyIpKSxhcmUuaGFzKGMpfHwoYXJlLnNldChjLCEwKSxmdW5jdGlvbiB3ZSgpe2MuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1sic3BhY2UiXV0sY2FsbGJhY2s6''@;'; put 'put ''KCk9PihFZSgpLCFaZSgpKX0se2tleXM6W1siZW50ZXIiXV0sY2FsbGJhY2s6KCk9PihFZSgpLCFaZSgpKSxydW5Pbmx5SWY6KCk9PmMuZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmd9LHtrZXlzOltbImRlbGV0ZSJdLFsiYmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT4oRWUoITAp''@;'; put 'put ''LCFaZSgpKSxyZWxhdGl2ZVRvR3JvdXA6bHkscG9zaXRpb246ImJlZm9yZSJ9XSx7Z3JvdXA6Q0llfSl9KCkpfWZ1bmN0aW9uIG5qKGMpe3JldHVybiJJTlBVVCI9PT1jLnRhZ05hbWUmJiJjaGVja2JveCI9PT1jLmdldEF0dHJpYnV0ZSgidHlwZSIpfXNvLmdldFNpbmdsZXRvbigpLmFkZCgi''@;'; put 'put ''bW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixmdW5jdGlvbihjLGwsYSl7Y29uc3R7bGFiZWw6ZCx0eXBlOmgscm93OmYsY29sdW1uOl8scHJvcDpUfT1sO2lmKCJjaGVja2JveCI9PT1oKXtpZihkKXtjb25zdHt2YWx1ZTpXLHByb3BlcnR5OmllfT1kO2xldCBnZT1hO2lmKFcpZ2U9ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFc/VyhmLF8sVCxhKTpXO2Vsc2UgaWYoaWUpe2NvbnN0IHdlPXRoaXMuZ2V0RGF0YUF0Um93UHJvcChmLGllKTtnZT1udWxsIT09d2U/d2U6YX1jPWdlfXJldHVybiBjfX0pLHRqLlJFTkRFUkVSX1RZUEU9ImNoZWNrYm94Ijt2YXIgcXA9RigxMTE3MCksVEllPUYubihx''@;'; put 'put ''cCk7ZnVuY3Rpb24gcmooYyxsLGEsZCxoLGYsXyl7bGV0IFQ9ZjtpZihHdShUKSl7Y29uc3QgVz1fLm51bWVyaWNGb3JtYXQsaWU9VyYmVy5jdWx0dXJlfHwiLSIsZ2U9VyYmVy5wYXR0ZXJuLHdlPV8uY2xhc3NOYW1lfHwiIixFZT13ZS5sZW5ndGg/d2Uuc3BsaXQoIiAiKTpbXTtpZih0eXBl''@;'; put 'put ''b2YgaWU8InUiJiYhcXAubGFuZ3VhZ2VzKClbaWVdKXtjb25zdCBaZT1pZS5yZXBsYWNlKCItIiwiIiksb3Q9cXAuYWxsTGFuZ3VhZ2VzP3FwLmFsbExhbmd1YWdlc1tpZV06cXBbWmVdO290JiZxcC5yZWdpc3Rlckxhbmd1YWdlKG90KX1xcC5zZXRMYW5ndWFnZShpZSksVD1xcChUKS5mb3Jt''@;'; put 'put ''YXQoZ2V8fCIwIiksRWUuaW5kZXhPZigiaHRMZWZ0Iik8MCYmRWUuaW5kZXhPZigiaHRDZW50ZXIiKTwwJiZFZS5pbmRleE9mKCJodFJpZ2h0Iik8MCYmRWUuaW5kZXhPZigiaHRKdXN0aWZ5Iik8MCYmRWUucHVzaCgiaHRSaWdodCIpLEVlLmluZGV4T2YoImh0TnVtZXJpYyIpPDAmJkVlLnB1''@;'; put 'put ''c2goImh0TnVtZXJpYyIpLF8uY2xhc3NOYW1lPUVlLmpvaW4oIiAiKSxsLmRpcj0ibHRyIn0kcChjLGwsYSxkLGgsVCxfKX1mdW5jdGlvbiBpaihjLGwsYSxkLGgsZixfKXskcC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSk7Y29uc3QgVz1fLmhhc2hTeW1ib2x8fCIqIjtsZXQgaWU9IiI7''@;'; put 'put ''dm8oKF8uaGFzaExlbmd0aHx8bC5pbm5lckhUTUwubGVuZ3RoKS0xLCgpPT57aWUrPVd9KSxnZyhsLGllKX1mdW5jdGlvbiBvaihjLGwsYSxkLGgsZixfKXskcC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksbC5kaXI9Imx0ciJ9ZnVuY3Rpb24geHkoYyxsKXtsZXQgYT1jO251bGw9PWEm''@;'; put 'put ''JihhPSIiKSx0aGlzLmFsbG93RW1wdHkmJiIiPT09YT9sKCEwKTp0aGlzLnN0cmljdCYmdGhpcy5zb3VyY2U/ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc291cmNlP3RoaXMuc291cmNlKGEsdXJlKGEsbCkpOnVyZShhLGwpKHRoaXMuc291cmNlKTpsKCEwKX1mdW5jdGlvbiB1cmUoYyxsKXtj''@;'; put 'put ''b25zdCBhPWM7cmV0dXJuIGZ1bmN0aW9uKGQpe2xldCBoPSExO2ZvcihsZXQgZj0wLF89ZC5sZW5ndGg7ZjxfO2YrKylpZihhPT09ZFtmXSl7aD0hMDticmVha31sKGgpfX1mdW5jdGlvbiBkcmUoYyl7Y29uc3QgbD1uZXcgRGF0ZShjKTtyZXR1cm4gaXNOYU4obmV3IERhdGUoYCR7Y31UMDA6''@;'; put 'put ''MDBgKS5nZXREYXRlKCkpP2w6bmV3IERhdGUobC5nZXRUaW1lKCkrNmU0KmwuZ2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24gWmsoYyxsKXtjb25zdCBhPUF0ZShlcmUsdGhpcy5pbnN0YW5jZSk7bGV0IGQ9YyxoPSEwO251bGw9PWQmJihkPSIiKTtsZXQgZj1LbyhkLHRoaXMuZGF0ZUZv''@;'; put 'put ''cm1hdHx8YS5kZWZhdWx0RGF0ZUZvcm1hdCwhMCkuaXNWYWxpZCgpLF89S28obmV3IERhdGUoZCkpLmlzVmFsaWQoKXx8ZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09ZCYmKF89ITAsZj0hMCksX3x8KGg9ITEpLCFfJiZmJiYoaD0hMCksXyYmIWYpaWYoITA9PT10aGlzLmNvcnJlY3RGb3Jt''@;'; put 'put ''YXQpe2NvbnN0IFQ9ZnVuY3Rpb24gRkllKGMsbCl7Y29uc3QgYT1LbyhkcmUoYykpLGQ9S28oYyxsKSxoPWMuc2VhcmNoKC9bQS16XS9nKT4tMTtsZXQgZjtyZXR1cm4gZj1hLmlzVmFsaWQoKSYmYS5mb3JtYXQoIngiKT09PWQuZm9ybWF0KCJ4Iil8fCFkLmlzVmFsaWQoKXx8aD9hOmQsZi5m''@;'; put 'put ''b3JtYXQobCl9KGQsdGhpcy5kYXRlRm9ybWF0KSxXPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxSb3codGhpcy5yb3cpLGllPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4odGhpcy5jb2wpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbChXLGllLFQsImRhdGVWYWxpZGF0b3IiKSxoPSEw''@;'; put 'put ''fWVsc2UgaD0hMTtsKGgpfWZ1bmN0aW9uIHNqKGMsbCl7bGV0IGE9YztudWxsPT1hJiYoYT0iIiksbCghKCF0aGlzLmFsbG93RW1wdHl8fCIiIT09YSl8fCIiIT09YSYmR3UoYykpfXJqLlJFTkRFUkVSX1RZUEU9Im51bWVyaWMiLGlqLlJFTkRFUkVSX1RZUEU9InBhc3N3b3JkIixvai5SRU5E''@;'; put 'put ''RVJFUl9UWVBFPSJ0aW1lIix4eS5WQUxJREFUT1JfVFlQRT0iYXV0b2NvbXBsZXRlIixaay5WQUxJREFUT1JfVFlQRT0iZGF0ZSIsc2ouVkFMSURBVE9SX1RZUEU9Im51bWVyaWMiO2NvbnN0IE5JZT1bIllZWVktTU0tRERUSEg6bW06c3MuU1NTWiIsIlgiLCJ4Il07ZnVuY3Rpb24gWWsoYyxs''@;'; put 'put ''KXtjb25zdCBhPXRoaXMudGltZUZvcm1hdHx8Img6bW06c3MgYSI7bGV0IGQ9ITAsaD1jO251bGw9PT1oJiYoaD0iIiksaD0vXlxkezMsfSQvLnRlc3QoaCk/cGFyc2VJbnQoaCwxMCk6aDtjb25zdCBmPS9eXGR7MSwyfSQvLnRlc3QoaCk7ZiYmKGgrPSI6MDAiKTtjb25zdCBfPUtvKGgsTkll''@;'; put 'put ''LCEwKS5pc1ZhbGlkKCk/S28oaCk6S28oaCxhKTtsZXQgVD1fLmlzVmFsaWQoKSxXPUtvKGgsYSwhMCkuaXNWYWxpZCgpJiYhZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09aCYmKFQ9ITAsVz0hMCksVHx8KGQ9ITEpLCFUJiZXJiYoZD0hMCksVCYmIVcpaWYoITA9PT10aGlzLmNvcnJlY3RG''@;'; put 'put ''b3JtYXQpe2NvbnN0IGllPV8uZm9ybWF0KGEpLGdlPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxSb3codGhpcy5yb3cpLHdlPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4odGhpcy5jb2wpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbChnZSx3ZSxpZSwidGltZVZhbGlkYXRvciIpLGQ9''@;'; put 'put ''ITB9ZWxzZSBkPSExO2woZCl9WWsuVkFMSURBVE9SX1RZUEU9InRpbWUiO2NvbnN0IGpJZT17Q0VMTF9UWVBFOiJhdXRvY29tcGxldGUiLGVkaXRvcjpYQixyZW5kZXJlcjpiNyx2YWxpZGF0b3I6eHl9LHpJZT17Q0VMTF9UWVBFOiJjaGVja2JveCIsZWRpdG9yOkpuZSxyZW5kZXJlcjp0an0s''@;'; put 'put ''VUllPXtDRUxMX1RZUEU6ImRhdGUiLGVkaXRvcjpucmUscmVuZGVyZXI6YjcsdmFsaWRhdG9yOlprfSxaSWU9e0NFTExfVFlQRToiZHJvcGRvd24iLGVkaXRvcjpKQixyZW5kZXJlcjpiNyx2YWxpZGF0b3I6eHl9LFlJZT17Q0VMTF9UWVBFOiJoYW5kc29udGFibGUiLGVkaXRvcjpxQixyZW5k''@;'; put 'put ''ZXJlcjpiN30sV0llPXtDRUxMX1RZUEU6Im51bWVyaWMiLGVkaXRvcjpycmUscmVuZGVyZXI6cmosdmFsaWRhdG9yOnNqLGRhdGFUeXBlOiJudW1iZXIifSxHSWU9e0NFTExfVFlQRToicGFzc3dvcmQiLGVkaXRvcjppcmUscmVuZGVyZXI6aWosY29weWFibGU6ITF9LCRJZT17Q0VMTF9UWVBF''@;'; put 'put ''OiJ0aW1lIixlZGl0b3I6c3JlLHJlbmRlcmVyOm9qLHZhbGlkYXRvcjpZa307Y29uc3QgaHJlPW5ldyBNYXAoW1sicGx1Z2luIixmdW5jdGlvbiBia2UoYyl7cmV0dXJuISFjeShjKX1dLFsiY2VsbC10eXBlIixGbmVdLFsiZWRpdG9yIixrdGVdLFsicmVuZGVyZXIiLEZ0ZV0sWyJ2YWxpZGF0''@;'; put 'put ''b3IiLEh0ZV1dKSxUZz1uZXcgV2Vha01hcCxhaj1bXTtsZXQgX2g9bnVsbDt2YXIgZnJlPW5ldyBXZWFrU2V0O2NsYXNzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJiYXNlIn1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblt0aGlzLlBMVUdJTl9LRVldfWNvbnN0''@;'; put 'put ''cnVjdG9yKGwpeyhmdW5jdGlvbiBLSWUoYyxsKXsoZnVuY3Rpb24gWEllKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0''@;'; put 'put ''aGlzLGZyZSksZmgodGhpcywiaG90IixsLHt3cml0YWJsZTohMX0pLFRnLnNldCh0aGlzLHtob29rczp7fX0pLF9oPW51bGwsdGhpcy5wbHVnaW5OYW1lPW51bGwsdGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3M9W10sdGhpcy5pc1BsdWdpbnNSZWFkeT0hMSx0aGlzLmVuYWJsZWQ9''@;'; put 'put ''ITEsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9PnRoaXMub25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixhPT50aGlzLm9uVXBkYXRlU2V0dGlu''@;'; put 'put ''Z3MoYSkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUluaXQiLCgpPT50aGlzLmluaXQoKSl9aW5pdCgpe3RoaXMucGx1Z2luTmFtZT10aGlzLmhvdC5nZXRQbHVnaW5OYW1lKHRoaXMpO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fREVQUyxhPUFycmF5LmlzQXJyYXkobCk/bDpb''@;'; put 'put ''XTtpZihhLmxlbmd0aD4wKXtjb25zdCBoPVtdO2lmKGEuZm9yRWFjaChmPT57Y29uc3RbXyxUXT1mLnNwbGl0KCI6Iik7aWYoIWhyZS5oYXMoXykpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBsdWdpbiBkZXBlbmRlbmN5IHR5cGUgIiR7X30iIHdhcyBmb3VuZC5gKTtocmUuZ2V0KF8pKFQp''@;'; put 'put ''fHxoLnB1c2goYCAtICR7VH0gKCR7X30pYCl9KSxoLmxlbmd0aD4wKXtjb25zdCBmPVtgVGhlICR7dGhpcy5wbHVnaW5OYW1lfSBwbHVnaW4gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBtb2R1bGVzOlxuYCxgJHtoLmpvaW4oIlxuIil9XG5gXS5qb2luKCIiKTthai5wdXNoKGYpfX1pZihfaHx8''@;'; put 'put ''KF9oPVBOKCkpLF9oLmluZGV4T2YoIlVuZG9SZWRvIik+PTAmJl9oLnNwbGljZShfaC5pbmRleE9mKCJVbmRvUmVkbyIpLDEpLF9oLmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKT49MCYmX2guc3BsaWNlKF9oLmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKSwxKSx0aGlzLmhvdC5hZGRIb29rT25j''@;'; put 'put ''ZSgiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT57dGhpcy5pc0VuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2luKCl9KSwwPT09X2gubGVuZ3RoKXtpZihhai5sZW5ndGg+MCl7Y29uc3QgaD1bYCR7YWouam9pbigiXG4iKX1cbmAsIllvdSBoYXZlIHRvIGlt''@;'; put 'put ''cG9ydCBhbmQgcmVnaXN0ZXIgdGhlbSBtYW51YWxseS4iXS5qb2luKCIiKTt0aHJvdyBuZXcgRXJyb3IoaCl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIil9dGhpcy5pbml0aWFsaXplZD0hMH1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWQ9ITB9ZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpe3RoaXMuZXZlbnRNYW5hZ2VyJiZ0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpLHRoaXMuY2xlYXJIb29rcygpLHRoaXMuZW5hYmxlZD0hMX1hZGRIb29rKGwsYSl7VGcuZ2V0KHRoaXMpLmhvb2tzW2xdPVRnLmdldCh0aGlzKS5ob29rc1tsXXx8W107Y29uc3QgZD1UZy5nZXQo''@;'; put 'put ''dGhpcykuaG9va3NbbF07dGhpcy5ob3QuYWRkSG9vayhsLGEpLGQucHVzaChhKSxUZy5nZXQodGhpcykuaG9va3NbbF09ZH1yZW1vdmVIb29rcyhsKXtJbihUZy5nZXQodGhpcykuaG9va3NbbF18fFtdLGE9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGwsYSl9KX1jbGVhckhvb2tzKCl7Y29uc3Qg''@;'; put 'put ''bD1UZy5nZXQodGhpcykuaG9va3M7ZHMobCwoYSxkKT0+dGhpcy5yZW1vdmVIb29rcyhkKSksbC5sZW5ndGg9MH1jYWxsT25QbHVnaW5zUmVhZHkobCl7dGhpcy5pc1BsdWdpbnNSZWFkeT9sKCk6dGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MucHVzaChsKX1vbkFmdGVyUGx1Z2lu''@;'; put 'put ''c0luaXRpYWxpemVkKCl7SW4odGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MsbD0+bCgpKSx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5sZW5ndGg9MCx0aGlzLmlzUGx1Z2luc1JlYWR5PSEwfW9uVXBkYXRlU2V0dGluZ3MobCl7Y29uc3QgYT1mdW5jdGlvbiBKSWUo''@;'; put 'put ''YyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGF9KHRoaXMsZnJlLGVMZSkuY2FsbCh0aGlzLGwpO3RoaXMuaXNFbmFibGVkJiYodGhpcy5lbmFibGVkJiYhdGhpcy5p''@;'; put 'put ''c0VuYWJsZWQoKSYmdGhpcy5kaXNhYmxlUGx1Z2luKCksIXRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJmEmJnRoaXMudXBkYXRlUGx1Z2luKGwpKX11cGRhdGVQbHVnaW4oKXt9ZGVzdHJv''@;'; put 'put ''eSgpe3RoaXMuZXZlbnRNYW5hZ2VyJiZ0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCksZHModGhpcywobCxhKT0+eyJob3QiIT09YSYmKHRoaXNbYV09bnVsbCl9KSxkZWxldGUgdGhpcy50LGRlbGV0ZSB0aGlzLmhvdH19ZnVuY3Rpb24gZUxlKGMpe2lmKCFj''@;'; put 'put ''KXJldHVybiExO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HX0tFWVM7aWYoImJvb2xlYW4iPT10eXBlb2YgbClyZXR1cm4gbDtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKylpZih2b2lkIDAhPT1jW2xbYV1dKXJldHVybiEwO3JldHVybiExfWNvbnN0IGxqPWNsYXNzIHRMZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXt0aGlzLmhvdD1sLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSx0aGlzLnJvd3M9W10sdGhpcy5jb2x1bW5zPVtdLHRoaXMuc2FtcGxlcz1udWxsLHRoaXMuc2V0dGluZ3M9e3VzZUhlYWRlcnM6ITB9fWFkZFJvdyhsLGEpe2lmKHRoaXMuY29sdW1u''@;'; put 'put ''cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5zaW9uYWwgdGFibGUiKTt0aGlzLnJvd3MubGVuZ3RofHwodGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17''@;'; put 'put ''cm93Omx9O3RoaXMucm93cy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy50YWJsZS50''@;'; put 'put ''ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVJvdyhsKSksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1hZGRDb2x1bW5IZWFkZXJzUm93KGwpe2lmKG51bGwhPXRoaXMuaG90LmdldENvbEhl''@;'; put 'put ''YWRlcigwKSl7Y29uc3QgZD17cm93Oi0xfTt0aGlzLnJvd3MucHVzaChkKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpLHRoaXMuc2FtcGxlcz1sLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50''@;'; put 'put ''YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy5hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQu''@;'; put 'put ''dGFibGU9dGhpcy50YWJsZS50YWJsZX19YWRkQ29sdW1uKGwsYSl7aWYodGhpcy5yb3dzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMuY29sdW1ucy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0''@;'; put 'put ''ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtjb2w6bH07dGhpcy5jb2x1bW5zLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy5nZXRTZXR0aW5n''@;'; put 'put ''KCJ1c2VIZWFkZXJzIikmJm51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIobCkmJnRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGwsdGhpcy50YWJsZS50aCksdGhpcy50YWJsZS50Qm9keS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbChsKSksdGhpcy5jb250YWluZXIuY29udGFp''@;'; put 'put ''bmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1nZXRIZWlnaHRzKGwpe3RoaXMuaW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxJbih0aGlzLnJvd3MsYT0+e2woYS5yb3csYWwoYS50YWJsZSktMSl9KX1nZXRXaWR0aHMobCl7''@;'; put 'put ''dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLEluKHRoaXMuY29sdW1ucyxhPT57Y29uc3R7d2lkdGg6ZH09YS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsKGEuY29sLE1hdGguY2VpbChkKSl9KX1zZXRTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzPWx9c2V0U2V0dGlu''@;'; put 'put ''ZyhsLGEpe3RoaXMuc2V0dGluZ3N8fCh0aGlzLnNldHRpbmdzPXt9KSx0aGlzLnNldHRpbmdzW2xdPWF9Z2V0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc31nZXRTZXR0aW5nKGwpe3JldHVybiB0aGlzLnNldHRpbmdzP3RoaXMuc2V0dGluZ3NbbF06bnVsbH1jcmVhdGVDb2xHcm91''@;'; put 'put ''cHNDb2woKXtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmbC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoLTEpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChhPT57SW4o''@;'; put 'put ''YS5zdHJpbmdzLGQ9PntsLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudChkLmNvbCkpfSl9KSxsfWNyZWF0ZVJvdyhsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiYodGhpcy5ob3Qudmlldy5hcHBlbmRSb3dIZWFkZXIobCxoKSxkLmFwcGVuZENoaWxkKGgpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChmPT57SW4oZi5zdHJpbmdzLF89Pntjb25zdCBUPV8uY29sLFc9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxU''@;'; put 'put ''KTtXLmNvbD1ULFcucm93PWw7Y29uc3QgaWU9dGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKFcpLGdlPWEuY3JlYXRlRWxlbWVudCgidGQiKTtnZS5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxpZSh0aGlzLmhvdCxnZSxsLFQsdGhpcy5ob3QuY29sVG9Qcm9wKFQpLF8udmFsdWUsVyks''@;'; put 'put ''ZC5hcHBlbmRDaGlsZChnZSl9KX0pLGR9YXBwZW5kQ29sdW1uSGVhZGVyc1Jvdygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQ9W107aWYodGhpcy5ob3QuaGFzUm93SGVhZGVycygpKXtjb25zdCBoPWwuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgidGgiKTtkLnB1c2goWy0xLGhdKSxhLmFwcGVuZENoaWxkKGgpfXRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntJbihoLnN0cmluZ3MsZj0+e2NvbnN0IF89Zi5jb2wsVD1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNoKFtfLFRdKSxhLmFwcGVuZENoaWxkKFQpfSl9KSx0aGlzLnRhYmxl''@;'; put 'put ''LnRIZWFkLmFwcGVuZENoaWxkKGEpLEluKGQsaD0+e2NvbnN0W2YsX109aDt0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihmLF8pfSl9Y3JlYXRlQ29sKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlz''@;'; put 'put ''LnNhbXBsZXMuZm9yRWFjaChoPT57SW4oaC5zdHJpbmdzLGY9Pntjb25zdCBfPWYucm93LFQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoXyxsKTtULmNvbD1sLFQucm93PV87Y29uc3QgVz10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoVCksaWU9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpLGdlPWEuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgidHIiKTtpZS5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxXKHRoaXMuaG90LGllLF8sbCx0aGlzLmhvdC5jb2xUb1Byb3AobCksZi52YWx1ZSxUKSxnZS5hcHBlbmRDaGlsZChpZSksZC5hcHBlbmRDaGlsZChnZSl9KX0pLGR9Y2xlYW4oKXt0aGlzLnJvd3MubGVu''@;'; put 'put ''Z3RoPTAsdGhpcy5yb3dzWy0xXT12b2lkIDAsdGhpcy5jb2x1bW5zLmxlbmd0aD0wLHRoaXMuc2FtcGxlcyYmdGhpcy5zYW1wbGVzLmNsZWFyKCksdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5yZW1vdmVUYWJsZSgpfWluamVjdFRhYmxlKCl7dGhpcy5pbmplY3RlZHx8KCgoYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpfHx0aGlzLmhvdC5yb290RWxlbWVudCkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIuZnJhZ21lbnQpLHRoaXMuaW5qZWN0ZWQ9ITApfXJlbW92ZVRhYmxlKCl7dGhpcy5pbmplY3RlZCYmdGhpcy5jb250''@;'; put 'put ''YWluZXIuY29udGFpbmVyLnBhcmVudE5vZGUmJih0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lci5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSl9Y3JlYXRlQ29sRWxlbWVudChsKXtjb25z''@;'; put 'put ''dCBhPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKTtyZXR1cm4gYS5zdHlsZS53aWR0aD1gJHt0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpfXB4YCxhfWNyZWF0ZVRhYmxlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGY9YS5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLF89YS5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJ0Ym9keSIpLFQ9YS5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLFc9YS5jcmVhdGVFbGVtZW50KCJ0ciIpLGllPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsKCkmJmguYXBwZW5kQ2hpbGQoVCksdGhpcy5pc0hvcml6b250YWwoKSYmKFcu''@;'; put 'put ''YXBwZW5kQ2hpbGQoaWUpLGYuYXBwZW5kQ2hpbGQoVyksaC5zdHlsZS50YWJsZUxheW91dD0iYXV0byIsaC5zdHlsZS53aWR0aD0iYXV0byIpLGguYXBwZW5kQ2hpbGQoZiksdGhpcy5pc1ZlcnRpY2FsKCkmJl8uYXBwZW5kQ2hpbGQoVyksaC5hcHBlbmRDaGlsZChfKSxwaShoLGwpLGQuYXBw''@;'; put 'put ''ZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsdGFibGU6aCx0SGVhZDpmLHRCb2R5Ol8sY29sR3JvdXA6VCx0cjpXLHRoOmllfX1jcmVhdGVDb250YWluZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERv''@;'; put 'put ''Y3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBwaShoLGBodEdob3N0VGFibGUgaHRBdXRvU2l6ZSAke2wudHJpbSgpfWApLGQuYXBwZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsY29udGFpbmVyOmh9''@;'; put 'put ''fWlzVmVydGljYWwoKXtyZXR1cm4hKCF0aGlzLnJvd3MubGVuZ3RofHx0aGlzLmNvbHVtbnMubGVuZ3RoKX1pc0hvcml6b250YWwoKXtyZXR1cm4hKCF0aGlzLmNvbHVtbnMubGVuZ3RofHx0aGlzLnJvd3MubGVuZ3RoKX19O2NsYXNzIGNqe3N0YXRpYyBnZXQgU0FNUExFX0NPVU5UKCl7cmV0''@;'; put 'put ''dXJuIDN9Y29uc3RydWN0b3IobCl7dGhpcy5zYW1wbGVzPW51bGwsdGhpcy5kYXRhRmFjdG9yeT1sLHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ9bnVsbCx0aGlzLmFsbG93RHVwbGljYXRlcz0hMX1nZXRTYW1wbGVDb3VudCgpe3JldHVybiB0aGlzLmN1c3RvbVNhbXBsZUNvdW50P3RoaXMuY3Vz''@;'; put 'put ''dG9tU2FtcGxlQ291bnQ6Y2ouU0FNUExFX0NPVU5UfXNldFNhbXBsZUNvdW50KGwpe3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ9bH1zZXRBbGxvd0R1cGxpY2F0ZXMobCl7dGhpcy5hbGxvd0R1cGxpY2F0ZXM9bH1nZW5lcmF0ZVJvd1NhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNh''@;'; put 'put ''bXBsZXMoInJvdyIsYSxsKX1nZW5lcmF0ZUNvbHVtblNhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoImNvbCIsYSxsKX1nZW5lcmF0ZVNhbXBsZXMobCxhLGQpe2NvbnN0IGg9bmV3IE1hcCx7ZnJvbTpmLHRvOl99PSJudW1iZXIiPT10eXBlb2YgZD97ZnJvbTpkLHRv''@;'; put 'put ''OmR9OmQ7cmV0dXJuIHZvKGYsXyxUPT57Y29uc3QgVz10aGlzLmdlbmVyYXRlU2FtcGxlKGwsYSxUKTtoLnNldChULFcpfSksaH1nZW5lcmF0ZVNhbXBsZShsLGEsZCl7aWYoInJvdyIhPT1sJiYiY29sIiE9PWwpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzYW1wbGUgdHlwZSIpO2Nv''@;'; put 'put ''bnN0IGg9bmV3IE1hcCxmPSJyb3ciPT09bD8iY29sIjoicm93IixfPVtdO3JldHVybiB2byhhLmZyb20sYS50byxUPT57Y29uc3R7dmFsdWU6VyxidW5kbGVTZWVkOmllfT0icm93Ij09PWw/dGhpcy5kYXRhRmFjdG9yeShkLFQpOnRoaXMuZGF0YUZhY3RvcnkoVCxkKSxnZT0ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGllJiZpZS5sZW5ndGg+MDtsZXQgd2U7d2U9Z2U/aWU6dXMoVyk/YCR7T2JqZWN0LmtleXMoVykubGVuZ3RofWA6QXJyYXkuaXNBcnJheShXKT9gJHtXLmxlbmd0aH1gOmAke19sKFcpLmxlbmd0aH1gLGguaGFzKHdlKXx8aC5zZXQod2Use25lZWRlZDp0aGlzLmdldFNhbXBsZUNv''@;'; put 'put ''dW50KCksc3RyaW5nczpbXX0pO2NvbnN0IEVlPWguZ2V0KHdlKTtFZS5uZWVkZWQmJighKF8uaW5kZXhPZihXKT4tMSl8fHRoaXMuYWxsb3dEdXBsaWNhdGVzfHxnZSkmJihFZS5zdHJpbmdzLnB1c2goe3ZhbHVlOlcsW2ZdOlR9KSxfLnB1c2goVyksRWUubmVlZGVkLT0xKX0pLGh9fWNvbnN0''@;'; put 'put ''IHByZT1jajtzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIik7Y29uc3QgRXk9ImF1dG9Db2x1bW5TaXplIix1aj1uZXcgV2Vha01hcDtjbGFzcyBreSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBFeX1zdGF0aWMg''@;'; put 'put ''Z2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3Io''@;'; put 'put ''bCl7c3VwZXIobCksdWouc2V0KHRoaXMse2NhY2hlZENvbHVtbkhlYWRlcnM6W119KSx0aGlzLmdob3N0VGFibGU9bmV3IGxqKHRoaXMuaG90KSx0aGlzLnNhbXBsZXNHZW5lcmF0b3I9bmV3IHByZSgoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxkKTtsZXQgZj0iIjto''@;'; put 'put ''LnNwYW5uZWR8fChmPXRoaXMuaG90LmdldERhdGFBdENlbGwoYSxkKSk7bGV0IF89IiI7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpJiYoXz10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixfLGgsZikpLHt2YWx1''@;'; put 'put ''ZTpmLGJ1bmRsZVNlZWQ6X319KSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITAsdGhpcy5pblByb2dyZXNzPSExLHRoaXMubWVhc3VyZWRDb2x1bW5zPTAsdGhpcy5jb2x1bW5XaWR0aHNNYXA9bmV3IFdwLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvQ29sdW1u''@;'; put 'put ''U2l6ZSIsdGhpcy5jb2x1bW5XaWR0aHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoYSxkLGgpPT50aGlzLm9uQmVmb3JlQ29sdW1uUmVzaXplKGEsZCxoKSl9aXNFbmFibGVkKCl7cmV0dXJuITEhPT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0V5XSYmIXRoaXMuaG90''@;'; put 'put ''LmdldFNldHRpbmdzKCkuY29sV2lkdGhzfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbRXldO2EmJm51bGwhPWEudXNlSGVhZGVycyYmdGhpcy5naG9zdFRhYmxlLnNldFNldHRpbmcoInVzZUhl''@;'; put 'put ''YWRlcnMiLGEudXNlSGVhZGVycyksdGhpcy5zZXRTYW1wbGluZ09wdGlvbnMoKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZD0+''@;'; put 'put ''dGhpcy5vbkJlZm9yZUNoYW5nZShkKSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixkPT50aGlzLm9uQWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZShkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixkPT50aGlzLm9uQmVmb3JlVmlld1JlbmRlcihk''@;'; put 'put ''KSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGQsaCk9PnRoaXMuZ2V0Q29sdW1uV2lkdGgoaCxkKSksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLCgpPT50aGlzLm9uQWZ0ZXJJbml0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2NvbnN0IGw9dGhpcy5m''@;'; put 'put ''aW5kQ29sdW1uc1doZXJlSGVhZGVyV2FzQ2hhbmdlZCgpO2wubGVuZ3RoJiYodGhpcy5jbGVhckNhY2hlKGwpLHRoaXMuY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwobCxhLGQpPT50aGlzLm9uQmVmb3JlQ29sdW1uUmVzaXplKGwsYSxkKSl9Y2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpe2lmKCF0aGlzLmhvdC5jb3VudFJvd3MoKSlyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5yZW5kZXJDYWxsLGQ9''@;'; put 'put ''dGhpcy5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSxoPXRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTstMT09PWR8fC0xPT09aHx8dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206ZCx0bzpofSx2b2lkIDAsYSl9Y2FsY3VsYXRlQ29sdW1uc1dpZHRoKCl7bGV0IGw9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJv''@;'; put 'put ''d3MoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTt2byhoLmZyb20saC50byxfPT57''@;'; put 'put ''bGV0IFQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihfKTtudWxsPT09VCYmKFQ9XyksKGR8fG51bGw9PT10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoVCkmJiF0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoVCkpJiZJbih0aGlzLnNhbXBsZXNHZW5lcmF0''@;'; put 'put ''b3IuZ2VuZXJhdGVDb2x1bW5TYW1wbGVzKF8sZiksaWU9PntsZXRbZ2Usd2VdPWllO3JldHVybiB0aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uKGdlLHdlKX0pfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0''@;'; put 'put ''VGFibGUuZ2V0V2lkdGhzKChfLFQpPT57Y29uc3QgVz10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKF8pO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChXLFQpfSl9LCEwKSx0aGlzLm1lYXN1cmVkQ29sdW1ucz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNh''@;'; put 'put ''bGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9MDtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLTE7bGV0IGg9bnVs''@;'; put 'put ''bDt0aGlzLmluUHJvZ3Jlc3M9ITA7Y29uc3QgZj0oKT0+e2lmKCF0aGlzLmhvdClyZXR1cm4gdXkoaCksdm9pZCh0aGlzLmluUHJvZ3Jlc3M9ITEpO3RoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOmEsdG86TWF0aC5taW4oYStreS5DQUxDVUxBVElPTl9TVEVQLGQpfSxsKSxhPWEr''@;'; put 'put ''a3kuQ0FMQ1VMQVRJT05fU1RFUCsxLGE8ZD9oPWJrKGYpOih1eShoKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LF89dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO3RoaXMuZmlyc3RDYWxjdWxhdGlvbiYmXz49MCYmKHRoaXMu''@;'; put 'put ''Y2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOjAsdG86X30sbCksdGhpcy5maXJzdENhbGN1bGF0aW9uPSExLGE9XysxKSxhPGQ/ZigpOnRoaXMuaW5Qcm9ncmVzcz0hMX1zZXRTYW1wbGluZ09wdGlvbnMoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbRXldLGE9bCYmYmwobCwi''@;'; put 'put ''c2FtcGxpbmdSYXRpbyIpP2wuc2FtcGxpbmdSYXRpbzp2b2lkIDAsZD1sJiZibChsLCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKT9sLmFsbG93U2FtcGxlRHVwbGljYXRlczp2b2lkIDA7YSYmIWlzTmFOKGEpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQo''@;'; put 'put ''YSwxMCkpLGQmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXMoZCl9cmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXt0aGlzLmhvdC52aWV3JiZ0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmlzVmlzaWJsZSgpJiYodGhpcy5jbGVhckNhY2hlKCksdGhpcy5jYWxj''@;'; put 'put ''dWxhdGVBbGxDb2x1bW5zV2lkdGgoKSl9Z2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbRXldO2xldCBhPWt5LlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQ7Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKS0xO3JldHVybiB1cyhsKSYmKGE9''@;'; put 'put ''bC5zeW5jTGltaXQsbE4oYSk/YT1JTihkLGEpOmE+Pj0wKSxNYXRoLm1pbihhLGQpfWdldENvbHVtbldpZHRoKGwpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0saD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1oJiYoaD10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSksZCYmIm51bWJlciI9PXR5cGVvZiBoJiYoaD1NYXRoLm1heChoLGVWLkRFRkFV''@;'; put 'put ''TFRfV0lEVEgpKSksaH1nZXRGaXJzdFZpc2libGVDb2x1bW4oKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0O2lmKGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Ipe2NvbnN0IGE9bC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpO2lmKC0xIT09YSlyZXR1cm4g''@;'; put 'put ''dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKX1pZihsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Ipe2NvbnN0IGE9bC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtpZigtMSE9PWEpcmV0dXJuIHRoaXMu''@;'; put 'put ''aG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSl9cmV0dXJuLTF9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0O2lmKGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Ipe2NvbnN0IGE9bC53''@;'; put 'put ''dFRhYmxlLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7aWYoLTEhPT1hKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpfWlmKGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUu''@;'; put 'put ''Z2V0TGFzdFJlbmRlcmVkQ29sdW1uKCk7aWYoLTEhPT1hKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpfXJldHVybi0xfWZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRD''@;'; put 'put ''b2xIZWFkZXIoKSx7Y2FjaGVkQ29sdW1uSGVhZGVyczphfT11ai5nZXQodGhpcyk7cmV0dXJuIEFsKGwsKGgsZixfKT0+e2NvbnN0IFQ9YS5sZW5ndGg7cmV0dXJuKFQtMTxffHxhW19dIT09ZikmJmgucHVzaChfKSxULTE8Xz9hLnB1c2goZik6YVtfXT1mLGh9LFtdKX1jbGVhckNhY2hlKCl7''@;'; put 'put ''bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO2wubGVuZ3RoP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57SW4obCxhPT57dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0sITApOnRo''@;'; put 'put ''aXMuY29sdW1uV2lkdGhzTWFwLmNsZWFyKCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIV8xKHRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZENvbHVtbnMpLGw9Pm51bGw9PT1sKS5sZW5ndGh9b25CZWZvcmVWaWV3UmVuZGVyKCl7dGhp''@;'; put 'put ''cy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCksdGhpcy5pc05lZWRSZWNhbGN1bGF0ZSgpJiYhdGhpcy5pblByb2dyZXNzJiZ0aGlzLmNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpfW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMuaG90LnZpZXc/dGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVt''@;'; put 'put ''bnNXaWR0aCgpOnNldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdCYmdGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpfSwwKX1vbkJlZm9yZUNoYW5nZShsKXtjb25zdCBhPWNzKGwsZD0+e2xldFssaF09ZDtyZXR1cm4gdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih0aGlzLmhvdC5wcm9w''@;'; put 'put ''VG9Db2woaCkpfSk7dGhpcy5jbGVhckNhY2hlKEFycmF5LmZyb20obmV3IFNldChhKSkpfW9uQmVmb3JlQ29sdW1uUmVzaXplKGwsYSxkKXtsZXQgaD1sO3JldHVybiBkJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoYSx2b2lkIDAsITApLGg9dGhpcy5nZXRDb2x1bW5XaWR0aChhLHZv''@;'; put 'put ''aWQgMCwhMSkpLGh9b25BZnRlckluaXQoKXt1ai5nZXQodGhpcykuY2FjaGVkQ29sdW1uSGVhZGVycz10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKX1vbkFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUobCl7Y29uc3QgZD1jcyhfMShsLGg9Pnt2YXIgZjtyZXR1cm4gS2kobnVsbD09PShmPWguYWRk''@;'; put 'put ''cmVzcyl8fHZvaWQgMD09PWY/dm9pZCAwOmYuY29sKX0pLGg9PmguYWRkcmVzcy5jb2wpO3RoaXMuY2xlYXJDYWNoZShBcnJheS5mcm9tKG5ldyBTZXQoZCkpKX1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBEZz17aG9yaXpvbnRhbDoi''@;'; put 'put ''aG9yaXpvbnRhbCIsdmVydGljYWw6InZlcnRpY2FsIn07c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9maWxsUmFuZ2UiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQXV0b2ZpbGwiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJBdXRv''@;'; put 'put ''ZmlsbCIpO2NvbnN0IGFMZT1bImZpbGxIYW5kbGUiXTtjbGFzcyB1TGUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYXV0b2ZpbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJu''@;'; put 'put ''WyJhdXRvZmlsbCIsLi4uYUxlXX1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5hZGRpbmdTdGFydGVkPSExLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSExLHRoaXMubW91c2VEcmFnT3V0c2lkZT0hMSx0aGlzLmhhbmRsZURy''@;'; put 'put ''YWdnZWRDZWxscz0wLHRoaXMuZGlyZWN0aW9ucz1bXSx0aGlzLmF1dG9JbnNlcnRSb3c9ITF9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLm1hcFNldHRpbmdzKCksdGhpcy5yZWdp''@;'; put 'put ''c3RlckV2ZW50cygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGw9PnRoaXMub25BZnRlckNlbGxDb3JuZXJNb3VzZURvd24obCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsbD0+dGhpcy5vbkNlbGxDb3JuZXJEYmxDbGljayhs''@;'; put 'put ''KSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLChsLGEpPT50aGlzLm9uQmVmb3JlQ2VsbE1vdXNlT3ZlcihhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBk''@;'; put 'put ''YXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJNYXBwZWRTZXR0aW5ncygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTZWxlY3Rpb25EYXRhKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtyb3c6YSxjb2w6ZH09bC5nZXRUb3BTdGFydENv''@;'; put 'put ''cm5lcigpLHtyb3c6aCxjb2w6Zn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxfPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixbe3N0YXJ0Um93OmEsc3RhcnRDb2w6ZCxlbmRSb3c6aCxlbmRDb2w6Zn1dKSxUPVtdLFc9W10saWU9W107cmV0dXJuIEluKF8sZ2U9Pntm''@;'; put 'put ''b3IobGV0IHdlPWdlLnN0YXJ0Um93O3dlPD1nZS5lbmRSb3c7d2UrPTEpLTE9PT1ULmluZGV4T2Yod2UpJiZULnB1c2god2UpO2ZvcihsZXQgd2U9Z2Uuc3RhcnRDb2w7d2U8PWdlLmVuZENvbDt3ZSs9MSktMT09PVcuaW5kZXhPZih3ZSkmJlcucHVzaCh3ZSl9KSxJbihULGdlPT57Y29uc3Qg''@;'; put 'put ''d2U9W107SW4oVyxFZT0+e3dlLnB1c2godGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGdlLEVlKSl9KSxpZS5wdXNoKHdlKX0pLGllfWZpbGxJbigpe2lmKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSlyZXR1cm4hMTtjb25zdFtsLGEsZCxoXT10aGlz''@;'; put 'put ''LmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksZj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLF89Zi5nZXRUb3BTdGFydENvcm5lcigpLFQ9Zi5nZXRCb3R0b21FbmRDb3JuZXIoKTt0aGlzLnJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2Vk''@;'; put 'put ''QXJlYSgpO2NvbnN0IFc9W18ucm93LF8uY29sLFQucm93LFQuY29sXSxpZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsW01hdGgubWluKF8ucm93LGwpLE1hdGgubWluKF8uY29sLGEpLE1hdGgubWF4KFQucm93LGQpLE1hdGgubWF4KFQuY29sLGgpXSxXKSx7ZGly''@;'; put 'put ''ZWN0aW9uT2ZEcmFnOmdlLHN0YXJ0T2ZEcmFnQ29vcmRzOndlLGVuZE9mRHJhZ0Nvb3JkczpFZX09ZnVuY3Rpb24gaUxlKGMsbCxhKXtsZXQgZCxoLGY7cmV0dXJuIGxbMF09PT1jWzBdJiZsWzFdPGNbMV0/KGY9ImxlZnQiLGQ9YShsWzBdLGxbMV0pLGg9YShsWzJdLGNbMV0tMSkpOmxbMl09''@;'; put 'put ''PT1jWzJdJiZsWzBdPT09Y1swXSYmbFszXT5jWzNdPyhmPSJyaWdodCIsZD1hKGxbMF0sY1szXSsxKSxoPWEobFsyXSxsWzNdKSk6bFswXTxjWzBdJiZsWzFdPT09Y1sxXT8oZj0idXAiLGQ9YShsWzBdLGxbMV0pLGg9YShjWzBdLTEsbFszXSkpOmxbMl0+Y1syXSYmbFsxXT09PWNbMV0mJihm''@;'; put 'put ''PSJkb3duIixkPWEoY1syXSsxLGxbMV0pLGg9YShsWzJdLGxbM10pKSxkJiZkLm5vcm1hbGl6ZSgpLGgmJmgubm9ybWFsaXplKCkse2RpcmVjdGlvbk9mRHJhZzpmLHN0YXJ0T2ZEcmFnQ29vcmRzOmQsZW5kT2ZEcmFnQ29vcmRzOmh9fShXLGllLChaZSxvdCk9PnRoaXMuaG90Ll9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKFplLG90KSk7aWYod2UmJndlLnJvdz4tMSYmd2UuY29sPi0xKXtjb25zdCBaZT10aGlzLmdldFNlbGVjdGlvbkRhdGEoKSxvdD1mLmNsb25lKCksZXQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh3ZSx3ZSxFZSkseXQ9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUF1dG9m''@;'; put 'put ''aWxsIixaZSxvdCxldCxnZSk7aWYoITE9PT15dClyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKSx0aGlzLmhvdC5yZW5kZXIoKSwhMTtsZXQga3Q9eXQ7Y29uc3QgU3Q9eXQ7aWYoWyJ1cCIsImxlZnQiXS5pbmRleE9mKGdlKT4tMSYmKDEhPT1T''@;'; put 'put ''dC5sZW5ndGh8fDAhPT1TdFswXS5sZW5ndGgpKWlmKGt0PVtdLCJ1cCI9PT1nZSl7Y29uc3QgUXQ9RWUucm93LXdlLnJvdysxLG5uPVF0JVN0Lmxlbmd0aDtmb3IobGV0IG1uPTA7bW48UXQ7bW4rKylrdC5wdXNoKFN0WyhtbisoU3QubGVuZ3RoLW5uKSklU3QubGVuZ3RoXSl9ZWxzZXtjb25z''@;'; put 'put ''dCBRdD1FZS5jb2wtd2UuY29sKzEsbm49UXQlU3RbMF0ubGVuZ3RoO2ZvcihsZXQgbW49MDttbjxTdC5sZW5ndGg7bW4rKyl7a3QucHVzaChbXSk7Zm9yKGxldCBFbj0wO0VuPFF0O0VuKyspa3RbbW5dLnB1c2goU3RbbW5dWyhFbisoU3RbbW5dLmxlbmd0aC1ubikpJVN0W21uXS5sZW5ndGhd''@;'; put 'put ''KX19dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkod2Uucm93LHdlLmNvbCxrdCxFZS5yb3csRWUuY29sLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGAsbnVsbCksdGhpcy5zZXRTZWxlY3Rpb24oaWUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckF1dG9maWxsIixrdCxvdCxldCxnZSksdGhp''@;'; put 'put ''cy5ob3QucmVuZGVyKCl9ZWxzZSB0aGlzLmhvdC5fcmVmcmVzaEJvcmRlcnMoKTtyZXR1cm4hMH1yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQobCl7cmV0dXJuIGwucm93PDAmJihsLnJvdz0wKSxsLmNvbDwwJiYobC5jb2w9MCksbH1nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhs''@;'; put 'put ''KXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCBoPWw7aWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKERnLnZlcnRpY2FsKSYmdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKERnLmhvcml6b250YWwpKXtjb25zdCBm''@;'; put 'put ''PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKTsoZC5jb2w8PWwuY29sfHxmLmNvbD49bC5jb2wpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCkpLChkLnJvdzxsLnJvd3x8Zi5yb3c+bC5yb3cpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxkLmNv''@;'; put 'put ''bCkpfWVsc2UgaWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKERnLnZlcnRpY2FsKSloPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKTtlbHNle2lmKCF0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoRGcuaG9yaXpvbnRhbCkpcmV0dXJuO2g9dGhpcy5ob3QuX2NyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoZC5yb3csbC5jb2wpfXJldHVybiB0aGlzLnJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChoKX1zaG93Qm9yZGVyKGwpe2NvbnN0IGE9dGhpcy5nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhsKTthJiZ0aGlzLnJlZHJhd0JvcmRlcnMoYSl9YWRkUm93KCl7dGhp''@;'; put 'put ''cy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2JlbG93Iix2b2lkIDAsMSxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITF9LDIwMCl9YWRkTmV3Um93SWZOZWVkZWQoKXtpZighdGhpcy5ob3Quc2VsZWN0''@;'; put 'put ''aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpJiYhMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5hdXRvSW5zZXJ0Um93KXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFs''@;'; put 'put ''Q29ybmVycygpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bFsyXTxkLTEmJmFbMl09PT1kLTEmJih0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITAsdGhpcy5hZGRSb3coKSl9fWdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhsKXtjb25zdCBhPXRoaXMuaG90LmdldERhdGEoKSxkPXRoaXMu''@;'; put 'put ''aG90LmNvdW50Um93cygpO2xldCBoO2ZvcihsZXQgZj1sWzJdKzE7ZjxkO2YrKyl7Zm9yKGxldCBXPWxbMV07Vzw9bFszXTtXKyspaWYoYVtmXVtXXSlyZXR1cm4tMTsoYVtmXVtsWzFdLTFdfHxhW2ZdW2xbM10rMV0pJiYoaD1mKX1yZXR1cm4gaH1hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVh''@;'; put 'put ''VG9TcGVjaWZpY1Jvd0luZGV4KGwsYSl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFswXSxsWzFdKSkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEsbFszXSkpLmNvbW1pdCgpfXNl''@;'; put 'put ''dFNlbGVjdGlvbihsKXt0aGlzLmhvdC5zZWxlY3RDZWxsKC4uLmNzKGwsYT0+TWF0aC5tYXgoYSwwKSksITEsITEpfXNlbGVjdEFkamFjZW50KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxhPXRoaXMuZ2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpO3Jl''@;'; put 'put ''dHVybi0xIT09YSYmdm9pZCAwIT09YSYmKHRoaXMuYWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleChsLGEpLCEwKX1yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGln''@;'; put 'put ''aHQuZ2V0RmlsbCgpLmNsZWFyKCl9cmVkcmF3Qm9yZGVycyhsKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZyb20pLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLnRv''@;'; put 'put ''KS5hZGQobCkuY29tbWl0KCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUobCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50OmF9PXRoaXMuaG90LnJvb3REb2N1bWVudCxkPXFsKHRoaXMuaG90LnRhYmxlKS50b3AtKHRoaXMuaG90LnJvb3RXaW5kb3cu''@;'; put 'put ''cGFnZVlPZmZzZXR8fGEuc2Nyb2xsVG9wKSthbCh0aGlzLmhvdC50YWJsZSksaD1xbCh0aGlzLmhvdC50YWJsZSkubGVmdC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldHx8YS5zY3JvbGxMZWZ0KSt3YSh0aGlzLmhvdC50YWJsZSk7cmV0dXJuIGwuY2xpZW50WT5kJiZsLmNsaWVu''@;'; put 'put ''dFg8PWh9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT50aGlzLm9uTW91c2VNb3ZlKGEpKX1vbkNlbGxDb3JuZXJEYmxDbGljaygpe3RoaXMuc2VsZWN0QWRqYWNlbnQoKSYmdGhpcy5maWxsSW4oKX1vbkFmdGVyQ2VsbENvcm5lck1vdXNlRG93bigpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTEsdGhp''@;'; put 'put ''cy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITB9b25CZWZvcmVDZWxsTW91c2VPdmVyKGwpe3RoaXMubW91c2VEb3duT25DZWxsQ29ybmVyJiYhdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzKz0xLHRo''@;'; put 'put ''aXMuc2hvd0JvcmRlcihsKSx0aGlzLmFkZE5ld1Jvd0lmTmVlZGVkKCkpfW9uTW91c2VVcCgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MSYmdGhpcy5maWxsSW4oKSx0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMubW91c2VEb3duT25D''@;'; put 'put ''ZWxsQ29ybmVyPSExKX1vbk1vdXNlTW92ZShsKXtjb25zdCBhPXRoaXMuZ2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRlKGwpOyExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4wJiZhPyh0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITAsdGhpcy5hZGRpbmdT''@;'; put 'put ''dGFydGVkPSEwKTp0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITEsdGhpcy5tb3VzZURyYWdPdXRzaWRlJiZ0aGlzLmF1dG9JbnNlcnRSb3cmJnRoaXMuYWRkUm93KCl9Y2xlYXJNYXBwZWRTZXR0aW5ncygpe3RoaXMuZGlyZWN0aW9ucy5sZW5ndGg9MCx0aGlzLmF1dG9JbnNlcnRSb3c9ITF9bWFw''@;'; put 'put ''U2V0dGluZ3MoKXtjb25zdCBsPWZ1bmN0aW9uIG9MZShjKXtjb25zdCBsPXt9O3JldHVybiEwPT09Yz8obC5kaXJlY3Rpb25zPU9iamVjdC5rZXlzKERnKSxsLmF1dG9JbnNlcnRSb3c9ITApOnVzKGMpPyhsLmF1dG9JbnNlcnRSb3c9ISFLaShjLmF1dG9JbnNlcnRSb3cpJiZjLmRpcmVjdGlv''@;'; put 'put ''biE9PURnLmhvcml6b250YWwmJmMuYXV0b0luc2VydFJvdyxsLmRpcmVjdGlvbnM9S2koYy5kaXJlY3Rpb24pP1tjLmRpcmVjdGlvbl06T2JqZWN0LmtleXMoRGcpKToic3RyaW5nIj09dHlwZW9mIGM/KGwuZGlyZWN0aW9ucz1bY10sbC5hdXRvSW5zZXJ0Um93PSEwKToobC5kaXJlY3Rpb25z''@;'; put 'put ''PVtdLGwuYXV0b0luc2VydFJvdz0hMSksbH0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlKTt0aGlzLmRpcmVjdGlvbnM9bC5kaXJlY3Rpb25zLHRoaXMuYXV0b0luc2VydFJvdz1sLmF1dG9JbnNlcnRSb3d9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3QgV2s9ImF1''@;'; put 'put ''dG9Sb3dTaXplIjtjbGFzcyBBeSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBXa31zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA0MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RF''@;'; put 'put ''UCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMucm93SGVpZ2h0c01hcD12b2lkIDAsdGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCx0aGlzLmdob3N0VGFibGU9bmV3IGxqKHRoaXMuaG90''@;'; put 'put ''KSx0aGlzLnNhbXBsZXNHZW5lcmF0b3I9bmV3IHByZSgoYSxkKT0+e2xldCBoO3JldHVybiBhPj0wP2g9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpOi0xPT09YSYmKGg9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGQpKSx7dmFsdWU6aH19KSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITAsdGhp''@;'; put 'put ''cy5pblByb2dyZXNzPSExLHRoaXMubWVhc3VyZWRSb3dzPTAsdGhpcy5yb3dIZWlnaHRzTWFwPW5ldyBXcCx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYXV0b1Jvd1NpemUiLHRoaXMucm93SGVpZ2h0c01hcCksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLChh''@;'; put 'put ''LGQsaCk9PnRoaXMub25CZWZvcmVSb3dSZXNpemUoYSxkLGgpKX1pc0VuYWJsZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbV2tdO3JldHVybiEwPT09bHx8dXMobCl9ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnNldFNhbXBsaW5nT3B0''@;'; put 'put ''aW9ucygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixhPT50aGlzLm9uQmVmb3JlQ2hhbmdlKGEpKSx0aGlzLmFkZEhvb2soImJl''@;'; put 'put ''Zm9yZUNvbHVtblJlc2l6ZSIsKCk9PnRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsYT0+dGhpcy5vbkJlZm9yZVZpZXdSZW5kZXIoYSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoYSxkKT0+dGhpcy5nZXRS''@;'; put 'put ''b3dIZWlnaHQoZCxhKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCgpPT50aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaGVhZGVySGVpZ2h0PW51bGwsc3VwZXIuZGlzYWJsZVBs''@;'; put 'put ''dWdpbigpLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93UmVzaXplIiwobCxhLGQpPT50aGlzLm9uQmVmb3JlUm93UmVzaXplKGwsYSxkKSl9Y2FsY3VsYXRlUm93c0hlaWdodCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJv''@;'; put 'put ''bTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1sy''@;'; put 'put ''XSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJvbTphLHRvOmF9OmE7aWYobnVsbCE9PXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3QgXz10aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2Vu''@;'; put 'put ''ZXJhdGVSb3dTYW1wbGVzKC0xLGYpO3RoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW5IZWFkZXJzUm93KF8uZ2V0KC0xKSl9dm8oaC5mcm9tLGgudG8sXz0+eyhkfHxudWxsPT09dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleChfKSkmJkluKHRoaXMuc2FtcGxlc0dlbmVyYXRvci5n''@;'; put 'put ''ZW5lcmF0ZVJvd1NhbXBsZXMoXyxmKSxXPT57bGV0W2llLGdlXT1XO3JldHVybiB0aGlzLmdob3N0VGFibGUuYWRkUm93KGllLGdlKX0pfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0''@;'; put 'put ''cygoXyxUKT0+e188MD90aGlzLmhlYWRlckhlaWdodD1UOnRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhfKSxUKX0pfSwhMCksdGhpcy5tZWFzdXJlZFJvd3M9aC50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVB''@;'; put 'put ''bGxSb3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT0wO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXQgaD1udWxsO3RoaXMuaW5Q''@;'; put 'put ''cm9ncmVzcz0hMDtjb25zdCBmPSgpPT57aWYoIXRoaXMuaG90KXJldHVybiB1eShoKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmEsdG86TWF0aC5taW4oYStBeS5DQUxDVUxBVElPTl9TVEVQLGQpfSxsKSxhPWErQXkuQ0FMQ1VMQVRJ''@;'; put 'put ''T05fU1RFUCsxLGE8ZD9oPWJrKGYpOih1eShoKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApLHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmhvdC52aWV3Ll93''@;'; put 'put ''dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS5kcmF3KCkpfSxfPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTt0aGlzLmZpcnN0Q2FsY3VsYXRpb24mJl8+PTAmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206MCx0bzpffSxsKSx0aGlzLmZpcnN0Q2Fs''@;'; put 'put ''Y3VsYXRpb249ITEsYT1fKzEpLGE8ZD9mKCk6KHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMSkpfXNldFNhbXBsaW5nT3B0aW9ucygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtXa10sYT1sJiZibChsLCJzYW1wbGluZ1JhdGlv''@;'; put 'put ''Iik/bC5zYW1wbGluZ1JhdGlvOnZvaWQgMCxkPWwmJmJsKGwsImFsbG93U2FtcGxlRHVwbGljYXRlcyIpP2wuYWxsb3dTYW1wbGVEdXBsaWNhdGVzOnZvaWQgMDthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEwKSksZCYmdGhp''@;'; put 'put ''cy5zYW1wbGVzR2VuZXJhdG9yLnNldEFsbG93RHVwbGljYXRlcyhkKX1yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXtlNyh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRBQkxFKSYmKHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpKX1nZXRTeW5jQ2Fs''@;'; put 'put ''Y3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtXa107bGV0IGE9QXkuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Um93cygpLTE7cmV0dXJuIHVzKGwpJiYoYT1sLnN5bmNMaW1pdCxsTihhKT9hPUlOKGQsYSk6YT4+PTAp''@;'; put 'put ''LE1hdGgubWluKGEsZCl9Z2V0Um93SGVpZ2h0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2b2lkIDA7Y29uc3QgZD1sPDA/dGhpcy5oZWFkZXJIZWlnaHQ6dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleCh0''@;'; put 'put ''aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKTtsZXQgaD1hO3JldHVybiBudWxsIT09ZCYmZD4oYXx8MCkmJihoPWQpLGh9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fWdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Q7''@;'; put 'put ''cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3I/bC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpOmwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpOi0xfWdldExhc3RWaXNpYmxlUm93KCl7Y29u''@;'; put 'put ''c3QgbD10aGlzLmhvdC52aWV3Ll93dDtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKTpsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3I/bC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpOi0xfWNs''@;'; put 'put ''ZWFyQ2FjaGUoKXt0aGlzLmhlYWRlckhlaWdodD1udWxsLHRoaXMucm93SGVpZ2h0c01hcC5pbml0KCl9Y2xlYXJDYWNoZUJ5UmFuZ2UobCl7Y29uc3R7ZnJvbTphLHRvOmR9PSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9Omw7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt2''@;'; put 'put ''byhNYXRoLm1pbihhLGQpLE1hdGgubWF4KGEsZCksaD0+e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxudWxsKX0pfSwhMCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIV8xKHRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgwLHRoaXMubWVhc3Vy''@;'; put 'put ''ZWRSb3dzKSxsPT5udWxsPT09bCkubGVuZ3RofW9uQmVmb3JlVmlld1JlbmRlcigpe2NvbnN0IGw9dGhpcy5ob3QucmVuZGVyQ2FsbCxhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLGQ9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxoPXRoaXMuZ2V0TGFzdFZpc2li''@;'; put 'put ''bGVSb3coKTtpZigtMSE9PWQmJi0xIT09aCl7aWYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmQsdG86aH0sdm9pZCAwLGwpLGEpe2NvbnN0IGY9dGhpcy5ob3QuY291bnRSb3dzKCktMTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206Zi1hLHRvOmZ9KX10aGlzLmlzTmVl''@;'; put 'put ''ZFJlY2FsY3VsYXRlKCkmJiF0aGlzLmluUHJvZ3Jlc3MmJnRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpfX1vbkJlZm9yZVJvd01vdmUobCxhKXt0aGlzLmNsZWFyQ2FjaGVCeVJhbmdlKHtmcm9tOmwsdG86YX0pLHRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpfW9uQmVmb3JlUm93''@;'; put 'put ''UmVzaXplKGwsYSxkKXtsZXQgaD1sO3JldHVybiBkJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KGEsdm9pZCAwLCEwKSxoPXRoaXMuZ2V0Um93SGVpZ2h0KGEpKSxofW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMuaG90LnZpZXc/dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKTpzZXRU''@;'; put 'put ''aW1lb3V0KCgpPT57dGhpcy5ob3QmJnRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9LDApfW9uQmVmb3JlQ2hhbmdlKGwpe2xldCBhPW51bGw7MT09PWwubGVuZ3RoP2E9bFswXVswXTpsLmxlbmd0aD4xJiYoYT17ZnJvbTpsWzBdWzBdLHRvOmxbbC5sZW5ndGgtMV1bMF19KSxudWxs''@;'; put 'put ''IT09YSYmdGhpcy5jbGVhckNhY2hlQnlSYW5nZShhKX1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBtcmU9bmV3IE1hcChbWyJpbmRleGVzU2VxdWVuY2UiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6Y1YsZ2V0TGlzdFdpdGhSZW1v''@;'; put 'put ''dmVkSXRlbXM6cHl9XSxbInBoeXNpY2FsbHlJbmRleGVkIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOmhWLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOmZWfV1dKSx2cmU9Yz0+e2lmKCExPT09bXJlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYEFsdGVyIHN0cmF0ZWd5IHdpdGggSUQgJyR7''@;'; put 'put ''Y30nIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBtcmUuZ2V0KGMpfSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOmZMZSxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpwTGV9PXZyZSgicGh5c2ljYWxseUluZGV4ZWQiKSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOnZMZSxnZXRMaXN0V2l0''@;'; put 'put ''aFJlbW92ZWRJdGVtczpfTGV9PXZyZSgicGh5c2ljYWxseUluZGV4ZWQiKSxkaj0iYmluZFJvd3NXaXRoSGVhZGVycyIsU0xlPW5ldyBNYXAoW1sibG9vc2UiLGNsYXNzIGdMZSBleHRlbmRzIEVne2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7Y29uc3QgZD1kVih0aGlz''@;'; put 'put ''LmluZGV4ZWRWYWx1ZXMsYSk7dGhpcy5pbmRleGVkVmFsdWVzPWZMZShkLGwsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPXBMZSh0aGlzLmluZGV4ZWRWYWx1ZXMsbCk7dGhpcy5pbmRleGVkVmFsdWVzPXVWKGEsbCksc3VwZXIucmVt''@;'; put 'put ''b3ZlKGwpfX1dLFsic3RyaWN0IixjbGFzcyBiTGUgZXh0ZW5kcyBFZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz12TGUodGhpcy5pbmRleGVkVmFsdWVzLGwsYSwoZCxoKT0+dGhpcy5nZXROZXh0VmFsdWUoaCkpLHN1cGVyLmluc2Vy''@;'; put 'put ''dChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9X0xlKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9Z2V0TmV4dFZhbHVlKGwpe3JldHVybiBNYXRoLm1heCguLi50aGlzLmdldFZhbHVlcygpKSsxK2x9fV1dKTtjbGFzcyBNTGUgZXh0ZW5kcyBac3tzdGF0''@;'; put 'put ''aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZGp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuaGVhZGVySW5kZXhlcz1udWxsfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtkal19''@;'; put 'put ''ZW5hYmxlUGx1Z2luKCl7aWYodGhpcy5lbmFibGVkKXJldHVybjtsZXQgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RqXTsic3RyaW5nIiE9dHlwZW9mIGwmJihsPSJsb29zZSIpO2NvbnN0IGE9U0xlLmdldChsKTt0aGlzLmhlYWRlckluZGV4ZXM9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIu''@;'; put 'put ''cmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiLG5ldyBhKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlciIsZD0+dGhpcy5vbk1vZGlmeVJvd0hlYWRlcihkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVu''@;'; put 'put ''cmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9b25Nb2RpZnlSb3dIZWFkZXIobCl7cmV0dXJuIHRoaXMuaGVhZGVySW5kZXhlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl9ZGVzdHJveSgpe3N1cGVyLmRl''@;'; put 'put ''c3Ryb3koKX19ZnVuY3Rpb24gaGooYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGtMZShjKXt2YXIgbD1mdW5jdGlvbiBBTGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBfcmUoYyxsKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gVExlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxicmUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gZmooYyxsLGEpe3JldHVybiBmdW5jdGlvbiBETGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRh''@;'; put 'put ''YmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLGJyZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gYnJlKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVk''@;'; put 'put ''IHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IHBqPSJjb2xsYXBzaWJsZUNvbHVtbnMiLExMZT1bIm5lc3RlZEhlYWRlcnMiXSxDNz0iY29sbGFwc2libGVJbmRpY2F0b3IiLHlyZT1uZXcgTWFwKFtbImNvbGxhcHNlIix7aGlk''@;'; put 'put ''ZUNvbHVtbjohMCxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkNvbGxhcHNlIn1dLFsiZXhwYW5kIix7aGlkZUNvbHVtbjohMSxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGFmdGVySG9vazoiYWZ0ZXJDb2x1bW5FeHBhbmQi''@;'; put 'put ''fV1dKTt2YXIgUzc9bmV3IFdlYWtNYXA7Y2xhc3MgUkxlIGV4dGVuZHMgWnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGhqKHRoaXMsIm5lc3RlZEhlYWRlcnNQbHVnaW4iLG51bGwpLGhqKHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IGxsKHRoaXMpKSxoaih0aGlzLCJoZWFk''@;'; put 'put ''ZXJTdGF0ZU1hbmFnZXIiLG51bGwpLGZ1bmN0aW9uIHhMZShjLGwsYSl7KGZ1bmN0aW9uIEVMZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwp''@;'; put 'put ''LGwuc2V0KGMsYSl9KHRoaXMsUzcse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gcGp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjkwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpOZXN0''@;'; put 'put ''ZWRIZWFkZXJzIl19c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bcGosLi4uTExlXX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbcGpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtuZXN0ZWRI''@;'; put 'put ''ZWFkZXJzOmF9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7YXx8R2EoIllvdSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIGluIG9yZGVyIHRvIHVzZSBjb2xsYXBzaWJsZSBoZWFkZXJzLiIpLGZqKHRoaXMsUzcsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIu''@;'; put 'put ''Y3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCh0aGlzLnBsdWdpbk5hbWUsImhpZGluZyIpKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJuZXN0ZWRIZWFkZXJzIiksdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXI9dGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmdl''@;'; put 'put ''dFN0YXRlTWFuYWdlcigpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PnRoaXMub25Jbml0KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFk''@;'; put 'put ''ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldENvbEhlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLChkLGgsZik9PnRoaXMub25CZWZvcmVPbkNlbGxNb3VzZURvd24oZCxoLGYpKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0''@;'; put 'put ''aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKHRoaXMuaG90LnZpZXcpe2lmKCF0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyl7Y29uc3R7Y29sbGFwc2libGVDb2x1bW5zOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7ImJvb2xl''@;'; put 'put ''YW4iPT10eXBlb2YgbD90aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZShhPT4oe2NvbGxhcHNpYmxlOmEub3JpZ0NvbHNwYW4+MX0pKTpBcnJheS5pc0FycmF5KGwpJiYodGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoKCk9Pih7Y29sbGFwc2libGU6ITF9KSksdGhpcy5o''@;'; put 'put ''ZWFkZXJTdGF0ZU1hbmFnZXIubWVyZ2VTdGF0ZVdpdGgobCkpfXN1cGVyLnVwZGF0ZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLGZqKHRoaXMsUzcsbnVsbCksdGhpcy5uZXN0ZWRIZWFk''@;'; put 'put ''ZXJzUGx1Z2luPW51bGwsdGhpcy5jbGVhckJ1dHRvbnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Y2xlYXJCdXR0b25zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxhPXRoaXMu''@;'; put 'put ''aG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCxoPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P3RoaXMuaG90LnZpZXcuX3d0''@;'; put 'put ''Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbCxmPWZ1bmN0aW9uKF8pe18mJl8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChfKX07dm8oMCxsLTEsXz0+e2NvbnN0IFQ9YS5jaGlsZE5vZGVzW19dLFc9ZC5jaGlsZE5vZGVzW19d''@;'; put 'put ''LGllPWg/aC5jaGlsZE5vZGVzW19dOm51bGw7dm8oMCxULmNoaWxkTm9kZXMubGVuZ3RoLTEsZ2U9PntsZXQgd2U9VC5jaGlsZE5vZGVzW2dlXS5xdWVyeVNlbGVjdG9yKGAuJHtDN31gKTtmKHdlKSxXJiZXLmNoaWxkTm9kZXNbZ2VdJiYod2U9Vy5jaGlsZE5vZGVzW2dlXS5xdWVyeVNlbGVj''@;'; put 'put ''dG9yKGAuJHtDN31gKSxmKHdlKSksaCYmaWUmJmllLmNoaWxkTm9kZXNbZ2VdJiYod2U9aWUuY2hpbGROb2Rlc1tnZV0ucXVlcnlTZWxlY3RvcihgLiR7Qzd9YCksZih3ZSkpfSl9KX1leHBhbmRTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIil9''@;'; put 'put ''Y29sbGFwc2VTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiY29sbGFwc2UiKX10b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKGwpe2NvbnN0IGE9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwTm9kZXMoZD0+e2NvbnN0e2NvbGxhcHNpYmxlOmgsb3Jp''@;'; put 'put ''Z0NvbHNwYW46ZixoZWFkZXJMZXZlbDpfLGNvbHVtbkluZGV4OlQsaXNDb2xsYXBzZWQ6V309ZDtpZighMD09PWgmJmY+MSYmKFcmJiJleHBhbmQiPT09bHx8IVcmJiJjb2xsYXBzZSI9PT1sKSlyZXR1cm57cm93OnRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmxldmVsVG9Sb3dDb29yZHMoXyks''@;'; put 'put ''Y29sOlR9fSk7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oYSxsKX1jb2xsYXBzZUFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiY29sbGFwc2UiKX1leHBhbmRBbGwoKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoImV4cGFuZCIpfXRvZ2ds''@;'; put 'put ''ZUNvbGxhcHNpYmxlU2VjdGlvbihsLGEpe2lmKCF5cmUuaGFzKGEpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWN0aW9uIGlzIHBhc3NlZCAoJHthfSkuYCk7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuO2NvbnN0IGQ9XzEobCxFZT0+e2xldHtyb3c6WmV9PUVlO3JldHVybiBa''@;'; put 'put ''ZTwwfSk7bGV0IGg9ZC5sZW5ndGg+MDtJbihkLEVlPT57dmFyIFplO2xldHtyb3c6b3QsY29sOmV0fT1FZTtjb25zdHtjb2xsYXBzaWJsZTp5dCxpc0NvbGxhcHNlZDprdH09bnVsbCE9PShaZT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhvdCxldCkpJiZ2b2lk''@;'; put 'put ''IDAhPT1aZT9aZTp7fTtpZigheXR8fGt0JiYiY29sbGFwc2UiPT09YXx8IWt0JiYiZXhwYW5kIj09PWEpcmV0dXJuIGg9ITEsITF9KTtjb25zdCBmPVtdLF89W107aCYmSW4oZCxFZT0+e2xldHtyb3c6WmUsY29sOm90fT1FZTtjb25zdHtjb2xzcGFuQ29tcGVuc2F0aW9uOmV0LGFmZmVjdGVk''@;'; put 'put ''Q29sdW1uczp5dCxyb2xsYmFja01vZGlmaWNhdGlvbjprdH09dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIudHJpZ2dlck5vZGVNb2RpZmljYXRpb24oYSxaZSxvdCk7ZXQ+MCYmKF8ucHVzaCguLi55dCksZi5wdXNoKGt0KSl9KTtjb25zdCBUPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpO2xl''@;'; put 'put ''dCBXPVtdOyJjb2xsYXBzZSI9PT1hP1c9ck4oWy4uLlQsLi4uX10pOiJleHBhbmQiPT09YSYmKFc9XzEoVCxFZT0+IV8uaW5jbHVkZXMoRWUpKSk7Y29uc3QgaWU9eXJlLmdldChhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKGllLmJlZm9yZUhvb2ssVCxXLGgpKXJldHVybiB2b2lkIElu''@;'; put 'put ''KGYsRWU9PntFZSgpfSk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntJbihfLEVlPT57X3JlKHRoaXMsUzcpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKEVlKSxpZS5oaWRlQ29sdW1uKX0pfSwhMCk7Y29uc3Qgd2U9dGhpcy5nZXRDb2xsYXBzZWRDb2x1''@;'; put 'put ''bW5zKCkubGVuZ3RoIT09VC5sZW5ndGg7dGhpcy5ob3QucnVuSG9va3MoaWUuYWZ0ZXJIb29rLFQsVyxoLHdlKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9Z2V0Q29sbGFwc2VkQ29sdW1ucygpe3JldHVybiBfcmUodGhpcyxTNykuZ2V0''@;'; put 'put ''SGlkZGVuSW5kZXhlcygpfW9uQWZ0ZXJHZXRDb2xIZWFkZXIobCxhLGQpe3ZhciBoO2NvbnN0e2NvbGxhcHNpYmxlOmYsb3JpZ0NvbHNwYW46Xyxpc0NvbGxhcHNlZDpUfT1udWxsIT09KGg9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyU2V0dGluZ3MoZCxsKSkmJnZvaWQgMCE9''@;'; put 'put ''PWg/aDp7fSxXPWYmJl8+MSYmbD49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtsZXQgaWU9YS5xdWVyeVNlbGVjdG9yKGAuJHtDN31gKTt2YXIgZ2U7Vz8oaWV8fChpZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikscGkoaWUsQzcp''@;'; put 'put ''LGEucXVlcnlTZWxlY3RvcigiZGl2OmZpcnN0LWNoaWxkIikuYXBwZW5kQ2hpbGQoaWUpKSxXbyhpZSxbImNvbGxhcHNlZCIsImV4cGFuZGVkIl0pLFQ/KHBpKGllLCJjb2xsYXBzZWQiKSxqcChpZSwiKyIpKToocGkoaWUsImV4cGFuZGVkIiksanAoaWUsIi0iKSkpOm51bGw9PT0oZ2U9aWUp''@;'; put 'put ''fHx2b2lkIDA9PT1nZXx8Z2UucmVtb3ZlKCl9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhKXtCbyhsLnRhcmdldCxDNykmJihCbyhsLnRhcmdldCwiZXhwYW5kZWQiKT8odGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGwudGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dnbGVDb2xsYXBz''@;'; put 'put ''aWJsZVNlY3Rpb24oW2FdLCJjb2xsYXBzZSIpKTpCbyhsLnRhcmdldCwiY29sbGFwc2VkIikmJih0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQobC50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbYV0sImV4cGFuZCIpKSx2MihsKSl9b25Jbml0KCl7''@;'; put 'put ''dGhpcy51cGRhdGVQbHVnaW4oKX1vbkFmdGVyTG9hZERhdGEobCxhKXthfHx0aGlzLnVwZGF0ZVBsdWdpbigpfWRlc3Ryb3koKXtmaih0aGlzLFM3LG51bGwpLHN1cGVyLmRlc3Ryb3koKX19Y29uc3QgT0xlPVsic29ydEVtcHR5Q2VsbHMiLCJpbmRpY2F0b3IiLCJoZWFkZXJBY3Rpb24iLCJj''@;'; put 'put ''b21wYXJlRnVuY3Rpb25GYWN0b3J5Il07Y2xhc3MgTkxle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9bCx0aGlzLnNvcnRpbmdTdGF0ZXM9bmV3IHhrLHRoaXMuc29ydEVtcHR5Q2VsbHM9ITEsdGhpcy5pbmRpY2F0b3I9ITAsdGhpcy5oZWFkZXJBY3Rpb249ITAsdGhpcy5jb21wYXJlRnVu''@;'; put 'put ''Y3Rpb25GYWN0b3J5PXZvaWQgMCx0aGlzLm1hcE5hbWU9YSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChhLHRoaXMuc29ydGluZ1N0YXRlcyl9dXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCl7dXMobCkmJmRzKGwsKGEsZCk9PntPTGUuaW5jbHVkZXMoZCkmJih0''@;'; put 'put ''aGlzW2RdPWEpfSl9Z2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKXtjb25zdCBsPXtzb3J0RW1wdHlDZWxsczp0aGlzLnNvcnRFbXB0eUNlbGxzLGluZGljYXRvcjp0aGlzLmluZGljYXRvcixoZWFkZXJBY3Rpb246dGhpcy5oZWFkZXJBY3Rpb259O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0''@;'; put 'put ''aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkmJihsLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk9dGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5KSxsfWdldFNvcnRPcmRlck9mQ29sdW1uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRl''@;'; put 'put ''eCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc29ydE9yZGVyfWdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKXtyZXR1cm4gbD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpLHRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCku''@;'; put 'put ''ZmluZEluZGV4KGE9PntsZXRbZF09YTtyZXR1cm4gZD09PWx9KX1nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5zb3J0aW5nU3RhdGVzLmdldExlbmd0aCgpfWlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldE51bWJlck9mU29ydGVk''@;'; put 'put ''Q29sdW1ucygpfWlzQ29sdW1uU29ydGVkKGwpe3JldHVybiB1cyh0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpKX1nZXRTb3J0U3RhdGVzKCl7cmV0dXJuIG51bGw9PT10aGlzLnNvcnRpbmdTdGF0ZXM/W106dGhpcy5zb3J0''@;'; put 'put ''aW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAoYT0+e2xldFtkLGhdPWE7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKSwuLi5ofX0pfWdldENvbHVtblNvcnRTdGF0ZShsKXtjb25zdCBhPXRoaXMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7aWYoS2koYSkpcmV0dXJu''@;'; put 'put ''e2NvbHVtbjpsLHNvcnRPcmRlcjphfX1zZXRTb3J0U3RhdGVzKGwpe3RoaXMuc29ydGluZ1N0YXRlcy5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSs9MSl0aGlzLnNvcnRpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obFthXS5jb2x1''@;'; put 'put ''bW4pLHtzb3J0T3JkZXI6bFthXS5zb3J0T3JkZXJ9KX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLm1hcE5hbWUpLHRoaXMuc29ydGluZ1N0YXRlcz1udWxsfX1jb25zdCBHaz0iYXNjIiwkaz0iZGVzYyI7ZnVuY3Rpb24gd3JlKGMpe2lm''@;'; put 'put ''KGMhPT0kaylyZXR1cm4gYz09PUdrPyRrOkdrfWZ1bmN0aW9uIENyZShjKXtyZXR1cm4gYy5xdWVyeVNlbGVjdG9yKCIuY29sSGVhZGVyIil9ZnVuY3Rpb24gU3JlKGMsbCl7aWYoYzwwfHwhbC5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9bC5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hp''@;'; put 'put ''bGROb2RlcztyZXR1cm4gQXJyYXkuZnJvbShhKS5pbmRleE9mKGwucGFyZW50Tm9kZSktYS5sZW5ndGg9PS0xfWZ1bmN0aW9uIGdqKGMsbCxhKXtyZXR1cm4tMT09PWMmJmw+PTAmJiExPT09VXAoYSl9Y29uc3QgTXJlPSJpbmRpY2F0b3JEaXNhYmxlZCIseHJlPSJjb2x1bW5Tb3J0aW5nIixF''@;'; put 'put ''cmU9InNvcnRBY3Rpb24iLGtyZT1uZXcgTWFwKFtbR2ssImFzY2VuZGluZyJdLFskaywiZGVzY2VuZGluZyJdXSk7ZnVuY3Rpb24gQXJlKGMsbCxhKXtjb25zdCBkPWwubG9jYWxlO3JldHVybiBmdW5jdGlvbihoLGYpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOl99PWE7cmV0dXJuInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBoJiYoaD1oLnRvTG9jYWxlTG93ZXJDYXNlKGQpKSwic3RyaW5nIj09dHlwZW9mIGYmJihmPWYudG9Mb2NhbGVMb3dlckNhc2UoZCkpLGg9PT1mPzA6cGMoaCk/cGMoZik/MDpfJiYiYXNjIj09PWM/LTE6MTpwYyhmKT9fJiYiYXNjIj09PWM/MTotMTppc05hTihoKSYmIWlzTmFO''@;'; put 'put ''KGYpPyJhc2MiPT09Yz8xOi0xOiFpc05hTihoKSYmaXNOYU4oZil8fChpc05hTihoKXx8aXNOYU4oZil8fChoPXBhcnNlRmxvYXQoaCksZj1wYXJzZUZsb2F0KGYpKSxoPGYpPyJhc2MiPT09Yz8tMToxOmg+Zj8iYXNjIj09PWM/MTotMTowfX1jb25zdHtyZWdpc3RlcjpxayxnZXRJdGVtOkRy''@;'; put 'put ''ZSxoYXNJdGVtOlFMZX09cGQoInNvcnRpbmcuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSIpLHtyZWdpc3RlcjpJcmUsZ2V0SXRlbTplUmV9PXBkKCJzb3J0aW5nLm1haW5Tb3J0Q29tcGFyYXRvciIpO2Z1bmN0aW9uIExyZShjKXtyZXR1cm4gUUxlKGMpP0RyZShjKTpEcmUoImRlZmF1bHQiKX1x''@;'; put 'put ''aygibnVtZXJpYyIsZnVuY3Rpb24gR0xlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdCBmPXBhcnNlRmxvYXQoZCksXz1wYXJzZUZsb2F0KGgpLHtzb3J0RW1wdHlDZWxsczpUfT1hO2lmKGY9PT1ffHxpc05hTihmKSYmaXNOYU4oXykpcmV0dXJuIDA7aWYoVCl7aWYocGMoZCkp''@;'; put 'put ''cmV0dXJuImFzYyI9PT1jPy0xOjE7aWYocGMoaCkpcmV0dXJuImFzYyI9PT1jPzE6LTF9cmV0dXJuIGlzTmFOKGYpPzE6aXNOYU4oXyk/LTE6ZjxfPyJhc2MiPT09Yz8tMToxOmY+Xz8iYXNjIj09PWM/MTotMTowfX0pLHFrKCJjaGVja2JveCIsZnVuY3Rpb24gcUxlKGMsbCxhKXtjb25zdCBk''@;'; put 'put ''PWwuY2hlY2tlZFRlbXBsYXRlLGg9bC51bmNoZWNrZWRUZW1wbGF0ZSx7c29ydEVtcHR5Q2VsbHM6Zn09YTtyZXR1cm4gZnVuY3Rpb24oXyxUKXtjb25zdCBXPXBjKF8pLGllPXBjKFQpLGdlPVc/aDpfLHdlPWllP2g6VCxFZT1nZT09PWh8fGdlPT09ZCxaZT13ZT09PWh8fHdlPT09ZDtpZigh''@;'; put 'put ''MT09PWYpe2lmKFcmJiExPT09aWUpcmV0dXJuIDE7aWYoITE9PT1XJiZpZSlyZXR1cm4tMX1yZXR1cm4hMT09PUVlJiZaZT8iYXNjIj09PWM/LTE6MTpFZSYmITE9PT1aZT8iYXNjIj09PWM/MTotMTohMT09PUVlJiYhMT09PVplP0FyZShjLGwsYSkoXyxUKTpnZT09PWgmJndlPT09ZD8iYXNj''@;'; put 'put ''Ij09PWM/LTE6MTpnZT09PWQmJndlPT09aD8iYXNjIj09PWM/MTotMTowfX0pLHFrKCJkYXRlIixmdW5jdGlvbiBYTGUoYyxsLGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOmZ9PWE7aWYoZD09PWgpcmV0dXJuIDA7aWYocGMoZCkpcmV0dXJuIHBjKGgpPzA6''@;'; put 'put ''ZiYmImFzYyI9PT1jPy0xOjE7aWYocGMoaCkpcmV0dXJuIGYmJiJhc2MiPT09Yz8xOi0xO2NvbnN0IF89bC5kYXRlRm9ybWF0LFQ9S28oZCxfKSxXPUtvKGgsXyk7cmV0dXJuIFQuaXNWYWxpZCgpP1cuaXNWYWxpZCgpP1cuaXNBZnRlcihUKT8iYXNjIj09PWM/LTE6MTpXLmlzQmVmb3JlKFQp''@;'; put 'put ''PyJhc2MiPT09Yz8xOi0xOjA6LTE6MX19KSxxaygiZGVmYXVsdCIsQXJlKTtjb25zdCBtaj0iY29sdW1uU29ydGluZyI7SXJlKG1qLGZ1bmN0aW9uIHRSZShjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24oVCl7Y29uc3Qg''@;'; put 'put ''Vz1jWzBdLGllPWxbMF0sZ2U9aFswXSx3ZT1mWzBdLEVlPWllLmNvbHVtblNvcnRpbmc7cmV0dXJuKEVlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/RWUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTpMcmUoaWUudHlwZSkpKFcsaWUsRWUpKGdlLHdlKX0oKX19KSxzby5nZXRTaW5nbGV0b24oKS5y''@;'; put 'put ''ZWdpc3RlcigiYmVmb3JlQ29sdW1uU29ydCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblNvcnQiKTtjbGFzcyBPcmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gbWp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4g''@;'; put 'put ''NTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGwsdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bnVsbCx0aGlzLnBsdWdpbktleT1taix0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlPW51bGx9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1uZXcgTkxlKHRoaXMuaG90LGAke3RoaXMucGx1Z2luS2V5fS5zb3J0aW5nU3RhdGVzYCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9''@;'; put 'put ''bmV3IFdwKGE9PntsZXQgZD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtyZXR1cm4gbnVsbD09PWQmJihkPWEpLHRoaXMuZ2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MoZCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1u''@;'; put 'put ''TWV0YWAsdGhpcy5jb2x1bW5NZXRhQ2FjaGUpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChhLGQpPT50aGlzLm9uQWZ0ZXJHZXRDb2xIZWFkZXIoYSxkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVP''@;'; put 'put ''bkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLChhLGQpPT50aGlzLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oYSxkKSksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLCgpPT50aGlzLmxvYWRPclNvcnRCeVNldHRpbmdzKCkp''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuaG90LnZpZXcmJnRoaXMubG9hZE9yU29ydEJ5U2V0dGluZ3MoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe2Nv''@;'; put 'put ''bnN0IGw9KGEsZCk9Pntjb25zdCBoPUNyZShkKTshMT09PVNyZShhLGQpfHxudWxsPT09aHx8dGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGgpfTt0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9''@;'; put 'put ''Pnt0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCl9KSx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e251bGwhPT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhl''@;'; put 'put ''c1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXkpKX0sITApLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoYCR7dGhpcy5wbHVnaW5LZXl9LmNvbHVtbk1ldGFgKSx0aGlz''@;'; put 'put ''LmNvbHVtblN0YXRlc01hbmFnZXIuZGVzdHJveSgpLHRoaXMuY29sdW1uTWV0YUNhY2hlPW51bGwsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNvcnQobCl7Y29uc3QgYT10aGlzLmdldFNvcnRDb25maWcoKSxkPXRoaXMuZ2V0Tm9ybWFsaXpl''@;'; put 'put ''ZFNvcnRDb25maWdzKGwpLGg9dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGQpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblNvcnQiLGEsZCxoKSYmKDA9PT1hLmxlbmd0aCYmbnVsbD09PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmluZGV4ZXNTZXF1ZW5j''@;'; put 'put ''ZUNhY2hlPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luS2V5LG5ldyB2bmUpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuc2V0VmFsdWVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKSksaCYmKHRoaXMuY29sdW1u''@;'; put 'put ''U3RhdGVzTWFuYWdlci5zZXRTb3J0U3RhdGVzKGQpLHRoaXMuc29ydEJ5UHJlc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNhdmVBbGxTb3J0U2V0dGluZ3MoZCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblNvcnQiLGEsaD9kOmEsaCksaCYmKHRoaXMuaG90LnJlbmRlcigpLHRoaXMu''@;'; put 'put ''aG90LmZvcmNlRnVsbFJlbmRlcj0hMSx0aGlzLmhvdC52aWV3LnJlbmRlcigpKSl9Y2xlYXJTb3J0KCl7dGhpcy5zb3J0KFtdKX1pc1NvcnRlZCgpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuaXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKX1nZXRT''@;'; put 'put ''b3J0Q29uZmlnKGwpe3JldHVybiBLaShsKT90aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0Q29sdW1uU29ydFN0YXRlKGwpOnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0U3RhdGVzKCl9c2V0U29ydENvbmZpZyhsKXtjb25zdCBhPXRoaXMuZ2V0Tm9ybWFsaXplZFNvcnRDb25m''@;'; put 'put ''aWdzKGwpO3RoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhhKSYmdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMoYSl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBd''@;'; put 'put ''OltdO3JldHVybiBBcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoMCwxKTpbbF19YXJlVmFsaWRTb3J0Q29uZmlncyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiBmdW5jdGlvbiBqTGUoYyl7aWYoYy5zb21lKGE9PiExPT09ZnVuY3Rpb24gQkxlKGMpe2lmKCExPT09dXMo''@;'; put 'put ''YykpcmV0dXJuITE7Y29uc3R7Y29sdW1uOmwsc29ydE9yZGVyOmF9PWM7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobCkmJltHaywka10uaW5jbHVkZXMoYSl9KGEpKSlyZXR1cm4hMTtjb25zdCBsPWMubWFwKGE9PntsZXR7Y29sdW1uOmR9PWE7cmV0dXJuIGR9KTtyZXR1cm4gbmV3IFNldChs''@;'; put 'put ''KS5zaXplPT09bC5sZW5ndGh9KGwpJiZsLmV2ZXJ5KGQ9PntsZXR7Y29sdW1uOmh9PWQ7cmV0dXJuIGg8PWEmJmg+PTB9KX1zYXZlQWxsU29ydFNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCk7YS5pbml0aWFsQ29u''@;'; put 'put ''ZmlnPWNzKGwsaD0+e2xldHtjb2x1bW46ZiwuLi5ffT1oO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKSwuLi5ffX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiY29sdW1uU29ydGluZyIsYSl9Z2V0QWxsU2F2ZWRTb3J0U2V0dGlu''@;'; put 'put ''Z3MoKXtjb25zdCBsPXt9O3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwiY29sdW1uU29ydGluZyIsbCk7Y29uc3QgYT1sLnZhbHVlO3JldHVybiBLaShhKSYmQXJyYXkuaXNBcnJheShhLmluaXRpYWxDb25maWcpJiYoYS5pbml0aWFsQ29uZmlnPWNzKGEuaW5pdGlh''@;'; put 'put ''bENvbmZpZyxoPT57bGV0e2NvbHVtbjpmLC4uLl99PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKSwuLi5ffX0pKSxhfWdldENvbHVtbk5leHRDb25maWcobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7''@;'; put 'put ''aWYoS2koYSkpe2NvbnN0IGg9d3JlKGEpO3JldHVybiBLaShoKT97Y29sdW1uOmwsc29ydE9yZGVyOmh9OnZvaWQgMH1jb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpO2lmKE51bWJlci5pc0ludGVnZXIobCkmJmw+PTAmJmw8ZClyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOndyZSgpfX1n''@;'; put 'put ''ZXROZXh0U29ydENvbmZpZyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImFwcGVuZCI7Y29uc3QgZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpLGg9LTEhPT1kLGY9''@;'; put 'put ''dGhpcy5nZXRTb3J0Q29uZmlnKCksXz10aGlzLmdldENvbHVtbk5leHRDb25maWcobCk7aWYoaCl7aWYoTGEoXykpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNlKGQrMSldO2lmKCJhcHBlbmQiPT09YSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKSxfXTtp''@;'; put 'put ''ZigicmVwbGFjZSI9PT1hKXJldHVyblsuLi5mLnNsaWNlKDAsZCksXywuLi5mLnNsaWNlKGQrMSldfXJldHVybiBLaShfKT9mLmNvbmNhdChfKTpmfWdldFBsdWdpbkNvbHVtbkNvbmZpZyhsKXtpZih1cyhsKSl7Y29uc3QgYT1sW3RoaXMucGx1Z2luS2V5XTtpZih1cyhhKSlyZXR1cm4gYX1y''@;'; put 'put ''ZXR1cm57fX1nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldLGQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCksaD10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGY9''@;'; put 'put ''T2JqZWN0LmdldFByb3RvdHlwZU9mKGgpO3JldHVybiBBcnJheS5pc0FycmF5KGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoZi5jb2x1bW5zW2xdKSk6UmEoZi5jb2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNv''@;'; put 'put ''bHVtbkNvbmZpZyhmLmNvbHVtbnMobCkpKTpPYmplY3QuYXNzaWduKGQsYSl9Z2V0Rmlyc3RDZWxsU2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGQ9T2JqZWN0LmNyZWF0ZShhKTtyZXR1cm4gZFt0aGlzLnBsdWdpbktleV09dGhpcy5jb2x1bW5NZXRhQ2Fj''@;'; put 'put ''aGUuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpLGR9Z2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtyZXR1cm4gYS5tYXhSb3dzPD1sP2EubWF4Um93czpsLWEubWluU3BhcmVSb3dzfXNvcnRCeVByZXNl''@;'; put 'put ''dFNvcnRTdGF0ZXMobCl7aWYoMD09PWwubGVuZ3RoKXJldHVybiB2b2lkIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKTtjb25zdCBhPVtdLGQ9dGhpcy5ob3QuY291bnRSb3dzKCksaD1pZT0+''@;'; put 'put ''Y3MobCxnZT0+dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChpZSxnZS5jb2x1bW4pKTtmb3IobGV0IGllPTA7aWU8dGhpcy5nZXROdW1iZXJPZlJvd3NUb1NvcnQoZCk7aWUrPTEpYS5wdXNoKFt0aGlzLmhvdC50b1BoeXNpY2FsUm93KGllKV0uY29uY2F0KGgoaWUpKSk7Y29uc3QgZj1jcyhhLGll''@;'; put 'put ''PT5pZVswXSk7IWZ1bmN0aW9uIFdMZShjLGwpe2NvbnN0IGE9ZVJlKGwpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+Mj9kLTI6MCksZj0yO2Y8ZDtmKyspaFtmLTJdPWFyZ3VtZW50c1tmXTtjLnNvcnQoYSguLi5oKSl9KGEsdGhpcy5wbHVnaW5LZXksY3MobCxp''@;'; put 'put ''ZT0+aWUuc29ydE9yZGVyKSxjcyhsLGllPT50aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGllLmNvbHVtbikpKTtmb3IobGV0IGllPWEubGVuZ3RoO2llPGQ7aWUrPTEpYS5wdXNoKFtpZV0uY29uY2F0KGgoaWUpKSk7Y29uc3QgXz1jcyhhLGllPT5pZVswXSksVD1uZXcgTWFwKGNzKGYsKGll''@;'; put 'put ''LGdlKT0+W2llLF9bZ2VdXSkpLFc9Y3ModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCksaWU9PlQuaGFzKGllKT9ULmdldChpZSk6aWUpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShXKX1sb2FkT3JTb3J0QnlTZXR0aW5ncygp''@;'; put 'put ''e2NvbnN0IGw9dGhpcy5nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpO2lmKHVzKGwpKXRoaXMuc29ydEJ5U2V0dGluZ3MobCk7ZWxzZXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldO3RoaXMuc29ydEJ5U2V0dGluZ3MoYSl9fXNvcnRCeVNldHRpbmdzKGwp''@;'; put 'put ''e2lmKHVzKGwpKXt0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIudXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCk7Y29uc3QgYT1sLmluaXRpYWxDb25maWc7KEFycmF5LmlzQXJyYXkoYSl8fHVzKGEpKSYmdGhpcy5zb3J0KGEpfWVsc2UgdGhpcy5ob3QucmVuZGVyKCl9b25BZnRlckdldENv''@;'; put 'put ''bEhlYWRlcihsLGEpe2NvbnN0IGQ9Q3JlKGEpO2lmKCExPT09U3JlKGwsYSl8fG51bGw9PT1kKXJldHVybjtjb25zdCBoPXRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MobClbdGhpcy5wbHVnaW5LZXldO3RoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhkLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdl''@;'; put 'put ''cixsLGguaW5kaWNhdG9yLGguaGVhZGVyQWN0aW9uKX11cGRhdGVIZWFkZXJDbGFzc2VzKGwpe2lmKFdvKGwsZnVuY3Rpb24gWUxlKCl7cmV0dXJuIEFycmF5LmZyb20oa3JlLnZhbHVlcygpKS5jb25jYXQoRXJlLE1yZSx4cmUpfSgpKSwhMSE9PXRoaXMuZW5hYmxlZCl7Zm9yKHZhciBhPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3BpKGwsZnVuY3Rpb24gWkxlKGMsbCxhLGQpe2NvbnN0IGg9W3hyZV07aWYoZCYmaC5wdXNoKEVyZSksITE9PT1hKXJldHVybiBoLnB1c2goTXJlKSxoO2NvbnN0IGY9''@;'; put 'put ''Yy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtyZXR1cm4gS2koZikmJmgucHVzaChrcmUuZ2V0KGYpKSxofSguLi5kKSl9fW9uVXBkYXRlU2V0dGluZ3MobCl7c3VwZXIub25VcGRhdGVTZXR0aW5ncygpLG51bGwhPT10aGlzLmNvbHVtbk1ldGFDYWNoZSYmdGhpcy5jb2x1bW5NZXRhQ2FjaGUu''@;'; put 'put ''aW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSksS2kobFt0aGlzLnBsdWdpbktleV0pJiZ0aGlzLnNvcnRCeVNldHRpbmdzKGxbdGhpcy5wbHVnaW5LZXldKX1vbkFmdGVyTG9hZERhdGEobCl7ITA9PT1sJiZ0aGlzLmhvdC52aWV3JiZ0aGlzLmxv''@;'; put 'put ''YWRPclNvcnRCeVNldHRpbmdzKCl9d2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEpe3JldHVybiB0aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGEpW3RoaXMucGx1Z2luS2V5XS5oZWFkZXJBY3Rpb24mJiJTUEFOIj09PWwudGFyZ2V0Lm5vZGVOYW1lfW9uQmVmb3JlT25DZWxsTW91c2VE''@;'; put 'put ''b3duKGwsYSxkLGgpeyExIT09Z2ooYS5yb3csYS5jb2wsbCkmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpJiYoaC5jb2x1bW49ITApfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24obCxh''@;'; put 'put ''KXshMSE9PWdqKGEucm93LGEuY29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkmJih0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJih0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEu''@;'; put 'put ''Y29sKSksdGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCkpKX1kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gdmooYyl7cmV0dXJu''@;'; put 'put ''IG51bGw9PWN8fGlzTmFOKGMpfWNvbnN0IF9qPSJjb2x1bW5TdW1tYXJ5IjtjbGFzcyBhUmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gX2p9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjIwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRo''@;'; put 'put ''aXMuZW5kcG9pbnRzPW51bGx9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW19qXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc2V0dGluZ3M9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtfal0sdGhpcy5lbmRwb2ludHM9bmV3''@;'; put 'put ''IGNsYXNzIGlSZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGx1Z2luPWwsdGhpcy5ob3Q9dGhpcy5wbHVnaW4uaG90LHRoaXMuZW5kcG9pbnRzPVtdLHRoaXMuc2V0dGluZ3M9YSx0aGlzLnNldHRpbmdzVHlwZT0iYXJyYXkiLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsdGhpcy5jZWxsc1Rv''@;'; put 'put ''U2V0Q2FjaGU9W119Z2V0RW5kcG9pbnQobCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncylbbF06dGhpcy5lbmRwb2ludHNbbF19Z2V0QWxsRW5kcG9pbnRzKCl7cmV0dXJuImZ1bmN0aW9uIj09''@;'; put 'put ''PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncyk6dGhpcy5lbmRwb2ludHN9ZmlsbE1pc3NpbmdFbmRwb2ludERhdGEobCl7cmV0dXJuIHRoaXMucGFyc2VTZXR0aW5ncyhsLmNhbGwodGhpcykpfXBhcnNlU2V0dGluZ3MobCl7Y29u''@;'; put 'put ''c3QgYT1bXTtsZXQgZD1sO2lmKGR8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnNldHRpbmdzKXJldHVybiBkfHwoZD10aGlzLnNldHRpbmdzKSxJbihkLGg9Pntjb25zdCBmPXt9O3RoaXMuYXNzaWduU2V0dGluZyhoLGYsInJhbmdlcyIsW1swLHRoaXMuaG90LmNvdW50Um93cygpLTFdXSks''@;'; put 'put ''dGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmV2ZXJzZWRSb3dDb29yZHMiLCExKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvblJvdyIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIHJvdyBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5''@;'; put 'put ''IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uQ29sdW1uIixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gY29sdW1uIGZvciB0aGUgQ29sdW1uIFN1''@;'; put 'put ''bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic291cmNlQ29sdW1uIixoLmRlc3RpbmF0aW9uQ29sdW1uKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJ0eXBlIiwic3VtIiksdGhpcy5hc3NpZ25TZXR0aW5n''@;'; put 'put ''KGgsZiwiZm9yY2VOdW1lcmljIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInN1cHByZXNzRGF0YVR5cGVFcnJvcnMiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJjdXN0b21GdW5jdGlv''@;'; put 'put ''biIsbnVsbCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmVhZE9ubHkiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyb3VuZEZsb2F0IiwhMSksYS5wdXNoKGYpfSksYTt0aGlzLnNldHRpbmdzVHlwZT0iZnVuY3Rpb24ifWFzc2lnblNldHRpbmcobCxhLGQsaCl7aWYoInJhbmdlcyIh''@;'; put 'put ''PT1kfHx2b2lkIDAhPT1sW2RdKXtpZigicmFuZ2VzIiE9PWR8fDAhPT1sW2RdLmxlbmd0aClpZih2b2lkIDA9PT1sW2RdKXtpZihoIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgaDthW2RdPWh9ZWxzZSBhW2RdPSJkZXN0aW5hdGlvblJvdyI9PT1kJiZhLnJldmVyc2VkUm93Q29vcmRzP3RoaXMu''@;'; put 'put ''aG90LmNvdW50Um93cygpLWxbZF0tMTpsW2RdfWVsc2UgYVtkXT1ofXJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkKXtpZigiZnVuY3Rpb24iIT09dGhpcy5zZXR0aW5nc1R5cGUpcmV0dXJuO2NvbnN0IGg9bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixm''@;'; put 'put ''PXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCk7SW4oZixfPT57InJvdyI9PT1oJiZfLmRlc3RpbmF0aW9uUm93Pj1hJiYoImluc2VydF9yb3ciPT09bD9fLmFsdGVyUm93T2Zmc2V0PWQ6InJlbW92ZV9yb3ciPT09bCYmKF8uYWx0ZXJSb3dPZmZzZXQ9LTEqZCkpLCJjb2wiPT09aCYmXy5kZXN0aW5h''@;'; put 'put ''dGlvbkNvbHVtbj49YSYmKCJpbnNlcnRfY29sIj09PWw/Xy5hbHRlckNvbHVtbk9mZnNldD1kOiJyZW1vdmVfY29sIj09PWwmJihfLmFsdGVyQ29sdW1uT2Zmc2V0PS0xKmQpKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoZiwhMSl9cmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlv''@;'; put 'put ''bihsLGEsZCxoLGYpe2xldCBfPSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07aWYoImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlKXtjb25zdCBFZT0oKT0+KHRoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVZpZXdSZW5kZXIi''@;'; put 'put ''LEVlKSx0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKSk7cmV0dXJuIHZvaWQgdGhpcy5ob3QuYWRkSG9va09uY2UoImJlZm9yZVZpZXdSZW5kZXIiLEVlKX1jb25zdCBUPWwuaW5kZXhPZigicm93Iik+LTE/InJvdyI6ImNvbCIsVz1sLmluZGV4T2YoInJlbW92ZSIpPi0xPy0xOjEsaWU9dGhp''@;'; put 'put ''cy5nZXRBbGxFbmRwb2ludHMoKSxnZT0wPT09bC5pbmRleE9mKCJtb3ZlX3JvdyIpLHdlPWE7SW4oaWUsRWU9Pnsicm93Ij09PVQmJkVlLmRlc3RpbmF0aW9uUm93Pj13ZSYmKEVlLmFsdGVyUm93T2Zmc2V0PVcqZCksImNvbCI9PT1UJiZFZS5kZXN0aW5hdGlvbkNvbHVtbj49d2UmJihFZS5h''@;'; put 'put ''bHRlckNvbHVtbk9mZnNldD1XKmQpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhpZSwhZ2UpLEluKGllLGdlP0VlPT57dGhpcy5leHRlbmRFbmRwb2ludFJhbmdlcyhFZSx3ZSxoWzBdLGgubGVuZ3RoKSx0aGlzLnJlY3JlYXRlUGh5c2ljYWxSYW5nZXMoRWUpLHRoaXMuY2xlYXJPZmZzZXRJ''@;'; put 'put ''bmZvcm1hdGlvbihFZSl9OkVlPT57dGhpcy5zaGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMoRWUsd2UpfSksXyYmdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRzKCl9Y2xlYXJPZmZzZXRJbmZvcm1hdGlvbihsKXtsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZvaWQg''@;'; put 'put ''MH1leHRlbmRFbmRwb2ludFJhbmdlcyhsLGEsZCxoKXtJbihsLnJhbmdlcyxmPT57ZlsxXSYmKGE+PWZbMF0mJmE8PWZbMV0/ZD5mWzFdP2ZbMV0rPWg6ZDxmWzBdJiYoZlswXS09aCk6ZD49ZlswXSYmZDw9ZlsxXSYmKGZbMV0tPWgsYTw9ZlswXSYmKGZbMF0rPTEsZlsxXSs9MSkpKX0pfXJl''@;'; put 'put ''Y3JlYXRlUGh5c2ljYWxSYW5nZXMobCl7Y29uc3QgZD1bXSxoPVtdO0luKGwucmFuZ2VzLGY9Pntjb25zdCBfPVtdO2lmKGZbMV0pZm9yKGxldCBUPWZbMF07VDw9ZlsxXTtUKyspXy5wdXNoKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coVCkpO2Vsc2UgXy5wdXNoKHRoaXMuaG90LnRvUGh5c2lj''@;'; put 'put ''YWxSb3coZlswXSkpO2gucHVzaChfKX0pLEluKGgsZj0+e2xldCBfPVtdO0luKGYsKFQsVyk9PnswPT09Vz9fLnB1c2goVCk6ZltXXSE9PWZbVy0xXSsxJiYoXy5wdXNoKGZbVy0xXSksZC5wdXNoKF8pLF89W10sXy5wdXNoKFQpKSxXPT09Zi5sZW5ndGgtMSYmKF8ucHVzaChUKSxkLnB1c2go''@;'; put 'put ''XykpfSl9KSxsLnJhbmdlcz1kfXNoaWZ0RW5kcG9pbnRDb29yZGluYXRlcyhsLGEpe2wuYWx0ZXJSb3dPZmZzZXQmJjAhPT1sLmFsdGVyUm93T2Zmc2V0PyhsLmRlc3RpbmF0aW9uUm93Kz1sLmFsdGVyUm93T2Zmc2V0fHwwLEluKGwucmFuZ2VzLGQ9PntJbihkLChoLGYpPT57aD49YSYmKGRb''@;'; put 'put ''Zl0rPWwuYWx0ZXJSb3dPZmZzZXR8fDApfSl9KSk6bC5hbHRlckNvbHVtbk9mZnNldCYmMCE9PWwuYWx0ZXJDb2x1bW5PZmZzZXQmJihsLmRlc3RpbmF0aW9uQ29sdW1uKz1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwLGwuc291cmNlQ29sdW1uKz1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwKX1yZXNl''@;'; put 'put ''dEFsbEVuZHBvaW50cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldEFsbEVuZHBvaW50cygpLGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtsLnNv''@;'; put 'put ''bWUoaD0+e2NvbnN0IF89aC5hbHRlckNvbHVtbk9mZnNldHx8MDtyZXR1cm4gaC5kZXN0aW5hdGlvblJvdysoaC5hbHRlclJvd09mZnNldHx8MCk+PXRoaXMuaG90LmNvdW50Um93cygpfHxoLmRlc3RpbmF0aW9uQ29sdW1uK18+PXRoaXMuaG90LmNvdW50Q29scygpfSl8fCh0aGlzLmNlbGxz''@;'; put 'put ''VG9TZXRDYWNoZT1bXSxJbihsLGg9Pnt0aGlzLnJlc2V0RW5kcG9pbnRWYWx1ZShoLGEpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdKX1yZWZyZXNoQWxsRW5kcG9pbnRz''@;'; put 'put ''KCl7dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sSW4odGhpcy5nZXRBbGxFbmRwb2ludHMoKSxsPT57dGhpcy5jdXJyZW50RW5kcG9pbnQ9bCx0aGlzLnBsdWdpbi5jYWxjdWxhdGUobCksdGhpcy5zZXRFbmRwb2ludFZhbHVlKGwsImluaXQiKX0pLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGws''@;'; put 'put ''dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGwpe2NvbnN0IGE9W107dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sSW4obCwoZCxoLGYp''@;'; put 'put ''PT57YCR7ZFsyXXx8IiJ9YCE9YCR7ZFszXX1gJiZJbih0aGlzLmdldEFsbEVuZHBvaW50cygpLChfLFQpPT57dGhpcy5ob3QucHJvcFRvQ29sKGZbaF1bMV0pPT09Xy5zb3VyY2VDb2x1bW4mJi0xPT09YS5pbmRleE9mKFQpJiZhLnB1c2goVCl9KX0pLEluKGEsZD0+e3RoaXMucmVmcmVzaEVu''@;'; put 'put ''ZHBvaW50KHRoaXMuZ2V0RW5kcG9pbnQoZCkpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hFbmRwb2ludChsKXt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRo''@;'; put 'put ''aXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbH1yZXNldEVuZHBvaW50VmFsdWUobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25z''@;'; put 'put ''dCBoPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDA7dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdysoYSYmbC5hbHRlclJvd09mZnNldHx8MCkpLHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwuZGVzdGluYXRpb25Db2x1bW4rKGE/''@;'; put 'put ''aDowKSksIiJdKX1zZXRFbmRwb2ludFZhbHVlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKGwuZGVzdGluYXRpb25Sb3c+PXRo''@;'; put 'put ''aXMuaG90LmNvdW50Um93cygpfHxsLmRlc3RpbmF0aW9uQ29sdW1uPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm4gdm9pZCB0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09Zil7''@;'; put 'put ''Y29uc3QgXz10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGwuZGVzdGluYXRpb25Db2x1bW4pOygiaW5pdCI9PT1hfHxfLnJlYWRPbmx5IT09bC5yZWFkT25seSkmJihfLnJlYWRPbmx5PWwucmVhZE9ubHksXy5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQiKX1sLnJvdW5kRmxvYXQmJiFp''@;'; put 'put ''c05hTihsLnJlc3VsdCkmJihsLnJlc3VsdD1sLnJlc3VsdC50b0ZpeGVkKGwucm91bmRGbG9hdCkpLGQ/dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHQsIkNvbHVtblN1bW1hcnkuc2V0Iik6dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbaCxs''@;'; put 'put ''LmRlc3RpbmF0aW9uQ29sdW1uLGwucmVzdWx0XSksbC5hbHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9dGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKXtHYSgiT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zJyBkZXN0aW5hdGlvbiBwb2ludHMg''@;'; put 'put ''eW91IHByb3ZpZGVkIGlzIGJleW9uZCB0aGUgdGFibGUgYm91bmRhcmllcyEiKX19KHRoaXMsdGhpcy5zZXR0aW5ncyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckluaXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNoYW5nZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVs''@;'; put 'put ''bCxoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfcm93IiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVm''@;'; put 'put ''b3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIs''@;'; put 'put ''Li4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsKGEsZCxoKT0+dGhp''@;'; put 'put ''cy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTto''@;'; put 'put ''KyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk''@;'; put 'put ''PW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93TW92ZSIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''bC5vbkFmdGVyUm93TW92ZSguLi5hcmd1bWVudHMpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmVuZHBvaW50cz1udWxsLHRoaXMuc2V0dGluZ3M9bnVsbCx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsfWNhbGN1bGF0ZShsKXtzd2l0Y2gobC50eXBlLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkpe2Nhc2Uic3VtIjpsLnJlc3VsdD10aGlzLmNhbGN1bGF0ZVN1bShsKTticmVhaztjYXNlIm1pbiI6Y2FzZSJtYXgiOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlTWluTWF4KGwsbC50eXBlKTticmVhaztjYXNlImNvdW50IjpsLnJlc3VsdD10aGlzLmNvdW50RW50cmllcyhs''@;'; put 'put ''KTticmVhaztjYXNlImF2ZXJhZ2UiOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlQXZlcmFnZShsKTticmVhaztjYXNlImN1c3RvbSI6bC5yZXN1bHQ9bC5jdXN0b21GdW5jdGlvbi5jYWxsKHRoaXMsbCl9fWNhbGN1bGF0ZVN1bShsKXtsZXQgYT0wO3JldHVybiBkcyhsLnJhbmdlcyxkPT57YSs9''@;'; put 'put ''dGhpcy5nZXRQYXJ0aWFsU3VtKGQsbC5zb3VyY2VDb2x1bW4pfSksYX1nZXRQYXJ0aWFsU3VtKGwsYSl7bGV0IGQ9MCxoPWxbMV18fGxbMF0sZj1udWxsLF89MDtkb3tpZihmPXRoaXMuZ2V0Q2VsbFZhbHVlKGgsYSksZj12aihmKT9udWxsOmYsbnVsbCE9PWYpe2NvbnN0IFQ9KGAke2Z9YC5z''@;'; put 'put ''cGxpdCgiLiIpWzFdfHxbXSkubGVuZ3RofHwxO1Q+XyYmKF89VCl9ZCs9Znx8MCxoLT0xfXdoaWxlKGg+PWxbMF0pO3JldHVybiBNYXRoLnJvdW5kKGQqMTAqKl8pLzEwKipffWNhbGN1bGF0ZU1pbk1heChsLGEpe2xldCBkPW51bGw7cmV0dXJuIGRzKGwucmFuZ2VzLGg9Pntjb25zdCBmPXRo''@;'; put 'put ''aXMuZ2V0UGFydGlhbE1pbk1heChoLGwuc291cmNlQ29sdW1uLGEpO2lmKG51bGw9PT1kJiZudWxsIT09ZiYmKGQ9ZiksbnVsbCE9PWYpc3dpdGNoKGEpe2Nhc2UibWluIjpkPU1hdGgubWluKGQsZik7YnJlYWs7Y2FzZSJtYXgiOmQ9TWF0aC5tYXgoZCxmKX19KSxudWxsPT09ZD8iTm90IGVu''@;'; put 'put ''b3VnaCBkYXRhIjpkfWdldFBhcnRpYWxNaW5NYXgobCxhLGQpe2xldCBfLGg9bnVsbCxmPWxbMV18fGxbMF07ZG97aWYoXz10aGlzLmdldENlbGxWYWx1ZShmLGEpLF89dmooXyk/bnVsbDpfLG51bGw9PT1oKWg9XztlbHNlIGlmKG51bGwhPT1fKXN3aXRjaChkKXtjYXNlIm1pbiI6aD1NYXRo''@;'; put 'put ''Lm1pbihoLF8pO2JyZWFrO2Nhc2UibWF4IjpoPU1hdGgubWF4KGgsXyl9Zi09MX13aGlsZShmPj1sWzBdKTtyZXR1cm4gaH1jb3VudEVtcHR5KGwsYSl7bGV0IGQsaD0wLGY9bFsxXXx8bFswXTtkb3tkPXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksZD12aihkKT9udWxsOmQsbnVsbD09PWQmJiho''@;'; put 'put ''Kz0xKSxmLT0xfXdoaWxlKGY+PWxbMF0pO3JldHVybiBofWNvdW50RW50cmllcyhsKXtsZXQgYT0wO3JldHVybiBkcyhsLnJhbmdlcyxoPT57Y29uc3QgZj12b2lkIDA9PT1oWzFdPzE6aFsxXS1oWzBdKzEsXz10aGlzLmNvdW50RW1wdHkoaCxsLnNvdXJjZUNvbHVtbik7YSs9ZixhLT1ffSks''@;'; put 'put ''YX1jYWxjdWxhdGVBdmVyYWdlKGwpe3JldHVybiB0aGlzLmNhbGN1bGF0ZVN1bShsKS90aGlzLmNvdW50RW50cmllcyhsKX1nZXRDZWxsVmFsdWUobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvVmlzdWFsUm93KGwpLGg9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7bGV0IGY9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U291cmNlRGF0YUF0Q2VsbChsLGEpLF89IiI7aWYobnVsbCE9PWQmJm51bGwhPT1oJiYoXz10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGgpLmNsYXNzTmFtZXx8IiIpLF8uaW5kZXhPZigiY29sdW1uU3VtbWFyeVJlc3VsdCIpPi0xKXJldHVybiBudWxsO2lmKHRoaXMuZW5kcG9pbnRzLmN1''@;'; put 'put ''cnJlbnRFbmRwb2ludC5mb3JjZU51bWVyaWMmJigic3RyaW5nIj09dHlwZW9mIGYmJihmPWYucmVwbGFjZSgvLC8sIi4iKSksZj1wYXJzZUZsb2F0KGYpKSxpc05hTihmKSYmIXRoaXMuZW5kcG9pbnRzLmN1cnJlbnRFbmRwb2ludC5zdXBwcmVzc0RhdGFUeXBlRXJyb3JzKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcihBYWBDb2x1bW5TdW1tYXJ5IHBsdWdpbjogY2VsbCBhdCAoJHtsfSwgJHthfSkgaXMgbm90IGluIGFceDIwCiAgICAgICAgICBudW1lcmljIGZvcm1hdC4gQ2Fubm90IGRvIHRoZSBjYWxjdWxhdGlvbi5gKTtyZXR1cm4gZn1vbkFmdGVySW5pdCgpe3RoaXMuZW5kcG9pbnRzLmVuZHBv''@;'; put 'put ''aW50cz10aGlzLmVuZHBvaW50cy5wYXJzZVNldHRpbmdzKCksdGhpcy5lbmRwb2ludHMucmVmcmVzaEFsbEVuZHBvaW50cyghMCl9b25BZnRlckNoYW5nZShsLGEpe2wmJiJDb2x1bW5TdW1tYXJ5LnJlc2V0IiE9PWEmJiJDb2x1bW5TdW1tYXJ5LnNldCIhPT1hJiYibG9hZERhdGEiIT09YSYm''@;'; put 'put ''dGhpcy5lbmRwb2ludHMucmVmcmVzaENoYW5nZWRFbmRwb2ludHMobCl9b25BZnRlclJvd01vdmUobCxhKXt0aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGxbMF0sbC5sZW5ndGgsbCx0aGlzLnBsdWdpbk5hbWUpLHRoaXMuZW5k''@;'; put 'put ''cG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oIm1vdmVfcm93IixhLGwubGVuZ3RoLGwsdGhpcy5wbHVnaW5OYW1lKX19Y2xhc3MgTTd7c3RhdGljIGdldCBDTEFTU19FRElUT1JfQ09OVEFJTkVSKCl7cmV0dXJuImh0Q29tbWVudHNDb250YWluZXIifXN0YXRpYyBn''@;'; put 'put ''ZXQgQ0xBU1NfRURJVE9SKCl7cmV0dXJuImh0Q29tbWVudHMifXN0YXRpYyBnZXQgQ0xBU1NfSU5QVVQoKXtyZXR1cm4iaHRDb21tZW50VGV4dEFyZWEifXN0YXRpYyBnZXQgQ0xBU1NfQ0VMTCgpe3JldHVybiJodENvbW1lbnRDZWxsIn1jb25zdHJ1Y3RvcihsLGEpe3RoaXMucm9vdERvY3Vt''@;'; put 'put ''ZW50PWwsdGhpcy5pc1J0bD1hLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5lZGl0b3I9dGhpcy5jcmVhdGVFZGl0b3IoKSx0aGlzLmVkaXRvclN0eWxlPXRoaXMuZWRpdG9yLnN0eWxlLHRoaXMuaGlkZGVuPSEwLHRoaXMuaGlkZSgpfXNldFBvc2l0aW9uKGwsYSl7dGhpcy5lZGl0b3JTdHls''@;'; put 'put ''ZS5sZWZ0PWAke2x9cHhgLHRoaXMuZWRpdG9yU3R5bGUudG9wPWAke2F9cHhgfXNldFNpemUobCxhKXtpZihsJiZhKXtjb25zdCBkPXRoaXMuZ2V0SW5wdXRFbGVtZW50KCk7ZC5zdHlsZS53aWR0aD1gJHtsfXB4YCxkLnN0eWxlLmhlaWdodD1gJHthfXB4YH19Z2V0U2l6ZSgpe3JldHVybnt3''@;'; put 'put ''aWR0aDp3YSh0aGlzLmdldElucHV0RWxlbWVudCgpKSxoZWlnaHQ6YWwodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSl9fXJlc2V0U2l6ZSgpe2NvbnN0IGw9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtsLnN0eWxlLndpZHRoPSIiLGwuc3R5bGUuaGVpZ2h0PSIifXNldFJlYWRPbmx5U3RhdGUobCl7''@;'; put 'put ''dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5yZWFkT25seT1sfXNob3coKXt0aGlzLmVkaXRvclN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmhpZGRlbj0hMX1oaWRlKCl7dGhpcy5oaWRkZW58fCh0aGlzLmVkaXRvclN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLmhpZGRlbj0hMH1pc1Zpc2li''@;'; put 'put ''bGUoKXtyZXR1cm4iYmxvY2siPT09dGhpcy5lZGl0b3JTdHlsZS5kaXNwbGF5fXNldFZhbHVlKCl7Y29uc3QgYT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiKXx8IiI7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZT1hfWdldFZh''@;'; put 'put ''bHVlKCl7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWV9aXNGb2N1c2VkKCl7cmV0dXJuIHRoaXMucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmdldElucHV0RWxlbWVudCgpfWZvY3VzKCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpfWNyZWF0ZUVk''@;'; put 'put ''aXRvcigpe2NvbnN0IGw9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksYT10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBsLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuY29udGFpbmVyPXRoaXMucm9vdERvY3VtZW50LmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmlzUnRsPyJydGwiOiJsdHIiKSxwaSh0aGlzLmNvbnRhaW5lcixNNy5DTEFTU19FRElUT1JfQ09OVEFJTkVSKSx0aGlzLnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29u''@;'; put 'put ''dGFpbmVyKSxwaShsLE03LkNMQVNTX0VESVRPUikscGkoYSxNNy5DTEFTU19JTlBVVCksbC5hcHBlbmRDaGlsZChhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChsKSxsfWdldElucHV0RWxlbWVudCgpe3JldHVybiB0aGlzLmVkaXRvci5xdWVyeVNlbGVjdG9yKGAuJHtNNy5DTEFTU19J''@;'; put 'put ''TlBVVH1gKX1kZXN0cm95KCl7Y29uc3QgbD10aGlzLmNvbnRhaW5lcj90aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlOm51bGw7dGhpcy5lZGl0b3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVkaXRvciksdGhpcy5lZGl0b3I9bnVsbCx0aGlzLmVkaXRvclN0eWxlPW51bGwsbCYmbC5y''@;'; put 'put ''ZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9fWNvbnN0IGxSZT1NNyxncz0iLS0tLS0tLS0tIjtmdW5jdGlvbiBLayhjKXtyZXR1cm4gQm8oYywiaHRTZXBhcmF0b3IiKX1mdW5jdGlvbiBYayhjKXtyZXR1cm4gQm8oYywiaHREaXNhYmxlZCIpfWZ1bmN0aW9uIEprKGMpe3JldHVybiBCbyhj''@;'; put 'put ''LCJodFNlbGVjdGlvbkRpc2FibGVkIil9ZnVuY3Rpb24gSWcoYyl7Y29uc3QgbD1jLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGxbMF08MD9udWxsOmx9ZnVuY3Rpb24gTGcoYyxsKXtjb25zdCBhPXt9O3JldHVybiBJbihjLGQ9PntkLmZvckFsbCgoaCxmKT0+e2g+PTAmJmY+PTAmJihhW2hd''@;'; put 'put ''fHwoYVtoXT1bXSksYVtoXVtmXT1sKGgsZikpfSl9KSxhfWZ1bmN0aW9uIEtwKGMsbCxhLGQsaCl7SW4oYyxmPT57Zi5mb3JBbGwoKF8sVCk9PntfPj0wJiZUPj0wJiZmdW5jdGlvbiBwUmUoYyxsLGEsZCxoLGYpe2NvbnN0IF89aChjLGwpO2xldCBUPWQ7Xy5jbGFzc05hbWUmJihUPSJ2ZXJ0''@;'; put 'put ''aWNhbCI9PT1hP2Z1bmN0aW9uIGhSZShjLGwpe3JldHVybi0xIT09Yy5pbmRleE9mKGwpP2M6YCR7Yy5yZXBsYWNlKCJodFRvcCIsIiIpLnJlcGxhY2UoImh0TWlkZGxlIiwiIikucmVwbGFjZSgiaHRCb3R0b20iLCIiKS5yZXBsYWNlKCIgICIsIiIpfSAke2x9YH0oXy5jbGFzc05hbWUsZCk6''@;'; put 'put ''ZnVuY3Rpb24gZlJlKGMsbCl7cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0TGVmdCIsIiIpLnJlcGxhY2UoImh0Q2VudGVyIiwiIikucmVwbGFjZSgiaHRSaWdodCIsIiIpLnJlcGxhY2UoImh0SnVzdGlmeSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfShf''@;'; put 'put ''LmNsYXNzTmFtZSxkKSksZihjLGwsImNsYXNzTmFtZSIsVCl9KF8sVCxsLGEsZCxoKX0pfSl9ZnVuY3Rpb24geWgoYyxsKXtsZXQgYT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmSW4oYyxkPT4oZC5mb3JBbGwoKGgsZik9PntpZihoPj0wJiZmPj0wJiZsKGgsZikpcmV0dXJuIGE9ITAs''@;'; put 'put ''ITF9KSxhKSksYX1mdW5jdGlvbiBZZihjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj4ke1N0cmluZy5mcm9tQ2hhckNvZGUoMTAwMDMpfTwvc3Bhbj4ke2N9YH1mdW5jdGlvbiBQcmUoYyxsKXtjb25zdCBhPWMuc2xpY2UoMCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aCYmYVtkXS5u''@;'; put 'put ''YW1lPT09bDspYS5zaGlmdCgpO3JldHVybiBhfWNsYXNzIEZyZXtjb25zdHJ1Y3RvcihsKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZD1udWxsLHRoaXMuaGlkaW5nVGltZXI9bnVsbCx0aGlzLnVwZGF0ZURlbGF5KGwpfWhpZGUoKXt0aGlzLndhc0xhc3RB''@;'; put 'put ''Y3Rpb25TaG93PSExLHRoaXMuaGlkaW5nVGltZXI9c2V0VGltZW91dCgoKT0+eyExPT09dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJoaWRlIil9LDI1MCl9c2hvdyhsKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZChsKX1j''@;'; put 'put ''YW5jZWxIaWRpbmcoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLGNsZWFyVGltZW91dCh0aGlzLmhpZGluZ1RpbWVyKSx0aGlzLmhpZGluZ1RpbWVyPW51bGx9dXBkYXRlRGVsYXkoKXt0aGlzLnNob3dEZWJvdW5jZWQ9bU4oYT0+e3RoaXMud2FzTGFzdEFjdGlvblNob3cmJnRoaXMucnVu''@;'; put 'put ''TG9jYWxIb29rcygic2hvdyIsYS5mcm9tLnJvdyxhLmZyb20uY29sKX0sYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjI1MCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fVRhKEZyZSxPMCk7Y29uc3Qgd1JlPUZyZSxiaj0i''@;'; put 'put ''Y29tbWVudHMiLFFrPW5ldyBXZWFrTWFwLHdoPSJjb21tZW50Iix4Nz0idmFsdWUiLGVBPSJyZWFkT25seSI7Y2xhc3MgU1JlIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGJqfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDYwfWNvbnN0cnVj''@;'; put 'put ''dG9yKGwpe3N1cGVyKGwpLHRoaXMuZWRpdG9yPW51bGwsdGhpcy5kaXNwbGF5U3dpdGNoPW51bGwsdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLnJhbmdlPXt9LHRoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2g9ITEsUWsuc2V0KHRoaXMse3RlbXBFZGl0b3JEaW1lbnNpb25zOnt9LGNl''@;'; put 'put ''bGxCZWxvd0N1cnNvcjpudWxsfSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2JqXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmVkaXRvcnx8KHRoaXMuZWRpdG9yPW5ldyBsUmUodGhpcy5ob3Qucm9vdERvY3VtZW50LHRoaXMuaG90Lmlz''@;'; put 'put ''UnRsKCkpKSx0aGlzLmV2ZW50TWFuYWdlcnx8KHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSksdGhpcy5kaXNwbGF5U3dpdGNofHwodGhpcy5kaXNwbGF5U3dpdGNoPW5ldyB3UmUodGhpcy5nZXREaXNwbGF5RGVsYXlTZXR0aW5nKCkpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4''@;'; put 'put ''dE1lbnVEZWZhdWx0T3B0aW9ucyIsbD0+dGhpcy5hZGRUb0NvbnRleHRNZW51KGwpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyZXIiLChsLGEsZCxoLGYsXyk9PnRoaXMub25BZnRlclJlbmRlcmVyKGwsXykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50''@;'; put 'put ''aGlzLmhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLmhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmRpc3BsYXlTd2l0Y2guYWRkTG9jYWxIb29rKCJoaWRlIiwoKT0+dGhpcy5o''@;'; put 'put ''aWRlKCkpLHRoaXMuZGlzcGxheVN3aXRjaC5hZGRMb2NhbEhvb2soInNob3ciLChsLGEpPT50aGlzLnNob3dBdENlbGwobCxhKSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVu''@;'; put 'put ''YWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpLHRoaXMuZGlzcGxheVN3aXRjaC51cGRhdGVEZWxheSh0aGlzLmdldERpc3BsYXlEZWxheVNldHRpbmcoKSl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0e3Jvb3RE''@;'; put 'put ''b2N1bWVudDpsfT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlb3ZlciIsYT0+dGhpcy5vbk1vdXNlT3ZlcihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLGE9PnRoaXMub25Nb3VzZURvd24oYSkp''@;'; put 'put ''LHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCksImJsdXIiLCgpPT50aGlzLm9uRWRpdG9yQmx1cigp''@;'; put 'put ''KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZWRpdG9yLmdldElucHV0RWxlbWVudCgpLCJtb3VzZWRvd24iLGE9PnRoaXMub25FZGl0b3JNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5lZGl0b3IuZ2V0SW5wdXRF''@;'; put 'put ''bGVtZW50KCksIm1vdXNldXAiLGE9PnRoaXMub25FZGl0b3JNb3VzZVVwKGEpKX1zZXRSYW5nZShsKXt0aGlzLnJhbmdlPWx9Y2xlYXJSYW5nZSgpe3RoaXMucmFuZ2U9e319dGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQobCl7Y29uc3QgYT1OcChsLnRhcmdldCwiVEQiLCJUQk9EWSIpO3JldHVy''@;'; put 'put ''biEhKGEmJkJvKGEsImh0Q29tbWVudENlbGwiKSYmTnAoYSxbdGhpcy5ob3Qucm9vdEVsZW1lbnRdKSl9dGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCl7cmV0dXJuIHRoaXMuZWRpdG9yLmdldElucHV0RWxlbWVudCgpPT09bC50YXJnZXR9c2V0Q29tbWVudChsKXtpZighdGhpcy5yYW5nZS5m''@;'; put 'put ''cm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3QgYT10aGlzLmVkaXRvci5nZXRWYWx1ZSgpO2xldCBkPSIiO251bGwhPWw/ZD1sOm51bGwh''@;'; put 'put ''PWEmJihkPWEpLHRoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtbeDddOmR9KSx0aGlzLmhvdC5yZW5kZXIoKX1zZXRDb21tZW50QXRDZWxsKGwsYSxkKXt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKGwsYSl9KSx0aGlzLnNldENvbW1lbnQoZCl9cmVtb3ZlQ29tbWVudCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0''@;'; put 'put ''aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO3RoaXMuaG90LnNldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx3aCksbCYmdGhpcy5ob3QucmVuZGVyKCksdGhpcy5o''@;'; put 'put ''aWRlKCl9cmVtb3ZlQ29tbWVudEF0Q2VsbChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpfSksdGhpcy5yZW1vdmVDb21t''@;'; put 'put ''ZW50KGQpfWdldENvbW1lbnQoKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wseDcpfWdldENvbW1lbnRBdENlbGwobCxhKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShsLGEseDcpfXNob3coKXtpZighdGhpcy5y''@;'; put 'put ''YW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3R7ZnJvbTp7cm93OmwsY29sOmF9fT10aGlzLnJhbmdlO2lmKGw8MHx8bD50aGlz''@;'; put 'put ''LmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xfHxhPDB8fGE+dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCktMSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuaG90LmdldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCk7cmV0dXJuIHRoaXMuZWRpdG9yLnNldFZh''@;'; put 'put ''bHVlKGRbd2hdP2Rbd2hdW3g3XToiIiksdGhpcy5lZGl0b3Iuc2hvdygpLHRoaXMucmVmcmVzaEVkaXRvcighMCksITB9c2hvd0F0Q2VsbChsLGEpe3JldHVybiB0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNob3coKX1oaWRlKCl7''@;'; put 'put ''dGhpcy5lZGl0b3IuaGlkZSgpfXJlZnJlc2hFZGl0b3IoKXt2YXIgbCxhO2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXXx8dGhpcy5yYW5nZS5mcm9tJiZ0aGlzLmVkaXRvci5pc1Zpc2libGUoKSkpcmV0dXJuO2NvbnN0e3Jvd0lu''@;'; put 'put ''ZGV4TWFwcGVyOmgsY29sdW1uSW5kZXhNYXBwZXI6Zn09dGhpcy5ob3Qse3JvdzpfLGNvbDpUfT10aGlzLnJhbmdlLmZyb207bGV0IFc9aC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF8pLGllPWYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChUKTtjb25zdCBnZT1udWxsPT09''@;'; put 'put ''Vzt0aGlzLmVkaXRvci5zZXRQb3NpdGlvbigwLDApLG51bGw9PT1XJiYoVz1oLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoXywtMSkpKSxudWxsPT09aWUmJihpZT1mLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZi5nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgoVCwtMSkpKTtjb25zdCB3ZT1udWxsPT09VyxFZT1udWxsPT09aWU7Vz1udWxsIT09KGw9VykmJnZvaWQgMCE9PWw/bDowLGllPW51bGwhPT0oYT1pZSkmJnZvaWQgMCE9PWE/YTowO2NvbnN0e3Jvb3RXaW5kb3c6WmUsdmlldzp7X3d0Om90fX09dGhpcy5ob3Qs''@;'; put 'put ''e3d0VGFibGU6ZXR9PW90LHl0PW90LmdldENlbGwoe3JvdzpXLGNvbDppZX0sITApLGt0PXRoaXMuZ2V0Q29tbWVudE1ldGEoXyxULCJzdHlsZSIpO2t0P3RoaXMuZWRpdG9yLnNldFNpemUoa3Qud2lkdGgsa3QuaGVpZ2h0KTp0aGlzLmVkaXRvci5yZXNldFNpemUoKTtjb25zdCBTdD1FZT8w''@;'; put 'put ''OmV0LmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGllKSxRdD1nZSYmIXdlP2FsKHl0KTowLHtsZWZ0Om5uLHRvcDptbix3aWR0aDpFbixoZWlnaHQ6bHJ9PXl0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpWcixoZWlnaHQ6X2l9PXRoaXMuZWRpdG9yLmdldFNpemUoKSx7aW5uZXJX''@;'; put 'put ''aWR0aDp1aSxpbm5lckhlaWdodDpncn09dGhpcy5ob3Qucm9vdFdpbmRvdyxFaT10aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2xldCBVcj1ubitaZS5zY3JvbGxYK1N0LEhuPW1uK1plLnNjcm9sbFkrUXQ7dGhpcy5ob3QuaXNSdGwoKSYmKFVyLT1WcitTdCksdGhpcy5o''@;'; put 'put ''b3QuaXNMdHIoKSYmbm4rRW4rVnI+dWk/VXI9bm4rWmUuc2Nyb2xsWC1Wci0xOnRoaXMuaG90LmlzUnRsKCkmJlVyPC0oRWkuc2Nyb2xsV2lkdGgtRWkuY2xpZW50V2lkdGgpJiYoVXI9bm4rWmUuc2Nyb2xsWCtTdCsxKSxtbitfaT5nciYmKEhuLT1faS1scisxKSx0aGlzLmVkaXRvci5zZXRQ''@;'; put 'put ''b3NpdGlvbihVcixIbiksdGhpcy5lZGl0b3Iuc2V0UmVhZE9ubHlTdGF0ZSh0aGlzLmdldENvbW1lbnRNZXRhKF8sVCxlQSkpfWNoZWNrU2VsZWN0aW9uQ29tbWVudHNDb25zaXN0ZW5jeSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm4hMTts''@;'; put 'put ''ZXQgYT0hMTtjb25zdCBkPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKTtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShkLnJvdyxkLmNvbCx4NykmJihhPSEwKSxhfXVwZGF0ZUNvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSlbd2hdO2xldCBmO2g/KGY9''@;'; put 'put ''eXUoaCksYXkoZixkKSk6Zj1kLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSx3aCxmKX1nZXRDb21tZW50TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO2lmKGhbd2hdKXJldHVybiBoW3doXVtkXX1vbk1vdXNlRG93bihsKXtpZih0aGlzLmhvdC52aWV3JiZ0''@;'; put 'put ''aGlzLmhvdC52aWV3Ll93dCYmIXRoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2gmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGwpKXtjb25zdCBhPU5wKGwudGFyZ2V0LCJURCIsIlRCT0RZIik7bGV0IGQ9bnVsbDthJiYoZD10aGlzLmhvdC5nZXRDb29yZHMoYSkpLCghYXx8dGhp''@;'; put 'put ''cy5yYW5nZS5mcm9tJiZkJiYodGhpcy5yYW5nZS5mcm9tLnJvdyE9PWQucm93fHx0aGlzLnJhbmdlLmZyb20uY29sIT09ZC5jb2wpKSYmdGhpcy5oaWRlKCl9fW9uTW91c2VPdmVyKGwpe2NvbnN0IGE9UWsuZ2V0KHRoaXMpLHtyb290RG9jdW1lbnQ6ZH09dGhpcy5ob3Q7aWYoISh0aGlzLnBy''@;'; put 'put ''ZXZlbnRFZGl0b3JBdXRvU3dpdGNofHx0aGlzLmVkaXRvci5pc0ZvY3VzZWQoKXx8Qm8obC50YXJnZXQsInd0Qm9yZGVyIil8fGEuY2VsbEJlbG93Q3Vyc29yPT09bC50YXJnZXQpJiZ0aGlzLmVkaXRvcilpZihhLmNlbGxCZWxvd0N1cnNvcj1kLmVsZW1lbnRGcm9tUG9pbnQobC5jbGllbnRY''@;'; put 'put ''LGwuY2xpZW50WSksdGhpcy50YXJnZXRJc0NlbGxXaXRoQ29tbWVudChsKSl7Y29uc3QgaD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90LmdldENvb3JkcyhsLnRhcmdldCkpO3RoaXMuZGlzcGxheVN3aXRjaC5zaG93KGgpfWVsc2UgVnAobC50YXJnZXQsZCkmJiF0aGlzLnRh''@;'; put 'put ''cmdldElzQ29tbWVudFRleHRBcmVhKGwpJiZ0aGlzLmRpc3BsYXlTd2l0Y2guaGlkZSgpfW9uTW91c2VVcCgpe3RoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2g9ITF9b25BZnRlclJlbmRlcmVyKGwsYSl7YVt3aF0mJmFbd2hdW3g3XSYmcGkobCxhLmNvbW1lbnRlZENlbGxDbGFzc05hbWUp''@;'; put 'put ''fW9uRWRpdG9yQmx1cigpe3RoaXMuc2V0Q29tbWVudCgpfW9uRWRpdG9yTW91c2VEb3duKGwpe1FrLmdldCh0aGlzKS50ZW1wRWRpdG9yRGltZW5zaW9ucz17d2lkdGg6d2EobC50YXJnZXQpLGhlaWdodDphbChsLnRhcmdldCl9fW9uRWRpdG9yTW91c2VVcChsKXtjb25zdCBhPVFrLmdldCh0''@;'; put 'put ''aGlzKSxkPXdhKGwudGFyZ2V0KSxoPWFsKGwudGFyZ2V0KTsoZCE9PWEudGVtcEVkaXRvckRpbWVuc2lvbnMud2lkdGgrMXx8aCE9PWEudGVtcEVkaXRvckRpbWVuc2lvbnMuaGVpZ2h0KzIpJiZ0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5m''@;'; put 'put ''cm9tLmNvbCx7c3R5bGU6e3dpZHRoOmQsaGVpZ2h0Omh9fSl9b25Db250ZXh0TWVudUFkZENvbW1lbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7dGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMCx0aGlzLmRpc3BsYXlTd2l0Y2guY2FuY2VsSGlkaW5n''@;'; put 'put ''KCksdGhpcy5zZXRSYW5nZSh7ZnJvbTpsLmhpZ2hsaWdodH0pLHRoaXMuc2hvdygpLHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuZWRpdG9yLmZvY3VzKCl9b25Db250ZXh0TWVudVJlbW92ZUNvbW1lbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7dGhp''@;'; put 'put ''cy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMCxsLmZvckFsbCgoYSxkKT0+e2E+PTAmJmQ+PTAmJnRoaXMucmVtb3ZlQ29tbWVudEF0Q2VsbChhLGQsITEpfSksdGhpcy5ob3QucmVuZGVyKCl9b25Db250ZXh0TWVudU1ha2VSZWFkT25seSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0''@;'; put 'put ''ZWRSYW5nZUxhc3QoKTt0aGlzLnByZXZlbnRFZGl0b3JBdXRvU3dpdGNoPSEwLGwuZm9yQWxsKChhLGQpPT57aWYoYT49MCYmZD49MCl7Y29uc3QgaD0hIXRoaXMuZ2V0Q29tbWVudE1ldGEoYSxkLGVBKTt0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKGEsZCx7W2VBXTohaH0pfX0pfWFkZFRvQ29u''@;'; put 'put ''dGV4dE1lbnUobCl7Y29uc3QgYT0oKT0+dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKT4wJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpPjA7bC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0t''@;'; put 'put ''LS0ifSx7a2V5OiJjb21tZW50c0FkZEVkaXQiLG5hbWU6KCk9PnRoaXMuY2hlY2tTZWxlY3Rpb25Db21tZW50c0NvbnNpc3RlbmN5KCk/dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShWVik6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShOViksY2FsbGJhY2s6KCk9PnRoaXMub25D''@;'; put 'put ''b250ZXh0TWVudUFkZENvbW1lbnQoKSxkaXNhYmxlZDooKT0+IWEoKXx8ISh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSYmIXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHtrZXk6ImNvbW1lbnRzUmVtb3ZlIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNs''@;'; put 'put ''YXRlZFBocmFzZShCVil9LGNhbGxiYWNrOigpPT50aGlzLm9uQ29udGV4dE1lbnVSZW1vdmVDb21tZW50KCksZGlzYWJsZWQ6KCk9PiFhKCl8fCEodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkmJiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfSx7a2V5OiJjb21t''@;'; put 'put ''ZW50c1JlYWRPbmx5IixuYW1lKCl7bGV0IGQ9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGpWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLChmLF8pPT57bGV0IFQ9dGhpcy5nZXRDZWxsTWV0YShmLF8pW3doXTtpZihUJiYoVD1UW2VBXSksVClyZXR1cm4hMH0pJiYo''@;'; put 'put ''ZD1ZZihkKSksZH0sY2FsbGJhY2s6KCk9PnRoaXMub25Db250ZXh0TWVudU1ha2VSZWFkT25seSgpLGRpc2FibGVkOigpPT4hYSgpfHwhKHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpJiYhdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZ0aGlzLmNoZWNrU2VsZWN0''@;'; put 'put ''aW9uQ29tbWVudHNDb25zaXN0ZW5jeSgpKX0pfWdldERpc3BsYXlEZWxheVNldHRpbmcoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbYmpdO2lmKHVzKGwpKXJldHVybiBsLmRpc3BsYXlEZWxheX1kZXN0cm95KCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmRlc3Ryb3koKSx0''@;'; put 'put ''aGlzLmRpc3BsYXlTd2l0Y2gmJnRoaXMuZGlzcGxheVN3aXRjaC5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1GKDE2MDAxKTtjb25zdCBOcmU9Y2xhc3MgTVJle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5jb21tYW5kcz17fSx0aGlzLmNvbW1vbkNhbGxiYWNrPW51bGx9cmVn''@;'; put 'put ''aXN0ZXJDb21tYW5kKGwsYSl7dGhpcy5jb21tYW5kc1tsXT1hfXNldENvbW1vbkNhbGxiYWNrKGwpe3RoaXMuY29tbW9uQ2FsbGJhY2s9bH1leGVjdXRlKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3Vt''@;'; put 'put ''ZW50c1toXTtjb25zdCBmPWwuc3BsaXQoIjoiKSxfPWZbMF0sVD0yPT09Zi5sZW5ndGg/ZlsxXTpudWxsO2xldCBXPXRoaXMuY29tbWFuZHNbX107aWYoIVcpdGhyb3cgbmV3IEVycm9yKGBNZW51IGNvbW1hbmQgJyR7X30nIG5vdCBleGlzdHMuYCk7aWYoVCYmVy5zdWJtZW51JiYoVz1mdW5j''@;'; put 'put ''dGlvbiB4UmUoYyxsKXtsZXQgYTtyZXR1cm4gSW4obCxkPT57Y29uc3QgaD1kLmtleT9kLmtleS5zcGxpdCgiOiIpOm51bGw7aWYoQXJyYXkuaXNBcnJheShoKSYmaFsxXT09PWMpcmV0dXJuIGE9ZCwhMX0pLGF9KFQsVy5zdWJtZW51Lml0ZW1zKSksITA9PT1XLmRpc2FibGVkfHwiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgVy5kaXNhYmxlZCYmITA9PT1XLmRpc2FibGVkLmNhbGwodGhpcy5ob3QpfHxibChXLCJzdWJtZW51IikpcmV0dXJuO2NvbnN0IGllPVtdOyJmdW5jdGlvbiI9PXR5cGVvZiBXLmNhbGxiYWNrJiZpZS5wdXNoKFcuY2FsbGJhY2spLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlz''@;'; put 'put ''LmNvbW1vbkNhbGxiYWNrJiZpZS5wdXNoKHRoaXMuY29tbW9uQ2FsbGJhY2spLGQudW5zaGlmdChmLmpvaW4oIjoiKSksSW4oaWUsZ2U9PmdlLmFwcGx5KHRoaXMuaG90LGQpKX19LHZkPSJhbGlnbm1lbnQiLHRBPSJjbGVhcl9jb2x1bW4iLFR5PSJjb2xfbGVmdCIsRHk9ImNvbF9yaWdodCIs''@;'; put 'put ''SXk9Im1ha2VfcmVhZF9vbmx5IixuQT0icmVkbyIsTHk9InJlbW92ZV9jb2wiLHJBPSJyZW1vdmVfcm93IixpQT0icm93X2Fib3ZlIixvQT0icm93X2JlbG93IixSeT0ibm9faXRlbXMiLHNBPSJ1bmRvIixWcmU9W2lBLG9BLFR5LER5LHRBLHJBLEx5LHNBLG5BLEl5LHZkLGdzLFJ5XSxCcmU9''@;'; put 'put ''e1tnc106ZnVuY3Rpb24gY1JlKCl7cmV0dXJue25hbWU6Z3N9fSxbUnldOmZ1bmN0aW9uIEZSZSgpe3JldHVybntrZXk6UnksbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoX1YpfSxkaXNhYmxlZDohMCxpc0NvbW1hbmQ6ITF9fSxbaUFdOmZ1bmN0aW9uIE9SZSgpe3Jl''@;'; put 'put ''dHVybntrZXk6aUEsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYlYpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcExlZnRDb3JuZXIoKTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixjLnJvdywxLCJDb250''@;'; put 'put ''ZXh0TWVudS5yb3dBYm92ZSIpfSxkaXNhYmxlZCgpe3JldHVybiFJZyh0aGlzKXx8KHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT10aGlzLmNvdW50Um93cygpOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmNvdW50Um93cygp''@;'; put 'put ''Pj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW29BXTpmdW5jdGlvbiBQUmUoKXtyZXR1cm57a2V5Om9BLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHlWKX0sY2Fs''@;'; put 'put ''bGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRCb3R0b21SaWdodENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0JlbG93Iil9LGRpc2FibGVkKCl7cmV0dXJuIUlnKHRoaXMpfHwhdGhpcy5z''@;'; put 'put ''ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJih0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5jb3VudFJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3MpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5z''@;'; put 'put ''ZXJ0Um93fX19LFtUeV06ZnVuY3Rpb24gQVJlKCl7cmV0dXJue2tleTpUeSxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh3Vil9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpLGw9dGhpcy5pc1J0''@;'; put 'put ''bCgpPyJpbnNlcnRfY29sX2VuZCI6Imluc2VydF9jb2xfc3RhcnQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5MZWZ0Iil9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCl8fCFJZyh0aGlzKXx8KHRoaXMuc2VsZWN0''@;'; put 'put ''aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT10aGlzLmNvdW50Q29scygpOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLmNvdW50Q29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdz''@;'; put 'put ''KCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW0R5XTpmdW5jdGlvbiBUUmUoKXtyZXR1cm57a2V5OkR5LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKENWKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BSaWdodENvcm5l''@;'; put 'put ''cigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX3N0YXJ0IjoiaW5zZXJ0X2NvbF9lbmQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5SaWdodCIpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpfHwhSWcodGhp''@;'; put 'put ''cyl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLmNvdW50Q29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCku''@;'; put 'put ''YWxsb3dJbnNlcnRDb2x1bW59fX0sW3RBXTpmdW5jdGlvbiBrUmUoKXtyZXR1cm57a2V5OnRBLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEFWKX0sY2FsbGJhY2soYyxsKXtjb25zdCBhPWxbMF0uc3RhcnQuY29sLGQ9bFswXS5lbmQuY29sO3RoaXMuY291bnRSb3dz''@;'; put 'put ''KCkmJnRoaXMucG9wdWxhdGVGcm9tQXJyYXkoMCxhLFtbbnVsbF1dLE1hdGgubWF4KGxbMF0uc3RhcnQucm93LGxbMF0uZW5kLnJvdyksZCwiQ29udGV4dE1lbnUuY2xlYXJDb2x1bW4iKX0sZGlzYWJsZWQoKXtyZXR1cm4hSWcodGhpcyl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlD''@;'; put 'put ''b2x1bW5IZWFkZXIoKX19fSxbckFdOmZ1bmN0aW9uIFJSZSgpe3JldHVybntrZXk6ckEsbmFtZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0W2EsLGRdPWNbMF07YS1kIT0wJiYobD0xKX1yZXR1cm4gdGhpcy5n''@;'; put 'put ''ZXRUcmFuc2xhdGVkUGhyYXNlKFNWLGwpfSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIoInJlbW92ZV9yb3ciLGZ1bmN0aW9uIHhEZShjKXtjb25zdCBsPWc3KGMpO2lmKDA9PT1sfHwxPT09bClyZXR1cm5bXTtjb25zdCBhPXl5KGwpLGQ9bmV3IFNldDtyZXR1cm4gSW4oYyxfPT57Y29uc3RbVCws''@;'; put 'put ''V109YShfKSxpZT1NYXRoLm1heChULDApO0luKEFycmF5LmZyb20obmV3IEFycmF5KFctaWUrMSksKHdlLEVlKT0+aWUrRWUpLHdlPT57ZC5oYXMod2UpfHxkLmFkZCh3ZSl9KX0pLEFsKEFycmF5LmZyb20oZCkuc29ydCgoXyxUKT0+Xy1UKSwoXyxULFcsaWUpPT4oMCE9PVcmJlQ9PT1pZVtX''@;'; put 'put ''LTFdKzE/X1tfLmxlbmd0aC0xXVsxXSs9MTpfLnB1c2goW1QsMV0pLF8pLFtdKX0odGhpcy5nZXRTZWxlY3RlZCgpKSwxLCJDb250ZXh0TWVudS5yZW1vdmVSb3ciKX0sZGlzYWJsZWQoKXtpZighSWcodGhpcykpcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50Um93cygpO3JldHVybiB0aGlz''@;'; put 'put ''LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVSb3d9fX0sW0x5XTpmdW5jdGlvbiBMUmUoKXtyZXR1''@;'; put 'put ''cm57a2V5Okx5LG5hbWUoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgbD0wO2lmKGMpaWYoYy5sZW5ndGg+MSlsPTE7ZWxzZXtjb25zdFssYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTVYsbCl9LGNhbGxiYWNrKCl7dGhp''@;'; put 'put ''cy5hbHRlcigicmVtb3ZlX2NvbCIsZnVuY3Rpb24gTURlKGMpe2NvbnN0IGw9ZzcoYyk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9eXkobCksZD1uZXcgU2V0O3JldHVybiBJbihjLF89Pntjb25zdFssVCwsV109YShfKSxpZT1NYXRoLm1heChULDApO0luKEFycmF5LmZyb20o''@;'; put 'put ''bmV3IEFycmF5KFctaWUrMSksKHdlLEVlKT0+aWUrRWUpLHdlPT57ZC5oYXMod2UpfHxkLmFkZCh3ZSl9KX0pLEFsKEFycmF5LmZyb20oZCkuc29ydCgoXyxUKT0+Xy1UKSwoXyxULFcsaWUpPT4oMCE9PVcmJlQ9PT1pZVtXLTFdKzE/X1tfLmxlbmd0aC0xXVsxXSs9MTpfLnB1c2goW1QsMV0p''@;'; put 'put ''LF8pLFtdKX0odGhpcy5nZXRTZWxlY3RlZCgpKSxudWxsLCJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKXx8IUlnKHRoaXMpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5jb3VudENvbHMoKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PWw6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlQ29sdW1ufX19LFtzQV06ZnVuY3Rpb24gSFJlKCl7''@;'; put 'put ''cmV0dXJue2tleTpzQSxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh4Vil9LGNhbGxiYWNrKCl7dGhpcy51bmRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3Jl''@;'; put 'put ''dHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1VuZG9BdmFpbGFibGUoKX19fSxbbkFdOmZ1bmN0aW9uIElSZSgpe3JldHVybntrZXk6bkEsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRVYpfSxjYWxsYmFjaygpe3RoaXMucmVkbygpfSxoaWRkZW4oKXtj''@;'; put 'put ''b25zdCBjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNSZWRvQXZhaWxhYmxlKCl9fX0sW0l5XTpmdW5jdGlvbiBEUmUoKXtyZXR1cm57a2V5Okl5LG5hbWUo''@;'; put 'put ''KXtsZXQgYz10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoa1YpO3JldHVybiB5aCh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+dGhpcy5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KSYmKGM9WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2Uo''@;'; put 'put ''KSxsPXloKGMsKGEsZCk9PnRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSk7SW4oYyxhPT57YS5mb3JBbGwoKGQsaCk9PntkPj0wJiZoPj0wJiZ0aGlzLnNldENlbGxNZXRhKGQsaCwicmVhZE9ubHkiLCFsKX0pfSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQoKXtyZXR1cm4hKCF0aGlz''@;'; put 'put ''LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMCE9PXRoaXMuY291bnRSb3dzKCkmJjAhPT10aGlzLmNvdW50Q29scygpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmMCE9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLmxlbmd0aCl9fX0sW3ZkXTpmdW5jdGlvbiBFUmUoKXtyZXR1''@;'; put 'put ''cm57a2V5OnZkLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHpWKX0sZGlzYWJsZWQoKXtyZXR1cm4gMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpfHwhKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxl''@;'; put 'put ''Y3RlZEJ5Q29ybmVyKCkpfSxzdWJtZW51OntpdGVtczpbe2tleTpgJHt2ZH06bGVmdGAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShVVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCku''@;'; put 'put ''Y2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodExlZnQiKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9TGcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpv''@;'; put 'put ''bnRhbCIsZD0iaHRMZWZ0Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsXyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9''@;'; put 'put ''LHtrZXk6YCR7dmR9OmNlbnRlcmAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShaVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9m''@;'; put 'put ''KCJodENlbnRlciIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1MZyhjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodENlbnRlciI7dGhpcy5ydW5I''@;'; put 'put ''b29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksS3AoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLF8sVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLF8sVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke3ZkfTpyaWdodGAsbmFtZSgp''@;'; put 'put ''e2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShZVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodFJpZ2h0IikpcmV0dXJuITB9KSYmKGM9''@;'; put 'put ''WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUxnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0UmlnaHQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGws''@;'; put 'put ''YyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixfLFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixfLFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt2ZH06anVzdGlmeWAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBo''@;'; put 'put ''cmFzZShXVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodEp1c3RpZnkiKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25z''@;'; put 'put ''dCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9TGcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRKdXN0aWZ5Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+''@;'; put 'put ''dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsXyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtuYW1lOmdzfSx7a2V5OmAke3ZkfTp0b3BgLG5hbWUoKXtsZXQgYz10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoR1YpO3JldHVybiB5''@;'; put 'put ''aCh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+e2NvbnN0IGg9dGhpcy5nZXRDZWxsTWV0YShhLGQpLmNsYXNzTmFtZTtpZihoJiYtMSE9PWguaW5kZXhPZigiaHRUb3AiKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZSgpLGw9TGcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0VG9wIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYs''@;'; put 'put ''XyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7dmR9Om1pZGRsZWAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSgkVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57''@;'; put 'put ''Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodE1pZGRsZSIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1MZyhjLChoLGYpPT50aGlzLmdldENl''@;'; put 'put ''bGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRNaWRkbGUiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixfLFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixf''@;'; put 'put ''LFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt2ZH06Ym90dG9tYCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHFWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxk''@;'; put 'put ''KS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0Qm90dG9tIikpcmV0dXJuITB9KSYmKGM9WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUxnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZl''@;'; put 'put ''cnRpY2FsIixkPSJodEJvdHRvbSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksS3AoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLF8sVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLF8sVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVk''@;'; put 'put ''OiExfV19fX19O2Z1bmN0aW9uIGpyZSgpe2NvbnN0IGM9e307cmV0dXJuIGRzKEJyZSwobCxhKT0+e2NbYV09bCgpfSksY31jb25zdCB6cmU9Y2xhc3MgTlJle2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx''@;'; put 'put ''XTpudWxsO3RoaXMuaG90PWwsdGhpcy5wcmVkZWZpbmVkSXRlbXM9anJlKCksdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuPWF9c2V0UHJlZGVmaW5lZEl0ZW1zKGwpe2NvbnN0IGE9e307dGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLmxlbmd0aD0wLGRzKGwsKGQsaCk9PntsZXQgZj0iIjtkLm5h''@;'; put 'put ''bWU9PT1ncz8oYVtnc109ZCxmPWdzKTppc05hTihwYXJzZUludChoLDEwKSk/KGQua2V5PXZvaWQgMD09PWQua2V5P2g6ZC5rZXksYVtoXT1kLGY9ZC5rZXkpOihhW2Qua2V5XT1kLGY9ZC5rZXkpLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybi5wdXNoKGYpfSksdGhpcy5wcmVkZWZpbmVkSXRl''@;'; put 'put ''bXM9YX1nZXRJdGVtcygpe3JldHVybiBmdW5jdGlvbiBWUmUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29u''@;'; put 'put ''c3QgZD1bXTtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gaCYmaC5pdGVtcz9oPWguaXRlbXM6QXJyYXkuaXNBcnJheShoKXx8KGg9bCksdXMoaCk/ZHMoaCwoZixfKT0+e2xldCBUPWFbInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBmP2Y6X107VHx8KFQ9ZiksdXMoZik/S2woVCxmKToic3RyaW5nIj09dHlwZW9mIFQmJihUPXtuYW1lOlR9KSx2b2lkIDA9PT1ULmtleSYmKFQua2V5PV8pLGQucHVzaChUKX0pOkluKGgsKGYsXyk9PntsZXQgVD1hW2ZdOyFUJiZWcmUuaW5kZXhPZihmKT49MHx8KFR8fChUPXtuYW1l''@;'; put 'put ''OmYsa2V5OmAke199YH0pLHVzKGYpJiZLbChULGYpLHZvaWQgMD09PVQua2V5JiYoVC5rZXk9XyksZC5wdXNoKFQpKX0pLGR9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybix0aGlzLnBy''@;'; put 'put ''ZWRlZmluZWRJdGVtcyl9fTtjbGFzcyBhQXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG90PWwsdGhpcy5vcHRpb25zPWF8fHtwYXJlbnQ6bnVsbCxuYW1lOm51bGwsY2xhc3NOYW1lOiIiLGtlZXBJblZpZXdwb3J0OiEwLHN0YW5kYWxvbmU6ITEsbWluV2lkdGg6MjE1LGNvbnRhaW5lcjp0aGlz''@;'; put 'put ''LmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuaG90TWVudT1udWxsLHRoaXMuaG90U3ViTWVudXM9e30sdGhpcy5w''@;'; put 'put ''YXJlbnRNZW51PXRoaXMub3B0aW9ucy5wYXJlbnR8fG51bGwsdGhpcy5tZW51SXRlbXM9bnVsbCx0aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM9bnVsbCx0aGlzLmtleUV2ZW50PSExLHRoaXMub2Zmc2V0PXthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9LHRoaXMuX2FmdGVy''@;'; put 'put ''U2Nyb2xsQ2FsbGJhY2s9bnVsbCx0aGlzLnJlZ2lzdGVyRXZlbnRzKCl9cmVnaXN0ZXJFdmVudHMoKXtsZXQgbD10aGlzLmhvdC5yb290V2luZG93O2Zvcig7bDspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJtb3VzZWRvd24iLGE9PnRoaXMub25Eb2N1''@;'; put 'put ''bWVudE1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJjb250ZXh0bWVudSIsYT0+dGhpcy5vbkRvY3VtZW50Q29udGV4dE1lbnUoYSkpLGw9UWIobCl9c2V0TWVudUl0ZW1zKGwpe3RoaXMubWVudUl0ZW1zPWx9Z2V0U2VsZWN0ZWRJ''@;'; put 'put ''dGVtKCl7cmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWRJdGVtKCk/dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pOm51bGx9aGFzU2VsZWN0ZWRJdGVtKCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5ob3RNZW51LmdldFNl''@;'; put 'put ''bGVjdGVkTGFzdCgpKX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXRbbF09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjB9aXNTdWJNZW51KCl7cmV0dXJuIG51bGwhPT10aGlzLnBhcmVudE1lbnV9b3Blbigpe3ZhciBsPXRoaXM7dGhpcy5y''@;'; put 'put ''dW5Mb2NhbEhvb2tzKCJiZWZvcmVPcGVuIiksdGhpcy5jb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtjb25zdCBhPW1OKEVlPT50aGlzLm9wZW5TdWJNZW51KEVlKSwzMDApLGQ9dGhpcy5vcHRpb25zLm1pbldp''@;'; put 'put ''ZHRofHwyMTU7bGV0IGg9ITEsZj1fMSh0aGlzLm1lbnVJdGVtcyxFZT0+KEVlLmtleT09PVJ5JiYoaD0hMCksZnVuY3Rpb24gZ1JlKGMsbCl7cmV0dXJuIWMuaGlkZGVufHwhKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmhpZGRlbiYmYy5oaWRkZW4uY2FsbChsKSl9KEVlLHRoaXMuaG90KSkpO2lm''@;'; put 'put ''KGYubGVuZ3RoPDEmJiFoKWYucHVzaChqcmUoKVtSeV0pO2Vsc2UgaWYoMD09PWYubGVuZ3RoKXJldHVybjtmPWZ1bmN0aW9uIF9SZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Z3MsYT1jLnNsaWNlKDApO3JldHVybiBh''@;'; put 'put ''PVByZShhLGwpLGE9ZnVuY3Rpb24gbVJlKGMsbCl7bGV0IGE9Yy5zbGljZSgwKTtyZXR1cm4gYS5yZXZlcnNlKCksYT1QcmUoYSxsKSxhLnJldmVyc2UoKSxhfShhLGwpLGE9ZnVuY3Rpb24gdlJlKGMpe2NvbnN0IGw9W107cmV0dXJuIEluKGMsKGEsZCk9PntkPjA/bFtsLmxlbmd0aC0xXS5u''@;'; put 'put ''YW1lIT09YS5uYW1lJiZsLnB1c2goYSk6bC5wdXNoKGEpfSksbH0oYSksYX0oZixncyk7bGV0IF89ITE7Y29uc3QgVD17ZGF0YTpmLGNvbEhlYWRlcnM6ITEsYXV0b0NvbHVtblNpemU6ITAsYXV0b1dyYXBSb3c6ITEsbW9kaWZ5Q29sV2lkdGg6RWU9PktpKEVlKSYmRWU8ZD9kOkVlLGF1dG9S''@;'; put 'put ''b3dTaXplOiExLHJlYWRPbmx5OiEwLGVkaXRvcjohMSxjb3B5UGFzdGU6ITEsbWF4Q29sczoxLGNvbHVtbnM6W3tkYXRhOiJuYW1lIixyZW5kZXJlcjooRWUsWmUsb3QsZXQseXQsa3QpPT50aGlzLm1lbnVJdGVtUmVuZGVyZXIoRWUsWmUsb3QsZXQseXQsa3QpfV0scmVuZGVyQWxsUm93czoh''@;'; put 'put ''MCxmcmFnbWVudFNlbGVjdGlvbjohMSxvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIsYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6KEVlLFplKT0+e3RoaXMuaXNBbGxT''@;'; put 'put ''dWJNZW51c0Nsb3NlZCgpP2EoWmUucm93KTp0aGlzLm9wZW5TdWJNZW51KFplLnJvdyl9LHJvd0hlaWdodHM6RWU9PmZbRWVdLm5hbWU9PT1ncz8xOjIzLGFmdGVyT25DZWxsQ29udGV4dE1lbnU6RWU9PntFZS5wcmV2ZW50RGVmYXVsdCgpLHdOKCkmJl8mJnRoaXMuaGFzU2VsZWN0ZWRJdGVt''@;'; put 'put ''KCkmJnRoaXMuY2xvc2UoITApfSxiZWZvcmVPbkNlbGxNb3VzZVVwOkVlPT57dGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmKF89IXRoaXMuaXNDb21tYW5kUGFzc2l2ZSh0aGlzLmdldFNlbGVjdGVkSXRlbSgpKSx0aGlzLmV4ZWN1dGVDb21tYW5kKEVlKSl9LGFmdGVyT25DZWxsTW91c2VVcDpF''@;'; put 'put ''ZT0+eyghd04oKXx8IVVwKEVlKSkmJl8mJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJihtMigpfHx5TigpP3NldFRpbWVvdXQoKCk9PnRoaXMuY2xvc2UoITApLDMyNSk6dGhpcy5jbG9zZSghMCkpfSxhZnRlclVubGlzdGVuOigpPT57IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuaXNP''@;'; put 'put ''cGVuZWQoKSYmdGhpcy5ob3RNZW51Lmxpc3RlbigpfX07dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPSExLHRoaXMuaG90''@;'; put 'put ''TWVudT1uZXcgV0IodGhpcy5jb250YWluZXIsVCksdGhpcy5ob3RNZW51LmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMub25BZnRlckluaXQoKSksdGhpcy5ob3RNZW51LmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJTZWxlY3Rpb24oLi4u''@;'; put 'put ''YXJndW1lbnRzKX0pLHRoaXMuaG90TWVudS5pbml0KCksdGhpcy5ob3RNZW51Lmxpc3RlbigpO2NvbnN0IFc9dGhpcy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLGllPVcuYWRkQ29udGV4dCgibWVudSIpLHdlPXtncm91cDoibWVudSIscnVuT25seUlmOkVlPT4hMT09PXN5KEVlLnRh''@;'; put 'put ''cmdldCl8fCExPT09dGhpcy5jb250YWluZXIuY29udGFpbnMoRWUudGFyZ2V0KX07Vy5zZXRBY3RpdmVDb250ZXh0TmFtZSgibWVudSIpLGllLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57dGhpcy5rZXlFdmVudD0hMCx0aGlzLmNsb3NlKCksdGhpcy5r''@;'; put 'put ''ZXlFdmVudD0hMX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVlP3RoaXMuc2VsZWN0TmV4dENlbGwoRWVbMF0sRWVbMV0pOnRoaXMuc2VsZWN0Rmlyc3RDZWxsKCks''@;'; put 'put ''dGhpcy5rZXlFdmVudD0hMX19LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCxFZT90aGlzLnNlbGVjdFByZXZDZWxsKEVlWzBdLEVlWzFdKTp0aGlzLnNlbGVjdExhc3RDZWxs''@;'; put 'put ''KCksdGhpcy5rZXlFdmVudD0hMX19LHtrZXlzOltbIkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYodGhpcy5rZXlFdmVudD0hMCxFZSl7Y29uc3QgWmU9dGhpcy5vcGVuU3ViTWVudShFZVswXSk7WmUmJlplLnNl''@;'; put 'put ''bGVjdEZpcnN0Q2VsbCgpfXRoaXMua2V5RXZlbnQ9ITF9fSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCxFZSYmdGhpcy5pc1N1Yk1lbnUoKSYmKHRoaXMuY2xvc2UoKSx0''@;'; put 'put ''aGlzLnBhcmVudE1lbnUmJnRoaXMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6RWU9Pntjb25zdCBaZT10aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCx0aGlzLmhv''@;'; put 'put ''dE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KFplWzBdKS5zdWJtZW51fHwodGhpcy5leGVjdXRlQ29tbWFuZChFZSksdGhpcy5jbG9zZSghMCkpLHRoaXMua2V5RXZlbnQ9ITF9fSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlzLmhvdE1lbnUuZ2V0U2VsZWN0''@;'; put 'put ''ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCxFZT90aGlzLmhvdE1lbnUuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC10aGlzLmhvdE1lbnUuY291bnRWaXNpYmxlUm93cygpLDApOnRoaXMuc2VsZWN0Rmlyc3RDZWxsKCksdGhpcy5rZXlFdmVudD0hMX19LHtrZXlzOltbIlBhZ2VEb3duIl1d''@;'; put 'put ''LGNhbGxiYWNrOigpPT57Y29uc3QgRWU9dGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO3RoaXMua2V5RXZlbnQ9ITAsRWU/dGhpcy5ob3RNZW51LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCh0aGlzLmhvdE1lbnUuY291bnRWaXNpYmxlUm93cygpLDApOnRoaXMuc2VsZWN0TGFzdENl''@;'; put 'put ''bGwoKSx0aGlzLmtleUV2ZW50PSExfX1dLHdlKSx0aGlzLmJsb2NrTWFpblRhYmxlQ2FsbGJhY2tzKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlck9wZW4iKX1jbG9zZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhp''@;'; put 'put ''cy5pc09wZW5lZCgpJiYobCYmdGhpcy5wYXJlbnRNZW51P3RoaXMucGFyZW50TWVudS5jbG9zZSgpOih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnJlbGVhc2VNYWluVGFibGVDYWxsYmFja3MoKSx0aGlzLmhvdE1lbnUu''@;'; put 'put ''ZGVzdHJveSgpLHRoaXMuaG90TWVudT1udWxsLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cyx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKSx0aGlzLnBhcmVudE1lbnUmJnRoaXMucGFyZW50''@;'; put 'put ''TWVudS5ob3RNZW51Lmxpc3RlbigpKSl9b3BlblN1Yk1lbnUobCl7aWYoIXRoaXMuaG90TWVudSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuaG90TWVudS5nZXRDZWxsKGwsMCk7aWYodGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksIWF8fCFmdW5jdGlvbiBkUmUoYyl7cmV0dXJuIEJvKGMsImh0U3Vi''@;'; put 'put ''bWVudSIpfShhKSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3cobCksaD1uZXcgYUEodGhpcy5ob3Qse3BhcmVudDp0aGlzLG5hbWU6ZC5uYW1lLGNsYXNzTmFtZTp0aGlzLm9wdGlvbnMuY2xhc3NOYW1lLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5l''@;'; put 'put ''cjp0aGlzLm9wdGlvbnMuY29udGFpbmVyfSk7cmV0dXJuIGguc2V0TWVudUl0ZW1zKGQuc3VibWVudS5pdGVtcyksaC5vcGVuKCksaC5zZXRQb3NpdGlvbihhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSx0aGlzLmhvdFN1Yk1lbnVzW2Qua2V5XT1oLGh9Y2xvc2VTdWJNZW51KGwpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxkPXRoaXMuaG90U3ViTWVudXNbYS5rZXldO2QmJihkLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ob3RTdWJNZW51c1thLmtleV0pfWNsb3NlQWxsU3ViTWVudXMoKXtJbih0aGlzLmhvdE1lbnUuZ2V0RGF0YSgpLChsLGEpPT50''@;'; put 'put ''aGlzLmNsb3NlU3ViTWVudShhKSl9aXNBbGxTdWJNZW51c0Nsb3NlZCgpe3JldHVybiAwPT09T2JqZWN0LmtleXModGhpcy5ob3RTdWJNZW51cykubGVuZ3RofWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuY29udGFpbmVyLnBhcmVudE5vZGU7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmNs''@;'; put 'put ''b3NlKCksdGhpcy5wYXJlbnRNZW51PW51bGwsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpfWlzT3BlbmVkKCl7cmV0dXJuIG51bGwhPT10aGlzLmhvdE1lbnV9ZXhlY3V0ZUNvbW1hbmQobCl7aWYoIXRoaXMuaXNPcGVuZWQoKXx8''@;'; put 'put ''IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZEl0ZW0oKTtpZih0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdCIsYSxsKSx0aGlzLmlzQ29tbWFuZFBhc3NpdmUoYSkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgp''@;'; put 'put ''LGg9ZD9mdW5jdGlvbiB1UmUoYyl7cmV0dXJuIGNzKGMsbD0+KHtzdGFydDpsLmdldFRvcFN0YXJ0Q29ybmVyKCksZW5kOmwuZ2V0Qm90dG9tRW5kQ29ybmVyKCl9KSl9KGQpOltdO3RoaXMucnVuTG9jYWxIb29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCksdGhpcy5pc1N1Yk1lbnUo''@;'; put 'put ''KSYmdGhpcy5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoImV4ZWN1dGVDb21tYW5kIixhLmtleSxoLGwpfWlzQ29tbWFuZFBhc3NpdmUobCl7Y29uc3R7aXNDb21tYW5kOmEsbmFtZTpkLGRpc2FibGVkOmgsc3VibWVudTpmfT1sLF89ITA9PT1ofHwiZnVuY3Rpb24iPT10eXBlb2YgaCYmITA9''@;'; put 'put ''PT1oLmNhbGwodGhpcy5ob3QpO3JldHVybiExPT09YXx8ZD09PWdzfHwhMD09PV98fGZ9c2V0UG9zaXRpb24obCl7Y29uc3QgYT1uZXcgY2xhc3MgQlJle2NvbnN0cnVjdG9yKGwsYSl7Y29uc3QgZD10NyhhKSxoPW1nKGEpO2xldCBmLF8sVCxXLGllLGdlO3RoaXMucm9vdFdpbmRvdz1hLHRo''@;'; put 'put ''aXMudHlwZT10aGlzLmdldFNvdXJjZVR5cGUobCksImxpdGVyYWwiPT09dGhpcy50eXBlPyhmPXBhcnNlSW50KGwudG9wLDEwKSxUPXBhcnNlSW50KGwubGVmdCwxMCksaWU9bC5oZWlnaHR8fDAsZ2U9bC53aWR0aHx8MCxfPWYsVz1ULGYrPWQsVCs9aCk6ImV2ZW50Ij09PXRoaXMudHlwZSYm''@;'; put 'put ''KGY9cGFyc2VJbnQobC5wYWdlWSwxMCksVD1wYXJzZUludChsLnBhZ2VYLDEwKSxpZT1sLnRhcmdldC5jbGllbnRIZWlnaHQsZ2U9bC50YXJnZXQuY2xpZW50V2lkdGgsXz1mLWQsVz1ULWgpLHRoaXMudG9wPWYsdGhpcy50b3BSZWxhdGl2ZT1fLHRoaXMubGVmdD1ULHRoaXMubGVmdFJlbGF0''@;'; put 'put ''aXZlPVcsdGhpcy5zY3JvbGxUb3A9ZCx0aGlzLnNjcm9sbExlZnQ9aCx0aGlzLmNlbGxIZWlnaHQ9aWUsdGhpcy5jZWxsV2lkdGg9Z2V9Z2V0U291cmNlVHlwZShsKXtsZXQgYT0ibGl0ZXJhbCI7cmV0dXJuIGwgaW5zdGFuY2VvZiBFdmVudCYmKGE9ImV2ZW50IiksYX1maXRzQWJvdmUobCl7''@;'; put 'put ''cmV0dXJuIHRoaXMudG9wUmVsYXRpdmU+PWwub2Zmc2V0SGVpZ2h0fWZpdHNCZWxvdyhsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZStsLm9mZnNldEhlaWdodDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5kb3cu''@;'; put 'put ''aW5uZXJIZWlnaHQpfWZpdHNPblJpZ2h0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZSt0aGlzLmNlbGxXaWR0aCtsLm9mZnNldFdpZHRoPD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lcldpZHRo''@;'; put 'put ''KX1maXRzT25MZWZ0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZT49bC5vZmZzZXRXaWR0aH19KGwsdGhpcy5jb250YWluZXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyk7dGhpcy5vcHRpb25zLmtlZXBJblZpZXdwb3J0PyhhLmZpdHNCZWxvdyh0aGlzLmNvbnRhaW5lcik/dGhpcy5z''@;'; put 'put ''ZXRQb3NpdGlvbkJlbG93Q3Vyc29yKGEpOmEuZml0c0Fib3ZlKHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uQWJvdmVDdXJzb3IoYSk6dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKGEpLHRoaXMuaG90LmlzTHRyKCk/dGhpcy5zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JMdHIo''@;'; put 'put ''YSk6dGhpcy5zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JSdGwoYSkpOih0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoYSksdGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihhKSl9c2V0SG9yaXpvbnRhbFBvc2l0aW9uRm9yUnRsKGwpe2wuZml0c09uTGVmdCh0aGlzLmNvbnRhaW5l''@;'; put 'put ''cik/dGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKGwpOnRoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IobCl9c2V0SG9yaXpvbnRhbFBvc2l0aW9uRm9yTHRyKGwpe2wuZml0c09uUmlnaHQodGhpcy5jb250YWluZXIpP3RoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3Io''@;'; put 'put ''bCk6dGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKGwpfXNldFBvc2l0aW9uQWJvdmVDdXJzb3IobCl7bGV0IGE9dGhpcy5vZmZzZXQuYWJvdmUrbC50b3AtdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0O3RoaXMuaXNTdWJNZW51KCkmJihhPWwudG9wK2wuY2VsbEhlaWdodC10aGlz''@;'; put 'put ''LmNvbnRhaW5lci5vZmZzZXRIZWlnaHQrMyksdGhpcy5jb250YWluZXIuc3R5bGUudG9wPWAke2F9cHhgfXNldFBvc2l0aW9uQmVsb3dDdXJzb3IobCl7bGV0IGE9dGhpcy5vZmZzZXQuYmVsb3crbC50b3ArMTt0aGlzLmlzU3ViTWVudSgpJiYoYT1sLnRvcC0xKSx0aGlzLmNvbnRhaW5lci5z''@;'; put 'put ''dHlsZS50b3A9YCR7YX1weGB9c2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IobCl7bGV0IGE9bC5sZWZ0O2lmKHRoaXMuaXNTdWJNZW51KCkpe2NvbnN0e3JpZ2h0OmR9PXRoaXMucGFyZW50TWVudS5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YSs9bC5jZWxsV2lkdGgrZC0o''@;'; put 'put ''bC5sZWZ0K2wuY2VsbFdpZHRoKX1lbHNlIGErPXRoaXMub2Zmc2V0LnJpZ2h0O3RoaXMuY29udGFpbmVyLnN0eWxlLmxlZnQ9YCR7YX1weGB9c2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcihsKXtsZXQgYT10aGlzLm9mZnNldC5sZWZ0K2wubGVmdC10aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0''@;'; put 'put ''aDtpZih0aGlzLmlzU3ViTWVudSgpKXtjb25zdHtsZWZ0OmR9PXRoaXMucGFyZW50TWVudS5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS09bC5sZWZ0LWR9dGhpcy5jb250YWluZXIuc3R5bGUubGVmdD1gJHthfXB4YH1zZWxlY3RGaXJzdENlbGwoKXtjb25zdCBsPXRoaXMu''@;'; put 'put ''aG90TWVudS5nZXRDZWxsKDAsMCk7S2sobCl8fFhrKGwpfHxKayhsKT90aGlzLnNlbGVjdE5leHRDZWxsKDAsMCk6dGhpcy5ob3RNZW51LnNlbGVjdENlbGwoMCwwKX1zZWxlY3RMYXN0Q2VsbCgpe2NvbnN0IGw9dGhpcy5ob3RNZW51LmNvdW50Um93cygpLTEsYT10aGlzLmhvdE1lbnUuZ2V0''@;'; put 'put ''Q2VsbChsLDApO0trKGEpfHxYayhhKXx8SmsoYSk/dGhpcy5zZWxlY3RQcmV2Q2VsbChsLDApOih0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbChsLDAsdm9pZCAwLHZvaWQgMCwhMSksdGhpcy5ob3RNZW51LnNjcm9sbFZpZXdwb3J0VG8obCwwLCEwLCExKSl9c2VsZWN0TmV4dENlbGwobCxhKXtj''@;'; put 'put ''b25zdCBkPWwrMSxoPWQ8dGhpcy5ob3RNZW51LmNvdW50Um93cygpP3RoaXMuaG90TWVudS5nZXRDZWxsKGQsYSk6bnVsbDtoJiYoS2soaCl8fFhrKGgpfHxKayhoKT90aGlzLnNlbGVjdE5leHRDZWxsKGQsYSk6dGhpcy5ob3RNZW51LnNlbGVjdENlbGwoZCxhKSl9c2VsZWN0UHJldkNlbGwo''@;'; put 'put ''bCxhKXtjb25zdCBkPWwtMSxoPWQ+PTA/dGhpcy5ob3RNZW51LmdldENlbGwoZCxhKTpudWxsO2gmJihLayhoKXx8WGsoaCl8fEprKGgpP3RoaXMuc2VsZWN0UHJldkNlbGwoZCxhKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbChkLGEpKX1tZW51SXRlbVJlbmRlcmVyKGwsYSxkLGgsZixfKXtj''@;'; put 'put ''b25zdCBUPWwuZ2V0U291cmNlRGF0YUF0Um93KGQpLFc9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEVlPW90PT5vdC5kaXNhYmxlU2VsZWN0aW9uO2xldCBaZT1fO3ZhciBvdDsiZnVuY3Rpb24iPT10eXBlb2YgWmUmJihaZT1aZS5jYWxsKHRoaXMuaG90KSks''@;'; put 'put ''ZzIoYSkscGkoVywiaHRJdGVtV3JhcHBlciIpLGEuYXBwZW5kQ2hpbGQoVyksb3Q9VCxuZXcgUmVnRXhwKGdzLCJpIikudGVzdChvdC5uYW1lKT9waShhLCJodFNlcGFyYXRvciIpOiJmdW5jdGlvbiI9PXR5cGVvZiBULnJlbmRlcmVyPyhwaShhLCJodEN1c3RvbU1lbnVSZW5kZXJlciIpLGEu''@;'; put 'put ''YXBwZW5kQ2hpbGQoVC5yZW5kZXJlcihsLFcsZCxoLGYsWmUpKSk6Z2coVyxaZSksKG90PT4hMD09PW90LmRpc2FibGVkfHwiZnVuY3Rpb24iPT10eXBlb2Ygb3QuZGlzYWJsZWQmJiEwPT09b3QuZGlzYWJsZWQuY2FsbCh0aGlzLmhvdCkpKFQpPyhwaShhLCJodERpc2FibGVkIiksdGhpcy5l''@;'; put 'put ''dmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5kZXNlbGVjdENlbGwoKSkpOkVlKFQpPyhwaShhLCJodFNlbGVjdGlvbkRpc2FibGVkIiksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5kZXNlbGVj''@;'; put 'put ''dENlbGwoKSkpOihvdD0+Ymwob3QsInN1Ym1lbnUiKSkoVCk/KHBpKGEsImh0U3VibWVudSIpLEVlKFQpP3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2VlbnRlciIsKCk9PmwuZGVzZWxlY3RDZWxsKCkpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIoYSwibW91c2VlbnRlciIsKCk9Pmwuc2VsZWN0Q2VsbChkLGgsdm9pZCAwLHZvaWQgMCwhMSwhMSkpKTooV28oYSxbImh0U3VibWVudSIsImh0RGlzYWJsZWQiXSksRWUoVCk/dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5kZXNlbGVj''@;'; put 'put ''dENlbGwoKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5zZWxlY3RDZWxsKGQsaCx2b2lkIDAsdm9pZCAwLCExLCExKSkpfWNyZWF0ZUNvbnRhaW5lcigpe2NvbnN0IGE9dGhpcy5vcHRpb25zLmNvbnRhaW5lci5vd25lckRvY3VtZW50''@;'; put 'put ''O2xldCBoLGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGQmJihSYShkKSYmKGQ9ZC5jYWxsKHRoaXMuaG90KSxkPW51bGw9PT1kfHxMYShkKT8iIjpkLnRvU3RyaW5nKCkpLGQ9ZC5yZXBsYWNlKC9bXkEtejAtOV0v''@;'; put 'put ''ZywiXyIpLGQ9YCR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1TdWJfJHtkfWAsaD1hLnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9LiR7ZH1gKSksaHx8KGg9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxwaShoLGBodE1lbnUgJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1l''@;'; put 'put ''fWApLGQmJnBpKGgsZCksdGhpcy5vcHRpb25zLmNvbnRhaW5lci5hcHBlbmRDaGlsZChoKSksaH1ibG9ja01haW5UYWJsZUNhbGxiYWNrcygpe3RoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2s9ZnVuY3Rpb24oKXt9LHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsdGhp''@;'; put 'put ''cy5fYWZ0ZXJTY3JvbGxDYWxsYmFjayksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLHRoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2spfXJlbGVhc2VNYWluVGFibGVDYWxsYmFja3MoKXt0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrJiYodGhpcy5ob3QucmVtb3Zl''@;'; put 'put ''SG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrKSx0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjayksdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjaz1udWxsKX1vbkFm''@;'; put 'put ''dGVySW5pdCgpe2NvbnN0e3d0VGFibGU6bH09dGhpcy5ob3RNZW51LnZpZXcuX3d0LGE9dGhpcy5ob3RNZW51LmdldFNldHRpbmdzKCkuZGF0YSxkPWwuaGlkZXIuc3R5bGUsaD1sLmhvbGRlci5zdHlsZSxmPXBhcnNlSW50KGQud2lkdGgsMTApLF89QWwoYSwoVCxXKT0+VCsoVy5uYW1lPT09''@;'; put 'put ''Z3M/MToyNiksMCk7aC53aWR0aD1gJHtmKzN9cHhgLGguaGVpZ2h0PWAke18rM31weGAsZC5oZWlnaHQ9aC5oZWlnaHR9b25BZnRlclNlbGVjdGlvbihsLGEsZCxoLGYpeyExPT09dGhpcy5rZXlFdmVudCYmKGYudmFsdWU9ITApfW9uRG9jdW1lbnRNb3VzZURvd24obCl7dGhpcy5pc09wZW5l''@;'; put 'put ''ZCgpJiYodGhpcy5vcHRpb25zLnN0YW5kYWxvbmUmJnRoaXMuaG90TWVudSYmIVZwKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCl8fCh0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKXx8dGhpcy5pc1N1Yk1lbnUoKSkmJiFWcChsLnRhcmdldCwiLmh0TWVudSIpKSYmdGhpcy5j''@;'; put 'put ''bG9zZSghMCl9b25Eb2N1bWVudENvbnRleHRNZW51KGwpe3RoaXMuaXNPcGVuZWQoKSYmQm8obC50YXJnZXQsImh0Q29yZSIpJiZWcChsLnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpJiZsLnByZXZlbnREZWZhdWx0KCl9fVRhKGFBLE8wKTtjb25zdCB5aj1hQSxsQT0iY29udGV4''@;'; put 'put ''dE1lbnUiO3NvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29udGV4dE1lbnVTaG93Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVT''@;'; put 'put ''aG93Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVIaWRlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVFeGVjdXRlIik7bGV0IFpSZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZ''@;'; put 'put ''KCl7cmV0dXJuIGxBfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDcwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltpQSxvQSxncyxUeSxEeSxncyxyQSxM''@;'; put 'put ''eSxncyxzQSxuQSxncyxJeSxncyx2ZF19Y29uc3RydWN0b3IoYSl7c3VwZXIoYSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuY29tbWFuZEV4ZWN1dG9yPW5ldyBOcmUodGhpcy5ob3QpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGwsdGhpcy5tZW51PW51bGx9aXNFbmFibGVk''@;'; put 'put ''KCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2xBXX1lbmFibGVQbHVnaW4oKXt2YXIgYT10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2xBXTsiZnVuY3Rpb24iPT10eXBlb2YgZC5jYWxsYmFjayYmdGhpcy5jb21tYW5k''@;'; put 'put ''RXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soZC5jYWxsYmFjayksdGhpcy5tZW51PW5ldyB5aih0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodENvbnRleHRNZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6ZC51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHl9KSx0''@;'; put 'put ''aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJiZWZvcmVPcGVuIiwoKT0+dGhpcy5vbk1lbnVCZWZvcmVPcGVuKCkpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnRoaXMub25NZW51QWZ0ZXJPcGVuKCkpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgp''@;'; put 'put ''PT50aGlzLm9uTWVudUFmdGVyQ2xvc2UoKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiZXhlY3V0ZUNvbW1hbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksXz0wO188aDtfKyspZltfXT1hcmd1bWVudHNbX107cmV0dXJuIGEuZXhlY3V0''@;'; put 'put ''ZUNvbW1hbmQuY2FsbChhLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvbnRleHRNZW51IixoPT50aGlzLm9uQWZ0ZXJPbkNlbGxDb250ZXh0TWVudShoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFi''@;'; put 'put ''bGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmKHRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51PW51bGwpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1vcGVuKGEpe2lmKCF0aGlzLm1lbnV8fCh0aGlzLnByZXBh''@;'; put 'put ''cmVNZW51SXRlbXMoKSx0aGlzLm1lbnUub3BlbigpLCF0aGlzLm1lbnUuaXNPcGVuZWQoKSkpcmV0dXJuO2xldCBkPTAsaD0wO2lmKHRoaXMuaG90LnJvb3REb2N1bWVudCE9PXRoaXMubWVudS5jb250YWluZXIub3duZXJEb2N1bWVudCl7Y29uc3R7ZnJhbWVFbGVtZW50OmZ9PXRoaXMuaG90''@;'; put 'put ''LnJvb3RXaW5kb3cse3RvcDpfLGxlZnQ6VH09Zi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkPV8tdDcoYS52aWV3KSxoPVQtbWcoYS52aWV3KX1lbHNlIGQ9LTEqdDcodGhpcy5tZW51LmhvdE1lbnUucm9vdFdpbmRvdyksaD0tMSptZyh0aGlzLm1lbnUuaG90TWVudS5yb290V2luZG93KTt0''@;'; put 'put ''aGlzLm1lbnUuc2V0UG9zaXRpb24oe3RvcDpwYXJzZUludChhLnBhZ2VZLDEwKStkLGxlZnQ6cGFyc2VJbnQoYS5wYWdlWCwxMCkraH0pfWNsb3NlKCl7dGhpcy5tZW51JiYodGhpcy5tZW51LmNsb3NlKCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbCl9ZXhlY3V0ZUNvbW1hbmQoYSl7bnVsbD09''@;'; put 'put ''PXRoaXMuaXRlbXNGYWN0b3J5JiZ0aGlzLnByZXBhcmVNZW51SXRlbXMoKTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkPjE/ZC0xOjApLGY9MTtmPGQ7ZisrKWhbZi0xXT1hcmd1bWVudHNbZl07dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZShhLC4uLmgpfXBy''@;'; put 'put ''ZXBhcmVNZW51SXRlbXMoKXt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgenJlKHRoaXMuaG90LGMuREVGQVVMVF9JVEVNUyk7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2xBXSxkPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKX07dGhpcy5ob3QucnVuSG9va3MoImFm''@;'; put 'put ''dGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZCksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5lZEl0ZW1zKGQuaXRlbXMpO2NvbnN0IGg9dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoYSk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLGgp''@;'; put 'put ''LHRoaXMubWVudS5zZXRNZW51SXRlbXMoaCksSW4oaCxmPT50aGlzLmNvbW1hbmRFeGVjdXRvci5yZWdpc3RlckNvbW1hbmQoZi5rZXksZikpfW9uQWZ0ZXJPbkNlbGxDb250ZXh0TWVudShhKXtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKCksaD1kLnJvd0hlYWRlcnMsZj1kLmNvbEhl''@;'; put 'put ''YWRlcnMsVD1hLnRhcmdldDt0aGlzLmNsb3NlKCksIUJvKFQsImhhbmRzb250YWJsZUlucHV0IikmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSwoaHx8Znx8ZnVuY3Rpb24gXyhXKXtyZXR1cm4iVEQiPT09Vy5ub2RlTmFtZXx8IlREIj09PVcucGFyZW50Tm9kZS5u''@;'; put 'put ''b2RlTmFtZX0oVCl8fEJvKFQsImN1cnJlbnQiKSYmQm8oVCwid3RCb3JkZXIiKSkmJnRoaXMub3BlbihhKSl9b25NZW51QmVmb3JlT3Blbigpe3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb250ZXh0TWVudVNob3ciLHRoaXMpfW9uTWVudUFmdGVyT3Blbigpe3RoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlckNvbnRleHRNZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJDbG9zZSgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51SGlkZSIsdGhpcyl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95''@;'; put 'put ''KCksc3VwZXIuZGVzdHJveSgpfX1yZXR1cm4gYy5TRVBBUkFUT1I9e25hbWU6Z3N9LGN9KSgpO2NsYXNzIEtSZXtjb25zdHJ1Y3Rvcigpe3RoaXMuZGF0YT17fX1zZXREYXRhKGwsYSl7dGhpcy5kYXRhW2xdPWF9Z2V0RGF0YShsKXtyZXR1cm4gdGhpcy5kYXRhW2xdfHx2b2lkIDB9fWNsYXNz''@;'; put 'put ''IFhSZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY2xpcGJvYXJkRGF0YT1uZXcgS1JlfX1jbGFzcyB3antjb25zdHJ1Y3RvcihsKXt0aGlzLnJvb3REb2N1bWVudD1sLmRlZmF1bHRWaWV3P2w6bC5vd25lckRvY3VtZW50LHRoaXMubWFpbkVsZW1lbnQ9bnVsbCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcg''@;'; put 'put ''bGwodGhpcyksdGhpcy5saXN0ZW5lcnNDb3VudD1uZXcgV2Vha1NldCx0aGlzLmNvbnRhaW5lcj1sfXVzZVNlY29uZGFyeUVsZW1lbnQoKXtjb25zdCBsPWZ1bmN0aW9uIGVPZShjKXtjb25zdCBsPXVBLmdldChjKTtpZihsKXJldHVybiBsLnBhcmVudEVsZW1lbnR8fGMuYXBwZW5kQ2hpbGQo''@;'; put 'put ''bCksbDtjb25zdCBkPShjLmRlZmF1bHRWaWV3P2M6Yy5vd25lckRvY3VtZW50KS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiB1QS5zZXQoYyxkKSxkLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSxkLmNsYXNzTmFtZT0iSGFuZHNvbnRhYmxlQ29weVBhc3RlIixk''@;'; put 'put ''LnRhYkluZGV4PS0xLGQuYXV0b2NvbXBsZXRlPSJvZmYiLGQud3JhcD0iaGFyZCIsZC52YWx1ZT0iICIsYy5hcHBlbmRDaGlsZChkKSxkfSh0aGlzLmNvbnRhaW5lcik7dGhpcy5saXN0ZW5lcnNDb3VudC5oYXMobCl8fCh0aGlzLmxpc3RlbmVyc0NvdW50LmFkZChsKSxZcmUodGhpcy5ldmVu''@;'; put 'put ''dE1hbmFnZXIsbCx0aGlzKSksdGhpcy5tYWluRWxlbWVudD1sfXNldEZvY3VzYWJsZUVsZW1lbnQobCl7dGhpcy5saXN0ZW5lcnNDb3VudC5oYXMobCl8fCh0aGlzLmxpc3RlbmVyc0NvdW50LmFkZChsKSxZcmUodGhpcy5ldmVudE1hbmFnZXIsbCx0aGlzKSksdGhpcy5tYWluRWxlbWVudD1s''@;'; put 'put ''fWdldEZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5tYWluRWxlbWVudH1mb2N1cygpe3RoaXMubWFpbkVsZW1lbnQudmFsdWU9IiAiLG0yKCl8fGZ0ZSh0aGlzLm1haW5FbGVtZW50KX19VGEod2osTzApO2NvbnN0IGNBPW5ldyBXZWFrTWFwLENqPShjLGwpPT5hPT5sLnJ1bkxvY2Fs''@;'; put 'put ''SG9va3MoYyxhKTtmdW5jdGlvbiBZcmUoYyxsLGEpe2MuYWRkRXZlbnRMaXN0ZW5lcihsLCJjb3B5IixDaigiY29weSIsYSkpLGMuYWRkRXZlbnRMaXN0ZW5lcihsLCJjdXQiLENqKCJjdXQiLGEpKSxjLmFkZEV2ZW50TGlzdGVuZXIobCwicGFzdGUiLENqKCJwYXN0ZSIsYSkpfWNvbnN0IHVB''@;'; put 'put ''PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFdyZShjKXtpZighKGMgaW5zdGFuY2VvZiB3aikpcmV0dXJuO2xldCBsPWNBLmdldChjLmNvbnRhaW5lcik7aWYobD1pc05hTihsKT8wOmwsbD4wJiYobC09MSksZnVuY3Rpb24gUVJlKGMpe2MuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9KGMpLGw8PTApe2w9''@;'; put 'put ''MDtjb25zdCBhPXVBLmdldChjLmNvbnRhaW5lcik7YSYmYS5wYXJlbnROb2RlJiYoYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLHVBLmRlbGV0ZShjLmNvbnRhaW5lcikpLGMubWFpbkVsZW1lbnQ9bnVsbH1jQS5zZXQoYy5jb250YWluZXIsbCl9ZnVuY3Rpb24gR3JlKGMsbCl7JHJlKGMs''@;'; put 'put ''bCksbC5hZGQoYyl9ZnVuY3Rpb24gRTcoYyxsLGEpeyRyZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gJHJlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi''@;'; put 'put ''KX1mdW5jdGlvbiBkQShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYX1mdW5jdGlvbiBxdShjLGwpe3JldHVybiBmdW5jdGlvbiB0T2UoYyxsKXtyZXR1cm4gbC5n''@;'; put 'put ''ZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLHFyZShjLGwsImdldCIpKX1mdW5jdGlvbiBrNyhjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIG5PZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVk''@;'; put 'put ''IHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMscXJlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBxcmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5z''@;'; put 'put ''dGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9dmFyIFhwPW5ldyBXZWFrTWFwLFNqPW5ldyBXZWFrTWFwLE95PW5ldyBXZWFrTWFwLE1qPW5ldyBXZWFrTWFwLHhqPW5ldyBXZWFrTWFwLFB5PW5ldyBXZWFrTWFwLGhBPW5ldyBXZWFrU2V0LEtyZT1uZXcgV2Vha1NldDtjbGFzcyByT2V7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7bGV0e2NvdW50Um93czphLGNvdW50Q29sdW1uczpkLHJvd3NMaW1pdDpoLGNvbHVtbnNMaW1pdDpmLGNvdW50Q29sdW1uSGVhZGVyczpffT1sO0dyZSh0aGlzLEtyZSksR3JlKHRoaXMsaEEpLEU3KHRoaXMsWHAse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEU3KHRoaXMs''@;'; put 'put ''U2ose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEU3KHRoaXMsT3kse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEU3KHRoaXMsTWose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEU3KHRoaXMseGose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEU3KHRoaXMsUHkse3dyaXRh''@;'; put 'put ''YmxlOiEwLHZhbHVlOnZvaWQgMH0pLGs3KHRoaXMsU2osYSksazcodGhpcyxPeSxkKSxrNyh0aGlzLE1qLGgpLGs3KHRoaXMseGosZiksazcodGhpcyxQeSxfKX1zZXRTZWxlY3RlZFJhbmdlKGwpe2s3KHRoaXMsWHAsbCl9Z2V0Q2VsbHNSYW5nZSgpe2lmKDA9PT1xdSh0aGlzLFNqKS5jYWxs''@;'; put 'put ''KHRoaXMpfHwwPT09cXUodGhpcyxPeSkuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtyb3c6bCxjb2w6YX09cXUodGhpcyxYcCkuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmQsY29sOmh9PXF1KHRoaXMsWHApLmdldEJvdHRvbUVuZENvcm5lcigpLGY9ZEEodGhpcyxLcmUsaU9lKS5j''@;'; put 'put ''YWxsKHRoaXMsbCxkKSxfPWRBKHRoaXMsaEEsRWopLmNhbGwodGhpcyxhLGgpO3JldHVybntpc1JhbmdlVHJpbW1lZDpkIT09Znx8aCE9PV8sc3RhcnRSb3c6bCxzdGFydENvbDphLGVuZFJvdzpmLGVuZENvbDpffX1nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PXF1''@;'; put 'put ''KHRoaXMsT3kpLmNhbGwodGhpcyl8fDA9PT1xdSh0aGlzLFB5KS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDpsfT1xdSh0aGlzLFhwKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09cXUodGhpcyxYcCkuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZD1kQSh0aGlzLGhBLEVqKS5j''@;'; put 'put ''YWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LTEsc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fWdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpe2lmKDA9PT1xdSh0aGlzLE95KS5jYWxsKHRoaXMpfHwwPT09cXUodGhpcyxQeSkuY2FsbCh0''@;'; put 'put ''aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtjb2w6bH09cXUodGhpcyxYcCkuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7Y29sOmF9PXF1KHRoaXMsWHApLmdldEJvdHRvbUVuZENvcm5lcigpLGQ9ZEEodGhpcyxoQSxFaikuY2FsbCh0aGlzLGwsYSk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmEhPT1kLHN0''@;'; put 'put ''YXJ0Um93Oi1xdSh0aGlzLFB5KS5jYWxsKHRoaXMpLHN0YXJ0Q29sOmwsZW5kUm93Oi0xLGVuZENvbDpkfX19ZnVuY3Rpb24gRWooYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK3F1KHRoaXMseGopLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gaU9lKGMsbCl7cmV0dXJuIE1h''@;'; put 'put ''dGgubWluKGwsTWF0aC5tYXgoYytxdSh0aGlzLE1qKS5jYWxsKHRoaXMpLTEsYykpfWZ1bmN0aW9uIFhyZShjKXtjb25zdCBsPVtdLGE9W107cmV0dXJuIEluKGMsZD0+e3ZvKE1hdGgubWluKGQuc3RhcnRSb3csZC5lbmRSb3cpLE1hdGgubWF4KGQuc3RhcnRSb3csZC5lbmRSb3cpLFc9Pnst''@;'; put 'put ''MT09PWwuaW5kZXhPZihXKSYmbC5wdXNoKFcpfSksdm8oTWF0aC5taW4oZC5zdGFydENvbCxkLmVuZENvbCksTWF0aC5tYXgoZC5zdGFydENvbCxkLmVuZENvbCksVz0+ey0xPT09YS5pbmRleE9mKFcpJiZhLnB1c2goVyl9KX0pLHtyb3dzOmwsY29sdW1uczphfX1mdW5jdGlvbiBSZyhjLGws''@;'; put 'put ''YSl7SnJlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBKcmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEE3KGMsbCxhKXtyZXR1cm4g''@;'; put 'put ''bD1mdW5jdGlvbiBzT2UoYyl7dmFyIGw9ZnVuY3Rpb24gYU9lKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/''@;'; put 'put ''bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gYjEoYyxsKXtyZXR1cm4gZnVuY3Rpb24gY09lKGMsbCl7cmV0dXJuIGwuZ2V0''@;'; put 'put ''P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxRcmUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gV2YoYyxsLGEpe3JldHVybiBmdW5jdGlvbiB1T2UoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0''@;'; put 'put ''byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLFFyZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gUXJlKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3Rh''@;'; put 'put ''bmNlIik7cmV0dXJuIGwuZ2V0KGMpfXNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHlMaW1pdCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlDb3B5YWJsZVJhbmdlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUN1dCIpLHNvLmdldFNp''@;'; put 'put ''bmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckN1dCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVQYXN0ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclBhc3RlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvcHkiKSxzby5nZXRTaW5n''@;'; put 'put ''bGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5Iik7Y29uc3QgZkE9ImNvcHlQYXN0ZSIsaE9lPVsiZnJhZ21lbnRTZWxlY3Rpb24iXSxlaWU9Wyc8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkhhbmRzb250YWJsZSIvPicsJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+dGR7d2hpdGUt''@;'; put 'put ''c3BhY2U6bm9ybWFsfWJye21zby1kYXRhLXBsYWNlbWVudDpzYW1lLWNlbGx9PC9zdHlsZT4nXS5qb2luKCIiKTt2YXIga2o9bmV3IFdlYWtNYXAsQWo9bmV3IFdlYWtNYXAsVGo9bmV3IFdlYWtNYXAsVDc9bmV3IFdlYWtNYXAscEE9bmV3IFdlYWtNYXAsZ0E9bmV3IFdlYWtNYXAsRDc9bmV3''@;'; put 'put ''IFdlYWtNYXAsdGllPW5ldyBXZWFrU2V0O2NsYXNzIGZPZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBvT2UoYyxsKXtKcmUoYyxsKSxsLmFkZChjKX0odGhpcyx0aWUpLEE3KHRoaXMsImNvbHVtbnNMaW1pdCIsMS8wKSxBNyh0aGlzLCJy''@;'; put 'put ''b3dzTGltaXQiLDEvMCksQTcodGhpcywicGFzdGVNb2RlIiwib3ZlcndyaXRlIiksQTcodGhpcywidWlDb250YWluZXIiLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5KSxSZyh0aGlzLGtqLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLFJnKHRoaXMsQWose3dyaXRhYmxlOiEwLHZhbHVlOiEx''@;'; put 'put ''fSksUmcodGhpcyxUaix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxSZyh0aGlzLFQ3LHt3cml0YWJsZTohMCx2YWx1ZToiY2VsbHMtb25seSJ9KSxSZyh0aGlzLHBBLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLFJnKHRoaXMsZ0Ese3dyaXRhYmxlOiEwLHZhbHVlOiExfSksUmcodGhpcyxENyx7''@;'; put 'put ''d3JpdGFibGU6ITAsdmFsdWU6bmV3IHJPZSh7Y291bnRSb3dzOigpPT50aGlzLmhvdC5jb3VudFJvd3MoKSxjb3VudENvbHVtbnM6KCk9PnRoaXMuaG90LmNvdW50Q29scygpLHJvd3NMaW1pdDooKT0+dGhpcy5yb3dzTGltaXQsY29sdW1uc0xpbWl0OigpPT50aGlzLmNvbHVtbnNMaW1pdCxj''@;'; put 'put ''b3VudENvbHVtbkhlYWRlcnM6KCk9PnRoaXMuaG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl9KX0pLEE3KHRoaXMsImNvcHlhYmxlUmFuZ2VzIixbXSksQTcodGhpcywiZm9jdXNhYmxlRWxlbWVudCIsdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZkF9c3Rh''@;'; put 'put ''dGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bZkEsLi4uaE9lXX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA4MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbZkFdfWVuYWJsZVBsdWdpbigpe2lmKHRoaXMuZW5hYmxlZClyZXR1cm47''@;'; put 'put ''Y29uc3R7W2ZBXTpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO3ZhciBhLGQ7Im9iamVjdCI9PXR5cGVvZiBsJiYodGhpcy5wYXN0ZU1vZGU9bnVsbCE9PShhPWwucGFzdGVNb2RlKSYmdm9pZCAwIT09YT9hOnRoaXMucGFzdGVNb2RlLHRoaXMucm93c0xpbWl0PWlzTmFOKGwucm93c0xpbWl0''@;'; put 'put ''KT90aGlzLnJvd3NMaW1pdDpsLnJvd3NMaW1pdCx0aGlzLmNvbHVtbnNMaW1pdD1pc05hTihsLmNvbHVtbnNMaW1pdCk/dGhpcy5jb2x1bW5zTGltaXQ6bC5jb2x1bW5zTGltaXQsV2YodGhpcyxraiwhIWwuY29weUNvbHVtbkhlYWRlcnMpLFdmKHRoaXMsQWosISFsLmNvcHlDb2x1bW5Hcm91''@;'; put 'put ''cEhlYWRlcnMpLFdmKHRoaXMsVGosISFsLmNvcHlDb2x1bW5IZWFkZXJzT25seSksdGhpcy51aUNvbnRhaW5lcj1udWxsIT09KGQ9bC51aUNvbnRhaW5lcikmJnZvaWQgMCE9PWQ/ZDp0aGlzLnVpQ29udGFpbmVyKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9u''@;'; put 'put ''cyIsaD0+dGhpcy5vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhoKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlVXAiLCgpPT50aGlzLm9uQWZ0ZXJPbkNlbGxNb3VzZVVwKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQiLCgpPT50aGlzLm9uQWZ0ZXJT''@;'; put 'put ''ZWxlY3Rpb25FbmQoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVLZXlEb3duIiwoKT0+dGhpcy5vbkJlZm9yZUtleURvd24oKSksdGhpcy5mb2N1c2FibGVFbGVtZW50PWZ1bmN0aW9uIEpSZShjKXtjb25zdCBsPW5ldyB3aihjKTtsZXQgYT1jQS5nZXQoYyk7cmV0dXJuIGE9aXNOYU4oYSk/MDph''@;'; put 'put ''LGNBLnNldChjLGErMSksbH0odGhpcy51aUNvbnRhaW5lciksdGhpcy5mb2N1c2FibGVFbGVtZW50LmFkZExvY2FsSG9vaygiY29weSIsaD0+dGhpcy5vbkNvcHkoaCkpLmFkZExvY2FsSG9vaygiY3V0IixoPT50aGlzLm9uQ3V0KGgpKS5hZGRMb2NhbEhvb2soInBhc3RlIixoPT50aGlzLm9u''@;'; put 'put ''UGFzdGUoaCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5m''@;'; put 'put ''b2N1c2FibGVFbGVtZW50JiZXcmUodGhpcy5mb2N1c2FibGVFbGVtZW50KSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Y29weSgpe1dmKHRoaXMsVDcsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjZWxscy1vbmx5IiksV2YodGhpcyxwQSwh''@;'; put 'put ''MCksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX1jb3B5Q2VsbHNPbmx5KCl7dGhpcy5jb3B5KCJjZWxscy1vbmx5Iil9Y29weUNvbHVtbkhlYWRl''@;'; put 'put ''cnNPbmx5KCl7dGhpcy5jb3B5KCJjb2x1bW4taGVhZGVycy1vbmx5Iil9Y29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIil9Y29weVdpdGhDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIil9''@;'; put 'put ''Y3V0KCl7V2YodGhpcyxnQSwhMCksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImN1dCIpfWdldFJhbmdlZENvcHlhYmxlRGF0YShsKXtyZXR1cm4gd3kodGhp''@;'; put 'put ''cy5nZXRSYW5nZWREYXRhKGwpKX1nZXRSYW5nZWREYXRhKGwpe2NvbnN0IGE9W10se3Jvd3M6ZCxjb2x1bW5zOmh9PVhyZShsKTtyZXR1cm4gSW4oZCxmPT57Y29uc3QgXz1bXTtJbihoLFQ9PntfLnB1c2goZjwwP3RoaXMuaG90LmdldENvbEhlYWRlcihULGYpOnRoaXMuaG90LmdldENvcHlh''@;'; put 'put ''YmxlRGF0YShmLFQpKX0pLGEucHVzaChfKX0pLGF9cGFzdGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bDtpZigh''@;'; put 'put ''bCYmIWEpcmV0dXJuO2NvbnN0IGQ9bmV3IFhSZTtsJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsbCksYSYmZC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsYSksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSx0aGlzLm9uUGFzdGUoZCl9''@;'; put 'put ''c2V0Q29weWFibGVUZXh0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtiMSh0aGlzLEQ3KS5zZXRTZWxlY3RlZFJhbmdlKGwpO2NvbnN0IGE9bmV3IE1hcChbWyJoZWFkZXJzIixudWxsXSxbImNlbGxzIixudWxsXV0pOyJjb2x1bW4taGVh''@;'; put 'put ''ZGVycy1vbmx5Ij09PWIxKHRoaXMsVDcpP2Euc2V0KCJoZWFkZXJzIixiMSh0aGlzLEQ3KS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOigid2l0aC1jb2x1bW4taGVhZGVycyI9PT1iMSh0aGlzLFQ3KT9hLnNldCgiaGVhZGVycyIsYjEodGhpcyxENykuZ2V0TW9zdEJvdHRv''@;'; put 'put ''bUNvbHVtbkhlYWRlcnNSYW5nZSgpKToid2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyI9PT1iMSh0aGlzLFQ3KSYmYS5zZXQoImhlYWRlcnMiLGIxKHRoaXMsRDcpLmdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpKSxhLnNldCgiY2VsbHMiLGIxKHRoaXMsRDcpLmdldENlbGxzUmFuZ2UoKSkp''@;'; put 'put ''LHRoaXMuY29weWFibGVSYW5nZXM9QXJyYXkuZnJvbShhLnZhbHVlcygpKS5maWx0ZXIoaD0+bnVsbCE9PWgpLm1hcChoPT57bGV0e3N0YXJ0Um93OmYsc3RhcnRDb2w6XyxlbmRSb3c6VCxlbmRDb2w6V309aDtyZXR1cm57c3RhcnRSb3c6ZixzdGFydENvbDpfLGVuZFJvdzpULGVuZENvbDpX''@;'; put 'put ''fX0pLHRoaXMuY29weWFibGVSYW5nZXM9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLHRoaXMuY29weWFibGVSYW5nZXMpO2NvbnN0IGQ9YS5nZXQoImNlbGxzIik7aWYobnVsbCE9PWQmJmQuaXNSYW5nZVRyaW1tZWQpe2NvbnN0e3N0YXJ0Um93Omgsc3RhcnRDb2w6''@;'; put 'put ''ZixlbmRSb3c6XyxlbmRDb2w6VH09ZDt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb3B5TGltaXQiLF8taCsxLFQtZisxLHRoaXMucm93c0xpbWl0LHRoaXMuY29sdW1uc0xpbWl0KX19Z2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5o''@;'; put 'put ''b3QuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLlRFWFRBUkVBO2E/dGhpcy5mb2N1c2FibGVFbGVtZW50LnNldEZvY3VzYWJsZUVsZW1lbnQoYSk6dGhpcy5mb2N1c2FibGVFbGVtZW50LnVzZVNlY29uZGFyeUVsZW1lbnQoKX1pc0VkaXRvck9wZW5lZCgpe3ZhciBs''@;'; put 'put ''O3JldHVybiBudWxsPT09KGw9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmlzT3BlbmVkKCl9cG9wdWxhdGVWYWx1ZXMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuaG90''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwubGVuZ3RoKXJldHVybjtjb25zdCBkPWwubGVuZ3RoLGg9bFswXS5sZW5ndGgsZj1bXSx7cm93Ol8sY29sOlR9PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OlcsY29sOmllfT1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCBnZT1fLHdl''@;'; put 'put ''PVQsRWU9XyxaZT1UO2Zvcig7Zi5sZW5ndGg8ZHx8Z2U8PVc7KXtjb25zdHtza2lwUm93T25QYXN0ZTpvdCx2aXN1YWxSb3c6ZXR9PXRoaXMuaG90LmdldENlbGxNZXRhKGdlLFQpO2lmKGdlPWV0KzEsITA9PT1vdCljb250aW51ZTtFZT1ldCx3ZT1UO2NvbnN0IHl0PVtdLGt0PWYubGVuZ3Ro''@;'; put 'put ''JWQ7Zm9yKDt5dC5sZW5ndGg8aHx8d2U8PWllOyl7Y29uc3R7c2tpcENvbHVtbk9uUGFzdGU6U3QsdmlzdWFsQ29sOlF0fT10aGlzLmhvdC5nZXRDZWxsTWV0YShfLHdlKTsod2U9UXQrMSwhMCE9PVN0KSYmKFplPVF0LHl0LnB1c2gobFtrdF1beXQubGVuZ3RoJWhdKSl9Zi5wdXNoKHl0KX1y''@;'; put 'put ''ZXR1cm4gdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoXyxULGYsdm9pZCAwLHZvaWQgMCwiQ29weVBhc3RlLnBhc3RlIix0aGlzLnBhc3RlTW9kZSksW18sVCxFZSxaZV19b25Db3B5KGwpe2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhYjEodGhpcyxwQSl8fHRoaXMuaXNFZGl0b3JP''@;'; put 'put ''cGVuZWQoKSlyZXR1cm47dGhpcy5zZXRDb3B5YWJsZVRleHQoKSxXZih0aGlzLHBBLCExKTtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKSxkPWZ1bmN0aW9uIGxPZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRl''@;'; put 'put ''ZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYX0odGhpcyx0aWUscE9lKS5jYWxsKHRoaXMsdGhpcy5jb3B5YWJsZVJhbmdlcyk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvcHkiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyxkKSl7Y29uc3QgZj13''@;'; put 'put ''eShhKTtpZihsJiZsLmNsaXBib2FyZERhdGEpe2NvbnN0IF89RE4oYSk7bC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLGYpLGwuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLFtlaWUsX10uam9pbigiIikpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1''@;'; put 'put ''IiYmdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLGYpO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHkiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyxkKX1XZih0aGlzLFQ3LCJjZWxscy1vbmx5IiksbC5wcmV2ZW50RGVmYXVsdCgpfW9uQ3V0KGwpe2lm''@;'; put 'put ''KCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhYjEodGhpcyxnQSl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKSlyZXR1cm47dGhpcy5zZXRDb3B5YWJsZVRleHQoKSxXZih0aGlzLGdBLCExKTtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhv''@;'; put 'put ''dC5ydW5Ib29rcygiYmVmb3JlQ3V0IixhLHRoaXMuY29weWFibGVSYW5nZXMpKXtjb25zdCBoPXd5KGEpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7Y29uc3QgZj1ETihhKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsaCksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRl''@;'; put 'put ''eHQvaHRtbCIsW2VpZSxmXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsaCk7dGhpcy5ob3QuZW1wdHlTZWxlY3RlZENlbGxzKCJDb3B5UGFzdGUuY3V0IiksdGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoImFmdGVyQ3V0IixhLHRoaXMuY29weWFibGVSYW5nZXMpfWwucHJldmVudERlZmF1bHQoKX1vblBhc3RlKGwpe2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCkpcmV0dXJuO2xldCBhO2lmKGwmJmwucHJldmVudERlZmF1bHQmJmwucHJl''@;'; put 'put ''dmVudERlZmF1bHQoKSxsJiZ0eXBlb2YgbC5jbGlwYm9hcmREYXRhPCJ1Iil7Y29uc3QgVD1uayhsLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9odG1sIikse0FERF9UQUdTOlsibWV0YSJdLEFERF9BVFRSOlsiY29udGVudCJdLEZPUkNFX0JPRFk6ITB9KTthPVQmJi8oPHRhYmxlKXwo''@;'; put 'put ''PFRBQkxFKS9nLnRlc3QoVCk/SXRlKFQsdGhpcy5ob3Qucm9vdERvY3VtZW50KS5kYXRhOmwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L3BsYWluIil9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0eXBlb2YgdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhPCJ1''@;'; put 'put ''IiYmKGE9dGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYoYT1mdW5jdGlvbiBqRGUoYyl7Y29uc3QgbD1bWyIiXV07aWYoMD09PWMubGVuZ3RoKXJldHVybiBsO2xldCBoLGE9MCxkPTA7Zm9yKDtjLmxlbmd0''@;'; put 'put ''aD4wJiZoIT09Yy5sZW5ndGg7KWlmKGg9Yy5sZW5ndGgsYy5tYXRjaChCbmUpKWM9Yy5yZXBsYWNlKEJuZSwiIiksYSs9MSxsW2RdW2FdPSIiO2Vsc2UgaWYoYy5tYXRjaChWbmUpKWM9Yy5yZXBsYWNlKFZuZSwiIiksYT0wLGQrPTEsbFtkXT1bIiJdO2Vsc2V7bGV0IGY9IiI7aWYoYy5zdGFy''@;'; put 'put ''dHNXaXRoKCciJykpe2xldCBfPTAsVD0hMDtmb3IoO1Q7KXtjb25zdCBXPWMuc2xpY2UoMCwxKTsnIic9PT1XJiYoXys9MSksZis9VywoMD09PShjPWMuc2xpY2UoMSkpLmxlbmd0aHx8Yy5tYXRjaCgvXltcdFxyXG5dLykmJl8lMj09MCkmJihUPSExKX1mPWYucmVwbGFjZSgvXiIvLCIiKS5y''@;'; put 'put ''ZXBsYWNlKC8iJC8sIiIpLnJlcGxhY2UoL1siXSovZyxXPT5uZXcgQXJyYXkoTWF0aC5mbG9vcihXLmxlbmd0aC8yKSkuZmlsbCgnIicpLmpvaW4oIiIpKX1lbHNle2NvbnN0IF89Yy5tYXRjaChCRGUpO2Y9Xz9fWzBdOiIiLGM9Yy5zbGljZShmLmxlbmd0aCl9bFtkXVthXT1mfXJldHVybiBs''@;'; put 'put ''fShhKSksYSYmMD09PWEubGVuZ3RofHwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVQYXN0ZSIsYSx0aGlzLmNvcHlhYmxlUmFuZ2VzKSlyZXR1cm47Y29uc3RbZCxoLGYsX109dGhpcy5wb3B1bGF0ZVZhbHVlcyhhKTt0aGlzLmhvdC5zZWxlY3RDZWxsKGQsaCxNYXRoLm1pbih0aGlz''@;'; put 'put ''LmhvdC5jb3VudFJvd3MoKS0xLGYpLE1hdGgubWluKHRoaXMuaG90LmNvdW50Q29scygpLTEsXykpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhc3RlIixhLHRoaXMuY29weWFibGVSYW5nZXMpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpe2wuaXRlbXMucHVzaCh7bmFt''@;'; put 'put ''ZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gWVJlKGMpe3JldHVybntrZXk6ImNvcHkiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFRWKX0sY2FsbGJhY2soKXtjLmNvcHlDZWxsc09ubHkoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRo''@;'; put 'put ''aXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxiMSh0aGlzLGtqKSYmbC5pdGVtcy5wdXNoKGZ1bmN0aW9uICRSZShjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2hl''@;'; put 'put ''YWRlcnMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/TWF0aC5taW4obC5nZXRXaWR0aCgpLTEsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKERWLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhDb2x1bW5IZWFkZXJzKCl9LGRpc2Fi''@;'; put 'put ''bGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFsfHxsLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksYjEodGhpcyxBaikmJmwuaXRlbXMucHVzaChmdW5jdGlvbiBHUmUoYyl7cmV0dXJue2tleToiY29w''@;'; put 'put ''eV93aXRoX2NvbHVtbl9ncm91cF9oZWFkZXJzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP01hdGgubWluKGwuZ2V0V2lkdGgoKS0xLDEpOjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShJVixhKX0sY2FsbGJhY2soKXtjLmNvcHlXaXRo''@;'; put 'put ''QWxsQ29sdW1uSGVhZGVycygpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKXx8IXRoaXMuZ2V0U2V0dGluZ3MoKS5uZXN0ZWRIZWFkZXJzKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFsfHxsLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlz''@;'; put 'put ''KSksYjEodGhpcyxUaikmJmwuaXRlbXMucHVzaChmdW5jdGlvbiBXUmUoYyl7cmV0dXJue2tleToiY29weV9jb2x1bW5faGVhZGVyc19vbmx5IixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP01hdGgubWluKGwuZ2V0V2lkdGgoKS0xLDEpOjA7cmV0dXJu''@;'; put 'put ''IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShMVixhKX0sY2FsbGJhY2soKXtjLmNvcHlDb2x1bW5IZWFkZXJzT25seSgpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bC5sZW5ndGg+MX0s''@;'; put 'put ''aGlkZGVuOiExfX0odGhpcykpLGwuaXRlbXMucHVzaChmdW5jdGlvbiBxUmUoYyl7cmV0dXJue2tleToiY3V0IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShSVil9LGNhbGxiYWNrKCl7Yy5jdXQoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8''@;'; put 'put ''MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKX1vbkFmdGVyT25DZWxsTW91c2VVcCgpeyF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVk''@;'; put 'put ''KCl8fHRoaXMuaG90LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb258fCh0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpKX1vbkFmdGVyU2VsZWN0aW9uRW5kKCl7dGhpcy5pc0VkaXRvck9wZW5lZCgpfHwodGhpcy5n''@;'; put 'put ''ZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSwoIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb258fHRoaXMuZm9jdXNhYmxlRWxlbWVudC5nZXRGb2N1c2FibGVFbGVtZW50KCk9PT10aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudHx8IXV0ZSgpKSYm''@;'; put 'put ''KHRoaXMuc2V0Q29weWFibGVUZXh0KCksdGhpcy5mb2N1c2FibGVFbGVtZW50LmZvY3VzKCkpKX1vbkJlZm9yZUtleURvd24oKXtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpKXJldHVybjtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3Rp''@;'; put 'put ''dmVFbGVtZW50LGE9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCk7IWF8fGwhPT10aGlzLmZvY3VzYWJsZUVsZW1lbnQuZ2V0Rm9jdXNhYmxlRWxlbWVudCgpJiZsIT09YS5zZWxlY3R8fCh0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5m''@;'; put 'put ''b2N1cygpKX1kZXN0cm95KCl7dGhpcy5mb2N1c2FibGVFbGVtZW50JiYoV3JlKHRoaXMuZm9jdXNhYmxlRWxlbWVudCksdGhpcy5mb2N1c2FibGVFbGVtZW50PW51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcE9lKGMpe2NvbnN0e3Jvd3M6bH09WHJlKGMpO2xldCBhPTA7Zm9yKGxl''@;'; put 'put ''dCBkPTA7ZDxsLmxlbmd0aCYmIShsW2RdPj0wKTtkKyspYSs9MTtyZXR1cm57Y29sdW1uSGVhZGVyc0NvdW50OmF9fWZ1bmN0aW9uIG5pZShjLGwpe3JldHVybmBib3JkZXJfcm93JHtjfWNvbCR7bH1gfWZ1bmN0aW9uIERqKGMpe3ZhciBsLGE7cmV0dXJuKEtpKGMuc3RhcnQpfHxLaShjLmxl''@;'; put 'put ''ZnQpKSYmKGMuc3RhcnQ9bnVsbCE9PShsPWMuc3RhcnQpJiZ2b2lkIDAhPT1sP2w6Yy5sZWZ0KSwoS2koYy5lbmQpfHxLaShjLnJpZ2h0KSkmJihjLmVuZD1udWxsIT09KGE9Yy5lbmQpJiZ2b2lkIDAhPT1hP2E6Yy5yaWdodCksZGVsZXRlIGMubGVmdCxkZWxldGUgYy5yaWdodCxjfWZ1bmN0''@;'; put 'put ''aW9uIEh5KGMpe3JldHVybiBLaShjLnN0YXJ0KSYmKGMubGVmdD1jLnN0YXJ0KSxLaShjLmVuZCkmJihjLnJpZ2h0PWMuZW5kKSxjfWZ1bmN0aW9uIElqKGMsbCl7cmV0dXJue2lkOm5pZShjLGwpLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzAwMCIsY29ybmVyVmlzaWJsZTohMX0scm93OmMs''@;'; put 'put ''Y29sOmwsdG9wOntoaWRlOiEwfSxib3R0b206e2hpZGU6ITB9LHN0YXJ0OntoaWRlOiEwfSxlbmQ6e2hpZGU6ITB9fX1mdW5jdGlvbiAkZihjLGwpe2xldCBhPSExO3JldHVybiBJbihjLmdldFNlbGVjdGVkUmFuZ2UoKSxkPT57ZC5mb3JBbGwoKGgsZik9PntpZihoPDB8fGY8MClyZXR1cm47''@;'; put 'put ''Y29uc3QgXz1jLmdldENlbGxNZXRhKGgsZikuYm9yZGVycztpZihfKXtpZighbClyZXR1cm4gYT0hMCwhMTtpZighYmwoX1tsXSwiaGlkZSIpfHwhMT09PV9bbF0uaGlkZSlyZXR1cm4gYT0hMCwhMX19KX0pLGF9ZnVuY3Rpb24gbUEoYyl7cmV0dXJuYDxzcGFuIGNsYXNzPSJzZWxlY3RlZCI+''@;'; put 'put ''JHtTdHJpbmcuZnJvbUNoYXJDb2RlKDEwMDAzKX08L3NwYW4+JHtjfWB9Y29uc3QgYk9lPW5ldyBNYXAoW1sibGVmdCIsInN0YXJ0Il0sWyJyaWdodCIsImVuZCJdXSk7ZnVuY3Rpb24geU9lKGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9Yk9lLmdldChjKSkmJnZvaWQgMCE9PWw/bDpjfWZ1''@;'; put 'put ''bmN0aW9uIHdPZShjKXtyZXR1cm57a2V5OiJib3JkZXJzOnRvcCIsbmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShYVik7cmV0dXJuICRmKHRoaXMsInRvcCIpJiYobD1tQShsKSksbH0sY2FsbGJhY2sobCxhKXtjb25zdCBkPSRmKHRoaXMsInRvcCIpO2MucHJlcGFyZUJv''@;'; put 'put ''cmRlcihhLCJ0b3AiLGQpfX19ZnVuY3Rpb24gQ09lKGMpe2NvbnN0IGw9Yy5ob3QuaXNSdGwoKT8ic3RhcnQiOiJlbmQiO3JldHVybntrZXk6ImJvcmRlcnM6cmlnaHQiLG5hbWUoKXtsZXQgYT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoSlYpO3JldHVybiAkZih0aGlzLGwpJiYoYT1tQShh''@;'; put 'put ''KSksYX0sY2FsbGJhY2soYSxkKXtjb25zdCBoPSRmKHRoaXMsbCk7Yy5wcmVwYXJlQm9yZGVyKGQsbCxoKX19fWZ1bmN0aW9uIFNPZShjKXtyZXR1cm57a2V5OiJib3JkZXJzOmJvdHRvbSIsbmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShRVik7cmV0dXJuICRmKHRoaXMs''@;'; put 'put ''ImJvdHRvbSIpJiYobD1tQShsKSksbH0sY2FsbGJhY2sobCxhKXtjb25zdCBkPSRmKHRoaXMsImJvdHRvbSIpO2MucHJlcGFyZUJvcmRlcihhLCJib3R0b20iLGQpfX19ZnVuY3Rpb24gTU9lKGMpe2NvbnN0IGw9Yy5ob3QuaXNSdGwoKT8iZW5kIjoic3RhcnQiO3JldHVybntrZXk6ImJvcmRl''@;'; put 'put ''cnM6bGVmdCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShlQik7cmV0dXJuICRmKHRoaXMsbCkmJihhPW1BKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9JGYodGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24geE9lKGMpe3JldHVybntr''@;'; put 'put ''ZXk6ImJvcmRlcnM6bm9fYm9yZGVycyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UodEIpfSxjYWxsYmFjayhsLGEpe2MucHJlcGFyZUJvcmRlcihhLCJub0JvcmRlcnMiKX0sZGlzYWJsZWQoKXtyZXR1cm4hJGYodGhpcyl9fX1jb25zdCB2QT0iY3VzdG9tQm9yZGVy''@;'; put 'put ''cyI7Y2xhc3MgRE9lIGV4dGVuZHMgWnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEVPZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24ga09lKGMpe3ZhciBsPWZ1bmN0aW9uIEFPZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzYXZlZEJvcmRlcnMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdkF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpW3ZBXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsbD0+dGhpcy5vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+dGhpcy5vbkFm''@;'; put 'put ''dGVySW5pdCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaGlkZUJvcmRlcnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmNoYW5nZUJvcmRlclNl''@;'; put 'put ''dHRpbmdzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9c2V0Qm9yZGVycyhsLGEpe2xldCBkPVsidG9wIiwiYm90dG9tIiwic3RhcnQiLCJlbmQiXSxoPW51bGw7YSYmKHRoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKFthXSksZD1PYmplY3Qua2V5cyhhKSxoPURqKGEpKTtjb25zdCBfPXl5KGc3''@;'; put 'put ''KGwpKTtJbihsLFQ9Pntjb25zdFtXLGllLGdlLHdlXT1fKFQpO2ZvcihsZXQgRWU9VztFZTw9Z2U7RWUrPTEpZm9yKGxldCBaZT1pZTtaZTw9d2U7WmUrPTEpSW4oZCxvdD0+e3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChFZSxaZSxoLHlPZShvdCkpfSl9KSx0aGlzLmhvdC52''@;'; put 'put ''aWV3LnJlbmRlcigpfWdldEJvcmRlcnMobCl7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzO2NvbnN0IGQ9eXkoZzcobCkpLGg9W107cmV0dXJuIEluKGwsZj0+e2NvbnN0W18sVCxXLGllXT1kKGYpO2ZvcihsZXQgZ2U9XztnZTw9VztnZSs9MSlmb3IobGV0''@;'; put 'put ''IHdlPVQ7d2U8PWllO3dlKz0xKUluKHRoaXMuc2F2ZWRCb3JkZXJzLEVlPT57RWUucm93PT09Z2UmJkVlLmNvbD09PXdlJiZoLnB1c2goSHkoRWUpKX0pfSksaH1jbGVhckJvcmRlcnMobCl7bD90aGlzLnNldEJvcmRlcnMobCk6KEluKHRoaXMuc2F2ZWRCb3JkZXJzLGE9Pnt0aGlzLmNsZWFy''@;'; put 'put ''Qm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhhLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGEucm93LGEuY29sLCJib3JkZXJzIil9KSx0aGlzLnNhdmVkQm9yZGVycy5sZW5ndGg9MCl9aW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGws''@;'; put 'put ''YSl7dGhpcy5jaGVja1NhdmVkQm9yZGVycyhsKXx8dGhpcy5zYXZlZEJvcmRlcnMucHVzaChsKTtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csbC5jb2wpKTt0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGgsYSl8''@;'; put 'put ''fHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuYWRkQ3VzdG9tU2VsZWN0aW9uKHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6aH0pfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5jb3VudFJvd3MoKSxfPXRoaXMuaG90LmNvdW50Q29s''@;'; put 'put ''cygpO2lmKGw+PWZ8fGE+PV8pcmV0dXJuO2xldCBUPUlqKGwsYSk7ZCYmKFQ9ZnVuY3Rpb24gbU9lKGMsbCl7cmV0dXJuIGJsKGwsImJvcmRlciIpJiZsLmJvcmRlciYmKGMuYm9yZGVyPWwuYm9yZGVyKSxibChsLCJ0b3AiKSYmS2kobC50b3ApJiYobC50b3A/KHVzKGwudG9wKXx8KGwudG9w''@;'; put 'put ''PXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMudG9wPWwudG9wKToobC50b3A9e2hpZGU6ITB9LGMudG9wPWwudG9wKSksYmwobCwiYm90dG9tIikmJktpKGwuYm90dG9tKSYmKGwuYm90dG9tPyh1cyhsLmJvdHRvbSl8fChsLmJvdHRvbT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmJvdHRv''@;'; put 'put ''bT1sLmJvdHRvbSk6KGwuYm90dG9tPXtoaWRlOiEwfSxjLmJvdHRvbT1sLmJvdHRvbSkpLGJsKGwsInN0YXJ0IikmJktpKGwuc3RhcnQpJiYobC5zdGFydD8odXMobC5zdGFydCl8fChsLnN0YXJ0PXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuc3RhcnQ9bC5zdGFydCk6KGwuc3RhcnQ9e2hp''@;'; put 'put ''ZGU6ITB9LGMuc3RhcnQ9bC5zdGFydCkpLGJsKGwsImVuZCIpJiZLaShsLmVuZCkmJihsLmVuZD8odXMobC5lbmQpfHwobC5lbmQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5lbmQ9bC5lbmQpOihsLmVuZD17aGlkZTohMH0sYy5lbmQ9bC5lbmQpKSxjfShULGQpLEluKHRoaXMuaG90LnNl''@;'; put 'put ''bGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxXPT57aWYoVC5pZD09PVcuc2V0dGluZ3MuaWQpcmV0dXJuIE9iamVjdC5hc3NpZ24oVy5zZXR0aW5ncyxkKSxULmlkPVcuc2V0dGluZ3MuaWQsVC50b3A9Vy5zZXR0aW5ncy50b3AsVC5ib3R0b209Vy5zZXR0aW5ncy5ib3R0b20s''@;'; put 'put ''VC5zdGFydD1XLnNldHRpbmdzLnN0YXJ0LFQuZW5kPVcuc2V0dGluZ3MuZW5kLCExfSkpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIsSHkoVCkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKFQsaCl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGws''@;'; put 'put ''YSl7Y29uc3QgZD1NYXRoLm1pbihsLnRvLnJvdyx0aGlzLmhvdC5jb3VudFJvd3MoKS0xKSxoPU1hdGgubWluKGwudG8uY29sLHRoaXMuaG90LmNvdW50Q29scygpLTEpO3ZvKGwuZnJvbS5yb3csZCxmPT57dm8obC5mcm9tLmNvbCxoLF89Pntjb25zdCBUPUlqKGYsXyk7bGV0IFc9MDtmPT09''@;'; put 'put ''bC5mcm9tLnJvdyYmYmwoYSwidG9wIikmJihXKz0xLFQudG9wPWEudG9wKSxmPT09bC50by5yb3cmJmJsKGEsImJvdHRvbSIpJiYoVys9MSxULmJvdHRvbT1hLmJvdHRvbSksXz09PWwuZnJvbS5jb2wmJmJsKGEsInN0YXJ0IikmJihXKz0xLFQuc3RhcnQ9YS5zdGFydCksXz09PWwudG8uY29s''@;'; put 'put ''JiZibChhLCJlbmQiKSYmKFcrPTEsVC5lbmQ9YS5lbmQpLFc+MCYmKHRoaXMuaG90LnNldENlbGxNZXRhKGYsXywiYm9yZGVycyIsSHkoVCkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKFQpKX0pfSl9cmVtb3ZlQWxsQm9yZGVycyhsLGEpe2NvbnN0IGQ9bmllKGwsYSk7dGhpcy5z''@;'; put 'put ''cGxpY2VCb3JkZXIoZCksdGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MoZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShsLGEsImJvcmRlcnMiKX1zZXRCb3JkZXIobCxhLGQsaCl7bGV0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1l''@;'; put 'put ''dGEobCxhKS5ib3JkZXJzO2Y9ZiYmdm9pZCAwIT09Zi5ib3JkZXI/RGooZik6SWoobCxhKSxoPyhmW2RdPXtoaWRlOiEwfSw0PT09dGhpcy5jb3VudEhpZGUoZik/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGwsYSk6KHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYs''@;'; put 'put ''ZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixIeShmKSkpKTooZltkXT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9LHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhp''@;'; put 'put ''cy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixIeShmKSkpfXByZXBhcmVCb3JkZXIobCxhLGQpe0luKGwsaD0+e2xldHtzdGFydDpmLGVuZDpffT1oO2lmKGYucm93PT09Xy5yb3cmJmYuY29sPT09Xy5jb2wpIm5vQm9yZGVy''@;'; put 'put ''cyI9PT1hP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhmLnJvdyxmLmNvbCk6dGhpcy5zZXRCb3JkZXIoZi5yb3csZi5jb2wsYSxkKTtlbHNlIHN3aXRjaChhKXtjYXNlIm5vQm9yZGVycyI6dm8oZi5jb2wsXy5jb2wsVD0+e3ZvKGYucm93LF8ucm93LFc9Pnt0aGlzLnJlbW92ZUFsbEJvcmRlcnMo''@;'; put 'put ''VyxUKX0pfSk7YnJlYWs7Y2FzZSJ0b3AiOnZvKGYuY29sLF8uY29sLFQ9Pnt0aGlzLnNldEJvcmRlcihmLnJvdyxULGEsZCl9KTticmVhaztjYXNlImJvdHRvbSI6dm8oZi5jb2wsXy5jb2wsVD0+e3RoaXMuc2V0Qm9yZGVyKF8ucm93LFQsYSxkKX0pO2JyZWFrO2Nhc2Uic3RhcnQiOnZvKGYu''@;'; put 'put ''cm93LF8ucm93LFQ9Pnt0aGlzLnNldEJvcmRlcihULGYuY29sLGEsZCl9KTticmVhaztjYXNlImVuZCI6dm8oZi5yb3csXy5yb3csVD0+e3RoaXMuc2V0Qm9yZGVyKFQsXy5jb2wsYSxkKX0pfX0pfWNyZWF0ZUN1c3RvbUJvcmRlcnMobCl7SW4obCxhPT57Y29uc3QgZD1EaihhKTthLnJhbmdl''@;'; put 'put ''P3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGEucmFuZ2UsZCk6dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKGEucm93LGEuY29sLGQpfSl9Y291bnRIaWRlKGwpe2NvbnN0e3RvcDphLGJvdHRvbTpkLHN0YXJ0OmgsZW5kOmZ9PWw7cmV0dXJuIEFsKFth''@;'; put 'put ''LGQsaCxmXSwoVCxXKT0+e2xldCBpZT1UO3JldHVybiBXJiZXLmhpZGUmJihpZSs9MSksaWV9LDApfWNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsKXtjb25zdCBhPWNzKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxkPT5kLnNldHRpbmdz''@;'; put 'put ''LmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1thXS5jbGVhcigpfWNsZWFyTnVsbENlbGxSYW5nZSgpe0luKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucywobCxhKT0+e2lmKG51bGw9''@;'; put 'put ''PT1sLmNlbGxSYW5nZSlyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmRlc3Ryb3koKSx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMuc3BsaWNlKGEsMSksITF9KX1oaWRlQm9yZGVycygpe0luKHRoaXMu''@;'; put 'put ''c2F2ZWRCb3JkZXJzLGw9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpfSl9c3BsaWNlQm9yZGVyKGwpe2NvbnN0IGE9Y3ModGhpcy5zYXZlZEJvcmRlcnMsZD0+ZC5pZCkuaW5kZXhPZihsKTthPi0xJiZ0aGlz''@;'; put 'put ''LnNhdmVkQm9yZGVycy5zcGxpY2UoYSwxKX1jaGVja1NhdmVkQm9yZGVycyhsKXtsZXQgYT0hMTtyZXR1cm4gND09PXRoaXMuY291bnRIaWRlKGwpPyh0aGlzLnNwbGljZUJvcmRlcihsLmlkKSxhPSEwKTpJbih0aGlzLnNhdmVkQm9yZGVycywoaCxmKT0+e2lmKGwuaWQ9PT1oLmlkKXJldHVy''@;'; put 'put ''biB0aGlzLnNhdmVkQm9yZGVyc1tmXT1sLGE9ITAsITF9KSxhfWNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShsLGEsZCl7bGV0IGg9ITE7cmV0dXJuIEluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxmPT57aWYobC5pZD09PWYuc2V0''@;'; put 'put ''dGluZ3MuaWQpcmV0dXJuIGRzKGYuaW5zdGFuY2VCb3JkZXJzLF89PntfLnRvZ2dsZUhpZGRlbkNsYXNzKGEsZCl9KSxoPSEwLCExfSksaH1jaGVja0N1c3RvbVNlbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5jb3VudEhpZGUobCk7bGV0IGY9ITE7cmV0dXJuIDQ9PT1oPyh0aGlzLnJl''@;'; put 'put ''bW92ZUFsbEJvcmRlcnMobC5yb3csbC5jb2wpLGY9ITApOkluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxfPT57aWYobC5pZD09PV8uc2V0dGluZ3MuaWQpcmV0dXJuIF8udmlzdWFsQ2VsbFJhbmdlPWEsXy5jb21taXQoKSxkJiZkcyhfLmluc3RhbmNl''@;'; put 'put ''Qm9yZGVycyxUPT57VC5jaGFuZ2VCb3JkZXJTdHlsZShkLGwpfSksZj0hMCwhMX0pLGZ9Y2hhbmdlQm9yZGVyU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbdkFdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGE9eXUobCk7dGhpcy5jaGVja1NldHRpbmdzQ29o''@;'; put 'put ''ZXNpb24oYSksYS5sZW5ndGh8fCh0aGlzLnNhdmVkQm9yZGVycz1hKSx0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnMoYSl9ZWxzZSB2b2lkIDAhPT1sJiZ0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnModGhpcy5zYXZlZEJvcmRlcnMpfWNoZWNrU2V0dGluZ3NDb2hlc2lvbihsKXtjb25zdCBhPWZ1''@;'; put 'put ''bmN0aW9uIHZPZShjKXtyZXR1cm4gYy5zb21lKGw9PktpKGwubGVmdCl8fEtpKGwucmlnaHQpKX0obCksZD1mdW5jdGlvbiBfT2UoYyl7cmV0dXJuIGMuc29tZShsPT5LaShsLnN0YXJ0KXx8S2kobC5lbmQpKX0obCk7aWYoYSYmZCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAibGVmdCIvInJpZ2h0''@;'; put 'put ''IiBhbmQgInN0YXJ0Ii8iZW5kIiBvcHRpb25zIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKTtpZih0aGlzLmhvdC5pc1J0bCgpJiZhKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIHByb3Bl''@;'; put 'put ''cnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKX1vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKXt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3ZBXSYmbC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSx7''@;'; put 'put ''a2V5OiJib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShLVil9LGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxzdWJtZW51OntpdGVtczpbd09lKHRoaXMpLENPZSh0aGlzKSxTT2UodGhpcyksTU9lKHRo''@;'; put 'put ''aXMpLHhPZSh0aGlzKV19fSl9b25BZnRlckluaXQoKXt0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3QgcmllPSJkcmFnVG9TY3JvbGwiO2NsYXNzIExPZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBy''@;'; put 'put ''aWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmJvdW5kYXJpZXM9bnVsbCx0aGlzLmNhbGxiYWNrPW51bGwsdGhpcy5saXN0ZW5pbmc9ITF9aXNFbmFibGVk''@;'; put 'put ''KCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3JpZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsbD0+dGhpcy5zZXR1cExpc3RlbmluZyhsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lck1v''@;'; put 'put ''dXNlRG93biIsbD0+dGhpcy5zZXR1cExpc3RlbmluZyhsKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQ''@;'; put 'put ''bHVnaW4oKXt0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2V0Qm91bmRhcmllcyhsKXt0aGlzLmJvdW5kYXJpZXM9bH1zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Y2hlY2sobCxhKXtsZXQgZD0wLGg9MDthPHRoaXMuYm91bmRhcmllcy50b3A/''@;'; put 'put ''aD1hLXRoaXMuYm91bmRhcmllcy50b3A6YT50aGlzLmJvdW5kYXJpZXMuYm90dG9tJiYoaD1hLXRoaXMuYm91bmRhcmllcy5ib3R0b20pLGw8dGhpcy5ib3VuZGFyaWVzLmxlZnQ/ZD1sLXRoaXMuYm91bmRhcmllcy5sZWZ0Omw+dGhpcy5ib3VuZGFyaWVzLnJpZ2h0JiYoZD1sLXRoaXMuYm91''@;'; put 'put ''bmRhcmllcy5yaWdodCksdGhpcy5jYWxsYmFjayhkLGgpfWxpc3Rlbigpe3RoaXMubGlzdGVuaW5nPSEwfXVubGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITF9aXNMaXN0ZW5pbmcoKXtyZXR1cm4gdGhpcy5saXN0ZW5pbmd9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290V2luZG93Omx9PXRo''@;'; put 'put ''aXMuaG90O2xldCBhPWw7Zm9yKDthOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsImNvbnRleHRtZW51IiwoKT0+dGhpcy51bmxpc3RlbigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsIm1vdXNldXAiLCgpPT50''@;'; put 'put ''aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2Vtb3ZlIixkPT50aGlzLm9uTW91c2VNb3ZlKGQpKSxhPVFiKGEpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfXNldHVwTGlzdGVuaW5n''@;'; put 'put ''KGwpe2lmKFVwKGwpKXJldHVybjtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuaG9sZGVyO2EhPT10aGlzLmhvdC5yb290V2luZG93JiYodGhpcy5zZXRCb3VuZGFyaWVzKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuc2V0Q2FsbGJhY2soKGQsaCk9PntkPDA/YS5z''@;'; put 'put ''Y3JvbGxMZWZ0LT01MDpkPjAmJihhLnNjcm9sbExlZnQrPTUwKSxoPDA/YS5zY3JvbGxUb3AtPTIwOmg+MCYmKGEuc2Nyb2xsVG9wKz0yMCl9KSx0aGlzLmxpc3RlbigpKX1vbk1vdXNlTW92ZShsKXt0aGlzLmlzTGlzdGVuaW5nKCkmJnRoaXMuY2hlY2sobC5jbGllbnRYLGwuY2xpZW50WSl9''@;'; put 'put ''ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lz''@;'; put 'put ''dGVyKCJhZnRlckRyb3Bkb3duTWVudVNob3ciKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RXhlY3V0ZSIpO2NvbnN0IExqPSJkcm9wZG93bk1lbnUiLFJqPSJj''@;'; put 'put ''aGFuZ2VUeXBlIjtsZXQgT09lPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gTGp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjMwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29s''@;'; put 'put ''dW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltUeSxEeSxncyxMeSxncyx0QSxncyxJeSxncyx2ZF19Y29uc3RydWN0b3IoYSl7c3VwZXIoYSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuY29tbWFuZEV4ZWN1dG9yPW5ldyBOcmUodGhpcy5o''@;'; put 'put ''b3QpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGwsdGhpcy5tZW51PW51bGwsdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChkLGgpPT50aGlzLm9uQWZ0ZXJHZXRDb2xIZWFkZXIoZCxoKSl9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbTGpdfWVu''@;'; put 'put ''YWJsZVBsdWdpbigpe3ZhciBhPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgenJlKHRoaXMuaG90LGMuREVGQVVMVF9JVEVNUyk7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0xqXSxoPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJ''@;'; put 'put ''dGVtcyhkKX07dGhpcy5yZWdpc3RlckV2ZW50cygpLCJmdW5jdGlvbiI9PXR5cGVvZiBkLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhkLmNhbGxiYWNrKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLmNhbGxPblBsdWdpbnNSZWFkeSgoKT0+e3Ro''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixoKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoaC5pdGVtcyk7Y29uc3QgZj10aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhkKTt0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95''@;'; put 'put ''KCksdGhpcy5tZW51PW5ldyB5aih0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodERyb3Bkb3duTWVudSIsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOmQudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5fSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyb3Bkb3duTWVu''@;'; put 'put ''dVNldEl0ZW1zIixmKSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKGYpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImJlZm9yZU9wZW4iLCgpPT50aGlzLm9uTWVudUJlZm9yZU9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+dGhpcy5vbk1lbnVBZnRlck9wZW4o''@;'; put 'put ''KSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMub25NZW51QWZ0ZXJDbG9zZSgpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIF89YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheShfKSxXPTA7''@;'; put 'put ''VzxfO1crKylUW1ddPWFyZ3VtZW50c1tXXTtyZXR1cm4gYS5leGVjdXRlQ29tbWFuZC5jYWxsKGEsLi4uVCl9KSxJbihmLF89PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChfLmtleSxfKSl9KX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVu''@;'; put 'put ''YWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsImNsaWNrIixhPT50aGlzLm9uVGFibGVDbGljayhhKSl9b3BlbihhKXt0aGlzLm1lbnUmJih0aGlzLm1lbnUub3BlbigpLGEud2lkdGgmJnRoaXMubWVudS5zZXRPZmZzZXQoImxlZnQiLGEud2lkdGgpLHRoaXMubWVudS5zZXRQb3NpdGlvbihhKSl9''@;'; put 'put ''Y2xvc2UoKXt0aGlzLm1lbnUmJnRoaXMubWVudS5jbG9zZSgpfWV4ZWN1dGVDb21tYW5kKGEpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+MT9kLTE6MCksZj0xO2Y8ZDtmKyspaFtmLTFdPWFyZ3VtZW50c1tmXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRl''@;'; put 'put ''KGEsLi4uaCl9c2V0TGlzdGVuaW5nKCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlzLm1lbnUuaXNPcGVuZWQoKSYmKGE/dGhpcy5tZW51LmhvdE1lbnUubGlzdGVuKCk6dGhpcy5tZW51LmhvdE1lbnUudW5saXN0''@;'; put 'put ''ZW4oKSl9b25UYWJsZUNsaWNrKGEpe2lmKGEuc3RvcFByb3BhZ2F0aW9uKCksQm8oYS50YXJnZXQsUmopJiYhdGhpcy5tZW51LmlzT3BlbmVkKCkpe2xldCBkPTAsaD0wO2lmKHRoaXMuaG90LnJvb3REb2N1bWVudCE9PXRoaXMubWVudS5jb250YWluZXIub3duZXJEb2N1bWVudCl7Y29uc3R7''@;'; put 'put ''ZnJhbWVFbGVtZW50Ol99PXRoaXMuaG90LnJvb3RXaW5kb3cse3RvcDpULGxlZnQ6V309Xy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkPVQsaD1XfWNvbnN0IGY9YS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5vcGVuKHtsZWZ0OmYubGVmdCtoLHRvcDpmLnRvcCthLnRh''@;'; put 'put ''cmdldC5vZmZzZXRIZWlnaHQrMytkLHdpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0fSl9fW9uQWZ0ZXJHZXRDb2xIZWFkZXIoYSxkKXtjb25zdCBoPWQucGFyZW50Tm9kZTtpZighaClyZXR1cm47Y29uc3QgZj1oLnBhcmVudE5vZGUuY2hpbGROb2RlcyxfPUFycmF5LnByb3RvdHlwZS5p''@;'; put 'put ''bmRleE9mLmNhbGwoZixoKTtpZihhPDB8fF8hPT1mLmxlbmd0aC0xKXJldHVybjtjb25zdCBUPWQucXVlcnlTZWxlY3RvcihgLiR7Ump9YCk7aWYodGhpcy5lbmFibGVkJiZUKXJldHVybjtpZighdGhpcy5lbmFibGVkKXJldHVybiB2b2lkKFQmJlQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChU''@;'; put 'put ''KSk7Y29uc3QgVz10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Vy5jbGFzc05hbWU9UmosVy50eXBlPSJidXR0b24iLFcub25jbGljaz1mdW5jdGlvbigpe3JldHVybiExfSxkLmZpcnN0Q2hpbGQuaW5zZXJ0QmVmb3JlKFcsZC5maXJzdENoaWxkLmZpcnN0''@;'; put 'put ''Q2hpbGQpfW9uTWVudUJlZm9yZU9wZW4oKXt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJDbG9zZSgpe3RoaXMu''@;'; put 'put ''aG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLHRoaXMpfWRlc3Ryb3koKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19cmV0dXJuIGMuU0VQQVJBVE9SPXtuYW1lOmdzfSxjfSko''@;'; put 'put ''KTtjbGFzcyBPantzdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToidGV4dC9wbGFpbiIsZmlsZUV4dGVuc2lvbjoidHh0IixmaWxlbmFtZToiSGFuZHNvbnRhYmxlIFtZWVlZXS1bTU1dLVtERF0iLGVuY29kaW5nOiJ1dGYtOCIsYm9tOiExLGNvbHVtbkhlYWRl''@;'; put 'put ''cnM6ITEscm93SGVhZGVyczohMSxleHBvcnRIaWRkZW5Db2x1bW5zOiExLGV4cG9ydEhpZGRlblJvd3M6ITEscmFuZ2U6W119fWNvbnN0cnVjdG9yKGwsYSl7dGhpcy5kYXRhUHJvdmlkZXI9bCx0aGlzLm9wdGlvbnM9dGhpcy5fbWVyZ2VPcHRpb25zKGEpLHRoaXMuZGF0YVByb3ZpZGVyLnNl''@;'; put 'put ''dE9wdGlvbnModGhpcy5vcHRpb25zKX1fbWVyZ2VPcHRpb25zKGwpe2xldCBhPVd1KHRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9PUFRJT05TKTtjb25zdCBkPW5ldyBEYXRlO3JldHVybiBhPUtsKFd1KE9qLkRFRkFVTFRfT1BUSU9OUyksYSksYT1LbChhLGwpLGEuZmlsZW5hbWU9Y04oYS5m''@;'; put 'put ''aWxlbmFtZSx7WVlZWTpkLmdldEZ1bGxZZWFyKCksTU06YCR7ZC5nZXRNb250aCgpKzF9YC5wYWRTdGFydCgyLCIwIiksREQ6YCR7ZC5nZXREYXRlKCl9YC5wYWRTdGFydCgyLCIwIil9KSxhfX1jb25zdCBIT2U9T2osTk9lPVN0cmluZy5mcm9tQ2hhckNvZGUoMTMpLFZPZT1TdHJpbmcuZnJv''@;'; put 'put ''bUNoYXJDb2RlKDM0KSxCT2U9U3RyaW5nLmZyb21DaGFyQ29kZSgxMCksUGo9e2NzdjpjbGFzcyBqT2UgZXh0ZW5kcyBIT2V7c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQvY3N2IixmaWxlRXh0ZW5zaW9uOiJjc3YiLGJvbTohMCxjb2x1bW5EZWxp''@;'; put 'put ''bWl0ZXI6IiwiLHJvd0RlbGltaXRlcjoiXHJcbiJ9fWV4cG9ydCgpe2NvbnN0IGw9dGhpcy5vcHRpb25zLGE9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0RGF0YSgpO2xldCBkPXRoaXMuZGF0YVByb3ZpZGVyLmdldENvbHVtbkhlYWRlcnMoKTtjb25zdCBoPWQubGVuZ3RoPjAsZj10aGlzLmRhdGFQ''@;'; put 'put ''cm92aWRlci5nZXRSb3dIZWFkZXJzKCksXz1mLmxlbmd0aD4wO2xldCBUPWwuYm9tP1N0cmluZy5mcm9tQ2hhckNvZGUoNjUyNzkpOiIiO3JldHVybiBoJiYoZD1jcyhkLFc9PnRoaXMuX2VzY2FwZUNlbGwoVywhMCkpLF8mJihUKz1sLmNvbHVtbkRlbGltaXRlciksVCs9ZC5qb2luKGwuY29s''@;'; put 'put ''dW1uRGVsaW1pdGVyKSxUKz1sLnJvd0RlbGltaXRlciksSW4oYSwoVyxpZSk9PntpZT4wJiYoVCs9bC5yb3dEZWxpbWl0ZXIpLF8mJihUKz10aGlzLl9lc2NhcGVDZWxsKGZbaWVdKStsLmNvbHVtbkRlbGltaXRlciksVCs9Vy5tYXAoZ2U9PnRoaXMuX2VzY2FwZUNlbGwoZ2UpKS5qb2luKGwu''@;'; put 'put ''Y29sdW1uRGVsaW1pdGVyKX0pLFR9X2VzY2FwZUNlbGwobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPV9sKGwpO3JldHVybiIiIT09ZCYmKGF8fGQuaW5kZXhPZihOT2UpPj0wfHxkLmluZGV4T2YoVk9lKT49MHx8ZC5p''@;'; put 'put ''bmRleE9mKEJPZSk+PTB8fGQuaW5kZXhPZih0aGlzLm9wdGlvbnMuY29sdW1uRGVsaW1pdGVyKT49MCkmJihkPWQucmVwbGFjZShuZXcgUmVnRXhwKCciJywiZyIpLCciIicpLGQ9YCIke2R9ImApLGR9fX07Y2xhc3MgR09lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0''@;'; put 'put ''dXJuImV4cG9ydEZpbGUifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI0MH1pc0VuYWJsZWQoKXtyZXR1cm4hMH1leHBvcnRBc1N0cmluZyhsKXtyZXR1cm4gdGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuZXhwb3J0KCl9ZXhwb3J0QXNCbG9iKGwpe3JldHVybiB0aGlzLl9jcmVhdGVCbG9iKHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pKX1kb3du''@;'; put 'put ''bG9hZEZpbGUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0e3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5ob3QsZj10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYSksXz10aGlzLl9jcmVh''@;'; put 'put ''dGVCbG9iKGYpLFQ9aC5VUkx8fGgud2Via2l0VVJMLFc9ZC5jcmVhdGVFbGVtZW50KCJhIiksaWU9YCR7Zi5vcHRpb25zLmZpbGVuYW1lfS4ke2Yub3B0aW9ucy5maWxlRXh0ZW5zaW9ufWA7aWYodm9pZCAwIT09Vy5kb3dubG9hZCl7Y29uc3QgZ2U9VC5jcmVhdGVPYmplY3RVUkwoXyk7Vy5z''@;'; put 'put ''dHlsZS5kaXNwbGF5PSJub25lIixXLnNldEF0dHJpYnV0ZSgiaHJlZiIsZ2UpLFcuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsaWUpLGQuYm9keS5hcHBlbmRDaGlsZChXKSxXLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIikpLGQuYm9keS5yZW1vdmVDaGlsZChXKSxzZXRU''@;'; put 'put ''aW1lb3V0KCgpPT57VC5yZXZva2VPYmplY3RVUkwoZ2UpfSwxMDApfWVsc2UgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2ImJm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKF8saWUpfV9jcmVhdGVUeXBlRm9ybWF0dGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighUGpbbF0pdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQgZm9ybWF0IHR5cGUgIiR7bH0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7cmV0dXJuIGZ1bmN0aW9uIFpPZShjLGwsYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFBqW2NdP25ldyBQ''@;'; put 'put ''altjXShsLGEpOm51bGx9KGwsbmV3IGNsYXNzIFBPZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvdD1sLHRoaXMub3B0aW9ucz17fX1zZXRPcHRpb25zKGwpe3RoaXMub3B0aW9ucz1sfWdldERhdGEoKXtjb25zdHtzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmQsZW5kQ29sOmh9PXRoaXMu''@;'; put 'put ''X2dldERhdGFSYW5nZSgpLGY9dGhpcy5vcHRpb25zLF89W107cmV0dXJuIHZvKGwsZCxUPT57Y29uc3QgVz1bXTshZi5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyhUKXx8KHZvKGEsaCxpZT0+eyFmLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1u''@;'; put 'put ''KGllKXx8Vy5wdXNoKHRoaXMuaG90LmdldERhdGFBdENlbGwoVCxpZSkpfSksXy5wdXNoKFcpKX0pLF99Z2V0Um93SGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy5vcHRpb25zLnJvd0hlYWRlcnMpe2NvbnN0e3N0YXJ0Um93OmEsZW5kUm93OmR9PXRoaXMuX2dldERhdGFSYW5nZSgpLGg9''@;'; put 'put ''dGhpcy5ob3QuZ2V0Um93SGVhZGVyKCk7dm8oYSxkLGY9PnshdGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KGYpfHxsLnB1c2goaFtmXSl9KX1yZXR1cm4gbH1nZXRDb2x1bW5IZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMuY29sdW1u''@;'; put 'put ''SGVhZGVycyl7Y29uc3R7c3RhcnRDb2w6YSxlbmRDb2w6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKTt2byhhLGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oZil8fGwucHVzaChoW2Zd''@;'; put 'put ''KX0pfXJldHVybiBsfV9nZXREYXRhUmFuZ2UoKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Q29scygpLTEsYT10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldFtkPTAsaD0wLGY9YSxfPWxdPXRoaXMub3B0aW9ucy5yYW5nZTtyZXR1cm4gZD1NYXRoLm1heChkLDApLGg9TWF0aC5tYXgoaCwwKSxm''@;'; put 'put ''PU1hdGgubWluKGYsYSksXz1NYXRoLm1pbihfLGwpLHtzdGFydFJvdzpkLHN0YXJ0Q29sOmgsZW5kUm93OmYsZW5kQ29sOl99fV9pc0hpZGRlblJvdyhsKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl9X2lzSGlkZGVu''@;'; put 'put ''Q29sdW1uKGwpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKX19KHRoaXMuaG90KSxhKX1fY3JlYXRlQmxvYihsKXtsZXQgYT1udWxsO3JldHVybiB0eXBlb2YgQmxvYjwidSImJihhPW5ldyBCbG9iKFtsLmV4''@;'; put 'put ''cG9ydCgpXSx7dHlwZTpgJHtsLm9wdGlvbnMubWltZVR5cGV9O2NoYXJzZXQ9JHtsLm9wdGlvbnMuZW5jb2Rpbmd9YH0pKSxhfX1jbGFzcyBpaWV7Y29uc3RydWN0b3IobCxhKXtsZXR7aWQ6ZCxzdGF0ZWxlc3M6aD0hMH09YTt0aGlzLmhvdD1sLHRoaXMuaWQ9ZCx0aGlzLmVsZW1lbnRzPVtd''@;'; put 'put ''LHRoaXMuaGlkZGVuPSExLHRoaXMuc3RhdGVJZD1gRmlsdGVycy5jb21wb25lbnQuJHt0aGlzLmlkfWAsdGhpcy5zdGF0ZT1oP251bGw6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5zdGF0ZUlkLG5ldyB4ayl9cmVzZXQoKXtJbih0aGlzLmVsZW1lbnRzLGw9''@;'; put 'put ''PmwucmVzZXQoKSl9aGlkZSgpe3RoaXMuaGlkZGVuPSEwfXNob3coKXt0aGlzLmhpZGRlbj0hMX1pc0hpZGRlbigpe3JldHVybiBudWxsPT09dGhpcy5ob3R8fHRoaXMuaGlkZGVufXJlc3RvcmVTdGF0ZShsKXt0aGlzLnN0YXRlJiZ0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGUuZ2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KGwpKX1zZXRTdGF0ZSgpe3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIHNldHRpbmcgbG9naWMgaXMgbm90IGltcGxlbWVudGVkIil9c2F2ZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5nZXRTdGF0ZSgpKX1nZXRTdGF0ZSgp''@;'; put 'put ''e3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIGdhdGhlcmluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQpLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCksSW4odGhpcy5lbGVt''@;'; put 'put ''ZW50cyxsPT5sLmRlc3Ryb3koKSksdGhpcy5zdGF0ZT1udWxsLHRoaXMuZWxlbWVudHM9bnVsbCx0aGlzLmhvdD1udWxsfX1UYShpaWUsTzApO2NvbnN0IF9BPWlpZSxOeT17fTtmdW5jdGlvbiBKcChjLGwpe2lmKCFOeVtjXSl0aHJvdyBFcnJvcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtjfSIg''@;'; put 'put ''ZG9lcyBub3QgZXhpc3QuYCk7Y29uc3R7Y29uZGl0aW9uOmEsZGVzY3JpcHRvcjpkfT1OeVtjXTtsZXQgaD1sO3JldHVybiBkLmlucHV0VmFsdWVzRGVjb3JhdG9yJiYoaD1kLmlucHV0VmFsdWVzRGVjb3JhdG9yKGgpKSxmdW5jdGlvbihmKXtyZXR1cm4gYS5hcHBseShmLm1ldGEuaW5zdGFu''@;'; put 'put ''Y2UsW10uY29uY2F0KFtmXSxbaF0pKX19ZnVuY3Rpb24gT2coYyl7aWYoIU55W2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gTnlbY10uZGVzY3JpcHRvcn1mdW5jdGlvbiBYbChjLGwsYSl7YS5rZXk9YyxOeVtjXT17Y29u''@;'; put 'put ''ZGl0aW9uOmwsZGVzY3JpcHRvcjphfX1jb25zdCBXYz0ibm9uZSI7WGwoV2MsZnVuY3Rpb24gJE9lKCl7cmV0dXJuITB9LHtuYW1lOklrLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMX0pO2NvbnN0IFZ5PSJlbXB0eSI7WGwoVnksZnVuY3Rpb24gcU9lKGMpe3JldHVybiBwYyhjLnZh''@;'; put 'put ''bHVlKX0se25hbWU6bEIsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgYkE9Im5vdF9lbXB0eSI7WGwoYkEsZnVuY3Rpb24gS09lKGMsbCl7cmV0dXJuIUpwKFZ5LGwpKGMpfSx7bmFtZTpjQixpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBCeT0i''@;'; put 'put ''ZXEiO1hsKEJ5LGZ1bmN0aW9uIFhPZShjLGwpe2xldFthXT1sO3JldHVybiBfbChjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKT09PV9sKGEpfSx7bmFtZTp1QixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB5QT0ibmVxIjtYbCh5QSxmdW5j''@;'; put 'put ''dGlvbiBKT2UoYyxsKXtyZXR1cm4hSnAoQnksbCkoYyl9LHtuYW1lOmRCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLFhsKCJndCIsZnVuY3Rpb24gUU9lKGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTAp''@;'; put 'put ''KSxjLnZhbHVlPmR9LHtuYW1lOm1CLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLFhsKCJndGUiLGZ1bmN0aW9uIGVQZShjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZT49ZH0se25hbWU6''@;'; put 'put ''dkIsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksWGwoImx0IixmdW5jdGlvbiB0UGUoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8ZH0se25hbWU6X0IsaW5wdXRzQ291bnQ6MSxzaG93''@;'; put 'put ''T3BlcmF0b3JzOiEwfSksWGwoImx0ZSIsZnVuY3Rpb24gblBlKGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPD1kfSx7bmFtZTpiQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25z''@;'; put 'put ''dCBGaj0iZGF0ZV9hZnRlciI7WGwoRmosZnVuY3Rpb24gclBlKGMsbCl7bGV0W2FdPWw7Y29uc3QgZD1LbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPUtvKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk+PTB9''@;'; put 'put ''LHtuYW1lOkNCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEhqPSJkYXRlX2JlZm9yZSI7WGwoSGosZnVuY3Rpb24gaVBlKGMsbCl7bGV0W2FdPWw7Y29uc3QgZD1LbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPUtvKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3Jl''@;'; put 'put ''dHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk8PTB9LHtuYW1lOlNCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHdBPSJiZXR3ZWVuIjtYbCh3QSxmdW5jdGlvbiBvUGUoYyxsKXtsZXRbYSxkXT1sLGg9YSxmPWQ7aWYoIm51bWVyaWMi''@;'; put 'put ''PT09Yy5tZXRhLnR5cGUpe2NvbnN0IF89cGFyc2VGbG9hdChoLDEwKSxUPXBhcnNlRmxvYXQoZiwxMCk7aD1NYXRoLm1pbihfLFQpLGY9TWF0aC5tYXgoXyxUKX1lbHNlIGlmKCJkYXRlIj09PWMubWV0YS50eXBlKXtjb25zdCBfPUpwKEhqLFtmXSksVD1KcChGaixbaF0pO3JldHVybiBfKGMp''@;'; put 'put ''JiZUKGMpfXJldHVybiBjLnZhbHVlPj1oJiZjLnZhbHVlPD1mfSx7bmFtZTp5QixpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBjaWU9Im5vdF9iZXR3ZWVuIjtYbChjaWUsZnVuY3Rpb24gc1BlKGMsbCl7cmV0dXJuIUpwKHdBLGwpKGMpfSx7bmFtZTp3QixpbnB1dHND''@;'; put 'put ''b3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB1aWU9ImJlZ2luc193aXRoIjtYbCh1aWUsZnVuY3Rpb24gYVBlKGMsbCl7bGV0W2FdPWw7cmV0dXJuIF9sKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLnN0YXJ0c1dpdGgoX2woYSkpfSx7bmFtZTpoQixp''@;'; put 'put ''bnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxYbCgiZW5kc193aXRoIixmdW5jdGlvbiBsUGUoYyxsKXtsZXRbYV09bDtyZXR1cm4gX2woYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuZW5kc1dpdGgoX2woYSkpfSx7bmFtZTpmQixpbnB1dHNDb3VudDox''@;'; put 'put ''LHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBOaj0iY29udGFpbnMiO1hsKE5qLGZ1bmN0aW9uIGNQZShjLGwpe2xldFthXT1sO3JldHVybiBfbChjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5pbmRleE9mKF9sKGEpKT49MH0se25hbWU6cEIsaW5wdXRzQ291bnQ6''@;'; put 'put ''MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgaGllPSJub3RfY29udGFpbnMiO1hsKGhpZSxmdW5jdGlvbiB1UGUoYyxsKXtyZXR1cm4hSnAoTmosbCkoYyl9LHtuYW1lOmdCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGZpZT0iZGF0ZV90b21vcnJvdyI7WGwoZmll''@;'; put 'put ''LGZ1bmN0aW9uIGRQZShjKXtjb25zdCBsPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKEtvKCkuc3VidHJhY3QoLTEsImRheXMiKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTp4QixpbnB1dHNDb3VudDowfSk7Y29uc3QgcGll''@;'; put 'put ''PSJkYXRlX3RvZGF5IjtYbChwaWUsZnVuY3Rpb24gaFBlKGMpe2NvbnN0IGw9S28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoS28oKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTpNQixpbnB1dHNDb3VudDowfSk7Y29uc3QgZ2ll''@;'; put 'put ''PSJkYXRlX3llc3RlcmRheSI7WGwoZ2llLGZ1bmN0aW9uIGZQZShjKXtjb25zdCBsPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKEtvKCkuc3VidHJhY3QoMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOkVCLGlu''@;'; put 'put ''cHV0c0NvdW50OjB9KTtjb25zdCB2aWU9e251bWVyaWM6W1djLGdzLFZ5LGJBLGdzLEJ5LHlBLGdzLCJndCIsImd0ZSIsImx0IiwibHRlIix3QSxjaWVdLHRleHQ6W1djLGdzLFZ5LGJBLGdzLEJ5LHlBLGdzLHVpZSwiZW5kc193aXRoIixncyxOaixoaWVdLGRhdGU6W1djLGdzLFZ5LGJBLGdz''@;'; put 'put ''LEJ5LHlBLGdzLEhqLEZqLHdBLGdzLGZpZSxwaWUsZ2llXX0sVmo9ImJ1aWx0IixCaj0iYnVpbGRpbmciLF9pZT1bImNsaWNrIiwiaW5wdXQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImZvY3VzIiwiYmx1ciIsImNoYW5nZSJdO2NsYXNzIENBe3N0YXRpYyBnZXQgREVGQVVMVFMo''@;'; put 'put ''KXtyZXR1cm4gV3Uoe2NsYXNzTmFtZToiIix2YWx1ZToiIix0YWdOYW1lOiJkaXYiLGNoaWxkcmVuOltdLHdyYXBJdDohMH0pfWNvbnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9bCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5vcHRpb25zPUtsKENBLkRFRkFVTFRTLGEpLHRo''@;'; put 'put ''aXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLndyYXBJdD8iZGl2Ijp0aGlzLm9wdGlvbnMudGFnTmFtZSksdGhpcy5idWlsZFN0YXRlPW51bGx9c2V0VmFsdWUobCl7dGhpcy5vcHRpb25zLnZhbHVlPWwsdGhpcy51cGRhdGUoKX1n''@;'; put 'put ''ZXRWYWx1ZSgpe3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWV9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09Qmo/dGhpcy5fZWxlbWVudDp0aGlzLmJ1aWxkU3RhdGU9PT1Waj8odGhpcy51cGRhdGUoKSx0aGlzLl9lbGVtZW50KToodGhpcy5idWlsZFN0YXRlPUJqLHRo''@;'; put 'put ''aXMuYnVpbGQoKSx0aGlzLmJ1aWxkU3RhdGU9VmosdGhpcy5fZWxlbWVudCl9aXNCdWlsdCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1Wan10cmFuc2xhdGVJZlBvc3NpYmxlKGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbCYmbC5zdGFydHNXaXRoKCR1KT90aGlzLmhvdC5nZXRUcmFu''@;'; put 'put ''c2xhdGVkUGhyYXNlKGwpOmx9YnVpbGQoKXtjb25zdCBsPShhLGQpPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaD0+dGhpcy5ydW5Mb2NhbEhvb2tzKGQsaCx0aGlzKSl9O2lmKHRoaXMuYnVpbGRTdGF0ZXx8KHRoaXMuYnVpbGRTdGF0ZT1CaiksdGhpcy5vcHRp''@;'; put 'put ''b25zLmNsYXNzTmFtZSYmcGkodGhpcy5fZWxlbWVudCx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKSx0aGlzLm9wdGlvbnMuY2hpbGRyZW4ubGVuZ3RoKUluKHRoaXMub3B0aW9ucy5jaGlsZHJlbixhPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEuZWxlbWVudCkpO2Vsc2UgaWYodGhpcy5v''@;'; put 'put ''cHRpb25zLndyYXBJdCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMudGFnTmFtZSk7ZHModGhpcy5vcHRpb25zLChkLGgpPT57dm9pZCAwIT09YVtoXSYmImNsYXNzTmFtZSIhPT1oJiYidGFnTmFtZSIhPT1oJiYiY2hpbGRyZW4iIT09''@;'; put 'put ''aCYmKGFbaF09dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGQpKX0pLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSksSW4oX2llLGQ9PmwoYSxkKSl9ZWxzZSBJbihfaWUsYT0+bCh0aGlzLl9lbGVtZW50LGEpKX11cGRhdGUoKXt9cmVzZXQoKXt0aGlzLm9wdGlvbnMudmFsdWU9IiIsdGhp''@;'; put 'put ''cy51cGRhdGUoKX1zaG93KCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9IiJ9aGlkZSgpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIn1mb2N1cygpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5o''@;'; put 'put ''b3Q9bnVsbCx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGx9fVRhKENBLE8wKTtjb25zdCBRcD1DQSxTQT1uZXcgV2Vha01hcDtjbGFzcyBqaiBleHRlbmRzIFFwe3N0''@;'; put 'put ''YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gV3Uoe3BsYWNlaG9sZGVyOiIiLHR5cGU6InRleHQiLHRhZ05hbWU6ImlucHV0In0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxLbChqai5ERUZBVUxUUyxhKSksU0Euc2V0KHRoaXMse30pLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVy''@;'; put 'put ''SG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygiY2xpY2siLCgpPT50aGlzLm9uQ2xpY2soKSksdGhpcy5hZGRMb2NhbEhvb2soImtleXVwIixsPT50aGlzLm9uS2V5dXAobCkpfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCBsPVNBLmdldCh0aGlzKSxhPXRoaXMuaG90LnJvb3REb2N1bWVu''@;'; put 'put ''dC5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLmlucHV0PXRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCxwaSh0aGlzLl9lbGVtZW50LCJodFVJSW5wdXQiKSxwaShhLCJodFVJSW5wdXRJY29uIiksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2lmKCF0''@;'; put 'put ''aGlzLmlzQnVpbHQoKSlyZXR1cm47Y29uc3QgbD1TQS5nZXQodGhpcykuaW5wdXQ7bC50eXBlPXRoaXMub3B0aW9ucy50eXBlLGwucGxhY2Vob2xkZXI9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlciksbC52YWx1ZT10aGlzLnRyYW5zbGF0ZUlmUG9z''@;'; put 'put ''c2libGUodGhpcy5vcHRpb25zLnZhbHVlKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZTQS5nZXQodGhpcykuaW5wdXQuZm9jdXMoKX1vbkNsaWNrKCl7fW9uS2V5dXAobCl7dGhpcy5vcHRpb25zLnZhbHVlPWwudGFyZ2V0LnZhbHVlfX1jb25zdCBJNz1qaixNQT1uZXcgV2Vha01hcDtjbGFz''@;'; put 'put ''cyB6aiBleHRlbmRzIFFwe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gV3Uoe2NsYXNzTmFtZToiaHRVSVNlbGVjdCIsd3JhcEl0OiExfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEtsKHpqLkRFRkFVTFRTLGEpKSxNQS5zZXQodGhpcyx7fSksdGhpcy5tZW51PW51bGwsdGhpcy5p''@;'; put 'put ''dGVtcz1bXSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImNsaWNrIiwoKT0+dGhpcy5vbkNsaWNrKCkpfXNldEl0ZW1zKGwpe3RoaXMuaXRlbXM9dGhpcy50cmFuc2xhdGVOYW1lcyhsKSx0aGlzLm1lbnUmJnRoaXMubWVudS5zZXRNZW51''@;'; put 'put ''SXRlbXModGhpcy5pdGVtcyl9dHJhbnNsYXRlTmFtZXMobCl7cmV0dXJuIEluKGwsYT0+e2EubmFtZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoYS5uYW1lKX0pLGx9YnVpbGQoKXtzdXBlci5idWlsZCgpLHRoaXMubWVudT1uZXcgeWoodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRTZWxlY3RV''@;'; put 'put ''SSBodEZpbHRlcnNDb25kaXRpb25zTWVudSIsa2VlcEluVmlld3BvcnQ6ITEsc3RhbmRhbG9uZTohMCxjb250YWluZXI6dGhpcy5vcHRpb25zLm1lbnVDb250YWluZXJ9KSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKHRoaXMuaXRlbXMpO2NvbnN0IGw9bmV3IFFwKHRoaXMuaG90LHtjbGFzc05h''@;'; put 'put ''bWU6Imh0VUlTZWxlY3RDYXB0aW9uIn0pLGE9bmV3IFFwKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3REcm9wZG93biJ9KSxkPU1BLmdldCh0aGlzKTtkLmNhcHRpb249bCxkLmNhcHRpb25FbGVtZW50PWwuZWxlbWVudCxkLmRyb3Bkb3duPWEsSW4oW2wsYV0saD0+dGhpcy5fZWxl''@;'; put 'put ''bWVudC5hcHBlbmRDaGlsZChoLmVsZW1lbnQpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJzZWxlY3QiLGg9PnRoaXMub25NZW51U2VsZWN0KGgpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5vbk1lbnVDbG9zZWQoKSksdGhpcy51cGRhdGUoKX11cGRh''@;'; put 'put ''dGUoKXtpZighdGhpcy5pc0J1aWx0KCkpcmV0dXJuO2xldCBsO2w9dGhpcy5vcHRpb25zLnZhbHVlP3RoaXMub3B0aW9ucy52YWx1ZS5uYW1lOnRoaXMubWVudS5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShJayksTUEuZ2V0KHRoaXMpLmNhcHRpb25FbGVtZW50LnRleHRDb250ZW50PWwsc3Vw''@;'; put 'put ''ZXIudXBkYXRlKCl9b3Blbk9wdGlvbnMoKXtjb25zdCBsPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm1lbnUmJih0aGlzLm1lbnUub3BlbigpLHRoaXMubWVudS5zZXRQb3NpdGlvbih7bGVmdDp0aGlzLmhvdC5pc0x0cigpP2wubGVmdC01OmwubGVmdC0zMSx0''@;'; put 'put ''b3A6bC50b3AtMSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH0pKX1jbG9zZU9wdGlvbnMoKXt0aGlzLm1lbnUmJnRoaXMubWVudS5jbG9zZSgpfW9uTWVudVNlbGVjdChsKXtsLm5hbWUhPT1ncyYmKHRoaXMub3B0aW9ucy52YWx1ZT1sLHRoaXMudXBkYXRlKCksdGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJzZWxlY3QiLHRoaXMub3B0aW9ucy52YWx1ZSkpfW9uTWVudUNsb3NlZCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpfW9uQ2xpY2soKXt0aGlzLm9wZW5PcHRpb25zKCl9ZGVzdHJveSgpe3RoaXMubWVudSYmKHRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51''@;'; put 'put ''PW51bGwpO2NvbnN0e2NhcHRpb246bCxkcm9wZG93bjphfT1NQS5nZXQodGhpcyk7bCYmbC5kZXN0cm95KCksYSYmYS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBiaWU9emosVWo9Y2xhc3MgdlBlIGV4dGVuZHMgX0F7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlk''@;'; put 'put ''LHN0YXRlbGVzczohMX0pLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5hZGRTZXBhcmF0b3I9YS5hZGRTZXBhcmF0b3IsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBiaWUodGhpcy5ob3Qse21lbnVDb250YWluZXI6YS5tZW51Q29udGFpbmVyfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgSTcodGhp''@;'; put 'put ''cy5ob3Qse3BsYWNlaG9sZGVyOlBCfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgSTcodGhpcy5ob3Qse3BsYWNlaG9sZGVyOkZCfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soInNlbGVjdCIsbD0+''@;'; put 'put ''dGhpcy5vbkNvbmRpdGlvblNlbGVjdChsKSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5vblNlbGVjdFVJQ2xvc2VkKCkpLEluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGw9PntsLmFkZExvY2FsSG9vaygia2V5ZG93biIsYT0+''@;'; put 'put ''dGhpcy5vbklucHV0S2V5RG93bihhKSl9KX1zZXRTdGF0ZShsKXtpZih0aGlzLnJlc2V0KCksIWwpcmV0dXJuO2NvbnN0IGE9V3UobC5jb21tYW5kKTthLm5hbWUuc3RhcnRzV2l0aCh5bCkmJihhLm5hbWU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShhLm5hbWUpKSx0aGlzLmdldFNl''@;'; put 'put ''bGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShhKSxJbihsLmFyZ3MsKGQsaCk9PntpZihoPmEuaW5wdXRzQ291bnQtMSlyZXR1cm4hMTtjb25zdCBmPXRoaXMuZ2V0SW5wdXRFbGVtZW50KGgpO2Yuc2V0VmFsdWUoZCksZlthLmlucHV0c0NvdW50Pmg/InNob3ciOiJoaWRlIl0oKSxofHxzZXRUaW1l''@;'; put 'put ''b3V0KCgpPT5mLmZvY3VzKCksMTApfSl9Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmdldFZhbHVlKCl8fE9nKFdjKSxhPVtdO3JldHVybiBJbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwoZCxoKT0+e2wuaW5wdXRzQ291bnQ+aCYmYS5wdXNoKGQuZ2V0VmFs''@;'; put 'put ''dWUoKSl9KSx7Y29tbWFuZDpsLGFyZ3M6YX19dXBkYXRlU3RhdGUobCxhKXtjb25zdCBkPU9nKGw/bC5uYW1lOldjKTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhLHtjb21tYW5kOmQsYXJnczpsP2wuYXJnczpbXX0pLGx8fEluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGg9Pmguc2V0''@;'; put 'put ''VmFsdWUobnVsbCkpfWdldFNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIGJpZSlbMF19Z2V0SW5wdXRFbGVtZW50KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7''@;'; put 'put ''cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpW2xdfWdldElucHV0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIEk3KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21t''@;'; put 'put ''YW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZixfKT0+e3BpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiIpLHRoaXMuYWRkU2VwYXJhdG9yJiZwaShhLnBhcmVudE5vZGUsImJvcmRlciIp''@;'; put 'put ''O2NvbnN0IFQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBwaShULCJodEZpbHRlcnNNZW51TGFiZWwiKSxULnRleHRDb250ZW50PV8sYS5hcHBlbmRDaGlsZChUKSxhLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxJbih0''@;'; put 'put ''aGlzLmVsZW1lbnRzLFc9PmEuYXBwZW5kQ2hpbGQoVy5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO2xldCBhPVtPZyhXYyldO2lmKG51bGwhPT1sKXtjb25zdHt2aXN1YWxJbmRleDpkfT1sO2E9''@;'; put 'put ''ZnVuY3Rpb24gbVBlKGMpe2NvbnN0IGw9W107bGV0IGE9YztyZXR1cm4gdmllW2FdfHwoYT0idGV4dCIpLEluKHZpZVthXSxkPT57bGV0IGg7aD1kPT09Z3M/e25hbWU6Z3N9Old1KE9nKGQpKSxsLnB1c2goaCl9KSxsfSh0aGlzLmhvdC5nZXREYXRhVHlwZSgwLGQsdGhpcy5ob3QuY291bnRS''@;'; put 'put ''b3dzKCksZCkpfUluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGQ9PmQuaGlkZSgpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyhhKSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGFbMF0pfW9uQ29uZGl0aW9uU2VsZWN0KGwpe0luKHRo''@;'; put 'put ''aXMuZ2V0SW5wdXRFbGVtZW50cygpLChhLGQpPT57YVtsLmlucHV0c0NvdW50PmQ/InNob3ciOiJoaWRlIl0oKSwwPT09ZCYmc2V0VGltZW91dCgoKT0+YS5mb2N1cygpLDEwKX0pLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsKX1vblNlbGVjdFVJQ2xvc2VkKCl7dGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJhZnRlckNsb3NlIil9b25JbnB1dEtleURvd24obCl7bzcobC5rZXlDb2RlLCJFTlRFUiIpPyh0aGlzLnJ1bkxvY2FsSG9va3MoImFjY2VwdCIpLHYyKGwpKTpvNyhsLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSx2MihsKSl9fSxqeT17''@;'; put 'put ''fTtmdW5jdGlvbiBiUGUoYyl7cmV0dXJuIGp5W2NdLm5hbWV9ZnVuY3Rpb24gWmooYyxsLGEpe2p5W2NdPXtuYW1lOmwsZnVuYzphfX1jb25zdCBlND0iY29uanVuY3Rpb24iO1pqKGU0LFRCLGZ1bmN0aW9uIHdQZShjLGwpe3JldHVybiBjLmV2ZXJ5KGE9PmEuZnVuYyhsKSl9KTtjb25zdCB4''@;'; put 'put ''QT0iZGlzanVuY3Rpb24iO1pqKHhBLExrLGZ1bmN0aW9uIFNQZShjLGwpe3JldHVybiBjLnNvbWUoYT0+YS5mdW5jKGwpKX0pO2NvbnN0IFlqPSJkaXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvbiI7WmooWWosTGssZnVuY3Rpb24geFBlKGMsbCl7aWYoYy5sZW5ndGg8Myl0aHJvdyBFcnJv''@;'; put 'put ''cigiT3BlcmF0aW9uIGRvZXNuJ3Qgd29yayBvbiBsZXNzIHRoZW4gdGhyZWUgY29uZGl0aW9ucy4iKTtyZXR1cm4gYy5zbGljZSgwLGMubGVuZ3RoLTEpLnNvbWUoYT0+YS5mdW5jKGwpKSYmY1tjLmxlbmd0aC0xXS5mdW5jKGwpfSk7Y29uc3QgRUE9bmV3IFdlYWtNYXA7Y2xhc3MgV2ogZXh0''@;'; put 'put ''ZW5kcyBRcHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIFd1KHt0eXBlOiJyYWRpbyIsdGFnTmFtZToiaW5wdXQiLGNsYXNzTmFtZToiaHRVSVJhZGlvIixsYWJlbDp7fX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxLbChXai5ERUZBVUxUUyxhKSksRUEuc2V0KHRoaXMse30pfWJ1''@;'; put 'put ''aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCBsPUVBLmdldCh0aGlzKTtsLmlucHV0PXRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZDtjb25zdCBhPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO2EudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxl''@;'; put 'put ''KHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCksYS5odG1sRm9yPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwuaHRtbEZvciksbC5sYWJlbD1hLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSksdGhpcy51cGRhdGUoKX11cGRhdGUoKXtpZighdGhp''@;'; put 'put ''cy5pc0J1aWx0KCkpcmV0dXJuO2NvbnN0IGw9RUEuZ2V0KHRoaXMpO2wuaW5wdXQuY2hlY2tlZD10aGlzLm9wdGlvbnMuY2hlY2tlZCxsLmxhYmVsLnRleHRDb250ZW50PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpfWlzQ2hlY2tlZCgp''@;'; put 'put ''e3JldHVybiB0aGlzLm9wdGlvbnMuY2hlY2tlZH1zZXRDaGVja2VkKCl7dGhpcy5vcHRpb25zLmNoZWNrZWQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSx0aGlzLnVwZGF0ZSgpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJkVBLmdl''@;'; put 'put ''dCh0aGlzKS5pbnB1dC5mb2N1cygpfX1jb25zdCB5aWU9V2osa1BlPWNsYXNzIEVQZSBleHRlbmRzIF9Be2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuYnVpbGRPcGVyYXRvcnNFbGVtZW50KCl9Z2V0TWVudUl0''@;'; put 'put ''ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4ocGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51T3BlcmF0b3Jz''@;'; put 'put ''IiksYS5wYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8SW4odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1idWlsZE9wZXJhdG9yc0VsZW1lbnQoKXtjb25zdCBsPVtlNCx4QV07SW4obCxhPT57Y29uc3QgZD1uZXcgeWllKHRoaXMu''@;'; put 'put ''aG90LHtuYW1lOiJvcGVyYXRvciIsbGFiZWw6e2h0bWxGb3I6YSx0ZXh0Q29udGVudDpiUGUoYSl9LHZhbHVlOmEsY2hlY2tlZDphPT09bFswXSxpZDphfSk7ZC5hZGRMb2NhbEhvb2soImNoYW5nZSIsaD0+dGhpcy5vblJhZGlvSW5wdXRDaGFuZ2UoaCkpLHRoaXMuZWxlbWVudHMucHVzaChk''@;'; put 'put ''KX0pfXNldENoZWNrZWQobCl7aWYodGhpcy5lbGVtZW50cy5sZW5ndGg8bCl0aHJvdyBFcnJvcihBYWBSYWRpbyBidXR0b24gd2l0aCBpbmRleCAke2x9IGRvZXNuJ3QgZXhpc3QuYCk7SW4odGhpcy5lbGVtZW50cywoYSxkKT0+e2Euc2V0Q2hlY2tlZChkPT09bCl9KX1nZXRBY3RpdmVPcGVy''@;'; put 'put ''YXRpb25JZCgpe2NvbnN0IGw9dGhpcy5lbGVtZW50cy5maW5kKGE9PmEgaW5zdGFuY2VvZiB5aWUmJmEuaXNDaGVja2VkKCkpO3JldHVybiBsP2wuZ2V0VmFsdWUoKTplNH1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCl9c2V0U3RhdGUobCl7dGhpcy5yZXNl''@;'; put 'put ''dCgpLGwmJnRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKSE9PWwmJkluKHRoaXMuZWxlbWVudHMsYT0+e2Euc2V0Q2hlY2tlZChhLmdldFZhbHVlKCk9PT1sKX0pfXVwZGF0ZVN0YXRlKCl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz''@;'; put 'put ''WzBdOmU0O2Q9PT1ZaiYmKGQ9eEEpLHRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGQpfXJlc2V0KCl7dGhpcy5zZXRDaGVja2VkKDApfW9uUmFkaW9JbnB1dENoYW5nZShsKXt0aGlzLnNldFN0YXRlKGwudGFyZ2V0LnZh''@;'; put 'put ''bHVlKX19O2Z1bmN0aW9uIFRQZShjLGwpe2xldCBhPWM7cmV0dXJuIiI9PT1hJiYoYT1gKCR7bH0pYCksYX1OdGUoKTtjb25zdCBHaj1uZXcgU2V0KFsxXSkuaGFzKDEpLERQZT1HaiYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5LmZyb207ZnVuY3Rpb24genkoYyl7bGV0IGw9YztyZXR1cm4g''@;'; put 'put ''R2omJihsPW5ldyBTZXQobCkpLGZ1bmN0aW9uKGEpe2xldCBkO3JldHVybiBkPUdqP2wuaGFzKGEpOiEhfmwuaW5kZXhPZihhKSxkfX1mdW5jdGlvbiBDaWUoYyl7cmV0dXJuIGM/PyIifWZ1bmN0aW9uICRqKGMpe2xldCBsPWM7cmV0dXJuIGw9RFBlP0FycmF5LmZyb20obmV3IFNldChsKSk6''@;'; put 'put ''ck4obCksbD1sLnNvcnQoKGEsZCk9PiJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBkP2EtZDphPT09ZD8wOmE+ZD8xOi0xKSxsfWZ1bmN0aW9uIFNpZShjLGwsYSxkKXtjb25zdCBoPVtdLGY9Yz09PWw7bGV0IF87cmV0dXJuIGZ8fChfPXp5KGwpKSxJbihjLFQ9PntsZXQg''@;'; put 'put ''Vz0hMTsoZnx8XyhUKSkmJihXPSEwKTtjb25zdCBpZT17Y2hlY2tlZDpXLHZhbHVlOlQsdmlzdWFsVmFsdWU6VFBlKFQsYSl9O2QmJmQoaWUpLGgucHVzaChpZSl9KSxofWNvbnN0IHFqPW5ldyBXZWFrTWFwO2NsYXNzIEtqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVy''@;'; put 'put ''biBXdSh7aHJlZjoiIyIsdGFnTmFtZToiYSJ9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsS2woS2ouREVGQVVMVFMsYSkpLHFqLnNldCh0aGlzLHt9KX1idWlsZCgpe3N1cGVyLmJ1aWxkKCkscWouZ2V0KHRoaXMpLmxpbms9dGhpcy5fZWxlbWVudC5maXJzdENoaWxkfXVwZGF0ZSgpe3Ro''@;'; put 'put ''aXMuaXNCdWlsdCgpJiYocWouZ2V0KHRoaXMpLmxpbmsudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy50ZXh0Q29udGVudCkpfX1jb25zdCBNaWU9S2osSVBlPW5ldyBXZWFrTWFwO2NsYXNzIFhqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBERUZBVUxU''@;'; put 'put ''Uygpe3JldHVybiBXdSh7Y2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3QiLHZhbHVlOltdfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEtsKFhqLkRFRkFVTFRTLGEpKSxJUGUuc2V0KHRoaXMse30pLHRoaXMuc2VhcmNoSW5wdXQ9bmV3IEk3KHRoaXMuaG90LHtwbGFjZWhvbGRlcjpP''@;'; put 'put ''QixjbGFzc05hbWU6Imh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCJ9KSx0aGlzLnNlbGVjdEFsbFVJPW5ldyBNaWUodGhpcy5ob3Qse3RleHRDb250ZW50OkRCLGNsYXNzTmFtZToiaHRVSVNlbGVjdEFsbCJ9KSx0aGlzLmNsZWFyQWxsVUk9bmV3IE1pZSh0aGlzLmhvdCx7dGV4dENvbnRlbnQ6''@;'; put 'put ''SUIsY2xhc3NOYW1lOiJodFVJQ2xlYXJBbGwifSksdGhpcy5pdGVtcz1bXSx0aGlzLml0ZW1zQm94PW51bGwsdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuc2VhcmNoSW5wdXQuYWRkTG9jYWxIb29rKCJrZXlkb3duIixsPT50aGlzLm9uSW5wdXRLZXlEb3duKGwp''@;'; put 'put ''KSx0aGlzLnNlYXJjaElucHV0LmFkZExvY2FsSG9vaygiaW5wdXQiLGw9PnRoaXMub25JbnB1dChsKSksdGhpcy5zZWxlY3RBbGxVSS5hZGRMb2NhbEhvb2soImNsaWNrIixsPT50aGlzLm9uU2VsZWN0QWxsQ2xpY2sobCkpLHRoaXMuY2xlYXJBbGxVSS5hZGRMb2NhbEhvb2soImNsaWNrIixs''@;'; put 'put ''PT50aGlzLm9uQ2xlYXJBbGxDbGljayhsKSl9c2V0SXRlbXMobCl7dGhpcy5pdGVtcz1sLHRoaXMuaXRlbXNCb3gmJnRoaXMuaXRlbXNCb3gubG9hZERhdGEodGhpcy5pdGVtcyl9c2V0TG9jYWxlKGwpe3RoaXMubG9jYWxlPWx9Z2V0TG9jYWxlKCl7cmV0dXJuIHRoaXMubG9jYWxlfWdldEl0''@;'; put 'put ''ZW1zKCl7cmV0dXJuWy4uLnRoaXMuaXRlbXNdfWdldFZhbHVlKCl7cmV0dXJuIGZ1bmN0aW9uIE9QZShjKXtjb25zdCBsPVtdO3JldHVybiBJbihjLGE9PnthLmNoZWNrZWQmJmwucHVzaChhLnZhbHVlKX0pLGx9KHRoaXMuaXRlbXMpfWlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pdGVtcy5sZW5ndGg9PT10aGlzLmdldFZhbHVlKCkubGVuZ3RofWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9bmV3IFFwKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3Rpb25Db250''@;'; put 'put ''cm9scyIsY2hpbGRyZW46W3RoaXMuc2VsZWN0QWxsVUksdGhpcy5jbGVhckFsbFVJXX0pO3RoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZWFyY2hJbnB1dC5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGQuZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGls''@;'; put 'put ''ZChhKTtjb25zdCBoPWY9Pnt0aGlzLl9lbGVtZW50JiYodGhpcy5pdGVtc0JveCYmdGhpcy5pdGVtc0JveC5kZXN0cm95KCkscGkoZiwiaHRVSU11bHRpcGxlU2VsZWN0SG90IiksdGhpcy5pdGVtc0JveD1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IoZix7ZGF0YTp0aGlzLml0ZW1zLGNvbHVt''@;'; put 'put ''bnM6W3tkYXRhOiJjaGVja2VkIix0eXBlOiJjaGVja2JveCIsbGFiZWw6e3Byb3BlcnR5OiJ2aXN1YWxWYWx1ZSIscG9zaXRpb246ImFmdGVyIn19XSxiZWZvcmVSZW5kZXJlcjooVyxpZSxnZSx3ZSxFZSxaZSk9PntXLnRpdGxlPVplLmluc3RhbmNlLmdldERhdGFBdFJvd1Byb3AoaWUsWmUu''@;'; put 'put ''bGFiZWwucHJvcGVydHkpfSxtYXhDb2xzOjEsYXV0b1dyYXBDb2w6ITAsaGVpZ2h0OjExMCxjb2xXaWR0aHM6KCk9PnRoaXMuaXRlbXNCb3guY29udGFpbmVyLnNjcm9sbFdpZHRoLUljKGwpLGNvcHlQYXN0ZTohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixmaWxsSGFuZGxlOiEx''@;'; put 'put ''LGZyYWdtZW50U2VsZWN0aW9uOiJjZWxsIix0YWJNb3Zlczp7cm93OjEsY29sOjB9LGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIifSksdGhpcy5pdGVtc0JveC5pbml0KCksdGhpcy5pdGVtc0JveC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJn''@;'; put 'put ''cmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOlc9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLFcsdGhpcyl9LGdyb3VwOiJtdWx0aXBsZVNlbGVjdC5pdGVtQm94In0pKX07aChhKSxzZXRUaW1lb3V0KCgpPT5oKGEpLDEwMCl9cmVzZXQoKXt0aGlz''@;'; put 'put ''LnNlYXJjaElucHV0LnJlc2V0KCksdGhpcy5zZWxlY3RBbGxVSS5yZXNldCgpLHRoaXMuY2xlYXJBbGxVSS5yZXNldCgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYodGhpcy5pdGVtc0JveC5sb2FkRGF0YShmdW5jdGlvbiBSUGUoYyxsKXtjb25zdCBhPXp5KGwpO3JldHVybiBjcyhjLGQ9''@;'; put 'put ''PihkLmNoZWNrZWQ9YShkLnZhbHVlKSxkKSl9KHRoaXMuaXRlbXMsdGhpcy5vcHRpb25zLnZhbHVlKSksc3VwZXIudXBkYXRlKCkpfWRlc3Ryb3koKXt0aGlzLml0ZW1zQm94JiZ0aGlzLml0ZW1zQm94LmRlc3Ryb3koKSx0aGlzLnNlYXJjaElucHV0LmRlc3Ryb3koKSx0aGlzLmNsZWFyQWxs''@;'; put 'put ''VUkuZGVzdHJveSgpLHRoaXMuc2VsZWN0QWxsVUkuZGVzdHJveSgpLHRoaXMuc2VhcmNoSW5wdXQ9bnVsbCx0aGlzLmNsZWFyQWxsVUk9bnVsbCx0aGlzLnNlbGVjdEFsbFVJPW51bGwsdGhpcy5pdGVtc0JveD1udWxsLHRoaXMuaXRlbXM9bnVsbCxzdXBlci5kZXN0cm95KCl9b25JbnB1dChs''@;'; put 'put ''KXtjb25zdCBhPWwudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZ2V0TG9jYWxlKCkpO2xldCBkO2Q9IiI9PT1hP1suLi50aGlzLml0ZW1zXTpfMSh0aGlzLml0ZW1zLGg9PmAke2gudmFsdWV9YC50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKS5pbmRleE9m''@;'; put 'put ''KGEpPj0wKSx0aGlzLml0ZW1zQm94LmxvYWREYXRhKGQpfW9uSW5wdXRLZXlEb3duKGwpe3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsbCx0aGlzKSx2TihvNyxsLmtleUNvZGUpKCJBUlJPV19ET1dOfFRBQiIpJiYhdGhpcy5pdGVtc0JveC5pc0xpc3RlbmluZygpJiYodjIobCksdGhp''@;'; put 'put ''cy5pdGVtc0JveC5saXN0ZW4oKSx0aGlzLml0ZW1zQm94LnNlbGVjdENlbGwoMCwwKSl9b25TZWxlY3RBbGxDbGljayhsKXtjb25zdCBhPVtdO2wucHJldmVudERlZmF1bHQoKSxJbih0aGlzLml0ZW1zQm94LmdldFNvdXJjZURhdGEoKSwoZCxoKT0+e2QuY2hlY2tlZD0hMCxhLnB1c2goYVYo''@;'; put 'put ''ZCxoKVswXSl9KSx0aGlzLml0ZW1zQm94LnNldFNvdXJjZURhdGFBdENlbGwoYSl9b25DbGVhckFsbENsaWNrKGwpe2NvbnN0IGE9W107bC5wcmV2ZW50RGVmYXVsdCgpLEluKHRoaXMuaXRlbXNCb3guZ2V0U291cmNlRGF0YSgpLChkLGgpPT57ZC5jaGVja2VkPSExLGEucHVzaChhVihkLGgp''@;'; put 'put ''WzBdKX0pLHRoaXMuaXRlbXNCb3guc2V0U291cmNlRGF0YUF0Q2VsbChhKX19Y29uc3QgeGllPVhqLFBnPSJieV92YWx1ZSI7WGwoUGcsZnVuY3Rpb24gUFBlKGMsbCl7bGV0W2FdPWw7cmV0dXJuIGEoYy52YWx1ZSl9LHtuYW1lOiJCeSB2YWx1ZSIsaW5wdXRzQ291bnQ6MCxpbnB1dFZhbHVl''@;'; put 'put ''c0RlY29yYXRvcihjKXtsZXRbbF09YztyZXR1cm5benkobCldfSxzaG93T3BlcmF0b3JzOiExfSk7Y29uc3QgSFBlPWNsYXNzIEZQZSBleHRlbmRzIF9Be2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVu''@;'; put 'put ''dHMucHVzaChuZXcgeGllKHRoaXMuaG90KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJrZXlkb3duIixsPT50aGlzLm9uSW5wdXRLZXlEb3duKGwpKX1zZXRTdGF0ZShsKXtpZih0aGlz''@;'; put 'put ''LnJlc2V0KCksbCYmbC5jb21tYW5kLmtleT09PVBnKXtjb25zdCBhPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7YS5zZXRJdGVtcyhsLml0ZW1zU25hcHNob3QpLGEuc2V0VmFsdWUobC5hcmdzWzBdKSxhLnNldExvY2FsZShsLmxvY2FsZSl9fWdldFN0YXRlKCl7Y29uc3QgbD10''@;'; put 'put ''aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLGE9bC5nZXRJdGVtcygpO3JldHVybntjb21tYW5kOntrZXk6bC5pc1NlbGVjdGVkQWxsVmFsdWVzKCl8fCFhLmxlbmd0aD9XYzpQZ30sYXJnczpbbC5nZXRWYWx1ZSgpXSxpdGVtc1NuYXBzaG90OmF9fXVwZGF0ZVN0YXRlKGwpe2NvbnN0''@;'; put 'put ''IGE9KGQsaCxmLF8sVCk9Pntjb25zdFtXXT1fMShoLHdlPT53ZS5uYW1lPT09UGcpLGllPXt9LGdlPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoUmspO2lmKFcpe2NvbnN0IHdlPSRqKGNzKF8oZCxUKSxldD0+ZXQudmFsdWUpKTtmJiYoVy5hcmdzWzBdPWYpO2NvbnN0IEVlPVtdLFpl''@;'; put 'put ''PVNpZSh3ZSxXLmFyZ3NbMF0sZ2UsZXQ9PntldC5jaGVja2VkJiZFZS5wdXNoKGV0LnZhbHVlKX0pO2llLmxvY2FsZT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uKS5sb2NhbGUsaWUuYXJncz1bRWVdLGllLmNvbW1hbmQ9T2coUGcpLGllLml0''@;'; put 'put ''ZW1zU25hcHNob3Q9WmV9ZWxzZSBpZS5hcmdzPVtdLGllLmNvbW1hbmQ9T2coV2MpO3RoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGQsaWUpfTthKGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3ND''@;'; put 'put ''aGFuZ2UsbC5maWx0ZXJlZFJvd3NGYWN0b3J5KSxsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrcy5sZW5ndGgmJmEobC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29sdW1uLGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdl''@;'; put 'put ''LGwuZmlsdGVyZWRSb3dzRmFjdG9yeSxsLmVkaXRlZENvbmRpdGlvblN0YWNrKX1nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIHhpZSlbMF19Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlz''@;'; put 'put ''LmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEsZCxoLGYsXyk9PntwaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVWYWx1ZSIpO2NvbnN0IFQ9dGhpcy5ob3Qucm9vdERv''@;'; put 'put ''Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBwaShULCJodEZpbHRlcnNNZW51TGFiZWwiKSxULnRleHRDb250ZW50PV8sYS5hcHBlbmRDaGlsZChUKSxhLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxJbih0aGlzLmVsZW1lbnRzLFc9PmEuYXBwZW5k''@;'; put 'put ''Q2hpbGQoVy5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFJrKSxhPSRqKHRoaXMuX2dldENvbHVtblZpc2libGVWYWx1ZXMoKSksZD1TaWUoYSxhLGwpO3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXMoZCks''@;'; put 'put ''c3VwZXIucmVzZXQoKSx0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGEpO2NvbnN0IGg9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtudWxsIT09aCYmdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRMb2Nh''@;'; put 'put ''bGUodGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxoLnZpc3VhbEluZGV4KS5sb2NhbGUpfW9uSW5wdXRLZXlEb3duKGwpe283KGwua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLHYyKGwpKX1fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpe2NvbnN0IGw9dGhp''@;'; put 'put ''cy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtyZXR1cm4gbnVsbD09PWw/W106Y3ModGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwudmlzdWFsSW5kZXgpLGE9PkNpZShhKSl9fTtjbGFzcyBVeSBleHRlbmRzIF9Be3N0YXRpYyBnZXQgQlVUVE9OX09LKCl7cmV0''@;'; put 'put ''dXJuIm9rIn1zdGF0aWMgZ2V0IEJVVFRPTl9DQU5DRUwoKXtyZXR1cm4iY2FuY2VsIn1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiEwfSksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IEk3KHRoaXMuaG90LHt0eXBlOiJidXR0b24i''@;'; put 'put ''LHZhbHVlOkxCLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uT0siLGlkZW50aWZpZXI6VXkuQlVUVE9OX09LfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgSTcodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6UkIsY2xhc3NOYW1lOiJodFVJQnV0dG9uIGh0VUlCdXR0b25D''@;'; put 'put ''YW5jZWwiLGlkZW50aWZpZXI6VXkuQlVUVE9OX0NBTkNFTH0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7SW4odGhpcy5lbGVtZW50cyxsPT57bC5hZGRMb2NhbEhvb2soImNsaWNrIiwoYSxkKT0+dGhpcy5vbkJ1dHRvbkNsaWNrKGEsZCkpfSl9Z2V0TWVudUl0ZW1E''@;'; put 'put ''ZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4ocGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51QWN0aW9uQmFyIiks''@;'; put 'put ''YS5wYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8SW4odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1hY2NlcHQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFjY2VwdCIpfWNhbmNlbCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2FuY2Vs''@;'; put 'put ''Iil9b25CdXR0b25DbGljayhsLGEpe2Eub3B0aW9ucy5pZGVudGlmaWVyPT09VXkuQlVUVE9OX09LP3RoaXMuYWNjZXB0KCk6dGhpcy5jYW5jZWwoKX19Y29uc3QgTlBlPVV5LEVpZT0iQ29uZGl0aW9uQ29sbGVjdGlvbi5maWx0ZXJpbmdTdGF0ZXMiO2NsYXNzIGtpZXtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''KXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3RoaXMuaG90PWwsdGhpcy5pc01hcFJlZ2lzdHJhYmxlPWEsdGhpcy5maWx0ZXJpbmdTdGF0ZXM9bmV3IHhrLCEwPT09dGhpcy5pc01hcFJlZ2lzdHJhYmxlP3RoaXMuaG90''@;'; put 'put ''LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKEVpZSx0aGlzLmZpbHRlcmluZ1N0YXRlcyk6dGhpcy5maWx0ZXJpbmdTdGF0ZXMuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5nZXRGaWx0''@;'; put 'put ''ZXJlZENvbHVtbnMoKS5sZW5ndGh9aXNNYXRjaChsLGEpe3ZhciBkO2NvbnN0IGg9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGEpLGY9bnVsbCE9PShkPWg/LmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1kP2Q6W10sXz1oPy5vcGVyYXRpb247cmV0dXJuIHRoaXMuaXNNYXRj''@;'; put 'put ''aEluQ29uZGl0aW9ucyhmLGwsXyl9aXNNYXRjaEluQ29uZGl0aW9ucyhsLGEpe3JldHVybiFsLmxlbmd0aHx8ZnVuY3Rpb24gX1BlKGMpe2lmKCFqeVtjXSl0aHJvdyBFcnJvcihgT3BlcmF0aW9uIHdpdGggaWQgIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO2NvbnN0IGw9anlbY10uZnVuYzty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbChhLGQpfX0oYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmU0KShsLGEpfWFkZENvbmRpdGlvbihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJd''@;'; put 'put ''P2FyZ3VtZW50c1syXTplNCxoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2NvbnN0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKS5sb2NhbGUsXz1jcyhhLmFyZ3MsZ2U9PiJzdHJpbmciPT10eXBlb2YgZ2U/Z2UudG9Mb2NhbGVMb3dlckNhc2UoZik6Z2UpLFQ9''@;'; put 'put ''YS5uYW1lfHxhLmNvbW1hbmQua2V5O3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQWRkIixsKTtjb25zdCBXPXRoaXMuZ2V0T3BlcmF0aW9uKGwpO2lmKFcpe2lmKFchPT1kKXRocm93IEVycm9yKEFhYFRoZSBjb2x1bW4gb2YgaW5kZXggJHtsfSBoYXMgYmVlbiBhbHJlYWR5IGFwcGxpZWQg''@;'; put 'put ''d2l0aCBhIFxgJHtXfVxgXHgyMAogICAgICAgIGZpbHRlciBvcGVyYXRpb24uIFVzZSBcYHJlbW92ZUNvbmRpdGlvbnNcYCB0byBjbGVhciB0aGUgY3VycmVudCBjb25kaXRpb25zIGFuZCB0aGVuIGFkZCBuZXcgb25lcy5ceDIwCiAgICAgICAgTWluZCB0aGF0IHlvdSBjYW5ub3QgbWl4IGRp''@;'; put 'put ''ZmZlcmVudCB0eXBlcyBvZiBvcGVyYXRpb25zIChmb3IgaW5zdGFuY2UsIGlmIHlvdSB1c2UgXGBjb25qdW5jdGlvblxgLFx4MjAKICAgICAgICB1c2UgaXQgY29uc2VxdWVudGx5IGZvciBhIHBhcnRpY3VsYXIgY29sdW1uKS5gKX1lbHNlIGlmKExhKGp5W2RdKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''QWFgVW5leHBlY3RlZCBvcGVyYXRpb24gbmFtZWQgXGAke2R9XGAuIFBvc3NpYmxlIG9uZXMgYXJlXHgyMAogICAgICAgIFxgZGlzanVuY3Rpb25cYCBhbmQgXGBjb25qdW5jdGlvblxgLmApO2NvbnN0IGllPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTswPT09aWUubGVuZ3RoP3RoaXMuZmlsdGVy''@;'; put 'put ''aW5nU3RhdGVzLnNldFZhbHVlQXRJbmRleChsLHtvcGVyYXRpb246ZCxjb25kaXRpb25zOlt7bmFtZTpULGFyZ3M6XyxmdW5jOkpwKFQsXyl9XX0saCk6aWUucHVzaCh7bmFtZTpULGFyZ3M6XyxmdW5jOkpwKFQsXyl9KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQWRkIixsKX1nZXRDb25k''@;'; put 'put ''aXRpb25zKGwpe3ZhciBhLGQ7cmV0dXJuIG51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGwpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jb25kaXRpb25zKSYmdm9pZCAwIT09YT9hOltdfWdldE9wZXJhdGlvbihsKXt2YXIgYTtyZXR1cm4g''@;'; put 'put ''bnVsbD09PShhPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChsKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEub3BlcmF0aW9ufWdldEZpbHRlcmVkQ29sdW1ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkubWFwKGw9PntsZXRbYV09bDtyZXR1''@;'; put 'put ''cm4gYX0pfWdldENvbHVtblN0YWNrUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkuaW5kZXhPZihsKX1leHBvcnRBbGxDb25kaXRpb25zKCl7cmV0dXJuIEFsKHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKSwobCxhKT0+e2xldFtkLHtvcGVyYXRp''@;'; put 'put ''b246aCxjb25kaXRpb25zOmZ9XT1hO3JldHVybiBsLnB1c2goe2NvbHVtbjpkLG9wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Y3MoZixfPT57bGV0e25hbWU6VCxhcmdzOld9PV87cmV0dXJue25hbWU6VCxhcmdzOld9fSl9KSxsfSxbXSl9aW1wb3J0QWxsQ29uZGl0aW9ucyhsKXt0aGlzLmNsZWFu''@;'; put 'put ''KCksSW4obCxhPT57SW4oYS5jb25kaXRpb25zLGQ9PnRoaXMuYWRkQ29uZGl0aW9uKGEuY29sdW1uLGQpKX0pfXJlbW92ZUNvbmRpdGlvbnMobCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSZW1vdmUiLGwpLHRoaXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyVmFsdWUobCksdGhpcy5ydW5M''@;'; put 'put ''b2NhbEhvb2tzKCJhZnRlclJlbW92ZSIsbCl9Y2xlYW4oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNsZWFuIiksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xlYW4iKX1oYXNDb25kaXRpb25zKGwsYSl7Y29uc3QgZD10aGlzLmdl''@;'; put 'put ''dENvbmRpdGlvbnMobCk7cmV0dXJuIGE/ZC5zb21lKGg9PmgubmFtZT09PWEpOmQubGVuZ3RoPjB9ZGVzdHJveSgpe3RoaXMuaXNNYXBSZWdpc3RyYWJsZSYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChFaWUpLHRoaXMuZmlsdGVyaW5nU3RhdGVzPW51bGwsdGhp''@;'; put 'put ''cy5jbGVhckxvY2FsSG9va3MoKX19VGEoa2llLE8wKTtjb25zdCBBaWU9a2llLFRpZT1jbGFzcyBWUGV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOigpPT5bXTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rp''@;'; put 'put ''b249bCx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5PWF9ZmlsdGVyKCl7bGV0IGw9W107cmV0dXJuIEluKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKSwoYSxkKT0+e2xldCBoPXRoaXMuY29sdW1uRGF0YUZhY3RvcnkoYSk7ZCYmKGg9dGhpcy5fZ2V0SW50ZXJz''@;'; put 'put ''ZWN0RGF0YShoLGwpKSxsPXRoaXMuZmlsdGVyQnlDb2x1bW4oYSxoKX0pLGx9ZmlsdGVyQnlDb2x1bW4obCl7Y29uc3QgZD1bXTtyZXR1cm4gSW4oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9Pnt2b2lkIDAhPT1oJiZ0aGlzLmNv''@;'; put 'put ''bmRpdGlvbkNvbGxlY3Rpb24uaXNNYXRjaChoLGwpJiZkLnB1c2goaCl9KSxkfV9nZXRJbnRlcnNlY3REYXRhKGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4gSW4oYSxoPT57Y29uc3QgZj1oLm1ldGEudmlzdWFsUm93O3ZvaWQgMCE9PWxbZl0mJihkW2ZdPWxbZl0pfSksZH19O2NsYXNzIERpZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTooKT0+W107dGhpcy5ob3Q9bCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249YSx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5PWQsdGhpcy5jaGFuZ2VzPVtdLHRo''@;'; put 'put ''aXMuZ3JvdXBpbmc9ITEsdGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbj0tMSx0aGlzLmxhdGVzdE9yZGVyU3RhY2s9W10sdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlUmVtb3ZlIixoPT50aGlzLl9vbkNvbmRpdGlvbkJlZm9yZU1vZGlmeShoKSks''@;'; put 'put ''dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJSZW1vdmUiLGg9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyQWRkIixoPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgp''@;'; put 'put ''KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVDbGVhbiIsKCk9PnRoaXMuX29uQ29uZGl0aW9uQmVmb3JlQ2xlYW4oKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJDbGVhbiIsKCk9PnRoaXMuX29uQ29uZGl0aW9uQWZ0''@;'; put 'put ''ZXJDbGVhbigpKX1ncm91cENoYW5nZXMoKXt0aGlzLmdyb3VwaW5nPSEwfWZsdXNoKCl7dGhpcy5ncm91cGluZz0hMSxJbih0aGlzLmNoYW5nZXMsbD0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4obCl9KSx0aGlzLmNoYW5nZXMubGVuZ3RoPTB9X29uQ29uZGl0aW9uQmVmb3JlTW9kaWZ5''@;'; put 'put ''KGwpe3RoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb249dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24obCl9dXBkYXRlU3RhdGVzQXRDb2x1bW4obCxhKXt2YXIgZD10aGlzO2lmKHRoaXMuZ3JvdXBpbmcpcmV0dXJuIHZvaWQoLTE9PT10aGlzLmNo''@;'; put 'put ''YW5nZXMuaW5kZXhPZihsKSYmdGhpcy5jaGFuZ2VzLnB1c2gobCkpO2NvbnN0IGg9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtsZXQgZj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKTstMT09PWYmJihmPXRo''@;'; put 'put ''aXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24pO2NvbnN0IF89aC5zbGljZSgwLGYpLFQ9aC5zbGljZShmKTtULmxlbmd0aCYmVFswXS5jb2x1bW49PT1sJiZULnNoaWZ0KCk7Y29uc3QgVz1tdGUoZnVuY3Rpb24oZ2Usd2Upe2xldCBFZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107Y29uc3QgWmU9bmV3IEFpZShkLmhvdCwhMSksb3Q9W10uY29uY2F0KGdlLEVlKTtaZS5pbXBvcnRBbGxDb25kaXRpb25zKG90KTtjb25zdCBldD1kLmNvbHVtbkRhdGFGYWN0b3J5KHdlKTtsZXQgeXQ7eXQ9WmUuaXNFbXB0eSgpP2V0Om5l''@;'; put 'put ''dyBUaWUoWmUsU3Q9PmQuY29sdW1uRGF0YUZhY3RvcnkoU3QpKS5maWx0ZXIoKSx5dD1jcyh5dCxTdD0+U3QubWV0YS52aXN1YWxSb3cpO2NvbnN0IGt0PXp5KHl0KTtyZXR1cm4gWmUuZGVzdHJveSgpLF8xKGV0LFN0PT5rdChTdC5tZXRhLnZpc3VhbFJvdykpfSkoXyksaWU9W10uY29uY2F0''@;'; put 'put ''KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb25kaXRpb25zKGwpKTt0aGlzLnJ1bkxvY2FsSG9va3MoInVwZGF0ZSIse2VkaXRlZENvbmRpdGlvblN0YWNrOntjb2x1bW46bCxjb25kaXRpb25zOmllfSxkZXBlbmRlbnRDb25kaXRpb25TdGFja3M6VCxmaWx0ZXJlZFJvd3NGYWN0b3J5''@;'; put 'put ''OlcsY29uZGl0aW9uQXJnc0NoYW5nZTphfSl9X29uQ29uZGl0aW9uQmVmb3JlQ2xlYW4oKXt0aGlzLmxhdGVzdE9yZGVyU3RhY2s9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpfV9vbkNvbmRpdGlvbkFmdGVyQ2xlYW4oKXtJbih0aGlzLmxhdGVzdE9yZGVy''@;'; put 'put ''U3RhY2ssbD0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4obCl9KX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSxkcyh0aGlzLChsLGEpPT57dGhpc1thXT1udWxsfSl9fVRhKERpZSxPMCk7Y29uc3QgQlBlPURpZTtjbGFzcyB6UGUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBM''@;'; put 'put ''VUdJTl9LRVkoKXtyZXR1cm4iZmlsdGVycyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjUwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpEcm9wZG93bk1lbnUiLCJwbHVnaW46SGlkZGVuUm93cyIsImNlbGwtdHlwZTpjaGVja2JveCJdfWNv''@;'; put 'put ''bnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj1udWxsLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXI9bnVsbCx0aGlzLmNvbXBvbmVudHM9bmV3''@;'; put 'put ''IE1hcChbWyJmaWx0ZXJfYnlfY29uZGl0aW9uIixudWxsXSxbImZpbHRlcl9vcGVyYXRvcnMiLG51bGxdLFsiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG51bGxdLFsiZmlsdGVyX2J5X3ZhbHVlIixudWxsXSxbImZpbHRlcl9hY3Rpb25fYmFyIixudWxsXV0pLHRoaXMuZmlsdGVyc1Jvd3NNYXA9''@;'; put 'put ''bnVsbCx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PnRoaXMub25BZnRlckdldENvbEhlYWRlcihhLGQpKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsdGVyc31lbmFibGVQbHVnaW4oKXtpZih0aGlzLmVuYWJsZWQpcmV0''@;'; put 'put ''dXJuO3RoaXMuZmlsdGVyc1Jvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLG5ldyBneSksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJkcm9wZG93bk1lbnUiKTtjb25zdCBsPXRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKCkuZHJvcGRvd25NZW51LGE9bCYmbC51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksZD1fPT4oXy5hZGRMb2NhbEhvb2soImFjY2VwdCIsKCk9PnRoaXMub25BY3Rpb25CYXJTdWJtaXQoImFjY2VwdCIpKSxfLmFkZExvY2FsSG9vaygiY2FuY2VsIiwoKT0+''@;'; put 'put ''dGhpcy5vbkFjdGlvbkJhclN1Ym1pdCgiY2FuY2VsIikpLF8uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLFQ9PnRoaXMub25Db21wb25lbnRDaGFuZ2UoXyxUKSksXyksaD0oKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShrQil9OmA7aWYoIXRoaXMuY29tcG9uZW50cy5nZXQoImZp''@;'; put 'put ''bHRlcl9ieV9jb25kaXRpb24iKSl7Y29uc3QgXz1uZXcgVWoodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uIixuYW1lOmgsYWRkU2VwYXJhdG9yOiExLG1lbnVDb250YWluZXI6YX0pO18uYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5vblNlbGVjdFVJQ2xvc2Vk''@;'; put 'put ''KCkpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24iLGQoXykpfWlmKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX29wZXJhdG9ycyIsbmV3IGtQZSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9v''@;'; put 'put ''cGVyYXRvcnMiLG5hbWU6Ik9wZXJhdG9ycyJ9KSksIXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikpe2NvbnN0IF89bmV3IFVqKHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG5hbWU6IiIsYWRkU2VwYXJhdG9yOiEwLG1lbnVDb250YWluZXI6''@;'; put 'put ''YX0pO18uYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5vblNlbGVjdFVJQ2xvc2VkKCkpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIixkKF8pKX10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKXx8dGhpcy5jb21wb25lbnRz''@;'; put 'put ''LnNldCgiZmlsdGVyX2J5X3ZhbHVlIixkKG5ldyBIUGUodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfdmFsdWUiLG5hbWU6KCk9PmAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoQUIpfTpgfSkpKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIpfHx0aGlzLmNv''@;'; put 'put ''bXBvbmVudHMuc2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIsZChuZXcgTlBlKHRoaXMuaG90LHtpZDoiZmlsdGVyX2FjdGlvbl9iYXIiLG5hbWU6IkFjdGlvbiBiYXIifSkpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb258fCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bmV3IEFpZSh0aGlzLmhv''@;'; put 'put ''dCkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJ8fCh0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyPW5ldyBCUGUodGhpcy5ob3QsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLF89PnRoaXMuZ2V0RGF0YU1hcEF0Q29sdW1uKF8pKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVy''@;'; put 'put ''LmFkZExvY2FsSG9vaygidXBkYXRlIixfPT50aGlzLnVwZGF0ZUNvbXBvbmVudHMoXykpKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChfPT5fLnNob3coKSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsXz0+dGhpcy5vbkJlZm9yZURyb3Bkb3duTWVudVNldEl0''@;'; put 'put ''ZW1zKF8pKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLF89PnRoaXMub25BZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zKF8pKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51U2hvdyIsKCk9PnRoaXMub25BZnRlckRyb3Bkb3duTWVu''@;'; put 'put ''dVNob3coKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCgpPT50aGlzLm9uQWZ0ZXJEcm9wZG93bk1lbnVIaWRlKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLF89PnRoaXMub25BZnRlckNoYW5nZShfKSksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93''@;'; put 'put ''bk1lbnUmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luJiYodGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZGlzYWJsZVBsdWdpbigpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmVuYWJsZVBsdWdpbigpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dmFyIGw7dGhpcy5lbmFi''@;'; put 'put ''bGVkJiYobnVsbCE9PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKSYmdm9pZCAwIT09bCYmbC5lbmFibGVkJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChhLGQpPT57YS5kZXN0cm95KCksdGhpcy5jb21w''@;'; put 'put ''b25lbnRzLnNldChkLG51bGwpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bnVsbCx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1h''@;'; put 'put ''ZGRDb25kaXRpb24obCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTplNDtjb25zdCBmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLHtjb21t''@;'; put 'put ''YW5kOntrZXk6YX0sYXJnczpkfSxoKX1yZW1vdmVDb25kaXRpb25zKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhhKX1jbGVhckNvbmRpdGlvbnMobCl7aWYodm9pZCAwPT09bCl0aGlzLmNv''@;'; put 'put ''bmRpdGlvbkNvbGxlY3Rpb24uY2xlYW4oKTtlbHNle2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhhKX19ZmlsdGVyKCl7Y29uc3QgbD10aGlzLl9jcmVhdGVEYXRhRmlsdGVyKCksYT0hdGhpcy5j''@;'; put 'put ''b25kaXRpb25Db2xsZWN0aW9uLmlzRW1wdHkoKTtsZXQgZD1bXTtjb25zdCBoPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5leHBvcnRBbGxDb25kaXRpb25zKCk7aWYoITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRmlsdGVyIixoKSlpZihhKXtjb25zdCBfPVtdO3RoaXMuaG90LmJh''@;'; put 'put ''dGNoRXhlY3V0aW9uKCgpPT57dGhpcy5maWx0ZXJzUm93c01hcC5jbGVhcigpLGQ9Y3MobC5maWx0ZXIoKSxXPT5XLm1ldGEudmlzdWFsUm93KTtjb25zdCBUPXp5KGQpO3ZvKHRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTEsVz0+e1QoVyl8fF8ucHVzaChXKX0pLEluKF8sVz0+e3RoaXMu''@;'; put 'put ''ZmlsdGVyc1Jvd3NNYXAuc2V0VmFsdWVBdEluZGV4KFcsITApfSl9LCEwKSxkLmxlbmd0aHx8dGhpcy5ob3QuZGVzZWxlY3RDZWxsKCl9ZWxzZSB0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRmlsdGVyIixoKSx0aGlzLmhvdC52aWV3LmFkanVz''@;'; put 'put ''dEVsZW1lbnRzU2l6ZSghMCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5jbGVhckNvbHVtblNlbGVjdGlvbigpfWdldFNlbGVjdGVkQ29sdW1uKCl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGln''@;'; put 'put ''aGxpZ2h0O3JldHVybiBhP3t2aXN1YWxJbmRleDphLmNvbCxwaHlzaWNhbEluZGV4OnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYS5jb2wpfTpudWxsfWNsZWFyQ29sdW1uU2VsZWN0aW9uKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk7bnVsbCE9PWwmJnRoaXMuaG90LnNl''@;'; put 'put ''bGVjdENlbGwoMCxsLnZpc3VhbEluZGV4KX1nZXREYXRhTWFwQXRDb2x1bW4obCl7Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSxkPVtdO3JldHVybiBJbih0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDb2woYSksKGgsZik9Pnt2YXIgXztjb25zdHtyb3c6VCxjb2w6Vyx2aXN1''@;'; put 'put ''YWxDb2w6aWUsdmlzdWFsUm93OmdlLHR5cGU6d2UsaW5zdGFuY2U6RWUsZGF0ZUZvcm1hdDpaZSxsb2NhbGU6b3R9PXRoaXMuaG90LmdldENlbGxNZXRhKGYsYSksZXQ9bnVsbCE9PShfPXRoaXMuaG90LmdldERhdGFBdENlbGwodGhpcy5ob3QudG9WaXN1YWxSb3coZiksYSkpJiZ2b2lkIDAh''@;'; put 'put ''PT1fP186aDtkLnB1c2goe21ldGE6e3JvdzpULGNvbDpXLHZpc3VhbENvbDppZSx2aXN1YWxSb3c6Z2UsdHlwZTp3ZSxpbnN0YW5jZTpFZSxkYXRlRm9ybWF0OlplLGxvY2FsZTpvdH0sdmFsdWU6Q2llKGV0KX0pfSksZH1vbkFmdGVyQ2hhbmdlKGwpe2wmJkluKGwsYT0+e2NvbnN0WyxkXT1h''@;'; put 'put ''LGg9dGhpcy5ob3QucHJvcFRvQ29sKGQpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGgpJiZ0aGlzLnVwZGF0ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKGgpfSl9dXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24obCl7Y29uc3QgZD0kaih0aGlzLmhvdC5nZXRE''@;'; put 'put ''YXRhQXRDb2wobCkpO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIudXBkYXRlU3RhdGVzQXRDb2x1bW4obCxkKX1yZXN0b3JlQ29tcG9uZW50cyhsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnBoeXNp''@;'; put 'put ''Y2FsSW5kZXg7bC5mb3JFYWNoKGg9PntoLmlzSGlkZGVuKCl8fGgucmVzdG9yZVN0YXRlKGQpfSksdGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpfW9uQWZ0ZXJEcm9wZG93bk1lbnVTaG93KCl7dGhpcy5yZXN0b3JlQ29tcG9uZW50cyhBcnJheS5mcm9tKHRoaXMu''@;'; put 'put ''Y29tcG9uZW50cy52YWx1ZXMoKSkpfW9uQWZ0ZXJEcm9wZG93bk1lbnVIaWRlKCl7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9u''@;'; put 'put ''MiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKX1vbkJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zKCl7dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT57dGhpcy5kcm9wZG93''@;'; put 'put ''bk1lbnVQbHVnaW4ubWVudS5ob3RNZW51LnVwZGF0ZVNldHRpbmdzKHtoaWRkZW5Sb3dzOiEwfSl9KX1vbkFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMobCl7bC5pdGVtcy5wdXNoKHtuYW1lOmdzfSksdGhpcy5jb21wb25lbnRzLmZvckVhY2goYT0+e2wuaXRlbXMucHVzaChhLmdl''@;'; put 'put ''dE1lbnVJdGVtRGVzY3JpcHRvcigpKX0pfWdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHMobCxhLGQsaCl7bGV0IGY9bDtyZXR1cm4gZj09PXhBJiZhLmNvbW1hbmQua2V5IT09V2MmJmQuY29tbWFuZC5rZXkhPT1XYyYmaC5jb21tYW5kLmtleSE9PVdjP2Y9WWo6aC5jb21tYW5kLmtleSE9''@;'; put 'put ''PVdjJiYoYS5jb21tYW5kLmtleT09PVdjfHxkLmNvbW1hbmQua2V5PT09V2MpJiYoZj1lNCksZn1vbkFjdGlvbkJhclN1Ym1pdChsKXt2YXIgYTtpZigiYWNjZXB0Ij09PWwpe2NvbnN0IGg9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpO3ZhciBkO2lmKG51bGw9PT1oKXJldHVybiB2b2lkKG51''@;'; put 'put ''bGw9PT0oZD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWR8fGQuY2xvc2UoKSk7Y29uc3R7cGh5c2ljYWxJbmRleDpmfT1oLF89dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFN0YXRlKCksVD10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0''@;'; put 'put ''ZXJfYnlfY29uZGl0aW9uMiIpLmdldFN0YXRlKCksVz10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5nZXRTdGF0ZSgpLGllPXRoaXMuZ2V0T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyh0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikuZ2V0QWN0''@;'; put 'put ''aXZlT3BlcmF0aW9uSWQoKSxfLFQsVyk7dGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5ncm91cENoYW5nZXMoKTtsZXQgZ2U9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24oZik7LTE9PT1nZSYmKGdlPXZvaWQgMCksdGhpcy5jb25kaXRpb25Db2xs''@;'; put 'put ''ZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoZiksXy5jb21tYW5kLmtleSE9PVdjJiYodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLF8saWUsZ2UpLFQuY29tbWFuZC5rZXkhPT1XYyYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLFQsaWUsZ2Up''@;'; put 'put ''KSxXLmNvbW1hbmQua2V5IT09V2MmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oZixXLGllLGdlKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmZsdXNoKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2god2U9PndlLnNhdmVTdGF0ZShmKSksdGhpcy5maWx0ZXJz''@;'; put 'put ''Um93c01hcC5jbGVhcigpLHRoaXMuZmlsdGVyKCl9bnVsbD09PShhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09YXx8YS5jbG9zZSgpfW9uQ29tcG9uZW50Q2hhbmdlKGwsYSl7dGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpLGwuY29uc3RydWN0''@;'; put 'put ''b3I9PT1VaiYmIWEuaW5wdXRzQ291bnQmJnRoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl9b25TZWxlY3RVSUNsb3NlZCgpe3RoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl9c2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl7dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJnRoaXMu''@;'; put 'put ''ZHJvcGRvd25NZW51UGx1Z2luLnNldExpc3RlbmluZygpfXVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl7Y29uc3QgbD10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikse2NvbW1hbmQ6YX09bC5nZXRTdGF0ZSgpLGQ9W3RoaXMuY29tcG9uZW50''@;'; put 'put ''cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIiksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpXTthLnNob3dPcGVyYXRvcnM/dGhpcy5zaG93Q29tcG9uZW50cyguLi5kKTp0aGlzLmhpZGVDb21wb25lbnRzKC4uLmQpfW9uQWZ0ZXJHZXRDb2xIZWFkZXIobCxhKXtj''@;'; put 'put ''b25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5lbmFibGVkJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhkKT9waShhLCJodEZpbHRlcnNBY3RpdmUiKTpXbyhhLCJodEZpbHRlcnNBY3RpdmUiKX1fY3JlYXRlRGF0YUZpbHRlcigpe3JldHVy''@;'; put 'put ''biBuZXcgVGllKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sYT0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oYSkpfXVwZGF0ZUNvbXBvbmVudHMobCl7dmFyIGE7aWYobnVsbD09PShhPXRoaXMu''@;'; put 'put ''ZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09YXx8IWEuZW5hYmxlZClyZXR1cm47Y29uc3R7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbmRpdGlvbnM6ZCxjb2x1bW46aH19PWwsZj1kLmZpbHRlcihUPT5ULm5hbWU9PT1QZyksXz1kLmZpbHRlcihUPT5ULm5hbWUhPT1QZyk7aWYoZi5s''@;'; put 'put ''ZW5ndGg+PTJ8fF8ubGVuZ3RoPj0zKUdhKEFhYFRoZSBmaWx0ZXIgY29uZGl0aW9ucyBoYXZlIGJlZW4gYXBwbGllZCBwcm9wZXJseSwgYnV0IGNvdWxkbuKAmXQgYmUgZGlzcGxheWVkIHZpc3VhbGx5Llx4MjAKICAgICAgICBUaGUgb3ZlcmFsbCBhbW91bnQgb2YgY29uZGl0aW9ucyBleGNl''@;'; put 'put ''ZWQgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIGRyb3Bkb3duIG1lbnUuXHgyMAogICAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLmApO2Vsc2V7Y29uc3QgVD10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0T3BlcmF0aW9uKGgpO3RoaXMuY29tcG9uZW50cy5n''@;'; put 'put ''ZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS51cGRhdGVTdGF0ZShfWzBdLGgpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikudXBkYXRlU3RhdGUoX1sxXSxoKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikudXBkYXRlU3RhdGUoVCxo''@;'; put 'put ''KSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS51cGRhdGVTdGF0ZShsKX19Z2V0SW5kZXhlc09mQ29tcG9uZW50cygpe2NvbnN0IGw9W107aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXJldHVybiBsO2NvbnN0IGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVu''@;'; put 'put ''dTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gSW4oaCxfPT57SW4oYS5tZW51SXRlbXMsKFQsVyk9PntULmtleT09PV8uZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkua2V5JiZsLnB1c2goVyl9KX0p''@;'; put 'put ''LGx9Y2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbilyZXR1cm47Y29uc3QgZD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5t''@;'; put 'put ''ZW51LmhvdE1lbnUsaD1kLmdldFBsdWdpbigiaGlkZGVuUm93cyIpO2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KGY+MT9mLTE6MCksVD0xO1Q8ZjtUKyspX1tULTFdPWFyZ3VtZW50c1tUXTtjb25zdCBXPXRoaXMuZ2V0SW5kZXhlc09mQ29tcG9uZW50cyguLi5fKTts''@;'; put 'put ''P2guc2hvd1Jvd3MoVyk6aC5oaWRlUm93cyhXKSxkLnJlbmRlcigpfWhpZGVDb21wb25lbnRzKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSghMSwu''@;'; put 'put ''Li5hKX1zaG93Q29tcG9uZW50cygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITAsLi4uYSl9ZGVzdHJveSgpe3RoaXMuZW5hYmxlZCYmKHRoaXMu''@;'; put 'put ''Y29tcG9uZW50cy5mb3JFYWNoKChsLGEpPT57bnVsbCE9PWwmJihsLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGEsbnVsbCkpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmRlc3Ryb3koKSx0aGlzLmhvdC5y''@;'; put 'put ''b3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHN1cGVyLmRlc3Ryb3koKX19Y29uc3QgTGllPSJpbnRlcm5hbC11c2UtaW4taGFuZHNvbnRhYmxlIixKaj17bGljZW5zZUtleTpMaWUsdXNlQXJyYXlBcml0aG1ldGljOiEwLHVzZUNvbHVtbkluZGV4OiExLHVz''@;'; put 'put ''ZVN0YXRzOiExLGV2YWx1YXRlTnVsbFRvWmVybzohMCxwcmVjaXNpb25FcHNpbG9uOjFlLTEzLHByZWNpc2lvblJvdW5kaW5nOjE0LHNtYXJ0Um91bmRpbmc6ITAsbGVhcFllYXIxOTAwOiExLG51bGxEYXRlOnt5ZWFyOjE4OTksbW9udGg6MTIsZGF5OjMwfSxudWxsWWVhcjozMCxkYXRlRm9y''@;'; put 'put ''bWF0czpbIkREL01NL1lZWVkiLCJERC9NTS9ZWSJdLHRpbWVGb3JtYXRzOlsiaGg6bW0iLCJoaDptbTpzcy5zc3MiXSxtYXRjaFdob2xlQ2VsbDohMCx1c2VSZWd1bGFyRXhwcmVzc2lvbnM6ITEsdXNlV2lsZGNhcmRzOiEwLGZ1bmN0aW9uQXJnU2VwYXJhdG9yOiIsIix0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRvcjoiIixkZWNpbWFsU2VwYXJhdG9yOiIuIixsYW5ndWFnZToiZW5HQiJ9O2Z1bmN0aW9uIFJpZShjKXt2YXIgbDtyZXR1cm57bWF4Q29sdW1uczpjLm1heENvbHVtbnMsbWF4Um93czpjLm1heFJvd3MsbGFuZ3VhZ2U6bnVsbD09PShsPWNbQ3VdKXx8dm9pZCAwPT09bHx8bnVsbD09PShs''@;'; put 'put ''PWwubGFuZ3VhZ2UpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxhbmdDb2RlfX1mdW5jdGlvbiBPaWUoYyl7cmV0dXJuIE9iamVjdC5rZXlzKGMpLnJlZHVjZSgobCxhKT0+KCJoeXBlcmZvcm11bGEiIT09YSYmKGxbYV09Y1thXSksbCkse30pfWZ1bmN0aW9uIGtBKCl7Y29uc3QgYz0iZW5naW5l''@;'; put 'put ''X3JlbGF0aW9uc2hpcCIsbD1wZChDdSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5jdGlvbiBRaigpe2NvbnN0IGM9InNoYXJlZF9lbmdpbmVfdXNhZ2UiLGw9cGQoQ3UpO3JldHVybiBsLmhhc0l0ZW0oYyl8fGwucmVnaXN0ZXIo''@;'; put 'put ''YyxuZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gUGllKGMpe3ZhciBsO2NvbnN0IGE9a0EoKSxkPTA9PT1hLnNpemU/W106QXJyYXkuZnJvbShudWxsIT09KGw9YS5nZXQoYykpJiZ2b2lkIDAhPT1sP2w6W10pO3JldHVybiBuZXcgTWFwKGQubWFwKGg9PltoLmdldFBsdWdpbigiZm9y''@;'; put 'put ''bXVsYXMiKS5zaGVldElkLGhdKSl9ZnVuY3Rpb24gRmllKGMsbCl7aWYoYyl7Y29uc3QgYT1rQSgpLGQ9YS5nZXQoYyksaD1RaigpLGY9aC5nZXQoYyk7ZCYmZC5pbmNsdWRlcyhsKSYmKGQuc3BsaWNlKGQuaW5kZXhPZihsKSwxKSwwPT09ZC5sZW5ndGgmJmEuZGVsZXRlKGMpKSxmJiZmLmlu''@;'; put 'put ''Y2x1ZGVzKGwuZ3VpZCkmJihmLnNwbGljZShmLmluZGV4T2YobC5ndWlkKSwxKSwwPT09Zi5sZW5ndGgmJihoLmRlbGV0ZShjKSxjLmRlc3Ryb3koKSkpfX1jb25zdCBIaWU9IkREL01NL1lZWVkiO2Z1bmN0aW9uIE5pZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiInIj09PWMuY2hh''@;'; put 'put ''ckF0KDApJiYiPSI9PT1jLmNoYXJBdCgxKX1mdW5jdGlvbiBleihjLGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmImRhdGUiPT09bH1mdW5jdGlvbiBWaWUoYyxsKXtyZXR1cm4gS28oYyxsLCEwKS5pc1ZhbGlkKCl9ZnVuY3Rpb24gQmllKGMsbCl7cmV0dXJuIEtvKGMsbCwhMCkuZm9y''@;'; put 'put ''bWF0KEhpZSl9ZnVuY3Rpb24gZUZlKGMsbCl7cmV0dXJuIEtvKGMsSGllLCEwKS5mb3JtYXQobCl9ZnVuY3Rpb24gamllKGMsbCl7Y29uc3QgZD1uZXcgRGF0ZShEYXRlLlVUQygwLDAsYystMSkpO3JldHVybiBLbyhkKS5mb3JtYXQobCl9ZnVuY3Rpb24gRmcoYyxsLGEpeyhmdW5jdGlvbiB0''@;'; put 'put ''RmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHJsKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIG5GZShjLGwp''@;'; put 'put ''e3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsemllKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIHQ0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gckZlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyx6aWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIHppZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxk''@;'; put 'put ''IG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIgWnk9bmV3IFdlYWtNYXAsbjQ9bmV3IFdlYWtNYXAseTE9bmV3IFdlYWtNYXAsQUE9bmV3IFdlYWtNYXAsdHo9bmV3IFdlYWtNYXAsbno9bmV3IFdlYWtNYXAsVEE9bmV3IFdlYWtNYXA7Y29uc3QgVWllPWNsYXNzIGlGZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEsZCl7RmcodGhpcyxaeSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRmcodGhpcyxuNCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRmcodGhpcyx5MSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRmcodGhpcyxBQSx7d3JpdGFibGU6ITAsdmFsdWU6''@;'; put 'put ''W119KSxGZyh0aGlzLHR6LHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLEZnKHRoaXMsbnose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEZnKHRoaXMsVEEse3dyaXRhYmxlOiEwLHZhbHVlOltdfSksdDQodGhpcyxaeSxsKSx0NCh0aGlzLG40LGEpLHQ0KHRoaXMseTEsZCl9c2V0UmVtb3Zl''@;'; put 'put ''ZEhmSW5kZXhlcyhsKXtyZXR1cm4gdDQodGhpcyxUQSxsLm1hcChhPT57Y29uc3QgZD1ybCh0aGlzLG40KS5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChhKTtyZXR1cm4gdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpfSkpLHJsKHRoaXMsVEEpfWdldFJlbW92ZWRIZkluZGV4''@;'; put 'put ''ZXMoKXtyZXR1cm4gcmwodGhpcyxUQSl9Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXJsKHRoaXMsbjQpLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQ9cmwodGhpcyxuNCkuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKTtyZXR1cm4gYS5pbmRleE9mKGRbbF0pfXN5bmNNb3Zlcyhs''@;'; put 'put ''KXtjb25zdCBkPWBtb3ZlJHtidShybCh0aGlzLFp5KSl9c2A7cmwodGhpcyx5MSkuZ2V0RW5naW5lKCkuYmF0Y2goKCk9PntsLmZvckVhY2goaD0+e2guZnJvbSE9PWgudG8mJmguZnJvbSsxIT09aC50byYmcmwodGhpcyx5MSkuZ2V0RW5naW5lKClbZF0ocmwodGhpcyx5MSkuZ2V0U2hlZXRJ''@;'; put 'put ''ZCgpLGguZnJvbSwxLGgudG8pfSl9KX1zdG9yZU1vdmVzSW5mb3JtYXRpb24obCxhLGQpeyExIT09ZCYmKHQ0KHRoaXMsdHosbC5tYXAoaD0+dGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpKSksdDQodGhpcyxueix0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSkpKX1n''@;'; put 'put ''ZXRNb3ZlTGluZShsLGEpe2NvbnN0IGQ9cmwodGhpcyxuNCkuZ2V0TnVtYmVyT2ZJbmRleGVzKCksaD1BcnJheS5mcm9tKEFycmF5KGQpLmtleXMoKSkuZmlsdGVyKF89PiExPT09bC5pbmNsdWRlcyhfKSk7dmFyIGY7cmV0dXJuIDA9PT1hP251bGwhPT0oZj1oW2FdKSYmdm9pZCAwIT09Zj9m''@;'; put 'put ''OjA6aFthLTFdKzF9Z2V0SW5pdGlhbGx5Q2FsY3VsYXRlZE1vdmVzKGwsYSl7bGV0IGQ9dGhpcy5nZXRNb3ZlTGluZShsLGEpO2NvbnN0IGg9W107cmV0dXJuIGwuZm9yRWFjaChmPT57Y29uc3QgXz17ZnJvbTpmLHRvOmR9O2guZm9yRWFjaChUPT57VC5mcm9tPl8uZnJvbSYmVC50bzw9Xy5m''@;'; put 'put ''cm9tJiZULmZyb20+VC50byYmKF8uZnJvbSs9MSl9KSxfLmZyb20+PWQmJihkKz0xKSxoLnB1c2goXyl9KSxofWFkanVzdGVkQ2FsY3VsYXRlZE1vdmVzKGwpe3JldHVybiBsLmZvckVhY2goKGEsZCk9PntsLnNsaWNlKGQrMSkuZm9yRWFjaChmPT57Zi5mcm9tPmEuZnJvbSYmZi5mcm9tPGYu''@;'; put 'put ''dG8mJihmLmZyb20tPTEpfSl9KSxsfWNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhsLGEpe2lmKHJsKHRoaXMseTEpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCl8fCExPT09bHx8ITE9PT1hKXJldHVybjtjb25zdCBkPXRoaXMuYWRqdXN0ZWRDYWxjdWxhdGVkTW92ZXModGhpcy5nZXRJbml0aWFsbHlD''@;'; put 'put ''YWxjdWxhdGVkTW92ZXMocmwodGhpcyx0eikscmwodGhpcyxueikpKTtudWxsPT09cmwodGhpcyx5MSkuZ2V0U2hlZXRJZCgpP3JsKHRoaXMseTEpLmdldFBvc3Rwb25lQWN0aW9uKCgpPT50aGlzLnN5bmNNb3ZlcyhkKSk6dGhpcy5zeW5jTW92ZXMoZCl9Z2V0SW5kZXhlc0NoYW5nZVN5bmNN''@;'; put 'put ''ZXRob2QoKXtjb25zdCBsPWBzZXQke2J1KHJsKHRoaXMsWnkpKX1PcmRlcmA7cmV0dXJuIGE9PntpZihybCh0aGlzLHkxKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpKXJldHVybjtjb25zdCBkPXJsKHRoaXMsbjQpLmdldEluZGV4ZXNTZXF1ZW5jZSgpO2lmKCJ1cGRhdGUiPT09YSl7Y29uc3Qg''@;'; put 'put ''aD1ybCh0aGlzLEFBKS5tYXAoVz0+ZC5pbmRleE9mKFcpKSxmPXJsKHRoaXMseTEpLmdldEVuZ2luZSgpLmdldFNoZWV0RGltZW5zaW9ucyhybCh0aGlzLHkxKS5nZXRTaGVldElkKCkpO2xldCBfO189InJvdyI9PT1ybCh0aGlzLFp5KT9mLmhlaWdodDpmLndpZHRoO2ZvcihsZXQgVz1oLmxl''@;'; put 'put ''bmd0aDtXPF87Vys9MSloLnB1c2goVyk7cmwodGhpcyx5MSkuZ2V0RW5naW5lKClbbF0ocmwodGhpcyx5MSkuZ2V0U2hlZXRJZCgpLGgpfXQ0KHRoaXMsQUEsZCl9fWluaXQoKXt0NCh0aGlzLEFBLHJsKHRoaXMsbjQpLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX19O2Z1bmN0aW9uIEhnKGMsbCxh''@;'; put 'put ''KXsoZnVuY3Rpb24gb0ZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBxZihjLGwpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbiBzRmUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLFppZShjLGwsImdldCIpKX1mdW5jdGlvbiBOZyhjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIGFGZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsWmllKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBaaWUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIg''@;'; put 'put ''cHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9dmFyIERBPW5ldyBXZWFrTWFwLElBPW5ldyBXZWFrTWFwLHJ6PW5ldyBXZWFrTWFwLGl6PW5ldyBXZWFrTWFwLG96PW5ldyBXZWFrTWFwLHN6PW5ldyBXZWFrTWFwLGF6PW5ldyBXZWFrTWFwO2Z1bmN0aW9u''@;'; put 'put ''IEw3KGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiB1RmUoYyl7dmFyIGw9ZnVuY3Rpb24gZEZlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gbHooYyxsLGEpeyhmdW5jdGlvbiBoRmUoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHI0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gZkZlKGMsbCxhKXtp''@;'; put 'put ''ZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxZaWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFI3KGMsbCl7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIHBGZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsWWllKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIFlpZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5v''@;'; put 'put ''bi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1jb25zdCBDdT0iZm9ybXVsYXMiLGdGZT1bIm1heFJvd3MiLCJtYXhDb2x1bW5zIiwibGFuZ3VhZ2UiXTtzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIpLHNvLmdldFNpbmdsZXRvbigpLnJl''@;'; put 'put ''Z2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldEFkZGVkIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW1vdmVkIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVy''@;'; put 'put ''U2hlZXRSZW5hbWVkIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiKTtjb25zdCBPNz1jPT4iVW5kb1JlZG8udW5kbyI9PT1jfHwiVW5kb1JlZG8ucmVkbyI9PT1jfHwiYXV0byI9PT1jO3ZhciBLZj1uZXcgV2Vha01hcCxjej1uZXcgV2Vh''@;'; put 'put ''a01hcCxZeT1uZXcgV2Vha01hcDtjbGFzcyB2RmUgZXh0ZW5kcyBac3tjb25zdHJ1Y3Rvcigpe3ZhciBsO3N1cGVyKC4uLmFyZ3VtZW50cyksbD10aGlzLGx6KHRoaXMsS2Yse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksbHoodGhpcyxjeix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxseih0aGlz''@;'; put 'put ''LFl5LHt3cml0YWJsZTohMCx2YWx1ZTpbWyJ2YWx1ZXNVcGRhdGVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lVmFsdWVzVXBkYXRlZCguLi5hcmd1bWVudHMpfV0sWyJuYW1lZEV4cHJlc3Npb25BZGRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkVuZ2luZU5hbWVkRXhwcmVzc2lv''@;'; put 'put ''bnNBZGRlZCguLi5hcmd1bWVudHMpfV0sWyJuYW1lZEV4cHJlc3Npb25SZW1vdmVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lTmFtZWRFeHByZXNzaW9uc1JlbW92ZWQoLi4uYXJndW1lbnRzKX1dLFsic2hlZXRBZGRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkVuZ2luZVNoZWV0''@;'; put 'put ''QWRkZWQoLi4uYXJndW1lbnRzKX1dLFsic2hlZXRSZW5hbWVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lU2hlZXRSZW5hbWVkKC4uLmFyZ3VtZW50cyl9XSxbInNoZWV0UmVtb3ZlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkVuZ2luZVNoZWV0UmVtb3ZlZCguLi5hcmd1bWVudHMp''@;'; put 'put ''fV1dfSksTDcodGhpcywic3RhdGljUmVnaXN0ZXIiLHBkKCJmb3JtdWxhcyIpKSxMNyh0aGlzLCJlbmdpbmUiLG51bGwpLEw3KHRoaXMsInNoZWV0TmFtZSIsbnVsbCksTDcodGhpcywiaW5kZXhTeW5jZXIiLG51bGwpLEw3KHRoaXMsInJvd0F4aXNTeW5jZXIiLG51bGwpLEw3KHRoaXMsImNv''@;'; put 'put ''bHVtbkF4aXNTeW5jZXIiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBDdX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bQ3UsLi4uZ0ZlXX1nZXQgc2hlZXRJZCgpe3JldHVybiBudWxs''@;'; put 'put ''PT09dGhpcy5zaGVldE5hbWU/bnVsbDp0aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbQ3VdfWVuYWJsZVBsdWdpbigpe3ZhciBsLGE9dGhpcztpZighdGhpcy5lbmFibGVkKXtpZih0aGlzLmVu''@;'; put 'put ''Z2luZT1udWxsIT09KGw9ZnVuY3Rpb24gV1BlKGMpe2NvbnN0IGw9Yy5nZXRTZXR0aW5ncygpLGE9bFtDdV0sZD1hPy5lbmdpbmU7aWYoITA9PT1hfHxMYShkKSlyZXR1cm4gbnVsbDt2YXIgaDtpZigiZnVuY3Rpb24iPT10eXBlb2YgZC5oeXBlcmZvcm11bGF8fCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBmdW5jdGlvbiBHUGUoYyxsLGEpe2NvbnN0IGQ9bFtDdV0saD1mdW5jdGlvbiBVUGUoYyl7dmFyIGw7Y29uc3QgYT1jW0N1XSxkPU9pZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksaD1SaWUo''@;'; put 'put ''Yyk7cmV0dXJuey4uLkpqLC4uLmQsLi4uaH19KGwpLGY9a0EoKSxfPVFqKCk7KGZ1bmN0aW9uICRQZShjLGwpe2wmJmwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLHBsdWdpbjpoLHRyYW5zbGF0aW9uczpmfT1hO3RyeXtjLnJlZ2lzdGVyRnVuY3Rpb24oZCxoLGYpfWNhdGNoKF8pe0dhKF8u''@;'; put 'put ''bWVzc2FnZSl9fSl9KShjLGQuZnVuY3Rpb25zKSxmdW5jdGlvbiBxUGUoYyxsKXtpZihsKXtjb25zdHtsYW5nQ29kZTphfT1sO3RyeXtjLnJlZ2lzdGVyTGFuZ3VhZ2UoYSxsKX1jYXRjaChkKXtHYShkLm1lc3NhZ2UpfX19KGMsZC5sYW5ndWFnZSk7Y29uc3QgVD1jLmJ1aWxkRW1wdHkoaCk7''@;'; put 'put ''cmV0dXJuIGYuc2V0KFQsW2FdKSxfLnNldChULFthLmd1aWRdKSxmdW5jdGlvbiBLUGUoYyxsKXtsJiYoYy5zdXNwZW5kRXZhbHVhdGlvbigpLGwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLGV4cHJlc3Npb246aCxzY29wZTpmLG9wdGlvbnM6X309YTt0cnl7Yy5hZGROYW1lZEV4cHJlc3Np''@;'; put 'put ''b24oZCxoLGYsXyl9Y2F0Y2goVCl7R2EoVC5tZXNzYWdlKX19KSxjLnJlc3VtZUV2YWx1YXRpb24oKSl9KFQsZC5uYW1lZEV4cHJlc3Npb25zKSxULm9uKCJzaGVldEFkZGVkIiwoKT0+e1QucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxULm9uKCJzaGVldFJlbW92ZWQiLCgpPT57VC5yZWJ1''@;'; put 'put ''aWxkQW5kUmVjYWxjdWxhdGUoKX0pLFR9KG51bGwhPT0oaD1kLmh5cGVyZm9ybXVsYSkmJnZvaWQgMCE9PWg/aDpkLGwsYyk7aWYoIm9iamVjdCI9PXR5cGVvZiBkJiZMYShkLmh5cGVyZm9ybXVsYSkpe2NvbnN0IGY9a0EoKSxfPVFqKCkuZ2V0KGQpO3JldHVybiBmLmhhcyhkKXx8Zi5zZXQo''@;'; put 'put ''ZCxbXSksZi5nZXQoZCkucHVzaChjKSxfJiZfLnB1c2goYy5ndWlkKSxkLmdldENvbmZpZygpLmxpY2Vuc2VLZXl8fGQudXBkYXRlQ29uZmlnKHtsaWNlbnNlS2V5OkxpZX0pLChkLmdldENvbmZpZygpLmxlYXBZZWFyMTkwMCE9PUpqLmxlYXBZZWFyMTkwMHx8ITE9PT1hayhkLmdldENvbmZp''@;'; put 'put ''ZygpLm51bGxEYXRlLEpqLm51bGxEYXRlKSkmJkdhKEFhYElmIHlvdSB1c2UgSHlwZXJGb3JtdWxhIHdpdGggSGFuZHNvbnRhYmxlLCBrZWVwIHRoZSBkZWZhdWx0IFxgbGVhcFllYXIxOTAwXGAgYW5kIFxgbnVsbERhdGVcYCAKICAgICAgc2V0dGluZ3MuIE90aGVyd2lzZSwgSHlwZXJGb3Jt''@;'; put 'put ''dWxhJ3MgZGF0ZXMgbWF5IG5vdCBzeW5jIGNvcnJlY3RseSB3aXRoIEhhbmRzb250YWJsZSdzIGRhdGVzLmApLGR9cmV0dXJuIG51bGx9KHRoaXMuaG90KSkmJnZvaWQgMCE9PWw/bDp0aGlzLmVuZ2luZSwhdGhpcy5lbmdpbmUpcmV0dXJuIHZvaWQgR2EoIk1pc3NpbmcgdGhlIHJlcXVpcmVk''@;'; put 'put ''IGBlbmdpbmVgIGtleSBpbiB0aGUgRm9ybXVsYXMgc2V0dGluZ3MuIFBsZWFzZSBmaWxsIGl0IHdpdGggZWl0aGVyIGFuIGVuZ2luZSBjbGFzcyBvciBhbiBlbmdpbmUgaW5zdGFuY2UuIik7aWYobnVsbCE9PXRoaXMuc2hlZXROYW1lJiYhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhp''@;'; put 'put ''cy5zaGVldE5hbWUpKXtjb25zdCBkPXRoaXMuYWRkU2hlZXQodGhpcy5zaGVldE5hbWUsdGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkpOyExIT09ZCYmKHRoaXMuc2hlZXROYW1lPWQpfXRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZv''@;'; put 'put ''cmVMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uQmVm''@;'; put 'put ''b3JlTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uTW9kaWZ5''@;'; put 'put ''RGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uTW9kaWZ5U291cmNlRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWYWxpZGF0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9y''@;'; put 'put ''ZVZhbGlkYXRlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdENlbGwiLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlclNldERhdGFBdENlbGwoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJTZXREYXRhQXRDZWxsKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJl''@;'; put 'put ''Zm9yZUNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVDcmVhdGVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9v''@;'; put 'put ''aygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyQ3JlYXRlQ29sKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZVJlbW92ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVSZW1vdmVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlclJlbW92ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyUmVtb3ZlQ29sKC4uLmFyZ3VtZW50cyl9KSx0aGlz''@;'; put 'put ''LmluZGV4U3luY2VyPW5ldyBjbGFzcyBsRmV7Y29uc3RydWN0b3IobCxhLGQpe0hnKHRoaXMsREEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEhnKHRoaXMsSUEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEhnKHRoaXMscnose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEhn''@;'; put 'put ''KHRoaXMsaXose3dyaXRhYmxlOiEwLHZhbHVlOiExfSksSGcodGhpcyxveix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxIZyh0aGlzLHN6LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksSGcodGhpcyxheix7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE5nKHRoaXMsREEsbmV3IFVpZSgicm93''@;'; put 'put ''IixsLHRoaXMpKSxOZyh0aGlzLElBLG5ldyBVaWUoImNvbHVtbiIsYSx0aGlzKSksTmcodGhpcyxyeixkKX1nZXRGb3JBeGlzKGwpe3JldHVybiBxZih0aGlzLCJyb3ciPT09bD9EQTpJQSl9c2V0UGVyZm9ybVVuZG8obCl7TmcodGhpcyxpeixsKX1zZXRQZXJmb3JtUmVkbyhsKXtOZyh0aGlz''@;'; put 'put ''LG96LGwpfWlzUGVyZm9ybWluZ1VuZG9SZWRvKCl7cmV0dXJuIHFmKHRoaXMsaXopfHxxZih0aGlzLG96KX1nZXRTaGVldElkKCl7cmV0dXJuIHFmKHRoaXMsYXopfWdldEVuZ2luZSgpe3JldHVybiBxZih0aGlzLHN6KX1nZXRQb3N0cG9uZUFjdGlvbigpe3JldHVybiBxZih0aGlzLHJ6KX1z''@;'; put 'put ''ZXR1cFN5bmNFbmRwb2ludChsLGEpe05nKHRoaXMsc3osbCksTmcodGhpcyxheixhKSxxZih0aGlzLERBKS5pbml0KCkscWYodGhpcyxJQSkuaW5pdCgpfX0odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZD0+e3RoaXMuaG90LmFkZEhvb2tPbmNl''@;'; put 'put ''KCJpbml0IiwoKT0+e2QoKX0pfSksdGhpcy5yb3dBeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygicm93IiksdGhpcy5jb2x1bW5BeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygiY29sdW1uIiksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dTZXF1''@;'; put 'put ''ZW5jZUNoYW5nZSIsdGhpcy5yb3dBeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhv''@;'; put 'put ''dC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZCxoLGYsXyk9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGQsaCxfKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChkLGgsZixfKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1v''@;'; put 'put ''dmVzSW5mb3JtYXRpb24oZCxoLF8pfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIiwoZCxoLGYsXyxUKT0+e3RoaXMucm93QXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoXyxUKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uTW92ZSIsKGQsaCxmLF8sVCk9''@;'; put 'put ''Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKF8sVCl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5maXhlZENvbHVtbnNTdGFydCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoaCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtblVuZnJlZXplIiwo''@;'; put 'put ''ZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlz''@;'; put 'put ''U3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNlbGxNZXRhUmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckNlbGxNZXRhUmVzZXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kbyIsKCk9Pnt0aGlzLmlu''@;'; put 'put ''ZGV4U3luY2VyLnNldFBlcmZvcm1VbmRvKCEwKSx0aGlzLmVuZ2luZS51bmRvKCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMCksdGhpcy5lbmdpbmUucmVkbygpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgp''@;'; put 'put ''PT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMSl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFm''@;'; put 'put ''dGVyRGV0YWNoQ2hpbGQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQXV0b2ZpbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVBdXRvZmlsbCguLi5hcmd1bWVudHMpfSksUjcodGhpcyxZeSkuZm9yRWFjaChkPT57bGV0W2gsZl09ZDtyZXR1cm4gdGhpcy5lbmdp''@;'; put 'put ''bmUub24oaCxmKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7UjcodGhpcyxZeSkuZm9yRWFjaChsPT57bGV0W2EsZF09bDtyZXR1cm4gdGhpcy5lbmdpbmUub2ZmKGEsZCl9KSxGaWUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIu''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbihsKXtjb25zdCBhPWZ1bmN0aW9uIFpQZShjKXt2YXIgbDtjb25zdCBhPWNbQ3VdO3JldHVybnsuLi5PaWUobnVsbCE9YSYmbnVsbCE9PShsPWEuZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11bGE/YS5lbmdpbmU6e30pLC4uLlJp''@;'; put 'put ''ZShjKX19KHRoaXMuaG90LmdldFNldHRpbmdzKCkpOyhmdW5jdGlvbiBZUGUoYyxsKXtyZXR1cm4gT2JqZWN0LmtleXMobCkuc29tZShhPT52b2lkIDAhPT1sW2FdJiZsW2FdIT09Y1thXSl9KSh0aGlzLmVuZ2luZS5nZXRDb25maWcoKSxhKSYmdGhpcy5lbmdpbmUudXBkYXRlQ29uZmlnKGEp''@;'; put 'put ''O2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDdV07aWYoS2koZCkmJktpKGQuc2hlZXROYW1lKSYmZC5zaGVldE5hbWUhPT10aGlzLnNoZWV0TmFtZSYmdGhpcy5zd2l0Y2hTaGVldChkLnNoZWV0TmFtZSksIWwuZGF0YSYmbnVsbD09PXRoaXMuc2hlZXROYW1lKXtjb25zdCBoPXRo''@;'; put 'put ''aXMuaG90LmdldFNldHRpbmdzKClbQ3VdLnNoZWV0TmFtZTtoJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChoKT90aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTp0aGlzLnNoZWV0TmFtZT10aGlzLmFkZFNoZWV0KGg/P3ZvaWQgMCx0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJy''@;'; put 'put ''YXkoKSl9c3VwZXIudXBkYXRlUGx1Z2luKGwpfWRlc3Ryb3koKXtSNyh0aGlzLFl5KS5mb3JFYWNoKGw9Pnt2YXIgYTtsZXRbZCxoXT1sO3JldHVybiBudWxsPT09KGE9dGhpcy5lbmdpbmUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm9mZihkLGgpfSkscjQodGhpcyxZeSxudWxsKSxGaWUodGhp''@;'; put 'put ''cy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIuZGVzdHJveSgpfWFkZFNoZWV0KGwsYSl7aWYoS2koYSkmJiFwbmUoYSkpcmV0dXJuIEdhKCJUaGUgcHJvdmlkZWQgZGF0YSBzaG91bGQgYmUgYW4gYXJyYXkgb2YgYXJyYXlzLiIpLCExO2lmKG51bGwhPWwmJnRoaXMu''@;'; put 'put ''ZW5naW5lLmRvZXNTaGVldEV4aXN0KGwpKXJldHVybiBHYSgiU2hlZXQgd2l0aCB0aGUgcHJvdmlkZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSwhMTt0cnl7Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRTaGVldChsPz92b2lkIDApO3JldHVybiBhJiZ0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRl''@;'; put 'put ''bnQodGhpcy5lbmdpbmUuZ2V0U2hlZXRJZChkKSxhKSxkfWNhdGNoKGQpe3JldHVybiBHYShkLm1lc3NhZ2UpLCExfX1zd2l0Y2hTaGVldChsKXtpZighdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QobCkpcmV0dXJuIHZvaWQgU04oYFRoZSBzaGVldCBuYW1lZCBcYCR7bH1cYCBkb2VzIG5v''@;'; put 'put ''dCBleGlzdCwgc3dpdGNoIGFib3J0ZWQuYCk7dGhpcy5zaGVldE5hbWU9bDtjb25zdCBhPXRoaXMuZW5naW5lLmdldFNoZWV0U2VyaWFsaXplZCh0aGlzLnNoZWV0SWQpO2EubGVuZ3RoPjAmJnRoaXMuaG90LmxvYWREYXRhKGEsYCR7YnUoQ3UpfS5zd2l0Y2hTaGVldGApfWdldENlbGxUeXBl''@;'; put 'put ''KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZDtjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO3JldHVybiBudWxsIT09aCYmbnVs''@;'; put 'put ''bCE9PWY/dGhpcy5lbmdpbmUuZ2V0Q2VsbFR5cGUoe3NoZWV0OmQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pOiJFTVBUWSJ9aXNGb3JtdWxh''@;'; put 'put ''Q2VsbFR5cGUobCxhKXtyZXR1cm4gdGhpcy5lbmdpbmUuZG9lc0NlbGxIYXZlRm9ybXVsYSh7c2hlZXQ6YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9t''@;'; put 'put ''VmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSl9cmVuZGVyRGVwZW5kZW50U2hlZXRzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3Qg''@;'; put 'put ''ZD1uZXcgU2V0O2wuZm9yRWFjaChoPT57dmFyIGY7Y29uc3QgXz1udWxsPT1ofHxudWxsPT09KGY9aC5hZGRyZXNzKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5zaGVldDt2b2lkIDAhPT1fJiYoZC5oYXMoXyl8fGQuYWRkKF8pKX0pLFBpZSh0aGlzLmVuZ2luZSkuZm9yRWFjaCgoaCxmKT0+e3Zh''@;'; put 'put ''ciBfOyhhfHxmIT09dGhpcy5zaGVldElkKSYmZC5oYXMoZikmJihoLnJlbmRlcigpLG51bGw9PT0oXz1oLnZpZXcpfHx2b2lkIDA9PT1ffHxfLmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0pfXZhbGlkYXRlRGVwZW5kZW50Q2VsbHMobCl7Y29uc3QgZD1mPT57dmFyIF87Y29uc3R7cm93OlQsY29s''@;'; put 'put ''Olcsc2hlZXQ6aWV9PW51bGwhPT0oXz1mPy5hZGRyZXNzKSYmdm9pZCAwIT09Xz9fOnt9O3JldHVybiBLaShpZSk/YCR7aWV9OiR7VH14JHtXfWA6IiJ9LGg9bmV3IFNldCgoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdKS5tYXAoZj0+''@;'; put 'put ''ZChmKSkpO2wuZm9yRWFjaChmPT57dmFyIF8sVDtjb25zdHtyb3c6Vyxjb2w6aWV9PW51bGwhPT0oXz1mLmFkZHJlc3MpJiZ2b2lkIDAhPT1fP186e307aWYoITE9PT1LaShXKXx8ITE9PT1LaShpZSl8fFc+PXRoaXMuaG90LmNvdW50Um93cygpfHxpZT49dGhpcy5ob3QuY291bnRDb2xzKCkp''@;'; put 'put ''cmV0dXJuO2NvbnN0IGdlPW51bGw9PWZ8fG51bGw9PT0oVD1mLmFkZHJlc3MpfHx2b2lkIDA9PT1UP3ZvaWQgMDpULnNoZWV0LHdlPWQoZik7aWYodm9pZCAwIT09Z2UmJiFoLmhhcyh3ZSkpe2NvbnN0IEVlPVBpZSh0aGlzLmVuZ2luZSkuZ2V0KGdlKTtpZighRWUpcmV0dXJuO0VlLnZhbGlk''@;'; put 'put ''YXRlQ2VsbChFZS5nZXREYXRhQXRDZWxsKFcsaWUpLEVlLmdldENlbGxNZXRhKFcsaWUpLCgpPT57fSl9fSl9c3luY0NoYW5nZVdpdGhFbmdpbmUobCxhLGQpe2NvbnN0IGg9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1''@;'; put 'put ''bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSksc2hlZXQ6dGhpcy5zaGVldElkfTtpZighdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoaCkpcmV0dXJuIHZvaWQgR2EoYE5vdCBwb3NzaWJsZSB0byBzZXQgY2VsbCBkYXRhIGF0ICR7SlNP''@;'; put 'put ''Ti5zdHJpbmdpZnkoaCl9YCk7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO3JldHVybiBleihkLGYudHlwZSkmJihWaWUoZCxmLmRhdGVGb3JtYXQpP2Q9QmllKGQsZi5kYXRlRm9ybWF0KTohMT09PWZ1bmN0aW9uIFFQZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJmMu''@;'; put 'put ''c3RhcnRzV2l0aCgiPSIpfShkKSYmKGQ9YCcke2R9YCkpLHRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhoLGQpfW9uQmVmb3JlVmFsaWRhdGUobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QucHJvcFRvQ29sKGQpO2lmKHRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoYSxoKSl7Y29uc3QgZj17cm93''@;'; put 'put ''OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxzaGVldDp0aGlzLnNoZWV0SWR9LF89dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxoKTtsZXQgVD10aGlzLmVu''@;'; put 'put ''Z2luZS5nZXRDZWxsVmFsdWUoZik7cmV0dXJuImRhdGUiPT09Xy50eXBlJiZHdShUKSYmKFQ9amllKFQsXy5kYXRlRm9ybWF0KSksIm9iamVjdCI9PXR5cGVvZiBUJiZudWxsIT09VD9ULnZhbHVlOlR9cmV0dXJuIGx9b25CZWZvcmVBdXRvZmlsbChsLGEsZCl7Y29uc3R7cm93OmgsY29sOmZ9''@;'; put 'put ''PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93Ol8sY29sOlR9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCkse3JvdzpXLGNvbDppZX09ZC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Z2UsY29sOndlfT1kLmdldEJvdHRvbUVuZENvcm5lcigpLEVlPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5''@;'; put 'put ''bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KF8p''@;'; put 'put ''LGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChUKSxzaGVldDp0aGlzLnNoZWV0SWR9fSxaZT17c3RhcnQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChXKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2Vy''@;'; put 'put ''LmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaWUpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZ2UpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh3ZSks''@;'; put 'put ''c2hlZXQ6dGhpcy5zaGVldElkfX07aWYoITE9PT10aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhaZSkpcmV0dXJuITE7Y29uc3Qgb3Q9dGhpcy5lbmdpbmUuZ2V0RmlsbFJhbmdlRGF0YShFZSxaZSkse3JvdzpldCxjb2w6eXR9PUVlLnN0YXJ0LHtyb3c6a3QsY29s''@;'; put 'put ''OlN0fT1FZS5lbmQsUXQ9a3QtZXQrMSxubj1TdC15dCsxO2ZvcihsZXQgbW49MDttbjxvdC5sZW5ndGg7bW4rPTEpZm9yKGxldCBFbj0wO0VuPG90W21uXS5sZW5ndGg7RW4rPTEpe2NvbnN0IGxyPW90W21uXVtFbl0sVnI9bW4lUXQsX2k9RW4lbm4sdWk9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEo''@;'; put 'put ''VnIsX2kpO2V6KGxyLHVpLnR5cGUpJiYobHIuc3RhcnRzV2l0aCgiJyIpP290W21uXVtFbl09bHIuc2xpY2UoMSk6ITE9PT10aGlzLmlzRm9ybXVsYUNlbGxUeXBlKFZyLF9pLHRoaXMuc2hlZXRJZCkmJihvdFttbl1bRW5dPWVGZShscix1aS5kYXRlRm9ybWF0KSkpfXJldHVybiBvdH1vbkJl''@;'; put 'put ''Zm9yZUxvYWREYXRhKGwsYSl7KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMoYnUoQ3UpKXx8cjQodGhpcyxjeixMYSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRhdGEpKX1vbkFmdGVyQ2VsbE1ldGFSZXNldCgpe2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7bGV0IGE9ITE7bC5mb3JFYWNoKChkLGgpPT57ZC5mb3JFYWNoKChmLF8pPT57Y29uc3QgVD10aGlzLmhvdC5nZXRDZWxsTWV0YShoLF8pLFc9VC5kYXRlRm9ybWF0O2V6KGYsVC50eXBlKSYmKGE9ITAsVmllKGYsVyk/bFtoXVtf''@;'; put 'put ''XT1CaWUoZixXKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoaCxfKSYmKGxbaF1bX109YCcke2Z9YCkpfSl9KSwhMD09PWEmJihyNCh0aGlzLEtmLCEwKSx0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGwpLHI0KHRoaXMsS2YsITEpKX1vbkFmdGVyTG9hZERh''@;'; put 'put ''dGEobCxhKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMoYnUoQ3UpKSlpZih0aGlzLnNoZWV0TmFtZT1mdW5jdGlvbiBYUGUoYyxsKXtyZXR1cm4oTGEobCl8fCFjLmRvZXNTaGVldEV4aXN0KGwpKSYmKGw9''@;'; put 'put ''Yy5hZGRTaGVldChsKSksbH0odGhpcy5lbmdpbmUsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDdV0uc2hlZXROYW1lKSxSNyh0aGlzLGN6KSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7aWYodGhpcy5l''@;'; put 'put ''bmdpbmUuaXNJdFBvc3NpYmxlVG9SZXBsYWNlU2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxoKSl7cjQodGhpcyxLZiwhMCk7Y29uc3QgZj10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpO3RoaXMuaW5kZXhTeW5jZXIuc2V0dXBTeW5jRW5kcG9pbnQodGhpcy5l''@;'; put 'put ''bmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKSxyNCh0aGlzLEtmLCExKX19fW9uTW9kaWZ5RGF0YShsLGEsZCxoKXtpZigiZ2V0IiE9PWh8fFI3KHRoaXMsS2YpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlz''@;'; put 'put ''dCh0aGlzLnNoZWV0TmFtZSkpcmV0dXJuO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxSb3cobCk7aWYobnVsbD09PWZ8fG51bGw9PT1hKXJldHVybjtpZighdGhpcy5pc0Zvcm11bGFDZWxsVHlwZShmLGEpJiYiQVJSQVkiIT09dGhpcy5nZXRDZWxsVHlwZShmLGEpKXJldHVybiB2b2lkKE5p''@;'; put 'put ''ZShkLnZhbHVlKSYmKGQudmFsdWU9ZnVuY3Rpb24gSlBlKGMpe3JldHVybiBOaWUoYyk/Yy5zdWJzdHIoMSk6Y30oZC52YWx1ZSkpKTtjb25zdCBUPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5n''@;'; put 'put ''ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpLHNoZWV0OnRoaXMuc2hlZXRJZH07bGV0IFc9dGhpcy5lbmdpbmUuZ2V0Q2VsbFZhbHVlKFQpO2NvbnN0IGllPXRoaXMuaG90LmdldENlbGxNZXRhKGYsYSk7ImRhdGUiPT09aWUudHlwZSYmR3UoVykmJihXPWppZShXLGllLmRhdGVGb3JtYXQp''@;'; put 'put ''KSxkLnZhbHVlPSJvYmplY3QiPT10eXBlb2YgVyYmbnVsbCE9PVc/Vy52YWx1ZTpXfW9uTW9kaWZ5U291cmNlRGF0YShsLGEsZCxoKXtpZigiZ2V0IiE9PWh8fFI3KHRoaXMsS2YpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0''@;'; put 'put ''TmFtZSkpcmV0dXJuO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxSb3cobCksXz10aGlzLmhvdC5wcm9wVG9Db2woYSk7aWYobnVsbD09PWZ8fG51bGw9PT1ffHwhdGhpcy5pc0Zvcm11bGFDZWxsVHlwZShmLF8pJiYiQVJSQVkiIT09dGhpcy5nZXRDZWxsVHlwZShmLF8pKXJldHVybjtjb25z''@;'; put 'put ''dCBXPXRoaXMuZW5naW5lLmdldFNoZWV0RGltZW5zaW9ucyh0aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKSk7aWYoMD09PVcud2lkdGgmJjA9PT1XLmhlaWdodClyZXR1cm47Y29uc3QgaWU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoXyksc2hlZXQ6dGhpcy5zaGVldElkfTtkLnZhbHVlPXRoaXMuZW5naW5lLmdldENlbGxTZXJpYWxpemVkKGllKX1vbkFmdGVyU2V0RGF0YUF0Q2VsbChsLGEpe2lmKE83KGEpKXJldHVy''@;'; put 'put ''bjtjb25zdCBkPVtdLGg9W10sZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2wuZm9yRWFjaChfPT57bGV0W1QsVywsaWVdPV87Y29uc3QgZ2U9dGhpcy5ob3QucHJvcFRvQ29sKFcpLHdlPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coVCksRWU9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihnZSks''@;'; put 'put ''WmU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChUKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZ2UpLHNoZWV0OnRoaXMuc2hlZXRJZH07bnVsbCE9PXdlJiZudWxsIT09RWU/dGhpcy5zeW5jQ2hh''@;'; put 'put ''bmdlV2l0aEVuZ2luZShULGdlLGllKTpkLnB1c2goW1QsZ2UsaWVdKSxoLnB1c2goe2FkZHJlc3M6WmV9KX0pfSk7ZC5sZW5ndGgmJnRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsKCk9Pntjb25zdCBfPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57ZC5mb3JFYWNoKFQ9PntsZXRb''@;'; put 'put ''VyxpZSxnZV09VDt0aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKFcsaWUsZ2UpfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhfLCEwKX0pLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpLHRoaXMudmFsaWRhdGVEZXBlbmRlbnRDZWxscyhmLGgpfW9uQWZ0ZXJTZXRTb3VyY2VE''@;'; put 'put ''YXRhQXRDZWxsKGwsYSl7aWYoTzcoYSkpcmV0dXJuO2NvbnN0IGQ9W10saD1bXTtsLmZvckVhY2goZj0+e2xldFtfLFQsLFddPWY7Y29uc3QgaWU9dGhpcy5ob3QucHJvcFRvQ29sKFQpO2lmKCFHdShpZSkpcmV0dXJuO2NvbnN0IGdlPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5k''@;'; put 'put ''ZXhGcm9tVmlzdWFsSW5kZXgoXyksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGllKSxzaGVldDp0aGlzLnNoZWV0SWR9O3RoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKGdlKT8oaC5wdXNoKHthZGRyZXNzOmdlfSks''@;'; put 'put ''ZC5wdXNoKC4uLnRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhnZSxXKSkpOkdhKGBOb3QgcG9zc2libGUgdG8gc2V0IHNvdXJjZSBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShnZSl9YCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhkKSx0aGlzLnZhbGlkYXRlRGVwZW5k''@;'; put 'put ''ZW50Q2VsbHMoZCxoKX1vbkJlZm9yZUNyZWF0ZVJvdyhsLGEpe2xldCBkPXRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpO2lmKGw+PXRoaXMuaG90LmNvdW50Um93cygpJiYoZD1sKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1No''@;'; put 'put ''ZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRSb3dzKHRoaXMuc2hlZXRJZCxbZCxhXSkpcmV0dXJuITF9b25CZWZvcmVDcmVhdGVDb2wobCxhKXtsZXQgZD10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRl''@;'; put 'put ''eChsKTtpZihsPj10aGlzLmhvdC5jb3VudENvbHMoKSYmKGQ9bCksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8IXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2QsYV0pKXJl''@;'; put 'put ''dHVybiExfW9uQmVmb3JlUmVtb3ZlUm93KGwsYSxkKXtyZXR1cm4hMSE9PXRoaXMucm93QXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGQpLmV2ZXJ5KF89PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW18sMV0pKSYmdm9pZCAwfW9uQmVm''@;'; put 'put ''b3JlUmVtb3ZlQ29sKGwsYSxkKXtyZXR1cm4hMSE9PXRoaXMuY29sdW1uQXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGQpLmV2ZXJ5KF89PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW18sMV0pKSYmdm9pZCAwfW9uQWZ0ZXJDcmVh''@;'; put 'put ''dGVSb3cobCxhLGQpe2lmKE83KGQpKXJldHVybjtjb25zdCBoPXRoaXMuZW5naW5lLmFkZFJvd3ModGhpcy5zaGVldElkLFt0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxhXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoaCl9b25BZnRlckNyZWF0''@;'; put 'put ''ZUNvbChsLGEsZCl7aWYoTzcoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5lbmdpbmUuYWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3RoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGFdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKX1vbkFmdGVy''@;'; put 'put ''UmVtb3ZlUm93KGwsYSxkLGgpe2lmKE83KGgpKXJldHVybjtjb25zdCBmPXRoaXMucm93QXhpc1N5bmNlci5nZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgpLnJldmVyc2UoKSxfPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57Zi5mb3JFYWNoKFQ9Pnt0aGlzLmVuZ2luZS5yZW1vdmVSb3dzKHRo''@;'; put 'put ''aXMuc2hlZXRJZCxbVCwxXSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKF8pfW9uQWZ0ZXJSZW1vdmVDb2wobCxhLGQsaCl7aWYoTzcoaCkpcmV0dXJuO2NvbnN0IGY9dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCkucmV2ZXJzZSgpLF89''@;'; put 'put ''dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntmLmZvckVhY2goVD0+e3RoaXMuZW5naW5lLnJlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLFtULDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoXyl9b25BZnRlckRldGFjaENoaWxkKGwsYSxkKXt2YXIgaDtyNCh0aGlzLEtmLCEwKTtj''@;'; put 'put ''b25zdCBmPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheShkLDAsZCsoKG51bGw9PT0oaD1hLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmxlbmd0aCl8fDApLHRoaXMuaG90LmNvdW50U291cmNlQ29scygpKTtyNCh0aGlzLEtmLCExKSxmLmZvckVhY2goKF8sVCk9PntfLmZv''@;'; put 'put ''ckVhY2goKFcsaWUpPT57dGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKHtjb2w6aWUscm93OmQrVCxzaGVldDp0aGlzLnNoZWV0SWR9LFtbV11dKX0pfSl9b25FbmdpbmVWYWx1ZXNVcGRhdGVkKGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixsKX1v''@;'; put 'put ''bkVuZ2luZU5hbWVkRXhwcmVzc2lvbnNBZGRlZChsLGEpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixsLGEpfW9uRW5naW5lTmFtZWRFeHByZXNzaW9uc1JlbW92ZWQobCxhKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1v''@;'; put 'put ''dmVkIixsLGEpfW9uRW5naW5lU2hlZXRBZGRlZChsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldEFkZGVkIixsKX1vbkVuZ2luZVNoZWV0UmVuYW1lZChsLGEpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVuYW1lZCIsbCxhKX1vbkVuZ2luZVNoZWV0UmVtb3ZlZChsLGEp''@;'; put 'put ''e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVtb3ZlZCIsbCxhKX19ZnVuY3Rpb24gV2llKGMsbCxhKXsoZnVuY3Rpb24geUZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj''@;'; put 'put ''ZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3MShjLGwpe3JldHVybiBmdW5jdGlvbiB3RmUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLEdpZShjLGwsImdldCIpKX1mdW5jdGlvbiBXeShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IENGZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsR2llKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBH''@;'; put 'put ''aWUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVDb2x1bW5zIiksc28uZ2V0''@;'; put 'put ''U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZUNvbHVtbnMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlQ29sdW1ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuaGlkZUNvbHVtbnMiKTtjb25zdCB1ej0iaGlkZGVuQ29sdW1ucyI7''@;'; put 'put ''dmFyIENoPW5ldyBXZWFrTWFwLFNoPW5ldyBXZWFrTWFwO2NsYXNzIE1GZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxXaWUodGhpcyxDaCx7d3JpdGFibGU6ITAsdmFsdWU6e319KSxXaWUodGhpcyxTaCx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pfXN0''@;'; put 'put ''YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB1en1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3V6XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1''@;'; put 'put ''cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3V6XTt1cyhhKSYmKFd5KHRoaXMsQ2gsYSksTGEoYS5jb3B5UGFzdGVFbmFibGVkKSYmKGEuY29weVBhc3RlRW5hYmxlZD0hMCkpLFd5KHRoaXMsU2gsbmV3IE1rKSx3MSh0aGlzLFNoKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50''@;'; put 'put ''aGlzLm9uTWFwSW5pdCgpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsdzEodGhpcyxTaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDb250ZXh0''@;'; put 'put ''TWVudURlZmF1bHRPcHRpb25zKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChkLGgsZik9PnRoaXMub25BZnRlckdldENlbGxNZXRhKGQsaCxmKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGQsaCk9PnRoaXMub25Nb2RpZnlDb2xXaWR0''@;'; put 'put ''aChkLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJHZXRDb2xIZWFkZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29weWFibGVSYW5nZSIsZD0+dGhpcy5vbk1vZGlmeUNvcHlhYmxlUmFuZ2UoZCkp''@;'; put 'put ''LHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVn''@;'; put 'put ''aW5OYW1lKSxXeSh0aGlzLENoLHt9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNob3dDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPXcxKHRoaXMsU2gp''@;'; put 'put ''LmdldFZhbHVlcygpLnNsaWNlKCksXz1sLmxlbmd0aD4wO2QmJl8mJihJbihsLm1hcChpZT0+dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihpZSkpLGllPT57ZltpZV09ITF9KSxoPUFsKGYsKGllLGdlLHdlKT0+KGdlJiZpZS5wdXNoKHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKHdlKSksaWUp''@;'; put 'put ''LFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlQ29sdW1ucyIsYSxoLGQmJl8pJiYoZCYmXyYmdzEodGhpcyxTaCkuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlQ29sdW1u''@;'; put 'put ''cyIsYSxoLGQmJl8sZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX1zaG93Q29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Q29sdW1ucyhhKX1oaWRlQ29sdW1ucyhsKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuZ2V0SGlkZGVuQ29sdW1ucygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVDb2x1bW5zIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4''@;'; put 'put ''ZWN1dGlvbigoKT0+e0luKGwsXz0+e3cxKHRoaXMsU2gpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKF8pLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZUNvbHVtbnMiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZUNvbHVt''@;'; put 'put ''bigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZUNvbHVtbnMoYSl9Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiBjcyh3MSh0aGlzLFNoKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5o''@;'; put 'put ''b3QudG9WaXN1YWxDb2x1bW4obCkpfWlzSGlkZGVuKGwpe3JldHVybiB3MSh0aGlzLFNoKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl8fCExfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4hIShBcnJheS5p''@;'; put 'put ''c0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7SW4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wmJihsLnNraXBDb2x1bW5PblBhc3RlPSExKX0pfW9uTW9kaWZ5Q29sV2lkdGgobCxh''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5pc0hpZGRlbihhKT8wOncxKHRoaXMsQ2gpLmluZGljYXRvcnMmJih0aGlzLmlzSGlkZGVuKGErMSl8fHRoaXMuaXNIaWRkZW4oYS0xKSkmJiJudW1iZXIiPT10eXBlb2YgbCYmdGhpcy5ob3QuaGFzQ29sSGVhZGVycygpP2wrMTU6dm9pZCAwfW9uQWZ0ZXJHZXRDZWxs''@;'; put 'put ''TWV0YShsLGEsZCl7aWYoITE9PT13MSh0aGlzLENoKS5jb3B5UGFzdGVFbmFibGVkJiZ0aGlzLmlzSGlkZGVuKGEpJiYoZC5za2lwQ29sdW1uT25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihhLTEpKWQuY2xhc3NOYW1lPWQuY2xhc3NOYW1lfHwiIiwtMT09PWQuY2xhc3NOYW1lLmluZGV4T2Yo''@;'; put 'put ''ImFmdGVySGlkZGVuQ29sdW1uIikmJihkLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlbkNvbHVtbiIpO2Vsc2UgaWYoZC5jbGFzc05hbWUpe2NvbnN0IGg9ZC5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihoLmxlbmd0aD4wKXtjb25zdCBmPWguaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKTtm''@;'; put 'put ''Pi0xJiZoLnNwbGljZShmLDEpLGQuY2xhc3NOYW1lPWguam9pbigiICIpfX19b25Nb2RpZnlDb3B5YWJsZVJhbmdlKGwpe2lmKHcxKHRoaXMsQ2gpLmNvcHlQYXN0ZUVuYWJsZWQpcmV0dXJuIGw7Y29uc3QgYT1bXSxkPShoLGYsXyxUKT0+e2EucHVzaCh7c3RhcnRSb3c6aCxlbmRSb3c6Zixz''@;'; put 'put ''dGFydENvbDpfLGVuZENvbDpUfSl9O3JldHVybiBJbihsLGg9PntsZXQgZj0hMCxfPTA7dm8oaC5zdGFydENvbCxoLmVuZENvbCxUPT57dGhpcy5pc0hpZGRlbihUKT8oZnx8ZChoLnN0YXJ0Um93LGguZW5kUm93LF8sVC0xKSxmPSEwKTooZiYmKF89VCksVD09PWguZW5kQ29sJiZkKGguc3Rh''@;'; put 'put ''cnRSb3csaC5lbmRSb3csXyxUKSxmPSExKX0pfSksYX1vbkFmdGVyR2V0Q29sSGVhZGVyKGwsYSl7aWYoIXcxKHRoaXMsQ2gpLmluZGljYXRvcnN8fGw8MClyZXR1cm47Y29uc3QgZD1bXTtsPj0xJiZ0aGlzLmlzSGlkZGVuKGwtMSkmJmQucHVzaCgiYWZ0ZXJIaWRkZW5Db2x1bW4iKSxsPHRo''@;'; put 'put ''aXMuaG90LmNvdW50Q29scygpLTEmJnRoaXMuaXNIaWRkZW4obCsxKSYmZC5wdXNoKCJiZWZvcmVIaWRkZW5Db2x1bW4iKSxwaShhLGQpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpe2wuaXRlbXMucHVzaCh7bmFtZTpnc30sZnVuY3Rpb24gX0ZlKGMpe3JldHVybntrZXk6''@;'; put 'put ''ImhpZGRlbl9jb2x1bW5zX2hpZGUiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFssZCwsaF09bDtkLWghPTAmJihhPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoaUIsYSl9LGNhbGxiYWNr''@;'; put 'put ''KCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPU1hdGgubWF4KE1hdGgubWluKGwuY29sLGEuY29sKSwwKSxoPU1hdGgubWF4KGwuY29sLGEuY29sKSxmPVtdO2ZvcihsZXQgVz1kO1c8PWg7Vys9MSlmLnB1c2goVyk7Yy5oaWRlQ29sdW1ucyhmKTtj''@;'; put 'put ''b25zdCBUPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZbZi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihUKSYmVD49MD90aGlzLnNlbGVjdENvbHVtbnMoVCk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnJlbmRlcigpLHRoaXMudmll''@;'; put 'put ''dy5hZGp1c3RFbGVtZW50c1NpemUoITApfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gYkZlKGMpe2NvbnN0''@;'; put 'put ''IGw9W107cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uob0IsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0x''@;'; put 'put ''XTtoPW51bGwhPT0oYT10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09''@;'; put 'put ''ZD9kOnRoaXMuY291bnRDb2xzKCktMSxjLnNob3dDb2x1bW5zKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksZi1oKzE9PT10aGlzLmNvdW50Q29scygpfHx0aGlzLnNlbGVjdENvbHVtbnMoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3Qg''@;'; put 'put ''YT1jcyhjLmdldEhpZGRlbkNvbHVtbnMoKSx3ZT0+dGhpcy50b1BoeXNpY2FsQ29sdW1uKHdlKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5s''@;'; put 'put ''ZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxfPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIsVD1fLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksVz1f''@;'; put 'put ''LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksaWU9Xy5nZXROb3RUcmltbWVkSW5kZXhlcygpLGdlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5XLVQrMSl7Y29uc3QgWmU9aWUuc2xpY2UoaCxmKzEpO2dlLnB1c2goLi4uWmUuZmlsdGVyKG90PT5hLmluY2x1ZGVzKG90KSkpfX1lbHNl''@;'; put 'put ''IGlmKDA9PT1UJiZUPGgpZ2UucHVzaCguLi5pZS5zbGljZSgwLGgpKTtlbHNlIGlmKG51bGw9PT1UKWdlLnB1c2goLi4uaWUuc2xpY2UoMCx0aGlzLmNvdW50Q29scygpKSk7ZWxzZXtjb25zdCB3ZT10aGlzLmNvdW50Q29scygpLTE7Vz09PV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl''@;'; put 'put ''eChfLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh3ZSwtMSkpJiZ3ZT5mJiZnZS5wdXNoKC4uLmllLnNsaWNlKGYrMSkpfXJldHVybiBJbihnZSx3ZT0+e2wucHVzaCh0aGlzLnRvVmlzdWFsQ29sdW1uKHdlKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfW9uTWFwSW5pdCgpe0FycmF5Lmlz''@;'; put 'put ''QXJyYXkodzEodGhpcyxDaCkuY29sdW1ucykmJnRoaXMuaGlkZUNvbHVtbnModzEodGhpcyxDaCkuY29sdW1ucyl9ZGVzdHJveSgpe1d5KHRoaXMsQ2gsbnVsbCksV3kodGhpcyxTaCxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uICRpZShjLGwsYSl7KGZ1bmN0aW9uIGtGZShjLGwp''@;'; put 'put ''e2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gX2QoYyxsKXtyZXR1cm4gZnVuY3Rpb24gQUZlKGMsbCl7cmV0dXJu''@;'; put 'put ''IGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxxaWUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gR3koYyxsLGEpe3JldHVybiBmdW5jdGlvbiBURmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVt''@;'; put 'put ''cHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLHFpZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gcWllKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9u''@;'; put 'put ''LWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVIaWRlUm93cyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVSb3dzIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZVJvd3MiKSxz''@;'; put 'put ''by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmhpZGVSb3dzIik7Y29uc3QgZHo9ImhpZGRlblJvd3MiO3ZhciBYZj1uZXcgV2Vha01hcCxNaD1uZXcgV2Vha01hcDtjbGFzcyBJRmUgZXh0ZW5kcyBac3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksJGllKHRoaXMs''@;'; put 'put ''WGYse3dyaXRhYmxlOiEwLHZhbHVlOnt9fSksJGllKHRoaXMsTWgse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZHp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzIwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKVtkel19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtkel07dXMoYSkmJihHeSh0aGlzLFhmLGEpLExhKGEuY29weVBhc3RlRW5hYmxlZCkmJihhLmNvcHlQYXN0ZUVu''@;'; put 'put ''YWJsZWQ9ITApKSxHeSh0aGlzLE1oLG5ldyBNayksX2QodGhpcyxNaCkuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dGhpcy5vbk1hcEluaXQoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLF9kKHRoaXMsTWgpKSx0aGlzLmFkZEhvb2soImFm''@;'; put 'put ''dGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoZCxoLGYpPT50aGlzLm9uQWZ0ZXJHZXRDZWxsTWV0YShk''@;'; put 'put ''LGgsZikpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoZCxoKT0+dGhpcy5vbk1vZGlmeVJvd0hlaWdodChkLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93SGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJHZXRSb3dIZWFkZXIoLi4uYXJndW1lbnRzKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygibW9kaWZ5Q29weWFibGVSYW5nZSIsZD0+dGhpcy5vbk1vZGlmeUNvcHlhYmxlUmFuZ2UoZCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxHeSh0aGlzLFhmLHt9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNob3dSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5S''@;'; put 'put ''b3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPV9kKHRoaXMsTWgpLmdldFZhbHVlcygpLnNsaWNlKCksXz1sLmxlbmd0aD4wO2QmJl8mJihJbihsLm1hcChpZT0+dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhpZSkpLGllPT57ZltpZV09ITF9KSxoPUFsKGYsKGll''@;'; put 'put ''LGdlLHdlKT0+KGdlJiZpZS5wdXNoKHRoaXMuaG90LnRvVmlzdWFsUm93KHdlKSksaWUpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlUm93cyIsYSxoLGQmJl8pJiYoZCYmXyYmX2QodGhpcyxNaCkuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRl''@;'; put 'put ''clVuaGlkZVJvd3MiLGEsaCxkJiZfLGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd1Jvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuc2hvd1Jvd3MoYSl9aGlkZVJvd3MobCl7Y29uc3QgYT10''@;'; put 'put ''aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWRlUm93cyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRp''@;'; put 'put ''b24oKCk9PntJbihsLF89PntfZCh0aGlzLE1oKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhfKSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckhpZGVSb3dzIixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVSb3coKXtmb3IodmFyIGw9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVSb3dzKGEpfWdldEhpZGRlblJvd3MoKXtyZXR1cm4gY3MoX2QodGhpcyxNaCkuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRvVmlzdWFsUm93KGwpKX1p''@;'; put 'put ''c0hpZGRlbihsKXtyZXR1cm4gX2QodGhpcyxNaCkuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfHwhMX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRSb3dzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg+MCkmJmwu''@;'; put 'put ''ZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe0luKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9PntsJiYobC5za2lwUm93T25QYXN0ZT0hMSl9KX1vbk1vZGlmeVJvd0hlaWdodChsLGEpe3JldHVybiB0aGlzLmlzSGlkZGVuKGEpPzA6''@;'; put 'put ''bH1vbkFmdGVyR2V0Q2VsbE1ldGEobCxhLGQpe2lmKCExPT09X2QodGhpcyxYZikuY29weVBhc3RlRW5hYmxlZCYmdGhpcy5pc0hpZGRlbihsKSYmKGQuc2tpcFJvd09uUGFzdGU9ITApLHRoaXMuaXNIaWRkZW4obC0xKSlkLmNsYXNzTmFtZT1kLmNsYXNzTmFtZXx8IiIsLTE9PT1kLmNsYXNz''@;'; put 'put ''TmFtZS5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpJiYoZC5jbGFzc05hbWUrPSIgYWZ0ZXJIaWRkZW5Sb3ciKTtlbHNlIGlmKGQuY2xhc3NOYW1lKXtjb25zdCBoPWQuY2xhc3NOYW1lLnNwbGl0KCIgIik7aWYoaC5sZW5ndGg+MCl7Y29uc3QgZj1oLmluZGV4T2YoImFmdGVySGlkZGVuUm93''@;'; put 'put ''Iik7Zj4tMSYmaC5zcGxpY2UoZiwxKSxkLmNsYXNzTmFtZT1oLmpvaW4oIiAiKX19fW9uTW9kaWZ5Q29weWFibGVSYW5nZShsKXtpZihfZCh0aGlzLFhmKS5jb3B5UGFzdGVFbmFibGVkKXJldHVybiBsO2NvbnN0IGE9W10sZD0oaCxmLF8sVCk9PnthLnB1c2goe3N0YXJ0Um93OmgsZW5kUm93''@;'; put 'put ''OmYsc3RhcnRDb2w6XyxlbmRDb2w6VH0pfTtyZXR1cm4gSW4obCxoPT57bGV0IGY9ITAsXz0wO3ZvKGguc3RhcnRSb3csaC5lbmRSb3csVD0+e3RoaXMuaXNIaWRkZW4oVCk/KGZ8fGQoXyxULTEsaC5zdGFydENvbCxoLmVuZENvbCksZj0hMCk6KGYmJihfPVQpLFQ9PT1oLmVuZFJvdyYmZChf''@;'; put 'put ''LFQsaC5zdGFydENvbCxoLmVuZENvbCksZj0hMSl9KX0pLGF9b25BZnRlckdldFJvd0hlYWRlcihsLGEpe2lmKCFfZCh0aGlzLFhmKS5pbmRpY2F0b3JzfHxsPDApcmV0dXJuO2NvbnN0IGQ9W107bD49MSYmdGhpcy5pc0hpZGRlbihsLTEpJiZkLnB1c2goImFmdGVySGlkZGVuUm93IiksbDx0''@;'; put 'put ''aGlzLmhvdC5jb3VudFJvd3MoKS0xJiZ0aGlzLmlzSGlkZGVuKGwrMSkmJmQucHVzaCgiYmVmb3JlSGlkZGVuUm93IikscGkoYSxkKX1vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKXtsLml0ZW1zLnB1c2goe25hbWU6Z3N9LGZ1bmN0aW9uIHhGZShjKXtyZXR1cm57a2V5OiJo''@;'; put 'put ''aWRkZW5fcm93c19oaWRlIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO2xldCBhPTA7aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3RbZCwsaF09bDtkLWghPTAmJihhPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoc0IsYSl9LGNhbGxiYWNrKCl7Y29u''@;'; put 'put ''c3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPU1hdGgubWF4KE1hdGgubWluKGwucm93LGEucm93KSwwKSxoPU1hdGgubWF4KGwucm93LGEucm93KSxmPVtdO2ZvcihsZXQgVz1kO1c8PWg7Vys9MSlmLnB1c2goVyk7Yy5oaWRlUm93cyhmKTtjb25zdCBUPXRo''@;'; put 'put ''aXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZbZi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihUKSYmVD49MD90aGlzLnNlbGVjdFJvd3MoVCk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50''@;'; put 'put ''c1NpemUoITApfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gRUZlKGMpe2NvbnN0IGw9W107cmV0dXJue2tleToi''@;'; put 'put ''aGlkZGVuX3Jvd3Nfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYUIsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLnJv''@;'; put 'put ''d0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRSb3dzKCktMSxjLnNo''@;'; put 'put ''b3dSb3dzKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksZi1oKzE9PT10aGlzLmNvdW50Um93cygpfHx0aGlzLnNlbGVjdFJvd3MoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT1jcyhjLmdldEhpZGRlblJvd3MoKSx3ZT0+dGhpcy50''@;'; put 'put ''b1BoeXNpY2FsUm93KHdlKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5sZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo''@;'; put 'put ''KSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyxfPXRoaXMucm93SW5kZXhNYXBwZXIsVD1fLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksVz1fLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksaWU9Xy5nZXROb3RU''@;'; put 'put ''cmltbWVkSW5kZXhlcygpLGdlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5XLVQrMSl7Y29uc3QgWmU9aWUuc2xpY2UoaCxmKzEpO2dlLnB1c2goLi4uWmUuZmlsdGVyKG90PT5hLmluY2x1ZGVzKG90KSkpfX1lbHNlIGlmKDA9PT1UJiZUPGgpZ2UucHVzaCguLi5pZS5zbGljZSgwLGgpKTtlbHNl''@;'; put 'put ''IGlmKG51bGw9PT1UKWdlLnB1c2goLi4uaWUuc2xpY2UoMCx0aGlzLmNvdW50Um93cygpKSk7ZWxzZXtjb25zdCB3ZT10aGlzLmNvdW50Um93cygpLTE7Vz09PV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChfLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh3ZSwtMSkpJiZ3ZT5mJiZn''@;'; put 'put ''ZS5wdXNoKC4uLmllLnNsaWNlKGYrMSkpfXJldHVybiBJbihnZSx3ZT0+e2wucHVzaCh0aGlzLnRvVmlzdWFsUm93KHdlKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfW9uTWFwSW5pdCgpe0FycmF5LmlzQXJyYXkoX2QodGhpcyxYZikucm93cykmJnRoaXMuaGlkZVJvd3MoX2QodGhpcyxY''@;'; put 'put ''Zikucm93cyl9ZGVzdHJveSgpe0d5KHRoaXMsWGYsbnVsbCksR3kodGhpcyxNaCxudWxsKSxzdXBlci5kZXN0cm95KCl9fXNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5GcmVlemUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5GcmVlemUi''@;'; put 'put ''KSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uVW5mcmVlemUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIpO2NvbnN0IEtpZT0ibWFudWFsQ29sdW1uRnJlZXplIiwkeT1uZXcgV2Vha01hcDtjbGFzcyBQRmUgZXh0ZW5k''@;'; put 'put ''cyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gS2llfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDExMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSwkeS5zZXQodGhpcyx7YWZ0ZXJGaXJzdFVzZTohMX0pfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKVtLaWVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT50aGlzLmFkZENvbnRleHRNZW51RW50cnkobCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGwsYSk9''@;'; put 'put ''PnRoaXMub25CZWZvcmVDb2x1bW5Nb3ZlKGwsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7JHkuZ2V0KHRoaXMpLmFmdGVyRmlyc3RVc2U9ITEsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5h''@;'; put 'put ''YmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZnJlZXplQ29sdW1uKGwpe2NvbnN0IGE9JHkuZ2V0KHRoaXMpLGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxoPWQuZml4ZWRDb2x1bW5zU3RhcnQ8dGhpcy5ob3QuY291bnRDb2xzKCkmJmw+ZC5maXhlZENvbHVtbnNTdGFydC0xO2Eu''@;'; put 'put ''YWZ0ZXJGaXJzdFVzZXx8KGEuYWZ0ZXJGaXJzdFVzZT0hMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uRnJlZXplIixsLGgpJiYoaCYmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsZC5maXhlZENvbHVtbnNTdGFydCksZC5fZml4ZWRDb2x1''@;'; put 'put ''bW5zU3RhcnQrPTEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbkZyZWV6ZSIsbCxoKSl9dW5mcmVlemVDb2x1bW4obCl7Y29uc3QgYT0keS5nZXQodGhpcyksZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGg9ZC5maXhlZENvbHVtbnNTdGFydD4wJiZsPD1kLmZpeGVkQ29sdW1uc1N0''@;'; put 'put ''YXJ0LTE7YS5hZnRlckZpcnN0VXNlfHwoYS5hZnRlckZpcnN0VXNlPSEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsbCxoKSYmKGgmJihkLl9maXhlZENvbHVtbnNTdGFydC09MSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhs''@;'; put 'put ''LGQuZml4ZWRDb2x1bW5zU3RhcnQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsbCxoKSl9YWRkQ29udGV4dE1lbnVFbnRyeShsKXtsLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIExGZShjKXtyZXR1cm57a2V5OiJmcmVlemVfY29sdW1u''@;'; put 'put ''IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShPVil9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MuZnJlZXplQ29sdW1uKGQpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGhpZGRlbigpe2NvbnN0''@;'; put 'put ''IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IGE9ITE7cmV0dXJuKHZvaWQgMD09PWx8fGwubGVuZ3RoPjF8fGxbMF0uZnJvbS5jb2whPT1sWzBdLnRvLmNvbHx8bFswXS5mcm9tLmNvbDw9dGhpcy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LTEpJiYoYT0hMCksYX19fSh0''@;'; put 'put ''aGlzKSxmdW5jdGlvbiBSRmUoYyl7cmV0dXJue2tleToidW5mcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShQVil9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MudW5mcmVlemVDb2x1bW4oZCksdGhpcy5yZW5kZXIo''@;'; put 'put ''KSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPj10aGlz''@;'; put 'put ''LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpJiYoYT0hMCksYX19fSh0aGlzKSl9b25CZWZvcmVDb2x1bW5Nb3ZlKGwsYSl7aWYoJHkuZ2V0KHRoaXMpLmFmdGVyRmlyc3RVc2Upe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtpZihhPGh8''@;'; put 'put ''fGwuc29tZShmPT5mPGgpKXJldHVybiExfX19Y29uc3QgUDc9InB4IixRaWU9Y2xhc3MgRkZle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MCx0aGlzLmlubGluZVByb3BlcnR5PWwuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1hcHBlbmRU''@;'; put 'put ''byhsKXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVu''@;'; put 'put ''ZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBv''@;'; put 'put ''c2l0aW9uKGwsYSl7R3UobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD1sK1A3KSxHdShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbdGhpcy5pbmxpbmVQcm9wZXJ0eV09YStQNyl9Z2V0UG9zaXRpb24oKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGU7cmV0dXJue3RvcDpsLnRvcD9w''@;'; put 'put ''YXJzZUludChsLnRvcCwxMCk6MCxzdGFydDpsW3RoaXMuaW5saW5lUHJvcGVydHldP3BhcnNlSW50KGxbdGhpcy5pbmxpbmVQcm9wZXJ0eV0sMTApOjB9fXNldFNpemUobCxhKXtHdShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtQNyksR3UoYSkmJih0aGlzLl9lbGVtZW50LnN0''@;'; put 'put ''eWxlLmhlaWdodD1hK1A3KX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5z''@;'; put 'put ''dHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEpe0d1KGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtQNyksR3UoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW2BtYXJnaW4ke2J1KHRoaXMuaW5saW5lUHJvcGVydHkpfWBdPWErUDcpfWdldE9mZnNldCgpe2NvbnN0''@;'; put 'put ''IGw9dGhpcy5fZWxlbWVudC5zdHlsZSxhPWBtYXJnaW4ke2J1KHRoaXMuaW5saW5lUHJvcGVydHkpfWA7cmV0dXJue3RvcDpsLm1hcmdpblRvcD9wYXJzZUludChsLm1hcmdpblRvcCwxMCk6MCxzdGFydDpsW2FdP3BhcnNlSW50KGxbYV0sMTApOjB9fX0sVkZlPWNsYXNzIE5GZSBleHRlbmRz''@;'; put 'put ''IFFpZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCkscGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodCIpfX0sekZlPWNsYXNzIGpGZSBleHRlbmRzIFFpZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCkscGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1v''@;'; put 'put ''dmUtLWd1aWRlbGluZSIpfX07c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbk1vdmUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Nb3ZlIik7Y29uc3QgZno9Im1hbnVhbENvbHVtbk1vdmUiLGk0PW5ldyBXZWFrTWFwLGVvZT0iaHRfX21h''@;'; put 'put ''bnVhbENvbHVtbk1vdmUiLExBPSJzaG93LXVpIixwej0ib24tbW92aW5nLS1jb2x1bW5zIixnej0iYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIjtjbGFzcyBaRmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZnp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFko''@;'; put 'put ''KXtyZXR1cm4gMTIwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGk0LnNldCh0aGlzLHtjb2x1bW5zVG9Nb3ZlOltdLGNvdW50Q29sczowLGZpeGVkQ29sdW1uczowLHByZXNzZWQ6dm9pZCAwLHRhcmdldDp7ZXZlbnRQYWdlWDp2b2lkIDAsY29vcmRzOnZvaWQgMCxURDp2b2lkIDAsY29sOnZv''@;'; put 'put ''aWQgMH0sY2FjaGVkRHJvcEluZGV4OnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmJhY2tsaWdodD1uZXcgVkZlKGwpLHRoaXMuZ3VpZGVsaW5lPW5ldyB6RmUobCl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2Z6XX1lbmFi''@;'; put 'put ''bGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNl''@;'; put 'put ''T3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLm9uQWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0''@;'; put 'put ''YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxwaSh0aGlzLmhvdC5yb290RWxlbWVudCxlb2UpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0''@;'; put 'put ''aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7V28odGhpcy5ob3Qucm9vdEVsZW1lbnQsZW9lKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmJh''@;'; put 'put ''Y2tsaWdodC5kZXN0cm95KCksdGhpcy5ndWlkZWxpbmUuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMubW92ZUNvbHVtbnMoW2xdLGEpfW1vdmVDb2x1bW5zKGwsYSl7Y29uc3QgZD1pNC5nZXQodGhpcyksaD1kLmNhY2hlZERyb3BJ''@;'; put 'put ''bmRleCxmPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxfPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Nb3ZlIixsLGEsaCxmKTtpZihkLmNhY2hlZERyb3BJbmRleD12b2lkIDAsITE9PT1fKXJldHVybjtmJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhs''@;'; put 'put ''LGEpO2NvbnN0IFQ9ZiYmdGhpcy5pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Nb3ZlIixsLGEsaCxmLFQpLFR9ZHJhZ0NvbHVtbihsLGEpe3JldHVybiB0aGlzLmRyYWdDb2x1bW5zKFtsXSxhKX1kcmFnQ29sdW1ucyhsLGEp''@;'; put 'put ''e2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4gaTQuZ2V0KHRoaXMpLmNhY2hlZERyb3BJbmRleD1hLHRoaXMubW92ZUNvbHVtbnMobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZElu''@;'; put 'put ''ZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCxfPWwuc29tZShXPT5XPDApLFQ9bC5zb21lKFc9Plc+PWQpO3JldHVybiEoaHx8Znx8X3x8VCl9aXNDb2x1bW5PcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1jb3VudEZpbmFsSW5kZXgobCxh''@;'; put 'put ''KXtjb25zdCBkPUFsKGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldENvbHVtbnNXaWR0aChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXI7bGV0IGg9MDtmb3IobGV0IGY9bDtmPD1hO2YrPTEpe2NvbnN0IF89ZC5nZXRSZW5kZXJhYmxlRnJv''@;'; put 'put ''bVZpc3VhbEluZGV4KGYpO2Y8MD9oKz10aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCl8fDA6bnVsbCE9PV8mJihoKz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKF8pfHwwKX1yZXR1cm4gaH1tb3ZlQnlTZXR0''@;'; put 'put ''aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtmel07aWYoQXJyYXkuaXNBcnJheShsKSl0aGlzLm1vdmVDb2x1bW5zKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0aGlzLm1vdmVD''@;'; put 'put ''b2x1bW5zKGEsMCl9fWlzRml4ZWRDb2x1bW5zU3RhcnQobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydH1wZXJzaXN0ZW50U3RhdGVTYXZlKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxDb2x1bW5Nb3Zl''@;'; put 'put ''Iix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9hZCgpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwibWFudWFsQ29sdW1uTW92ZSIsbCksbC52YWx1ZT9sLnZh''@;'; put 'put ''bHVlOltdfXByZXBhcmVDb2x1bW5zVG9Nb3ZpbmcobCxhKXtjb25zdCBkPVtdO3JldHVybiB2byhsLGEsaD0+e2QucHVzaChoKX0pLGR9cmVmcmVzaFBvc2l0aW9ucygpe2NvbnN0IGw9aTQuZ2V0KHRoaXMpLGE9dGhpcy5ob3Qudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpO3Ro''@;'; put 'put ''aXMuaXNGaXhlZENvbHVtbnNTdGFydChsLmhvdmVyZWRDb2x1bW4pJiZhPjAmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odm9pZCAwLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLTEsLTEpKTtjb25zdCBkPXRoaXMuaG90LnZpZXcuX3d0''@;'; put 'put ''Lnd0VGFibGUsaD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50LGY9Im51bWJlciI9PXR5cGVvZiBoLnNjcm9sbFg/aC5zY3JvbGxYOmguc2Nyb2xsTGVmdDtsZXQgXz10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldExlZnQrdGhpcy5nZXRDb2x1bW5zV2lk''@;'; put 'put ''dGgoMCxsLmhvdmVyZWRDb2x1bW4tMSk7Y29uc3QgVD1kLmhpZGVyLm9mZnNldFdpZHRoLFc9ZC5UQk9EWS5vZmZzZXRMZWZ0LGllPXRoaXMuYmFja2xpZ2h0LmdldE9mZnNldCgpLnN0YXJ0LGdlPXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS53aWR0aDtsZXQgd2U9MCxFZT0wO2lmKHRoaXMu''@;'; put 'put ''aG90LmlzUnRsKCkpe2NvbnN0IGV0PXRoaXMuaG90LnJvb3RXaW5kb3cseXQ9d2EodGhpcy5ob3Qucm9vdEVsZW1lbnQpO0VlPWV0LmlubmVyV2lkdGgtbC50YXJnZXQuZXZlbnRQYWdlWC0oZXQuaW5uZXJXaWR0aC1sLnJvb3RFbGVtZW50T2Zmc2V0LXl0KS0odm9pZCAwPT09aC5zY3JvbGxY''@;'; put 'put ''P2Y6MCl9ZWxzZSBFZT1sLnRhcmdldC5ldmVudFBhZ2VYLShsLnJvb3RFbGVtZW50T2Zmc2V0LSh2b2lkIDA9PT1oLnNjcm9sbFg/ZjowKSk7bC5oYXNSb3dIZWFkZXJzJiYod2U9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5n''@;'; put 'put ''ZXRDb2x1bW5IZWFkZXIoLTEpLm9mZnNldFdpZHRoKSx0aGlzLmlzRml4ZWRDb2x1bW5zU3RhcnQobC5ob3ZlcmVkQ29sdW1uKSYmKF8rPWYpLF8rPXdlLGwuaG92ZXJlZENvbHVtbjwwP2wudGFyZ2V0LmNvbD1sLmZpeGVkQ29sdW1uc1N0YXJ0PjA/MDphPjA/YS0xOmE6bC50YXJnZXQuVEQu''@;'; put 'put ''b2Zmc2V0V2lkdGgvMitfPD1FZT8obC50YXJnZXQuY29sPShsLmhvdmVyZWRDb2x1bW4+PWwuY291bnRDb2xzP2wuY291bnRDb2xzLTE6bC5ob3ZlcmVkQ29sdW1uKSsxLF8rPWwudGFyZ2V0LlRELm9mZnNldFdpZHRoKTpsLnRhcmdldC5jb2w9bC5ob3ZlcmVkQ29sdW1uO2xldCBaZT1FZSxv''@;'; put 'put ''dD1fO0VlK2dlK2llPj1UP1plPVQtZ2UtaWU6RWUraWU8Vyt3ZSYmKFplPVcrd2UrTWF0aC5hYnMoaWUpKSxfPj1ULTE/b3Q9VC0xOjA9PT1vdD9vdD0xOnZvaWQgMCE9PWguc2Nyb2xsWCYmbC5ob3ZlcmVkQ29sdW1uPGwuZml4ZWRDb2x1bW5zU3RhcnQmJihvdC09bC5yb290RWxlbWVudE9m''@;'; put 'put ''ZnNldDw9aC5zY3JvbGxYP2wucm9vdEVsZW1lbnRPZmZzZXQ6MCksdGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24obnVsbCxaZSksdGhpcy5ndWlkZWxpbmUuc2V0UG9zaXRpb24obnVsbCxvdCl9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9v''@;'; put 'put ''dERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT50aGlzLm9uTW91c2VNb3ZlKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT50aGlzLm9uTW91c2VVcCgpKX11bnJlZ2lzdGVyRXZl''@;'; put 'put ''bnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsXz10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksVD10aGlzLmhvdC5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlTGFzdCgpLFc9aTQuZ2V0KHRoaXMpLGllPUJvKGwudGFyZ2V0LCJzb3J0QWN0aW9uIik7aWYoIVR8fCFffHxXLnByZXNzZWR8fDAhPT1sLmJ1dHRvbnx8aWUpcmV0dXJuIFcucHJlc3NlZD0hMSxXLmNvbHVtbnNUb01vdmUubGVuZ3RoPTAsdm9pZCBXbyh0aGlzLmhvdC5yb290''@;'; put 'put ''RWxlbWVudCxbcHosTEFdKTtjb25zdCBnZT10aGlzLmd1aWRlbGluZS5pc0J1aWx0KCkmJiF0aGlzLmd1aWRlbGluZS5pc0FwcGVuZGVkKCksd2U9dGhpcy5iYWNrbGlnaHQuaXNCdWlsdCgpJiYhdGhpcy5iYWNrbGlnaHQuaXNBcHBlbmRlZCgpO2dlJiZ3ZSYmKHRoaXMuZ3VpZGVsaW5lLmFw''@;'; put 'put ''cGVuZFRvKGYuaGlkZXIpLHRoaXMuYmFja2xpZ2h0LmFwcGVuZFRvKGYuaGlkZXIpKTtjb25zdHtmcm9tOkVlLHRvOlplfT1ULG90PU1hdGgubWluKEVlLmNvbCxaZS5jb2wpLGV0PU1hdGgubWF4KEVlLmNvbCxaZS5jb2wpO2lmKGEucm93PDAmJmEuY29sPj1vdCYmYS5jb2w8PWV0KXtoLmNv''@;'; put 'put ''bHVtbj0hMCxXLnByZXNzZWQ9ITAsVy50YXJnZXQuZXZlbnRQYWdlWD1sLnBhZ2VYLFcudGFyZ2V0LmV2ZW50T2Zmc2V0WD1sLm9mZnNldFgsVy5ob3ZlcmVkQ29sdW1uPWEuY29sLFcudGFyZ2V0LlREPWQsVy50YXJnZXQuY29sPWEuY29sLFcuY29sdW1uc1RvTW92ZT10aGlzLnByZXBhcmVD''@;'; put 'put ''b2x1bW5zVG9Nb3Zpbmcob3QsZXQpLFcuaGFzUm93SGVhZGVycz0hIXRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVycyxXLmNvdW50Q29scz10aGlzLmhvdC5jb3VudENvbHMoKSxXLmZpeGVkQ29sdW1uc1N0YXJ0PXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3Rh''@;'; put 'put ''cnQsVy5yb290RWxlbWVudE9mZnNldD1xbCh0aGlzLmhvdC5yb290RWxlbWVudCkubGVmdDtjb25zdCB5dD1XLmhhc1Jvd0hlYWRlcnM/LTE6MCxrdD1mLmhvbGRlci5zY3JvbGxUb3ArZi5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMSxTdD1hLmNvbDxXLmZpeGVkQ29sdW1uc1N0YXJ0LFF0''@;'; put 'put ''PU1hdGguYWJzKHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCkpLG5uPU1hdGguYWJzKGwub2Zmc2V0WC0odGhpcy5ob3QuaXNSdGwoKT9sLnRhcmdldC5vZmZzZXRXaWR0aDowKSksbW49dGhpcy5nZXRDb2x1bW5zV2lk''@;'; put 'put ''dGgob3QsYS5jb2wtMSkrbm4sRW49dGhpcy5nZXRDb2x1bW5zV2lkdGgoeXQsb3QtMSkrKFN0P1F0OjApK21uO3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKGt0LEVuKSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKG90LGV0KSxmLmhpZGVyLm9mZnNldEhl''@;'; put 'put ''aWdodC1rdCksdGhpcy5iYWNrbGlnaHQuc2V0T2Zmc2V0KG51bGwsLW1uKSxwaSh0aGlzLmhvdC5yb290RWxlbWVudCxweil9ZWxzZSBXbyh0aGlzLmhvdC5yb290RWxlbWVudCxneiksVy5wcmVzc2VkPSExLFcuY29sdW1uc1RvTW92ZS5sZW5ndGg9MH1vbk1vdXNlTW92ZShsKXtjb25zdCBh''@;'; put 'put ''PWk0LmdldCh0aGlzKTtpZihhLnByZXNzZWQpe2lmKGwudGFyZ2V0PT09dGhpcy5iYWNrbGlnaHQuZWxlbWVudCl7Y29uc3QgZD10aGlzLmJhY2tsaWdodC5nZXRTaXplKCkud2lkdGg7dGhpcy5iYWNrbGlnaHQuc2V0U2l6ZSgwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5iYWNrbGln''@;'; put 'put ''aHQuc2V0UG9zaXRpb24oZCl9KX1hLnRhcmdldC5ldmVudFBhZ2VYPWwucGFnZVgsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9fW9uQmVmb3JlT25DZWxsTW91c2VPdmVyKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxfPWk0LmdldCh0aGlzKTshZnx8''@;'; put 'put ''IV8ucHJlc3NlZHx8KF8uY29sdW1uc1RvTW92ZS5pbmRleE9mKGEuY29sKT4tMT9Xbyh0aGlzLmhvdC5yb290RWxlbWVudCxMQSk6cGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsTEEpLGgucm93PSEwLGguY29sdW1uPSEwLGguY2VsbD0hMCxfLmhvdmVyZWRDb2x1bW49YS5jb2wsXy50YXJnZXQu''@;'; put 'put ''VEQ9ZCl9b25Nb3VzZVVwKCl7Y29uc3QgbD1pNC5nZXQodGhpcyksYT1sLnRhcmdldC5jb2wsZD1sLmNvbHVtbnNUb01vdmUubGVuZ3RoO2lmKGwuaG92ZXJlZENvbHVtbj12b2lkIDAsbC5wcmVzc2VkPSExLGwuYmFja2xpZ2h0V2lkdGg9MCxXbyh0aGlzLmhvdC5yb290RWxlbWVudCxbcHos''@;'; put 'put ''TEEsZ3pdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJnBpKHRoaXMuaG90LnJvb3RFbGVtZW50LGd6KSxkPDF8fHZvaWQgMD09PWEpcmV0dXJuO2NvbnN0IGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsLmNvbHVtbnNUb01vdmVbMF0pLF89dGhp''@;'; put 'put ''cy5kcmFnQ29sdW1ucyhsLmNvbHVtbnNUb01vdmUsYSk7aWYobC5jb2x1bW5zVG9Nb3ZlLmxlbmd0aD0wLCEwPT09Xyl7dGhpcy5wZXJzaXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApO2NvbnN0IFQ9dGhpcy5o''@;'; put 'put ''b3QudG9WaXN1YWxDb2x1bW4oZik7dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhULFQrZC0xKX19b25BZnRlclNjcm9sbFZlcnRpY2FsbHkoKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsaD1sLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxK2wuaG9sZGVyLnNjcm9sbFRvcDt0''@;'; put 'put ''aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihoKSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKG51bGwsbC5oaWRlci5vZmZzZXRIZWlnaHQtaCl9YnVpbGRQbHVnaW5VSSgpe3RoaXMuYmFja2xpZ2h0LmJ1aWxkKCksdGhpcy5ndWlkZWxpbmUuYnVpbGQoKX1vbkFmdGVyTG9hZERhdGEoKXt0aGlz''@;'; put 'put ''Lm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZGVzdHJveSgpe3RoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlzLmd1aWRlbGluZS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBSQT0ibWFudWFsQ29sdW1uUmVzaXplIix0b2U9Im1hbnVhbENvbHVtbldpZHRocyIsbXo9bmV3IFdl''@;'; put 'put ''YWtNYXA7Y2xhc3MgV0ZlIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFJBfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKTtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3Q7dGhpcy5jdXJy''@;'; put 'put ''ZW50VEg9bnVsbCx0aGlzLmN1cnJlbnRDb2w9bnVsbCx0aGlzLnNlbGVjdGVkQ29scz1bXSx0aGlzLmN1cnJlbnRXaWR0aD1udWxsLHRoaXMubmV3U2l6ZT1udWxsLHRoaXMuc3RhcnRZPW51bGwsdGhpcy5zdGFydFdpZHRoPW51bGwsdGhpcy5zdGFydE9mZnNldD1udWxsLHRoaXMuaGFuZGxl''@;'; put 'put ''PWEuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5ndWlkZT1hLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLnByZXNzZWQ9bnVsbCx0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITEsdGhpcy5kYmxjbGljaz0wLHRoaXMuYXV0b3Jlc2l6ZVRp''@;'; put 'put ''bWVvdXQ9bnVsbCx0aGlzLmNvbHVtbldpZHRoc01hcD12b2lkIDAsbXouc2V0KHRoaXMse2NvbmZpZzp2b2lkIDB9KSxwaSh0aGlzLmhhbmRsZSwibWFudWFsQ29sdW1uUmVzaXplciIpLHBpKHRoaXMuZ3VpZGUsIm1hbnVhbENvbHVtblJlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtSQV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5jb2x1bW5XaWR0aHNNYXA9bmV3IFdwLHRoaXMuY29sdW1uV2lkdGhzTWFwLmFk''@;'; put 'put ''ZExvY2FsSG9vaygiaW5pdCIsKCk9PnRoaXMub25NYXBJbml0KCkpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSx0aGlzLmNvbHVtbldpZHRoc01hcCksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGwsYSk9PnRoaXMub25Nb2Rp''@;'; put 'put ''ZnlDb2xXaWR0aChsLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsKGwsYSk9PnRoaXMub25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgobCxhKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChsLGEsZCk9PnRoaXMub25CZWZvcmVD''@;'; put 'put ''b2x1bW5SZXNpemUobCxhLGQpKSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7bXouZ2V0KHRoaXMp''@;'; put 'put ''LmNvbmZpZz10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZXMoKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKXt0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''cGVyc2lzdGVudFN0YXRlU2F2ZSIsdG9lLHRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpKX1sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLHRvZSxsKSxsLnZhbHVlfXNldE1hbnVh''@;'; put 'put ''bFNpemUobCxhKXtjb25zdCBkPU1hdGgubWF4KGEsMjApLGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gdGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGgsZCksZH1jbGVhck1hbnVhbFNpemUobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29s''@;'; put 'put ''dW1uKGwpO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChhLG51bGwpfW9uTWFwSW5pdCgpe2NvbnN0IGw9bXouZ2V0KHRoaXMpLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtSQV0sZD10aGlzLmxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKTt0eXBlb2YgZDwidSI/dGhpcy5o''@;'; put 'put ''b3QuYmF0Y2hFeGVjdXRpb24oKCk9PntkLmZvckVhY2goKGgsZik9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCk6QXJyYXkuaXNBcnJheShhKT8odGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PnthLmZvckVhY2goKGgsZik9Pnt0aGlzLmNvbHVt''@;'; put 'put ''bldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCksbC5jb25maWc9YSk6ITA9PT1hJiZBcnJheS5pc0FycmF5KGwuY29uZmlnKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmNvbmZpZy5mb3JFYWNoKChoLGYpPT57dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFs''@;'; put 'put ''dWVBdEluZGV4KGYsaCl9KX0sITApfXNldHVwSGFuZGxlUG9zaXRpb24obCl7aWYoIWwucGFyZW50Tm9kZSlyZXR1cm47dGhpcy5jdXJyZW50VEg9bDtjb25zdHtfd3Q6YX09dGhpcy5ob3QudmlldyxkPWEud3RUYWJsZS5nZXRDb29yZHModGhpcy5jdXJyZW50VEgpLGg9ZC5jb2w7aWYoaDww''@;'; put 'put ''KXJldHVybjtjb25zdCBmPWFsKHRoaXMuY3VycmVudFRIKSxfPXRoaXMuY3VycmVudFRILmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBXO2g8YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpJiYoVz1hLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Lmdl''@;'; put 'put ''dFJlbGF0aXZlQ2VsbFBvc2l0aW9uKHRoaXMuY3VycmVudFRILGQucm93LGQuY29sKSksV3x8KFc9YS53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5jdXJyZW50VEgsZC5yb3csZC5jb2wpKSx0aGlzLmN1cnJlbnRDb2w9dGhpcy5ob3QuY29sdW1u''@;'; put 'put ''SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKSx0aGlzLnNlbGVjdGVkQ29scz1bXTtjb25zdCBpZT10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTt0aGlz''@;'; put 'put ''LmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZpZSYmSW4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLHdlPT57dm8od2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsd2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLG90PT57dGhpcy5zZWxlY3RlZENvbHMuaW5jbHVkZXMob3QpfHx0''@;'; put 'put ''aGlzLnNlbGVjdGVkQ29scy5wdXNoKG90KX0pfSksdGhpcy5zZWxlY3RlZENvbHMuaW5jbHVkZXModGhpcy5jdXJyZW50Q29sKXx8KHRoaXMuc2VsZWN0ZWRDb2xzPVt0aGlzLmN1cnJlbnRDb2xdKSx0aGlzLnN0YXJ0T2Zmc2V0PVcuc3RhcnQtNix0aGlzLnN0YXJ0V2lkdGg9cGFyc2VJbnQo''@;'; put 'put ''Xy53aWR0aCwxMCksdGhpcy5oYW5kbGUuc3R5bGUudG9wPWAke1cudG9wfXB4YCx0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7dGhpcy5zdGFydE9mZnNldCt0aGlzLnN0YXJ0V2lkdGh9cHhgLHRoaXMuaGFuZGxlLnN0eWxlLmhlaWdodD1gJHtmfXB4YCx0aGlzLmhvdC5y''@;'; put 'put ''b290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhhbmRsZSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7dGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke3RoaXMuc3RhcnRPZmZzZXQrdGhpcy5jdXJyZW50V2lkdGh9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9''@;'; put 'put ''cGFyc2VJbnQoYWwodGhpcy5oYW5kbGUpLDEwKSxhPXBhcnNlSW50KHRoaXMuaGFuZGxlLnN0eWxlLnRvcCwxMCkrbCxkPXBhcnNlSW50KHRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50SGVpZ2h0KDApLDEwKTtwaSh0aGlzLmhhbmRsZSwiYWN0aXZlIikscGkodGhpcy5ndWlk''@;'; put 'put ''ZSwiYWN0aXZlIiksdGhpcy5ndWlkZS5zdHlsZS50b3A9YCR7YX1weGAsdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpLHRoaXMuZ3VpZGUuc3R5bGUuaGVpZ2h0PWQtbCsicHgiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ3VpZGUpfXJlZnJlc2hHdWlkZVBvc2l0''@;'; put 'put ''aW9uKCl7dGhpcy5ndWlkZS5zdHlsZVt0aGlzLmlubGluZURpcl09dGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdfWhpZGVIYW5kbGVBbmRHdWlkZSgpe1dvKHRoaXMuaGFuZGxlLCJhY3RpdmUiKSxXbyh0aGlzLmd1aWRlLCJhY3RpdmUiKX1jaGVja0lmQ29sdW1uSGVhZGVyKGwp''@;'; put 'put ''e3JldHVybiEhTnAobCxbIlRIRUFEIl0sdGhpcy5ob3Qucm9vdEVsZW1lbnQpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09bC50YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnBhcmVudE5vZGUpOm51bGx9b25Nb3VzZU92''@;'; put 'put ''ZXIobCl7aWYoIWdOKGwudGFyZ2V0KSYmITAhPT10aGlzLmlzVHJpZ2dlcmVkQnlSTUImJnRoaXMuY2hlY2tJZkNvbHVtbkhlYWRlcihsLnRhcmdldCkpe2NvbnN0IGE9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC50YXJnZXQpO2lmKCFhKXJldHVybjtjb25zdCBkPWEuZ2V0QXR0cmlidXRl''@;'; put 'put ''KCJjb2xzcGFuIik7YSYmKG51bGw9PT1kfHwiMSI9PT1kKSYmKHRoaXMucHJlc3NlZHx8dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGEpKX19YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRl''@;'; put 'put ''cigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sYT0oZCxoKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsdGhpcy5uZXdTaXplLGQsITApO3ZvaWQgMCE9PWYmJih0aGlzLm5ld1NpemU9ZiksImFsbCI9PT10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLnN0cmV0Y2hIP3RoaXMuY2xlYXJNYW51YWxTaXplKGQpOnRoaXMuc2V0TWFudWFsU2l6ZShkLHRoaXMubmV3U2l6ZSksdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIix0aGlzLm5ld1NpemUsZCwh''@;'; put 'put ''MCksaCYmbCgpfTt0aGlzLmRibGNsaWNrPj0yJiYodGhpcy5zZWxlY3RlZENvbHMubGVuZ3RoPjE/KEluKHRoaXMuc2VsZWN0ZWRDb2xzLGg9PnthKGgpfSksbCgpKTpJbih0aGlzLnNlbGVjdGVkQ29scyxoPT57YShoLCEwKX0pKSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGlt''@;'; put 'put ''ZW91dD1udWxsfW9uTW91c2VEb3duKGwpe0JvKGwudGFyZ2V0LCJtYW51YWxDb2x1bW5SZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksdGhpcy5wcmVzc2VkPSEwLG51bGw9PT10aGlzLmF1dG9yZXNp''@;'; put 'put ''emVUaW1lb3V0JiYodGhpcy5hdXRvcmVzaXplVGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCh0aGlzLmF1dG9yZXNpemVUaW1lb3V0KSksdGhpcy5kYmxjbGljays9MSx0aGlzLnN0YXJ0WD1s''@;'; put 'put ''LnBhZ2VYLHRoaXMubmV3U2l6ZT10aGlzLnN0YXJ0V2lkdGgpfW9uTW91c2VNb3ZlKGwpe2lmKHRoaXMucHJlc3NlZCl7Y29uc3QgYT0obC5wYWdlWC10aGlzLnN0YXJ0WCkqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCk7dGhpcy5jdXJyZW50V2lkdGg9dGhpcy5zdGFydFdpZHRoK2Es''@;'; put 'put ''SW4odGhpcy5zZWxlY3RlZENvbHMsZD0+e3RoaXMubmV3U2l6ZT10aGlzLnNldE1hbnVhbFNpemUoZCx0aGlzLmN1cnJlbnRXaWR0aCl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKX19b25Nb3VzZVVwKCl7Y29uc3QgbD0oKT0+e3Ro''@;'; put 'put ''aXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sYT0oZCxoKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5SZXNpemUiLHRoaXMubmV3U2l6ZSxkLCExKSxoJiZsKCksdGhp''@;'; put 'put ''cy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIix0aGlzLm5ld1NpemUsZCwhMSl9O3RoaXMucHJlc3NlZCYmKHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5wcmVzc2VkPSExLHRoaXMubmV3U2l6ZSE9PXRoaXMuc3Rh''@;'; put 'put ''cnRXaWR0aCYmKHRoaXMuc2VsZWN0ZWRDb2xzLmxlbmd0aD4xPyhJbih0aGlzLnNlbGVjdGVkQ29scyxoPT57YShoKX0pLGwoKSk6SW4odGhpcy5zZWxlY3RlZENvbHMsaD0+e2EoaCwhMCl9KSksdGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKHRoaXMuY3VycmVudFRIKSl9b25Db250ZXh0TWVu''@;'; put 'put ''dSgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5oYW5kbGUpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZ3VpZGUpLHRoaXMucHJlc3NlZD0hMSx0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITAsdGhp''@;'; put 'put ''cy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57dGhpcy5pc1RyaWdnZXJlZEJ5Uk1CPSExfSl9YmluZEV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RWxlbWVudDphfT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlb3ZlciIsZD0+''@;'; put 'put ''dGhpcy5vbk1vdXNlT3ZlcihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGQ9PnRoaXMub25Nb3VzZURvd24oZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixkPT50aGlzLm9uTW91c2VNb3ZlKGQp''@;'; put 'put ''KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT50aGlzLm9uTW91c2VVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaGFuZGxlLCJjb250ZXh0bWVudSIsKCk9PnRoaXMub25Db250ZXh0TWVudSgpKX1vbk1vZGlm''@;'; put 'put ''eUNvbFdpZHRoKGwsYSl7bGV0IGQ9bDtpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKSxmPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChoKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1JBXSYmZiYmKGQ9Zil9cmV0dXJuIGR9''@;'; put 'put ''b25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgobCxhKXtsZXQgZD10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoYSk7cmV0dXJuIG51bGw9PT1kJiYoZD1sKSxkfW9uQmVmb3JlQ29sdW1uUmVzaXplKCl7dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhh''@;'; put 'put ''c092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCBGNz0icHgiLGlvZT1jbGFzcyBHRmV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3Q9bCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWFwcGVuZFRvKGwpe2wuYXBwZW5k''@;'; put 'put ''Q2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5zdGF0ZT0yfWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5f''@;'; put 'put ''ZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5zdGF0ZX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXt2''@;'; put 'put ''b2lkIDAhPT1sJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9bCtGNyksdm9pZCAwIT09YSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD1hK0Y3KX1nZXRQb3NpdGlvbigpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVudC5zdHlsZS50b3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS50''@;'; put 'put ''b3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0LDEwKTowfX1zZXRTaXplKGwsYSl7bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtGNyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWErRjcp''@;'; put 'put ''fWdldFNpemUoKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6''@;'; put 'put ''MH19c2V0T2Zmc2V0KGwsYSl7bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPWwrRjcpLGEmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ9YStGNyl9Z2V0T2Zmc2V0KCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD9wYXJzZUludCh0aGlz''@;'; put 'put ''Ll9lbGVtZW50LnN0eWxlLm1hcmdpblRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQsMTApOjB9fX0sS0ZlPWNsYXNzIHFGZSBleHRlbmRzIGlvZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCks''@;'; put 'put ''cGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodCIpfX0sUUZlPWNsYXNzIEpGZSBleHRlbmRzIGlvZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCkscGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSIpfX07c28uZ2V0U2luZ2xldG9u''@;'; put 'put ''KCkucmVnaXN0ZXIoImJlZm9yZVJvd01vdmUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJSb3dNb3ZlIik7Y29uc3QgX3o9Im1hbnVhbFJvd01vdmUiLG80PW5ldyBXZWFrTWFwLG9vZT0iaHRfX21hbnVhbFJvd01vdmUiLE9BPSJzaG93LXVpIixiej0ib24tbW92aW5nLS1y''@;'; put 'put ''b3dzIix5ej0iYWZ0ZXItc2VsZWN0aW9uLS1yb3dzIjtjbGFzcyB0SGUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gX3p9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTQwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLG80LnNldCh0aGlzLHty''@;'; put 'put ''b3dzVG9Nb3ZlOltdLHByZXNzZWQ6dm9pZCAwLHRhcmdldDp7ZXZlbnRQYWdlWTp2b2lkIDAsY29vcmRzOnZvaWQgMCxURDp2b2lkIDAscm93OnZvaWQgMH0sY2FjaGVkRHJvcEluZGV4OnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmJhY2tsaWdodD1uZXcg''@;'; put 'put ''S0ZlKGwpLHRoaXMuZ3VpZGVsaW5lPW5ldyBRRmUobCl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW196XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJh''@;'; put 'put ''ZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMub25BZnRlclNjcm9sbEhvcml6b250YWxseSgpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0''@;'; put 'put ''aGlzLnJlZ2lzdGVyRXZlbnRzKCkscGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsb29lKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBk''@;'; put 'put ''YXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe1dvKHRoaXMuaG90LnJvb3RFbGVtZW50LG9vZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5iYWNrbGlnaHQuZGVzdHJveSgpLHRoaXMuZ3VpZGVsaW5lLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZVJvdyhsLGEp''@;'; put 'put ''e3JldHVybiB0aGlzLm1vdmVSb3dzKFtsXSxhKX1tb3ZlUm93cyhsLGEpe2NvbnN0IGQ9bzQuZ2V0KHRoaXMpLGg9ZC5jYWNoZWREcm9wSW5kZXgsZj10aGlzLmlzTW92ZVBvc3NpYmxlKGwsYSksXz10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93TW92ZSIsbCxhLGgsZik7aWYoZC5jYWNo''@;'; put 'put ''ZWREcm9wSW5kZXg9dm9pZCAwLCExPT09XylyZXR1cm47ZiYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhKTtjb25zdCBUPWYmJnRoaXMuaXNSb3dPcmRlckNoYW5nZWQobCxhKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGgsZixU''@;'; put 'put ''KSxUfWRyYWdSb3cobCxhKXtyZXR1cm4gdGhpcy5kcmFnUm93cyhbbF0sYSl9ZHJhZ1Jvd3MobCxhKXtjb25zdCBkPXRoaXMuY291bnRGaW5hbEluZGV4KGwsYSk7cmV0dXJuIG80LmdldCh0aGlzKS5jYWNoZWREcm9wSW5kZXg9YSx0aGlzLm1vdmVSb3dzKGwsZCl9aXNNb3ZlUG9zc2libGUo''@;'; put 'put ''bCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaD1sLmxlbmd0aCthPmQsZj1hPDAsXz1sLnNvbWUoVz0+VzwwKSxUPWwuc29tZShXPT5XPj1kKTtyZXR1cm4hKGh8fGZ8fF98fFQpfWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7''@;'; put 'put ''cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9Y291bnRGaW5hbEluZGV4KGwsYSl7Y29uc3QgZD1BbChsLChoLGYpPT4oZjxhJiYoaCs9MSksaCksMCk7cmV0dXJuIGEtZH1nZXRSb3dzSGVpZ2h0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcjtsZXQgaD0wO2Zvcihs''@;'; put 'put ''ZXQgZj1sO2Y8PWE7ZisrKXtjb25zdCBfPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtudWxsIT09XyYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KF8pfHwyMyl9cmV0dXJuIGh9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBsPXRoaXMu''@;'; put 'put ''aG90LmdldFNldHRpbmdzKClbX3pdO2lmKEFycmF5LmlzQXJyYXkobCkpdGhpcy5tb3ZlUm93cyhsLDApO2Vsc2UgaWYodm9pZCAwIT09bCl7Y29uc3QgYT10aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTthLmxlbmd0aCYmdGhpcy5tb3ZlUm93cyhhLDApfX1pc0ZpeGVkUm93VG9wKGwpe3Jl''@;'; put 'put ''dHVybiBsPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wfWlzRml4ZWRSb3dCb3R0b20obCl7cmV0dXJuIGw+dGhpcy5ob3QuY291bnRSb3dzKCktMS10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbX1wZXJzaXN0ZW50U3RhdGVTYXZlKCl7dGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxSb3dNb3ZlIix0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9hZCgpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3Rh''@;'; put 'put ''dGVMb2FkIiwibWFudWFsUm93TW92ZSIsbCksbC52YWx1ZT9sLnZhbHVlOltdfXByZXBhcmVSb3dzVG9Nb3ZpbmcoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1bXTtpZighbClyZXR1cm4gYTtjb25zdHtmcm9tOmQsdG86aH09bDtyZXR1cm4gdm8oTWF0aC5t''@;'; put 'put ''aW4oZC5yb3csaC5yb3cpLE1hdGgubWF4KGQucm93LGgucm93KSxUPT57YS5wdXNoKFQpfSksYX1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD1vNC5nZXQodGhpcyksYT1sLnRhcmdldC5jb29yZHMsZD10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksaD10aGlzLmhv''@;'; put 'put ''dC52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKSxmPXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMuaXNGaXhlZFJvd1RvcChhLnJvdykmJmQ+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0x''@;'; put 'put ''LC0xKSksdGhpcy5pc0ZpeGVkUm93Qm90dG9tKGEucm93KSYmaDxmJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoKzEsMSksdm9pZCAwLCEwKTtjb25zdCBfPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFi''@;'; put 'put ''bGUsVD1sLnRhcmdldC5URCxXPXRoaXMuaG90LnJvb3RFbGVtZW50LGllPXFsKFcpLGdlPXZnKFcpO2xldCBFZTtFZT10aGlzLmhvdC5yb290V2luZG93PT09Z2U/Z2Uuc2Nyb2xsWTpnZS5zY3JvbGxUb3A7Y29uc3Qgb3Q9bC50YXJnZXQuZXZlbnRQYWdlWS0oaWUudG9wLUVlKStfLmhvbGRl''@;'; put 'put ''ci5zY3JvbGxUb3AsZXQ9Xy5oaWRlci5vZmZzZXRIZWlnaHQseXQ9Xy5UQk9EWS5vZmZzZXRUb3Asa3Q9dGhpcy5iYWNrbGlnaHQuZ2V0T2Zmc2V0KCkudG9wLFN0PXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS5oZWlnaHQsUXQ9VC5vZmZzZXRIZWlnaHQvMixubj1ULm9mZnNldEhlaWdodDts''@;'; put 'put ''ZXQgbW49dGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRIZWlnaHQrdGhpcy5nZXRSb3dzSGVpZ2h0KDAsYS5yb3ctMSk7Y29uc3QgRW49b3Q+PW1uK1F0O3RoaXMuaXNGaXhlZFJvd1RvcChhLnJvdykmJihtbis9Xy5ob2xkZXIuc2Nyb2xsVG9wKSxhLnJvdzwwP2wudGFyZ2V0LnJvdz1kPjA/''@;'; put 'put ''ZC0xOmQ6RW4/KGwudGFyZ2V0LnJvdz1hLnJvdysxLG1uKz0wPT09YS5yb3c/bm4tMTpubik6bC50YXJnZXQucm93PWEucm93O2xldCBscj1vdCxWcj1tbjtvdCtTdCtrdD49ZXQ/bHI9ZXQtU3Qta3Q6b3Qra3Q8eXQmJihscj15dCtNYXRoLmFicyhrdCkpLG1uPj1ldC0xJiYoVnI9ZXQtMSks''@;'; put 'put ''dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24obHIpLHRoaXMuZ3VpZGVsaW5lLnNldFBvc2l0aW9uKFZyKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJt''@;'; put 'put ''b3VzZW1vdmUiLGE9PnRoaXMub25Nb3VzZU1vdmUoYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfW9uQmVmb3JlT25DZWxsTW91''@;'; put 'put ''c2VEb3duKGwsYSxkLGgpe2NvbnN0e3d0VGFibGU6Zix3dFZpZXdwb3J0Ol99PXRoaXMuaG90LnZpZXcuX3d0LFQ9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFc9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxpZT1vNC5nZXQodGhpcyk7aWYoIVd8''@;'; put 'put ''fCFUfHxpZS5wcmVzc2VkfHwwIT09bC5idXR0b24pcmV0dXJuIGllLnByZXNzZWQ9ITEsaWUucm93c1RvTW92ZS5sZW5ndGg9MCx2b2lkIFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtieixPQV0pO2NvbnN0IGdlPXRoaXMuZ3VpZGVsaW5lLmlzQnVpbHQoKSYmIXRoaXMuZ3VpZGVsaW5lLmlz''@;'; put 'put ''QXBwZW5kZWQoKSx3ZT10aGlzLmJhY2tsaWdodC5pc0J1aWx0KCkmJiF0aGlzLmJhY2tsaWdodC5pc0FwcGVuZGVkKCk7Z2UmJndlJiYodGhpcy5ndWlkZWxpbmUuYXBwZW5kVG8oZi5oaWRlciksdGhpcy5iYWNrbGlnaHQuYXBwZW5kVG8oZi5oaWRlcikpO2NvbnN0e2Zyb206RWUsdG86WmV9''@;'; put 'put ''PVcsb3Q9TWF0aC5taW4oRWUucm93LFplLnJvdyksZXQ9TWF0aC5tYXgoRWUucm93LFplLnJvdyk7aWYoYS5jb2w8MCYmYS5yb3c+PW90JiZhLnJvdzw9ZXQpe2gucm93PSEwLGllLnByZXNzZWQ9ITAsaWUudGFyZ2V0LmV2ZW50UGFnZVk9bC5wYWdlWSxpZS50YXJnZXQuY29vcmRzPWEsaWUu''@;'; put 'put ''dGFyZ2V0LlREPWQsaWUucm93c1RvTW92ZT10aGlzLnByZXBhcmVSb3dzVG9Nb3ZpbmcoKTtjb25zdCB5dD1mLmhvbGRlci5zY3JvbGxMZWZ0K18uZ2V0Um93SGVhZGVyV2lkdGgoKTt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihudWxsLHl0KSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKGYu''@;'; put 'put ''aGlkZXIub2Zmc2V0V2lkdGgteXQsdGhpcy5nZXRSb3dzSGVpZ2h0KG90LGV0KSksdGhpcy5iYWNrbGlnaHQuc2V0T2Zmc2V0KC0xKih0aGlzLmdldFJvd3NIZWlnaHQob3QsYS5yb3ctMSkrbC5vZmZzZXRZKSxudWxsKSxwaSh0aGlzLmhvdC5yb290RWxlbWVudCxieiksdGhpcy5yZWZyZXNo''@;'; put 'put ''UG9zaXRpb25zKCl9ZWxzZSBXbyh0aGlzLmhvdC5yb290RWxlbWVudCx5eiksaWUucHJlc3NlZD0hMSxpZS5yb3dzVG9Nb3ZlLmxlbmd0aD0wfW9uTW91c2VNb3ZlKGwpe2NvbnN0IGE9bzQuZ2V0KHRoaXMpO2lmKGEucHJlc3NlZCl7aWYobC50YXJnZXQ9PT10aGlzLmJhY2tsaWdodC5lbGVt''@;'; put 'put ''ZW50KXtjb25zdCBkPXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS5oZWlnaHQ7dGhpcy5iYWNrbGlnaHQuc2V0U2l6ZShudWxsLDApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihudWxsLGQpfSl9YS50YXJnZXQuZXZlbnRQYWdlWT1sLnBhZ2VZLHRo''@;'; put 'put ''aXMucmVmcmVzaFBvc2l0aW9ucygpfX1vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlcihsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksXz1vNC5nZXQodGhpcyk7IWZ8fCFfLnByZXNzZWR8fChfLnJvd3NUb01vdmUuaW5kZXhPZihhLnJvdyk+LTE/V28odGhp''@;'; put 'put ''cy5ob3Qucm9vdEVsZW1lbnQsT0EpOnBpKHRoaXMuaG90LnJvb3RFbGVtZW50LE9BKSxoLnJvdz0hMCxoLmNvbHVtbj0hMCxoLmNlbGw9ITAsXy50YXJnZXQuY29vcmRzPWEsXy50YXJnZXQuVEQ9ZCl9b25Nb3VzZVVwKCl7Y29uc3QgbD1vNC5nZXQodGhpcyksYT1sLnRhcmdldC5yb3csZD1s''@;'; put 'put ''LnJvd3NUb01vdmUubGVuZ3RoO2lmKGwucHJlc3NlZD0hMSxsLmJhY2tsaWdodEhlaWdodD0wLFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtieixPQSx5el0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmcGkodGhpcy5ob3Qucm9vdEVsZW1lbnQseXopLGQ8''@;'; put 'put ''MXx8dm9pZCAwPT09YSlyZXR1cm47Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwucm93c1RvTW92ZVswXSksXz10aGlzLmRyYWdSb3dzKGwucm93c1RvTW92ZSxhKTtpZihsLnJvd3NUb01vdmUubGVuZ3RoPTAsITA9PT1fKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlz''@;'; put 'put ''LmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCk7Y29uc3QgVD10aGlzLmhvdC50b1Zpc3VhbFJvdyhmKTt0aGlzLmhvdC5zZWxlY3RSb3dzKFQsVCtkLTEpfX1vbkFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5KCl7Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93''@;'; put 'put ''dC53dFRhYmxlLGg9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpK2wuaG9sZGVyLnNjcm9sbExlZnQ7dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24obnVsbCxoKSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKGwuaGlkZXIub2Zmc2V0V2lkdGgtaCl9YnVp''@;'; put 'put ''bGRQbHVnaW5VSSgpe3RoaXMuYmFja2xpZ2h0LmJ1aWxkKCksdGhpcy5ndWlkZWxpbmUuYnVpbGQoKX1vbkFmdGVyTG9hZERhdGEoKXt0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZGVzdHJveSgpe3RoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlzLmd1aWRlbGluZS5kZXN0cm95KCks''@;'; put 'put ''c3VwZXIuZGVzdHJveSgpfX1jb25zdCBQQT0ibWFudWFsUm93UmVzaXplIixzb2U9Im1hbnVhbFJvd0hlaWdodHMiLHd6PW5ldyBXZWFrTWFwO2NsYXNzIHJIZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBQQX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgp''@;'; put 'put ''e3JldHVybiAzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKTtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3Q7dGhpcy5jdXJyZW50VEg9bnVsbCx0aGlzLmN1cnJlbnRSb3c9bnVsbCx0aGlzLnNlbGVjdGVkUm93cz1bXSx0aGlzLmN1cnJlbnRIZWlnaHQ9bnVsbCx0aGlzLm5ld1NpemU9''@;'; put 'put ''bnVsbCx0aGlzLnN0YXJ0WT1udWxsLHRoaXMuc3RhcnRIZWlnaHQ9bnVsbCx0aGlzLnN0YXJ0T2Zmc2V0PW51bGwsdGhpcy5oYW5kbGU9YS5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmd1aWRlPWEuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMp''@;'; put 'put ''LHRoaXMucHJlc3NlZD1udWxsLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGltZW91dD1udWxsLHRoaXMucm93SGVpZ2h0c01hcD12b2lkIDAsd3ouc2V0KHRoaXMse2NvbmZpZzp2b2lkIDB9KSxwaSh0aGlzLmhhbmRsZSwibWFudWFs''@;'; put 'put ''Um93UmVzaXplciIpLHBpKHRoaXMuZ3VpZGUsIm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQQV19ZW5hYmxlUGx1Z2lu''@;'; put 'put ''KCl7dGhpcy5lbmFibGVkfHwodGhpcy5yb3dIZWlnaHRzTWFwPW5ldyBXcCx0aGlzLnJvd0hlaWdodHNNYXAuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dGhpcy5vbk1hcEluaXQoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLHRoaXMucm93''@;'; put 'put ''SGVpZ2h0c01hcCksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChsLGEpPT50aGlzLm9uTW9kaWZ5Um93SGVpZ2h0KGwsYSkpLHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJs''@;'; put 'put ''ZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt3ei5nZXQodGhpcykuY29uZmlnPXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpfXNhdmVNYW51YWxSb3dIZWlnaHRzKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLHNvZSx0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCkpfWxvYWRNYW51YWxSb3dIZWlnaHRzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9v''@;'; put 'put ''a3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLHNvZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD1NYXRoLm1heChhLG9uZS5ERUZBVUxUX0hFSUdIVCk7cmV0dXJuIHRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5k''@;'; put 'put ''ZXgoZCxoKSxofXNldHVwSGFuZGxlUG9zaXRpb24obCl7dGhpcy5jdXJyZW50VEg9bDtjb25zdHt2aWV3OmF9PXRoaXMuaG90LHtfd3Q6ZH09YSxoPWQud3RUYWJsZS5nZXRDb29yZHModGhpcy5jdXJyZW50VEgpLGY9aC5yb3c7aWYoZjwwKXJldHVybjtjb25zdCBfPXdhKHRoaXMuY3VycmVu''@;'; put 'put ''dFRIKSxUPXRoaXMuY3VycmVudFRILmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFc9ZjxkLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGllPWY+PWEuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKDAsMSktZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTtsZXQgZ2U7Vz9nZT1kLnd0''@;'; put 'put ''T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKHRoaXMuY3VycmVudFRILGgucm93LGguY29sKTppZSYmKGdlPWQud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24o''@;'; put 'put ''dGhpcy5jdXJyZW50VEgsaC5yb3csaC5jb2wpKSxnZXx8KGdlPWQud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5jdXJyZW50VEgsaC5yb3csaC5jb2wpKSx0aGlzLmN1cnJlbnRSb3c9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0''@;'; put 'put ''VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSx0aGlzLnNlbGVjdGVkUm93cz1bXTtjb25zdCB3ZT10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNT''@;'; put 'put ''ZWxlY3RlZCgpJiZ3ZSYmSW4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLFplPT57dm8oWmUuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csWmUuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKS5yb3cseXQ9Pnt0aGlzLnNlbGVjdGVkUm93cy5pbmNsdWRlcyh5dCl8fHRoaXMuc2VsZWN0ZWRSb3dz''@;'; put 'put ''LnB1c2goeXQpfSl9KSx0aGlzLnNlbGVjdGVkUm93cy5pbmNsdWRlcyh0aGlzLmN1cnJlbnRSb3cpfHwodGhpcy5zZWxlY3RlZFJvd3M9W3RoaXMuY3VycmVudFJvd10pLHRoaXMuc3RhcnRPZmZzZXQ9Z2UudG9wLTYsdGhpcy5zdGFydEhlaWdodD1wYXJzZUludChULmhlaWdodCwxMCksdGhp''@;'; put 'put ''cy5oYW5kbGUuc3R5bGUudG9wPWAke3RoaXMuc3RhcnRPZmZzZXQrdGhpcy5zdGFydEhlaWdodH1weGAsdGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke2dlLnN0YXJ0fXB4YCx0aGlzLmhhbmRsZS5zdHlsZS53aWR0aD1gJHtffXB4YCx0aGlzLmhvdC5yb290RWxlbWVudC5h''@;'; put 'put ''cHBlbmRDaGlsZCh0aGlzLmhhbmRsZSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7dGhpcy5oYW5kbGUuc3R5bGUudG9wPWAke3RoaXMuc3RhcnRPZmZzZXQrdGhpcy5jdXJyZW50SGVpZ2h0fXB4YH1zZXR1cEd1aWRlUG9zaXRpb24oKXtjb25zdCBsPXBhcnNlSW50KHdhKHRoaXMuaGFuZGxl''@;'; put 'put ''KSwxMCksYT1wYXJzZUludCh0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl0sMTApK2wsZD1wYXJzZUludCh0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKDApLDEwKTtwaSh0aGlzLmhhbmRsZSwiYWN0aXZlIikscGkodGhpcy5ndWlkZSwiYWN0aXZlIiks''@;'; put 'put ''dGhpcy5ndWlkZS5zdHlsZS50b3A9dGhpcy5oYW5kbGUuc3R5bGUudG9wLHRoaXMuZ3VpZGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke2F9cHhgLHRoaXMuZ3VpZGUuc3R5bGUud2lkdGg9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5ndWlkZSl9cmVm''@;'; put 'put ''cmVzaEd1aWRlUG9zaXRpb24oKXt0aGlzLmd1aWRlLnN0eWxlLnRvcD10aGlzLmhhbmRsZS5zdHlsZS50b3B9aGlkZUhhbmRsZUFuZEd1aWRlKCl7V28odGhpcy5oYW5kbGUsImFjdGl2ZSIpLFdvKHRoaXMuZ3VpZGUsImFjdGl2ZSIpfWNoZWNrSWZSb3dIZWFkZXIobCl7dmFyIGE7cmV0dXJu''@;'; put 'put ''IE5wKGwsWyJUSCJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSYmIlRCT0RZIj09PShudWxsPT09KGE9bC5wYXJlbnROb2RlKXx8dm9pZCAwPT09YXx8bnVsbD09PShhPWEucGFyZW50Tm9kZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEudGFnTmFtZSl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVy''@;'; put 'put ''biJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1nZXRBY3R1YWxSb3dIZWlnaHQobCl7Y29uc3QgYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodChsKTtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwIT09YSYmdGhpcy5uZXdTaXplPGE/YTp0aGlzLm5ld1NpemV9b25Nb3VzZU92ZXIobCl7aWYoIWdOKGwudGFyZ2V0KSYmITAhPT10aGlzLmlzVHJpZ2dlcmVkQnlSTUImJnRoaXMuY2hlY2tJZlJvd0hlYWRlcihsLnRhcmdldCkpe2NvbnN0IGE9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQo''@;'; put 'put ''bC50YXJnZXQpO2EmJih0aGlzLnByZXNzZWR8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihhKSl9fWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5ob3Qudmlldy5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVz''@;'; put 'put ''dEVsZW1lbnRzU2l6ZSghMCl9LGE9KGQsaCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApO3ZvaWQgMCE9PWYmJih0aGlzLm5ld1NpemU9ZiksdGhpcy5zZXRNYW51YWxTaXplKGQsdGhpcy5uZXdT''@;'; put 'put ''aXplKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApLGgmJmwoKX07dGhpcy5kYmxjbGljaz49MiYmKHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aD4xPyhJbih0aGlzLnNlbGVjdGVkUm93cyxoPT57YShoKX0pLGwoKSk6''@;'; put 'put ''SW4odGhpcy5zZWxlY3RlZFJvd3MsaD0+e2EoaCwhMCl9KSksdGhpcy5kYmxjbGljaz0wLHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQ9bnVsbH1vbk1vdXNlRG93bihsKXtCbyhsLnRhcmdldCwibWFudWFsUm93UmVzaXplciIpJiYodGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKHRoaXMuY3VycmVu''@;'; put 'put ''dFRIKSx0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpLHRoaXMucHJlc3NlZD0hMCxudWxsPT09dGhpcy5hdXRvcmVzaXplVGltZW91dCYmKHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5hZnRlck1vdXNlRG93blRpbWVvdXQoKSw1MDApLHRoaXMuaG90Ll9yZWdp''@;'; put 'put ''c3RlclRpbWVvdXQodGhpcy5hdXRvcmVzaXplVGltZW91dCkpLHRoaXMuZGJsY2xpY2srPTEsdGhpcy5zdGFydFk9bC5wYWdlWSx0aGlzLm5ld1NpemU9dGhpcy5zdGFydEhlaWdodCl9b25Nb3VzZU1vdmUobCl7dGhpcy5wcmVzc2VkJiYodGhpcy5jdXJyZW50SGVpZ2h0PXRoaXMuc3RhcnRI''@;'; put 'put ''ZWlnaHQrKGwucGFnZVktdGhpcy5zdGFydFkpLEluKHRoaXMuc2VsZWN0ZWRSb3dzLGE9Pnt0aGlzLm5ld1NpemU9dGhpcy5zZXRNYW51YWxTaXplKGEsdGhpcy5jdXJyZW50SGVpZ2h0KX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigp''@;'; put 'put ''KX1vbk1vdXNlVXAoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMuaG90LnZpZXcucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApfSxhPShkLGgpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsdGhp''@;'; put 'put ''cy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMSksaCYmbCgpLHRoaXMuc2F2ZU1hbnVhbFJvd0hlaWdodHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITEpfTt0aGlzLnByZXNzZWQmJih0aGlzLmhpZGVIYW5kbGVB''@;'; put 'put ''bmRHdWlkZSgpLHRoaXMucHJlc3NlZD0hMSx0aGlzLm5ld1NpemUhPT10aGlzLnN0YXJ0SGVpZ2h0JiYodGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoPjE/KEluKHRoaXMuc2VsZWN0ZWRSb3dzLGg9PnthKGgpfSksbCgpKTpJbih0aGlzLnNlbGVjdGVkUm93cyxoPT57YShoLCEwKX0pKSx0aGlz''@;'; put 'put ''LnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpKX1vbkNvbnRleHRNZW51KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmhhbmRsZSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5n''@;'; put 'put ''dWlkZSksdGhpcy5wcmVzc2VkPSExLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMCx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9Pnt0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITF9KX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuaG90O3Ro''@;'; put 'put ''aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5oYW5k''@;'; put 'put ''bGUsImNvbnRleHRtZW51IiwoKT0+dGhpcy5vbkNvbnRleHRNZW51KCkpfW9uTW9kaWZ5Um93SGVpZ2h0KGwsYSl7bGV0IGQ9bDtpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxmPXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgoaCk7''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQQV0mJmYmJihkPWYpfXJldHVybiBkfW9uTWFwSW5pdCgpe2NvbnN0IGw9d3ouZ2V0KHRoaXMpLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQQV0sZD10aGlzLmxvYWRNYW51YWxSb3dIZWlnaHRzKCk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9''@;'; put 'put ''Pnt0eXBlb2YgZDwidSI/ZC5mb3JFYWNoKChoLGYpPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSk6QXJyYXkuaXNBcnJheShhKT8oYS5mb3JFYWNoKChoLGYpPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSksbC5jb25maWc9YSk6''@;'; put 'put ''ITA9PT1hJiZBcnJheS5pc0FycmF5KGwuY29uZmlnKSYmbC5jb25maWcuZm9yRWFjaCgoaCxmKT0+e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3QgeGg9Y2xhc3MgaUhle2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSxkLGgsZixfKXt0aGlzLnJvdz1sLHRoaXMuY29sPWEsdGhpcy5yb3dzcGFuPWQsdGhpcy5jb2xzcGFuPWgsdGhpcy5yZW1vdmVkPSExLHRoaXMuY2VsbENvb3Jkc0ZhY3Rvcnk9Zix0aGlzLmNlbGxSYW5nZUZhY3Rvcnk9X31zdGF0aWMgTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCl7cmV0''@;'; put 'put ''dXJuIEFhYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCB3aXRoIHtyb3c6ICR7bC5yb3d9LCBjb2w6ICR7bC5jb2x9LFx4MjAKICAgICAgcm93c3BhbjogJHtsLnJvd3NwYW59LCBjb2xzcGFuOiAke2wuY29sc3Bhbn19IGNvbnRhaW5zIG5lZ2F0aXZlIHZhbHVlcywgd2hpY2ggaXNceDIwCiAg''@;'; put 'put ''ICAgIG5vdCBzdXBwb3J0ZWQuIEl0IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIElTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93fSwgJHtsLmNvbH1dIGlzIHBvc2l0aW9u''@;'; put 'put ''ZWRceDIwCiAgICAgIChvciBwb3NpdGlvbmVkIHBhcnRpYWxseSkgb3V0c2lkZSBvZiB0aGUgdGFibGUgcmFuZ2UuIEl0IHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2UgZml4IHlvdXIgc2V0dXAuYH1zdGF0aWMgSVNfU0lOR0xFX0NFTEwobCl7cmV0dXJuIEFhYFRoZSBtZXJn''@;'; put 'put ''ZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtsLnJvd30sICR7bC5jb2x9XSBoYXMgYm90aCAicm93c3BhbiJceDIwCiAgICAgIGFuZCAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjEiLCB3aGljaCBtYWtlcyBpdCBhIHNpbmdsZSBjZWxsLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rp''@;'; put 'put ''b24uYH1zdGF0aWMgWkVST19TUEFOX1dBUk5JTkcobCl7cmV0dXJuIEFhYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtsLnJvd30sICR7bC5jb2x9XSBoYXMgInJvd3NwYW4iXHgyMAogICAgICBvciAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjAiLCB3aGljaCBpcyBub3Qgc3VwcG9y''@;'; put 'put ''dGVkLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKXtyZXR1cm4gbC5yb3c8MHx8bC5jb2w8MHx8bC5yb3dzcGFuPDB8fGwuY29sc3BhbjwwfXN0YXRpYyBpc1NpbmdsZUNlbGwobCl7cmV0dXJuIDE9PT1sLmNv''@;'; put 'put ''bHNwYW4mJjE9PT1sLnJvd3NwYW59c3RhdGljIGNvbnRhaW5zWmVyb1NwYW4obCl7cmV0dXJuIDA9PT1sLmNvbHNwYW58fDA9PT1sLnJvd3NwYW59c3RhdGljIGlzT3V0T2ZCb3VuZHMobCxhLGQpe3JldHVybiBsLnJvdzwwfHxsLmNvbDwwfHxsLnJvdz49YXx8bC5yb3crbC5yb3dzcGFuLTE+''@;'; put 'put ''PWF8fGwuY29sPj1kfHxsLmNvbCtsLmNvbHNwYW4tMT49ZH1ub3JtYWxpemUobCl7Y29uc3QgYT1sLmNvdW50Um93cygpLGQ9bC5jb3VudENvbHMoKTt0aGlzLnJvdzwwP3RoaXMucm93PTA6dGhpcy5yb3c+YS0xJiYodGhpcy5yb3c9YS0xKSx0aGlzLmNvbDwwP3RoaXMuY29sPTA6dGhpcy5j''@;'; put 'put ''b2w+ZC0xJiYodGhpcy5jb2w9ZC0xKSx0aGlzLnJvdyt0aGlzLnJvd3NwYW4+YS0xJiYodGhpcy5yb3dzcGFuPWEtdGhpcy5yb3cpLHRoaXMuY29sK3RoaXMuY29sc3Bhbj5kLTEmJih0aGlzLmNvbHNwYW49ZC10aGlzLmNvbCl9aW5jbHVkZXMobCxhKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRo''@;'; put 'put ''aXMuY29sPD1hJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bCYmdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWF9aW5jbHVkZXNIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuY29sPD1sJiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49bH1pbmNsdWRlc1ZlcnRpY2FsbHkobCl7cmV0dXJu''@;'; put 'put ''IHRoaXMucm93PD1sJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bH1zaGlmdChsLGEpe2NvbnN0IGQ9bFswXXx8bFsxXSxoPWErTWF0aC5hYnMobFswXXx8bFsxXSktMSxmPWxbMF0/ImNvbHNwYW4iOiJyb3dzcGFuIixfPWxbMF0/ImNvbCI6InJvdyIsVD1NYXRoLm1pbihhLGgpLFc9TWF0''@;'; put 'put ''aC5tYXgoYSxoKSxpZT10aGlzW19dLGdlPXRoaXNbX10rdGhpc1tmXS0xO2lmKGllPj1hJiYodGhpc1tfXSs9ZCksZD4wKWE8PWdlJiZhPmllJiYodGhpc1tmXSs9ZCk7ZWxzZSBpZihkPDApe2lmKFQ8PWllJiZXPj1nZSlyZXR1cm4gdGhpcy5yZW1vdmVkPSEwLCExO2lmKGllPj1UJiZpZTw9''@;'; put 'put ''Vyl7Y29uc3Qgd2U9Vy1pZSsxLEVlPU1hdGguYWJzKGQpLXdlO3RoaXNbX10tPUVlK2QsdGhpc1tmXS09d2V9ZWxzZSBpZTw9VCYmZ2U+PVc/dGhpc1tmXSs9ZDppZTw9VCYmZ2U+PVQmJmdlPFcmJih0aGlzW2ZdLT1nZS1UKzEpfXJldHVybiEwfWlzRmFydGhlcihsLGEpe3JldHVybiFsfHwo''@;'; put 'put ''ImRvd24iPT09YT9sLnJvdytsLnJvd3NwYW4tMTx0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMToidXAiPT09YT9sLnJvdz50aGlzLnJvdzoicmlnaHQiPT09YT9sLmNvbCtsLmNvbHNwYW4tMTx0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMToibGVmdCI9PT1hP2wuY29sPnRoaXMuY29sOm51bGwpfWdl''@;'; put 'put ''dExhc3RSb3coKXtyZXR1cm4gdGhpcy5yb3crdGhpcy5yb3dzcGFuLTF9Z2V0TGFzdENvbHVtbigpe3JldHVybiB0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMX1nZXRSYW5nZSgpe3JldHVybiB0aGlzLmNlbGxSYW5nZUZhY3RvcnkodGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlz''@;'; put 'put ''LmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLmdldExhc3RSb3coKSx0aGlzLmdldExhc3RDb2x1bW4oKSkpfX07ZnVuY3Rpb24gQ3ooYyxsLGEsZCl7bD9sLnJvdz09PWEmJmwuY29sPT09ZD8oYy5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoInJvd3NwYW4iLGwucm93c3Bhbi50b1N0cmluZygpKSxjLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsbC5jb2xzcGFuLnRvU3RyaW5nKCkpKTooYy5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxjLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGMuc3R5bGUuZGlzcGxheT0i''@;'; put 'put ''bm9uZSIpOihjLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLGMucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksYy5zdHlsZS5kaXNwbGF5PSIiKX1jbGFzcyBTentjb25zdHJ1Y3RvcihsKXt0aGlzLnBsdWdpbj1sLHRoaXMubWVyZ2VkQ2VsbHM9W10sdGhpcy5ob3Q9bC5ob3R9c3RhdGlj''@;'; put 'put ''IElTX09WRVJMQVBQSU5HX1dBUk5JTkcobCl7cmV0dXJuIEFhYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtsLnJvd30sICR7bC5jb2x9XSwgb3ZlcmxhcHNceDIwCiAgICAgIHdpdGggdGhlIG90aGVyIGRlY2xhcmVkIG1lcmdlZCBjZWxsLiBUaGUgb3ZlcmxhcHBpbmcgbWVyZ2Vk''@;'; put 'put ''IGNlbGwgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZVx4MjAKICAgICAgZml4IHlvdXIgc2V0dXAuYH1nZXQobCxhKXtsZXQgaD0hMTtyZXR1cm4gSW4odGhpcy5tZXJnZWRDZWxscyxmPT4hKGYucm93PD1sJiZmLnJvdytmLnJvd3NwYW4tMT49bCYmZi5jb2w8PWEmJmYuY29s''@;'; put 'put ''K2YuY29sc3Bhbi0xPj1hJiYoaD1mLDEpKSksaH1nZXRCeVJhbmdlKGwpe2xldCBkPSExO3JldHVybiBJbih0aGlzLm1lcmdlZENlbGxzLGg9PiEoaC5yb3c8PWwuZnJvbS5yb3cmJmgucm93K2gucm93c3Bhbi0xPj1sLnRvLnJvdyYmaC5jb2w8PWwuZnJvbS5jb2wmJmguY29sK2guY29sc3Bh''@;'; put 'put ''bi0xPj1sLnRvLmNvbCl8fChkPWgsZCkpLGR9Z2V0V2l0aGluUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHMsaD1bXTtsZXQgZj1sO2lmKCFmLmluY2x1ZGVzUmFuZ2Up''@;'; put 'put ''e2NvbnN0IF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5mcm9tLnJvdyxmLmZyb20uY29sKSxUPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYudG8ucm93LGYudG8uY29sKTtmPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoXyxfLFQpfXJldHVybiBJbihkLF89Pntjb25zdCBU''@;'; put 'put ''PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKF8ucm93LF8uY29sKSxXPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKF8ucm93K18ucm93c3Bhbi0xLF8uY29sK18uY29sc3Bhbi0xKSxpZT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKFQsVCxXKTthP2Yub3ZlcmxhcHMoaWUpJiZoLnB1''@;'; put 'put ''c2goXyk6Zi5pbmNsdWRlc1JhbmdlKGllKSYmaC5wdXNoKF8pfSksISFoLmxlbmd0aCYmaH1hZGQobCl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzLGQ9bC5yb3csaD1sLmNvbCxUPW5ldyB4aChkLGgsbC5yb3dzcGFuLGwuY29sc3Bhbix0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyx0aGlz''@;'; put 'put ''LmhvdC5fY3JlYXRlQ2VsbFJhbmdlKSxXPXRoaXMuZ2V0KGQsaCksaWU9dGhpcy5pc092ZXJsYXBwaW5nKFQpO3JldHVybiBXfHxpZT8oR2EoU3ouSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhUKSksITEpOih0aGlzLmhvdCYmVC5ub3JtYWxpemUodGhpcy5ob3QpLGEucHVzaChUKSxUKX1yZW1v''@;'; put 'put ''dmUobCxhKXtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHMsaD10aGlzLmdldChsLGEpLGY9aD90aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoaCk6LTE7cmV0dXJuISghaHx8LTE9PT1mKSYmKGQuc3BsaWNlKGYsMSksaCl9Y2xlYXIoKXtjb25zdCBhPVtdLGQ9W107SW4odGhpcy5tZXJnZWRDZWxs''@;'; put 'put ''cyxoPT57Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsKGgucm93LGguY29sKTtmJiZhLnB1c2goW2YsdGhpcy5nZXQoaC5yb3csaC5jb2wpLGgucm93LGguY29sXSl9KSx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aD0wLEluKGEsKGgsZik9Pnt2bygwLGgucm93c3Bhbi0xLF89Pnt2bygwLGguY29s''@;'; put 'put ''c3Bhbi0xLFQ9PntpZigwIT09VHx8MCE9PV8pe2NvbnN0IFc9dGhpcy5ob3QuZ2V0Q2VsbChoLnJvdytfLGguY29sK1QpO1cmJmQucHVzaChbVyxudWxsLG51bGwsbnVsbF0pfX0pfSksYVtmXVsxXT1udWxsfSksSW4oYSxoPT57Q3ooLi4uaCl9KSxJbihkLGg9PntDeiguLi5oKX0pfWlzT3Zl''@;'; put 'put ''cmxhcHBpbmcobCl7Y29uc3QgYT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKDAsMCksdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csbC5jb2wpLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93K2wucm93c3Bhbi0xLGwu''@;'; put 'put ''Y29sK2wuY29sc3Bhbi0xKSk7bGV0IGQ9ITE7cmV0dXJuIEluKHRoaXMubWVyZ2VkQ2VsbHMsaD0+IXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoMCwwKSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLnJvdyxoLmNvbCksdGhpcy5ob3Qu''@;'; put 'put ''X2NyZWF0ZUNlbGxDb29yZHMoaC5yb3craC5yb3dzcGFuLTEsaC5jb2wraC5jb2xzcGFuLTEpKS5vdmVybGFwcyhhKXx8KGQ9ITAsITEpKSxkfWlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtyZXR1cm4gZCYmdGhpcy5ob3Qucm93SW5kZXhN''@;'; put 'put ''YXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQucm93LDEpPT09bCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQuY29sLDEpPT09YX1nZXRGaXJzdFJlbmRlcmFibGVDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSk7aWYo''@;'; put 'put ''IWR8fHRoaXMuaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSk7Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5yb3csMSksZj10aGlzLmhvdC5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgsZil9c2hpZnRDb2xsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD1bMCwwXTtzd2l0Y2gobCl7Y2FzZSJyaWdodCI6aFswXSs9ZDticmVhaztjYXNlImxl''@;'; put 'put ''ZnQiOmhbMF0tPWQ7YnJlYWs7Y2FzZSJkb3duIjpoWzFdKz1kO2JyZWFrO2Nhc2UidXAiOmhbMV0tPWR9SW4odGhpcy5tZXJnZWRDZWxscyxmPT57Zi5zaGlmdChoLGEpfSksbWsodGhpcy5tZXJnZWRDZWxscy5sZW5ndGgtMSwwLGY9Pntjb25zdCBfPXRoaXMubWVyZ2VkQ2VsbHNbZl07XyYm''@;'; put 'put ''Xy5yZW1vdmVkJiZ0aGlzLm1lcmdlZENlbGxzLnNwbGljZSh0aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoXyksMSl9KX19Y29uc3Qgb0hlPVN6O3NvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVNZXJnZUNlbGxzIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTWVy''@;'; put 'put ''Z2VDZWxscyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbm1lcmdlQ2VsbHMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbm1lcmdlQ2VsbHMiKTtjb25zdCBxeT0ibWVyZ2VDZWxscyIsYW9lPW5ldyBXZWFrTWFwLGxvZT1xeTtjbGFzcyBoSGUgZXh0''@;'; put 'put ''ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gcXl9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTUwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGFvZS5zZXQodGhpcyx7bGFzdERlc2lyZWRDb29yZHM6bnVsbH0pLHRoaXMubWVyZ2VkQ2VsbHNDb2xs''@;'; put 'put ''ZWN0aW9uPW51bGwsdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucz1udWxsLHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zPW51bGx9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3F5XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRo''@;'; put 'put ''aXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPW5ldyBvSGUodGhpcyksdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucz1uZXcgY2xhc3Mgc0hle2NvbnN0cnVjdG9yKGwpe3RoaXMucGx1Z2luPWwsdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0''@;'; put 'put ''aW9uLHRoaXMuY3VycmVudEZpbGxEYXRhPW51bGx9Y29ycmVjdFNlbGVjdGlvbkFyZWFTaXplKGwpe2lmKGxbMF09PT1sWzJdJiZsWzFdPT09bFszXSl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobFswXSxsWzFdKTthJiYobFsyXT1sWzBdK2Eucm93c3Bhbi0xLGxb''@;'; put 'put ''M109bFsxXSthLmNvbHNwYW4tMSl9fWdldERpcmVjdGlvbihsLGEpe2xldCBkPW51bGw7cmV0dXJuIGQ9YVswXT09PWxbMF0mJmFbMV09PT1sWzFdJiZhWzNdPT09bFszXT8iZG93biI6YVsyXT09PWxbMl0mJmFbMV09PT1sWzFdJiZhWzNdPT09bFszXT8idXAiOmFbMV09PT1sWzFdJiZhWzJd''@;'; put 'put ''PT09bFsyXT8icmlnaHQiOiJsZWZ0IixkfXNuYXBEcmFnQXJlYShsLGEsZCxoKXtjb25zdCBmPWEuc2xpY2UoMCksXz10aGlzLmdldEF1dG9maWxsU2l6ZShsLGEsZCksW1QsVyxpZSxnZV09bCxFZT1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTE/aWUtVCsxOmdlLVcrMSxvdD1fLU1hdGgu''@;'; put 'put ''Zmxvb3IoXy9FZSkqRWUsZXQ9dGhpcy5nZXRGYXJ0aGVzdENvbGxlY3Rpb24obCxhLGQsaCk7aWYoZXQpaWYoImRvd24iPT09ZCl7Y29uc3QgeXQ9ZXQucm93K2V0LnJvd3NwYW4tVC1vdDtmWzJdK3l0Pj10aGlzLnBsdWdpbi5ob3QuY291bnRSb3dzKCk/ZlsyXS09b3Q6ZlsyXSs9b3Q/eXQ6''@;'; put 'put ''MH1lbHNlIGlmKCJyaWdodCI9PT1kKXtjb25zdCB5dD1ldC5jb2wrZXQuY29sc3Bhbi1XLW90O2ZbM10reXQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudENvbHMoKT9mWzNdLT1vdDpmWzNdKz1vdD95dDowfWVsc2UgaWYoInVwIj09PWQpe2NvbnN0IHl0PWllLW90LWV0LnJvdysxO2ZbMF0reXQ8''@;'; put 'put ''MD9mWzBdKz1vdDpmWzBdLT1vdD95dDowfWVsc2UgaWYoImxlZnQiPT09ZCl7Y29uc3QgeXQ9Z2Utb3QtZXQuY29sKzE7ZlsxXSt5dDwwP2ZbMV0rPW90OmZbMV0tPW90P3l0OjB9cmV0dXJuIHRoaXMudXBkYXRlQ3VycmVudEZpbGxDYWNoZSh7YmFzZUFyZWE6bCxkcmFnRGlyZWN0aW9uOmQs''@;'; put 'put ''Zm91bmRNZXJnZWRDZWxsczpoLGZpbGxTaXplOl8sZHJhZ0FyZWE6ZixjeWNsZUxlbmd0aDpFZX0pLGZ9dXBkYXRlQ3VycmVudEZpbGxDYWNoZShsKXt0aGlzLmN1cnJlbnRGaWxsRGF0YXx8KHRoaXMuY3VycmVudEZpbGxEYXRhPXt9KSxLbCh0aGlzLmN1cnJlbnRGaWxsRGF0YSxsKX1nZXRB''@;'; put 'put ''dXRvZmlsbFNpemUobCxhLGQpe2NvbnN0W2gsZixfLFRdPWwsW1csaWUsZ2Usd2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybiBoLVc7Y2FzZSJkb3duIjpyZXR1cm4gZ2UtXztjYXNlImxlZnQiOnJldHVybiBmLWllO2Nhc2UicmlnaHQiOnJldHVybiB3ZS1UO2RlZmF1bHQ6cmV0dXJu''@;'; put 'put ''IG51bGx9fWdldERyYWdBcmVhKGwsYSxkKXtjb25zdFtoLGYsXyxUXT1sLFtXLGllLGdlLHdlXT1hO3N3aXRjaChkKXtjYXNlInVwIjpyZXR1cm5bVyxpZSxoLTEsVF07Y2FzZSJkb3duIjpyZXR1cm5bXysxLGYsZ2UsVF07Y2FzZSJsZWZ0IjpyZXR1cm5bVyxpZSxfLGYtMV07Y2FzZSJyaWdo''@;'; put 'put ''dCI6cmV0dXJuW2gsVCsxLGdlLHdlXTtkZWZhdWx0OnJldHVybiBudWxsfX1nZXRGYXJ0aGVzdENvbGxlY3Rpb24obCxhLGQsaCl7Y29uc3RbZixfLFQsV109bCxpZT1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTEsZ2U9aWU/VDpXLHdlPWllP2Y6XyxFZT10aGlzLmdldEF1dG9maWxsU2l6''@;'; put 'put ''ZShsLGEsZCksWmU9aWU/VC1mKzE6Vy1fKzEsZXQ9RWUtTWF0aC5mbG9vcihFZS9aZSkqWmU7bGV0IHl0PW51bGwsa3Q9bnVsbCxTdD1udWxsO3N3aXRjaChkKXtjYXNlInVwIjp5dD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixTdD1nZS1ldCsxO2JyZWFrO2Nhc2UibGVmdCI6eXQ9ImluY2x1ZGVz''@;'; put 'put ''SG9yaXpvbnRhbGx5IixTdD1nZS1ldCsxO2JyZWFrO2Nhc2UiZG93biI6eXQ9ImluY2x1ZGVzVmVydGljYWxseSIsU3Q9d2UrZXQtMTticmVhaztjYXNlInJpZ2h0Ijp5dD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLFN0PXdlK2V0LTF9cmV0dXJuIEluKGgsUXQ9PntRdFt5dF0oU3QpJiZRdC5p''@;'; put 'put ''c0ZhcnRoZXIoa3QsZCkmJihrdD1RdCl9KSxrdH1yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24obCl7aWYoIXRoaXMuY3VycmVudEZpbGxEYXRhKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VGcm9tQ2hhbmdlcyhsKSxkPXRoaXMuY3VycmVudEZpbGxEYXRhLmZvdW5kTWVyZ2VkQ2Vs''@;'; put 'put ''bHMsaD10aGlzLmN1cnJlbnRGaWxsRGF0YS5kcmFnRGlyZWN0aW9uLGY9KGllLGdlKT0+e3N3aXRjaChoKXtjYXNlInVwIjpyZXR1cm4gaWUucm93LWdlPj1hLmZyb20ucm93O2Nhc2UiZG93biI6cmV0dXJuIGllLnJvdytpZS5yb3dzcGFuLTErZ2U8PWEudG8ucm93O2Nhc2UibGVmdCI6cmV0''@;'; put 'put ''dXJuIGllLmNvbC1nZT49YS5mcm9tLmNvbHVtbjtjYXNlInJpZ2h0IjpyZXR1cm4gaWUuY29sK2llLmNvbHNwYW4tMStnZTw9YS50by5jb2x1bW47ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2xldCBfPTAsVD1udWxsLFc9MTtkb3tmb3IobGV0IGllPTA7aWU8ZC5sZW5ndGg7aWUrPTEpe2lmKFQ9''@;'; put 'put ''ZFtpZV0sXz1XKnRoaXMuY3VycmVudEZpbGxEYXRhLmN5Y2xlTGVuZ3RoLGYoVCxfKSlzd2l0Y2goaCl7Y2FzZSJ1cCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93OlQucm93LV8scm93c3BhbjpULnJvd3NwYW4sY29sOlQuY29sLGNvbHNwYW46VC5jb2xzcGFu''@;'; put 'put ''fSk7YnJlYWs7Y2FzZSJkb3duIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6VC5yb3crXyxyb3dzcGFuOlQucm93c3Bhbixjb2w6VC5jb2wsY29sc3BhbjpULmNvbHNwYW59KTticmVhaztjYXNlImxlZnQiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVj''@;'; put 'put ''dGlvbi5hZGQoe3JvdzpULnJvdyxyb3dzcGFuOlQucm93c3Bhbixjb2w6VC5jb2wtXyxjb2xzcGFuOlQuY29sc3Bhbn0pO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpULnJvdyxyb3dzcGFuOlQucm93c3Bhbixjb2w6VC5jb2wr''@;'; put 'put ''Xyxjb2xzcGFuOlQuY29sc3Bhbn0pfWllPT09ZC5sZW5ndGgtMSYmKFcrPTEpfX13aGlsZShmKFQsXykpO3RoaXMuY3VycmVudEZpbGxEYXRhPW51bGwsdGhpcy5wbHVnaW4uaG90LnJlbmRlcigpLGQubGVuZ3RoPjAmJnRoaXMucGx1Z2luLmlmQ2hyb21lRm9yY2VSZXBhaW50KCl9Z2V0UmFu''@;'; put 'put ''Z2VGcm9tQ2hhbmdlcyhsKXtjb25zdCBhPXttaW46bnVsbCxtYXg6bnVsbH0sZD17bWluOm51bGwsbWF4Om51bGx9O3JldHVybiBJbihsLGg9Pntjb25zdCBmPWhbMF0sXz10aGlzLnBsdWdpbi5ob3QucHJvcFRvQ29sKGhbMV0pOyhudWxsPT09YS5taW58fGY8YS5taW4pJiYoYS5taW49Ziks''@;'; put 'put ''KG51bGw9PT1hLm1heHx8Zj5hLm1heCkmJihhLm1heD1mKSwobnVsbD09PWQubWlufHxfPGQubWluKSYmKGQubWluPV8pLChudWxsPT09ZC5tYXh8fF8+ZC5tYXgpJiYoZC5tYXg9Xyl9KSx7ZnJvbTp7cm93OmEubWluLGNvbHVtbjpkLm1pbn0sdG86e3JvdzphLm1heCxjb2x1bW46ZC5tYXh9''@;'; put 'put ''fX1kcmFnQXJlYU92ZXJsYXBzQ29sbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXREcmFnQXJlYShsLGEsZCksW2YsXyxULFddPWgsaWU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsXyksZ2U9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFQsVyks''@;'; put 'put ''d2U9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsUmFuZ2UoaWUsaWUsZ2UpO3JldHVybiEhdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2Uod2UsITApfX0odGhpcyksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bmV3IGNsYXNzIGxIZXtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''KXt0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90LHRoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWU9ImZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsIn1zbmFwRGVsdGEobCxhLGQpe2NvbnN0IGg9YS50byxfPWguY29sK2wuY29sO2wucm93P3RoaXMuanVtcE92ZXJNZXJnZWRD''@;'; put 'put ''ZWxsKGwsZCxoLnJvdytsLnJvdyk6bC5jb2wmJnRoaXMuanVtcE92ZXJNZXJnZWRDZWxsKGwsZCxfKX1qdW1wT3Zlck1lcmdlZENlbGwobCxhLGQpe2xldCBoPWwucm93fHxsLmNvbCxmPW51bGwsXz1udWxsLFQ9bnVsbDtsLnJvdz8oZj1hLmluY2x1ZGVzVmVydGljYWxseShkKSxfPWEucm93''@;'; put 'put ''LFQ9YS5nZXRMYXN0Um93KCkpOmwuY29sJiYoZj1hLmluY2x1ZGVzSG9yaXpvbnRhbGx5KGQpLF89YS5jb2wsVD1hLmdldExhc3RDb2x1bW4oKSksMCE9PWgmJihoPjA/ZiYmZCE9PV8mJihoKz1ULWQrMSk6ZiYmZCE9PVQmJihoLT1kLV8rMSksbC5yb3c/bC5yb3c9aDpsLmNvbCYmKGwuY29s''@;'; put 'put ''PWgpKX1nZXRVcGRhdGVkU2VsZWN0aW9uUmFuZ2UobCxhKXtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShsLmhpZ2hsaWdodCxsLmZyb20sdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC50by5yb3crYS5yb3csbC50by5jb2wrYS5jb2wpKX1nZXRTZWxlY3RlZE1lcmdlZENl''@;'; put 'put ''bGxDbGFzc05hbWUobCxhLGQsaCl7Y29uc3QgZj1NYXRoLm1pbihkWzBdLGRbMl0pLF89TWF0aC5taW4oZFsxXSxkWzNdKSxUPU1hdGgubWF4KGRbMF0sZFsyXSksVz1NYXRoLm1heChkWzFdLGRbM10pO2lmKHZvaWQgMD09PWh8fCF0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24u''@;'; put 'put ''aXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuO2NvbnN0IGdlPXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKTtpZighZ2UpcmV0dXJuO2NvbnN0IHdlPWdlLmdldExhc3RSb3coKSxFZT1nZS5nZXRMYXN0Q29sdW1uKCk7cmV0dXJuIGY8PWdl''@;'; put 'put ''LnJvdyYmXzw9Z2UuY29sJiZUPj13ZSYmVz49RWU/YCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHtofWA6dGhpcy5wbHVnaW4uc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZChnZSx0aGlzLnBsdWdpbi5ob3QuZ2V0U2VsZWN0''@;'; put 'put ''ZWRSYW5nZSgpKT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS1tdWx0aXBsZWA6dm9pZCAwfWlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZChsLGEpe2NvbnN0IGQ9W107aWYoIWF8fCFsKXJldHVybiExO2ZvcihsZXQgaD0wO2g8bC5yb3dzcGFuO2grPTEpZm9yKGxl''@;'; put 'put ''dCBmPTA7ZjxsLmNvbHNwYW47Zis9MSlkLnB1c2godGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3craCxsLmNvbCtmKSk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKz0xKXtjb25zdCBmPVtdO2ZvcihsZXQgXz0wO188YS5sZW5ndGg7Xys9MSlmW19dPWFbX10uaW5jbHVkZXMoZFto''@;'; put 'put ''XSk7aWYoIWYuaW5jbHVkZXMoITApKXJldHVybiExfXJldHVybiEwfWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl7Y29uc3QgbD1bXTtmb3IobGV0IGE9MDthPD03O2ErPTEpbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7''@;'; put 'put ''YX1gKTtyZXR1cm4gbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYCksbH19KHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJJbml0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5VHJhbnNmb3JtU3RhcnQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTW9kaWZ5VHJhbnNm''@;'; put 'put ''b3JtU3RhcnQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5VHJhbnNmb3JtRW5kKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUdldENlbGxDb29yZHMiLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGwub25Nb2RpZnlHZXRDZWxsQ29vcmRzKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVTZXRSYW5nZVN0YXJ0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdl''@;'; put 'put ''U3RhcnRPbmx5IixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlU2V0UmFuZ2VTdGFydCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVNldFJhbmdlRW5kKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSZW5kZXJlciguLi5h''@;'; put 'put ''cmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYWRkTWVyZ2VBY3Rpb25zVG9Db250ZXh0TWVudSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBsLm9uQWZ0ZXJHZXRDZWxsTWV0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSguLi5hcmd1bWVudHMp''@;'; put 'put ''fSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlBdXRvZmlsbFJhbmdl''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5QXV0b2ZpbGxSYW5nZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyQ3JlYXRlQ29sKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVt''@;'; put 'put ''b3ZlQ29sIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSZW1vdmVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJl''@;'; put 'put ''bW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDaGFuZ2UoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJhd0Jv''@;'; put 'put ''cmRlcnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVEcmF3QXJlYUJvcmRlcnMoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcmF3U2VsZWN0aW9uIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJEcmF3U2VsZWN0aW9uKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIiwoYSxkKT0+e2lmKCJNZXJnZUNlbGxzIj09PWQp''@;'; put 'put ''cmV0dXJuITF9KSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsZWFyQ29sbGVjdGlvbnMoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5yZW5kZXIoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9''@;'; put 'put ''dXBkYXRlUGx1Z2luKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3F5XTt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3MobCksc3VwZXIudXBkYXRlUGx1Z2luKCl9aWZDaHJvbWVGb3JjZVJlcGFpbnQoKXtp''@;'; put 'put ''ZighX04oKSlyZXR1cm47Y29uc3QgbD1bXTtsZXQgYT1bXTt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5mb3JFYWNoKGQ9Pntjb25zdHtyb3c6aCxyb3dzcGFuOmZ9PWQ7Zm9yKGxldCBfPWgrMTtfPGgrZjtfKyspYS5wdXNoKF8pfSksYT1bLi4ubmV3IFNldChhKV0s''@;'; put 'put ''YS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZCk7dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5nZXRPdmVybGF5cyghMCkubWFwKGY9PiJtYXN0ZXIiPT09Zj8ubmFtZT9mOmYuY2xvbmUud3RUYWJs''@;'; put 'put ''ZSkuZm9yRWFjaChmPT57Y29uc3QgXz1mLmdldFJvdyhoKTtfJiYoXy5zdHlsZS5iYWNrZ3JvdW5kPW43KF8sImJhY2tncm91bmRDb2xvciIpLnJlcGxhY2UoIikiLCIsIDAuOTkpIiksbC5wdXNoKF8pKX0pfSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2wuZm9yRWFjaChkPT57''@;'; put 'put ''ZC5zdHlsZS5iYWNrZ3JvdW5kPW43KGQsImJhY2tncm91bmRDb2xvciIpLnJlcGxhY2UoIiwgMC45OSkiLCIpIil9KX0sMSl9dmFsaWRhdGVTZXR0aW5nKGwpe2xldCBhPSEwO3JldHVybiEhbCYmKHhoLmNvbnRhaW5zTmVnYXRpdmVWYWx1ZXMobCk/KEdhKHhoLk5FR0FUSVZFX1ZBTFVFU19X''@;'; put 'put ''QVJOSU5HKGwpKSxhPSExKTp4aC5pc091dE9mQm91bmRzKGwsdGhpcy5ob3QuY291bnRSb3dzKCksdGhpcy5ob3QuY291bnRDb2xzKCkpPyhHYSh4aC5JU19PVVRfT0ZfQk9VTkRTX1dBUk5JTkcobCkpLGE9ITEpOnhoLmlzU2luZ2xlQ2VsbChsKT8oR2EoeGguSVNfU0lOR0xFX0NFTEwobCkp''@;'; put 'put ''LGE9ITEpOnhoLmNvbnRhaW5zWmVyb1NwYW4obCkmJihHYSh4aC5aRVJPX1NQQU5fV0FSTklORyhsKSksYT0hMSksYSl9Z2VuZXJhdGVGcm9tU2V0dGluZ3MobCl7aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgYT1bXTtpZihJbihsLGQ9PntpZighdGhpcy52YWxpZGF0ZVNldHRpbmcoZCkp''@;'; put 'put ''cmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csZC5jb2wpLGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3crZC5yb3dzcGFuLTEsZC5jb2wrZC5jb2xzcGFuLTEpLF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShoLGgsZik7dGhpcy5tZXJn''@;'; put 'put ''ZVJhbmdlKF8sITAsITApLHZvKGQucm93LGQucm93K2Qucm93c3Bhbi0xLFQ9Pnt2byhkLmNvbCxkLmNvbCtkLmNvbHNwYW4tMSxXPT57VD09PWQucm93JiZXPT09ZC5jb2x8fGEucHVzaChbVCxXLG51bGxdKX0pfSl9KSwwPT09YS5sZW5ndGgpcmV0dXJuO3RoaXMuaG90LnNldERhdGFBdENl''@;'; put 'put ''bGwoYSl9fWNsZWFyQ29sbGVjdGlvbnMoKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5jbGVhcigpfWNhbk1lcmdlUmFuZ2UobCl7cmV0dXJuISEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl8fHRoaXMudmFsaWRhdGVTZXR0aW5n''@;'; put 'put ''KGwpfXRvZ2dsZU1lcmdlT25TZWxlY3Rpb24oKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2wuc2V0RGlyZWN0aW9uKHRoaXMuaG90LmlzUnRsKCk/Ik5FLVNXIjoiTlctU0UiKTtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnRvZ2dsZU1l''@;'; put 'put ''cmdlKGwpLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfW1lcmdlU2VsZWN0aW9uKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7''@;'; put 'put ''aWYoIWwpcmV0dXJuO2wuc2V0RGlyZWN0aW9uKHRoaXMuaG90LmlzUnRsKCk/Ik5FLVNXIjoiTlctU0UiKTtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnVubWVyZ2VSYW5nZShsLCEwKSx0aGlzLm1lcmdlUmFuZ2UobCksdGhpcy5ob3Quc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxk''@;'; put 'put ''LmNvbCwhMSl9dW5tZXJnZVNlbGVjdGlvbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnVubWVy''@;'; put 'put ''Z2VSYW5nZShsLCEwKSx0aGlzLmhvdC5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX1tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9bC5nZXRUb3BTdGFydENvcm5lcigpLGY9bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxfPXtyb3c6aC5yb3csY29sOmguY29sLHJvd3NwYW46Zi5yb3ctaC5yb3crMSxjb2xzcGFuOmYuY29sLWguY29sKzF9LFQ9W107bGV0IFc9''@;'; put 'put ''bnVsbDtyZXR1cm4hIXRoaXMuY2FuTWVyZ2VSYW5nZShfLGEpJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU1lcmdlQ2VsbHMiLGwsYSksdm8oMCxfLnJvd3NwYW4tMSxnZT0+e3ZvKDAsXy5jb2xzcGFuLTEsd2U9PntsZXQgRWU9bnVsbDtUW2dlXXx8KFRbZ2VdPVtdKSwwPT09Z2UmJjA9''@;'; put 'put ''PT13ZT9FZT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coXy5yb3cpLHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oXy5jb2wpKTp0aGlzLmhvdC5zZXRDZWxsTWV0YShfLnJvdytnZSxfLmNvbCt3ZSwiaGlkZGVuIiwhMCksVFtnZV1bd2VdPUVl''@;'; put 'put ''fSl9KSx0aGlzLmhvdC5zZXRDZWxsTWV0YShfLnJvdyxfLmNvbCwic3Bhbm5lZCIsITApLCF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoXyl8fChkP1c9W18ucm93LF8uY29sLFRdOnRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KF8ucm93LF8uY29sLFQsdm9pZCAwLHZvaWQgMCx0''@;'; put 'put ''aGlzLnBsdWdpbk5hbWUpLGF8fHRoaXMuaWZDaHJvbWVGb3JjZVJlcGFpbnQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNZXJnZUNlbGxzIixsLF8sYSksVykpfXVubWVyZ2VSYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1l''@;'; put 'put ''bnRzWzFdO2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UobCk7ZCYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbm1lcmdlQ2VsbHMiLGwsYSksSW4oZCxoPT57dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ucmVtb3ZlKGgucm93LGguY29sKSx2''@;'; put 'put ''bygwLGgucm93c3Bhbi0xLGY9Pnt2bygwLGguY29sc3Bhbi0xLF89Pnt0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdytmLGguY29sK18sImhpZGRlbiIpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrXywiY29weWFibGUiKX0pfSksdGhpcy5ob3QucmVtb3ZlQ2Vs''@;'; put 'put ''bE1ldGEoaC5yb3csaC5jb2wsInNwYW5uZWQiKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVubWVyZ2VDZWxscyIsbCxhKSx0aGlzLmhvdC5yZW5kZXIoKSl9dG9nZ2xlTWVyZ2UobCl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobC5mcm9tLnJvdyxsLmZyb20u''@;'; put 'put ''Y29sKTthLnJvdz09PWwuZnJvbS5yb3cmJmEuY29sPT09bC5mcm9tLmNvbCYmYS5yb3crYS5yb3dzcGFuLTE9PT1sLnRvLnJvdyYmYS5jb2wrYS5jb2xzcGFuLTE9PT1sLnRvLmNvbD90aGlzLnVubWVyZ2VSYW5nZShsKTp0aGlzLm1lcmdlU2VsZWN0aW9uKGwpfW1lcmdlKGwsYSxkLGgpe2Nv''@;'; put 'put ''bnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKSxfPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhpcy5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZixmLF8pKX11bm1lcmdlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMobCxhKSxfPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhpcy51bm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsXykpfW9uQWZ0ZXJJbml0KCl7dGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncyh0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3F5''@;'; put 'put ''XSksdGhpcy5ob3QucmVuZGVyKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbCIsIm0iXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnRvZ2dsZU1lcmdlKHRoaXMuaG90''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpLHRoaXMuaG90LnJlbmRlcigpfSxydW5Pbmx5SWY6ZD0+IWQuYWx0S2V5LGdyb3VwOmxvZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRz''@;'; put 'put ''QnlHcm91cChsb2UpfW9uQWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uKGwpe2lmKGwpe2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMsZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCs9MSlpZihkLmZy''@;'; put 'put ''b20ucm93PT09YVtoXS5yb3cmJmQuZnJvbS5jb2w9PT1hW2hdLmNvbCYmZC50by5yb3c9PT1hW2hdLnJvdythW2hdLnJvd3NwYW4tMSYmZC50by5jb2w9PT1hW2hdLmNvbCthW2hdLmNvbHNwYW4tMSlyZXR1cm4hMX1yZXR1cm4gbH1vbk1vZGlmeVRyYW5zZm9ybVN0YXJ0KGwpe2NvbnN0IGE9''@;'; put 'put ''YW9lLmdldCh0aGlzKSxkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7bGV0IGg9e3JvdzpsLnJvdyxjb2w6bC5jb2x9LGY9bnVsbDtjb25zdCBfPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQuaGlnaGxpZ2h0LnJvdyxkLmhpZ2hsaWdodC5jb2wpLFQ9dGhpcy5tZXJnZWRD''@;'; put 'put ''ZWxsc0NvbGxlY3Rpb24uZ2V0KF8ucm93LF8uY29sKTtpZihhLmxhc3REZXNpcmVkQ29vcmRzfHwoYS5sYXN0RGVzaXJlZENvb3Jkcz10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhudWxsLG51bGwpKSxUKXtjb25zdCBpZT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhULnJvdyxULmNv''@;'; put 'put ''bCksZ2U9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVC5yb3crVC5yb3dzcGFuLTEsVC5jb2wrVC5jb2xzcGFuLTEpO3RoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoaWUsaWUsZ2UpLmluY2x1ZGVzKGEubGFzdERlc2lyZWRDb29yZHMpfHwoYS5sYXN0RGVzaXJlZENvb3Jkcz10aGlzLmhv''@;'; put 'put ''dC5fY3JlYXRlQ2VsbENvb3JkcyhudWxsLG51bGwpKSxoLnJvdz1hLmxhc3REZXNpcmVkQ29vcmRzLnJvdz9hLmxhc3REZXNpcmVkQ29vcmRzLnJvdy1fLnJvdzpoLnJvdyxoLmNvbD1hLmxhc3REZXNpcmVkQ29vcmRzLmNvbD9hLmxhc3REZXNpcmVkQ29vcmRzLmNvbC1fLmNvbDpoLmNvbCxs''@;'; put 'put ''LnJvdz4wP2gucm93PVQucm93K1Qucm93c3Bhbi0xLV8ucm93K2wucm93Omwucm93PDAmJihoLnJvdz1fLnJvdy1ULnJvdytsLnJvdyksbC5jb2w+MD9oLmNvbD1ULmNvbCtULmNvbHNwYW4tMS1fLmNvbCtsLmNvbDpsLmNvbDwwJiYoaC5jb2w9Xy5jb2wtVC5jb2wrbC5jb2wpfWY9dGhpcy5o''@;'; put 'put ''b3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5oaWdobGlnaHQucm93K2gucm93LGQuaGlnaGxpZ2h0LmNvbCtoLmNvbCk7Y29uc3QgVz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZi5yb3csZi5jb2wpO2lmKFcpe2NvbnN0IGllPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEZp''@;'; put 'put ''cnN0UmVuZGVyYWJsZUNvb3JkcyhXLnJvdyxXLmNvbCk7YS5sYXN0RGVzaXJlZENvb3Jkcz1mLGg9e3JvdzppZS5yb3ctXy5yb3csY29sOmllLmNvbC1fLmNvbH19MCE9PWgucm93JiYobC5yb3c9aC5yb3cpLDAhPT1oLmNvbCYmKGwuY29sPWguY29sKX1vbk1vZGlmeVRyYW5zZm9ybUVuZChs''@;'; put 'put ''KXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1XdShsKSxoPXRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFVwZGF0ZWRTZWxlY3Rpb25SYW5nZShhLGwpO2xldCBmPVd1KGQpO2NvbnN0IF89dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGlu''@;'; put 'put ''UmFuZ2UoaCwhMCk7ZG97Zj1XdShkKSx0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRVcGRhdGVkU2VsZWN0aW9uUmFuZ2UoYSxkKSxJbihfLFQ9Pnt0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5zbmFwRGVsdGEoZCxhLFQpfSl9d2hpbGUoZC5yb3chPT1mLnJvd3x8ZC5jb2whPT1m''@;'; put 'put ''LmNvbCk7bC5yb3c9ZC5yb3csbC5jb2w9ZC5jb2x9b25Nb2RpZnlHZXRDZWxsQ29vcmRzKGwsYSl7aWYobDwwfHxhPDApcmV0dXJuO2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSk7aWYoIWQpcmV0dXJuO2NvbnN0e3JvdzpoLGNvbDpmLGNvbHNwYW46Xyxyb3dz''@;'; put 'put ''cGFuOlR9PWQ7cmV0dXJuW2gsZixoK1QtMSxmK18tMV19YWRkTWVyZ2VBY3Rpb25zVG9Db250ZXh0TWVudShsKXtsLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIHVIZShjKXtyZXR1cm57a2V5OiJtZXJnZUNlbGxzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVj''@;'; put 'put ''dGVkTGFzdCgpO2lmKGwpe2NvbnN0IGE9Yy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGxbMF0sbFsxXSk7aWYoYS5yb3c9PT1sWzBdJiZhLmNvbD09PWxbMV0mJmEucm93K2Eucm93c3Bhbi0xPT09bFsyXSYmYS5jb2wrYS5jb2xzcGFuLTE9PT1sWzNdKXJldHVybiB0aGlzLmdldFRyYW5z''@;'; put 'put ''bGF0ZWRQaHJhc2UoSFYpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRlYpfSxjYWxsYmFjaygpe2MudG9nZ2xlTWVyZ2VPblNlbGVjdGlvbigpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtyZXR1cm4hbHx8eGguaXNTaW5nbGVDZWxsKHtyb3c6''@;'; put 'put ''bFswXSxjb2w6bFsxXSxyb3dzcGFuOmxbMl0tbFswXSsxLGNvbHNwYW46bFszXS1sWzFdKzF9KXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LGhpZGRlbjohMX19KHRoaXMpKX1vbkFmdGVyUmVuZGVyZXIobCxhLGQpe2NvbnN0IGg9dGhpcy5tZXJnZWRDZWxsc0NvbGxl''@;'; put 'put ''Y3Rpb24uZ2V0KGEsZCksZj11cyhoKT9XdShoKTp2b2lkIDA7aWYodXMoZikpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOl8sY29sdW1uSW5kZXhNYXBwZXI6VH09dGhpcy5ob3Qse3JvdzpXLGNvbDppZSxjb2xzcGFuOmdlLHJvd3NwYW46d2V9PWYsW0VlLFplXT10aGlzLnRyYW5zbGF0ZU1lcmdl''@;'; put 'put ''ZENlbGxUb1JlbmRlcmFibGUoVyx3ZSxpZSxnZSkseXQ9RWUtXy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGEpKzEsa3Q9WmUtVC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQpKzE7Zi5yb3c9Xy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZi5yb3csMSksZi5jb2w9VC5n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZi5jb2wsMSksZi5yb3dzcGFuPU1hdGgubWluKGYucm93c3Bhbix5dCksZi5jb2xzcGFuPU1hdGgubWluKGYuY29sc3BhbixrdCl9Q3oobCxmLGEsZCl9b25CZWZvcmVTZXRSYW5nZVN0YXJ0KGwpe2lmKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u''@;'; put 'put ''LmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLnJvdyxsLmNvbCkpe2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwucm93LGwuY29sKTtbbC5yb3csbC5jb2xdPVthLnJvdyxhLmNvbF19fW9uQmVmb3JlU2V0UmFuZ2VFbmQobCl7Y29uc3QgYT10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2EuaGlnaGxpZ2h0PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEuaGlnaGxpZ2h0LnJvdyxhLmhpZ2hsaWdodC5jb2wpLGEudG89bDtsZXQgZD0hMTtpZighdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhdGhp''@;'; put 'put ''cy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKWRve2Q9ITE7Zm9yKGxldCBoPTA7aDx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5sZW5ndGg7aCs9MSl7Y29uc3QgXz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1toXS5n''@;'; put 'put ''ZXRSYW5nZSgpO2EuZXhwYW5kQnlSYW5nZShfKSYmKGwucm93PWEudG8ucm93LGwuY29sPWEudG8uY29sLGQ9ITApfX13aGlsZShkKX1vbkFmdGVyR2V0Q2VsbE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSk7aCYmKGgucm93IT09bHx8aC5j''@;'; put 'put ''b2whPT1hP2QuY29weWFibGU9ITE6KGQucm93c3Bhbj1oLnJvd3NwYW4sZC5jb2xzcGFuPWguY29sc3BhbikpfW9uQWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZShsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3RoaXMubW9kaWZ5Vmlld3BvcnRSb3dTdGFydChsLGEp''@;'; put 'put ''LHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQobCxhKX1tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Um93KTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qg''@;'; put 'put ''Xz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoaCxmKTtpZih1cyhfKSl7Y29uc3QgVD1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoXy5yb3csMSkpO2lmKFQ8bC5zdGFydFJvdylyZXR1cm4gbC5zdGFydFJvdz1ULHZvaWQg''@;'; put 'put ''dGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydFJvd0VuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCBf''@;'; put 'put ''PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChoLGYpO2lmKHVzKF8pKXtjb25zdCBXPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLnJvdytfLnJvd3NwYW4tMSwtMSkpO2lmKFc+bC5lbmRSb3cpcmV0dXJuIGwuZW5kUm93''@;'; put 'put ''PVcsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl9fX1vbkFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKSx0aGlzLm1vZGlmeVZpZXdw''@;'; put 'put ''b3J0Q29sdW1uRW5kKGwsYSl9bW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5zdGFydENvbHVtbik7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IF89dGhp''@;'; put 'put ''cy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGYsaCk7aWYodXMoXykpe2NvbnN0IFQ9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KF8uY29sLDEpKTtpZihUPGwuc3RhcnRDb2x1bW4pcmV0dXJuIGwuc3RhcnRDb2x1bW49VCx2b2lk''@;'; put 'put ''IHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChsLGEpfX19bW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuZW5kQ29sdW1uKTtmb3IobGV0IGY9MDtmPGE7''@;'; put 'put ''Zis9MSl7Y29uc3QgXz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZixoKTtpZih1cyhfKSl7Y29uc3QgVz1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoXy5jb2wrXy5jb2xzcGFuLTEsLTEpKTtpZihXPmwuZW5kQ29sdW1u''@;'; put 'put ''KXJldHVybiBsLmVuZENvbHVtbj1XLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpfX19dHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShsLGEsZCxoKXtjb25zdHtyb3dJbmRleE1hcHBlcjpmLGNvbHVtbkluZGV4TWFwcGVyOl99PXRoaXMuaG90O2xldCBULFc7''@;'; put 'put ''cmV0dXJuIFQ9MD09PWE/Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCwxKTpmLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsK2EtMSwtMSksVz0wPT09aD9fLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLDEpOl8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQraC0xLC0xKSxbbD49''@;'; put 'put ''MD9mLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoVCk6bCxkPj0wP18uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChXKTpkXX1vbk1vZGlmeUF1dG9maWxsUmFuZ2UobCxhKXt0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmNvcnJlY3RTZWxlY3Rpb25BcmVhU2l6ZShhKTtjb25z''@;'; put 'put ''dCBkPXRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZ2V0RGlyZWN0aW9uKGEsbCk7bGV0IGg9bDtpZih0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9ucyhhLGgsZCkpcmV0dXJuIGg9YSxoO2NvbnN0IGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rp''@;'; put 'put ''b24uZ2V0V2l0aGluUmFuZ2Uoe2Zyb206e3JvdzphWzBdLGNvbDphWzFdfSx0bzp7cm93OmFbMl0sY29sOmFbM119fSk7cmV0dXJuIGYmJihoPXRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuc25hcERyYWdBcmVhKGEsaCxkLGYpKSxofW9uQWZ0ZXJDcmVhdGVDb2wobCxhKXt0aGlzLm1lcmdl''@;'; put 'put ''ZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJyaWdodCIsbCxhKX1vbkFmdGVyUmVtb3ZlQ29sKGwsYSl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygibGVmdCIsbCxhKX1vbkFmdGVyQ3JlYXRlUm93KGwsYSxkKXsiYXV0byIhPT1kJiZ0aGlz''@;'; put 'put ''Lm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJkb3duIixsLGEpfW9uQWZ0ZXJSZW1vdmVSb3cobCxhKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJ1cCIsbCxhKX1vbkFmdGVyQ2hhbmdlKGwsYSl7IkF1dG9maWxsLmZpbGwiPT09''@;'; put 'put ''YSYmdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24obCl9b25CZWZvcmVEcmF3QXJlYUJvcmRlcnMobCxhKXtpZihhJiYiYXJlYSI9PT1hKXtjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7SW4odGhpcy5tZXJnZWRDZWxs''@;'; put 'put ''c0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoZCksZj0+e2QuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93PT09Zi5nZXRMYXN0Um93KCkmJmQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sPT09Zi5nZXRMYXN0Q29sdW1uKCkmJihsWzJdPWYucm93LGxbM109Zi5jb2wpfSl9fW9uQWZ0ZXJNb2Rp''@;'; put 'put ''ZnlUcmFuc2Zvcm1TdGFydChsLGEsZCl7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobC5yb3csbC5jb2wpO2lmKCFoKXJldHVybjtjb25zdCBmPWE+MCxfPWE8MCxUPWQ8MCxXPWQ+MCxpZT1oLnJvdytoLnJvd3NwYW4tMT09''@;'; put 'put ''dGhpcy5ob3QuY291bnRSb3dzKCktMSxnZT0wPT09aC5yb3csd2U9aC5jb2wraC5jb2xzcGFuLTE9PXRoaXMuaG90LmNvdW50Q29scygpLTE7KGYmJmllfHxfJiZnZXx8VyYmd2V8fFQmJjA9PT1oLmNvbCkmJihsLnJvdz1oLnJvdyxsLmNvbD1oLmNvbCl9b25BZnRlckRyYXdTZWxlY3Rpb24o''@;'; put 'put ''bCxhLGQsaCl7aWYoZClyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGwsYSxkLGgpfW9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRN''@;'; put 'put ''ZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKX19ZnVuY3Rpb24gY29lKCl7R2EoQWFgUGx1Z2lucyBcYGNvbHVtblNvcnRpbmdcYCBhbmQgXGBtdWx0aUNvbHVtblNvcnRpbmdcYCBzaG91bGQgbm90IGJlIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuIAogICAgT25seSBcYG11bHRpQ29sdW1u''@;'; put 'put ''U29ydGluZ1xgIHdpbGwgd29yay5gKX1jb25zdCBNej0ibXVsdGlDb2x1bW5Tb3J0aW5nIixkb2U9ImNvbHVtblNvcnRpbmciO0lyZShNeixmdW5jdGlvbiBmSGUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtjb25zdFssLi4uaF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uIF8oVCl7''@;'; put 'put ''Y29uc3QgVz1jW1RdLGllPWxbVF0sZ2U9aFtUXSx3ZT1mW1RdLEVlPWllLm11bHRpQ29sdW1uU29ydGluZyxvdD0oRWUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9FZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OkxyZShpZS50eXBlKSkoVyxpZSxFZSkoZ2Usd2UpO2lmKDA9PT1vdCl7Y29uc3Qg''@;'; put 'put ''ZXQ9VCsxO2lmKHR5cGVvZiBsW2V0XTwidSIpcmV0dXJuIF8oZXQpfXJldHVybiBvdH0oMCl9fSk7Y2xhc3MgX0hlIGV4dGVuZHMgT3Jle3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBNen1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNzB9Y29uc3RydWN0b3Io''@;'; put 'put ''bCl7c3VwZXIobCksdGhpcy5wbHVnaW5LZXk9TXp9aXNFbmFibGVkKCl7cmV0dXJuIHN1cGVyLmlzRW5hYmxlZCgpfWVuYWJsZVBsdWdpbigpeyF0aGlzLmVuYWJsZWQmJnRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldJiZ0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RvZV0m''@;'; put 'put ''JmNvZSgpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9c29ydChsKXtzdXBlci5zb3J0KGwpfWNsZWFyU29ydCgpe3N1cGVyLmNsZWFyU29ydCgpfWlzU29ydGVkKCl7cmV0dXJuIHN1cGVyLmlzU29ydGVkKCl9Z2V0U29ydENvbmZp''@;'; put 'put ''ZyhsKXtyZXR1cm4gc3VwZXIuZ2V0U29ydENvbmZpZyhsKX1zZXRTb3J0Q29uZmlnKGwpe3N1cGVyLnNldFNvcnRDb25maWcobCl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltd''@;'; put 'put ''O3JldHVybiBBcnJheS5pc0FycmF5KGwpP2w6W2xdfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3N1cGVyLnVwZGF0ZUhlYWRlckNsYXNzZXMobCwu''@;'; put 'put ''Li5kKSxXbyhsLGZ1bmN0aW9uIGdIZShjKXtjb25zdCBsPWMuY2xhc3NOYW1lLnNwbGl0KCIgIiksYT1uZXcgUmVnRXhwKCJec29ydC1bMC05XXsxLDJ9JCIpO3JldHVybiBsLmZpbHRlcihkPT5hLnRlc3QoZCkpfShsKSksITEhPT10aGlzLmVuYWJsZWQmJnBpKGwsZnVuY3Rpb24gcEhlKGMs''@;'; put 'put ''bCxhKXtjb25zdCBkPVtdO3JldHVybiExPT09YXx8Yy5pc0NvbHVtblNvcnRlZChsKSYmYy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKT4xJiZkLnB1c2goYHNvcnQtJHtjLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKSsxfWApLGR9KC4uLmQpKX1vblVwZGF0ZVNldHRpbmdzKGwp''@;'; put 'put ''e3RoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldJiZ0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RvZV0mJmNvZSgpLHN1cGVyLm9uVXBkYXRlU2V0dGluZ3MobCl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpeyExIT09Z2ooYS5yb3csYS5jb2wsbCkmJnRoaXMud2FzQ2xp''@;'; put 'put ''Y2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmKHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKT8odGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhhLmNvbCksdGhpcy5zb3J0KHRoaXMuZ2V0TmV4dFNvcnRDb25maWco''@;'; put 'put ''YS5jb2wsImFwcGVuZCIpKSk6dGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCkpKX19Y2xhc3Mgd0hlIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIm11bHRpcGxlU2VsZWN0aW9uSGFuZGxlcyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJ''@;'; put 'put ''VFkoKXtyZXR1cm4gMTYwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZHJhZ2dlZD1bXSx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMubGFzdFNldENlbGw9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4gbTIoKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmV2ZW50''@;'; put 'put ''TWFuYWdlcnx8KHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcyx7cm9vdEVsZW1lbnQ6YX09dGhpcy5ob3Q7ZnVuY3Rpb24gZChoKXtpZigx''@;'; put 'put ''PT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm4gbC5kcmFnZ2VkLnNwbGljZSgwLGwuZHJhZ2dlZC5sZW5ndGgpLCEwO2NvbnN0IGY9bC5kcmFnZ2VkLmluZGV4T2YoaCk7aWYoLTE9PT1mKXJldHVybiExOzA9PT1mP2wuZHJhZ2dlZD1sLmRyYWdnZWQuc2xpY2UoMCwxKToxPT09ZiYmKGwuZHJh''@;'; put 'put ''Z2dlZD1sLmRyYWdnZWQuc2xpY2UoLTEpKX10aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoc3RhcnQiLGg9PntsZXQgZjtyZXR1cm4gQm8oaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo''@;'; put 'put ''KSxsLmRyYWdnZWQucHVzaCgidG9wIiksbC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCExKTpCbyhoLnRhcmdldCwiYm90dG9tU2VsZWN0aW9uSGFu''@;'; put 'put ''ZGxlLUhpdEFyZWEiKT8oZj1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGwuZHJhZ2dlZC5wdXNoKCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVjdGlvbjpmLmdldERpcmVjdGlvbigpfSxoLnByZXZl''@;'; put 'put ''bnREZWZhdWx0KCksITEpOnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hlbmQiLGg9PkJvKGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwidG9wIiksbC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLGgucHJl''@;'; put 'put ''dmVudERlZmF1bHQoKSwhMSk6Qm8oaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDApLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIoYSwidG91Y2htb3ZlIixoPT57Y29uc3R7cm9vdERvY3VtZW50OmZ9PXRoaXMuaG90O2xldCBfLFQsVyxpZSxnZSx3ZTtpZigwPT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm47Y29uc3QgRWU9Zi5lbGVtZW50RnJvbVBvaW50KGgudG91Y2hlc1swXS5jbGllbnRYLGgudG91Y2hl''@;'; put 'put ''c1swXS5jbGllbnRZKTshRWV8fEVlPT09bC5sYXN0U2V0Q2VsbHx8KCgiVEQiPT09RWUubm9kZU5hbWV8fCJUSCI9PT1FZS5ub2RlTmFtZSkmJihfPWwuaG90LmdldENvb3JkcyhFZSksLTE9PT1fLmNvbCYmKF8uY29sPTApLFQ9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxXPVQuZ2V0''@;'; put 'put ''V2lkdGgoKSxpZT1ULmdldEhlaWdodCgpLGdlPVQuZ2V0RGlyZWN0aW9uKCksMT09PVcmJjE9PT1pZSYmbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKF8pLHdlPWwuZ2V0Q3VycmVudFJhbmdlQ29vcmRzKFQsXyxsLnRvdWNoU3RhcnRSYW5nZS5kaXJlY3Rpb24sZ2UsbC5kcmFnZ2VkWzBd''@;'; put 'put ''KSxudWxsIT09d2Uuc3RhcnQmJmwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KHdlLnN0YXJ0KSxsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQod2UuZW5kKSxsLmxhc3RTZXRDZWxsPUVlKSxoLnByZXZlbnREZWZhdWx0KCkpfSl9Z2V0Q3VycmVudFJhbmdlQ29vcmRzKGwsYSxkLGgs''@;'; put 'put ''Zil7Y29uc3QgXz1sLmdldFRvcFN0YXJ0Q29ybmVyKCksVD1sLmdldEJvdHRvbUVuZENvcm5lcigpLFc9bC5nZXRCb3R0b21TdGFydENvcm5lcigpLGllPWwuZ2V0VG9wRW5kQ29ybmVyKCk7bGV0IGdlPXtzdGFydDpudWxsLGVuZDpudWxsfTtzd2l0Y2goZCl7Y2FzZSJORS1TVyI6c3dpdGNo''@;'; put 'put ''KGgpe2Nhc2UiTkUtU1ciOmNhc2UiTlctU0UiOmdlPSJ0b3AiPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csbC5oaWdobGlnaHQuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVy5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMobC5oaWdobGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csXy5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWYmJihnZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVC5yb3csYS5jb2wpLGVu''@;'; put 'put ''ZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxfLmNvbCl9KX1icmVhaztjYXNlIk5XLVNFIjpzd2l0Y2goaCl7Y2FzZSJORS1TVyI6InRvcCI9PT1mP2dlPXtzdGFydDphLGVuZDpXfTpnZS5lbmQ9YTticmVhaztjYXNlIk5XLVNFIjoidG9wIj09PWY/Z2U9e3N0YXJ0OmEsZW5k''@;'; put 'put ''OlR9OmdlLmVuZD1hO2JyZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09Zj9nZT17c3RhcnQ6YSxlbmQ6X306Z2UuZW5kPWE7YnJlYWs7Y2FzZSJTVy1ORSI6InRvcCI9PT1mP2dlPXtzdGFydDphLGVuZDppZX06Z2UuZW5kPWF9YnJlYWs7Y2FzZSJTVy1ORSI6c3dpdGNoKGgpe2Nhc2UiTlctU0Ui''@;'; put 'put ''OmdlPSJib3R0b20iPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csXy5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhXLnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhfLnJvdyxhLmNvbCksZW5kOnRoaXMu''@;'; put 'put ''aG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LFQuY29sKX07YnJlYWs7Y2FzZSJTVy1ORSI6Z2U9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxULmNv''@;'; put 'put ''bCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxfLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKF8ucm93LGEuY29sKX07YnJlYWs7Y2FzZSJTRS1OVyI6ImJvdHRvbSI9PT1mP2dlPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhh''@;'; put 'put ''LnJvdyxpZS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhfLnJvdyxhLmNvbCl9OiJ0b3AiPT09ZiYmKGdlPXtzdGFydDpXLGVuZDphfSl9YnJlYWs7Y2FzZSJTRS1OVyI6c3dpdGNoKGgpe2Nhc2UiTlctU0UiOmNhc2UiTkUtU1ciOmNhc2UiU1ctTkUiOiJ0b3AiPT09ZiYm''@;'; put 'put ''KGdlLmVuZD1hKTticmVhaztjYXNlIlNFLU5XIjoidG9wIj09PWY/Z2UuZW5kPWE6Z2U9e3N0YXJ0OmEsZW5kOl99fX1yZXR1cm4gZ2V9aXNEcmFnZ2VkKCl7cmV0dXJuIHRoaXMuZHJhZ2dlZC5sZW5ndGg+MH19ZnVuY3Rpb24geHooKXtsZXR7bGFiZWw6Yz0iIixjb2xzcGFuOmw9MSxvcmln''@;'; put 'put ''Q29sc3BhbjphPTEsY29sbGFwc2libGU6ZD0hMSxjcm9zc0hpZGRlbkNvbHVtbnM6aD1bXSxpc0NvbGxhcHNlZDpmPSExLGlzSGlkZGVuOl89ITEsaXNSb290OlQ9ITEsaXNQbGFjZWhvbGRlcjpXPSExfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVu''@;'; put 'put ''dHNbMF06e307cmV0dXJue2xhYmVsOmMsY29sc3BhbjpsLG9yaWdDb2xzcGFuOmEsY29sbGFwc2libGU6ZCxpc0NvbGxhcHNlZDpmLGNyb3NzSGlkZGVuQ29sdW1uczpoLGlzSGlkZGVuOl8saXNSb290OlQsaXNQbGFjZWhvbGRlcjpXfX1mdW5jdGlvbiBFeihjLGwsYSl7KGZ1bmN0aW9uIFNI''@;'; put 'put ''ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gdzIoYyxsKXtyZXR1cm4gZnVuY3Rpb24gTUhlKGMsbCl7''@;'; put 'put ''cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxmb2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gS3koYyxsLGEpe3JldHVybiBmdW5jdGlvbiB4SGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''ImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLGZvZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gZm9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQg''@;'; put 'put ''b24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IHBvZT1bImxhYmVsIiwiY29sbGFwc2libGUiXTt2YXIgSmY9bmV3IFdlYWtNYXAsVmc9bmV3IFdlYWtNYXAsa3o9bmV3IFdlYWtNYXA7Y2xhc3MgRUhle2NvbnN0cnVjdG9yKCl7RXoodGhpcyxKZix7d3JpdGFibGU6ITAs''@;'; put 'put ''dmFsdWU6W119KSxFeih0aGlzLFZnLHt3cml0YWJsZTohMCx2YWx1ZTowfSksRXoodGhpcyxreix7d3JpdGFibGU6ITAsdmFsdWU6MS8wfSl9c2V0Q29sdW1uc0xpbWl0KGwpe0t5KHRoaXMsa3osbCl9c2V0RGF0YSgpe0t5KHRoaXMsSmYsZnVuY3Rpb24gQ0hlKGMpe2xldCBsPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLzA7Y29uc3QgYT1bXTtpZigwPT09bClyZXR1cm4gYTtJbihjLGg9Pntjb25zdCBmPVtdO2xldCBfPTA7YS5wdXNoKGYpLEluKGgsVD0+e2NvbnN0IFc9eHooKTtpZih1cyhUKSl7Y29uc3R7bGFiZWw6Z2Us''@;'; put 'put ''Y29sc3Bhbjp3ZX09VDtXLmxhYmVsPV9sKGdlKSwibnVtYmVyIj09dHlwZW9mIHdlJiZ3ZT4xJiYoVy5jb2xzcGFuPXdlLFcub3JpZ0NvbHNwYW49d2UpfWVsc2UgVy5sYWJlbD1fbChUKTtfKz1XLm9yaWdDb2xzcGFuO2xldCBpZT0hMTtpZihfPj1sJiYoVy5jb2xzcGFuPVcub3JpZ0NvbHNw''@;'; put 'put ''YW4tKF8tbCksVy5vcmlnQ29sc3Bhbj1XLmNvbHNwYW4saWU9ITApLGYucHVzaChXKSxXLmNvbHNwYW4+MSlmb3IobGV0IGdlPTA7Z2U8Vy5jb2xzcGFuLTE7Z2UrKylmLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtyZXR1cm4haWV9KX0pO2NvbnN0IGQ9TWF0aC5tYXgoLi4u''@;'; put 'put ''Y3MoYSxoPT5oLmxlbmd0aCkpO3JldHVybiBJbihhLGg9PntpZihoLmxlbmd0aDxkKXtjb25zdCBmPWNzKG5ldyBBcnJheShkLWgubGVuZ3RoKSwoKT0+eHooKSk7aC5zcGxpY2UoaC5sZW5ndGgsMCwuLi5mKX19KSxhfShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw''@;'; put 'put ''XT9hcmd1bWVudHNbMF06W10sdzIodGhpcyxreikpKSxLeSh0aGlzLFZnLHcyKHRoaXMsSmYpLmxlbmd0aCl9Z2V0RGF0YSgpe3JldHVybiB3Mih0aGlzLEpmKX1tZXJnZVdpdGgobCl7SW4obCxhPT57bGV0e3JvdzpkLGNvbDpoLC4uLmZ9PWE7Y29uc3QgXz10aGlzLmdldEhlYWRlclNldHRp''@;'; put 'put ''bmdzKGQsaCk7bnVsbCE9PV8mJktsKF8sZixwb2UpfSl9bWFwKGwpe0luKHcyKHRoaXMsSmYpLGE9PntJbihhLGQ9Pntjb25zdCBoPWwoey4uLmR9KTt1cyhoKSYmS2woZCxoLHBvZSl9KX0pfWdldEhlYWRlclNldHRpbmdzKGwsYSl7dmFyIGQ7aWYobD49dzIodGhpcyxWZyl8fGw8MClyZXR1''@;'; put 'put ''cm4gbnVsbDtjb25zdCBoPXcyKHRoaXMsSmYpW2xdO3JldHVybiBhPj1oLmxlbmd0aD9udWxsOm51bGwhPT0oZD1oW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyc1NldHRpbmdzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJn''@;'; put 'put ''dW1lbnRzWzJdOjE7Y29uc3QgaD1bXTtpZihsPj13Mih0aGlzLFZnKXx8bDwwKXJldHVybiBoO2NvbnN0IGY9dzIodGhpcyxKZilbbF07bGV0IF89MDtmb3IobGV0IFQ9YTtUPGYubGVuZ3RoO1QrKyl7Y29uc3QgVz1mW1RdO2lmKFcuaXNQbGFjZWhvbGRlcil0aHJvdyBuZXcgRXJyb3IoIlRo''@;'; put 'put ''ZSBmaXJzdCBjb2x1bW4gc2V0dGluZ3MgY2Fubm90IG92ZXJsYXAgdGhlIG90aGVyIGhlYWRlciBsYXllcnMiKTtpZihfKz1XLmNvbHNwYW4saC5wdXNoKFcpLFcuY29sc3Bhbj4xJiYoVCs9Vy5jb2xzcGFuLTEpLF89PT1kKWJyZWFrO2lmKF8+ZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBsYXN0''@;'; put 'put ''IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpfXJldHVybiBofWdldExheWVyc0NvdW50KCl7cmV0dXJuIHcyKHRoaXMsVmcpfWdldENvbHVtbnNDb3VudCgpe3JldHVybiB3Mih0aGlzLFZnKT4wP3cyKHRoaXMsSmYpWzBdLmxlbmd0aDow''@;'; put 'put ''fWNsZWFyKCl7S3kodGhpcyxKZixbXSksS3kodGhpcyxWZywwKX19ZnVuY3Rpb24gQXooYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGtIZShjKXt2YXIgbD1mdW5jdGlvbiBBSGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9''@;'; put 'put ''KTpjW2xdPWEsY31jb25zdCBfb2U9bmV3IE1hcChbWyJERi1wcmUtb3JkZXIiLGZ1bmN0aW9uIGdvZShjLGwpe2xldCBhPWMuY2FsbChsLHRoaXMpO2ZvcihsZXQgZD0wO2Q8dGhpcy5jaGlsZHMubGVuZ3RoO2QrKyl7aWYoITE9PT1hKXJldHVybiExO2E9Z29lLmNhbGwodGhpcy5jaGlsZHNb''@;'; put 'put ''ZF0sYyxsKX1yZXR1cm4gYX1dLFsiREYtcG9zdC1vcmRlciIsZnVuY3Rpb24gbW9lKGMsbCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcy5sZW5ndGg7YSsrKWlmKCExPT09bW9lLmNhbGwodGhpcy5jaGlsZHNbYV0sYyxsKSlyZXR1cm4hMTtyZXR1cm4gYy5jYWxsKGwsdGhpcyl9XSxbIkJG''@;'; put 'put ''IixmdW5jdGlvbiBJSGUoYyxsKXtjb25zdCBhPVt0aGlzXTshZnVuY3Rpb24gZCgpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm47Y29uc3QgaD1hLnNoaWZ0KCk7YS5wdXNoKC4uLmguY2hpbGRzKSwhMSE9PWMuY2FsbChsLGgpJiZkKCl9KCl9XV0pO2NsYXNzIEZBe2NvbnN0cnVjdG9yKGwpe0F6''@;'; put 'put ''KHRoaXMsImRhdGEiLHt9KSxBeih0aGlzLCJwYXJlbnQiLG51bGwpLEF6KHRoaXMsImNoaWxkcyIsW10pLHRoaXMuZGF0YT1sfWFkZENoaWxkKGwpe2wucGFyZW50PXRoaXMsdGhpcy5jaGlsZHMucHVzaChsKX1jbG9uZVRyZWUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcztjb25zdCBhPW5ldyBGQSh7Li4ubC5kYXRhfSk7Zm9yKGxldCBkPTA7ZDxsLmNoaWxkcy5sZW5ndGg7ZCsrKWEuYWRkQ2hpbGQodGhpcy5jbG9uZVRyZWUobC5jaGlsZHNbZF0pKTtyZXR1cm4gYX1yZXBsYWNlVHJlZVdpdGgobCl7dGhp''@;'; put 'put ''cy5kYXRhPXsuLi5sLmRhdGF9LHRoaXMuY2hpbGRzPVtdO2ZvcihsZXQgYT0wO2E8bC5jaGlsZHMubGVuZ3RoO2ErKyl0aGlzLmFkZENoaWxkKGwuY2hpbGRzW2FdKX13YWxrRG93bihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNb''@;'; put 'put ''MV06IkJGIjtpZighX29lLmhhcyhhKSl0aHJvdyBuZXcgRXJyb3IoYFRyYXZlcnNhbCBzdHJhdGVneSAiJHthfSIgZG9lcyBub3QgZXhpc3RgKTtfb2UuZ2V0KGEpLmNhbGwodGhpcyxsLHRoaXMpfXdhbGtVcChsKXtjb25zdCBhPXRoaXMsZD1oPT57ITEhPT1sLmNhbGwoYSxoKSYmbnVsbCE9''@;'; put 'put ''PWgucGFyZW50JiZkKGgucGFyZW50KX07ZCh0aGlzKX19ZnVuY3Rpb24gVHooYyxsLGEpeyhmdW5jdGlvbiBSSGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVj''@;'; put 'put ''dCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEt1KGMsbCl7cmV0dXJuIGZ1bmN0aW9uIE9IZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsYm9lKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIGJvZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIgSDc9bmV3IFdlYWtNYXAsQmc9bmV3IFdlYWtNYXAsTjc9bmV3IFdlYWtNYXA7Y2xhc3MgSEhle2NvbnN0cnVjdG9yKGwpe1R6KHRoaXMsSDcse3dyaXRh''@;'; put 'put ''YmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxUeih0aGlzLEJnLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksVHoodGhpcyxONyx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGZ1bmN0aW9uIFBIZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIEZIZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2Fs''@;'; put 'put ''bChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsYm9lKGMsbCwic2V0IiksYSksYX0odGhpcyxONyxsKX1nZXRSb290cygpe3JldHVybiBBcnJheS5mcm9t''@;'; put 'put ''KEt1KHRoaXMsSDcpLnZhbHVlcygpKX1nZXRSb290QnlDb2x1bW4obCl7bGV0IGE7cmV0dXJuIEt1KHRoaXMsQmcpLmhhcyhsKSYmKGE9S3UodGhpcyxINykuZ2V0KEt1KHRoaXMsQmcpLmdldChsKSkpLGF9Z2V0Tm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5nZXRSb290QnlDb2x1bW4oYSk7aWYo''@;'; put 'put ''IWQpcmV0dXJuO2NvbnN0IGg9YS1LdSh0aGlzLEJnKS5nZXQoYSk7bGV0IF8sZj0wO3JldHVybiBkLndhbGtEb3duKFQ9Pntjb25zdHtkYXRhOntvcmlnQ29sc3BhbjpXLGhlYWRlckxldmVsOmllfX09VDtpZihsPT09aWUpe2lmKGg+PWYmJmg8PWYrVy0xKXJldHVybiBfPVQsXy5kYXRhLmlz''@;'; put 'put ''Um9vdD1hPT09Xy5kYXRhLmNvbHVtbkluZGV4LCExO2YrPVd9fSksX31yZWJ1aWxkVHJlZUluZGV4KCl7bGV0IGw9MDtLdSh0aGlzLEJnKS5jbGVhcigpLEluKEt1KHRoaXMsSDcpLGE9PntsZXRbLHtkYXRhOntjb2xzcGFuOmR9fV09YTtmb3IobGV0IGg9bDtoPGwrZDtoKyspS3UodGhpcyxC''@;'; put 'put ''Zykuc2V0KGgsbCk7bCs9ZH0pfWJ1aWxkVHJlZSgpe3RoaXMuY2xlYXIoKTtjb25zdCBsPUt1KHRoaXMsTjcpLmdldENvbHVtbnNDb3VudCgpO2xldCBhPTA7Zm9yKDthPGw7KXtjb25zdCBkPUt1KHRoaXMsTjcpLmdldEhlYWRlclNldHRpbmdzKDAsYSksaD1uZXcgRkE7S3UodGhpcyxINyku''@;'; put 'put ''c2V0KGEsaCksdGhpcy5idWlsZExlYXZlcyhoLGEsMCxkLm9yaWdDb2xzcGFuKSxhKz1kLm9yaWdDb2xzcGFufXRoaXMucmVidWlsZFRyZWVJbmRleCgpfWJ1aWxkTGVhdmVzKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNb''@;'; put 'put ''M106MTtjb25zdCBmPUt1KHRoaXMsTjcpLmdldEhlYWRlcnNTZXR0aW5ncyhkLGEsaCk7ZCs9MSxJbihmLF89Pntjb25zdCBUPXsuLi5fLGhlYWRlckxldmVsOmQtMSxjb2x1bW5JbmRleDphfTtsZXQgVzsxPT09ZD8obC5kYXRhPVQsVz1sKTooVz1uZXcgRkEoVCksbC5hZGRDaGlsZChXKSks''@;'; put 'put ''ZDxLdSh0aGlzLE43KS5nZXRMYXllcnNDb3VudCgpJiZ0aGlzLmJ1aWxkTGVhdmVzKFcsYSxkLF8ub3JpZ0NvbHNwYW4pLGErPV8ub3JpZ0NvbHNwYW59KX1jbGVhcigpe0t1KHRoaXMsSDcpLmNsZWFyKCksS3UodGhpcyxCZykuY2xlYXIoKX19ZnVuY3Rpb24geW9lKGMsbCl7Yy53YWxrRG93''@;'; put 'put ''bihhPT57bGV0e2RhdGE6ZCxjaGlsZHM6aH09YTtpZighZC5pc0hpZGRlbiYmKGwoZC5jb2x1bW5JbmRleCksMD09PWgubGVuZ3RoKSlmb3IobGV0IGY9MTtmPGQuY29sc3BhbjtmKyspbChkLmNvbHVtbkluZGV4K2YpfSl9ZnVuY3Rpb24gSEEoYyxsKXtsZXR7Y2hpbGRzOmF9PWM7aWYoMCE9''@;'; put 'put ''PWEubGVuZ3RoKXJldHVybiBhWzBdLmRhdGFbbF19ZnVuY3Rpb24gTkEoYyl7cmV0dXJuIEhBKGMsIm9yaWdDb2xzcGFuIik9PT1jLmRhdGEub3JpZ0NvbHNwYW59ZnVuY3Rpb24gRHooYyl7Y29uc3R7ZGF0YTpsLGNoaWxkczphfT1jO2lmKCFsLmlzQ29sbGFwc2VkfHxsLmlzSGlkZGVufHxs''@;'; put 'put ''Lm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoTkEoYykpcmV0dXJuIER6KGFbMF0pO2wuaXNDb2xsYXBzZWQ9ITE7Y29uc3QgaD1hLnNsaWNlKDEpLGY9bmV3IFNldDts''@;'; put 'put ''ZXQgXz0wO2lmKGgubGVuZ3RoPjApSW4oaCxUPT57VC5yZXBsYWNlVHJlZVdpdGgoVC5kYXRhLmNsb25lZFRyZWUpLFQuZGF0YS5jbG9uZWRUcmVlPW51bGwsXys9VC5kYXRhLmNvbHNwYW4seW9lKFQsaWU9PntmLmFkZChpZSl9KX0pO2Vsc2V7Y29uc3R7Y29sc3BhbjpULG9yaWdDb2xzcGFu''@;'; put 'put ''OlcsY29sdW1uSW5kZXg6aWV9PWw7Xz1XLVQ7Zm9yKGxldCBnZT0xO2dlPFc7Z2UrKylmLmFkZChpZStnZSl9cmV0dXJuIGMud2Fsa1VwKFQ9Pntjb25zdHtkYXRhOld9PVQ7Vy5jb2xzcGFuKz1fLFcuY29sc3Bhbj49Vy5vcmlnQ29sc3Bhbj8oVy5jb2xzcGFuPVcub3JpZ0NvbHNwYW4sVy5p''@;'; put 'put ''c0NvbGxhcHNlZD0hMSk6TkEoVCkmJihXLmlzQ29sbGFwc2VkPUhBKFQsImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5JeihjKSxhZmZlY3RlZENvbHVtbnM6QXJyYXkuZnJvbShmKSxjb2xzcGFuQ29tcGVuc2F0aW9uOl99fWZ1bmN0aW9uIEl6KGMpe3ZhciBs''@;'; put 'put ''O2NvbnN0e2RhdGE6YSxjaGlsZHM6ZH09YztpZihhLmlzQ29sbGFwc2VkfHxhLmlzSGlkZGVufHxhLm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoTkEoYykpcmV0dXJu''@;'; put 'put ''IEl6KGRbMF0pO2EuaXNDb2xsYXBzZWQ9ITA7Y29uc3QgZj1kLnNsaWNlKDEpLF89bmV3IFNldDtpZihmLmxlbmd0aD4wKUluKGYsVz0+e3lvZShXLGllPT57Xy5hZGQoaWUpfSksVy5kYXRhLmNsb25lZFRyZWU9Vy5jbG9uZVRyZWUoKSxXLndhbGtEb3duKGllPT57bGV0e2RhdGE6Z2V9PWll''@;'; put 'put ''O2dlLmlzSGlkZGVuPSEwfSl9KTtlbHNle2NvbnN0e29yaWdDb2xzcGFuOlcsY29sdW1uSW5kZXg6aWV9PWE7Zm9yKGxldCBnZT0xO2dlPFc7Z2UrKylfLmFkZChpZStnZSl9Y29uc3QgVD1hLmNvbHNwYW4tKG51bGwhPT0obD1IQShjLCJjb2xzcGFuIikpJiZ2b2lkIDAhPT1sP2w6MSk7cmV0''@;'; put 'put ''dXJuIGMud2Fsa1VwKFc9Pntjb25zdHtkYXRhOmllfT1XO2llLmNvbHNwYW4tPVQsaWUuY29sc3Bhbjw9MT8oaWUuY29sc3Bhbj0xLGllLmlzQ29sbGFwc2VkPSEwKTpOQShXKSYmKGllLmlzQ29sbGFwc2VkPUhBKFcsImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigp''@;'; put 'put ''PT5EeihjKSxhZmZlY3RlZENvbHVtbnM6QXJyYXkuZnJvbShfKSxjb2xzcGFuQ29tcGVuc2F0aW9uOlR9fWNvbnN0IHdvZT1uZXcgTWFwKFtbImNvbGxhcHNlIixJel0sWyJleHBhbmQiLER6XSxbImhpZGUtY29sdW1uIixmdW5jdGlvbiBOSGUoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihs''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKEFhYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4g''@;'; put 'put ''T25seSBmb3JceDIwCnRoZSBsYXN0IG5vZGUsIHRoZSBoaWRlIGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZihhLmluY2x1ZGVzKGwpKXJldHVybjtsZXQgZD0hMTtjLndhbGtVcChoPT57Y29uc3R7ZGF0''@;'; put 'put ''YTp7Y29sbGFwc2libGU6Zn19PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnB1c2gobCksZi5jb2xzcGFuPjE/Zi5jb2xzcGFuLT0xOmYuaXNIaWRkZW49ITB9KX1dLFsic2hvdy1jb2x1bW4iLGZ1''@;'; put 'put ''bmN0aW9uIFZIZShjLGwpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoQWFgVGhlIHBhc3NlZCBu''@;'; put 'put ''b2RlIGlzIG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwgdGhlIHNob3cgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKCFhLmluY2x1ZGVzKGwp''@;'; put 'put ''KXJldHVybjtsZXQgZD0hMTtjLndhbGtVcChoPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6Zn19PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnNwbGljZShmLmNyb3NzSGlkZGVuQ29sdW1ucy5p''@;'; put 'put ''bmRleE9mKGwpLDEpLCFmLmlzSGlkZGVuJiZmLmNvbHNwYW48Zi5vcmlnQ29sc3BhbiYmKGYuY29sc3Bhbis9MSksZi5pc0hpZGRlbj0hMX0pfV1dKTtmdW5jdGlvbiBWQShjKXtjb25zdCBsPVtdO3JldHVybiBJbihjLGE9PnthLndhbGtEb3duKGQ9Pntjb25zdCBoPWQuZGF0YSx7b3JpZ0Nv''@;'; put 'put ''bHNwYW46Zixjb2x1bW5JbmRleDpfLGhlYWRlckxldmVsOlQsY3Jvc3NIaWRkZW5Db2x1bW5zOld9PWgsaWU9ZnVuY3Rpb24gekhlKGMsbCl7bGV0IGE7cmV0dXJuIEFycmF5LmlzQXJyYXkoY1tsXSk/YT1jW2xdOihhPVtdLGNbbF09YSksYX0obCxUKTtsZXQgZ2U9ITE7Zm9yKGxldCB3ZT1f''@;'; put 'put ''O3dlPF8rZjt3ZSsrKWlmKFcuaW5jbHVkZXMod2UpfHxnZSlpZS5wdXNoKHtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwfSk7ZWxzZXtjb25zdCBaZT1qSGUoaCk7WmUuaXNSb290PSEwLGllLnB1c2goWmUpLGdlPSEwfX0pfSksbH1mdW5jdGlvbiBqSGUoYyl7Y29uc3R7Y3Jvc3NIaWRkZW5D''@;'; put 'put ''b2x1bW5zOmwsLi4uYX09eHooYyk7cmV0dXJuIGF9ZnVuY3Rpb24gTHooYyxsLGEpeyhmdW5jdGlvbiBVSGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIp''@;'; put 'put ''fSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFh5KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gWkhlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRl''@;'; put 'put ''IGZpZWxkIik7bC52YWx1ZT1hfX0oYyxDb2UoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFRsKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIFlIZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsQ29lKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIENvZShjLGwsYSl7aWYoIWwu''@;'; put 'put ''aGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIgRWg9bmV3IFdlYWtNYXAsQzE9bmV3IFdlYWtNYXAsamc9bmV3IFdlYWtNYXA7Y2xhc3MgV0hle2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7THoodGhpcyxFaCx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IEVIZX0pLEx6KHRoaXMsQzEse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBISGUoVGwodGhpcyxFaCkpfSksTHoodGhpcyxqZyx7d3JpdGFibGU6ITAsdmFsdWU6W1tdXX0pfXNldFN0YXRlKGwpe1RsKHRoaXMsRWgpLnNldERhdGEo''@;'; put 'put ''bCk7bGV0IGE9ITE7dHJ5e1RsKHRoaXMsQzEpLmJ1aWxkVHJlZSgpfWNhdGNoe1RsKHRoaXMsQzEpLmNsZWFyKCksVGwodGhpcyxFaCkuY2xlYXIoKSxhPSEwfXJldHVybiBYeSh0aGlzLGpnLFZBKFRsKHRoaXMsQzEpLmdldFJvb3RzKCkpKSxhfXNldENvbHVtbnNMaW1pdChsKXtUbCh0aGlz''@;'; put 'put ''LEVoKS5zZXRDb2x1bW5zTGltaXQobCl9bWVyZ2VTdGF0ZVdpdGgobCl7Y29uc3QgYT1jcyhsLGQ9PntsZXR7cm93OmgsLi4uZn09ZDtyZXR1cm57cm93Omg8MD90aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoaCk6aCwuLi5mfX0pO1RsKHRoaXMsRWgpLm1lcmdlV2l0aChhKSxUbCh0aGlzLEMxKS5i''@;'; put 'put ''dWlsZFRyZWUoKSxYeSh0aGlzLGpnLFZBKFRsKHRoaXMsQzEpLmdldFJvb3RzKCkpKX1tYXBTdGF0ZShsKXtUbCh0aGlzLEVoKS5tYXAobCksVGwodGhpcyxDMSkuYnVpbGRUcmVlKCksWHkodGhpcyxqZyxWQShUbCh0aGlzLEMxKS5nZXRSb290cygpKSl9bWFwTm9kZXMobCl7cmV0dXJuIEFs''@;'; put 'put ''KFRsKHRoaXMsQzEpLmdldFJvb3RzKCksKGEsZCk9PihkLndhbGtEb3duKGg9Pntjb25zdCBmPWwoaC5kYXRhKTt2b2lkIDAhPT1mJiZhLnB1c2goZil9KSxhKSxbXSl9dHJpZ2dlck5vZGVNb2RpZmljYXRpb24obCxhLGQpe2E8MCYmKGE9dGhpcy5yb3dDb29yZHNUb0xldmVsKGEpKTtjb25z''@;'; put 'put ''dCBoPVRsKHRoaXMsQzEpLmdldE5vZGUoYSxkKTtsZXQgZjtyZXR1cm4gaCYmKGY9ZnVuY3Rpb24gQkhlKGMsbCxhKXtpZighd29lLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBub2RlIG1vZGlmaWVyIGFjdGlvbiAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gd29lLmdl''@;'; put 'put ''dChjKShsLGEpfShsLGgsZCksWHkodGhpcyxqZyxWQShUbCh0aGlzLEMxKS5nZXRSb290cygpKSkpLGZ9dHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihsLGEpe3JldHVybiB0aGlzLnRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGwsLTEsYSl9cm93Q29vcmRzVG9MZXZlbChsKXtpZihsPj0wKXJl''@;'; put 'put ''dHVybiBudWxsO2NvbnN0IGE9bCtNYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGE8MD9udWxsOmF9bGV2ZWxUb1Jvd0Nvb3JkcyhsKXtpZihsPDApcmV0dXJuIG51bGw7Y29uc3QgYT1sLU1hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYT49''@;'; put 'put ''MD9udWxsOmF9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZCxoO3JldHVybiBsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKT9udWxsOm51bGwhPT0oZD1udWxsPT09KGg9VGwodGhpcyxqZylbbF0pfHx2b2lkIDA9''@;'; put 'put ''PT1oP3ZvaWQgMDpoW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwsYSl7aWYobDwwJiYobD10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwobCkpLG51bGw9PT1sfHxsPj10aGlzLmdldExheWVyc0NvdW50KCkpcmV0dXJuIG51bGw7Y29uc3QgZD1UbCh0aGlzLEMx''@;'; put 'put ''KS5nZXROb2RlKGwsYSk7cmV0dXJuIGQ/ey4uLmQuZGF0YX06bnVsbH1maW5kTGVmdE1vc3RDb2x1bW5JbmRleChsLGEpe3ZhciBkO2NvbnN0e2lzUm9vdDpofT1udWxsIT09KGQ9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSYmdm9pZCAwIT09ZD9kOntpc1Jvb3Q6ITB9O2lmKGgpcmV0''@;'; put 'put ''dXJuIGE7bGV0IGY9YS0xO2Zvcig7Zj49MDspe3ZhciBfO2NvbnN0e2lzUm9vdDpUfT1udWxsIT09KF89dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGYpKSYmdm9pZCAwIT09Xz9fOntpc1Jvb3Q6ITB9O2lmKFQpYnJlYWs7Zi09MX1yZXR1cm4gZn1nZXRMYXllcnNDb3VudCgpe3JldHVybiBU''@;'; put 'put ''bCh0aGlzLEVoKS5nZXRMYXllcnNDb3VudCgpfWdldENvbHVtbnNDb3VudCgpe3JldHVybiBUbCh0aGlzLEVoKS5nZXRDb2x1bW5zQ291bnQoKX1jbGVhcigpe1h5KHRoaXMsamcsW10pLFRsKHRoaXMsRWgpLmNsZWFyKCksVGwodGhpcyxDMSkuY2xlYXIoKX19ZnVuY3Rpb24gSnkoYyxsLGEp''@;'; put 'put ''e3JldHVybiBsPWZ1bmN0aW9uIEdIZShjKXt2YXIgbD1mdW5jdGlvbiAkSGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBTb2UoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIFhIZShjKXt2''@;'; put 'put ''YXIgbD1mdW5jdGlvbiBKSGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4g''@;'; put 'put ''ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBp''@;'; put 'put ''biBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBNb2UoYyxsLGEpeyhmdW5jdGlvbiBRSGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD''@;'; put 'put ''YW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEJBKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gZU5lKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53''@;'; put 'put ''cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyx4b2UoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFNsKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIHROZShjLGwpe3JldHVybiBsLmdldD9sLmdl''@;'; put 'put ''dC5jYWxsKGMpOmwudmFsdWV9KGMseG9lKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIHhvZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1jb25zdCBF''@;'; put 'put ''b2U9Im5lc3RlZEhlYWRlcnMiO3ZhciBKbD1uZXcgV2Vha01hcCxzND1uZXcgV2Vha01hcDtjbGFzcyByTmUgZXh0ZW5kcyBac3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksTW9lKHRoaXMsSmwse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBXSGV9KSxNb2UodGhpcyxzNCx7d3Jp''@;'; put 'put ''dGFibGU6ITAsdmFsdWU6bnVsbH0pLFNvZSh0aGlzLCJnaG9zdFRhYmxlIixuZXcgY2xhc3MgcUhle2NvbnN0cnVjdG9yKGwsYSl7SnkodGhpcywiaG90Iix2b2lkIDApLEp5KHRoaXMsIm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyIix2b2lkIDApLEp5KHRoaXMsImxheWVyc0NvdW50Iiww''@;'; put 'put ''KSxKeSh0aGlzLCJjb250YWluZXIiLHZvaWQgMCksSnkodGhpcywid2lkdGhzTWFwIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcj1hLHRoaXMud2lkdGhzTWFwPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5k''@;'; put 'put ''ZXhNYXAoIm5lc3RlZEhlYWRlcnMud2lkdGhzTWFwIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKX1zZXRMYXllcnNDb3VudChsKXtyZXR1cm4gdGhpcy5sYXllcnNDb3VudD1sLHRoaXN9Z2V0V2lkdGgobCl7cmV0dXJuIHRoaXMud2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsQ29sdW1uKGwpKX1idWlsZFdpZHRoc01hcCgpe3RoaXMuY29udGFpbmVyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJoYW5kc29udGFibGUiLCJodEdob3N0VGFibGUiLCJodEF1dG9TaXpl''@;'; put 'put ''IiksdGhpcy5fYnVpbGRHaG9zdFRhYmxlKHRoaXMuY29udGFpbmVyKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7Y29uc3QgbD10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJ0cjpsYXN0LW9mLXR5cGUgdGgiKSxhPWwubGVu''@;'; put 'put ''Z3RoO3RoaXMud2lkdGhzTWFwLmNsZWFyKCk7Zm9yKGxldCBkPTA7ZDxhO2QrKyl7Y29uc3QgaD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGQpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihoKTt0aGlzLndpZHRoc01hcC5zZXRW''@;'; put 'put ''YWx1ZUF0SW5kZXgoZixsW2RdLm9mZnNldFdpZHRoKX10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmNvbnRhaW5lcj1udWxsfV9idWlsZEdob3N0VGFibGUobCl7Y29uc3R7cm9vdERvY3VtZW50OmEsY29sdW1uSW5kZXhNYXBwZXI6''@;'; put 'put ''ZH09dGhpcy5ob3QsaD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmPWEuY3JlYXRlRWxlbWVudCgidGFibGUiKSxfPSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsVD1kLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk7Zm9yKGxldCBXPTA7Vzx0aGlzLmxheWVy''@;'; put 'put ''c0NvdW50O1crKyl7Y29uc3QgaWU9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO2ZvcihsZXQgZ2U9MDtnZTxUO2dlKyspe2xldCB3ZT1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZ2UpO251bGw9PT13ZSYmKHdlPWdlKTtjb25zdCBFZT1hLmNyZWF0ZUVsZW1lbnQoInRoIiksWmU9dGhp''@;'; put 'put ''cy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcihXLHdlKTtpZihaZSYmKCFaZS5pc1BsYWNlaG9sZGVyfHxaZS5pc0hpZGRlbikpe2xldCBvdD1aZS5sYWJlbDtfJiYob3QrPSc8YnV0dG9uIGNsYXNzPSJjaGFuZ2VUeXBlIj48L2J1dHRvbj4nKSxnZyhFZSxvdCksRWUuY29sU3Bhbj1aZS5j''@;'; put 'put ''b2xzcGFuLGllLmFwcGVuZENoaWxkKEVlKX19Zi5hcHBlbmRDaGlsZChpZSl9aC5hcHBlbmRDaGlsZChmKSxsLmFwcGVuZENoaWxkKGgpfWNsZWFyKCl7dGhpcy53aWR0aHNNYXAuY2xlYXIoKSx0aGlzLmNvbnRhaW5lcj1udWxsfX0odGhpcy5ob3QsKGwsYSk9PnRoaXMuZ2V0SGVhZGVyU2V0''@;'; put 'put ''dGluZ3MobCxhKSkpLFNvZSh0aGlzLCJkZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEVvZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyODB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpW0VvZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsoIUFycmF5LmlzQXJyYXkoYSl8fCFBcnJheS5pc0FycmF5KGFbMF0pKSYmR2EoQWFgWW91ciBOZXN0''@;'; put 'put ''ZWQgSGVhZGVycyBwbHVnaW4gY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiBUaGUgc2V0dGluZ3MgaGFzIHRvIGJlXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIGUucS4gW1snQTEnLCB7IGxhYmVsOiAnQTInLCBjb2xzcGFuOiAyIH1d''@;'; put 'put ''XWApLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PnRoaXMub25Jbml0KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VPdmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixkPT50aGlzLm9uQWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJl''@;'; put 'put ''cnMoZCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlDb2xXaWR0aCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeUNvbHVtbkhl''@;'; put 'put ''YWRlclZhbHVlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb3B5''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlQ29weSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSgu''@;'; put 'put ''Li5hcmd1bWVudHMpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRhdGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO1NsKHRoaXMsSmwpLnNldENvbHVtbnNM''@;'; put 'put ''aW1pdCh0aGlzLmhvdC5jb3VudENvbHMoKSksQXJyYXkuaXNBcnJheShsKSYmKHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycz1TbCh0aGlzLEpsKS5zZXRTdGF0ZShsKSksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzJiZHYShBYWBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdp''@;'; put 'put ''biBzZXR1cCBjb250YWlucyBvdmVybGFwcGluZyBoZWFkZXJzLiBUaGlzIGtpbmQgb2YgY29uZmlndXJhdGlvblx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCksdGhpcy5lbmFibGVkJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5o''@;'; put 'put ''aWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD0hMD09PWE/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO1NsKHRoaXMsSmwpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oaCxkKX0pLCFTbCh0aGlzLHM0KSYmdGhpcy5lbmFi''@;'; put 'put ''bGVkJiZCQSh0aGlzLHM0LHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUNoYW5nZXNPYnNlcnZlcigiaGlkaW5nIikuc3Vic2NyaWJlKGE9PnthLmZvckVhY2goZD0+e2xldHtvcDpoLGluZGV4OmYsbmV3VmFsdWU6X309ZDtpZigicmVwbGFjZSI9PT1oKXtjb25zdCBUPSEwPT09''@;'; put 'put ''Xz8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7U2wodGhpcyxKbCkudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihULGYpfX0pLHRoaXMuZ2hvc3RUYWJsZS5idWlsZFdpZHRoc01hcCgpfSkpLHRoaXMuZ2hvc3RUYWJsZS5zZXRMYXllcnNDb3VudCh0aGlzLmdldExheWVyc0NvdW50KCkp''@;'; put 'put ''LmJ1aWxkV2lkdGhzTWFwKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xzcGFucygpLFNsKHRoaXMsSmwpLmNsZWFyKCksU2wodGhpcyxzNCkudW5zdWJzY3JpYmUoKSxCQSh0aGlzLHM0LG51bGwpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhcigpLHN1''@;'; put 'put ''cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTdGF0ZU1hbmFnZXIoKXtyZXR1cm4gU2wodGhpcyxKbCl9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gU2wodGhpcyxKbCkuZ2V0TGF5ZXJzQ291bnQoKX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3JldHVybiBTbCh0aGlzLEpsKS5nZXRIZWFkZXJTZXR0''@;'; put 'put ''aW5ncyhsLGEpfWNsZWFyQ29sc3BhbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7X3d0Omx9PXRoaXMuaG90LnZpZXcsYT1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsZD1sLnd0VGFibGUuVEhFQUQsaD1sLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLlRIRUFELGY9bC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT9sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbDtmb3IobGV0IF89MDtfPGE7XysrKXtjb25zdCBUPWQuY2hpbGROb2Rl''@;'; put 'put ''c1tfXTtpZighVClicmVhaztjb25zdCBXPWguY2hpbGROb2Rlc1tfXSxpZT1mP2YuY2hpbGROb2Rlc1tfXTpudWxsO2ZvcihsZXQgZ2U9MCx3ZT1ULmNoaWxkTm9kZXMubGVuZ3RoO2dlPHdlO2dlKyspVC5jaGlsZE5vZGVzW2dlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxXbyhULmNo''@;'; put 'put ''aWxkTm9kZXNbZ2VdLCJoaWRkZW5IZWFkZXIiKSxXJiZXLmNoaWxkTm9kZXNbZ2VdJiYoVy5jaGlsZE5vZGVzW2dlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxXbyhXLmNoaWxkTm9kZXNbZ2VdLCJoaWRkZW5IZWFkZXIiKSksZiYmaWUmJmllLmNoaWxkTm9kZXNbZ2VdJiYoaWUuY2hp''@;'; put 'put ''bGROb2Rlc1tnZV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksV28oaWUuY2hpbGROb2Rlc1tnZV0sImhpZGRlbkhlYWRlciIpKX19aGVhZGVyUmVuZGVyZXJGYWN0b3J5KGwpe3ZhciBhPXRoaXM7Y29uc3QgZD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNT''@;'; put 'put ''dGFydCIpO3JldHVybihoLGYpPT57dmFyIF87Y29uc3R7Y29sdW1uSW5kZXhNYXBwZXI6VCx2aWV3Old9PXRoaXMuaG90O2xldCBpZT1ULmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCk7bnVsbD09PWllJiYoaWU9aCksZi5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxXbyhmLCJo''@;'; put 'put ''aWRkZW5IZWFkZXIiKTtjb25zdHtjb2xzcGFuOmdlLGlzSGlkZGVuOndlLGlzUGxhY2Vob2xkZXI6RWV9PW51bGwhPT0oXz1TbCh0aGlzLEpsKS5nZXRIZWFkZXJTZXR0aW5ncyhsLGllKSkmJnZvaWQgMCE9PV8/Xzp7bGFiZWw6IiJ9O2lmKEVlfHx3ZSlwaShmLCJoaWRkZW5IZWFkZXIiKTtl''@;'; put 'put ''bHNlIGlmKGdlPjEpe3ZhciBaZSxvdDtjb25zdHt3dE92ZXJsYXlzOmV0fT1XLl93dCx5dD1udWxsPT09KFplPWV0LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PVplP3ZvaWQgMDpaZS5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpLGt0PW51bGw9PT0ob3Q9''@;'; put 'put ''ZXQuaW5saW5lU3RhcnRPdmVybGF5KXx8dm9pZCAwPT09b3Q/dm9pZCAwOm90LmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZiksU3Q9eXR8fGt0P01hdGgubWluKGdlLGQtaCk6Z2U7U3Q+MSYmZi5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLFN0KX10aGlzLmhvdC52aWV3LmFwcGVuZENv''@;'; put 'put ''bEhlYWRlcihpZSxmLGZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0Q29sdW1uSGVhZGVyVmFsdWUoLi4uYXJndW1lbnRzKX0sbCl9fWdldENvbHVtbkhlYWRlclZhbHVlKGwsYSl7dmFyIGQ7Y29uc3R7aXNIaWRkZW46aCxpc1BsYWNlaG9sZGVyOmZ9PW51bGwhPT0oZD1TbCh0aGlzLEpsKS5nZXRI''@;'; put 'put ''ZWFkZXJTZXR0aW5ncyhhLGwpKSYmdm9pZCAwIT09ZD9kOnt9O3JldHVybiBmfHxoPyIiOnRoaXMuaG90LmdldENvbEhlYWRlcihsLGEpfW9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyKGwsYSxkKXtjb25zdCBoPVNsKHRoaXMsSmwpLmdldEhlYWRlclRyZWVOb2RlRGF0YShhLGwp''@;'; put 'put ''O2lmKCFoKXJldHVybiBsO2NvbnN0e2NsYXNzTmFtZXM6Zixjb2x1bW5DdXJzb3I6XyxzZWxlY3Rpb25UeXBlOlQsc2VsZWN0aW9uV2lkdGg6V309ZCx7aXNSb290OmllLGNvbHNwYW46Z2V9PVNsKHRoaXMsSmwpLmdldEhlYWRlclNldHRpbmdzKGEsbCk7aWYoVD09PWJ5KXtpZighaWUpcmV0''@;'; put 'put ''dXJuIGguY29sdW1uSW5kZXh9ZWxzZSBUPT09T2smJihnZT5XLV98fCFpZSkmJihmLmxlbmd0aD0wKTtyZXR1cm4gbH1vbkJlZm9yZUNvcHkobCxhLGQpe2xldHtjb2x1bW5IZWFkZXJzQ291bnQ6aH09ZDtpZigwIT09aClmb3IobGV0IF89MDtfPGEubGVuZ3RoO18rKyl7Y29uc3R7c3RhcnRS''@;'; put 'put ''b3c6VCxzdGFydENvbDpXLGVuZFJvdzppZSxlbmRDb2w6Z2V9PWFbX10sd2U9aWUtVCsxO2lmKFQ+PTB8fDE9PVctZ2UrMSlicmVhaztmb3IobGV0IFplPVc7WmU8PWdlO1plKyspZm9yKGxldCBvdD1UO290PD1pZTtvdCsrKXt2YXIgZjtjb25zdCBldD13ZStvdCx5dD1aZS1XOzAhPT15dCYm''@;'; put 'put ''ITE9PT0obnVsbD09PShmPVNsKHRoaXMsSmwpLmdldEhlYWRlclRyZWVOb2RlRGF0YShvdCxaZSkpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmlzUm9vdCkmJihsW2V0XVt5dF09IiIpfX19b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQsaCl7dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRh''@;'; put 'put ''QnlDb29yZHMoYSkmJihoLmNvbHVtbj0hMCl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpe2NvbnN0IGQ9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMoYSk7aWYoIWQpcmV0dXJuO2NvbnN0e3NlbGVjdGlvbjpofT10aGlzLmhvdCxmPWguaXNTZWxlY3RlZCgpP2guZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLF89W10se2NvbHVtbkluZGV4OlQsb3JpZ0NvbHNwYW46V309ZCxpZT0haC5pbkluU2VsZWN0aW9uKGEpO2wuc2hpZnRLZXkmJmY/YS5jb2w8Zi5mcm9tLmNvbD9fLnB1c2goZi5nZXRUb3BFbmRDb3JuZXIoKS5jb2wsVCxhLnJvdyk6Xy5w''@;'; put 'put ''dXNoKGEuY29sPmYuZnJvbS5jb2w/Zi5nZXRUb3BTdGFydENvcm5lcigpLmNvbDpULFQrVy0xLGEucm93KTooaGsobCl8fFVwKGwpJiZpZSkmJl8ucHVzaChULFQrVy0xLGEucm93KSxoLnNlbGVjdENvbHVtbnMoLi4uXyl9b25CZWZvcmVPbkNlbGxNb3VzZU92ZXIobCxhLGQsaCl7aWYoIXRo''@;'; put 'put ''aXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSlyZXR1cm47Y29uc3QgZj10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKTtpZighZilyZXR1cm47Y29uc3R7Y29sdW1uSW5kZXg6XyxvcmlnQ29sc3BhbjpUfT1mLFc9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxp''@;'; put 'put ''ZT1XLmdldFRvcFN0YXJ0Q29ybmVyKCksZ2U9Vy5nZXRCb3R0b21FbmRDb3JuZXIoKSx7ZnJvbTp3ZX09VztoLmNvbHVtbj0hMCxoLmNlbGw9ITA7Y29uc3QgRWU9W107YS5jb2w8d2UuY29sP0VlLnB1c2goZ2UuY29sLF8pOkVlLnB1c2goYS5jb2w+d2UuY29sP2llLmNvbDpfLF8rVC0xKSx0''@;'; put 'put ''aGlzLmhvdC5zZWxlY3RDb2x1bW5zKC4uLkVlKX1vbkFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzKGwpe2wubGVuZ3RoPTA7Zm9yKGxldCBhPTA7YTxTbCh0aGlzLEpsKS5nZXRMYXllcnNDb3VudCgpO2ErKylsLnB1c2godGhpcy5oZWFkZXJSZW5kZXJlckZhY3RvcnkoYSkpfW9uQWZ0''@;'; put 'put ''ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZShsKXtjb25zdCBhPVNsKHRoaXMsSmwpLmdldExheWVyc0NvdW50KCk7bGV0IGQ9bC5zdGFydENvbHVtbixoPSEhYTtmb3IobGV0IGY9MDtmPGE7ZisrKXtjb25zdCBfPVNsKHRoaXMsSmwpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4''@;'; put 'put ''KGYsbC5zdGFydENvbHVtbiksVD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF8pO2lmKF8+PTAmJihoPSExKSxHdShUKSYmVDxsLnN0YXJ0Q29sdW1uKXtkPVQ7YnJlYWt9fWwuc3RhcnRDb2x1bW49aD9TbCh0aGlzLEpsKS5nZXRIZWFk''@;'; put 'put ''ZXJUcmVlTm9kZURhdGEoMCxkKS5jb2x1bW5JbmRleDpkfW9uTW9kaWZ5Q29sV2lkdGgobCxhKXtjb25zdCBkPXRoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aChhKTtyZXR1cm4gbD5kP2w6ZH1vbk1vZGlmeUNvbHVtbkhlYWRlclZhbHVlKGwsYSxkKXt2YXIgaDtjb25zdHtsYWJlbDpmfT1udWxs''@;'; put 'put ''IT09KGg9U2wodGhpcyxKbCkuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGQsYSkpJiZ2b2lkIDAhPT1oP2g6e2xhYmVsOiIifTtyZXR1cm4gZn1vbkluaXQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfW9uQWZ0ZXJMb2FkRGF0YShsLGEpe2F8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZGVzdHJveSgpe0JB''@;'; put 'put ''KHRoaXMsSmwsbnVsbCksbnVsbCE9PVNsKHRoaXMsczQpJiYoU2wodGhpcyxzNCkudW5zdWJzY3JpYmUoKSxCQSh0aGlzLHM0LG51bGwpKSxzdXBlci5kZXN0cm95KCl9X2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpe2lmKCEobC5yb3c+PTB8fGwuY29sPDApKXJldHVybiBTbCh0''@;'; put 'put ''aGlzLEpsKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEobC5yb3csbC5jb2wpfX1jb25zdCBSej1jbGFzcyBzTmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvdD1hLHRoaXMucGx1Z2luPWx9fTtjbGFzcyBRZiBleHRlbmRzIFJ6e3N0YXRpYyBnZXQgQ1NTX0NMQVNTRVMoKXtyZXR1cm57aW5kaWNh''@;'; put 'put ''dG9yQ29udGFpbmVyOiJodF9uZXN0aW5nTGV2ZWxzIixwYXJlbnQ6Imh0X25lc3RpbmdQYXJlbnQiLGluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsIixlbXB0eUluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsX2VtcHR5IixidXR0b246Imh0X25lc3RpbmdCdXR0b24iLGV4cGFuZEJ1dHRvbjoi''@;'; put 'put ''aHRfbmVzdGluZ0V4cGFuZCIsY29sbGFwc2VCdXR0b246Imh0X25lc3RpbmdDb2xsYXBzZSJ9fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJPXRoaXMucGx1Z2luLmNvbGxhcHNpbmdV''@;'; put 'put ''SSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9bnVsbH1hcHBlbmRMZXZlbEluZGljYXRvcnMobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0xldmVsKGQpLGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpLF89''@;'; put 'put ''YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRElWIilbMF0sVD1fLnF1ZXJ5U2VsZWN0b3IoInNwYW4ucm93SGVhZGVyIik7aWYoSW4oXy5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePSJodF9uZXN0aW5nIl0nKSxpZT0+e2llJiZfLnJlbW92ZUNoaWxkKGllKX0pLHBpKGEsUWYuQ1NTX0NMQVNT''@;'; put 'put ''RVMuaW5kaWNhdG9yQ29udGFpbmVyKSxoKXtjb25zdHtyb290RG9jdW1lbnQ6aWV9PXRoaXMuaG90LGdlPVQuY2xvbmVOb2RlKCEwKTtfLmlubmVySFRNTD0iIix2bygwLGgtMSwoKT0+e2NvbnN0IHdlPWllLmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTtwaSh3ZSxRZi5DU1NfQ0xBU1NFUy5lbXB0''@;'; put 'put ''eUluZGljYXRvciksXy5hcHBlbmRDaGlsZCh3ZSl9KSxfLmFwcGVuZENoaWxkKGdlKX1pZih0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGYpKXtjb25zdCBpZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7cGkoYSxRZi5DU1NfQ0xBU1NFUy5wYXJlbnQp''@;'; put 'put ''LHRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpP3BpKGllLGAke1FmLkNTU19DTEFTU0VTLmJ1dHRvbn0gJHtRZi5DU1NfQ0xBU1NFUy5leHBhbmRCdXR0b259YCk6cGkoaWUsYCR7UWYuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke1FmLkNTU19DTEFTU0VTLmNvbGxhcHNl''@;'; put 'put ''QnV0dG9ufWApLF8uYXBwZW5kQ2hpbGQoaWUpfX11cGRhdGVSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1sO2F8fChhPXRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxDb3VudCksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPU1hdGgubWF4KDUwLDExKzEwKmErMjUpLHRoaXMuaG90LnJlbmRl''@;'; put 'put ''cigpfX1jb25zdCBrb2U9UWYsbE5lPWNsYXNzIGFOZSBleHRlbmRzIFJ6e2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ7c3VwZXIobCxhKSxkPXRoaXMsdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNlZFJvd3M9W10sdGhpcy5jb2xsYXBzZWRSb3dz''@;'; put 'put ''U3Rhc2g9e3N0YXNoOmZ1bmN0aW9uKCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtkLmxhc3RDb2xsYXBzZWRSb3dzPWQuY29sbGFwc2VkUm93cy5zbGljZSgwKSxkLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29s''@;'; put 'put ''bGFwc2VkUm93cyxoKX0sc2hpZnRTdGFzaDpmdW5jdGlvbihoLGYpe2xldCBfPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO251bGw9PWYmJihmPTEvMCksSW4oZC5sYXN0Q29sbGFwc2VkUm93cywoVCxXKT0+e1Q+PWgmJlQ8ZiYmKGQu''@;'; put 'put ''bGFzdENvbGxhcHNlZFJvd3NbV109VCtfKX0pfSxhcHBseVN0YXNoOmZ1bmN0aW9uKCl7ZC5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cywhKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSxkLmxhc3RD''@;'; put 'put ''b2xsYXBzZWRSb3dzPXZvaWQgMH0sdHJpbVN0YXNoOihoLGYpPT57dm8oaCxoK2YtMSxfPT57Y29uc3QgVD10aGlzLmxhc3RDb2xsYXBzZWRSb3dzLmluZGV4T2YoXyk7VD4tMSYmdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5zcGxpY2UoVCwxKX0pfX19Y29sbGFwc2VDaGlsZHJlbihsKXtsZXQg''@;'; put 'put ''YT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsXz1udWxsLFQ9bnVsbDtyZXR1cm4g''@;'; put 'put ''aXNOYU4obCk/KGY9bCxfPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZikpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxfPWwpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJkluKGYuX19jaGlsZHJlbixXPT57aC5wdXNoKHRoaXMuZGF0YU1hbmFn''@;'; put 'put ''ZXIuZ2V0Um93SW5kZXgoVykpfSksVD10aGlzLmNvbGxhcHNlUm93cyhoLCEwLCExKSxkJiZ0aGlzLnRyaW1Sb3dzKFQpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksLTE9PT10aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihfKSYmdGhpcy5jb2xsYXBzZWRSb3dzLnB1c2goXyksVH1jb2xs''@;'; put 'put ''YXBzZU11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtJbihs''@;'; put 'put ''LGY9PntoLnB1c2goLi4udGhpcy5jb2xsYXBzZUNoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZVJvdyhsKXt0aGlzLmNvbGxhcHNlUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9Y29sbGFwc2VSb3dzKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJd''@;'; put 'put ''O2NvbnN0IGg9W107cmV0dXJuIEluKGwsZj0+e2gucHVzaChmKSxhJiZ0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGh9Y29sbGFwc2VDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn''@;'; put 'put ''dW1lbnRzWzFdOltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZJbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbixfPT57Y29uc3QgVD10''@;'; put 'put ''aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KF8pO2EucHVzaChUKSx0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKFQsYSl9KSxoJiZ0aGlzLnRyaW1Sb3dzKGEpfWV4cGFuZFJvdyhsKXt0aGlzLmV4cGFuZFJvd3MoW2xdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MV0pfHxhcmd1bWVudHNbMV0pfWV4cGFuZFJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1b''@;'; put 'put ''XTtyZXR1cm4gSW4obCxmPT57aC5wdXNoKGYpLGEmJnRoaXMuZXhwYW5kQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnVudHJpbVJvd3MoaCksaH1leHBhbmRDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltd''@;'; put 'put ''LGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZJbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbixfPT57aWYoIXRoaXMuaXNBbnlQYXJlbnRD''@;'; put 'put ''b2xsYXBzZWQoXykpe2NvbnN0IFQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChfKTthLnB1c2goVCksdGhpcy5leHBhbmRDaGlsZFJvd3MoVCxhKX19KSxoJiZ0aGlzLnVudHJpbVJvd3MoYSl9ZXhwYW5kQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtsZXQgZj1udWxsLF89bnVsbCxUPW51bGw7cmV0dXJuIGlzTmFOKGwpPyhmPWwsXz10aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLmdldFJvd0luZGV4KGwpKTooZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksXz1sKSx0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKF8pLDEpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJkluKGYuX19jaGls''@;'; put 'put ''ZHJlbixXPT57Y29uc3QgaWU9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChXKTtoLnB1c2goaWUpfSksVD10aGlzLmV4cGFuZFJvd3MoaCwhMCwhMSksZCYmdGhpcy51bnRyaW1Sb3dzKFQpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksVH1leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGwp''@;'; put 'put ''e2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107SW4obCxmPT57aC5wdXNoKC4uLnRoaXMuZXhw''@;'; put 'put ''YW5kQ2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy51bnRyaW1Sb3dzKGgpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9Y29sbGFwc2VBbGwoKXtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLGE9W107SW4obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihk''@;'; put 'put ''KSYmYS5wdXNoKGQpfSksdGhpcy5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1leHBhbmRBbGwoKXtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLGE9W107SW4obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihkKSYm''@;'; put 'put ''YS5wdXNoKGQpfSksdGhpcy5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGEpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9dHJpbVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntJbihsLGE9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCEw''@;'; put 'put ''KX0pfSwhMCl9dW50cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0luKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITEpfSl9LCEwKX1hcmVDaGlsZHJlbkNvbGxhcHNlZChsKXtsZXQgYT1pc05hTihsKT9sOnRoaXMu''@;'; put 'put ''ZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxkPSEwO3JldHVybiBudWxsPT09YSYmKGE9e19fY2hpbGRyZW46dGhpcy5kYXRhTWFuYWdlci5kYXRhfSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihhKSYmSW4oYS5fX2NoaWxkcmVuLGg9Pntjb25zdCBmPXRoaXMuZGF0YU1hbmFn''@;'; put 'put ''ZXIuZ2V0Um93SW5kZXgoaCk7aWYoIXRoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGYpKXJldHVybiBkPSExLCExfSksZH1pc0FueVBhcmVudENvbGxhcHNlZChsKXtsZXQgYT1sO2Zvcig7bnVsbCE9PWE7KXthPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFy''@;'; put 'put ''ZW50KGEpO2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChhKTtpZih0aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihkKT4tMSlyZXR1cm4hMH1yZXR1cm4hMX10b2dnbGVTdGF0ZShsLGEpe2lmKGEuY29sPj0wKXJldHVybjtjb25zdCBkPXRoaXMudHJhbnNsYXRlVHJpbW1l''@;'; put 'put ''ZFJvdyhhLnJvdyk7Qm8obC50YXJnZXQsa29lLkNTU19DTEFTU0VTLmJ1dHRvbikmJih0aGlzLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpP3RoaXMuZXhwYW5kQ2hpbGRyZW4oZCk6dGhpcy5jb2xsYXBzZUNoaWxkcmVuKGQpLHYyKGwpKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0''@;'; put 'put ''aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpfXVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxSb3cobCl9cmVuZGVyQW5kQWRqdXN0KCl7dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX19LEFvZT1uZXcgV2Vh''@;'; put 'put ''a01hcCx1TmU9Y2xhc3MgY05lIGV4dGVuZHMgUnp7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLEFvZS5zZXQodGhpcyx7cm93X2Fib3ZlOihkLGgpPT57dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGhbaC5sZW5ndGgtMV0uc3RhcnQucm93LCJhYm92ZSIpfSxyb3dfYmVsb3c6KGQs''@;'; put 'put ''aCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoaFtoLmxlbmd0aC0xXS5zdGFydC5yb3csImJlbG93Iil9fSksdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcn1hcHBlbmRPcHRpb25zKGwpe2NvbnN0IGE9W3trZXk6ImFkZF9jaGlsZCIsbmFtZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobkIpfSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpWzBdKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChkKTt0aGlzLmRh''@;'; put 'put ''dGFNYW5hZ2VyLmFkZENoaWxkKGgpfSxkaXNhYmxlZDooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJuIWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se2tleToiZGV0YWNoX2Zyb21fcGFyZW50IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShyQil9LGNhbGxiYWNrOigpPT57dGhpcy5kYXRhTWFuYWdlci5kZXRhY2hGcm9tUGFyZW50KHRoaXMuaG90LmdldFNlbGVjdGVk''@;'; put 'put ''TGFzdCgpKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGg9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGRbMF0pO3JldHVybiF0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChoKXx8IWR8fGRbMF08MHx8dGhpcy5ob3Qu''@;'; put 'put ''c2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se25hbWU6Ii0tLS0tLS0tLSJ9XTtyZXR1cm4gdm8oMCxsLml0ZW1zLmxlbmd0aC0xLGQ9PntpZigwPT09ZClyZXR1cm4gSW4o''@;'; put 'put ''YSwoaCxmKT0+e2wuaXRlbXMuc3BsaWNlKGQrZiwwLGgpfSksITF9KSx0aGlzLm1vZGlmeVJvd0luc2VydGluZ09wdGlvbnMobCl9bW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKXtjb25zdCBhPUFvZS5nZXQodGhpcyk7cmV0dXJuIHZvKDAsbC5pdGVtcy5sZW5ndGgtMSxkPT57Y29uc3Qg''@;'; put 'put ''aD1hW2wuaXRlbXNbZF0ua2V5XTtudWxsIT1oJiYobC5pdGVtc1tkXS5jYWxsYmFjaz1oKX0pLGx9fTtjbGFzcyBkTmV7Y29uc3RydWN0b3IobCl7dGhpcy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdCx0aGlzLmRhdGFNYW5hZ2VyPWwuZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9bC5j''@;'; put 'put ''b2xsYXBzaW5nVUl9b25CZWZvcmVSb3dNb3ZlKGwsYSxkLGgpe2lmKHRoaXMuZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKHtyb3dzOmwsZmluYWxJbmRleDphLGRyb3BJbmRleDpkLG1vdmVQb3NzaWJsZTpofSkpcmV0dXJuITE7dGhpcy5tb3ZlZFRvQ29sbGFwc2VkPSExO2NvbnN0''@;'; put 'put ''IF89ZD09PXRoaXMuaG90LmNvdW50Um93cygpLFQ9Xz90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTp0aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZCk7bGV0IFc9ITA7Y29uc3QgaWU9bC5tYXAob3Q9PntpZighVylyZXR1cm4hMTtjb25zdCBldD10aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3cob3QpO3JldHVybiBXPXRoaXMuc2hvdWxkQWxsb3dNb3ZpbmcoZXQsVCksZXR9KSxnZT0tMT09PWllLmluZGV4T2YoVCk7aWYoIVd8fCFnZSlyZXR1cm4hMTtjb25zdCB3ZT10aGlzLmdldEJhc2VQYXJlbnQoaWUpLEVlPXRoaXMuZ2V0VGFyZ2V0UGFy''@;'; put 'put ''ZW50KF8sVCksWmU9d2U9PT1FZTtyZXR1cm4gdGhpcy5tb3ZlZFRvQ29sbGFwc2VkPXRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKEVlKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLnNoaWZ0Q29sbGFwc2libGVQYXJlbnRz''@;'; put 'put ''TG9jYXRpb25zKGllLFQsWmUpLHRoaXMubW92ZVJvd3MoaWUsVCxFZSksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKSx0aGlzLm1vdmVDZWxsc01ldGEoaWUsVCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goITEpLHRoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJhZnRlclJvd01vdmUiLGwsYSxkLGgsaCYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLnNlbGVjdENlbGxzKGwsZCksITF9ZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKGwpe2NvbnN0e3Jvd3M6YSxmaW5hbEluZGV4OmQsZHJv''@;'; put 'put ''cEluZGV4OmgsbW92ZVBvc3NpYmxlOmZ9PWw7bGV0IF89ITE7cmV0dXJuIExhKGgpJiYoR2EoQWFgU2luY2UgdmVyc2lvbiA4LjAuMCBvZiB0aGUgSGFuZHNvbnRhYmxlIHRoZSAnbW92ZVJvd3MnIG1ldGhvZCBpc24ndCB1c2VkIGZvciBtb3Zpbmcgcm93c1x4MjAKICAgICAgd2hlbiB0aGUg''@;'; put 'put ''TmVzdGVkUm93cyBwbHVnaW4gaXMgZW5hYmxlZC4gUGxlYXNlIHVzZSB0aGUgJ2RyYWdSb3dzJyBtZXRob2QgaW5zdGVhZC5gKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixhLGQsaCxmLCExKSxfPSEwKSxffXNob3VsZEFsbG93TW92aW5nKGwsYSl7cmV0dXJuISh0aGlzLmRh''@;'; put 'put ''dGFNYW5hZ2VyLmlzUGFyZW50KGwpfHx0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKGwpfHxsPT09YXx8MD09PWEpfWdldEJhc2VQYXJlbnQobCl7cmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGxbMF0pfWdldFRhcmdldFBhcmVudChsLGEpe2xldCBkPXRo''@;'; put 'put ''aXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGw/YS0xOmEpO3JldHVybiBudWxsPT1kJiYoZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChhLTEpKSxkfXNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKGwsYSxkKXtkfHwoTWF0aC5tYXgoLi4ubCk8PWE/dGhpcy5jb2xs''@;'; put 'put ''YXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2gobFswXSxhLC0xKmwubGVuZ3RoKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhLGxbMF0sbC5sZW5ndGgpKX1tb3ZlUm93cyhsLGEsZCl7Y29uc3QgaD1hPT09dGhpcy5kYXRhTWFu''@;'; put 'put ''YWdlci5nZXRSb3dJbmRleChkKSt0aGlzLmRhdGFNYW5hZ2VyLmNvdW50Q2hpbGRyZW4oZCkrMTt0aGlzLmhvdC5iYXRjaFJlbmRlcigoKT0+e2wuZm9yRWFjaChmPT57dGhpcy5kYXRhTWFuYWdlci5tb3ZlUm93KGYsYSx0aGlzLm1vdmVkVG9Db2xsYXBzZWQsaCl9KX0pfW1vdmVDZWxsc01l''@;'; put 'put ''dGEobCxhKXtjb25zdCBkPVtdLGg9TWF0aC5tYXgoLi4ubCk8YTtsLmZvckVhY2goZj0+e2QucHVzaCh0aGlzLmhvdC5nZXRDZWxsTWV0YUF0Um93KGYpKX0pLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShsWzBdLGwubGVuZ3RoKSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEoYS0oaD9kLmxl''@;'; put 'put ''bmd0aDowKSwwLC4uLmQpfXNlbGVjdENlbGxzKGwsYSl7Y29uc3QgZD1sLmxlbmd0aDtsZXQgaD0wLGY9MCxfPW51bGwsVD1udWxsO2lmKHRoaXMubW92ZWRUb0NvbGxhcHNlZCl7bGV0IFc9bnVsbDtXPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhsW2QtMV08YT9hLWQ6''@;'; put 'put ''YSk7Y29uc3QgaWU9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobnVsbD09PVc/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMTpXLTEpLGdlPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoaWUpO2g9dGhpcy5kYXRhTWFuYWdlci51bnRyYW5zbGF0ZVRyaW1tZWRSb3coZ2Up''@;'; put 'put ''LGY9aH1lbHNlIGxbZC0xXTxhPyhmPWEtMSxoPWYtZCsxKTooaD1hLGY9aCtkLTEpO189dGhpcy5ob3Quc2VsZWN0aW9uLFQ9dGhpcy5ob3QuY291bnRDb2xzKCktMSxfLnNldFJhbmdlU3RhcnQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaCwwKSksXy5zZXRSYW5nZUVuZCh0aGlzLmhv''@;'; put 'put ''dC5fY3JlYXRlQ2VsbENvb3JkcyhmLFQpLCEwKX1pc1Jvd09yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfX1jb25zdCBPej0ibmVzdGVkUm93cyIsZTM9bmV3IFdlYWtNYXA7Y2xhc3MgcE5lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7''@;'; put 'put ''cmV0dXJuIE96fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmRhdGFNYW5hZ2VyPW51bGwsdGhpcy5oZWFkZXJzVUk9bnVsbCx0aGlzLmNvbGxhcHNlZFJvd3NNYXA9bnVsbCxlMy5zZXQodGhpcyx7bW92ZWRUb0Nv''@;'; put 'put ''bGxhcHNlZDohMSxza2lwUmVuZGVyOm51bGwsc2tpcENvcmVBUElNb2RpZmllcnM6ITF9KX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbT3pdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2xsYXBzZWRSb3dzTWFwPXRo''@;'; put 'put ''aXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIixuZXcgZ3kpLHRoaXMuZGF0YU1hbmFnZXI9bmV3IGNsYXNzIGlOZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG90PWEsdGhpcy5kYXRhPW51bGwsdGhpcy5wbHVnaW49bCx0aGlzLnBhcmVudFJlZmVyZW5jZT1u''@;'; put 'put ''ZXcgV2Vha01hcCx0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9fXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGF9Z2V0UmF3U291cmNlRGF0YSgpe2xldCBsPW51bGw7cmV0dXJuIHRo''@;'; put 'put ''aXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksbD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhKCksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLGx9dXBkYXRlV2l0aERhdGEobCl7dGhpcy5zZXREYXRhKGwpLHRoaXMucmV3cml0ZUNhY2hlKCl9cmV3cml0ZUNh''@;'; put 'put ''Y2hlKCl7dGhpcy5jYWNoZT17bGV2ZWxzOltdLGxldmVsQ291bnQ6MCxyb3dzOltdLG5vZGVJbmZvOm5ldyBXZWFrTWFwfSx2bygwLHRoaXMuZGF0YS5sZW5ndGgtMSxsPT57dGhpcy5jYWNoZU5vZGUodGhpcy5kYXRhW2xdLDAsbnVsbCl9KX1jYWNoZU5vZGUobCxhLGQpe3RoaXMuY2FjaGUu''@;'; put 'put ''bGV2ZWxzW2FdfHwodGhpcy5jYWNoZS5sZXZlbHNbYV09W10sdGhpcy5jYWNoZS5sZXZlbENvdW50Kz0xKSx0aGlzLmNhY2hlLmxldmVsc1thXS5wdXNoKGwpLHRoaXMuY2FjaGUucm93cy5wdXNoKGwpLHRoaXMuY2FjaGUubm9kZUluZm8uc2V0KGwse3BhcmVudDpkLHJvdzp0aGlzLmNhY2hl''@;'; put 'put ''LnJvd3MubGVuZ3RoLTEsbGV2ZWw6YX0pLHRoaXMuaGFzQ2hpbGRyZW4obCkmJkluKGwuX19jaGlsZHJlbixoPT57dGhpcy5jYWNoZU5vZGUoaCxhKzEsbCl9KX1nZXREYXRhT2JqZWN0KGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5yb3dzW2xdfXJlYWRUcmVlTm9kZXMobCxh''@;'; put 'put ''LGQsaCl7bGV0IGY9ITEsXz1hO2lmKGlzTmFOKF8pJiZfLmVuZClyZXR1cm4gXztsZXQgVD1sO3JldHVybiBUfHwoVD17X19jaGlsZHJlbjp0aGlzLmRhdGF9LGY9ITAsXy09MSksbnVsbCE9ZCYmXz09PWQ/e3Jlc3VsdDpULGVuZDohMH06bnVsbCE9aCYmVD09PWg/e3Jlc3VsdDpfLGVuZDoh''@;'; put 'put ''MH06KF8rPTEsVC5fX2NoaWxkcmVuJiZJbihULl9fY2hpbGRyZW4sVz0+e2lmKHRoaXMucGFyZW50UmVmZXJlbmNlLnNldChXLGY/bnVsbDpUKSxfPXRoaXMucmVhZFRyZWVOb2RlcyhXLF8sZCxoKSxpc05hTihfKSYmXy5lbmQpcmV0dXJuITF9KSxfKX1tb2NrUGFyZW50KCl7Y29uc3QgbD10''@;'; put 'put ''aGlzLm1vY2tOb2RlKCk7cmV0dXJuIGwuX19jaGlsZHJlbj10aGlzLmRhdGEsbH1tb2NrTm9kZSgpe2NvbnN0IGw9e307cmV0dXJuIGRzKHRoaXMuZGF0YVswXSwoYSxkKT0+e2xbZF09bnVsbH0pLGx9Z2V0Um93SW5kZXgobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLm5vZGVJ''@;'; put 'put ''bmZvLmdldChsKS5yb3d9Z2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCl7bGV0IGE9bnVsbDthPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpO2NvbnN0IGQ9dGhpcy5nZXRSb3dQYXJlbnQobCk7cmV0dXJuIG51bGw9PWQ/dGhpcy5kYXRhLmluZGV4T2YoYSk6ZC5fX2NoaWxkcmVu''@;'; put 'put ''LmluZGV4T2YoYSl9Y291bnRBbGxSb3dzKCl7cmV0dXJuIHRoaXMuY291bnRDaGlsZHJlbih7X19jaGlsZHJlbjp0aGlzLmRhdGF9KX1jb3VudENoaWxkcmVuKGwpe2xldCBhPTAsZD1sO3JldHVybiBpc05hTihkKXx8KGQ9dGhpcy5nZXREYXRhT2JqZWN0KGQpKSxkJiZkLl9fY2hpbGRyZW4/''@;'; put 'put ''KEluKGQuX19jaGlsZHJlbixoPT57YSs9MSxoLl9fY2hpbGRyZW4mJihhKz10aGlzLmNvdW50Q2hpbGRyZW4oaCkpfSksYSk6MH1nZXRSb3dQYXJlbnQobCl7bGV0IGE7cmV0dXJuIGE9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCksdGhpcy5nZXRSb3dPYmplY3RQYXJlbnQoYSl9''@;'; put 'put ''Z2V0Um93T2JqZWN0UGFyZW50KGwpe3JldHVybiBsJiYib2JqZWN0Ij09dHlwZW9mIGw/dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkucGFyZW50Om51bGx9Z2V0Um93TGV2ZWwobCl7bGV0IGE9bnVsbDtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSxhP3RoaXMu''@;'; put 'put ''Z2V0Um93T2JqZWN0TGV2ZWwoYSk6bnVsbH1nZXRSb3dPYmplY3RMZXZlbChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLmxldmVsfWhhc0NoaWxkcmVuKGwpe2xldCBhPWw7cmV0dXJuIGlzTmFOKGEpfHwoYT10aGlzLmdldERhdGFPYmplY3QoYSkp''@;'; put 'put ''LCEoIWEuX19jaGlsZHJlbnx8IWEuX19jaGlsZHJlbi5sZW5ndGgpfWlzQ2hpbGQobCl7cmV0dXJuIG51bGwhPT10aGlzLmdldFJvd1BhcmVudChsKX1nZXRDaGlsZChsLGEpe3ZhciBkO3JldHVybihudWxsPT09KGQ9bC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09ZD92b2lkIDA6ZFthXSl8fG51''@;'; put 'put ''bGx9aXNSb3dIaWdoZXN0TGV2ZWwobCl7cmV0dXJuIXRoaXMuaXNDaGlsZChsKX1pc1BhcmVudChsKXt2YXIgYTtsZXQgZD1sO3JldHVybiBpc05hTihkKXx8KGQ9dGhpcy5nZXREYXRhT2JqZWN0KGQpKSxkJiYhIWQuX19jaGlsZHJlbiYmMCE9PShudWxsPT09KGE9ZC5fX2NoaWxkcmVuKXx8''@;'; put 'put ''dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpfWFkZENoaWxkKGwsYSl7bGV0IGQ9YTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsZCk7bGV0IGg9bnVsbDtsJiYoaD10aGlzLmdldFJvd0luZGV4KGwpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93Iixo''@;'; put 'put ''K3RoaXMuY291bnRDaGlsZHJlbihsKSsxLDEpO2xldCBmPWw7bHx8KGY9dGhpcy5tb2NrUGFyZW50KCkpLGYuX19jaGlsZHJlbnx8KGYuX19jaGlsZHJlbj1bXSksZHx8KGQ9dGhpcy5tb2NrTm9kZSgpKSxmLl9fY2hpbGRyZW4ucHVzaChkKSx0aGlzLnJld3JpdGVDYWNoZSgpO2NvbnN0IF89''@;'; put 'put ''dGhpcy5nZXRSb3dJbmRleChkKTt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKF8sMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixfLDEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixsLGQpfWFkZENoaWxkQXRJbmRleChsLGEsZCl7''@;'; put 'put ''bGV0IGYsaD1kO2lmKGh8fChoPXRoaXMubW9ja05vZGUoKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUFkZENoaWxkIixsLGgsYSksbCl7Y29uc3QgVD10aGlzLmdldFJvd0luZGV4KGwpK2ErMTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixULDEpLGwuX19jaGlsZHJl''@;'; put 'put ''bi5zcGxpY2UoYSxudWxsLGgpLHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksIl9fY2hpbGRyZW4iLGwuX19jaGlsZHJlbiwi''@;'; put 'put ''TmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKFQsMSksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsVCwxKSxmPVR9ZWxzZSB0aGlzLnBs''@;'; put 'put ''dWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixhLDEsIk5lc3RlZFJvd3MuYWRkQ2hpbGRBdEluZGV4IiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLGY9dGhpcy5nZXRSb3dJbmRleCh0aGlzLmRhdGFb''@;'; put 'put ''YV0pO2g9dGhpcy5nZXREYXRhT2JqZWN0KGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixsLGgsYSl9YWRkU2libGluZyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImJlbG93Ijtjb25zdCBkPXRoaXMu''@;'; put 'put ''dHJhbnNsYXRlVHJpbW1lZFJvdyhsKSxoPXRoaXMuZ2V0Um93UGFyZW50KGQpLGY9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChkKTtzd2l0Y2goYSl7Y2FzZSJiZWxvdyI6dGhpcy5hZGRDaGlsZEF0SW5kZXgoaCxmKzEsbnVsbCk7YnJlYWs7Y2FzZSJhYm92ZSI6dGhpcy5hZGRDaGls''@;'; put 'put ''ZEF0SW5kZXgoaCxmLG51bGwpfX1kZXRhY2hGcm9tUGFyZW50KGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1udWxsO2NvbnN0IGg9W107QXJyYXkuaXNBcnJheShsKT8odm8obFswXSxsWzJdLEVlPT57Y29uc3Qg''@;'; put 'put ''WmU9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KEVlKTtoLnB1c2godGhpcy5nZXREYXRhT2JqZWN0KFplKSl9KSx2bygwLGgubGVuZ3RoLTIsRWU9Pnt0aGlzLmRldGFjaEZyb21QYXJlbnQoaFtFZV0sITEpfSksZD1oW2gubGVuZ3RoLTFdKTpkPWw7Y29uc3QgZj10aGlzLmdldFJvd0luZGV4''@;'; put 'put ''KGQpLF89dGhpcy5jb3VudENoaWxkcmVuKGQpLFQ9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChkKSxXPXRoaXMuZ2V0Um93UGFyZW50KGQpLGllPXRoaXMuZ2V0Um93UGFyZW50KFcpLGdlPXRoaXMuZ2V0Um93SW5kZXgoaWUpO2xldCB3ZT1udWxsO2lmKHRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJiZWZvcmVEZXRhY2hDaGlsZCIsVyxkKSxudWxsIT1UKXtjb25zdCBFZT1BcnJheS5mcm9tKG5ldyBBcnJheShmK18rMSkua2V5cygpKS5zcGxpY2UoLTEqKF8rMSkpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGYsXysxLEVlLHRoaXMucGx1Z2luLnBsdWdpbk5h''@;'; put 'put ''bWUpLFcuX19jaGlsZHJlbi5zcGxpY2UoVCwxKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsZixfKzEsRWUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksaWUpe3dlPWdlK3RoaXMuY291bnRDaGlsZHJlbihpZSk7Y29uc3QgWmU9dGhpcy5n''@;'; put 'put ''ZXRDaGlsZChpZSx0aGlzLmNvdW50Q2hpbGRyZW4oaWUpLTEpLG90PXRoaXMuZ2V0Um93SW5kZXgoWmUpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLG90KzEsXysxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLGllLl9fY2hpbGRyZW4ucHVzaChkKX1lbHNlIHdlPXRoaXMu''@;'; put 'put ''aG90LmNvdW50Um93cygpKzEsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsd2UtMixfKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksdGhpcy5kYXRhLnB1c2goZCl9dGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLHdlLTIs''@;'; put 'put ''XysxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRldGFjaENoaWxkIixXLGQsdGhpcy5nZXRSb3dJbmRleChkKSksYSYmdGhpcy5ob3QucmVuZGVyKCl9ZmlsdGVyRGF0YShsLGEsZCl7Y29uc3QgaD1bXTtJbihkLGY9PntoLnB1c2godGhpcy5nZXRE''@;'; put 'put ''YXRhT2JqZWN0KGYpKX0pLEluKGgsZj0+e2NvbnN0IF89dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChmKSxUPXRoaXMuZ2V0Um93UGFyZW50KGYpO251bGw9PT1UP3RoaXMuZGF0YS5zcGxpY2UoXywxKTpULl9fY2hpbGRyZW4uc3BsaWNlKF8sMSl9KSx0aGlzLnJld3JpdGVDYWNoZSgp''@;'; put 'put ''fXNwbGljZURhdGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXREYXRhT2JqZWN0KGwtMSk7bGV0IGY9bnVsbCxfPWw7aCYmaC5fX2NoaWxkcmVuJiYwPT09aC5fX2NoaWxkcmVuLmxlbmd0aD8oZj1oLF89MCk6bDx0aGlzLmNvdW50QWxsUm93cygpJiYoZj10aGlzLmdldFJvd1BhcmVudChsKSxf''@;'; put 'put ''PXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCkpLGY/ZD9mLl9fY2hpbGRyZW4uc3BsaWNlKF8sYSwuLi5kKTpmLl9fY2hpbGRyZW4uc3BsaWNlKF8sYSk6ZD90aGlzLmRhdGEuc3BsaWNlKF8sYSwuLi5kKTp0aGlzLmRhdGEuc3BsaWNlKF8sYSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1z''@;'; put 'put ''eW5jUm93V2l0aFJhd1NvdXJjZShsKXtsZXQgYT1sLGQ9bnVsbDtkb3tkPXRoaXMuZ2V0Um93UGFyZW50KGQpLG51bGwhPT1kJiYoYT1kKX13aGlsZShudWxsIT09ZCk7dGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRo''@;'; put 'put ''aXMuZ2V0Um93SW5kZXgoYSksIl9fY2hpbGRyZW4iLGEuX19jaGlsZHJlbiwiTmVzdGVkUm93cy5zeW5jUm93V2l0aFJhd1NvdXJjZSIpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKX1tb3ZlUm93KGwsYSxkLGgpe2NvbnN0IGY9YT09PXRoaXMuaG90LmNvdW50Um93cygp''@;'; put 'put ''LF89dGhpcy5nZXRSb3dQYXJlbnQobCksVD10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpLFc9Xy5fX2NoaWxkcmVuLnNsaWNlKFQsVCsxKSxpZT1sPmE7bGV0IGdlPXRoaXMuZ2V0Um93UGFyZW50KGY/YS0xOmEpO251bGw9PWdlJiYoZ2U9dGhpcy5nZXRSb3dQYXJlbnQoYS0xKSks''@;'; put 'put ''bnVsbD09Z2UmJihnZT10aGlzLmdldERhdGFPYmplY3QoYS0xKSksZ2U/Z2UuX19jaGlsZHJlbnx8KGdlLl9fY2hpbGRyZW49W10pOihnZT10aGlzLmdldERhdGFPYmplY3QoYSksZ2UuX19jaGlsZHJlbj1bXSk7Y29uc3Qgd2U9Znx8ZHx8aD9nZS5fX2NoaWxkcmVuLmxlbmd0aDp0aGlzLmdl''@;'; put 'put ''dFJvd0luZGV4V2l0aGluUGFyZW50KGEpLEVlPV89PT1nZTtnZS5fX2NoaWxkcmVuLnNwbGljZSh3ZSwwLFdbMF0pLF8uX19jaGlsZHJlbi5zcGxpY2UoVCsoaWUmJkVlPzE6MCksMSksdGhpcy5zeW5jUm93V2l0aFJhd1NvdXJjZShfKSxFZXx8dGhpcy5zeW5jUm93V2l0aFJhd1NvdXJjZShn''@;'; put 'put ''ZSl9dHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJP3RoaXMucGx1Z2luLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9dW50cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/''@;'; put 'put ''dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKTpsfX0odGhpcyx0aGlzLmhvdCksdGhpcy5jb2xsYXBzaW5nVUk9bmV3IGxOZSh0aGlzLHRoaXMuaG90KSx0aGlzLmhlYWRlcnNVST1uZXcga29lKHRoaXMsdGhpcy5ob3QpLHRoaXMuY29udGV4dE1lbnVV''@;'; put 'put ''ST1uZXcgdU5lKHRoaXMsdGhpcy5ob3QpLHRoaXMucm93TW92ZUNvbnRyb2xsZXI9bmV3IGROZSh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVySW5pdCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVy''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlVmlld1JlbmRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dEYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Um93RGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VM''@;'; put 'put ''ZW5ndGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlTb3VyY2VMZW5ndGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGF0YVNwbGljZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZURhdGFTcGxpY2UoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''ZmlsdGVyRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkZpbHRlckRhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKC4uLmFy''@;'; put 'put ''Z3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93SGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJHZXRSb3dIZWFkZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3Jl''@;'; put 'put ''T25DZWxsTW91c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVJlbW92ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''bC5vbkFmdGVyUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUFkZENoaWxkIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlQWRkQ2hpbGQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJBZGRDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''bC5vbkFmdGVyQWRkQ2hpbGQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVEZXRhY2hDaGlsZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBsLm9uQWZ0ZXJEZXRhY2hDaGlsZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVJvd0hlYWRlcldpZHRoKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRl''@;'; put 'put ''Um93IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDcmVhdGVSb3coLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVJvd01vdmUoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERh''@;'; put 'put ''dGEiLGE9PnRoaXMub25CZWZvcmVMb2FkRGF0YShhKSksdGhpcy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixhPT50aGlzLm9uQmVmb3JlTG9hZERhdGEoYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rl''@;'; put 'put ''ck1hcCgibmVzdGVkUm93cyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKTtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpO3RoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5kYXRhTWFuYWdlci51cGRhdGVXaXRoRGF0YShs''@;'; put 'put ''KSxzdXBlci51cGRhdGVQbHVnaW4oKX1vbkJlZm9yZVJvd01vdmUobCxhLGQsaCl7cmV0dXJuIHRoaXMucm93TW92ZUNvbnRyb2xsZXIub25CZWZvcmVSb3dNb3ZlKGwsYSxkLGgpfWRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCl7ZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzPSEw''@;'; put 'put ''fWVuYWJsZUNvcmVBUElNb2RpZmllcnMoKXtlMy5nZXQodGhpcykuc2tpcENvcmVBUElNb2RpZmllcnM9ITF9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQpe3RoaXMuY29sbGFwc2luZ1VJLnRvZ2dsZVN0YXRlKGwsYSxkKX1vbk1vZGlmeVJvd0RhdGEobCl7aWYoIWUzLmdldCh0aGlz''@;'; put 'put ''KS5za2lwQ29yZUFQSU1vZGlmaWVycylyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpfW9uTW9kaWZ5U291cmNlTGVuZ3RoKCl7aWYoIWUzLmdldCh0aGlzKS5za2lwQ29yZUFQSU1vZGlmaWVycylyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5jb3VudEFsbFJvd3MoKX1v''@;'; put 'put ''bkJlZm9yZURhdGFTcGxpY2UobCxhLGQpe3JldHVybiEoIWUzLmdldCh0aGlzKS5za2lwQ29yZUFQSU1vZGlmaWVycyYmIXRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwobCkmJih0aGlzLmRhdGFNYW5hZ2VyLnNwbGljZURhdGEobCxhLGQpLDEpKX1vbkZpbHRlckRhdGEobCxh''@;'; put 'put ''LGQpe2NvbnN0IGg9ZTMuZ2V0KHRoaXMpO3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gudHJpbVN0YXNoKGRbMF0sYSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0''@;'; put 'put ''YXNoLnNoaWZ0U3Rhc2goZFswXSxudWxsLC0xKmEpLHRoaXMuZGF0YU1hbmFnZXIuZmlsdGVyRGF0YShsLGEsZCksaC5za2lwUmVuZGVyPSEwLHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLnNsaWNlKCl9b25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMobCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y29udGV4dE1lbnVVSS5hcHBlbmRPcHRpb25zKGwpfW9uQWZ0ZXJHZXRSb3dIZWFkZXIobCxhKXt0aGlzLmhlYWRlcnNVSS5hcHBlbmRMZXZlbEluZGljYXRvcnMobCxhKX1vbk1vZGlmeVJvd0hlYWRlcldpZHRoKGwpe3JldHVybiB0aGlzLmhlYWRlcnNVSS5yb3dIZWFkZXJXaWR0aENhY2hl''@;'; put 'put ''fHxsfW9uQWZ0ZXJSZW1vdmVSb3cobCxhLGQsaCl7aWYoaD09PXRoaXMucGx1Z2luTmFtZSlyZXR1cm47Y29uc3QgZj1lMy5nZXQodGhpcyk7c2V0VGltZW91dCgoKT0+e2Yuc2tpcFJlbmRlcj1udWxsLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCksdGhpcy5jb2xsYXBz''@;'; put 'put ''aW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKX0sMCl9b25CZWZvcmVSZW1vdmVSb3cobCxhLGQpe2NvbnN0IGg9QXJyYXkuZnJvbShkLnJlZHVjZSgoZixfKT0+e2lmKHRoaXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQoXykpe2NvbnN0IFQ9dGhpcy5kYXRhTWFuYWdlci5nZXRE''@;'; put 'put ''YXRhT2JqZWN0KF8pLl9fY2hpbGRyZW47cmV0dXJuIGYuYWRkKF8pLEFycmF5LmlzQXJyYXkoVCkmJlQuZm9yRWFjaChXPT5mLmFkZCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KFcpKSksZn1yZXR1cm4gZi5hZGQoXyl9LG5ldyBTZXQpKTtkLmxlbmd0aD0wLGQucHVzaCguLi5oKX1v''@;'; put 'put ''bkJlZm9yZUFkZENoaWxkKCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCl9b25BZnRlckFkZENoaWxkKGwsYSl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChhKSks''@;'; put 'put ''dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfW9uQmVmb3JlRGV0YWNoQ2hpbGQoKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1vbkFmdGVyRGV0''@;'; put 'put ''YWNoQ2hpbGQobCxhLGQpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGQsbnVsbCwtMSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfW9u''@;'; put 'put ''QWZ0ZXJDcmVhdGVSb3coKXt0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpfW9uQWZ0ZXJJbml0KCl7Y29uc3QgbD1NYXRoLm1heCguLi50aGlzLmRhdGFNYW5hZ2VyLmNhY2hlLmxldmVscyk7bD4wJiZ0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aChsKX1vbkJlZm9y''@;'; put 'put ''ZVZpZXdSZW5kZXIobCxhKXtlMy5nZXQodGhpcykuc2tpcFJlbmRlciYmKGEuc2tpcFJlbmRlcj0hMCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX1vbkJlZm9yZUxvYWREYXRhKGwpe2lmKCFnbmUobCkpcmV0dXJuIFNOKCJUaGUgTmVzdGVkIFJvd3MgcGx1Z2luIHJlcXVpcmVzIGFuIEFy''@;'; put 'put ''cmF5IG9mIE9iamVjdHMgYXMgYSBkYXRhc2V0IHRvIGJlIHByb3ZpZGVkLiBUaGUgcGx1Z2luIGhhcyBiZWVuIGRpc2FibGVkLiIpLHRoaXMuaG90LmdldFNldHRpbmdzKClbT3pdPSExLHZvaWQgdGhpcy5kaXNhYmxlUGx1Z2luKCk7dGhpcy5kYXRhTWFuYWdlci5zZXREYXRhKGwpLHRoaXMu''@;'; put 'put ''ZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCl9fXNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZUxvYWQiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVu''@;'; put 'put ''dFN0YXRlUmVzZXQiKTtjb25zdCBUb2U9InBlcnNpc3RlbnRTdGF0ZSI7Y2xhc3MgX05lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFRvZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMu''@;'; put 'put ''c3RvcmFnZT12b2lkIDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1RvZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5zdG9yYWdlfHwodGhpcy5zdG9yYWdlPW5ldyBjbGFzcyBnTmV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdzt0aGlzLnJvb3RXaW5kb3c9YSx0aGlzLnByZWZpeD1sLHRoaXMuc2F2ZWRLZXlzPVtdLHRoaXMubG9hZFNhdmVkS2V5cygpfXNhdmVWYWx1ZShsLGEpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3Jh''@;'; put 'put ''Z2Uuc2V0SXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWAsSlNPTi5zdHJpbmdpZnkoYSkpLC0xPT09dGhpcy5zYXZlZEtleXMuaW5kZXhPZihsKSYmKHRoaXMuc2F2ZWRLZXlzLnB1c2gobCksdGhpcy5zYXZlU2F2ZWRLZXlzKCkpfWxvYWRWYWx1ZShsLGEpe2NvbnN0IGg9dGhpcy5yb290V2lu''@;'; put 'put ''ZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV8ke3R5cGVvZiBsPiJ1Ij9hOmx9YCk7cmV0dXJuIG51bGw9PT1oP3ZvaWQgMDpKU09OLnBhcnNlKGgpfXJlc2V0KGwpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1f''@;'; put 'put ''JHtsfWApfXJlc2V0QWxsKCl7SW4odGhpcy5zYXZlZEtleXMsKGwsYSk9Pnt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dGhpcy5zYXZlZEtleXNbYV19YCl9KSx0aGlzLmNsZWFyU2F2ZWRLZXlzKCl9bG9hZFNhdmVkS2V5cygpe2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2ApLGE9InN0cmluZyI9PXR5cGVvZiBsP0pTT04ucGFyc2UobCk6dm9pZCAwO3RoaXMuc2F2ZWRLZXlzPWF8fFtdfXNhdmVTYXZlZEtleXMoKXt0aGlz''@;'; put 'put ''LnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCxKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVkS2V5cykpfWNsZWFyU2F2ZWRLZXlzKCl7dGhpcy5zYXZlZEtleXMubGVuZ3RoPTAsdGhpcy5zYXZlU2F2ZWRLZXlzKCl9''@;'; put 'put ''fSh0aGlzLmhvdC5yb290RWxlbWVudC5pZCx0aGlzLmhvdC5yb290V2luZG93KSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwobCxhKT0+dGhpcy5zYXZlVmFsdWUobCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwobCxhKT0+dGhpcy5sb2FkVmFs''@;'; put 'put ''dWUobCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsKCk9PnRoaXMucmVzZXRWYWx1ZSgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuc3RvcmFnZT12b2lkIDAsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3Ro''@;'; put 'put ''aXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9bG9hZFZhbHVlKGwsYSl7YS52YWx1ZT10aGlzLnN0b3JhZ2UubG9hZFZhbHVlKGwpfXNhdmVWYWx1ZShsLGEpe3RoaXMuc3RvcmFnZS5zYXZlVmFsdWUobCxhKX1yZXNldFZhbHVlKGwp''@;'; put 'put ''e3R5cGVvZiBsPiJ1Ij90aGlzLnN0b3JhZ2UucmVzZXRBbGwoKTp0aGlzLnN0b3JhZ2UucmVzZXQobCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3QgUHo9InNlYXJjaCIsd05lPWZ1bmN0aW9uKGMsbCxhLGQsaCl7Yy5nZXRDZWxsTWV0YShsLGEpLmlzU2VhcmNoUmVzdWx0PWh9''@;'; put 'put ''LENOZT1mdW5jdGlvbihjLGwsYSl7cmV0dXJuIShMYShjKXx8bnVsbD09PWN8fCFjLnRvTG9jYWxlTG93ZXJDYXNlfHwwPT09Yy5sZW5ndGh8fExhKGwpfHxudWxsPT09bCkmJi0xIT09bC50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKGEubG9jYWxlKS5pbmRleE9mKGMudG9Mb2NhbGVM''@;'; put 'put ''b3dlckNhc2UoYS5sb2NhbGUpKX07Y2xhc3MgU05lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFB6fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE5MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmNhbGxiYWNrPXdOZSx0aGlzLnF1''@;'; put 'put ''ZXJ5TWV0aG9kPUNOZSx0aGlzLnNlYXJjaFJlc3VsdENsYXNzPSJodFNlYXJjaFJlc3VsdCJ9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbUHpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90''@;'; put 'put ''LmdldFNldHRpbmdzKClbUHpdO3RoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MoYSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVJlbmRlcmVyKC4uLmFyZ3VtZW50cyl9KSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2lu''@;'; put 'put ''KCl7dmFyIGw9dGhpcztjb25zdCBhPWZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVSZW5kZXJlciguLi5hcmd1bWVudHMpfTt0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsYSksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5y''@;'; put 'put ''ZW1vdmVIb29rKCJiZWZvcmVSZW5kZXJlciIsYSl9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1xdWVyeShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5nZXRDYWxsYmFjaygpLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuZ2V0UXVlcnlNZXRob2QoKTtjb25zdCBoPXRoaXMuaG90LmNvdW50Um93cygpLGY9''@;'; put 'put ''dGhpcy5ob3QuY291bnRDb2xzKCksXz1bXSxUPXRoaXMuaG90O3JldHVybiB2bygwLGgtMSxXPT57dm8oMCxmLTEsaWU9Pntjb25zdCBnZT10aGlzLmhvdC5nZXREYXRhQXRDZWxsKFcsaWUpLHdlPXRoaXMuaG90LmdldENlbGxNZXRhKFcsaWUpLEVlPXdlLnNlYXJjaC5jYWxsYmFja3x8YSxv''@;'; put 'put ''dD0od2Uuc2VhcmNoLnF1ZXJ5TWV0aG9kfHxkKShsLGdlLHdlKTtvdCYmXy5wdXNoKHtyb3c6Vyxjb2w6aWUsZGF0YTpnZX0pLEVlJiZFZShULFcsaWUsZ2Usb3QpfSl9KSxffWdldENhbGxiYWNrKCl7cmV0dXJuIHRoaXMuY2FsbGJhY2t9c2V0Q2FsbGJhY2sobCl7dGhpcy5jYWxsYmFjaz1s''@;'; put 'put ''fWdldFF1ZXJ5TWV0aG9kKCl7cmV0dXJuIHRoaXMucXVlcnlNZXRob2R9c2V0UXVlcnlNZXRob2QobCl7dGhpcy5xdWVyeU1ldGhvZD1sfWdldFNlYXJjaFJlc3VsdENsYXNzKCl7cmV0dXJuIHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9c2V0U2VhcmNoUmVzdWx0Q2xhc3MobCl7dGhpcy5zZWFy''@;'; put 'put ''Y2hSZXN1bHRDbGFzcz1sfXVwZGF0ZVBsdWdpblNldHRpbmdzKGwpe3VzKGwpJiYobC5zZWFyY2hSZXN1bHRDbGFzcyYmdGhpcy5zZXRTZWFyY2hSZXN1bHRDbGFzcyhsLnNlYXJjaFJlc3VsdENsYXNzKSxsLnF1ZXJ5TWV0aG9kJiZ0aGlzLnNldFF1ZXJ5TWV0aG9kKGwucXVlcnlNZXRob2Qp''@;'; put 'put ''LGwuY2FsbGJhY2smJnRoaXMuc2V0Q2FsbGJhY2sobC5jYWxsYmFjaykpfW9uQmVmb3JlUmVuZGVyZXIobCxhLGQsaCxmLF8pe2NvbnN0IFQ9Xy5jbGFzc05hbWV8fFtdO2xldCBXPVtdOyJzdHJpbmciPT10eXBlb2YgVD9XPVQuc3BsaXQoIiAiKTpXLnB1c2goLi4uVCksdGhpcy5pc0VuYWJs''@;'; put 'put ''ZWQoKSYmXy5pc1NlYXJjaFJlc3VsdD9XLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpfHxXLnB1c2goYCR7dGhpcy5zZWFyY2hSZXN1bHRDbGFzc31gKTpXLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpJiZXLnNwbGljZShXLmluZGV4T2YodGhpcy5zZWFyY2hSZXN1''@;'; put 'put ''bHRDbGFzcyksMSksXy5jbGFzc05hbWU9Vy5qb2luKCIgIil9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y2xhc3MgRU5lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInRvdWNoU2Nyb2xsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAy''@;'; put 'put ''MDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLnNjcm9sbGJhcnM9W10sdGhpcy5jbG9uZXM9W10sdGhpcy5sb2NrZWRDb2xsZWN0aW9uPSExLHRoaXMuZnJlZXplT3ZlcmxheXM9ITF9aXNFbmFibGVkKCl7cmV0dXJuIEhO''@;'; put 'put ''KCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlclZpZXdSZW5kZXIiLCgpPT50aGlzLm9uQWZ0ZXJWaWV3UmVuZGVyKCkpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5sb2NrZWRD''@;'; put 'put ''b2xsZWN0aW9uPSExLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmFkZEhvb2soImJlZm9yZVRvdWNoU2Nyb2xsIiwoKT0+dGhpcy5vbkJlZm9yZVRvdWNoU2Nyb2xsKCkpLHRoaXMuYWRkSG9v''@;'; put 'put ''aygiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsKCk9PnRoaXMub25BZnRlck1vbWVudHVtU2Nyb2xsKCkpfW9uQWZ0ZXJWaWV3UmVuZGVyKCl7aWYodGhpcy5sb2NrZWRDb2xsZWN0aW9uKXJldHVybjtjb25zdHt0b3BPdmVybGF5OmwsYm90dG9tT3ZlcmxheTphLGlubGluZVN0YXJ0T3ZlcmxheTpk''@;'; put 'put ''LHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpoLGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpmfT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3RoaXMubG9ja2VkQ29sbGVjdGlvbj0hMCx0aGlzLnNjcm9sbGJhcnMubGVuZ3RoPTAsdGhpcy5zY3JvbGxiYXJzLnB1c2go''@;'; put 'put ''bCksYS5jbG9uZSYmdGhpcy5zY3JvbGxiYXJzLnB1c2goYSksdGhpcy5zY3JvbGxiYXJzLnB1c2goZCksaCYmdGhpcy5zY3JvbGxiYXJzLnB1c2goaCksZiYmZi5jbG9uZSYmdGhpcy5zY3JvbGxiYXJzLnB1c2goZiksdGhpcy5jbG9uZXM9W10sbC5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9u''@;'; put 'put ''ZXMucHVzaChsLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGEubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goYS5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxkLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGQuY2xvbmUud3RUYWJsZS5o''@;'; put 'put ''b2xkZXIucGFyZW50Tm9kZSksaCYmdGhpcy5jbG9uZXMucHVzaChoLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGYmJmYuY2xvbmUmJnRoaXMuY2xvbmVzLnB1c2goZi5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKX1vbkJlZm9yZVRvdWNoU2Nyb2xsKCl7dGhpcy5m''@;'; put 'put ''cmVlemVPdmVybGF5cz0hMCxJbih0aGlzLmNsb25lcyxsPT57cGkobCwiaGlkZS10d2VlbiIpfSl9b25BZnRlck1vbWVudHVtU2Nyb2xsKCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMSxJbih0aGlzLmNsb25lcyxsPT57V28obCwiaGlkZS10d2VlbiIpLHBpKGwsInNob3ctdHdlZW4iKX0pLHRo''@;'; put 'put ''aXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntJbih0aGlzLmNsb25lcyxsPT57V28obCwic2hvdy10d2VlbiIpfSl9LDQwMCksSW4odGhpcy5zY3JvbGxiYXJzLGw9PntsLnJlZnJlc2goKSxsLnJlc2V0Rml4ZWRQb3NpdGlvbigpfSksdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5z''@;'; put 'put ''eW5jU2Nyb2xsV2l0aE1hc3RlcigpfX1jb25zdCBqQT0idHJpbVJvd3MiO2NsYXNzIEFOZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBqQX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhp''@;'; put 'put ''cy50cmltbWVkUm93c01hcD1udWxsfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtqQV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy50cmltbWVkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgidHJpbVJvd3Mi''@;'; put 'put ''LG5ldyBneSksdGhpcy50cmltbWVkUm93c01hcC5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50aGlzLm9uTWFwSW5pdCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2pBXTtBcnJheS5pc0FycmF5KGwpJiZ0aGlz''@;'; put 'put ''LmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuY2xlYXIoKSxJbihsLGE9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCEwKX0pfSwhMCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4''@;'; put 'put ''TWFwcGVyLnVucmVnaXN0ZXJNYXAoInRyaW1Sb3dzIiksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFRyaW1tZWRSb3dzKCl7cmV0dXJuIHRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VHJpbW1lZEluZGV4ZXMoKX10cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRo''@;'; put 'put ''aXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVUcmltUm93IixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0luKGwsXz0+e3RoaXMudHJp''@;'; put 'put ''bW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KF8sITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJUcmltUm93IixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfXRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2Qr''@;'; put 'put ''KylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnRyaW1Sb3dzKGEpfXVudHJpbVJvd3MobCl7Y29uc3QgYT10aGlzLmdldFRyaW1tZWRSb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPXRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoKSxfPWwu''@;'; put 'put ''bGVuZ3RoPjA7ZCYmXyYmKEluKGwsVz0+e2ZbV109ITF9KSxoPUFsKGYsKFcsaWUsZ2UpPT4oaWUmJlcucHVzaChnZSksVyksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbnRyaW1Sb3ciLGEsaCxkJiZfKSYmKGQmJl8mJnRoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVz''@;'; put 'put ''KGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVudHJpbVJvdyIsYSxoLGQmJl8sZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX11bnRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnVudHJp''@;'; put 'put ''bVJvd3MoYSl9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChsKXx8ITF9dW50cmltQWxsKCl7dGhpcy51bnRyaW1Sb3dzKHRoaXMuZ2V0VHJpbW1lZFJvd3MoKSl9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50U291''@;'; put 'put ''cmNlUm93cygpO3JldHVybiBsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9b25NYXBJbml0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2pBXTtBcnJheS5pc0FycmF5KGwpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0luKGwsYT0+e3Ro''@;'; put 'put ''aXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB0byhjKXtjb25zdCBsPXRoaXM7dGhpcy5pbnN0YW5jZT1jLHRoaXMuZG9uZUFjdGlvbnM9W10sdGhpcy51bmRvbmVBY3Rpb25zPVtdLHRoaXMu''@;'; put 'put ''aWdub3JlTmV3QWN0aW9ucz0hMSx0aGlzLmVuYWJsZWQ9ITEsYy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oYSxkKXtjb25zdCBoPWEmJmEubGVuZ3RoO2gmJmEuZmluZChUPT57Y29uc3RbLCxXLGllXT1UO3JldHVybiBXIT09aWV9KSYmbC5kb25lKCgpPT57Y29uc3QgVD1hLnJl''@;'; put 'put ''ZHVjZSgoaWUsZ2UpPT4oaWUucHVzaChbLi4uZ2VdKSxpZSksW10pO0luKFQsaWU9PntpZVsxXT1jLnByb3BUb0NvbChpZVsxXSl9KTtjb25zdCBXPWg+MT90aGlzLmdldFNlbGVjdGVkKCk6W1tUWzBdWzBdLFRbMF1bMV1dXTtyZXR1cm4gbmV3IHRvLkNoYW5nZUFjdGlvbihULFcpfSxkKX0p''@;'; put 'put ''LGMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLChhLGQsaCk9PntsLmRvbmUoKCk9Pm5ldyB0by5DcmVhdGVSb3dBY3Rpb24oYSxkKSxoKX0pLGMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IiwoYSxkLGgsZik9PntsLmRvbmUoKCk9Pntjb25zdCBUPWMudG9QaHlzaWNhbFJvdyhhKSxXPXl1''@;'; put 'put ''KGwuaW5zdGFuY2UuZ2V0U291cmNlRGF0YShULDAsVCtkLTEsbC5pbnN0YW5jZS5jb3VudFNvdXJjZUNvbHMoKS0xKSk7cmV0dXJuIG5ldyB0by5SZW1vdmVSb3dBY3Rpb24oVCxXLGMuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcCxj''@;'; put 'put ''LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX0sZil9KSxjLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoYSxkLGgpPT57bC5kb25lKCgpPT5uZXcgdG8uQ3JlYXRlQ29sdW1uQWN0aW9uKGEsZCksaCl9KSxjLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsKGEsZCxoLGYp''@;'; put 'put ''PT57bC5kb25lKCgpPT57Y29uc3QgVD1sLmluc3RhbmNlLmdldFNvdXJjZURhdGFBcnJheSgpLFc9KGwuaW5zdGFuY2UuY291bnRDb2xzKCkrYSklbC5pbnN0YW5jZS5jb3VudENvbHMoKSxpZT1bXSxnZT1bXSx3ZT1bXTt2byhULmxlbmd0aC0xLG90PT57Y29uc3QgZXQ9W10seXQ9VFtvdF07''@;'; put 'put ''dm8oVyxXKyhkLTEpLGt0PT57ZXQucHVzaCh5dFtjLnRvUGh5c2ljYWxDb2x1bW4oa3QpXSl9KSxpZS5wdXNoKGV0KX0pLHZvKGQtMSxvdD0+e3dlLnB1c2goYy50b1BoeXNpY2FsQ29sdW1uKFcrb3QpKX0pLEFycmF5LmlzQXJyYXkoYy5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnMpJiZ2byhk''@;'; put 'put ''LTEsb3Q9PntnZS5wdXNoKGMuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzW2MudG9QaHlzaWNhbENvbHVtbihXK290KV18fG51bGwpfSk7Y29uc3QgRWU9Yy5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxaZT1jLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5j''@;'; put 'put ''ZSgpO3JldHVybiBuZXcgdG8uUmVtb3ZlQ29sdW1uQWN0aW9uKFcsd2UsaWUsZ2UsRWUsWmUsYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0KX0sZil9KSxjLmFkZEhvb2soImJlZm9yZUNlbGxBbGlnbm1lbnQiLChhLGQsaCxmKT0+e2wuZG9uZSgoKT0+bmV3IHRvLkNlbGxBbGln''@;'; put 'put ''bm1lbnRBY3Rpb24oYSxkLGgsZikpfSksYy5hZGRIb29rKCJiZWZvcmVGaWx0ZXIiLGE9PntsLmRvbmUoKCk9Pm5ldyB0by5GaWx0ZXJzQWN0aW9uKGEpKX0pLGMuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKGEsZCk9PnshMSE9PWEmJmwuZG9uZSgoKT0+bmV3IHRvLlJvd01vdmVBY3Rpb24o''@;'; put 'put ''YSxkKSl9KSxjLmFkZEhvb2soImJlZm9yZU1lcmdlQ2VsbHMiLChhLGQpPT57ZHx8bC5kb25lKCgpPT5uZXcgdG8uTWVyZ2VDZWxsc0FjdGlvbihjLGEpKX0pLGMuYWRkSG9vaygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLChhLGQpPT57ZHx8bC5kb25lKCgpPT5uZXcgdG8uVW5tZXJnZUNlbGxzQWN0''@;'; put 'put ''aW9uKGMsYSkpfSksYy5hZGRIb29rKCJhZnRlckluaXQiLCgpPT57bC5pbml0KCl9KX1mdW5jdGlvbiBJb2UoYyxsKXtpZigibG9hZERhdGEiPT09bClyZXR1cm4gdGhpcy51bmRvUmVkby5jbGVhcigpfXRvLnByb3RvdHlwZS5kb25lPWZ1bmN0aW9uKGMsbCl7aWYodGhpcy5pZ25vcmVOZXdB''@;'; put 'put ''Y3Rpb25zfHwiVW5kb1JlZG8udW5kbyI9PT1sfHwiVW5kb1JlZG8ucmVkbyI9PT1sfHwiYXV0byI9PT1sKXJldHVybjtjb25zdCBkPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTtpZighMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsZCxsKSlyZXR1''@;'; put 'put ''cm47Y29uc3QgZj1jKCksXz10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmRvbmVBY3Rpb25zLnB1c2goZiksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGQsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tz''@;'; put 'put ''KCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLF8pLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MCx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsXyx0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSl9LHRvLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKCl7aWYo''@;'; put 'put ''dGhpcy5pc1VuZG9BdmFpbGFibGUoKSl7Y29uc3QgYz10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixjKTtjb25zdCBsPXRoaXMuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJVbmRvU3RhY2tDaGFuZ2UiLGMsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBhPXl1KGwpO2lmKCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kbyIsYSkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBoPXRoaXMsZj10aGlzLnVuZG9u''@;'; put 'put ''ZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGYpLGwudW5kbyh0aGlzLmluc3RhbmNlLCgpPT57aC5pZ25vcmVOZXdBY3Rpb25zPSExLGgudW5kb25lQWN0aW9ucy5wdXNoKGwpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygi''@;'; put 'put ''YWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGYsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVW5kbyIsYSl9fSx0by5wcm90b3R5cGUucmVkbz1mdW5jdGlvbigpe2lmKHRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpe2NvbnN0IGM9dGhpcy51bmRv''@;'; put 'put ''bmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixjKTtjb25zdCBsPXRoaXMudW5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsYyx0aGlzLnVuZG9uZUFjdGlv''@;'; put 'put ''bnMuc2xpY2UoKSk7Y29uc3QgYT15dShsKTtpZighMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlZG8iLGEpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgaD10aGlzLGY9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaW5zdGFuY2UucnVuSG9v''@;'; put 'put ''a3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsZiksbC5yZWRvKHRoaXMuaW5zdGFuY2UsKCk9PntoLmlnbm9yZU5ld0FjdGlvbnM9ITEsaC5kb25lQWN0aW9ucy5wdXNoKGwpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGYsdGhpcy5kb25lQWN0aW9u''@;'; put 'put ''cy5zbGljZSgpKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlZG8iLGEpfX0sdG8ucHJvdG90eXBlLmlzVW5kb0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD4wfSx0by5wcm90b3R5cGUuaXNSZWRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg+MH0sdG8ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5kb25lQWN0aW9ucy5sZW5ndGg9MCx0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPTB9LHRvLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5lbmFibGVkfSx0by5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQoKSlyZXR1cm47Y29uc3QgYz10aGlzLmluc3RhbmNlO3RoaXMuZW5hYmxlZD0hMCxmdW5jdGlvbiBMTmUoYyl7Yy51bmRvPWZ1bmN0aW9uKCl7cmV0dXJuIGMudW5kb1JlZG8udW5kbygp''@;'; put 'put ''fSxjLnJlZG89ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5yZWRvKCl9LGMuaXNVbmRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGMudW5kb1JlZG8uaXNVbmRvQXZhaWxhYmxlKCl9LGMuaXNSZWRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGMudW5kb1JlZG8uaXNSZWRv''@;'; put 'put ''QXZhaWxhYmxlKCl9LGMuY2xlYXJVbmRvPWZ1bmN0aW9uKCl7cmV0dXJuIGMudW5kb1JlZG8uY2xlYXIoKX19KGMpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxjLmFkZEhvb2soImFmdGVyQ2hhbmdlIixJb2UpfSx0by5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe2lmKCF0aGlzLmlz''@;'; put 'put ''RW5hYmxlZCgpKXJldHVybjtjb25zdCBjPXRoaXMuaW5zdGFuY2U7dGhpcy5lbmFibGVkPSExLGZ1bmN0aW9uIFJOZShjKXtkZWxldGUgYy51bmRvLGRlbGV0ZSBjLnJlZG8sZGVsZXRlIGMuaXNVbmRvQXZhaWxhYmxlLGRlbGV0ZSBjLmlzUmVkb0F2YWlsYWJsZSxkZWxldGUgYy5jbGVhclVu''@;'; put 'put ''ZG99KGMpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLGMucmVtb3ZlSG9vaygiYWZ0ZXJDaGFuZ2UiLElvZSl9LHRvLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jbGVhcigpLHRoaXMuaW5zdGFuY2U9bnVsbCx0aGlzLmRvbmVBY3Rpb25zPW51bGwsdGhpcy51bmRvbmVB''@;'; put 'put ''Y3Rpb25zPW51bGx9LCh0by5BY3Rpb249ZnVuY3Rpb24oKXt9KS5wcm90b3R5cGUudW5kbz1mdW5jdGlvbigpe30sdG8uQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKCl7fSx0by5DaGFuZ2VBY3Rpb249ZnVuY3Rpb24oYyxsKXt0aGlzLmNoYW5nZXM9Yyx0aGlzLnNlbGVjdGVkPWws''@;'; put 'put ''dGhpcy5hY3Rpb25UeXBlPSJjaGFuZ2UifSx6Zih0by5DaGFuZ2VBY3Rpb24sdG8uQWN0aW9uKSx0by5DaGFuZ2VBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPXl1KHRoaXMuY2hhbmdlcyksZD1jLmNvdW50RW1wdHlSb3dzKCEwKSxoPWMuY291bnRFbXB0eUNv''@;'; put 'put ''bHMoITApO2ZvcihsZXQgZj0wLF89YS5sZW5ndGg7ZjxfO2YrKylhW2ZdLnNwbGljZSgzLDEpO2MuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIixsKSxjLnNldERhdGFBdENlbGwoYSxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKTtmb3IobGV0IGY9MCxfPWEubGVuZ3RoO2Y8XztmKyspe2Nv''@;'; put 'put ''bnN0W1QsV109YVtmXTtjLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzJiZUKzErYy5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93cz09PWMuY291bnRSb3dzKCkmJmQ9PT1jLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzJiYoYy5hbHRlcigicmVtb3ZlX3JvdyIscGFyc2VJbnQoVCsxLDEw''@;'; put 'put ''KSxjLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzKSxjLnVuZG9SZWRvLmRvbmVBY3Rpb25zLnBvcCgpKSxjLmdldFNldHRpbmdzKCkubWluU3BhcmVDb2xzJiZXKzErYy5nZXRTZXR0aW5ncygpLm1pblNwYXJlQ29scz09PWMuY291bnRDb2xzKCkmJmg9PT1jLmdldFNldHRpbmdzKCkubWlu''@;'; put 'put ''U3BhcmVDb2xzJiYoYy5hbHRlcigicmVtb3ZlX2NvbCIscGFyc2VJbnQoVysxLDEwKSxjLmdldFNldHRpbmdzKCkubWluU3BhcmVDb2xzKSxjLnVuZG9SZWRvLmRvbmVBY3Rpb25zLnBvcCgpKX1jLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpfSx0by5DaGFuZ2VBY3Rpb24ucHJv''@;'; put 'put ''dG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPXl1KHRoaXMuY2hhbmdlcyk7Zm9yKGxldCBkPTAsaD1hLmxlbmd0aDtkPGg7ZCsrKWFbZF0uc3BsaWNlKDIsMSk7Yy5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGwpLGMuc2V0RGF0YUF0Q2VsbChhLG51bGwsbnVsbCwiVW5kb1Jl''@;'; put 'put ''ZG8ucmVkbyIpLHRoaXMuc2VsZWN0ZWQmJmMuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9LHRvLkNyZWF0ZVJvd0FjdGlvbj1mdW5jdGlvbihjLGwpe3RoaXMuaW5kZXg9Yyx0aGlzLmFtb3VudD1sLHRoaXMuYWN0aW9uVHlwZT0iaW5zZXJ0X3JvdyJ9LHpmKHRvLkNyZWF0ZVJv''@;'; put 'put ''d0FjdGlvbix0by5BY3Rpb24pLHRvLkNyZWF0ZVJvd0FjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5jb3VudFJvd3MoKSxkPWMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3M7dGhpcy5pbmRleD49YSYmdGhpcy5pbmRleC1kPGEmJih0aGlzLmluZGV4LT1k''@;'; put 'put ''KSxjLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZVJvdyIsbCksYy5hbHRlcigicmVtb3ZlX3JvdyIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfSx0by5DcmVhdGVSb3dBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRl''@;'; put 'put ''ckNyZWF0ZVJvdyIsbCksYy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfSx0by5SZW1vdmVSb3dBY3Rpb249ZnVuY3Rpb24oYyxsLGEsZCxoKXt0aGlzLmluZGV4PWMsdGhpcy5kYXRhPWwsdGhpcy5hY3Rpb25UeXBlPSJy''@;'; put 'put ''ZW1vdmVfcm93Iix0aGlzLmZpeGVkUm93c0JvdHRvbT1hLHRoaXMuZml4ZWRSb3dzVG9wPWQsdGhpcy5yb3dJbmRleGVzU2VxdWVuY2U9aH0semYodG8uUmVtb3ZlUm93QWN0aW9uLHRvLkFjdGlvbiksdG8uUmVtb3ZlUm93QWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Y29u''@;'; put 'put ''c3QgYT1jLmdldFNldHRpbmdzKCksZD1bXTthLmZpeGVkUm93c0JvdHRvbT10aGlzLmZpeGVkUm93c0JvdHRvbSxhLmZpeGVkUm93c1RvcD10aGlzLmZpeGVkUm93c1RvcCx0aGlzLmRhdGEuZm9yRWFjaCgoaCxmKT0+e09iamVjdC5rZXlzKGgpLmZvckVhY2goXz0+e2NvbnN0IFQ9cGFyc2VJ''@;'; put 'put ''bnQoXywxMCk7ZC5wdXNoKFt0aGlzLmluZGV4K2YsaXNOYU4oVCk/XzpULGhbX11dKX0pfSksYy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdGhpcy5pbmRleCx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksYy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKSxjLnNl''@;'; put 'put ''dFNvdXJjZURhdGFBdENlbGwoZCxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKSxjLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSl9LHRvLlJlbW92ZVJvd0FjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2MuYWRkSG9v''@;'; put 'put ''a09uY2UoImFmdGVyUmVtb3ZlUm93IixsKSxjLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnJlZG8iKX0sdG8uQ3JlYXRlQ29sdW1uQWN0aW9uPWZ1bmN0aW9uKGMsbCl7dGhpcy5pbmRleD1jLHRoaXMuYW1vdW50PWwsdGhpcy5hY3Rp''@;'; put 'put ''b25UeXBlPSJpbnNlcnRfY29sIn0semYodG8uQ3JlYXRlQ29sdW1uQWN0aW9uLHRvLkFjdGlvbiksdG8uQ3JlYXRlQ29sdW1uQWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Yy5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGwpLGMuYWx0ZXIoInJlbW92ZV9jb2wiLHRo''@;'; put 'put ''aXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnVuZG8iKX0sdG8uQ3JlYXRlQ29sdW1uQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Yy5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVDb2wiLGwpLGMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXgsdGhp''@;'; put 'put ''cy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX0sdG8uUmVtb3ZlQ29sdW1uQWN0aW9uPWZ1bmN0aW9uKGMsbCxhLGQsaCxmLF8pe3RoaXMuaW5kZXg9Yyx0aGlzLmluZGV4ZXM9bCx0aGlzLmRhdGE9YSx0aGlzLmFtb3VudD10aGlzLmRhdGFbMF0ubGVuZ3RoLHRoaXMuaGVhZGVycz1kLHRoaXMu''@;'; put 'put ''Y29sdW1uUG9zaXRpb25zPWguc2xpY2UoMCksdGhpcy5yb3dQb3NpdGlvbnM9Zi5zbGljZSgwKSx0aGlzLmFjdGlvblR5cGU9InJlbW92ZV9jb2wiLHRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ9X30semYodG8uUmVtb3ZlQ29sdW1uQWN0aW9uLHRvLkFjdGlvbiksdG8uUmVtb3ZlQ29sdW1uQWN0''@;'; put 'put ''aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Yy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PXRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ7Y29uc3QgZD10aGlzLmluZGV4ZXMuc2xpY2UoMCkuc29ydCgpLGg9KGllLGdlLHdlKT0+d2VbdGhpcy5pbmRleGVzLmluZGV4T2Yo''@;'; put 'put ''ZFtnZV0pXSxmPXRoaXMuZGF0YS5sZW5ndGgsXz1bXTtmb3IobGV0IGllPTA7aWU8ZjtpZSsrKV8ucHVzaChjcyh0aGlzLmRhdGFbaWVdLGgpKTtjb25zdCBUPWNzKHRoaXMuaGVhZGVycyxoKSxXPVtdO2MuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXhlc1swXSx0aGlzLmlu''@;'; put 'put ''ZGV4ZXMubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksSW4oYy5nZXRTb3VyY2VEYXRhQXJyYXkoKSwoaWUsZ2UpPT57SW4oZCwod2UsRWUpPT57aWVbd2VdPV9bZ2VdW0VlXSxXLnB1c2goW2dlLHdlLGllW3dlXV0pfSl9KSxjLnNldFNvdXJjZURhdGFBdENlbGwoVyx2b2lkIDAsdm9pZCAwLCJV''@;'; put 'put ''bmRvUmVkby51bmRvIiksdHlwZW9mIHRoaXMuaGVhZGVyczwidSImJkluKFQsKGllLGdlKT0+e2MuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzW2RbZ2VdXT1pZX0pLGMuYmF0Y2hFeGVjdXRpb24oKCk9PntjLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd1Bvc2l0''@;'; put 'put ''aW9ucyksYy5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1bW5Qb3NpdGlvbnMpfSwhMCksYy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKSxjLnJlbmRlcigpfSx0by5SZW1vdmVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24o''@;'; put 'put ''YyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsbCksYy5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfSx0by5DZWxsQWxpZ25tZW50QWN0aW9uPWZ1bmN0aW9uKGMsbCxhLGQpe3RoaXMuc3RhdGVCZWZvcmU9Yyx0aGlz''@;'; put 'put ''LnJhbmdlPWwsdGhpcy50eXBlPWEsdGhpcy5hbGlnbm1lbnQ9ZH0sdG8uQ2VsbEFsaWdubWVudEFjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe0luKHRoaXMucmFuZ2UsYT0+e2EuZm9yQWxsKChkLGgpPT57ZD49MCYmaD49MCYmYy5zZXRDZWxsTWV0YShkLGgsImNsYXNzTmFt''@;'; put 'put ''ZSIsdGhpcy5zdGF0ZUJlZm9yZVtkXVtoXXx8IiBodExlZnQiKX0pfSksYy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKSxjLnJlbmRlcigpfSx0by5DZWxsQWxpZ25tZW50QWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7S3AodGhpcy5yYW5nZSx0aGlzLnR5cGUs''@;'; put 'put ''dGhpcy5hbGlnbm1lbnQsKGEsZCk9PmMuZ2V0Q2VsbE1ldGEoYSxkKSwoYSxkLGgsZik9PmMuc2V0Q2VsbE1ldGEoYSxkLGgsZikpLGMuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYy5yZW5kZXIoKX0sdG8uRmlsdGVyc0FjdGlvbj1mdW5jdGlvbihjKXt0aGlzLmNvbmRpdGlv''@;'; put 'put ''bnNTdGFjaz1jLHRoaXMuYWN0aW9uVHlwZT0iZmlsdGVyIn0semYodG8uRmlsdGVyc0FjdGlvbix0by5BY3Rpb24pLHRvLkZpbHRlcnNBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPWMuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7Yy5hZGRIb29rT25jZSgiYWZ0ZXJW''@;'; put 'put ''aWV3UmVuZGVyIixsKSxhLmNvbmRpdGlvbkNvbGxlY3Rpb24uaW1wb3J0QWxsQ29uZGl0aW9ucyh0aGlzLmNvbmRpdGlvbnNTdGFjay5zbGljZSgwLHRoaXMuY29uZGl0aW9uc1N0YWNrLmxlbmd0aC0xKSksYS5maWx0ZXIoKX0sdG8uRmlsdGVyc0FjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5j''@;'; put 'put ''dGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRQbHVnaW4oImZpbHRlcnMiKTtjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGEuY29uZGl0aW9uQ29sbGVjdGlvbi5pbXBvcnRBbGxDb25kaXRpb25zKHRoaXMuY29uZGl0aW9uc1N0YWNrKSxhLmZpbHRlcigpfSx0by5NZXJnZUNlbGxz''@;'; put 'put ''QWN0aW9uPWNsYXNzIEROZSBleHRlbmRzIHRvLkFjdGlvbntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5jZWxsUmFuZ2U9YTtjb25zdCBkPXRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCksaD10aGlzLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTt0aGlzLnJh''@;'; put 'put ''bmdlRGF0YT1sLmdldERhdGEoZC5yb3csZC5jb2wsaC5yb3csaC5jb2wpfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCk7Y29uc3QgaD10''@;'; put 'put ''aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpO2wucG9wdWxhdGVGcm9tQXJyYXkoaC5yb3csaC5jb2wsdGhpcy5yYW5nZURhdGEsdm9pZCAwLHZvaWQgMCwiTWVyZ2VDZWxscyIpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25j''@;'; put 'put ''ZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UpfX0sdG8uVW5tZXJnZUNlbGxzQWN0aW9uPWNsYXNzIElOZSBleHRlbmRzIHRvLkFjdGlvbntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5jZWxsUmFuZ2U9YX11bmRvKGwsYSl7Y29uc3QgZD1s''@;'; put 'put ''LmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRl''@;'; put 'put ''ciIsYSksZC51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApLGwucmVuZGVyKCl9fSx0by5Sb3dNb3ZlQWN0aW9uPWZ1bmN0aW9uKGMsbCl7dGhpcy5yb3dzPWMuc2xpY2UoKSx0aGlzLmZpbmFsSW5kZXg9bCx0aGlzLmFjdGlvblR5cGU9InJvd19tb3ZlIn0semYodG8uUm93TW92ZUFj''@;'; put 'put ''dGlvbix0by5BY3Rpb24pLHRvLlJvd01vdmVBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPWMuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIiksZD1bXS5jb25jYXQodGhpcy5yb3dzKSxoPWQuZmlsdGVyKFQ9PlQ+dGhpcy5maW5hbEluZGV4KSxmPWQuZmlsdGVy''@;'; put 'put ''KFQ9PlQ8PXRoaXMuZmluYWxJbmRleCksXz1oLnNvcnQoKFQsVyk9PlctVCkuY29uY2F0KGYuc29ydCgoVCxXKT0+VC1XKSk7Yy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKTtmb3IobGV0IFQ9MDtUPF8ubGVuZ3RoO1QrPTEpe2NvbnN0IFc9Yy50b1Zpc3VhbFJvdyhfW1RdKTth''@;'; put 'put ''Lm1vdmVSb3coVyxfW1RdKX1jLnJlbmRlcigpLGMuZGVzZWxlY3RDZWxsKCksYy5zZWxlY3RSb3dzKHRoaXMucm93c1swXSx0aGlzLnJvd3NbMF0rdGhpcy5yb3dzLmxlbmd0aC0xKX0sdG8uUm93TW92ZUFjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRQ''@;'; put 'put ''bHVnaW4oIm1hbnVhbFJvd01vdmUiKTtjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGEubW92ZVJvd3ModGhpcy5yb3dzLnNsaWNlKCksdGhpcy5maW5hbEluZGV4KSxjLnJlbmRlcigpLGMuZGVzZWxlY3RDZWxsKCksYy5zZWxlY3RSb3dzKHRoaXMuZmluYWxJbmRleCx0aGlz''@;'; put 'put ''LmZpbmFsSW5kZXgrdGhpcy5yb3dzLmxlbmd0aC0xKX0sdG8ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtjb25zdCBjPXRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS51bmRvLGw9dHlwZW9mIGM+InUifHxjO3RoaXMuaW5zdGFuY2UudW5kb1JlZG98fCh0aGlzLmluc3RhbmNlLnVuZG9S''@;'; put 'put ''ZWRvPXRoaXMpLGw/dGhpcy5pbnN0YW5jZS51bmRvUmVkby5lbmFibGUoKTp0aGlzLmluc3RhbmNlLnVuZG9SZWRvLmRpc2FibGUoKX0sdG8ucHJvdG90eXBlLnJlZ2lzdGVyU2hvcnRjdXRzPWZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0''@;'; put 'put ''KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJ6Il1dLGNhbGxiYWNrOigpPT57dGhpcy51bmRvKCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJ5Il0sWyJDb250cm9sL01ldGEiLCJTaGlmdCIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnJlZG8oKX19''@;'; put 'put ''XSx7cnVuT25seUlmOmg9PiFoLmFsdEtleSxncm91cDoidW5kb1JlZG8ifSl9LHRvLnByb3RvdHlwZS51bnJlZ2lzdGVyU2hvcnRjdXRzPWZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91''@;'; put 'put ''cCgidW5kb1JlZG8iKX07Y29uc3QgUXk9c28uZ2V0U2luZ2xldG9uKCk7UXkuYWRkKCJhZnRlclVwZGF0ZVNldHRpbmdzIixmdW5jdGlvbigpe3ZhciBjO251bGw9PT0oYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKSl8fHZvaWQgMD09PWN8fGMuaW5pdCgpfSksUXkucmVnaXN0ZXIoImJl''@;'; put 'put ''Zm9yZVVuZG8iKSxReS5yZWdpc3RlcigiYWZ0ZXJVbmRvIiksUXkucmVnaXN0ZXIoImJlZm9yZVJlZG8iKSxReS5yZWdpc3RlcigiYWZ0ZXJSZWRvIiksdG8uUExVR0lOX0tFWT0idW5kb1JlZG8iLHRvLlNFVFRJTkdfS0VZUz0hMDtjb25zdCBPTmU9dG87ZnVuY3Rpb24gRnooKXsoZnVuY3Rp''@;'; put 'put ''b24gX0llKCl7UjAodjcpLFIwKFhCKSxSMChKbmUpLFIwKG5yZSksUjAoSkIpLFIwKHFCKSxSMChycmUpLFIwKGlyZSksUjAobUllKSxSMChrZyksUjAoc3JlKX0pKCksZnVuY3Rpb24gUkllKCl7cGgoYjcpLHBoKFN5KSxwaCh0aikscGgoZWopLHBoKHJqKSxwaChpaikscGgoJHApLHBoKG9q''@;'; put 'put ''KX0oKSxmdW5jdGlvbiBCSWUoKXthNyh4eSksYTcoWmspLGE3KHNqKSxhNyhZayl9KCksZnVuY3Rpb24gcUllKCl7YjIoakllKSxiMih6SWUpLGIyKFVJZSksYjIoWkllKSxiMihZSWUpLGIyKFdJZSksYjIoR0llKSxiMihHbmUpLGIyKCRJZSl9KCksZnVuY3Rpb24gUE5lKCl7anMoa3kpLGpz''@;'; put 'put ''KHVMZSksanMoQXkpLGpzKE1MZSksanMoUkxlKSxqcyhPcmUpLGpzKGFSZSksanMoU1JlKSxqcyhaUmUpLGpzKGZPZSksanMoRE9lKSxqcyhMT2UpLGpzKE9PZSksanMoR09lKSxqcyh6UGUpLGpzKHZGZSksanMoTUZlKSxqcyhJRmUpLGpzKFBGZSksanMoWkZlKSxqcyhXRmUpLGpzKHRIZSks''@;'; put 'put ''anMockhlKSxqcyhoSGUpLGpzKF9IZSksanMod0hlKSxqcyhyTmUpLGpzKHBOZSksanMoX05lKSxqcyhTTmUpLGpzKEVOZSksanMoQU5lKSxqcyhPTmUpfSgpfWxldCBDMj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvb119KSxjfSkoKSxWNz0oKCk9PntjbGFzcyBje25nT25Jbml0KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMu''@;'; put 'put ''XHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W2FQLGxQXSxpbXBvcnRzOltvbywkbCxkYyxfdSxDMl19KSxjfSkoKSxldz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1''@;'; put 'put ''aW5qPW1pKHtpbXBvcnRzOltvb119KSxjfSkoKSxMb2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sX3Usb28sJGxdfSksY30p''@;'; put 'put ''KCksQjc9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sJGwsX3UsZGMsVjcsZXcsQzIsTG9lXX0pLGN9KSgpO3ZhciBIeixOeixW''@;'; put 'put ''eixCeixqeixHYz1GKDgzNDE3KSx0Mz1GKDEyMDcwKTtjbGFzcyBSb2V7Y29uc3RydWN0b3IoKXt0aGlzLnF1ZXVlPVtdfWFkZFRvUXVldWUobCl7dGhpcy5xdWV1ZS5wdXNoKC4uLmwpfX1GeigpLGZ1bmN0aW9uIEZOZShjKXtjb25zdCBsPSEodHlwZW9mIHdpbmRvdz4idSIpJiZ3aW5kb3cu''@;'; put 'put ''alF1ZXJ5O2wmJihsLmZuLmhhbmRzb250YWJsZT1mdW5jdGlvbihhKXtjb25zdCBkPXRoaXMuZmlyc3QoKTtsZXQgZixoPWQuZGF0YSgiaGFuZHNvbnRhYmxlIik7aWYoInN0cmluZyIhPXR5cGVvZiBhKXtjb25zdCBpZT1hfHx7fTtyZXR1cm4gaD9oLnVwZGF0ZVNldHRpbmdzKGllKTooaD1u''@;'; put 'put ''ZXcgYy5Db3JlKGRbMF0saWUpLGQuZGF0YSgiaGFuZHNvbnRhYmxlIixoKSxoLmluaXQoKSksZH1pZihoKXtpZighKHR5cGVvZiBoW2FdPCJ1IikpdGhyb3cgbmV3IEVycm9yKGBIYW5kc29udGFibGUgZG8gbm90IHByb3ZpZGUgYWN0aW9uOiAke2F9YCk7Zm9yKHZhciBfPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsVD1uZXcgQXJyYXkoXz4xP18tMTowKSxXPTE7VzxfO1crKylUW1ctMV09YXJndW1lbnRzW1ddO2Y9aFthXS5jYWxsKGgsLi4uVCksImRlc3Ryb3kiPT09YSYmZC5yZW1vdmVEYXRhKCl9cmV0dXJuIGZ9KX0obXMpLG1zLl9fR2hvc3RUYWJsZT1saixtcy5fZ2V0TGlzdGVuZXJzQ291''@;'; put 'put ''bnRlcj1mdW5jdGlvbiBsa2UoKXtyZXR1cm4gcGt9LG1zLl9nZXRSZWdpc3RlcmVkTWFwc0NvdW50ZXI9ZnVuY3Rpb24gTVRlKCl7cmV0dXJuIHBWfSxtcy5FdmVudE1hbmFnZXI9bGw7Y29uc3QgSE5lPVthZSxSLGosQixFLE0seCxrLE8sbSx6LEldLE5OZT1bbGUsS107bXMuaGVscGVyPXt9''@;'; put 'put ''LG1zLmRvbT17fSxJbihITmUsYz0+e0luKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKG1zLmhlbHBlcltsXT1jW2xdKX0pfSksSW4oTk5lLGM9PntJbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKSxsPT57Il8iIT09bC5jaGFyQXQo''@;'; put 'put ''MCkmJihtcy5kb21bbF09Y1tsXSl9KX0pLG1zLmNlbGxUeXBlcz1udWxsIT09KEh6PW1zLmNlbGxUeXBlcykmJnZvaWQgMCE9PUh6P0h6Ont9LEluKFREZSgpLGM9Pnttcy5jZWxsVHlwZXNbY109VUIoYyl9KSxtcy5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZT1iMixtcy5jZWxsVHlwZXMu''@;'; put 'put ''Z2V0Q2VsbFR5cGU9VUIsbXMuZWRpdG9ycz1udWxsIT09KE56PW1zLmVkaXRvcnMpJiZ2b2lkIDAhPT1Oej9Oejp7fSxJbihpa2UoKSxjPT57bXMuZWRpdG9yc1tgJHtidShjKX1FZGl0b3JgXT1mayhjKX0pLG1zLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3I9UjAsbXMuZWRpdG9ycy5nZXRFZGl0''@;'; put 'put ''b3I9ZmssbXMucmVuZGVyZXJzPW51bGwhPT0oVno9bXMucmVuZGVyZXJzKSYmdm9pZCAwIT09Vno/Vno6e30sSW4oTWtlKCksYz0+e2NvbnN0IGw9X2soYyk7ImJhc2UiPT09YyYmKG1zLnJlbmRlcmVycy5jZWxsRGVjb3JhdG9yPWwpLG1zLnJlbmRlcmVyc1tgJHtidShjKX1SZW5kZXJlcmBd''@;'; put 'put ''PWx9KSxtcy5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcj1waCxtcy5yZW5kZXJlcnMuZ2V0UmVuZGVyZXI9X2ssbXMudmFsaWRhdG9ycz1udWxsIT09KEJ6PW1zLnZhbGlkYXRvcnMpJiZ2b2lkIDAhPT1Cej9Cejp7fSxJbihra2UoKSxjPT57bXMudmFsaWRhdG9yc1tgJHtidShjKX1WYWxp''@;'; put 'put ''ZGF0b3JgXT1GTihjKX0pLG1zLnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxpZGF0b3I9YTcsbXMudmFsaWRhdG9ycy5nZXRWYWxpZGF0b3I9Rk4sbXMucGx1Z2lucz1udWxsIT09KGp6PW1zLnBsdWdpbnMpJiZ2b2lkIDAhPT1qej9qejp7fSxJbihQTigpLGM9Pnttcy5wbHVnaW5zW2NdPWN5KGMp''@;'; put 'put ''fSksbXMucGx1Z2luc1tgJHtidShacy5QTFVHSU5fS0VZKX1QbHVnaW5gXT1acyxtcy5wbHVnaW5zLnJlZ2lzdGVyUGx1Z2luPWpzLG1zLnBsdWdpbnMuZ2V0UGx1Z2luPWN5O2NvbnN0IFZOZT1tcyx6ej0oYyxsLGEpPT57Zm9yKGxldCBkIG9mIGMpe2NvbnN0IGg9bC5maW5kKF89Pl8uZGF0''@;'; put 'put ''YT09PWQuTkFNRSksZj1hLnZhcnNbZC5OQU1FXTtmJiYoZC5UWVBFPVsiREFURSIsIkRBVEVUSU1FIiwiVElNRSJdLmluY2x1ZGVzKGQuRERUWVBFKT8ibnVtIjpmLnR5cGUpLGgmJmQuREVTQyYmKGguZGVzYz1kLkRFU0MpLGgmJmYubGVuZ3RoJiYoaC5sZW5ndGg9cGFyc2VJbnQoZi5sZW5n''@;'; put 'put ''dGgpKSxoJiZkLkNMU19SVUxFJiYoaC5jbHNSdWxlPWQuQ0xTX1JVTEUpfXJldHVybiBsfTtmdW5jdGlvbiBVeihjLGwpe2lmKG51bGw9PWN8fCFpc05hTihjKSYmaXNGaW5pdGUoYykpcmV0dXJuIGwmJmwoITApLCEwO2NvbnN0IGE9KDAsdDMuaXNTcGVjaWFsTWlzc2luZykoYyk7cmV0dXJu''@;'; put 'put ''IGwmJmwoYSksYX1jb25zdCBPb2U9e0NBU0U6KGMsbCk9Pntzd2l0Y2gobCl7Y2FzZSJVUENBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtjYXNlIkxPV0NB''@;'; put 'put ''U0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKX1yZXR1cm4hMH0sTUlOVkFMOihjLGwpPT57Y29uc3QgYT1VeihjKSxkPXBhcnNlRmxvYXQoYyk7cmV0dXJuKCFh''@;'; put 'put ''fHwhaXNOYU4oZCkpJiZkPj1OdW1iZXIobC50b1N0cmluZygpKX0sTUFYVkFMOihjLGwpPT57Y29uc3QgYT1VeihjKSxkPXBhcnNlRmxvYXQoYyk7cmV0dXJuISghYXx8IWlzTmFOKGQpKXx8ZDw9TnVtYmVyKGwudG9TdHJpbmcoKSl9LE5PVE5VTEw6KGMsbCk9Pm51bGwhPWMmJmMudG9TdHJp''@;'; put 'put ''bmcoKS5sZW5ndGg+MH07dmFyIFp6PUYoNDQzMTYpO2NsYXNzIFpOZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7dGhpcy5ydWxlcz1bXSx0aGlzLmRxcnVsZXM9W10sdGhpcy5kcWRhdGE9W10sdGhpcy5oaWRkZW5Db2x1bW5zPVtdLHRoaXMucHJpbWFyeUtleXM9W10sdGhpcy5leGVjdXRl''@;'; put 'put ''SG90VmFsaWRhdG9yPShULFcsaWUpPT57Y29uc3QgZ2U9ey4uLlQsdmFsaWRhdG9yOnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBWTmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikse30pLHZpc3VhbFJvdzowLHZpc3VhbENvbDowLHByb3A6''@;'; put 'put ''MH07bnVsbD09VyYmKFc9IiIpLFQmJlQudmFsaWRhdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgVC52YWxpZGF0b3I/VC52YWxpZGF0b3IuY2FsbChnZSxXLHdlPT57aWUmJmllKHdlKX0pOmllJiZpZSghMSl9LHRoaXMuc2FzcGFyYW1zPWwsdGhpcy5ob3RJbnN0YW5jZT1fLHRoaXMucnVsZXM9''@;'; put 'put ''KGM9Pnt0cnl7cmV0dXJuIEpTT04ucGFyc2UoYFske2N9XWApfWNhdGNoe3JldHVybltdfX0pKGwuQ09MVFlQRSksdGhpcy5ydWxlcz16eihkLHRoaXMucnVsZXMsYSksdGhpcy5ydWxlcz0oYz0+e2lmKCFaelt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSlyZXR1cm4gYztmb3IobGV0IGEg''@;'; put 'put ''b2YgYykibnVtZXJpYyI9PT1hLnR5cGUmJihhLm51bWVyaWNGb3JtYXQ9e3BhdHRlcm46IjAsMCIsY3VsdHVyZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSk7cmV0dXJuIGN9KSh0aGlzLnJ1bGVzKSx0aGlzLmRxcnVsZXM9aCx0aGlzLmRxZGF0YT1mLHRoaXMucHJpbWFyeUtleXM9bC5Q''@;'; put 'put ''Sy5zcGxpdCgiICIpLHRoaXMudXBkYXRlRHFEYXRhKCksdGhpcy5zZXR1cFZhbGlkYXRpb25zKCl9Z2V0UnVsZXMoKXtyZXR1cm4gdGhpcy5ydWxlc31nZXRSdWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7cmV0dXJuIHRoaXMucnVsZXNbYV19Z2V0SGlkZGVuQ29sdW1ucygp''@;'; put 'put ''e3JldHVybiB0aGlzLmhpZGRlbkNvbHVtbnN9dXBkYXRlUnVsZShsLGEpe2xldCBkPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXNbZF09ey4uLnRoaXMucnVsZXNbZF0sLi4uYX19cmVtb3ZlUnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXMuc3Bs''@;'; put 'put ''aWNlKGEsMSl9Z2V0RHFEZXRhaWxzKGwpe3JldHVybiBsP3RoaXMuZHFydWxlcy5maWx0ZXIoYT0+YS5CQVNFX0NPTD09PWwpOnRoaXMuZHFydWxlc31pc0RxQ29sKGwpe3JldHVybiEhdGhpcy5kcXJ1bGVzLmZpbmQoYT0+YS5CQVNFX0NPTD09PWwpfWhhc0RxUnVsZXMobCxhLGQ9ITEpe3Jl''@;'; put 'put ''dHVybiBkP3RoaXMuZHFydWxlcy5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKS5sZW5ndGg9PT1hLmxlbmd0aDohIXRoaXMuZHFydWxlcy5maW5kKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSl9Z2V0RHFEcm9wZG93''@;'; put 'put ''blNvdXJjZShsKXtsZXQgYT1bXTtyZXR1cm4gdGhpcy5kcXJ1bGVzLmZvckVhY2goZD0+e2QuQkFTRV9DT0wudG9TdHJpbmcoKT09PWwuZGF0YSYmbC5kYXRhLnRvU3RyaW5nKCkmJlsiSEFSRFNFTEVDVCIsIlNPRlRTRUxFQ1QiLCJIQVJEU0VMRUNUX0hPT0siLCJTT0ZUU0VMRUNUX0hPT0si''@;'; put 'put ''XS5pbmNsdWRlcyhkLlJVTEVfVFlQRS50b1N0cmluZygpKSYmdGhpcy5kcWRhdGEuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1kLkJBU0VfQ09MKS5mb3JFYWNoKGg9PnthLnB1c2gobC50eXBlJiYibnVtZXJpYyI9PT1sLnR5cGU/TnVtYmVyKGguUlVMRV9EQVRBKTpoLlJVTEVfREFUQSl9KX0p''@;'; put 'put ''LGF9dXBkYXRlRHFEYXRhKCl7dGhpcy5kcWRhdGEubGVuZ3RoPjAmJihjPT57Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5kcWRhdGEuZm9yRWFjaChhPT57bC5pbmNsdWRlcyhhLkJBU0VfQ09MKXx8bC5wdXNoKGEuQkFTRV9DT0wpfSksbH0pKCkuZm9yRWFjaChhPT57bGV0IGQ9ITE7dGhpcy5k''@;'; put 'put ''cXJ1bGVzLmxlbmd0aD4wJiZ0aGlzLmRxcnVsZXMuZm9yRWFjaChoPT57aC5CQVNFX0NPTD09PWEmJigiU09GVFNFTEVDVCI9PT1oLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1QiPT09aC5SVUxFX1RZUEUpJiYoZD0hMCl9KSxkfHx0aGlzLmRxcnVsZXMucHVzaCh7QkFTRV9DT0w6YSxSVUxFX1RZ''@;'; put 'put ''UEU6IlNPRlRTRUxFQ1QiLFJVTEVfVkFMVUU6YSxYOjF9KX0pfXNldHVwVmFsaWRhdGlvbnMoKXtmb3IobGV0IGw9MDtsPHRoaXMucnVsZXMubGVuZ3RoO2wrKyl7Y29uc3QgYT10aGlzLnJ1bGVzW2xdLmRhdGF8fCIiO2lmKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YSl7''@;'; put 'put ''aWYodGhpcy5pc0RxQ29sKGEpKXtsZXQgaD10aGlzLmdldERxRHJvcGRvd25Tb3VyY2UodGhpcy5ydWxlc1tsXSk7aC5sZW5ndGg+MCYmKHRoaXMucnVsZXNbbF0uc291cmNlPWgsdGhpcy5ydWxlc1tsXS50eXBlPSJhdXRvY29tcGxldGUiLHRoaXMucnVsZXNbbF0uZmlsdGVyPSExKSx0aGlz''@;'; put 'put ''Lmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJIQVJEU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsiU09GVFNFTEVDVF9IT09LIl0pJiYodGhpcy5y''@;'; put 'put ''dWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsiTk9UTlVMTCJdKSYmKHRoaXMucnVsZXNbbF0uYWxsb3dFbXB0eT0hMSl9InRydWUiPT09dGhpcy5ydWxl''@;'; put 'put ''c1tsXS5jb3JyZWN0Rm9ybWF0JiYodGhpcy5ydWxlc1tsXS5jb3JyZWN0Rm9ybWF0PSEwKSx0aGlzLnNldERlZmF1bHRWYWxpZGF0b3IodGhpcyxsKSx0aGlzLnNldENvbHVtbkxldmVsU2VjdXJpdHkobCl9fXRoaXMuc2FzcGFyYW1zPy5DTFNfRkxBRyYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1''@;'; put 'put ''c2goMCl9c2V0RGVmYXVsdFZhbGlkYXRvcihsLGEpe3RoaXMucnVsZXNbYV0udmFsaWRhdG9yPWZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1sLnJ1bGVzW2FdLmRhdGE/LnRvU3RyaW5nKCksXz1sLnJ1bGVzW2FdLnR5cGV8fCIiO2xldCBUPW51bGw7cmV0dXJuImF1dG9jb21wbGV0ZSIhPT10aGlz''@;'; put 'put ''LmVkaXRvcnx8KGwuZ2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKCJhdXRvY29tcGxldGUiKS5jYWxsKHRoaXMsZCxXPT57VD1XfSksVCk/KGwuZ2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKF8pLmNhbGwodGhpcyxkLFc9PntUPVd9KSxUP2wubGVuZ3RoQ2hlY2soZCxsLnJ1bGVzW2FdLmxlbmd0''@;'; put 'put ''aCxfKT9sLmlzRHFDb2woZnx8IiIpJiYhKChjLGwpPT57Zm9yKGxldCBhIG9mIGMpaWYoT29lW2EuUlVMRV9UWVBFXSYmIU9vZVthLlJVTEVfVFlQRV0obCxhLlJVTEVfVkFMVUUpKXJldHVybiBjb25zb2xlLndhcm4oYERRIEludmFsaWQgUmVhc29uOiAke2EuUlVMRV9UWVBFfVxuVmFsdWU6''@;'; put 'put ''ICR7bH0pXG5SdWxlIFZhbHVlOiAke2EuUlVMRV9WQUxVRS5sZW5ndGg+MCYmIiAiIT09YS5SVUxFX1ZBTFVFP2EuUlVMRV9WQUxVRToiTm90IGRlZmluZWQifWApLCExO3JldHVybiEwfSkobC5nZXREcURldGFpbHMoZnx8IiIpLGQpPyhjb25zb2xlLndhcm4oYERRIFZhbGlkYXRpb24gLSBp''@;'; put 'put ''bnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTp2b2lkIGgoITApOihjb25zb2xlLndhcm4oYExlbmd0aCBWYWxpZGF0aW9uIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIC0gaW52YWxpZCAo''@;'; put 'put ''VmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSkpOihjb25zb2xlLndhcm4oYEhPVCBOYXRpdmUgVmFsaWRhdGlvbiAoYXV0b2NvbXBsZXRlKSAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpfX1sZW5ndGhDaGVjayhsLGEsZCl7aWYoKDAsdDMuaXNTcGVjaWFsTWlzc2luZyko''@;'; put 'put ''bCl8fG51bGw9PWx8fG51bGw9PWEpcmV0dXJuITA7aWYoIm51bWVyaWMiPT09ZCl7aWYoOD09PWEpcmV0dXJuITA7aWYoYTwzfHxhPjh8fCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXJldHVybiBjb25zb2xlLndhcm4oImludmFsaWQgbGVuZ3RoIGZyb20gU0FTLCBydWxlIGxlbmd0aCBjYW4gb25s''@;'; put 'put ''eSBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMy04IiksITE7Y29uc3QgaD1OdW1iZXIobCk9PT1sJiZsJTEhPTA7aWYoYTw4JiZoKXJldHVybiBjb25zb2xlLndhcm4oInJlZHVjZWQgbGVuZ3RoIG51bWVyaWNzIGNhbm5vdCBjb250YWluIGRlY2ltYWxzIGVsc2UgcHJlY2lzaW9uIHdpbGwgYmUg''@;'; put 'put ''YWZmZWN0ZWQiKSwhMTtzd2l0Y2goYSl7Y2FzZSAzOnJldHVybiBsPD04MTkyO2Nhc2UgNDpyZXR1cm4gbDw9MjA5NzE1MjtjYXNlIDU6cmV0dXJuIGw8PTUzNjg3MDkxMjtjYXNlIDY6cmV0dXJuIGw8PTEzNzQzODk1MzQ3MjtjYXNlIDc6cmV0dXJuIGw8PTM1MTg0MzcyMDg4ODMyfX1yZXR1''@;'; put 'put ''cm4gbC50b1N0cmluZygpLmxlbmd0aDw9YX1nZXRIYW5kc29udGFibGVWYWxpZGF0b3IobCl7c3dpdGNoKGwpe2Nhc2UiYXV0b2NvbXBsZXRlIjpyZXR1cm4geHk7Y2FzZSJudW1lcmljIjpyZXR1cm4gVXo7Y2FzZSJkYXRlIjpyZXR1cm4gWms7Y2FzZSJ0aW1lIjpyZXR1cm4gWWs7ZGVmYXVs''@;'; put 'put ''dDpyZXR1cm4oYSxkKT0+ZD9kKCEwKTpudWxsfX1nZXRSdWxlSW5kZXgobCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsP2w6dGhpcy5ydWxlcy5maW5kSW5kZXgoYT0+YS5kYXRhPT09bCl9c2V0Q29sdW1uTGV2ZWxTZWN1cml0eShsKXtpZighdGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHKXJl''@;'; put 'put ''dHVybjtjb25zdCBhPXRoaXMucnVsZXNbbF07aWYodGhpcy5wcmltYXJ5S2V5cy5pbmNsdWRlcyhhLmRhdGEpJiYoYS5jbHNSdWxlPSJSRUFEIiksIkhJREUiPT09YS5jbHNSdWxlJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaChsKSwiUkVBRCI9PT1hLmNsc1J1bGUmJihhLnJlYWRPbmx5PSEw''@;'; put 'put ''KSwiRURJVCI9PT1hLmNsc1J1bGUpe2EucmVhZE9ubHk9ITE7Y29uc3QgZD10aGlzLmhpZGRlbkNvbHVtbnMuaW5kZXhPZihsKTt0aGlzLmhpZGRlbkNvbHVtbnMuc3BsaWNlKGQsMSl9fX1jb25zdCB6QT17bnVtZXJpYzowLGRlZmF1bHQ6IiJ9LFlOZT0oYyxsKT0+Yz8iYXV0b2NvbXBsZXRl''@;'; put 'put ''Ij09PWM/bCYmbC5zb3VyY2U/bC5zb3VyY2VbMF06W106ekEuaGFzT3duUHJvcGVydHkoYyk/ekFbY106ekEuZGVmYXVsdDp6QS5kZWZhdWx0LFBvZT1jPT57bGV0IGw9KCIwIitjLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGw9bCsoIjAiK2MuZ2V0VVRDTWludXRlcygp''@;'; put 'put ''KS5zbGljZSgtMikrIjoiLGwrPSgiMCIrYy5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKSxsfSxZej1jPT5jLmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKGMuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK2MuZ2V0RGF0ZSgpKS5zbGljZSgtMiksV3o9Yz0+bmV3IERhdGUoTWF0''@;'; put 'put ''aC5yb3VuZCg4NjQwMCooYy0yNTU2OSkqMWUzKSksJE5lPShjLGwpPT57Y29uc3QgYT1bXSxkPVtdO3JldHVybiBsLmZvckVhY2goaD0+ey0xPT09Yy5pbmRleE9mKGgpP2EucHVzaChoKTpkLnB1c2goaCl9KSxbYSxkXX0scU5lPShjLGwsYSxkLGgsZixfKT0+KGwuaW5uZXJIVE1MPWAke2Y/''@;'; put 'put ''Zi50b1N0cmluZygpOiIifSA8Y2xyLWljb24gc2hhcGU9ImV4Y2xhbWF0aW9uLWNpcmNsZSIgc3RhdHVzPSJ3YXJuaW5nIj48L2Nsci1pY29uPmAsbCksR3o9KGMsbCxhLGQsaCxmLF8pPT4obC5pbm5lckhUTUw9Znx8IiIsbCksS05lPShjLGwsYSxkLGgsZixfKT0+KGwuaW5uZXJIVE1MPWAk''@;'; put 'put ''e2Y/Zi50b1N0cmluZygpOiIifSA8c3BhbiBjbGFzcz0ic3Bpbm5lciBzcGlubmVyLXNtIHZlcnRpY2FsLWFsaWduLW1pZGRsZSI+PC9zcGFuPmAsbCksJHo9Yz0+ISEvXi17MCwxfVxkKyQvLnRlc3QoYyksRm9lPWM9PiEhL15cZCtcLlxkKyQvLnRlc3QoYykscXo9ZnVuY3Rpb24gSk5lKGMp''@;'; put 'put ''e3JldHVybiJzeW1ib2wiPT10eXBlb2YgY3x8bDgoYykmJiJbb2JqZWN0IFN5bWJvbF0iPT1pOChjKX07dmFyIFFOZT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxlVmU9L15cdyokLztmdW5jdGlvbiBLeihjLGwpe2lmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiBjfHxudWxsIT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMsaD1sP2wuYXBwbHkodGhpcyxkKTpkWzBdLGY9YS5jYWNoZTtpZihmLmhhcyhoKSlyZXR1''@;'; put 'put ''cm4gZi5nZXQoaCk7dmFyIF89Yy5hcHBseSh0aGlzLGQpO3JldHVybiBhLmNhY2hlPWYuc2V0KGgsXyl8fGYsX307cmV0dXJuIGEuY2FjaGU9bmV3KEt6LkNhY2hlfHxnUCksYX1Lei5DYWNoZT1nUDtjb25zdCBpVmU9S3o7dmFyIGxWZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/''@;'; put 'put ''KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjVmU9L1xcKFxcKT8vZyx1VmU9ZnVuY3Rpb24gc1ZlKGMpe3ZhciBsPWlWZShjLGZ1bmN0aW9uKGQpe3JldHVybiA1MDA9PT1hLnNpemUmJmEuY2xlYXIoKSxkfSksYT1s''@;'; put 'put ''LmNhY2hlO3JldHVybiBsfShmdW5jdGlvbihjKXt2YXIgbD1bXTtyZXR1cm4gNDY9PT1jLmNoYXJDb2RlQXQoMCkmJmwucHVzaCgiIiksYy5yZXBsYWNlKGxWZSxmdW5jdGlvbihhLGQsaCxmKXtsLnB1c2goaD9mLnJlcGxhY2UoY1ZlLCIkMSIpOmR8fGEpfSksbH0pO2NvbnN0IGRWZT11VmU7''@;'; put 'put ''dmFyIEhvZT1tcD9tcC5wcm90b3R5cGU6dm9pZCAwLE5vZT1Ib2U/SG9lLnRvU3RyaW5nOnZvaWQgMDtjb25zdCBnVmU9ZnVuY3Rpb24gVm9lKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihjOChjKSlyZXR1cm4gZnVuY3Rpb24gaFZlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9''@;'; put 'put ''bnVsbD09Yz8wOmMubGVuZ3RoLGg9QXJyYXkoZCk7KythPGQ7KWhbYV09bChjW2FdLGEsYyk7cmV0dXJuIGh9KGMsVm9lKSsiIjtpZihxeihjKSlyZXR1cm4gTm9lP05vZS5jYWxsKGMpOiIiO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSxiVmU9ZnVuY3Rpb24g''@;'; put 'put ''X1ZlKGMsbCl7cmV0dXJuIGM4KGMpP2M6ZnVuY3Rpb24gdFZlKGMsbCl7aWYoYzgoYykpcmV0dXJuITE7dmFyIGE9dHlwZW9mIGM7cmV0dXJuISgibnVtYmVyIiE9YSYmInN5bWJvbCIhPWEmJiJib29sZWFuIiE9YSYmbnVsbCE9YyYmIXF6KGMpKXx8ZVZlLnRlc3QoYyl8fCFRTmUudGVzdChj''@;'; put 'put ''KXx8bnVsbCE9bCYmYyBpbiBPYmplY3QobCl9KGMsbCk/W2NdOmRWZShmdW5jdGlvbiBtVmUoYyl7cmV0dXJuIG51bGw9PWM/IiI6Z1ZlKGMpfShjKSl9LENWZT1mdW5jdGlvbiB3VmUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjfHxxeihjKSlyZXR1cm4gYzt2YXIgbD1jKyIiO3JldHVybiIw''@;'; put 'put ''Ij09bCYmMS9jPT0tMS8wPyItMCI6bH0saWw9ZnVuY3Rpb24geFZlKGMsbCxhKXt2YXIgZD1udWxsPT1jP3ZvaWQgMDpmdW5jdGlvbiBTVmUoYyxsKXtmb3IodmFyIGE9MCxkPShsPWJWZShsLGMpKS5sZW5ndGg7bnVsbCE9YyYmYTxkOyljPWNbQ1ZlKGxbYSsrXSldO3JldHVybiBhJiZhPT1k''@;'; put 'put ''P2M6dm9pZCAwfShjLGwpO3JldHVybiB2b2lkIDA9PT1kP2E6ZH07bGV0IGJkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucmVzcG9uc2U9bmV3IGJlLHRoaXMu''@;'; put 'put ''Y2hhbmdlZFRhYmxlPW5ldyBiZSx0aGlzLmRldGFpbHM9bmV3IGJlLHRoaXMuZGlmZnM9bmV3IGJlLHRoaXMuY29sdW1ucz1uZXcgYmUsdGhpcy52YWx1ZXM9bmV3IGJlLHRoaXMuZmlsdGVyPW5ldyBiZSx0aGlzLnF1ZXJ5PW5ldyBiZSx0aGlzLnN1Ym1pdHREZXRhaWw9bmV3IGJlLHRoaXMu''@;'; put 'put ''cmVtb3ZlUXVlcnk9bmV3IGJlLHRoaXMuc2V0U3VibWl0PW5ldyBiZSx0aGlzLnNldFN1Ym1pdExpc3Q9bmV3IGJlfWNhbGxTZXJ2aWNlKGEsZCxoLGYpe3ZhciBfPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe18ubGliZHM9Zjtjb25zdCBUPXt9O3JldHVybiBUW2RdPVthXSx7ZGF0YTp5''@;'; put 'put ''aWVsZCBfLnNhc1NlcnZpY2UucmVxdWVzdChoLFQpLGxpYmRzOl8ubGliZHN9fSkoKX11cGRhdGVUYWJsZShhLGQsaCxmLF8pe3ZhciBUPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBXPXtqc2RhdGE6ZH07aWYoXyl7bGV0IGdlPVQucGFyc2VGb3JtYXRzKF8pO1cuJGpzZGF0YT17''@;'; put 'put ''Zm9ybWF0czpnZX19cmV0dXJuIFdbaF09W2FdLHlpZWxkIFQuc2FzU2VydmljZS5yZXF1ZXN0KGYsVyl9KSgpfWdldEFwcHJvdmFscyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e307cmV0dXJuIF9bZF09W2FdLHlpZWxkIGYuc2FzU2VydmljZS5yZXF1''@;'; put 'put ''ZXN0KGgsXyl9KSgpfXNlbmREZXRhaWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz1PYmplY3QuYXNzaWduKHtzdWI6ITB9LGEpO2Yuc3VibWl0dERldGFpbC5uZXh0KHtkYXRhOmhbZF0sdmlld0RhdGE6X30pfSkoKX1nZXRTdWJtaXR0cygpe3ZhciBh''@;'; put 'put ''PXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRzdWJtaXRzIixudWxsKX0pKCl9dmlld0xpYnMoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gYS5zYXNTZXJ2aWNlLnJlcXVlc3Qo''@;'; put 'put ''InB1YmxpYy92aWV3bGlicyIsbnVsbCl9KSgpfXJlZnJlc2hMaWJJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZnJlc2hsaWJpbmZvIix7bGliMnJlZnJlc2g6W3tsaWJyZWY6YX1dfSl9KSgpfXZl''@;'; put 'put ''cnNpb25IaXN0b3J5KGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2l3YW50Olt7TElCRFM6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXR2ZXJzaW9uaGlzdG9yeSIsaCl9KSgpfXZpZXdUYWJsZXMoYSl7dmFyIGQ9''@;'; put 'put ''dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGg9e1NBU0NvbnRyb2xUYWJsZTpbe01QTElCOmF9XX07cmV0dXJuIHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld3RhYmxlcyIsaCl9KSgpfXZpZXdEYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rp''@;'; put 'put ''b24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe0xJQkRTOmEsRklMVEVSX1JLOmR9XX07cmV0dXJuIHlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2RhdGEiLGYpfSkoKX12aWV3RGF0YVNlYXJjaChhLGQ9ITEsaCxmKXt2YXIgXz10aGlzO3JldHVybiBmaShmdW5j''@;'; put 'put ''dGlvbiooKXtsZXQgVz17U0FTQ29udHJvbFRhYmxlOlt7U0VBUkNIVFlQRTphLmxlbmd0aD4wP2Q/Ik5VTSI6IkNIQVIiOiJOT05FIixTRUFSQ0hWQUw6YSxMSUJEUzpoLEZJTFRFUl9SSzpmfV19O3JldHVybiB5aWVsZCBfLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixX''@;'; put 'put ''KX0pKCl9Z2V0WExNYXBSdWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBoPXtnZXR4bG1hcHNfaW46W3tYTE1BUF9JRDphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXR4bG1hcHMiLGgpfSkoKX1nZXREZXRhaWxz''@;'; put 'put ''KGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfKX0pKCl9c2hvd0RpZmZzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1''@;'; put 'put ''cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfLHt1c2VDb21wdXRlQXBpOiExfSl9KSgpfXJlamVjdGluZyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e307cmV0dXJuIF9bZF09W2FdLHlpZWxkIGYuc2FzU2VydmljZS5yZXF1''@;'; put 'put ''ZXN0KGgsXyx7dXNlQ29tcHV0ZUFwaTohMX0pfSkoKX1hcHByb3ZlVGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBfPXt9O3JldHVybiBfW2RdPVthXSx5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLF8pfSkoKX1nZXRIaXN0b3J5KGEsZCxoKXt2''@;'; put 'put ''YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfKX0pKCl9c2V0UXVlcnlWYXJpYWJsZXMoYSxkKXt0aGlzLmNvbHVtbnMubmV4dCh7ZGF0YTp7Y29sczpkfSxsaWJkczphfSl9Z2V0Q2hh''@;'; put 'put ''bmdlSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7VEFCTEU6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixmKX0pKCl9Z2V0UXVlcnlWYWx1ZXMoYSxkLGgs''@;'; put 'put ''ZixfKXt2YXIgVD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgVz17aXdhbnQ6W3tsaWJkczpkLGNvbDphLC4uLmYmJntTVEFSVFJPVzpmfSwuLi5fJiZ7Uk9XUzpffX1dfTtyZXR1cm4gaC5sZW5ndGg+MCYmKFcuRklMVEVSUVVFUlk9aCkseWllbGQgVC5zYXNTZXJ2aWNlLnJlcXVl''@;'; put 'put ''c3QoInB1YmxpYy9nZXRjb2x2YWxzIixXKS5jYXRjaChnZT0+e3Rocm93IGdlfSl9KSgpfXNhdmVRdWVyeShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBmPXtpd2FudDpbe2ZpbHRlcl90YWJsZTphfV0sZmlsdGVycXVlcnk6ZH0sXz15aWVsZCBoLnNhc1NlcnZp''@;'; put 'put ''Y2UucmVxdWVzdCgicHVibGljL3ZhbGlkYXRlZmlsdGVyIixmKTtyZXR1cm4gaC5maWx0ZXIubmV4dChfKSxffSkoKX1vcGVuVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGg9e2l3YW50Olt7dGFibGVfaWQ6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2''@;'; put 'put ''aWNlLnJlcXVlc3QoImF1ZGl0b3JzL2dldHN0YWdldGFibGUiLGgpfSkoKX1jaGVja09wZXJhdG9yKGEsZCxoKXtsZXQgZjtzd2l0Y2goYSl7Y2FzZSJCRVRXRUVOIjpkIGluc3RhbmNlb2YgQXJyYXkmJigiIiE9PWRbMF0mJiIiIT09ZFsxXT9mPWRbMF0rIiBBTkQgIitkWzFdOiIiIT09ZFsw''@;'; put 'put ''XSYmIiI9PT1kWzFdPyhkWzFdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKToiIj09PWRbMF0mJiIiIT09ZFsxXT8oZFswXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6KGRbMF09Ii4iLGRbMV09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0pKTticmVhaztjYXNlIklOIjpjYXNlIk5PVCBJTiI6''@;'; put 'put ''bGV0IFQ9W107aWYodHlwZW9mIGQ8InUiKWZvcihsZXQgVz0wO1c8ZC5sZW5ndGg7VysrKSEwPT09ZFtXXS5jaGVja2VkJiYoImNoYXIiPT09aD8oInN0cmluZyI9PXR5cGVvZiBkW1ddLnZhbCYmKGRbV10udmFsPWRbV10udmFsLnJlcGxhY2UoIiciLCInJyIpKSxULnB1c2goIiciK2RbV10u''@;'; put 'put ''dmFsKyInIikpOihudWxsPT09ZFtXXS52YWwmJihkW1ddLnZhbD0iLiIpLFQucHVzaChkW1ddLnZhbCkpKTtkPSIoIitUKyIpIjticmVhaztjYXNlIkNPTlRBSU5TIjphPSI/IjticmVhaztjYXNlIk5PVCBFUVVBTCI6YT0ibmUifXJldHVybiJudW0iPT09aCYmbnVsbD09PWQmJihkPSIuIiks''@;'; put 'put ''IlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09ZCYmKGQ9IiIpLC0xIT09WyI9IiwiPiIsIjwiLCI8PSIsIj49IiwibmUiXS5pbmRleE9mKGEpJiYibnVtIj09PWgmJiIiPT09ZCYmKGQ9Ii4iKSwiQkVUV0VFTiI9PT1hP3t2YWx1ZTpmLG9wZXJhdG9yOmF9Ont2YWx1ZTpkLG9wZXJhdG9yOmF9fXdo''@;'; put 'put ''ZXJlQ2xhdXNlQ3JlYXRvcihhLGQsaCl7bGV0IFcsd2UsZj0iIixpZT0iIixnZT1bXTtmb3IobGV0IFplPTA7WmU8YS5xdWVyeU9iai5sZW5ndGg7WmUrKyl7bGV0IG90PSIiLGV0PWEucXVlcnlPYmpbWmVdO2ZvcihsZXQgeXQ9MDt5dDxldC5lbGVtZW50cy5sZW5ndGg7eXQrKyl7bGV0IFN0''@;'; put 'put ''LGt0PWV0LmVsZW1lbnRzW3l0XTtXPXl0PGV0LmVsZW1lbnRzLmxlbmd0aC0xP2V0LmNsYXVzZUxvZ2ljOiIiO2ZvcihsZXQgbHI9MDtscjxrdC52YWx1ZXMubGVuZ3RoO2xyKyspe2lmKCJzdHJpbmciPT10eXBlb2Yga3QudmFsdWUmJiJudW1iZXIiPT10eXBlb2Yga3QudmFsdWVzW2xyXS5m''@;'; put 'put ''b3JtYXR0ZWQpa3QudmFsdWU9PT1KU09OLnN0cmluZ2lmeShrdC52YWx1ZXNbbHJdLmZvcm1hdHRlZCkmJihTdD1rdC52YWx1ZXNbbHJdLnVuZm9ybWF0dGVkKTtlbHNle2xldCBfaT0ibnVtYmVyIiE9dHlwZW9mIGt0LnZhbHVlc1tscl0uZm9ybWF0dGVkJiZudWxsIT09a3QudmFsdWVzW2xy''@;'; put 'put ''XS5mb3JtYXR0ZWQ/a3QudmFsdWVzW2xyXS5mb3JtYXR0ZWQudHJpbSgpOmt0LnZhbHVlc1tscl0uZm9ybWF0dGVkO2t0LnZhbHVlPT09X2kmJihTdD1rdC52YWx1ZXNbbHJdLnVuZm9ybWF0dGVkKX0iUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1rdC52YWx1ZSYmLTEhPT1bIj0iLCI+IiwiPCIs''@;'; put 'put ''Ijw9IiwiPj0iLCJuZSJdLmluZGV4T2Yoa3Qub3BlcmF0b3IpJiYoU3Q9IiIpLCgiQ09OVEFJTlMiPT09a3Qub3BlcmF0b3J8fCJMSUtFIj09PWt0Lm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09a3Qub3BlcmF0b3IpJiYoU3Q9a3QudmFsdWUpfWlmKFN0fHwoU3Q9a3QudmFsdWUpLGt0LnZh''@;'; put 'put ''bHVlIGluc3RhbmNlb2YgQXJyYXkmJiJCRVRXRUVOIj09PWt0Lm9wZXJhdG9yKXtTdD1bXSxTdC5wdXNoKGt0LnZhbHVlWzBdKSxTdC5wdXNoKGt0LnZhbHVlWzFdKTtmb3IobGV0IGxyPTA7bHI8a3QudmFsdWVzLmxlbmd0aDtscisrKVN0WzBdPT09a3QudmFsdWVzW2xyXS5mb3JtYXR0ZWQm''@;'; put 'put ''JihTdFswXT1rdC52YWx1ZXNbbHJdLnVuZm9ybWF0dGVkKSxTdFsxXT09PWt0LnZhbHVlc1tscl0uZm9ybWF0dGVkJiYoU3RbMV09a3QudmFsdWVzW2xyXS51bmZvcm1hdHRlZCl9aWYoa3QudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmKCJJTiI9PT1rdC5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1r''@;'; put 'put ''dC5vcGVyYXRvcikpe1N0PVtdLFN0PWt0LnZhbHVlO2ZvcihsZXQgbHI9MDtscjxrdC52YWx1ZXMubGVuZ3RoO2xyKyspU3RbbHJdJiZTdFtscl0udmFsPT09a3QudmFsdWVzW2xyXS5mb3JtYXR0ZWQmJihTdFtscl0udmFsPWt0LnZhbHVlc1tscl0udW5mb3JtYXR0ZWQpfWxldCBFbixRdD1r''@;'; put 'put ''dC50eXBlLG5uPW51bGw9PT1rdC52YXJpYWJsZT8iIjprdC52YXJpYWJsZSxtbj1udWxsPT09a3Qub3BlcmF0b3I/IiI6a3Qub3BlcmF0b3I7RW49dGhpcy5jaGVja09wZXJhdG9yKG1uLFN0LFF0KS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIEVuJiYiKCIhPT1FblswXSYmKEVuPUVuLnJlcGxh''@;'; put 'put ''Y2UoIiciLCInJyIpKSxtbj10aGlzLmNoZWNrT3BlcmF0b3IobW4sRW4sUXQpLm9wZXJhdG9yLCJjaGFyIj09PVF0JiYiSU4iIT09bW4mJiJOT1QgSU4iIT09bW4/KHR5cGVvZiBFbj4idSImJihFbj0iIiksRW49IiAnIitFbisiJyAiLG90PW90KyIgIitubisiICIrbW4rRW4rVyk6KCJudW0i''@;'; put 'put ''PT09UXQmJnR5cGVvZiBFbj4idSImJihFbj0iLiIpLEVuPXR5cGVvZiBFbj4idSI/IiI6IiAiK0VuKyIgIixvdD1vdCsiICIrbm4rIiAiK21uK0VuK1cpfWdlLnB1c2gob3QpfWllPSIiO2ZvcihsZXQgWmU9MDtaZTxnZS5sZW5ndGg7WmUrKyl3ZT1aZTxnZS5sZW5ndGgtMT9kOiIiLGllPTE9''@;'; put 'put ''PT1nZS5sZW5ndGg/Z2VbMF06aWUrIiAoIitnZVtaZV0rIikgIit3ZTtyZXR1cm4gZj1pZS5zdWJzdHIoMSkuc2xpY2UoMCwtMSksaWU9IldIRVJFIitpZSsiOyIsdGhpcy5xdWVyeS5uZXh0KHt3aGVyZUNsYXVzZTppZSxzdHJpbmc6ZixvYmo6YSxsaWJkczpofSkse3doZXJlQ2xhdXNlOmll''@;'; put 'put ''LHN0cmluZzpmfX1jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGEpe2NvbnN0IGQ9W107cmV0dXJuIGEuZmlsdGVyR3JvdXBzLmZvckVhY2goKGgsZik9PntoLmZpbHRlckNsYXVzZXMuZm9yRWFjaChfPT57bGV0IFQ9IiI7IkJFVFdFRU4iPT09Xy5vcGVyYXRvcj9UPWAke18udmFsdWVbMF19IEFO''@;'; put 'put ''RCAke18udmFsdWVbMV19YDoiSU4iPT09Xy5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1fLm9wZXJhdG9yPyhfLnZhbHVlLmZvckVhY2goVz0+e2lmKFcuY2hlY2tlZCl7Y29uc3QgaWU9Vy52YWw7InN0cmluZyIhPXR5cGVvZiBpZXx8KDAsdDMuaXNTcGVjaWFsTWlzc2luZykoaWUpJiYiY2hhciIh''@;'; put 'put ''PT1fLnR5cGU/VC5sZW5ndGg+MD9UKz1gLCR7aWV9YDpUPWAoJHtpZX1gOlQubGVuZ3RoPjA/VCs9YCwnJHtpZS5yZXBsYWNlKC8nL2csIicnIil9J2A6VD1gKCcke2llLnJlcGxhY2UoLycvZywiJyciKX0nYH19KSxULmxlbmd0aD4wJiYoVCs9IikiKSk6IiI9PT1fLnZhbHVlP1Q9ImNoYXIi''@;'; put 'put ''PT09Xy50eXBlPyInICciOiIuIjoiY2hhciI9PT1fLnR5cGUmJihUPWAnJHtfLnZhbHVlLnJlcGxhY2UoLycvZywiJyciKX0nYCksZC5wdXNoKHtHUk9VUF9MT0dJQzphLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6aC5jbGF1c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6ZixWQVJJQUJM''@;'; put 'put ''RV9OTTpfLnZhcmlhYmxlLE9QRVJBVE9SX05NOl8ub3BlcmF0b3IsUkFXX1ZBTFVFOlR8fF8udmFsdWV9KX0pfSksZH1pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKGEsZCl7Y29uc3QgaD17cXVlcnlPYmo6W10sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzppbChHbixhKS5maWx0ZXIu''@;'; put 'put ''cXVlcnlbMF0uR1JPVVBfTE9HSUN9O2lsKEduLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaCksaWwoR24sYSkuZmlsdGVyLmdyb3VwTG9naWM9aWwoR24sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDO2xldCBmPSIiLF89e2VsZW1lbnRzOltd''@;'; put 'put ''fSxUPTA7aWwoR24sYSkuZmlsdGVyLnF1ZXJ5LmZvckVhY2goVz0+e2NvbnN0IGllPXt9O2ZvcihsZXQgZ2U9MDtnZTxkLmxlbmd0aDtnZSsrKWlmKGRbZ2VdLk5BTUU9PT1XLlZBUklBQkxFX05NKXtpZihmPVcuU1VCR1JPVVBfTE9HSUMsaWUuZGR0eXBlPWRbZ2VdLkREVFlQRSxpZS50eXBl''@;'; put 'put ''PWRbZ2VdLlRZUEUsaWUub3BlcmF0b3JzPSJudW0iPT09ZFtnZV0uVFlQRT9Hbi5vcGVyYXRvcnMubnVtT3BlcmF0b3JzOkduLm9wZXJhdG9ycy5jaGFyT3BlcmF0b3JzLGllLmxvZ2ljPW51bGwsaWUub3BlcmF0b3I9Vy5PUEVSQVRPUl9OTSxpZS52YXJpYWJsZT1XLlZBUklBQkxFX05NLCJj''@;'; put 'put ''aGFyIj09PWRbZ2VdLlRZUEUpaWYoIklOIj09PVcuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09Vy5PUEVSQVRPUl9OTSl7Y29uc3Qgd2U9W10sWmU9Vy5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIicsJyIpOzE9PT1aZS5sZW5ndGg/d2UucHVzaCh7Y2hlY2tlZDohMCx2YWw6WmVbMF0u''@;'; put 'put ''c2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpfSk6WmUuZm9yRWFjaCgob3QsZXQpPT57d2UucHVzaCgwPT09ZXQ/e2NoZWNrZWQ6ITAsdmFsOm90LnNsaWNlKDEpLnJlcGxhY2UoLycnL2csIiciKX06ZXQ9PT1aZS5sZW5ndGgtMT97Y2hlY2tlZDohMCx2YWw6b3Quc2xpY2UoMCwtMSku''@;'; put 'put ''cmVwbGFjZSgvJycvZywiJyIpfTp7Y2hlY2tlZDohMCx2YWw6b3QucmVwbGFjZSgvJycvZywiJyIpfSl9KSxpZS52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHdlKX1lbHNlIGllLnZhbHVlPVcuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKTtlbHNl''@;'; put 'put ''IGlmKCJJTiI9PT1XLk9QRVJBVE9SX05NfHwiTk9UIElOIj09PVcuT1BFUkFUT1JfTk0pe2NvbnN0IHdlPVtdO1cuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCIsIikuZm9yRWFjaCgob3QsZXQpPT57d2UucHVzaCh7Y2hlY2tlZDohMCx2YWw6b3R9KX0pLGllLnZhbHVlPXRoaXMuaGVs''@;'; put 'put ''cGVyU2VydmljZS5kZWVwQ2xvbmUod2UpfWVsc2UgaWYoIkJFVFdFRU4iPT09Vy5PUEVSQVRPUl9OTSl7Y29uc3Qgd2U9Vy5SQVdfVkFMVUUuc3BsaXQoIiBBTkQgIik7aWUudmFsdWU9d2V9ZWxzZSBpZS52YWx1ZT1XLlJBV19WQUxVRTtpZS52YWx1ZXM9W10sVD09PVcuU1VCR1JPVVBfSUR8''@;'; put 'put ''fChpbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoXykpLGlsKEduLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW1RdLmNsYXVzZUxvZ2ljPWYsaWwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbVF0uaW52YWxp''@;'; put 'put ''ZENsYXVzZT0hMSxUKyssXy5lbGVtZW50cz1bXSksXy5lbGVtZW50cy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaWUpKTticmVha319KSxfLmVsZW1lbnRzLmxlbmd0aD4wJiYoaWwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZp''@;'; put 'put ''Y2UuZGVlcENsb25lKF8pKSxpbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtUXS5jbGF1c2VMb2dpYz1mLGlsKEduLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW1RdLmludmFsaWRDbGF1c2U9ITEpLGlsKEduLGEpLmZpbHRlci5xdWVyeT1bXX1yZW1vdmVDbGF1c2UoKXt2YXIg''@;'; put 'put ''YT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gYS5yZW1vdmVRdWVyeS5uZXh0KCEwKSwhMH0pKCl9c3BlY0NvbnZlcnNpb24oYSl7bGV0IGQ9e30saD1bXTtpZihoPWEubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmLk5BTUUudG9VcHBlckNhc2UoKX0pLGEgaW5zdGFuY2VvZiBB''@;'; put 'put ''cnJheSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylkW2hbZl1dPTE9PT1hW2ZdLlRZUEU/e2NvbFR5cGU6Im51bSIsY29sTGVuZ3RoOmFbZl0uTEVOR1RIfTp7Y29sVHlwZToic3RyaW5nIixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9O3JldHVybiBkfXNldFN1Ym1pdFJlYWR5KCl7dGhpcy5z''@;'; put 'put ''ZXRTdWJtaXQubmV4dCghMCl9cGFyc2VGb3JtYXRzKGEpe2NvbnN0IGQ9e30saD1hLnZhcnM7Zm9yKGxldCBmIG9mIE9iamVjdC5rZXlzKGgpKXtjb25zdCBfPWhbZl0udHlwZSxUPWhbZl0ubGVuZ3RoOyJudW0iPT09Xz9kW2ZdPSJiZXN0LiI6ImNoYXIiPT09XyYmKGRbZl09YCRjaGFyJHtU''@;'; put 'put ''fS5gKX1yZXR1cm4gZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIob2EpLGFyKEFjKSxhcih3MCkpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2Z1bmN0aW9uIGE0KGMpe3JldHVybiBudWxs''@;'; put 'put ''IT1jJiYiZmFsc2UiIT1gJHtjfWB9ZnVuY3Rpb24gQm9lKGMsbD0wKXtyZXR1cm4gZnVuY3Rpb24gRVZlKGMpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGMpKSYmIWlzTmFOKE51bWJlcihjKSl9KGMpP051bWJlcihjKTpsfWZ1bmN0aW9uIFAwKGMpe3JldHVybiBjIGluc3RhbmNlb2YgTmk/''@;'; put 'put ''Yy5uYXRpdmVFbGVtZW50OmN9Y29uc3QgdHc9e3NjaGVkdWxlKGMpe2xldCBsPXJlcXVlc3RBbmltYXRpb25GcmFtZSxhPWNhbmNlbEFuaW1hdGlvbkZyYW1lO2NvbnN0e2RlbGVnYXRlOmR9PXR3O2QmJihsPWQucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9ZC5jYW5jZWxBbmltYXRpb25GcmFt''@;'; put 'put ''ZSk7Y29uc3QgaD1sKGY9PnthPXZvaWQgMCxjKGYpfSk7cmV0dXJuIG5ldyBlZSgoKT0+YT8uKGgpKX0scmVxdWVzdEFuaW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PXR3O3JldHVybihsPy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHJlcXVlc3RBbmltYXRpb25GcmFtZSko''@;'; put 'put ''Li4uYyl9LGNhbmNlbEFuaW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PXR3O3JldHVybihsPy5jYW5jZWxBbmltYXRpb25GcmFtZXx8Y2FuY2VsQW5pbWF0aW9uRnJhbWUpKC4uLmMpfSxkZWxlZ2F0ZTp2b2lkIDB9LGpvZT1uZXcgY2xhc3MgVFZlIGV4dGVuZHMgQlB7Zmx1''@;'; put 'put ''c2gobCl7dGhpcy5fYWN0aXZlPSEwO2NvbnN0IGE9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7Y29uc3R7YWN0aW9uczpkfT10aGlzO2xldCBoO2w9bHx8ZC5zaGlmdCgpO2Rve2lmKGg9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUoKGw9ZFsw''@;'; put 'put ''XSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxoKXtmb3IoOyhsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgaH19fShjbGFzcyBBVmUgZXh0ZW5kcyBOUHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5z''@;'; put 'put ''Y2hlZHVsZXI9bCx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gbnVsbCE9PWQmJmQ+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZChsLGEsZCk6KGwuYWN0aW9ucy5wdXNoKHRoaXMpLGwuX3NjaGVkdWxlZHx8KGwuX3NjaGVkdWxlZD10dy5yZXF1ZXN0QW5pbWF0aW9u''@;'; put 'put ''RnJhbWUoKCk9PmwuZmx1c2godm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXt2YXIgaDtpZihudWxsIT1kP2Q+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGwsYSxkKTtjb25zdHthY3Rpb25zOmZ9PWw7bnVsbCE9YSYmKG51bGw9PT0oaD1mW2Yu''@;'; put 'put ''bGVuZ3RoLTFdKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pZCkhPT1hJiYodHcuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYSksbC5fc2NoZWR1bGVkPXZvaWQgMCl9fSk7bGV0IFh6LERWZT0xO2NvbnN0IFVBPXt9O2Z1bmN0aW9uIHpvZShjKXtyZXR1cm4gYyBpbiBVQSYmKGRlbGV0ZSBVQVtjXSwh''@;'; put 'put ''MCl9Y29uc3QgSVZlPXtzZXRJbW1lZGlhdGUoYyl7Y29uc3QgbD1EVmUrKztyZXR1cm4gVUFbbF09ITAsWHp8fChYej1Qcm9taXNlLnJlc29sdmUoKSksWHoudGhlbigoKT0+em9lKGwpJiZjKCkpLGx9LGNsZWFySW1tZWRpYXRlKGMpe3pvZShjKX19LHtzZXRJbW1lZGlhdGU6TFZlLGNsZWFy''@;'; put 'put ''SW1tZWRpYXRlOlJWZX09SVZlLFpBPXtzZXRJbW1lZGlhdGUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09WkE7cmV0dXJuKGw/LnNldEltbWVkaWF0ZXx8TFZlKSguLi5jKX0sY2xlYXJJbW1lZGlhdGUoYyl7Y29uc3R7ZGVsZWdhdGU6bH09WkE7cmV0dXJuKGw/LmNsZWFySW1tZWRpYXRlfHxS''@;'; put 'put ''VmUpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9O25ldyBjbGFzcyBQVmUgZXh0ZW5kcyBCUHtmbHVzaChsKXt0aGlzLl9hY3RpdmU9ITA7Y29uc3QgYT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxkLnNoaWZ0KCk7''@;'; put 'put ''ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBofX19KGNs''@;'; put 'put ''YXNzIE9WZSBleHRlbmRzIE5Qe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxsIT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rpb25zLnB1c2go''@;'; put 'put ''dGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPVpBLnNldEltbWVkaWF0ZShsLmZsdXNoLmJpbmQobCx2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBoO2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQobCxh''@;'; put 'put ''LGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiYobnVsbD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEmJihaQS5jbGVhckltbWVkaWF0ZShhKSxsLl9zY2hlZHVsZWQ9PT1hJiYobC5fc2NoZWR1bGVkPXZvaWQgMCkpfX0pO2Z1bmN0aW9uIFVv''@;'; put 'put ''ZShjLGw9cmIpe3JldHVybiBmdW5jdGlvbiBIVmUoYyl7cmV0dXJuIFhlKChsLGEpPT57bGV0IGQ9ITEsaD1udWxsLGY9bnVsbCxfPSExO2NvbnN0IFQ9KCk9PntpZihmPy51bnN1YnNjcmliZSgpLGY9bnVsbCxkKXtkPSExO2NvbnN0IGllPWg7aD1udWxsLGEubmV4dChpZSl9XyYmYS5jb21w''@;'; put 'put ''bGV0ZSgpfSxXPSgpPT57Zj1udWxsLF8mJmEuY29tcGxldGUoKX07bC5zdWJzY3JpYmUoVWUoYSxpZT0+e2Q9ITAsaD1pZSxmfHxLcihjKGllKSkuc3Vic2NyaWJlKGY9VWUoYSxULFcpKX0sKCk9PntfPSEwLCghZHx8IWZ8fGYuY2xvc2VkKSYmYS5jb21wbGV0ZSgpfSkpfSl9KCgpPT5qUChj''@;'; put 'put ''LGwpKX1sZXQgSno7dHJ5e0p6PXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2h7Sno9ITF9bGV0IG53LFF6LFpvZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3BsYXRmb3JtSWQ9YSx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP1Jz''@;'; put 'put ''KHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9p''@;'; put 'put ''LnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIUp6KSYmdHlwZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRl''@;'; put 'put ''c3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJ''@;'; put 'put ''UkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10''@;'; put 'put ''aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihHcykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Yyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2Z1bmN0aW9uIHJ3KGMpe3JldHVybiBmdW5jdGlvbiBOVmUoKXtpZihudWxsPT1udyYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFz''@;'; put 'put ''c2l2ZSIse2dldDooKT0+bnc9ITB9KSl9ZmluYWxseXtudz1ud3x8ITF9cmV0dXJuIG53fSgpP2M6ISFjLmNhcHR1cmV9ZnVuY3Rpb24gV29lKGMpe2lmKGZ1bmN0aW9uIFZWZSgpe2lmKG51bGw9PVF6KXtjb25zdCBjPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO1F6''@;'; put 'put ''PSEoIWN8fCFjLmNyZWF0ZVNoYWRvd1Jvb3QmJiFjLmF0dGFjaFNoYWRvdyl9cmV0dXJuIFF6fSgpKXtjb25zdCBsPWMuZ2V0Um9vdE5vZGU/Yy5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFkb3dSb290JiZsIGluc3RhbmNlb2YgU2hhZG93Um9vdCly''@;'; put 'put ''ZXR1cm4gbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBXQShjKXtyZXR1cm4gYy5jb21wb3NlZFBhdGg/Yy5jb21wb3NlZFBhdGgoKVswXTpjLnRhcmdldH1sZXQgalZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nWm9uZT1hLHRoaXMuX3BsYXRmb3JtPWQsdGhpcy5f''@;'; put 'put ''c2Nyb2xsZWQ9bmV3IGJlLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX3Njcm9sbGVkQ291bnQ9MCx0aGlzLnNjcm9sbENvbnRhaW5lcnM9bmV3IE1hcCx0aGlzLl9kb2N1bWVudD1ofXJlZ2lzdGVyKGEpe3RoaXMuc2Nyb2xsQ29udGFpbmVycy5oYXMoYSl8fHRoaXMuc2Ny''@;'; put 'put ''b2xsQ29udGFpbmVycy5zZXQoYSxhLmVsZW1lbnRTY3JvbGxlZCgpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dChhKSkpfWRlcmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KGEpO2QmJihkLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250''@;'; put 'put ''YWluZXJzLmRlbGV0ZShhKSl9c2Nyb2xsZWQoYT0yMCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgS2UoZD0+e3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbnx8dGhpcy5fYWRkR2xvYmFsTGlzdGVuZXIoKTtjb25zdCBoPWE+MD90aGlzLl9zY3JvbGxlZC5waXBlKFVvZShh''@;'; put 'put ''KSkuc3Vic2NyaWJlKGQpOnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShkKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57aC51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigp''@;'; put 'put ''fX0pOldpKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChhLGQpPT50aGlzLmRlcmVnaXN0ZXIoZCkpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZChhLGQpe2NvbnN0IGg9''@;'; put 'put ''dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoYSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoZCkucGlwZShJYShmPT4hZnx8aC5pbmRleE9mKGYpPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpe2NvbnN0IGQ9W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5m''@;'; put 'put ''b3JFYWNoKChoLGYpPT57dGhpcy5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChmLGEpJiZkLnB1c2goZil9KSxkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChhLGQpe2xldCBoPVAwKGQp''@;'; put 'put ''LGY9YS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtkb3tpZihoPT1mKXJldHVybiEwfXdoaWxlKGg9aC5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX1fYWRkR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFy''@;'; put 'put ''KCgpPT5uMih0aGlzLl9nZXRXaW5kb3coKS5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KCkpKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJz''@;'; put 'put ''Y3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihab2UpLGFyKExzLDgpKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlk''@;'; put 'put ''ZWRJbjoicm9vdCJ9KSxjfSkoKSxVVmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fcGxhdGZvcm09YSx0aGlzLl9jaGFuZ2U9bmV3IGJlLHRoaXMuX2NoYW5nZUxpc3RlbmVyPWY9Pnt0aGlzLl9jaGFuZ2UubmV4dChmKX0sdGhpcy5fZG9jdW1lbnQ9aCxkLnJ1bk91''@;'; put 'put ''dHNpZGVBbmd1bGFyKCgpPT57aWYoYS5pc0Jyb3dzZXIpe2NvbnN0IGY9dGhpcy5fZ2V0V2luZG93KCk7Zi5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxmLmFkZEV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0''@;'; put 'put ''ZW5lcil9dGhpcy5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKX0pfW5nT25EZXN0cm95KCl7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXtjb25zdCBhPXRoaXMuX2dldFdpbmRvdygpO2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlz''@;'; put 'put ''Ll9jaGFuZ2VMaXN0ZW5lciksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuX2NoYW5nZS5jb21wbGV0ZSgpfWdldFZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRT''@;'; put 'put ''aXplKCk7Y29uc3QgYT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGF9Z2V0Vmlld3BvcnRSZWN0KCl7Y29uc3Qg''@;'; put 'put ''YT10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx7d2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm57dG9wOmEudG9wLGxlZnQ6YS5sZWZ0LGJvdHRvbTphLnRvcCtoLHJpZ2h0OmEubGVmdCtkLGhlaWdodDpoLHdpZHRoOmR9fWdldFZpZXdwb3J0''@;'; put 'put ''U2Nyb2xsUG9zaXRpb24oKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybnt0b3A6MCxsZWZ0OjB9O2NvbnN0IGE9dGhpcy5fZG9jdW1lbnQsZD10aGlzLl9nZXRXaW5kb3coKSxoPWEuZG9jdW1lbnRFbGVtZW50LGY9aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57''@;'; put 'put ''dG9wOi1mLnRvcHx8YS5ib2R5LnNjcm9sbFRvcHx8ZC5zY3JvbGxZfHxoLnNjcm9sbFRvcHx8MCxsZWZ0Oi1mLmxlZnR8fGEuYm9keS5zY3JvbGxMZWZ0fHxkLnNjcm9sbFh8fGguc2Nyb2xsTGVmdHx8MH19Y2hhbmdlKGE9MjApe3JldHVybiBhPjA/dGhpcy5fY2hhbmdlLnBpcGUoVW9lKGEp''@;'; put 'put ''KTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91cGRhdGVWaWV3cG9ydFNpemUoKXtjb25zdCBhPXRoaXMuX2dldFdpbmRvdygpO3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dp''@;'; put 'put ''ZHRoOmEuaW5uZXJXaWR0aCxoZWlnaHQ6YS5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihab2UpLGFyKE5vKSxhcihMcyw4KSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5''@;'; put 'put ''OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksWlZlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2NvbnN0IGFC''@;'; put 'put ''ZT1uZXcgTWkoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBsQmUoKXtyZXR1cm4gRmkoTHMpfX0pLGNCZT0vXihhcnxja2J8ZHZ8aGV8aXd8ZmF8bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkp''@;'; put 'put ''KD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgkfC18XykvaTtsZXQgS29lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgRXIsYSYmKHRoaXMudmFsdWU9ZnVuY3Rpb24gdUJlKGMpe2NvbnN0IGw9Yz8udG9Mb3dlckNhc2Uo''@;'; put 'put ''KXx8IiI7cmV0dXJuImF1dG8iPT09bCYmdHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8ubGFuZ3VhZ2U/Y0JlLnRlc3QobmF2aWdhdG9yLmxhbmd1YWdlKT8icnRsIjoibHRyIjoicnRsIj09PWw/InJ0bCI6Imx0ciJ9KChhLmJvZHk/YS5ib2R5LmRpcjpudWxsKXx8KGEuZG9jdW1l''@;'; put 'put ''bnRFbGVtZW50P2EuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsKXx8Imx0ciIpKX1uZ09uRGVzdHJveSgpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFCZSw4KSl9LGMuXHUwMjc1cHJvdj1kcih7dG9r''@;'; put 'put ''ZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gZVUoYyxsLGEpe2ZvcihsZXQgZCBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkoZCkpe2NvbnN0IGg9bFtkXTtoP2Muc2V0UHJvcGVydHkoZCxoLGE/LmhhcyhkKT8iaW1wb3J0YW50Ijoi''@;'; put 'put ''Iik6Yy5yZW1vdmVQcm9wZXJ0eShkKX1yZXR1cm4gY31mdW5jdGlvbiB6NyhjLGwpe2NvbnN0IGE9bD8iIjoibm9uZSI7ZVUoYy5zdHlsZSx7InRvdWNoLWFjdGlvbiI6bD8iIjoibm9uZSIsIi13ZWJraXQtdXNlci1kcmFnIjpsPyIiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNv''@;'; put 'put ''bG9yIjpsPyIiOiJ0cmFuc3BhcmVudCIsInVzZXItc2VsZWN0IjphLCItbXMtdXNlci1zZWxlY3QiOmEsIi13ZWJraXQtdXNlci1zZWxlY3QiOmEsIi1tb3otdXNlci1zZWxlY3QiOmF9KX1mdW5jdGlvbiBYb2UoYyxsLGEpe2VVKGMuc3R5bGUse3Bvc2l0aW9uOmw/IiI6ImZpeGVkIix0b3A6''@;'; put 'put ''bD8iIjoiMCIsb3BhY2l0eTpsPyIiOiIwIixsZWZ0Omw/IiI6Ii05OTllbSJ9LGEpfWZ1bmN0aW9uIEdBKGMsbCl7cmV0dXJuIGwmJiJub25lIiE9bD9jKyIgIitsOmN9ZnVuY3Rpb24gSm9lKGMpe2NvbnN0IGw9Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zIik+LTE/MToxZTM7cmV0dXJu''@;'; put 'put ''IHBhcnNlRmxvYXQoYykqbH1mdW5jdGlvbiB0VShjLGwpe3JldHVybiBjLmdldFByb3BlcnR5VmFsdWUobCkuc3BsaXQoIiwiKS5tYXAoZD0+ZC50cmltKCkpfWZ1bmN0aW9uIG5VKGMpe2NvbnN0IGw9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmwudG9wLHJpZ2h0Omwu''@;'; put 'put ''cmlnaHQsYm90dG9tOmwuYm90dG9tLGxlZnQ6bC5sZWZ0LHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LHg6bC54LHk6bC55fX1mdW5jdGlvbiByVShjLGwsYSl7Y29uc3R7dG9wOmQsYm90dG9tOmgsbGVmdDpmLHJpZ2h0Ol99PWM7cmV0dXJuIGE+PWQmJmE8PWgmJmw+PWYmJmw8PV99''@;'; put 'put ''ZnVuY3Rpb24gaXcoYyxsLGEpe2MudG9wKz1sLGMuYm90dG9tPWMudG9wK2MuaGVpZ2h0LGMubGVmdCs9YSxjLnJpZ2h0PWMubGVmdCtjLndpZHRofWZ1bmN0aW9uIFFvZShjLGwsYSxkKXtjb25zdHt0b3A6aCxyaWdodDpmLGJvdHRvbTpfLGxlZnQ6VCx3aWR0aDpXLGhlaWdodDppZX09Yyxn''@;'; put 'put ''ZT1XKmwsd2U9aWUqbDtyZXR1cm4gZD5oLXdlJiZkPF8rd2UmJmE+VC1nZSYmYTxmK2dlfWNsYXNzIGVzZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMucG9zaXRpb25zPW5ldyBNYXB9Y2xlYXIoKXt0aGlzLnBvc2l0aW9ucy5jbGVhcigpfWNhY2hlKGwpe3RoaXMuY2xl''@;'; put 'put ''YXIoKSx0aGlzLnBvc2l0aW9ucy5zZXQodGhpcy5fZG9jdW1lbnQse3Njcm9sbFBvc2l0aW9uOnRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfSksbC5mb3JFYWNoKGE9Pnt0aGlzLnBvc2l0aW9ucy5zZXQoYSx7c2Nyb2xsUG9zaXRpb246e3RvcDphLnNjcm9sbFRvcCxsZWZ0OmEu''@;'; put 'put ''c2Nyb2xsTGVmdH0sY2xpZW50UmVjdDpuVShhKX0pfSl9aGFuZGxlU2Nyb2xsKGwpe2NvbnN0IGE9V0EobCksZD10aGlzLnBvc2l0aW9ucy5nZXQoYSk7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kLnNjcm9sbFBvc2l0aW9uO2xldCBmLF87aWYoYT09PXRoaXMuX2RvY3VtZW50KXtjb25z''@;'; put 'put ''dCBpZT10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtmPWllLnRvcCxfPWllLmxlZnR9ZWxzZSBmPWEuc2Nyb2xsVG9wLF89YS5zY3JvbGxMZWZ0O2NvbnN0IFQ9aC50b3AtZixXPWgubGVmdC1fO3JldHVybiB0aGlzLnBvc2l0aW9ucy5mb3JFYWNoKChpZSxnZSk9PntpZS5jbGll''@;'; put 'put ''bnRSZWN0JiZhIT09Z2UmJmEuY29udGFpbnMoZ2UpJiZpdyhpZS5jbGllbnRSZWN0LFQsVyl9KSxoLnRvcD1mLGgubGVmdD1fLHt0b3A6VCxsZWZ0Old9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm57dG9wOndpbmRvdy5zY3JvbGxZLGxlZnQ6d2luZG93LnNjcm9sbFh9fX1m''@;'; put 'put ''dW5jdGlvbiB0c2UoYyl7Y29uc3QgbD1jLmNsb25lTm9kZSghMCksYT1sLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0iKSxkPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtsLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKylhW2hdLnJlbW92ZUF0dHJpYnV0''@;'; put 'put ''ZSgiaWQiKTtyZXR1cm4iY2FudmFzIj09PWQ/aXNlKGMsbCk6KCJpbnB1dCI9PT1kfHwic2VsZWN0Ij09PWR8fCJ0ZXh0YXJlYSI9PT1kKSYmcnNlKGMsbCksbnNlKCJjYW52YXMiLGMsbCxpc2UpLG5zZSgiaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QiLGMsbCxyc2UpLGx9ZnVuY3Rpb24gbnNl''@;'; put 'put ''KGMsbCxhLGQpe2NvbnN0IGg9bC5xdWVyeVNlbGVjdG9yQWxsKGMpO2lmKGgubGVuZ3RoKXtjb25zdCBmPWEucXVlcnlTZWxlY3RvckFsbChjKTtmb3IobGV0IF89MDtfPGgubGVuZ3RoO18rKylkKGhbX10sZltfXSl9fWxldCBoQmU9MDtmdW5jdGlvbiByc2UoYyxsKXsiZmlsZSIhPT1sLnR5''@;'; put 'put ''cGUmJihsLnZhbHVlPWMudmFsdWUpLCJyYWRpbyI9PT1sLnR5cGUmJmwubmFtZSYmKGwubmFtZT1gbWF0LWNsb25lLSR7bC5uYW1lfS0ke2hCZSsrfWApfWZ1bmN0aW9uIGlzZShjLGwpe2NvbnN0IGE9bC5nZXRDb250ZXh0KCIyZCIpO2lmKGEpdHJ5e2EuZHJhd0ltYWdlKGMsMCwwKX1jYXRj''@;'; put 'put ''aHt9fWNvbnN0IG9zZT1ydyh7cGFzc2l2ZTohMH0pLCRBPXJ3KHtwYXNzaXZlOiExfSksaVU9bmV3IFNldChbInBvc2l0aW9uIl0pO2NsYXNzIHBCZXtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEoIXRoaXMuX2Ryb3BDb250YWluZXJ8fCF0aGlzLl9kcm9wQ29udGFp''@;'; put 'put ''bmVyLmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7Y29uc3QgYT1hNChsKTthIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzLmZvckVhY2goZD0+ejcoZCxhKSkpfWNvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSxkLGgsZixfKXt0aGlzLl9jb25maWc9YSx0aGlzLl9kb2N1bWVudD1kLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdwb3J0UnVsZXI9Zix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PV8sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4''@;'; put 'put ''OjAseTowfSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9ITEsdGhpcy5fbW92ZUV2ZW50cz1uZXcgYmUsdGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb249ZWUuRU1QVFksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uPWVlLkVNUFRZLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1lZS5F''@;'; put 'put ''TVBUWSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249ZWUuRU1QVFksdGhpcy5fYm91bmRhcnlFbGVtZW50PW51bGwsdGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD0hMCx0aGlzLl9oYW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxlcz1uZXcgU2V0LHRoaXMuX2RpcmVjdGlvbj0i''@;'; put 'put ''bHRyIix0aGlzLmRyYWdTdGFydERlbGF5PTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBiZSx0aGlzLnN0YXJ0ZWQ9bmV3IGJlLHRoaXMucmVsZWFzZWQ9bmV3IGJlLHRoaXMuZW5kZWQ9bmV3IGJlLHRoaXMuZW50ZXJlZD1uZXcgYmUsdGhpcy5leGl0ZWQ9bmV3''@;'; put 'put ''IGJlLHRoaXMuZHJvcHBlZD1uZXcgYmUsdGhpcy5tb3ZlZD10aGlzLl9tb3ZlRXZlbnRzLHRoaXMuX3BvaW50ZXJEb3duPVQ9PntpZih0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBXPXRoaXMuX2dldFRhcmdldEhhbmRsZShUKTtXJiYhdGhp''@;'; put 'put ''cy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhXKSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UoVyxUKX1lbHNlIHRoaXMuZGlzYWJsZWR8fHRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UodGhpcy5fcm9vdEVsZW1lbnQsVCl9LHRoaXMuX3BvaW50ZXJNb3Zl''@;'; put 'put ''PVQ9Pntjb25zdCBXPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShUKTtpZighdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKXtpZihNYXRoLmFicyhXLngtdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCkrTWF0aC5hYnMoVy55LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkp''@;'; put 'put ''Pj10aGlzLl9jb25maWcuZHJhZ1N0YXJ0VGhyZXNob2xkKXtjb25zdCBaZT1EYXRlLm5vdygpPj10aGlzLl9kcmFnU3RhcnRUaW1lK3RoaXMuX2dldERyYWdTdGFydERlbGF5KFQpLG90PXRoaXMuX2Ryb3BDb250YWluZXI7aWYoIVplKXJldHVybiB2b2lkIHRoaXMuX2VuZERyYWdTZXF1ZW5j''@;'; put 'put ''ZShUKTsoIW90fHwhb3QuaXNEcmFnZ2luZygpJiYhb3QuaXNSZWNlaXZpbmcoKSkmJihULnByZXZlbnREZWZhdWx0KCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSEwLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX3N0YXJ0RHJhZ1NlcXVlbmNlKFQpKSl9cmV0dXJufVQucHJldmVudERl''@;'; put 'put ''ZmF1bHQoKTtjb25zdCBpZT10aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihXKTtpZih0aGlzLl9oYXNNb3ZlZD0hMCx0aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249Vyx0aGlzLl91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEoaWUpLHRoaXMuX2Ryb3BDb250YWlu''@;'; put 'put ''ZXIpdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcihpZSxXKTtlbHNle2NvbnN0IGdlPXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5faW5pdGlhbENsaWVudFJlY3Q6dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2Usd2U9dGhpcy5fYWN0aXZlVHJhbnNmb3JtO3dlLng9aWUueC1n''@;'; put 'put ''ZS54K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueCx3ZS55PWllLnktZ2UueSt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnksdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybSh3ZS54LHdlLnkpfXRoaXMuX21vdmVFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fbmdab25lLnJ1bigo''@;'; put 'put ''KT0+e3RoaXMuX21vdmVFdmVudHMubmV4dCh7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOmllLGV2ZW50OlQsZGlzdGFuY2U6dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGllKSxkZWx0YTp0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGF9KX0pfSx0aGlzLl9wb2ludGVyVXA9VD0+e3RoaXMu''@;'; put 'put ''X2VuZERyYWdTZXF1ZW5jZShUKX0sdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0PVQ9PntpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgVz10aGlzLl9nZXRUYXJnZXRIYW5kbGUoVCk7VyYmIXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoVykmJiF0aGlzLmRpc2FibGVkJiZULnByZXZlbnRE''@;'; put 'put ''ZWZhdWx0KCl9ZWxzZSB0aGlzLmRpc2FibGVkfHxULnByZXZlbnREZWZhdWx0KCl9LHRoaXMud2l0aFJvb3RFbGVtZW50KGwpLndpdGhQYXJlbnQoYS5wYXJlbnREcmFnUmVmfHxudWxsKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IGVzZShkKSxfLnJlZ2lzdGVyRHJhZ0l0ZW0odGhpcyl9''@;'; put 'put ''Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3Jvb3RFbGVtZW50fWdldFZpc2libGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaXNEcmFnZ2luZygpP3RoaXMuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6''@;'; put 'put ''dGhpcy5nZXRSb290RWxlbWVudCgpfXdpdGhIYW5kbGVzKGwpe3RoaXMuX2hhbmRsZXM9bC5tYXAoZD0+UDAoZCkpLHRoaXMuX2hhbmRsZXMuZm9yRWFjaChkPT56NyhkLHRoaXMuZGlzYWJsZWQpKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCk7Y29uc3QgYT1uZXcgU2V0''@;'; put 'put ''O3JldHVybiB0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZm9yRWFjaChkPT57dGhpcy5faGFuZGxlcy5pbmRleE9mKGQpPi0xJiZhLmFkZChkKX0pLHRoaXMuX2Rpc2FibGVkSGFuZGxlcz1hLHRoaXN9d2l0aFByZXZpZXdUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcHJldmlld1RlbXBsYXRlPWws''@;'; put 'put ''dGhpc313aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1sLHRoaXN9d2l0aFJvb3RFbGVtZW50KGwpe2NvbnN0IGE9UDAobCk7cmV0dXJuIGEhPT10aGlzLl9yb290RWxlbWVudCYmKHRoaXMuX3Jvb3RFbGVtZW50JiZ0aGlzLl9yZW1v''@;'; put 'put ''dmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57YS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLCRBKSxhLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRo''@;'; put 'put ''aXMuX3BvaW50ZXJEb3duLG9zZSksYS5hZGRFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLHRoaXMuX25hdGl2ZURyYWdTdGFydCwkQSl9KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9yb290RWxlbWVudD1hKSx0eXBlb2YgU1ZHRWxlbWVudDwidSImJnRoaXMuX3Jvb3RF''@;'; put 'put ''bGVtZW50IGluc3RhbmNlb2YgU1ZHRWxlbWVudCYmKHRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9yb290RWxlbWVudC5vd25lclNWR0VsZW1lbnQpLHRoaXN9d2l0aEJvdW5kYXJ5RWxlbWVudChsKXtyZXR1cm4gdGhpcy5fYm91bmRhcnlFbGVtZW50PWw/UDAobCk6bnVsbCx0aGlzLl9y''@;'; put 'put ''ZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxsJiYodGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKDEwKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NvbnRhaW5JbnNpZGVCb3VuZGFyeU9uUmVzaXplKCkpKSx0aGlzfXdpdGhQYXJlbnQobCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3BhcmVudERyYWdSZWY9bCx0aGlzfWRpc3Bvc2UoKXt0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5pc0RyYWdnaW5nKCkmJnRoaXMuX3Jvb3RFbGVtZW50Py5yZW1vdmUoKSx0aGlzLl9hbmNob3I/LnJlbW92ZSgp''@;'; put 'put ''LHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcmFnSXRlbSh0aGlzKSx0aGlzLl9yZW1vdmVTdWJzY3JpcHRpb25zKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5zdGFydGVk''@;'; put 'put ''LmNvbXBsZXRlKCksdGhpcy5yZWxlYXNlZC5jb21wbGV0ZSgpLHRoaXMuZW5kZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX21vdmVFdmVudHMuY29tcGxldGUoKSx0aGlzLl9o''@;'; put 'put ''YW5kbGVzPVtdLHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5jbGVhcigpLHRoaXMuX2Ryb3BDb250YWluZXI9dm9pZCAwLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD10aGlzLl9y''@;'; put 'put ''b290RWxlbWVudD10aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT10aGlzLl9wcmV2aWV3VGVtcGxhdGU9dGhpcy5fYW5jaG9yPXRoaXMuX3BhcmVudERyYWdSZWY9bnVsbH1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyYm''@;'; put 'put ''dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpfXJlc2V0KCl7dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm18fCIiLHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17''@;'; put 'put ''eDowLHk6MH19ZGlzYWJsZUhhbmRsZShsKXshdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmdGhpcy5faGFuZGxlcy5pbmRleE9mKGwpPi0xJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVzLmFkZChsKSx6NyhsLCEwKSl9ZW5hYmxlSGFuZGxlKGwpe3RoaXMuX2Rpc2FibGVkSGFuZGxlcy5o''@;'; put 'put ''YXMobCkmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZGVsZXRlKGwpLHo3KGwsdGhpcy5kaXNhYmxlZCkpfXdpdGhEaXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbj1sLHRoaXN9X3dpdGhEcm9wQ29udGFpbmVyKGwpe3RoaXMuX2Ryb3BDb250YWluZXI9bH1nZXRGcmVlRHJhZ1Bv''@;'; put 'put ''c2l0aW9uKCl7Y29uc3QgbD10aGlzLmlzRHJhZ2dpbmcoKT90aGlzLl9hY3RpdmVUcmFuc2Zvcm06dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtyZXR1cm57eDpsLngseTpsLnl9fXNldEZyZWVEcmFnUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhp''@;'; put 'put ''cy5fcGFzc2l2ZVRyYW5zZm9ybS54PWwueCx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9bC55LHRoaXMuX2Ryb3BDb250YWluZXJ8fHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0obC54LGwueSksdGhpc313aXRoUHJldmlld0NvbnRhaW5lcihsKXtyZXR1cm4gdGhpcy5fcHJldmll''@;'; put 'put ''d0NvbnRhaW5lcj1sLHRoaXN9X3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uO2wmJnRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIodGhpcy5fZ2V0Q29uc3RyYWluZWRQ''@;'; put 'put ''b2ludGVyUG9zaXRpb24obCksbCl9X3JlbW92ZVN1YnNjcmlwdGlvbnMoKXt0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmli''@;'; put 'put ''ZSgpfV9kZXN0cm95UHJldmlldygpe3RoaXMuX3ByZXZpZXc/LnJlbW92ZSgpLHRoaXMuX3ByZXZpZXdSZWY/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PXRoaXMuX3ByZXZpZXdSZWY9bnVsbH1fZGVzdHJveVBsYWNlaG9sZGVyKCl7dGhpcy5fcGxhY2Vob2xkZXI/LnJlbW92ZSgpLHRoaXMu''@;'; put 'put ''X3BsYWNlaG9sZGVyUmVmPy5kZXN0cm95KCksdGhpcy5fcGxhY2Vob2xkZXI9dGhpcy5fcGxhY2Vob2xkZXJSZWY9bnVsbH1fZW5kRHJhZ1NlcXVlbmNlKGwpe2lmKHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKSYmKHRoaXMuX3JlbW92ZVN1YnNjcmlwdGlvbnMoKSx0''@;'; put 'put ''aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxlcyYmKHRoaXMuX3Jvb3RFbGVtZW50LnN0eWxlLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yPXRoaXMuX3Jvb3RFbGVtZW50VGFwSGln''@;'; put 'put ''aGxpZ2h0KSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcpKWlmKHRoaXMucmVsZWFzZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fZHJvcENvbnRhaW5lci5fc3RvcFNjcm9sbGluZygpLHRoaXMuX2FuaW1hdGVQcmV2aWV3VG9QbGFjZWhv''@;'; put 'put ''bGRlcigpLnRoZW4oKCk9Pnt0aGlzLl9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKSx0aGlzLl9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpfSk7ZWxzZXt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9dGhpcy5fYWN0aXZl''@;'; put 'put ''VHJhbnNmb3JtLng7Y29uc3QgYT10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCk7dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmVuZGVkLm5leHQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOnRo''@;'; put 'put ''aXMuX2dldERyYWdEaXN0YW5jZShhKSxkcm9wUG9pbnQ6YSxldmVudDpsfSl9KSx0aGlzLl9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpfX1fc3RhcnREcmFnU2VxdWVuY2UobCl7b3cobCkmJih0aGlzLl9sYXN0VG91''@;'; put 'put ''Y2hFdmVudFRpbWU9RGF0ZS5ub3coKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcjtpZihhKXtjb25zdCBkPXRoaXMuX3Jvb3RFbGVtZW50LGg9ZC5wYXJlbnROb2RlLGY9dGhpcy5fcGxhY2Vob2xkZXI9dGhpcy5fY3Jl''@;'; put 'put ''YXRlUGxhY2Vob2xkZXJFbGVtZW50KCksXz10aGlzLl9hbmNob3I9dGhpcy5fYW5jaG9yfHx0aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSxUPXRoaXMuX2dldFNoYWRvd1Jvb3QoKTtoLmluc2VydEJlZm9yZShfLGQpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09ZC5zdHlsZS50cmFu''@;'; put 'put ''c2Zvcm18fCIiLHRoaXMuX3ByZXZpZXc9dGhpcy5fY3JlYXRlUHJldmlld0VsZW1lbnQoKSxYb2UoZCwhMSxpVSksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoLnJlcGxhY2VDaGlsZChmLGQpKSx0aGlzLl9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQoaCxUKS5hcHBlbmRDaGls''@;'; put 'put ''ZCh0aGlzLl9wcmV2aWV3KSx0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLGEuc3RhcnQoKSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPWEsdGhpcy5faW5pdGlhbEluZGV4PWEuZ2V0SXRlbUluZGV4KHRoaXMpfWVsc2UgdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0''@;'; put 'put ''aGlzLGV2ZW50Omx9KSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPXRoaXMuX2luaXRpYWxJbmRleD12b2lkIDA7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKGE/YS5nZXRTY3JvbGxhYmxlUGFyZW50cygpOltdKX1faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZShsLGEpe3RoaXMuX3BhcmVudERy''@;'; put 'put ''YWdSZWYmJmEuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgZD10aGlzLmlzRHJhZ2dpbmcoKSxoPW93KGEpLGY9IWgmJjAhPT1hLmJ1dHRvbixfPXRoaXMuX3Jvb3RFbGVtZW50LFQ9V0EoYSksVz0haCYmdGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUr''@;'; put 'put ''ODAwPkRhdGUubm93KCksaWU9aD9mdW5jdGlvbiBpQmUoYyl7Y29uc3QgbD1jLnRvdWNoZXMmJmMudG91Y2hlc1swXXx8Yy5jaGFuZ2VkVG91Y2hlcyYmYy5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCFsfHwtMSE9PWwuaWRlbnRpZmllcnx8bnVsbCE9bC5yYWRpdXNYJiYxIT09bC5yYWRp''@;'; put 'put ''dXNYfHxudWxsIT1sLnJhZGl1c1kmJjEhPT1sLnJhZGl1c1kpfShhKTpmdW5jdGlvbiByQmUoYyl7cmV0dXJuIDA9PT1jLmJ1dHRvbnN8fDA9PT1jLm9mZnNldFgmJjA9PT1jLm9mZnNldFl9KGEpO2lmKFQmJlQuZHJhZ2dhYmxlJiYibW91c2Vkb3duIj09PWEudHlwZSYmYS5wcmV2ZW50RGVm''@;'; put 'put ''YXVsdCgpLGR8fGZ8fFd8fGllKXJldHVybjtpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgRWU9Xy5zdHlsZTt0aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodD1FZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcnx8IiIsRWUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFy''@;'; put 'put ''ZW50In10aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9dGhpcy5faGFzTW92ZWQ9ITEsdGhpcy5fcmVtb3ZlU3Vic2NyaXB0aW9ucygpLHRoaXMuX2luaXRpYWxDbGllbnRSZWN0PXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3BvaW50ZXJNb3ZlU3Vic2Ny''@;'; put 'put ''aXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlck1vdmUuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJNb3ZlKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyVXAuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJVcCksdGhpcy5f''@;'; put 'put ''c2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUoRWU9PnRoaXMuX3VwZGF0ZU9uU2Nyb2xsKEVlKSksdGhpcy5fYm91bmRhcnlFbGVtZW50JiYodGhpcy5fYm91bmRhcnlSZWN0PW5VKHRoaXMu''@;'; put 'put ''X2JvdW5kYXJ5RWxlbWVudCkpO2NvbnN0IGdlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZTt0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudD1nZSYmZ2UudGVtcGxhdGUmJiFnZS5tYXRjaFNpemU/e3g6MCx5OjB9OnRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudCh0aGlzLl9pbml0''@;'; put 'put ''aWFsQ2xpZW50UmVjdCxsLGEpO2NvbnN0IHdlPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoYSk7dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhPXt4OjAseTowfSx0aGlzLl9w''@;'; put 'put ''b2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2U9e3g6d2UueCx5OndlLnl9LHRoaXMuX2RyYWdTdGFydFRpbWU9RGF0ZS5ub3coKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0YXJ0RHJhZ2dpbmcodGhpcyxhKX1fY2xlYW51cERyYWdBcnRpZmFjdHMobCl7WG9lKHRoaXMuX3Jv''@;'; put 'put ''b3RFbGVtZW50LCEwLGlVKSx0aGlzLl9hbmNob3IucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fYW5jaG9yKSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2luaXRpYWxDbGllbnRSZWN0PXRoaXMu''@;'; put 'put ''X2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT57Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyLGQ9YS5nZXRJdGVtSW5kZXgodGhpcyksaD10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBh''@;'; put 'put ''Z2UobCksZj10aGlzLl9nZXREcmFnRGlzdGFuY2UoaCksXz1hLl9pc092ZXJDb250YWluZXIoaC54LGgueSk7dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpmLGRyb3BQb2ludDpoLGV2ZW50Omx9KSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTp0aGlzLGN1cnJlbnRJbmRl''@;'; put 'put ''eDpkLHByZXZpb3VzSW5kZXg6dGhpcy5faW5pdGlhbEluZGV4LGNvbnRhaW5lcjphLHByZXZpb3VzQ29udGFpbmVyOnRoaXMuX2luaXRpYWxDb250YWluZXIsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpfLGRpc3RhbmNlOmYsZHJvcFBvaW50OmgsZXZlbnQ6bH0pLGEuZHJvcCh0aGlzLGQsdGhp''@;'; put 'put ''cy5faW5pdGlhbEluZGV4LHRoaXMuX2luaXRpYWxDb250YWluZXIsXyxmLGgsbCksdGhpcy5fZHJvcENvbnRhaW5lcj10aGlzLl9pbml0aWFsQ29udGFpbmVyfSl9X3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoe3g6bCx5OmF9LHt4OmQseTpofSl7bGV0IGY9dGhpcy5faW5pdGlhbENvbnRh''@;'; put 'put ''aW5lci5fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbih0aGlzLGwsYSk7IWYmJnRoaXMuX2Ryb3BDb250YWluZXIhPT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZ0aGlzLl9pbml0aWFsQ29udGFpbmVyLl9pc092ZXJDb250YWluZXIobCxhKSYmKGY9dGhpcy5faW5pdGlhbENvbnRh''@;'; put 'put ''aW5lciksZiYmZiE9PXRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOnRoaXMuX2Ryb3BDb250YWluZXJ9KSx0aGlzLl9kcm9wQ29udGFpbmVyLmV4aXQodGhpcyksdGhpcy5fZHJvcENvbnRhaW5l''@;'; put 'put ''cj1mLHRoaXMuX2Ryb3BDb250YWluZXIuZW50ZXIodGhpcyxsLGEsZj09PXRoaXMuX2luaXRpYWxDb250YWluZXImJmYuc29ydGluZ0Rpc2FibGVkP3RoaXMuX2luaXRpYWxJbmRleDp2b2lkIDApLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOmYsY3VycmVudEluZGV4''@;'; put 'put ''OmYuZ2V0SXRlbUluZGV4KHRoaXMpfSl9KSx0aGlzLmlzRHJhZ2dpbmcoKSYmKHRoaXMuX2Ryb3BDb250YWluZXIuX3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZCxoKSx0aGlzLl9kcm9wQ29udGFpbmVyLl9zb3J0SXRlbSh0aGlzLGwsYSx0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGEp''@;'; put 'put ''LHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwsYSk6dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueCxhLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LnkpKX1fY3JlYXRlUHJl''@;'; put 'put ''dmlld0VsZW1lbnQoKXtjb25zdCBsPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSxhPXRoaXMucHJldmlld0NsYXNzLGQ9bD9sLnRlbXBsYXRlOm51bGw7bGV0IGg7aWYoZCYmbCl7Y29uc3QgZj1sLm1hdGNoU2l6ZT90aGlzLl9pbml0aWFsQ2xpZW50UmVjdDpudWxsLF89bC52aWV3Q29udGFpbmVy''@;'; put 'put ''LmNyZWF0ZUVtYmVkZGVkVmlldyhkLGwuY29udGV4dCk7Xy5kZXRlY3RDaGFuZ2VzKCksaD1hc2UoXyx0aGlzLl9kb2N1bWVudCksdGhpcy5fcHJldmlld1JlZj1fLGwubWF0Y2hTaXplP2xzZShoLGYpOmguc3R5bGUudHJhbnNmb3JtPXFBKHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngs''@;'; put 'put ''dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSl9ZWxzZSBoPXRzZSh0aGlzLl9yb290RWxlbWVudCksbHNlKGgsdGhpcy5faW5pdGlhbENsaWVudFJlY3QpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0mJihoLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNmb3JtKTtyZXR1cm4g''@;'; put 'put ''ZVUoaC5zdHlsZSx7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsbWFyZ2luOiIwIixwb3NpdGlvbjoiZml4ZWQiLHRvcDoiMCIsbGVmdDoiMCIsInotaW5kZXgiOmAke3RoaXMuX2NvbmZpZy56SW5kZXh8fDFlM31gfSxpVSksejcoaCwhMSksaC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wcmV2''@;'; put 'put ''aWV3IiksaC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5fZGlyZWN0aW9uKSxhJiYoQXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZj0+aC5jbGFzc0xpc3QuYWRkKGYpKTpoLmNsYXNzTGlzdC5hZGQoYSkpLGh9X2FuaW1hdGVQcmV2aWV3VG9QbGFjZWhvbGRlcigpe2lmKCF0aGlzLl9oYXNN''@;'; put 'put ''b3ZlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3QgbD10aGlzLl9wbGFjZWhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9wcmV2aWV3LmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLWFuaW1hdGluZyIpLHRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLmxlZnQs''@;'; put 'put ''bC50b3ApO2NvbnN0IGE9ZnVuY3Rpb24gZEJlKGMpe2NvbnN0IGw9Z2V0Q29tcHV0ZWRTdHlsZShjKSxhPXRVKGwsInRyYW5zaXRpb24tcHJvcGVydHkiKSxkPWEuZmluZChUPT4idHJhbnNmb3JtIj09PVR8fCJhbGwiPT09VCk7aWYoIWQpcmV0dXJuIDA7Y29uc3QgaD1hLmluZGV4T2YoZCks''@;'; put 'put ''Zj10VShsLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiksXz10VShsLCJ0cmFuc2l0aW9uLWRlbGF5Iik7cmV0dXJuIEpvZShmW2hdKStKb2UoX1toXSl9KHRoaXMuX3ByZXZpZXcpO3JldHVybiAwPT09YT9Qcm9taXNlLnJlc29sdmUoKTp0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9''@;'; put 'put ''Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPV89PnsoIV98fFdBKF8pPT09dGhpcy5fcHJldmlldyYmInRyYW5zZm9ybSI9PT1fLnByb3BlcnR5TmFtZSkmJih0aGlzLl9wcmV2aWV3Py5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixoKSxkKCksY2xlYXJUaW1lb3V0KGYpKX0s''@;'; put 'put ''Zj1zZXRUaW1lb3V0KGgsMS41KmEpO3RoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsaCl9KSl9X2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpe2NvbnN0IGw9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSxhPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBkO3Jl''@;'; put 'put ''dHVybiBhPyh0aGlzLl9wbGFjZWhvbGRlclJlZj1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEsbC5jb250ZXh0KSx0aGlzLl9wbGFjZWhvbGRlclJlZi5kZXRlY3RDaGFuZ2VzKCksZD1hc2UodGhpcy5fcGxhY2Vob2xkZXJSZWYsdGhpcy5fZG9jdW1lbnQpKTpkPXRzZSh0''@;'; put 'put ''aGlzLl9yb290RWxlbWVudCksZC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixkLmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLXBsYWNlaG9sZGVyIiksZH1fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVtZW50KGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLl9yb290RWxlbWVudD9udWxsOmEsZj1o''@;'; put 'put ''P2guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6bCxfPW93KGQpP2QudGFyZ2V0VG91Y2hlc1swXTpkLFQ9dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt4OmYubGVmdC1sLmxlZnQrKF8ucGFnZVgtZi5sZWZ0LVQubGVmdCkseTpmLnRvcC1sLnRvcCsoXy5wYWdlWS1m''@;'; put 'put ''LnRvcC1ULnRvcCl9fV9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCl7Y29uc3QgYT10aGlzLl9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksZD1vdyhsKT9sLnRvdWNoZXNbMF18fGwuY2hhbmdlZFRvdWNoZXNbMF18fHtwYWdlWDowLHBhZ2VZOjB9OmwsaD1kLnBhZ2VYLWEubGVmdCxm''@;'; put 'put ''PWQucGFnZVktYS50b3A7aWYodGhpcy5fb3duZXJTVkdFbGVtZW50KXtjb25zdCBfPXRoaXMuX293bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKTtpZihfKXtjb25zdCBUPXRoaXMuX293bmVyU1ZHRWxlbWVudC5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBULng9aCxULnk9ZixULm1hdHJp''@;'; put 'put ''eFRyYW5zZm9ybShfLmludmVyc2UoKSl9fXJldHVybnt4OmgseTpmfX1fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyP3RoaXMuX2Ryb3BDb250YWluZXIubG9ja0F4aXM6bnVsbDtsZXR7eDpkLHk6aH09dGhpcy5jb25zdHJhaW5Q''@;'; put 'put ''b3NpdGlvbj90aGlzLmNvbnN0cmFpblBvc2l0aW9uKGwsdGhpcyx0aGlzLl9pbml0aWFsQ2xpZW50UmVjdCx0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCk6bDtpZigieCI9PT10aGlzLmxvY2tBeGlzfHwieCI9PT1hP2g9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueTooInkiPT09''@;'; put 'put ''dGhpcy5sb2NrQXhpc3x8InkiPT09YSkmJihkPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpLHRoaXMuX2JvdW5kYXJ5UmVjdCl7Y29uc3R7eDpmLHk6X309dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQsVD10aGlzLl9ib3VuZGFyeVJlY3Qse3dpZHRoOlcsaGVpZ2h0OmllfT10''@;'; put 'put ''aGlzLl9nZXRQcmV2aWV3UmVjdCgpLGdlPVQudG9wK18sd2U9VC5ib3R0b20tKGllLV8pO2Q9c3NlKGQsVC5sZWZ0K2YsVC5yaWdodC0oVy1mKSksaD1zc2UoaCxnZSx3ZSl9cmV0dXJue3g6ZCx5Omh9fV91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEobCl7Y29uc3R7eDphLHk6ZH09bCxo''@;'; put 'put ''PXRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSxmPXRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZSxfPU1hdGguYWJzKGEtZi54KSxUPU1hdGguYWJzKGQtZi55KTtyZXR1cm4gXz50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYm''@;'; put 'put ''KGgueD1hPmYueD8xOi0xLGYueD1hKSxUPnRoaXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC55PWQ+Zi55PzE6LTEsZi55PWQpLGh9X3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKXtpZighdGhpcy5fcm9vdEVsZW1lbnR8fCF0aGlzLl9oYW5kbGVz''@;'; put 'put ''KXJldHVybjtjb25zdCBsPXRoaXMuX2hhbmRsZXMubGVuZ3RoPjB8fCF0aGlzLmlzRHJhZ2dpbmcoKTtsIT09dGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZCYmKHRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9bCx6Nyh0aGlzLl9yb290RWxlbWVudCxsKSl9X3JlbW92ZVJv''@;'; put 'put ''b3RFbGVtZW50TGlzdGVuZXJzKGwpe2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93biwkQSksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixvc2UpLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ3N0''@;'; put 'put ''YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQsJEEpfV9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD1xQShsLGEpLGg9dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGU7bnVsbD09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09aC50cmFu''@;'; put 'put ''c2Zvcm0mJiJub25lIiE9aC50cmFuc2Zvcm0/aC50cmFuc2Zvcm06IiIpLGgudHJhbnNmb3JtPUdBKGQsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSl9X2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpe2NvbnN0IGQ9dGhpcy5fcHJldmlld1RlbXBsYXRlPy50ZW1wbGF0ZT92b2lkIDA6dGhpcy5f''@;'; put 'put ''aW5pdGlhbFRyYW5zZm9ybSxoPXFBKGwsYSk7dGhpcy5fcHJldmlldy5zdHlsZS50cmFuc2Zvcm09R0EoaCxkKX1fZ2V0RHJhZ0Rpc3RhbmNlKGwpe2NvbnN0IGE9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U7cmV0dXJuIGE/e3g6bC54LWEueCx5OmwueS1hLnl9Ont4OjAseTowfX1fY2xl''@;'; put 'put ''YW51cENhY2hlZERpbWVuc2lvbnMoKXt0aGlzLl9ib3VuZGFyeVJlY3Q9dGhpcy5fcHJldmlld1JlY3Q9dm9pZCAwLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpfV9jb250YWluSW5zaWRlQm91bmRhcnlPblJlc2l6ZSgpe2xldHt4OmwseTphfT10aGlzLl9wYXNzaXZlVHJhbnNmb3Jt''@;'; put 'put ''O2lmKDA9PT1sJiYwPT09YXx8dGhpcy5pc0RyYWdnaW5nKCl8fCF0aGlzLl9ib3VuZGFyeUVsZW1lbnQpcmV0dXJuO2NvbnN0IGQ9dGhpcy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD10aGlzLl9ib3VuZGFyeUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7''@;'; put 'put ''aWYoMD09PWgud2lkdGgmJjA9PT1oLmhlaWdodHx8MD09PWQud2lkdGgmJjA9PT1kLmhlaWdodClyZXR1cm47Y29uc3QgZj1oLmxlZnQtZC5sZWZ0LF89ZC5yaWdodC1oLnJpZ2h0LFQ9aC50b3AtZC50b3AsVz1kLmJvdHRvbS1oLmJvdHRvbTtoLndpZHRoPmQud2lkdGg/KGY+MCYmKGwrPWYp''@;'; put 'put ''LF8+MCYmKGwtPV8pKTpsPTAsaC5oZWlnaHQ+ZC5oZWlnaHQ/KFQ+MCYmKGErPVQpLFc+MCYmKGEtPVcpKTphPTAsKGwhPT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnh8fGEhPT10aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnkpJiZ0aGlzLnNldEZyZWVEcmFnUG9zaXRpb24oe3k6YSx4Omx9KX1f''@;'; put 'put ''Z2V0RHJhZ1N0YXJ0RGVsYXkobCl7Y29uc3QgYT10aGlzLmRyYWdTdGFydERlbGF5O3JldHVybiJudW1iZXIiPT10eXBlb2YgYT9hOm93KGwpP2EudG91Y2g6YT9hLm1vdXNlOjB9X3VwZGF0ZU9uU2Nyb2xsKGwpe2NvbnN0IGE9dGhpcy5fcGFyZW50UG9zaXRpb25zLmhhbmRsZVNjcm9sbChs''@;'; put 'put ''KTtpZihhKXtjb25zdCBkPVdBKGwpO3RoaXMuX2JvdW5kYXJ5UmVjdCYmZCE9PXRoaXMuX2JvdW5kYXJ5RWxlbWVudCYmZC5jb250YWlucyh0aGlzLl9ib3VuZGFyeUVsZW1lbnQpJiZpdyh0aGlzLl9ib3VuZGFyeVJlY3QsYS50b3AsYS5sZWZ0KSx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFn''@;'; put 'put ''ZS54Kz1hLmxlZnQsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSs9YS50b3AsdGhpcy5fZHJvcENvbnRhaW5lcnx8KHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LT1hLmxlZnQsdGhpcy5fYWN0aXZlVHJhbnNmb3JtLnktPWEudG9wLHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0o''@;'; put 'put ''dGhpcy5fYWN0aXZlVHJhbnNmb3JtLngsdGhpcy5fYWN0aXZlVHJhbnNmb3JtLnkpKX19X2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5nZXQodGhpcy5fZG9jdW1lbnQpPy5zY3JvbGxQb3NpdGlvbnx8dGhpcy5fcGFy''@;'; put 'put ''ZW50UG9zaXRpb25zLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX1fZ2V0U2hhZG93Um9vdCgpe3JldHVybiB2b2lkIDA9PT10aGlzLl9jYWNoZWRTaGFkb3dSb290JiYodGhpcy5fY2FjaGVkU2hhZG93Um9vdD1Xb2UodGhpcy5fcm9vdEVsZW1lbnQpKSx0aGlzLl9jYWNoZWRTaGFkb3dS''@;'; put 'put ''b290fV9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQobCxhKXtjb25zdCBkPXRoaXMuX3ByZXZpZXdDb250YWluZXJ8fCJnbG9iYWwiO2lmKCJwYXJlbnQiPT09ZClyZXR1cm4gbDtpZigiZ2xvYmFsIj09PWQpe2NvbnN0IGg9dGhpcy5fZG9jdW1lbnQ7cmV0dXJuIGF8fGguZnVsbHNjcmVlbkVs''@;'; put 'put ''ZW1lbnR8fGgud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGgubW96RnVsbFNjcmVlbkVsZW1lbnR8fGgubXNGdWxsc2NyZWVuRWxlbWVudHx8aC5ib2R5fXJldHVybiBQMChkKX1fZ2V0UHJldmlld1JlY3QoKXtyZXR1cm4oIXRoaXMuX3ByZXZpZXdSZWN0fHwhdGhpcy5fcHJldmlld1JlY3Qu''@;'; put 'put ''d2lkdGgmJiF0aGlzLl9wcmV2aWV3UmVjdC5oZWlnaHQpJiYodGhpcy5fcHJldmlld1JlY3Q9dGhpcy5fcHJldmlldz90aGlzLl9wcmV2aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnRoaXMuX2luaXRpYWxDbGllbnRSZWN0KSx0aGlzLl9wcmV2aWV3UmVjdH1fZ2V0VGFyZ2V0SGFuZGxl''@;'; put 'put ''KGwpe3JldHVybiB0aGlzLl9oYW5kbGVzLmZpbmQoYT0+bC50YXJnZXQmJihsLnRhcmdldD09PWF8fGEuY29udGFpbnMobC50YXJnZXQpKSl9fWZ1bmN0aW9uIHFBKGMsbCl7cmV0dXJuYHRyYW5zbGF0ZTNkKCR7TWF0aC5yb3VuZChjKX1weCwgJHtNYXRoLnJvdW5kKGwpfXB4LCAwKWB9ZnVu''@;'; put 'put ''Y3Rpb24gc3NlKGMsbCxhKXtyZXR1cm4gTWF0aC5tYXgobCxNYXRoLm1pbihhLGMpKX1mdW5jdGlvbiBvdyhjKXtyZXR1cm4idCI9PT1jLnR5cGVbMF19ZnVuY3Rpb24gYXNlKGMsbCl7Y29uc3QgYT1jLnJvb3ROb2RlcztpZigxPT09YS5sZW5ndGgmJmFbMF0ubm9kZVR5cGU9PT1sLkVMRU1F''@;'; put 'put ''TlRfTk9ERSlyZXR1cm4gYVswXTtjb25zdCBkPWwuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGEuZm9yRWFjaChoPT5kLmFwcGVuZENoaWxkKGgpKSxkfWZ1bmN0aW9uIGxzZShjLGwpe2Muc3R5bGUud2lkdGg9YCR7bC53aWR0aH1weGAsYy5zdHlsZS5oZWlnaHQ9YCR7bC5oZWlnaHR9''@;'; put 'put ''cHhgLGMuc3R5bGUudHJhbnNmb3JtPXFBKGwubGVmdCxsLnRvcCl9ZnVuY3Rpb24gY3NlKGMsbCxhKXtjb25zdCBkPXN3KGwsYy5sZW5ndGgtMSksaD1zdyhhLGMubGVuZ3RoLTEpO2lmKGQ9PT1oKXJldHVybjtjb25zdCBmPWNbZF0sXz1oPGQ/LTE6MTtmb3IobGV0IFQ9ZDtUIT09aDtUKz1f''@;'; put 'put ''KWNbVF09Y1tUK19dO2NbaF09Zn1mdW5jdGlvbiBzdyhjLGwpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGwsYykpfWNsYXNzIG1CZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2VsZW1lbnQ9bCx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWEsdGhpcy5faXRlbVBvc2l0aW9ucz1bXSx0aGlz''@;'; put 'put ''Lm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIsdGhpcy5fcHJldmlvdXNTd2FwPXtkcmFnOm51bGwsZGVsdGE6MCxvdmVybGFwczohMX19c3RhcnQobCl7dGhpcy53aXRoSXRlbXMobCl9c29ydChsLGEsZCxoKXtjb25zdCBmPXRoaXMuX2l0ZW1Qb3NpdGlvbnMsXz10aGlzLl9nZXRJdGVtSW5kZXhG''@;'; put 'put ''cm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpO2lmKC0xPT09XyYmZi5sZW5ndGg+MClyZXR1cm4gbnVsbDtjb25zdCBUPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sVz1mLmZpbmRJbmRleCh5dD0+eXQuZHJhZz09PWwpLGllPWZbX10sd2U9aWUuY2xpZW50UmVjdCxFZT1XPl8/''@;'; put 'put ''MTotMSxaZT10aGlzLl9nZXRJdGVtT2Zmc2V0UHgoZltXXS5jbGllbnRSZWN0LHdlLEVlKSxvdD10aGlzLl9nZXRTaWJsaW5nT2Zmc2V0UHgoVyxmLEVlKSxldD1mLnNsaWNlKCk7cmV0dXJuIGNzZShmLFcsXyksZi5mb3JFYWNoKCh5dCxrdCk9PntpZihldFtrdF09PT15dClyZXR1cm47Y29u''@;'; put 'put ''c3QgU3Q9eXQuZHJhZz09PWwsUXQ9U3Q/WmU6b3Qsbm49U3Q/bC5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKTp5dC5kcmFnLmdldFJvb3RFbGVtZW50KCk7eXQub2Zmc2V0Kz1RdCxUPyhubi5zdHlsZS50cmFuc2Zvcm09R0EoYHRyYW5zbGF0ZTNkKCR7TWF0aC5yb3VuZCh5dC5vZmZzZXQpfXB4''@;'; put 'put ''LCAwLCAwKWAseXQuaW5pdGlhbFRyYW5zZm9ybSksaXcoeXQuY2xpZW50UmVjdCwwLFF0KSk6KG5uLnN0eWxlLnRyYW5zZm9ybT1HQShgdHJhbnNsYXRlM2QoMCwgJHtNYXRoLnJvdW5kKHl0Lm9mZnNldCl9cHgsIDApYCx5dC5pbml0aWFsVHJhbnNmb3JtKSxpdyh5dC5jbGllbnRSZWN0LFF0''@;'; put 'put ''LDApKX0pLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz1yVSh3ZSxhLGQpLHRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnPWllLmRyYWcsdGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhPVQ/aC54OmgueSx7cHJldmlvdXNJbmRleDpXLGN1cnJlbnRJbmRleDpffX1lbnRlcihsLGEsZCxoKXtjb25z''@;'; put 'put ''dCBmPW51bGw9PWh8fGg8MD90aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkKTpoLF89dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcyxUPV8uaW5kZXhPZihsKSxXPWwuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk7bGV0IGllPV9bZl07aWYoaWU9PT1sJiYoaWU9X1tmKzFd''@;'; put 'put ''KSwhaWUmJihudWxsPT1mfHwtMT09PWZ8fGY8Xy5sZW5ndGgtMSkmJnRoaXMuX3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGEsZCkmJihpZT1fWzBdKSxUPi0xJiZfLnNwbGljZShULDEpLGllJiYhdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKGllKSl7Y29uc3QgZ2U9aWUuZ2V0''@;'; put 'put ''Um9vdEVsZW1lbnQoKTtnZS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShXLGdlKSxfLnNwbGljZShmLDAsbCl9ZWxzZSBQMCh0aGlzLl9lbGVtZW50KS5hcHBlbmRDaGlsZChXKSxfLnB1c2gobCk7Vy5zdHlsZS50cmFuc2Zvcm09IiIsdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0''@;'; put 'put ''aEl0ZW1zKGwpe3RoaXMuX2FjdGl2ZURyYWdnYWJsZXM9bC5zbGljZSgpLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhTb3J0UHJlZGljYXRlKGwpe3RoaXMuX3NvcnRQcmVkaWNhdGU9bH1yZXNldCgpe3RoaXMuX2FjdGl2ZURyYWdnYWJsZXMuZm9yRWFjaChsPT57Y29uc3QgYT1s''@;'; put 'put ''LmdldFJvb3RFbGVtZW50KCk7aWYoYSl7Y29uc3QgZD10aGlzLl9pdGVtUG9zaXRpb25zLmZpbmQoaD0+aC5kcmFnPT09bCk/LmluaXRpYWxUcmFuc2Zvcm07YS5zdHlsZS50cmFuc2Zvcm09ZHx8IiJ9fSksdGhpcy5faXRlbVBvc2l0aW9ucz1bXSx0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPVtd''@;'; put 'put ''LHRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnPW51bGwsdGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhPTAsdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzPSExfWdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKXtyZXR1cm4gdGhpcy5fYWN0aXZlRHJhZ2dhYmxlc31nZXRJdGVtSW5kZXgobCl7cmV0dXJu''@;'; put 'put ''KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24mJiJydGwiPT09dGhpcy5kaXJlY3Rpb24/dGhpcy5faXRlbVBvc2l0aW9ucy5zbGljZSgpLnJldmVyc2UoKTp0aGlzLl9pdGVtUG9zaXRpb25zKS5maW5kSW5kZXgoZD0+ZC5kcmFnPT09bCl9dXBkYXRlT25TY3JvbGwobCxhKXt0aGlz''@;'; put 'put ''Ll9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtjbGllbnRSZWN0OmR9KT0+e2l3KGQsbCxhKX0pLHRoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2RyYWc6ZH0pPT57dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKGQpJiZkLl9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24o''@;'; put 'put ''KX0pfV9jYWNoZUl0ZW1Qb3NpdGlvbnMoKXtjb25zdCBsPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247dGhpcy5faXRlbVBvc2l0aW9ucz10aGlzLl9hY3RpdmVEcmFnZ2FibGVzLm1hcChhPT57Y29uc3QgZD1hLmdldFZpc2libGVFbGVtZW50KCk7cmV0dXJue2RyYWc6YSxvZmZz''@;'; put 'put ''ZXQ6MCxpbml0aWFsVHJhbnNmb3JtOmQuc3R5bGUudHJhbnNmb3JtfHwiIixjbGllbnRSZWN0Om5VKGQpfX0pLnNvcnQoKGEsZCk9Pmw/YS5jbGllbnRSZWN0LmxlZnQtZC5jbGllbnRSZWN0LmxlZnQ6YS5jbGllbnRSZWN0LnRvcC1kLmNsaWVudFJlY3QudG9wKX1fZ2V0SXRlbU9mZnNldFB4''@;'; put 'put ''KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247bGV0IGY9aD9hLmxlZnQtbC5sZWZ0OmEudG9wLWwudG9wO3JldHVybi0xPT09ZCYmKGYrPWg/YS53aWR0aC1sLndpZHRoOmEuaGVpZ2h0LWwuaGVpZ2h0KSxmfV9nZXRTaWJsaW5nT2Zmc2V0UHgobCxhLGQp''@;'; put 'put ''e2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixmPWFbbF0uY2xpZW50UmVjdCxfPWFbbCstMSpkXTtsZXQgVD1mW2g/IndpZHRoIjoiaGVpZ2h0Il0qZDtpZihfKXtjb25zdCBXPWg/ImxlZnQiOiJ0b3AiLGllPWg/InJpZ2h0IjoiYm90dG9tIjstMT09PWQ/VC09Xy5j''@;'; put 'put ''bGllbnRSZWN0W1ddLWZbaWVdOlQrPWZbV10tXy5jbGllbnRSZWN0W2llXX1yZXR1cm4gVH1fc2hvdWxkRW50ZXJBc0ZpcnN0Q2hpbGQobCxhKXtpZighdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5sZW5ndGgpcmV0dXJuITE7Y29uc3QgZD10aGlzLl9pdGVtUG9zaXRpb25zLGg9Imhvcml6b250''@;'; put 'put ''YWwiPT09dGhpcy5vcmllbnRhdGlvbjtpZihkWzBdLmRyYWchPT10aGlzLl9hY3RpdmVEcmFnZ2FibGVzWzBdKXtjb25zdCBfPWRbZC5sZW5ndGgtMV0uY2xpZW50UmVjdDtyZXR1cm4gaD9sPj1fLnJpZ2h0OmE+PV8uYm90dG9tfXtjb25zdCBfPWRbMF0uY2xpZW50UmVjdDtyZXR1cm4gaD9s''@;'; put 'put ''PD1fLmxlZnQ6YTw9Xy50b3B9fV9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpe2NvbnN0IGY9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixfPXRoaXMuX2l0ZW1Qb3NpdGlvbnMuZmluZEluZGV4KCh7ZHJhZzpULGNsaWVudFJlY3Q6V30pPT5UIT09bCYm''@;'; put 'put ''KCghaHx8VCE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnfHwhdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzfHwoZj9oLng6aC55KSE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YSkmJihmP2E+PU1hdGguZmxvb3IoVy5sZWZ0KSYmYTxNYXRoLmZsb29yKFcucmlnaHQpOmQ+PU1hdGguZmxv''@;'; put 'put ''b3IoVy50b3ApJiZkPE1hdGguZmxvb3IoVy5ib3R0b20pKSkpO3JldHVybi0xIT09XyYmdGhpcy5fc29ydFByZWRpY2F0ZShfLGwpP186LTF9fWNsYXNzIHZCZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMuX2RyYWdEcm9wUmVnaXN0cnk9YSx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3''@;'; put 'put ''cG9ydFJ1bGVyPWYsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD0hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD0hMSx0aGlzLmF1dG9TY3JvbGxTdGVwPTIsdGhpcy5lbnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGljYXRlPSgpPT4hMCx0aGlzLmJlZm9y''@;'; put 'put ''ZVN0YXJ0ZWQ9bmV3IGJlLHRoaXMuZW50ZXJlZD1uZXcgYmUsdGhpcy5leGl0ZWQ9bmV3IGJlLHRoaXMuZHJvcHBlZD1uZXcgYmUsdGhpcy5zb3J0ZWQ9bmV3IGJlLHRoaXMucmVjZWl2aW5nU3RhcnRlZD1uZXcgYmUsdGhpcy5yZWNlaXZpbmdTdG9wcGVkPW5ldyBiZSx0aGlzLl9pc0RyYWdn''@;'; put 'put ''aW5nPSExLHRoaXMuX2RyYWdnYWJsZXM9W10sdGhpcy5fc2libGluZ3M9W10sdGhpcy5fYWN0aXZlU2libGluZ3M9bmV3IFNldCx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbj1lZS5FTVBUWSx0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj0wLHRoaXMuX2hvcml6b250YWxT''@;'; put 'put ''Y3JvbGxEaXJlY3Rpb249MCx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzPW5ldyBiZSx0aGlzLl9jYWNoZWRTaGFkb3dSb290PW51bGwsdGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbD0oKT0+e3RoaXMuX3N0b3BTY3JvbGxpbmcoKSxmdW5jdGlvbiBzQmUoYz0wLGw9cmIpe3JldHVybiBjPDAmJihj''@;'; put 'put ''PTApLGpQKGMsYyxsKX0oMCxqb2UpLnBpcGUoYWgodGhpcy5fc3RvcFNjcm9sbFRpbWVycykpLnN1YnNjcmliZSgoKT0+e2NvbnN0IF89dGhpcy5fc2Nyb2xsTm9kZSxUPXRoaXMuYXV0b1Njcm9sbFN0ZXA7MT09PXRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uP18uc2Nyb2xsQnkoMCwt''@;'; put 'put ''VCk6Mj09PXRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uJiZfLnNjcm9sbEJ5KDAsVCksMT09PXRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24/Xy5zY3JvbGxCeSgtVCwwKToyPT09dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiYmXy5zY3JvbGxCeShULDApfSl9LHRo''@;'; put 'put ''aXMuZWxlbWVudD1QMChsKSx0aGlzLl9kb2N1bWVudD1kLHRoaXMud2l0aFNjcm9sbGFibGVQYXJlbnRzKFt0aGlzLmVsZW1lbnRdKSxhLnJlZ2lzdGVyRHJvcENvbnRhaW5lcih0aGlzKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IGVzZShkKSx0aGlzLl9zb3J0U3RyYXRlZ3k9bmV3IG1C''@;'; put 'put ''ZSh0aGlzLmVsZW1lbnQsYSksdGhpcy5fc29ydFN0cmF0ZWd5LndpdGhTb3J0UHJlZGljYXRlKChfLFQpPT50aGlzLnNvcnRQcmVkaWNhdGUoXyxULHRoaXMpKX1kaXNwb3NlKCl7dGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMuY29tcGxldGUoKSx0aGlzLl92''@;'; put 'put ''aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYmVmb3JlU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5zb3J0ZWQuY29tcGxldGUoKSx0''@;'; put 'put ''aGlzLnJlY2VpdmluZ1N0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQuY29tcGxldGUoKSx0aGlzLl9hY3RpdmVTaWJsaW5ncy5jbGVhcigpLHRoaXMuX3Njcm9sbE5vZGU9bnVsbCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKSx0aGlzLl9kcmFnRHJvcFJlZ2lz''@;'; put 'put ''dHJ5LnJlbW92ZURyb3BDb250YWluZXIodGhpcyl9aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nfXN0YXJ0KCl7dGhpcy5fZHJhZ2dpbmdTdGFydGVkKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKX1lbnRlcihsLGEsZCxoKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0''@;'; put 'put ''ZWQoKSxudWxsPT1oJiZ0aGlzLnNvcnRpbmdEaXNhYmxlZCYmKGg9dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGwpKSx0aGlzLl9zb3J0U3RyYXRlZ3kuZW50ZXIobCxhLGQsaCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpLHRo''@;'; put 'put ''aXMuZW50ZXJlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXMsY3VycmVudEluZGV4OnRoaXMuZ2V0SXRlbUluZGV4KGwpfSl9ZXhpdChsKXt0aGlzLl9yZXNldCgpLHRoaXMuZXhpdGVkLm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpc30pfWRyb3AobCxhLGQsaCxmLF8sVCxXPXt9KXt0''@;'; put 'put ''aGlzLl9yZXNldCgpLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOmwsY3VycmVudEluZGV4OmEscHJldmlvdXNJbmRleDpkLGNvbnRhaW5lcjp0aGlzLHByZXZpb3VzQ29udGFpbmVyOmgsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpmLGRpc3RhbmNlOl8sZHJvcFBvaW50OlQsZXZlbnQ6V30pfXdp''@;'; put 'put ''dGhJdGVtcyhsKXtjb25zdCBhPXRoaXMuX2RyYWdnYWJsZXM7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZXM9bCxsLmZvckVhY2goZD0+ZC5fd2l0aERyb3BDb250YWluZXIodGhpcykpLHRoaXMuaXNEcmFnZ2luZygpJiYoYS5maWx0ZXIoaD0+aC5pc0RyYWdnaW5nKCkpLmV2ZXJ5KGg9Pi0xPT09''@;'; put 'put ''bC5pbmRleE9mKGgpKT90aGlzLl9yZXNldCgpOnRoaXMuX3NvcnRTdHJhdGVneS53aXRoSXRlbXModGhpcy5fZHJhZ2dhYmxlcykpLHRoaXN9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbj1sLHRoaXN9Y29ubmVjdGVkVG8obCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3NpYmxpbmdzPWwuc2xpY2UoKSx0aGlzfXdpdGhPcmllbnRhdGlvbihsKXtyZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5Lm9yaWVudGF0aW9uPWwsdGhpc313aXRoU2Nyb2xsYWJsZVBhcmVudHMobCl7Y29uc3QgYT1QMCh0aGlzLmVsZW1lbnQpO3JldHVybiB0aGlzLl9zY3JvbGxhYmxl''@;'; put 'put ''RWxlbWVudHM9LTE9PT1sLmluZGV4T2YoYSk/W2EsLi4ubF06bC5zbGljZSgpLHRoaXN9Z2V0U2Nyb2xsYWJsZVBhcmVudHMoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzfWdldEl0ZW1JbmRleChsKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZz90aGlzLl9zb3J0U3RyYXRlZ3ku''@;'; put 'put ''Z2V0SXRlbUluZGV4KGwpOnRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKX1pc1JlY2VpdmluZygpe3JldHVybiB0aGlzLl9hY3RpdmVTaWJsaW5ncy5zaXplPjB9X3NvcnRJdGVtKGwsYSxkLGgpe2lmKHRoaXMuc29ydGluZ0Rpc2FibGVkfHwhdGhpcy5fY2xpZW50UmVjdHx8IVFvZSh0aGlz''@;'; put 'put ''Ll9jbGllbnRSZWN0LC4wNSxhLGQpKXJldHVybjtjb25zdCBmPXRoaXMuX3NvcnRTdHJhdGVneS5zb3J0KGwsYSxkLGgpO2YmJnRoaXMuc29ydGVkLm5leHQoe3ByZXZpb3VzSW5kZXg6Zi5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpmLmN1cnJlbnRJbmRleCxjb250YWluZXI6dGhpcyxp''@;'; put 'put ''dGVtOmx9KX1fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShsLGEpe2lmKHRoaXMuYXV0b1Njcm9sbERpc2FibGVkKXJldHVybjtsZXQgZCxoPTAsZj0wO2lmKHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZm9yRWFjaCgoXyxUKT0+e1Q9PT10aGlzLl9kb2N1bWVudHx8IV8uY2xp''@;'; put 'put ''ZW50UmVjdHx8ZHx8UW9lKF8uY2xpZW50UmVjdCwuMDUsbCxhKSYmKFtoLGZdPWZ1bmN0aW9uIF9CZShjLGwsYSxkKXtjb25zdCBoPWhzZShsLGQpLGY9ZnNlKGwsYSk7bGV0IF89MCxUPTA7aWYoaCl7Y29uc3QgVz1jLnNjcm9sbFRvcDsxPT09aD9XPjAmJihfPTEpOmMuc2Nyb2xsSGVpZ2h0''@;'; put 'put ''LVc+Yy5jbGllbnRIZWlnaHQmJihfPTIpfWlmKGYpe2NvbnN0IFc9Yy5zY3JvbGxMZWZ0OzE9PT1mP1c+MCYmKFQ9MSk6Yy5zY3JvbGxXaWR0aC1XPmMuY2xpZW50V2lkdGgmJihUPTIpfXJldHVybltfLFRdfShULF8uY2xpZW50UmVjdCxsLGEpLChofHxmKSYmKGQ9VCkpfSksIWgmJiFmKXtj''@;'; put 'put ''b25zdHt3aWR0aDpfLGhlaWdodDpUfT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLFc9e3dpZHRoOl8saGVpZ2h0OlQsdG9wOjAscmlnaHQ6Xyxib3R0b206VCxsZWZ0OjB9O2g9aHNlKFcsYSksZj1mc2UoVyxsKSxkPXdpbmRvd31kJiYoaCE9PXRoaXMuX3ZlcnRpY2Fs''@;'; put 'put ''U2Nyb2xsRGlyZWN0aW9ufHxmIT09dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbnx8ZCE9PXRoaXMuX3Njcm9sbE5vZGUpJiYodGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249aCx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPWYsdGhpcy5fc2Nyb2xsTm9kZT1kLCho''@;'; put 'put ''fHxmKSYmZD90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIodGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbCk6dGhpcy5fc3RvcFNjcm9sbGluZygpKX1fc3RvcFNjcm9sbGluZygpe3RoaXMuX3N0b3BTY3JvbGxUaW1lcnMubmV4dCgpfV9kcmFnZ2luZ1N0YXJ0ZWQoKXtjb25zdCBsPVAw''@;'; put 'put ''KHRoaXMuZWxlbWVudCkuc3R5bGU7dGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9pc0RyYWdnaW5nPSEwLHRoaXMuX2luaXRpYWxTY3JvbGxTbmFwPWwubXNTY3JvbGxTbmFwVHlwZXx8bC5zY3JvbGxTbmFwVHlwZXx8IiIsbC5zY3JvbGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5''@;'; put 'put ''cGU9Im5vbmUiLHRoaXMuX3NvcnRTdHJhdGVneS5zdGFydCh0aGlzLl9kcmFnZ2FibGVzKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVudHMoKX1fY2FjaGVQ''@;'; put 'put ''YXJlbnRQb3NpdGlvbnMoKXtjb25zdCBsPVAwKHRoaXMuZWxlbWVudCk7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cyksdGhpcy5fY2xpZW50UmVjdD10aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmdldChsKS5jbGllbnRSZWN0fV9y''@;'; put 'put ''ZXNldCgpe3RoaXMuX2lzRHJhZ2dpbmc9ITE7Y29uc3QgbD1QMCh0aGlzLmVsZW1lbnQpLnN0eWxlO2wuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPXRoaXMuX2luaXRpYWxTY3JvbGxTbmFwLHRoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RvcFJlY2VpdmluZyh0aGlz''@;'; put 'put ''KSksdGhpcy5fc29ydFN0cmF0ZWd5LnJlc2V0KCksdGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCl9X2lzT3ZlckNvbnRhaW5lcihsLGEpe3JldHVybiBudWxsIT10''@;'; put 'put ''aGlzLl9jbGllbnRSZWN0JiZyVSh0aGlzLl9jbGllbnRSZWN0LGwsYSl9X2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24obCxhLGQpe3JldHVybiB0aGlzLl9zaWJsaW5ncy5maW5kKGg9PmguX2NhblJlY2VpdmUobCxhLGQpKX1fY2FuUmVjZWl2ZShsLGEsZCl7aWYoIXRoaXMuX2Ns''@;'; put 'put ''aWVudFJlY3R8fCFyVSh0aGlzLl9jbGllbnRSZWN0LGEsZCl8fCF0aGlzLmVudGVyUHJlZGljYXRlKGwsdGhpcykpcmV0dXJuITE7Y29uc3QgaD10aGlzLl9nZXRTaGFkb3dSb290KCkuZWxlbWVudEZyb21Qb2ludChhLGQpO2lmKCFoKXJldHVybiExO2NvbnN0IGY9UDAodGhpcy5lbGVtZW50''@;'; put 'put ''KTtyZXR1cm4gaD09PWZ8fGYuY29udGFpbnMoaCl9X3N0YXJ0UmVjZWl2aW5nKGwsYSl7Y29uc3QgZD10aGlzLl9hY3RpdmVTaWJsaW5nczshZC5oYXMobCkmJmEuZXZlcnkoaD0+dGhpcy5lbnRlclByZWRpY2F0ZShoLHRoaXMpfHx0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YoaCk+LTEpJiYo''@;'; put 'put ''ZC5hZGQobCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpLHRoaXMucmVjZWl2aW5nU3RhcnRlZC5uZXh0KHtpbml0aWF0b3I6bCxyZWNlaXZlcjp0aGlzLGl0ZW1zOmF9KSl9X3N0b3BSZWNlaXZpbmcobCl7dGhpcy5fYWN0aXZlU2li''@;'; put 'put ''bGluZ3MuZGVsZXRlKGwpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLm5leHQoe2luaXRpYXRvcjpsLHJlY2VpdmVyOnRoaXN9KX1fbGlzdGVuVG9TY3JvbGxFdmVudHMoKXt0aGlzLl92aWV3cG9ydFNjcm9sbFN1''@;'; put 'put ''YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNjcm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJlKGw9PntpZih0aGlzLmlzRHJhZ2dpbmcoKSl7Y29uc3QgYT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKGwpO2EmJnRoaXMuX3NvcnRTdHJh''@;'; put 'put ''dGVneS51cGRhdGVPblNjcm9sbChhLnRvcCxhLmxlZnQpfWVsc2UgdGhpcy5pc1JlY2VpdmluZygpJiZ0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpfSl9X2dldFNoYWRvd1Jvb3QoKXtpZighdGhpcy5fY2FjaGVkU2hhZG93Um9vdCl7Y29uc3QgbD1Xb2UoUDAodGhpcy5lbGVtZW50KSk7''@;'; put 'put ''dGhpcy5fY2FjaGVkU2hhZG93Um9vdD1sfHx0aGlzLl9kb2N1bWVudH1yZXR1cm4gdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKXtjb25zdCBsPXRoaXMuX3NvcnRTdHJhdGVneS5nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCkuZmlsdGVyKGE9PmEuaXNE''@;'; put 'put ''cmFnZ2luZygpKTt0aGlzLl9zaWJsaW5ncy5mb3JFYWNoKGE9PmEuX3N0YXJ0UmVjZWl2aW5nKHRoaXMsbCkpfX1mdW5jdGlvbiBoc2UoYyxsKXtjb25zdHt0b3A6YSxib3R0b206ZCxoZWlnaHQ6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj8xOmw+PWQtZiYmbDw9ZCtmPzI6''@;'; put 'put ''MH1mdW5jdGlvbiBmc2UoYyxsKXtjb25zdHtsZWZ0OmEscmlnaHQ6ZCx3aWR0aDpofT1jLGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmPzE6bD49ZC1mJiZsPD1kK2Y/MjowfWNvbnN0IEtBPXJ3KHtwYXNzaXZlOiExLGNhcHR1cmU6ITB9KTtsZXQgYkJlPSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLl9kcm9wSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fZHJhZ0luc3RhbmNlcz1uZXcgU2V0LHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXM9W10sdGhpcy5fZ2xvYmFsTGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5fZHJhZ2dpbmdQcmVkaWNh''@;'; put 'put ''dGU9aD0+aC5pc0RyYWdnaW5nKCksdGhpcy5wb2ludGVyTW92ZT1uZXcgYmUsdGhpcy5wb2ludGVyVXA9bmV3IGJlLHRoaXMuc2Nyb2xsPW5ldyBiZSx0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmc9aD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJmgucHJl''@;'; put 'put ''dmVudERlZmF1bHQoKX0sdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyPWg9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aD4wJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5zb21lKHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlKSYmaC5wcmV2ZW50RGVmYXVsdCgp''@;'; put 'put ''LHRoaXMucG9pbnRlck1vdmUubmV4dChoKSl9LHRoaXMuX2RvY3VtZW50PWR9cmVnaXN0ZXJEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuaGFzKGEpfHx0aGlzLl9kcm9wSW5zdGFuY2VzLmFkZChhKX1yZWdpc3RlckRyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5jZXMu''@;'; put 'put ''YWRkKGEpLDE9PT10aGlzLl9kcmFnSW5zdGFuY2VzLnNpemUmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLEtBKX0pfXJlbW92ZURy''@;'; put 'put ''b3BDb250YWluZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5kZWxldGUoYSl9cmVtb3ZlRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5kZWxldGUoYSksdGhpcy5zdG9wRHJhZ2dpbmcoYSksMD09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fZG9jdW1lbnQucmVtb3Zl''@;'; put 'put ''RXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsS0EpfXN0YXJ0RHJhZ2dpbmcoYSxkKXtpZighKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKT4tMSkmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnB1c2goYSks''@;'; put 'put ''MT09PXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoKSl7Y29uc3QgaD1kLnR5cGUuc3RhcnRzV2l0aCgidG91Y2giKTt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuc2V0KGg/InRvdWNoZW5kIjoibW91c2V1cCIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyVXAubmV4dChmKSxvcHRpb25z''@;'; put 'put ''OiEwfSkuc2V0KCJzY3JvbGwiLHtoYW5kbGVyOmY9PnRoaXMuc2Nyb2xsLm5leHQoZiksb3B0aW9uczohMH0pLnNldCgic2VsZWN0c3RhcnQiLHtoYW5kbGVyOnRoaXMuX3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2luZyxvcHRpb25zOktBfSksaHx8dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNl''@;'; put 'put ''dCgibW91c2Vtb3ZlIix7aGFuZGxlcjpmPT50aGlzLnBvaW50ZXJNb3ZlLm5leHQoZiksb3B0aW9uczpLQX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dsb2JhbExpc3RlbmVycy5mb3JFYWNoKChmLF8pPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0''@;'; put 'put ''ZW5lcihfLGYuaGFuZGxlcixmLm9wdGlvbnMpfSl9KX19c3RvcERyYWdnaW5nKGEpe2NvbnN0IGQ9dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpO2Q+LTEmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnNwbGljZShkLDEpLDA9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFu''@;'; put 'put ''Y2VzLmxlbmd0aCYmdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSl9aXNEcmFnZ2luZyhhKXtyZXR1cm4gdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRleE9mKGEpPi0xfXNjcm9sbGVkKGEpe2NvbnN0IGQ9W3RoaXMuc2Nyb2xsXTtyZXR1cm4gYSYmYSE9PXRoaXMuX2RvY3VtZW50''@;'; put 'put ''JiZkLnB1c2gobmV3IEtlKGg9PnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IF89VD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoJiZoLm5leHQoVCl9O3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsXywhMCksKCk9PnthLnJlbW92''@;'; put 'put ''ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsXywhMCl9fSkpKSxpcyguLi5kKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZm9yRWFjaChhPT50aGlzLnJlbW92ZURyYWdJdGVtKGEpKSx0aGlzLl9kcm9wSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcm9wQ29udGFp''@;'; put 'put ''bmVyKGEpKSx0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpLHRoaXMucG9pbnRlck1vdmUuY29tcGxldGUoKSx0aGlzLnBvaW50ZXJVcC5jb21wbGV0ZSgpfV9jbGVhckdsb2JhbExpc3RlbmVycygpe3RoaXMuX2dsb2JhbExpc3RlbmVycy5mb3JFYWNoKChhLGQpPT57dGhpcy5fZG9jdW1l''@;'; put 'put ''bnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLGEuaGFuZGxlcixhLm9wdGlvbnMpfSksdGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihMcykpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2Vu''@;'; put 'put ''OmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NvbnN0IHlCZT17ZHJhZ1N0YXJ0VGhyZXNob2xkOjUscG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1fTtsZXQgb1U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9k''@;'; put 'put ''b2N1bWVudD1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX3ZpZXdwb3J0UnVsZXI9aCx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5PWZ9Y3JlYXRlRHJhZyhhLGQ9eUJlKXtyZXR1cm4gbmV3IHBCZShhLGQsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5f''@;'; put 'put ''ZHJhZ0Ryb3BSZWdpc3RyeSl9Y3JlYXRlRHJvcExpc3QoYSl7cmV0dXJuIG5ldyB2QmUoYSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LHRoaXMuX2RvY3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu''@;'; put 'put ''ZXcoYXx8YykoYXIoTHMpLGFyKE5vKSxhcihVVmUpLGFyKGJCZSkpfSxjLlx1MDI3NXByb3Y9ZHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NvbnN0IHNVPW5ldyBNaSgiQ0RLX0RSQUdfUEFSRU5UIiksYVU9bmV3IE1pKCJDZGtEcm9w''@;'; put 'put ''TGlzdEdyb3VwIik7bGV0IHBzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faXRlbXM9bmV3IFNldCx0aGlzLl9kaXNhYmxlZD0hMX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWE0KGEpfW5nT25E''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5faXRlbXMuY2xlYXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0Ryb3BMaXN0R3JvdXAiLCIiXV0saW5wdXRzOntkaXNhYmxlZDpbImNka0Ry''@;'; put 'put ''b3BMaXN0R3JvdXBEaXNhYmxlZCIsImRpc2FibGVkIl19LGV4cG9ydEFzOlsiY2RrRHJvcExpc3RHcm91cCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTphVSx1c2VFeGlzdGluZzpjfV0pXX0pLGN9KSgpO2NvbnN0IGdzZT1uZXcgTWkoIkNES19EUkFHX0NPTkZJRyIp''@;'; put 'put ''O2xldCB3QmU9MDtjb25zdCBtc2U9bmV3IE1pKCJDZGtEcm9wTGlzdCIpO2xldCB2c2U9KCgpPT57Y2xhc3MgY3tnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEhdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kcm9w''@;'; put 'put ''TGlzdFJlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZD1hNChhKX1jb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1oLHRoaXMuX3Njcm9sbERpc3BhdGNoZXI9Zix0aGlzLl9kaXI9Xyx0aGlzLl9ncm91cD1ULHRoaXMuX2Rl''@;'; put 'put ''c3Ryb3llZD1uZXcgYmUsdGhpcy5jb25uZWN0ZWRUbz1bXSx0aGlzLmlkPSJjZGstZHJvcC1saXN0LSIrd0JlKyssdGhpcy5lbnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGljYXRlPSgpPT4hMCx0aGlzLmRyb3BwZWQ9bmV3IEVyLHRoaXMuZW50ZXJlZD1uZXcgRXIsdGhpcy5l''@;'; put 'put ''eGl0ZWQ9bmV3IEVyLHRoaXMuc29ydGVkPW5ldyBFcix0aGlzLl91bnNvcnRlZEl0ZW1zPW5ldyBTZXQsdGhpcy5fZHJvcExpc3RSZWY9ZC5jcmVhdGVEcm9wTGlzdChhKSx0aGlzLl9kcm9wTGlzdFJlZi5kYXRhPXRoaXMsVyYmdGhpcy5fYXNzaWduRGVmYXVsdHMoVyksdGhpcy5fZHJvcExp''@;'; put 'put ''c3RSZWYuZW50ZXJQcmVkaWNhdGU9KGllLGdlKT0+dGhpcy5lbnRlclByZWRpY2F0ZShpZS5kYXRhLGdlLmRhdGEpLHRoaXMuX2Ryb3BMaXN0UmVmLnNvcnRQcmVkaWNhdGU9KGllLGdlLHdlKT0+dGhpcy5zb3J0UHJlZGljYXRlKGllLGdlLmRhdGEsd2UuZGF0YSksdGhpcy5fc2V0dXBJbnB1''@;'; put 'put ''dFN5bmNTdWJzY3JpcHRpb24odGhpcy5fZHJvcExpc3RSZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcm9wTGlzdFJlZiksYy5fZHJvcExpc3RzLnB1c2godGhpcyksVCYmVC5faXRlbXMuYWRkKHRoaXMpfWFkZEl0ZW0oYSl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5hZGQoYSksdGhpcy5f''@;'; put 'put ''ZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCl9cmVtb3ZlSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmRlbGV0ZShhKSx0aGlzLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKX1nZXRTb3J0ZWRJdGVt''@;'; put 'put ''cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3Vuc29ydGVkSXRlbXMpLnNvcnQoKGEsZCk9PmEuX2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05f''@;'; put 'put ''Rk9MTE9XSU5HPy0xOjEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT1jLl9kcm9wTGlzdHMuaW5kZXhPZih0aGlzKTthPi0xJiZjLl9kcm9wTGlzdHMuc3BsaWNlKGEsMSksdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9pdGVtcy5kZWxldGUodGhpcyksdGhpcy5fdW5zb3J0ZWRJdGVtcy5jbGVh''@;'; put 'put ''cigpLHRoaXMuX2Ryb3BMaXN0UmVmLmRpc3Bvc2UoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbihhKXt0aGlzLl9kaXImJnRoaXMuX2Rpci5jaGFuZ2UucGlwZShjcCh0aGlzLl9kaXIudmFsdWUp''@;'; put 'put ''LGFoKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShkPT5hLndpdGhEaXJlY3Rpb24oZCkpLGEuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIGtWZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9jOltjXX0odGhpcy5jb25uZWN0ZWRUbykubWFwKGg9''@;'; put 'put ''PiJzdHJpbmciPT10eXBlb2YgaD9jLl9kcm9wTGlzdHMuZmluZChfPT5fLmlkPT09aCk6aCk7aWYodGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9pdGVtcy5mb3JFYWNoKGg9PnstMT09PWQuaW5kZXhPZihoKSYmZC5wdXNoKGgpfSksIXRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQp''@;'; put 'put ''e2NvbnN0IGg9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModGhpcy5lbGVtZW50KS5tYXAoZj0+Zi5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCk7dGhpcy5fZHJvcExpc3RSZWYud2l0aFNjcm9sbGFibGVQYXJlbnRzKGgpLHRoaXMuX3Nj''@;'; put 'put ''cm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQ9ITB9YS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLnNvcnRpbmdEaXNhYmxlZD1hNCh0aGlzLnNvcnRpbmdEaXNhYmxlZCksYS5hdXRvU2Nyb2xsRGlzYWJsZWQ9YTQodGhpcy5hdXRvU2Nyb2xsRGlzYWJs''@;'; put 'put ''ZWQpLGEuYXV0b1Njcm9sbFN0ZXA9Qm9lKHRoaXMuYXV0b1Njcm9sbFN0ZXAsMiksYS5jb25uZWN0ZWRUbyhkLmZpbHRlcihoPT5oJiZoIT09dGhpcykubWFwKGg9PmguX2Ryb3BMaXN0UmVmKSkud2l0aE9yaWVudGF0aW9uKHRoaXMub3JpZW50YXRpb24pfSl9X2hhbmRsZUV2ZW50cyhhKXth''@;'; put 'put ''LmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVt''@;'; put 'put ''LmRhdGEsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4fSl9KSxhLmV4aXRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuc29ydGVkLnN1''@;'; put 'put ''YnNjcmliZShkPT57dGhpcy5zb3J0ZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGF9KX0pLGEuZHJvcHBlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZHJvcHBlZC5lbWl0''@;'; put 'put ''KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6ZC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06ZC5pdGVtLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRh''@;'; put 'put ''aW5lcjpkLmlzUG9pbnRlck92ZXJDb250YWluZXIsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksaXMoYS5yZWNlaXZpbmdTdGFydGVkLGEucmVjZWl2aW5nU3Rv''@;'; put 'put ''cHBlZCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ2dpbmdEaXNhYmxlZDpoLHNvcnRpbmdEaXNhYmxlZDpmLGxpc3RBdXRvU2Nyb2xsRGlzYWJsZWQ6XyxsaXN0T3Jp''@;'; put 'put ''ZW50YXRpb246VH09YTt0aGlzLmRpc2FibGVkPWg/PyExLHRoaXMuc29ydGluZ0Rpc2FibGVkPWY/PyExLHRoaXMuYXV0b1Njcm9sbERpc2FibGVkPV8/PyExLHRoaXMub3JpZW50YXRpb249VHx8InZlcnRpY2FsIixkJiYodGhpcy5sb2NrQXhpcz1kKX1fc3luY0l0ZW1zV2l0aFJlZigpe3Ro''@;'; put 'put ''aXMuX2Ryb3BMaXN0UmVmLndpdGhJdGVtcyh0aGlzLmdldFNvcnRlZEl0ZW1zKCkubWFwKGE9PmEuX2RyYWdSZWYpKX19cmV0dXJuIGMuX2Ryb3BMaXN0cz1bXSxjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSx0dChvVSksdHQoVWEpLHR0KGpWZSksdHQo''@;'; put 'put ''S29lLDgpLHR0KGFVLDEyKSx0dChnc2UsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdCIsIiJdLFsiY2RrLWRyb3AtbGlzdCJdXSxob3N0QXR0cnM6WzEsImNkay1kcm9wLWxpc3QiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihhLGQpezImYSYmKFRyKCJpZCIsZC5pZCksaHIoImNkay1kcm9wLWxpc3QtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJjZGstZHJvcC1saXN0LWRyYWdnaW5nIixkLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkpKCJjZGstZHJvcC1saXN0LXJlY2VpdmluZyIsZC5fZHJvcExpc3RSZWYuaXNS''@;'; put 'put ''ZWNlaXZpbmcoKSkpfSxpbnB1dHM6e2Nvbm5lY3RlZFRvOlsiY2RrRHJvcExpc3RDb25uZWN0ZWRUbyIsImNvbm5lY3RlZFRvIl0sZGF0YTpbImNka0Ryb3BMaXN0RGF0YSIsImRhdGEiXSxvcmllbnRhdGlvbjpbImNka0Ryb3BMaXN0T3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiJdLGlkOiJp''@;'; put 'put ''ZCIsbG9ja0F4aXM6WyJjZGtEcm9wTGlzdExvY2tBeGlzIiwibG9ja0F4aXMiXSxkaXNhYmxlZDpbImNka0Ryb3BMaXN0RGlzYWJsZWQiLCJkaXNhYmxlZCJdLHNvcnRpbmdEaXNhYmxlZDpbImNka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkIiwic29ydGluZ0Rpc2FibGVkIl0sZW50ZXJQcmVk''@;'; put 'put ''aWNhdGU6WyJjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlIiwiZW50ZXJQcmVkaWNhdGUiXSxzb3J0UHJlZGljYXRlOlsiY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlIiwic29ydFByZWRpY2F0ZSJdLGF1dG9TY3JvbGxEaXNhYmxlZDpbImNka0Ryb3BMaXN0QXV0b1Njcm9sbERpc2FibGVkIiwi''@;'; put 'put ''YXV0b1Njcm9sbERpc2FibGVkIl0sYXV0b1Njcm9sbFN0ZXA6WyJjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwIiwiYXV0b1Njcm9sbFN0ZXAiXX0sb3V0cHV0czp7ZHJvcHBlZDoiY2RrRHJvcExpc3REcm9wcGVkIixlbnRlcmVkOiJjZGtEcm9wTGlzdEVudGVyZWQiLGV4aXRlZDoiY2RrRHJv''@;'; put 'put ''cExpc3RFeGl0ZWQiLHNvcnRlZDoiY2RrRHJvcExpc3RTb3J0ZWQifSxleHBvcnRBczpbImNka0Ryb3BMaXN0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdGkoW3twcm92aWRlOmFVLHVzZVZhbHVlOnZvaWQgMH0se3Byb3ZpZGU6bXNlLHVzZUV4aXN0aW5nOmN9XSldfSksY30pKCk7Y29u''@;'; put 'put ''c3QgbFU9bmV3IE1pKCJDZGtEcmFnSGFuZGxlIik7bGV0IF9zZT0oKCk9PntjbGFzcyBje2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9YTQoYSksdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQodGhpcyl9Y29uc3RydWN0''@;'; put 'put ''b3IoYSxkKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IGJlLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3BhcmVudERyYWc9ZH1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoc1UsMTIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZ0hhbmRsZSIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnLWhhbmRsZSJdLGlucHV0czp7ZGlzYWJsZWQ6WyJjZGtEcmFnSGFuZGxlRGlzYWJsZWQi''@;'; put 'put ''LCJkaXNhYmxlZCJdfSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6bFUsdXNlRXhpc3Rpbmc6Y31dKV19KSxjfSkoKTtjb25zdCBic2U9bmV3IE1pKCJDZGtEcmFnUGxhY2Vob2xkZXIiKSx5c2U9bmV3IE1pKCJDZGtEcmFnUHJldmlldyIpO2xldCB3c2U9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hNChhKSx0aGlzLl9kcmFnUmVmLmRpc2FibGVkPXRoaXMuX2Rpc2FibGVk''@;'; put 'put ''fWNvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUsZ2Usd2UsRWUpe3RoaXMuZWxlbWVudD1hLHRoaXMuZHJvcENvbnRhaW5lcj1kLHRoaXMuX25nWm9uZT1mLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9Xyx0aGlzLl9kaXI9Vyx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1nZSx0aGlzLl9zZWxm''@;'; put 'put ''SGFuZGxlPXdlLHRoaXMuX3BhcmVudERyYWc9RWUsdGhpcy5fZGVzdHJveWVkPW5ldyBiZSx0aGlzLnN0YXJ0ZWQ9bmV3IEVyLHRoaXMucmVsZWFzZWQ9bmV3IEVyLHRoaXMuZW5kZWQ9bmV3IEVyLHRoaXMuZW50ZXJlZD1uZXcgRXIsdGhpcy5leGl0ZWQ9bmV3IEVyLHRoaXMuZHJvcHBlZD1u''@;'; put 'put ''ZXcgRXIsdGhpcy5tb3ZlZD1uZXcgS2UoWmU9Pntjb25zdCBvdD10aGlzLl9kcmFnUmVmLm1vdmVkLnBpcGUoTWUoZXQ9Pih7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOmV0LnBvaW50ZXJQb3NpdGlvbixldmVudDpldC5ldmVudCxkZWx0YTpldC5kZWx0YSxkaXN0YW5jZTpldC5kaXN0''@;'; put 'put ''YW5jZX0pKSkuc3Vic2NyaWJlKFplKTtyZXR1cm4oKT0+e290LnVuc3Vic2NyaWJlKCl9fSksdGhpcy5fZHJhZ1JlZj1pZS5jcmVhdGVEcmFnKGEse2RyYWdTdGFydFRocmVzaG9sZDpUJiZudWxsIT1ULmRyYWdTdGFydFRocmVzaG9sZD9ULmRyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJE''@;'; put 'put ''aXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6VCYmbnVsbCE9VC5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkP1QucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1LHpJbmRleDpUPy56SW5kZXh9KSx0aGlzLl9kcmFnUmVmLmRhdGE9dGhpcyxjLl9kcmFnSW5zdGFuY2VzLnB1''@;'; put 'put ''c2godGhpcyksVCYmdGhpcy5fYXNzaWduRGVmYXVsdHMoVCksZCYmKHRoaXMuX2RyYWdSZWYuX3dpdGhEcm9wQ29udGFpbmVyKGQuX2Ryb3BMaXN0UmVmKSxkLmFkZEl0ZW0odGhpcykpLHRoaXMuX3N5bmNJbnB1dHModGhpcy5fZHJhZ1JlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2Ry''@;'; put 'put ''YWdSZWYpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0Um9vdEVsZW1lbnQoKX1yZXNldCgpe3RoaXMuX2RyYWdSZWYucmVzZXQoKX1nZXRG''@;'; put 'put ''cmVlRHJhZ1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0RnJlZURyYWdQb3NpdGlvbigpfXNldEZyZWVEcmFnUG9zaXRpb24oYSl7dGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5n''@;'; put 'put ''dWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKGlkKDEpLGFoKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksdGhpcy5fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKSx0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2Ry''@;'; put 'put ''YWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfSl9KX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEucm9vdEVsZW1lbnRTZWxlY3RvcixoPWEuZnJlZURyYWdQb3NpdGlvbjtkJiYhZC5maXJzdENoYW5nZSYmdGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSxo''@;'; put 'put ''JiYhaC5maXJzdENoYW5nZSYmdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX1uZ09uRGVzdHJveSgpe3RoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLnJlbW92ZUl0ZW0odGhp''@;'; put 'put ''cyk7Y29uc3QgYT1jLl9kcmFnSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJhZ0luc3RhbmNlcy5zcGxpY2UoYSwxKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRo''@;'; put 'put ''aXMuX2RyYWdSZWYuZGlzcG9zZSgpfSl9X3VwZGF0ZVJvb3RFbGVtZW50KCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtsZXQgZD1hO3RoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmKGQ9dm9pZCAwIT09YS5jbG9zZXN0P2EuY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2Vs''@;'; put 'put ''ZWN0b3IpOmEucGFyZW50RWxlbWVudD8uY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpKSx0aGlzLl9kcmFnUmVmLndpdGhSb290RWxlbWVudChkfHxhKX1fZ2V0Qm91bmRhcnlFbGVtZW50KCl7Y29uc3QgYT10aGlzLmJvdW5kYXJ5RWxlbWVudDtyZXR1cm4gYT8ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGE/dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xvc2VzdChhKTpQMChhKTpudWxsfV9zeW5jSW5wdXRzKGEpe2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9PntpZighYS5pc0RyYWdnaW5nKCkpe2NvbnN0IGQ9dGhpcy5fZGlyLGg9dGhpcy5kcmFnU3RhcnREZWxheSxm''@;'; put 'put ''PXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLmRhdGEsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsLF89dGhpcy5f''@;'; put 'put ''cHJldmlld1RlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wcmV2aWV3VGVtcGxhdGUuZGF0YSxtYXRjaFNpemU6dGhpcy5fcHJldmlld1RlbXBsYXRlLm1hdGNoU2l6ZSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250''@;'; put 'put ''YWluZXJSZWZ9Om51bGw7YS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLmRyYWdTdGFydERlbGF5PSJvYmplY3QiPT10eXBlb2YgaCYmaD9oOkJvZShoKSxhLmNvbnN0cmFpblBvc2l0aW9uPXRoaXMuY29uc3RyYWluUG9zaXRpb24sYS5wcmV2aWV3''@;'; put 'put ''Q2xhc3M9dGhpcy5wcmV2aWV3Q2xhc3MsYS53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuX2dldEJvdW5kYXJ5RWxlbWVudCgpKS53aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShmKS53aXRoUHJldmlld1RlbXBsYXRlKF8pLndpdGhQcmV2aWV3Q29udGFpbmVyKHRoaXMucHJldmlld0NvbnRhaW5l''@;'; put 'put ''cnx8Imdsb2JhbCIpLGQmJmEud2l0aERpcmVjdGlvbihkLnZhbHVlKX19KSxhLmJlZm9yZVN0YXJ0ZWQucGlwZShpZCgxKSkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fcGFyZW50RHJhZylyZXR1cm4gdm9pZCBhLndpdGhQYXJlbnQodGhpcy5fcGFyZW50RHJhZy5fZHJhZ1JlZik7bGV0IGQ9''@;'; put 'put ''dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2Q7KXtpZihkLmNsYXNzTGlzdC5jb250YWlucygiY2RrLWRyYWciKSl7YS53aXRoUGFyZW50KGMuX2RyYWdJbnN0YW5jZXMuZmluZChoPT5oLmVsZW1lbnQubmF0aXZlRWxlbWVudD09PWQpPy5fZHJhZ1JlZnx8''@;'; put 'put ''bnVsbCk7YnJlYWt9ZD1kLnBhcmVudEVsZW1lbnR9fSl9X2hhbmRsZUV2ZW50cyhhKXthLnN0YXJ0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnN0YXJ0ZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5y''@;'; put 'put ''ZWxlYXNlZC5zdWJzY3JpYmUoZD0+e3RoaXMucmVsZWFzZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pfSksYS5lbmRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW5kZWQuZW1pdCh7c291cmNlOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQs''@;'; put 'put ''ZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpcyxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9''@;'; put 'put ''KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVu''@;'; put 'put ''dEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixpdGVtOnRoaXMsZGlzdGFuY2U6ZC5kaXN0''@;'; put 'put ''YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pfSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ1N0YXJ0RGVsYXk6aCxjb25zdHJhaW5Qb3NpdGlvbjpmLHByZXZpZXdDbGFzczpfLGJvdW5kYXJ5RWxlbWVudDpULGRyYWdnaW5nRGlzYWJs''@;'; put 'put ''ZWQ6Vyxyb290RWxlbWVudFNlbGVjdG9yOmllLHByZXZpZXdDb250YWluZXI6Z2V9PWE7dGhpcy5kaXNhYmxlZD1XPz8hMSx0aGlzLmRyYWdTdGFydERlbGF5PWh8fDAsZCYmKHRoaXMubG9ja0F4aXM9ZCksZiYmKHRoaXMuY29uc3RyYWluUG9zaXRpb249ZiksXyYmKHRoaXMucHJldmlld0Ns''@;'; put 'put ''YXNzPV8pLFQmJih0aGlzLmJvdW5kYXJ5RWxlbWVudD1UKSxpZSYmKHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcj1pZSksZ2UmJih0aGlzLnByZXZpZXdDb250YWluZXI9Z2UpfV9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpe3RoaXMuX2hhbmRsZXMuY2hhbmdlcy5waXBlKGNwKHRoaXMuX2hhbmRs''@;'; put 'put ''ZXMpLHpjKGE9Pntjb25zdCBkPWEuZmlsdGVyKGg9PmguX3BhcmVudERyYWc9PT10aGlzKS5tYXAoaD0+aC5lbGVtZW50KTt0aGlzLl9zZWxmSGFuZGxlJiZ0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJmQucHVzaCh0aGlzLmVsZW1lbnQpLHRoaXMuX2RyYWdSZWYud2l0aEhhbmRsZXMoZCl9''@;'; put 'put ''KSxTYShhPT5pcyguLi5hLm1hcChkPT5kLl9zdGF0ZUNoYW5nZXMucGlwZShjcChkKSkpKSksYWgodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGE9Pntjb25zdCBkPXRoaXMuX2RyYWdSZWYsaD1hLmVsZW1lbnQubmF0aXZlRWxlbWVudDthLmRpc2FibGVkP2QuZGlzYWJsZUhhbmRsZSho''@;'; put 'put ''KTpkLmVuYWJsZUhhbmRsZShoKX0pfX1yZXR1cm4gYy5fZHJhZ0luc3RhbmNlcz1bXSxjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSx0dChtc2UsMTIpLHR0KExzKSx0dChObyksdHQoYXMpLHR0KGdzZSw4KSx0dChLb2UsOCksdHQob1UpLHR0KFVhKSx0''@;'; put 'put ''dChsVSwxMCksdHQoc1UsMTIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoSW8oaCx5c2UsNSksSW8oaCxic2UsNSksSW8oaCxsVSw1KSksMiZhKXtsZXQgZjtzaShm''@;'; put 'put ''PWFpKCkpJiYoZC5fcHJldmlld1RlbXBsYXRlPWYuZmlyc3QpLHNpKGY9YWkoKSkmJihkLl9wbGFjZWhvbGRlclRlbXBsYXRlPWYuZmlyc3QpLHNpKGY9YWkoKSkmJihkLl9oYW5kbGVzPWYpfX0saG9zdEF0dHJzOlsxLCJjZGstZHJhZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7MiZhJiZocigiY2RrLWRyYWctZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJjZGstZHJhZy1kcmFnZ2luZyIsZC5fZHJhZ1JlZi5pc0RyYWdnaW5nKCkpfSxpbnB1dHM6e2RhdGE6WyJjZGtEcmFnRGF0YSIsImRhdGEiXSxsb2NrQXhpczpbImNka0RyYWdMb2NrQXhpcyIsImxvY2tB''@;'; put 'put ''eGlzIl0scm9vdEVsZW1lbnRTZWxlY3RvcjpbImNka0RyYWdSb290RWxlbWVudCIsInJvb3RFbGVtZW50U2VsZWN0b3IiXSxib3VuZGFyeUVsZW1lbnQ6WyJjZGtEcmFnQm91bmRhcnkiLCJib3VuZGFyeUVsZW1lbnQiXSxkcmFnU3RhcnREZWxheTpbImNka0RyYWdTdGFydERlbGF5IiwiZHJh''@;'; put 'put ''Z1N0YXJ0RGVsYXkiXSxmcmVlRHJhZ1Bvc2l0aW9uOlsiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJmcmVlRHJhZ1Bvc2l0aW9uIl0sZGlzYWJsZWQ6WyJjZGtEcmFnRGlzYWJsZWQiLCJkaXNhYmxlZCJdLGNvbnN0cmFpblBvc2l0aW9uOlsiY2RrRHJhZ0NvbnN0cmFpblBvc2l0aW9uIiwi''@;'; put 'put ''Y29uc3RyYWluUG9zaXRpb24iXSxwcmV2aWV3Q2xhc3M6WyJjZGtEcmFnUHJldmlld0NsYXNzIiwicHJldmlld0NsYXNzIl0scHJldmlld0NvbnRhaW5lcjpbImNka0RyYWdQcmV2aWV3Q29udGFpbmVyIiwicHJldmlld0NvbnRhaW5lciJdfSxvdXRwdXRzOntzdGFydGVkOiJjZGtEcmFnU3Rh''@;'; put 'put ''cnRlZCIscmVsZWFzZWQ6ImNka0RyYWdSZWxlYXNlZCIsZW5kZWQ6ImNka0RyYWdFbmRlZCIsZW50ZXJlZDoiY2RrRHJhZ0VudGVyZWQiLGV4aXRlZDoiY2RrRHJhZ0V4aXRlZCIsZHJvcHBlZDoiY2RrRHJhZ0Ryb3BwZWQiLG1vdmVkOiJjZGtEcmFnTW92ZWQifSxleHBvcnRBczpbImNka0Ry''@;'; put 'put ''YWciXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6c1UsdXNlRXhpc3Rpbmc6Y31dKSx2YV19KSxjfSkoKSxDc2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9''@;'; put 'put ''KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOltvVV0saW1wb3J0czpbWlZlXX0pLGN9KSgpO2NvbnN0IFVnPXZvaWQgMCxFQmU9WyJlbi1HQiIsW1siYSIsInAiXSxbImFtIiwicG0iXSxVZ10sW1siYW0iLCJwbSJdLFVnLFVnXSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJT''@;'; put 'put ''dW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxVZyxbWyJKIiwiRiIs''@;'; put 'put ''Ik0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcHQiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5l''@;'; put 'put ''IiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLFVnLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMSxbNiwwXSxbImRkL01NL3kiLCJkIE1NTSB5IiwiZCBNTU1NIHkiLCJF''@;'; put 'put ''RUVFLCBkIE1NTU0geSJdLFsiSEg6bW0iLCJISDptbTpzcyIsIkhIOm1tOnNzIHoiLCJISDptbTpzcyB6enp6Il0sWyJ7MX0sIHswfSIsVWcsInsxfSAnYXQnIHswfSIsVWddLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0s''@;'; put 'put ''WyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiR0JQIiwiXHhhMyIsIkJyaXRpc2ggUG91bmQiLHtKUFk6WyJKUFx4YTUiLCJceGE1Il0sVVNEOlsiVVMkIiwiJCJdfSwibHRyIixmdW5jdGlvbiB4QmUoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMp''@;'; put 'put ''KSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09ZD8xOjV9XSxrQmU9WyJpbnB1dCJdO2Z1bmN0aW9uIEFCZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWplKCk7Q2Uo''@;'; put 'put ''MSksbXIoIiAiLGEubG9hZGluZ01vcmU/IkxvYWRpbmcuLi4iOiJMT0FEIE1PUkUiLCIgIil9fWNvbnN0IFRCZT1mdW5jdGlvbihjLGwpe3JldHVybnsid2lkdGgucHgiOmMsIm1heC1oZWlnaHQucHgiOmx9fSxEQmU9WyIqIl07bGV0IFNzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp''@;'; put 'put ''e3RoaXMuY2RyPWEsdGhpcy5pbnB1dElkPSIiLHRoaXMucGxhY2Vob2xkZXI9IiIsdGhpcy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5hdXRvY29tcGxldGU9Im9mZiIsdGhpcy50YWJpbmRleD0iIix0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhp''@;'; put 'put ''cy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLm9uSW5wdXRLZXlkb3duPW5ldyBFcix0aGlzLm9uSW5wdXRDaGFuZ2U9bmV3IEVyLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEVyLHRoaXMub25Mb2FkaW5nTW9yZT1uZXcgRXIsdGhpcy5kYXRhbGlzdE9wZW49ITEsdGhpcy5hZnRlck9wZW5Mb2NrRGVs''@;'; put 'put ''YXk9MTUwLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLmlucHV0Q2xpZW50UmVjdD17fSx0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMubG9hZGluZ01vcmU9ITF9bmdPbkluaXQoKXt9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgo''@;'; put 'put ''KT0+e3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfSw1MDApfW9uSW5wdXRGaXJlZChhLGQsaCl7dGhpcy5vcGVuRGF0YWxpc3QoImNsaWNrIiE9PWgpLHRoaXMudW5zZWxlY3RBbGxPcHRpb25zKCksdGhpcy5maWx0ZXJPcHRpb25zTGlzdCgpLCghdGhpcy5lbWl0T25seVNlbGVjdGVk''@;'; put 'put ''fHxkKSYmKHRoaXMub25JbnB1dENoYW5nZS5lbWl0KHt0YXJnZXQ6e3ZhbHVlOnRoaXMudmFsdWV9fSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpKX1vbklucHV0Q2xpY2soYSl7dGhpcy5vcGVuRGF0YWxpc3QoKX1vcGVuRGF0YWxpc3QoYT0hMCl7dGhpcy5kYXRhbGlzdE9w''@;'; put 'put ''ZW49ITAsYSYmKHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMCx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuYWZ0ZXJPcGVuTG9jaz0hMX0sdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXkpKX1jbG9zZURhdGFsaXN0KCl7Y2xlYXJUaW1lb3V0KHRoaXMuYWZ0''@;'; put 'put ''ZXJPcGVuTG9ja0RlbGF5VGltZW91dCksdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuZGF0YWxpc3RPcGVuPSExfXJlc2V0RGF0YWxpc3RGaWx0ZXIoKXt0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCEwKX1vbklucHV0Rm9jdXNpbihhKXt0aGlzLmlucHV0Rm9jdXNlZD0hMH1vbklucHV0Rm9j''@;'; put 'put ''dXNvdXQoYSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbklucHV0TW91c2VlbnRlcihhKXt0aGlzLmlucHV0Q2xpZW50UmVjdC53aWR0aHx8dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9ZmlsdGVyT3B0aW9uc0xpc3QoYSl7Y29uc3QgZD1k''@;'; put 'put ''b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07aWYoMD09PXRoaXMudmFsdWUubGVuZ3RoKXtmLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVl''@;'; put 'put ''fWlmKGEpe2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9Y29uc3QgXz1mLmlubmVyVGV4dHx8IiIsVD1mLnZhbHVlfHwiIjsoXytUKT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnZhbHVlLnRvTG93ZXJDYXNlKCkpP2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVu''@;'; put 'put ''Iik6Zi5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKX19c2V0VG9DbG9zZURhdGFsaXN0KCl7dGhpcy5kYXRhbGlzdENsb3NlVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZXx8dGhpcy5hZnRlck9wZW5Mb2NrfHwodGhpcy5jbG9zZURhdGFsaXN0KCksdGhp''@;'; put 'put ''cy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLnJlc2V0RGF0YWxpc3RGaWx0ZXIoKSl9LDEwMCl9Y2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpe2NvbnN0IGQ9dGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC53aWR0aD4wJiZkLmhlaWdo''@;'; put 'put ''dD4wJiYodGhpcy5pbnB1dENsaWVudFJlY3Q9e3dpZHRoOmQud2lkdGgsYm90dG9tOmQuYm90dG9tfSksdGhpcy5pbm5lckhlaWdodD13aW5kb3cuaW5uZXJIZWlnaHR9b25EYXRhTGlzdE1vdXNlRW50ZXIoYSl7dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMH1vbkRhdGFMaXN0TW91c2VM''@;'; put 'put ''ZWF2ZShhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1vbkRhdGFMaXN0U2Nyb2xsKGEpe3RoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9b25EYXRhTGlzdENsaWNrKGEpe2NvbnN0IGQ9YS50YXJnZXQ7ImxvYWQt''@;'; put 'put ''bW9yZSIhPT1kLmRhdGFzZXQ/LnR5cGU/Ik9QVElPTiIhPT1kLnRhZ05hbWV8fHRoaXMuc2V0T3B0aW9uVmFsdWUoZC5pbm5lclRleHQsZC52YWx1ZSk6dGhpcy5sb2FkTW9yZSgpfWxvYWRNb3JlKCl7dGhpcy5vbkxvYWRpbmdNb3JlLmVtaXQoe2xvYWRNb3JlRmluaXNoZWQ6YT0+e3RoaXMu''@;'; put 'put ''bG9hZGluZ01vcmU9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT1hfX0pLHRoaXMubG9hZGluZ01vcmU9ITB9c2V0T3B0aW9uVmFsdWUoYSxkKXsoYXx8ZCkmJihkfHwoZD1hKSksZCYmKHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy52YWx1ZT1kLHRoaXMub25JbnB1dEZpcmVkKG51''@;'; put 'put ''bGwsITAsImNsaWNrIiksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSl9b25NYWluS2V5ZG93bihhKXtzd2l0Y2goYS5rZXkpe2Nhc2UiQXJyb3dVcCI6dGhpcy5nZXRPcHRpb25zTW92ZUZvY3VzKCJ1cCIpO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMo''@;'; put 'put ''ImRvd24iKTticmVhaztjYXNlIkVudGVyIjp0aGlzLnNlbGVjdEZvY3VzZWRPcHRpb24oKX19b25JbnB1dEtleXVwKGEpe3JldHVybiF0aGlzLmRhdGFsaXN0T3Blbnx8KCJFc2NhcGUiPT09YS5rZXk/KGEuc3RvcFByb3BhZ2F0aW9uKCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0''@;'; put 'put ''aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpLCExKTp2b2lkIDApfXVuc2VsZWN0QWxsT3B0aW9ucygpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb25gKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdLmNsYXNz''@;'; put 'put ''TGlzdC5yZW1vdmUoImZvY3VzZWQiKX1zZWxlY3RGb2N1c2VkT3B0aW9uKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbi5mb2N1c2VkYCk7YSYmdGhpcy5vbkRhdGFMaXN0Q2xpY2soe3RhcmdldDphfSksdGhpcy5zZXRU''@;'; put 'put ''b0Nsb3NlRGF0YWxpc3QoKX1nZXRPcHRpb25zTW92ZUZvY3VzKGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb246bm90KC5oaWRkZW4pYCk7bGV0IGg9MDtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyl7Y29uc3Qg''@;'; put 'put ''Xz1kW2ZdO2lmKF8uY2xhc3NMaXN0LmNvbnRhaW5zKCJmb2N1c2VkIikpe2g9ImRvd24iPT09YT9mKzE6Zi0xLGg8MCYmKGg9ZC5sZW5ndGgtMSksaD5kLmxlbmd0aC0xJiYoaD0wKSxfLmNsYXNzTGlzdC5yZW1vdmUoImZvY3VzZWQiKTticmVha319ZFtoXS5jbGFzc0xpc3QuYWRkKCJmb2N1''@;'; put 'put ''c2VkIil9b25SZXNpemUoYSl7dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hdXRvY29tcGxldGUiXV0sdmll''@;'; put 'put ''d1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhrQmUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5pbnB1dEVsZW1lbnQ9aC5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJyZXNpemUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uUmVzaXplKGYp''@;'; put 'put ''fSwwLG02KX0saW5wdXRzOntpbnB1dElkOiJpbnB1dElkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHZhbHVlOiJ2YWx1ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixhdXRvY29tcGxldGU6ImF1dG9jb21wbGV0ZSIsdGFiaW5kZXg6InRhYmluZGV4IixlbWl0T25seVNl''@;'; put 'put ''bGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOntvbklucHV0S2V5ZG93bjoib25JbnB1dEtleWRvd24iLG9uSW5wdXRDaGFuZ2U6Im9uSW5wdXRDaGFuZ2UiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsb25Mb2FkaW5n''@;'; put 'put ''TW9yZToib25Mb2FkaW5nTW9yZSJ9LG5nQ29udGVudFNlbGVjdG9yczpEQmUsZGVjbHM6OSx2YXJzOjE1LGNvbnN0czpbWzEsImF1dG9jb21wbGV0ZS13cmFwcGVyIiwzLCJrZXlkb3duIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInRhYmlu''@;'; put 'put ''ZGV4IiwiMCIsMSwiaW5wdXQtdmFsIiwzLCJpZCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSIsImNsaWNrIiwibW91c2VlbnRlciIsImZvY3VzIiwiZm9jdXNvdXQiLCJrZXl1cCJdLFsiaW5wdXQiLCIiXSxbMSwib3ZlcmxheSJdLFsxLCJkYXRh''@;'; put 'put ''bGlzdCIsMywibmdTdHlsZSIsImlkIiwiY2xpY2siLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInNjcm9sbCJdLFsib3B0aW9ucyIsIiJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwiY2xhc3MiLCJsb2FkLW1vcmUiLDQsIm5nSWYiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsMSwi''@;'; put 'put ''bG9hZC1tb3JlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoVGkoKSxtZSgwLCJkaXYiLDApLHh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk1haW5LZXlkb3duKGYpfSksbWUoMSwiaW5wdXQiLDEsMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYp''@;'; put 'put ''e3JldHVybiBkLnZhbHVlPWZ9KSgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uSW5wdXRDbGljayhmKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbklucHV0RmlyZWQoZil9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25JbnB1dE1v''@;'; put 'put ''dXNlZW50ZXIoZil9KSgiZm9jdXMiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uSW5wdXRGb2N1c2luKGYpfSkoImZvY3Vzb3V0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbklucHV0Rm9jdXNvdXQoZil9KSgia2V5dXAiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uSW5wdXRLZXl1cChmKX0pLHll''@;'; put 'put ''KCkscXQoMywiZGl2IiwzKSxtZSg0LCJkaXYiLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EYXRhTGlzdENsaWNrKGYpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRGF0YUxpc3RNb3VzZUVudGVyKGYpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9u''@;'; put 'put ''KGYpe3JldHVybiBkLm9uRGF0YUxpc3RNb3VzZUxlYXZlKGYpfSkoInNjcm9sbCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EYXRhTGlzdFNjcm9sbChmKX0pLG1lKDUsImRpdiIsbnVsbCw1KSxrcig3KSx5ZSgpLFFlKDgsQUJlLDIsMSwib3B0aW9uIiw2KSx5ZSgpKCkpLDImYSl7Y29uc3Qg''@;'; put 'put ''aD0kaSg2KTtDZSgxKSxSZSgiaWQiLGQuaW5wdXRJZCkoInBsYWNlaG9sZGVyIixkLnBsYWNlaG9sZGVyKSgibmdNb2RlbCIsZC52YWx1ZSkoImRpc2FibGVkIixkLmRpc2FibGVkKSxUcigibGlzdCIsImRhdGFsaXN0XyIrZC5pbnB1dElkKSxDZSgyKSxocigiaGlkZGVuIiwhZC5kYXRhbGlz''@;'; put 'put ''dE9wZW4pLENlKDEpLGhyKCJoaWRkZW4iLCFkLmRhdGFsaXN0T3BlbiksUmUoIm5nU3R5bGUiLFEyKDEyLFRCZSxkLmlucHV0Q2xpZW50UmVjdC53aWR0aCxkLmlubmVySGVpZ2h0JiZkLmlucHV0Q2xpZW50UmVjdC5ib3R0b20/ZC5pbm5lckhlaWdodC1kLmlucHV0Q2xpZW50UmVjdC5ib3R0''@;'; put 'put ''b206dm9pZCAwKSkoImlkIiwiZGF0YWxpc3RfIitkLmlucHV0SWQpLENlKDQpLFJlKCJuZ0lmIixoLmNoaWxkcmVuLmxlbmd0aD4wJiZkLmVuYWJsZUxvYWRNb3JlKX19LGRlcGVuZGVuY2llczpbWmksckcsbDEsYzEsV2EsQnMsT3NdLHN0eWxlczpbIi5pbnB1dC12YWxbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVde2JvcmRlcjowcHg7YmFja2dyb3VuZDojZmJmOGY4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7b3V0bGluZTpub25lfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXTo6LXdlYmtpdC1jYWxlbmRhci1waWNr''@;'; put 'put ''ZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxNTAwfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2JhY2tncm91bmQ6d2hpdGU7Ym94LXNoYWRvdzowIDNweCAxMHB4IC0xcHggIzAwMDAwMDJiO292ZXJmbG93OmF1dG87ei1pbmRleDoyMDAwfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVdICAgICBvcHRpb257cGFkZGluZzo1cHggMTBweDtjdXJzb3I6cG9pbnRlcn0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAg''@;'; put 'put ''b3B0aW9uOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDU4ODIzNTI5NCl9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDU4''@;'; put 'put ''ODIzNTI5NCl9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2FkLW1vcmVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTZ9Il19KSxjfSkoKSxJQmU9KCgpPT57Y2xhc3MgY3t0cmFuc2Zv''@;'; put 'put ''cm0oYSxkKXtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEubGVuZ3RoPDEpcmV0dXJuIGE7c3dpdGNoKGQpe2Nhc2UiZGF0ZSI6cmV0dXJuIEtvKGEsIkRETU1NWVlZWTpoaDptbTpzcyIpLmZvcm1hdCgiREQvTU0vWVlZWSIpO2Nhc2UidGltZSI6e2lmKCJzdHJpbmciIT10eXBlb2YgYSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGltZS4gVmFsdWUgaXMgbm90IHN0cmluZy4iKTtjb25zdCBoPXBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSksZj1wYXJzZUludChhLnNwbGl0KCI6IilbMV0pLF89cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKTtyZXR1cm5gJHtoPDEwPyIwIito''@;'; put 'put ''Omh9OiR7ZjwxMD8iMCIrZjpmfToke188MTA/IjAiK186X31gfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/YTphLnRvU3RyaW5nKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6ImRhdGVUaW1lRm9ybWF0''@;'; put 'put ''dGVyIix0eXBlOmMscHVyZTohMH0pLGN9KSgpO2NvbnN0IExCZT1bImlucHV0Il07ZnVuY3Rpb24gUkJlKGMsbCl7aWYoMSZjJiYobWUoMCwibGFiZWwiLDMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDEpLG9yKGEubGFiZWwpfX1mdW5jdGlvbiBPQmUoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9Vm4oKTt6cigwKSxtZSgxLCJjbHItZGF0ZS1jb250YWluZXIiKSgyLCJpbnB1dCIsNCkseHQoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLm9uRGF0ZUlucHV0RmlyZWQoaCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChh''@;'; put 'put ''KSxqdChqZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS5vbkZvY3VzaW5JbnB1dChoKSl9KSgibW91c2VvdmVy''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkub25JbnB1dE1vdXNlT3V0KCkpfSksYmEoMywiZGF0ZVRpbWVGb3JtYXR0ZXIiKSx5ZSgpKCksWXIoKX1pZigyJmMp''@;'; put 'put ''e2NvbnN0IGE9amUoKTtDZSgyKSxSZSgiaWQiLGEuaW5wdXRJZCkoInBsYWNlaG9sZGVyIixNNSgzLDUsYS50ZW1wLCJkYXRlIikpKCJjbHJEYXRlIixhLnZhbHVlKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLFRyKCJsaXN0IiwiZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlvbiBQQmUo''@;'; put 'put ''YyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTt6cigwKSxtZSgxLCJpbnB1dCIsNSkseHQoImlucHV0IixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS5vbklucHV0RmlyZWQoaCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLmlucHV0Rm9jdXNlZD0h''@;'; put 'put ''MCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS5vbkZvY3VzaW5JbnB1dChoKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiBCdChh''@;'; put 'put ''KSxqdChqZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkub25JbnB1dE1vdXNlT3V0KCkpfSkseWUoKSxZcigpfWlmKDImYyl7Y29uc3QgYT1qZSgpO0NlKDEpLFJlKCJ2YWx1ZSIsYS52YWx1ZSkoImlkIixhLmlucHV0''@;'; put 'put ''SWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksVHIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9uIEZCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO3pyKDApLG1lKDEsImFwcC1hdXRvY29tcGxldGUiLDYsNykseHQoIm9uSW5wdXRDaGFuZ2UiLGZ1bmN0aW9uKGgp''@;'; put 'put ''e3JldHVybiBCdChhKSxqdChqZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgib25Mb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuYXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCkpfSksa3IoMykseWUoKSxZcigpfWlmKDImYyl7Y29uc3QgYT1qZSgpO0NlKDEpLFJl''@;'; put 'put ''KCJpbnB1dElkIixhLmlucHV0SWQpKCJ2YWx1ZSIsKG51bGw9PWEudmFsdWU/bnVsbDphLnZhbHVlLnRvU3RyaW5nKCkpfHwiIikoImVuYWJsZUxvYWRNb3JlIixhLmVuYWJsZUxvYWRNb3JlKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS5lbWl0T25seVNlbGVjdGVkKSgiZGlzYWJsZWQiLGEuZGlz''@;'; put 'put ''YWJsZWQpfX1jb25zdCBIQmU9WyIqIl07bGV0IE1zZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pbnB1dElkPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuZGlzYWJsZVNvZnRzZWxlY3Q9ITEsdGhpcy5lbWl0T25seVNl''@;'; put 'put ''bGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRXIsdGhpcy5vbklucHV0RXZlbnQ9bmV3IEVyLHRoaXMuZm9jdXNpbklucHV0PW5ldyBFcix0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU9bmV3IEVyLHRoaXMudGVtcD0iIix0aGlzLmlu''@;'; put 'put ''cHV0Rm9jdXNlZD0hMX1uZ09uQ2hhbmdlcyhhKXthLnZhbHVlJiZhLnZhbHVlLmN1cnJlbnRWYWx1ZSE9PWEudmFsdWUucHJldmlvdXNWYWx1ZSYmdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEudmFsdWUuY3VycmVudFZhbHVlKX1uZ09uSW5pdCgpe31hdXRvY29tcGxldGVMb2FkaW5nTW9yZShh''@;'; put 'put ''KXt0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUuZW1pdChhKX1vbklucHV0RmlyZWQoYSl7Y29uc3QgZD1hLnRhcmdldC52YWx1ZTt0aGlzLnRlbXA9ZCx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZCksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbkRhdGVJbnB1dEZpcmVkKGEpe3Ro''@;'; put 'put ''aXMudGVtcD1hLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChhKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uSW5wdXRNb3VzZU91dCgpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnZhbHVlPXRoaXMudGVtcCx0aGlzLnRlbXA9IiIpfW9uSW5wdXRNb3VzZU92ZXIoKXt0aGlzLmRp''@;'; put 'put ''c2FibGVTb2Z0c2VsZWN0fHwodGhpcy50ZW1wPXRoaXMudmFsdWU/dGhpcy52YWx1ZToiIix0aGlzLnZhbHVlPSIiKX1vbkZvY3VzaW5JbnB1dChhKXt0aGlzLmZvY3VzaW5JbnB1dC5lbWl0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNvZnQtc2VsZWN0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oTEJlLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXRFbGVtZW50PWguZmlyc3QpfX0saW5wdXRzOntpbnB1dElkOiJpbnB1''@;'; put 'put ''dElkIixsYWJlbDoibGFiZWwiLHZhbHVlOiJ2YWx1ZSIsZGlzYWJsZWQ6ImRpc2FibGVkIix0eXBlOiJ0eXBlIixkaXNhYmxlU29mdHNlbGVjdDoiZGlzYWJsZVNvZnRzZWxlY3QiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2Fk''@;'; put 'put ''TW9yZSJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsb25JbnB1dEV2ZW50OiJvbklucHV0RXZlbnQiLGZvY3VzaW5JbnB1dDoiZm9jdXNpbklucHV0IixvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlOiJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIn0sZmVhdHVyZXM6W3Zh''@;'; put 'put ''XSxuZ0NvbnRlbnRTZWxlY3RvcnM6SEJlLGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWyJjbGFzcyIsImNsci1jb250cm9sLWxhYmVsIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsidHlwZSIsImRhdGUiLCJjbHJE''@;'; put 'put ''YXRlIiwiIiwzLCJpZCIsInBsYWNlaG9sZGVyIiwiY2xyRGF0ZSIsImRpc2FibGVkIiwiY2xyRGF0ZUNoYW5nZSIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2VvdmVyIiwibW91c2VvdXQiXSxbInR5cGUiLCJ0aW1lIiwic3RlcCIsIjEiLDEsImlucHV0LXZhbCIsMywidmFs''@;'; put 'put ''dWUiLCJpZCIsImRpc2FibGVkIiwiaW5wdXQiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Il0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsMSwiaW5wdXQtdmFsIiwzLCJpbnB1dElkIiwidmFsdWUi''@;'; put 'put ''LCJlbmFibGVMb2FkTW9yZSIsImVtaXRPbmx5U2VsZWN0ZWQiLCJkaXNhYmxlZCIsIm9uSW5wdXRDaGFuZ2UiLCJvbkxvYWRpbmdNb3JlIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksUWUoMCxSQmUsMiwxLCJsYWJlbCIsMCksenIoMSwxKSxRZSgy''@;'; put 'put ''LE9CZSw0LDgsIm5nLWNvbnRhaW5lciIsMiksUWUoMyxQQmUsMiw0LCJuZy1jb250YWluZXIiLDIpLFFlKDQsRkJlLDQsNSwibmctY29udGFpbmVyIiwyKSxZcigpKSwyJmEmJihSZSgibmdJZiIsZC5sYWJlbCksQ2UoMSksUmUoIm5nU3dpdGNoIixkLnR5cGUpLENlKDEpLFJlKCJuZ1N3aXRj''@;'; put 'put ''aENhc2UiLCJkYXRlIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsInRpbWUiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwidGV4dCIpKX0sZGVwZW5kZW5jaWVzOltaaSxuZCx0aCxVcyxJYiwkRixxRixTc2UsSUJlXSxzdHlsZXM6WyIuaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAlXXti''@;'; put 'put ''b3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1pbnB1dFtfbmdjb250ZW50LSVDT01QJV06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGlj''@;'; put 'put ''YXRvcnttYXJnaW4tdG9wOi01cHh9Y2xyLWRhdGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjJweCFpbXBvcnRhbnR9Y2xyLWRhdGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1pbnB1dC1ncm91cC1pY29u''@;'; put 'put ''LWFjdGlvbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotNXB4fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAgIGlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXJpZ2h0OjIwcHg7bWFyZ2luLXRvcDotNXB4fSJdfSksY30pKCks''@;'; put 'put ''VTc9KCgpPT57Y2xhc3MgY3tzZXQgbmdWYXIoYSl7dGhpcy5jb250ZXh0LiRpbXBsaWNpdD10aGlzLmNvbnRleHQubmdWYXI9YSx0aGlzLmhhc1ZpZXd8fCh0aGlzLnZjUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmLHRoaXMuY29udGV4dCksdGhpcy5oYXNWaWV3PSEw''@;'; put 'put ''KX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMudGVtcGxhdGVSZWY9YSx0aGlzLnZjUmVmPWQsdGhpcy5jb250ZXh0PXskaW1wbGljaXQ6bnVsbCxuZ1ZhcjpudWxsfSx0aGlzLmhhc1ZpZXc9ITF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHphKSx0''@;'; put 'put ''dChhcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1ZhciIsIiJdXSxpbnB1dHM6e25nVmFyOiJuZ1ZhciJ9fSksY30pKCksTkJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWF9dHJhbnNmb3JtKGEsZD0iZGF5cyIs''@;'; put 'put ''aD0hMSl7aWYodm9pZCAwPT09YSYmKGE9IiIpLCJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSwwPT09YS5sZW5ndGgpe2lmKCJkYXlzIj09PWQpcmV0dXJuIG51bGw7aWYoInNlY29uZHMiPT09ZClyZXR1cm4gaD8iMTE6MDA6MDAiOm51bGx9bGV0IGY9dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUoYSxkKTtpZig0PT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3QgVD1hLnNwbGl0KCI6Iik7Zj1uZXcgRGF0ZShUWzBdKSxmLnNldEhvdXJzKHBhcnNlSW50KFRbMV0pKSxmLnNldE1pbnV0ZXMocGFyc2VJbnQoVFsyXSkpLGYuc2V0U2Vj''@;'; put 'put ''b25kcyhwYXJzZUludChUWzNdKSl9ZWxzZSBpc05hTihOdW1iZXIoYSkpJiYoZj1uZXcgRGF0ZShhKSk7bGV0IF89YCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0SG91cnMoKS50b1N0cmluZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8o''@;'; put 'put ''Zi5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpfWA7cmV0dXJuIGg/XzpmfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBYywxNikp''@;'; put 'put ''fSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6InNhc1RvSnNEYXRlIix0eXBlOmMscHVyZTohMH0pLGN9KSgpLFZCZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5zZm9ybShhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIiI7bGV0IGQsaCxm''@;'; put 'put ''O2lmKCJzdHJpbmciPT10eXBlb2YgYSYmMz09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IF89YS5zcGxpdCgiOiIpO2Q9X1swXSxoPV9bMV0sZj1fWzJdfWVsc2UibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBhcnNlSW50KGEpKSxkPU1hdGguZmxvb3IoYS8zNjAwKSxoPU1hdGguZmxvb3Io''@;'; put 'put ''YSUzNjAwLzYwKSxmPU1hdGguZmxvb3IoYSUzNjAwJTYwKTtyZXR1cm5gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGgpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmKX1gfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBYywxNikpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6InNlY29uZHNQYXJzZXIiLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7ZnVuY3Rpb24gQkJlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwyMiks''@;'; put 'put ''TmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJzZWxlY3RlZCIsamUoKS5sb2dpY09wZXJhdG9yc1swXSksQ2UoMSksbXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gakJlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwyMyksTmUoMSwiXG4gICAgICAgICIpLHF0KDIsInByb2dy''@;'; put 'put ''ZXNzIiksTmUoMywiXG4gICAgICAiKSx5ZSgpKX1mdW5jdGlvbiB6QmUoYyxsKXsxJmMmJnF0KDAsImRpdiIpfWZ1bmN0aW9uIFVCZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsMjIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgic2VsZWN0ZWQiLGplKDIp''@;'; put 'put ''LmxvZ2ljT3BlcmF0b3JzWzBdKSxDZSgxKSxtcigiICIsYSwiICIpfX1mdW5jdGlvbiBaQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLmFkZEdyb3VwQ2xhdXNlKCkpfSkscXQo''@;'; put 'put ''MSwiY2xyLWljb24iLDMzKSxtZSgyLCJzcGFuIiksTmUoMywiR3JvdXAiKSx5ZSgpKCl9fWZ1bmN0aW9uIFlCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwzNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKS5pbmRleDtyZXR1cm4g''@;'; put 'put ''anQoamUoKS5yZW1vdmVHcm91cENsYXVzZShoKSl9KSx5ZSgpfX1mdW5jdGlvbiBXQmUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksbXIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBHQmUoYyxsKXtpZigx''@;'; put 'put ''JmMmJihtZSgwLCJvcHRpb24iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksb3IoYSl9fWZ1bmN0aW9uICRCZShjLGwpezEmYyYmamEoMCl9Y29uc3QgcUJlPWZ1bmN0aW9uKGMsbCxhKXtyZXR1cm57cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6''@;'; put 'put ''YX19O2Z1bmN0aW9uIEtCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDIpLmluZGV4LGY9amUoKS5pbmRleCxfPWplKCk7cmV0dXJuIF8uY3VycmVudFF1ZXJ5SW5k''@;'; put 'put ''ZXg9aCxqdChfLmN1cnJlbnRDbGF1c2VJbmRleD1mKX0pLE5lKDIsIiBDaG9vc2UgdmFsdWVzICIpLHllKCksUWUoMywkQmUsMSwwLCJuZy1jb250YWluZXIiLDUzKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1qZSgyKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleCxmPWplKCkuaW5kZXg7amUoKTtj''@;'; put 'put ''b25zdCBfPSRpKDM3KTtDZSgzKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsXykoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixiXygyLHFCZSxkLGgsZikpfX1mdW5jdGlvbiBYQmUoYyxsKXsxJmMmJmphKDApfWNvbnN0IEpCZT1mdW5jdGlvbihjLGwsYSxkKXtyZXR1cm57cXVlcnk6YyxxdWVy''@;'; put 'put ''eUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9fTtmdW5jdGlvbiBRQmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDU0KSxRZSgxLFhCZSwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpLm5nVmFyLGQ9amUoKSxoPWQuJGltcGxpY2l0LGY9''@;'; put 'put ''ZC5pbmRleCxfPWplKCkuaW5kZXgsVD1qZSgpLFc9JGkoMzEpLGllPSRpKDMzKTtDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmVC51c2VQaWNrZXJzP1c6aWUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsWU0oMixKQmUsaCxmLF8sYSkpfX1mdW5jdGlvbiBlamUoYyxsKXsxJmMm''@;'; put 'put ''JmphKDApfWZ1bmN0aW9uIHRqZShjLGwpezEmYyYmamEoMCl9Y29uc3QgbmplPWZ1bmN0aW9uKGMsbCxhLGQpe3JldHVybntyYW5nZToic3RhcnQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjAscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfX0scmplPWZ1bmN0aW9u''@;'; put 'put ''KGMsbCxhLGQpe3JldHVybntyYW5nZToiZW5kIixxdWVyeTpjLHF1ZXJ5VmFsdWVJbmRleDoxLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlzRGF0ZVRpbWU6ZH19O2Z1bmN0aW9uIGlqZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNTUpKDEsImRpdiIsNTYpLFFlKDIsZWplLDEsMCwi''@;'; put 'put ''bmctY29udGFpbmVyIiw1MykseWUoKSxtZSgzLCJkaXYiLDU3KSxRZSg0LHRqZSwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKCkubmdWYXIsZD1qZSgpLGg9ZC4kaW1wbGljaXQsZj1kLmluZGV4LF89amUoKS5pbmRleCxUPWplKCksVz0kaSgzMSksaWU9''@;'; put 'put ''JGkoMzUpO0NlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZULnVzZVBpY2tlcnM/VzppZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixZTSg0LG5qZSxoLGYsXyxhKSksQ2UoMiksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJlQudXNlUGlja2Vycz9XOmllKSgibmdUZW1wbGF0ZU91''@;'; put 'put ''dGxldENvbnRleHQiLFlNKDkscmplLGgsZixfLGEpKX19ZnVuY3Rpb24gb2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1OCkoMSwibGFiZWwiLDMpLE5lKDIsIlZhbHVlIikseWUoKSxtZSgzLCJpbnB1dCIsNTkpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbiho''@;'; put 'put ''KXtyZXR1cm4gQnQoYSksanQoamUoMikuJGltcGxpY2l0LnZhbHVlPWgpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9amUoMikuaW5kZXgsXz1qZSgpLmluZGV4O3JldHVybiBqdChqZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgsZixfKSl9KSx5ZSgpKCl9aWYo''@;'; put 'put ''MiZjKXtjb25zdCBhPWplKDIpLiRpbXBsaWNpdDtDZSgzKSxSZSgibmdNb2RlbCIsYS52YWx1ZSl9fWZ1bmN0aW9uIHNqZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDYpLFFlKDEsS0JlLDQsNiwiZGl2Iiw0NyksUWUoMixRQmUsMiw3LCJkaXYiLDQ4KSxRZSgzLGlqZSw1LDE0LCJkaXYi''@;'; put 'put ''LDQ5KSxRZSg0LG9qZSw0LDEsImRpdiIsNTApLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIklOIj09PWEub3BlcmF0b3J8fCJOT1QgSU4iPT09YS5vcGVyYXRvciksQ2UoMSksUmUoIm5nSWYiLCJCRVRXRUVOIiE9PWEub3BlcmF0b3ImJiJJTiIh''@;'; put 'put ''PT1hLm9wZXJhdG9yJiYiTk9UIElOIiE9PWEub3BlcmF0b3ImJiJMSUtFIiE9PWEub3BlcmF0b3ImJiJDT05UQUlOUyIhPT1hLm9wZXJhdG9yJiYiQkVHSU5TX1dJVEgiIT09YS5vcGVyYXRvciksQ2UoMSksUmUoIm5nSWYiLCJCRVRXRUVOIj09PWEub3BlcmF0b3IpLENlKDEpLFJlKCJuZ0lm''@;'; put 'put ''IiwiTElLRSI9PT1hLm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09YS5vcGVyYXRvcnx8IkNPTlRBSU5TIj09PWEub3BlcmF0b3IpfX1mdW5jdGlvbiBhamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDYpKDEsImRpdiIsMzUpKDIsImRpdiIsMzYpKDMsImFwcC1zb2Z0''@;'; put 'put ''LXNlbGVjdCIsMzcpLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC52YXJpYWJsZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLiRpbXBsaWNpdCxUPWYuaW5kZXgsVz1qZSgpLmluZGV4O3JldHVy''@;'; put 'put ''biBqdChqZSgpLnZhcmlhYmxlSW5wdXRDaGFuZ2UoXy52YXJpYWJsZSxULFcsaCkpfSksUWUoNCxXQmUsMiwxLCJvcHRpb24iLDM4KSx5ZSgpKCkoKSxtZSg1LCJkaXYiLDM5KSg2LCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDcsImxhYmVsIiksTmUoOCwiT3BlcmF0b3IiKSx5ZSgpLG1lKDks''@;'; put 'put ''InNlbGVjdCIsNDApLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0Lm9wZXJhdG9yPWgpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7Y29uc3QgaD1CdChhKSxmPWguaW5kZXgsXz1oLiRpbXBsaWNpdCxUPWplKCkuaW5kZXg7cmV0''@;'; put 'put ''dXJuIGp0KGplKCkuc2V0VmFyaWFibGVPcGVyYXRvcihmLF8ub3BlcmF0b3IsVCkpfSksUWUoMTAsR0JlLDIsMSwib3B0aW9uIiwzOCkseWUoKSgpKCksUWUoMTEsc2plLDUsNCwiZGl2Iiw0MSksbWUoMTIsImRpdiIsNDIpKDEzLCJidXR0b24iLDQzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''Y29uc3QgZj1CdChhKS5pbmRleCxfPWplKCkuaW5kZXg7cmV0dXJuIGp0KGplKCkucmVtb3ZlQ2xhdXNlKGYsXykpfSkscXQoMTQsImNsci1pY29uIiw0NCkoMTUsInNwYW4iKSx5ZSgpLG1lKDE2LCJidXR0b24iLDQ1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgp''@;'; put 'put ''LmluZGV4O3JldHVybiBqdChqZSgpLmFkZENsYXVzZShoKSl9KSxxdCgxNywiY2xyLWljb24iLDMzKSgxOCwic3BhbiIpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1qZSgpLmluZGV4LGY9amUoKTtocigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxp''@;'; put 'put ''ZENsYXVzZSksQ2UoMyksUmUoImlkIiwic2VsZWN0X3ZhbHNfdmFyX2lkIitkKyJfIitoKSgiaW5wdXRJZCIsInZhbHNfdmFyX2lkIitkKyJfIitoKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApKCJ2YWx1ZSIsYS52YXJpYWJsZSksQ2UoMSksUmUoIm5nRm9yT2YiLGYuY29scyksQ2UoNSksUmUo''@;'; put 'put ''Im5nTW9kZWwiLGEub3BlcmF0b3IpLENlKDEpLFJlKCJuZ0Zvck9mIixhLm9wZXJhdG9ycyksQ2UoMSksUmUoIm5nVmFyIiwiREFURSI9PT1hLmRkdHlwZXx8IkRBVEVUSU1FIj09PWEuZGR0eXBlfHwiVElNRSI9PT1hLmRkdHlwZSksQ2UoMiksUmUoImRpc2FibGVkIiwxPT09Zi5jbGF1c2Vz''@;'; put 'put ''LnF1ZXJ5T2JqW2hdLmVsZW1lbnRzLmxlbmd0aCl9fWZ1bmN0aW9uIGxqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMjQpKDEsImRpdiIsNikoMiwiZGl2IiwyNSkoMywiZGl2IiwyNikoNCwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg1LCJsYWJlbCIpLE5lKDYsIkxv''@;'; put 'put ''Z2ljIikseWUoKSxtZSg3LCJzZWxlY3QiLDI3KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC5jbGF1c2VMb2dpYz1oKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLnNldExvZ2ljKCkpfSks''@;'; put 'put ''UWUoOCxVQmUsMiwyLCJvcHRpb24iLDkpLHllKCkoKSgpLHF0KDksImJyIiksUWUoMTAsWkJlLDQsMCwiYnV0dG9uIiwyOCkseWUoKSxtZSgxMSwiZGl2IiwyOSksUWUoMTIsWUJlLDEsMCwiY2xyLWljb24iLDMwKSxRZSgxMyxhamUsMTksMTEsImRpdiIsMzEpLHllKCkoKSxxdCgxNCwiYnIi''@;'; put 'put ''KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWplKCk7Q2UoMSksaHIoImludmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLENlKDYpLFJlKCJuZ01vZGVsIixhLmNsYXVzZUxvZ2ljKSgiZGlzYWJsZWQiLGEuZWxlbWVudHMubGVuZ3RoPDIpLENlKDEpLFJlKCJuZ0Zv''@;'; put 'put ''ck9mIixkLmxvZ2ljT3BlcmF0b3JzKSxDZSgyKSxSZSgibmdJZiIsZC5pbm5lcldpZHRoPjc2OCksQ2UoMiksUmUoIm5nSWYiLGQuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+MSksQ2UoMSksUmUoIm5nRm9yT2YiLGEuZWxlbWVudHMpfX1mdW5jdGlvbiBjamUoYyxsKXtpZigxJmMpe2NvbnN0''@;'; put 'put ''IGE9Vm4oKTt6cigwKSxtZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYyKSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9amUoKSxfPWYucXVlcnksVD1mLnF1ZXJ5SW5kZXgsVz1mLmNsYXVzZUluZGV4LGllPWYucXVlcnlWYWx1ZUluZGV4O3JldHVybiBqdChqZSgp''@;'; put 'put ''LmRhdGVDaGFuZ2UoaCxfLFQsVyxpZSkpfSksYmEoMiwic2FzVG9Kc0RhdGUiKSxiYSgzLCJzYXNUb0pzRGF0ZSIpLHllKCksWXIoKX1pZigyJmMpe2NvbnN0IGE9amUoKSxkPWEucXVlcnlJbmRleCxoPWEuY2xhdXNlSW5kZXgsZj1hLnF1ZXJ5VmFsdWVJbmRleCxfPWEucXVlcnk7Q2UoMSks''@;'; put 'put ''UmUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2QrIl8iK2gpKCJ2YWx1ZSIsdm9pZCAwIT09Zj9VbCgyLDMsXy52YWx1ZVtmXSk6VWwoMyw1LF8udmFsdWUpKX19ZnVuY3Rpb24gdWplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7enIoMCksbWUoMSwi''@;'; put 'put ''YXBwLXNvZnQtc2VsZWN0Iiw2MykseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKCksXz1mLmNsYXVzZUluZGV4LFQ9Zi5xdWVyeUluZGV4O3JldHVybiBqdChqZSgpLmdldFF1ZXJ5RGF0ZVRpbWUoXyxUKS5kYXRlPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVu''@;'; put 'put ''Y3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCksZj1oLnF1ZXJ5LF89aC5xdWVyeUluZGV4LFQ9aC5jbGF1c2VJbmRleCxXPWgucXVlcnlWYWx1ZUluZGV4O3JldHVybiBqdChqZSgpLmRhdGVUaW1lQ2hhbmdlKGYsXyxULFcpKX0pLGJhKDIsInNhc1RvSnNEYXRlIiksYmEoMywic2FzVG9Kc0Rh''@;'; put 'put ''dGUiKSx5ZSgpLG1lKDQsImFwcC1zb2Z0LXNlbGVjdCIsNjQpLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1qZSgpLF89Zi5jbGF1c2VJbmRleCxUPWYucXVlcnlJbmRleDtyZXR1cm4ganQoamUoKS5nZXRRdWVyeURhdGVUaW1lKF8sVCkudGltZT1oKX0pKCJv''@;'; put 'put ''bklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpLGY9aC5xdWVyeSxfPWgucXVlcnlJbmRleCxUPWguY2xhdXNlSW5kZXgsVz1oLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4ganQoamUoKS5kYXRlVGltZUNoYW5nZShmLF8sVCxXKSl9KSxiYSg1LCJzYXNUb0pzRGF0ZSIp''@;'; put 'put ''LGJhKDYsInNhc1RvSnNEYXRlIikseWUoKSxZcigpfWlmKDImYyl7Y29uc3QgYT1qZSgpLGQ9YS5xdWVyeUluZGV4LGg9YS5jbGF1c2VJbmRleCxmPWEucXVlcnlWYWx1ZUluZGV4LF89YS5xdWVyeTtDZSgxKSxSZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0''@;'; put 'put ''ZSIrZCsiXyIraCkoInZhbHVlIix2b2lkIDAhPT1mP001KDIsNixfLnZhbHVlW2ZdLCJzZWNvbmRzIik6TTUoMyw5LF8udmFsdWUsInNlY29uZHMiKSksQ2UoMyksUmUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX3RpbWUiK2QrIl8iK2gpKCJ2YWx1ZSIsdm9pZCAw''@;'; put 'put ''IT09Zj9EUig1LDEyLF8udmFsdWVbZl0sInNlY29uZHMiLCEwKTpEUig2LDE2LF8udmFsdWUsInNlY29uZHMiLCEwKSl9fWZ1bmN0aW9uIGRqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO3pyKDApLG1lKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjUpLHh0KCJvbklucHV0RXZlbnQiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe0J0KGEpO2NvbnN0IGY9amUoKSxfPWYucXVlcnksVD1mLnF1ZXJ5SW5kZXgsVz1mLmNsYXVzZUluZGV4LGllPWYucXVlcnlWYWx1ZUluZGV4O3JldHVybiBqdChqZSgpLnRpbWVDaGFuZ2UoaCxfLFQsVyxpZSkpfSksYmEoMiwic2Vjb25kc1BhcnNlciIpLGJhKDMsInNlY29uZHNQ''@;'; put 'put ''YXJzZXIiKSx5ZSgpLFlyKCl9aWYoMiZjKXtjb25zdCBhPWplKCksZD1hLnF1ZXJ5SW5kZXgsaD1hLmNsYXVzZUluZGV4LGY9YS5xdWVyeVZhbHVlSW5kZXgsXz1hLnF1ZXJ5O0NlKDEpLFJlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc18iK2QrIl8iK2gpKCJ2YWx1''@;'; put 'put ''ZSIsdm9pZCAwIT09Zj9VbCgyLDMsXy52YWx1ZVtmXSk6VWwoMyw1LF8udmFsdWUpKX19ZnVuY3Rpb24gaGplKGMsbCl7MSZjJiYoenIoMCw2MCksUWUoMSxjamUsNCw3LCJuZy1jb250YWluZXIiLDYxKSxRZSgyLHVqZSw3LDIwLCJuZy1jb250YWluZXIiLDYxKSxRZSgzLGRqZSw0LDcsIm5n''@;'; put 'put ''LWNvbnRhaW5lciIsNjEpLFlyKCkpLDImYyYmKFJlKCJuZ1N3aXRjaCIsbC5xdWVyeS5kZHR5cGUpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJEQVRFIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsIkRBVEVUSU1FIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsIlRJTUUiKSl9ZnVuY3Rp''@;'; put 'put ''b24gZmplKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiw2OCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS51bmZvcm1hdHRlZCksQ2UoMSksbXIoIiAiLGEuZm9ybWF0dGVkLnRyaW0oKSwiICIpfX1mdW5jdGlvbiBwamUoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9Vm4oKTttZSgwLCJhcHAtc29mdC1zZWxlY3QiLDY2KSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS5xdWVyeS52YWx1ZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLnF1ZXJ5SW5kZXgsVD1mLmNs''@;'; put 'put ''YXVzZUluZGV4O3JldHVybiBqdChqZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgudGFyZ2V0LnZhbHVlLF8sVCkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleDtyZXR1''@;'; put 'put ''cm4ganQoamUoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgsXy52YXJpYWJsZSxULFcpKX0pLFFlKDEsZmplLDIsMiwib3B0aW9uIiw2NykseWUoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeTtSZSgiaW5wdXRJZCIsInZhbHNfIitsLnF1ZXJ5SW5kZXgrIl8iK2wuY2xhdXNlSW5kZXgp''@;'; put 'put ''KCJ2YWx1ZSIsYS52YWx1ZSkoImVuYWJsZUxvYWRNb3JlIixhLm5vYnM+YS52YWx1ZXMubGVuZ3RoKSxDZSgxKSxSZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBnamUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDY4KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQ7UmUoInZhbHVlIixhLmZvcm1hdHRlZCksQ2UoMSksbXIoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIG1qZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImFwcC1zb2Z0LXNlbGVjdCIsNjkpLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj1C''@;'; put 'put ''dChhKTtyZXR1cm4ganQoZi5xdWVyeS52YWx1ZVtmLnF1ZXJ5VmFsdWVJbmRleF09aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe2NvbnN0IGg9QnQoYSksZj1oLnF1ZXJ5LF89aC5xdWVyeUluZGV4LFQ9aC5jbGF1c2VJbmRleDtyZXR1cm4ganQoamUoKS5zZXRWYXJpYWJsZVZhbHVl''@;'; put 'put ''cyhmLnZhbHVlLF8sVCkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleDtyZXR1cm4ganQoamUoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgsXy52YXJpYWJs''@;'; put 'put ''ZSxULFcpKX0pLFFlKDEsZ2plLDIsMiwib3B0aW9uIiw2NykseWUoKX1pZigyJmMpe2NvbnN0IGE9bC5yYW5nZSxkPWwucXVlcnksaD1sLnF1ZXJ5VmFsdWVJbmRleDtSZSgiaW5wdXRJZCIsInZhbHMtIithKyJfIitsLnF1ZXJ5SW5kZXgrIl8iK2wuY2xhdXNlSW5kZXgpKCJ2YWx1ZSIsZC52''@;'; put 'put ''YWx1ZVtoXSkoImVuYWJsZUxvYWRNb3JlIixkLm5vYnM+ZC52YWx1ZXMubGVuZ3RoKSgiZGlzYWJsZWQiLHZvaWQgMCE9PWgmJiJzdGFydCIhPT1hJiYhZC52YWx1ZVswXSksQ2UoMSksUmUoIm5nRm9yT2YiLGQudmFsdWVzKX19ZnVuY3Rpb24gdmplKGMsbCl7MSZjJiYobWUoMCwiaDUiLDc3''@;'; put 'put ''KSxOZSgxLCIgTm8gdmFsdWVzIGF2YWlsYWJsZS4gIikseWUoKSl9ZnVuY3Rpb24gX2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxLCJpbnB1dCIsNzkpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEp''@;'; put 'put ''LmluZGV4O3JldHVybiBqdChqZSgyKS5xdWVyeS52YWx1ZVtfXS5jaGVja2VkPWgpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9amUoMiksXz1mLnF1ZXJ5SW5kZXgsVD1mLmNsYXVzZUluZGV4O3JldHVybiBqdChqZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgs''@;'; put 'put ''XyxUKSl9KSx5ZSgpLG1lKDIsImxhYmVsIiksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1qZSgyKS5xdWVyeTtDZSgxKSxSZSgibmdNb2RlbCIsaC52YWx1ZVtkXS5jaGVja2VkKSxDZSgyKSxtcigiICIsYS5mb3JtYXR0ZWQsIiAiKX19ZnVu''@;'; put 'put ''Y3Rpb24gYmplKGMsbCl7aWYoMSZjJiYobWUoMCwic2VjdGlvbiIsNzgpKDEsImNsci1jaGVja2JveC1jb250YWluZXIiKSxRZSgyLF9qZSw0LDIsImNsci1jaGVja2JveC13cmFwcGVyIiwzOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoKS5xdWVyeTtDZSgyKSxSZSgibmdGb3JPZiIsYS52''@;'; put 'put ''YWx1ZXMpfX1mdW5jdGlvbiB5amUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItbW9kYWwiLDcwKSgxLCJoMyIsNzEpLE5lKDIsIlNlbGVjdCB2YWx1ZXMiKSx5ZSgpLG1lKDMsImRpdiIsNzIpLFFlKDQsdmplLDIsMCwiaDUiLDczKSxRZSg1LGJqZSwzLDEsInNlY3Rpb24i''@;'; put 'put ''LDc0KSx5ZSgpLG1lKDYsImRpdiIsNzUpKDcsImJ1dHRvbiIsNzYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCk7cmV0dXJuIGguY3VycmVudFF1ZXJ5SW5kZXg9LTEsanQoaC5jdXJyZW50Q2xhdXNlSW5kZXg9LTEpfSksTmUoOCwiIEFwcGx5ICIpLHllKCkoKSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5LGQ9bC5xdWVyeUluZGV4LGg9bC5jbGF1c2VJbmRleCxmPWplKCk7UmUoImNsck1vZGFsT3BlbiIsZi5jdXJyZW50UXVlcnlJbmRleD09PWQmJmYuY3VycmVudENsYXVzZUluZGV4PT09aCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg0KSxSZSgi''@;'; put 'put ''bmdJZiIsIWYuaXNBcnIoYS52YWx1ZSkpLENlKDEpLFJlKCJuZ0lmIixmLmlzQXJyKGEudmFsdWUpKX19IWZ1bmN0aW9uIGYwZShjLGwsYSl7KGZ1bmN0aW9uIHpNKGMsbCxhKXsic3RyaW5nIiE9dHlwZW9mIGwmJihhPWwsbD1jW3FvLkxvY2FsZUlkXSksbD1sLnRvTG93ZXJDYXNlKCkucmVw''@;'; put 'put ''bGFjZSgvXy9nLCItIiksJGRbbF09YyxhJiYoJGRbbF1bcW8uRXh0cmFEYXRhXT1hKX0pKGMsbCxhKX0oRUJlKTtsZXQgY1U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2''@;'; put 'put ''aWNlPWgsdGhpcy5jZGY9Zix0aGlzLmNhY2hpbmc9ITAsdGhpcy5yb3dzX2luY3JlbWVudD0xMDAsdGhpcy5pbml0aWFsX3Jvd3M9MWUzLHRoaXMuY2xhdXNlQW10PVsiIl0sdGhpcy5udW1PcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwi''@;'; put 'put ''TkUiXSx0aGlzLmNoYXJPcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5ub3RJbj0hMSx0aGlzLm5vdEFycj0hMCx0aGlzLndhc0JldHdlZW49ITEsdGhpcy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsdGhpcy5keW5hbWlj''@;'; put 'put ''V2hlcmVDbGF1c2U9ITAsdGhpcy51c2VQaWNrZXJzPSExLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsc3RhcnRyb3c6MCxyb3dzOjAsbm9iczowLHZhbHVlczpb''@;'; put 'put ''XSxvcGVyYXRvcnM6W119XSxjbGF1c2VMb2dpYzoiIixpbnZhbGlkQ2xhdXNlOiExfSx0aGlzLnNlbFZhcj17aW5kZXg6bnVsbCxmb3JtYXQ6bnVsbCx0eXBlOm51bGx9LHRoaXMuaW5PYmo9W3tjaGVja2VkOiExLHZhbHVlOm51bGx9XSx0aGlzLmdyb3VwTG9naWM9IkFORCIsdGhpcy5jbGF1''@;'; put 'put ''c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMubG9naWNPcGVyYXRvcnM9WyJBTkQiLCJPUiJdLHRoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLmN1cnJlbnRDbGF1c2VJbmRleD0tMSx0aGlzLmN1cnJl''@;'; put 'put ''bnRRdWVyeUluZGV4PS0xLHRoaXMucGVuZGluZ0lOVmFsdWVzU2V0PW51bGwsdGhpcy5pbm5lcldpZHRoPXdpbmRvdy5zY3JlZW4ud2lkdGgsdGhpcy5pbm5lcldpZHRoPjc2OCYmKHRoaXMubm9Cb3JkZXI9ImJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JheTsiKX1nZXRRdWVyeURhdGVUaW1l''@;'; put 'put ''KGEsZCl7bGV0IGg9dGhpcy5xdWVyeURhdGVUaW1lLmZpbmQoZj0+Zi5jbGF1c2VJbmRleD09PWEmJmYucXVlcnlJbmRleD09PWQpO2lmKCFoKXtjb25zdCBmPXRoaXMucXVlcnlEYXRlVGltZS5wdXNoKHtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZCxkYXRlOiIiLHRpbWU6IiJ9KS0xO2g9''@;'; put 'put ''dGhpcy5xdWVyeURhdGVUaW1lW2ZdfXJldHVybiBofXVzZVBpY2tlcnNDaGFuZ2UoKXt0aGlzLnF1ZXJ5RGF0ZVRpbWU9W119cmVzZXRGaWx0ZXIoKXt0aGlzLndoZXJlU3RyaW5nPXZvaWQgMCx0aGlzLndoZXJlQ2xhdXNlPXZvaWQgMCx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2lj''@;'; put 'put ''Om51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XX0sdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdy''@;'; put 'put ''b3VwTG9naWN9LHRoaXMud2hlcmVDbGF1c2VGbighMCl9c2V0VG9HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZp''@;'; put 'put ''ZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLGlsKEduLGEpLmZpbHRlci5ncm91cExvZ2ljPXRoaXMuZ3JvdXBMb2dpYywic3RyaW5nIj09dHlwZW9mIHRoaXMud2hlcmVDbGF1c2UmJihpbChHbixhKS5maWx0ZXIud2hlcmVDbGF1c2U9dGhp''@;'; put 'put ''cy53aGVyZUNsYXVzZSksInN0cmluZyI9PXR5cGVvZiB0aGlzLmxpYmRzJiYoaWwoR24sYSkuZmlsdGVyLmxpYmRzPXRoaXMubGliZHMpLGlsKEduLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuY2xhdXNlcyxjb25zb2xlLmxvZygiZ2xvYmFscyIsR24pfWdldEZyb21HbG9iYWxzKCl7aWYoIXRo''@;'; put 'put ''aXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmKGE9InZpZXdlciIp''@;'; put 'put ''LGlsKEduLGEpLmZpbHRlci5jb2xzLmxlbmd0aD4wJiYodGhpcy5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaWwoR24sYSkuZmlsdGVyLmNvbHMpKSksaWwoR24sYSkuZmlsdGVyLnZhbHMubGVuZ3RoPjAmJih0aGlzLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbChH''@;'; put 'put ''bixhKS5maWx0ZXIudmFscykpKSwiIiE9PWlsKEduLGEpLmZpbHRlci5ncm91cExvZ2ljJiYodGhpcy5ncm91cExvZ2ljPWlsKEduLGEpLmZpbHRlci5ncm91cExvZ2ljLHRoaXMud2hlcmVDbGF1c2U9aWwoR24sYSkuZmlsdGVyLndoZXJlQ2xhdXNlLHRoaXMubGliZHM9aWwoR24sYSkuZmls''@;'; put 'put ''dGVyLmxpYmRzLHRoaXMuY2xhdXNlcz1pbChHbixhKS5maWx0ZXIuY2xhdXNlcyx0aGlzLndoZXJlQ2xhdXNlRm4oKSl9c2V0R3JvdXBMb2dpYyhhKXt0aGlzLmdyb3VwTG9naWM9YSx0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9i''@;'; put 'put ''YWxzKCl9ZGF0ZUNoYW5nZShhLGQsaCxmLF8pe2xldCBUPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGEpOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PV8mJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbX109VCks''@;'; put 'put ''dGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhULGgsZil9ZGF0ZVRpbWVDaGFuZ2UoYSxkLGgsZil7Y29uc3QgXz10aGlzLmdldFF1ZXJ5RGF0ZVRpbWUoaCxkKTtpZigiIj09PV8uZGF0ZSl7aWYoIiI9PT1hLnZhbHVlKXJldHVybjtfLmRhdGU9YS52YWx1ZS5zcGxpdCgiOiIpWzBdfWNvbnN0IFQ9''@;'; put 'put ''cGFyc2VJbnQoXy50aW1lLnNwbGl0KCI6IilbMF0pLFc9cGFyc2VJbnQoXy50aW1lLnNwbGl0KCI6IilbMV0pLGllPXBhcnNlSW50KF8udGltZS5zcGxpdCgiOiIpWzJdKXx8MDtsZXQgZ2U9bmV3IERhdGUoXy5kYXRlKSx3ZT1uZXcgRGF0ZShnZS5nZXRGdWxsWWVhcigpLGdlLmdldE1vbnRo''@;'; put 'put ''KCksZ2UuZ2V0RGF0ZSgpLFQsVyxpZSksRWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUod2UsInNlY29uZHMiKTsiQkVUV0VFTiI9PT1hLm9wZXJhdG9yJiZ2b2lkIDAhPT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlW2Zd''@;'; put 'put ''PUVlKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKEVlLGQsaCl9dGltZUNoYW5nZShhLGQsaCxmLF8pe2E9YS50YXJnZXQudmFsdWU7bGV0IEVlPTYwKnBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSkqNjArNjAqcGFyc2VJbnQoYS5zcGxpdCgiOiIpWzFdKSsocGFyc2VJbnQoYS5zcGxpdCgiOiIp''@;'; put 'put ''WzJdKXx8MCk7IkJFVFdFRU4iPT09ZC5vcGVyYXRvciYmdm9pZCAwIT09XyYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZVtfXT1FZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhFZSxoLGYpfWR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoYSxkKXtsZXQgaD1b''@;'; put 'put ''XTtpZih0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPjF8fHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5sZW5ndGg+MSlmb3IobGV0IGY9MDtmPHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg7ZisrKWZvcihsZXQgXz0wO188dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2Zd''@;'; put 'put ''LmVsZW1lbnRzLmxlbmd0aDtfKyspe2lmKGY9PT1hJiZfPT09ZHx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udmFyaWFibGUpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50''@;'; put 'put ''c1tfXS5vcGVyYXRvcil8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnZhbHVlKSljb250aW51ZTtsZXQgVD0iIjtjb25zdCBXPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS5vcGVyYXRvcixpZT10aGlzLmNs''@;'; put 'put ''YXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udmFyaWFibGU7IkJFVFdFRU4iPT09Vz9UPWAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YWx1ZVswXX0gQU5EICR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW19dLnZhbHVlWzFdfWA6IklOIj09PVd8fCJOT1Qg''@;'; put 'put ''SU4iPT09Vz8odGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW19dLnZhbHVlLmZvckVhY2goZ2U9PntpZihnZS5jaGVja2VkKXtsZXQgd2U9Z2UudmFsOyJzdHJpbmciIT10eXBlb2Ygd2V8fCgwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKHdlKT9ULmxlbmd0aD4wP1QrPWAsJHt3ZX1gOlQ9YCgke3dl''@;'; put 'put ''fWA6VC5sZW5ndGg+MD9UKz1gLCcke3dlfSdgOlQ9YCgnJHt3ZX0nYH19KSxULmxlbmd0aD4wJiYoVCs9IikiKSk6IiI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udmFsdWU/VD0iY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udHlw''@;'; put 'put ''ZT8iJyAnIjoiLiI6ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnR5cGUmJihUPWAnJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udmFsdWV9J2ApLGgucHVzaCh7R1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsU1VC''@;'; put 'put ''R1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOmllLE9QRVJBVE9SX05NOlcsUkFXX1ZBTFVFOlR8fHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YWx1ZX0pfXJldHVybiBo''@;'; put 'put ''fWdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYpe3ZhciBfPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IFQ9Xy5saWJkc3x8IiI7dHJ5e2lmKHZvaWQgMCE9PV8uY29scyl7Zm9yKGxldCBldD0wO2V0PF8uY29scy5sZW5ndGg7ZXQrKylfLmNvbHNbZXRdLk5BTUU9PT1kJiYoXy5z''@;'; put 'put ''ZWxWYXIuaW5kZXg9ZXQpO2NvbnN0IFc9Xy5jb2xzW18uc2VsVmFyLmluZGV4XS5ERFRZUEUse3N0YXJ0cm93OmllLHJvd3M6Z2V9PV8uY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXSx3ZT1fLnJvd3NfaW5jcmVtZW50LEVlPWllK2dlO2xldCBaZT1bXTtfLmR5bmFtaWNXaGVyZUNs''@;'; put 'put ''YXVzZSYmKFplPV8uZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihmLGgpKTtjb25zdCBvdD1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhXKTtfLnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhkLFQsWmUsRWUsd2UpLnRoZW4oZXQ9Pntjb25zdCB5dD1ldC52YWxz''@;'; put 'put ''LHtTVEFSVFJPVzprdCxST1dTOlN0LE5PQlM6UXR9PWV0Lm1ldGFbMF07aWYoXy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnN0YXJ0cm93PWt0LF8uY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5yb3dzPVN0LF8uY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1to''@;'; put 'put ''XS5ub2JzPVF0LDE9PT15dC5sZW5ndGgmJiIiPT09eXRbMF0uRk9STUFUVEVEJiYiIj09PXl0WzBdLlVORk9STUFUVEVEP2EubG9hZE1vcmVGaW5pc2hlZCghMSk6KF8uY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMucHVzaCguLi55dC5tYXAoRW49Pntjb25zdCBscj0i''@;'; put 'put ''bnVtIj09PWV0LiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgX2k9bHImJigwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKEVuLlVORk9STUFUVEVEKT8iLiIrRW4uVU5GT1JNQVRURUQ6RW4uVU5GT1JNQVRURUQ7cmV0dXJuIGxyJiZudWxsPT09X2kmJihfaT0iLiIpLHtmb3JtYXR0ZWQ6''@;'; put 'put ''b3Q/RW4uRk9STUFUVEVELnNwbGl0KCIuIilbMF06RW4uRk9STUFUVEVELHVuZm9ybWF0dGVkOl9pfX0pKSxhLmxvYWRNb3JlRmluaXNoZWQoUXQtXy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5sZW5ndGg+MCkpLF8ud2hlcmVDbGF1c2VGbigpLF8uc2V0VG9HbG9i''@;'; put 'put ''YWxzKCksXy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PV8ucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDpubixxdWVyeUluZGV4Om1ufT1fLnBlbmRpbmdJTlZhbHVlc1NldDtfLnNldElOVmFsdWVzKG5uLG1uKSxfLnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfV8u''@;'; put 'put ''Y2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKGV0PT57Xy53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goVyl7Xy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsVyl9fSkoKX1nZXRWYWx1ZXMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJu''@;'; put 'put ''IGZpKGZ1bmN0aW9uKigpe2Yud2hlcmVDbGF1c2VMb2FkaW5nPSEwO2xldCBfPSIiO3ZvaWQgMCE9PWYubGliZHMmJihfPWYubGliZHMpLGYuY2xlYXJWYWx1ZXMoZCxoKSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVzPVtdLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5l''@;'; put 'put ''bGVtZW50c1tkXS52YWx1ZT0iIixmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ub3BlcmF0b3I9Ij0iLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YXJpYWJsZT1hO3RyeXtpZih2b2lkIDAhPT1mLmNvbHMpe2ZvcihsZXQgZ2U9MDtnZTxmLmNvbHMubGVuZ3Ro''@;'; put 'put ''O2dlKyspZi5jb2xzW2dlXS5OQU1FPT09YSYmKGYuc2VsVmFyLmluZGV4PWdlKTtjb25zdCBUPWYuY29sc1tmLnNlbFZhci5pbmRleF0uRERUWVBFO2YuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5kZHR5cGU9VCxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlw''@;'; put 'put ''ZT1mLmNvbHNbZi5zZWxWYXIuaW5kZXhdLlRZUEUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9ycz0ibnVtIj09PWYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlP2YubnVtT3BlcmF0b3JzOmYuY2hhck9wZXJhdG9ycztsZXQgVz1bXTtmLmR5''@;'; put 'put ''bmFtaWNXaGVyZUNsYXVzZSYmKFc9Zi5keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGgsZCkpO2NvbnN0IGllPVsiREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKFQpO2Yuc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGEsXyxXLDEsZi5pbml0aWFsX3Jvd3MpLnRoZW4o''@;'; put 'put ''Z2U9Pntjb25zdCB3ZT1nZS52YWxzLHtTVEFSVFJPVzpFZSxST1dTOlplLE5PQlM6b3R9PWdlLm1ldGFbMF07aWYoZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnN0YXJ0cm93PUVlLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5yb3dzPVplLGYuY2xhdXNlcy5x''@;'; put 'put ''dWVyeU9ialtoXS5lbGVtZW50c1tkXS5ub2JzPW90LGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9d2UubWFwKGV0PT57Y29uc3QgeXQ9Im51bSI9PT1nZS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IFN0PXl0JiYoMCx0My5pc1NwZWNpYWxNaXNzaW5n''@;'; put 'put ''KShldC5VTkZPUk1BVFRFRCk/Ii4iK2V0LlVORk9STUFUVEVEOmV0LlVORk9STUFUVEVEO3JldHVybiB5dCYmbnVsbD09PVN0JiYoU3Q9Ii4iKSx7Zm9ybWF0dGVkOmllP2V0LkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBdOmV0LkZPUk1BVFRFRCx1bmZvcm1hdHRlZDpTdH19KS5zbGljZSgwLDJl''@;'; put 'put ''MyksZi53aGVyZUNsYXVzZUZuKCksZi5zZXRUb0dsb2JhbHMoKSxmLndoZXJlQ2xhdXNlTG9hZGluZz0hMSxudWxsIT09Zi5wZW5kaW5nSU5WYWx1ZXNTZXQpe2NvbnN0e2NsYXVzZUluZGV4OmV0LHF1ZXJ5SW5kZXg6eXR9PWYucGVuZGluZ0lOVmFsdWVzU2V0O2Yuc2V0SU5WYWx1ZXMoZXQs''@;'; put 'put ''eXQpLGYucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9Zi5jZGYuZGV0ZWN0Q2hhbmdlcygpfSkuY2F0Y2goZ2U9PntmLndoZXJlQ2xhdXNlTG9hZGluZz0hMX0pfX1jYXRjaChUKXtmLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjb2x2YWxzIixUKX19KSgpfWdl''@;'; put 'put ''dGxvZ2ljKGEpe3RoaXMubG9naWM9YSx0aGlzLndoZXJlQ2xhdXNlRm4oKX1zZXRMb2dpYygpe3RoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9aXNBcnIoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheSYmYS5sZW5ndGg+MCYmdHlwZW9mIGFbMF0uY2hlY2tlZDwi''@;'; put 'put ''dSJ9dmFyaWFibGVJbnB1dENoYW5nZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlcyhhLGQsaCl9c2V0VmFyaWFibGVWYWx1ZXMoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcjsiQkVUV0VFTiIhPT1mJiYiSU4iIT09ZiYmIk5PVCBJTiIh''@;'; put 'put ''PT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPWEudG9TdHJpbmcoKSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRWYXJpYWJsZU9wZXJhdG9yKGEsZCxoKXtsZXQgZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxl''@;'; put 'put ''bWVudHNbYV0udmFsdWU7ZiBpbnN0YW5jZW9mIEFycmF5JiYiSU4iIT09ZCYmIk5PVCBJTiIhPT1kJiYoZj1mIGluc3RhbmNlb2YgQXJyYXkmJjI9PT1mLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBmWzBdP2ZbMF06IiIpLHRoaXMuY2xlYXJWYWx1ZXNPcGVyYXRvcihhLGgpLHRoaXMuY2xh''@;'; put 'put ''dXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS5vcGVyYXRvcj1kLCgiPSI9PT1kfHwiPiI9PT1kfHwiPCI9PT1kfHwiPD0iPT09ZHx8Ij49Ij09PWR8fCJORSI9PT1kKSYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZT1mKSwiQkVUV0VFTiI9PT1kJiYodGhp''@;'; put 'put ''cy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPVtdLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKGYpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKCIiKSksKCJJTiI9PT1kfHwiTk9UIElO''@;'; put 'put ''Ij09PWQpJiZ0aGlzLnNldElOVmFsdWVzKGgsYSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRJTlZhbHVlcyhhLGQpe2NvbnN0IGg9W10sZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0udmFsdWVzO2YubGVuZ3RoPDEmJih0aGlzLnBl''@;'; put 'put ''bmRpbmdJTlZhbHVlc1NldD17Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmR9KTtmb3IobGV0IF89MDtfPGYubGVuZ3RoO18rKyloLnB1c2goe2NoZWNrZWQ6ITEsdmFsOmZbX10uZm9ybWF0dGVkfSk7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2RdLnZhbHVlPWh9Y2xlYXJW''@;'; put 'put ''YWx1ZXMoYSxkKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFsdWU9IiJ9Y2xlYXJWYWx1ZXNPcGVyYXRvcihhLGQpe2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS5vcGVyYXRvcjsoIkJFVFdFRU4iPT09aHx8IklOIj09PWh8fCJOT1Qg''@;'; put 'put ''SU4iPT09aHx8IkNPTlRBSU5TIj09PWgpJiZ0aGlzLmNsZWFyVmFsdWVzKGEsZCl9aGFzSW52YWxpZENsdWFzZShhKXtmb3IobGV0IGQgb2YgYSl7aWYobnVsbD09PWQudmFyaWFibGV8fG51bGw9PT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YWx1ZXx8IiI9PT1kLnZhbHVlKXJldHVybiBkLmlu''@;'; put 'put ''dmFsaWRDbGF1c2U9ITAsITA7ZC5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiBhLmludmFsaWRDbGF1c2U9ITEsITF9aGFzSW52YWxpZEdyb3VwQ2x1YXNlKCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2ErKyl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRo''@;'; put 'put ''aXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSEwLCEwO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiExfWFkZENsYXVzZShhKXtpZih0aGlzLmhhc0ludmFs''@;'; put 'put ''aWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5''@;'; put 'put ''LiIpO3RoaXMuY2xhdXNlQW10LnB1c2goIiIpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSk7bGV0IGQ9dGhpcy5j''@;'; put 'put ''bGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYz10eXBlb2YgZD4idSI/IkFORCI6Ik9SIj09PWQ/Ik9SIjoiQU5EIix0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWFkZEdyb3VwQ2xhdXNlKCl7''@;'; put 'put ''dGhpcy5oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpOih0aGlzLmNsYXVzZXMucXVlcnlPYmou''@;'; put 'put ''cHVzaCh7ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19KSx0aGlzLnNldFRvR2xvYmFscygpKX1pc0luSHRtbENvbGxlY3Rpb24oYSxkKXtmb3IobGV0IGg9MDtoPGQu''@;'; put 'put ''bGVuZ3RoO2grKylpZihkW2hdLnZhbHVlPT09YSlyZXR1cm4hMDtyZXR1cm4hMX1yZW1vdmVHcm91cENsYXVzZShhKXt0aGlzLmNsYXVzZXMucXVlcnlPYmouc3BsaWNlKGEsMSksdGhpcy53aGVyZUNsYXVzZUZuKCl9cmVtb3ZlQ2xhdXNlKGEsZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2Rd''@;'; put 'put ''LmVsZW1lbnRzLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9d2hlcmVDbGF1c2VGbihhPSExKXtjb25zdCBkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5jbGF1c2VzKTtpZihhJiYoZC5xdWVyeU9ialswXS5lbGVtZW50cz1b''@;'; put 'put ''XSksdm9pZCAwIT09dGhpcy5saWJkcyl7bGV0IGg9dGhpcy5zYXNTdG9yZVNlcnZpY2Uud2hlcmVDbGF1c2VDcmVhdG9yKGQsdGhpcy5ncm91cExvZ2ljLHRoaXMubGliZHMpO2F8fCh0aGlzLndoZXJlQ2xhdXNlPWgud2hlcmVDbGF1c2UsdGhpcy53aGVyZVN0cmluZz1oLnN0cmluZyl9fW5n''@;'; put 'put ''QWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EuX3JlbW92ZVFyeT1hLnNhc1N0b3JlU2VydmljZS5yZW1vdmVRdWVyeS5zdWJzY3JpYmUoZD0+e2EuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPTEs''@;'; put 'put ''YS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD49MSYmKGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHM9W10sYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGws''@;'; put 'put ''dHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119KSxhLndoZXJlQ2xhdXNlRm4oKSkpfSksYS5jb2x1bW5zU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLmNvbHVtbnMuc3Vic2NyaWJlKGQ9PntsZXQgaD1kLmRhdGEuY29s''@;'; put 'put ''czsiaG9tZSIhPT1Hbi5yb290UGFyYW0mJiJlZGl0b3IiIT09R24ucm9vdFBhcmFtfHwoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEduLmVkaXRvci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksInZpZXciPT09R24ucm9vdFBhcmFtJiZHbi52aWV3ZXIuZmls''@;'; put 'put ''dGVyLmNvbHMubGVuZ3RoPDEmJihhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsR24udmlld2VyLmZpbHRlci5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSxhLmxpYmRzfHwoYS5saWJkcz1kLmxpYmRzKX0pLGEudmFsdWVzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnZhbHVlcy5z''@;'; put 'put ''dWJzY3JpYmUoZD0+eygiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09R24ucm9vdFBhcmFtKSYmR24uZWRpdG9yLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxHbi5lZGl0b3IuZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMp''@;'; put 'put ''KSksInZpZXciPT09R24ucm9vdFBhcmFtJiZHbi52aWV3ZXIuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxzLEduLnZpZXdlci5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykpKX0pfSkoKX1vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEs''@;'; put 'put ''ZCxoLGYpe3RoaXMuZ2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5nZXRGcm9tR2xvYmFscygpLHNldFRpbWVvdXQoKCk9PntsZXQgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdmFsc192YXJfaWQwXzAiKTthJiZhLmZvY3VzKCl9LDUwMCl9''@;'; put 'put ''bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMudmFsdWVzU3ViJiZ0aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQo''@;'; put 'put ''dmwpLHR0KEFjKSx0dChVYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcXVlcnkiXV0saW5wdXRzOntjYWNoaW5nOiJjYWNoaW5nIix2aWV3Ym94SWQ6InZpZXdib3hJZCJ9LGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6S2QsdXNlVmFsdWU6ImVuLUdCIn1dKV0s''@;'; put 'put ''ZGVjbHM6MzgsdmFyczoxMSxjb25zdHM6W1sxLCJjbHItZmxleC1yb3ciLCJjbHItZm9ybS1jb250cm9sIiwibS0wIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzEs''@;'; put 'put ''ImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsIm1sLTE1Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImlkIiwidXNlUGlja2VycyIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbMSwiY2xyLXJvdyJdLFsx''@;'; put 'put ''LCJzZWxlY3QiLCJjbHItY29sLW1kLTIiLCJtYi0zMCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJkaXNhYmxlZCIsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsInNlbGVjdGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xyLWNvbC1tZC0xMCIsIm1iLTMwIl0sWzEsImxpbmUtbnVt''@;'; put 'put ''YmVycyIsImxhbmd1YWdlLW1hcmt1cCJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwibGFuZ3VhZ2Utc3FsIl0sWzEsImNvbnRlbnQiXSxbMSwiY2xhdXNlcy1jb250YWluZXIiLCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbImNsYXNz''@;'; put 'put ''IiwiY2xhdXNlLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJwaWNrZXIiLCIiXSxbIm5vdFBpY2tlciIsIiJdLFsibm90UGlja2VyUmFuZ2UiLCIiXSxbImNoZWNrYm94VmFsdWVzIiwiIl0sWzMsInNlbGVjdGVkIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxb''@;'; put 'put ''MSwiY2xhdXNlLXJvdyJdLFsxLCJjbGF1c2UtbG9naWMiLCJjbHItY29sLW1kLTIiXSxbMSwic2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jayBtdC0xMCIsMywi''@;'; put 'put ''Y2xpY2siLDQsIm5nSWYiXSxbMSwiY2xhdXNlLXF1ZXJ5IiwiY2xyLWNvbC1tZC0xMCJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsImNsYXNzIiwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1yb3ciLDMsImludmFs''@;'; put 'put ''aWQtY2xhdXNlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLCJtdC0xMCIsMywiY2xpY2siXSxbInNoYXBlIiwicGx1cyJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsMSwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMs''@;'; put 'put ''ImNsaWNrIl0sWzEsInZhcmlhYmxlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbMSwiZGF0YWxpc3Qtd3JhcHBlciJdLFsibGFiZWwiLCJWYXJpYWJsZSIsMywiaWQiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0''@;'; put 'put ''RXZlbnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm9wZXJhdG9yLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsclNlbGVjdCIsIiIsMSwibXQtMiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNzIiwidmFsdWUtY29sIGZvcm0tZ3JvdXAgY2xy''@;'; put 'put ''LWNvbC1tZC0zIiw0LCJuZ1ZhciJdLFsxLCJjbGF1c2UtYnV0dG9ucyIsImNsci1jb2wtbWQtMiIsImJ0bi1ncm91cCJdLFsxLCJidG4iLCJidG4td2FybmluZyIsImJ0bi1ibG9jayIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJtaW51cyJdLFsxLCJidG4iLCJidG4tc3VjY2Vz''@;'; put 'put ''cyIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbMSwidmFsdWUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsiY2xhc3MiLCJjaGVja2JveC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpbmdsZS1maWVsZC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJhbmdlLXZhbHMi''@;'; put 'put ''LDQsIm5nSWYiXSxbImNsYXNzIiwiY29udGFpbnMtdmFscyIsNCwibmdJZiJdLFsxLCJjaGVja2JveC12YWxzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsMywiY2xpY2siXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEs''@;'; put 'put ''InNpbmdsZS1maWVsZC12YWxzIl0sWzEsInJhbmdlLXZhbHMiXSxbMSwiZnJvbSJdLFsxLCJ0byJdLFsxLCJjb250YWlucy12YWxzIl0sWyJ0eXBlIiwidGV4dCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENh''@;'; put 'put ''c2UiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJ2YWx1ZUNoYW5nZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSIsInZh''@;'; put 'put ''bHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Il0sWyJ0eXBlIiwidGltZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJ0aW1lIiwzLCJkaXNhYmxlU29mdHNlbGVjdCIs''@;'; put 'put ''ImlucHV0SWQiLCJ2YWx1ZSIsIm9uSW5wdXRFdmVudCJdLFsibGFiZWwiLCJWYWx1ZSIsMywiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiXSxbMywidmFsdWUiLDQsIm5nRm9y''@;'; put 'put ''IiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsibGFiZWwiLCJWYWx1ZSIsMywiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJkaXNhYmxlZCIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Iiwib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSJdLFsxLCJpbi12YWx1ZXMtbW9k''@;'; put 'put ''YWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJuby12YWx1ZXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiZm9ybS1ibG9jayIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJuby12YWx1ZXMiXSxbMSwiZm9ybS1ibG9jayJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImNsci1jaGVja2JveC13cmFwcGVyIikoMywiaW5wdXQiLDIpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5keW5hbWljV2hlcmVDbGF1c2U9Zn0pLHllKCksbWUoNCwibGFiZWwiLDMpLE5lKDUsIkR5bmFt''@;'; put 'put ''aWMgd2hlcmUgY2xhdXNlIikseWUoKSgpKCksbWUoNiwiZGl2Iiw0KSg3LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDgsImlucHV0Iiw1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudXNlUGlja2Vycz1mfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC51''@;'; put 'put ''c2VQaWNrZXJzQ2hhbmdlKCl9KSx5ZSgpLG1lKDksImxhYmVsIiwzKSxOZSgxMCwiIFVzZSBwaWNrZXJzICIpLHllKCkoKSgpKCksbWUoMTEsImRpdiIsNikoMTIsImRpdiIsNykoMTMsImNsci1zZWxlY3QtY29udGFpbmVyIikoMTQsImxhYmVsIiksTmUoMTUsIkdyb3VwIGxvZ2ljIikseWUo''@;'; put 'put ''KSxtZSgxNiwic2VsZWN0Iiw4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZ3JvdXBMb2dpYz1mfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2V0R3JvdXBMb2dpYyhkLmdyb3VwTG9naWMpfSksUWUoMTcsQkJlLDIsMiwib3B0aW9uIiw5''@;'; put 'put ''KSx5ZSgpKCkoKSxtZSgxOCwiZGl2IiwxMCkoMTksInByZSIsMTEpLE5lKDIwLCIgICAgICAiKSxRZSgyMSxqQmUsNCwwLCJkaXYiLDEyKSxOZSgyMiwiXG5cbiAgICAgICIpLG1lKDIzLCJjb2RlIiwxMyksTmUoMjQpLHllKCksTmUoMjUsIlxuICAgICIpLHllKCkoKSgpLG1lKDI2LCJkaXYi''@;'; put 'put ''LDE0KSgyNywiZGl2IiwxNSksUWUoMjgsekJlLDEsMCwiZGl2IiwxNiksUWUoMjksbGplLDE1LDgsImRpdiIsMTcpLHllKCkoKSxRZSgzMCxoamUsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxOCxFYyksUWUoMzIscGplLDIsNCwibmctdGVtcGxhdGUiLG51bGwsMTksRWMpLFFlKDM0LG1qZSwy''@;'; put 'put ''LDUsIm5nLXRlbXBsYXRlIixudWxsLDIwLEVjKSxRZSgzNix5amUsOSw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwyMSxFYykpLDImYSYmKENlKDMpLFJlKCJuZ01vZGVsIixkLmR5bmFtaWNXaGVyZUNsYXVzZSksQ2UoNSksUmUoIm5nTW9kZWwiLGQudXNlUGlja2VycyksQ2UoOCksUmUoImRpc2Fi''@;'; put 'put ''bGVkIiwobnVsbD09ZC5jbGF1c2VzfHxudWxsPT1kLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKTwxKSgibmdNb2RlbCIsZC5ncm91cExvZ2ljKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5sb2dpY09wZXJhdG9ycyksQ2UoNCksUmUoIm5nSWYiLGQud2hl''@;'; put 'put ''cmVDbGF1c2VMb2FkaW5nKSxDZSgzKSxvcihkLndoZXJlQ2xhdXNlKSxDZSgzKSxocigiY2xyLWNvbC1tZC0xMCIsKG51bGw9PWQuY2xhdXNlc3x8bnVsbD09ZC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6ZC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk+MSksQ2UoMSksUmUoIm5nSWYiLChudWxs''@;'; put 'put ''PT1kLmNsYXVzZXN8fG51bGw9PWQuY2xhdXNlcy5xdWVyeU9iaj9udWxsOmQuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmNsYXVzZXMucXVlcnlPYmopKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxyZCxuZCx0aCxrYSxvdSxzdSxVcyxEMCxEOCxUMCxO''@;'; put 'put ''OCxIOCxsMSxjMSxXYSxTMCxNMCxCcyxPcyxNc2UsVTcsTkJlLFZCZV0sc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04IjsuY29udGVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1sb2dpY1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1''@;'; put 'put ''c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JhY2tncm91bmQ6I2U5ZTllOTtwYWRkaW5nOjE1cHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde3BhZGRpbmc6MzBweCAwIDIwcHggMjBweDtiYWNrZ3JvdW5kOiNmYmY4Zjg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOnJlbGF0aXZlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5j''@;'; put 'put ''bGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5jbHItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xh''@;'; put 'put ''dXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gPiAuY2xyLXJvd1tfbmdjb250ZW50LSVDT01QJV06bm90KDpsYXN0LWNoaWxkKXtwYWRkaW5nLWJvdHRvbToxNXB4O21hcmdpbi1ib3R0b206MTVweDtib3JkZXItYm90''@;'; put 'put ''dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xNil9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O2NvbG9yOmdyYXl9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgLnZhcmlhYmxlLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZy1ib3R0b206MXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xh''@;'; put 'put ''dXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YXJpYWJsZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFyaWFibGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcGVyYXRvci1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5j''@;'; put 'put ''b250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcGVyYXRvci1jb2xbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNlbGVjdC1jb250YWluZXJbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde2hlaWdodDo0NXB4O21hcmdpbi10b3A6MDt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmctYm90dG9tOjFweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jaGVja2JveC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmc6MCA1cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMyl9LmNvbnRlbnRbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hlY2tib3gtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItY2hlY2tib3gt''@;'; put 'put ''Y29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAuY2hlY2tib3gtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICBzZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0OjEyMHB4O292ZXJmbG93LXk6c2Nyb2xsfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5j''@;'; put 'put ''bGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRh''@;'; put 'put ''aW5lcnt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVs''@;'; put 'put ''ZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2Ut''@;'; put 'put ''cXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRo''@;'; put 'put ''OjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVl''@;'; put 'put ''LWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT10aW1lXVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNs''@;'; put 'put ''YXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9s''@;'; put 'put ''LWNvbnRhaW5lcnt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdl''@;'; put 'put ''LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1x''@;'; put 'put ''dWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfS5j''@;'; put 'put ''b250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgLmZyb21bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MTBweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT10aW1lXVtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLnRvW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6MTAwcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29u''@;'; put 'put ''dGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVdICAgLnRvW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT10aW1lXVtfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLnRvW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9s''@;'; put 'put ''LWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1j''@;'; put 'put ''b250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDox''@;'; put 'put ''MDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdICAgaW5wdXRbdHlwZT10aW1lXVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1idXR0b25zW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5j''@;'; put 'put ''bGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDphdXRvfS5pbnZhbGlkLWNsYXVz''@;'; put 'put ''ZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNkOTRiMzF9LmNsYXVzZS1yb3dbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbjowfS5jbGF1c2Utcm93W19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcntwb3NpdGlv''@;'; put 'put ''bjpyZWxhdGl2ZTtjb250ZW50OiIiO2hlaWdodDouNDE2NjdyZW07d2lkdGg6LjQxNjY3cmVtO3RvcDouMjkxNjdyZW07cmlnaHQ6LjI1cmVtO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJG''@;'; put 'put ''JTJGd3d3LnczLm9yZ1xcMjAyNiUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlk''@;'; put 'put ''ZGxlO21hcmdpbjowfVtfbmdjb250ZW50LSVDT01QJV06bm90KHByZSkgPiBjb2RlW2NsYXNzKj1sYW5ndWFnZS1dW19uZ2NvbnRlbnQtJUNPTVAlXSwgcHJlW2NsYXNzKj1sYW5ndWFnZS1dW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmYmY4Zjh9cHJlW2NsYXNzKj1s''@;'; put 'put ''YW5ndWFnZS1dW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjhweDttYXJnaW46MDtib3JkZXItcmFkaXVzOjFweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDo2NnB4O3Bvc2l0aW9uOnJlbGF0aXZlfXByZVtjbGFz''@;'; put 'put ''cyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLnNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDt0b3A6MTBweH1wcmVbY2xhc3MqPWxhbmd1YWdlLV0gY29kZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6cHJl''@;'; put 'put ''LXdyYXA7d29yZC1icmVhazpicmVhay13b3JkfS5pbnB1dC12YWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowcHg7YmFja2dyb3VuZDojZmJmOGY4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9Y2xyLWRhdGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4t''@;'; put 'put ''dG9wOjJweCFpbXBvcnRhbnR9aW5wdXRbdHlwZT10aW1lXVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjNiM2IzfWlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxp''@;'; put 'put ''bmU6bm9uZX0uaW4tdmFsdWVzLW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICNkOGQ4ZDg7bWFyZ2luLXRvcDoxMHB4fS5wcm9ncmVzc1tfbmdjb250ZW50LSVDT01QJV0sIC5wcm9ncmVzcy1z''@;'; put 'put ''dGF0aWNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7d2lkdGg6MTAwJTtoZWlnaHQ6NHB4O3RvcDozcHh9J119KSxjfSkoKTtjb25zdCB3amU9WyJzZWFyY2hMaWJUcmVlSW5wdXQiXTtmdW5jdGlvbiBDamUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29u''@;'; put 'put ''Iiw5KX1mdW5jdGlvbiBTamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixqdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCl9''@;'; put 'put ''fWZ1bmN0aW9uIE1qZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDMpKDEsImRpdiIsNCkoMiwiaW5wdXQiLDUsNikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLmxpYnJhcmllc1NlYXJjaD1oKX0pKCJr''@;'; put 'put ''ZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpLFFlKDQsQ2plLDEsMCwiY2xyLWljb24iLDcpLFFlKDUsU2plLDEsMCwiY2xyLWljb24iLDgpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1qZSgpO0NlKDIpLFJlKCJu''@;'; put 'put ''Z01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24geGplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsOSl9ZnVuY3Rpb24gRWplKGMsbCl7aWYoMSZjKXtj''@;'; put 'put ''b25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSksamUoKTtjb25zdCBoPSRpKDMpLGY9amUoMikuJGltcGxpY2l0LF89amUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixqdChfLnRyZWVPbkZpbHRlcihmLCJ0YWJs''@;'; put 'put ''ZXMuVEFCTEVOQU1FIikpfSkseWUoKX19ZnVuY3Rpb24ga2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMykoMSwiZGl2Iiw0KSgyLCJpbnB1dCIsMTcsMTgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUo''@;'; put 'put ''MikuJGltcGxpY2l0LnNlYXJjaFN0cmluZz1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSkseWUoKSxRZSg0LHhqZSwxLDAsImNsci1pY29uIiw3KSxRZSg1LEVqZSwx''@;'; put 'put ''LDAsImNsci1pY29uIiw4KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9amUoMikuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4w''@;'; put 'put ''KX19ZnVuY3Rpb24gQWplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjYpfWZ1bmN0aW9uIFRqZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI3KX1mdW5jdGlvbiBEamUoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiksTmUoMSwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1''@;'; put 'put ''cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIikseWUoKSl9ZnVuY3Rpb24gSWplKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjgpLFFlKDEsRGplLDIsMCwic3BhbiIsMjUpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpLm5nVmFyO0NlKDEpLFJlKCJuZ0lmIixhKX19''@;'; put 'put ''ZnVuY3Rpb24gTGplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsOSl9ZnVuY3Rpb24gUmplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSksamUoKTtjb25zdCBoPSRpKDMpLGY9amUoMykuJGltcGxpY2l0''@;'; put 'put ''LF89amUoMyk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50cmVlT25GaWx0ZXIoZiwiY29sdW1ucy5DT0xOQU1FIikpfSkseWUoKX19ZnVuY3Rpb24gT2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMykoMSwiZGl2Iiw0''@;'; put 'put ''KSgyLCJpbnB1dCIsMjksMTgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoMykuJGltcGxpY2l0LnNlYXJjaFN0cmluZz1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDMpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoMyku''@;'; put 'put ''dHJlZU9uRmlsdGVyKGgsImNvbHVtbnMuQ09MTkFNRSIpKX0pLHllKCksUWUoNCxMamUsMSwwLCJjbHItaWNvbiIsNyksUWUoNSxSamUsMSwwLCJjbHItaWNvbiIsOCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPWplKDMpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdNb2RlbCIsZC5z''@;'; put 'put ''ZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFBqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDMwKSx4dCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz1qZSgzKS4kaW1wbGljaXQsVD1qZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkuY29sdW1uT25DbGljayhmLFQsXykpfSkscXQoMiwiY2xyLWljb24iLDMxKSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwu''@;'; put 'put ''JGltcGxpY2l0LGQ9amUoNik7Q2UoMSksaHIoImNvbHVtbi1hY3RpdmUiLGQubGliQ29sdW1uQWN0aXZlKGEuQ09MVVJJKSksQ2UoMiksbXIoIiAiLGEuQ09MTkFNRSwiICIpfX1mdW5jdGlvbiBGamUoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLE9qZSw2LDMsImNsci10cmVlLW5vZGUiLDAp''@;'; put 'put ''LFFlKDIsUGplLDQsMywiY2xyLXRyZWUtbm9kZSIsMSksWXIoKSksMiZjKXtjb25zdCBhPWplKDIpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsYS5jb2x1bW5zKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gSGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7''@;'; put 'put ''bWUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDIwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS5uZ1ZhcixfPWplKCkuJGltcGxpY2l0LFQ9amUoMikuJGltcGxpY2l0LFc9amUoKTtyZXR1cm4ganQoZj8iIjpXLnRhYmxlT25DbGljayhfLlRBQkxFVVJJLF8sVCkp''@;'; put 'put ''fSksenIoMiwyMSksUWUoMyxBamUsMSwwLCJjbHItaWNvbiIsMjIpLFFlKDQsVGplLDEsMCwiY2xyLWljb24iLDIzKSxZcigpLE5lKDUpLHllKCksUWUoNixJamUsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwyNCksUWUoNyxGamUsMywyLCJuZy1jb250YWluZXIiLDI1KSx5ZSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1sLm5nVmFyLGQ9amUoKS4kaW1wbGljaXQsaD1qZSgyKS4kaW1wbGljaXQsZj1qZSgpO0NlKDEpLGhyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoInRhYmxlLWFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxDZSgxKSxSZSgibmdTd2l0Y2giLGQuaW5j''@;'; put 'put ''bHVkZXMoIi1GQyIpKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwhMCksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITEpLENlKDEpLG1yKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksQ2UoMiksUmUoIm5nSWYiLGYuaGFzQ29sdW1ucyl9fWZ1bmN0aW9uIE5qZShjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0LFQ9amUoMikuJGltcGxpY2l0O3JldHVybiBqdChqZSgpLnRyZWVOb2RlQ2xpY2tlZChoLF8sVC50YWJsZXMpKX0pKCJjbHJFeHBhbmRlZENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLFFlKDEsSGplLDgsOSwiY2xyLXRvb2x0aXAiLDE5KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1qZSgzKTtocigiY2xyLWV4cGFuZGVkIixhLmV4cGFu''@;'; put 'put ''ZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdDb2x1bW5zJiYhYS5jb2x1bW5zKSxDZSgxKSxSZSgibmdWYXIiLGQrMT5oLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIFZqZShjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDEyLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9amUoKS4kaW1wbGljaXQsXz1qZSgpO3JldHVybiBqdChfLnRyZWVOb2RlQ2xpY2tlZChoLGYsXy5saWJyYXJ5TGlzdCkpfSkoImNsckV4cGFu''@;'; put 'put ''ZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgyLCJwIiwxNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoMSksZj1qZSgpLiRpbXBsaWNpdCxfPWplKCk7cmV0dXJuIF8ubGliPWYuTElC''@;'; put 'put ''UkFSWUlELGp0KF8ubGlicmFyeU9uQ2xpY2soXy5saWJ8fCIiLGYsaCkpfSkscXQoMywiY2xyLWljb24iLDE1KSxOZSg0KSx5ZSgpLFFlKDUsa2plLDYsMywiY2xyLXRyZWUtbm9kZSIsMCksUWUoNixOamUsMiw1LCJjbHItdHJlZS1ub2RlIiwxNikseWUoKX1pZigyJmMpe2NvbnN0IGE9amUo''@;'; put 'put ''KS4kaW1wbGljaXQ7aHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDQpLG1yKCIgIixhLkxJQlJBUllOQU1FLCIgIiksQ2UoMSksUmUoIm5nSWYiLGEudGFi''@;'; put 'put ''bGVzKSxDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBCamUoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLFZqZSw3LDcsImNsci10cmVlLW5vZGUiLDExKSxZcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZv''@;'; put 'put ''cmVncm91bmQpfX1mdW5jdGlvbiBqamUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDMyKSgxLCJzcGFuIiwzMyksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1sZXQgemplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLmxpY2VuY2VT''@;'; put 'put ''ZXJ2aWNlPWQsdGhpcy5zZWFyY2hMaWJJbnB1dExpc3Q9bmV3IGVoLHRoaXMudGFibGVPbkNsaWNrRW1pdHRlcj1uZXcgRXIsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXI9bmV3IEVyLHRoaXMuaGFzQ29sdW1ucz0hMSx0aGlzLnBhZ2luZz0hMCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0''@;'; put 'put ''aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNlYXJjaExpYklucHV0''@;'; put 'put ''TGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX1uZ09uQ2hhbmdlcyhhKXthLmxpYnJhcnlMaXN0Py5jdXJyZW50VmFsdWUmJnRoaXMubGlicmFyeUxpc3QmJnRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QpfXRyZWVPbkZpbHRlcihh''@;'; put 'put ''LGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksR24ubGluZWFnZS5saWJyYXJp''@;'; put 'put ''ZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1saWJyYXJ5T25DbGljayhhLGQsaCl7ZC5pbkZvcmVncm91bmQ9ITA7Y29uc3QgZj0oKT0+c2V0''@;'; put 'put ''VGltZW91dCgoKT0+aC5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmZvY3VzKCkpO2lmKGQudGFibGVzKWQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6''@;'; put 'put ''YSxsaWJyYXJ5OmQsdGFibGVzTG9hZGVkOiEwfSk7ZWxzZXtkLmxvYWRpbmdUYWJsZXM9ITAsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6YSxsaWJyYXJ5OmQsdGFibGVzTG9hZGVkOiExfSk7Y29uc3QgXz1zZXRJbnRlcnZhbCgoKT0+e2QubG9hZGluZ1RhYmxlc3x8''@;'; put 'put ''KGYoKSxjbGVhckludGVydmFsKF8pKX0sNTAwKX1kLmV4cGFuZGVkJiZmKCksdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyh0aGlzLmxpYnJhcnlMaXN0LGQpfXRhYmxlT25DbGljayhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Zi5oZWxwZXJTZXJ2aWNlLmRlYm91bmNl''@;'; put 'put ''Q2FsbCg1MCwoKT0+e2YuaGFzQ29sdW1ucz8oZC5jb2x1bW5zPyhkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLCEwPT09ZC5leHBhbmRlZCYmKGYudGFibGU9YSxmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6aCxjb2x1bW5zTG9hZGVkOiEw''@;'; put 'put ''fSkpKTooZC5leHBhbmRlZD0hZC5leHBhbmRlZCxkLmxvYWRpbmdDb2x1bW5zPSEwLGYudGFibGU9YSxmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6aCxjb2x1bW5zTG9hZGVkOiExfSkpLGYuY29sbGFwc2VUcmVlSXRlbXMoaC50YWJs''@;'; put 'put ''ZXMsZCkpOmYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9KX0pfSkoKX1jb2x1bW5PbkNsaWNrKGEsZCxoKXt0aGlzLmxpYj1kLkxJQlJBUllJRCx0aGlzLnRhYmxlPWguVEFCTEVVUkksdGhpcy5jb2x1''@;'; put 'put ''bW49YS5DT0xVUkl9bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09PXRoaXMubGliJiZkPT09dGhpcy50YWJsZX1saWJDb2x1bW5BY3RpdmUoYSl7aWYoIXRoaXMuY29sdW1uKXJldHVybiExO2xldCBkPWEuc3BsaXQoIlxcIiksaD10aGlzLmNv''@;'; put 'put ''bHVtbi5zcGxpdCgiXFwiKTtyZXR1cm4gZFtkLmxlbmd0aC0xXT09aFtoLmxlbmd0aC0xXX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMo''@;'; put 'put ''KXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX1oYW5kbGVTY3JvbGwoYSl7bGV0IGQ9YS50YXJnZXQ7ZCYm''@;'; put 'put ''ZC5zY3JvbGxUb3A+PWQuc2Nyb2xsSGVpZ2h0LWQub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLmxvYWRNb3JlTGlicmFyaWVzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFjKSx0dChDMCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVj''@;'; put 'put ''dG9yczpbWyJkYy10cmVlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8od2plLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuc2VhcmNoTGliSW5wdXRMaXN0PWgpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgic2Nyb2xsIixmdW5jdGlvbihm''@;'; put 'put ''KXtyZXR1cm4gZC5oYW5kbGVTY3JvbGwoZil9KX0saW5wdXRzOntoYXNDb2x1bW5zOiJoYXNDb2x1bW5zIixwYWdpbmc6InBhZ2luZyIsbGlicmFyeUxpc3Q6ImxpYnJhcnlMaXN0In0sb3V0cHV0czp7dGFibGVPbkNsaWNrRW1pdHRlcjoidGFibGVPbkNsaWNrRW1pdHRlciIsbGlicmFyeU9u''@;'; put 'put ''Q2xpY2tFbWl0dGVyOiJsaWJyYXJ5T25DbGlja0VtaXR0ZXIifSxmZWF0dXJlczpbdmFdLGRlY2xzOjQsdmFyczozLGNvbnN0czpbWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJ''@;'; put 'put ''ZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJz''@;'; put 'put ''ZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIs''@;'; put 'put ''ImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsibGliVHJlZU5vZGUiLCIiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNr''@;'; put 'put ''Il0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUi''@;'; put 'put ''LCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5n''@;'; put 'put ''U3dpdGNoIl0sWyJzaGFwZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYm9sdCJd''@;'; put 'put ''LFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5n''@;'; put 'put ''ZSIsImtleXVwIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItdHJlZSIp''@;'; put 'put ''LFFlKDEsTWplLDYsMywiY2xyLXRyZWUtbm9kZSIsMCksUWUoMixCamUsMiwxLCJuZy1jb250YWluZXIiLDEpLHllKCksUWUoMyxqamUsMywwLCJkaXYiLDIpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJ5TGlzdCksQ2UoMSksUmUoIm5nRm9yT2YiLGQubGlicmFyeUxpc3QpLENl''@;'; put 'put ''KDEpLFJlKCJuZ0lmIixkLmxpYnJhcmllc1BhZ2luZykpfSxkZXBlbmRlbmNpZXM6W3hzLFppLG5kLHRoLGRkLGcxLERwLGthLFp1LGMyLGYxLEJiLHpiLGpiLFdhLEJzLE9zLFU3XSxzdHlsZXM6WyJjbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfWNsci10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI6Zm9jdXMgLmNsci10cmVlbm9kZS1saW5re2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci10cmVlLWxp''@;'; put 'put ''bmstaG92ZXItY29sb3IsICNlOGU4ZTgpO3RleHQtZGVjb3JhdGlvbjpub25lfSJdfSksY30pKCk7Y29uc3QgVWplPVsicmVzaXplQm94Il0sWmplPVsiZHJhZ0hhbmRsZUNvcm5lciJdO2Z1bmN0aW9uIFlqZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDMyKSxOZSgxKSx5ZSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9amUoKTtDZSgxKSxqYygiVG8gdW5sb2NrIG1vcmUgdGhlbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PyJ2aWV3Ym94Ijoidmlld2JveGVzIiwiLCBjb250YWN0IHN1cHBvcnRA''@;'; put 'put ''ZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gV2plKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMykscXQoMSwiY2xyLXNwaW5uZXIiLDM0KSx5ZSgpKX1mdW5jdGlvbiBHamUoYyxsKXsxJmMmJihtZSgwLCJwIiwzNSksTmUoMSwiIFZpZXdib3ggb3BlbiBsaW1pdCByZWFjaGVkICIpLHll''@;'; put 'put ''KCkpfWZ1bmN0aW9uICRqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRjLXRyZWUiLDM2KSx4dCgibGlicmFyeU9uQ2xpY2tFbWl0dGVyIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS5saWJyYXJ5T25DbGljayhoKSl9KSgidGFibGVPbkNsaWNrRW1pdHRlciIs''@;'; put 'put ''ZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkudGFibGVPbkNsaWNrKGgpKX0pLHllKCl9MiZjJiZSZSgibGlicmFyeUxpc3QiLGplKCkubGlicmFyaWVzKX1mdW5jdGlvbiBxamUoYyxsKXsxJmMmJihtZSgwLCJwIiwzNyksTmUoMSwiIFBpY2sgdGFibGUgZnJvbSB0aGUgbGlzdCBv''@;'; put 'put ''biB0aGUgbGVmdCAiKSx5ZSgpKX1mdW5jdGlvbiBLamUoYyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiw0NSl9ZnVuY3Rpb24gWGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYSIsMTIpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1qZSgpLiRpbXBs''@;'; put 'put ''aWNpdCxfPWplKCk7cmV0dXJuIF8ubWluaW1pemUoZiksanQoXy5zdG9wUHJvcGFnYXRpb24oaCkpfSkscXQoMSwiY2xyLWljb24iLDE1KSxtZSgyLCJzcGFuIiwxNCksTmUoMywiTWluaW1pemUgdmlld2JveCIpLHllKCkoKX19ZnVuY3Rpb24gSmplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu''@;'; put 'put ''KCk7bWUoMCwiYSIsMTIpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1qZSgpLiRpbXBsaWNpdCxfPWplKCk7cmV0dXJuIF8ucmVzdG9yZShmKSxqdChfLnN0b3BQcm9wYWdhdGlvbihoKSl9KSxxdCgxLCJjbHItaWNvbiIsMTYpLG1lKDIsInNwYW4iLDE0KSxOZSgzLCJS''@;'; put 'put ''ZXN0b3JlIHZpZXdib3giKSx5ZSgpKCl9fWZ1bmN0aW9uIFFqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMzgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoKS5zZWxlY3RWaWV3Ym94KGYpKX0pLG1lKDEs''@;'; put 'put ''ImRpdiIsMzkpLE5lKDIpLFFlKDMsS2plLDEsMCwiY2xyLXNwaW5uZXIiLDQwKSx5ZSgpLG1lKDQsImRpdiIpKDUsImEiLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0LFQ9amUoKTtyZXR1cm4gVC5yZXNldFBvc1NpemUoXyksanQoVC5zdG9wUHJv''@;'; put 'put ''cGFnYXRpb24oaCkpfSkscXQoNiwiY2xyLWljb24iLDQyKSxtZSg3LCJzcGFuIiwxNCksTmUoOCwiUmVzZXQgcG9zaXRpb24gYW5kIHNpemUiKSx5ZSgpKCksUWUoOSxYamUsNCwwLCJhIiw0MyksUWUoMTAsSmplLDQsMCwiYSIsNDMpLG1lKDExLCJhIiwxMikseHQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdCxUPWplKCk7cmV0dXJuIFQuY2xvc2UoXyksanQoVC5zdG9wUHJvcGFnYXRpb24oaCkpfSkscXQoMTIsImNsci1pY29uIiw0NCksbWUoMTMsInNwYW4iLDE0KSxOZSgxNCwiQ2xvc2Ugdmlld2JveCIpLHllKCkoKSgpKCl9aWYoMiZjKXtjb25z''@;'; put 'put ''dCBhPWwuJGltcGxpY2l0LGQ9amUoKTtocigic2VsZWN0ZWQiLChudWxsPT1kLnNlbGVjdGVkVmlld2JveD9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94LmlkKT09PWEuaWQpLENlKDIpLGIwKCIgIyIsYS5pZCwiICIsYS5saWJyYXJ5LCIuIixhLnRhYmxlLCIgIiksQ2UoMSksUmUoIm5nSWYiLGEu''@;'; put 'put ''bG9hZGluZ0RhdGEpLENlKDIpLGhyKCJkaXNhYmxlZCIsMD09PWEueCYmMD09PWEueSksQ2UoNCksUmUoIm5nSWYiLCFhLm1pbmltaXplZCksQ2UoMSksUmUoIm5nSWYiLGEubWluaW1pemVkKX19ZnVuY3Rpb24gZXplKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiksTmUoMSkseWUoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLG1yKCIgIixhLCIgIil9fWZ1bmN0aW9uIHR6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO3pyKDApLG1lKDEsImRpdiIsNDgpKDIsImFwcC1hdXRvY29tcGxldGUiLDQ5LDUwKSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0''@;'; put 'put ''KGEpO2NvbnN0IGY9JGkoMyksXz1qZSgpLm5nVmFyO3JldHVybiBqdChqZSgpLm9uQ29sc2VhcmNoQ2hhbmdlKGYsaCxfLmNvbEhlYWRlcnNIaWRkZW4pKX0pLFFlKDQsZXplLDIsMSwib3B0aW9uIiw1MSkseWUoKSgpLFlyKCl9aWYoMiZjKXtjb25zdCBhPWplKCkubmdWYXI7Q2UoMiksUmUo''@;'; put 'put ''ImlucHV0SWQiLCJ2aWV3Ym94LWNvbHVtbi1zZWFyY2giKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLENlKDIpLFJlKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNIaWRkZW4pfX1mdW5jdGlvbiBuemUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw1Nyl9ZnVuY3Rpb24gcnplKGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDU4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoMykub25Db2xSZW1vdmUoaCkpfSkseWUoKX19ZnVuY3Rpb24gaXplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw1''@;'; put 'put ''NCkoMSwic3BhbiIpLE5lKDIpLFFlKDMsbnplLDEsMCwiY2xyLWljb24iLDU1KSx5ZSgpLFFlKDQscnplLDEsMCwiY2xyLWljb24iLDU2KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1qZSgyKS5uZ1ZhcixoPWplKCk7UE0oImNvbC1ib3ggY29sdW1uLSIsYSwiIiksaHIoImN1''@;'; put 'put ''cnNvci1kZWZhdWx0LWkiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSgicHJpbWFyeUtleUhlYWRlclN0eWxlIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksUmUoImNka0RyYWdEYXRhIixhKSgiY2RrRHJhZ0Rpc2FibGVkIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksQ2UoMiksamMoIiAi''@;'; put 'put ''LGEsIiAiLCJudW0iPT09KG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLiRkYXRhZm9ybWF0cy52YXJzW2FdLnR5cGUpPyIobnVtZXJpYykiOiIiLCIg''@;'; put 'put ''IiksQ2UoMSksUmUoIm5nSWYiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxDZSgxKSxSZSgibmdJZiIsIWQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKX19ZnVuY3Rpb24gb3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7enIoMCksbWUoMSwicCIsNSksTmUoMiwiQ29sdW1ucyBUbyBEaXNw''@;'; put 'put ''bGF5IChkcmFnIGFuZCByZS1vcmRlcikiKSx5ZSgpLG1lKDMsImRpdiIsNTIpLHh0KCJjZGtEcm9wTGlzdERyb3BwZWQiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgyKS5jb2x1bW5zRHJvcChoKSl9KSxRZSg0LGl6ZSw1LDEzLCJkaXYiLDUzKSx5ZSgpLFlyKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPWplKCkubmdWYXI7Q2UoMyksUmUoImNka0Ryb3BMaXN0RGF0YSIsYS5jb2xIZWFkZXJzVmlzaWJsZSksQ2UoMSksUmUoIm5nRm9yT2YiLGEuY29sSGVhZGVyc1Zpc2libGUpfX1mdW5jdGlvbiBzemUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQ2KSxRZSgxLHR6ZSw1LDMsIm5n''@;'; put 'put ''LWNvbnRhaW5lciIsNDcpLFFlKDIsb3plLDUsMiwibmctY29udGFpbmVyIiw0NykseWUoKSksMiZjKXtjb25zdCBhPWwubmdWYXI7Q2UoMSksUmUoIm5nSWYiLGEuY29sSGVhZGVyc0hpZGRlbiksQ2UoMSksUmUoIm5nSWYiLGEuY29sSGVhZGVyc1Zpc2libGUpfX1mdW5jdGlvbiBhemUoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsODUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCkuJGltcGxpY2l0O3JldHVybiBqdChqZSgpLmNvbGxhcHNlKGgpKX0pLHllKCl9fWZ1bmN0aW9uIGx6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1W''@;'; put 'put ''bigpO21lKDAsImNsci1pY29uIiw4NikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkuZXhwYW5kKGgpKX0pLHllKCl9fWZ1bmN0aW9uIGN6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiw4''@;'; put 'put ''NykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKS4kaW1wbGljaXQsZj0kaSgxNik7cmV0dXJuIGp0KGplKCkuc2VhcmNoVGFibGUoZixoKSl9KSx5ZSgpfX1mdW5jdGlvbiB1emUoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiw4OCksTmUoMSwiIExvYWRpbmcuLi4gIiks''@;'; put 'put ''eWUoKSl9ZnVuY3Rpb24gZHplKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsODkpLE5lKDEsIkxvYWRpbmcuLi4iKSx5ZSgpKX1mdW5jdGlvbiBoemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsOTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBo''@;'; put 'put ''PWplKCkuJGltcGxpY2l0LGY9JGkoMTYpO3JldHVybiBqZSgpLnJlbG9hZFRhYmxlRGF0YShoKSxqdChmLnZhbHVlPSIiKX0pLHllKCl9fWZ1bmN0aW9uIGZ6ZShjLGwpezEmYyYmKG1lKDAsImRpdiIsOTQpLHF0KDEsImNsci1zcGlubmVyIiwzNCkseWUoKSl9ZnVuY3Rpb24gcHplKGMsbCl7''@;'; put 'put ''aWYoMSZjJiZxdCgwLCJob3QtdGFibGUiLDk1KSwyJmMpe2NvbnN0IGE9amUoKS5uZ1ZhcixkPWplKCkuJGltcGxpY2l0LGg9amUoKTtSZSgiaG90SWQiLCJob3RJbnN0YW5jZV92aWV3Ym94XyIrZC5pZCkoInJlYWRPbmx5IiwhMCkoIm1vZGlmeUNvbFdpZHRoIixoLm1heFdpZHRoQ2hla2Vy''@;'; put 'put ''KSgiY29weVBhc3RlIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4dE1lbnUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb250ZXh0TWVudSkoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTAp''@;'; put 'put ''KCJkYXRhIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3du''@;'; put 'put ''TWVudSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmRyb3Bkb3duTWVudSkoImhlaWdodCIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmhlaWdodCkoImNlbGxzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY2VsbHMpKCJtYXhSb3dzIixoLnZpZXdib3hUYWJsZXNbYV0u''@;'; put 'put ''aG90VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJsaWNlbnNlS2V5IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIGd6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsOTEpLFFlKDEsZnplLDIsMCwiZGl2Iiw5MiksUWUo''@;'; put 'put ''MixwemUsMSwxNywiaG90LXRhYmxlIiw5MykseWUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1qZSgpLiRpbXBsaWNpdDtIdSgiZGlzcGxheSIsZC5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxDZSgxKSxSZSgibmdJZiIsZC5sb2FkaW5nRGF0YSYmYTwwKSxDZSgxKSxSZSgibmdJZiIsYT4tMSl9''@;'; put 'put ''fWNvbnN0IG16ZT1mdW5jdGlvbihjLGwpe3JldHVybnt4OmMseTpsfX07ZnVuY3Rpb24gdnplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1OSw2MCkseHQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoKS5m''@;'; put 'put ''b2N1c1ZpZXdib3goZikpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkudmlld2JveERyYWdFbmRlZChoLF8pKX0pLG1lKDIsImRpdiIsNjEpKDMsInNwYW4iLDYyKSxOZSg0KSx5ZSgpLG1lKDUsImRpdiIsNjMpLFFl''@;'; put 'put ''KDYsYXplLDEsMCwiY2xyLWljb24iLDY0KSxRZSg3LGx6ZSwxLDAsImNsci1pY29uIiw2NSksbWUoOCwiY2xyLWljb24iLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkubWluaW1pemUoZikpfSkseWUoKSxtZSg5LCJjbHIt''@;'; put 'put ''aWNvbiIsNjcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoKS5jbG9zZShmKSl9KSx5ZSgpKCkoKSxtZSgxMCwic3BhbiIsNjgsNjkpLHh0KCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0''@;'; put 'put ''LFQ9JGkoMTEpLFc9JGkoMSk7cmV0dXJuIGp0KGplKCkuZHJhZ01vdmUoVCxXLF8saCkpfSkseWUoKSxtZSgxMiwiZm9ybSIsNzApKDEzLCJkaXYiLDcxKSgxNCwiZGl2Iiw3MikoMTUsImlucHV0Iiw3Myw3NCkseHQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGlt''@;'; put 'put ''cGxpY2l0LF89JGkoMTYpO3JldHVybiBqdChqZSgpLnNlYXJjaFRhYmxlKF8sZikpfSkseWUoKSxRZSgxNyxjemUsMSwwLCJjbHItaWNvbiIsNzUpLFFlKDE4LHV6ZSwyLDAsInNwYW4iLDc2KSx5ZSgpLG1lKDE5LCJjbHItY2hlY2tib3gtY29udGFpbmVyIikoMjAsImNsci1jaGVja2JveC13''@;'; put 'put ''cmFwcGVyIikoMjEsImlucHV0Iiw3NykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS4kaW1wbGljaXQuc2VhcmNoTnVtZXJpYz1oKX0pLHllKCksbWUoMjIsImxhYmVsIiksTmUoMjMsIk51bWVyaWMiKSx5ZSgpKCkoKSgpLG1lKDI0LCJkaXYiLDM5KSxR''@;'; put 'put ''ZSgyNSxkemUsMiwwLCJzcGFuIiw3OCksUWUoMjYsaHplLDEsMCwiY2xyLWljb24iLDc5KSxtZSgyNywiYSIsODApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdCxfPSRpKDE2KTtyZXR1cm4gamUoKS5vcGVuRmlsdGVyKGYpLGp0KF8udmFsdWU9IiIpfSks''@;'; put 'put ''cXQoMjgsImNsci1pY29uIiw4MSksbWUoMjksInNwYW4iLDgyKSxOZSgzMCkseWUoKSgpLG1lKDMxLCJjbHItaWNvbiIsODMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoKS5vcGVuVGFibGVFZGl0KGYpKX0pLHllKCkoKSgpLFFl''@;'; put 'put ''KDMyLGd6ZSwzLDQsImRpdiIsODQpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUoKTtIdSgiZGlzcGxheSIsYS5taW5pbWl6ZWQ/Im5vbmUiOiIiKSgid2lkdGgiLGEud2lkdGgsInB4IikoImhlaWdodCIsYS5oZWlnaHQsInB4IikoInBvaW50ZXItZXZlbnRzIixhLmNv''@;'; put 'put ''bGxhcHNlZD8ibm9uZSI6IiIpKCJib3gtc2hhZG93IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLGhyKCJmb2N1c2VkIixhLmZvY3VzZWQpLFJlKCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsUTIoMzQsbXplLGEueCxhLnkpKSgiaWQiLCJ2aWV3Ym94XyIrYS5pZCksQ2UoNCksYjAoIiAjIixh''@;'; put 'put ''LmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxDZSgyKSxSZSgibmdJZiIsIWEuY29sbGFwc2VkKSxDZSgxKSxSZSgibmdJZiIsYS5jb2xsYXBzZWQpLENlKDMpLFJlKCJpZCIsImhhbmRsZV92aWV3Ym94XyIrYS5pZCksQ2UoMiksSHUoImRpc3BsYXkiLGEuY29sbGFwc2VkPyJu''@;'; put 'put ''b25lIjoiIiksQ2UoMyksUmUoInR5cGUiLGEuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIpLENlKDIpLFJlKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsYS5zZWFyY2hMb2FkaW5nKSxDZSgzKSxSZSgibmdNb2RlbCIsYS5zZWFyY2hOdW1lcmljKSxDZSg0''@;'; put 'put ''KSxSZSgibmdJZiIsYS5sb2FkaW5nRGF0YSksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRpbmdEYXRhKSxDZSgyKSxocigiZmlsdGVyLWFjdGl2ZSIsIjAiIT09YS5maWx0ZXJfcGspLENlKDIpLG9yKGEuZmlsdGVyVGV4dCksQ2UoMSksaHIoImRpc2FibGVkIiwhZC50YWJsZUVkaXRFeGlzdHMo''@;'; put 'put ''YSkpLENlKDEpLFJlKCJuZ1ZhciIsZC5nZXRWaWV3Ym94VGFibGVJbmRleChhKSl9fWZ1bmN0aW9uIF96ZShjLGwpe2lmKDEmYyYmcXQoMCwiYXBwLXF1ZXJ5Iiw5Niw5NyksMiZjKXtjb25zdCBhPWplKCk7UmUoInZpZXdib3hJZCIsbnVsbD09YS5maWx0ZXJpbmdWaWV3Ym94P251bGw6YS5m''@;'; put 'put ''aWx0ZXJpbmdWaWV3Ym94LmlkKX19Y29uc3QgYnplPWZ1bmN0aW9uKGMsbCxhKXtyZXR1cm57Y29sSGVhZGVyc0hpZGRlbjpjLGNvbEhlYWRlcnNWaXNpYmxlOmwsaGVhZGVyUGtzOmF9fTtsZXQgeHNlPSgoKT0+e2NsYXNzIGN7Z2V0IHZpZXdib3hNb2RhbCgpe3JldHVybiB0aGlzLl92aWV3''@;'; put 'put ''Ym94TW9kYWx9c2V0IHZpZXdib3hNb2RhbChhKXtpZighMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3gmJmEpcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiVmlld2JveGVzIiksdm9pZCB0aGlzLnZpZXdib3hNb2RhbENoYW5nZS5lbWl0KCEx''@;'; put 'put ''KTt0aGlzLl92aWV3Ym94TW9kYWw9YSxhJiZ0aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl9Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSl7dGhpcy5uZ1pvbmU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0''@;'; put 'put ''aGlzLnNhc1N0b3JlU2VydmljZT1fLHRoaXMubG9nZ2VyU2VydmljZT1ULHRoaXMuaGVscGVyU2VydmljZT1XLHRoaXMucm91dGVyPWllLHRoaXMuYWN0aXZhdGVkUm91dGU9Z2UsdGhpcy5jZGY9d2UsdGhpcy5fdmlld2JveE1vZGFsPSExLHRoaXMudmlld2JveE1vZGFsQ2hhbmdlPW5ldyBF''@;'; put 'put ''cix0aGlzLmxpYmluZm89bnVsbCx0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITAsdGhpcy52aWV3Ym94ZXM9W10sdGhpcy5kZWZhdWx0Q29uZmlnPXtpZDotMSxsaWJyYXJ5OiIiLHRhYmxlOiIiLHdpZHRoOjUwMCxoZWlnaHQ6MzAwLHg6MCx5OjE1MCxjb2x1bW5zOltdfSx0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLmhvdFRhYmxlRGVmYXVsdD17ZGF0YTpbXSxoZWFkZXJQa3M6W10sJGRhdGFmb3JtYXRzOnt9LGFsbENvbEhlYWRlcnM6W10sY29sSGVhZGVyc0hpZGRlbjpbXSxjb2xIZWFkZXJzVmlzaWJsZTpbXSxjb2xIZWFkZXJzOltdLGNvbnRleHRNZW51''@;'; put 'put ''OlsiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIiwiY29weV9jb2x1bW5faGVhZGVyc19vbmx5Il0sY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LGNvbHVtbnM6W10sY29sczpbXSxoZWlnaHQ6IjEwMCUiLHNldHRpbmdzOnt9LGhpZGRl''@;'; put 'put ''bkNvbHVtbnM6ITAsbWFudWFsQ29sdW1uTW92ZTohMSxhZnRlckdldENvbEhlYWRlcjp2b2lkIDAsbGljZW5zZUtleTp2b2lkIDAsZHJvcGRvd25NZW51OnZvaWQgMH0sdGhpcy52aWV3Ym94VGFibGVzPVtdLHRoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyTG9hZGluZz0hMSx0aGlzLm51bGxW''@;'; put 'put ''YXJpYWJsZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5tYXhWaWV3Ym94ZXM9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD09PTEvMD82OnRoaXMubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLnZpZXdib3hfbGltaXR8fDYsdGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXI9bmV3IEFnfW5nT25Jbml0KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKGQ9Pnt0aGlzLmxpYnJhcmllcz1kLnNhc2xpYnN9KS5jYXRjaChkPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9y''@;'; put 'put ''KGQpfSkuZmluYWxseSgoKT0+e3RoaXMubGlicmFyaWVzTG9hZGluZz0hMX0pLHRoaXMuX3F1ZXJ5PXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShkPT57dGhpcy5jbGF1c2VzPWQub2JqLHRoaXMuZmlsdGVyTGliZHM9ZC5saWJkc30pLHRoaXMuc2FzanNDb25maWc9dGhp''@;'; put 'put ''cy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmhvdFRhYmxlRGVmYXVsdC5saWNlbnNlS2V5PWR9KTtjb25zdCBhPXRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMu''@;'; put 'put ''dmlld2JveGVzO2EmJighMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/KHNldFRpbWVvdXQoKCk9PnRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiTGlua2luZyBWaWV3Ym94ZXMiKSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhp''@;'; put 'put ''cy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczp7fX0pKToodGhpcy52aWV3Ym94ZXM9dGhpcy5kZWNvZGVVcmxEYXRhKGEpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSkpKSx0aGlzLnJlTG9hZFZpZXdib3h0YWJsZXModGhpcy52aWV3Ym94ZXMpfW5n''@;'; put 'put ''QWZ0ZXJWaWV3SW5pdCgpe31nZXQgdmlld2JveExpbWl0UmVhY2hlZCgpe3JldHVybiB0aGlzLnZpZXdib3hlcy5sZW5ndGg+PXRoaXMubWF4Vmlld2JveGVzfWNsck1vZGFsT3BlbkNoYW5nZShhKXt0aGlzLnZpZXdib3hNb2RhbENoYW5nZS5lbWl0KGEpfWxpYnJhcnlPbkNsaWNrKGEpe2Eu''@;'; put 'put ''dGFibGVzTG9hZGVkfHx0aGlzLmxvYWRUYWJsZXMoYS5saWJyYXJ5LkxJQlJBUllSRUYsYS5saWJyYXJ5KX10YWJsZU9uQ2xpY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoZC52aWV3Ym94TGltaXRSZWFjaGVkKXJldHVybjtjb25zdCBoPXsuLi5kLmRlZmF1bHRD''@;'; put 'put ''b25maWcsdGFibGU6YS5saWJUYWJsZSxsaWJyYXJ5OmEubGlicmFyeS5MSUJSQVJZTkFNRSxsb2FkaW5nRGF0YTohMCxmaWx0ZXJfcGs6IjAiLGlkOmQudmlld2JveGVzLmxlbmd0aCsxLHg6d2luZG93LmlubmVyV2lkdGgtZC5kZWZhdWx0Q29uZmlnLndpZHRoLHk6MTUwfTtkLnZpZXdib3hl''@;'; put 'put ''cy5wdXNoKGgpLHNldFRpbWVvdXQoKCk9PntkLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSk7Y29uc3QgZj1gJHthLmxpYnJhcnkuTElCUkFSWVJFRn0uJHthLmxpYlRhYmxlfWA7eWllbGQgZC5sb2FkRGF0YShmLGgpLGgubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hF''@;'; put 'put ''dmVudCgicmVzaXplIiksZC5zbmFwVG9HcmlkKCl9KSgpfWxvYWRUYWJsZXMoYSxkKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGEpLnRoZW4oaD0+e2xldCBmPWgubXB0YWJsZXMubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBfLk1FTU5BTUV9KTt0aGlzLmxpYmluZm89aC5saWJp''@;'; put 'put ''bmZvfHxbXSx0aGlzLnRhYmxlcz1mLGQmJihkLnRhYmxlcz1mLGQubGliaW5mbz10aGlzLmxpYmluZm8sZC5sb2FkaW5nVGFibGVzPSExLGYubGVuZ3RoPjAmJihkLmV4cGFuZGVkPSEwKSl9KS5jYXRjaChoPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKGgpfSl9cmVsb2FkRGF0YShhLGQp''@;'; put 'put ''e3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZixfKT0+e2xldCBUPWgudmlld2JveFRhYmxlcy5maW5kKFc9Plcudmlld2JveElkPT09ZC5pZCk7aC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAi''@;'; put 'put ''KSkudGhlbihXPT57VCYmKFQuaG90VGFibGUuZGF0YT1XLnZpZXdkYXRhKSxmKG51bGwpfSkuY2F0Y2goKCk9PntfKCl9KX0pfSkoKX1sb2FkRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZixfKT0+e2xldCBUPSExLFc9aC52''@;'; put 'put ''aWV3Ym94VGFibGVzLmZpbmQoaWU9PmllLnZpZXdib3hJZD09PWQuaWQpO1cmJigiMCI9PT1kLmZpbHRlcl9wa3x8IWQuZmlsdGVyX3BrKSYmZigpLGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oaWU9PntXP1Q9ITA6Vz17dmll''@;'; put 'put ''d2JveElkOmQuaWQsdmlld2JveExpYkRhdGFzZXQ6YSxob3RUYWJsZTpqeChoLmhvdFRhYmxlRGVmYXVsdCl9LFcuaG90VGFibGUuZGF0YT1pZS52aWV3ZGF0YSxXLmhvdFRhYmxlLiRkYXRhZm9ybWF0cz1pZS4kdmlld2RhdGEsVy5ob3RUYWJsZS5jb2xzPWllLmNvbHMsenooVy5ob3RUYWJs''@;'; put 'put ''ZS5jb2xzLFtdLGllLiR2aWV3ZGF0YSk7bGV0IGdlPVtdLHdlPVtdO2ZvcihsZXQgRWUgaW4gaWUudmlld2RhdGFbMF0pRWUmJndlLnB1c2goRWUpO2ZvcihsZXQgRWU9MDtFZTx3ZS5sZW5ndGg7RWUrKylnZS5wdXNoKHtkYXRhOndlW0VlXX0pO1cuaG90VGFibGUuaGVhZGVyUGtzPWp4KGll''@;'; put 'put ''LnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSksVy5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzPXdlLmZpbHRlcihFZT0+IVcuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKEVlKSksVy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuPWp4KFcuaG90VGFibGUuYWxsQ29sSGVhZGVy''@;'; put 'put ''cyksVy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT13ZS5maWx0ZXIoRWU9PlcuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKEVlKSksVy5ob3RUYWJsZS5jb2xIZWFkZXJzPXdlLFcuaG90VGFibGUuY29sdW1ucz1nZSxkLmNvbHVtbnMmJmQuY29sdW1ucy5sZW5ndGg+MD8oVy5ob3RU''@;'; put 'put ''YWJsZS5tYW51YWxDb2x1bW5Nb3ZlPWQuY29sdW1ucyxkLmNvbHVtbnM/Lm1hcCgoRWUsWmUpPT57Y29uc3Qgb3Q9d2VbRWVdLGV0PVcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5pbmRleE9mKG90KTtldD4tMSYmKFcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UoZXQsMSks''@;'; put 'put ''Vy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZVtaZV09b3QpfSkpOlcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaCguLi5XLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKDAsMTApKSxXLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPVcuaG90VGFibGUuY29sSGVh''@;'; put 'put ''ZGVyc1Zpc2libGUuZmlsdGVyKEVlPT5FZSksVHx8aC52aWV3Ym94VGFibGVzLnB1c2goVyksZC5xdWVyeT1oLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGllLnF1ZXJ5KSxkLmZpbHRlclRleHQ9aWUuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHNldFRpbWVvdXQoKCk9PntoLnVwZGF0ZUhv''@;'; put 'put ''dENvbHVtbnMoVy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVufHxbXSxkLmlkKTtjb25zdCBFZT1oLmdldFZpZXdib3hIb3RJbnN0YW5jZShkLmlkKTtFZT8udXBkYXRlU2V0dGluZ3Moe21hbnVhbENvbHVtbk1vdmU6Vy5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlLGFmdGVyR2V0Q29sSGVh''@;'; put 'put ''ZGVyOihaZSxvdCk9Pntjb25zdCBldD1FZT8uY29sVG9Qcm9wKFplKTtldCYmVy5ob3RUYWJsZS5oZWFkZXJQa3MuaW5kZXhPZihldCk+LTEmJm90LmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpfX0pLEVlPy5yZW5kZXIoKSxoLnNlbGVjdGVkVmlld2JveCYmaC5yZXNl''@;'; put 'put ''dFNlbGVjdGVkVmlld2JveChkKX0pLGYoKX0pLmNhdGNoKGllPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKGllKSxfKCl9KX0pfSkoKX1yZUxvYWRWaWV3Ym94dGFibGVzKGEpe2EubWFwKGQ9Pntjb25zdCBoPWAke2QubGlicmFyeX0uJHtkLnRhYmxlfWA7ZC5sb2FkaW5nRGF0YT0hMCx0aGlz''@;'; put 'put ''LmxvYWREYXRhKGgsZCkudGhlbigoKT0+e2QubG9hZGluZ0RhdGE9ITF9KX0pfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldFZpZXdib3hUYWJsZUluZGV4KGEpe3JldHVybiB0aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGg9Pmgudmlld2JveElkPT09YS5p''@;'; put 'put ''ZCl9cmVzaXplKGEsZCl7Y29uc3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxfPWgubGVmdC1mLmxlZnQraC53aWR0aCxUPWgudG9wLWYudG9wK2guaGVpZ2h0O3JldHVybiBkLnN0eWxlLndpZHRoPV8rInB4IixkLnN0eWxlLmhlaWdo''@;'; put 'put ''dD1UKyJweCIsdGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKSx0aGlzLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDFlMywoKT0+e3RoaXMudmlld2JveENoYW5nZWQoKSx0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pLHt3aWR0aDpfLGhlaWdodDpUfX1k''@;'; put 'put ''cmFnTW92ZShhLGQsaCxmKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IF89dGhpcy5yZXNpemUoYSxkKTtoLndpZHRoPV8ud2lkdGgsaC5oZWlnaHQ9Xy5oZWlnaHR9KX1zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKXt0aGlzLnJlc2l6ZUJveFF1ZXJ5LmZvckVhY2go''@;'; put 'put ''YT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9YGhhbmRsZV8ke2EubmF0aXZlRWxlbWVudC5pZH1gLGY9dGhpcy5kcmFnSGFuZGxlQ29ybmVyUXVlcnkuZmluZCgoXyxUKT0+Xy5uYXRpdmVFbGVtZW50LmlkPT09aCk7dGhpcy5zZXRIYW5kbGVU''@;'; put 'put ''cmFuc2Zvcm0oZj8ubmF0aXZlRWxlbWVudCxkLCJib3RoIil9KX1zZXRIYW5kbGVUcmFuc2Zvcm0oYSxkLGgpe2NvbnN0IGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgXz1kLndpZHRoLWYud2lkdGgsVD1kLmhlaWdodC1mLmhlaWdodDtfKz01LFQrPTUsIngiPT09aCYmKGEuc3R5''@;'; put 'put ''bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHtffXB4LCAwKWApLCJ5Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKDAsICR7VH1weClgKSwiYm90aCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke199cHgsICR7VH1weClgKX1mb2N1c1ZpZXdib3goYSl7''@;'; put 'put ''dGhpcy52aWV3Ym94ZXMubWFwKGQ9PntkLmZvY3VzZWQ9ITF9KSxhLmZvY3VzZWQ9ITB9dmlld2JveERyYWdFbmRlZChhLGQpe2xldCBmPWEuc291cmNlLmdldFJvb3RFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC54PWYubGVmdCxkLnk9Zi50b3AsdGhpcy52aWV3Ym94Q2hh''@;'; put 'put ''bmdlZCgpfXNuYXBUb0dyaWQoKXtjb25zdCBhPXdpbmRvdy5pbm5lcldpZHRoLGQ9d2luZG93LmlubmVySGVpZ2h0LFQ9TWF0aC5jZWlsKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSxXPU1hdGguZmxvb3IodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLHdlPShhLTUqKFQrMSkpL1QsRWU9KGEt''@;'; put 'put ''NSooVysxKSkvVztsZXQgb3Q9MCx5dD0oZC0yNTAtNjApLzIsa3Q9MCxTdD0wO2ZvcihsZXQgUXQ9MDtRdDx0aGlzLnZpZXdib3hlcy5sZW5ndGg7UXQrKyl7bGV0IG5uPXRoaXMudmlld2JveGVzW1F0XSxtbj0hKFF0PlQtMSk7Y29uc3QgRW49bW4/d2U6RWU7IW1uJiYwPT09U3QmJihrdD0w''@;'; put 'put ''LFN0Kyssb3Q9MCksbm4ueD01K290K2t0KihFbis1KSxubi55PTI1MCtTdCooeXQrNSksbm4ud2lkdGg9RW4sbm4uaGVpZ2h0PXl0LGt0Kyt9dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSl9bWluaW1pemVBbGwoKXt0''@;'; put 'put ''aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMH0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzZXRQb3NTaXplKGEpe2EueD13''@;'; put 'put ''aW5kb3cuaW5uZXJXaWR0aC10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS55PXRoaXMuZGVmYXVsdENvbmZpZy55LGEud2lkdGg9dGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEuaGVpZ2h0PXRoaXMuZGVmYXVsdENvbmZpZy5oZWlnaHQsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfW1pbmltaXpl''@;'; put 'put ''KGEpe2EubWluaW1pemVkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlKGEpe2EubWluaW1pemVkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jb2xsYXBzZShhKXthLmNvbGxhcHNlZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9ZXhwYW5kKGEpe2EuY29sbGFwc2VkPSExLHRo''@;'; put 'put ''aXMudmlld2JveENoYW5nZWQoKX1jbG9zZShhKXtjb25zdCBkPXRoaXMudmlld2JveGVzLmZpbmRJbmRleChmPT5mLmlkPT09YS5pZCksaD10aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGY9PmYudmlld2JveElkPT09YS5pZCk7ZD4tMSYmdGhpcy52aWV3Ym94ZXMuc3BsaWNlKGQsMSks''@;'; put 'put ''aD4tMSYmdGhpcy52aWV3Ym94VGFibGVzLnNwbGljZShoLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD09PWEuaWQmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKSxHbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShQTyksdGhpcy52aWV3Ym94Q2hh''@;'; put 'put ''bmdlZCgpfXNlbGVjdFZpZXdib3goYSl7dm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZSYmdm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKTphLmlkPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkP3RoaXMudW5zZXRTZWxl''@;'; put 'put ''Y3RlZFZpZXdib3goKTp0aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpfWNvbHVtbnNEcm9wKGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4mJihhLnByZXZpb3VzQ29udGFpbmVyPT09YS5jb250YWluZXI/Y3NlKGEuY29udGFpbmVyLmRh''@;'; put 'put ''dGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KTpmdW5jdGlvbiBnQmUoYyxsLGEsZCl7Y29uc3QgaD1zdyhhLGMubGVuZ3RoLTEpLGY9c3coZCxsLmxlbmd0aCk7Yy5sZW5ndGgmJmwuc3BsaWNlKGYsMCxjLnNwbGljZShoLDEpWzBdKX0oYS5wcmV2aW91c0NvbnRhaW5lci5kYXRh''@;'; put 'put ''LGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlJiYib2JqZWN0Ij09dHlwZW9mIHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVycykmJnRoaXMudXBkYXRlQ29s''@;'; put 'put ''dW1uT3JkZXJIb3QoYS5pdGVtLmRhdGEsYS5jdXJyZW50SW5kZXgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfW9uQ29sc2VhcmNoQ2hhbmdlKGEsZCxoKXtjb25zdCBmPWguaW5kZXhPZihkKTtoLnNwbGljZShmLDEpLGEudmFsdWU9IiIsdGhpcy5zZWxlY3RlZFZpZXdi''@;'; put 'put ''b3hUYWJsZT8uaG90VGFibGUmJih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnB1c2goZCksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxl''@;'; put 'put ''Y3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoZCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aC0xLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSl9b25Db2xSZW1v''@;'; put 'put ''dmUoYSl7aWYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUpe2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5pbmRleE9mKGEpO3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zp''@;'; put 'put ''c2libGUuc3BsaWNlKGQsMSksdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnB1c2goYSksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3Rl''@;'; put 'put ''ZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9fXJlc2V0U2VsZWN0ZWRW''@;'; put 'put ''aWV3Ym94KGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PWEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT10aGlzLnZpZXdib3hUYWJsZXMuZmluZChkPT5kLnZpZXdib3hJZD09PWEuaWQpfXVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl7dGhpcy5zZWxlY3RlZFZpZXdib3g9dm9pZCAwLHRoaXMuc2Vs''@;'; put 'put ''ZWN0ZWRWaWV3Ym94VGFibGU9dm9pZCAwfXN0b3BQcm9wYWdhdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfW9wZW5GaWx0ZXIoYSl7dGhpcy5zZWxlY3RWaWV3Ym94KGEpO2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzW3RoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSldO3RoaXMuZmls''@;'; put 'put ''dGVyTGliZHM9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YCx0aGlzLmZpbHRlcmluZ1ZpZXdib3g9YSx0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5maWx0ZXJMaWJkcyxkLmhvdFRhYmxl''@;'; put 'put ''LmNvbHMpfW9wZW5UYWJsZUVkaXQoYSl7Y29uc3QgZD1hLmxpYnJhcnkrIi4iK2EudGFibGU7bGV0IGg9bG9jYXRpb24uaHJlZi5zbGljZSgwLGxvY2F0aW9uLmhyZWYuaW5kZXhPZigiIyIpKTtoPWAke2h9Iy9lZGl0b3IvJHtkfWAsd2luZG93Lm9wZW4oaCwiX2JsYW5rIil9cmVzZXRGaWx0''@;'; put 'put ''ZXIoKXt0aGlzLmZpbHRlcmluZ1ZpZXdib3gmJih0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPSIwIix0aGlzLnJlbG9hZFRhYmxlRGF0YSh0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLHRoaXMuZmlsdGVyPSExLHRoaXMudmlld2JveENoYW5nZWQoKSxHbi52aWV3Ym94ZXNbdGhpcy5m''@;'; put 'put ''aWx0ZXJpbmdWaWV3Ym94LmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFBPKSl9c2VuZENsYXVzZSgpe3RoaXMuZmlsdGVyTG9hZGluZz0hMDtsZXQgYT1bXSxkPVtdO2lmKHR5cGVvZiB0aGlzLmNsYXVzZXM+InUiKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0''@;'; put 'put ''aGlzLmZpbHRlckxvYWRpbmc9ITEpO3tsZXQgaD10aGlzLmNsYXVzZXMucXVlcnlPYmo7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2NvbnN0IF89aFtmXS5lbGVtZW50czthPV8uZmlsdGVyKGZ1bmN0aW9uKFQpe3JldHVybiBudWxsPT09VC52YXJpYWJsZX0pLGEubGVuZ3RoJiZkLnB1''@;'; put 'put ''c2goXyl9fWlmKGQubGVuZ3RoKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3RyeXtpZih2b2lkIDAhPT10aGlzLmNsYXVzZXMmJnRoaXMuZmlsdGVyTGliZHMpe2NvbnN0IGg9e2dyb3VwTG9naWM6dGhpcy5jbGF1c2VzLmdyb3VwTG9n''@;'; put 'put ''aWMsZmlsdGVyR3JvdXBzOltdfTt0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChfPT57Y29uc3QgVD17ZmlsdGVyQ2xhdXNlczpbXX07Xy5lbGVtZW50cy5mb3JFYWNoKFc9PntULmZpbHRlckNsYXVzZXMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFcpKX0pLFQuY2xh''@;'; put 'put ''dXNlTG9naWM9Xy5jbGF1c2VMb2dpYyxoLmZpbHRlckdyb3Vwcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVCkpfSk7Y29uc3QgZj10aGlzLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGgpO3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeSh0''@;'; put 'put ''aGlzLmZpbHRlckxpYmRzLGYpLnRoZW4oXz0+e3RoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9Xy5yZXN1bHRbMF0uRklMVEVSX1JLLHRoaXMubG9hZERhdGEodGhpcy5maWx0ZXJMaWJkcyx0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLnRoZW4oKCk9Pnt0aGlzLmZpbHRlcj0hMSx0aGlz''@;'; put 'put ''LmZpbHRlckxvYWRpbmc9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9KS5jYXRjaChfPT57dGhpcy5maWx0ZXJMb2FkaW5nPSExfSl9fWNhdGNoe3RoaXMuZmlsdGVyTG9hZGluZz0hMX19c2VhcmNoVGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtkLnNlYXJj''@;'; put 'put ''aExvYWRpbmc9ITA7bGV0IGY9YS52YWx1ZSxfPWQubGlicmFyeSsiLiIrZC50YWJsZSxUPXBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpO2NvbnN0IFc9aC52aWV3Ym94VGFibGVzLmZpbmQoaWU9PmllLnZpZXdib3hJZD09PWQuaWQpO1cmJih5aWVsZCBoLnNhc1N0b3JlU2VydmljZS52aWV3''@;'; put 'put ''RGF0YVNlYXJjaChmLGQuc2VhcmNoTnVtZXJpYyxfLFQpLnRoZW4oaWU9PntpZS5zYXNwYXJhbXN8fGllLnZpZXdEYXRhP1cuaG90VGFibGUuZGF0YT1pZS52aWV3ZGF0YTpkLnNlYXJjaExvYWRpbmc9ITB9KS5jYXRjaChpZT0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihpZSl9KSxkLnNlYXJj''@;'; put 'put ''aExvYWRpbmc9ITEpfSkoKX1yZWxvYWRUYWJsZURhdGEoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Y29uc3QgaD1gJHthLmxpYnJhcnl9LiR7YS50YWJsZX1gO2EubG9hZGluZ0RhdGE9ITAseWllbGQgZC5yZWxvYWREYXRhKGgsYSksYS5sb2FkaW5nRGF0YT0hMSxkLmV2''@;'; put 'put ''ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pKCl9dXBkYXRlSG90Q29sdW1ucyhhLGQpe3RoaXMudXBkYXRlSGlkZGVuQ29sdW1uc0hvdChhLGQpLHRoaXMuc2V0Q29sdW1uT3JkZXIoZCl9dXBkYXRlQ29sdW1uT3JkZXJIb3QoYSxkLGgpe2NvbnN0IGY9dGhpcy5nZXRWaWV3''@;'; put 'put ''Ym94SG90SW5zdGFuY2UoaCk7aWYoZil7Y29uc3QgXz1mLnByb3BUb0NvbChhKTtmLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpLm1vdmVDb2x1bW4oXyxkKSxmLnJlbmRlcigpLHRoaXMuc2V0Q29sdW1uT3JkZXIoaCl9fXRhYmxlRWRpdEV4aXN0cyhhKXtjb25zdCBkPUduLmVkaXRv''@;'; put 'put ''ci5saWJzQW5kVGFibGVzLGg9YS5saWJyYXJ5O3JldHVybiEhZFtoXSYmZFtoXS5pbmNsdWRlcyhhLnRhYmxlKX1zZXRDb2x1bW5PcmRlcihhKXtjb25zdCBkPXRoaXMudmlld2JveGVzLmZpbmQoaD0+aC5pZD09PWEpO2lmKGQpe2NvbnN0IGg9dGhpcy5jcmVhdGVDb2x1bW5PcmRlcihhKTtk''@;'; put 'put ''LmNvbHVtbnM9aC5sZW5ndGg+MD9oOmQuY29sdW1uc310aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y3JlYXRlQ29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShhKTtpZighZClyZXR1cm5bXTtjb25zdCBoPWQuZ2V0Q29sSGVhZGVyKCksZj10aGlzLnNlbGVj''@;'; put 'put ''dGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzO2lmKCFmKXJldHVybltdO2NvbnN0IF89dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGU/LmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aHx8NSxUPVtdO3JldHVybiBoLm1hcCgoVyxpZSk9PntpZihpZTxfKXtjb25z''@;'; put 'put ''dCBnZT1mLmluZGV4T2YoVyk7Z2U+LTEmJlQucHVzaChnZSl9fSksVH11cGRhdGVIaWRkZW5Db2x1bW5zSG90KGEsZCl7Y29uc3QgaD10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShkKTtpZihoKXtjb25zdCBmPWEubWFwKF89PmgucHJvcFRvQ29sKF8pKTtoLnVwZGF0ZVNldHRpbmdzKHto''@;'; put 'put ''aWRkZW5Db2x1bW5zOntjb2x1bW5zOmZ9fSksaC5yZW5kZXIoKX19Z2V0Vmlld2JveEhvdEluc3RhbmNlKGEpe3JldHVybiBhP3RoaXMuaG90VGFibGVSZWdpc3RlcmVyLmdldEluc3RhbmNlKGBob3RJbnN0YW5jZV92aWV3Ym94XyR7YX1gKTp2b2lkIDB9dmlld2JveENoYW5nZWQoKXtsZXQg''@;'; put 'put ''YTtjb25zdCBkPXRoaXMuZW5jb2RlVXJsRGF0YSh0aGlzLnZpZXdib3hlcyk7ZC5sZW5ndGg+MCYmKGE9e3ZpZXdib3hlczpkfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczphfSksdGhpcy5wcmVwYXJlRmlsdGVy''@;'; put 'put ''Q2FjaGUoKX1wcmVwYXJlRmlsdGVyQ2FjaGUoKXtmb3IobGV0IGEgb2YgdGhpcy52aWV3Ym94ZXMpaWYoR24udmlld2JveGVzW2EuaWRdfHwoR24udmlld2JveGVzW2EuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoUE8pKSxhLnF1ZXJ5JiZhLnF1ZXJ5Lmxlbmd0aD4wKXtjb25z''@;'; put 'put ''dCBkPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGY9PmYudmlld2JveElkPT09YS5pZCksaD1gdmlld2JveGVzLiR7YS5pZH1gO0duLnZpZXdib3hlc1thLmlkXS5maWx0ZXIucXVlcnk9YS5xdWVyeSxHbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLmxpYmRzPWEubGlicmFyeSsiLiIrYS50YWJs''@;'; put 'put ''ZSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKGgsZD8uaG90VGFibGUuY29scyl9fWVuY29kZVVybERhdGEoYSl7bGV0IGQ9IiI7cmV0dXJuIGEubWFwKChoLGYpPT57ZCs9YCR7aC5pZH0tJHtoLmxpYnJhcnl9LSR7aC50YWJsZX0tJHtoLndpZHRo''@;'; put 'put ''fS0ke2guaGVpZ2h0fS0ke2gueH0tJHtoLnl9LSR7aC5jb2xsYXBzZWQ/MTowfS0ke2gubWluaW1pemVkPzE6MH0tJHtoLmZpbHRlcl9wa3x8MH0ke2guY29sdW1ucyYmaC5jb2x1bW5zLmxlbmd0aD4wPyItIitoLmNvbHVtbnM/LmpvaW4oIiwiKToiIn1gLGYhPT1hLmxlbmd0aC0xJiYoZCs9''@;'; put 'put ''IjsiKX0pLGR9ZGVjb2RlVXJsRGF0YShhKXtsZXQgaD1bXTtyZXR1cm4gYS5zcGxpdCgiOyIpLm1hcChfPT57Y29uc3QgVD1fLnNwbGl0KCItIik7aC5wdXNoKHtpZDpwYXJzZUludChUWzBdKSxsaWJyYXJ5OlRbMV0sdGFibGU6VFsyXSx3aWR0aDpwYXJzZUludChUWzNdKSxoZWlnaHQ6cGFy''@;'; put 'put ''c2VJbnQoVFs0XSkseDpwYXJzZUludChUWzVdKSx5OnBhcnNlSW50KFRbNl0pLGNvbGxhcHNlZDohIXBhcnNlSW50KFRbN10pLG1pbmltaXplZDohIXBhcnNlSW50KFRbOF0pLGNvbHVtbnM6VFsxMF0/LnNwbGl0KCIsIikubWFwKFc9PnBhcnNlSW50KFcpKXx8W10sZmlsdGVyX3BrOlRbOV19''@;'; put 'put ''KX0pLGh9bmdPbkRlc3Ryb3koKXt0aGlzLl9xdWVyeT8udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTm8pLHR0KEMwKSx0dChvYSksdHQodmwpLHR0KGJkKSx0dCh3MCksdHQoQWMpLHR0KERzKSx0dChXbCksdHQoVWEp''@;'; put 'put ''KX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXdib3hlcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhVamUsNSksUm8oWmplLDUpKSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLnJlc2l6ZUJveFF1ZXJ5PWgpLHNpKGg9YWkoKSkm''@;'; put 'put ''JihkLmRyYWdIYW5kbGVDb3JuZXJRdWVyeT1oKX19LGlucHV0czp7dmlld2JveE1vZGFsOiJ2aWV3Ym94TW9kYWwifSxvdXRwdXRzOnt2aWV3Ym94TW9kYWxDaGFuZ2U6InZpZXdib3hNb2RhbENoYW5nZSJ9LGRlY2xzOjU2LHZhcnM6MjMsY29uc3RzOltbImFwcERyYWdOZHJvcCIsIiIsMSwi''@;'; put 'put ''cm9vdC1tb2RhbCIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsImxpY2VuY2Utbm90aWNlIiw0LCJuZ0lmIl0sWzEsIm1v''@;'; put 'put ''ZGFsLWJvZHkiLCJkLWZsZXgiXSxbMSwiYWRkLW5ldyIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJtdC0wLWkiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtLTAgdmlld2JveC1saW1pdC1ub3Rp''@;'; put 'put ''Y2UiLDQsIm5nSWYiXSxbMywibGlicmFyeUxpc3QiLCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiw0LCJuZ0lmIl0sWzEsImN1cnJlbnRseS1vcGVuIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsicm9sZSIsInRvb2x0''@;'; put 'put ''aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtMyIsMywiY2xpY2siXSxbInNoYXBlIiwiZ3JpZC12aWV3Iiwic2l6ZSIsIjE5Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsic2hhcGUiLCJtaW51cyIs''@;'; put 'put ''InNpemUiLCIxOSJdLFsic2hhcGUiLCJ3aW5kb3ctcmVzdG9yZSIsInNpemUiLCIxOSJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwib3Blbi12aWV3Ym94IGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWFsaWduLWl0''@;'; put 'put ''ZW1zLWNlbnRlciIsMywic2VsZWN0ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJtdC0xMCJdLFsxLCJtLTAiXSxbImNsYXNzIiwiY29uZmlndXJhdGlvbi13''@;'; put 'put ''cmFwcGVyIiwiY2RrRHJvcExpc3RHcm91cCIsIiIsNCwibmdWYXIiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidmlld2JveGVzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ2aWV3Ym94Iiwi''@;'; put 'put ''Y2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwiIiwidGFiaW5kZXgiLCIwIiwzLCJmb2N1c2VkIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9pbnRlci1ldmVudHMiLCJib3gtc2hhZG93IiwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJp''@;'; put 'put ''ZCIsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRl''@;'; put 'put ''ciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFszLCJ2aWV3Ym94SWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRu''@;'; put 'put ''LXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzEsImxpY2VuY2Utbm90aWNlIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsIm0tMCIsInZpZXdib3gtbGltaXQtbm90aWNlIl0sWzMsImxpYnJh''@;'; put 'put ''cnlMaXN0IiwibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVPbkNsaWNrRW1pdHRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsIm9wZW4tdmlld2JveCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50''@;'; put 'put ''ZXIiLDMsImNsaWNrIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclNtYWxsIiwiIiwiY2xhc3MiLCJtbC0zIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0''@;'; put 'put ''aXAtYm90dG9tLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImN1cnNvci1tb3ZlIiwic2l6ZSIsIjEzIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwiY2xhc3MiLCJ0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC1ib3R0b20tbGVmdCBtbC0zIiwzLCJjbGlj''@;'; put 'put ''ayIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIxOSJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTMiXSxbImNka0Ryb3BMaXN0R3JvdXAiLCIiLDEsImNvbmZpZ3VyYXRpb24td3JhcHBlciJdLFs0LCJuZ0lmIl0sWzEsImNvbHMtc2VhcmNoIl0sWyJ0eXBlIiwidGV4dCIsImF1''@;'; put 'put ''dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGNvbHVtbnMiLCJ0YWJpbmRleCIsIjAiLDMsImlucHV0SWQiLCJlbWl0T25seVNlbGVjdGVkIiwidmFsdWVDaGFuZ2UiXSxbImlucHV0IiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2Rr''@;'; put 'put ''RHJvcExpc3QiLCIiLDEsImNvbHMtbGlzdCIsMywiY2RrRHJvcExpc3REYXRhIiwiY2RrRHJvcExpc3REcm9wcGVkIl0sWyJjZGtEcmFnIiwiIiwzLCJjbGFzcyIsImN1cnNvci1kZWZhdWx0LWkiLCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxl''@;'; put 'put ''ZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcmFnIiwiIiwzLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbInNoYXBlIiwidHJhc2giLCJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hh''@;'; put 'put ''cGUiLCJrZXkiXSxbInNoYXBlIiwidHJhc2giLDEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJ2aWV3Ym94IiwzLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlv''@;'; put 'put ''biIsImlkIiwibW91c2Vkb3duIiwiY2RrRHJhZ0VuZGVkIl0sWyJyZXNpemVCb3giLCIiXSxbImNka0RyYWdIYW5kbGUiLCIiLDEsImRyYWctaGFuZGxlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0YWJsZS10''@;'; put 'put ''aXRsZSJdLFsxLCJhY3Rpb25zIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwiYW5nbGUgZG93biIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwibWludXMiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsiY2Rr''@;'; put 'put ''RHJhZyIsIiIsMSwiZHJhZ0hhbmRsZSIsImNvcm5lciIsMywiaWQiLCJjZGtEcmFnTW92ZWQiXSxbImRyYWdIYW5kbGVDb3JuZXIiLCIiXSxbImNsckZvcm0iLCIiLDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1mbGV4''@;'; put 'put ''LXdyYXAiLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciJdLFsxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC13cmFwIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJ0''@;'; put 'put ''eXBlIiwia2V5dXAuZW50ZXIiXSxbInNlYXJjaEVsIiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVt''@;'; put 'put ''ZXJpY19jaGVjayIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInJlZnJlc2giLCJjbGFzcyIsImNsaWNrLWljb24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEt''@;'; put 'put ''aGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1sZyIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC01IiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiLDEsImNsaWNrLWljb24iXSxbMSwidG9vbHRpcC1jb250ZW50IiwidG9vbHRpcC1sb25nIl0sWyJzaGFwZSIsInBl''@;'; put 'put ''bmNpbCIsMSwiY2xpY2staWNvbiIsIm1sLTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImNvbnRlbnQiLDMsImRpc3BsYXkiLDQsIm5nVmFyIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUgZG93biIsMywiY2xpY2siXSxbInNoYXBlIiwic2VhcmNoIiwz''@;'; put 'put ''LCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbInNoYXBlIiwicmVmcmVzaCIsMSwiY2xpY2staWNvbiIsMywiY2xpY2siXSxbMSwiY29udGVudCJdLFsiY2xhc3MiLCJob3Qtc3Bpbm5lciBteS0xMC1teC1hdXRvIHRl''@;'; put 'put ''eHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlDb2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZz''@;'; put 'put ''ZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwibGljZW5zZUtleSIsNCwibmdJZiJdLFsxLCJob3Qtc3Bpbm5lciIsIm15LTEwLW14LWF1dG8iLCJ0''@;'; put 'put ''ZXh0LWNlbnRlciJdLFsiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwzLCJob3RJZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0''@;'; put 'put ''YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vuc2VLZXkiXSxbMywidmlld2JveElkIl0sWyJxdWVyeUZpbHRlciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmKG1lKDAsImNsci1tb2RhbCIsMCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuY2xyTW9kYWxPcGVuQ2hhbmdlKGYpfSksbWUoMSwiaDMiLDEpLE5lKDIsIiBWaWV3Ym94ZXMgIiksUWUoMyxZamUsMiwyLCJzcGFuIiwyKSx5ZSgpLG1l''@;'; put 'put ''KDQsImRpdiIsMykoNSwiZGl2Iiw0KSg2LCJwIiw1KSxOZSg3LCJBZGQgbmV3IikseWUoKSxxdCg4LCJociIsNiksUWUoOSxXamUsMiwwLCJkaXYiLDcpLFFlKDEwLEdqZSwyLDAsInAiLDgpLFFlKDExLCRqZSwxLDEsImRjLXRyZWUiLDkpLHllKCksbWUoMTIsImRpdiIsMTApKDEzLCJkaXYi''@;'; put 'put ''LDExKSgxNCwicCIsNSksTmUoMTUsIkN1cnJlbnRseSBvcGVuIikseWUoKSxtZSgxNiwiZGl2IikoMTcsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc25hcFRvR3JpZCgpfSkscXQoMTgsImNsci1pY29uIiwxMyksbWUoMTksInNwYW4iLDE0KSxOZSgyMCwiU25hcCB2''@;'; put 'put ''aWV3Ym94ZXMgdG8gZ3JpZCIpLHllKCkoKSxtZSgyMSwiYSIsMTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5taW5pbWl6ZUFsbCgpfSkscXQoMjIsImNsci1pY29uIiwxNSksbWUoMjMsInNwYW4iLDE0KSxOZSgyNCwiTWluaW1pemUgYWxsIHZpZXdib3hlcyIpLHllKCkoKSxt''@;'; put 'put ''ZSgyNSwiYSIsMTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXN0b3JlQWxsKCl9KSxxdCgyNiwiY2xyLWljb24iLDE2KSxtZSgyNywic3BhbiIsMTQpLE5lKDI4LCJSZXN0b3JlIGFsbCB2aWV3Ym94ZXMiKSx5ZSgpKCkoKSgpLHF0KDI5LCJociIpLFFlKDMwLHFqZSwyLDAs''@;'; put 'put ''InAiLDE3KSxRZSgzMSxRamUsMTUsMTAsImRpdiIsMTgpLG1lKDMyLCJkaXYiLDE5KSgzMywicCIsMjApLE5lKDM0KSx5ZSgpKCkscXQoMzUsImhyIiksUWUoMzYsc3plLDMsMiwiZGl2IiwyMSkseWUoKSgpLG1lKDM3LCJkaXYiLDIyKSgzOCwiYnV0dG9uIiwyMykseHQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBkLnZpZXdib3hNb2RhbD0hMX0pLE5lKDM5LCIgT2sgIikseWUoKSgpKCksbWUoNDAsImRpdiIsMjQpLFFlKDQxLHZ6ZSwzMywzNywiZGl2IiwyNSkseWUoKSxtZSg0MiwiY2xyLW1vZGFsIiwyNikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0''@;'; put 'put ''dXJuIGQuZmlsdGVyPWZ9KSxtZSg0MywiaDMiLDI3KSxOZSg0NCwiIEZpbHRlciBmb3Igdmlld2JveCB0YWJsZTogIiksbWUoNDUsInNwYW4iKSxOZSg0NikseWUoKSgpLG1lKDQ3LCJkaXYiLDI4KSxRZSg0OCxfemUsMiwxLCJhcHAtcXVlcnkiLDI5KSx5ZSgpLG1lKDQ5LCJkaXYiLDIyKSg1''@;'; put 'put ''MCwiYnV0dG9uIiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnJlc2V0RmlsdGVyKCl9KSxOZSg1MSwiIHJlc2V0IGZpbHRlciAiKSx5ZSgpLG1lKDUyLCJidXR0b24iLDIzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZmlsdGVyPSExfSksTmUoNTMsIiBDYW5j''@;'; put 'put ''ZWwgIikseWUoKSxtZSg1NCwiYnV0dG9uIiwzMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbmRDbGF1c2UoKX0pLE5lKDU1LCIgT2sgIikseWUoKSgpKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLGQudmlld2JveE1vZGFsKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJj''@;'; put 'put ''bHJNb2RhbFNpemUiLCJsZyIpLENlKDMpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09ZC5JbmZpbml0eSksQ2UoNiksUmUoIm5nSWYiLGQubGlicmFyaWVzTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQudmlld2JveExpbWl0UmVhY2hlZCksQ2UoMSks''@;'; put 'put ''UmUoIm5nSWYiLGQudmlld2JveE1vZGFsKSxDZSgxOSksUmUoIm5nSWYiLGQudmlld2JveGVzLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdGb3JPZiIsZC52aWV3Ym94ZXMpLENlKDMpLG1yKCIgQ29uZmlndXJhdGlvbiAoIixudWxsIT1kLnNlbGVjdGVkVmlld2JveFRhYmxlJiZkLnNlbGVjdGVk''@;'; put 'put ''Vmlld2JveFRhYmxlLnZpZXdib3hMaWJEYXRhc2V0PyIjIisobnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSsiICIrKG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpkLnNlbGVjdGVkVmlld2JveFRhYmxl''@;'; put 'put ''LnZpZXdib3hMaWJEYXRhc2V0KToic2VsZWN0IHZpZXdib3ggZnJvbSBhYm92ZSIsIikgIiksQ2UoMiksUmUoIm5nVmFyIixiXygxOSxiemUsbnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmQuc2VsZWN0ZWRW''@;'; put 'put ''aWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbixudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZSxudWxs''@;'; put 'put ''PT1kLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5oZWFkZXJQa3MpKSxDZSg1KSxSZSgibmdGb3JPZiIsZC52aWV3Ym94ZXMpLENlKDEpLFJlKCJjbHJNb2RhbE9w''@;'; put 'put ''ZW4iLGQuZmlsdGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDQpLGpjKCIgIyIsbnVsbD09ZC5maWx0ZXJpbmdWaWV3Ym94P251bGw6ZC5maWx0ZXJpbmdWaWV3Ym94LmlkLCIgIixkLmZpbHRlckxpYmRzLCIgIiksQ2UoMiksUmUoIm5nSWYiLGQu''@;'; put 'put ''ZmlsdGVyKSxDZSg2KSxSZSgiY2xyTG9hZGluZyIsZC5maWx0ZXJMb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbeHMsWmksa2Esb3Usc3UsWnUsZGgsVXMsWEosRDAsRDgsVDAsZjEsdTIsQ3AsbDEsYzEsUzAsQnMsd3AsT3MscjIsY1UsTXksdnNlLHBzZSx3c2UsX3NlLFNzZSx6amUsVTcsWmJd''@;'; put 'put ''LHN0eWxlczpbIi5saWNlbmNlLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7ZGlzcGxheTpibG9jaztvcGFjaXR5Oi42fWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjEzMDB9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgICAubW9kYWwtYm9keS13cmFwcGVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KX1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1jb250ZW50e2hlaWdodDo4MHZofWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSAgIC5tb2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MH1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMDAlO2hlaWdodDoxMDAlfWRjLXRyZWVbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG87ZmxleDoxfS50b29sdGlwLWxvbmdbX25nY29udGVudC0lQ09NUCVde3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYWRkLW5ld1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTAlO3BhZGRpbmctcmlnaHQ6NXB4fS52aWV3Ym94LWxpbWl0LW5v''@;'; put 'put ''dGljZVtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNztjb2xvcjojZTc0YzNjfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTAlfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV0gICAub3Blbi12aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXXtj''@;'; put 'put ''dXJzb3I6cG9pbnRlcjtwYWRkaW5nOjNweCA1cHh9LmN1cnJlbnRseS1vcGVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcGVuLXZpZXdib3guc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSg2MCwxMzMsMCwuMTgwMzkyMTU2OSl9LmN1cnJlbnRseS1vcGVuW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC5vcGVuLXZpZXdib3hbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQ6I2U4ZThlOH0udmlld2JveGVzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtwb2ludGVyLWV2ZW50czpub25lO3otaW5k''@;'; put 'put ''ZXg6OTk5fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6MjAwcHg7bWluLWhlaWdodDoyMDBweDtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7cG9pbnRlci1ldmVudHM6YWxsO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyLXRvcC1sZWZ0''@;'; put 'put ''LXJhZGl1czozcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAwIDEwcHggLTNweCAjMDAwfS52aWV3Ym94LmZvY3VzZWRbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6MTEwMDtvdXRsaW5lOm5vbmV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmNv''@;'; put 'put ''bnRlbnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMzAxOTYwNzg0Myk7YmFja2dyb3VuZDp3aGl0ZTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXg6MTtvdmVyZmxvdy14OmF1dG99LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWct''@;'; put 'put ''aGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MjBweDtiYWNrZ3JvdW5kLWNvbG9yOiMzYzg1MDA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4O2NvbG9yOiNmZmY7cGFkZGluZzowIDVweDtwb2ludGVy''@;'; put 'put ''LWV2ZW50czphbGx9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWctaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50YWJsZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC1icmVhazpicmVhay1hbGx9LnZpZXdib3hbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgLmRyYWctaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hY3Rpb25zW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7bWluLXdpZHRoOjM1cHh9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWctaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5hY3Rpb25zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjttYXJnaW4tbGVmdDo1cHh9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWctaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hY3Rpb25z''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xpY2staWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXJ9LnZpZXdib3hbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLmNsaWNrLWljb25bX25nY29udGVudC0lQ09NUCVdOmhvdmVye3RyYW5zZm9ybTpzY2FsZSgxLjMpfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnSGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZX0udmlld2JveFtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZS5jb3JuZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE1cHg7aGVpZ2h0OjE1cHg7Y3Vyc29yOm53c2UtcmVzaXplfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnSGFuZGxlLnJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XXt3aWR0aDoycHg7aGVpZ2h0OjEwMCU7Y3Vyc29yOmV3LXJlc2l6ZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZS5ib3R0b21bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoycHg7d2lkdGg6MTAwJTtjdXJzb3I6bnMtcmVzaXplfS5jb2xzLXNlYXJjaFtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttYXJnaW4tdG9wOjVweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3ODQzMTM3MjUpO2JvcmRlci1yYWRpdXM6M3B4fS5jb2xzLWxpc3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjpzb2xpZCAxcHggI2NjYzttaW4taGVpZ2h0OjYw''@;'; put 'put ''cHg7YmFja2dyb3VuZDp3aGl0ZTtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jazt3aWR0aDo0MDBweDttYXgtd2lkdGg6MTAwJTttYXJnaW4tdG9wOjVweH0uY29sLWJveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggMTBweDtib3JkZXItYm90''@;'; put 'put ''dG9tOnNvbGlkIDFweCAjY2NjO2NvbG9yOiMwMDAwMDBkZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOm1vdmU7YmFja2dyb3VuZDp3aGl0''@;'; put 'put ''ZTtmb250LXNpemU6MTRweH0uY29sLWJveC5zZWFyY2hbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTAxOTYwNzg0Myl9LmNvbC1ib3gucHJpbWFyeUtleUhlYWRlclN0eWxlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3''@;'; put 'put ''LDAsLjE0MTE3NjQ3MDYpfS5jZGstZHJhZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCAjMDAwMywwIDhweCAxMHB4IDFweCAjMDAwMDAwMjQsMCAzcHggMTRweCAycHgg''@;'; put 'put ''IzAwMDAwMDFmO3otaW5kZXg6MTMwMCFpbXBvcnRhbnR9LmNkay1kcmFnLXBsYWNlaG9sZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1kcmFnLWFuaW1hdGluZ1tfbmdjb250ZW50LSVDT01QJV17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMCww''@;'; put 'put ''LC4yLDEpfS5jb2wtYm94W19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke2JvcmRlcjpub25lfS5jb2xzLWxpc3QuY2RrLWRyb3AtbGlzdC1kcmFnZ2luZ1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sLWJveFtfbmdjb250ZW50LSVDT01QJV06bm90KC5jZGstZHJhZy1wbGFjZWhvbGRl''@;'; put 'put ''cil7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpfS5kaXNhYmxlZFtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNTt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZX0uZmlsdGVyLWFjdGl2ZVtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV17Y29sb3I6IzAwNzJhM31ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5o''@;'; put 'put ''dF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSwgaG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjY5MDE5NjA3ODQp''@;'; put 'put ''fWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC40MzEzNzI1NDkpfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIHRoLnJlYWRvbmx5Q2VsbCBkaXZ7b3BhY2l0eTouNH1ob3QtdGFi''@;'; put 'put ''bGVbX25nY29udGVudC0lQ09NUCVdICAgICB0ZC5yZWFkb25seUNlbGx7b3BhY2l0eTouNX0iXX0pLGN9KSgpLEVzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsZU92ZXI9bmV3IEVyLHRoaXMuZmlsZURyb3A9bmV3IEVyLHRoaXMuZWxlbWVudD1hfW9uRHJvcChhKXt0''@;'; put 'put ''aGlzLl9wcmV2ZW50QW5kU3RvcChhKTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyPy5maWxlcyxoPVtdO2lmKGQpZm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaC5wdXNoKGRbZl0pO3RoaXMudXBsb2FkZXI/LmFkZFRvUXVldWUoaCksdGhpcy5maWxlT3Zlci5lbWl0KCExKSx0aGlzLmZpbGVE''@;'; put 'put ''cm9wLmVtaXQoaCl9b25EcmFnT3ZlcihhKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChhKTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyO2lmKGQpe2lmKC0xPT09ZC50eXBlcy5pbmRleE9mKCJGaWxlcyIpKXJldHVybjtkLmRyb3BFZmZlY3Q9ImNvcHkifXRoaXMuZmlsZU92ZXIuZW1pdCghMCl9b25E''@;'; put 'put ''cmFnTGVhdmUoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSksdGhpcy5maWxlT3Zlci5lbWl0KCExKX1fcHJldmVudEFuZFN0b3AoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''KHR0KE5pKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcEZpbGVEcm9wIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImRyb3AiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJvcChmKX0pKCJkcmFnb3ZlciIsZnVuY3Rpb24oZil7''@;'; put 'put ''cmV0dXJuIGQub25EcmFnT3ZlcihmKX0pKCJkcmFnbGVhdmUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJhZ0xlYXZlKGYpfSl9LGlucHV0czp7dXBsb2FkZXI6InVwbG9hZGVyIn0sb3V0cHV0czp7ZmlsZU92ZXI6ImZpbGVPdmVyIixmaWxlRHJvcDoiZmlsZURyb3AifX0pLGN9KSgpLGtz''@;'; put 'put ''ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsZVNlbGVjdGVkPW5ldyBFcix0aGlzLmVsZW1lbnQ9YX1pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKXtyZXR1cm4hIXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXMubXVsdGlwbGV9b25DaGFuZ2UoKXtjb25z''@;'; put 'put ''dCBhPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpbGVzO3RoaXMudXBsb2FkZXI/LmFkZFRvUXVldWUoYSksdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChhKSx0aGlzLmlzRW1wdHlBZnRlclNlbGVjdGlvbigpJiYodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlU2VsZWN0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZC5vbkNoYW5nZSgpfSl9LGlucHV0czp7dXBsb2FkZXI6InVwbG9hZGVyIn0sb3V0cHV0czp7ZmlsZVNlbGVjdGVkOiJmaWxlU2VsZWN0ZWQifX0pLGN9KSgpO2Z1bmN0aW9uIHl6ZShjLGwpezEmYyYmKG1lKDAsInAiLDgpLE5lKDEsIiBObyBkYXRhc2V0IG1ldGEgdG8gc2hv''@;'; put 'put ''dy4gIikseWUoKSl9ZnVuY3Rpb24gd3plKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksTmUoMikseWUoKSxtZSgzLCJjbHItZGctY2VsbCIpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEuTkFNRSksQ2Uo''@;'; put 'put ''Miksb3IoYS5WQUxVRSl9fWZ1bmN0aW9uIEN6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIsMTEpKDEsImNsci1kYXRhZ3JpZCIpKDIsImNsci1kZy1jb2x1bW4iKSxOZSgzLCJOYW1lIikseWUoKSxtZSg0LCJjbHItZGctY29sdW1uIiksTmUoNSwiVmFsdWUiKSx5ZSgp''@;'; put 'put ''LFFlKDYsd3plLDUsMiwiY2xyLWRnLXJvdyIsNSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQ7Q2UoNiksUmUoIm5nRm9yT2YiLGEuZHNtZXRhKX19ZnVuY3Rpb24gU3plKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsOSksTmUoMikseWUoKSxR''@;'; put 'put ''ZSgzLEN6ZSw3LDEsImNsci10YWItY29udGVudCIsMTApLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXg7Q2UoMiksb3IoYS5ncm91cCksQ2UoMSksUmUoImNscklmQWN0aXZlIiwwPT09ZCl9fWxldCBBc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMu''@;'; put 'put ''b3Blbj0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLm9wZW5DaGFuZ2U9bmV3IEVyLHRoaXMuZHNtZXRhR3JvdXBwZWQ9W119bmdPbkluaXQoKXt9bmdPbkNoYW5nZXMoYSl7YS5kc21ldGE/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoPjAmJnRoaXMucGFyc2VEU01ldGEoKX1wYXJzZURTTWV0YSgpe3Ro''@;'; put 'put ''aXMuZHNtZXRhR3JvdXBwZWQ9W107Zm9yKGxldCBhIG9mIHRoaXMuZHNtZXRhKXtsZXQgZD10aGlzLmRzbWV0YUdyb3VwcGVkLmZpbmRJbmRleChoPT5oLmdyb3VwPT09YS5PRFNfVEFCTEUpO2Q8MCYmKGQ9dGhpcy5kc21ldGFHcm91cHBlZC5wdXNoKHtncm91cDphLk9EU19UQUJMRSxkc21l''@;'; put 'put ''dGE6W119KS0xKSx0aGlzLmRzbWV0YUdyb3VwcGVkW2RdLmRzbWV0YS5wdXNoKGEpfX1vbk9wZW5DaGFuZ2UoYSl7dGhpcy5vcGVuPWEsdGhpcy5vcGVuQ2hhbmdlLmVtaXQoYSl9b25DbG9zZUNsaWNrKCl7dGhpcy5vbk9wZW5DaGFuZ2UoITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWRhdGFzZXQtaW5mbyJdXSxpbnB1dHM6e29wZW46Im9wZW4iLGRzbWV0YToiZHNtZXRhIn0sb3V0cHV0czp7b3BlbkNoYW5nZToib3BlbkNoYW5nZSJ9LGZlYXR1cmVzOlt2YV0s''@;'; put 'put ''ZGVjbHM6MTAsdmFyczo1LGNvbnN0czpbWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1v''@;'; put 'put ''ZGFsLWJvZHkiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsckxheW91dCIsInZlcnRpY2FsIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLDMs''@;'; put 'put ''ImNsaWNrIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwiaWQiLCJsaW5rMSJdLFsiaWQiLCJjb250ZW50MSIsImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwIiw0LCJjbHJJZkFjdGl2ZSJdLFsiaWQiLCJjb250ZW50MSIsMSwiZC1m''@;'; put 'put ''bGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJ3LTEwMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNsci1tb2RhbCIsMCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25PcGVuQ2hhbmdlKGYpfSksbWUoMSwiaDMi''@;'; put 'put ''LDEpLE5lKDIsIkRhdGFzZXQgTWV0YSIpLHllKCksbWUoMywiZGl2IiwyKSxRZSg0LHl6ZSwyLDAsInAiLDMpLG1lKDUsImNsci10YWJzIiw0KSxRZSg2LFN6ZSw0LDIsImNsci10YWIiLDUpLHllKCkoKSxtZSg3LCJkaXYiLDYpKDgsImJ1dHRvbiIsNykseHQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBkLm9uQ2xvc2VDbGljaygpfSksTmUoOSwiIENsb3NlICIpLHllKCkoKSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixkLm9wZW4pKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCksQ2UoNCksUmUoIm5nSWYiLGQuZHNtZXRhR3JvdXBwZWQubGVu''@;'; put 'put ''Z3RoPDEpLENlKDIpLFJlKCJuZ0Zvck9mIixkLmRzbWV0YUdyb3VwcGVkKSl9LGRlcGVuZGVuY2llczpbeHMsWmksVzgsVHAsdGcsbmcscmcsaWcsJDgsb2csQjgsa3Asejgsb3Usc3UsRTgsTHAsT3AsZGcsUnAsSXAsY2ddLHN0eWxlczpbIi5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIGNsci10YWJzW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0Ojcwdmh9Lm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgICAudGFiLWNvbnRlbnR7d2lkdGg6MTAwJTtvdmVyZmxvdzphdXRvfS5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRhYi1jb250''@;'; put 'put ''ZW50IC5kYXRhZ3JpZC1vdXRlci13cmFwcGVye3dpZHRoOjEwMCV9Il19KSxjfSkoKTtmdW5jdGlvbiBNemUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiwxMyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLG9yKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKX19ZnVuY3Rpb24g''@;'; put 'put ''eHplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwxNCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgyKS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKSl9KSxOZSgxKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1qZSgyKTtSZSgiZGlzYWJsZWQi''@;'; put 'put ''LGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZyksQ2UoMSksbXIoIiAiLGEuZ2VuZXJhdGVkUmVjb3JkVXJsPyJjb3B5IHRvIGNsaXBib2FyZCI6YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPyJHZW5lcmF0aW5nIHVybC4uLiI6IkxpbmsgdG8gdGhpcyByZWNvcmQiLCIgIil9''@;'; put 'put ''fWZ1bmN0aW9uIEV6ZShjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsTXplLDIsMSwic3BhbiIsMTEpLFFlKDIseHplLDIsMiwiYnV0dG9uIiwxMiksWXIoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksUmUoIm5nSWYiLCEobnVsbCE9YS5jdXJyZW50UmVjb3JkJiZhLmN1cnJlbnRSZWNvcmQu''@;'; put 'put ''bm9MaW5rT3B0aW9uKSksQ2UoMSksUmUoIm5nSWYiLCEobnVsbCE9YS5jdXJyZW50UmVjb3JkJiZhLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uKSl9fWZ1bmN0aW9uIGt6ZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMTUpKDEsInNwYW4iLDE2KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgp''@;'; put 'put ''KCkpfWZ1bmN0aW9uIEF6ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBUemUoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwzMCksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gRHplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9u''@;'; put 'put ''IEl6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pbnB1dC1jb250YWluZXIiLDMzKSgxLCJpbnB1dCIsMzQpLHh0KCJmb2N1c2luIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKDMpLmluZGV4O3JldHVybiBqdChqZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaCxm''@;'; put 'put ''KSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1qZSgzKS4kaW1wbGljaXQsXz1qZSgyKTtyZXR1cm4gXy5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSxq''@;'; put 'put ''dChfLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSEwKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKDMpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoMikuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWplKDMp''@;'; put 'put ''LiRpbXBsaWNpdCxkPWplKDIpO2hyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSksQ2UoMSksUmUoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0pfX1mdW5jdGlvbiBMemUoYyxsKXsxJmMmJmphKDApfWNvbnN0IHVVPWZ1''@;'; put 'put ''bmN0aW9uKGMsbCl7cmV0dXJue2NvbDpjLGNvbEluZGV4Omx9fTtmdW5jdGlvbiBSemUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxRZSgxLEx6ZSwxLDAsIm5nLWNvbnRhaW5lciIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgzKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtqZSgyKTtj''@;'; put 'put ''b25zdCBmPSRpKDE2KTtDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixRMigyLHVVLGQsaCkpfX1jb25zdCBPemU9ZnVuY3Rpb24oKXtyZXR1cm5bIm51bWVyaWMiLHZvaWQgMF19LFRzZT1mdW5jdGlvbigpe3JldHVyblsiYXV0b2NvbXBs''@;'; put 'put ''ZXRlIl19O2Z1bmN0aW9uIFB6ZShjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsSXplLDIsMywiY2xyLWlucHV0LWNvbnRhaW5lciIsMzIpLFFlKDIsUnplLDIsNSwiZGl2IiwyKSxZcigpKSwyJmMpe2NvbnN0IGE9amUoMikuJGltcGxpY2l0LGQ9amUoMik7bGV0IGgsZjtDZSgxKSxSZSgibmdJ''@;'; put 'put ''ZiIsJHMoMixPemUpLmluY2x1ZGVzKG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmguZWRpdG9yKSksQ2UoMSksUmUoIm5nSWYiLCRzKDMsVHNlKS5pbmNsdWRlcyhudWxsPT1kLmN1''@;'; put 'put ''cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShmPWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpmLmVkaXRvcikpfX1mdW5jdGlvbiBGemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdGV4dGFyZWEtY29udGFpbmVyIikoMSwidGV4''@;'; put 'put ''dGFyZWEiLDM2LDM3KSx4dCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1qZSgzKS5pbmRleDtyZXR1cm4ganQoamUoMikub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoNSkucmVjb3JkSW5wdXRQYXN0''@;'; put 'put ''ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9amUoMykuJGltcGxpY2l0O3JldHVybiBqdChqZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1qZSgzKS4kaW1wbGljaXQ7cmV0''@;'; put 'put ''dXJuIGp0KGplKDIpLmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpfSksTmUoMywiICAgICAgICAgICAgICAgICAgIikseWUoKSxtZSg0LCJjbHItY29udHJvbC1oZWxwZXIiKSxOZSg1KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDIpLGQ9amUoMykuJGltcGxpY2l0LGg9amUoMik7bGV0IGYs''@;'; put 'put ''XyxUO0NlKDEpLGhyKCJpbnZhbGlkLWRhdGEiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGQua2V5KSkoIm5vdC1jaGFyIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShmPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/''@;'; put 'put ''bnVsbDpmLnR5cGUpLFJlKCJyb3dzIixkLnZhbHVlLmxlbmd0aD44MD82OjEpKCJuZ01vZGVsIixoLmN1cnJlbnRSZWNvcmRbZC5rZXldKSgibWF4TGVuZ3RoIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShfPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxl''@;'; put 'put ''KGQua2V5KSk/bnVsbDpfLmxlbmd0aCksQ2UoNCksamMoIiIsYS52YWx1ZS5sZW5ndGgsIiAvICIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oVD1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6VC5sZW5ndGgsIiIpfX1mdW5jdGlv''@;'; put 'put ''biBIemUoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIE56ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLFFlKDEsSHplLDEsMCwibmctY29udGFpbmVyIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPWplKDMpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O2plKDIpO2NvbnN0IGY9JGkoMTYpO0Nl''@;'; put 'put ''KDEpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFEyKDIsdVUsZCxoKSl9fWNvbnN0IFZ6ZT1mdW5jdGlvbigpe3JldHVyblt2b2lkIDBdfTtmdW5jdGlvbiBCemUoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLEZ6ZSw2LDksImNsci10ZXh0YXJl''@;'; put 'put ''YS1jb250YWluZXIiLDIpLFFlKDIsTnplLDIsNSwiZGl2IiwyKSxZcigpKSwyJmMpe2NvbnN0IGE9amUoMikuJGltcGxpY2l0LGQ9amUoMik7bGV0IGgsZjtDZSgxKSxSZSgibmdJZiIsJHMoMixWemUpLmluY2x1ZGVzKG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9''@;'; put 'put ''ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmguZWRpdG9yKSksQ2UoMSksUmUoIm5nSWYiLCRzKDMsVHNlKS5pbmNsdWRlcyhudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShmPWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxl''@;'; put 'put ''KGEua2V5KSk/bnVsbDpmLmVkaXRvcikpfX1mdW5jdGlvbiBqemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiwzOCkoMSwidGV4dGFyZWEiLDM5KSx4dCgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSg0KS5yZWNv''@;'; put 'put ''cmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1qZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKDIpLiRp''@;'; put 'put ''bXBsaWNpdDtyZXR1cm4ganQoamUoMikuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSx5ZSgpLG1lKDIsImNsci1jb250cm9sLWhlbHBlciIpLE5lKDMsIkhIOm1tOnNzIikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1qZSgyKS4kaW1wbGljaXQsZD1qZSgyKTtsZXQgaDtDZSgxKSxocigiaW52''@;'; put 'put ''YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtleSkpKCJub3QtY2hhciIsbnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6aC50eXBlKSxSZSgi''@;'; put 'put ''cm93cyIsYS52YWx1ZS5sZW5ndGg+ODA/NjoxKSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSl9fWZ1bmN0aW9uIHp6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMzgpKDEsInRleHRhcmVhIiw0MCkseHQoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4g''@;'; put 'put ''QnQoYSksanQoamUoNCkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9amUoMikuJGltcGxpY2l0O3JldHVybiBqdChqZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7QnQo''@;'; put 'put ''YSk7Y29uc3QgZj1qZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKDIpLmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpfSkseWUoKSxtZSgyLCJjbHItZGF0ZS1jb250YWluZXIiLDQxKSgzLCJpbnB1dCIsNDIpLHh0KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWpl''@;'; put 'put ''KDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoMikucmVjb3JkRGF0ZUNoYW5nZShoLGYua2V5KSl9KSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoMikuJGltcGxpY2l0LGQ9amUoMik7Q2UoMSksaHIoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVk''@;'; put 'put ''ZXMoYS5rZXkpKSxSZSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSl9fWZ1bmN0aW9uIFV6ZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gWnplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksUWUoMSxVemUsMSwwLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9amUoMiksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7amUoMik7Y29uc3QgZj0kaSgxNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsUTIoMix1VSxkLGgpKX19ZnVuY3Rpb24gWXplKGMsbCl7aWYoMSZjJiYoenIoMCksbWUoMSwi''@;'; put 'put ''ZGl2IiwxOCkoMiwiZGl2IiwxOSkoMywicCIsMjApLE5lKDQpLFFlKDUsQXplLDEsMCwiY2xyLWljb24iLDIxKSx5ZSgpLG1lKDYsInAiLDIyKSxOZSg3KSx5ZSgpKCksbWUoOCwiZGl2IiwyMyksUWUoOSxUemUsMiwwLCJzcGFuIiwyNCksUWUoMTAsRHplLDEsMCwiY2xyLWljb24iLDI1KSxR''@;'; put 'put ''ZSgxMSxQemUsMyw0LCJuZy1jb250YWluZXIiLDI2KSxRZSgxMixCemUsMyw0LCJuZy1jb250YWluZXIiLDI2KSxRZSgxMyxqemUsNCw2LCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiwyNyksUWUoMTQsenplLDQsMywiZGl2IiwyNyksUWUoMTUsWnplLDIsNSwiZGl2IiwyNikseWUoKSgpLHF0''@;'; put 'put ''KDE2LCJociIsMjgpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSgpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4LGY9amUoMik7bGV0IF8sVDtDZSg0KSxtcigiICIsZC5rZXksIiAiKSxDZSgxKSxSZSgibmdJZiIsZi5pc0NvbFBrKGQua2V5KSksQ2UoMiksbXIoIiAiLG51bGw9PWYuY3VycmVudFJl''@;'; put 'put ''Y29yZFZhbGlkYXRvcnx8bnVsbD09KF89Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOl8uZGVzYywiICIpLENlKDEpLFJlKCJuZ1N3aXRjaCIsbnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oVD1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0''@;'; put 'put ''b3IuZ2V0UnVsZShkLmtleSkpP251bGw6VC50eXBlKSxDZSgxKSxSZSgibmdJZiIsZi5jdXJyZW50UmVjb3JkTG9hZGluZ3MuaW5jbHVkZXMoaCkpLENlKDEpLFJlKCJuZ0lmIixmLmN1cnJlbnRSZWNvcmRFcnJvcnMuaW5jbHVkZXMoaCkpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJudW1l''@;'; put 'put ''cmljIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsdm9pZCAwKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJkYXRlIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsImF1dG9jb21wbGV0ZSIpfX1mdW5jdGlvbiBXemUoYyxsKXtpZigx''@;'; put 'put ''JmMmJih6cigwKSxRZSgxLFl6ZSwxNywxMSwibmctY29udGFpbmVyIiwyKSxZcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCJBY3Rpb24iIT09YS5rZXkmJiJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5rZXkmJiJub0xpbmtPcHRpb24i''@;'; put 'put ''IT09YS5rZXkpfX1mdW5jdGlvbiBHemUoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLFd6ZSwyLDEsIm5nLWNvbnRhaW5lciIsMTcpLGJhKDIsImtleXZhbHVlIiksWXIoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksUmUoIm5nRm9yT2YiLE01KDIsMixhLmN1cnJlbnRSZWNvcmQsYS5vcmln''@;'; put 'put ''aW5hbE9yZGVyKSkoIm5nRm9yVHJhY2tCeSIsYS50cmFja0J5Rm4pfX1mdW5jdGlvbiAkemUoYyxsKXsxJmMmJihtZSgwLCJjbHItYWxlcnQiLDQzKSgxLCJjbHItYWxlcnQtaXRlbSIpKDIsInNwYW4iLDQ0KSxOZSgzLCIgRGF0YSBWYWxpZGF0aW9uIEVycm9ycyAtIFBsZWFzZSBSZXZpZXcg''@;'; put 'put ''IikseWUoKSgpKCkpLDImYyYmKEh1KCJ2aXNpYmlsaXR5IixqZSgpLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MD8idmlzaWJsZSI6ImhpZGRlbiIpLFJlKCJjbHJBbGVydENsb3NhYmxlIiwhMSkoImNsckFsZXJ0VHlwZSIsImRhbmdlciIpKX1mdW5jdGlvbiBxemUoYyxsKXtp''@;'; put 'put ''ZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDQ1KSgxLCJidXR0b24iLDQ2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkub25QcmV2aW91c1JlY29yZENsaWNrKCkpfSkscXQoMiwiY2xyLWljb24iLDQ3KSx5ZSgpLG1lKDMsInAiKSxOZSg0LCIgQ3Vy''@;'; put 'put ''cmVudCByb3c6ICIpLG1lKDUsInN0cm9uZyIpLE5lKDYpLHllKCkoKSxtZSg3LCJidXR0b24iLDQ2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkub25OZXh0UmVjb3JkQ2xpY2soKSl9KSxxdCg4LCJjbHItaWNvbiIsNDgpLHllKCkoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9amUoKTtDZSgxKSxSZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSxDZSg1KSxtcigiICIsYS5jdXJyZW50UmVjb3JkSW5kZXgrMSwiICIpLENlKDEpLFJlKCJkaXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApfX1m''@;'; put 'put ''dW5jdGlvbiBLemUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDUzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoIm5nVmFsdWUiLGEpLENlKDEpLG1yKCIgIixhLCIgIil9fWZ1bmN0aW9uIFh6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRp''@;'; put 'put ''diIpKDEsImFwcC1zb2Z0LXNlbGVjdCIsNTEpLHh0KCJmb2N1c2luIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKCkuY29sSW5kZXg7cmV0dXJuIGp0KGplKCkub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWpl''@;'; put 'put ''KCkuY29sO3JldHVybiBqdChqZSgpLmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCksZj1oLmNvbCxfPWguY29sSW5kZXg7cmV0dXJuIGp0KGplKCkub25SZWNvcmREcm9wZG93bkNoYW5nZShmLmtleSxfKSl9KSxR''@;'; put 'put ''ZSgyLEt6ZSwyLDIsIm9wdGlvbiIsNTIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoKS5jb2wsZD1qZSgpO2xldCBoO0NlKDEpLFJlKCJ2YWx1ZSIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSkoImlucHV0SWQiLGEua2V5KSxDZSgxKSxSZSgibmdGb3JPZiIsbnVsbD09ZC5jdXJyZW50UmVj''@;'; put 'put ''b3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6aC5zb3VyY2UpfX1mdW5jdGlvbiBKemUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDU2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUo''@;'; put 'put ''InZhbHVlIixhKSxDZSgxKSxtcigiICIsYSwiICIpfX1mdW5jdGlvbiBRemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJzZWxlY3QiLDU0KSx4dCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1qZSgpLmNvbEluZGV4O3JldHVybiBqdChqZSgpLm9uUmVjb3Jk''@;'; put 'put ''SW5wdXRGb2N1cyhoLGYpKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKCkuY29sO3JldHVybiBqdChqZSgpLmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpfSksUWUoMSxKemUsMiwyLCJvcHRpb24iLDU1KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1qZSgpLmNv''@;'; put 'put ''bCxkPWplKCk7bGV0IGg7UmUoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0pLENlKDEpLFJlKCJuZ0Zvck9mIixudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpoLnNvdXJj''@;'; put 'put ''ZSl9fWNvbnN0IGVVZT1mdW5jdGlvbigpe3JldHVyblsiU09GVFNFTEVDVCIsIlNPRlRTRUxFQ1RfSE9PSyJdfTtmdW5jdGlvbiB0VWUoYyxsKXtpZigxJmMmJihRZSgwLFh6ZSwzLDMsImRpdiIsNDkpLFFlKDEsUXplLDIsMiwibmctdGVtcGxhdGUiLG51bGwsNTAsRWMpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9bC5jb2wsZD0kaSgyKSxoPWplKCk7UmUoIm5nSWYiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcj9udWxsOmguY3VycmVudFJlY29yZFZhbGlkYXRvci5oYXNEcVJ1bGVzKGEua2V5LCRzKDIsZVVlKSkpKCJuZ0lmRWxzZSIsZCl9fWxldCBuVWU9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmN1''@;'; put 'put ''cnJlbnRSZWNvcmRJbmRleD0tMSx0aGlzLmN1cnJlbnRSZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRSZWNvcmRFcnJvcnM9W10sdGhpcy5vblJlY29yZENoYW5nZT1uZXcgRXIsdGhpcy5vblJlY29yZElucHV0Rm9jdXNlZD1uZXcgRXIsdGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdl''@;'; put 'put ''ZD1uZXcgRXIsdGhpcy5vblJlY29yZEVkaXRDbG9zZT1uZXcgRXIsdGhpcy5vblJlY29yZEVkaXRDb25maXJtPW5ldyBFcix0aGlzLm9uTmV4dFJlY29yZD1uZXcgRXIsdGhpcy5vblByZXZpb3VzUmVjb3JkPW5ldyBFcix0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scz1bXSx0aGlzLmdl''@;'; put 'put ''bmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0aGlzLm9yaWdpbmFsT3JkZXI9KGgsZik9PjB9''@;'; put 'put ''bmdPbkluaXQoKXt9dmFsaWRhdGVSZWNvcmRDb2woYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsXyk9PntoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmV4ZWN1dGVIb3RWYWxpZGF0b3IoYSxkLFQ9PntmKFQpfSl9KX0pKCl9cmVj''@;'; put 'put ''b3JkRGF0ZUNoYW5nZShhLGQpe2xldCBoPXRoaXMuY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShkKSxmPWg/aC5kYXRlRm9ybWF0OiIiO3RoaXMuY3VycmVudFJlY29yZCYmKHRoaXMuY3VycmVudFJlY29yZFtkXT1JRygpKGEpLmZvcm1hdChmKSl9Y29uZmlybVJlY29yZEVkaXQo''@;'; put 'put ''KXt0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8MSYmdGhpcy5vblJlY29yZENoYW5nZS5lbWl0KHRoaXMuY3VycmVudFJlY29yZCl9Y2xvc2VSZWNvcmRFZGl0KCl7dGhpcy5vblJlY29yZEVkaXRDbG9zZS5lbWl0KCl9b25SZWNvcmREcm9wZG93bkNoYW5nZShhLGQpe3Ro''@;'; put 'put ''aXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQuZW1pdCh7Y29sTmFtZTphLGNvbDpkfSl9b25SZWNvcmRJbnB1dEZvY3VzKGEsZCl7dGhpcy5vblJlY29yZElucHV0Rm9jdXNlZC5lbWl0KHtldmVudDphLGNvbE5hbWU6ZH0pfXJlY29yZElucHV0UGFzdGUoYSl7c2V0VGltZW91dCgoKT0+e2Eu''@;'; put 'put ''dGFyZ2V0LnZhbHVlPWEudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xzKyQvLCIiKX0sMCl9cmVjb3JkSW5wdXRDaGFuZ2UoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBmPWguY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShkKSxfPWEudGFyZ2V0LnZh''@;'; put 'put ''bHVlO2guaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMzAwLCgpPT57aC52YWxpZGF0ZVJlY29yZENvbChmLF8pLnRoZW4oVD0+e2NvbnN0IFc9aC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5kZXhPZihkKTtUP1c+LTEmJmguY3VycmVudFJlY29yZEludmFsaWRDb2xzLnNwbGljZShX''@;'; put 'put ''LDEpOlc8MCYmaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMucHVzaChkKX0pfSl9KSgpfW9uTmV4dFJlY29yZENsaWNrKCl7dGhpcy5vbk5leHRSZWNvcmQuZW1pdCgpfW9uUHJldmlvdXNSZWNvcmRDbGljaygpe3RoaXMub25QcmV2aW91c1JlY29yZC5lbWl0KCl9Y29weVRvQ2xpcChhKXtj''@;'; put 'put ''b25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNyZWNvcmRNb2RhbFJlZiAubW9kYWwtdGl0bGUiKTtpZihkKXtjb25zdCBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7aC5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGguc3R5bGUubGVmdD0iMCIsaC5zdHlsZS50b3A9''@;'; put 'put ''IjAiLGguc3R5bGUub3BhY2l0eT0iMCIsaC5zdHlsZS56SW5kZXg9IjUwMDAiLGgudmFsdWU9YSxkLmFwcGVuZENoaWxkKGgpLGguZm9jdXMoKSxoLnNlbGVjdCgpLGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksZC5yZW1vdmVDaGlsZChoKSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1h''@;'; put 'put ''fX1nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihhLmdlbmVyYXRlZFJlY29yZFVybClhLmNvcHlUb0NsaXAoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpO2Vsc2V7YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSEwO2NvbnN0IGQ9''@;'; put 'put ''W107YS5oZWFkZXJQa3MuZm9yRWFjaChoPT57bGV0IGY9IkMiLF89IiI7Zm9yKGxldCBUPTA7VDxhLmNlbGxWYWxpZGF0aW9uLmxlbmd0aDtUKyspe2NvbnN0IFc9YS5jZWxsVmFsaWRhdGlvbltUXTtpZihXLmRhdGE9PT1oKXsoIm51bWVyaWMiPT09Vy50eXBlfHwiZGF0ZSI9PT1XLnR5cGV8''@;'; put 'put ''fCJ0aW1lIj09PVcudHlwZSkmJihmPSJOIik7YnJlYWt9fV89IkMiPT09Zj9gJyR7YS5jdXJyZW50UmVjb3JkW2hdfSdgOmEuY3VycmVudFJlY29yZFtoXS50b1N0cmluZygpLGQucHVzaCh7R1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfSUQ6MCxWQVJJ''@;'; put 'put ''QUJMRV9OTTpoLE9QRVJBVE9SX05NOiI9IixSQVdfVkFMVUU6X30pfSksZC5sZW5ndGg+MCYmYS5saWJkcyYmKHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLGQpLnRoZW4oaD0+e2EucXVlcnlGaWx0ZXI9e2lkOmgucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpo''@;'; put 'put ''LnJlc3VsdFswXS5GSUxURVJfVEFCTEV9O2NvbnN0IFQ9bG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKyIjL2VkaXRvci9lZGl0LXJlY29yZC8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWQ7YS5jb3B5VG9DbGlwKFQpLGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJs''@;'; put 'put ''TG9hZGluZz0hMSxhLmZpbHRlcj0hMX0pLmNhdGNoKGg9PnthLnN1Ym1pdExvYWRpbmc9ITF9KSl9fSkoKX1pc0NvbFBrKGEpe3JldHVybiB0aGlzLmhlYWRlclBrcy5pbmRleE9mKGEpPi0xfXRyYWNrQnlGbihhLGQpe3JldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQoQWMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWVkaXQtcmVjb3JkIl1dLGlucHV0czp7Y3VycmVudFJlY29yZDoiY3VycmVudFJlY29yZCIscmVjb3JkQWN0aW9uOiJyZWNvcmRBY3Rpb24iLGxpYmRzOiJsaWJk''@;'; put 'put ''cyIscXVlcnlGaWx0ZXI6InF1ZXJ5RmlsdGVyIixmaWx0ZXI6ImZpbHRlciIsc3VibWl0TG9hZGluZzoic3VibWl0TG9hZGluZyIsaGVhZGVyUGtzOiJoZWFkZXJQa3MiLGNlbGxWYWxpZGF0aW9uOiJjZWxsVmFsaWRhdGlvbiIsY3VycmVudFJlY29yZEluZGV4OiJjdXJyZW50UmVjb3JkSW5k''@;'; put 'put ''ZXgiLGN1cnJlbnRSZWNvcmRMb2FkaW5nczoiY3VycmVudFJlY29yZExvYWRpbmdzIixjdXJyZW50UmVjb3JkRXJyb3JzOiJjdXJyZW50UmVjb3JkRXJyb3JzIixjdXJyZW50UmVjb3JkVmFsaWRhdG9yOiJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIn0sb3V0cHV0czp7b25SZWNvcmRDaGFuZ2U6''@;'; put 'put ''Im9uUmVjb3JkQ2hhbmdlIixvblJlY29yZElucHV0Rm9jdXNlZDoib25SZWNvcmRJbnB1dEZvY3VzZWQiLG9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkOiJvblJlY29yZERyb3Bkb3duQ2hhbmdlZCIsb25SZWNvcmRFZGl0Q2xvc2U6Im9uUmVjb3JkRWRpdENsb3NlIixvblJlY29yZEVkaXRDb25m''@;'; put 'put ''aXJtOiJvblJlY29yZEVkaXRDb25maXJtIixvbk5leHRSZWNvcmQ6Im9uTmV4dFJlY29yZCIsb25QcmV2aW91c1JlY29yZDoib25QcmV2aW91c1JlY29yZCJ9LGRlY2xzOjE3LHZhcnM6MTEsY29uc3RzOltbImlkIiwicmVjb3JkTW9kYWxSZWYiLDEsInJlY29yZC1lZGl0LW1vZGFsIiwicG9z''@;'; put 'put ''aXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMCBw''@;'; put 'put ''eS0xMCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiLCJwLTAiLCJjbHItZ2FwLTUiLCJjbHItZ2FwLW1kLTAiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbImNsYXNzIiwidmFsaWRhdGlvbi1pbmZvLWFsZXJ0IiwzLCJ2aXNpYmlsaXR5IiwiY2xyQWxlcnRDbG9z''@;'; put 'put ''YWJsZSIsImNsckFsZXJ0VHlwZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmV2LW5leHQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJm''@;'; put 'put ''b2N1c2FibGUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbImF1dG9jb21wbGV0ZSIsIiJdLFsiY2xhc3MiLCJwb3NpdGlvbi1hYnNvbHV0ZSBnZW5lcmF0ZS1yZWNvcmQtdXJsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ0biBidG4tbGluayBnZW5lcmF0ZS1yZWNvcmQtdXJsLWJ1dHRvbiBwb3Np''@;'; put 'put ''dGlvbi1hYnNvbHV0ZSIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImdlbmVyYXRlLXJlY29yZC11cmwiXSxbMSwiYnRuIiwiYnRuLWxpbmsiLCJnZW5lcmF0ZS1yZWNvcmQtdXJsLWJ1dHRvbiIsInBvc2l0aW9uLWFic29sdXRlIiwzLCJk''@;'; put 'put ''aXNhYmxlZCIsImNsaWNrIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJ3LTEwMCIsInB5LTEwIl0sWzEsInNwaW5uZXIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsImNvbHVtbi1lbnRyeSIsImNs''@;'; put 'put ''ci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsxLCJuYW1lLWlucHV0LXJvdyJdLFsxLCJmb250LXdlaWdodC1ib2xkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsxLCJjZWxsLWRlc2MiXSxbMSwiaW5wdXRzLXdyYXBwZXIiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywibmdT''@;'; put 'put ''d2l0Y2giXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSBmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZz''@;'; put 'put ''ZXQiLCJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsNCwibmdJZiJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZGF0ZS1maWVsZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm10LTEwIl0sWyJzaGFwZSIsImtleSJdLFsxLCJzcGlubmVyIiwic3Bpbm5l''@;'; put 'put ''ci1pbmxpbmUiLCJmbGV4LXVuc2V0IiwicG9zaXRpb24tYWJzb2x1dGUiLCJlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCJdLFsic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDEsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxl''@;'; put 'put ''ZnQtb2Zmc2V0Il0sWyJjbGFzcyIsIm51bWVyaWMtaW5wdXQiLDMsImludmFsaWQtZGF0YSIsNCwibmdJZiJdLFsxLCJudW1lcmljLWlucHV0Il0sWyJjbHJJbnB1dCIsIiIsInR5cGUiLCJ0ZXh0IiwxLCJub3QtY2hhciIsMywibmdNb2RlbCIsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0Iiwi''@;'; put 'put ''bmdNb2RlbENoYW5nZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbImNsclRleHRhcmVhIiwiIiwzLCJyb3dzIiwibmdNb2RlbCIsIm1heExlbmd0aCIsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSJdLFsiY2hhclRl''@;'; put 'put ''eHRhcmVhIiwiIl0sWzEsImRhdGUtZmllbGQiXSxbImNsclRleHRhcmVhIiwiIiwzLCJyb3dzIiwibmdNb2RlbCIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbHJUZXh0YXJlYSIsIiIsInJvd3MiLCIxIiwiY29scyIsImF1dG8iLDEsIm5vdC1jaGFyIiwzLCJuZ01vZGVs''@;'; put 'put ''IiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwiZGF0ZS1waWNrZXIiXSxbInR5cGUiLCJkYXRlIiwibmFtZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwxLCJkLW5vbmUiLDMsImNsckRhdGVDaGFuZ2UiXSxbMSwidmFsaWRhdGlvbi1pbmZvLWFsZXJ0IiwzLCJjbHJBbGVydENs''@;'; put 'put ''b3NhYmxlIiwiY2xyQWxlcnRUeXBlIl0sWzEsImFsZXJ0LXRleHQiXSxbMSwicHJldi1uZXh0Il0sWyJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSBsZWZ0''@;'; put 'put ''Iiwic2l6ZSIsIjIzIl0sWyJzaGFwZSIsImFuZ2xlIHJpZ2h0Iiwic2l6ZSIsIjIzIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsib3RoZXJfdGhhbl9zb2Z0X3NlbGVjdCIsIiJdLFszLCJ2YWx1ZSIsImlucHV0SWQiLCJmb2N1c2luIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiXSxb''@;'; put 'put ''MywibmdWYWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nVmFsdWUiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbCIsImZvY3VzaW4iLCJuZ01vZGVsQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsxJmEmJihtZSgwLCJjbHItbW9kYWwiLDApKDEsImgzIiwxKSxOZSgyKSxRZSgzLEV6ZSwzLDIsIm5nLWNvbnRhaW5lciIsMikseWUoKSxtZSg0LCJkaXYiLDMpLFFlKDUsa3plLDMsMCwiZGl2Iiw0KSxRZSg2LEd6ZSwzLDUsIm5nLWNvbnRhaW5lciIsMikseWUoKSxtZSg3LCJkaXYi''@;'; put 'put ''LDUpLFFlKDgsJHplLDQsNCwiY2xyLWFsZXJ0Iiw2KSxRZSg5LHF6ZSw5LDMsImRpdiIsNyksbWUoMTAsImRpdiIpKDExLCJidXR0b24iLDgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbj0hMSxkLmNsb3NlUmVjb3JkRWRpdCgpfSks''@;'; put 'put ''TmUoMTIsIiBDYW5jZWwgIikseWUoKSxtZSgxMywiYnV0dG9uIiw5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY29uZmlybVJlY29yZEVkaXQoKX0pLE5lKDE0LCIgQ29uZmlybSAiKSx5ZSgpKCkoKSxRZSgxNSx0VWUsMywzLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxFYykseWUo''@;'; put 'put ''KSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsITApKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoMiksYjAoIiAiLCJBREQiPT09ZC5yZWNvcmRBY3Rpb24/IkFkZCI6IkVkaXQiLCIgcmVjb3JkIGluICIsbnVsbD09ZC5saWJkcz9udWxsOmQubGliZHMuc3BsaXQoIi4iKVswXSwiLiIsbnVs''@;'; put 'put ''bD09ZC5saWJkcz9udWxsOmQubGliZHMuc3BsaXQoIi4iKVsxXSwiICIpLENlKDEpLFJlKCJuZ0lmIiwiRURJVCI9PT1kLnJlY29yZEFjdGlvbiksQ2UoMiksUmUoIm5nSWYiLGQuYWRkUmVjb3JkTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFkLmFkZFJlY29yZExvYWRpbmcpLENlKDIpLFJl''@;'; put 'put ''KCJuZ0lmIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksQ2UoMSksUmUoIm5nSWYiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aDwxKSxDZSg0KSxSZSgiZGlzYWJsZWQiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKSl9LGRlcGVuZGVu''@;'; put 'put ''Y2llczpbeHMsWmkscmQsbmQsdGgsbDEsYzEsV2EsTTAsQnMsT3MsRmIsUFEsSGIsaEgsa2Esb3Usc3UsSEYsSWIsJEYscUYsZjEsakYsTjgsb3dlLHVRLE1zZSx1eF0sc3R5bGVzOlsiLnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAubmFtZS1pbnB1dC1yb3dbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''e3dpZHRoOjEwMCU7bWF4LXdpZHRoOjI2MHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYW1lLWlucHV0LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbC1kZXNjW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXttYXJnaW4tcmlnaHQ6MzBweDttYXJnaW4tdG9wOjEwcHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLmlucHV0cy13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7ZGlzcGxheTpm''@;'; put 'put ''bGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAuaW5wdXRzLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgID4qOm5vdCguZGF0ZS1maWVsZCk6bm90KGNsci1z''@;'; put 'put ''ZWxlY3QtY29udGFpbmVyKXtmbGV4OjF9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''ICAuY2xyLWZvcm0tY29udHJvbHttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjI0cHg7YmFj''@;'; put 'put ''a2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0IGlucHV0e3dpZHRoOjEwMCU7Ym9yZGVyOjA7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVu''@;'; put 'put ''dHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0IGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''ICBhcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sIC5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LWlubmVy''@;'; put 'put ''LXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZCAgIHBbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxk''@;'; put 'put ''e21hcmdpbi10b3A6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAu''@;'; put 'put ''ZGF0ZS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0YXJlYVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MjMwcHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLXBpY2tlcltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6NHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1waWNrZXJbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWlucHV0''@;'; put 'put ''LWdyb3Vwe2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEwcHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLXNl''@;'; put 'put ''bGVjdC1jb250YWluZXJ7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1czouMTI1cmVtO21hcmdpbi1yaWdodDo1cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3Jh''@;'; put 'put ''cHBlcnttYXgtaGVpZ2h0OnVuc2V0fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXJ7dG9wOjE1cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xy''@;'; put 'put ''LXNlbGVjdC1jb250YWluZXIgc2VsZWN0e2hlaWdodDphdXRvO3BhZGRpbmc6MTBweCAyMHB4IDEwcHggMTBweDtib3JkZXI6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmZvY3Vze2JhY2tn''@;'; put 'put ''cm91bmQ6MCAwIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3Q6aG92ZXJ7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHIt''@;'; put 'put ''aW5wdXQtY29udGFpbmVye3dpZHRoOjIyNHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAwMDtwYWRkaW5nOmNhbGMoLjI1cmVtICsgMnB4KSAuNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07Zm9udC1zaXplOi41NDE2NjdyZW07bWFyZ2luLXJpZ2h0''@;'; put 'put ''OjZweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0e3dpZHRoOjEwMCU7Ym9yZGVyOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDpmb2N1''@;'; put 'put ''c3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sIC5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lci5pbnZhbGlk''@;'; put 'put ''LWRhdGF7Ym9yZGVyLWNvbG9yOnJlZH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtZGlhbG9ne3dpZHRoOjgwdnd9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAl''@;'; put 'put ''fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWF7d2lkdGg6MTAwJTtyZXNpemU6bm9uZTtib3JkZXItY29sb3I6Izk5OX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNv''@;'; put 'put ''bnRyb2wtY29udGFpbmVyIHRleHRhcmVhLmludmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkO291dGxpbmU6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhLm5vdC1jaGFye2ZvbnQtZmFtaWx5Okx1Y2lk''@;'; put 'put ''YSBDb25zb2xlLE1vbmFjbyxtb25vc3BhY2V9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmdlbmVyYXRlLXJlY29yZC11cmx7cmlnaHQ6NDBweDt0b3A6NDBweDtmb250LXNpemU6MTJweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''ICAuZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b257cmlnaHQ6MjVweDt0b3A6NXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1oZWFkZXJ7cGFkZGluZzowIDAgMXJlbX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAu''@;'; put 'put ''bW9kYWwtZm9vdGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWZvb3RlciAuYWxlcnR7bWFyZ2luOjB9LnByZXYtbmV4dFtfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ucHJldi1uZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowfS5wcmV2LW5leHRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtt''@;'; put 'put ''YXJnaW46MCAxMHB4fS5mb2N1c2FibGVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze2JveC1zaGFkb3c6MCAwIDNweCAjNWFhMjIwfS5lbnRyeS1pbnB1dC1sZWZ0LW9mZnNldFtfbmdjb250ZW50LSVDT01QJV17bGVmdDotMzBweH0udmFsaWRhdGlvbi1pbmZvLWFsZXJ0W19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXt3aWR0aDozMTBweH0iXX0pLGN9KSgpO2Z1bmN0aW9uIHJVZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxtcigiICIsYSwiICIpfX1sZXQgaVVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0''@;'; put 'put ''aGlzLnN0YXRlc0xpc3Q9W10sdGhpcy5wcm9jZXNzZWRTdGF0ZXM9W10sdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHRoaXMubWluRGVsYXk9MWUzfW5nT25Jbml0KCl7fWFwcGVuZFN0YXRlKGEpe2lmKCJ7ZmluaXNofSI9PT1hKXJldHVybiB0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITEsdm9p''@;'; put 'put ''ZCBjbGVhckludGVydmFsKHRoaXMuc3RhdGVJbnRlcnZhbCk7dGhpcy5zdGF0ZXNMaXN0LnB1c2goYSksdGhpcy5wcm9jZXNzZWRTdGF0ZXMucHVzaChhKX1yZXBsYWNlTGFzdFN0YXRlKGEpe3RoaXMuc3RhdGVzTGlzdC5sZW5ndGg+MD8odGhpcy5zdGF0ZXNMaXN0LnBvcCgpLHRoaXMuc3Rh''@;'; put 'put ''dGVzTGlzdC5wdXNoKGEpKTp0aGlzLnByb2Nlc3NlZFN0YXRlc1t0aGlzLnByb2Nlc3NlZFN0YXRlcy5sZW5ndGgtMV09YX1jbGVhclN0YXRlcygpe3RoaXMucHJvY2Vzc2VkU3RhdGVzPVtdfXN0YXJ0U3RhdGVyKCl7dGhpcy5zdGF0ZXJJblByb2dyZXNzPSEwLHRoaXMuc3RhdGVzTGlzdC5s''@;'; put 'put ''ZW5ndGg+MCYmdGhpcy5wcm9jZXNzZWRTdGF0ZXMucHVzaCh0aGlzLnN0YXRlc0xpc3Quc2hpZnQoKXx8IiIpLHRoaXMuc3RhdGVJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuc3RhdGVzTGlzdC5sZW5ndGg+MCYmdGhpcy5wcm9jZXNzZWRTdGF0ZXMucHVzaCh0aGlzLnN0YXRlc0xp''@;'; put 'put ''c3Quc2hpZnQoKXx8IiIpfSx0aGlzLm1pbkRlbGF5KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11cGxvYWQtc3RhdGVyIl1dLGRlY2xzOjUsdmFyczoxLGNvbnN0czpbWyJj''@;'; put 'put ''bGFzcyIsIm0tMCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwidmVydGljYWwtYWxpZ24tbWlkZGxlIl0sWzEsIm0tMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIpLFFlKDEsclVlLDIs''@;'; put 'put ''MSwicCIsMCkseWUoKSxtZSgyLCJkaXYiLDEpKDMsInNwYW4iLDIpLE5lKDQsIkxvYWRpbmcuLi4iKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0Zvck9mIixkLnByb2Nlc3NlZFN0YXRlcykpfSxkZXBlbmRlbmNpZXM6W3hzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6''@;'; put 'put ''YmxvY2t9cFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXJ9Il19KSxjfSkoKSxvVWU9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIGEucmVwbGFjZSgvXHwvZywiIHwgIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6InBrU3BhY2VTZXBhcmF0ZSIsdHlwZTpjLHB1cmU6ITB9KSxjfSkoKSxEc2U9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSxkKXtyZXR1cm4gdGhpcy5hZGRTZXBhcmF0b3JzKGEudG9TdHJpbmcoKSxkKX1hZGRTZXBhcmF0b3JzKGEs''@;'; put 'put ''ZD0iICIpe2NvbnN0IGg9KGErPSIiKS5zcGxpdCgiLiIpO2xldCBmPWhbMF07Y29uc3QgXz1oLmxlbmd0aD4xPyIuIitoWzFdOiIiLFQ9LyhcZCspKFxkezN9KS87Zm9yKDtULnRlc3QoZik7KWY9Zi5yZXBsYWNlKFQsIiQxIitkKyIkMiIpO3JldHVybiBmK199fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6InRob3VzYW5kU2VwYXJhdG9yIix0eXBlOmMscHVyZTohMH0pLGN9KSgpO2NvbnN0IHNVZT1bImh0Il0sYVVlPVsidXBsb2FkU3RhdGVyIl0sbFVlPVsicXVlcnlGaWx0ZXIiXSxjVWU9WyJob3RJ''@;'; put 'put ''bnN0YW5jZSJdLHVVZT1bImZpbGVVcGxvYWRJbnB1dCJdO2Z1bmN0aW9uIGRVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNjEpKDEsInNwYW4iLDYyKSgyLCJsYWJlbCIsNjMpLE5lKDMsIiBCcm93c2UgIikseWUoKSgpLG1lKDQsImlucHV0Iiw2NCw2NSkseHQoImNo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuZ2V0RmlsZURlc2MoaCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1qZSgpO0NlKDQpLFJlKCJ1cGxvYWRlciIsYS51cGxvYWRlcil9fWZ1bmN0aW9uIGhVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRp''@;'; put 'put ''diIsNjYpKDEsImJ1dHRvbiIsNjcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5nZXRGaWxlKCkpfSksTmUoMiwiIFVwbG9hZCAiKSx5ZSgpKCl9MiZjJiYoQ2UoMSksUmUoImRpc2FibGVkIiwhMCkpfWZ1bmN0aW9uIGZVZShjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1WbigpO21lKDAsImJ1dHRvbiIsNjgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5zaG93VXBsb2FkTW9kYWw9ITEpfSksTmUoMSwiIENsb3NlICIpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKCk7UmUoImRpc2FibGVkIixhLmV4Y2VsRmlsZVBhcnNpbmd8''@;'; put 'put ''fGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIHBVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsNjkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5zaG93VXBsb2FkTW9kYWw9ITEpfSksTmUoMSwiIFNraXAgIikseWUoKX19ZnVu''@;'; put 'put ''Y3Rpb24gZ1VlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw3MCkscXQoMSwiYXBwLXVwbG9hZC1zdGF0ZXIiLG51bGwsNzEpLHllKCkpfWZ1bmN0aW9uIG1VZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImFwcC1lZGl0LXJlY29yZCIsNzIpLHh0KCJvblJlY29yZENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5jb25maXJtUmVjb3JkRWRpdCgpKX0pKCJvblJlY29yZElucHV0Rm9jdXNlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkub25SZWNvcmRJbnB1dEZvY3VzKGgpKX0pKCJvblJlY29yZEVkaXRDbG9zZSIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gQnQoYSksanQoamUoKS5jbG9zZVJlY29yZEVkaXQoKSl9KSgib25OZXh0UmVjb3JkIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLm9uTmV4dFJlY29yZCgpKX0pKCJvblByZXZpb3VzUmVjb3JkIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLm9uUHJldmlv''@;'; put 'put ''dXNSZWNvcmQoKSl9KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1qZSgpO1JlKCJjdXJyZW50UmVjb3JkIixhLmN1cnJlbnRFZGl0UmVjb3JkKSgicmVjb3JkQWN0aW9uIixhLnJlY29yZEFjdGlvbikoImxpYmRzIixhLmxpYmRzKSgicXVlcnlGaWx0ZXIiLGEucXVlcnlGaWx0ZXIpKCJmaWx0ZXIi''@;'; put 'put ''LGEuZmlsdGVyKSgic3VibWl0TG9hZGluZyIsYS5zdWJtaXRMb2FkaW5nKSgiaGVhZGVyUGtzIixhLmhlYWRlclBrcykoImNlbGxWYWxpZGF0aW9uIixhLmNlbGxWYWxpZGF0aW9uKSgiY3VycmVudFJlY29yZEluZGV4IixhLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpKCJjdXJyZW50UmVjb3Jk''@;'; put 'put ''TG9hZGluZ3MiLGEuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncykoImN1cnJlbnRSZWNvcmRFcnJvcnMiLGEuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMpKCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIixhLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yKX19ZnVuY3Rpb24gdlVlKGMsbCl7MSZj''@;'; put 'put ''JiYobWUoMCwiZGl2Iiw3MykscXQoMSwicHJvZ3Jlc3MiKSx5ZSgpKX1jb25zdCBfVWU9ZnVuY3Rpb24oKXtyZXR1cm5bIi9ob21lIl19O2Z1bmN0aW9uIGJVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNzQpKDEsInNwYW4iLDc1KSxxdCgyLCJjbHItaWNvbiIsNzYp''@;'; put 'put ''LE5lKDMsIkJhY2sgdG8gdGFibGUgc2VsZWN0aW9uICIpLHllKCksbWUoNCwic3BhbiIsNzcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS52aWV3Ym94TWFuYWdlcigpKX0pLHF0KDUsImNsci1pY29uIiw3OCksTmUoNiwiIFZpZXdib3hlcyAiKSx5ZSgpKCl9''@;'; put 'put ''MiZjJiYoQ2UoMSksUmUoInJvdXRlckxpbmsiLCRzKDEsX1VlKSkpfWZ1bmN0aW9uIHlVZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDgzKX1mdW5jdGlvbiB3VWUoYyxsKXtpZigxJmMmJih6cigwKSxOZSgxKSxiYSgyLCJ0aG91c2FuZFNlcGFyYXRvciIpLFlyKCkpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1qZSgzKTtDZSgxKSx3NSgiICgiLE01KDIsNCxhLmRhdGFTb3VyY2UubGVuZ3RoLCIsIiksIiAiLDE9PT1hLmRhdGFTb3VyY2UubGVuZ3RoPyJyb3ciOiJyb3dzIiwiLCAiLGEuY29scy5sZW5ndGgsIiIsMT09PWEuY29scy5sZW5ndGg/IiBjb2wiOiIgY29scyIsIikgIil9fWZ1bmN0aW9u''@;'; put 'put ''IENVZShjLGwpezEmYyYmKHpyKDApLE5lKDEsIiAoMCByb3dzKSAiKSxZcigpKX1mdW5jdGlvbiBTVWUoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLHdVZSwzLDcsIm5nLWNvbnRhaW5lciIsMzUpLFFlKDIsQ1VlLDIsMCwibmctY29udGFpbmVyIiwzNSksWXIoKSksMiZjKXtjb25zdCBhPWpl''@;'; put 'put ''KDIpO0NlKDEpLFJlKCJuZ0lmIiwhYS56ZXJvRmlsdGVyUm93cyksQ2UoMSksUmUoIm5nSWYiLGEuemVyb0ZpbHRlclJvd3MpfX1mdW5jdGlvbiBNVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJoNCIsNzkpKDEsImNsci1pY29uIiw4MCkseHQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBCdChhKSxqdChqZSgpLmRhdGFzZXRJbmZvPSEwKX0pLHllKCksUWUoMix5VWUsMSwwLCJjbHItaWNvbiIsODEpLE5lKDMpLG1lKDQsImEiLDgyKSxOZSg1KSx5ZSgpLFFlKDYsU1VlLDMsMiwibmctY29udGFpbmVyIiwzNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1Zhcixk''@;'; put 'put ''PWplKCk7Q2UoMiksUmUoIm5nSWYiLGEudGFibGVOYW1lLmluY2x1ZGVzKCItRkMiKSksQ2UoMSksbXIoIiAiLGEubGliTmFtZSwiLiIpLENlKDEpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2QubGliZHMpLENlKDEpLG9yKGEudGFibGVOYW1lLnJlcGxhY2UoIi1GQyIsIiIpKSxD''@;'; put 'put ''ZSgxKSxSZSgibmdJZiIsZC5kYXRhU291cmNlKX19ZnVuY3Rpb24geFVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw5MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgzKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLHF0KDEsImNsci1p''@;'; put 'put ''Y29uIiw5MSksbWUoMiwic3BhbiIpLE5lKDMsIlVwbG9hZCIpLHllKCkoKX19ZnVuY3Rpb24gRVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7enIoMCksbWUoMSwiYnV0dG9uIiw4NSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgyKS5vcGVuUWIoKSl9KSxx''@;'; put 'put ''dCgyLCJjbHItaWNvbiIsODYpLG1lKDMsInNwYW4iKSxOZSg0LCJGaWx0ZXIiKSx5ZSgpKCksbWUoNSwiYnV0dG9uIiw4NykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgyKS5lZGl0VGFibGUoKSl9KSxxdCg2LCJjbHItaWNvbiIsODgpLG1lKDcsInNwYW4iKSxO''@;'; put 'put ''ZSg4LCJFZGl0IikseWUoKSgpLFFlKDkseFVlLDQsMCwiYnV0dG9uIiw4OSksWXIoKX1pZigyJmMpe2NvbnN0IGE9amUoMik7Q2UoOSksUmUoIm5nSWYiLCFhLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnKX19ZnVuY3Rpb24ga1VlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLHll''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1qZSg0KTtDZSgxKSxqYygiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250''@;'; put 'put ''YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gQVVlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsOTgpLFFlKDEsa1VlLDIsMiwic3BhbiIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5yZXN0cmlj''@;'; put 'put ''dGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBUVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTt6cigwKSxtZSgxLCJidXR0b24iLDkyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLmNhbmNlbEVkaXQoKSl9KSxxdCgyLCJjbHItaWNvbiIsOTMp''@;'; put 'put ''LG1lKDMsInNwYW4iKSxOZSg0LCJDYW5jZWwiKSx5ZSgpKCksbWUoNSwiY2xyLXRvb2x0aXAiKSg2LCJidXR0b24iLDk0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgyKTtyZXR1cm4ganQoaC5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c/IiI6aC5hZGRSb3co''@;'; put 'put ''KSl9KSxxdCg3LCJjbHItaWNvbiIsOTUpLE5lKDgsIkFkZCBSb3cgIikseWUoKSxRZSg5LEFVZSwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDk2KSx5ZSgpLG1lKDEwLCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLmNoZWNrU2F2ZSgp''@;'; put 'put ''KX0pLHF0KDExLCJjbHItaWNvbiIsOTcpLE5lKDEyLCJTdWJtaXQgIikseWUoKSxZcigpfWlmKDImYyl7Y29uc3QgYT1qZSgyKTtDZSg2KSxocigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KSxSZSgiY2xyTG9hZGluZyIsYS5hZGRpbmdOZXdSb3cp''@;'; put 'put ''fX1mdW5jdGlvbiBEVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEwMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgzKS5tYW51YWxGaWxlRWRpdE1vZGFsPSEwKX0pLHF0KDEsImNsci1pY29uIiw4OCksbWUoMiwic3BhbiIpLE5l''@;'; put 'put ''KDMsIkVkaXQiKSx5ZSgpKCl9fWZ1bmN0aW9uIElVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO3pyKDApLG1lKDEsImJ1dHRvbiIsOTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoMikuZGlzY2FyZFNvdXJjZUZpbGU9ITApfSkscXQoMiwiY2xyLWljb24i''@;'; put 'put ''LDkzKSxtZSgzLCJzcGFuIiksTmUoNCwiRGlzY2FyZCBmaWxlIikseWUoKSgpLFFlKDUsRFVlLDQsMCwiYnV0dG9uIiwxMDApLG1lKDYsImJ1dHRvbiIsMTAxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLnN1Ym1pdEV4Y2VsKCkpfSkscXQoNywiY2xyLWlj''@;'; put 'put ''b24iLDk3KSxOZSg4LCIgU3VibWl0ICIpLHllKCksWXIoKX1pZigyJmMpe2NvbnN0IGE9amUoMik7Q2UoNSksUmUoIm5nSWYiLGEuaG90VGFibGUucmVhZE9ubHkpLENlKDEpLFJlKCJjbHJMb2FkaW5nIixhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBMVWUoYyxsKXtpZigxJmMmJihtZSgw''@;'; put 'put ''LCJkaXYiLDg0KSxRZSgxLEVVZSwxMCwxLCJuZy1jb250YWluZXIiLDM1KSxRZSgyLFRVZSwxMywzLCJuZy1jb250YWluZXIiLDM1KSxRZSgzLElVZSw5LDIsIm5nLWNvbnRhaW5lciIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDEpLFJlKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRP''@;'; put 'put ''bmx5JiYhYS51cGxvYWRQcmV2aWV3KSxDZSgxKSxSZSgibmdJZiIsIWEuaG90VGFibGUucmVhZE9ubHkmJiFhLnVwbG9hZFByZXZpZXcpLENlKDEpLFJlKCJuZ0lmIixhLnVwbG9hZFByZXZpZXcpfX1mdW5jdGlvbiBSVWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDEwMykoMSwic3BhbiIp''@;'; put 'put ''LE5lKDIsIkZJTFRFUiA6ICIpLG1lKDMsImIiKSxOZSg0KSx5ZSgpKCkoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoNCksb3IoYS5xdWVyeVRleHQpfX1mdW5jdGlvbiBPVWUoYyxsKXsxJmMmJih6cigwKSxtZSgxLCJzcGFuIiwxMDYpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCksbWUoMywi''@;'; put 'put ''ZGl2IikoNCwiaDMiKSxOZSg1LCJMb2FkaW5nIHRhYmxlIikseWUoKSgpLFlyKCkpfWZ1bmN0aW9uIFBVZShjLGwpezEmYyYmKHpyKDApLG1lKDEsInNwYW4iKSxxdCgyLCJjbHItaWNvbiIsMTA3KSx5ZSgpLG1lKDMsImRpdiIpKDQsImgzIiksTmUoNSwiTG9hZGluZyB0YWJsZSBlcnJvciIp''@;'; put 'put ''LHllKCkoKSxZcigpKX1mdW5jdGlvbiBGVWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDEwNCkoMSwiZGl2IiwxMDUpLFFlKDIsT1VlLDYsMCwibmctY29udGFpbmVyIiwzNSksUWUoMyxQVWUsNiwwLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDIp''@;'; put 'put ''LFJlKCJuZ0lmIiwhYS5nZXRkYXRhRXJyb3IpLENlKDEpLFJlKCJuZ0lmIixhLmdldGRhdGFFcnJvcil9fWZ1bmN0aW9uIEhVZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoMyk7Q2UoMSksamMoIlRvIHVubG9jayBtb3JlIHRoYW4gIixh''@;'; put 'put ''LmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93Ijoicm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIE5VZShjLGwpe2lmKDEm''@;'; put 'put ''YyYmKG1lKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDExMCksUWUoMSxIVWUsMiwyLCJzcGFuIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLFJlKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIFZVZShjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1WbigpO21lKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwxMDgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCk7cmV0dXJuIGp0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUmVjb3JkQnV0dG9uQ2xpY2soKSl9KSxxdCgyLCJjbHIt''@;'; put 'put ''aWNvbiIsOTUpLE5lKDMsIiBBZGQgUmVjb3JkICIpLHllKCksUWUoNCxOVWUsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMDkpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksaHIoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1''@;'; put 'put ''bmN0aW9uIEJVZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDExMSksTmUoMSkscXQoMiwiY29udGFjdC1saW5rIikseWUoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksbXIoIiBUbyBkaXNwbGF5IG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQs''@;'; put 'put ''IiByb3dzLCBjb250YWN0ICIpfX1mdW5jdGlvbiBqVWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiwxMjMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgyKTtDZSgxKSxqYygiT25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgIiwxPT09YS5saWNl''@;'; put 'put ''bmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ/InJvdyI6InJvd3MiLCIgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiB6VWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''Vm4oKTttZSgwLCJkaXYiLDEyNCkoMSwiZGl2IiwxMjUpKDIsImxhYmVsIiwxMjYpLE5lKDMsIk1lc3NhZ2UiKSx5ZSgpLG1lKDQsInRleHRhcmVhIiwxMjcpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoMikubWVzc2FnZT1oKX0pLHllKCkoKSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1qZSgyKTtDZSg0KSxSZSgibmdNb2RlbCIsYS5tZXNzYWdlKSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKSgidmFsdWUiLGEudmFsaWRhdGlvbkRvbmU/IiI6IlBsZWFzZSB3YWl0IHdoaWxlIHdlIHZhbGlkYXRlICIrYS5jb2xzLmxlbmd0aCphLm1vZGlm''@;'; put 'put ''ZWRSb3dzSW5kZXhlcy5sZW5ndGgrIiBjZWxscy4iKX19ZnVuY3Rpb24gVVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxMTIpKDEsImRpdiIsMTEzKSgyLCJkaXYiLDExNCkoMywiZGl2IiwxMTUpKDQsImJ1dHRvbiIsMTE2KSxxdCg1LCJjbHItaWNvbiIsMTE3KSx5''@;'; put 'put ''ZSgpLG1lKDYsImgzIiwyKSxOZSg3KSx5ZSgpKCksbWUoOCwiZGl2IiwzKSxRZSg5LGpVZSwyLDIsInNwYW4iLDExOCksUWUoMTAselVlLDUsMywiZGl2IiwxMTkpLHllKCksbWUoMTEsImRpdiIsMTIwKSgxMiwiYnV0dG9uIiwxMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z''@;'; put 'put ''dCBoPWplKCk7cmV0dXJuIGp0KGguc2F2ZVRhYmxlKGguaG90VGFibGUuZGF0YSkpfSksTmUoMTMsIiBTdWJtaXQgIikseWUoKSxtZSgxNCwiYnV0dG9uIiwxMjIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCk7cmV0dXJuIGguY2FuY2VsU3VibWl0KCksaC5zdWJt''@;'; put 'put ''aXQ9ITEsanQoaC52YWxpZGF0aW9uRG9uZT0wKX0pLE5lKDE1LCIgQ2FuY2VsICIpLHllKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoKTtDZSg3KSxiMCgiIFN1Ym1pdCBmb3IgQXBwcm92YWwgKCIsYS5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQsIiBhZGRlZCwgIixhLnJvd3NDaGFuZ2Vk''@;'; put 'put ''LnJvd3NVcGRhdGVkLCIgdXBkYXRlZCwgIixhLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkLCIgZGVsZXRlZCkgIiksQ2UoMiksUmUoIm5nSWYiLGEudG90YWxSb3dzQ2hhbmdlZD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCYmYS5saWNlbmNlU3RhdGUudmFsdWUuc3Vi''@;'; put 'put ''bWl0X3Jvd3NfbGltaXQhPT1hLkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZVRydWUpLENlKDIpLFJlKCJkaXNhYmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpfX1mdW5jdGlvbiBaVWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiwxMjgpLE5lKDEpLGJhKDIsInBrU3BhY2VTZXBh''@;'; put 'put ''cmF0ZSIpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWplKCk7Q2UoMSksamMoIiBPbiByb3cgIixhKzEsIjogIixVbCgyLDIsZC5wa0ZpZWxkc1thXS5yZXBsYWNlKCJ8IiwiIikpLCIgIil9fWZ1bmN0aW9uIFlVZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiKSxOZSgxKSx5ZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksYjAoIiAiLGEuY29sLCIoIixhLmxlbiwiKSwgIixhLnZhbCwiICIpfX1mdW5jdGlvbiBXVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDEyOSkoMSwiZGl2IiwxMzApKDIsImRpdiIsMTE0KSgzLCJkaXYiLDEx''@;'; put 'put ''NSkoNCwiYnV0dG9uIiwxMTYpLHF0KDUsImNsci1pY29uIiwxMTcpLHllKCksbWUoNiwiaDMiLDIpLE5lKDcsIkVycm9yIikseWUoKSgpLG1lKDgsImRpdiIsMykoOSwicCIpLE5lKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIikseWUoKSgpLG1lKDExLCJkaXYiLDE3KSgx''@;'; put 'put ''MiwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksTmUoMTMsIiBPayAiKSx5ZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIEdVZShjLGwpezEmYyYmcXQoMCwiYXBwLXF1ZXJ5IixudWxsLDEzMSl9ZnVuY3Rpb24g''@;'; put 'put ''JFVlKGMsbCl7MSZjJiYobWUoMCwicCIsMTMyKSxOZSgxLCIgU29ycnkgdGhhdCBkaWRuJ3Qgd29yaywgdHJ5IGFnYWluLiAiKSx5ZSgpKX1jb25zdCBxVWU9ZnVuY3Rpb24oYyxsKXtyZXR1cm57bGliTmFtZTpjLHRhYmxlTmFtZTpsfX0sSXNlPWZ1bmN0aW9uKCl7cmV0dXJuWyIiLCIgIl19''@;'; put 'put ''LEtVZT1mdW5jdGlvbihjKXtyZXR1cm57aGVhZGVyQmFyRmlsdGVyOmN9fSxMc2U9Rig1MyksUnNlPUYoMzkwMDcpLkJ1ZmZlcjtsZXQgWEE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLGdlLHdlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNl''@;'; put 'put ''cnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy5yb3V0ZT1XLHRoaXMuc2FzU2VydmljZT1pZSx0aGlzLmNkZj1nZSx0aGlzLmhvdFJlZ2lzdGVyZXI9d2UsdGhpcy51cGxvYWRT''@;'; put 'put ''dGF0ZXJDb21wTGlzdD1uZXcgZWgsdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0PW5ldyBlaCx0aGlzLmhvdEluc3RhbmNlQ29tcExpc3Q9bmV3IGVoLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9bmV3IGVoLHRoaXMubWVzc2FnZT0iIix0aGlzLiRkYXRhRm9ybWF0cz1udWxsLHRoaXMu''@;'; put 'put ''Y29scz1bXSx0aGlzLnJlc3RyaWN0aW9ucz17fSx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmlld2JveGVzPSExLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxoaWRkZW46ITAsY29sdW1uczpbXSxoZWlnaHQ6''@;'; put 'put ''IjEwMCUiLG1pblNwYXJlUm93czoxLGxpY2Vuc2VLZXk6dm9pZCAwLHJlYWRPbmx5OiEwLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxzZXR0aW5nczp7Y29udGV4dE1lbnU6e2l0ZW1zOntlZGl0X3Jvdzp7bmFtZToiRWRpdCByb3ci''@;'; put 'put ''LGhpZGRlbigpe2NvbnN0IG90PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKCFvdClyZXR1cm4hMTtjb25zdCBldD1vdFswXTtyZXR1cm4gZXQuZnJvbS5yb3chPT1ldC50by5yb3d9LGNhbGxiYWNrOihaZSxvdCxldCk9PntsZXQgeXQ9b3RbMF07eXQuc3RhcnQucm93PT09eXQuZW5kLnJv''@;'; put 'put ''dyYmdGhpcy5lZGl0UmVjb3JkKG51bGwseXQuc3RhcnQucm93KX19LHJvd19hYm92ZTp7bmFtZToiSW5zZXJ0IFJvdyBhYm92ZSJ9LHJvd19iZWxvdzp7bmFtZToiSW5zZXJ0IFJvdyBiZWxvdyJ9LHJlbW92ZV9yb3c6e25hbWU6Iklnbm9yZSByb3cifSxjb3B5OntuYW1lOiJDb3B5IHdpdGhv''@;'; put 'put ''dXQgaGVhZGVycyJ9LGNvcHlfd2l0aF9jb2x1bW5faGVhZGVyczp7bmFtZToiQ29weSB3aXRoIGhlYWRlcnMifSxjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHk6e25hbWU6IkNvcHkgaGVhZGVycyBvbmx5In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSx1bmRvOntuYW1lOiJVbmRvIn0scmVkbzp7''@;'; put 'put ''bmFtZToiUmVkbyJ9fX19fSx0aGlzLmhvdENlbGxzUHJvcFJvdz1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6MCxyb3dzRGVsZXRlZDowLHJvd3NBZGRlZDowfSx0aGlz''@;'; put 'put ''Lm1vZGlmZWRSb3dzSW5kZXhlcz1bXSx0aGlzLnF1ZXJ5RXJyPSExLHRoaXMuc3VjY2Vzc0VuYWJsZT0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5wa0ZpZWxkcz1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy5iYWRFZGl0PSExLHRoaXMu''@;'; put 'put ''c2F2ZUxvYWRpbmc9ITEsdGhpcy5hcHByb3ZlcnM9W10sdGhpcy5lcnJWYWxpZGF0aW9uPSExLHRoaXMucGtOdWxsPSExLHRoaXMubm9Qa051bGw9ITEsdGhpcy50YWJsZURhdGE9W10sdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy5xdWVyeVRleHRTYXZlZD0iIix0aGlzLnNob3dBcHByb3ZlcnM9''@;'; put 'put ''ITEsdGhpcy5wa0R1cHM9ITEsdGhpcy52YWxpZGF0aW9uRG9uZT0wLHRoaXMuZHVwbGljYXRlUGtJbmRleGVzPVtdLHRoaXMuY29sdW1uSGVhZGVyPVtdLHRoaXMuc3BlY0luZm89W10sdGhpcy50b29Mb25nPSExLHRoaXMuZXhjZWVkQ2VsbHM9W10sdGhpcy51cGxvYWRlcj1uZXcgUm9lLHRo''@;'; put 'put ''aXMudXBsb2FkVXJsPSIiLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbCx0aGlzLmRhdGE9W10sdGhpcy5oZWFkZXJBcnJheT1bXSx0aGlzLmhvdERhdGFTY2hlbWE9''@;'; put 'put ''e30sdGhpcy5oZWFkZXJTaG93PVtdLHRoaXMuaGVhZGVyVmlzaWJsZT0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5oYXNBbm90aGVyRHJvcFpvbmVPdmVyPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ITEsdGhpcy5kYXRlVGlt''@;'; put 'put ''ZUhlYWRlcnM9W10sdGhpcy50aW1lSGVhZGVycz1bXSx0aGlzLmRhdGVIZWFkZXJzPVtdLHRoaXMueGxSdWxlcz1bXSx0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5oZWFkZXJDb2x1bW5zPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5maWxlUGFzc3dvcmRTdWJqZWN0PW5ldyBi''@;'; put 'put ''ZSx0aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSx0aGlzLmZpbGVQYXNzd29yZE1vZGFsPSExLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuZGlzY2FyZFNvdXJjZUZpbGU9ITEsdGhpcy5tYW51YWxGaWxlRWRpdE1vZGFsPSExLHRoaXMucmVjb3JkQWN0aW9uPW51bGwsdGhpcy5jdXJyZW50''@;'; put 'put ''RWRpdFJlY29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnM9W10sdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRkUmVjb3Jk''@;'; put 'put ''VXJsPW51bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMuc2luZ2xlUm93U2VsZWN0ZWQ9ITEsdGhpcy5hZGRpbmdOZXdSb3c9ITEsdGhpcy5nZXRkYXRhRXJyb3I9ITEsdGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0aGlzLnRhYmxl''@;'; put 'put ''RmlsZURyYWdPdmVyPSExLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W10sdGhpcy52YWxpZGF0aW9uVGFibGVMaW1pdD0yMCx0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxFWFRSQV9DT0xfTkFNRToxLERJU1BMQVlfVkFMVUU6MixESVNQTEFZ''@;'; put 'put ''X1RZUEU6MyxSQVdfVkFMVUVfTlVNOjQsUkFXX1ZBTFVFX0NIQVI6NSxGT1JDRV9GTEFHOjZ9LHRoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxESVNQTEFZX1ZBTFVFOjEsUkFXX1ZBTFVFOjJ9LHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlv''@;'; put 'put ''bk1hcD1bXSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnRpbWVzQ2xpY2tlZD0wLFp6W3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdJiZUSWUoKS5yZWdpc3Rlckxhbmd1YWdlKFp6W3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKSx0''@;'; put 'put ''aGlzLmhvdFJlZ2lzdGVyZXI9bmV3IEFnLHRoaXMucGFyc2VSZXN0cmljdGlvbnMoKSx0aGlzLnNldFJlc3RyaWN0aW9ucygpfXBhcnNlUmVzdHJpY3Rpb25zKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5hZGRSZWNv''@;'; put 'put ''cmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEZpbGVVcGxvYWQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5maWxlVXBsb2FkfXNldFJlc3Ry''@;'; put 'put ''aWN0aW9ucyhhKXthJiYodGhpcy5yZXN0cmljdGlvbnM9ey4uLnRoaXMucmVzdHJpY3Rpb25zLC4uLmF9KSx0aGlzLnJlc3RyaWN0aW9ucy5yZW1vdmVFZGl0UmVjb3JkQnV0dG9uJiZkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5lZGl0X3Jvdyx0''@;'; put 'put ''aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyYmKGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19hYm92ZSxkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYmVsb3csZGVsZXRlKHRo''@;'; put 'put ''aXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucmVtb3ZlX3Jvdyl9Y2hlY2tSb3dMaW1pdCgpe3RoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWd8fHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT0xLzAmJih0aGlzLnJlc3RyaWN0''@;'; put 'put ''aW9ucy5yZXN0cmljdEFkZFJvdz10aGlzLmRhdGFTb3VyY2U/Lmxlbmd0aD49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9cmVzZXRGaWx0ZXIoKXt0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJz''@;'; put 'put ''dC5yZXNldEZpbHRlcigpfW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiRmlsZSBVcGxvYWQiKTp0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnP3RoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkluZm9ybWF0aW9uIiwiVXBsb2FkIGZlYXR1cmUgaXMgZGlzYWJsZWQgd2hpbGUgQ29sdW1uIExldmVsIFNlY3VyaXR5IHJ1bGVzIGFyZSBhY3RpdmUiKTp0aGlzLnVwbG9hZFByZXZpZXd8fCh0aGlzLnNob3dVcGxvYWRNb2RhbD0hMCl9ZmlsZU92ZXJC''@;'; put 'put ''YXNlKGEpe3RoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj1hfXVwZGF0ZV9zaGVldF9yYW5nZShhKXt2YXIgZD17czp7cjoxLzAsYzoxLzB9LGU6e3I6MCxjOjB9fTtPYmplY3Qua2V5cyhhKS5maWx0ZXIoZnVuY3Rpb24oaCl7cmV0dXJuIiEiIT1oLmNoYXJBdCgwKX0pLm1hcChHYy51dGlscy5k''@;'; put 'put ''ZWNvZGVfY2VsbCkuZm9yRWFjaChmdW5jdGlvbihoKXtkLnMuYz1NYXRoLm1pbihkLnMuYyxoLmMpLGQucy5yPU1hdGgubWluKGQucy5yLGguciksZC5lLmM9TWF0aC5tYXgoZC5lLmMsaC5jKSxkLmUucj1NYXRoLm1heChkLmUucixoLnIpfSksYVsiIXJlZiJdPUdjLnV0aWxzLmVuY29kZV9y''@;'; put 'put ''YW5nZShkKX1nZXRSYW5nZUFuZFNoZWV0KGEpe2xldCBkPTAsaD0wLGY9LTEsXz0tMSxUPSIiLFc9ITEsaWU9W10sd2U9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLnRoaXMuaGVhZGVyQXJyYXldLm1hcChvdD0+b3QudG9Mb3dlckNhc2UoKSksRWU9d2UucmVkdWNlKChv''@;'; put 'put ''dCxldCk9PihvdFtldF09LTEsb3QpLHt9KTtyZXR1cm4gYS5TaGVldE5hbWVzLmZvckVhY2gob3Q9PntpZihXKXJldHVybjtpZT1bXSxUPW90O2NvbnN0IGV0PWEuU2hlZXRzW1RdO2lmKHRoaXMuZGF0YT1HYy51dGlscy5zaGVldF90b19qc29uKGV0LHtoZWFkZXI6MSxibGFua3Jvd3M6ITEs''@;'; put 'put ''ZGVmdmFsOiIifSksdGhpcy5kYXRhLmxlbmd0aDw9MSlyZXR1cm47bGV0IHl0PVtdO3RoaXMuaGVhZGVyQXJyYXkuZm9yRWFjaCgoKT0+eXQucHVzaCgiIikpLHRoaXMuZGF0YS5wdXNoKHl0KTtsZXQga3Q9ITE7aWYodGhpcy5kYXRhLmZvckVhY2goKFN0LFF0KT0+e2lmKCFXKWlmKGt0KXts''@;'; put 'put ''ZXQgbm49ITAsbW49ITE7d2UuZm9yRWFjaChFbj0+e2NvbnN0IGxyPUVlW0VuXTsiIiE9PVN0W2xyXSYmdm9pZCAwIT09U3RbbHJdP25uPSExOi0xIT09dGhpcy5oZWFkZXJQa3MuaW5kZXhPZihFbi50b1VwcGVyQ2FzZSgpKSYmKG1uPSEwKX0pLG5ufHxtbj8oXz1RdCxXPSEwKTotMT09PWYm''@;'; put 'put ''JihmPVF0KX1lbHNle2NvbnN0IG5uPVN0Lm1hcChFbj0+RW4udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtpZighbm4uaW5jbHVkZXMoIl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyIpKXtjb25zdCBFbj13ZS5pbmRleE9mKCJfX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18i''@;'; put 'put ''KTtFbj4tMSYmd2Uuc3BsaWNlKEVuLDEpfWt0PSEwLHdlLmZvckVhY2goRW49PnstMT09PW5uLmluZGV4T2YoRW4pJiYoa3Q9ITEpfSk7bGV0IG1uPVtdO21uPXRoaXMuZmluZFZhbGlkSGVhZGVycyhubix3ZSxRdCxUKSwhMT09PW1uWzBdPyhrdD0hMSxtblsxXS5sZW5ndGg+MCYmbW5bMV0u''@;'; put 'put ''Zm9yRWFjaChFbj0+e2llLnB1c2goRW4pfSkpOkVlPW1uWzFdfX0pLFcmJih0aGlzLnVwZGF0ZV9zaGVldF9yYW5nZShldCksZXRbIiFyZWYiXSkpe2NvbnN0IFF0PUdjLnV0aWxzLmRlY29kZV9yYW5nZShldFsiIXJlZiJdfHwiIik7ZD1RdC5zLnIsaD1RdC5zLmN9fSksLTE9PT1mJiYoVz0h''@;'; put 'put ''MSkse2ZvdW5kRGF0YTpXLHNoZWV0TmFtZTpULHN0YXJ0Um93OmYsZW5kUm93Ol8sY3N2QXJyYXlIZWFkZXJzTWFwOkVlLG1pc3NpbmdIZWFkZXJzOmllLHJhbmdlU3RhcnRSb3c6ZCxyYW5nZVN0YXJ0Q29sOmh9fXByb21wdEV4Y2VsUGFzc3dvcmQoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEs''@;'; put 'put ''ZCk9Pnt0aGlzLmZpbGVQYXNzd29yZE1vZGFsPSEwLHNldFRpbWVvdXQoKCk9Pntjb25zdCBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNmaWxlUGFzc3dvcmRJbnB1dCIpO2gmJihoLmZvY3VzKCksaC52YWx1ZT0iIil9LDEwMCksdGhpcy5maWxlUGFzc3dvcmRTdWJqZWN0LnN1YnNjcmli''@;'; put 'put ''ZShoPT57dGhpcy5maWxlVW5sb2NrRXJyb3I9ITEsYShofHx2b2lkIDApfSl9KX1nZXRGaWxlRGVzYyhhLGQ9ITEpe3ZhciBoPXRoaXM7bGV0IGY7dGhpcy5leGNlbFVwbG9hZFN0YXRlPSJMb2FkaW5nIix0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITAsZj1kP2FbMF06YS50YXJnZXQuZmlsZXNb''@;'; put 'put ''MF0sdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLmZpbGVuYW1lPSIiO2xldCBfPWYubmFtZTt0aGlzLmZpbGVuYW1lPV8sdGhpcy5hcHBlbmRVcGxvYWRTdGF0ZShgTG9hZGluZyAke199IGludG8gdGhlIGJyb3dzZXJgKTtsZXQgVz1fLnNsaWNlKF8ubGFzdEluZGV4T2YoIi4iKSsxLF8u''@;'; put 'put ''bGFzdEluZGV4T2YoIi4iKSs0KTtpZigieGxzIj09PVcudG9Mb3dlckNhc2UoKSl7bGV0IGllPW5ldyBGaWxlUmVhZGVyO2llLm9ubG9hZD1mdW5jdGlvbigpe3ZhciB3ZT1maShmdW5jdGlvbiooRWUpe2NvbnN0IFplPWgudG9Cc3RyKEVlLnRhcmdldC5yZXN1bHQpO2xldCBvdCxldD0hMTtj''@;'; put 'put ''b25zdCB5dD17dHlwZToiYmluYXJ5IixjZWxsRGF0ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITF9O3RyeXtvdD1HYy5yZWFkKFplLHsuLi55dH0pfWNhdGNoKFZyKXtpZihWci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBh''@;'; put 'put ''c3N3b3JkIikpZm9yKGV0PSEwO2V0Oyl7Y29uc3QgX2k9eWllbGQgaC5wcm9tcHRFeGNlbFBhc3N3b3JkKCk7aWYoX2kpdHJ5e290PUdjLnJlYWQoWmUsey4uLnl0LHBhc3N3b3JkOl9pfSksZXQ9ITEsaC5maWxlVW5sb2NrRXJyb3I9ITF9Y2F0Y2godWkpe2guZmlsZVVubG9ja0Vycm9yPSEw''@;'; put 'put ''LHVpLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KGV0PSExKX1lbHNlIGV0PSExfWVsc2UgaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxWcix2b2lkIDAsIkVycm9yIHJlYWRpbmcgZmlsZSIpfWlmKCFvdClyZXR1cm4gaC5leGNlbEZpbGVQ''@;'; put 'put ''YXJzaW5nPSExLHZvaWQoaC5zaG93VXBsb2FkTW9kYWw9ITEpO2xldCBrdD0hMSxTdD1bXTtjb25zdCBRdD1bIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIsLi4uaC5oZWFkZXJBcnJheV07bGV0IG5uPVF0Lm1hcChWcj0+VnIudG9Mb3dlckNhc2UoKSksbW49bm4ucmVkdWNlKChW''@;'; put 'put ''cixfaSk9PihWcltfaV09LTEsVnIpLHt9KSxFbj1bXTtjb25zdCBscj1oLmdldFJhbmdlQW5kU2hlZXQob3QpO2lmKFN0PWxyLm1pc3NpbmdIZWFkZXJzLGxyLmZvdW5kRGF0YSl7a3Q9ITAsbW49bHIuY3N2QXJyYXlIZWFkZXJzTWFwO2NvbnN0IFZyPW90LlNoZWV0c1tsci5zaGVldE5hbWVd''@;'; put 'put ''O2guYXBwZW5kVXBsb2FkU3RhdGUoYFRhYmxlIGZvdW5kIG9uIHNoZWV0ICR7bHIuc2hlZXROYW1lfSBvbiByb3cgJHtsci5zdGFydFJvd31gKTtsZXQgX2k9IiIsdWk9IiI7Zm9yKGxldCBncj1sci5zdGFydFJvdztncjxsci5lbmRSb3c7Kytncil7Y29uc3QgRWk9W107bm4uZm9yRWFjaChI''@;'; put 'put ''bj0+e2NvbnN0IFFuPUdjLnV0aWxzLmVuY29kZV9jZWxsKHtyOmxyLnJhbmdlU3RhcnRSb3crZ3IsYzpsci5yYW5nZVN0YXJ0Q29sK21uW0huXX0pO2xldCBNcjsiIj09PV9pJiYoX2k9UW4pLHVpPVFuLE1yPVZyW1FuXT9WcltRbl06e3Y6IiJ9LEVpLnB1c2goTXIpfSksRWkuZmluZChIbj0+''@;'; put 'put ''IiIhPT1Ibi52KSYmRW4ucHVzaChFaSl9aC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVGFibGUgRm91bmQiLGBTaGVldDogJHtsci5zaGVldE5hbWV9XG5SYW5nZTogJHtfaX06JHt1aX1gKX1lbHNlIFN0PWxyLm1pc3NpbmdIZWFkZXJzO2lmKFN0Lmxlbmd0aD4wKXtTdC5zb3J0KGZ1''@;'; put 'put ''bmN0aW9uKHVpLGdyKXtyZXR1cm4gdWlbMV09PT1nclsxXT8wOnVpWzFdPmdyWzFdPy0xOjF9KTtsZXQgVnI9U3QubWFwKF9pPT5faVswXSkuc2xpY2UoMCw1KS5qb2luKCJcbiIpO3JldHVybiBoLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLFZyKSxzZXRUaW1lb3V0KCgpPT57''@;'; put 'put ''aC5maWxlbmFtZT0iIn0pLGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIGgudXBsb2FkZXIucXVldWUucG9wKCl9aWYoMD09PUVuLmxlbmd0aHx8MD09PUVuWzBdLmxlbmd0aClyZXR1cm4gaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiTm8gcmVsZXZhbnQgZGF0YSBmb3Vu''@;'; put 'put ''ZCBpbiBGaWxlICEiKSxzZXRUaW1lb3V0KCgpPT57aC5maWxlbmFtZT0iIn0pLGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIGgudXBsb2FkZXIucXVldWUucG9wKCk7aWYoKGguZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wfHxoLmRhdGVIZWFkZXJzLmxlbmd0aD4wfHxoLnRpbWVIZWFkZXJz''@;'; put 'put ''Lmxlbmd0aD4wKSYmKEVuPWgudXBkYXRlRGF0ZVRpbWVDb2xzKFF0LEVuKSksaC54bFJ1bGVzLmxlbmd0aD4wJiYoRW49aC51cGRhdGVYTFJ1bGVDb2xzKFF0LEVuKSksIWt0KXtpZigwPT09U3QubGVuZ3RoKWguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIHJlbGV2YW50''@;'; put 'put ''IGRhdGEgZm91bmQgaW4gRmlsZSAhIiksc2V0VGltZW91dCgoKT0+e2guZmlsZW5hbWU9IiJ9KTtlbHNle1N0LnNvcnQoZnVuY3Rpb24odWksZ3Ipe3JldHVybiB1aVsxXT09PWdyWzFdPzA6dWlbMV0+Z3JbMV0/LTE6MX0pO2xldCBWcj1TdC5tYXAoX2k9Pl9pWzBdKS5zbGljZSgwLDUpLmpv''@;'; put 'put ''aW4oIlxuIik7aC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxWcil9cmV0dXJuIGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIGgudXBsb2FkZXIucXVldWUucG9wKCl9e2guaGVhZGVyU2hvdz1RdCxFbj1Fbi5tYXAoX2k9Pl9pLm1hcCh1aT0+Im4iPT09dWkudD91aS52OnVp''@;'; put 'put ''LncpKSxFbj1Fbi5tYXAoX2k9Pl9pLm1hcCgodWksZ3IpPT57IXVpJiYwIT09dWkmJih1aT0iIiksaXNOYU4odWkpJiYodWk9dWkucmVwbGFjZSgvIi9nLCciIicpKS5zZWFyY2goLywvZyk+LTEmJih1aT0nIicrdWkrJyInKTtjb25zdCBFaT1oLmhlYWRlclNob3dbZ3JdO3JldHVybiJudW1l''@;'; put 'put ''cmljIj09PWguZGNWYWxpZGF0b3I/LmdldFJ1bGUoRWkpPy50eXBlJiYoMCx0My5pc1NwZWNpYWxNaXNzaW5nKSh1aSkmJiF1aS5pbmNsdWRlcygiLiIpJiYodWk9Ii4iK3VpKSx1aX0pKSxoLmRhdGE9RW47bGV0IFZyPVF0LmpvaW4oIiwiKSsiXG4iO2lmKFZyKz1Fbi5zbGljZSgwLGgubGlj''@;'; put 'put ''ZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KS5tYXAoX2k9Pl9pLmpvaW4oIiwiKSkuam9pbigiXG4iKSwiV0xBVElOMSI9PT1oLmVuY29kaW5nKXtsZXQgX2k9THNlLmRlY29kZShSc2UuZnJvbShWciksIkNQLTEyNTIiKSx1aT1uZXcgQmxvYihbX2ldLHt0eXBlOiJhcHBsaWNh''@;'; put 'put ''dGlvbi9jc3YifSksZ3I9aC5ibG9iVG9GaWxlKHVpLGguZmlsZW5hbWUrIi5jc3YiKTtoLnVwbG9hZGVyLmFkZFRvUXVldWUoW2dyXSl9ZWxzZXtsZXQgX2k9bmV3IEJsb2IoW1ZyXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pLHVpPWguYmxvYlRvRmlsZShfaSxoLmZpbGVuYW1lKyIuY3N2''@;'; put 'put ''Iik7aC51cGxvYWRlci5hZGRUb1F1ZXVlKFt1aV0pfWguZXhjZWxGaWxlUmVhZHk9ITB9aWYoMD09PWguZGF0YS5sZW5ndGgpcmV0dXJuIGguc2hvd1VwbG9hZE1vZGFsPSExLGgudXBsb2FkUHJldmlldz0hMSxoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLmV2ZW50U2VydmljZS5zaG93''@;'; put 'put ''QWJvcnRNb2RhbChudWxsLCJUYWJsZSBpbiB0aGUgZmlsZSBpcyBlbXB0eS4gRGF0YSBmb3VuZCBvbiBzaGVldDogIik7aC5leGNlbEZpbGVSZWFkeT0hMCxoLmdldFBlbmRpbmdFeGNlbFByZXZpZXcoKX0pO3JldHVybiBmdW5jdGlvbihFZSl7cmV0dXJuIHdlLmFwcGx5KHRoaXMsYXJndW1l''@;'; put 'put ''bnRzKX19KCksaWUucmVhZEFzQXJyYXlCdWZmZXIoZil9ZWxzZSBpZigiY3N2Ij09PVcudG9Mb3dlckNhc2UoKSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT0xLzApcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIs''@;'; put 'put ''IkV4Y2VsIGZpbGVzIG9ubHkuIFRvIHVubG9jayBDU1YgdXBsb2FkcywgcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQgdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKTtp''@;'; put 'put ''ZigiV0xBVElOMSI9PT10aGlzLmVuY29kaW5nKXtsZXQgaWU9bmV3IEZpbGVSZWFkZXI7aWUub25sb2FkPXdlPT57bGV0IEVlPUxzZS5kZWNvZGUoUnNlLmZyb20od2UudGFyZ2V0LnJlc3VsdCksIkNQLTEyNTIiKSxaZT1uZXcgQmxvYihbRWVdLHt0eXBlOld9KSxvdD10aGlzLmJsb2JUb0Zp''@;'; put 'put ''bGUoWmUsdGhpcy5maWxlbmFtZSk7dGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlzLnVwbG9hZGVyLmFkZFRvUXVldWUoW290XSksdGhpcy5leGNlbEZpbGVSZWFkeT0hMH0sdGhpcy5leGNlbEZpbGVSZWFkeT0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsaWUucmVhZEFzQXJyYXlC''@;'; put 'put ''dWZmZXIoZiksdGhpcy5nZXRGaWxlKCl9ZWxzZSB0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmdldEZpbGUoKX1lbHNlIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsJ0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK3RoaXMu''@;'; put 'put ''ZmlsZW5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGNzdiBvciBleGNlbCBmaWxlLicpLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMudXBsb2FkZXIucXVldWUucG9wKCl9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5z''@;'; put 'put ''dWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLmdldEZpbGUoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfWdldEZpbGUoKXtpZih0aGlzLmNoZWNrSW52YWxpZCgpKXJldHVybiB2b2lkIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFy''@;'; put 'put ''ZSBwcmVzZW50LiIpO2lmKHRoaXMudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIHRoaXMucGtEdXBzPSEwLHZvaWQodGhpcy5zdWJtaXQ9ITEpO3RoaXMucGtEdXBzPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMDtsZXQgYT1b''@;'; put 'put ''XTtmb3IoY29uc3QgZCBvZiB0aGlzLnVwbG9hZGVyLnF1ZXVlKWEucHVzaCh7ZmlsZTpkLGZpbGVOYW1lOmQubmFtZX0pO3RoaXMuc2FzU2VydmljZS51cGxvYWRGaWxlKHRoaXMudXBsb2FkVXJsLGEse3RhYmxlOnRoaXMubGliZHN9KS50aGVuKGQ9PntpZih0eXBlb2YgZC5zYXNqc0Fib3J0''@;'; put 'put ''PiJ1Iil7aWYodHlwZW9mIGQuc2FzcGFyYW1zPiJ1IilyZXR1cm47e3RoaXMudXBsb2FkTG9hZGluZz0hMTtsZXQgaD1kLnNhc3BhcmFtc1swXTt0aGlzLnN1Y2Nlc3NFbmFibGU9ITAsdGhpcy50YWJsZUlkPWguRFNJRCx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIit0aGlz''@;'; put 'put ''LnRhYmxlSWQpfX1lbHNle2NvbnN0IGg9ZCxmPWguc2FzanNBYm9ydFswXS5NU0csXz1oLnNhc2pzQWJvcnRbMF0uTUFDO3RoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1''@;'; put 'put ''dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIiIsZix7U1lTV0FSTklOR1RFWFQ6aC5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6aC5TWVNFUlJPUlRFWFQsTUFD''@;'; put 'put ''Ol99KX19LGQ9Pnt0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmV2ZW50U2Vy''@;'; put 'put ''dmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImZpbGUgdXBsb2FkIixkKX0pfWdldFBlbmRpbmdFeGNlbFByZXZpZXcoKXt0aGlzLnF1ZXJ5VGV4dFNhdmVkPXRoaXMucXVlcnlUZXh0LHRoaXMucXVlcnlUZXh0PSIiLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iUGFyc2luZyIsdGhpcy50b2dnbGVI''@;'; put 'put ''b3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSk7bGV0IGE9W107dGhpcy5kYXRhLm1hcChoPT57bGV0IGY9e307dGhpcy5oZWFkZXJTaG93Lm1hcCgoXyxUKT0+e2ZbX109aFtUXX0pLGYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19ffHwoZi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JE''@;'; put 'put ''X19fX189Ik5vIiksYS5wdXNoKGYpfSksdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSx0aGlzLmRhdGFTb3VyY2U9YSx0aGlzLmhvdFRhYmxlLmRhdGE9YTtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5l''@;'; put 'put ''eGNlbFVwbG9hZFN0YXRlPSJWYWxpZGF0aW5nLUhPVCIsZC51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsbWF4Um93czoxLzB9LCExKSxkLnJlbmRlcigpLHRoaXMuYXBwZW5kVXBsb2FkU3RhdGUoIlZhbGlkYXRpbmcgcm93cyIpLGQudmFsaWRhdGVDZWxscygoKT0+e3Ro''@;'; put 'put ''aXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMudXBsb2FkUHJldmlldz0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9hZFN0YXRlPW51bGx9KX1kaXNjYXJkUGVuZGluZ0V4Y2VsKGEpe3RoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe21heFJvd3M6dGhp''@;'; put 'put ''cy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZH0pLGEmJnRoaXMuY2FuY2VsRWRpdCgpLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMu''@;'; put 'put ''dXBsb2FkUHJldmlldz0hMSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkZXIucXVldWU9W10saXNOYU4ocGFyc2VJbnQodGhpcy5yb3V0ZXIudXJsLnNwbGl0KCIvIikucG9wKCl8fCIiKSl8fHRoaXMucXVlcnlUZXh0U2F2ZWQubGVuZ3RoPjAmJih0aGlzLnF1ZXJ5VGV4dD10''@;'; put 'put ''aGlzLnF1ZXJ5VGV4dFNhdmVkLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIpfXByZXZpZXdUYWJsZUVkaXRDb25maXJtKCl7dGhpcy5kaXNjYXJkUGVuZGluZ0V4Y2VsKCksdGhpcy5jb252ZXJ0VG9Db3JyZWN0VHlwZXModGhpcy5kYXRhU291cmNlKSx0aGlzLmVkaXRUYWJsZSghMCl9YXBwZW5k''@;'; put 'put ''VXBsb2FkU3RhdGUoYSxkPSExKXt0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdCYmKGQ/dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5yZXBsYWNlTGFzdFN0YXRlKGEpOnRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3Qu''@;'; put 'put ''YXBwZW5kU3RhdGUoYSkpfWZpbmRWYWxpZEhlYWRlcnMoYSxkLGgsZil7bGV0IF89ITEsVD1bXSxXPTA7Zm9yKDtXPGEubGVuZ3RoOyl7aWYoIV8mJi0xIT09ZC5pbmRleE9mKGFbV10pKXtsZXQgaWUsZ2U9MCx3ZT0wLEVlPTAsWmU9W10sb3Q9ITE7Zm9yKGxldCBrdD1XO2t0PGEubGVuZ3Ro''@;'; put 'put ''O2t0Kyspe2lmKCIiPT09YVtrdF18fC0xIT09WmUuaW5kZXhPZihhW2t0XSkmJnRoaXMuaXNDb2xIZWFkZXIoYVtrdF0pKXsiIj09PWFba3RdJiYob3Q9ITApLGllPWt0O2JyZWFrfVplLnB1c2goYVtrdF0pfWxldCBldD1bXTt2b2lkIDAhPT1pZT8oZXQ9YS5zbGljZShXLGllKSxFZT1XLHdl''@;'; put 'put ''PWllLG90PyhnZT1XLFc9aWUpOihnZT1XLFc9aWUtMSkpOihldD1hLnNsaWNlKFcpLGdlPVcsRWU9Vyx3ZT1hLmxlbmd0aCxXPWEubGVuZ3RoKTtsZXQgeXQ9ITA7aWYoZC5mb3JFYWNoKGt0PT57LTE9PT1ldC5pbmRleE9mKGt0KSYmKHl0PSExKX0pLHl0KXtfPSEwO2xldCBTdD1kLnJlZHVj''@;'; put 'put ''ZShmdW5jdGlvbihubixtbil7cmV0dXJuIG5uW21uXT0tMSxubn0se30pLFF0PWEuc2xpY2UoZ2Usd2UpO3JldHVybiBkLmZvckVhY2gobm49PntTdFtubl09UXQuaW5kZXhPZihubikrZ2V9KSxbITAsU3RdfXtsZXQga3Q9JE5lKGV0LGQpO1QucHVzaChbIjxiPlRBQigiK2YrIik8L2I+IC0g''@;'; put 'put ''IitrdFsxXS5qb2luKCIsIikrIiAoIG1pc3NpbmcgIitrdFswXS5qb2luKCIsIikrIiApIixrdFsxXS5sZW5ndGhdKX19VysrfXJldHVyblshMSxUXX1pc0NvbFBrKGEpe3JldHVybiB0aGlzLmhlYWRlclBrcy5pbmRleE9mKGEpPi0xfWlzUmVhZG9ubHlDb2woYSl7cmV0dXJuIHRoaXMuZGNW''@;'; put 'put ''YWxpZGF0b3I/LmdldFJ1bGUoYSk/LnJlYWRPbmx5fWlzQ29sSGVhZGVyKGEpe3JldHVybiB0aGlzLmhlYWRlckFycmF5LmluZGV4T2YoYS50b1VwcGVyQ2FzZSgpKT4tMX1yZW1vdmVRdWVyeSgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZUNsYXVzZSgpfXVwZGF0ZURhdGVUaW1lQ29s''@;'; put 'put ''cyhhLGQpe2lmKHRoaXMuZGF0ZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO3RoaXMuZGF0ZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1hLmluZGV4T2YoZikmJmgucHVzaChhLmluZGV4T2YoZikpfSksZC5mb3JFYWNoKGY9PntoLmZvckVhY2goXz0+e2NvbnN0IFQ9ZltfXTtpZigkeihU''@;'; put 'put ''LnYpKXtjb25zdCBXPVd6KE51bWJlcihULnYpKTtULnY9Vy5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhXLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitXLmdldERhdGUoKSkuc2xpY2UoLTIpfWVsc2UgaWYoVCYmVC52JiYtMT09PVQudi50b1N0cmluZygpLmluZGV4T2YoIjoi''@;'; put 'put ''KSl7Y29uc3QgVz1uZXcgRGF0ZShULnYpOyJJbnZhbGlkIERhdGUiIT09Vy50b1VUQ1N0cmluZygpJiYoVC52PVl6KFcpKX1mW19dPVR9KX0pfWlmKHRoaXMudGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO3RoaXMudGltZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1hLmluZGV4T2Yo''@;'; put 'put ''ZikmJmgucHVzaChhLmluZGV4T2YoZikpfSksZC5mb3JFYWNoKGY9PntoLmZvckVhY2goXz0+e2NvbnN0IFQ9ZltfXTtpZigkeihULnYpfHxGb2UoVC52KXx8VC52LmluY2x1ZGVzKCJFLSIpKXtjb25zdCBXPVd6KE51bWJlcihULnYpKTtULnY9UG9lKFcpfWZbX109VH0pfSl9aWYodGhpcy5k''@;'; put 'put ''YXRlVGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO3RoaXMuZGF0ZVRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYpJiZoLnB1c2goYS5pbmRleE9mKGYpKX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKF89Pntjb25zdCBUPWZbX107aWYoJHooVC52KXx8Rm9l''@;'; put 'put ''KFQudikpe2xldCBXPVd6KE51bWJlcihULnYpKTtULnY9WXooVykrIiAiK1BvZShXKX1lbHNle2lmKC0xPT09VC52LmluZGV4T2YoIiAiKSYmLTEhPT1ULnYuaW5kZXhPZigiOiIpKXtsZXQgaWU9VC52LnN1YnN0cmluZygwLFQudi5pbmRleE9mKCI6IikpO2llPWllKyIgIitULnYuc3Vic3Ry''@;'; put 'put ''aW5nKFQudi5pbmRleE9mKCI6IikrMSksVC52PWllfWxldCBXPW5ldyBEYXRlKFQudik7IkludmFsaWQgRGF0ZSIhPT1XLnRvVVRDU3RyaW5nKCkmJihULnY9WXooVykrIiAiKyhjPT57bGV0IGw9KCIwIitjLmdldEhvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGw9bCsoIjAiK2MuZ2V0''@;'; put 'put ''TWludXRlcygpKS5zbGljZSgtMikrIjoiLGwrPSgiMCIrYy5nZXRTZWNvbmRzKCkpLnNsaWNlKC0yKSxsfSkoVykpfWZbX109VH0pfSl9cmV0dXJuIGR9dXBkYXRlWExSdWxlQ29scyhhLGQpe2lmKHRoaXMueGxSdWxlcy5sZW5ndGg+MCl7Y29uc3QgaD1bXTt0aGlzLnhsUnVsZXMuZm9yRWFj''@;'; put 'put ''aChmPT57LTEhPT1hLmluZGV4T2YoZi5YTF9DT0xVTU4pJiYoZi5pbmRleD1hLmluZGV4T2YoZi5YTF9DT0xVTU4pLGgucHVzaChmKSl9KSxkLmZvckVhY2goZj0+e2guZm9yRWFjaChfPT57Y29uc3QgVD1mW18uaW5kZXhdOyJGT1JNVUxBIj09PV8uWExfUlVMRSYmImYiaW4gVCYmKCJuIj09''@;'; put 'put ''PVQudD9ULnY9Ij0iK1QuZjpULnc9Ij0iK1QuZiksZltfXT1UfSl9KX1yZXR1cm4gZH1ibG9iVG9GaWxlKGEsZCl7Y29uc3QgaD1hO3JldHVybiBoLmxhc3RNb2RpZmllZERhdGU9bmV3IERhdGUsaC5uYW1lPWQsaH10b0JzdHIoYSl7bGV0IGQ9bmV3IFVpbnQ4QXJyYXkoYSksaD0iIixmPWQu''@;'; put 'put ''Ynl0ZUxlbmd0aDtmb3IobGV0IF89MDtfPGY7XysrKWgrPVN0cmluZy5mcm9tQ2hhckNvZGUoZFtfXSk7cmV0dXJuIGh9c2VuZENsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXSxoPVtdO2lmKHR5cGVvZiBhLmNsYXVz''@;'; put 'put ''ZXM+InUiKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tsZXQgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4oImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbSkm''@;'; put 'put ''JihHbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sR24uZWRpdG9yLmZpbHRlci5xdWVyeT1bXSxHbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0p''@;'; put 'put ''O2ZvcihsZXQgXz0wO188Zi5sZW5ndGg7XysrKXtjb25zdCBUPWZbX10uZWxlbWVudHM7ZD1ULmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4gbnVsbD09PVcudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKFQpfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQo''@;'; put 'put ''YS5zdWJtaXRMb2FkaW5nPSExKTt0cnl7aWYodm9pZCAwIT09YS5jbGF1c2VzJiZhLmxpYmRzKXtjb25zdCBmPXtncm91cExvZ2ljOmEuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goVD0+e2NvbnN0IFc9e2ZpbHRlckNsYXVz''@;'; put 'put ''ZXM6W119O1QuZWxlbWVudHMuZm9yRWFjaChpZT0+e1cuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaWUpKX0pLFcuY2xhdXNlTG9naWM9VC5jbGF1c2VMb2dpYyxmLmZpbHRlckdyb3Vwcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVykpfSk7''@;'; put 'put ''Y29uc3QgXz1hLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGYpO3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLF8pLnRoZW4oVD0+e2EucXVlcnlGaWx0ZXI9e2lkOlQucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpULnJlc3VsdFswXS5G''@;'; put 'put ''SUxURVJfVEFCTEV9LGEucm91dGVyLm5hdmlnYXRlKFsiLyJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+YS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZp''@;'; put 'put ''bHRlci5pZF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pKSxhLmZpbHRlcj0hMX0pLmNhdGNoKFQ9PnthLnN1Ym1pdExvYWRpbmc9ITF9KX19Y2F0Y2goZil7YS5xdWVyeUVycj0hMCxhLnN1Ym1pdExvYWRpbmc9ITEsYS5xdWVyeUVyck1lc3NhZ2U9Zn19KSgpfW9wZW5RYigp''@;'; put 'put ''e3RoaXMubGliZHMmJih0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliZHMsdGhpcy5jb2xzKSl9ZWRpdFRhYmxlKGEsZCl7dGhpcy50b2dnbGVI''@;'; put 'put ''b3RQbHVnaW4oImNvbnRleHRNZW51IiwhMCk7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2xldCBmPWguZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxfPWYuZ2V0U29ydENvbmZpZygpLFQ9QXJyYXkuaXNBcnJheShfKT9fOltfXTtzZXRUaW1lb3V0KCgpPT57YXx8KHRoaXMuZGF0''@;'; put 'put ''YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksZCYmdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLnBvcCgpKSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSExLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsaC51cGRh''@;'; put 'put ''dGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seX0sITEpLGgucmVuZGVyKCk7Zm9yKGxldCBXIG9mIFQpZi5zb3J0KFcpO3RoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSwwKX1jb252ZXJ0VG9Db3JyZWN0VHlwZXMoYSl7Zm9yKGxldCBkIG9mIGEpZm9y''@;'; put 'put ''KGxldCBoIGluIGQpe2xldCBmPXRoaXMuY29scy5maW5kKF89Pl8uTkFNRT09PWgpO2YmJiIiIT09ZFtoXSYmIm51bSI9PT1mLlRZUEUmJiFmLkREVFlQRS5pbmNsdWRlcygiVElNRSIpJiYhZi5ERFRZUEUuaW5jbHVkZXMoIkRBVEUiKSYmKGRbaF09cGFyc2VJbnQoZFtoXSkpfX1jYW5jZWxF''@;'; put 'put ''ZGl0KCl7dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7bGV0IGQ9YS5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGg9ZC5nZXRTb3J0Q29uZmlnKCksZj1BcnJh''@;'; put 'put ''eS5pc0FycmF5KGgpP2g6W2hdO3RoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCYmKHRoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCkpLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsdGhpcy5ob3RUYWJs''@;'; put 'put ''ZS5yZWFkT25seT0hMCxhLnVwZGF0ZVNldHRpbmdzKHtyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGRhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpO2ZvcihsZXQgXyBvZiBmKWQuc29ydChfKTt0aGlzLmNoZWNr''@;'; put 'put ''Um93TGltaXQoKX1ob3RDbGlja2VkKCl7MT09PXRoaXMudGltZXNDbGlja2VkJiZ0aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmVkaXRUYWJsZSgpLDA9PT10aGlzLnRpbWVzQ2xpY2tlZCYmKHRoaXMudGltZXNDbGlja2VkKyssc2V0VGltZW91dCgoKT0+e3RoaXMudGltZXNDbGlja2Vk''@;'; put 'put ''PTB9LDIwMCkpfWNsZWFuRXhjZWVkKCl7dGhpcy5leGNlZWRDZWxscz1bXX1hcHByb3ZlcnNUb2dnbGUoKXt0aGlzLnNob3dBcHByb3ZlcnM9IXRoaXMuc2hvd0FwcHJvdmVyc31hZGRSb3coKXt0aGlzLmFkZGluZ05ld1Jvdz0hMCxzZXRUaW1lb3V0KCgpPT57Y29uc3QgYT10aGlzLmhvdElu''@;'; put 'put ''c3RhbmNlO2xldCBkPXRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7YS5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsZCwxKSxhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEuc2VsZWN0Q2VsbCh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsMCksYS5yZW5kZXIoKSx0''@;'; put 'put ''aGlzLmRhdGFTb3VyY2VbZF0mJih0aGlzLmRhdGFTb3VyY2VbZF0ubm9MaW5rT3B0aW9uPSEwKSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0pfWNhbmNlbFN1Ym1pdCgpe3RoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVl''@;'; put 'put ''cENsb25lKHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdCksdGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PVtdLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2U7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNl''@;'; put 'put ''LGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihkLGgpe3JldHVybiAwPT09aD82MDpkPjUwMD81MDA6ZH19LCExKSxhLnNlbGVjdENlbGwoMCwwKSxhLnJlbmRlcigpLGEudmFsaWRhdGVSb3dz''@;'; put 'put ''KHRoaXMubW9kaWZlZFJvd3NJbmRleGVzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX1nZXRSb3dzU3VibWl0dGluZ0NvdW50KCl7dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuZGVidWcmJih0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNvdXJjZSks''@;'; put 'put ''dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKTtsZXQgYT0wLGQ9MCxoPTA7dGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5kYXRhTW9kaWZpZWQ9W107Zm9yKGxldCBmPTA7Zjx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2YrKyl7bGV0IF89dGhp''@;'; put 'put ''cy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZl0pO2lmKCJZZXMiPT09Xy5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18pdGhpcy5kYXRhTW9kaWZpZWQucHVzaChfKSxkKys7ZWxzZXtsZXQgVD10aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQuZmluZChXPT57''@;'; put 'put ''Zm9yKGxldCBpZSBvZiB0aGlzLmhlYWRlclBrcylpZihXW2llXSE9PV9baWVdKXJldHVybiExO3JldHVybiEwfSk7VD9KU09OLnN0cmluZ2lmeShfKSE9PUpTT04uc3RyaW5naWZ5KFQpJiYodGhpcy5kYXRhTW9kaWZpZWQucHVzaChfKSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNoKGYp''@;'; put 'put ''LGErKyk6KHRoaXMuZGF0YU1vZGlmaWVkLnB1c2goXyksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxoKyspfX10aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDphLHJvd3NEZWxldGVkOmQscm93c0FkZGVkOmh9fXZhbGlkYXRlUHJpbWFyeUtleXMoKXtjb25zdCBhPXRoaXMu''@;'; put 'put ''aG90SW5zdGFuY2U7bGV0IGQ9YS5nZXREYXRhKCk7dGhpcy5wa0ZpZWxkcz1bXTtmb3IobGV0IFQ9MDtUPGQubGVuZ3RoO1QrKyl7bGV0IFc9IiI7Zm9yKGxldCBpZT0xO2llPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtpZSsrKVc9VysifCIrZFtUXVtpZV07dGhpcy5wa0ZpZWxkcy5wdXNoKFcp''@;'; put 'put ''fWxldCBfLGg9W10sZj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2ZvcihsZXQgVD0wO1Q8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7VCsrKWZvcihsZXQgVz0wO1c8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7VysrKXRoaXMucGtGaWVsZHNbVF09PT10aGlzLnBrRmllbGRzW1ddJiZXIT09VCYmaC5wdXNo''@;'; put 'put ''KFcpO2lmKHRoaXMucGtGaWVsZHMubGVuZ3RoPmYpZm9yKGxldCBUPWY7VDx0aGlzLnBrRmllbGRzLmxlbmd0aDtUKyspZm9yKGxldCBXPWY7Vzx0aGlzLnBrRmllbGRzLmxlbmd0aDtXKyspVDxXJiZ0aGlzLnBrRmllbGRzW1RdPT09dGhpcy5wa0ZpZWxkc1tXXSYmaC5wdXNoKFcpO2Zvcihs''@;'; put 'put ''ZXQgVD0wO1Q8aC5sZW5ndGg7VCsrKWZvcihsZXQgVz0xO1c8dGhpcy5yZWFkT25seUZpZWxkcysxO1crKylfPWEuZ2V0Q2VsbE1ldGEoaFtUXSxXKSxfLnZhbGlkPSExLF8uZHVwS2V5PSEwLGEucmVuZGVyKCk7dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9Wy4uLm5ldyBTZXQoaC5zb3J0KCkp''@;'; put 'put ''XX1yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKGE9ITEsZCl7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2ZvcihsZXQgZiBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCBfPWYudmFsdWVzLm1hcChUPT5UW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSk7''@;'; put 'put ''aC5iYXRjaCgoKT0+e2NvbnN0IFQ9aC5nZXRDZWxsTWV0YShmLnJvdyxmLmNvbCksVz10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKFQuZGF0YXx8IiIpO2xldCBpZTtXJiYoaWU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShXKSksaWV8fChpZT1bXSk7Y29uc3QgZ2U9''@;'; put 'put ''Wy4uLm5ldyBTZXQoWy4uLmllLC4uLl9dKV07dGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShmLmNvbCx7c291cmNlOmdlfSksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic291cmNlIixnZSksZi52YWx1ZXMubGVuZ3RoPjAmJihoLnNldENlbGxNZXRhKGYu''@;'; put 'put ''cm93LGYuY29sLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsImVkaXRvciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInN0cmljdCIsZi5zdHJpY3QpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsImZpbHRl''@;'; put 'put ''ciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5jb2wse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlIixzdHJpY3Q6Zi5zdHJpY3QsZmlsdGVyOiExfSkpLHRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9u''@;'; put 'put ''VmFsdWVzKGYsdm9pZCAwLGEsZCksaC5yZW5kZXIoKX0pfX1yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoYSxkLGg9ITEsZil7aWYoYSl7ZHx8KGQ9YS5yb3cpO2NvbnN0IFQ9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKGEpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1''@;'; put 'put ''ZXNUb0NlbGxzKGEsZCxULGgsZil9ZWxzZSBmb3IobGV0IFQgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgVz10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoVCk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoVCxULnJvdyxXLGgsZil9fXNldEV4dGVu''@;'; put 'put ''ZGVkVmFsdWVzVG9DZWxscyhhLGQsaCxmPSExLF8pe2NvbnN0IFQ9dGhpcy5ob3RJbnN0YW5jZTtsZXQgVz1bXTtmb3IobGV0IGllIG9mIGgpVy5pbmRleE9mKGllLkVYVFJBX0NPTF9OQU1FKTwwJiZXLnB1c2goaWUuRVhUUkFfQ09MX05BTUUpO2ZvcihsZXQgaWUgb2YgVyl7Y29uc3QgZ2U9''@;'; put 'put ''aC5maWx0ZXIoU3Q9PlN0LkVYVFJBX0NPTF9OQU1FPT09aWUpO2xldCB3ZT1nZS5tYXAoU3Q9PiJDIj09PVN0LkRJU1BMQVlfVFlQRT9TdC5SQVdfVkFMVUVfQ0hBUjpTdC5SQVdfVkFMVUVfTlVNKTtjb25zdCBFZT1ULnByb3BUb0NvbChpZSk7dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0Nl''@;'; put 'put ''bGxWYWxpZGF0aW9uTWFwLmZpbmQoU3Q9PlN0LnJvdz09PWQmJlN0LmNvbD09PUVlKXx8dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLnB1c2goe3JvdzpkLGNvbDpFZSxhY3RpdmU6ITF9KSxULnNldENlbGxNZXRhKGQsRWUsInJlbmRlcmVyIiwiYXV0b2NvbXBs''@;'; put 'put ''ZXRlIiksVC5zZXRDZWxsTWV0YShkLEVlLCJlZGl0b3IiLCJhdXRvY29tcGxldGUiKSxULnNldENlbGxNZXRhKGQsRWUsInN0cmljdCIsYS5zdHJpY3QpLFQuc2V0Q2VsbE1ldGEoZCxFZSwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShF''@;'; put 'put ''ZSx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUiLHN0cmljdDphLnN0cmljdCxmaWx0ZXI6ITF9KTtjb25zdCBvdD1ULmdldENlbGxNZXRhKGQsRWUpLGV0PXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUob3QuZGF0YXx8IiIpO2xldCB5dDtldCYmKHl0PXRo''@;'; put 'put ''aXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UoZXQpKSx5dHx8KHl0PVtdKSwibnVtZXJpYyI9PT1ldD8udHlwZT8oeXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh5dCwibnVtYmVyIiksd2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZh''@;'; put 'put ''bHVlcyh3ZSwibnVtYmVyIikpOih5dD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHl0LCJzdHJpbmciKSx3ZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHdlLCJzdHJpbmciKSk7Y29uc3Qga3Q9Wy4uLm5ldyBTZXQoWy4uLnl0LC4uLndlXSld''@;'; put 'put ''O2lmKFQuc2V0Q2VsbE1ldGEoZCxFZSwic291cmNlIixrdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShFZSx7c291cmNlOmt0fSksZil7aWYoXyYmXyE9PWQpcmV0dXJuO2NvbnN0IFN0PWdlLmZpbmQoUXQ9PjE9PT1RdC5GT1JDRV9GTEFHKTtTdCYmc2V0''@;'; put 'put ''VGltZW91dCgoKT0+e1Quc2V0RGF0YUF0Q2VsbChkLEVlLCJDIj09PVN0LkRJU1BMQVlfVFlQRT9TdC5SQVdfVkFMVUVfQ0hBUjpTdC5SQVdfVkFMVUVfTlVNLCJmb3JjZV9jZWxsX3ZhbGlkYXRpb25fdmFsdWUiKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9PT1kJiYodGhpcy5kYXRh''@;'; put 'put ''U291cmNlW3RoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleF1baWVdPSJDIj09PVN0LkRJU1BMQVlfVFlQRT9TdC5SQVdfVkFMVUVfQ0hBUjpTdC5SQVdfVkFMVUVfTlVNKX0pfX19Z2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhLGQpe2NvbnN0IGY9dGhpcy5ob3RJbnN0YW5jZS5nZXRE''@;'; put 'put ''YXRhQXRDZWxsKGR8fGEucm93LGEuY29sKSxfPShhLnZhbHVlcy5maW5kKGdlPT5nZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV09PT1mKXx8W10pW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuRElTUExBWV9JTkRFWF0sVD1hLmV4dGVuZGVkX3ZhbHVlcz8uZmlsdGVy''@;'; put 'put ''KGdlPT5nZVswXT09PV8pLFc9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHMpLGllPVtdO2ZvcihsZXQgZ2Ugb2YgVHx8W10pe2xldCB3ZT17fTtmb3IobGV0IEVlIG9mIE9iamVjdC5rZXlzKFcpKXdlW0VlXT1nZVtXW0VlXV07''@;'; put 'put ''aWUucHVzaCh3ZSl9cmV0dXJuIGllfWNoZWNrU2F2ZSgpe2lmKHRoaXMuZ2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpLDA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c1VwZGF0ZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVk''@;'; put 'put ''KXJldHVybiB0aGlzLmJhZEVkaXRUaXRsZT0iTm8gY2hhbmdlcyB0byBzdWJtaXQiLHRoaXMuYmFkRWRpdENhdXNlPSJQbGVhc2UgbW9kaWZ5IHNvbWUgdmFsdWVzIGFuZCB0cnkgYWdhaW4uIix2b2lkKHRoaXMuYmFkRWRpdD0hMCk7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO3RoaXMuZGF0''@;'; put 'put ''YVNvdXJjZUJlZm9yZVN1Ym1pdD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSk7Zm9yKGxldCBoPTA7aDx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2grKylkZWxldGUgdGhpcy5kYXRhU291cmNlW2hdLm5vTGlua09wdGlvbjthLnVwZGF0ZVNldHRpbmdzKHtk''@;'; put 'put ''YXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oaCxmKXtyZXR1cm4gaD41MDA/NTAwOmh9fSwhMSksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCks''@;'; put 'put ''Yy5jbnQ9MCxjLm5vblBrQ250PTA7bGV0IGQ9YS5nZXREYXRhKCk7aWYoZC5sZW5ndGg+MSYmYS5pc0VtcHR5Um93KGQubGVuZ3RoLTEpJiZhLmFsdGVyKCJyZW1vdmVfcm93IixkLmxlbmd0aC0xKSx0aGlzLnZhbGlkYXRlUHJpbWFyeUtleXMoKSwwIT09dGhpcy5kdXBsaWNhdGVQa0luZGV4''@;'; put 'put ''ZXMubGVuZ3RoKXJldHVybiB0aGlzLnBrRHVwcz0hMCx0aGlzLnN1Ym1pdD0hMSx2b2lkIHRoaXMuY2FuY2VsU3VibWl0KCk7dGhpcy5wa0R1cHM9ITEsYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMsKCk9Pnt0aGlzLmNoZWNrSW52YWxpZCgpP3RoaXMuZXZlbnRTZXJ2''@;'; put 'put ''aWNlLnNob3dJbmZvTW9kYWwoIlZhbGlkYXRpb24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpOih0aGlzLnN1Ym1pdD0hMCx0aGlzLnZhbGlkYXRpb25Eb25lPTEsc2V0VGltZW91dCgoKT0+e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb3JtRmllbGRzXzgiKS5mb2N1''@;'; put 'put ''cygpfSkpfSl9c2F2ZVRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGQuaG90SW5zdGFuY2UuZ2V0RGF0YSgpLGE9KGE9YS5maWx0ZXIoXz0+ISFkLmRhdGFNb2RpZmllZC5maW5kKFc9Pntmb3IobGV0IGllIG9mIGQuaGVhZGVyUGtzKWlmKFdbaWVdIT09X1tp''@;'; put 'put ''ZV0pcmV0dXJuITE7cmV0dXJuITB9KSkpLm1hcChfPT57bGV0IFQ9Xy5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSBfLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyxfLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1ULE9iamVjdC5rZXlz''@;'; put 'put ''KF8pLm1hcChXPT57Im51bWVyaWMiPT09ZC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShXKT8udHlwZSYmIi4iPT09X1tXXSYmKF9bV109bnVsbCl9KSxffSksZC5sb2dnZXJTZXJ2aWNlLmxvZygiRGF0YSBzdWJtaXR0ZWQiLGEpLGQuY2hlY2tJbnZhbGlkKCkpcmV0dXJuIGQuZXZlbnRTZXJ2aWNl''@;'; put 'put ''LnNob3dJbmZvTW9kYWwoIlZhbGlkYXRpb24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpLGQuY2FuY2VsU3VibWl0KCksdm9pZChkLnN1Ym1pdD0hMSk7aWYoZC52YWxpZGF0aW9uRG9uZT0wLGQuc2F2ZUxvYWRpbmc9ITAsYy5jbnQ8MSYmMD09PWQuZHVwbGljYXRlUGtJ''@;'; put 'put ''bmRleGVzLmxlbmd0aCYmYy5ub25Qa0NudDwxKXtkLnNhdmVMb2FkaW5nPSEwLGQuZGlzYWJsZVN1Ym1pdD0hMSxkLnN1Ym1pdD0hMDtsZXQgXz17QUNUSU9OOiJMT0FEIn07aWYoZC5tZXNzYWdlPWQubWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpLF8uTUVTU0FHRT1kLm1lc3NhZ2UsXy5M''@;'; put 'put ''SUJEUz1kLmxpYmRzLGQuY29scyl7Y29uc3QgVD1hLnNsaWNlKDAsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2lmKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnVwZGF0ZVRhYmxlKF8sVCwiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9zdGFnZWRhdGEiLGQuJGRh''@;'; put 'put ''dGFGb3JtYXRzKS50aGVuKGllPT57aWYodHlwZW9mIGllLnNhc3BhcmFtczwidSIpcmV0dXJuIGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2llLnNhc3BhcmFtc1swXS5EU0lEKSwhMDtsZXQgZ2U9IlN1Ym1pdCByZXF1ZXN0IGZhaWxlZCI7aWUmJihnZSs9YFxuJHsic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIGllP2llOkpTT04uc3RyaW5naWZ5KGllKX1gKSxkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGdlLG51bGwsIlN1Ym1pdCBlcnJvciIpfSkuY2F0Y2goaWU9Pntjb25zb2xlLmxvZygiZXJyIixpZSksYy5jbnQ9MCxjLm5vblBrQ250''@;'; put 'put ''PTAsZC5kaXNhYmxlU3VibWl0PSEwLGQuc3VibWl0PSExO2xldCBnZT0ic3RyaW5nIj09dHlwZW9mIGllP2llOkpTT04uc3RyaW5naWZ5KGllKTtyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIixgU3VibWl0IHJlcXVlc3QgZmFpbGVkXG4k''@;'; put 'put ''e2dlfWAsbnVsbCwiU3VibWl0IGVycm9yIiksITF9KSlyZXR1cm59fWMuY250Pj0xPyhkLnBrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsYy5ub25Qa0NudD49MT8oZC5ub1BrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsZC5jYW5jZWxTdWJtaXQoKSxjLmNudD0w''@;'; put 'put ''LGMubm9uUGtDbnQ9MCxkLmRpc2FibGVTdWJtaXQ9ITB9KSgpfXZhbGlkYXRvclJ1bGVTb3VyY2UoYSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoYSl9Y2hlY2tJbnZhbGlkKCl7cmV0dXJuIHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdC5maXJzdC5jb250YWluZXIubmF0aXZl''@;'; put 'put ''RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuaHRJbnZhbGlkIikubGVuZ3RoPjB9Z29Ub0VkaXRvcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKX1jbG9zZVJlY29yZEVkaXQoYSl7dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9''@;'; put 'put ''dm9pZCAwLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dm9pZCAwLCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24mJiFhJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5wcmV2RGF0YVNvdXJjZSksdGhpcy5ob3RJbnN0YW5jZS51cGRh''@;'; put 'put ''dGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSl9Y29uZmlybVJlY29yZEVkaXQoYT0hMCl7Y29uc3QgZD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg7YSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSksdGhpcy5jb2x1bW5IZWFkZXIubWFwKGY9Pntjb25z''@;'; put 'put ''dCBfPXRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl0sVD0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2ZdPy50eXBlLFc9KDAsdDMuaXNTcGVjaWFsTWlzc2luZykoXyk7VCYmIWlzTmFOKF8pJiYhVyYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl09MSpfKX0pLHRoaXMuZGF0YVNv''@;'; put 'put ''dXJjZVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90VGFibGUuZGF0YVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9p''@;'; put 'put ''ZCAwKX1vbk5leHRSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4Pj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgrMSx0aGlz''@;'; put 'put ''LmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfW9uUHJldmlvdXNSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PD0wP3RoaXMuZGF0YVNvdXJj''@;'; put 'put ''ZS5sZW5ndGgtMTp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgtMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfWFkZFJlY29yZEJ1dHRvbkNsaWNrKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ/dGhpcy5ldmVudFNlcnZp''@;'; put 'put ''Y2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJBZGQgUmVjb3JkIik6dGhpcy5hZGRFZGl0TmV3UmVjb3JkKCl9YWRkRWRpdE5ld1JlY29yZCgpe3RoaXMuYWRkUmVjb3JkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCl9LDFl''@;'; put 'put ''Myl9YWRkUmVjb3JkKCl7dGhpcy5hZGRSb3coKX1lZGl0UmVjb3JkKGEsZCxoKXtpZih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJFZGl0IFJlY29yZCIpO2Vsc2UgaWYoISh2b2lkIDA9PT1kfHxkPDB8''@;'; put 'put ''fHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCkpe2lmKHRoaXMucmVjb3JkQWN0aW9uPWg/IkFERCI6IkVESVQiLHRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCExLGgpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRjVmFsaWRhdG9yKSxoKXRoaXMucHJldkRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMucHJldkRhdGFTb3VyY2UucG9wKCk7ZWxzZXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWVw''@;'; put 'put ''Q2xvbmUodGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YUF0Um93KGQpKTtmb3IobGV0IF8gb2YgZilpZihfKXtjb25zdCBUPV8ucHJvcD8udG9TdHJpbmcoKTtkZWxldGUgXy5wcm9wLGRlbGV0ZSBfLmRhdGEsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShf''@;'; put 'put ''LmNvbCx7Li4uXyxkYXRhOlR9KX19dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PWQsdGhpcy5jdXJyZW50RWRpdFJlY29yZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVtkXSl9fXRvZ2dsZUhvdFBsdWdpbihhLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0''@;'; put 'put ''YW5jZTtoLmJhdGNoKCgpPT57bGV0IGY9aC5nZXRQbHVnaW4oYSk7Zj8oc2V0VGltZW91dCgoKT0+e2Q/Zi5lbmFibGVQbHVnaW4oKTpmLmRpc2FibGVQbHVnaW4oKX0sMTAwKSxoLnJlbmRlcigpKTpjb25zb2xlLndhcm4oIlRvZ2dsZSBIb3QgUGx1Z2luIGZhaWxlZCAtIFBsdWdpbiBuYW1l''@;'; put 'put ''ZDogIithKyIgLSBjb3VsZCBub3QgYmUgZm91bmQuIil9KX1keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpe3JldHVybiEhdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZj0+Zi5yb3c9PT1hJiZmLmNvbD09PWQmJiFmLmFjdGl2ZSl9ZHlu''@;'; put 'put ''YW1pY0NlbGxWYWxpZGF0aW9uKGEsZCl7aWYodGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aWYoaC5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KXJldHVybjtjb25zdCBfPWguZ2V0RGF0YUF0Q2VsbChhLGQp''@;'; put 'put ''LFQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbYV0pLFc9T2JqZWN0LmtleXMoVClbZF0saWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKFQsW1csIm5vTGlua09wdGlvbiJdLCExKSxnZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNl''@;'; put 'put ''LmZpbmRJbmRleCh3ZT0+d2UuaGFzaD09PWllKTtpZihnZT4tMSl7bGV0IHdlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbZ2VdLnZhbHVlcy5tYXAob3Q9Pm90W3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSk7Y29uc3QgRWU9KGguZ2V0Q2VsbE1ldGEoYSxkKS5zb3Vy''@;'; put 'put ''Y2V8fFtdKS5sZW5ndGg8MSxaZT0iICIhPT1fO2guYmF0Y2goKCk9Pntjb25zdCBvdD1oLmdldENlbGxNZXRhKGEsZCksZXQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShvdC5kYXRhfHwiIik7bGV0IHl0O2V0JiYoeXQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShl''@;'; put 'put ''dCkpLHl0fHwoeXQ9W10pLCJudW1lcmljIj09PWV0Py50eXBlPyh5dD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHl0LCJudW1iZXIiKSx3ZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHdlLCJudW1iZXIiKSk6KHl0PXRoaXMuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoeXQsInN0cmluZyIpLHdlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMod2UsInN0cmluZyIpKTtjb25zdCBrdD1bLi4ubmV3IFNldChbLi4ueXQsLi4ud2VdKV07aWYoaC5zZXRDZWxsTWV0YShhLGQsInNvdXJjZSIsa3QpLHRo''@;'; put 'put ''aXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZCx7c291cmNlOmt0fSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtnZV0udmFsdWVzLmxlbmd0aD4wKXtjb25zdCBTdD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW2dlXS5zdHJpY3Q7aC5zZXRDZWxsTWV0YShh''@;'; put 'put ''LGQsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksaC5zZXRDZWxsTWV0YShhLGQsImVkaXRvciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJzdHJpY3QiLFN0KSxoLnNldENlbGxNZXRhKGEsZCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRv''@;'; put 'put ''cj8udXBkYXRlUnVsZShkLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZSIsc3RyaWN0OlN0LGZpbHRlcjohMX0pfXRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbZ2VdLGEsRWUmJlplKSxo''@;'; put 'put ''LnJlbmRlcigpfSl9aWYoZ2U8MCl7Y29uc3Qgd2U9e1NBU0NvbnRyb2xUYWJsZTpbe2xpYmRzOnRoaXMubGliZHMsdmFyaWFibGVfbm06V31dLHNvdXJjZV9yb3c6W1RdfSxFZT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoVykuZmluZChaZT0+IlNPRlRTRUxFQ1RfSE9PSyI9PT1a''@;'; put 'put ''ZS5SVUxFX1RZUEV8fCJIQVJEU0VMRUNUX0hPT0siPT09WmUuUlVMRV9UWVBFKTtFZSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucHVzaCh7cm93OmEsY29sOmQsc3RyaWN0OiJIQVJEU0VMRUNUX0hPT0siPT09RWUuUlVMRV9UWVBFLHZhbHVlczpbXSxoYXNoOmllLGNvdW50OnRoaXMu''@;'; put 'put ''Y2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoKzF9KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLEtOZSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnB1c2goZCksaC5yZW5kZXIoKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRkeW5hbWljY29sdmFs''@;'; put 'put ''cyIsd2Usdm9pZCAwLHtzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOiEwLHN1cHByZXNzRXJyb3JBYm9ydE1vZGFsOiEwfSkudGhlbihaZT0+e2lmKFplLmR5bmFtaWNfdmFsdWVzLm1hcChldD0+ZXRbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKS5sZW5ndGg+MCl7Y29u''@;'; put 'put ''c3QgZXQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgoeXQ9Pnl0Lmhhc2g9PT1pZSk7ZXQ+LTEmJih0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW2V0XT17Li4udGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtldF0scm93OmEsY29sOmQsdmFsdWVzOlplLmR5bmFtaWNfdmFs''@;'; put 'put ''dWVzLGV4dGVuZGVkX3ZhbHVlczpaZS5keW5hbWljX2V4dGVuZGVkX3ZhbHVlc30pLGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsR3opLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSks''@;'; put 'put ''aC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLGguYmF0Y2goKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCEwLGEpLGgucmVuZGVyKCksaC52YWxpZGF0ZVJvd3MoW2FdKX0sMTAwKX0pfWlmKGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIs''@;'; put 'put ''R3opLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksaC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoPnRoaXMudmFsaWRhdGlvblRh''@;'; put 'put ''YmxlTGltaXQpe2NvbnN0IGV0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucmVkdWNlKChrdCxTdCk9Pmt0LmNvdW50PFN0LmNvdW50P2t0OlN0KSx5dD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmluZGV4T2YoZXQpO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKHl0LDEp''@;'; put 'put ''fX0pLmNhdGNoKFplPT57Y29uc3Qgb3Q9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgoZXQ9PmV0Lmhhc2g9PT1pZSk7dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5zcGxpY2Uob3QsMSksaC5iYXRjaCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIscU5lKSxo''@;'; put 'put ''LnJlbmRlcigpfSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnB1c2goZCksc2V0VGltZW91dCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxk''@;'; put 'put ''LCJyZW5kZXJlciIsR3opLGgucmVuZGVyKCksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5pbmRleE9mKGQpLDEpfSwzZTMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLHRoaXMubG9nZ2VyU2VydmljZS5s''@;'; put 'put ''b2coImdldGR5bmFtaWNjb2x2YWxzIGVycm9yOiIsWmUpfSkpfX1jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpe3RoaXMuemVyb0ZpbHRlclJvd3M9ITEsdHlwZW9mIHRoaXMuZmlsdGVyX3BrPCJ1IiYmMT09PXRoaXMuaG90VGFibGUuZGF0YS5sZW5ndGgmJltudWxsLCIiXS5pbmNsdWRlcyh0''@;'; put 'put ''aGlzLmhvdFRhYmxlLmRhdGFbMF1bdGhpcy5oZWFkZXJQa3NbMF1dKSYmKHRoaXMuemVyb0ZpbHRlclJvd3M9ITApfW9uUmVjb3JkSW5wdXRGb2N1cyhhKXt0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgsYS5jb2xOYW1lKX1leGVjdXRlRHlu''@;'; put 'put ''YW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKGEsZCxoKXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFzaCh0aGlzLmRhdGFTb3VyY2VbaF0sW2EsIm5vTGlua09wdGlvbiJdKSxfPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZChUPT5ULmhhc2g9''@;'; put 'put ''PT1mJiZkPT09VC5jb2wpO2lmKF8mJl8uZXh0ZW5kZWRfdmFsdWVzJiZfLmV4dGVuZGVkX3ZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgVD10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoXyxoKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhfLGgsVCwhMCl9fXZpZXdib3hN''@;'; put 'put ''YW5hZ2VyKCl7dGhpcy52aWV3Ym94ZXM9ITB9Z2V0IHRvdGFsUm93c0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkK3RoaXMucm93c0NoYW5nZWQucm93c0FkZGVkfW5nT25Jbml0KCl7dmFyIGE9dGhpczty''@;'; put 'put ''ZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGg9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9aH0pLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShoPT57aC5saWJkcz09PWEubGliZHMmJihhLndo''@;'; put 'put ''ZXJlU3RyaW5nPWguc3RyaW5nLGEuY2xhdXNlcz1oLm9iail9KTtsZXQgZD17fTt0eXBlb2YgYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtPCJ1IiYmKGEubGliZHM9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGEuZmlsdGVyX3BrPWEucm91dGUuc25hcHNob3QucGFyYW1z''@;'; put 'put ''LmZpbHRlcklkLCJlZGl0LXJlY29yZCI9PT1hLnJvdXRlLnNuYXBzaG90LnVybFswXS5wYXRoJiYoYS5yZWNvcmRBY3Rpb249dHlwZW9mIGEuZmlsdGVyX3BrPCJ1Ij8iRURJVCI6IkFERCIpLGQuTElCRFM9YS5saWJkcyx0eXBlb2YgYS5maWx0ZXJfcGs8InUiJiYoZC5GSUxURVJfUks9cGFy''@;'; put 'put ''c2VJbnQoYS5maWx0ZXJfcGspKSxkLk9VVERFU1Q9IldFQiIsYS5saWJkcyYmKEduLmVkaXRvci5saWJyYXJ5PWEubGliZHMuc3BsaXQoIi4iKVswXSxHbi5lZGl0b3IudGFibGU9YS5saWJkcy5zcGxpdCgiLiIpWzFdKSksYS5saWJkcyYmKGEuZ2V0ZGF0YUVycm9yPSExLHlpZWxkIGEuc2Fz''@;'; put 'put ''U3RvcmVTZXJ2aWNlLmNhbGxTZXJ2aWNlKGQsIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsYS5saWJkcykudGhlbihoPT57YS5pbml0U2V0dXAoaCl9KS5jYXRjaChoPT57YS5nZXRkYXRhRXJyb3I9ITAsYS50YWJsZVRydWU9ITB9KSl9KSgpfW5nQWZ0ZXJWaWV3SW5pdCgp''@;'; put 'put ''e31pbml0U2V0dXAoYSl7aWYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIiksdGhpcy5nZXRkYXRhRXJyb3J8fCFhfHwhYS5kYXRhKXJldHVybjt0aGlzLmNvbHM9YS5kYXRhLmNvbHMsdGhpcy5kc21ldGE9YS5kYXRhLmRzbWV0''@;'; put 'put ''YTtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2UsaD1hLmRhdGEuYXBwcm92ZXJzO3RoaXMuY29scyYmKHRoaXMuaGVhZGVyQXJyYXk9KGM9Pntjb25zdCBsPVtdO2ZvcihsZXQgYSBvZiBjKSJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5OQU1FJiZsLnB1c2goYS5OQU1FKTty''@;'; put 'put ''ZXR1cm4gbH0pKHRoaXMuY29scykpLGguZm9yRWFjaChfPT57dGhpcy5hcHByb3ZlcnMucHVzaChfLlBFUlNPTk5BTUUpfSksdGhpcy50YWJsZVRydWU9ITAsdGhpcy5saWJkcz1hLmxpYmRzLHRoaXMuaG90VGFibGUuZGF0YT1hLmRhdGEuc2FzZGF0YSx0aGlzLmhlYWRlckNvbHVtbnM9YS5k''@;'; put 'put ''YXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5oZWFkZXJQa3M9YS5kYXRhLnNhc3BhcmFtc1swXS5QSy5zcGxpdCgiICIpLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ISFhLmRhdGEuc2FzcGFyYW1zWzBdLkNMU19GTEFHLHRoaXMuY29sdW1uTGV2ZWxT''@;'; put 'put ''ZWN1cml0eUZsYWcmJnRoaXMuc2V0UmVzdHJpY3Rpb25zKHtyZXN0cmljdEFkZFJvdzohMCxyZW1vdmVFZGl0UmVjb3JkQnV0dG9uOiEwLHJlbW92ZUFkZFJlY29yZEJ1dHRvbjohMH0pLHRoaXMuY2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKSwtMSE9PXRoaXMuaGVhZGVyQ29sdW1ucy5pbmRl''@;'; put 'put ''eE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKHRoaXMuaGVhZGVyQ29sdW1uc1t0aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksdGhpcy5oZWFkZXJBcnJheT10aGlzLmhlYWRlckNvbHVt''@;'; put 'put ''bnMuc2xpY2UoMSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKHRoaXMuZGF0ZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKHRoaXMudGltZUhlYWRlcnM9YS5kYXRhLnNhc3Bh''@;'; put 'put ''cmFtc1swXS5UTVZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYodGhpcy5kYXRlVGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxhLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJih0aGlzLnhsUnVsZXM9''@;'; put 'put ''dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEueGxfcnVsZXMpKSx0aGlzLmRjVmFsaWRhdG9yPW5ldyBaTmUoYS5kYXRhLnNhc3BhcmFtc1swXSxhLmRhdGEuJHNhc2RhdGEsdGhpcy5jb2xzLGEuZGF0YS5kcXJ1bGVzLGEuZGF0YS5kcWRhdGEpLHRoaXMuY2VsbFZhbGlkYXRp''@;'; put 'put ''b249dGhpcy5kY1ZhbGlkYXRvci5nZXRSdWxlcygpLHRoaXMuZGF0YVNvdXJjZT1hLmRhdGEuc2FzZGF0YSx0aGlzLiRkYXRhRm9ybWF0cz1hLmRhdGEuJHNhc2RhdGE7Zm9yKGxldCBfPTA7Xzx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO18rKyl0aGlzLmhvdERhdGFTY2hlbWFbdGhpcy5j''@;'; put 'put ''ZWxsVmFsaWRhdGlvbltfXS5kYXRhXT1ZTmUodGhpcy5jZWxsVmFsaWRhdGlvbltfXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25bX10pO3RoaXMuY2hlY2tSb3dMaW1pdCgpLGQudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1''@;'; put 'put ''bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsZm9ybXVsYXM6dGhpcy5ob3RUYWJsZS5mb3JtdWxhcyxzdHJldGNoSDoiYWxsIixyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGhpZGRlbkNvbHVtbnM6e2luZGljYXRvcnM6''@;'; put 'put ''ITAsY29sdW1uczp0aGlzLmRjVmFsaWRhdG9yLmdldEhpZGRlbkNvbHVtbnMoKX0sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oXyxUKXtyZXR1cm4gMD09PVQ/NjA6Xz41MDA/NTAwOl99LGNvcHlQYXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0ZSxtYW51YWxDb2x1bW5GcmVlemU6ITEsbXVs''@;'; put 'put ''dGlDb2x1bW5Tb3J0aW5nOiEwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxmaWx0ZXJzOiExLG1hbnVhbFJvd1Jlc2l6ZTohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDo1MCxyb3dIZWFkZXJzOl89PiIgIixyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjI0LG1heFJvd3M6dGhpcy5s''@;'; put 'put ''aWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZHx8MS8wLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGRyb3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0s''@;'; put 'put ''c3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVyOihfLFQsVyxpZSxnZSx3ZSk9Pntjb25zdCBFZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IFplLG90PSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25z''@;'; put 'put ''dCBldD10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLHl0PWV0P2V0WzBdWzFdOi0xLGt0PXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcCh5dCk7WmU9dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNba3RdLFplJiYob3Q9YExBQkVMOiAke1plPy5sYWJlbH08YnI+VFlQRTogJHta''@;'; put 'put ''ZT8udHlwZX08YnI+TEVOR1RIOiAke1plPy5sZW5ndGh9PGJyPkZPUk1BVDogJHtaZT8uZm9ybWF0fWApfXJldHVybiBFZS5pbm5lckhUTUw9b3QsRWV9fX19LGRhdGFTY2hlbWE6dGhpcy5ob3REYXRhU2NoZW1hLGNvbnRleHRNZW51OnRoaXMuaG90VGFibGUuc2V0dGluZ3MuY29udGV4dE1l''@;'; put 'put ''bnUsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VzdG9tSCIsYWZ0ZXJHZXRDb2xIZWFkZXI6KF8sVCk9Pntjb25zdCBXPXRoaXMuY29sdW1uSGVhZGVyW19dLGllPVcmJnRoaXMuaXNDb2xQayhXKSxnZT1XJiZ0aGlzLmlzUmVhZG9ubHlDb2woVyk7aWUmJlQuY2xhc3NMaXN0LmFkZCgicHJp''@;'; put 'put ''bWFyeUtleUhlYWRlclN0eWxlIiksZ2UmJiFpZSYmVC5jbGFzc0xpc3QuYWRkKCJyZWFkb25seUNlbGwiKSwwPT09XyYmVC5jbGFzc0xpc3QuYWRkKCJmaXJzdENvbHVtbkhlYWRlclN0eWxlIil9LGFmdGVyR2V0Q2VsbE1ldGE6KF8sVCxXKT0+e1QmJnRoaXMuaXNSZWFkb25seUNvbChUKSYm''@;'; put 'put ''KFcuY2xhc3NOYW1lPSJyZWFkb25seUNlbGwiKX19LCExKSx0aGlzLmhvdFRhYmxlLmhpZGRlbj0hMSx0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCExKSx0aGlzLnF1ZXJ5VGV4dD1hLmRhdGEuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHRoaXMuY29sdW1uSGVhZGVyPWEu''@;'; put 'put ''ZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuY29sdW1uSGVhZGVyWzBdPSJEZWxldGU/Iix0aGlzLnJlYWRPbmx5RmllbGRzPWEuZGF0YS5zYXNwYXJhbXNbMF0uUEtDTlQ7bGV0IGY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7ZiYm''@;'; put 'put ''Zi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLF89Pnt0aGlzLnVwbG9hZFByZXZpZXd8fHRoaXMuaG90Q2xpY2tlZCgpLHNldFRpbWVvdXQoKCk9PntsZXQgVD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO1QmJlQuY2xpY2soKX0sMTAw''@;'; put 'put ''KX0pLGQuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLChfLFQsVyxpZSxnZSx3ZSk9PntfPT09VyYmVD09PWllJiYhMT09PXRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKF8sVCl9KSxkLmFkZEhvb2soImJlZm9yZUtleURvd24iLF89Pntjb25zdCBU''@;'; put 'put ''PXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKSxXPVQmJlRbMF07aWYoVyl7Y29uc3QgaWU9V1swXSx3ZT1XWzFdO2lmKGllPT09V1syXSYmd2U9PT1XWzNdKXtjb25zdCBaZT10aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRhKGllLHdlKTtaZSYmITE9PT1aZS5maWx0ZXImJnRoaXMu''@;'; put 'put ''aG90SW5zdGFuY2Uuc2V0Q2VsbE1ldGEoaWUsd2UsImZpbHRlciIsITApfX19KSxkLmFkZEhvb2soImFmdGVyQ2hhbmdlIiwoXyxUKT0+e2lmKCJlZGl0Ij09PVQpe2NvbnN0IFc9dGhpcy5ob3RJbnN0YW5jZSxpZT1fWzBdWzBdLGdlPV9bMF1bMV0sd2U9Vy5wcm9wVG9Db2woZ2UpLEVlPVcu''@;'; put 'put ''Z2V0Q2VsbE1ldGEoaWUsd2UpO0VlJiYhMT09PUVlLmZpbHRlciYmVy5zZXRDZWxsTWV0YShpZSx3ZSwiZmlsdGVyIiwhMCksdGhpcy5leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKGdlLHdlLGllKX19KSxkLmFkZEhvb2soImFmdGVyUmVuZGVyIixfPT57dGhpcy5l''@;'; put 'put ''dmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSxkLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoXyxUKT0+e2lmKF8+dGhpcy5kYXRhU291cmNlLmxlbmd0aCl7bGV0IFc9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnd0SG9sZGVyIik7c2V0VGltZW91dCgoKT0+e1cmJihX''@;'; put 'put ''LnNjcm9sbFRvcD1XLnNjcm9sbEhlaWdodCl9KX19KSxkLmFkZEhvb2soImJlZm9yZVBhc3RlIiwoXyxUKT0+e2NvbnN0IFc9VFswXS5zdGFydENvbDtfWzBdPV9bMF0ubWFwKChpZSxnZSk9Pntjb25zdCB3ZT10aGlzLmNvbHVtbkhlYWRlcltXK2dlXSxFZT0ibnVtIj09PXRoaXMuJGRhdGFG''@;'; put 'put ''b3JtYXRzPy52YXJzW3dlXT8udHlwZSxaZT0oMCx0My5pc1NwZWNpYWxNaXNzaW5nKShpZSk7cmV0dXJuIEVlJiYhaXNOYU4oaWUpJiYhWmUmJihpZSo9MSksaWV9KX0pLGQuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSxkLmFkZEhvb2soImFm''@;'; put 'put ''dGVyQ3JlYXRlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksdGhpcy51cGxvYWRVcmw9InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLG51bGwhPT10aGlzLnJlY29yZEFjdGlvbiYmKCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24/KHRoaXMuYWRkUmVjb3JkKCksdGhpcy5lZGl0''@;'; put 'put ''UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKSk6MT09PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgmJnRoaXMuZWRpdFJlY29yZChudWxsLDApKSxhLmRhdGEucXVlcnkubGVuZ3RoPjAmJigiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09R24ucm9vdFBhcmFt''@;'; put 'put ''KSYmMD09PUduLmVkaXRvci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihHbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnF1ZXJ5KSxHbi5lZGl0b3IuZmlsdGVyLmxpYmRzPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSx0''@;'; put 'put ''aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJlZGl0b3IiLHRoaXMuY29scykpLGQucmVuZGVyKCl9fXJldHVybiBjLmNudD0wLGMubm9uUGtDbnQ9MCxjLmxhc3RDZWxsPTAsYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0''@;'; put 'put ''dChDMCksdHQodmwpLHR0KHcwKSx0dChiZCksdHQoQWMpLHR0KERzKSx0dChXbCksdHQob2EpLHR0KFVhKSx0dChBZykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdG9yIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKHNVZSw3KSxS''@;'; put 'put ''byhhVWUsNSksUm8obFVlLDUpLFJvKGNVZSw1KSxSbyh1VWUsNSkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaHQ9aC5maXJzdCksc2koaD1haSgpKSYmKGQudXBsb2FkU3RhdGVyQ29tcExpc3Q9aCksc2koaD1haSgpKSYmKGQucXVlcnlGaWx0ZXJDb21wTGlzdD1oKSxzaShoPWFpKCkp''@;'; put 'put ''JiYoZC5ob3RJbnN0YW5jZUNvbXBMaXN0PWgpLHNpKGg9YWkoKSkmJihkLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWgpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjE3Nyx2YXJzOjczLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSIsImQtZmxleCIsImNsci1m''@;'; put 'put ''bGV4LWNvbHVtbiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIiwiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3Bl''@;'; put 'put ''bkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1k''@;'; put 'put ''LWF1dG8iXSxbMSwiZW5jb2RpbmctYmxvY2siXSxbImNscklubGluZSIsIiIsMSwibXQtMC1pIl0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiVVRGLTgiLCJuYW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5''@;'; put 'put ''cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwidmFsdWUiLCJXTEFUSU4xIiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMyBmaWx0ZXJCdG4iLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1t''@;'; put 'put ''ZC0zIGVkaXRCdG4iLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0wIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiY2xpY2siLDQsIm5n''@;'; put 'put ''SWYiXSxbImNsYXNzIiwiZXhjZWwtcGFyc2luZyBjbHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFszLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1Ym1pdExvYWRpbmciLCJoZWFkZXJQa3Mi''@;'; put 'put ''LCJjZWxsVmFsaWRhdGlvbiIsImN1cnJlbnRSZWNvcmRJbmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIiwib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVjb3JkRWRpdENs''@;'; put 'put ''b3NlIiwib25OZXh0UmVjb3JkIiwib25QcmV2aW91c1JlY29yZCIsNCwibmdJZiJdLFsxLCJjbHItZmxleC0xIl0sWyJodCIsIiJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImJvcmRlci0wIiwi''@;'; put 'put ''Ym94LXNoYWRvdy1ub25lLWkiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywiZmlsZURyYWdnZWRPdmVyIl0sWzEsImNhcmQtaGVhZGVyIiwiY2xyLXJvdyIsImJ1dHRvbkJhciIsImhlYWRl''@;'; put 'put ''ckJhciIsImNsci1mbGV4LW1kLXJvdyIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1lbmQiXSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLWxnLTQgYmFja0J0biIsNCwibmdJZiJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00''@;'; put 'put ''IiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwiZWRpdG9yLXRpdGxlIHRleHQtY2VudGVyIG10LTAtaSIsNCwibmdWYXIiXSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLWxnLTQgYnRuQ3RybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJj''@;'; put 'put ''bHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsImNsci1mbGV4LTEiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsxLCJjYXJkLXRleHQiLCJob3RFZGl0b3IiLCJo''@;'; put 'put ''LTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiXSxbMSwiaG90LXdyYXBwZXIiLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsMSwiZWRpdC1ob3QiLDMsImxpY2Vuc2VLZXkiXSxbImhvdElu''@;'; put 'put ''c3RhbmNlIiwiIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtLTAiXSxbInR5cGUiLCJidXR0b24iLDEs''@;'; put 'put ''ImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImR1cGxpY2F0ZS1rZXlzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbImNsYXNzIiwi''@;'; put 'put ''ZC1ibG9jayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwi''@;'; put 'put ''Y2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJi''@;'; put 'put ''dG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzMs''@;'; put 'put ''ImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiLCJj''@;'; put 'put ''bHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFuYWdlciJdLFsiZmlsZVBhc3N3''@;'; put 'put ''b3JkSW5wdXQiLCIiXSxbImNsYXNzIiwibS0wIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFszLCJvcGVuIiwiZHNtZXRhIiwib3BlbkNoYW5nZSJdLFszLCJ2''@;'; put 'put ''aWV3Ym94TW9kYWwiLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEw''@;'; put 'put ''MCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywidXBsb2FkZXIiLCJjaGFuZ2UiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsxLCJjbHItY29sLW1kLTMiLCJlZGl0QnRuIl0sWzEsImJ0blZpZXciLCJidG4iLCJi''@;'; put 'put ''dG4tc20iLCJidG4tc3VjY2VzcyIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0''@;'; put 'put ''bi1wcmltYXJ5IiwibXItMCIsMywiY2xpY2siXSxbMSwiZXhjZWwtcGFyc2luZyIsImNsci1jb2wtbWQtMTIiXSxbInVwbG9hZFN0YXRlciIsIiJdLFszLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1Ym1pdExvYWRpbmci''@;'; put 'put ''LCJoZWFkZXJQa3MiLCJjZWxsVmFsaWRhdGlvbiIsImN1cnJlbnRSZWNvcmRJbmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIiwib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9u''@;'; put 'put ''UmVjb3JkRWRpdENsb3NlIiwib25OZXh0UmVjb3JkIiwib25QcmV2aW91c1JlY29yZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLWxnLTQiLCJiYWNrQnRuIl0sWzEsImJ0biIsImJ0bi1zbSIsMywicm91dGVyTGluayJd''@;'; put 'put ''LFsic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiYnRuIiwiYnRuLXNtIiwidmlld2JveC1vcGVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIiwic2l6ZSIsIjIwIl0sWzEsImVkaXRvci10aXRsZSIsInRleHQtY2VudGVyIiwibXQtMC1pIl0s''@;'; put 'put ''WyJzaGFwZSIsImluZm8tY2lyY2xlIiwic2l6ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93Iiw0LCJuZ0lmIl0sWzEsIm1yLTEwIiwzLCJyb3V0ZXJMaW5rIl0sWyJzaGFwZSIs''@;'; put 'put ''ImJvbHQiLDEsImNvbG9yLXllbGxvdyJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00IiwiYnRuQ3RybCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuVmlldyIsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJub3RlIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayBtci0wIiwzLCJjbGljayIsNCwi''@;'; put 'put ''bmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFu''@;'; put 'put ''Z2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwiMTYiXSxbImNsclBv''@;'; put 'put ''c2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRu''@;'; put 'put ''LWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IGJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24i''@;'; put 'put ''LDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJldmlldy1zdWJtaXQiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIl0sWzEsImNsci1jb2wt''@;'; put 'put ''bWQtMTIiLCJpbmZvQmFyIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsMSwiZXJyb3It''@;'; put 'put ''aWNvbiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm10LTUtaSIsMywiY2xpY2siXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0''@;'; put 'put ''aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwibW9kYWwiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsIm1vZGFsLWxnIl0sWzEsIm1vZGFsLWNvbnRlbnQi''@;'; put 'put ''XSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsiY2xhc3MiLCJkLWJsb2NrIHctMTAwIHRleHQtY2VudGVyIGNvbG9yLXJlZCIsNCwibmdJZiJd''@;'; put 'put ''LFsiY2xhc3MiLCJjbHItb2Zmc2V0LW1kLTIgY2xyLWNvbC1tZC04Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsImp1c3RpZnktY29udGVudC1jZW50ZXItaSJdLFsiaWQiLCJzdWJtaXRCdG4iLCJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRs''@;'; put 'put ''aW5lIiwibS0wIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJpZCIsImNhbmNlbFN1Ym1pdEJ0biIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJkLWJsb2NrIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLXJlZCJdLFsx''@;'; put 'put ''LCJjbHItb2Zmc2V0LW1kLTIiLCJjbHItY29sLW1kLTgiXSxbMSwiZm9ybS1ncm91cCJdLFsiZm9yIiwiZm9ybUZpZWxkc184Il0sWyJ0eXBlIiwidGV4dCIsImlkIiwiZm9ybUZpZWxkc184Iiwicm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJ2YWx1ZSIsIm5n''@;'; put 'put ''TW9kZWxDaGFuZ2UiXSxbMSwiZC1ibG9jayJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9Vm4oKTttZSgwLCJkaXYiLDApKDEsImNsci1tb2RhbCIsMSkseHQoImZpbGVPdmVyIixmdW5jdGlvbihfKXtyZXR1cm4gZC5maWxlT3ZlckJhc2UoXyl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmdldEZpbGVEZXNjKF8s''@;'; put 'put ''ITApfSkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuc2hvd1VwbG9hZE1vZGFsPV99KSxtZSgyLCJoMyIsMiksTmUoMywiVXBsb2FkIEZpbGUiKSx5ZSgpLG1lKDQsImRpdiIsMykoNSwiZGl2Iiw0KSg2LCJzcGFuIiksTmUoNywiRHJvcCBmaWxlIGFueXdoZXJl''@;'; put 'put ''IHRvIHVwbG9hZCEiKSx5ZSgpKCksbWUoOCwiZGl2Iiw1KSg5LCJkaXYiLDYpKDEwLCJkaXYiLDcpKDExLCJkaXYiLDgpKDEyLCJjbHItcmFkaW8tY29udGFpbmVyIiw5KSgxMywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxNCwiaW5wdXQiLDEwKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''Xyl7cmV0dXJuIGQuZW5jb2Rpbmc9X30pLHllKCksbWUoMTUsImxhYmVsIiksTmUoMTYsIlVURi04IikseWUoKSgpLG1lKDE3LCJjbHItcmFkaW8td3JhcHBlciIpKDE4LCJpbnB1dCIsMTEpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5lbmNvZGluZz1ffSkseWUo''@;'; put 'put ''KSxtZSgxOSwibGFiZWwiKSxOZSgyMCwiV0xBVElOMSIpLHllKCkoKSgpKCkoKSxRZSgyMSxkVWUsNiwxLCJkaXYiLDEyKSxRZSgyMixoVWUsMywxLCJkaXYiLDEzKSxtZSgyMywiZGl2Iiw3KSxRZSgyNCxmVWUsMiwxLCJidXR0b24iLDE0KSxRZSgyNSxwVWUsMiwwLCJidXR0b24iLDE1KSx5''@;'; put 'put ''ZSgpLFFlKDI2LGdVZSwzLDAsImRpdiIsMTYpLHllKCkoKSgpLHF0KDI3LCJkaXYiLDE3KSx5ZSgpLFFlKDI4LG1VZSwxLDEyLCJhcHAtZWRpdC1yZWNvcmQiLDE4KSxtZSgyOSwiZGl2IiwxOSwyMCksUWUoMzEsdlVlLDIsMCwiZGl2IiwyMSksbWUoMzIsImRpdiIsMjIpLHh0KCJmaWxlRHJh''@;'; put 'put ''Z2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25TaG93VXBsb2FkTW9kYWwoKX0pLG1lKDMzLCJkaXYiLDIzKSxRZSgzNCxiVWUsNywyLCJkaXYiLDI0KSxtZSgzNSwiZGl2IiwyNSksUWUoMzYsTVVlLDcsNSwiaDQiLDI2KSx5ZSgpLFFlKDM3LExVZSw0LDMsImRpdiIsMjcpLFFlKDM4''@;'; put 'put ''LFJVZSw1LDEsImRpdiIsMjgpLHllKCksbWUoMzksImRpdiIsMjkpLFFlKDQwLEZVZSw0LDIsImRpdiIsMzApLG1lKDQxLCJkaXYiLDMxKSg0MiwiZGl2IiwzMikscXQoNDMsImhvdC10YWJsZSIsMzMsMzQpLHllKCksbWUoNDUsImRpdiIpLFFlKDQ2LFZVZSw1LDIsImNsci10b29sdGlwIiwz''@;'; put 'put ''NSksUWUoNDcsQlVlLDMsMSwicCIsMzYpLHllKCksUWUoNDgsVVVlLDE2LDYsImRpdiIsMzcpLG1lKDQ5LCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5zdWJtaXRMaW1pdE5vdGljZT1ffSksbWUoNTAsImgzIiwyKSxOZSg1MSwi''@;'; put 'put ''Tm90aWNlIikseWUoKSxtZSg1MiwiZGl2IiwzKSg1MywicCIsMzkpLE5lKDU0KSx5ZSgpKCksbWUoNTUsImRpdiIsMTcpKDU2LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc3VibWl0TGltaXROb3RpY2U9ITF9KSxOZSg1NywiIENhbmNlbCAiKSx5ZSgpLG1l''@;'; put 'put ''KDU4LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZ2V0RmlsZSgpLGQuc3VibWl0TGltaXROb3RpY2U9ITF9KSxOZSg1OSwiIFN1Ym1pdCAiKSx5ZSgpKCkoKSxtZSg2MCwiY2xyLW1vZGFsIiwzOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''Xyl7cmV0dXJuIGQuYmFkRWRpdD1ffSksbWUoNjEsImgzIiwyKSxOZSg2MikseWUoKSxtZSg2MywiZGl2IiwzKSg2NCwicCIpLE5lKDY1KSx5ZSgpKCksbWUoNjYsImRpdiIsMTcpKDY3LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYmFkRWRpdD0hMX0pLE5l''@;'; put 'put ''KDY4LCIgT2sgIikseWUoKSgpKCksbWUoNjksImNsci1tb2RhbCIsMzgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnBrTnVsbD1ffSksbWUoNzAsImgzIiwyKSxOZSg3MSwiRXJyb3IiKSx5ZSgpLG1lKDcyLCJkaXYiLDMpKDczLCJwIiksTmUoNzQsIiBO''@;'; put 'put ''dWxsIHZhbHVlcyBvciBpbmNvcnJlY3QgZGF0YSB0eXBlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLHllKCkoKSxtZSg3NSwiZGl2IiwxNykoNzYsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wa051bGw9ITEsZC5i''@;'; put 'put ''YWRFZGl0PSExfSksTmUoNzcsIiBPayAiKSx5ZSgpKCkoKSxtZSg3OCwiY2xyLW1vZGFsIiwzOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQubm9Qa051bGw9X30pLG1lKDc5LCJoMyIsMiksTmUoODAsIkVycm9yIikseWUoKSxtZSg4MSwiZGl2IiwzKSg4''@;'; put 'put ''MiwicCIpLE5lKDgzLCJJbmNvcnJlY3QgZGF0YSB0eXBlcyBpbiBub24tUHJpbWFyeSBLZXkgY29sdW1ucyIpLHllKCkoKSxtZSg4NCwiZGl2IiwxNykoODUsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5ub1BrTnVsbD0hMSxkLmJhZEVkaXQ9ITF9KSxOZSg4''@;'; put 'put ''NiwiIE9rICIpLHllKCkoKSgpLG1lKDg3LCJjbHItbW9kYWwiLDQyKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5wa0R1cHM9X30pLG1lKDg4LCJoMyIsMiksTmUoODksIkVycm9yIikseWUoKSxtZSg5MCwiZGl2IiwzKSg5MSwicCIpLE5lKDkyLCIgRHVw''@;'; put 'put ''bGljYXRlIHZhbHVlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLHllKCksbWUoOTMsInAiKSxOZSg5NCwiRHVwbGljYXRlcyBmb3VuZDoiKSx5ZSgpLFFlKDk1LFpVZSwzLDQsInNwYW4iLDQzKSx5ZSgpLG1lKDk2LCJkaXYiLDE3KSg5NywiYnV0dG9u''@;'; put 'put ''Iiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBrRHVwcz0hMX0pLE5lKDk4LCIgT2sgIikseWUoKSgpKCksbWUoOTksImNsci1tb2RhbCIsMzgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnRvb0xvbmc9X30pLG1lKDEwMCwiaDMiLDIp''@;'; put 'put ''LE5lKDEwMSwiRXJyb3IiKSx5ZSgpLG1lKDEwMiwiZGl2IiwzKSgxMDMsInAiKSxOZSgxMDQsIiBUaGUgZm9sbG93aW5nIGNvbHVtbnMgaGF2ZSB2YWx1ZXMgdGhhdCBleGNlZWQgbGVuZ3RoIGxpbWl0czogIikseWUoKSxRZSgxMDUsWVVlLDIsMywicCIsNDQpLHllKCksbWUoMTA2LCJkaXYi''@;'; put 'put ''LDE3KSgxMDcsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC50b29Mb25nPSExLGQuY2xlYW5FeGNlZWQoKX0pLE5lKDEwOCwiIE9rICIpLHllKCkoKSgpKCkoKSgpKCkoKSxRZSgxMDksV1VlLDE0LDAsImRpdiIsNDUpLG1lKDExMCwiY2xyLW1vZGFsIiw0Niks''@;'; put 'put ''eHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZmlsdGVyPV99KSxtZSgxMTEsImgzIiw0NyksTmUoMTEyLCIgRmlsdGVyIGZvciB0YWJsZTogIiksbWUoMTEzLCJzcGFuIiksTmUoMTE0KSx5ZSgpKCksbWUoMTE1LCJkaXYiLDMpLFFlKDExNixHVWUsMiwwLCJh''@;'; put 'put ''cHAtcXVlcnkiLDM1KSx5ZSgpLG1lKDExNywiZGl2IiwxNykoMTE4LCJidXR0b24iLDQ4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzZXRGaWx0ZXIoKX0pLE5lKDExOSwiIHJlc2V0IGZpbHRlciAiKSx5ZSgpLG1lKDEyMCwiYnV0dG9uIiw0OSkseHQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBkLmZpbHRlcj0hMX0pLE5lKDEyMSwiIENhbmNlbCAiKSx5ZSgpLG1lKDEyMiwiYnV0dG9uIiw1MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbmRDbGF1c2UoKX0pLE5lKDEyMywiIE9rICIpLHllKCkoKSgpLG1lKDEyNCwiY2xyLW1vZGFsIiwzOCks''@;'; put 'put ''eHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQucXVlcnlFcnI9X30pLG1lKDEyNSwiaDMiLDIpLE5lKDEyNiwiRXJyb3IiKSx5ZSgpLG1lKDEyNywiZGl2IiwzKSgxMjgsInAiKSxOZSgxMjkpLHllKCkoKSxtZSgxMzAsImRpdiIsMTcpKDEzMSwiYnV0dG9uIiw1''@;'; put 'put ''MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnF1ZXJ5RXJyPSExfSksTmUoMTMyLCIgQ2FuY2VsICIpLHllKCksbWUoMTMzLCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucXVlcnlFcnI9ITF9KSxOZSgxMzQsIiBPayAiKSx5ZSgpKCkoKSxtZSgx''@;'; put 'put ''MzUsImNsci1tb2RhbCIsNTIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmRpc2NhcmRTb3VyY2VGaWxlPV99KSxtZSgxMzYsImgzIiw0NyksTmUoMTM3LCJXYXJuaW5nIikseWUoKSxtZSgxMzgsImRpdiIsMyksTmUoMTM5LCIgVGhpcyBhY3Rpb24gd2ls''@;'; put 'put ''bCBkaXNjYXJkIHRoZSBzb3VyY2UgZmlsZSBhbmQgaXQncyBsb2FkZWQgZGF0YSAiKSxtZSgxNDAsImIiKSxOZSgxNDEpLHllKCksTmUoMTQyLCIgRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIikseWUoKSxtZSgxNDMsImRpdiIsMTcpKDE0NCwiYnV0dG9uIiw0OSkseHQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBkLmRpc2NhcmRTb3VyY2VGaWxlPSExfSksTmUoMTQ1LCIgQ2FuY2VsICIpLHllKCksbWUoMTQ2LCJidXR0b24iLDUzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGlzY2FyZFNvdXJjZUZpbGU9ITEsZC5kaXNjYXJkUGVuZGluZ0V4Y2VsKCEwKX0pLE5l''@;'; put 'put ''KDE0NywiIE9rICIpLHllKCkoKSgpLG1lKDE0OCwiY2xyLW1vZGFsIiw1MikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZmlsZVBhc3N3b3JkTW9kYWw9X30pLG1lKDE0OSwiaDMiLDQ3KSxOZSgxNTAsIiBQYXNzd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSx5''@;'; put 'put ''ZSgpLG1lKDE1MSwiZGl2Iiw1NCkoMTUyLCJwIiwzOSksTmUoMTUzLCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IikseWUoKSxxdCgxNTQsImlucHV0Iiw1NSw1NikseWUoKSxtZSgxNTYsImRpdiIsMTcpLFFlKDE1NywkVWUsMiwwLCJwIiw1NyksbWUoMTU4LCJidXR0b24iLDQ5KSx4dCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZmlsZVBhc3N3b3JkTW9kYWw9ITEsZC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQodm9pZCAwKX0pLE5lKDE1OSwiIENhbmNlbCB1cGxvYWQgIikseWUoKSxtZSgxNjAsImJ1dHRvbiIsNTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChoKTtjb25z''@;'; put 'put ''dCBfPSRpKDE1NSk7cmV0dXJuIGQuZmlsZVBhc3N3b3JkTW9kYWw9ITEsanQoZC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQoXy52YWx1ZSkpfSksTmUoMTYxLCIgVW5sb2NrICIpLHllKCkoKSgpLG1lKDE2MiwiY2xyLW1vZGFsIiw1MikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rp''@;'; put 'put ''b24oXyl7cmV0dXJuIGQubWFudWFsRmlsZUVkaXRNb2RhbD1ffSksbWUoMTYzLCJoMyIsNDcpLE5lKDE2NCwiV2FybmluZyIpLHllKCksbWUoMTY1LCJkaXYiLDMpLE5lKDE2NiwiIE1hbnVhbGx5IGVkaXRpbmcgdGhpcyBkYXRhIHdpbGwgbWVhbiB0aGUgc291cmNlIGZpbGUgIiksbWUoMTY3''@;'; put 'put ''LCJiIiksTmUoMTY4KSx5ZSgpLE5lKDE2OSwiIHdpbGwgYmUgZGlzY2FyZGVkLiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSx5ZSgpLG1lKDE3MCwiZGl2IiwxNykoMTcxLCJidXR0b24iLDQ5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubWFudWFsRmlsZUVkaXRNb2RhbD0h''@;'; put 'put ''MX0pLE5lKDE3MiwiIENhbmNlbCAiKSx5ZSgpLG1lKDE3MywiYnV0dG9uIiw1MykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEsZC5wcmV2aWV3VGFibGVFZGl0Q29uZmlybSgpfSksTmUoMTc0LCIgT2sgIikseWUoKSgpKCksbWUoMTc1LCJh''@;'; put 'put ''cHAtZGF0YXNldC1pbmZvIiw1OSkseHQoIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmRhdGFzZXRJbmZvPV99KSx5ZSgpLG1lKDE3NiwiYXBwLXZpZXdib3hlcyIsNjApLHh0KCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnZpZXdib3hlcz1ffSks''@;'; put 'put ''eWUoKX1pZigyJmEpe2NvbnN0IGg9JGkoMTU1KTtDZSgxKSxSZSgidXBsb2FkZXIiLGQudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwhMSkoImNsck1vZGFsQ2xvc2FibGUiLCJWYWxpZGF0aW5nLURRIj09PWQuZXhjZWxVcGxvYWRTdGF0''@;'; put 'put ''ZSkoImNsck1vZGFsT3BlbiIsZC5zaG93VXBsb2FkTW9kYWwpLENlKDEzKSxSZSgibmdNb2RlbCIsZC5lbmNvZGluZykoImRpc2FibGVkIiwiIiE9ZC5maWxlbmFtZSksQ2UoNCksUmUoIm5nTW9kZWwiLGQuZW5jb2RpbmcpKCJkaXNhYmxlZCIsIiIhPWQuZmlsZW5hbWUpLENlKDMpLFJlKCJu''@;'; put 'put ''Z0lmIiwhZC5leGNlbEZpbGVQYXJzaW5nJiYhZC51cGxvYWRMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWQuZXhjZWxGaWxlUGFyc2luZyYmIWQudXBsb2FkTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLCJWYWxpZGF0aW5nIiE9PWQuZXhjZWxVcGxvYWRTdGF0ZSksQ2UoMSksUmUoIm5nSWYi''@;'; put 'put ''LCJWYWxpZGF0aW5nLURRIj09PWQuZXhjZWxVcGxvYWRTdGF0ZSksQ2UoMSksUmUoIm5nSWYiLGQuZXhjZWxGaWxlUGFyc2luZyksQ2UoMiksUmUoIm5nSWYiLGQuY3VycmVudEVkaXRSZWNvcmRJbmRleD4tMSksQ2UoMyksUmUoIm5nSWYiLCFkLnZhbGlkYXRpb25Eb25lJiZkLnN1Ym1pdCks''@;'; put 'put ''Q2UoMyksUmUoIm5nSWYiLGQudGFibGVUcnVlKSxDZSgxKSxocigiY2xyLWNvbC1sZy0xMiIsIWQudGFibGVUcnVlKSxDZSgxKSxSZSgibmdWYXIiLFEyKDY2LHFVZSxudWxsPT1kLmxpYmRzP251bGw6ZC5saWJkcy5zcGxpdCgiLiIpWzBdLG51bGw9PWQubGliZHM/bnVsbDpkLmxpYmRzLnNw''@;'; put 'put ''bGl0KCIuIilbMV0pKSxDZSgxKSxSZSgibmdJZiIsZC50YWJsZVRydWUpLENlKDEpLFJlKCJuZ0lmIiwhJHMoNjksSXNlKS5pbmNsdWRlcyhkLnF1ZXJ5VGV4dCkpLENlKDEpLFJlKCJuZ0NsYXNzIixKMig3MSxLVWUsISRzKDcwLElzZSkuaW5jbHVkZXMoZC5xdWVyeVRleHQpKSksQ2UoMSks''@;'; put 'put ''UmUoIm5nSWYiLCFkLnRhYmxlVHJ1ZSksQ2UoMyksaHIoImhpZGRlbiIsZC5ob3RUYWJsZS5oaWRkZW4pLFJlKCJsaWNlbnNlS2V5IixkLmhvdFRhYmxlLmxpY2Vuc2VLZXkpLENlKDMpLFJlKCJuZ0lmIixkLnRhYmxlVHJ1ZSYmIWQucmVzdHJpY3Rpb25zLnJlbW92ZUFkZFJlY29yZEJ1dHRv''@;'; put 'put ''biksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1kLkluZmluaXR5JiZkLmRhdGFTb3VyY2UmJmQuZGF0YVNvdXJjZS5sZW5ndGg+ZC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCksQ2UoMSksUmUoIm5nSWYi''@;'; put 'put ''LGQuc3VibWl0KSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLnN1Ym1pdExpbWl0Tm90aWNlKSxDZSg1KSxtcigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9ubHkgIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3Vi''@;'; put 'put ''bWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksQ2UoNiksUmUoImNsck1vZGFsT3BlbiIsZC5iYWRFZGl0KSxDZSgyKSxvcihkLmJhZEVkaXRUaXRsZXx8IkVycm9yIiksQ2UoMyksb3IoZC5iYWRFZGl0Q2F1c2Up''@;'; put 'put ''LENlKDQpLFJlKCJjbHJNb2RhbE9wZW4iLGQucGtOdWxsKSxDZSg5KSxSZSgiY2xyTW9kYWxPcGVuIixkLm5vUGtOdWxsKSxDZSg5KSxSZSgiY2xyTW9kYWxPcGVuIixkLnBrRHVwcyksQ2UoOCksUmUoIm5nRm9yT2YiLGQuZHVwbGljYXRlUGtJbmRleGVzKSxDZSg0KSxSZSgiY2xyTW9kYWxP''@;'; put 'put ''cGVuIixkLnRvb0xvbmcpLENlKDYpLFJlKCJuZ0Zvck9mIixkLmV4Y2VlZENlbGxzKSxDZSg0KSxSZSgibmdJZiIsZC5udWxsVmFyaWFibGVzKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLmZpbHRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg0''@;'; put 'put ''KSxtcigiICIsZC5saWJkcywiICIpLENlKDIpLFJlKCJuZ0lmIixkLmZpbHRlciksQ2UoNiksUmUoImNsckxvYWRpbmciLGQuc3VibWl0TG9hZGluZyksQ2UoMiksUmUoImNsck1vZGFsT3BlbiIsZC5xdWVyeUVyciksQ2UoNSksb3IoZC5xdWVyeUVyck1lc3NhZ2UpLENlKDYpLFJlKCJjbHJN''@;'; put 'put ''b2RhbE9wZW4iLGQuZGlzY2FyZFNvdXJjZUZpbGUpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNiksb3IoZC5maWxlbmFtZSksQ2UoNyksUmUoImNsck1vZGFsT3BlbiIsZC5maWxlUGFzc3dvcmRNb2RhbCkoImNsck1vZGFsU2l6ZSIsIm1kIikoImNs''@;'; put 'put ''ck1vZGFsQ2xvc2FibGUiLCExKSxDZSg5KSxSZSgibmdJZiIsZC5maWxlVW5sb2NrRXJyb3IpLENlKDMpLFJlKCJkaXNhYmxlZCIsaC52YWx1ZS5sZW5ndGg8MSksQ2UoMiksUmUoImNsck1vZGFsT3BlbiIsZC5tYW51YWxGaWxlRWRpdE1vZGFsKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xy''@;'; put 'put ''TW9kYWxDbG9zYWJsZSIsITEpLENlKDYpLG9yKGQuZmlsZW5hbWUpLENlKDcpLFJlKCJvcGVuIixkLmRhdGFzZXRJbmZvKSgiZHNtZXRhIixkLmRzbWV0YSksQ2UoMSksUmUoInZpZXdib3hNb2RhbCIsZC52aWV3Ym94ZXMpfX0sZGVwZW5kZW5jaWVzOlt4c2UsdWMseHMsWmksV2EsYUUsQnMs''@;'; put 'put ''T3MsQnUsa2Esb3Usc3UsWnUsYzIsZGgsVXMsWEYsdHdlLEtGLEJiLHpiLGpiLE15LFU3LFpiLEVzZSxrc2UsQXNlLEJFLGNVLG5VZSxpVWUsb1VlLERzZV0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtib3JkZXI6MH0uYnV0dG9uQmFyW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXXtwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udGVzdFJlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOnJnYmEoMjU1LDAsMCwuOCkhaW1wb3J0YW50fWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5maXJzdENv''@;'; put 'put ''bHVtbkhlYWRlclN0eWxlIGJ1dHRvbi5jaGFuZ2VUeXBle2Rpc3BsYXk6bm9uZX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxlLCBob3QtdGFibGVbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgICAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNjkwMTk2MDc4NCl9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNr''@;'; put 'put ''Z3JvdW5kOnJnYmEoNDgsMTA3LDAsLjQzMTM3MjU0OSl9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fS5pbmZvQmFy''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjE0cHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozcHg7Zm9udC1zaXplOjE2cHg7aGVpZ2h0OjMwcHg7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjgwJX0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7aGVpZ2h0OnVuc2V0O3doaXRlLXNwYWNlOm5vcm1hbH0uaW5mb0Jhcltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV06aG92ZXIgICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDp1bnNldH0ucGtIZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzY4NzY4Mjtjb2xvcjojZmZmO21hcmdpbjotMXB4fS5oZWFkZXJCYXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1z''@;'; put 'put ''OmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmZmZmY7YmFja2dyb3VuZDojZjVmNmZlfS5lcnJvci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMHB4O2hlaWdodDozMHB4O2NvbG9yOnJlZH0uYnRuQ3RybFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpmbGV4LWVuZH0uY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50fS5oaWRkZW5bX25nY29udGVudC0lQ09NUCVde3Zpc2liaWxpdHk6aGlkZGVufS5teS1kcm9wLXpvbmVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjpz''@;'; put 'put ''b2xpZCAxcHggbGlnaHRncmF5O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOndoaXRlc21va2U7Ym94LXNoYWRvdzppbnNldCAwIDAgNHB4IDJweCAjYTdhNWE1MmI7aGVpZ2h0OjUwdmh9Lm52LWZpbGUtb3Zlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOnNvbGlkIDJweCBncmVl''@;'; put 'put ''bn0uZmlsZS1kcm9wLXRleHRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucHJvZ3Jlc1N0YXRpY1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo5cHghaW1wb3J0YW50fS5wcm9ncmVzc1tfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0sIC5wcm9ncmVzcy1zdGF0aWNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOmNhbGMoMTAwJSAtIDE0cHgpfX0uaG90RWRpdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZXhjZWwtcGFyc2luZ1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxh''@;'; put 'put ''eTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9LmV4Y2VsLXBhcnNpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmRldGFpbHNbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotNDVw''@;'; put 'put ''eH0uZWRpdC1yZWNvcmQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuNik7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7d2lk''@;'; put 'put ''dGg6MTAwJTt6LWluZGV4OjUwMH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCl7LnByb2dyZXNTdGF0aWNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MzJweCFpbXBvcnRhbnR9LmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVdLCAuY2FyZC1mb290ZXJbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAwIDB9fS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAuOHJlbSAuOHJlbSFpbXBvcnRhbnQ7cGFkZGluZy10b3A6MH0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDow''@;'; put 'put ''O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2ZmZjt6LWluZGV4Oi0xfS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHg7bWFyZ2luLXRvcDoy''@;'; put 'put ''MHB4O2NvbG9yOiNmZmZ9I3N1Ym1pdEJ0bltfbmdjb250ZW50LSVDT01QJV0sICNjYW5jZWxTdWJtaXRCdG5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE1MHB4fSJdfSksY30pKCk7Y29uc3QgWFVlPVt7cGF0aDoiOmxpYk1lbSIsY29tcG9uZW50OlhBfSx7cGF0aDoiOmxpYk1lbS86Zmls''@;'; put 'put ''dGVySWQiLGNvbXBvbmVudDpYQX0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0iLGNvbXBvbmVudDpYQX0se3BhdGg6ImVkaXQtcmVjb3JkLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6WEF9XTtsZXQgSlVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLGRjLmZvckNoaWxkKFhVZSksZGNdfSksY30pKCksSkE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sX3Usb28sJGwsQzJdfSksY30pKCksUVVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaG9tZS1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJnF0KDAsInJv''@;'; put 'put ''dXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltmcF19KSxjfSkoKTtjb25zdCBlWmU9WyJzaWRlYmFyTmF2Il07ZnVuY3Rpb24gdFplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYSIsMTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoMykubmF2''@;'; put 'put ''aWdhdGVUb1ZpZXdlcigpKX0pLE5lKDEsIkRhdGEiKSx5ZSgpfX1mdW5jdGlvbiBuWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwxOSksTmUoMSwiQVBJIEV4cGxvcmVyIikseWUoKSl9ZnVuY3Rpb24gclplKGMsbCl7MSZjJiYobWUoMCwiYSIsMjApLE5lKDEsIkxpbmVhZ2UiKSx5ZSgpKX1mdW5j''@;'; put 'put ''dGlvbiBpWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwyMSksTmUoMSwiTWV0YWRhdGEiKSx5ZSgpKX1mdW5jdGlvbiBvWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwyMiksTmUoMSwiIFVzZXJzIikseWUoKSl9ZnVuY3Rpb24gc1plKGMsbCl7MSZjJiYobWUoMCwiYSIsMjMpLE5lKDEsIlN1Ym1pdHRl''@;'; put 'put ''ZCIpLHllKCkpfWZ1bmN0aW9uIGFaZShjLGwpezEmYyYmKG1lKDAsImEiLDI0KSxOZSgxLCJUbyBBcHByb3ZlIikseWUoKSl9ZnVuY3Rpb24gbFplKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxRZSgxLHRaZSwyLDAsImEiLDExKSxRZSgyLG5aZSwyLDAsImEiLDEy''@;'; put 'put ''KSxRZSgzLHJaZSwyLDAsImEiLDEzKSxRZSg0LGlaZSwyLDAsImEiLDE0KSxRZSg1LG9aZSwyLDAsImEiLDE1KSxRZSg2LHNaZSwyLDAsImEiLDE2KSxRZSg3LGFaZSwyLDAsImEiLDE3KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZp''@;'; put 'put ''ZXciKSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBU1ZJWUEiPT09YS5zZXJ2ZXJUeXBlKSxDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1hLnNlcnZlclR5cGUpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2''@;'; put 'put ''aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSl9fWZ1bmN0aW9uIGNa''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxOZSgzKSxxdCg0LCJjbHItaWNvbiIsOSkseWUoKSxRZSg1LGxaZSw4LDcsImNsci1kcm9wZG93bi1tZW51IiwxMCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgzKSxtcigi''@;'; put 'put ''ICIsYS5nZXRTdWJQYWdlKCksIiAiKX19ZnVuY3Rpb24gdVplKGMsbCl7MSZjJiZxdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBkWmUoYyxsKXsxJmMmJnF0KDAsImNsci10YWItY29udGVudCIpfWNvbnN0IGhaZT1mdW5jdGlvbigpe3JldHVyblsiL3ZpZXcvdXNlcm5hdi9yb2xl''@;'; put 'put ''cyJdfTtmdW5jdGlvbiBmWmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiIikoMSwiYnV0dG9uIiwyNikoMiwicCIsMjcpLHF0KDMsImNsci1pY29uIiwzMiksTmUoNCwiIFJvbGVzICIpLHllKCkoKSxRZSg1LGRaZSwxLDAsImNsci10YWItY29udGVudCIsMzApLHllKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1qZSgyKTtDZSgxKSxSZSgicm91dGVyTGluayIsJHMoMixoWmUpKSxDZSg0KSxSZSgiY2xySWZBY3RpdmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvcm9sZXMiKSl9fWNvbnN0IHBaZT1mdW5jdGlvbigpe3JldHVyblsiL3ZpZXcvdXNlcm5hdi91c2VycyJdfSxnWmU9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm5bIi92aWV3L3VzZXJuYXYvZ3JvdXBzIl19O2Z1bmN0aW9uIG1aZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWJzIiwyNSkoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjYpKDMsInAiLDI3KSxxdCg0LCJjbHItaWNvbiIsMjgpLE5lKDUsIiBVc2VycyIpLHllKCko''@;'; put 'put ''KSxxdCg2LCJjbHItdGFiLWNvbnRlbnQiKSx5ZSgpLG1lKDcsImNsci10YWIiKSg4LCJidXR0b24iLDI2KSg5LCJwIiwyNykscXQoMTAsImNsci1pY29uIiwyOSksTmUoMTEsIiBHcm91cHMiKSx5ZSgpKCksUWUoMTIsdVplLDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCkseWUoKSxRZSgxMyxm''@;'; put 'put ''WmUsNiwzLCJjbHItdGFiIiwzMSkseWUoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMiksUmUoInJvdXRlckxpbmsiLCRzKDQscFplKSksQ2UoNiksUmUoInJvdXRlckxpbmsiLCRzKDUsZ1plKSksQ2UoNCksUmUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L2dy''@;'; put 'put ''b3VwcyIpKSxDZSgxKSxSZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKX19ZnVuY3Rpb24gdlplKGMsbCl7MSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSgxLCJhIiwzMyksTmUoMiwiVGFibGVzIikseWUoKSxtZSgzLCJhIiwzNCksTmUoNCwiRmlsZXMiKSx5ZSgpKCkpfWZ1''@;'; put 'put ''bmN0aW9uIF9aZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxOZSgzKSxxdCg0LCJjbHItaWNvbiIsOSkseWUoKSxRZSg1LHZaZSw1LDAsImNsci1kcm9wZG93bi1tZW51IiwxMCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoKTtD''@;'; put 'put ''ZSgzKSxtcigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19Y29uc3QgYlplPVsiKiJdO2xldCBuMz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9yb3V0ZXI9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuX3Nhc1NlcnZpY2U9aCx0aGlzLnNjcm9sbGVkVG9Cb3R0b209''@;'; put 'put ''bmV3IEVyLHRoaXMuc2lkZWJhck9wZW49ITAsdGhpcy5zaWRlYmFyV2lkdGg9bnVsbCx0aGlzLnNpZGViYXJNYXhXaWR0aD1udWxsLHRoaXMucmVzaXppbmc9ITEsdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5zYXNqc0NvbmZpZz10aGlzLl9zYXNTZXJ2aWNlLmdl''@;'; put 'put ''dFNhc2pzQ29uZmlnKCksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpfW5nT25Jbml0KCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaWRlYmFyVG9nZ2xlLnN1YnNjcmliZShhPT57dGhpcy5zaWRlYmFyT3Blbj1hP2Eub3BlbjohdGhpcy5zaWRlYmFyT3Bl''@;'; put 'put ''bix0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pfW9uVHJlZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkLnNjcm9sbFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZzZXRIZWlnaHQtMTAmJnRoaXMuc2Nyb2xsZWRUb0JvdHRvbS5lbWl0KCl9aXNNYWluUm91dGUo''@;'; put 'put ''YSl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoYSl9Z2V0U3ViUGFnZSgpe3JldHVybiB0aGlzLl9yb3V0ZXIudXJsLnNwbGl0KCIvIilbMl19bmF2aWdhdGVUb1ZpZXdlcigpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSIiLHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJs''@;'; put 'put ''KCIvdmlldy9kYXRhIil9cmVzaXplU3RhcnQoKXt0aGlzLnJlc2l6aW5nPSEwLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uc3R5bGUuY3NzVGV4dD0idXNlci1zZWxlY3Q6IG5vbmUifXJlc2l6ZUVuZCgpe3RoaXMucmVzaXppbmc9ITEsZG9jdW1lbnQuZ2V0RWxl''@;'; put 'put ''bWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSIifW9uTW91c2VNb3ZlKGEpe2lmKHRoaXMucmVzaXppbmcpe3RoaXMuc2lkZWJhcldpZHRoPWEuY2xpZW50WDtsZXQgZD1kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJuYXYtdHJlZSIpWzBdO3RoaXMuc2lk''@;'; put 'put ''ZWJhcldpZHRoJiZ0aGlzLmlzT3ZlcmZsb3duKGQpJiYodGhpcy5zaWRlYmFyTWF4V2lkdGg9dGhpcy5zaWRlYmFyV2lkdGg+PTM3NT90aGlzLnNpZGViYXJXaWR0aCsxMDp0aGlzLnNpZGViYXJNYXhXaWR0aCl9fW9uTW91c2VVcChhKXt0aGlzLnJlc2l6aW5nJiZ0aGlzLnJlc2l6ZUVuZCgp''@;'; put 'put ''fWlzT3ZlcmZsb3duKGEpe3JldHVybiBhLnNjcm9sbFdpZHRoPmEuY2xpZW50V2lkdGh9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KERzKSx0dCh2bCksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNp''@;'; put 'put ''ZGViYXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhlWmUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5zaWRlYmFyTmF2PWguZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgibW91c2Vtb3ZlIixmdW5jdGlvbihmKXtyZXR1cm4g''@;'; put 'put ''ZC5vbk1vdXNlTW92ZShmKX0sMCxmZikoIm1vdXNldXAiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uTW91c2VVcChmKX0sITEsZmYpfSxvdXRwdXRzOntzY3JvbGxlZFRvQm90dG9tOiJzY3JvbGxlZFRvQm90dG9tIn0sbmdDb250ZW50U2VsZWN0b3JzOmJaZSxkZWNsczo5LHZhcnM6MTMsY29u''@;'; put 'put ''c3RzOltbImlkIiwic2lkZWJhck5hdiJdLFsic2lkZWJhck5hdiIsIiJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBzdWItZHJvcGRvd24iLDQsIm5nSWYiXSxbImNsYXNzIiwicC0xMCIsNCwibmdJZiJdLFsxLCJuYXYtZGl2aWRlciJdLFsxLCJuYXYtdHJlZSIs''@;'; put 'put ''Mywic2Nyb2xsIl0sWzEsInJlc2l6ZS1oYW5kbGUiLDMsIm1vdXNlZG93biJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic3ViLWRyb3Bkb3duIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImRyb3Bkb3duLXRvZ2dsZSIsImJ0biIsImJ0bi1saW5rIl0sWyJz''@;'; put 'put ''aGFwZSIsImNhcmV0IGRvd24iXSxbNCwiY2xySWZPcGVuIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3ZpeWEtYXBpLWV4''@;'; put 'put ''cGxvcmVyIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L2xpbmVhZ2UiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJy''@;'; put 'put ''b3V0ZXJMaW5rIiwiL3ZpZXcvbWV0YWRhdGEiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZl''@;'; put 'put ''cnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvc3VibWl0dGVkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS90b2FwcHJvdmUiLCJy''@;'; put 'put ''b3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwzLCJjbGljayJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3ZpeWEtYXBpLWV4cGxvcmVyIiwi''@;'; put 'put ''cm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L2xpbmVhZ2UiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbWV0YWRhdGEi''@;'; put 'put ''LCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJv''@;'; put 'put ''dmUvc3VibWl0dGVkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS90b2FwcHJvdmUiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWzEsInAtMTAiXSxbImNsclRhYkxpbmsiLCIi''@;'; put 'put ''LDEsInVzZXItbmF2LWJ0biIsMywicm91dGVyTGluayJdLFsxLCJ6ZXJvLW1hcmdpbiJdLFsic2hhcGUiLCJ1c2VyIl0sWyJzaGFwZSIsInVzZXJzIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2tzLWdyb3VwIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIi''@;'; put 'put ''LCJyb3V0ZXJMaW5rIiwiL2hvbWUvdGFibGVzIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL2ZpbGVzIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEm''@;'; put 'put ''YSYmKFRpKCksbWUoMCwiY2xyLXZlcnRpY2FsLW5hdiIsMCwxKSxRZSgyLGNaZSw2LDEsImRpdiIsMiksUWUoMyxtWmUsMTQsNiwiY2xyLXRhYnMiLDMpLFFlKDQsX1plLDYsMSwiZGl2IiwyKSxxdCg1LCJkaXYiLDQpLG1lKDYsImRpdiIsNSkseHQoInNjcm9sbCIsZnVuY3Rpb24oZil7cmV0''@;'; put 'put ''dXJuIGQub25UcmVlU2Nyb2xsKGYpfSksa3IoNykseWUoKSxtZSg4LCJzcGFuIiw2KSx4dCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiBkLnJlc2l6ZVN0YXJ0KCl9KSx5ZSgpKCkpLDImYSYmKEh1KCJ3aWR0aCIsZC5zaWRlYmFyV2lkdGgsInB4IikoIm1heC13aWR0aCIsZC5zaWRl''@;'; put 'put ''YmFyTWF4V2lkdGgsInB4IiksaHIoImNsb3NlZCIsIWQuc2lkZWJhck9wZW4pKCJyZXNpemluZyIsZC5yZXNpemluZyksQ2UoMiksUmUoIm5nSWYiLGQuaXNNYWluUm91dGUoInZpZXciKSksQ2UoMSksUmUoIm5nSWYiLGQuaXNNYWluUm91dGUoInZpZXcvdXNlcm5hdiIpKSxDZSgxKSxSZSgi''@;'; put 'put ''bmdJZiIsZC5pc01haW5Sb3V0ZSgiaG9tZSIpKSxDZSg0KSxocigicmVzaXppbmciLGQucmVzaXppbmcpKX0sZGVwZW5kZW5jaWVzOltaaSxrYSxFOCxjMixMcCxPcCxkZyxScCxJcCxjZyxaUSxZUSxOZixhZyxsZyxCdSxXX10sc3R5bGVzOlsiY2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV17d2lkdGg6MjcycHg7bWluLXdpZHRoOjI3MnB4O2hlaWdodDoxMDAlO21heC13aWR0aDozNzVweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2hhZG93OjAgMCA1cHggIzAwMDAwMDFmO2JhY2tncm91bmQtY29sb3I6I2ZmZiFpbXBvcnRhbnR9Y2xyLXZlcnRpY2FsLW5hdltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICAuc3VuLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjM2cHh9Y2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LXRyZWVbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO292ZXJmbG93LXk6YXV0b31jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2LmNsb3NlZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6LTI3MnB4fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnJlc2l6ZS1oYW5kbGVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3Jp''@;'; put 'put ''Z2h0Oi0zcHg7Ym9yZGVyLXJpZ2h0OjRweCBzb2xpZCAjODBiNDQxO2N1cnNvcjpjb2wtcmVzaXplO29wYWNpdHk6MDt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZS1pbi1vdXR9Y2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAucmVzaXplLWhhbmRsZVtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV06aG92ZXJ7b3BhY2l0eTouNX1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNpemUtaGFuZGxlLnJlc2l6aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9Y2xyLXZlcnRpY2FsLW5hdi5yZXNpemluZ1tfbmdjb250ZW50LSVDT01QJV17dHJhbnNp''@;'; put 'put ''dGlvbjpub25lIWltcG9ydGFudH0ubmF2LWRpdmlkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNkM2QzZDM7bWFyZ2luLWJvdHRvbTowfS5wYWdlLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDtmb250LXNpemU6MThweDt0ZXh0''@;'; put 'put ''LWFsaWduOmNlbnRlcn0uemVyby1tYXJnaW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbjowfS51c2VyLW5hdi1idG5bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAycHh9I3NpZGViYXJOYXZbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6MjAwfUBtZWRpYSAobWF4LXdpZHRoOiA3''@;'; put 'put ''NjdweCl7I3NpZGViYXJOYXZbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3RvcDowfX0iXX0pLGN9KSgpO2Z1bmN0aW9uIHlaZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiB3WmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtt''@;'; put 'put ''ZSgwLCJjbHItaWNvbiIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixqdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIENaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAs''@;'; put 'put ''ImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLmxpYnJhcmllc1NlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5saWJyYXJ5''@;'; put 'put ''T25GaWx0ZXIoKSl9KSx5ZSgpLFFlKDQseVplLDEsMCwiY2xyLWljb24iLDEwKSxRZSg1LHdaZSwxLDAsImNsci1pY29uIiwxMSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPWplKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIs''@;'; put 'put ''YS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBTWmUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gTVplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEzKSx4dCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7QnQoYSksamUoKTtjb25zdCBoPSRpKDMpLGY9amUoMikuJGltcGxpY2l0LF89amUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixqdChfLnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMiKSl9KSx5ZSgpfX1mdW5jdGlvbiB4WmUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0IiwxOCwxOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgyKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0''@;'; put 'put ''KGEpO2NvbnN0IGg9amUoMikuJGltcGxpY2l0O3JldHVybiBqdChqZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSx5ZSgpLFFlKDQsU1plLDEsMCwiY2xyLWljb24iLDEwKSxRZSg1LE1aZSwxLDAsImNsci1pY29uIiwxMSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPWpl''@;'; put 'put ''KDIpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEVaZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI2KX1mdW5j''@;'; put 'put ''dGlvbiBrWmUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gQVplKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLHllKCkpfWZ1bmN0aW9uIFRaZShjLGwp''@;'; put 'put ''e2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxRZSgxLEFaZSwyLDAsInNwYW4iLDI5KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKS5uZ1ZhcjtDZSgxKSxSZSgibmdJZiIsYSl9fWZ1bmN0aW9uIERaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10''@;'; put 'put ''b29sdGlwIikoMSwiYnV0dG9uIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkubmdWYXIsXz1qZSgpLiRpbXBsaWNpdCxUPWplKDIpLiRpbXBsaWNpdCxXPWplKCk7cmV0dXJuIGp0KGY/IiI6Vy5vblRhYmxlQ2xpY2soXyxUKSl9KSx6cigyLDIyKSxRZSgzLEVaZSwx''@;'; put 'put ''LDAsImNsci1pY29uIiwyMyksUWUoNCxrWmUsMSwwLCJjbHItaWNvbiIsMjQpLFlyKCksTmUoNSkseWUoKSxRZSg2LFRaZSwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDI1KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9amUoKS4kaW1wbGljaXQsaD1qZSgyKS4kaW1wbGljaXQs''@;'; put 'put ''Zj1qZSgpO0NlKDEpLGhyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoInRhYmxlLWFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxDZSgxKSxSZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwhMCksQ2UoMSksUmUoIm5n''@;'; put 'put ''U3dpdGNoQ2FzZSIsITEpLENlKDEpLG1yKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIElaZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlLW5vZGUiKSxRZSgxLERaZSw3LDgsImNsci10b29sdGlwIiwyMCkseWUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1q''@;'; put 'put ''ZSgzKTtDZSgxKSxSZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIExaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEp''@;'; put 'put ''O2NvbnN0IGY9amUoKS4kaW1wbGljaXQsXz1qZSgpO3JldHVybiBfLnRyZWVOb2RlQ2xpY2tlZChoLGYpLGp0KF8ubGliPWYuTElCUkFSWVJFRil9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1l''@;'; put 'put ''KDEsInAiLDE2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpLiRpbXBsaWNpdCxmPWplKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixqdChmLmxpYnJhcnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxxdCgyLCJjbHItaWNvbiIsMTcpLE5lKDMpLHllKCks''@;'; put 'put ''UWUoNCx4WmUsNiwzLCJjbHItdHJlZS1ub2RlIiwwKSxRZSg1LElaZSwyLDEsImNsci10cmVlLW5vZGUiLDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKCkuJGltcGxpY2l0O2hyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxv''@;'; put 'put ''YWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgzKSxtcigiICIsYS5MSUJSQVJZUkVGLCIgIiksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVzKSxDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBSWmUoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLExaZSw2''@;'; put 'put ''LDcsImNsci10cmVlLW5vZGUiLDE0KSxZcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIE9aZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMzApKDEsImRpdiIsMzEpKDIsInNwYW4iLDMyKSxOZSgzLCIgTG9hZGluZy4uLiAi''@;'; put 'put ''KSx5ZSgpKCkoKSl9ZnVuY3Rpb24gUFplKGMsbCl7MSZjJiYobWUoMCwiaDMiLDM2KSxOZSgxLCIgUGxlYXNlIHNlbGVjdCBhIHRhYmxlICIpLHllKCkpfWZ1bmN0aW9uIEZaZShjLGwpezEmYyYmKG1lKDAsImgzIiwzNiksTmUoMSwiIE5vIEVkaXRhYmxlIFRhYmxlcyBDb25maWd1cmVkICIp''@;'; put 'put ''LHllKCkpfWZ1bmN0aW9uIEhaZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzMpLHF0KDEsImNsci1pY29uIiwzNCksUWUoMixQWmUsMiwwLCJoMyIsMzUpLFFlKDMsRlplLDIsMCwiaDMiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgyKSxSZSgibmdJZiIsKG51bGw9PWEudHJl''@;'; put 'put ''ZU5vZGVMaWJyYXJpZXM/bnVsbDphLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksQ2UoMSksUmUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPDEpfX1sZXQgTlplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSxkLGgsZixfLFQpe3RoaXMucm91dGU9YSx0aGlzLnJvdXRlcj1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmhlbHBlclNlcnZpY2U9Zix0aGlzLmV2ZW50U2VydmljZT1fLHRoaXMuc2FzU2VydmljZT1ULHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9bnVsbCx0aGlzLmxpYnJhcmllc1Nl''@;'; put 'put ''YXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmxvYWRpbmc9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2gu''@;'; put 'put ''TElCUkFSWUlEIT09ZC5MSUJSQVJZSUQmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQpe2QuZXhwYW5k''@;'; put 'put ''ZWQ9IWQuZXhwYW5kZWQsZC5leHBhbmRlZCYmIXRoaXMudGFibGUmJnRoaXMuc2VsZWN0TGlicmFyeShhLCExLGQpLHRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9c2VsZWN0TGlicmFyeShhLGQsaCl7aC5sb2FkaW5nVGFibGVzPSEwO2xldCBmLF89W107aWYo''@;'; put 'put ''dGhpcy5saWJzQW5kVGFibGVzJiYoZj10aGlzLmxpYnNBbmRUYWJsZXNbYV0sdGhpcy50YWJsZT12b2lkIDAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hKSl7bGV0IFQ9Zi5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuLTE9PT1fLmluZGV4T2YoVykmJihfLnB1c2goVyksITApfSk7dGhp''@;'; put 'put ''cy50YWJsZXM9VCxHbi5lZGl0b3IubGlicmFyaWVzPXRoaXMubGlicmFyaWVzfUduLmVkaXRvci5saWJyYXJ5PWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0hMH1zZWxlY3RUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZp''@;'; put 'put ''KGZ1bmN0aW9uKigpe2gubGliVGFiPWgubGliKyIuIitoLnRhYmxlLGguc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLEduLmVkaXRvci50YWJsZT1hLGR8fGguY2xlYXJHbG9iYWxzRmlsdGVyKCl9KSgpfWNsZWFyR2xvYmFsc0ZpbHRlcigpe0duLmVkaXRvci5maWx0ZXIubGliZHM9IiIs''@;'; put 'put ''R24uZWRpdG9yLmZpbHRlci53aGVyZUNsYXVzZT0iIixHbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIsR24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEduLmVkaXRvci5maWx0ZXIudmFscz1bXSxHbi5lZGl0b3IuZmlsdGVyLmNvbHM9W119bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJu''@;'; put 'put ''ISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09PXRoaXMubGliJiZkPT09dGhpcy50YWJsZX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0''@;'; put 'put ''aGlzLnRyZWVOb2RlTGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZUkVGIiksR24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9b25UYWJsZUNsaWNrKGEsZCl7dGhpcy50YWJsZT1hLHRoaXMubGliPWQuTElCUkFSWVJFRix0aGlzLnNl''@;'; put 'put ''bGVjdFRhYmxlKGEpLHRoaXMuZWRpdFRhYmxlKCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy5saWIrIi4iK3RoaXMudGFibGUpfWdldExpYnJhcnlUYWJsZVN0YXRlKCl7aWYobnVsbCE9PUduLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyYm''@;'; put 'put ''KHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9R24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzKSwiIiE9PUduLmVkaXRvci5saWJyYXJ5KXt0aGlzLmxpYj1Hbi5lZGl0b3IubGlicmFyeTtsZXQgYT1udWxsO3RoaXMudHJlZU5vZGVMaWJyYXJpZXMmJihhPXRoaXMudHJlZU5vZGVMaWJyYXJpZXMu''@;'; put 'put ''ZmluZChkPT5kLkxJQlJBUllSRUY9PT10aGlzLmxpYikpLHRoaXMuc2VsZWN0TGlicmFyeShHbi5lZGl0b3IubGlicmFyeSwhMCxhKX19Z2V0RnJvbUdsb2JhbHMoKXt0aGlzLmxpYnNBbmRUYWJsZXM9R24uZWRpdG9yLmxpYnNBbmRUYWJsZXMsdGhpcy5saWJyYXJpZXM9R24uZWRpdG9yLmxp''@;'; put 'put ''YnJhcmllcyx0aGlzLmdldExpYnJhcnlUYWJsZVN0YXRlKCksdGhpcy5sb2FkaW5nPSExfW5nQWZ0ZXJDb250ZW50SW5pdCgpe0duLmVkaXRvci5zdGFydHVwU2V0P3RoaXMuZ2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgo''@;'; put 'put ''KT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChEcyksdHQoV2wpLHR0KEMwKSx0dChBYyksdHQodmwpLHR0KG9hKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImhvbWUtY29t''@;'; put 'put ''cG9uZW50Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQtYmxvY2siXSxbImNsYXNz''@;'; put 'put ''Iiwic3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJu''@;'; put 'put ''YW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJz''@;'; put 'put ''aGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIs''@;'; put 'put ''ImNsckV4cGFuZGVkQ2hhbmdlIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2Rl''@;'; put 'put ''bCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFwZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2Fz''@;'; put 'put ''ZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiwi''@;'; put 'put ''Y2xyU2l6ZSIsImxnIl0sWzQsIm5nSWYiXSxbMSwic3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5m''@;'; put 'put ''byIsImljb24tZGMtZmlsbCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIikoMSwiY2xyLXRyZWUiKSxRZSgyLENa''@;'; put 'put ''ZSw2LDMsImNsci10cmVlLW5vZGUiLDApLFFlKDMsUlplLDIsMSwibmctY29udGFpbmVyIiwxKSx5ZSgpKCksbWUoNCwiZGl2IiwyKSg1LCJkaXYiLDMpLFFlKDYsT1plLDQsMCwiZGl2Iiw0KSxRZSg3LEhaZSw0LDIsImRpdiIsNSkseWUoKSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsKG51''@;'; put 'put ''bGw9PWQudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDpkLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksQ2UoMSksUmUoIm5nRm9yT2YiLGQudHJlZU5vZGVMaWJyYXJpZXMpLENlKDMpLFJlKCJuZ0lmIixkLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhZC5sb2FkaW5nKSl9LGRlcGVuZGVu''@;'; put 'put ''Y2llczpbV2EsQnMsT3MsZGQsZzEsRHAsa2EsWnUsYzIsZjEsQmIsemIsamIsbjMseHMsWmksbmQsdGgsVTddLHN0eWxlczpbImNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LmNhcmQtYmxvY2tb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3BhZGRpbmc6MH0ubm8tdGFibGUtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoxMDAlfSAgY2xyLWljb24uaXMtYmx1ZSwgICBjbHItaWNvbi5pcy1pbmZve2ZpbGw6IzZhOTIzNX0uc3Bp''@;'; put 'put ''bm5lci13cmFwcGVyLWZ1bGxwYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0iXX0pLGN9KSgpO2NvbnN0IFZaZT1jPT57Zm9yKGNvbnN0IGwgaW4gYylpZigi''@;'; put 'put ''X19yb3dOdW1fXyIhPT1sKXJldHVybiExO3JldHVybiEwfSxkVT1jPT57Y29uc3QgYT1jLm1hdGNoKC9SXFsoXGQrKVxdQ1xbKFxkKylcXS8pO3JldHVybiBhP3tyb3c6cGFyc2VJbnQoYVsxXSwxMCksY29sdW1uOnBhcnNlSW50KGFbMl0sMTApfTpudWxsfSxPc2U9KGMsbCk9PntpZihjLnN0''@;'; put 'put ''YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYoYz1jLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxjLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBhPWRVKGMpO2lmKGEpe2NvbnN0e3JvdzpkLGNvbHVtbjpofT1hO2M9R2MudXRpbHMuZW5jb2RlX2NlbGwoe3I6ZC0xLGM6aC0xfSl9fWlm''@;'; put 'put ''KGMuc3RhcnRzV2l0aCgiTUFUQ0ggIikpe2xldCBhPSIiO2NvbnN0IGQ9Yy5tYXRjaCgvQ1xbXGQrXF06KC4rKS8pO2QmJihhPWRbMV0pO2NvbnN0IGY9Yy5zcGxpdCgiICIpWzFdO2xldCBfPSIiLFQ9LTEsVz0iIjtpZihpc05hTihOdW1iZXIoZikpP189ZjpUPXBhcnNlSW50KGYpLC0xIT09''@;'; put 'put ''VCl7Y29uc3Qgd2U9bFtULTFdO2Zvcihjb25zdCBFZSBpbiB3ZSlpZigiX19yb3dOdW1fXyIhPT1FZSYmd2VbRWVdPT09YSl7Vz1FZStUO2JyZWFrfX1lbHNlIGZvcihsZXQgd2U9MDt3ZTxsLmxlbmd0aDt3ZSsrKWlmKGxbd2VdW19dPT09YSl7Vz1fKyh3ZSsxKTticmVha31jb25zdCBpZT1H''@;'; put 'put ''Yy51dGlscy5kZWNvZGVfY2VsbChXKSxnZT1kVShjKTtpZihnZSl7Y29uc3R7cm93OndlLGNvbHVtbjpFZX09Z2U7Yz1HYy51dGlscy5lbmNvZGVfY2VsbCh7cjppZS5yK3dlLGM6aWUuYytFZX0pfX1yZXR1cm4gY30sVVplPVsiZmlsZVVwbG9hZElucHV0Il07ZnVuY3Rpb24gWlplKGMsbCl7''@;'; put 'put ''MSZjJiYobWUoMCwiZGl2IiwyOCkscXQoMSwiY2xyLXNwaW5uZXIiLDI5KSx5ZSgpKX1mdW5jdGlvbiBZWmUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMCl9ZnVuY3Rpb24gV1plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDMxKSx4dCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpO3JldHVybiBoLnNlYXJjaFN0cmluZz0iIixqdChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gR1plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7enIoMCksbWUoMSwiY2xyLXRyZWUtbm9kZSIpKDIsImJ1dHRvbiIs''@;'; put 'put ''MzIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoKS54bG1hcE9uQ2xpY2soZikpfSkscXQoMywiY2xyLWljb24iLDMzKSxOZSg0KSx5ZSgpKCksWXIoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1qZSgpO0NlKDIpLGhy''@;'; put 'put ''KCJ0YWJsZS1hY3RpdmUiLGQuaXNBY3RpdmVYTE1hcChhLmlkKSksQ2UoMiksbXIoIiAiLGEuaWQsIiAiKX19ZnVuY3Rpb24gJFplKGMsbCl7MSZjJiYobWUoMCwiaDMiLDM3KSxOZSgxLCIgUGxlYXNlIHNlbGVjdCBhIG1hcCAiKSx5ZSgpKX1mdW5jdGlvbiBxWmUoYyxsKXsxJmMmJihtZSgw''@;'; put 'put ''LCJoMyIsMzcpLE5lKDEsIiBObyBleGNlbCBtYXAgaXMgZm91bmQgIikseWUoKSl9ZnVuY3Rpb24gS1plKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzNCkscXQoMSwiY2xyLWljb24iLDM1KSxRZSgyLCRaZSwyLDAsImgzIiwzNiksUWUoMyxxWmUsMiwwLCJoMyIsMzYpLHllKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1qZSgpO0NlKDIpLFJlKCJuZ0lmIixhLnhsbWFwcy5sZW5ndGg+MCksQ2UoMSksUmUoIm5nSWYiLGEueGxtYXBzLmxlbmd0aDwxKX19ZnVuY3Rpb24gWFplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzOCkoMSwic3BhbiIsMzkpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCks''@;'; put 'put ''bWUoMywiZGl2IikoNCwiaDQiKSxOZSg1KSx5ZSgpKCkoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoNSksb3IoYS5pc0xvYWRpbmdEZXNjKX19ZnVuY3Rpb24gSlplKGMsbCl7MSZjJiZxdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBRWmUoYyxsKXsxJmMmJnF0KDAsImNsci10YWIt''@;'; put 'put ''Y29udGVudCIpfWZ1bmN0aW9uIGVZZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gdFllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw0MCkseHQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5vblNob3dVcGxvYWRNb2RhbCgp''@;'; put 'put ''KX0pLG1lKDEsImNsci10YWJzIikoMiwiY2xyLXRhYiIpKDMsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCk7cmV0dXJuIGp0KGguc2VsZWN0ZWRUYWI9aC5UYWJzRW51bS5SdWxlcyl9KSxOZSg0LCJSdWxlcyIpLHllKCksUWUoNSxKWmUsMSww''@;'; put 'put ''LCJjbHItdGFiLWNvbnRlbnQiLDQyKSx5ZSgpLG1lKDYsImNsci10YWIiKSg3LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpO3JldHVybiBqdChoLnNlbGVjdGVkVGFiPWguVGFic0VudW0uRGF0YSl9KSxOZSg4LCJEYXRhIikseWUoKSxRZSg5''@;'; put 'put ''LFFaZSwxLDAsImNsci10YWItY29udGVudCIsNDIpLHllKCkoKSxRZSgxMCxlWWUsMSwwLCJuZy1jb250YWluZXIiLDQzKSxtZSgxMSwiZGl2Iiw0NCkoMTIsImgzIiw0NSksTmUoMTMpLHllKCksbWUoMTQsImkiLDQ1KSxOZSgxNSkseWUoKSxtZSgxNiwiaDUiLDQ1KSxOZSgxNywiIFJ1bGVz''@;'; put 'put ''IFNvdXJjZTogIiksbWUoMTgsImEiLDQ2KSxOZSgxOSkseWUoKSgpLG1lKDIwLCJoNSIsNDUpLE5lKDIxLCIgVGFyZ2V0IGRhdGFzZXQ6ICIpLG1lKDIyLCJhIiw0NiksTmUoMjMpLHllKCkoKSgpLG1lKDI0LCJkaXYiLDQ3KSxxdCgyNSwiaG90LXRhYmxlIiw0OCkseWUoKSgpfWlmKDImYyl7''@;'; put 'put ''Y29uc3QgYT1qZSgpLGQ9JGkoNDEpO0NlKDUpLFJlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXMpLENlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uRGF0YSksQ2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQp''@;'; put 'put ''LENlKDMpLG1yKCIgIixhLnNlbGVjdGVkWExNYXAuaWQsIiAiKSxDZSgyKSxvcihhLnNlbGVjdGVkWExNYXAuZGVzY3JpcHRpb24pLENlKDMpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2EucnVsZXNTb3VyY2UpLENlKDEpLG1yKCIgIixhLnJ1bGVzU291cmNlLCIgIiksQ2UoMyks''@;'; put 'put ''UmUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTKSxDZSgxKSxtcigiICIsYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTLCIgIiksQ2UoMiksUmUoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTAp''@;'; put 'put ''KCJkYXRhIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXM6YS54bERhdGEpKCJjb2xIZWFkZXJzIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXNIZWFkZXJzOmEueGxVcGxvYWRIZWFkZXIpKCJjb2x1bW5zIixhLnNlbGVj''@;'; put 'put ''dGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXNDb2x1bW5zOmEueGxVcGxvYWRDb2x1bW5zKSgiZmlsdGVycyIsITApKCJoZWlnaHQiLCIxMDAlIikoIm1vZGlmeUNvbFdpZHRoIixhLm1heFdpZHRoQ2hlY2tlcikoImNlbGxzIixhLmdldENlbGxDb25maWd1cmF0aW9uKSgi''@;'; put 'put ''bWF4Um93cyIsYS5ob3RUYWJsZU1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgicm93SGVhZGVycyIsYS5yb3dIZWFkZXJzKSgicm93SGVhZGVyV2lkdGgiLDE1KSgicm93SGVpZ2h0cyIsMjApKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlTGljZW5zZUtleSl9fWZ1bmN0aW9uIG5Z''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoMikub25TaG93VXBsb2FkTW9kYWwoKSl9KSxxdCgyLCJjbHItaWNvbiIsNTMpLG1lKDMsInNwYW4iKSxOZSg0LCJV''@;'; put 'put ''cGxvYWQiKSx5ZSgpKCkoKX19ZnVuY3Rpb24gclllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgyKS5zdWJtaXRFeGNlbCgpKX0pLHF0KDIsImNsci1pY29uIiw1''@;'; put 'put ''MyksbWUoMywic3BhbiIpLE5lKDQsIlN1Ym1pdCIpLHllKCkoKSgpfX1mdW5jdGlvbiBpWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDU0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLmRpc2NhcmRFeHRy''@;'; put 'put ''YWN0ZWREYXRhKCkpfSkscXQoMiwiY2xyLWljb24iLDU1KSxtZSgzLCJzcGFuIiksTmUoNCwiRGlzY2FyZCIpLHllKCkoKSgpfX1mdW5jdGlvbiBvWWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQ5KSxRZSgxLG5ZZSw1LDAsImRpdiIsNTApLFFlKDIsclllLDUsMCwiZGl2Iiw1MCksUWUo''@;'; put 'put ''MyxpWWUsNSwwLCJkaXYiLDUwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgxKSxSZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1VwbG9hZCksQ2UoMSksUmUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9TdWJtaXQpLENlKDEpLFJlKCJu''@;'; put 'put ''Z0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvU3VibWl0KX19dmFyIHlkPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9NYXBTZWxlY3RlZD0wXT0iTm9NYXBTZWxlY3RlZCIsY1tjLkZldGNoaW5nUnVsZXM9MV09IkZldGNoaW5nUnVsZXMiLGNbYy5SZWFkeVRvVXBsb2FkPTJd''@;'; put 'put ''PSJSZWFkeVRvVXBsb2FkIixjW2MuRXh0cmFjdGluZ0RhdGE9M109IkV4dHJhY3RpbmdEYXRhIixjW2MuUmVhZHlUb1N1Ym1pdD00XT0iUmVhZHlUb1N1Ym1pdCIsY1tjLlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhPTVdPSJTdWJtaXR0aW5nRXh0cmFjdGVkRGF0YSIsY1tjLlN1Ym1pdHRpbmc9''@;'; put 'put ''Nl09IlN1Ym1pdHRpbmciLGN9KHlkfHx7fSksUUE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SdWxlcz0wXT0iUnVsZXMiLGNbYy5EYXRhPTFdPSJEYXRhIixjfShRQXx8e30pO2xldCBQc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXt0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9Xyx0aGlzLnNhc1N0b3JlU2VydmljZT1ULHRoaXMuc2FzU2VydmljZT1XLHRoaXMuY29udGVudENvbnRhaW5lckNsYXNzPSEwLHRoaXMuZmlsZVVwbG9hZElucHV0''@;'; put 'put ''Q29tcExpc3Q9bmV3IGVoLHRoaXMuU3RhdHVzRW51bT15ZCx0aGlzLlRhYnNFbnVtPVFBLHRoaXMuc2VsZWN0ZWRUYWI9UUEuUnVsZXMsdGhpcy5ydWxlc1NvdXJjZT1Hbi5kY0xpYisiLk1QRV9YTE1BUF9SVUxFUyIsdGhpcy54bG1hcHM9W10sdGhpcy5zZWxlY3RlZFhMTWFwPXZvaWQgMCx0''@;'; put 'put ''aGlzLnNlYXJjaFN0cmluZz0iIix0aGlzLnhsbWFwc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXlkLk5vTWFwU2VsZWN0ZWQsdGhpcy54bG1hcFJ1bGVzSGVhZGVycz1bIlhMTUFQX1NIRUVUIiwiWExNQVBfUkFOR0VfSUQi''@;'; put 'put ''LCJYTE1BUF9TVEFSVCIsIlhMTUFQX0ZJTklTSCJdLHRoaXMueGxtYXBSdWxlc0NvbHVtbnM9W3tkYXRhOiJYTE1BUF9TSEVFVCJ9LHtkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJYTE1BUF9TVEFSVCJ9LHtkYXRhOiJYTE1BUF9GSU5JU0gifV0sdGhpcy54bG1hcFJ1bGVzPVtdLHRo''@;'; put 'put ''aXMueGxVcGxvYWRIZWFkZXI9WyJYTE1BUF9SQU5HRV9JRCIsIlJPV19OTyIsIkNPTF9OTyIsIlZBTFVFX1RYVCJdLHRoaXMueGxVcGxvYWRDb2x1bW5zPVt7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiUk9XX05PIn0se2RhdGE6IkNPTF9OTyJ9LHtkYXRhOiJWQUxVRV9UWFQifV0s''@;'; put 'put ''dGhpcy54bERhdGE9W10sdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLnVwbG9hZGVyPW5ldyBSb2UsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2Vy''@;'; put 'put ''dmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9dm9pZCAwLHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMH14bG1hcE9uQ2xpY2soYSl7YS5pZCE9PXRoaXMuc2VsZWN0ZWRYTE1hcD8uaWQm''@;'; put 'put ''Jih0aGlzLnNlbGVjdGVkWExNYXA9YSx0aGlzLnZpZXdYTE1hcFJ1bGVzKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUvZmlsZXMvIithLmlkKSl9eGxtYXBMaXN0T25GaWx0ZXIoKXt0aGlzLnhsbWFwcz10aGlzLnNlYXJjaFN0cmluZy5sZW5ndGg+MD9Hbi54bG1hcHMuZmls''@;'; put 'put ''dGVyKGQ9PmQuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk6R24ueGxtYXBzfWlzQWN0aXZlWExNYXAoYSl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRYTE1hcD8uaWQ9PT1hfW1heFdpZHRoQ2hlY2tlcihhLGQpe3JldHVybiBhPjIwMD8y''@;'; put 'put ''MDA6YX1nZXRDZWxsQ29uZmlndXJhdGlvbigpe3JldHVybntyZWFkT25seTohMH19cm93SGVhZGVycygpe3JldHVybiIgIn1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSEwfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX1nZXRGaWxl''@;'; put 'put ''RGVzYyhhLGQ9ITEpe3ZhciBoPXRoaXM7Y29uc3QgZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYoIWYpcmV0dXJuO2NvbnN0IF89Zi5uYW1lO2lmKHRoaXMuZmlsZW5hbWU9XywieGxzIj09PV8uc2xpY2UoXy5sYXN0SW5kZXhPZigiLiIpKzEsXy5sYXN0SW5kZXhPZigiLiIpKzQpLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaXNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0iRXh0cmFjdGluZyBEYXRhIix0aGlzLnN0YXR1cz15ZC5FeHRyYWN0aW5nRGF0YTtjb25zdCBXPW5ldyBGaWxlUmVhZGVyO1cub25sb2FkPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIGllPWZpKGZ1bmN0aW9uKihnZSl7Y29uc3Qgd2U9KGM9Pntjb25zdCBsPW5ldyBVaW50OEFycmF5KGMpO2xldCBhPSIiO2NvbnN0IGQ9bC5ieXRlTGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspYSs9U3RyaW5nLmZyb21DaGFyQ29kZShsW2hdKTtyZXR1cm4gYX0pKGdlLnRhcmdldC5y''@;'; put 'put ''ZXN1bHQpO2xldCBFZTtjb25zdCBaZT17dHlwZToiYmluYXJ5IixjZWxsRGF0ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITF9O3RyeXtFZT1HYy5yZWFkKHdlLHsuLi5aZX0pfWNhdGNoKG90KXtoLmV2ZW50U2VydmljZS5zaG93QWJvcnRN''@;'; put 'put ''b2RhbChudWxsLG90LHZvaWQgMCwiRXJyb3IgcmVhZGluZyBmaWxlIil9aWYoIUVlKXJldHVybiBoLmlzTG9hZGluZz0hMSxoLmlzTG9hZGluZ0Rlc2M9IiIsaC5zdGF0dXM9eWQuUmVhZHlUb1VwbG9hZCx2b2lkIGgudXBsb2FkZXIucXVldWUucG9wKCk7aC5leHRyYWN0RGF0YShFZSl9KTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiBpZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLFcucmVhZEFzQXJyYXlCdWZmZXIoZil9ZWxzZSB0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9eWQuUmVhZHlUb1VwbG9hZCx0aGlzLnNob3dVcGxv''@;'; put 'put ''YWRNb2RhbD0hMCx0aGlzLnVwbG9hZGVyLnF1ZXVlLnBvcCgpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsJ0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK3RoaXMuZmlsZW5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGV4Y2VsIGZpbGUuJyl9ZGlzY2FyZEV4dHJhY3Rl''@;'; put 'put ''ZERhdGEoKXt0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9eWQuUmVhZHlUb1VwbG9hZCx0aGlzLnhsRGF0YT1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJz''@;'; put 'put ''dCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLnN1Ym1pdCgpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9''@;'; put 'put ''c3VibWl0KCl7aWYoIXRoaXMuc2VsZWN0ZWRYTE1hcHx8IXRoaXMueGxEYXRhLmxlbmd0aClyZXR1cm47dGhpcy5zdGF0dXM9eWQuU3VibWl0dGluZyx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IlN1Ym1pdHRpbmcgZXh0cmFjdGVkIGRhdGEiO2NvbnN0IGE9W107Zm9y''@;'; put 'put ''KGNvbnN0IFQgb2YgdGhpcy51cGxvYWRlci5xdWV1ZSlhLnB1c2goe2ZpbGU6VCxmaWxlTmFtZTpULm5hbWV9KTtjb25zdCBkPU9iamVjdC5rZXlzKHRoaXMueGxEYXRhWzBdKS5qb2luKCIsIikrIlxuIit0aGlzLnhsRGF0YS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1p''@;'; put 'put ''dF9yb3dzX2xpbWl0KS5tYXAoVD0+T2JqZWN0LnZhbHVlcyhUKS5qb2luKCIsIikpLmpvaW4oIlxuIiksZj0oKGMsbCk9Pm5ldyBGaWxlKFtjXSx0aGlzLmZpbGVuYW1lKyIuY3N2Iix7bGFzdE1vZGlmaWVkOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSkpKG5ldyBCbG9iKFtkXSx7dHlwZToiYXBw''@;'; put 'put ''bGljYXRpb24vY3N2In0pKTthLnB1c2goe2ZpbGU6ZixmaWxlTmFtZTpmLm5hbWV9KSx0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsYSx7dGFibGU6dGhpcy5zZWxlY3RlZFhMTWFwLnRhcmdldERTfSkudGhlbihUPT57VC5zYXNqc0Fib3J0''@;'; put 'put ''P3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLFQuc2FzanNBYm9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOlQuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOlQuU1lTRVJST1JURVhULE1BQzpULnNhc2pzQWJvcnRbMF0uTUFDfSk6VC5zYXNwYXJhbXMmJnRoaXMucm91''@;'; put 'put ''dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK1Quc2FzcGFyYW1zWzBdLkRTSUQpfSkuY2F0Y2goVD0+e3RoaXMuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLFQpfSkuZmluYWxseSgoKT0+e3RoaXMuc3RhdHVzPXlkLlJlYWR5VG9TdWJtaXQsdGhpcy5p''@;'; put 'put ''c0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIifSl9ZXh0cmFjdERhdGEoYSl7Y29uc3QgZD1bXTt0aGlzLnhsbWFwUnVsZXMuZm9yRWFjaChoPT57bGV0IGY9aC5YTE1BUF9TSEVFVDtpZihmLnN0YXJ0c1dpdGgoIi8iKSl7Y29uc3QgRWU9Zi5zcGxpdCgiLyIpWzFdLFplPXBhcnNl''@;'; put 'put ''SW50KEVlKS0xO2Y9YS5TaGVldE5hbWVzW1plXX1jb25zdCBfPWEuU2hlZXRzW2ZdLFQ9R2MudXRpbHMuc2hlZXRfdG9fanNvbihfLHtyYXc6ITAsaGVhZGVyOiJBIixibGFua3Jvd3M6ITB9KSxXPU9zZShoLlhMTUFQX1NUQVJULFQpLGllPSgoYyxsLGEpPT57aWYoIiI9PT1sKXJldHVybiBj''@;'; put 'put ''O2lmKGwuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihsPWwucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGwuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGQ9ZFUobCk7aWYoZCl7Y29uc3R7cm93OmgsY29sdW1uOmZ9PWQse3I6XyxjOlR9PUdjLnV0aWxzLmRlY29kZV9jZWxsKGMp''@;'; put 'put ''O2w9R2MudXRpbHMuZW5jb2RlX2NlbGwoe3I6XytoLGM6VCtmfSl9fWlmKGwuc3RhcnRzV2l0aCgiTUFUQ0ggIikmJihsPU9zZShsLGEpKSwiTEFTVERPV04iPT09bCl7Y29uc3R7cjpkLGM6aH09R2MudXRpbHMuZGVjb2RlX2NlbGwoYyksZj1HYy51dGlscy5lbmNvZGVfY29sKGgpO2xldCBf''@;'; put 'put ''PWQ7Zm9yKGxldCBUPWQrMTtUPGEubGVuZ3RoJiZhW1RdW2ZdO1QrKylfPVQ7bD1mKyhfKzEpfWlmKCJCTEFOS1JPVyI9PT1sKXtjb25zdHtyOmR9PUdjLnV0aWxzLmRlY29kZV9jZWxsKGMpO2xldCBoPWQ7Zm9yKGxldCBXPWQrMTtXPGEubGVuZ3RoJiYhVlplKGFbV10pO1crKyloPVc7bD1P''@;'; put 'put ''YmplY3Qua2V5cyhhW2hdKS5maWx0ZXIoVz0+Il9fcm93TnVtX18iIT09VykucmVkdWNlKChXLGllKT0+aWU+Vz9pZTpXLCIiKSsoaCsxKX1yZXR1cm4gbH0pKFcsaC5YTE1BUF9GSU5JU0gsVCksd2U9R2MudXRpbHMuc2hlZXRfdG9fanNvbihfLHtyYXc6ITAscmFuZ2U6YCR7V306JHtpZX1g''@;'; put 'put ''LGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSk7Zm9yKGxldCBFZT0wO0VlPHdlLmxlbmd0aDtFZSsrKXtjb25zdCBaZT13ZVtFZV0sb3Q9T2JqZWN0LmtleXMoWmUpLmZpbHRlcihldD0+Il9fcm93TnVtX18iIT09ZXQpO2ZvcihsZXQgZXQ9MDtldDxvdC5sZW5ndGg7ZXQrKylkLnB1c2goe0xP''@;'; put 'put ''QURfUkVGOiIwIixYTE1BUF9JRDpoLlhMTUFQX0lELFhMTUFQX1JBTkdFX0lEOmguWExNQVBfUkFOR0VfSUQsUk9XX05POkVlKzEsQ09MX05POmV0KzEsVkFMVUVfVFhUOlplW290W2V0XV19KX19KSx0aGlzLnN0YXR1cz15ZC5SZWFkeVRvU3VibWl0LHRoaXMuaXNMb2FkaW5nPSExLHRoaXMu''@;'; put 'put ''aXNMb2FkaW5nRGVzYz0iIix0aGlzLnhsRGF0YT1kLHRoaXMuc2VsZWN0ZWRUYWI9UUEuRGF0YX12aWV3WExNYXBSdWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Euc2VsZWN0ZWRYTE1hcCYmKGEuaXNMb2FkaW5nPSEwLGEuaXNMb2FkaW5nRGVzYz0iTG9hZGluZyBl''@;'; put 'put ''eGNlbCBydWxlcyIsYS5zdGF0dXM9eWQuRmV0Y2hpbmdSdWxlcyx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRYTE1hcFJ1bGVzKGEuc2VsZWN0ZWRYTE1hcC5pZCkudGhlbihkPT57YS54bG1hcFJ1bGVzPWQueGxtYXBydWxlcyxhLnN0YXR1cz15ZC5SZWFkeVRvVXBsb2FkfSkuY2F0Y2go''@;'; put 'put ''ZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKX0pLGEuaXNMb2FkaW5nPSExLGEuaXNMb2FkaW5nRGVzYz0iIil9KSgpfWxvYWQoKXt0aGlzLnhsbWFwcz1Hbi54bG1hcHMsdGhpcy54bG1hcHNMb2FkaW5nPSExO2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQ7aWYoYSl7''@;'; put 'put ''Y29uc3QgZD10aGlzLnhsbWFwcy5maW5kKGg9PmguaWQ9PT1hKTtkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWQsdGhpcy52aWV3WExNYXBSdWxlcygpKX19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNl''@;'; put 'put ''bnNlS2V5PWF9KX1uZ0FmdGVyVmlld0luaXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7R24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5sb2FkKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxvYWQoKX0pfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh2bCksdHQoQzApLHR0KHcwKSx0dChXbCksdHQoRHMpLHR0KGJkKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZh''@;'; put 'put ''JiZSbyhVWmUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1oKX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiY29udGVudC1jb250YWluZXIiLGQuY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6''@;'; put 'put ''NDIsdmFyczoxNixjb25zdHM6W1siY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgSWQiLCJuYW1lIiwiaW5w''@;'; put 'put ''dXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFhMTWFwVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbNCwibmdGb3Ii''@;'; put 'put ''LCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwiY2xhc3MiLCJjYXJkIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1''@;'; put 'put ''bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciIsNCwibmdJZiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIiwiZmlsZU92ZXIiLCJm''@;'; put 'put ''aWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0''@;'; put 'put ''d2VlbiJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUt''@;'; put 'put ''dXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJ1cGxvYWRlciIsImNoYW5nZSJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtLTAiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImFjdGlvbkJ1dHRvbnMiLCIiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsZSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjbGFzcyIsInRleHQtY2Vu''@;'; put 'put ''dGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJh''@;'; put 'put ''Z2dlZE92ZXIiXSxbImNsclRhYkxpbmsiLCIiLDMsImNsaWNrIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXJvdyIsIm0tMCIsIm1iLTEwLWkiLCJ2aWV3ZXJUaXRsZSJdLFsxLCJkLWZsZXgiLCJjbHItY29sLTEyIiwiY2xyLWp1c3RpZnktY29u''@;'; put 'put ''dGVudC1jZW50ZXIiLCJtdC01LWkiXSxbMSwibWwtMTAiLDMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90LXRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVy''@;'; put 'put ''aW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImhlaWdodCIsIm1vZGlmeUNvbFdpZHRoIiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwicm93SGVhZGVycyIsInJvd0hlYWRlcldpZHRoIiwicm93SGVpZ2h0cyIsImxpY2Vu''@;'; put 'put ''c2VLZXkiXSxbMSwiY2xyLXJvdyIsIm0tMCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItY29sLTEyIGNsci1jb2wtbGctNCIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250''@;'; put 'put ''ZW50LWNlbnRlciIsImNsci1jb2wtMTIiLCJjbHItY29sLWxnLTQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJi''@;'; put 'put ''dG4tc20iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiksUWUoMSxaWmUsMiwwLCJkaXYiLDApLG1lKDIsImNsci10cmVl''@;'; put 'put ''IikoMywiY2xyLXRyZWUtbm9kZSIsMSkoNCwiZGl2IiwyKSg1LCJpbnB1dCIsMyw0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuc2VhcmNoU3RyaW5nPWZ9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGQueGxtYXBMaXN0T25GaWx0ZXIoKX0pLHllKCksUWUo''@;'; put 'put ''NyxZWmUsMSwwLCJjbHItaWNvbiIsNSksUWUoOCxXWmUsMSwwLCJjbHItaWNvbiIsNikseWUoKSgpLFFlKDksR1plLDUsMywibmctY29udGFpbmVyIiw3KSx5ZSgpKCksbWUoMTAsImRpdiIsOCksUWUoMTEsS1plLDQsMiwiZGl2Iiw5KSxRZSgxMixYWmUsNiwxLCJkaXYiLDEwKSxRZSgxMyx0''@;'; put 'put ''WWUsMjYsMjQsImRpdiIsMTEpLG1lKDE0LCJjbHItbW9kYWwiLDEyKSx4dCgiZmlsZU92ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmZpbGVPdmVyQmFzZShmKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZ2V0RmlsZURlc2MoZiwhMCl9KSgiY2xyTW9kYWxPcGVuQ2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbihmKXtyZXR1cm4gZC5zaG93VXBsb2FkTW9kYWw9Zn0pLG1lKDE1LCJoMyIsMTMpLE5lKDE2LCJVcGxvYWQgRmlsZSIpLHllKCksbWUoMTcsImRpdiIsMTQpKDE4LCJkaXYiLDE1KSgxOSwic3BhbiIpLE5lKDIwLCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLHll''@;'; put 'put ''KCkoKSxtZSgyMSwiZGl2IiwxNikoMjIsImRpdiIsMTcpKDIzLCJkaXYiLDE4KSgyNCwic3BhbiIsMTkpKDI1LCJsYWJlbCIsMjApLE5lKDI2LCIgQnJvd3NlICIpLHllKCkoKSxtZSgyNywiaW5wdXQiLDIxLDIyKSx4dCgiY2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5nZXRGaWxlRGVz''@;'; put 'put ''YyhmKX0pLHllKCkoKSgpKCkoKSgpLG1lKDI5LCJjbHItbW9kYWwiLDIzKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zdWJtaXRMaW1pdE5vdGljZT1mfSksbWUoMzAsImgzIiwxMyksTmUoMzEsIk5vdGljZSIpLHllKCksbWUoMzIsImRpdiIsMTQpKDMz''@;'; put 'put ''LCJwIiwyNCksTmUoMzQpLHllKCkoKSxtZSgzNSwiZGl2IiwyNSkoMzYsImJ1dHRvbiIsMjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zdWJtaXRMaW1pdE5vdGljZT0hMX0pLE5lKDM3LCIgQ2FuY2VsICIpLHllKCksbWUoMzgsImJ1dHRvbiIsMjYpLHh0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gZC5zdWJtaXQoKSxkLnN1Ym1pdExpbWl0Tm90aWNlPSExfSksTmUoMzksIiBTdWJtaXQgIikseWUoKSgpKCkoKSxRZSg0MCxvWWUsNCwzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyNyxFYykpLDImYSl7Y29uc3QgaD0kaSg2KTtDZSgxKSxSZSgibmdJZiIsZC54bG1hcHNM''@;'; put 'put ''b2FkaW5nKSxDZSg0KSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixoLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsaC52YWx1ZS5sZW5ndGg+MCksQ2UoMSksUmUoIm5nRm9yT2YiLGQueGxtYXBzKSxDZSgyKSxSZSgibmdJZiIsIWQuc2VsZWN0''@;'; put 'put ''ZWRYTE1hcCksQ2UoMSksUmUoIm5nSWYiLGQuaXNMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWQuaXNMb2FkaW5nJiZkLnNlbGVjdGVkWExNYXApLENlKDEpLFJlKCJ1cGxvYWRlciIsZC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCEx''@;'; put 'put ''KSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbE9wZW4iLGQuc2hvd1VwbG9hZE1vZGFsKSxDZSgxMyksUmUoInVwbG9hZGVyIixkLnVwbG9hZGVyKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLnN1Ym1pdExpbWl0Tm90aWNlKSxDZSg1KSxtcigiIER1ZSB0byBjdXJyZW50IGxp''@;'; put 'put ''Y2VuY2UsIG9ubHkgIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fSxkZXBlbmRlbmNp''@;'; put 'put ''ZXM6W015LEJ1LFdhLEJzLE9zLGRkLGcxLERwLGthLG91LHN1LEU4LFVzLGYxLExwLE9wLGRnLFJwLElwLGNnLHUyLG4zLHhzLFppLHJkLFpiLEVzZSxrc2VdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpjb2x1bW59Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubm8tdGFibGUtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5oZWFkZXItcm93W19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLm9wdGlvbnMtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OmZsZXgtZW5kfS5zd1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfS52aWV3ZXJUaXRsZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcmRGbGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmNlbnRlcn0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5''@;'; put 'put ''bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC40MzEzNzI1NDkpfS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3ot''@;'; put 'put ''aW5kZXg6LTF9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweDttYXJnaW4tdG9wOjIwcHg7Y29sb3I6I2ZmZn0iXX0pLGN9KSgpO2NvbnN0IHNZZT1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50''@;'; put 'put ''LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30pKCksY2hpbGRyZW46W3twYXRoOiIiLGNvbXBvbmVudDpQc2V9LHtwYXRoOiI6aWQiLGNvbXBvbmVudDpQc2V9''@;'; put 'put ''XX1dO2xldCBhWWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbZGMuZm9yQ2hpbGQoc1llKSxkY119KSxjfSkoKTtGeigpO2xldCBs''@;'; put 'put ''WWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbXzcsYVllLCRsLF91LEI3LG9vLEpBLEMyXX0pLGN9KSgpO2NvbnN0IGNZZT1be3Bh''@;'; put 'put ''dGg6IiIsY29tcG9uZW50OlFVZSxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0YWJsZXMifSx7cGF0aDoidGFibGVzIixjb21wb25lbnQ6TlplfSx7cGF0aDoiZmlsZXMiLGxvYWRDaGlsZHJlbjooKT0+bFllfV19XTtsZXQgdVllPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2RjLmZvckNoaWxkKGNZZSksZGNdfSksY30pKCksaFU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbdVllLCRsLF91LEI3LG9vLEpBLEMyXX0pLGN9KSgpLGZVPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLF91LG9vLCRsLEI3LGV3LEMyXX0pLGN9KSgpLEZzZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s''@;'; put 'put ''Yy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxvbywkbCxmVSxfNyxDc2UsTG9lLEpBLEMyXX0pLGN9KSgpO0Z6KCk7bGV0IGRZZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltGc2Usb28sJGwsSlVlLF91LF83LmZvclJvb3QoKSxCNyxDMixWNyxoVSxldyxKQSxDc2UsZlVdfSksY30pKCkscFU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGljZW5jZVNl''@;'; put 'put ''cnZpY2U9YSx0aGlzLnJvdXRlcj1kfWNhbkFjdGl2YXRlKGEsZCl7cmV0dXJuISEodm9pZCAwIT09ZD8ucm9vdC5xdWVyeVBhcmFtcy5mb3JjZXx8ZD8udXJsLmluY2x1ZGVzKCJsaWNlbnNpbmcvdXBkYXRlIikmJnRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWR8fG51bGwhPT10''@;'; put 'put ''aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhMT09PXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKSwhMSl9Y2FuRGVhY3RpdmF0ZShhLGQsaCxmKXtyZXR1cm4hKGg/LnVy''@;'; put 'put ''bC5pbmNsdWRlcygibGljZW5zaW5nL3JlZ2lzdGVyIil8fHRoaXMubGljZW5jZVNlcnZpY2UuYXBwTG9ja2VkLnZhbHVlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoQzApLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0''@;'; put 'put ''b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gSHNlKGMsbCl7KGZ1bmN0aW9uIGhZZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwp''@;'; put 'put ''LGwuYWRkKGMpfWZ1bmN0aW9uIGdVKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBhfWZ1bmN0aW9uIGF3KGMpe3JldHVybihhdz0iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''U3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihsKXtyZXR1cm4gdHlwZW9mIGx9OmZ1bmN0aW9uKGwpe3JldHVybiBsJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZsLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZsIT09U3ltYm9sLnByb3RvdHlwZT8i''@;'; put 'put ''c3ltYm9sIjp0eXBlb2YgbH0pKGMpfWZ1bmN0aW9uIEYwKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBwWWUoYyl7dmFyIGw9ZnVuY3Rpb24gZlllKGMsbCl7aWYoIm9iamVjdCIhPT1hdyhjKXx8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1hdyhkKSlyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl''@;'; put 'put ''cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09YXcobCk/bDpTdHJpbmcobCl9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWxldCBsND17YXN5bmM6''@;'; put 'put ''ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNh''@;'; put 'put ''bml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O2Z1bmN0aW9uIE5zZShjKXtsND1jfWNvbnN0IFZzZT0vWyY8PiInXS8sZ1llPW5ldyBSZWdFeHAoVnNlLnNvdXJjZSwiZyIpLEJz''@;'; put 'put ''ZT0vWzw+IiddfCYoPyEoI1xkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFx3Kyk7KS8sbVllPW5ldyBSZWdFeHAoQnNlLnNvdXJjZSwiZyIpLHZZZT17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0sanNlPWM9PnZZZVtjXTtm''@;'; put 'put ''dW5jdGlvbiBTdShjLGwpe2lmKGwpe2lmKFZzZS50ZXN0KGMpKXJldHVybiBjLnJlcGxhY2UoZ1llLGpzZSl9ZWxzZSBpZihCc2UudGVzdChjKSlyZXR1cm4gYy5yZXBsYWNlKG1ZZSxqc2UpO3JldHVybiBjfWNvbnN0IF9ZZT0vJigjKD86XGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcr''@;'; put 'put ''KSk7Py9naTtmdW5jdGlvbiB6c2UoYyl7cmV0dXJuIGMucmVwbGFjZShfWWUsKGwsYSk9PiJjb2xvbiI9PT0oYT1hLnRvTG93ZXJDYXNlKCkpPyI6IjoiIyI9PT1hLmNoYXJBdCgwKT8ieCI9PT1hLmNoYXJBdCgxKT9TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGEuc3Vic3RyaW5nKDIp''@;'; put 'put ''LDE2KSk6U3RyaW5nLmZyb21DaGFyQ29kZSgrYS5zdWJzdHJpbmcoMSkpOiIiKX1jb25zdCBiWWU9LyhefFteXFtdKVxeL2c7ZnVuY3Rpb24gZmEoYyxsKXtjPSJzdHJpbmciPT10eXBlb2YgYz9jOmMuc291cmNlLGw9bHx8IiI7Y29uc3QgYT17cmVwbGFjZTooZCxoKT0+KGg9KGg9aC5zb3Vy''@;'; put 'put ''Y2V8fGgpLnJlcGxhY2UoYlllLCIkMSIpLGM9Yy5yZXBsYWNlKGQsaCksYSksZ2V0UmVnZXg6KCk9Pm5ldyBSZWdFeHAoYyxsKX07cmV0dXJuIGF9Y29uc3QgeVllPS9bXlx3Ol0vZyx3WWU9L14kfF5bYS16XVthLXowLTkrLi1dKjp8Xls/I10vaTtmdW5jdGlvbiBVc2UoYyxsLGEpe2lmKGMp''@;'; put 'put ''e2xldCBkO3RyeXtkPWRlY29kZVVSSUNvbXBvbmVudCh6c2UoYSkpLnJlcGxhY2UoeVllLCIiKS50b0xvd2VyQ2FzZSgpfWNhdGNoe3JldHVybiBudWxsfWlmKDA9PT1kLmluZGV4T2YoImphdmFzY3JpcHQ6Iil8fDA9PT1kLmluZGV4T2YoInZic2NyaXB0OiIpfHwwPT09ZC5pbmRleE9mKCJk''@;'; put 'put ''YXRhOiIpKXJldHVybiBudWxsfWwmJiF3WWUudGVzdChhKSYmKGE9ZnVuY3Rpb24geFllKGMsbCl7ZVRbIiAiK2NdfHwoZVRbIiAiK2NdPUNZZS50ZXN0KGMpP2MrIi8iOm5UKGMsIi8iLCEwKSk7Y29uc3QgYT0tMT09PShjPWVUWyIgIitjXSkuaW5kZXhPZigiOiIpO3JldHVybiIvLyI9PT1s''@;'; put 'put ''LnN1YnN0cmluZygwLDIpP2E/bDpjLnJlcGxhY2UoU1llLCIkMSIpK2w6Ii8iPT09bC5jaGFyQXQoMCk/YT9sOmMucmVwbGFjZShNWWUsIiQxIikrbDpjK2x9KGwsYSkpO3RyeXthPWVuY29kZVVSSShhKS5yZXBsYWNlKC8lMjUvZywiJSIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiBhfWNv''@;'; put 'put ''bnN0IGVUPXt9LENZZT0vXlteOl0rOlwvKlteL10qJC8sU1llPS9eKFteOl0rOilbXHNcU10qJC8sTVllPS9eKFteOl0rOlwvKlteL10qKVtcc1xTXSokLyx0VD17ZXhlYzpmdW5jdGlvbigpe319O2Z1bmN0aW9uIFpzZShjLGwpe2NvbnN0IGQ9Yy5yZXBsYWNlKC9cfC9nLChmLF8sVCk9Pnts''@;'; put 'put ''ZXQgVz0hMSxpZT1fO2Zvcig7LS1pZT49MCYmIlxcIj09PVRbaWVdOylXPSFXO3JldHVybiBXPyJ8IjoiIHwifSkuc3BsaXQoLyBcfC8pO2xldCBoPTA7aWYoZFswXS50cmltKCl8fGQuc2hpZnQoKSxkLmxlbmd0aD4wJiYhZFtkLmxlbmd0aC0xXS50cmltKCkmJmQucG9wKCksZC5sZW5ndGg+''@;'; put 'put ''bClkLnNwbGljZShsKTtlbHNlIGZvcig7ZC5sZW5ndGg8bDspZC5wdXNoKCIiKTtmb3IoO2g8ZC5sZW5ndGg7aCsrKWRbaF09ZFtoXS50cmltKCkucmVwbGFjZSgvXFxcfC9nLCJ8Iik7cmV0dXJuIGR9ZnVuY3Rpb24gblQoYyxsLGEpe2NvbnN0IGQ9Yy5sZW5ndGg7aWYoMD09PWQpcmV0dXJu''@;'; put 'put ''IiI7bGV0IGg9MDtmb3IoO2g8ZDspe2NvbnN0IGY9Yy5jaGFyQXQoZC1oLTEpO2lmKGYhPT1sfHxhKXtpZihmPT09bHx8IWEpYnJlYWs7aCsrfWVsc2UgaCsrfXJldHVybiBjLnNsaWNlKDAsZC1oKX1mdW5jdGlvbiBZc2UoYyxsLGEsZCl7Y29uc3QgaD1sLmhyZWYsZj1sLnRpdGxlP1N1KGwu''@;'; put 'put ''dGl0bGUpOm51bGwsXz1jWzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKTtpZigiISIhPT1jWzBdLmNoYXJBdCgwKSl7ZC5zdGF0ZS5pbkxpbms9ITA7Y29uc3QgVD17dHlwZToibGluayIscmF3OmEsaHJlZjpoLHRpdGxlOmYsdGV4dDpfLHRva2VuczpkLmlubGluZVRva2VucyhfKX07''@;'; put 'put ''cmV0dXJuIGQuc3RhdGUuaW5MaW5rPSExLFR9cmV0dXJue3R5cGU6ImltYWdlIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0ZXh0OlN1KF8pfX1jbGFzcyByVHtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8bDR9c3BhY2UobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUu''@;'; put 'put ''ZXhlYyhsKTtpZihhJiZhWzBdLmxlbmd0aD4wKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OmFbMF19fWNvZGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik7cmV0dXJue3R5cGU6ImNvZGUi''@;'; put 'put ''LHJhdzphWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/ZDpuVChkLCJcbiIpfX19ZmVuY2VzKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5mZW5jZXMuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0saD1mdW5jdGlvbiBBWWUoYyxs''@;'; put 'put ''KXtjb25zdCBhPWMubWF0Y2goL14oXHMrKSg/OmBgYCkvKTtpZihudWxsPT09YSlyZXR1cm4gbDtjb25zdCBkPWFbMV07cmV0dXJuIGwuc3BsaXQoIlxuIikubWFwKGg9Pntjb25zdCBmPWgubWF0Y2goL15ccysvKTtpZihudWxsPT09ZilyZXR1cm4gaDtjb25zdFtfXT1mO3JldHVybiBfLmxl''@;'; put 'put ''bmd0aD49ZC5sZW5ndGg/aC5zbGljZShkLmxlbmd0aCk6aH0pLmpvaW4oIlxuIil9KGQsYVszXXx8IiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6ZCxsYW5nOmFbMl0/YVsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTphWzJdLHRleHQ6aH19fWhl''@;'; put 'put ''YWRpbmcobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyhsKTtpZihhKXtsZXQgZD1hWzJdLnRyaW0oKTtpZigvIyQvLnRlc3QoZCkpe2NvbnN0IGg9blQoZCwiIyIpOyh0aGlzLm9wdGlvbnMucGVkYW50aWN8fCFofHwvICQvLnRlc3QoaCkpJiYoZD1oLnRyaW0oKSl9''@;'; put 'put ''cmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzphWzBdLGRlcHRoOmFbMV0ubGVuZ3RoLHRleHQ6ZCx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZCl9fX1ocihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJociIscmF3OmFbMF19fWJsb2Nr''@;'; put 'put ''cXVvdGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0ucmVwbGFjZSgvXiAqPlsgXHRdPy9nbSwiIiksaD10aGlzLmxleGVyLnN0YXRlLnRvcDt0aGlzLmxleGVyLnN0YXRlLnRvcD0hMDtjb25zdCBmPXRoaXMubGV4ZXIu''@;'; put 'put ''YmxvY2tUb2tlbnMoZCk7cmV0dXJuIHRoaXMubGV4ZXIuc3RhdGUudG9wPWgse3R5cGU6ImJsb2NrcXVvdGUiLHJhdzphWzBdLHRva2VuczpmLHRleHQ6ZH19fWxpc3QobCl7bGV0IGE9dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWMobCk7aWYoYSl7bGV0IGQsaCxmLF8sVCxXLGllLGdlLHdl''@;'; put 'put ''LEVlLFplLG90LGV0PWFbMV0udHJpbSgpO2NvbnN0IHl0PWV0Lmxlbmd0aD4xLGt0PXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDp5dCxzdGFydDp5dD8rZXQuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O2V0PXl0P2BcXGR7MSw5fVxcJHtldC5zbGljZSgtMSl9YDpgXFwk''@;'; put 'put ''e2V0fWAsdGhpcy5vcHRpb25zLnBlZGFudGljJiYoZXQ9eXQ/ZXQ6IlsqKy1dIik7Y29uc3QgU3Q9bmV3IFJlZ0V4cChgXiggezAsM30ke2V0fSkoKD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkpYCk7Zm9yKDtsJiYob3Q9ITEsKGE9U3QuZXhlYyhsKSkmJiF0aGlzLnJ1bGVzLmJsb2NrLmhy''@;'; put 'put ''LnRlc3QobCkpOyl7aWYoZD1hWzBdLGw9bC5zdWJzdHJpbmcoZC5sZW5ndGgpLGdlPWFbMl0uc3BsaXQoIlxuIiwxKVswXS5yZXBsYWNlKC9eXHQrLyxubj0+IiAiLnJlcGVhdCgzKm5uLmxlbmd0aCkpLHdlPWwuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KF89Mixa''@;'; put 'put ''ZT1nZS50cmltTGVmdCgpKTooXz1hWzJdLnNlYXJjaCgvW14gXS8pLF89Xz40PzE6XyxaZT1nZS5zbGljZShfKSxfKz1hWzFdLmxlbmd0aCksVz0hMSwhZ2UmJi9eICokLy50ZXN0KHdlKSYmKGQrPXdlKyJcbiIsbD1sLnN1YnN0cmluZyh3ZS5sZW5ndGgrMSksb3Q9ITApLCFvdCl7Y29uc3Qg''@;'; put 'put ''bm49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsXy0xKX19KD86WyorLV18XFxkezEsOX1bLildKSgoPzpbIFx0XVteXFxuXSopPyg/OlxcbnwkKSlgKSxtbj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxfLTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICop''@;'; put 'put ''ezMsfSkoPzpcXG4rfCQpYCksRW49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsXy0xKX19KD86XGBcYFxgfH5+filgKSxscj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxfLTEpfX0jYCk7Zm9yKDtsJiYoRWU9bC5zcGxpdCgiXG4iLDEpWzBdLHdlPUVlLHRoaXMub3B0aW9u''@;'; put 'put ''cy5wZWRhbnRpYyYmKHdlPXdlLnJlcGxhY2UoL14gezEsNH0oPz0oIHs0fSkqW14gXSkvZywiICAiKSksIShFbi50ZXN0KHdlKXx8bHIudGVzdCh3ZSl8fG5uLnRlc3Qod2UpfHxtbi50ZXN0KGwpKSk7KXtpZih3ZS5zZWFyY2goL1teIF0vKT49X3x8IXdlLnRyaW0oKSlaZSs9IlxuIit3ZS5z''@;'; put 'put ''bGljZShfKTtlbHNle2lmKFd8fGdlLnNlYXJjaCgvW14gXS8pPj00fHxFbi50ZXN0KGdlKXx8bHIudGVzdChnZSl8fG1uLnRlc3QoZ2UpKWJyZWFrO1plKz0iXG4iK3dlfSFXJiYhd2UudHJpbSgpJiYoVz0hMCksZCs9RWUrIlxuIixsPWwuc3Vic3RyaW5nKEVlLmxlbmd0aCsxKSxnZT13ZS5z''@;'; put 'put ''bGljZShfKX19a3QubG9vc2V8fChpZT9rdC5sb29zZT0hMDovXG4gKlxuICokLy50ZXN0KGQpJiYoaWU9ITApKSx0aGlzLm9wdGlvbnMuZ2ZtJiYoaD0vXlxbWyB4WF1cXSAvLmV4ZWMoWmUpLGgmJihmPSJbIF0gIiE9PWhbMF0sWmU9WmUucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpKSxr''@;'; put 'put ''dC5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzpkLHRhc2s6ISFoLGNoZWNrZWQ6Zixsb29zZTohMSx0ZXh0OlplfSksa3QucmF3Kz1kfWt0Lml0ZW1zW2t0Lml0ZW1zLmxlbmd0aC0xXS5yYXc9ZC50cmltUmlnaHQoKSxrdC5pdGVtc1trdC5pdGVtcy5sZW5ndGgtMV0udGV4dD1a''@;'; put 'put ''ZS50cmltUmlnaHQoKSxrdC5yYXc9a3QucmF3LnRyaW1SaWdodCgpO2NvbnN0IFF0PWt0Lml0ZW1zLmxlbmd0aDtmb3IoVD0wO1Q8UXQ7VCsrKWlmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSExLGt0Lml0ZW1zW1RdLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGt0Lml0ZW1zW1RdLnRl''@;'; put 'put ''eHQsW10pLCFrdC5sb29zZSl7Y29uc3Qgbm49a3QuaXRlbXNbVF0udG9rZW5zLmZpbHRlcihFbj0+InNwYWNlIj09PUVuLnR5cGUpLG1uPW5uLmxlbmd0aD4wJiZubi5zb21lKEVuPT4vXG4uKlxuLy50ZXN0KEVuLnJhdykpO2t0Lmxvb3NlPW1ufWlmKGt0Lmxvb3NlKWZvcihUPTA7VDxRdDtU''@;'; put 'put ''Kyspa3QuaXRlbXNbVF0ubG9vc2U9ITA7cmV0dXJuIGt0fX1odG1sKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD17dHlwZToiaHRtbCIsYmxvY2s6ITAscmF3OmFbMF0scHJlOiF0aGlzLm9wdGlvbnMuc2FuaXRpemVyJiYoInByZSI9PT1h''@;'; put 'put ''WzFdfHwic2NyaXB0Ij09PWFbMV18fCJzdHlsZSI9PT1hWzFdKSx0ZXh0OmFbMF19O2lmKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSl7Y29uc3QgaD10aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoYVswXSk6U3UoYVswXSk7ZC50eXBlPSJwYXJhZ3JhcGgiLGQu''@;'; put 'put ''dGV4dD1oLGQudG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGgpfXJldHVybiBkfX1kZWYobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksaD1hWzJdP2FbMl0ucmVwbGFjZSgv''@;'; put 'put ''XjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6IiIsZj1hWzNdP2FbM10uc3Vic3RyaW5nKDEsYVszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTphWzNdO3JldHVybnt0eXBlOiJkZWYiLHRh''@;'; put 'put ''ZzpkLHJhdzphWzBdLGhyZWY6aCx0aXRsZTpmfX19dGFibGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD17dHlwZToidGFibGUiLGhlYWRlcjpac2UoYVsxXSkubWFwKGg9Pih7dGV4dDpofSkpLGFsaWduOmFbMl0ucmVwbGFjZSgvXiAq''@;'; put 'put ''fFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxyb3dzOmFbM10mJmFbM10udHJpbSgpP2FbM10ucmVwbGFjZSgvXG5bIFx0XSokLywiIikuc3BsaXQoIlxuIik6W119O2lmKGQuaGVhZGVyLmxlbmd0aD09PWQuYWxpZ24ubGVuZ3RoKXtkLnJhdz1hWzBdO2xldCBmLF8sVCxXLGg9ZC5hbGln''@;'; put 'put ''bi5sZW5ndGg7Zm9yKGY9MDtmPGg7ZisrKWQuYWxpZ25bZl09L14gKi0rOiAqJC8udGVzdChkLmFsaWduW2ZdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3QoZC5hbGlnbltmXSk/ImxlZnQiOm51bGw7Zm9yKGg9ZC5yb3dz''@;'; put 'put ''Lmxlbmd0aCxmPTA7ZjxoO2YrKylkLnJvd3NbZl09WnNlKGQucm93c1tmXSxkLmhlYWRlci5sZW5ndGgpLm1hcChpZT0+KHt0ZXh0OmllfSkpO2ZvcihoPWQuaGVhZGVyLmxlbmd0aCxfPTA7XzxoO18rKylkLmhlYWRlcltfXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZC5oZWFkZXJbX10u''@;'; put 'put ''dGV4dCk7Zm9yKGg9ZC5yb3dzLmxlbmd0aCxfPTA7XzxoO18rKylmb3IoVz1kLnJvd3NbX10sVD0wO1Q8Vy5sZW5ndGg7VCsrKVdbVF0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKFdbVF0udGV4dCk7cmV0dXJuIGR9fX1saGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2subGhl''@;'; put 'put ''YWRpbmcuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDoiPSI9PT1hWzJdLmNoYXJBdCgwKT8xOjIsdGV4dDphWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzFdKX19cGFyYWdyYXBoKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5wYXJh''@;'; put 'put ''Z3JhcGguZXhlYyhsKTtpZihhKXtjb25zdCBkPSJcbiI9PT1hWzFdLmNoYXJBdChhWzFdLmxlbmd0aC0xKT9hWzFdLnNsaWNlKDAsLTEpOmFbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OmFbMF0sdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fXRleHQobCl7Y29u''@;'; put 'put ''c3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6YVswXSx0ZXh0OmFbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMF0pfX1lc2NhcGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhsKTtpZihh''@;'; put 'put ''KXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzphWzBdLHRleHQ6U3UoYVsxXSl9fXRhZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKGwpO2lmKGEpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5p''@;'; put 'put ''bkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSk/dGhpcy5s''@;'; put 'put ''ZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRl''@;'; put 'put ''eHQiOiJodG1sIixyYXc6YVswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2Fu''@;'; put 'put ''aXRpemVyKGFbMF0pOlN1KGFbMF0pOmFbMF19fWxpbmsobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZCkpe2lmKCEvPiQvLnRlc3QoZCkpcmV0dXJu''@;'; put 'put ''O2NvbnN0IF89blQoZC5zbGljZSgwLC0xKSwiXFwiKTtpZigoZC5sZW5ndGgtXy5sZW5ndGgpJTI9PTApcmV0dXJufWVsc2V7Y29uc3QgXz1mdW5jdGlvbiBFWWUoYyxsKXtpZigtMT09PWMuaW5kZXhPZihsWzFdKSlyZXR1cm4tMTtjb25zdCBhPWMubGVuZ3RoO2xldCBkPTAsaD0wO2Zvcig7''@;'; put 'put ''aDxhO2grKylpZigiXFwiPT09Y1toXSloKys7ZWxzZSBpZihjW2hdPT09bFswXSlkKys7ZWxzZSBpZihjW2hdPT09bFsxXSYmKGQtLSxkPDApKXJldHVybiBoO3JldHVybi0xfShhWzJdLCIoKSIpO2lmKF8+LTEpe2NvbnN0IFc9KDA9PT1hWzBdLmluZGV4T2YoIiEiKT81OjQpK2FbMV0ubGVu''@;'; put 'put ''Z3RoK187YVsyXT1hWzJdLnN1YnN0cmluZygwLF8pLGFbMF09YVswXS5zdWJzdHJpbmcoMCxXKS50cmltKCksYVszXT0iIn19bGV0IGg9YVsyXSxmPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3QgXz0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaCk7XyYm''@;'; put 'put ''KGg9X1sxXSxmPV9bM10pfWVsc2UgZj1hWzNdP2FbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIGg9aC50cmltKCksL148Ly50ZXN0KGgpJiYoaD10aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3QoZCk/aC5zbGljZSgxKTpoLnNsaWNlKDEsLTEpKSxZc2UoYSx7aHJlZjpoJiZoLnJl''@;'; put 'put ''cGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIiksdGl0bGU6ZiYmZi5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpfSxhWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGwsYSl7bGV0IGQ7aWYoKGQ9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVj''@;'; put 'put ''KGwpKXx8KGQ9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMobCkpKXtsZXQgaD0oZFsyXXx8ZFsxXSkucmVwbGFjZSgvXHMrL2csIiAiKTtpZihoPWFbaC50b0xvd2VyQ2FzZSgpXSwhaCl7Y29uc3QgZj1kWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3OmYsdGV4dDpm''@;'; put 'put ''fX1yZXR1cm4gWXNlKGQsaCxkWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyhsLGEsZD0iIil7bGV0IGg9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWMobCk7aWYoISghaHx8aFszXSYmZC5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKSYmKCFoWzFdJiYhaFsyXXx8IWR8fHRo''@;'; put 'put ''aXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMoZCkpKXtjb25zdCBfPWhbMF0ubGVuZ3RoLTE7bGV0IFQsVyxpZT1fLGdlPTA7Y29uc3Qgd2U9IioiPT09aFswXVswXT90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcu''@;'; put 'put ''ckRlbGltVW5kO2Zvcih3ZS5sYXN0SW5kZXg9MCxhPWEuc2xpY2UoLTEqbC5sZW5ndGgrXyk7bnVsbCE9KGg9d2UuZXhlYyhhKSk7KXtpZihUPWhbMV18fGhbMl18fGhbM118fGhbNF18fGhbNV18fGhbNl0sIVQpY29udGludWU7aWYoVz1ULmxlbmd0aCxoWzNdfHxoWzRdKXtpZSs9Vztjb250''@;'; put 'put ''aW51ZX1pZigoaFs1XXx8aFs2XSkmJl8lMyYmISgoXytXKSUzKSl7Z2UrPVc7Y29udGludWV9aWYoaWUtPVcsaWU+MCljb250aW51ZTtXPU1hdGgubWluKFcsVytpZStnZSk7Y29uc3QgRWU9bC5zbGljZSgwLF8raC5pbmRleCtXKzEpO2lmKE1hdGgubWluKF8sVyklMil7Y29uc3Qgb3Q9RWUu''@;'; put 'put ''c2xpY2UoMSwtMSk7cmV0dXJue3R5cGU6ImVtIixyYXc6RWUsdGV4dDpvdCx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMob3QpfX1jb25zdCBaZT1FZS5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6RWUsdGV4dDpaZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVU''@;'; put 'put ''b2tlbnMoWmUpfX19fWNvZGVzcGFuKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0ucmVwbGFjZSgvXG4vZywiICIpO2NvbnN0IGg9L1teIF0vLnRlc3QoZCksZj0vXiAvLnRlc3QoZCkmJi8gJC8udGVzdChkKTtyZXR1cm4gaCYmZiYm''@;'; put 'put ''KGQ9ZC5zdWJzdHJpbmcoMSxkLmxlbmd0aC0xKSksZD1TdShkLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzphWzBdLHRleHQ6ZH19fWJyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJiciIscmF3OmFbMF19fWRlbChsKXtjb25zdCBh''@;'; put 'put ''PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImRlbCIscmF3OmFbMF0sdGV4dDphWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhhWzJdKX19YXV0b2xpbmsobCxhKXtjb25zdCBkPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMo''@;'; put 'put ''bCk7aWYoZCl7bGV0IGgsZjtyZXR1cm4iQCI9PT1kWzJdPyhoPVN1KHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzFdKTpkWzFdKSxmPSJtYWlsdG86IitoKTooaD1TdShkWzFdKSxmPWgpLHt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJh''@;'; put 'put ''dzpoLHRleHQ6aH1dfX19dXJsKGwsYSl7bGV0IGQ7aWYoZD10aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhsKSl7bGV0IGgsZjtpZigiQCI9PT1kWzJdKWg9U3UodGhpcy5vcHRpb25zLm1hbmdsZT9hKGRbMF0pOmRbMF0pLGY9Im1haWx0bzoiK2g7ZWxzZXtsZXQgXztkb3tfPWRbMF0sZFsw''@;'; put 'put ''XT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoZFswXSlbMF19d2hpbGUoXyE9PWRbMF0pO2g9U3UoZFswXSksZj0id3d3LiI9PT1kWzFdPyJodHRwOi8vIitkWzBdOmRbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzpkWzBdLHRleHQ6aCxocmVmOmYsdG9rZW5zOlt7dHlwZToi''@;'; put 'put ''dGV4dCIscmF3OmgsdGV4dDpofV19fX1pbmxpbmVUZXh0KGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMobCk7aWYoZCl7bGV0IGg7cmV0dXJuIGg9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2Fu''@;'; put 'put ''aXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoZFswXSk6U3UoZFswXSk6ZFswXTpTdSh0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/YShkWzBdKTpkWzBdKSx7dHlwZToidGV4dCIscmF3OmRbMF0sdGV4dDpofX19fWNvbnN0IFRvPXtuZXdsaW5lOi9eKD86ICooPzpcbnwkKSkrLyxjb2Rl''@;'; put 'put ''Oi9eKCB7NH1bXlxuXSsoPzpcbig/OiAqKD86XG58JCkpKik/KSsvLGZlbmNlczovXiB7MCwzfShgezMsfSg/PVteYFxuXSooPzpcbnwkKSl8fnszLH0pKFteXG5dKikoPzpcbnwkKSg/OnwoW1xzXFNdKj8pKD86XG58JCkpKD86IHswLDN9XDFbfmBdKiAqKD89XG58JCl8JCkvLGhyOi9eIHsw''@;'; put 'put ''LDN9KCg/Oi1bXHQgXSopezMsfXwoPzpfWyBcdF0qKXszLH18KD86XCpbIFx0XSopezMsfSkoPzpcbit8JCkvLGhlYWRpbmc6L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLyxs''@;'; put 'put ''aXN0Oi9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvLGh0bWw6Il4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8o''@;'; put 'put ''PzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVh''@;'; put 'put ''KShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/''@;'; put 'put ''Oig/OlxcbiAqKStcXG58JCkpIixkZWY6L14gezAsM31cWyhsYWJlbClcXTogKig/OlxuICopPyhbXjxcc11bXlxzXSp8PC4qPz4pKD86KD86ICsoPzpcbiAqKT98ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQpLyx0YWJsZTp0VCxsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxu''@;'; put 'put ''fGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxz''@;'; put 'put ''KlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvfTtUby5kZWY9ZmEoVG8uZGVmKS5yZXBsYWNlKCJsYWJlbCIsVG8uX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsVG8uX3RpdGxl''@;'; put 'put ''KS5nZXRSZWdleCgpLFRvLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxUby5saXN0SXRlbVN0YXJ0PWZhKC9eKCAqKShidWxsKSAqLykucmVwbGFjZSgiYnVsbCIsVG8uYnVsbGV0KS5nZXRSZWdleCgpLFRvLmxpc3Q9ZmEoVG8ubGlzdCkucmVwbGFjZSgvYnVsbC9nLFRvLmJ1bGxl''@;'; put 'put ''dCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJkZWYiLCJcXG4rKD89IitUby5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKSxUby5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNp''@;'; put 'put ''ZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVy''@;'; put 'put ''fGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVs''@;'; put 'put ''IixUby5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS8sVG8uaHRtbD1mYShUby5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIsVG8uX2NvbW1lbnQpLnJlcGxhY2UoInRhZyIsVG8uX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSoo''@;'; put 'put ''PzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxUby5saGVhZGluZz1mYShUby5saGVhZGluZykucmVwbGFjZSgvYnVsbC9nLFRvLmJ1bGxldCkuZ2V0UmVnZXgoKSxUby5wYXJhZ3JhcGg9ZmEoVG8uX3BhcmFncmFwaCkucmVw''@;'; put 'put ''bGFjZSgiaHIiLFRvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1b''@;'; put 'put ''XmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixU''@;'; put 'put ''by5fdGFnKS5nZXRSZWdleCgpLFRvLmJsb2NrcXVvdGU9ZmEoVG8uYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixUby5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksVG8ubm9ybWFsPXsuLi5Ub30sVG8uZ2ZtPXsuLi5Uby5ub3JtYWwsdGFibGU6Il4gKihbXlxcbiBdLipcXHwuKilcXG4g''@;'; put 'put ''ezAsM30oPzpcXHwgKik/KDo/LSs6PyAqKD86XFx8ICo6Py0rOj8gKikqKSg/OlxcfCAqKT8oPzpcXG4oKD86KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcbnwkKSkqKVxcbip8JCkifSxUby5nZm0udGFibGU9ZmEoVG8uZ2ZtLnRh''@;'; put 'put ''YmxlKS5yZXBsYWNlKCJociIsVG8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiIHs0fVteXFxuXSIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpc''@;'; put 'put ''XG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsVG8uX3RhZyku''@;'; put 'put ''Z2V0UmVnZXgoKSxUby5nZm0ucGFyYWdyYXBoPWZhKFRvLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixUby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ0YWJsZSIsVG8uZ2ZtLnRhYmxlKS5yZXBsYWNlKCJi''@;'; put 'put ''bG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxu''@;'; put 'put ''fC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsVG8uX3RhZykuZ2V0UmVnZXgoKSxUby5wZWRhbnRpYz17Li4uVG8ubm9ybWFsLGh0bWw6ZmEoIl4gKig/OmNvbW1lbnQgKig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAq''@;'; put 'put ''KD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLFRvLl9jb21tZW50KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRl''@;'; put 'put ''fHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxd''@;'; put 'put ''OiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczp0VCxsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpmYShUby5ub3JtYWwuX3Bh''@;'; put 'put ''cmFncmFwaCkucmVwbGFjZSgiaHIiLFRvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLFRvLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlz''@;'; put 'put ''dCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX07Y29uc3QgWGk9e2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFpbCk+Lyx1cmw6dFQsdGFnOiJeY29t''@;'; put 'put ''bWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIsbGluazovXiE/XFsobGFi''@;'; put 'put ''ZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIsZW1TdHJvbmc6e2xEZWxpbTovXig/Olwq''@;'; put 'put ''Kyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXCorKSg/''@;'; put 'put ''IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8q''@;'; put 'put ''XSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxbXHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8''@;'; put 'put ''KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOnRULHRleHQ6L14oYCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtg''@;'; put 'put ''Kl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8scHVuY3R1YXRpb246L14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pL307ZnVuY3Rpb24gVFllKGMpe3JldHVybiBjLnJlcGxhY2UoLy0tLS9nLCJcdTIwMTQiKS5yZXBsYWNlKC8tLS9nLCJcdTIwMTMiKS5yZXBsYWNlKC8oXnxbLVx1MjAx''@;'; put 'put ''NC8oXFt7IlxzXSknL2csIiQxXHUyMDE4IikucmVwbGFjZSgvJy9nLCJcdTIwMTkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDFcdTIwMWMiKS5yZXBsYWNlKC8iL2csIlx1MjAxZCIpLnJlcGxhY2UoL1wuezN9L2csIlx1MjAyNiIpfWZ1bmN0aW9uIFdzZShj''@;'; put 'put ''KXtsZXQgYSxkLGw9IiI7Y29uc3QgaD1jLmxlbmd0aDtmb3IoYT0wO2E8aDthKyspZD1jLmNoYXJDb2RlQXQoYSksTWF0aC5yYW5kb20oKT4uNSYmKGQ9IngiK2QudG9TdHJpbmcoMTYpKSxsKz0iJiMiK2QrIjsiO3JldHVybiBsfVhpLl9wdW5jdHVhdGlvbj0iXFxwe1B9JCs8PT5gXnx+IixY''@;'; put 'put ''aS5wdW5jdHVhdGlvbj1mYShYaS5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csWGkuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLFhpLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxYaS5hbnlQdW5jdHVhdGlv''@;'; put 'put ''bj0vXFxbcHVuY3RdL2csWGkuX2VzY2FwZXM9L1xcKFtwdW5jdF0pL2csWGkuX2NvbW1lbnQ9ZmEoVG8uX2NvbW1lbnQpLnJlcGxhY2UoIig/Oi0tXHgzZXwkKSIsIi0tXHgzZSIpLmdldFJlZ2V4KCksWGkuZW1TdHJvbmcubERlbGltPWZhKFhpLmVtU3Ryb25nLmxEZWxpbSwidSIpLnJlcGxh''@;'; put 'put ''Y2UoL3B1bmN0L2csWGkuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLFhpLmVtU3Ryb25nLnJEZWxpbUFzdD1mYShYaS5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxYaS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksWGkuZW1TdHJvbmcuckRlbGltVW5kPWZhKFhp''@;'; put 'put ''LmVtU3Ryb25nLnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5hbnlQdW5jdHVhdGlvbj1mYShYaS5hbnlQdW5jdHVhdGlvbiwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5f''@;'; put 'put ''ZXNjYXBlcz1mYShYaS5fZXNjYXBlcywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5fc2NoZW1lPS9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LyxYaS5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2Et''@;'; put 'put ''ekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxYaS5hdXRvbGluaz1mYShYaS5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixYaS5fc2NoZW1lKS5yZXBs''@;'; put 'put ''YWNlKCJlbWFpbCIsWGkuX2VtYWlsKS5nZXRSZWdleCgpLFhpLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sWGkudGFnPWZhKFhpLnRhZykucmVwbGFjZSgiY29tbWVudCIsWGku''@;'; put 'put ''X2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIsWGkuX2F0dHJpYnV0ZSkuZ2V0UmVnZXgoKSxYaS5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sWGkuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZd''@;'; put 'put ''Ki8sWGkuX3RpdGxlPS8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS8sWGkubGluaz1mYShYaS5saW5rKS5yZXBsYWNlKCJsYWJlbCIsWGkuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixYaS5faHJlZikucmVwbGFjZSgidGl0bGUiLFhp''@;'; put 'put ''Ll90aXRsZSkuZ2V0UmVnZXgoKSxYaS5yZWZsaW5rPWZhKFhpLnJlZmxpbmspLnJlcGxhY2UoImxhYmVsIixYaS5fbGFiZWwpLnJlcGxhY2UoInJlZiIsVG8uX2xhYmVsKS5nZXRSZWdleCgpLFhpLm5vbGluaz1mYShYaS5ub2xpbmspLnJlcGxhY2UoInJlZiIsVG8uX2xhYmVsKS5nZXRSZWdl''@;'; put 'put ''eCgpLFhpLnJlZmxpbmtTZWFyY2g9ZmEoWGkucmVmbGlua1NlYXJjaCwiZyIpLnJlcGxhY2UoInJlZmxpbmsiLFhpLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsWGkubm9saW5rKS5nZXRSZWdleCgpLFhpLm5vcm1hbD17Li4uWGl9LFhpLnBlZGFudGljPXsuLi5YaS5ub3JtYWwsc3Ryb25n''@;'; put 'put ''OntzdGFydDovXl9ffFwqXCovLG1pZGRsZTovXl9fKD89XFMpKFtcc1xTXSo/XFMpX18oPyFfKXxeXCpcKig/PVxTKShbXHNcU10qP1xTKVwqXCooPyFcKikvLGVuZEFzdDovXCpcKig/IVwqKS9nLGVuZFVuZDovX18oPyFfKS9nfSxlbTp7c3RhcnQ6L15ffFwqLyxtaWRkbGU6L14oKVwqKD89''@;'; put 'put ''XFMpKFtcc1xTXSo/XFMpXCooPyFcKil8Xl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXykvLGVuZEFzdDovXCooPyFcKikvZyxlbmRVbmQ6L18oPyFfKS9nfSxsaW5rOmZhKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixYaS5fbGFiZWwpLmdldFJlZ2V4KCkscmVm''@;'; put 'put ''bGluazpmYSgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsWGkuX2xhYmVsKS5nZXRSZWdleCgpfSxYaS5nZm09ey4uLlhpLm5vcm1hbCxlc2NhcGU6ZmEoWGkuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9l''@;'; put 'put ''bWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8o''@;'; put 'put ''PzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1b''@;'; put 'put ''YS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYn''@;'; put 'put ''KitcLz0/X2B7XHx9fi1dK0ApKSkvfSxYaS5nZm0udXJsPWZhKFhpLmdmbS51cmwsImkiKS5yZXBsYWNlKCJlbWFpbCIsWGkuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxYaS5icmVha3M9ey4uLlhpLmdmbSxicjpmYShYaS5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdl''@;'; put 'put ''eCgpLHRleHQ6ZmEoWGkuZ2ZtLnRleHQpLnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfTtjbGFzcyBraHtjb25zdHJ1Y3RvcihsKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51''@;'; put 'put ''bGwpLHRoaXMub3B0aW9ucz1sfHxsNCx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyByVCx0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVy''@;'; put 'put ''LmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2NvbnN0IGE9e2Jsb2NrOlRvLm5vcm1hbCxpbmxpbmU6WGkubm9ybWFsfTt0aGlzLm9wdGlvbnMucGVkYW50aWM/KGEuYmxvY2s9VG8ucGVkYW50aWMsYS5p''@;'; put 'put ''bmxpbmU9WGkucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihhLmJsb2NrPVRvLmdmbSxhLmlubGluZT10aGlzLm9wdGlvbnMuYnJlYWtzP1hpLmJyZWFrczpYaS5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWF9c3RhdGljIGdldCBydWxlcygpe3JldHVybntibG9jazpUbyxpbmxpbmU6''@;'; put 'put ''WGl9fXN0YXRpYyBsZXgobCxhKXtyZXR1cm4gbmV3IGtoKGEpLmxleChsKX1zdGF0aWMgbGV4SW5saW5lKGwsYSl7cmV0dXJuIG5ldyBraChhKS5pbmxpbmVUb2tlbnMobCl9bGV4KGwpe2xldCBhO2ZvcihsPWwucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMobCx0''@;'; put 'put ''aGlzLnRva2Vucyk7YT10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKGEuc3JjLGEudG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9YmxvY2tUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsXztmb3IobD10aGlzLm9wdGlvbnMucGVkYW50aWM/bC5yZXBsYWNlKC9c''@;'; put 'put ''dC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6bC5yZXBsYWNlKC9eKCAqKShcdCspL2dtLChULFcsaWUpPT5XKyIgICAgIi5yZXBlYXQoaWUubGVuZ3RoKSk7bDspaWYoISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2smJnRoaXMu''@;'; put 'put ''b3B0aW9ucy5leHRlbnNpb25zLmJsb2NrLnNvbWUoVD0+ISEoZD1ULmNhbGwoe2xleGVyOnRoaXN9LGwsYSkpJiYobD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKSwhMCkpKSl7aWYoZD10aGlzLnRva2VuaXplci5zcGFjZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5n''@;'; put 'put ''dGgpLDE9PT1kLnJhdy5sZW5ndGgmJmEubGVuZ3RoPjA/YVthLmxlbmd0aC0xXS5yYXcrPSJcbiI6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuY29kZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSwhaHx8InBhcmFncmFwaCIh''@;'; put 'put ''PT1oLnR5cGUmJiJ0ZXh0IiE9PWgudHlwZT9hLnB1c2goZCk6KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnRleHQsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmZlbmNl''@;'; put 'put ''cyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5ocihsKSl7bD1sLnN1''@;'; put 'put ''YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saXN0KGwpKXtsPWwuc3Vic3RyaW5n''@;'; put 'put ''KGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaHRtbChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmRlZihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgp''@;'; put 'put ''LGg9YVthLmxlbmd0aC0xXSwhaHx8InBhcmFncmFwaCIhPT1oLnR5cGUmJiJ0ZXh0IiE9PWgudHlwZT90aGlzLnRva2Vucy5saW5rc1tkLnRhZ118fCh0aGlzLnRva2Vucy5saW5rc1tkLnRhZ109e2hyZWY6ZC5ocmVmLHRpdGxlOmQudGl0bGV9KTooaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0''@;'; put 'put ''Kz0iXG4iK2QucmF3LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50YWJsZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMu''@;'; put 'put ''dG9rZW5pemVyLmxoZWFkaW5nKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGY9bCx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayl7bGV0IFQ9MS8wO2NvbnN0IFc9bC5zbGljZSgx''@;'; put 'put ''KTtsZXQgaWU7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZT1nZS5jYWxsKHtsZXhlcjp0aGlzfSxXKSwibnVtYmVyIj09dHlwZW9mIGllJiZpZT49MCYmKFQ9TWF0aC5taW4oVCxpZSkpfSksVDwxLzAmJlQ+PTAmJihmPWwuc3Vic3Ry''@;'; put 'put ''aW5nKDAsVCsxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihkPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChmKSkpe2g9YVthLmxlbmd0aC0xXSxfJiYicGFyYWdyYXBoIj09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgp''@;'; put 'put ''LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpLF89Zi5sZW5ndGghPT1sLmxlbmd0aCxsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50ZXh0KGwpKXtsPWwuc3Vic3Ry''@;'; put 'put ''aW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgu''@;'; put 'put ''dGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IFQ9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihUKTticmVha310aHJvdyBuZXcgRXJyb3IoVCl9fXJldHVybiB0aGlzLnN0YXRl''@;'; put 'put ''LnRvcD0hMCxhfWlubGluZShsLGE9W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzpsLHRva2VuczphfSksYX1pbmxpbmVUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsVCxXLGllLF89bDtpZih0aGlzLnRva2Vucy5saW5rcyl7Y29uc3QgZ2U9T2JqZWN0LmtleXModGhpcy50''@;'; put 'put ''b2tlbnMubGlua3MpO2lmKGdlLmxlbmd0aD4wKWZvcig7bnVsbCE9KFQ9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhfKSk7KWdlLmluY2x1ZGVzKFRbMF0uc2xpY2UoVFswXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKF89Xy5zbGljZSgwLFQuaW5k''@;'; put 'put ''ZXgpKyJbIisiYSIucmVwZWF0KFRbMF0ubGVuZ3RoLTIpKyJdIitfLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7bnVsbCE9KFQ9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKF8pKTspXz1f''@;'; put 'put ''LnNsaWNlKDAsVC5pbmRleCkrIlsiKyJhIi5yZXBlYXQoVFswXS5sZW5ndGgtMikrIl0iK18uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7bnVsbCE9KFQ9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9u''@;'; put 'put ''LmV4ZWMoXykpOylfPV8uc2xpY2UoMCxULmluZGV4KSsiKysiK18uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDtsOylpZihXfHwoaWU9IiIpLFc9ITEsISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25z''@;'; put 'put ''LmV4dGVuc2lvbnMuaW5saW5lJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShnZT0+ISEoZD1nZS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuZXNjYXBl''@;'; put 'put ''KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFnKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJh''@;'; put 'put ''dys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpbmsobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5yZWZsaW5rKGwsdGhpcy50b2tlbnMubGlu''@;'; put 'put ''a3MpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGws''@;'; put 'put ''XyxpZSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2Rlc3BhbihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJyKGwpKXtsPWwu''@;'; put 'put ''c3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVsKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsobCxXc2UpKXtsPWwuc3Vic3Ry''@;'; put 'put ''aW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKGQ9dGhpcy50b2tlbml6ZXIudXJsKGwsV3NlKSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNp''@;'; put 'put ''b25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IGdlPTEvMDtjb25zdCB3ZT1sLnNsaWNlKDEpO2xldCBFZTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKFplKXtFZT1aZS5jYWxsKHtsZXhlcjp0aGlzfSx3ZSks''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBFZSYmRWU+PTAmJihnZT1NYXRoLm1pbihnZSxFZSkpfSksZ2U8MS8wJiZnZT49MCYmKGY9bC5zdWJzdHJpbmcoMCxnZSsxKSl9aWYoZD10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGYsVFllKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLCJfIiE9PWQu''@;'; put 'put ''cmF3LnNsaWNlKC0xKSYmKGllPWQucmF3LnNsaWNlKC0xKSksVz0hMCxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihsKXtjb25zdCBnZT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAi''@;'; put 'put ''K2wuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGdlKTticmVha310aHJvdyBuZXcgRXJyb3IoZ2UpfX1yZXR1cm4gYX19Y2xhc3MgaVR7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fGw0fWNvZGUobCxhLGQpe2NvbnN0IGg9KGF8fCIi''@;'; put 'put ''KS5tYXRjaCgvXFMqLylbMF07aWYodGhpcy5vcHRpb25zLmhpZ2hsaWdodCl7Y29uc3QgZj10aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KGwsaCk7bnVsbCE9ZiYmZiE9PWwmJihkPSEwLGw9Zil9cmV0dXJuIGw9bC5yZXBsYWNlKC9cbiQvLCIiKSsiXG4iLGg/JzxwcmU+PGNvZGUgY2xhc3M9Iicr''@;'; put 'put ''dGhpcy5vcHRpb25zLmxhbmdQcmVmaXgrU3UoaCkrJyI+JysoZD9sOlN1KGwsITApKSsiPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhkP2w6U3UobCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4ifWJsb2NrcXVvdGUobCl7cmV0dXJuYDxibG9ja3F1b3RlPlxuJHtsfTwvYmxvY2txdW90''@;'; put 'put ''ZT5cbmB9aHRtbChsLGEpe3JldHVybiBsfWhlYWRpbmcobCxhLGQsaCl7cmV0dXJuIHRoaXMub3B0aW9ucy5oZWFkZXJJZHM/YDxoJHthfSBpZD0iJHt0aGlzLm9wdGlvbnMuaGVhZGVyUHJlZml4K2guc2x1ZyhkKX0iPiR7bH08L2gke2F9PlxuYDpgPGgke2F9PiR7bH08L2gke2F9PlxuYH1o''@;'; put 'put ''cigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxoci8+XG4iOiI8aHI+XG4ifWxpc3QobCxhLGQpe2NvbnN0IGg9YT8ib2wiOiJ1bCI7cmV0dXJuIjwiK2grKGEmJjEhPT1kPycgc3RhcnQ9IicrZCsnIic6IiIpKyI+XG4iK2wrIjwvIitoKyI+XG4ifWxpc3RpdGVtKGwpe3JldHVybmA8''@;'; put 'put ''bGk+JHtsfTwvbGk+XG5gfWNoZWNrYm94KGwpe3JldHVybiI8aW5wdXQgIisobD8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giJysodGhpcy5vcHRpb25zLnhodG1sPyIgLyI6IiIpKyI+ICJ9cGFyYWdyYXBoKGwpe3JldHVybmA8cD4ke2x9PC9wPlxuYH10''@;'; put 'put ''YWJsZShsLGEpe3JldHVybiBhJiYoYT1gPHRib2R5PiR7YX08L3Rib2R5PmApLCI8dGFibGU+XG48dGhlYWQ+XG4iK2wrIjwvdGhlYWQ+XG4iK2ErIjwvdGFibGU+XG4ifXRhYmxlcm93KGwpe3JldHVybmA8dHI+XG4ke2x9PC90cj5cbmB9dGFibGVjZWxsKGwsYSl7Y29uc3QgZD1hLmhlYWRl''@;'; put 'put ''cj8idGgiOiJ0ZCI7cmV0dXJuKGEuYWxpZ24/YDwke2R9IGFsaWduPSIke2EuYWxpZ259Ij5gOmA8JHtkfT5gKStsK2A8LyR7ZH0+XG5gfXN0cm9uZyhsKXtyZXR1cm5gPHN0cm9uZz4ke2x9PC9zdHJvbmc+YH1lbShsKXtyZXR1cm5gPGVtPiR7bH08L2VtPmB9Y29kZXNwYW4obCl7cmV0dXJu''@;'; put 'put ''YDxjb2RlPiR7bH08L2NvZGU+YH1icigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxici8+IjoiPGJyPiJ9ZGVsKGwpe3JldHVybmA8ZGVsPiR7bH08L2RlbD5gfWxpbmsobCxhLGQpe2lmKG51bGw9PT0obD1Vc2UodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNl''@;'; put 'put ''VXJsLGwpKSlyZXR1cm4gZDtsZXQgaD0nPGEgaHJlZj0iJytsKyciJztyZXR1cm4gYSYmKGgrPScgdGl0bGU9IicrYSsnIicpLGgrPSI+IitkKyI8L2E+IixofWltYWdlKGwsYSxkKXtpZihudWxsPT09KGw9VXNlKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxs''@;'; put 'put ''KSkpcmV0dXJuIGQ7bGV0IGg9YDxpbWcgc3JjPSIke2x9IiBhbHQ9IiR7ZH0iYDtyZXR1cm4gYSYmKGgrPWAgdGl0bGU9IiR7YX0iYCksaCs9dGhpcy5vcHRpb25zLnhodG1sPyIvPiI6Ij4iLGh9dGV4dChsKXtyZXR1cm4gbH19Y2xhc3MgdlV7c3Ryb25nKGwpe3JldHVybiBsfWVtKGwpe3Jl''@;'; put 'put ''dHVybiBsfWNvZGVzcGFuKGwpe3JldHVybiBsfWRlbChsKXtyZXR1cm4gbH1odG1sKGwpe3JldHVybiBsfXRleHQobCl7cmV0dXJuIGx9bGluayhsLGEsZCl7cmV0dXJuIiIrZH1pbWFnZShsLGEsZCl7cmV0dXJuIiIrZH1icigpe3JldHVybiIifX1jbGFzcyBfVXtjb25zdHJ1Y3Rvcigpe3Ro''@;'; put 'put ''aXMuc2Vlbj17fX1zZXJpYWxpemUobCl7cmV0dXJuIGwudG9Mb3dlckNhc2UoKS50cmltKCkucmVwbGFjZSgvPFshXC9hLXpdLio/Pi9naSwiIikucmVwbGFjZSgvW1x1MjAwMC1cdTIwNkZcdTJFMDAtXHUyRTdGXFwnISIjJCUmKCkqKywuLzo7PD0+P0BbXF1eYHt8fX5dL2csIiIpLnJlcGxh''@;'; put 'put ''Y2UoL1xzL2csIi0iKX1nZXROZXh0U2FmZVNsdWcobCxhKXtsZXQgZD1sLGg9MDtpZih0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkoZCkpe2g9dGhpcy5zZWVuW2xdO2Rve2grKyxkPWwrIi0iK2h9d2hpbGUodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKX1yZXR1cm4gYXx8KHRoaXMuc2Vl''@;'; put 'put ''bltsXT1oLHRoaXMuc2VlbltkXT0wKSxkfXNsdWcobCxhPXt9KXtjb25zdCBkPXRoaXMuc2VyaWFsaXplKGwpO3JldHVybiB0aGlzLmdldE5leHRTYWZlU2x1ZyhkLGEuZHJ5cnVuKX19Y2xhc3MgQWh7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fGw0LHRoaXMub3B0aW9ucy5yZW5k''@;'; put 'put ''ZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBpVCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRlcmVyPW5ldyB2VSx0aGlzLnNsdWdnZXI9bmV3IF9VfXN0YXRpYyBwYXJzZShs''@;'; put 'put ''LGEpe3JldHVybiBuZXcgQWgoYSkucGFyc2UobCl9c3RhdGljIHBhcnNlSW5saW5lKGwsYSl7cmV0dXJuIG5ldyBBaChhKS5wYXJzZUlubGluZShsKX1wYXJzZShsLGE9ITApe2xldCBoLGYsXyxULFcsaWUsZ2Usd2UsRWUsWmUsb3QsZXQseXQsa3QsU3QsUXQsbm4sbW4sRW4sZD0iIjtjb25z''@;'; put 'put ''dCBscj1sLmxlbmd0aDtmb3IoaD0wO2g8bHI7aCsrKWlmKFplPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW1plLnR5cGVdJiYoRW49dGhpcy5vcHRpb25zLmV4''@;'; put 'put ''dGVuc2lvbnMucmVuZGVyZXJzW1plLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxaZSksITEhPT1Fbnx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMoWmUudHlwZSkp''@;'; put 'put ''KWQrPUVufHwiIjtlbHNlIHN3aXRjaChaZS50eXBlKXtjYXNlInNwYWNlIjpjb250aW51ZTtjYXNlImhyIjpkKz10aGlzLnJlbmRlcmVyLmhyKCk7Y29udGludWU7Y2FzZSJoZWFkaW5nIjpkKz10aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5wYXJzZUlubGluZShaZS50b2tlbnMpLFplLmRl''@;'; put 'put ''cHRoLHpzZSh0aGlzLnBhcnNlSW5saW5lKFplLnRva2Vucyx0aGlzLnRleHRSZW5kZXJlcikpLHRoaXMuc2x1Z2dlcik7Y29udGludWU7Y2FzZSJjb2RlIjpkKz10aGlzLnJlbmRlcmVyLmNvZGUoWmUudGV4dCxaZS5sYW5nLFplLmVzY2FwZWQpO2NvbnRpbnVlO2Nhc2UidGFibGUiOmZvcih3''@;'; put 'put ''ZT0iIixnZT0iIixUPVplLmhlYWRlci5sZW5ndGgsZj0wO2Y8VDtmKyspZ2UrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoWmUuaGVhZGVyW2ZdLnRva2Vucykse2hlYWRlcjohMCxhbGlnbjpaZS5hbGlnbltmXX0pO2Zvcih3ZSs9dGhpcy5yZW5kZXJlci50YWJs''@;'; put 'put ''ZXJvdyhnZSksRWU9IiIsVD1aZS5yb3dzLmxlbmd0aCxmPTA7ZjxUO2YrKyl7Zm9yKGllPVplLnJvd3NbZl0sZ2U9IiIsVz1pZS5sZW5ndGgsXz0wO188VztfKyspZ2UrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoaWVbX10udG9rZW5zKSx7aGVhZGVyOiExLGFs''@;'; put 'put ''aWduOlplLmFsaWduW19dfSk7RWUrPXRoaXMucmVuZGVyZXIudGFibGVyb3coZ2UpfWQrPXRoaXMucmVuZGVyZXIudGFibGUod2UsRWUpO2NvbnRpbnVlO2Nhc2UiYmxvY2txdW90ZSI6RWU9dGhpcy5wYXJzZShaZS50b2tlbnMpLGQrPXRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShFZSk7Y29u''@;'; put 'put ''dGludWU7Y2FzZSJsaXN0Ijpmb3Iob3Q9WmUub3JkZXJlZCxldD1aZS5zdGFydCx5dD1aZS5sb29zZSxUPVplLml0ZW1zLmxlbmd0aCxFZT0iIixmPTA7ZjxUO2YrKylTdD1aZS5pdGVtc1tmXSxRdD1TdC5jaGVja2VkLG5uPVN0LnRhc2ssa3Q9IiIsU3QudGFzayYmKG1uPXRoaXMucmVuZGVy''@;'; put 'put ''ZXIuY2hlY2tib3goUXQpLHl0P1N0LnRva2Vucy5sZW5ndGg+MCYmInBhcmFncmFwaCI9PT1TdC50b2tlbnNbMF0udHlwZT8oU3QudG9rZW5zWzBdLnRleHQ9bW4rIiAiK1N0LnRva2Vuc1swXS50ZXh0LFN0LnRva2Vuc1swXS50b2tlbnMmJlN0LnRva2Vuc1swXS50b2tlbnMubGVuZ3RoPjAm''@;'; put 'put ''JiJ0ZXh0Ij09PVN0LnRva2Vuc1swXS50b2tlbnNbMF0udHlwZSYmKFN0LnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1tbisiICIrU3QudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0KSk6U3QudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6bW59KTprdCs9bW4pLGt0Kz10aGlzLnBh''@;'; put 'put ''cnNlKFN0LnRva2Vucyx5dCksRWUrPXRoaXMucmVuZGVyZXIubGlzdGl0ZW0oa3Qsbm4sUXQpO2QrPXRoaXMucmVuZGVyZXIubGlzdChFZSxvdCxldCk7Y29udGludWU7Y2FzZSJodG1sIjpkKz10aGlzLnJlbmRlcmVyLmh0bWwoWmUudGV4dCxaZS5ibG9jayk7Y29udGludWU7Y2FzZSJwYXJh''@;'; put 'put ''Z3JhcGgiOmQrPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKSk7Y29udGludWU7Y2FzZSJ0ZXh0Ijpmb3IoRWU9WmUudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKTpaZS50ZXh0O2grMTxsciYmInRleHQiPT09bFtoKzFdLnR5cGU7''@;'; put 'put ''KVplPWxbKytoXSxFZSs9IlxuIisoWmUudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKTpaZS50ZXh0KTtkKz1hP3RoaXMucmVuZGVyZXIucGFyYWdyYXBoKEVlKTpFZTtjb250aW51ZTtkZWZhdWx0Ontjb25zdCBWcj0nVG9rZW4gd2l0aCAiJytaZS50eXBlKyciIHR5cGUgd2Fz''@;'; put 'put ''IG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihWcik7dGhyb3cgbmV3IEVycm9yKFZyKX19cmV0dXJuIGR9cGFyc2VJbmxpbmUobCxhKXthPWF8fHRoaXMucmVuZGVyZXI7bGV0IGgsZixfLGQ9IiI7Y29uc3QgVD1sLmxlbmd0aDtm''@;'; put 'put ''b3IoaD0wO2g8VDtoKyspaWYoZj1sW2hdLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdJiYoXz10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNb''@;'; put 'put ''Zi50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sZiksITEhPT1ffHwhWyJlc2NhcGUiLCJodG1sIiwibGluayIsImltYWdlIiwic3Ryb25nIiwiZW0iLCJjb2Rlc3BhbiIsImJyIiwiZGVsIiwidGV4dCJdLmluY2x1ZGVzKGYudHlwZSkpKWQrPV98fCIiO2Vsc2Ugc3dpdGNoKGYudHlwZSl7Y2Fz''@;'; put 'put ''ZSJlc2NhcGUiOmNhc2UidGV4dCI6ZCs9YS50ZXh0KGYudGV4dCk7YnJlYWs7Y2FzZSJodG1sIjpkKz1hLmh0bWwoZi50ZXh0KTticmVhaztjYXNlImxpbmsiOmQrPWEubGluayhmLmhyZWYsZi50aXRsZSx0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImltYWdlIjpk''@;'; put 'put ''Kz1hLmltYWdlKGYuaHJlZixmLnRpdGxlLGYudGV4dCk7YnJlYWs7Y2FzZSJzdHJvbmciOmQrPWEuc3Ryb25nKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiZW0iOmQrPWEuZW0odGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJjb2Rlc3Bh''@;'; put 'put ''biI6ZCs9YS5jb2Rlc3BhbihmLnRleHQpO2JyZWFrO2Nhc2UiYnIiOmQrPWEuYnIoKTticmVhaztjYXNlImRlbCI6ZCs9YS5kZWwodGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7ZGVmYXVsdDp7Y29uc3QgVz0nVG9rZW4gd2l0aCAiJytmLnR5cGUrJyIgdHlwZSB3YXMgbm90''@;'; put 'put ''IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFcpO3Rocm93IG5ldyBFcnJvcihXKX19cmV0dXJuIGR9fWNsYXNzIGx3e2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxsNH1wcmVwcm9jZXNzKGwpe3JldHVybiBsfXBvc3Rwcm9j''@;'; put 'put ''ZXNzKGwpe3JldHVybiBsfX1GMChsdywicGFzc1Rocm91Z2hIb29rcyIsbmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKSk7dmFyIGJVPW5ldyBXZWFrU2V0LEdzZT1uZXcgV2Vha1NldDtmdW5jdGlvbiAkc2UoYyxsKXtyZXR1cm4oYSxkLGgpPT57ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGQmJihoPWQsZD1udWxsKTtjb25zdCBmPXsuLi5kfTtkPXsuLi50aGlzLmRlZmF1bHRzLC4uLmZ9O2NvbnN0IF89Z1UodGhpcyxHc2UsSVllKS5jYWxsKHRoaXMsZC5zaWxlbnQsZC5hc3luYyxoKTtpZih0eXBlb2YgYT4idSJ8fG51bGw9PT1hKXJldHVybiBfKG5ldyBFcnJvcigibWFy''@;'; put 'put ''a2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIF8obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkrIiwg''@;'; put 'put ''c3RyaW5nIGV4cGVjdGVkIikpO2lmKGZ1bmN0aW9uIGtZZShjLGwpeyFjfHxjLnNpbGVudHx8KGwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGNhbGxiYWNrIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQg''@;'; put 'put ''aW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy91c2luZ19wcm8jYXN5bmMiKSwoYy5zYW5pdGl6ZXx8Yy5zYW5pdGl6ZXIpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzYW5pdGl6ZSBhbmQgc2FuaXRpemVyIHBhcmFtZXRlcnMgYXJlIGRlcHJl''@;'; put 'put ''Y2F0ZWQgc2luY2UgdmVyc2lvbiAwLjcuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy8jL1VTSU5HX0FEVkFOQ0VELm1kI29wdGlvbnMiKSwoYy5oaWdobGlnaHR8fCJs''@;'; put 'put ''YW5ndWFnZS0iIT09Yy5sYW5nUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGlnaGxpZ2h0IGFuZCBsYW5nUHJlZml4IHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4g''@;'; put 'put ''dGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWhpZ2hsaWdodC4iKSxjLm1hbmdsZSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogbWFuZ2xlIHBhcmFtZXRlciBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBpcyBkZXByZWNhdGVk''@;'; put 'put ''IHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhpcyB3YXJuaW5nLCBpbnN0YWxsIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1tYW5nbGUsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge21hbmdsZTog''@;'; put 'put ''ZmFsc2V9YC4iKSxjLmJhc2VVcmwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGJhc2VVcmwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2Ug''@;'; put 'put ''aHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWJhc2UtdXJsLiIpLGMuc21hcnR5cGFudHMmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNtYXJ0eXBhbnRzIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBh''@;'; put 'put ''bmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1zbWFydHlwYW50cy4iKSxjLnhodG1sJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiB4aHRtbCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5j''@;'; put 'put ''ZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQteGh0bWwuIiksKGMuaGVhZGVySWRzfHxjLmhlYWRlclByZWZpeCkmJmNvbnNv''@;'; put 'put ''bGUud2FybigibWFya2VkKCk6IGhlYWRlcklkcyBhbmQgaGVhZGVyUHJlZml4IHBhcmFtZXRlcnMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlz''@;'; put 'put ''IHdhcm5pbmcsIGluc3RhbGwgIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1nZm0taGVhZGluZy1pZCwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7aGVhZGVySWRzOiBmYWxzZX1gLiIpKX0oZCxoKSxkLmhvb2tzJiYoZC5ob29rcy5vcHRpb25zPWQpLGgpe2NvbnN0IFQ9''@;'; put 'put ''ZC5oaWdobGlnaHQ7bGV0IFc7dHJ5e2QuaG9va3MmJihhPWQuaG9va3MucHJlcHJvY2VzcyhhKSksVz1jKGEsZCl9Y2F0Y2god2Upe3JldHVybiBfKHdlKX1jb25zdCBpZT13ZT0+e2xldCBFZTtpZighd2UpdHJ5e2Qud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKFcsZC53YWxrVG9rZW5z''@;'; put 'put ''KSxFZT1sKFcsZCksZC5ob29rcyYmKEVlPWQuaG9va3MucG9zdHByb2Nlc3MoRWUpKX1jYXRjaChaZSl7d2U9WmV9cmV0dXJuIGQuaGlnaGxpZ2h0PVQsd2U/Xyh3ZSk6aChudWxsLEVlKX07aWYoIVR8fFQubGVuZ3RoPDN8fChkZWxldGUgZC5oaWdobGlnaHQsIVcubGVuZ3RoKSlyZXR1cm4g''@;'; put 'put ''aWUoKTtsZXQgZ2U9MDtyZXR1cm4gdGhpcy53YWxrVG9rZW5zKFcsd2U9PnsiY29kZSI9PT13ZS50eXBlJiYoZ2UrKyxzZXRUaW1lb3V0KCgpPT57VCh3ZS50ZXh0LHdlLmxhbmcsKEVlLFplKT0+e2lmKEVlKXJldHVybiBpZShFZSk7bnVsbCE9WmUmJlplIT09d2UudGV4dCYmKHdlLnRleHQ9''@;'; put 'put ''WmUsd2UuZXNjYXBlZD0hMCksZ2UtLSwwPT09Z2UmJmllKCl9KX0sMCkpfSksdm9pZCgwPT09Z2UmJmllKCkpfWlmKGQuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShkLmhvb2tzP2QuaG9va3MucHJlcHJvY2VzcyhhKTphKS50aGVuKFQ9PmMoVCxkKSkudGhlbihUPT5kLndhbGtUb2tl''@;'; put 'put ''bnM/UHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKFQsZC53YWxrVG9rZW5zKSkudGhlbigoKT0+VCk6VCkudGhlbihUPT5sKFQsZCkpLnRoZW4oVD0+ZC5ob29rcz9kLmhvb2tzLnBvc3Rwcm9jZXNzKFQpOlQpLmNhdGNoKF8pO3RyeXtkLmhvb2tzJiYoYT1kLmhvb2tzLnByZXByb2Nlc3Mo''@;'; put 'put ''YSkpO2NvbnN0IFQ9YyhhLGQpO2Qud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKFQsZC53YWxrVG9rZW5zKTtsZXQgVz1sKFQsZCk7cmV0dXJuIGQuaG9va3MmJihXPWQuaG9va3MucG9zdHByb2Nlc3MoVykpLFd9Y2F0Y2goVCl7cmV0dXJuIF8oVCl9fX1mdW5jdGlvbiBJWWUoYyxsLGEp''@;'; put 'put ''e3JldHVybiBkPT57aWYoZC5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4iLGMpe2NvbnN0IGg9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIrU3UoZC5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+IjtyZXR1''@;'; put 'put ''cm4gbD9Qcm9taXNlLnJlc29sdmUoaCk6YT92b2lkIGEobnVsbCxoKTpofWlmKGwpcmV0dXJuIFByb21pc2UucmVqZWN0KGQpO2lmKCFhKXRocm93IGQ7YShkKX19Y29uc3QgWmc9bmV3IGNsYXNzIERZZXtjb25zdHJ1Y3RvciguLi5sKXtIc2UodGhpcyxHc2UpLEhzZSh0aGlzLGJVKSxGMCh0''@;'; put 'put ''aGlzLCJkZWZhdWx0cyIse2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50''@;'; put 'put ''aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfSksRjAodGhpcywib3B0aW9ucyIsdGhpcy5zZXRPcHRpb25zKSxGMCh0aGlzLCJwYXJzZSIs''@;'; put 'put ''Z1UodGhpcyxiVSwkc2UpLmNhbGwodGhpcyxraC5sZXgsQWgucGFyc2UpKSxGMCh0aGlzLCJwYXJzZUlubGluZSIsZ1UodGhpcyxiVSwkc2UpLmNhbGwodGhpcyxraC5sZXhJbmxpbmUsQWgucGFyc2VJbmxpbmUpKSxGMCh0aGlzLCJQYXJzZXIiLEFoKSxGMCh0aGlzLCJwYXJzZXIiLEFoLnBh''@;'; put 'put ''cnNlKSxGMCh0aGlzLCJSZW5kZXJlciIsaVQpLEYwKHRoaXMsIlRleHRSZW5kZXJlciIsdlUpLEYwKHRoaXMsIkxleGVyIixraCksRjAodGhpcywibGV4ZXIiLGtoLmxleCksRjAodGhpcywiVG9rZW5pemVyIixyVCksRjAodGhpcywiU2x1Z2dlciIsX1UpLEYwKHRoaXMsIkhvb2tzIixsdyks''@;'; put 'put ''dGhpcy51c2UoLi4ubCl9d2Fsa1Rva2VucyhsLGEpe2xldCBkPVtdO2Zvcihjb25zdCBoIG9mIGwpc3dpdGNoKGQ9ZC5jb25jYXQoYS5jYWxsKHRoaXMsaCkpLGgudHlwZSl7Y2FzZSJ0YWJsZSI6Zm9yKGNvbnN0IGYgb2YgaC5oZWFkZXIpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoZi50''@;'; put 'put ''b2tlbnMsYSkpO2Zvcihjb25zdCBmIG9mIGgucm93cylmb3IoY29uc3QgXyBvZiBmKWQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKF8udG9rZW5zLGEpKTticmVhaztjYXNlImxpc3QiOmQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGguaXRlbXMsYSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5k''@;'; put 'put ''ZWZhdWx0cy5leHRlbnNpb25zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdLmZvckVhY2goZj0+e2Q9ZC5j''@;'; put 'put ''b25jYXQodGhpcy53YWxrVG9rZW5zKGhbZl0sYSkpfSk6aC50b2tlbnMmJihkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoLnRva2VucyxhKSkpfXJldHVybiBkfXVzZSguLi5sKXtjb25zdCBhPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7''@;'; put 'put ''fX07cmV0dXJuIGwuZm9yRWFjaChkPT57Y29uc3QgaD17Li4uZH07aWYoaC5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxoLmFzeW5jfHwhMSxkLmV4dGVuc2lvbnMmJihkLmV4dGVuc2lvbnMuZm9yRWFjaChmPT57aWYoIWYubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1l''@;'; put 'put ''IHJlcXVpcmVkIik7aWYoZi5yZW5kZXJlcil7Y29uc3QgXz1hLnJlbmRlcmVyc1tmLm5hbWVdO2EucmVuZGVyZXJzW2YubmFtZV09Xz9mdW5jdGlvbiguLi5UKXtsZXQgVz1mLnJlbmRlcmVyLmFwcGx5KHRoaXMsVCk7cmV0dXJuITE9PT1XJiYoVz1fLmFwcGx5KHRoaXMsVCkpLFd9OmYucmVu''@;'; put 'put ''ZGVyZXJ9aWYoZi50b2tlbml6ZXIpe2lmKCFmLmxldmVsfHwiYmxvY2siIT09Zi5sZXZlbCYmImlubGluZSIhPT1mLmxldmVsKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2FbZi5sZXZlbF0/YVtmLmxldmVsXS51bnNoaWZ0''@;'; put 'put ''KGYudG9rZW5pemVyKTphW2YubGV2ZWxdPVtmLnRva2VuaXplcl0sZi5zdGFydCYmKCJibG9jayI9PT1mLmxldmVsP2Euc3RhcnRCbG9jaz9hLnN0YXJ0QmxvY2sucHVzaChmLnN0YXJ0KTphLnN0YXJ0QmxvY2s9W2Yuc3RhcnRdOiJpbmxpbmUiPT09Zi5sZXZlbCYmKGEuc3RhcnRJbmxpbmU/''@;'; put 'put ''YS5zdGFydElubGluZS5wdXNoKGYuc3RhcnQpOmEuc3RhcnRJbmxpbmU9W2Yuc3RhcnRdKSl9Zi5jaGlsZFRva2VucyYmKGEuY2hpbGRUb2tlbnNbZi5uYW1lXT1mLmNoaWxkVG9rZW5zKX0pLGguZXh0ZW5zaW9ucz1hKSxkLnJlbmRlcmVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMucmVuZGVy''@;'; put 'put ''ZXJ8fG5ldyBpVCh0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgXyBpbiBkLnJlbmRlcmVyKXtjb25zdCBUPWZbX107ZltfXT0oLi4uVyk9PntsZXQgaWU9ZC5yZW5kZXJlcltfXS5hcHBseShmLFcpO3JldHVybiExPT09aWUmJihpZT1ULmFwcGx5KGYsVykpLGllfX1oLnJlbmRlcmVyPWZ9aWYo''@;'; put 'put ''ZC50b2tlbml6ZXIpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyByVCh0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgXyBpbiBkLnRva2VuaXplcil7Y29uc3QgVD1mW19dO2ZbX109KC4uLlcpPT57bGV0IGllPWQudG9rZW5pemVyW19dLmFwcGx5KGYsVyk7cmV0dXJuITE9''@;'; put 'put ''PT1pZSYmKGllPVQuYXBwbHkoZixXKSksaWV9fWgudG9rZW5pemVyPWZ9aWYoZC5ob29rcyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLmhvb2tzfHxuZXcgbHc7Zm9yKGNvbnN0IF8gaW4gZC5ob29rcyl7Y29uc3QgVD1mW19dO2ZbX109bHcucGFzc1Rocm91Z2hIb29rcy5oYXMoXyk/Vz0+e2lm''@;'; put 'put ''KHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShkLmhvb2tzW19dLmNhbGwoZixXKSkudGhlbihnZT0+VC5jYWxsKGYsZ2UpKTtjb25zdCBpZT1kLmhvb2tzW19dLmNhbGwoZixXKTtyZXR1cm4gVC5jYWxsKGYsaWUpfTooLi4uVyk9PntsZXQgaWU9ZC5ob29rc1tf''@;'; put 'put ''XS5hcHBseShmLFcpO3JldHVybiExPT09aWUmJihpZT1ULmFwcGx5KGYsVykpLGllfX1oLmhvb2tzPWZ9aWYoZC53YWxrVG9rZW5zKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucztoLndhbGtUb2tlbnM9ZnVuY3Rpb24oXyl7bGV0IFQ9W107cmV0dXJuIFQucHVzaChkLndhbGtU''@;'; put 'put ''b2tlbnMuY2FsbCh0aGlzLF8pKSxmJiYoVD1ULmNvbmNhdChmLmNhbGwodGhpcyxfKSkpLFR9fXRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4uaH19KSx0aGlzfXNldE9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4ubH0sdGhpc319''@;'; put 'put ''KGw0KTtmdW5jdGlvbiBwYShjLGwsYSl7cmV0dXJuIFpnLnBhcnNlKGMsbCxhKX1wYS5vcHRpb25zPXBhLnNldE9wdGlvbnM9ZnVuY3Rpb24oYyl7cmV0dXJuIFpnLnNldE9wdGlvbnMoYyksTnNlKHBhLmRlZmF1bHRzPVpnLmRlZmF1bHRzKSxwYX0scGEuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24g''@;'; put 'put ''bVUoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzoh''@;'; put 'put ''MSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxwYS5kZWZhdWx0cz1sNCxwYS51c2U9ZnVuY3Rpb24oLi4uYyl7cmV0dXJuIFpnLnVzZSguLi5j''@;'; put 'put ''KSxOc2UocGEuZGVmYXVsdHM9WmcuZGVmYXVsdHMpLHBhfSxwYS53YWxrVG9rZW5zPWZ1bmN0aW9uKGMsbCl7cmV0dXJuIFpnLndhbGtUb2tlbnMoYyxsKX0scGEucGFyc2VJbmxpbmU9WmcucGFyc2VJbmxpbmUscGEuUGFyc2VyPUFoLHBhLnBhcnNlcj1BaC5wYXJzZSxwYS5SZW5kZXJlcj1p''@;'; put 'put ''VCxwYS5UZXh0UmVuZGVyZXI9dlUscGEuTGV4ZXI9a2gscGEubGV4ZXI9a2gubGV4LHBhLlRva2VuaXplcj1yVCxwYS5TbHVnZ2VyPV9VLHBhLkhvb2tzPWx3LHBhLnBhcnNlPXBhO2NvbnN0IFJZZT1bIm1hcmtkb3duQ2FyZCJdO2Z1bmN0aW9uIE9ZZShjLGwpezEmYyYmcXQoMCwiY2xyLXNw''@;'; put 'put ''aW5uZXIiLDgpfWxldCBQWWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmFncmVlQ2hlY2tlZD0hMSx0aGlzLmFncmVlQm94TG9ja2VkPSEwLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuZXVsYV9tYXJrZG93bj0nXG5MaWNlbmNlIEFncmVl''@;'; put 'put ''bWVudCBmb3IgRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGFlXG49PT09PT09PT09PT09PT09PT09PVxuXG5Db3B5cmlnaHQgKGMpIEJvd2UgSU8gTHRkXG5cbkRhdGEgQ29udHJvbGxlciBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBieSA0R0wgQXBwcywgYSBicmFuZCBvd25lZCBieSBCb3dl''@;'; put 'put ''IElPIEx0ZCwgYSBVSyBMaW1pdGVkIENvbXBhbnkgaGVhZHF1YXJ0ZWQgaW4gMjkgT2xkZmllbGQgUmQsIEN1bWJyaWEsIHJlZ2lzdGVyZWQgYXQgQ29tcGFuaWVzIEhvdXNlIHdpdGggY29tcGFueSBudW1iZXIgMDg3NzcxNzEsIFZBVCBudW1iZXI6IDIwMzkxNDI0MFxuXG5UaGlzIHNvZnR3''@;'; put 'put ''YXJlIGlzIHByb3RlY3RlZCBieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzLCBpbmNsdWRpbmcgaW50ZXJuYXRpb25hbCB0cmVhdGllcywgYW5kIGR1YWwtbGljZW5zZWQgXHUyMDEzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdXIgdXNlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLCBtZWFu''@;'; put 'put ''aW5nIGludGVuZGVkIGZvciBvciByZXN1bHRpbmcgaW4gY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBvciBub3QuXG5cbklmIHlvdXIgdXNlIGlzIHN0cmljdGx5IHBlcnNvbmFsIG9yIHNvbGVseSBmb3IgZXZhbHVhdGlvbiBwdXJwb3NlcywgbWVhbmlu''@;'; put 'put ''ZyBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgdGhlIHN1aXRhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5kIHVzZWZ1bG5lc3Mgb2YgdGhpcyBzb2Z0d2FyZSBvdXRzaWRlIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50LCB5b3UgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGlu''@;'; put 'put ''Y2x1ZGVkIGluIHRoZSAibGljZW5jZS1ub24tY29tbWVyY2lhbC1kYXRhY29udHJvbGxlci5tZCIgZmlsZSBhdmFpbGFibGUgaGVyZTogIGh0dHBzOi8vZ2l0LmRhdGFjb250cm9sbGVyLmlvL2RjL2RjL3NyYy9icmFuY2gvbWFpbi9saWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9s''@;'; put 'put ''bGVyLm1kXG5cbllvdXIgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgaW5jbHVkZWQgaW4gYW4gYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudC5cblxuSW4gYW55IGNhc2UsIHlvdSBtdXN0IG5vdCBtYWtlIGFu''@;'; put 'put ''eSBzdWNoIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFzIHRvIGRldmVsb3Agc29mdHdhcmUgd2hpY2ggbWF5IGJlIGNvbnNpZGVyZWQgY29tcGV0aXRpdmUgd2l0aCB0aGlzIHNvZnR3YXJlLlxuXG5VTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIDRHTCBBUFBTIFBST1ZJREVTIFRI''@;'; put 'put ''SVMgU09GVFdBUkUgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEFORCBJTiBOTyBFVkVOVCBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBTSEFMTCA0R0wgQVBQUyBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VT''@;'; put 'put ''LCBJTkNMVURJTkcgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIEFSSVNJTkcgRlJPTSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLlxuXG5cbid9bmdPbkluaXQo''@;'; put 'put ''KXtjb25zdCBhPXBhLnNldE9wdGlvbnMoe30pO3RoaXMuZXVsYV9tYXJrZG93bj1hLnBhcnNlKHRoaXMuZXVsYV9tYXJrZG93bil9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMubWFya2Rvd25DYXJkJiZ0aGlzLm1hcmtkb3duQ2FyZC5uYXRpdmVFbGVtZW50LmRpc3Bh''@;'; put 'put ''dGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzY3JvbGwiKSl9KX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhpcy5hZ3JlZUNoZWNrZWQmJih0aGlzLmFncmVlQm94TG9ja2VkPSEwLHRoaXMuYWdyZWVDbGlja2VkPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVnaXN0ZXJ1c2Vy''@;'; put 'put ''Iix7U0FTQ29udHJvbFRhYmxlOlt7QUNDRVBURUQ6InllcyJ9XX0pLnRoZW4oZD0+e2QucmV0dXJuJiZkLnJldHVyblswXSYmIlNVQ0NFU1MiPT09ZC5yZXR1cm5bMF0uTVNHJiZsb2NhdGlvbi5yZWxvYWQoKX0pLmNhdGNoKGQ9PmQpLmZpbmFsbHkoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhp''@;'; put 'put ''cy5hZ3JlZUJveExvY2tlZD0hMSx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmFncmVlQ2hlY2tlZD0hMX0sMWUzKX0pKX1vbkNhcmRCbG9ja1Njcm9sbChhKXtpZighdGhpcy5hZ3JlZUNsaWNrZWQpe2xldCBkPWEudGFyZ2V0O2QmJih0aGlzLmFncmVlQm94TG9ja2VkPSEoZC5zY3JvbGxU''@;'; put 'put ''b3ArZC5vZmZzZXRIZWlnaHQ+PWQuc2Nyb2xsSGVpZ2h0LTIwKSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdGVybXMiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9u''@;'; put 'put ''KGEsZCl7aWYoMSZhJiZSbyhSWWUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5tYXJrZG93bkNhcmQ9aC5maXJzdCl9fSxkZWNsczoxMyx2YXJzOjYsY29uc3RzOltbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJpbm5lckhUTUwiLCJzY3JvbGwi''@;'; put 'put ''XSxbIm1hcmtkb3duQ2FyZCIsIiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImFjY2VwdC1jaGVja2JveCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2Ui''@;'; put 'put ''XSxbImNscklubGluZSIsInNtYWxsIiw0LCJuZ0lmIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxOZSgyLCIgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgIiksbWUoMywicCIpLE5lKDQsIiBX''@;'; put 'put ''ZWxjb21lIHRvIERhdGEgQ29udHJvbGxlciBmb3IgU0FTISBQbGVhc2UgcmV2aWV3IGFuZCBhY2NlcHQgYWdyZWVtZW50IGJlbG93IGluIG9yZGVyIHRvIHByb2NlZWQuICIpLHllKCkoKSxtZSg1LCJkaXYiLDIsMykseHQoInNjcm9sbCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DYXJkQmxv''@;'; put 'put ''Y2tTY3JvbGwoZil9KSx5ZSgpLG1lKDcsImRpdiIsNCkoOCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDUpKDksImlucHV0Iiw2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYWdyZWVDaGVja2VkPWZ9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnRlcm1z''@;'; put 'put ''QWdyZWVDaGFuZ2UoKX0pLHllKCksbWUoMTAsImxhYmVsIiksTmUoMTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIikseWUoKSgpLFFlKDEyLE9ZZSwxLDAsImNsci1zcGlubmVyIiw3KSx5ZSgpKCkpLDImYSYmKENlKDUpLFJlKCJpbm5lckhUTUwiLGQu''@;'; put 'put ''ZXVsYV9tYXJrZG93bixxMiksQ2UoMyksaHIoImRpc2FibGVkIixkLmFncmVlQm94TG9ja2VkKSxDZSgxKSxSZSgibmdNb2RlbCIsZC5hZ3JlZUNoZWNrZWQpKCJkaXNhYmxlZCIsZC5hZ3JlZUJveExvY2tlZCksQ2UoMyksUmUoIm5nSWYiLGQuYWdyZWVCb3hMb2NrZWQmJmQuYWdyZWVDbGlj''@;'; put 'put ''a2VkKSl9LGRlcGVuZGVuY2llczpbWmksUzAsQnMsT3MsVXMsRDAsVDAsdTJdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZjVmNmZmfS5jbHItY2hlY2tib3gtd3JhcHBlci5kaXNhYmxlZFtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNX0u''@;'; put 'put ''Y2FyZFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXJnaW4tdG9wOjB9LmNhcmRbX25nY29udGVudC0lQ09NUCVdICAgLmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTtvdmVyZmxvdzphdXRvO2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6I2Y0ZjRmNH0uYWNjZXB0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMTVweH0iXX0pLGN9KSgpO2Z1bmN0aW9uIEZZZShjLGwpezEmYyYmKG1lKDAsInAiLDI3KSxOZSgxLCIgTGljZW5jZSBrZXkgaXMgaW52YWxpZC4gV2UgY2FuJ3Qg''@;'; put 'put ''cHJvdmlkZSB5b3UgbW9yZSBkZXRhaWxzIGF0IHRoZSBtb21lbnQgIikseWUoKSl9ZnVuY3Rpb24gSFllKGMsbCl7aWYoMSZjJiZxdCgwLCJwIiwyOCksMiZjKXtjb25zdCBhPWplKDMpO1JlKCJpbm5lckhUTUwiLGEubGljZW5zZUVycm9yc1thLmtleUVycm9yXSxxMil9fWZ1bmN0aW9uIE5Z''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiKSgxLCJzdHJvbmciKSxOZSgyLCJEZXRhaWxzOiIpLHllKCksTmUoMykseWUoKSksMiZjKXtjb25zdCBhPWplKDMpO0NlKDMpLG1yKCIgIixhLmVycm9yRGV0YWlscywiIil9fWZ1bmN0aW9uIFZZZShjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsRlll''@;'; put 'put ''LDIsMCwicCIsMjUpLFFlKDIsSFllLDEsMSwicCIsMjYpLFFlKDMsTlllLDQsMSwicCIsMSksWXIoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLFJlKCJuZ0lmIiwhYS5rZXlFcnJvciksQ2UoMSksUmUoIm5nSWYiLGEua2V5RXJyb3IpLENlKDEpLFJlKCJuZ0lmIixhLmVycm9yRGV0YWls''@;'; put 'put ''cyl9fWZ1bmN0aW9uIEJZZShjLGwpezEmYyYmKHpyKDApLG1lKDEsInAiLDI3KSxOZSgyLCIgVGhlIHJlZ2lzdGVyZWQgbnVtYmVyIG9mIHVzZXJzIHJlYWNoZWQgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbmNlLiBQbGVhc2UgY29udGFjdCAiKSxxdCgzLCJjb250YWN0LWxp''@;'; put 'put ''bmsiLDI5KSxOZSg0LCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZXMgZm9yIHRoaXMgcHJvZHVjdC4gIikseWUoKSxZcigpKX1mdW5jdGlvbiBqWWUoYyxsKXsxJmMmJih6cigwKSxtZSgxLCJwIiwyNyksTmUoMiwiIFVwZGF0ZSB0aGUgbGljZW5zZSBr''@;'; put 'put ''ZXkgYnkgdXBsb2FkaW5nIHRoZSBsaWNlbmNlIGZpbGUgb3IgYnkgcGFzdGluZyBhIGxpY2Vuc2Uga2V5IGFuZCBhY3RpdmF0aW9uIGtleSBpbiB0aGUgaW5wdXRzIGJlbG93LiAiKSx5ZSgpLFlyKCkpfWZ1bmN0aW9uIHpZZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9amUoMik7aHIoIm1pc3NrZXkiLGgubWlzc21hdGNoZWRLZXkmJmgubWlzc21hdGNoZWRLZXk9PT1hKSxDZSgxKSxqYygiICIsYSwiIixkPT09KG51bGw9PWguc3lzc2l0ZS52YWx1ZT9udWxsOmguc3lzc2l0ZS52YWx1ZS5s''@;'; put 'put ''ZW5ndGgpLTE/IiI6IiwiLCIgIil9fWZ1bmN0aW9uIFVZZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDMwKSgxLCJzdHJvbmciKSxOZSgyLCJBbGxvd2VkIHVzZXJzOiIpLHllKCksTmUoMykseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDMpLG1yKCIgIixhLmxpY2Vuc2VLZXlEYXRhLnVz''@;'; put 'put ''ZXJzX2FsbG93ZWQsIiAiKX19ZnVuY3Rpb24gWlllKGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsMzEpfWZ1bmN0aW9uIFlZZShjLGwpezEmYyYmKG1lKDAsImRpdiIpLE5lKDEsIiBEcm9wIC8gQnJvd3NlIGxpY2VuY2UgZmlsZSAiKSx5ZSgpKX1mdW5jdGlvbiBXWWUoYyxsKXtpZigx''@;'; put 'put ''JmMmJihtZSgwLCJkaXYiKSxOZSgxLCIgU2VsZWN0ZWQgZmlsZTogIiksbWUoMiwic3Ryb25nIiksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoMyk7Q2UoMyksb3IoYS5saWNlbmNlZmlsZS5maWxlbmFtZSl9fWZ1bmN0aW9uIEdZZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEs''@;'; put 'put ''InN0cm9uZyIpLE5lKDIpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKDMpO0NlKDIpLG9yKGEubGljZW5jZUZpbGVFcnJvcil9fWZ1bmN0aW9uICRZZShjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsWVllLDIsMCwiZGl2IiwxKSxRZSgyLFdZZSw0LDEsImRpdiIsMSksUWUoMyxHWWUsMywxLCJk''@;'; put 'put ''aXYiLDEpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSgyKTtDZSgxKSxSZSgibmdJZiIsIiI9PT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxDZSgxKSxSZSgibmdJZiIsYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rp''@;'; put 'put ''b24gcVllKGMsbCl7MSZjJiYobWUoMCwiYnV0dG9uIiwzMiksTmUoMSwiIENvbnRpbnVlIHdpdGggZnJlZSB0aWVyICIpLHllKCkpfWZ1bmN0aW9uIEtZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMikoMSwiZGl2IiwzKSxOZSgyLCJMaWNlbmNpbmciKSx5ZSgpLG1l''@;'; put 'put ''KDMsImRpdiIsNCksUWUoNCxWWWUsNCwzLCJuZy1jb250YWluZXIiLDUpLFFlKDUsQlllLDUsMCwibmctY29udGFpbmVyIiw1KSxRZSg2LGpZZSwzLDAsIm5nLWNvbnRhaW5lciIsNSksbWUoNywicCIpKDgsInN0cm9uZyIpLE5lKDksIlNZU1NJVEU6IikseWUoKSxRZSgxMCx6WWUsMiw0LCJz''@;'; put 'put ''cGFuIiw2KSxtZSgxMSwiYSIsNykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoMTMpLGY9JGkoMTUpLF89amUoKTtyZXR1cm4ganQoXy5jb3B5U3lzc2l0ZShoLGYsXy5zeXNzaXRlLnZhbHVlfHxbXSkpfSkscXQoMTIsImNsci1pY29uIiw4LDkpLG1lKDE0LCJzcGFu''@;'; put 'put ''IiwxMCwxMSksTmUoMTYsIkNvcHkgdG8gY2xpcGJvYXJkIikseWUoKSgpKCksUWUoMTcsVVllLDQsMSwicCIsMTIpLG1lKDE4LCJjbHItdGFicyIpKDE5LCJjbHItdGFiIikoMjAsImJ1dHRvbiIsMTMpLE5lKDIxLCJVcGxvYWQgbGljZW5jZSIpLHllKCksbWUoMjIsImNsci10YWItY29udGVu''@;'; put 'put ''dCIpKDIzLCJpbnB1dCIsMTQsMTUpLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLm9uRmlsZUNhcHR1cmUoaCkpfSkseWUoKSxtZSgyNSwiZGl2IiwxNikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdCgkaSgyNCkuY2xpY2soKSl9KSgi''@;'; put 'put ''ZmlsZURyb3AiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLm9uRmlsZUNhcHR1cmUoaCwhMCkpfSksUWUoMjYsWlllLDEsMCwiY2xyLXNwaW5uZXIiLDE3KSxRZSgyNywkWWUsNCwzLCJuZy1jb250YWluZXIiLDEpLHllKCkoKSgpLG1lKDI4LCJjbHItdGFiIikoMjksImJ1dHRv''@;'; put 'put ''biIsMTMpLE5lKDMwLCJQYXN0ZSBsaWNlbmNlIikseWUoKSxtZSgzMSwiY2xyLXRhYi1jb250ZW50IikoMzIsImZvcm0iLDE4KSgzMywicCIpLE5lKDM0LCJMaWNlbmNlIGtleToiKSx5ZSgpLG1lKDM1LCJkaXYiLDE5KSgzNiwidGV4dGFyZWEiLDIwKSx4dCgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkubGljZW5jZUtleVZhbHVlPWgpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkudHJpbUtleXMoKSl9KSx5ZSgpKCkoKSxtZSgzNywiZm9ybSIsMjEpKDM4LCJwIiksTmUoMzksIkFjdGl2YXRpb24ga2V5''@;'; put 'put ''OiIpLHllKCksbWUoNDAsImRpdiIsMTkpKDQxLCJ0ZXh0YXJlYSIsMjIpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS5hY3RpdmF0aW9uS2V5VmFsdWU9aCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS50''@;'; put 'put ''cmltS2V5cygpKX0pLHllKCkoKSgpKCkoKSgpLG1lKDQyLCJidXR0b24iLDIzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuYXBwbHlLZXlzKCkpfSksTmUoNDMsIiBBcHBseSBsaWNlbmNlIGtleXMgIikseWUoKSxRZSg0NCxxWWUsMiwwLCJidXR0b24iLDI0''@;'; put 'put ''KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWplKCk7Q2UoMyksUmUoIm5nU3dpdGNoIixhLmFjdGlvbiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsImtleSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJsaW1pdCIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJ1cGRhdGUiKSxDZSg0KSxS''@;'; put 'put ''ZSgibmdGb3JPZiIsYS5zeXNzaXRlLnZhbHVlKSxDZSg3KSxSZSgibmdJZiIsYS5saWNlbnNlS2V5RGF0YSYmYS51c2VyQ291bnRMaW1pdGF0aW9uKSxDZSg5KSxSZSgibmdJZiIsYS5saWNlbmNlRmlsZUxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5saWNlbmNlRmlsZUxvYWRpbmcpLENl''@;'; put 'put ''KDkpLFJlKCJuZ01vZGVsIixhLmxpY2VuY2VLZXlWYWx1ZSksQ2UoNSksUmUoIm5nTW9kZWwiLGEuYWN0aXZhdGlvbktleVZhbHVlKSxDZSgxKSxSZSgiY2xyTG9hZGluZyIsYS5hcHBseWluZ0tleXMpKCJkaXNhYmxlZCIsYS5kaXNhYmxlQXBwbHlCdXR0b24pLENlKDIpLFJlKCJuZ0lmIixh''@;'; put 'put ''LmlzQXBwRnJlZVRpZXIudmFsdWUpfX1mdW5jdGlvbiBYWWUoYyxsKXsxJmMmJnF0KDAsImFwcC10ZXJtcyIpfXZhciBxc2U9ZnVuY3Rpb24oYyl7cmV0dXJuIGMua2V5PSJrZXkiLGMucmVnaXN0ZXI9InJlZ2lzdGVyIixjLmxpbWl0PSJsaW1pdCIsYy51cGRhdGU9InVwZGF0ZSIsY30ocXNl''@;'; put 'put ''fHx7fSk7Y29uc3QgSlllPVt7cGF0aDoiOmFjdGlvbiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5yb3V0ZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmFwcFNlcnZpY2U9Zix0aGlzLmFjdGlvbj1udWxs''@;'; put 'put ''LHRoaXMubGljZW5zZUVycm9ycz17bWlzc2luZzonTGljZW5jZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBh''@;'; put 'put ''bmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGV4cGlyZWQ6J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5p''@;'; put 'put ''bzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxpbnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRy''@;'; put 'put ''b2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJVEUgKGJlbG93KSBpcyBub3QgZm91bmQgaW4gdGhlIGxpY2VuY2Uga2V5IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBv''@;'; put 'put ''cnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93Lid9LHRoaXMubGljZW5jZUtleVZhbHVlPSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0''@;'; put 'put ''ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmN1cnJlbnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZUtleSx0aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5PXRoaXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5s''@;'; put 'put ''aWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2VuY2VTZXJ2aWNlLnVzZXJDb3VudExpbWl0YXRpb24sdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0h''@;'; put 'put ''MSx0aGlzLmxpY2VuY2VmaWxlPXtmaWxlbmFtZToiIn19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFy''@;'; put 'put ''YW1zLnN1YnNjcmliZShhPT57dGhpcy5rZXlFcnJvcj1hLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9YS5taXNzbWF0Y2hJZCxhLmRldGFpbHMmJih0aGlzLmVycm9yRGV0YWlscz1hdG9iKGEuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGE9PntsZXQgZD1hLmFj''@;'; put 'put ''dGlvbjtkJiZPYmplY3QudmFsdWVzKHFzZSkuaW5jbHVkZXMoZCkmJih0aGlzLmFjdGlvbj1kKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5''@;'; put 'put ''VmFsdWUudHJpbSgpLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKX1jb3B5U3lzc2l0ZShhLGQsaCl7Y29uc3QgZj1oLmpvaW4oIlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2Euc2V0QXR0cmlidXRl''@;'; put 'put ''KCJzaGFwZSIsImNoZWNrIiksYS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLGQuaW5uZXJUZXh0PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY29weSIpLGEucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGQuaW5uZXJUZXh0PSJD''@;'; put 'put ''b3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVnaXN0ZXJrZXkiLHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tF''@;'; put 'put ''WTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1dfSkudGhlbihkPT57ZC5yZXR1cm4mJmQucmV0dXJuWzBdJiYiU1VDQ0VTUyI9PT1kLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlcGxhY2UobG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmFwcGx5aW5nS2V5''@;'; put 'put ''cz0hMX0pfW9uRmlsZUNhcHR1cmUoYSxkPSExKXtsZXQgaD1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYodGhpcy5saWNlbmNlZmlsZS5maWxlbmFtZT1oLm5hbWUsIWgpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSEwO2NvbnN0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9''@;'; put 'put ''Xz0+e2lmKHRoaXMubGljZW5jZUZpbGVFcnJvcj0iRXJyb3IgcmVhZGluZyBmaWxlLiIsIV98fCFfLnRhcmdldHx8MiE9Xy50YXJnZXQucmVhZHlTdGF0ZXx8Xy50YXJnZXQuZXJyb3J8fCFfLnRhcmdldC5yZXN1bHQpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGlj''@;'; put 'put ''ZW5jZUZpbGVFcnJvcj12b2lkIDA7Y29uc3QgVD1fLnRhcmdldC5yZXN1bHQudG9TdHJpbmcoKS5zcGxpdCgiXG4iKTt0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT1UWzFdLHRoaXMubGljZW5jZUtleVZhbHVlPVRbMF19LGYucmVhZEFzVGV4dChoKX1zd2l0Y2hUeXBlKGEpe3RoaXMuaW5wdXRU''@;'; put 'put ''eXBlPWF9Z2V0IGRpc2FibGVBcHBseUJ1dHRvbigpe3JldHVybiB0aGlzLmxpY2VuY2VLZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMubGljZW5jZUtleVZhbHVlPT09dGhpcy5jdXJyZW50TGljZW5jZUtleSYmdGhpcy5hY3RpdmF0aW9u''@;'; put 'put ''S2V5VmFsdWU9PT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChXbCksdHQoQzApLHR0KG9hKSx0dCh6eCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGljZW5zaW5n''@;'; put 'put ''Il1dLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFszLCJtaXNza2V5Iiw0LCJuZ0ZvciIs''@;'; put 'put ''Im5nRm9yT2YiXSxbMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLXRvcC1yaWdodCIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSIsInNpemUiLCIxNSIsMSwiY3Vyc29yLXBvaW50ZXIiXSxbImNvcHlJY29uIiwiIl0sWzEsInRvb2x0aXAtY29udGVudCJdLFsiY29weVRvb2x0''@;'; put 'put ''aXAiLCIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWyJjbHJUYWJMaW5rIiwiIl0sWyJ0eXBlIiwiZmlsZSIsImhpZGRlbiIsIiIsMywiY2hhbmdlIl0sWyJsaWNlbmNlRmlsZSIsIiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsImRyb3AtYXJlYSIsMywiY2xpY2siLCJmaWxlRHJvcCJdLFsi''@;'; put 'put ''Y2xhc3MiLCJzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWzEsImNsci1mb3JtIiwibGljZW5zZS1rZXktZm9ybSJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbIm5hbWUiLCJsaWNlbnNlLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBsaWNlbmNlIGtleSBoZXJlIiwxLCJjbHIt''@;'; put 'put ''dGV4dGFyZWEiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSJdLFsxLCJjbHItZm9ybSIsImFjdGl2YXRpb24ta2V5LWZvcm0iXSxbIm5hbWUiLCJhY3RpdmF0aW9uLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBhY3RpdmF0aW9uIGtleSBoZXJlIiwxLCJj''@;'; put 'put ''bHItdGV4dGFyZWEiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImFwcGx5LWtleXMiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJyb3V0ZXJMaW5rIiwiLyIsImNsYXNzIiwiYnRuIGJ0bi1zbSBi''@;'; put 'put ''dG4tbGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiwzLCJpbm5lckhUTUwiLDQsIm5nSWYiXSxbMSwia2V5LWVycm9yIl0sWzEsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIl0sWyJjbGFzc2VzIiwiY29sb3ItZ3JlZW4i''@;'; put 'put ''XSxbMSwibS0wIl0sWzEsInNwaW5uZXItc20iXSxbInJvdXRlckxpbmsiLCIvIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFFlKDAsS1llLDQ1LDEzLCJkaXYiLDApLFFlKDEsWFllLDEsMCwiYXBwLXRlcm1zIiwxKSksMiZhJiYo''@;'; put 'put ''UmUoIm5nSWYiLCJyZWdpc3RlciIhPT1kLmFjdGlvbiksQ2UoMSksUmUoIm5nSWYiLCJyZWdpc3RlciI9PT1kLmFjdGlvbikpfSxkZXBlbmRlbmNpZXM6W3hzLFppLG5kLHRoLENwLFdhLEJzLHdwLE9zLHIyLGthLFp1LGRoLExwLE9wLGRnLFJwLElwLGNnLHUyLEJ1LFBZZSxCRV0sc3R5bGVz''@;'; put 'put ''OlsiW19uZ2hvc3QtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDAlIC0gOTZweCk7cGFkZGluZzoyMHB4fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9LmtleS1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1pc3NrZXlbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde2NvbG9yOiNlNzRjM2N9LmxpY2Vuc2Uta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWlu''@;'; put 'put ''ZXJbX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29u''@;'; put 'put ''dHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRhcmVhW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoxNzBweDttYXgtaGVpZ2h0OjE3MHB4O21pbi1oZWlnaHQ6MTcwcHg7cmVzaXplOm5vbmV9LmFwcGx5LWtleXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo0MHB4O3dpZHRoOjIwMHB4fS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjE1cHg7Ym9yZGVyOjJweCBkYXNoZWQgI2IyYjJiMjtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcjttYXJnaW46MTBweCAwfWNsci10YWJzW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0iXX0pLGN9KSgpLGNhbkFjdGl2YXRlOltwVV0sY2FuRGVhY3RpdmF0ZTpbcFVdfV07bGV0IFFZZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltkYy5mb3JDaGlsZChKWWUpLGRjXX0pLGN9KSgpLGVXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s''@;'; put 'put ''Yy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbywkbCxfdSxRWWUsVjddfSksY30pKCk7ZnVuY3Rpb24gdFdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDE5KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQsZD1qZSgpO1Jl''@;'; put 'put ''KCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrZC5qc1BhcmFtc1thXSksQ2UoMSksbXIoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19ZnVuY3Rpb24gbldlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpLiRpbXBsaWNpdCxkPWplKCk7Q2UoMSks''@;'; put 'put ''bXIoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19ZnVuY3Rpb24gcldlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsNCksTmUoMikseWUoKSxRZSgzLHRXZSwyLDIsInRkIiwxNyksUWUoNCxuV2UsMiwxLCJ0ZCIsMTgpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgy''@;'; put 'put ''KSxvcihhKSxDZSgxKSxSZSgibmdJZiIsYS5pbmNsdWRlcygiVEFCTEVfSUQiKSksQ2UoMSksUmUoIm5nSWYiLCFhLmluY2x1ZGVzKCJUQUJMRV9JRCIpKX19ZnVuY3Rpb24gaVdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsNCksTmUoMikseWUoKSxtZSgzLCJ0ZCIsNCksTmUo''@;'; put 'put ''NCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1qZSgzKTtDZSgyKSxvcihhKSxDZSgyKSxvcihkLnN1Ym1pdERldGFpbHNbYV0pfX1mdW5jdGlvbiBvV2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMykoMywi''@;'; put 'put ''dGhlYWQiKSg0LCJ0ciIpKDUsInRoIiw0KSxOZSg2LCJOYW1lIikseWUoKSxtZSg3LCJ0aCIsNCksTmUoOCwiVmFsdWUiKSx5ZSgpKCkoKSxtZSg5LCJ0Ym9keSIpLFFlKDEwLGlXZSw1LDIsInRyIiw1KSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoMTApLFJlKCJuZ0Zvck9m''@;'; put 'put ''IixhLnN1Ym1pdEFycil9fWZ1bmN0aW9uIHNXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDQpLE5lKDIpLHllKCksbWUoMywidGQiLDQpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUoMik7Q2UoMiksb3IoYSksQ2UoMiksb3IoZC5qc1BhcmFt''@;'; put 'put ''c1thXSl9fWZ1bmN0aW9uIGFXZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWJzIikoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjApLE5lKDMsIlN1Ym1pdHRlZCBUYWJsZSBEZXRhaWxzIikseWUoKSxRZSg0LG9XZSwxMSwxLCJjbHItdGFiLWNvbnRlbnQiLDIxKSx5ZSgpLG1lKDUsImNs''@;'; put 'put ''ci10YWIiKSg2LCJidXR0b24iLDIwKSxOZSg3LCJCYXNlIFRhYmxlIERldGFpbHMiKSx5ZSgpLG1lKDgsImNsci10YWItY29udGVudCIpKDksImRpdiIsMjIpKDEwLCJ0YWJsZSIsMykoMTEsInRoZWFkIikoMTIsInRyIikoMTMsInRoIiw0KSxOZSgxNCwiTmFtZSIpLHllKCksbWUoMTUsInRo''@;'; put 'put ''Iiw0KSxOZSgxNiwiVmFsdWUiKSx5ZSgpKCkoKSxtZSgxNywidGJvZHkiKSxRZSgxOCxzV2UsNSwyLCJ0ciIsNSkseWUoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsITApLENlKDE0KSxSZSgibmdGb3JPZiIsYS5rZXlzQXJyYXkpfX1mdW5j''@;'; put 'put ''dGlvbiBsV2UoYyxsKXsxJmMmJihtZSgwLCJwIiw3NCksTmUoMSwiIFRoZXJlIGFyZSBubyBkZXRhaWxzIHRvIHNob3cgIikseWUoKSl9ZnVuY3Rpb24gY1dlKGMsbCl7aWYoMSZjJiYoenIoMCksbWUoMSwiZGl2Iiw3NSkoMiwic3BhbiIpLE5lKDMsIlRhYmxlIElkOiIpLHllKCksbWUoNCwi''@;'; put 'put ''c3Ryb25nIiw3NiksTmUoNSkseWUoKSgpLG1lKDYsImRpdiIpKDcsInNwYW4iKSxOZSg4LCJTdWJtaXR0ZXI6IikseWUoKSxtZSg5LCJzcGFuIiw3NyksTmUoMTApLHllKCkoKSxtZSgxMSwiZGl2IikoMTIsInNwYW4iKSxOZSgxMywiU3VibWl0dGVkIG9uOiIpLHllKCksbWUoMTQsInNwYW4i''@;'; put 'put ''LDc3KSxOZSgxNSkseWUoKSgpLG1lKDE2LCJkaXYiKSgxNywic3BhbiIpLE5lKDE4LCJTdWJtaXR0ZWQgUmVhc29uOiIpLHllKCksbWUoMTksInNwYW4iLDc3KSxOZSgyMCkseWUoKSgpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSg1KTtDZSg0KSxSZSgicm91dGVyTGluayIsIi9zdGFnZS8iKyhu''@;'; put 'put ''dWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lEKSksQ2UoMSksbXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiAiKSxDZSg1KSxtcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxl''@;'; put 'put ''RGV0YWlscy5TVUJNSVRURURfQllfTk0sIiAiKSxDZSg1KSxtcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLENlKDUpLG1yKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1J''@;'; put 'put ''VFRFRF9SRUFTT05fVFhULCIgIil9fWZ1bmN0aW9uIHVXZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDc4KSxxdCgxLCJjbHItaWNvbiIsNzkpLE5lKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIikseWUoKSl9ZnVuY3Rp''@;'; put 'put ''b24gZFdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2Iiw1MSksUWUoMyxsV2UsMiwwLCJwIiw0NSksUWUoNCxjV2UsMjEsNSwibmctY29udGFpbmVyIiw4KSx5ZSgpLG1lKDUsImRpdiIsNTIpKDYsImRpdiIsNTMpKDcsImRpdiIs''@;'; put 'put ''NTQpKDgsImRpdiIsNTUpKDksImJ1dHRvbiIsNTYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDQpO3JldHVybiBqdChoLmdvVG9CYXNlKG51bGw9PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxOZSgxMCwiIEdvIHRvIGJhc2UgdGFibGUg''@;'; put 'put ''c2NyZWVuICIpLHllKCksbWUoMTEsImJ1dHRvbiIsNTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDQpO3JldHVybiBqdChoLmdldFRhYmxlKGgudGFibGVJZCkpfSksTmUoMTIsIiBHbyB0byBlZGl0ZWQgc2NyZWVuICIpLHllKCksbWUoMTMsImJ1dHRvbiIsNTgp''@;'; put 'put ''LHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDQpO3JldHVybiBqdChoLmdvQmFjayhudWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1BhcmFtcy5UQUJMRV9OTSkpfSksTmUoMTQsIiBHbyBiYWNrIHRvIGVkaXRvciAiKSx5ZSgpKCkoKSgpLG1lKDE1LCJkaXYiLDU5KSgx''@;'; put 'put ''NiwiYnV0dG9uIiw2MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSg0KS5hcHByb3ZlVGFibGUoKSl9KSxOZSgxNywiIEFDQ0VQVCAiKSx5ZSgpLG1lKDE4LCJidXR0b24iLDYxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDQpLnJl''@;'; put 'put ''amVjdE9wZW49ITApfSksTmUoMTksIiBSRUpFQ1QgIikseWUoKSxtZSgyMCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDYyKSgyMSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjIsImlucHV0Iiw2MykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSg0KS5m''@;'; put 'put ''b3JtYXR0ZWRWYWx1ZXM9aCl9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSg0KS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLHllKCksbWUoMjMsImxhYmVsIiw2NCksTmUoMjQpLHllKCkoKSgpKCksbWUoMjUsImRpdiIsNjUpLFFlKDI2LHVXZSwzLDAsInNwYW4iLDY2''@;'; put 'put ''KSxtZSgyNywiZGl2IiwzMSkoMjgsImRpdiIsNjcpKDI5LCJzcGFuIiw2OCksTmUoMzAsIiBDaGFuZ2VkIFJvd3MgIiksbWUoMzEsInNwYW4iLDY5KSxOZSgzMikseWUoKSgpLG1lKDMzLCJzcGFuIiw3MCksTmUoMzQsIiBBZGRlZCBSb3dzICIpLG1lKDM1LCJzcGFuIiw3MSksTmUoMzYpLHll''@;'; put 'put ''KCkoKSxtZSgzNywic3BhbiIsNzIpLE5lKDM4LCIgRGVsZXRlZCBSb3dzICIpLG1lKDM5LCJzcGFuIiw3MyksTmUoNDApLHllKCkoKSgpKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoNCk7Q2UoMyksUmUoIm5nSWYiLCFhLnRhYmxlRGV0YWlscyksQ2UoMSksUmUoIm5nSWYiLGEudGFi''@;'; put 'put ''bGVEZXRhaWxzKSxDZSgxMiksUmUoImNsckxvYWRpbmciLGEuYWNjZXB0TG9hZGluZykoImRpc2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLENlKDIpLFJlKCJkaXNhYmxlZCIsIWEu''@;'; put 'put ''bG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8fGEubm9DaGFuZ2VzKSxDZSg0KSxSZSgibmdNb2RlbCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLENlKDIpLG9yKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRl''@;'; put 'put ''ZCIpLENlKDIpLFJlKCJuZ0lmIixhLmRpZmZzTGltaXQpLENlKDYpLG9yKGEubGVucy51cGRhdGVkKSxDZSg0KSxvcihhLmxlbnMubmV3KSxDZSg0KSxvcihhLmxlbnMuZGVsZXRlZCl9fWZ1bmN0aW9uIGhXZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyB0''@;'; put 'put ''YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gZldlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw4MCkoMSwic3BhbiIsODEpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCksUWUoMyxoV2UsMywwLCJkaXYiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1qZSg0KTtDZSgzKSxSZSgibmdJZiIsIWEubG9h''@;'; put 'put ''ZGluZ1RhYmxlKX19ZnVuY3Rpb24gcFdlKGMsbCl7MSZjJiYobWUoMCwicCIsNzQpLE5lKDEsIiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBzaG93ICIpLHllKCkpfWZ1bmN0aW9uIGdXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRoIiw0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQ7Q2UoMSksb3IoYSl9fWZ1bmN0aW9uIG1XZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDg2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKS5pbmRleCxkPWplKDIpLmluZGV4LGg9amUoNCk7Q2UoMSksbXIoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2Vz''@;'; put 'put ''W2RdW2FdLCIiKX19Y29uc3QgS3NlPWZ1bmN0aW9uKGMpe3JldHVybnsiY2ggdG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtdG9wLXJpZ2h0IjpjfX07ZnVuY3Rpb24gdldlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDg0KSxOZSgxKSxRZSgyLG1XZSwyLDEsInNwYW4iLDg1KSx5ZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9amUoMikuaW5kZXgsZj1qZSg0KTtSZSgibmdDbGFzcyIsSjIoMyxLc2UsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxDZSgxKSxtcigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIp''@;'; put 'put ''LENlKDEpLFJlKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIF9XZShjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsdldlLDMsNSwidGQiLDgzKSxZcigpKSwyJmMpe2NvbnN0IGE9amUoKS5pbmRleCxkPWplKDQpO0NlKDEpLFJl''@;'; put 'put ''KCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBiV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUoMikuaW5kZXgsaD1qZSg0KTtDZSgxKSxtcigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIp''@;'; put 'put ''fX1mdW5jdGlvbiB5V2UoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLGJXZSwyLDEsInRkIiw0NyksWXIoKSksMiZjKXtjb25zdCBhPWplKCkuaW5kZXgsZD1qZSg0KTtDZSgxKSxSZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19Y29uc3QgWHNlPWZ1bmN0aW9uKGMsbCxhKXtyZXR1cm57YWRk''@;'; put 'put ''ZWRSb3c6YyxkZWxldGVkUm93OmwsdXBkYXRlZFJvdzphfX07ZnVuY3Rpb24gd1dlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDgyKSxRZSgxLF9XZSwyLDEsIm5nLWNvbnRhaW5lciIsOCksUWUoMix5V2UsMiwxLCJuZy1jb250YWluZXIiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4''@;'; put 'put ''LGQ9amUoNCk7UmUoIm5nQ2xhc3MiLGJfKDMsWHNlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLENlKDEpLFJlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxDZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiIT09''@;'; put 'put ''ZC5jaEFyclthXSl9fWZ1bmN0aW9uIENXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMjkpKDEsImRpdiIsMzApKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDMzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDMpLmdvVG9B''@;'; put 'put ''cHByb3ZhbHNMaXN0KCkpfSkscXQoNSwiY2xyLWljb24iLDM0KSxOZSg2LCJCYWNrIHRvIGFwcHJvdmFscyBsaXN0ICIpLHllKCkoKSxtZSg3LCJkaXYiLDM1KSg4LCJoMyIsMzYpLE5lKDkpLHllKCkoKSxtZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIEJ0KGEpLGp0KGplKDMpLmdldERldGFpbHMoKSl9KSxxdCgxMiwiY2xyLWljb24iLDM5KSx5ZSgpKCkoKSxtZSgxMywicCIsNDApLE5lKDE0KSx5ZSgpKCksbWUoMTUsImRpdiIsNDEpLFFlKDE2LGRXZSw0MSwxMSwiZGl2Iiw0MikseWUoKSxRZSgxNyxmV2UsNCwxLCJkaXYiLDQz''@;'; put 'put ''KSxtZSgxOCwiZGl2Iiw0NCksUWUoMTkscFdlLDIsMCwicCIsNDUpLG1lKDIwLCJ0YWJsZSIsMykoMjEsInRoZWFkIikoMjIsInRyIiw0NiksUWUoMjMsZ1dlLDIsMSwidGgiLDQ3KSx5ZSgpKCksbWUoMjQsInRib2R5IiksUWUoMjUsd1dlLDMsNywidHIiLDQ4KSx5ZSgpKCkoKSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1qZSgzKTtDZSg5KSxtcigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfTk0sIiAiKSxDZSg1KSxtcigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfREVTQywiICIpLENlKDIpLFJlKCJuZ0lmIixhLmxvYWRlZCks''@;'; put 'put ''Q2UoMSksUmUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSksQ2UoMiksUmUoIm5nSWYiLGEubG9hZGluZ1RhYmxlJiZhLm5vQ2hhbmdlcyksQ2UoNCksUmUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSxDZSgyKSxSZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gU1dlKGMsbCl7aWYoMSZj''@;'; put 'put ''JiYobWUoMCwiZGl2IiwyNyksUWUoMSxDV2UsMjYsNywiZGl2IiwyOCkseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIE1XZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDgxKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5j''@;'; put 'put ''dGlvbiB4V2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgcHJldmlldyIpLHllKCkoKSl9ZnVuY3Rpb24gRVdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw4NyksUWUoMSxNV2UsMiwwLCJzcGFuIiw4OCksUWUoMix4V2UsMywwLCJkaXYiLDgpLHllKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1qZSgyKTtDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24ga1dlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMyksUWUoMSxTV2UsMiwxLCJkaXYiLDI0KSxtZSgyLCJkaXYiLDI1KSxRZSgzLEVXZSwz''@;'; put 'put ''LDIsImRpdiIsMjYpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgyKSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gQVdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsNzgpLHF0KDEsImNsci1pY29uIiw3OSksTmUoMiwiIE9ubHkg''@;'; put 'put ''dGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSx5ZSgpKX1mdW5jdGlvbiBUV2UoYyxsKXsxJmMmJnF0KDAsImRpdiIsNDkpfWZ1bmN0aW9uIERXZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyB0YWJs''@;'; put 'put ''ZSIpLHllKCkoKSl9ZnVuY3Rpb24gSVdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMDMpKDEsInNwYW4iLDgxKSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLFFlKDMsRFdlLDMsMCwiZGl2Iiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoNCk7Q2UoMyksUmUoIm5nSWYiLCFhLmxvYWRp''@;'; put 'put ''bmdUYWJsZSl9fWZ1bmN0aW9uIExXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRoIiw0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksb3IoYSl9fWZ1bmN0aW9uIFJXZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDg2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9amUoKS5pbmRleCxkPWplKDIpLmluZGV4LGg9amUoNCk7Q2UoMSksbXIoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19ZnVuY3Rpb24gT1dlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDg0KSxOZSgxKSxRZSgyLFJXZSwyLDEsInNwYW4iLDg1KSx5''@;'; put 'put ''ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9amUoMikuaW5kZXgsZj1qZSg0KTtSZSgibmdDbGFzcyIsSjIoMyxLc2UsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxDZSgxKSxtcigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVth''@;'; put 'put ''XSwiICIpLENlKDEpLFJlKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIFBXZShjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsT1dlLDMsNSwidGQiLDgzKSxZcigpKSwyJmMpe2NvbnN0IGE9amUoKS5pbmRleCxkPWplKDQpO0Nl''@;'; put 'put ''KDEpLFJlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBGV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUoMikuaW5kZXgsaD1qZSg0KTtDZSgxKSxtcigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVth''@;'; put 'put ''XSwiICIpfX1mdW5jdGlvbiBIV2UoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLEZXZSwyLDEsInRkIiw0NyksWXIoKSksMiZjKXtjb25zdCBhPWplKCkuaW5kZXgsZD1qZSg0KTtDZSgxKSxSZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gTldlKGMsbCl7aWYoMSZjJiYobWUo''@;'; put 'put ''MCwidHIiLDgyKSxRZSgxLFBXZSwyLDEsIm5nLWNvbnRhaW5lciIsOCksUWUoMixIV2UsMiwxLCJuZy1jb250YWluZXIiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9amUoNCk7UmUoIm5nQ2xhc3MiLGJfKDMsWHNlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNo''@;'; put 'put ''QXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLENlKDEpLFJlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxDZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiIT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIFZXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsOTMp''@;'; put 'put ''KDEsImRpdiIsOTQpKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDk1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDMpLmdvVG9TdWJtaXRMaXN0KCkpfSkscXQoNSwiY2xyLWljb24iLDM0KSxOZSg2LCJCYWNrIHRvIHN1Ym1pdHRlZCBsaXN0ICIp''@;'; put 'put ''LHllKCkoKSxtZSg3LCJkaXYiLDk2KSg4LCJoMyIsOTcpLE5lKDkpLHllKCkoKSxtZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDMpLnRhYmxlRmxhZz0hMCl9KSxxdCgxMiwiY2xyLWljb24iLDM5KSx5ZSgpKCkoKSxt''@;'; put 'put ''ZSgxMywicCIsOTgpLE5lKDE0KSx5ZSgpKCksbWUoMTUsImRpdiIsNTApKDE2LCJkaXYiLDUxKSgxNywiZGl2Iiw3NSkoMTgsInNwYW4iKSxOZSgxOSwiVGFibGUgSWQ6IikseWUoKSxtZSgyMCwic3Ryb25nIiw3NikoMjEsInNwYW4iKSxOZSgyMikseWUoKSgpKCksbWUoMjMsImRpdiIpKDI0''@;'; put 'put ''LCJzcGFuIiksTmUoMjUsIlN1Ym1pdHRlZCBvbjoiKSx5ZSgpLG1lKDI2LCJzcGFuIiw3NyksTmUoMjcpLHllKCkoKSxtZSgyOCwiZGl2IikoMjksInNwYW4iKSxOZSgzMCwiU3VibWl0IE1lc3NhZ2U6IikseWUoKSxtZSgzMSwic3BhbiIpLE5lKDMyKSx5ZSgpKCkoKSxtZSgzMywiZGl2Iiw1''@;'; put 'put ''MikoMzQsImRpdiIsNTMpKDM1LCJkaXYiLDU0KSgzNiwiZGl2Iiw1NSkoMzcsImJ1dHRvbiIsNTYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDMpO3JldHVybiBqdChoLmdvVG9CYXNlKGguc3ViT2JqLmJhc2UpKX0pLE5lKDM4LCIgR28gdG8gYmFzZSB0YWJsZSBz''@;'; put 'put ''Y3JlZW4gIikseWUoKSxtZSgzOSwiYnV0dG9uIiw1NykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoMyk7cmV0dXJuIGp0KGguZ2V0VGFibGUoaC5zdWJPYmoudGFibGVJZCkpfSksTmUoNDAsIiBHbyB0byBlZGl0ZWQgc2NyZWVuICIpLHllKCksbWUoNDEsImJ1dHRv''@;'; put 'put ''biIsNTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDMpO3JldHVybiBqdChoLmdvQmFjayhoLnN1Yk9iai5iYXNlKSl9KSxOZSg0MiwiIEdvIGJhY2sgdG8gZWRpdG9yICIpLHllKCkoKSgpKCksbWUoNDMsImRpdiIsNjUpLFFlKDQ0LEFXZSwzLDAsInNwYW4iLDY2''@;'; put 'put ''KSxtZSg0NSwiZGl2IiwzMSkoNDYsImRpdiIsNjcpKDQ3LCJzcGFuIiw2OCksTmUoNDgsIiBDaGFuZ2VkIFJvd3MgIiksbWUoNDksInNwYW4iLDY5KSxOZSg1MCkseWUoKSgpLG1lKDUxLCJzcGFuIiw3MCksTmUoNTIsIiBBZGRlZCBSb3dzICIpLG1lKDUzLCJzcGFuIiw3MSksTmUoNTQpLHll''@;'; put 'put ''KCkoKSxtZSg1NSwic3BhbiIsNzIpLE5lKDU2LCIgRGVsZXRlZCBSb3dzICIpLG1lKDU3LCJzcGFuIiw3MyksTmUoNTgpLHllKCkoKSgpKCkoKSxtZSg1OSwiZGl2Iiw1MykoNjAsImNsci10b2dnbGUtY29udGFpbmVyIiw5OSkoNjEsImNsci10b2dnbGUtd3JhcHBlciIpKDYyLCJpbnB1dCIs''@;'; put 'put ''NjMpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoMykuZm9ybWF0dGVkVmFsdWVzPWgpfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoMykuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSx5ZSgpLG1lKDYzLCJsYWJlbCIpLE5l''@;'; put 'put ''KDY0KSx5ZSgpKCkoKSgpKCkoKSxtZSg2NSwiZGl2IiwxMDApLFFlKDY2LFRXZSwxLDAsImRpdiIsNDIpLHllKCksUWUoNjcsSVdlLDQsMSwiZGl2IiwxMDEpLG1lKDY4LCJkaXYiLDEwMikoNjksInRhYmxlIiwzKSg3MCwidGhlYWQiKSg3MSwidHIiLDQ2KSxRZSg3MixMV2UsMiwxLCJ0aCIs''@;'; put 'put ''NDcpLHllKCkoKSxtZSg3MywidGJvZHkiKSxRZSg3NCxOV2UsMyw3LCJ0ciIsNDgpLHllKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWplKDMpO0NlKDkpLG1yKCIgIixhLnN1Yk9iai5iYXNlLCIgIiksQ2UoNSksbXIoIiAiLGEudGFibGVEZXNjcmlwdGlvbiwiICIpLENlKDYpLFJlKCJyb3V0''@;'; put 'put ''ZXJMaW5rIiwiL3N0YWdlLyIrYS5zdWJPYmoudGFibGVJZCksQ2UoMiksbXIoIiAiLGEuc3ViT2JqLnRhYmxlSWQsIiIpLENlKDUpLG1yKCIgIixhLnN1Yk9iai5zdWJtaXR0ZWQsIiAiKSxDZSg1KSxtcigiICIsYS5zdWJPYmouc3VibWl0UmVhc29uLCIgIiksQ2UoMTIpLFJlKCJuZ0lmIixh''@;'; put 'put ''LmRpZmZzTGltaXQpLENlKDYpLG9yKGEubGVucy51cGRhdGVkKSxDZSg0KSxvcihhLmxlbnMubmV3KSxDZSg0KSxvcihhLmxlbnMuZGVsZXRlZCksQ2UoNCksUmUoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxDZSgyKSxvcihhLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5m''@;'; put 'put ''b3JtYXR0ZWQiKSxDZSgyKSxSZSgibmdJZiIsYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLENlKDUpLFJlKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksQ2UoMiksUmUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIEJXZShjLGwpe2lmKDEmYyYmKG1lKDAs''@;'; put 'put ''ImRpdiIsOTEpLFFlKDEsVldlLDc1LDE2LCJkaXYiLDkyKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24galdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLHll''@;'; put 'put ''KCkoKSl9ZnVuY3Rpb24geldlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxMDQpKDEsImRpdiIsMTA1KSgyLCJzcGFuIiw4MSksTmUoMywiIExvYWRpbmcuLi4gIikseWUoKSxRZSg0LGpXZSwzLDAsImRpdiIsOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoNCksUmUoIm5nSWYi''@;'; put 'put ''LCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFVXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLFFlKDEsQldlLDIsMSwiZGl2Iiw4OSksUWUoMix6V2UsNSwxLCJkaXYiLDkwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwh''@;'; put 'put ''YS5sb2FkZWQpfX1jb25zdCBaV2U9ZnVuY3Rpb24oKXtyZXR1cm57c3RhbmRhbG9uZTohMH19O2xldCBKc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRl''@;'; put 'put ''PWYsdGhpcy5kZXRhaWxzT3Blbj0hMSx0aGlzLnJlamVjdE9wZW49ITEsdGhpcy5sZW5zPXtuZXc6MCx1cGRhdGVkOjAsZGVsZXRlZDowfSx0aGlzLmxvYWRlZD0hMSx0aGlzLmxvYWRpbmdUYWJsZT0hMSx0aGlzLnN1Ym1pdFJlYXNvbj0iIix0aGlzLmluc3RhbmNlPSJob3RJbnN0YW5jZSIs''@;'; put 'put ''dGhpcy5hY2NlcHRMb2FkaW5nPSExLHRoaXMucmVqZWN0TG9hZGluZz0hMSx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLnRhYmxlRmxhZz0hMSx0aGlzLnJvd0tleXM9W10sdGhpcy5jaEFycj1bXSx0aGlzLnNlY29uZE9wZW49ITEsdGhpcy5mb3JtYXR0ZWRWYWx1ZXM9ITAsdGhpcy5jaGFuZ2Vz''@;'; put 'put ''QXJyPVtdLHRoaXMuZGlmZlRhYmxlPXtkYXRhOltdfSx0aGlzLmRpZmZzTGltaXQ9ITEsdGhpcy5yZWNvcmRzTGltaXQ9MTAwfWdldCBub0NoYW5nZXMoKXtyZXR1cm4gMD09PXRoaXMubGVucy5uZXcmJjA9PT10aGlzLmxlbnMudXBkYXRlZCYmMD09PXRoaXMubGVucy5kZWxldGVkfWdvVG9C''@;'; put 'put ''YXNlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdvVG9BcHByb3ZhbHNMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmUiKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdv''@;'; put 'put ''QmFjayhhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd0RldGFpbHNTZWxlY3QoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxl''@;'; put 'put ''RmxhZ31nZXREZXRhaWxzKCl7dGhpcy5kZXRhaWxzT3Blbj0hMH1vbkhvdFNlbGVjdGlvbihhKXt0aGlzLmhvdFNlbGVjdGlvbj1hLnNsaWNlKDAsNCl9b25Ib3REZXNlbGVjdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFNlbGVjdGlvbj1udWxsfSwxMDApfXJlamVjdGluZygpe3ZhciBh''@;'; put 'put ''PXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EucmVqZWN0TG9hZGluZz0hMCxhLnN1Ym1pdFJlYXNvbj1hLnN1Ym1pdFJlYXNvbi5yZXBsYWNlKC9cbi9nLCIuICIpO2xldCBkPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmEudGFibGVJZCxTVFBfUkVBU09OOmEuc3VibWl0''@;'; put 'put ''UmVhc29ufTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5yZWplY3RpbmcoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKS50aGVuKGg9PnthLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMSxh''@;'; put 'put ''LnJlamVjdExvYWRpbmc9ITF9KX0pKCl9YXBwcm92ZVRhYmxlKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5hY2NlcHRMb2FkaW5nPSEwO2xldCBkPXtBQ1RJT046IkFQUFJPVkVfVEFCTEUiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRTphLnBhcmFtcz8uRElGRlRJTUUs''@;'; put 'put ''TElCRFM6YS5wYXJhbXM/LkxJQkRTfTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5hcHByb3ZlVGFibGUoZCwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKGg9PnthLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaD0+e2Eu''@;'; put 'put ''YWNjZXB0TG9hZGluZz0hMX0pfSkoKX1nb1RvU3VibWl0TGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9zdWJtaXR0ZWQiKX1jYWxsQ2hhbmdlc0luZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2UuZ2V0''@;'; put 'put ''Q2hhbmdlSW5mbyhhKS50aGVuKGg9PntkLnRhYmxlRGV0YWlscz1oLmpzcGFyYW1zWzBdLGQuanNQYXJhbXM9aC5qc3BhcmFtc1swXTtsZXQgZj1bXTtmb3IoY29uc3QgXyBpbiBkLmpzUGFyYW1zKWQuanNQYXJhbXMuaGFzT3duUHJvcGVydHkoXykmJmYucHVzaChfKTtkLmtleXNBcnJheT1m''@;'; put 'put ''fSkuY2F0Y2goaD0+e2QuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PntkLmxvYWRlZD0hMH0pfSkoKX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lmKCF0aGlzLnJlc3BvbnNlKXJldHVybjtsZXQgYT10aGlzLnJlc3BvbnNlLm5ldyxkPXRo''@;'; put 'put ''aXMucmVzcG9uc2UudXBkYXRlcyxoPXRoaXMucmVzcG9uc2UuZGVsZXRlZCxmPXRoaXMucmVzcG9uc2Uub3JpZ2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYoYT10aGlzLnJlc3BvbnNlLmZtdF9uZXcsZD10aGlzLnJlc3BvbnNlLmZtdF91cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5mbXRf''@;'; put 'put ''ZGVsZXRlZCxmPXRoaXMucmVzcG9uc2UuZm10X29yaWdpbmFscyksdGhpcy5vcmlnaW5hbHM9Zix0aGlzLnJvd0tleXM9W107Zm9yKGxldCBTdD0wO1N0PGQubGVuZ3RoO1N0Kyspe2xldCBRdD1PYmplY3Qua2V5cyhkW1N0XSk7Zm9yKGxldCBubj0wO25uPFF0Lmxlbmd0aDtubisrKWRbU3Rd''@;'; put 'put ''W1F0W25uXV0hPT1mW1N0XVtRdFtubl1dJiZ0aGlzLmNoYW5nZXNBcnIucHVzaCh7aW5kOlN0LGZpZWxkOlF0W25uXSxwcm9wOmRbU3RdW1F0W25uXV0sb3JpZ2luYWw6ZltTdF1bUXRbbm5dXX0pfXRoaXMubGVucz17bmV3OnRoaXMucGFyYW1zPy5OVU1fQURERUR8fDAsdXBkYXRlZDp0aGlz''@;'; put 'put ''LnBhcmFtcz8uTlVNX1VQREFURUR8fDAsZGVsZXRlZDp0aGlzLnBhcmFtcz8uTlVNX0RFTEVURUR8fDB9O2xldCBpZT1bXSxnZT1kLmNvbmNhdChhLGgpO2ZvcihsZXQgU3Q9MDtTdDx0aGlzLnJlc3BvbnNlLmNvbHMubGVuZ3RoO1N0KyspaWUucHVzaCh0aGlzLnJlc3BvbnNlLmNvbHNbU3Rd''@;'; put 'put ''Lk5BTUUpO2xldCB3ZT10aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy5uZXcsRWU9dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5sZW5zLnVwZGF0ZWQ7dGhpcy5kaWZmc0xp''@;'; put 'put ''bWl0PXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXR8fHRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMuZGVsZXRlZD50aGlzLnJlY29yZHNMaW1pdCx0aGlzLmFkZENvdW50PXdlO2xldCBvdD1bXSxldD1bXTtmb3IobGV0IFN0PTA7U3Q8aWUubGVu''@;'; put 'put ''Z3RoO1N0KyspZXQucHVzaCh7ZGF0YTppZVtTdF0scmVhZE9ubHk6ITB9KTt0aGlzLmRpZmZUYWJsZS5kYXRhPWdlO2ZvcihsZXQgU3Q9MDtTdDxnZS5sZW5ndGg7U3QrKyl7bGV0IG5uPU9iamVjdC5rZXlzKGdlW1N0XSk7dGhpcy5yb3dLZXlzLnB1c2gobm4pfWxldCB5dD1bXSxrdD1bXTtm''@;'; put 'put ''b3IobGV0IFN0PTA7U3Q8dGhpcy5kaWZmVGFibGUuZGF0YS5sZW5ndGg7U3QrKyl7aWYoU3Q8RWUmJjAhPT1FZSl7eXQucHVzaChbXSksa3QucHVzaChbXSksb3QucHVzaCgidXBkYXRlZCIpO2xldCBRdD1PYmplY3Qua2V5cyh0aGlzLmRpZmZUYWJsZS5kYXRhW1N0XSk7Zm9yKGxldCBubj0w''@;'; put 'put ''O25uPFF0Lmxlbmd0aDtubisrKXtsZXQgbW49UXRbbm5dO2ZbU3RdW21uXSE9PWRbU3RdW21uXT8oeXRbU3RdLnB1c2goITApLGt0W1N0XS5wdXNoKGZbU3RdW21uXSkpOih5dFtTdF0ucHVzaCghMSksa3RbU3RdLnB1c2gobnVsbCkpfXRoaXMuYXJyQ2hhbmdlZD15dCx0aGlzLmFyck9mQ2hh''@;'; put 'put ''bmdlcz1rdH1TdD49RWUmJlN0PEVlK3dlJiZvdC5wdXNoKCJhZGRlZCIpLFN0PndlK0VlLTEmJm90LnB1c2goImRlbGV0ZWQiKX10aGlzLmNoQXJyPW90LHRoaXMucm93SGVhZGVyPXRoaXMucm93S2V5c1swXSx0aGlzLmRpZmZUYWJsZS5kYXRhPWdlfW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBh''@;'; put 'put ''PXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGEuX2RldGFpbHNTdWI9YS5zYXNTdG9yZVNlcnZpY2Uuc3VibWl0dERldGFpbC5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgaD1maShmdW5jdGlvbiooZil7YS5zdWJPYmo9Zi52aWV3RGF0YSxhLnRhYmxlSWQ9Zi52aWV3RGF0YS50YWJs''@;'; put 'put ''ZUlkLGEuc3VibWl0dGVkPWYudmlld0RhdGEuc3ViLGEuc3VibWl0RGV0YWlscz1mLmRhdGEsYS5zdWJtaXRBcnI9W107Zm9yKGxldCBUIGluIGEuc3VibWl0RGV0YWlscykic3ViIiE9PVQmJmEuc3VibWl0QXJyLnB1c2goVCk7bGV0IF89e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50''@;'; put 'put ''YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKF8sIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihUPT57YS5wYXJhbXM9VC5wYXJhbXNbMF0sYS5yZXNwb25zZT1ULGEuY2FsY0RpZmYo''@;'; put 'put ''KX0pLmNhdGNoKFQ9PlQpLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJsZT0hMH0pLGEuY2FsbENoYW5nZXNJbmZvKGEudGFibGVJZCl9KTtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdHlwZW9mIGEucm91dGVyLnNuYXBzaG90LnBhcmFt''@;'; put 'put ''cy50YWJsZUlkPiJ1IilyZXR1cm47YS50YWJsZUlkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO2xldCBkPXtBQ1RJT046IlNIT1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dE''@;'; put 'put ''aWZmcyhkLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2EucGFyYW1zPWgucGFyYW1zWzBdLGEucmVzcG9uc2U9aCxhLmNhbGNEaWZmKCl9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExfSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEw''@;'; put 'put ''LGEuc2V0Rm9jdXMoKX0pLGEuY2FsbENoYW5nZXNJbmZvKGEudGFibGVJZCl9KSgpfW5nT25EZXN0cm95KCl7dGhpcy5fZGV0YWlsc1N1YiYmdGhpcy5fZGV0YWlsc1N1Yi51bnN1YnNjcmliZSgpfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRF''@;'; put 'put ''bGVtZW50QnlJZCgiYWNjZXB0QnRuIik7YSYmYS5mb2N1cygpfSwyMDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KFdsKSx0dChEcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBw''@;'; put 'put ''cm92ZS1kZXRhaWxzIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0Mix2YXJzOjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEs''@;'; put 'put ''ImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3Jt''@;'; put 'put ''RmllbGRzXzgiXSxbImlkIiwiZm9ybUZpZWxkc184Iiwicm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiLCJpbm5lckhUTUwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5''@;'; put 'put ''cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNs''@;'; put 'put ''YXNzIiwibGVmdCIsNCwibmdJZiJdLFsxLCJsZWZ0IiwibGluay1pdCIsMywicm91dGVyTGluayJdLFsiY2xyVGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1u''@;'; put 'put ''IGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFk''@;'; put 'put ''ZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiY2FyZCIsImNsYXNzIiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBw''@;'; put 'put ''cm92YWxCYWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwibS0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0w''@;'; put 'put ''IiwiZm9udC13ZWlnaHQtMzAwIl0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJvdmFsSW5mbyJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1zbSIsInRvb2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIi''@;'; put 'put ''LCJtdC0xMCJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTI0dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29u''@;'; put 'put ''dCIsIm10LTAiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC1zaXplLTE4Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2Fy''@;'; put 'put ''ZC10ZXh0Il0sWzEsImNsci1yb3ciLCJmb250LXNpemUtMTUiXSxbMSwiY2xyLWNvbC1tZC01Il0sWzEsImNsci1jb2wtbWQtNyJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwi''@;'; put 'put ''bXQtMCJdLFsxLCJjbHItcm93IiwiY2xyLWdhcC01IiwiY2xyLWdhcC1zbS0wIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1jZW50ZXIi''@;'; put 'put ''LCJtdC01IiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1nYXAt''@;'; put 'put ''NSIsImNsci1mbGV4LXNtLXJvdyIsImNsci1nYXAtc20tMCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiYWNjZXB0QnRuIiwidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJp''@;'; put 'put ''ZCIsInJlamVjdEJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuIiwiYnRuLWRhbmdlciIsIm1yLTAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwibS0wIiwibWwtMjBpIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsIiwibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsImNoYW5nZSJdLFsxLCJmb3JtYXR0ZWQtdmFsdWVzLXRvZ2dsZSJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJyb3dzLW5vdGljZSIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJj''@;'; put 'put ''bHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiXSxbMSwibGFiZWwiLCJsYWJlbC13YXJuaW5nIl0sWzEsImJhZGdlIiwiYmFkZ2Utd2FybmluZyJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwiYmFkZ2UiLCJiYWRnZS1z''@;'; put 'put ''dWNjZXNzIl0sWzEsImxhYmVsIiwibGFiZWwtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC1zaXplLTE4Il0sWzEsIm10LTE1Il0sWzEsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxbMSwibXQtMTAiXSxbMSwicm93cy1ub3RpY2Ui''@;'; put 'put ''XSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1vcmFuZ2UiXSxbMSwiaC0yNHZoIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbMSwiZC1mbGV4''@;'; put 'put ''IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImxlZnQiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJsZWZ0IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsInRvb2x0aXAtY29udGVudCIsNCwibmdJZiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiaC03MHZoIiwiZC1mbGV4''@;'; put 'put ''IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwi''@;'; put 'put ''Y2FyZC1ibG9jayIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiY2FyZCBtLTAiLDQsIm5nSWYiXSxbMSwiY2FyZCIsIm0tMCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0''@;'; put 'put ''bGluZSIsMywiY2xpY2siXSxbMSwiY2xyLWNvbC1tZC00Il0sWzEsIm10LTAiLCJmb250LXdlaWdodC0zMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtLTAiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm0tMCIsIm1sLTIwLWkiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIs''@;'; put 'put ''Im92ZXJmbG93LWF1dG8iLCJtci0xMiJdLFsiY2xhc3MiLCJoLTI1dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCJdLFsxLCJoLTI1dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIs''@;'; put 'put ''Imp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJsb2FkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3Jl''@;'; put 'put ''dHVybiBkLmRldGFpbHNPcGVuPWZ9KSxtZSgxLCJoMyIsMSksTmUoMiwiQXBwcm92YWwgRGV0YWlscyIpLHllKCksbWUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxOZSg4LCJOYW1lIikseWUoKSxtZSg5LCJ0aCIsNCksTmUoMTAsIlZhbHVl''@;'; put 'put ''IikseWUoKSgpKCksbWUoMTEsInRib2R5IiksUWUoMTIscldlLDUsMywidHIiLDUpLHllKCkoKSgpLG1lKDEzLCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kZXRhaWxzT3Blbj0hMX0pLE5lKDE1LCIgT2sgIikseWUoKSgpKCksbWUoMTYs''@;'; put 'put ''ImNsci1tb2RhbCIsMCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudGFibGVGbGFnPWZ9KSxtZSgxNywiaDMiLDEpLE5lKDE4LCJBbGwgRGV0YWlscyIpLHllKCksbWUoMTksImRpdiIsMiksUWUoMjAsYVdlLDE5LDIsImNsci10YWJzIiw4KSx5ZSgpLG1l''@;'; put 'put ''KDIxLCJkaXYiLDYpKDIyLCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZUZsYWc9ITF9KSxOZSgyMywiIE9rICIpLHllKCkoKSgpLG1lKDI0LCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJl''@;'; put 'put ''amVjdE9wZW49Zn0pLG1lKDI1LCJoMyIsMSksTmUoMjYsIlJlYXNvbiBNZXNzYWdlIikseWUoKSxtZSgyNywiZGl2IiwyKSgyOCwiZm9ybSIpKDI5LCJzZWN0aW9uIiw5KSgzMCwiZGl2IiwxMCkoMzEsImxhYmVsIiwxMSksTmUoMzIsIlJlYXNvbiBmb3IgcmVqZWN0aW5nPyIpLHllKCksbWUo''@;'; put 'put ''MzMsInRleHRhcmVhIiwxMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnN1Ym1pdFJlYXNvbj1mfSkseWUoKSgpKCkoKSgpLG1lKDM0LCJkaXYiLDYpKDM1LCJidXR0b24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVqZWN0T3Blbj0hMX0p''@;'; put 'put ''LE5lKDM2LCIgQ2FuY2VsICIpLHllKCksbWUoMzcsImJ1dHRvbiIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZWplY3RpbmcoKX0pLE5lKDM4LCIgT0sgIikseWUoKSgpKCksbWUoMzksImRpdiIsMTUpLFFlKDQwLGtXZSw0LDIsImRpdiIsMTYpLFFlKDQxLFVXZSwzLDIs''@;'; put 'put ''ImRpdiIsOCkseWUoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC5kZXRhaWxzT3BlbiksQ2UoMTIpLFJlKCJuZ0Zvck9mIixkLmtleXNBcnJheSksQ2UoNCksUmUoImNsck1vZGFsT3BlbiIsZC50YWJsZUZsYWcpLENlKDQpLFJlKCJuZ0lmIixkLnRhYmxlRmxhZyksQ2UoNCksUmUoImNs''@;'; put 'put ''ck1vZGFsT3BlbiIsZC5yZWplY3RPcGVuKSxDZSg5KSxSZSgibmdNb2RlbCIsZC5zdWJtaXRSZWFzb24pKCJuZ01vZGVsT3B0aW9ucyIsJHMoMTEsWldlKSkoImlubmVySFRNTCIsZC5zdWJtaXRSZWFzb24scTIpLENlKDQpLFJlKCJjbHJMb2FkaW5nIixkLnJlamVjdExvYWRpbmcpLENlKDMp''@;'; put 'put ''LFJlKCJuZ0lmIiwhZC5zdWJtaXR0ZWQpLENlKDEpLFJlKCJuZ0lmIixkLnN1Ym1pdHRlZCkpfSxkZXBlbmRlbmNpZXM6W3VjLHhzLFppLENwLFdhLFMwLEJzLHdwLE9zLHIyLEJ1LGthLG91LHN1LFp1LEU4LGRoLFVzLEQwLEQ4LFQwLExwLE9wLGRnLFJwLElwLGNnXSxzdHlsZXM6WycubG9h''@;'; put 'put ''ZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6NzV2aDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tb2RhbExhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MHJlbSFpbXBvcnRhbnR9''@;'; put 'put ''LmFkZGVkUm93W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYigxNDYsMjA4LDE1NCk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDksNzcsMTE3LC4yKTtib3JkZXItcmFkaXVzOjVweH0uZGVsZXRlZFJvd1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2IoMjMwLDE3OSwx''@;'; put 'put ''NzkpO2JvcmRlcjoxcHggc29saWQgcmdiYSg3MCw3MSw3MCwuMik7Ym9yZGVyLXJhZGl1czo1cHh9LnVwZGF0ZWRSb3dbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2ZhZmRhODtib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSwxMTcsOSwuMik7Ym9yZGVyLXJhZGl1czo1cHh9LmNoW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpO2JvcmRlcjoxcHggc29saWQgcmdiYSgxMDQsMTAwLDAsLjQpO2JvcmRlci1yYWRpdXM6NXB4fS5jaFtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1MiwxMzUsMTIwLC40KX0udG9vbHRp''@;'; put 'put ''cFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC50''@;'; put 'put ''b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouNTQxNjdyZW07Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtiYWNrZ3JvdW5kOiMzMTQzNTE7Ym9yZGVyLXJhZGl1czouMTI1cmVtO2Nv''@;'; put 'put ''bG9yOiNmMGYxZWM7bGluZS1oZWlnaHQ6Ljc1cmVtO21hcmdpbjowO3BhZGRpbmc6LjM3NXJlbSAuNXJlbTt3aWR0aDoyMzVweDtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIGF1dG8gMTAwJSAxMnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOi42NjY2''@;'; put 'put ''N3JlbX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotLjM3NXJlbTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztjb250ZW50''@;'; put 'put ''OiIiO2JvcmRlci1sZWZ0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci10b3A6LjIwODMzcmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCB0cmFuc3BhcmVudH0udGFibGVbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde2JvcmRlcjowcHggc29saWR9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0''@;'; put 'put ''MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0udGFibGVDb250W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO21hcmdpbjox''@;'; put 'put ''NXB4IDEwcHggMTBweH0udGFibGVDb250W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmFwcHJvdmFsSW5mb1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uYXBw''@;'; put 'put ''cm92YWxCYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5hcHByb3ZhbEluZm9bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6Y2VudGVyO21hcmdpbi10b3A6MTVweH0uYXBwcm92YWxCYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjE1cHh9LmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MHJlbSFpbXBvcnRhbnQ7''@;'; put 'put ''bWluLWhlaWdodDpjYWxjKDEwMHZoICsgLTBweCkhaW1wb3J0YW50fS50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoLmxlZnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVm''@;'; put 'put ''dDt3aWR0aDoxNTBweCFpbXBvcnRhbnQ7ZmxleDowfX0udGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGQubGVmdFtfbmdjb250ZW50LSVDT01QJV0sIC50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnQ7ZmxleDox''@;'; put 'put ''O3dpZHRoOjMwMHB4IWltcG9ydGFudH0udG9vbGxbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2U2YjNiMztjb2xvcjojMzE0MzUxO3RvcDowO2hlaWdodDozNnB4O3dpZHRoOjEwMCU7bGVmdDowO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24t''@;'; put 'put ''aXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0jYWNjZXB0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXSwgI3JlamVjdEJ0bltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTc1cHh9LmZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6NzVweH1jbHItbW9k''@;'; put 'put ''YWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtYm9keS13cmFwcGVye292ZXJmbG93OmF1dG99LnJvd3Mtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDoxMHB4O2NvbG9yOiM2YTZhNmE7Zm9udC1zaXpl''@;'; put 'put ''OjE1cHh9LnJvd3Mtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0nXX0pLGN9KSgpO2Z1bmN0aW9uIFlXZShjLGwpezEmYyYmKG1lKDAsImRpdiIsOSkoMSwiZGl2IiwxMCkscXQoMiwiY2xyLWljb24iLDExKSxtZSgzLCJo''@;'; put 'put ''MyIsMTIpLE5lKDQsIlRoZXJlIGFyZSBubyBhcHByb3ZhbHMgcmVtYWluaW5nIikseWUoKSgpKCkpfWZ1bmN0aW9uIFdXZShjLGwpezEmYyYmKG1lKDAsImgzIiwxMyksTmUoMSwiIFJFVklFVyAiKSx5ZSgpKX1mdW5jdGlvbiBHV2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwxNCksTmUoMSwi''@;'; put 'put ''IFlvdSBoYXZlICIpLG1lKDIsInNwYW4iKSxOZSgzKSx5ZSgpLE5lKDQsImFwcHJvdmFscyByZW1haW5pbmcgIikseWUoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMyksbXIoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiAkV2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxNyksTmUoMSwi''@;'; put 'put ''IExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gcVdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIGFwcHJvdmFscyBsaXN0IikseWUoKSgpKX1mdW5jdGlvbiBLV2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE1KSxRZSgxLCRXZSwyLDAsInNwYW4i''@;'; put 'put ''LDE2KSxRZSgyLHFXZSwzLDAsImRpdiIsOCkseWUoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFhXZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDM4KX1mdW5jdGlvbiBKV2UoYyxs''@;'; put 'put ''KXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiwzOSksMiZjJiZSZSgiY2xyU21hbGwiLCEwKX1mdW5jdGlvbiBRV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxOZSgyKSx5ZSgpLG1lKDMsImNsci1kZy1jZWxsIiksTmUoNCks''@;'; put 'put ''eWUoKSxtZSg1LCJjbHItZGctY2VsbCIpLE5lKDYpLHllKCksbWUoNywiY2xyLWRnLWNlbGwiKSxOZSg4KSx5ZSgpLG1lKDksImNsci1kZy1jZWxsIikoMTAsImRpdiIsMjYpKDExLCJhIiwyNykseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXg7cmV0dXJuIGp0KGpl''@;'; put 'put ''KDIpLmdldENsaWNrZWQoZikpfSkscXQoMTIsImNsci1pY29uIiwyOCksbWUoMTMsInNwYW4iLDI5KSxOZSgxNCwiR28gdG8gcmV2aWV3IHBhZ2Ugc2NyZWVuIikseWUoKSgpLG1lKDE1LCJhIiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9QnQoYSksZj1oLiRpbXBsaWNpdCxf''@;'; put 'put ''PWguaW5kZXgsVD1qZSgyKTtyZXR1cm4ganQoZi5yZWplY3RMb2FkaW5nPyIiOlQucmVqZWN0aW5nKF8pKX0pLFFlKDE2LFhXZSwxLDAsImNsci1pY29uIiwzMSksUWUoMTcsSldlLDEsMSwiY2xyLXNwaW5uZXIiLDMyKSxtZSgxOCwic3BhbiIsMjkpLE5lKDE5LCJSZWplY3QiKSx5ZSgpKCks''@;'; put 'put ''bWUoMjAsImEiLDMzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKDIpLmdldFRhYmxlKGYudGFibGVJZCkpfSkscXQoMjEsImNsci1pY29uIiwzNCksbWUoMjIsInNwYW4iLDI5KSxOZSgyMywiR28gdG8gc3RhZ2VkIGRhdGEgc2Ny''@;'; put 'put ''ZWVuIikseWUoKSgpKCkoKSxtZSgyNCwiY2xyLWRnLWNlbGwiLDM1KSgyNSwiYnV0dG9uIiwzNikseHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4gamUoMikuZG93bmxvYWQoXy50YWJsZUlkKSxqdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLHF0''@;'; put 'put ''KDI2LCJjbHItaWNvbiIsMzcpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLnN1Ym1pdHRlciksQ2UoMiksb3IoYS5iYXNlVGFibGUpLENlKDIpLG9yKGEuc3VibWl0dGVkKSxDZSgyKSxvcihhLnN1Ym1pdFJlYXNvbiksQ2UoOCksUmUoIm5nSWYiLCFh''@;'; put 'put ''LnJlamVjdExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixhLnJlamVjdExvYWRpbmcpLENlKDgpLFJlKCJpZCIsYS50YWJsZUlkKX19ZnVuY3Rpb24gZUdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwxOCkoMiwiY2xyLWRnLWNvbHVtbiIs''@;'; put 'put ''MTkpLE5lKDMsIlNVQk1JVFRFUiIpLHllKCksbWUoNCwiY2xyLWRnLWNvbHVtbiIsMTkpLE5lKDUsIkJBU0UgVEFCTEUiKSx5ZSgpLG1lKDYsImNsci1kZy1jb2x1bW4iLDE5KSxOZSg3LCJTVUJNSVRURUQiKSx5ZSgpLG1lKDgsImNsci1kZy1jb2x1bW4iLDE5KSxOZSg5LCJTVUJNSVQgUkVB''@;'; put 'put ''U09OIikseWUoKSxtZSgxMCwiY2xyLWRnLWNvbHVtbiIpLE5lKDExLCJBQ1RJT04iKSx5ZSgpLG1lKDEyLCJjbHItZGctY29sdW1uIiksTmUoMTMsIkRPV05MT0FEIikseWUoKSxRZSgxNCxRV2UsMjcsNywiY2xyLWRnLXJvdyIsMjApLG1lKDE1LCJjbHItZGctZm9vdGVyIiwyMSkoMTYsInNw''@;'; put 'put ''YW4iKSxOZSgxNywiaXRlbXMgcGVyIHBhZ2UiKSx5ZSgpLG1lKDE4LCJzZWxlY3QiLDIyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuaXRlbXNOdW09aCl9KSxtZSgxOSwib3B0aW9uIiwyMyksTmUoMjAsIjMiKSx5ZSgpLG1lKDIxLCJvcHRp''@;'; put 'put ''b24iLDIzKSxOZSgyMiwiNSIpLHllKCksbWUoMjMsIm9wdGlvbiIsMjMpLE5lKDI0LCIxMCIpLHllKCksbWUoMjUsIm9wdGlvbiIsMjMpLE5lKDI2LCIxNSIpLHllKCkoKSxtZSgyNywiY2xyLWRnLXBhZ2luYXRpb24iLDI0LDI1KSxOZSgyOSkseWUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''JGkoMjgpLGQ9amUoKTtDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwiYmFzZVRhYmxlIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLENlKDYpLFJl''@;'; put 'put ''KCJjbHJEZ0l0ZW1zT2YiLGQuYXBwcm92ZUxpc3QpLENlKDQpLFJlKCJuZ01vZGVsIixkLml0ZW1zTnVtKSxDZSgxKSxSZSgibmdWYWx1ZSIsMyksQ2UoMiksUmUoIm5nVmFsdWUiLDUpLENlKDIpLFJlKCJuZ1ZhbHVlIiwxMCksQ2UoMiksUmUoIm5nVmFsdWUiLDE1KSxDZSgyKSxSZSgiY2xy''@;'; put 'put ''RGdQYWdlU2l6ZSIsZC5pdGVtc051bSksQ2UoMiksYjAoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBhcHByb3ZhbHMgIil9fWNvbnN0IHRHZT1mdW5jdGlvbihjKXtyZXR1cm57bm9Cb3JkZXI6Y319O2xldCBuR2U9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5jZHI9Xyx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwfWdldFRhYmxlKGEpe3RoaXMucm91''@;'; put 'put ''dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0Q2xpY2tlZChhKXt2b2lkIDAhPT10aGlzLmFwcHJvdmVMaXN0JiYodGhpcy50YWJsZUlkPXRoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCx0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoInJldmlldy9hcHByb3ZlRGV0LyIrdGhpcy5h''@;'; put 'put ''cHByb3ZlTGlzdFthXS50YWJsZUlkKSl9cmVqZWN0aW5nKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3ZvaWQgMCE9PWQuYXBwcm92ZUxpc3QmJihkLnRhYmxlSWQ9ZC5hcHByb3ZlTGlzdFthXS50YWJsZUlkKTtsZXQgaD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixU''@;'; put 'put ''QUJMRTpkLnRhYmxlSWQsU1RQX1JFQVNPTjoicXVpY2sgcmVqZWN0aW9uIn07dHJ5eyhkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMCwoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGgsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikp''@;'; put 'put ''LmZyb21zYXNbMF0uUkVTUE9OU0UuaW5jbHVkZXMoIlNVQ0NFU1MiKSYmKChkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMSxkLmFwcHJvdmVMaXN0Py5zcGxpY2UoYSwxKSxkLnJlbWFpbmVkLS0sZC5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1jYXRjaChmKXtkLmV2ZW50U2Vy''@;'; put 'put ''dmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9yZWplY3Rpb24iLGYpfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmZldGNoQXBwcm92YWxzKCl9KSgpfWZldGNoQXBwcm92YWxzKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rp''@;'; put 'put ''b24qKCl7YS5pdGVtc051bT0xMDtsZXQgZD17U1RQX0FDVElPTjoiT1BFTl9BUFBST1ZBTFMifTt0cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0QXBwcm92YWxzKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIik7YS5yZW1haW5lZD1oLmZyb21z''@;'; put 'put ''YXMubGVuZ3RoO2xldCBmPWguZnJvbXNhcy5tYXAoZnVuY3Rpb24oXyl7cmV0dXJue3RhYmxlSWQ6Xy5UQUJMRV9JRCxzdWJtaXR0ZXI6Xy5TVUJNSVRURURfQllfTk0sc3VibWl0dGVkOl8uU1VCTUlUVEVEX09OX0RUVE0sYmFzZVRhYmxlOl8uQkFTRV9UQUJMRSxzdWJtaXRSZWFzb246Xy5T''@;'; put 'put ''VUJNSVRURURfUkVBU09OX1RYVH19KTthLmFwcHJvdmVMaXN0PWYsYS5sb2FkZWQ9ITB9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIixoKX19KSgpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRT''@;'; put 'put ''YXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyxfPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KERzKSx0dChvYSksdHQoVWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjks''@;'; put 'put ''dmFyczo4LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2Vu''@;'; put 'put ''dGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciIsNCwibmdJZiJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1jb2wtbWQtMTIiXSxbNCwi''@;'; put 'put ''bmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siLCJub2FwcHJvdmFscy1pbmZvLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0''@;'; put 'put ''LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiXSxbImNsYXNzIiwic3Bpbm5l''@;'; put 'put ''ciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtc3RhcnQiXSxbMywi''@;'; put 'put ''bmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdWYWx1ZSJdLFsxLCJjZW50ZXIiLDMsImNsckRnUGFnZVNpemUiXSxbInBhZ2luYXRpb24iLCIiXSxbInJvbGUiLCJ0b29sdGlwIiwxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJs''@;'; put 'put ''aW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWdyZWVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyNCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIs''@;'; put 'put ''InRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItcmVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiLDQsIm5nSWYiXSxbMywiY2xyU21hbGwiLDQsIm5nSWYiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAt''@;'; put 'put ''bWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJpZCIsImNsaWNrIl0sWyJz''@;'; put 'put ''aGFwZSIsImRvd25sb2FkIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiJdLFszLCJjbHJTbWFsbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxRZSgyLFlXZSw1LDAsImRpdiIsMiksbWUoMywiZGl2IiwzKSxRZSg0LFdXZSwyLDAs''@;'; put 'put ''ImgzIiw0KSxRZSg1LEdXZSw1LDEsInAiLDUpLHllKCksUWUoNixLV2UsMywyLCJkaXYiLDYpLG1lKDcsImRpdiIsNyksUWUoOCxlR2UsMzAsMTQsImRpdiIsOCkseWUoKSgpKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwwPT09ZC5yZW1haW5lZCksQ2UoMSksUmUoIm5nQ2xhc3MiLEoyKDYs''@;'; put 'put ''dEdlLCFkLmxvYWRlZCkpLENlKDEpLFJlKCJuZ0lmIixkLmxvYWRlZCYmMCE9PWQucmVtYWluZWQpLENlKDEpLFJlKCJuZ0lmIixkLmxvYWRlZCYmMCE9PWQucmVtYWluZWQpLENlKDEpLFJlKCJuZ0lmIiwhZC5sb2FkZWQpLENlKDIpLFJlKCJuZ0lmIixkLmFwcHJvdmVMaXN0JiYwIT09ZC5y''@;'; put 'put ''ZW1haW5lZCkpfSxkZXBlbmRlbmNpZXM6W3VjLFppLGwxLGMxLE0wLEJzLE9zLFc4LFRwLHRnLE9FLFU4LFBFLG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LGthLHUyXSxzdHlsZXM6WyIuY29sdW1uLWNlbnRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9u''@;'; put 'put ''OmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFncmlkLWNvbHVtbltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWdyaWQtY29sdW1uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdXRs''@;'; put 'put ''aW5lOm5vbmUhaW1wb3J0YW50fS5saW5rc1tfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC50''@;'; put 'put ''b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50''@;'; put 'put ''b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0''@;'; put 'put ''MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9Lm5vQm9yZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmFwcHJvdmFscy1saXN0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdo''@;'; put 'put ''dDo3MHZoO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9Lm5vYXBwcm92YWxzLWluZm8td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX0iXX0pLGN9KSgpO2Z1bmN0aW9uIHJHZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLHF0KDIsImNsci1pY29uIiwxNCksbWUoMywiaDMiLDE1KSxO''@;'; put 'put ''ZSg0LCIgWW91IGhhdmUgbm90IHN1Ym1pdHRlZCBhbnkgdGFibGVzICIpLHllKCkoKSgpKX1mdW5jdGlvbiBpR2UoYyxsKXsxJmMmJihtZSgwLCJoMyIsMTYpLE5lKDEsIiBTVUJNSVQgUVVFVUUgIikseWUoKSl9ZnVuY3Rpb24gb0dlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMTcpLE5lKDEs''@;'; put 'put ''IiBZb3UgaGF2ZSAiKSxtZSgyLCJzcGFuIiksTmUoMykseWUoKSxOZSg0LCJzdWJtaXNzaW9ucyB3YWl0aW5nIHRvIGJlIGFwcHJvdmVkICIpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgzKTtDZSgzKSxtcigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIHNHZShjLGwpezEmYyYmKG1lKDAs''@;'; put 'put ''InNwYW4iLDIwKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBhR2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgc3VibWl0dGVkIGxpc3QiKSx5ZSgpKCkpfWZ1bmN0aW9uIGxHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTgpLFFl''@;'; put 'put ''KDEsc0dlLDIsMCwic3BhbiIsMTkpLFFlKDIsYUdlLDMsMCwiZGl2IiwyKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoMyk7Q2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIGNHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21l''@;'; put 'put ''KDAsImNsci1kZy1yb3ciLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKDUpLmdvVG9EZXRhaWxzKGYudGFibGVJZCkpfSksbWUoMSwiY2xyLWRnLWNlbGwiKSxOZSgyKSx5ZSgpLG1lKDMsImNsci1kZy1jZWxsIiksTmUoNCks''@;'; put 'put ''eWUoKSxtZSg1LCJjbHItZGctY2VsbCIpLE5lKDYpLHllKCksbWUoNywiY2xyLWRnLWNlbGwiKSg4LCJkaXYiLDMxKSg5LCJhIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChqZSg1KS5nb1RvU3RhZ2UoZi50YWJsZUlkKSl9KSxx''@;'; put 'put ''dCgxMCwiY2xyLWljb24iLDMzKSxtZSgxMSwic3BhbiIsMzQpLE5lKDEyLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSx5ZSgpKCkoKSgpLG1lKDEzLCJjbHItZGctY2VsbCIsMzUpKDE0LCJidXR0b24iLDM2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxp''@;'; put 'put ''Y2l0O3JldHVybiBqZSg1KS5kb3dubG9hZChfLnRhYmxlSWQpLGp0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSkscXQoMTUsImNsci1pY29uIiwzNykseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEuYmFzZSksQ2UoMiksb3IoYS5zdWJtaXR0ZWQpLENlKDIp''@;'; put 'put ''LG9yKGEuc3VibWl0UmVhc29uKX19ZnVuY3Rpb24gdUdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwyMikoMiwiY2xyLWRnLWNvbHVtbiIpLE5lKDMsIkJBU0UgVEFCTEUiKSx5ZSgpLG1lKDQsImNsci1kZy1jb2x1bW4iLDIzKSxOZSg1''@;'; put 'put ''LCJTVUJNSVRURUQiKSx5ZSgpLG1lKDYsImNsci1kZy1jb2x1bW4iLDIzKSxOZSg3LCJTVUJNSVQgUkVBU09OIikseWUoKSxtZSg4LCJjbHItZGctY29sdW1uIiwxMiksTmUoOSwiQUNUSU9OIikseWUoKSxtZSgxMCwiY2xyLWRnLWNvbHVtbiIsMTIpLE5lKDExLCJET1dOTE9BRCIpLHllKCks''@;'; put 'put ''UWUoMTIsY0dlLDE2LDMsImNsci1kZy1yb3ciLDI0KSxtZSgxMywiY2xyLWRnLWZvb3RlciIsMjUpKDE0LCJzcGFuIiksTmUoMTUsIml0ZW1zIHBlciBwYWdlIikseWUoKSxtZSgxNiwic2VsZWN0IiwyNikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChq''@;'; put 'put ''ZSg0KS5pdGVtc051bT1oKX0pLG1lKDE3LCJvcHRpb24iLDI3KSxOZSgxOCwiMyIpLHllKCksbWUoMTksIm9wdGlvbiIsMjcpLE5lKDIwLCI1IikseWUoKSxtZSgyMSwib3B0aW9uIiwyNyksTmUoMjIsIjEwIikseWUoKSxtZSgyMywib3B0aW9uIiwyNyksTmUoMjQsIjE1IikseWUoKSgpLG1l''@;'; put 'put ''KDI1LCJjbHItZGctcGFnaW5hdGlvbiIsMjgsMjkpLE5lKDI3KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgyNiksZD1qZSg0KTtDZSg0KSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksQ2UoNiksUmUoImNs''@;'; put 'put ''ckRnSXRlbXNPZiIsZC5zdWJtaXR0ZXJMaXN0KSxDZSg0KSxSZSgibmdNb2RlbCIsZC5pdGVtc051bSksQ2UoMSksUmUoIm5nVmFsdWUiLDMpLENlKDIpLFJlKCJuZ1ZhbHVlIiw1KSxDZSgyKSxSZSgibmdWYWx1ZSIsMTApLENlKDIpLFJlKCJuZ1ZhbHVlIiwxNSksQ2UoMiksUmUoImNsckRn''@;'; put 'put ''UGFnZVNpemUiLGQuaXRlbXNOdW0pLENlKDIpLGIwKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgc3VibWlzc2lvbnMgIil9fWZ1bmN0aW9uIGRHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjEpLFFlKDEsdUdlLDI4LDEyLCJk''@;'; put 'put ''aXYiLDIpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5zdWJtaXR0ZXJMaXN0JiYwIT09YS5yZW1haW5lZCl9fWNvbnN0IGhHZT1mdW5jdGlvbihjKXtyZXR1cm57bm9Cb3JkZXI6Y319O2Z1bmN0aW9uIGZHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNSks''@;'; put 'put ''UWUoMSxyR2UsNSwwLCJkaXYiLDYpLG1lKDIsImRpdiIsNyksUWUoMyxpR2UsMiwwLCJoMyIsOCksUWUoNCxvR2UsNSwxLCJwIiw5KSx5ZSgpLFFlKDUsbEdlLDMsMiwiZGl2IiwxMCksUWUoNixkR2UsMiwxLCJkaXYiLDExKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoMSksUmUoIm5n''@;'; put 'put ''SWYiLDA9PT1hLnJlbWFpbmVkJiZhLmxvYWRlZCksQ2UoMSksUmUoIm5nQ2xhc3MiLEoyKDYsaEdlLCFhLmxvYWRlZCkpLENlKDEpLFJlKCJuZ0lmIiwwIT09YS5yZW1haW5lZCksQ2UoMSksUmUoIm5nSWYiLGEubG9hZGVkJiYwIT09YS5yZW1haW5lZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxv''@;'; put 'put ''YWRlZCksQ2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gcEdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzKSxRZSgxLGZHZSw3LDgsImRpdiIsNCkseWUoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksUmUoIm5nSWYiLCFhLnN1YlJlYWR5KX19ZnVuY3Rpb24gZ0dlKGMs''@;'; put 'put ''bCl7MSZjJiYobWUoMCwiZGl2IikscXQoMSwiYXBwLWFwcHJvdmUtZGV0YWlscyIpLHllKCkpfWxldCBRc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91''@;'; put 'put ''dGU9Zix0aGlzLnNhc1NlcnZpY2U9Xyx0aGlzLnJlbWFpbmVkPTAsdGhpcy5sb2FkZWQ9ITEsdGhpcy5zdWJSZWFkeT0hMSx0aGlzLmRldGFpbHNPcGVuPSExfWdvVG9TdGFnZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb1RvRGV0YWlscyhhKXt0aGlzLnJv''@;'; put 'put ''dXRlci5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZC8iK2EpfWdldERldGFpbHMoYSxkKXt0aGlzLnN1YlJlYWR5PSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNhc1N0b3JlU2VydmljZS5zZW5kRGV0YWlscyhhLGQsdGhpcy5zdWJtaXREYXRhKX0sMCl9bmdPbkluaXQoKXt2YXIg''@;'; put 'put ''YT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBkPWEucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7YS5pdGVtc051bT0xMDt0cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0U3VibWl0dHMoKTtpZihhLnJlbWFpbmVkPWguZnJvbXNhcy5sZW5ndGgsYS5y''@;'; put 'put ''ZW1haW5lZD4wKXthLnN1Ym1pdHRlcj1oLmZyb21zYXNbMF0uU1VCTUlUVEVEX0JZX05NO2xldCBmPWguZnJvbXNhcy5tYXAoZnVuY3Rpb24oXyl7cmV0dXJue3RhYmxlSWQ6Xy5UQUJMRV9JRCxiYXNlOl8uQkFTRV9UQUJMRSxzdWJtaXR0ZWQ6Xy5TVUJNSVRURURfT05fRFRUTSxzdWJtaXR0''@;'; put 'put ''ZXI6Xy5TVUJNSVRURURfQllfTk0sc3VibWl0UmVhc29uOl8uU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7aWYoYS5zdWJtaXR0ZXJMaXN0PWYsYS5zdWJtaXREYXRhPWguZnJvbXNhcyx0eXBlb2YgZDwidSIpe2NvbnN0IF89YS5zdWJtaXR0ZXJMaXN0LmZpbmRJbmRleChUPT5ULnRhYmxlSWQ9''@;'; put 'put ''PT1kKTtfPi0xJiZhLmdldERldGFpbHMoYS5zdWJtaXR0ZXJMaXN0W19dLF8pfX1hLmxvYWRlZD0hMH1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImVkaXRvcnMvZ2V0c3VibWl0cyIsaCl9fSkoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9yZWFkeVN1Yj10''@;'; put 'put ''aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXQuc3Vic2NyaWJlKGE9Pnt0aGlzLnN1YlJlYWR5PWF9KSx0aGlzLl9iYWNrVG9TdWI9dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0U3VibWl0TGlzdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9IXRoaXMuc3ViUmVhZHksdGhpcy5kZXRh''@;'; put 'put ''aWxzT3Blbj0hMX0pfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyxfPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFtPSIrZisiL3NlcnZp''@;'; put 'put ''Y2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KERzKSx0dChXbCksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN1''@;'; put 'put ''Ym1pdHRlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbMSwidy0xMDAiXSxbImNsYXNzIiwiY29udGVudC1hcmVhIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5n''@;'; put 'put ''SWYiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0''@;'; put 'put ''LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiIs''@;'; put 'put ''NCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm5vLXN1Ym1pdHRlZC10YWJsZXMiLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIs''@;'; put 'put ''Indhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmst''@;'; put 'put ''Z3JheSJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiZGF0YWdyaWQt''@;'; put 'put ''Y29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LXN0YXJ0Il0sWzMsIm5nTW9k''@;'; put 'put ''ZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiXSxbMSwiY2VudGVyIiwzLCJjbHJEZ1BhZ2VTaXplIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsicm9sZSIsInRvb2x0aXAiLDEsInJvdyIsImp1c3RpZnktY29udGVudC1hcm91bmQi''@;'; put 'put ''XSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwicC0wIiwiZC1mbGV4''@;'; put 'put ''IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApLFFlKDEscEdlLDIsMSwiZGl2IiwxKSxRZSgyLGdHZSwyLDAsImRp''@;'; put 'put ''diIsMikseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLCFkLnN1YlJlYWR5KSxDZSgxKSxSZSgibmdJZiIsZC5zdWJSZWFkeSkpfSxkZXBlbmRlbmNpZXM6W3VjLFppLGwxLGMxLE0wLEJzLE9zLFc4LFRwLHRnLE9FLFU4LFBFLG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LGthLEpzZV0sc3R5''@;'; put 'put ''bGVzOlsiLm5vQm9yZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlk''@;'; put 'put ''ICMzMTQzNTE7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgIzMxNDM1MX0ubm8tc3VibWl0dGVkLXRhYmxlc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KSxjfSkoKTtmdW5jdGlvbiBtR2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDEyKSxx''@;'; put 'put ''dCgxLCJjbHItaWNvbiIsMTMpLG1lKDIsImgzIiwxNCksTmUoMywiVGhlcmUgaXMgbm8gaGlzdG9yeSB0byBzaG93IikseWUoKSgpKX1mdW5jdGlvbiB2R2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9''@;'; put 'put ''amUoKS4kaW1wbGljaXQsZj1qZSgpO3JldHVybiBqdChmLmdldFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKCkuJGltcGxpY2l0LGQ9amUoKTtDZSgxKSxvcihkLmFwcHJvdmVEYXRhW2FdKX19ZnVuY3Rpb24gX0dlKGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiYSIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCkuJGltcGxpY2l0LGY9amUoKTtyZXR1cm4ganQoZi5nZXRCYXNlVGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTmUoMiwiVklFVyIpLHllKCksbWUoMywi''@;'; put 'put ''c3BhbiIpLE5lKDQsIiAvICIpLHllKCksbWUoNSwiYSIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCkuJGltcGxpY2l0LGY9amUoKTtyZXR1cm4ganQoZi5nZXRFZGl0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTmUoNiwiRURJVCIpLHllKCkoKX19ZnVu''@;'; put 'put ''Y3Rpb24gYkdlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpLiRpbXBsaWNpdCxkPWplKCk7Q2UoMSksb3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIHlHZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDYpLE5lKDIp''@;'; put 'put ''LHllKCksbWUoMywidGQiLDYpLFFlKDQsdkdlLDIsMSwiYSIsMTUpLFFlKDUsX0dlLDcsMCwiZGl2IiwxNiksUWUoNixiR2UsMiwxLCJzcGFuIiwxNikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O0NlKDIpLG9yKGEpLENlKDIpLFJlKCJuZ0lmIixkPDEpLENl''@;'; put 'put ''KDEpLFJlKCJuZ0lmIixkPDImJmQ+PTEpLENlKDEpLFJlKCJuZ0lmIixkPj0yKX19ZnVuY3Rpb24gd0dlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsMjApLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIENHZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwi''@;'; put 'put ''TG9hZGluZyBoaXN0b3J5IikseWUoKSgpKX1mdW5jdGlvbiBTR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE4KSxRZSgxLHdHZSwyLDAsInNwYW4iLDE5KSxRZSgyLENHZSwzLDAsImRpdiIsMTYpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQp''@;'; put 'put ''LENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBNR2UoYyxsKXsxJmMmJihtZSgwLCJoMyIsMjgpLE5lKDEsIkhJU1RPUlkiKSx5ZSgpKX1mdW5jdGlvbiB4R2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwyOSksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEp''@;'; put 'put ''LG1yKCIgVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkLCIgcmVjb3JkcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX1jb25zdCBFR2U9ZnVuY3Rpb24oYyxsKXtyZXR1cm57cmVqZWN0ZWQ6YyxhY2Nl''@;'; put 'put ''cHRlZDpsfX07ZnVuY3Rpb24ga0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRnLXJvdyIsMzMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoMykuZ2V0QXBwckluZGV4KGYpKX0pLG1lKDEsImNsci1kZy1j''@;'; put 'put ''ZWxsIiwzNCkoMiwiYSIsMzUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoMykuZ2V0QmFzZVRhYmxlKGYuYmFzZXRhYmxlKSl9KSxOZSgzKSx5ZSgpKCksbWUoNCwiY2xyLWRnLWNlbGwiLDM2KSxOZSg1KSx5ZSgpLG1lKDYsImNs''@;'; put 'put ''ci1kZy1jZWxsIiwzNCksTmUoNykseWUoKSxtZSg4LCJjbHItZGctY2VsbCIsMzQpLE5lKDkpLHllKCksbWUoMTAsImNsci1kZy1jZWxsIiwzNCksTmUoMTEpLHllKCksbWUoMTIsImNsci1kZy1jZWxsIiwzNCksTmUoMTMpLHllKCksbWUoMTQsImNsci1kZy1jZWxsIiwzNykoMTUsImJ1dHRv''@;'; put 'put ''biIsMzgpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGplKDMpLmRvd25sb2FkKF8udGFibGVJZCksanQoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxxdCgxNiwiY2xyLWljb24iLDM5KSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQ7Q2UoMyksb3IoYS5iYXNldGFibGUpLENlKDEpLFJlKCJuZ0NsYXNzIixRMig3LEVHZSwiUkVKRUNURUQiPT09YS5zdGF0dXMsIkFQUFJPVkVEIj09PWEuc3RhdHVzKSksQ2UoMSksb3IoYS5zdGF0dXMpLENlKDIpLG9yKGEuc3VibWl0dGVyKSxDZSgyKSxvcihhLnN1Ym1pdHRlZFJl''@;'; put 'put ''YXNvbiksQ2UoMiksb3IoYS5zdWJtaXR0ZWQpLENlKDIpLG9yKGEucmV2aWV3ZWQpfX1mdW5jdGlvbiBBR2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItZGF0YWdyaWQiLDMwKSgxLCJjbHItZGctY29sdW1uIiwzMSksTmUoMiwiQkFTRV9UQUJMRSIpLHllKCksbWUoMywiY2xyLWRnLWNvbHVt''@;'; put 'put ''biIsMzEpLE5lKDQsIlNUQVRVUyIpLHllKCksbWUoNSwiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDYsIlNVQk1JVFRFUiIpLHllKCksbWUoNywiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDgsIlNVQk1JVCBSRUFTT04iKSx5ZSgpLG1lKDksImNsci1kZy1jb2x1bW4iLDMxKSxOZSgxMCwiU1VCTUlU''@;'; put 'put ''VEVEIikseWUoKSxtZSgxMSwiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDEyLCJBUFBST1ZFRCAvIFJFSkVDVEVEIikseWUoKSxtZSgxMywiY2xyLWRnLWNvbHVtbiIpLE5lKDE0LCJET1dOTE9BRCIpLHllKCksUWUoMTUsa0dlLDE3LDEwLCJjbHItZGctcm93IiwzMikseWUoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPWplKDIpO0NlKDEpLFJlKCJjbHJEZ0ZpZWxkIiwiYmFzZXRhYmxlIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdGF0dXMiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkUmVhc29uIiksQ2UoMiksUmUoImNs''@;'; put 'put ''ckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInJldmlld2VkIiksQ2UoNCksUmUoImNsckRnSXRlbXNPZiIsYS5oaXN0b3J5KX19ZnVuY3Rpb24gVEdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBCdChhKSxqdChqZSgyKS5sb2FkRGF0YSgpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKDIpO1JlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxDZSgxKSxtcigiIExvYWQgIixhLnJvd3NMZWZ0VG9Mb2FkLCIgbW9yZSAiKX19ZnVuY3Rpb24gREdl''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMiksUWUoMixNR2UsMiwwLCJoMyIsMjMpLFFlKDMseEdlLDIsMSwicCIsMjQpLHllKCksUWUoNCxBR2UsMTYsNywiY2xyLWRhdGFncmlkIiwyNSksbWUoNSwiZGl2IiwyNiksUWUoNixUR2UsMiwyLCJidXR0b24iLDI3KSx5''@;'; put 'put ''ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDIpLFJlKCJuZ0lmIixhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkIT09YS5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgyKSxSZSgibmdJZiIs''@;'; put 'put ''YS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQ9PT1hLkluZmluaXR5JiZhLnJvd3NMZWZ0VG9Mb2FkPjApfX1jb25zdCBJR2U9W3twYXRoOiJhcHByb3ZlIixjb21wb25lbnQ6bkdlfSx7cGF0aDoiYXBwcm92ZURldC86dGFibGVJZCIsY29tcG9uZW50OkpzZX0se3Bh''@;'; put 'put ''dGg6InN1Ym1pdHRlZCIsY29tcG9uZW50OlFzZX0se3BhdGg6InN1Ym1pdHRlZC86dGFibGVJZCIsY29tcG9uZW50OlFzZX0se3BhdGg6Imhpc3RvcnkiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2Fz''@;'; put 'put ''U3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc2FzU2VydmljZT1fLHRoaXMuaGlzdG9yeT1bXSx0aGlzLnRhYmxlVGl0bGVzPVtdLHRoaXMuaGlzdG9yeUFycj1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMub3Blbk1v''@;'; put 'put ''ZGFsPSExLHRoaXMubm9EYXRhPSExLHRoaXMuYXBwcm92ZURhdGE9e30sdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5oaXN0UGFyYW1zPXtISVNUOjAsU1RBUlRST1c6MSxOT0JTOi0xfSx0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMu''@;'; put 'put ''bGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0QmFzZVRhYmxlKGEpe3Ro''@;'; put 'put ''aXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nZXRFZGl0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdldEFwcHJJbmRleChhKXtjb25zdCBkPXRoaXMuaGlzdG9yeUFyci5maW5kSW5kZXgoaD0+aC5UQUJMRV9JRD09PWEu''@;'; put 'put ''dGFibGVJZCk7ZD4tMSYmKHRoaXMuYXBwcm92ZURhdGE9dGhpcy5oaXN0b3J5QXJyW2RdLHRoaXMub3Blbk1vZGFsPSEwKX1nZXQgcm93c0xlZnRUb0xvYWQoKXtjb25zdCBhPXRoaXMuaGlzdFBhcmFtcy5OT0JTLXRoaXMuaGlzdG9yeS5sZW5ndGgsZD10aGlzLmhpc3RQYXJhbXMuSElTVDty''@;'; put 'put ''ZXR1cm4gYTw9MD8wOmE+ZD9kOmF9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLF89dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK18rIi8/X3Byb2dyYW09Iitm''@;'; put 'put ''KyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSsiJl9jb250ZXh0bmFtZT0iK3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGQ9e1NUQVJUUk9XOmEuaGlzdFBhcmFtcy5I''@;'; put 'put ''SVNUK2EuaGlzdFBhcmFtcy5TVEFSVFJPV307YS5sb2FkaW5nTW9yZT0hMDt0cnl7bGV0IGYsaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRIaXN0b3J5KGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIpO2EubG9hZGluZ01vcmU9ITEsYS5oaXN0UGFyYW1zPWgu''@;'; put 'put ''aGlzdHBhcmFtc1swXTtjb25zdCBfPWguZnJvbXNhcy5zbGljZSgwLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKTtpZihfLmxlbmd0aD4wKXtjb25zdCBUPV87YS5oaXN0b3J5QXJyPV8sZj1PYmplY3Qua2V5cyhUWzBdKSxhLnRhYmxlVGl0bGVzPWY7bGV0IFc9''@;'; put 'put ''Xy5tYXAoZnVuY3Rpb24oaWUpe3JldHVybnt0YWJsZUlkOmllLlRBQkxFX0lELHN1Ym1pdHRlcjppZS5TVUJNSVRURVIsc3VibWl0dGVkUmVhc29uOmllLlNVQk1JVFRFRF9SRUFTT05fVFhULHN1Ym1pdHRlZDppZS5TVUJNSVRURUQsc3RhdHVzOmllLlNUQVRVUyxyZXZpZXdSZWFzb246aWUu''@;'; put 'put ''UkVWSUVXX1JFQVNPTl9UWFQscmV2aWV3ZXI6aWUuUkVWSUVXRVIscmV2aWV3ZWQ6aWUuUkVWSUVXRUQsbnVtT2ZBcHByb3ZhbHM6aWUuTlVNX09GX0FQUFJPVkFMU19SRVFVSVJFRCxiYXNldGFibGU6aWUuQkFTRV9UQUJMRX19KTthLmhpc3RvcnkucHVzaCguLi5XKSxhLmxvYWRlZD0hMH1l''@;'; put 'put ''bHNlIGEubG9hZGVkPSEwLDA9PT1hLmhpc3RvcnkubGVuZ3RoJiYoYS5ub0RhdGE9ITApfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGhpc3RvcnkiLGgpLGEubG9hZGluZ01vcmU9ITF9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7''@;'; put 'put ''cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EubG9hZERhdGEoKX0pKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChiZCksdHQodmwpLHR0KERzKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAt''@;'; put 'put ''aGlzdG9yeSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MjAsdmFyczo2LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLCJjbGFzcyIsImNhcmQtYmxvY2sgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxl''@;'; put 'put ''eC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJu''@;'; put 'put ''Z0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYi''@;'; put 'put ''XSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLDEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIs''@;'; put 'put ''InNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWzEsImgtNzB2aCIsImQtZmxleCIs''@;'; put 'put ''Imp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0''@;'; put 'put ''ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWhpc3RvcnkgZGF0YWdyaWQtY3VzdG9tLWZvb3RlciIsNCwibmdJZiJdLFsxLCJsb2FkLW1vcmUiLCJk''@;'; put 'put ''LWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwiYnRuIGJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0s''@;'; put 'put ''WzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImRhdGFncmlkLWhpc3RvcnkiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywi''@;'; put 'put ''Y2xpY2siXSxbMSwidmVyQ2VudGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwibS0wIiwzLCJjbGljayJdLFsxLCJ2ZXJDZW50ZXIiLDMsIm5nQ2xhc3MiXSxbMSwidmVyQ2VudGVyIiwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJidG4iLCJi''@;'; put 'put ''dG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCksUWUoMSxtR2UsNCwwLCJkaXYiLDEpLG1lKDIsImNs''@;'; put 'put ''ci1tb2RhbCIsMikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub3Blbk1vZGFsPWZ9KSxtZSgzLCJoNCIsMyksTmUoNCwiQXBwcm92YWwgZGV0YWlscyIpLHllKCksbWUoNSwiZGl2Iiw0KSg2LCJ0YWJsZSIsNSkoNywidGhlYWQiKSg4LCJ0ciIpKDksInRo''@;'; put 'put ''Iiw2KSxOZSgxMCwiTmFtZSIpLHllKCksbWUoMTEsInRoIiw2KSxOZSgxMiwiVmFsdWUiKSx5ZSgpKCkoKSxtZSgxMywidGJvZHkiKSxRZSgxNCx5R2UsNyw0LCJ0ciIsNykseWUoKSgpKCksbWUoMTUsImRpdiIsOCkoMTYsImJ1dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBkLm9wZW5Nb2RhbD0hMX0pLE5lKDE3LCIgT0sgIikseWUoKSgpKCksUWUoMTgsU0dlLDMsMiwiZGl2IiwxMCksUWUoMTksREdlLDcsNCwiZGl2IiwxMSkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQubm9EYXRhKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLm9wZW5Nb2RhbCko''@;'; put 'put ''ImNsck1vZGFsU2l6ZSIsInhsIiksQ2UoMTIpLFJlKCJuZ0Zvck9mIixkLnRhYmxlVGl0bGVzKSxDZSg0KSxSZSgibmdJZiIsIWQubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWQubm9EYXRhJiZkLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3VjLHhzLFppLFc4LFRwLHRnLFU4LG5nLHJnLGln''@;'; put 'put ''LCQ4LG9nLEI4LGtwLHo4LGthLG91LHN1LFp1LGRoXSxzdHlsZXM6WyIucmVqZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmODMxMjY7Zm9udC13ZWlnaHQ6NzAwfS5hY2NlcHRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9LmhzQ2Vs''@;'; put 'put ''bFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4IWltcG9ydGFudDtmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50O2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnQ7cGFkZGluZzo3cHh9LmJ0Q2VsbFtfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4IWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0udmVyQ2VudGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5sb2FkLW1vcmVbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjkwcHh9I25vRGF0YUNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KSxjfSkoKX1dO2xldCBMR2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sZGMuZm9yQ2hpbGQoSUdlKSxkY119KSxjfSkoKSxSR2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sJGwsTEdlLF91LF83LmZvclJvb3QoKSxDMixWN119KSxjfSkoKSxPR2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe319cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9u''@;'; put 'put ''KGEsZCl7MSZhJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30pKCk7ZnVuY3Rpb24gUEdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsNiksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gRkdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwi''@;'; put 'put ''aDMiKSxOZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gSEdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0KSxRZSgxLFBHZSwyLDAsInNwYW4iLDUpLFFlKDIsRkdlLDMsMCwiZGl2IiwzKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgxKSxSZSgi''@;'; put 'put ''bmdJZiIsIWEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19Y29uc3QgTkdlPWZ1bmN0aW9uKGMsbCl7cmV0dXJue3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH19O2Z1bmN0aW9uIFZHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIpKDEsImRpdiIsNykoMiwi''@;'; put 'put ''ZGl2Iiw4KSgzLCJoNCIsOSksTmUoNCwiU3RhZ2VkIERhdGEiKSx5ZSgpKCkoKSxtZSg1LCJkaXYiLDEwKSg2LCJkaXYiLDExKSg3LCJkaXYiLDEyKSg4LCJkaXYiLDgpLE5lKDksIkJhc2ljIFN1Ym1pdHRlZCBEZXRhaWxzIikseWUoKSgpLG1lKDEwLCJkaXYiKSgxMSwic3BhbiIpLE5lKDEy''@;'; put 'put ''LCJUYWJsZSBJZDoiKSx5ZSgpLG1lKDEzLCJzdHJvbmciKSgxNCwic3BhbiIpLE5lKDE1KSx5ZSgpKCkoKSxtZSgxNiwiZGl2IikoMTcsInNwYW4iKSxOZSgxOCwiQmFzZSBUYWJsZToiKSx5ZSgpLG1lKDE5LCJhIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChq''@;'; put 'put ''ZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkpfSksTmUoMjApLHllKCkoKSxtZSgyMSwiZGl2IikoMjIsInNwYW4iKSxOZSgyMywiU3VibWl0IERhdGU6IikseWUoKSxtZSgyNCwic3BhbiIsMTQpLE5lKDI1KSx5ZSgpKCksbWUoMjYsImRpdiIpKDI3LCJzcGFuIiksTmUoMjgsIlJldmlldyBTdGF0''@;'; put 'put ''dXM6IikseWUoKSxtZSgyOSwic3BhbiIsMTUpLE5lKDMwKSx5ZSgpKCkoKSxtZSgzMSwiZGl2IiwxNikoMzIsImRpdiIsMTIpKDMzLCJkaXYiLDgpLE5lKDM0LCJBY3Rpb25zIikseWUoKSgpLG1lKDM1LCJkaXYiLDE3KSgzNiwiZGl2IiwxOCkoMzcsImJ1dHRvbiIsMTkpLHh0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLE5lKDM4LCIgR28gdG8gYmFzZSB0YWJsZSBzY3JlZW4gIikseWUoKSxtZSgzOSwiYnV0dG9uIiwyMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLmFwcHJvdmVU''@;'; put 'put ''YWJsZVNjcmVlbigpKX0pLE5lKDQwLCIgR28gdG8gYXBwcm92YWxzIHNjcmVlbiAiKSx5ZSgpLG1lKDQxLCJidXR0b24iLDIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuZ29CYWNrKCkpfSksTmUoNDIsIiBHbyBiYWNrIHRvIGVkaXRvciAiKSx5ZSgpLG1l''@;'; put 'put ''KDQzLCJidXR0b24iLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpO3JldHVybiBqdChoLmRvd25sb2FkKG51bGw9PWgudGFibGVEZXRhaWxzP251bGw6aC50YWJsZURldGFpbHMuVEFCTEVfSUQpKX0pLHF0KDQ0LCJjbHItaWNvbiIsMjMpLHllKCkoKSgpKCko''@;'; put 'put ''KSxtZSg0NSwiZGl2IiwyNCkscXQoNDYsImhvdC10YWJsZSIsMjUpLHllKCkscXQoNDcsImRpdiIsMjYpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKCk7Q2UoMTUpLG1yKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIiKSxDZSg1KSxtcigi''@;'; put 'put ''ICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFLCIgIiksQ2UoNSksbXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxDZSg0KSxSZSgibmdDbGFzcyIsUTIoMTMsTkdl''@;'; put 'put ''LCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpKSxDZSgxKSxtcigiICIsbnVs''@;'; put 'put ''bD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lELCIgIiksQ2UoOSksUmUoImRpc2FibGVkIiwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCl8fCJSRUpFQ1RFRCI9''@;'; put 'put ''PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSksQ2UoNyksUmUoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGEuaG90VGFibGUuY29sSGVhZGVycykoImNvbHVtbnMiLGEuaG90VGFibGUuY29sdW1ucykoIm1h''@;'; put 'put ''eFJvd3MiLGEuaG90VGFibGUubWF4Um93cykoImhlaWdodCIsYS5ob3RUYWJsZS5oZWlnaHQpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlLmxpY2Vuc2VLZXkpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscyl9fWNvbnN0IEJHZT1be3BhdGg6Ijp0YWJsZUlkIixjb21wb25lbnQ6KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9Xyx0aGlzLnNhc1NlcnZpY2U9VCx0aGlzLmxvYWRlZD0hMSx0aGlzLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6NTAwLHNldHRpbmdzOnt9LGxpY2Vuc2VLZXk6dm9pZCAwLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3Rh''@;'; put 'put ''Z2Vfcm93c19hbGxvd2VkfHwxLzB9fXN1Ym1pdHRlZFRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIit0aGlzLnRhYmxlX2lkKX1hcHByb3ZlVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92ZURldC8iK3Ro''@;'; put 'put ''aXMudGFibGVfaWQpfXZpZXdlclRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrdGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSl9Z29CYWNrKCl7R24ueGxtYXBzLmZpbmQoZD0+ZC50YXJnZXREUz09PXRoaXMudGFibGVEZXRhaWxzLkJBU0Vf''@;'; put 'put ''VEFCTEUpP3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2hvbWUvZmlsZXMvIit0aGlzLmhvdFRhYmxlLmRhdGFbMF0uWExNQVBfSUQpOnRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWRvd25sb2FkKGEpe2xldCBkPXRo''@;'; put 'put ''aXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyxfPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0i''@;'; put 'put ''K2EpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwi''@;'; put 'put ''dSIpe2EudGFibGVfaWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMg''@;'; put 'put ''bWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2EudGFibGVEZXRhaWxzPWQuanNwYXJhbXNbMF19Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0''@;'; put 'put ''IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uub3BlblRhYmxlKGEudGFibGVfaWQpO2lmKCFkfHwhZC5zdGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sXz1b''@;'; put 'put ''XTtmb3IobGV0IFcgaW4gaCloJiZmLnB1c2goVyk7Zm9yKGxldCBXPTA7VzxmLmxlbmd0aDtXKyspXy5wdXNoKHtkYXRhOmZbV119KTtsZXQgVD1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJz''@;'; put 'put ''PWYsYS5ob3RUYWJsZS5jb2x1bW5zPV8sYS5ob3RUYWJsZS5jZWxscz1ULGEubG9hZGVkPSEwLGEuc2V0Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRh''@;'; put 'put ''YmxlIixoKSxhLmxvYWRlZD0hMX19fSkoKX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsLWJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu''@;'; put 'put ''ZXcoYXx8YykodHQoQzApLHR0KGJkKSx0dCh2bCksdHQoRHMpLHR0KFdsKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3RhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImNv''@;'; put 'put ''bnRlbnQtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIiwiY2FyZCJdLFsiY2xhc3MiLCJoLTgwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiaC04MHZoIiwiZC1mbGV4IiwianVz''@;'; put 'put ''dGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtdGl0bGUiLCJ0ZXh0LWNlbnRlciJd''@;'; put 'put ''LFsxLCJtdC0wIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2xyLXJvdyJdLFsxLCJjYXJkLWJsb2NrIiwiY2xyLWNvbC1tZC02Il0sWzEsImNhcmQtaGVhZGVyIiwicHktNSJdLFsxLCJiYXNlVGFibGVMaW5rIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsxLCJtdC0xMCIsMywibmdDbGFzcyJd''@;'; put 'put ''LFsxLCJjbHItY29sLW1kLTYiLCJjYXJkLWJsb2NrIl0sWzEsIm10LTIwIl0sWzEsInJvdyJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIl0sWyJpZCIsImFwcHJvdmFsLWJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1''@;'; put 'put ''Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwidGV4''@;'; put 'put ''dC1jZW50ZXIiLCJtdC0yMCIsIm1pbi13LTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsImNhcmQtYmxvY2siXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIs''@;'; put 'put ''Im1heFJvd3MiLCJoZWlnaHQiLCJsaWNlbnNlS2V5IiwiY2VsbHMiXSxbMSwiY2FyZC1mb290ZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFFlKDIsSEdlLDMsMiwiZGl2''@;'; put 'put ''IiwyKSxRZSgzLFZHZSw0OCwxNiwiZGl2IiwzKSx5ZSgpKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwhZC5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIixkLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3VjLFppLGthLE15XSxzdHlsZXM6WyIucmVqZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2Nv''@;'; put 'put ''bG9yOiNmODMxMjY7Zm9udC13ZWlnaHQ6NzAwfS5hY2NlcHRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9LmJhc2VUYWJsZUxpbmtbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6MTBweDtjb2xvcjojMDA3Y2Ji''@;'; put 'put ''fSJdfSksY30pKCl9XTtsZXQgakdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLF91LGRjLmZvckNoaWxkKEJHZSksXzcuZm9y''@;'; put 'put ''Um9vdCgpXX0pLGN9KSgpO2Z1bmN0aW9uIHpHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIiBWaWV3ZXIgcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3''@;'; put 'put ''ZXJfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gVUdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIEVkaXRvciByb3dzIGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLmVk''@;'; put 'put ''aXRvcl9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBaR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgxLCIgU3RhZ2Ugcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5z''@;'; put 'put ''dGFnZV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBZR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgxLCIgSGlzdG9yeSByb3dzIGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVl''@;'; put 'put ''Lmhpc3Rvcnlfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gV0dlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIFN1Ym1pdCByb3dzIGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLnN1Ym1pdF9yb3dzX2xpbWl0KX19ZnVuY3Rpb24gR0dlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIFRhYmxlcyBpbiBsaWJyYXJ5IGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0''@;'; put 'put ''YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gJEdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIFZpZXdib3hlcyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgzKSxvcihhLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0KX19ZnVuY3Rpb24gcUdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIExpbmVhZ2UgZGFpbHkgbGltaXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMyksb3IoYS5saWNlbmNl''@;'; put 'put ''U3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCl9fWZ1bmN0aW9uIEtHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTcpLE5lKDEsIiBSZWZyZXNoIERhdGEgTGluZWFnZSAiKSxtZSgyLCJidXR0b24iLDE4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IEJ0KGEpLGp0KGplKDIpLnJlZnJlc2hEYXRhTGluZWFnZSgpKX0pLE5lKDMsIiBSRUZSRVNIICIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoMik7Q2UoMiksUmUoImNsckxvYWRpbmciLGEucmVmcmVzaGluZ0RhdGFMaW5lYWdlKX19ZnVuY3Rpb24gWEdlKGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPVZuKCk7enIoMCksUWUoMSxLR2UsNCwxLCJkaXYiLDE2KSxtZSgyLCJkaXYiLDE3KSxOZSgzLCIgUmVmcmVzaCBEYXRhIENhdGFsb2cgIiksbWUoNCwiYnV0dG9uIiwxOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLnJlZnJlc2hEYXRhQ2F0YWxvZygp''@;'; put 'put ''KX0pLE5lKDUsIiBSRUZSRVNIICIpLHllKCkoKSxtZSg2LCJkaXYiLDE3KSxOZSg3LCIgRG93bmxvYWQgQ29uZmlndXJhdGlvbiAiKSxtZSg4LCJidXR0b24iLDE5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuZG93bmxvYWRDb25maWd1cmF0aW9uKCkpfSks''@;'; put 'put ''TmUoOSwiIERPV05MT0FEICIpLHllKCkoKSxtZSgxMCwiZGl2IiwxNyksTmUoMTEsIiBVcGRhdGUgTGljZW5jZSBLZXkgIiksbWUoMTIsImJ1dHRvbiIsMjApLE5lKDEzLCIgVVBEQVRFICIpLHllKCkoKSxZcigpfWlmKDImYyl7Y29uc3QgYT1qZSgpO0NlKDEpLFJlKCJuZ0lmIiwiU0FTOSI9''@;'; put 'put ''PT1hLnNlcnZlclR5cGUpLENlKDMpLFJlKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZyl9fWNvbnN0IEpHZT1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRo''@;'; put 'put ''aXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmFwcEluZm89e2FkYXB0ZXJWZXJzaW9uOiI0LjEwLjEiLGFwcFZlcnNpb246InY2LjQuMCIucmVwbGFjZSgidiIsIiIpLGJ1aWxkVGltZXN0YW1wOklHKCkocGFyc2VJbnQoIjE3MDYxMTg2MTg3MzUiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpN''@;'; put 'put ''TSIpfSx0aGlzLmh0dHA9Imh0dHA6Ij09PWxvY2F0aW9uLnByb3RvY29sLHRoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExLHRoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExLHRoaXMucmVzcG9uc2U9Ik5vIHJlc3BvbnNlIix0aGlzLnJlc3BvbnNlTW9kYWw9ITEsdGhpcy5JbmZpbml0''@;'; put 'put ''eT0xLzAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5saWNlbmNlSW5mbz10aGlzLmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCksdGhp''@;'; put 'put ''cy5lbnZpcm9ubWVudEluZm89dGhpcy5hcHBTZXJ2aWNlLmdldEVudmlyb25tZW50SW5mbygpLHRoaXMuZW52aXJvbm1lbnRJbmZvJiYodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUM9ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSl9bmdPbklu''@;'; put 'put ''aXQoKXt9ZG93bmxvYWRDb25maWd1cmF0aW9uKCl7bGV0IGE9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksZD1hLnNlcnZlclVybCxoPWEuYXBwTG9jLGY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihkK2YrIi8/X3Byb2dyYW09IitoKyIv''@;'; put 'put ''c2VydmljZXMvYWRtaW4vZXhwb3J0Y29uZmlnIil9cmVmcmVzaERhdGFDYXRhbG9nKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2hjYXRhbG9nIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFy''@;'; put 'put ''c2VSZXNwb25zZShhKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExfSl9cmVmcmVzaERhdGFM''@;'; put 'put ''aW5lYWdlKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2h0YWJsZWxpbmVhZ2UiLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0p''@;'; put 'put ''LmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITF9KX1wYXJzZVJlc3BvbnNlKGEpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYT9KU09OLnN0''@;'; put 'put ''cmluZ2lmeShhKTphfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh6eCksdHQob2EpLHR0KEMwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zeXN0ZW0iXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5l''@;'; put 'put ''ciJdLGRlY2xzOjEzMCx2YXJzOjM0LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwicC0xMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIs''@;'; put 'put ''Im0tMCJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzEsImNvbnRlbnQtYm94IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInN5cy1pbmZvIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1sZy1yb3ciXSxbMSwi''@;'; put 'put ''bS0wIl0sWzEsImRhcmsiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFs''@;'; put 'put ''LWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwiYWRtaW4tYWN0aW9uIiw0LCJuZ0lmIl0sWzEsImFkbWluLWFjdGlvbiJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1z''@;'; put 'put ''bSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIiwzLCJjbGljayJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAs''@;'; put 'put ''ImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJoNCIsMiksTmUoMywiU3lzdGVtIGluZm9ybWF0aW9uIikseWUoKSxxdCg0LCJociIsMyksbWUoNSwiZGl2Iiw0KSg2LCJkaXYiLDUpKDcsImRpdiIpKDgsImg2Iiw2KSxOZSg5LCJFbnZpcm9ubWVudCBEZXRhaWxzICIpLHF0KDEwLCJzcGFuIiw3KSx5''@;'; put 'put ''ZSgpLG1lKDExLCJwIiw2KSxOZSgxMiwiIFNZU1NJVEU6ICIpLG1lKDEzLCJzcGFuIiw3KSxOZSgxNCkseWUoKSgpLG1lKDE1LCJwIiw2KSxOZSgxNiwiIFNZU1NDUEw6ICIpLG1lKDE3LCJzcGFuIiw3KSxOZSgxOCkseWUoKSgpLG1lKDE5LCJwIiw2KSxOZSgyMCwiIFNZU1RDUElQSE9TVE5B''@;'; put 'put ''TUU6ICIpLG1lKDIxLCJzcGFuIiw3KSxOZSgyMikseWUoKSgpLG1lKDIzLCJwIiw2KSxOZSgyNCwiIFNZU1ZMT05HOiAiKSxtZSgyNSwic3BhbiIsNyksTmUoMjYpLHllKCkoKSxtZSgyNywicCIsNiksTmUoMjgsIiBNRU1TSVpFOiAiKSxtZSgyOSwic3BhbiIsNyksTmUoMzApLHllKCkoKSxt''@;'; put 'put ''ZSgzMSwicCIsNiksTmUoMzIsIiBTWVNQUk9DRVNTTU9ERTogIiksbWUoMzMsInNwYW4iLDcpLE5lKDM0KSx5ZSgpKCksbWUoMzUsInAiLDYpLE5lKDM2LCIgU1lTSE9TVE5BTUU6ICIpLG1lKDM3LCJzcGFuIiw3KSxOZSgzOCkseWUoKSgpLG1lKDM5LCJwIiw2KSxOZSg0MCwiIFNZU0hPU1RJ''@;'; put 'put ''TkZPTE9ORzogIiksbWUoNDEsInNwYW4iLDcpLE5lKDQyKSx5ZSgpKCksbWUoNDMsInAiLDYpLE5lKDQ0LCIgU1lTRU5DT0RJTkc6ICIpLG1lKDQ1LCJzcGFuIiw3KSxOZSg0NikseWUoKSgpLG1lKDQ3LCJwIiw2KSxOZSg0OCwiIEFVVE9FWEVDOiAiKSxtZSg0OSwic3BhbiIsNyksTmUoNTAp''@;'; put 'put ''LHllKCkoKSxtZSg1MSwicCIsNiksTmUoNTIsIiBEQyBBRE1JTiBHUk9VUDogIiksbWUoNTMsInNwYW4iLDcpLE5lKDU0KSx5ZSgpKCkoKSxtZSg1NSwiZGl2Iiw4KSg1NiwiZGl2IikoNTcsImg2Iiw2KSxOZSg1OCwiIERhdGEgQ29udHJvbGxlciBEZXRhaWxzICIpLHF0KDU5LCJzcGFuIiw3''@;'; put 'put ''KSx5ZSgpLG1lKDYwLCJwIiw2KSxOZSg2MSwiIEFwcGxpY2F0aW9uIHZlcnNpb246ICIpLG1lKDYyLCJzcGFuIiw3KSxOZSg2MykseWUoKSgpLG1lKDY0LCJwIiw2KSxOZSg2NSwiIEJ1aWxkIHRpbWVzdGFtcDogIiksbWUoNjYsInNwYW4iLDcpLE5lKDY3KSx5ZSgpKCksbWUoNjgsInAiLDYp''@;'; put 'put ''LE5lKDY5LCIgQWRhcHRlciB2ZXJzaW9uOiAiKSxtZSg3MCwic3BhbiIsNyksTmUoNzEpLHllKCkoKSxtZSg3MiwicCIsNiksTmUoNzMsIiBIVFRQOiAiKSxtZSg3NCwic3BhbiIsNyksTmUoNzUpLHllKCkoKSgpKCksbWUoNzYsImRpdiIpKDc3LCJoNiIsNiksTmUoNzgsIkxpY2VuY2UgZGV0''@;'; put 'put ''YWlscyAiKSxxdCg3OSwic3BhbiIsNykseWUoKSxtZSg4MCwicCIsNiksTmUoODEsIiBWYWxpZCB1bnRpbDogIiksbWUoODIsInNwYW4iLDcpLE5lKDgzKSx5ZSgpKCksbWUoODQsInAiLDYpLE5lKDg1LCIgVXNlcnMgYWxsb3dlZDogIiksbWUoODYsInNwYW4iLDcpLE5lKDg3KSx5ZSgpKCks''@;'; put 'put ''bWUoODgsInAiLDYpLE5lKDg5LCIgU2l0ZSBJRHM6ICIpLG1lKDkwLCJzcGFuIiw3KSxOZSg5MSkseWUoKSgpLG1lKDkyLCJwIiw2KSxOZSg5MywiIEZyZWUgVGllcjogIiksbWUoOTQsInNwYW4iLDcpLE5lKDk1KSx5ZSgpKCksUWUoOTYsekdlLDQsMSwicCIsOSksUWUoOTcsVUdlLDQsMSwi''@;'; put 'put ''cCIsOSksUWUoOTgsWkdlLDQsMSwicCIsOSksUWUoOTksWUdlLDQsMSwicCIsOSksUWUoMTAwLFdHZSw0LDEsInAiLDkpLFFlKDEwMSxHR2UsNCwxLCJwIiw5KSxRZSgxMDIsJEdlLDQsMSwicCIsOSksUWUoMTAzLHFHZSw0LDEsInAiLDkpLG1lKDEwNCwicCIsNiksTmUoMTA1LCIgVmlld2Jv''@;'; put 'put ''eGVzOiAiKSxtZSgxMDYsInNwYW4iLDcpLE5lKDEwNykseWUoKSgpLG1lKDEwOCwicCIsNiksTmUoMTA5LCIgRmlsZSBVcGxvYWQ6ICIpLG1lKDExMCwic3BhbiIsNyksTmUoMTExKSx5ZSgpKCksbWUoMTEyLCJwIiw2KSxOZSgxMTMsIiBFZGl0IHJlY29yZDogIiksbWUoMTE0LCJzcGFuIiw3''@;'; put 'put ''KSxOZSgxMTUpLHllKCkoKSxtZSgxMTYsInAiLDYpLE5lKDExNywiIEFkZCByZWNvcmQ6ICIpLG1lKDExOCwic3BhbiIsNyksTmUoMTE5KSx5ZSgpKCkoKSgpLHF0KDEyMCwiaHIiLDMpLFFlKDEyMSxYR2UsMTQsMiwibmctY29udGFpbmVyIiwxMCkseWUoKSgpKCksbWUoMTIyLCJjbHItbW9k''@;'; put 'put ''YWwiLDExKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5yZXNwb25zZU1vZGFsPWZ9KSxtZSgxMjMsImgzIiwxMiksTmUoMTI0LCJSZXNwb25zZSIpLHllKCksbWUoMTI1LCJkaXYiLDEzKSxOZSgxMjYpLHllKCksbWUoMTI3LCJkaXYiLDE0KSgxMjgsImJ1''@;'; put 'put ''dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNwb25zZU1vZGFsPSExfSksTmUoMTI5LCIgT2sgIikseWUoKSgpKCkpLDImYSYmKENlKDE0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU1NJVEUpLENlKDQpLG9y''@;'; put 'put ''KG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTU0NQTCksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNUQ1BJUEhPU1ROQU1FKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9u''@;'; put 'put ''dWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU1ZMT05HKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLk1FTVNJWkUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTUFJPQ0VTU01P''@;'; put 'put ''REUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVE5BTUUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9MT05HKSxDZSg0KSxvcihudWxsPT1kLmVu''@;'; put 'put ''dmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU0VOQ09ESU5HKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1l''@;'; put 'put ''bnRJbmZvLkRDX0FETUlOX0dST1VQKSxDZSg5KSxvcihkLmFwcEluZm8uYXBwVmVyc2lvbiksQ2UoNCksb3IoZC5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxDZSg0KSxvcihkLmFwcEluZm8uYWRhcHRlclZlcnNpb24pLENlKDQpLG9yKGQuaHR0cD8iWUVTIjoiTk8iKSxDZSg4KSxvcihudWxs''@;'; put 'put ''PT1kLmxpY2VuY2VJbmZvP251bGw6ZC5saWNlbmNlSW5mby52YWxpZF91bnRpbCksQ2UoNCksb3IobnVsbD09ZC5saWNlbmNlSW5mbz9udWxsOmQubGljZW5jZUluZm8udXNlcnNfYWxsb3dlZCksQ2UoNCksb3IobnVsbD09ZC5saWNlbmNlSW5mbz9udWxsOmQubGljZW5jZUluZm8uc2l0ZV9p''@;'; put 'put ''ZF9tdWx0aXBsZSksQ2UoNCksb3IobnVsbCE9ZC5saWNlbmNlSW5mbyYmZC5saWNlbmNlSW5mby5kZW1vPyJZRVMiOiJOTyIpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGlj''@;'; put 'put ''ZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1kLkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlf''@;'; put 'put ''cm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IT09ZC5JbmZp''@;'; put 'put ''bml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1kLkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWQuSW5maW5pdHkpLENlKDQpLG9yKGQubGljZW5jZVN0YXRl''@;'; put 'put ''LnZhbHVlLnZpZXdib3g/IllFUyI6Ik5PIiksQ2UoNCksb3IoZC5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSxDZSg0KSxvcihkLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLENlKDQpLG9yKGQubGljZW5jZVN0YXRlLnZhbHVlLmFk''@;'; put 'put ''ZFJlY29yZD8iWUVTIjoiTk8iKSxDZSgyKSxSZSgibmdJZiIsMT09PShudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLnJlc3BvbnNlTW9kYWwpLENlKDQpLG1yKCIgIixkLnJlc3BvbnNlLCIg''@;'; put 'put ''IikpfSxkZXBlbmRlbmNpZXM6W1ppLEJ1LG91LHN1LFp1LGRoXSxzdHlsZXM6WyIuY29udGVudC1ib3hbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMjg5cHh9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGRpdltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxfS5zeXMtaW5m''@;'; put 'put ''b1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZCgyKXttYXJnaW46MCAzMHB4fS5hZG1pbi1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50''@;'; put 'put ''ZXI7cGFkZGluZzo1cHggMTBweDtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6MXB4IHNvbGlkICNkZWRlZGU7bWFyZ2luLWJvdHRvbTo1cHh9LmFkbWluLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDoxMDJweH0uZGFya1tf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17Y29sb3I6IzAwMH1AbWVkaWEgKG1heC13aWR0aDogOTkzcHgpey5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZCgyKXttYXJnaW46MH0uc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgZGl2''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweCAwfX0iXX0pLGN9KSgpfV07bGV0IFFHZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBv''@;'; put 'put ''cnRzOltkYy5mb3JDaGlsZChKR2UpLGRjXX0pLGN9KSgpLGUkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxRR2UsX3VdfSks''@;'; put 'put ''Y30pKCk7ZnVuY3Rpb24gdCRlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIG4kZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoMik7cmV0dXJuIGguZ3JvdXBT''@;'; put 'put ''ZWFyY2g9IiIsanQoaC5ncm91cExpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIHIkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3Jl''@;'; put 'put ''dHVybiBCdChhKSxqdChqZSgpLmdyb3VwU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LHQkZSwxLDAsImNsci1pY29uIiwxMCksUWUoNSxuJGUsMSwwLCJjbHItaWNvbiIsMTEpLHllKCko''@;'; put 'put ''KX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1qZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLmdyb3VwU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBpJGUoYyxsKXtpZigxJmMpe2NvbnN0''@;'; put 'put ''IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkuZ3JvdXBPbkNsaWNrKGgpKX0pLG1lKDEsInAiLDE2KSxxdCgyLCJjbHItaWNvbiIsMTcpLE5lKDMpLHllKCkoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQsZD1qZSgpO2hyKCJ0YWJsZS1hY3RpdmUiLGEuR1JPVVBVUkk9PT1kLmdyb3VwVXJpKSxDZSgzKSxtcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gbyRlKGMsbCl7aWYoMSZjJiYoenIoMCksUWUoMSxpJGUsNCwzLCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIiwxNCksWXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBzJGUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1mdW5jdGlvbiBhJGUo''@;'; put 'put ''YyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjQpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjUpKDYsInAiLDI2KSg3LCJiIiksTmUoOCkseWUoKSgpKCkoKSxtZSg5LCJ0ciIpKDEwLCJ0ZCIsMjUpKDExLCJpIiksTmUoMTIpLHllKCkoKSgp''@;'; put 'put ''KCkoKSgpKCkpLDImYyl7Y29uc3QgYT1qZSgyKTtDZSg4KSxvcihhLmdyb3VwTmFtZSksQ2UoNCksb3IoYS5ncm91cERlc2N8fCJubyBkZXNjcmlwdGlvbiIpfX1mdW5jdGlvbiBsJGUoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLHllKCkpfWZ1bmN0''@;'; put 'put ''aW9uIGMkZShjLGwpezEmYyYmKHpyKDApLG1lKDEsInRkIiwzMSkoMiwiYiIpLE5lKDMsIk5BTUUiKSx5ZSgpKCksbWUoNCwidGQiLDMxKSg1LCJiIiksTmUoNiwiRU1BSUwiKSx5ZSgpKCksbWUoNywidGQiLDMxKSg4LCJiIiksTmUoOSwiQ1JFQVRFRCIpLHllKCkoKSxtZSgxMCwidGQiLDMy''@;'; put 'put ''KSgxMSwiYiIpLE5lKDEyLCJVUERBVEVEIikseWUoKSgpLFlyKCkpfWZ1bmN0aW9uIHUkZShjLGwpezEmYyYmKHpyKDApLG1lKDEsInRkIiwzMSkoMiwiYiIpLE5lKDMsIklEIikseWUoKSgpLG1lKDQsInRkIiwzMSkoNSwiYiIpLE5lKDYsIkRJU1BMQVkgTkFNRSIpLHllKCkoKSxtZSg3LCJ0''@;'; put 'put ''ZCIsMzEpKDgsImIiKSxOZSg5LCJVU0VSIE5BTUUiKSx5ZSgpKCksWXIoKSl9ZnVuY3Rpb24gZCRlKGMsbCl7aWYoMSZjJiYoenIoMCksbWUoMSwidGQiLDMyKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMiksTmUoNCkseWUoKSxtZSg1LCJ0ZCIsMzIpLE5lKDYpLHllKCksbWUoNywidGQiLDMy''@;'; put 'put ''KSxOZSg4KSx5ZSgpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSgpLiRpbXBsaWNpdDtDZSgyKSxvcihhLk1FTUJFUk5BTUUpLENlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEuTUVNQkVSQ1JFQVRFRCksQ2UoMiksb3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gaCRlKGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoenIoMCksbWUoMSwidGQiLDMyKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMiksTmUoNCkseWUoKSxtZSg1LCJ0ZCIsMzIpLE5lKDYpLHllKCksWXIoKSksMiZjKXtjb25zdCBhPWplKCkuJGltcGxpY2l0O0NlKDIpLG9yKGEuSUQpLENlKDIpLG9yKGEuRElTUExBWU5BTUUpLENlKDIpLG9y''@;'; put 'put ''KGEuVVNFUk5BTUUpfX1mdW5jdGlvbiBmJGUoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIsMzMpLFFlKDEsZCRlLDksNCwibmctY29udGFpbmVyIiw1KSxRZSgyLGgkZSw3LDMsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUoNCk7UmUoInJvdXRl''@;'; put 'put ''ckxpbmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrKGEuVVJJTUVNfHxhLklEKSksQ2UoMSksUmUoIm5nSWYiLGQuc2VydmVyVHlwZT09PWQuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhc2pzKX19ZnVuY3Rpb24gcCRlKGMs''@;'; put 'put ''bCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIiksUWUoMyxjJGUsMTMsMCwibmctY29udGFpbmVyIiw1KSxRZSg0LHUkZSwxMCwwLCJuZy1jb250YWluZXIiLDUpLHllKCkoKSxtZSg1LCJ0Ym9keSIpLFFlKDYsZiRlLDMsMywidHIiLDMwKSx5ZSgpKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1qZSgzKTtDZSgzKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIGck''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMikseWUoKSxRZSgzLGwkZSwyLDAsImg1Iiw1KSxtZSg0LCJkaXYiLDI3KSxRZSg1LHAkZSw3LDMsInRhYmxlIiwyOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoMiksbXIoIk1FTUJFUlMgKCIsYS5ncm91cE1l''@;'; put 'put ''bWJlckNvdW50LCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIG0kZShjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gTWVtYmVycyBQcmVzZW50IikseWUoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gdiRlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDMzKSgxLCJ0ZCIsMzIpLE5lKDIpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuTUVNQkVSSUQpLENlKDIpLG9yKGEuTUVNQkVSTkFNRSl9fWZ1''@;'; put 'put ''bmN0aW9uIF8kZShjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIikoNCwiYiIpLE5lKDUpLHllKCkoKSgpKCksbWUoNiwidGJvZHkiKSxRZSg3LHYkZSwzLDIsInRyIiwzMCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoMyk7Q2UoNSksbXIo''@;'; put 'put ''Ik1FTUJFUlMgKCIsYS5ncm91cE1lbWJlckNvdW50LCIpIiksQ2UoMiksUmUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gYiRlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLFFlKDMsbSRlLDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjcp''@;'; put 'put ''LFFlKDUsXyRlLDgsMiwidGFibGUiLDI4KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgyKTtDZSgyKSxvcihhLmdyb3VwTmFtZSksQ2UoMSksUmUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIHkk''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLFFlKDEsYSRlLDEzLDIsImRpdiIsMjApLG1lKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpKDQsImRpdiIsMjMpLFFlKDUsZyRlLDYsMywiZGl2Iiw1KSxRZSg2LGIkZSw2LDMsImRpdiIsNSkscXQoNywiYnIiKSx5ZSgpKCkoKSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9amUoKTtDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDQpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNW''@;'; put 'put ''aXlhKX19bGV0IGVhZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT1fLHRoaXMuZ3JvdXBTZWFyY2g9IiIsdGhpcy5wYXJhbVBy''@;'; put 'put ''ZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmdyb3VwVXJpPSIiLHRoaXMuZ3JvdXBOYW1lPSIiLHRoaXMuZ3JvdXBEZXNjPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMubG9hZGluZz0hMSx0aGlzLlNlcnZlclR5cGU9VWMu''@;'; put 'put ''RCx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5p''@;'; put 'put ''dCgpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvZ3JvdXBzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksR24u''@;'; put 'put ''dXNlcm5hdi5ncm91cExpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5ncm91cHM9R24udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Hbi51c2VybmF2Lmdyb3VwU2VhcmNoKToodm9pZCAwPT09R24udXNlcm5hdi5ncm91cExpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlz''@;'; put 'put ''LmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMu''@;'; put 'put ''bWFwKGY9Pih7R1JPVVBVUkk6Zi5pZCxHUk9VUE5BTUU6Zi5uYW1lLEdST1VQREVTQzpmLmRlc2NyaXB0aW9ufSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1oLEduLnVzZXJuYXYuZ3JvdXBMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGdyb3VwcyIs''@;'; put 'put ''bnVsbCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBzPWEuZ3JvdXBzLEduLnVzZXJuYXYuZ3JvdXBMaXN0PWEuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Hbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUduLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMu''@;'; put 'put ''cGFyYW1QcmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9q''@;'; put 'put ''c29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1KU09OLnBhcnNlKGEpO3RoaXMubG9hZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6Zi5uYW1lLE1FTUJFUklEOmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0aGlzLmdyb3VwTWVtYmVy''@;'; put 'put ''Q291bnQ9aC5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhl''@;'; put 'put ''bihkPT57dGhpcy5ncm91cE1lbWJlcnM9ZC5zYXNtZW1iZXJzLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1kLnNhc21lbWJlcnMubGVuZ3RoLHZvaWQgMCE9PWQuc2FzbWVtYmVyc1swXSYmKHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWQuc2FzbWVtYmVyc1swXS5VUklNRU18fHRoaXMu''@;'; put 'put ''cGFyYW1VUkksdGhpcy5ncm91cE5hbWU9ZC5zYXNtZW1iZXJzWzBdLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1kLnNhc21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1lfHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3Ro''@;'; put 'put ''aXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBOQU1FIiksR24udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdyb3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIu''@;'; put 'put ''dXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRp''@;'; put 'put ''bmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDO2xldCBfPWYuaXRlbXMubWFwKFQ9Pih7TUVNQkVSTkFNRTpULm5hbWUsTUVNQkVSSUQ6VC5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz1fLHRo''@;'; put 'put ''aXMuZ3JvdXBNZW1iZXJDb3VudD1fLmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDphLkdST1VQVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJ''@;'; put 'put ''LHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1iZXJzPWYuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9Zi5zYXNtZW1iZXJzLmxlbmd0aH0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKSh0dChvYSksdHQoQWMpLHR0KERzKSx0dChKZCksdHQoV2wpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWdyb3VwIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJzaWRl''@;'; put 'put ''YmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFy''@;'; put 'put ''Y2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBHcm91cHMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hh''@;'; put 'put ''cGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwi''@;'; put 'put ''Y3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwidXNlcnMiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJncm91cC1kYXRh''@;'; put 'put ''Il0sWzEsInRhYmxlIiwiZ3JvdXAtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsImdyb3VwLWluZm8tdGV4dCJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzMsInJvdXRlckxpbmsi''@;'; put 'put ''LDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiwwKSgxLCJjbHItdHJlZSIpLFFlKDIsciRlLDYsMywiY2xyLXRyZWUtbm9kZSIsMSksUWUoMyxv''@;'; put 'put ''JGUsMiwxLCJuZy1jb250YWluZXIiLDIpLHllKCkoKSxtZSg0LCJkaXYiLDMpLFFlKDUscyRlLDMsMCwiZGl2Iiw0KSxRZSg2LHkkZSw4LDMsImRpdiIsNSkseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLGQuZ3JvdXBzKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5ncm91cHMpLENlKDIpLFJl''@;'; put 'put ''KCJuZ0lmIixkLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLmdyb3VwTWVtYmVycyYmIWQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEJ1LFdhLEJzLE9zLGRkLGcxLGthLGYxLG4zXSxzdHlsZXM6WyIuc2lkZWJhci1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDox''@;'; put 'put ''MDAlfS5ncm91cC1pbmZvLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS5ncm91cC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6''@;'; put 'put ''M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9Lmdyb3VwLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9y''@;'; put 'put ''ZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6YXV0b30uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0sIC5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNm''@;'; put 'put ''OWY5Zjk7d2lkdGg6MTAwJX0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgLm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0Ym9keVtfbmdjb250ZW50LSVDT01QJV0gICB0cltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde292ZXJmbG93OmF1dG99QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Il19KSxjfSkoKTtmdW5jdGlvbiB3JGUoKXt9ZnVuY3Rpb24geVUoYyl7cmV0dXJuIG51''@;'; put 'put ''bGw9PWM/dyRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihjKX19ZnVuY3Rpb24gdGFlKGMpe3JldHVybiBudWxsPT1jP1tdOkFycmF5LmlzQXJyYXkoYyk/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIFMkZSgpe3JldHVybltdfWZ1bmN0aW9uIG5hZShjKXtyZXR1cm4g''@;'; put 'put ''bnVsbD09Yz9TJGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGMpfX1mdW5jdGlvbiByYWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhjKX19ZnVuY3Rpb24gaWFlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC5tYXRjaGVz''@;'; put 'put ''KGMpfX12YXIgRSRlPUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIEEkZSgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBEJGU9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBJJGUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlv''@;'; put 'put ''biBvYWUoYyl7cmV0dXJuIG5ldyBBcnJheShjLmxlbmd0aCl9ZnVuY3Rpb24gb1QoYyxsKXt0aGlzLm93bmVyRG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWMubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9Yyx0aGlzLl9fZGF0YV9f''@;'; put 'put ''PWx9ZnVuY3Rpb24gSCRlKGMsbCxhLGQsaCxmKXtmb3IodmFyIFQsXz0wLFc9bC5sZW5ndGgsaWU9Zi5sZW5ndGg7XzxpZTsrK18pKFQ9bFtfXSk/KFQuX19kYXRhX189ZltfXSxkW19dPVQpOmFbX109bmV3IG9UKGMsZltfXSk7Zm9yKDtfPFc7KytfKShUPWxbX10pJiYoaFtfXT1UKX1mdW5j''@;'; put 'put ''dGlvbiBOJGUoYyxsLGEsZCxoLGYsXyl7dmFyIFQsVyxaZSxpZT1uZXcgTWFwLGdlPWwubGVuZ3RoLHdlPWYubGVuZ3RoLEVlPW5ldyBBcnJheShnZSk7Zm9yKFQ9MDtUPGdlOysrVCkoVz1sW1RdKSYmKEVlW1RdPVplPV8uY2FsbChXLFcuX19kYXRhX18sVCxsKSsiIixpZS5oYXMoWmUpP2hb''@;'; put 'put ''VF09VzppZS5zZXQoWmUsVykpO2ZvcihUPTA7VDx3ZTsrK1QpWmU9Xy5jYWxsKGMsZltUXSxULGYpKyIiLChXPWllLmdldChaZSkpPyhkW1RdPVcsVy5fX2RhdGFfXz1mW1RdLGllLmRlbGV0ZShaZSkpOmFbVF09bmV3IG9UKGMsZltUXSk7Zm9yKFQ9MDtUPGdlOysrVCkoVz1sW1RdKSYmaWUu''@;'; put 'put ''Z2V0KEVlW1RdKT09PVcmJihoW1RdPVcpfWZ1bmN0aW9uIFYkZShjKXtyZXR1cm4gYy5fX2RhdGFfX31mdW5jdGlvbiBqJGUoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiYibGVuZ3RoImluIGM/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIEckZShjLGwpe3JldHVybiBjPGw/LTE6Yz5s''@;'; put 'put ''PzE6Yz49bD8wOk5hTn1vVC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm9ULGFwcGVuZENoaWxkOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGMsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihjLGwpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5z''@;'; put 'put ''ZXJ0QmVmb3JlKGMsbCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGMpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChjKX19O3ZhciB3VT0iaHR0cDov''@;'; put 'put ''L3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3Qgc2FlPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3VSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJo''@;'; put 'put ''dHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIHNUKGMpe3ZhciBsPWMrPSIiLGE9bC5pbmRleE9mKCI6Iik7cmV0dXJuIGE+PTAmJiJ4bWxucyIhPT0obD1jLnNsaWNlKDAsYSkpJiYoYz1jLnNsaWNlKGErMSkpLHNhZS5oYXNPd25Qcm9wZXJ0eShsKT97c3BhY2U6c2Fl''@;'; put 'put ''W2xdLGxvY2FsOmN9OmN9ZnVuY3Rpb24gZXFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiB0cWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBucWUoYyxs''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwpfX1mdW5jdGlvbiBycWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsKX19ZnVuY3Rpb24gaXFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZShjKTp0aGlzLnNldEF0dHJpYnV0ZShjLGEpfX1mdW5jdGlvbiBvcWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP3RoaXMucmVtb3ZlQXR0''@;'; put 'put ''cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxhKX19ZnVuY3Rpb24gYWFlKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8Yy5kb2N1bWVudCYmY3x8Yy5kZWZhdWx0Vmlld31m''@;'; put 'put ''dW5jdGlvbiBhcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19ZnVuY3Rpb24gbHFlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbCxhKX19ZnVuY3Rpb24gY3FlKGMsbCxhKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgZD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1kP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGQsYSl9fWZ1bmN0aW9uIFo3KGMsbCl7cmV0dXJuIGMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShsKXx8YWFlKGMpLmdl''@;'; put 'put ''dENvbXB1dGVkU3R5bGUoYyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGwpfWZ1bmN0aW9uIGRxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tjXX19ZnVuY3Rpb24gaHFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tjXT1sfX1mdW5jdGlvbiBmcWUoYyxsKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP2RlbGV0ZSB0aGlzW2NdOnRoaXNbY109YX19ZnVuY3Rpb24gbGFlKGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBDVShjKXtyZXR1cm4gYy5jbGFzc0xpc3R8fG5ldyBjYWUo''@;'; put 'put ''Yyl9ZnVuY3Rpb24gY2FlKGMpe3RoaXMuX25vZGU9Yyx0aGlzLl9uYW1lcz1sYWUoYy5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB1YWUoYyxsKXtmb3IodmFyIGE9Q1UoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLmFkZChsW2RdKX1mdW5jdGlvbiBkYWUoYyxsKXtm''@;'; put 'put ''b3IodmFyIGE9Q1UoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLnJlbW92ZShsW2RdKX1mdW5jdGlvbiBncWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dWFlKHRoaXMsYyl9fWZ1bmN0aW9uIG1xZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtkYWUodGhpcyxjKX19ZnVuY3Rpb24gdnFlKGMsbCl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKCl7KGwuYXBwbHkodGhpcyxhcmd1bWVudHMpP3VhZTpkYWUpKHRoaXMsYyl9fWZ1bmN0aW9uIGJxZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24geXFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319ZnVuY3Rpb24gd3FlKGMp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fWZ1bmN0aW9uIFNxZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIE1xZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1jfX1mdW5jdGlv''@;'; put 'put ''biB4cWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bD8/IiJ9fWZ1bmN0aW9uIGtxZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBUcWUoKXt0aGlz''@;'; put 'put ''LnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBJcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5vd25lckRvY3VtZW50LGE9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJu''@;'; put 'put ''IGE9PT13VSYmbC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09d1U/bC5jcmVhdGVFbGVtZW50KGMpOmwuY3JlYXRlRWxlbWVudE5TKGEsYyl9fWZ1bmN0aW9uIExxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhj''@;'; put 'put ''LnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBoYWUoYyl7dmFyIGw9c1QoYyk7cmV0dXJuKGwubG9jYWw/THFlOklxZSkobCl9ZnVuY3Rpb24gT3FlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gRnFlKCl7dmFyIGM9dGhpcy5wYXJlbnROb2RlO2MmJmMucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rp''@;'; put 'put ''b24gTnFlKCl7dmFyIGM9dGhpcy5jbG9uZU5vZGUoITEpLGw9dGhpcy5wYXJlbnROb2RlO3JldHVybiBsP2wuaW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiBWcWUoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMCksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/''@;'; put 'put ''bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIFpxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9fb247aWYobCl7Zm9yKHZhciBmLGE9MCxkPS0xLGg9bC5sZW5ndGg7YTxoOysrYSlmPWxbYV0sYy50eXBlJiZmLnR5cGUhPT1jLnR5cGV8fGYu''@;'; put 'put ''bmFtZSE9PWMubmFtZT9sWysrZF09Zjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZi50eXBlLGYubGlzdGVuZXIsZi5vcHRpb25zKTsrK2Q/bC5sZW5ndGg9ZDpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gWXFlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaCxkPXRoaXMuX19v''@;'; put 'put ''bixmPWZ1bmN0aW9uIHpxZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7Yy5jYWxsKHRoaXMsbCx0aGlzLl9fZGF0YV9fKX19KGwpO2lmKGQpZm9yKHZhciBfPTAsVD1kLmxlbmd0aDtfPFQ7KytfKWlmKChoPWRbX10pLnR5cGU9PT1jLnR5cGUmJmgubmFtZT09PWMubmFtZSlyZXR1cm4gdGhpcy5y''@;'; put 'put ''ZW1vdmVFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyLGgub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyPWYsaC5vcHRpb25zPWEpLHZvaWQoaC52YWx1ZT1sKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYy50eXBlLGYsYSksaD17dHlwZTpjLnR5''@;'; put 'put ''cGUsbmFtZTpjLm5hbWUsdmFsdWU6bCxsaXN0ZW5lcjpmLG9wdGlvbnM6YX0sZD9kLnB1c2goaCk6dGhpcy5fX29uPVtoXX19ZnVuY3Rpb24gZmFlKGMsbCxhKXt2YXIgZD1hYWUoYyksaD1kLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBoP2g9bmV3IGgobCxhKTooaD1kLmRvY3Vt''@;'; put 'put ''ZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGE/KGguaW5pdEV2ZW50KGwsYS5idWJibGVzLGEuY2FuY2VsYWJsZSksaC5kZXRhaWw9YS5kZXRhaWwpOmguaW5pdEV2ZW50KGwsITEsITEpKSxjLmRpc3BhdGNoRXZlbnQoaCl9ZnVuY3Rpb24gR3FlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGZhZSh0aGlzLGMsbCl9fWZ1bmN0aW9uICRxZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmYWUodGhpcyxjLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19Y2FlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGMpe3RoaXMuX25hbWVzLmluZGV4T2YoYyk8MCYmKHRoaXMuX25h''@;'; put 'put ''bWVzLnB1c2goYyksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBsPXRoaXMuX25hbWVzLmluZGV4T2YoYyk7bD49MCYmKHRoaXMuX25hbWVzLnNwbGljZShsLDEpLHRoaXMuX25vZGUuc2V0QXR0''@;'; put 'put ''cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGMpPj0wfX07dmFyIFNVPVtudWxsXTtmdW5jdGlvbiBYdShjLGwpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bH1mdW5jdGlv''@;'; put 'put ''biBwYWUoKXtyZXR1cm4gbmV3IFh1KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sU1UpfVh1LnByb3RvdHlwZT1wYWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYdSxzZWxlY3Q6ZnVuY3Rpb24gQyRlKGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz15VShjKSk7Zm9yKHZhciBsPXRo''@;'; put 'put ''aXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgVyxpZSxmPWxbaF0sXz1mLmxlbmd0aCxUPWRbaF09bmV3IEFycmF5KF8pLGdlPTA7Z2U8XzsrK2dlKShXPWZbZ2VdKSYmKGllPWMuY2FsbChXLFcuX19kYXRhX18sZ2UsZikpJiYoIl9fZGF0''@;'; put 'put ''YV9fImluIFcmJihpZS5fX2RhdGFfXz1XLl9fZGF0YV9fKSxUW2dlXT1pZSk7cmV0dXJuIG5ldyBYdShkLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24geCRlKGMpe2M9ImZ1bmN0aW9uIj09dHlwZW9mIGM/ZnVuY3Rpb24gTSRlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0YWUoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0oYyk6bmFlKGMpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPVtdLGg9W10sZj0wO2Y8YTsrK2YpZm9yKHZhciBXLF89bFtmXSxUPV8ubGVuZ3RoLGllPTA7aWU8VDsrK2llKShXPV9baWVdKSYmKGQucHVzaChjLmNh''@;'; put 'put ''bGwoVyxXLl9fZGF0YV9fLGllLF8pKSxoLnB1c2goVykpO3JldHVybiBuZXcgWHUoZCxoKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24gVCRlKGMpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT1jP0EkZTpmdW5jdGlvbiBrJGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEUkZS5jYWxsKHRo''@;'; put 'put ''aXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rpb24iPT10eXBlb2YgYz9jOmlhZShjKSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbiBSJGUoYyl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PWM/SSRlOmZ1bmN0aW9uIEwkZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRCRlLmNhbGwo''@;'; put 'put ''dGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6aWFlKGMpKSl9LGZpbHRlcjpmdW5jdGlvbiBPJGUoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPXJhZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7''@;'; put 'put ''KytoKWZvcih2YXIgVyxmPWxbaF0sXz1mLmxlbmd0aCxUPWRbaF09W10saWU9MDtpZTxfOysraWUpKFc9ZltpZV0pJiZjLmNhbGwoVyxXLl9fZGF0YV9fLGllLGYpJiZULnB1c2goVyk7cmV0dXJuIG5ldyBYdShkLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIEIkZShjLGwpe2lmKCFh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsViRlKTt2YXIgYT1sP04kZTpIJGUsZD10aGlzLl9wYXJlbnRzLGg9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1mdW5jdGlvbiBGJGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShjKSk7''@;'; put 'put ''Zm9yKHZhciBmPWgubGVuZ3RoLF89bmV3IEFycmF5KGYpLFQ9bmV3IEFycmF5KGYpLFc9bmV3IEFycmF5KGYpLGllPTA7aWU8ZjsrK2llKXt2YXIgZ2U9ZFtpZV0sd2U9aFtpZV0sRWU9d2UubGVuZ3RoLFplPWokZShjLmNhbGwoZ2UsZ2UmJmdlLl9fZGF0YV9fLGllLGQpKSxvdD1aZS5sZW5n''@;'; put 'put ''dGgsZXQ9VFtpZV09bmV3IEFycmF5KG90KSx5dD1fW2llXT1uZXcgQXJyYXkob3QpO2EoZ2Usd2UsZXQseXQsV1tpZV09bmV3IEFycmF5KEVlKSxaZSxsKTtmb3IodmFyIG5uLG1uLFN0PTAsUXQ9MDtTdDxvdDsrK1N0KWlmKG5uPWV0W1N0XSl7Zm9yKFN0Pj1RdCYmKFF0PVN0KzEpOyEobW49''@;'; put 'put ''eXRbUXRdKSYmKytRdDxvdDspO25uLl9uZXh0PW1ufHxudWxsfX1yZXR1cm4oXz1uZXcgWHUoXyxkKSkuX2VudGVyPVQsXy5fZXhpdD1XLF99LGVudGVyOmZ1bmN0aW9uIFAkZSgpe3JldHVybiBuZXcgWHUodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAob2FlKSx0aGlzLl9wYXJlbnRz''@;'; put 'put ''KX0sZXhpdDpmdW5jdGlvbiB6JGUoKXtyZXR1cm4gbmV3IFh1KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAob2FlKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBVJGUoYyxsLGEpe3ZhciBkPXRoaXMuZW50ZXIoKSxoPXRoaXMsZj10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYz8oZD1jKGQpKSYmKGQ9ZC5zZWxlY3Rpb24oKSk6ZD1kLmFwcGVuZChjKyIiKSxudWxsIT1sJiYoaD1sKGgpKSYmKGg9aC5zZWxlY3Rpb24oKSksbnVsbD09YT9mLnJlbW92ZSgpOmEoZiksZCYmaD9kLm1lcmdlKGgpLm9yZGVyKCk6aH0sbWVyZ2U6ZnVuY3Rpb24gWiRl''@;'; put 'put ''KGMpe2Zvcih2YXIgbD1jLnNlbGVjdGlvbj9jLnNlbGVjdGlvbigpOmMsYT10aGlzLl9ncm91cHMsZD1sLl9ncm91cHMsaD1hLmxlbmd0aCxfPU1hdGgubWluKGgsZC5sZW5ndGgpLFQ9bmV3IEFycmF5KGgpLFc9MDtXPF87KytXKWZvcih2YXIgWmUsaWU9YVtXXSxnZT1kW1ddLHdlPWllLmxl''@;'; put 'put ''bmd0aCxFZT1UW1ddPW5ldyBBcnJheSh3ZSksb3Q9MDtvdDx3ZTsrK290KShaZT1pZVtvdF18fGdlW290XSkmJihFZVtvdF09WmUpO2Zvcig7VzxoOysrVylUW1ddPWFbV107cmV0dXJuIG5ldyBYdShULHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24gWHFlKCl7cmV0dXJuIHRo''@;'; put 'put ''aXN9LG9yZGVyOmZ1bmN0aW9uIFkkZSgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0tMSxhPWMubGVuZ3RoOysrbDxhOylmb3IodmFyIF8sZD1jW2xdLGg9ZC5sZW5ndGgtMSxmPWRbaF07LS1oPj0wOykoXz1kW2hdKSYmKGYmJjReXy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmKSYmZi5w''@;'; put 'put ''YXJlbnROb2RlLmluc2VydEJlZm9yZShfLGYpLGY9Xyk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gVyRlKGMpe2Z1bmN0aW9uIGwod2UsRWUpe3JldHVybiB3ZSYmRWU/Yyh3ZS5fX2RhdGFfXyxFZS5fX2RhdGFfXyk6IXdlLSFFZX1jfHwoYz1HJGUpO2Zvcih2YXIgYT10aGlzLl9ncm91''@;'; put 'put ''cHMsZD1hLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkOysrZil7Zm9yKHZhciBpZSxfPWFbZl0sVD1fLmxlbmd0aCxXPWhbZl09bmV3IEFycmF5KFQpLGdlPTA7Z2U8VDsrK2dlKShpZT1fW2dlXSkmJihXW2dlXT1pZSk7Vy5zb3J0KGwpfXJldHVybiBuZXcgWHUoaCx0aGlzLl9wYXJl''@;'; put 'put ''bnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uICQkZSgpe3ZhciBjPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsYy5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gcSRlKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rp''@;'; put 'put ''b24gSyRlKCl7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIgZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpe3ZhciBfPWRbaF07aWYoXylyZXR1cm4gX31yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBYJGUoKXtsZXQgYz0wO2Zvcihj''@;'; put 'put ''b25zdCBsIG9mIHRoaXMpKytjO3JldHVybiBjfSxlbXB0eTpmdW5jdGlvbiBKJGUoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gUSRlKGMpe2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT0wLGQ9bC5sZW5ndGg7YTxkOysrYSlmb3IodmFyIFQsaD1sW2FdLGY9MCxfPWgubGVu''@;'; put 'put ''Z3RoO2Y8XzsrK2YpKFQ9aFtmXSkmJmMuY2FsbChULFQuX19kYXRhX18sZixoKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBzcWUoYyxsKXt2YXIgYT1zVChjKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBkPXRoaXMubm9kZSgpO3JldHVybiBhLmxvY2FsP2QuZ2V0QXR0cmlidXRl''@;'; put 'put ''TlMoYS5zcGFjZSxhLmxvY2FsKTpkLmdldEF0dHJpYnV0ZShhKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP2EubG9jYWw/dHFlOmVxZToiZnVuY3Rpb24iPT10eXBlb2YgbD9hLmxvY2FsP29xZTppcWU6YS5sb2NhbD9ycWU6bnFlKShhLGwpKX0sc3R5bGU6ZnVuY3Rpb24gdXFlKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9hcWU6ImZ1bmN0aW9uIj09dHlwZW9mIGw/Y3FlOmxxZSkoYyxsLGE/PyIiKSk6WjcodGhpcy5ub2RlKCksYyl9LHByb3BlcnR5OmZ1bmN0aW9uIHBxZShjLGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/''@;'; put 'put ''dGhpcy5lYWNoKChudWxsPT1sP2RxZToiZnVuY3Rpb24iPT10eXBlb2YgbD9mcWU6aHFlKShjLGwpKTp0aGlzLm5vZGUoKVtjXX0sY2xhc3NlZDpmdW5jdGlvbiBfcWUoYyxsKXt2YXIgYT1sYWUoYysiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9Q1UodGhpcy5ub2RlKCkp''@;'; put 'put ''LGg9LTEsZj1hLmxlbmd0aDsrK2g8ZjspaWYoIWQuY29udGFpbnMoYVtoXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/dnFlOmw/Z3FlOm1xZSkoYSxsKSl9LHRleHQ6ZnVuY3Rpb24gQ3FlKGMpe3JldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoP3RoaXMuZWFjaChudWxsPT1jP2JxZTooImZ1bmN0aW9uIj09dHlwZW9mIGM/d3FlOnlxZSkoYykpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uIEVxZShjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09Yz9TcWU6KCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjP3hxZTpNcWUpKGMpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIEFxZSgpe3JldHVybiB0aGlzLmVhY2goa3FlKX0sbG93ZXI6ZnVuY3Rpb24gRHFlKCl7cmV0dXJuIHRoaXMuZWFjaChUcWUpfSxhcHBlbmQ6ZnVuY3Rpb24gUnFlKGMpe3ZhciBsPSJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBjP2M6aGFlKGMpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24gUHFlKGMsbCl7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yzpo''@;'; put 'put ''YWUoYyksZD1udWxsPT1sP09xZToiZnVuY3Rpb24iPT10eXBlb2YgbD9sOnlVKGwpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVt''@;'; put 'put ''b3ZlOmZ1bmN0aW9uIEhxZSgpe3JldHVybiB0aGlzLmVhY2goRnFlKX0sY2xvbmU6ZnVuY3Rpb24gQnFlKGMpe3JldHVybiB0aGlzLnNlbGVjdChjP1ZxZTpOcWUpfSxkYXR1bTpmdW5jdGlvbiBqcWUoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18i''@;'; put 'put ''LGMpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBXcWUoYyxsLGEpe3ZhciBoLF8sZD1mdW5jdGlvbiBVcWUoYyl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihsKXt2YXIgYT0iIixkPWwuaW5kZXhPZigiLiIpO3JldHVybiBkPj0wJiYoYT1s''@;'; put 'put ''LnNsaWNlKGQrMSksbD1sLnNsaWNlKDAsZCkpLHt0eXBlOmwsbmFtZTphfX0pfShjKyIiKSxmPWQubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKFQ9bD9ZcWU6WnFlLGg9MDtoPGY7KytoKXRoaXMuZWFjaChUKGRbaF0sbCxhKSk7cmV0dXJuIHRoaXN9dmFyIFQ9dGhpcy5u''@;'; put 'put ''b2RlKCkuX19vbjtpZihUKWZvcih2YXIgZ2UsVz0wLGllPVQubGVuZ3RoO1c8aWU7KytXKWZvcihoPTAsZ2U9VFtXXTtoPGY7KytoKWlmKChfPWRbaF0pLnR5cGU9PT1nZS50eXBlJiZfLm5hbWU9PT1nZS5uYW1lKXJldHVybiBnZS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gcXFlKGMsbCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/JHFlOkdxZSkoYyxsKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKktxZSgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIF8sZD1jW2xdLGg9MCxmPWQubGVuZ3Ro''@;'; put 'put ''O2g8ZjsrK2gpKF89ZFtoXSkmJih5aWVsZCBfKX19O2NvbnN0IFlnPXBhZTtmdW5jdGlvbiBNVShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IFh1KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGMpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IFh1KFt0YWUoYyld''@;'; put 'put ''LFNVKX1mdW5jdGlvbiBrcyhjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IFh1KFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgWHUoW1tjXV0sU1UpfXZhciBKcWU9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gZ2FlKCl7''@;'; put 'put ''Zm9yKHZhciBkLGM9MCxsPWFyZ3VtZW50cy5sZW5ndGgsYT17fTtjPGw7KytjKXtpZighKGQ9YXJndW1lbnRzW2NdKyIiKXx8ZCBpbiBhfHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7YVtkXT1bXX1yZXR1cm4gbmV3IGFUKGEpfWZ1bmN0aW9u''@;'; put 'put ''IGFUKGMpe3RoaXMuXz1jfWZ1bmN0aW9uIGVLZShjLGwpe2Zvcih2YXIgaCxhPTAsZD1jLmxlbmd0aDthPGQ7KythKWlmKChoPWNbYV0pLm5hbWU9PT1sKXJldHVybiBoLnZhbHVlfWZ1bmN0aW9uIG1hZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1jLmxlbmd0aDtkPGg7KytkKWlmKGNbZF0ubmFt''@;'; put 'put ''ZT09PWwpe2NbZF09SnFlLGM9Yy5zbGljZSgwLGQpLmNvbmNhdChjLnNsaWNlKGQrMSkpO2JyZWFrfXJldHVybiBudWxsIT1hJiZjLnB1c2goe25hbWU6bCx2YWx1ZTphfSksY31hVC5wcm90b3R5cGU9Z2FlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YVQsb246ZnVuY3Rpb24oYyxsKXt2YXIg''@;'; put 'put ''aCxhPXRoaXMuXyxkPWZ1bmN0aW9uIFFxZShjLGwpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGQ9IiIsaD1hLmluZGV4T2YoIi4iKTtpZihoPj0wJiYoZD1hLnNsaWNlKGgrMSksYT1hLnNsaWNlKDAsaCkpLGEmJiFsLmhhc093blByb3BlcnR5''@;'; put 'put ''KGEpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpkfX0pfShjKyIiLGEpLGY9LTEsXz1kLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''aW52YWxpZCBjYWxsYmFjazogIitsKTtmb3IoOysrZjxfOylpZihoPShjPWRbZl0pLnR5cGUpYVtoXT1tYWUoYVtoXSxjLm5hbWUsbCk7ZWxzZSBpZihudWxsPT1sKWZvcihoIGluIGEpYVtoXT1tYWUoYVtoXSxjLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2Y8XzspaWYoKGg9KGM9''@;'; put 'put ''ZFtmXSkudHlwZSkmJihoPWVLZShhW2hdLGMubmFtZSkpKXJldHVybiBofSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGM9e30sbD10aGlzLl87Zm9yKHZhciBhIGluIGwpY1thXT1sW2FdLnNsaWNlKCk7cmV0dXJuIG5ldyBhVChjKX0sY2FsbDpmdW5jdGlvbihjLGwpe2lmKChoPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgtMik+MClmb3IodmFyIGgsZixhPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZClhW2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKGQ9MCxoPShmPXRoaXMuX1tjXSkubGVuZ3Ro''@;'; put 'put ''O2Q8aDsrK2QpZltkXS52YWx1ZS5hcHBseShsLGEpfSxhcHBseTpmdW5jdGlvbihjLGwsYSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShjKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitjKTtmb3IodmFyIGQ9dGhpcy5fW2NdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpZFto''@;'; put 'put ''XS52YWx1ZS5hcHBseShsLGEpfX07Y29uc3QgeFU9Z2FlO3ZhciBsVCxkdyxZNz0wLGN3PTAsdXc9MCx2YWU9MWUzLGNUPTAsV2c9MCx1VD0wLGh3PSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLF9hZT0ib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihjKXtzZXRUaW1lb3V0KGMsMTcpfTtmdW5jdGlvbiBFVSgpe3JldHVybiBXZ3x8KF9hZSh0S2UpLFdnPWh3Lm5vdygpK3VUKX1m''@;'; put 'put ''dW5jdGlvbiB0S2UoKXtXZz0wfWZ1bmN0aW9uIGRUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBiYWUoYyxsLGEpe3ZhciBkPW5ldyBkVDtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxkfWZ1bmN0aW9uIHlhZSgpe1dnPShjVD1ody5ub3coKSkrdVQs''@;'; put 'put ''WTc9Y3c9MDt0cnl7IWZ1bmN0aW9uIG5LZSgpe0VVKCksKytZNztmb3IodmFyIGwsYz1sVDtjOykobD1XZy1jLl90aW1lKT49MCYmYy5fY2FsbC5jYWxsKHZvaWQgMCxsKSxjPWMuX25leHQ7LS1ZN30oKX1maW5hbGx5e1k3PTAsZnVuY3Rpb24gaUtlKCl7Zm9yKHZhciBjLGEsbD1sVCxkPTEv''@;'; put 'put ''MDtsOylsLl9jYWxsPyhkPmwuX3RpbWUmJihkPWwuX3RpbWUpLGM9bCxsPWwuX25leHQpOihhPWwuX25leHQsbC5fbmV4dD1udWxsLGw9Yz9jLl9uZXh0PWE6bFQ9YSk7ZHc9YyxrVShkKX0oKSxXZz0wfX1mdW5jdGlvbiByS2UoKXt2YXIgYz1ody5ub3coKSxsPWMtY1Q7bD52YWUmJih1VC09''@;'; put 'put ''bCxjVD1jKX1mdW5jdGlvbiBrVShjKXtZN3x8KGN3JiYoY3c9Y2xlYXJUaW1lb3V0KGN3KSksYy1XZz4yND8oYzwxLzAmJihjdz1zZXRUaW1lb3V0KHlhZSxjLWh3Lm5vdygpLXVUKSksdXcmJih1dz1jbGVhckludGVydmFsKHV3KSkpOih1d3x8KGNUPWh3Lm5vdygpLHV3PXNldEludGVydmFs''@;'; put 'put ''KHJLZSx2YWUpKSxZNz0xLF9hZSh5YWUpKSl9ZnVuY3Rpb24gaFQoYyxsLGEpe3ZhciBkPW5ldyBkVDtyZXR1cm4gZC5yZXN0YXJ0KGg9PntkLnN0b3AoKSxjKGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9ZFQucHJvdG90eXBlPWJhZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRULHJlc3Rh''@;'; put 'put ''cnQ6ZnVuY3Rpb24oYyxsLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7YT0obnVsbD09YT9FVSgpOithKSsobnVsbD09bD8wOitsKSwhdGhpcy5fbmV4dCYmZHchPT10aGlzJiYoZHc/ZHcuX25leHQ9''@;'; put 'put ''dGhpczpsVD10aGlzLGR3PXRoaXMpLHRoaXMuX2NhbGw9Yyx0aGlzLl90aW1lPWEsa1UoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsa1UoKSl9fTt2YXIgb0tlPXhVKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVw''@;'; put 'put ''dCIpLHNLZT1bXSx3YWU9MCxUVT0yLGZUPTMsRFU9NSxwVD02O2Z1bmN0aW9uIGdUKGMsbCxhLGQsaCxmKXt2YXIgXz1jLl9fdHJhbnNpdGlvbjtpZihfKXtpZihhIGluIF8pcmV0dXJufWVsc2UgYy5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uIGFLZShjLGwsYSl7dmFyIGgsZD1jLl9fdHJh''@;'; put 'put ''bnNpdGlvbjtmdW5jdGlvbiBfKGllKXt2YXIgZ2Usd2UsRWUsWmU7aWYoMSE9PWEuc3RhdGUpcmV0dXJuIFcoKTtmb3IoZ2UgaW4gZClpZigoWmU9ZFtnZV0pLm5hbWU9PT1hLm5hbWUpe2lmKFplLnN0YXRlPT09ZlQpcmV0dXJuIGhUKF8pOzQ9PT1aZS5zdGF0ZT8oWmUuc3RhdGU9cFQsWmUu''@;'; put 'put ''dGltZXIuc3RvcCgpLFplLm9uLmNhbGwoImludGVycnVwdCIsYyxjLl9fZGF0YV9fLFplLmluZGV4LFplLmdyb3VwKSxkZWxldGUgZFtnZV0pOitnZTxsJiYoWmUuc3RhdGU9cFQsWmUudGltZXIuc3RvcCgpLFplLm9uLmNhbGwoImNhbmNlbCIsYyxjLl9fZGF0YV9fLFplLmluZGV4LFplLmdy''@;'; put 'put ''b3VwKSxkZWxldGUgZFtnZV0pfWlmKGhUKGZ1bmN0aW9uKCl7YS5zdGF0ZT09PWZUJiYoYS5zdGF0ZT00LGEudGltZXIucmVzdGFydChULGEuZGVsYXksYS50aW1lKSxUKGllKSl9KSxhLnN0YXRlPVRVLGEub24uY2FsbCgic3RhcnQiLGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApLGEu''@;'; put 'put ''c3RhdGU9PT1UVSl7Zm9yKGEuc3RhdGU9ZlQsaD1uZXcgQXJyYXkoRWU9YS50d2Vlbi5sZW5ndGgpLGdlPTAsd2U9LTE7Z2U8RWU7KytnZSkoWmU9YS50d2VlbltnZV0udmFsdWUuY2FsbChjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSkmJihoWysrd2VdPVplKTtoLmxlbmd0aD13ZSsx''@;'; put 'put ''fX1mdW5jdGlvbiBUKGllKXtmb3IodmFyIGdlPWllPGEuZHVyYXRpb24/YS5lYXNlLmNhbGwobnVsbCxpZS9hLmR1cmF0aW9uKTooYS50aW1lci5yZXN0YXJ0KFcpLGEuc3RhdGU9RFUsMSksd2U9LTEsRWU9aC5sZW5ndGg7Kyt3ZTxFZTspaFt3ZV0uY2FsbChjLGdlKTthLnN0YXRlPT09RFUm''@;'; put 'put ''JihhLm9uLmNhbGwoImVuZCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksVygpKX1mdW5jdGlvbiBXKCl7Zm9yKHZhciBpZSBpbiBhLnN0YXRlPXBULGEudGltZXIuc3RvcCgpLGRlbGV0ZSBkW2xdLGQpcmV0dXJuO2RlbGV0ZSBjLl9fdHJhbnNpdGlvbn1kW2xdPWEsYS50aW1lcj1i''@;'; put 'put ''YWUoZnVuY3Rpb24gZihpZSl7YS5zdGF0ZT0xLGEudGltZXIucmVzdGFydChfLGEuZGVsYXksYS50aW1lKSxhLmRlbGF5PD1pZSYmXyhpZS1hLmRlbGF5KX0sMCxhLnRpbWUpfShjLGEse25hbWU6bCxpbmRleDpkLGdyb3VwOmgsb246b0tlLHR3ZWVuOnNLZSx0aW1lOmYudGltZSxkZWxheTpm''@;'; put 'put ''LmRlbGF5LGR1cmF0aW9uOmYuZHVyYXRpb24sZWFzZTpmLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTp3YWV9KX1mdW5jdGlvbiBJVShjLGwpe3ZhciBhPVMyKGMsbCk7aWYoYS5zdGF0ZT53YWUpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gYX1m''@;'; put 'put ''dW5jdGlvbiBUaChjLGwpe3ZhciBhPVMyKGMsbCk7aWYoYS5zdGF0ZT5mVCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gYX1mdW5jdGlvbiBTMihjLGwpe3ZhciBhPWMuX190cmFuc2l0aW9uO2lmKCFhfHwhKGE9YVtsXSkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBhfWZ1bmN0aW9uIG1UKGMsbCl7dmFyIGQsaCxfLGE9Yy5fX3RyYW5zaXRpb24sZj0hMDtpZihhKXtmb3IoXyBpbiBsPW51bGw9PWw/bnVsbDpsKyIiLGEpKGQ9YVtfXSkubmFtZT09PWw/KGg9ZC5zdGF0ZT5UVSYmZC5zdGF0ZTxE''@;'; put 'put ''VSxkLnN0YXRlPXBULGQudGltZXIuc3RvcCgpLGQub24uY2FsbChoPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGMsYy5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBhW19dKTpmPSExO2YmJmRlbGV0ZSBjLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gRGgoYyxsKXtyZXR1cm4gYz0rYyxs''@;'; put 'put ''PStsLGZ1bmN0aW9uKGEpe3JldHVybiBjKigxLWEpK2wqYX19dmFyIHZULFNhZT0xODAvTWF0aC5QSSxMVT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBNYWUoYyxsLGEsZCxoLGYpe3ZhciBfLFQsVztyZXR1''@;'; put 'put ''cm4oXz1NYXRoLnNxcnQoYypjK2wqbCkpJiYoYy89XyxsLz1fKSwoVz1jKmErbCpkKSYmKGEtPWMqVyxkLT1sKlcpLChUPU1hdGguc3FydChhKmErZCpkKSkmJihhLz1ULGQvPVQsVy89VCksYypkPGwqYSYmKGM9LWMsbD0tbCxXPS1XLF89LV8pLHt0cmFuc2xhdGVYOmgsdHJhbnNsYXRlWTpm''@;'; put 'put ''LHJvdGF0ZTpNYXRoLmF0YW4yKGwsYykqU2FlLHNrZXdYOk1hdGguYXRhbihXKSpTYWUsc2NhbGVYOl8sc2NhbGVZOlR9fWZ1bmN0aW9uIHhhZShjLGwsYSxkKXtmdW5jdGlvbiBoKGllKXtyZXR1cm4gaWUubGVuZ3RoP2llLnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oaWUsZ2Upe3Zh''@;'; put 'put ''ciB3ZT1bXSxFZT1bXTtyZXR1cm4gaWU9YyhpZSksZ2U9YyhnZSksZnVuY3Rpb24gZihpZSxnZSx3ZSxFZSxaZSxvdCl7aWYoaWUhPT13ZXx8Z2UhPT1FZSl7dmFyIGV0PVplLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbCxudWxsLGEpO290LnB1c2goe2k6ZXQtNCx4OkRoKGllLHdlKX0se2k6''@;'; put 'put ''ZXQtMix4OkRoKGdlLEVlKX0pfWVsc2Uod2V8fEVlKSYmWmUucHVzaCgidHJhbnNsYXRlKCIrd2UrbCtFZSthKX0oaWUudHJhbnNsYXRlWCxpZS50cmFuc2xhdGVZLGdlLnRyYW5zbGF0ZVgsZ2UudHJhbnNsYXRlWSx3ZSxFZSksZnVuY3Rpb24gXyhpZSxnZSx3ZSxFZSl7aWUhPT1nZT8oaWUt''@;'; put 'put ''Z2U+MTgwP2dlKz0zNjA6Z2UtaWU+MTgwJiYoaWUrPTM2MCksRWUucHVzaCh7aTp3ZS5wdXNoKGgod2UpKyJyb3RhdGUoIixudWxsLGQpLTIseDpEaChpZSxnZSl9KSk6Z2UmJndlLnB1c2goaCh3ZSkrInJvdGF0ZSgiK2dlK2QpfShpZS5yb3RhdGUsZ2Uucm90YXRlLHdlLEVlKSxmdW5jdGlv''@;'; put 'put ''biBUKGllLGdlLHdlLEVlKXtpZSE9PWdlP0VlLnB1c2goe2k6d2UucHVzaChoKHdlKSsic2tld1goIixudWxsLGQpLTIseDpEaChpZSxnZSl9KTpnZSYmd2UucHVzaChoKHdlKSsic2tld1goIitnZStkKX0oaWUuc2tld1gsZ2Uuc2tld1gsd2UsRWUpLGZ1bmN0aW9uIFcoaWUsZ2Usd2UsRWUs''@;'; put 'put ''WmUsb3Qpe2lmKGllIT09d2V8fGdlIT09RWUpe3ZhciBldD1aZS5wdXNoKGgoWmUpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtvdC5wdXNoKHtpOmV0LTQseDpEaChpZSx3ZSl9LHtpOmV0LTIseDpEaChnZSxFZSl9KX1lbHNlKDEhPT13ZXx8MSE9PUVlKSYmWmUucHVzaChoKFplKSsi''@;'; put 'put ''c2NhbGUoIit3ZSsiLCIrRWUrIikiKX0oaWUuc2NhbGVYLGllLnNjYWxlWSxnZS5zY2FsZVgsZ2Uuc2NhbGVZLHdlLEVlKSxpZT1nZT1udWxsLGZ1bmN0aW9uKFplKXtmb3IodmFyIHl0LG90PS0xLGV0PUVlLmxlbmd0aDsrK290PGV0Oyl3ZVsoeXQ9RWVbb3RdKS5pXT15dC54KFplKTtyZXR1''@;'; put 'put ''cm4gd2Uuam9pbigiIil9fX12YXIgZEtlPXhhZShmdW5jdGlvbiBjS2UoYyl7Y29uc3QgbD1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShjKyIiKTtyZXR1cm4gbC5pc0lkZW50aXR5P0xVOk1hZShsLmEsbC5iLGwuYyxsLmQsbC5l''@;'; put 'put ''LGwuZil9LCJweCwgIiwicHgpIiwiZGVnKSIpLEVhZT14YWUoZnVuY3Rpb24gdUtlKGMpe3JldHVybiBudWxsIT1jJiYodlR8fCh2VD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx2VC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIs''@;'; put 'put ''YyksYz12VC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9NYWUoKGM9Yy5tYXRyaXgpLmEsYy5iLGMuYyxjLmQsYy5lLGMuZik6TFV9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gaEtlKGMsbCl7dmFyIGEsZDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD1UaCh0aGlzLGMpLGY9aC50''@;'; put 'put ''d2VlbjtpZihmIT09YSlmb3IodmFyIF89MCxUPShkPWE9ZikubGVuZ3RoO188VDsrK18paWYoZFtfXS5uYW1lPT09bCl7KGQ9ZC5zbGljZSgpKS5zcGxpY2UoXywxKTticmVha31oLnR3ZWVuPWR9fWZ1bmN0aW9uIGZLZShjLGwsYSl7dmFyIGQsaDtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9VGgodGhpcyxjKSxfPWYudHdlZW47aWYoXyE9PWQpe2g9KGQ9Xykuc2xpY2UoKTtmb3IodmFyIFQ9e25hbWU6bCx2YWx1ZTphfSxXPTAsaWU9aC5sZW5ndGg7VzxpZTsrK1cpaWYoaFtXXS5uYW1lPT09bCl7aFtXXT1UO2Jy''@;'; put 'put ''ZWFrfVc9PT1pZSYmaC5wdXNoKFQpfWYudHdlZW49aH19ZnVuY3Rpb24gUlUoYyxsLGEpe3ZhciBkPWMuX2lkO3JldHVybiBjLmVhY2goZnVuY3Rpb24oKXt2YXIgaD1UaCh0aGlzLGQpOyhoLnZhbHVlfHwoaC52YWx1ZT17fSkpW2xdPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rp''@;'; put 'put ''b24oaCl7cmV0dXJuIFMyKGgsZCkudmFsdWVbbF19fWZ1bmN0aW9uIE9VKGMsbCxhKXtjLnByb3RvdHlwZT1sLnByb3RvdHlwZT1hLGEuY29uc3RydWN0b3I9Y31mdW5jdGlvbiBrYWUoYyxsKXt2YXIgYT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTtmb3IodmFyIGQgaW4gbClhW2RdPWxb''@;'; put 'put ''ZF07cmV0dXJuIGF9ZnVuY3Rpb24gZncoKXt9dmFyIF9UPTEvLjcsVzc9IlxccyooWystXT9cXGQrKVxccyoiLGd3PSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixJaD0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQr''@;'; put 'put ''KT8pJVxccyoiLGdLZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxtS2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7Vzd9LCR7Vzd9LCR7Vzd9XFwpJGApLHZLZT1uZXcgUmVnRXhwKGBecmdiXFwoJHtJaH0sJHtJaH0sJHtJaH1cXCkkYCksX0tlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtXN30sJHtXN30s''@;'; put 'put ''JHtXN30sJHtnd31cXCkkYCksYktlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtJaH0sJHtJaH0sJHtJaH0sJHtnd31cXCkkYCkseUtlPW5ldyBSZWdFeHAoYF5oc2xcXCgke2d3fSwke0lofSwke0lofVxcKSRgKSx3S2U9bmV3IFJlZ0V4cChgXmhzbGFcXCgke2d3fSwke0lofSwke0lofSwke2d3''@;'; put 'put ''fVxcKSRgKSxBYWU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1''@;'; put 'put ''ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3''@;'; put 'put ''NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2Vu''@;'; put 'put ''dGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3Jh''@;'; put 'put ''eTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJp''@;'; put 'put ''Y2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2''@;'; put 'put ''OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVz''@;'; put 'put ''aDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdy''@;'; put 'put ''ZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0''@;'; put 'put ''c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3Jj''@;'; put 'put ''aGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1''@;'; put 'put ''ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFu''@;'; put 'put ''Z2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEz''@;'; put 'put ''NDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2Fs''@;'; put 'put ''bW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3''@;'; put 'put ''Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0''@;'; put 'put ''ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gVGFlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gRGFlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rp''@;'; put 'put ''b24gR2coYyl7dmFyIGwsYTtyZXR1cm4gYz0oYysiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGw9Z0tlLmV4ZWMoYykpPyhhPWxbMV0ubGVuZ3RoLGw9cGFyc2VJbnQobFsxXSwxNiksNj09PWE/SWFlKGwpOjM9PT1hP25ldyBIMChsPj44JjE1fGw+PjQmMjQwLGw+PjQmMTV8MjQwJmwsKDE1''@;'; put 'put ''JmwpPDw0fDE1JmwsMSk6OD09PWE/YlQobD4+MjQmMjU1LGw+PjE2JjI1NSxsPj44JjI1NSwoMjU1JmwpLzI1NSk6ND09PWE/YlQobD4+MTImMTV8bD4+OCYyNDAsbD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgoMTUmbCk8PDR8MTUmbCkvMjU1KTpudWxsKToobD1tS2UuZXhlYyhj''@;'; put 'put ''KSk/bmV3IEgwKGxbMV0sbFsyXSxsWzNdLDEpOihsPXZLZS5leGVjKGMpKT9uZXcgSDAoMjU1KmxbMV0vMTAwLDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAsMSk6KGw9X0tlLmV4ZWMoYykpP2JUKGxbMV0sbFsyXSxsWzNdLGxbNF0pOihsPWJLZS5leGVjKGMpKT9iVCgyNTUqbFsxXS8xMDAs''@;'; put 'put ''MjU1KmxbMl0vMTAwLDI1NSpsWzNdLzEwMCxsWzRdKToobD15S2UuZXhlYyhjKSk/T2FlKGxbMV0sbFsyXS8xMDAsbFszXS8xMDAsMSk6KGw9d0tlLmV4ZWMoYykpP09hZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLGxbNF0pOkFhZS5oYXNPd25Qcm9wZXJ0eShjKT9JYWUoQWFlW2NdKToidHJh''@;'; put 'put ''bnNwYXJlbnQiPT09Yz9uZXcgSDAoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBJYWUoYyl7cmV0dXJuIG5ldyBIMChjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMsMSl9ZnVuY3Rpb24gYlQoYyxsLGEsZCl7cmV0dXJuIGQ8PTAmJihjPWw9YT1OYU4pLG5ldyBIMChjLGwsYSxkKX1mdW5j''@;'; put 'put ''dGlvbiB5VChjLGwsYSxkKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24gTUtlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgZnd8fChjPUdnKGMpKSxjP25ldyBIMCgoYz1jLnJnYigpKS5yLGMuZyxjLmIsYy5vcGFjaXR5KTpuZXcgSDB9KGMpOm5ldyBIMChjLGwsYSxkPz8x''@;'; put 'put ''KX1mdW5jdGlvbiBIMChjLGwsYSxkKXt0aGlzLnI9K2MsdGhpcy5nPStsLHRoaXMuYj0rYSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gTGFlKCl7cmV0dXJuYCMke3FnKHRoaXMucil9JHtxZyh0aGlzLmcpfSR7cWcodGhpcy5iKX1gfWZ1bmN0aW9uIFJhZSgpe2NvbnN0IGM9d1QodGhpcy5v''@;'; put 'put ''cGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8icmdiKCI6InJnYmEoIn0keyRnKHRoaXMucil9LCAkeyRnKHRoaXMuZyl9LCAkeyRnKHRoaXMuYil9JHsxPT09Yz8iKSI6YCwgJHtjfSlgfWB9ZnVuY3Rpb24gd1QoYyl7cmV0dXJuIGlzTmFOKGMpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGMpKX1m''@;'; put 'put ''dW5jdGlvbiAkZyhjKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChjKXx8MCkpfWZ1bmN0aW9uIHFnKGMpe3JldHVybigoYz0kZyhjKSk8MTY/IjAiOiIiKStjLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBPYWUoYyxsLGEsZCl7cmV0dXJuIGQ8PTA/Yz1sPWE9TmFO''@;'; put 'put ''OmE8PTB8fGE+PTE/Yz1sPU5hTjpsPD0wJiYoYz1OYU4pLG5ldyBNMihjLGwsYSxkKX1mdW5jdGlvbiBQYWUoYyl7aWYoYyBpbnN0YW5jZW9mIE0yKXJldHVybiBuZXcgTTIoYy5oLGMucyxjLmwsYy5vcGFjaXR5KTtpZihjIGluc3RhbmNlb2YgZnd8fChjPUdnKGMpKSwhYylyZXR1cm4gbmV3''@;'; put 'put ''IE0yO2lmKGMgaW5zdGFuY2VvZiBNMilyZXR1cm4gYzt2YXIgbD0oYz1jLnJnYigpKS5yLzI1NSxhPWMuZy8yNTUsZD1jLmIvMjU1LGg9TWF0aC5taW4obCxhLGQpLGY9TWF0aC5tYXgobCxhLGQpLF89TmFOLFQ9Zi1oLFc9KGYraCkvMjtyZXR1cm4gVD8oXz1sPT09Zj8oYS1kKS9UKzYqKGE8''@;'; put 'put ''ZCk6YT09PWY/KGQtbCkvVCsyOihsLWEpL1QrNCxULz1XPC41P2YraDoyLWYtaCxfKj02MCk6VD1XPjAmJlc8MT8wOl8sbmV3IE0yKF8sVCxXLGMub3BhY2l0eSl9ZnVuY3Rpb24gTTIoYyxsLGEsZCl7dGhpcy5oPStjLHRoaXMucz0rbCx0aGlzLmw9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0''@;'; put 'put ''aW9uIEZhZShjKXtyZXR1cm4oYz0oY3x8MCklMzYwKTwwP2MrMzYwOmN9ZnVuY3Rpb24gQ1QoYyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSxjfHwwKSl9ZnVuY3Rpb24gUFUoYyxsLGEpe3JldHVybiAyNTUqKGM8NjA/bCsoYS1sKSpjLzYwOmM8MTgwP2E6YzwyNDA/bCsoYS1sKSoo''@;'; put 'put ''MjQwLWMpLzYwOmwpfWZ1bmN0aW9uIEhhZShjLGwsYSxkLGgpe3ZhciBmPWMqYyxfPWYqYztyZXR1cm4oKDEtMypjKzMqZi1fKSpsKyg0LTYqZiszKl8pKmErKDErMypjKzMqZi0zKl8pKmQrXypoKS82fU9VKGZ3LEdnLHtjb3B5KGMpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNv''@;'; put 'put ''bnN0cnVjdG9yLHRoaXMsYyl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlRhZSxmb3JtYXRIZXg6VGFlLGZvcm1hdEhleDg6ZnVuY3Rpb24gQ0tlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24g''@;'; put 'put ''U0tlKCl7cmV0dXJuIFBhZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOkRhZSx0b1N0cmluZzpEYWV9KSxPVShIMCx5VCxrYWUoZncse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/X1Q6TWF0aC5wb3coX1QsYyksbmV3IEgwKHRoaXMucipjLHRoaXMuZypjLHRoaXMuYipjLHRo''@;'; put 'put ''aXMub3BhY2l0eSl9LGRhcmtlcihjKXtyZXR1cm4gYz1udWxsPT1jPy43Ok1hdGgucG93KC43LGMpLG5ldyBIMCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIqYyx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IEgwKCRnKHRoaXMuciksJGcodGhp''@;'; put 'put ''cy5nKSwkZyh0aGlzLmIpLHdUKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5''@;'; put 'put ''PD0xfSxoZXg6TGFlLGZvcm1hdEhleDpMYWUsZm9ybWF0SGV4ODpmdW5jdGlvbiB4S2UoKXtyZXR1cm5gIyR7cWcodGhpcy5yKX0ke3FnKHRoaXMuZyl9JHtxZyh0aGlzLmIpfSR7cWcoMjU1Kihpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSl9YH0sZm9ybWF0UmdiOlJhZSx0''@;'; put 'put ''b1N0cmluZzpSYWV9KSksT1UoTTIsZnVuY3Rpb24gRUtlKGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9QYWUoYyk6bmV3IE0yKGMsbCxhLGQ/PzEpfSxrYWUoZncse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/X1Q6TWF0aC5wb3coX1QsYyksbmV3IE0yKHRoaXMu''@;'; put 'put ''aCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IE0yKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGM9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxsPWlz''@;'; put 'put ''TmFOKGMpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGE9dGhpcy5sLGQ9YSsoYTwuNT9hOjEtYSkqbCxoPTIqYS1kO3JldHVybiBuZXcgSDAoUFUoYz49MjQwP2MtMjQwOmMrMTIwLGgsZCksUFUoYyxoLGQpLFBVKGM8MTIwP2MrMjQwOmMtMTIwLGgsZCksdGhpcy5vcGFjaXR5KX0sY2xhbXAo''@;'; put 'put ''KXtyZXR1cm4gbmV3IE0yKEZhZSh0aGlzLmgpLENUKHRoaXMucyksQ1QodGhpcy5sKSx3VCh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5''@;'; put 'put ''JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGM9d1QodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8iaHNsKCI6ImhzbGEoIn0ke0ZhZSh0aGlzLmgpfSwgJHsxMDAqQ1QodGhpcy5zKX0lLCAkezEwMCpDVCh0aGlzLmwpfSUkezE9PT1jPyIpIjpgLCAke2N9KWB9YH19''@;'; put 'put ''KSk7Y29uc3QgRlU9Yz0+KCk9PmM7ZnVuY3Rpb24gVmFlKGMsbCl7dmFyIGE9bC1jO3JldHVybiBhP2Z1bmN0aW9uIE5hZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYythKmx9fShjLGEpOkZVKGlzTmFOKGMpP2w6Yyl9Y29uc3QgU1Q9ZnVuY3Rpb24gYyhsKXt2YXIgYT1mdW5j''@;'; put 'put ''dGlvbiBES2UoYyl7cmV0dXJuIDE9PShjPStjKT9WYWU6ZnVuY3Rpb24obCxhKXtyZXR1cm4gYS1sP2Z1bmN0aW9uIFRLZShjLGwsYSl7cmV0dXJuIGM9TWF0aC5wb3coYyxhKSxsPU1hdGgucG93KGwsYSktYyxhPTEvYSxmdW5jdGlvbihkKXtyZXR1cm4gTWF0aC5wb3coYytkKmwsYSl9fShs''@;'; put 'put ''LGEsYyk6RlUoaXNOYU4obCk/YTpsKX19KGwpO2Z1bmN0aW9uIGQoaCxmKXt2YXIgXz1hKChoPXlUKGgpKS5yLChmPXlUKGYpKS5yKSxUPWEoaC5nLGYuZyksVz1hKGguYixmLmIpLGllPVZhZShoLm9wYWNpdHksZi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiBoLnI9Xyhn''@;'; put 'put ''ZSksaC5nPVQoZ2UpLGguYj1XKGdlKSxoLm9wYWNpdHk9aWUoZ2UpLGgrIiJ9fXJldHVybiBkLmdhbW1hPWMsZH0oMSk7ZnVuY3Rpb24gQmFlKGMpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgXyxULGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXko''@;'; put 'put ''YSk7Zm9yKF89MDtfPGE7KytfKVQ9eVQobFtfXSksZFtfXT1ULnJ8fDAsaFtfXT1ULmd8fDAsZltfXT1ULmJ8fDA7cmV0dXJuIGQ9YyhkKSxoPWMoaCksZj1jKGYpLFQub3BhY2l0eT0xLGZ1bmN0aW9uKFcpe3JldHVybiBULnI9ZChXKSxULmc9aChXKSxULmI9ZihXKSxUKyIifX19QmFlKGZ1''@;'; put 'put ''bmN0aW9uIGtLZShjKXt2YXIgbD1jLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1hPD0wP2E9MDphPj0xPyhhPTEsbC0xKTpNYXRoLmZsb29yKGEqbCksaD1jW2RdLGY9Y1tkKzFdO3JldHVybiBIYWUoKGEtZC9sKSpsLGQ+MD9jW2QtMV06MipoLWYsaCxmLGQ8bC0xP2NbZCsy''@;'; put 'put ''XToyKmYtaCl9fSksQmFlKGZ1bmN0aW9uIEFLZShjKXt2YXIgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9TWF0aC5mbG9vcigoKGElPTEpPDA/KythOmEpKmwpO3JldHVybiBIYWUoKGEtZC9sKSpsLGNbKGQrbC0xKSVsXSxjW2QlbF0sY1soZCsxKSVsXSxjWyhkKzIpJWxd''@;'; put 'put ''KX19KTt2YXIgSFU9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLE5VPW5ldyBSZWdFeHAoSFUuc291cmNlLCJnIik7ZnVuY3Rpb24gamFlKGMsbCl7dmFyIGQsaCxmLGE9SFUubGFzdEluZGV4PU5VLmxhc3RJbmRleD0wLF89LTEsVD1bXSxXPVtdO2Zvcihj''@;'; put 'put ''Kz0iIixsKz0iIjsoZD1IVS5leGVjKGMpKSYmKGg9TlUuZXhlYyhsKSk7KShmPWguaW5kZXgpPmEmJihmPWwuc2xpY2UoYSxmKSxUW19dP1RbX10rPWY6VFsrK19dPWYpLChkPWRbMF0pPT09KGg9aFswXSk/VFtfXT9UW19dKz1oOlRbKytfXT1oOihUWysrX109bnVsbCxXLnB1c2goe2k6Xyx4''@;'; put 'put ''OkRoKGQsaCl9KSksYT1OVS5sYXN0SW5kZXg7cmV0dXJuIGE8bC5sZW5ndGgmJihmPWwuc2xpY2UoYSksVFtfXT9UW19dKz1mOlRbKytfXT1mKSxULmxlbmd0aDwyP1dbMF0/ZnVuY3Rpb24gTEtlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKSsiIn19KFdbMF0ueCk6ZnVuY3Rp''@;'; put 'put ''b24gSUtlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0obCk6KGw9Vy5sZW5ndGgsZnVuY3Rpb24oaWUpe2Zvcih2YXIgd2UsZ2U9MDtnZTxsOysrZ2UpVFsod2U9V1tnZV0pLmldPXdlLngoaWUpO3JldHVybiBULmpvaW4oIiIpfSl9ZnVuY3Rpb24gemFlKGMsbCl7dmFyIGE7cmV0''@;'; put 'put ''dXJuKCJudW1iZXIiPT10eXBlb2YgbD9EaDpsIGluc3RhbmNlb2YgR2c/U1Q6KGE9R2cobCkpPyhsPWEsU1QpOmphZSkoYyxsKX1mdW5jdGlvbiBSS2UoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIE9LZShjKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''KXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIFBLZShjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89dGhpcy5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIF89PT1oP251bGw6Xz09PWQ/ZjpmPWwoZD1fLGEpfX1mdW5j''@;'; put 'put ''dGlvbiBGS2UoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBfPXRoaXMuZ2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTtyZXR1cm4gXz09PWg/bnVsbDpfPT09ZD9mOmY9bChkPV8sYSl9fWZ1bmN0aW9uIEhLZShjLGwsYSl7dmFyIGQsaCxmO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbigpe3ZhciBfLFcsVD1hKHRoaXMpO3JldHVybiBudWxsPT1UP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6KF89dGhpcy5nZXRBdHRyaWJ1dGUoYykpPT09KFc9VCsiIik/bnVsbDpfPT09ZCYmVz09PWg/ZjooaD1XLGY9bChkPV8sVCkpfX1mdW5jdGlvbiBOS2UoYyxs''@;'; put 'put ''LGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXyxXLFQ9YSh0aGlzKTtyZXR1cm4gbnVsbD09VD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTooXz10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCkpPT09KFc9VCsiIik/bnVs''@;'; put 'put ''bDpfPT09ZCYmVz09PWg/ZjooaD1XLGY9bChkPV8sVCkpfX1mdW5jdGlvbiB6S2UoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBqS2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7''@;'; put 'put ''dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbC5jYWxsKHRoaXMsYSkpfX0oYyxmKSksYX1yZXR1cm4gaC5fdmFsdWU9bCxofWZ1bmN0aW9uIFVLZShjLGwpe3ZhciBhLGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmIT09ZCYm''@;'; put 'put ''KGE9KGQ9ZikmJmZ1bmN0aW9uIEJLZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBZS2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtJVSh0aGlzLGMpLmRlbGF5''@;'; put 'put ''PStsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gV0tlKGMsbCl7cmV0dXJuIGw9K2wsZnVuY3Rpb24oKXtJVSh0aGlzLGMpLmRlbGF5PWx9fWZ1bmN0aW9uICRLZShjLGwpe3JldHVybiBmdW5jdGlvbigpe1RoKHRoaXMsYykuZHVyYXRpb249K2wuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpfX1mdW5jdGlvbiBxS2UoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe1RoKHRoaXMsYykuZHVyYXRpb249bH19dmFyIHVYZT1ZZy5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gVWFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9''@;'; put 'put ''fXZhciBBWGU9MDtmdW5jdGlvbiBMaChjLGwsYSxkKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWwsdGhpcy5fbmFtZT1hLHRoaXMuX2lkPWR9ZnVuY3Rpb24gVlUoYyl7cmV0dXJuIFlnKCkudHJhbnNpdGlvbihjKX1mdW5jdGlvbiBaYWUoKXtyZXR1cm4rK0FYZX12YXIgcjM9WWcu''@;'; put 'put ''cHJvdG90eXBlO0xoLnByb3RvdHlwZT1WVS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkxoLHNlbGVjdDpmdW5jdGlvbiBsWGUoYyl7dmFyIGw9dGhpcy5fbmFtZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz15VShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVu''@;'; put 'put ''Z3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7KytfKWZvcih2YXIgZ2Usd2UsVD1kW19dLFc9VC5sZW5ndGgsaWU9ZltfXT1uZXcgQXJyYXkoVyksRWU9MDtFZTxXOysrRWUpKGdlPVRbRWVdKSYmKHdlPWMuY2FsbChnZSxnZS5fX2RhdGFfXyxFZSxUKSkmJigiX19kYXRhX18iaW4gZ2UmJih3''@;'; put 'put ''ZS5fX2RhdGFfXz1nZS5fX2RhdGFfXyksaWVbRWVdPXdlLGdUKGllW0VlXSxsLGEsRWUsaWUsUzIoZ2UsYSkpKTtyZXR1cm4gbmV3IExoKGYsdGhpcy5fcGFyZW50cyxsLGEpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gY1hlKGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgYyYmKGM9bmFlKGMpKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj1bXSxfPVtdLFQ9MDtUPGg7KytUKWZvcih2YXIgZ2UsVz1kW1RdLGllPVcubGVuZ3RoLHdlPTA7d2U8aWU7Kyt3ZSlpZihnZT1XW3dlXSl7Zm9yKHZhciBaZSxFZT1jLmNhbGwoZ2UsZ2Uu''@;'; put 'put ''X19kYXRhX18sd2UsVyksb3Q9UzIoZ2UsYSksZXQ9MCx5dD1FZS5sZW5ndGg7ZXQ8eXQ7KytldCkoWmU9RWVbZXRdKSYmZ1QoWmUsbCxhLGV0LEVlLG90KTtmLnB1c2goRWUpLF8ucHVzaChnZSl9cmV0dXJuIG5ldyBMaChmLF8sbCxhKX0sc2VsZWN0Q2hpbGQ6cjMuc2VsZWN0Q2hpbGQsc2Vs''@;'; put 'put ''ZWN0Q2hpbGRyZW46cjMuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uIHRYZShjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9cmFlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBXLGY9bFtoXSxf''@;'; put 'put ''PWYubGVuZ3RoLFQ9ZFtoXT1bXSxpZT0wO2llPF87KytpZSkoVz1mW2llXSkmJmMuY2FsbChXLFcuX19kYXRhX18saWUsZikmJlQucHVzaChXKTtyZXR1cm4gbmV3IExoKGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gblhlKGMpe2lmKGMuX2lk''@;'; put 'put ''IT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1jLl9ncm91cHMsZD1sLmxlbmd0aCxmPU1hdGgubWluKGQsYS5sZW5ndGgpLF89bmV3IEFycmF5KGQpLFQ9MDtUPGY7KytUKWZvcih2YXIgRWUsVz1sW1RdLGllPWFbVF0sZ2U9Vy5sZW5ndGgsd2U9''@;'; put 'put ''X1tUXT1uZXcgQXJyYXkoZ2UpLFplPTA7WmU8Z2U7KytaZSkoRWU9V1taZV18fGllW1plXSkmJih3ZVtaZV09RWUpO2Zvcig7VDxkOysrVClfW1RdPWxbVF07cmV0dXJuIG5ldyBMaChfLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiBkWGUo''@;'; put 'put ''KXtyZXR1cm4gbmV3IHVYZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gRVhlKCl7Zm9yKHZhciBjPXRoaXMuX25hbWUsbD10aGlzLl9pZCxhPVphZSgpLGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2YpZm9yKHZhciBXLF89ZFtm''@;'; put 'put ''XSxUPV8ubGVuZ3RoLGllPTA7aWU8VDsrK2llKWlmKFc9X1tpZV0pe3ZhciBnZT1TMihXLGwpO2dUKFcsYyxhLGllLF8se3RpbWU6Z2UudGltZStnZS5kZWxheStnZS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmdlLmR1cmF0aW9uLGVhc2U6Z2UuZWFzZX0pfXJldHVybiBuZXcgTGgoZCx0''@;'; put 'put ''aGlzLl9wYXJlbnRzLGMsYSl9LGNhbGw6cjMuY2FsbCxub2RlczpyMy5ub2Rlcyxub2RlOnIzLm5vZGUsc2l6ZTpyMy5zaXplLGVtcHR5OnIzLmVtcHR5LGVhY2g6cjMuZWFjaCxvbjpmdW5jdGlvbiBvWGUoYyxsKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1My''@;'; put 'put ''KHRoaXMubm9kZSgpLGEpLm9uLm9uKGMpOnRoaXMuZWFjaChmdW5jdGlvbiBpWGUoYyxsLGEpe3ZhciBkLGgsZj1mdW5jdGlvbiByWGUoYyl7cmV0dXJuKGMrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihsKXt2YXIgYT1sLmluZGV4T2YoIi4iKTtyZXR1cm4gYT49''@;'; put 'put ''MCYmKGw9bC5zbGljZSgwLGEpKSwhbHx8InN0YXJ0Ij09PWx9KX0obCk/SVU6VGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89Zih0aGlzLGMpLFQ9Xy5vbjtUIT09ZCYmKGg9KGQ9VCkuY29weSgpKS5vbihsLGEpLF8ub249aH19KGEsYyxsKSl9LGF0dHI6ZnVuY3Rpb24gVktlKGMsbCl7dmFy''@;'; put 'put ''IGE9c1QoYyksZD0idHJhbnNmb3JtIj09PWE/RWFlOnphZTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oYywiZnVuY3Rpb24iPT10eXBlb2YgbD8oYS5sb2NhbD9OS2U6SEtlKShhLGQsUlUodGhpcywiYXR0ci4iK2MsbCkpOm51bGw9PWw/KGEubG9jYWw/T0tlOlJLZSkoYSk6KGEubG9jYWw/Rktl''@;'; put 'put ''OlBLZSkoYSxkLGwpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIFpLZShjLGwpe3ZhciBhPSJhdHRyLiIrYztpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGE9dGhpcy50d2VlbihhKSkmJmEuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oYSxudWxsKTtpZigiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7dmFyIGQ9c1QoYyk7cmV0dXJuIHRoaXMudHdlZW4oYSwoZC5sb2NhbD96S2U6VUtlKShkLGwpKX0sc3R5bGU6ZnVuY3Rpb24gbVhlKGMsbCxhKXt2YXIgZD0idHJhbnNmb3JtIj09KGMrPSIiKT9kS2U6emFlO3JldHVybiBudWxsPT1sP3RoaXMu''@;'; put 'put ''c3R5bGVUd2VlbihjLGZ1bmN0aW9uIGhYZShjLGwpe3ZhciBhLGQsaDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1aNyh0aGlzLGMpLF89KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyksWjcodGhpcyxjKSk7cmV0dXJuIGY9PT1fP251bGw6Zj09PWEmJl89PT1kP2g6aD1sKGE9ZixkPV8p''@;'; put 'put ''fX0oYyxkKSkub24oImVuZC5zdHlsZS4iK2MsVWFlKGMpKToiZnVuY3Rpb24iPT10eXBlb2YgbD90aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBwWGUoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz1aNyh0aGlzLGMpLFQ9YSh0aGlzKSxXPVQrIiI7cmV0dXJuIG51''@;'; put 'put ''bGw9PVQmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpLFc9VD1aNyh0aGlzLGMpKSxfPT09Vz9udWxsOl89PT1kJiZXPT09aD9mOihoPVcsZj1sKGQ9XyxUKSl9fShjLGQsUlUodGhpcywic3R5bGUuIitjLGwpKSkuZWFjaChmdW5jdGlvbiBnWGUoYyxsKXt2YXIgYSxkLGgsVCxmPSJz''@;'; put 'put ''dHlsZS4iK2wsXz0iZW5kLiIrZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgVz1UaCh0aGlzLGMpLGllPVcub24sZ2U9bnVsbD09Vy52YWx1ZVtmXT9UfHwoVD1VYWUobCkpOnZvaWQgMDsoaWUhPT1hfHxoIT09Z2UpJiYoZD0oYT1pZSkuY29weSgpKS5vbihfLGg9Z2UpLFcub249ZH19KHRoaXMu''@;'; put 'put ''X2lkLGMpKTp0aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBmWGUoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBfPVo3KHRoaXMsYyk7cmV0dXJuIF89PT1oP251bGw6Xz09PWQ/ZjpmPWwoZD1fLGEpfX0oYyxkLGwpLGEpLm9uKCJlbmQuc3R5bGUuIitjLG51''@;'; put 'put ''bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIGJYZShjLGwsYSl7dmFyIGQ9InN0eWxlLiIrKGMrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGQ9dGhpcy50d2VlbihkKSkmJmQuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oZCxudWxsKTtpZigiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZCxmdW5jdGlvbiBfWGUoYyxsLGEpe3ZhciBkLGg7ZnVuY3Rpb24gZigpe3ZhciBfPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBfIT09aCYmKGQ9KGg9XykmJmZ1bmN0aW9uIHZYZShjLGwsYSl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKGQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxsLmNhbGwodGhpcyxkKSxhKX19KGMsXyxhKSksZH1yZXR1cm4gZi5fdmFsdWU9bCxmfShjLGwsYT8/IiIpKX0sdGV4dDpmdW5jdGlvbiBDWGUoYyl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBjP2Z1bmN0aW9uIHdYZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fShSVSh0aGlzLCJ0ZXh0IixjKSk6ZnVuY3Rpb24geVhlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319KG51bGw9PWM/IiI6''@;'; put 'put ''YysiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24geFhlKGMpe3ZhciBsPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGw9dGhpcy50d2VlbihsKSkmJmwuX3ZhbHVlO2lmKG51bGw9PWMpcmV0dXJuIHRoaXMudHdlZW4obCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obCxmdW5jdGlvbiBNWGUoYyl7dmFyIGwsYTtmdW5jdGlvbiBkKCl7dmFyIGg9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGghPT1hJiYobD0oYT1oKSYmZnVuY3Rpb24gU1hlKGMpe3JldHVybiBmdW5jdGlvbihsKXt0aGlz''@;'; put 'put ''LnRleHRDb250ZW50PWMuY2FsbCh0aGlzLGwpfX0oaCkpLGx9cmV0dXJuIGQuX3ZhbHVlPWMsZH0oYykpfSxyZW1vdmU6ZnVuY3Rpb24gYVhlKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uIHNYZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLnBhcmVudE5v''@;'; put 'put ''ZGU7Zm9yKHZhciBhIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCthIT09YylyZXR1cm47bCYmbC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIHBLZShjLGwpe3ZhciBhPXRoaXMuX2lkO2lmKGMrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBf''@;'; put 'put ''LGQ9UzIodGhpcy5ub2RlKCksYSkudHdlZW4saD0wLGY9ZC5sZW5ndGg7aDxmOysraClpZigoXz1kW2hdKS5uYW1lPT09YylyZXR1cm4gXy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP2hLZTpmS2UpKGEsYyxsKSl9LGRlbGF5OmZ1bmN0aW9uIEdLZShjKXt2''@;'; put 'put ''YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBjP1lLZTpXS2UpKGwsYykpOlMyKHRoaXMubm9kZSgpLGwpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBLS2UoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz8kS2U6cUtlKShsLGMpKTpTMih0aGlzLm5vZGUoKSxsKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiBKS2UoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uIFhL''@;'; put 'put ''ZShjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtUaCh0aGlzLGMpLmVhc2U9bH19KGwsYykpOlMyKHRoaXMubm9kZSgpLGwpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uIGVYZShjKXtpZigiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''Yyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiBRS2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7VGgodGhpcyxjKS5lYXNlPWF9fSh0aGlz''@;'; put 'put ''Ll9pZCxjKSl9LGVuZDpmdW5jdGlvbiBrWGUoKXt2YXIgYyxsLGE9dGhpcyxkPWEuX2lkLGg9YS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGYsXyl7dmFyIFQ9e3ZhbHVlOl99LFc9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1oJiZmKCl9fTthLmVhY2goZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgaWU9VGgodGhpcyxkKSxnZT1pZS5vbjtnZSE9PWMmJigobD0oYz1nZSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKFQpLGwuXy5pbnRlcnJ1cHQucHVzaChUKSxsLl8uZW5kLnB1c2goVykpLGllLm9uPWx9KSwwPT09aCYmZigpfSl9LFtTeW1ib2wuaXRlcmF0b3JdOnIzW1N5bWJvbC5pdGVy''@;'; put 'put ''YXRvcl19O3ZhciBEWGU9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uIFRYZShjKXtyZXR1cm4oKGMqPTIpPD0xP2MqYypjOihjLT0yKSpjKmMrMikvMn19O2Z1bmN0aW9uIElYZShjLGwpe2Zvcih2YXIgYTshKGE9Yy5fX3RyYW5zaXRpb24pfHwhKGE9YVts''@;'; put 'put ''XSk7KWlmKCEoYz1jLnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2x9IG5vdCBmb3VuZGApO3JldHVybiBhfVlnLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gbEtlKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttVCh0aGlzLGMpfSl9LFlnLnBy''@;'; put 'put ''b3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIExYZShjKXt2YXIgbCxhO2MgaW5zdGFuY2VvZiBMaD8obD1jLl9pZCxjPWMuX25hbWUpOihsPVphZSgpLChhPURYZSkudGltZT1FVSgpLGM9bnVsbD09Yz9udWxsOmMrIiIpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7''@;'; put 'put ''ZjxoOysrZilmb3IodmFyIFcsXz1kW2ZdLFQ9Xy5sZW5ndGgsaWU9MDtpZTxUOysraWUpKFc9X1tpZV0pJiZnVChXLGMsbCxpZSxfLGF8fElYZShXLGwpKTtyZXR1cm4gbmV3IExoKGQsdGhpcy5fcGFyZW50cyxjLGwpfTt2YXIgUlhlPVtudWxsXTtjb25zdCBCVT17Y2FwdHVyZTohMCxwYXNz''@;'; put 'put ''aXZlOiExfTtmdW5jdGlvbiBqVShjKXtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBZYWUoYyl7cmV0dXJuKChjPU1hdGguZXhwKGMpKSsxL2MpLzJ9Y29uc3QgQlhlPWZ1bmN0aW9uIGMobCxhLGQpe2Z1bmN0aW9uIGgoZixfKXt2YXIg''@;'; put 'put ''eXQsa3QsVD1mWzBdLFc9ZlsxXSxpZT1mWzJdLEVlPV9bMl0sWmU9X1swXS1ULG90PV9bMV0tVyxldD1aZSpaZStvdCpvdDtpZihldDwxZS0xMilrdD1NYXRoLmxvZyhFZS9pZSkvbCx5dD1mdW5jdGlvbihscil7cmV0dXJuW1QrbHIqWmUsVytscipvdCxpZSpNYXRoLmV4cChsKmxyKmt0KV19''@;'; put 'put ''O2Vsc2V7dmFyIFN0PU1hdGguc3FydChldCksUXQ9KEVlKkVlLWllKmllK2QqZXQpLygyKmllKmEqU3QpLG5uPShFZSpFZS1pZSppZS1kKmV0KS8oMipFZSphKlN0KSxtbj1NYXRoLmxvZyhNYXRoLnNxcnQoUXQqUXQrMSktUXQpLEVuPU1hdGgubG9nKE1hdGguc3FydChubipubisxKS1ubik7''@;'; put 'put ''a3Q9KEVuLW1uKS9sLHl0PWZ1bmN0aW9uKGxyKXt2YXIgVnI9bHIqa3QsX2k9WWFlKG1uKSx1aT1pZS8oYSpTdCkqKF9pKmZ1bmN0aW9uIFZYZShjKXtyZXR1cm4oKGM9TWF0aC5leHAoMipjKSktMSkvKGMrMSl9KGwqVnIrbW4pLWZ1bmN0aW9uIE5YZShjKXtyZXR1cm4oKGM9TWF0aC5leHAo''@;'; put 'put ''YykpLTEvYykvMn0obW4pKTtyZXR1cm5bVCt1aSpaZSxXK3VpKm90LGllKl9pL1lhZShsKlZyK21uKV19fXJldHVybiB5dC5kdXJhdGlvbj0xZTMqa3QqbC9NYXRoLlNRUlQyLHl0fXJldHVybiBoLnJobz1mdW5jdGlvbihmKXt2YXIgXz1NYXRoLm1heCguMDAxLCtmKSxUPV8qXztyZXR1cm4g''@;'; put 'put ''YyhfLFQsVCpUKX0saH0oTWF0aC5TUVJUMiwyLDQpO2Z1bmN0aW9uIEtnKGMsbCl7aWYoYz1mdW5jdGlvbiBqWGUoYyl7bGV0IGw7Zm9yKDtsPWMuc291cmNlRXZlbnQ7KWM9bDtyZXR1cm4gY30oYyksdm9pZCAwPT09bCYmKGw9Yy5jdXJyZW50VGFyZ2V0KSxsKXt2YXIgYT1sLm93bmVyU1ZH''@;'; put 'put ''RWxlbWVudHx8bDtpZihhLmNyZWF0ZVNWR1BvaW50KXt2YXIgZD1hLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIGQueD1jLmNsaWVudFgsZC55PWMuY2xpZW50WSxbKGQ9ZC5tYXRyaXhUcmFuc2Zvcm0obC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGQueV19aWYobC5nZXRCb3VuZGlu''@;'; put 'put ''Z0NsaWVudFJlY3Qpe3ZhciBoPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2MuY2xpZW50WC1oLmxlZnQtbC5jbGllbnRMZWZ0LGMuY2xpZW50WS1oLnRvcC1sLmNsaWVudFRvcF19fXJldHVybltjLnBhZ2VYLGMucGFnZVldfWNvbnN0IE1UPWM9PigpPT5jO2Z1bmN0aW9uIHpY''@;'; put 'put ''ZShjLHtzb3VyY2VFdmVudDpsLHRhcmdldDphLHRyYW5zZm9ybTpkLGRpc3BhdGNoOmh9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTpjLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bCxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOmQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOmh9fSl9ZnVuY3Rpb24gaTMoYyxsLGEpe3RoaXMuaz1jLHRoaXMueD1sLHRo''@;'; put 'put ''aXMueT1hfWkzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aTMsc2NhbGU6ZnVuY3Rpb24oYyl7cmV0dXJuIDE9PT1jP3RoaXM6bmV3IGkzKHRoaXMuaypjLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gMD09PWMmMD09PWw/dGhpczpuZXcgaTModGhpcy5r''@;'; put 'put ''LHRoaXMueCt0aGlzLmsqYyx0aGlzLnkrdGhpcy5rKmwpfSxhcHBseTpmdW5jdGlvbihjKXtyZXR1cm5bY1swXSp0aGlzLmsrdGhpcy54LGNbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oYyl7cmV0''@;'; put 'put ''dXJuIGMqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKGMpe3JldHVyblsoY1swXS10aGlzLngpL3RoaXMuaywoY1sxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oYyl7cmV0dXJuKGMt''@;'; put 'put ''dGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0scmVzY2FsZVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCku''@;'; put 'put ''bWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAoYy5pbnZlcnQsYykpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgeFQ9bmV3IGkzKDEsMCwwKTtmdW5jdGlvbiBFVChjKXtmb3IoOyFj''@;'; put 'put ''Ll9fem9vbTspaWYoIShjPWMucGFyZW50Tm9kZSkpcmV0dXJuIHhUO3JldHVybiBjLl9fem9vbX1mdW5jdGlvbiB6VShjKXtjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIG13KGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1''@;'; put 'put ''bmN0aW9uIFVYZShjKXtyZXR1cm4hKGMuY3RybEtleSYmIndoZWVsIiE9PWMudHlwZXx8Yy5idXR0b24pfWZ1bmN0aW9uIFpYZSgpe3ZhciBjPXRoaXM7cmV0dXJuIGMgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhjPWMub3duZXJTVkdFbGVtZW50fHxjKS5oYXNBdHRyaWJ1dGUoInZpZXdCb3gi''@;'; put 'put ''KT9bWyhjPWMudmlld0JveC5iYXNlVmFsKS54LGMueV0sW2MueCtjLndpZHRoLGMueStjLmhlaWdodF1dOltbMCwwXSxbYy53aWR0aC5iYXNlVmFsLnZhbHVlLGMuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW2MuY2xpZW50V2lkdGgsYy5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBX''@;'; put 'put ''YWUoKXtyZXR1cm4gdGhpcy5fX3pvb218fHhUfWZ1bmN0aW9uIFlYZShjKXtyZXR1cm4tYy5kZWx0YVkqKDE9PT1jLmRlbHRhTW9kZT8uMDU6Yy5kZWx0YU1vZGU/MTouMDAyKSooYy5jdHJsS2V5PzEwOjEpfWZ1bmN0aW9uIFdYZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8''@;'; put 'put ''fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBHWGUoYyxsLGEpe3ZhciBkPWMuaW52ZXJ0WChsWzBdWzBdKS1hWzBdWzBdLGg9Yy5pbnZlcnRYKGxbMV1bMF0pLWFbMV1bMF0sZj1jLmludmVydFkobFswXVsxXSktYVswXVsxXSxfPWMuaW52ZXJ0WShsWzFdWzFdKS1hWzFdWzFdO3Jl''@;'; put 'put ''dHVybiBjLnRyYW5zbGF0ZShoPmQ/KGQraCkvMjpNYXRoLm1pbigwLGQpfHxNYXRoLm1heCgwLGgpLF8+Zj8oZitfKS8yOk1hdGgubWluKDAsZil8fE1hdGgubWF4KDAsXykpfWZ1bmN0aW9uIEdhZShjKXt2YXIgbD17fSxhPWMubm9kZSgpLm5vZGVOYW1lO2wudGFnPWEsIiN0ZXh0Ij09YT9s''@;'; put 'put ''LnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbC5hdHRyaWJ1dGVzPXt9O3ZhciBkPWMubm9kZSgpLmF0dHJpYnV0ZXM7aWYoZClmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl7dmFyIGY9ZFtoXTtsLmF0dHJpYnV0ZXNbZi5uYW1lXT1mLnZhbHVl''@;'; put 'put ''fXZhciBnZSxXPWMubm9kZSgpLnRyYW5zZm9ybTtpZihXJiYwIT1XLmJhc2VWYWwubnVtYmVyT2ZJdGVtcyl7dmFyIGllPVcuYmFzZVZhbC5jb25zb2xpZGF0ZSgpLm1hdHJpeDtsLnRyYW5zbGF0aW9uPXt4OmllLmUseTppZS5mfSxsLnNjYWxlPWllLmF9aWYoImVsbGlwc2UiPT1hJiYobC5j''@;'; put 'put ''ZW50ZXI9e3g6bC5hdHRyaWJ1dGVzLmN4LHk6bC5hdHRyaWJ1dGVzLmN5fSksInBvbHlnb24iPT1hKXt2YXIgd2U9KGdlPWMuYXR0cigicG9pbnRzIikuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKFF0KXtyZXR1cm4gUXQuc3BsaXQoIiwiKVswXX0pLEVlPWdlLm1hcChmdW5jdGlvbihRdCl7''@;'; put 'put ''cmV0dXJuIFF0LnNwbGl0KCIsIilbMV19KSxaZT1NYXRoLm1pbi5hcHBseShudWxsLHdlKSxvdD1NYXRoLm1heC5hcHBseShudWxsLHdlKSxldD1NYXRoLm1pbi5hcHBseShudWxsLEVlKSx5dD1NYXRoLm1heC5hcHBseShudWxsLEVlKTtsLmJib3g9e3g6WmUseTpldCx3aWR0aDpvdC1aZSxo''@;'; put 'put ''ZWlnaHQ6eXQtZXR9LGwuY2VudGVyPXt4OihaZStvdCkvMix5OihldCt5dCkvMn19InBhdGgiPT1hJiYoKGdlPWMuYXR0cigiZCIpLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKSx3ZT1nZS5tYXAoZnVuY3Rpb24oZ3Ipe3JldHVybitnci5zcGxpdCgiLCIpWzBdfSksRWU9Z2UubWFwKGZ1bmN0''@;'; put 'put ''aW9uKGdyKXtyZXR1cm4rZ3Iuc3BsaXQoIiwiKVsxXX0pLFplPU1hdGgubWluLmFwcGx5KG51bGwsd2UpLG90PU1hdGgubWF4LmFwcGx5KG51bGwsd2UpLGV0PU1hdGgubWluLmFwcGx5KG51bGwsRWUpLHl0PU1hdGgubWF4LmFwcGx5KG51bGwsRWUpLGwuYmJveD17eDpaZSx5OmV0LHdpZHRo''@;'; put 'put ''Om90LVplLGhlaWdodDp5dC1ldH0sbC5jZW50ZXI9e3g6KFplK290KS8yLHk6KGV0K3l0KS8yfSxsLnRvdGFsTGVuZ3RoPWMubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCkpO3JldHVybiJ0ZXh0Ij09YSYmKGwuY2VudGVyPXt4OmMuYXR0cigieCIpLHk6Yy5hdHRyKCJ5Iil9KSwiI3RleHQiPT1h''@;'; put 'put ''P2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsfWZ1bmN0aW9uIFhnKGMpe3ZhciBsPUdhZShjKTtyZXR1cm4gbC5jaGlsZHJlbj1bXSxNVShjLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9WGcoa3ModGhpcykpO2Qu''@;'; put 'put ''cGFyZW50PWwsbC5jaGlsZHJlbi5wdXNoKGQpfSksbH1mdW5jdGlvbiBVVShjKXtyZXR1cm4iI3RleHQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik6IiNjb21tZW50Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlQ29tbWVudChjLmNvbW1lbnQpOmRvY3VtZW50LmNyZWF0ZUVs''@;'; put 'put ''ZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGMudGFnKX1mdW5jdGlvbiBaVShjKXt2YXIgbD1VVShjKSxhPWtzKGwpLGQ9Yy5hdHRyaWJ1dGVzO2Zvcih2YXIgaCBvZiBPYmplY3Qua2V5cyhkKSlhLmF0dHIoaCxkW2hdKTtyZXR1cm4gbH1mdW5jdGlvbiAkYWUoYyxsKXt2''@;'; put 'put ''YXIgYT1rcyhjLm5vZGUoKS5wYXJlbnROb2RlKSxkPVpVKGwpLGg9YS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gZH0sZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCl9KTtyZXR1cm4gYy5yZW1vdmUoKSxofWZ1bmN0aW9uIFlVKGMsbCl7IWZ1bmN0aW9uIHFYZShjLGwpe2MuZGF0dW0obCks''@;'; put 'put ''Yy5kYXRhKFtsXSxmdW5jdGlvbihhKXtyZXR1cm4gYS5rZXl9KX0oYyxsKSxNVShjLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKGQsaCl7WVUoa3ModGhpcyksbC5jaGlsZHJlbltoXSl9KX1mdW5jdGlvbiB2dyhjLGw9MCl7dmFyIGE9a3ModGhpcyksaD1jLmF0dHJpYnV0ZXMs''@;'; put 'put ''Zj1hLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGYpZm9yKHZhciBfPTA7XzxmLmxlbmd0aDtfKyspe3ZhciBUPWZbX10sVz1ULm5hbWU7aWYoInhtbG5zIiE9Vy5zcGxpdCgiOiIpWzBdJiZULm5hbWVzcGFjZVVSSSl7dmFyIGllPVQubmFtZXNwYWNlVVJJLnNwbGl0KCIvIik7Vz1pZVtpZS5sZW5n''@;'; put 'put ''dGgtMV0rIjoiK1d9VyBpbiBofHwoaFtXXT1udWxsKX1mb3IodmFyIHdlIG9mIE9iamVjdC5rZXlzKGgpKWEuYXR0cih3ZSxoW3dlXSk7Yy50ZXh0JiZhLnRleHQoYy50ZXh0KSxmdW5jdGlvbiBLWGUoYyxsKXt2YXIgYT1jLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKS5j''@;'; put 'put ''aGlsZE5vZGVzfSksZD0oYT1hLmRhdGEoZnVuY3Rpb24oXyl7cmV0dXJuIF8uY2hpbGRyZW59LGZ1bmN0aW9uKF8pe3JldHVybiBfLnRhZysiLSIrbH0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihfKXtyZXR1cm4gVVUoXyl9KSxoPWEuZXhpdCgpO2g9aC5yZW1vdmUoKSxhPWQubWVyZ2Uo''@;'; put 'put ''YSk7dmFyIGY9e307YS5lYWNoKGZ1bmN0aW9uKF8pe3ZhciBUPV8udGFnO251bGw9PWZbVF0mJihmW1RdPTApO3ZhciBXPWZbVF0rKzt2dy5jYWxsKHRoaXMsXyxXKX0pfShhLGwpfWZ1bmN0aW9uIHFhZShjLGwpe3ZhciBfLGE9bD9sLmxlbmd0aDowLGQ9Yz9NYXRoLm1pbihhLGMubGVuZ3Ro''@;'; put 'put ''KTowLGg9bmV3IEFycmF5KGQpLGY9bmV3IEFycmF5KGEpO2ZvcihfPTA7XzxkOysrXyloW19dPWtUKGNbX10sbFtfXSk7Zm9yKDtfPGE7KytfKWZbX109bFtfXTtyZXR1cm4gZnVuY3Rpb24oVCl7Zm9yKF89MDtfPGQ7KytfKWZbX109aFtfXShUKTtyZXR1cm4gZn19ZnVuY3Rpb24gWFhlKGMs''@;'; put 'put ''bCl7dmFyIGE9bmV3IERhdGU7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihkKXtyZXR1cm4gYS5zZXRUaW1lKGMqKDEtZCkrbCpkKSxhfX1mdW5jdGlvbiBKWGUoYyxsKXt2YXIgaCxhPXt9LGQ9e307Zm9yKGggaW4obnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYykmJihjPXt9KSwobnVs''@;'; put 'put ''bD09PWx8fCJvYmplY3QiIT10eXBlb2YgbCkmJihsPXt9KSxsKWggaW4gYz9hW2hdPWtUKGNbaF0sbFtoXSk6ZFtoXT1sW2hdO3JldHVybiBmdW5jdGlvbihmKXtmb3IoaCBpbiBhKWRbaF09YVtoXShmKTtyZXR1cm4gZH19ZnVuY3Rpb24gUVhlKGMsbCl7bHx8KGw9W10pO3ZhciBoLGE9Yz9N''@;'; put 'put ''YXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk6MCxkPWwuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGg9MDtoPGE7KytoKWRbaF09Y1toXSooMS1mKStsW2hdKmY7cmV0dXJuIGR9fWZ1bmN0aW9uIGtUKGMsbCl7dmFyIGQsYT10eXBlb2YgbDtyZXR1cm4gbnVsbD09bHx8ImJvb2xl''@;'; put 'put ''YW4iPT09YT9GVShsKTooIm51bWJlciI9PT1hP0RoOiJzdHJpbmciPT09YT8oZD1HZyhsKSk/KGw9ZCxTVCk6amFlOmwgaW5zdGFuY2VvZiBHZz9TVDpsIGluc3RhbmNlb2YgRGF0ZT9YWGU6ZnVuY3Rpb24gZUplKGMpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYykmJiEoYyBpbnN0YW5j''@;'; put 'put ''ZW9mIERhdGFWaWV3KX0obCk/UVhlOkFycmF5LmlzQXJyYXkobCk/cWFlOiJmdW5jdGlvbiIhPXR5cGVvZiBsLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBsLnRvU3RyaW5nfHxpc05hTihsKT9KWGU6RGgpKGMsbCl9ZnVuY3Rpb24gS2FlKCl7dmFyIGM9dGhpcyxkPWtzKHRoaXMuX3Nl''@;'; put 'put ''bGVjdGlvbi5ub2RlKCkucXVlcnlTZWxlY3Rvcigic3ZnIikpO2lmKDA9PWQuc2l6ZSgpKXJldHVybiB0aGlzO3RoaXMuX3pvb21TZWxlY3Rpb249ZDt2YXIgaD1mdW5jdGlvbiAkWGUoKXt2YXIgZ2Usd2UsRWUsYz1VWGUsbD1aWGUsYT1HWGUsZD1ZWGUsaD1XWGUsZj1bMCwxLzBdLF89W1st''@;'; put 'put ''MS8wLC0xLzBdLFsxLzAsMS8wXV0sVD0yNTAsVz1CWGUsaWU9eFUoInN0YXJ0Iiwiem9vbSIsImVuZCIpLFplPTUwMCxvdD0xNTAsZXQ9MCx5dD0xMDtmdW5jdGlvbiBrdChIbil7SG4ucHJvcGVydHkoIl9fem9vbSIsV2FlKS5vbigid2hlZWwuem9vbSIsVnIse3Bhc3NpdmU6ITF9KS5vbigi''@;'; put 'put ''bW91c2Vkb3duLnpvb20iLF9pKS5vbigiZGJsY2xpY2suem9vbSIsdWkpLmZpbHRlcihoKS5vbigidG91Y2hzdGFydC56b29tIixncikub24oInRvdWNobW92ZS56b29tIixFaSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsVXIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdo''@;'; put 'put ''bGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gU3QoSG4sUHIpe3JldHVybihQcj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sUHIpKSk9PT1Ibi5rP0huOm5ldyBpMyhQcixIbi54LEhuLnkpfWZ1bmN0aW9uIFF0KEhuLFByLFFuKXt2YXIgTXI9UHJbMF0tUW5bMF0q''@;'; put 'put ''SG4uayxfcj1QclsxXS1RblsxXSpIbi5rO3JldHVybiBNcj09PUhuLngmJl9yPT09SG4ueT9IbjpuZXcgaTMoSG4uayxNcixfcil9ZnVuY3Rpb24gbm4oSG4pe3JldHVyblsoK0huWzBdWzBdKyArSG5bMV1bMF0pLzIsKCtIblswXVsxXSsgK0huWzFdWzFdKS8yXX1mdW5jdGlvbiBtbihIbixQ''@;'; put 'put ''cixRbixNcil7SG4ub24oInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7RW4odGhpcyxhcmd1bWVudHMpLmV2ZW50KE1yKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe0VuKHRoaXMsYXJndW1lbnRzKS5ldmVudChNcikuZW5kKCl9KS50d2Vlbigiem9v''@;'; put 'put ''bSIsZnVuY3Rpb24oKXt2YXIgX3I9dGhpcyx2dD1hcmd1bWVudHMsT3Q9RW4oX3IsdnQpLmV2ZW50KE1yKSxjbj1sLmFwcGx5KF9yLHZ0KSxrbj1udWxsPT1Rbj9ubihjbik6ImZ1bmN0aW9uIj09dHlwZW9mIFFuP1FuLmFwcGx5KF9yLHZ0KTpRbixQbj1NYXRoLm1heChjblsxXVswXS1jblsw''@;'; put 'put ''XVswXSxjblsxXVsxXS1jblswXVsxXSksSm49X3IuX196b29tLE9yPSJmdW5jdGlvbiI9PXR5cGVvZiBQcj9Qci5hcHBseShfcix2dCk6UHIsUnI9VyhKbi5pbnZlcnQoa24pLmNvbmNhdChQbi9Kbi5rKSxPci5pbnZlcnQoa24pLmNvbmNhdChQbi9Pci5rKSk7cmV0dXJuIGZ1bmN0aW9uKCRy''@;'; put 'put ''KXtpZigxPT09JHIpJHI9T3I7ZWxzZXt2YXIgWnI9UnIoJHIpLEhyPVBuL1pyWzJdOyRyPW5ldyBpMyhIcixrblswXS1aclswXSpIcixrblsxXS1aclsxXSpIcil9T3Quem9vbShudWxsLCRyKX19KX1mdW5jdGlvbiBFbihIbixQcixRbil7cmV0dXJuIVFuJiZIbi5fX3pvb21pbmd8fG5ldyBs''@;'; put 'put ''cihIbixQcil9ZnVuY3Rpb24gbHIoSG4sUHIpe3RoaXMudGhhdD1Ibix0aGlzLmFyZ3M9UHIsdGhpcy5hY3RpdmU9MCx0aGlzLnNvdXJjZUV2ZW50PW51bGwsdGhpcy5leHRlbnQ9bC5hcHBseShIbixQciksdGhpcy50YXBzPTB9ZnVuY3Rpb24gVnIoSG4sLi4uUHIpe2lmKGMuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpKXt2YXIgUW49RW4odGhpcyxQcikuZXZlbnQoSG4pLE1yPXRoaXMuX196b29tLF9yPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSxNci5rKk1hdGgucG93KDIsZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksdnQ9S2coSG4pO2lmKFFuLndoZWVsKShRbi5tb3VzZVsw''@;'; put 'put ''XVswXSE9PXZ0WzBdfHxRbi5tb3VzZVswXVsxXSE9PXZ0WzFdKSYmKFFuLm1vdXNlWzFdPU1yLmludmVydChRbi5tb3VzZVswXT12dCkpLGNsZWFyVGltZW91dChRbi53aGVlbCk7ZWxzZXtpZihNci5rPT09X3IpcmV0dXJuO1FuLm1vdXNlPVt2dCxNci5pbnZlcnQodnQpXSxtVCh0aGlzKSxR''@;'; put 'put ''bi5zdGFydCgpfW13KEhuKSxRbi53aGVlbD1zZXRUaW1lb3V0KGZ1bmN0aW9uIE90KCl7UW4ud2hlZWw9bnVsbCxRbi5lbmQoKX0sb3QpLFFuLnpvb20oIm1vdXNlIixhKFF0KFN0KE1yLF9yKSxRbi5tb3VzZVswXSxRbi5tb3VzZVsxXSksUW4uZXh0ZW50LF8pKX19ZnVuY3Rpb24gX2koSG4s''@;'; put 'put ''Li4uUHIpe2lmKCFFZSYmYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBRbj1Ibi5jdXJyZW50VGFyZ2V0LE1yPUVuKHRoaXMsUHIsITApLmV2ZW50KEhuKSxfcj1rcyhIbi52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLGZ1bmN0aW9uIGtuKEpuKXtpZihtdyhKbiksIU1yLm1vdmVkKXt2''@;'; put 'put ''YXIgT3I9Sm4uY2xpZW50WC1PdCxScj1Kbi5jbGllbnRZLWNuO01yLm1vdmVkPU9yKk9yK1JyKlJyPmV0fU1yLmV2ZW50KEpuKS56b29tKCJtb3VzZSIsYShRdChNci50aGF0Ll9fem9vbSxNci5tb3VzZVswXT1LZyhKbixRbiksTXIubW91c2VbMV0pLE1yLmV4dGVudCxfKSl9LCEwKS5vbigi''@;'; put 'put ''bW91c2V1cC56b29tIixmdW5jdGlvbiBQbihKbil7X3Iub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksZnVuY3Rpb24gRlhlKGMsbCl7dmFyIGE9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZD1rcyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2wmJihkLm9u''@;'; put 'put ''KCJjbGljay5kcmFnIixqVSxCVSksc2V0VGltZW91dChmdW5jdGlvbigpe2Qub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gYT9kLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooYS5zdHlsZS5Nb3pVc2VyU2VsZWN0PWEuX19ub3NlbGVjdCxkZWxldGUg''@;'; put 'put ''YS5fX25vc2VsZWN0KX0oSm4udmlldyxNci5tb3ZlZCksbXcoSm4pLE1yLmV2ZW50KEpuKS5lbmQoKX0sITApLHZ0PUtnKEhuLFFuKSxPdD1Ibi5jbGllbnRYLGNuPUhuLmNsaWVudFk7KGZ1bmN0aW9uIFBYZShjKXt2YXIgbD1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWtzKGMpLm9u''@;'; put 'put ''KCJkcmFnc3RhcnQuZHJhZyIsalUsQlUpOyJvbnNlbGVjdHN0YXJ0ImluIGw/YS5vbigic2VsZWN0c3RhcnQuZHJhZyIsalUsQlUpOihsLl9fbm9zZWxlY3Q9bC5zdHlsZS5Nb3pVc2VyU2VsZWN0LGwuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfSkoSG4udmlldykselUoSG4pLE1yLm1v''@;'; put 'put ''dXNlPVt2dCx0aGlzLl9fem9vbS5pbnZlcnQodnQpXSxtVCh0aGlzKSxNci5zdGFydCgpfX1mdW5jdGlvbiB1aShIbiwuLi5Qcil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBRbj10aGlzLl9fem9vbSxNcj1LZyhIbi5jaGFuZ2VkVG91Y2hlcz9Ibi5jaGFuZ2VkVG91Y2hlc1sw''@;'; put 'put ''XTpIbix0aGlzKSxfcj1Rbi5pbnZlcnQoTXIpLE90PWEoUXQoU3QoUW4sUW4uayooSG4uc2hpZnRLZXk/LjU6MikpLE1yLF9yKSxsLmFwcGx5KHRoaXMsUHIpLF8pO213KEhuKSxUPjA/a3ModGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKFQpLmNhbGwobW4sT3QsTXIsSG4pOmtzKHRoaXMp''@;'; put 'put ''LmNhbGwoa3QudHJhbnNmb3JtLE90LE1yLEhuKX19ZnVuY3Rpb24gZ3IoSG4sLi4uUHIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdnQsT3QsY24sa24sUW49SG4udG91Y2hlcyxNcj1Rbi5sZW5ndGgsX3I9RW4odGhpcyxQcixIbi5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1N''@;'; put 'put ''cikuZXZlbnQoSG4pO2Zvcih6VShIbiksT3Q9MDtPdDxNcjsrK090KWtuPVtrbj1LZyhjbj1RbltPdF0sdGhpcyksdGhpcy5fX3pvb20uaW52ZXJ0KGtuKSxjbi5pZGVudGlmaWVyXSxfci50b3VjaDA/IV9yLnRvdWNoMSYmX3IudG91Y2gwWzJdIT09a25bMl0mJihfci50b3VjaDE9a24sX3Iu''@;'; put 'put ''dGFwcz0wKTooX3IudG91Y2gwPWtuLHZ0PSEwLF9yLnRhcHM9MSshIWdlKTtnZSYmKGdlPWNsZWFyVGltZW91dChnZSkpLHZ0JiYoX3IudGFwczwyJiYod2U9a25bMF0sZ2U9c2V0VGltZW91dChmdW5jdGlvbigpe2dlPW51bGx9LFplKSksbVQodGhpcyksX3Iuc3RhcnQoKSl9fWZ1bmN0aW9u''@;'; put 'put ''IEVpKEhuLC4uLlByKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHZ0LE90LGNuLGtuLFFuPUVuKHRoaXMsUHIpLmV2ZW50KEhuKSxNcj1Ibi5jaGFuZ2VkVG91Y2hlcyxfcj1Nci5sZW5ndGg7Zm9yKG13KEhuKSx2dD0wO3Z0PF9yOysrdnQpY249S2coT3Q9TXJbdnRdLHRoaXMpLFFuLnRvdWNo''@;'; put 'put ''MCYmUW4udG91Y2gwWzJdPT09T3QuaWRlbnRpZmllcj9Rbi50b3VjaDBbMF09Y246UW4udG91Y2gxJiZRbi50b3VjaDFbMl09PT1PdC5pZGVudGlmaWVyJiYoUW4udG91Y2gxWzBdPWNuKTtpZihPdD1Rbi50aGF0Ll9fem9vbSxRbi50b3VjaDEpe3ZhciBQbj1Rbi50b3VjaDBbMF0sSm49UW4u''@;'; put 'put ''dG91Y2gwWzFdLE9yPVFuLnRvdWNoMVswXSxScj1Rbi50b3VjaDFbMV0sJHI9KCRyPU9yWzBdLVBuWzBdKSokcisoJHI9T3JbMV0tUG5bMV0pKiRyLFpyPShacj1SclswXS1KblswXSkqWnIrKFpyPVJyWzFdLUpuWzFdKSpacjtPdD1TdChPdCxNYXRoLnNxcnQoJHIvWnIpKSxjbj1bKFBuWzBd''@;'; put 'put ''K09yWzBdKS8yLChQblsxXStPclsxXSkvMl0sa249WyhKblswXStSclswXSkvMiwoSm5bMV0rUnJbMV0pLzJdfWVsc2V7aWYoIVFuLnRvdWNoMClyZXR1cm47Y249UW4udG91Y2gwWzBdLGtuPVFuLnRvdWNoMFsxXX1Rbi56b29tKCJ0b3VjaCIsYShRdChPdCxjbixrbiksUW4uZXh0ZW50LF8p''@;'; put 'put ''KX19ZnVuY3Rpb24gVXIoSG4sLi4uUHIpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdnQsT3QsUW49RW4odGhpcyxQcikuZXZlbnQoSG4pLE1yPUhuLmNoYW5nZWRUb3VjaGVzLF9yPU1yLmxlbmd0aDtmb3IoelUoSG4pLEVlJiZjbGVhclRpbWVvdXQoRWUpLEVlPXNldFRpbWVvdXQoZnVuY3Rp''@;'; put 'put ''b24oKXtFZT1udWxsfSxaZSksdnQ9MDt2dDxfcjsrK3Z0KU90PU1yW3Z0XSxRbi50b3VjaDAmJlFuLnRvdWNoMFsyXT09PU90LmlkZW50aWZpZXI/ZGVsZXRlIFFuLnRvdWNoMDpRbi50b3VjaDEmJlFuLnRvdWNoMVsyXT09PU90LmlkZW50aWZpZXImJmRlbGV0ZSBRbi50b3VjaDE7aWYoUW4u''@;'; put 'put ''dG91Y2gxJiYhUW4udG91Y2gwJiYoUW4udG91Y2gwPVFuLnRvdWNoMSxkZWxldGUgUW4udG91Y2gxKSxRbi50b3VjaDApUW4udG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChRbi50b3VjaDBbMF0pO2Vsc2UgaWYoUW4uZW5kKCksMj09PVFuLnRhcHMmJihPdD1LZyhPdCx0aGlzKSxNYXRo''@;'; put 'put ''Lmh5cG90KHdlWzBdLU90WzBdLHdlWzFdLU90WzFdKTx5dCkpe3ZhciBjbj1rcyh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpO2NuJiZjbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4ga3QudHJhbnNmb3JtPWZ1bmN0aW9uKEhuLFByLFFuLE1yKXt2YXIgX3I9SG4uc2VsZWN0aW9u''@;'; put 'put ''P0huLnNlbGVjdGlvbigpOkhuO19yLnByb3BlcnR5KCJfX3pvb20iLFdhZSksSG4hPT1fcj9tbihIbixQcixRbixNcik6X3IuaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe0VuKHRoaXMsYXJndW1lbnRzKS5ldmVudChNcikuc3RhcnQoKS56b29tKG51bGwsImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFByP1ByLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpQcikuZW5kKCl9KX0sa3Quc2NhbGVCeT1mdW5jdGlvbihIbixQcixRbixNcil7a3Quc2NhbGVUbyhIbixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKigiZnVuY3Rpb24iPT10eXBlb2YgUHI/UHIuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpOlByKX0sUW4sTXIpfSxrdC5zY2FsZVRvPWZ1bmN0aW9uKEhuLFByLFFuLE1yKXtrdC50cmFuc2Zvcm0oSG4sZnVuY3Rpb24oKXt2YXIgX3I9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdnQ9dGhpcy5fX3pvb20sT3Q9bnVsbD09UW4/bm4oX3IpOiJmdW5jdGlvbiI9PXR5cGVvZiBRbj9R''@;'; put 'put ''bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UW4sY249dnQuaW52ZXJ0KE90KSxrbj0iZnVuY3Rpb24iPT10eXBlb2YgUHI/UHIuYXBwbHkodGhpcyxhcmd1bWVudHMpOlByO3JldHVybiBhKFF0KFN0KHZ0LGtuKSxPdCxjbiksX3IsXyl9LFFuLE1yKX0sa3QudHJhbnNsYXRlQnk9ZnVuY3Rpb24o''@;'; put 'put ''SG4sUHIsUW4sTXIpe2t0LnRyYW5zZm9ybShIbixmdW5jdGlvbigpe3JldHVybiBhKHRoaXMuX196b29tLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgUHI/UHIuYXBwbHkodGhpcyxhcmd1bWVudHMpOlByLCJmdW5jdGlvbiI9PXR5cGVvZiBRbj9Rbi5hcHBseSh0aGlzLGFyZ3VtZW50''@;'; put 'put ''cyk6UW4pLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpLF8pfSxudWxsLE1yKX0sa3QudHJhbnNsYXRlVG89ZnVuY3Rpb24oSG4sUHIsUW4sTXIsX3Ipe2t0LnRyYW5zZm9ybShIbixmdW5jdGlvbigpe3ZhciB2dD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxPdD10aGlzLl9fem9vbSxjbj1udWxs''@;'; put 'put ''PT1Ncj9ubih2dCk6ImZ1bmN0aW9uIj09dHlwZW9mIE1yP01yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpNcjtyZXR1cm4gYSh4VC50cmFuc2xhdGUoY25bMF0sY25bMV0pLnNjYWxlKE90LmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgUHI/LVByLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KTotUHIsImZ1bmN0aW9uIj09dHlwZW9mIFFuPy1Rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LVFuKSx2dCxfKX0sTXIsX3IpfSxsci5wcm90b3R5cGU9e2V2ZW50OmZ1bmN0aW9uKEhuKXtyZXR1cm4gSG4mJih0aGlzLnNvdXJjZUV2ZW50PUhuKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihIbixQcil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT1IbiYmKHRoaXMubW91c2VbMV09UHIuaW52ZXJ0KHRoaXMubW91c2Vb''@;'; put 'put ''MF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PUhuJiYodGhpcy50b3VjaDBbMV09UHIuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT1IbiYmKHRoaXMudG91Y2gxWzFdPVByLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209UHIs''@;'; put 'put ''dGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKEhuKXt2YXIgUHI9a3ModGhpcy50aGF0KS5kYXR1bSgpO2ll''@;'; put 'put ''LmNhbGwoSG4sdGhpcy50aGF0LG5ldyB6WGUoSG4se3NvdXJjZUV2ZW50OnRoaXMuc291cmNlRXZlbnQsdGFyZ2V0Omt0LHR5cGU6SG4sdHJhbnNmb3JtOnRoaXMudGhhdC5fX3pvb20sZGlzcGF0Y2g6aWV9KSxQcil9fSxrdC53aGVlbERlbHRhPWZ1bmN0aW9uKEhuKXtyZXR1cm4gYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgSG4/SG46TVQoK0huKSxrdCk6ZH0sa3QuZmlsdGVyPWZ1bmN0aW9uKEhuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgSG4/SG46TVQoISFIbiksa3QpOmN9LGt0LnRvdWNoYWJsZT1mdW5jdGlv''@;'; put 'put ''bihIbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIEhuP0huOk1UKCEhSG4pLGt0KTpofSxrdC5leHRlbnQ9ZnVuY3Rpb24oSG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBIbj9IbjpNVChbWytIblswXVswXSwr''@;'; put 'put ''SG5bMF1bMV1dLFsrSG5bMV1bMF0sK0huWzFdWzFdXV0pLGt0KTpsfSxrdC5zY2FsZUV4dGVudD1mdW5jdGlvbihIbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K0huWzBdLGZbMV09K0huWzFdLGt0KTpbZlswXSxmWzFdXX0sa3QudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKEhu''@;'; put 'put ''KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oX1swXVswXT0rSG5bMF1bMF0sX1sxXVswXT0rSG5bMV1bMF0sX1swXVsxXT0rSG5bMF1bMV0sX1sxXVsxXT0rSG5bMV1bMV0sa3QpOltbX1swXVswXSxfWzBdWzFdXSxbX1sxXVswXSxfWzFdWzFdXV19LGt0LmNvbnN0cmFpbj1mdW5jdGlvbihI''@;'; put 'put ''bil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9SG4sa3QpOmF9LGt0LmR1cmF0aW9uPWZ1bmN0aW9uKEhuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD0rSG4sa3QpOlR9LGt0LmludGVycG9sYXRlPWZ1bmN0aW9uKEhuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVz1IbixrdCk6''@;'; put 'put ''V30sa3Qub249ZnVuY3Rpb24oKXt2YXIgSG49aWUub24uYXBwbHkoaWUsYXJndW1lbnRzKTtyZXR1cm4gSG49PT1pZT9rdDpIbn0sa3QuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihIbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGV0PShIbj0rSG4pKkhuLGt0KTpNYXRoLnNxcnQoZXQpfSxr''@;'; put 'put ''dC50YXBEaXN0YW5jZT1mdW5jdGlvbihIbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHl0PStIbixrdCk6eXR9LGt0fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50''@;'; put 'put ''KS5pbnRlcnBvbGF0ZShrVCkub24oInpvb20iLGZ1bmN0aW9uIGwoXyl7a3MoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLF8udHJhbnNmb3JtKSxjLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1oO3ZhciBmPWtzKGQu''@;'; put 'put ''bm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fEdVLmNhbGwodGhpcyxmKSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1FVChkLm5vZGUoKSksdGhpc31mdW5jdGlvbiBXVShjKXt2YXIgbD10aGlzLl90cmFuc2xhdGlvbixhPXRoaXMuX3Nj''@;'; put 'put ''YWxlLGQ9Yy5kYXR1bSgpLnRyYW5zbGF0aW9uLGg9Yy5kYXR1bSgpLnNjYWxlLGY9RVQodGhpcy5fem9vbVNlbGVjdGlvbi5ub2RlKCkpO3JldHVybiBsJiYoZj0oZj1mLnNjYWxlKDEvYSkpLnRyYW5zbGF0ZSgtbC54LC1sLnkpKSwoZj1mLnRyYW5zbGF0ZShkLngsZC55KSkuc2NhbGUoaCl9''@;'; put 'put ''ZnVuY3Rpb24gR1UoYyl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLFdVLmNhbGwodGhpcyxjKSksdGhpcy5fdHJhbnNsYXRpb249Yy5kYXR1bSgpLnRyYW5zbGF0aW9uLHRoaXMuX3NjYWxlPWMuZGF0dW0oKS5zY2FsZSx0aGlzLl9vcmlnaW5hbFRy''@;'; put 'put ''YW5zZm9ybT14VC50cmFuc2xhdGUoYy5kYXR1bSgpLnRyYW5zbGF0aW9uLngsYy5kYXR1bSgpLnRyYW5zbGF0aW9uLnkpLnNjYWxlKGMuZGF0dW0oKS5zY2FsZSl9ZnVuY3Rpb24gYUplKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgYT1jLm1hcChmdW5jdGlvbihkKXtyZXR1cm4ga1Qo''@;'; put 'put ''W2RbMF1bMF0sZFswXVsxXV0sW2RbMV1bMF0sZFsxXVsxXV0pfSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiBkPDE/Ik0iK2EubWFwKGZ1bmN0aW9uKGgpe3JldHVybiBoKGQpfSkuam9pbigiTCIpOmx9fX1mdW5jdGlvbiBYYWUoYyl7cmV0dXJuImVkZ2UiPT1jLmF0dHJpYnV0ZXMuY2xh''@;'; put 'put ''c3N8fCJhIj09Yy50YWcmJiJnIj09Yy5wYXJlbnQudGFnJiYiZWRnZSI9PWMucGFyZW50LnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzfWZ1bmN0aW9uIEphZShjKXtyZXR1cm4gYy5wYXJlbnQmJlhhZShjLnBhcmVudCl9ZnVuY3Rpb24gUWFlKGMpe3ZhciBsPXRoaXMuX3RyYW5zaXRpb24sYT10''@;'; put 'put ''aGlzLl9vcHRpb25zLmZhZGUmJm51bGwhPWwsZD10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaD10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzLGY9dGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zLF89dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcyYmbnVsbCE9''@;'; put 'put ''bCxUPXRoaXMuX2F0dHJpYnV0ZXIsVz10aGlzO3ZhciB3ZT10aGlzLl9zZWxlY3Rpb247aWYobnVsbCE9bCl7dmFyIEVlPXRoaXMuX2pvYnM7aWYoVy5fYWN0aXZlKXJldHVybiBFZS5wdXNoKG51bGwpLHRoaXM7d2UudHJhbnNpdGlvbihsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24o''@;'; put 'put ''ImVuZCIsZnVuY3Rpb24oKXtXLl9hY3RpdmU9ITEsMCE9RWUubGVuZ3RoJiYoRWUuc2hpZnQoKSxXLnJlbmRlcigpKX0pLHRoaXMuX2FjdGl2ZT0hMH1udWxsIT1sJiZ3ZS50cmFuc2l0aW9uKGwpLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtXLl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uU3Rh''@;'; put 'put ''cnQiLFcpfSkub24oImVuZCIsZnVuY3Rpb24oKXtXLl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uRW5kIixXKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Vy5fZGlzcGF0Y2guY2FsbCgicmVzdG9yZUVuZCIsVyksVy5fZGlzcGF0Y2guY2FsbCgi''@;'; put 'put ''ZW5kIixXKSxjJiZjLmNhbGwoVyl9KTt2YXIgWmU9dGhpcy5fZGF0YSxvdD13ZS5zZWxlY3RBbGwoInN2ZyIpLmRhdGEoW1plXSxmdW5jdGlvbihldCl7cmV0dXJuIGV0LmtleX0pO3JldHVybiBvdD1vdC5lbnRlcigpLmFwcGVuZCgic3ZnIikubWVyZ2Uob3QpLGZ1bmN0aW9uIGdlKGV0KXt2''@;'; put 'put ''YXIgeXQ9a3ModGhpcyk7aWYoInN2ZyI9PWV0LnRhZyl7dmFyIGt0PVcuX29wdGlvbnM7aWYobnVsbCE9a3Qud2lkdGh8fG51bGwhPWt0LmhlaWdodCl7dmFyIFN0PWt0LndpZHRoLFF0PWt0LmhlaWdodDtudWxsPT1TdD9TdD00KmV0LmF0dHJpYnV0ZXMud2lkdGgucmVwbGFjZSgicHQiLCIi''@;'; put 'put ''KS8zOih5dC5hdHRyKCJ3aWR0aCIsU3QpLGV0LmF0dHJpYnV0ZXMud2lkdGg9U3QpLG51bGw9PVF0P1F0PTQqZXQuYXR0cmlidXRlcy5oZWlnaHQucmVwbGFjZSgicHQiLCIiKS8zOih5dC5hdHRyKCJoZWlnaHQiLFF0KSxldC5hdHRyaWJ1dGVzLmhlaWdodD1RdCksa3QuZml0fHwoeXQuYXR0''@;'; put 'put ''cigidmlld0JveCIsYDAgMCAkezMqU3QvNC9rdC5zY2FsZX0gJHszKlF0LzQva3Quc2NhbGV9YCksZXQuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHszKlN0LzQva3Quc2NhbGV9ICR7MypRdC80L2t0LnNjYWxlfWApfTEhPWt0LnNjYWxlJiYoa3QuZml0fHxudWxsPT1rdC53aWR0aCYmbnVs''@;'; put 'put ''bD09a3QuaGVpZ2h0KSYmKFN0PWV0LmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzJdLFF0PWV0LmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzNdLHl0LmF0dHIoInZpZXdCb3giLGAwIDAgJHtTdC9rdC5zY2FsZX0gJHtRdC9rdC5zY2FsZX1gKSxldC5hdHRyaWJ1dGVzLnZp''@;'; put 'put ''ZXdCb3g9YDAgMCAke1N0L2t0LnNjYWxlfSAke1F0L2t0LnNjYWxlfWApfVQmJnl0LmVhY2goVCk7dmFyIG5uPWV0LnRhZyxtbj1ldC5hdHRyaWJ1dGVzLEVuPXl0Lm5vZGUoKS5hdHRyaWJ1dGVzO2lmKEVuKWZvcih2YXIgbHI9MDtscjxFbi5sZW5ndGg7bHIrKyl7dmFyIFZyPUVuW2xyXSxf''@;'; put 'put ''aT1Wci5uYW1lO2lmKCJ4bWxucyIhPV9pLnNwbGl0KCI6IilbMF0mJlZyLm5hbWVzcGFjZVVSSSl7dmFyIHVpPVZyLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO19pPXVpW3VpLmxlbmd0aC0xXSsiOiIrX2l9X2kgaW4gbW58fChtbltfaV09bnVsbCl9dmFyIEVpPSExLFVyPSExO2lmKGgmJmwp''@;'; put 'put ''e2lmKCgicG9seWdvbiI9PXRoaXMubm9kZU5hbWV8fCJlbGxpcHNlIj09dGhpcy5ub2RlTmFtZSkmJmV0LmFsdGVybmF0aXZlT2xkJiYoVXI9ITApLCgicG9seWdvbiI9PW5ufHwiZWxsaXBzZSI9PW5uKSYmZXQuYWx0ZXJuYXRpdmVOZXcmJihFaT0hMCksInBvbHlnb24iPT10aGlzLm5vZGVO''@;'; put 'put ''YW1lJiYicG9seWdvbiI9PW5uJiZldC5hbHRlcm5hdGl2ZU9sZCl7dmFyIEhuPUdhZSh5dCk7aWYoIWYpe3ZhciBRbj1Ibi5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpLmxlbmd0aDsoTXI9ZXQuYXR0cmlidXRlcy5wb2ludHMpLnNwbGl0KCIgIikubGVuZ3RoPT1RbiYmKEVpPSExLFVy''@;'; put 'put ''PSExKX19aWYoVXIpe3ZhciBPdD0kYWUoeXQsZXQuYWx0ZXJuYXRpdmVPbGQpO090LmRhdGEoW2V0XSxmdW5jdGlvbigpe3JldHVybiBldC5rZXl9KSx5dD1PdH1FaSYmKG5uPSJwYXRoIixtbj1ldC5hbHRlcm5hdGl2ZU5ldy5hdHRyaWJ1dGVzKX12YXIga249eXQ7aWYobCYmKGtuPWtuLnRy''@;'; put 'put ''YW5zaXRpb24obCksYSYma24uZmlsdGVyKGZ1bmN0aW9uKElpKXtyZXR1cm4iIyI9PUlpLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMSksa24uZmlsdGVyKGZ1bmN0aW9uKElpKXtyZXR1cm4iIyI9PUlpLnRhZ1swXT9udWxsOnRoaXN9KS5vbigiZW5kIixmdW5jdGlvbihJ''@;'; put 'put ''aSl7a3ModGhpcykuYXR0cigic3R5bGUiLElpJiZJaS5hdHRyaWJ1dGVzJiZJaS5hdHRyaWJ1dGVzLnN0eWxlfHxudWxsKX0pKSxfJiYicGF0aCI9PW5uJiZldC5vZmZzZXQpe3ZhciBKbj1ldC50b3RhbExlbmd0aDt5dC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixKbisiICIrSm4pLmF0dHIo''@;'; put 'put ''InN0cm9rZS1kYXNob2Zmc2V0IixKbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZXQub2Zmc2V0LngrIiwiK2V0Lm9mZnNldC55KyIpIiksbW5bInN0cm9rZS1kYXNob2Zmc2V0Il09MCxtbi50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIixrbi5hdHRyKCJzdHJva2UtZGFzaG9m''@;'; put 'put ''ZnNldCIsbW5bInN0cm9rZS1kYXNob2Zmc2V0Il0pLmF0dHIoInRyYW5zZm9ybSIsbW4udHJhbnNmb3JtKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7a3ModGhpcykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXtrcyh0aGlzKS5hdHRyKCJzdHJva2UtZGFzaG9m''@;'; put 'put ''ZnNldCIsbnVsbCkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsbnVsbCkuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfWlmKF8mJiJwb2x5Z29uIj09bm4mJkphZShldCkmJmV0Lm9mZnNldCYmInBhdGgiPT1ldC5wYXJlbnQuY2hpbGRyZW5bM10udGFnKXt2YXIgUnI9a3MoeXQubm9kZSgpLnBh''@;'; put 'put ''cmVudE5vZGUucXVlcnlTZWxlY3RvcigicGF0aCIpKSwkcj1Sci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCgwKSxacj1Sci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChldC50b3RhbExlbmd0aCksSHI9UnIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoZXQudG90YWxMZW5ndGgtMSksUmk9MTgw''@;'; put 'put ''Kk1hdGguYXRhbjIoWnIueS1Ici55LFpyLngtSHIueCkvTWF0aC5QSSxYbz0kci54LVpyLngrZXQub2Zmc2V0LngsR289JHIueS1aci55K2V0Lm9mZnNldC55O3l0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1hvKyIsIitHbysiKSIpLGtuLmF0dHJUd2VlbigidHJhbnNmb3JtIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihJaSl7dmFyIFFzPVJyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKGV0LnRvdGFsTGVuZ3RoKklpKSxsYT1Sci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChldC50b3RhbExlbmd0aCpJaSsxKSxGcz0xODAqTWF0aC5hdGFuMihsYS55LVFzLnksbGEu''@;'; put 'put ''eC1Rcy54KS9NYXRoLlBJLVJpO3JldHVybiJ0cmFuc2xhdGUoIisoWG89UXMueC1aci54K2V0Lm9mZnNldC54KigxLUlpKSkrIiwiKyhHbz1Rcy55LVpyLnkrZXQub2Zmc2V0LnkqKDEtSWkpKSsiKSByb3RhdGUoIitGcysiICIrWnIueCsiICIrWnIueSsiKSJ9fSkub24oInN0YXJ0IixmdW5j''@;'; put 'put ''dGlvbigpe2tzKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7a3ModGhpcykuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfXZhciBKcz1kJiZsJiYicGF0aCI9PW5uJiZudWxsIT15dC5hdHRyKCJkIik7Zm9yKHZhciBnYSBvZiBPYmplY3Qua2V5cyht''@;'; put 'put ''bikpe3ZhciB1bz1tbltnYV07aWYoSnMmJiJkIj09Z2Epe3ZhciBNcjsoTXI9KGV0LmFsdGVybmF0aXZlT2xkfHxldCkucG9pbnRzKSYma24uYXR0clR3ZWVuKCJkIixhSmUoTXIsdW8pKX1lbHNle2lmKCJ0cmFuc2Zvcm0iPT1nYSYmZXQudHJhbnNsYXRpb24paWYobCl7dmFyIEF0PWtuLm9u''@;'; put 'put ''KCJlbmQiKTtrbi5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Vy5fem9vbUJlaGF2aW9yJiZrbi50d2VlbigiYXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIElpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKFFzKXtJaS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsRWFlKEVUKFcuX3pvb21TZWxl''@;'; put 'put ''Y3Rpb24ubm9kZSgpKS50b1N0cmluZygpLFdVLmNhbGwoVyx5dCkudG9TdHJpbmcoKSkoUXMpKX19KX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7QXQuY2FsbCh0aGlzKSxXLl96b29tQmVoYXZpb3ImJkdVLmNhbGwoVyx5dCl9KX1lbHNlIFcuX3pvb21CZWhhdmlvciYmKEdVLmNhbGwoVyx5dCks''@;'; put 'put ''dW89V1UuY2FsbChXLHl0KS50b1N0cmluZygpKTtrbi5hdHRyKGdhLHVvKX19RWkmJmtuLm9uKCJlbmQiLGZ1bmN0aW9uKElpLFFzLGxhKXskYWUoT3Q9a3ModGhpcyksSWkpLmRhdGEoW0lpXSxmdW5jdGlvbigpe3JldHVybiBJaS5rZXl9KX0pLGV0LnRleHQmJmtuLnRleHQoZXQudGV4dCks''@;'; put 'put ''ZnVuY3Rpb24gaWUoZXQpe3ZhciB5dD1ldC5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gZXQubm9kZSgpLmNoaWxkTm9kZXN9KSxrdD0oeXQ9eXQuZGF0YShmdW5jdGlvbihubil7cmV0dXJuIG5uLmNoaWxkcmVufSxmdW5jdGlvbihubil7cmV0dXJuIG5uLmtleX0pKS5lbnRlcigpLmFw''@;'; put 'put ''cGVuZChmdW5jdGlvbihubil7dmFyIG1uPVVVKG5uKTtyZXR1cm4iI3RleHQiPT1ubi50YWcmJmEmJihtbi5ub2RlVmFsdWU9bm4udGV4dCksbW59KTsoYXx8XyYmWGFlKGV0LmRhdHVtKCkpKSYma3QuZmlsdGVyKGZ1bmN0aW9uKG5uKXtyZXR1cm4iIyI9PW5uLnRhZ1swXT9udWxsOnRoaXN9''@;'; put 'put ''KS5lYWNoKGZ1bmN0aW9uKG5uKXt2YXIgbW49a3ModGhpcyk7Zm9yKHZhciBFbiBvZiBPYmplY3Qua2V5cyhubi5hdHRyaWJ1dGVzKSltbi5hdHRyKEVuLG5uLmF0dHJpYnV0ZXNbRW5dKX0pLmZpbHRlcihmdW5jdGlvbihubil7cmV0dXJuInN2ZyI9PW5uLnRhZ3x8ImciPT1ubi50YWc/bnVs''@;'; put 'put ''bDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDApO3ZhciBRdD15dC5leGl0KCk7VCYmUXQuZWFjaChUKSxsJiYoUXQ9UXQudHJhbnNpdGlvbihsKSxhJiZRdC5maWx0ZXIoZnVuY3Rpb24obm4pe3JldHVybiIjIj09bm4udGFnWzBdP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwwKSksUXQ9''@;'; put 'put ''UXQucmVtb3ZlKCksKHl0PWt0Lm1lcmdlKHl0KSkuZWFjaChnZSl9KHl0KX0uY2FsbChvdC5ub2RlKCksWmUpLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvciYmS2FlLmNhbGwodGhpcyksVy5fZGlzcGF0Y2guY2FsbCgicmVuZGVyRW5kIixXKSxudWxsPT1sJiYodGhp''@;'; put 'put ''cy5fZGlzcGF0Y2guY2FsbCgiZW5kIix0aGlzKSxjJiZjLmNhbGwodGhpcykpLHRoaXN9RVQucHJvdG90eXBlPWkzLnByb3RvdHlwZTt2YXIgcEplPUFycmF5QnVmZmVyLFFsPVVpbnQ4QXJyYXksQVQ9VWludDE2QXJyYXksZ0plPUludDE2QXJyYXksVFQ9SW50MzJBcnJheSwkVT1mdW5jdGlv''@;'; put 'put ''bihjLGwsYSl7aWYoUWwucHJvdG90eXBlLnNsaWNlKXJldHVybiBRbC5wcm90b3R5cGUuc2xpY2UuY2FsbChjLGwsYSk7KG51bGw9PWx8fGw8MCkmJihsPTApLChudWxsPT1hfHxhPmMubGVuZ3RoKSYmKGE9Yy5sZW5ndGgpO3ZhciBkPW5ldyBRbChhLWwpO3JldHVybiBkLnNldChjLnN1YmFy''@;'; put 'put ''cmF5KGwsYSkpLGR9LF93PWZ1bmN0aW9uKGMsbCxhLGQpe2lmKFFsLnByb3RvdHlwZS5maWxsKXJldHVybiBRbC5wcm90b3R5cGUuZmlsbC5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOysrYSlj''@;'; put 'put ''W2FdPWw7cmV0dXJuIGN9LG1KZT1mdW5jdGlvbihjLGwsYSxkKXtpZihRbC5wcm90b3R5cGUuY29weVdpdGhpbilyZXR1cm4gUWwucHJvdG90eXBlLmNvcHlXaXRoaW4uY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkmJihhPTApLChudWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5s''@;'; put 'put ''ZW5ndGgpO2E8ZDspY1tsKytdPWNbYSsrXX0sdkplPVsiaW52YWxpZCB6c3RkIGRhdGEiLCJ3aW5kb3cgc2l6ZSB0b28gbGFyZ2UgKD4yMDQ2TUIpIiwiaW52YWxpZCBibG9jayB0eXBlIiwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoIiwibWF0Y2ggZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwidW5l''@;'; put 'put ''eHBlY3RlZCBFT0YiXSxnYz1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9bmV3IEVycm9yKGx8fHZKZVtjXSk7aWYoZC5jb2RlPWMsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGQsZ2MpLCFhKXRocm93IGQ7cmV0dXJuIGR9LGVsZT1mdW5jdGlvbihjLGws''@;'; put 'put ''YSl7Zm9yKHZhciBkPTAsaD0wO2Q8YTsrK2QpaHw9Y1tsKytdPDwoZDw8Myk7cmV0dXJuIGh9LF9KZT1mdW5jdGlvbihjLGwpe3ZhciBhLGg9Y1swXXxjWzFdPDw4fGNbMl08PDE2O2lmKDMxMjY1Njg9PWgmJjI1Mz09Y1szXSl7dmFyIGY9Y1s0XSxfPWY+PjUmMSxUPWY+PjImMSxXPTMmZixp''@;'; put 'put ''ZT1mPj42OzgmZiYmZ2MoMCk7dmFyIGdlPTYtXyx3ZT0zPT1XPzQ6VyxFZT1lbGUoYyxnZSx3ZSksWmU9aWU/MTw8aWU6XyxvdD1lbGUoYyxnZSs9d2UsWmUpKygxPT1pZSYmMjU2KSxldD1vdDtpZighXyl7dmFyIHl0PTE8PDEwKyhjWzVdPj4zKTtldD15dCsoeXQ+PjMpKig3JmNbNV0pfWV0''@;'; put 'put ''PjIxNDUzODY0OTYmJmdjKDEpO3ZhciBrdD1uZXcgUWwoKDE9PWw/b3R8fGV0Omw/MDpldCkrMTIpO3JldHVybiBrdFswXT0xLGt0WzRdPTQsa3RbOF09OCx7YjpnZStaZSx5OjAsbDowLGQ6RWUsdzpsJiYxIT1sP2w6a3Quc3ViYXJyYXkoMTIpLGU6ZXQsbzpuZXcgVFQoa3QuYnVmZmVyLDAs''@;'; put 'put ''MyksdTpvdCxjOlQsbTpNYXRoLm1pbigxMzEwNzIsZXQpfX1pZigyNTQ4MTg5Mz09KGg+PjR8Y1szXTw8MjApKXJldHVybiA4KygoKGE9YylbNF18YVs1XTw8OHxhWzZdPDwxNnxhWzddPDwyNCk+Pj4wKTtnYygwKX0sSmc9ZnVuY3Rpb24oYyl7Zm9yKHZhciBsPTA7MTw8bDw9YzsrK2wpO3Jl''@;'; put 'put ''dHVybiBsLTF9LGJ3PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD00KyhsPDwzKSxoPTUrKDE1JmNbbF0pO2g+YSYmZ2MoMyk7Zm9yKHZhciBmPTE8PGgsXz1mLFQ9LTEsVz0tMSxpZT0tMSxnZT1mLHdlPW5ldyBwSmUoNTEyKyhmPDwyKSksRWU9bmV3IGdKZSh3ZSwwLDI1NiksWmU9bmV3IEFUKHdl''@;'; put 'put ''LDAsMjU2KSxvdD1uZXcgQVQod2UsNTEyLGYpLGV0PTUxMisoZjw8MSkseXQ9bmV3IFFsKHdlLGV0LGYpLGt0PW5ldyBRbCh3ZSxldCtmKTtUPDI1NSYmXz4wOyl7dmFyIFN0PUpnKF8rMSksUXQ9ZD4+Myxubj0oMTw8U3QrMSktMSxtbj0oY1tRdF18Y1tRdCsxXTw8OHxjW1F0KzJdPDwxNik+''@;'; put 'put ''Pig3JmQpJm5uLEVuPSgxPDxTdCktMSxscj1ubi1fLTEsVnI9bW4mRW47aWYoVnI8bHI/KGQrPVN0LG1uPVZyKTooZCs9U3QrMSxtbj5FbiYmKG1uLT1scikpLEVlWysrVF09LS1tbiwtMT09bW4/KF8rPW1uLHl0Wy0tZ2VdPVQpOl8tPW1uLCFtbilkb3t2YXIgX2k9ZD4+MztXPShjW19pXXxj''@;'; put 'put ''W19pKzFdPDw4KT4+KDcmZCkmMyxkKz0yLFQrPVd9d2hpbGUoMz09Vyl9KFQ+MjU1fHxfKSYmZ2MoMCk7Zm9yKHZhciB1aT0wLGdyPShmPj4xKSsoZj4+MykrMyxFaT1mLTEsVXI9MDtVcjw9VDsrK1VyKXt2YXIgSG49RWVbVXJdO2lmKEhuPDEpWmVbVXJdPS1IbjtlbHNlIGZvcihpZT0wO2ll''@;'; put 'put ''PEhuOysraWUpe3l0W3VpXT1Vcjtkb3t1aT11aStnciZFaX13aGlsZSh1aT49Z2UpfX1mb3IodWkmJmdjKDApLGllPTA7aWU8ZjsrK2llKXt2YXIgUHI9WmVbeXRbaWVdXSsrLFFuPWt0W2llXT1oLUpnKFByKTtvdFtpZV09KFByPDxRbiktZn1yZXR1cm5bZCs3Pj4zLHtiOmgsczp5dCxuOmt0''@;'; put 'put ''LHQ6b3R9XX0sYkplPWJ3KG5ldyBRbChbODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQsOTksMTAyLDEwMiwxMzQsNzAsMTQ2LDRdKSwwLDYpWzFdLHlKZT1idyhuZXcgUWwoWzMzLDIwLDE5NiwyNCw5OSwxNDAsMzMsMTMyLDE2LDY2LDgsMzMsMTMyLDE2LDY2LDgsMzMs''@;'; put 'put ''NjgsNjgsNjgsNjgsNjgsNjgsNjgsNjgsMzYsOV0pLDAsNilbMV0sd0plPWJ3KG5ldyBRbChbMzIsMTMyLDE2LDY2LDEwMiw3MCw2OCw2OCw2OCw2OCwzNiw3MywyXSksMCw1KVsxXSx0bGU9ZnVuY3Rpb24oYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGgsZD1uZXcgVFQoYSksaD0wO2g8YTsrK2gp''@;'; put 'put ''ZFtoXT1sLGwrPTE8PGNbaF07cmV0dXJuIGR9LHFVPW5ldyBRbChuZXcgVFQoWzAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTM0Njc4MDIwLDIwMjA1MDA1NywyNjk0MjIwOTNdKS5idWZmZXIsMCwzNiksQ0plPXRsZShxVSwwKSxLVT1uZXcgUWwobmV3IFRUKFswLDAsMCwwLDAsMCwwLDAs''@;'; put 'put ''MTY4NDMwMDksNTA1Mjg3NzAsMTE3NzY5MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1MyksU0plPXRsZShLVSwzKSx5dz1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9Yy5sZW5ndGgsaD1sLmxlbmd0aCxmPWNbZC0xXSxfPSgxPDxhLmIpLTEsVD0tYS5iO2Z8fGdjKDApO2Zv''@;'; put 'put ''cih2YXIgVz0wLGllPWEuYixnZT0oZDw8MyktOCtKZyhmKS1pZSx3ZT0tMTtnZT5UJiZ3ZTxoOyl7dmFyIEVlPWdlPj4zO2xbKyt3ZV09YS5zW1c9KFc8PGllfChjW0VlXXxjW0VlKzFdPDw4fGNbRWUrMl08PDE2KT4+KDcmZ2UpKSZfXSxnZS09aWU9YS5uW1ddfWdlPT1UJiZ3ZSsxPT1ofHxn''@;'; put 'put ''YygwKX0sTUplPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD02LGg9bC5sZW5ndGgrMz4+MixmPWg8PDEsXz1oK2Y7eXcoYy5zdWJhcnJheShkLGQrPWNbMF18Y1sxXTw8OCksbC5zdWJhcnJheSgwLGgpLGEpLHl3KGMuc3ViYXJyYXkoZCxkKz1jWzJdfGNbM108PDgpLGwuc3ViYXJyYXkoaCxmKSxh''@;'; put 'put ''KSx5dyhjLnN1YmFycmF5KGQsZCs9Y1s0XXxjWzVdPDw4KSxsLnN1YmFycmF5KGYsXyksYSkseXcoYy5zdWJhcnJheShkKSxsLnN1YmFycmF5KF8pLGEpfSx4SmU9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkLGg9bC5iLGY9Y1toXSxfPWY+PjEmMztsLmw9MSZmO3ZhciBUPWY+PjN8Y1toKzFdPDw1''@;'; put 'put ''fGNbaCsyXTw8MTMsVz0oaCs9MykrVDtpZigxPT1fKXJldHVybiBoPj1jLmxlbmd0aD92b2lkIDA6KGwuYj1oKzEsYT8oX3coYSxjW2hdLGwueSxsLnkrPVQpLGEpOl93KG5ldyBRbChUKSxjW2hdKSk7aWYoIShXPmMubGVuZ3RoKSl7aWYoMD09XylyZXR1cm4gbC5iPVcsYT8oYS5zZXQoYy5z''@;'; put 'put ''dWJhcnJheShoLFcpLGwueSksbC55Kz1ULGEpOiRVKGMsaCxXKTtpZigyPT1fKXt2YXIgaWU9Y1toXSxnZT0zJmllLHdlPWllPj4yJjMsRWU9aWU+PjQsWmU9MCxvdD0wO2dlPDI/MSZ3ZT9FZXw9Y1srK2hdPDw0fCgyJndlJiZjWysraF08PDEyKTpFZT1pZT4+Mzoob3Q9d2Usd2U8Mj8oRWV8''@;'; put 'put ''PSg2MyZjWysraF0pPDw0LFplPWNbaF0+PjZ8Y1srK2hdPDwyKToyPT13ZT8oRWV8PWNbKytoXTw8NHwoMyZjWysraF0pPDwxMixaZT1jW2hdPj4yfGNbKytoXTw8Nik6KEVlfD1jWysraF08PDR8KDYzJmNbKytoXSk8PDEyLFplPWNbaF0+PjZ8Y1srK2hdPDwyfGNbKytoXTw8MTApKSwrK2g7''@;'; put 'put ''dmFyIGV0PWE/YS5zdWJhcnJheShsLnksbC55K2wubSk6bmV3IFFsKGwubSkseXQ9ZXQubGVuZ3RoLUVlO2lmKDA9PWdlKWV0LnNldChjLnN1YmFycmF5KGgsaCs9RWUpLHl0KTtlbHNlIGlmKDE9PWdlKV93KGV0LGNbaCsrXSx5dCk7ZWxzZXt2YXIga3Q9bC5oO2lmKDI9PWdlKXt2YXIgU3Q9''@;'; put 'put ''ZnVuY3Rpb24oZ2EsdW8pe3ZhciBBdD0wLElpPS0xLFFzPW5ldyBRbCgyOTIpLGxhPWdhW3VvXSxGcz1Rcy5zdWJhcnJheSgwLDI1NiksZWM9UXMuc3ViYXJyYXkoMjU2LDI2OCksQ2E9bmV3IEFUKFFzLmJ1ZmZlciwyNjgpO2lmKGxhPDEyOCl7dmFyIFJoPWJ3KGdhLHVvKzEsNiksRGw9Umhb''@;'; put 'put ''MV0seDI9UmhbMF08PDMsdTQ9Z2FbdW8rPWxhXTt1NHx8Z2MoMCk7Zm9yKHZhciBPaD0wLENkPTAsJGM9RGwuYixTZD0kYyxKdT0oKyt1bzw8MyktOCtKZyh1NCk7ISgoSnUtPSRjKTx4Mik7KXt2YXIgTTE9SnU+PjM7aWYoRnNbKytJaV09RGwuc1tPaCs9KGdhW00xXXxnYVtNMSsxXTw8OCk+''@;'; put 'put ''Pig3Jkp1KSYoMTw8JGMpLTFdLChKdS09U2QpPHgyKWJyZWFrO0NkKz0oZ2FbTTE9SnU+PjNdfGdhW00xKzFdPDw4KT4+KDcmSnUpJigxPDxTZCktMSxGc1srK0lpXT1EbC5zW0NkXSwkYz1EbC5uW09oXSxPaD1EbC50W09oXSxTZD1EbC5uW0NkXSxDZD1EbC50W0NkXX0rK0lpPjI1NSYmZ2Mo''@;'; put 'put ''MCl9ZWxzZXtmb3IoSWk9bGEtMTI3O0F0PElpO0F0Kz0yKXt2YXIgTXU9Z2FbKyt1b107RnNbQXRdPU11Pj40LEZzW0F0KzFdPTE1Jk11fSsrdW99dmFyIGF1PTA7Zm9yKEF0PTA7QXQ8SWk7KytBdCkoZDQ9RnNbQXRdKT4xMSYmZ2MoMCksYXUrPWQ0JiYxPDxkNC0xO3ZhciB4MT1KZyhhdSkr''@;'; put 'put ''MSxFMj0xPDx4MSxHNz1FMi1hdTtmb3IoRzcmRzctMSYmZ2MoMCksRnNbSWkrK109SmcoRzcpKzEsQXQ9MDtBdDxJaTsrK0F0KXt2YXIgZDQ9RnNbQXRdOysrZWNbRnNbQXRdPWQ0JiZ4MSsxLWQ0XX12YXIgQ3c9bmV3IFFsKEUyPDwxKSxlbT1Ddy5zdWJhcnJheSgwLEUyKSxTdz1Ddy5zdWJh''@;'; put 'put ''cnJheShFMik7Zm9yKENhW3gxXT0wLEF0PXgxO0F0PjA7LS1BdCl7dmFyIE13PUNhW0F0XTtfdyhTdyxBdCxNdyxDYVtBdC0xXT1NdytlY1tBdF0qKDE8PHgxLUF0KSl9Zm9yKENhWzBdIT1FMiYmZ2MoMCksQXQ9MDtBdDxJaTsrK0F0KXt2YXIgdG09RnNbQXRdO2lmKHRtKXt2YXIgeHc9Q2Fb''@;'; put 'put ''dG1dO193KGVtLEF0LHh3LENhW3RtXT14dysoMTw8eDEtdG0pKX19cmV0dXJuW3VvLHtuOlN3LGI6eDEsczplbX1dfShjLGgpO1plKz1oLShoPVN0WzBdKSxsLmg9a3Q9U3RbMV19ZWxzZSBrdHx8Z2MoMCk7KG90P01KZTp5dykoYy5zdWJhcnJheShoLGgrPVplKSxldC5zdWJhcnJheSh5dCks''@;'; put 'put ''a3QpfXZhciBRdD1jW2grK107aWYoUXQpezI1NT09UXQ/UXQ9MzI1MTIrKGNbaCsrXXxjW2grK108PDgpOlF0PjEyNyYmKFF0PVF0LTEyODw8OHxjW2grK10pO3ZhciBubj1jW2grK107MyZubiYmZ2MoMCk7Zm9yKHZhciBtbj1beUplLHdKZSxiSmVdLEVuPTI7RW4+LTE7LS1Fbil7dmFyIGxy''@;'; put 'put ''PW5uPj4yKyhFbjw8MSkmMztpZigxPT1scil7dmFyIFZyPW5ldyBRbChbMCwwLGNbaCsrXV0pO21uW0VuXT17czpWci5zdWJhcnJheSgyLDMpLG46VnIuc3ViYXJyYXkoMCwxKSx0Om5ldyBBVChWci5idWZmZXIsMCwxKSxiOjB9fWVsc2UgMj09bHI/KGg9KGQ9YncoYyxoLDktKDEmRW4pKSlb''@;'; put 'put ''MF0sbW5bRW5dPWRbMV0pOjM9PWxyJiYobC50fHxnYygwKSxtbltFbl09bC50W0VuXSl9dmFyIF9pPWwudD1tbix1aT1faVswXSxncj1faVsxXSxFaT1faVsyXSxVcj1jW1ctMV07VXJ8fGdjKDApO3ZhciBIbj0oVzw8MyktOCtKZyhVciktRWkuYixQcj1Ibj4+MyxRbj0wLE1yPShjW1ByXXxj''@;'; put 'put ''W1ByKzFdPDw4KT4+KDcmSG4pJigxPDxFaS5iKS0xLF9yPShjW1ByPShIbi09Z3IuYik+PjNdfGNbUHIrMV08PDgpPj4oNyZIbikmKDE8PGdyLmIpLTEsdnQ9KGNbUHI9KEhuLT11aS5iKT4+M118Y1tQcisxXTw8OCk+Pig3JkhuKSYoMTw8dWkuYiktMTtmb3IoKytRdDstLVF0Oyl7dmFyIE90''@;'; put 'put ''PUVpLnNbTXJdLGNuPUVpLm5bTXJdLGtuPXVpLnNbdnRdLFBuPXVpLm5bdnRdLEpuPWdyLnNbX3JdLE9yPWdyLm5bX3JdLFJyPTE8PEpuLCRyPVJyKygoY1tQcj0oSG4tPUpuKT4+M118Y1tQcisxXTw8OHxjW1ByKzJdPDwxNnxjW1ByKzNdPDwyNCk+Pj4oNyZIbikmUnItMSk7UHI9KEhuLT1L''@;'; put 'put ''VVtrbl0pPj4zO3ZhciBacj1TSmVba25dKygoY1tQcl18Y1tQcisxXTw8OHxjW1ByKzJdPDwxNik+Pig3JkhuKSYoMTw8S1Vba25dKS0xKTtQcj0oSG4tPXFVW090XSk+PjM7dmFyIEhyPUNKZVtPdF0rKChjW1ByXXxjW1ByKzFdPDw4fGNbUHIrMl08PDE2KT4+KDcmSG4pJigxPDxxVVtPdF0p''@;'; put 'put ''LTEpO2lmKFByPShIbi09Y24pPj4zLE1yPUVpLnRbTXJdKygoY1tQcl18Y1tQcisxXTw8OCk+Pig3JkhuKSYoMTw8Y24pLTEpLFByPShIbi09UG4pPj4zLHZ0PXVpLnRbdnRdKygoY1tQcl18Y1tQcisxXTw8OCk+Pig3JkhuKSYoMTw8UG4pLTEpLFByPShIbi09T3IpPj4zLF9yPWdyLnRbX3Jd''@;'; put 'put ''KygoY1tQcl18Y1tQcisxXTw8OCk+Pig3JkhuKSYoMTw8T3IpLTEpLCRyPjMpbC5vWzJdPWwub1sxXSxsLm9bMV09bC5vWzBdLGwub1swXT0kci09MztlbHNle3ZhciBSaT0kci0oMCE9SHIpO1JpPygkcj0zPT1SaT9sLm9bMF0tMTpsLm9bUmldLFJpPjEmJihsLm9bMl09bC5vWzFdKSxsLm9b''@;'; put 'put ''MV09bC5vWzBdLGwub1swXT0kcik6JHI9bC5vWzBdfWZvcihFbj0wO0VuPEhyOysrRW4pZXRbUW4rRW5dPWV0W3l0K0VuXTt5dCs9SHI7dmFyIFhvPShRbis9SHIpLSRyO2lmKFhvPDApe3ZhciBHbz0tWG8sSnM9bC5lK1hvO2ZvcihHbz5aciYmKEdvPVpyKSxFbj0wO0VuPEdvOysrRW4pZXRb''@;'; put 'put ''UW4rRW5dPWwud1tKcytFbl07UW4rPUdvLFpyLT1HbyxYbz0wfWZvcihFbj0wO0VuPFpyOysrRW4pZXRbUW4rRW5dPWV0W1hvK0VuXTtRbis9WnJ9aWYoUW4hPXl0KWZvcig7eXQ8ZXQubGVuZ3RoOylldFtRbisrXT1ldFt5dCsrXTtlbHNlIFFuPWV0Lmxlbmd0aDthP2wueSs9UW46ZXQ9JFUo''@;'; put 'put ''ZXQsMCxRbil9ZWxzZSBpZihhKXtpZihsLnkrPUVlLHl0KWZvcihFbj0wO0VuPEVlOysrRW4pZXRbRW5dPWV0W3l0K0VuXX1lbHNlIHl0JiYoZXQ9JFUoZXQseXQpKTtyZXR1cm4gbC5iPVcsZXR9Z2MoMil9fTt2YXIgQUplPSh0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50''@;'; put 'put ''U2NyaXB0JiZkb2N1bWVudCxmdW5jdGlvbihjKXt2YXIgbCxhLGQ9dm9pZCAwIT09KGM9Y3x8e30pP2M6e307ZC5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihzdCxndCl7bD1zdCxhPWd0fSk7dmFyIGgsZj1PYmplY3QuYXNzaWduKHt9LGQpLF89Ii4vdGhpcy5wcm9ncmFtIixUPShzdCxn''@;'; put 'put ''dCk9Pnt0aHJvdyBndH0sVz1kLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGllPWQucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oZCxmKSxmPW51bGwsZC50aGlzUHJvZ3JhbSYmKF89ZC50aGlzUHJvZ3JhbSksZC5xdWl0JiYoVD1k''@;'; put 'put ''LnF1aXQpLGQud2FzbUJpbmFyeSYmKGg9ZC53YXNtQmluYXJ5KTt2YXIgZ2Usd2U9ZC5ub0V4aXRSdW50aW1lfHwhMDsib2JqZWN0IiE9dHlwZW9mIFdlYkFzc2VtYmx5JiZrbigibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpO3ZhciBFZT0hMTtmdW5jdGlvbiBaZShzdCxndCl7''@;'; put 'put ''c3R8fGtuKGd0KX12YXIgb3QsZXQseXQsa3QsU3QsUXQsbm4sbW49dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24gRW4oc3QsZ3QsUnQpe2Zvcih2YXIgdG49Z3QrUnQsd249Z3Q7c3Rbd25dJiYhKHduPj10bik7KSsrd247aWYo''@;'; put 'put ''d24tZ3Q+MTYmJnN0LmJ1ZmZlciYmbW4pcmV0dXJuIG1uLmRlY29kZShzdC5zdWJhcnJheShndCx3bikpO2Zvcih2YXIgc3I9IiI7Z3Q8d247KXt2YXIgY3I9c3RbZ3QrK107aWYoMTI4JmNyKXt2YXIgTHI9NjMmc3RbZ3QrK107aWYoMTkyIT0oMjI0JmNyKSl7dmFyIGdvPTYzJnN0W2d0Kytd''@;'; put 'put ''O2lmKChjcj0yMjQ9PSgyNDAmY3IpPygxNSZjcik8PDEyfExyPDw2fGdvOig3JmNyKTw8MTh8THI8PDEyfGdvPDw2fDYzJnN0W2d0KytdKTw2NTUzNilzcis9U3RyaW5nLmZyb21DaGFyQ29kZShjcik7ZWxzZXt2YXIgTW89Y3ItNjU1MzY7c3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8''@;'; put 'put ''TW8+PjEwLDU2MzIwfDEwMjMmTW8pfX1lbHNlIHNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZjcik8PDZ8THIpfWVsc2Ugc3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoY3IpfXJldHVybiBzcn1mdW5jdGlvbiBscihzdCxndCl7cmV0dXJuIHN0P0VuKHl0LHN0LGd0KToiIn1mdW5jdGlvbiBW''@;'; put 'put ''cihzdCxndCxSdCx0bil7aWYoISh0bj4wKSlyZXR1cm4gMDtmb3IodmFyIHduPVJ0LHNyPVJ0K3RuLTEsY3I9MDtjcjxzdC5sZW5ndGg7Kytjcil7dmFyIExyPXN0LmNoYXJDb2RlQXQoY3IpO2lmKExyPj01NTI5NiYmTHI8PTU3MzQzJiYoTHI9NjU1MzYrKCgxMDIzJkxyKTw8MTApfDEwMjMm''@;'; put 'put ''c3QuY2hhckNvZGVBdCgrK2NyKSksTHI8PTEyNyl7aWYoUnQ+PXNyKWJyZWFrO2d0W1J0KytdPUxyfWVsc2UgaWYoTHI8PTIwNDcpe2lmKFJ0KzE+PXNyKWJyZWFrO2d0W1J0KytdPTE5MnxMcj4+NixndFtSdCsrXT0xMjh8NjMmTHJ9ZWxzZSBpZihMcjw9NjU1MzUpe2lmKFJ0KzI+PXNyKWJy''@;'; put 'put ''ZWFrO2d0W1J0KytdPTIyNHxMcj4+MTIsZ3RbUnQrK109MTI4fExyPj42JjYzLGd0W1J0KytdPTEyOHw2MyZMcn1lbHNle2lmKFJ0KzM+PXNyKWJyZWFrO2d0W1J0KytdPTI0MHxMcj4+MTgsZ3RbUnQrK109MTI4fExyPj4xMiY2MyxndFtSdCsrXT0xMjh8THI+PjYmNjMsZ3RbUnQrK109MTI4''@;'; put 'put ''fDYzJkxyfX1yZXR1cm4gZ3RbUnRdPTAsUnQtd259ZnVuY3Rpb24gX2koc3Qpe2Zvcih2YXIgZ3Q9MCxSdD0wO1J0PHN0Lmxlbmd0aDsrK1J0KXt2YXIgdG49c3QuY2hhckNvZGVBdChSdCk7dG48PTEyNz9ndCsrOnRuPD0yMDQ3P2d0Kz0yOnRuPj01NTI5NiYmdG48PTU3MzQzPyhndCs9NCwr''@;'; put 'put ''K1J0KTpndCs9M31yZXR1cm4gZ3R9ZnVuY3Rpb24gdWkoc3Qpe290PXN0LGQuSEVBUDg9ZXQ9bmV3IEludDhBcnJheShzdCksZC5IRUFQMTY9a3Q9bmV3IEludDE2QXJyYXkoc3QpLGQuSEVBUDMyPVN0PW5ldyBJbnQzMkFycmF5KHN0KSxkLkhFQVBVOD15dD1uZXcgVWludDhBcnJheShzdCks''@;'; put 'put ''ZC5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShzdCksZC5IRUFQVTMyPVF0PW5ldyBVaW50MzJBcnJheShzdCksZC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoc3QpLGQuSEVBUEY2ND1ubj1uZXcgRmxvYXQ2NEFycmF5KHN0KX12YXIgZ3IsRWksVXIsSG4sUHI9W10sUW49W10sTXI9W10sX3I9''@;'; put 'put ''MCx2dD1udWxsO2Z1bmN0aW9uIE90KHN0KXtfcisrLGQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKF9yKX1mdW5jdGlvbiBjbihzdCl7aWYoX3ItLSxkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJmQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhfciks''@;'; put 'put ''MD09X3ImJnZ0KXt2YXIgZ3Q9dnQ7dnQ9bnVsbCxndCgpfX1mdW5jdGlvbiBrbihzdCl7ZC5vbkFib3J0JiZkLm9uQWJvcnQoc3QpLGllKHN0PSJBYm9ydGVkKCIrc3QrIikiKSxFZT0hMCxzdCs9Ii4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4iO3ZhciBndD1uZXcg''@;'; put 'put ''V2ViQXNzZW1ibHkuUnVudGltZUVycm9yKHN0KTt0aHJvdyBhKGd0KSxndH1mdW5jdGlvbiBQbihzdCl7cmV0dXJuIHN0LnN0YXJ0c1dpdGgoImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiKX1Qbihncj0iZ3JhcGh2aXpsaWIud2FzbSIpfHwoRWk9Z3IsZ3I9ZC5sb2Nh''@;'; put 'put ''dGVGaWxlP2QubG9jYXRlRmlsZShFaSwiIik6IiIrRWkpO3ZhciBScj17MTc1NjY0OihzdCxndCk9Pnt2YXIgUnQ9bHIoc3QpLHRuPWxyKGd0KTtBdC5jcmVhdGVQYXRoKCIvIixSaS5kaXJuYW1lKFJ0KSksQXQud3JpdGVGaWxlKFJpLmpvaW4oIi8iLFJ0KSx0bil9fTtmdW5jdGlvbiAkcihz''@;'; put 'put ''dCl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitzdCsiKSIsdGhpcy5zdGF0dXM9c3R9ZnVuY3Rpb24gWnIoc3Qpe2Zvcig7c3QubGVuZ3RoPjA7KXN0LnNoaWZ0KCkoZCl9ZnVuY3Rpb24gSHIoc3Qpe3RoaXMuZXhj''@;'; put 'put ''UHRyPXN0LHRoaXMucHRyPXN0LTI0LHRoaXMuc2V0X3R5cGU9ZnVuY3Rpb24oZ3Qpe1F0W3RoaXMucHRyKzQ+PjJdPWd0fSx0aGlzLmdldF90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIFF0W3RoaXMucHRyKzQ+PjJdfSx0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKGd0KXtRdFt0aGlzLnB0''@;'; put 'put ''cis4Pj4yXT1ndH0sdGhpcy5nZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBRdFt0aGlzLnB0cis4Pj4yXX0sdGhpcy5zZXRfcmVmY291bnQ9ZnVuY3Rpb24oZ3Qpe1N0W3RoaXMucHRyPj4yXT1ndH0sdGhpcy5zZXRfY2F1Z2h0PWZ1bmN0aW9uKGd0KXtldFt0aGlzLnB0cisxMj4+''@;'; put 'put ''MF09Z3Q9Z3Q/MTowfSx0aGlzLmdldF9jYXVnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9ZXRbdGhpcy5wdHIrMTI+PjBdfSx0aGlzLnNldF9yZXRocm93bj1mdW5jdGlvbihndCl7ZXRbdGhpcy5wdHIrMTM+PjBdPWd0PWd0PzE6MH0sdGhpcy5nZXRfcmV0aHJvd249ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gMCE9ZXRbdGhpcy5wdHIrMTM+PjBdfSx0aGlzLmluaXQ9ZnVuY3Rpb24oZ3QsUnQpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKGd0KSx0aGlzLnNldF9kZXN0cnVjdG9yKFJ0KSx0aGlzLnNldF9yZWZjb3VudCgwKSx0aGlzLnNldF9jYXVnaHQoITEpLHRoaXMu''@;'; put 'put ''c2V0X3JldGhyb3duKCExKX0sdGhpcy5hZGRfcmVmPWZ1bmN0aW9uKCl7U3RbdGhpcy5wdHI+PjJdPVN0W3RoaXMucHRyPj4yXSsxfSx0aGlzLnJlbGVhc2VfcmVmPWZ1bmN0aW9uKCl7dmFyIGd0PVN0W3RoaXMucHRyPj4yXTtyZXR1cm4gU3RbdGhpcy5wdHI+PjJdPWd0LTEsMT09PWd0fSx0''@;'; put 'put ''aGlzLnNldF9hZGp1c3RlZF9wdHI9ZnVuY3Rpb24oZ3Qpe1F0W3RoaXMucHRyKzE2Pj4yXT1ndH0sdGhpcy5nZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKCl7cmV0dXJuIFF0W3RoaXMucHRyKzE2Pj4yXX0sdGhpcy5nZXRfZXhjZXB0aW9uX3B0cj1mdW5jdGlvbigpe2lmKHRtKHRoaXMuZ2V0''@;'; put 'put ''X3R5cGUoKSkpcmV0dXJuIFF0W3RoaXMuZXhjUHRyPj4yXTt2YXIgZ3Q9dGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7cmV0dXJuIDAhPT1ndD9ndDp0aGlzLmV4Y1B0cn19dmFyIFJpPXtpc0FiczpzdD0+Ii8iPT09c3QuY2hhckF0KDApLHNwbGl0UGF0aDpzdD0+L14oXC8/fCkoW1xzXFNdKj8p''@;'; put 'put ''KCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLmV4ZWMoc3QpLnNsaWNlKDEpLG5vcm1hbGl6ZUFycmF5OihzdCxndCk9Pntmb3IodmFyIFJ0PTAsdG49c3QubGVuZ3RoLTE7dG4+PTA7dG4tLSl7dmFyIHduPXN0W3RuXTsiLiI9PT13bj9zdC5zcGxpY2UodG4s''@;'; put 'put ''MSk6Ii4uIj09PXduPyhzdC5zcGxpY2UodG4sMSksUnQrKyk6UnQmJihzdC5zcGxpY2UodG4sMSksUnQtLSl9aWYoZ3QpZm9yKDtSdDtSdC0tKXN0LnVuc2hpZnQoIi4uIik7cmV0dXJuIHN0fSxub3JtYWxpemU6c3Q9Pnt2YXIgZ3Q9UmkuaXNBYnMoc3QpLFJ0PSIvIj09PXN0LnN1YnN0cigt''@;'; put 'put ''MSk7cmV0dXJuKHN0PVJpLm5vcm1hbGl6ZUFycmF5KHN0LnNwbGl0KCIvIikuZmlsdGVyKHRuPT4hIXRuKSwhZ3QpLmpvaW4oIi8iKSl8fGd0fHwoc3Q9Ii4iKSxzdCYmUnQmJihzdCs9Ii8iKSwoZ3Q/Ii8iOiIiKStzdH0sZGlybmFtZTpzdD0+e3ZhciBndD1SaS5zcGxpdFBhdGgoc3QpLFJ0''@;'; put 'put ''PWd0WzBdLHRuPWd0WzFdO3JldHVybiBSdHx8dG4/KHRuJiYodG49dG4uc3Vic3RyKDAsdG4ubGVuZ3RoLTEpKSxSdCt0bik6Ii4ifSxiYXNlbmFtZTpzdD0+e2lmKCIvIj09PXN0KXJldHVybiIvIjt2YXIgZ3Q9KHN0PShzdD1SaS5ub3JtYWxpemUoc3QpKS5yZXBsYWNlKC9cLyQvLCIiKSku''@;'; put 'put ''bGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWd0P3N0OnN0LnN1YnN0cihndCsxKX0sam9pbjpmdW5jdGlvbigpe3ZhciBzdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBSaS5ub3JtYWxpemUoc3Quam9pbigiLyIpKX0sam9pbjI6KHN0LGd0KT0+Umku''@;'; put 'put ''bm9ybWFsaXplKHN0KyIvIitndCl9LFhvPXtyZXNvbHZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBzdD0iIixndD0hMSxSdD1hcmd1bWVudHMubGVuZ3RoLTE7UnQ+PS0xJiYhZ3Q7UnQtLSl7dmFyIHRuPVJ0Pj0wP2FyZ3VtZW50c1tSdF06QXQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiB0bil0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKCF0bilyZXR1cm4iIjtzdD10bisiLyIrc3QsZ3Q9UmkuaXNBYnModG4pfXJldHVybihndD8iLyI6IiIpKyhzdD1SaS5ub3JtYWxpemVBcnJheShzdC5zcGxpdCgiLyIpLmZp''@;'; put 'put ''bHRlcih3bj0+ISF3biksIWd0KS5qb2luKCIvIikpfHwiLiJ9LHJlbGF0aXZlOihzdCxndCk9PntmdW5jdGlvbiBSdChNbyl7Zm9yKHZhciBmbz0wO2ZvPE1vLmxlbmd0aCYmIiI9PT1Nb1tmb107Zm8rKyk7Zm9yKHZhciBKbz1Nby5sZW5ndGgtMTtKbz49MCYmIiI9PT1Nb1tKb107Sm8tLSk7''@;'; put 'put ''cmV0dXJuIGZvPkpvP1tdOk1vLnNsaWNlKGZvLEpvLWZvKzEpfXN0PVhvLnJlc29sdmUoc3QpLnN1YnN0cigxKSxndD1Yby5yZXNvbHZlKGd0KS5zdWJzdHIoMSk7Zm9yKHZhciB0bj1SdChzdC5zcGxpdCgiLyIpKSx3bj1SdChndC5zcGxpdCgiLyIpKSxzcj1NYXRoLm1pbih0bi5sZW5ndGgs''@;'; put 'put ''d24ubGVuZ3RoKSxjcj1zcixMcj0wO0xyPHNyO0xyKyspaWYodG5bTHJdIT09d25bTHJdKXtjcj1McjticmVha312YXIgZ289W107Zm9yKExyPWNyO0xyPHRuLmxlbmd0aDtMcisrKWdvLnB1c2goIi4uIik7cmV0dXJuKGdvPWdvLmNvbmNhdCh3bi5zbGljZShjcikpKS5qb2luKCIvIil9fTtm''@;'; put 'put ''dW5jdGlvbiBHbyhzdCxndCxSdCl7dmFyIHRuPVJ0PjA/UnQ6X2koc3QpKzEsd249bmV3IEFycmF5KHRuKSxzcj1WcihzdCx3biwwLHduLmxlbmd0aCk7cmV0dXJuIGd0JiYod24ubGVuZ3RoPXNyKSx3bn12YXIgSnM9e3R0eXM6W10saW5pdDpmdW5jdGlvbigpe30sc2h1dGRvd246ZnVuY3Rp''@;'; put 'put ''b24oKXt9LHJlZ2lzdGVyOmZ1bmN0aW9uKHN0LGd0KXtKcy50dHlzW3N0XT17aW5wdXQ6W10sb3V0cHV0OltdLG9wczpndH0sQXQucmVnaXN0ZXJEZXZpY2Uoc3QsSnMuc3RyZWFtX29wcyl9LHN0cmVhbV9vcHM6e29wZW46ZnVuY3Rpb24oc3Qpe3ZhciBndD1Kcy50dHlzW3N0Lm5vZGUucmRl''@;'; put 'put ''dl07aWYoIWd0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQzKTtzdC50dHk9Z3Qsc3Quc2Vla2FibGU9ITF9LGNsb3NlOmZ1bmN0aW9uKHN0KXtzdC50dHkub3BzLmZzeW5jKHN0LnR0eSl9LGZzeW5jOmZ1bmN0aW9uKHN0KXtzdC50dHkub3BzLmZzeW5jKHN0LnR0eSl9LHJlYWQ6ZnVuY3Rp''@;'; put 'put ''b24oc3QsZ3QsUnQsdG4sd24pe2lmKCFzdC50dHl8fCFzdC50dHkub3BzLmdldF9jaGFyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYwKTtmb3IodmFyIHNyPTAsY3I9MDtjcjx0bjtjcisrKXt2YXIgTHI7dHJ5e0xyPXN0LnR0eS5vcHMuZ2V0X2NoYXIoc3QudHR5KX1jYXRjaHt0aHJvdyBu''@;'; put 'put ''ZXcgQXQuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09THImJjA9PT1zcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2KTtpZihudWxsPT1McilicmVhaztzcisrLGd0W1J0K2NyXT1Mcn1yZXR1cm4gc3ImJihzdC5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxzcn0sd3JpdGU6ZnVuY3Rp''@;'; put 'put ''b24oc3QsZ3QsUnQsdG4sd24pe2lmKCFzdC50dHl8fCFzdC50dHkub3BzLnB1dF9jaGFyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYwKTt0cnl7Zm9yKHZhciBzcj0wO3NyPHRuO3NyKyspc3QudHR5Lm9wcy5wdXRfY2hhcihzdC50dHksZ3RbUnQrc3JdKX1jYXRjaHt0aHJvdyBuZXcgQXQu''@;'; put 'put ''RXJybm9FcnJvcigyOSl9cmV0dXJuIHRuJiYoc3Qubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksc3J9fSxkZWZhdWx0X3R0eV9vcHM6e2dldF9jaGFyOmZ1bmN0aW9uKHN0KXtpZighc3QuaW5wdXQubGVuZ3RoKXt2YXIgZ3Q9bnVsbDtpZih0eXBlb2Ygd2luZG93PCJ1IiYmImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHdpbmRvdy5wcm9tcHQ/bnVsbCE9PShndD13aW5kb3cucHJvbXB0KCJJbnB1dDogIikpJiYoZ3QrPSJcbiIpOiJmdW5jdGlvbiI9PXR5cGVvZiByZWFkbGluZSYmbnVsbCE9PShndD1yZWFkbGluZSgpKSYmKGd0Kz0iXG4iKSwhZ3QpcmV0dXJuIG51bGw7c3QuaW5wdXQ9R28o''@;'; put 'put ''Z3QsITApfXJldHVybiBzdC5pbnB1dC5zaGlmdCgpfSxwdXRfY2hhcjpmdW5jdGlvbihzdCxndCl7bnVsbD09PWd0fHwxMD09PWd0PyhXKEVuKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0PVtdKTowIT1ndCYmc3Qub3V0cHV0LnB1c2goZ3QpfSxmc3luYzpmdW5jdGlvbihzdCl7c3Qub3V0cHV0''@;'; put 'put ''JiZzdC5vdXRwdXQubGVuZ3RoPjAmJihXKEVuKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0PVtdKX19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyOmZ1bmN0aW9uKHN0LGd0KXtudWxsPT09Z3R8fDEwPT09Z3Q/KGllKEVuKHN0Lm91dHB1dCwwKSksc3Qub3V0cHV0PVtdKTowIT1ndCYmc3Qu''@;'; put 'put ''b3V0cHV0LnB1c2goZ3QpfSxmc3luYzpmdW5jdGlvbihzdCl7c3Qub3V0cHV0JiZzdC5vdXRwdXQubGVuZ3RoPjAmJihpZShFbihzdC5vdXRwdXQsMCkpLHN0Lm91dHB1dD1bXSl9fX07ZnVuY3Rpb24gZ2Eoc3Qpe3N0PTY1NTM2Kk1hdGguY2VpbChzdC82NTUzNik7dmFyIFJ0LGd0PU13KDY1''@;'; put 'put ''NTM2LHN0KTtyZXR1cm4gZ3Q/KHl0LmZpbGwoMCxSdD1ndCxSdCtzdCksUnQpOjB9dmFyIHVvPXtvcHNfdGFibGU6bnVsbCxtb3VudDpmdW5jdGlvbihzdCl7cmV0dXJuIHVvLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUsMCl9LGNyZWF0ZU5vZGU6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe2lm''@;'; put 'put ''KEF0LmlzQmxrZGV2KFJ0KXx8QXQuaXNGSUZPKFJ0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7dW8ub3BzX3RhYmxlfHwodW8ub3BzX3RhYmxlPXtkaXI6e25vZGU6e2dldGF0dHI6dW8ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOnVvLm5vZGVfb3BzLnNldGF0dHIsbG9va3VwOnVv''@;'; put 'put ''Lm5vZGVfb3BzLmxvb2t1cCxta25vZDp1by5ub2RlX29wcy5ta25vZCxyZW5hbWU6dW8ubm9kZV9vcHMucmVuYW1lLHVubGluazp1by5ub2RlX29wcy51bmxpbmsscm1kaXI6dW8ubm9kZV9vcHMucm1kaXIscmVhZGRpcjp1by5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6dW8ubm9kZV9vcHMu''@;'; put 'put ''c3ltbGlua30sc3RyZWFtOntsbHNlZWs6dW8uc3RyZWFtX29wcy5sbHNlZWt9fSxmaWxlOntub2RlOntnZXRhdHRyOnVvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp1by5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06e2xsc2Vlazp1by5zdHJlYW1fb3BzLmxsc2VlayxyZWFkOnVvLnN0cmVh''@;'; put 'put ''bV9vcHMucmVhZCx3cml0ZTp1by5zdHJlYW1fb3BzLndyaXRlLGFsbG9jYXRlOnVvLnN0cmVhbV9vcHMuYWxsb2NhdGUsbW1hcDp1by5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6dW8uc3RyZWFtX29wcy5tc3luY319LGxpbms6e25vZGU6e2dldGF0dHI6dW8ubm9kZV9vcHMuZ2V0YXR0cixzZXRh''@;'; put 'put ''dHRyOnVvLm5vZGVfb3BzLnNldGF0dHIscmVhZGxpbms6dW8ubm9kZV9vcHMucmVhZGxpbmt9LHN0cmVhbTp7fX0sY2hyZGV2Ontub2RlOntnZXRhdHRyOnVvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp1by5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06QXQuY2hyZGV2X3N0cmVhbV9vcHN9''@;'; put 'put ''fSk7dmFyIHduPUF0LmNyZWF0ZU5vZGUoc3QsZ3QsUnQsdG4pO3JldHVybiBBdC5pc0Rpcih3bi5tb2RlKT8od24ubm9kZV9vcHM9dW8ub3BzX3RhYmxlLmRpci5ub2RlLHduLnN0cmVhbV9vcHM9dW8ub3BzX3RhYmxlLmRpci5zdHJlYW0sd24uY29udGVudHM9e30pOkF0LmlzRmlsZSh3bi5t''@;'; put 'put ''b2RlKT8od24ubm9kZV9vcHM9dW8ub3BzX3RhYmxlLmZpbGUubm9kZSx3bi5zdHJlYW1fb3BzPXVvLm9wc190YWJsZS5maWxlLnN0cmVhbSx3bi51c2VkQnl0ZXM9MCx3bi5jb250ZW50cz1udWxsKTpBdC5pc0xpbmsod24ubW9kZSk/KHduLm5vZGVfb3BzPXVvLm9wc190YWJsZS5saW5rLm5v''@;'; put 'put ''ZGUsd24uc3RyZWFtX29wcz11by5vcHNfdGFibGUubGluay5zdHJlYW0pOkF0LmlzQ2hyZGV2KHduLm1vZGUpJiYod24ubm9kZV9vcHM9dW8ub3BzX3RhYmxlLmNocmRldi5ub2RlLHduLnN0cmVhbV9vcHM9dW8ub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLHduLnRpbWVzdGFtcD1EYXRlLm5v''@;'; put 'put ''dygpLHN0JiYoc3QuY29udGVudHNbZ3RdPXduLHN0LnRpbWVzdGFtcD13bi50aW1lc3RhbXApLHdufSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheTpmdW5jdGlvbihzdCl7cmV0dXJuIHN0LmNvbnRlbnRzP3N0LmNvbnRlbnRzLnN1YmFycmF5P3N0LmNvbnRlbnRzLnN1YmFycmF5KDAsc3QudXNl''@;'; put 'put ''ZEJ5dGVzKTpuZXcgVWludDhBcnJheShzdC5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCl9LGV4cGFuZEZpbGVTdG9yYWdlOmZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9c3QuY29udGVudHM/c3QuY29udGVudHMubGVuZ3RoOjA7aWYoIShSdD49Z3QpKXtndD1NYXRoLm1heChndCxSdCooUnQ8''@;'; put 'put ''MTA0ODU3Nj8yOjEuMTI1KT4+PjApLDAhPVJ0JiYoZ3Q9TWF0aC5tYXgoZ3QsMjU2KSk7dmFyIHRuPXN0LmNvbnRlbnRzO3N0LmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGd0KSxzdC51c2VkQnl0ZXM+MCYmc3QuY29udGVudHMuc2V0KHRuLnN1YmFycmF5KDAsc3QudXNlZEJ5dGVzKSwwKX19''@;'; put 'put ''LHJlc2l6ZUZpbGVTdG9yYWdlOmZ1bmN0aW9uKHN0LGd0KXtpZihzdC51c2VkQnl0ZXMhPWd0KWlmKDA9PWd0KXN0LmNvbnRlbnRzPW51bGwsc3QudXNlZEJ5dGVzPTA7ZWxzZXt2YXIgUnQ9c3QuY29udGVudHM7c3QuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkoZ3QpLFJ0JiZzdC5jb250ZW50''@;'; put 'put ''cy5zZXQoUnQuc3ViYXJyYXkoMCxNYXRoLm1pbihndCxzdC51c2VkQnl0ZXMpKSksc3QudXNlZEJ5dGVzPWd0fX0sbm9kZV9vcHM6e2dldGF0dHI6ZnVuY3Rpb24oc3Qpe3ZhciBndD17fTtyZXR1cm4gZ3QuZGV2PUF0LmlzQ2hyZGV2KHN0Lm1vZGUpP3N0LmlkOjEsZ3QuaW5vPXN0LmlkLGd0''@;'; put 'put ''Lm1vZGU9c3QubW9kZSxndC5ubGluaz0xLGd0LnVpZD0wLGd0LmdpZD0wLGd0LnJkZXY9c3QucmRldixndC5zaXplPUF0LmlzRGlyKHN0Lm1vZGUpPzQwOTY6QXQuaXNGaWxlKHN0Lm1vZGUpP3N0LnVzZWRCeXRlczpBdC5pc0xpbmsoc3QubW9kZSk/c3QubGluay5sZW5ndGg6MCxndC5hdGlt''@;'; put 'put ''ZT1uZXcgRGF0ZShzdC50aW1lc3RhbXApLGd0Lm10aW1lPW5ldyBEYXRlKHN0LnRpbWVzdGFtcCksZ3QuY3RpbWU9bmV3IERhdGUoc3QudGltZXN0YW1wKSxndC5ibGtzaXplPTQwOTYsZ3QuYmxvY2tzPU1hdGguY2VpbChndC5zaXplL2d0LmJsa3NpemUpLGd0fSxzZXRhdHRyOmZ1bmN0aW9u''@;'; put 'put ''KHN0LGd0KXt2b2lkIDAhPT1ndC5tb2RlJiYoc3QubW9kZT1ndC5tb2RlKSx2b2lkIDAhPT1ndC50aW1lc3RhbXAmJihzdC50aW1lc3RhbXA9Z3QudGltZXN0YW1wKSx2b2lkIDAhPT1ndC5zaXplJiZ1by5yZXNpemVGaWxlU3RvcmFnZShzdCxndC5zaXplKX0sbG9va3VwOmZ1bmN0aW9uKHN0''@;'; put 'put ''LGd0KXt0aHJvdyBBdC5nZW5lcmljRXJyb3JzWzQ0XX0sbWtub2Q6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3JldHVybiB1by5jcmVhdGVOb2RlKHN0LGd0LFJ0LHRuKX0scmVuYW1lOmZ1bmN0aW9uKHN0LGd0LFJ0KXtpZihBdC5pc0RpcihzdC5tb2RlKSl7dmFyIHRuO3RyeXt0bj1BdC5sb29r''@;'; put 'put ''dXBOb2RlKGd0LFJ0KX1jYXRjaHt9aWYodG4pZm9yKHZhciB3biBpbiB0bi5jb250ZW50cyl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NSl9ZGVsZXRlIHN0LnBhcmVudC5jb250ZW50c1tzdC5uYW1lXSxzdC5wYXJlbnQudGltZXN0YW1wPURhdGUubm93KCksc3QubmFtZT1SdCxndC5jb250''@;'; put 'put ''ZW50c1tSdF09c3QsZ3QudGltZXN0YW1wPXN0LnBhcmVudC50aW1lc3RhbXAsc3QucGFyZW50PWd0fSx1bmxpbms6ZnVuY3Rpb24oc3QsZ3Qpe2RlbGV0ZSBzdC5jb250ZW50c1tndF0sc3QudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyOmZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9QXQubG9v''@;'; put 'put ''a3VwTm9kZShzdCxndCk7Zm9yKHZhciB0biBpbiBSdC5jb250ZW50cyl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NSk7ZGVsZXRlIHN0LmNvbnRlbnRzW2d0XSxzdC50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcjpmdW5jdGlvbihzdCl7dmFyIGd0PVsiLiIsIi4uIl07Zm9yKHZhciBS''@;'; put 'put ''dCBpbiBzdC5jb250ZW50cylzdC5jb250ZW50cy5oYXNPd25Qcm9wZXJ0eShSdCkmJmd0LnB1c2goUnQpO3JldHVybiBndH0sc3ltbGluazpmdW5jdGlvbihzdCxndCxSdCl7dmFyIHRuPXVvLmNyZWF0ZU5vZGUoc3QsZ3QsNDE0NzEsMCk7cmV0dXJuIHRuLmxpbms9UnQsdG59LHJlYWRsaW5r''@;'; put 'put ''OmZ1bmN0aW9uKHN0KXtpZighQXQuaXNMaW5rKHN0Lm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gc3QubGlua319LHN0cmVhbV9vcHM6e3JlYWQ6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe3ZhciBzcj1zdC5ub2RlLmNvbnRlbnRzO2lmKHduPj1zdC5ub2RlLnVz''@;'; put 'put ''ZWRCeXRlcylyZXR1cm4gMDt2YXIgY3I9TWF0aC5taW4oc3Qubm9kZS51c2VkQnl0ZXMtd24sdG4pO2lmKGNyPjgmJnNyLnN1YmFycmF5KWd0LnNldChzci5zdWJhcnJheSh3bix3bitjciksUnQpO2Vsc2UgZm9yKHZhciBMcj0wO0xyPGNyO0xyKyspZ3RbUnQrTHJdPXNyW3duK0xyXTtyZXR1''@;'; put 'put ''cm4gY3J9LHdyaXRlOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduLHNyKXtpZihndC5idWZmZXI9PT1ldC5idWZmZXImJihzcj0hMSksIXRuKXJldHVybiAwO3ZhciBjcj1zdC5ub2RlO2lmKGNyLnRpbWVzdGFtcD1EYXRlLm5vdygpLGd0LnN1YmFycmF5JiYoIWNyLmNvbnRlbnRzfHxjci5jb250''@;'; put 'put ''ZW50cy5zdWJhcnJheSkpe2lmKHNyKXJldHVybiBjci5jb250ZW50cz1ndC5zdWJhcnJheShSdCxSdCt0biksY3IudXNlZEJ5dGVzPXRuLHRuO2lmKDA9PT1jci51c2VkQnl0ZXMmJjA9PT13bilyZXR1cm4gY3IuY29udGVudHM9Z3Quc2xpY2UoUnQsUnQrdG4pLGNyLnVzZWRCeXRlcz10bix0''@;'; put 'put ''bjtpZih3bit0bjw9Y3IudXNlZEJ5dGVzKXJldHVybiBjci5jb250ZW50cy5zZXQoZ3Quc3ViYXJyYXkoUnQsUnQrdG4pLHduKSx0bn1pZih1by5leHBhbmRGaWxlU3RvcmFnZShjcix3bit0biksY3IuY29udGVudHMuc3ViYXJyYXkmJmd0LnN1YmFycmF5KWNyLmNvbnRlbnRzLnNldChndC5z''@;'; put 'put ''dWJhcnJheShSdCxSdCt0biksd24pO2Vsc2UgZm9yKHZhciBMcj0wO0xyPHRuO0xyKyspY3IuY29udGVudHNbd24rTHJdPWd0W1J0K0xyXTtyZXR1cm4gY3IudXNlZEJ5dGVzPU1hdGgubWF4KGNyLnVzZWRCeXRlcyx3bit0biksdG59LGxsc2VlazpmdW5jdGlvbihzdCxndCxSdCl7dmFyIHRu''@;'; put 'put ''PWd0O2lmKDE9PT1SdD90bis9c3QucG9zaXRpb246Mj09PVJ0JiZBdC5pc0ZpbGUoc3Qubm9kZS5tb2RlKSYmKHRuKz1zdC5ub2RlLnVzZWRCeXRlcyksdG48MCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIHRufSxhbGxvY2F0ZTpmdW5jdGlvbihzdCxndCxSdCl7dW8uZXhw''@;'; put 'put ''YW5kRmlsZVN0b3JhZ2Uoc3Qubm9kZSxndCtSdCksc3Qubm9kZS51c2VkQnl0ZXM9TWF0aC5tYXgoc3Qubm9kZS51c2VkQnl0ZXMsZ3QrUnQpfSxtbWFwOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtpZighQXQuaXNGaWxlKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Io''@;'; put 'put ''NDMpO3ZhciBzcixjcixMcj1zdC5ub2RlLmNvbnRlbnRzO2lmKDImd258fExyLmJ1ZmZlciE9PW90KXtpZigoUnQ+MHx8UnQrZ3Q8THIubGVuZ3RoKSYmKExyPUxyLnN1YmFycmF5P0xyLnN1YmFycmF5KFJ0LFJ0K2d0KTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChMcixSdCxSdCtndCkp''@;'; put 'put ''LGNyPSEwLCEoc3I9Z2EoZ3QpKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0OCk7ZXQuc2V0KExyLHNyKX1lbHNlIGNyPSExLHNyPUxyLmJ5dGVPZmZzZXQ7cmV0dXJue3B0cjpzcixhbGxvY2F0ZWQ6Y3J9fSxtc3luYzpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7cmV0dXJuIHVvLnN0cmVh''@;'; put 'put ''bV9vcHMud3JpdGUoc3QsZ3QsMCx0bixSdCwhMSksMH19fSxBdD17cm9vdDpudWxsLG1vdW50czpbXSxkZXZpY2VzOnt9LHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxlOm51bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLEVycm5v''@;'; put 'put ''RXJyb3I6bnVsbCxnZW5lcmljRXJyb3JzOnt9LGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxsb29rdXBQYXRoOihzdCxndD17fSk9PntpZighKHN0PVhvLnJlc29sdmUoc3QpKSlyZXR1cm57cGF0aDoiIixub2RlOm51bGx9O2lmKChndD1PYmplY3QuYXNzaWduKHtmb2xsb3df''@;'; put 'put ''bW91bnQ6ITAscmVjdXJzZV9jb3VudDowfSxndCkpLnJlY3Vyc2VfY291bnQ+OCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigzMik7Zm9yKHZhciBSdD1zdC5zcGxpdCgiLyIpLmZpbHRlcihNbz0+ISFNbyksdG49QXQucm9vdCx3bj0iLyIsc3I9MDtzcjxSdC5sZW5ndGg7c3IrKyl7dmFyIGNy''@;'; put 'put ''PXNyPT09UnQubGVuZ3RoLTE7aWYoY3ImJmd0LnBhcmVudClicmVhaztpZih0bj1BdC5sb29rdXBOb2RlKHRuLFJ0W3NyXSksd249Umkuam9pbjIod24sUnRbc3JdKSxBdC5pc01vdW50cG9pbnQodG4pJiYoIWNyfHxjciYmZ3QuZm9sbG93X21vdW50KSYmKHRuPXRuLm1vdW50ZWQucm9vdCks''@;'; put 'put ''IWNyfHxndC5mb2xsb3cpZm9yKHZhciBMcj0wO0F0LmlzTGluayh0bi5tb2RlKTspe3ZhciBnbz1BdC5yZWFkbGluayh3bik7aWYod249WG8ucmVzb2x2ZShSaS5kaXJuYW1lKHduKSxnbyksdG49QXQubG9va3VwUGF0aCh3bix7cmVjdXJzZV9jb3VudDpndC5yZWN1cnNlX2NvdW50KzF9KS5u''@;'; put 'put ''b2RlLExyKys+NDApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMzIpfX1yZXR1cm57cGF0aDp3bixub2RlOnRufX0sZ2V0UGF0aDpzdD0+e2Zvcih2YXIgZ3Q7Oyl7aWYoQXQuaXNSb290KHN0KSl7dmFyIFJ0PXN0Lm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIGd0PyIvIiE9PVJ0W1J0Lmxlbmd0''@;'; put 'put ''aC0xXT9SdCsiLyIrZ3Q6UnQrZ3Q6UnR9Z3Q9Z3Q/c3QubmFtZSsiLyIrZ3Q6c3QubmFtZSxzdD1zdC5wYXJlbnR9fSxoYXNoTmFtZTooc3QsZ3QpPT57Zm9yKHZhciBSdD0wLHRuPTA7dG48Z3QubGVuZ3RoO3RuKyspUnQ9KFJ0PDw1KS1SdCtndC5jaGFyQ29kZUF0KHRuKXwwO3JldHVybihz''@;'; put 'put ''dCtSdD4+PjApJUF0Lm5hbWVUYWJsZS5sZW5ndGh9LGhhc2hBZGROb2RlOnN0PT57dmFyIGd0PUF0Lmhhc2hOYW1lKHN0LnBhcmVudC5pZCxzdC5uYW1lKTtzdC5uYW1lX25leHQ9QXQubmFtZVRhYmxlW2d0XSxBdC5uYW1lVGFibGVbZ3RdPXN0fSxoYXNoUmVtb3ZlTm9kZTpzdD0+e3ZhciBn''@;'; put 'put ''dD1BdC5oYXNoTmFtZShzdC5wYXJlbnQuaWQsc3QubmFtZSk7aWYoQXQubmFtZVRhYmxlW2d0XT09PXN0KUF0Lm5hbWVUYWJsZVtndF09c3QubmFtZV9uZXh0O2Vsc2UgZm9yKHZhciBSdD1BdC5uYW1lVGFibGVbZ3RdO1J0Oyl7aWYoUnQubmFtZV9uZXh0PT09c3Qpe1J0Lm5hbWVfbmV4dD1z''@;'; put 'put ''dC5uYW1lX25leHQ7YnJlYWt9UnQ9UnQubmFtZV9uZXh0fX0sbG9va3VwTm9kZTooc3QsZ3QpPT57dmFyIFJ0PUF0Lm1heUxvb2t1cChzdCk7aWYoUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoUnQsc3QpO2Zvcih2YXIgdG49QXQuaGFzaE5hbWUoc3QuaWQsZ3QpLHduPUF0Lm5hbWVUYWJs''@;'; put 'put ''ZVt0bl07d247d249d24ubmFtZV9uZXh0KWlmKHduLnBhcmVudC5pZD09PXN0LmlkJiZ3bi5uYW1lPT09Z3QpcmV0dXJuIHduO3JldHVybiBBdC5sb29rdXAoc3QsZ3QpfSxjcmVhdGVOb2RlOihzdCxndCxSdCx0bik9Pnt2YXIgd249bmV3IEF0LkZTTm9kZShzdCxndCxSdCx0bik7cmV0dXJu''@;'; put 'put ''IEF0Lmhhc2hBZGROb2RlKHduKSx3bn0sZGVzdHJveU5vZGU6c3Q9PntBdC5oYXNoUmVtb3ZlTm9kZShzdCl9LGlzUm9vdDpzdD0+c3Q9PT1zdC5wYXJlbnQsaXNNb3VudHBvaW50OnN0PT4hIXN0Lm1vdW50ZWQsaXNGaWxlOnN0PT4zMjc2OD09KDYxNDQwJnN0KSxpc0RpcjpzdD0+MTYzODQ9''@;'; put 'put ''PSg2MTQ0MCZzdCksaXNMaW5rOnN0PT40MDk2MD09KDYxNDQwJnN0KSxpc0NocmRldjpzdD0+ODE5Mj09KDYxNDQwJnN0KSxpc0Jsa2RldjpzdD0+MjQ1NzY9PSg2MTQ0MCZzdCksaXNGSUZPOnN0PT40MDk2PT0oNjE0NDAmc3QpLGlzU29ja2V0OnN0PT40OTE1Mj09KDQ5MTUyJnN0KSxmbGFn''@;'; put 'put ''TW9kZXM6e3I6MCwicisiOjIsdzo1NzcsIncrIjo1NzgsYToxMDg5LCJhKyI6MTA5MH0sbW9kZVN0cmluZ1RvRmxhZ3M6c3Q9Pnt2YXIgZ3Q9QXQuZmxhZ01vZGVzW3N0XTtpZih2b2lkIDA9PT1ndCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZmlsZSBvcGVuIG1vZGU6ICIrc3QpO3JldHVy''@;'; put 'put ''biBndH0sZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmc6c3Q9Pnt2YXIgZ3Q9WyJyIiwidyIsInJ3Il1bMyZzdF07cmV0dXJuIDUxMiZzdCYmKGd0Kz0idyIpLGd0fSxub2RlUGVybWlzc2lvbnM6KHN0LGd0KT0+QXQuaWdub3JlUGVybWlzc2lvbnN8fCghZ3QuaW5jbHVkZXMoInIiKXx8MjkyJnN0''@;'; put 'put ''Lm1vZGUpJiYoIWd0LmluY2x1ZGVzKCJ3Iil8fDE0NiZzdC5tb2RlKSYmKCFndC5pbmNsdWRlcygieCIpfHw3MyZzdC5tb2RlKT8wOjIsbWF5TG9va3VwOnN0PT5BdC5ub2RlUGVybWlzc2lvbnMoc3QsIngiKXx8KHN0Lm5vZGVfb3BzLmxvb2t1cD8wOjIpLG1heUNyZWF0ZTooc3QsZ3QpPT57''@;'; put 'put ''dHJ5e3JldHVybiBBdC5sb29rdXBOb2RlKHN0LGd0KSwyMH1jYXRjaHt9cmV0dXJuIEF0Lm5vZGVQZXJtaXNzaW9ucyhzdCwid3giKX0sbWF5RGVsZXRlOihzdCxndCxSdCk9Pnt2YXIgdG47dHJ5e3RuPUF0Lmxvb2t1cE5vZGUoc3QsZ3QpfWNhdGNoKHNyKXtyZXR1cm4gc3IuZXJybm99dmFy''@;'; put 'put ''IHduPUF0Lm5vZGVQZXJtaXNzaW9ucyhzdCwid3giKTtpZih3bilyZXR1cm4gd247aWYoUnQpe2lmKCFBdC5pc0Rpcih0bi5tb2RlKSlyZXR1cm4gNTQ7aWYoQXQuaXNSb290KHRuKXx8QXQuZ2V0UGF0aCh0bik9PT1BdC5jd2QoKSlyZXR1cm4gMTB9ZWxzZSBpZihBdC5pc0Rpcih0bi5tb2Rl''@;'; put 'put ''KSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW46KHN0LGd0KT0+c3Q/QXQuaXNMaW5rKHN0Lm1vZGUpPzMyOkF0LmlzRGlyKHN0Lm1vZGUpJiYoInIiIT09QXQuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZ3QpfHw1MTImZ3QpPzMxOkF0Lm5vZGVQZXJtaXNzaW9ucyhzdCxBdC5mbGFnc1Rv''@;'; put 'put ''UGVybWlzc2lvblN0cmluZyhndCkpOjQ0LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZDooc3Q9MCxndD1BdC5NQVhfT1BFTl9GRFMpPT57Zm9yKHZhciBSdD1zdDtSdDw9Z3Q7UnQrKylpZighQXQuc3RyZWFtc1tSdF0pcmV0dXJuIFJ0O3Rocm93IG5ldyBBdC5FcnJub0Vycm9yKDMzKX0sZ2V0''@;'; put 'put ''U3RyZWFtOnN0PT5BdC5zdHJlYW1zW3N0XSxjcmVhdGVTdHJlYW06KHN0LGd0LFJ0KT0+e0F0LkZTU3RyZWFtfHwoQXQuRlNTdHJlYW09ZnVuY3Rpb24oKXt0aGlzLnNoYXJlZD17fX0sQXQuRlNTdHJlYW0ucHJvdG90eXBlPXt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF0LkZTU3RyZWFt''@;'; put 'put ''LnByb3RvdHlwZSx7b2JqZWN0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlfSxzZXQ6ZnVuY3Rpb24od24pe3RoaXMubm9kZT13bn19LGlzUmVhZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNXcml0ZTp7Z2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIDAhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNBcHBlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiAxMDI0JnRoaXMuZmxhZ3N9fSxmbGFnczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfSxzZXQ6ZnVuY3Rpb24od24pe3RoaXMuc2hhcmVkLmZsYWdz''@;'; put 'put ''PXdufX0scG9zaXRpb246e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKHduKXt0aGlzLnNoYXJlZC5wb3NpdGlvbj13bn19fSkpLHN0PU9iamVjdC5hc3NpZ24obmV3IEF0LkZTU3RyZWFtLHN0KTt2YXIgdG49QXQubmV4dGZkKGd0LFJ0''@;'; put 'put ''KTtyZXR1cm4gc3QuZmQ9dG4sQXQuc3RyZWFtc1t0bl09c3Qsc3R9LGNsb3NlU3RyZWFtOnN0PT57QXQuc3RyZWFtc1tzdF09bnVsbH0sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW46c3Q9Pnt2YXIgZ3Q9QXQuZ2V0RGV2aWNlKHN0Lm5vZGUucmRldik7c3Quc3RyZWFtX29wcz1ndC5zdHJlYW1f''@;'; put 'put ''b3BzLHN0LnN0cmVhbV9vcHMub3BlbiYmc3Quc3RyZWFtX29wcy5vcGVuKHN0KX0sbGxzZWVrOigpPT57dGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApfX0sbWFqb3I6c3Q9PnN0Pj44LG1pbm9yOnN0PT4yNTUmc3QsbWFrZWRldjooc3QsZ3QpPT5zdDw8OHxndCxyZWdpc3RlckRldmljZToo''@;'; put 'put ''c3QsZ3QpPT57QXQuZGV2aWNlc1tzdF09e3N0cmVhbV9vcHM6Z3R9fSxnZXREZXZpY2U6c3Q9PkF0LmRldmljZXNbc3RdLGdldE1vdW50czpzdD0+e2Zvcih2YXIgZ3Q9W10sUnQ9W3N0XTtSdC5sZW5ndGg7KXt2YXIgdG49UnQucG9wKCk7Z3QucHVzaCh0biksUnQucHVzaC5hcHBseShSdCx0''@;'; put 'put ''bi5tb3VudHMpfXJldHVybiBndH0sc3luY2ZzOihzdCxndCk9PnsiZnVuY3Rpb24iPT10eXBlb2Ygc3QmJihndD1zdCxzdD0hMSksQXQuc3luY0ZTUmVxdWVzdHMrKyxBdC5zeW5jRlNSZXF1ZXN0cz4xJiZpZSgid2FybmluZzogIitBdC5zeW5jRlNSZXF1ZXN0cysiIEZTLnN5bmNmcyBvcGVy''@;'; put 'put ''YXRpb25zIGluIGZsaWdodCBhdCBvbmNlLCBwcm9iYWJseSBqdXN0IGRvaW5nIGV4dHJhIHdvcmsiKTt2YXIgUnQ9QXQuZ2V0TW91bnRzKEF0LnJvb3QubW91bnQpLHRuPTA7ZnVuY3Rpb24gd24oY3Ipe3JldHVybiBBdC5zeW5jRlNSZXF1ZXN0cy0tLGd0KGNyKX1mdW5jdGlvbiBzcihjcil7''@;'; put 'put ''aWYoY3IpcmV0dXJuIHNyLmVycm9yZWQ/dm9pZCAwOihzci5lcnJvcmVkPSEwLHduKGNyKSk7Kyt0bj49UnQubGVuZ3RoJiZ3bihudWxsKX1SdC5mb3JFYWNoKGNyPT57aWYoIWNyLnR5cGUuc3luY2ZzKXJldHVybiBzcihudWxsKTtjci50eXBlLnN5bmNmcyhjcixzdCxzcil9KX0sbW91bnQ6''@;'; put 'put ''KHN0LGd0LFJ0KT0+e3ZhciB0bix3bj0iLyI9PT1SdCxzcj0hUnQ7aWYod24mJkF0LnJvb3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2lmKCF3biYmIXNyKXt2YXIgY3I9QXQubG9va3VwUGF0aChSdCx7Zm9sbG93X21vdW50OiExfSk7aWYoUnQ9Y3IucGF0aCxBdC5pc01vdW50cG9p''@;'; put 'put ''bnQodG49Y3Iubm9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2lmKCFBdC5pc0Rpcih0bi5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NCl9dmFyIExyPXt0eXBlOnN0LG9wdHM6Z3QsbW91bnRwb2ludDpSdCxtb3VudHM6W119LGdvPXN0Lm1vdW50KExyKTtyZXR1cm4g''@;'; put 'put ''Z28ubW91bnQ9THIsTHIucm9vdD1nbyx3bj9BdC5yb290PWdvOnRuJiYodG4ubW91bnRlZD1Mcix0bi5tb3VudCYmdG4ubW91bnQubW91bnRzLnB1c2goTHIpKSxnb30sdW5tb3VudDpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3dfbW91bnQ6ITF9KTtpZighQXQuaXNNb3Vu''@;'; put 'put ''dHBvaW50KGd0Lm5vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgUnQ9Z3Qubm9kZSx0bj1SdC5tb3VudGVkLHduPUF0LmdldE1vdW50cyh0bik7T2JqZWN0LmtleXMoQXQubmFtZVRhYmxlKS5mb3JFYWNoKGNyPT57Zm9yKHZhciBMcj1BdC5uYW1lVGFibGVbY3JdO0xyOyl7''@;'; put 'put ''dmFyIGdvPUxyLm5hbWVfbmV4dDt3bi5pbmNsdWRlcyhMci5tb3VudCkmJkF0LmRlc3Ryb3lOb2RlKExyKSxMcj1nb319KSxSdC5tb3VudGVkPW51bGw7dmFyIHNyPVJ0Lm1vdW50Lm1vdW50cy5pbmRleE9mKHRuKTtSdC5tb3VudC5tb3VudHMuc3BsaWNlKHNyLDEpfSxsb29rdXA6KHN0LGd0''@;'; put 'put ''KT0+c3Qubm9kZV9vcHMubG9va3VwKHN0LGd0KSxta25vZDooc3QsZ3QsUnQpPT57dmFyIHRuPUF0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGUsd249UmkuYmFzZW5hbWUoc3QpO2lmKCF3bnx8Ii4iPT09d258fCIuLiI9PT13bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7''@;'; put 'put ''dmFyIHNyPUF0Lm1heUNyZWF0ZSh0bix3bik7aWYoc3IpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Ioc3IpO2lmKCF0bi5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7cmV0dXJuIHRuLm5vZGVfb3BzLm1rbm9kKHRuLHduLGd0LFJ0KX0sY3JlYXRlOihzdCxndCk9''@;'; put 'put ''PihndD12b2lkIDAhPT1ndD9ndDo0MzgsZ3QmPTQwOTUsQXQubWtub2Qoc3QsZ3R8PTMyNzY4LDApKSxta2Rpcjooc3QsZ3QpPT4oZ3Q9dm9pZCAwIT09Z3Q/Z3Q6NTExLGd0Jj0xMDIzLEF0Lm1rbm9kKHN0LGd0fD0xNjM4NCwwKSksbWtkaXJUcmVlOihzdCxndCk9Pntmb3IodmFyIFJ0PXN0''@;'; put 'put ''LnNwbGl0KCIvIiksdG49IiIsd249MDt3bjxSdC5sZW5ndGg7Kyt3bilpZihSdFt3bl0pe3RuKz0iLyIrUnRbd25dO3RyeXtBdC5ta2Rpcih0bixndCl9Y2F0Y2goc3Ipe2lmKDIwIT1zci5lcnJubyl0aHJvdyBzcn19fSxta2Rldjooc3QsZ3QsUnQpPT4odm9pZCAwPT09UnQmJihSdD1ndCxn''@;'; put 'put ''dD00MzgpLEF0Lm1rbm9kKHN0LGd0fD04MTkyLFJ0KSksc3ltbGluazooc3QsZ3QpPT57aWYoIVhvLnJlc29sdmUoc3QpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTt2YXIgUnQ9QXQubG9va3VwUGF0aChndCx7cGFyZW50OiEwfSkubm9kZTtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5v''@;'; put 'put ''RXJyb3IoNDQpO3ZhciB0bj1SaS5iYXNlbmFtZShndCksd249QXQubWF5Q3JlYXRlKFJ0LHRuKTtpZih3bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcih3bik7aWYoIVJ0Lm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3JldHVybiBSdC5ub2RlX29wcy5zeW1s''@;'; put 'put ''aW5rKFJ0LHRuLHN0KX0scmVuYW1lOihzdCxndCk9Pnt2YXIgUnQsdG4sd249UmkuZGlybmFtZShzdCksc3I9UmkuZGlybmFtZShndCksY3I9UmkuYmFzZW5hbWUoc3QpLExyPVJpLmJhc2VuYW1lKGd0KTtpZihSdD1BdC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KS5ub2RlLHRuPUF0Lmxv''@;'; put 'put ''b2t1cFBhdGgoZ3Qse3BhcmVudDohMH0pLm5vZGUsIVJ0fHwhdG4pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO2lmKFJ0Lm1vdW50IT09dG4ubW91bnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzUpO3ZhciBnbyxNbz1BdC5sb29rdXBOb2RlKFJ0LGNyKSxmbz1Yby5yZWxhdGl2ZShz''@;'; put 'put ''dCxzcik7aWYoIi4iIT09Zm8uY2hhckF0KDApKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtpZigiLiIhPT0oZm89WG8ucmVsYXRpdmUoZ3Qsd24pKS5jaGFyQXQoMCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTUpO3RyeXtnbz1BdC5sb29rdXBOb2RlKHRuLExyKX1jYXRjaHt9aWYo''@;'; put 'put ''TW8hPT1nbyl7dmFyIEpvPUF0LmlzRGlyKE1vLm1vZGUpLFlpPUF0Lm1heURlbGV0ZShSdCxjcixKbyk7aWYoWWkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoWWkpO2lmKFlpPWdvP0F0Lm1heURlbGV0ZSh0bixMcixKbyk6QXQubWF5Q3JlYXRlKHRuLExyKSl0aHJvdyBuZXcgQXQuRXJybm9F''@;'; put 'put ''cnJvcihZaSk7aWYoIVJ0Lm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7aWYoQXQuaXNNb3VudHBvaW50KE1vKXx8Z28mJkF0LmlzTW91bnRwb2ludChnbykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2lmKHRuIT09UnQmJihZaT1BdC5ub2RlUGVybWlz''@;'; put 'put ''c2lvbnMoUnQsInciKSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoWWkpO0F0Lmhhc2hSZW1vdmVOb2RlKE1vKTt0cnl7UnQubm9kZV9vcHMucmVuYW1lKE1vLHRuLExyKX1jYXRjaChZcyl7dGhyb3cgWXN9ZmluYWxseXtBdC5oYXNoQWRkTm9kZShNbyl9fX0scm1kaXI6c3Q9Pnt2YXIgZ3Q9''@;'; put 'put ''QXQubG9va3VwUGF0aChzdCx7cGFyZW50OiEwfSkubm9kZSxSdD1SaS5iYXNlbmFtZShzdCksdG49QXQubG9va3VwTm9kZShndCxSdCksd249QXQubWF5RGVsZXRlKGd0LFJ0LCEwKTtpZih3bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcih3bik7aWYoIWd0Lm5vZGVfb3BzLnJtZGlyKXRocm93''@;'; put 'put ''IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtpZihBdC5pc01vdW50cG9pbnQodG4pKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDEwKTtndC5ub2RlX29wcy5ybWRpcihndCxSdCksQXQuZGVzdHJveU5vZGUodG4pfSxyZWFkZGlyOnN0PT57dmFyIGd0PUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzoh''@;'; put 'put ''MH0pLm5vZGU7aWYoIWd0Lm5vZGVfb3BzLnJlYWRkaXIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTQpO3JldHVybiBndC5ub2RlX29wcy5yZWFkZGlyKGd0KX0sdW5saW5rOnN0PT57dmFyIGd0PUF0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGU7aWYoIWd0KXRocm93IG5ldyBB''@;'; put 'put ''dC5FcnJub0Vycm9yKDQ0KTt2YXIgUnQ9UmkuYmFzZW5hbWUoc3QpLHRuPUF0Lmxvb2t1cE5vZGUoZ3QsUnQpLHduPUF0Lm1heURlbGV0ZShndCxSdCwhMSk7aWYod24pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Iod24pO2lmKCFndC5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IEF0LkVycm5v''@;'; put 'put ''RXJyb3IoNjMpO2lmKEF0LmlzTW91bnRwb2ludCh0bikpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2d0Lm5vZGVfb3BzLnVubGluayhndCxSdCksQXQuZGVzdHJveU5vZGUodG4pfSxyZWFkbGluazpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0KS5ub2RlO2lmKCFndCl0aHJvdyBu''@;'; put 'put ''ZXcgQXQuRXJybm9FcnJvcig0NCk7aWYoIWd0Lm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWG8ucmVzb2x2ZShBdC5nZXRQYXRoKGd0LnBhcmVudCksZ3Qubm9kZV9vcHMucmVhZGxpbmsoZ3QpKX0sc3RhdDooc3QsZ3QpPT57dmFyIFJ0PUF0''@;'; put 'put ''Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohZ3R9KS5ub2RlO2lmKCFSdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7aWYoIVJ0Lm5vZGVfb3BzLmdldGF0dHIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3JldHVybiBSdC5ub2RlX29wcy5nZXRhdHRyKFJ0KX0sbHN0YXQ6c3Q9PkF0''@;'; put 'put ''LnN0YXQoc3QsITApLGNobW9kOihzdCxndCxSdCk9Pnt2YXIgdG47aWYoISh0bj0ic3RyaW5nIj09dHlwZW9mIHN0P0F0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohUnR9KS5ub2RlOnN0KS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTt0bi5ub2RlX29wcy5z''@;'; put 'put ''ZXRhdHRyKHRuLHttb2RlOjQwOTUmZ3R8LTQwOTYmdG4ubW9kZSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2htb2Q6KHN0LGd0KT0+e0F0LmNobW9kKHN0LGd0LCEwKX0sZmNobW9kOihzdCxndCk9Pnt2YXIgUnQ9QXQuZ2V0U3RyZWFtKHN0KTtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5v''@;'; put 'put ''RXJyb3IoOCk7QXQuY2htb2QoUnQubm9kZSxndCl9LGNob3duOihzdCxndCxSdCx0bik9Pnt2YXIgd247aWYoISh3bj0ic3RyaW5nIj09dHlwZW9mIHN0P0F0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohdG59KS5ub2RlOnN0KS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBBdC5FcnJub0Vy''@;'; put 'put ''cm9yKDYzKTt3bi5ub2RlX29wcy5zZXRhdHRyKHduLHt0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2hvd246KHN0LGd0LFJ0KT0+e0F0LmNob3duKHN0LGd0LFJ0LCEwKX0sZmNob3duOihzdCxndCxSdCk9Pnt2YXIgdG49QXQuZ2V0U3RyZWFtKHN0KTtpZighdG4pdGhyb3cgbmV3IEF0LkVy''@;'; put 'put ''cm5vRXJyb3IoOCk7QXQuY2hvd24odG4ubm9kZSxndCxSdCl9LHRydW5jYXRlOihzdCxndCk9PntpZihndDwwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgUnQ7aWYoIShSdD0ic3RyaW5nIj09dHlwZW9mIHN0P0F0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohMH0pLm5vZGU6c3Qp''@;'; put 'put ''Lm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO2lmKEF0LmlzRGlyKFJ0Lm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDMxKTtpZighQXQuaXNGaWxlKFJ0Lm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgdG49QXQubm9kZVBlcm1p''@;'; put 'put ''c3Npb25zKFJ0LCJ3Iik7aWYodG4pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IodG4pO1J0Lm5vZGVfb3BzLnNldGF0dHIoUnQse3NpemU6Z3QsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlOihzdCxndCk9Pnt2YXIgUnQ9QXQuZ2V0U3RyZWFtKHN0KTtpZighUnQpdGhyb3cgbmV3''@;'; put 'put ''IEF0LkVycm5vRXJyb3IoOCk7aWYoISgyMDk3MTU1JlJ0LmZsYWdzKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7QXQudHJ1bmNhdGUoUnQubm9kZSxndCl9LHV0aW1lOihzdCxndCxSdCk9Pnt2YXIgdG49QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiEwfSkubm9kZTt0bi5ub2RlX29w''@;'; put 'put ''cy5zZXRhdHRyKHRuLHt0aW1lc3RhbXA6TWF0aC5tYXgoZ3QsUnQpfSl9LG9wZW46KHN0LGd0LFJ0KT0+e2lmKCIiPT09c3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO3ZhciB0bjtpZihSdD12b2lkIDA9PT1SdD80Mzg6UnQsUnQ9NjQmKGd0PSJzdHJpbmciPT10eXBlb2YgZ3Q/QXQu''@;'; put 'put ''bW9kZVN0cmluZ1RvRmxhZ3MoZ3QpOmd0KT80MDk1JlJ0fDMyNzY4OjAsIm9iamVjdCI9PXR5cGVvZiBzdCl0bj1zdDtlbHNle3N0PVJpLm5vcm1hbGl6ZShzdCk7dHJ5e3RuPUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohKDEzMTA3MiZndCl9KS5ub2RlfWNhdGNoe319dmFyIHduPSExO2lm''@;'; put 'put ''KDY0Jmd0KWlmKHRuKXtpZigxMjgmZ3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjApfWVsc2UgdG49QXQubWtub2Qoc3QsUnQsMCksd249ITA7aWYoIXRuKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTtpZihBdC5pc0NocmRldih0bi5tb2RlKSYmKGd0Jj0tNTEzKSw2NTUzNiZndCYm''@;'; put 'put ''IUF0LmlzRGlyKHRuLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU0KTtpZighd24pe3ZhciBzcj1BdC5tYXlPcGVuKHRuLGd0KTtpZihzcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcihzcil9NTEyJmd0JiYhd24mJkF0LnRydW5jYXRlKHRuLDApLGd0Jj0tMTMxNzEzO3ZhciBjcj1B''@;'; put 'put ''dC5jcmVhdGVTdHJlYW0oe25vZGU6dG4scGF0aDpBdC5nZXRQYXRoKHRuKSxmbGFnczpndCxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6dG4uc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBjci5zdHJlYW1fb3BzLm9wZW4mJmNyLnN0cmVhbV9vcHMu''@;'; put 'put ''b3BlbihjciksIWQubG9nUmVhZEZpbGVzfHwxJmd0fHwoQXQucmVhZEZpbGVzfHwoQXQucmVhZEZpbGVzPXt9KSxzdCBpbiBBdC5yZWFkRmlsZXN8fChBdC5yZWFkRmlsZXNbc3RdPTEpKSxjcn0sY2xvc2U6c3Q9PntpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Io''@;'; put 'put ''OCk7c3QuZ2V0ZGVudHMmJihzdC5nZXRkZW50cz1udWxsKTt0cnl7c3Quc3RyZWFtX29wcy5jbG9zZSYmc3Quc3RyZWFtX29wcy5jbG9zZShzdCl9Y2F0Y2goZ3Qpe3Rocm93IGd0fWZpbmFsbHl7QXQuY2xvc2VTdHJlYW0oc3QuZmQpfXN0LmZkPW51bGx9LGlzQ2xvc2VkOnN0PT5udWxsPT09''@;'; put 'put ''c3QuZmQsbGxzZWVrOihzdCxndCxSdCk9PntpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoIXN0LnNlZWthYmxlfHwhc3Quc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApO2lmKDAhPVJ0JiYxIT1SdCYmMiE9UnQpdGhy''@;'; put 'put ''b3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3JldHVybiBzdC5wb3NpdGlvbj1zdC5zdHJlYW1fb3BzLmxsc2VlayhzdCxndCxSdCksc3QudW5nb3R0ZW49W10sc3QucG9zaXRpb259LHJlYWQ6KHN0LGd0LFJ0LHRuLHduKT0+e2lmKHRuPDB8fHduPDApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Io''@;'; put 'put ''MjgpO2lmKEF0LmlzQ2xvc2VkKHN0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZigxPT0oMjA5NzE1NSZzdC5mbGFncykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoQXQuaXNEaXIoc3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigzMSk7aWYoIXN0LnN0''@;'; put 'put ''cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7dmFyIHNyPXZvaWQgMCE9PXduO2lmKHNyKXtpZighc3Quc2Vla2FibGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApfWVsc2Ugd249c3QucG9zaXRpb247dmFyIGNyPXN0LnN0cmVhbV9vcHMucmVhZChzdCxndCxS''@;'; put 'put ''dCx0bix3bik7cmV0dXJuIHNyfHwoc3QucG9zaXRpb24rPWNyKSxjcn0sd3JpdGU6KHN0LGd0LFJ0LHRuLHduLHNyKT0+e2lmKHRuPDB8fHduPDApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO2lmKEF0LmlzQ2xvc2VkKHN0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZighKDIw''@;'; put 'put ''OTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKEF0LmlzRGlyKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMzEpO2lmKCFzdC5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtzdC5zZWVrYWJsZSYmMTAy''@;'; put 'put ''NCZzdC5mbGFncyYmQXQubGxzZWVrKHN0LDAsMik7dmFyIGNyPXZvaWQgMCE9PXduO2lmKGNyKXtpZighc3Quc2Vla2FibGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNzApfWVsc2Ugd249c3QucG9zaXRpb247dmFyIExyPXN0LnN0cmVhbV9vcHMud3JpdGUoc3QsZ3QsUnQsdG4sd24sc3Ip''@;'; put 'put ''O3JldHVybiBjcnx8KHN0LnBvc2l0aW9uKz1MciksTHJ9LGFsbG9jYXRlOihzdCxndCxSdCk9PntpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoZ3Q8MHx8UnQ8PTApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO2lmKCEoMjA5NzE1NSZzdC5mbGFn''@;'; put 'put ''cykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoIUF0LmlzRmlsZShzdC5ub2RlLm1vZGUpJiYhQXQuaXNEaXIoc3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0Myk7aWYoIXN0LnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTM4''@;'; put 'put ''KTtzdC5zdHJlYW1fb3BzLmFsbG9jYXRlKHN0LGd0LFJ0KX0sbW1hcDooc3QsZ3QsUnQsdG4sd24pPT57aWYoMiZ0biYmISgyJnduKSYmMiE9KDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDIpO2lmKDE9PSgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcgQXQu''@;'; put 'put ''RXJybm9FcnJvcigyKTtpZighc3Quc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQzKTtyZXR1cm4gc3Quc3RyZWFtX29wcy5tbWFwKHN0LGd0LFJ0LHRuLHduKX0sbXN5bmM6KHN0LGd0LFJ0LHRuLHduKT0+c3Quc3RyZWFtX29wcy5tc3luYz9zdC5zdHJlYW1fb3Bz''@;'; put 'put ''Lm1zeW5jKHN0LGd0LFJ0LHRuLHduKTowLG11bm1hcDpzdD0+MCxpb2N0bDooc3QsZ3QsUnQpPT57aWYoIXN0LnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTkpO3JldHVybiBzdC5zdHJlYW1fb3BzLmlvY3RsKHN0LGd0LFJ0KX0scmVhZEZpbGU6KHN0LGd0PXt9''@;'; put 'put ''KT0+e2lmKGd0LmZsYWdzPWd0LmZsYWdzfHwwLGd0LmVuY29kaW5nPWd0LmVuY29kaW5nfHwiYmluYXJ5IiwidXRmOCIhPT1ndC5lbmNvZGluZyYmImJpbmFyeSIhPT1ndC5lbmNvZGluZyl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW5jb2RpbmcgdHlwZSAiJytndC5lbmNvZGluZysnIicp''@;'; put 'put ''O3ZhciBSdCx0bj1BdC5vcGVuKHN0LGd0LmZsYWdzKSx3bj1BdC5zdGF0KHN0KS5zaXplLHNyPW5ldyBVaW50OEFycmF5KHduKTtyZXR1cm4gQXQucmVhZCh0bixzciwwLHduLDApLCJ1dGY4Ij09PWd0LmVuY29kaW5nP1J0PUVuKHNyLDApOiJiaW5hcnkiPT09Z3QuZW5jb2RpbmcmJihSdD1z''@;'; put 'put ''ciksQXQuY2xvc2UodG4pLFJ0fSx3cml0ZUZpbGU6KHN0LGd0LFJ0PXt9KT0+e1J0LmZsYWdzPVJ0LmZsYWdzfHw1Nzc7dmFyIHRuPUF0Lm9wZW4oc3QsUnQuZmxhZ3MsUnQubW9kZSk7aWYoInN0cmluZyI9PXR5cGVvZiBndCl7dmFyIHduPW5ldyBVaW50OEFycmF5KF9pKGd0KSsxKSxzcj1W''@;'; put 'put ''cihndCx3biwwLHduLmxlbmd0aCk7QXQud3JpdGUodG4sd24sMCxzcix2b2lkIDAsUnQuY2FuT3duKX1lbHNle2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZ3QpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7QXQud3JpdGUodG4sZ3QsMCxndC5ieXRlTGVuZ3RoLHZv''@;'; put 'put ''aWQgMCxSdC5jYW5Pd24pfUF0LmNsb3NlKHRuKX0sY3dkOigpPT5BdC5jdXJyZW50UGF0aCxjaGRpcjpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ITB9KTtpZihudWxsPT09Z3Qubm9kZSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7aWYoIUF0LmlzRGlyKGd0Lm5v''@;'; put 'put ''ZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTQpO3ZhciBSdD1BdC5ub2RlUGVybWlzc2lvbnMoZ3Qubm9kZSwieCIpO2lmKFJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKFJ0KTtBdC5jdXJyZW50UGF0aD1ndC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXM6KCk9PntB''@;'; put 'put ''dC5ta2RpcigiL3RtcCIpLEF0Lm1rZGlyKCIvaG9tZSIpLEF0Lm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlczooKT0+e0F0Lm1rZGlyKCIvZGV2IiksQXQucmVnaXN0ZXJEZXZpY2UoQXQubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOihndCxSdCx0''@;'; put 'put ''bix3bixzcik9PndufSksQXQubWtkZXYoIi9kZXYvbnVsbCIsQXQubWFrZWRldigxLDMpKSxKcy5yZWdpc3RlcihBdC5tYWtlZGV2KDUsMCksSnMuZGVmYXVsdF90dHlfb3BzKSxKcy5yZWdpc3RlcihBdC5tYWtlZGV2KDYsMCksSnMuZGVmYXVsdF90dHkxX29wcyksQXQubWtkZXYoIi9kZXYv''@;'; put 'put ''dHR5IixBdC5tYWtlZGV2KDUsMCkpLEF0Lm1rZGV2KCIvZGV2L3R0eTEiLEF0Lm1ha2VkZXYoNiwwKSk7dmFyIHN0PWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgZ3Q9bmV3IFVpbnQ4''@;'; put 'put ''QXJyYXkoMSk7cmV0dXJuKCk9PihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGd0KSxndFswXSl9cmV0dXJuKCk9PmtuKCJyYW5kb21EZXZpY2UiKX0oKTtBdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLHN0KSxBdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixzdCksQXQubWtk''@;'; put 'put ''aXIoIi9kZXYvc2htIiksQXQubWtkaXIoIi9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXM6KCk9PntBdC5ta2RpcigiL3Byb2MiKTt2YXIgc3Q9QXQubWtkaXIoIi9wcm9jL3NlbGYiKTtBdC5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLEF0Lm1vdW50KHttb3VudDooKT0+''@;'; put 'put ''e3ZhciBndD1BdC5jcmVhdGVOb2RlKHN0LCJmZCIsMTY4OTUsNzMpO3JldHVybiBndC5ub2RlX29wcz17bG9va3VwOihSdCx0bik9Pnt2YXIgc3I9QXQuZ2V0U3RyZWFtKCt0bik7aWYoIXNyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO3ZhciBjcj17cGFyZW50Om51bGwsbW91bnQ6e21v''@;'; put 'put ''dW50cG9pbnQ6ImZha2UifSxub2RlX29wczp7cmVhZGxpbms6KCk9PnNyLnBhdGh9fTtyZXR1cm4gY3IucGFyZW50PWNyLGNyfX0sZ3R9fSx7fSwiL3Byb2Mvc2VsZi9mZCIpfSxjcmVhdGVTdGFuZGFyZFN0cmVhbXM6KCk9PntkLnN0ZGluP0F0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGlu''@;'; put 'put ''IixkLnN0ZGluKTpBdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxkLnN0ZG91dD9BdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsZC5zdGRvdXQpOkF0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxkLnN0ZGVycj9BdC5jcmVhdGVEZXZpY2Uo''@;'; put 'put ''Ii9kZXYiLCJzdGRlcnIiLG51bGwsZC5zdGRlcnIpOkF0LnN5bWxpbmsoIi9kZXYvdHR5MSIsIi9kZXYvc3RkZXJyIiksQXQub3BlbigiL2Rldi9zdGRpbiIsMCksQXQub3BlbigiL2Rldi9zdGRvdXQiLDEpLEF0Lm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sZW5zdXJlRXJybm9FcnJvcjooKT0+''@;'; put 'put ''e0F0LkVycm5vRXJyb3J8fChBdC5FcnJub0Vycm9yPWZ1bmN0aW9uKHN0LGd0KXt0aGlzLm5vZGU9Z3QsdGhpcy5zZXRFcnJubz1mdW5jdGlvbihSdCl7dGhpcy5lcnJubz1SdH0sdGhpcy5zZXRFcnJubyhzdCksdGhpcy5tZXNzYWdlPSJGUyBlcnJvciJ9LEF0LkVycm5vRXJyb3IucHJvdG90''@;'; put 'put ''eXBlPW5ldyBFcnJvcixBdC5FcnJub0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BdC5FcnJub0Vycm9yLFs0NF0uZm9yRWFjaChzdD0+e0F0LmdlbmVyaWNFcnJvcnNbc3RdPW5ldyBBdC5FcnJub0Vycm9yKHN0KSxBdC5nZW5lcmljRXJyb3JzW3N0XS5zdGFjaz0iPGdlbmVyaWMgZXJy''@;'; put 'put ''b3IsIG5vIHN0YWNrPiJ9KSl9LHN0YXRpY0luaXQ6KCk9PntBdC5lbnN1cmVFcnJub0Vycm9yKCksQXQubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxBdC5tb3VudCh1byx7fSwiLyIpLEF0LmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLEF0LmNyZWF0ZURlZmF1bHREZXZpY2VzKCksQXQu''@;'; put 'put ''Y3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksQXQuZmlsZXN5c3RlbXM9e01FTUZTOnVvfX0saW5pdDooc3QsZ3QsUnQpPT57QXQuaW5pdC5pbml0aWFsaXplZD0hMCxBdC5lbnN1cmVFcnJub0Vycm9yKCksZC5zdGRpbj1zdHx8ZC5zdGRpbixkLnN0ZG91dD1ndHx8ZC5zdGRvdXQsZC5zdGRl''@;'; put 'put ''cnI9UnR8fGQuc3RkZXJyLEF0LmNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpfSxxdWl0OigpPT57QXQuaW5pdC5pbml0aWFsaXplZD0hMTtmb3IodmFyIHN0PTA7c3Q8QXQuc3RyZWFtcy5sZW5ndGg7c3QrKyl7dmFyIGd0PUF0LnN0cmVhbXNbc3RdO2d0JiZBdC5jbG9zZShndCl9fSxnZXRNb2Rl''@;'; put 'put ''OihzdCxndCk9Pnt2YXIgUnQ9MDtyZXR1cm4gc3QmJihSdHw9MzY1KSxndCYmKFJ0fD0xNDYpLFJ0fSxmaW5kT2JqZWN0OihzdCxndCk9Pnt2YXIgUnQ9QXQuYW5hbHl6ZVBhdGgoc3QsZ3QpO3JldHVybiBSdC5leGlzdHM/UnQub2JqZWN0Om51bGx9LGFuYWx5emVQYXRoOihzdCxndCk9Pnt0''@;'; put 'put ''cnl7c3Q9KHRuPUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohZ3R9KSkucGF0aH1jYXRjaHt9dmFyIFJ0PXtpc1Jvb3Q6ITEsZXhpc3RzOiExLGVycm9yOjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6ITEscGFyZW50UGF0aDpudWxsLHBhcmVudE9iamVj''@;'; put 'put ''dDpudWxsfTt0cnl7dmFyIHRuPUF0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pO1J0LnBhcmVudEV4aXN0cz0hMCxSdC5wYXJlbnRQYXRoPXRuLnBhdGgsUnQucGFyZW50T2JqZWN0PXRuLm5vZGUsUnQubmFtZT1SaS5iYXNlbmFtZShzdCksdG49QXQubG9va3VwUGF0aChzdCx7Zm9sbG93''@;'; put 'put ''OiFndH0pLFJ0LmV4aXN0cz0hMCxSdC5wYXRoPXRuLnBhdGgsUnQub2JqZWN0PXRuLm5vZGUsUnQubmFtZT10bi5ub2RlLm5hbWUsUnQuaXNSb290PSIvIj09PXRuLnBhdGh9Y2F0Y2god24pe1J0LmVycm9yPXduLmVycm5vfXJldHVybiBSdH0sY3JlYXRlUGF0aDooc3QsZ3QsUnQsdG4pPT57''@;'; put 'put ''c3Q9InN0cmluZyI9PXR5cGVvZiBzdD9zdDpBdC5nZXRQYXRoKHN0KTtmb3IodmFyIHduPWd0LnNwbGl0KCIvIikucmV2ZXJzZSgpO3duLmxlbmd0aDspe3ZhciBzcj13bi5wb3AoKTtpZihzcil7dmFyIGNyPVJpLmpvaW4yKHN0LHNyKTt0cnl7QXQubWtkaXIoY3IpfWNhdGNoe31zdD1jcn19''@;'; put 'put ''cmV0dXJuIGNyfSxjcmVhdGVGaWxlOihzdCxndCxSdCx0bix3bik9Pnt2YXIgc3I9Umkuam9pbjIoInN0cmluZyI9PXR5cGVvZiBzdD9zdDpBdC5nZXRQYXRoKHN0KSxndCksY3I9QXQuZ2V0TW9kZSh0bix3bik7cmV0dXJuIEF0LmNyZWF0ZShzcixjcil9LGNyZWF0ZURhdGFGaWxlOihzdCxn''@;'; put 'put ''dCxSdCx0bix3bixzcik9Pnt2YXIgY3I9Z3Q7c3QmJihzdD0ic3RyaW5nIj09dHlwZW9mIHN0P3N0OkF0LmdldFBhdGgoc3QpLGNyPWd0P1JpLmpvaW4yKHN0LGd0KTpzdCk7dmFyIExyPUF0LmdldE1vZGUodG4sd24pLGdvPUF0LmNyZWF0ZShjcixMcik7aWYoUnQpe2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgUnQpe2Zvcih2YXIgTW89bmV3IEFycmF5KFJ0Lmxlbmd0aCksZm89MCxKbz1SdC5sZW5ndGg7Zm88Sm87KytmbylNb1tmb109UnQuY2hhckNvZGVBdChmbyk7UnQ9TW99QXQuY2htb2QoZ28sMTQ2fExyKTt2YXIgWWk9QXQub3Blbihnbyw1NzcpO0F0LndyaXRlKFlpLFJ0LDAsUnQu''@;'; put 'put ''bGVuZ3RoLDAsc3IpLEF0LmNsb3NlKFlpKSxBdC5jaG1vZChnbyxMcil9cmV0dXJuIGdvfSxjcmVhdGVEZXZpY2U6KHN0LGd0LFJ0LHRuKT0+e3ZhciB3bj1SaS5qb2luMigic3RyaW5nIj09dHlwZW9mIHN0P3N0OkF0LmdldFBhdGgoc3QpLGd0KSxzcj1BdC5nZXRNb2RlKCEhUnQsISF0bik7''@;'; put 'put ''QXQuY3JlYXRlRGV2aWNlLm1ham9yfHwoQXQuY3JlYXRlRGV2aWNlLm1ham9yPTY0KTt2YXIgY3I9QXQubWFrZWRldihBdC5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gQXQucmVnaXN0ZXJEZXZpY2UoY3Ise29wZW46THI9PntMci5zZWVrYWJsZT0hMX0sY2xvc2U6THI9Pnt0biYm''@;'; put 'put ''dG4uYnVmZmVyJiZ0bi5idWZmZXIubGVuZ3RoJiZ0bigxMCl9LHJlYWQ6KExyLGdvLE1vLGZvLEpvKT0+e2Zvcih2YXIgWWk9MCxZcz0wO1lzPGZvO1lzKyspe3ZhciBJbDt0cnl7SWw9UnQoKX1jYXRjaHt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09SWwmJjA9PT1Z''@;'; put 'put ''aSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2KTtpZihudWxsPT1JbClicmVhaztZaSsrLGdvW01vK1lzXT1JbH1yZXR1cm4gWWkmJihMci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxZaX0sd3JpdGU6KExyLGdvLE1vLGZvLEpvKT0+e2Zvcih2YXIgWWk9MDtZaTxmbztZaSsrKXRyeXt0''@;'; put 'put ''bihnb1tNbytZaV0pfWNhdGNoe3Rocm93IG5ldyBBdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gZm8mJihMci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxZaX19KSxBdC5ta2Rldih3bixzcixjcil9LGZvcmNlTG9hZEZpbGU6c3Q9PntpZihzdC5pc0RldmljZXx8c3QuaXNGb2xkZXJ8fHN0''@;'; put 'put ''Lmxpbmt8fHN0LmNvbnRlbnRzKXJldHVybiEwO3Rocm93IHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSI/bmV3IEVycm9yKCJMYXp5IGxvYWRpbmcgc2hvdWxkIGhhdmUgYmVlbiBwZXJmb3JtZWQgKGNvbnRlbnRzIHNldCkgaW4gY3JlYXRlTGF6eUZpbGUsIGJ1dCBpdCB3YXMgbm90LiBMYXp5''@;'; put 'put ''IGxvYWRpbmcgb25seSB3b3JrcyBpbiB3ZWIgd29ya2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIG9uIHRoZSBtYWluIHRocmVhZC4iKTpuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIHdpdGhvdXQgcmVhZCgpIG9yIFhNTEh0dHBSZXF1ZXN0LiIpfSxjcmVh''@;'; put 'put ''dGVMYXp5RmlsZTooc3QsZ3QsUnQsdG4sd24pPT57ZnVuY3Rpb24gc3IoKXt0aGlzLmxlbmd0aEtub3duPSExLHRoaXMuY2h1bmtzPVtdfWlmKHNyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZm8pe2lmKCEoZm8+dGhpcy5sZW5ndGgtMXx8Zm88MCkpe3ZhciBKbz1mbyV0aGlzLmNodW5rU2l6''@;'; put 'put ''ZTtyZXR1cm4gdGhpcy5nZXR0ZXIoZm8vdGhpcy5jaHVua1NpemV8MClbSm9dfX0sc3IucHJvdG90eXBlLnNldERhdGFHZXR0ZXI9ZnVuY3Rpb24oZm8pe3RoaXMuZ2V0dGVyPWZvfSxzci5wcm90b3R5cGUuY2FjaGVMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZm89bmV3IFhNTEh0dHBSZXF1ZXN0''@;'; put 'put ''O2lmKGZvLm9wZW4oIkhFQUQiLFJ0LCExKSxmby5zZW5kKG51bGwpLCEoZm8uc3RhdHVzPj0yMDAmJmZvLnN0YXR1czwzMDB8fDMwND09PWZvLnN0YXR1cykpdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBsb2FkICIrUnQrIi4gU3RhdHVzOiAiK2ZvLnN0YXR1cyk7dmFyIEpvLFlpPU51bWJl''@;'; put 'put ''cihmby5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSksWXM9KEpvPWZvLmdldFJlc3BvbnNlSGVhZGVyKCJBY2NlcHQtUmFuZ2VzIikpJiYiYnl0ZXMiPT09Sm8sSWw9KEpvPWZvLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LUVuY29kaW5nIikpJiYiZ3ppcCI9PT1KbyxN''@;'; put 'put ''bD0xMDQ4NTc2O1lzfHwoTWw9WWkpO3ZhciBRdT10aGlzO1F1LnNldERhdGFHZXR0ZXIoY2w9Pnt2YXIgQWk9Y2wqTWwsam89KGNsKzEpKk1sLTE7aWYoam89TWF0aC5taW4oam8sWWktMSksdm9pZCAwPT09UXUuY2h1bmtzW2NsXSYmKFF1LmNodW5rc1tjbF09KChxYyxMbCk9PntpZihxYz5M''@;'; put 'put ''bCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcmFuZ2UgKCIrcWMrIiwgIitMbCsiKSBvciBubyBieXRlcyByZXF1ZXN0ZWQhIik7aWYoTGw+WWktMSl0aHJvdyBuZXcgRXJyb3IoIm9ubHkgIitZaSsiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTt2YXIgdGM9bmV3IFhN''@;'; put 'put ''TEh0dHBSZXF1ZXN0O2lmKHRjLm9wZW4oIkdFVCIsUnQsITEpLFlpIT09TWwmJnRjLnNldFJlcXVlc3RIZWFkZXIoIlJhbmdlIiwiYnl0ZXM9IitxYysiLSIrTGwpLHRjLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLHRjLm92ZXJyaWRlTWltZVR5cGUmJnRjLm92ZXJyaWRlTWltZVR5cGUo''@;'; put 'put ''InRleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQiKSx0Yy5zZW5kKG51bGwpLCEodGMuc3RhdHVzPj0yMDAmJnRjLnN0YXR1czwzMDB8fDMwND09PXRjLnN0YXR1cykpdGhyb3cgbmV3IEVycm9yKCJDb3VsZG4ndCBsb2FkICIrUnQrIi4gU3RhdHVzOiAiK3RjLnN0YXR1cyk7cmV0''@;'; put 'put ''dXJuIHZvaWQgMCE9PXRjLnJlc3BvbnNlP25ldyBVaW50OEFycmF5KHRjLnJlc3BvbnNlfHxbXSk6R28odGMucmVzcG9uc2VUZXh0fHwiIiwhMCl9KShBaSxqbykpLHZvaWQgMD09PVF1LmNodW5rc1tjbF0pdGhyb3cgbmV3IEVycm9yKCJkb1hIUiBmYWlsZWQhIik7cmV0dXJuIFF1LmNodW5r''@;'; put 'put ''c1tjbF19KSwhSWwmJllpfHwoTWw9WWk9MSxZaT10aGlzLmdldHRlcigwKS5sZW5ndGgsTWw9WWksVygiTGF6eUZpbGVzIG9uIGd6aXAgZm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIikpLHRoaXMuX2xlbmd0aD1ZaSx0aGlzLl9jaHVu''@;'; put 'put ''a1NpemU9TWwsdGhpcy5sZW5ndGhLbm93bj0hMH0sdHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyJDYW5ub3QgZG8gc3luY2hyb25vdXMgYmluYXJ5IFhIUnMgb3V0c2lkZSB3ZWJ3b3JrZXJzIGluIG1vZGVybiBicm93c2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQt''@;'; put 'put ''ZmlsZSBpbiBlbWNjIjt2YXIgY3I9e2lzRGV2aWNlOiExLHVybDpSdH0sTHI9QXQuY3JlYXRlRmlsZShzdCxndCxjcix0bix3bik7Y3IuY29udGVudHM/THIuY29udGVudHM9Y3IuY29udGVudHM6Y3IudXJsJiYoTHIuY29udGVudHM9bnVsbCxMci51cmw9Y3IudXJsKSxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydGllcyhMcix7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBnbz17fTtmdW5jdGlvbiBNbyhmbyxKbyxZaSxZcyxJbCl7dmFyIE1sPWZvLm5vZGUuY29udGVudHM7aWYoSWw+PU1sLmxlbmd0aClyZXR1cm4gMDt2YXIg''@;'; put 'put ''UXU9TWF0aC5taW4oTWwubGVuZ3RoLUlsLFlzKTtpZihNbC5zbGljZSlmb3IodmFyIGNsPTA7Y2w8UXU7Y2wrKylKb1tZaStjbF09TWxbSWwrY2xdO2Vsc2UgZm9yKGNsPTA7Y2w8UXU7Y2wrKylKb1tZaStjbF09TWwuZ2V0KElsK2NsKTtyZXR1cm4gUXV9cmV0dXJuIE9iamVjdC5rZXlzKExy''@;'; put 'put ''LnN0cmVhbV9vcHMpLmZvckVhY2goZm89Pnt2YXIgSm89THIuc3RyZWFtX29wc1tmb107Z29bZm9dPWZ1bmN0aW9uKCl7cmV0dXJuIEF0LmZvcmNlTG9hZEZpbGUoTHIpLEpvLmFwcGx5KG51bGwsYXJndW1lbnRzKX19KSxnby5yZWFkPShmbyxKbyxZaSxZcyxJbCk9PihBdC5mb3JjZUxvYWRG''@;'; put 'put ''aWxlKExyKSxNbyhmbyxKbyxZaSxZcyxJbCkpLGdvLm1tYXA9KGZvLEpvLFlpLFlzLElsKT0+e0F0LmZvcmNlTG9hZEZpbGUoTHIpO3ZhciBNbD1nYShKbyk7aWYoIU1sKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gTW8oZm8sZXQsTWwsSm8sWWkpLHtwdHI6TWwsYWxsb2Nh''@;'; put 'put ''dGVkOiEwfX0sTHIuc3RyZWFtX29wcz1nbyxMcn0sY3JlYXRlUHJlbG9hZGVkRmlsZTooc3QsZ3QsUnQsdG4sd24sc3IsY3IsTHIsZ28sTW8pPT57dmFyIFlpLElsLFF1LGZvPWd0P1hvLnJlc29sdmUoUmkuam9pbjIoc3QsZ3QpKTpzdDtmdW5jdGlvbiBKbyhZaSl7ZnVuY3Rpb24gWXMoSWwp''@;'; put 'put ''e01vJiZNbygpLExyfHxBdC5jcmVhdGVEYXRhRmlsZShzdCxndCxJbCx0bix3bixnbyksc3ImJnNyKCksY24oKX1Ccm93c2VyLmhhbmRsZWRCeVByZWxvYWRQbHVnaW4oWWksZm8sWXMsKCk9PntjciYmY3IoKSxjbigpfSl8fFlzKFlpKX1PdCgpLCJzdHJpbmciPT10eXBlb2YgUnQ/KElsPWNy''@;'; put 'put ''LFF1PSJhbCAiKyhZaT1SdCksKHZvaWQgMCkoWWksY2w9PntaZShjbCwnTG9hZGluZyBkYXRhIGZpbGUgIicrWWkrJyIgZmFpbGVkIChubyBhcnJheUJ1ZmZlcikuJyksKFlpPT57Sm8oWWkpfSkobmV3IFVpbnQ4QXJyYXkoY2wpKSxRdSYmY24oKX0sY2w9PntpZighSWwpdGhyb3cnTG9hZGlu''@;'; put 'put ''ZyBkYXRhIGZpbGUgIicrWWkrJyIgZmFpbGVkLic7SWwoKX0pLFF1JiZPdCgpKTpKbyhSdCl9LGluZGV4ZWREQjooKT0+d2luZG93LmluZGV4ZWREQnx8d2luZG93Lm1vekluZGV4ZWREQnx8d2luZG93LndlYmtpdEluZGV4ZWREQnx8d2luZG93Lm1zSW5kZXhlZERCLERCX05BTUU6KCk9PiJF''@;'; put 'put ''TV9GU18iK3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxEQl9WRVJTSU9OOjIwLERCX1NUT1JFX05BTUU6IkZJTEVfREFUQSIsc2F2ZUZpbGVzVG9EQjooc3QsZ3QsUnQpPT57Z3Q9Z3R8fCgoKT0+e30pLFJ0PVJ0fHwoKCk9Pnt9KTt2YXIgdG49QXQuaW5kZXhlZERCKCk7dHJ5e3ZhciB3bj10''@;'; put 'put ''bi5vcGVuKEF0LkRCX05BTUUoKSxBdC5EQl9WRVJTSU9OKX1jYXRjaChzcil7cmV0dXJuIFJ0KHNyKX13bi5vbnVwZ3JhZGVuZWVkZWQ9KCk9PntXKCJjcmVhdGluZyBkYiIpLHduLnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZShBdC5EQl9TVE9SRV9OQU1FKX0sd24ub25zdWNjZXNzPSgpPT57''@;'; put 'put ''dmFyIHNyPXduLnJlc3VsdC50cmFuc2FjdGlvbihbQXQuREJfU1RPUkVfTkFNRV0sInJlYWR3cml0ZSIpLGNyPXNyLm9iamVjdFN0b3JlKEF0LkRCX1NUT1JFX05BTUUpLExyPTAsZ289MCxNbz1zdC5sZW5ndGg7ZnVuY3Rpb24gZm8oKXswPT1nbz9ndCgpOlJ0KCl9c3QuZm9yRWFjaChKbz0+''@;'; put 'put ''e3ZhciBZaT1jci5wdXQoQXQuYW5hbHl6ZVBhdGgoSm8pLm9iamVjdC5jb250ZW50cyxKbyk7WWkub25zdWNjZXNzPSgpPT57KytMcitnbz09TW8mJmZvKCl9LFlpLm9uZXJyb3I9KCk9PntnbysrLExyK2dvPT1NbyYmZm8oKX19KSxzci5vbmVycm9yPVJ0fSx3bi5vbmVycm9yPVJ0fSxsb2Fk''@;'; put 'put ''RmlsZXNGcm9tREI6KHN0LGd0LFJ0KT0+e2d0PWd0fHwoKCk9Pnt9KSxSdD1SdHx8KCgpPT57fSk7dmFyIHRuPUF0LmluZGV4ZWREQigpO3RyeXt2YXIgd249dG4ub3BlbihBdC5EQl9OQU1FKCksQXQuREJfVkVSU0lPTil9Y2F0Y2goc3Ipe3JldHVybiBSdChzcil9d24ub251cGdyYWRlbmVl''@;'; put 'put ''ZGVkPVJ0LHduLm9uc3VjY2Vzcz0oKT0+e3ZhciBzcj13bi5yZXN1bHQ7dHJ5e3ZhciBjcj1zci50cmFuc2FjdGlvbihbQXQuREJfU1RPUkVfTkFNRV0sInJlYWRvbmx5Iil9Y2F0Y2goWWkpe3JldHVybiB2b2lkIFJ0KFlpKX12YXIgTHI9Y3Iub2JqZWN0U3RvcmUoQXQuREJfU1RPUkVfTkFN''@;'; put 'put ''RSksZ289MCxNbz0wLGZvPXN0Lmxlbmd0aDtmdW5jdGlvbiBKbygpezA9PU1vP2d0KCk6UnQoKX1zdC5mb3JFYWNoKFlpPT57dmFyIFlzPUxyLmdldChZaSk7WXMub25zdWNjZXNzPSgpPT57QXQuYW5hbHl6ZVBhdGgoWWkpLmV4aXN0cyYmQXQudW5saW5rKFlpKSxBdC5jcmVhdGVEYXRhRmls''@;'; put 'put ''ZShSaS5kaXJuYW1lKFlpKSxSaS5iYXNlbmFtZShZaSksWXMucmVzdWx0LCEwLCEwLCEwKSwrK2dvK01vPT1mbyYmSm8oKX0sWXMub25lcnJvcj0oKT0+e01vKyssZ28rTW89PWZvJiZKbygpfX0pLGNyLm9uZXJyb3I9UnR9LHduLm9uZXJyb3I9UnR9fSxJaT17REVGQVVMVF9QT0xMTUFTSzo1''@;'; put 'put ''LGNhbGN1bGF0ZUF0OmZ1bmN0aW9uKHN0LGd0LFJ0KXtpZihSaS5pc0FicyhndCkpcmV0dXJuIGd0O3ZhciB0bjtpZih0bj0tMTAwPT09c3Q/QXQuY3dkKCk6SWkuZ2V0U3RyZWFtRnJvbUZEKHN0KS5wYXRoLDA9PWd0Lmxlbmd0aCl7aWYoIVJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0''@;'; put 'put ''KTtyZXR1cm4gdG59cmV0dXJuIFJpLmpvaW4yKHRuLGd0KX0sZG9TdGF0OmZ1bmN0aW9uKHN0LGd0LFJ0KXt0cnl7dmFyIHRuPXN0KGd0KX1jYXRjaChMcil7aWYoTHImJkxyLm5vZGUmJlJpLm5vcm1hbGl6ZShndCkhPT1SaS5ub3JtYWxpemUoQXQuZ2V0UGF0aChMci5ub2RlKSkpcmV0dXJu''@;'; put 'put ''LTU0O3Rocm93IExyfVN0W1J0Pj4yXT10bi5kZXYsU3RbUnQrOD4+Ml09dG4uaW5vLFN0W1J0KzEyPj4yXT10bi5tb2RlLFF0W1J0KzE2Pj4yXT10bi5ubGluayxTdFtSdCsyMD4+Ml09dG4udWlkLFN0W1J0KzI0Pj4yXT10bi5naWQsU3RbUnQrMjg+PjJdPXRuLnJkZXYsSG49W3RuLnNpemU+''@;'; put 'put ''Pj4wLChVcj10bi5zaXplLCtNYXRoLmFicyhVcik+PTE/VXI+MD8oMHxNYXRoLm1pbigrTWF0aC5mbG9vcihVci80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1KSk+Pj4wOn5+K01hdGguY2VpbCgoVXItKyh+flVyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sU3RbUnQrNDA+PjJdPUhuWzBdLFN0''@;'; put 'put ''W1J0KzQ0Pj4yXT1IblsxXSxTdFtSdCs0OD4+Ml09NDA5NixTdFtSdCs1Mj4+Ml09dG4uYmxvY2tzO3ZhciB3bj10bi5hdGltZS5nZXRUaW1lKCksc3I9dG4ubXRpbWUuZ2V0VGltZSgpLGNyPXRuLmN0aW1lLmdldFRpbWUoKTtyZXR1cm4gSG49W01hdGguZmxvb3Iod24vMWUzKT4+PjAsKFVy''@;'; put 'put ''PU1hdGguZmxvb3Iod24vMWUzKSwrTWF0aC5hYnMoVXIpPj0xP1VyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoVXIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKFVyLSsofn5Vcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0KzU2Pj4yXT1Iblsw''@;'; put 'put ''XSxTdFtSdCs2MD4+Ml09SG5bMV0sUXRbUnQrNjQ+PjJdPXduJTFlMyoxZTMsSG49W01hdGguZmxvb3Ioc3IvMWUzKT4+PjAsKFVyPU1hdGguZmxvb3Ioc3IvMWUzKSwrTWF0aC5hYnMoVXIpPj0xP1VyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoVXIvNDI5NDk2NzI5NiksNDI5NDk2NzI5''@;'; put 'put ''NSkpPj4+MDp+fitNYXRoLmNlaWwoKFVyLSsofn5Vcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0KzcyPj4yXT1IblswXSxTdFtSdCs3Nj4+Ml09SG5bMV0sUXRbUnQrODA+PjJdPXNyJTFlMyoxZTMsSG49W01hdGguZmxvb3IoY3IvMWUzKT4+PjAsKFVyPU1hdGguZmxvb3IoY3Iv''@;'; put 'put ''MWUzKSwrTWF0aC5hYnMoVXIpPj0xP1VyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoVXIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKFVyLSsofn5Vcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0Kzg4Pj4yXT1IblswXSxTdFtSdCs5Mj4+Ml09''@;'; put 'put ''SG5bMV0sUXRbUnQrOTY+PjJdPWNyJTFlMyoxZTMsSG49W3RuLmlubz4+PjAsKFVyPXRuLmlubywrTWF0aC5hYnMoVXIpPj0xP1VyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoVXIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKFVyLSsofn5Vcj4+PjApKS80''@;'; put 'put ''Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0KzEwND4+Ml09SG5bMF0sU3RbUnQrMTA4Pj4yXT1IblsxXSwwfSxkb01zeW5jOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtpZighQXQuaXNGaWxlKGd0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDMpO2lmKDImdG4pcmV0dXJu''@;'; put 'put ''IDA7dmFyIHNyPXl0LnNsaWNlKHN0LHN0K1J0KTtBdC5tc3luYyhndCxzcix3bixSdCx0bil9LHZhcmFyZ3M6dm9pZCAwLGdldDpmdW5jdGlvbigpe3JldHVybiBJaS52YXJhcmdzKz00LFN0W0lpLnZhcmFyZ3MtND4+Ml19LGdldFN0cjpmdW5jdGlvbihzdCl7cmV0dXJuIGxyKHN0KX0sZ2V0''@;'; put 'put ''U3RyZWFtRnJvbUZEOmZ1bmN0aW9uKHN0KXt2YXIgZ3Q9QXQuZ2V0U3RyZWFtKHN0KTtpZighZ3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7cmV0dXJuIGd0fX0sUXM9W107ZnVuY3Rpb24gRnMoc3Qpe3RyeXtyZXR1cm4gZ2UuZ3JvdyhzdC1vdC5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYp''@;'; put 'put ''LHVpKGdlLmJ1ZmZlciksMX1jYXRjaHt9fXZhciBlYz17fTtmdW5jdGlvbiBDYSgpe2lmKCFDYS5zdHJpbmdzKXt2YXIgc3Q9e1VTRVI6IndlYl91c2VyIixMT0dOQU1FOiJ3ZWJfdXNlciIsUEFUSDoiLyIsUFdEOiIvIixIT01FOiIvaG9tZS93ZWJfdXNlciIsTEFORzooIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5sYW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixfOl98fCIuL3RoaXMucHJvZ3JhbSJ9O2Zvcih2YXIgZ3QgaW4gZWMpdm9pZCAwPT09ZWNbZ3RdP2RlbGV0ZSBzdFtndF06c3Rb''@;'; put 'put ''Z3RdPWVjW2d0XTt2YXIgUnQ9W107Zm9yKHZhciBndCBpbiBzdClSdC5wdXNoKGd0KyI9IitzdFtndF0pO0NhLnN0cmluZ3M9UnR9cmV0dXJuIENhLnN0cmluZ3N9ZnVuY3Rpb24gRGwoc3Qpe3JldHVybiBzdCU0PT0wJiYoc3QlMTAwIT0wfHxzdCU0MDA9PTApfXZhciB4Mj1bMzEsMjksMzEs''@;'; put 'put ''MzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLHU0PVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sQ2Q9ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3N0fHwoc3Q9dGhpcyksdGhpcy5wYXJlbnQ9c3QsdGhpcy5tb3VudD1zdC5tb3VudCx0aGlzLm1vdW50ZWQ9bnVsbCx0aGlz''@;'; put 'put ''LmlkPUF0Lm5leHRJbm9kZSsrLHRoaXMubmFtZT1ndCx0aGlzLm1vZGU9UnQsdGhpcy5ub2RlX29wcz17fSx0aGlzLnN0cmVhbV9vcHM9e30sdGhpcy5yZGV2PXRufTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDZC5wcm90b3R5cGUse3JlYWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiAzNjU9''@;'; put 'put ''PSgzNjUmdGhpcy5tb2RlKX0sc2V0OmZ1bmN0aW9uKHN0KXtzdD90aGlzLm1vZGV8PTM2NTp0aGlzLm1vZGUmPS0zNjZ9fSx3cml0ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDE0Nj09KDE0NiZ0aGlzLm1vZGUpfSxzZXQ6ZnVuY3Rpb24oc3Qpe3N0P3RoaXMubW9kZXw9MTQ2OnRoaXMubW9k''@;'; put 'put ''ZSY9LTE0N319LGlzRm9sZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQXQuaXNEaXIodGhpcy5tb2RlKX19LGlzRGV2aWNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQXQuaXNDaHJkZXYodGhpcy5tb2RlKX19fSksQXQuRlNOb2RlPUNkLEF0LnN0YXRpY0luaXQoKTt2YXIgSnU9e2I6ZnVu''@;'; put 'put ''Y3Rpb24oc3QsZ3QsUnQpe3Rocm93IG5ldyBIcihzdCkuaW5pdChndCxSdCksc3R9LGw6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3RyeXtpZihndD1JaS5nZXRTdHIoZ3QpLGd0PUlpLmNhbGN1bGF0ZUF0KHN0LGd0KSwtOCZSdClyZXR1cm4tMjg7dmFyIHduPUF0Lmxvb2t1cFBhdGgoZ3Qse2Zv''@;'; put 'put ''bGxvdzohMH0pLm5vZGU7aWYoIXduKXJldHVybi00NDt2YXIgc3I9IiI7cmV0dXJuIDQmUnQmJihzcis9InIiKSwyJlJ0JiYoc3IrPSJ3IiksMSZSdCYmKHNyKz0ieCIpLHNyJiZBdC5ub2RlUGVybWlzc2lvbnMod24sc3IpPy0yOjB9Y2F0Y2goY3Ipe2lmKHZvaWQgMD09PUF0fHwhKGNyIGlu''@;'; put 'put ''c3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgY3I7cmV0dXJuLWNyLmVycm5vfX0saTpmdW5jdGlvbihzdCxndCxSdCl7SWkudmFyYXJncz1SdDt0cnl7dmFyIHRuPUlpLmdldFN0cmVhbUZyb21GRChzdCk7c3dpdGNoKGd0KXtjYXNlIDA6cmV0dXJuKHduPUlpLmdldCgpKTwwPy0yODpB''@;'; put 'put ''dC5jcmVhdGVTdHJlYW0odG4sd24pLmZkO2Nhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNzpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIHRuLmZsYWdzO2Nhc2UgNDp2YXIgd249SWkuZ2V0KCk7cmV0dXJuIHRuLmZsYWdzfD13biwwO2Nhc2UgNTpyZXR1cm4gd249SWkuZ2V0KCksa3Rbd24rMD4+''@;'; put 'put ''MV09MiwwO2Nhc2UgMTY6Y2FzZSA4OmRlZmF1bHQ6cmV0dXJuLTI4O2Nhc2UgOTpyZXR1cm4gU3RbU3coKT4+Ml09MjgsLTF9fWNhdGNoKGNyKXtpZih2b2lkIDA9PT1BdHx8IShjciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IGNyO3JldHVybi1jci5lcnJub319LHc6ZnVuY3Rp''@;'; put 'put ''b24oc3QsZ3Qpe3RyeXt2YXIgUnQ9SWkuZ2V0U3RyZWFtRnJvbUZEKHN0KTtyZXR1cm4gSWkuZG9TdGF0KEF0LnN0YXQsUnQucGF0aCxndCl9Y2F0Y2godG4pe2lmKHZvaWQgMD09PUF0fHwhKHRuIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgdG47cmV0dXJuLXRuLmVycm5vfX0s''@;'; put 'put ''eDpmdW5jdGlvbihzdCxndCxSdCl7SWkudmFyYXJncz1SdDt0cnl7dmFyIHRuPUlpLmdldFN0cmVhbUZyb21GRChzdCk7c3dpdGNoKGd0KXtjYXNlIDIxNTA5OmNhc2UgMjE1MDU6Y2FzZSAyMTUxMDpjYXNlIDIxNTExOmNhc2UgMjE1MTI6Y2FzZSAyMTUwNjpjYXNlIDIxNTA3OmNhc2UgMjE1''@;'; put 'put ''MDg6Y2FzZSAyMTUyMzpjYXNlIDIxNTI0OnJldHVybiB0bi50dHk/MDotNTk7Y2FzZSAyMTUxOTppZighdG4udHR5KXJldHVybi01OTt2YXIgd249SWkuZ2V0KCk7cmV0dXJuIFN0W3duPj4yXT0wLDA7Y2FzZSAyMTUyMDpyZXR1cm4gdG4udHR5Py0yODotNTk7Y2FzZSAyMTUzMTpyZXR1cm4g''@;'; put 'put ''d249SWkuZ2V0KCksQXQuaW9jdGwodG4sZ3Qsd24pO2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaChzcil7aWYodm9pZCAwPT09QXR8fCEoc3IgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBzcjtyZXR1cm4tc3IuZXJybm99fSx1OmZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXt0cnl7Z3Q9''@;'; put 'put ''SWkuZ2V0U3RyKGd0KTt2YXIgd249MjU2JnRuLHNyPTQwOTYmdG47cmV0dXJuIHRuJj0tNjQwMSxndD1JaS5jYWxjdWxhdGVBdChzdCxndCxzciksSWkuZG9TdGF0KHduP0F0LmxzdGF0OkF0LnN0YXQsZ3QsUnQpfWNhdGNoKGNyKXtpZih2b2lkIDA9PT1BdHx8IShjciBpbnN0YW5jZW9mIEF0''@;'; put 'put ''LkVycm5vRXJyb3IpKXRocm93IGNyO3JldHVybi1jci5lcnJub319LGQ6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe0lpLnZhcmFyZ3M9dG47dHJ5e2d0PUlpLmdldFN0cihndCksZ3Q9SWkuY2FsY3VsYXRlQXQoc3QsZ3QpO3ZhciB3bj10bj9JaS5nZXQoKTowO3JldHVybiBBdC5vcGVuKGd0LFJ0''@;'; put 'put ''LHduKS5mZH1jYXRjaChzcil7aWYodm9pZCAwPT09QXR8fCEoc3IgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBzcjtyZXR1cm4tc3IuZXJybm99fSx2OmZ1bmN0aW9uKHN0LGd0KXt0cnl7cmV0dXJuIHN0PUlpLmdldFN0cihzdCksSWkuZG9TdGF0KEF0LnN0YXQsc3QsZ3QpfWNh''@;'; put 'put ''dGNoKFJ0KXtpZih2b2lkIDA9PT1BdHx8IShSdCBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IFJ0O3JldHVybi1SdC5lcnJub319LHA6ZnVuY3Rpb24oc3QsZ3QsUnQpe3RyeXtyZXR1cm4gZ3Q9SWkuZ2V0U3RyKGd0KSxndD1JaS5jYWxjdWxhdGVBdChzdCxndCksMD09PVJ0P0F0''@;'; put 'put ''LnVubGluayhndCk6NTEyPT09UnQ/QXQucm1kaXIoZ3QpOmtuKCJJbnZhbGlkIGZsYWdzIHBhc3NlZCB0byB1bmxpbmthdCIpLDB9Y2F0Y2godG4pe2lmKHZvaWQgMD09PUF0fHwhKHRuIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgdG47cmV0dXJuLXRuLmVycm5vfX0sajpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiEwfSxxOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduLHNyLGNyKXt0cnl7dmFyIExyPUlpLmdldFN0cmVhbUZyb21GRCh0biksZ289QXQubW1hcChMcixzdCx3bixndCxSdCksTW89Z28ucHRyO3JldHVybiBTdFtzcj4+Ml09Z28uYWxsb2NhdGVkLFF0W2NyPj4yXT1Nbyww''@;'; put 'put ''fWNhdGNoKGZvKXtpZih2b2lkIDA9PT1BdHx8IShmbyBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IGZvO3JldHVybi1mby5lcnJub319LHI6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24sc3Ipe3RyeXt2YXIgY3I9SWkuZ2V0U3RyZWFtRnJvbUZEKHduKTsyJlJ0JiZJaS5kb01zeW5j''@;'; put 'put ''KHN0LGNyLGd0LHRuLHNyKSxBdC5tdW5tYXAoY3IpfWNhdGNoKExyKXtpZih2b2lkIDA9PT1BdHx8IShMciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IExyO3JldHVybi1Mci5lcnJub319LGE6ZnVuY3Rpb24oKXtrbigiIil9LHk6ZnVuY3Rpb24oc3QsZ3QsUnQpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbiBsYShzdCxndCxSdCl7dmFyIHRuPWZ1bmN0aW9uKHduLHNyKXt2YXIgY3I7Zm9yKFFzLmxlbmd0aD0wLHNyPj49Mjtjcj15dFt3bisrXTspc3IrPTEwNSE9Y3Imc3IsUXMucHVzaCgxMDU9PWNyP1N0W3NyXTpubltzcisrPj4xXSksKytzcjtyZXR1cm4gUXN9KGd0LFJ0KTtyZXR1''@;'; put 'put ''cm4gUnJbc3RdLmFwcGx5KG51bGwsdG4pfShzdCxndCxSdCl9LGU6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKX0sazpmdW5jdGlvbihzdCxndCxSdCl7eXQuY29weVdpdGhpbihzdCxndCxndCtSdCl9LG86ZnVuY3Rpb24oc3Qpe3ZhciBndCx0bj15dC5sZW5ndGgsd249MjE0NzQ4MzY0''@;'; put 'put ''ODtpZigoc3Q+Pj49MCk+d24pcmV0dXJuITE7Zm9yKHZhciBzcj0xO3NyPD00O3NyKj0yKXt2YXIgY3I9dG4qKDErLjIvc3IpO2lmKGNyPU1hdGgubWluKGNyLHN0KzEwMDY2MzI5NiksRnMoTWF0aC5taW4od24sKGd0PU1hdGgubWF4KHN0LGNyKSkrKDY1NTM2LWd0JTY1NTM2KSU2NTUzNikp''@;'; put 'put ''KXJldHVybiEwfXJldHVybiExfSxzOmZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9MDtyZXR1cm4gQ2EoKS5mb3JFYWNoKGZ1bmN0aW9uKHRuLHduKXt2YXIgc3I9Z3QrUnQ7UXRbc3QrNCp3bj4+Ml09c3IsZnVuY3Rpb24oY3IsTHIsZ28pe2Zvcih2YXIgTW89MDtNbzxjci5sZW5ndGg7KytNbyll''@;'; put 'put ''dFtMcisrPj4wXT1jci5jaGFyQ29kZUF0KE1vKTtldFtMcj4+MF09MH0odG4sc3IpLFJ0Kz10bi5sZW5ndGgrMX0pLDB9LHQ6ZnVuY3Rpb24oc3QsZ3Qpe3ZhciBSdD1DYSgpO1F0W3N0Pj4yXT1SdC5sZW5ndGg7dmFyIHRuPTA7cmV0dXJuIFJ0LmZvckVhY2goZnVuY3Rpb24od24pe3RuKz13''@;'; put 'put ''bi5sZW5ndGgrMX0pLFF0W2d0Pj4yXT10biwwfSxmOmZ1bmN0aW9uKHN0LGd0KXshZnVuY3Rpb24gUmgoc3Qpe3dlfHwoZC5vbkV4aXQmJmQub25FeGl0KHN0KSxFZT0hMCksVChzdCxuZXcgJHIoc3QpKX0oc3QpfSxjOmZ1bmN0aW9uKHN0KXt0cnl7dmFyIGd0PUlpLmdldFN0cmVhbUZyb21G''@;'; put 'put ''RChzdCk7cmV0dXJuIEF0LmNsb3NlKGd0KSwwfWNhdGNoKFJ0KXtpZih2b2lkIDA9PT1BdHx8IShSdCBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IFJ0O3JldHVybiBSdC5lcnJub319LGc6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3RyeXt2YXIgd249ZnVuY3Rpb24oc3IsY3IsTHIs''@;'; put 'put ''Z28pe2Zvcih2YXIgTW89MCxmbz0wO2ZvPExyO2ZvKyspe3ZhciBKbz1RdFtjcj4+Ml0sWWk9UXRbY3IrND4+Ml07Y3IrPTg7dmFyIFlzPUF0LnJlYWQoc3IsZXQsSm8sWWksdm9pZCAwKTtpZihZczwwKXJldHVybi0xO2lmKE1vKz1ZcyxZczxZaSlicmVha31yZXR1cm4gTW99KElpLmdldFN0''@;'; put 'put ''cmVhbUZyb21GRChzdCksZ3QsUnQpO3JldHVybiBRdFt0bj4+Ml09d24sMH1jYXRjaChzcil7aWYodm9pZCAwPT09QXR8fCEoc3IgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBzcjtyZXR1cm4gc3IuZXJybm99fSxtOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXt0cnl7dmFyIHNy''@;'; put 'put ''PShnbz1SdCkrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIShMcj1ndCk/KExyPj4+MCkrNDI5NDk2NzI5NipnbzpOYU47aWYoaXNOYU4oc3IpKXJldHVybiA2MTt2YXIgY3I9SWkuZ2V0U3RyZWFtRnJvbUZEKHN0KTtyZXR1cm4gQXQubGxzZWVrKGNyLHNyLHRuKSxIbj1bY3IucG9zaXRpb24+Pj4w''@;'; put 'put ''LChVcj1jci5wb3NpdGlvbiwrTWF0aC5hYnMoVXIpPj0xP1VyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoVXIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKFVyLSsofn5Vcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W3duPj4yXT1IblswXSxTdFt3''@;'; put 'put ''bis0Pj4yXT1IblsxXSxjci5nZXRkZW50cyYmMD09PXNyJiYwPT09dG4mJihjci5nZXRkZW50cz1udWxsKSwwfWNhdGNoKE1vKXtpZih2b2lkIDA9PT1BdHx8IShNbyBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IE1vO3JldHVybiBNby5lcnJub312YXIgTHIsZ299LGg6ZnVuY3Rp''@;'; put 'put ''b24oc3QsZ3QsUnQsdG4pe3RyeXt2YXIgd249ZnVuY3Rpb24oc3IsY3IsTHIsZ28pe2Zvcih2YXIgTW89MCxmbz0wO2ZvPExyO2ZvKyspe3ZhciBKbz1RdFtjcj4+Ml0sWWk9UXRbY3IrND4+Ml07Y3IrPTg7dmFyIFlzPUF0LndyaXRlKHNyLGV0LEpvLFlpLHZvaWQgMCk7aWYoWXM8MClyZXR1''@;'; put 'put ''cm4tMTtNbys9WXN9cmV0dXJuIE1vfShJaS5nZXRTdHJlYW1Gcm9tRkQoc3QpLGd0LFJ0KTtyZXR1cm4gUXRbdG4+PjJdPXduLDB9Y2F0Y2goc3Ipe2lmKHZvaWQgMD09PUF0fHwhKHNyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgc3I7cmV0dXJuIHNyLmVycm5vfX0sbjpmdW5j''@;'; put 'put ''dGlvbihzdCxndCxSdCx0bix3bil7cmV0dXJuIGZ1bmN0aW9uIE9oKHN0LGd0LFJ0LHRuKXt2YXIgd249U3RbdG4rNDA+PjJdLHNyPXt0bV9zZWM6U3RbdG4+PjJdLHRtX21pbjpTdFt0bis0Pj4yXSx0bV9ob3VyOlN0W3RuKzg+PjJdLHRtX21kYXk6U3RbdG4rMTI+PjJdLHRtX21vbjpTdFt0''@;'; put 'put ''bisxNj4+Ml0sdG1feWVhcjpTdFt0bisyMD4+Ml0sdG1fd2RheTpTdFt0bisyND4+Ml0sdG1feWRheTpTdFt0bisyOD4+Ml0sdG1faXNkc3Q6U3RbdG4rMzI+PjJdLHRtX2dtdG9mZjpTdFt0biszNj4+Ml0sdG1fem9uZTp3bj9scih3bik6IiJ9LGNyPWxyKFJ0KSxMcj17IiVjIjoiJWEgJWIg''@;'; put 'put ''JWQgJUg6JU06JVMgJVkiLCIlRCI6IiVtLyVkLyV5IiwiJUYiOiIlWS0lbS0lZCIsIiVoIjoiJWIiLCIlciI6IiVJOiVNOiVTICVwIiwiJVIiOiIlSDolTSIsIiVUIjoiJUg6JU06JVMiLCIleCI6IiVtLyVkLyV5IiwiJVgiOiIlSDolTTolUyIsIiVFYyI6IiVjIiwiJUVDIjoiJUMiLCIlRXgi''@;'; put 'put ''OiIlbS8lZC8leSIsIiVFWCI6IiVIOiVNOiVTIiwiJUV5IjoiJXkiLCIlRVkiOiIlWSIsIiVPZCI6IiVkIiwiJU9lIjoiJWUiLCIlT0giOiIlSCIsIiVPSSI6IiVJIiwiJU9tIjoiJW0iLCIlT00iOiIlTSIsIiVPUyI6IiVTIiwiJU91IjoiJXUiLCIlT1UiOiIlVSIsIiVPViI6IiVWIiwiJU93''@;'; put 'put ''IjoiJXciLCIlT1ciOiIlVyIsIiVPeSI6IiV5In07Zm9yKHZhciBnbyBpbiBMciljcj1jci5yZXBsYWNlKG5ldyBSZWdFeHAoZ28sImciKSxMcltnb10pO3ZhciBNbz1bIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5''@;'; put 'put ''Il0sZm89WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdO2Z1bmN0aW9uIEpvKEFpLGpvLHFjKXtmb3IodmFyIExsPSJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgQWk/QWkudG9TdHJpbmcoKTpBaXx8IiI7TGwubGVuZ3RoPGpvOylMbD1xY1swXStMbDtyZXR1cm4gTGx9ZnVuY3Rpb24gWWkoQWksam8pe3JldHVybiBKbyhBaSxqbywiMCIpfWZ1bmN0aW9uIFlzKEFpLGpvKXtmdW5jdGlvbiBxYyh0Yyl7cmV0dXJuIHRjPDA/LTE6dGM+MD8xOjB9dmFy''@;'; put 'put ''IExsO3JldHVybiAwPT09KExsPXFjKEFpLmdldEZ1bGxZZWFyKCktam8uZ2V0RnVsbFllYXIoKSkpJiYwPT09KExsPXFjKEFpLmdldE1vbnRoKCktam8uZ2V0TW9udGgoKSkpJiYoTGw9cWMoQWkuZ2V0RGF0ZSgpLWpvLmdldERhdGUoKSkpLExsfWZ1bmN0aW9uIElsKEFpKXtzd2l0Y2goQWku''@;'; put 'put ''Z2V0RGF5KCkpe2Nhc2UgMDpyZXR1cm4gbmV3IERhdGUoQWkuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIEFpO2Nhc2UgMjpyZXR1cm4gbmV3IERhdGUoQWkuZ2V0RnVsbFllYXIoKSwwLDMpO2Nhc2UgMzpyZXR1cm4gbmV3IERhdGUoQWkuZ2V0RnVsbFllYXIoKSwwLDIp''@;'; put 'put ''O2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUoQWkuZ2V0RnVsbFllYXIoKSwwLDEpO2Nhc2UgNTpyZXR1cm4gbmV3IERhdGUoQWkuZ2V0RnVsbFllYXIoKS0xLDExLDMxKTtjYXNlIDY6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIE1sKEFpKXt2YXIg''@;'; put 'put ''am89ZnVuY3Rpb24oTXJ0LFZUKXtmb3IodmFyIEUxPW5ldyBEYXRlKE1ydC5nZXRUaW1lKCkpO1ZUPjA7KXt2YXIgeHJ0PURsKEUxLmdldEZ1bGxZZWFyKCkpLGFaPUUxLmdldE1vbnRoKCksU2xlPSh4cnQ/eDI6dTQpW2FaXTtpZighKFZUPlNsZS1FMS5nZXREYXRlKCkpKXJldHVybiBFMS5z''@;'; put 'put ''ZXREYXRlKEUxLmdldERhdGUoKStWVCksRTE7VlQtPVNsZS1FMS5nZXREYXRlKCkrMSxFMS5zZXREYXRlKDEpLGFaPDExP0UxLnNldE1vbnRoKGFaKzEpOihFMS5zZXRNb250aCgwKSxFMS5zZXRGdWxsWWVhcihFMS5nZXRGdWxsWWVhcigpKzEpKX1yZXR1cm4gRTF9KG5ldyBEYXRlKEFpLnRt''@;'; put 'put ''X3llYXIrMTkwMCwwLDEpLEFpLnRtX3lkYXkpLHFjPW5ldyBEYXRlKGpvLmdldEZ1bGxZZWFyKCksMCw0KSxMbD1uZXcgRGF0ZShqby5nZXRGdWxsWWVhcigpKzEsMCw0KSx0Yz1JbChxYyksU3J0PUlsKExsKTtyZXR1cm4gWXModGMsam8pPD0wP1lzKFNydCxqbyk8PTA/am8uZ2V0RnVsbFll''@;'; put 'put ''YXIoKSsxOmpvLmdldEZ1bGxZZWFyKCk6am8uZ2V0RnVsbFllYXIoKS0xfXZhciBRdT17IiVhIjpmdW5jdGlvbihBaSl7cmV0dXJuIE1vW0FpLnRtX3dkYXldLnN1YnN0cmluZygwLDMpfSwiJUEiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gTW9bQWkudG1fd2RheV19LCIlYiI6ZnVuY3Rpb24oQWkp''@;'; put 'put ''e3JldHVybiBmb1tBaS50bV9tb25dLnN1YnN0cmluZygwLDMpfSwiJUIiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gZm9bQWkudG1fbW9uXX0sIiVDIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKChBaS50bV95ZWFyKzE5MDApLzEwMHwwLDIpfSwiJWQiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gWWkoQWku''@;'; put 'put ''dG1fbWRheSwyKX0sIiVlIjpmdW5jdGlvbihBaSl7cmV0dXJuIEpvKEFpLnRtX21kYXksMiwiICIpfSwiJWciOmZ1bmN0aW9uKEFpKXtyZXR1cm4gTWwoQWkpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpfSwiJUciOmZ1bmN0aW9uKEFpKXtyZXR1cm4gTWwoQWkpfSwiJUgiOmZ1bmN0aW9uKEFp''@;'; put 'put ''KXtyZXR1cm4gWWkoQWkudG1faG91ciwyKX0sIiVJIjpmdW5jdGlvbihBaSl7dmFyIGpvPUFpLnRtX2hvdXI7cmV0dXJuIDA9PWpvP2pvPTEyOmpvPjEyJiYoam8tPTEyKSxZaShqbywyKX0sIiVqIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKEFpLnRtX21kYXkrZnVuY3Rpb24oam8scWMpe2Zv''@;'; put 'put ''cih2YXIgTGw9MCx0Yz0wO3RjPD1xYztMbCs9am9bdGMrK10pO3JldHVybiBMbH0oRGwoQWkudG1feWVhcisxOTAwKT94Mjp1NCxBaS50bV9tb24tMSksMyl9LCIlbSI6ZnVuY3Rpb24oQWkpe3JldHVybiBZaShBaS50bV9tb24rMSwyKX0sIiVNIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKEFp''@;'; put 'put ''LnRtX21pbiwyKX0sIiVuIjpmdW5jdGlvbigpe3JldHVybiJcbiJ9LCIlcCI6ZnVuY3Rpb24oQWkpe3JldHVybiBBaS50bV9ob3VyPj0wJiZBaS50bV9ob3VyPDEyPyJBTSI6IlBNIn0sIiVTIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKEFpLnRtX3NlYywyKX0sIiV0IjpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiJcdCJ9LCIldSI6ZnVuY3Rpb24oQWkpe3JldHVybiBBaS50bV93ZGF5fHw3fSwiJVUiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gWWkoTWF0aC5mbG9vcigoQWkudG1feWRheSs3LUFpLnRtX3dkYXkpLzcpLDIpfSwiJVYiOmZ1bmN0aW9uKEFpKXt2YXIgam89TWF0aC5mbG9vcigoQWkudG1f''@;'; put 'put ''eWRheSs3LShBaS50bV93ZGF5KzYpJTcpLzcpO2lmKChBaS50bV93ZGF5KzM3MS1BaS50bV95ZGF5LTIpJTc8PTImJmpvKyssam8pe2lmKDUzPT1qbyl7dmFyIHFjPShBaS50bV93ZGF5KzM3MS1BaS50bV95ZGF5KSU3OzQ9PXFjfHwzPT1xYyYmRGwoQWkudG1feWVhcil8fChqbz0xKX19ZWxz''@;'; put 'put ''ZXtqbz01Mjt2YXIgTGw9KEFpLnRtX3dkYXkrNy1BaS50bV95ZGF5LTEpJTc7KDQ9PUxsfHw1PT1MbCYmRGwoQWkudG1feWVhciU0MDAtMSkpJiZqbysrfXJldHVybiBZaShqbywyKX0sIiV3IjpmdW5jdGlvbihBaSl7cmV0dXJuIEFpLnRtX3dkYXl9LCIlVyI6ZnVuY3Rpb24oQWkpe3JldHVy''@;'; put 'put ''biBZaShNYXRoLmZsb29yKChBaS50bV95ZGF5KzctKEFpLnRtX3dkYXkrNiklNykvNyksMil9LCIleSI6ZnVuY3Rpb24oQWkpe3JldHVybihBaS50bV95ZWFyKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpfSwiJVkiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gQWkudG1feWVhcisxOTAwfSwi''@;'; put 'put ''JXoiOmZ1bmN0aW9uKEFpKXt2YXIgam89QWkudG1fZ210b2ZmO3JldHVybihqbz49MD8iKyI6Ii0iKSsoIjAwMDAiKyhqbz0oam89TWF0aC5hYnMoam8pLzYwKS82MCoxMDAram8lNjApKS5zbGljZSgtNCl9LCIlWiI6ZnVuY3Rpb24oQWkpe3JldHVybiBBaS50bV96b25lfSwiJSUiOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIiUifX07Zm9yKHZhciBnbyBpbiBjcj1jci5yZXBsYWNlKC8lJS9nLCJcMFwwIiksUXUpY3IuaW5jbHVkZXMoZ28pJiYoY3I9Y3IucmVwbGFjZShuZXcgUmVnRXhwKGdvLCJnIiksUXVbZ29dKHNyKSkpO3ZhciBjbD1Hbyhjcj1jci5yZXBsYWNlKC9cMFwwL2csIiUiKSwh''@;'; put 'put ''MSk7cmV0dXJuIGNsLmxlbmd0aD5ndD8wOihldC5zZXQoY2wsc3QpLGNsLmxlbmd0aC0xKX0oc3QsZ3QsUnQsdG4pfX07KGZ1bmN0aW9uKCl7dmFyIHN0PXthOkp1fTtmdW5jdGlvbiBndCh3bixzcil7ZC5hc209d24uZXhwb3J0cyx1aSgoZ2U9ZC5hc20ueikuYnVmZmVyKSxRbi51bnNoaWZ0''@;'; put 'put ''KGQuYXNtLkEpLGNuKCl9ZnVuY3Rpb24gUnQod24pe2d0KHduLmluc3RhbmNlKX1mdW5jdGlvbiB0bih3bil7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gT3Ioc3Qpe3RyeXtpZihzdD09Z3ImJmgpcmV0dXJuIG5ldyBVaW50OEFycmF5''@;'; put 'put ''KGgpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChndCl7a24oZ3QpfX0oZ3IpfSkudGhlbihmdW5jdGlvbihzcil7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHNyLHN0KX0pLnRoZW4oZnVuY3Rpb24oc3Ipe3JldHVy''@;'; put 'put ''biBzcn0pLnRoZW4od24sZnVuY3Rpb24oc3Ipe2llKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK3NyKSxrbihzcil9KX1pZihPdCgpLGQuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gZC5pbnN0YW50aWF0ZVdhc20oc3QsZ3QpfWNhdGNoKHduKXtpZSgiTW9k''@;'; put 'put ''dWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIit3biksYSh3bil9KGh8fCJmdW5jdGlvbiIhPXR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZ3x8UG4oZ3IpfHxmdW5jdGlvbiBKbihzdCl7cmV0dXJuIHN0LnN0YXJ0c1dpdGgoImZp''@;'; put 'put ''bGU6Ly8iKX0oZ3IpfHwiZnVuY3Rpb24iIT10eXBlb2YgZmV0Y2g/dG4oUnQpOmZldGNoKGdyLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbih3bil7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHduLHN0KS50aGVuKFJ0LGZ1bmN0aW9u''@;'; put 'put ''KHNyKXtyZXR1cm4gaWUoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK3NyKSxpZSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSx0bihSdCl9KX0pKS5jYXRjaChhKX0pKCksZC5fX193YXNtX2NhbGxfY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm4o''@;'; put 'put ''ZC5fX193YXNtX2NhbGxfY3RvcnM9ZC5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgTTE9ZC5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihNMT1kLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPWQu''@;'; put 'put ''YXNtLkIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTXU9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9ZnVuY3Rpb24oKXtyZXR1cm4oTXU9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9ZC5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxh''@;'; put 'put ''dT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdmVyc2lvbl8wPWZ1bmN0aW9uKCl7cmV0dXJuKGF1PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9ZC5hc20uRCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx4MT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFz''@;'; put 'put ''dEVycm9yXzA9ZnVuY3Rpb24oKXtyZXR1cm4oeDE9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPWQuYXNtLkUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRTI9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj1mdW5jdGlvbigpe3JldHVybihF''@;'; put 'put ''Mj1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPWQuYXNtLkYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRzc9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RSZXN1bHRfMD1mdW5jdGlvbigpe3JldHVybihHNz1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2''@;'; put 'put ''aXpfbGFzdFJlc3VsdF8wPWQuYXNtLkcpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZDQ9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8zPWZ1bmN0aW9uKCl7cmV0dXJuKGQ0PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1kLmFzbS5IKS5hcHBseShudWxs''@;'; put 'put ''LGFyZ3VtZW50cyl9LEN3PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEN3PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPWQuYXNtLkkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07ZC5fZnJlZT1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybihkLl9mcmVlPWQuYXNtLkspLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZC5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuKGQuX21hbGxvYz1kLmFzbS5MKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBlbSxTdz1kLl9fX2Vycm5vX2xvY2F0aW9uPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuKFN3PWQuX19fZXJybm9fbG9jYXRpb249ZC5hc20uTSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxNdz1kLl9lbXNjcmlwdGVuX2J1aWx0aW5fbWVtYWxpZ249ZnVuY3Rpb24oKXtyZXR1cm4oTXc9ZC5fZW1zY3JpcHRlbl9idWlsdGluX21lbWFsaWduPWQuYXNtLk4pLmFwcGx5KG51''@;'; put 'put ''bGwsYXJndW1lbnRzKX0sdG09ZC5fX19jeGFfaXNfcG9pbnRlcl90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuKHRtPWQuX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1kLmFzbS5PKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIHh3KHN0KXtmdW5jdGlvbiBndCgpe2VtfHwoZW09ITAsZC5j''@;'; put 'put ''YWxsZWRSdW49ITAsRWV8fChkLm5vRlNJbml0fHxBdC5pbml0LmluaXRpYWxpemVkfHxBdC5pbml0KCksQXQuaWdub3JlUGVybWlzc2lvbnM9ITEsWnIoUW4pLGwoZCksZC5vblJ1bnRpbWVJbml0aWFsaXplZCYmZC5vblJ1bnRpbWVJbml0aWFsaXplZCgpLGZ1bmN0aW9uKCl7aWYoZC5wb3N0''@;'; put 'put ''UnVuKWZvcigiZnVuY3Rpb24iPT10eXBlb2YgZC5wb3N0UnVuJiYoZC5wb3N0UnVuPVtkLnBvc3RSdW5dKTtkLnBvc3RSdW4ubGVuZ3RoOylSdD1kLnBvc3RSdW4uc2hpZnQoKSxNci51bnNoaWZ0KFJ0KTt2YXIgUnQ7WnIoTXIpfSgpKSl9X3I+MHx8KGZ1bmN0aW9uKCl7aWYoZC5wcmVSdW4p''@;'; put 'put ''Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBkLnByZVJ1biYmKGQucHJlUnVuPVtkLnByZVJ1bl0pO2QucHJlUnVuLmxlbmd0aDspUnQ9ZC5wcmVSdW4uc2hpZnQoKSxQci51bnNoaWZ0KFJ0KTt2YXIgUnQ7WnIoUHIpfSgpLF9yPjB8fChkLnNldFN0YXR1cz8oZC5zZXRTdGF0dXMoIlJ1bm5pbmcu''@;'; put 'put ''Li4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2Quc2V0U3RhdHVzKCIiKX0sMSksZ3QoKX0sMSkpOmd0KCkpKX1pZihkLl9fX3N0YXJ0X2VtX2pzPTE3NTgyOCxkLl9fX3N0b3BfZW1fanM9MTc1OTI2LHZ0PWZ1bmN0aW9uIHN0KCl7ZW18fHh3KCksZW18''@;'; put 'put ''fCh2dD1zdCl9LGQucHJlSW5pdClmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGQucHJlSW5pdCYmKGQucHJlSW5pdD1bZC5wcmVJbml0XSk7ZC5wcmVJbml0Lmxlbmd0aD4wOylkLnByZUluaXQucG9wKCkoKTtmdW5jdGlvbiBNZCgpe31mdW5jdGlvbiBOVChzdCl7cmV0dXJuKHN0fHxNZCkuX19j''@;'; put 'put ''YWNoZV9ffWZ1bmN0aW9uIHNaKHN0LGd0KXt2YXIgUnQ9TlQoZ3QpLHRuPVJ0W3N0XTtyZXR1cm4gdG58fCgodG49T2JqZWN0LmNyZWF0ZSgoZ3R8fE1kKS5wcm90b3R5cGUpKS5wdHI9c3QsUnRbc3RdPXRuKX14dygpLChNZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNZC5wcm90b3R5cGUp''@;'; put 'put ''KS5jb25zdHJ1Y3Rvcj1NZCxNZC5wcm90b3R5cGUuX19jbGFzc19fPU1kLE1kLl9fY2FjaGVfXz17fSxkLldyYXBwZXJPYmplY3Q9TWQsZC5nZXRDYWNoZT1OVCxkLndyYXBQb2ludGVyPXNaLGQuY2FzdE9iamVjdD1mdW5jdGlvbihzdCxndCl7cmV0dXJuIHNaKHN0LnB0cixndCl9LGQuTlVM''@;'; put 'put ''TD1zWigwKSxkLmRlc3Ryb3k9ZnVuY3Rpb24oc3Qpe2lmKCFzdC5fX2Rlc3Ryb3lfXyl0aHJvdyJFcnJvcjogQ2Fubm90IGRlc3Ryb3kgb2JqZWN0LiAoRGlkIHlvdSBjcmVhdGUgaXQgeW91cnNlbGY/KSI7c3QuX19kZXN0cm95X18oKSxkZWxldGUgTlQoc3QuX19jbGFzc19fKVtzdC5wdHJd''@;'; put 'put ''fSxkLmNvbXBhcmU9ZnVuY3Rpb24oc3QsZ3Qpe3JldHVybiBzdC5wdHI9PT1ndC5wdHJ9LGQuZ2V0UG9pbnRlcj1mdW5jdGlvbihzdCl7cmV0dXJuIHN0LnB0cn0sZC5nZXRDbGFzcz1mdW5jdGlvbihzdCl7cmV0dXJuIHN0Ll9fY2xhc3NfX307dmFyIE9hPXtidWZmZXI6MCxzaXplOjAscG9z''@;'; put 'put ''OjAsdGVtcHM6W10sbmVlZGVkOjAscHJlcGFyZTpmdW5jdGlvbigpe2lmKE9hLm5lZWRlZCl7Zm9yKHZhciBzdD0wO3N0PE9hLnRlbXBzLmxlbmd0aDtzdCsrKWQuX2ZyZWUoT2EudGVtcHNbc3RdKTtPYS50ZW1wcy5sZW5ndGg9MCxkLl9mcmVlKE9hLmJ1ZmZlciksT2EuYnVmZmVyPTAsT2Eu''@;'; put 'put ''c2l6ZSs9T2EubmVlZGVkLE9hLm5lZWRlZD0wfU9hLmJ1ZmZlcnx8KE9hLnNpemUrPTEyOCxPYS5idWZmZXI9ZC5fbWFsbG9jKE9hLnNpemUpLFplKE9hLmJ1ZmZlcikpLE9hLnBvcz0wfSxhbGxvYzpmdW5jdGlvbihzdCxndCl7WmUoT2EuYnVmZmVyKTt2YXIgUnQsd249c3QubGVuZ3RoKmd0''@;'; put 'put ''LkJZVEVTX1BFUl9FTEVNRU5UO3JldHVybiBPYS5wb3MrKHduPXduKzcmLTgpPj1PYS5zaXplPyhaZSh3bj4wKSxPYS5uZWVkZWQrPXduLFJ0PWQuX21hbGxvYyh3biksT2EudGVtcHMucHVzaChSdCkpOihSdD1PYS5idWZmZXIrT2EucG9zLE9hLnBvcys9d24pLFJ0fSxjb3B5OmZ1bmN0aW9u''@;'; put 'put ''KHN0LGd0LFJ0KXtzd2l0Y2goUnQ+Pj49MCxndC5CWVRFU19QRVJfRUxFTUVOVCl7Y2FzZSAyOlJ0Pj4+PTE7YnJlYWs7Y2FzZSA0OlJ0Pj4+PTI7YnJlYWs7Y2FzZSA4OlJ0Pj4+PTN9Zm9yKHZhciB0bj0wO3RuPHN0Lmxlbmd0aDt0bisrKWd0W1J0K3RuXT1zdFt0bl19fTtmdW5jdGlvbiBF''@;'; put 'put ''dyhzdCl7aWYoInN0cmluZyI9PXR5cGVvZiBzdCl7dmFyIGd0PUdvKHN0KSxSdD1PYS5hbGxvYyhndCxldCk7cmV0dXJuIE9hLmNvcHkoZ3QsZXQsUnQpLFJ0fXJldHVybiBzdH1mdW5jdGlvbiBvMygpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBp''@;'; put 'put ''biBJREwifWZ1bmN0aW9uIG1jKHN0LGd0KXtzdCYmIm9iamVjdCI9PXR5cGVvZiBzdCYmKHN0PXN0LnB0ciksZ3QmJiJvYmplY3QiPT10eXBlb2YgZ3QmJihndD1ndC5wdHIpLHRoaXMucHRyPU11KHN0LGd0KSxOVChtYylbdGhpcy5wdHJdPXRoaXN9cmV0dXJuKG8zLnByb3RvdHlwZT1PYmpl''@;'; put 'put ''Y3QuY3JlYXRlKE1kLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW8zLG8zLnByb3RvdHlwZS5fX2NsYXNzX189bzMsbzMuX19jYWNoZV9fPXt9LGQuVm9pZFB0cj1vMyxvMy5wcm90b3R5cGUuX19kZXN0cm95X189bzMucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7TTEodGhpcy5w''@;'; put 'put ''dHIpfSwobWMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTWQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9bWMsbWMucHJvdG90eXBlLl9fY2xhc3NfXz1tYyxtYy5fX2NhY2hlX189e30sZC5HcmFwaHZpej1tYyxtYy5wcm90b3R5cGUudmVyc2lvbj1tYy5wcm90b3R5cGUudmVyc2lvbj1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBscihhdSh0aGlzLnB0cikpfSxtYy5wcm90b3R5cGUubGFzdEVycm9yPW1jLnByb3RvdHlwZS5sYXN0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gbHIoeDEodGhpcy5wdHIpKX0sbWMucHJvdG90eXBlLmNyZWF0ZUZpbGU9bWMucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVu''@;'; put 'put ''Y3Rpb24oc3QsZ3Qpe3ZhciBSdD10aGlzLnB0cjtPYS5wcmVwYXJlKCksc3Q9c3QmJiJvYmplY3QiPT10eXBlb2Ygc3Q/c3QucHRyOkV3KHN0KSxndD1ndCYmIm9iamVjdCI9PXR5cGVvZiBndD9ndC5wdHI6RXcoZ3QpLEUyKFJ0LHN0LGd0KX0sbWMucHJvdG90eXBlLmxhc3RSZXN1bHQ9bWMu''@;'; put 'put ''cHJvdG90eXBlLmxhc3RSZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbHIoRzcodGhpcy5wdHIpKX0sbWMucHJvdG90eXBlLmxheW91dD1tYy5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKHN0LGd0LFJ0KXt2YXIgdG49dGhpcy5wdHI7cmV0dXJuIE9hLnByZXBhcmUoKSxzdD1zdCYmIm9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBzdD9zdC5wdHI6RXcoc3QpLGd0PWd0JiYib2JqZWN0Ij09dHlwZW9mIGd0P2d0LnB0cjpFdyhndCksUnQ9UnQmJiJvYmplY3QiPT10eXBlb2YgUnQ/UnQucHRyOkV3KFJ0KSxscihkNCh0bixzdCxndCxSdCkpfSxtYy5wcm90b3R5cGUuX19kZXN0cm95X189bWMucHJvdG90''@;'; put 'put ''eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7Q3codGhpcy5wdHIpfSxjLnJlYWR5fSk7bGV0IHd3LFhVO2Z1bmN0aW9uIFRKZShjKXtyZXR1cm57cGF0aDpjLnBhdGgsZGF0YTpgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZ''@;'; put 'put ''UEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPlxuPHN2ZyB3aWR0aD0iJHtjLndpZHRofSIgaGVpZ2h0PSIke2MuaGVpZ2h0fSI+PC9zdmc+YH19Y2xhc3MgRFR7Y29uc3RydWN0''@;'; put 'put ''b3IobCl7dGhpcy5fbW9kdWxlPWx9c3RhdGljIGxvYWQoKXtyZXR1cm4oWFV8fChYVT1mdW5jdGlvbiBrSmUoYyl7cmV0dXJuIGZ1bmN0aW9uIEVKZShjLGwpe2Zvcih2YXIgYT0wLGQ9W10saD0rIWwsZj0wO2MubGVuZ3RoOyl7dmFyIF89X0plKGMsaHx8bCk7aWYoIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBfKXtmb3IoaD8obD1udWxsLF8udy5sZW5ndGg9PV8udSYmKGQucHVzaChsPV8udyksZis9Xy51KSk6KGQucHVzaChsKSxfLmU9MCk7IV8ubDspe3ZhciBUPXhKZShjLF8sbCk7VHx8Z2MoNSksbD9fLmU9Xy55OihkLnB1c2goVCksZis9VC5sZW5ndGgsbUplKF8udywwLFQubGVuZ3RoKSxf''@;'; put 'put ''Lncuc2V0KFQsXy53Lmxlbmd0aC1ULmxlbmd0aCkpfWE9Xy5iKzQqXy5jfWVsc2UgYT1fO2M9Yy5zdWJhcnJheShhKX1yZXR1cm4gZnVuY3Rpb24oVyxpZSl7aWYoMT09Vy5sZW5ndGgpcmV0dXJuIFdbMF07Zm9yKHZhciBnZT1uZXcgUWwoaWUpLHdlPTAsRWU9MDt3ZTxXLmxlbmd0aDsrK3dl''@;'; put 'put ''KXt2YXIgWmU9V1t3ZV07Z2Uuc2V0KFplLEVlKSxFZSs9WmUubGVuZ3RofXJldHVybiBnZX0oZCxmKX0oZnVuY3Rpb24oYSl7Y29uc3QgZD1hLmxlbmd0aCxoPVtdO2xldCBmPTAsXz0wLFQ9LTE7Zm9yKGxldCBXPTA7VzxkO1crKyl7Y29uc3QgaWU9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZX''@;'; put 'put ''WFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjs8PT4/QFtdXl9ge3x9fiInLmluZGV4T2YoYVtXXSk7aWYoLTEhPT1pZSlpZihUPDApVD1pZTtlbHNle1QrPTkxKmllLGZ8PVQ8PF8sXys9KDgxOTEmVCk+ODg/MTM6MTQ7ZG97aC5wdXNoKDI1NSZm''@;'; put 'put ''KSxmPj49OCxfLT04fXdoaWxlKF8+Nyk7VD0tMX19cmV0dXJuIFQ+LTEmJmgucHVzaCgyNTUmKGZ8VDw8XykpLG5ldyBVaW50OEFycmF5KGgpfShjKSl9KCd2NyNhU1hqOl1DWzkwPnlLbWE6S2AyaHR6OHsvWy4lWStOQUU+aXJVLz9fSmheTWl9ViJ+Znl6UyEoMXk2JVNdYnFoRmh3Pn5+cnVA''@;'; put 'put ''XlBhYzd+TjRuOUJrT2pjWj1GOE4kd0Iic11pbl0lVEdePUpENExiZ04sVys2YFU3KilwaiQyLkddPHAwfUA2dzFYPGl7Lmc8NzJ2dV0yK1UvRHsvY352Q3N0PXpjUXJvcF43STZiOWRNenxba1ohcyJBR3lURSV5Mzw0RFtAP2Z8fCRTYmZ1JktuVVhQOSFGZzU9YForKUFKY1o8K3hoL2I8TER3''@;'; put 'put ''W1hyZEwhWVoofmMyQ2Z4enFHJV94K0t6P0ZEXj04RWV6R3doP11sODhLc0NTJjpWKC8ybncqKGFdVTtaeXdlI1VSfFR1OTUsQm9fImVXcUNBUWIkXk1DVDYkKmJkNWdWZ3VYT104Uml1ZUBpZSFsPEZhazshWyxwakZjfThne3toWSxbTDRxMSt5TkNlKGlkMClSdFZEIVtEPkJ8WFcpMlM/MHJI''@;'; put 'put ''PUZ4VUFXSndpRSJ6dVpmMClSQn4yS2JlP1JLRkJlM3g7N0xST31mOzU5Z3EvWVcpSFBnVmF0a29DZ1JZQl1xeUJQNDR+bz9tQ0BCWnIlTUxZVDg+dUNRYFF5JW09TjgzSnhXMlRYQCJdYWhedHMhTWY1Lzw5YkVNQWtZciwjQD94SFthTTkqbU08TU8qI15HZ21gdldXeXREM3Q8UXlSdXh8SWVX''@;'; put 'put ''KTpXTXRfd29tOHZHUFBSVGN6bUd2Jnszdmx7eldtfT1Ybz1JOU89VWo/bHttfjxVbS5SR15RZ2VMVzw5RkZGbTpVVSlrdFhLSyFlRllJZ10rVlVzcyJZSFRWZ3A4cyxkS244cnk4JW84Ynk4JVFodGczbEx4NzhKWE9JUHN9N3Refl50diF7emBAN2N7XVAvbn52VFRCNmVrOHBJIyZNKmRSI20z''@;'; put 'put ''TlRVZGU9KiEybC5SNUtXZkgxMlZGTGIkYXk6akRJcDxnb2I8S0BgV2Z0ZHQ7Wy5yNTdIMUZzNTc7JTlMb2V3QyRHL1AlTl5IbHZ1dDlyOE0iNHxAdWprVXQ2QixeeiIvNGs/bCZnVktgI0F4YFpoOHZOR29MeFthY3U0JjpFV1U5Lkp4SVRBKmdDP2M4MkpLakRMaFhGVTFDVVcqMnYzbEFhZjkm''@;'; put 'put ''a099cyE+TH0xIUV+citaX2ddNU9QaS9JeEBGO2VjPFRaLHJ+ImR+NEliTTw7LDVRaT16UUJscy81JmVeKGNbVTttVWVQNGdJUkpxJnB5VG9CVGckMnFwfnYqRmVGb3JnWis0dkxPb3BvdE0rbDNpayglKkREeWtLMzAvYStaWy58ayMvZkw4MFMuXkFaVCE4ZTF1LlhlfVcjNmZyJlFPdSxCeGJA''@;'; put 'put ''KHlvKjMpQGdgXyslLz9pUHpSRl4jeFliVkx7QEg8SClMREUyVyouO00xdEUham5jLktAZV9GLktaXlAoaW9nSSE2VD5Sfjd+M1Z9TDB8Qkg+I0xpSmNhUU5qKlk4VWJeNG9xcF0mP3NfO2sqPk4vM3htVmhwOHxDMXNaT29aOFVvOHdwOWx4P0okLCFtPkIkLylCOTRKSDMwL2JmLnByPDxuW1s/''@;'; put 'put ''dnJiWnM2K0olYE9qUk1HdnlmQDosSWVRcllIeUgzRkEyXUYvTEt1fUMvSVFjJUYiSWkrQWtBU2VQaTtae1loVCt7bVp9PCxQfFk0bD5BMmRfLCZTX3Q5bD8yQ1EjWXBjU2VNQVBBOEhoWjE7XmFnP1JJTiZLWEpqSXhIUGRtd1lLcHUoL31iWl8sJnhdSmorOX0me0RBdUhyOEViRXg6az1BOCVh''@;'; put 'put ''IWYiYjY+NDpffjVkZWBFdF97S3l9SUp8STxYcFt9ITkoOWE3Yl9CZ34mezxiNnJrUDxsSml4I00seFRHWj4mMXUval0wdzBrNUJidllJTkppX08hQjt4KShaOTc7KjtzPnxrPjEzV1tkJjkyLjl4clQrMyQkdipyRjhBZWBAQjtNOWhdUEZpKy44U0ZVZ1hpVCRWUWtwTiFGPEIuTFJteTxAfXAu''@;'; put 'put ''Q08jNVZGLGczR1M6e3c6dSxqcFYkRFEsXWQhI115czxpN2dMM3Uxb2JSaWMjYVtdYCV1MC5LQGhlQjgyJkNlI10rO1U3RiNwe3EkOyU2fl1gczJ3fGo3R3BFVjk9U3hxXkZ6RTl2VnhqRnJgM1lnWHxxZnBFZzoqcjQ1cFslLkIobFd0c09tZWtxL2V4QlYrYkQqT3xOKUkyK1lPREgpTHlRdWxT''@;'; put 'put ''eTJscEBWPlUmemY4bGl8JiFvLlMmfTAvcXc1O245VXlOOV89QFMjeCMvSS81cXE1VG03ZG9oNDBQYXk1Rj91Skc6SlRRcnhKZlg/d3REI04hWUhMe1JKcD5HM2h4Smk1QHRXWF9SeDt9LCpFIy8xMGlNQ28zXTNOJXJvUDBieEJXcnsoQDc/XWA5L1k5bG16emB7M0c5Z3B3OjlNRVssWCpZdHhr''@;'; put 'put ''cE9dcSRWOz96emBrSnlVRzJDXjxfMlZaLF08MV8hYHpDcDs3NCxOKiJVcmwiR1QyZjU6N0VFZmR7JWwmOzAzU0h5dilbZyN6bUc3Jk5LW0E3Z1p8aTpmU3RCcURPKU1XLk16WmMibDkuNiFiU0FPSCpZVV1GU0t7WSRVRCM0fjpJQUhdMms1SWxENU1xd0NUWSE5K2xYPXN8M1MvV0Jtfng8IWxN''@;'; put 'put ''Sk58OVZSX1kvNltvKDhgS2t2P2tlRmk9JS43cFQjeDJIVEh2ZmA9NTpHXSpAW2cuTzZAdCJAZTw5SmdIbi56QnR4bU1sU0I7enkhKV5gc25zX2F7elBfKisqQClxOSpIYFc3TGtWfTc1UG5mQlt6Jj9DXktrUnIuYihiJVBEQThWK0FJLjY6IyFEQDY4fV9GamsmcGhXc1RJMkNeWGA3Oz1FeTkp''@;'; put 'put ''YHxOUVtyJFRmRlcqVGxvQj1JXjZdS2tMJCg+MiM+JCE5X3lDJj8mTH4qZyYlaH12eHs4MklyZTs3JUMqYjglbmR3ZXNURThSVU01USMyUHA3JS9AZU1kTnc1KWw3SHB5OUhwKDZhPHw9NFNgWSpSYDEodGIlbSZfamYkWF5gRitic1QkTzY9fm1yKFU3PGF1Q2kvbktAZWliQ1NvRUJXPGlaPlcj''@;'; put 'put ''UnxLc3k7OWk7cERPXV1KVDsmdik2ZFpfQTBkPngySjhYOF8xVi5nME04ViMoUkUzTTMwL1RfS09+IyZgXWApJDRseD8rOCtJVUNMSzN9alZ2QHk1VDFWTyxdcWxseF9yfnJPJC50THJ3NTZicHBDSjpMLCVKbTxqcDIiQEYqTXliaDlNKW0xQnRjT0RuWVQ9JjpRWVZaYkg1SUBKWGxjYXIzR0hC''@;'; put 'put ''SndDZD9TYlVzLyl5KjlNJkhWZVUmUk9lXWoyYzJvMEZ6Q2ZtK0FrQVNYb2Q5L0dJe2M9RklZN2JeSH1OZ3l4ISlUeUpvUkN4LmRUS2N2VGhkLnRrc1lWMiM5WF9DYDZeLDxjeDFxO3BvfHsmVFlpb1NPTXlZIm47PUZHTD07cURlUndDXTdVblcxWSZwRzNGR3JPTEhWXTA0TVcjNU1LX2Q4bChj''@;'; put 'put ''Ri45XiRGXy9zIzJ7cCM6Y0t2aUYyXyJAcFI/fExvLzI1WWtHPDt3M207RipPfDpmZXF+dmhoYXphLDY0SXEhbS99RklmTTtYZShfPXkmZ0Y5JCM6IzIjbTNPXVFLXypwRFY2XiROe0BJcStxOzUkL2cqeiYsNnNjRFkoa1dZaF8kSC5KcmxZMT5MYj5lflU7TU97VTM8TUhESmFyVVRLPnN3QDI1''@;'; put 'put ''PzYuQV47KSZueG9halY2UWg8UzhsYExZcXoyVCN5RHt9ejwiZVs1c2M4b1NrK1Q4YGdPfSNecXwka2hic3RZIilGU0w9Z2R0WXJbQjJtdlVzIm1WeWtJb1IkVnhLeXNib1s/NU1dMSJEVmV6OFdbUm15MzRIRXxMNHMvfn1AOj1xa041RWhpVl1ndiQ8SyNbOyEwU2xrKG48R3E0ZmouPGRVRFgl''@;'; put 'put ''ZyYyMytqNXpnfTZwOSVISmsjVC5qPEosPXxpYjw1YTt3JEpuJU57QHV5cCt2fGhLaX0/LFIpIUM4M2Asdj43XW09LHlzM1FscTRXKzU9WD0vMSguSmZgNjFySFQ7NjFqKUwpKHJid0RIZzFtPS45Lip+SDlDa3RATz5hPl02ZWsyYUI1MXp5OzNjWCVGNERuI2BOSGRBbmVxTHZ5W1cuNnVENy8m''@;'; put 'put ''OjlxUHZ0SjkmIll5Zkd1RlZ7U3kxen1kRVtTOXNbOltuTzhzdHg1dWg3ODk3KEJzNS9YOy85eSQ5NCZ5byQydz5iKSEiRiUzXSVkZj9eS0FQe1hXfUosWC9KVE5nMFUqOTUhSV49YFNaW0hqMmEldGl3KDRCciNofFo+JHA4bDhDZzdzcTV2eE84OEZyPDxmcThDY3xPPkRXMS9FT2s+PS81clFr''@;'; put 'put ''S1t0S3F9JGA1MCNdVGtWPH5CTWBWfXc+JExWa3daVlpUZj17dEs+PCRnUDJgLFlye0B3dVRUdExSRC9deyg0WndDeDovRyZ3eksiVUZ7LylvYHBuRkRvXmg5V09UNEFvKjpZU0BwPyNpSmo8KE5xQ1Y7ZE4lTTI7UnhLb2F2aT14Z0J6UzRKMXFaInBIXSY7Ok01ZUtRJWdjZio5KlM+ZE9JJip3''@;'; put 'put ''I2M6L0dUMk99VTBHOW9ZcGhtQjFELHJ8d2svTitKaVAuKz9GIXBlbEQxW0dqJlh2OTluZy4yIzVlOmIyRiR7e1U+MVNqWFZpSlsicnJUVH09b2BxWlEjYGg/PTJuUkM0OTk+cn1fQDhzKTYsRE5WSXJIcygjWXJ+NENuO3E9JE5BP3VaYktgSXk9QjtsbytPfSY6dnQ6T31vcDlYKFsmYykqUzso''@;'; put 'put ''XWpzdntLV31PPmIqXiw1PU98NWA2eWBXbHQ/NiwyMH1iSU81STllOjdJViwraWQvfnxETylNUFsmViFNMnJAVSlicnRqYkshNC9CTDk/UDpzY2ZARE8/TDUjNktBeCtlYWp3QlVZdnsrdiJdVitASFs8UnQ/LixGSXE8TFk3dnhWcFdZKHUlN3dGQW0oRlkpRUc2RjpHbzR2MmtNQ207Rk1tc0ND''@;'; put 'put ''bTh5YWJ2b31+b29VMU0hX1A6bT4xUGs6bXQrRjEkN1NNUy5ANlBWTDh8Q3AwXzIrL1koWSo5Yy9FUCtfPS98TTkve0s4QzVJMkB8d1YkNmErKypKe3soWSp7KHJAcXszKFBnNVp+eXtLUkRyM1VXMSRfVV9uaGElXi9mJjdDQiJ5OSt8TWtkKFpNM1pmJDklVzU9a2V1dDRzKldlXU5pZ01AO2Jo''@;'; put 'put ''NVVHSDJTU2BoeHBJYW9sJkw0ISkoI2oiMzw9VWVoJjM7P2dYJUkxeXFWbiMhPzdJSlQpamhMQkxgQWMpO3YvUnEsLHlZPmQ3bXAuSUFIW3guWzFGKCYqYkojX3gmVTdJQEpsSXJaUTN5PSQ5ezdJOWNHbjA5dyJWczs3OjYwJDcwMyQ6KH4zaTteYH19JnkyY19jfVpeWEJ6fTspX2I6RUY+Viom''@;'; put 'put ''a1QjXkp9QFRbRjd9PXwsJVU6e1pSXy9RSiI8TVV2bW4oaXs9fCp7cWxILHxWS1Z9YiJHQT08K0E1aD8vQyRCcnNsPUtRMXh+elJfTyM+Tjw8aUZuRH04UEFLflcvb2ddfEZja0Zse0t5Tmk7ekcuLio6X1QrNU5SfEtRPGltfWcuPGVfK1A+dnlfaXJVWSpUJnlzZW5mKkxRPmJLZSxJInxmbHVs''@;'; put 'put ''Pm52XWQhQzgzMXRIRDhqcHZbc3dnYUdaPExBZn54b1k+N25PRTdNRDhwVlArY0lmbmVtd0MzXS5+ck0mQ0YrI3JAQ2VoRzkuQktGQGtGNk5qPC8zdCsyQENhMGhnLEFdYDpVMHZsUWBlVTUmPXlQZXc9fFBxXkpudipPYGkrTEVxajF9ZjtnOlBDIXJ+QDImQFBESVEwI2R2Y204ITl1RFhbNnB9''@;'; put 'put ''Yi5JRE9udmhXazh7KjM1WmJKKGw3Zz5qamxySjlTXiouOGhHP0dyIzJzVHcscmgjJjRqeG4/bHlgNj9nLm0hTl92a2U6aV8xcDpVQzlkUUd5OStPUmxEaV9WPEdxVyt+YTc2ZzBYckNdS3BoSlZdcUxVPioqdnw3dm9iZTdhKVdXXl1LcHo5JnY3SURAKUJHKkY3bFd6S15LbSMuXT07OiM1NGNR''@;'; put 'put ''I3g0L3N3YDNXOz16OjtuOEozUl82P0tnYTM7cXMmVyxvY0I5PmJLIWJoez0pcyk2c21CUG9HMlhUdkxHbyt0STtDRyVkNUMpaDVjdCVZNiIlWTkiJVk8aV9RfnwpYXg/NVlPKU5oPitaZEosNVlMSmhFPkkoQ1FmJHc6aFQ5WWV1SWxFeEgvWmU1WUdvR1IqVkhseldYOyIlWSwpQG8jelFeZjde''@;'; put 'put ''aCMvKkkudllqPnl9KDVfPD5GaW90KHUpRFcpdnBIPFhpQkM9UikwKGFoNSU1fmVQTWZZc1U6U2hNcFJtMFUsPVtoeCF1bztmN3FaJUx8IlhIRVA2ZSErWHgydVYwOS9GUklHT282WXtpcU8oZmQ8ZloqV0lDSFJseFVYSEIybnNMS0IwUFlrOVpoKy5XYERfUGskIUcySlFvenFnWjpXS0U3SztL''@;'; put 'put ''QUxGenhYU0VMSy90L0laWHNNKFRbcG1PJk1tTFJDd1o9V21FUUw6Ii5JcXVQTmZQJWozREpvJnlOdSpNb0x3QmxNZkQrRCtrNktmRz5oVDlhNDd1T0MuRmRIbnQwRzZJdUhDZUNxc3VldXk2ZkQ0MC8qRThNOE0mOkwrS1VAXlFjI2YvVGYiaHt0UlMyOnB1aEJ0N1dTMjBeVjxyKy5jYy9GKEZu''@;'; put 'put ''amVTUTBieGZ2MnU4YylJRHlvOzkvcXhFK21tMisxSUtGUWlUOTZZbik1ZDIrKXkhWCFIXi9WWDtpIk9fZGU1Vml2UFEwYXhfWTxVPGt6SUZFdUghOmF4SHZBKE9HTlJ5SSI0UnpOUiZJQ01XWFcpTG45ZGJ4WHY1Lk9HTERxeD5VZU99QzJ4XXRQekZSIklCR2RNTml3TVEwIVlkKXFhZjd4SSF4''@;'; put 'put ''KTNPR0pSTkgzUmc1PzRbRFc6MDAmTXorN0xeQiIwYzxoWmBXIUVLTjlSSm8iOTlCSVQ4NEAkd1AjTFRaO3g6S2ZPS2FKb0ZmImh8InZIP09lZSowckxdQmNkSipSanRMIkJvVGskR2VxMS55RXVrSV4oLklqWkVYaUVoaixyNSEreTZYR0tQP0lZU2p4TGZDfVQwQHdnI01SIXJ0I0hkVUY9YFtq''@;'; put 'put ''WltMcEMuVCFpUWp6TDJ2R0taW11hJHlhdW1LR2s4ODUhV3RhT1E2OTV8eV1BYGMoemVaMSJSSiVkOXl8QilmciNpWjQiVVF0JWVaNiJrUXo/bzcoTX55R0N1aFUwOXk7QjZkPTU4eTp1Ik8oZmVadSJQUGhsZVp3ImNJfW9pWnkiOEk8TTl5YEJ0VVBEK3lNQz1VOVpial9MN0NMYmBrK3lmQi9y''@;'; put 'put ''ZUd3TCxDbSI8YyFXXUlURCE1aXR+UnNVI01qdFFNZmoheWFDR1pQRGdMNUVaN1UwIXk1QnswZUclVy5HUW9mWlF1PlMicWZaU3VLTzxNI3k7Qn43SVkjeT9Cajk8YylXYEhjKWZaVXVFUUoqI3lHQyUoPGMrVzZJQX1mWklCWWpuNyx5LEIhODxjOldTSSJxJDV6dH5SfW8keXFDOWttT2tMOUVk''@;'; put 'put ''Kmd6ekwlRWEhITUmTEdGPjxmei9XVUt1Ji9Jd0wuRHNuUDcpeTBDUm9fa3MrbEJSXlF3PiRrWThPK3A8Y3x5UURCfkE4UlFBP3RIUypgW1MwUVNtNjpndU80VyVYVVBZd0xPL3c9ZnZ6WGNPRXYlRTZ3NDxJNnVIYUdYalN2N01PYHdeViJoQzorRk9FT2UjejFWNHxrQEhhYzVfUTE/RGFFZDpJ''@;'; put 'put ''Q35DNjE0WlJUYERhZzVyTHVTdzhBIX1XQ2xgJVl3TWEvdE5MK0cvN0JYX0ZuMzJ4Vi92QipZYnZoI1tXaEdQKFhEUjB4QkdsbDU9UFcvNUJ2YU54RlRfXzdmczQ0RDg2PDhYL2BCV0lAIXw3Wz4rNH1EIyVJLlkvSUNHIUhiWi9TQ1FuVFBkU0dYSUpJKTFFYS9jQ21sRThNODJrKVhGS3g7ZW0m''@;'; put 'put ''a1R1TU8lbCM8bi8oQmBvZnJkUz80QkVOM0hiJWs9dDNORCNkIzMvJFl2U2tVIzwva1d1YFRVOFIyMDRHRj9bSS4ma2J1IlVSfmojdmM9RjpCI1p0Y0V3PHU1ZCo1PXZjWSJPI2ZfWHR0ZWU2Oj12QkJXaHQvPkZMQ2IqRG4pRlRDUGciQ1YmQVhCSjZtfUxGP0JFXzp9NChMYEhnbUF6a0xLSSg9''@;'; put 'put ''fEw6V2tRdj9ZN0RNN2NTRk41VCxQdC51M3BbYH1YNnRzVSJDfHZOdjxVdFp8dmRCejZpU35YIXRbVkF3fHZqQlN0c2NuTF1JUkR+ND9XflJvVSJMQFdRTVhqP3ZidkZaIkMmRjVFWTdNMD92NUJgMH5GcUwuR01vYFhQQjpPaiN+WEB0R210QkB2bHYwY1ZwIlhsWH5VUzIvNzdBKURiZn40SUck''@;'; put 'put ''RF5kWUx9V1BQQG9AdmBCLCEieXRMI0oocCQ8dThOd0NDP1VbZFlMckFYSmVdYFhEQkRmKlspRlZFLnV9TEpHZEUzeH1MRlh6VDpPe1hMQmQ5OldlU00wW3ZydmhsV09+dmdDTjx0L0Z3eHZRbzY6W3ZtQytbKlsrRmBFYip+NFtMRUt9Z0UwW3Z3Q1dJdi9pPX1YYkJqVC5NOVkrUmRIQzgxWiZZ''@;'; put 'put ''I2k4SS5NWXh0KlRQSXcjeUlKL3c8ZlB6QVJPRSx0NVkmaUVRVTJVWCNpeEo5ZFl4fXVYSFJ7UEghWVIpcm4mOlJAeStmdEd2TUkvJXlxLCRwK2owYVl2TypaTzBlWTZkWzVHMEc2Ik87dERhWDVFUSQhRGFaNVtKKzpIYSZPfDZHS1s1SDA2WXlWWERPT3F4NHV2emZPeXhDd0JkZGNZR01hY1M+''@;'; put 'put ''KHRIYnQ7UFYvVUNMRXRnYUM2a0h1UlA3PU04YHYwQ0BeKltrNXl4Yio1ZC81WHhuKmlTSXdneGt1Tjx5cVZAJVdPMFcwNl19dnk7ZkNHdHg/Tk0xMH10T3d3IzhTN2x6TkkofXd5XUN3Sms+bzA4PE9IeiwjRVhlanIheHcySFdaSyNWMyxPeHBYSEBJMDA1WEkjRDhmcjxydThTRyY/LmcuSWti''@;'; put 'put ''aVJWJmxLKy4jOT1IR2lgRThOZUl0ZHYqc0s6KSlldn1LOEEhdTh4Nzc5MDFgd29mIWFlMXtkTywpOFUxKiNqKiVQaTtNTGhXbGZSZmFmQilnZVI4NWo7IUEuUXtAQH46ci9eLC9qRSIzPlModyxzZGxBS15BfDcqTVIma3lEVWp+KW9YLHU+Z3NRSVNjJXhEYU5nY2w1algsdVBKLFNnWCRNWFhf''@;'; put 'put ''bntQWyFGbGhlYyxwfGAjNHg0Jk9uYl9WKSpvaWBuUjBJQ1hodDxpTChLfFg1OmdjUS9GJG1BUkhDPkZuJXQqaipUMXskVzZEbUI4d09BOGZSMEl2KmFpTyFJOX4oRmYsIzpLPSVKbUImaHRNZXdQfHRBaF5tbyxvZUJQRH1WZXZdOmpre1VtYXB9LH04TFBJUD5pQUlmTH5CSU91LmUmem5UTV1D''@;'; put 'put ''VFkyTFtPLERVZT8wJU1VWH0+e0lbIVMvS3NSJXpGNFdrWXFMSHJOaSp2dEF4ZG09bT1sfEFMPCxHc1NmSzE6Nz1sVGUmOGg7aS9PUHkoYGtuOUM7OHFZQSFLdVE/MFI4b2UmUDAxIyZuZmBUfHArdHluQmUveVVbKU9kdUdleDhNNjwkRXtVWEM4LkNCMmRpcCtbZDtLIm0yJGgibVpgPiwmIUwo''@;'; put 'put ''bGFwNUYwImdYLmlOdExULnEsSzlsMEJpRmJEPVo8Q21Gcm80M0NlbTR6OERXUV9YXVhsKURDOEpQTFdlPSVdWGVNdDRHczg4OG5BIXV8UX1DeCNAUC8mSER0SFtXZGNNP0MiYj5ASlk0LiZyNDFfJVlAfUlJOG1BdjlhfFl7XW5TX1M/W3hyO1AoZlhlVF97dDskeChMQUI4QUFrNlBnQjg6Z1I3''@;'; put 'put ''Ond8OlhOWHQ6SDBlS1JsZ3ZdLyExSnttfDZGIXIqeGdfUEVXZ3R9JDhpR3ZQUixqUDcrdls8ZT1vLFJYX14qTFB2NVluTDssYn02IUshKiNGNGN7TUNvZjokYWE4Y3gwayFgUGRnIjZgJUZmJEw0KX1kVz5qUkR2I0V+cHdGZysxOmk0eCl+KURYLiRCaSRDP1dAQkg6d24/e1hlWSl5YSIiL2xb''@;'; put 'put ''PF4hfHRjYz9fPFNFdCNIQHxJQUV7Sm8lUC8hez14JW98Rz1zeE07NWtHQkdCfSRNNiN0PSt7IlZSdWE8QysjKldheD5MbmZRdiFEPSl+N0haRHBGVzZ1VVh8RDtERCJpO0F2I0R6SFVRfGo5cjElTTlBZWxQezZ0WCZnNDFOLkllS2RmO3FtfDp5SSthREhwdUxpOWFqMGgkLiEiOmlqbUo7SGcm''@;'; put 'put ''MyRvc3BMZT0saVNmc3RDZjFbb0JFMEhdSnV3dSxPTnZaKz8oVHM/QWxCeE9CUFJyPWF7UDQpKUZCV2hMWyFzYXJPK1MraEFJQ3RiQWcmd2tyaUI+fkQ9ODI5KkBdUk82Oz1dQjd1Qjh+N1cpcWdXbDRIc0hXKSVMZnRzTFhJbUspPFA2JSh5ckwhLGkxWmAlOis8KUIoXjhSQF1CRClqezQhbmZF''@;'; put 'put ''RVB7aGtZfHwzUF51UC43T1VeOTNMPE1OcEppfDYoU2NEMGFVXyReLiZqRm91ZVIhV1F0cnRXXXtmZSxYQlA7dSQ3KkZ3VSlRdnIrd2dGZUg6PCZoUmE8R0E7dmJCJGRpYjI7I1p1SVlhPmhAI3ZGSG1FXiNxfldnI0ddRkN5NzZ1PlpRO2ZSRGVWOExXfSNeRlQoRiRfJWZeV0kzKXlaQVBKN2d1''@;'; put 'put ''K1csO3x0NElocHYoLF91eTA/ZE1qOWo4eHJxfTxZKlZFc05ZWVZGYF06dV9Ncl5IQDVtTDphQEMxfkhicyY3SExqNDQ2QEFHZEZWP2NdZ0JXMTMoQnlpSVFffDtZMlVlaHZ4OS4mZyZsN0dJPykxTGMmeCloImZFbkJSRGZMT0NGYyElezh7dVRKSnMhaUQlITxmNylqJls6YCVQWXtUYTBWQGZu''@;'; put 'put ''USxEQCZBZXxLSXNRQjtIbCUuRlgxOFJIKiwxLjE0TDdyLkZ0LDQ0fDZPfEApKndLP2h1akV7cnshI0M1NFZQW3YzKVRfWGVjOFQsT3slRkheOF1KV0Y7UGNMaTRPaXlwLHMmJFYuZVVYXSlyYEtpUX0sMUBYOCwkOWJgeXIkOXA3Okg2WVc1ZUUpRG4+Yz1bT1k/eSFTV3gxentbRj1ibWhDZUdz''@;'; put 'put ''SH06OFphTn0xTFZlQmI6UDg5aip7Nzs9TCpCbDhLU2JbTjwicUwwMytTR2VNRGpKanY3YmpKeGxOMzlMb3VNOEFeOkJQMjcjLygsNXplfmV5cyZhZEIjRSZlOHRmQ3JSREYrUzsje2FqSkdXN0cjRVhQbkNqSk1rIUUrU01zdztVRUtyPSJKO3kvcFFqXWNEaC8+QmFCPW8+PHNheDU8bDZkclV8''@;'; put 'put ''WlJRa1hzWEVIPV8kV3x1SU8sL0x5V05lMCJjY2N6ajpOTE9kTlFPXnRJT3lhPWYwY3Awb3VJT10iXWcpOmBmXzo8WUk1TDZ4NSlkc1VEYnJVa2Z4YTZPSHpLQCZaZWRlMzdHSUgiNUJOO1pXOEpPaWN2RDhHUGFyVV0iSU8sL2pdZHdtNC9OLDo3LjVHazxzNFN7JUQ6Wn5EZDQ+TyokcjdKMEZk''@;'; put 'put ''eGFQI2JOMWZdW1oxWmQ7UDUuSTZWSzwoeGMiNTZhZ2MqQmk0YGRkd3tvUCNJNSwvel1pISZaYns0R2xRejY5NyQ4eGMsYVhhUlF6NjZhPjxhPitrPyVyN15PS2g7RjJHWmU2JT8oZzQxa31vK0pLSUMwb29sUHYyTipuYVFvc2MpRl5dQGd8RHNzS0p0K1goTH5YWmYwb0JLOHxDYTh2TmVTcHhV''@;'; put 'put ''Ty55OWc2Rzg2e2xiJFRtLk8obXNdPVhQbkh4UV1Gej9iQTVJXiYqZ3smVyhrRD1eZlVtSS9Kb0dgJlgmJkYlfV0mQT9jODJ0c1BLPTppRiFZVywmdEdCVXJvbDY6dm5rRVs5VFBIejZWKjh3aiVsO1JdJk9od2NJMD04TzVULzQiRVRkNDlTVUk+T3dzYWw7SCZYKmR6NS9YVy8sTkNwPEU+PSxC''@;'; put 'put ''UF88RWhQI3luOyIodyYsTmlwaEY0X3o8WSo5S1BsQz1CKk93dyw4JjRKJlUqdTpQJWVRM3l0eTR4KyxPc2xWR1o8YGc2TlcxWC9zJGEvUDgxST1dQnIuZzh3Y2syRDIub0Auc1s7aWA4OSh4aTVxRHVbVEgpU1p1JG5vISVkYldWKUhbMm48YCpLUDcoOzM9PDwrfTIyfj4we31oam1veHF7VTdo''@;'; put 'put ''ayJiUihVOzJve1ZTVjk5LE52aT9vUnhoRkJVTyNOMjBVQm1USTpMPz1gI3JVJTtocFdaUFRqPEhGe3BKNyRYRi57KS5lIiNXPTRtQGBMPWVraDNHPWVrX3FrXktVVDRjeyszdk4rcX0/XjxOcCF9UyQwNHIldVlBbFtHS21eMUQuPzJtbXBTW2chdytANyNoRW9aMloqYjRKLCU5Xkh8O2YuMFVh''@;'; put 'put ''Z2Q7bDxEbVJNWm9Efjc0IUtuW2toN1ZEeDwoeXpuIjcqW3A+MV5lZXkpImRjZlYkM3RBOFBebWQ3VWIzcVFXeTVKOGtOQl0yRlJSQ2hATVNlO19jMDFPbmN4RTx5bSRMe05mPUY5JCVbXSl4d2osfEBuK0pFNlZrN1k3XTspPj0lWWR4JHFUR1Z9Vzs5ZFNeR3N7QFAsUWB4MyRxZD9sU1M0MTEi''@;'; put 'put ''em1oO0BveEljbXJ2MUMoSlEsVVVBeWwmamZYPCpnPE5iVyMqRkdnXUBKP0Yqdk5yVlZTQVd8Wkx9JkdYWml2QSwub2tMOkdsRGFKX2VgITlMK1NMIlUkY3IxbHJ6fjxkRkpnQDAscjxAWGtSYSx9SWdAMGoscyVEfVpzfU1eTjJIR2ByVjh7cVNNamFleiprLmFtdndEW1cxamg9Oj9JN2JuQ2Nr''@;'; put 'put ''NlVTZzExTmh7IzwzajltYGdtc2YjNV5vR2s2P3UlIktDeCNHPXJQI1ZgdVNNamFlbUB9alFOdGo9O0NzV296M1M+fnFHUW9hZnJxa2NWajojWWtZb1grK3ssQTZCNEZLW055VFNmVVV+I057ayQ3WkUxP3ZqcDhfTDRyY303ez53ajxZZjRuWEUueEk2OXxmQWhOPDZOVHJocT9Kc0NeSH0/JVtj''@;'; put 'put ''XkV1WVFqPUlHKn5UaCZMSTlJdCJHLl0mdyRJNHFYNzEzUXRbMiJGaEZqIjZiZV16US5MQDtVVjJ1JlhGc01NfEg9Nmk4eC85eUcmQTgzUnVIV19gVWM+MzIsWnlJZiN7MjZdKD5XU2V+JnhRQ21Mc1lyUi9LPUhfWUw4dipMckRmYEpJUHVuKGdCRUBEdTVAdGhpRGY2eG5dcE9LMGxnI2UocVZP''@;'; put 'put ''OyRWSEVnOl48LFokXm9wLE1WOC99Ry5yWXVwaEdiem4hQHRfUFZ4dU5GMiE/dnlJMytFIXc1XV58Uks+RGNfPGliXVY/ZCtddmldbWtYKG1vUk4jUUZ0NFouK1dnKFApXnFRT2YmeXFuWGA2MihePGdFV1lmV21fVEQ9WHBtK3U4NyRMck1aX2ZEc2M2PWFYW21oOExNamoqUFVbTTM9SWVOUXsh''@;'; put 'put ''SkZUQyFncmdiU0BJJkh1Q2AqZHFpWXQ5S3d9THJ4PDldO3MvO2o+dDIqbEZ8ckchOTMxeXQkSWt2YmppeiFUZH04STNwTHU2fWFHdG9PMylwWU9oVEJlQEFGNTA/X0N2MjRtamNYQnYyR3VidnRHOE9ndi5ScHIkZiNfbVA1Tnl4SSgrPzBFNlA2NlheOngue315bmdvVWQ4UXAlZklVUzQqbk9z''@;'; put 'put ''N3BaS1BTWTU+TXAlQktaOFBEbjVhOm12S1M6Q01UJlk7WW08V09TfU9mLFR+MT5vdXBLeV9kcn1NPVtlaEdLWjIrfFYmQ016PWUkRkxHKGUuZXlfJWZ3aG0zKVtUMWRkbEZRfClJVjhDaztnTVBnODUhZ3I7b1NaRFs7YmtdOGdzfGRrc0AjITIuRn4/TjVpOW8uTSNZWFghSlY7N1MkdzpTUDIx''@;'; put 'put ''PH1TdEA9N05dPGclYUVsOSFKOjE8OCJJOjE8Rl07KSE5aUpdMHVVJGxDfko5TjNMRGVkeH00P2VmN2tSfD9DaEVbaERLeFt8ak4iMyRNTW5YUXxDbDJ9YVorLjJ+NFlDKUFJcHNMallMV3R4ZzBMIWs2TWZ2NEJsSl1RQmxmLzE8YWlUL2FJU3tES241XWllZD95dj15NXRAaztzfD4yYzRWKUJI''@;'; put 'put ''WWxsRys+WHY/e3Z1KEY5JFokI25weXcsQzF2OHdGWjg5ZkladEI1d05OKE1jNWY3InklTCtScmEycyE3SXpBbDB3KDosT2VtOztgQU9NcTV0K090PThAQkwscTV8QSU3Sk8lPz1vZ2NTPXNFPWdiTGpUUnZgXjZGI0p0NUxvSWg3WHE5RHcpQ2ZfYTF7PTFoYDZLd01bMHBqPjY/VU9zVG5QYEZQ''@;'; put 'put ''Z1RoMEJRWFF7X3dAMiouV3V4bj95dm1+eDZNRHlsSCk6T3NwYlFAMm5waVB7YTx4ZzxYKHJySz9aYkJzc34iQV9AdDkoJVgudTYoKFtQO3ZCL1thWjhVYjFwd0NvOUAoZSYjTU5NQ3U0cEsmZisoMHlfWUtadXVQZVZSIkVmSihXS1FIfWpPQiVWJVFMUE1udUU8KFRVZDo+Jk5CckJsPyhBXT1l''@;'; put 'put ''Kjl+KFQkUDFeOG9pM1l7IkVAW2tPflkoLjlAeXYzXkI7SSYxUEtNJnZzSmVjJkw0Z1ovVWZxWXlybjVFNSZMNm9STCpobmZbR1ZlKlBbVCFGXUgsYDsxQGpDTmpURCk+TkYsWVYwMEoqN0BBM3QsSSpBUzswLmZDIjtQMXVMbVFGdTklXmRlPSpzITB8I0I4QkhXcj06cG5PSEsvVzclQkkqcU05''@;'; put 'put ''TiFsaCtZNTB3JDhnfG8pR213UWM7ZTQqU0V6fjt7b09zMFIzQmRbYzNKRkgvNiV5Y24yXWZvXyE0JEk2aWVeQEVMdHIvbjJLWWNISShpSFRLLiltbHokbm1Sfn1FcTU6LiE0ST0sQjRDRVExRGMmVyF3OilGPTZORThdQHhOaExmTmx3aCtMMiVFPk5fV1o/OlVtd3VGN2RLPTdXW204X05ucS5x''@;'; put 'put ''S0hXJDl3alAiU1UzVFZjdEU+LEIyd2FPIlNbNjouSWFFdThVITZWOVU3VTF8XWhiNTFjZD8+IX5UbHcjKiQ0RDFxKmk2Jmx2WHBTRk5nYUliOzk8UioqeUI7PnQvZFZhJiJxYz05SFNDPEQ2dHh1cGlFREpkQzxvJktudWIvTSprMSMkK1pWdEVPZDRtcV0zWlVabFpPfX0mNXdjZVleNyQ5M3Qq''@;'; put 'put ''aVJiVnc0T2YqZUg9WisrT3w9WkxyMWxLbDxjMzx1Qj48U0ZoL3x9JHdiNC5xb0d+emhsO1U2aWsyOkFUdWxQYntOY002LklLT3VpJlgvZGNzUkNPX19BRitCVjlJKT1Hfkp2XWc9SX53SERKcnpXMkdkeEpUYWwsIi57IndOd1hUJn0lO0dZb1hWWilzU31dVy83VylCdCwzZ1R+aHNGWENdVihk''@;'; put 'put ''Okp1V2xyUHBuWW8hQExCZW05PGMhTmM6Yi9KNjkpVHA5NnMjX3U2YyY+OmpzaE5zR3EiLmMhblNkOT1YP2tMM0VqOkckNGVyfU4qeFZVLnNTdj5gR2owcEttb3tTU1defEkpc1omN3B5blg9IX1gU0Rvb3hwI1JqSFhRWzJuWH1EI0YmdUVlZCxOWl5lJFJQKDQxS2djfWttSEtaWX1HYC57QTow''@;'; put 'put ''RzVRPnRlWTtgVmIqNWRLMTtJTk8jKTxoKjxLMjQ9ZzxGeWBWazxrejJjLmtlcHhwI3hqaHAhTzVJOURJcnlKIllGZShHa1ZWITRddyNHbyp5XiwjXTc0KypFUW44djxkRUB2NjE5dm1taVdsVV1GaUpSY2x5eVRqRk99ZGFleG0hS0M1JEk1XUVNSD1uYV5GXUwsSSMzVVp6VD1+WjNtUmJrPFtd''@;'; put 'put ''eUNRPil2PEM6JV1XO3JhJVVlWCo1TmJ8IiFvWCg5cEchWU89JHVaVkE8S1hsKF8rP0lQQyM0WnA5N05uZ3YwTU9rPFdpfWojMnxgX216W31yNVNYWjtkUEsjIUUifH5NcDdmQE0oSFEieHh4Om5dPDpGaEBTR0VOZjBfaWNRM0p5Ymh2SVZRMEA3UnxFYWZhKmN0bCl0eTNJP0JMcWZRUld8OSly''@;'; put 'put ''QEZWfENWbXc/TypqcUpOJDoxSyUvVktHImI0LkhaTj1gbG19cjE5O1ZYPnZAbjdQJjBzc19Ycz43bjlGS20iQ3xXKiJgcjZAQjRkWFdDVjxdNGRSI1N6bTRWR2s/L1JwRG58I2I1Ki8pZi40KFRIWiFeUzBCTzlMS11VektdfSovRksjIyNCNjtJcn1oTCwxbyNLWn1YekY3Ok1+fUYwXzdSKE9H''@;'; put 'put ''QVBMZSJPWFcpPEpnV2o0JVFYL3RVO2J5Yzw3bVtveS8kJWVjJkw2RWImejxrcldOV3Bgfn12cHIpdG4yODpidTNWLkVtZCNVejt2SyJsIjw3L2tVV1RUbyY6fCkkcWc/WHViL3FoKXJ6TEtkPExbNmw4ayxlM05ocVpGZXZdYDBtejYwSDFQNlBvbChlMFFxIzlbUDN9JT54UURfMEt5LD5YPHFs''@;'; put 'put ''VlgzWFE6fElAJXZzfTBNXT96YXl8KHkkcmU2MmcjfTslI0lQdDMsQXBDMUZNKVJsW2h3QSw6JltaX05WcS4xQU9nWjksNU5tMklLOG8vU1FVKn5fRmsmPyg+d05oYGhVejBwMHFsd2JpKUtxLHFkMWZbMzYuUSs8Yk1uMU0lXTAsMlZ2JkBQRm8yZ2N4M3trOFMkRnBDNkFwWGhJe1F6Ki8mPDFK''@;'; put 'put ''cTVGWVVYSUVVIXFHfXp2eywxOzNDIUM3ZDFkcj9SeWBLdWxvQzRDIXE5e008enB5V2BpbWFWX0xmNiptLktKM04+LHgpNUZ7fj59PmExPiFeNik1X1Y9am88PilxfXZyfD9ga2N8LkBAdGMiTWh8Wippaz5HbjBmdiprLlB0YVt7W0ZvSFspRlA/bD5NXXNiVGY7JVpGWiZzfX1vR2srcmxgeiFI''@;'; put 'put ''QzpWKC8iKzUlITZMdyIrTHIySnxOd3B1TXpzNFtvVUVbZUtvXTk1JC8xPFdLYWswO1c9Nj0wOVtHQ1cuIXQyUmomI2htRD55O1tLQTt2bHV3eWZbPE1lKzkoSjBxdTxIay8jYiE2eSZOfUVhR1NAfERwQkYhQDE/XjFxMTxtM2loKFU/bzttaHBnWiJwWyJsY0xzZ25CR0c7QF11JmghRDhtODgm''@;'; put 'put ''UF9sdko4IVpiPlkucDUmZXNUJj0+RWskKVZXeFs2PCE7ZHUlLyNTJCV8c3VUJlchVCopRnIkfGxXdlZVUW56OXZWJHEjL05efkBMOWp3bDI4Kz9JX2I4ZXg8cnsoeUheWnAuPFkkUGkhP2czIjkkJT8lJip6TG9xPVViYlBTRFdKXnZmOVtZJHA4Pj1OL2hDIiZNbSRbViRjMj5gTjQobl9LeDs7''@;'; put 'put ''XXg+ZzNZYVdyTSR8aTVWMn1NZ0MhRk1CVkZGPXE6LD5gNjVIaUs8diMrLGZTaUpaMzV9cGd7VltARWVwMjQuQkJJI0R2RyZiNVNCbHhBPlY4Yy8qMFpqMyVFX0NIaGhwQGxyKVR7XSgpcXIuLGh3XUM5eXhaLzlVPGJMR0ApRzd9fj4ra1c/ODNGcCw3OSkwOCZPa3tOSTt6Y2I2VSxIRDp5O2tK''@;'; put 'put ''cFBSP1A8SExXPzB1XTUvLlliI2hYVW07diw9SWZxSHkvZkRTTWRQNm1kdmk5ZGxaKCooYmhSUFAiaGlscG9wclF2SFMqUDIxOy44MS8sI3FQRGtaVjRfVGhsJFJ9PXZsejw8TH0sIkJwcjNMZVNVKVhmS20yamB8X0B6Qk1Pel17KGNLImA8LCwrU0tEPlJ+MENyS117OEtTey99SkVde045WkBp''@;'; put 'put ''azgxXjhlR1BFVWEsNUY3S2dQYTdyNG9KZW83fXReSHguIkVZKUFdSnF2MkhiXVBsTD5sWiU4NitsWWghVl52PHY+TDB+eHxqWilfRGh3SGBic0kuIU5rZWtTQmZdYSlhS2YqNV98OV9VUnZ7YGlaPUZxWTJEY2Y8NHJULiQmS0VHb1pramA3NlpvbWxFOTA2ZGBbbjcqOXg+RlJVaHdnWCk8P2or''@;'; put 'put ''P115cksjen1zSm44fV5nWEU4LHAxOXU7bWZLamR7YV8mcGF6ZD5re2NfS2xQPGBhWXM5Vj5YRyghXyh2OC9DV1MqfV5nTHt7K1s7S1peKEJKfHIyc1lKe1RDPWxSIT9JRWxVJE1OXl0jLmt7bSEyVj5PRHtgO283TDs4W2U2alIsRT08eUkoV2tpZGhUPi5LQGRKJmA+PWcrYC5dI3Rke3pgekp6''@;'; put 'put ''fHxGX3kkZjRsVWt3K1Jdc2JyPHp2N0xeallNLCxHV2VTXTZXWFgpLGJ0dU1PSEUxRWU1YEc+Vn14dXdEZVIhYChXdWN2WGRLYG97aitzKztld3BQMm07TCNpNXp5fjFWO0FFXmI7JVV5TiVGW0o6JilVWChRO1d4dldbSFY9Vy5JRTtlIl4qdyE+TE5NW2MzPFdwL0cyOF83SV5qKyU+e2R6fCVF''@;'; put 'put ''ZjU3LyErL0pzR219P3ZzKlFqX08sblhDfW9HUGd8PGthWm9LNTl7dXlNTHNoT0shTUhse0xrRCM0W01yKSQhX216RVY2Xi91KS4pTSxeUlN8MlFffHxGSUhZeTtTTVNzeWg2cCU4Ok5LKGkkOXMwUVBMNF5KZl48M3U6ImoqSzU6RURvd2gwRCxtQlhgendWK2xjQnZLPGVke15UKiNNPUU+QnNB''@;'; put 'put ''bH0/fiM6TjM0fVBaYlU8YHl6ZXFkIkhgRFdoSnAsLCw3TVYhNnk1PWVKWlUlSVkrX0dWS1MzaCE5fFdMfFU+Nl9PfCpKe0A+ZXl9PmV9P1c/ckAvPCxLWzZgRysjW1I6T1BebkxaXyVqTXIkWW9aX3c4K1hNfUssOix3YkM0VT8pZ0ZocXJkXjYmZldga2tAMHw3PjVyU2NZPlVnJSM1YE8lTEdk''@;'; put 'put ''cW45a3dUWWIqSU5rQWFsa0dMUHE2RVNpQGM/dEdNezlRM0RuY3lmOmtIcCE1LmwvYi8qUXNVYlF3SWNeP3hRVi8vRkNXXUdTazVGXTFNU2VofTxFKF9hYX14OWJfW196ZXImX3Y3LHw1ZkwuOFZyKDdLblZpXnQmQix4bGYrLkkjI1BvJF1xWi5mVSsvPFokQUcwZm4jYSg9b1ErJFl3bCoiNHtY''@;'; put 'put ''S182eXh5Y3M/MVB8eUZgPDN3VmtbYXJRR0xXVF81QEZxb19oS244KTNKQHk4NkNwI2c5aXtwP2JLXk8+NkRXaDo6SGhxPiljVnIoeTNKQD0mUF0mVE42JHZnRkdyI05WPltzY1ZXNXE3Nj5fenFuKUMsVkI3QV4iK3RTaEJKNkVAUFNxWnlOYXV3RD1feHBSI2xLaFsiVkdwZDd6M0IzQWQ5b2lX''@;'; put 'put ''Q1J6akZUJT0ifD5pWSw/W1FsMSgjRG11N1dmY0l3YHk+dnxPRTZuTzo8JS5NbWwlPVREPVoqZHkzSTZdcVo8ej1jQk8wTWQpaV11ezRMcDooaWp0aiFbS3FWRzA2IzRNZGIjW3JzeW1BZGA/TWdMQEozdHMsL1NJIyMmMSZNckg/eUV1ck08Ukk3N1dWeThYOm8hJDl+WHxIN31gSmpmQFcmX2p0''@;'; put 'put ''MXk6ZTQsQTJGY3RMV2ZfX2ZiNGslbHx7X1ZvTVk4MSFpVHUiWmt3Y149TlAjSE5JYmchNCJsO2MiKDpBXk1RJnc1W2BQa1prd3M0ZUpFN29oYzRENytOeUlmL0wueHh3Ok9bTEZ5Km9LXnFRJE5pRSVIXSlrRE54QEgrT0UlRSEvcl9dMzVyQlcqKjRjU2FARTxpd0Vdd08rMXlHJkJEVT1ZNVRA''@;'; put 'put ''T3xQZ29LKF1eaENYSjE1Z29EYDcrIyVDZmlzOVVHJmQuXjZkYFtLZV19eDFdSlFHeGNjKkFGYUo4YkUyTy5JMjMrKSEzImNBUXxfJClkOE0iZk1PZm0vYG44TmssUERES35IUiNKKFo6YkAiN250VnxEaEx5e0FsPX0pXzdtSThgcyppJFJheFNiV0wmeFk/Y2YvVy41JTs8bCtsOW0yczk4JnNV''@;'; put 'put ''VShwRkt9QEx+L3xWPGltNkZoVk5YO2wuQFhHcVtATGRfQWdVcE90PXhwNzMmcFVpXV1HTXxMfFd3ViU0JGQpUExdNiZOfEB9X083b2U4Ty5DbzUjczFSUjt9OjB1K0JZQXJWK1U+XTFqKzRGeVFucSsmS2EqISsqWEJqRlo4a29abz8qMi5dLFhFNHlSM2RoWlR0aE90byZ3QW1qO3U/Z0dTRWtL''@;'; put 'put ''JClyLmQ8dntGJmdQT20mMTgqN3QzdnIhfVJ4WW07OU0hRExxW2N3UktGdzhoK3Bma0psSTU5Oy9UflJAbHducHNzfjwoV0RsI1UmV2pRSCRqMiJAUzIrV2hMK1dzOVEsbVhTfWchanB7Km1YM1JacSF1eEJicSFGL0dFaiMyQiRWamdaa2psO2JfOlN7QChWQmc4dEApOyVTP3N7aEVuQ0o7PjF5''@;'; put 'put ''ck9yZUUyM2dHRVZSRkt4IzZ7bCsjZl1gRGBuRTlIYFJFcFFbR2g+bDIrU2MpdHVnWmZMcXdSXjFWaHMjVWYzWjxBeWhHNkV+dzo+MURXVS5RYylwMm5eOU1UWUBYZFsrRWYvc19WbTJ1bEtQRn0/QEw6alF8SmZAVmh7aCt9I2JlIik9eCNNKzcmaDkjQVpaK3RASXp9SmlVc1RJSnFkfm5nQCpP''@;'; put 'put ''dUFwckVEWSF5c290b29ITVlaZjddL0s7NVRVfnA3eGFMKGs2elomMWBpRkZCRGhrOm12dUp8JHk4YURsLF1OaXVlJjpyYyxNTHxLMjpiXzUkT31nWkd2dTlnMVhVPCJGY0xKfV4sZ0B2bHpmaEhiVlZAPjVTbT0zUElbRGF+SHcoSUYyaU0vc2o9KkxgYEw9Lnp1XSFJOSRRdDxrNUt2dlBhX3tL''@;'; put 'put ''c3ptTXYlfkdWJU1ecllCcVMsXzxEeTJBUEt9b3UvXSl5RTFfUGQiSF5xWiM7eD50WjwjXzN9RkssRERmOiVJOnR5MzFmI18jPD9BZC5nYV9LQ0k5NCNZa0hxISVJbVFheEdDV3AkNkNYR3N2WTAsKnlmW0V1THJFSXhjcGglZCloJWQsSVB0N05gdkdDV3BrJmh0d1UwUWxzSnErOVt5S2tFflhX''@;'; put 'put ''YExdPXVoWk94PnREV3dIOXlEK150X0hecnN4O0BwT0hnIXk8aCo3Tm8mcUg0SnA/Y084aURUdGQ8IzV9OE45WTpHQ25kYTp1Viw4Lkl3fDtAVlkrbUckfGNrQDpNSD1uNStfYFF6e3FaNWt4ZzQzLF16SlZzRnJzd2AkTmpqeDolSSNXeWJZK21HRW8ib0JOPnxISkJHPjI3dDJFTmpUREpLOyVz''@;'; put 'put ''TiZXQ3tWVyouRFZzc0gmSCtwNlY3Mm1ZMjd0Vnw1YXp4KWEubUY6XS9AS2ZjYS5wdDM8K3hkW3BTXkdbYzgyNGIobW9SNHVaWnksTkZUXmM1S2EraEd8ek45STZOfVozVWspKylSK0hILzxRTCRafmAjN0pPZ19YMiM/REpuXUQsUWEhLy9QRWQ4MjcsUE9oZC5tOFZSYSEvPl5qSGY8KlY4bXgm''@;'; put 'put ''bjdjbWl6KSFsKS5dTyEkQkYpcTBuLEY3V01CTkNYbGZuY21RYF0lTW41QFNNdiwqe0dwbSFOZHg4N1MyYV9VbENwTjRrMDVkI19jTzM+VVpTMCZLYCEjNmxEZjp8fWIsVmNHNUJoRzU4dyg+OjFsQGN6fnV1WUlqYnRXREsvVzdyYiU0XXx6eVZISE9yd09jYHpjU2l9TDQ2a0s0VjYqRTBZfTVi''@;'; put 'put ''VDdOfDR+YyMjbTNyIlZXOE5heGNzKmR+RXNEb3FCPlEuc2hudUt8UklFb3Z7NCloeUEwbWh1alcrXlt8WGBXdz5iNlgrdipqL1lZU2NKQjN4SSZ4Z3E9U09vIUE3ZlNdcnRYUX4mRkMqLi8sO35ZTyR0cVRaLHouWXZLWWV3bFNvNnhFU0VHZXtxJEtTR2NtYixMeldOW0djQz47KkNKP01DZTNV''@;'; put 'put ''Uk8yN1Yra01RQ0xVVDQuKE5Yak5tMFF+OSliKVJfe2JdenE3eWNQazkuVkIhSl8qPmtobUVAdSt1THU/YUlOVkE8KUZRcU9iaVFbdCZXPWNlPDgwRl1PT0thKyNJJDc0eUtMZ0MmSFQhQD03anddIl44MiNKPDJKbzpyXnt3aFp5I1pVfVk7KVUuJFRBTysyUF4lZEZTezxSalM+KDZTeVd9I0Rg''@;'; put 'put ''Yko5M3NNNUAzITJFPWxKQUh1XTJpP2tXM2lnO0pkenpaa35qW05EL0t9WCxCfl1PRnpjdyRoSEE9NG03VUVJcm1jZ15ZYnU5WGhecWdkeF1lYz9iKSh8ZiFadmtzWVNBbTBCJj1HJSlbclpUZVJ2e3VEYnBaJHlWU09fcih6Ry8lMiZOK1J1cGg0MTJGUD8iR3suNStRbHBFeVZwJmZTbCtVREtJ''@;'; put 'put ''K0YkciRkTXowNVNzJTA4dGZtRHRmYzRVU2UrI2RrZWRGbypkdnc+TEkyMDpHLlMyKkpXMHtgeyV3RCFwZiNUazdPYGRKN1RwO0IufEpoKls5c0VOTCNUJnQvWSpXUDcjO20/Y1s6Q0VGQGJAPyRVVSZoRWc8ZyE1PmYjZTc4QHU+U1YuMyFPRXE+JHY2Rj48V1VATylwXXt8K2NhKU58KzBTImJ0''@;'; put 'put ''Sk50UXFRYXUrX0YuczdrZ3AoTSJubjdJOmN4eCtaOEJ2IiNwVVhHUnxgKyJsKygrU35IUD9fRlp3W0UwLClGYixuWmgmdGNXZm45NlolZWo7PysmcG94blpFcCIlejtDTUt9Ki9oNT5jbTtUYn5ILlV8WztOeFRoWlhuTTBHQ1dwN2IzXXVaNU5aUFpJezpkS04wMFluXnEwV3QkbGRXSD43Xmhs''@;'; put 'put ''b2QpL0pzbHc9ZlY4UXRwYnlSZUttUkU1JEYoJjIuTDtxJUN4N1VrJGl5Myo9Y0JPcHRTJjwoPHYqYCFJcmpGRld9KFB0PGYrcGZJaCJQUkRfWChXNzkyIWh3MFhUPUNnMSpKbzM8ZEtPPHssV30iIStyVDt6Y1RoQFJUQD1EYDpKKk1MbTwkYjU+QX5kS2xYaEZLOyIpNEp1WVR0ZFN8WW1ZezIx''@;'; put 'put ''eHd9aEk9IiZrRy5ue0w0fH1MRF9dekgxcEROPVlhe3hseXJGRkEhTktzNHNbIk5LV35yOW43IyVjTW4vU3soNX1lbm1XW0B1e29dJChtYm0rP09xckc/RUlYIWtaakAhS25VNSExeTh7ZDR2TDVfazNLKzErbElUd0okMDR9fVlHSmcwcEd7IStyIX4+RDIiO3ZBKksqdTprTTx4L2h4cEJGRTpg''@;'; put 'put ''R3dleTx6VnkpTTVnRjUlIWVSSSEqIlMyO25DLEpYKVtWPCpkaFNmTTg1PHhSOGtVO2t5T1EqR0hFLEAhYjY5IVVjai85U1JUVSRxaCEweFVFOls8disyP3ZiOnl8RGE1eDIyc1B4PCEodmA9Sj1GbFlZaFJpPDA5LlBrU3trQEpKMG8sZGxUQ2t5fHd2akhidldCdGYheUN3LHc6K0h2TSZVSGA1''@;'; put 'put ''JmtYaXd5Sz5+WyRZcixxTHFSRm1bdGNRdHd3MiNwNldnNXpvLCVqPyE4KyVqViVXV05qY3U6KilLVXk0ZnJ4TkkmbDdhZTd5bTpCbS85R3ZacEdmeWlma1gpWy57XkssdXEhMG9yYWVJQzEzWTJZQCYhIWFHK0hhcltgbWtwIU9WOXpiK2BLU0k/LnkkYiNKZ0c6PyFQNmJmVnZ8MFZWYWlUSzRp''@;'; put 'put ''dSJjXU8vei95RGdyPzd+WSx8Sj9JTDl7Nkx+LEw1WHR8TipKenw8LGNGVDpLWVMrJUclKXpCcDVqYFlobnY0e200NVBGR1NGeVkrPzpPT1g5QUU3YkVyb0ldZ0RNM2RxQWswLlRXPCNiVzl6ISpIRDkmMns5aDJxU1Ntd11wQExVKkBwKSwuQ2JWMzEpQmBLOSYwNFcvbEY4UVFVVC8lPGUuVm4r''@;'; put 'put ''clB2M2lgNGFUdyVTP3AscG96MnMpbUFDcVRVSnxJNERuY01mQkBAQ0FAUX0sI0M7RzJLTUc5NzE0b0JSVHQ+dXZTRmB1KE9fTXxeXkApfWh8anlHPXMhUSwvcElAQGlaJCNLPXtscXg6bj9+MUhpUit6KV5AXmdmdTkhQ1VvcnkybGlQPVBsOl49UFtQW256eX1QN2drb2M8VU1aXkdROGF9UX59''@;'; put 'put ''OGs+LG5gIjt4WmtRSEN7UV89aUwsKTpVSUt1LD4jTWd8V0V7NktCSWw2S0pvYCttTHlOJHRCa2kkPG1VezJpd2puZmR1aktAdmpAKDtqJkBzOTRtQFZCPHU8ayxROkdye2spNVo8XjxlL2IvZ0VlL05eTWs+Oy47MHVVKyh5KjxEIz4zI3pmen5QK0BlaHMraGg7JU9ZSVk3SXclK2xxUVlGa1ZZ''@;'; put 'put ''VnlEbSx8dT96QlRWPHtDSHx1ZVM0RTcyel1NcVFaPFVtMllmRUgrc21JITtrUXpKXShNVjFfV1dmIl9OWz1QSEVmMCs5OFJvQiVqciEzKkl1eXssc3oxPUhbaF5ScHZgUmRjLnBtaDBwYjxBOHwxKlo9KC90fFgjeTBaeXxiQGFqIUs1dSZ7N0xyOCkyQmF0JWd3WE9qQ0VZS1IwcClVcXUjSU5n''@;'; put 'put ''OlomPFdbVT1QbGdAQH5RK2M8cToqJGwrVD08KUxXcT9waSRDL0dyZ2EmL3RtSWhJKF1uaiErNm91N2F1Q0VnYzFCSlZLQGk6aV1JQXYoR3JYQU9PLilQPUhKVHcxJCM8Z3V5UCUvWWFHUCxXIm91JHlRb0lUSzVdQihzcTAzRiU6bTZlIk97cUk4eyo9MEcyaSslcEc2Yn0kcj1vOnEjQ3hmbVZ3''@;'; put 'put ''OnssfjNpVmtzbH12MkdETGxTY2xDbVYqOWBqeTo3XWwvfkguNmY2ZFF6YjJmakRBZ1JNQls2Q1UwO21be2g1QWxMLj5VVDlASyo7P0kuNSUySGBAV0BLQjAhW2xbJWBWQE0uTUcsWDVOfnROPXtXTzhiLzNOY2hqZTxbd1YmO28sQUZMOVNGdzhhOSNRaUU8ejtTdkAiJTJ2SGl8bC9HeGh8UCJ9''@;'; put 'put ''XiNgU3p5PSYoKnNAfCFIWDA+IWwmYFpNOzlJXlYkdEFtVlBEflszITh2aHV1S2hxNE1mLih9TlpqJkFXUCF6OzFqUTYrdlhzSGpTV2U2Y3xoZiJzWyp0WE17Mm14WHVqaS5NaHFVZEpFYzlKXixDV1AhNXBqOmAyMEZFMSw1NmhGdU1lTFtSQDpuLlhKcmV1UkJ2YXNyRWN2VDFzTFYlVGEkRzEw''@;'; put 'put ''YlRCbmttWC98LHZFW2BQXWBGbVJiPy9meWFtSD1MPDpneGVSRXpdKj9rPCI9aioyYFtqdmpOUWB7bTxfbTJmWz5leUIsUysyNXtqMHZ4eWd5VWJ3eWJoeDs4NGprc05zb1loLlVgXmxQfUAxVllVdFVkcUREO0kiTk1+O2xaK25vYjxRIlZGbTc/Wy5LRWxbOGBudUw8eFtvS0ZaMmQkXTdte0xY''@;'; put 'put ''KztgOlRacjdKfjVGXSxWIUJFTTNRWzhyKmBnfmUjJisuXXQ8ZDcjJWhrbz00bXp1YnJGVlZoekd3bXArQWt1PEh2cnN5U0pPODkqOUxoUFhYRmJndVFdckMkM2xqJHE1eXEpdXsxZSp0c1hiTltZTHVqZyJNISQ7OEExbiNkLF1kM2lUWykhPWV5eGcrUkBsV1U2Ll82IjZtXmhRMS9Kaz0sRDl6''@;'; put 'put ''MjAxKlNfeHpeeDthLkZnT21vZmB3PilkTF1yK3srLDVVTDxrdWUlKW8wRi42bWBiJDFMOyk6R3V+JnouMSsjVSpwfkoqOlFhYmVJeSVqcjZYNlVNJD8sT2hjYTtDP0BEKn0jbnBkXmRiVy5tfG4ySXQ6R3Rvc2ZbeHhXN2w8RXJvPkgjZnU5UTlWO2M4cGluOV9iVnJmTWVwLlsvIUNjWmxLKihl''@;'; put 'put ''IXRGVkgzZlhZNk8/aXN0cTVkJTI3ST8rNztRKmx3QSwsZltlSXBrdSJhLHlfPG04TWBldUlKeVZiRV1WYl5IOU1sLzkoSi9ORzV8JjA9aXlXMzJ+Y3UmdkI8NUY4bT1BP2M3SkBJSF8zKSI5Ky5qPCZNcUk0SyosODY5JG8zNl0jSUolaHxSbnREPzRKMHFHMEl+QyJFPCZpd1dlVzFHKjF2Tm0x''@;'; put 'put ''RWtkbVMqNDNHOSlPemFDOnI2aSRNOFp9TyNlQEhiZTNGWS9+fW9XRyFCPz5gVHgrL25bNjY3S0VvXl1TcyFNdj5lZFErSkBFMzx6c2pvfkt4JS8iUDc2W0lhYm5+akNqNSJmNzZZRDIsaDE5WUtfcl4wc35JNWgjI0hVOn1DeDQ8bj4+cGw4Ly47UTYve0NRXlVGXlVJY1dRcnElVlVmR3o/SX1w''@;'; put 'put ''bDhbLnVqZjM9YmQ7YHF9SypjVH0/OUdnM3ZYTU84R2dKW192WGdQLlQuMzFSWF5ObTM/VUwzcGt4WFdnIy9uOUVMbHsoUHErV2lDQyFyJV83K2NZP2AkSEhgMSs2L21FfDN2TEVKSEUoT3VnYHIwMzQ2d315cFM7Vno7LH4/ZUBaTCsoRTt5V0wrPGsrbVoheUxIbkJPQkYzOz47O2UhYkZXZWYw''@;'; put 'put ''YkR5eSpydmZVKXhKYlRFOTdrKlklL2kiTlVqOHtYcUwzbjR2aVNSUVheJTxiO3cxc0pDTyNxczVwfnZ1Rk9TRihIdTBmbTdJfnAudzcxdVB0RkQ3OFR9U0V3aD1XYWosbzFLR2BbY1glWD47b2o1PkRvNW5TWWNjJlRhdV5OeHVLQzE2JksuZUh0JSVlWztWclsmRytnLiQ8NG1fYEIxS1p5Tkw9''@;'; put 'put ''VUtQazkpWE9LajQwLiM/cUpCMVIvaixYdzVDIXl3amA2MkB1eHB3IzdIMTxNcHU0dXN4XlZZaVpoYT0mO2Q+RnlOaTR4dXd7V20vR21YWnUhW14obF5KdSkvZSkvblVtPyk+VyFYI114KXc0bzxhRSl5VUY/aT1QKE5Qa0Eybyx1WTpaViVXKzs9PG86Xyg/fD1NNiEjYDEwK3MhPU1LTngjVmRe''@;'; put 'put ''WnkxKSo8b3dvZkQ6P0M8bmpuOTJ1Yno3UWR2I2Q8VCplNi84K09FW3BUWn4sbmdEQjgxYjxLViN2OTIhQUVBMFlPfUR4dlc/Vm5Ca0VeVG8wVkNZJXFVeDJ+LzRdKD8hI2s7aUw2TEl4YFdPS2M8YzpLVXErTWp0PU02SnVuLDN0Z0MyWnssOUghY1JQPTFIRkRsXlAlXkYjYiEuaUMzO3l9Rl0y''@;'; put 'put ''NUZBQVhMb2k8RzVMb0ZQWHV1QWs6VVpaW2hhTVVRelJBSntbektYaVp3SVV2Wj5IKiJAZ0trfihCLkZgW2JsY106SlZnfHxpMiJhMyxddEpiZ3YqVzZqbyUvPiEwUG1ZUkNVbFVNLlE3WClEI2VIQ0g6N3ZxbCt0NVkyMy4qIT94cUNXWVUrWVYrPWldW11DMk1NITRlfHlxakJLNENRNVdqYzxv''@;'; put 'put ''aC94cy9FWDlIe0Q1L2ZfIzFZRD48cXlYTXEsNUIsMlcran0zSmUqIytSUUZQYil6dkMrO2s3LyMrMDMvIytiOWp9T0JDTVY7P15vW3lNd1k+eDh4QnA1fSFxeXQpL21jKS9tYyksND08NENNSi5UaVRvWk5eWnBfcE87PD84RXQhKEo7fHheQ0BHdyNwJks+QlkvVXlDO2RqRCIxXk5pe3dFZlBU''@;'; put 'put ''JSlVZip3ejBgWFhSRFdJKyl3YCFGYEQrOE1gJjs/NltnQGosO0l9T2dTYmguL0Q2V2V0M1oyWmtrPzNQUmpaX0B4KlBYKTRrJlcybDkjJixbPFNoaHp2Y1tMQ2BkIyJ3RyJXSUVLVWxKRjdOTW9dTHYhQld9TGpxPClpUnVVREZEXWcuXXFiVFF1fGQqR0VLQ1hnKnI8MiI8QTRjPFRSWFtHJUJp''@;'; put 'put ''OTwyWVd6S0pBMmxNezZTeyh+QXl9YV5XXVopazRnQDdIKE92dihwTzZSaypNeWZ2X1BKKV46PFlwO2V9bXd5OUpMPXA0NDhBfHZ1KEZJLkY7VyZsKDxFN2g+I2dRPyMlbVZ5PSF8OE5neCI5ZnRZcUtFS1g1a0pPcSV7fj4yQm87RlpZKklyfHsrNUkyZ0BeSEFIWSo7XzVRJDpuZWBbNkZtND5T''@;'; put 'put ''fjVndTR5Oj1aNEM7fWVYVytwa1c8VGA0OFZ5JEdWRXBQeUNdcnlPelB8LklYSVFBQj5VMXgzUVh0Ym58VjN7O35jM2FvUmFYO3U/X0Y9Kmc7dTQvJHhQNzRfOm9LPWZhc2hnOHpaTHhXWW0zNDNycFZtTltlMTFeZ08/ODpHQnB3b3h4cnBbOGBMQENsRDBXWGJJXUVwO25lYWFYd0M1aWUkfXR5''@;'; put 'put ''KnM3WVg1PVEjPHJedV83Lyo6W2UzY0QvO1s8XUVecEpvQURVQz4wP0NBSF1qcElEbSM1VHFSI2V2K2VZKS88OUpBRjt6JURIeG1ufXJRV0FvMjlOXkNhIUpTbjpHP1QwQ301M1hhakwrKSgrUn11eDBJWFprXkRvJl9fQ21ve31wUypsQm9afEc9cWgpLEhtR0ZNKnQ2XThGViVAdSVwJSZ+ckQ+''@;'; put 'put ''XXdycDtKcSZBRCpLXXF0bGVtTTk0W2BWNkQidnBwJUhjdUVyUzVpM3tCVSorWFh9b0pPdT5oeCt1Mkh+JD5pLzsxJlFVQ0JhK0o5I2I2K2kiKm1BeWgjLkxGXlpfQk16SnM+OXhfWDdlOWA2fUVWaUohKFVNRl5aKSo7cnpLeUA8SCZpOyk1IUspJjA9IyNabkJETSVTS0VZTCI0WVhMSU16cy98''@;'; put 'put ''Rz50TjAzekFpNTp2L3pwPmFYRCJ2a0NbZT9FdVkiclU6WGJUIUx7NWYiZj1mLnV+Z0xgYylvOm85ZmhLIT1Vc3p2M3Jwfnx3IT1ddTJjfUVLbHAqOTgqVERyOiViKVhCQCpmbnV2WSMvfnwvJHRrLkVrYjt+VnZ2NDx4SmhMNEpET1NoYkEkaXplZjx3OC9hKmxVRzZ1dl1bZ0AjYiUhOj00NXxv''@;'; put 'put ''JThAbWFGREsrVn13LnMzNVJhaFMoPFRQPGRxVTxJS2FoU2U7KkowLj1YLCl7YDo2KjMqYSZdM0RnTSQ2Zyk/eG92VGFvJFA5LmU5XTAhQHZMKWxefkpQakxmRkR6bWghQ1chbSVifWIlNWI0NyF7Rjp8Lio3eDk1S0g9WD5yLHEpW2FWQVlPQTo9YE5ZPy5JeDtzXSVmX1hMNV4/NnJERjF8JU9d''@;'; put 'put ''e3wvWFd4PXdMbVJAQz5pdVU7NVdNO3tFWE9HUFJgNGZFazZ2ZllAelJ4MUFXKUh5ZFM+JVlLTHlUQSpZeWlFWHhnUXNWWVd8JCtDMiNQKXluSnhucytDREBUSXJvMCY3KlVaaU8wRVBZQENxWCpTOS5hdVpPKHVidV9BSnNmUjFMSF5qdjxRWjlAeWl1S3BALj5nRF87TEglRXY9YjhlKXJZQH5A''@;'; put 'put ''eVlCV0chTzdWSzs5Sj91VXc8VVFybU5nK1krVmRlJCtgeldxLztHez4qRTVZbGBgMC9jSXhSK0U0dzsvXy4zV3hCbzZFWGd8TEMpWV52ZHJCOXpMX0JhOV1AKmpGRjZPSl1oZGQ+bUhybHoyQzpjZHRaL1oua3J7WyZ5WCF3JXAhbzhpRFJ3QzE6QGZaUjlyOkpTfXw5TVdLVXUzTHt7I3AjP3hi''@;'; put 'put ''eCEpQ2Q2OStFZ0h7fEQzWzFiaFpVP0dpT3ZTRW86UzB9SWZANjFlX29qKU5BU3soY1BdXjRvTyZdRDI6eWxMaikiSnFKb2xqM247ITRtZC5MSV5LZTdOJGJONjtlNGImWDpNJlhJUT95SzV3KWB5PXlwL3Irdywvbmh6M3FMbyIvc3c+TFFGd05wdnEyTmBgWEJZayZGVUhDPkohTWM3YzxILD1v''@;'; put 'put ''eTVubDcsPkwrcSgiR3pNM3pzUVZiJiFfbWhrcnlBQDg0amFjY3VMfHN6VzdnI01fa0BjVEdOcXJKYmZyQWhoZ247fEdGRilxa2FdJEouY1A7TDIjcil7YFtHQ2g1PURaeDo2Yz9lIjtzUGVDKCkxJns0Qm8+YHk7TmZzdGRkXSwkaUxfLCZCX3B1Uj0wPmd4WCVDOm1PLF16ITVYUnVjdGQ5WFpJ''@;'; put 'put ''MnIvR2hPP0JlLCJ4cjkqX1k5JHpLazJoQFkqIUtGc0cpYkJ+WGcsZEF+fjVOSW9JdH5zViUrczozbXA0P2R2REVsOll3JU9DdW5dMmdFRW0kRiRBSTtBNypvIjdKYSkud1liRz4jaWJEfX03Z24hRyJ5M0JUeXguNCFWV2RLS19OSUM6MGB5VWwzNmBQekJtLHIrdUY6W2QvVDNYWGlvP2NXWEE1''@;'; put 'put ''QWNJfTVjP0JFJGgrSkZ3IU92NHFoQk5YOFY7M143KkN4ITtLQjBIZWRRWHQpUnJTMDAkaUx9bCYoNF5oa3kuZHdBL3IqSjx3MHtfaXNJN3lrQlozIX59fVZjPFgqZDNqO1V2Ry9VMzwreCwxMCtre21LOlI0WT81RllWRT1KJlsmNUdBImQza1dXYEAyRkNVNCY3PF5eeFYob0AyUF5GWXc0QDhF''@;'; put 'put ''PSg6L114YCpMOm0rYnQlLzJldEdxdF56LDY5QUc7VE5oejtKdzBEOERmZntgTTlufCs4e2ciOC9NJWRPSSNKcTU6NzJVZHY2S0RyKF9VI3MlTEFvPm4wUUBxcCspLkl0WUBbNzRTeHJaN3xGI05ONGc3T0F2QFsmRC5LWml7UV5bb3hTMFhqTn5ZQyV0b0M6NGhgTCp3PlYrbi4rNDxgJWV5ITlw''@;'; put 'put ''aTlJTXl0PnN0cEx6YTUxPC9vKDs4Tzp2SzwiR3poOWVvPTFmejhtJCtXQjhNQWFqVyx8NCNrdERrcGMvPkkiTk9xcSIvZ3F7NlloTCVRXWd7b0E+bzV3cUVYM0ZxPmRsIUwucVlEa0tXJEF+LDFqIj96QTw8MnwoY34vKTFCPlN5disyfjA7WW5YS1hSclQ3LnkiY3ptOVpKXz5aR1lPfTk2fC9F''@;'; put 'put ''Ukt8LDhgTDN8SmtIfip6VVVNZ3ZuWzNoMFs0Z3txZj15clp9I3NOJm1vLHRIfmdrKFJuLHRfe0dCaF9nTD43Jk1xd24mQ2hoQCRmXWVDfDE5LjlyPyhVcT51RS52XU1Ld1EkUTomO0hxWklDRHptfkB1KTJTYThQRzh+OmJmTHc4cmlHOWZFVGhDTENrVGhoaGF6cShnO0k+X0ZydXgjbEBKbnF3''@;'; put 'put ''e0tWRDljaE9Oa2ByLFhVJjZXKHI0ekcpcFVxRTcvWFo/KGxednVFPEFNMUk1TWNyIXRgdChuOSt0MmdNU3RRfndKM3w4Y2tGZlAlUmFrOUVzMz90UVJZel5tSSNmdjV+OCF1RWhFLztVRFVzRzFfeTU2fj5ycCNHLk8oSCk0e3l0SElPWEA0KEAyakgudz1jb1g0ZyEhX0NVJSVkP3lMdCVbXiF5''@;'; put 'put ''dF1takw9QX1RIUhYYmM8YjZgX0YjbmZ5PUBDUF8pTVBEX3JKSz1xJnIzdCxIXip4OjRvdktXJCkyXUpGPzIyRlt0a2daKDN0dlBsPVM4ZzRBfX1SQkw2UGpRMXtAYnI4ZzJNcHJRJHVGXXtXWHdLbDYldHxTKW5pdlZGTzUhQnRTNUkwYTRnYHlwKHo/NHdXS0I7eVc2QmosV1JScnAsM09MQS8k''@;'; put 'put ''Z0RDdXl0Y2V5KzxoInhgNXxKNlpjS34hMWQlR2Y3KTJ4Y2hfYmk1YmZpXTxUdGZnRm53MiRJJil0anFtazBTYyVfOWdqVixVU2ZkOTg2KVJCNzZVXSxwKTMoRiwkdGtCZ05hUyREalcjWGp9VSlZYklNZjM6WGUjK0BoRyxza2I3JUY3KmY7dzZMZiEwXjNDbDN9b3NMZV0yRWBuRF51fHA3ai5R''@;'; put 'put ''ZVo5KSUxO2hNSnNwe15QOF0oOCklaERIbVg9YHo9PEtnej9IL3JzUTZtKlF3QmNseXFeMlc8UmpTKV0oRj0/LE1FSXkpNDg/eV1JI0NaTGNYU0UoJiVIS2BwWkBXW3Zrc3hwODlkQkxzV2dkbTAzS3lfO2J5VTtgdDs0MUlecn47ZG5IUnVxRkAlWU5taz19elg+UFtWcTQzITpUYzhLZSxveCZV''@;'; put 'put ''R2RTPilMeTEiXiRVeH0pZHF4dEI1ZT1MMXBtMnNCZkhUeSlEVSFue3NzKlU1OWkke0pPY3khI08/Qkw8Lm8pNGJLZGR9ZGJUUkZOM15kKTwvYHRaYiVDVV5HPDowLClGUlhrZDxRYnw2TjlPQHUwMkorVHBWYmhJb1VXbVlAP0MwW0V4WCl7RTdUQy5lNllnKiRzcltrXX1QOz5bVH5fJntSSHZK''@;'; put 'put ''WCgkW1FvSUMrcXY3RFhLVSlBaTAoREg9Qmg/QzxwSlBwKyxRSWVZKnl1Y3RKVnU8VG00QlF+eEEpMjFIPjRJJCk3RTxkNnBxMn1WeGdnaEdpOj5rYktpeTcmfWh2Vi8oVzxFTkM/WzQuK0NhTEo8e1A6WXB1XiF+KE1oeEVVUlB0aXtgSWBkQkdsMVVPWUAhYFoiITw8YSs5eF8/YEh4ejRLYmYo''@;'; put 'put ''PCs8dVs7am86LzZ5aj57Xm8lUSQ+LltFM3s9NitKaF4hYjE5RDV0MitVaDdMfTM1MjJwNGleSHtnbWNwR0NvRFd3NzkwPU9HRVFFdGwpJSI2NSlCN3UvWDdxJnRvI3QuVFgxcD9XbVBmPHxPRiJPYyMhTT05YEkrKUZfLnM+ZiY/KEtzQTVpXjtLInI9ZVVKRVZ9SChhVjBvIyNPSWIyNklDUklX''@;'; put 'put ''M04pdXBnbkh+UHlJJjsqLnkjbGolW0BYYj5uY3s8Tmo/LyNZRmEvMV5nLmxKPiRkS3ltQk8pTVl7aFhJO3NYKDZBKXFncD1bJj0hMEMkTG5QKVtkJVNqd2Y1RjIhMHlqcmZ1Okd5Vk5DMl9nWFRSJXQ/Zzw3WFpwbDNCX0xMPj1Je2g0d048dGhvND0jTVc5I2lALEZXfk1GQFljQk5md3MudGky''@;'; put 'put ''RGtiWiVkb1tmcURoQyNdKD06bCF1K2t4LF9aeWc5TG84cGNdN1htPzI6eWRGVjgqZSEiOFplKEhlbSsqVERpRlVFTyVXVkBRdjloP0lkRnxCSC9CaVcuWGBXSlppNGd8OUpFREJUVTRrMHR+KUVdImlbI0t2V31XSkBQSzxpP3lNcVJ4NGUkeXsoVFkoZUU1Z0hLRzpReUxTI3h7ZitoVTJZLiZ0''@;'; put 'put ''dTBSXXNEUS9VYGdaTDQ6dE1MK2dqOiNdKDhjJmxTMG5Tc294V2J6Wih7azByaSs/LGBNLC5WJE19JSkhb2JYZy5sSElJTFtWY105Z2djRS87ckRydEBmQSV4MjI6cFcvV3RYInQzd3cmOixeQjN0cXtTUC87akRTe2NPNyN4ZlU8X2ddVyh5MCloZVlkZ25yZ0xgeEVJJUJtRWsyK0VVMjNbRElC''@;'; put 'put ''dz5gSjMvX2tiLFAveGAwOUJSUHp7UCF1VVdsLEZCJStKdT5rPlFLWi9uSnQsYCE8Umo4OWBmVjMjeitdX1pJbm4rNF5kRTJVVjYsXzp9TVJ5dWJoNGw1bGQzJnxfaWB9aCxbdjViT0ouO3A7VkQxbVlKPUJBSD8zIk5jRSVfcXwibUN4a1tMRz1pZkhCQ2J8WSRUZkhJZ34wXj4zakxoS1VnS25o''@;'; put 'put ''Q1s9a0NeKn0/NT1rKFJfSGIibzh4MTRSSThlWXZpSEsjdDJLanNxQDppI348TyRgQChtYz8xNl9YMUtfQ0VLTyNUcC49bjZrXmo5QDpHOV9HIWh1ISJpOiojL3UyYH55RVFdZFFVXnNxVHVLNUJUOVErJTZRcjQsblhiMGlmWWFqen0zcXRpUnAzdlhqVWA+a2UkRmQ7NjtwdXZWYiNROXJHVk5b''@;'; put 'put ''ZjxfTj5LeHtbWCRdPzZBJlVNKXFUT2Bxe0JicV4yLnJsdTlpInxpKzlHVl9Yej9YayY2Z1Y7Kn5yQnVNLmVDXn5AaF8hMlFFN1YyVFVRQD1gOHA/emlRayxlOSYqRmNRT2dwbyhlOTJjVjE4dFBFWEM0QUdJYEhVNSZvYDFSQDZKKkwzPENxWClCKikiV1FgMSZmR3R2allgNkAifVEvQkU8TERA''@;'; put 'put ''ZVN6I1k1dGVpT1ZfP3oxSXd9LF5bVSNSL3dBQy4iYVpsZ35qLzg5fXgyfCgjKFtbXU5KVkU5W3xRL0JFPGxbcDRvbHdqUSNeVUV6IjlmIXJJKWBGXV90S01BXjxCN088X2w9OlguWF4xeHVRN3JaK040bDIpQGNpNT0ybz9XO15qNmQhclBdbTAoSzh7TX0vUS5hPz07OXdiaTVbU3FkSHVARXJv''@;'; put 'put ''YDg1UFszWTcyIS4hS3RkJlI2YkR8cmFLR0pJPVA/PihVVXs8aUlPXzpXdTh0REl5c3R3REY6cVdzezkzRltuLiZOLHwsfTx4MzxIP00+Qzx7KG8vaV0kbk12SDdZNGpDSW9XSFJyNFFwN19ARGYwW2ZaSCZxSjsrJnVZZ2NpY1grNEF3cHl0cVRbZCYhfUJEOS5IeF84NXhodl5kNnl5flNDPV82''@;'; put 'put ''QCFbckg5NWh6PTFpO2JQa0VDb0dxOH1mTCRXQT40UzpHPEpnVD5rL3FGK3cmQExlY10mNy40ektwW1chRUFsTDN4WHRSTl89dFRdVCZpb3p8ejxneHJ8JCt0MTJIdSU0XT96flEkbFt2V3doTCVRT00maGNZPjhaRTcqV1hoZW5YSERvVWxxJnBdVEVbSjt1MlEpPiQhJVpiO0twTW1oUXJLeGR5''@;'; put 'put ''Zys+bDpAcU4zLFRTay81aUlRLmE8ZzMoNFRpK1JuUUQkSEBGJWRvWClbc0lTWWheVyt1eCh5O0thN30mP1c7YGNRKVJPUiJObkVrYUVYYCx4d0JILmtYZDUhUm1oOWhXViV0KjxTWk02TmJIPGAqL3MkOi8hMUIhQDFWVkFPaV53JCY2QTAhcGNkdWpBOCVMbGAoekRPcE5+Ymk8Yi5WYmxwUUlN''@;'; put 'put ''SCxnTmw5Q1AvWTMxUG5KVSwlJU9VYUtETz5LdXAuPTtNZ0A7c1hiYlB4RmFrJXJCS1Y4U0RyQC5VPU04bUw5eWNVRjtlRnlhV3N1TSlfPF83NzpoezA7dktrNmwrRUo6TGNLRHhfWW4yU25rRU1MXz5EVHpxc1JyelVVX0c8aTsxbjdkPlA+Vl9QeTxVI303NHtWVU5mUl8rfDJZa1JLJU0uaiFa''@;'; put 'put ''MSEzQS5JR3kmOjg5ZU9xdk00YXk5OUNdWSRPWTNxTHdVVUUodTRsVTdJOj9kPVh+b29FPzQuTiVRMHt4Qm1RT0RSK1Q1TixpM30mRndgSiQjPDduVVVzO2BXI25Kd3hqZm0oOHZ6X0ldRFFdOEQ+KjY0Vn5Idjl4VkNxcm9GS2piRlZIIWtCR2gmanNuQjouT2MqSHVHVS5VcX1tKTY0dWxCTUZs''@;'; put 'put ''WmZoUyopPGZxVkRbcGxtM0VEVkl7XXJjYDcqV1dUW3pJOm1MTDZRc302MXo8amFCVHAkO1kwI1FfI2s0SlcjUl9weUZtRSZ8VlRSRHMraW1IfVFdUEMycEVeXSFxW1BqKDBwVEtmVThPfSZtYjB6WltSbS91UTN5byFNcVVPJGBLbHZCVGNiYVJ3R2RkYEprQ1tKcXJea1RJT15vPHBEUzF4TUcr''@;'; put 'put ''Z2lpNVQ3QXtZW1N2WEV0dSJpWj4kWlUpUWllKCJqcGNHaV1UR1liMihKREdjckh1RXJuKUxJUWIpQE01bkMxeUN4IXEvSCxkYDFkM0lUdm0uO29qPlJKP3NQQHZtbDBZLiE+a3xxZGJfRiRwOS5icis6L20lUUJSNXFWMTZ2QCMqbUZeYFc2KzRUVDI8ZX1tVHpuT0o4XWpiOjcvRW0sZzhYZ21X''@;'; put 'put ''YCNaWlEwQDEkYD1uejAsTjpLWUVWRjEsTlZHNlpFUVtyd21MKzBRZG4jI1U3Z3Z3e01SQDwzdnRZa2RNc3oxT3ZJUEtASklZd05eQiE6PWVIbERhXjsjL3xEdmtXVSFCfVhRNU5WSUo4YFldcmFHa3Jib0E8R3JNa3RsZ2oybEw3VlV4fD8lYnlFPShOTm17KCxfQWpiWX1GKiwlQH50b29YPzZg''@;'; put 'put ''NjZJMnE8cj4rR3hNMnN9dERbYFAsQnEhS3ZBVH48ZUl2MTBGV18+LE1SanB2Z0VFRStAKyU/VzN9ZkY9b0ZrRC42cDlpWCZ6VTNnO3soZmtAS0ksbioxUn5RR3opMjtfTzpwbWVrLmkpQksjcXRadk00ZlQjW3BaWSIuZl1Ac1ViS208NlY1WHkyPFtmMnc9aDR0JSZ7ZWJNI2d+O3BZJEkycDVf''@;'; put 'put ''SjkuYGBgKzl2dipOe2dvSlFOT3IvUGxaKyxOJVZDLjlrOSMjS1A8VDJZVC9Ie18pZz8lfDJ+RFhiK3I0Wjpxe0hvbylnPyUzR0RaPVhiJCRac1gve2taTDMvRSNtXyg1WiYscmMxfmt1LCxAdGJVdTVbMVNNdml5ai80RyFlclVNSDlTK31QZT5GeikyV0dIZiR5Il5lSitxQlYmSmEvRSx2R1dN''@;'; put 'put ''Z2RgTUshLyZwR2A2bXpOLCE8dzB6VlROI2tDXkIxNl9tR11rJiojPFFeLmomXUZXWGVmZmhdNmhjOXlaZSlLe2pmQkNLS28kb2FnPWNJQllaaG0+LGhWYSNVe21wQEUpV3ldQ3hFNVN7YyJgOG0+azN1eTQpQiNnYTxlZipaVVU4OEssSXJ0QnRIQC9AZyZQKH1OcHAhdXV+TWdWPWpIdDVbezRk''@;'; put 'put ''cU1gZDxiL21gYzp8RUgvdyZLKSFrJks/KStMY2t9fkxxMVEye25pYiRVO1pJXkR6TVo+NGosVyZVX2hUS3MvZDcsLDpgUSReKDpXUEZ9Rnk8dl1LZXhMUGlaPnFHbWk9NnVYPGBhMFR+djtGb287e2p+ezZZa0ZAL2AhbWQsNGpdeyVTK3Z2MDNGKEgkWywkZl9Cdk18aVZpR31eKHcmO28hRn1v''@;'; put 'put ''OE94cVBdIjRTWmw3STU2Pk8jVClCbk1yYWJPOk4zZUp0eixiczJOc287QT0ydXRsQGtxcFBkYSZpTT5VK0hQWi5FQHRAOENpQ356RHA9blQsXjVVZ0BMc2h2cmhvN3Z3RT1fa3VpUjx5QikjO2V0e3FMWU90X0prNE52JFozVkJRezJOLmEvMTx3M0ddLFo3fSFgOTdVREpVTklpPTl2Lk5SMltQ''@;'; put 'put ''RnFAeSpWcXNzV2BRfS8pO0tkOiNZOEBWIzRdS2sxMTxvbEZXYDRVeSE3S1NdQ15PQj9gK3M4VkliLEkxMEFMRmxrLiFncXd6QyhqJExGTGlgPGg5VkoqOXc0aSkjPlVgfCRaT1N0VGo8dHtmekg8SCs7e2ZCT1JBTysyYnc1bVpAd1srVmZqUXMrWT5uK09NKS8oLjdRc19ZUF84VkIvPWtRX3BJ''@;'; put 'put ''aDU2VjdXbk9YKjhXaDVPfl1OaVg3JUZKTG10RGhbMVpYRVtJfmxRMmspcD1OL01Pd3F6QlVSYVNlZkR1Xl5nOThva1dyKXw4Ty9ZKjg/cExAdDBpYzQ+NmxTaX1lUGl4UVZuP2p5M0sqdUBeRCZNV1EpUzlxQ0VqbV5wT0t+THg0L0IsPjh3RmhxImdaeGJoQlc7UTc4UXNydng2Vj5wNGNWXz9j''@;'; put 'put ''cUM0M1BkdFpLZ2x1V3VEYXdSMHg0NVdkTSopRFJqZyUuYUc1QnlWM25XOD1ddXB0Y3F2Z0U2dTdQIVVmeChLb3BmbDglZF5tZTltKHEwSmV+RElve3JqMl43dHJwIU0xJU48YnExJVtsImJwMzZwNDZQPEhWJGtbR2hoT2kwck9pSzVjS2lVdV5vXz90UztRP1srZ3o7VStmdEpDQzVTQnhHITwq''@;'; put 'put ''anAzPXJQIyV5V2lQKiQifUY9bVJPOCRmdG08cHZeZ2s7VTskRURlMnFsZWNuLm5MSltIKWgqWE12XjlmcmJhOkZCNFduK306KGJIVF9dNXUpLjA5RXc+QmZtIVNmaEl2RF1QO3FNKTopQkUqeCtqSldodSpJd3VgMC4uWyllTmhjMCF3UUYjclVua2BGclhyZC5VPEIyOSooXixeOU1SdncyYHBu''@;'; put 'put ''UjFEaTFtR1NhfClgUT04S2JqeW1ZN3JmUFtXKEouWDVDU144L34kY2tdcVZ6MCteRlBlJSojTD9gdjtHcHBxK08zXTJNdmYhTGo9PF9WK044P2taV0glS3dLNlBydEdSPWFJeDt6RFVnNlg1LF00b2QqL1NLPl1GXj94VEd3XjN4b3tyZTB+R0EoZllWV3JRaW00Km1OXX4+OFBKQD8xdmxRYG4l''@;'; put 'put ''ZlpwPUkiPVp9NDxSbHhwTyU7JngyIT1YXnQrU1hZLCV6eHNSUD9pL2d2XSY+N25kP1QrZSFlIiN2PiMxOyk8MjQ3dj1eYlNzbC5pSjt0UEhRdUtHUSZGW2xSPT9pOEQ/OGNYVVVdckx9PmwvW3llRDk1KmglZkN2VDtEdD5bdzdDbiZiVklBWTNxZz9XYVQ7eWEvNFVFdGhJQWZKR148OH1MIX5h''@;'; put 'put ''WWF0VTwzMy9sYlgjPyprWzZgU2c7NTJFTSlSNmNlTU57W04kM2BgT3xNRWRpc3VVVWQkQWhjXnBIITVVZDkpZGVoMG1wMzVvXV4sYlAzXU1Re0U4IjVlRGRKOEFxMVloL3k7eXgvS2w+LiZXfj5YQUArPEUmc0U3JnNWXjQiYzhPKFRGWmhhKyMsVChUakJZOUMyIipRZnk1aF1UZkAobFV1RWpz''@;'; put 'put ''QU9eSnU1YCtMcD04cE0zXUk7a0JsfXg+WHZGXVdgT3h2NGVickkocHleb3YhJXl9b0BTNl5ZIlNNNW17ImM/IWx3NTtDPlo4KnFETVgzUX4qRTJxVixTazpkMF0/Y0FJUko5Kj8oL3BJJXk1PTVPWTh6dXUoJjhbaSt1V2ZbNEl5fV0mQW1vPjI8QSF+UXBKW1YpNz42YHFkPTNeIy9pVlVgdGA3''@;'; put 'put ''L2A8YDxzNX4ifih2TGE9bj0uRWw/aXlvUTJNb0I2dnVEIjwjQjBeMnYvU3JVTyZ6djxzWlRdazxaQWEjI2ZNW0UmOjY4Yy4wMUV8WWhnJEplPWpaVF5iZkZoPFQhQmFFKDcvJTw1SDpMOzVDZDdmWzsjMWc8S1padk9aellUYGg1Xk91L2guYW9DRDFtc0xffCZGQkplK1NSPWBSM1hfPjZMb0Z8''@;'; put 'put ''dy9WajA+YVMjV0V2NDYzMko7V0NmQDFfQEVEeF5LVmptZ1koP3VEQyQ8JjxsYHRgUzg1OGkrMS5hVV1vR2cuLC93bDM+ZFV1NX52dSxlYTdFUylvWEI4aTtXLl9PRXZQXTksXT1SbERMZ1hfKnkqdjBtQWlCM0VJcFVdeThuNUVGcSY1Q3s+eVNudEQuVHlwOEVsNSZ2bVgrWV9IIX4xd28rcnde''@;'; put 'put ''RHF4VTYzalJabTAyNVUsdjNgdSZZQ1ZdSVRlTHUlN1YhTVhjV2RaNDhPUHorUSFkeEE+Ik5oaEx8a3Q9V2l1ezRIKUkodEhdey4zeU13eSJGYmhHMTxGTnMreWIsO1NCZWd6Yjh0SCMjbWZTVTM+KTIuR0xGXj1wUz5xejFtWGd0JTFzRkxHeHFHO042Ink7LGNOWnVtN1RrOHtyMClbXjcrdiwq''@;'; put 'put ''Wl4zViphKVtvbWQ4fXZ2SzJsKnZZQ3hYcW1qPjhjKjlQNFA7VH5eaWRkMlRgRkFMV00lfEFUMzJ9OUdNSnszQmBNOVJweUBvOi97YCxNfHdwSiV4VHgsSFtjaVR0Sz1mZWpmT2VmNWg+aXUrYGIsXy9LNiEzRVBhRXp5aS9JUDo+WzVic3lRXjdmfEQqNGcjQUkiNFFgd2NzLF5TdlIzOFdoc1RM''@;'; put 'put ''LlheIUgoZEcodEhsPEloJEBGYEdsdSxrVDYud0pocSlAJk90USYsPyFtW1prd3J8P2p5Wit2X31vOCtaK19STWpOVkZganlDM2QxRzR9eUk2OkBZXWImWiYoR1csPHNKamJ5YTxnaV1JaDFnaV1JfntZYjVqd1FfWnxhTm1BZSM2LEowRzptRVt5d1ZNX2BKT29aPEgsY2lpbGdZOWF1bjcpUml3''@;'; put 'put ''SVhDcHo4dyp4ZENJUS8mR2cmZDFdMFcvWmdmWGEhPXQhJG1OfTB5L04jTVExR2cvc1JJYlFpL0A9LmhEWl47I15HaUdOZFM8Tl9qb3YmKis6JHErbEpXYTxOVUZJXmZMbDpuMVYpOylDUCM1KDJRWG59V21ESm0zPEFGb2Emc0NWc29OaVpVMSVMS2pYTW0jeTJ3bThQeDt2LEtFLnk1QyhtUlFR''@;'; put 'put ''ZSQxNHR+dCtpNWYmbSNsU1B7VzdKa1FQUFtXWihddEApLjdgV3EuV2MmOjZrSzgkNW1JekxzUiRwUWNgQ0NIWmlFVG5IZTtecylpYG8vUlRLIkIyblduYXxacWdaRkoiTE4oPTIuTEZuLGRJe35JVl0+YHFOfkREXV5bbkUkO2w0Vk5xPldAXi9Dc2BufXoibHBvOGN2X0VANWc0Ti9wQXE6YmB5''@;'; put 'put ''d1ZuQ0t2OiFQT20rImtATncjMkVIWCRmMXguOkglYngwdW14Jnt5azhZKzArUnFrNj5xTG1wfEhlNVRtNn0zUkNFNy8zfVVLJStqezxmX3dbSHZYdl9NNF9VInc4L2N6e148TU89P2Y+UF91QHlpd0EsbTp2d1M8PEh5NWwkUTQ4K0FwN2dmR0ZzKXEvVEI3Xy9OTEpRWEt0OzVsaXt9dkVPUHQ/''@;'; put 'put ''OCZYO3R1amNQTG1vKzFtOWRTQ1FeeC8kUUtzez1VOGlZUTZBMGVKOEhzZ0Rxb2luWD0jPGRHOCw1TjsseVpmMTplSmB4aSFOeXNYTWE3OFM5YWFlO1tkU31jOkArLDAsQHNmbHg8IUV9I3YwJF5qTFNkLHpReVJYYyhdJHhiXmJ5QUwsZDkwWyw3bDVofmRRNkxlNnUsNXFaMnExNWMubHp3Vlgx''@;'; put 'put ''RntVbVZ6RmBHJVJ3ZXlzTnV9djt3SktULDFyMjomRTtfZF9GNiVtOGFEXlp+VUoqOixzYEpxJSV2UnE6XTddR2sucT14Xik1ek9oP2FYIW0yU3ZSUGt1MnQiWVQiOzx3YW11REYuIWAhWW1VR2d+PiZuU1I+MzxzbHBESkt9RnJPVmldQXY/a3BQPHs/Y1A2U2J6MnoqPltCPXVVIngpP28jWmJV''@;'; put 'put ''elkrV2lAUCQ+aVReXXFmU3lXJFosZU1XRGoveUImfmdRakRNM0tGfV5acyRWSSFnO09QfXkiY2p+WXJoLjMobVc5OXMxeG1jMztLX3pwNERLfl9IVWA/dHV1Mj1NOkczfVhrKktKPCheeiFrSio7JktYaSlSZz5od3tDQU8+UGtRNGlZaW19Tj0kZFQpbnReeDJbSiQ5c0wsXzJnPz9mIWojMjFZ''@;'; put 'put ''Rkw4Vk1TKX1QaHNAUGoxej51Uk57Q2cpbEREO346UlAwWHVHcXVudHJ1UGk9aFVxVWNvdVJOPmk/VzgyOXUwez9XODI3dTB7dUhocGJ7bVJkYzdVRGpGTSwsITVVKTpXfX1HeUhjMl0/eDwvUVNVL1Qub1NhLzZlO242M2dYTXJAXW51Z1hxRl9TbVA5d0hnaEh4PkJUS2RzVHUmd2UvanJ8Jjkp''@;'; put 'put ''MjhJMzlUfnl5MFBAZUtCSEI+V0VPdU9OQGZNMXpBKyZPdERpfXwyfSFkZE49dWphNkwzYy4zKChObDd5QUB9NGtfamNgInY6LGsre0wiPC5hKkdPVGhHSGAoTWFKLDgzdWdKXioxdTYkajJTQEl1XjBNO0pZeSZVVylNPDZzezBKc0UpTDVOJWA4TzRubCtpUHxOaFY/N1lMZm0wVWtAcmwrL1Z4''@;'; put 'put ''PHc7aDZlTDEsfDMzcFpyQFdOV0FPQnV1akFeRDB0ZC9Lb213QDFxVDU7WW4wdyZzRjw3YlI2TX5JMlhiNCN8YFQrPThFOCY6NCtYY1ddSTAsW1QiPkwqRElYLzRtNFB6RE9NRVBEKih3ITxrU2hbeVByVCtBZUZ3PVVsbjxpKjtlLypySDt8PnE5KWZvbWd1SzgkWFFfRX46RUVUS3hpdFg3MW53''@;'; put 'put ''Kn0kc3F2MG9fRmUoZE9NfVB1L0lYUVQpcjcye05PYFU7V0gmbDkjaGNKNWxJTD0kP3htczw5WFROPy8xdk9GPCV2Q0tlSDtYIzQmezhmS21iWiowcDVxZTxXUDc7bytSU2RiYDI9dllyWDdAcWdCOFlGekgmUz9pMDtQcFpDX1pwd180YFs8MSpDRmo/MlFXbyw3ZFFTZ1tjW2hmcUxeO299NEUv''@;'; put 'put ''ViVhK21BLF1lQiFXRUcweHk6a2ZxSnNsfUNjX2V3ciRZfXFAUl9WVF5iPWJgMlNAbUY0ZUc8UFBRWXY5L0Z7OHlLe1Ipd2UkVE5XbkxMMDhORHlqVkhneSh0ND8yLFRQZXpifDJqM2Vpe0E/X3R9WiwsRkAuVHgpbnQ5VHtULHJrRjg2Q1g1IygpdyQsbC97LlIvZ187aypbTD9lU3d9ODw6LE06''@;'; put 'put ''cXFvdVdNYFgwRXMlbSxYQXVAW3ZXey49PH01Rmpidjx7ZW57fDpsM3lZYSFSNj5vaFBGKGY4em5pM082PmkvcHlyZncwPmxnOzZsbSQ1SXMqeGglZCVaa0tUfFZdW15VO2p6QDEqTCpnPlkpTW9TNUo5bjpZJjVfdlYqWSkyOXZWcVZHSSFERi54PCUrYEtIVStyY0NDWyI4ekEwUHJJaGpJdFY0''@;'; put 'put ''dUw3Pm08dCFEamo1NUxgPTlacUxsaTxqUGpeNzEmWUlnOFJJRSt4c3JgX0d9NSNYL1t4a3JYNVpzWVFzcF9NQUt9aCNyJklgbjUyTkxtflosX1okXlt7LH1wUkkiMm46SVg0RXFIcGZYWT5jS0pxLy80JTZaN3puMjJCLHQ1OkclTjBmdFtafld5RFozR2F5RSFyYTF7Q1JDUGU6KkQsKUYqUnVi''@;'; put 'put ''W2pJS2VKKk8vOV9xZiNJRkthVm1pK31paVVVZ0s2ZWRhMHlUQ0RAeHQyc0wrKHhxcSQ8PE5lZX0odTB8M0hYR3RZLj1bKHhJdUBhSFJjUDM/Q319R2hieHg5ekZHUmMpPUx5WEc6Y0BgMXJtNyFmOnxHNi5nTUpmNU1wZ2V6QnAzcHY1SSlOaSlbOHt6eyhlVUJxPjZbc0wxYmh4WUN7WmsmYiU5''@;'; put 'put ''emJyc2Z+WyN6LnEjbHFwc2p9VCEueSJHPC4hTCp0JFRsK2tYWnNXS1J6P29HOVJqWExKa3dJMyYpImZMZUBIN0s1N0RAYW5fYn5uX2FzdlpCYz5HPDw0d2lQTjBlITRdbCldZmBeSDdnfGBQNkV0fix2R019fXlGfGElNFB0XVluYyM3SW4rKH01NFlWMCk3PDxyVFU/Yl5GIXY2MiErdH5wNz5r''@;'; put 'put ''Um9MTEN1eEV2S2BXWlg9LGBoekc3c0pnempDPjRSNHk9c3RAPH40bjVIPXIjUXdSd15lMnRedmsrITlvTH1OU0BmTnRyJV5Dcm5hU1oqYmxxKWFjd2VjIU1AazduYiwpRmdLL1MvWkt3P2heL0RlK2w2OjxTfFprcE9pSzkjVSkvdyVIOk95LjZGVlskdmIsSTEwSnFNfDF8VVMxLFtQK1ZeTENw''@;'; put 'put ''TU5OVUl7UXolTH5yVF8xWTsvVX1+ZjNqMlkuJj47QX5HXShMTlAkZFszd2k+dHQ6ImUqZmRNbDh7W0FNWD9LNmhMbDU9eVhEelphMGgzPzVdSTo1ekc0eyQrIUwiZH1YKEJkcT1YTlM5TTt0Jnk0b2ssIWwxP1pkYXdbOCZ1UCsjWTdqc31IRHF4QGlxRSJeTzYwKVp2UDBIZjFHJlhnaUdDKFNu''@;'; put 'put ''LGJJezo4OGUmbjdWajspeCYuSSFNfFAzRUYzPnU/KSQvVUohSmVkNVFpKT4rJGNbY3VqVDVjUXllJVIlUD8wZFkze21JI29YV1pyIWVII3h7aSVob0Rvb0VtZHYkLjJ5NkA9WFpYeipSUXh8IyMuKSFRfHg+cFE0PiEuWihidz5MQjVIbjhrSVkxVUlYUC5geXgrdFpJait2OlVHenEvd3Q7JUZb''@;'; put 'put ''S3hpYitTZXpUXmt6O3U9YmpENmdkRHFMRE47dHJ3SEVCJmAvfGYufH1rOSFSdTNwUiNjKnRqT1lLTTZvcFhgS1ohTDFPX3BaPFQkUmNDXi9GXlV2a2pRN1hEei8zM3xEKFlXaSlQK2QyZFtIP09ZVSZEMEl8a3pmT3dmP0gjJC43cGhCaz5jJmt4VCw6Wj9XTUsld1V6IWw5QFV2azV4fCZTMDc+''@;'; put 'put ''W1cmM1o4cUNKJUVBYF9pMjlQVnJ+fHhsMjlxZmk8fCNVSmokYEVTc3k7QG8/eF4wIXo2fnFLVyl1Tm16IXo2UFZddWF8PXR+cXVTW0RaJmFbWSowZHRYfDBRITZ7VytQN19jaU5WdyErazw9RGFKa2UzcDtVMzx3cjovWD4zVUxsKi9uPCUueG4zbipsQmRlSU18RHgqZjE1S2I6WUlWZkArTipz''@;'; put 'put ''PFpLWSVNcmwuUT1VOSNoVFIjbEtOM3RCTGFoaGNqZkBaMlhdSi5XSlksWiw3cGY/IzteSFhqez8kbVgycXkmZGssTWR8WiUrNT4rMDViZFgmNVY2bTp7aUp3RzpobzpZIjNHPV8/Zk1TTW5NM0BETWB9UVRgYmRyaC4+Vl1jT1Z6Uk5QKGd9M2s0JUQ2RSJYSGxANCUuN3A9KnJzLGAkK21QeGZP''@;'; put 'put ''Nn5wKEIsa2thOHV1QlFEeTtXT0F6PkwxPz9DYDZKNiUrYnt+YGpRZXIyTVI6RHo/ST5AXXs0KUwuTXtfb0hbR21CVV0/fEM7eXdUZVNIdUtudy4zMzJHXyhTMjJHZ2Y3cS9ifTpTKmBhez0sRyUhc1h+UTcmRWFPWV1gNnU/UGh5RXAmMFQ7N3ZKX2hAKkUpZkZyZmlwQGlGJDNdT24yek5HcnIz''@;'; put 'put ''NXEmbyM5KDU4M315Ok1MYjsxV10+W3ssYStoXi4kY15oW3E8JS4/dGdAanA8aileT3pOKzN1W0NZRUorPy5vdHxdWUdYLkZHN0xQSjluYlhdMntUKlVBLE19dWpIfnRRTWAlSWw8SS52PTgkPFVkZlY4ZXVacVdlNjR0SnBHMkxvLjRveX5lJDRAUXokY1U7fDY7P3RtaWh5Mzt9XX5KayV2a1Rk''@;'; put 'put ''UCg5V1EvU1IlR11XVHp4RkxEJSFhdHF0JUdya28mQGptKWc3Si5QWTV7VE44JEc6QE1qYWVnS25eJDJUPFBqXSx9eWMhQDFVVmRyVTJ4ajs8Zm1NKVIjbTMoW2EkJSttcGg8NDpNYSR0SDFpUn4vc3k7L2RMaHVBLC8lcio5Wj05NEp5bStwaSQ4I1F6Xj0wMz1jfDxKKHVrMnVkTiZYbUBqK31D''@;'; put 'put ''bHF+NEpoRXI2dWMmZ09nemwyMUxSLkBiSD0iTCtxdTwlbkQwMXNdKyQvcyUjXSY4JGQiUktVUX15UlRLL1hYVXhdUkZFV2VwRWF+KWkpfXZmWGhDNUE8OEYlNT9nI0R7R3dSQSxGaUZ4NHZ5RXRHd1hOO24sckwueWRYQCw4aSQmZlpSSUpkWnIvOWZ0Kz92RltVdjNtMj4uMVhiO3MmdDhrZnpU''@;'; put 'put ''QCo7ZFt9d3srZlVoKWxeOT5hcmc9Syk6WktLJkgucmNoIlZPWjtQPFM/Y3k7W0tmJEJ6YTB9dlllPltdVExVZiloZl1IUD9yeipNYDY/SVc0a31qIz9lLF5RQjc6Ui53bE1mIlZRenRaem1ZNChdXl9GUVBwRX5sYm0rI28vV2UjSzgwTHN5T2JmaiM4aUNLfiUoeTM2ZDJybHF+X1F6L24weztz''@;'; put 'put ''ejkhWXVlTmdGLitZbSsvZkhhNUI7TilkN1d7fDZaM2w8Z2ZxdCZdI0lEWkp1Y3JBTTdpL2YjOnk/UltCMlY9ZWZNPX5aIzJKRG1YKGUhZ1NfMUQmPXFwQXtROn1SMCJoR0JANE10b2E0VFJyQklGLn4/QUprWVdQZGNKVyY7aDlJTFtpWSY1STVSanlHclhGW0tQX2I+OGwqI35iYD5sPlcsd1Z3''@;'; put 'put ''JFszVDFPRmdOOyoxZztTLjFbVj5bXjx9PmZHYysmVDZWZ1Y+WzdVeiwlWDMsI0V2Z3RqI1ZvZXVeb29KKD10OmNWOy5vJltjPlVOKGx2eEt8OXpqYiRJLjFgTlgmfDwzNTMzUz45NC4oS0tsPTczakB9aC9mYiVRNSQvQkgydis5ITREU11nLjElKW4qVzRVayhmZVNWOkk3dzJ+WmE7ZXl4ZyN3''@;'; put 'put ''UXYrOShKaGVAMGxwYSgsbFBgc0VgVndpV2RPU3xtfT9qYX16MnAiTnssW2h6YldVI1d1dHU2PFZAanFMKld9OldddkcpUlRGQmJYXSZpem81ZG1lIStxSC55fGdASmp6e1ptJEFvIWglWlV4PH0uNWwoNHdhTWBLUWx2WUUzMEhuOCZLS2xqY3BWI1olW2QqKypEUChfIS9sNTxmRCV9bWFNMXdw''@;'; put 'put ''OS81LzwiSXt5c0tMV0ZMSkxgb2dyMT1Db0gwT2hUSWJWZi9bZzdKdzMwWXE0em9iYmd4W1ZXLiFySVlTdzQwVHtPT2ZOZk5Sdj9mfGg/PENtdVJKNVo6N1pCdG4wRzZjSUxCMGozVks8R24oJiZ5KSozVjVYUz0zIXRFSyFpckhHMCRZPDFOYiNPK2w1L1lYaUE7UjZMeioiMXRmQjRFQFs6SzF1''@;'; put 'put ''aSM0ejQwYClGNl84YmJTKyhQWG5SK3lNYy5XL3JVOTd3I2dyUCNaOUdLIkJdcjhQdFlxWV9pejYsbTQjeloxPFVQNyFfdzsrPGk0Sz9jeTNtZU5oOHQvUndsP3d5cTA7YGdTK2U2WitTYDh2Wz9pL0t4ZHhWem1HZFoqe0w1ZFNKdU4kSyJTaHNFPm02ZVZOL30iSzlvclZSWiVkUFh4aTc3R3l7''@;'; put 'put ''ajcwSCRPaExrcSt1YlJUXVg4OmFWRDksTkwpLDF+QEhsaSk9VjYpOixDXUJgSUw7XjFmQXVDeGZhXUgicl93RGI3cEUxIyMidWpETEtIKyhacVZyQmIuXXl+WyRZKVpXSCsxRytROl9tZDZWaDpCO01WUXNLREpiY0dHPnlJOl5xUnglW096T3ojcW14cyZWSFo8X20yQnJvM1giLlRQLCk0Z21H''@;'; put 'put ''P2A4Kys8OVpfPV5aSSozdGZqJS82a2orUD0hcVlRU0huUzoxJHBkZH5xY09YSU9JL3IlIWdsUiE9KEBLTHdQVD9sTWRVO2RwJi5VZEBpKzRfVlBeYmJtRnczMDEkWzdgLyRIYUd4RmthR1VJImBJS1dVNGIsW3YmLGs2KVBCU0ZAJUJoKHA8WFV4RERXVUhTYFM/fWBOYSRedC9bVjx4L21gZ2VJ''@;'; put 'put ''WXFCYEhvJTpUT04sT316U2RLfTZHJWNxNDJYWGQlL0VBIyhSTkMie0UxUDduRmAqQlU5dnNVQW8iW2hnITl0dEwvYS9JPWljRVFBQUFBQUFBZ0FBQV5VNCw+d0s6NUhMTUx0MkkpMmAxdGpMe2l2VWYoYURZLGIiNGQvKXlObjIoekdvaFhkSCttIkkxfnJrV0piSTM6U0BEamBZM0M0c19LN1s7''@;'; put 'put ''TCR6bzBbMDEmQGgpMn4oWHp1IVtDM3pIdEUscCpiXldLU0xZNipuYGUqejJ3SmhzQkZ3NDZJIVQhPn1LRTRUZWgzJmxDLjE8TCZedzR6N2hZNUUseVgxPHxtcH1EQzhwMHsvOWtpcmk3QTxAOEAxXiU2VnsxdjZ7XmgzSXwjaDB7RiFSaitgOCRpJmJVP0AvQ2J2YDgjU1lUJV5Ba101YF1aUTVL''@;'; put 'put ''OFRge2lYLzEyJUxsJDJqSl10SmBzPkVsQCNaRjZlbmZFLExYZ0N4ZmYpb2tRJSt3VSEmU0VVWDxtTXtmOF4sWjRoUUhUVGswZ2RCJXY6c3d9S1ErazdqREMmOWxwKEVnK0ZFZkBRRGNYaTlqRHl6aVQvdH13V3Q1bW8menkjJjIlTlQiJnIlOXYjVzp0U2V4W3w6TWNaTGNvMG80d2hROjchQUZn''@;'; put 'put ''KkxYazZsQzRTWUNGV1ZSWCNLOyVMY1VvIXF0T2tkTWRGQ10kXUU2czVbTVpTZjUxUEpabT81KjB0Ujk8W0YxKkA8RHJtNVVxZjVxc3Q1LGRdcmhjP0JobGtOalh7ejE8fSllQjYhfi9hd312XnldSmxufkgyc1o1TlBSO2tmKmY2b1NUPHkye3tFb2A8JlskRTRKUD9XNi5MW0RHTnxGMz1AOS8w''@;'; put 'put ''dCpDJXoqYilOMEU7KUl5PWppX0okQnUwS2l2KERicDU3ZD08QkRRV3k3YVUmZyplSHgiWFIjWUNaaSNsQjIyNUUjfEoqUyU7NywxfEosLDpzUHgian5FRWs6UjwwO3Mwb3FxWXhdMGpnaE51YiFSKk5IaUAxemszJW9CQktCZUs/YiwyVFduMXVjYEIhfiVGKGNPXWVeZ3o4IzZxZTFQREQqVyRo''@;'; put 'put ''VlB5dDd8MH1DaS8rdTpfQX56KTwmazcmI09UKlM1OkBmMDY3b1k1KTNGcV1JUC5COzNeXW5dQXM1O3QwcExQeWZlJWchPTZJLClheWhaeVN1fnE5OXhgJjtUclNZWjs1WVJ9MmdVRFQ1L2ZTeip4Ums6L3JuaFI4PFghQDwlbHBUeHJLdFlXP1hyWyxkfWV+NTJARVVhWDl+YFhrfVJHWVdwNDNN''@;'; put 'put ''ZS9BeShfJmlDRU4ucTEsa3ByRWo2Mzl+ZW5UcTlUYFdpb3wxO2oiXllJfl9rMDJrNygyTWlKV2ltTV5DRjBLcm5EQFgqIWt2Y21oYTtHfHN4KnBrbyx2YXheI1s0Y3JGTFZTV080N2M+YmNiMl8md1dQOkYjYyJtN1hkeks5ZUsvN3VQJEdFTlBYQDpRSXAoV1VsQjhnITpTYXQrYlB7NDhtR2pX''@;'; put 'put ''Q2xCODBlQElHPHUzSHg5ME9fNl48Ok06KypRMTBWX1FASmd7N0pYN2Z4NX5UQ1tMRiU6SXcoZ09lTyQxKEpJRX5hY3RmKDQ3Ok1IV0w1QGIwW2QqXmpfLGZtMlJEXVksKVhfNUlRQXg0QE57fkMmNkkoQ2wjNHlpNlpSISIhPExENig3WDlmPWtLRjt1L2R7Mj05YCIlKjlYal5qejFuL24scz18''@;'; put 'put ''JWU2NjsqaDBdKyt3dU0ja3Q9TCRFTkpLWlk2a1QvbmwvdyFBb3B9WzgkTHpyYTZlL0hVdHJgJkh3L0VKLFE/eSFLYEh7N1t7aFVfQUFEO3U1YVtMRTU4LDREJkVPTmBfUSY3dyIuZDo+KmFhZWZ2VSg1bCUoMWsqe1JyLEIrWld2Q2wvQjojdFJwVX5NT0orIWhpNF5lYCYhbVFoPT9IVHREYXRF''@;'; put 'put ''U2whdUY6a3hpNXJiV1FHSkZkNzssaTlMZ0hrOnpWeXx7UFIheEtSOmF3WXsrWEo/TUQ4YTxeI31eRjpSIX0yW2gwaUg/c2Z2PStIP1Z1WihJSlZKP0IjSiwpT3thUG9YT1NPKWIqSk1hQz83dnRPT0BmYkx9KXRzd0IxL0d1VXNJZXx8dk9aRihgfnlgOj8wUGFIPlkmcDxdWkVJcXJoW3M1eFY8''@;'; put 'put ''MH1oeypbQU9ZMmx3V3RfZDkzXlRUeDEjNE16KnFrcWRJZURpcGlefTc4IWVqVlJgVmh5UFlRO1pmQXc7W0dDdWRPKmtoLi9WXUY8cUNCNXBrSihoPV5KKzVXI2lGPy8lJD5CUC5hek17TEhefCx7e3xQdXNNL2omNkp6WW8sfCx3fSRCMWFJeTxdSDVhejRoMSVZR2UremBqdzgmN0BFcE92K0Rs''@;'; put 'put ''KiM1LD1nMTxgPU12LCgvUFJFaDwhQkVRPTdAeHdLbD8yWTRwTiNlNTttenZ5JEF1ZVExXXEvWW9gKjpWNG4pW15SWiU5TnImNFhYcHBWNylFITg8bmhsXyJIUnBUJFNSYEdLUFtKbGcqfW0oV1guISkmWFQuN3ZtUkVMaGBHWDVqUjJjdklDbXluUkxHeT8jY2ZNRW1UfS5zO2MjcF1zRiN3YXd8''@;'; put 'put ''JCJaKEt0IzREKkooTj1ed3MlVkc2cjZacFVkP1NNOF0+aEdXS2xXYHhxXz1YLz4+bWdUISZgdiU9fkJ8XWYqTDsjV0xERno/KnFaWSsmTXtZWiYubF9YUHpjQylJYmt6TFJWR1tELG5Zb2NeIz8rMHo8WyNYem5RWENGKShvUFVNSWlGPTtKTiw6bnpxcz18dzVFSEwuVzJwJElLbWUqaTlOWWNF''@;'; put 'put ''XnIheWApN05ZY249RWkpYUwsfUNQTjkubWpDfUdDIzVYcHZ+bTtmSzovMixDWl4iQVZNYTVmR2drVSx5TEYoUEFBQEciWlslbDVMTzxXWVd4ZyJWeXhIJn0qIj9wM1pBaTd8aWlhcV9ZJUhRI1Qidyt8TytTclY2WVNUVUU1T1UxPSMjOz52RXdCTyFkS29kPXBVN2A9eCNKPjNtYVclLEgsXzw7''@;'; put 'put ''M1VGNkNbUVohOUo5dDU8UWAjN1t1NnNeJk0uNEN7eDNKNld5aSNXMlVhUSJHYmJqP1pQVCg8flBbfkVPQCJsM1NDLzhFfmxIbTMjbSFXUyIkZFh1RSp4KzU1a1EyQEl9JiU1TkR4bm1RRURWe3NTZXJ8VTsmIVdMR249aG1tekVTRXJGdm55ditzS1tAWTRhKEokYnI/JWdfQ1cpMF9bRlYuTE9n''@;'; put 'put ''Kl12ZVhSQTg/NjFGdHZQd3c/PVA7VXFPKlRUXXw8ZDJOW2I5JF8sTldrZ2dRMG42IkU5biFKIlhKRz5PR3NzZj4rc3pIXnUyKzJMfXBnU08uWUB+PkZ5RnBDVjojeylXXSVdPCh7KzVaXzJOIy9Bb3BgfSFsPnlaNzg/PVA5eH1jJG1BNihxM2xyWWorJk9DJVhNfCpGcVJxZiF9d1NqO30jWUxI''@;'; put 'put ''NiVIIW5GWUl3LEU2RzVGYGJ6Oy8haSFNdGlAZi92OXs+b0UkK0s1WXpHb0EraUQ/LzBZfEdHMmBeZntkWF80OlNsZXVDb3BtOE1JO0kwQi5yRDhLfmU0fWgxTH5VfGRIJWhOYHtVXylWM3I4MWx8b2c6ZTxXMm9hQiRhS3MmOHQ7WD0lRDtLLltlLiRkJmdaa19GaE9pO0twTCxwI35yfD9CXyNy''@;'; put 'put ''JT51MSI0TUJyVWA+d2RNSVoiWnZpUz5YQiE8PXNTaTxGdyZsJDJGUElZX1lMPCZHYHkuRzE9ITEiNChDbms6dUBpPj9xWjZOQm1fQG0pd1kwOG47QippODs4cjx8eSVEUUA9dHAkM3UzRVRbOGBfXll7eVp1L24zZ3tMJmZ6eHM5b3Apajk+aW5edjM3dj9HZ2EseXs+JnIsM1RdUVFWN3piPiE0''@;'; put 'put ''Y21gcjtvQj8lWWBFQWtqWDB7aCxteSpQPCo5Y3F9Ty9dQTd9RVFmbDNOcW88e1hlYXhlRi9JJFJIVSRrP3hKYHAzMSRYOTlfJCp8Vm80LD4kS0g8WFBPYz9FeH1vVHgxSjNXNWg4L2Z7TlEveHQ4SlAhIyE5XT5ROzM+VCM7MD59R3NLMzRIL2VsLk9WNHFmYCN4Rm4lYF4xeF1aKXNNQmokI0xZ''@;'; put 'put ''T3hFfG45OW4lKDl6e0U8JiVic1RGIS4qL2YvSHpZYWMvaCgwP1F2TVEsJWwoYzgxUkVoenIhLGJ0Tz1UeXZITjAjSWlZNCUydzpVNCEzL1UsV0x0K01AR31IK31acUxrNTE8M2tMNkNrfH1Xdkl6Om0vKDZwcWNjUXBeZW5pemp1JGNFQkY/cDRjb18oYX59Z1Zyblc1SzchOXAoaj8oZ1tbYkku''@;'; put 'put ''IjBFdTNDez8jfkZiS3h9WTkyZkZ5dGNFP3xkKGEkRU0xcl1eRlcmZXkrcWlofXtpfCl0PmpjSlR9OX19V1lyfWkwNkdoKnx2Ukl4LGIiX0Z9LlNLTV8sdyxDcjoxRHAqPEwmVWxsL3g8NjdHL11QLG9DeXtlQkc+bz4pZ1YodmhBY0tEcDhDVE8/fTAqcjBebTY7MUozSUQlUjRAV1pyY0N6KHh5''@;'; put 'put ''Pi5uMjdyYFpnTSlNWmByLzZ6OmRbMzo6Pk9KNFQzRSVeQ2tBXWtsJl8xPzFjMVZeZXdOSH15S0hJdi9Ga1QqVyhPKSYkcV5SXllSdk9jbCVlRSgyZjs2fkZoRW1xM181VkhybGhsJHdwfkArNCxEZ1lsT0klUSlIOHJyVHY5STJmbWlhK3xpP2RfLHRJJWolaj8hRHE3Oix6X10zPFUyQFs9clFB''@;'; put 'put ''R01PMyElPW1sI0JGQ05HVjB+QUA5fSpLPEZBNFUyYW8zPCVlUHRhRVV8QTx3Z3NmeDNCR247JF9FZVQxK1JNMTVKa0NsJEQ7QTcyJjBlPk9bIXBqKWw7fSV2N1cqWmFYQD5jW35uaXNuTypPUzNxY1ckPyN2aUYxdlhMcCZwdG19YSwjSis0MEg6eGVVKWVmWXVye2psejh6JHxsUWpFIjxQOXw7''@;'; put 'put ''bGVvQXBiI09eKGV4JXlFZVRoV21sVCldNTVGcz5SMComLzFqakd4UjNibWNuYlVEWVhGbyk2S31nVVhwU0Q6XVpDPDklXiUsfSFYVDAhU1V8WU8yTVIlckVHP1M5Si9LfXVCdF01a2x+Wz1DeUcjZ0Y2b0JBOiF2YGt4OzVwOF4xZFFJaFRHVT1MWmoubSRUYV8/T1tSRWQ8ang4STcleFkqQXlI''@;'; put 'put ''N0F5aH4yQkkyI3FwV1EycFA6N090c0xTNWZRPjZGLkJDeTw3cj5KUSUuZV9iKyJvbkpEREY9dXdhN0ZVYTJOM2A1OEAyZkppbDtsKmdvVXEjdCtbVWVAPjxocXA5a0xBLENNNG5WZ2YmW0xdWi5WT2ltQUNPIjR2U1c4LHArPThHbXtdelBZQmpFLy4hciIxaCkhWHh7NUtnMGJ9TzpncnQxTmVJ''@;'; put 'put ''bzBfWmQsJndqNn5nPVklfCUxcUsrIU9LckdMayE/XnRBRWRnO19wO3V8ImZ1WCxkQCEkYWJEfkxRNH5uenpIMGA2eyFfUV44Y1ZtSipQVClfP1l8dUBYKzYwVT9rNVhKYVl2UTpGWDNzX1twbzZuVWIqcDd1UTRRZD1VdCJtSmsieFZtTTcrUjA1UkhQU31qbS58XUVDWlA+NS98OEk9ZkU2PWxC''@;'; put 'put ''TmE+YkVfYTZaKFlNW3I8JHAxUl5FX2tlNlZyaTErNXAsdFImfCVNNU0mMVtuRENwJiQ/TG98LyYxMVM9SEhHJG0zPlpxZUQ1S3hEI0tTPG09YnJCeCJXPDV8L2h0Ry8iJkBFaE96fmA0RERrWnZXZnpeXlM9ZF4re0lFRFJJPT1yRHssaF15Lnt5YSNFX2o9OkN+Z0hBP25nP1dwU3Zue0BsPH10''@;'; put 'put ''THtiMWZIazRPXX1WUnw3ajBrLmYqaUJvNF8yN2p5ckxjXy41dDluU3JVNDErSX14Vkt3NUZoTSRwOX1WVEBpW2hGRndhXUAzUEouWmRrVTY0NHQ/dFhsa2pSOD9vKmRCUDZLSDgmQ3BuZChITGprajZvTkdYWWM2bSVsX2g5OXNVIitjR0Q6QEYxdTAoYjFoVns4QzhbOVZaT2FFZGJhcy5CKXZn''@;'; put 'put ''TCRhLzo+M15UI0g0MHp8ZS8yNGt5OGYjKUlPUTF4bD4zJDQ5SmdeLDUhMkApbWhmcEwrZ2E7bUclTnJdI3ciR3phSmQ7KkBKdjg1N1gkdmImSWc2WE9nVSt3Yks7UjNJbF1pRGQhJCVQRTQqSWd4WW5IZ09AIVBpPXx6QlAkd0BHfGZgOGt9WCFiMipmdmx3N0l0O1tBIWtIIXM2ZD91SXRHRERI''@;'; put 'put ''Zl1zVG0wcW82dnE7SjlYbXdGUTo0dFFvdXtaK0xWNkMsU041T2lRd2IrM28jY3A1ZVsmZyU2TCo2TG80dm1mcygrIUVwOj0hNUd5TnspKWFdVlF2SEBncE1iXU11eXlYQnFkfG49dHtPTj56Z2dmIyJXNmZpLmpHUiF7WyQkMFUzZGpLX3N6bmJ+R1JHJltSSy90fCpCa0M2RnwqVSFDI3hLKD9T''@;'; put 'put ''Q1s2SSVKJV0ieHRaaUNXYEchIThJTlJ2dlR8QkQvMGtmYCpAYUkpNXEvTExAXnhwMVhVX0JkWmk3Zm80Njd4Il02W0dnY0BERVozZkM/e1MkUUQ1M1o8NWZuZkRnLiNKRzJsKU1uQF4+I3U5KUZeYmNdeyJ3K0tpJDVfZV10XzUsYH56WkA7YW9KNXFnXkAwJUw3eWd6Z2MsW0pyK2c5b09UQlhp''@;'; put 'put ''RnpdNHAxTjZ6TCNad2Q+Pzc8JEJLaS9+UGI3P3UuWzhucU8+LDxLOUIsKTE+R2ZxbTsuLztyYkt9JnZudUY7bkBaci8yTCpPWnheanp2VEkqcXFERGdMciJOSyUpMmBCMmVUYSRAT0tedWpddyx7TjhucihAey9UNF1ROl1vPHltdHZRdmw5SFM3P0VoVykyKy5xNj1dWmI7RHpdZkQ3SkdbeDRo''@;'; put 'put ''PzE3RDAuQ0EkcS5UKml7KG0vZzJCdGZuSjJVTTx+fVdaRCgrajI+eGFZL1F1c2U5YyJqVTIoZl4/JXVPYzh8MixtK2tVPFFoSlZLXU9WZUQ3dXs5SEJNQzsmfGdhLFpoWUFheGh3RDh0Wk5lbCxrTWwvNyJnWENTUl90NHldTGR9bHN6P0l3aC86STkpe1RsWXMhRiksUTtKbFVRSkpiTnd9ITJr''@;'; put 'put ''aS4vMHkiJWszK3J1YEg7Mnc6OmxDfV5ZSCx8MnM0Ynk9WmBzJFtEc15WSUFpdH1tQTU6NVRiSFM4RjhmJjxGbX1XRGsyKkNqa1lVWHNZRnhGVVBXLDJGLmRWUGljWVI1e1kuS24iJmpRJkEzKWtgdytrREJXe0szcjJFKDpCaFhxaWBKPnoiS2FFVUgyPyJ5LExSYHlmez86W1lzWU5bQDd2QWR4''@;'; put 'put ''MExYInVIKF9KQ2J5ITBgWnhKOmBRS2p9UStndXhFdFJ6LzpJNXVgT0k4bzlVRUMsUkBxZFsiS3JZSD1zQnVqQ30iQW1MLHA+SH5WImxRaGJQfTQhI3wxNj1xUHRTP3syPSVYTVBuKVhVKGNPU0ldNm9ofUYsTWxKXSo/Iz0sdFt3SmNvYDF1fTUsYVtwWFdqRG9tckZKUTYxbmQ/Ol9AOl4yZGlb''@;'; put 'put ''KD4ranBxfC8zOV5saWRULFkkSSQ/S2BXby58Rj49eEtUZ1lWNGdxRyV8cCFgb1hWeSEiQXsjMmV5fmRNdCh9bGNWWjZKIyVDNSZtczI4fUA0N0JKXVJpTHY8JGZLamEwWD44fTJlVGxdOkkpMHVWUWc8MEp3V0lIcXEjSiN+P09pZjRZMjB4aE9zRT05NWs0VGV3Nyk2NVdAIyMlW3EvZFdNSWhD''@;'; put 'put ''S2ZhaU9XNi5FWGQ2cTJ0allnYTdTY0tjLE9aU1dkQkApLDhmLkwoPEYxMGsqNngsVEckPzY3Yn1DTCZ9UXd6LzwjWjpAbVNCLHxRXVpGeV9jP089ZGY2PltTSzBvQUFORSI+cDEmdzJ9ImwqbSgwYXNaRVdoNl0/clJ0JTRPTiFbfHEpbEJNZUo0LissJk08O3dEJHgiRSpPLzUrPFFsYUZBZG0w''@;'; put 'put ''P1lSXXQoMXdZeHd8Lndie298PFs+dE5RWHcjNj9CIkldJks6Nmt7UlJBTFghWihpSG59UGFObDJXI1hAbit4SjhDKk1FTz40ZzdiKV02e2Y0d0t8OEBgNCR5LCRDNyFbWiM4biI5V3RWUERTPE5TU2owI3F1T00hTElAVmB5SHJbJExLelhRTH5WNTImTDM2Lzd9UCpHUF5FOmwlfmcuLiNFL0hj''@;'; put 'put ''OmtgWzBAd1JSQjRObDkxb1Q+e0xHWExASTd4aW5UO2NbIyIzVD5KeGZGbEhpU0ovYFteTDkiV2JASmtNVk04NnhzYDYxIVlabV8/fnY8ayN2fVZGYm9BMHVrSmBRZWxDU3gvUyxdb2JUUWRVZiowMls9ZldQWVdlNGBOWnQ4UktIWChqNzF2PlBHMmh1b215PHBDSTMrem1MPUM/T0tNaFVKMXco''@;'; put 'put ''S3xxUHl5X3wxUWpHT1oyYSpxfVtsX3RFMGRrTDU3Xlc5ZGZZNE57VnZwSDZuVj4mXUBuMiMpL01aa1ouWCs+NCZIPlgsQ19AVU5Ib1JbZV1oI2s3MkFkMCRmNj0oOX5dLkxgeyFIOCM8e29qWlBbVzk8Oy42KFdvcj51X0podHNGPFZ0ZlVqWG1kRXJZJHcuX2sxfHh3QnhsOlJHVldeWGRZKmw1''@;'; put 'put ''Y2F+ei52cE9yfE8re05yIlgqTFU7biNaRDcvL25mc0dGUmhWYHN9aFIzR0Z6QkohTGErRmlBdUE+cC48RztjJEkzbFdQdmx+KkAjUCp6JDIueTJTbjRNeFlkRHcxJEA2REJ6S0tBMilhe0gzd1orZWpiMGZSQCQpM11qVSZzYkJrcmNncjZ9NipvRTE/QSM3YlMuR3Q/czFMWWo/eikvWkFzfWA7''@;'; put 'put ''KmRHX1M/ciMlcWlwOTdgalJiUEJDTDU6ZkNHa20kako/Z1VJNWR2bVErbjo4R31xZCojK3pkUndLMG0pZjdiKSoweH5WViFle1EuIVh5fnlaMiYhYnFLZWtRREl7K1BXQFtlPzomeTBGXiwlejZPYW9tOCxgZX58cndOUCVGdS9LdmIxSjdHXTFSOCNBO1kwd2hMWD12Y0t3aD1jc0I+RU8pTlFO''@;'; put 'put ''KF9eTnA6S01EYUk3UmArdzg/YztHd0Uqb0U3XTR3bjF4VzFla2ZgJDQ1dz4hQUNldW1fbk1kc0cvX2lQd1RmODcqWjJQbSJ+NmFofCkjZUx0XUpbLyJeXVBrclckaW5ua19DdGsvPURkX0dbIlt4bDNJeEsxOmtnSCNwNUB3WWd6RT1KMEU+PF9FNl8sXy9qOGZOU3xtSmhRVGxiWEd2RUhHT2V5''@;'; put 'put ''YD4wSC9aNDY0b0g2NGlASS95LCRHbm5NTkg8VTphNmNhVXppKkk+Sy4qIUl9NEgvPUh3PlpGInQmdT1TUERPbjE4UEY9L2A1T2tWTTt2UEcpd2h+aiFfSEBzXzYxT3xbSExLdn5EdiYyIl8iY1FxfDlXSH1EflZIY3l8MFtOVVFjdTJbIlk+QEpZeEI/bEY+LnBuWUkment8P0UheHtAeGdtNlMx''@;'; put 'put ''YDFiIjVDRXFHaGFkJShXazVrVld2TkpuelVyXzc9MFhOWzEyaSI/aj9+KlhjT0t5VnckKHwkTU1bUUlnRVMkdjB7aF5ALkxAYUdFdXI6OTIqZjk9KXF0OFMmY3dOdXgzIntReGFmRmArVjQiWUxQM2l8Vy5OTyl6LlBreE5Fa09RUzRUS0w3XjVjOjshYC9xSGRLbHd5NSI+UjE+RTUobytxeDV5''@;'; put 'put ''QHZ7eTYxQlBoTUF1YjZAPnIhWiliSXRHRTB6VXY5UUopUUt7cVZsZ2JeMiYhKW1BIVRWd0hKMFl9IX1DJD5VMjdwVXdYYytkRVVDa0RlOVdMP0BSP3RuPihYJC5sRk5PLHtza2U1ImsvRjVsJHUmR25CMWpUdnFfODIlRV86YURISys8IT9WQ3tqWDNAITxiWGhWOHJmQXp+N35DKl92eCVteDpn''@;'; put 'put ''RHo1ImZRc0JlZGlrXlEsM11NMGE2VGNHRSVzU2ttN0h4Ry85W1VNfjVyUDUkeHVlTUVEPDopXVp2Mzped2BoL0UwL2g3QU9vJGM0NUh5aWtxMGF5WipCX1FQOV5xeTg3K01VWWtATStCMVV+eF1XUWxYXk96cFR8LHR5cDZaU2NjQVNzUlA/Ki47Mj5xIlhybFJPQkl1RHxOX00sOF0vM1ZUNUgv''@;'; put 'put ''Nm5qeyw3OTlsQ1gwdndJTzpHUUtROylSWzVdRl5LMFBXOHk0VmVtRlE+MXp2SmVKbWd7Omw5QlQ+RXRCZnJ9KHlAUEIlWWRsVSliL0w7M1o9QC50PSw2dEswdm9+LEsqZzFkTTxfXT9PXitCM3dCUCpbJCJDdDVyKXdjZ0xpWmxAbEpIa2AvZmA0LEk/LGVBKiV6OjdUQk9rb0lWQiVwSlVwLndi''@;'; put 'put ''b0Y6YXRYZmtQLjtvdDVHPHl6XSUiW0ZDPnV0WnBXdkwsUUFWKyY+eEs9V0ZEe0kiPUR8ZX0iWkNdIjBuXV1bJkI1Kn4rU1Blb0R3aC94b202dyVvTDY7Xm8mInhaRCpkPklINGZoTmteInxUcm5ySmkwJFYoelpRN2led2VGV0pnMFtrXjdtUDVUfXU2TmF5blhTKTZkcztUeiR+aE1ZaylsdXJo''@;'; put 'put ''USslOSFRN2M/MGdUKWd8ZDFDd3NGdiJEZ0dMQUsxPklMbTEuKSI/cURrU1g6NlcxITdOL2MvXmMhfXtaNFV0OTlkdzdEbk43SCVRJkF+UlM+W1N1OVpKMXBSNXpGYlA7QHt7eUpXOFtqaEo+Nnp9ZjFuQUsmPHckVmFFaixvaTxnbTAwPkpfdzpHKDJffUtQSyh8Yyl0P0kkL2xtZit7fEUqO3gi''@;'; put 'put ''dVl2YCNvfWFxOVRCXnhhRU18cWopR0QyVF55IVkqTSxVWVc1cSF6PGtLIm8vRjhqZ1BGISZ3QDl7JS9hUD5zW2NKKTteNE5MYDY+SHJZcHZpR2xnK0c7RX4qO1d4MT4wVCNWbmkpO3tMenZMIXlPZSRqKDAjXiorekFaflFfMytMT3k1OV51bFB2LG86T3JJbj9kbDxpY1p6Ul9bUE4lSGR3QCpN''@;'; put 'put ''QzJUTTl9XWJPZk9VVEAuJi9uN2NtVjB6Vzt5fVpacW44K2RldUx+OTc4P0QuI1E0XT9JTTE8MylGXyooMjlnRXIlLCRmXWtgYTtJTU0iV19iI3Jvcl8qSltLYUtGSntKUUw8Qnl1SntGKkU+KGBDRXcqZ2BxSlBHSkNjcnwuLF9wP3NIK11QKmZ6ZlIwLiUhVTs+YyVHNXxoLHg2VCFwSmhXSyY0''@;'; put 'put ''YWpncmNbeGIvdnBzPz1+emFsMEhHSTxOa1A9S09vQl5Ce1Nsd3s+Wy9IdnZucCQuTmomLFNvZ2Zpby9YRjlvWkNLTEdsT2xbKm85dm1ienFwLm0sVEczS2tGTl98a0N6dVdnZV9MNGIxSTExJndzcE9XcDopWWFpbz5BZ3lFdzZiXUFlNV1ZYzhuVDgucnlWb0VJVltwPElMajUvXXlyV0tMQFgw''@;'; put 'put ''N01SUmg/ezUyJX56U31FdkRIZEshUSpaR302PS91MColKSI7VE9rXTV+bUlsfWFvYFduXmNNO15XalBkeEdgYSNBKyElN118fTFhWWpgIU5ZdnszUS5tK2E/YmR+XmRIXVE6eSJ8c0A9SHwpcXMrIWRiWDh+Y1B+OGI3KHNTYUhic2ZhK2wsPn5LREdCPjFVPEZOdXh3PiwsNEssc3JTbC85MXVg''@;'; put 'put ''TnY3bTBBO0FaejNfcEZ6eVFfVUI3fUpZK0UpbT5EQEB1QWlvQ1lqdUBxeUcrXV80eGA2Tj1CTGFGW21ERTxYQyNKaGUjLlpHL1UkUUwrInJGUTVPTj81N1Ire34yQEI5TV9FZV5JNTpCIlBmJmJOaXtJMD59TmMwN0tCJE12dTc2fFRPRzNFMn49ZkU+SDdfXnhbTi9sRiFWcDlLREY/PGAoa01L''@;'; put 'put ''RCRndFhWY05XWjUxWVFDPFFyPE8xLE9dOkYibjRwOFtgcTYialQ4SSF4RTRnTXFHUFdHUnNVTXg7SSRGUXNpaiRQO1l5ZGQlfUl7OHZ9akx3bEpIZz5sfXpkKWBMeWFoWjIkTXBpbDo0c3FOblcuKHQwTXs5OU9vUTRwdHtSJSs/OmhHJUJeRWlmfEUwOi8qKGNFdWh3JlZFNUxdd3g3eWIoaG1M''@;'; put 'put ''QlU5VFBNUUZjeDhzPj0qUmx3WC5hfTdjTGI3Z00hNVFtbnNQbGg6O0IrIztHfnhBPGouYTV1QWM2OSxMOXp5YnYmN3d1Yi8ue0Z6P1Q4V3dPPVZBUE9WOkVUamJrQCFlP0lYYHUhIm8pQDY6XSFPcjxjVFk4PjxPKjV9e1FpPkszWD5LLjIoU1ZNXSF6KThwPCw5YS5RSShlTD9nQyhbaT1VRjs7''@;'; put 'put ''UHdCQT4hPWFLVmh6fWc8NyVtWT54bFhMRjhnfChXZTdPdFgiP0ZKN0U0IyFDOW51ZlZyQi89ZGE1ZUJpcFBKTSwwaUVSNzE9NHdMTl4vazpdXWlsSFFydSloaChRQng1SVMubnx9e3p2IkpiaVpNJmRrOkEjeEBLUHJgazVSSjZTTktyLEheO093ZktoSn5WLCR1XW5xPG0+eEkiS049RTM9aVo0''@;'; put 'put ''fTIzNTlhMDltZXc+PlVuZmMsT1JJMjBLW1d+WnNGZ0BINmt6LiJqO11PWFhMZlgvVzllP2JHcColOC9QYj9GWDZLaiE7MzE1WSNbV2JqZjAoMFRjZiJCQF9ua2FxamQkfVdCeWRLM1IjLzpUaVZERGZXOT4lS1tWRVl7bmgvVnpYdFRAP11pIiRQOXUzQGI0ayQwXkoyWjloZ2UiLmMiQCsvZkxv''@;'; put 'put ''NC5+LixGRk4ye2IyaSpdcXYvaSFkRUg/X18lYklnQD5RLF51UjUjKl5xZFl9cVksOi4mMFYjTXhPNnhEXl4pXzUhTWZdcGtyQFlQVFp9P3BTfHolamI9PW8yQnMkKk5nS1lRaDY4O1htZG4xImpiKGJsYyh4TGhDQS9jdkpfeWh0QipPdj18bSVqYStKXTMvc2BjemdiOkw5R31GYUR+QFQoUHFO''@;'; put 'put ''WWkoal8rd3Qma0svRCI5M10udlI9XXwhJF96K2E1P3p6W0hQL2tXR0d7VmtgZnZCKFR2YTV7blgpKHlHYDl5a3ZFLjZSW1ZnIWptdlIjZjU9djtucDdKVFE9Lz9MSjRWWnJnOUZvMzI2WT5UWDF3fmlbSnoyRyt9aUl3KVdtdURYZmEkZkdYUSU9LipqaVt1bWxqQHUmfDtiN3hPWCxnYnNLPGZl''@;'; put 'put ''XlFSdG16V2Q5MVJkVjRDJEdsYkZzVSNNMEFKKEt3bGdaQH5bVTBYLnJtaSo6dClZVXdsVDJqbWlqcG4oe1ZrRng9UWVROWJZTUx4QXk9PEwsTkNsQlZFSDhYIWhTY1M6dGdTeEk5LDNCbi4uQ0laeiMjYk4sdW91UF1XWEJpeUNbdVZldTp4Z05bMSZbOHU/bmxjflI1Uiw3KSMoZn4qT0ROcmh+''@;'; put 'put ''b3drbS5fSzw7VURIUkh1fitrPCN2TGwvMm5xKGBDKTVAKT9PeVI7aj0+QGwzdGVBLnRsYDAjOiEyX1BkRGtEYjVMKjxIUERxZzkmcjd5dF40W0ZpUHFJXmYoVHEqYG8kWWxvMCZifVNIdi9GSCFXQmJROEVicT1bOktCWFJQfDl4QUo+TyJWLGRmODBKQ05NaXJNJDVuVDRMUXkiSSp3LFIhZCRu''@;'; put 'put ''UnUiN2ZJPSoyTVl6IVlDVG1fRmJMMVFadGlhY2IqUG9lSjNlSjE9b2ZFZ0owbVdDTl4hSlAySkxjdHhYJmIkVFolSl5VWTZyMiIsSmAmSj16VVZTQV9VUXExUnNrdEZsPn0rc244MkpsRTxJe24uYHouK2xaZDljY1pLa2pHa3tjQFQ/bGY5R1dAIVVEUXBWTG5XdSE+e0tmR1IlIz1FNX5VJllM''@;'; put 'put ''e3FUR2c5Oy9FOVpxZVpPXlRjOGtLaCVMSVBveDJULFRfY2RCZmVJcndgRHIpd19iaG9+SzxuWyhmUjJ0dUk3bVlDJWQldkQoIWh2Wmd+UWdQPjg4MXtOYTskXytWITxdaEpnUHVZR3pLJTZAITtDZm9AR1UlYkxUNjhMfSRrZ2xxS3ZIX2VkOWEvekc4ajcsJC4iaUp+ITgqZ3d+OSZJd0wkaX1G''@;'; put 'put ''PD9gak98Q1MwejNvU35bMDspQntWUFc+SjJwOXckMCRieCRrbkxwTjdASzg2PklmZkIjWSE2TyRXQzhpSHtATEdAKjdgTj9+Xk98YWdbY1JIeVkhInRZO0pHT05gJG5vOiZVXjN8KC9nX1tsZTZZbVhVa3AhQlIuVWJ8VjRzakFFNjJuQG8/PDd5eHYoKTFHOlppKjhPaFZZbFVLUkdheVFIT1A3''@;'; put 'put ''I2VKQXQsPnYrfC5FXXZoUDosfEVUb0BjR3MiOyg1bnsoN3FUMnIzX1EsPT9WQlZmaEIzLl14IzpEPyNBaXM6SE9reHVbVGNRKy5gbGZ6VzFBRmd7N29UWHxKREBUb2RYN1spRSRsMyVwNmx3IkVVVj9+eFUyYEQ4VCNrM0soS1pSSVN0fCZFbDZqc2thOTBGVXB8Z11tRT0uR1ZlS1UiQSlbM1t7''@;'; put 'put ''NnF5YW43PklOZD1lRmVrenFLa3pPS2l2bUxIal46bmJkPHdhW3tuIzNtOTN7dD12V2VCWGtVV2t5aDwhTk5qfWZ2JCRTMV9pRGFMTHxTUjIqfkxOJnhCfkUiVlViajleY3B2MjMqSE96S0skVXI9bDtvZjZkQDF8PTFpYSEqfTBPUGZzbUBaZ0VyUWg/NVc0fVhvQT1wLDhgVlFNYld+SnBjaGA+''@;'; put 'put ''V2IlNnU9a2wpQSUoc19Obkk9S28xN0Z+YW4oKih3dHh9V1BXcVtgRk9MdF4xYk1wTUd0QHUqOU0qMDNbQHJ7L2AmfCZLSXI1fnVPekYmIjNiVGAuMFRTM2tySUw3YXxNdSwsei5iRlIxTjBSeVMzVSlTNXRjcHI2L0dyIl1ycEt8MVdGOlQ9YVo2MkhnbWMhKXdMPTQ9M3BoOzVaMzxSej8+alt+''@;'; put 'put ''XXF2QCRRLmBWSzF6UWw3NT1sJSxwOXlDKXpyIn5jVmZEaVRoYy9gP0QuIj9YdGtEWnI8N11JOk0scCojWUw0VDVhT182Zi5kan1IT3V8XU5BUHhdUGB3bjJveWcuaFYpMzJ7ND9jTEM2Y247fi4+c2lFMHFbSWpAQF95dXpidFF4N2dNfHM5dEdHWWdmQ0VGZEhSfTE3O3VJYj9JdG9IZ1M3QS5N''@;'; put 'put ''ZztDMWhuJFJ8LkJgLy8+a1V3QVN5Szs3MDopKEw9VmNmWThObXZSI3g7NVNkX2JiNXYwKmF0bXxzYTdZVkI0R14ubSE/cFoqK0FCUm1FajZ4Lz5wWHdiOEN1UkYlSV5oSDovI1ciVj18KHdDMCw0dHIkOkdHKHIqPDxJJEN9TE5JZlMlaGV0UjNQSVg7QlFVcGIqaT5WT0QuPWFzUSF6IW5KSigm''@;'; put 'put ''JU5QOVdvaCNIXTRLYDdqaUVqbk48ZzluPVtgT0pZTCEsVE4qfkk1TXd7LzN1aTlHPXRYPlo9OCEsdHlRPDc5fiF3SW1ocnp3ITIvPCkoZjNLXV40SntlK1coQitXanRnXlhaKnp4S0hWTTZWPjZPXk5TTFU+Z0Zab35MO0hgNUdDI2tdJWtdY2d4fFY4cipdYnVPL3sjJkN7SmtNdUx2UzQ4LGY2''@;'; put 'put ''Q3RGLjYxZVRjamxpWH5lbWpYPnkvTy9OOHJgNXdjSF53NXR6ang8a0xXUmdEVX0zdSE0IU5WTVJHI2EmTXp3QD9FcVBtTTRbWW9TM1g1NSlZe1tpaztqYUM9ciQ0PSs9YCV4fVJzTW14cE9NYSU3MlIkXko1fE1FZTFGWW9WUUFGJkJQO1QoKSlSbkFUZjR7eC9Sckt1Y31EciRQbk1rcE95ZG5n''@;'; put 'put ''QT9bbF40VUo4YVM6WGskWTRvViRsOzVkZCgsUHoyM0hfTigkQjJ+SzlrZkpNdTdWKzJtSE4ydjNvYlgmSHN7QXZHS2E3I2p0Ri5kN3lKVksoTHtPa0JuUXRNLjkxI0o0Zk9BSFduPkRNVmp2OyUiR1U5a1tZeHgjRXRBandvZmo8VHRxWSs3RilAOnk9X3B2T0lgU2lDL3BsSTZ1d11BSCtsYmts''@;'; put 'put ''cH42JHNVOyNuRkdXRm9JN2JBfj4oaExiVkAyYno6KktXPjB1T3htaUU8cn49bXNfdkh0Q1p8TGprUSxLbGthXkZiLjEudUZ7SH5HTEk4QUdBand7QytAVChIS28+RG9ueHtISkhOYjQpcCF7Z18yNCxuJiM2MjlLOnpTQSQrbFoqOEh+U2x0MDN9eko9ZG0xOVd7OnU1OWpwNEpeNSh8YTArS2ZF''@;'; put 'put ''MlFGZjdlUkJmPjJVfi8xRiMmRjVXSTc5TzZsMyhvTklPUDFFQGYvUGQzcSx9Y1p5fCtQOWV1OWBBSmwvT3soWE80L2ZZQUtlVmFZa2M8Q1hNWGc2W1psOFpUWj5ofDo1ezVUOktAaGtFPDpzVDB1clEhbClRbj02LERrXj1vMChifClpR34udy95Tz58XV5QYk9KJFYiajVXJHF1QnJEfHRERD5I''@;'; put 'put ''cjR7c1pbWDguYW4/I3ooOGJ2JipINEE+KVk4YDdZZ3crdk9wO25JakZuXmd3ZTwlYCxBW2UoZyYkJXVie3doUk13YGJgIV9XYXNfNVF+W3ZPUVVCX01sKDh8ZEsmWV8mfVs5JnRCSFNXTHB3PG5tdmdMTmtuJUtyLnM4c15UeC55O1BaYE56VXxycm9MNjkjSTAkZmpqdi5TOjFxbW1TN3BJcmBe''@;'; put 'put ''dU1ZYXxUKGw6Q1hBdChCdD8+PDF1VFdHWVdRb1BsJWdVb1V0YndvQ2xoLEhzRVN7IyRENDB6THRpb05SVSFfdmBHI1RYcmhZVjddSjZMc01RWUJ7MTJAekl9TEMlfHQpN0RLIUR1fmd8XmUqTiROUSU/d1MvVU9EWjdOPDlYI0ZjSVdqTmpJUko4RmAvdmJOMXElNkR0X3psTmJJejV+by9CcmFg''@;'; put 'put ''MUglcWU+a3VxeWtuNlFxQVNEUVpOeUY7cXt8U3BjfEArIXgiYn5raEpMMTZQR0NDfGlQLHx5O1BPR2BVRGR+eCNOPC9ZOz5nQ1ZdYkJHcDNPP01qdWt8WUZRSG15NUVRVSkucSEmbEEkfmhDTEh6Tz5OKXJWcnR1KnY/LmJyfjROZEtkZXpkJSguLFhvRF5bNFRFPDU/VF5VL1h1ZE4he1grWEBP''@;'; put 'put ''N0NgNThJQ1JWeGVZQDEucFExNT5ZPS9CVH1DOHY5YjtEKFRuJCI9JExacmM5Pit2fj9iPWwmdF5RcXk3Tm90M31uIi5ZOldBdyZPX141Qm5tbWFSPyNUT1V2N2IqW1FuTi9nSDtFfl5WSXwrND5adHdjNX5PPXdFR0tWa014bXtZUmA+XmVqPUBzQnVkYVRnbkFKe1c4Wjc5PkB1Z0R5KXd6a1o6''@;'; put 'put ''LywsPko4KC8hSyUzOmwlNEB7UVVYMDdfVGM7byE1IzE5TEJpQmQlRDElelZ4XUdOc1l5bz9MPkJQdEp8Lzh3Ol9SQHJHZShKcHYhcC5yXzJ6YjdOdGhkaXpyRmtFeWJyUmUpLmFTRTpKXVtWQDRdUDwzMUx5RyhoUEo9eTRyO3w6Zn0zcCRBfSNRVFAkPVJYYjBTWzhGVE97YyZ0eEFKak5HfHNd''@;'; put 'put ''cXZnd1ZTZ2RtNm15dlA9cGFObm0qbmo0cHl8LGxSbj8zUiNZLG1sVHZbOHdAMHBmVWlGX0k/OWVXJiRIQHQrdyVAcjFSZDFXYjNIXmE/JClJKXVjYX4uQishMXE4UiIoamY/UHFre2RvQnVXTS5mLyF1OWd6OG1zUzQhNXt3eVdBMmQ+XVUxS0tIekBJKV1UL35pR3pUYyEkSXhXNDk2c3FaJjhm''@;'; put 'put ''MnJuPHVQJVVAK0Q0UF9oN0xeSFpqNHhNdjZWfi5hfCRTempIRGsoNl9kMEUuLk1vfmFYUCpAYUBJSihUKHMyI1JaUSVydm9RK1puS0BzMD9iYjUwVXxzQHEsJSgzL3pAQkNNQzplM1YuaExKUHVGIXFzVkh5PXhAdT5tN0dTKGpuRWhZeHwiZj5+Qz8uTlQ+UFlzfnFXQTZgV21VK1prJXNhNXJs''@;'; put 'put ''QnxoQC9mfEsufWZuS0dWKjk2TXwjbWJoQE1wL01IKiJGdj52Ryo9WzQ0Vz44cDdZYHdQMD1ic08jL3YoRVgsKU8rdWduPjt6eTErZGEzSmNQaWB4ZzpoX3s4ayI+KjFzYTx4QCMvaVFCZDYoT29yPl8/Q3Q7Yzw0Uy9WLkxGUnNKa2tKcW06QntWJGlkT2BuWDw2TjxafmtaVGsrI0t0UVNodlZ+''@;'; put 'put ''QWZreDtfUD9PeDRIUG5ufT92Jmt5ak4jeXciNVhWSG5wN05KSW5kMG9BKSlIUFNjUnZSeVFuTE5IUzhVc0Rlal5EPTpKc1djaE5RVSEkaFBUYUQpe29nVilkW0lJZXpmIyFAdmxmX1pAWjxicCJnWmBwM3BBSDY0ZWZPUGtGVEVdQT80XkJHLnsraj5aNlhnSjh4R3ZaPWV7VTBYUVBpTjpCUEM/''@;'; put 'put ''dnV8RHhyJGhmZDkpVjolViFLUW0yK0ZxYlc7MTlWblo8dXhFUSltbC47Jn49VnlaKSUyN1kyXX1qLGowN0p4JkVIZllLXnw4fS43fGJsRltCXklCLypaPVFuOlIlW2tiNHlnUC5QSC4oaS9QKjV9eVVbbCV1Y1NmJWcqNWNJcDppMS49RV1FPDVlZTBUSUk/RD84S111PFRUcDZCfkRbfUNHRll2''@;'; put 'put ''LjskaTV4ZUZGW0B2fHp3VktbPiV2W1pZfTpsTl1ONyRfbThELzhaIXVRaiNGUng9c3MsY2lyYGFHck9eKmpJR3wzYzhtTTdtMWRTMVoqIU8sXi52dEFrbnZ0WjQ/NHViYk4iKV5qaWp9Wj9aTGlpdG8kPzdMW2ldTUMzYT9lKjdOcXA9ISh4LzdsPDptcmooRCJWI3NVUGR9XTc3Qy9wZU9NdHop''@;'; put 'put ''NjsqeF5yLyF4WVE7Y0E7aFdUNVZoRU54dU1dLkZfaHVZTUpuX1BHcUw1SWlaNShxVGFWL3c7R0NjOztqeDoyQEdkV2JgUGpnP2BpI3JDekhAaWhYY2dgOWBGZzFgZX5TTTlzbSZEflpSS0lJPjV6L14vKjYjYlBfLzh7YVQ9cjptW1kjZyRyc0F8QUx+PEhCeGF+OEg9NEI6dXkqWDs7RE43aEAh''@;'; put 'put ''T1FCPFlFSkBBTjtGNEMwPHApfGY8OXArPl03P24yMCV3K2pBJVJSU3QyXnF0SFttTDJRPHg1Ll83cn1RM2pudkU0K0w2MiRKR2ViWGg7WjchZnpBJmRyfTl5QG1FY3U9bHVVWyYzY284KitbaEhxWTdkTWdjS2Y3ZF5ia2tGWzc5Tit5Xn1Menx5MU1kS0BOOH56JXQxP0NLfVM6Pkl3ITE1Vmla''@;'; put 'put ''SXo9OFRjTE90e14yJF93MllPXURDQXh1SG8kNGBWUz08QlY/dzVwWXo7a0VtYjZLMHt2b2puTihiUnYsN10vUlRjP3kkNSptTE1XJTNQMFRBT3VKPWJDPW9uT3VwVColNVEuY1hpN0oyPXx1Si9wLF15aEI6PEYubXciO2hHdz05UDRkIUZ2UCkoK1t0XkJQKT5ZZXYpKWU2a3h2N3sweE5ifjYk''@;'; put 'put ''TDpUXlR0ZEh7KFNpSGw+MmdBbUhtTiZpP3ArWEgoQj0rVEBiKCN3NTk8c3REbWhiOV1mUVdnOU94ZW9bNzhMQXA0dVpvIzF1Kz1vVmUlND4rb1kwOH0kYF50eHxxdVg0WFlGOk05UD04emc0YmlILiNQXkxgaSM9VzxbRylfUmFveUR8VHkpRkgyZnMrOT1uNXw3OkFQQHIlNGVSPV1NTW1BXSFv''@;'; put 'put ''c2R1PCJFKTBrKV49IlhYNVdfRSVWVEN3TnFbaV93KDVdS0t5K2FVVnJlT3RRNzAwdGp3b2pIMiV8TCJZbW04JGk2VDUqXmtGOEg/Tyx3UGZeaV5mI2Ffam5RRXckOyxicSkpbWZ1RSYlKDNZfXQ6fDFQPjt5UCJTWlBVQUkqXilnWGQ0InQ2NlcjWTNHZjxCJTVbZSt0SDl0M0V7NF5PVlYuaGU/''@;'; put 'put ''WFl1M1Y8bnIyZENwVHJdd0Q/S0BYUFNtVmlsI0Jfbyk0SF0wd3JnLlRmJCQiJUlgMGxgbyx0en42dT9sdFswRVFZbHUmQkBuKD1QSkIiMCR9fU84L31sbG5TSHh0VWgqK2kyNXYsQ1E4XSh3a3h3Z3NXUkV0V1UqNUojdkUhMWhoZzB5UEw1SV8mMC8rNEp9cWo+TVB9bXZlZmh0bCQ3VHJFaX0+''@;'; put 'put ''SC5OaF9YTWlgJjNtSXZvXWpOYSR6Tl9vfnVmPXhjOVd+ZGUvbS58U3UuVnJbNSQ6LEkweDluLnBKb0ZJMipqdWtVVEdWTi58fUYyXTJtN315cVd2aHJ1PHYwdXw9TzArMV9EOSx7Wz00Lk1DIjV2TlhbeGdJfXUqMi5Jaz9DQVJaVV19YiNZPkp7fj9ReGMyLDNZclVVSWtQcyp7X2B8LCptLC9p''@;'; put 'put ''fmtEXj8kK35jYzFjZCNPenB9T3wkenQwZTckc1BoIUlvUjl3SDQ8aG9Ad0ojJC5GVHhxYzI/OGp0YjB9d1dTJT1VNEhDNWBganhOUnZTJSo8eDIkJDphMDJEUCwrRFhEOkBhWTxKKlQoYWJPJDtUYXt6fmVwVnR4KSxFZlRWSDxQPypbYEMpanl7QV14QUQjWDB6eiQmUkJ3M2Jzd21wPXtYe3Bm''@;'; put 'put ''OzxMeTpGS1ZlKS8jUCJobzBGbzd1eUY9LiYoZylNR2BvMSNMMkAhYDxrV3g8O2gzaitCNV0oRndhSjsiWDs6Yzp9IlRAfE43ZzJRT1Q+TDg+SFI+YiVQc0pWNmJ6WDFPT3RJd1VQX1FgTGJrM0FOeW9zWF1SYWVTJCFWaSxbVjdCczFnSzZBcnklUSohNT5eW3NNREZHSz52ckI2bTsyRGd1eUhT''@;'; put 'put ''MWJIUGRbdnhJeiFSaGpYanEuaDBVJmcuQiZtWltnYzlSTVA3L2ZxZDtXKldnVmdgcXlbSCtqdnJ8ITM+fFNGTnZ4WUglcypOblJ4KWRPRWt7aF1wc0p2XkVieGM6VCtdbzx0Ikk5TjE8YHohOHNOTzU9fHwkUy9ya0BnWU5jUyJfVW0sPGcmbkRKbio9fT5zYkkqIzM5OiF8MD9hQSl9Q29ENlN0''@;'; put 'put ''dWRnQ19gJVVia3QhNTMhNCNsJW4zfHxiZnRman5oMWVTcCMsKjksUld1cl83eUx9U2gwVllrQ05GSCxDPC9+WChsQmpmPWBfSjNqbS87SS5DS0RlbihJdywkYSYzYzA/MzBkbVZCd09PO2BjNFUsWWQ2dTYwVz1gVTIlaDVCSFUya3ExMj08TndYZl4qdFpXbmpiNGJKWldCOiNpP29OTEQiUG8i''@;'; put 'put ''Uk4vZ0h4YD5zYX4kKEpmJkR2OEJZe0c1dERsYU1lUy5OUSo3dEE+PVM4cyhMQHpXWig9a3VVdyJOTXciMXgjQWh2PFZqTCY+fTBeJjVVayY8YSxyYzdqPjkiNHBlcV0zSEV9P3UlPVY/Z1sjW2t5XnVzXVRkT1YuZXRTMllTJG5sN0pEeTYuXlAkQSN1dDlBU0BuWUM7UndhK3NfQ3VCbTBZJnBd''@;'; put 'put ''O0d2JnhmQDRWZmA3VCpXLnFpZ2pYdXNuUU8raHw3JUsjcXhHSlllXiszNHo8OWxGJmlzOylaTEJLLjAkdkR0ZkgrPj96TEl9RStUNEJ0YGh4Tz89bEFLbyRiMz8qTGorUXRFKTg7T3R6Uk5GO2pAWyFYenVMdStdVW9VQn1MR2Z+dXc7WnNxX3tuSVBAb0QsTCNuSUt6TkduRV1vcVBUbGk0c2xF''@;'; put 'put ''NiMuYTkrIX1MMk86IU5FTzhfdUtTYzhHLk9PQFsoNWNfUUpAeE1me3VwdWIlPz5ZISYzVEdIR2JuW3Y3fHhpb1k3eXtJSjMza2lYdkRLPmcuNWtoMGdaN1BaeEZoRVh1Z240KHplIVFbd0h3R30yKj03TEA2W3haZXRxcUcze3AzKitMQ2E5MVJ7cWhMKS9WaT5iSE1LSG0jV3FQeXw5L2ImYTtG''@;'; put 'put ''WHcsKDAzbERFOkJCdT9wd34lfGhtNDJefFpGJENgc2g7U1pwM0twZURTQyshZmhaJlNGPCJlQiE7THQ4fV8pJCRgbUJYNEkpcWNXR3NfWnxLX0ZHXzNWTyxpQWNKVXZaLlJSMHZPRHpfOT53ZX17dG5ASHJgWlRSSns4XjxZV082Rn5XX145P1V2eis6Q01DT2x0amRjXSV8YF4qYT1tTHR2N3pX''@;'; put 'put ''R05yYkNXJG1YdmdLM1Z5cWZJKyw7YyZuLkBVUTJeN30kemdnMV5CfDska3RiMiMsQjNwNW1FRnAiNn13PWJwS0VuTl0/KVlMRmxxSCRFRlBpNWNVZmZdK3cuSEp8STAxfUVBQTAsRU4xZHM0LkQ2TXFPa25MRChDWHNUZHYkVy56K1JERSJsZ2kzdzlPLyhlPDlSWjEoMnM+Yjs4fGVmSUh7Jm5L''@;'; put 'put ''I0p4RHtfVGk/XlcvezFoIX1+KyF9UGxOUmo4QDJIeHd3MkR6L3huZ01ebjVXRWEkZDA0Y3grUmxzRy8rfDtfMSxoKkxZYjYjc01OdFVaPFJlOSYpcD1IdSVaVFtqcSkxXUosPSwydGJpWDNld3dGJl0weHtqT3UjWSN3eCxFYngiTnw2TVIsZkkrMjhrTG5ePlNqXU5LKiZ3Ql1PQDB6dXN9TSFR''@;'; put 'put ''SjZ3ZiVVX1t6eiJHc155Km5kKmZLY3pvYGdDTWBZMHNHL11lcW1yRltxPEdIMU9ZSSQoe1BzMHR0fnpWWVtIfWJLY0xLMl1PI243bjlMMj0jMWhqTGZAdUJDQl1kc0FJMVIvTF5bR0t6ZUc0ITo/UT8iR11STV1aRUFjMy5ldT1rVTxhOklnWWN1bmBuInEydGRZUDx2czhJN1BVeD1IZGxCUj8h''@;'; put 'put ''fkAxZFMsfGQpfl8zZW1OfDRkZlRHeyFsQz0ra1ROcEYrZzRFK2pydmImJjE7eU4yO2EiQkx3M3p7W3xRTDQ+Yl8rKFllY0ZnZDZKNWZsPTxKe0FnYCtoQVhvYnRMRF1tLmlWdC4pW1MiPGlAU3cucz55PGY4e25FXmEuUkRzezVoekRPY09ue1FFWVNUL3w9OkR7ZzslWUVLeShCPmsxMXhQPSFZ''@;'; put 'put ''fng7RUV3LGAxYj4qLE5fbDFxX1N3TCI+WE5ocmtLNlFjKCsrNzI7ZT1gezdJfWVCUH1kOHxqZSNIOCshdW0zQUA0M1ImdUNxIyxLSU8mYzs3Q20jeUhFR303dzE9V0J3fEs4ajxUMm50M10lL0JiJl4wTVcqOyJiRDZ2VDVJUmxjYCwhK2BYVDVydGthVyRGPkpUIzpsSXZEPUdpS0IxSSZjbDAz''@;'; put 'put ''bVIme19rPz0+IVs2Z1o6L0ByS0c7bkVPU0c2SU9dSjAialRTfCsvbkFDPzVVTlRPVl1teVU7JmpCUkJhNTAmP1YobldCd0t5cHhAInJROD8mVyk4MjRRekIqIiQlTTM3biM+Q2MpRlJUdEhMZzJ4OGxZP0xRZiRaVCNEYF5WIXdsai9gJGVtLG48UF5HXTY1QEE8IiYkODpfP347aXFBR3lTW2os''@;'; put 'put ''Xj5oYHt+LGsxLko0OywqenVuY3clRFErJi95OVYhUnYhfHxpOEd7RXU9O1dadll5YjQxYjpQT2xFSikma0M0N2FaUWlCLjU/cilTWWN7RVVfTCwlcklTQll9Ll5wMC9zQGVQcldBN2FvU2Fqen5OZik4OUBbSClPe1FHUiFKTjx0dk9BU2ZTUHZ1JG84MS5UMkNgalhZIVUrfDo4Uz1Waks/TDFU''@;'; put 'put ''W1BULnlbWGRDUSl3YVVzRVE7b2pkNmRfQCV2MjokWyt8bUhlP1MwTjhUPmt7d3pKYCw8QGtsUGtpLHJdaSlOciU+ZEordTtDTVVoTUUuSTp1QCRgSCVVQ1ojeCJuLmdkVFMjYjs+Omg2RFtbeEMzPF0vXTluVExDIjpWd2NKLk16Wml5dk5DLyowWmNdSC9uYDlRTEx9NEZoMkVqSixmZj81TWFR''@;'; put 'put ''TVtsezZgdE0wR0pCRWpOa24xNzVLRVI2UXJRIThCTEJCRzlEQ3pHTXQ6NWw5VXBuOyh3MWtXc0srM3lvdkE0LzJfejNAYWdVNXM5aHh3JUIuNHt6cVF4Ij5RZCVvcHpFOypjYjhqWl94Ym5JW1lGJF4oSEh1aDpFTS8xUXpjI2xgRD5sXj9KPGc9N0IrJi5kXjFEIVZmdkAmIiFUKH5VWVJIPi5C''@;'; put 'put ''Ylo/WmpzJFU0SihVfF8lXjFzOS4lVFFqYkVrc1hkb29xeEMmRyNHekYkYChoJTFhQyNXcTgpc10vd2VKeCswbGE8RXh8QC5tPnF0a2QmYnM0Kig5L0QiVXxTInVEOjArX1Bdd3l8cXZ5bVt4Qip5c1s5dyQvLDt0Y2ldRVBNe1hoTEpOVT4rc3NgQUpHbypzMlt3WChRMCx4RGVCY1BCZ0FlVEsl''@;'; put 'put ''PnhpUEh0V0cla3MoVU0lajY8PmpnQ01oR3hqSXkpckQiXSxoL1A6S25AXzBfbXM3Um5ddiwxXj14SnM0PCxGTjJHYSR1amdhLCo5K1ZFR0BdRWN9RTt8MGI/Yj89XSFdSFl8SD9CRnMpcVQoTV1dXiNaWit1U082TVYqZ0RgWyZqM0o0TipPXVN1NUY1PklCTDRYaTQiODA1eGphNSozfUJJW0x3''@;'; put 'put ''LkAsbXwuJmRrd05FajE5MnUwKCxSam9eZlA2RXQvKmshT2k6fF8lcU5tKFgyam5aejZJZGt1fC8qdz12TW5LNjtVV21IeH5XYmN0MT5+O3xxYyFZQ0EocS8vQGlhb1MieGNCMjEoQ1NQKUJXeWsoclt4fFRLaixXWnhFYmoyPlQ6JmRfLjRbXj4pdCYrM3FsfW96MEElM1pwYW9lTEd6eXZIW0I6''@;'; put 'put ''bzFSfD9mK1RqQ0BiRUArZ298cmxPW28lQjJOInMhNXpEbF5gK29uIW0kIlNQPGxmPE5MRjQqakUheUMqbEtoY3tidD4oayZqcFhsTzUyUClbbUdlMD5wPXdbOmM7PEQzTlQrdGlWemF1VUh1JGNNKjRFO0RJUEc+Jm5NYVFiQDxQP0thS3JebkYvciVweUpoQnZ6cTRDVUc/aDxBMGtFQUQjWyxx''@;'; put 'put ''PyNHIkM1Yng5KkxefmJJaGt9fio+cCkuRHchMzxSTlVbWU1jYitFPUhQTSkxMDw4WyVHdnAqbEIwbzFTYzFgNEpAdE9SeC9+OkNwZ3Uza0Y2M3R9PSovUCJFdU9QY3Q5aE4iOTFZUUN3IyN8aUB5W2lKckNGemA6QFlLen5na3pFdE58MWdqYWs1K0deRm5SaXJDfnltdXglViYuXk1OT3l2V0wj''@;'; put 'put ''LmcuY24idzNzIlR5dyxhS106Zng9TnFXLEpqMVdleW9RP0hvcnNrO3VlNVVzLzh7O0UqVnxLb1Fqck42UlhSRDp7QEJvNCg7fl5FMC9qVkg5d3I+TmMvTjB7YDZiajIma1pqZHU/UjVJYWhXUUFiX0d6eWZeZ1ZRMWNFU0cmMXh1S2NidE1QcihtcEUpd2g+KSVQWChpJUx3YU80RmtGYkxTajwz''@;'; put 'put ''MGFjWFNaQFopcEo6VGZOVzVoKltqMnhIOVprfnw1Rig3e0pgNX0hMkxHfWhRb1hrc016K1JjIUJHSl0oU3c2QEFiJkJCZW1qS2dYXk5wbkkyaj9MVWpOd01GeSxnNDB4PWhteGBXREopMUIjelBIcmdbJlpdckRhe3UsdVNPcjsiaCpIcj8/QF0iUVRpPHpSJEVCcHhZRW5rZjB2YVBrWF0ubSw8''@;'; put 'put ''MXJJI0dPSVlvczY6PmZ8fXg0RDoke1dyPloqfChCUj98NCJPbyFpbylWPmQ0OVoySlNxUkd2STdrMT9EPSEwOlFuZGtaciJbUj0hT3d8YS83OnV4YklTQHFEMiE5XUZCfWUqMVcrMVZqPFphQmwmVHFOeDAqOit7czZxKHVVOTlQJjYoUkE4OWhOQGAjYUUpUFUySC5GJElkNGBaZltXdSRAZXhV''@;'; put 'put ''TWdmPXg2InM9KSRQSClNPn1dOz1oL00/WylTW2gzJj5OZ3ZTUS4zKl04XnNCSUAuPU8zOCR9VC89VVRXbUslelRfNjVpTFp7RlZ3XSgmckosNkdMeVU0MjQoZkNAY15hNnpAXzdXeF5nVTt2UClgbylhb0orbnR5YzlUQkdXTj1PLilUXi8pSCxVP3hQWFpOYCh7YmZMeH5XOzpKcUViNHV+WmRZ''@;'; put 'put ''dSRGMncsMlslMzBES3AmaChrWWRIaWV+MDBzOTg6Wl9bOSNNQCJkc1hGb3dPTk5KYjQ+WUBoKGw1b2ROPls+PkJEa311QlpTZDp3Znw6LGVycjJKLj5ZLCspMDZqTCYsWVUoS0gjcShBaHloI3VBcCRsK2xtLC9WRWZYMVsyMjNxflFIWVtOZXUyfjUxTFMhJUdecUJKPGcpel1iKVNFSC5baHBU''@;'; put 'put ''R28jVm9kNlgpWSI/bV5UNkokNWxkPiZ7NlZvYklZOjJ9TnF3KkZUfVRwOyo4R28yX15Ja29KIzNgdnZiRkA7XnAmY2llRDlkNSh8M2hlL246bkAvRSgsNmJKNVFRV28zYCJ4RXd8aEh9YEN7bkQ9Km4pQ21YWyg9dFk8RSZgcyNxO3pKdD4vKEwwdzxAJUpOaz8qNng3YF8odF5qcWZUNSNlIn4+''@;'; put 'put ''Vmc8RnJEdEdWSzRDdTo6NSImY3tJKXlsdSZ+QFBjU3ZTPmMrK1NOcTtHVzBMZCNldEQyMXZgMUI1akBKbDc2ZS5GZDAhM2g2PzZSYSokeVlUUC4pZUp8Snl3UCJlQjBiYTskQTl3MTBHJiI2Nzk6ZT9XLj5kcT1zaEI7ZiRZPnd9YFZELDtOcmR7LktgdClyNSFEd0hvVmJSbERrdi9wYlRmb0x5''@;'; put 'put ''Omk3JWVDX3c3akt0bXNiTE5UdkM+WzgkO35wTFRdKC87Sj9EOGg+O0JMKGl5d3AuQExFQiI7P0NDXUI4RWEuck1QfTcwOE14fCgwJn1oYzswYVkjS0ZoKGpBOSpVPXhqUn1YdXNzTSMySj8mTnZacjEvKUl9VUJqRVQuZSxCV19saCJDVjpOSl0obHorU2d2cz85aV86KSY/OFZlWE45aE0ydVsp''@;'; put 'put ''VX54PnU4ZXk3WUhJPDdLYTtDcTw9aSxNJmlAKHRwUVpvSmk+Rzkpa3hXXWJJWlpwblt0U00kSlV+Wl9lZmxlNUhFRUZZL0tOdVRsTkcodmJCVyF4VT9fTHohNU13dT9UVyo8cjhLXXZ9SyYqWlN0Ll9mUXB3Kkk0Lj0lem5VX3N2SEBDeFEpSnImdntUUV1XbUMwQkdqKi9YX0RNPnRIbmlpZVE5''@;'; put 'put ''eT5ifF5wYmMsMnZ7eTRBd2x5Z1YkK3wpQmZ2PWZVZ3dnbSNrL05UNWlsQm9dP2xSaWA1Jj9YVlcmWzFIK0cxPCN6XiMvN29eXzNlV24oXWkvXj01d2pWXnlSZWVJdnt8KUBOTklRYWEzbW1nV1I7c3J1bTouRWpvVVZTclVwbjxxYWh1SjFNNCR5WXNiWFdLZ2AwWTk0SiI5TT0sXnkxem5URCZm''@;'; put 'put ''UEohcz1Fe1M8RF4vZGRIaE85SmFodm5od2tBOEo3SzU4cHBuO3Iha0VSay9EWT46YXJvVFNoUGZPM3hbXmM2dio6QjQ4NTQlNF5tXTk+KmgoeUlpM0hVSCZjO007eFBBMThEQ1ppZSRSenM6fjpSO0ZoaXxKKWs4b1IlNCMpbkRgQVtBMkJ0OVFEK0AmfD16XktGWFtscyp9Lzx6Wk9SQ2hIK0lE''@;'; put 'put ''PiE3Z0l5MW9tI3tbVTlXayF8Onh3LmtCPlQ3IWM0Nm1OWFgmT3tDODdYLD9yaWFKWWVyMlhGJD0uRnhafCZ5YytJPz8zbXN1OEdlbylPVjo8JlBkXVA7WzR9Sy9ZXVE+eFhGW28+cVp3eWNEZlRGdlgpN2R3O1J8YmZnTjFwO3Q/PzZoRSswezwyIiQiYV43ZU01YWUoRE8uQ11zXkVzWUxKJW9k''@;'; put 'put ''al0paEU8bT54bn5vdDhRW1s/WGZbPFBTXikxLzNQPmw+NHw/LyZVd1VebWFkO0FkdV1MRG4jXnZ+OkZUTzA9ITZLTnMzQUVpVCtjWEBbYkdVSDs0fiYmSk8rekRddmE3Njs7PEM4TkFHa0JaOGl1Im5BL1pdLzNrfW5JUlEpKE5eKitnQHBXOFRYbURVTkEsNkRnbHFJQEc0SWMrXVBgXnhpfXFF''@;'; put 'put ''USRnUD1rem5TU1tyXn46RyVUSm05ZHBISCVsdUxhM1o4d3ZCWWsxOkAsZ1h6UmU2OytLWTIuSzpmZz97ZDgiVUZNK3NFakovY251fEkjdiptYk4+SXAxLnB0aTd1flB3dl9zei5YZWtjUkE+Z1I4e10rJmkkU1RDfWMkUEA3N051NnxFck94aj48OH5zbGxrVj5qRnYoQ2t+Umo4JkxvdUNUOW4z''@;'; put 'put ''T3cuWEBPTl5LeUhUfmtYJVRrWjhoVH5jKUZsMyg/N35Md3gydm8oIkl1IilOfCh3WUJJfW8/U3NkTy5zJmEhR217ZGxfUiRiRWBgXzpyT25pQ35mODNiaCtrZktOZjAjMndvQl5IO3B2VDZPNSRJdjYofE1YNF9ZclQ2K0QpWjR0Nz97cERsTCF+bE1hbTZhakhSW2opOzplOltjSnQzaUZVJi8y''@;'; put 'put ''XXBQOWB+Nz5dISQkVG9NbT5zfFQwTGlSR3E0eDx4LkhdW1hAam4idjd0Y1oiUHdBQ3xUTC5PMXhZdTFvODRXa20kMz8/Xl9NWGQufHZPQU1FX2NARz1BR0luW2tqVmlgL31OciVIWE9QbT8jQ1dafnpSVD5qP1hXVVclOlBfUFtnXUw2fEAsX3V0OjNjflc4T1MjQywxPCFga2lZRXpGamM0PmNf''@;'; put 'put ''LGFlLCEidWQ4XiQzcU5wOml+d1BmRixuTlE0dm8xKS9gSnBzTU56cHRjX1BtRig2dlk4SkgzLnlRb0JKUSIkVn4zN2BhMD5ZdTcvW3kpPVl3ViZaQ2pmYGY3IX0wQVgpXlBQKGEoLzVeMSVbTU1OMysuUyFfMFlBaHBhOkd3Nj88Wjc1TDxMaV0kPHVFSV9hKXJDImV5diVtcV8yKVUvLD0qV1pH''@;'; put 'put ''OHZhO35mLm0jSUI3YmpQRS5pOkJVc197b20yKWx2bWc1eWhGTCE5X30uflU/R119VjJHX00hIyNbWmJWbG5eTT9OVXs1eWZBNmt5Nz49XXhaZH5eOnRqPmN8RmoqNTcvc0pYUTIyN0NsKGhMQSEoR2pGWT99Rm9hXTFgTW9DIip5TTlnSDY5QHtAWUFNZyZxSzN6Slt0Zi9dcGYvTXxXJCM0ektH''@;'; put 'put ''enBqS2BdOkxCeGJWSHQxQ1kxczhpYyM8bSxZPnQ0YkV5UTYhQXdpdnVAZllgRnVyI35oPns4fjYrKDReUTguc1RfOXhJUFN3QDN9fGV+VFslXUw6Mk9NWjMyblNbNSpRRWYyfH1wXyklVylFXnFhcGVWYld6fGRkKEY3dHtVfHIrWXRTIVVNOUxZdygobmk1PWt0ezBFYEs6TD1rblFjMHZZVUhk''@;'; put 'put ''NEAuZkFTfjA+RTFaa2BuQlBnZVU7MDJdRG1Hd2JwJklOYitvYnJdeD5eO0d7R256YU1GQHxHOyYwZnxhOE15KyVrQFYxSSJVeyMsdFhkYCpWJFN3RitHNix+Q0Q+dDglNUc5OklbJVBwa2U7MUN0Wjw9aF5Cbj4xXlldKy50ekVEYi4iRGoxS2FnYWcwP2xCMWNeUUFpMER0XkxYRWoqc3RQPTlB''@;'; put 'put ''Y3olSHpRVSZFYkFYW0FyQXg7YUkuWFtHb15ZS19BKFhnfjRlJFU4WzYuSHE+XSFIJHk9T09STWtCL35iIUchNDAxPX59NExzKjhNTXZVQDIyRWo4dUdJaXttTTArSVVnVmBBMDdyM2FIQ3NTdm9RYH0odyEud3xePT5EJVoyKDFMZ2pRRTM3RjFGVU54Wl5PeDxeYjVXTE0+KDZ4UigmalVwaFth''@;'; put 'put ''KzM4cW4zYFpDRl40VyV0Q21EVz4qSUs8PUd9e0BMYzg1ejgoPz1XdURrSS97cSxsUCt7anRwK0pjcjw9RC5KV0x+bSMiMF1aTkcvfXxTI31UUlh8IytVVmR2JEUvbUVUZXhxd1dNIVI7dF02QVNmPWdAKT4zIWpyXmxAR21ScEQ2SkxLTiEhbkZgVW9hSEJgL1JZZiEhZGFRV1ZeJlVZTXkkZEdb''@;'; put 'put ''QyNjdC55RzpTMGdUX35qdlowbjYzVCJfM1MhIj5PZipyYGxtTyghT2hhb0BDXkRBQ0E4X3N6OUFAYn08TzImL0F0JWNqMmE+T1dbZWlmOF9DdlVYcEclMF4kPHJGPXtDQjZJYyU1LksjRmFOfF82IVY3IldVZWUqY3tpcmM8OVp3Pn1wRjFAcHYxJFArUEEzV3EmaWVgdlNRVEBmRCk/IWN7Ky5J''@;'; put 'put ''d0tRdChlfUN9TDcmMjVkcyZEeHklPHFZKkRWe0ZwWmdDRERGZC8oSW0yUyZOMDlXJXlodiY8MyhxYWk8ZTY2Y3FWXmlANUFUX2Q3KjZPRj4vVUsiRltVdGs4Wn1iaSx4JkZIcUJeRClhSk8+T1lKM19vWVFxWywwOmthfml8UVREb3pYTWFVd3JaaFtsdHc2MzZlKzVrVGFjclY/Y1tWQjpvb2di''@;'; put 'put ''T1R5YnYlI3N8ZnJeN2ddLiljdjdpPzdWRXRhSkI7an5ST0Vba3FOU0ppai9qWHhlRExkaUNePlolfGMycFp0fUlbIV10OTZGZFlpaFZiYkRDbGB5Wk96bHJLUW5mWWptVShdP0U9X0A+enlqQHRPMEZQcnxSW2E8a1JTTV9vSiQqZD8pLC58KnVucjo6NkQ7PTssNDIsVHJzTk03X094JWJwI2By''@;'; put 'put ''I1paendqSExeMS5DMXFLN2NaITlBK0UpPHo8JnBpbSQpbFBeNk9tZ2xEMFQvbFM2VEIlM3RSTnZLZHdSPTl3M15hT1ljQT9GT3MmSCo1Klo3eT1yU3VneD5veUVBTVZPNyN6UEkxI21nW1ZCVylXdTg3SlJNXyp7JjE8c3s9fnY7S2RGImZCQEQobSpteSZicVZuVHJpSy9QXm4wdE5GWFhYIjw7''@;'; put 'put ''KF1Raz5QUGRELEhWbHgvZ1QkSFgvZjd5SCpkQ001LmtAOCsrbDEvJG9MbmYzLiFHe00sOGN5OyRGVzByOCQhWXxEeypyIz8/IT17aSQ0ay85UXp0Om98LFpRTWRgfUt4SXJeQjQkZi5xWVt+NCNSMSVqZXFmY2Jpc3A4UHprKiZMaTRUVlk0bj5bOih4V0ljZlAzQER6YWE9WD85KW9AflkxOTsp''@;'; put 'put ''a1I/SnpGIl0mQnglMjptVDBiJTNJfDVJS1lxP1h2RGpQcGtzcS8qKHs2PCgxZGMrVTF9PilRWTtpViI1eSUqZyh3WEBmX31XZD04MUA0MzFodD4/UVJWc29DPlA+eVA+RT49XjBDSVlYI2t0KVcqcjJNMUo9UGteMyFEenx3N0NddEVpSVhNNGJCIlE+JERQV18hTzZnRGA+VjU3LHFfX2UoODFR''@;'; put 'put ''X3BiV3krJFcyO08jNio7KDtuUU4wbHYuKmVkK2NFQVAkIXY/b2ZTajcmUGxlMU5OWXZgc2szPi9kQFA9Vnc7VDRzNzFLNWBUMSZOdiJQPlEidXJnKyFwbFA6Q35WX3pbWnZicmZEI0A0cWc0bzZKb1d3UztLe0hnX1A7XjUibk1YS2VVallXUXpfdVZyeElfVyxjQ0RkKmN1M1I/ZF1uRGVvb10m''@;'; put 'put ''WT5HNjAhfHJ0WDJmWCUzWCNPbkdlfTBPKDwkP21fTD91SWNyUjsxfWYpSTpQZTs3JU4yS1h8eSomUmhuKWlkeSRRJEZ8WEYhWiU9bDRAV3sxYUhROTxYRC97dXMreEgkL1ZMMnU5SzRaWypNSkBwVCxOXW1jRGk3dn1JQns9b2NjUnR5Mj9SR0pMNCJ7PjUlZFhKI3hZOjJhSDUwaExle2xLLzp8''@;'; put 'put ''WWBEXXwrPEUyaDhIT2ZkKChSXjAzdWV2e1Y6dD1oSyxoVkFFKUcyeyZaOWlReEw4UTgkMlIoJF1SJXI+JVMoSW9gajtEYHlTaTluJH4mR3JRZSNwYSltUXs4Y09YTTJRK3N0MyRiNExEPkpoNWJ+YClfOmFzfSkwXkJgQUNjcypEdD01XyJOJVtJZGhfQk93YWs8dzBIeW94NGJBU0NfTiZDIzdf''@;'; put 'put ''fmQsa1FdSDxkQj0/PihhK1hvTFA6d25XW187T01MVkVGL1hoPWYheCVWUGluQm5bKU9wVDV4PiRUN1RxdTVbbFspVCIoSlBTQmQ6X01bJmJMW2MwZ19uZHJkMjVMKiErSzVFaHpfNX0+RkJQOVpNOS86dGl+UXJDPGAiTnVnPkM7P1VWYGpeYntFVmxWS2BwLmtLQXVCK1ZocUc4OkRqMUUkbGF5''@;'; put 'put ''UDdkM15icE06Xz9NI0hwRUtmbGBZVT4/e3ZGKj08WG40d0ZffiVedn0/byF7XVM6JiVAbDMlKiQlUmdIPWNzdmgvezB9W1VrUTc6LGxnbV0vbFhLUDpWT2YvZHszQSg6M14hUFA8VnA2YnUrY2skYTwsUW9fNio0WD5USTE1d09CN3c+e1NfRXBLJlJefnYkcnFOW0E1fiMzTV12WjpnaF9WOXZb''@;'; put 'put ''eEtEJUYxQXlDNDdeVEIxaXp2Tj9TdncrY0UxdCtlYClBPXFqKyokcEswc0w+aFBULipmWzlPWjtpQ29AQTdZaXczQThnZTJIWkFVK29IQlVFQiV2TWhqUG4zX1t1fGNxMSNCXVM6fEdnYlJeRVMwXU4hPzF1bS92P313QzRzTGI5KDU3YCRJNVByWkZsYGYrbjBSZ0FEMmU1ayx0TV1bU2clMH1J''@;'; put 'put ''e3MqXlssO2UjYSs7ZWB5K2B9X0Y5dTpheFd9JTpsKUB5PDpRT3xUa0IyZ3E4RXQve3BoNkxWYHR2c0NOaFAwcGgyMzUmNk01QzpvTHA5fkZpWmdjTWRrcTlgSHQvQyZxSlR8Y3BaaSRpI3FXUzVjfnJMWjZMY2pIWzxkTHYudlR8Z1tYXy89SzRUUV1xI1YrbWo5Nl5gTngzY082KHRmcyxHKW9S''@;'; put 'put ''I1ppeDRZbDdeenU1Sk5rRyV3Z0IjJWZmRzQ8ZkVNM1FbTyptIl5ATldsYCYzPkdmd1AmVClCMn1oM2RpQFRAKmdOY1tGYHNEL2c2VEQsM2M9STouVmlja2tvRSF4Z2BgfjFnWlsxNSgqXyw9ZTU/SkkrXVBzTTp5UCxmTmRvXTAzeiIyTDopaXIwaX5xNXo7N1tuKTclem08c04/ZXplXn5HbWt8''@;'; put 'put ''NGI1cXlJQnJ3OU1afEZMJHhwUnVFT2BjKHJHVTV6fkE9S14kSjN2QT0obFlUKD4iJWRgYnp5ZWFMJHJvVHI9Z0dBT2lMYGZ1enVwKzhoZU1ZaiFLQWpzamxhJVN6fVl+TlAoIWUwfG9wakxman1VSDhrfSsmeFE5eCprZnB8MSg5Z1FMcFh4Y25eViw/SVBMXm0qeTR4KH1KLkB3flpMVGhHezpL''@;'; put 'put ''a0gscUJoeFNhQGY5LnFpK0piOiw0WEBnal1ORnl2VEhxX3phRzhgPms/SklzNy5zY0xYNzhqSkRKPH0yNCEyYDIxbitAfiModT5mMTlUTXBJRzp9WCRkW3lyeW94KlZBZ0BTQ3UiTzJaLzkqW0Rhak1oLC9uL1tifikibDl8OHtVQHJhNmMjekJvfjhbPWdeMkYlbm9oeTdnQEdSeVtOSUEpN2RO''@;'; put 'put ''fk51QnYwcUB8STo8IyU3MS9BKSheeGlTMm1HMSNzZVU7eTdQISx8bmw1KXhzTlJKSHVJMEJzSV5uRW4qTWxMXURmelp2TEhVd2lIQ2FrKmJEcnguI3srV3U4aW9FNSVqZ0xreXg4RStrbVldQkRkSnE/VHBVIVt9PCV8TXs/R09NTDM9WzYuJU5MYjBZQ1AxTCNdd09nLmolcG8jQnMhOFdZVj1s''@;'; put 'put ''K05JNDUkQ3ZmKzFDPnlOLCFxcVNtdFRudiMzTVp3a0c6fSYlb1BPbkZUVGozP0FrczlRLlEmJFVrNkJVZ0FmISQ2RSRNVHBHWEhWbWZ4TksyOE9tdVo1Qz9iQk8xVEVGVjlsRDxNTTV0OWdzWSo/P0ZbSjVGI15wSChEZXc7TnchbCVqbjUkeCpQNHNnMmcwIzpFdVJyTFBLTDx4OUN4dnt+YWNp''@;'; put 'put ''ey92LlNuRVZ8Njtfa15XYW03LmVARlVvdVd4T0ZrQys9dCljOXN6al8zaExaQmwsOC4mLiQyTWI4STgpYWZ2cUxNRDApTWgxeCt0cix6MWU/MWosWGhKLzUpJnxKakE9R1s5PylscEVCUS8sYlZYNVY/REEzZHQqbW90SWs3Oj1NJnsyVTModlRUZFRtPmBXc3IrNjZgKz83Tm9uPUMjfU8kXlFe''@;'; put 'put ''KSpsQWk6U0NHU0l2ajhwU3p0JEF7Tzs2NFM0R3dfdU4uNC8uYl5FJGgmKTkzLF98fDU8cGtfLkxud19qbk1MT2hYJTsqOUNCbiVXd3hOb0pSNHdoaXdqWyJ+T2N7djhLNjRMPG42VC9RQkl7RkVBTChPUStPdSxqWjM1eFdeUWZEcH5IS2NsJmUsQFJwLlcoX1V4UVtuQ3JLbSRhJTxKKi8jQXFu''@;'; put 'put ''aFRAN3Y/QD8qQHx1LitZNDBndzQ2SiRoLy9qO3VOKDYlbE5gIipwOFtUKVk6ZVRveCouVGUoXjtdPjYlVlJVXzhlYXc8OyNqMW89R2RAOENOJnxnaihBVCVMTXslOSY5R15TY0p1Qm9gVi5ZTkFhMmtxIyhCaSNxPHJ2WW80fU5scndYM3IhVjNnQ31SYmIxensuckAxPyhwbkd1SUJKWEB0bnVD''@;'; put 'put ''L3hjKzgjSEt2Z0YpX2VOdmBXRlg7cjshOzImLnJOSjZRfWNsfEA8SG5NXVg7XTlgYnY0XXU2QWIrejgmNVJBUFRaLEVsczI8clJ7JWk3fmYlPUMhZVokSipfLnIzQGdrMHRYL1paQi5QX1hJZ1dmcUFOSE1hdkVSPTQkVnJoZ1VIIWtRbFkrZE9kJFFOTih0RSNfIi89Z3ovZHYle2M2RkVEbHQ5''@;'; put 'put ''MUJ4TShWfWEwKEspdjVvIkZ0LihGQ2teTSJ+L1pJeyEwVFB5OVpeLHFtfW42YHtQQyQ0bkltRTc9RHRweip0R1N8V19DeUpxbUJmbnk9VSs8Yjh7UH1Tal9+SzNqLGVxS2R4YiVaXlI/JDZqSnEoWCJENGldLnFITShbJm9uYkdWZllbanZQdEhsKFtdJGBoV24uSWIvJHVyXzRsKWlgbSMuVFR2''@;'; put 'put ''ODNJaUlJM3YiU1BEPmA0XlhwbVooPGJ8UShuZ21vXno0azU2Ly4hfWdlQE5FNXt2YkR3MyxYakwvI1hNRHxwaWY+NlUjPTF1YjZJSVg7YDBJb0dwU29EJCNjfSU1XmxKX3ZKRFtTcHZqKispTEMjUTBZMFAhWytUOD8lMU9IUjhbXT5ASltXXn58TXRWI1JjQ054RWVwVGIkdUhoS20haXhFeV9f''@;'; put 'put ''XipfMzlobHRlS2dSQmZOWkNxUTEpWFB1YTU0UWMhUFl6Q2oyIiZqRVR0dl4xZDw9THtHMntkRnNEWUteZE02dVBGZEhFSyFDV3UqfTNORm9xTmY6TzYlVDtkKWl7blFLMXwsJnlCPzVjOiouK21GQjZbWFEueG0+XWpTfHtJZzYmJE9bVk1wZjAvLypxeHcqXTdaYmhTamhMKmpoMFZyVEpbTE8/''@;'; put 'put ''MGpWdzMieWNaYXUjImhgKkZ0R3piQVMmS2lVVkEuQWNpelQvVnVkVlkiXnR7bjFQUjFue3JZdm1WYkVBbHVjWmlhKCh8Kjg2IlBeTUhLalpDP3phamlRSm55TjF+LHg1PXA6XWslPlhHXVNIam0meGdVPC5TNE0xM3RJR0N6PWZHandlLD1RI30jezsxTCRLSjUyflhrZThKbUouX1kpTVRRcUFu''@;'; put 'put ''UG41fnxoXmdPZ1VMYFc8Q2skZno3dXdYMzFoJDBpR2hIK20iSzBMKXMlJSxGPXlMTSlWZFFMLHA7SzZ0UU1mTlRdcHM3NVpIZm4+UWBrTX5KQ21MLzd+VEl7RV4kNj5KMUNWVCY3NyFzWD9mL2VbZWAqeC9NITVgYkJePn5YLi5eQiVuKzc3OV1sdyFMWXlNTWVlS2RJRSkqTEBqaEFocT9NaFMk''@;'; put 'put ''UVp2MV01OSQ/WWtfdll+ZTFSaTtzfVg5bis2W35WJF1pRm8oOExnfndVRX1+ekFAaiQ8SVBnbHw9Tk5SOWAwT0NZMWQwa0EyYkBJfmJ+XnM4OExnSEpRfSslNFZhV357Tns4ci9oWDdwWFAjdU4oL2YxKl5mVjBiY0ZSTzttcipWaC5ecWdNSDRjQDg4dlgzanUoYHIxPlQ1R1J9aX5WazRgI0Ao''@;'; put 'put ''XjlJZj9yd1smRipoImdmPEhQT2xCVU5rNjZEM0YzbzlKRnJXdXFWfGJmPDdheys3JWcpTFU+OyJ4el1IJDt8MENdKzpLaV41Q2tLQmReLHZ+dV9FeVV5cTQvLyNhYUNSX2NNOUlKdSlFPzVmWk80bkxmalVFYiksbGtiUCl2KEY/aXo1YVFsOVhUZXFVYFJKN1JtfjE5aXZHeCRpTGEpWWErJF1G''@;'; put 'put ''czQzZTpfJXFib1tJamNIUT4zKnRdTUx0TFI9dSpxa2I5NTRWUm1zezdIQHc+YzRyKFlbVUZCMTYoNi4vLHhLRVYrKi9rdkZVaiM8TGA6X3RVVW0iLD4qSTljZX0mM1Q9W0czaW5aaHdPe2hbTG03QnR5JnNlRF9WbnpLTUleL3lBWU9wRCpIRWl6bD5jUT1qOUNVRTNnXTA+e003JkkiQGZBRUZX''@;'; put 'put ''N3l8a2FyenMxWmh0P2htPXN5fXBkTlUvflAkSj0jQ1NKY29BXyFyRmlqZ19EW2k/P1k+bl97fDR6OVN7dTdmJiNiZHlnVTYpZS8/SmJFeU5Sc0o8eChnUFhadlEmZFZBaixTPi4uIUVqdHJOL3RVPUxVMy42fnE7MFFkQHN7eGFMJGBrN3FpNWg6NkxPSFdGI0p0YSttTmJlYVVsSEVPViphRG8v''@;'; put 'put ''TTNiWSpMeXRMbU5XRnxkfi9iO28mPjZpfFt7amBWbTo9In5UXzo0aDlqYCRTZHFlLlZdRDtAXlVaPzVHeCteTlBMeUl6M01VI1NtaWVSSSh3ezx1PC9dM1U5IkI7LiJsPW1qend0eC41XmYsdjIiSytOO3psZ0FOOzcvN11QZWQ9L3NkW3B6N2BdTSYyVTJyMysrdXxbRGl4czd9Y29LU3ZqSnd8''@;'; put 'put ''fG58NG5HIzx0U35+M1ljJHl2fFA0YGdbMExabGh+JStZSCY6S3JzKCYrVkwqV0crd1YwT3dpP0BGcEBaXjQkU3dmT2pPTmlHWDIyUl5DSmdOTmJ9LyVsPXtQQDVrM3piVEMxWm4rPjxgYUIqT1FYRXIyJmQhQSNScUlDRUVtTkhDJCFYMHRwdzMlYVdUIl8kPzE0bTpqakhNXkBTdWlvXTheWjlu''@;'; put 'put ''c0s5XzBuNyMkUThBTltXeFhlPjI4WCZVPih6bXQlOEFZRi8mOlNkfjRXfDBYMXIsJiFoazI9bCZCPHxrUGo8I0lJZSpycnRfSUlacVN6Q31lWCNNW1Y8QnxrR25UVUl6SVY0KlB0USJESDN8R2Q6XkAzcH1xazN4NnNNSDAwUiZLWXJ5Jkw/fnQoWmJkfEE0O1F+Sn5IQWJhKzk3ejlWVThMWHxR''@;'; put 'put ''SCsibHVfRChYK3EoVHErfjw9L0tpNEZ3bExLTEFlZ111Oy91Ul4/alhaI0RpTEIxSUkmTj1bZl5ZQkl3b0NucXV2OD1eNmxRUClaZk1oP1IyK2N3NG93N0p0VDl0XUlzTmZbe3IsPXVqSyZOO11Ee1BILk9vYWJ+bzVoTiJtNlM5XmBmIVNGaiFxT1JadVMvfkdQQzVUVl8sMD9Saj5xV1pufmY+''@;'; put 'put ''LH12T3x+KC5aPjoxZVN4TnhBKX10KD5fIWt1PjBtbVM3dXBQZXJFQEJ9c2dSay99bCNCSXt0QiVVZkxjTk1yXk9tcktYKlppSkJ6a3RJIUkhSTt1YTMiVVg8UEMqN2hiVEs9JXBEOnReUDJXel9tT3Erczw+bjlpfiV8SExySEw5OE1OYDF+RGU6cT0oSFB1VXA7M2cjQWltMUNqQCRxNmtFeDU2''@;'; put 'put ''Vjt4fWpRP3hgaEMjezJVJkZ2TE9CRCRPeDVQWzYqdVU4eGh9LngpOVpKW2IhTmo1MXR4OzE1Ln0/SDFoUm9ZeFJfcHxGSSY9YFV1ak13V0J9e1UoSHhFP0hMS0lyOFFFKEQvXU80dERkVWhTIWprcjxqMX11NyN6PkhEVWpBVzZgQypxSWlsLDtXcUtwLClmYmh4eWloMT9UcHhhdkgzeV5LS2JS''@;'; put 'put ''M2g2QCtNRk47KFk3QDo+Pz5XRnQxaiRyaClfXWw1TUl8RlZwRFosdlhwZlRuK2dhb05UbVVnP3tPR3IhRHJjNGt8JDhqVFZMUipfZFMkZH5GI29iJTFkQDBIJVo8fVFMa2N5fDF8MCNNeiZbKEpyZkVwSkdVZ1ozUiE3P29IM2p5JjV9dSwoM1NUS0JRbUd0WWp0cFBpOVA4JD0oZUdyczAiXjNY''@;'; put 'put ''PV8yKWpYTmc/ZyxEWEBbLCoyQlh2My4yOnQiSG9yJTh6aVJrWGNxKTJXPkNJa0I5fjBfRz4mTDZiYmN4fCZ1bis5RkJNXnhnIlEocEJjOGRTWl44aUN5fElUW15uUkA7c0J7I3dkWXVMK2MwXyg6IStYTDxRTE4iUUJ7OXliNzUpW01GYV9UQCQ5NSIlcyEmJWNCZ0R7dnkoJiI0MSZ0LHVVam5E''@;'; put 'put ''TUhXW1ZrcHdbUUl5V1VrZWQlfD15fDlsZG5sZTZmVS5ZNmsxNkAuSFdMX1hgZW0hWSJ4ekJTT3oqcTQzfWN4TkFvYVdFc3tHWWlHNVRgJCE6W0pGUCsrZ0JLYGBzcjxXcGJsOyx4OGpZJV9zMyFdfFY8OTkwNzQ2X2NEPzVscS9GOTlnSERKWj43WiF4SyMudHFDYHR+L31PbkV6VFszPSQkNGh4''@;'; put 'put ''YispbDZKNHY4blZofkFvUmsieEkzUWM8flZ0UDR5S249ZFN1aGtNO0NHSkV6fmp6aTRadm1mIzxseHspfXBveEFJaj59IWJpOUNrJFRHX0AwMV8xfnwuVi59UV5xUTUpTTpZbVNnSVtyXyt0YEVWLjpraH0xPzJQb248IW14TX5GJk10eEQ9XWspVEN6W3o3a205UXtlSEMkZFglSkI8eWghK143''@;'; put 'put ''OyRvT3R9c0JaUm9Ga0IsW2wwVVRPNyNQSj9SViIrRS94R1g7OlY0X1JFOE5hOE93Z15UOnFaPUtCIlJuWWlTTWZIfUBhIXEpWHZRUkA1Ij9qS2FxIWNrQkJdZCFpZWZxSTl9JFEid0QkJFtsS3djPE9acmV8P15+OCpjOnlQczYvWDZueHovaXZ1RjxLVHpPdml+Ul9INnAiNkN9eGBMMlV3fWVX''@;'; put 'put ''OG8jLHEsej1CdUwpa2FDMyFnV3w0QHReb19GR2JEJWpqKTp4MndmUSl7VHI9YlA0SEhhMXRFW3I0Nkhpaz56KFV+YzExLDhhXlkyI31GRFchI1VkbGJ4MkhAUkp8M2VKW2kzQEglclQiJHRyZ0tGSytwZ0NpUnRgJktvVExQQUFkek1XW0o/MVk4ME0qSno2STBJVVVHbmxHRClJUmI+U0ZreTNM''@;'; put 'put ''JSZ7YzBtaEhpfUUsN25JOVFlZVtie0dacmtCRllkcHxhX3hvQjAxK05hW0k7WUExcHI/MCxmL2xBQ2JTcjchPUdSa1Erezt+cTByZlh3XW8qWn11JTh+UGJvXlpJZT0oUj9ZSnd7SEJkOiI5OTNSaD13KUlnVjtXK2twfEE/cjBmNXMxIzJWJj1qcEU6P242N1N9dDMlSzIhZyZTdEJwT1lASmJA''@;'; put 'put ''SDJwfFBgVW93enQiM1dSfTRHTnFbdWR+fXNdNXVzZGdpOnxaLG9IPSp9MStYVztdYGg0PDlPbCZ6WUVEaH5COHp8IjwoYmM9dkhHUFpgSEp4TWArZ2k8P29bTHFQdklCPDFuKyl7LCNQVVlHLmJ5I0szSz5zR051SHEpSW50ZnlpSlJaO2dFfiJWayREU3tSNyFZJktjd3ZKYisrYjx+eiokLHVz''@;'; put 'put ''cjEoXkJ9VDhrUzNYUVBocU1DelF5dy5LSTxgeG1RQXFJTl9WTFtqeG9aOHxPTStITV5Zey48T1k+JGFnNlBvNWJ6QHB8MFVvNkhWNnZ9M1hhVV9gN0JGJWVeayQpRCJhLld6LEV0V2xNSl4jS3pzdjAsN09EI0ZOTWdvPCV5eX1EUXFgJF9FWl1YKm0yL2xsK10rallhcEhkX0JdZVAxKXoqeywo''@;'; put 'put ''TVFraktbSUo0MUQ6WCkpWW9UIlBLNEZkI1RqRiNqYj49djhNfkNsRmFmP3UzInBuMUpqWnFqfC9eOlZJOkJ4PzUlKjUyUDt8ZDEscDguPU8zW2RLSmxZVXU9eGtyaUF1fm03QFpSR3hjVE9QN2JiXyMiUU9PLGMrOHQ5OF0+WEovZ3ZRLjB1aDN0QGFJb055SkhCd0wvfCguaHpheS5xbSRmVVhS''@;'; put 'put ''KiojTGw6MEBvWGxCXUlDNioqNT4vVCpjKHoxJT10dXFZSGddbWwjMzlELyE5XzxsdGNsTGt+PTJtYX5NSGlYVF5tSDJJWmMud2x5YThINkcrWXJ4dWpdJXxLMkxeTjs3e1s0JXxGS3hSPHg5KWdRaXteYV9YSlVgc1pbeUBsRzkodHJ7XVpqb1t5IihdeHx8Iy5+dDkkc0UlR2YwUG9SO1lyNCok''@;'; put 'put ''T21HaT1YezlnXl0vPjF0bHIlWEIiQiJkJmZoZTtmI15GU21ybmZOOm5hWyN+IWMiQGIpPUJfYWAoeVt6cEN9ZXZVNzxUfnF6T3hjeDFTWn5LfntfYGZYbyJnUjhvUnZTYzdPIS9jXWVVcks/MSpOLGg+bmEzNngwWmhFYj5yPWNHRFQuYE9aQilCK0c2RDlVSExDdnRgLFNDVSl3PiZQJXcvRi5a''@;'; put 'put ''ajBkT29RMmpGN1UzTkp8SU1maUpSb2VIaUdkOmFTfHg8Qio9STxhVTBqTklVPHZ7bEliYSs9LEolTVV3VXtALGRXPCp4fGIyPD1nYGQqYUhOfV1Gb0hKNnU4bjFnYk1fQTQ9MHsyb2B9YSMvJFE7SHQ8K3RLYEoqemNGUlpmRGpAO1tsfTBoSiZ8N2pjOzB8UURPZ0NaQEIvXSs7amJPMC5FVFdX''@;'; put 'put ''MUc3QjZNWS96K0k8bSUxamR9eT43aUZjRVZOLDY0fVVtZzkqcCxSWV5JaUFRaWNoNVs3UDVLWDtZVXhBbVEuT013cjtbOUdmJiVuRGVrWm1nQ0RyfkM5eUx2WCR5SHUyPXFjVyZeWH43QXghMGpob2hBIkddY2h6Xmw5cmJKZ1BULDpqdnVnOHFIVXw0ImUyP1YpbURJJnBCfWBwNERTfmh0SVV5''@;'; put 'put ''W1d0czNqZ1JjITJyV1lKIXhXY20kY1F7Jit3UiRRTT1Tant4QU4mTz0+bXEuMWBCSj9iSF9XXysraUhMKUJBZTEoNk5sPnx4QWF2aWgjOFZWPmtOSj1SdWYlbDdxJX5fTiF9XjdEJSVzPyFZSm1zYkp+I3RocWhbfCtfeGRkcDppWm4wYntDLyZBVSMsTUM4dVtwaG8xczV3KGYyUGopMndbKXlP''@;'; put 'put ''WkF1e29oZjprVSVBNX5HYTkoYkAqYTpEYG54YShobUAhVjxJfCNyK19OfTZdeFVeK2sjY2YhWSosZU8zOj9VPkJbOFNnSi5pTlJmRSowNmlBfVVkJX1DTGxlNklWYkc2eVAvfUU5JE8oRSMqdnp1OV47UWcubEo4ekhgVWM8LilfRzZQTys7OjRVWHk3fnFwJkdiKDhhVDRCPiYlKkBHcnMhXlJT''@;'; put 'put ''PmdWMygqMF9aQE5jSyR4LjJEU2I/LDRUOisuJjFQaX0vWlElVFcmRXEhNF9qX0hxfnNbVjNefkdPTnxpVU9uey5HJSFJWjkxI00xWDQ+RzN1QDFRTmcwO3gyUThmKHcxWG5ke0VDNE43Iy4iVmEiUHIsaHpVP0FxPWl2IW5sMU1uK1skSyJWbzFwZmUqLFdCeGJdXiZnTkpFKlR2TDVzO0lsSWNA''@;'; put 'put ''S1UqKyNgeGEkflAqZShSakZlR21vP1ZKckArWkg3M25KLFVKIVA7PG1oUjYlLnpqTnw7OUNjSy8pOypldXVRUWs0Q2p6VzFYeFt2fkhLcz5jZHpzUCozPVE8Rm1WPmhrfCN9N1JAWShwLDd2cFJOfV0yMVt3SU5UTHFXeDomaUd7U1g3PTV+UTVaRGRkdHRVTV13ZTZsIVQ/dz54fng5a2ZGXixC''@;'; put 'put ''dVl7enQ1Mk8wI05ZOmZncTxjS1tuX2lMYS9wdWUiMjxucmUsWXc2UTp+LiN3JE5LeypvTS94Rmw4SyxgOS5rcHoyU3t+SGxDI2gofldmdTlNekZXMVkheU9RK2FFWHg6Xy95aFF9fktUQFloIzhkWTVMNDd5clJ1Wj1gdjAmbzVuYWZiSWQxe1dwaDVkXkx6KCx1REE/fG5pcykqdzc7K1dOKXR5''@;'; put 'put ''JWgjfldNJEoxXltvOkkwVFg9TUhYNmc7VCgjNDE6QXAzVWF9LG5SYlJYSVV7W2s9XVMlJCpoUld1QF4pR2I/WT10MWkseXVkQUJhUzAjeltfRXE0SHZHUlZDPDZROyVRKDxNNig6UzJZZTR9Yjded356Kn1QXTZuJE0xcHBAOChOZTlDVjtyMmVGemllOG5KQCkmbEZFOTtFdSZwXnQrWEpVOFo3''@;'; put 'put ''Uj89PXpMRXtfLmJnSVZvZmxLcSZ3SG0qQFt+VisvbV4uTXAqQEM1YWV7RSU6aH5gaEx0NWB1aXBkQmJWUSwvR2t9PWBfK0s9ejFbdDp5UkNgI2UoRSpaUjdkbUF+VCpZbTYha18mYSYzfWV0TTQhMzU3XSt5Ty9MUlFfYFF6JG9lcz8oPHMvPmE8ezNILlFoJiwkL1Nlemw1O08sQFNeRkg8VUhl''@;'; put 'put ''JChjXWpdJXViVCRtS145ezxxeC8/SSZJakAzSEBRP35YVUV3MldKejhjXUNpS2NMJUNzfj9BcCtpW21TNXgjXURlRCk8YVcqPFVZdEdiWD1oYEkqLE9FUUdPRH5WOlsxQzlANTVRRnI1UmNVKWNWd3kuakRHfixjQXBfKkZNTHFfSC9VRjR6fG9rVi9JcElxMnY6PkNESUhzVS4yZFswMzpRRCtG''@;'; put 'put ''ZTZNeXlWIiZzSkBWZ1NxVlJ8YWJ6cj1zeD9MNjFPPD9obUAhSURxJEUwOnpwKShncDhQQmAxPSt3TGdXQG5yWFNJKCh7U0dMcDwwPS9JaktNeDBBUiZldXNhQk4pNj1QOjo6aDRXWWp4aGtoJVZiJSVyLkhCTWBIN3tvP2lYYncsUEwzekxTSHZwNThiUHY0eF0/KShSSyVNPiUwJGdJS3FqSCYi''@;'; put 'put ''TEQ3ZEBVSnFFXzJodlp8IkpvdmU7MSlSTDFTSVREcHt4LiZ1SWw5WUtZW2lTXihNPmw+O0JuS1lpWlR6TUpyJERDWDlpfj4oPHlpW0xWQDt0O29PVDhSY3s+fi5kImJ2Uyw2PF1IRyl6JiYqaHM4XkpMa0FBQyMva2A8PG53Qm8kSlVIIXJXN2JoYVR5VW5qPXRXLiZMTHtHJSN0RC50fVpNMDZg''@;'; put 'put ''dmJsbDZ8cGxeMmlRbm8sK0JofnduQTJ0RTVFPz9PbHwkZVRDekd2dGhHMUlNOkZoUmxyZUU6Mz4jX3xmdGNyL3wrQlBCcC9fIXJsSTx7IlhseEdILkNeeyQ/PjVKVUMjJE5vQ3VsTDZ9czx3Jmd1V2FjO3xxM08pflgpIUR9UUIzaHRVOls6VkYlRkY+NUl6V0daUGttY2piNHB8bXw6K014ITZP''@;'; put 'put ''VyYkOn1rV3xCWmdCVT4wSjtXe3tlME95Ik1wSElpT2hlOCkzdkpeJkAqamd+I0RER3txdGRvPUZZQEtid1E1Pk1YMjtgaVklV1ZBc3ZSJjRFdztET1V1aWozcS4mfjpedDYsKCMwRj9NW18hWk8vOWgkXlVzZ0RIRmt0SmMyS0VJQEk0d18jQis1Vj9GUzl2dHJ2Wi8yaH00Z2lXNi9qSVRrQVRR''@;'; put 'put ''b2Bsb2dFVj46QHt8aXJ4Tnlqd0ZLKjNTNnpXL300YnFYfSIiVTcjKnYuTzciRDpFKmplQ0t8UVNMZEgsR0d6RF9DU2AqMSR8eHRyeiEmNDJWUHVeZ3UwUkV5bykhVXRvYCp3Rm09VVYzPlhoNGM1S0teIzkkNEE5ZiFhVE02TTEvaCZ1QmtOeDVfaj99PD9GdywhdVtLekw/TmgkdkJMLGI3K1t6''@;'; put 'put ''RFN5ZEU6ZCgkIWdvSm9BNSN9UDB2fHRjbWcoKW1OP3RDPktHe19CI0p9RVs4JmJ3c2ZEeClFe0lNTCRsLDQvMVhXfmg4RjVwTDFfbCJjU1hGVmdkSFlWJWg9U1QrNlI0aypmdURrUV0zbUN7d0s8SEZNclRnX203cHBCTkRJfTBxbWdRL2B1QDp0U2h2QVNWUlA1SmgldWA7KHc/NWdJemEsKVlg''@;'; put 'put ''RWNVRDBTVXMpclUyKFJVSXxOMHhfakNNPDwuaUJeMHs/Mjo0RlgkQElxIVZCV2p7fkd3eC9vTmh4UCFPaG9BZ0VOfD0kOFlrST8kbnQ0QHkpd34mNX0oJWUqUH5QYX5IXXZlL1E8LDA/SF8xRXU/cFlDXWpaKW9zc3xhbDlKKGMzeSluVDV6NE4uPUckZkhoLlpCcTB2PGcqSCk1YHpkMF8/N1J4''@;'; put 'put ''VVJAKyIrLnRSZDhJdTE2blYoMWtkJVQkcnZWYkZkMiMyNzRdIyNoMkI4T0IsO3osWTdFdExCYUFUQ2JiY3U5fHFAPGBAY21NS0lBLjhkNH4/ei50YzolcE9rSS5geW4rMDB9NUFefjlrKmdEMFI1V0ZhVFBqdjZYSEtUayxUdVlXJllSKjp3bjtbPDEyTHUmWEA8Qyx5Tzp9dCt4KiR3W2JXU05L''@;'; put 'put ''WT90Xj1ga2kySVVNdSs7aEF1Mip3YG0xQWtYUSJFMHR1dn1hLmVveGZeb19HVDN9Q0Q0SEtpJnR7RHpmeG1TLF16enQzKnN4a1FEZ3cqcEssOi88fXxHKk5Yell+YUs1Wz1oQ3J0LzU0QmghbmV4Sz9RcDImIyIqcUNXUG1lWWUlRktgInVIMDhGdnNUWGw/KG0mfFJJSSlYX1FiZFt5RHdDOEBm''@;'; put 'put ''YDA9OS5QM2EyP1lEU0MlJmUlS3ZKVV5RKlpwYV5WZ2g9TyFLYzY4cGI1fjN9KntWMjRRRWRwRkI/Z1MsZmJ+KUZuPFlgMmtAfkIxbkFiMzVTOmw4W2EmX0VtX0dqcmQ5JDFfU2p1eCEsL2NdTClKLmA1P0FENiVndyZ+Lzo0aSwodXtaM3leRVBrO3JgZ0dOOGRBLDEyQkl7ZTtaYFFmbyUsd1Uj''@;'; put 'put ''RzwpXyVDSWQ/cyxZQCFWMlU4RVBrcWoqcTl0ZDljcHw4OUs2a1F4I3VqUClVUmU+cHkmX21JN20xRkd8aVtLW2xWK3FNI081UGB4VDAuPyFnak1bTUApP0k2WG5LUnpsfHklZnVuampwZT4zXm81Kn0/P21QNVJqV0NVUHx+S0kuTFFocWpRVD4lZlBsdUw4SXlUOTZ2VUw7JTlSWW5NR3lzUygk''@;'; put 'put ''MCI7QDg4KWRwVmxwVFRHNHsiWit4VlQyRiRUMF80R0kwSXNsO0QuYUlNXyZBUSRwe3tQMHJuLGRuWD88by9tbiFAW3JJeClybDBCNH5bbGl7LHhyVC4qSykjNCFXRF42Z1dkfF5dVl55ZytOWlh3JSZXXTJ5dUIsYUtVKGc0bEtKNSxxRitVJFt6UTNVJEEhRSIwN2tvQzEyWyh5QlBeZUNTRTV0''@;'; put 'put ''UVA7QjJFUDAuKT1NOVtOdkImSE1QKFdLdihjSyxyOS9tR1lZOHtRRm44PnBbTzFyRHN9aj5QZ1MjXzZQM3J5NSpbUjdxZ2xSfmhDRilGLzBja05Hayg1OT1Efn5mbFRqPEZWWDJ7Mz1jaXVIfjg4a0hhT3oxLllbWDVDJUs8fEg8REBbbHB5R0R7JF9lPGJUTlkufH12MmVYKyRVJWw3Sk06U2hX''@;'; put 'put ''SyRLY1tZSUwrNTl0aHc4MllFb3RebmA2UWN5UjpbQHZtcV5iNWNsfm80QS85WDVoIXRDLDd4Wis+Q3BscDEvKnI9T3FsZ0s+ejVOQnRaRG1dU2FHS0VdMDUsW1RwOG80VktnQHhdU1ZOPGEocEJkeHYrUDtiIXBlNkloZjJNWlowd0xTNVhoTE5zJlNoaTJKK110WHpKNmRoUXUrVStnOSNdbFZw''@;'; put 'put ''ajcwTVJbYypCJXM6RSNqKiZwIXZDSkshWlEjfVlleS9eaS53TE52VXpoZ2wqMzV8KzRPYkVlVjNzZW9mUCM3LjNpPChzalBNMWREYFZfTzcqcjJ5UU0lJCFQR05kdC5eOl54KDMsZDJWTVIrVkxZIUJzWyZyMlIrJXd1bDgySishP2YyUitPKGUjUUdWNklaImRobHBecGREYG0wcU0jbG4xLk9T''@;'; put 'put ''VCx8KCU+XWR4W2ppWSs9cz5eNjdkbnBnXyhkRm1MVmJjaXQ1dFFGbU0jbHdLVFR+Qik4eVZ9RSFhMjZDJWs/Kjw6OD9bTUtyL3FVbW04Mi5uQlQ9Rz00Ok8qSF50cWcoTk41LEd4Y3dxVTdtbClTZi5ANVA3I19eUGdERCU0XyZTfSElI35kVTZIbVNoNmRnSnZKO2RMIWd6ejx5Nj4ucShsfklG''@;'; put 'put ''bi4hbH44bzleIWdTMmR8JlAzR1dbMTJBZ0R5Y3RjOjJuL09kaF50UmBKTU44OV1sczJ7dlJzTk8kXXg3SUVCUTtOdGhMfUtoKGVETklHeiFUSGoxUTpRY0h+UVd3Vkc2YzUmb1QzP1REdWF7Sn4lZyJnPTN7ZjhbcjVyJXU6NDEzIWVfTmhHKlRLVzZpdlErdFlLbGgyM0JXd3YlQjNSVnMyUVs7''@;'; put 'put ''MzdDN0c/VGRofnI3RkQ8UzMzRDRXNG0uOiZLc0NvcGUyKG5haTRobihQfS9KX2x+PlMwdSEsVUMobktQT0FqIkhfamJVWCEpZEM7VVR0ZXFRPiE6O2FFcVtjPkZpT1hAbC9PQ3JlKVZGTl16I2Q9WTp6LiNQSnh9SzosVUVbckdwI0t+S0lbK0VXWEtMWWhCbFBmY0VmIXc1XldfIUE7cTExN1Bp''@;'; put 'put ''MlpoNVYrYHBdenx5dFRHXiZhakJSPypZTiIpUGdCTCVKUylDVmBPfk59OnM/YkhAYms/fmxLdF1scmdrKDlkRUFkVWx8JmJSQ2FCV0RTVE12alNMOjNje3tgRDIwS1NUNmtKSUBZWC9DM1F0RD1MSGIqblNLLGwpfWg3WGk0OFNNSzsyS0kkYyNXejtSdkddUTAvdSUvaDdyUnh4RFpHYjhNZUMx''@;'; put 'put ''b0trPUI/aXFvPnhqciMhTVViMTxidlVVIV5zaWAvKkRreURlSCJQX1VdOzdSXnZ7OVZgUEBDcV80KnJqczdWdCs+aDd7Q20lciYkKEAxL3dxPGg2Tm5mSyE9Xy5lYFlbK006LGFjV1UwV2E5LiZwK1hrOzRPZl1gRmVIeXZQKilackI1UzRMYD95UTpnO0JUSTslWzR8YFskfHlodlo3KEQ5cjxZ''@;'; put 'put ''dkZ8bHVBMzk8SUk+R2EiaDYheW5ie3tgPmxNVSNnUWZmcW1dfVV5L3JhblNpXlpiIkZmN3M9dTJpJH0yMG4iYjtVYDdjRkBCZy9ZLmMzfUJAZExWbkVUWGw6akhgN1ZhIXUjWWx5ITJvNSUxOWdfWVsmRiZJUX4udH1AVSwpczp5XTEzNCtmSllUNGFYK0t4Tlsld1klX0lQcSRfb11gQDtJfD8z''@;'; put 'put ''UEcoN19nVll8IV0zUEVjIjZrJlgmbEtZZVBTJj9GJTUuayk6bmtwUkhZXWwkc1VaLFAuUHYvVTQlN3pfJm0kJSRZeHRZeWM9cCNqWWAqSmFWQitnP25eQUBZZnZVeERmbTw0b150NWA/Pnp8WV4pWi97PzloJiZOZHpAQ19tPS58XjNVSXlRZEZUYT9ReDJNWzRPfUhKd0w6SkBwaWRkOGQoLHh6''@;'; put 'put ''Int1VlFQe2RtMDgyLmRIQDs3N2FoeU1bViUmW0gwRzUoVUw1Nz1QMU9YKzVRcCluMjBZd2RkRVhyajkyYWNoXnBkQXRuY20wP2RTaDFhJDZDVE9YSTV2TChSMWZ6d3M/YTY6VSRreF1eIUJdNyw5cFlmWGNseF5lRTssYUNSIixNUjlnVzouaipmaVF6R0goWz1EdFY0aXYkM3U6YGkxQXJ6QmJW''@;'; put 'put ''bUV5LkJqYVJvJXAhIXpEcy5yNzghTlU9eFlDckBGSzRuezZjO0l3NXorYXRza0pyKW1NNldMSWdTMUJmP3dfMkhRXW9YX0lvR0E2LjFXai9jNj5vdmBAJmwkWzMkclNlX3w/cmBjYSM6c3M2WFNSWUpffGpPWyxdQD9uPVBLMjpWVilHTVM4cmtafF5EMzh9TDY+VkNSZnMxN3Y2UjdgUGVDKmF7''@;'; put 'put ''di5+Onk2WkZ7JiklU2UvKVJ4ajZhNl5AengrNCwudSlbIXB3N002cjhDcz4xJnwhOGxfSCo3NXtDbXckanJlJERqcno5cUVhbiphcUp1ezdddXs3OjhYYiIwUmRTRmssUmJtbFF1S3cyMT4zIVJiW0d5bCw/TCxzP1dMUikwKCxVMjY3ai5OOFhPZDlGOnRNb0B0fGBqN2VAamM4O1A1aExSUjIz''@;'; put 'put ''LjJreGAld0U/TlNfMzQ3IT53Uk99RzNtSj88OzY4fmozYSpGU25IMm53XyZnLisuJHlCZ2llZCl8UDVfaV9gPylBbWUwJTROUGdgampZOnU8biFtISNeYnJ+O3lqR2FeNT5rSmhIelUxdTJWKnQ/X3c9dm18XW56ZihGY1J+R3syfHpgVGh4PnQ8MyNeN3YjVklxWU91ekkrazxhPDYsc1l1YjtD''@;'; put 'put ''ZmJrR29PT3dCWHRUSDxHcU0+PltQfWVBcz4+fF9EVSowcEM8aStoWjQ9ZyMyLD4/OSZGbVVoSGdQe0B2MUVxfCprLCkqUUpEPkg/S20pP186KStRcHFRP18lRm4vYW13PFhgVkcmYjFzen5QVlo3XyxZSUFoV0RyX0hrYVY/fHF3N2swPE9TQUVdVEczbDg4JHkjOTRkUX14Qn5IbERuOEI3e0B0''@;'; put 'put ''UyMzWjApfT07bVNPcT8pbm8kfGFfR2BvaEF+RDtJZ0wmPlksInMyc0pDTFE8TERAckBGWXR6OU9qTyNyRCopdDEvRnsyak16aThgZWtPPGFtKHVMYDN5d3V0c0h1Nj97LkJyOmNAYm13czd3SSlMSSY7VnFGPE4yM2ZrZkNyaGJzbys3bW0kR0EvP101MXdPeChdOUt0ayp7bTw/XylVPGVfNTU3''@;'; put 'put ''V2gzfEwrUzZ3KSslZUlnclUyaDc7Wyw1NWpReCZNYkA5Jms8YWRXeXFKREcrRDowNU0iPCNjZ20iaDYhSSpSP0taKU9IOW81Zk82ZGcyKG5CO3guZTtKR3E4PU87el5HPCMmcT8rekNVPXgkN1pZLjRqJV8xaUlfKGtYYip3OFUvJn5RP1cvLFU2Nj1jMk8lWWI9PGtoJGtmUkJ5LGh7QG9ZKnx7''@;'; put 'put ''Jkp3JjFjMEIqaklbcVBxbGM4fEdfWCVOPGRSc1hdaSxdSFJZVihxdUxbMW9IODFleSx1JClYSHZ8T2EjIU9INDh4TnhEMGsmVzNYanZoNGJYeHhoPyZUWkkpdSxXYWV1NncrQD4uZ2BKOSVRZEheTVIrU345VEQjXzZJek12O2FkVyV8YXsuVD8qIVA9bEtGdzc7SmVzZ0pnKi5TZStqV3k7LG1J''@;'; put 'put ''YzQjRXs7ai5ueysjJUdVc35nOG1tL0lQP3tLSntRJXxxazE4KiJDZW50ZFEyV1B9ZEkhZW9OTn5LODh1ZiNrQlZpS3g/Kigjai9BL3lzXnIjI1AqSEohcG50c15oKltXRl1ST3hvblJKelFZMzdeQFpEQlh5Myp6ZDJmT2xARkkzcig7QGRFfnZPMEc1b0YqRz4sVT9sYV90P2lQXXtLXzNaWDUo''@;'; put 'put ''OmJOTEdoS2xvNzJrbCl6dkluIWw8OFpuS10qZTNHTjo0cFkobHBKLGlIZ2M2YSxmREE5Lj5icG58Yk5+ISxgW3Jbd08jYDt+KUR1T2VrQXEoWUpHbCNOKkMpdXMhUVBXYlQ4IWYkVExuIj9SXmZOcGIpUHIhPllQVjhYSl4yMGZaaXQsW25fekhZQGk4ITg5Z2RbOTRvPCwkfG8vI3BlJngpc21P''@;'; put 'put ''MTc/MnNzXXhJXiwqQWlXfThJY3pqI1M6WFpqV1UwRCYyeUleQmo6XUw5PjBzSSJyI2Y1d01Ibzw+N2VqZExHSjdCWjRqWmhGWCFZNEEmWSlWPVdgUitGKVpwLkR6bkhXVzgzdj5iQi5RcWZ0ZnVWMSp3d1NSV1tOb0Vlc2ZHQUMlVyl4Nz5UXlczViUoRV4sTVtFbDZaXnF6cUh+SEMre3F7ZFMl''@;'; put 'put ''XitodnAhU1VAfnVEJTh5PFNLMz4raHlXaG4yYGkjM3F0Z10uTllWQltOYGVYOF19SVtsYnhVfS9PYF8jaTlJXTEzOCp3ZXtEUERCXUBaYl1PSlFaITtFL3tlX3UxLGlufXloWGJmRzZ3Ik5zPlRJK1o1T2E9TVNVNnBAfnRjfEFZL15qbzx0TzlTc3xeME5VIW54OXBBTkIuQkBWbnwwV3hVWzh6''@;'; put 'put ''I05tUEp3Iy46OE1PJGgxX2NrdGVyb2NnM0NXbipjR04+QFBrLDF9bU8zQi5CQCtSK3I4P2l5PzNfcmBVYkJFRGNAZ0RjP1JPKUdmNissKDtmOXNDd1hCJTZpd2k2ZEBYNVZ1WHxGWGFYeyZnU3Z6K1B4dDVsTmlZX1Y9WnVdQTVkWSlxMjsqaCxWWTwydjY/YUFtJGJwL1gpQC5HMXciLGgyaSow''@;'; put 'put ''LG1lSilpZXQ+PnpOX2tYIlRtSCVJNDVKdT98fSZ3ZVZtIm89ay9qZiRuNVhgViQ7PXdAaXlSR3ErI20sYXFvMSZZLyRobyRXOyRvJCVpN0xtOjhLej9fQitje1QxOXdeZTAqaXJxW0wrXmNEaVluPyxWZVpwbzVwWmU6XytnL3BoJlg5ajcxU1VDWzNhdyZfM141R3EwczpKUGw2enJndThHSFJl''@;'; put 'put ''YCxzZyJ4YFN4LEIydC4uJGhDQlFnLj9wQTxWbT5rREk2TCxIfTF6YXNdPlJMWn58ZTEyTXlsPGVCODRheDEoVX1lW2chZ05lMTVLaWtvLllmM0V4U3ozQ1J1I1glKUwlYnphek5nei49aGZFK0hIZXYmOXtFezQsOmdeeTQpTCU0TW9HckBxSSwsNTwsVDhXbnZNfl82L3dGViQmdkc4MWtRRGhO''@;'; put 'put ''KTQ8Un5tTEF6Wk41eFJGfkFXdGVlTlh1cShyRCosQjM0c0pbXldVLlFdOGQ2b2dRcWFmPnI5UklHVktWLEUuKGVWNTh9cEwje3hofSEiZXh1N2gsQDldaiU+QF41ajFERDV2OUdWNnRILyQyM15ZTlM9ZzBde3BVRjFtPHBYIUg6fD4zRmFXM0xOUyJSXjEqcSYlPyVsMlprdFY5ZXRvPzFISUdf''@;'; put 'put ''RCFXaHZIL3JyNkJNaUlER0FeO1FHTTU7UHcyWUdaelZUeE15QXc4JWlwSmVPUEw7ZXlxdlE4XyVPeW1vQ01dbWlROHo4OzksZlptclUpa20iRGhTanh2UmhYYDN+fHQuazVSYmw2eCk/P2s2cip7X0Q/U1Q6dyI1RUk/aVIvRTFyRy97P2BPZVtaJWw6Pyp+bEhCV3ZCTz1yaV1Ub3l5QT0+OCt7''@;'; put 'put ''KDk9V1dWRj0sTmtiN05rX3dFK2NUdGRCM0kvOm4+a1EyZW5+Tk4zaWJBMCRkeG9PYmIva2NpLmN2QzV8YmMqJGRnNVhiLEssdSN3dUcqdUB0b14mVXV3a29JO3B2SX41LkJLWUFZWyI3cjV0ZnlXRGp0XmMkRzxIOThHezs+S0FIcVRvLkp0Rytmbko9aV52NXdITTt1PE5iN2B9emh6YiQ2YDNH''@;'; put 'put ''QVVWbStuQWFBbUdFak0hIzUsaiZgJV50ZHQ+cD5CcjxQZD4rNW9vM2EyaV5gL358JmNJOSVPWWI7WWclb2wvUkk4a3l9JDo8UTs0Y08qTmI0JVliR2k3Wnc1Y3VXWm4zWkp4djFNOzJCVGBAZj9oQlIyaFZCUF5hNjNtZ01mLjR9OTxpRGo7MmFJPVRFc19LTypEfkdDQjZ5fkBFRCtFMnUkM2Vj''@;'; put 'put ''NGNjWDg6ZkFAPFVueUEwekp8VjBdNEhsbCxpZzFKMDY2R240JTtDZjhUYUtpVCR6THJDRG01JHJDbCRjLjBHIjM/NDtaR1Qhbj1zbm1sZXJwMF5ie3hUUU06Lyl8IUlYOnl3Vnp4IWY2JDZudm57L0QsWFNrallqXUg/cFQoPHRvdWVVLEhGIVFJbUMzS2Y+LDVgLmJBVGo2OHVgZE4uSEBXVUlA''@;'; put 'put ''VmA6OzJiYVU+c3VnInJUR2xZXy9TaSN4Vzh8Sj9ZcktqK0U3XnxKLnxnaFVvJGZ1aERoaV5YTH1mKiQ6dE9rY0wlIURdRX5LYnA9bFY9NHgrKW5UamltLER2SD1vL302R3NoQSlyY0ZjMkBbYkpDL19GKUllOU8qbF5CPDN8JlA4dVhzUGQyc1olOEsmSSgudVt9dkEva2w4YFZLYFlMK1FKREFx''@;'; put 'put ''aUpJRWo0NSRHcHFeJHVjWCE1YDE4JGRRQ1s6d0osSHV3T2h0aX1iW0p+ZSI2bEomR3pNVnlaJj0kWyhYKUJUKURecUJLRzJPZVZnRlJjcDIhQjgzdVhiczl5fjVGLjN+YDlMdHF5MkhZRkA7V3xiL3RuXUM5PVBGdy5mOWE3IUAjcn1bOClqSzxJUypIVCF2Q3I1OFE8dCZSeXhLPyJHd1JNK1ts''@;'; put 'put ''SkEjI0NQRndONW14dF4pLmA9O25eVEI7S0sqY3BQLC9ddDA2SWZ+Ti88RTVJOHJXO3x9d21SO19Qbyk4JlQoXzIrM09gMml8eFJ+Tmp4bnc/TG89QUF8VjFpMTEzbD8/KUtXPUpPfmY0K3hmViZpYyU1PjNIU2hjYmFUd2dGXnJObGExfSpjSzI0Lng9KUdUcEhYbCZuR1FTaFIzXSY0QVBsOHBQ''@;'; put 'put ''akYhZXg5YzhtfVZNQEdUUCE7YWJVV1NBP3osa3YlbWV4Ol00Z0kicjZybGxvIXhHb0c4eSgpK0UuUncmcikpKEMoTTQ0WkxsU3NlIk0sVFhZNit6eXx5MGRxRzIhd3YiYjQsKV87NldWNWBYe04uJFssTiRhc2I2NjhUL1ZAdnN6Nzx8OzN8VyFTYF5hRG19bS5vckkwPXZ3MEhuS1Ajc2Y/bzAu''@;'; put 'put ''R1ZXKVZxPVtnWT4oRW9nQi9lUHksVVApaktuT1FHXz5IRD5vdF9lW1IxdTIpZzBPek1FTjY2O0A0OTwwdTI+aXpudl17TjA9Knx7N2IuTlshcWhGSXBqP2s4dTBZYT5ANXdJcHsmfCYsUiUqY1FgdW5ncSM1LGReZy85Mi5bZiMvZ2xRP3dNSSRWdCY2JG5kRDlKKUZgbVtXW0tibVomeG5nanFN''@;'; put 'put ''KVZ0KmExRWdKOzsmLn14MlcyVjpyemxyRUI2SmteaWpPLGtSSlkqRz0jbm5vVTw1eEpHMD4xdmxFZjA1a3thKlRhUUgwKyo9NUw8PmU6KSl2OXFUaig8fGtLfGFVNmAxSD19OlZyaDcjMDgvX0whaH0md3VLTyNKd0sufnRuL2p2P15xVkcie1Y1YCZgPzJWPjg4LmNwb0k3Qk1lSjdbQEhFNkxr''@;'; put 'put ''anJKUHc3dkp3eE9MX3VgT0RnJEk6SXBxPkl0ZDImfSJ2KH1SNzVRaEc7MDNkR3lwZWtvdjY/c3B2d2NweltTTVk1PlRWISFgSUhDKml8VHBKWTdISUxhKCpqTCRbeHY9VEZLWUVncSVzQU9laS8+LGx9P2pPW1BuMXc3LER9KlZwJnNbYkl1aDhJd21raG5CIjNFOEpoUTw/ZD99JDJYV0NFYzUw''@;'; put 'put ''UUE8NittSFhZWS5OMCh5fjk1PGcmb0VZKk51aCl8O3NZbUhTeHcyMnxEbU8kPWlDd1JSWCM6UmAzPyg0RHZtWHUsZC5fKS5UZV1bMSxWODkyczFeY1A9aV5CODNvW1g3czx3Yzh0JmJGcis1W1oqc3A2MUgrUkxybVNKJGtuUGkuImRROzhVK2NZTV5yPTdiamsqe3lENzdGdGREOGIqdyYyO010''@;'; put 'put ''WGJATiJaMHdZSnZlIlZwSFRpJDYuWn16JkVrSSNWWCl0QkI5NkBvNUFQITlmOUFlRzg4USx0N3UuTDt8YjtdV3kydig0M151NWlrdHJuOy9IRjZyMDZhbDpWUDZmbDBRRlBLR3xWUWc2K1UrTnc6fEtxfTR9PSxUeXw/cipjIlYldDY/bXIvQkJUdmE7Vj1LREdJOEw5ck5HITMydXliL2tIZlpC''@;'; put 'put ''dEtMZHolMnAvVnFLeSEocVYlUkQiSj9fRTMrOz87YTVwbFYsWGhsWmRyU2xLZjA/bkd5cDovRS5POFkiUG1UVVIxbWo/fm1QOWY9NSx8SkZMXStIeW1ueSYqOChQQS47Sjo0bnUvPHd1Wkt2TT97VWhwNiM5aCYkZCtjUVUudT9ZQ0g5bUw/fj58Zz1qallDPV1KSkpPMzZuZHpPWypWKSxUYG5O''@;'; put 'put ''SkxlP2o3MWFkZSZ4YzZ4KVlIIV4/X19kS2lUJEVbV0tWUSFwPW1IfFJ6TXhgbD0ldE9qYGtpYzFHSnZaVSkuPVk4cGNdVzo+LDVWXmJgTlF9RTsiN3JMOyFkbSQvSS9MaVAqJEglW08hdUM4bSJ5KCMpY1omVT9aPGM6NDR4Kyk3SENWUXhbfSN9JG9yR2U6TnI2RntdeH4uSWNeOFJRTTI2Zjpv''@;'; put 'put ''JDp0N350dihUYXBrRjM5MV1SZlRSSV5+OUhmfix3KF56XSVbdDdxNywlYmEzO0Ngb1RUUm8kMk5MMl8uM3hGVW9eQEwxckdrYSFdXk4scE0sVjp5bSp7Z0xtUD9lODcrTH1Yczl8VUghKz8+QE1lT0hGNihpaWpfcWlPSSJYTF52N3BdM0hMNGpOci44aXo4O1RvK18kOWhETX18OGhELERbKDk5''@;'; put 'put ''PVA9a2VMXShkXlBTQkwrUz8+LiNkPWhSZX55cnpOXSwhIk1udlJ0dl5KX1hle18zMngiYkohUDl9S1siYjldWkdzJEJXZ05lPHw+IllRflF7MjA4JFNPJltMXk13bGdlKHVvdzFuLEl8YDo7bnM6KWdFSXYlfmNwRCJjZ0F6LzIrfVdLNTQmMTVWQ2FxYE58NkBOY3UxMWguQFM8JVpTKGdETDhE''@;'; put 'put ''U203c30iLzpGLn53RHhNYlhrI3BvQj5wLGtxcUlpQy9OQUVidkZePkwqN2tlZWpVOVshbmZLOnojTl5dPTRmSCtuR34kMlkyaGN0PnFOQnR2Py5oTDU/cD4oV1VZbyZ0dG93KGkkK0A+dzZ2eUp6NT18bDYvUHlyZWU7WSVTSkYkNEA/VUJOKG5gNk5bMzNSITBYKHxHQ1laYno1PWJKRjphaCVq''@;'; put 'put ''RShiPygsPU9majVwVWhFQClWRV08aFN9bUlpQmMhfXRecjAwPmc2elEkPkBpdVBWOFc4IWVjJVtUMTtrPiUrL1NkV2p0OFQ9WGFqLkVITEY4WH10OypFNio0anREPXswfDldaUdLfVhANzVjUkgoQiZqPyFmUnFdXzo7Ki5rPzc2eEFsZXgzWyxxKXkiMWpDbEsjd2hIUG13RThPX0Y7JX1Oe2Iv''@;'; put 'put ''dGAoJl9iJjxlYjB3PEhzNnJUTzIqJXB2XWkmOyNxYG04KzF5fmo/ViVOQU91O3A7ZSRkM0xNTUchZHJkc1hoekx6XmNqVkB7WW95SmAjejI7QlhXdHxiOll1MjlMPiRXOHBEQjt5SEU8KERtSD9CT2czdyQvdEA5aTdVQTtlaHR4U3xKNHlMPnJ0dlpJQzxBTWc8fUlbUlh2RT9HKTUpd18lS00h''@;'; put 'put ''WWpYYk9xZWpaJVgqXSxLZjVOTUUiMSVbL1ZgSltWVmlXLF4zQH0iTG9LQ0hdOyJSe2hybGRlTGVIZmBZL157KTBMNjI9cGgsaj8kS1JmQV5FfF5CVStlM28pRzVxWz9QZ3NuKSxnK3I0RiZqP3ZJLzExdHN0WSQ2WGJlcG1RfktCIz9UQ0RoZiVEQl1TUHU6MCtlSFBsLFZwQG1zQlR7VlR6S0pU''@;'; put 'put ''R0g4TStaNTpWdXA7T2NZfGNuT1ZmPGVWRWw6Mjg0RXhJNk5tI04maGpKJkZuUVZpdE0pKkw/VGR7YWg4NX4udT5ucTkiVE9GKDlxfXQsJkZYJCEiPkczPUJVPWM1QE0uTVhwKG58WHExKz9EST1LZChoaXMidk91Mih8TkV6XXFOcmsvYX5qXkxlVkQpZypzekR1OTBxaXZwSnFhX2k7LyxLK1Jm''@;'; put 'put ''QF1KYClrOG8xbGlZaXpuNlVJOVBweUppSmw5fVUoZ0R7PW04ZlJKaTh6ZzRCMWYkVTtwYHljJWw4cDlfTDZZIV19JncxbGA7QD5fcV1CJDR0ZW1HMjwlYyUuaiYiIVM0LkhEUH4yP2gsVm9DSTNSNUY1UDgpRFh8SCUob2dHS2FoSVVGVDZNdTwpfWZiWUxOa1tpMEJoNCxRaXA5NGZxcHM0aGY8''@;'; put 'put ''Um0yTmA0SkxiIUhGfDtOcy5SWE1JcDF+fkpGRyFTMXFHXVQ+QHZCdzF9SUJLQHQ+dGFYbnAlcEE5KjZkViNkcUcrPmMlQEU2L2U5VFFmJG5jMi94UV95ciFoK1pCQ3VRXl5YM2BZOXRfTngoNXZuYFhpeV5gM0dgVyVLRGNVN3R4KmNtUiZQaS5yWSgrZXUlI1lbemFsPFZfV2dbWmVraUszd3Uo''@;'; put 'put ''KkxncXk2eU1yT2YuS34vVUNAQ2B4ej05djxQMm1IMzk3SkxOZ19iY1QhJDt5WG51eSVmOTxDUV07OTE0MXlzezhXWztxRHVoNUN8fFVTLmRWd2AwT0V+aWomYzhvb1hefX0/amwkanprSzdjQndvb2x5bG9gfk0zakJoVzBuS3FBVVJSV2FgVENxPiFEbHZYW012a0F8bXtVNjhKLGMiVkg4TWZP''@;'; put 'put ''dz04T3VycX44MHJyTCs9REcudnxEe2JWOGpIVyohQD5wV0BOdHFWekhJQiVbUzlbRkR8cWBsPzFaTC4/eVFWU0U9cVhmZUZ3Ty9VVnIxakxnYWQqUXtFSUZZRjw6WSYsVCE2OldQMHIuaVRfSHd2d093PzZgQW86cUt5I2RbWzV0fVNwb3hleWBII3U8K2NaVnp2cixKZmJsQm1fakNlaF4/KUdp''@;'; put 'put ''VkQkQkFkP2MmZDBsKzBvaXx4QlFdVz9kR2QjdDs6SkA8NzBPJDxaSUUoeXNnXixjM1kjYHMwYmBYcUUuZzU5QzFlTnc0VkptLCVlaU9IPjd9LG1FO3spWyZDOEZaOSthRHkrQyRCXkV8ai5aRS9dWDFXcEJVYyhWdVdddDV0WHdORCRCaEslWE8qfGh9aHdaeEBQKCRFMl9OUkFhS19yYC9RdkBF''@;'; put 'put ''S0BOYnN2JCUlXTV5VjYrbSVaViVpJSNATX1GZVJzbF9qKmJMWn5kXipidjFmJkpYZy84SEppSShQJXVfZDAyVFFfbkp3Im8rJXwqZkRGZUQ7MkhjcFp8bCxsXnwzL2RRU3xYa0VXQ0REeWQidVFSSz4/OEFFXklgLCkuTzsqaG5aVTVvMnt1NClQbVUwTkc4M3g1Q2F7djdzeHBeRDk4bCxLbz45''@;'; put 'put ''VkhdNVdtVXwvS3V7V3g1TW5geTF2In5DbF9wV2NzUSpyWHMhSSpRYElnSXRzfGxJJHUxN3EkMSR9ZExHWGZSOi9jSExMSHZPczdeZGM+Q0c/Kkg1Z0lCOEFNMjhyRyxJenxxPixjIlZuWUQ3WjEqUn1NNl1ZODZVNEI1b0x9dkpfe3FHO2I0Vz9yIixuRUA4UWhyUWJNTCsuXTxhWD5tN25EVX10''@;'; put 'put ''P3MuXnVaamY1YlJqKihuaVksK0w1TWlSPF5vZGcmQi5Hcz9GTS9oSWJBQyg0KEZ4KCJ5dzBnWURQaThXOHt2JEpsRCQyIUdqKlBncT5SOF8xb2V8RDlUWGxBcDtDZyZ3aUZPclNrSzFLb2gqLk9XMjdSP1hBZU00dmUxcVhIWSEzXV9UX2RmMC8kZSVfa1pWc1BYPT8qS2lzblBxfW0kVC4/anZm''@;'; put 'put ''PyxBMSs0KjgiTS5WV011Ml4pcHNeRFFpeXUhOzNxWWZEb0BWfEIhdllmZSFPPjhueDI4c1d4d0xaP1NKUWY8ST57VWhkSUc6d2dhYUhFRV15cFpRNlkmfFMrUCY0UTdfTWlWPSpmR0d4Mlh6XzdCO1VqVEA8IWo2SnhSXjNPe1s7YThMTndnSFd1JEw4WzJXfC9Rb1IyZXpYVz48LiR+fFtWc2ZJ''@;'; put 'put ''R1FnMjp9SjBOWGwkSnM+LyliW1UzNUJeKGxSNUczcHM/KmprdkRUPDc5NUQ0M3Q7aWRQJDIrP2FicXovPHlTWWI5cVdoUik8QF9qIyw1KS9SOkdCa3piaUQ3SWp5WnhDbFtAcVJ+KFNlbT87fGA2ZDBdTzo5d20kKV0hMzIwX1NgbFBLaW18X1NIeGAmfWIxN2pLcVNYOW8rKURzSSp9OlYmKix3''@;'; put 'put ''aGM/LHBAdSF4MmdebGxXSWtTTDFSTDM2MDQ8N0RkXmNQbzU3SG9pY0NHeXN4Uk9yPitmT0d5LyVfRElKeHs5XSVaSml+diY4by9jPjMyWlZQPDFeVFVqfnhpUE5ZXmJhMSN2PUU7SVRNRF44dHIkbjhnMjlJaSpEWXZ2diQxYTFFOEpbMFpZTihecmBXMW1LeyYmJT5nOjNdVngyMiZ7LHMzbSR0''@;'; put 'put ''JWoyTjo7WiFmcHpCVXwmKjZdbHFhRzUwOW1we1NJRkxkSiElb2JUSnlMWWtsRTZCezVifFpaVixjWDJaVitjY1I2Sz5yKVE7YldwKW4sP2goNTV2LEQ+JlNGWjhmVj1jJkpZMmRvJWZTTikqQCV3QHFPUCIxWyFUNUVVWSpAPGcpQDwqKnAsJWQ3b25TIXdNNGFrTjNnWWl6SlVvb31PSXcxPCNo''@;'; put 'put ''UCx3RElhN3YvTCl0Q01LJi8mZ1MvUmpXam0yRjk3OzlYaH1dcDh0cjEpZiw9a1A8KUAmPz5PTXUpdTN4N3Z8Vi50THw9PyZyR2ZrcnRkL2k3NlA9JmoxWV1iakk7M2I6TGx8dlU7QD9rMi57clZNOS5TO0pBbjNDR0pxMT08OSpoMG83ODMqUkY7TE91cHIkdjIyaSM4Kjp8IS4mN3Iwbjp0Y1lU''@;'; put 'put ''WVE2eGw5XW13SGUvJGo5XjwqOHUwUHJRayVVMDg+Z1V6eTd8W058NiV1SEo6NiVNbDhmMTJwM0UkbittOEJCU2xgM2V7Il5lZG91VFRPZmVQMUNGS3VgPmxIak43XngpfFZmRDhuajR3THUuRTYjdGl6azVreHg7SkJtOUh5T35lKVlKSnU6VTJ2K3cmYUhlSGhNbEBibGpISSouSnlnfXc+a0A7''@;'; put 'put ''dykla1pRPFlic0RdJVApOWpDSEVIXVhRbnZ4I0FLIVlVJUM7Q25JX0xXXjtvfV5vLkpNUj1HfXF+YiplQThMPzgvUnl2KUEzbUJCeUclVkVxclhoL3k8dEZ1LG0+ZUBGUHxkTXVKOVB8YjdCZUgiUFpSRHxndS5yYkBGdmIrYXd8MShuYDU+VToydUFGVjg5NzUodyQ9eWFWVjJKZm9fP2NGe3pf''@;'; put 'put ''cn4+b1N3SEduMFpTRHw7MmhgYnIzSGY2VVVqa29BIX1VeV14IWMrTnd8d21TMy86YSowTWVeKU9OaUt7P1F2M3RHJiF5TCpYXlNNRl53IUg4OzclfEFHNiU+bE5ZbzlZRDxsfjtRTjN7SDw1JllqVzt3ODglZDJ+ZEdgemkkSEw4RTg6QEtZd1JgLmMrSE9rI2VyZy9OXiRkMTt2OiRNdnpbVmxi''@;'; put 'put ''Tz5TNC9oZjY8SWIxU1lUbU5ZQk0zcGJ7TE5VJjYlMHc7IVlPWmVFWG0mKStKP1t5Z2RSOy9HYllrQE5AV2hNVX5iQiV7UEZwYU4jMVV5bCovOVFoQXUsWUU7XmtLSHpsMShobWgwYnFGOX5eKDxVfms1V2khPyg8RlpNdUQ5czxDaFQ+R3N7PV0hOj04T1trM3lwZUwiTn0kL11GM0VAeDBZWFFE''@;'; put 'put ''TXNlc0tlS094WUcrZCZpVWUoPz1rey89UFA+LFpTTS5ySmNTUDAuN1VzeD54QSZ3Kyo5KFYwbSEvXSVIPWQkRF1uKDc/JiEvW0hRKWJESSJyKHAvdU5zV3plL0ZrRUAoIz9rX284JChKbXhZJiRyZWNQfSx9fGRXenVMKndAano4NGxJTmQ/SGk0fSpnVmkwPmI6c2k2PmxpJGQvbiYxaDBTQ0VW''@;'; put 'put ''ek95PiViT0hkZHg1TU9aPC56NTt2TlYrXS9oOGF3WkorKT0lRF1+RWNjZCw3cGtlTzw3YllqOW5zVWBeNFEkSmJgSGV7ZSI7dz9mTCh6SHNOOjBKYFZYbTY/Qzs/SXJ6RFZEZD5AWzlEWXg0QHRNfGgsfkBlSFhfY2dAUk1QP0R7JnlYbFRdY280Wmo/JEArbWllcyFqckZmTVVJdWZIfGlaUGhl''@;'; put 'put ''aChAQmk+anw+Zi5kTSF+cEYjMFJ+d2Z+UXY3XnE/XjFmLkZuOVpydFU8U3ZpPltFYU0yP31kJU06ZW47U3hgRGdhP1h9Mzw9bG1gT1FnQ085bXd3bDZ7XXcvMTFIOkt2KCxOdmJvTFA1Z2NDTEVCUmZuYmJQQGMqZFd0KjBXMGgqQUIqNTdYZkJPVVVxaUtpWVVjUXM5WHpCRlgwKGB4SkkmQyo1''@;'; put 'put ''djd0Y3spJEFIVSJGRnQ0d343OVApIl1We0d+KG1MUDVmdiErNCttRXBwJk5AYztMekxDQ1JubEpRR2tIVTYuaHR1Qk1oXmpTWEtGT1lmKmc1ZCs6bGlDZDRSb25AYys6L0ZlWmZkYmVBPH5MSGFyKzdfLEd6QituTXQ0d2ZKMEs0b29PYkQsQiJ5RTZXQHFfd3c8RTJuSUJVSHIrLltwVnhYJEhQ''@;'; put 'put ''ZCpkYk9YZSxESkc/aU9HKjV2N1pEeFdjKTooe1J8TFA1QTghQ2JvcG5wNDNjNkYxY0FlWkIpTFJDXkhwdn5XY1lHZDBRWUByVVE/X1g3fn5mNDA2JkZkLDkkbWhtfUUld3A8TXlBNXdQck9UVEFQQCFPKCZhQjFqIWN5Wkdra2NjbUhIQS9KYGlMJEVAT2Q6QTo3dntpekllZ2IzTC9KNTdFd15g''@;'; put 'put ''TzBeRj9Ccm5Qdnt1WjQ4RjFjZFhfMDJSL0ZHQ19oOUZJem80JTxWUntDS01UaiJDfH1FNnN1e1FgWE8wdTB5V1NPdXhlT2FTfExqR2dtNmFjdjQoXU5ZKUZHc3dRVyNmdEI1MjomQ1BVd31PX3l7RywmQVlTSik6MlkiZFhHUUFEdFhMOkNlR29PMy8mXy9reDdSd3lRJXFYbTlTInlFNmoqTWhr''@;'; put 'put ''U0l1O2FfWCtNanpTS0V1eChOJnFGdFo5WEZCSUNiP3ooKUhJQlVIQHZEKSNbR0IpdSU0X3Y6JmdZb1lVXy5ERjhQVl5zSThFXSwsZjwwZUJIUj84fTJfYnZWZmNJNEMuQyhBeDZvSGhvfTtRISxuYUt0YTchNlg9XSE4dlMpaCh2NDp8ZiRHVT1+fGB9M3FkXTs0Kik2SlVSKXxCQjY0OD9+V3pa''@;'; put 'put ''XzR4ZE88a0lXeF1xTjpDM1tjd0MxY2QwYFA2NndiWWJBL1djTmZzYSlWNF49TzdNPl5xI10mbUNqfG95R0omKls8fElme11mSGsjL3FYYkQ+JTR2X2NKaVBSVHMxdV1+bEZpfFpOQC9FVyJZJXM7PVpEWkAsdTtmMTt0dWA4UXNVK2o4c2F7ZnAlUnkhYn1udCRyOHwlZSZsb3pte19oOHYqeWk+''@;'; put 'put ''OVRgcj4lSEpjP2xPXkxrcjkxZkpXKHBIb3c/RzlrNWNdcDhse2A7aUxJcEZtOXhGSVRaIzkjY2deYltHczN3KkVwbyYkbEsvYlc8KltvWV5pWHtzQ3N1IiVgKDxaRlJ3SU44bn0jfUpYUHJnTCZIM280Z15Nd0liS3c8OTI9U3dtYixPM1VMTCtsLjR6MEM1cjJYMTRZezpaRyExO1E/W0NHI1Bt''@;'; put 'put ''PV1RWzBvOWgpbjpmX3lZJHt5Lj99YzdSLy5JKTB9SEs7RG9QfTl1cytpMEt+QCVuI1lbP01wViUrLCtES0I9MXB5YnoqJk0hSWRSbj18KHxyWmdaSWI7Rjk6fDMxLiVIdUY9eWpaZ1BNTihoSyJ1cz9XQ3s6ZD1PXihdODQxLGVnRWZxT3lQRDZLJjtPKHVpbXl8bVg2W0s6Qm4vNEleMy9kIyN2''@;'; put 'put ''dDByeDJtRiRgZHVIJCg8byhNbTw1WVlHSDw+UWNfW2tmSWJqRnM2X1YkRyZYe0k0YjczNS5KS081P1pkNVQxVFV5Y3ZpW0ZnaUU8JEA5Qm08aVNPMVVgVUckSCV8NjpEK3FHcmBwJFExJVBRdCVze1dPRCRFYGlmKUBuPj9GQ3h9bUs/JjNXKUV5LGMmdUByUls7ek4vJChtKzR0aXxDOigyT2Bx''@;'; put 'put ''eyNkUVE8V3RWVGpjVz84USJyTHJkRWdRS2U2Y3EmUzBYUC5SJkgySCxROztidllua0JIJDZXV3lnVjwubyQ3anxWMzlDX0JFVzkmJkkkbmZHO1dXbFMwJDpeY04/ZyY/Ji84cCRbVkkuez9QYmxdQFZLfUtAXkIoX3s/Slc2RDQ7ZVM+VHs6JDRNTToiJUJwfCImVTIyand0UVhhcj9NOHxVO14o''@;'; put 'put ''a1tMZWp+fDFpVWksWj9Ue2J2SWdkJDVgKmxtOnBDNnBgZ24qZkU1WChmQnsmZFQoVXByVzg8YTQkUzJKJERHbWMza1ZKbyF+XlcxXToyaWZpP3xoKncoSW41UnpPUD11bU5xeFtOWypWRGhiTiEkWSFzNW83KFt2Q0ZTZGlSIyhdYnZmLmkpY15AJCVCbUpjZFAsbitDXkw5JTslajtrK1pOeihu''@;'; put 'put ''MjAkdSNdL2srU3M/YnJFalc2Xih4fFpwWmJWeXE1JGQ1TixgQW1kdl4hPXRNKUEyfURhYj5fLkpdeyNGP3J5djZsRjkpMC42R1JHY1FKViw7OmJ2P2Z0MVJrLEFNfH1OX1UoWFp+MXczLG9hNT5oVV8zUjNILEgwUz9gR3VzZV55ZiJ6SjZ+KSNRdjFddDQzN3ZfWUZpIWZlQ35UZWYpWXg0Kjgj''@;'; put 'put ''UX5OInZJVEdsL1tFYzJJZnZuYExAJHgiVkQyMWhHQytWeyxkTz9UI1FFVEdgPkhUKnJeMX0xdjdLVzVkeSFzTnIueXMmcEwrR30lPmBuQkQyPFEiQ0JFZjtJay83UFdJLixIaE1jZCt8QXUwN1IuaXVGfHkyOSZ1W3ghMi88OT5rXSlDUzFUdlE8VmY6TG5JZjx4M3JEbWtdajF1R1pWL2c2aF9B''@;'; put 'put ''Y1dMKXNPZ1Q2NlJMPmQoPz13Pm4zS2hxSiYpfXtIWVZ5YXhpVTt2WXl4KUoxMF51M1Byby91ISEjek1qe0wjPFZBeDxWQVZuYWpiPEt+cDFsPjVeTlNbU34/UFIhMVg2QDtkTXVVNyopXSVKUUh+IXk7VVRxRWYqPyxiXyEsW0B8PWRKWz96XWBXaCNeRDVdd2NFS1AsKGUlUXQxYkFsUzV5biNi''@;'; put 'put ''U1VDJEJbIThCJEpHR1FCOHYhXzJQYCZZYmgwOjZiaTtpQCtRQiFKYTxwQFBCKDJDJSpLK3JeTG5hUCtKPiEvQlMoQkA2aF13e2FTWSx6MiR3dD9wZkJwOSpgKH0rX3R4QHdlKmNbKi4odFBUflM1RHx0OFNPQylLVzJNUG0pYVBhKmZMckZkLkRSZkQmdFBLQiVsaDwpZCxQbFFlSHpDNEFPRG9v''@;'; put 'put ''WXZYL3goQDAhJWJRIyZIazclaU9mO0EmMzM8KSJTK08/IXImOm4lXj1zWWAsQkQkaXg4dWw9PStxYTgvZXlzP0BASFJvM0ZGMixURlRwbkVjaiI3TE5VXUQ0KXxxJUhdJmE2KWIvXyNgPVJSazJ5UilRVj1ycT0sKUopRXVpWTp6YHxba3NgMEoqQlBNJmoiPXtoTVkwVGVJLG07aDUkSnZdWDtQ''@;'; put 'put ''ZWBoY05DPCI7YShbMXRpakF9bSZwK3cxeCtXZzJOSTxvPGAqWGheclVaOEJ8Tk8raztXdjAvXz9TYWZ8VSNwV3lpNTpgQnZmPUUuOXpUeWA9eTdRb1lHdjFIZH12VEdRbDc1Z1E2ODNSMDZjcmxSeVlwdi5XbGU0XThwOnQrU31zXltVaCQ5OXpxPDB0MFN9czpVNmp+OzxrSy83T082fClFRHMv''@;'; put 'put ''VH1RWjFkQzFRJj1JdlltTUg7SyRdY280PHRQWWo9OClTblZiPWM9P1o+PiU6alYofGdLXz5zODAsaHU4dzl7fFtjXWtTMXJHc0ZWaCtGdFNkRkpgVlUjKmM1Q0tkTX5SfEFTQjE+NCxjJmpCPEMoeiVOYis9TTxWX3xRUWE/IVlEdkUzNzgqeThIbUlUUXF1cEcrfFJnYmoscyI2aj5PUnRyaCZV''@;'; put 'put ''YSl5a1VXWGF8OXN3KjVbe2hqS0FPP3g3U11GJkwxa3N1OSg9T1EiKWxCMXA8dn57Sk9jcXFbQ3JocEx0dWxBU0JKWEBWfDdINEUkdkJCWF5kWUg3dF05V1g9LDhqclJDSEY+WU9aI3JNblprMyEhfmk2W3hsJlQ1Llg3MWJYO1s3WCxVbVQ6L20kazdYMmE0JngkRmdZNk0qeCx0TDZWVmhVSilV''@;'; put 'put ''JTVIRGFfdHZnU2FPVmYlKEN1eXsoOnBuUTIqXyNkcUc+KGNhPHJ6WDhAJV8leWc+ViVJX1JHMjF4bGU8P3I2diJgaXlSSj1jbzZxYFg2QlI1dzt6bGw4bTU1Py9xLGMhOjVMRHJoe0w9TWw2cXhhVSQ0InklW05KYUMkd0FfTCRNaltAd1B4JVpsS0g4YFJnNT5jOWc0SUV7bD9lYEA5SzVdTkk5''@;'; put 'put ''LE5SVX45QFg9ZV8ibywpMH1NUyVeQjszZEtHbVdQPz9OT14scXsoMywoY1JuIzk9LChLZEd2Q3UwTn5DSnM8Tz0lbFopM1leZ0FhIjFZIzRTaktucXl7I2tKWl1OYS9pZX09NmwhZHEhKkVARXNiLHtqKnJbPCNqcks4K3tTZSxlLzAmOn5oeGcqaDwhSFtOYShme1phLE9oaDhzQDVkQWRTYiZO''@;'; put 'put ''Okd5LHRDbWY+LHA4QmlZQihhezQhV0NtREA9LF5yZHZYQnIxb1l3SSlMbD9STGkyUFV8R0ZsUGZEeElGXjFvTyptREZYNSMrIkk5fCpQZUxkKCVTM1VYQD9UWGIpY3pJbnQ0NGgvPGA3UT1NdGQvOGY4dElpQyhCfE0zJm4vRDNPT2Q7MnFeTjdpTm9MNnNZNmU4QnFqelNXZDRAZippamJlUE5k''@;'; put 'put ''O3I1a1spXnxUQSksUlg9QEoxXlJRNyQ5OCIwMnc7dXtpZzFnZmJ2UF5UWjpHYTxnKGwyJiQxS31uP2hFUiJ2KTZyP2JQb3RRWG9uO1VtTSkoSj90Y28wW2JKfnJhZkhyM0JVQDk4KCVfO3xPWG4kTj5xNyNeTlp+az8pQW1bQCI0I1poeWcwcik/dilOcis7IjJsYGkpTUFsK2xUN0I2bkQiNiJI''@;'; put 'put ''PHd+T0NsfjcoZVFZfEphKmgpeDs/ent9VGg4bUR6PXR+WiN1MVAiO3IsMl5aVXI3OmshIXk2WjdxMHRsOkBEYi52SUZkSEM0SWJhKl4iczJGdTA0ai4iMT1NVFdeQnE1Zi5pelIoT2VFdyp1JXcmajp5dXFEYlJIT3t6PEUuLlcsNX11ZkhwSDVINktqOT9ENjB6VE8zIlY9dWIvIlY1cCxQcHM0''@;'; put 'put ''RTQ6ai81bGgkJFQ1WzdyYlYmbnVfIVJDRSkvfjBFciQ4fWxRSUNieG5JKm4vdSUhe3whNnJIW3hpKEtFUWVPdGRAUGFVaylQLnNGKnUjd2tINzN4N3F0KDdhWTVXP2RbInxXN1pPLk0uL3ApekRUSSM+VVMxUj5qciEpeHhxe2JVJGJTQHtbbiFkenwyaCljKUVNekNMWVZhQ217USRGN2RqUyp1''@;'; put 'put ''azEpKmhMOUdbbWUyNWJJWVdLV0QiWSxVfUw4UWRZdi9YMUx2LkNET1VVJk5+MS5kTE51RVhOKnxGeXlRIjNnZlRONTdlIUE7U2RQWUU8dV0yNyV0XzczbCNVfXcmTV5vKDdYaFRsfXciKUltaEgwYldIWE4rMDtvQVNSPEJpOEUvOEx2RWZIKyYvfTxSdSpxUUo0R09Gb0d9RVg9TjVYUmdbKkxL''@;'; put 'put ''RWN6On5PQ3RTM18ufGdANzgkKmsmQ2lWdi88eVE5c2VlRSl4cC86OzVCdl9eJk06bXZ9UiRCbjF5ZmI4bWpibGlwRTIjWjwvbTIlPFFzWXd3Z1Y5enhEbyhuWFlMI0x4cUFVc3NuYH0/Rn5dbEFVKWdJT0FAPnNpMTVbNmhydHMycGcrc11rcSwiZz1Eb307X2YvJU1YIUd5ajdEWHg3alZAVi54''@;'; put 'put ''I3dzaVA2fU90TE15YXdZdnRUO2QqRj8ubSU9ND9NdERdQD5YfFZHOENbPDlddDo0dz9MViY8PUBFVSNkIXlQPDtHfVBRZiFtKXxidkBMLE5yYl8uO3BuMkguJWAjMV8vTWd7JmU9QWB5YEsoMkJhZjojb29lUytjOXIyOGxYPVtOZ2QuYmJ+UyxkKWlnQkguQCx4eVUzZSNARytrWUh9RVpTS2Um''@;'; put 'put ''VyRfIVgwVmApfkkzX2JnYGdnMFVXKHBJMyx8OyNOJkhbZm9nK0ZLVyh9RzczTjNLUGhMRGtxc1lIZEZlW0o6NXJvdSlpRG1XPjQ6eFRmUGwqanwmKnx6alJLWyFmclMwJFVkWiQoUCRqLjBHWyQqQ2VHNXU0cFlsNmlTOSM5KjxJSW1Mb0YpXWsyWFk8PTdAKGNeez5mOGcpUmlvLCVqK3A+NmxI''@;'; put 'put ''OktAKTVDLFN7OWF8P01eUDVbUmJ5YHBRPnJRUlslPiFmc1ZIfiFacG4rbSNOXUg9Q14mfTkuZnZEYEIlWFZNaGgyRntuL1dTN0V7Vl16dCVtbE02UVspZyV5SU5dWz1aY1I7KlV7Ii9qXSQqbi9nMkkuREBbWmcyTXltL3h6TltZJW1sa1M8eFMwRCM5N1lVfFBGLFs5ZmQ1U3FlbS9+fGVkZTte''@;'; put 'put ''Q08lYzUrblh3ZnhIRj0za0g1IU0rY3d3U25dOjpnSyNgJXA0czdHYDolanZ0eDUvYXg+ZndHekNteVlJSjV9JWN6R2xEZmAyTy8mNzskSEhiSVUxeFltNj45RXN0YVV9LjdLUXRuOjAxO1FXdWZxOGp0SkQ+JW4oVyhFUnU2Nj5SL3g5anUxZmpAdzRJNXhZRWtibiVwLEVEN3dQVmsvZ1JqYFJF''@;'; put 'put ''K1Y5ZnkkbHxBUmNJOWs/TDtCLEpeRlY8UDJkWVplVyEuazAhN1NXN1YhZjtpK3FlU1dBeEV5fXEvUnZ9ZWYoTVtxUEslI1h9L0UscTVjOjtCaUtLWTQxd187VUZbUCIwZXhHQDB7a1dAZzwyL2M7OnJheGhhVzpLfGFRJSRxX153Qzw9VlJkQzJQbGwzd01wSmxvWERpUnIraUF1cFhtU3U/d2Fh''@;'; put 'put ''UE5FQFpvSlA1JUVIejcvPlllJlVkW25oQyQ4c1B7WUxnP2NMZG9KRDpBUFA5WGNYWlg7OT9wWWQ2Qzs5P1AwMzluT3tWP2NvMnU8ISp7WSpNfTh4YHZLJmNoVy57KExRQXJveSpAKnZvWFMzJFN1THFEUEIreiMwdVd+YDo6UV9vRyVlaHlpVCRjNFtISzs0L08iRzkoTXByZ0pTU20kaEtdTFNb''@;'; put 'put ''OiY5I2p4OENJOmVheVdWZ2BnMG1HdmFhPT1wXl9nUyZ2NSFPZ1lwZUsxKSo2SnZDaypRVDxxQn0mUSIzNGw3bnx9UzdjOXV+XUNlSDB4LkNFPG1xPyhmKkFkM0dHdlAqKDhxWGVnJEhKVz1QVlU0R3U7TE4objAmb05rSFkjY1lPOnteZjguIV9HaWV1VG1wPlVAajlGcGN7VCpELiFgPSlJfn05''@;'; put 'put ''NWNQLzJ+N1oyKG5wQihOZj0vRmZlbis/OCMpcm9QNnZ9Rnwkbzc4RktaYUJeJk5QPG0zKGNpdCovYClUJnFVI2ZRU2ltcStMN20zajswVTNVJl9zaXN0NCFFVTgoNkdbdUs+dyUrLzFpbDEjW0k/fCVEdnEwWDpMbDlFcFkyP2cqTll6bEFlMnVxeHpZW3VNOWFENktXMVFWe1FnPF8zW0Z1dCRO''@;'; put 'put ''Ji9fKFc1LkEqKS5jPGVoejNdUUQre2pyRm1QJCRZSks4XTZAS0lffUh4QiF3TyVVfWEhcjdGdXc1RzB6dUpgb2NRVTE0QkJAdGZodUhNWFNHaCV5ODBFRSliNkt1W2wlOz9qJUcyP1B2Tm0oOUpvciNITCV9bTdoPG10MW1IPSlNMDFhM0NQOH5RNSxPKk5kdm9kS15OYEB4QktqPz0hWk5oZ1tQ''@;'; put 'put ''eFM+ZVo9Jj15USZHeWthWSYlTHpxS0ZYe3J0OUVgMGwjUXM0LFk1am1NemU+JVN4Snw6QDdqbFNJaTlXOCt3ai94eipbOGQsYkpgempSOCVfIjQ2ITMvXWdkZjh5ZGV4YyhtbjBXYWw1ZmZATTg0Q1RLaHVTPixhaV56P3ZLNzxWW0BTNipuTHE0UWkvZ0UwbypKdTJscFRwTD9qQGEoS3k+d0RG''@;'; put 'put ''M3szNEhKciU/VGVmdDk9UHhzcGxOeFQ1bEpUUj1HbVlbdXRoX0EzYGZpZUczV0lpOHAuUV1OeXFnSztKakdeTHB6Q2VnSj1QPWs/JUdNISNiZGRvLD1UOkQrJHdLNUVmS2JjNzE/YUJrOXp2cWFRYlRyakc3dmRHNzM+MGxMdk4sLH4pITFzRm1dXjlIMmk+UzxWKjZ4VUw7WVImUCRRYEF2SmA2''@;'; put 'put ''S2ApQlkiU2NSTWIpJGlxZEdoa05uVmclYT82KzN+VXtUKGc7SDNRbD5+cmBrTFMvamk8ODRoMWZ4YUo5Lnp5d3EuLHFsIUxtMX1gQiZYIzopdlI9T3MiMS5sXVdLcCk+aWIwfDtdRTEjbzVAckMyPDoxQnRNak0mWjg3SUAkb3U2VXsrKUBAUnlnR1pWeiYwWUk0O0F8RzRoMUc4N3x6WDFYfVV0''@;'; put 'put ''XzQ6OVt9MHlKYHROYU1iNjJAMSx+NXxvOygwLH41WDUjK35MQm8vKC9CaXxrU2ZmWj0ja3w+ZUlXTUFHTXZaRzV+LmI8JWhwW0A9ImBAKGdZamdofXdPTXYvaXlpMV8pU059UlYxJVBzKntgSmVtVWQ2WCMxNTB4c21IOE09MG1ESTFtWjEoWUMsVTNtWjtVKVklKzRnIlNqPD8pLE5Eb3Z6UUki''@;'; put 'put ''WUtVSHpfKT9HNDdZRGppYmReR0ErOz1QJWI2ZFltcUpLTGh9QGxiTFZYV1ZweXtlbEIvW1JXVTprfFtedjVsPl9JNDchWik3ODV6PXlJanB2TkVtaXd5YmRpd1daVXhfLDRRQE1rYzhXOFA4ZH1YInJ0P21HbU5+WFJ6dS98LHJvLkl2ZSwsPFlqMElqa2VUZGJScWk9RFM4NGxzJD09WFo2T1so''@;'; put 'put ''O0BJJTJTSCIlZi5HIlllM0o4QF5VVSRsdV8lcVhWQnl+TSE/aHlaPG9MZjJMVkd5QitOXkdNNDZRV1IrWTwpQjtiR3lwb3tbeGxuNWRIWloiLF09VjM8UDEsM1lyYWx0P3I8V1BgcnBlZiEvY2g6fSJEYSVOQ2dsIlEiLEJAbUgsdTM2bW9MS2dsbjUlMSVLRnZ+dk1IM1k7azxJdy9uInsrZ0sz''@;'; put 'put ''ZGZMZjlXdl0wUThEd1FiU2htN1I3ImZXVVtkLF14I0VDMG9MfldCWjt2bEw8QGtJRW9ZPlhPPDhnbm9leltFJnVeblY3U2RFJlNuXTNkSkYmfHosRnVDM3xqWHlxVixhTVlSP2djR1F4THRsOHxkcU9CbFlYU1tPNypyXTk/cWo1c1tZUm0qZEUuRDl7PSE/VUghKSU8TzdjKFM0Z146RHU7MUs1''@;'; put 'put ''QSpHL116aEFPL1U6ejI2Y19vM0I2YDt8ckRtd2BlUGU0dTQ/bDxNbHFSWS5pKkZ3TUluW0FqSn5xYC9FY2xjUUs6MCxVQGNOMCtRaU9+YU17ZiFRWzpeMyhWSil8ZHdkRjZbbCV9MCFDdy5OaSl9Okt8RXtBLDFsXzNmdk0hWy5+MnNSensrYWUlak92UF9TL1MhdUFGW0ElRFhYWClGLnY9bG9f''@;'; put 'put ''ezVYU21vO1h2Ni9kTlopIzw+YkFKRTZEMnxlPHdyNWh7RGJeKHJ+aUp2USJeM3Y6Nj45QEM3aGNQTUwqLlNlai44eypqTCRbeDlqRWIzbU1vQHFCW0xqWWY+U3pBTWIrfFB2Q2xCbDEiJGY4bTYpdFN5eDk/P2BFUzIzJGNuIVVhb1pReDBYMD41e0twMTFzJmRtXTo+SU92Z09vQ11NNTl8KVpN''@;'; put 'put ''UWtNaXsuQ087fUNTeyJsY3JpeEpmaiRFPmlPdDtmJSpuL2pgY2xvay97T0MiV2tvWTVDKkEwRl5sRXt2W14xPF9WZmF7dkc5Y1BybWl4bzs/Kk8hTXU4M3hrcUBIZnx6WnZPVmFkW1ErK1olRXVoL19BNmshaSJHVHA0Z0hYI2tMOnFFTDohajwwbW86I0MjcStSVERhaWNOX2FHK1guWT1bbSo0''@;'; put 'put ''NlFvUSEqM31XOiNxQzkpIWsvW0tKfXVGKXBnS11xVUNFKS9XUEVFcX4zMWBsOSlgb1swcnpCPVIraUp9WTQrYlJSS11YO252KGxSUWB+KWU3Xiw6WHshZG53dThlZ2RvMk9SdVZVM3lpIkcjVnx4eXciNX0+eXopSU5bNSVQY0JtUiFWRDk3LDVUbm4rNyw/aHx0W1JwUmZLPkBJR0BoJT9DUDVY''@;'; put 'put ''c2BUMjoxVTssRVEjIzReZ3kkZSpiWmIwNi9VMU48Ni92JmYxO3lmJCVqYG96R1Z9KWtdRlk/MGhrfDpPUWVdYGcjPH5zbV0jKk5+WDd3TU1fdmBzO3JQMCRkJUIjQlglNlcoL1VgUGQsaDF5NGtWS35dViVAaSF5SSgsXXU5LFJWOH45UH1ZRDckNSZoe1MjeyxJITpBVH5oLC4od2hxOXp3KlMv''@;'; put 'put ''Pkp9UHNCUGI7UjFwcDEoUGNzKW08fkBUNS9GI1suR0RaJFdXRWo1ZGlZKH0vSjVjQF14OHVAQHdpKnRSXiReJXdmTU1oJWlxcyx2Nk8jKkwsWSlVcHd8eGk4YC85S017ZFNaTVNkeVdrO2l7dTVyfFd7IWFecSE9YEwucEBAL0xtQnosX1FZdXVKTVU6TjxRS1V8c2BNRER6Mk1odEVQWUVkZyhS''@;'; put 'put ''fClrSXF1O0p6YHJ3PEZlX2dkfF5zJHZJaUxgfCVfeXdUdHNPZF0/KDBlYzU+Om5pIkYrLlpHPjNIUXs1X3lvdTUlOG16MSNiPWAmamNQV3QmW3ZofD9JZm1sYyE3L14wdTFyJVgoYDZ8YjFnS1NtaUNYNmY+WiNGaWRHWHkzX3RRKS51SXRZKUR+XTp6fkhOeDEuTyI0JUd+eHdQX0E7JFB9PkhT''@;'; put 'put ''MD92OV1BZjJSblIoQ0JUISUlM141fX1GNzI5N1csMTQ6LEtEdUEpQCJeTCsqMXBIPlgoaGV2TUttZnBCSEJITUc7SWNZLyZiZjVoNlE+VitkSmhMbmUvbFFwbTNpRVNZYi46JElkbldONltHanpYP2MoZ0p6aXZzcj9gT0VKOEpqWS9+fGtyayhwdCg3aCpGamgvYmY3QkBkSnpqdjxwciZYWDgl''@;'; put 'put ''RSQvd3JgVmciVzVyeDdqI2NJdyUvajFePXlZY1Vxfm50JkZ2SmA0TUV5aFhYZnxZRVhYZm4hMk0lclpEMXI9YFNFM115Z3AsZHZKOGlZfUAzJGZVeHovMDIrcjVGKmR4aCl8MXA8K2EsPHNzVk0hWyk7OGpVb2ZqXkRnNU8iZm1bck81Z1NsKm9taHxLdWEva1tJYjJ2aVcoRWssN1AsQ0VOOVtT''@;'; put 'put ''UEVFNFBWclIpYyRbQkFtOjExel9uTUUoJlFiQmtFSXgpWlhBYUJOInU3SFswaSEzMWcrJnIqRjA4KzcxLExgJDU1Kk9zLnNkcHhdJCFGQFl6Y2tYKG8mdT43YEw6anRKJmJqTT9reyV5JlE9O3JaeUJdRVhqX1tqaiMpWmEvTGpENTRjen11K0NEZEVOQyQ/cX5NYjBAPDFRRzxnUjh3WjMhLk9C''@;'; put 'put ''X2AwYS9MX2NLWihtVCoyT2F3X2dTZ09NRXw/RzxOOlUxUzgxfDRnNW1MLHZ8REBkfjBtJDB7eF9vcnVpIjhudG4lPDgkTFBXTXY2c3NSTks3K2B5NkYrJHJpdElhQzsrdGBJLFkvTWxNX1dkYX5iY0Z1aC80NV41I3I0XWhxT04hdUA7ITlmPzR8cVoqVGglYmpYPklCIkd9UWtoQkpYNU1SfGBa''@;'; put 'put ''dlgvWVprcyVkMnVPbVJGQHVOaSpTLG9MQ3E0OkJKRW4sRHBZLCRNNWMwZCZOO0w6aypKdE4/MU1EaTJDLiJRREhIa3RJeUNDJXtydSl7YHwhPzdsI10mRz9CclVjJT89RVtJVHVdVitpbiljfEtPZy5zb3VfTDYsRENtUS45P0kseSVdUHwmUEhrNkZSOCMrcVkySTFBaXFwWUR+ay9YUmJybE07''@;'; put 'put ''XXQ+W30pbzdQNFEuSmJJJjp8WGxKN3taaGI9azUvPjZIa3JoO1VlVSFNNUJya2xlfVg2PFRZazJIe3gvUDl0IyVae2dBYU9zZTM3elU4R1BYOW4rRnZqPz5NcGU4P11QMipJYlpELj9fTSxeeFVuJik0fXFgTTkjSV9KIXRfe1AxeD59MH1LbVBEMFkzRzV8Yzk4N29qK0xvIzIhd0d9KGZMbEgw''@;'; put 'put ''OCZpKmZKJGt7TGdCTEB5NUkiayhLP3swRmtXaXtESU5LYntZZiFGOTl6X29PLEAkSnU6VHR+WmxzbisrTXlxJCFUJWJMUmFMWzk0TltYRDczdz5UfEh8Lyw4VHwvKW57d2N9Qk0/O3szYDA3QjFTIUg9cExFYkAkNiZyTXkoOH1ldXVKIV5OZyUwITcucV5wZERgPHFeTCkxaTVeYChwMzcrfSNX''@;'; put 'put ''WmZoJXh8Wko9ZUhJOz5OWndEYl0iZU9XVkRvSWhjS3ZzXVhiQm9CdDxDZjBNMWtIQlREKyZYZjx7S1ZNZjA9XWUhMUJDTkErb29RVncuLlI7KS5YNFcoN19yLzYiKilVPjNGM1RfMDllQW91TXtNRjtKclA3JXtyRipJdXhGamZ2RkBxZCVLRUEkS3B1aUsxISIpX18ofXgqLGdhPmEmXz42bXAs''@;'; put 'put ''YSVuJW5PaTV2ZXJBRTslfF5DJjIzfHl0MTh0Tjh5RDdTL1h8aDl2Q1B2Mm5ZLCwrPmw/YDRILC9PO0wpc3ozWFk/PF1CKGdxNiJNQi52Njg9S1UuXStma2dkTVskLiYwVURaZUBscH5OYC5XQl8zN1Y2MzlTcDFyP2hiXko0UVFpNyVncU4vci53cDtQKyomOzdAaU9OeFV7JDc7IVk1XiFUfURx''@;'; put 'put ''XTQmLnZnSVh4MzJGPzk+KH10KnxiWV5YazZncT8kdEYzVXlrJVRyJnhzZ1ExSkY5I3RWOGRYL2V3RjtkekRwTGY/alJyb0dbbz9vOSlfZH0wczNjLDttTDpoSUVAckxfSklQYTUoSkZKQy8saFJZRnJeNF12XTozYmN2MzxXfitUO35rMTl+VzxpJTVoW3EhQ2VeNEdOJS5UQD1xd2claTo6Sy4+''@;'; put 'put ''Nz9qSy8/OWI6RmBoI0FLbUVLWGI4dWdVL3ZoMjZUaS5ZTm9dNFBoLkF+cV1CZHRrcCxPN212YjU6LlopOHtnLHR8Zk1QbDVlTX0xImI5JFIhdFVSO00jcjIlZV04fEBaJVZsYWskS1AuTS5HXUMyW1RVT1tKM180UTh3O1ghPGtpbyRbeWBXS1lEZn1MTlVFYj1kai4kX2ZHSTB4Vi95THJudDZi''@;'; put 'put ''ZGlzeWBXbzx4Z3ApaHEzS0pVfHVTXWpdKERlNDh3ZH1vJFVYYnJuIyguMH1yL3xKJVBqfTNDKHlISmkrfik0I2J9ek58bXkvKyhFU2BmTE5LPjolO2UodHxCcz8iNEI8YSw5cEd0T2dxQihlViNid284YXJzeH05VjEofHFmWEMkaSluTFBvOlAsLEJ3clQlcTJTXVNNaGxoTTJpbz8yVjglSmxT''@;'; put 'put ''UkVpSG4kSHJ8bFEzP14jUWlWWmdSQkB3R3tLPVBBb0s5LGVsbEJ5fnEjR1YobTBHUkJAVEY8bEJ5bUhxYF1uQV4+WzlPOlVBVXZHLEM/SGNRSHVMQ3swQ1Nwb3hJfldDPml1M2pudSgsbzNwX0FeNCM9KS5gPGtzWSp1ZW1tJTJ7SmlhWEF1KV8yTE8+W0BIO1hXfUhMe3RdWXQlLmN1Zl5fOmg2''@;'; put 'put ''ck9Ye0Fld1M7U1toUDlhaSRMRmQjYCJ5XjRvXnBbYmBKMHlLfTYvRCpuWl1iYDpofHl0d0N3bzkqTG5YfGl5MWxRUissXkB6bEVZZWF3amxyQGxDWiFSKmREPnQuRChCUDw+dHpdZGgrWioke2Nac1pFSzt0VUlHeDJBfSRrU1ZgcClzSUB5dTFTbz01JFl1OXVGKFIyMkVbYFgwIW8sLiZgUEtv''@;'; put 'put ''ZVQpQV10Ui5HfTVqJCxgKGBle0VtTXlZJUhaWF5nOkRgdzZReXZ9bzs1b0d5I0VTOGY4UG17RS9qOWk+Z2BdLDVgJGY8VWUrYWsvejt6WU15dk1YYiNjUmNLK2VycXgzW2UxNiJkfT4yK3s/UHVwR2Jtd1t+XjNIOXA+QFs7SDE5Ml08NFdNQENiR1RnaThpKy9WZlhmaSN5RjVVNXM8V2whcDUk''@;'; put 'put ''MztoZDY6SGxqSmtYK3Z9XmRga05CLFUoXzNXUyJnfV1SNTZ4Zk5Oc15lc0wkLmgsJE94Rzk5LDF1VWx1PyVgRi81WD4yd3V6VkVxUS8iU2Z7UXd9W2A6SUdYdG1sPTFsck0yfHFzVX0rdT50flZpZSpFM0VzdTQkX1Z8VlBnPUZLZV52eUQ1QjdDVSwsaERMbFExdTxINiFPXmY8PT4idGR9Wyp9''@;'; put 'put ''LHQha3gqTE4lQ1l3eURMNUxSTVJWPEZBaU8+Ilc/VDF2U1t5RkZIO3REdih2algmRkZRckhzP3M/ayksaFBac0VLSW0wQWZ3eUpaRENNTTNyYn1le3NjInQye18sL2p2OVFeXzkmWVk0U1g0Yi95NDRqZDlCUGN6Kit2Nl11ezVOYDlHVHZIVVpZbj5LTChUIXNfTVBvNEpWJihsQnJNVnY0Okpv''@;'; put 'put ''OSlRT1pGfUVjRTl0RFJORlI7ekg3ZCpHcTljbW0jelpXTlQ8MkV1aHBKayU8dWsvTm9pXmZTVUFXQklkVVFBRVVMcFZ8KDE5OEJ+ZGFwOC9fbXApN2Y5SCQxOlliaXFVcSopRyYpYk5XU15db1Z5aD5reXt3SXtDcUZsVWhzbU9iTWtzQURHbFpRSTZYNk8qPUh4NCVyMUV6eyYhdCZIUl8wSSZ6''@;'; put 'put ''OmtNcWBqLkdMKCglYn06P1B8JmcmJGtTYFVYTHVbUjhrPDYvQ0RsbyZlZShWN2N4N0VsdnQwalAjQHN2cmI1QDoifT1+PX42Q1FiLENRJVhoaCFYaFMzK212Jis3UixEe2dDfXwwWUY6KDdgTFJEeWZzKSt5ZmE9eEhUQkZnc1B4d0dYQlpJbVtpR1hCUlEidW0jLkw1cVlPVUxiNUZkTDZgZjF0''@;'; put 'put ''YzAzRmlIRV1+NjtbNTpyVmhsPDZXTSVuYlN5WUtvbzd6RF82IzVkN15BV0JXQmYydTBqVl5CXXkiX0RHTXUpTH1PcEJpMW9He1I+TzxrZHNtT2NNUlZZUWRsaUxTMlVVS0cyOk5IZCM+Q05wKW4pbitLNGtpRmFdcz9zPyI6TV5rPV10JnRgdklsbzRWWFYvTV5rPThMYXRRL3smMlMuUmU6UWht''@;'; put 'put ''b1gyTUhCa3cxbDJQLkBrUGRASn1FPD9PMSVNXUN9REJOUlZ7MnBvKFljc0dMM3o9bVd8dUt5VndOdl4od2tyZTY2RmYvVW1SQXM/UHlHdSsvNSZ5O2JJT1JSczplNWN8MTdQKkNaWmQ3SU1oais5dHJoS2xvRCR2LEV7KGZdW2c+Zyk+bV5Fc2M0NlghOHpYZCtUdiU0Jm9Ca0wsL0QmOWxbQmND''@;'; put 'put ''JXQxOztzO2BwKGNAfSZNcTs8LENebD5JSCZUXSJxbF5jZytdL2FVe3FrQGZhL3JIIWUvZSNFP3A9ZT5SIWI9UDU7bSh2YE9yNX1vJmZhYlgjVWU6UVNBXjA7ZD5ybEpxJD9qUCsycT5ZOl1YcjB3Tlkue106Q1kqdH1CXm85dTdoUXArYy8yKkxhdml2S2BtJX1VRHdlJGdnKTA5SEgwQlFuZTpR''@;'; put 'put ''aHFsZE9ZOlFoRGgwXSZ8UWgkS21LeXNhTjNQc3o7OUtsZm5qTSY4JXJAVWJSKSFIfEBkP318OG41KiVPcUdjeklJYlRTOWM6SylFRzwza0BebShKWzopM2N9cV9seVpbKTtWNXA5JiRuakxgcVAxXzNAT0Z8THV5ZGI9YHpUfiJWQSl5Y1VSOGg5SlVTe0wyYn0qI1FkSVhDS2BkZi5iXVs8YUJm''@;'; put 'put ''RjIyaTcvXy9FNUJ+ZkNod3Y7eVJeeXxST35wJTNNQVc1cFVdNHY8Il1vJDtfMzg+KkxaVkdYLHJbZTVmb0x+JXomcDojTSFIVTRRSXR2W08uJCY/bEVTZkRvSVhOfih4P29AQy5lXmdsaUFhKiZeQDo0aWhJbSlhNDg/QjwsVFNpbV5AZ1l+eV9pTEJzMWw2KSF8V19lZDZDWXJMWl15TCo5PixG''@;'; put 'put ''OmtjSGsib0xneTZUMnIkbDVRVGk2eFBHYTNZUVQkY3EyejJlaVZrTExoRV5jWjB+KT5CP1VsSClMP3R0SmF3TzRtc1osSVhCOXl+Mj5YMEYlI0hLOih8OndKaVh5aHVYcmFrT1VxYEdESyw+VSRvR2RfdUM4ezo7LiVfPFsmU0N3XjxVdm9CIlR8MXM/RW9jN30+b29LYGBKQmA0NHYmcmQ0SG5Q''@;'; put 'put ''KHkuQjVnWGFfKVplS3MuRkE+XkZ4JDFJb3lDbFNxTDJFWyhFL084NEtxPDVXSCxJTTpiOzY3b0dhZlgrOyZbRHRNSHVNfUUsaVZRP0U1UXtVWXg9V3JiNWxIKUxyWnlYNitQWE5EdzkuXylvS2AxTGRWMkQ5dlJEezIvc2o+RzVjVH45NSY0ZDZ3Tkh+UlNdQTVsZzAuMC83YjdjWlZednZqUnw/''@;'; put 'put ''PWthXyVsbHs+TW4lLDpaUmglfjR8cmtuM15Mdmd6aSN4WFRDKEEpTy4jbih+RGIvOHIpKmZ6UGB1RHtCNGNWdVJvYW5vKyhmU3AzUXY1L1hLaitBSjMjTUk7M2k5RkxrUHNZTXBJXlJKcGh8VlJvZ3ViemNbIXhWKURYM0guO1FOeSZGcmwpYCg6elE9U1ZSSCVxTVlYR1pGR2ZaX1RNbiMjSGU1''@;'; put 'put ''W3lmWUtgbjcuZX13az4xYFJRV2oqLG1lUTJdeWteXk46Vi9AJXxjUVspRS4jK0NLNj5GW2NRMix5cUtHPjVLeyxCZnUlcDtTVi8oPUFtPSwkL219YHR+TkhKaSszZ2B6b3VwSDBRVV1Ec3pxYkomSj9DSUhfK2dlRypeWm5vTm9FYkU2NDUlTmVOODElN2F4aUN2ezwhQy84JSpGWDU/NCZDNUFm''@;'; put 'put ''ezBEMVNwdU1hIXBqI1slMiVxbGQ3TyE6Olc2YS92ZlpjTl9CaytzeGZpaXgkRihXJCgleGpdd2BXai8pRSkkMUVJcF1VJndxNEM9d3Z3WF5gZjF6LE0zIW9MUnJVe0Q4YDZJQ2RLYG43e3Y9XSZ0dWxqT3R5TnJSRXc1fjhGaDFCdDBuWzlGfWRLVTtSM2VAaFN9WVpYMEF2Ij0pO31hKn1bJTJO''@;'; put 'put ''SFJBN3IpfjErYSg7TDszY1heUD0mPF9Ed0Z8YHokPVlsNUhlME96IiVmWDUkIWs1VFNPKEBKUjZjNXJmLylFQXFYayV4fmpiKEMuU2lOWDNXKygkMyE2JGs8RypwcGEocThpfVQ8TjpYKG9JVTQ7Qj03PXJNd0xINUxzcG5PKGE9UH54WnA2UmU6WWEzKy9WcWN6KnpEPy8sNFUyJE5dZU5geHI/''@;'; put 'put ''L1ZRPCkmKHQxTi5LOkxeTHRkYSsuTU0oIVoqV3tdXXdsQ1laKWh8LHM5d1dhOlE0MmAuSk1UKC9XSix6di5maVUiaEkrOVt3PnZCWixYYkk4WVJAaSExW0xkWiNpWjttdjVpVzQ1OHg9bUg2NWR5ayoheUdVZUg5cWdEO2JRb3l1OyNLXnJgVm95dVUpTmJteCZBQlRjUElpM2hIPkdUTzNaV0lw''@;'; put 'put ''Rjg0ZUZSZk1VQGFYdW9TR2smWm9xdTpSZWIrfHc2JVEyWTd4NkhjNTMyIjcuJmZHezM0bWIkZllkM1VoWTo4a0lfdHhsUmRFUEp4fVRgVmllOiZyYiQxLmsqI1Y6Iz4+QmVEdjljeD0oTTFdMj97PC9FNiMpdERSYnVFZjd5OUhuN2EjaCZlLnFnLmNTPX1hSnJQPUArWFlUNjtUSmk6Uk1memVh''@;'; put 'put ''IVtIL0lIZnwsTjw2Nmg7em15TXBrUjhIVDk3SVdbXl09Qy5LOHJ+JjpxajImNHVXWE45SmlKTERfNWpAaG1DfF1WYEYjemptUk4mQGltaUAwY3JYdmxJW2s+QyFaWlZwUXJwSjkwS3NlOTUzRnZsXztMYDxAekw4fVk7QktzeHlrOD40PX5lM3lFfTYqJjs6KVdYOWhqVyMjfD53cX1jK1VGXiw1''@;'; put 'put ''VE5yOmhqUCZWVkZzcClnNVVgNEdqK3x5U31TN0hNSFlmPF8kfEhgWzhrWzsxUVJMLjVzUlhna2hHPjVeQCxRYSEhb0Bbc0lBRn0yTX1IdWRhelEhRnxVOyJLKUt6ckFwezNreyk1TihhOzF+XzhFdj5ScjNleE9vTm1Wd1MjKXR+SVBlLC4/UyhYdHg8clByWEUvazMzYS9uUWokNmdUKWdhJCUz''@;'; put 'put ''KnE+T0U6VTMlRFZJcFZne0w3Pkxgcz1VMSVjW2Y3eUBlM3lrKGlqPFZBWFtOLkVBK1t5SlVkOD18R3ZKTSZfTTJRUXgxUVckaXM7JUcrWmlEPW10MT1+PyExX15rKWdCeHBgd1hpYn5vUV1Wb2svay8pMEddMUkhWWI4ZUkmISUxNlYwZHJ5SVhoKVEwWnBCYitTWCRbRjVja3F9JCZ4bHM7YSZl''@;'; put 'put ''Wzc7UD1oYmYiQ0xFM09yRGF0USIkQVtYQTw2LHB9czB8REB6UkVpZFBLcmJnVUdNYE05ZU07OjxMczhvQSVMTkUoKDgvX0IkPVZ4eXUxLkx5THMlW1thb0N0KENAbmMkSUdAITAmcXxQP1dnd3wmJT0laztycDEjIndMQGNFXk4/Q08/MzRrKHFRR0dJdXZMPC5yL1NAT1F3UE5EIzElXXw9RFZL''@;'; put 'put ''M0oyRkNHaE96VFNicHBte2lDVC9NWEd2bUpRS151fkVhdzI9NyM2UWhgKiIrSVhZXW9vPStSOmxmZylLaWQoWFhze0osVmlxYT8obV5iY01RRSYuXzNNWSlpZiYiQjV8YmVwSVRPMF4zPGkzUzVyQWViVWtfPiw7KVYoYFdzQzlhN19bI1pCMSgsJCFBbUxPc1U3UVFlX2xDRWE2Q1NBe0p4Tm5Y''@;'; put 'put ''SCFOdXlkeVNdPzl5Z2FNTVdhRGE8LFU/Xz0vMCY0dFlmSl8jRXoiPFhoZzQ3NFtzbTpxKVd6ST8uLDdTM0hfez8vMTc0Ym43ZGZOZSJlNmR1QnhxK1tMOSFOfG14Y0J3Y3lyZVZlVVR5KjI3aDBzRyh1YjJDUTRnbk5uUEtxeWJ3IVJyb08iNlFGP3BhJCFlaVhgQFRVPzllRV97QFdvLCVqTn1i''@;'; put 'put ''fjxfTC4janxSPn5aemxiWkkiYFhhMVE2NlRpIjdtPFgqbTxtJnVEM0tDZFpwRntUNGU3RmU8aUdeUnk2JTxZVzEybDM9QWg2LCohaXJPfTJ8Sys/P3B7KDtaZSp1JnFnbmkrfnImJWtQeCM3UmlhPSJabH5HYncpOHB2IXRiSCo3Ny5iSXYzP2VHPWgyKm1sciQrdEo7ejw7THE0Zj4iayU7cT9J''@;'; put 'put ''dTo7eEMhOlYxKVsqRT85aXkyWUM2XyJkfVNMajt5XXlDMngvV0M8Y1llSCtNPygqREhnK0BJTXVAdGRNei5kNTpWJnRMeSJIakpjbHpKZFc4RXlzJHoyaUIkdlNtYVsrI2xKPC9QbDhwUEo8L1BVI0drTzgjRVFRTjpsQFBtTm1AZUZ9ZnBjKD0lUEwse3U2MCo/VWg5Kno6Z1lmWmNrKE1HUWcq''@;'; put 'put ''amgkW3gjRlYvX15eQFk2UnNATFk7W3FpNUxlYChRZUE7MzpebXplUSEpN2E4UnJxfFBxdyV2SmRXfFBWekU3a2loQ1NnIU0iL19eZ35oUCJfXSl9cGY+UXRbISs9Nls2Wk5OZ3NkXW0qYWkzYVZyVX5lOmBeUDhIeEgpJno9WSY/fWVGOVtXRGglSD04bT5ONkc6cFNqZHZYO2Nrc2FYbS9UTjFx''@;'; put 'put ''M300MURrVHhjb2dTXkxvOFl7Nz4hWEM0KiNnTVtxVmhaK0VdS24sczJseDYpUiJDWno6NGFTVzZbTy9MdTsmcls9RDwzcTJIRSVfKENVRyVwN1krQj1OaHZTM293UU9mNSl8ZDx3cHAkJWImUjFJcj1FPHxzazhgbT5BUStsUj5JZ0QzSypHajhXV11iZn5dN2U7N01lWykuIkFCPGtwbVQ3bj52''@;'; put 'put ''VHdleTg4bV8+NmtUT11vciNzcDYxfjh6WyZ4Y2UyQl1zKVVaezJ+QyZSTU9aNjY1Tio0NlF5d2djdyVKaF4vSXNKaUhtaVNvPlp0dnE7aFklRl18SlYvZ1lQP2pwfURWWHxEQCFDZTgkdVJHY0lIMHdTfEQ7WSs6Zk9yKGpOb3dpcV5IVUY3VVMzazlaVUAwImBJWkMkVyFjUURpUEU4Uih9LFdX''@;'; put 'put ''Tn1Bdl4zPkYpdyVpJjhyPW09PWRHZU99T2ZiZW85LCRwd2ouMThhVXluOGBvbTQ4WTEzYU9IazF1SDhmMWYvKWs4bHZGa2BIM0g9aTNIb2Z0OzFIM2NnLjwsJWo/IXcwYlU9c1BARip3aGpXITE+JlVWNVFWY2I+MGJaYSRrdWh9Kld5bXVXeUhecSR7V18wUXpSR0ZwZS9BOGprL3dPb1hHUCtm''@;'; put 'put ''N3lzNCpJRHglekYvZyxLT1thdU8zfXdhemtlY353ei5XU25APFhmXTwhZTRuOGA1SENlWzxreVdKYitCTGw4N0h4JDtxKipaSnlbcXhmTnxIZ3s/bjpsdDFdeEdyL0p3N2grT2Y1YnBdSmA1Ki5sZjQ4aFkudzttK0QpcWt6aWJzLyRhZkJmZmo0eFpqbUo4ZUY9PmAybzhVeyZVIj1gZj1eUUxr''@;'; put 'put ''PUI3dGNxQEBueD00WkNxdF5AZUkxMUN0I1Y8dDJ0bGY7LHZUVTA8ZD4rO2lUQVUwMSxxRnpNcnVnUyJlYSNnPyV3T21tODlEaWU6RzImZCo5KmJSbkxgaHp3Pj1TUnFCQDs1VWVIUUQ1OXBAKjR6O1ZtXllxXSY1emVXYW9lKTFRW1VtbDZLPGJMTkttWSR2RyZ2SF9ZfC5iMCxpXm84Yjd4Sl5L''@;'; put 'put ''KihuN34pKXoyR3xFcWshRnY/T2E+bCZjQ05+OWF3PyNKcil3fXZfJEtoMVckZEpQT1VvdCRnNUN2KCZ5c3JFSFJaTDlXT0VFXXYuTF9pSkRxZ1pyN0p3UD5eS2xOa1taRDAjb2cuS3hRcnVZXmNobWBdVkopMytFajRfUzUpODZARlIoNEEoZF5uUXdkfjwkPTw4YHoxe3Y4bks+cHhwKEokXUVS''@;'; put 'put ''KSYpZ1VxMXFNXiF4JjUqa3xiOzM1blt5LnI0RzV8eH1efXEmcFZNfEptfEZSKEN6XTszNz9yaDYuNUxqUU8uLjZDYWdNQ2QjU0A5e3wuVFdqLmApUnZbcDtAblRQMSVHMl9mQTZNczgrP14qZStmc0RuMyhLJTdKWyVfWUUleVd8RmMhQloxQG1NdDZfN2JFZDBDLix6QUEwKVNBS0NeSmVjaSFz''@;'; put 'put ''KVArPTE/Xkl0RSIkTXtIKiM9NUB2LkxTanx2dEJBQUFBQUFBQUFBTWN+YUVnWy8lZ2lXQkpHeSYmakZYLltkJmpbSX1vcDNgUmxaR2tkY248Ylh4Ri9IWllna2tHSCxBMExjVDM9LDdefnF3O2pVLFl0Xi5EZyFPPFh4OXBBdDQ5VjY/dkdpeChYWXVeQSlUNFFRNTtTKFVoPEo0bmtiNU5ZNVlD''@;'; put 'put ''RkwqJSR4Omp+aThPNHNoRVJtPUxNZV5idX1ZZWk1ZmJ7aXQmXnh1X3olQmJGMSJBKn0kMyVSLzhxYT0qeC9yKDUjbDN8QCh+VCNZZXp5XlQob0p6RylIU0pRR2RYRWhZaT8lViIsU3ptXzh5ODw5b0VQZDxQIyZBJlJgd0UvJGxpLyt+aHhWVl0xUn12KG0sdU1pZWk3VSZqUEsmRGlCQG4/aTxl''@;'; put 'put ''NTBgM3BrIks8LDc/QUloNys9ayJEfUQuSXolcT0wM2txUEFfISlJYEFFVkwvXk5NZC9dNkhleE1Fcm9DSEV2VnRedmM5XyhIKj0oRXNtOilSJEo5UD1ITFRbfV0vaGw1R0pjVl85KXg+cChDJFs7YEJxLGt5P2ZBcTIxJlI2dCxNPiM5RCFyfVUvV3whLFVvSXIpfUN3VV8oIXZAKVkjJGZTVHZu''@;'; put 'put ''VlYmNH0+I0grblcrNHU9LiFpXkxOR0IyQWxYak1ESFd6dnR0VSJ7SHxwOnNEXTgjeiRUXjZeRDJidE1KWUJifDhZSVkjbnVsYGVIZzwkXmo9YTV2NCtQX3ojMiw8L3k0fVFzbkh8VmdyPHhCR0t1RyU+Mit5WEFgc3NAPiJkJVpvP1JaV3I8Qzxwd1hWNXBaa3NCUld1fjFXSnVxLipeLiFQYSlN''@;'; put 'put ''PmxUNnNHPC5tTmNUZCZJZmY5czd+S31aZWU0a350VmxCKkJdQkYzcHZQRiRWejcjXzU0ZUQ6MTJUdDRIWENnaV5YUHdacDZPJlVgRFt7TkgpQCZCZXtiXUVBZyUpdVFkOD81ZTQ4QHxHLz5WO1hCW3QxbXlZI1MhcUFHZDY2fSR1anM3PmNIcUM2KX0keDt8ISgrVz1SdE4le2tgXkksPEZhdUQx''@;'; put 'put ''RUQjNSomIUYxL3V9M3ooLCZ4W0pXenpFN3M6TktOJVV+citXeV4kSjNeYmIieG9aZHFfQzAqT0o9NmdyJkwvVFUxdFB7di5VKC4qelg5c0YvdDkhZlFwV3lFKSQ7JjVYPmt7UGpxdDxfPCR0Yy49fEBMZTVdP2thdTNlZyIkdlhTY0wwU1koVF1KOiZDUGRMdTxtYnRnJXR4RypkT151KC5ec3Q3''@;'; put 'put ''V1VPP0I9TFJsaDcwbjY2bXNORXdVZj1ZWldCVD8zL1QiLykyRSFvdTNkeyJGMmpraHFqe188an1+YCtXaXN6fl9Vc2VjTyk3YltTIkVLMkZ0X0grUmZIfSxVOiNeSkpmYmBUIUJRUnhzdzNWUn1acXQ7OGZSdmxFNTVdVWI4WSh1d1UsSnwwTyYyOzlbbjVMKFlzMkkjVSF+VDkxRStoUEpuSTVE''@;'; put 'put ''OnZlYXQsfForNkp0PXpATVl3QkVnanYyfGgmc0Y6VlBJfH5lI0lbLFNafjo9eWR0ek8kVkNQNk9RY3xPSz5rezt8cElLc1lsc3xfb3s6X0crZmFSd0AjKUg+YCk9O2llfipDSkJ3Pk9rXkN1SCgwUkp6WDJ+YEgwOmVHUiIwJVBRMyshTH0/UXQ7TiZSeGJJQmBmdjwpPjs3UnhXTlk+IVMsSDVF''@;'; put 'put ''JXRwRGo3Y1hQaCJXNSEiP01Md3IqWUVIdDZ0NXRRdlIoNTljeFtLPjpuISZxKDdoNU9sdWBxUzFabGwpQ1BiMkdXeDVnQF1DSUlGXzJnVENUM21RQjpiUjUuI0M/Ql87R0JTfUxHTDl8UD18eWgmMEJyfCVVY0U9aGM0QjFBRUdLNldjUkZ4W0gxcittPDViS2pTbFJ9JjpRVmtpS2h+ZzYmZElP''@;'; put 'put ''KyRucGFsa1JhKUE4SVhwMih5X2VAMExpMlovflcoeSYxVSIkX0Voelg+Nkk0Q3lRRz5YLnN0KERbe3RKeCpCYSpqbShuK0k/UGZqTFgudjNPPWlsNGFEdlJbKkpqMUdUaihKakBTbDpxVkN7bmBRdndOaHQqZm05WiU+KF5PcD5CZi9+PDJBOFpAdzB6dS9OZXxYcEEycnRXdyU3ZjBxPUYqN3x1''@;'; put 'put ''KHspcGxPd3Y8fC9pYnRJIlp2QEBqa2VgNFtoSyZ4RzRlU0dYaThWcHdKRjF1O0xGVEtabmNQakdkTis+anJYLHRtblBddipOMH18K1laSG4/a0UmPlh9ak9KNnI1LD96fVBCXkUsNFFmQVBka3ZhWVJERyhfTmRMTnxlN2BDPX1damFdaSE7fHh1RDxnTmgyWig8RyRMOW0hdDdFUixRRVJUYkkx''@;'; put 'put ''UTYkXlhHYz9bYTgqNlchajduNjc2TVV6a2J8dVNsWSMkbFlrbzg3KGlJfnsrcHg4Rio4SW9TYl8qRm44PVE/NUleX3E7IVY4MUgoOXByd3Uiak5Bcio5I2ZFaV9yd0Mzey9IW3dwY0B1cFY2fV4reTg3ZzBEfmV4RDd7eDp7JVp2MWw0XXFeYm5qV11XXy5rKUJ0a3tEKFM8KWlCXSJWYVQwTU9U''@;'; put 'put ''aHc6Z1QmNU02V2hIJUxxa0JJWWU4NT9fUjNOQ3lYdTJjczxQYSVNPU9pT1ZpPmg/MCFLTUYjNjs8cFBMTGU7OCZxP31geiZQR312fUs1T1trMWhJUStkM014eUQhaVthJnpALEQxJmRTInlCMzJ3JUs4aTYpNkVzZD5+UjEwfF1EJXRbdlRlM3JzMSs1W1NrSHY3O2grNX4/Vms4IkxHYlUyJEo3''@;'; put 'put ''ZHw5eXo2IVg2TkZUNkB2QWQ1bltUP3IxQ2JNc3lQK3xYI2BISUtsWVdMOGFAelo9O0ptZn1DJVZAV1Z+Lmdxbl9zbUcwSS96Vk8vVntDOy5IQ3N7e2JSNU43TyZsTnhqYWl+eDAlMXFJZnJVMzh9KygrWiF7Mj49UCNQeylxIkkjODUsQS9+bUhdKVclKkJuYmlDQ101dCtCanpUKTtIRjtQdklK''@;'; put 'put ''eFRfLDZaTjRITTwwIWdCQksyQTIoakZUNm5WU1I2eX1HITo3QiloTXU/LCklUzUqe2tOSD0rSCZtVU9qUmRoMltdayhgNklhP1plLDtZZVVMU14kPn5WbDBkLDhLb1RCR1g4ZldHJXQ/S1MmcEw4K1MwOnlLKk97aDZCbFBQJU93fm8wPUZVdUt6LilJS2BxbGQkQ2U0QHQpTE1zejVATEdVYUZQ''@;'; put 'put ''WjM5MDtaQUkzYkdmV1EzYiYyP0dZa1plKEJaR08rZUYwQmhPTG1FS0NdbUlhTnpKaWlgcWg6OkVyTiIkR3J9YUgqVVpPTEByT0NOaW9ZbShfVG5MejUmWz1qI2g0JDtvLyY1ZjRvRG01JkgsS30zMTNETkBbfHp7XjhqOlFxajBALn16dTkhczhQMTp1LEFbUnx1N3oxTH5bOFF1VnNLJFtqW258''@;'; put 'put ''Z3g5TXspMVBpNkFqcGVgOXAyTmpafTo0U1tkMU1HIUc/cXlObkxRTylPb311UTI/X3Mxbj9WOChzXSFNI25pVyFSaThzS2hpU31uVCxSIVpFQiFNeS9YcHY4aHZYPmhUQyg0VGRjMDR6e2QwPDVFQ2Rxek5aZHRFVGgjZ1UjZGd4TCNmZXssNWBfW21SenswYSpqPjQrQEFZXW09SixEezEoVy9s''@;'; put 'put ''anpSRHIkXV9mL2NtODNKXjJCWUpsTzhhY01ELzRLZExueyxvJVtydlVrPipFYipmW1d9P1RmaGE7e0Q8bSVQdll3QDN0KmUyOnFWbjg9X2thbzA1Kkx0RkVOd0d0XUhZIjZRNVRKbVQrd2pFXk1VRTsuPUtzUT9tRG4/I2tMMD4qdTE0cEdBR3FdKCxVMjZFYytbYDZ0W0IkM0VmV3RAeDtga0RL''@;'; put 'put ''SH0+P0d+KzJMRygjWVB8YGBVRl01dFo/eFtuMytaYU5HYmVHPWlfKjM5elZBQHVDdG9DWSM+dUNGez5GWFtePkp8ZSZjMjV1cUIwS0pOSEZnKW45M2dETjAkZHklYDtObyNDe1pDXTRIZF5NR1p6d2xbakkjRFAlbWZdS0cmRjQmeXU2OmkkLEVUOEtoKkY7UmBqPDxkNS5eVXdVKzl2enJOJUVX''@;'; put 'put ''NUZCX0RCVWIrdj1UeyQ9MzswWU9VLFlaOlVVIjYvUzlUUnMpQSRtM1NddVFITmlod1FCTy57JTpvbWNzV3JrSFtMWjA8STpSMTl4V107QXRNMixEPTpgVDdIfWt0YDYveXAlNXFKT29ZQUouOSo1anEvdW8jNlIrNWs/Ti9wa2VWISRQVD4lOVE+OSM5bzcpTHhdWUU3QHZfVUdKbnYxTnRlb3A0''@;'; put 'put ''PFYjdHshUn43dlp4QmRSYkNeRUlGb3dnbXx5MEMybl8jaVR2Iz5lRlkwMUJ0fmpGamQ5QCsvMVhCXSwvMyVVN05bbzRkTmhaJCZJV0BEVXlhJClJPE1TXnFKemtSXjlzb0srRTlMVFprSHpFWzhAcW5eVGkzSXVjYzN2WXRQZ2xmYylNNSN1UnR6PnFbYCkjU0o8T0VMJWNfVHxAJUpjTEA1XXxE''@;'; put 'put ''WGZALFd0dU1jO196Xk1vRGlaJlE3OmFYMFNZYCI1P10ifUNBcXF8SWxFOmMub3l4a3MxUGB2c3ZscC9tQnhxQUd4VTtNaVFzeElZXVkzZWE2bTNIST1ZO0psI0U1UGdKbE8vX2RLOGVMd11TNjo9ezh1NGt8N34zKU5AT2xkKlhMRz1SMz9APExleXokRTF3KCpFa25MJWZzbCkqfnkkRUlhSHcu''@;'; put 'put ''O0c2dW06bXFfVkRLXktIPms8eHEyZGhqImAlI3Z5UFJkczM+MWg7d1BWamhwKE9gKiY+KFpnODs9JXttXUR2KTExS2djYlpbdTR5ZkJ1WUwrOjsxaElMT05VTz8oKGVCJEgheCYuYHBoeiZkKnlxOHY/T3VzajRTPiJPPShaXlJdV1A2YjB2QDtQayxzJEhpYUFvfEh2SDtoX2tWRjJjUS9oPDMs''@;'; put 'put ''JVM4Tk52QXFfQiUyY1lWQExhOHR4cVNYe3tNWVNAZnlyJWVMTzNAdW9sWmprOHU3PVhBL082PGZQQFRfVEJGTW9uNUs6Kzt2Y35zRkAlYj9FN0FrWHB+eWRBSSheSil9Ty4uazZePUJjMGo2R3ZhUFk/TnwzfCFbMHEvUS9pVW9ANlcjJmpGQXlqd1Z6SXZEI3FUXlhqeD5sbXxuIz5iQFduaV9A''@;'; put 'put ''IWl+PUI2Qkh5YlRlQkdSdUopPEx2ImJeWGY+UiRzd2cyc0lYTTdiQi9MIW5oOnx8JVhDaUcxL0NXWT0kQnJVQm5bLFlFfiN5VywsVlcvTylsL0xNcGRlSksrUn1ZZTpINCxVI3ZtPHhjbWVtRDA3Z3VqdHdUOnFuPyVDUzY4RDA1OW1EKzIpZixaNCNCQGwwV200SXBrQkNsLGk+Z1J+T3AiYVoi''@;'; put 'put ''Wn5rd0psIUx6USUhP19FMEBwb3V0NyMhS2ZBJltdJSQ9YWtJVXVsajZ+ZXNNem02eSFKdTAucXEkaEdrXnRYLD9hYDpddVNgIT5iMEJfNV48MCFLI1c0KXFsITYkeVZTIUhkLmNNPCZAZiNYZj96KDRDWkFuQl8rUCU3Jl1jQH1YT2tAS3deQlVAJUtQWlZkST4jQyFjRyFibXhDYjQvVHU7Oyky''@;'; put 'put ''d29bfTV+TGRhaSgoMnBZYW1MSno+I2tnV1ZLYztMRTlwaCkxcSQzVW9jTzZYP0dKWTM1PjkwUnsmfW8oSDVmQEttcTxpei9obmhvdGFPfTluKyVnMCh0YnBjNnBFI3ZROkV+Y3VEOTtsOUdBTjQxQCpERUVKaHR4Wm0lRjBJOTxxVjgyTHBBQWx2dlJJMGFeOUUzPmUrI2xafF5aakhId3IvWWV0''@;'; put 'put ''TyQmOSRKXWEwOXJeaEtkIyReIjcqVXl5a2J5ejEje0hRcCVWS1Ixd0w/bmh7Qn1NUVZ8QFpofV9BenVXWDsjSWg+d0B3MjBpQzcmQkBHeHp9aG52dlNaOXxbZUZyWGxudjI1I2Z9Z008UGNbTiRlUiMlOUlSXyVrNjAkVDZWQ0s1OFgzTSQ/I1VzM0FhWXF4bHgvS1BeKyZMIjBlODNZNmltPzVo''@;'; put 'put ''OHBDbVVzbGZERGp7R05WTnExTElOTnZ8TWsjZm5jUTNgcnk5O1JeSWZiYXNEL3F2e3tabnsuZlFvUC9FWk8uJkYyNm8qS2Q6ImIzaXB9MD14eyklNT1ZeyR6ZD5bI20zX2VUQ3coXkFSIjAjX0M2KlFAPUhaNC5YYlleWkwjaz0laGVRRlBIYSY1dlRObFVHVTJXJkYzU0VmY09QUlglfGo+RFRZ''@;'; put 'put ''LCElaUVyI3tiYDg1JkxxUHRzKkcmKFdZcTVyMkZdaXlWVUhnJl5Sa0kiMjRtbkpTSGo/U0ZraUAoKCt1MEhiYUYvdHVDa1MlaClCb1A9SnJMJDF+fnlrPGUjWmted3MrTWN3azElcnNUJEtkLEFTbTBeSHIqeXElI1kreDN+RSZIN3wyfWdJITFMUnBDen1DUXsqIkZ2Z11pV2J5IUh2bDZPIiko''@;'; put 'put ''SzE5KTl8K2JmSXlsZjdoS1RvSXZfKExgZEtPPzRYSS9VWT15VCwuRjpGT1deUmdGQnJ7O2BHdjx5dXlQWTlVTFosfWUlQDBjc2pCaWs3azBTUTF1MHpqOnlZUXRhYDh3eFpOVFtLLjFUbE1ZT3VrZl9YO0w3TTB4Ll5OfG4hby9PO3dmSUYqfH5PaXZeSVlmLyFyU0o4clQ7WXI6RXtgTFoyNWtn''@;'; put 'put ''Pj1VYTo/enRsIUpKOkF0WV5nPkk4eSZxMj0xXkkxK0QiJV1dal9bdkZDdlM7eHd9U15bKjw0ZWJ+JVtEUltKWDpgUnx0STlDQzxAMiIqRUgoSCspUjlxXVQ3U3dwZHAweiQjNm5CcV1GaX1maGslM0tzP019e2ppMV08UjhocXprXjhfSzNIS258KzxoezRibGh1IWFUPHNbK1UhJUMmJitKbCxA''@;'; put 'put ''LCRCQT1SMnwvYjVRaHoiKTl0SEdvIn4vRE9nUThqNmAoZS4kOFldUXc8T1BWc3gjZF8zaXlCSEJiMDd5cjQ2SX1KPDY+dnZjZEU/Un0rZzlGfDJNfDgpQlJrS2RLZGRdRjxQPj92K2p7S3UqJFl3em5KTS8jdkdRNFYsOTpnd2pPM2xbMmImNUVkKkJJKWdlQlJzMjgzOjpfR0JkPzA0OHZwVXsj''@;'; put 'put ''Ij4zYD1Vaz9bMVN0PzM0TGBAXTk7XmZ5YjJ3aCNuV0I0MSpJNi44dHRAIWYob2l6TyJZUX5EIWYoS19wczZIc0duVzE1QnBbPVBNU1MpTXhdIW8yOn1aaGd8Y0Q1WTlRI0tveUB3VHBqV01MVmUscmZtZUVgQlZ+U1R6YFVFWD5iZT8kNFtzSHNiaVU2NGR1UUQvYV5BW29rRCtwVX4hYC8mdldY''@;'; put 'put ''TmVyZW9Fd0F7VUJLZEJtI2AieTo6c3hvSVlFXzswaHBBS2N8STZpJVU2aVVJO2pBeD9FKjpkUmxnZiQyaUVAeVJwN0VHfXNxP1Y1ZCFZYVNuY0g9KE92fXkxWF90a152JlA5Z1ZuZlBRPExQJipYL1U6JWlZYlo/Zn16e187azIjI2RhbF4vczYoUn0wK2Fwe003K3d4RnhyajQvKjpQaGJtIU1m''@;'; put 'put ''ZlJmfil5SToyUnQkbEhCWn5kcSM+bHRMLilFO2xEQUw+NDZWY1UsPlcjYz1kJmZFTihRdUdCeFRCJXgjRS9wdjVbQV9dY0NEaHZrZnhmNVJfOm1MSTtjMioqK2FHWWlTUypwWDc8bjpnT3lIVkFxXiFPZW8ke0FRMWFgM01zaDpxUU1ldD55a2EyRzlUKjFkSXRCYW1dSTFyRFZqOSgre0lvVT5K''@;'; put 'put ''Z1V3T0EjOCgjbWY1KCU8R3pzYHtsYXxoZX5jdHRUWTpuJjUzaGZkazNdOTBrQSlzcGx9IywqNFEvWzsofTBMPXIzNEtjZU1dWV1adnVWMlR6dH5SLDlDYiNNWFtTdTEqXU9QTngxOV1vaFpsQUddJV8veT5zUm04dV9wQT5XYSUwInBbPUdpT0xHYVlvdSZkXzFwOVtNKEwpeGE6LFciPngqUj1h''@;'; put 'put ''VHtTe3MiUmZYKXFlMnBGdkE1M1klclIkMnVWW2toOVBnWnFVQFliIWpqak02X1hxSjUwKUtwTHlecFcpekM4M30vLmxtVFYlNyssX21mLDp8LEZEaDBLSFhLQjU8RjFMW19uak9jVTxMeDRlOyxhOnI/QjIlRFZRW1ViVn50fkFbNlhfK2soa1kyOSQ4TWU7MmF7My49TEduTVVmPDFqcXFnYSg3''@;'; put 'put ''dHxnPlhiKi5dT2RxQV8hSD1sQnk2VD0xZWpvN090WmN4TTVkVUVJPT1oXlRLJXB4YS5RZFE4KCI+bXRKUGdWYl43blh5PmBtKm1KX3UkbXdIJU1LRGt+JmJZUVc4JnBJWmY2Q0MqazEjai88PT1sRlpLJD8sWCRjLm1aLGJXJFZnZk9bO2FCbWtkMTVsXzhuOjkoWyRwQi93RlJrLFpLZlt6ejhO''@;'; put 'put ''PkJhMip8L3Z8bklHYHclVn08S3RrUS9tXlF6Y1hEfSZLL0QoR147Mnk6T1smZ2lka0k5TE5pLFJSSUJ8cTBgJlhbfCtPREBRQSJqaD0qZjJOTzt4bXs9TjNQfUwsOHlZdnp8ZEpzdG5SMyZhelpEQjBGPyNPT2N7S3JgTUx0KUshfmBePyh1dU5rXUloQjUlXk17T2REIT8yRGxocSxbREhNOXp+''@;'; put 'put ''ckZ4VndEQnpIcUchfGozX18vZExNWyosUCtFfGh5aC8oXXRAUFRVe1F3OTQrd3dmVUJ1bkYkV1tTZ3Iqel1ZYzM2YU0mTEMkNHJ4fmQmU0c3OTVWZlFeYn5lPElJU0ZgOjdoTzIyUWE+eipgN2BqUiQ6Oj9hckkxRyE3VzlxR2l2dV5vd3wvQmZXbmV5SD0kOD51NVg3bkN8fGhpcnVaUVM4K2lk''@;'; put 'put ''RCpUPzRaZDpOYFZ1YSFCKSohUktuPWwuWjAlNSJpak02OjxLNEs2VSFhUHVNfnltSEFMNixAJEBXQCsqTlhgXVglUiVFOllDSXlpd1F9VHIpO3AuPGEsSVEsfX1PVGRSWkNKbEhVQjglQGczM0NORis+N1QvTHdhYl8wPCI3MkkzOGgpZCVrbGkkZ3U9Rl11Y0ReU2NfYFI9UHdjKlV4N31jU1ZR''@;'; put 'put ''eGIyUWAvXl9uKjBMLGhzfmFQPTpVIncqV3V5SnRYe3NMMG1ZYEhVN3VHO15sRk1qPDNOOWleYXA/SUs9Z2lfJm9bNiNafjIyIW9SfUYqNEU1fkRNZCxFMFgiR3cvZioxM1ZRJSFfR2RCQjRoWEIjI0kldHJUIzIpdjoqYHJwVX40ODZhajojZGJAL1E0IVVUbm5VOUpJPmF3aXV9UVJuaiRMI0BD''@;'; put 'put ''SDQidEJpZj4wPWNiOXQ/e2F+d0BHeyQhPmdUYD19T05tOihjZVBsKTdJY1h2Vj1ScmUuU0wublBfZnJ8dVVLUTQ1Vy5dRCtoRnp1ZjNTJGlBbShjXWE6YXEyWDI/diElc1gwLFU8fWJbZkczPj08MUM4elVIbFFzeSVzNjRUY3xuaj5PZEpJel5sPWYobn5RWX5OWGBbW0lFbk59QHw4VTkrI1Bv''@;'; put 'put ''PFU/JWR1YzwyV1Q8cG9UZFNNSH40VnNnPmttX25TPFIwN09aLDFOMXtTa3FjJm9wPjdVXVI+NigpUVp6K2JoQ092OUNaZ2FraDpwKUY/WCJ8Vlp2P1U5MGliQV00U2o+RX1NSGFPSCNHUGBORlpRYmQ3QWxFXV0xcE1veXt+Mk85YGMjYlhtd2xHYEsufHRQcnQ0QSt0Sm4sLy51XiZOck5OSVp3''@;'; put 'put ''N0VXKGMlRl5AVVR6ejJxaDw/N1RpaHVpTzRWOzdSXndUaD4lLHV7PlRSdTJqS0AxcVZPQ31TQC5xSXhfdlcjLyZZciZbKyV2fXNgO3duR2dFUGJydDBeZ05XJHk6I2dGaXQ2Nkk7OG42fWF+dSVnJmB2W2kiWTQuMnNwIztXe0owTzcuTkxXKXc/Rk89OGAyKG0+X3R3SCFPM0lJKXk5WkUyP2JZ''@;'; put 'put ''JCVVZS5gRkh6RnlfZm5LZ0AuLHQ/PlAlN1ldZXo+PSUvdXk3YD8ifUErUGlTVV5oW3l2UThLLjBXTW1UOHErfGZaUUYqfH0hbEFbeWFLIyF2eFo9eGp0OF56RWgubGBTOGJRM0R6aX1WMD0ufTcmZzFLOHUjYSZuSipwKk47MUljMEJdL2tFTC5hXmJCMVYvL1pVQyF8dHswVko4WzxseyFjYEF1''@;'; put 'put ''UXpZOG1fWS9XSyFwbkw1dVZ+WDJYOSlqLiFaQlJ7Rm5XRkBUPEVrW0VMOTolZ3BqNjpeWzwpPVVlQjtRb2N0JkFVNGg0QildT3JZLjgrPmQyWWMuMipqQVVGLFIsOikjMzZ6Zj58OXp2S0AxQWo9ZDdAMFNaUWMhWl1SO2A3e3hIQy47JTVkeD5wV1NUfSpNRWM2MSUmM2ZUMWdePTF6M353UD0x''@;'; put 'put ''TUs0VzFFR0R0LG9fclg3QHY4T3ZlPS8hMEA6R3hUNU18PUpRWG1Oan1JNnl1NEhlUWYyZjd5R1Vae0ZYRmVlKHhjVjR+NSZRckBHbUFMSHB3RypIb0cmYU8sfCJifSMhIUEyamxKfVc9NHdDdiEuIntsO1dMZXtsR19MQllGeVIsYDJuXnosZiIpb3lzXVYuMHtXV0JKSXM4bWF+ezJILllWMChi''@;'; put 'put ''dz5ea34lSStiU1gxUzZQKGtjKm58TDdiTCMjVyRIdFBwKXxoaGd2fmZjOWFicFk8Zl9nZnFsMXtnYiV5R3BkezBqfmUyen1kKHBKZH43fHlvOHlsd2c8KCpEejBsXVN8JHwxUThDOUJ6WVZ1TjBLOFVtMHpGYyo9aTRpYylPVVR4e1Upb0g6ZUg3aDJmSDFPU3x7YylCL0JgfT84Nmp4InZ2NFtf''@;'; put 'put ''ZTIsKUwpSSJuTW5DbmA7WGYzNX1TfnwqVHp5QEU/UXE8YiYuV2RESjs6XmlKKXxzO2gjZTBQZDssVVZTezteRkdAT0NjbENmd0JNPFlTKDMqVHhFamhCRi4kNy91YFFWP0RTc2tiOV9OQUA+JCIlT0hMakduNWU1azRgKn4+Wn4kfU8sSjB8RChALzxtZF95VGJ5RW4pRXMoTVN+MEZKLGR1Onpd''@;'; put 'put ''bnpgUERCWltIQXRKITokL3U/OSpUS29DfCFCJXB2TkxgY09KXVkpbkpyOj1wO0QjczBqc2VIUGsieEJ7I25SZCN0SjteNSY0I1ZaOmFZdV57Sm11PiIub2l3V285KW9XcHVGUHFiQSEsaCwxMXpQb3Q3PFpxLzUhZV5WZFZZVFFiNTk5cSpsJVRzMTZAZzRyY05JZ2YrWT5ZYy5uMkNFYiU4Rk1y''@;'; put 'put ''XUc/TH5venJSPFksUSw8L2RONFFqNT1kUVpvIj5gUVRDIVQvIXhxJlFgeV1tX0A2fVReKnpnKHxganMwXmo9dGlQOWIkeG5WJVZjVnI5OkNTT142MVU7KkZIOyUlc0E8ek9QQTtQb1JnRVZLQzdqdkVRI1ZrMXBNYFl2WFs+fCN6JnV1cjhRQkJQWSNYRkJ9aDRsWlUsNUdYTVt7YXVVdVtrNGlp''@;'; put 'put ''dWxmPEFCJXpZOmZaVzR1eU06MjxOcWcpd1hCL0Jzaz5kdEthSGxlOGg8YmIpeWFPSUt8b1hLaztlYWZ3NlVYY1ksOzBuaG0ieURLT3k6fStVXmh8e11sPE03MyV0OXwmK0U5VkI9e1lWaSYjR0tyOWFFXjV7ZTtkK2spfGdvflEuKXp3Ryw0MHVDPHc+dDNrOm97e0dFUCpVSnBmMnB8aURGSCgr''@;'; put 'put ''XU9TKXBQeF52NDR3UWleQFEuSz04dkYybyYyWSVFSzdWbGBHMkY0RkEvXXJ4QHAjbkcxbFhoYmpaM3ojVnlPU0UqY2M4TkgzZnVNPURrUihhJHhYcXI9T0Z9Wi8+WTVgdyhmV308T1NzalYuPzF4KTJ5cS9FZCpbLnpUMXxwfT5+Ul8zL0BGWjNVMiJ3RjxbXzlubGN4JjEicT9BbVlpW31QY256''@;'; put 'put ''Lk8+ZWRiZForcyJBVjEuMk5dOmRgfV0jXiVhLCsjOTBlJTssc1JjW2Z9VTkrXT5sW2UvU11RR1VjY2dFIW9uUCh7cjV3KTZfO0dWN1oxNFQxcSp2VX04Q0lCfDl5Ym9mYjA+Ni46eVRyUGR+ODsqbjEqcV81PnFNZVNiQTpPSFJ9Ok95Xl0rNjxiUUphITlbW25KekFKa3NGSmQ5cXRVemZGd2FE''@;'; put 'put ''LE1abS5WZ2lGI2EmdDQzKDcvZ09zY1ohUEc5NFI7WD1USEw5YEY6bSg0Qk5KS2BeZH5BRlVoeV9sd0ptZ1tURXU5P3F4N3wuUUZPPldGSXh7c3hSdmlpViI3US9NSXJLaHRscnNTT3d7e2UlTVsjRUBKd19kM002SnJMS0NoPjcrYEt4ekpAZS9na3RQbV5uOUtCbVt7KENeIWMzNjpzfjV8W0wp''@;'; put 'put ''d2FWaF5HTnF+fkl+PTZOWX5WZ2VzcHwocFtWfSI7JGwzcDolSzY3RG5tP3wzSGlSQk43Pz5VQSt3TXBIQXJ2c3teLjQuaHBjSmA0Oztze3hLTn5xZEZvZzk4XzZ8Nkw2KmNiOXg3eWh7OFZ8VkxZMWxQWVhQazJlVzAqezhWTmR5KkQiInxZUXw8dHI/IW87LlhDJHBzYXZvWSVENFdpKFZnQXEo''@;'; put 'put ''aUROdlloajMsbnhZPWdmMSU9Q011QCEoaVUwU0suVTVSNEIzQkw7JWBuV3clOjlvMWl9aCwyZXg1KExFOU9VfU5UWTAuOkdEKSFKSFBFU2czU1FJdSpsZldTayIlSjRvVm13ZShaZHBGPllscXJvaComSDxWTUBRbXBfRTdsKDYsRFUjS2YmYmVJV1tQJF4rZyQ7VF4yUCx6e0pIb21pWDF8RCNC''@;'; put 'put ''XzYsXU5RSGt6eyVFemROdUlpKyFsS2hSY318Pm82d1k+OShleD1PSVp+QHomYjIhIkRJbnImfjlQb0QuMUQiaVclRzIrI2AoN1liSllyc1Y5PDd0RyZeNFFVeWciQ11mOVljRCFCTSJXQjsuOzExITxuRk9IJkBbWFYoU1lTUC9aKCwoPDA6eWJ5Kmx5S29IVDssa1NRVSZTXz5AR3NKQDVSO29+''@;'; put 'put ''ZWNPTkgjLD0jJTc6SGtuOkhSVm95MEc/YDZZNWB6dUZmclt4cTp2QkBiZllebHprWG9mOnc0OX5vLzJIbX1IUHRCMDohdUJBMSFHKUUjemMwZiVscC8xbGosXjNKdXpxdjt3XTdHYytHYnRefGFsNltvOGB3P3xEPk8xM10qR2lUTUJWckRzK2Z4SzRkJDFUL20sYzJLMVFUa09ZZDFkVnd3bzkh''@;'; put 'put ''eUtLalhldzZpKjM8b1dMZzV2T344ZHxHdnQkNTR6NmNjWGtaJVdVVG0lV0dsIX5CVUMyNCpUQmM7M0Y6V0NoNDRvOEUxQl52L01Gcj5wW0dHRHVXK05HSVdGJXhnKVtCbE5CQlpDInc9I3tVNSw6KTBeJlVHZUYkR3hOZWxDcEQrYTZ1eVchKUYxODJlJVh8ITN4XURFS3p1eF9GZyNOYWM+PyY+''@;'; put 'put ''ZiZSZDl5OEIqKDBdQVA9Py42VF0rUS5HKkZafjp8XUh3OV1mMWFUJCZmZ2xtbX0kZSM3MksmPT0uUVQ9JWdXVWZofWtHJlNvQlt+N1t+bEZpSUd9OCxCbWN1TiRLLkpVYysmSnR+b18yaFdnWU1KS0Jfa0Z4bTRfR2JOWyU2azdwcl4ofGZPaUl3cyQqZl5lZmhjJiFjeDFJQ0x0MlVLYnRKZk8p''@;'; put 'put ''fnsmKi5IJmo3NT1ubSwxL0BAUH55T1AyTjpROmpFSlMoNWdHMHwzSG5HV0A2VF53XjN1R2h6NUMsSShodFA/JkFuTEwxRi9jbi9LQmZePUVZTFdabSZifDl3VklxUWJKbGB+PEN7Wm1YL21dO0YhMUBxbU5nZW1lT0FyKWNmfDo7T0JjclkxN2MpeVo9PFljSl9dYyRHVH5fMnEjNTgkaU4sI0Nz''@;'; put 'put ''ekQ0UDdkaj1VSmRhVTU+fVJpZChhPVIjRiR8VnAyfCVEJFpvRFg7eTREQnQ1R0g5UkgvTTJxLyN1ISNyYWF8ZS5UZl1PSXwsQGBuXjlLeHY2bnB0JCk0WltWLEhdKlR2eDIldkgqUDh2P2UmJWpmOmUmOC8qNThhNCU2K1AsaC8rbUQxI2Z3XT1AW0RyMi4uKykmZ3hCOkpycjBCSzFSSyFMUilx''@;'; put 'put ''UjcqbGZPIU8yVHZHT0hNUm82Oj1zNXxTcG44TEghWm8yQCQsakZMempRaVlaSCJsfW16eVcqQk4lWG0/XnQxMn1FZSx2KFZofGBDPExfPFVZaiEpLl07O115c2hRbENOY0FYMXYpYkNoIU0hcVM3YyZ9WWZFZjZQKWx8YDBGcz8pZDlLeWJ4MzViVGJgMiV3Jn1tInkoX09ubkRPOEtNT0MjUClT''@;'; put 'put ''TWRdeEdWL0Bxanw9KSkwdDs9cFl7SGhJUWw1TmUkRm1PMTBpKE8iI29SO14vfiwzdEE2LDJha1Z7fUBtTGFJekE5UDNeS3ZbP2dpfDMuTjdMTnROeGNlTiU1U1JzWm1PWVk9K0prRFJNdVd8RHpKfllXVjpCIkRtNXFJNiQ+SCtkM1shMkFvbWB0Tm5QaFAieFtIeTB8QH10K1ZyaHVCKVVyIWB3''@;'; put 'put ''bXlfR3QkUVhscVE8aWVteWEzNXl4KyRtIVk1elAuZDhBYX1SekNrRmtlWVVmS1k3ImshJWwqWjswP1ooUTZbMFFvMXpJYk1RfCopWGlURS9SM0tHQVsvVEBFaVF5KUIwRHV5L0FyTVVBfFtle0pXZkliWmpBalpFaD5jaDImbFs9anV0WFVNYjorbjY7bjE9fi9XYDAmJC5qeT08aWM5dS5vMH5t''@;'; put 'put ''U0NyPG5DdCp9NUEhRFg4eXp7WyJUPi5ae1FUPHVEO1BPNmA+L3w0SFFpOCs4RFNHWzlZXzk9ciEzKXZre3JkbSx9SnV8KzcsRHtzZHJ2aXNgfnlzOmB2UGl3UE1tRSpWT349QFRmRHdOMypaLjNCPW1VU2QzInswM2NpZnwuOnc1VXk+fnhjYm80aV51VjciVnc5Q0Y0QnFXTGcxJVFQaT97fEk8''@;'; put 'put ''QWoxQyMzITQ7NmAicFZYTCUpJD4xTnFTdlJ0RWpsVlY4N3N8T2smZHc6cXIxaV8pTU5EK0hvZGZIZyk8Xjk7MnhOPkF5VGFSUHs3PGYqcy9PNnRdUy4pKE4+V2FVbSVbTlsvIixoNU4qdW4oV3gzcmY1MCReJCliXS5gbnw5Qk4pNH4xX0VlLFhzb0dWPWxhNnB6ZitTKWBib0J4a192WU9tZEVf''@;'; put 'put ''Ky9Hcll6TkpHLyVpfHhzM1ByLyhLQFZdMnhoRFFAMkBnK1VyfEVeS2kvaDpOWm5YRHBde3B1NFkvZUNzITssZW5UYVtKQy5HTk9PbGtzYDgjazwuTktsNSIpeG4hZHFWUSZmc2N1T0chRSlBb3ZbP2FaNSI5ME1XaTpbJWRgKihLWnA6TkdXMnNuY2J5OHwxNkdWTEdHYGl7MitNRlI0OTdsaXlb''@;'; put 'put ''b3EoQitDfWdeVlcwPitOYCMxWU1xZ25VZVNDa2Q5bSlEOH1kSSZ6JkptJU1Ha3QvdzJEbigzMF42eUk5R3RnO2ArOnV7KE4qcztST0o3IkM+VkwpSlE2ZldJLnVWPmQlenwvbV1BVGdnQzdqRHpqaXIjWT5Gbj9+Vl9JV1g0dE1OP2pxZnZCY25qZFRmSDJuVlh2P0ZZUV1pXUpBRjJdXV4rUCw3''@;'; put 'put ''KyNuOGF1LEhHMVZ0enc3UXVDYmkoKDg5OH1YWERsYkQkZDdAU0MhSTUueys2T3d0eFg/VDpuJTpJWD4/dzJufFIiekxdIVFXVVUhXUlJXnRKcDJeY1ZgQTkvOnhUS1lRU0tmKSlCJiw7NHVPcm1OQkxQXWZCYnJpb3RxWVs6b18zMlpWSDMuSXZ5ZE8kYTdQayJ0Q3o+Uzp3VXsvaU1CaXg/WSxs''@;'; put 'put ''OT59fFQsRV89WXc/dlp2QDRjOTF1Y0d4L3sxPTZOYkNQaTlJQFVaUF5NXlZWMF1oQzV0R2tRU3BvY0ouZHVOWVVOcmBHIWYoRWp8MUUpTDNnVkh2MCpvVXYzYn4la3YyQipVTGxjWmQrQnJMRXlfIiptIkJuNUIvcD0vUzc/SXd1VjRrOXQ7ZDJINVA+bmpIL19tQlJvI0t7bV1OUkpgbmspQCMu''@;'; put 'put ''bnVUQTo9TE5YdjNaR3JWSE04KyJzeEIqRU9QbDN4c08zZWVZJlYhPE1wXlhvZVlwJit2IldVOD8oV1hkJmdYcyVkY3J4dT56I3haWz07eWRKMVI+S0U7ZlhubWJRQmspU1FwSFl1ZyJrZGhZfSpNfUM9UiRKfEMxbyk5OE5ZTS9xZDwmNE9kPXdnOmRII3UrKk5PPz92cTJ3NkRiITcyPCVDJCV1''@;'; put 'put ''MEVYcTgybWdpaX5YVShBMVM9TE80c3FUWWxdaC41Nzg5d04qKHQoNlM6ZyRTNGVnR0peRUA6M0BjYSMhUHcpZ2JYZ1R4MFtkbzNhPDpWcGBTOXBOKEdhIlRLYkwiOjJpRXtLUUVofWJEXyteKVlhOGRtKlFLQGgybSZ1ZCRiUTlzRi5sN11yXmtzUC9OdltOR05FRHVAXzhJY10zT3w/X0xFYSxe''@;'; put 'put ''QjorWSlfSj1dNWhbPldKOFV8ckw3eCFGOXdnKFtyP19CeU5pV1ZWdEoic1d0SmBBXVg/SjUvQ1ZIQipfUz57R34yeEx+KlI1THlDVHRidW09IUVUXyJkPXhbdERVLEdJeiVhLHJHPDFde1pyRn15bVp+VU1TMEZjcEMiOGM8dTFfJGh7O0JxeSZ+Ky9YcWs1VU4idkZdNjdAU3MzU1VrYTk4bFN1''@;'; put 'put ''InwpK3N0elsyKX5IK14lOXspJT9mPyo/M1VQQ1IvYXV6JnRySkM4YT1TdnsuNjRBWT1FNXtwUChQVmk5R3Y5SXs7fE9KcnVaaFhgWk1iTklxPWJSUlE0UDFZMjJ9fWk3bmZ9NlBrWCNYdS5JLzxeZGtobHUjMyUoQTRTQF9yImZaa1BYcExpfXEmKnRWYU1Cb3dzW0A6Ki87eCwoKVkkWnEpYVJn''@;'; put 'put ''UiVWQyh9fDRLZX41W2dFITxlRGc5OFhRVGNTQGgiXVlWKzBEWmhFLkYjZUcrdlgpNis2W2MxMGAyUVUwK1plbjR6ZSlndDZhX3lUcTJROHc1e2wsO3tRUHl0KSJ5eEl1SmA3bncrdGUuQlhENCZQUyJCTCo+ZyQqKFBaSjA/OENFV2pxQD57SmdvPVV6O0A/SylpSjdadjw3S2paQkhIfWFtVWFQ''@;'; put 'put ''TE1EWiYzV0ddYDFRKX1ocWc4T0cmaygjYjtMdUBzeG5EcWRxQncvbytmbEwubSMhJjUlUVZzbW5ud0FKaylDdUYpcHZnVyNYQCYzPVB2cUVXPHxmT2FeaSFuLixRdSEiZFJkQGY8VTl1SjU4fkFwVT90e3VhQls8MD1dLDB5OUx7IVtaME9wM2dbakVLMkR2SUxfV29ieCpAcXlMR2NyaD4mIXxn''@;'; put 'put ''K3BTKStvSmJIV3IjNWdvUCk0VVRjZWs4TnY5N29VdGQ2fSluSEZhYTtLUCg7LDtkVyEmaFdsIWprejpfPmZNdHxUOSQrVG9LaEt0alVZZ2guI1MxRkFsVD15JGRkU3hfRlIvdmovfCN3c0k3c2wkOSlPMCVAYmxPYkhQPH56LHwoZjZKazt2Vk91XjBSMmM7Knxpfmksem0xPSoyXVtYe29abllV''@;'; put 'put ''WihLPHlfLHdKIXtFYzsvWlpGV1pudn5KPT4vM0t3PiNgLDNYJU81YVJwTCp0YF00RCxrVS5lXWZaV29eaGBxeHIlaGw6UDsvMTFSWCg8KywlMj1GaUx+ZD83PjtdemM5djVQZnhCRjcuVVhjdkdUbkMjJDU7Ry5AY2lyNHFsUm5RdiRhWGtGMjlEXWUwXWV7bHRFclkhajJQMF5iTFA3dzZ2OSMl''@;'; put 'put ''LntjdFtveWZuZjVTKV5TOExQNi4pQiIoKDs1R31jbzJsJGVueGZZIyJjOmxxXm44YmpPYEJpKiFsY3koVlhUQWN6dHdRQCZbdzhbJitfUDhJdyteNUpiJTVxUiJvYkRCbTx2Y0NIXSFlI2lVc0NLdUdVIjxoPjJJZXw7dHEwMWFZIyYwaGd5a1YuK2VPc1ZEdSE9MSh8VywhV1dIQ0JeNihaNHpQ''@;'; put 'put ''KDlETS85Yy9AbnJhLGorOyhiKFdnU3VMc3FBZjxPfHJlYVE0PThieFteKCx5IWA2XTV7KTlMWHd1WEg+ZX1bfDJrdkwxKDM7aik3WD5dPX5wI0RVJUZfcVorb1dDPVh+XVdEd0trY2NFWyokcTxFV0VzVEJTSGtfYm5AW0w9RUpQNz0yYkVgPCMhWkIjUnJAUEJJTT11JTNqSUZRayhHLmtpLntf''@;'; put 'put ''aD9uU1VjWUVjWS52Y2ZsNUc4UjohInUrajp+JEoiKHpCTWZURUJ5SkokMmtTamN5aUgjUl1xbnFhYH16SHFTLjlgdjsiSmNKbFhFTHkvJFF3Q2xsVVN3SXYxKUlXU056Um9FdGlxTjcwQ0oiYExnIT1CbUJjMDtjR1NZXW8vVCFzcj16en5LKCx9cUpEZ2cmbXQqdlY8WjA/XmNzR3s/QkVIQzNI''@;'; put 'put ''RilqYnt+NmIhfGZefHs4S2NlW29LTUB4OSI7cEdTQ2dhaVViNVlwND0/VjV0QlBgIVZ5aEpPQnxIeFhGPWB9amEiPSs2e1toS0t6ZD1JI2RlMG52enArXkFudFY2PlZ9REFwWDsuaGVQaSNaJUo9fV53RXd2cDpNTlMlfnVKKD85bjZzbE5DKEZ4S3hIITlIT1FzRnNpdXY1UlRXVWlFMjxILzY8''@;'; put 'put ''bClXIkljU0BFM28iOjdoXi9DWiI1cClQOmxAL09fbihPS2hKckI3YDVUdnJ4OVtgbDZnY3pEZ1gkPkY/Z3lIMXRpbVZ3N0U/JmlDPS4qeHVwZCFDeVg+JjIvOSpDaDkyYypkaSFHXz9fODN5YyomeiZvako5PyhCVDJFa35PZU4jPlluIXNvJltzQ3ZXNF4/PlhBI2ZMR0VVSnVwOSlBWFM1ZV5a''@;'; put 'put ''ZF9MIXx4N24vVmwpMU0kezpvM09SLHIvNHI1WVFsKDtqdGgxWV9vTjBKS0BaOmA7aHVaVXJmYGhYaC5eV09sMEhJe2E/VjtALEFmLkFWUVdHTlJwW0NeNC5UUDNTbmtsSkBfakZrZ3h2dmhsKHpVRmpjZ0cmWlU7fj1JV3lgPDVGJjpjQCkyZ1UzIkFIUCs1WFYrW3ppd3UlM0RxZzxwTHB6TDlT''@;'; put 'put ''c3JDbWB5KC8lZE9wW1heQFg+NHZNW29IWTxTUHp5fUIsel1EZlExUnRMZT5LLGppbGE0WDwyUzAyX1B9bEsuL0x+JS9ySC8rKzE9blIpRVU0X0lOWGpfeDRMWWs7aGtYPSo+fisyLj5vOnEheC44Yns3NHhbPklTTCN5bT1FZSMrbDp4c35NZSUqNk59Ikk1YHhLZzFNR3ZKK25wa15PM15DL1ZY''@;'; put 'put ''aWBwYkRINnw5RVM1byVvME48XXc/Ql44d25gWUg4cTBjOGB2ZW1dXS8hM3ViZ0pGKFZdfV1YTVkweXIidntIdHVNfEtgant7TFQzYGk3QHlGM2dbVC9bci86OUd6Q19wKU1ebC9obWdDPExZa3N5bTVyOUU7TXZ0UiJBRjB2YyxFM3h+b3hPVSNkQjhPTlZ5eU55ZHAjYGRbbXVvOVZ+I2spbEMj''@;'; put 'put ''R1h+RzhaOS9CdkVGVXA4eF9OWV5RZl0/eilYIjY5WlQjeSVNTjgvNitEZzxkUVhsQDhLYntFNzpAQHg8ZTM8WW4kZClsa0wuTz8lXThJfHZNL2shNnx2S3JEeGc8emkoMkMhd1soYnYlSF5KZVhrW04iIk8/SWJrNEdQZD0vPTRdU1AwcSFhYipsSEZrVS5bIThNbjsqUndJL2ZRRXYrQjU9dn1L''@;'; put 'put ''fnpaa0E8SipmMU9zXVFtODIyO013NzcmcTJ+TyNUeGNhNEN3cXBrfHA5Lltyb1M3YmlXWVB5d3VDeV47fjgyeD9UPzIsdSlHN2doUC4rdnU0RiUqeTV0eD4rJDRJY3s3Q0JnXTFgQFB8UjIxeXQuZz4sfnsqdnE/bjxuezgsOT97MHc/PUptK052K00vMjVKQnVlNFRoYExEY2NiemMvNCtnczIi''@;'; put 'put ''UjtgbzRIfD5ZMEAsI2ZjSWNiOXRfekhKN3pbJk5kIS96Nmx0N2dSfDV0fHVmK09pejMxO01Mb1t9WGpwZGlFcSY5T0ZkVHVjWmEzWjF8STJGKHRnXjUxRH47Z01PNjJ1JU13VnNfQ1liWV51QkNwQWYjIV9udmYwfTZQOHcqcCtGVjErMCxieGdEaiNFbFIwe2U8RSEicmheeG0sZ05IRE5QP2RE''@;'; put 'put ''OHtgIWxwWEpGMj45NDFqLmMvMyVvbVtoJS89VyF2OGVIT2F8fEM7fH1LNyVbPmlBSmpHN3IrWTJQM0dYdzcpUXx2Z2JXT1VMTTo+V2d1VHpbOjkmaWExUFNVVjBGVSFgL153T2x2PmNYO0hWWEQpdWVrJSZSP1Nge256XS9KMlJVbzlbIk53Q0wzfTFaOE9jbHxlV3c0Kns4Mjs+Rm1WcnRXbkhk''@;'; put 'put ''fXc0OnFac2cwYkBgT2tVe0g+eUF4ViNnU2FGaVRHOUk9T20/NlZrNj19Ny90NFY8OXUvYFJtPHhbTFIhd2lpXk0waERfRkJHKEU2WVM/K34oZiZUJUd4ZUUxVHg5ZEtyPTA8bXZkM2JuUE8iOStpOS8wciglMStmdDIrPF1VayxkITxja2d7Nlo3Q1hwI2J1M3prY2JfYyohPzlOOyEiTjF9fGVF''@;'; put 'put ''P3AkRUg6RGgwZUk9PXJGIWx2MG15UU5JWjNeQ2N1PUNtWXZiKWNmXl9FLEV4TDUpIT0xNHx1Tz9hOlAkW0hqcGdBMWJFTFpybF5sOjVELk5LfXM7Kk81YF8wTVR3RnV2QSVCfC5idUs5bTpTdUtrNWt9SkI2WWVHPnY+cXVDXmwuKFdlR113SiNaPGw8czpMYGIpRGUrcHYvJDFyWikxU3M9I1ZD''@;'; put 'put ''fXV5VyxpZHZNTCl1cUpSS3N7Mix+enpTUkxwQUMpNEk2QExFL1Z1aSExKl9YRnk9TD4kaSl9TCFadEo5UlYqfldxW01keTtiMjRSREIiUnp4PDVhYHlkOGFyTGozdURPOENSVC5LU0NnbTxKRTxLMHFzNGImdkxgbkdsUD5LP1AvJXEpXWBWKDJqZmFOO2ddR1Yhc1pUak9jU2FkYlcmJTdpVmd7''@;'; put 'put ''UllZWyVebyFmQEB0c1JDelFSLzZVZndQPXFmfHE4VGI4YV48ZGVkSngsOFZzTnc0YjxmfmxeWzxse2ZmMT46QFdZUF47Zj8hUkd0aTJVKl4ucD9bLFZHITpPJWQlTnA6Lnl8JUVOcF1XMHxIa3NvZ31yYlE8YVRTNGxjbztkcW98NzQwUnNhajNXeWxuZkF1amdEMCM5NEBpP1Jnb3wuMiheN2U4''@;'; put 'put ''PU5bU1BAISt8PFU9N2Flb0A8SSZbbXZSbWhWeGA/YndgL1lub1lhOHk3cnBIMzJaVX5sdV0/Jm0wKGdVfWtpaVZ2JD8sYkVpJjl5NEokNSpCWSlPbW9senBbKVteaXp+ZD0hb2M2LkliVWF4JmNXIX5rbkxgPUxEJXVmbGI8UTNsPypnbis6ZllaM2M+NDplaF5QXiUwWUxybTlxMV15dXJCOG0o''@;'; put 'put ''XkVVUFRWYTJJQl5+OiIjNms9MGtmPjE0SnZeJHVrZUtNQ3t2XTszeHNtS1dzayZ3RT9jKyw5eUQ7U04wWWl+bCp6MHI4MHY6WkFsJWczYig1SHxBKCohVWtaKkJBYGNPUSp4JG5ubyp8NEg7TSglYTteOU06VH1NP3tofnpDL0lFO1s0PXoyIVZYVTBiUFJ9Wz1KTDZMOVBVXXt3ME5yUW9YZyFp''@;'; put 'put ''L2w/aEBUPj1lRzFec2lEKCJEP2JkcHFAfGxNQEs2cGApUzI7PVR0c2hhSEBpKXhdaUMoajNrVFRwJWpQfE5NMGtWLncoKilgJE0sRSYoUnNfekBUYGZzVnR6P2FlXXl9OHVxWUMjK3dbSll3YzdmSUU1OExQI3VzTSt1dDY3Qy8hPk5CfT9scjB8ZDw+c3c5Xlo+cGAoL0N5WzJ3fV1fJTAzXltm''@;'; put 'put ''KHZaSTg+JE5BUSJXJWo/YXVIQWhkZSNpcyohWWlxYV11Y2dpa2trU3taVDtiWyFOU1ZHVH18YGk7cHEwTCNeZVluOzEsRCojdm5FMD1bOSR6L0NxaU1fKSlRKShhQ1hoaFgmdzYxTG5nO1Bed2lyL05IT3BnVEdXVGlFODdqLypsY1VZbm16OSY9fUtIQiZ7RCNqKm4pb2JDYCJWPXJhJXdpQywl''@;'; put 'put ''JnUuVkJkOi89R11gKXIjZmgjTSVGMm0mQEVMbGtYQiQrcUk1VyZAb3Q6OTxPakJQXUlsblgsJTJESDBWWjRJfG5JI2RWLEY+a3VGQk4jZlZIdl1KXVIuVlgwSCM+PCYxRSRdT2Q9N0o9ZmJ1MlA9UUhlM2RlMWpVZm03PVVtWUxSaXJnejs1IXdCJiZAUkRMJHBHSFtgdFQ1QUFRZ1tmIW5RI2Q9''@;'; put 'put ''R0JlbC5sKXxAO2NjRVhldXNudHFGe0VpOlltPzgxMFhmN1N+cEh6ciJZb0g5UiMmdkRLcThbIXtrfFlna2QkRmpLUnk6a102NDdxej0yIk5Mc3FTTnooOTU+XnY+SXxkUiNgckwkZFtfUEthOTQuaF87JStpNStUSEczTDx2ZTtdbE53ck1tPWNiSGRrKW5HVk9XMnZKeGIjcU98OmNxaURXe24o''@;'; put 'put ''Xi82ei5BYEhEUkRsb2k0KXpJJm00YlJHNCV5ZWBZS200S0ROVGVROkNiazY/Rnp6cXtCbzM9LmY3ckQ0ZlZOJCtHIUpEdlRveSx+PldjVDZbJHokdD8uWDsrMm85VzR0WnZwJmFuM1s/cSs3Umh6T0s0JUpeJVlieE4pM0MsKC9qWFVeXXVxSTJoQyUzcU5wTEF2WUVVWD89QDkkW3lzWGVNImNZ''@;'; put 'put ''Uk9BNTw8cDopUkZXNyksS1hOMit5SSVYSG9leD49VCEmY3A2YVNwOlZVP0xUUiNyLColenhkJC46Skt6fHJtYTlIJTgkQFA2WnlecFF0bEVlPj0uUGNXYW1vfWpFLF5DcW59fmtLQXQ7fXNCMShUUVo0Lz92ZXEuMWpmQls7M0REKnwmXVs4MEshTFspZXZsQUNrM2BeIWthQ1lsPj45bzl1ZD1B''@;'; put 'put ''aSJjXzMhYWtieDxGUzt5IXcoM1RSYnpTPmYwJEdYYzs+MThORXRkWWcoI1RNdWxgWjB7eXVXbShsbHshL1kiUjNeMm11ZyMsbG57K1ZaJkpTT3NAcG1yWWFgOVJLV0hPU2l8YVBMfk9aOTtFVFNZN0MsfHpeMy93VUdnKFZDTygrKT0jdEwrLGdYMXFaSlF1fXJtYC8mTEMqND8qSW1oIW5hZmtS''@;'; put 'put ''Il12QDV4YH1bdiVmMUFJU1EoL0pBWHkiOVNXUEljeVhKUHtCe2EpMHhiRVRWNHosKVgpSm5ZTFQ7VW4hTEAjTX4xdU0/X2tVSG4mPUZYSj5lUSspWH1QZlBCfDY4I3FCZnFBbSN7aTQsVl94ejAmaUthPXpSUnhLQWYuSEFnSnEpZVtiOSZTbnlkNT03dSF8PEtUSjVsUHFUYSNeN0R5bTUxO2U8''@;'; put 'put ''b1d6TjZ8WnZGYTJ6UT1ZaUU8Y3FvK2lIUmklMzpXN0B6eCpmKzRzX15SPXBScilFNThISClkKXRXV3xvYFU6cUx0QEB4YWd8anRNNUZqNFRuKTUhMDZ6OFg9QUg9PlR0PyIoeWshPCFsPWRmdkZLNygidDM9dkIsPXc3RSlGOm5TRnV7OE5Qe013MDldeD1bPGcjYkciNDtgUDpgMGhZQHAxQUki''@;'; put 'put ''RFgsIXVGX21kQEpTMTlSZWZmeCxtfSZrVURrZUUhPDd2KFYqaj04TSlPREtLTjAkYl1EbXR7eXhNTTVpelQiXWw5VyksOTlCcjxtSF1ML2dBS1U3dDZbXjR4OzNsej4xPmVqfEYkMFQpd3g2alNCdjg6MloyeUFtYThWWHYuViYhVnNFPlR8STBYSGY4MjdrLkZ1P1U9XiNBKkN0MFpBQWJ4e2o3''@;'; put 'put ''NERCMm0pNz1SSUYiQndAaXlCR0doN0JHQ3xZbngxU3dRLEtHMVk0fDxoZnFYVEhncmJYe0tKLG92Z1p8aHlnXUQ8JCtPeWdNdVNwL0VFOGtOY3JvRVtwYjByO3wxTlpWXk1rMW4zOzwmIVBsOyV+X05aelRWLGZbMWBGITo9V2c+Nig2KHo5bGdhc1tbeU48SE8peis0bWRxXnBLfnxlRn5XVyt+''@;'; put 'put ''Zn56JG1EPVY0VC9TNlpuYTBkLHJ4NUl1YVlNeVZAfkpfSUMobmIsTUx7Rkl1RHdlXzRnOndFUlpoKjI2dzYmSi8+S2x6O2QkZnE6U3QpSnEzOyg0JGxwZ1EqTD1jbSNdeFN+OXombHkuWERIMVRITUIjSEcoKkoocGElZEc2ZW9yMzA7eE9SSDZWYiFDVGl4aUFJZCQ8KlYxSXl4VllVJE0iKTBV''@;'; put 'put ''ZyV4KlVmeWRQbkYjRU9geV8uKlA2KCt8QjRQPUchYEU9PkVeQD5wamN5cWBecHk9LFN4WHkhVFtHT2pxRTwpSE12PHdwUEZAe3FwTFNocD16b0pdWmo0QyshYFZLP2BXSm0xJXV0bXAkX0B9P1kxNn44OSsyR0ZgVipsWiVUST00dU5oXWZ8VFs+OD5GIlp8dXdCIW9EN2d7R2spakFfWj9ga11P''@;'; put 'put ''OmwkeVRyNjpSOHpdTWEkeUNsLERLeE1he3c9aDx+WlgvLnBVMklBQ1M2UTpiLFdWXiE/dkkpKl5SVT5iYzt3dHZdcGVbKFsuPkx+UU9YUkAjSzl3Kl1veCtQKlkrUXk+XzZgOWxfRGd6I0dsbSlOaWs0XTRXUDN8UGYuJX5rXXArcjVPO213My5kY3NvR0FRZHdrQiIhZkVmX3tvZHFGUjklcSUp''@;'; put 'put ''Y3A2Z1Y6KCI2MFZsV3YlfnwjW21bXnF7d0xWdU93WUhMVUBkV3ssZzRITlNXN0ZJeTZLeUtTRiRlU2dXT3QzcXwhRU41XmBeUVpxe04iRWZkOVMubl5mOithSGJ7YXw9SnBdLG8lOTNpbkhnSUVmaCpDJnM0byxkZyZ8cWI9T3xQcXVtQk5OXVtCYm5Ec1tYSEhtPlVXOUEyQ112KkU8ekk1XzBm''@;'; put 'put ''IWo6NUlWKiVxOUBkbU9dLjl3WlU6ZzVnalNsNWA+M1BmemNmRSVFKColQzAoNSlrY3xLL1JSKiVPWzpvVWtmQkt7Sy59I2kqPVcmWGMjLF1vUSNGSDYvSkVnP0l3M2pHck4sVFEjTjckI0JQTixYWiN+cENDc2RFX0hYImUyfmBHdyglXyxpTnp3R29+WkpmRkpLKlJfKUZBNU5PbGh2ejE3a1Yu''@;'; put 'put ''WjZ4X0NTQ01SW3J7NX42cjZDYk9+IkoyXXROY0pAZTtdUUVPKEhXe2w0NSlTcSFEcF5TSmNNPE4rfk9xMld8d2dfaGk8OnJfZ0oqJTAyeTtwU0NzaDB9dDRwejMrR2hFZTlmN28/fGxjPm5EX2JePk5gZVlxXVNleF1yLmNbS0ozOihZNisxP1FjbWIzPVYsIU14L35aYjN6QnQ8TyZtWzlQNCFb''@;'; put 'put ''ZkghSk0md1FtTjowemEudSVjRkkoUDhjQE89ej9tLFRoPVBgcygwTWBiYGw0fSxTdTFPdlpVNzFadWZBV0d+UmA0RHxEUjNocUxsNHdgOE9MQilxNiNZVDsxRC4pRXc2OyRsXT5+TjFdRGh8eDp2Z3VsJmIyQ1dUNk1xX2BoTT11PT9nPHZLQjtQTXhMdCw7UUtEREB0XVc4QjA7ZjVEdT1kVSNy''@;'; put 'put ''ZXtwKz5NZmFDMzI6MWRuPyJSZW5tQD1VRkR7b0BLWXhIRlhhaE50fFtUZnRrfEJ0Z3xdck9kJVg3XkokOWhtLi4vU1ltWV1XQ00oWmE1QSgkVkxlcHNkUF8qSW5qKUQkbk1VSTdJPXkjSlFlKFV4S29iRmx1QEZ4KGl9VjIhZEMmaXg3Nyh4ISY1MkcuQjBYMT1uYGs1TDFgOktQU2olNmEkNUEk''@;'; put 'put ''RWN+ZFVALGJrLn5fZCp5dilkPFt6X1lRIS8rU0VWbTAxOjgqUDN9NyM5MEVASl8oW21mUmgyMlJhc203KWlRXXkraF1hYU9FMEliXT52LD1HIUJ0UEZwfGVYISV6QE1ZWihuYE1aWDRuXk1yKT9VVyh+S0dHb1twNn0rXmt1YiNveFZhVzRffFR6T0NLZXZvIlJGITd+QCQzRTNbNDlZOFZ8WXlq''@;'; put 'put ''LD4/UXgoYFhUVFdGOzV3MyZRfmxfTjRxJWF8bGBhI3dtNFVQdko2Z3xuKWI0KXM+bywvbEVvcz5Yc3Eld21tZCQpQUpXI0RkRTR3aWBhOXQ1Pmk4dTYhKSk+TEJSW3U8UzUvWmszJSIyRkF5N3p7SVc/OzMxMWgwZjx9MDYoM25wQW5ILGdNbl8xUFhPQzVFZTthYTQ6TEtpPUA3TnxoNGM+bSlp''@;'; put 'put ''X3JEWmchUGs4WyJLXmFnazxvLzhFM01oamA2W3JvR0JfPSFoQ0UhaFFUaWFGR0xDJGIwUm06PWVzPy5oZmFqTjtxcm9Veik0OldKQXdNYksvaEpSeEg8X09qand5Q2UpbDlMSCFxMj16eEMydCskZX1JLE9mNHg8fThFOSVvbTMkVnV4aGlvQnUqSig6JXI1TjtrTDQ+U1IjPSw2ZXxBa08qKmgi''@;'; put 'put ''VzMmc3MqdkxVOVouZVF3JmJnflZmI0Y8ZDpON1EiNngzVUc0fU13PkF6LyFLQzFLL0Q8cypKNV49cnY+MyFbU2FyPjtkbWROZnE4RkF3Xz1ucC81IzlHY25YdTxdUWRXRFE5PG40dWJSW3h4dmRqbVU9OUhmW0JRKGE6c2RQMCpjb2VJdFpaPlM1Jjd5WlVHdiJlcl8icjJfNHlqbXZ9cEcyWWlp''@;'; put 'put ''fUNkY285ZlloK0xXWUd5N2hLKl9Nfl1NKFNkZmR6bmFlJXBnYTxAdV9dYl5hNl59MldOc0ZOT35tLFRiNCUiJihqdSQkezUxImVzSG59MTpTK2hCS1YlTiRnaTExfnYrPFQsa2N5NiFTISNYND1wWzpyRGlXbUBhODF4Z11zflRaX0xoSjI0OyIpT3o2IW5ZU0ZkbD15dzhQKVpYUFEpZ2tpd35n''@;'; put 'put ''JWgrc1daXWlFWEoqaGQobmp0bno3d198XSk6a0BfZiFTZlF3fEYhOHdBPTc+O15HejlgUHVQTW1ReTZXTzIlR10mIihFREVgMHFWVC41YyNiJmlhfEdYVlE6Iz0oT353Ymc9TzxBcyx+JTo3LEVQW19PVFsoeVNdfSx5YCRXeFRZWTUkfDwzO1I4LyVwQThHKnVZLzxdMWZ4TiVWRzBoPj5NNEUv''@;'; put 'put ''ZW8rPCgjM3xGI2BrQmt4I21ELEh1eGxIR3VHKklRRnciWD1RYzttNn44Qj9hWlNlTCMmSFRYbV8wRilQXlZTKy5KPFlYZyt+YUBvbW1yJTYiNWtgUHtaTi4sTnFkJjwxdzsvbitbM2dGfT0yLE1Ua3BlVU9NcmlHdy5nK3ovNip4O0BOWExNMnhDcjIvc1RzMUAzQ00rKy8udXs/aldQJldHbyFZ''@;'; put 'put ''Un0vY197az4hMFd0eXlPO2c3MUhAJHtqckZoMjhNTWBOdWQxZUBbOD8iI25zajFRXiNaMnU1Ukh0Jl1WX0A4dHJIbDtuVTl2TjhZJTA/TTpuIV5JSGFNa29RMmxeJlR+Wj1oYlMuZlR+NUtnJEN0TXpgMlRpMk01WUUsYTImcVAkdkk8KHA7aVZTbmhtNyNBVWxOQm86Ml1gMjteSixMZiF6dF1Y''@;'; put 'put ''eD4xPkN8RXZMPFA7a2VHKU5UYyZAKDo+UGY5c3BHTWFYQF9Nemh6RklzTDlRLiM+SyNYNCRLSjtofGZmIW9yXlJOJSkoP01yb3kwN2owQy5wVlJIaHVySHBYaWZGYlN0aDBpMDh6enpyUFd0ZWxfbTx5Tj1BWU5gSjdPXiI+YSNAbnFsLFkwfSZLXVBuOiM4fHR8Z2dYPVRlI3R0cDdMVFhPMGU5''@;'; put 'put ''c1BQVno+TE9Zal9+MlVHI2pzOXkiI3ByNiZPPG9KTmN3aWVIeiQ0JkwqNDVYKms9ZURGdU1VNTkxYD9ieE1keTJbVl4xVmw0UWpaeE1WOCg0RVZDMVJ2OH1MTC9nRStlc3dtVkIzeyIzaD1TTl5tIS9lZnxYSkJsYGErRmEqNylJZUlwVGRUQ2kzKTJ2Q2MycVtEZk9Wc2I/S0cxZEImR3dMKExE''@;'; put 'put ''en1GTW1ySi5VZHEzXS5LdV9RWHNJJF42WjBrOF4iWjFab1BHRFNAO2wpVio8YVc6S1VNLFhlaUxBNjMvQHtobWdGTWVNaDN9USoqb2UsKSJGXzkxOk1RVDJoclQ3SiI6UmhxJVd5UF00UEwkLl8+Tl5VJFF5RyRwbVo9bW0hLn46TmJJbmxIWkFrS315LFFGTCtKKFNoXjRUXWZFZTh0bFNeSD9l''@;'; put 'put ''Pk8vWUBefEJ8ekw4fElPeCZuUntUNlUrMDtuN11KbkhRdmpQKHJSJDdOMis5dmxmfTg+bWBEaX4wU0JwZkVQU0cyTnZjV3QrQkFlRVE1JndYNV1eWUxOTDppRV5laXxiaFAvPEJKLlZlMEBYRmpWPnN1TGVzO2Q9JUpTXU1+Ui47O3ZaZEE4WkVbXjAwMSRdS081QyQ+cUJtUWY3KGx+R3lHe2cm''@;'; put 'put ''TVF3bDA/YGIvPF1UeHAvQmxCOC5zPFRgdXxUPUk2e11+Kkt+K2NlPjwjJFlGc0FVQjNCM09MQjxYVl9rRCVVYEk7KiQ0VykxKWJAJHw8JT5OfiRFeklOUyJOfWdPQnoyMjxhcWVKPCprI0dxK2Q1Yyp+aD0xYSx9dSZpK2cpbEQ0W2gmaHVvbzJnVklsSUJZdkR8ND8jUlBzR05xfjZ3b1MrPm5p''@;'; put 'put ''X3ZVS0dLUSpRQyVUPyV+WHQrTD42TVMvT2c0NHRXKmlOb2FPRENOXXcwc1JpWShRclUxbyYqXVAibmpYWTchNk03M3kkNm98SD00WGlRJUBga0YxPEVMZGJPO2pwdDYlaiZnL30pJThrYlpLMi59NDI+eSRFJW1rajZzU2lfWzo0XTh1LixiIkRPYyp3bFoiYGFGPWpFSkk4eHY5OEssPXJLWCYx''@;'; put 'put ''R3ksaHpnV3dHfU5AYl1ldW19aHVCekxRMk93c2pORG9LaUBFNy9yXnwlTj8me0dvIkh7X2dwYTJzYlI1N35YfXVNckQ/KlZya2BfSVp3XUxuVEplSm9IdkVNbFhGYng8fFdLL0YhQ2BjKCFjYSRlOHlEUjQscl9HJld5dWxxVk90aDxfXyMwaSlWMHl3Kys9SFQqdmhgUl1EU1BtPCw0TlhlX3hS''@;'; put 'put ''OF12PXFXIy5wVG9ETHFRZCxfez5wYXhaI1RZKn4xI1RRbixJRmVWdl4pP21+fjp4bSIpaTN6UFRVbTNzL0glckFZMy4zOjUvOz1ufFBAQzN+MjcrNDMyNEt+I1UmPXo/OnQxclNhOlBgY2U4ODxbaF04JjpdTFlmTEIseVIhYlk7RSFPZWlSY3whJSRmX2lJRT0kKEIudnRNTlg6aWBHeip2Q0kv''@;'; put 'put ''PyYzcmAoQER0NlU7Ojk5TTFQRm5GRmd3RmozWE9AfVhlRHBuc3I9cjRxNT5SfkAzI0JJRWlmbXYoWSwiXmZMITAiandmZyhjSVR3ej81e0siciV7SlFZWU1hMGl7UTFrKWhgaSp5ZmlNfSFINEZGfnwkWVRJNmEmU0pyZGMlVzleQG4lTl1DelAkYlI6XnIqOzp4PzFoQVJpfl5oLjBAaCx8IWp3''@;'; put 'put ''Kl1UYl5BUj05LkdYVTlnOXo4MHFTeEJBIWhLQUYxLjhZZUBjSV18Uyg1NH4yIylKJSJRXzI1X2R3KFVKVk17YjdLdUxkLjY1ZC5yL01RSG9gXmJjQnUiUiRALnhMK2VHbEpkSDFdajBjUlheTF1CX2UiaUtWOywjenksY1ghaXxPYk87WiJKOCMiU35AO3NDXSVCXW18UFVxST92RGc/R2RrUyN4''@;'; put 'put ''YTRuSnhdb2BTWnpwSTUxfDNQYHxUMjdNRUNOW10ham5eL2h+TU8mM1kpUWJwPnh5MW1gV2ckPVtXPFIoMF1qZFYpNGI9U2BVal59Vn5faEx2YTt3QEhLZU17KzFfO1pAIXsvSl5jNUoiRlkxT1dOcjIhel0vbHRaMnooNm41NXZCamwsTHV0UWdNKnEjeXZLNF9RPzY0V2ZTdWZPJXR4WyNYJD5v''@;'; put 'put ''Xm5CKT5neS56RCQsSEJgMFM1JXhTMEhkRlk/I11MVy4uenU5dG9hfDglOHc+OSpvbD9SLkFzVypbeFRUPnRDRTBjYEdMaTZ8d2QzY01xVlthTGNjPyRZYEt0KV8kcmN5dF1gei8wYT47YDZCJVEwY2g2YmVHQmNkXTE6cnQqTjhnX1ZKSHVee0VMelAjTTg2WC9xKkZCQ0AhaDo/YXMlIzBpaWhf''@;'; put 'put ''Wk4qOWwhPD9+WUMkSll7OVMwSnZjbEtIZHNPP3dCNTsvY3lTVzRRJGpEJXJ2fFVGdEQ2Rzxzbi5KJUI4fH0rV2MvbXdRRHlUWHM2ZChtS20lKCZTPT93YXhBQXRLOFZKRCVQY1c4KmU4ZEliTlt6UHRvdkNfVkhgQU96WGpNZTVuNllPaUwxVVtoT1NLclJGTDAqK1thcWkyKntNOUsqMXlVOXdO''@;'; put 'put ''bDMjJV91dUx+fmJpPUZ1TSJUPjA8MVgvSy48V2dVKSMjPyMsUU12eTteTHIzRHtBZXx+fUN6TyhMZj9mWldSKDhlW2RYXnpxTXN5KE0hc0tKMlZmWlBIcyNPP1lHaTBERCs8N3VJaSpCZVd+P0hkP3hiLkM6M1lVem0xY0BuLi9gJX5RKDo1RHQrZklOL15aTyNTcWZBe3B0eVVKVjQqMnByJExP''@;'; put 'put ''MEUzOHlaNFUoVG9QNzp4MGwvc1NCOHxnZzk6Py8wVFIlU3h5blp1VSlSJGV0ITkwfjRUV09JQVcrOVFAbFcmYzFQaSNFJTA0dSQvL2ZHRCZjcVRMOGNzfjRAUz1QXVU+Smw6QzFMY1JlT3A1YjJQbXxQPT1FXT9rdyZecns7aTJbRVskVm46dnxWSk98e0RPd3MybUVgR1sqdCY5YWI/UFJ7dSQk''@;'; put 'put ''al00Yjh1aiZWYVBBMTxHRyVJTnlLd0pDOzN2YV8yJm91byUhRG5lOEVJMGYseEJyaUBmcn4/N3IiSiNUNypAbVhBMGR8K3A9QmZIX3ZDJmNGTGZgJnB0NkcuT3ZKKH1DZG5IOilhKHpMbn5uaVJJZG8zbEd9REBJO2dzMDA6QF5wb1ZXZjgxNTVmSTFAdTFzNCgscDs7dV85SzQqeXc3e3pPczUq''@;'; put 'put ''dVhIdlszYWJzNkUyViF0TGs7TEx7aXlaNSxEKm8hNl5HR2p8N25zVzxmLjhObEB7dUcwXlgkTWtAIVBFPk5PNzZsbT5xYWFXQWtIcEY1YiplSDhbfTExbC5meCQmWCp3IkJxQjwjcjhtekwuRmF0bmMkWD43RHt3cVtuSyUlN1FqN09CaXFvW01bXXVFMkE6QDEzayNtL1RAa1VRO2FiUUk5PUJU''@;'; put 'put ''JnsxNlgxdH14IyUmV20qdEU2OEUlfGxsOFI5NG9xbllRfnozZk08REdkbzxIe1hRYDpCU0h+cjkwUXE4RWc1X1NxXihFI2w9RlQ3PzMqaHRmeGhJMmczeW9NY3s7RnxHKW9kKlBfcihOJjY+JTtsOj93YjFlXSZaektAS1lEdm5rW25uJGx2YSJhMWEySFo8QkxYV2RyWlVfUnl7OSM6R2Z6Uyh1''@;'; put 'put ''eEgrSHsyZ0JFVSxyLkdLU0c7WHJLIldnM0J+VE55Xjs+L3FCUTY6KkhSOyVxemZkKnt3JmxWXXx7Pk9YS2xOajtHWiNOZk44Qi4kbUdQUCk8JER3fUlFa0sqI2Qwb15INS8pM3pUOC9gKjRoekNTJFMoOU9oLHorSUJSUERISyVeV2IofVFreFArXyM2bHM5dk8hNy5uNSFPITpQN248TEhmU09e''@;'; put 'put ''blVWKGRqUEQjSDo6aG9kY29OPFgzNisoNFdlYCsoW0Z6NEhMIz16Q3gzRjFOVU0md0B+STF3YX07dWQrL2wpOi4sSVBrTEYxVHgxdmpFI3sme0Nye2gsQjdxUWRhMyx2fjEweU43Kip4UVtGSHR4ez1RfV5nM1JsakImbXEucnB1P0lOajVlL3k4TFFXUl14RV5kLDxELGlsTmQ9eS5jRlM9LnlL''@;'; put 'put ''PG4jPjt2InsmQDVEbTdHTTdjfEJlP0BAVFgySjsmJG5VX3cyK3ksaz5oUTJUMFQ8fUdgaFUjS1BrfiU5LHs9QHQ9NlRlLzVAZSlfa00yIkp3d3xyeGJeVkp1NH5WYkUkLzAoOSpzTCwuTmRJZSIrQG0yR2kiOj1MKSsiR1ssRmlmTykzLGNYL20uPUdmTVh0TStmRTVMR0JdVWNCellrNDdIeFA8''@;'; put 'put ''RiZ9Z2Y+fnBiTHRQdXJqP0JIcmBiZ2p5LjF4U2A5XXsiZ3VZRXpPPk5CJiVJYT9CKFdEQDB1VmVPKHldLlQ3T3orakVZfSZvNlRpPFpwVm43LmM1UEtEWWZJT151fFFzNnNDbHU6VUZAcUo5cEdGIU82JD1KTl91KG1UT351QjY2aCghWVIrVkwoISpoezNPeXomY144VChIc3Z0VndFZiw/RGVe''@;'; put 'put ''XmxnLE11eTghTzl8V1piJHJIQyZLN3FHPUdQTXFaYD1GMTphM2BGSDZ3ITUuWXNzQVI7ckU+cGBwXUhod3dVQy5uLD9pXnN7UC58WzU5PUJwajIwLFVqNkYpWFtsRXVRO0JeSi50ZS9MMzJsV3xOSHVbZmd3VHR8blgjfl5UTHxdJjA2UE8jSkF7b04+RDhmfUNAaDhDWUVlWHx5LyopXjhYOS8x''@;'; put 'put ''IyNsL1JeWSFbMjk8aD1Xe0YlTm1JO3glYzl4d2VyaTpGVTpkWVJWUD9aRDhjVjJlMyE1OjxkNFE5R2xfYkVGKDw8eTI9ZXs0UD5xQUtdUmspez1PNltXWXR4dmBofi9+fEBjdjRwNz5PYFk7L3lKQGhBIzd8UW9YX2dfO29tQlkqIVJBXTwqNzk8I30vZF9ZUClqWjRDdVAldipKdiF9cDR4VzRD''@;'; put 'put ''WEBwOk96LFN3Y1BsRztVX2xtVHJ6aHtISUgjOFBAI0d1e2E4QXBJPmosJnRXOmV0cyg5L3JlLkZ+R2dEUWFsKSRSYnRBPSxPR30wSXE4IyFCczY0N09dRFFlQTV9ZH4hV2tXRnVpdDtUYyU+JlIkPWdVLm5nKD9CcVMmNlh5UGlZNm9xMmsrMHA2M0NIbm1JJF1kfnc1Jl1lZjoobyZVbztYVFM6''@;'; put 'put ''b3koTXdtS2hnWFI/aUlweDNmUn41L31EcT5nQW5fT0dtMlh+d3MrfE9sSWM9WU56Wk8uPGg9M3dfNmJSVUU9aU5tOW14MG4lS1k0PCE2cFh8bU8jVCh1cEQ1bSRoTkUua2Q1VmNVOyZ1NndqeHJOUXBje3FvWSYrcWlmM1tEZTkwXyNrO29lRjoiXWVIOH1FPW19eHUsI1Y9Z34sT2wudDMhdjs+''@;'; put 'put ''NjtbdS9pTl5PIkZrOXRBUmtdP1ROIkZwYnMlWDM/cXRsaDhTUCgsanxUdD5VU3dIW016ZD9ScSNfKUJ3IXdGbUYuWlliU1RjL1pSXncuMlJDR2VTLDcwcCIrfUhERjNTa0RnUFFHW3dJc1N7QkhSe0YldDdgTj5DcGpKZnNTc0hgWXRbSG4uNF91QDY2RWclPXEhVCVmOjJNeCJXIXdoWTFQVi9M''@;'; put 'put ''W1p0W34+TlgyfSk+b0N5VHVuJXlwZzQhYiRPSk9DOFowNiFbK11lNUZhOCtFazB3Z1ddUlRvdEMoQTlLVDJlcEVVQjl1QGpgTikzR0RFQl9+T1l7YHs6TV40QXU4azRdUEg7OXV3YG4/ekl5NUkoW24lcnhufDF7b2dINkEmdVZQT3Y/Ry5XeSErW2lCK2NeZENSPklWPTlwIlVbdVtNOSwhRWs8''@;'; put 'put ''PkB3VyQ4UWxdRlhebWYicCV3Qj8oPWYkTjYhWVdRPG1mNVEqe1spNzNXR3JkZV55TGFfWXQ0a311PyxOISIxJHJHIl9KNE5aV0xtWG5qQ1pjQ0dlISo6JmBRYj4sRnZCPDJ+KU9vVWsxYUB9WjlvVV5jKElPWDosWzVPVmFCZDU5ZkQ5UVRQfTxMJX5MViROYG1BWEdgPGBKdzU2OS4qLkgyQSJW''@;'; put 'put ''K3dCfV5mSF9pSHp0SHQ4JT1TUy4yMm9adToqKk4jfG9NRGVVLDEmLnVpYTw0KzdTIz4lNjhzY1VZIUIjTSV7a3A0UUo8XWRZOU9EVHNJTmNfYCFlWmolWz9TQTFnbW1NeExTeyVBVGk8K3BBZVZmeUtyOUs1XiVUZUFRTG5GVE0vQ2FtLE0uciNmSmNXSnhuWTYkcktzM3Z4VisvL1VFV3xXWllt''@;'; put 'put ''P05WZGBeeWRVSWhwYCZpYzJfR2lIREcrMSRNaFh7Iix2M0FGJHJGaGJoO0RuND0+Oll4P0FpIXA6eiIpInZgSE5DS21OcFQmJGdQXiNmQjckaCxKeCs6N2JLS1YwJEBbOkpQezM0K05QRFRhdS4oTk1MTSZhaGF2MUluTD1oJWAzZWlpTipVYWw2bSs0cD1+OUtYb3tZcVcufmZ+LlFIanpHZV4r''@;'; put 'put ''dXAxbkJVKV5fQHRoYS5JMkw1IitmO1Y/Plo/WCh9bC92KzBuMy42UVZ7NDBzMC5MMztKPCtXUjIoOkgqcEdJcyN0dzR8NVR3fjcsUSI4ZyJRaC5MPFBSIUpMcDBVe2UoOztIc2ZFJlNOVzRNWCN5Vm5SU3Z3aDBzSDJgOGptVkJlPHBFLGVRUXd4azw4UVY1fm1XeFcvKTIvd2gyeEVYW0RRNzI4''@;'; put 'put ''PClUdktNRSQuZmp0VmxtfG1oWjxWJnV0MGkqeFE+b2xUeGskK3RNb3hoe3VHK19yTzBYdGA6az5LbEYuIXxPWyVYfFFkLkJrPXdOdX41N2c7UVBZSiFCeCpfLz5FN3FHLGtPXztPV05wMnovRV4oVWxwQyxnenBTPnIzb3RefF1KVEBZR1RMelYwezFpdChDY2c0Nm5veFdGa3AmVWN7dXxfVTx6''@;'; put 'put ''Uz52WXU8d0ZTSHJBdVRAczdZeTJVelAjR0MzR1F8JStkYDNTWzBWRVk7XiYwT2FUI0t+PktKdjUjRT5YYD9DOVckR25bP0RGViNNdjp7fkFPKlJJUylSRVBJaFM7MzoibHYkaiklNmlzPGxhYU9zKVY+LCtAUnBNS3MrX1hASyNhQ0lTUXpHXjk9LyVEL2p2VFNhY3Q+RzpOdGpBJihLTFJsV05B''@;'; put 'put ''NiF7ejF3WDhERz4qdlhHdVAvKkUzUj5wKjxtOHVwTHl6eDZYNkByR1IlN3V3aTMqLzdycS50Q0g3VVBoSEEoYnJoMT1eVH5aeF83XyxIVXAiZihON30/bmF4Q201Ui5AMmhwTlEhfE4mQ3JPXklpcGkhd1JFd3I/Lmslb3Vwelp5VW9vKzF1SGBfIisxfiE6SXBJMUVHKEN4VFI5flpBNj9bKXUj''@;'; put 'put ''e2kjIiZXOCl6OktXbS81LmpoRl9aQFAxRTcuPT5VMyFQRTpVemBSQ3Z1OHM0OGw3KVRZbl0hNipnKzw4OCZ3dDM8RE4lYk1qZykhJVJSW0hqRThhOiN7Oz5jVzFvSyY4fFhOOmAkRDJmZC4uKUo7XmFBMFN2RkJjbVJGPzlCcE4kVltmQXlkMDxOfHIzKFkrO1ZyKzVeYHprajRRJTAjL2JKIjxo''@;'; put 'put ''Q1ZSenFkXWNjZFk1KGArJGhwPSo2UXVuZX1dRlkvUSxmUlY+UFdYRFs5Ol5tSDEpSk5VKWUqTHxpfF95XiVYMVJ8eFpxJXE5bXcjYFQrczBoWSZrQEtycTVhVGouNlA1dkluSW5MdWFEOi96JG9mMmlnRilUJDVfJjBmfEJfKCVIeDN0LztuWF8sQW0kdEI9ISJXeCRiUzF5Rz9sK1ZeX0s7RH1j''@;'; put 'put ''NHE8aWVdPn58MEovfEVhUW1iTFUsO3c0N1s5aHpYfjpwRFJ5VVRhSGRbTlg/QkBZPHJCdGoyflM+L3FeeUd4Mz9tcWtZUWFTb243KjMkeSxULiU1fmUjO342O0dvVyZpaXNdKll0bVZVQiFjfE91Wip6P3FuLyptT1U8LiEkaD1pQT5gKzxyI309SVpDWX45RnJ1SmxwbnpAMiM2fSpVUEpeMys8''@;'; put 'put ''RkxuKEBLRFB2eCspPCQwN0ltQUxnOjpsfDNiVi4rfkA4JXNCXTVBcG0scV1UQGIqWy9bU3FSTE8xTnwpaEl5YGxEI3VzYUcuXV9WKyJgZ2E+KGxUOllFNyJoKnZ2Vng2b3NbaU11VmMkUGlJViV+RGZrR1h5T0U4IzNDfUlmcXpYR2l1UD5aWipSaXovST9dJnJIYHZIQ0VwMnVKIXVOcCYpOGwr''@;'; put 'put ''TVtUJCZidTt7MVQrZDVacXRZM0thfWZbektvUTRHWjlLUUsyakZDQ25qMm9pQ1VOWDZwei4wdFJ1bWsjR0tJaVFLLn1DYDglUEJpJG9pKy8ydVMvRFZ3TFZJI2FwdyNHSE8rc1pZKV9Ce2hseVo+P2J0MVAyVXQ+Y3xZYy9lLj5BIXNvbGo0UTRSJlVmPl5CQl0waURhL2ZRTl5idz57LlBISTJo''@;'; put 'put ''QDdzNiR2d3pbS110dn05WFReKjpRbDZebX5UTyZqempyOSp9aHcvPWtKa01RRFtvUmdDckVeRndNbTpMKiQzeDxGRG8qQjJuZSwzbWtuNURLMCldXVhTR2tJbT49WEF6Yj1KT2lGfmVKNSpEancsTFhyJi4uUmJFaHlvaCl6bX1MS0hlKlJ1fmJ9OiVIfD5CS00pNH02P3dpSjsvVVFBRFA7Py9l''@;'; put 'put ''RzMiSCFvUUVWRClvej0/TUZYYGhrR0BLd343OS9rMENVIShLTm9vTl8zTXB2fSQ+djZGTG06Q2MmbHF3fmM7MFRWbl4yOzB0QllIZU5dLCt9Lzs8KXg0L3gqUi9DNSpQS2FJdFIuaF5zTW01KHlrdFFDRUdGS04uXnxgan4zVW4rKD5vajFXK3txdU0kaSRjM2VnTEcvdCg8XzcmUjFGdEpSTCM5''@;'; put 'put ''Zj5BT09aMzFhTV5qfDFrJWY1WTghQ3J9OUgqbFdiWSVZejRPZWxaekZseC4yUjk1Qj50UVM9VjU6cnlOP1o1b0dsLnd5ZCZDTD99bHx0YmZ8eEsxOFJrWVJOekdyZGcrbkwwLiw1dCNDcnZ1TmZtV0M/Q3tTSyIseDlecyxBfTVjMkI3LyZfdWVXPjJgRV9dfVBBWS4uRTZuTnxUYWQ8aXtbWF9q''@;'; put 'put ''LGslOnViTzg3T0xqeXhQflBwMWZYJXg5YEdxMExPQ1MlUHJWIXd3X3RuRV56dj1KN0wmZytZfUxHQkVpPGZ9cFU5UCJEM3YzdG8rTXdlMSxgaj1QaXEwQCpoOFByZ0dFam06QHJbKno3Yi9ZIz1yay9qaU1KPiEucEsiPk9wWDEuMEN5IU1dQENZVCEhcG8pQ1M8ZVM8S053cC8mMSZgQE05TSxm''@;'; put 'put ''IT55RlU8KlpVNi9sJWFZS1R+QUMuQVdgOU1dfGclVnwyaiQpVHdXcF48XylvU3QxdzZvMEE2azNDSywqZzhnNTdrOn1zS31LQm13aEVZJD9eMT49cmZeO2tkanB5X2g4VEU4Q10oJld+YFo1eiY2XlU6IzYvNWE3LiQ1aix4X1o+cCx5NFBNKV4vX2tkflZYUV5EOCFyZkBgLCYidWJNWmZjJFp7''@;'; put 'put ''VUFeQFFZKVRaQUhtLkx1OXQ8Rl13PEhLND9WN2BZNCV5K3coYV0pVT5jREhIXlEpKn0lJjJwcntMRCZ+N2M/N0dnZFR7UlBQKzcuUmFnW3dLTXdWYkV+YlNAbGBPV21XfDgyU2lmWEJ5TnA7bXNCdmlQNXEsJV1eTjRhe09DPVs6cTRANG5eN2BkO2BPJmVLan5dPTh6b2tjVXJqVnZnSnZtRGNb''@;'; put 'put ''NltWRmQpeEJLTUB8MEoySUwhbU8oanUrOVdubWBEWjp9KVd8b0hYXj54OXIvSExESz1+fEtSN1daJShnfTFxYD19QFI/MDFvMX0wR24lZTAsdm5RTG95JSkuJGMiW2NJfkJEQjV4PCE9P2lRQW1hQT5zc3EpL0NAKitSMDZdVlsvUTJJeGEvWWgwaV4kaWQjNSM9UmZZfjt9JktRNHRNL3FJSDh8''@;'; put 'put ''U3xeZlJaLjRXXyk5eWF+UmYzWGdpYmM2XzM/eSoyU201PT5dJGdJZipbZGZZYyUxMUhuM3RXQUhCbi48VVIxJHM3eEFGUWNbJEJDcmZZJWo7I0tIVl9nYy42JUQ4dn1ndixfXmhvRCszLG50KVspc1lwbXRaPj1AYjR7YjN7aFg5IjI+LE84ZnYiY01vUCwjJHMsJHJValQwfTIpJE5APkxLTzhU''@;'; put 'put ''fWFCaTBzMm0uZHs8KWtQdDs+XnlKNDRva3ZIcjdkSlAvZmEqSnhIZlBIMn1xM3YxZzomMTZILHIqWE9eUEJmUDFvVlJzNWpse2Y3KE1OdDQ1S1VEMGZBNV9CZn03czNUOW9ufj5vL0V2fkIwV2EhVjM0d0xacDljcV1wcClTOUNRdz5dOS9bekQlMUdQM2V0OCZ8Tnc/TE01aDVRbmY9eX51e1lK''@;'; put 'put ''dGxYfmV2V3gubDk2aCw5PSRzfWdhbVh4LnlEUXdYc3B0aGw2WXpvaGBjTlk5VzorOXU6LjgwZHU+JSpJSUloaj9iPC8haG1MO1FyTTJOeT90NSlCeyRkOUJSdVRxbSwsT21Zbj80cTVKe0QrImRObWE2cDwxczV2Vm8xSDdYP0RJWHx1MVMmXXRQTTt5dXFAbl4xJVldajRjfTdpJT5oX1FYYWVP''@;'; put 'put ''UytUVjljfUBqN2MkX15OVDszfTdCMT5jNV9jUCNeNTI+YFhzZV5JfiN1U2doP1hAVCRtX1NYI3ZpOD9nPigmQWpAYUk9KDBoMDcwa24jeENENCVTP3lsVUFEaWNbQ2p2MEMlYnNnVmA3XXlQaltIdWM0JTYsX0ZzX0ZBITh0aFUxKHNiOiFUUmNKVCg5ZSp+WmQsPFducDAyQkklY2gyYjleM0df''@;'; put 'put ''K2tjU198blRJKEdTPTM9QEtrdkB2KlJOJCxXN0N2THhZYyVLfWxgVGwzWWRnIUNLbGhCak8wTmkrY1FWeDlmc05LPFU8OzowdDlrZkJRPX5oITNYPU19flc1fnp9XnAmK0JgXmp1VThlKU8wdj8kLmc+OVY2Lm1UJEhuKmBZJmQyV3JubksvLmppMko2WmAvRWlge316d1A0fj0vT3RSXj9ofnN2''@;'; put 'put ''THNTV09ldHMuZGhTXyo8RjJTJlFCYnp0Mm1GZiVkO0ozP3paem9Jc01RKlBfN1dgPiJ2els1aUR8eDsoLChdcHVZPzQ3S2dRMzZEJCRPYSthZz5mZnAwQjoveitMJHwoJT01N3tTfTVlPVNeTm5JS29rd31LKylhMCZ8W0Mzek98b3BOeFpoeXN8RVF0Rzl4QSJEIiN1JCosYjJNNFdSZDg5Mlk6''@;'; put 'put ''QU42SD8wXmJobGxOams8MT87fHwsVE5NYER5cD8/c3c6WysmU2ZwI3p2ckN7NyldeElvOjF3dyw6ezJqZTtULD1OSn5yTX5bMXIlbEIhUElqQEc9PnZgSn1CZXdDXj4hPlBoNzRtdm80UF9kL1ZGeSJ8X3FuZWAhIkNbXnFPYU91IilQcD9gMWM8L0tReWR3WUl+PU9GbypeQ31nPztKX29sUHZl''@;'; put 'put ''ZjBrKWgpM21weVFeXSxKKjwycHNjbSpMOGF2bGs0fnpacDg9bHRDLyFGTEIsc1RBQ0QocTRqSDN1JiJeamhWUUsqVzpzOEY6K2w+Z2kwe3lqKXdlXzd0I1F0VUhuZTc6RmoqOns7LzR2YnZ2clJKVnVCQX5nVT9GL2t6PEdvd1lAPjN3KGRIWDxMYWY8OmQyLnc+PCYjPT8pJndfKHdhWjokKjVM''@;'; put 'put ''JGQ5bFZ1KlliSFFwczoyL3FdUkF6QUNoNmAoNVJTe0lORE9VQVVbeTtle1o2TSZYdUg2TmB8fUd6SSRsM0I3PkUjUEtJMyM5c0kjSG1vdTdiYXFWUjNKWF1BR3xGdCgxPlVSb0NCWWl3QmJ2Y3EpTnh5dzV9eGxKflNFM1kvMzlraXEwe256cT9ZbXxTTWkqRj5aXmRiJU1HWnQvJH55OFh8PzJX''@;'; put 'put ''b1dBfi9dQywrVF8jfFlFLihdYn0od2dUSFhxeDFCbkNOTGJsVHFWeTxbfC96eyhAYDZKVFkyVHAvfHMkSkReW2tfMVduJm0hZUIkbjhIKWo3KHRGMjBuV0MwJG1hbmYpV1p8Ni5RUVpqblUjPztIK1FJIWU6OHt4a2NZUT1QWS5GJjBmV3Z0SHtuTTZIMSZeOl09Vj54V0tYbysjfE18OyF2ZiZQ''@;'; put 'put ''MktKPGEyPVYjWmxpdV86L2EoNFByd146LEc+eDo3ZksmTGVRKS9jX3dLJWN4VnppUEpBY11XJSRZZD1lTXpKMS5gZzhYeiowK1JnIkg6ZjMxZ1NwUC9zVyYkMHs1bmkhM19zfUtYNVhQSjUkJXJROUQrd0dEd3J2WExmaGUzenk3ZVJUflgsV08xMyxiIUJtOWxOaCsuITM6L1o3PmBjflRUQ0R1''@;'; put 'put ''YFBrXl1MQkJLTmZmIzdESjRiOVVtNj1OZHhYOCtnREQvaVJ+N2g+fkBoOzUsdkJHP10/OT02KS54Km9xSm0iNTxkV1IiOn1NbGJ6cWhFPWp2bFhSL0hWdHtJIVB2JXVlUWImYGtxSTcqan5XXiRARSJqQEdiI1hgOXFgX1lkbj42ZlRCdSQqSmp6amBdZ19Zb0U/aWpuJGFBVyR5K01ePll3VnNU''@;'; put 'put ''dyFXe1chKFlDNk1iLlpbc0p1MDNLS2kvMWJlRXhLWjJrV0ZYJkkyTD1UdVduMHQ9SldzQi4+VjIoZG08YE5ePyMqby9xaHwvWywpOHh6cntfN2l4dTlIPzRRdmwvYWx8SnFRflM7bSVFdUlsbUF2IWU9QzUhe1soW3cwZzxVZDMweWcxIzVVOHw/JjQpJGFLdD8vP0k4KCVOTCUiW2RedlJYQHEh''@;'; put 'put ''VDBqYXVQJlZFUzp7NHdjL3EpdHdEdEBjaTlkMExuO3U9SVp2Pk1mTGZFXnVVb3o7XzlmS3VgKGZWIkd7ZGpmdnRAYDE5UV1oaGF5LHhSPDxuQCV7YC9ZSDxsPVgqczo/UXlYeEE2TWlsbCo0VG5YWDRIO0dEPUs0UjFwKl50TTk+Oik5NjoqV3lOSEB2WDhxeXRvMCNQU0tBPHJlIm9zVV42RE4+''@;'; put 'put ''SmRZb1FySFEjSjdsRGgoNm9STVtmL3wqNCwxQmlsRS85RmRDRHhPW0ExLE5YSnY2Ui53KiN1YHQmSiZgQn1KLnpqQ0swPGZ9NU1ecGUvO05jVFFhSkhDbTw1RjJ0cip9YFAsaTlAMyZ3cVpUSVBpezBoPV8sIW5YeXIxYTN9YHNDdjc3PV4xKGN9KSxeIzRuRFZsUkw1Ky8jM2o2MWJPPCVjSXcq''@;'; put 'put ''YDBITzcucXQ8VzlDYjZzKFg6YH5se0t8bn0pK2F8fHkoKk42bEVXU0hDW1g0ODt1TllKZ3tQWzQ+eUgyI2NjK3pDPGhlMG9FTFtSX1tCdih2fiROQGNEd0AoQUk/RlRvYzMkMkNEQWIxMVIwMW1OQzVXRmAiU2R1Z3IhNy52PVpOTF5NQXRMMz1AfkU6VX5eO0w8eHZPVGhRUlFhez48WHhZYEEz''@;'; put 'put ''MGp1WUI7YmdBOEVWYSFWVkN6VGl2Ql9RfGJqOVl9cU0yOnsicDs+QEwwSENGPGpwY3sqTjdiUkhOaEx3UUhsSy5RdmNdImZbaUteX21GdmsoWEswZTYlbjU0fWs2SkQ2LiJaVHU7SUV+ZDg0Mml6QDAoeFdJUFJQX3NkfHV0O21WSDE9LFlYRmxoIVpZZDVLVXshWk1mdngzZGdEYG00KWp9TzNo''@;'; put 'put ''M1NFbTh+aDM+RVZEOyV5XVh5VylQb3tDRDA3JDF0eD93U0YqaDElYFsxQDp9VHUwfE0jb11Kc0J8cWZPXytTL2B7VU13KyhNYmtLY3UyPSNzQkhDI30pNVpJVyYid0Bley9IJEI0YW9VQF88O3oheVN1ZTBRWjckZHM3MDssZkxCYUE2b0kpPlg6eSs/VFI1LEdPJD9KZk1VUnZoS1B1NHh1Lm93''@;'; put 'put ''VU8xQnxdXyhoYD8xOSQ6Q3VHT19gQzVMQXVQQX5hYXVXMVVlPCMvVz5VOlR8UD9SN0l8ZV9GKWs9WSFrZmt8ITEqYD0yUEA8ait6TTY8aTNdWmVlXSVpYmsxZUc4bjhAV34rTD1bLkFeQXJUZEIoYkhIMSRaNWhNR35UbE89emN1VlpBUl9QOS4mMzs+M304MnF8UWFjOyVkZFpNKn1XJiNgW0ts''@;'; put 'put ''ZVUjRk9PNSowRjN4Sjx4Yk43d3NxcTRzTXYvKEtMNFJwd0lYcEN+cVMrWW94OjkpKEJMTV87d2g6THo8eXZhQFQjOEUkNnp+KnM3bjp9SXFTQjlxMn0yVltGZCkxKE5kWDgrd0ZRemYqVm5rL314IyJ+OnswWWBuZWc4T0xTbzxeQThpSjZLTWVqNlMieil4aFtnUSI3PiFOZGhoZkkiMClSTVtA''@;'; put 'put ''eEpYLCg+Om0zL3pmanV8czx6UGQ4QX1NWDsldF9xOyxoTjdicis1KFlXfEJ9Smw0PSRhWWN0JUNCQGgleFVzPmRMZj9WeDBEOzd5b1hUSGdvYlsxPXEyWyxle3lWMWxYQ2UjYCI8SU9ZcSF5ekJ3VkNlSTBNNFNpQmZfPkd5fFtiQnpbRWk6ZH5zfExRXy5vYjsjSztHL2x6X2R4fnpNTjwpcCg2''@;'; put 'put ''eSlabW9eRT51Nlo7SmhBOjhWQXY/XnJdbGoyZVRsX0JbKDhMNUV+TjRFWlB4SUsvJWNvbXUoOy57fGtKemd3Ty5TYUwkR011e1hvRChbcWpYLCYxPTxidjs8cj1DWm5Wa1Yre2BjaE0yakFTSStnV05XR1NWdzdzfixJdFowJkt5Q3xIWEVRMUVHR09pfC8lfSpoZGQ5V1NJXzMuQjoxcl0wcUs2''@;'; put 'put ''UTokO2ZKb0YlITJkOURKKTxFZzV7OjgjeGFqODwyNHMufE0lcndkWyhsdUVyeltsU0VpZTR1fj15fDt8NF9TTSlee3NQMj9ua3Q+fj4ocSksRXsvajdSeXdpaU9WaWhtWzA6eTlKJT5bOkVeRiRQYyxeJDhkcipvUTxMXWdgVitPOSheaWBAOlJ4N0smLFk7PjBbRzRxUS9eZjhWbiN8b1J8WzBo''@;'; put 'put ''UTk2VVR9KGBzMCtvVDwiQ31veU90Qyo7Nl1IR2wiKz8jaWUoT1hBaCtgUEdfOz5Cdk0sJnMrWzR5Wy5eVCR1YU5bfSJBKyRWcHFGYk8ma0tGfStedT09KEFLKFooaWkwUmNUTUllfEVzXlJAPzVhPUZ0eClMdH1jUFRKPygze0J5dyI+anMkOFBmPmtFb292S1ZxaUxlT24lYiJsJjRSaXx9W0NP''@;'; put 'put ''fnpjbXpsck5JWFZlZiJqWFAoWyhMMlpGc257aFVYQ2N4TTRyPUJ9KltFISk0SHx2cjFVN05BQ0B6NF1Edlc+YF5ORWZHdSRJdTNRLiojLDAoIXRtW0cieFdnSS4kTE9zZCo0LyVqV19ePyoiYTBNIjc6I3hDbmI0dzkhQ0lBVzdocl9CLkBpX1h5R1slPj8yPXhwSmVSL0JYYkVUWi45NF9tInp9''@;'; put 'put ''bFJmNSZbPV1lSW1xZ3EuYHhfREFLVTdMVVVvYSRXKEZ3PT0/ZUM+c0JIW1grfX1bMWk5RzhWUnU4NEkkKEJVJXtbfXU7SGAvWU5RR1VUSjl6dlVUaHRMT2g2KD9XS29EVlZaMl01Li46S0g9ZFVTfmM2aEk4QD5gaHRuej1kWjdXTVdZK0xmI1RaZS9Tcmgucm1wWG1AfSU3U0Aqfk48RT1vYD1K''@;'; put 'put ''YDhTYFNGM1A4ZTMheGlOWCt2PVtIZFsyW2c/cmBHJEk5S3dDT1JLW0tFXkhzeWJTPjd5aUZBQHJsMkN5RWt9VzNGYysrcDckKCUsKDFoezlAI0pIT3FNdDFKbTNRX1RgKjhMMSlBaGR1blp2JXN9ZX19JXheKz5HbC5oVzBTc1E8RUxXJU58bH07eGQ/WklPNWtNNlc9Mm5ffnNfYmtaUyFhXXBi''@;'; put 'put ''YjY7bkRBeyp2O0RFUFREJFBCdH43SjdoXzJmdU52S3EvZjBSQT1PNzwyRVk6NXhXcE4ifjx1PmZaeHkmWjVPU0FdNno3fkIqR1o9UD5oO3VqOjxKJXhGVHZFJWQiTyxycVNxdHldTXQ/ZlNqYl1PeGYyPDFhNHwmQ15HKjM0WjVWan02YmdIaXdWVGNKeHMjPWQ9OmhuYW58bForLHIqRUlBcj1K''@;'; put 'put ''cj4lKnAoJDpoXjBhQ2Zkcis0RmEoTkBwZSRKLz0jcktIYzlYdjdQSz0/L0dEK0RTS3o4YCtKV2Y1ZSkicGViKSx6ZT15Pkw3KiZJQHZsX09+VHVmTW9KV3lQXy86bmhZZG5rIUhMOyMobWF5KUhxWEwxcDUkRFR0JUpKQEttVi9WTCtWX0ZGJnZ1VCtVfjBAYzF4VjBAZTA9aCZ4dFUiPCZdUT1L''@;'; put 'put ''UjBKXVJQRDwvRUZQdXovbCRxOFNPM3k1Y2V+KSpfSyJVYSlHfDNWKShrUkJjYzFiZHJjSmNAcVhXMmdPflY5Xnt9aUojaGM9Pkg8KmxlO2cwY0Z3UV5wZ0NqK09uOkxAPXY+WzFsYkx+QEswKE1uZXZUTGYkX2VMTiFkWiw6dyxAfTRwbXptS0FDS0g/ZW8rMm4zOjgwNH4/RFhOKDBwLkNjQGB9''@;'; put 'put ''KUBFSihxNyZ+WkNZUGdffF1POldGdUt2IVY5Wnk2a2pEcnNJNzgmNlkyQkQpNEtwYyhFZjU4MTVNPm12QzJ1IXRMWF9yTHVNVV9MRWw2L2EuRUBwSSZYTWYkSTx6KDEpLDZXS1NKKlhxU3BpWS8zMHkkKWZmRDcxSmdFelMqYFdmek00Uzc3Yyx2UXtyYUs/QlBKYEA1KGdVKUlIQkA+KDU/PU1x''@;'; put 'put ''TVVAZHIsSnw/UFBmTjQ2Q11vY0QiLHtoSX49YD84QTJKYjMqQ1lNbnBAfUomVXE3Pj50TUR+KUh2WmM3KiVUcjJdLnBXOmBiWDxeSlYwRH1FUERgLGAxNmRwQ2MqJnlXPENlSnlESzg9JSlOTSFzTyxOPipNUGUyYjImMnNxSWR2dDlUQiI6X1NHXnAzOn5aJjpFcnFrYDxqX1pKfDZuU1AsKEVJ''@;'; put 'put ''cWdlSkQjaDcmTkR5fnZJamtwUmxLQiMpMVQvS3hddG4sRDprelt3amlrMnI3NTk/ZDRgMzVefWgicT0pdld8e3FfaSlJRjNDLG15TChSYjtteldWdixQTCxLfXdMRyRHIjp4fSJ4Ly9lb2kzMT1hJX5HLE0qekMiWHw6SGcxXiskL25ZT2hXUzo4ei9XbURxU0JgJFM0JTJQU2c9UUApeT5zJVsq''@;'; put 'put ''eTkmRm85XUdvLEV8UXpiT342IjY0ImJzPXQ7QTlRfTBUSyNjNWJGUzhkXTpdOTVZalRbPW5LL1YpUGU/Q1IrT3hpU2lBJDJAWS8wK0kkcm4iOyZBTEdSSHpkeEczMHB6SzV5Wl9OdmFTfjw6OixdKS94TzRHRUZrTkpLSShONXxrWElEaGUmRT5TTEd4PDRgaURIaC9vdjVNS3lFdig4NjBOOWkh''@;'; put 'put ''QiI+Ty5nLmc8JmhdYkRVa2hFLCZBbCFARXc4WHtmcGYlLFlnRnxqMjxfRS8vZy5RbCxQdCp1R3ZbX145TGYsZGQkcjcqVHhDUmQ/RnE+e14qbXZrWFBAa2gmKzIwYTAvQ141bUEwRF4mVDJeMVAsNEIufkcyfXs2OTl+SVFuX1M8PXh6IUoyQTw5MSt6cDd3SitlRzdEWTB+RVMyYDM4JF9pekNN''@;'; put 'put ''eS43N3gqRk5oTHxzYDhMUzg1LmFPPy81ZGI/Kys9K3UwW2JZL0I2UXxhRjZrNy9zX01QQl89TX4pcW9bRiFJdCNLL3VXdHteI1EufXtGdlordFZtZDpxNC5rJWFMLkUwU3M4N0dAVSt1cksoWUxhfXRgPUMqKTZockY7NzpHOFtkSTYkcTdjdWlNJm9SOnhuU2N8L2ssdDtmc0lVLE5YbU52PjlQ''@;'; put 'put ''MGciUDYpTEJJaiRzdHVEJUxiPlU4Xyp4V3VYd0p2IyVKe2EoP3U+dSFMNiEqUHRDMGQ8blR4KlZDfGNDK3thPU9AXU48Nl4sREVBXSJLODIsU11MOlBqM19BT1V3Q2tGL2ZAJl5GTFQwIyQxZl5XPUN8VVt0aXNwLkZdVChiNmtgLEQiXmRvRWplMls4fnh0Zn45cSVnJDhvOWRUOyZ9TTw+VyZa''@;'; put 'put ''JWtYL0V5REVAQWt6bHBWP1QsMypGLDJmbls+JGNKIlh5QEQyZCoiZmdTTFJsaipOXiRnO188N2A5VytYNnNCeiFmPSwhfEA3TW1baSUpVjwwUD1SJFlUISU5Vls+RElqVEN3QyhHLDhqbVN0Sz9zYCl6M3BoJUQ2a3ZMVVF8fVBkQDV2TTh0ekJWcjAsXmErRndIIXEpJF1xQnk2amRPYWtyfWVm''@;'; put 'put ''bDxRZzooVStFSC49dFh2eW9fX2l+QUZmRC9fUEM6XzxfZ2VzPGdeTElAKzxdQlZWTXx8fT41WUY1Qn1vbHR+OHFTVkpmPVozMXxaSmxHaTxpYkpIKX1xOH1yWmlOMCRzeFlTdVFXMjBnVTYwUno7OVUkeX1CLyZodzE1KTdnQmNwQ2YiPFYpbFN9bk81OlgvWH4qQW5WKFIqIihXeCNvJipTSShm''@;'; put 'put ''ST1DPmlOQXJPUCtNJCYjNiJlfTdzWUQra10iZHtqdnk7Q357PWJuXU1gbGVuYi8sLn1tVkRVdV5OaXswdkAvTWh7b352RmlLZURSYnwiWCs6SThyPXh3LCNKTX15NU5pbE12JFZMdkBpej41Kiw9UkRXOzt0TDJwPVhGRCUjSH4hXUZVV2MySTx4MTxiZW5gaD0lfGFHM1JGQi5AcWxsVVQvd3Zg''@;'; put 'put ''eXV2NHYhM0dybyt3TE8jVyZ1b0tbQ3RuPjcjd0x8XjtlJFJ1e2FfZShGTnFhe2wvPkhgRGhOfUR8SCg3Yj9MfWElPHp3eExDaStwWCZUQC9zfDtdMk42Q3hUfDp2OClHQ15HWiVpT3JZQUwvNDZYaHQuL1NRMHdVOlUpWTN0PnhedTEofXtxL1tCJj9EfUJ6bVNRa3k+P2lBVXp7bkdfLlNSYHYz''@;'; put 'put ''Z3BQeSs7XVNZcVA4Ung1OV4wIlZnTHU7NHd3UURjI3prclA/VjgoYDZgT1BSKUVycksjN305eGRUdzI0dnxATWQsT1ouVV83Xkc9QGNYTmpHc3hzODltUkJTNzdENDtgKnd0WitXLz1LXjBeYnlPLGV9ZyhgWFk8YFouOCVWOUx9Xz5aKklxbHlfdi9pUF1DTWIzPEUmcixjLCokOjN5Ymoxbk56''@;'; put 'put ''MHZyZ1BhQVFAQW1pRnM1WUIyYWJLYWdqY3F8K3MyZzNuSzpybS41UDk7N3tpMTNmV3MlL0kvaExoUCkmKTRDdjlLJSh7JkxOX2RaNn0+NmE5QUFlbzMsOUxXW3Yve3BwUTNsfTpLZ0BLUzlaUGB7IUU8eSpibFNebG92RUVNe3VzJj46cy94ditZKGxacjB2VE10cltWNiEoPGQ0ZWtIW0Mye3Au''@;'; put 'put ''OEc7JTFYTmhhQnAjR0ZoQWBUJmZYVlY6JEoic35ZJE1kR1FhUWFmKHJrLEk7aWYsQ2heLG8xRkVmNXhkdzQvKHpoZ1BaaF1uVjY4bS84c3c1Q11EU0BUZEhUSjtjQVtbJihOLz5MdTlZaUEiTGJ1Nz1ZY21mQ3B0dSV4LlEoeGs9R1NZWE1kQTJeQC5WaURLP0N1JFopK2RPPEo0VU0rWG5iIlM/''@;'; put 'put ''WTgqaFF1STNmW0xSN2ltMEMsa2tOeHpHa0ZyLjIjfWhVNEdZSCElUkR8ViF1WG59ZUhPb0s2cHBsUX4oZERUNzF5RjwjYUBHdi9QbzIiM0VHIzE+Xj4jLGdvbiNiKUUoUzhaNDM9Ryl4RVJiIj5GMDw4YGBdPTI+M2ooOm0xYH5uUWluOFJyPEszIX44Wz93NFhTMXUvfVd2OVFuXXl6S3QsR0c2''@;'; put 'put ''UUxPKW9HS1k0aWU0bkl3XTA9Tk9zSFBIN1JsaGhzREV6L0dbQyRqLCJ9Ik5jJVlCZXdeY3ZfK0tpJVF8QDZlQUZPdUYqQUQhPihtUENfQl59Mis4eShfaUJeNys5KyZFKHpGUk47OThvQWFqSS8waWZUIyFjcFVhbEpuIzQsZGszNjokeUVsdipYJHQ/bWJkUHVefXgpTW57cnlIUT9ARjh4S2Fd''@;'; put 'put ''d0lnXTQ5RzxQc2hXdnVMMls6PnxJKFBdTUZdNCNpbltfTEVtTEdrfGd3OGBSQlFSXnw7eEoyK3ldMWxSTl1xVjNsRnwmWkI1ITlsZzEsTiZ7TSxRMkEsN2BvalhtQllIXjZeIUthYXk8YzRibSViaWw0PndmNG5ROHJBIlJUZDg4Okx1Oyw7RlYodj1IYE9OSHU5I0c+X0oyQXxHbD5Bfk9uS1Jv''@;'; put 'put ''IjwkMHd8OFVNKClfOXxrKnhURUViPi4+ZHc2MWd0cEgxSHw6bG9nPm9VOm5MS3ZXNV9TMGtDYHNqQnQ0aHx4Nm9MPmwuVDNUXiEvTEFdc28hR1FtNlozdzpIIztgKj9JUTtEWFJhaDIkUWNGLFI9JEM5dSF7L11lJSVdOWkqM08lb1JNQ0woWlpGRkFAMH1kfXJQa3pjY1lval5YTS8jU3Q2LzUv''@;'; put 'put ''bnlYUTQ5QHdnQnFmTz9iNU1+KzxeQzhdRl1HQXFBfjUkUjAzJmc3UVtAXXx2VVU+djFFfSx5Yj9AUU14eyV3ZFJgaUkuIXhSRi9hOzI3T3ZhWWtOeWdzJVNgS21rI2FgNHdbOlIidyhmdjU7OE4vZkw0NHR2bXp7XihIT1RnaEghZSwzeUFTSjBed2NjY2YhJWZ8LGRnfGMuJHA1ai4xaTlkeG05''@;'; put 'put ''dCZCcUJmTSFDLkJuWE9DUlMoOWRIekVtNDJrJCFzIk1sMW86TDNlamtBTmEkb0NVRFQ7P0g6M05IbXg5K1tmZkR0XlJ1QiFPO1E6V21WczY0UVJxO15lNl01bF56TG8rc2R5dDRpe1NNL1ArX0lvQFZYMTRfXiQxey8xTEtdYXd2TSlDP0hdPTJTKH5aT0JabEBENzlkblB+KmlZKnZNIlJndV1b''@;'; put 'put ''fEx0R11lMGVbdWBNODIxaGlNY2ExazA2WGhoTTR+cW13UEghJDhyMFB5IjRSWWVXWWUmezJ5bCIxKT1gYmJdTm0qTmdAQEkqXltYTj1eYVddRyRIVGdOQmNmPlFWTURQeWdmMGpMOztJKjQqNihRbVdCUTZ1SVFKTDphZnhBX2piQSFDWGBaPFV6SmhzTjQiP2x7SD0wdU88eEZ8PXhidjxsdn5B''@;'; put 'put ''PFZfV0x1b2g6K3dSXioxUlptc1JsL3ZHdllsSnthcHROaWlsVSlUSmJVQStDQHJQPCZBYHN5R09qJi8jaU1Cfi90TU9AT3dwWjkkPng9IlVNXnFsfFRYTE9xTDlsdDkmLENsUj1MQUQ5RncifDhtOXw8b0lDb2w5UlRzLjR+LEhTckFAV29LaSMvfTZqdGtGcnVnfTB2WDU8aWhxenUhcmxkZEF7''@;'; put 'put ''OUFAM3oiZVEoOzpwY1F3WU07PmU7OklTUlArL2V7K2tqO3F7bGtvLGdZYFtRIXNKZFdrdzV0bzd6PFEhKSJvIzBOMFVWMlU6Vl12VXFNaUFlX0t4JFdWQHhRK1UsXkdWUHteUDEld0lWIUpXbjJ4ejpBQUBLeytCdVQmVzpZMnRAfmMyTXh9OFc/cH1QK3AwQlRUfE0sNGJLKHtJYUM4LEphaFhJ''@;'; put 'put ''KDd5SnRCfj9KUzp6IUtLfnRHd1ghdE13R1dNdmdxXiNdV2BUeT91IWIsfUszemVVdzN2MWt3T3lCfTRqMXdsO0VDeC8yWjhYTXFVNjdzZGwhNih5JFtMNl54OzR3dCk1VEJndndrSmtfPnshYGRkP3pWTE1wL20vZyQxOyZ2cGI6NTQwdileV3xUX1dKWVg4a2g7YUs7YVRVci8+YXouWnErPUw0''@;'; put 'put ''WmEoJStudW5HL19GWlQ9b0Y0X3NyfFdxK1pve1Ftdz97XlEwM1NRKUtBb2FEaUgrLFt4TEtUcCpWTz5vUFN1IlNEJklUNk5fSyZLaTtHN1tfLEZpQndtZCU0Q0hYOVJEPmJqZXM5IXQ5WUxxSU0ocExeUmNWWyFrKXwxREJrQmpkNGxgaS46WW50cGoyaz9TXThoXlNIM30uInBMe3hmTT57XXQ6''@;'; put 'put ''QzpdRnFSZl0qJl4lUzdBZTw6fjs8ayE1O3xIPjxxOWlNJThtJWE8RnF3dEhoNXQ0Y1IsW2t4OTR0SURWeDM2ZCx0RHg9VHYmPiQiVXx5Wjk8eClCfmsqQTUrcy9uUFhVWFpwI0Njaj5oJEFERUM3dD1VeTVULDgzW1Y0ZT5teW1CdiRGaVNmUHZzJTo2JnB6I3lFbkQ1aT89NTZ6bWxjUWxbdVE5''@;'; put 'put ''dGpaVDtteyU/cTlpQ35ldTI2ZSUhIUwuXnBdaiFhVzAyOV9TI2dfOy9FbyNmd3dweGMwWmk/b31TTUY3e3BxRnc+cWUvcUYqRlJefVFTcX1tfVhCQzFkNkJ1ZD5Dc0JjXWZaITRHak80NixsL0d1STojZ3g0Rzk3SG5iaT9KZWRkZkA8OWtaTGxnM35Ra3JCQmV8XVpKe3NlUmFQdTcxYjxCMz53''@;'; put 'put ''MFBuKmJCIVBMTF42OkEkVXE0YTlYdixqK0g6M1ROSHZTNW53Z0IlV0JbR25ESF43VChTYG0xXT84OldTPCRkUEZMOWpWR1FnMlJ+bTttXyYxTXBAQ01udEpWX1huJFlMV2tQUjVyaFAkXlclSU5GTTJWempMbVlhXmFwdHRMT01ddjpEfEZQZC8xW2V2amFfal9lVF0yXWFLOjU9NH11dUpnXTlP''@;'; put 'put ''fG8wLnNOOXh3Pj4wTylIfFQ4PHpvRlhgQi9DQSkiRzg+fkM1bDErYVIvQj9TR0ZSKTo2Y2FFYE0/KiNvRER3WWl4QE9RRU5DNHFQN21sR3A/ZVtddCMxPkpAPXE/XyEyMTBOdVp9OFZSPD5QNVE5UDQ5RHxHVmhZQFJGeDgoaG8uJkMpV3NwO0hXeEJDRUlMT09NNylvVnFCImM9MC5PMXwiPEYp''@;'; put 'put ''QTM+I3RfTzFwP1VoNi49OzthTW1GYiEzM14jTUcyXmEseXB5YXExP1JyY3xFakk4WCZ3bVRgclpzOH5iPiMvPiZ5WDMmWlI/cmtqMkkuRVdELmwvbTtgM0JuZHszRzEsSkIveHVlSmd1eCplUSJ5ekA7b2RLOmYlSXpadSp7TXdrUmxFO1JhS1t1YFl9Ki9Kb3JPNkFGIkBkKHZyRj18ako+aFJq''@;'; put 'put ''ZCpYV2I2QGhWcVh5bSgufDpeT0g3WHNlVEc9UnI2e0tjXittRWNiWXk+b0dLZCVWOzxKa3l6L35YXkAkRFJOcnVwPGhJbHdsaSUvTUt0dUVMbng9cWxmYStBPTwmNCsreVtDVCheYzQ6S3NiP2tuMUtea3MuK1V2OWZvO3x3NCRnRWtDYVQoeHpFbCF2JUdlNT8pOkVGOnY0UTs6ZkRra1V9bzZa''@;'; put 'put ''PShaQlZXfio/KFBsMWQrRCg1S0RxSkNafGRyeCRSN1psUXsrdXVOayxoTDtWeTpwPEBgYkRMRVhwKGE8KGRbIi40emYsOV5maTpbYnNjOkpMRVgsbX5bdFJdTCFTbHBMaShALCU/c2BpXXpEblc5eWsrb0xzTSxsTktrQzQ7fnxUYHl5JShucUspNitFSDkzeCxIaGtfPDsiXlMhTXR7UnJnV04u''@;'; put 'put ''aFU/PSp8anNCNUdZJEpVTnFZUmUuXUQ6PWE7K3RGOGZXNDo8Ui9RKEsySV9rX1o9Q3V2cGE0S2Z7ZUhHUWBVPk5+KDZxVTxMbFZrQUMrOE1saExyTWFnViJWRUJsbWFuTkVofUcicWxORDZkOFE2TU5aOXFzck5zWlRgSXZGQ05WKGEoNiF8MTVbfCV+S2RtP3JbfHZ4Pl1DK01OV0ksJlYvKD1u''@;'; put 'put ''SCthcmRtQl5tPS4kOD96L0MjbUU1W0VYcXk+WkpFMkkyfE56Jj12TGlaXjxCXWUobl4zKnBHOkghbmV2YGpYdmNMcENfNVN4VnI5cFUrJU9UaUJlMDNTS3VbWCZaa2d+PHY6WHgyNXIhZEpTP0A6OUsvfHZhWysvI0NwO3RibzFgfmguRCJ5MylIKFJSWClgeTZdRV08KU9USyM7aFBEYUZBeFJ+''@;'; put 'put ''cWtiQio8O1BKJnJwekwxK0M8JE5AaCxDangyNSxedGdGaHY2K219UWlqYyIofGh2W1lGeGhYLk9LZ3E2RHd9X3sjIl0qPGNBcW99ZHRtfmo1Rm9MVyMkRyhub15mb3BnNmUhNClSPlcpJGYlbnM2YTFxZkZIX1hkME1mWDNEUTcvJjNFME0mMml5aj56NDgxN2ZuJSNdWFBiZkQ0KyI8Z3I9Ulk0''@;'; put 'put ''R1ZeXmBEW30sbWlUazBYPXVzREB3QEFycG5eUnJMclVjezZ6WFtoXSMke09ObV0rTTdZd1MzN313fF0zTkp5VnVnWF5OdDY2JDJiSmpsY1AuPH5fIiViVCl0YH5bN0lvUT1JJlRtWm1qQm0uNWAwQmlGXyElcEVOJXUyVExlc0x9fUpMPyl1d0VJIUVMSn5rLzx0NnN+cls/cz53Ll40U1lRUlNq''@;'; put 'put ''NzgyMCVYZT5KWiEwRz1kOVYwIWRwPFBZbj8oY3hGfClaLDNRaFBrXi4uO25EKUVXKUhYbXl6Siw+eTc8JkBZU35TQS5xMzVtWyJScllsWnQ+fnshKTNQNkglSm48KDEvM0pySn1jTzdTZnNPTVtzaTRQSn0lQXB5KEo/UCUmZHdKUjFpVSIvfFtXUURhdz8/XnBXWzkzPWRuUDZPVlB6QFZbbzBW''@;'; put 'put ''Ym0vT2JmPjtybFg6U2I5fGVpMioifSRdI0VtVmY2LCQ3ZzUvfnwrREB3KkUlQiFYR2Q3RGw9Yk9HWnpxNGVpQ3l2eVBgVkpKVSExYn5ObVZVPlhtP1FdNllGMDVOdXN3Z3p6fDd7fTdhKz1KS2U3NS4+PGtSPE5DS2o8VjQiSVUzfnFwVDVAOWx8YVhtdik8cU1xdVBeUyVMdVlIeDRhU2orb29d''@;'; put 'put ''ZW9rdWBbY3k9W0BYWk1nNCk6eyRwKixsK21+ZH4vVlcyYUAmZmA5T34uJD4+LktUYlc8VndPdzRnUngsUioqV1kvSEQ+UmQvMWxFMytWQittOThZaTBdak4oYmZsMzRKYD96czNmeW1xQiZCPmM8bkdINTV7eylSaD9jfiNGbERJTVI4fjh1RS5zRl97NnZCSythbjFGQ0dnUyo4TXpyeSlvb0g0''@;'; put 'put ''OXY8PltiU1NzWyJoYXNGXkgwcSYuRjpEdUlObT9yeCM+K1FYeEloc2UpZWFtT1lqSGhkLGpOJWg/Wz1POSQ3UCV0SWw1eH1fempVYXpyQHgvWitWSmlMU0Y2eyYqQ0NMfi44dWFKajVZPUYhXmdle2t8QXI7K0xEdG4pS3dEfC92UlNmN0huL3UxTyttYz10MlIyRT9rWlVsbG1qMlppI2d7d2h9''@;'; put 'put ''NzwhTl47Z1omM0ssR2hEVXhlQURlL2FuMik/KUo3M1NAMX0rX3EkbHJ0byYlbmYrXWZwJVE7MW1RPWdZO0tSSnN5O2NGT2wlOl9pOCR2SV9ed3Y4P1A4RmUhQ3FycClQPmA+VmU1WT8mX3BEMSFsP2ckUVJEYW8kU3FyTDpgUT5mKl8vdnNiWHNYYD4paC9Za1s5OEVUVS5mfUZpQkNqRCkyUy5M''@;'; put 'put ''d3M9Ik5NQkskVXJjdG5pcTsoWlRUb3Z7fCVzRUosOGFTZiVMTVllNVBQKk12WjI3M2IxTClHSjNsTno3XU9BcylmOV4/WG83aGBVI0w9bWA2LmB8fCV2elE6RzUkfH58P1p1JSRbbzh9Y1MxRGtsezJ1clAueVJOUTNpUTAkLCl4VkcpPks8TTZ0fiozNDF0UihgKURGM3YmRUFAWmlzd1k7e3gp''@;'; put 'put ''QyRCOEN7LDt7ME1aIW1FO25QZSZ8aUw1SW9IfGNKdCw1KyNlPTdJSHVMQ3F6cHRNJH41R3ZnK0ddYDFDT3lYLEJMbHJWamJDZXAxVksqLHJ5N3JfeWcme3EkRyRxe3A3YWp6RD4kJUljNiZqKFFpSlJoJiFDIzI6aVNRI3c6JTozMHwvNHlaRDBQbmZlQXI5S19AU3IxNHBOW1gwXjR+P0J8KkdF''@;'; put 'put ''fHk2USYsP3d5Uyg/fnR+KEtVaHNmPUk1ZypiOV1AJTNnK0Y6NEtaN0pgKGptKShafU92VFoxMCMlWj55QD5ePkk1aGRIKlFjamx0aG9sdEI6Rj03JDVHazRVIU98QzkyQV13aDFYKEJHUiw1PVtEIm9vTVoxeHQ0V2JhMWBkQHUxd3Z4XzVRLl88fFNDayMzc3NGbWcrdWZsMnksYUY0Qm1rO2dr''@;'; put 'put ''cnouZlI9T1pWKj1IamdxIU9aVnw6fjdKYFc2QCtgel0wck5ua1BHfVteeVUjKlZ6aT9HXTNkPHNHUDxxJEFwNi5eaik3fjttVnouPmMrRisyPDBkSGpicW1+fU81YG8qNT9AR2VOcE9AOERkRldwKjVPdntkLzB8QHIoJUxEVzQiaT9kNn52VHtjN311RG5AX0khMW4kV3EiJk5jTWAyTDVRQFk3''@;'; put 'put ''Sk8iV3B0XkxnanExRG5uUkQ8UWNUOF1BfTdrSCpNbnVmI29VRGopYiVXbVZxdG1pZVtJLEMhdSF2Tm9HdDdNdUVKLGhHcUtLLEViMz1PWlZaajcmKD9iLChCOVNWSD5ZaShPaD9WYzs4K1JUUTBzU0gkOSUvWE96fXFScyl8QX1+QCk8Rm43WWJlXVN7JkZ4anBNZTo5P0cyPGl5KXB4a1VnODVp''@;'; put 'put ''TnpFIy8yfmtMSFQrOF88YG9FLn03aXw6c0FBdFFDVXAhIyp0OClhRi42YTBMKmYwQ2k1RjYodzBXYDJBTEtTTFNHOyE/eVg8b111cG9lS3B4IXdXZENMeTt7KTU1PmMuMlRKdU84MURnNTxgVFVtemZCL0Fybk11aH4hZUp7LyMvdDFhMSN0Q2A5UDU/NUdKLC4kOkdjZTc9WUVvL3EyNj5IIkhS''@;'; put 'put ''c2FOP0Q2N1A7OUBkUTBfaGp4WkVaPCY5JUVGfUBAdFtSS0pCcG8sYyN6cFAzWlFPMUhmbHFPUDdCLkhTcktfe0dDYypCY1BDXUB0YT1yYSFdeWomeVVEZ2JQYj0yYmtjTH4uJD9pNEVsSCxmX1tTT09iSkhCZXxAa2ZYKDs0OGM2K0h1LCErc1heZnAlIWNBOjtWZ2U3MFVHbiExPU5QSCZ2PUlM''@;'; put 'put ''XmRrVVpmdmVqSTdXPm1GWFZmb1V0NVljO3J0Nnc+bVNRTiZGWyM0TyhtP3t2V1I2WTduOzEycFhSbjM9TStWUi51aTRVNiguT0dSNkl8NXtaTnBFfUJEY1BEaTkxek1TYzljLGdyJjdNWXhQeCUkNEF9SmZOZEN+K0wma1B0SFcueVNZSW5YV2RjWT0sKzIkbWZyZntrM1k7NjMmVyJNT3hnKz9j''@;'; put 'put ''SVBxQl0rbTdlaXcxQGM2dVFpSWtle0RLRFo9eXZvOmJGeUtKPGVmeVgmOHFgaFVVPClHRzA6RjBIUk5wczxAemY/RWBzUypOS1YvKyRXO1dTaXQ0bExvTCEocUR8VXFaK1pBXThYcTBnd3ZhR0l9RyxreWR5cDlOQlBXRDJkVXFXfFFIZERARWNnJDR2aFZgUCk9MWR2SC4zMVRddTJlaVVHJGRY''@;'; put 'put ''M1prLGR+MEsmXzNaQnw6Tk5EbjBNU1JLP1VkJU5LdUhYSlg7W0ExUGd9S0QjVEp6WjZrQTxmc2M8MWRhMWchW2JwMFc4MzRQWiJASy4+QnFoUk5nfHgqLnJ5ZC9NfFA5P1hddSpHZ1pwV1U+LEE1SjdpYX1qXjtDOnJvNWk5LlgjTyJqMlpBLyMqKlNXdng0Xl5JPCVdZyZiRDhDazclYiIjTFVJ''@;'; put 'put ''MWVweCxDPHhSKUdYZFg3fDR3a3hlcHAxUnBKensxL3RLRixOVGcvMT9uaUxuVyU5Ynh0T3FHM09RWFE5KCxyKHxoYWpLYE9WNXw2aU9HLmlKaER3UDVIfm9XaD5rMis7ZF5mJXM2LmN9eiYkTmdtbG5nLyFLaUpmJldmPkt1JDxrYiVydXZweW9MPkpseytJJkY9KWtabVN6fCM5am9MLCZxMy85''@;'; put 'put ''a2Q1dXJwTVYlIUZJJVo4VzJ5eWdtbDBXOHhAaTpiVDRsW2BrP2w/Qzs/UShOWD1nc0RERkRQWlhLVjt9bzJtYzxGfl1PakBSbCJzcmh9dj4uUFd+QSpjR2QpI21jJDMlbTNVNCVtY1Y3ODddNFd3IVVTMnd+THJvMkg+UzZJT3hzT2J6R1ExbTNgdFREREd6dz1FMGgvYnd3I0xzST0sMjFAM1tU''@;'; put 'put ''WmdKN1NeaFVKJDRbbWVuVT1RfmpiWjRYNjdBZGA3Z2RAdVVjemMwY1E3S2E0Kmx0RmBOcEwxSmBySGFORjpuWWdHeX13Skx6amthZ1ZiSWdRbUIpcHZUeSpjQn0vQGtbLm4+W3NqOCtKelFxPEdYTnlEOzspPVtKelRpeXwjcXVtUmZsR1duVT50aT80NFE1QilNRmZnblg1PUMvflY5UiRPOSxi''@;'; put 'put ''M2FrPHgzPWU8P0Z9e3tDWnFDXnBeRz4qJUVTSC5ocn0yLEhEPCh3T2BgZnJHO15lMHB0fU9sWDVbMWQmdXZiJUJla1RjTnBPTU5IRF1KcV1PZV0qbWk0V295cSNEOC42ZXo6aHcsTXFPUHFNRzguMzE3VyI1STAsbkQjMGRmWkN+VjdRY289JFcjZHtOI2BoKTtOOnZ9K0FvWSg8VVhSRTZVYUBx''@;'; put 'put ''d3x7R0tkWy5Ge35oTUhtWmd6aCRNRVZ6TEsuUENubjVvSD9qO3ohL1hLbT9uYUEyYmhGUFhjV2gjeT0wPGxOOWxPN0ZnMVRXaGBreTAuN355QkZLdVZIY3BmYHBRen5SPzVbY04wcWh9bWsrNk9CKHY9QiovMzVhOjVXViNZVkwvS2pTUUB6TT5NKk1ZREFyM3NMOykhXnpiI1c9SCpZYUtAX0dE''@;'; put 'put ''O2BNcnt9dS9VfitINVQpZ3MvUl9IY2x0a2FfKkRXNnUkUkpRTXk0UXtuLFU2QmBoNyExUHlhOEgpODphbT5NP00mYW15Sk1CPFpnZzlzXTtheyZZXz1OfTVKNVF2bW8zZ0hLKkorbz1QWUkvOjVFSUdaYywhVWJLU1h1aT9icVRnJTl8eD4hbVo8eEhbRXBKM3QpN2BfVnJzN3BKZFlOUCV6RlVp''@;'; put 'put ''Ik4zXU83InVzNyZdYyl0U3VRblg7LHVYcUI0Z01DZ3k7YWImbSRNKStJPik8PFt4e2BsUyRKQnNxQi5NfXQvdFg/S28vJEo9ViUiX2xMJiF6JkhSfHRdNk1pZSJfLjpNIk45Y2clUylecVRVYW80W155PClSdyJgOlF4c0RESzhXK3xFZXBtV2MhQXhXKiZ9QlYuTHs4dFsoKmY5IWYwM3VESyM5''@;'; put 'put ''SlA8TVRvRXtZLjVYKWh8Zi5WfE81RGldckAhOztQZ0J2KS9vbTU9ajVJeEl4PnAuSWc3MUpNfC87Ll4sVWo5Pkh8ZW0wNCwvOz9rfkpmQz5wPT1vPFhxa3NCUFNoTGZKP2tML1V9W1BXSkdPPHI+Kl5zaz8hRCV7XU58RlkiWFtYKGdydzlrdGVwQCMhZHt4V2Y3Zk5CLlJ8MG1JKUZWJXY6UkBF''@;'; put 'put ''Z01majVRaXlGWXoofExdcF1QZXtbbjQoXlRtI35GKjduRGtRIXZ3V3dLZUlsRFhfaURyYF5lKiZtaG5DO1hoQ0llIXUsQSFyTHlObDBNPlM3P05MZChDRH57P3t9cEZAZiRhUmR7eng0cW0ybCsyR3AhY2hJSUxkLGZMKXxxdEMzKyZTbFQsOyFiQGM1fHtoVmByRWBARFteUkohOWs+WWJzbkV9''@;'; put 'put ''S3NZLCwlc3h9TEouZnVHWDViM2JHKHY5UmxvWkNwKjxIa2dvN3lTXUBaV2NpJDJNSmJIRkZ7UihwSUo+ZEwlKUNQMUdoUSJ2eWAuRkxlT18uXylmQDNZTj02OWVrY2UyJilhdCR1UTdFSzUoOUxhakcqMEBaJmJHOHZOXTdAXSxLfDJpPSJHWDIyNVtAJDp3VUhaUWlySkM7dmZMLkJjdTFmd3Vz''@;'; put 'put ''YCUsQ0h4VXJ2dnN8VjRJUjtrTFYhI0k6Imk4KUU9MzVXNXRlczxTWmd+K0J8V19WL3JJQFFqOEdQSFhnIndRe1MoaWZPN2cxWDU4RShTSFhpYn5XQnJ+R2MhVFZkPHpxZTI0XlFIXnQqOz00UjROayJsb2t7ImxsRlshXjQ4bkxIfFVGV2shUjZeRVlxaG4uVmk2W3o+aTw3dSY0KXZdIXhgQm9i''@;'; put 'put ''SHBzYVc1VDA1a1NaU2tSYEphZ14wOChecSpPbGwpKTRzIVNFNjI3SE9YOWlxfGNXdSs0KFVQT1Z4ZDM9SyF4OSMoejF4ViVFTGNXLkxOYGBAWU9+IS9hVUdiWj17YEBfITMzMFVlKUw3VU5WN19OemZNZilaSy41PUwuPzFUd1pvXmlLblpSR149LnJSL3l5MTBocW8vMThjOHkzUS5YQW98JFV3''@;'; put 'put ''UT9tVX1SY0lsL0AoUlJnUFZENDpmeWwwa0VNP2s9YW12ZyN3d1hCQDdbWUVuaEB1O2ArOUI3LCwlQGxpcHh5K2dhQntSRGVjNnZ4WSwxeHwuOE9eKTZebyhOZjpRIytddzdHd1BPZjcrI19wZV9IUlZEc2plWG9ONkskKTdye0AjTmRGXixKS3BOKnJeTnE2OUt0YFlxUGo6QDFSIj87QkByZnUz''@;'; put 'put ''P2B4XTRCV2koYUR2fFgmQThgN08uSWtbIlJ7Z11PJnVwMSlhaUxSdixCJWJePmlXb2NdZEJxOSlFZnQ8SDR3NkJadXZSUEs3amE9byRqXWRtI1FRdChHX3szUWF3K1tdVlczXUIrRDVpekk0T3UrfDZVSGJRNjc/JnI+XzxmSnd4WHU+cSM+NXdNSDAuL3JPVHpxQ3UsLFFyY0kkMTBzJUBVSDwh''@;'; put 'put ''bFtnek9Ze2AxVHxOYk8xOUkqclQjWWpzNypiOzBDJnFhIUVYfj4hW05nO0VfZEAxOWJqIVUyMl4iWSJ3Ji8kalJoRU1zIXdbPTRIemlQJUUvdih+TENuRVIhWixpJkQ3Rnk8a0tLViF+T2xgcEJ+aX5NWzt4aT5CYFdXPVtJWHh9ezI6OWQ9ZVNKZk57USs0cDUzJmIkUiRManJ+TXFeLlZGJFhx''@;'; put 'put ''cj5eIWlMPD9oW2lKLFJuPz5HUl9aYkgmSSt3LCx4LnJrdFBFIWYlLCw7bVMuKGZBSjVZaE93LDlKSHx+LlMvcyZEMmg+N0x7YFdNXUBhPEpSUFkzdEt3NWJqRylqbDU7O2hmOyQxakJCPz87MjghY2tibF88e1ZTUlRDdG1KUCpSREcmb2lRT2RYZHZgMVEwcFg6Pl1ve29ZXjJvT2Y/MXdNRChR''@;'; put 'put ''LFkxYW4vYnYmTURaSXhlb3ghblV6dlMqJElhQjJ2cXo/KlUuLylkaVApMnkzQ3xVK0tjYWhqSzt6P0sqUzFqd3piIXJSSn0wQEVIbUA1LyxyfDltTGBufTZaNT1rUik6ViV6YiFyNj1OXkAkKiw3PSV9azBQZyN9YXxxVnE/Z3slZHdZXkBYQHlGNFYjWXtgPVdOfW4+Kll2ZEd8Z3dVUiI7W04s''@;'; put 'put ''RGhpaj18diZuV1pnR0tMfXZBaXpkSnpoND5BKCosLCoye1FreT1Eb1tKYFMienN3KmcmRCtAPExxTEppRUdAKHpoS2J+REpuVlteP10scFk/ez09IyVtO1VIS1kofHB5cSV5c2AqeXFPcm8iYDRnWDMwJHhSI3EyaTlLLCl8aFhOPyp0TmgjbEMwOl8ofltXaXQkeXU0XnxeJlE1e3woN3Y2QF9k''@;'; put 'put ''Pj5VfFdINTlIfUBid1RzOkxea1A0SzN2Znh3MXM5Z2IjWX5EYVpIWGs7SnYwX2ZfQS5PcVgsJkxjRVJePXM8fDdVRjsuYnt4bCh1b2ovRHdCW2BdfjFAL2hDc0M8P25LYWMqQXgzdil+fHVPVFAvP2NeK0xzUEwlczpNJCgiSWo9RmxYKDN+fCxHNUY4NzZZeldddnM6IjprcyZVLFZYX3VgNFl0''@;'; put 'put ''UFlWdytTRSM7UHNgSF5dQVJUMnElW0QpbipfIWlOPDQleVIhbWU8WDheITkrMGB0OyZPanB6KE9pV18xLGUwMWksLDYpUSkjLGIuJSU1THBwaVtsPHROVUZXbDFwPkF4M1YiYFA2Xyw9OWZeNDtjQzJnKnlqQTEyTmYyTFNdMCNtaFVdUk9IYkZpZ0A9U21CZnwsJmg4MlB4XiU/YEMyaXhBYHVV''@;'; put 'put ''Okc7dF5iZ0xiY0pdeGFURHxMIUt1VU8wdnVbTmhWKmQrY3ooRl1xfWU6LGU3RGIrLC9uZU1FcHNuIjAySis/XyokRH1scippRlQmUERWRUAoV2xVIlFPXzV3Szl2UiwpMV9wQjxYSyYlSkpdVWg4YytxWShecWUwdXgqLFtNUGlLSyQzSl5fI0ZHOTxDaXM+dkd5alIuJHpxaE4zalo0Z2p5KixE''@;'; put 'put ''e09BbCYhNTJlL2FxUVsjXlYxLlklSE1RdiV6OFlWOFlVJWtFZTsxNGY1Oyl2cW94NksyWzZiS2hOLmYxRDJ3UjpqJFRSYUU0NWVHMUQ3QEBySl1LVWxgSkhaR1M4b3N8Uy58eTtoMiJqfmpOLEZGSjE7OjAsNnssamRyLGptQSxqL240b10xN0tkQmBDWlZVVXorVFFNbCosVXdiLi56a3J4Qjc6''@;'; put 'put ''JTZ0cjsyS0RQPF8jI3ombnhxUV5HKng+bFY1QlVzSkZtW3ooa0Iqd3NoW0xnVWtufncrSylNRloyQnc3Z2Z7IXA+UVtkJDNCbEsuPDRNPEh4TFFZOXtXaSE1PC9tLjYxbzVrSXhkZHomQXtEaSQycFRQeipgUExPezVEdGRYJURabEd0RyZeQ21GJDNXayh0YHZ7dilfMDtTRF52czpRY2dnUyYk''@;'; put 'put ''JGlxWDdPYm43XXZQZkBDJV9CJWtfPm5JR2liXS9QWE1NbEU7dnJBbFgjRFAyOmdmRnA/XTZzaylwcS85aShHR285Z2B7fTcoRkNIeWheQ30oViJtS15SVWNXUjV9ZXVaTj9NNGtYN09iT1dGN0ROSExARnd3KUxyWGFlKF9zNChbVXVuSlZ9dFpFKnoqPlYhbUBGWlQ2bi9dbkxSMSRgaVQrcyx0''@;'; put 'put ''JnQ6d0t6Z3VoMXA6d2YudyZMMkszM0w5N0hVTShwTClfOVdXYEoofXBkcmVednt2KjJKQDt1cSZHVTtKQEZ6UzVedXE6VGI5OE9paCFZckdeSGl0bzVzZntvPHx9YFk4WVgkeDhwKXliKDo4TFosLCQvbHl3PCNjYEx3WEM0LzlrX2AuaFQ5XnQ/bG9sYlVjJkxDbX1DT25KPW4+O0pDe2R3OUVO''@;'; put 'put ''Zl55MTNnUyRZc3A+T216TTljUlYvVkpgOVErInw/XSZMdUFDJn12OnlpZ29MezgjN0IqTWBqP2cjTFFCdHFXKkxUMTxYNUVnfGhZRyU+VSw+KG9WPVNYIix1P246UVtfXUR0O0JGQUQrI25EN3d3QW5QMSxfU3lKJllYVyNnKn1QRn4rQEM6VVV2fCVbTEt2PVRjUVJfSklGb0csKTZgVDNGRkBW''@;'; put 'put ''VXk1MX5sKkwwT3xZPitnWGdaT3xdW3N4YS4kI05KPmRLR0oob1hTYWhlZSsuL1FbP1clcG1aSEBpKj4oe3l8YFI1KWskVHNIfStRa2ZtazkmbCNYQnJSNSMvOWQ2MUhMYzduI0FrNGN2JEUubTB5Tno2XjI2eCt5VDg9RmB4XU4xRVkiQmY8TSVJTD5wZGpYTkRJfE85Pz93dGxNMm0+Kiw+PUhY''@;'; put 'put ''Xys5KFUpI2JrI1VnMD00KGNhSypdNmU7fGNMQWsvamVpbDkuJW9tIXNSOSMiR3ZZby8mYGc/VUVXTTghbFtvMVdSellZRHYwX3RxKlBBLFV5fkV2JFohWHV7b2chZCFzJT9vRVFtWlhKMHVOXmQ4ejVaMmx3LyxMK05eMTszMXZ4eGtqeF9iNCUuJXpmJWtYXmxsUDlyVTQ7P3o8e0pKJHU4KDkj''@;'; put 'put ''Nmh2P1RhU3IlcmIiRE1QclNTa3c8WyM/WiZja20pYXMzJDsxL3tVYzBBK3A8cCV5cCs6THl5OVRraTxEQFpyWm1JfHldZUkoUXY+Zy83ZEYlZXxtUUQuVnNWaE54UiVMQTUvT2dYOjhbWHhiZW56cW5XeGwoYUNMZ24hXTtkSX5rMHUsJjhfYDtMQX46WWNKPVA3WTVpZU0pO2tEbS98OjVVVF56''@;'; put 'put ''U3RINlUhXXpnMTlgSz92c0lALzxjfmp2eG8hZGxSWnFYX29EeyFlU2FsLyhnU05ybXBaKixWSSVbaTlrMF1NX2l8KEZWPnY4YUdOeCMwIVhmRFN4UXwqS2BnTWYzRXgzKEc4VnFCR1R7bT9oRzN8fihWVmVQQ1tCR3JNOCklYncmX1RwIT9hZGZ1WCQlZDdVS1h8OXo1QnJzNjxJbmcjflJBI2Us''@;'; put 'put ''PT9peXU1MXFZUG19fHtwLHU2fFJfOCo3cGBlTnYlM0U8bDQ3ZFNla0ZSOjIkSX0jKWFTNT95S1MvSlpKNj18RkhtQVNWd21ONWk2NTN1WCp9R11iOX5lU15kIlplNl9qeUc1fGs/bmQ2LlZhJnlKYTxxfmNKYmVsfmFWd3NjVlhFYXFJN3VtflR0PHEodE9jPmJnTF9oPHFuR2t6bFoqWkRuTn5k''@;'; put 'put ''d21OKGc3WkU2X2lfbyExY0AxZCN8eEcqSkpaNyo7Wls8ISRvX0M8KCt4RXpZOH41QmVrZEhnc31XbiY5a3NvQE13QyR+b19AW00qSFlZKj0seXEiTUIsV1VGaXx0TD9VY2EhI3s5S2xRV0oxRHJMIyw/bmZLNStiTkBDUXMkJitRK1FDIUZlSlZJQkBXTkMlUnlIQUxFXVFSfkZVZ0xkR0I/MUJj''@;'; put 'put ''ejlwN0YsYiZre1ghbGBzP1FNRl5RUk15ImVNTWRhU2p3NkFfaHFCcXxLPEhxT0UiKH4rNl1wQEJtQVRIKygjUDpWYShCWGlTbmZUNk5oSmlzdX4uYzZDeHFVUTJmR3YpSGpwNipxYWVmfVglaGtPRFQ3WGguNEEhaDdnKzp4On0xKiNHdHhTSCt6aDYmK0lOclhBcmw+Tl95UjI9dUZJaTgrNCE/''@;'; put 'put ''XkBLI1V+QkBiNyVRfShIUEgmS3RMc2ZGZj99NTRGSSU9eXpmTm1Ob2BwOyhBdXIkIVQkQH0sMFJWXUsuO2tVMmg5aW9eejEkLnwrNmQhPEtSbzNGMDRHWlZgMz57YkwsWVomYGR3bF5UQEA+bDlHM1I/ZztnLnZOKmdPRG56OWk5W1hFeV0ya1hffDNCI05fZUFSQmdwTm1STllUYykpWHgqSGQ5''@;'; put 'put ''Mzh8b01+eipzQyRbKnJlQGJ8eVAoJSg/fkJfX05OOWR+NkhabiZuUUVXdjlkTi9JeGk9NnFAJHZ0bzc0eWQkTzQ2MUhQdkolPGM/LG4oO0g1IVgoV00qZXshRk0qR202SlJwb1BNMH1aSi9jVDB4UF0wOEhbbl1zeEFCSCF1eVhqUH5ASityIn0xZUUsTX1xPlRgcyJBN1tMMlV4bXM4MkBCRV1y''@;'; put 'put ''V1V+InVmLyJUK2JxU0NhUjZ4Wn5JUEh2U1MxNXRiLyZiVlUjNChOZTU2ZH1YPz8/dT5gKjdzMjl0NVk5WXkvMTNiVik0YHc/IWAxWXQ9YCNOTV9Kc20qZnB8XUVeMztbY2dPfVJ2PGN+dmpbWjF7bEc+W3w8TWlZQSxeQUdecVQ0Y2NeSC4yWHhjYVUjVEh5fSMrJWpDMXk2YjooQnVadk9hKnYr''@;'; put 'put ''YVc1JitWPU0pVzJORURnfD1PTUNmdmQ1ZjNvaz8hK1NVVil9RkYiW0IwMnUqY19xbUxmN3QlRks8TzAyNFpmJXJQSHwxaj8hQlIwUy88bDUvWUJ+dy80RChTLmY/VDR4MWU3X25pRV0lRVAsQ0s8RElyR05bJjMkKkN9MToqKDU7czJoQDRYMmg2YFNMREtUTnhsXnFpI1VUN1c+KUw3WzYsPmhP''@;'; put 'put ''UT5KRG5OfTx3OWRLfEFXbEtEYExFeUIhey9GWjpyZEM+IkosdDJ9SVJqQVU9Vkp6RFM1KnVXQzJ5TWlqV1p9TSsvRnZebnJ7dDxYTyZrS3pEb0F0LntHc1gxPiksbiI0dG01X34oejNlTV9NKlF4Y10+OUFpbX09fDI/M1dYTzcvXk1jUVtmcDVXZCJTW0wxSj8/Z0pYdnE4bGk8XV9+MGMpSTpy''@;'; put 'put ''dF5te3BXdXYmL0JPQ043Qn55X2BTSEEoZWl5MEFHMihpe2xPbEhMbDpSTSxeQ2xNb09ZIUI+Xk1jUTtCcTVXZFBUXmxSKyR0aXsvRWB6KTxEYkguUnl3fFRlYUQ5PHdCS1VVcW8lRmIpPCZxRm9FbihOW3hOVlFsM3BiMzd7M14ob0RgRzlWZiwsT2dxVUNnVGkmTXlnSXBZeiVSYkRDeFRDQDRx''@;'; put 'put ''UiNHM1JoL3BXfStZPDZ5UWkleV5dUWkveV5dPyFsK2l7NnAvMUVXaCl0JU1zcCUpNz9MXW5eLmZqSUwsIWN9aVN9IVtIfW01LF1nXjt7Onc2VWVKc1RJfCpoej4sJHQlcCwsTkFUTEt6Rj5EaVdVcmRbJGlJPC4qflZwWUg3RmNKXj11OTd+TUc/K3h6QnYvMChqNFpQQ11sXzlXVkRmRFNYfSM1''@;'; put 'put ''YSYmQnVCd0haNV5rcGhBUyJJPk1UUUJicSpzU2MmX2tYUCl5V18+LDE3VVdGWDk6Y3o0TEEyZ2R0O2J0NGU3UEBud1EpejZQMS8/Smgxe1V3OVRuLCFDd0clbG9IU2I0YDh4dkJJQi43LGcpX0MhXTszUDpMN1Y6WDNsUjljJXRpeFp9aFUzT1UxSVthS1V0QHc9SmVsVik1QmZwPkh9cS9FU3I8''@;'; put 'put ''aVl5aihLdlY7dm4yVDojQFs2dm5Le0olJjN7QH0iYGsvU25Pc3JZPkJBbT1OX2FAPzR1MERDQkQpInFaemt5RFRsejxvWjRsZERLTkZya21eXyhmKDwrcDtvZiklb28oSSVNWHUjPi4xQFUyVEg0LzJhOiNOUFYmcVUzOUtSKkNXWygiJnB0aT9AVnhjYkdOUUVuSk0mc3VSOiQxZFtaX3hkXWFH''@;'; put 'put ''RkVqTjAxKXZ1YyVwX3E6dCslWzxhbFYpbixWQGBnaEgzay9HPysxVDd2THFTejRTPkomLHQ6Smh8cFVCIj8pNFJrcDZNU1FuWEY/PG5ueH5TcFJuMUxRRV91W0hLOytoLjZ3WEU1OzhELHtbJiUmNmlDWnN7VXtkWztOODlMbGxSeVdaMmRfMFBncipxZV1CTWZ4VkFkbV00Z2hpQnJ1XnUxZClo''@;'; put 'put ''aGI5fTtNP2ZecU58I3N+e2R4MDg7I1p7RFh7WjkxN2R6disqYUtLUWl5cF5dMk9GPjJNRDQiUSUmIiIjW21WaH1EL2MkbXZEOnJ0Ijw+SU5SJSZpPjp6cW9AdDcvJmJObzptY05panhFKTk3Xzc2ViVac2lXZVdudmhDLCx8U0ppZChRMzNCciY1TXM+bTd9SXNeKkN2c3RlRWpMcH1xYjg4flR2''@;'; put 'put ''KmM3MWhLPlNBNVc+ZC5SUFlRL0osWj5Rfn1yMUxTfUxmY2U7Um43SlYpWUllTDVodU41bj5gODkvVGBbYlJtXnpBaCl+cFcwLnpqJnYraCl8LH1SfUd3WTRhOCs4U0QjRyYkPTIjQjtNWys3SlRKeXFIM3VMOnZ7UjNsPE9wPCkjXUxgPTVoJkc2WG9VciJQUWQzYG5XajBeViV3dCg0TUx7Yyl2''@;'; put 'put ''bDtqV3d0cFtPYnNPN2dyOSZhYyV7Ol9NWEBsY2xnPlV9ZVs9XjQ/UWQ7QFAjZXImWzh7aTxGXWk+Yjt3SE1VeGtwWVBaPX1lbVkjTnZEZGJvYnZDZDBqJmpCVHgmWXZHK0RARGB1cSZbOFhHQC58WSYmTS55R1RCXTZ0Ly9Aei4pPi5QbFZOJVpMaCYrJTFKOmV2cjsqb1YqPG9GaHYuJUd2N0Fd''@;'; put 'put ''QmR9SSxdKEE8cHZ9MTduVS9COWslZUc+KmpKczBiV1hCIkRzYi84MUN5TVs4N1siSnkxQ3R3Nzp+fkQ0VHIxLiQ1dT9rVXRoQl08dF10dUYleiRxbClBaW41bWVsbDh+I2hbU1QlbG98PHsqfildITQrMWw1OWkrU3djQ2d2Z2Ema0Uie3EpS2hzNWJjQksjUjZZME4meWxzcX1vT09iN016Z21b''@;'; put 'put ''TkY5MlZqR2lwaFEuPDc3JSNPdlNsMiNKLjJsKWV4QUVUMUkzYWI1KUk/XXdUOWNKO3RsPyEhc3FRS016clJ2TGZwfjxVPmZpYiw8ajZ4WWVAe3lOUlEwKlEpekxLKzIodT5xbHUufSxEYkBhJWZ+Pjk7aXJeKU1ybz0zeE5DOkEySzRvXlZyVVdkV2pyN3N6LGtGX209WTJ3e2FuZzIoJFVVPSR8''@;'; put 'put ''LnA2IUZLMUQ8VVpzVTRuQkRWezo2PWBJQn5FbHBzbClZNXFxVnFlOVRUN0VEeU1bO0w3dE5RUC54b3d8amw5Zy82I3NqcEdMKyNPPkR7S3N+KkFWZzZsezdtZU89cl0jQ3o2Wk9IbVBfRHlwUDAsNlRUUjZBYzZSdjIqZiE/PChtJUwmWDFOeW03O0wscWklSSUsVVI8O11oMTxVc201TT1IczpL''@;'; put 'put ''Zn1dSldnRCNoZjU2fDJLRH5lVTRAYW9eTFpxbHExNEIsbUkrUF8+Tzt7dz1dRlhMNTdhbE9VL3R+eVB8LjpOUkx4TD5KOj9LYTNwJG9UI0k/ODE0W3xXQ300UTVNajdyU0J+ZGxzKkdaa2d5I1JHL01WVTgxWEVadXR9dnxXcFRySDY5NkN7PkImWG5wIiZudD5MPVFfZ08uPWFhKENfQTspZ0Ah''@;'; put 'put ''VWk1PT9dODx7Kk5zRFNecCUwdW9eYzRrNVdRPSFvS2RdbH4yUEEie31tZkQyQjU1K1FzPlt5Q0UuM0NPX0NtWkk+V2NCLzVrO21kek8oRiNAajt4SihBLmhIM3dQZzQyQiQ1MkBqbChfJSpMO151QFdufjJTUzx4QmM7LGM7anQwdHxtTDJWRWtedykpanQkTllscEJoYmRtUnowJjh7a2Qxd3pv''@;'; put 'put ''WDlkSE8kLEltQmVELHVJUCNbLDl3SWo4bSVJYzZLZShHay47dzUjJmtWOyhucno2bUh3KHwuXT9aST5NRzJSYE9ORGk7cyo+a1YleiFhcW4wX21HPmE2Uj40MTRWfS48OyExNHp4Ukd2K31wanw5THllXlZFfSVMQmt3WFNPMjZuJXApeE0xcVtqZT9jN3pMLD4pVjBydVpnVVRkOWgjQVNYYSJb''@;'; put 'put ''ZzNgM1cwKzM3bGdqJTAhTV42TTZHMFJicGNxL18+d25OPSlzOi5oKEFYMDpRelFTPn57d1VFUntGclQwWTo4Lj5VPk5+O142bSg4ZUMuMXFzXk1vRWo2fkIwc1NYMkxTV29OZCRDXkB4XmdZVnJ0bGQjcG9xZiRke1JIeCRbUllzYVReflVFRC9zKnswKWxLKkosKHglKmRGMG5wREN+M34xKzRu''@;'; put 'put ''IjMlPFNYXz5zYz4zOi8sLCZYSH14I1ZHdz1lZClBUXhQUTFBYmw/ZlZtb2ZWRCUoWUk8Mil1TThbJSlhbXRELykxS2N0ISIrdCEiTjJpN2p+UzojaD53MG9LSysyPkw5N1BxUVI7PUsqV15wPD82fU9DWzVRVTx0aHdNeyhuI0ksKWcoOHYwY2UrRml2MllsODAuSnM6LH5VTzg9SWA6ND5xYVM3''@;'; put 'put ''dzBsWGtGem9KTj0kJDVSJD9kIVd1QEpGQXB1Qy9FeClrVj5RMko9WlY2PjNIZVR9VHR5IUNGZXRRRk1LWVV2VHttRyxIPk04TndwNTY+Y0YkQiZrQkEsdSo0S35eQ21rQG9Xe2w8Tysie002NGssc2VYRmVKVHJpMUo9Ol46djBhLnhHYjNyMDJ1cXVFImNzQEN6I2QzKlJfUyo5QVc3cWAiNHRK''@;'; put 'put ''NjdjQTQrZE1QU3heVj5NfltBZkVGfTFATGlBISMoUVZ9V0sqLCslMFlqQSwpbW0sfntQJiw4JComKmB2bDFeZDFkMzBmSSpgI3hdZztYfSNyaW84OTJSeztiVChXQVMqSjU9NzpDKDQ6JkdrLkp+elVFblJkdEtxKllyWTN2VD4jWkdxXmRQcDR4MUd2bX0jeD9qe0Z6YlRxPkJWMHpvYS5OYkEy''@;'; put 'put ''anorLF1VNnh7bGZhYkRYaUd5JXx4MHpweFVLS3plVkl5O0ZlcWByQ1YudSVHVFJASTdvW3NJb0whKHxPQmskOEMyVl0rI0s7T31rRDguT0hGd10pZEd4dyVXMmM6QlFjQk1FVTV+SFh1b31zVE9eLHZxU2hQdS48cXtYSHBOQzNKLGZVNzNqN0AvbVtLcUE4LFhbJjsueks9OiluO0UkZGAkaEww''@;'; put 'put ''PSUpeU5UcTldT1hidWREKkpeLnYyeTdIWHEjWGg8biZbSTM4WVtVYmVKM1prPnhpN0MyT11jaC9XfWFlWnR+dWw3O0slOExaUUMleGs9WWUsaW8vSV1EXzAka3Ywc19mIXZISTo8bmpedmpMIU15NFV+Myp5fHExT3lEaFNnKlMyKjg5XV16XXRaQkJCaVkiOFR9cWBnTWxoZkBGQChjWjlPQC5h''@;'; put 'put ''Q3RKPlQ7biJdd15AU2lkalBEakwrJXhJYk9TR0VAbmFxeVh4MilZeCI9WiMoQFBfJnNpLiJLKX1eX10pakl2Z1YlW19dKURJNFYvfkloZCZVIXwrRUhaTV5XRXw6cjhfQyxkZXp1aSVHOjMhSWl6NiVSfFE9KG9vbClJdURxaX5IIiZsMTFsW0J6cmUwVmtrJlFzSU9JOV0uVUsqPmNZRzd4RE1Y''@;'; put 'put ''X3swTlI6P1djPmBeLmhrOCl7XSxhaC8zb2NqQn1NckdbLFdBe2NiS3wxaT8lUnlXWiZXbllNOHhjTmpMfC4uTVoxWzpKZEI2fUkiSEtSRncsdnhhVCg7Wnw8RUhOPltZT2BnWWl5KiswJFJyeyNnYHl1e2JIcil6azNGS21bYW0kOlZtKXR7OXReS2x5RkdEcUUmNSw5MnB7c01UZkg/YjN1RjNQ''@;'; put 'put ''SmZmW1NNPGdNPlNJLjFUQD5XLGV9Kl5LOytHI2x6czluQzxlUCkrS257VHZ8Y3VaM2Zwb0JzTX12Qj1pdFYhYXdoNT1BXVoxXmVrYC4zPzcsN0JIYm5mJEtScnouXTAxOXEpPCw6Mj4qaDVNJjwzVzx5Sz5CKi5YekkzODooZyE9SHFvTSljXUhHdWpsez0oNVpoNUoufCl2bHMrSklNbkJHd2ly''@;'; put 'put ''V31KZz1VWTkoSn11fHYwMHF1cT1hTTh7LGBZSWg7I3s2bEpiUX5eekRRTTc8Lyw0dDcjRmpoNyprND0sTlJAJmRpeEk5NlhgWHoxPXkucztjQkoxOylOYFpfT1BwejE1e0pacS44Kyt7VUNlUC5EdFA9YmcrUjI8JTRFa2peTl4hKSVXOE0lRU8xaCJaa1c8LHJ0NWwlXShXd2ZCMDBaOHRpdkhY''@;'; put 'put ''R1ROOXsoJCRMUSZbIVBPI3JYblVPbzdaeWpASDdkXXcsMDltN0NbOTdiT0lpNTN2OVZXVXNqSmZzOylnPGFjentQVmlRMUVbR2U8Q1QmbEhqK1hKbysySDtYQyZeSClqIndxe2l1TlJzWSVWO01eNSUmcl9iVnJocytJSGNiJXFoNSh+YjE+ciFjQn5Jbix7SWEvajFUZyk6RGtOMHZLUnoxYDwh''@;'; put 'put ''dUlYLCVmeSkpfCx0dkA7fFdLYWhiZGBJI052JlZNSDFEQS8yUWNpfDBtT1tLez47SVhxa3pkOHExaGVdQCJrRlR7JmFrJClZY2Y4SSFjJk1SQ2V4STpLJEJnV2opbiVlX2xFTT9AZVBQbHQxPW55Z0tESy5dMzF4dWslPmdZQzNgJHJdfEB3Zk0hdHB5b0gpdzY4Kjl6MVJlSC5vWUZDa1BSRDU5''@;'; put 'put ''bHtsRVZeOUx5c3ZqOzAsS1E7dVY6d3khWForQVF9MDh0PEAxSm1KQCFvX0Q5Y2R3KTRBR0pMYyhxTW4zVSswNHB7S0sqKjVddGs/WWk1RFJwWUhpNEt7IytQYWlaZj5OOlA/Q0k1XXFQS2FvYFQrZXtoYlp+JSFwZFVlOG1oRFA7Z1A2NTxvMzs7LkBkaCQvSTtyZXpdeDcsZnBjcX5iWXVSSy5S''@;'; put 'put ''MSlHRUteKyVRay4qcmhdZ1sqQjU7S3B7U3s9JjtgbCksd2ovMnVxJCZUeShrMlRDYGo+SlpTL2hbUGJETSUlOTtlSls7N3R9fCxdTHl8SVhLNVUzVUldR2ElN1VNb1lkXVtkWGhYPHsiclheeXVDVkoqTC9RVkswUXV1dFBYV0FdVCE8YEptIS81YjhZdVRhIXxJMkZ5aXc0Q21AO0NqVCxTPj1M''@;'; put 'put ''O0BCO0tSRkZSfUI/PkRsNjYlekZFXStfamtHTXhqWkRvaihkQzglcjImTnZwUXAqRUlPcUJRbmhAZi4jWmooZEM4bi91X0JQM19nIT9CS2Zvaitkbk56TEdJd2taVil0P3dnfWBMSSY0fV8qeHAydjlCJSwrYSE+bV9ZMVkzIXUpazFyIXVSdF5HcHZhcTQxMztRPEdFIiFePkQybzU5MSUxXT1v''@;'; put 'put ''RSFnN3BJWVJ4OGlJNlo8e1h8MGA5Ynd9N0VqU3lwY0t1eSE6M0oqLkl4eUIue0M3UXZgI0M6Tm5PdCorO3JLdCNrK3xAKGMib3s+KUY2SUc3fUBlJHJaaDVAOD1XMkNfXVgxVWZPS0M8MyYqKCJHQnYsLCJxNS9wUls7UnUld0FifF12KSImTl5oYjptZEBRJGp4PF1SNU80bH1AWWo5R0sxKT4r''@;'; put 'put ''aEBiSUYsZm0rVlBSMElxcHBNX117JShJQHAsaCtwUTB9NWcqSWRPWjY2d0h6Qzx2XlppL0ttT15LLGdLOloiZi5pb09wTWU6Yz5lZlV5Zj1PNlRLe1R3NHZTbkU5JHpmKC8iJEorQmw5VmhrMXAoRXtCQ2o5MUFSKDhYSyxIK1Y8UkhFbSRPdEcmTCxQejlqemo+IkFyVE5mN0p0PGY2fTx1YWQ9''@;'; put 'put ''JissfGhqUiYkdFJpX2M/M3haMFhkcG95TzZlO1pTNmhbclYyfnNAJkM9N0RqWUZgaFUkYn1+dktpN2JMRzZZJUA7M2A5ckFfKFd7fUlxIUI6fFB0JmpePDxRbGZPSE5mYV9ZRzFYSj4sOEJGNipAI2JRY3N3fChiM350YVoydWYyMHAhSSZ1e0BCaiVhNlkjQ3g0XT0pelQyWnxaSnYsKDZVVXE1''@;'; put 'put ''OHA2K2E+YXBMU1JeIWksWTNzV3UudH5FeVY5TjhpKVhISnViOFlnektGazxpYER3ZWVWTTIsSDJjQkJ+W1o8bHg2L1UqWXVWUjx7My4/OWRdIz0uVH4jZnlXJXxscmgjLz4/Kj1mI2ZTL0AlSWt+YU9kL0gkSmJLbHtZOGZqZUdtNVAqOE14O2daTT5ZeCRJNTxxYEBtKEQmallfQWZHaUJ0Zy9B''@;'; put 'put ''YFNfNWtvPGtoZXs5OElPRiYrU3dQT3ZOUWU1VSFOPSlZJlk7OF8uMVZDKXwoeS9WSiRucCV+Mjo8TSw8KVdDTGV5T1heRCVdaXdOKDwmPFdTLC5Dazs2aFQweChmIy9PNGxXVndkd3QpZ0lgRDIpYWkre1t3N1ZLOnlwRCFLeXVSJG5AVVhmPVRGXldVenYqQyEhVTk7b0JGbT86JU9BPzVJMTU1''@;'; put 'put ''KSZNOk5RYEVSTDg5S1gqJn5rbXksdWdeMClNX3lYT1hRe1hwbW4jQiY4XjV0KnpQYUFFbV1AIy85MWIkcEpBSmJAKThvcEgqejkxKyYxclkyMCIxUFAxaixpU0BrKDNkdns9Qnt0WU0qalVjQjQyJU8+XTVDNjRNVCtIZ1gpTCVdXytKanFpRztgQjwheWxTKF8qKjdqT15aSTpqUG1Rcil0SzlJ''@;'; put 'put ''SDhZS0dMdXgiYCkrWVA4ajV4USFfT11nbTdYdng6WTk0X0h0Z11AZU1HJkR0NGc4Y10sRiQ8PWdaYHc5JmVsKkBrel9EXURpMHhsTXYxKW5mYTArXVhlNXVwcF9WMWBQR3cpTXFAQVtAP3A4IiNiSkI1WShPSGU1dVtbeUJ5Py9ZbztrPGw1V0ZHXWpsKDsrOGY1RWUoXz87P0RybVMrZUh9MT4l''@;'; put 'put ''UXRoNWQ6LHh2O3RyQHd2RnldM2xxRlNvPihZTWEpN1FnQGt1d2kxdVElWGhRJmRQRD4hXj17bn17V1cwKyx0b10jekRvb0BrOytWVkpIOm1VQCJqK0FFK08ySEwsQkZgV1E4e3lSUEpGRHFaYT5bQ2MqfjBBUjVhcWg+amR7QUdtQ3BiTj48JT1vW3hJd3ovN2YpNHh1M1sqSmBFMXQ1NT4/TTlj''@;'; put 'put ''MFJNVGEkTTg0ZHo3NG5VfSIhJnZJb1VUSSNmTTkrUz4sOz9rYClxc3g7ISx6VG4le2Q+Kll9WWQ6TGw+ISNMJWciVlJedG1ublAjaExKc35ic289SzpLWmh8UFZdOSNtPF4oL0UuYXIrPUBXSENMKi9iaGZENjcsT3k/RjQkUWE4QEM+VS5JImRATyNHWkRmYzo+VyFeeiUvOTxUM1NhdG1QP2so''@;'; put 'put ''RCFeViR6W3UrNExzSTYoJmYzLyJlL1JrNUc3RmEoc0tIO2QkOGtwT0VxVjAyPDBXd2NrTWBwZT5gKXN7WThqIn5GTThaTEFzIUM+WjpSYlhLb11BX00uSG5IZlk6JkVXYmI7S3pEfUo7S0thRlNEOX1kLF15Y3lOLF1xSEE6JWRqMUpSOy5xKSthYCxTV3xRaSlGUm1CXXolUmVDTDJEbXwrbmc7''@;'; put 'put ''SGZLV1hxSGtCISwpKXxUL3pvTlkwMiI/R2RueDFKMnY1NGJOcyFPfjkxS1pmeDBEcH1PI3RxcE5QSF1hZV5sRHdad2w9NVQsYUVjQGUqYSR7c2F7QFI7TX1zZlB3Y25Jc19ZYXhrTj5xVypeaHpYb3g6MGtePzFYQnN+RHJVVW13fmdBfn0/VWk1LCJrMWZNYkg4KjFaZThIUU8vJEx0cSNoRDp9''@;'; put 'put ''MzozZTJxPS87OkdQTSZrSmZlXUA9aj5aK2JwUUlfP28iUDE5UiZQUXEjQU9yaVZJQlI6SUBZR3xLMjRYbnhTQygvJDdxRnpObDNOXmtlK0Zfe3A3WlYrPighbkxQZUIsUzp3JipxRilOMXJQOyhzcGorKjY6bSoyWk00WTQsNUIuQipkZmtUQDBVLzZGSzgxRWVFV0A8KzFWYz9JNyV2cHZIJENx''@;'; put 'put ''Oy5kZGhseHddbkVCIy5pQkNfTissM0F0eHhnaEZDLDhuKFVzW0JAeTxuUFM8OixBfGl5QHVSek5TdmJnXXJfdVRgNSRHKjVDSmhIQiNmS2o2V1dEWm9RTTRkTHhMLjxaL1h8Y31QTi5Gfnx9RCk0Q24rJVtCT1tyNHpCR25VYzxCeik6NlpyOVY/JnEqcFlzYXtpUnFAeH5FNSxIUStVPGJwb1FS''@;'; put 'put ''ZjtVTmFPYl5XQ3FZMmEyMTE+ZXdxYF4qaSkzI3ZIcV5rOlsha1pydWt9UENrUmQvY3cldVc7Mmh2bnRvd2AiQF9PJDBWc2czcShbV0tzMDpFUlJGIVVhdUJiLGFuKD5XbzIjTXwlek9qKz18QzhvTHZ7PFhYUkZELlNIWzJNaVhVMExCNltTZjBgZy56Nk54KH5ucn5jLD5tNyUqeFZxNGAhP0kw''@;'; put 'put ''LlhkX2h9Uz5rXTF+d203P3IiYGZDe0hfaEVtc3Vre28je1lLeTxyRS5YZ0MydytZaSxbSCFQa2tYMkJSdEY9Sk4uTCwjY0dbW291W058Ims6cnlKQmtZNCFoWDYjTXY8ciElI109W1B5PSpqMyh1LmpzVm9Nd2c7S0B3Vl4qME9Ta1NiN2ZAKyU/YjBzRUQkMEVsUnwjQzF0Rn59dU9JRHFrNEFX''@;'; put 'put ''RnxpQmtVImpkL2tGLlBFWFB5U1pda2M3TjMqd3k4WjVaaVIkUjFkMV9HYzolWiN3LnlVKzV0O3p5Y2hFO31zXnRSWmo8TVhIfS85MmpjVyVEZU5FRClZPDN7MEREQDBCOVglMlVFdUk7XjljWC5mL0BHT0k1WXJFQTpuMC8ueTEjRShnMFdYV0QpeSZRT3lpSS89YTZseUMyaGcqeHd5bnFaQTtK''@;'; put 'put ''UHljOn57NCh7I1VqWkdPTihaYXAwVGZtJXBvU3xePEYkY3swZFR0KGQjPChrNlsvLH1IaiNgUjhKU3RFdTJ1LHRWakU6Q0YiIlRueVclOSw+PkZtWmRbOlc/QmRNNDhAK3R1L0ZSdkxTTigkRyh7MCZic01fZSxoWi9MbWh8OkkqNkZTT2BBRSllRTEwX2l9RWo3LndlPD9YYXtobUZKT1lvTFdr''@;'; put 'put ''SER1P2hfeTchWXBFeU4iQzEpK2haRUk7M0lvYktrNEU6NHlJR19nUjwzJkgjZyNZcXxNQSNfXVcydVRqRGU4TUUsPUE9VFU5MjIkVHdFVTVuYXBeW2djI115OyJJMHdMXUhzX1hNO0FpTFklL1hXTW0yTExTUylbRUdGLDJGOikpOE5IdnkmIj9iKyImJTBHT2NdInRqNWd6TW47Q0V2cF5AM3Fd''@;'; put 'put ''ODkvalNoOSV1Wm8xR108YG9vUXxOTEpuSC8xajFBa2c8IX4sRHx2b3ZPJSxYfX4qcF92dUlSTT9YfG43ZVE2b2BRJWRQRD5wYEBNO2ZOXnQ8fVAjWXhtVUgjMFElQG1yJm18LE80Wkg4dUN0NXUvb29kdDlLKXZPdSV3KFc4Umc5Oyh8WGs9SVgsWHgvRnd4KllXQiomKTZ1dCFJR34/Z11kWHZE''@;'; put 'put ''QXErYXBfaTx5WDlNQyhBYS9vaFVWSWk0UF80cmldbHFXR3VsYClmJDRaW3kod01rc0JNXUY8W2R8PCFGZjFLPCFkakM1LzozUjFbYkM1RmU3KGVDQW0sRHwsNltPQUMoVjN7Il1SZm9+eWVyaGtRZXp3QjBddnRLImx8aTh3TEclQkNiaytRfiF7V1EpOWRCOHlBZ0MrQllHUkY5RDBxZEVYRnRB''@;'; put 'put ''W0FgeHMhR3g0QUFUWCpFe0NCJW1dUSR4SCU1Wng/aG9hTVFsNG9PZmE8bEoiOFhjbXx5U2BzJT5MSWBrYktlcVJ3dSZUIXVtXV1haDhodFMofTdjYXhNPjZ8O1dKJldEUlJOekR+UXl7Q00oQl8/cm45eWI3OVJwWWt6fXJHSCY6UVtaT3VTMHU/NGB1bU8mU0s6MDoyZT9EYChiZWZ6d0B2VFhZ''@;'; put 'put ''N1NLVjFKcCl5TH58SEpAdWQvUFkrT3p6OypuWH1YcGpURGNDQHYpX01WbyVxRj1jNllgUV1EZ3cqaEdtdWxuIzpgWmM8Y3RLOF1yUF4sL0JQWEBbSVoqSnlZT0BiOWY/YGhuPSImIncqJWRQZm8vMWJLWWVmRVdFTmwpeX5iOVkmcG1RZk5FIWNRPD03I318QClpKSxQITE8MWdiSnZ9akFTLng3''@;'; put 'put ''cW5OIj50cCJLJDdub0R6LF5NQlh1bX5VYThkV0NXNUJ6cWxRakszcDhfTENyYnNSS0psUkdCWztPdzVTRVFqLCxOdjxDaV9aK3I5KWJCVEVCRjhiP0dQIzU2UUAhOWpMaS40ejModU4pPUx6dW9nNzwkYWpOU15rcCo1PkwyaXo4MmpsT2pZZGZTL3JIcD1vM1dnN3NraH5vISthKWtoKUNBOms1''@;'; put 'put ''aDNRaiRjU1RYU3YucW5JPmhCL2BWOmZrLkk+ZF8uY09aNGI3YnlEfDgyUEEqNX5KIko/S0RgdHd1RjZ3ImdAd0FxMUUpUzt5KWM/ckVYO1tGSWpaSzg1W2ptPlA4WlFYP2tUW3I0MTtoZTU9Y0IlSjc+VjJjU1VTbGk0XXo2MXg+fSE1dmY2c3lDZX0udig+fnFwaU12dDR2dWVrckhaaz05SWFo''@;'; put 'put ''QHpSYzUodENhPHpETURaLix5PnFaLjRvRWY1PU8+djV6bnc0YkJNfjQ4ZU5wMGhxezkvQT1vb2ZoaFokVXlYZjMwW3UxaTcoUkpSXjgsJSRZWTVEOmkqKS9nNWZHPDk9Q31RcXwhUWN8PVs7T2lCZWl2dEU4UmtPN21CUntEWyErLzl5JX5xSnpLfE1eSHw2UztjTlJXXlQ0TDZdR1RJfSwwcipO''@;'; put 'put ''OHhlPVYpOnskTUdRLCxidSU3dkxFMTRpUn1ReDZZJTAsZXVJaHNtKXx0e1MuLDZLRUBiLyJtfGNaSDk6ZXRbPiEoZWcyQTNiMjo8fjlNZWMwWmRYaT5iX1FbJlRzdXlZIU13cz1fLnB5e0N9UVhvcmcrRil4Wn5Oeks4eSFbO0MhRGUiclBdYXNmPHRmTHc7OUJne3lKW1csRVtXI1U5ITxQSWc/''@;'; put 'put ''U256ZSJyVDtoMXVeSWFyRG04dyUwPUw+Q0F6MUI5V2BSUURtWjphKXQ2dXF1bWFYfCM/OXk5a0E8QC9JenlXZStmTlJWVDl0WiNMNUYodGsiOG4peX1+QWcraHE+Riw3cSM1MyE1Wj9LL101IX1dXUlJNnxrc1MrJldPSlM0RCRUWlM1bWwwUDFtaE1ffVBKbz56ZlNjUS9mfV0mUWkmVDFAY19Q''@;'; put 'put ''MDI/fWRBZHU/ZVMsMGZWJU1YMCtnYWJRZVFTaWNXKEE7JXlmMk9pb1pVSXg/LGshXll4SyJEODokIjYpVjFJTGRDXmdReU1aSFpxJldERWZ5MjhwT109QEcuUSNkVXh2PXcyLzA7NGQ9dE0qX1lId345I01OX1E6KUM5X2BUdyhdfixmWiZ1OHR5bkMhaVZZeyZ6VztabUg7U2htfjw8cC45NyF1''@;'; put 'put ''WCF6R2smbEhjUV5DcFFeP0Y1JUc6JU9POSpBOTxkbn00d0MybTp4TWU5TW96P31jQ1Naai4ocSQsLmNsKEw5TFVtQVgoVX5DJCpfZFcxPnVXIWNzPCwmak1TaTx3KXwoUmhCbENOU1hVZHN5O2IzKUR7UHZBWHxpNUg7VVJKc09TKXd2Tj0qOy9eeSlncFV4OChaPCpKVkxuailmaVBadlM9OTgq''@;'; put 'put ''LGI3SCx1bHNlL09JOkdRelclUHlWbH5SQHdVXl1AM3hyeFg8LiwicCR6InxOZyUvQE5qPXI/Ozl9aU1SXWA3fFQwdGFDcyg4b0BHVGFJV3ovSVdVQ0BOPEA0fmFYQzgvSlhpL2F6RT9xJW5TJD0qZUpQenI/YVNqKHJMJi51TXxadnBRIylqQEAvIllOMEU1Tk92VG45Jm9VcV53PipoaH4jUzo9''@;'; put 'put ''fD1NWF5sbF4uTnAzOTpzc0pEeT5VWldPPGwlT1lHMUx0N2AjLyNnZnE4UWRgQCY4YUFIZl4yXmdXb3QuY1tAN2NqNkArKXI+MXxAViVvSHY9VWcpY3BAZmxqYzlAfCVBVSYwbV19aGg9KUEwYVtFfEpoOGhWVHBuVGc6eilfaT03eDtQR0tgLkB6fnNAWmtMMUIrcm8sc10iYkswXXAwYGNsUjhU''@;'; put 'put ''ezRKS2FrTDFFWzU3LDdgUVlkKE0od1FwZFIwenNueFJMRShHQiV1blNhamZqY3xhdlRyRD1HTElbeU99LE9NeCQ7Q1J7PWUrfV1WblpnKXNBfWRbe1ZAclNXV3NwMzRVNXpwM3l7WGoxdTxUbTcmJVtAP2s8PjpUeyE3eGtYVm9FN2JsKTplV0hZMFVBZCQ2NSo+RWwvW2tgTzFnMjRqRGV5ImRY''@;'; put 'put ''OiNOTTlacD1eZTlKXj9bKURIM3pwOWRyUk9oNSpkMzFNUlsqZTh5ISxYPn4xVlU/aDYpQGoieTBoLDg3ezghcE8+RUdYVSlxUDZSfHdsUzdzZT13dzJEYWs7MWdwLD0zNnhwaTtBcilBdzw8KC97PiJZeUBmZ1hMW18ueDFlZkV8eX1fYVNPZit0b35NSlQ5ZHdscW9xKEg0S2Z4cXVOWDtOPkB5''@;'; put 'put ''c1M7Xl82Tj9kOyVVMFklcT8rUWo1ODpNWFU9K29vdXlXQ3F0dmwkW0w2LEAyISpieTkpM3YlcWtdRl4zTzYwW1lmJC9LPHk5OnJtXVUxbVFtTVN9OVBBKDFyM3NZeTU6TCxlNUF9UjFRPV1IKFtiSCpDRXsmMSYxO31iJitBfjJmN3wiNXhxe0hxeVBlIUp0ZDUsTkdmJnd6IURKanlQbSlncSFH''@;'; put 'put ''NSlwNT1peWQxLkd0KGt7fTxLc2ZPdXhKeEd3VC8iLG1PIlpFKiU1NnwrJiNxPT1LWkNDcHs0Sm1fNUpeOVh6WCR6K0UoMTc5WTNeYjF9YVNqNkZGUjhdP2BKPV1Ie2AjYH1LdS9+bSxdT1s/YFZ6d0x2Jkx3UkY2XmssUUdGe3w2JU44d0s/JFswV1MjSGA6YzFETSxvJGEjcTU9e0o8WCM3WCU+''@;'; put 'put ''Q010Smd9aCNqbSZqX150YWdPSzZSWjlWKGNOWFduMFFjfW0hfkpuT20za1JpQmBoODJeQGYxQlI7KWJUOixfdn08R09NYlN+ZkhSVEQuPlVacDQoN2c/Zz1IZXojK0l8Y3old3Bpe0kjcFNsJCtka0EsbWQ2VnEyeHdnT1oqdHZ4cU9tNFZZQ0tYZ35sP0tnZj8vKS5ZSDxkNX55VDhRMHFFI0tt''@;'; put 'put ''ZVA3RH1nNyg7ZSQ/YiN8QSZMay5qVXd6aTMxdG0kR05DKChTYWUhYlpFYDo6LDFhZWJOSVgmW2JXK2VRNjVdc3tnUU4mNVlnUUIwd3oqezYvP1s+OGN2WG5HNVRNKmV6aiNJbWd1UUYsX2h0ViRxOmZ1UUBDekQ6LlVJUWBaWER+TnR6U082XnxSPX4zbnkzcyglPVpkMXNwcG84RyltJnx9NVMy''@;'; put 'put ''YE9Dd0IuImdKcCk/fE5MU29mX0JtJHp1Jk5KTWQwMClCLnA1RXZdQGI/el1fL3dBckIwLk9UOFoiInZQR3lbYkZlbUgyLEBrWzsyNU08dFZtJEhufm8kX2gkPiR0VisqSGtvfkFLezZ5MUhWMFB0dCM+ITwqQFU2azVvMm9VaF4/ZDovd1hgKWBnTmxCYHRvYFlZRmx7bDshY308fFpDTGFve3F2''@;'; put 'put ''eEBOS1pHdmZOaGVIWTtAKnlDJnt3OTtYRlk5VjhATFUvYEJYUTxiU316UF1SaEdfKjFVNFtgSCZJVmEmV0YyKXwjMGZWVVo9Z24waWI0W2oqZD03amJjS0clYkM1b2ttO2IxcSR0Nlg2RmpLOWtlV0YqcVdjfVp6bClrIiNCdXwoc1lDZ1lGLygkaCExWFVNW3NnYnNxbjpaQkBQXWZiYj02WEpT''@;'; put 'put ''VWRSNiJSIlJINmM5PGo/M1B2fDF4Tz9FZ1ZSPEFKRmxNJHNRIXFoSTl2RiZrdH1NeT1DMnoxREB6WFNsZndvOl9pczIjUGlaclZ+O1tZRVFOU0AlUz5mU2ZGelBbYWlbTDF+dWhEQzNUd2okc1Z+b2I2W017JltSRFEkYnZpMlEjNkZ7Ozp0byt8XU9bbzhOL2o7NVJDZ1NtUEpZYE9mQzdhdiYu''@;'; put 'put ''WmxhWWNLXVBaOzpyJVVHZkN2OS9AP1t1SEY6d0d+MzI2WnM9bFVmW2JyUSh3M35RMjNTa2ZCUjJeQkdIR2VodEdpQTI8M1FiI2QqVSw8aSI4IlRCa0pNP3NfeD15UUF3VyN3T0NFRE1nWiQ0OEY9NFgyVkByZyoydUxxaiYhamZSUGlhc107NlQ2a0NEeXlFNUR5RHwkMiExa1tAS2YzcUp4OTtA''@;'; put 'put ''ZGRPcz1MInJJPn54cSQre0lJUz8hZHI5I2lZKWxgPmx+Ono4KDVNXXlSd2dxaiJJKEczX3YxfTYvYjhOZEZsXXR9Qnh7Ond8QEA5Wn03aTF6eFgqOXtKIVQ4ZCFNOFpWKml2bEdULCwwcXA4NCtOcmthVFcsVnZmQGtic3IzXmBvN0JqeG48THxhdlRfSj9pSVFAOEhpNWZQKTB9QyFNaV1VRVdX''@;'; put 'put ''JTE2Un1YVHB4cXlfQEt8K0l9ImxwbyhAcnd8VF83JWdubSRoKClvNH0vdEtpUUNwbzBqcmhhRXgxYFUsXjw/JTx2e2hzajZIcXZtVVhNaXUuX19FdVR5Q3NQMjppUihKQ0lSaj5aIUAxOWI5U3NvNzVSVk9UQ3VqaHYrJWoocEQxRlJUOHlQWywvd1IpVlVHZmhrX2luQGlSRSNtTlgyWFdCOiEm''@;'; put 'put ''SjMyMWBTdXJbRS9AJXE3RFFaZnArLE5UZUsvbHFUYjY4O1N9Uzcja0FFKmcqSn55dmhsd3RtTEpfO040YldfJUZHZG1yOH01eiN1aCROYEB1PlVMMkYkL3ttUEsjYV4pJCVwWDxJfFdMMygrXWlXZ0VsT252SlcveHA2KmJqV0lkY3AmMFJOV1YpLjhQUSRQNVl+PC5dZWlwUjM8MHc+bFsreWlo''@;'; put 'put ''ZT8oW0BdQ1tDOVMpU2U4W3ZRI1c5NHhIbDNafWtMPF1GZDY6bHJOPjFiMXVPbU9AbUdWVylTaSZXPU5+UVQ4Xmp1b1dwOix8Ii9GYWsiWjhjezphITh6Q0gkKGJ+em9QQy48Qmxxen1wTDNjTFUuYShIbHhsPSxSfX0iYDUqOnxRKzxpMyRwcjJLdiYlWWl+UyIzaztuYWJHO2coY0M2Q0lJPUp3''@;'; put 'put ''fl13e3wxcGt2a3RNajtVXl8rVmREXkIxeSR7aHkkYDVvXkJuPDZdd3dAJCRZKiZPSSR2UV5pWGFxVDU9VShLfG1NJVIxRCF3WzRBV0hfYEguRyh1YCtgPzp1cG9HKDZmbUc1cGF6YWk7clU2PXA8a3smVEZ3Jk55JSUxNCJLLiMudCFfWUtzX0w1XUojM10pa1UvO1hBXlFBdklnL2tSPVJTSE58''@;'; put 'put ''PnM4VC8rI2ZCI1BYMDtLcXtGKj85LE5OJnAkLCtAa3RGNVliV3QxPixKQEpRbnlQMCJyI1clI0d+aHI6Q09JY2RCUV9NNjV1amtfK09RRSY0N3NBR0cofl09T1FFVj9eb3BLLmg/dUNYbT1xJlZfTnNzWVY5TjM8S3kvdVZ0RmMkWD1KZ1R7SWckZG14a3tSfV9AWjczMD8lYnswOCl7OGhxR1cx''@;'; put 'put ''eG08YWxMM3QyZ2dscXpRUlppfmkqUlJHOTg4ISY8TiRiS0AlL2FfNjdQN2EsMXN5dHRbaHJGIToyb2d1SXJLZn1oRklMbXshOzh3PDVIZzxqUnE1clMvVCthezA3UihjcWtLUjteNktdPHcvVXtifCtFbUgidH1eTmhtdjBmeiFCdSg/MiszbngxdTkwaGVyJXgvIlB3Wy9MSH1DKFE4WjMwRz0k''@;'; put 'put ''TTlSPSx3MTwjb3B9alU2WEVPI29PQ1tZUzghYFJtSWNUMUlSPEw+S3deL0xaKVUzTV04WGAhdSIoZmNPeHFPezVqckU3RGp8LlBDNlk4YXRlVWo3Y049bWAiVnQ+N2BTTVQpcXNFW1RaZmxAQl9LcG0je0paVTxzeHZwKkgmanVTQUo3OlMyRDpPUypALi8pQDx4a3ZwbngxRT9vI3IpPiJ+QF1n''@;'; put 'put ''MFYkbW5mbiNZamlOKCF+Xm01MnhHISFLW25CayJ4USRIMWVEencoQ2hXdkJ2OEdrLEJ3TUdgTlhYPz59PGNZOkBgb29LXVp6az5pYjtePGk0Pj0mPyRsdigmUUgsK35hRUFgMX1UJE05azo6Ry5VQ1g8QFFZakg2InxWJGNHfENHNk5fI0NEeT08QUshKiVDRW48ZyQ5N1p1X0BqTEtWRz95MHI4''@;'; put 'put ''SSUxJjEsRTRqeV1pIzpmYmM+UzNwT0hWU21Neng2K2x5QEtjISZiVyN2SHwlYWk/IU5oPE56cSxdd10oW3IkZTVIdDFNL0shLDp7JEdqOXUpLDhvS3FeSWVfYjhmQFtPZlh3QWE+OyEuUTFNTFZ3MTFNPD9dRnZPRm9vNCpUdldsND1fbjBhb3I1aDhbS0pga14uSjJIW0FqK1lmQl0zVjJFZkgy''@;'; put 'put ''RkJ5fDF8LHt5cmJuJnlhMUEyKmckXXZgaFFeazFEJWdXSSVfZmtYYF03cDgkUn40ZF1YJUg/cmwiWkZwelo8az0lP20+ZGouK0s7aVZnYXhrI0owT0lOLl5JOjs5Xm9RamF3Tm81PywjR0JANSJHRCU3dkxOPGhvdjBHPUNbIzBld0FTWyM9SHxKMjZrY2wvamMuW3dOV3A7L0JoM1hxTXZPP3J2''@;'; put 'put ''dDtbNix4SSxrTCVddjFHbHhgRCpRSDZCWlN3QGNObWFUWm1kMSYxKC5ETH0wIXxvWWBsO0srPDZXYlkiL0MxK0ExREE8ekdQSFRMUUI8NFlyOk5ZRS9CP2s/MFdOIyk+RT9pc3RaUFQ1ZVNzSDk0bFNkYUVpPm5DJF1RLGZRMlA2NChCTk4keVFWdmoyXnVCISRQfE9uWm5SJEV0Y3VKSnVOWVNk''@;'; put 'put ''WnZnUi5oQUlQNUkwWE9hYXthX0hZbVVqLmNmR3c8YHY0OlhQfnQ9YkQjN3VCJEROWFB7dE9ORjxzNkFnOkZqRU91U3Y3cVEyUkN2T2VmeExtSGpMTV0rRiRaL0ZUXnNFTUNWY1J2ZiFhOyRJVVk3VzgqQFFndTRxQDJsUk1FcSJtblpJbzd1dXoiPDdLUk1PSWpsYStjOSw5eF1kLERpR1MuTUBw''@;'; put 'put ''YiZ3eiEmJFBULCouV2w2R0dsL3g4MEV0KV15ZGwwd1Y3UWovW19gWldIWHEreHhrdW9PZFgxWjo3YFomRCNfRWFESD1CUVJGJDtIL0JZQWdNSikmPHh6WCsiKFNHPmtURHxTemxiN1tdeWpFRTFqcjZSUGI3d2Z5ZDdCJC84Q1F9fHp9IXZiKCpbbld1RC89RERPSjBzUFgoOFtBZG1dNT0zTzY+''@;'; put 'put ''Nlg9SH0lUFZ+fSJNRVcldlowI1BudHJsYj85WzVhR3Q4P1d0SU42a0d0LCF5fXVJd0RkNSlVXyo8XjdQL0RkNVpyaVQ1YTFKd3xAe1tEXzAjazNUe1JXV2ddNXpvXldjcDteQjdTcUo3bWdpNU08LGY6PlduejhCMjFxT3dqfWUuQzpbWlpMeW9AaDpMSFU9dCk0Sj4/JEZbPX5AUThbUWtCb1p2''@;'; put 'put ''R21XNlkzU3F3eGx8Rzp8SEIiaCNZR0xOdD9gd101PThQOlFyb0kiZHxfcUhjb1pffDVNciF0OCEoQWRPSjAkIjNHM1l9L0JaP05FfiJ2a0VFPTR9WGBreEZYKitUQEpeMlg+WkRgVkdHbyV1b0BScilCZFk6O0ZbUH57eWRIU1p6PTx5MHY8I0clPkc5STJ7Xks3SDtOaSVMLGZuZ2IoeDljNkoy''@;'; put 'put ''U1IqJnxsSGZoayVfKVJzRWg3VHl0S1NoZUxEaTZrbEpzdndMR2N2MWxVLzBjIzo2WnJ+QjIvO01lUiF+T3NjdlJxe3ZecSJCPzQ1JGU1Wm55MTZ2WkJYXkBTRFsqN09PfXcxciY8MWEqZzBRTyIzN0UobzxySWNYYnN3YGhrYXN3YDU8Yk9Bfi4yKHpBZEBGPU1NT1Y6LkxbeS46ZHNNUHc2K1so''@;'; put 'put ''JXJOUDR0TDd9O0dmdkZeQE8/Jkg/MFBNbT1Yc21oNVJmeHE4PyVHIz12KGJ6MXEoRUpWfihGaXpHNUIyODNJT3h1aVI1NitkY09aZDRRfUh6e1Q8NCg/eUs0Nlh6Oyx6Pk9+MHpIdlhtMFNmX2dFYiRUbitzeHpaSjBdTzdwfjRYWj9Mb3puOHRpP1o2aVV2VCRVZlE7VXssWzwwKUQlJVVub1Em''@;'; put 'put ''cntKc09RWUZYNmw7Y140UGBJU25wakBKK2RbSXpiQUpYZGVYIjldTk5wP1pNSGtJO09hSzBHNktSaF0kRE9eUCRCSCo8UUFgUSoqVjdSW0tTPyIudEh4Kz9YdHlaZ1szRUc1PnhWe2B1fEVvZ3dBJWcobFkjQkFLdGJHe2gmdWJfQHxkfGFoYUtfP0dYVXB+NUg/R0R+JCMjWS81T2J+Km1gQ1Ui''@;'; put 'put ''MXM6KXNAYklSQjhWKF9hKXo4IzxRcy9mbj9YUyU5S0x9aUAkYyhHJXFDclYqUVtGOihzLDBrfG5END0vJEQofls+W2kqQD5Jbns1YmMpMlBtbHtePjBUdl4/ImhpQH1KX3c3cEQ/fVR7PkJyTVUqNUc7X2lAd0RqYlV0Wmc9N2kpVHteQ3B2STF2W1dLUHZ9cjwiaT9TcnNpdDRKZm46TTN2UERU''@;'; put 'put ''eXFWJXdiSUU9KUskZE5tQClQaWV+LldgQVlLUUspdD89MUNzST5bUlFucFIzV3xXWE9UUiNYZXc4eT1PTVJFUDpfO0FRWi5kPzEsIThkWT43TEt4ey83JD5tSzFPdn1DLHhTNWMmJXNoKUYxMURIPk1nQ1NwSCsyIUwpVyg4JHMkJndGTlh3I1c6MmNwa3hKYE9QdGx5ZSI+dWprSk42VSElbTwi''@;'; put 'put ''fGljPiVfNDtOVTF4PGZlN2VNSFllOmREbnJSPz5qZTEyWUR5ZyZ0XjtqWiNYRVgialpydkhBWDkyPSwjblk+K2gpMkEzTHFyJGU1NDRrRWZbWTlERDslIUB1Q3dDP1I6WTAjRU1hR3Ehc2I/LGBUTjwoTktnVVlvNXNiVSRvd0JJMC8lLyQwX2ZWKngqU1Z5OG1VWG0uejpRbVglR3B1Mk1EWCpm''@;'; put 'put ''TWFnKjprSX1XcGI9fFIxN0dRNXBpPkhRUWk2My4qPVt0SS5ZZyowSFheOlYhdEZOb0VdVys7XXZWJXZ5Ki5JVGBOZXlXQ1FOdUVxWGM7PEZrLiZEI041KDdnYSFwaDpZVHFXfCM0Vn15XT5CVUJNMWRaYzZVd0k9RiFga28sOklPUTowOFFnTFAkN0xZREBFXzRbQiJJdGAzd2xqJGtRbiVZNnxS''@;'; put 'put ''WjErIzBdI1JMMzkwQnYxV2hJKGNHTlJqbXFVeVptNio5fEokNHZGN042SyozJFlaUlZxSjorImZvQnNAY2xyWD91Rj8odUZOcF4sLzF0dEQ9bEVhWkdSYEg5dilmJHF8ZHw6O0N4MGdHIzxFZXlvOyV+QSpnSSZNOSxoL0AiWFFlb141LERrTmVCPVRXZDFyTl9OOlJbfVNhZ1YxbihHRy9dNC8x''@;'; put 'put ''MlJ2VWAmbG85T0tFQUgxUlFqT1l2UDc/eWlxRUhgdSozemBZekI5OCpDe2UjblB3cHc/YEFhJEVHdHJddVkqWWJ1R1BnfGpWNVlfXl90LFk+dChSeWxHKy5hVjJGVDkpQmxfaUdvTDRsazdCYkt3TCJ5Nj0hRGR0RWYmJjxRVk41dHFDfGFKZDs8dkBnc2FPR05FT3AyIkxoTz9LOm04IVtjbWNB''@;'; put 'put ''Nk4/SDR1fjtpR1VSd2JacDRHPnozfE1BM3EmSU1KSF9HPXpQVm0mMkVRbD8hPFpdPUJPYEBDK2wreHhKbjovJik4W2NHZy9ybHY1MU5sU2A6dTVlaTswVHE1R3BlSyNhUzF0YXt9NlU8Wzxbd1I6LjxdPSYjKXg+VTpLVVRdbj94YFg5bXVENTsocEgkZWA7eUZfTSpzQyllWEpVNjAkPkl5VmEr''@;'; put 'put ''TWw2TUgkeiZFZCFNTXZUdUJJdHhYJmAvODY8ZHx1RVRwMGcuOVUuMClfdSxjd0FSa3B9IXJAKD1tTilwZDBIfFcpOWZXSWAya2dhYltAXVNmY1ZtIlFkWDlkXVB4SWZTemJ3NEAxSHI7Nl0vODZ0NmpGMUQ8X0lSSTtPU3FneG9fQD85NVtPSjIxV2JpdUJ8ZlhCX0Q+Q11mJllrfCpBLmlDcGdF''@;'; put 'put ''Ukp6eSoyVmBfK3hWPFckc1JyaENUXT5qZztIcFZAV2ZpSlRISWZjWD4vTSJfb1lIVXU8TFNxN3ZJU1ouLFFyenosXUlqcm97RWJHIyErVDxPPkhsS3omYHtTPiUxSyhQUiNKMVp0Jk85NF18UjpiWklpbzBOMW1pbT4hS3ozJjRQa21PNX18TjReVE5je081aFowRjVlNVdnZEo7OSp1TFBVRWY1''@;'; put 'put ''QDEoQC4sZE9BbmUpK2pZImN7NFNJOnxmZnl4MW01Ulc6T1lmO00mdyxZWXZVRlB6aEwxd2BSbkJLaS9ONnk9TzNzUzpaYjU9bDYpJTQ1UyR7ISR2ZlB7Jl48MWFKWzdVdVZkSF41U3BQVClBVF8uT2J1KC96QVBhMTRvI2BhWD57VlE1QHBAUld6YnQ1YmVwZCN8dVA/W2guSTUmIy5PeSEyNlBj''@;'; put 'put ''UjpqLF1Dcl9mJl02PEg4WlJRUiFoLn1DIWlSUX4wVXVmejxyZkAmXnpVd0hdbWFVUy43STI8TlM1KHcpImVOMExvYSlaKjNaVm45UjJfe2Q7Z1RYNT10Z0RdPHs5dG0vTFFqPklzb05bTVhMdXlvX3kuMSwlPE1eaGhTR1FrbUJuMG1tNEFVYGxSfGQuMmAsR0RFd21NZzVwUT1CaDo8OTttW2Fd''@;'; put 'put ''UlthVTEyUVs/NHArQ1RzIWFOSixnPE9+b3sqZDJzS051JW1OJGJfU3JOeWwxK35QVCR8W3s6d2pDbz1hZXlsSShHYDxWQGhLMD91K1ltczU2OzFUK2NiU2BTbGV1cmdKQUszeVkmPi5ecUB7dXEwYnJWZDhXWHchQXBEO3IxNixhLDMxRmVhZyYweFt5Xj0kc1pwMFZQSTwrPFQ6MyUvRHh7WXBF''@;'; put 'put ''PDxnXnVaPEk7UCZUeUN8bWdtbCMqKFsqQl5kMkolVFdJQWU4PlZaVlVRaFVLMF1PN2BCe0M0Z2g/WnVON3pvOk57L3tfbH1nVCYoKy49PHFwP2dmc107R1BfU1s1VGlMeH5NMWw+O3NRLCl4O0B+QGUicjRVSCxncygjOSxRZFhAM2hCXTZqSC5sMiIsMnomLFEkfG99Zmh9bV1XOCJWWFpMOE8x''@;'; put 'put ''L2dhcDY1LzptOVVSVTlfRUdCK2QyWFRyVm97U3V3UEtKSz8rX1Z6XkRsaGFuSyYwa1NLUFFWWSpReVtMPVlILmlKOndVKHkwRVNoOD59dltaYUZndislL1dkaSNFXSFiNG09NyFmMkoxLF48cThAK19WNG0lfERqbHtuRD5JQFhUJW08SWQwdlI2TV1lM31dRXAhISxGYl1LeVFaQXxqVkhsaGdn''@;'; put 'put ''RlFbRjBbJjpiW0AlPWZGNG1dW0MlJE00dkZGfl45b3Z2YjJ5eVF7b3dXPCZPcUtJRjVedHx5eyhbS3E0QG1rbD8oemFjdWE7JUU1ZS4pVkRsdkVrcnwiNDxoJENGZi4/d3lxd29rVlFmejpmbXcjaSk9Oj9YMTdFP21sX2V+Pm1sQW9WPU9YOWFRRmc4OiE9TmhVSkZMNnx1cmhwMGxZVzpNNT9j''@;'; put 'put ''bHMrZClHWGFoOHkwNHtGdzJpLzcuTCxhVGlGVEJkNzJxSHNkMTk6emJMUmFBb1dWfW1lUGYrP2N2XTUzY1QvfFR0Vmw8LGhvTks0V1UhYlRDSFpWZ3A6YVYsODIyRDZLYT0hU3IpUTpWdV91IjVTdmJwdFFiRTNdWFpoJmUhck40akY4e3k3JS5KLFpIKWAodlB3bEZROVZbZW5RRj5UKmhEX1ZM''@;'; put 'put ''O21OQEtkIXVsKjBdNHcjan1HPEg2YGQpI3Qsa2BLWzNRa3hNNjp3WmtUYU07MiRuUD1yIjw5JlNwWiNIPT06SzZkLDRVezp6YCh8JTt+aUl+JDZyaFg2clpNOzYlcmxbZTRqcG08cHZ8RiNRNm97R2Rrdkx+M3dMfjxhKnI+elcxQnwhfXo0LHs5cmgyT3ZIPT06PHNhIXtbRHhOW25eJlVNaF5s''@;'; put 'put ''dER8R3t3IWQoOXIlKTxIcmgvUi5FWVRBQUFdekFBe1F7eWpYWlldd29OR3AsJUdIXlhWUnsxVFB6aXBMbVgjKkF3QUFBQUFBQUFBQUlBeiE+b2dELC5kazJgbnU1bn5yZzcheEkvSi93eTwsKWI0d047Yz45L1gsUmZhIVVudlVUbkkiOVJ5Vl1QeSRbSzw2YTU5dWtXUHtFKnw/K2FhPUJhZ3lb''@;'; put 'put ''TGpIPjJgZWZCZHd2cVhWdEI0aHU8dzNhI35IMDc1KX4oQVhkdD00cjNPNTdQbSR2Z2VDV3BiJl0oY0wjanw9OExQM1V4VjhzbUN9NEpVc0t7Zj9PKUZpfE95TTtKck1dQ1JCVG8wTnVVYDM5bXJFSHZUeDZdKFJnLEtBNmtgSjA7KF11R1MlJmswcXEkMFB+JF5zRnk4RVl7bCE7PjVmUCs/VXpH''@;'; put 'put ''U1YzeD9PZnpQd0VjYkdFYHovcVhBeURLd0RDQGAqUUZEYDNDRHBeSD5tS1t8Rk1wfTNzfV17O0QmWiVbOzFCc1FXcSlOPlcsSiYmIUd9L3VjYSlnfU1Sc3B+ZCp0RkowTipgVHl+VzUwPTBYWkV+QTg8XUlYb14uenRzKmloTiMpYUE7eFlleEN9bGFLaFhLKEI2d18+UzI4THp7dlg0RFE/bW0w''@;'; put 'put ''YzpKe1RHaygjYDpaP31kXkYvfCg0fSRpNnlsKjtHQntkUl1YSkxLelBGeCo0Nj1nTThHbyNjZDlaZ3xdUEBxVG00YUFPUSY4cUp0I3k2RCE0dFttQGF5Yk94Z2RrPVQ7WEloaCRea1dgRVpLY3dXVUJRbW9MMj0mY1d+fiQ3OkxkNVtFIVg7OjQmcnQhRSRVRzBYeT1GR19vOjVyemNATGYrVTN3''@;'; put 'put ''PSUvfkxMK0s7ODIwND4jLlAuW2d1d3BCaFgwUUYrWVI/dEJUXUciTHIhREhba1FhT0ZHNVt9SSRyWyNBVE9LZkZCfDZ3RiZzWnxjaCwlKjdJXnQkL25aTHomWnRNPWR4NTlYamUhOUw/eSVbNkNfO2pqYDBAdVF4cHBbTjVucyY8Vk43RElRb2l8PVJ8OWUpS3Y2NmpXPGEjLEVjTldQJXVNMDgx''@;'; put 'put ''UEgpOmReLnFTOm47TmFyaGBZQFtzLiYuOC92d3pNdWdiOj5hdF1uPEleMGh5U2coVDIjXkYrcD54aD16cFE2TSZHVEt7Il4hfktQakpieiFdUHtrNlRkLlZLdUdCVlsidzQ7cmhSUHtHQ3cwd3JBPGBXPF13fmMjTy9hdnVfQmNsPDFRTTY8ZGNibTpGUnQ+KkxUbnZ8UzRReGlbT3N9ZVZnVHJ0''@;'; put 'put ''dCN6b0soTDRiYHUvVjYicEZwLyV+RFUzV3g3ISI6QSZAWFtyZk9+UyxrbEZrYnNPNClTXlpdPD9QRjFzVmFUNi9nW3l3PnM0S0xdSytbeCQhVFlVUzA9aUVwLHJ7IWImVl5JWGddMmApLG9VaVhwK15NbEFoemB2fElUMlY8IWdiKWBJdXIudUlxbzlpTi4lMkpiZDoiWERXfisoaUZXJkQ8L2kq''@;'; put 'put ''UHQhJnJFfUpTTihvIXVvNnloaXxea1pkPmlFN29xIWJyS1YrY1NqYGlbLlcvUFtValdSeSRjWG1SMilQb3kwLzNpP0tNOGRqTS9YU2pOYG4hIkZrSzQ7YSgyVU89VnhnZCtUZU8mPCNRc3oiQGFZZFJ+LkJ6PCpnP1IsfU1YVmA0UmJtfG0vSTU4IypAOEMreCRUciN2SiFZNDdGa1U9YF9SWGte''@;'; put 'put ''KCZXbVNLPzdVNVFxPlo4Nn0+UShxXTRRbWx7JGcqamgwPTFWKzVLaTBRLDx+THZYXVNGJj4wMXg2UFJmdjU5eC9ffl93UnRFWHt5RW96MWgmT2tQTmUvMlhGR3doYHVDLm9YRzpDWS5vbWhtYSxyYl0xQT1oMW5CRihIMGNBeSYqTU9kTldOaE46bFZCOlYpbT9oMyp2R0ZXdjNVbGo/RUUqQmMl''@;'; put 'put ''QT5tYyMsIXZbfV4qQnR2RlFyVHdPeHI1eDc2K3BFfColYmg5UkMxW2lTQm9QPmlheUdQZTN4cldAMkdyUHhPdUpCNFtJSHYweCJJRnswMEcyfCRoI0JaLH19cnN1UFNEUUc5NVk3PCNiR2xPQmQqJXJqdDVOLz9fY1M4RlglaGMxPl1OdlsoUVJKfVdnW0l7UTRYKl8wYjQqLF1sOClKRWh4TDQp''@;'; put 'put ''cmVqSEEodkczZT8uR11VKEglP3xEI2lnTEpYbkJseFk5aUZVcExrQ1BrXkImKUQlIT99Zl0jfG5TWnNUMSl3SC8uZmlZUEZDeExJSV9bSU4oWjNLJjlLSC43I2Jue2hEb090Zy4pJENEN1JRbipSdzRNX3JSRUtLUXptUyo+L1dSIVEyaUR8UyEudEY4XSNPQ2ZRSHNNVkxfJjAmXlhLRntlSXFi''@;'; put 'put ''dXJXYzwlZ0l3dV4oQng6aj81Ozw7LFE4fXtPMm17eiNadzcmSUVgUVZwLkQoR2U8cy5RIj1QdDlKIW8mLmVJPG9TKG0sV0JUN2tBSTZFPCk7NUU/KmQ0RHZLPCs5by8/L251Kld8VjZVSWhyZiN0L11ZJS5wYDpjYD1nSUliRVNpQCpBd0AzLnltdXhkeHExSGg9e1tsdWF4ZHV0fi9aZWFlPnJe''@;'; put 'put ''bGtEMTEoMUooWWFwIlZ3byooRnwzdyZ3e0lYV2ZvbFpHYG8uZllUdUUxITFdMUFSInFURDk6ZDQqMG4xdFBdfk14KXdJbUsqeVlMVEteUT5dZm9GKmxlSnZYPEsqVjJJMDcoY2ZjdFY6TXpVamBQViprdEMsLG86K3hRZ1hrJXNYdnV9MUJTYkg8LzBbX2VRL18iZVdDTG5zKTA0dDtFUE9lNlFo''@;'; put 'put ''N3pDQnAxXlZFbFAmNXNVVmZXRGNNNkVdcnVQNEJrPV03eTVJIXQhaVpFcGJNRkgmN0NIY11fWDBNQ3RyP2VCIWkkMSpQbzFxOTh6UEppLjB5UFBDPlM7TmZafnl3XntQMlNXazc4Jj1AJjx2KnJUM3k2eTJbJVdxXnRLSHRFamU7ZXVCTzdGeHw/NE8ib1BzUmBEXWF3T01lYSl+QjBrZylSQD5f''@;'; put 'put ''eDV3ZkdPWW4zbT5xdiR8NiokKDhqVUA7dW1tRDU7Nz8iUz5fMV9ed3goNGM8W3pBb3puRU0xYWMhfkg1dktITEE0MGw0T31jWUNASmk0MlVgN08pUCVeSz5DPmgzIzsoQiZbNWo5LGhXUz5Rb1YyQSlZPk14YTVYKlE6aHA9cE5EKEhoWCJWI3pzWmhEbUo1KllbI1V0XmM0YXcjX1VwWmpvcENA''@;'; put 'put ''d3BxPjw/Uk8/WiVuPj5hWjBCUztDODBDeWYhUXV2a1RKaHYpQnNVKTkqMzQjYzl4aXYrfjVRZGMkO1IqTkxJUz9pTz0vKi9qKlhBPUpqWnEvd1tFYDo1cH1XIi9EUnxkM2AkJF18fnIxWEE4JWY0aT56VzQyM10oSGUuPytgIzs2VmZzNDIpaGo6WFYmNCI5RipSOipgV3M0OjlwX1omNTB7W1tq''@;'; put 'put ''PkFXMUsqSFBhMDoyVVdCa3g4PklYQ21CZmFvYTBQXnFfSDIkLkZrSXB6InlwWjdtU2JnPWV7en1xV086QkNhezF2PjNodndJRko4SVA1I2x3d3p3Ykc3PCRLTFkxLldpZHF+MW80UjdpRClDcHV3LkhuI2RaSCxLbDFJMD49dld+NEQ3S3ltTDtYPHRnV3JMKjJBKGMmPkdddSRGKkgrRlBfNiVU''@;'; put 'put ''fWFHKy9QV0RfTD08JkUwVTUvfU1NM1kuMWo2IkczMDkxQHptS0ExbXprUkFlfkE/STJZKzlTZFc/QDRkWWxvaUxfQCgpTDlGXTU6Kl51JiwlfS86L31yU0xZUTsicVU5VVtIaSljNTEwb2JLMko3N2huK3Y9e2IocGZCISxsVzxyOGJzWSFhUzBkITtQe0J7Szg/XVQva1IwWUlrISVPdywlTHtY''@;'; put 'put ''QXJ4T0dXTTJuZUwxTXYwWVlCIn1FJEhGfU8mdTgoenx0KkAxfC5ldlo0djVnNWxYSj1qN1FZPjxJU1liak4qUkBGUExVVCM6XXVjMkt6bDhARDYpaFlmRjZ7ZSZqajM9YGpha2VKczRuI2NGNWFsQmd6Mkg8LEtTJjdLNjZ7azglRm5zb1dmcilfNXtBfHB4YWx3Oyo7KmVvQ1NKOVU1Y0g4SmpR''@;'; put 'put ''eEtRJXNNImhUPj9VMEF4VSM6YSxzN3dmdDs2KmldbWRkcEQpYXRsZSYhKmJVPGEqO2lsW18maEgxUnZTKy9vfVBuN0kzKzNmJFFZWiQsN0t6YEJMUnVrIi5iKndaVFVqRGVrajk+KDRJYz9QMU4+NXMoU0N0aXBWTUdnd0dZQG8wZ0BIWnM/Om12JTQ/KkFjfGk3fjFuWW9eSXlBeXVOflA5XUh6''@;'; put 'put ''Ok9IIiRMTmtJfDBgNlNabEBZcVsiKEVsV1hmbXs0bFYuTD94WShfJFY7Y0QwYjQoJnVfZHFmPDxdMmdhMjRqSFgmfkd2cG12NDF3Wjs1cmh2KXlyYjdRYDZqQU0icmFKU2l7fGQ7cHAlRHRVIjYqVnc3UXZReUIqZ35aSntsdCMjQGBbPU4vVktnRkBMbkhYV0NKZiNedFQ6eUoyaVB9X3FZOUsv''@;'; put 'put ''OEY1aiwkZzBPYGFoNX5ldDRQez4pcnlTRlslZlliMzN2Ikp+V2hAVjVaKFFWQVYpMXZgSV8vPyo2VGA5fn56XVl9d2dMU3NnRW9lNWR+bFo3P0g0RzJKP3pYJWw9fSFHXkgyW0lDRVUmZGJ4JkZ7VGB6bTckKDtvTXF7TCxfWEtrRkYlLnBvOmw1VWohfnk0S1Jge1JKTzUoOGEjV2kuRzlxQ0gy''@;'; put 'put ''Z3c2LztjPHMvaENAbT9FVnc6eU9vbW5HOW0sWmwzK2tLciMqNFpAJWpSSFAlRWIzYEBBWyg9bmJRIXNbdjVgRG5xUH5CKSs2InpOJG0pdS4oXTlPTDIjTk06SXJnITVCV3xYK0tYcEJrRElua2Iwbzk3Qn16O0QzLikrTCUyZUtARV46KFYzVXNBZkBWOEhdKm81bll+LENPXjptJTNTdVdKWyFw''@;'; put 'put ''by85YEpLXnlXeERsWDBZKVErKyMoOkhFNTIlKkZmQkFZXSNfNXpWUCltWDcjIzRGM0RkM1hNQH55UGVfKS5qT0JIMGgjNXI6X2VZWzRUfSQ0em8iVj5DdkxSaVlZWEtlMFpbQih6Lj5fN1JmMSs6UUdDWCQ7ISRIciQxfG9sVXpjJEUsUHUuZ19+Pi9OYjgyMU5tKU9Hb2BaPzczYHhoKlhAZz15''@;'; put 'put ''RWBiLzBvNEBmeyZ8azBUeCk4VDZIZU4hOkFTRSN0IjpNTXl0TDd2SVZWZzM4KW1lOT5ldiN1WypQbyVMbHAjX2F6JEtlK2t8SkJCSDNje21kQD9SIlEpUjJXWEpnU0poNjQkV2hAandnYWI9IkZgYzZMbV1lZi4jJkYoUlRveXBKMyVqMGQ8eUlMVWk9bCVwNyFNMS4ySENiTl1kfC8pTWlCQSty''@;'; put 'put ''SV4hJCZdOSlYbyQqVzY0S0krYSU9KWtTYzFKdDoyWWFAQShydV1lOTgwIXx7P0ZPaGFEdDFqNmdFcGU+PCIoTkQ5X0RlRkM2ZyE6ZDt6XTx5eWAsXTJpQmo0WmFCRE53UXdacHZFfWtAYVU2Ti5VeDVOXlUoT3lNfjxfc295cGZQUnlZSXpkaXp4KV1ddSRoLlJnUn02NHcrRC9OeTQkNU9uOihI''@;'; put 'put ''ZzlBWl9zI2UsITZ1fHZhamw2K2l+TUE0PT59LCsxMy4rcHd3XWFiVVdqV11uUWBfeH49dGQxd0xrOld5SHp4cnNUIXwyViFJPEBPJm1XNkV2WmxVYUl4PnFRc3RvTCVmKURLWHJ7ZmlKTXNdYV4mOUlVPHdQVEgianJwS30zMjUlYXQmI3UybnJlZURiRi84MXQ3TGdTVGVkamNCbFVyP0tbIzBx''@;'; put 'put ''TF9kbk1mTDZDWGpmRyVWRFArKTI6bTU0eU8pMlVkYX16WCFFUTNYe1FVKFtNKHYzKWp9e0omYCFXWWJ4MHVKRCx+bUt8U01eTXROUV9gfGB5ND1tMGBEcChhYC5EQyRDWzI6UiZDTjN7YVJmMWteKShqWlFCXy80S1E3PXAhdS5RQ3shRzZlQylRaVh5JHsia1hyI1ttKUEkbXl3dS5jXkMiTlE1''@;'; put 'put ''OGhyIyZQaUJiTDw2U2BeTXl8UWxIQnMyNHwuM0whfG1ZZFN2b3V3d3poOXw7bn4vUExHYWhpTS9ESGRTVDkvZ1c9JWY3LF9TajRmMH1uSE14QV1CdHR+TVNRfWckZSVAWl57WVRIWT08U0EpKWF2JXVjXXd5ejZgIm46RmcyU3ArYSUzKCNqQE94Ml8yYCMuIzg5cllZMl1gcmpDfXdDeFZwVXpE''@;'; put 'put ''fU01IWZnODlqZ0RKSzMpZX5eKSNoPCUhfiRBS18jI2lLIkQpJjB4IlIkPG99RlBJdXcxQ2FwU2dINW9ROFJ7OnIoVURCaEBAP2YiMUcsUVBkU1deOSY/d0d9ZT1rbTMzQThzJjM2TVRCOTJ3NCJUVWloQGV3fmN9Lj41KW5aTVZ8NUYlOT43LkkvWS91TmciWSUmVEI0RVBbTz95Q2hTLmwzOUAp''@;'; put 'put ''JHQ/X11SKVQ9fXViW0ZhMW51Uk1xeE8hJktpMHNSLHUlcSFIMVRzNzJ3W3dyIzxNLkZKWXMjTz8vTDt7L3EyLnIyI0s4TkkhKiUiYW0oK0ljW2o+eD1IX0VfJCNnOGRpPldhRHMuMy4icTllQGBITFA/Kn5vUHNNZE5VRWJrNUZic1t2Q3dmRTlXSkVxOTQ4Q0g8fkw/Z2lZO0xeWVRNQjd3eUBn''@;'; put 'put ''JTZ0KDJkek9eRnI0a0IsX1VHQFF4dFtofE5BK0N5U1ZqJm9KaWY4NVFZOGJgKmg5dS5McUFhUEVeeTUxWSYmOjBoV2lAJmt0MzdudmlMc1VnKkN6TjdfNmE+fCElPVQ4NlV+PV0pPF5HS21aP09ISDtaZiYsMEBpMVk0N0BPcW55XjE0YEJmOWVHazBKWnQxcSY/cShsZWZdQ2NkUyFORTxgKl1G''@;'; put 'put ''UTM/KFs7WzkqNHJAd3MvbXM3PU0qXWguZCgpQm42YEBWd0Z6XyVjOUkkLEcmUVpPQnFTbExROnltVHchfi9UQUx6bzRyKEtdZ15CLlJ1ciE6XnZASEpsOmlyTzZIPUN9ZSRDMG1QdSMiUX5IRF44ODlQQEc8WiZkSlRAIT9wUEdMLiVjMFA5SnllRDlAIj5oVWRJQlNlIWMwPk5KN0NGY1RNYW19''@;'; put 'put ''OyVhJUBEPSI+e348aTF5blJCOUAxMTBfLl8ub1tsPV9yIjEpNS9uPi84UjMrUnRxZk1iK3FlO3oyUF0jfDVhP0N+PmRCS1ZWPndKdEdUYEtFVXhGfkksdG5sOzRXQ1RJNj5UYlkkYVldVC83WlVWZ1kqPjBjLnZqKCRHekRoOiZFaFBJPV1RQylvS0xCYU5sNlA3d0trbCR1ZG91Pl1Gc01NN0hY''@;'; put 'put ''YURTPjtgZGVKan4oWCVHOi4qdDJLfEImejJdZCJ1K2QxdWxfdzpuMFVCYFlZIURpRGZ2T2M6QThVTUIlOWs0UTRnQituMC9HUXtdRHczZDBrMCJLZkxZPS4uM3E5KlNVdVV8dGFEIkxUR2Y0PzMvbSJpLDI5IUs8SXJqTT5pOnV4OFJzRitmVTwvZ0VaI1UrfCY+TkJJIzcjRV5eQjEuSk49PWJ2''@;'; put 'put ''a0lKMDRtZl88VnFQR3xPMTduMShoVzVsfiIiUyZgMD1sIjtiRDgxZkhVX01mYW5ra01SdkQvdCUleGB9KGZhVE0hM2Z+cEI5MXlARTlgJSFiNFIzRi9jRClXL2kzbzQ8SUwyc0YvVUQ1d090WnVxJUlLMjVGNWgrPmQ6QGUhd15SVk91ZFo3JD43JXgmPnMhTTdfTWNnViZhfjk0Z08kTlNHZi9j''@;'; put 'put ''U2l5OiFWSnImey5nN2cqfWRUaGAwcFFncmZnJWRSRSZkL2xdbXJRaGBHSz9XWjg6Zy5KOWdPUGByOUZiKGlCMjByZGlAWDQiZmNYZF0lIkEuWU5gJEJUODhdVU9+X1dHanxmMDlSQSxRRGJKODYrT0RfTVoyN0FnInwpaXFNXVV9KEh7XUAvdzRAXVZmR3VVdn4sW3psNGlLQjx3SWFoSl1sOUM8''@;'; put 'put ''JCY+M2pVM31HZFJ+IXBJPyl5YSFxUiFVV0hQWUV3ZU0jKDQ7RDs3dC5gMzYjRmxNISx2dTdnLDkoOkxlMW1DT0J2NGArbz47KSosLjYqeHYqRlQhUGR5b3Vndz9+S0AmYD4qPUpnOCJEXTIreCQ3YXNYMTo1SWshWSsmOiM5I25fWWIldGRzPGxUXShHb3R8d0smRWB8YjpMP1FKOHo6NnFlbG8p''@;'; put 'put ''LnVbb31rbmpnNER6QCR1QTJXRitgLGZSI0E7Vl1uIWBXMihaX1p7QlswNVk8diJEV3YufHdGQTVaaSghVmBkYjJPYkdJQnJwPCtxUX1uLjRPPGtReFtdVGA5ZmdxRihlOTpqL1QqY3lwdCo6YFFzSTlXeSUobHVPQ304MUtKUj9lZ0pQREpKdEhFKjJBZW93dV1qUHFFbzBLTH0we3lqU1p6UHty''@;'; put 'put ''Q0VwS184Rl1bMDkwfUtDWlVyZTg9TnskZ3Eva29kY0hlPEpxUj0oRFRiO3g2R0xDNWdHPi8wTV5+PT9jN1pGYGxeKHhPZVNdfUUwbGBeMGQkM3VuTzZnI0MzNUJWSV5nOjl4ak90UjFiZmBJVU9oQVJjPTUjQk0jbEtkZlIqV3lCYUY6S2cmYjp+TkN9I19bbWlJNUE0Zz5IP3p3Mj5WXzMmZkx0''@;'; put 'put ''YGZqUSJeLER8YlA+XWkxfDBlUFtjK2RbcDgyT1FgUEwoM0EyaiIvQCQjYXNYWWppWmhHViZ3ZmxZZTNCOEB8VTd6eVh9KndPND49c1ZhNi5CWiJ7KklfXT1eZiNmakN2OVJWc0k9QF4qYW5maDQrTTt5anApLndQQWZSclIleHB4YUhmTEU2TEZmSkddR1VFaiYjZX5qTnNDV3MxT0VySyw8dFd0''@;'; put 'put ''cHM1KlNTPDNxQ3hHe29dOEl7V35iRipCeC52WWt9anVrZnB6Rn0yWix1JV5HIyt5WCRNaUcrJjcoNX1FKG06W216cXFEfXdxUUR+dk5BVWUyJWAzIXUrb2x1SCFmeD1qXlhRdzkxQkJ9VUxsckMpQkspdF17Qko1Zi43NXQ3PX1LfipgM0RvenNlUiNSN1d3dixEVD0pTF59US9tSCwmP2V4aH1g''@;'; put 'put ''RWl4VF0qJlAwe2hMSm9tXj9FbW5VZklHTzk7Zj49U3AyWV8rPjUpSWAvPyRmW1hkTDB3a2t8TjUwO3c1eWhQKnxHSj1VKyZ1d3NtMTEpTG9bJmZ1YjA3X09XRm9bX3s5LGIkPEJWcTp+JDE1X2dCNXVoe0NzL2g9emd9diRRaUdNUFQ9cWosM0RZLmcicnVGdnVxd0k8PjBBbzwzdGRfV1N8KHMy''@;'; put 'put ''WCk3ZntmQ3s/QXtJPkUrdiNnJUB6JnRAU0xCWjh5KS9IcVFqb2V3KHVKKGNrYX40cygvJGZyW3RmXXM9IV1uQFV7NixDZVA3Ojd1NXdYaHVOXnFhP3tSSH1tXjJ1XnBkWDo7RTVmN3x9b3tzQSJiczQlbnU/RzUqdlhqK35CX1VrNz46T2tlN1EvLkEjRzpWcD0rKzROQnIvYitVQndYQHJ3Z2lO''@;'; put 'put ''UCxxO1A4fVF0VD9HcHJyL0d9MF1VYzYocERDO11sL0dJS2VXMj5PfiRvPUB4MyVHcEZgfSppcipYUlh8Q2RZZHRHTyomaEZgUjk2PlhuPFcvOEtZb2smWl4lUFEoeTpSYCo8Z0ZtQT5ld294LGBqby99QDw2ZCNFazwkKmhjc2RzRXxPMUl1Yjlea29dWlhqR3F2TSlxWH4jO05SM31BUX5aI3cm''@;'; put 'put ''dlc/fHxiNix9TGRFZVhfIXdrPnNyTjEqbGZhNkcmWW5jOytRRFt+PFcuSVpEdEMoP3hGKTBMNDkhTW56ZHdpKEReaEVhVzN+eWEkfktMe3M1SFQqRV9GclNLS3A+WT9rNU4jeF5lcGU8Wz00RkU2fDshK0xVVzdXPiwlMENePz9sXXN8V1lfeWMhYnZ8fm5rWW9DdFs3WS9UWUA/LyN3Wy9qRCs+''@;'; put 'put ''KTBCe2Z8V15jdVZVRE9NLyt+InRGZlBGNlIrUVV5O0V0fVRVXnFFSXBkbVpQPGA1RUgva2pUWlEiQjM8U3ZHe11ZaGNBP2k7MDY2PGcqP3xQV1pte0dpbyZGYzhgLmcrPkI4I1AlSWppSXE1VXt1dnc2Y3p7PUcwP1Y8KHJAUG1DZ05ye0x8bCFdJjFLQ1lmdCZxXV5ZOy8vJDwjcFVHNHMsQDh2''@;'; put 'put ''bTNFfGFFSXYpVSpjTWQlbjk3fU8pdD95Jj8kKn0qZ31KWmJBYS5tYyErbn1oSWNMLCo1Ozx+VmZbImIjQm03dlN+LE45T3ZobyRdVFN6QywxTj89JCR1a24xRnd+bDY7RylNPEcySyRDbmV0Kjh9UHQzRFY+R0MuXzhuX2t3YFl3SjZoeFF0d3wpRyFdUFA9fF9CQldSMzcjR2h0R240SkpWNjNY''@;'; put 'put ''czFoamhAJDJKNyV0KkxzO3E3OT16ajFeTDkyamVeXVk8dmRwJlh+fXtERypiRXk/ajY7fld7e35Ud2p+Y0Y1UEtZNDkwYGQ1WmB9Q04reFdLYykpU1Q1JjJ+JXZYKX40T1QqfCVSUWIqJDFXbU1UenJGYXI9RjQhRHtQKFgvXWAmO2wyQ0NfNVdTLlRTXjBnIzBbN3JBO3dyLnZxeUo+SkVQOSNV''@;'; put 'put ''Q0ZfMDFKMHBFZnRVKnFkSTI1JVVGV1U3Tz0iN0J6a3B6XXJLREgufXtOLHYkInddcUYlQE10ZkJqXVk5PyxOcTtbQTU6OVdwaGd4bl9lMVtFeChuVXk3UGpgUjUzKm0waC8uR2JwNTUvPSI4Ml9hO0k/YGNOTj4lVEpYSFRNWWhqJSZAeS5qLiw8VTVxXmR9ZllFOlpoanxFX0tDWzFWQFhHVDJD''@;'; put 'put ''ZWxJTiVwTjRNZk57S2kmJVp4QX4ha0ZmTTRSVjFSKnxbPHFSeVRzaT0/Pm1AJkcsSlVoTWxJJWkhXyhkTGQ/RUZyeG15PV9Re01MJVU8Ul57SXkpQjVkd1VxOC90cUNVQCRqRjEvN0UsW2VXbWg6UmR5bmk+aGdnNlkvd29+bD9XZVciay9CfFsoSWNVSzs7RCFhYGRKN1ArTkI3Wj5NWjYpbE11''@;'; put 'put ''SG5xalM3cV0mWiE9cGkwbWl0dyxQe2VicEo5WD9MRWUyLm88I0JBMVM0PHckQGolbkwlSUcvZzghTTl6eCFSRTlFLi5VIzo9ZUNtMT81dlpVcWI7bClhIjlML3oyRXtlUStgUTpzX2QwelcpV3RFKGF+N2heVFV4YnB7XlIlTWpfP1k1JEdecGIrT3ZfM3V9MHY0V3g2X0l1WjxPJjBpVFBkb0Bm''@;'; put 'put ''Q0FeNDhLcCphflNzLnhxKy49Pzl6VHFfPSRxdCJ4Ult7QnNRS19DRmhIUUMucFIrIXpnNUZyRlBbJUZaNzkwRD1IfUpgT3tXN05tdTdsR0Z5Y0gsQkEzQ3RCd01lNHRUTX1dMmh9SlFxXytZTnxnM3IpKmhARER8SGNsTDEwSjN7OS9YOFcqfklycHE0M0JTcERRO0JtdzY+OjNLSWRxZVA1cyxM''@;'; put 'put ''W0lUXlhBeXdaRW1pQ0dWJV1LQlRebUEsN1ZGVWR0YzIhLjB6ZUUqQ15udHhpYnF8VUwye3RecXU1X0UpLGs0YV1QYmBDfSh5cSkjdzF3bTMkTS81VThXaEI+Jm09bn1BJH1VQUBnZ1l2WnVTe0IuWmIldWJmamFveVFGJFZZU3lzSnZQQyJDdnJ7XWRWY1pJUDNvZ3VxVF5WfTZmZmlTUXQ1SDc5''@;'; put 'put ''Uj8jT3BdKHh+OE0xUzc2UWtFQFlwTGpxJGgiSEomOjJKKEZJVnlaP1JVQUxKMmtnKkhDLiJrJjp1aHoxa0lYeF1IY2xtWHxHcTUmbm9nTGhxM2dSJWx5KyI0fiRDcSlgaTlDJSUjKnNaPjw3L1ttKnVYPEg/bDZ3UzFsVE8sLkgpM3FDUzcsejVbI09DLlFCPCU1WC86XyZuTCFVW181UnhSIWlb''@;'; put 'put ''RVEhMXw2MGxwODY7OzVCOGg9UiQ4O3ZwPkxzWVVOO1BpZWZ+TkdEU1Y6bFpfR25HWGBgbj1qRl8+OEQwV0hSQmMzbSNNeyVIIXdDXzA0eHkuTyokaWpPIXIrbltGV2RBYm12RXVqRGVPeld9P2IlOFZuNFtAfUBNZTUkR3dqKTtqRjpbISI5L2hIPz4hJEVJS1RsYHwhWHM+Uz5QYUxJNEhLdWBZ''@;'; put 'put ''XmJxTnsrWjhdZFJOXVJ8eCxoRjEqTSleLGJJM35xN24iY2YjeyVRfk1dKFZLakxGVzwkSVZ9T2txOV1ucklwSmR7bjY4aDF0fEh7RlcwMFNyPTRKKFE7PEkvVXZ4SDpIWjJVYmp6Knt1NS9tdTtvJFpvSSsseF0+Xm5DfVtjbTVTJTtNVnlHR21XeWNgVEZGO1REI2pzPiM5MykxTCNXe3dQJTI/''@;'; put 'put ''NDxCR1MxJHF3MWUiI00mOGh5cWI8ZCVFRzRxNHc1bFI9TjZLaWFzRnI3cDJNWGF1InlINEFnRDEuOSM3dTRgS1tMfHxPNS9iV1BaTVhZYiVNYTxHJCZWT2U4TFc1dklkfWNbUzU7LjlsRTRxK0E0NlV6W19kN2E+b1htYl9lPElteDV7WUApeSFyTy5ud2d9NiZ+PiNFMCk2PzFgKlEscDZZfX0p''@;'; put 'put ''Y3YlZHRnVXtUMlVSODxAQE1iWGMsSXs7UFhySHcmOyJ2aCtKeV48RFRIY0sqUkhBN1J7ISluc3NnZG9qfVR6Pl5LMEpKaSNXOFlRPD56MDx9I3ZnN3RWaUt3bUdaM3pXQGxUZ0Q4PDcxKWZ4bDVCTihLdzZJQ3x0OmsmNEBJZitaYX45dzVefk5beldEVGlhejBWWmtNLjlTTHVHPy8jSUhwIy5+''@;'; put 'put ''dStDWElrcVFieEtAK0k+az5TcG04Lk1iNCY2SEYmW3ZqYG53LCUzRnpLfiVCNDEsKXR2aWMmZWhDfUFncCVXJjVVTWAmaERHS1I3QGw2UkpBND51b1hdMXwyNDhOdV9iN0RRKlJKMD1ALE0yZkVOW31fdSZVdUI6fl5hZ1FKPzUoIytCVGNnZ1NgRyY2fmYwXzM6PE15dUIsSldAbzF3bmNPZ1k3''@;'; put 'put ''IkxPTTl8InpLYW9eQn5IazlbdWAraGFDeloyaTdXSVM4Xzg+b1QhJCg6VCpmIWhMPyMmSk9UZF5LOG1EfXN9YVBieGxSalVPcmhzXmhISiZGXnlIREtYcjpLeDh0ITdrUChxNmhLRU57MS5WVVV+PWVXbE9qYnFgITpkR3B5aTMrNV11P29SMDp3L2txOjF3WygpVjt8bTJldTk/VG8mPj5Ea2Ek''@;'; put 'put ''LD0kQEtFdywpSHBGYWxFIlNGSTt2KXNHc1BKfTwoOCJEOGR8e0ZrVXNvSW5HSW9xbHxLUCFoRmFFK3xOISVaOk57bnd5P3d8NXNkTUJUNStvLEdLWFVtI14qNV5BJVRZYkxxczp4WldpSiguNUcseFNHYGt8MUkibEB6O3xPI3JjYUVjPSxpfV0pdWFHbnFjT0lZK3dwYmxdVTtYVW00K3dXSTJY''@;'; put 'put ''fDVaQFZVblMjKGNmMiRfV2NCLzNQNV9UOklGJGZwd04ieldxN3dJb31TQFlfQSk9cGk3dj86WFEudnIifDZrTEM5IV4jemRiUVZvPE90TDh2NUgrSD56UFNycGluQFFAZjdDXn08azw5TVZoRyJecz0+Wi8mbzFZTEQ8UDJNYU4scnp5U3hmejV2bzVKMGM6OmAmeUgvNS5XN3pUR246JklLN1lk''@;'; put 'put ''YmNAfCV6emkvJT94Zj17UzFPWmQvRzdTS1pkNn1dVmZQSXR6OEx7Un1nVHxBPmNeSGdeNHc2T2dZTVdMMmRHTk5Sck8ldmhbV1NkbWJ0LnNLW3FISllKdj4rXiJZS09AZHZJOzsiU3pxcy4jUTBJfFlsKzU0NTBeQldWX1cpYipqN3d6d30kfXkldF98RUdeKkVMQzRuPHB4YypiWkFnaGZTIXVL''@;'; put 'put ''RmFZIztJS30qXks1NDxQYmo2XT9KX3FufFs9RXIlL2dDRT87KUtmN2RqXS5YaShtW0MsaXt1ZWBeZiEiNipoaThWQGt7L1NVeXoscVRzKy5hd3JCTHFPSUJqQl42e3h1Xk4qaHssK1QmXnd0ZnhQakFSSDY0cnBBQzhuXnpfZ1NfN2Fbb2R5ZldFZFVMXjxlaSQ2OTRaLyhyUm95KXgxQEdZYisy''@;'; put 'put ''TjR3K3pXP1NnfldqLHtMVClBOlRIMkQ+aTk2XTZeUDZFTF9GMi8xLyxEeG1PJF4/aiE0NXJ9QGZGb1p0Q1hyKnh0fjVyQmVTTjdlTVtZOHRJXSFDTzN5MjhjZV9AMUdMXXQucjwwaD58NU9UKTBmWTtFdjM1ejhJIlJ6UldtSUlVdHRNJlQveH4uSGt6VnhJRHJ0WXdbOnVWR2IjSnxFSC9rJXNz''@;'; put 'put ''VWFFK3BTTFAhIStaJnVuPnluVl9Tdil0YUc6OiN6UWJ8TkRpJiVnSiZWMjU8I208dW5PVWVRPSpFWl9hdGpqcih2RFVkMj1WSVhAKFo+IXdSNF06dFRvc1JqVFl0T0NsdlNhbk58Sz1xbn1+aG5aY2JkQ21KKCI3PDcvaTpxKlApWl9MOzw8XkdtRV9iN31TIzYleD42Z34sZ0wpS1cySGJ2OSIw''@;'; put 'put ''bS48RUwkbmEmS1g1X1s3bDRxUDYjWzE+NEJPfSghR1VXRzN5NnRoQGN6KTtRXmYlYElsbGVbJUVTUEZ1MnhLMnY1I1klcG5WMjFiY29RLC9USm15V1VAV0RuUjZMXXZTcj8icClnMk9ITms9X2JgMkgvdS59OW9CKjEsTThBLiJKNHswfXZrcjl3SS44NkQrUlg7VFA4fixfW0J9L2F1cy9+a3Mk''@;'; put 'put ''KT8rRHY0Qnd3O1l8LFs7LyxGQV5jOC9FUTkhPiY4NV1wLjMuOH5ROUdnTz4+XU49bkp4e19NQ2MsTUp8dFRmVyhDPTtVazN8PkZ6TzQlWCVNZ0NpNWxHeCgrYyldTihCcSg/fSR2cCtJL1NRTzM2V246N1U4PW8iQyh4XUhrL1g+cVZ9MFhjXm15V1RSQTE9TV4xKzZXNGFxKmw4UlpvJm1rY0ky''@;'; put 'put ''LityYVQ0NCNrMyU6Q3UuXmR7SyRDUEk3e218Lkd8MzdlYXldKUkvajRuayp9KmxZMjVid3tCa3MpbHl2R3F9b0lCRSY+STtMZnxWXzdoXVtbRyQlNyZAZVBJcjhFaTRsWDA+ZzI8S0FnbHt+OUJXKU9CJF8uKExnclk4V0pzKTpiUV9SUEx7WjFiKGoqIVVWL1BpYGw+YlhrYG1CJntnNTtnIWpd''@;'; put 'put ''SUA4OGYmZy5TPH58XTVDYj1Pb09UQENqKmw9YHZdPS5fREJxLyg4WUQuRVA7NVpTdFk1V2dwWWRpJEdTMWcsTC95TlQ3ajU3ZURvKWNIMEtvalAyZHtGSUEuaig9OzVKQmM0LCljYnNJNyRyeXcuayF0MmFGPDBlRzxYOig4Q1BOcVY3N3FpKS5wcUNgSnpISGZ8TDdRM2sjLDY6c3REOE1CZn1q''@;'; put 'put ''KCYpT21GZitVO18jezRIND8sXkY9KWxpQFhMZmNoS1VhUGE8QUdAKjQoeXY0fkNmMi5CS0B8SV9kN2o0PTJvYzorQGhLPXtQZiV9YzZyXSJydHF7NG84QGx4WlA4fk1wbGV6VD1eZUk4e0twZWZ+STNUS2F1IzB9QGAuY0hSLE9mdSFLXkVfOUg9fmRsSF5GcDtWazI2TWZ6ciN7WT0vbjRAW04w''@;'; put 'put ''Q0NpPTlGLjdeP3YjN1lrRFtiRGpuMixodD9LKzdDMFZiQyh8P3NEI3RHMGVTd1VDaFp8fFhIZCFQRHRVbzhGY1h9Sk5qK0g1VkJvPmokNnEmQmB9SCNJM1sjazJWL29gJl49OlREdj5DQ0t4ZjFsZyZxeUJGTj07SX5sOVVUPDZZTjs0V0B4Izk6USFiOSs9Wys0enRoMlAlNjF3djtNdmhuQUhU''@;'; put 'put ''NHdSQ2U/ayRdfntWej1gN3hMJk9FKjVgZCR9QXspIT9qc1MhImtHQUcxTVNieFpVJjteUE5VPWh2TGRIM3Y1fWlpM2lDc15SbHF2NTdqayJXfTU/S24jd2psOHZyXW9EcTYzRTsqW1lTOUpwbiglOi80aH1xZGIyMWJTSEw4ZmRNbnYqY0N+OE0+W2IkNjNxTVUiaEglSCI/VW0hVXJbYnJffTFi''@;'; put 'put ''RGwsMWQqamtNSSRRWUlIZzJeK2lJW1hIdWdlM0FIT301aUw9MyssKFt5QipIfWIiNUEyWkJjdEtTY3ooLlk4TEB2ZEtJamN5RDJBLjwrUUZGWlE5MyZWbCV7U3ZUfilTMH0vNjc2P3o6ZXNwKkZ5cyNEeCYkJWRHYHU6RGFMYVV+W01sI3U0Pk41U3xxQXA3cD8iKD5jTnI3N1hrSkQuZ0tUS2o8''@;'; put 'put ''RHFYbGQ0cVRKdV53WSt3Nk4jbVBMQHFIW21MXlZnZSx1ZCsicllPUlpOU2FANFBgNkowViFGLk1yVGNFY1laR1h9WVYwa2M1KEw0WU5zYSwqbFd8XSVzKSwxMi5TYkpCYls9OVlPNFUySDFKVjMzfWFTNH01amRwZFBXTz0/Wz8od1dTeCpMPk95b1Qhbl48NHtyN3x0ZVM7cSppOUA7RTpMcDt1''@;'; put 'put ''TVIzMlJrMyVqemV9Z3VuLm9bc3Z5Ui81K09AcWtbNmFDSF8/N2QwO2R+OnlZQn03P2B4dlI1R2cxVjNDSiVkTjEkX2lVL18wYHBTI3QsdS5gISY2Jk57MFA4QG4jbUIySz5wfmVjW3N0UUFpZENQVncpX0BfQjBIKDxqcihHTikzOl9SKyZPam95XmtdV0RTMlNlUCpdZE1dZDhGcy4/VkFyeypW''@;'; put 'put ''cDZDM3czbFFSXlhXKlhxcDVKKSYqSE40UVplZ3dXQmZXOU5paG40dCZ2PEx5Pn4zKUppIjdaIztiM1YifiVnWzFYL0ImQSZBSXp+Izw9N1dmNTZURjJMRF5zO1leXyp8KWpkVSh1azA+Q3RVRmExb2N+PklZI045ZHJsaGZybnRwc0UzUTg3SCwpRFRMSzVFYHx0X216dShsT1RrST9XTGVCSG4i''@;'; put 'put ''NC92V1A4dTF7V3FGYDpkOjNUdX4mN1ZxaW9+M0JKbURgMTJubDJWcjI4YEdiVktvR35kQF5OdyhtPURlZ2NBb2tOZ0hPNnBUYGV7Skh8RyFXY3d1XXV7SFVzI0UmWDdjMjowbT03eTV6XiF1dyxxWnw3S2cvNmM2SStBO0toM1pdVFhAaVpMKnBMV2U8JkEpVFFeckw1aClaOlBdUnRYMnM5XWE+''@;'; put 'put ''KEk4RFlIJmR0M0kzQ3s1NjZwVSJSKmguZ0RvXmhxZE1JNXhBZ2lbQ28hMjxoP290cz9uVFowfXtKVUUoPDJiaCJRcytROSw9XmhiV3wsOVVUKSo0fUwkWFI5YENdIlg7JWdeUWJzNy9WaFZNXUF6JF5HVWBHbn5zKlljez09bFV9LyZzVW8/PGFaU0tRdTVIUSpteWRdNmVWfGREOz5fMis0VlIk''@;'; put 'put ''LkQqd0FZMWExQnBPRDxxJkgjZm5BPVhWXkVePjpFdXcwPWwrPVM7JX4uRz5vclFJfGh6MWt5Vz13Z3V0Xl55Nks8cCk+QmBva2c2PmQvTytHZjttZ2swfFdNbG9YKjNTd3xWQ282XSQkOnxmKjklOTZ4O0JTaSpLQ3ZlPjZlYlhYIk1XIkJIKHtbdnRhJDIpQXcucEkhO0M+RDEzPndaQkZMfkwh''@;'; put 'put ''U0hmLzppX2Emem9NeChdIkR5KWYzcVtgcGVwJX4qSzI4T0ZgaG5ia3R3UygwP1c5SU1nX09nZHZCUFttPT5vckhOZkNUbXx1OyR1Wl9OW3BKJVJUMThqXkc1TlpVZ2FTXUNzajI7d0VzR0lCPEUuYnBfcSM3e2tOWSRRcF97M3FyfVVgUio3ImRCaHE1Tk0uSzJHfShdVyV3K341MnFkWXZWfUtG''@;'; put 'put ''S3grblBEMD5gcn1CZG07KjBnakBldTdLcHEzJmQmfkMjezgzeGMmbS8kZEs0M2NUSFlOKWxba0JLXm9IVj16SXh9eCxARHt0SzMoZCJFR0VYbWU4JVYyb0dDK0BubkoyOWVnU0xrW117V3E4Q1FfKkZffHNDSDxINGd7a0RBXWV0dkNBTitpbTZfZ3skS05iRE9nb2AsV0NGT2cpZmB6SFoxVExE''@;'; put 'put ''ZFV6cDp4XT5eWip2aVJzaW08UGZeYUJqelt1Vl1QUG8pPitPckdNUHh7ezskenxieyw2MX5Zaml3NXNzREw4e2tlMHt2bThPLFtMIlFfcDh7WW9SYH1dWE9LYVBNUjQpUGJ4NHR3XV5OYCR+PFZeVSZGRCMmeFkjS0w+bjFsM3t7fHZWY281Sn5PVSJVNCV+JW1NOTgqWTI9WjFbai8sMSltZTtq''@;'; put 'put ''IjpmcE1jYTJKRmltPF9JMkNlXWJ7Tlo5N0UoWCJlZDhKOTkpOyVOTzcjdmx4WkYvYUIua0dmTnYlZThmIT0mSHUhRjZZVGlIZFUpa1VkOi5sdyxQcDlxZjhRQldBUExtW1QjIjVDInVhJjl5P1hpMSs3ZTNzRX40bGRZcj9SeV9GWC82Ujh7UytWQDMqVWA7Wz5tNGk3NXgjMEZuTkQpU3JYUlBU''@;'; put 'put ''TkQzOioqNiUvW0lieURzPm4xKyY5WClIalMvI1dkUX0/XmNzfkhSNmg+e1YjK2Q8XVVwMVpFWUM9YkRMLm1DSUM4OjZiOGljcGMvdDVgTEpKbGkyJmlPNVQmIVlkLmNsMyFZc3N6SSh2cDh8NihaZzVaSWA1X0c9X34hdXRPdz9yMTAvPyp4XmMoV0VkSz9SdUF4fmNURTAsKHc2UmJMSjo6NSNK''@;'; put 'put ''cXJNR09AdCowO3hNIiUqOCY0TDFHciVLay41NE5tS2Vgc1QuZDVMLkY9SU46YnQqVVs1PEEifVl0TyMwdClVSGRmJU9CQ01vTCU4W2RtM2FHMWxgbyViSytkbTEjP3B5dH54VWs8ZmZHZSlPaH53dzFAMXR+JXBANVh3cXVxTHN8RE1EX3ZmUj83PUhhZy40TWlWaVFtTVN7RGtxVGdaNDdPeDo2''@;'; put 'put ''fl57Mn13TV80L0xKdF0rNjZIdXFlfT4lZSYqalY7SE1pbGlwU3B1dWokTU1TV09mfF5NI0NrbkxHRC5rKzBJR15pS3VwT01DNVI2czNmUklLOywwRVd9PUxrcmYyX1dfd3lnXUdZUSkmcTA6Ik0pYXBoKHVtKjVNJl1RQjdrbmFFSEM0Y1AkQ087aDdjL146cmk3RGRoaHt5MDdlZXRWbShpSjYx''@;'; put 'put ''Ll1ORFh2MHZeRSVnIUdtbXlDRm9bOVdzZVFIUktFZy9FNHNUP1h9eSJ3VXdSYylCUUZNaktIYC5BJV4jOEZXYF9PeVJUMkRKaG03XlokXyg8cGReOH5jK2RENCt0byJjbH5GWlpNZENrVzZpXnFNPlhVR3pDRXU2U01ZRUJVXS9LIzhEQHx4XjshdDl7ZFt2NWM/KlFhLiZoRT8rUFVrUHVGJX44''@;'; put 'put ''QmtnWFpsKHJMclpue0p3OVJjInIhRGwuanAsP0NLaCEocVFWIXthX2AiPjluWXpKTiU4amYkXVBHYlc1RTpdbm0kP2pSVWZMMjBCa0IvYmNMNjZPZ0BSdDlfajppR2M2U2BSUHhUYT00ZkhRX3Q+by50UmVtTDc6LDIzN01BKEVWUXNDR08+XT4zPC5+TDMyMV47V1tJUGVeXn5+am5LZWJ5SVk5''@;'; put 'put ''WDgibkxmfWNNajdPTHRQSUh9OWslRlRnbTIyeXN4SGtBKUs6c0BrVCpzITImZVQxcW1KXzU5Mn5XQlJJQC47TSNrT0NfWCokNmJGYHl8XUYlbCR3Izk5fG5xdCMxTDdPLjZeaXwkWU1UTUR6dFlUbCF3RjtWdGQyKWF1WTEqKmY1KklWRWIvRHFSQCl1S1luITVKMGk4aEM7IzwvZUVeUHRkUH1l''@;'; put 'put ''eHJuaHNTRj5SJHt8el9eVTF9V2FAd1dFZUxANDpvJiE/QFF4VmchIn1QQ01RMzNuQ3UoS0I9TWZDNFJjVF9hZVU1dzcvV3gmJlptVVZMKj5oW0Y5ZWBsUXcralA4QVdyVSNAL1NYLDNIKX5GXSslODwrJGpjSkB9NC45RX1aUHgpIX5wRXV1eGs5RFc5Oy8lSy5VPz1SMW19bVdQM2p4ODJMTmI8''@;'; put 'put ''dnw0UGJkQEhZc2NofW42eUkxRCNNJDUjdmQuUjpnc116eTBQMU5kUnEyYlBqbEg/VnNHVFhTR15PSmpvKDZpOFouKilMRkBwQy9panMpZlNLOCt1XX11eDVCL09XZSNkNEtaSTBuZSEkWFZXVlsuIUg2R0pBbzZrKU5FWnRmSE44dSZuLj9XVmV5blBIazRgLl4xJHZLQXVoZXh+QC5bc0peZ2w7''@;'; put 'put ''Qm91TVcqfXFEN1pSXndjRlZ7KyVTfCNeTjlAcT5xTkl8V15xVWdoNk4seGZdMThDYm5qKSkhfnk8ZFF3dWlPPXNCTUtFSk1CMj12dHY9L3tOc30qIVchOlkkRm5uXl5nRTQmS25fbG51UEoiSkRPN2dZTitaRj1xayMvLn5kUUhHd2IiTjFSa2t3KSJdNXIzWl5vUWdjWnNQIjVxT2IwbFRJaGNo''@;'; put 'put ''cm5WRn1lOD9gLEF4Y3c8blE/QmAyczJKd28yXV9FSzp9JW5IeWp9JSxvKXRAUGx7ZXdaKlM+OFJtN3pCJlZ7Q25wWXpaIyEmIVUxdSJXS29jT15HYXpRdncrWzROPCNRVVJAV2Y3W0BxRy5ITUwjY1FZXkcjRGZkcmFtcXlKT1dWe2tKZ0c+eCNuTXF5Il1hQlF+dHs2LioqUkJvTTt4fSFifT1x''@;'; put 'put ''fm1ydDk8Lkh2WGlsMzVJM146ZHRzMEciSGNieGVCSE53NysuKCxPQmd+K15VX05Qa3ozQWBPbn0zV2YhQmBHUl9RZEM4cUliO1lEUjgmI3M2eXFwXW1hMEtfckY4VnVnYHc9KDZdZk9oQH54M3kqSS9DeD5XeHF3P2lkZVRRJGIyc3t4Snd3MVs0bVlffDtRZE0sKCR0JHU1T2NJU0NIYHxIVH50''@;'; put 'put ''MjEoRWhUSj9rWl5ETWFmSjUhYVV1QmV8SS5JPjNMMUt7S3RVImF2djRKN0Ilb1VpZlB8aW1iWHZ0c0Z+QDA2SVY+e1AxRU92R0JGQDNKN3tWZG4+Oz5RP3AsZnBCbzsqbnIqPDBZazU4V2lIS2ZwWzp9aUBdUXk0P1V8cFFWWVpmfjg7KyZAU0RZYWIvUVdqQno6eit1aWhyWTw7Si4iSDo4YHgj''@;'; put 'put ''MGZwTlhDW3lqMzFPb1NWQSp1IyVFfE1+TXlNJjZRPU1rfDJONiY/PEcmPlozOS4wenlUTW1ldmcwdE1iTWNhIkMhb1dJQ3FgQ0gjfTV3NlBLfCo5MDomdXp2M1ZMcXMlbUBAa3lHdDdTfl9aQngpfX5OVXUqRldCbyp9I0RGKSRmRCZ6cDU3VSUpI1B0TFI8RGZAKCo5dSNTbkk/PEYkNzd9Wy5o''@;'; put 'put ''PkpnLi8hWiZfSnpbMGY2bndHWjowIUojfmorPGZRXk1DME9CTTFIIn4zXz89YkhTMUA1OEYzSyIsdiZtYVFsMC9FaHxYMH0+RzN6Sy5aW1gpdVN7KCJBZ2pOU3NCPFg8KWlgQDBHQSFOWDQ/VFNYRz4ifDRielg4VW8+cHd7TlRzMGs1Z3Bne3g0XTJqXkMyPnBTLzZHa3pUbGsvJmx+Q01+Wn5+''@;'; put 'put ''MW9TTHo2MG1ZOippbD83a3MiYCY9OzVpMiN6VV1sS1sobykhcXx0Z15+JGhzRHdVIi5Qa2tdP0VpSUskXV5tNW9RKjUmdUNnNjFlfUdZPyY1K3NtUys8cjhbY2FXNk5ePz5LTjFgZW5IfkB1QEQscWclPkIjSHMpZFFfbWkqQUpXPGQiOzkyWzBIX3ZBI3hvdiFyPEQqK31JOTgsdUQkOVVAYENH''@;'; put 'put ''U2BFPzJXUy9zfWZZVERmbT0/LEBjTi5mXiFRI1J0Z04lV1MqY1d5JXRYK25YLG1hPzx5JkV9N09gQHhiKDI7O0IpVFhiZjFMQXkkQGJIeHYhW1M7d1ZWYmZ8TiZpZU0iSjRXc0lqIm10PyRLQWF6QmBofD09OD9xOkkrdXxqZH1UU3k2RHc2T3JBcyVMQnsoTnBjLm85M24qP0koR00sej5OSCs4''@;'; put 'put ''UUdofjsyVHsxenBKfjZuKSFoTTs0ZEhDOV8vWFFlfTFyMkxJaCNxRVBYKVdzcWI3TThicjFRIylQSWtBbls9LjE7Rlh9WXZVUU1jISUyKD0rMiQhbyZdUjY6WDAlPWJWWFRifGRJMD5oMWIjIiJWfHtiRnAqP2FBWVhgKC9ONFdEVGVzUz1YJSsiUEM1TENvXyp0YCUqQjxzPitDMSlAdyUsb2Ji''@;'; put 'put ''UGIzTF4mMFJhV2FfbV0+fVcqeCxlZXtBI088Ij15I1NYcmZGNTA/NmM7JGR3Y2RmKEFzYU5UUE5oREQvSy9+YywmYHFGUXIkcXRuQE0yUS9OeFV6WW9qPzZdOV5nUz16XT9deiR7ZkUjSGc6U2Nvc0k5MTNqYyhmMHhaOXpMWzFKMXs3Q0RLcm55aUJ8LDx4dVg4fXw+ZnwsY3l3RSRhTVIuOFlK''@;'; put 'put ''eVQ6P0V3eGopbnFNZ35xfkl6JXxtMW53XU1AWXpxTiF9aTpRd012bVFTfipmXWB+UmFWbWxIPDBiWzRCKTNXY1FyXm9QZmosWElhY1V5TWZgUXIiUH1lXWc1Rn50Vlh7PzBpKzw0K1huYzRuVVF1cns0QldSWTRnQGI0W2dKTX5gTDplZSlyUTpbdUF6SUAoUWVQMXxYeTNyXUgvKVkyZ2cvX0sy''@;'; put 'put ''WT5gNVdhIy87JlVTcHpWOHpPZXd8K2d9SG8qWVdWXj5namYsQW9FZyImbWg7PkJ1JFdEVChJMzEyYnJGUWQ7VC9he21XbixwM2VORm1vc0l0XiNNL01xNC8wJDtgUDBMV3daSG5mJUNBNiNGU0tHcj4/fVs8MGkmZkp5OGROY3s6MkxMYC4jTn1JXjFMNGt2UDE4fT1PQno5aCptfWpTMTtZQTtA''@;'; put 'put ''MEU4XW5QcEhfYn5AJDNSLnoiNisoJHRzIyY9bkIwaFpKUU4jTD0sbzpBITxzYFoxd1NsKFBXa0M5JDl2PzQlQ2M3YEE6TTVTKyMyVis+RFA6fmAlTTRBNDROS2lNaCMrZ2c1bW5qbEUkZGtie04oU0NYJihja1sqVyhzMSE3JSZVYyg5XywhcTxiKkEwS2dPbz5DeTVpKTJLLCtteHUwOT9AV0Jl''@;'; put 'put ''QURleFFAQ346JW1WLjNJPGlUUVllSkIheyg6fWdNUDdZPEtObGxQZnUsN050Nl5HRTg+aWppb0wiKWs3eik7VFk1Uk1NITdzbCEjR1dYXVYlfmNPeX1ic1AjLyhkK3E9Ul8qI2o9NEcqZFM4IWcuVjAxTFM5eVhGalhCOyx6e3ZhRiVGZEdpRTpveDwsITs3YDtga013dTlSY0phUG8lO1I3ZFJb''@;'; put 'put ''UERuckhmM0R3Sm5OWWRteyZKJGJhe21TRipDSikwTytqW2o5Rjh6eEI7ZS8wNVRYNVt+UUsiaz9ncGQ6ZXtxKnRrZ0x4fUc1VTErc3RxW0lhJV1DXk5IYTVVX2lJOWlVWUdwLjFHSkouLm0ubGJTXn5RZlc9YlNqZkQpcis8I1cxYiFlSy9zLkleI111RH58YEFEWDk7MSN5JU5iW2kiQWM8eW1X''@;'; put 'put ''LEsycSMvLEk3Yjl8UDJDRFt9NXNuXkM3eWtgKkVyW3Z6I21lOmhYMDJPZGZELzVoWSJ0Pk4xYnJZekpuLkhtPzJdRkN0TmxXYDR7WXQ/PitfJiQ0SnVSOGlUbGh7bjtvX1l6cT4zVlRXV0MrcipILClNZ054MXlmW3ZsZFpvUCh0Jk5GTldmXU81YkhINEZMakR3M05deXI9bURIKjpeQD5+bVVR''@;'; put 'put ''WzZQVlBtb31OOH5bOmQjT3xseVRre1MmV0VvdENyMTxVOzxEUEtkZEJDKTleZnVOb0lMVVk2VnMrX18vJEY5ST50eUlRbkRdJUM6SDl2QzQ9eVQzK0s2fW5gNlhQalNOWnA0emVlRkJ6M1M/cUNkalV1Z0RwO2hGTWRWMV0vcmBfN2hCUXs3NiZtYyRHWUNPcUJ8RVAwQ0VYJWU/ZlUue0Uoc05M''@;'; put 'put ''K2RsRmopUTtWcyhIbUdCODZvW2R8PCVeYzNgKWxkayt+Zldmd04oMHxKQFs6L3VKcUouaSZKaDB8KzIvUT8jd3hbKiRDYm1gKTxXVnRgInFUXiJnZDdnSkhRb01YX1heOi5TdzJtJSV1W2VsKTs8UHN9SmF9ZVU4cGV8al1RfmhVNHBhJHt8eG91NT5rdFZ7MXVIOSZ2eXsrOjMhb314SDIoYGc4''@;'; put 'put ''SyxDQkw6cFBbUio1azlUZzNKSXpEX1Z3dn4qKSJ6RnZ6VTVeS15CNkxKKyMzeHVmWGs2RD4mR1lYfj8zKSV8R0hATC83UXQ5U0dMKEJye2Rnb2AmWTtuZ05tV0FkbCouLjVAY2R5YWp9PE52RVhrNTdVQmllUWt7S2VJb1JMIXZYeEhhQiFXaTBfNHk5ZHJ1MyowcldDSzE/YkxMX1NsaTNJd1p8''@;'; put 'put ''Qm98STV6eDNZZUtqV2lDXWdKJVZZTnVxPmpJNis9PHw2U3A6T0ZEPj9+eG99ZFRhN0JgO3clUWkkdyU7IXs7MzFoZngmY21hfkdtfDQoI3hoNlVBeFhWRXBZRTlEMjk+TU5WVDJyZEZIbHduczoqXnI1ZDpATWo3eVI5cTVYNmEsMUhUOGxLQS46KDBVZnZnNXd6bEVxMDFUdnElfHxaZV8ibUQ1''@;'; put 'put ''MyNmdTZZfi9fMUNfJVhyS0pPakpUekRwWEI1NU9xTlYwKiNZZmtXVVFVal46eWYxL0k7IUNfbXsudnd5MWxINSFAM3hSbF1rOkZCQiNmW2ppeFZ4LjF3bWskcT5wRUd+WS5EJEkmJnJYTlZfN247bUMoS1pZW25KT1FtTTpvQVAsZFVBaU5Oanc4ISo4RiJ7TURuXSYvaUsyNiVQKH57NjxNRyk5''@;'; put 'put ''fT9ebX1SQ2dSal1RO0h3aTdzVD9TWUJUaSM6USo2dGVYLCIpVGc3ITs6aDVqN1guXzxNYGY0QFRgSlFpLDVhO3E/SHVEYCZGOltLQyFaMipDTnVLPjA2a3NwO2tXY04lNUlTb3lDQXJOXkIkTFUvcz9sQUJNPzM6TkR0RiZBOW08Xj4uJVtsOkRDMHp3RyIpaVRedTZXbHRoUDVZSGIzVXNFSj1V''@;'; put 'put ''a3BhZS5AK19rMSl9UH1GVlhAWHMoRX13dEhuc1g/Y2RiJHxbTlUmO2RbWSNaKSwzeThCLDlAZl9wTylhPHVmXjR0IkE/OVs9bGhhcmpGKjpIKzohO0JxPSZnVm5yPUdOemJNXzRuaVJ4TmlPd3EoYHp9YkgscDN4VV1BUGByMGhKRCRga3tuSWRicClsalpLW099YDdhZnxfTnBoKDhadzJXaWEp''@;'; put 'put ''WyovVHF2V0l6RGVkJCQlWy9NIi8oZ0c3YytvRT1ZLzRZcTBVflAqTDs1TEFoI2M+OyxPYltvY2w3MGs6RTFvSjwpI1QoWzs4eSlUJX0qcjRWZmZbZUhLWitUVEQ0PT1icWIzOnU3aW1xQToxRUx2RVM4PWZQOD0xPzNybFZHViV4NnVEPy5edkdhKCxwd3A8blZ8eXBUSzIyeEBUMStkKERmYDVo''@;'; put 'put ''MXlmPUBHUll1XUJkQElZWkB7Ml1ffi95QEE9Y2ZmWzMrYEhLNTg+T151NCVROGpTdkh6IT9MaUNhfUJYJXpEZjNPcnI2IV9vNFFpYm1ULGJHXUc1Ryg6fSNbW0RrZlswU1gybiVzfHxmSmd8NU04e0xLdU1Db2hvMD1ZJWVHVWxnd1V4QmNaPUk3MGo4VltTK29dfGlKYWY1d2FvNV0/JDsmNVIk''@;'; put 'put ''P1JCJSl8MjBqd248Py9qbUQkfGQhckUmb2F5c05MYVUxZHtuZFNzMWl+PCY4Wz5+OlhsRnxRTDRYRzVrRW5rK1VIbjcjJnttdW5+RWkkPTg3dUJkU097IXpIaSQ+b0RRTHwmTyZIQFAsK1cwayokcCk4WlhSV0VseUUpOT9VcnV7Q1l8W3NXTGFNQSFGT2NlMngseSU5S01ELDtmNFsiYCt5VV4l''@;'; put 'put ''WkxqZTh0bk85XTpHaytzVnx2YExNeTErTms9eDpKIzcmWl1KaFcua2xCL3peeklVOjUiVSolOS5rTmteeEhOQCFoISxaNlZkRHVjdSxSe2NYdHEpdz05WmRwS3Z0SDt2Qi5+RklYUkAiTlYsfSZMbzwsQHdvWGU1M1d5PjtdX2lsRWFaIXRsTD9ZdyFGYCIsOzx+KkZgKTNNTEh0MGtlLjA0Wz5+''@;'; put 'put ''RzxvV293WDdqZ04hJWI8TDw3Uk5rLk1zKWtETVpvNWBQPiZ6LnxdL3U0IyhWZC9KbFs0RD9LJU5vTUFEJik/cUNmKnAqdGN3Kls3MyRwbXVPbDEkKF1dTiUjU3xnQXxUMzAiSm5uV2VtUUxpKUJKRE1bbDY5UntSImFUJEV7Ti5+Ui82TCVvblorXWRfMik/NDRqMWZaUTxsekNrRSFERyhySkB4''@;'; put 'put ''eFJGdVldMHUhalA+OHJgRlQvPmdCY1FdeDZpX0ZdekxuYksqUnFCSzo4cSFGdlVfVGFWVFE3MD5zQlQmV2BGVTBlJkNwcjZCPn1FaCFiQFMrckcmeTJFJVBHMEUzN1F7NCwpUHB2bjFPR2Z6LnxiWy4yYzJ3RmYsSEVaOUQiOzgkT2gqKnk/WC8mX3VYKXQ/YG9bJCRHb0ZeJTNYPzBpPyJxfl5I''@;'; put 'put ''UH05UzVwNXI6QHpgQWopcV8yd25rYnJ3emRKUiY3fk5fSkc+STRfWT9zQ34qZ043VzF3KjlCMkZ3PihVOT1MQFJ5elgueH5FfXpVUF5hOFBlLCFwbF9CeztBVUkseThQXW8+fGpoUCVgZTlUdllUTTM9YHldUCZQfWFLZHBrfCtlZTVXL3ZqJUUmfSs4N09HNCI7cmY9cSsyPnFUaj1rfm1MKytm''@;'; put 'put ''ZmpTPitpZkBbc1EjWF8jQDZrPW9ld0VLfCVDP1YiQ3Mrc29gODhyOEZ6RDtPckx8ZWp8Z0NRQyJyXUt7ckxCX3goKWYpOiYhQmNUNWBHMm0zKFZ7UUJXNCY1UiNGXWJJZWs9VXdVeyhaY3xqIXI8dTJ5M0w7amkxei5jSEE2RElNcTZvdjdCaUxQTWVSRDUleypFNlR+UV96bmcla2VTNSw5dkIz''@;'; put 'put ''UW88NispUSNdNSpAb2tXIWBGVnlsVDs7eUU2Y3QkbmZuRzd0cSwrdk9EPmlldDc5cHZZTnxbSCkiYi97Ryg6cEQ/ZmNSUT1zTmZuSUxnKGdrbTFFUVV6b1VaM2E9YF0rREZOdVNaImAzc156biZ3RFZKViZaMFtnfE5ReWFabnRjZGB9PyZKNX1KRUNoST9Ne09dPz4+Sl5WY3JIWkImQSZAZFpR''@;'; put 'put ''ZiR1UFd5XmE5PElxb2ZhWW5oYXpGN2UiZyxZKHdqKVBydkQ/O0s/a2AvdUEqXUtrLzlLUXo7X3g2WmUoZz9nSFpqb2k2fCxBPERVez5oJDU2a2c/TUV1T1IiQzBXY3hLcHFARGl5USI2UktgTVdAfDYqNEEkcFpUdCwoeTJ8NWR6eENtQDFtI35FdiF1VVlvQGgkVE4yKndLTSQ7YFZEVXIhN1Em''@;'; put 'put ''YCw0NSM9Mn1RIkpxWHJ4Nn1uKjl7JCF7Mz1RJH0pIllEUyNNSHBgRz84XVlIWy8wNGUzeyRbIjU3WGtARj1LZ2B7N1kwYG5PLk1qZXJmRW93RHRiV1d5SyEsInhYX1ZrPSowQ15CKnxNO01ELilUalptQyE3SV5WTTppPTRgRDBAXXtFJE4oXmhOX1R8U3gqaVhwMVs7TlF0X3lSQCtve1hUeTx4''@;'; put 'put ''T0tfLn41WDwlOEN1dlspZ3dxYGhqSnZrP2Z5Wn0wYDxbPVMsYFJGY30jXkEjZkNyKCw5I0UrT25ZLkkyWUdaKGppQlo3KnlgVVExcVlZTWAwantfIiU2ZVV3Y1IrNXI9RTBVX3xnSkpyMGFUWENkd1VaZStRbjtLZmFYeXlfdGIza1d6eUtFSVolcS90bnA8bHJAeV5ZbXtYOF49VjpFeEhEOGxA''@;'; put 'put ''IUJtNTUze0UhemM6KWsxaCxVaiUxR108UH5ZT3Vta3k5YSRYOWVKKEhjaUVrczwifUpLWjFEaFU3RFVmLkchKHlIRXBOMENVIlRucnEwT0QyMCshXWdxN0l5WTBBTkc/MyR4QCxJbVtWXjBUek1RMiFXNFYwPzoleXIrK1MvdHIuZEhPKyZgXz54fD9xN00mdEtQNHxDX0EsSm1ieyMuI25xSjdy''@;'; put 'put ''P0NqcWBRS1MvR3x2RyNMV2Y2RTJdT15uQ0g3YU83cjRlNCZmTEozemEldG08SEtYR0tZLnQ+eDZMVTBuQ04wTEVaOCNCKlU9NkA6aTMmO1AmNFklYmRUVW9bJDE/aHQyWVVEUGB5SFRPR21wP0JdbHhGZDVzQlg9LlU0MTJXc2JZWHtqPmklVFVobCZqc2QmOHRwPXZ6aVE5X0N0XnJxNi9XNls+''@;'; put 'put ''OzxneTYiJX5Ocl0vVkIqW0F0KXcvM0BeOjg7e1A1NnYyRlZzcVRKIVU7WFtGIikzNmIleHFEe3pkTiVCJGZXdFBqaitkOnZvZGNWdD1mcF5oR1hoI0R5a15NOiVzPVQ4fnpYS1ZNe1ErfFttWjN3cGY+I3d+Nzo3QHZ4ci9XbE1dLHZoTHlqViJIYWtWaFcmdnVoezJdNU9DdyU0Ui4wKWs5SyJ6''@;'; put 'put ''WDl6XWpeUG9Xd1ZhdT1pYWtjMDJEM0ZHM14mMiF8cTJLS3JCcExWK0lrbmY+YnVuYXVYfGg/S2g6fDEzRElQbSQvVGMqLyt8NHgwWjQ9MENpW2U9cVZGRWtUUj87dnUzV008Sy57fHg7RWZQVDVrdXdnQC8kPCs/P0hZTSk+ZVosTyltWUZFTywoSkM6IkpbVGxGL2wvOVNEIXcyRWhCZFhOMz5T''@;'; put 'put ''T0ooQG9DezYkZjw7QWo8a3Vvb1I5PF41VjE3bVhRcUMkZW5UYjx0U3xYTFAwREYzVGtHV3ZgM3hrKj08cypLNzQmQmJxJGpjKjNkOTguRHloZDI6ZERIczF4flFwOyVhZDZUcCpFOmt8ZXtdL1FSZzNicyU2TltbfE5VJDFqaUdgMHsqSGlXdD43dmh7ImJxO0BEdVluPlYmPlM5MC9mXltmfkJ3''@;'; put 'put ''LE1QVnNadUcseHpIO3daJFN8WG03VzVzaGphP3tfSUxIY1slSiNaY2wvKmU+NWxXdnI6RjpfXzpSciM0MHloR1J1bDZXOnZXNS46TWREbmtEWV13PUZ7O2YlKE1mYCEvSVlAVyszYWIhJGBtJXVbPFRWTkphRmYvUCZzcUNwOkVPTSQwP0ZEU35Qdiw2ak9TMytlWlRwUyxQUXExdnNRdzpsSW47''@;'; put 'put ''XjxQMCI0SyFbP3prWygiXzhhZz9qaXF0QD91cCEjOXRxNHBsUmg1WCpDRHU0Q0VHOXs8RF0pJipgSWVyLEh9OmZmYXRjc1Y4Wik/d21iZHV6OS8qJGg5blV2IlV0NFU4MXc9USsqS2dKaUR0KFA/UV80IlMmOU94dlc3V2dHUC8yI1tfSWEzQnZLfjlVYEB+KGk2O2cyKGR8OVVKaEJKY3cod1Rp''@;'; put 'put ''ay9Lfkh6dy5qX0A4ZFZPNGcwZn00fHdnXyZkfm1Pa05AQXxATXdINCVpVjVQdTZBUSYiJnMoZDBWaTJgRy5XOGcmZ3JaZnYoIm48OE1uRUwyRD02KjE3UmErYFZaOzliVi9HJlV9diRqbHM/bV9lcWByKnN5WWRGcn0mfCJgYGAlfEskQzRrLyt3N2pha215OWJrTWE3SUAoNilteWomR0JhJS5u''@;'; put 'put ''TCxDRE0/dVFXV3hXT0ghPHFEUTFeTj4vXU0ydS8oIyIvTDoyYzU/ezJdVX5NTC9fald5LDlkME83KU46OC92LyN1PWZZJkMqcmFkY3t6SlB6ZzhqYUZ9YWBGUlJJT0hsfThmUSx3KkAqPitifFJoLi50QntCRDxeeW5qNWFpImM/fXhyOC5jNCh7aGNYfTtNNnhEKGVvRUtVXzFlTVlhZXB2SCki''@;'; put 'put ''UHp7KVhDN1VxdkVXOjAqNkgsUlhlcCY3SFNdMix3OyhdT29yQC5mSE08Wyg5KzBAXjA8XkZoS0hnfjghND5DKD4pbU1TeENRYkx4UTdLeyFYeERbIUJ1KVMocnx1Rm89aDBLKDR6Nmk6dVFGSXQjUClKeWB1eTsiVEViRiM3Ym4/QD5oVUB3bHZMPmJbJFZIQHVTSkN5WXk2S2ohU0ZwMmJNKVdN''@;'; put 'put ''OnhPWllUNlFgMCtpdDw4IzQ3OVc4VTVlK24xYTx2dFAqVEAsNzIrcDFRLHJeIjRsZTdgNzBAPH1qR2h7WWxffHgkUXxYQF4qZjd4d1l7PW43QntiRkQyK09ScFM6Mkl5Vip9JkdRL3kmJF4hZ0Qjek9EZlo2R21RQkc1RlJ6SzcxJFh6ezYpRE86e1F7cnY9WlU0fHw1Oj1abElGZUlZSmpubHol''@;'; put 'put ''NlNwJWs4JnZzcn1gbG5xZjFrZWFPJntwUFN+Q35IdV4lVjQ2YXFJLnchb0Zvfj9iMkZZTzV0W3chMGl9XlNYWDNzKFN1MnJ4UXVWejNCPX0sbG5WVSwzWCNrVF5we2pOPyx0fmhFbXJmaXdtIToienBxYGlLM2xGUW1GbjUyQnY1Qnk9dzlGclBSX2lFcz59SWBxZytuKnVoSGYqKEU6YWZraUJ6''@;'; put 'put ''L1hzVT4uRkp1ZDNRWml1Ym5NNVIpRGFxN1hhPFVGQkNhKz1pZkIhIzhaU0MjM0dBZEZlW3lML15NPSNoaHUzPkZdeD4jSCtiL0BaNiRtLFEqW3ZqalpySHBLdDV9ViFbe2d1fClTS09WaU4oK0JNOkdXdV5VXV85Z2ZLTkFWdCIuPmFSTEZte09+dl4yXjg/RSlHKTQ6c11ubzp5XXNfZ00/bn0i''@;'; put 'put ''dV90RVhuUC9CSEpecWtGITlvbEZRaDJWJSV4ZmYuNX0lS2d3aVU7b1psazR0cWsue00pdz9nYCUxLEhSLFFoW08oajtoZT9TZGkwRFgodno1Z1V+USRwSU45VndjZkZYM3BzfUxAQnBzVFkxVi53QFZwI1lJK1tJIyg8T2c1MShwfX02cFoxdyhuP3osejUoT24oUipEUWpzJl0pZGBSVkMlR0ND''@;'; put 'put ''TWx+QThsTipnb05HXShjdD1pXzM2b14qN31FeGt5eixCVHVCRjRsbm00ISUyeWM4R21DRX52cVpsfnteWm9oUDYoIkksN246SDp+YU02cy9mblYvSShxdTxoOE46Nn1vWjdaQVtpKWM2fSlXXiQmenFXTS5TJHRGVVJkXS94UT9+YCtgYWhOTFpEbnY0az5Na3RtdFchVGdFej9fUjBKUWhneCVe''@;'; put 'put ''b04ydnowLmA2MkIkO11XRSN7fnAyWWpMUnFHdVNiaihNT2BULlRURHFuUUg1Lz8zYjgmPH05PCRKKiwzKk4qPz8lSjgwVUEhPV5xLCVIUGJiSj18OEk6OmBkU0BGRjJkYEMmLE8oYlVEam1sRy57Im5qU1tsYjo6VGhYP019TT9Kbmh3JjRgK3tqT20oKk1+dkg3JVBuNFUlNFNzVSI3JS9La0N6''@;'; put 'put ''anpaPDtdT3lvQzFPSG1bVDE5KyxheXd5REMsM1t7NlRWKW8qcXcpfUl+K3dBNWtKUCpRTUZjMXo4InxhNUkheGkrQE1zNFtkamRxI21Ud3NEeS5pMlMoVzR6eWI8RzU3YTpNMHtUQFZtbH43bitMZTtsX3pULkw2eXp0eXxYIX49NSRxfDdDQj1UYyEiZ1J7QzY3KEYhTWVzeS5oLlNXYU02RG54''@;'; put 'put ''bEgpYyZgZTRCKkpWalIoUyZONj5ZZzghdmksWGlLODNvSypHUzwwOntnS1pdR0ZlYGh0Zkg8T3AvIjRQeVcqeCVLLzokVGhJUFtAYTZiPFA4QzBUfSRMbCk+JmI/Z0xYMDpZTSI5Q0tAdSs3TW1zTzBGJWZzMzc6WD84M3RXdm5aTUNDSlVDQ21NTF8yVyhSbDAuQmIsPz94IjIxVnpJelhzSjE8''@;'; put 'put ''dEpQOSptTlpMKjhReSExej49LCJQT0tHPzZOV2w9eGxYRzZ2WHR+b30rQkcsRFh7ZDtKZjNSSWk3bjJ9eUAzSEV8dUs8V3ohYC56OnYkfEpseWAxRDdCdGdTSm9qMCRnfVswP35OQnM2UkU3fkIwfHd+Vz1oY3gqP3E2MWdKXmkhYFsxM3ZOPUBRIUpGYDUxOS52TUNVPjNgPl4/dUVucUguXlFB''@;'; put 'put ''IiRnfl1acHQqUlVOVyl8YFBVazY9eWE0UGRESys1N10zJTUoQ1l6dztGQ3xARn5jKzdFN0Z6OS4+PHFhezciWHNffV9rJSRxZEg6bztOanFVdHcsK31+a3YqTV12WllNbUtgJTI9QCgqTXZYPFJ5S2tsX0NWQzBWQDMmZEhqPFA7KXUrRGx8LjtJWmkxQFNkP3VFWC41QFImQyhtX1Z6TDkwQiVv''@;'; put 'put ''cXcuQDtGRCsoJkpNPExULGwuRHVbd1VzN0clfHhddXFjK1RTRW1QPUM0VyNyanoqSWFHfCw+WngpQFFjTlBVT3g+Vj1rIW19LF9dRF5oWW1WVFNHaCx3eW8mbkJ2QF48TSI+VlhAVjJycEFHXTdNMmljIldudTh8TSVEPXQsJWtRMVIhY00zS2VIfk55TyFuJTBUSyp1a0RRUVZ0dSpOUSpLYVR9''@;'; put 'put ''WXZAVDFMW2V7KjdFO2EkJDsuZH1NKT9pNiFvWzxycS9XeElWYlA7UGx4MXV8RSo3VUk+UER8SmcmfmEyYXghaillb3V5N01fOil4YHB1Zj1DQmohSlR4SjFoZFpvbzshSX5MXl51YDlwYUw/cXxaaEhNPSJ6fWUxT3ZMWyU8SCk2MU4obS4mYGVEXkd6WCRjaEVfN21rXSsmLyswe2lmcHlPc0lJ''@;'; put 'put ''aGMkZj11PGV+Rz9hZ0NNb01MZ0YhVTZzKWBjUE0walFlQms5Q1NIYWJiVyR3JDNRWyRIcisrfmQ5a0VzeU0sIlEqKn5GfnZWV3p1KkxyWjU1c0U/L0xzNmVKPl9jPntkZDdlL3BWa2o/Z2B0SXZZT1duV106VX1Ze2ZIcy5JfUslPGBONl1AYk8odWdlO3EhTDhWOmx+O0hgKV8hSktocHM6ZmhF''@;'; put 'put ''cm5reTYwfkFSWnshWVhRMVBsUlQpMTZyZ00rfUsoNUA2U3l4VjVdeFRVfERKcT5HL2JpalIiUyNjaDFucnkzWlQqe1AjMD8vfTsmbWooPXN8Zjtyd2lbTCM5QXoweDFaYj47KnN+aXksPGhSS0VPQGM3P19NI0lMJTp7ZHV5XWN0bEQ+eEtsY1dlSjJVb0I1YFVNV1kzUlY6Ul8ucWxMUEZ+JWRx''@;'; put 'put ''L0M1WDFOYlc7QV5EZkoxSUVsdzhhTFpgMDtNJEdWeT8+NUE/fFE+RT9FJnpkOykkLldEIzU+OTRQUTRaK1FEamRyS3E8a2dWXjt8Xio9aSN3YVtAamUlPGoxQGcme3VzNyhBb3hGLkhRVG1je3A7cGozNGNZSCEpKGVSK3lxcnRKMFtaamVWZnNjJTROJSEoOCNJR25Dbm1XNncpfGpldC5qX1Zm''@;'; put 'put ''WHJXaUNLTDB4QDB8YURtfjIyWHRRTGMiIUFUOjZJU1NdXlN2a1lFQjYhbVJTfHhvdiV5TFk8V1poS01bNnBzYXhbJmQoMmcwciY1N1Q2PHJ1YCUrTyRAd2BFLFhEI2V0RHJbTVF0NWg7d3MjTzhFfiZQNVV7V2poR206O0gwImQjLE5DWHM+Rnd6OzFmazlEKnleYVNRakU0UiM9Mj4vJUo6bz59''@;'; put 'put ''NCZeYmxhektzbENaPFVgOWJpU20/e0J4TkQuQUVQMihbXjVYMFBUMzB0bCY5QjNga2BuWj1EdGx3aG01cDJ5dVUyRTY1V2g2JC9ZKGEhKSpfeDhYRChGakRiUU87b0B9b0FabytpITRpK2wpK0lSNnEvanY5OkJPdFojTzRIJjtLdjo+PD5ORnk2WH0/TGojLCFxcCo8TXlVYCMhfkIlZlVrfFhP''@;'; put 'put ''SkAlKU9NXXJwUC5hMVl4MiZFN1lJP0UzUkJabzd9VHRoJWdHOVFESmYrZU5CXj1+byFPZWd5R2RBKCtVd2BaOS9HTFZiRmBVY1ZJJGxKKGRQPERkWTRGfGM8d21WT1dHWDA1NEksJDBVYWZteCtIK31ZTHc1Nj9ZW3tycEI4KENWaGlNY34uOmpCakxYKjRmRiJAZXQ/cV5gPldsX0dvXkxrTCZD''@;'; put 'put ''XUV6c2xgMl42djFoPStgdDwkc0JgbH1fKVhFN18iMjJ8V34+SmJ8VVdAVDZXJnVuaDckMT1sXjhdalJ5L0goUVMsKmU3K1dKdm5CO2lWZ081NXtoYG8rVi5OdnJqW1d8Y3N3VzxROiReMztPRUJRc19nT0t2TXA3TipDc1gwVVt9Zj5xdiU9IzNGUm9YTHEyK3BlakdDKSkxbGU2e0x+K1MpIkNi''@;'; put 'put ''Vj5OazNtXy83LEs7MU8qRENDeEoiOn56XWs1b0JYWWxkYFdbeEZlNyI3JXJTLjo3dSZVLzgscS55TDhBUnVvdHVnaU9bUDc0bD92MFkuIz8mLjF0YTY9SlE7TD5pcWx3ampsWj1wXTojJC99YTQ+P0VKNlN8eyRTfnpMaGlMP2hOYz9zIjd+UHpKP1B9aW1DT3J4YS5gdS90KSVNNDVye3g4ZEpl''@;'; put 'put ''T1V2e1s7OEAuMWd8b0UubTJyNjY1QGFXQkR8fVVUfURPRWNtIlJJL2Uqa1luIUdXRHYhb2o/TlMyRTkjeF1qUTw9dHI+eV5hTnA/R1osPSxxMHxEanc6WD1FbHQ7NkFCQ0R4ez8rfS54Yyk8ODpjdnAmJEgpb14uLDZeREhvb3t+ZDZOYW91NiEsdW9nW2okW2k5RXJtNlpdRWdLM0dTRXtWeGZj''@;'; put 'put ''MC9AdWdrdHN7MTNgdUVzNUBNTXEqQUVtUyMlWXFCNzpXZ0VYMiFrN00pa2k3OWFAUm14eEBLajJ+MkRnb0htLDtzKFduRXdWaHptdENhLmp8SXhRLlMlWD1DbjZRW2A8aDZOW2JGc0RBOmBzbVNwSWcxbkJvQF53V3g2b1p5ZW4/dzxlI3thTz4ia2U8K1F4Z0ohJVgkVzhtYkJDRCVrQlVMVGpI''@;'; put 'put ''b3tDQkRmQSsjdD4kVmloYUtldWJ9SVFdIm9ZMlRYUSlkMjc8VHZuYEFDZSRBTFRTZU4lKExkPzArVTxnRFdFKzBEeHY6UFk8OikjdCtZeGZ1dmU8fnRnbGZXakh9P1tOdF5qdTtyMzVYWnZ8KkgsRXBVJXczSEZWX2JRTXh4TD4hRnoqPjlLT2ZVeGouTUZ3cC80QEFUPnJJbCwjI2tnTzwhP25C''@;'; put 'put ''cFguKFhKYjJJSVBxQn5oeVVHdSNsNSZpYS9xUzlYV1FmTGU4ODF1dWtjLEU4R0AlYHgleVhHSHlvWGVsUV48VW5yV1B5andQQ0QobF8veHcmNGwuNFFQPF9rKzhpNURHfiZIPGhMdnokcjoyYVp9O0NhVEVsRSp2NXR7OnpKZCVTJGR8WVUkOEtNQn5NVXZsUHxrQylGPUxdNldIXWdUTlFrXzI6''@;'; put 'put ''bzVEU3g0PH5uUmVAZDclPzxPSnV2fEIhSil7ezwwfiNCIUA2TnZ2dy46a2d3blthW1MzL3ZtLCFhZ241KnB4aiswUzh3Pig8ZnBnakJ4W2pWZXZqMk8oclRKXj5xLl9wRnFFWF4oQjtXbk41SSFWdEhwPXJnMj1NfkFDO3RfJChZUGhHczx2K2MpSCNnTk97LkVyKUQhS3R8XywvVGFKeTJPez5H''@;'; put 'put ''dTMobnpgU2pBUHszR0B+aXpoOmBhUSYlYFs6bWtnSlAxLzdKckNpPFgvd1B2W14hVHA5WXN5dy51IiVqKURWV1soZ21bRFZ0SSRCd31XI3ZVQlZ3YjxVI0YhQEdMZ0xvaGdxNSh7RkkuSlVUPlg0dSwxRVA3JWR7NVFhTTluejV5OCR5KyxkN0N9dnBoSSF4alFTdWoicj9KazttL3FvKkwhVn4l''@;'; put 'put ''WmBGSj9xOT0zWT9hRyxMSzcyRn1eUXhDVFkxbD5yVkFTUGtdfW92aWYkMTR3dm4uU0BTZ1ZieV1nKmpnbFVBOkFgV2lFN2c7OzBNS0skYEYuSzNpTHhaaThtWCkpSDdleUA1NV5rV25OQjksciwxVlBeVF9Wc2BjYSNTVzEwdjQ8RkhVZzpaK3tROGcqfkFJa1QkOFhlLER7akFiQ3VXQFYmdGNY''@;'; put 'put ''cXBhVDU4dHw6SU5NdUhSJHxZSFBJOFtqWiY6IlQkITlHQVYmSUNvSXNwbS40L1RQWHhHTHdaQnBdbS93TWowVGFyKD03e099XiFMOD5xX2wxNnlIP343Tj5fdDZfaS85I3J3OCM+bixdVnJFJEsmaTZjRHJQWHooTmU7OyYxMlkiPWlKNFN4cU1COEQ5QF5kI3ZjN35gK1AlKC9peEZiYEcwKXlX''@;'; put 'put ''UDheSXwsMjExIVgjUz5ZT0t3UW9WXjRzTyM7fEk9alF7RTlMQnFdI1tOdUFNVGA2RlkoWWhTPGRbZyNJJDlgK3h2aDgyLEo1bmUyamRpKjRiNHVPc3o2Zk1UOVhuNFspTT5TeUwmc3VoJG8ocVBERjFITUh0TiNXMXV0MFd1ZW1KQkwxfis1WXZRYVssWSwzODtSU0B9Tk9kZUNXdSgrRSxfaTtD''@;'; put 'put ''N0Q5dDdIW087UVAyPX19PDJTV017bXZhfUVhX2NfRTZncihWRi9nOX5heUV2ZjZwfTBEJjBAJV9SSHEmRiwhQHt5Jl0vdmxsITxIS1I1WGB6ZjxBSForbDA7Mks5N3IwI18se0BgV1RtQ29qKDpRdE1YUkBxWmdtb3c/TjAwQG5FL3QoVkZxJDJMZmAlZ3A+P1leMVtacSpZWEpXOSReTmMmJVh2''@;'; put 'put ''W2x5PWxQISIlNy8/M1QuUGBZdDt0ZjV1Jiw/PT91Q3xmU2NUVXtvIV4kQU5tfEgwUyxmd1FRQTZRLG0zaEJ9Q1MrKFA2M30/Q3olI1pyVF5gLFdNJFRaVSN9dWdKLlVhRGlnTVJwR1N7MEthPVNNZjEzPEx1TiZ5eipwK0hOcXEkX1t6SDUoLDhEcSN+QD50OjFyQiUsMFVENWB9amJLO155RE9t''@;'; put 'put ''TEtlPGBJXnMxdVc6WS42Tz5nNy9bQEtRISpqZ31daUshbmdOdDMybF82dyZ6dW9dZFk4fF58JDJyX0tOfHxLTj1CVUlOSXdyb2txW2tjK2xJOCNfY1dWRXFLJF5kbTNMaXtJLzlVKy85dWtLfjlIdCpEM3hiZURzJGZBPio9NTh5NExZQj86UTxabkYvfUdXdzNzdTJ1PiZEM3xgUlpaTmZsYkJF''@;'; put 'put ''XjlkVmE3IlhkYXs+dlNpIWdCNjx9KF05ejNjUk0+bDR4JmBKKnJLKmM7UEw9VXdhMG5rI096MWY4UW80UzFAM0x3QXhDJFtHZ2hea2dWPFtvXmQucGdoYTVNWEdpWSpkdipQa2tDXSZyZmBCTHo1Mkh0e0FCS3lofGhLYGJMOV0rNU9bKzREL3JpKyREKHVbQ04hPTsxVE43SVFuVk5WQj10UkpS''@;'; put 'put ''OHBZdzdCXn1RWiVkeTUzZkZtVTM1LHRaWW0wZFE3XTxrQGhPWlhFOUVqI0RUaWZTOjE0KmhFSmdFcmZ5bzkoITc1JTlrQn5bRV1uKj5yPDleYndgdiE+N01MUCRVSTk/cjEsN2ZyM1NrYyN1T1slLkE1dCRXV1BndmNBdmR9YjxRKWRiZHhRdXhwfCJiTCtaRWlwRzh2SikyKnAiKXxhSEgiRCk2''@;'; put 'put ''IT1Hb0JoLEgpPUFpIyN6YUtEXlcmMUsvYDFiVjVJaSM3WWw7MihhcmZ0Jj5NTDJffi9tcytuNilsOSo/TyU5SmtKeH0udXB9dVdOQF0pWylUVT1BXWN6I1RZM24kUV5uWi5zOHpQOjVSTC5JWXBZUTR6MjBhZD4rZlNxa2hMKjMjcTl2YTJeSnwrQU0uXXxGQENrdUFGcSw2LzA/aEgqbiJLUl92''@;'; put 'put ''UTpAPDlBO0xMJiE9TnxOQj5qdkZEZDR9U0pZOHtIaTNXbjYoOXIxRkczOWs7Zn13NGBjYUUsQXxMKU1MK1R2QHJ8M2FrU0goVHlMYStCREgyNml8fCs6QXUuJUZNLy9rcj1vfkYhW2NIbHZdXnVNQDt1SkdUd25ET0tqZlpZUGM6cClzIWQ9OH09OV8hXTxeO0dheHt0N2RtJCMsaSleOkMpcFRb''@;'; put 'put ''flU6PzozX35MZDFrcWQ+WEx1PXAoXUk+fSNkTmMoWXpkXUYhdi48QztgRkF7UzZ2blVrUi9lMjMzWUhQW29SQCJQZT57MVFjOV0rUElScUVRRjBDfXxVMnluU3tpLkkoNkdLbnZVZzpmLmh8QVJTS04kdWJ2dHRdK21ZaldOIjVIRlB1ZldFQWcyND8/RitJMVJ+Z05Sc1JKPyl8bl98UTNfV18x''@;'; put 'put ''cSMwdjEkaXQyakIhSUMiK2xFa2Nfb0xZXygpckh3bEBIQUgrZTVuLGdoWylrfi5NQEZgNjJlNWozLl9+ZDRUN31Lfi53XkdxOmJQbClLUncvejAzVmZgLmNsLGhPeDhHJGYqezFhZGU/a2MxfTN+dC9dRk9ueWJbJC99TG5he2lOPit+anNnWSNOZys3VFkoRGRreDJjakw2TygocV8wRl8wdGZH''@;'; put 'put ''aDRFJnokRWVIeipsQCVCdUtUKUFiKWtDSyQpUzdKXkpmRDMzdXNFKXF9QUd7Umlgb2lyX0dCNW92SnFgbzZOOyooQyFHcWVyQDBVWmk+TX44U0BeLzBNUlBtW2hXR3M5RnVVREoselFldWZkNlR5bGtJOG4vamgjcHZgKkwyTEtnQGkuYHVLOlYlezxDVHYmKmkuRVhITl5rSTNfb3x9fmZ9Z11O''@;'; put 'put ''NlU7fld7Wjg2JjZRPF5FJjNpIS86eCEvcXI6XTBULz1PRj1BJmtiY0Y3KUVDZXZ9ejxhaUlhQmhra1Q8SkxQcUp1fEhxYDcpVkVNVSFHXmBtOG4vV0VNciwiKDpDIyR5MXM4NXF0QHE6MDJ4eFA6WnM8TG4uMCs5MWhjTHY6SWFmZC88NmhVZ0hvVG1VYEh2STdWQXo3YkooZk5ZXSNTQTAxK35B''@;'; put 'put ''Kl1mNmJrXlAhcEp0WjBOJV0/WVE3JXV4M2JQOHglTlpfclopLGA0aD5AYDRbKTtJcktVQjpHVGZ6dCRvfj5bJmYkYW0iazh+aHQ3fF0/RVJ8aEdBQ0F1O3dpP0tXPjE0JDBKPEc/U05JR2kmKWdram0yKmZXMzUsbjQlK0ksfl5XeVQ+YyEofDYrXkErdSkwJFYvbl9xWWJbL0NRJWA7WnleRjhr''@;'; put 'put ''Lil6RiVyOHIxOW59JiVpNWUiKnsxLF9weDV3MSpwdFQhcDtYQ3RZdGFnL3BPPmxhYX55az1mVEo8XkVxYyRITFZ7RWheNmlzVTYrTUBPOWBPbWBbSGxPbl9YWjY7JWhafUU1RVtPQHJeVS5wdF5YaDsmcGBxfi92dnFdPjBLP0YrMTJjc2I0KyV2NDppQik2KldAfTlvfERdfShjW0hOcDs1eXBl''@;'; put 'put ''JEJtPHwrVmNoJGpWZkBUPC8vXlcqVFZXeikhYVE2ZDVxWjY+fDpxUTdWU0I0djRiOD9fS2BGJTQpZX5OLzRmSy9KVG9hPmpAbGhuTyVrIVJIWTExNiF1RXAkZyhmKDAlQVgiWT1yRHNXcEAjYk13PFVwbUB6XkcyIVgwZVtEX3hPUnZmen5tOmdjZTNYVG4pX21NNjsicC8xa05gPTdSRn0mYSpl''@;'; put 'put ''PzZCdXNdeVB3QUJZJmlGakVYNC5uPC5DVSpaUjgqYnRKaFlySGJwTENPUlNRSCQ+ck48O0h2UH5GZ3FLQl0zOEIvREJGOlJ+PTJHV3YpWm4mZDVqOX0+L09aUWVbYlMrdkFHeUtsI196TGk7UFY7K0leelBSZC4xW1ZiemY1YmU8MEZ+P1RLc3MuQG5PTC9IN3k1T3hwfDB1fChoKkQ/R192NlQk''@;'; put 'put ''UE5nVDV0VF5qPytSIj9mMyNELm9Hd3s6MywrY3cvQTYuI1loZEJbaVh6UDFRbDVLZXM0Q1Mwd2MpZllJdT1KXXQ4SnU3MH5pKF9IeUFkVzVwbztmM3UibyoyRDsiO2doW3RrKE5qYiNtcUlXfCRhTE00XjZhZ2U0YThUMV8hZ2pXYmBPQ29wbm1oMStxdns5QTdUT0RNVXgzYHZafkl6YmhFQXY+''@;'; put 'put ''N1BrJDR5VEJpb1IkSFZDd0k9fihvIyhCSX5wUGc6JD1lXyNdSW8hbyxgTVA+ZiZ1dTUyQ0V0ZiwmbUwsa3kjSCljPHwoezpOQ2lKbzVOLytda0V+LFZpSHReZVVUXl1CNGNCenpKNHVCRX0mfS9nPDBhcW9GLGRhZGMyWWxzLispO0B+THNuKG4jTFZUZjEke151fGZWWUxQbXV8ai9UNVp4bmE4''@;'; put 'put ''P0NEbzA9OTFNUzdycT18W3QxOTBRJDJnW1NqNlZ7KyNfQXpbOylhdkRNaTw3aW1xPkg1bUFWJUg6YXkjRCUxNmRNeHVFR2Q3O35XJnovRSIja1IyVys1bjtrR2xMKHAmLjdyd0AlNlhePnNsNG9lbjN9XU1yc2g9RFlPWkxgMXZXM3V+TUdZQFVteTNgQTkkeThhQy9qK2w9VFN3JXppbi9FKExz''@;'; put 'put ''Q051MFBQPzddaihKSXokeVh3JkJ9JF4qVihhMG9YW1VdVSEyTE1MYlovUz5FUldkNE4oNTBJa1pRaHUqPjRsYTtYOmRQc1paUWEhRS5dSyhXY1pyWXh9SHNFQHBIYDNCbG8/c1JSZWlqUDc8dGMuW2M/JSJgXmVnUXQ3aXA2WFZYVyhAXyJmVV4hYD9ZSWgpVTRbNUtPQTZ6OkZuUnQhcXZ+ckIh''@;'; put 'put ''bFFjUS5XLkYwRFBeMUh3U3IkRSlXVmQ8cjI6KXo2bG9DbXxdImUyb1ZeK000ZCRxTntAP1NiLGBTUjFdNGw0SVpsQFVxKmVHMF9wInpuYVlKcFZpdmxkfFlpeksjMXx8SV5AMnVPO3BlZ0MsbSNXK2ovektqLE9IWFA9bj5gI3JrIX00Nz95eSZ7InNAb1ZpOWF3WGImKCZCPSlFeTRxX0FhZz5Y''@;'; put 'put ''RFU7Ml5SUndiK200ZHk4ZihmWDlTOXohLiovbkxLRUBiYF42b3Y1T3NOWDpWc21YdWkoXW9EOllKbnZaQSltWXQ3cFdrKncibGt0V3guX1NxQHo2WzwrYiEzMk53WVQ5YGtDaUFeMDxrW14sbWZNMVh7alZ2bnlzPXFnekcrIltsK3tiTlo0eTw8QmFwQ0t9fSM0R143Ji51WTQzY15qOj1XPEZJ''@;'; put 'put ''Qmp5KGFlUmBCP1V0KTFyYjBALGVVKkcmVGMibXt+dXJUfENeOX1DZD0/d1FycXJSIyVZVDhzUjB0QndzeyR9MVlNS3UucT04Pk1RJCExIywpPGVBKkRWX3lkMW8wdStMQTtwTHFkUU4xSEBbMGRxYiJoPVFzayElIzd2ZW1AQCM8fnlJTHpXbkJDbCpwaWQrKHBbc0AibjdTL0VOIXd9WSRJKlY7''@;'; put 'put ''aXs6PWZwdD96a0hYcE5OJSF5ZlNZcURWa1MjcG8hTT4mU0FzISkwZm9mR0heclJbeS53S1JpWUc+enNYYFU6TCg6QytOalFeZFNkfCF9NUFKOThLVSRBZXpkQltPaCgqWVJTY0VFOFk1RlJEOUV4PilHSzlHakM6NEUkdWBIKmZqfTY0aCpJMGMwZS4ienNQW3oyN3s/dXsqY0UjK3R7fUk5PSss''@;'; put 'put ''XnB4K1REfHhQc2NldzcuT0U+PUNfZHFlJCJzaShbaFJ2NHVFKV8lfi5vUk14dkplaVZjYzdbaVJPfSpOaVNfKlVHRTg9RGdhR0pwck5zWUZDfXp5YXZzMjBELEF2U1UydEFuWGsjdTY1KjMzUThnRUJMNUhLP0hxcXgjSlFFSkk3PXFAdy4pTkB7Lz5EKiQ3X25kV35td2UhcFROXTh7Ik56VzF7''@;'; put 'put ''LHQuPHBWOkg8JjVlb0VeRihiT0UreilnbzUyIWlVb28hZUt+eypqUkdkKyZEe0trLn52VEMzcnBlaFt7NEl1O2d2JixnT108VmZsOHY0fE04RlVdeVhRKS5ja0E4PyozQiFCS0p3SGxzeFtfYjpNJHQ7Py4kWUZMd3hAQDV4fW94WCFyYUh7QVRLVyxWdiZdbE0/V15hUnhRYG0uMFEpdz1hQE09''@;'; put 'put ''OH1iYF1VVW41IVptM0s2N0ZiPzNjfiJRWDsqbz1GIUs/SUFATl5nJFcjKDRPOFl3NSxhK004JGBbbGVNeH1TMzl3cmhiKyEpc3hoTStANlEyOyxJXmBDVWFmV2lYUnBGZXlOdzRke05IVHJMfldXT2ReaVQsVWFdSHI0aVF3UDJVO3cwI1cjNXB5WGA8NHBgYUUjKDR8PUdmSysxU3xIKkJNSXMq''@;'; put 'put ''ZUl+QzZPQUBsNXUmdjooMU1pOnJoSzJVayYjWXF6aWNicEMmUmosUWxqPV1kZkVdfTpMfDZQTHtWW0BHLkF7XVFGcmVNITdyYWpoY3xGKiNLRmNMPTR1WStId1NZUHR9I3FtNlo2ZTBEIWFkZUJCW3V9eW9Me1MlOTpPWWwoX3AkP1Q4UWMkLEs3NHRATWI4PjVlXj47RDA7R09OfE5qcSZrKGFT''@;'; put 'put ''cyM6RUA8NHZyeWUyb0w4TWY2U2hZZGhJIjwhPW0hOGt0NDEyXzAyRzciWlo2ZjdleT8ze11vWSwkb21GfDMxZjQ4JkJGRVk2OE1xQmhjXXU/Ij9IVyFATEVCMjt8SS9yUEt6LkN7WiVQa35idXk4dUlWS0goOU8oYXh7Km9SeX5YP35ALlIhPVVXfCVqPSt9Iyo2OncwOCNXak0sOE42fFlucz1R''@;'; put 'put ''OTRmLz9yPHZ+SUB5PEAwMylJNH0wR11pLkxDKW40MTErVUVISHRoImJ6OSgvSS5XV0khI2tRQCk+dGZoL3s6SjlOITNzemQ/UnJ0emN6UlpWa2hkTEoiYzt6b3Q/M2E/OHckTEFiLzd5dWgxRVh0Y3IjRnc8e3ksKFdkNVA9Yno/aGVAU2BtI3hzMUBmV09+bj1gO0NwNk5AWUkzVio3VFt7fFZ1''@;'; put 'put ''fUtTMzUsVDgjfj06NGxMV3UlUjI3VlN7djBOYGhYV20iTFRDLks3IXFjcjBwMHEwcXgqfHRRbDpyTGg+S35hPW0xRGohVGo/UFlnejR9NXtLPHpLWENFaDoxXW1MOFdTQWRFPVhYJFZpVCUjMjw7SVRGUHBsR0ApOGoiSTBKZUJMeWg4QCpTRiE8SDo3YHQwUUNJUnxFfWxdRnhUTGxVaF9sIkNS''@;'; put 'put ''MlR5WSVKcyNQbDBBJXc8W3slNiNbfihrWEVnN00hUXhyYl1jKz05P2FtfDlNOSx+QmRQOlklTGY0JWhAXyg3Z19PclBROnIjNmxRYz1eOFAzWVM3QGtxTzRQRSt1eDRGa3FFe3R9fHJiJHYvSD9EeCE1aF1JJC9TV1REM1hAJXsjLDI5WzpoeDNzOUllbD9YbDpTWDBnSURCI2NTQVUvWSVpN3hp''@;'; put 'put ''LygvfGkiRGd7fDRnJWxdK00relZgZ1txS1Z+MFVCPntXRnMpOCQ4Un19Ii52aGk9RTRkfipvQEZ8ZUNkNWpvSWk2TTF8TF1uaW47e3B8PHomVE91NW1rTlYzQCpfT35pZHMpczFKVW1vPCVGaXZZOV9wc3pFIz1JQlM8eXVlJl1VQjJFWUlBSWUzc2laVUg0Rz9ecTRpT3R7RGQuIkEzayh6NHhd''@;'; put 'put ''XSkiPCR0PkNhVmlYQUJWfFd6OTVhOH1zNEt0OnZlaCFaVD9LZFNnLkwhUF8xKlJMUSsmSUhkSUlIMDxaZCk/UXF9UkVyV3Q6ZD8zcmc3TjExeXxiJGN6TipRVG9APG9ARzE+W0ImMnpKPWgxb1QhcHBFa2IwdEplaiw1e3w4Rmg8P24+OElfOkw+ImBIeXUib2hOP15Pc1JsTV5CXT8vREo9LGEk''@;'; put 'put ''O2A3eWhgbHJ7NShvZlE/XT18aWNTRSJIbj5CZTJ2MUU9dCV9VnFyUXpda1R2TEQwLmdyfVttU0hoSj9Zd2hRal1Fc3xHNFA8W150K15dNUdjcDZNYHciPWt8KzRzYTB2SEBeTXAuS2RnOUJEIyliZ1Nnais9e293fk5KMH5OdC5hPWMsfFEyTS59OmN5Lz9jMXdRYjk1VT52eTM8KyZUZiNrTFFA''@;'; put 'put ''ZiJDYz0ybiZ1VyQ0X21aIk9SbkR8IypPPDopb2x1fiVFYSFgZl1LUWhNb1AxbXNJcERoRmt+eEI6TWY9eFVteEdmS3Zlem01WCI0PCg5WWs9ZUVIai4pIkIiPjRbfUBsTnlSeWU+aUQpOUtyJlE1YygmOEtPNmEse2liZCpndmd9W1R0Rlg+dSM1YDY0eHs6Uyt4bjVvcG9kQGc5XUtkeTwsLD02''@;'; put 'put ''U0giSiFWR3lsaDMhIll3KEVRRXkrOkRiK3MxYE9iRzoiYiQsVmRlMmxMUlY8fUQxM2V5dCtTWmp8bXslYSVvKyYwJC9wZy5zJGM+dkleNmkhfVBPdmVaWzI7dWUhblMxWiN0WjE3NGJmUk5iLm1LXUMsVTR7ZGZKXyNZY1IhJVFOeF14Y3RHblM8Q3NUNXx2fU1jaDxZOkMkUWBRODQmOjpdTjE0''@;'; put 'put ''fnB4KEd+JUgrZHBNPTl7PTNqO1h5UWk+eFtie0d+a2tLbUBiJUw1Z0AvYipKT2AiJntVZUNBKz4/XjQ0U0l6WW1fMiNYI31HXXlwXmFjOkMrLzxjVyRATTxfPH01QUNVfilJeT5eZ2E2USQ0a3FZSWhsKEhMeEE7JGgmQjwyQn5nIWFXKXQ9dW9BMUFxWXc+LyVdaSZhZyReQy4vZ1pHeyxyJC4y''@;'; put 'put ''SlU4WWFNbUNhOypPeWZyR2VyXj1qRTwhU3t1eCxUUztKUnRlamZ5VFJoOyVmS2N8OHgiSmpZXVgxbmJ1P0llNTdML256eXVdPk1nKWl6cV5BK0U7TStOSz1wRjlCeDElaDteRTthTk1mMSoyXlJZcVFxfW16bTtadDZXXUh9c18oSkBGRTpeZVh1N2oycEA1SE9HWDNXJldCYFhTJHw4VyZbUkgv''@;'; put 'put ''Q0U8NXRZUXdKVDZCTU9ELF9+UjJQIk4hMi5BZk5KYFkxPyhWMT4+aVpTMERVQ0JuZXVXTz9TW2VtLzBYfFpRcktYMn5rfVIjVEF4YShNVHEyND1kTF1HWzxCLFQ6U1JRJW1fSXZzbTw8bF4yPWdRS0dTS1BldV85e0BUcGpmcjc3WF1RWm9XU0BFb3QyaHwkKFJiRU5sWjUrcT5pZyNmM3h3Jj9u''@;'; put 'put ''RExuNGF5UEJ+JmMySiZ3eUBfVUEoZyk6VyFkZkBTP11NNCR5Y1lYSGVaYnJCSzsqSCVPdWlvV3FxR01ISiVgXUpoVEo5em41VkBmRiRAVyt4PVVnemtqYXFCMURCaW0pSypmaihtNGlKdCJPQkc8S3tCXXddQGNDQCh+YjBieiVtbGElaTE4S3s+Kl5dX2M/S2ZuI3JURilUJjo3JjJsVTZoVCNZ''@;'; put 'put ''Q3BCZ18sQjxTVHVPQSJdO1s8V24uL2NLMHp4KShSals0VW0/LD43eS4pYjA1IldyMjtwTDJeQnk5RkIzeitNYT06eXFvclV1TV42WlJONGFCb3U9aTNHVFo7eCYvWnJkUltBeGV9ezxWN0NePWFLNWFqYip6Q30rcTQ0O0Qobl88P0BHYHRlRD5SJi9HaXhRKXJERFR8e0pCbGhtclE8YXZhLmUh''@;'; put 'put ''cXdULH4qaU9CL2NTI3VhJXhjdWZfbHNvcTcwRDROVDUoSURzMGJxcDk2NWUxa0EhYmBnU3VFYzJLYHZpVzBuTlZXJjIyViordEpBdE10TTBvIi99Nz9XYlV9O2dbM0tmVVZvai89T0I/V2UoPXVPOy4rcUpSdStHMGp4fmxNbzhvQ156Ym5ATi9HejIzRk09UEB+VGswVWhyTHh7JF19VXsmVyl+''@;'; put 'put ''JjVUfVc8NXh7TG5AamQ9MlUqIlB7USZHZFssPkJFd0hHbDVVPUdqWUgvTFRqOkY0bmxeSGJ9bTE+KWw8IzR8SWtjXnZiZmR2eiI+RkgofC9kJEVITmt9fjQifU1vUU5dU0w8PkhoVXBUTShfc1AhQStDY3xrX0ZxVUgpcHtJYT5tcyJdR1RrRVpPMEM5Jj09IXFbODZrbDw3KVsid1F+QVU0Vnxx''@;'; put 'put ''cV1wdWB3LG06UzpLYTYuKD5dUmpqTjEuOltfL2IrRmhqVHs1LntEdE1JPk9QMWFDL2oqdF1uMXpnTixidT9GRjZabURRQlgvYGJReysoV1gyN1VfW0tuZiZacDJ4QUZ9QSMjVj0/ZEJiTCxHcWdTcVhJTmYoeSVyUSluWlhbQigmbnFGPGAjTX0oIVJzJWNOKFN0am97azdpclZJfj1OOG5Vci9F''@;'; put 'put ''Mj8kOjwmO2FWYjN4Um80M3d9PHk2PXBjfiJJLzAzcHBOYUJxV2BhODwrTTptdDdXcz9dait6KkpAbHpRQTFfQDo5d3pCSXBRSSZLclVdPkUhJnlUM1VHdEJnQDR4UyorX3RaSEpdfVo3YDgwMl9bRHxFKTxUPz96PHBVdHQ8aFd8XilocypkPFNDMkV6K0Y0ZmxnPH5gUX48PyY0WDF2fFszUmFa''@;'; put 'put ''M3lxPD85LmRDVD9+SkxxXm04OkNVOVFJeDVRP35dRElNX3Umdj5KRGxMY1o1ViRiUTtJaW1rRVl4Yi90ZTRpJSp5KGBdUDA4SlAjcEhmLzslclEsdiEmSmMoczEiSyROail7QVJOViZ4cSs2eE55XiMqbzIle2drYXNJZV51UiF5dHhpNDErfmJLPE5tOjRdQTAqYk5sJFJKVFtaeyZdVk8hfkpG''@;'; put 'put ''fkVVJWt6Ml93N3YzJHYrSGg7UiFtbnJMKVFOZ3FOUmAqeVI4flFeRExhbEs5dDJ0VVZWIUcoRSwvJDRaRENFXk99ZXVeXXU3TVhNJV4wfVM5fDcpQCMjQEBFXTdeOGZ4JUlYbEE7JSw3RXpTZkIlSFMyJjRJLix8bGNWQG9DSz8saHFPPz01TXc6Rk5QVkpeRD4vOCVFNnQ7QHFsO0NvZEVddjJ9''@;'; put 'put ''ZnZAZWtxLERdYV1VRCQsWVR7MmljdGkjailXWklyR3JAZXd8VjFXNjdfZUBvdnZyOjxoVnFCd11+Y3BdODNRQSNQR0VpXTFqJmZCfnBOaSwwJi9EeS47XitjNylFUEJpYkU7UGp1VkY1fVMsPTZvOjcrZG01amByazEjKkE1Jmh0O3tZSGtsOio/cGBXWjoqPmJbblIqb0JYTUUkfl85YCp4IW5k''@;'; put 'put ''WnZVRmFmc1R1MmFpTEJLZChvVl1gWnRfTzNXPTt4Pjw1KShueE8qZEh1WXZ3KlIyMGk+Nk5udDk0fiJKRX47RVJNTnNbQDxrX1pENC5aI3ArM24hISR6Xk0ueXpvdTB9V2VGOypFNERXdSI4NCExPipJailpeUNtR21dUWsxZGRpWEp9N1dKQjE/KGBKP3I7Vmc8R1F+JTdVOGpJd29RTCU2KnVm''@;'; put 'put ''K25nOShyPStFNz5eckN5SUI3KHd7VSxhWWd0aHhjcnduZCNYNFQsZFVBVzd4cHpMdywjPzhqR0NGT2V6L2dyOkYvIk8jJiErek5YS250WGYhUjZwJCF9MVA5dHckPndYTkd2ZFJMPSFyfHRBLyZNR3QyK2F9fSg2OCRDV3x8IkgkcUJDQG1OKSV0fU1AW1oifG0+PzkkTE5efE17TlZFWVd2JGtD''@;'; put 'put ''fUdiOld2bmU8OVgrOFd1bXVVI3UpIms8RVlMM0c3VXplPU9zbmk3RywwO30lOFAzPS9BPSxMLClpUUEqVHAiZW1pdCw+XSFyRVJUNysmPF97TSooMzFEZj8/VXIsTHZ8dTdJRXVUenhjU1gldH5tZChKWXssNWV2TEFrWD45LmVoN3sxenVtW2BieUBUUytpdnJJUS8sRzhSdEd4YTMlNj5LQDFT''@;'; put 'put ''YEBWV0V6Nl4wMiEwNDhyUD11ZjE9Nm5odGc8WTp1ZE81TWQ4ZU04YSkrRCZgRmRsW3NaT2VIe3hdTnI1e00oQltCO1hiTnVuSCltWDIiWCovPj5+KF83KiwhUyozPWI2U0hYYHw/aVVSVnlYZ1pOJUBrQH0jK3syX1BaRCgzakRtX29qXjVAOyhRTCRwKFNIL0MpRHBFKkZzcXR5eUBefSE/JCU3''@;'; put 'put ''fCUqPj5tOyUmc1J9RSh3YjE0ZFBkQG5COChKYVFlPUc1dDZofVA2RjQ+dyVGcDU/JEUxODg0fERebDw0fFhHflQuPXxFNUk0Uz51WjV+JHQmc30vSkd1XTJ1c2ZqY2hlZjIoZjZNbCx2KncufXd2NnwjYygrLnMveV92L0FdcWpCOnVNfX5xVz43XkFvfTl2PG9CcFlqYnZtWHI/UEwoaDEyJD1G''@;'; put 'put ''VEN8XUBBcVouejMlL1dRQ3VUSWtEP31uPiZiMkNlYnYudztqKlVGfkB9angxdUR4LkJfQncwRTMraz1kZSwjeCRtUG86cFtZWUIlKzVqOVt7MSpHITpGc1ZhV0ZjNW5MLEVPT3NMe118XlQrbyRJVzw/KnsuXXFRdTBFKSRtKl89TGNDNEV3IWxbd0srIk9dL2B2Oio8PVdHSikkL3lsQCZ6V3E6''@;'; put 'put ''QnJSZEBUT25OOz1+RTJLX145aCU7TyY1NkQlOEQkXks2VFMyUHB7ez0vWCg8e2tFeDw0VjxlJTIxJlMqPV90amEkLzUjeG1dW115O150XT4+fi8rNisrS1NgKihDOTBFY19EM001cW5mTTVeeExoLik6WTJ7UDRme1F0Y0F9Slg1TlRATEJsPEZqbV5GMlQmUktnd35mKXNHS2FfIWNkVlAiXSV3''@;'; put 'put ''IypCUlojW29CJCEqWG9pfVJIKWd8IjUjTzlSM35XP31RQl86YEpgfWxZYWw/OEU5QkYqaDFmPC9ZfTYzP0hnYjd3L3BrMTVeNVImTF50JTV5clIzdmM8QjdLSS8/ODs1QWxmWmUlNDhxc2MwRlYrISU9dzw4MjlWbmh6RlJ6VEwubihHfDQzOnR8QS9wSlcrO0QudV5gdlNFSmtRZz17b0poTUYu''@;'; put 'put ''Y3JeNnlebT4hezdbVVc3IjQ0WTN7fTh6fjoueWkye1V1X0ZISCtHd14zbTlZSVBBR3wudnFwNUwvJGx6Lk8mMSV4RE1VflkrajVgUkdPRS4vNkRFZ3Z7T1tDPUNhMyF4dGpgQH05P0tmX0NafVNOIi9UI0gzZ30+WEB0ZFB4TmFVaXQ2M0J1eyp4b3EsOjBxR1I+UCQvT3ozXV5vYlVHdT5nQVlC''@;'; put 'put ''Kzxwb19nbGYlZFhMY3s9N1BuZT1KNWFhLF9Wa2p7cWNKJiJYUzJtIUFmX2h9U2dZIyxSbWJIaEw3bj5lbllXanFmISZtRDNoQ0BWTSR3USUmMjRIdV8vMHBMbWJ2JTJxXWxPRk44Uil8LkheWz5hOHhSTU1uI3djM1dlRSEuRyMpIzxNc01TbVgkfDQ7eDlTMCVKbnB0WzJeOyIofkRfXlp8Mjk5''@;'; put 'put ''LGN2QkdrU1t5OGxtNm5DUUQyVj9XNVQsQlNnVmUxSntWbEUyQmFjUVN+KmZ3OHcofm08RSl7TzFecytBJEU5N1B8SXhPS3VzK3IrQ1RtYlk0fiNbcXJje3RtVXIrZiVbdlhPJUNYakd5SzJrcWI5WixmQDNSPGJWZUpoe2ksXn4/IihwVkVjTGE2c1ZYcGBhTT88bVlyVUcmQlh6eUdJNG13P3V2''@;'; put 'put ''ZDE2eW57bChKU2xSPj5ROEh7cmpzOFldUzJXWHJddXdfakxTM2YhXU4zLiRick0mYFdhXSRDUEdgIWJyeFl5RDU4IUQpIjtzKVdnSjI0O3R0UHt6JCQ4YnVRb3t3VSl1eXQxPkdSOGxab21uZXorJnZMbElNLG8+LExLM1YqU28vXSs4YHlkeGE/JWxeQlI3bz5aMk52UT9bLFYxa1lneFFZTGhY''@;'; put 'put ''MlJNTmtyOEgyb2EkVVtMXi95TWswb2srTy54UklWUiIwU1p5bGAxPktQLEVOWDo5P09LTy9WYHdaayk+RndbM3VRQmx9OVdRL3ZNOHohIWlqQj4kTyIjYXN0dFppNDxQYE9lJH08MGRvQ2M3eTtnWi4lImsrQn5HLCpRRCtldlJGXn1TZX1FUVB7MXVRcSpnakE3e1swcn12KV5rJj5ZYGg4ayM3''@;'; put 'put ''KW1JSXVeYl58fTgsUEVyW3hOMk1DJm9kTHdFcX1oXU8uQmlmbH48SmliP2krNiRXSzl5L2tXQ1d0e1hjSF18aCwqVEpHRjhnLkJBPE5LM0ZROCx+QSteJEl1Tyt2MHtEdS5SejtheEhyKTl0eFNfYl1RQXdlRy5JSCZiKERSYWhoITFYaltQVU1oYlNjeV8hZDtrSEJ5aztPRSYpcldgYGxneXdu''@;'; put 'put ''SldLbFUqWEshOD5sdCU/ZTh2XiEzTkB2VHQobXZpPiVhLG4ocX1FQysiLHhPfUhIc1FQfl1FN3Q1Iz48XXhKd1g9aHEzYFJKc3lOQiZPKD0sW3ArS0d6NVpjXitKYmRUKWAoUylZcUNQd215WmdsQmhuIUkiYkc3IihDYG5BXVRzYntuKmwkT3l4ViM3OkhfaTBFV3UkayZlW0Y/SmJ7bHhwZnJ6''@;'; put 'put ''X2k2cVdyPGVhOWArempQSXpyNktjamRsL2IyZXJELDtdQHhwL0t6MiwzNCFNbFssJVZMdUxlU09yNntHQ2NLcWN0e35bOFlDQzlfSGJUbEN4IkNnWmhfV11TLm1KVFkhUlFIRiExS3t2Tj1TPllJPmdTKj9QN1dmLyVQXTtGQ0djJDEjaUhgVzNoJmhuX3g7NDslbyltSWlyenR2aTxtZlVmaC92''@;'; put 'put ''fEQwNz86Ky5KayQ6L0EzcExPcCNnPHZ3cmhfaVRvNzpKd00wQDkuY3Blam86VDwzTCx2YSsoWnl3UXxJZGw+aGpUbndSTk8sUSg6Vmd5cElJVypEInc1LF1oSjZmcSRrWlo6T08xNzZOWk1aYHhrUSx0OE0jZ15BZl01dT93RF80V3goKD9xeFoxLk05KC5hfCZ+O2x1cVoqXlgkQnpFTnl9VnFa''@;'; put 'put ''S1k7O1NBJXdPVl9Gems4bGAsO1QrY1g+ODIjOWpXMHh1NCEsd3hJRnNBQld5SlNETmF3cnRhKUZ8a0VkTkdVP091cHdaY0ApRW1QYTo+Sl40fXk+NkBHcns1eC9mT1V8Lmt+d1J7UnxlRWFfMEVeRz1AKnpLN05qZyFzOHsrP3dFdSU6V3cxWX07ZytTa2g1emA6WVchWStJW11ITH4pOn4wK2NS''@;'; put 'put ''Tj5IbGYmdmR4anZ6Y2clPUtvVjlnPXoidGdhImNLUkd1KC57fk5ES0t2IURZcSZWKkBaVTFAd3F8LGBvMiFpV3p4Zko7JmUyLGd2cWhtN3xeQFVaNWJ5ZVhARHRoPiFLWkRIfFRfaXk4TFcleChnU0R7bD1PVGVzRDhXZztwWCRBcFIqSm8ySXpebFFvdWAxOXU/KkJ1b259eGV5LCopLEwvTCsy''@;'; put 'put ''aDNrMWN1QmsxSi9ONz53bX09YilkKGhzVnwwOzUsPjtZIWM8djR6aXF1d1FDelZTMlNZKD9zX1cyJTwwIWpPVEZlWVowQmRMK1BZdCVBTHVyMzJYLlZkXm9HVzZQZlZeb3haPUN7VysuKCUiJiY/NSRZcTZCOWVjTVI7NCpZKlNkTlcrfjtaWyVwKXZGP3UxRiJML3FvUEBeKixwX2Y/PGFvZEBg''@;'; put 'put ''MVE6TT5GcC9rVC92UX5DYEYjVXdJR0IxcjFyWXxiRThsQkplN3pEdHExNytKWV58IUkzVSRMfG8wSmksQyxgYVp5Oz8mO089R31bYEc+eEBBa2thaSlkJl0raV9kQGJvWyZIPFEkJlR0RW1UWU15LkhGYWRjYX5JaU4xPDR+I0xscnxkRGB4MUp9aWRydi8hbjQ+dUc1WzFgdnU8QlM9K0I7WlAx''@;'; put 'put ''LmNKUD1AWXF8WXNmSzpkVSRHenZhWix1R0xXQilVNWZDTy5NcDtKTGclVUMmR1ZFTGBUI0BETSRLYz5RTmhaZHE7OmRML097TDlveD1rZTUocnFjJkFPT2tgd31VQzpYdEg9dVZXdyVxSHtSM1hreE53bCM3fFtPTm1XUHhrfm1yY2RzRmU5VnNJK2RfQkJOVVpWTlV3Qz1STipiJXJqcHxpTitM''@;'; put 'put ''PndaW3h2PzZEWnAjWWNqOk10WEZvUCRAeixLOlF2b3N9SCRGbTosWUdxS2hmY2AvLks0TypYPDc5UUZ0a0UlP1tdU0B8XkZ6aHB6eG9vY3xWXn1dZF9eeHAoaT4vZU0wKih+R0gyez5GbjQ0amhuVUo9OygwOVJzZ29lT2khZUFLPCFJRVFmZC8xPDtkfmV8RC8rclBOeC8pd194MnFbYShpa3Q6''@;'; put 'put ''SGZOU3R5UHp5eT9jSU4rej1JJn5HREBzbHlUPztGO0JKXX5hZFtFfVJkZFkoZC9Dcix5XSpuXyNjPT9MQ0JrUGd1T3cyNH0uUWdgQiwsfGIjRSJ8Q3RAU3xKalJjUltAYEs6W2l9cmkxYFZSV1BAR0RqR2ZDIk1DWEowa2JtZk1dM11mR1F8eFUoMlFWM0VEZXBCQkFUZ21kWE5ifEdGVW8lcGA/''@;'; put 'put ''d0BffHJDcHw3SFJERk49LyFvNnZCXyJXRUw6OGlkdyRRJGg6NUYrSHFIW31bL1V+NWAoe3xPPjspJXx6aiYxIVVycipoRCslMHBKd1toMUlLcXBwIj1ZSD5kYlA9bGZpbS9FPTdlL1E2Yls4TjdWdlcrX2VlO2FOfjddZjBWXSpmZnQmUilMNF0kdiQ1VThhc1dEZz17TWA8MUNNUlh9Qnh5bEBq''@;'; put 'put ''bjxjJjg9O2NlJXNCa04uWDc/bDZqNTg2bmxeVzJ6cXNLOjlONlFdeSlrdCZ4cVsqdlBYVmVKODgxTCQ1QksvfGk2VywkRXYhOHVbM088OFgmXmUqfDtAfX5DOntAPT5DR25TYThLeil6fXhPOklrTUdPYDtoV00xSm4hYFkrOC5FKmpJbSVUbys7XkBRJit1YUdAVmZRYGF1XX09cXFtZXQufkE5''@;'; put 'put ''eUU8MnszMHNjSTNzPlNdaHdhTHNAVyx+VExye0ImS3Y5bjt9MXpAQXA1Y0thamN4WXNxWXNGck9OYGNYO0JHUmFEZSNweCxQMnNwPEx8enRQbFg2OERTNW8qUytMcX5nUU9JM3AjZzshd1Z9VGB6SSNsJFZFaVtdbmp3U0UyRFNEeDA+LmREV05SailGa3dnLm9re34/O3oqa1c4TGd+XVkqIjU1''@;'; put 'put ''Z2d9XXdRU2taTjpxQXRsayZhX3hGUHI3XUNkd2M8In1uajdRQEA6UjxiW1VxVVEib1Eiby4mUSttSiMiPXdFK3ojIUNvKl9ZO2U/aTJOeXZgemNGdz4mbjtLVkpOOTVJTzJ1NmxPdGdWKVUiRT5xdUI4KmZMS21eWyJOc0Qse0tqTDxCVXtSWSEmXUNiQS5BNG1aRzlWNHJGdThpXXo2ZmdOU11B''@;'; put 'put ''QlJCeDBdMlVrUGZTNyU2IlpwJV57czxYIkhlLjpyQ2F7RnpqSTBRLGhKdVpqaXhKfT5YJDdfKVtxZkRXOCxtUyY5dmYjTnBNTzRudUdpbWF4ITxTRkZ5P0FlSENmY3spdldRZztvdkdkcTNJeWA0bkA0WzA2Z1tzdnxKNUckaEhpaWlQa2lJLDo9ITFkd29aTmYze1tqZzlsKkZUN1RbLD8qMC5M''@;'; put 'put ''cDZkNm0uUyN8S1NAazZXSGdeLGQ0dkZ1KFV+OXUvfCM8a2JuT3NNQS9OcyNgNjdVVnNtOzU/XnFkZnhPfUVUS0dJbCtKJDhCJTdFVEw7e0IwOEFUZCY1cTNkUztvenU9P2ouNDhUNnNeWzRzUnBMT2YsNXppekF1fFo1fERSSUZyX0hBP2o5Ykd3YlR7ez81V3BhSV8zSjt6e04wa2ZvNzFQNj9n''@;'; put 'put ''Ij0kfXE6bz5zL0ZZZTRSJE9hX3g6Ln41LCVvN2IyUVFKSWJaMkdKIjVjPWpWRTYzS2trLjBgOFJYQDgkeChqOzYhTWcrWH1kUnosdTZLdSs4Kmt4RlpCfEtYYldFVE5hWCxURnJtJFJKLH1vRjh1Vj55ezUyZ3M7MHtEMSV1QFZjNztucS5JPjJxdyw3UF1CXUc1JUQ0Z35dV0sjWXNTYSQ1eF8w''@;'; put 'put ''Mkwkcl1RPStzKXFifTAyO1BTWXBSb2xETjxKfSUvNkRYfk5ISEBxanJyRlVsTHtCSiZgK1ZFRnk0YW1IYGUobXFdd3dJN1JfaGolOGwzfkIudj5Ua0wxQXo4ck9dRmZ0dXVKfmcoLitkYURteGdna04kIn1aXV04MWpnTlJSJG82bCsvbH14SH0+Yis1d0kwZCFbO2FjL2I7Plg5e3N+MTBRSUV8''@;'; put 'put ''MFkhUyEzL048ZmhqRT9UcktQMCZAQHhZQkN+YFBTZ015Q0I6XTglbyRKbl97S0YkS1csW1RqXSM9amR8bHRScEVrbD9IYkRbcyxCbnEwej8vU0NuPW87ZngyQzJYbCVxKkhPIVhwZT0uXW98Pz9jVzh+QGd+YVk3Tjs7cWJdVS9LOndlUExZZXNUdV16MDdsSWZLc2kmeyxuenkuPVd6bGYkTFt9''@;'; put 'put ''OjJlcTYkN3U2ekZBdmJWRE51VnlSK0FPP2xMfW14SkpxaXJaYW5pN1JQIXJyLjwqcFkxO1I5I19lT09ta0dEY1pKYD1ycE5ZI1cuW0pJYGspfmtRLDl4aTt2aV5vTDZhfGtWalN6UmRubyxsK3hnOzdCaig0LH5mOCI5eVF4bVNfXUlMTlZqRF5AaFd0aCReb25WS0YjKkN3eCJGSlRAVUxNKVou''@;'; put 'put ''TTEwdn09TDZ8XTRwfmUkZjtELGNZJSt8JDVacWp9K082eGM6On5UfkFYNi9Yc3AjSU9BTlZMYyhKeFZTUz9JPVZPeCtmdFIhJixten5ia1BeVFI+flV3PjxjL21ZN3lVc0ZMRlF3K0NqSU1nNGh+K2V9UExgNF12alpZMjI8PjRFaihKWV9aVk4wdz1CYSpDVlE1ZjFqYj8xLz98Q2RNa1tXdWRL''@;'; put 'put ''QWVaYDBRQlZUfFVvaUo1R15CMklEOSZAQD1yLHBffXN3SXM+I24rUi9TbFNqeyNTJkk7RHNudnZxfm1xQzp1PjxFOCtjNkZpTylBajB4SSRWPiZ1Rzc7Q3V7eld6NjwkUzRJLC8sbWEyTzUvLEhmbV1jZT1yRz1LUXhre1l2NENOYkE1andbZ0doJE9PUXEuaSglOWdYcEZtT0dTNEd2OCRLYGNA''@;'; put 'put ''SEFZMk1BTzpzSm83Yi5ASD4razM6a2N0YSN7KHVQRnV1SjJ2NCMqS2p7dyhFYCNqcWVgM3wqT25Td1ZMZSg+QGVOPn1lKXQxUDhnfDRUN0ZkZTlNS3M5fHd+aCFiSTkkYSQiWkpnbV1uQERtX0RdOHArMEM4VT4lNlRKUnpCSXk7S1Q/YlQ8ITA/SlNmVjBZe1cuKz9kP09PVX5yJWAiSWVDR1dy''@;'; put 'put ''VUhmbT46cU1EZXhORGBiQ1kkPXg8LkFuYD1hZyhIRXlVWHclK0o7LkI3PllaXU5HQjA6Wm53WCg+SmJEfW88PVd3fm8yVXVYcmNbaCRgVytsI3VDI1ZQaExgTT8sKWQzQVomNCxkMU57OWw6NVJJUjBESWM1PC54PTFGL103K0VHaWgsbHxwPDJUa2UxcFtwd3JkMSIrUHxNQXRrR0pQL1IhaHRD''@;'; put 'put ''WDglNnFXLDdbPG9aWHNyVWhNMWAoZXxHS1h+cFgldzNlVyw5Jm9JUXE4LlY/ZGhIOUEua09ZYzhwYGhpS1NDNDBsKkIzYUJaYHppanMkZHAwfnMjZEFsWUY/LGldUmF7XWFHKDx0ZyFeRUxDbWRHMnEsSTpFKEJgInVlQkVPJFcoMHVFbFZjOUwwLl5PZkk0S0BQY0BISTl+emo+XjN0dXwzcGAk''@;'; put 'put ''RnZYMzRoJElKd1JLdjZIZXdQIUksWTIycjVIRC9BOyJJOkFySmU8eWFlfVhlcGhFbGp4fCIyUGtwYVhvOU89Myg/REhWOS42Jn5qfSZYRFsscUs+Y1ZDPyp9Mnc9OjJQUE14Ul5uWDFsXkIiWkdAaThxdDpJfVZEYCMxYTZlSWFgS1I7WyJ2NW5JJkI0TlQySkdNT2paKV1sd20hOk4xfUF8L1gx''@;'; put 'put ''P0V0QjhSXXI2ZE04aEVzaXdnRFRaJHw8K0JFJCpLeTU1c1BWOStZOjdDMntXVl9JaTM/XjN3REFTR1Z5S0R7TEZQdFdkdmB9RikqQWdUUH5+RjhpSV10YHksYTd1ZyEsQXwsMkxSL1A9MEUjNDswcS9Qdzd3O2lNeFFbKWkxeHhJfVo2MCNUZ21tPlhJUld6ZEw/KCp0VXRIU2pGTltudS5MWCo0''@;'; put 'put ''JmRNdXl9emZhd3csQWB4VzszU05Oa3NJcikrUHBNXmNOMWdKNT1YdTIhRTZEc007MUtGJikzcTtDZDMmRXBAa3BtUlZRe3hmNCFuKzlMeXI6XkhpSURqWmBWdTgobn1ZblhyVnpMPmg5c2xvJiJxdkReQ2k0fGxvWTYrOixrP2hieT4pSy9XWiE0XT5kPCgvTHMqaW8rP3lFKl5OMiEhVytRNHBi''@;'; put 'put ''VSt0Y009R0B3ZVN1SCE+fkdAV3opWi9DXTZtNHokaiVBIUk7JTBhcThQZzdEdSl7eW9gdlkrJV4yQ0trWypGPDQ5TE1bSFpOVXlLX3UlOXA+alBJXl1xOiw/ckdlLmhnYUVZbzpLRCg7TCNiT0tHa3xuIiNPT3Q7YVsiKEc3Sz09KlhKMEZ6fllCPWFYJk1BMnA9JDFGaXdoOTZGLGpAUmlnZndD''@;'; put 'put ''WkQyTj4sRCFyRyxheE5fV18reXc7Kz8vaWhXYVZYOzM0K31lZEhlPkgoVzskfWwwLnBwTmhbdm9vSU4vRlBFLE02O3Q4JmllQkxRJjxddjQvaztzPmVtKj5bMHJAOG5WYmlGIXI6VH0mQDZwQy5CY30+QnNoUDdNMCorTjYpZFY1VlF6T0UmWHEwaWA4S3w4ekdVd2lbWi9oeE5NMTEiaE5bcjpo''@;'; put 'put ''YGZIQypXNVtYTEBSU2VeYyo0NDVqdElTbWFSTXttZDdxOWdYS0JfPz9Oc1RYS2xITnM6KzNTdDF7Uz1MWFdWSzZaQ0h1Wj9fQk1OeT88KVoqRV1dVX0ifiI4X3YlMzBlLiZ1bWV4OW4/MyVyJC5ra1ZOenBvS0tLQzg8Vmk0Jn1JP0Q0aGV3bnxFKFVTZ3lPPVo1YlYla2ptQ159dHFKMV5YMVh2''@;'; put 'put ''UCFNYVIrJFFWRnMpS20xKV1EcCRiXlppTEgsMmhjVkAoU25YUWkzNENwMEpeXkJ0emx9dVlPdiEiOV4raGNjWWt1P3VZT35nUVtIYWc6cypzYWE8O3d0eyU/WGs9fTEqbS9wc3tLSTEvImdHKkNHSE48UElBcGFkfjlJNCh0YDQ0d3ROcHF0SjlEQCNmbHFXe3UpRWNbUEM5c3Rgem5fZW5MRUxP''@;'; put 'put ''bzdSPTg8YzxYLl5zX3k3ai5oaEdMMilxOFlaZXkrYEVPTVd7bVVkZD5kR1VQaC4oK3toc3AlciJlKyE8USFPNEk0KHQhWWtBc3BOJVVMczp3XXIwXVsmKW1GfE53TXxbcFZkM2g5M2xzK3pDOF5nZnhLPkNiMTdpUy8zJVg2eEFgUzlRYGByL2JKX0R3ezVHQkl9SzhaZV0pdFp0Rng6WGtJX007''@;'; put 'put ''K1ckZHN3MStlKitLdFMrQ3ReM2EsKGJAKS99eHNMN0ZsT003ZWUiJX10RyFnZkNgWiw/TnZrTTBDZSY/OyspU2djSz1DTVo5Sn1ySkcvdVNfaX1oTyxoY2VhcThjN0JHfXpJWmJPMXFbNkFGNChkY3k/R2A8LkBWMHVaellHSFo+Z1RSX05pSC9AUE1qTW18UWAhOzsuIzhiVnVNMS5PPmhHP3JF''@;'; put 'put ''cyh8NmlXTXtLd0JFbUNiQylbSFpVKT1gOXRtZjw0VntNUitdSzUzI01nKWFVbmpxeVRqZU0/Iko4O3JmNjZLQU1eKkNKR3p9VFNSUjNOaWtpOX5NMDJJYTY6OmlHUmkvRzAhP2FSd0NpTUtmfE0weWE0N1MmaHooUjFaYyt8QzcsPE42fSV+cThwanBVbVljLGwxYCE9MExJY2l6cCM4NTkrP28k''@;'; put 'put ''PkBgYDR4JHFXIyhxbnBCPkByInA2MXAsX092WXkxbig8cVhtMEZXZztwYiFDUiVpNSFQcUZUUThTUjZ2TG1AMlMmXmFvc01QM1IsMUhveD9GTng/JjIiTXZpZ3lPeD1ab3pZd0J3UCtfWTUqdWBpT296anRKamFNdiUjMzhZJnVoKUQ1LilPZWBJUjxpeEoyQ3JeRzQlLDFCZW1dK2MwcHBvXXkx''@;'; put 'put ''I2A2ZVg/QzUsSnVdJE9qdCUwKjwqZUN8PDF0eXhpVl1mP01BbUQhQlU6Zi9eKzI9YygxfFtDM3YreFJETTd9LmksNUM7dGdvZHJOS3hYMywsKkteNnVsV0dZJD15I106Z3hAcj0+NUdLXk9FN0RrXm4xVXFJa3hSSXhNPzFROkksS2FdLHNgNWIiLHVgd35GbmVNa2RfSU1xS3Z+USRxdiU6P3pt''@;'; put 'put ''aWlIUTg7Sj52XUBQREQvMV4/N2FAa083eW0jTXZUdU1VYnsxREt+Lk5fMnx6SXd5eSFfTi45TShLfEg7cTtSclFUL0pIWmhLKi5QRTckPXExYDNsKXY1Zl9WSVdINHJkNDR+bWFae0x0MzxwOzQ2c0lyTyEpbSg9eD4qTF1ob2BGIUM3LnxRbl1geklELzdoRS8sSFp9c1leRWlycXJfVkMvVkxb''@;'; put 'put ''Olo+bz0pak9bI10ifStyNVZYczQmNjpDKFZyaUtJLHA5L1l5NXFycGkkLzVLcE5gZiRDKzljZVBdTmFfSEMrT25QSFU5djBjaVdEJjNZJnYvI0RDNjo7JVVwUVU3QS4pVXs7eUcmRCldSHMkYEJ0JmA1SU4xeURbflVVJksoV0NISj43I1JYVmBAIjwsbitDLz8+WW5YcipGRmN6N19RVWBiWCZT''@;'; put 'put ''byl6OHYocXx5SW0qWE49bnFnJWksSWRqW15Ben0ubWFyPkxKdktwPmNfJi5RM3V9VGRULm5WXlskeyEmLnNeVHlKYWJSZlRHUk1TZXZDbXIvdUsvSj0+eF1ffXBETWI1fVlkT1JWS1EuXW42WiohfSx0ITJyXlVoe287KE9LPlsqdklITkw9UVNrNUVVaGZYVFI+MG9hbGp8KDchPTBeb0FUJUhf''@;'; put 'put ''Q2tUQmlKMHI6VFU8e3I6N2NgYCovQVpCYzYoOjFYMkhndGViS3lRQl1oZi8yaUd9alkwfGBteVIoVjI4Vmk7V0c7USZZS3MsYFQrLyM1aUpAbThNSyNvZ2QrJkt8ckJZOUxPMlFXc3VSbjgjT0V2ZyosdmBbe2sxPjRiLDRGXjVnWyw+UWlQQH0jSkkvWWsmRyN3XXYjaWU+eypBYWMqe11NMVdk''@;'; put 'put ''TFtHcmM/THwoe1VJdmRnZl5LPFt3W3pkfmAsIVs1LE1Sei8ufXh1JVhHPWN+bj0/d2hnZkNaPXtoUW81Jm9OPy9ZYT1remNteH0zWiN6PU1tLnwwKkc2Sz49cylRdE4oaF5YVDFCaXBXTmExNSx7MFQ6MlQvU1E4N2wrWkJwamE5bCo/NlImOixgQERkNHI0WTRAY2BYc01rWHNfMVIibFo0Qihf''@;'; put 'put ''PzljJmVOaDpzfHJBfl9TaTwic3VFZHE/YFQoaCIxNG8+JXd6X3tse29xJSJHRXtDe01KYTV3fjNwbzx8cVlLU19fVkBEc0pgIkt+OjYjalkuYzJOd3khWGk2ViI8I3VMdWBAdlA3dV13M0tUSSwjeEhNZXttVDBpKSYpP1IxUD07SX1QQjJIWyVPJn5VTDohVk5GZlIiKG5OWn1eQnV8U3NgMlNb''@;'; put 'put ''bzhqeTxObHZhR0hmUWBaaWBKbWtlalE7MzBvPCo3YUlBaXQpeUVUUmQ0MnMzaUBCJml8NCtXK2VgTWp1KitUVUVxaysvI28sUSZLfV49bUFlfFtIUk9kKyJla0VEUUJ2UWtAd2s3MXE+VFgpV25iM2s4RlVEaFdWWHF9THdDTVA9MlV0P09yUi4lcXt2TVl7SkVeQSxoO2lLU0MrTiJlLjZRS0FX''@;'; put 'put ''JUQ5L0FDWFNlJDRKVSt3e0Z0dlQ3PUkqJk5zejhdUXVXR1pUSTV6OWNLdCpUYFF9OXUsTlJmSFlBQipLUlVAP31QPXMzOnRPcUM8a200Y2NvJSZwOD0wWy9mYXY5N1pKXyJvN3AySVtFfmxXXW9+VEJ0SmExOG9QQz18SHxAaFVSfShMKn5NNF8iUVFwIU9tIk9TMmlxPGBZcjgiLFhdXkIiYnlI''@;'; put 'put ''dTkiIVA3VVJwKXRnTWZbfTQ6VUBKPzxGc1lgdVkwcFBnTHhFRTlpfU9dblsvfTFFTj5KX29MTnAhU2JKKEVqTD82OmwjSVMoXUVTVVUlSXFXenFrWCRQKWpyYiRoLiNEO2xmSVhLfSQ6KUx2Vm9ofSxlKStwTl85W3NULlNdXT1ralk8cSVrKndZNixmYTslXSF9P3Y1Q315O0pYNkpkJFR1Qy5g''@;'; put 'put ''ISJLYEAraUE6RnVDQHNnfiRfbl81bms8c09TUmh9fCJseCFQMCRQTVA4LDg1ZGk/enRCQ2BOemtjTFJKYG8hVChCQjgsSW9zSlNTKmxuLDIvMXxEPHtJOmpMRllMRGs5I3k0OWZjZmVeQWEpSEE8KjNNe0wsY2RPbiU/IipFJHRRXjltV3Fvb1Y8c2AyUyQwSENYQEAmfSJnSyJfNHsqYl1NPV9Z''@;'; put 'put ''LyN6ZDNoOTYuQ2FNfiIoM147KC9Sdi4rdG1obXtDbXNTWEE/W0QyYCwlSy5weUROVWd7elY1S0MvKnl3X0owMDZEQFVWPjZKXjImSHZJRlVoLDE0TFVFPG8oZ0x8SWxEd1NhX0o8KCldL1VsOzA1RFkwP05bcXE9KT1bQCU4b11vI1dyPSRXciZwJSZZeT1ePyVvJF4lYHBEamx7bEhkR0lHNSs/''@;'; put 'put ''bDxwc1QjL2lyQj1XYFpJellJMzhPNV5JYkErMElgUVhAQSNgYDVET016czpZP2VBcjdhQikxP1RtRUcmYGZPPndFK3xFU1ZVUjdxdk9jQyEsciRWbUhMd3dydFh8WjRESE1AYk42ZSt1RSJhO21QUjlOenc5QSlqTnBxb1kxVnhWaywqSGFzPUl1bzV0emVHO0U8Vk0lQHVNaXE+N3tDOC9OXylT''@;'; put 'put ''Ij06Z1JudTlFUERlfmorcCRsfT83L1VCQ0xtTElXSnk8S3xWRmJHYz1JPWBJXV5AU3svbTo/byR8OlAvVSVjKypIYHEualt3cVZ5VUElIj9bbjNkNTJTejIxYTtdPTxtYkA2byRzW3BLPn5PVXsmXiFuP2BiLi4kbXJOMUVOLHQ7NGpSWHFdKG0vVWROWismcERjW2tGVnNARW0oLzpmWzA+a2xs''@;'; put 'put ''UV5AbXQ5X1BbdXtJRCtZXTY+JU4mTi8ybFlkOjcjSDldVTVoYUloUl4yKXZSLEIiXzoiO1IjKXo3ZWNIKGNaMndSTD8ob34mQl96P106Oz9nd0VPeDRKYjxDbUZVWTo4aHJRYkRoLlpVLF9AS2pNLGk+XzBWWXFQa09GWjtdZGxpK0RZWlU1cWQwaXZnNSwoLkQ4ajNhS0BRXyU6KSxQRF8hcTo/''@;'; put 'put ''TVQxMUxWe3lZJDAqJmVjUj0maHVaXmRReGwzb3VwfVMuW0dYY3MzfjJPfUM2VWk4I0d2OEQvZkYjMTRudXYsb1ZALHE0OVlsQ0JXU2JLWCxWWnwoPT5gbig4Iih4KGQ1X2AxX3g+eGwmN3t7WW5CPUFxZ3lBc0tLXkZDMkpgPFlTU3RsfG0yMD0vPSNrUndPfCk3fF5vdFV4dTFAeHBCZjcsanhk''@;'; put 'put ''MW12OnZHYCk6fSEmeyZqPyFUJCVrMWVPYV1dV2ZZclI8eWw8PV8/Z0xgQyRqPThrYWBSO1IkLnY0Sl5AQFdQO1RjZWpLImFHdl9yZil5NlYxezZUSnFCXzYrQGI3V1U9ZSFQOWRdNW5UbjJzb0JNb3E4Nz9wZ28lOnpOeW08MX0lWTMyIVo8Jk9uXTg3WGteUEElXWhiPF9zZVlJK11GZGt1c1dU''@;'; put 'put ''QDYqeFVwbyp4PnMwfm4hJXlRRCk9TEBwfHFjPXgqclpFQzYuYG5tUDBRNHB1UiNKQnFBJVdGI09RenV8Tm1vY3tDVjFHaEBqaiZdMHV7aVc7WkpaM2xwLDk9KnNqYklOemlwLGdVW3o3Kkt7NC9qQWVPTUltaTptdyFBKXtAT1MxanB+Q18oT3JSbnd8S2w7Kn0mTTBWaz09eE98ZiptKXRUdEkl''@;'; put 'put ''MVA/ImhXd2U4e1tVVTxedHlCJX1WKiM0U3ZHemkwVEtPWyIhdCohbE1gWHg1alZ7JmA6UmNkRiwkOl81VGNpayZPS0UvSCQuNmAsRF1Ze15KTkcmX1J4N2MrPmNzOkojX11JblZBbVkjYSw7cSx9QDlVQjZoI0hYOS8rUEg1LEd3fjt1a2pQYm5KVns1fFQhVm1ae3UjMlkyIWgkYSMoZXE0Wl4h''@;'; put 'put ''aEIlSHRSL3Vsd2NmX19lTTVPMU9wQ1lKJFgkaC5FOVFqKnQ9dD50KUhbQm8+ayVHS3ZFMUxJbCwzOnYvKyRDKFdpREBZVW8jUV44LzghNm4pNUJUfFE/SFNPLmtrPXlgSD9kREQ8dDQqUmo4e2tHNGMvMDFdYnJ9P1hGeXdbc2B0SH09ND1UXndfdytWVjRCZDp8aEZ9YUQ4ZSJwKCU8Y1txSjov''@;'; put 'put ''UH14aklxezU4d1VOXitLWVNMPV8/Mm0lVFRfWCJ5Yzw3YHhlfCJoIyhfSUQ4THU4PEhMcDhJXjVMb0ZRUFMscWZrRShYTEtgRlh2MmJ9TnxVKERxWW95O14hM1Jnc2YreHlIRlEiVyxlY19ZZUBEIj9ocVQrRD53WTcrWCZlbnVLSkgibkxTcFtiMXdoMCtzfSVqOnUsU0kocCxWUS49bWEoISl8''@;'; put 'put ''JXZ6UXVvIjloZmlbUHRwanVrV1ReJVVofVtVT0xqSF9tIUIpPEs9ek8hWX14XmMoMS54Xzg7RXVvenomNjczJWVycSRBJkFhRD5pSEtjWihKYil3Z1ZqfnVNdCFtVTFXSGlkTHNQQXo3KlFDNDVoN30kdWZuNmtGelF4UTwsTUxDaGpnW2hAP05+IWRpQyY9XjxlWVV3KWVYVTtlYztQayIlel12''@;'; put 'put ''PXI6PzM4N2BwcTJaakRSJDZLLkNJa316el59JHhPeEZFIUhUPlY7VmA6KWpyLlJ1VXw1KlE1eFFzQTZTOzhnNzFRbkhTdG1WP3AsYTs0eV82MW0xe0I8Imh5JGg2dSQ+OUNmUiE8Sz5CYWMjOG9qb2BCciZ9KFZEQjUvR3xMdDExQSZCYnhKLChfbyozZH1qZm1nfllSWUF+RllETiR6aSR7NndW''@;'; put 'put ''R0pXcCRjNnB1WmpQcGQ1PS5VZUU0ZzYlJXs8cXxfTytWeEZRTllJNUtvWms7L0UlP1dVXV48XzMhaGxDS19XWyZ1M11gPDkrOVM0IyFYYTVeQCZnX2xaVGs8P2pWL2Z0YShYM0dMYEttMT0+IltPOnMlUmJjQjl6WnY4LEFSZmw1Iz9JOEIlMlJIdW9qKT1qdS9KWH48WF1BaCgxeVlGXz9qV2FN''@;'; put 'put ''UkQ4NXYqSCg9cVs/SHJvOGVbY0wsc0Q3d2ZpVDNCfSo2YzEiW3BabGtZPSFPOnhFcFNmO0xQUlZYbG1ALyMmRTppOWZ4M2lkKTh0WygrY2l4NWckODFOS1FBay5ne0FzLEVkXn4yLFkxXmo2dT9qYz1oQ0B5JlBLUGJXQ0IoQFpNNDF1OTJNLiQuOzk5Im42OzllfioiP0A9JlQiaXhOQUA1dFt1''@;'; put 'put ''TnJqOUx1NFQjOW9LQWJCPjNCfV1nS01qfllZfWJ2YDE0Vm9wS0J2OFkwOytjYSY5YkA4Zm18T3cqeyg7RWooZzxFM215XlM9QEhDPFssPFIwJURvTEByWzc3LkB1YE8xTEhBejo6eXJBPlB2cFgoXkR7NT9wSF8uIXA4SzYzQi9kUnxKMiZXX1ZpcitVJXQ6bihqalBFLHlub0gmdnVfSnxMcXJ2''@;'; put 'put ''JTt9diMzaUYrOUwmaiVYRDpgXitlTz9XKn0qQ0BbP35pPmJVQmBdOGA1NnIrYikub10mNnM8XVNBMTQ8Zl1jczB3IXNQeVs4PVl+VCFzeWZvPUk0cHcvSDZtJllpWUleITZ3KFN4PnBmXiE/MG4mR3FCPERvKmc3Myl4JWhqYiNlLjk+bk0+MHBwOV4sT09CTkU9RT41QVYlfFlwdSg5RyFdTTo3''@;'; put 'put ''PEglRCRFclRdT1YpQ0RyIkA4Q1FTYThHPVNWQG4yWSpLdDByNFZ0M3ZsS3JKPGszK1VpWSsmQTFgUHFdOkFhXzEpSiMpJWtpamVWUjNPTCEmZEE+OUxTcjgpfjE/WjA1bmN4PmxMPnFFcUw/UDBDUUg2MjpAY3tFQEBtVjdMbSh+UjNCXkIjZjBtYS5JKXouQWdaOT11eyRdSn1yUCNpaT9te2c7''@;'; put 'put ''Xy9INzU0L11wOVFxa2xdXSo5Y1s4TSsxZ2FWbD8qTXB2QHh6dkpDRm52P149dVVuNktDPWNxRlljW3g+VEVJMHU7QntQVG1zPWppYFQzejsyQlRUJkxGfE1JYVlRdklTY34saCheWDJZLGVeKy5GTCR9U019X2kxJEQkeHFSYyV+S01jY2BEZXx+REgoZ34wQWwqIUdbcHlGTVoyPXEuK1d1aUsk''@;'; put 'put ''Jjd2Unw5LHxwcz9mUjkkKjRVfV5MKlkkcHtIajRXVyt4RHpYenl4P2tmTSE8T0Y8OVNGKGJ7ZUZNWjNGQ0QiYVdoT3JXTXMlXSF8PT5WUGZDe25mKC4xLHYpVlhxUSxNQF8rcE5mSVc9cyVWVFt9MzUmJFFGVygufFtZP2xacHt9RGFYeWl6XkJ2NzQ3VXxlTiM5bWZAOnNFVU9pTnMxfjF+MXsz''@;'; put 'put ''fktMPyk2XVsqUlJ3KnZ3IXBbKVFDOUtKYDs8cG97PVd9Tn4hcDt+c3Z8PGxieSlnaWFySnZiXllGeGVFdE4jNE58KnxLPU15fVZrNFFEe3M5NjgiS1NSe1QkYi5faU1YPmclTmlXTjcqcjlZV28oV1ZsSl1EfiM6Ql47PGVYITdPIiVjRShvIkF8P0s8THFbeTtWL2Z+bF9JQnZ3MER6PjZRWWJ0''@;'; put 'put ''PjZhSXA/dnpPRDpJVUNKWG8hfSFaKFp9JEBUQi9Eckt3cjFaQFl3KGVMNGQwPmM8bTV7dS9Se3VURTRHfHRHdG47LGtOYzRNcV9SIVBvTTcyUmllP09KVmR6VTt9cXh2T01lanBRIUUxcE58Vl5RKzRkJURaKn5rIy9MYUM9TDglRyJLNjFgO2xhUVR8Wz4/OS4sOSxMdUNbdztpM1tkU185bzlQ''@;'; put 'put ''fSN6dyxANmJkVGlXUnMvd2FRVCZRR3M1ZGNGPTBXWztqRU01VEV7NVYhJVFOIUlHTGRZOCsyNFoiWXJePWYiQn43eEYyQFc8LlFmT051Lj1Kb19nbTZ7YmozWzY7MHpRVEY9N3hMVi4wOEQ1UlFJaDpeRih+WVNrZ29WOF5UZGlBaEQ7Ynl1VFhLWmphQ20veGxKQ0VNRU9FLkdwTUosPz1sWWdz''@;'; put 'put ''eWl3RXJYW2ZWNXdOV18iODJkW00laDIxKmwiKX52KmhFQ1UqdjJ9VVo0dTNqQlMxdGlKLj9ERmc3WT8vcj40IW1lTykuZDZWU2tBeUdoZHxnSkIiL0xaMzdhWEtxXz0hSEl0eVs/fV9WJCpKLyhsWX5JT3o1Lkg5V1EqU0dJKn14fGZwYF9dP2ZwTUo/UUNMR1Y8UVNrPT5gXl8/I18jUjdKV25t''@;'; put 'put ''e2B7Jmk0UU5oWnBSZ3xuflRvUC4oczxQalp4a2kuVCwldnxxa3kyTXZ7cDFJWCUrPTY9R3BAKjpTSmgvVTd7RDkyYDZ9dVBESntuQlJOWkcxbHI2Rlp3anEuKiFsTT47Vi9IXVY9Jmp6cjkvejM1MmBEVkI5OHRedWU5SlBJKGtYTXNhRHlxUTppI15PaDMxIWJQJEBNc2A1cjg1SWR9Vi4wOHtu''@;'; put 'put ''LmBZcDxDWn1KeFh7XT96fioqekd8ZUZKSUcwdDY1Wnp+JFEmJHsuKllWKCR3dUo6WjFeakR6VDB6czEpTVo0fHF1PiooazAzKDcwWUN7cC9DITkkT21OYUswMnRNVF1BPUI9ZT14SztzUDguRV50Qm1PPHU+X2YjI0R0QmoiO1ZrUkZ3X1EpJWwjfDpGInd7KzB6YTI2ai4+dnRUUTtFPGBfQ2hY''@;'; put 'put ''UntwZT5YYlBEcXtHaS5KdmtMOSNQRThHOlcoN0Y5e296YHB4PVA2c3QkLGFQQGcpdj98fktaVHxJPWhLMjkpSnh0fGg3YzROaEBqQXJVPnlxWEdrOkQmRSRkZyhDUyMkRDdiJC5+JUo6TGZVPFghOlNBPmhteDFmK1NDRCgsa0ohS107KXBSajNoSTk5R3BEPHJWRlsxbXkvL0k3bHJtTXh9SStV''@;'; put 'put ''LEhHZ04hOXZ7cE8yTl1EKXkpVC5DKyVtYjYhOEY0KC9YIXl6LEhQJX0kYDErSXRtemhIeWRqLE5MeXZxd0pwNUNdVzM/JVg8QWdmfnNQQ15hcUh8QHQ1JCRsQHJiZ1hLcV8jUipPRTdZXSswdXBmc35jeyZBKDkwZGorJD9dLD0uKWU6MkZDNF45JGs7OGtZYzBkMTRKWDp7ZyNQP2FyOGZxemk+''@;'; put 'put ''d3dNfXI7anU2NmNxJVo1dnQqdn5nNzFue3BAY3l2YUIpJD5rY2hLZHt2Xksvc1pVfnNaK1deTmlaV2dBaXs+KWA5KT5UX2xSflhwYjVqQl8qKkh7fDZeX0Q8VWl8ayxBXX5vYyNGcX1UYiljR0gqeT02cHAodXwzbE5lNVpPVlRyV0VNO2N9ZEQrJU58cmJtQ1opV0E2cn4qeCNXfHZySFk9KGVK''@;'; put 'put ''OWp3X0RxUk1gPnpEdVNoZ3tHPSJHPF9Ldm1rc0ZHYVY1YDBXSE9XK0RJI1F3K2c1a2ZIW2VKcWNrREkwcSs7T28wMTE+cCpEYjE0c0l5XXVeRj4rWyk7Yks9W04/QDxoZD9CcGZJVUJXOyUodHQ9SSgwcEQlPjlsMDl0aXBvaSZSS2kmfnZzREY7QD9bJkRkPDoqYEU7JFVQel52Vi54b1giJUVD''@;'; put 'put ''RTskRmh2YjgoVkVjWFYvR3suaSlTKldPLjtheVopfnU6Uy5GQDlAUmw1UHFuVD5LLmFCb35HK3lgNz1fW3ozdFBwLzV+R2U6Oy5jc2tBISZpTTtWLExbSF1scGkrclVBUVdJaDJaYUt3bFN4JiYwVD5KbDV8YTJ7VSklJVIyKi9SPzYkOHBzfEdSRzNJXlpeN0w0SjxUbWlzPUY9eUJAMG1YRTA5''@;'; put 'put ''QWNKWkRrcHdvVUZ6Pkk3PVc8SyskOkZbQio+R0hbY2Q4bF9QRiQ+amA4QCN0Oz48YUF1e2RpQ3RfRjF+QUFDIm1GJEZ3IzU6PDBvLCVqL0xvM3RsOGo6Q1NMUUslYz0rODBGMDJCbVsxNWl5JUNLY1kmcmVfViNjTVZPQU9BIkdvX2dxKnJgaldDVzdlSkpddiZbZkNMMm9NcCUmbEYlJllzQEBt''@;'; put 'put ''byg8MnBOXTdTK2V6SH1WXkpWLn1rZW5zNDtxYyRPdUQwMDlQZS5nb2NkdDxFQV4hKCo3M2U0eFRKOjUjbGohbVF4KTd2U1J3L3VJVmc3aDF0OW9Oc2Bwfl5WbkMpdGBHaT8hbmZELzxZJHA+azx4NSxnfSZrPEsjPDRsPz92aGBMUVNpR2g6e0VWYDZtU0VrbUFeUWglS3dLckpkU0FhNWVBJmpJ''@;'; put 'put ''IjdqOjloQEVrU0BpbzZ0PVdoNWVoUyNqQiYoMFJRSFQ0K19nNj19YCJ7KCtseH0vRHU6QHExM0VLRz53LGA7Z0JWMCl+JWoxMVhZKmc2MllBJmwvYy5yfE1JQjVpcnlaellfPHxdUE5RVE9OWyRseTthZ3Z0bSxCXSp9PC9pbUc2SkhDPi5vbyU5RDwyK2lYW1dfdTFdQSooKighdy9kYiZoeWBH''@;'; put 'put ''ZitxYldCb0JVMGV7M0doOipDI2RTZndpPFRtPGhTaW4/QD0jXU1HUEZiMCEqKGlHW0kpa1IsSzc3bnBqUDJWN3Y7TXRLJTsmcWozQV4sWk0/Y21VL3FXRlZwZnBpSFs5X1I3X2BsLzJTOkh+ZDZnJl8jKChOTXRbdGB9bjpLM2xUU2NQYlteMEs1dlJGazhFPyJbN15ePXB9Y21LdWwyb1FoeXY0''@;'; put 'put ''LjsxeH0kKz1TKnh+cWhscXkvNjlAKkFAdCp4UmVoTl1BQGshXlU1LDQpTzQ4X2dQX0QzWTUsaFlQLltnWWRDRyt5XnswSW16Q2MjLGI1LjxhW0h4VTZnMX4jdDtdSS86ezloKF41TWQkLEtUQ1MkLkN2fnAzP0N9KkpOM3N7IndFKyRRQDZLOXw0bXAuY0MrRDg7OExxbzhyS0o5MGNqdyhALGpM''@;'; put 'put ''K0RAWiU1L045PChFYDZneXNbbEd1Xyk6P090IW0udk1afnNkfiZsWyYmVGA5bkRhTH5oYilsY14va3hAZ0NALiZaMmwxTjp4RVomKCx4JUF+ITMybUhFXmMxMHRpdTdqM11TJnd6e1FPSzsidlYkfncoez5FYTsmJUdRV3JeL3VsLzxNO2E8bEhIWGZ0I3RQUzFeIV9OXnFnRl47TWQ5dkpdd187''@;'; put 'put ''JFhOc1Y8QSomVUEmfnd9IypVdjE4NXokLCt9ZX1ePmc3X0ltNykxMVRzZyVUfUJqRWxUdixYW3lNflMrOk5+PyEkNEdRO246aTxKWEtkTj0lJld6Sj11aFQkMUV4X1VBcXBHXlZsfH5KbGx0ZjVqcjQpcl55VFBjV2x5VTdRQ1I3UWY7XXApSHtWUXh3dlZASW4lJnhWSTx4Iiw/XUc1PnpyK0V6''@;'; put 'put ''USFwcGA4WXFJRGAhOHJlMm0mVUsqejROdFU+PTBvcGAyTT9fd35NdSoqSCI0IWhnQHxTQi9+PUBtbFNvKlVnbT0mITpSOXtUZCxxOlRFYWBVUiZzSD5Mfn1fbDpzXylCVXQ/ampJRTgsYyRzVEAmPVFROV9uZ2pMdzZZRjwrTjolYzl5byl8OUs5WXVJdl1HRXpRTVIvPSF+YFU/alhGeWVDPCN9''@;'; put 'put ''dGtiRUsuNGFdL3ReXiU8Kzwle2dSUyRiSjU/TnZaNFVFJGtteEddYGBfaCZtQ0siUkZEOHk3T2Z5c0lAcT8wNzApcD5AekldYjs3ZXUlKmxHWj45VWhpcD9mTEB1UipLcD9ONGVKWXpyZCF0WnolQ0kmNTZaMV9AWD4lbXJ9RnhnTVhtKWJIfF9VZzVAclhRNVdIKU5dTDVOK14pMkYkKn5lQShE''@;'; put 'put ''MX18SlRfYCJocVlMOCNQQGVbKyJ9IUUuTTNnOz9MVUgxRGtXfVRkfF8uKEJvKiJGQUp5IiQ5UlJMfmhVSj0uN3Y7OnRlWSZ9M2c3Ljt9VlMmPT5FP3RgKjF+SWY3IiRRbzNTY0dyKzloLE4wUVQpUmxHQCxWND0yX31wV0tqfnBCdmc/KGV1bHhFRileUEFjOENGTUtAI3EpIT5QdWtPeUksOHFF''@;'; put 'put ''RyxhW2dHUjBGPDM4MUtxb2VPMDs4WXhHenF1UlFLPFRRK3NGQSh0KV93cCVQZSEqOGJwOmpLOVg7TFQ1X2AxIyVrTEhpKEMiTit9cGMkR0BxaSteUXRTeXNLa3tuU2BOMjs8KmFePEVTaFI6eHFLTFd9IzowUDM4Rj9zRWA0MDY8YWI+TzE0aXRvXTVkOWM6XSFFQCtxRi4qckFTRGBldD11dWdY''@;'; put 'put ''UXZVTVN2OE9QK2tlLjJDSj80O0p1bmcuTTB+QTp3XzopXVNARWp+bkRiOkwoMW1MLlQyajR6PlZqaTM9bFomd3s0bVFLUC5CfXwjbk0jK286O2NNZFRiTH51fUhsbHJTQ207dHA0U1YlOUtsV3tMWTkoKlpZYS58Q0lzQ0BGSnxbLCpwO3AvVEtTWExMNmNbRnlSOzcjR2pKVmJNeEJvaGFIQUQ4''@;'; put 'put ''L2Q5dFN5XSQ3aWRwImdqN0xbfDpNPnlMVmp2fGFUcWZ+Wmp+TTFXMyZQQ3VpPixEfkRhWEhlJjZQOnw5I2JZeG97WCskcFdedFFLamB5RSVDeUd6cDdHUGUuYFE7P0wuTkMrNU1bSFtuZ01oRkBZNnA+VEtsV140dXZ4eEZbWT8wRWJYNjpKWytxPV51bDgyWyxnZUIzVVdCbzFJI3d2fEZ5aGVZ''@;'; put 'put ''JjNLZ0ZGVnh7QCZoenRxMVkjXzlJPzZxUVFtMnJxeHZZeiRpdWJGYiVdPnc0Tnp2M09JaysudTEzYUYwWlBsdFIrSThuIW5Lfkoua2BPeDIvQWQrPmtSITFSQ3NCKVdgRkEhPDtXfSRSOU8uSjw0ZDh7PGU9LE93TCxxWVRsV0NgR0d+O203QmxGOz4kcEc0aHMrRCt2QyFtPWhtQnZGSHk6TDQ9''@;'; put 'put ''VWZ4TFAydTssP2pEXitzUC5CYnh1Q19yK3hGRV1eOz9ZJVNwdkl0JktvdHs/fWB3RXUzdTQ1c1AwUSUyQX5oSmBUMzFHYn1HUFp4U2JVd2EufCpVRUB2Wn5vcXxVeVB+Y1lINUFoJTlaKSFKLmc6SCZpMj8weiwiUXZ7WXNNT0JHQXB1TnhpKnFUSmFCaiFTREU0ZDVGWy5RekVpdC8yU10jXjJ1''@;'; put 'put ''QTAmLmFURVkzI2hnTl4qdTleWC5wZywuI1d6fHxtTjYvXVtsJF8kK2A2WUVxfV5hLn4lYihjaG81U0IiYjl7VTFsRDRKOHhBXmM5aFdMUlBAbEJaWHt1VXY3QD9oR3JYXTJxYiQreEk9MUpzOipLNSteUVhdQGIrclsqN3dudEw8KzJGeXtgPUx8TkFXRSQhZ11oTSpBeUY2b1RkUTlwKnZSLitl''@;'; put 'put ''N3hvWVJgNjg4L2pHNHZ4fXw2P3leOyRxNGc4LEU3UCFJKGdHYC5BOnFYUl4kLGgzUVIwSTdHUzxvYHNOOSRCQ1oyYCFabj13Vmlxe0MpT14hTUkkNHJaJDJwSFB8InNINGc0Zyssa0ZveDNwUElLM0drNT04KEEkUTFQeUwjM0p2PG4kWDkmLntgdm8qc1NHaCxNe0R+RDgzbThVJnxbNlI9UUVy''@;'; put 'put ''c1JNY1Q0MU5DLylSUiYsZUksPUx7Wj4hU2x6OyluWGhYN35ecCY+WEZYP1ZpbHJ9OTIxIl5NcDdlP0Qocy5zKExBcHBxWmRfPkRTKExrQC85L2p8dk9WOVZdS1RyeDBIMlZfa0ssMGZvRCpLa1ZQbyE8cj5JMVp9aXhxdl5DSVdpJDZeUWpBaXJBXVVeK0ZJS2JFQXB0YTlKWD1LaXElfjlmZVV5''@;'; put 'put ''TjhYYj5nUlMsZH4lLy5KZFRPRjwqPWxJYCpBeUxkJnlYbD1ZW2ZSPCE7Xmd4e359RV5FP0xHI3RoKSp2dzZlfWF3anEsWVt4VXZHVkBXPW59WTVbNWRGNSRsWlQ9U3RROi58KFRgP0g2eitqUTdSamNmOi43OyQqP3lZZHZ1STxgOWJxTXN2KTt5Llp5WHNeNSNDUjQuY3A+aHgsbHR7WiVuPjZw''@;'; put 'put ''WHR0eUhzS3khb3cmNEx0KCkpRn1Ja2E5NiVhIUJ7dnBfPm1NRV1RXlVWUVp9VHhma1s6RVVdeyEjbFJQI3hmX0VhNVBzJmlVQGY9ZCM3UEZke3V1VDRITnE5aD9HIl95MUtvM3J2JExtP0lMUGJ1WEpBZjxYMi94ZmssbUVlKiNlP0hZNkp6WmliVThAYCFNczx0amohT3JDSWk3KTYhSiE1WF51''@;'; put 'put ''JT8/QypQcDUre3JjMig9SU9EWUJLS15NJDpDPUk0aSNHVVI1KXtUdCJBWU46d3B4W3QkLG4hW3xeSEg1QWhKZHQzVU9IT3BfQkVwWilUcWtOPiRyamF3cTpjMzI/RG8xJmJuP1hiWjtdOW5RYFdmTGVMQnEiXVcjTilIaD1FTlZ7eWB1WDUrPSVrLz1FVD1EeCxEcH1kMjpIW0tGJm1zKT1qfSRX''@;'; put 'put ''KiVte3AickNtdTNGNS8xLzs9IyxbRCNRJVo1MEkmUH1hM1l3Zjh0dmVPaCEkKixqfUoheS5gTWd5Oyw+UjEpP0RMaHEuYWl6PSY2TkNZQnphM0IiN2xNQzNLXS54c3hHeDNtflk+T0tORjVdSik0KXwqa3JDdW5xPUlCZ2ZTbzFaOkB6eTZzdT1xb2Ypc3VkPTU/SCosbEZhWyw9aEhjbiwvSlZd''@;'; put 'put ''Qzx1THQhNzhkTmIsRHxyPnttS10pZUl5bHhSaHRvOylBV0ZEQ1h9YVt4dm54UDImWX0sMV8xeGFRW0NaNWd6eHQlVSk/TXYhbVd8ejZsRitdISwxd3VTPW42Pit6WEtLcn1yUSpYSSxsTSlxIUtCbWliUDsra15OM2Frd0k8LEhtYlpRXmNkcSQya3NWfFR4USNWTyJPdTlWT0d0WX0mQF1YJl9Z''@;'; put 'put ''el15NihGXTh7NmtxfVNdR3wqVEd4NEN2WWR1IWlBZmxaNUU8I0FJO2VuPSg9fDZKcEI0WX1rS3Z7QjBCITtzXUhjfUcufjlINEJeUHMwUHJhJUU2fUFEVWpVan1+IjFpdDd2VktGTyJfMWdQNzJgRSQ+RDk0ez5xXUE8O1RVJC5EVjdwe05mPWZWOD9ETyZodH0zYSFxeyRXRGFrP0RwSHc2OUgo''@;'; put 'put ''eU8uSF5SWD9gOHJYVFBVNW1VKEhxVTddfDttZmIqSFo6Y2xHO0BeR1R+eTEubkk8YExHS3c+VmlHS2xffjlZMUp9UEJYMGlQNWdWOCt7elF7Q3M3VSI7ZnV1cStlWl5MW11kdEN1XXkjUl5MVEp0QnZMIkRsQFdZUD9EVjFUJGpWV3hMYkBAcm1gVCpaMUFjLkN4Tzs8cUpTI1dfUEJQe2ZDQi8p''@;'; put 'put ''RilFR05+ZGVNZjY5dDAwOkt1QmFWZUdpeSYwdGJiRkphd1Q8S1JxJi9ZTC5zaUd2KywwTmhvNCx9bl97KUZ5OEJ4fHNWYi5RWmsrYDpxTTxYcGlrcl03bHRRamhpU3dDbDBTajA1OUU/PiVWSV53QWslU2BtbzMmL3JVLDxTfm97VCo/ayk4eyRhUC4zeS99fEksR3NjN30hMT9WclgxZDRuRkJ3''@;'; put 'put ''KFNqWVRkQUg7YXtCal5Mek1xWX4rcF07PXFeaXc5N0c2MU52IjVYTWEpfCV7bGRyPyFfcFJ9Y3Z6dSh7SjxrNSppUHcmVUJhJUtRTFJHRWgjMEFlUjc/dDR8cmVxOnVMY3xSTlc3JDkxUzJ7Q2hBPGYqWnR9UHptI0QhPC54TkQjYDE0Pj12e1c+SmQ5OXNZdl5WN2d0aVZWPDpNfWg3dHtwQ11j''@;'; put 'put ''fWxnKkhmYCZ8SlJ0UXdwbEkpR1BIJDVXbm5jRmIhTyQjcGpvbEciRXM8fk9kXig/cFZ1aVh3KEhvMV9pS3JMdUhfTHh4YFpmcnM6T3IlSGthPnFiciFlK3thWyo2JFd2N1lfeyhAJnV9OlZudGt4fExkMl5DKEclfTlMJigqK180OS8mIzpfQ3NHV35wMDBzTHR8NkJfezU9QlRrUyNsV1EyfEB9''@;'; put 'put ''UHBUKCt+aClhe30uPSp0QyJlJng5Ok5tfW5JUj02PiMlbXszdikoKnB5U3xdSWU3U0R3TztCdDpTW2lCJXVdWn0sfjpPQz98PXhKe1NpVDkjfFcrVlcpNGc6NU1MSTdmbj9pITBVczYqNmV8SDtiRlJdb3doR2p8QHZsUitDQ2B+L24/SixYZSltdDMzUit1SCtdRnQ2Nkh2Q0UxKHl6QTpsfDd3''@;'; put 'put ''VkNgSWBMXUR+UVh0VGtlO01AVG1DTUdnKUt+OHd3W3A2KSoyJUVmMDhkayR7Z0RDVFt3Wk9rKWR6aGdoRF97Mk9uOFJJayhwSkxdU2k6a1AsKj80PSwycGZEfk9RT3lbak9wd2tzeE8sKkgpWD5JZE9OaTRqW2pYK2c4SjttNnY5YD9FMXg9RTEsaEh9SGZtP0JfazpfP3hqSV8zU0JISixTJit6''@;'; put 'put ''ei5URlJdbT95a3dDIy8+bHwuV1FZV29vR1ZFSTB1PHN2YClkP0s5XkhCQyk4N1t8Nmx+MyM+V2Yifkg3QzwvNltTWXhSekxLeTU8czwyfjFDMm9rT2dyUkVeLGl5SWVOIyhUcjFQJk0wKk8zbDtZN0EyRkxKIUtmZzNndyF1XkdpKEZgRjtIVURobV0pdmtEK3Z0LjtmbSpNODlJSjkiNyQ7cUhE''@;'; put 'put ''eDtxRGBVJV9ucSpQMFclR3M/RzgxfVRDNGcoLyYuNj5ISX5+JGFLdXhKe31UPTtnVjdxY1kvOUFoMHhjYFEvOUtkeS9AUThCIjpAPT8uQ1d7XjEwU2shRTBXVXdaVSYqPDRSamFgWCxDeyZ3Om1oWFVMNEBxWCIwREJDSHwlMV9ua0I+XV4xTVNsPndCcjFoSyM7el0ldStSNkl5dENIWnZadDpw''@;'; put 'put ''KjsiTWUxNnQ8cis9RiVlfF1SfTlpcFQyQyM3dz1EPiV7LGMxYD1sWTVPQ2hCbD5qUCFkbDBpYT5BI1deZFAjQFJmV2hGZXl1dThvZztofGd4e1pvYWlbTHhsV1UqeGBjTCZqITl1Jm03Ji92MHkiTkpnMGk7REUhMH4/OkpoZGNHZX5AVXdbMD5UM2xdZ1UsTHw4LCY7SDomSitCWit2Q0R4Kn1T''@;'; put 'put ''TH5oNFZQcDddJFU0XUJfbUVLXkJfdWtUJUZ7ZEVWS3JkSkpgXXZSTFAuMXxlSWowaWgkR1dfSVdHQSFEe0ZmaWVwP2BbJElIKy40RzNJIkdGOjg2ZWQhej1AdHYmPGNWIzdZK3hqMC49dGs2Wl5WbEFJRHdwXVgzRkBwKjtpW281cT81VXBpU3ZSdXBKYG9ROzEob3hxSm5TX10iUV1qMWF6Rzdp''@;'; put 'put ''PGJ3R3h0fmw+cmtvRkJ6QTckNipBTl0+JSVhfj4pWkFfe2Z5Pl9ZWC9AIn06JSkuYiw1LyU1UyQhNVteQEFpKjVIfj9CWFAlVGA+N1lzUUc0cFR4Mjttd2MwOjBBcXNvVyZjS0E8cDp7V1RvbnYzKWc6KFZSKUg1MmBTRT4zIVVNazFtPVJ7aUgoQXh0TyFaeThELylsfGlURG5VPCNRViowa0Ui''@;'; put 'put ''eihfIjUkIUs8dTtzUG9zZ2hmdiMpR19uYjtxdlJBW25Ydl5FaWdHZWpQcEVFLHRPVj5GSCM0KWs1OnR1VkFtcjg0K3M5Zi8vWns/WF1wMD1jYml0M2FFfkdwbyRqJml6IzpqVGY0T00hNC89TnJYInJpdVAxQ3gkLEYsWHAyKFZASXo/RGhLKEJTWEZeVXZZZ0pOQ3ZIKS8ka3M3Mj1MN1VkY1R4''@;'; put 'put ''X1oiXSlgZGZlOCxrXmE0Ql07aD9YZSFZbHg7eXBvX3o9TE5iLlVaSSRiQnZuRXVgNFVsY31pSXt7K2xqfiROcylSellpeFpDbl42Rlg/KDRmTGw+KnxjRGRAaylgSSNAXmtBaUomZVZfI2okVm0rSExAUGZxYnhnKSFKJH15M1dRaV49PGkheVVxSUJDMF8vSl4uPEl9M2A/TDU1XTZJcG54KGNa''@;'; put 'put ''XTsyaylYbH5ZaEZKVHB4IWgyZjdmLj8rfigjUGppLClpNGIkNFZ+ZlAmZ2R9fXAiMWoua09RZWY6RXpOd31dIVdyd3R7T3cyL0cpYUBXXjNfQFc5ZFpWT0E7NEM+NyZJZ2l2ZU5CVEg9dEJyfURkMy87T0FZNix6USJRUFkiYEB9YFE3VWtxNHxSQyNAYUkkMC4wNi9mYTQwOkpROW1La2F+UHhe''@;'; put 'put ''ZTNEW1pmT3NQLCZHYEQlTWs+fHUydUNvamNBIUdXM2BbP3ZwbTlmOkNYeiw+cFtNUTA1diopPCIqfUFrZ2dZJVUuRlZZWX0qPVB2NTNYJVhPYXAsMmFycXQ2Uns5K3ozVnw7KyljYG5leD8hNDdHUnh4QztGSUhaU1JJUX1Ud2FxXzpmVS5EdiVqV0N7dzJ3OlskYzhAS0JLRDp6PmFRbCYyOWoj''@;'; put 'put ''eipxQWZIIX5bQWJJbCltVWRUd2cpezF7SV5rQi8hbSN1WlMjTVV9TDd5MjpjXVtxO0hwbHFmZnsxPEdwWiRaM01AS0wvMjtoOl5pVzRzPTN4UntBT0cwOj9aY1EhbWEuXVZjQi4hWGdmcmJfbklmVE5NTjw1dXcsK0xNVGBWJkIuZmlkY3xsWDwjKT1QSWVMU0FWUChMKCoxcCt8cGRoQHBNIip+''@;'; put 'put ''aUwoSXxuYlNlXyFGZi8+RFNza2YqdXkrQD1SezNXZmVxTno6V31jNE4xKEJRJVFqVldOM0RXendpUCFPWypxWDRDcEZwWWlDY1B+QjhIW3paJVRDJkwhdm8obi8hYykoMi59JS8rO15rWCthSDR6PzBiYlV2InA2aSllKiFpdzUkdDhyeCVzYDNoaVA/fV1vYiYvK1JSOz9Ee09ZR05DUik0XyRx''@;'; put 'put ''eyVKc2J2Im9XN0dBW25bMSxNaiswdVphQEdFLkJkdjRlOmttXUQpMGomSGsxWDopUmJHRGM3VWBUSGBlcz8jKCxmVHQ/MVdpVXFwaXcheVBfSXBdbng/JE1lKjJMXzVhfjlidURsRH5HdkZUMSMyTXNFfWJxJU0oK3dZQDNeN2ExYzpCLGwwI11BRmpHflE9UnVJcCxuVHk4UFZ+ekJNYGpZeWBj''@;'; put 'put ''MHdwPTo8STsuRWExQGJhQm9KQm0uXmJZelFac2ksLE8+dW15WSQsSUs9OTs/XVhJQzAzZ35eYSlaYVhVKHVlKjJialU2bF5hVFl4SX1OOTZxdyorWHlCJDlsO2RGWFc4T2ZlPGpTJiopY0Jwbz49IlhHX1p7Lj0oN2hWWVlgTT1Ad3orRikjMXp8cHdFek98YlJQZGYheFR1ZDBwWHJXW1pGa31t''@;'; put 'put ''UkAiZG4xa2o8MmZ4aWBXdCkxWCpPMHtxeGJ7Uys6M3BmRn5ERUFsMUJmJWVafERtIkZSTTt2eE1wMChQeDliSjlCV1MoPWUwOC8kWDpdP0lFW3VQXVllTjh4KWU6Ukl9QFZeLD0kPS4qUENkdlc1Vi5LQyR7TnkweW15LH1EbVdzQ3x9M0lTdTIqb2d4Lig4e0xLVz1meExvfCsjaiNiKElHbnBB''@;'; put 'put ''T3pYLk45W206UXU6PkZZSnRdeEBHZkI5NG5PUGxhPWI0KjIjR302OU01WDpFckFIc3osc30pUHAwKC51djI1ViM2MVNVPXx4NmljJHNNTHJmeEVbLD1ZaGdUQ1dMNE9nV0djXS82UXBdXjJiKFBbbTEzazYkKj1vW00lKF1GTC92bntQVV5HclM3TEtUK3xiPywsakNbRn4oOEl3VTM0eXBxbDpl''@;'; put 'put ''M2tjVHhiVUF2Nkw1bjtCKltlM1lJdVJhOGN8Z00rZ3B4SnBrNjQ3RDR4WTMrb3N1a3c6MiVhSyR6cnA/JmMlU0RGOFZdNGxCWClzdHdGel5nP3Raak55VCFwNiVPUCEwP090ZD9Me01udyErM1c6aE9zfD1PeiNpKXp6PEI+bWhbZTMwMF5JWl1NT01OeUIhSTIwQ2ViUTVJUS5fWXUkWiwuIzIk''@;'; put 'put ''Pzt0e2ZhYHpbPXNtaXd0aiFQUUgseGIwKmsscmtYYlR7Sks6Ii83KnY1PUsjMkY7OHYpIU5BUzs9XS5ibWVGXkR5Sil7cTxdZiRCJGdoRmUiPlg8L3MlYzRWd2FGcHV+cUc+OTViNyZHfU5FbWJbSXdobTd9RGUsMzNIbjF7fCQvSVRJOTBTVkokZGh1a1pUZHRbeFd6LDVRSTovRFopSWs/TyF0''@;'; put 'put ''OVVka31MYUImbnJyZFRFXlpeNzFiJSVHYFZsPk95PT91NjsyT01FUXteNkohbisqZi5fZVlBWWB6MXV7InwofXg5aEVsSDAvSVYoO2h3U2p+ZjI0Q1EqfCF+JWxaKz0+Vk55eX17NixZYmhWOzMsMTpsSTpLVllEI1thfiNKfSMyWVosQ1dvMlg3cTV0X2pdbTJGcFRFN1NMeH4xOjU0bTZ6JVkl''@;'; put 'put ''Y2NUZGU+encqPElFfkduKVMiYXhtJSxeQzt4ZkRhJipOXiI0NkxDNkdDYTF7QipVS1BiVHJ9WHFjISwsUyQ7OipIZSxufSJHYncldVsyOyY7SFR+dH1IPSVuQyQlKl9lQSpiZngoJE1LaE1NNzJHJFt5R002VyhNImw/aGt3QUlNNnZIUzw8eWprLDJtVzl+NTk3Ry5YVHtEYXE/aVI2R3FHbXpO''@;'; put 'put ''UFBDUF5pRlBIVkpBbDczXkpVYVdCWVpETEM0fkt1RjZIXXw+TVpQNTs2I0x+PiZ8S11dIXdIaltmTDRYSDUyT3s3SyV9YFY2LiVPeGx6PSVyfXN+ejZ6Vm1OJDpfeDZoVl93bzY5LzwxbSp1UyNoK3ouYXpLYWM1Sj9nN1pGemo+Yl0hM1QwTm1nIVkxQlZXMEhBMjUpUlZYNGN3aGpidzBkTyUr''@;'; put 'put ''JXxWMWVPSSVfLDk6Z2p7cjlyT3lOcCJlNTp4ZyZxWkhfdGhKSFkhNEAzOSNtcXszbihwPSRtWDYhRShQIm1KY209dzpkSGIxS00lIVRgIiU7TmNZKnpBR2I8Wih5dHo1MWs4bkY8KjhhQG51em4mU0MkZz18eHs+X0RASyI0MiFOTHBaJHEuakRedkZaUUdXJHE1UUdXQn5WUXR7YUBmWl1RfVZ1''@;'; put 'put ''JnBbTTFLKE19WEpQMXg6IkZ3VFclY2dxOzFJNHxaTkM8KTVNeE8lYlRabjY/WXIlWmspVSY4LH1bKnZdL0xATzEuSDpONzFZV15wRF1xWTZZVGFKYXt6Nix3aD5ncGZQPzVuVUBgMzQ9VFdVO08xLilKcGpdODp6dmcoUlJkTzNndiM0ZzohQntpJlI3KUZNXTl2WCkkcUlSMTFYNiJfSTY4KlMo''@;'; put 'put ''QDJiVj5UYFEwT0AvYVJ0YXdqUTo6dClYSkdzJS4iKSxYeHZ3KHhTQ1VOa2RBfEthKFAsKEQsb3kydTR6TENAT3xORUlxcnooUlt8JD5LR2hnSTo/d0JdJSMmcClKPDRsIWl6PEJpc2g4SiJfc2Z5WWkwRDNsX1IvV1BCOUV+c2FhWSIqZyhlLi96cWslPCpxNiUiemdUdUBffGV4T3RIRmtfXz5E''@;'; put 'put ''cC9xZXFVSm82fF10VmVoVChlLkRmPF1PPFhoZ21UdlouTmlmZX5AMWw0UkYhQ2wsOHxCVFdLPU82VE9AVno5RVUzcTV0KmgwNCJpUEMqfT4qOyl5ST5GcGM5NlU1RixSZ2pqPW5sQCIqLGE1OnhmQ3hFSyVhSSkyKWFpTVdQT3lXL0RZP11Db0htfT51WDxgdkxaN3I2d29eSyJtQ08wdHZ7Wk5S''@;'; put 'put ''KyRvai5vS3MrP1VWNyx8OGlwZTFwQV8sJXFIOX5naldKbzEmT2EsRnowOEhye3wlKlNeTUNYXnl0bjxjKj15WltdPEk0WD5fUGRWP15bLkxlOW1zT29senphck9RejQ4QyQxT2hbL0B1Rj5UJCZPaGlxTzgsVUROQFZRYTk2fXAjX29HU29TZXh6WGg3S0pmP09demJCcUxHKVYzXVBRTlpUfG1I''@;'; put 'put ''U1lXSTIsVjwyIiN8JkJMTUwiMSZ3MCtsbzZ7TGhbY0R5aCZkaWM/VFB0UWthbWs+TyVuNlNkRnJVc0ZINUZlLjBJUj1SQl19M3Z0ciwlcUAkYyVqWXhATHx9Z3NiRHloeVJlfE5DYEFvVTV3ekhfJl56MTEreCR+Zz1ZRHlIQWlQJE9DYHI/X3ViYSt9PyRWaXZ6UygmXmxmakA/O31ncWxES2NK''@;'; put 'put ''ajghZF08STBvaCJnZU5NVVlTajhCaXpdWVhDYEtxWzxGS1s6SjhBYSt9dT1BUFBVbDdSZWgwdXFBJUM7d0BLcWo4MVBDYERvMnp3ejA5QHBWd0pVLFY1fjgwbm99V3Y4KkZ9b1BQclorWCpRLGUuUFpnbWY/VkhtZTxMXz4wJlk+aCohKTopcDFZekMzOWEjamU7IktDJW02Knw9U0Y9KTtddmZ+''@;'; put 'put ''M0VVcmN0bXYqSH5zXSkybTY+Z1J5dVZdZjlfaisoOHp6VEIqJXNTS2BfemMrKCtqSVZNI0g/SCJaMHxfXTZyOGNtS00zJTVuP0h6azd4Xj8pS0kmTkZxaDNRWnMpTzJZVVNhYXhSem84UjNJUGpMI2RZcWE5OjBrb2ldTEMiIS5rMVNuPVFHenhBSFZ2T0I7eURVWzxaakdsekgmYEQhK1g1ISZn''@;'; put 'put ''SSlINUIkdz9XQjd2d2dvKzp4PUx6RlFnbCMiRm15OUZdfSpIJEVIMkohI1FEOEZ1TFkxPUk6eGYuZkR5fmNtYzc1IkZDMmRgUyJtKywsO2YuXzpfb1loYnxYfVBPYCpaTWE+SEsqTX1eQz0pd09HX2F+UD4xRDlJW089SXJgWjFDWCYvcmZCO3pEQUxuYGJ+X3l1M1p2UVllKyF5VkZ8JlFnV0do''@;'; put 'put ''aiJkKHdKWUYkT2tWXnJadn1LPjwsU0ZzODhbeFJ1SzBJb2cvU2JHb3RgcDxmI3Y3cFFNQno/b1N3fV9JRz12V0lbZX1qdHQrKn1ldUAvSCxkZ3Z6PEkhQzEkQCYqQ3EpdVlpUHs3SD1xeVlGbmIjQldTOGFxRFYpck9kP086bDR4VHIzVyh+eXVvNj1YWEokR0NEIVFBe3QzJVBsdjRzNHBdRzta''@;'; put 'put ''aFFJNSJqQG8/UFM7V2laNSJMKjVZUTxNTio0UVshXzF9P3RnRm5BTV1gNXtvOWs5anQ4byJvNlNAO309TXJwaDUmcjk7QDN+Z1ltSjVNQDBhWjxbQU94dkBqQ3ByfFFoOXNiI3JJVT1BRzNPM2drMURWJDtnNls9WXlscismSyE5dWlSMElaNmFIX3cqamEvfGJNcyYsPCZDS2tmYEl7bkRQOU09''@;'; put 'put ''UnVKVk9mXUJPSiFweWl8IX5HQjtDOSY7JXxJeUgkOXxNJnEzRiM4PXZIdXo9X2hAJE1KYT9pfCU1USNiK2dzQmA0b04mVD10d2cwYHBDUSJZW0socHI9WF1jMk1PUnV6MWw+eXIqZUYzW11Ab1E/OGkueXZ6fnkrcjU/eDhlXVA3c3g4eWV4N0ZLcXBheloxWjE6UzBEZCFZeE9jbHNwZjVrb0J6''@;'; put 'put ''Y3MhO2Z7WGNVSUJMUG52eTpycn10c3teSWlsbitgZ29bRHV0XlcvRk43R2o3ZW4qdiU3Olh3X0YwfnpIWEM9dk0leHFvTlpMMV85Sk0iejFHcn5jVVJic0QvPDFfUnN0YWp8aV5IOytWbGhGblg4fEclbTNzdVF6fEYoVUxqKkgrSTxEZCxdSi80QnB8JEpPJjVgcFtBRXQ8KHEidVIzSTpoR1lW''@;'; put 'put ''RXRwfUdFWlAzQmQ3ZFVmOnpGVTwsK0gsSzFSTTUidXx0TE8xS2FVQWxiY1JVQypNVW0qP0hgQ1RZUjA7elYucz5ZfWpWJC4sRDNoQyxgcih7RWZFVEJCMkw5aXpFWDlucUd2ZiFKKiwrUSt4ekg2PTluTmJsezpHRT5qInkuRTE6bXdMbzRPOjl9P0BjcCxMUGcqXUAvISQoezRBbyMldFprZy8+''@;'; put 'put ''fHYsZyZCVGBNMUhrWjtjNCx2JlQ8RXopXSw4TWZEfnQkZFJpWjBpcDhQd3omQlNvX35EQjxOSk03VTNHWGA8SUN0cSlsI2RRdUtzRV51X2hvNylVQV5GeU4pW3lvYHEwR3lIZlRQIjwwNDl4RGRBNnl7cC5bNE0/SVEsRFNGKUVwN3szMU9lM1ptYDlKNC8hTDd7KlRuMT9LJSU1UGhnQFZ3JEQq''@;'; put 'put ''fE16cDg2SlY3djpNKUFhOlFYP3pAVUlAeUR4R1ZYS3k+cSxZfX5mJmp7NXorPl8pNFJmI2lrMllEYjBMUCpFdntjNn4lX3s2O0JzTFA6UCZEOTlwYUFeV3ZedHpGTCsmRSMwa0QwR0sscGl0cDAyXjBjVCopSi5iS0NYdzA0WFFqTCFRfC59QWpjMHJKeThgLGREQ2MyLnxFaGsrcTEpO2t8eVQr''@;'; put 'put ''RGhKbU1QYV8vL243amNuWVt3VGVBIUJLSVk0NDBoIi5Rc2ZrU1sqaDB9WHB9MHpQVjVGallJJDw/RE9eTykuOkQhQD1PaG5RbyouLm5neW1TNlV1On5MYSlIUmVtUkMhUCtbdGJFVnYxejB6Zld1PlpDalk5W2llQ2YoUHU5SGhdV2lKO0Jfe0o9KGZzRXleOE9ZUGJSd2t+Q007YnJyMi5hOm5y''@;'; put 'put ''cDA2OGYzdixyPH04KiRJOXIyaDJwSHdOOFlBdEVSQS9KTVpbP3Rha2s6KURdeV9GOCJDUSM4eWdWTkN7UHNLM2wvPlV2TyFiOWR8SFdgTyE6TWkjX3NNcFhpZU5uN1BLTHtpYF9jKy8pWnBEZHpMOCVgIntdVzNiLFssfmwxZWskfmhvWFJVSGgvKnVwNjo+ZS9bRmk1ND15bDgiW1cmPDEpVl9M''@;'; put 'put ''bW8/d1N9O2x8YGJGUEo6bCx3TkI6eXwheVczWEFZXllwR3F9KyhFM0EmYj4xKjJXe3prUlU3ImwzSEclK0x3TVhYI35KSFpDOytbPTtZSyV0MnA/eFJdT3t0JjQld0woLjBbVzMmW15MezI9Yj8laUNwWGMmbm84KkBZdV9RNFdFaSZXZyVGTFJfNjEifUB4KXBMQCVyK3lLM0FaVCx3UDNILFNY''@;'; put 'put ''VGFKNHVTPD95Rjl6SEcyWEgmOm8rXV17ZT9feylueSllMToiaHJ4PVJ4SkM8bVd6UHRROURhOEN9WVlaVGt6SmghVy52emJYUkFbUlZaQ2V8WD5HSEtJd2dqVFJISFpJOEs+TSp9eC9LXjkwUGBuTzcmIjR6YmVCfVhue3UleXJFKHVaMHFjTllwQzgsUmA9cCRATktISD5UbmhOWWtxa3FXR3pA''@;'; put 'put ''O19sMWYsPkdYakwhcTRbZCIoOjNwY0ptLlZBPFVQfF5xQkJePDtzfnR2YGdpeDc1U0xqOHhVbVs/dUVkUUByLGlhezljcCVII2BwaCMwbElDMGAhLixjRkpoNDs+b3BiR1d5L3FKcER1fDYsX05jOV41LGU6SyRqRUkkeXFgSzhiaUdHY2lSdiU5RXx1JUs7aT1XRSMpJjdVdm5YK0A5ayJoTXBZ''@;'; put 'put ''fXZ1MztSZDo3YlY4V3E+ZzBOeExHWTBfSkE1OWNKbzIoNEsvP0t8QXxFRUtKNlojIV4qNF9BWSJnWlJGdylWZDUieWMwIkp5Wlt4LiRdSlB7ZHdTJlFEYDpgWm9vTHhNWUJoW15Qbi8kZWVbPUNeNm44cjFVWkk9IV8pL2pVZGFJMFllW35VPFN+Kyola0hOYCx4KVZYeWlmbmA0KTckNSljJDl+''@;'; put 'put ''VVBmSnpnRT09ZkEqMH1lRyNNe0ArPCZjWkw3emkrMH0zR1hLRTR9RjNJc0xHV2pFUCRgLFVCIisoOVNhVChsXysrSHZbfmhqQiouVkF9PyQzTTlAXlZ7KH5MVDteRG03TTROWnp3InA2bz1EXkMkI1NodS4wYXlDaC4sNiUpb3hwJUo9JjpQLyNkOlkicTpUUXUrZjRRNzN4ZWclRzZGeEsyZVNa''@;'; put 'put ''JElQUjRCaWowdlhCQ30vb2A+O1R0JmcsP2BIelU+QEROWTFYaygjXlp4P0FtUkAwYTZZfm9beWxgPy9sb1BAdU1TVVhXbCVDdWtCLHwuZCQ/U2hRZ0hvWmdHKVVoR0k7Xmgoc1FRbC52MCRLdVkqTVFDaU95fVksVFZYSndbaEE6fVJhTmZHRkp6Rmp5dns8LEFIaz1RREQ/RSU8UUdXVSVVaDhH''@;'; put 'put ''az1bMmImUChJOG9ZSF53YiZkdU5RLlAweFJETFRJJWhHV0dOITV2KXdLfUB+a3B4Qz87ZkxfS0ZhSVkza0lIMyQvLmp3Tn56Mn1kUXo/aCQoP1V3OEg/NGVpJjBqYTBJfUM5PmlhRENPfHFzOzA9SWhNQ1BnfFZYQW53RURDZmtTJll9X09jfSRLJkxuYyNEQl44VG42Qmc6ITZ2JEtQN0k8R1Qk''@;'; put 'put ''Uz1pPzR+JXdJOElLbEdlZjtVLztqfm9gbWB0Tmg/aHVPUmoxOy5RMllycCFqSVIyUmQ5VCY3eTgkVisvM3RqTUhgRClNdlopZ0IxZDRKQzNrblYkM1lhJT91SThAeCIydSwsQnpiSCojeWlSNzI4KzNib2thaGNGTXQuRCl4P3dPdDN5QzksQVIyUDhpQ0hLeFBvU0U7eH1QZ115fUQsK2h+dlJq''@;'; put 'put ''a2chSkJya29gKVQkWHksLCosVk02LnkwVUl7WyZ8L21LKkBNUzFYYWxQUzF8OmIvcH57OjhXdk9YQHN2aHE/TC41fVp+LzByIlovclJRaXdpNUBodnRvIWlbKkw2Snp6by43XlVdbXJqYmlBfWcxc3wsLytWYWx2STpCOmlSRzojLm5mIlZ4LmpSdUowdlo9d34ye2lJSDlEJHxJekM0fn5wRjY9''@;'; put 'put ''LzQyTXU6W01kP0RvUi9ZL3FlWCshTUBSan1wZmhnVE1nSEB1bXA6RzZIOVR1KXkyNVpCKnF1fHNyMDA0PklSVmppUmIuMn5KUEQpJktIbmBNRjtZaTxYOytGcjVnJGN5P1t6V0lJPEw3cHFPYUV1VHZsQHJDTU9UV2NpSVFyWHJYSSNbWmsuVWRjMElJe3A8RkBoWDdOIVpvMTpKNylUREJNaH4q''@;'; put 'put ''Sm03MjpLeW06O3ZARHlUb11wLjBpaExDVFdNd01mb1omTGw6KT0zaXJ0LD96cGRRImd9L1lpWCEvKjN+PWAoPWElMDB9bG8lSm1IaXAmJXxTViVRZEVqWXdpOixjVmdXOWpmTG4/O0hSaUE/SyU1N2ovRDgkZ0MrJFVjNGJPdGlOQFV1P2pJXkA/NiVFfSY7Y0xvOU5hJSVZLmRVZmloKGZSdzBq''@;'; put 'put ''bEJmZSFmaGZpVDtiSUh7KWlqS3dweS9TUjBJPkxfIVplWGVoVCglaj8lZSl9KyZhaVVeWmxsY1ZqVFd5NEl1MX0vSkd1VSEhOngoLDpLUUw8TUNpWnE/O3AiPUk9az9kRSJCfEVFLH14KEw+aDl6X0omdCVfIWojISwxI0J9e34lYXI0dDdueGBHaFVhWXc1NDB1NlRFPF1eZUtHbjZRMCprQHhP''@;'; put 'put ''KWtTR2FefihOdn5URFVdQmdhSnY7R109YVE/bjR8VV5fLiVlQE4uJEg2KEopRlF2R2RnZjIpNyNIdmd6NFBpRGt9QSFHKEsueUd3UiNIc3VKPlI2dDpPYCFPQWl9cnY3c0ZLKj9ma2x9SUxpe3VKPH1lOzN+SnIiUDVMQ35tJEc5cFhlTzcvU1JiMz12MnA5fEJQV0Z8cnlKaHhRXywoZ1JaIiQ4''@;'; put 'put ''MWxLbn1jPStlaHFZalp2XTF0YDNEZ3ppJmleQy98Ki8rYUdseik4L1U8eVkqJi4rYGoqbDw5SEk0eCZDO1c6VWhtQDpuJTptNnoqL1s2VmVZfl1fdH4wZTYufWpwOz4mLzFsI3M7PjF3czNFVnRmTkNlaW1KdWNGeiJacWhSTkBtKXE0dltsUyZ0SDBveHZ+RGBdYmAiaW5+PCJ6OVkmNUwhfFN3''@;'; put 'put ''aFkvR34lWyoldH5hXXUrJmdxXkc3Jm43N206b3I0VmZdUE44d1E5MDZWfUMwSX5EMUQrdmspV3UoP2RFS04pTWZqLjA4dHUra1JXcTtbLE19On0veUZsaUkzQWdZfXRmYE43MT0jaj1rRUtMTipaMWYsNUk8X2BtJEJ1OXUlMD05PGV4WXV9aUlpbl1LYHFianV0d1RpL19yfHw+KEZiayFIRW5T''@;'; put 'put ''UGl5PG5DUHJSM0hEYj9eUihDQl1abm9kT0JHZT14MVJNNDd1YnRIa3pXbjFJNyk3bnR7Omc8cDBCdFRhLCltKVYodDZpQDRqOGFpWCR7dXNwaHdleS8zS1gpO0QrLlZwSDtRbjZBdV16Q0UhY1BwSEgyM2x6ejJHTXB2b0M7UXtoOVVTb21gUjxmXWlTQWlFUkpOOUQpMX5EP0ZeY0hqekg/N1Vo''@;'; put 'put ''NytkbExld3tuQ3hNPDsmX2V0WCo6KHpoJldyV2hYVlJ9MGg2cF51ImN1K2BucWBXbz5maDxhMFhWSk8oS0VYfD1iQztaSXQsdnlPVGpMO1RZRUBCfUJZRXpVdXt5W0UjaGBsY1tdJDh1NHl1NyQoKWYlcWk7PTE/NVYwUzpLLmZBPlBtP24xRzNPKlAkLnk/JHlDd09lZSIxfUtSSltrVTddMzNK''@;'; put 'put ''MDRDWn13R31CKSR4OEdVMCV+QV9dTUc5Ukw3UGZ2XiNFaHU+QkJESVlKPTZpfk4xXntlNC9xZXt1L0ZzaSxXcl9YTkEwU30zSmt7W2deRH4oaUJzYWxDJEhlfG9OZXt7NitCX2xIVHJ3UkZCQ113amFTfElXUHZVPFAzPXlxZzBNSmRoTFV5SjtIO0spZmA7YiFPR2F0TCF8KVlIO0tGdTBeMWJu''@;'; put 'put ''Yl4yOEZoOTA1dnppfmJWZFRqb15EdXloQWF7emlYfnV5aDlEM0guUXBpNyZVTzchc1J8aDR6IiooTFBnVUBYUSNKZHsyXV1XXyNlKi8/Nk01ZklLP0ZFIXR5M28mIks6a287N3x4dl5xaSFeYjJHaHtwT1IkMEA2MXNtdnwhJmkoUCZnKFBYJmgyIyxMaHd6dWxBS2tacSVtSFI1O0dObWsxLnRl''@;'; put 'put ''ZHF0TUlRKn0kck9hdzVHZUo0ekk6Mi8uTUlBKkIueEFBS083bmJYYSp8eFpRIW5nLlNIXlg4OEp6Q09aRUF1OUQ6RiJMQ0FBQUFBQUFBQUMiQ2gzbGt8WDlMaEQ1ZDBmNSs8IkhqfXhOc2t3MGowIUcmTSNZKnRPQChpS0hkV20uQFkkM006OjkmazY1PC47U195Zy9rfEhCOEpfYWN0QlZYIVpt''@;'; put 'put ''cj8yKS49YXZYPy9Wc01HPUhpODAkV2l0KEZ3X0JQYGhQVT1YIixKe2N0Sz4yazkvVT9fMzthXUtSRmdGR216OnReTiswRk5wTVU4ajtQMEZTS2NaNz5pMmxYVVtGMHVdKCE5bTAmKDxGe3YyT2IodyRNeThDNztzdkN0IT1SSy9ObGFedkcyUUlrVmIrSkZeNjU8Wz5LLyI2MkxEIUBaZSpkPVBf''@;'; put 'put ''cSUvMTpzWmU6Q1NRZW1ifE1ldSM2OE9hI1Iue3tKTixJUjVQTFtbcDlGMmgkQHlyVTh4fSgkSFtEbk93S3l3ZlhhSC5vSUNCOXNnfHQmeGlxWG5wQ0NyZn5TQEZleUJPTT0xXnNHN0lVNUxfeCZJa1tfdWgwX1RnRDUlIi9IZ0dDTEVEUkwiVGJWOm40aUdNNzQsK0p5c2RMcVlndjBkRWMlPFB+''@;'; put 'put ''dTFOLywyMUspPG05ZEQva1F2UXF7OUxTKG8+eUVpQX5IVzI7cUhUdDdXciJeKHg0KEVrUz5JajU/aERqTXk0a0MhIjxWSUJfQFRQUHkqflV+aCpqKk1wemspemg7KW1gIW51L0JXYDJienhKLGIzc1ZmM1loK3h0UChtM3FlcXd6ZVszMlBqPHEkWXFbW3ldNy4+W2I/dTVCLEZvSEpER01hO2lq''@;'; put 'put ''QXViUTVTSlFJTHMwXUBAc3ZzU2wve0FFalJHZTFzRWt0djliNUtCSiJ5TGIhQllteF59RShMLlgxIUYvQ20wNS9zOj89UHdmOkN2ZXZgLz5TN1cvb31YQCZsJCYoS0NPc14uKWJLNlFvU2F7ZDtbPHwyZT84Ujh1OmhiLGdJYFpDYSs8SjRgRzJ5clUjR3J2eDh4bit5XmBNQzA3ZFJCbyMzTlU9''@;'; put 'put ''IXUzcmN2S2lyMHBqfEUkejtle3VEcTdyRX58dCZESTIma00kdlUpSSozX15OX1UhcXVsZDpbcy5De0dvfmg9eEhHKkNhO2RsVDw9MFhuNzpZSVZpTHRzUF0rajBfRnAzZHNkRG8jUD9JYVAwdW5MNDUodllpRjVFLn5KQCQoZTZtXWA1RFVtT0c6ZCRWNWswNFBWQGU/WzNoLkpnRXJgcW57X3tG''@;'; put 'put ''fWskN04hKVdwPHpoYHZEWEIpJHxORCpgOkE9LFkmJiZdb2ddJE5bL19RK0YwaVRZMlVqaFVEMWcsZk5NZGReRStUPEZXWmlaPThNTilORyFUZUdoPmtPPl57fFl7S3JhMnF7VlpocE97VS4hNV47JEUqLEMzUmVkVyMoVXo8ZDpAVjlXaHFrS1pGaShPJjx8cExiSFlafmN0KW4jdTx+TTw+fHN7''@;'; put 'put ''NW5pPnNeb058bENAY10pelRpQWtBS0pqNm8mLlhRJkQyOyl1OFssWzV8X29JIUJ2VzJbVFkwKl4rcT9vcTNVSCMse0lHdTZ2LjowKEN1WkN7KGg4Y2twWzMlYXxrMDEiV2hmUylxbXVvN1NySlFwcnROOmsydHhafTZCdjxdRkthNTtDYWd0X0wlYiZeQ2smfFBgPVQzSjxHSTczdTh2PSlbblI0''@;'; put 'put ''Y2RbbCRELl5sM1ZnfHlDJEJGPiw4LGdQVD98PENfXXdjbV18SmxtbX1ecDAqSVQ0UD9dPC9UZSlCYn1GUltoSEZ8VUJsPD9BRjddR20pUmdBZWgqM34pclUuc3F0YnY8M3E7K2IyXj1JL3NBaHRfOzNAKH1TTkooRXVvO35kLm0kXiRsVlpdfTI4KjBNQnprbzNULztFMzxJez0yV0gwOl03MGlS''@;'; put 'put ''Sl1gXWJIKXkqPTMwe3k3SzdrZHFkWWYzejBQUmk3JUJGSFFiUnxtaUNHTiQpIlZjIjgvLHsyVG97X11AX2VUVithWl5Ac1YleXhpZjU2TFpnMWd2SGMqfmhDejcsfSJWZmVkUDZDODJgR0p0fThiPUwoMjZRVXklfV9UMj86ej1dXTA5P3dsM29tUVZ6Wj0lVS90WywwP2E0RHJtZiVKfWQ2OWp8''@;'; put 'put ''JmlaInpVPS9kUWYkJkssSCNONiVNUTMsYVRdKCpOZXdFfCJuP1hgTEcrPExUK1E2eHtCLEJJNzJdeSpPN1QrYG5kPzAoKzBQRjZkMDh1X1I1YnBgPnQsO0ksfmsra1IqMFg5KF1mRiI3XkIhbDhgfXwralZWMWM2Sj1dT1pmXlQ5Z0pjMk5COWtxaUU3dDZeLDIrIXUqOFpLbDxYZmgvQWNWU0hj''@;'; put 'put ''dzhBLjBQUTxFWztQI2RMZlJ5KXJUcmwiNTp3PXtjTFhkJU9dNDw+S0hAMXImMzY1MWdkN2BLcWZCNnRkMnNEYzNgLl4jSV9pV08sQ1NLcEhyeTskV3UkMT9MW0h1NUI0fT0+NngmUkZMPSFNQDhoR2UkbUdOQDU8VGkhfHQwfGZQWk58IX5OKHNUXiQ8dyVGU11hPiFWOjVqMkthQE8rRXsqeDFK''@;'; put 'put ''K1FbL1JUOjlFcnBvTFlBZkc8JihJYj95LzNMJmU8TUdtXVVdalckRX0oTkskXlBOcHVoRD1xW3xzIlNsYG0/QEAiUkUvNm4qVTNRUVZLQHUkd290SnBYRSkvL3s0Jl0yM1ZZeGMoflg+Q0Ymbk80cW55PypENU4vQGFAUXxZYTcxcCldZzl6WmxjL2xdOUhRLlF1ZGkpcmhGaz94TlI8JTR0RndI''@;'; put 'put ''JGJrY3M/OEl0NGRuUHZnLjZZZjhKWTxgKks6V0w2bmpuNF5lOiE2P0dScnAjZkZWelZGN3RlV19qZnBuYT1XbSU/fW85RH1iS1Vqd0VOb3RTNiN+M3l3LmtqWSRqOz88R2RCTiZfSD8iL3dLTWNlKldkfWwlNGU8P1lvRDBndSNwKHo+VVYzdHxCeWoyI1A/YXEvJGZjRG46anFBW2RYOmIpSjNq''@;'; put 'put ''XjZCd2NOITddU29jZ0tpMkxqMiNgQzdGXjBEeTJpcEsoTkNQMHs+QnRlTyNXV29nbTwsPU48bUZ7JU48P3JvVkZlWWthezlGQEg9I2JYPztsSnUkMSJsVkJ4UV45b2ZoTCtIS2RZRUcpJiZ3VmFXQTk2TE5sSlV0dXA8a09zMjtTOW1qMnpZVG9eUnVAaF1tKGdFJXYjZXVCJSkuQlFpblAkUGNU''@;'; put 'put ''an5VJWlqJi40UjUwImoqRnAzWU13OXl0aXl6IXFEdylhYiVJNzY6a0hvNTV2MV0haVZndWNENkc1di4sNVtgcy52P2t9PVM3anp5V1FTR1NwNjpRJGhtY3A9QEIpR0xiMSpFVHlAelsxfSp3YTsoT2Q+NEc5U3JALmIlIU91fjplIklVMlVUMHRDZV5TUzxFW2k8QHx7TTt4LCpuTzN6QWJpWjZg''@;'; put 'put ''K303T0Z2RSg9MlkmSUpAU3N1KVdJcSQyIiQxIXhBSDYrKi9IUzN+TDc9Lz4jejdkalVWYy47Q0NzLF16VCxdRGoxJTtoWDZOMz9CdEZZbyJhb09QU0NidzBQQ11NREhNaHx9ZEYofnpxY1U8cjFgbjtuQF5ZZTl1IVk0USRUPzUoSFpEa3hCPSs0T2JUQF8rS2NoZXVyLElmcVJFVFMmQzkjZ0dy''@;'; put 'put ''Mm5IIyxFeylVKlVwPV94QE5ANlRNajFvcEdrOHtSO3liI3hxTVJ+a1ZSI08yel5ZaSZtPH5EaG50RF4uVGozWT12VTxgQjZTdXVKKjN5aj9jWzVRPiYiXy9wfkg0IlY/QSRFe0hAYlZhXUA9SWJ9fVFjM2VBSl58KFh0YnlRUHhCIVRGR1U4Tl5rSUMrOnJMb2k7e2xYUCxudE9CdVV+WUU0Rkl8''@;'; put 'put ''SkF7YnhXSlhrdn1TY051aGV1aztUSl5nUXNiU0o9YFhQXTBnfjhKbUp8Wj5leyM4JHslaX1sVG0qVVUhbns6VngoQ2UxYyxsUHlMQGFwcG48bGpPJXY0cEpfNCtLdTVXQ1k5fkNJVHFddmd0VFhlZTE4JC49dHo8QHpfO1YrLHdgOEpANHNeY08xW3NIZmRQVnI5MkcpLFdFOyxCNXlCZ11CM3A8''@;'; put 'put ''NDBdb35PMUVmdERrTSY6XzM3TVd6Z0dwPztNVk1DTGh7UHYrT1ROa1FaO2VdVUhiSEw8SXkoL2ApYFluPHtrOiZ3bFQ9OHJ1cEdEPVloTXdzekZXIltbME9QImhKI1FeXXBJPWVdVyRLI1VNSDB2bFVVdCxmXXtGKyMqPFNlcVVDZkxvNyY/an59VTdhPkRhYjNuM2tuclFXR29JK11DaiJFPCM2''@;'; put 'put ''KT51YV0wbnh0IlVjTTgjRFdJRHBabH07dXVbMDVqSk1RRCtoLkkqdCF0fFhSfURudWhkKTBgPE9wdD57bUIrIjAwV0MwPXlRUjYxUXNzfVEza15wTCZLfFZVWUpyN3w1R0x8aFQoY2Y6ODRrVEFwOUUxczRqOzFSOEtkO1p4entoT3hhUEM4Q1E6JXBfNTNbP1RARFg2dDt3VDVnYno3QXpfe0Eh''@;'; put 'put ''T0tQMGo8SVFIVkREPi4sWVUpXUxXLiFuSjVpbXFKOClORWs0Y298aCZDRylrcCUiTjRmdWFhR2RvJTMpQWpfbCg6ViFTSzRFOSZ5cTo0a2s0OF8qYGsxNWFzZWtRRzlNYCl2USFOMzQiPzhiaVZ7RWU2byJEXm1QSEY8V0AraTVFX2IudmVfUXF0UlVISmwvfWJxYVVVcCQ1eGdbVHZHLlt7V1Ai''@;'; put 'put ''U0BtRG9gPi5nIWpQfGtQckJ1eUlHIXxIL0JJe3AzZ3kkaXY1UlRzIXR1Snxddzg4X1RuX1U9aH5iImNJKTBoO1tZW1EzbipbZzU9KFtRN0dOZXloQUNVMkU+RV59UEg4MVJvKmdRIy8lKT1AfGRMU3I7NzUrP0ZLQlUlRDFQU0A0KXVPJEQ9U2NKSzlLZ2VdXXQ9NVsxXlIxazU6cCE1Ild2aCV6''@;'; put 'put ''PVh8aCNAJHAydThCb3ElQCM8Sng0KT5eKGAsanMoey9HO1FPZ2MpXlhOW10hTndsOn1TbCE5JXsxW2ovclFUVCx0dHdZczY3USt6ZGEhZlNTe3JlamxmN1IoPzxeaXNRaW1qb1d7Z1VEdGp7QGBrbHcxQilTe3dtX0gwPGRAYn5yK11pTCMpak5OPnJ7b3IrU3NgTTF6YiwrZHh8MkRxRloxSXsk''@;'; put 'put ''QXkkcGspRVczKUoudzs6KVVpJVlpe2FIM3Z3IywxKVJRais0MFgrX0VORV97UCsyc3IvdjZQXiV3WkUwU11BTkg6bTdWfn5FTzkkJDErVFpeW3k2Uz4iTFNoMkRgQ3pwRzdFKlZCTUxZMlhRKjphVWA3bD0wU1BkW3A6aytbS2hsSUk1SWQmI10vJlRmKUdpTTV7eXNNSFVrT213emx3bkhufVZn''@;'; put 'put ''RGtVRmk0YFlQSnpwV0hOSD1ONHx3UWY6Zzp9R35hJTg2Xm5zOHwkaU9YSTpTRms3anYiS3djPHk7IWJ6JFdmN0c3NVttXz9MYlo0NEdUd1t7RnIqaSVtdSxjY2t3KEp3ZlM9NFQ1MyQoYSp1MDtvdFF5KC8uQEtyaz8rb2BULm9ya2UyJDs2Z3g4N1smM3Y2QWlVeE1mPWYjT2thXkViMjpoJU9Z''@;'; put 'put ''RGpWamVtYk9WfCE4S3ZtTHhLMiFDaFJfMmR9KDJsT0pyRjQ9YCowYzdFU0NhQHQpKEAzPjY4OGZFT0hVXVlXZEk7R04pL2NNZitCQHFYRXQ4ZXFWeW4xam01YkBkfSkhIXNGVTIzMnlqbTg+THY2O1RkVmwhRTpGOyY7ITxWJG1vSms4LmBCeUVRSE15OnAuKzRRJGt6Jlo8WSUvSCRjU0N6XVBQ''@;'; put 'put ''aWJdWW1XJn5rUC5QPlUyZE9dTjxaMShAfWI6JHtXa3EmMWNyP3ZOLGwzZiklc3tJMH5dUm9CP1NvRjlGO29kX1A3Slg0USpQKThuPCxpP1o8WzwkKlV6RyNPM1V+Lld5UmN8ZXJIW3RLVCF0RHNRNnNaSyx8aSRHTD8sbW1EPzFMbDI1KGhSc3NRU1hSX19nTUBNV30+dD5vcjQhcEZFaWpWeSxa''@;'; put 'put ''UXs7TGVzdH1bPlt1aEomL31IUmN+KlV5XTh4W05+JG9iWFFxPWUmP2hNIkdmKSt3bWchPDd6WXtjbUpOOHB8PzJAZypoZjhBNyI2WDJESnRQOFBzfVs6Oy82SHo9WH17eGtlQndoMjZ9d35+RD5ZZn51Oyh8SG9kJDh2ZCRpKXtGVnpgeVkhVHA6RjNtQEgyWmBaSVlRNno5UzhIdHFddEpiO2Ak''@;'; put 'put ''akxKVTpHNWU7LkMsLHZtM2hhP0A+b0k+Ti85cF59biY9X2BzcGoqdGVLYmViTXhPKCpUWURnLDhFXTE0ajZrLjpWYlpPeWNdLF4sJCJyQDtPWzA2Qkg6NzBne3NnKD9GWjdubS9nM2x7bXEzNTE2YTYsaHEpKDwobGYwUz0vJFomdiwpSXlSTEBZfmlFZ1IiaTJwfHNZMjQrajYrKnFLZlJoIyF+''@;'; put 'put ''NSFdZGpGT10/PnBOfHhWWSwlPklFbiwpKHJnbXV2VlJmIUx5Mj9WQCpoRSZrM25+dykoRnVxeSFUU25QUXJbNi5OSGdea1NAbUlZPDJCR3k/fWU7QChCTTZDRUZLSWZ7cUFMfGQybG1Fai5rQHooYEtPaytIRFRkLmZkP34+V0E9KH5HdlpISHVKOT8rdlYpckJTLEExZm8zODRzLzVdPDled25V''@;'; put 'put ''ZlVBY2wwa25Aa3N7X3B7VHFPfWl2OD8wNnpgRUtPXWlzcUpMQ2F6LCQwUHlbVXQqVjpxZ3dGZ0IvYys8WGM6fEBART11XWZDe303O3t0fDA+Rmp7MXEqaywoI3NaYyRzN11+UjFiQGhpNHB+PGJQbFcoQ34rYFZtbmI+dDxDYkZvPlZIbk43MkpbMTomV09YcWp2XV1kay98P088b2gvR1ZDdFZa''@;'; put 'put ''Vl1XcXw+O3U/MEJQMnBCWms8d1pFNk14VihPc141aEc7RW97UiwlaFtJbmIzRzJpS2F3OGdkajJ4Y0VWempFRkdacDlCIm0qaUEhMGttPD5pNmQkUE1EJk5kZCF9Xy5vM0BJPj5kOWlAZFlVSCxGKTBdWSFHZH12NFolWmFQPy99JEhVLz5OIkI8QiYuaTxjd0sqLCxEWW9Fd3k8JGkzSWE/X0dZ''@;'; put 'put ''dlR9M150Jj5rZDFJX0JodDwwenkuZnpxWG5sQCJrSTckI3YyKVAqIUV6YkopUk0/Oip2IUldbWtrejImPkZNZV9+fSN1dXAkJkxrLkhkQUxYVUMvNXR0Tk9tclgkUmk3MWVMfTBkZUIjZkMqZzQiPUVKX3JDZHg8LE1KYzxAVDA3VihqNW5jNXZfL2B0RnA7a1lwdHMuMnhQM0EzQnBtKnpMT29H''@;'; put 'put ''SCZwdXU9e197PlFqPi8kKiF8bGZ6UylNQkxyeiZpYmlebjRKMTYxY21fPTslfkxXL18hfm9pXUM3XWBbcFMkQkl6UFk6XzwmRiVvJFBGKi9GS3sxeD1jfUhJIkkjPlJ5KipjSWRDWDwrPCY8OWgofkJLUSQyUXIxKmQ8dntTWjA6N1l+ZXxAdTZuI2NKP0ZFVFpLO3s1cFk4TGNEXjRmLy8hWEhF''@;'; put 'put ''UDA4cThSaGhTYkg6UUV1UjNLdXgmKF1PbzVhN0ZyeVhYMU83a3I9JHVyIVI2aTxfbmdpKCQoYz0yYFhbI2ZVdz9xKktiN05PSGQmO1Ire25DU3Q/ZU9daU87Wkddamg3KjxqdEdlaF9DQnEyRTlFamY1I2IyblhmWUpjIjh3MTUiMWFJU18uPjBWJjlzL3s+XTp9fmY2cTExVVBuMnAjdH5mLC5Y''@;'; put 'put ''eyksLzIhKWttWU5XUHU4KjgyTiNPLnNtPiRCQHApQSpPeWh2V2c2WlhxSDUjXytDQVBKTzRXVlZ1STVqTGZAbV5jUy5QUSJTVVZ2TUV4TExablp7QnJvYSkwfW5waXYoVGdKVk49bXZ6SC8+JGBdaFoyLl5GQT1GTnhlXWNKQkRiZDBmbVFgcih5dihfJURgandYTlYvelpHLHxSO002U2IsVE4v''@;'; put 'put ''fD5dTkVKUHUvN3ZUdis3RiEoaGdTRjpedyg5TD8lX1MucXk0IWBLRSJ3TDQvbj9fNnEoa2AwJF9LJG8sKl9paXArVyJTbVokNTR3NlY2Qk1oQj1lNElCKEBFJVk4Tk44VEVNW3I4IyFXXzFYUiMsTVtocH5Rdzpda2RgdX1rM15EQyMwYTJ4N1Zzb1tlPFlVfVZQcVBtKSk6Wk9qIV5JbyVvcHlK''@;'; put 'put ''aEI2YE5aP2Q5I2xrZEEsRkMuOiJaZ1gwUn1YWl5FJU4wJSMuI0JSdlA/dEV4MDI1WT1TQl1PRlF2VkRBRD07YX52Zks9TGt0bWF7anJKRDVobUBjTUVCPXNsPn4yPllEY0EpM2g7MDJvIjY5QDxsNz9QI1UmUksuaUlXWENWaGwuSFB9VlM5Qi5CO0FCUl5EOSpNMGkhcUlIc1p0dStEXjFxU1l5''@;'; put 'put ''XiVQRH1qU0BfRUJ+OXxXST1DeFBieUFEN1tdbnhkLHNCcDdgUXhwRGdOL3BQXWdMfnlTXTZCYWdwYkpRWCpfMDpMdXQlMC8kY1k4cHdJYEJBIVE/ezd8bGNwLkRdJmM7KDRSSShrKVNMai9bKzZ7TUZmNX1iVF9JUkhwX2gsZCVMZmtzYGkuNX1qS0opYUxLRHtbciZWQ3xwfXxBKGhVJXMpaT92''@;'; put 'put ''OzhXSTFmbHNIZDZXcyZ8R0tYP2R4eyo/MSpgTTIhUGVCeyQyK1s2VDw7R29Xazh1TzFZWGZ8ImUlfmdZUXslSUIiVD5hUFR7UTw6fUg5ZFRSUXM3bkwrdU1dYnByJj5ZUVtkYnxuNHNbaEIicEI5M3NXN2tpSy5va00sMnBYbDlHQmBiY154I2lDZE5hcDkrNyN3Xj4xaXU7Si9UQ3xVUUpEX3pM''@;'; put 'put ''PGY/Zm1Nb1pzYGM0XnNJUTFQMlMxPltNXWlIZm5Pe31KRzhmeiZqNmppc3trMzwsPzk8SlltOiFKeltJPWJJRXhsPGw3OFVaVDdtVzpnI3xtdWE7cWE+bCNUP1A1akdWLkVJZzx1JF55bi95LlcmYkdZJnpycSpkaGUjQnBgMzE6UXJ0X1tKYkhGMiZjOlQkeChYMFlGdXQyQks8OUMobz1HQHtl''@;'; put 'put ''Q2dxREBRNlo5aHo7bWJLaF9vRW4yTlM+LnxPPkR6aXhoX00seiJvMiI+ZyZMblZ8c1olJEBLKkR7YVNgW19CUj0sdipnNChhOTpCN2paPFh3O2AhWnhqYT9DcD9SaUNbUG5aVX1MdGh+aF1RJGUrXj5TLFE3ajFbIWwuJG9GW052TjoraWJJI3Neemo2OFNYMGdeWltZZmlzVXRyR3pTXiFLKjIh''@;'; put 'put ''WXl7aDVEI2ghK3A3VCwkL1FOYWQzTFlpeXp8VkthP05zS3tfV1ksPSQwYSxVZlZUJl92ZEhDSGhZdk0oOThGU0JiV2w4KiwwIkNvLGQ0X3hOcCNDLGA9NV1oMEhkeFFVXlNgfmcodDsscyN2I18kQlNJbWtUeXZ6IyVxSDU+TS8ldGs3VkYzT0FEQjNJeipuW3ZLNSRmQyhyYz88NWRMNSZ0JSxn''@;'; put 'put ''LitROXgiaSt5WCg/NF0lWzEjfFp2bWZBIU9jLzIzeGEqfWdNP3svcyVdZCwwMTQyKFtsOCElclBYKCNOb2Q3PjUrKktXTTdwbk8ySUM8YDtgRzA2SGBYSy5aLCpDYzopSz1CSkN0b0khWUtsaX12PDcsZnM7M2hUVlEpckNUWSZZImBhIkBEMGpILktwIjVvYW9PNjVDeCNEdkNiRD1mUHlbTXU3''@;'; put 'put ''LDFBflE2Pzt2UVhVJEB9el5kN3JPKE5ee3o7I3VvZFpGYUVNOWtkMGVsSEBPYXY5VysmNTVBRjZgc1EiNV9KczhIdnU8b3o0Y3g3cnNwcFckVyhMXz1LZDFDc2lGdHppaklsa2xTIlZsRnAlJkNIXXRfNGoyTW17SVt3Mz49aGUpVW9iImpfPVdlNC5WQUBWWSowJWtsPEtNbWY8XypwKjVqbCYm''@;'; put 'put ''bzNBVkw5az59aDFje01ObzxxSEE8bC4/NHZDeVQmKkk5IzE+dWx+elpaWzxgIiQrQ1Qudj9vSX00PWtUXjVqWzd3KjdNLGdNPXhWbnQ0S1BLWHxMLCxyRXs3V0Mkc2E9akZ7XSNwSnw9UUs9InBnYlI3akgsKls8ZjAzO3ZHaGloYmBxWjQxVGlKM2xrcSYwaXJ4NF5aZjc4KjR3SX1afmcpRH52''@;'; put 'put ''Llo9JEVoQlhkTEVlIkBNekt3dVV7b1hCdU54eDs/SzN+T18iYzYuKUhzPE55fTdiRVhsNk1UZCt6Qlt0O001RFk3NG8jfkYvQUY/VEldQitjPWtQVWBaKUAqKyx3WW1dRm8/RnM7PmYwUGQ1NkxTeytLSXZ4L2l3SUhGOUBdMm8sOj8+U19tJGZxZX0kV2Z9al97MiFganp4VSxVbkxfYUVgfVRF''@;'; put 'put ''PmFkZD15Wzc3e1EmX3guaDAqYSsuUjN1dWIvY2JRN0Q/K1pLUCUkZl1sKWwzYWlrdSkkQXdzb2QhT0NSfDIwVkF1WmQ2X25sLFo3aC9OPjJxVWp+X3smOVZfPXJYRCwlYmNUSypVR2l1fS8rcVJoQEs6PE4lY28oPl5sbmNhXWIqOHQ1eTF2JnJkcTNyZUtQYF87WyUlbSVRJF1vIyRAZ3p9XW1q''@;'; put 'put ''T3V7Sm5dMnoxZE9jZGkhO2gvNDw7cG1yMHsmb2t1IjdpTFBsfisvNX0pSnZiY3x1ZCFqN3dNWyojUUcvOlREMyw3X2g0eHRwJCYsKEN6Z3REW1VVfTVia3YhejpGPF06OCpxbSFMU1F6ayg4SlJAb19gX1hsWT8jSHBzdTdhWSFdWiZmNV4uRUBubnRbUXBvbHQrRSUhcSU6Uzk2QG1hTzJQK3Zl''@;'; put 'put ''ZmZGQCt1JnZmbzQ4M2UmdE18diNIdSM5Kl8kU0c0YHt6LDllKmxbUUdANjF9O2hgPCN+SnFjVFJsIXoyIVJyJCNoS0ouXjhhX09iPXFVKT9AT18oZX4zUHYkZ3ZoQXtzfTV1OCFzdlFuNDAuZ3l5SkkjWTYsLz14Om50W09mRUx7JiN8N0RjI2k3XkU9fCp1NzVweUloKilgZkJKdSRuR0lUJTVY''@;'; put 'put ''bXomZiE1PEdwRE8mTldTKyUzK2c3eXBfS0ZAS1p1VXAxInlvdzRmezBRbjZxME1RZDVaLzxgeXVlKjsrSiJkNFpZUUAjbGZ2QyQ6YzthYiUkbXwraE05fihJWk93cEp3RndDOVQyLFh9fGVxRDxmIW1fJkBOTSosSiVVTzVtYVdseHRjWWEuTGElU2dnRVIoS1d5VypFPCMuaU10RSp9aGs8JWlW''@;'; put 'put ''QmA/W2BEI1EhfHdOSEk7a0JoUX1xXSlYRWJ6V0U7dksvVHA3allhITB+UW0paCY6NVVid0hgeTc3PkNvbH1vU1tWWzVpfFMuMHtTSCZhIlNII2IpO2o0SlhzLkF+XmgjRlY0ITc5eTxnKTI6JGYqJElLVzl7ZkMrbn4hRm9hViJ3YiQvUV54P31eVFRPSGNMO1t5OzJZSHxRQEJfckRDXnRkVCos''@;'; put 'put ''Ry8zZzRnOTZ9JWtJekovTER7YnMse3c3U2dwand7LF5EXn4mSn1sXVVdSFhYZng2ZWlvSy53O1NNfldTM0Vdcm9tdHFha2goeD5LYSVGeFZJUjlPQm86TShxZkR1fWRVb05POSFNJn44VHBdR0Q/Z3hwUCwpV3g5InFnQXp6flQ0PEN8SkRZaUdlSD9+dnhgPXdEbUl9dFtDMF5wYjVpeWkmRFFe''@;'; put 'put ''eFFWYlFxP0h7OztbXSswMyksTEV4WVUiYDYsOXZTS19kSE5kVGo6XXpINSpPPzI2cGpJI2B5QCk/Q3c+eipxL0kpSS80LmtNMk0zLHZ3LjdVUDFVZHc4aFQyfX5iXm99I1ZGMkI4RnJpIVdJPzkjNVdNW2s6LzJMLy9TfXtDYnhLT1BXcDZvPW1gbnx+dExkaHBuPkp6ZFtGQ1c7RXpKPDhPdiJ+''@;'; put 'put ''XikmSDUrU283Ol01VWRZY2BCdF9mUGdIPXpCdz4jV3FCUFZlNHQ7VkBbe29ZSmRIQ15BVSlLfU1lY1QjI0I4RWs0RnJUSkBXV1clLDR+aXdDW2s4Z31Va0YvNlp8dGwudEVNQz8pdWdhekoyXksldmhbbkJqR2NdIyhiQ0ArPnlJZn1oPmp4PjV3WSFdRiF6VkY7YC4kdW5pVVVQPEZKKG1IaFpi''@;'; put 'put ''IkpmQW5qajJgRGZ0e3YkRE5ifUgsdHBATlMqQixGXXxxXXxQR3YmI1EpNkVvRyQoRl1RcX4vbWkpJCY5SExNY2dOS19BQnpyOktPPnFBVXBqeDJvNShZTzxne3kjIz1pbFBSYHxERX51ME53UlI1SCNGQSQxRzhmO3VbZ05dMF99ZmJ7PmxgcUFUOSRoIzldKDtCW24wdCI9NmFFK0JnQThqJWFg''@;'; put 'put ''KWJiVDkkWnI8VUVZclouVE99Um5XezFuME9Ue2ZEM3BqQ3YhengzbTI9LklhM1s0WUw4JFN1eXcwXzt4fCg6dHEoKj1HXjRfJV5nfjIzWUYoLH5mW2VJVnZodE1yRHdyfiN1VH4jTHZTXnorIkJiVDxNJlNbVDAqVnwqKFFiSlY9RyF9NUF2b304JTlUaS9Rfk9rRU8zIWNHVj1jfSlNT1shcm5R''@;'; put 'put ''RlM1UGVLelI7NDpEKHFZKV5LVHA8fihWWVZJKzhMOUY7XkxHKkZOIXBWUnVQPFJBNGI2TTQ0SSI5UiwmKilQcURyUjtfUiQ0QzNSQUc/Tm54cjFWb317d0U2VUd9WTB7XT48bWZzLGVHNHRDTFVpfHs8KkNNQ3lDUChmR15ZTV1oeztRd2olcV4qTkk0dGRjZyNsbClBQF5GYkp3QURPYDM3YHE9''@;'; put 'put ''e3VsOSY9NGl7IjxJZ29GQ3whWSYqUFlOfX45fTFwVnJQNGElKHd3eGliMnErblowY1d0d25QV18iW3B8YnJjK1Z8V3t8b0Y9dlVvR3FvYj9RZWYzYXVZSGM8N1lyZDROe2g5JjBkeUVNeXsyUEpXb2RPIWE7SH50Jj9WNnRjOi90K1UuQm5vPXEoNmxDVExIQVhAZlp4Ki9GV3JEdUlsSVBPTXBF''@;'; put 'put ''WG43OjZQOkcwNlY4ISVmKGA9e1B3KCxtJlBJYW5bLyZyKz0za2A/Vzk5KEs6YElhSlJaLnxZOmpqPXhaI09nOkw2OSQ9VkEmVmYzclM1ZHxedGM6Ujg0S3c3LnN1NlJbMlpXbjdlS2J2TlZHNmpIIjc2Mjd4dmFFajZyaW1nSFRLMWQ7JHBOS0UjZmUmPU1Ocn0qa2prQjV4dUI9b05LJkd6Q05f''@;'; put 'put ''KTY3LClIZX1dUUp0XntSUCkufnVJI3svMzkwY1VEemhFd11WLlRtUkhOeWIoTnplVihRfDxzOUV4WltbQlFNMkMwbHpbfl9wT11tUi4kYEZsWnNZLkBOZW8qNTZdekVPIWgmVXM7eDJFOV5YRnU7UnUucSVaTFtVM3AvJU52bXMmIjNybVNAK302KjE+YXtFP19zfGxTNHd7LFB5T2h6c0R6fSJY''@;'; put 'put ''WDoxd0BUPlpje2IkXXQ6SW8mUUw0VVUub3BRWXxYK2xbZ0heUFR7JCxxNll+ZC8meDQ3I00yeTBlUEpQcjhgYkZfKWZQe3loKCE6UDIjK2tucmlAUDBdTC9fWXY5KV92PjxhSVtAa197UCFTNTBfXUpjeE4yXj5WS1FJLEZHa2ZLMFBAai5eRTdfOFtMUDMoLFBYRVR0NVZob1pUN3AzRT8oMiVd''@;'; put 'put ''KmxqV2VCYClZd20/eip9T1t4X1t4O1kkejYrLnp0RzswI0FNXytlPW9NT2MoZHpZfnsvTUNEQmJgW2syKmMiJTZUJlFqeEZlQ2RyeF5SfkthelFqZzpyUS4yQmxTZCtrLGJsdHkyYEVyRTFNMzU0OEZyQ1IpM1VhRDFVXS9PP2p7TyE3XjE3W0VeIiZ9dGw/X3xPazpoblI6KV43UU0peWVxejBm''@;'; put 'put ''OWZUWSMqdmRfNy9eUCFublp+WXRucC42a1RAeCVxYWYqUCFrL3g5Ll9FRUZJcG52MXdVeGcocWljb2VCdFZ6VGhHT21YTDhGNH55K3YxU1ZjQ1VVUnB8blBjI1JSbkJSTz1wdHBXZktDIilGbm1mZmlVal81SkQ3Q0U6PDsuYE5YWXRrVXR9SWouVjVlbXZxfnoxdihiWTdXTCZvMEZ7O29gJHx5''@;'; put 'put ''eilRe2lyOFJNSUlBbTZVezJ1PiJub3AreSFtciw7SzA6Yz1Kdj1pdFZ4JnBlfWhjJUchK3AoaHgzSGN5IltgW0V0UD5yL2Y1bkhIT3ZuaEMsIkw+KFV+e0h6ejIsJXh1ailmVEk7YjElKGAxTW1ZWn5qfVhJfiZFbk9nPVt9UkhUIUosQUwufm02eDBibStOczQxVnA1WDxiLHMiP1drT3w+PzZR''@;'; put 'put ''U3RIaCRfaVAoP2FRb29ITEZVLzlXWnckKGgoZUBiaGBCU3pxSDU5UCJ6OU8pOil1PD55OzNreXpRbEpLemNhbW5nImd7PEs6XXkvJCVgfXRtMDQsW1F4ImB3ZDdJWSpTPilQXlNue0xTX0xyayQqKUtYRSlhcV9wP25dczxxOEIiMGk/JVVJWkxFNCQ6e3I4UjBhL3chdzouX3ssSlg5UXdHa08+''@;'; put 'put ''dSFKV2RSYCtDQU0/W1E/cjYpNiI+JmlaKXVKbjJjTmJ3cXJRWjVaQ0s3MzFBLyF2QT9QQ2UhemxIcjErOlE9P05hSEV4MD1DQ3lsU3YuTXRIQHQySSMuM3x3OFZlXXd1ZkFTR0k5Q2Y2OnVvTGopNnVIZEBMZ0UqKHZzdXFpSVsqZ150XlBhalFfdHBYKy8vQ1pTdVdXVUEyNDV7PWEjcHk8OHAj''@;'; put 'put ''fUxyQkcmV1JGJWcrYUxaXT4lMyhJZzBgc3tEMVJmIiFLNHNuY3RROlUyczVaRWtkI3E9bWV3RnkyKmosdXxKR11iSCJRc3YqWDwmb3dYfit0P25raUcvRTZuWSQpSFJERDlwckZLMCNIbW05ayxEQCFSQXt1eXZPQitPOUUhZngiJS52RX1GVjtee09leSJYdlpCNG5daC9ZOmkjOHt1ZyJgNjQ5''@;'; put 'put ''JH4obXcyOG5uIytUQ210I1N9WzlrIWE3K2siPl5FMTRIajsxRHd8cXE3YmldSDZRJls8ZF9AU2Z+JGNbNTYsb3s2MFBFMlN1NSMmR0UqZVUyQ01qUVd+Q2wre2NaeGQyaEB4c1ZBOFJ1KXU0KEQjRihbOXZyUyRnZSJZY0trX1FvNHBtZHIxOWx9YUpGKkckUXZlPls2VWxrQ01Ib0MzTm5DPzdu''@;'; put 'put ''N21RIXBHcUlFKFA7OyQ4KkgzOD0rRDlsa1psW1hIWjZVVTUyMkdLOSNdRyxqdy9HZE48NHhnWj9qZ0hATHt+NDQ9TUhrL250WEEoTWkmZUcpW3F9VHUxNVtfUm9QLEQ/LzpefDdUIT1UfjFsfl9HR08mMCYrWF8yWX1IaEZILCIsfTtJNXAjbWZGPXtZdUJFUz9ocnIrJV17QWpkWWtNRHlSLCkx''@;'; put 'put ''blM+Omw1RWRZbkxOX2YkP0l0bHxGcVFkakwrYDVzeVd3MTZpbjFbcmZ8fCl+YmdJfDVALkpGV3h7aiRLIiUmYVRuLHEiOU85SXFlLG1WYnU3WVEqeTdrUXNGcDdPRiJPYDIiWW0sfTk3Tm4pKE0/U0ZjZ1JkSyZDYDhVWD9NZXFkSDszYSEpYX1fUy5xU2RRelRuRnwzN3xbRGs4VC9jQ2dTNFQm''@;'; put 'put ''Y0UpKn5qb3NYUE84JHZxVSMjP2A/JHo+RVZxaXlVaTdqQ2FPQ21nUXg2LmowPXFQemJrVyI/fUZAZERfOThCcjY5T2ZeW1UwOTZkZnJzPSM3Q2laanAvbUJSOFpZLCJzQW4sRVpkT1VvK3I9fitZdntTOGlIVl5pJmRXe1spUytqfGNuJVB3bmNkLmNQRDhqNiQ8fFg8Qj94enM5TE9ZaHY5bFp6''@;'; put 'put ''SkFzKzYhIUBMa05oX0hWV2khbEdvb1pPZSw9VTsqU1U3WjFpQyYkb0RMYSx4SnhVKERlSmBhNF08L0suaVtJPCFiLjJYOVdmfUlrWF8/XzdiVk1oT0JpN183Zl5hLGNGNkBleTkhSUQpZyMiTCl2OFVtVFt+IyY9TWtEST5bNSpFajhrYGRzYns6ZVUmfC9daXhHdV9pJCt0MmBvPzpkPzc1JG1Z''@;'; put 'put ''TW5aS28vP1V0VzclZG1PPUVDSmVdTyRvI110WkUxL0N5bjNeOUlSVnVjVVd1NUUzRHN6Py87eDokdExHMz9MPlQsWkpkN0FVK1BTJTE4TS9eOXc0IWlRKEAoRk1ZMUh3fXRnSkw0NDhtOFd0IzlKbGtlaH5oPFhHeC5PKl9fY3JofWE1Tk02ViNzbFBpIXdgcmFodVdiNEs+LiRmKDl4L3RUZFEj''@;'; put 'put ''JE5YOD0pWi8vUSM3LCMhWTZXNilkXWNJbyt9KEI4eyRKVyFPM142cXd3VjJiRWNzSmlZazlmMGNXQStEIj14bD0yOH1ET0xeW2dvNFt8U19LaHspTUhzVWA8M2tbKE1TZSNwXmoick5saSJMWSkpQ1ZUK0k2cj0zbTswZmVDMUl5NiM+ZWNrIX5AYnNVa1MveiolJntdPGE0Lm9jb3AiNXExKzV1''@;'; put 'put ''PDF6cW8laltSZWgrdHNAYEZGRD8qJXhSVTRFeS9HM0Z6JV9tOT53QCwwQ0V7eCFmZSxSfEtGOEckcHxdWj9tMSo7ZUt6dnojYG1RaGczbW59XzBdWSJKPCsqRkdCVltdXkZOIipXKyJ5ZDhIRj17cTNQZ1YpWzEqVmZlci5eYEtXV2IlaEpyMCtCOm9dMihJR1d3cWF0eW43Ukk+PVFyMnppLChX''@;'; put 'put ''c2ZwfDVoJlFNeVEoX0t7Y2J+TmcpQCgsYm98SGU0dUYiejN5c2p0QkRSL21hVUtXI1d9ZXJ+fjFafCJWfDlMMVVUSFYrKDwlZnh9UGRkL0g6MTNscVFvLyxESzt5Okp4a21BUVZVPHluczcvRTMxYTMxKkU+LFh3NGU6OWlnOD1jbHVdOUxQX1MqdzFkPHRMW2FPR0c6ei9TKjZscCNraS8zX2dH''@;'; put 'put ''RUh0I09gU3Z8dC9mW1VPcT5RKnhWeDgjMH1USlhJfC42MSJ+empeKFlKbixaaU5Zb1ZMZSlDfGQoNEJML0NuUENncD93YVNFVjp2JG9vOiNld0NKZj0sUUtZSCZMWHhgdihDR1RiSzZkWHU5fWhMSHA2TH5oL3RyVHl0PHczNzwoSVNtYi4wV0dMWD5DR05mQnF+UkhJeGV8R3JPK2luVU14Zj9H''@;'; put 'put ''cE0/YltJS3hkUF18IlZKPUx5REArISw2N0UrfmJyL0V+aCFHQU9bUmQkYnFAcE43NUN3KDFUIUFebG1wLD0pbC81Wkc+KnAyXXM5OlAmIT92K115d29EbSQ1SH1sOTAyPkA2UTokTH1oMjA8ZDhlIWxWLElnUV5RWWsuSkw0cGZKUXdJcVVyKXtHQUc+OShLWVd2Zm8qUzxOOSYqVnM0d2JEfm5y''@;'; put 'put ''WlBYfDdjaD03eWNCfHZON2pWZCUiISlzPC4wXXZHenA0WEIlajM6dGp7QCZlT2xMbVAiZ0FNeFB0bDB1JUhIRUMrKWdranElLmxjdVFVT1BPUlF3ZylbdXBCUHwzJFZXMT5CLHMzY3BVXiMmX28uWSwuaCVZIUY2Ul52KVMjWlJDJWZEJTA/TTAoUzw8MiJMYn46PktDRi5veHxCb08/bDFudGdV''@;'; put 'put ''VzA6fiUhUG4wUzlDfWNmeDxCcEwvcyJSXy9jNmImWGQhKVAkfDhZT1dkfjFLO2RWPSJIUUx9ci5hYzk2Sndoa09MdT5PKXIpPDQ/ZUdxQV11LHB3MEVaaSNrRU56P0R9di5iSSV9OUVzVisrcEszfihlTWo/SDE8ezJAUTl9N0JbZ1VCRiNdVzNiSHlpR01WODA6YTk6Ul0kb3BfeT8md1AqQW1W''@;'; put 'put ''P1RMI182M1doNEFGUVZHRE96NXFFTlEkYTc3VTEsMkIvbUp4SHNya3ljaSh6TjMhTU1OOm8+Izt7Lj4lWjpNM1B6VTlCWzZOcmcidChfYDosRE55STIhZ1h3KX49KV5eV1tIKDdsJGg4UCw7M3UjNnE8WjsqZFRVKS8ifCZdYDgrdkUoMVhPWmZgKCo4SkorUnxHRWwmSjIsW09xSyk9JUkwZmta''@;'; put 'put ''RTtHZF9Ld3JVW0FBdSpzMkpab1c6KXhHaSx9OGEjSFldT0JfLzN3QVNZPHQ0I0omeHtHSGVyPGtndCZVO0NQT24rXSxOQm1meCgmRkhPNTs2dForLDx0RG5gWTtzcUBtWkpaUz9qSz9+OSltQio6dEd4d3B3ZENPXzJjWFRwfnF7PyNyJkNIQns7NDYkZ3tpQGNlYXV7cF4+JHZZSXN+aVFuRW1Y''@;'; put 'put ''eDdiOltGYzdJZHB+dDYvJU0vMFt1JSkwOlhZd3NOXy5GIWQmS0ZKSS95XTtMJFUqVHF9Nl41WjxaUms7e0lzdCYkU1RITFk7MGJeNmk/Okh2XyRhPmFnfiMmeXJdPnklZFFpQjdELGVFW25YWHlJUkBGb1prdVApT15SZT5RemIyI2RFWnk4SiVZSlROJVVoOTE/W0tRTElANiJyT2lMRDkuRX14''@;'; put 'put ''RG0qQ3xzP3NBSVY2M1VAeERrPE9pR21FPF1RblN6LG92KmxHdy5lSCxFbzM8fUltdU1aKjZuKURJdmh1ZWIoLzZsSzk5OVh4Sk5BXj5KLCMhVUtGaVVeW0F5dXQ0Sz4+aUtjd1chU1k2V35TWHgwbSE/LkI1L1JxZ2VOJiMiLyQheTxZXUNZWFI3IUx1RT1pUi9kclhGUTVjc3w1PGBsSD8xQmMr''@;'; put 'put ''d1VfUCZdMlNHVFNXcCoqclVxTCImVE48Ql42eCs0Y1h2VTloWmBKQUNYRGF5aV5XWXs2Qm9BNVtOcUhHbVA1SkBdMHw7KE8+NFNTOlFwMnx4RWZ1YU5DUE1hMH1sMjh3WTNQQ2trZSlhN3RiTWUpanh7NUk2VHV6Y35rcSREXlJGNT56SUp6b15iYS5eIjZ6X1gmeUsoPE1YbzFpVUg2W0tPOTxi''@;'; put 'put ''WFVnImh+QFgkYnYkYD4kVWQ+Slc7OmN2d3dzN11QQ1FqTmBANUxSZUJ9dWtKPXM4RCZRMj5Mej1FQnR1JC53fFJ1XTFeUHB5LlglQihPZWVOZ2wqNjYvaztnQCVpIzcxMXxkNU5JT31iRDYpb15dXWFxNWJTQFc2STxAYzp6ezRubCskPEklK3N4MTpqLlF3UkdbV2kmMFRsdHV3YkMrInopcGln''@;'; put 'put ''emBEZjRqYmBfMnYqSXZqXix5VWMwe2ZtNTgvbzx+SCZeN21uZ1RtSHB7R1tPYHwzKjAxMDU7anh3P3Y1ajlsV19NSW94LDlraGZmdywxQjN8YS5mVmo7T0Nkc1pGRUw6Z2UhPVZKVnw7cTA7WC5rcnxBQCViS1Fna2lVciVdZCg3IXFuKUNSeUs+RThCUzVMPndBc3dRWEk1fmI1SWdxfmV+b01o''@;'; put 'put ''Q0xFT211SlgxVSkhaH4oQnQ/R14/cXUrZm09fSVYcV1SRF1sSTxuI0t2T1UqOEAlcDJuYXF4aikvTHtIYTVed1BAbGI8QSpfITxyaGYjIltQVUppKnlaPjxCW34+MD5XUWBnJGFtI1tuOjRHMiU3dGglOnltOjU5KTUjZ0pjZVF3Z1dXR1tUVHFLVHdZWy52SzwiVzp7Q0Q+TTFdSztqaSZdUmp9''@;'; put 'put ''R2gkTmYhOU5PKEhON3peXlNsKEFJMC5AM2pdMS9NdUM8UmVEPGRTOnFRUTwzc1NnfWkuLzVUOExOQ1l7P0R0bFhQIzNwZFdvJTc7dC4pOixIcXdOR3kwYFI/Z0pYYjppJldUPl9yKmJZWH4uZ353PWAkb0Z4Y1JdRVBOQnF6LEt7NFJmTF9kKWcoTTtkakRzayQxXmE0dys+VmIuSTJVUEtsVSNG''@;'; put 'put ''R1RISz5eIiRbVmg0WmJdXXppSHNlZWVQXzRHMzF2fk42OmRfTSRydm14b2oqV2ldfCxjM11NTWRSUjEya1FpeXlLZjUwK3JwbFhkUCRHTyhmdllwbEsyYnthR0tkXkYrUXN1QFNiUzk0SjVxdnVlbXkuWUMiOUdjdTl6KDwrQCpTXm8zVVIxNXRlUDVSI2liMC5WZHFCX2heWUo/eChlLllrUnBn''@;'; put 'put ''LklbY2ttamwmWDNPel1eclk9ZkxUQXVlWDtoJj1QW1ByVl1WTEZFbCYpam1HaEo0NFd1K3B7Z1A1M24oOjVVfUB5OCNoZDs8UjhtR0g2ZUtjc0BbPU1UZWhnSUVRQkZ5ZG9hclFLbmZpRGZSWDE9U0oyZS9IJTQpc0d4KEpNXSpJNTFTd3Zdcn07PjNxXStaRWJ2cn5kO3JuPmJHdWk0I2tTakQo''@;'; put 'put ''UER9ODAsaVhsQTckbEpsLFE6eSw1TkR5ZWAhPEBJVnVnKDtpSlgwLzRUfE9OdV80dEJvaDtrQiNZU18scXM2OilFfHJdQkcsJD1CV3YmWnBoeSs/KmUwIT5rO31AXVBjZis/MHxLYmd6PVEkZVpCOEl9blV+VkQ6UFljcC5ndzkjcXxOMHBVaVt6LnZCT3QwKEdrYU0pc1VrKzNObkw3N2EvI3R3''@;'; put 'put ''PFE8KzhTYzA4S0hXV0IhV1k+anlYU1lNcSEzQEBxOEJOOXBNPHV5Im9zaHYjK1BfUEE9Vn0jeSRUX05qTDs8aUh6MkY+LkRnYSw7UzlzRUwjP3xtUGU0T2ZBTz9RTl1KUTY/VkR3cixJRGc3MkExRWhodV93PnNPQ2BAOCEuOzFZP3U8Q0xnUE8we2QlOTR2c10sQ149Rm13KUMuazRjfl1XaiIq''@;'; put 'put ''dGxib31WXSxMYypHZGgxdlVOMWVlcyFDSGApV3ZeLjhmcjVPLD11QXo8OUF2I2h2SilhXmF3X1ZUb2V5bFRAcS8mQzVWdjFfMTRBdV5vWj53QT9QayEmPF5YYiRZS0tZSFgoZj5UREJoNT9WPm8oMm5nc2JIPzJaL0ZAP2QzaE5VaGAxTjRaPmJHSUd3dl43My8uRDdoT0NtYStzViEjU0pEVmRW''@;'; put 'put ''OF1mUmR4L1B9KkM5UkRfNGBpP1ssJU5kbj5MKFJUMzpKaS9aeW5Pfn54bWZLNyxxSlFWfFYwLDNGZFJhdjkoUHclWEZINE51V0Rpei9nUUJ6bjhKd3dyREtHUz14Wzd7bmNYciI3e2UuamZwZWJaeXcrQ3VKYkxjbmJSb0I6SVFOcWFHVX1bRDFQWkV8ekdLPnlVUSp1VmVEYiM1Vkc+MT8/X1ph''@;'; put 'put ''V2ZOO2gvJTUxRDJEPXp8LFAheWdpeGd5bjg+eihnVDQueFBlcTIyTVNtQTtpPGs0TVhWPkBaXjJ0e3hkfFEoXW90ZSE2O084I0d0KWMxYWRaSyNhTStKYGFbUFR0OGJJVzdiaCtPX1V3ZTZLQEJoYERPI0dZP29+ViJJN1NDQVpGbX12UV5dR0FnJSFmfkF0ej47aTY+fWdUMCx1UiVAXyVTTkhg''@;'; put 'put ''Mjg7RD4oZWYyeXc3dCVLNVJpQXN0Lks4PDdxNVEwJVBhfjt8O0poUyNVX2FAeG1LUkNYcER3Nk53MHNCPVVSOip8PmtxJDB7Smh9b1l0Xk02d2JYJXN+Z3pkRi58anhZJjxXSlhRN1ooZ3k4OWQpc2wxYF5hbzU2bUdvSzopOmFeZlN3eGEyYSY3aT8vcFNiUnc5VHQsKDRfZ1pWdEM+STtLXWw6''@;'; put 'put ''bEpzZT59ZXk5dm95QUdpNC92aikreE9tMElqZipZaVZOUnpqYHM8YzVZeHlEekV4aSIhQ3dfJkU9UTFXN212e3Q1NWU3bjVId3FWUWU3QC8mQmZ3ITdiQDM+OnoofiZLMFIsZS8xQ2o5ZkZfQSJ7UjltR2E0fWdPb18oPz4lM0ROMytOb0BIMyJoaz1ELDFwUCRCa0llRiVnb2FSOGxBZmhONlBT''@;'; put 'put ''UUl0JkZVMW5EcjtDcGgxQnomaWcyN31FSW8hRSJPSl5HRytNWX0uWTdxV1puaH1yZSlufjpSLiEpXVhJQSU1OkkkW1UrdDlYTzsyJEpifSNKRkoyMHB1T2FUUVRuX1FqZlhrfWh3L3ZJd3I8Z2B4fW5aQmEhbkdya143ajp2O1dDeHtDKn5BNDh8KEEldWRtcV9wdixSWV8wRGU4ZF5qTCxIaFYm''@;'; put 'put ''cWdwMj9eSGJbKHclZDJ9KWxDQ0R8aT02NDJRNHZRcVpfYlk1ZHtSektqe3ZAfTVzTVtUXURuRDlUK2pEOUxrWyM7Nio3VywwJWZ2e3Y+X0Uldlt6Py8uP30pNk1uVWQ8fHopcSVLeEZfYXswU25PRVp4aU12KUtOfT88enBLeSEmRXpzRzFyWTxDREd6OH02VmdIU1djP0JKYzgxZ0tmKXhjRj9Q''@;'; put 'put ''OnZ7MjklayR1WDtLWW05NXledVFjeHJ1UGQ3JkVlUDdRQ3dmRXZGYW92cTJocXlCSHJvNDlIJCRGTl9Db147UUgkdUVeZzBqQ3gye0E4ZlRHIzEpUmYiP29EO249LHlCUClVPFVBYmVyfG54YD98XyE7LEg8eD9qOS9XLk47MHAmUEtpaE1aQnsiSUltNFpZIix6UEM/Y2MyV1tlfGJvRE5BeT0/''@;'; put 'put ''KSE2NzBQYzFhM3dkVGVNN25vbixXVCZtbjYze31KW3VrMT0iaSl7Rk95TE4rdjQpKS4+LkF3TWxmRG4xbyVbbmlkXX1lX3FwPnBZVEdaa0ZIKz5mez4/MzojP0FvPXFVZ3pscWE+LiN6SjJ0aHlsaUR0Pkw9VXgyVmZ4V2NqQVAlSHs7M3NuM31JLGlJdTxTd2c7MCNIUFNVPWNbPnVVcSRaL2Vn''@;'; put 'put ''OSo/MlVpPThISDJYeUBHQlkzbEZBM1pge0Y1fXFAXnEufXZ0SS9kMH5xKWgjMVpNUEJoNmYvMDQvenFnfFBpSF8yeFZvdHwwX2ApOEBASHJHPXBxUy9qS3BNejh8NDVKajBaenUkV35wY3RYOX1CNHNCYHttOyhSQ3ExPXB1KGhFbyR5ez0ybz9pcHVwbTo3V31KWFhTWklBJX05U0N1cFF1VixY''@;'; put 'put ''cGRLczxBZX5LLjJUaE99Q2pHWUc+T1slYDlmbW1hfGlnKDArbmsveWFTIjlePzlRTT9aJUY2fC9jTVMmWV8pNGtVJlhIRXU9WDt9OnJ7KGh6MEYhK0ZnOk5sZWAmO1UxeHYyTSJNMzFDWzR0O1lhYlAhZzE+KUxUO0h2fCl0fXtWUiZeZ2htUjJ8Wkx1TkZTZXBrZFBDampTNVkrYVg4PHIsMGsk''@;'; put 'put ''eEY/eTs7QktfZ0h7ck96Ml5OX0daekg2TzF6UkRiLktvI2d1eHM7aChyQFtSO0ohOkREbUp7JnNmKmtuOXtBZiRWTkVPY2Y8KXx4dyg7PkBqRGpzdnh1TU1BRjJlWVc0fUY5dlV8Vlo8YUlUNnRobHxkNWQ8RHVVWz0iQykoOEpta0ZWMVN+K045WHZsNWRrRWNqX3l7aXNyJXx4Rl1fUDBfQF1i''@;'; put 'put ''VThNUyEmPlVAdnxgKFB0RzooZixYWmkpQTF2U3BgV3lWSzQoOjkxTWFtfmBMSE5NWH1dWEpsMCtZWD0vViUsP1Q5cDdEPUgmUXdMeHBRLEY6Qi5tak57LHwxT3szbilMOCh5X1FQNl5SQn0wPjV7ezV3eCxeXyJgdF0qWzFhVCkpKEBUOkV7ezZaeEU/NT4zVkJYcmtbRj5+MVAlOChfaGpYJkBg''@;'; put 'put ''dktDTD98cjssOjFhZWJtKlk2UmxFVzV9eiN5WUhPITZeUmx6d00pRzwrYDd0bE95Pn5ET0pYM1tEdGVzbGhoe0MlV0d3cXtKWnI2YHVNYjRQdHshN0ZWXmFxUmhgJUBOfVJaYyw+bzJ3I2w7eVR0XyM1RWhSR35GbX18UnlrPCIveWdSVS8zfGtMNGgzX2twcVlEeXxwWzpBclhLTUhZODZAfEQ8''@;'; put 'put ''InxOU3QrekswVCEvJkcrIkwiPj9oP3g1d15rSjhvbXl8dWA8V2xeSl4zMXdgWzxxRHt3LGJyV1dZUGZoeVRiNTtzciJrLEVJSy9NeEYlanhfOHFGIl5yJlo8bEklRGddMCZlaTtzPW90ImxKV0pYckZwZUZNe0BdVlAucz9AVnl5MiM2QE57SmYyPWhLU2UoaCtgK2AiP09jMCEhNDMmYjdLNG5f''@;'; put 'put ''TntrTHwlZiFpO2k4d2NBOlFzSHBFbUZ1RXgheVVvUUQueH5TIUdIYkQxSXZ5YCV6Sj5ZKmlXbzUybEUicVRPMFtGdCNNZnNzQzw1cH4vUm1EWG4qWyN1fER8LEcyRlAoZnZ2bXFdWkQ5V1pPYiF4aEZ2Y2E6QHF+aVNXJjRbPnRxMFQ2IyRZSXo0Z0M0Iz1Ddlk5KXQzSFJEIWAmZ1tzYmFee0Zo''@;'; put 'put ''RWxzMH1pW0IiIX4oWztKfFZjX1gpT2dedjg+VXkvNmhLI1BLcTF7MTRFel41WHY1dndITkYxSnI0UzBodGdxVT4ianc+fDtTUGI2fTs+d1FaTVI5Yz49O00sV1IiN3VaWWAkeSNnLiY6aS8+WFd+ND5YL1lVZVA0ODo4PF1VNCpeV1tmbFVaISFfdUs1WmglL0ZgKF8uW1F+b0chSmE5IUh+T0VZ''@;'; put 'put ''Z0Zdak5vPkI2cmo/TW1CY2NzdzAlJmREXnQ2Omcmdl1VIlFCclFuPmh3L31GOGRRRkIxOz82cXJ0IU1leG1LKyFhZyFzW1Z3NG5HbCFPdiJRJU5UbDdgOChVVmZNYj45Kllrckw2U2ttS05ebj1UWHFgUmQkV2V7VCx0b1ZZQ35jMSp5NGU6KTBKMmdHVkRyeHlQVkw3eDkoXURQQy52VERlZFBy''@;'; put 'put ''QVhSM3FhZEBOdTN7fS8lXj1XeVI1QFs/Yzt8WnZ5PkU4UjZ+RDdiZzdELjNMLiZbbjo0RypzJFd9eEAhPH5kYVg4YzpiJltPVXp6cUlLPzJnOyE9ME0jO1YrJmdjZDEvRmR5RitYTHM+fnFMfjB1bGtxcSJLKHtYPjBIWEp8QyR6dVd9ezNAKSZSPXVRRDVmZ31jZihgcjY3bE5ZakBxV2ZoL0ta''@;'; put 'put ''PCR6OSpZYzw+b202N0UjTTRZOFV1OlJgOHFWaUZqIk87YHlIeml4NX1RMmxQZD9JckY8M3FvQWdiWDhDXVVPRHtwOjRpLkVIOUdYOCM9ZjN1RWc5cWxmcVpmdHVmYDFpNVJYMUo6O18+YVlGSk4hcU52Lll5NH4vKFE9JHgrRz9LbWpOTlljIjtSNEB8RiNfRkNOJiRwaktMeig5Km5ZWXsreHFv''@;'; put 'put ''OlU+Tj8wTDQkPGoqX2hWbzsyLzQrYHA5TDVdW0JDckdhX1s7KTJvYj51PlIwcEUrWXA5NWFyc3pMNl06T0w2Lno9NXIvcHhmcFshISo5RkBHVl9DbXk6ejg3Y0R9YHVJPXl8Kyx0TENBYWglPjFxcE5Le1RLejFgWnR4OmxNST5hJDBiI3pKajVhRUIzb3lQUTFhQ1FzTWZYYypITUBdfk4+NCRp''@;'; put 'put ''fmlKViFRSXx9OTMobSQmPEM8IXVLX2g/e2RxPmc7Xmd2cGJDXSM2OkNRYnpZVllgOURuTjU+KyN6JUd+cHlgJUtzbS4/XVlja0hAK1Z+WVd8I3J6PStZKiphcnU/IjFZOEs+QHc0I3xqdnh3SzBqUHlJZDMwKTBrXUFyfT03VHhANV0xfUBZQVJAZWhlaH50eVkpKkQpUUF7OXcsTDgze00lLGUs''@;'; put 'put ''fj12Wk4zX0FLbS40IV5BWDM1WFIpX2FGcldrcmdbP1AubDluS1lpe3xXNGRgU2lYOX5LMChsQSVTa2wkfmxae0VsRmdOZU5Vb2YrNkRwV1AheTt2WHlzM0khQWJUdDlIUDpWbDx2NWpZYD9aRyxnNkR8REdzYUtLJTFrclJONkpVSk5WfXAjO31mOVc1dCVqWld0NG0oN2pZRWpwJWxCZ3loUlBZ''@;'; put 'put ''LH0uQzZkQDZqSXJkaSNsUWI+IVE7TyV2VDtDNn10SHMjfDdWMCJQSklxaEAldFolRW90K30zYVdON2B9P1FERkNmMS9MYkcqZ2NYe1FqWig8Pjl8ODdVU0pwbzFPaXF8MGFwWzF9LFMkQ11Tb2MkOkNGQSxAfnRxKmVsTlszanZAazcuKyI/diloVD5OJmlBI3NgSUhOWFJrNU0ieSEqX0dHRlJR''@;'; put 'put ''PjU+TC49THE4Rn05cXdUU1dEQysqIV56ZUtsTXElKXh8MmUyZkZ8e28rW2hAKEZ5dj9wV05VVGI5dDo6X142WFdvLjRSPUMwMHFjZSt3P3x6O1RsRGI1Z3Y5Ry8ibj9mR2l3RyJNdm19TV14Z3puK1tRUGdQUFVaKSxyU3tROzszbVluIjlJfVlMUXZ3VmVsSz4kRXQlezwxQE8ja017Xl12O3Qr''@;'; put 'put ''QHR9NUZAYGZ4cztCejBDail5YEFPbmlPNkA5XzFVS0RZWFBfMVpkZH1XVlFVfmRgS28sNik4bjRNZms1ITFHaXMkPy91bHNrbytROy9NX1NROilzWWAxZiM4cypuOFE4eTZuLmpKeCxaWl1PUSRSd2RNcCR9RC9VdUNzMS49UVh3RGgidVRfLCplNkF3ZSRraVVeKlhbaF1fOjlHTmdDdzZeNXcx''@;'; put 'put ''NlhZMFU/Y2BVP1BkNWRQQGlIUSYiY14hQ283dG8vWVRLezpmRHRLNi9XNmAsQm8raE5bbzNHTFpNc2s1MVUrbGM6MEkuMzFFRUpwUW1OTUx8LDFKOHl4LnN6Wy9sW19SL05gZDIwLmVwVXVORjZldF9tbXgzeFpbZlhpdShDL3o2c2QzJmR4Y2BvJm5BIXBsU3ckWWY8T0RvUzJbMW9Gfiove0pu''@;'; put 'put ''dFhHTGh3WDBdSVI/IUN2I3VTKnApO0BBJEokdyx1V2d2XzBsI1NWQjZMNSkxeCp1eTtfez5+XV1hcVc/W1dAJiNmOCR1VjRsKFc7WkpIPGsjMFN9WEkxI2xnPz1yPCpEQ0oyZCwwJVtRczJ8SUI2XV86JmxedT93NXNyY2VHMWJeWDI1PCh5bHsvVmJoaE4kW1ZoOm1fayIjNTVlYExkRnFEPnhx''@;'; put 'put ''fmldfiRjaXw8eWN7Iz9FQH11YXI/L1VVQmJOd0BXS1JDUzs3YmRrbD4lN0VOP3dSOWVaWHg4IUd7R1lmaU54ZyFYP0A/STxmOC83ZCRYWGZJSF5JVyNMcCs5ImFSNHdXWHZHJD4rW3p2Rjx2WXw1U0JpelJ+QHF2ZVt2c3FpQDB1LHRyYm9XQiE9WFRWa3BQTGdHYX1sMGg4UX5majtCUnN8InJB''@;'; put 'put ''PTI9MmtiV1FuIjYkKUBMSXI4KHIjcT97ZjNUanpsMkt2dkA2Q3pSY2oqfjBuUWsvNU8wOiFeRTZMQUpWRUFeYStLJThzYEZ9Y1Q5NlZhTDtSLCI7PyNEcWwzJWhSfG51U2d2PXRRayFySV1jOCZOTEh9NE59aUJmdjRmZW5UYiNMIjYiMUdOUkM7bmBLM115OjpiI0dWLCY4RVcwOlR1S05vcTRP''@;'; put 'put ''N1huYjQvWDRqUWxqQV13dVQ4MiQrOEx0MkVyLDl9W0hqQGlYSTlsQGNYfWJGTlg0bjdKKTZaQCojNWp1e3xjeUVDVlQ6akZXQX5PMXhkVzt8JGspamZgOytEVzYqWWx6QHF6PjghdHZCbl9FVHIqQDhLe2hCQGpsRU5RSi8qYSlXc2p2TTBpXlFtLjxoVUlyNGBaUlZkTF5fbzBOLy9vN3x2eTpr''@;'; put 'put ''Vj9IaU4lXjB2d3xXPFpZeHNsTjV6eFd5P21NcyxYaVE8XjVTJTsvbjMoYTFEZVVVYG5QOE5SfX1NK11KWE0qaD5vIVZJcjQ9Q2MkIXdlfU1lfipuSSF6Rj1BTmdrWCxORG5ScFVuLD8yeFNzYGpkYFRZXkRqS2NjQ1J6bC93YGtbRVNmOTdFVkdNfWFNZ2ppJCoyXVZmMi9Ea0ZyYiEud3J9UH4w''@;'; put 'put ''YS84SDM5cmpOe3dSImBlYTIyQy4lRCQhYjdJdGN3UF5Wait2SHlYc3sxPWNoWTF6YCY+bGwjXyIsdHhzP0lJYUd8W1srTkIpRF4oKFtpK1pETzI+TU9CYG5FV2VnRGksPHZUfCROMURASktUekMpc3hjfEJNbiVPKDY+JH5jI2xBJkRvTjwuMy9CQ2NvTzljbjZJXzpXUSRJalBjJmo+Yi5IRWZi''@;'; put 'put ''O0gqQlosfSxrKWpLZ1IjNSpzR3tiJXI2WXxBJDxsfmNwcDMkIXckQGxPOUF1PjAkPGpOX3VxcUt2I1tZI15EWWReYSgxOCx9QypmRV5nWlk9UjEuIkU2aV94K3t9LC9fOGpCb0JvbV5XX1Zbdyt6aFJqdjVlc3d1JVd0Ljo3cCFwInlJe2U9XmMuRn00fntqfTQ7fE1gKkxFXVE0dGZqVlV9aTdS''@;'; put 'put ''QX14Q312NHp5bz1PJiRNS2lUKVslODFGQXlZYTBqO1tQM0FoWSFbNEdubC5RMk9ELkl9UXN7endGcmlPaWlAczBlWC59e2Q9OU49VUMlSHcmdCw7UUtnekYrTnB4cUNxaU9nS0ZMRUp4PGpiJnNtbltUdWUoZkFEWn1DISglRmBxVTw0aWNSPnxHQFdWdSUvNCYkTTdpYWZsQ3RQeGg2SnNwdXNz''@;'; put 'put ''VyUwS2x6VntaQDg5IkwoLEc3TU5DP3thcGhoTT0lMjZVckN5Wn1VIzozJUNoIUpWfT9uZXdhLnYyMj5PN20yN3EuVVA2JjxkeW4uQ3RDV0gmNl8+amo+JmFPP0ArTjllR0FHcDxhYnFocE18WWsve3wjZFpMUH1aeDVtcFs6Ul0jbEJ4JklRPFB4cyo5KCZwbD1YQShbPkMjbFd4K1JwMH0iL1Q9''@;'; put 'put ''c1J7d0A6TnFTbixmOVE4a195Vk99bjc0NElPR3c+bnUrMHJrMEUob2hSfEJJYSkzIzVeaTFwcWVHIWlkND09bzVuRmheXVBxKERMXVIiOVRdeDY2Zm9nZVR7JHM/QkliKHxPLyQ1Lj4ycTgre1VRXmdVVyxtPnhMIylBUDwubSVoXzpDZFp2aVpSU1BhQmdgZk1gKjovIzx6OF5GUj9UQ1ZtN0ZW''@;'; put 'put ''UUtmTWJ2VTZSLyEwemFOWWd6NWt7QiN+Ykl2WDVlPlcrOkcoelRveGdeUWFEYTdheUg4ZEZ+WzNxfDx2ZEROWWlgVCpIR28+cy4pLjIyVV4maE83OVAxZ2hyUiUhMnVhQnRETmFDaiUkRG8pLmdPLCZxX2JUJHN7KEZdQUlxZDMwR1hHZGFGR2wpTlosTE0sd0Q7SF1Dd1s0NVBlbmwhfT5yJSpv''@;'; put 'put ''emc6a291UyZjYzw9ayVlLDcwMmQ2Z2IrY21kWls7L1JUWm5AQVg0LEM3fCpudHhGaFVCXTV1Zkw4PjMxMyRANGh9anpaIztjX3ZCcjZ5eE43MUttKD1dY3ZCJShPUCZBdU9+aXplYEl2WyQuXmxIXTcqVUxxWjdJVH1UcWg1WnosZiNgUypra0dzSSpQZ0NDbntpZFV0UmI+WiNZPGt1OztkV0sr''@;'; put 'put ''Tn4uei9XKnpuNkFkamR6SUhadzU6PXFESkdyckA+VjJ6Y1JwPVZnZV5PKVtoMyV3WCold2t7WGlJLHcxXmo/JXIkaVVudlByXntuWTM0QEIuYl5hViRJM1p+L3Z9bldpIXk5UHRTX10oNk1wdHlpb1B4eDc7fC5laHJAUjZXUHpqXndRcCZCQ206Ozo3JElUTCI0aDQpeV13Ril6NTUjNz9xJUEi''@;'; put 'put ''Iz9mP05wPEBqOGFgIl91OyQqRilJPkw5TEt2WUJpbm9Ld1hSQ1Z4OEkwaXRsZ31wZiU2WmlwYXoje2EwUiNVQCZBN2tuRkx1WSpFe1U/OlhXYzNrc1U4WjVFUVN9Wk1LPiZHOj5XO31OVDRdQzspbzVJSl8yam5PKHAiZERiUmtgamxSaCghWUY3WXB+Nl1HK1ZMKD0sKkZ4JjBrZGlybkszNGJl''@;'; put 'put ''JGovdDE0QS52XjdtNykuOTpHVy5eTV9TdWwoOHhqV1VYfS9scSpzLn1WI0hFUHNEbUx7fChXLy5xN2ssSmpATkNSU0lZSTQ8fURyPFhsT3BGXilCTiZ6UU9iQUcyUTI6LHFyUHs/ZlIiYmgpd2VzSGIieE07Z0JPZF0qOEZ4dkM7UmtkWkZbeGBKakloXT5dNCIkdT1KKG9gI3R8Y1cwbDh1Uj47''@;'; put 'put ''NFQvd0hVcTZQMHRQQ05pPkAqbHhdXnpab0hdVixPX3dpXn18Rm92Z31WWGBoSHxCOE11RFJSNCRiVnw+bFRXaGBCfm1AXWh3PlY9TlpwLjJhTCojUFo5MjtrXzU0STdrPGAuWVd9LzpVUXt1RDh0I0VZXjVGZmZxbUZrKXBbS3VTbSElKDs2QjZXM2dJWTVNTyRQZUouMCkxQHBLWSpmdX5UKnk0''@;'; put 'put ''WDBKbn09WjB+O0hoZihuSXt4UmozajVBO0pTRU5ZT2A/W00wNldHbXApYVdFdFZhP3hGMzxyWjlRYCR5QGJEOD9RZUdVYyIiOCZtTXlUcVQ2dG41KG15IyFzbCRVZVFuV0NmfU1Lcz9kRDApWVV+dyJDd31EZnxTPjIzKT5dUlldMDNJVHtfJDxrQ0BVZFZLdXRuO25GR0kuUykuYWhMWzcmdSZr''@;'; put 'put ''Q2E7L0dOMzp3WGJyMW11a1tfSFFRaVBnOlhybyldeXFGbVZmdmRbSSZ3dkxdWUNbSTp3Jl9mLiNJezohMTBaKWhgV1F9WkV+cmZzK1U/ZF1zXXc+cGw6aFMvPVBwemwmM0xkUmQqRXU8XyQhNix5U19GfCY7el55R1lxeW5lbllQdkFBdiRdKGFWKWsxcGNYQTJFeHVlPXdsM1RILCVtPTc9YjVn''@;'; put 'put ''ZlhsLyZXelljXmM7JFd7SlsiOmEhZlZ3XXQ1KDoqXzExPVJUUzNATFR6P0IxaiFyVE5SKkt0QSFMeUU1WSxIS20sW2lwPX1QTV5+UGJ9RkRmME9XQD8xZiM/S2ZFYHV+TyY7SSFgQGIzQF5oVjQmSSJ9RWFVVThLZ3BCaiw+VU8uTiR1L2E2QEMoXVcuZlhdY3xUKylSSChLSXBSRFdHTGAwc191''@;'; put 'put ''eUUwXzs6OD9+QEwzdEJjVTYkXUwiV3UrQnMiWkxpVzJUPCl1Z0srQiE+IyJHdURsPlY2LCxvI29gNVM0OTxTRjZFMXZWb3cvKHZ3d3E9WWE9ell1MzNebTF0XSxhWFhVWm48KyZxODFWTXc4djhwQ3pZbDlVZWttOHR5eURWTFlWeVBMbTwoW2l+OiVDNEdkM3p1b3lSX2VgVSJjbGhdOElVWm9M''@;'; put 'put ''X0lmcDtrQjoja0s5dj5NRSQlNHR4VUVJJGJwUEpyNVdPXjh+KUdqVSYkez07QUFgUG16UnB3TDQqI0kmRi5mLz5VMkY5fll9WC5fRzlIOW9oQDhPYW4ydUtOVzxiRHlgZy4kK3NqTjEzbTQ+UGJ2Ym0pZD1MVjAsfnlUI001ZGRwM3gwLEEufDhMd2wofHksdHtuXzt6T35TakNSR2ltS1U9KWUw''@;'; put 'put ''OWY9Q25MZ0JJLDRJTXBnSnMjfGVifTI0Jjg3RnRwXyhTNi8wdkcpUT9qTFV5QHV5OWQqaVBKP2tzM1RNcmYhYjlQVD9sQFpEfVpGVkxgMUgxNFkzaFs8M19maiwsKVdbPixmcnxNOmkiK008THBIRnQsdnhULGZ1VDdaZEZBPHxUOTV9cktUWDRCNEAxUilGWnhQPUk1aFk2SGJHeDciK2BqR0he''@;'; put 'put ''SXRlaVkme1Vld3pgN1V8QzkqJl1IT1lWW2RPPy5EUCUsamFoWVhdaWlVdWdCOVd0cVVCTClNZEwyWzFAZVVjXU1DVCFGPUpzNXtOTV9Fa2FAK2o7Sjd1RjEiLFtfa0x8V2N3QVQ3SCwoRUU0LlJXW3VXVC9SVF9LKHYqWGNgT30zZC5eaEReUHh5bWt+fjczUEY/ZH1jPVdkU0crbCU4OjxBKVZU''@;'; put 'put ''YHEwQz5INyMkaFU7VXp1IUpZZy5VbUtNTj4ySkojV1hPSUdsN1dIZC5qSWsveC5pW1l7JVQ6M0hebDE1YCYsOXlrPlR6bT9oSk8lSl8rTD5ePFFpSE5qZWRTTVFUcGtAYiNEIXc0JlVXMCk9c0pqMjNmcnB4UD4wSDtFYXJ0W2l2RXNQJHxUP3drJDBDeXNDLmQ2JWI7KD1qTXFCW3lpYnh+NVlw''@;'; put 'put ''MGprNzh6T3pGRV9aPEJhNGVVWG5qOSo9MkN3ZTVJLFt5a3R5MTdjZkxhSSlIKlI/KFVnZDw5ZW0/bi44TGpJREtLN3Vxe047NXZEY3kmZ0khSlV4QnlTS05GVkgyVURlKUYmRjJOVi9gaUZPZlVgUko8V2spYVhPMT1UJG1zXT4kYSt3USZRcXplYUJyfXg6UCxgM1RWYXRAcTE4U0YvRHBpd3pH''@;'; put 'put ''Z3BqOFRfW2hOPT9Jc1V6ckRkVSxGeitRIz9PV0Z+V1BBbDsqPFREKVIlTHV4QnNsJWBCTXkwd342SERqIV9nZCwmdWxuaGAkfFpFN0glTXEiRltXTGk3P3ZYcTYhMkwyTWwuI2pQRERUPnhbYjtJNVJLQXVgXWhvW0YuOTVbanklLmYoPU0+XXshSndoOHZhO0NDJTJMPChTezclcTpGcF1BP21U''@;'; put 'put ''bnpYZ09gVmpDRzU3Knk3YkR0ZFpKaVJlY315My8ocWkpK1lmJC8ub1kubWVffGBoLEt3b1I9cjdfWTRjUkRhJF1pLFsmOnhUJUk/ZlEpPSEzQj5jLjJZRn1yUSR8O2dQLkMqLzc+O05ARmhZMEl0RlBzQEMsX2RVfHw+YllgRSJrNUZAYzgyVnB6MUNJLkQqOUUya3tPZVB2LyNyWmszdlI6OjFq''@;'; put 'put ''elRXSH5Gfnt4fEBBWzJTdSEjPEVfan1ZTDl7UGBlQjh1KiNXVykjPG87OWRNJXh2OVBBOj0jdyR4Z3lfc0xgKil5OGV5dCZsPkpPaXgyfWl0YG1FamtWRSomdkVbYjhlL3JQSVMpS0xmcWlhIVBLdD5YbEJjLFt6bXpbS3RNWCM/T0hUIkt8SjxeUEQ1Z2xBdjdIOD1rIloyTjFTYzx6SlhBcGBD''@;'; put 'put ''NEZPUjJbaz5Xck9Nc1YseF5baFVqVj9BNHE8MTNMX2I/K3ElR0VsciNZM3wmTTVMNmV9d2ZbblFuWUU0Pys9SUImalJ8Kl5jcTZ9PFkuYyskNno+JCEhd1loc0BwRnhDdU95OFcoPFRLOj5VL19XQWElQiVHTEs0Oml3JW07Nm9dUFA0THgrXTNXT1E6NjZtPjUuIUBkQjBuc2tiakZwTiVBIl12''@;'; put 'put ''WFkmNmZETyE1M09OLl1lQSkpMTpsbH14Sl45YiNFOmtCSHdKcVdJT3lzMXpXeSEsdCo3ITt5a28paXVCPktUeikpNTw8SWNmTEUyMUIxYlpke2MjL2FANzNMPlIzNXI4fl59dTAkN1hNXixBXXI6dDgrKT9zY0BVIjJDWklMX3xMQHg+Q15DO31tX21bSDdRO2pibFJieHJmSUlCWEp2JEc1VSFK''@;'; put 'put ''S3J2a0kzb3Y2LGRsLmw1P3NiUD1oKm5kMmxmPkJlW0MpLGpFRihHNEM7WXFdeE8oN2U2TXMmVyMuNTkrM2BeSHQsWXdEfklZPTl6RDp2fDFXK3FPW2phanRpPyxmZSkwN0xQOikiOjdqOnBtKX0jM2F7ZiF7TkooXWYpQVFCPi56X2hdU2F2KVRfZCxXQ01yZEV3ZGYlKWEpYVZaIXpGLmVxbEpa''@;'; put 'put ''QU9XWFJUOHc9NUh5LGdYK1R+cUVfXn1hUWJ4OCZUeDUsfDVKNDlQfF41LHJAaUxDK3ZJIT5iR00pWkdiL3ZpaHpKT3hmST5ZSnw+OHQ9U35sKUFAaiJNdCZXeHFQOmN2KT1eeFdHOWslWU1DWD5Efm5oRGp4eShqS0JIYGo8WUZSdTczJXZrayJpfVchRD10LytpX35NQlNlSWlVbWB3Q2BNe35T''@;'; put 'put ''VD1DKlYkYWp2K0NKNWI2OUxySktLLjd+aiJpXnMlNl95QXp1dSlqbE80bHMuKz1MVVolSGVkdCR8OmkjRmM7SkVDLjZATjMvdlR8cyFJTUlPOXhwdXVMQU5IPkBge3NTb3AlaiRRVXdGPEVGQi8oRUdkYjJ+XWQ8czU8djp2Z29Jd3FRKnRSNmY2amhKJmB3Qkk7TUt3NloxIU8iIW9NT2I0VW1U''@;'; put 'put ''TnkuKko/QUVReDhraWI6QkV6VlpwKDB2UlM1dmxkXT0xKXBmQXZJOFY/eyN2TiEuSjg2YyRpQF9+QCMqeS5fc31GMyUhME1+SWtfbG99XVEpczMxN3BWSFJ+ZjhfTF41Nnp2Wi9xTHdMVj55fnY6PCYkc0tZZ1tTRl9TbjdSWWwmc0U0WGI5Z0A3NWJeYlkpXmEmcSw6Q2NPc1giQypRMnVeVEMr''@;'; put 'put ''My48ckFDaChdSVFbcnZxV1swc3NFL0pJfWY/Sy90XVI0dEY1TWBrJWN3dX1ZLjBoK35KOTpCXyY0Y0lveXskMGB6JW1CJERYNE5rbUh8dCE1MyMpQFJjSShLN2FWSDRXTyRIVXk/fSV6PHNEQEo0Y1Y2KFgofngqeDpaVUkrZVhzK1pDYDshRWBLXko4fFhbWjhdZS82NG9acyNNSl8+TFdGMX1V''@;'; put 'put ''KklSPiEqNiw6MjI/Olk0YVo3Ji95cFRoNEcxZys7Snh8dHc8MkM6SntjZCk/OnVxfmpXeipDfnBJZXJOTyFncXAlSD9yOHh0fDd4ckFZbV5RI1U3ODJDPX13S1pEUlVLNXlBeiglOGlAcj83ejJrJWF2ci5FazE8VWcoPUtsMnEmRzBPW0tFLCMqeEdvQHNLTTJMN0RkL1dqVTYpUUJuNDkjOkp1''@;'; put 'put ''N091L0NYa1QyJig3ZnA1aCo3I3YhI2tndWBQM1BFXSg7Yzw6Tz8ySE47IVR2RnxVR0RAfW44SllqaTROIz5MOWJUbFphbG1jNzBIfjZWVTdFWEhfRT1IaHB8ZDsrcmA2QU81QypOW2FDKiE9W1RtcHdIMVolNVJhcUJuOXIlZmxma1VOeC5FOTIhOnN3UE5xK1ElWiN4QHlRbV1jOVdBX0hfbH5G''@;'; put 'put ''Qj9GfmF5THVDKWVEQVYuJl16KXdxWCsyVGFaUG8uPyNfVXNYOC46LEY5Pld7TmEmXVFtW3JuZ1NJKSRjRj1HMWE4WFlrc1oofG8payE0UHVZLyR3XzxEI29mPnptZHtJdjVadXZNXVhTZ2pnKXBNQVEkN2FYUzclPDtFNF5+PXZtXl5WNElBeDxRXUguPyl0ZSZ5cnVJZjMkTEMhOlJzY35nPFRJ''@;'; put 'put ''VVg6QUsrNUFDMSU4emEvfjF6U1t1P1gsMnBZIWw/Qn1gOz84S2MwSnluJXp+PnEveCEuOSZwI1F+YUhhPDM1UE8+T3d4LmpCPXlIKyNZMnNGTlFAckY+eFR0QjZKOVRhZkJvJXchTEBQazlVaFMzZzNobGEvTGtvbTd5Mj5abiUxQjtoOjx0O0x1ciwmTFEpZWFJWDZpQDZvVTJDfHNVa044WDxs''@;'; put 'put ''dytOMHtBJUJMViR4TGBGK29aekI5eWZ7aGg/MDhqQjR5ciV0cWIlSkxtNnpYYF5UbChmQ3hDIz5PVj84Nnw+P25YRGUoYTExKkUlKD8uMUx1JU1Ffn0vKmckK2tmUEFGRyNBZyNZYWpEVTduTFBzKW9MWntORi9LPEghMiNuK1lxbGBOXUJbMCVYM2ovTmw3az1oPytJTDc5KkVXfDFOWj1Xfltq''@;'; put 'put ''ejNKQCR0SzViZF4vZWpJJTtCTzdMVGlgfXlKLjFYOTNCbS41fSx1dkt5Z1ZpMVVmU2kzKGlmJTpEMjJYN1hiY1tAIW0mI21GZTguYCk2PlIxI2o3KkN3aypAYzA4czJQWnVSVE5NOkR4enVCIz9SLlYpN1ZoPiE6PHFfejA4filLdXRhIjtNWG4yTFY1ISk3MFtsYE18KksvRUI/RVR2S2FBKzc0''@;'; put 'put ''QXN5XWpGWlZScyxPNktRPExlP2lVUVpMfi5RNyVxPVRLbX5RbGAuVXFfV0FGPXlKTD9gJS80dUhGQy5yRik/RCwrX3BRUWdDcT5Yb2pkbEczeU1oLERWNUZpbW8qNE53O2pnXzRVcyErUSomKHJAVnVQPXUoOSFqcjxscVE2RnpPRyRUXXgvPm1RUkMpTFtgTlFebUE0Z3p5di4uY2YhTWViam5U''@;'; put 'put ''WXxOMWwrTz5DJFA4VTZDc3U/Ln1TbTJ3Q0t2JnpZKkhoSjt7NSUocHo4Nks0Kl9HKywvYVJ6W1MudVgsTl0xWEhVRCVZN2pjKVh5d1ZMemIlST44TH0wVndRZFpSI1NxeX5rWkxLKzs9eFpnUXMxOl02aFo8VmxhNTRmdXc8bE5wODx+fmQlVzhFQnNObDRsNVFYTUVwYEZIJHVZU0UpZHhUYk90''@;'; put 'put ''fSlnITIuRjsoXyVCNnN+TmVmYjhMfEFLS1suR0FeNXtqazd3YElmOzpYRiJlRzk4fWBIY1k2ei5hVy58dmRxUHY8cVlEXnNHLHl4LHZFfjBmZCx+fE1wNjs4c3JZfFRSQTdKRUVQYzAzV30zSjE5L2NXVVlXU2tWanBkdD5HRFVfeDtQUC9UJE0zXWxaY3A8Q2MifU9pcyM7dSV1ZzljYnJmWnVN''@;'; put 'put ''d2d1MTdsI291bTY7aj0uSnxzQlBfU1pHZlpyTTdfenZ7L0hEJmJ9M101TmwuMCl6M3koQVA0VGRHUWpoPWcjWGVBXV4xdDZTIWpuMkt3I3BWSi9TNHsxYlA0TzJAZilLU3R7TDhoLGQ2Q2ZgVmlEYFB4KSNweT5iUS5vOjhVT2EuRU5bOTNLS2ZBZmxdbk0xY0U6UixbV3QzQlpIOEt0U30mLE9H''@;'; put 'put ''N2QvNnc+eGheQV5VR2hXfHhJSSlgeTZpSisyeWNRN15kcE5NWWB3Sl0/NT1FNjRaL2o0O2VJXVguVCsjZSheTWs8XVRPR11PaS5bYn5NJHh7ODhdQyZUMH40bj4hamlWKTp0Ol5DRVlXMVFxXUNEK1lhTUZOJTVPKGxNZG9BUiojRG5+bWEqSlFHaCxBTXJjJFtsI0BNeTJITjhhRmxMOy9JPUl6''@;'; put 'put ''b1chck1gSGVxNkRhfHB0OnIlfjMuTzdXU0NOOEgoM3Q2UTp5ez9ELl5TcnVGSzNxb3RaTWUhSzJCI310cW9QJnxzI0wuVTR4ZlhjND1RUltjXTRUSU4qVm4jPmdibjh6I0ojYyt3RiV2c314KnNYUG4hbnBNWWlqXykkUlA/bU9GYnw4PktpeWl4LnFfdHxRNkg6S1VQNV0sND4xZVtXWXgkIV1t''@;'; put 'put ''KzVbKXJTcitoLipBcWpnMlc0THhrISZvWUJTcSlhKTRSVEklMW9dfDtgOG9NaD1bQUlbOnFUVlRYVmZMT2FkI1g0O1c0cWYrbiVjKX09Zi56OT1XOWxtKT89d2tEcHFaWVBpWElDenUyTzp5TlclI1lhMjgiIjEibSt0NCVvOzZvTkokRkEzRU5UWFk8VD08OW1KT003P0Q1Rm8iKV1ASmJzIk8r''@;'; put 'put ''PEJ+e2xFMUFuTWwjI3htLHxvKUR3VmVtNDJJMW8jYmxYMk17N1ouNWhqbHRDWEFZKHZ+S1Qvdj92ZW1RV04oLkAyMlloLj9vaiR6aClUJGsqMSVjLGZ6byxFVit4eUB8KTRLSWZjSUBEOyM+Z1lwLkM0LFhQQmFDLyhsLjs/JkhTOEQpSD4lWEBtOSRVaSl3RHxLR085cC9wN1VBSzFpc1ZgL3RC''@;'; put 'put ''dV8oYHd2XzJ+NjwmSyNIT2VnL0p8Y2xQLH5ha00vbzlgWGNFcnVUY15WflhHSz5DNXxVOnBDfWdOVCJKOihTZlZgNklATChDTUtwfE96aTl6MnZueU55bX53XjBKUikpVlBaT3ljOig+R0p9TXQ1XT1sU1c7cks5L3VTV2lWQT9EMV4kXX1+LjxRckwrTmtFLigxNUI3UkQ3IyhIM2lTY2l8UFhm''@;'; put 'put ''Z0syOUA5bWY4YmFTLE1VUHJAcUImfH4lS3xDR244RylOXVpyJUlZUHZgL0tmdCNoQitKKns/ZFJUKVRiZk84bW5FSCxwWD5oWD5jTE01bXcod3F+VyVCa2VVRzRpc0hKRFI4N1AxbEF2K1ZzYExYMyU6WG1XL3xvVldsKm03cnAwbG0oYkNQbD8kZjp2ckBtI0c5ZSZxT0NJdl46bD10I3BXU1cm''@;'; put 'put ''OWh5PyRDTlVvPjxkXWM5TypRXkwhXzJVOSNnOjc2bkN6bGJEPTQ4fWpJQ3pWcWNQPG5EenVXXURjRlZ3VzdJeEJEMk94MH4weT59b2lNfGlVQjkoc3B7akouTFQpaXA2KGp7Wnt0Xm41JU9PQE1Wa2NhJVpDNXI+Z0ZbPmxoc3RbSSRKblJLPzdTO14pVXo4fkd5dzcjJWFUfC9Xb094Rj16PjF7''@;'; put 'put ''NC5GbC5ZOVVlVSFhVCtFKlcsVy5fWG1rX3Q1dlIpdj06N2JZLEZ6U04uKFtxfHVoa2B6XSxdTVBYbDosUD9oWVMyKDRzYEZ5XyVgZlZAVzNJOzA0V2crWVlnM35PNzVrOTlwVnUkWXlReTAxWFB1MCVZXyMub3lLflZ+LjUuVnxbWE1CVHxKPExhWUxtVWNOfkYjTHddWU16VDo7aVFuQj1NVlYj''@;'; put 'put ''SE9KPnYwO0ZaRXB7RFVMfCoyKXxvPFF4SzY0TGUsN1ZiSF41Sy5TZk9dIkdOQklveWZmTF9VdV9PYXdWTjtRamRKO29RK10/OkIrLnN7QXBbbnhRSCUmcWs0SH41QjcrIzYpe3xkaXs3cSxONHUpX19MYjEwNGB5KWNGSD9dKnRPTnlmKmEjYSJjcVJUaVE9Ji9KSz5QUWMrZDE6QW1iRTw/KiFG''@;'; put 'put ''MFtXNGlkWzd6Y1s1YEowOEh4UVp4Rk56OTNtbHdjci5FN3V8KTlrXjx8ZDtOTFosSmE5YypTU1Z4VEFzXkdRaEszOH1uR3pJVH1ANW1IQEpbOiRkYkZMcF1jTCkqeGFlN2VCKHI0bGNlTjxpbnRRSF5XNEk+STEpWzdXUl5BU2loZmdkKFA5WmtFYno4a2M9UUQ4THtNdD4wdjVOUHJxMkl4XkBi''@;'; put 'put ''N2kzJCtoNCNGWWArdFpmbjdyUDNga25Cdmp1ejw1JCllWUl9R2tPN1gvalAqVSs4ZypZMnJPVShkKmpVXTI5UUt4NipgNEU4TWc4eGZsVT1gPz0jXk5AdGpQY0hhMVQxIUtxeXZqeERRd257Pmg+fVF5eVBfNT5SK05EMW1ZeHh0NlkxTyFNRU4mdUhCKCtLW3xhaTk2LiMkdWI0bFhYKCVHTnxe''@;'; put 'put ''d3szL2JGeUddfnNHPEt+M3FwRyp3TW43XkhITFtKV3IyT1NRJXlEcDcvQCg5YygwVjNzfEw0SCExKCMpfD9DI3VWJiMzMTVLQyU5T3JfQkdyc2NzW1JAajs8YXpqbWVvaTJ3S3ZBRFcjdngqVUMzPjB0V0svPXU0M0lvbTJ6Nzw8aENdMFJEV3BDSXVucEdHPmJ1OHJtQDQzWkVGMHZaRVU/V21o''@;'; put 'put ''PWBvJGpeYGZ6UFh+RmRoWW5uOXlhSHo8cHB+U0V3fWdRITdROU4/TGZtT1ZydiVAdGloI2hdN0Flbn4lcGxWWls0JjooflVeSXdbbTZJY1lFZGh7ZG9MPUB6U2s0R0Z1TFtxM1pUPy5NTj8ld2ZNJiVDM110U0ZBV3Z0QztoTH1ke2tnR35SbyZ8WyhMaHowODRnN18vKjlJZ3R3d3FOYEVZSlJm''@;'; put 'put ''WH5FIzZ4Sz5gM0xxLn4/dXtAXXBVTUtMe31QOlcyW2FUYl98P2ouJERILEhPeHhAaWQ+QFZmclIrJmYhPDhuLGQoNV0qcW0wVTNJVmZlRnElTDtGa0xhZDBVK2Jqanc0YTBaLFFgdHI9MFcuaGdYUHpuQl5mW01yWnBzI15aVWlzMD1vXmA5X3g6bHdJKzJ8QFRabj4leDI9Tks0YWxtMXhCYT1R''@;'; put 'put ''QjYqUHZAXz5oJVszMkVXIS9IUmlnfi92Nix7TWJvQDY9UEhEZ2J5NmlNIk0lb2kjVC8iOXpOO0M1cG5uQGhQfT9IYkptRUhRQ1tPKWN2RWdkM1M9flUhbUU/KS44UmQoU0VdMHdBKSpgZiNRc3xtYjgpYHVUOEFEOz8+aCo1OHleVlEoM2M7azc+L0o1ZCM6bjlRN1J0byttO25dc3tuc3JRST9x''@;'; put 'put ''JDVHSUElbWVsXzc3IlpmP2RyQlNFaWFBcmtKbUtJd3gwdEVfWFhydHkueWIufTwucnd4SDcwQmwqcCpHTXQjVTczez03S21NK1ZaWXxgWlhYWDlMQlR6d3xfTDVfQDh7bEE2R1QoRElGWzdESSwsbCs6UVJ5cngsTmZQX1FhdmxzUCJMPEU5N1lQWUsyeX5EfUImX344LHtiVlZfVXJkcGBKTkJV''@;'; put 'put ''MkZsPl1YXUZDVUdGcH1XRFdiVUVQS31ZVC5+Z3RTIXIkayhQSHdLbCw6MFcwSGIubzVBMCNZfExDW34xOWxeIS9lKTpJK3lCcDBUfjk4IjFeSCllMC4yLmJhN25QU05pZzQ/aGc7bXJRRUw9RjNdRiQjXjg6JnhmPitoN080ITRFMHt1JSErWSR0MjVGSCshLDUyY3BsJjZuIUZYXz9XKCImfjwu''@;'; put 'put ''QmgmS290VEg7IjhXfWdtLE9eLixGK3pke15QK1hyT3FsI2paVj55RGx6YkpRSHYpeUg0fXFFW0REP3A9ajRmTmZqWU9zKVAkVFk3PmU4czh8d28lL2xfTzxVLnJkOF9HSyNWKCh0c2tLdlszY11YKktdNl0rJE9FRkx8MjNwJWkwKzFjc2pJUT1PMTUhXS9OajQoRFFOPVZgbltGRz1hLGhELlZZ''@;'; put 'put ''TXs1RWJtUlBeQmp1cDs5KUt0ZVhqb2BwazxhRl1RRHN1X0xpUWtsNSJzY2lPdks1OS9aRE5xKkg4Y1t6RjFueiRQLlE5M245bF5pQFFeWU1dX0NXZGRTbSpzYT9PMG99NHowKGkoTyh4REhkPjhfME1VQHczUnkzaC9MNW0pcipzcFRKc01oZWBkd0VlSDJGeEJtUWBhTEhOVj4wbWgjdXVDNjZ4''@;'; put 'put ''NzNwUSFfIXUpJlIzS1pBNk1tJV9ZMCtrcEJhKChHaDZDYENEeEdTSzNfRyZMbUs0ajA1X1djSDgzJUppc0M+JGZyLChtPFBhMVJqai9rWkB4UUA0dCJMNXxzcDREdXUlPi5lOHpRI2tLbEs1L0RNdzpxaU5DQXoxSlhPKjB+IT9uJTMjcGklUzlXM1dRbGZYUjNIPSQraX5TN2gvdVRyV1R9Rkpq''@;'; put 'put ''WGB6MDtQQTNuR0JmK21YM0BrPSpsQSlaNXs/VVszWUopOHNLMFdBUDQhN3A7fSxrXzVfenswQjtWaXdXIWVHU11hem0yRjFWJSVgW2UqfDBVZz9OeCE0Yj1qVV4zKWBCR0JBTHJQZD5YejM3XW4zPTQsMCwwSVFgKjp2OU4qYkl1dURePFk0enNeQyE+RzBNKnhvOm1CNiQ/K2M3Jik0JHpoVkN8''@;'; put 'put ''TCY8djtsV1E7cl06Im1OUH1NVGddSTAuNnRlemVBTi5vQShVMH0uJVtUYXZRbC9JQEdgPGhQcE8uZXA7KDJIPi5BWG1De0p4X30rclgvfHkuelpJV31WIlAqOzxFcFIzaFVqNElgPyxQX1FHL0xla1E4c0xDPztLVEJLM0tpLFQrfVdLblhqeVQhajwwRSR5Pl1QNUM4VlhIYi9NQnU2WW5UOmF5''@;'; put 'put ''RkplL3c2Zn14L09LTlkoOmBoJTxHQDRMN1ZPSHhyNEdVRyo6OyxuPGNOdExHU05LfFo7YylQMCpDUkNaTVgyOltaI1NeRjd7UUVNdEJORXg/YXNoaygjSlo2XzNjTVFSYnMwV15hYHNtYyE5d04/WX0/ZiwjKDN+ei9+M245TDFeZkRiaWskO0haJEt3NyUubV1ZKzR5WEx1R0A8K0lEUlljLE1v''@;'; put 'put ''W1RHaCVUX0U4ZXZRZzpILHs7e1g3SmFeLiR8WnVjRmljPnZ4bEhQI0IzQzNMNjFOM3sqbUwyKW09NEpNOFRWSXQoUlVbSi9Ye11rITw5ISxXYl5qaklnY3FHKD1hfTFEO1MkR3N1U0ZXc0xdbXQ/alYid3QmaEBtSXMsVEQoOWUuYkZ7MkBASnd9cCF7LikjKXJmek11cU1LL2k1YX10LDlFY2RL''@;'; put 'put ''Un0zcG9FZXl2SXdnRX12alhoN0JuRFFgdUw4WEZgakI9Mz53XUo7KkBTfXU/RV45TzQhbGtHdkpEJnFRfCNvT0coKHR3MWJfXm14IylrKWhYS2Q8U01KVyR7cFQxSChtO3BeJiFPUDcuO19DKH58PnUiKCpsR3pZOUlGa2lzSXIhQE9OKUklfTl0U1tpRmtuamBtdFBtVzdmQk1ANyYwOnV9QWA4''@;'; put 'put ''JFM9XVRlUXkvfS4wKz9oJDxWMkQ5VEc+OmRmPVVvezNEYXorYWBYMUVnfE05OElbMCI2bkR+RkAsN1c6fkFzKDA9dEZqcWI9OSo9fUhmfFV3JU98KUw4MlZeRmJQTV1XdFtnczF6PnxDVjE5d1tsaHRkX3BSazYhejpjN1peJVJqaUVIbT40THhlNyJlTGZUZjUoYEQuanRoNkA9I08wUylFbTcq''@;'; put 'put ''UD89ZHs9b2MzWClmUHd1WncrUyRdPyN2NXZ3JmY9SlF1dCpAZy9NODxMSFRdZmJTS006VDhTIz5Fe2dONE1TXyIqREh9NW8hejM7P1YoYzc8amU1bz1Ccjw0Nlo6Uyo/KDZqeXFYYW5MY0RvOXcmX1JPbkhvMHUsJShLWXZGODNBNjpqNVFFM2tWVmhsKz8lW0JIIXp2OElrbGAxUWVJR0w4aXhC''@;'; put 'put ''eHN8MjlnUWBeWEdNLz9ZUGxfcVA6NGMqLyQyYGh1X2ZnJnI+JT5eZ2xUT1ZHXWY5TTUvIW10Xm1DQzhTeG4/dFhmZlQmVTJLaWQ7cjYkaiJvRjRublVpMCMzTDc9aFshc0J+UnFzV0osIkMjZGF2NSlIKUJSPTd1WHk9ejRMRjo4VGhmeTJMRm1FZU99bE9CXXs3bXJ3Vk1zYmlydj1RVHdKLC4u''@;'; put 'put ''YW87TWd+NSU9Uy9UREhvZTh5cnhQTmZTSSlsJFtKZDxWNHNKcztyITo0dWJAR3FxdG9gRDtpX0Z4Z1IzW01bQG4xVCRBP21JTHpWckhub1hhJTV8IiFPdmhxakQ0fit4ZlFHKT5Zd0RAYnpZOVR1WT1UMD40V1lSIWRRPlZfcjF8L2EldytYMFpgWEVzLnFnX3lzamtLIkNMTWJscHErZFciY3cz''@;'; put 'put ''ckJHRE1kbyRsZHpHZT1Ed1BGRXJteGN7fl5FZ2tmKV9ZRX02RlNrO1soI1hMNnpTWnpSdGxmQV93bmYxLHo9YVhiJCRRTX5WbT1JJDZPejlvLzY7ZDt0eFY5YEw8NVM5aGMwJEZNaTtPbTBuLGBJUXxRVkFfIW93OCp8PEk2bjtId0Muc2coZG0lQjJ2JixZOV9tSih3X2gpUl0sdmgrcVozTSFH''@;'; put 'put ''YHRsJWlZLDVte3YxTmgsI1UyMGU7VmllKFQxUDYoVzJwSE1Nd08oOjNYWDgkUitSTSU9WzZpOVJiWC4+XlRBOjNJenFRbzlbLHFfL3dGJkRJbTMpU2R2ZDBSWkNpYzlIUzNvUChtKG4kV0w/Sm9OIX47NUxnR1FFPiQzWGBNMV1TUzVhJHhqPE8jMWBjakgyS2Iial5jSWZhRClXbGJZTlJ0ZzJ5''@;'; put 'put ''V2lheDZpNGchP3l7amwye2BPc2tGPlMzJXRWWSM3LzFSa0JXeCNGVT41YHZHWntFeyswQXlmNFp3d0w+IUByVDwrS2hhPFAuJmxvO0Q5SG9ySjBva2F6Plh5NDU4Jk9NRlgxRDF5QGFQdEA/RmNxQytEPltha0YqKnd7WXYkeFJ6UlBWXlFmST8ie2JsYXhxRDtAT1FFWThbSmB6WFJPKEprTVle''@;'; put 'put ''SU4lc2tyNC9MXUwkKGF4PHN9QEEpdX49enBORip2TTZudWJXdiJUKGNQbGZ6ejdiQHxSYCNtSEVJMjxpVncpI08pQyp2QlZSYEFKPS9XSVBvZWZsLzdiYD82fC4rbll1Xmt0amcxZXA5XTNTMjNzb1ROdG4qJFlCNjZ8KDpjV0JuLlA2OyFUdEM2NU1sZ3gwfT9JaC58PV9qfnJwZlZuJGtVR1Rj''@;'; put 'put ''PCRGV3dMUiYlKlprczg3UDg9d3xMWjlpI3AmNFpVUyshbj8iI2MpPXlqVEAjKWojd1ZEWUB9Xzl7MUl7L3dGKGo4JUAuXSY4Y0llRGBYeURnaFVVQ3ElcmRmS0lNQCFqbHU5OCtSRlBvUz5bNUwzS1dxI1BQcTVJWVZXRF1KMix6cjBiZCEkTEZ2Y00jIiN2W2F0Vj89YjprJDMiTjBNTSRrYERV''@;'; put 'put ''PDNJVW4jaXxvPVUqIl5RXjc7JShPSF9fNjVpTExTM31tPEV2IysvX2R9IiQzaWp0MiRJaFhIMitbM1dzUmd4Z3hqaW5xT19TQ15GMXhdcVolTXszUTJwM0xmLy4pRlBKQSJPeXVQMFpsUnZIMVRZO3UpSTJ7OU8wfGNiZWtOeytmfX4yL0Q1dVl6RSo6fW53QkB1T1MwSzF3blphdEdEflskQltK''@;'; put 'put ''WzVzYilZdVAjbkI2Yzh0MnlvTUYhQFBEWHAqJiwpN089ST91el5JQTAyN1N3QUA/Qzt4KjNVYClPJWN8Njc4Sj4lO21mQCpGR2FmbE9UUWZCU1hUYHUzZmYkLigmKWcmUnpgNEttRXFFbHpCRFZwT3djYTZRaGJHKVgrWjxFNjxaVkoiW184XTMwfmU0XTpHQEwzZ1ZZcUkvOjpRfVs+Ulg/LE9z''@;'; put 'put ''S2lhVyFSYzdqcClrInkwMFZxTik/a2x1Lko7MFFbVlgkPmdLL1JSKm5oOTlqZl9uOz1zXyUrTkRzIjxhOk0rfTZlIWNCWTMpPm1vLEFSKUE4OCE4d2YldilQPlgjSDxKREdAejcwR2xhVzI+WWtWe2NUO0Z8Kj1QXms4Zm53Zk05dGgsdlMlbyJ8SmpedExJVj8xT3hFanxLSjF0KnhuIUhIR1RX''@;'; put 'put ''Z1tjTURaKll9dCVCLm1US3pQTEY7YFhfVV9aOlhQaG1Oa31SeHBZY2dEL3IwL05PXmdman1mfkNGcD94Q0NlbWVGVEd9bGZKPXlpVSh2YThgYXhgQkpuSU42fEBvP1d7RSlkUm04YkIzaz1ESmVYWlZka0ZJXjo5KipASmE5Zip+UVtgWlpzanx8Wl4xJjhUNi9dbHRveVBHIkhLYnM2SkQxZi5U''@;'; put 'put ''NXAxfnpIcV87YE9EZSg8YnhodnxCeEF2JX1CM1ZnSXlJPC54SSRRbzgwY3F7ITt0UHA8V08wRk4uWCg0OTdiSTRAaVg/IWNuOCNBanF+eCZ2fkAoJCYhPmRMdl46JEgyOzNKYFFeRGNlTC43a0xSR0h3Jm56TVBrZjo6TjEzMThvclpYVm1UJCo8Qy9WYmNzSD8lKyQ2eVApUCJ5cnJVZltNZ3BQ''@;'; put 'put ''eGpFTk41e3pzYml5NVpeVCImJGAsI0lSSmpJPWpxWFRfbncxaWkraj1kWz0landFYnZTTFYxQ1dzJmFNdXs2QVRfelRGfTRWO1BZMWIyKkhwSTxZclhVeilLOTVeTGFddTE4TEFna1lhW1JCRS4yM1VQJkg3SHE8eitdVWEoV1d5M1FiejgvQjcjfjpZWE1+bzV5OUQ8PEJIZk10OjdgOiJsZkk+''@;'; put 'put ''NXNXflEhR2lGJmxMbylNWCNVcTRZJTUoNjpZcmEwa1I0bUpHK1NEMlNpQX5+SjI1QHZ2fT9geDZbZFs4NmpfJTp1UU4mMytDPkZLUG9VfEglaF5tNnovWytjQVFfUCxqQFN9cXM0QzJzMmdXdSQ0a04wY0YuZXRaI0d0PWZePz5HW1FofG9vI29JeFM8IXsvNUo4Nzl0XnZ9SkYkVV92VSNWS0N7''@;'; put 'put ''PCZyYWtVVUxiK2gpPGZ+VTFaaitvOzo9JGo3aCxzJGhVVFFESWo4ekZxOn5DcWdsbnRhW1RxeXBdSWJbQlcqe0I7UDF0Qm9Xe0A2WiMlbitiaWZpIy5ISSZgPCx4WDdLQHt3eEVocDokNCs2M0xCUj58N0cxZy5JVi8mSEBVTlYiI3MmIyEqU31HelBQIXRJbW00VnlxbjB+e05BXyJafUwuaGQz''@;'; put 'put ''UHJ6LEY+ZU93UCJhfWcrQCFgTk1deH4uQm5dT15ELCJhengieVRGWlkzQjB8OnVtcCJnOHk0QnQ/Ty5pTVRCV2VPMVh+KEg4Zj4ubSRkOns5a2RfY24jQlthQHJHaV1WOF47NDw7TGYiLzorJTs6U2w7dEkjTHtqIj0lW1t9QT1nSSI4cVBSMDNuNU9CIU1UIVhiakN0I09ETFUpbS5YbU95KHw7''@;'; put 'put ''bWVzIlYwfkt9Oz97XiYqOEYvIUI+KzVMLFhGdFtMc1lmfnAhSCtlZlQhZS5GeWJMRnc6TFg2YStFY19OcU1wX35pJkIwaz9OJGpQTGZNNTAqTThuciVMTnxJflNYI1hFI1lHYlBiK08/bEZSZklzPlY9fWhMezYmQHtVJVRPQHh8dzVFPFQ9RyxOWj9TWVo1eDQjJHdfVCUrS0kmKUl3KWx9dGsj''@;'; put 'put ''aT5jTV07aVVUaHVIJEJJdCl5cywkdDxOWEtEWGZjaHpWOl1LcV0iWyRDfTIrVGpuTWgoTHVsPXBkVSsxbmRWUyxvPlNSVGVQZihvSDN7IzRPLGJGY295WjVzPVtFeTFCXVRaIXshKiwyWlNUJVd0PUEwYjQmLmY6JT0rbWM3XVE/JkRHT15Na3d1VVZCPkVqU2ZpSyVUM0VYPS40KH5WbXRCVnNA''@;'; put 'put ''OTJQMmxuR3lwe1YkTXc+VD1xO304aHFJZitNfGw1SCtVaT1ZX0Q6L2h5KTs5eykhPlJMOSt2K24yJEI/ZG5YM1JKfSo4eGRGKCU1K1JmMnMhPWE8W3opekokRSp0YmlnYC5wTVEiO3lXemJKQnsrNFdDNjVwdjM6NSY/alldSlo6QGpfRjxFT2IwKVdRR2REfGY3UmJoW1NwQ0crR2ZUYyZsSys1''@;'; put 'put ''LDlxayZwMW94KnY/LDBGXVZvM15eTCJgLj8kZD1ISiE4STBQXmx8IVdkczhrbk5KJWBJIyVsRXkkTSw1SHZ6Y3A2ZHlSeVpHZWp9JE5NczFrXTApKyQyXV5OfGRwc2ksN3NtXk8wU0RUMHowW0ZIZzZLYHlWOUFBO3ZMOyRxMzpZa2kqd3Bua0YyJSYkVDd6Wj9XSyFHe34vV3IxNEsmb2VMcW8+''@;'; put 'put ''SiZPY2lbQ0leN2JCWWU0PW5gJlRRSHZyZClafDd1PTE6fTJedEs8Ly5lN3VXYD8pW28+Ymd2LExdNWhAJCYoR2ddWCNeO1RYbjkyZmp7VT5Ecm5tY1tmKEQ5P2VpO1koPjN9aGp3T2lXc1R6QGReUjVZI0xZUHtTLHpgcHI6Lk0hJVUzeSxKWmhPVzFba0FlMjVuV05nOS5IQVY7SW5Va1hlXjlo''@;'; put 'put ''OVEuNG87RGAjLiIpZV1QUC9tbEpZeHxoP081WmBPez5JMGhMVEooZnV9XldaI3hSSFh+emd+RH18QTJ7cTxjVUV5R3kzLGZhYD0+XUFyQWxpIU55QyExSWdxPU5HZXklJXdsWnNwL0BaZD8wYEdbPVorN2xzTDJ3IUszI3duOEJLQnxsakE8bW5MN0swJVZzSnFXWnUzKiouNXZxdDxefHZOIWZK''@;'; put 'put ''N2khQ1F2MSsmZjVCVjBNNU0oWU5VdD5+KzlrQGYiXX41ZzF7MVleMmEvKSgkWHo+SUVMMnd2Rzk+KFcsQmVleTc8LkxxXlF8ZWslcysvTjYrKSNhSGhGRURbYyZ7Wn1XLHRSI0VYcT9IfVB5VCJWJkw9SDpeMkckJGNJeGYhZU9aYWNhOGB0W2N+VHxGTmJeNWBFJncqNFNuNn07aFdWUk5XUjRN''@;'; put 'put ''UXN+Ql8welNvYWs0fjB0UmByenFYSE4oTTQ2MmAybGJqXy4jNSM5cSx0TC5aa1l7Nlt8Tl9lRWBaJWFpfTNOLDx0NGtZS2w6bm91LE1APHNIaX5MbV0uPjVGQ1prTiRMUzN2R20kQkdBenhTVlhzfEF3IiJmdyp0MlRFQ0VJaHNhYS4rPSN3Mll5K0ZSIkUrR1BCVHR2MiFUeUhwYTRAY30uLiJp''@;'; put 'put ''WW4jZDAkQEA8bzlbYltKL0xXXzxMZWRhampXP2ElUWIjOHNQVHEjRy5AI0NwX3QsRSUvZ1JrKGxSOHVmdU0uaU8mTnlveD9gZSowey5oYCFqUGRuJTlYanF1dlJRJWcoVCtGWEFdJCF3JFd2RHB3fiVpOj1fTD5xaVdudnQrV2ppQDB8OlAjRzw7KGQ8RGNPUEl8eSReflU0K0JyZj1ieT1KN0F3''@;'; put 'put ''T01oQUJlZEtBWEVDamMqbmo0blJEelBAPitXbUk+Uzlpfn5jXWBvWXw+anBYd2g5PV9lPVlVczt6PE1lejddY0lMalVaN0ZCLjlKVk00dDVeSX41eUpJQkZaIyNpS2RCKlVEZl1sJCoiQlU6MXB+KC87LEdyLH0/TXNfZjt3PnYyWVVZU3RCIShzTW1MOnFBelcpNWxOWENAZUxRPUN1RVQ2cDp6''@;'; put 'put ''eUtNOGsxd3o0Nng5MnMhc3lvOGl+all+Z1txWDdvQSpQWm5kfFJIckJqbjZ4bDR1TiJ8fUpoYCsrJWttUVN+OSNEXT8yMSJDKnMrS3UoUmN0fkE3THV7YDBnZmIjNz9+JWkrYUFNaUhMQE9IUHlnPi47e3pCISQwbTooW0FYPmliWzlKW0A2YiRiS2khb083KEJue155Ij1yPDZUcm1RMntBPFtD''@;'; put 'put ''KDY3W25HUFBLPFtBS0V1fjoiLDJqbFImVCoqKChHZWUmWlV6Z1dydS97Kj89ekhKR0NndSxfZTFzTXBCM1svTm00bVdjUDNTLlE5enF4KkclPzRGMThkezlDMnNFLkVgVGxtK10sKXNuNWE+Ml9RU1AzcTtzbiw4MzRtWWVPc2Q5SmFWPlZrKVtaeTI3ayVwcXMjO0goZWhzKmxtOnJUYyhXNylW''@;'; put 'put ''TzFgKDNFSW9OM2ZRTGt+VmthLnxdeToqRjApZz48XjpxQ3dvW0o0fWJfKihuNzZKcXUrYUZselBrOjA6aURWYTsmUn06dSs+T3loS0Rfdm4pTVFIKXo2d0pSK1FPUjBEY0RQSzxFayh3LkttTU0pbGpoZyFkMUo1SVg1enh6Nz15a0QsPUdUfGs6WXRVOmpOWzpZIUZDNmEwbDZwVmclck1VT0sm''@;'; put 'put ''Jj1IT2pTUj0yVXs7Y3FjISp9ZlUubFB9K0JKQVdXSGQqR0x1MSl5Vj9ZW3RveCReQXpHNl16PjZrcSxJNVZde3VWKHJ6NEpOWDpudG4kKCMuLkxua2swe0k8Q3h5UVlEdzhDcE4+dWBaMSxVOlMvclZoVVplNitDK29TeWN5K3JrWDJ3MXApfE86V2M7QTNXP1Y9JkVxSUI1YlUvKFFFNmFDKmk5''@;'; put 'put ''MzxCPSlHdX1mbz5nOFgkSipKTFI1NW8maz1rLERgbFlbZX5NanZ3ZUlMencwTDZecDZSdSw+el5gY1teR2toNC8/ek1gel8rNkRVbU5HOE8sOEtAez80UkNzeTpSXSM1bnc2Rjp2WyptLyNtJXdea15QLE1VN2B+TD1nRF8mKHwjczZ0KCp1ZVJaPnVqaj1XOSNYeSopPkVhcCpxd1VhY3JgVXAj''@;'; put 'put ''a0oqREB3WmoySEQlIW5Kc3wjRUF2b1AsZFpPJS4zPmQ+SyFqMDthIyhMQHJWTERtRDBfclJ0fnAuOjE8VVVtQjV4WCVnQTZkJjloKXM0RSRZWX0rbzBqcWgsfk08PDlsSiNOUjU+ZjpPKlYjP3gzKF5NOTl6Pi9HfWJpNmMqITZYZTpAVjZ0d2xndXNaSy5bdmUkXnpDcSNvbFs2IlJBSVN6d2Jv''@;'; put 'put ''PixgWlZ7MlhqUHV5PFZZKlU+NXolMjJ4azRTUndsIz8lWixwIVE3JHosK1ZUP14kUSRwRHJHU3g2QS43XXs2TGRae3t+en1WfjhEVm96TlNCajlXS1lPZCshdUkqQWxyamk3L097aWgzPyEwSVlKZXNEXkNzZWhQREJYTEZORFIvX2kzX3VNVVRCU3x+MG09eHFJfWE8R2Y/ezUiWz0pMnk9KVZm''@;'; put 'put ''ZyVROE8sTlMkKjZhU317fFMmVEx5e1Iyd1JPQVooMGRII2RlVG1xUXo6aGlDfGF+TFg3a28kNXQ8aUt7LHMsPmJiNGpXNH19PDQ6d0YzRnk5dzYrPUY0XnFaUWUkRHovQUxiby9DUjdIRkU7QjdGOypIcn0jQEBJZHR7LilIXV4lT2R4U2c3aVUsanp6ODttbCpkJU9+aDhHKGZ2In4/ci40T190''@;'; put 'put ''KS4mYz16QEQjQWdtfmxuZEgkJEUmfUtzfkhmSyRtVUxdK2JxXSJDanUjMHdHaSElRGVSXX59b1tRUkZ6NTE1dlZ3ME9oN1QoRVtUfmohQUhVY1FQK18vfHZVazhZKTRyeXQpPzVHLmVkSmFMX2hKfU9YT2Z0Tz0iOWsuOFRHSG15VVc3TjF1NlFydGF0U3V5JixVc3k9LDtZenZnfkNOQVVNWF1y''@;'; put 'put ''WHVeQDlDfG01KzdGd2pqYiNTR2x1eikhaCUhISkuNCw4Si5iRDM8aXglX0g0e3pQY3RJWERucjI0PUsyR1M7djBFSyZKNUkxYzxAW09leVlQQnQzVH5Zbzl5QFIvJChvLz5gMlVnZmtSe1RtVmQxd3tSSCROSHJJfHdsIVZ+Lz1IKDM0SWVLJVMlWDNlLnlxd1UyeyNoQCY8IkRDYUc7NCokKC55''@;'; put 'put ''W0QsQE1YRkpNbkBwMjFiTmY/NVguX0ZXYDoreEEvSVgoNWhOZk1zSkNYXi9FSSVGSzd8c3J6JntmYHV0ZTJSfiohYE1QW1hpQkMwUloyTyQqcnh5dHlAQ3VjSGxCdVEmby5jLiM8Z3t+Vn5HcnhlO251KVE7UzldVTBVRGc8am5dYGp2Rzp1aj1YKyw5ZDtFNSVCbz9maDxhTHlYKioyP2QpLGFV''@;'; put 'put ''Pj0lX1guXzo3QVJLVHt2SF9fPmZ7RlIuekt7eWh1bzl+WDFwfitjSXRTbi5zbj9mT0BzOCZDZDtpbEJ3bUZfbUwuWlRHeHh+JlhbVltyZkJnTkZZMXhUPDJlVFtCO2s/c357aFghK3tHVT00T099dXJLTTF0dXo4KGN9RzM8S3hibiQqInhEflhQUGV7bypBUnA1OD5NSWEkQn5GT0BORHYjPXgi''@;'; put 'put ''YWpmZ0NSMWh8fUJiNFtXPU90aGBjNThncH1bO2kxbnwwKWxLIWd1NlY6VDZOX0xdTGhEb01pR0leO2RDYXlMZyFuU10zSlo9PDU5ZERZXk5CLCNKaWZ2QSZAcH1gRT1DWSgxcXIxfUo2WVRKLy5sLyxiYnRpMUJxPlV1aG1oSDNbIl04Li5OZ1QhNGB7YW1laTx3dz9LcHt2d0MoWjlFUHV7YVdI''@;'; put 'put ''XlFiPGMqZH1oNWs3dmRWfGVuPjNga0J0eXlCWTBdNV8iQyZ6NHhFZiUzMj1fOix0MGFhYGFfWmssJEN1QFJgQ0dae0pLNDhxbFEvVUEhcCUjV24kY1lRKDhkQD53SjE0SCt6Ky5AJFhUP0I4U0BHRFVxU2Ymem0palpzWyM6O2hkRXJ4aiY6cllZOylYYltNUnEicl19PndHOWNFIjZNW0ZWODZL''@;'; put 'put ''YSQ/KVtxLENtZi5LZ0I/YEw/XWJbYkZAITNeWXZqR0RxPnRMfDdZdzRjU2tdYF45dSZKKUd4I2ZOfW51bixVJUJ5V0JedkYib1s7Z09EQl5UNWdpQ2lqNTVuTllFPiUlXzxURi9tN0M0e0RbS2F1PmZ9N19uKikobXI9QCZQY1F5KHM+VCR3LFRgZ1pOSmA+PnpUSFFSOWowIVZAMnNfeipaRlMi''@;'; put 'put ''RUk8cXo0WTsqRTJaSzs8OnIzVTBPaiZAJEBNR0srNTE8L1gpQ0t4aCZLT2NhYTRsKT1SVm04fFU7YDFpVFR9cG83ZV1MOFFwImRhZFFdLHF4KWh3UyxPeE5LVkt+YFZRSnlwW1NYMSYiTG1welR4O0EieU1FWjx1eDYzMy5JKlN0cUleTVdidD5HejArSGtSOnohZz8meVdNLnJMJURhd258NztL''@;'; put 'put ''dnlhMSlDIk80XVcoYlRUS29rQVFMIWh6cjwmOlFUQHxoL3o4eEphYnJFRUtaJn1TbjI3eUx2ZUozNF9delRkPFt1U2UqZU0rU1VvTT0iNiU4c1VMVlU4RSFSWGdgRFJKIWA9b3FIWTsmKTtwI0l8YjUqM05vOExJZTZuNyFua2ElU1dHcCNMeiF0K0xFcVsmU2kqTls3NC5Dc2okUVhHWzRSWT98''@;'; put 'put ''VHJ+PyRkMGMwfHdQLEtxNy5Ja3pmWE83czJTaVZgNGN2VC9GPzBRfXw1b2RtUDU8e15WT1o4JGJJRVc6WTorM3l5RkYuMzs1PltCNSEqZFZiUSh1JFAwfGtQVVFqP3NKT2sxfVBbaDNzTHxRdF1zSjVLOGNIYHg4UkA7L015TWxWTl5UUUJwa2AvXXBUVjRTZyZ+O2tSMVVjR359ODRLaH1AYyNK''@;'; put 'put ''Ujp9e3wpYnc0K2A5OHNuaWFBNmdmNkdpVXtMcXdMNzBEcWIsRHd6Pnt6elhFZWtBdj1OZzg+ZCIlOm97JHd5TCF7VVBMVFpSY3llM0pqVSxEemBYNWcvKFpnfmdnZz9UR1FVZ3c7SFJjSS9WV35ybnFvck1RZURFSGU/aTM1K1RZOzBFVjdOZCphTysoYHdpb21tMkVZdWh5RE1lb012OGw5PHUq''@;'; put 'put ''Smo/XWdealRfclRPSCtKX1k8YVZWZCZqcXRkX10pVV1xMnhbVkYuRXRyKSxHMjgwKkc8Pzc5TyZEYkV+YmE4RyhsPFF7XkdJNHpaPGZzUH17fHg6VEFnfER9L2gzfjJxVW9bRzlARl8uc1BEWHA5dU4mWX1wKGpSUUV3aXBTLH4iTXYvYXkyY0ZROlYsWkRRaVUjVjAlKXtgVERPTiEqI1E5Vj4w''@;'; put 'put ''QTZJTnxSPTk8UEM8TyoiPXdfSHV8LjREJEx1e2BZKkQ6JSVrKV41bVMjY19tMWEidW9ZeFs1IjJFImd2SDxfZWBbZ1I3e0RTXkFFaFlZY0ZPVU5Idl87ckwhSW1ZXm9uQUN1d0lCdVIrdWgodU9xWF46ZUtdfXwod1p4elk2LHZ3QkdGZ2lYbmpsJEhBX1R1NGRiaiFVfCJFIUM3NzdOVGM2LD92''@;'; put 'put ''OElhTWg4fTk1dVpAYGI5eTBFJFtrPCZFQGZrVnthNVY1XX1GWF1TeEN3dWxII31jZGwqcSQrVHgzN24oXX1vKWddTmo5Tk15PTtjLntMSDFROztEa0IkJGtpanJdKiFtMnFESH47YSEoPFg4Qj1dc2p3WXV8cTtic2RWcilbMC5kTWZyIlIwc31oRW1JVUpOM0VeQ1JBL19hTGhLK2A9OCxBQEYz''@;'; put 'put ''I2t9ezthdFlrPDcyY3NaJkYhUE8wP2MrMjU5ak48fC5EUX08WFRaYHdCbzZ1JDN8eTlMaXFKMnY9OUNgbntpRkh9OyR3WyZ8P01jRWw7Uk9iX0wlM2BUX0B6Jl5laWpAYHZRMih0LkNoXiRII0F9Qj5xVGZ1TT95LDptazJ+bTQuRj0vIlZNKElHXnlLeF9HVVs2UGdnVmNMZzx0O28jckc7V3t4''@;'; put 'put ''WCw6cDBRfHoiXW5zJmIkcGB3ZSRhMFFTRSgpMi5eNk44LilvfG5kXSVCclRJWmZaU1kqY2RXR315PncvOVBmNEpwdzkwZDFqYFpBVCJjaWIvfE0oRFJeYipxKDRLbCkjP3YuKk1ZSV1hWVAveGNwLzJGVX18UlZKc3xLeyYxSFsrPktvalF+d0ldYXV+XTt2PFBZNlAmcWorTCkqZCw3KjEqTz81''@;'; put 'put ''XWR3LnlbKlZpY3tbPC5WRHtIWlhOQF8hW35RXjtGJHx4SDVZenFoQmNvMEJoYm19VVcrPTxVbD0hODRsUXZqLHEjb1doZlswO01wWWBOKmZDcXFsQ0c3WyIxKClWcCo7c05ffE9PYzQrPG1SWmF4L28lKEdhc3g5dDEmdTltS0lxcGBfOStHXjNGWyxPT006ZXBaNysoYT0mVn12SFtBfUg/PUxr''@;'; put 'put ''aTIrRCxEQGUrVTNqX18yJnl4dis8cXthUGYmZjdwI3RbSHdnU25eJndVMjxUMiZyNGtKa1RDdGNJLFMsVFk2K0o/e31bNmosYkhUMFUmbGovJUhQYlJ+QkpOfDtXS2UwL3EpNFA/aF1ASUM1TDxzTDJCd31WVDpteypkfV9MPVlQMGhCXm58fStbLCU+Wi4+JissRldoKVF+VVlgOHIrXSRuXiMj''@;'; put 'put ''QEJkdEowP0JWVCk8VjAxczhuOGg6MT1ydTZnaDRyfWpQPWpvdlpZIlE9T2cqKHZXcX5hPzRjOitYPkVFOWF0MTR7PmZIZyNhWiVmIzxXeGFjd0l1VmdnWG1CXyhfRDpyck9HTi5kQFtjYGlZI2d6OFZgOm5QYz1ubiNeNVlIPW9ndDdEMnU9akB7YGouX0A/N3BpUU07TFshRl1gLkE9c19TRjBG''@;'; put 'put ''PUMvTEpGPn46SHtqaEs8SjJkX3xsZlY8JU5zQz5uI1M7VE1zJnREMnxuSnhiTTBpRCJ7QXM7dGoyQy9fVllbKCErX1FhPm9RcyF1V0Ymc1BFV0ZgSGJ9XkJPQEpBPnN4JDRDU298b0ZSTnAzOmJSVj8iPENxdis5enZse0xbTiNod2xXO29yL01Ie2wmJj91YTRhT11uby89TWhsPEBKeGZvaE5y''@;'; put 'put ''R29uNXZiO1lvRTVBWUNXVGFxKXs8TFhjOD1sPE48NDcpPllTdzokRVZaKiQ5KEd6P3F1OkNGM2ImWE58LD8rTlYidi9yYGpleEo1aSssV0soVH4oKTBYUDlBYDMvR2ZpPEl1eFt6KnxkSld0KSJ0K3hjfXFgJHcjYzg4PS81OV1BbTBHVUhodUxJTTBgR3d9WFc3JndLYitNW0h1al0qZTxPbk17''@;'; put 'put ''Z2d8dnFnX21OWHZGViZPT2c6Y3lGRSVVKmQ6ZCtxX2pOIStNeiNNRmQ0L2wxJjlyeG1nK1lKXzxuIzhJaFtvLypVaFM2byhfOlNkcFhPdTxEPGA9fU9jeWZ4VWBNRikvcERVcjkycDI6cFRyd3gmYXskPEVgR1AvYFc7YmtqbW0rZiN1QmNobmB1eiNwe1t2YjpuN2xDeipzfGpUWmhVU1JeeEg8''@;'; put 'put ''WXkwdUY2Q3IyekpdKm10NEdPPU9KbCtZKixQTF1CJXJ1c0JRT2BScXJUUFIwYE8hNkpvXiN2els5Xjg/R35tOTdMIV9PNl87S1I7fEFtKlVlbDRIMGg2YkFaQEFRVFdyeDVEWHooQ3o0dypyPzx6W1JCLHFvLlE0bCMzSkhoLGhAJjp3VTciP2hOTk4jdyEhWVFIIUhzJTxRWW1mdGAvUEs6SW1e''@;'; put 'put ''e3pgMVlUMyZwMTpee3REYXFDRTQxXVlGV059MkhIJHxyOFVwLFVbZ3FCZClFMGdoNkBQbkF+RGpHYS9VLmRHNVVdSDRsTFFpd3RFYGI1QypsfnR9Sip2K0YsSiNVek56XmYlS1tmZjk4Wns6PFREQjZUSCx6WmgpWkV5ZCVwVE19Y0BtKiZFeEg2LGNxZ2A3P05OLkhvUyk7al00VihDfU5fPiNj''@;'; put 'put ''XVUrbkk4d3UzNDNnMjIyLjpeTHh6blh7QGxGdjJPTCp4fkRGXT07RmF+UChVcTtObEp8Pk0qTiZMbCY3ej9XZFdtLiUzcWFtKHlBMF53T2s4SCR1Rj0wM1c1LCl6NyhuJDRDSFl2IzVGTSxXbWhFbl9ieW1DdihpOGN+a2lJd01FXWAqPSFYR0pxQFZAXSNucT04SDpWVGFiSVliYk9JMkc2LGV6''@;'; put 'put ''WDo6JUhFWm1RPzdiZ2ZASnwrSlY1fV9AI3c3VEVISGt1XSRsLHo6L0VgN2p+OlEpXkVRcyEhUCFLbGE8X1d9KShQYHoqLHF9LGxFOEF1KiloXlc8VlUhRVQ1Nkh+alcmRVQoLjY6X09uIS9rTWxTcy9qYnI9T0tKPnY/P2VNIWRrJk57STwqO3V2Im4xaHdFbXdTMSNUJEhoLkpqcnQiWkJrWWt0''@;'; put 'put ''fEJ1LmhDKC5ER05CM1MjJD8yfS40Lk5xRkMuUllDdjtZYjUzYzE0R2Z6czV7KlI3d2N0fkJEbmwwMyVAbSxAb2gqM0tFI3tLP3dvRE5AUnc1IlV7PWE6ZDReXXg/PVc7WmU+c1hZTSZMbWFrRjAzTXg7bipPSSFkNHM5N25vTXosd0VFQnw4O20xTWdXJStZfVJGYmsuREAoIlNkZmlNbyolRFhZ''@;'; put 'put ''KDV3MkIxYFF+dU1jPDZQdnhKJWx2aEVUfjxuJEZqXSguTzk3OnU0TSxhM0MqJT5OPWxLOS5vUyZiT0o1cnZDKm1lLyRCJUwwNUFDajpMeGBtNyxlZFdmTzdwJDFFTDZnN1VwaFJHSk04NmN0N0NTYCl+bkFAblFqX3l9Qzw2IyFDVUlUVSkhdUhBNSNHWHMqeDxHTSMpN2Q9bmtdQzk3cUVmInh4''@;'; put 'put ''NjshaVNERE9gOTFwXkdXZHNVOF5bRnY+dUg+cVtpeGQ2LiYzdjRJK2BxNCJaKSRoUEw1YWw8a0wsUD0/eiJiNWljd3RzUCEjdmN2IWJdWms6MixKXk1RaSpAd1Y2TTw9QltIVVE6ZTEwXj9gJH1ZK0lHZzhFUkNCJno5Q3M3bk1SSEU6bTpxbTBkI2NRNT41WXIuMH1ffSNsSlBPTyUmbEhVa2FQ''@;'; put 'put ''TjBpMGB2PD42ND1Ga2kqOTc7aVA5ekFyQSQ6UDp3QVM2JSRPaGNZKkFpIWEwNXtHNTRSdUIsPU1hTHNvRkYjP0VZUkwmQ1heJmM/L0lDbXU1SywvTXU2USwpN2w/dlZWfjQzNVZIKiQmVWJrT2lYZHBwNytSN0MmP0dOLkhdZFoyQS4ucjYqSmwzVm5SbXREKm02dFhdaDhATmFFdks8RywmRVdV''@;'; put 'put ''PG11UHZnb0tmezBac3FfQ1FjXWZtRmhMXTtSTComOjR1VSkqPjpvREolWX1XP2VgfDVaUXBoRVpmYWF9akAvUS54TWtTbVdnWW1TUU8re2VOfFtUNzcjLGw8NlY+enZHWiFeNms5aFBbfjl8fjo6RDpmZ1hIVH5tfD53N2ticXFpLitGdm4yREo6LDMxd3xgMD1adHU4b2ZPVSQ3Rm5bRFQ9ZHB1''@;'; put 'put ''UD8zKkBCLH1ScTVJImIvTDN+IXk2IUpuQEBxazd1PUJNWFUlanc/WCopKUUzVFQlOUo7V1REdj5tMjhRUkRzWlk4OGByQiRGJWVrb0kpJn1gdSJ7P1dmQG4ueSV3fXZZR0teImkuczkyJkh2XiRGTSJSQF8hRVlVaWVte0VCPXhid1UpZnR3cEJkciRediwjPmJEZlpRY2FXbU4uOENsQnFCJUQ0''@;'; put 'put ''ezEuYntxNy5iJSZYdStWJn5LbXd1NXskZVEsQiEid2VLfWh3K3ZhcnppKCRpYVtdQnB0Vn1XJWB0PG5rOF4pX3tyTH5QYD1+YEhKSGVReEM0KUVIUEBKdF18Y3JoJik8NjhAMkpZLFBoL1IpITNZVFh4WChSLmJFLnJGckBuVTlbST1tSEFxPSpuPmx9VU9ofT0vVUFpYXlWVjNBW2BEcmxLYD40''@;'; put 'put ''c2ZjS2ImOS89fCYpbVgkUHpVVnxSJlM/XW5gWiN1STU1TThPUG95XXU+WyFbK1ZnWD1XT2t4SG5NVVFrfDorQm94T1RQSCtEYk9AZzV9Um9He11xVHJIZm5UWzwya1lmRn1QQG0sbyh7QkEyems6VTA/X3tULFNXKiZbZDJ9KGtBWkZiWnloYWZrVVhwJWg5cXFoTHtDaGtmSz4vcjtSclYmV0RP''@;'; put 'put ''dTQoREsqXj9HOE18VT1dbj9Xa01pcDcjRzdQNzFgSColXUA5LGo6TDxfa2R9b11qTGd4fHd5NTlsImwlKjMiK0BQeH1QajZMc1kpdmB2MGsrLH4pSGVjdnFJej1fOShHJmRjSWc2aiMmeF45UjZ7MCJBTSVEbVBGc3lFPj51WC5CeEZ9R2MuY2c2aFtodDl5ZGx3ZUxhLnNreWJNeEgxZlZ6d0JM''@;'; put 'put ''fG5XMUhDeyNkUykodiYxfWZ0ez40b2orXWklbF1gYEk2QTNHdlhpKmQuK2cobiRWJTFiUnczTW48SjcwXWZ9ZiMlRWB6WWspNFt8a09RTnEvKDNYV2d6Rks3Z0wpaXw1Zlg5a3M1JShKJDYwQylZd010ZGI9V2dKW2ZOeVJvcDtecz4sVilwa0lbd2hzfHk/K11NOFhHclYvKFlCb3d0YzRtIkc6''@;'; put 'put ''Znh5cU59S14zMD14cnAlU04zWEpvZi4qNTZyOzxnOEd7UDUrYDZPd3UvRVRsbmtPMzJndUBAeHM1L0FGRV9Ue1p1LGBdWFlhM0VaPl5NVSRlWUgoemApOjB7YHgrJHAuIk4hQCFOJUVBdFlFQlVBIWVXcztpdnBSfjZ8RD9nJm1jey8keiZOXXZfLmA/LiVCLG1IcUdBMypWeVttfHZvJT8uJH1H''@;'; put 'put ''c0g1cXFtbytaPTR3I2IvVTFwJExsSWVUZSksWHJYbX57OUFCZzFzXSlNPi9KQlUvYG08V209dmc5USt1L3dWTjlKWHQwIXtDUDlzLzV3NT0kX3kwbUY0M3hMMHlmYVVzK3tPTEckM0c6fGNBW3h7Jkk8Ukxabl17UTU+QEMkRiZsNXchQTxucDF4LkYya3FLOXFMVmM+d258OEkjQXRUQEdNaWZb''@;'; put 'put ''dGcuQkwzXlpqJGUwYTF1a2k8NjlTXV19ZnU5Kj4yd19rYil2ZDFFb3IuejRCYmclJVBgQVl+MFUmJTsjZTcke2BKbDd1W1U5ZiF6dD4+Qjk3QX42RikjTnBAfmNVaFRbLDZ1VnNudmY+Zn1VQUd6PTlnWVheNXtLLE4sVVdLQjBfQ24oLzEkaVVBOCtKOikscDFyKS4lez1odmpbdCs0LkxuVTVG''@;'; put 'put ''Q35mWW5DckU7KDl4bE84dzo1eXFLWEQzJHFyLGB3JjFrRXpnVHwrIz9ZNjo6X2hlKn0pLHhrdyFXQjM/eHIwfE5QL1dCb21aRWZLVn4wY1N4cVohMG08bjw+S3oxNXJLeTkodC5ZcDpUSyxvZXY/Wi5uJkltX1h8PSlOR2lVMGBwclMrV09IdCFkbXAlQkpgajIsX1l7RUcmMDZXPiUuLmc7JThX''@;'; put 'put ''T0Q+XnpyY2BdQSRDViMyRWB3eShSbjtyLEhjU3coIiZ6cDVlKWxYTnk6WXAhZX5VdWZ4KjtmSF5vKllpMlt6TytrNmpASFNIdXR4QmVyXV5baFBlXyN7W2AraCZYR2tIOEwqSWVqPz53bClCWzxtb1VZNTspWVdjWUdeQVhFSC9aYF40S1lTUz8+KjYwVywkcXd9N0BiUVFEK3llZGZHTUdXS21j''@;'; put 'put ''eHhxY0J4Sz4jVkUuSjR6RHhpbX16dSZWQ3JLKEFHI1FqL0lYJnFBSVUsQi9SPlJnK0tuKHB2fCMrYXYvWTtDUEROJU5hUX51ZVBZX2owR29ddVYseWAqcCIyeGh8L09MdCNLNkI7Yzt2aWxiNGBGXkBZQHszc2UrOGhbUCt3W115WDoyaiUkLmlWSSlIIzcsTUlRMWRDT0NDSDt3bHVXIXszZChn''@;'; put 'put ''OjUsTHVZMjY4al9hd0xkTjZMemV8ZmswQ09KWmE8aiZ8L2JHfXI7JmFlK3xxJiFdeUwsW2YuWVpUPGhOWipMNWVWP0UlX0NSak5lW0A0VXhETFB2ViY9WjReTmZia3pjY3FCaiFrJCt4anpybS4jMyJdKVlkOk1eQltMcE1eLypvc1YoLlIzeFZfWGwpbWB8cyV7YikiTUhtQiNraWo2WX4kU1Z9''@;'; put 'put ''O0A3PW4/Umg7YSVqRzZZfVJbfGdZY1tbamoqRnd4SyV8N0pPQlhuYjU2cEdjW0d0RHchOmp4RV5FSVsxWEtnI21wPSN6azMhMEAhX2dZajdWe1dDQkwiYkZKSXZYPjZTdVY7eF05KitQekRHfilraGlUKFhENCpXdExMY2V6Zl8zNzUkQEc7P19KWjt+Rjx8I2NUL0N2M0x4WjVsMDAmRWkqMjZQ''@;'; put 'put ''WmwkPHBeem89PTZnRF8oRW08NytrNSorQWwoPFpxVUYyb05QSTdDQzMsP29VeW07eCp9KHgiOXQqIVJ3RjljPHhbNDQlNGs/Jj4lZkVCZGlOMj9EbigzOFlmcj07WXxnT24obVFrdypmMmc9Lz4qLjspUyE+bldaJiwrRyoxOCZDdzx+MGAwQ0dIRDN1In5ASEo0Mz0rUFhYPSZVVH4xKVJrekxj''@;'; put 'put ''eSJ7RThRRUdVPkBRfUwlb2pAZ0FEcSZ0fHJQOiw9ZyxtPWN9RTghQCpzODgwW0FhXU9bU3d0LzUiYkhgdF4+SlchMExWbGJLXnM2eTgpaWJaTWRJQyZOTzpTYFYyKE5kYUg6RDwrIj4oP0pLS2QyNiZXZCIpa21PQ152NUwiJSovQFpRcVBjTkkle11XKnFVS0AyRThYcEJQXnpdfEpwY21RPT5b''@;'; put 'put ''S14peUFwPlcjZF1Wdl4hLjZzX298OGVDZkR4W0hdVStIeTdyfTBjOiFLfSVwR1BTdTw8Nio4OXlgfjc4cVood2I4K1RZPVZeQ1lPOnR+R0I8d05nM2JaZnx4MGU0ci9jVXlRL1kuKl1ROzd3fU9jfV9hbT5fTF41eTlFJm4jTyJuSHB0SCxGZSpdbThue0NGfkBSfFs2UWs+ayhzPGF8RFk1bDN0''@;'; put 'put ''fSt+eT59QmZCV1Yrb0hJJiZJcWBPV2hvWy44MFRJPkRVVTlKcDIyclZ0KzZzX1smJiU7diRsSld9Z1lxLERLNHE9bjFZTHRsKCF0O2pUQ31KaFtyK3ZBX2ozXldCdDBsNmNwMXxCaDhbXjh2fDEwR1Q7e3x3Lnh2Nj0wbylka3c9LmN7dmNiOjJkS1gxeGFTQGlyeHglQHVLN3EmT0tCZl9JMDJa''@;'; put 'put ''TnpoUWdOIjB4bEtUX0FHJHs+e2l+Y1hqfVRTWHtfeUFYMTpiKnpeaiMjYWF0QkVRWEwyNFsoaTl2WVpvWVhSbWY1QkZKdEYpN1BtfWY5S19heDkjc0dhMWQvQ0xvblg+RDR4K2AvUCM7XUkkYnVbflk/UGEmd0lTbi5MMVBFMlFmRl4qNC4zZTxtQjVdeDtCejc1YmE4c0RqTk4hNCtwMVI0VGNl''@;'; put 'put ''T3UlQVZmfDVXbVA7OSZpezkkbDFqezhjeShbMWc/Il5PPz9JSEh5SkNxP2NYO2NSd1l3JFhNMmhYQzVoU3F+OTxyJiZsWzIqK19vMzJePkEqWyREPzB2bkVVUT57LzRUcTEhO0xReTF1cDlZUCZITTliT3Y6UCUrKE5rWkZhWTQpVCYhe1ZEVFE5WkhtbjdZWmE8T2o2PzZRR3dIKip6eCY8QXpj''@;'; put 'put ''VSRpTXw6Lyp3akVBKnM5aTd9RTx5UXJERmZjLms7KGV1N3Yyen43MGxWN0pvVVdUYmJiYXY0Vz49fV5KYGFlNipQaEVLam0hNmVVUHY0fk96PXxeZz4+VC9oa3JJODxWc24udFBsdzRQQCskYml2ODY6amMlQiRUSHpFRWc2Sz57QVE5SGJuKHp5NF8+XzgwWkA8b3w4N3E4Jj51fHI4bFNWPHFF''@;'; put 'put ''QDBiTUI3PzJ5ayZXPGElQWo4PzU+bl9fIndWTn5UMU9sRWwqKGc0Q29WXUszN2VXVypveiRZQ3Q0VD9xKlg2dkZmaCNXQn1DSyQmWkIieDpORipqIVp3Z1txejg1TlhYSmN2VVsjTTk7eWdYXUNkPGpvNUMydVQ5bnwudVtPaWp5Tn5iIkcmWDFNWXdqKmlEcXY9Zjs3eVF4WSJPY0dGVG8jZEZB''@;'; put 'put ''Pld7fEIiVCx1QnNHSzk1O2YjNFs9JkZuUnAqZFJyW0EoOEBYTEFmT0AoW0tUfmZQbSZ1KzBtNzMrYGorJWBZW2g1ZWR2fTN6NWRlWGEmYlljSCt1O2hXT3c/NCZlM1dgUSE8MEYlYkdHdyFXYCVSRVRfRFh2Z0NXVUUmRTBsKTArMCthW3V7V2VPQmVyN0Jdc2M5R2AkV3Jna29NKnRoWGJPTT99''@;'; put 'put ''TE8/fTg7YD95S2AqT1hTOzc2XUAsQ2NKTCFnMFIqNzZiOnltWEYqJU89XlpEKWYqRyxCQGxwd3FkZG4/YGpFbW85JWU6L1khPG43biglZWxMUWlZNVpsfGB6RCJbL2M4QndmP2ZvNSM1SmdGSis0IyYjIj1EUG9Ud11sNlBhTDRUbmJiTHFEWUVpOiVMZSohX1ZKNSpuelM2Nl0pO211PG4+TilJ''@;'; put 'put ''XSFHKFM9IlprSD5TZClPWSt5IkpicWZFKi5BYCZDT0NlMm56WiJWXXNfSTdES2pycW9PVjFRLC8jcTBJLF9gKFtEaV5gOjBdTi9qc3c+d2J4I1J8UkQ8W011bzd2TipGRnovRGJ7S2MsMkZDWztsY2RWaXp5bTV1b0k0MC5Nb3ssUlkxekgyJG9PMDd+diw3NTtGZTtrfUk3bEohal1sczgieUBZ''@;'; put 'put ''KXJVT1JWNmopNllRdXpLdyl4aEMpTX1uWXRTYH5iNE4yMV9TaWRATXxJfDVTVk88L2xBK2Z5JXFLMitHJVMiaXpRND0laVd1L20vPjdRP1kqYzFIYksmcyFoREIwK0NafFM6JnpYKXo6X1clT3RVJXBKQ1oiZCJrIXM8SS56Ol9wdH1NPV8+Y04qX1ojQ1cwNlk2dVhlRSxyeiE3QzIlR0RTRFNv''@;'; put 'put ''TnwsUyohPU04e1NTKjgsWnxxTlRoRn5IYS9uMSVremVgMSxZb1cqRzxPKzRoXVR+bixNaSpPMXBTLEdzSiFibCpXVnN7MSghbmNBIj8hfTBXI18oKCJUUSI5RS5QIW5LJS4uaH4xKFUzLDolOExWbXxkVUJdZUZROG0+KERZYSt3cHFAJH4hPlh8Sj1ydGNeazt1XiFxZzdLWEQqU3dkQCpBJkJp''@;'; put 'put ''OyErIXUldG5KZjdLKF53Z1tiP2V0TG8wPkNFUCJHJU9+I3A3byp5ZzRvUnBPMWtrSDkkUWksQlQqNSk4dml6ZlhLM10hT1p6ciVaNVNybytwQVZZaC9CUUMqUl1+WTdsZU1gIXU0P31hIUdOWzBlPXFObVJOXVkocS89SyJVdngvQTBJKl5GZnZPZVpYO3hHWnpwS3M4XmBqYGVsfjtCMV1PXVR6''@;'; put 'put ''aSNzfU9dVDA/Z1ciTjxbMjVlQCEzdjV1QGBYXVRfYyR+fmd4VTRqQSsxUWtkL258PykrfkR6LFFQIi9LPmZ5SU5UKiF4azE+fDxvK0cpWltmP2ozX0ghX2tzaSY9Jk45QlJXRytNe14/SFVKN3hpRnd9RzRKZi4sd29jWkBzalZSUGQ/KFF7c25iT25VYll4MGdWXSRTalQ7KDl2WkFzd0B4Ql5J''@;'; put 'put ''d2MqZjlEZWQuV1IpR31ITURTRlVHdFsqVW1HKVd6ek9SYCNaRFFfbjsmSG07TmFhKjx6ZGdrYixlPCxaeFAlMF9NMUN+XygyeHpUSCR0c3FeX0AhXXteUTNRN0R2MlFaYEkoXmosVyFONytaaEphIUd6Z2w0cXMkRnIsOnV2RG09eGVoJGRiJFcsVG5hdUI4XjhuN1A8dFQ5TkNqPVtTKHdMPmgs''@;'; put 'put ''MXt2NHRSKXReVEZeUXVvMFBDIV5VPTNSQFQsNkcwMUp1cElDaiIkSUJxdzNmOENPfFs2e21zSjJEPDtQVFZyYHRLNlZLKzF0Xk8pUWw4LGxvYz1RPWVvWl4+X0lmR31gYGdsRFojd0xHZVk/MGRufTxIMkA2ZCR0VElzVl5UcG4vO0I2PHxdciFkPW8sSW0leHNxXl1sXVhjS1h0bHwkRHZWbllz''@;'; put 'put ''LnBdalhtbUN9N046ezAsMzhUXyJRW0MheSwmKXRUNWRoRW1dPWhyZn1iTjJGcj1reCZkXldnbVh6OWBadVB4diI9I2p6WF8qQz5QOH1nIzBAdD0kN2lFfCYpQjthLj8hVmhVV0YpU0w6WGIlY35meSE7Ijs9fVMrVTwwZE0pbURybE5dPVVfPlQsdlZycjpFfFFMVGFpTlIwSWFFT3YxKT4iflUs''@;'; put 'put ''KFM3aTdQN3xNWVhTUlF6cjwybVJSdll2ZiVQImp6d3NWR2V7UnxJSF5yeXZlLFA/MG8sLGpdIW5mJVA/MCNpJW5Ublh+Kz59NXdVUyN6ajpAVW0zUE8hXi48T0QuXlU0PEwxdzUibTwwbn1BbGd1enVFODk5Rm0sd2UqZmhRSzBKK3c6ajVDNEEybHZdTSlzUko4UjVmaU9tO0VBS2F8Wlh3JmJw''@;'; put 'put ''WzlOSCwkT3d+ZnJkMThyLDRWIXNWQj5YMjJuRkVycS87JmA4ZygmYWx9Uj5yeyI7N1M4WGRZNS5rOlRAVF0yczlTJVg0JVttPkxXbCJxe1hLWz9iNVFTXnRRWEMwQ3YwJTA0VG4sVl55OGxtNVM+PXJdJGkyek9OZGE2MFhQLytJfSQhWFBuN1A8R2VASzJvcyxxaHhNb3A0PGhrM3czbyU7TyhK''@;'; put 'put ''JipVL34iZ2dlNnBeRSVjZUU7ckJeeFIwSS5LUixBS3cwQzhvPkt7Pz12PDNqKjZHI3slIi9UIzpsPzRLX1FDRDxPT3BjMCo/YjBwfFdXSVFVW2VgTjtObzo2XiVtNzh4SW9VWlQqLz9KT0t8KHQpMDNEcW07az41eFk9YV1eKkRPV1ZAPEtqV3VQeVtIdiloaTg6UkxoW199Z0dnSVNDVHs0MT93''@;'; put 'put ''fmcqVSI/MEk/Uz5ZelUvSmc2PyExViFDOyhsMFZeU1QvSik7eThtRXxZPnwmPFd+dkgpSnc5QjNNRit3W0t1VHRiMlpKdVhYIUIlKT1ue1F7TFp9YGFmLjxHPmVtXyYoSHdTOlkjOCtRd0M6Jk8veEw2aTY4WDc2JWV+V1QhKzVfM0s3LDV+WWMhJC5LSnFufTUmKlRUXVRLV2o6TXIwcDg/LDRm''@;'; put 'put ''YFhrPTtMIWFWQDBUKVlPOSl1ZVg+MG1XYiJdY2IsaGNycjVgIW5UTXZjIztFfSo7OzwqbExFIX0yb1RAbyolSzh7UUxAanFBRDFGVCZRXzQ6NEUuS0RQcyRgRSpEKHd2XUtdR2VrKVNKNHpvXSomamEkeCpaanNBO3VfeThwI2lNUzU/OFpuSSheanEsMG0qSXZFMCYqS3oyNDVUVHNSUzFEQldq''@;'; put 'put ''dkwsLylVQzF0ZGN6bHMqNT9UXU1jbEx5L2JSbzlNRENIIy4lfXEpPXYvbzVaZyx8O2FyWkg2JGBPPHZDcXVJVGVKTzNeaCNdey94TVc2KUA8ZVJMP0sjQCpzRCgpS103aSNrbGFIISFYQD5GVHlGRiEyNWU8MTA2L0ouWUk2JWl9cm1FZWxrPGVoI09rM2xtWn1jZWU1Q2UlcDR0fG0oZCtTd0dd''@;'; put 'put ''RmN5UnY+LmByc0wqYSFXN1ZydyxPTG08JG1VcFB6SmVKW3RtQSNgKWR+dEg/W3wjSy4qPW83a0dKfVprVEcre3YxbU5lWyZJaXFqNk1vSk0wR2ZeK0Bjc0U2ckt5fkF8Pz1rX3cwIWlsKXdvPkF9Jm0oL2o6WUtBRmgwMTgucj01PE1bT2VwIjRgTmBQLGkpMT4lSHU3LF1xNiFUaT1PL3pGWDl4''@;'; put 'put ''QmtCTEI9aEJ0cTcyUSRjOXw5eENROjtVTU4rUCp1c3FpUihgb15kY0omYnJkMUJ7Uis5d1sxVmpXLGVpZnl5UlNtMXlDXy8lT0NBdUNVLyg7JWRJNU53UnR3Y150P3NFLkVbdWU1LmcpX2B6P2BTKzRgezlFfERya0lyYm50PkxvRDwzYSEzTEErcjxPMF42YTFbV1FhR11xUn5tc3FeLlklLihX''@;'; put 'put ''b34kUTJ5bFpGNz1baDxKMXRBI2t5RnQ2cFhKIUMybEFsNSprW0hnb3g+d3ZHPSNZJCZMd3g9aT43e3liLGNtQ0YwUFFsb347TGtMN0RTJSIvO3ZuSnghOXZka1d2JD9RXkplRUlIPSM8UFY1eGxvMnQxJTwhP0lVZiF3JDZITj93d09oTUhAImQ7PUUoSGw2KCxWJFl2VkpDOT85Nj5YanNZdGxA''@;'; put 'put ''emNMIk4kcjZCckZ0T0ZfL3gkTHl7SnA8eGZqS3JATTxtcXRzSEJaa31JNktdWndwZkpwV2hzflpsa09RSWAuOHo9VmJyRitLYn5ZNV1xYUhOcls3I30iNmV1eEUiQFhIRVtoTSUiVVMocUlXSWlILjZtV3JNc2F9eSZ4aDlXT3s6ey5Vfl1qJlpKWitDXmtGJUNnL0NPPGJ3eThSUnpOODwuLisu''@;'; put 'put ''JUJDMWY8OFBLe3hXSCNgczlHVi90aEd0UXBUSFYhPHs9PnU/MSZFciFdYiNBbGtIYGFdQGIoOz5mI0Fsa25gYV1taCxWaks/KXJFc049cSVWTk84Lj1aLjouT088MkB6TUtfPG1iOzczaz46eSpGSXh3d0JyJjBATytoUlcmKmxMXiFsazYvfT4mKCQuIWJjeHtGaFA5Y3xSP1M4TU48aGYraGBA''@;'; put 'put ''YiF2VlJ2NUR6Wm5qaGIxajxjSSteVTdmN0M2XW9qTGxxXlQ7MDVHUWFUb2pgI0hrUWQ9M292NTB7O1piWEBddkVyRTF7bElHclB2Li9SYDFNOFRiVXs5eEp7PXx4SU9Db2tPRyVmKkQvND8uZSljJUlLNStjL3ZtMWQsL1A3cSFMa31UVTxfYjB1YE5hWEZIQTo/aHZRXl9heT06Xn5vfSE2e2dg''@;'; put 'put ''ckAxIShmZmx9X1ZFL2NCKSs0MnN+Y3lSK1U1KjcuKiZePXI8bDxsZjhMQjE8THlObGs/PDE/UD8wV2R3RytkY0g9PVFsQ01QT2lON3pSSk02ZGA0fC9yRE5XMWh8QG8sWHhAaTVycFQ1ZzhJZjZpeWQldz1OPFQrNEhyVzJlXkBpVDxDNSUrKVNodCRqdj18T3pNTFpzaUxaOjI7M3JMNy41U2Nb''@;'; put 'put ''bCksZjJfSC5OPG9PQ3tZVUJdXmFmSGsoY0tYcDQ/fCNBL2o4IjR8MiZufTd7Y3BTNmB6dyFvRypNcSQ6N0lrKFczSGNuL1FPV2JffWM4W0Ryel9eOH12MVE4PE53anpzOW9rKXpwLzlCclgqd0RuPCJeVyI4Ym9RK3dBTl5gOlt0TCl7LEN4VkQ5bVZjLiwuR3JJZ1hzcWkoIVFaL3xRIm0yOTlr''@;'; put 'put ''VmVRJEBLc0tUI3EuRiZKbTB8Mm05JXJAKDg2UGlaMHZqQSsqeiY8cy5TSV1adjhhelU/c1NNI0tRK0Vlb2JdUiZzVTVdQ2UkYiE7cy5VVnt5L244OmBxOHxVSEdmdztgYnQ+bkY2Sy5ZPiI8c2UrWFsjIXRwZyV7KDZNRUJOWVtRKERyVlBHOkl3R3A3VDlIR2NJRHdWWCo1OSpYei5JN1lMKjdu''@;'; put 'put ''UURlaXooS1NrQVlIMlIiKSRJN0ZiP1dXS0NZP15Rc3d+dit3WEI0d2xMI0NaaT9NNisuT0N6RjBTLCx5SklaakF3V3ZSdjxbY0V4e2FJNzV5X3BPSSFicFsvQzpAKCpqdVUrO1czd1RucCYlVV9NR2oyP0NiPV5ONT5sO2hAIXJzcjc4UXpVez09TXpVe0ZeLDFEPj5GSihbN0YmI11xP3hraVdZ''@;'; put 'put ''TTddXipvPE1URV50TFosczJbRU84P2JPJTQ9MVE6aUwpZTw2NE02U1BDbX40Ims1OVAhKC5UQzp0O3tufmgkQ2VJMW89Kjh4czBrR0t2JlpqbE55JWRTRXlSXjlJZWFYYkEhNyZQS2BofGdhRUdRJTZZfEg9KFNqLHopSl5wW2RDSkw5bFdiW2UwNGUsditxTX5qUCQlVX5QQjliMCJEMiYmTHR0''@;'; put 'put ''YHo2RT0zbWhCPVB7PGVdTmp6RyRId1dPPUJVS1BHay9pQyR5LzQ2SjhffFhrWCY1UERjJm1HP3lheEQsXyR1dSUqWUljbF1oKUlpXV0mdztsRTo0P1AuQlVbXSYrT3txZU01UkZOTV5LWWlZLiU9bGtTJENVOyQuQjVdaUBGOFNoUDsmdnsuSTdZVzxNKjduciFTRCUve21zLl1pOEIzVGRoWHxD''@;'; put 'put ''PEEqJElfaSV5ISM6ayJ7bj4qJX52VzwsdzsqakJLYS4lbExyISVDOC97bUA1enBIP0ZpckV1U11zWEplbkR2dFEvSnMkYjVOc3tITV5BYzYmVnhZdEx5Q0ZEcFcvTUU3PSkxPyFadTEkSiRLPFFJXkY8Jjt5a0JgVSQiTF99aXcjKTtmPTxIUDw5NiJgTGopVz1gVHprQHxocD44RGpdZmQ8Y1Y+''@;'; put 'put ''SVUkZmwoVD42M3k+bHt7ZmElIT1CcWY4MEZSQjd2N2dZMn1PP3FJOkZGTFpOU1d5M1RCZ3w1MmpEWj1PcCkjP0ErWXxSUCU5dGVFczBUPztSN0QlQjZ+Z21vd3ppZl46KT1qJHYwWDIrNURXSElNYiRfKmB7MWl3MkhHcjY8bGg9PUhhL25Xa103MSUvbk9TQU1KS1MqN11GcV1sWFshck9RL1J1''@;'; put 'put ''NUEvXU00P2lXSElNVThdO1s0SDs9IzV8MiNkImtvUzZgWSxNLndrdjgjQWQ3eTMxQ284VHNzaGFgYVM5ZndGbSs3cGV0UEdoeGxoPT10ZWUoPGhNZiwuZUIzKkE+LkRFKDEmTGVkOmh3bEtEJV0vMGZFL3xdUiZ1XkpEeDtGQiRKPHBSV1ZMSFFqKWZXZHBYfXhRUU09JFphc35JdFZ6bj0jXXYw''@;'; put 'put ''fDJhc0MvQGUoLnR0cyEuek5sL0swKlhlRGZbZTleKmBkJUEkMjlMRWAuYW4+PjA4QGoiZUVeUEJ6MjckfWBNU2pFMm9Vbk5sR3MzOVcyOnFxWz98YGx6TlRoPDQ7YUdWcXtsc3pme3I8entKdkAhZS5uRFo9T05TaSgqZShHNDk5ZyIzTVooR0BWTnB+L2ZyOVc0WnleISJZRzkpWUY1ZDRFWUtY''@;'; put 'put ''N1ZKInNlK1F1Z1lidDNoPyR2KXZSK1g1R1UwKT5VN2JkXSg1aj47WmJ8VSNvYiQiIzM1TmJTOyR1ajIvRER8Zl5bOGN8VTI8ZVVoOnp6Kz1EJXAxPilKSFZwOnVvTTs/N2E2WSxAPnlvbmVDM10rfCh5fU0kPnFDUWRbJmA6aTJ0OTg7PUFAYSU1MVBFOml9biIwZ05sWWh1TTk7V3g7IjE6N2t+''@;'; put 'put ''aDleXyRlUSlLOjgqbCh9azBTLzxeTV4+VUlfSWwxal59L15NIUV5ckYkM04iW0QzcmFzJnk7en5kXjNkayg7ckkkaXwmdjdnbkpdZUZBNVYiSnQ6IU81RFgwNSw4e2ApaERCRUZpPmpJKERJLCswPnpOSkFxQkUuQWZLK0wqSEN9NkpXcD5hJkNbcXlaK3I+WFFYJHVLPUNtLCUwRVRWO15ESm1V''@;'; put 'put ''fUFnZEBfb3E+SEQ/W0VdakM3SDJGJS8vSiJVL21oa14/dDk8VjUqR0pqJVBRVUZzMyhASXklcVFJYG5WW1E8fUk/W1grblBadiskU2lob31HflRHVmBVY31LZX0lcmE4JjZpfjx+L299KVN+Z0AoMjxPbF4mcixEflVMaFBWZVouakExNWpuT0l4aE9ufDtSXiNfbV9OcTB0MHxyOXIyOjBzbH46''@;'; put 'put ''el5XOn5QRFNoU01bIVdLLkIuY1pha2d5ci5CQlAuLjM6I05jQF1QfFohVnVqckFnOntyfkEwWW1yXm1gRkM9TlZveCxlJWghfFEwbWlDflZoPHF2JTYrdSVteXlCckUrXzVIMnFkPyhxWFs9JFF8cSwpLCUodEAjIT9mXmYqYHs/P0ZCI198Y2tCUW5sXlQuRV1pQitqVz08T3I7e2dTXk8kbntL''@;'; put 'put ''OU1yIWBRalhbYDImWDYkTCwoaz1jKTVxWDpTZiQzRHIkPDBlSEk8PEtod1dyMXBIZkMkW1pOe0M8ek47PzRFTm4uekxLTDgwLlM+bFRdKy4zP0FoaSEzYE5qblIySkhHdG8vQjVuVmxuRCRDYSYzREM2XlouOXZMWT45Lm1LVEAsMUMobC8xamlfQCYhNVpxb2k8aXxeSzhwWFMrend2dz1UbXlz''@;'; put 'put ''dX01Wk99dVUsLiZgNnc3fkheV01tSGFwbyYwOGFuUU1jPmJJYnsmblghSnk9Vj99OWdMXy93cGtvRmFLeXFGaGpBZnVee2V0OCJCNnlGaj5saEBTdCp3TTpPT3lCIzomb01EIWNCOyYkd0kpI2Q1eCxRK0MvflVMY2NnaFMie3x3cEFiWXdtMm55eHEzXj5wZVhSYThPa3YwNHMxdG0pRSZ2QCZU''@;'; put 'put ''d11MQj4jRU5aXUVHRmFUe2R8OlU/Wm1jJWZARz98al4kb1dlKX4wPy5eY3U0XlYiQG5LNkttRDhYKHIibjdlMW1HUDczO1NfNntyPSUiW1dYOE1mZnprLit9SGN5eHtKa2oyTj4rOlJSLHw6V1AqbTRTMyRJK21lXygqNCsmelEpX2k1Q3wldmArVzJLamExaXtAT2g0MWlxYkljMzw8UVdPJHhb''@;'; put 'put ''c3kwTUZsOUViTFBELjtDLF5pTGNuSDNnKUxHXS9+YEVnbCMrNz1EMCM8S0xRJHFyISovT3h8Y0YldSZkPTE6ZDI8NnQ/fGYrdHUpQEBYTTlwZDgrUH1eY19QW01PdjdwJkZoK000eDZVL2EuV3I/P3JBJSElc04xKGA3QyE8PiVucVI0NXR9Tm9La0JTcE1AW09qK1Y6XXwmaU9eenRYJFR2fDV7''@;'; put 'put ''cHlEdnt2cGA6TCtgOyhKL2t7I3RTdnlnaHo8NlZSZSIvK0twR0FxV180L1o8L1NJYFsiLHUrMkJFL3Y4MVV1VmhuWilGNTNAYztpRFFDOTtyXWo6KE4sPmFwNUchem5WYTlKKko4OSF8YVQxTSxgQlBjPGBfdGA5ajhPelFSODM5UGo/W0tVOjU2VWphYFN9IXZwZl1zYGddeVYjdyxjeFA7Y1k0''@;'; put 'put ''aWh4fCw9aGVwLCJsSjlDOCJTOztEZCYjdUhJSzpYaXdtMl9Gb1J8P2ZNI2RDPGdtTmpuamRoIllkQDxkIlNkejIsUFNuQl1uSCQ6PHRpTDw6QnBbKCgqWj8jPGNoSEZTVShqVileXiwpQWBnW2gyOUJtSWM4ejBBdHFeNVJBQW1ARSFWejtncnxeTyMpXiIpZF5XKSElNkoyXmIkdT0vVV9VPUxm''@;'; put 'put ''LkRmMDBAKj50cWt0KzhwcnUyIyI5OztKQnAyNlpbUHUzPzdTPS5tLypsQnAyXnRPdFA0OVd5JmNYWGVYMDUvJUQ5eG07RFR6O3kkMjkpI0l6TXlbeVs1O2FOT3QqPnkxcHQyOU9sdFlmNkh5XU04LzlUbXREfiN2W0g8c2ghYnxYclIwSUchcUA9N0ZNOU1QbH40d1VDbWo+SnclcztAOCQ8VE04''@;'; put 'put ''Mm5VW2w9TF18O0B7dFRTbV5oRWxySnB3bGxRZlpPdG1HUzZgYS41eHpWRXc6aytJaClOZ0ZSMDJ9N15tXVQxdyslQEJrVyQuMWUuWCxUbTk/VUdnKl03bjFzK3NbRU9hSGNlZDU1VVpeciJuMDZAcH0uOCJAbTRMO0I8TiJVcVZfTGd6RHlXMFQqNE1yIXBPQ3smfXA5R21VY0RdNi9fYHBbZkEv''@;'; put 'put ''bTcvKH1rJkosUkljdWFKJEF0dGBbWX0wLn5oMXgwa3xrM3xONzxLX1h5SGpZM10wM0xZa3UxNUVCPFd2SGI9ZS59aVYkNFQ2W0UkekV9NFEsOElHIW5tdysyKUE0Sz52TjAwUUZSIT5fWzlOOHFLTWZCVSw3QGx2QDl0Mj1JLCYuWG1RZmZzNElNRk1UVClwSDhsbUEsKHBVSjxyL303VkplZ248''@;'; put 'put ''MUpQdX1mcXlZMFtpe08vdTVjcmtORzYsU2lQMEVnZGNzUS96dmAuKCY0LFooTiIueUUjLEE6SkpddnhUM2IxOTRyeWwhdWxSVmU0eF5SM3BsU25TX3g6RGV1YWtUMm1QSEl0c3dLOF9WQz1idV5IK34/NXhVVDZ4djVJXz5UYzV6OUcvM29ZU3plSGwpRX0/fWRSYlAzXyYsZ1I+LjFpbyxULyJs''@;'; put 'put ''LmQ9WmJ6OC5GMiM1YWtiPDpRZz5YbFl0IUI7PkkuJV86NT96Yl9ddjgpa0B8cXF8Z1hKQjwmP0ZZJnwmP3tgaVQ+Vk1jbTN3cSFuWilpS1hrR0tdXlo8OkUiMmp3WEdqdS9jJGhaMzEmVDJ+XTckTj55I30lUzFHfFhLdlEoRWJiQ2l2bytTdm8pdyNESiRlciN5fDJ4XStWUXh5Q2NZMkshQnBQ''@;'; put 'put ''RnxYNV1XakBJZzVrRVFDe15oITh2KkxHS057MmdAUnAuN1U0ekZtJDtqZUJyOyNQYzh8O0FYMGpCZFk5WSJpdUs2QnBabHxLVUYhfFsmV2FHKUBML3dqS1g6RzghXkZOS25UYDJsZXJdPWtAVDZJX3YrW3xHYGVgWkdQNVcyeU0qWGRZL3dsIzxqa3d5ZE58VmMza0BaWF87KExHT3lYMnEjKU5M''@;'; put 'put ''bU1fflsibGVCeV5qPkN4XVBaJEpxWzZuY0NjUmRRJS86Lm1HY1JDJSNHRXdNajNuViI0LjlBM0ttVF0jVl10cUxFXmRKZl0vbyZpSU8me3ZERlFbMWlYQ3V0Um9IelZsYm1WLGRYeSJhWztUIXV5Si5sMEssV2VyTk9nbXh4IUtiRSVsWUdJWz0pMzxjOjk9Tm1SIypGNktKMm0pVlE9S0tyN315''@;'; put 'put ''I2EpWCE6Lit9ZXg3LjB+OW1rUFRiLFloNyp0LFpqNlYqTTsmbkc6Ilh8alpoWjBfPnRIREpRZ29OdUlKRXs9ZlRifXEjdVp2ZyNLVUo4TmZiLFFCbGlHTk4+ez5yQigvXjkuL3NSMiFiVkBZdjRBZWBLYCpfTyQjWEAyP2FhKCRMYU5FVW40UDVNInEmI3RKPDpMNFYsXUh0aXdGelRTbWt5Pi9G''@;'; put 'put ''LlZWezQ0VDB3SlMoKVJtW0xqdTlgdntxJE11LHVZb1VMYjZ4LDBXIy8iakdxUFovU2BXaltLeTtTe21MaGRdcHwhczprYjVicE1vazAqLEEkPDF0eStQTWEia2V1NmpWS2F0aUdfaHtme1t4VigwUXREREw2WDJ8K35lQ3p2P2FFQlo1QE8sZks4SllkSTprWmNpT0JWQ3hlfjArdT1aN0tdbV1U''@;'; put 'put ''KlF1VE1xQU96JipIVl1uPGBvVV1LSlZ3dj5Rc1FQdlApMk1DSCo5JHVPLl8rY25aNVpQbksjRClEQldnWyReY1QmfDkkWUNuYyY1OVpvNUJlfUFtKjIkPEhDaSFZNXJUVyNZNXZMdXp4WWhFfmxDe2YyUHgqcm15KXJaT2tgSGVPRXtYVjJQUT1EJGJba1hKek18L3RwO3RsfT9GWjBlKUgqP1Zb''@;'; put 'put ''UF1MIkEuJVkscUtCdXYmKWtOSUV7XWtWO0NmTHFIQi5tY1JhWUVhdiNbeFdsb0JEaj0/Sl5wfHBkK055OFpGTGw/KFdQWylNPmosb0t6WWgvelRgOVFHLDgmJEMpJGkiYCZKVGssVkFFVTVqeXtCPytGKj1eYlBvOiJoXlJgOTZgVWdUYjBaak5pL2dXck4vJTdIKzZ+KTw8N2kyTjRhLl9nWCNP''@;'; put 'put ''aEVbOTA3T0pucXNWJUpzYDsjYUc5b04hTERPUCJmQ3pnQ2xdMz1GdiwkSUokKU57WSQsXildQSQmKSUpLFV7OUVzMTZQOlIhViUrJmphUDh3LG51aTA7IU80WTsjSjlNS1kwX1gmeXlhWC4yTG9OeEJkPiV8U0tTbUclX2ZvYixhakFgTiRhZ1U8IjdjOV0xVm5iJGJlI0dmJE5nbzltLHU9aiwi''@;'; put 'put ''PSh6Ukl9IWE6TmxZZkNZTEU7UzMrK11MdlUlYmpzb2hNO0lvam0pLGBucCtqL2tiXzZzTyhHTC9tY3E2TFtsWl1JLH1FKkZ3OSFORShCOjlwJHV4SkE8ZCxvYEJtOUAlfE90bWgmMH1CJVsoOSVgJFVVI2xrcnRvfi87TDBjbD42fm5qU25wc2o1X3wmQkt+OS82Q2pARDpLNmIlS1U2KXA2Yl9w''@;'; put 'put ''NmJhM1EyQ19nT3NEZXFwKDIsKGo1NmQkdHpteEtFZygjX08xbXhiaipMUV14dkAldD90VDMsQkFBQUFBODAvUlB1d1hfSVlvLDVbPXFjUWFRIiohN2BxM3NUUHJNKDdiUz9QcmwhaT8yQSE/X2x3dnt5VTlNPFEmQDI3IS5aQkVYPV1qVHMyMnpwTCFWOkJ3Jl4sRXwjdjk6YHFvKTFeQD0oRD9N''@;'; put 'put ''Y0l0dHpvUHoxLkpWVERNSDxnfEc2VG4kKXZDbUsjc1BTXmY7Wn54QiFoKl0wbyxqWGpHdHB+RDs0TWR0b3dVWTx9MzM/dnYlKygsLD5BbF1nSXRQYnBqQT9AIz93cyJPW0x2PFMsSyF8Ljl7Oko+KiZPLHRPXmtRJX05NyRmWCkuVDVmYFdKMTQ7b0pGRDhYMi5TYD9oIWp6IyZ7MWBUNG9XRzl8''@;'; put 'put ''K1I2QitHNnVQKnJmey5xTTA+Qmw4TVolJUtsNiVHRDxyRyYrNjxlbF8wd0ZEL0x3MitiLExybERtWGpzUSl8JmBjYzVRXzE3IlNSYXJ1IiZ8SV0lTHlmM1ZOT1hFNkVAUjA6W1pFTHpIITx6aCNlZX45X2I+dVUjJnJfcFlydDNPfjY8czFuPmwyND5XKERIRUBKRUJMOnFOdXgvX2VLRSl8WUNT''@;'; put 'put ''YD4wcTVBXlMxNSkoQlUrbjhCPCZ6KXJKY3ZWUTp5cmtiblY2Ymc1fFFuLDMmfXRGUU9bVHwqVV1xcDJsbVQ+MmZSOX5sSmtzaSJRQW1PPStxbU96ZlE4JnAxan1UT3lNIz8oNypHRWNbfXYjU30xJHh2NVI1dHxNPT95T1t7KUBGQCUxQXxPOSxLUDJjKn1yPiJrdnBbeT0wWXRgeitnaXFXRXFC''@;'; put 'put ''KWxlMXYifDR7VjYoZG1xfjUoYjxwJk18KyR1O1R8MTNGNFRFVGZzYEV6OlUrbClwVSMrMX1xclo9Km9gIiRbPGwyPU5oWz1Ve1kkRXcjPls5LzQvT3gifW5kKFUkbClTXip7PyhRTkdHeXZbWGkldDJBUUJuM3BSPVFeM2t9LFJqPm9ZI2FCQGc2bnBNZEtTS31PQWZ2T0FfVylgKlZoKyJsfTUm''@;'; put 'put ''UDRwb2B7VVBjJk5aSXFvYzw2elNSfHNjfUJmRiQpL2JCL09JTmAmPjphdS51NHtAJWkpQ1BSR29tY0BdaDNRalFdfSJxanVVKDdJa10vOWRfUHZLIT81LilPW1IhY2VRSzNJVH1+OU9vJCE3fmU9KnpbN1gyYiQ6MnduJiwrZj4hMGFZTjlNQ11HKjY5bi9US3RTc0ZPOCNsajdXSk95WWYhOFki''@;'; put 'put ''OnIyRHJ6fUglTkJucjFGbiRgbTh+OnliO3Q+dXMpOzM9Kn1RN0R3fH1RQUU3K0lHJGd+Qnd8aFdWU2g/WmM8b1kwL2JJe0FDPjBtT0crJSpNPjg2anomPFZuRFB0cTNkTHlpNUEjTkpaQiVONytaemdIeEZxOXooXUxvT1dDOFlNaz86O2taREdlJVdaeG8mZSZVKSV8VWJlbnM5LDM1QmR5bnBf''@;'; put 'put ''TmRzSWJzSmFiOTdgJGcjSG5ZJHc2U009a3hyOk8majRQI2tpIWgjZntdUDJPcDAkYzY3Yzc9b31FTkhFWm1hLHpTTjVAX3U4MGdPZT5KTjMvPTR2LGkjYDQ2eD54NFE5eEEyXSw2ODpZK1MjYGdSPmprVF81YWNKVX4oMHtpWEt5Ljdod1liZyg9d1M4SE9MMzA9JFhYPCp0RDZqeGBfXTxgdzJH''@;'; put 'put ''PFBtcmlSIypfJSFJPWlTVyM1YSQkSSY/KkwhWTpOOEBXLyEmOWdUSl0odUdUdEFnQ1F9PFBIN1s9UCgwVTIxKVB2ZlZGXk92Wn1RKGQhd147SDE4RDZ8X2ZgWlhnWjtNOGt6aCQuVWBTMTF4RSs4RCNxMmMlVFFhZT5LMDxacyw+T3NecVkmOi5lNXJLcjJNJC5AJU9BUlFsYnoxeT06WTtTKGpC''@;'; put 'put ''Skw1dCZiUG5KZ1BbaHM/Ong8az8wNyR7YHpdPXE2Kyg0Y3tkLl93YjttQ15oZ29beSxeJG9AaEU9MkhaNVU1bzwwUU11aStWRW5zLjxRYTNKakQ3K1JtZF5xYnQqJFE6TThrWlE9MGFmeTptcVtWTVdJX3E0MVUpVUJUJkV2cTUsaXNueDpMfFhYRnBRUzxEZDNETG05Wz8+PmB7VG0lfmpLIVAv''@;'; put 'put ''Jj1FVWhGfnQkTDFXYHF6WnRMdUR+WG9MSWVZd3drYk9xfXI0aiRCLj9rRzAhWnpXYGtHK2RleltrTGYjVjdOdTV2UGRsckF3dEY9L3RebSk+TGMjOnZLKj5MYlNUdDpAQkxPQiJOJU57Wz40K052QzBiZ0c2V3xlZzYzbj1QLmBaITc0QEE5cTlsY2tYZSleXSZWZGRKN0kzPD92PFBadV00QFBA''@;'; put 'put ''M1J3cWhPRU5za1IrKVJQK1VCYUw0fCpYMntyKj5lZTZ+cltNcl9SRXFYfXI1cnxrJkBzPiVKLEBxb3huIytgL3Z5cCs7WVF4JlcpLCVaaSRWbShObklfI3wwYCVmMGYyfUtbM3VrVGZlZ2hCdVUmPCEibShefHFjKjdIb1k3Ui57M2dgUzEsa3o5OW1bPHMrdTsjeENiaDZsR0swanZpWlcoVTBo''@;'; put 'put ''byohNkBbJjJmPX42aE9YS3J3M09xSmN+c2tmOCwpPkYlLm4+V1s9fkswfnMjNVp0cl1+aFdycns+RVZHPVQ6bUxyXW1icntgNSZ+Zj54Z281PXA9MiV4Z3ReUHA2dlV8eHtwX3o4PTtxV10+aWIoTms/SiwiTSNAMUIlInJQb0leUWtVP3N3dnhJY1MsRDBaRHVqeH5mKWoxMWZUc3duTG5VLiJv''@;'; put 'put ''enc4L1ZgNXVCPVlMVWdBSiQpbiRUPGNPU21MREQlKDJXbEFibVFEWXdIcDxQZ15EMyY0MjplKyt5ZFNibXZHd0VTJTFFUkJlKWBUM0JxIl4oI2svTDI8ejlaaUVIfE9yaS9sX3FDeTYxa0EqV0xVWSkrVXJCYjd3V2w9RkhIREx0Uj9bb01TI1BhWXFaNXJQRH5CazVOTzRSMShlNERRVEJsND9i''@;'; put 'put ''Mkc2NERIbDU2Vzx2Z3dFcHVZYy98cSxiJChtJSkwWT9rPSRRKU0ocipCM2JhY1FRcCUpd1F0SjdzY1ZCKzwxa2FdQlpbdi9iUUEzaSVyKz8yTj4pNnlDYSNYTFVWdGRjJEp8V09gTTd4d0tTeFo/RjpvQUMlRGZEcTZUL1dKU01DMitXPWg5WjU1Rkt+aFZxUDJvZzBvVkg8c3xEIVdiL3diI1d3''@;'; put 'put ''TT8xX0FDZnd2UT86JE9Db2Nka0hLQUNkaX5qPClkTHlJQDR0LihUY2t1bnRNfHYjK0l1UiFsKTtUfUR5KHFfbVVATFROS0EiTG50LiRhbEwhc0ljd0ZYTFVqejBOPis4UHBCNCFAQVkhSExWWExVWmBfXU50aU5rKXhue2VZTFMpJX1rVXVYM3BdQ2NAfFg/R0xlOnkmV29JKDMvV0xVbSIkWWFT''@;'; put 'put ''WXc4V2B2U0FCdiN5VEBtXVlrQypUWGR4akgpdnkiQW0mQyojZyJXb2hqNltAQTdjbE4/IkI8dTVsdEoiNC5GRCVtXjxpZytHR2lyQiRnMVs4TU9KL05rWis8NExQemcvVUBvRW1EZkImKExVM2JMNWdFayFWd0YqQWd3RShBN1o+NzQ0RkttUm9uemppdnUvOWMrcyF3aUs3RG0qe2RsVUFCZ3w1''@;'; put 'put ''THVHQFcqVz1vKnokMFM0RU5mRE90U29OLyNbKk47PmVafnpFMFBqNC42bX1RWXF1Mjl5NC4jMTpvWUlKWDVuOlgjWVI2VkxYIi8+VkRUaEtDZVV5QU9YQHZSTkJOJFtlTzc+Q3okNUFVK0JQQkAiYSI6bztSMEReTDBENmE5WzptO0VvWTszZ0dBY053YCQ8W1N4e1liKVFhQU5yUUNtb2RlV1sl''@;'; put 'put ''bEN0Wn4/PmtfbCZPJTlbbT1sVF5VJTFBcnV6e1l0cGlbZ2ZPO3ouVXxOK3BndW1EYlRPQmhIPUZwaT8ufD47Jn5lfXRqJjN1RCxPWFJYK0tNTkNWYU8zY2FudzA+JE0pcnRiSS9FbHdTXlhoWGNQMUZEPUxvU0FJRFgzdHV0KTBDTy8/fGozPWo9UC9JLjN3OiFsPTdbLzljUnpSOj1gMV9AWmFK''@;'; put 'put ''a35oSDZwPWQ8Wlh4MS8vIzkjQ0FfTllvaClSeWg9bXw5UiwvX01ZV3llS0FmMG98ViowenVrfDBNYkM2LHR4RlF1SENeVUZgQ2Zga2QwMFQ+c2lNc2J6bil8bXluO3R8aDNAMW48dD19fj1bX3pndGZ8WGEwLkNgVUVhdS95fH1MXmh8YWFlU2gockZhRXpEdDRhVEMmMWR6blh7WGYwcmgzeF9J''@;'; put 'put ''QFNbKj5XbyhAcnpgXUdARSw8cFFYUXw/SDMoZDFAeFpkZl1seTpsUlNkezR5dkhXQTd+bUheP3JbMW5aPyo/L29aX21YPi40WWFjaT4/aHUwVyFSaFtRTkVpW0lia0Bod2tbT1VIMiF8VXdsdV5gPVhSNW84O0I9OWd8aGguRjtaPSVVKEhiZ21PNSxDWD0lK2spWSowcHUiTlsqVGcrazBFMmc8''@;'; put 'put ''Jk4wR01mdV83RDx7M1o7LHhoOGErYHF2YUQjTlVOST52W3YpY2I7OHc/VCF4Wi8oamZtMCpHImgwRmlWbU5gcFJYRHchQFoyTD8qQmZDVlJhRmdEIWFJayZvKk9VTzF8bUtUOysiK01Ea2RbMTBnVXlRXzAwVDBzaTJMfjlkMUJ1bVZ+PjRaU2l+TTtPLHUseVZiaTM+UygpfmAjY3crQiN5UypS''@;'; put 'put ''JXlyOUFFd25yOWdIRUc9fUdValIjWTZ4USxCTWUyN3JYK0ZXOFgzVWAzLFFXREtJK3dVOnFZV0R7MEpaOXVPdWhmI0JramldMFU8WiVxMDA4V08hcnlGayI7cTooXzc1RlQzWWg+YHNRWTwlNi9wLFlORG8wYExtNTk4KlY+cmQveFAvJn16YGtLS25gQ0czUjVITlh8Vm5UfCFhSHQmfEd0JXF6''@;'; put 'put ''cDpRPntDKnhjV2N4VkJaSChtTC5ySzNGcSh9TGFWLyEzVi85OnZ1e0ZvazlMNXJ8KXFPQCgxLENEMmdvQ2dENjF0aW9DV2hNVyMrIXM+KSZpdVtpZlsjbitgKDNYYC81Mm44YWtAZ3xAVyZENEdKaFtTO3dFUiMqYHppbm9qa1kkXWdbI19pe0xLT3lZZmZJfGVHSEdSIV9NVDR3Ljh0NVJHS3dd''@;'; put 'put ''RFk9I1c2N3AjKWE2U3B0ckM2TF9Ld09pfFUmK3JWcXZUYTw/RTpja19CJXU0TWRLNU5uajx2OitpTE5TZT4wd1lBOis5SyRqdVtbLjNJSllEVENZTzp7MExuNTF7QyhgWmM1MXtDa3VhQG88QS8zWEpwXUVBR3FbKVtEO3o0KW5eXUxxZWVyfm9UTHtbdjR3LjgqQmdEK1tGcj5JSjckcHMvPyFL''@;'; put 'put ''WEAvLztCJk9KaVE3WGVvNDU1di5ASFhmWHJiS1g1IXNTaGBIMU57WWhzfi9efW9NeC9taGJObzliIXxvVDdYeT5vUDpYaW8pQ312WF18KXxYRnBkU1dLVUhnaiIldT14QFJOSTFCT25sJHpYISQyVXUiKVhGLzgzPTlMLkRXY2J2KylVXTVSR0tbZmFNOVBiUk51RWJ1dWtiKkdOP1Q9ZD5VM0pf''@;'; put 'put ''R3dtYXBQfW5EWWd7MGEuXyNyP28yZzgyKU1JaGosb0NtcCEwL08kK3QsekdOUzApVyRxcjNONFEuRCpncml+TGZmdEYlek0/THtqWjgrd0V0cmdgWlVDXlVhXXdWKltyKlpWPSRNU2IoQlkybU9HWmpkPE1oWSt3RzpNTV9gQ041X2VmZDFUdispJEcxLilVV1VRWmsyTFBNUCZHW1k7WztHYSs6''@;'; put 'put ''NFIvc2lrdzJQZk46NEN0LnxHVXEqMGEuXyNMVzttMkk0KCx8MUUkbWRAJVNNOmEqdHYjaUxdfj9YPEcqbllVSk8mJTFpP3dGRGFQaEw1UjJiO0NfLGJPL0ZEcXlGRHpdbnJhPCI5OE5fd1thPVNzTE1wYV03LzVEdzRJVzxMP1tTVFVzfjxALClAQ19SWFo/YUdRfD9qJFo8LFNyTkJaPSo/MSR3''@;'; put 'put ''cmheVjtJYikiZWhbTnhJRCt3Q2ZdKGlZOUomKFN5KG1jVEJQPDljckpFcyRiLnNNLHxNOzo7YmUsU0V1WXQ1LmA9TFBwInw2fFhDXXkiOm9eOTpsUkZtbTdKdyNzZWVdTnV2SkVQSWlnciold3A8dmZpdThhLjlCTUdUPEJpLiw9KG1vaVAwZGNheD8uNWRQV3hKdSpoWkk0cGkwQSkoenx7Wl9W''@;'; put 'put ''cSNlNFhSLkJ3YXJ1WEEzfldIZStSXjRAK3RKK245UkRpPS4zd3x2Y3hrO0RtWXQ2SUtybnxSTHohdnRkZ213fTNGbV99SUw5KFtoMVFgOjx3NHs6cmVhYD5iT2l8OFdtKk8vczx+ZT1yYl5BXmQuWio5M0NmQ2x6ZDBnJDpEOnQqfHlGWDhjNzE9OHREP0ZxWyxXKnhOZzBXLkxUfTVDRGdHNjsw''@;'; put 'put ''QWYjUHxoOls7dVlwSGZmakU6WG0uKUM8dU57Zil2RCthaSVVMElyK0FufldpSSIpfjdzXX4/VTB6Uk0pQVd4cGdFcSVqd3s6fCEmT0hCeVBqP2l1bjRXNTBXYmlqOT5yakpmT3lQd2k+eEJ2UlRMaWxvIVExeFEwRjZWIVQlVSVzUUhRYEdWIzR9L0IkKTBNUzYpKyxacCNQYW5ZXUh8NzVKWntP''@;'; put 'put ''PUF5O0A6MX1xSjJ3SS9UTSxDIy5CRH0zJjFBOyNQVyVsOHA4Xj0qIypEdzxvKj0kOmk/TUFBXmVWQU0vSnMkPipXZW88S0p0blRHcV5PdU0qXVdoTDdGMHUxUWwsRS4kaWlSNVFpLGFNImtePW50ek4jJVM2QUY3WDp6X0FtVThTSmZLU0d2OGpId3d3e0pidmdDdTF4MXgxRTxRdipuTk95REx4''@;'; put 'put ''K0IjMG1WcHh2dStCQkt8Q1YydFJOSE0iK0B0NH5sKytVaktGcTl0anRrX1YyN2t3ZzV9SFdPIkFUNSJrQmw1MWQ0IjVKLlI5PWJ5cTVwKTJLQ2MsK1ddbyt5Liw0X1ZFLHh9dHVTdkwpMTFkSmp6WFtgaFNAaFU/RTpXeVpiO3NwYDQzWypWaSRrRFhebz10UG5GSk5YPUxhN3Z1K1h6KmpYeVAq''@;'; put 'put ''ZW82RUB9RTpeZkUiZSUuRCwmTEZBe3Y1PzooMzpRPEZmOjF4N1NHQmUvRXI+fSlSLGZSLFUldkpTSmYuPEplOTNPVFVmKkZpYSYzM1JqYkBiUGdHclRUZXtHOVd8NGVjSVtdNHJhaClseV5QeWppVU9eUktSeTw6RmIuRTE3K09rLiJ6QiVjUj8oNUckdywoNWk1e1B8O3peYTR0YG4zbUxeP2FN''@;'; put 'put ''Kjs+WktiUDhObHpTdTJjels+XnFmOEdMYD4zY3hDeloiJUsuPUxYQ09wRTkkUG5ERlQwIXw6SCQ0R1U4ZCl9cVc/OkR8LzJoMyZ0OHRkVSlhJCtDMktWbmhzeX5yYWREI0ZjLyt9RGtUa0orVl06QjRrPWU0MHpQY2MxTUllMXQoOyRwdWUsRGdQWWN6QEBoVTVlekxFTU53dFQoR0hRfSszcVEz''@;'; put 'put ''ZCFCXUlqZ3d8TnsmR2w2RUB+Ry5vfGRuTDU6cXFIflQoQlI4XlZqOSteaSpXOlo5dSV0eiNNZ0FoJXpfTm4uQUxLbEpCPWkpciF7Nm0jeyMjKkkhWD9pSWZqQmJGMVZUNm87UXNKMnR4ajdydSkxLkY0WV1pTX54Z2VrbTtPYzIkVUdZRCZ1SSolL04yXk9jW2glSmdnV1UrVVdzLy5XWCFvQkxd''@;'; put 'put ''UG5ZVEEmXmokKm4vUXIjeEJzSWNudEFvMT4+JFRgelF5bU83PV8haXxPek8zSFgmS09xT0l0L0RGS1dTP0x4emtabE1iLDlpTlJJPCk7d1A8WlskKSFAcFBuNioiJWZdRCp4fTBgP0soJlp+VmRfb0R5SUtbK15sJSQxLjczNzxGJnRtaSxxaEd8NXQ8NzVDR3dvcH5sOGpATWloUjAqPUhDUiVz''@;'; put 'put ''SkNaXVZ3P1d8ZCxGPjVyQ1ZRaDR0TShUKnomUmBkOFg9UHN9M1gyN1cvbitdOFZJLyY/SDY2WkZyKzxqRyszJHtrOVskLE1SJT1LVWRyOSQ7dT5YJiRMMTBsSWF0anhZdTMzK3BULFRxaHdzSnUrMUg7SyUiYyJWXk8iflFFMkFeekJnL2Rjdk8jTDNnNC9kTHFZTm1mNSolJSt+WCZARVJ5I0JK''@;'; put 'put ''W3ZnUz55Ilh4OFlLajdPMSpueEI9TCJ2cUpdST40Tzp3ZzB3OFNHJHo5aS8rNE1HQWxCNlRSaXRVLCl4NCFSZ30vWDs0ZF9iXjZOYmZyUThCcnNpSGVGXTVLdXhHel5vPHcydGQwdWV0cHs0KDhCcik3XmkibixUUTdQIUFrZXtCVC9YKXgsQzlJYm94eGF0JltnUGlhcTVwVlUrSyt1Y0glfHIj''@;'; put 'put ''Rj58Xi5Gaj8oTz1TJSI/Q28oYnVwUmtDNE5FOl52VHZSV3RSMCV2QzVxITU0O15SQFhOXUN2cWRVYmF3fCRJOVpDZTlGVyxkZnhydzBQIUF1Kndfel1vKDRpR11oIVY7O0RLOTR8SGpPfjtEM05GIjNPUDYhYnUsOkFUcGhDZjdhdiJ+bCRZSStYQFJwMWBnLEckU0I4QEluQXdBTkNUQlpyYU0u''@;'; put 'put ''RSlLMGtdUTR0cFIzPiZmR0VsJUR6UkgjYkk4QFdwIUt8aiZrdllCWzFwMGZkandgTWxAWldTTDAhR05TTk4hdUxtRGopbDUwI3dpQzE4X3F7NHRZdSUvbmxwdD5sWkh3NHVwL00ueT1FW31vUDpsd0tyfEZPJH0laDw7UDBDajJDMixYclhPUzZ6SUVbYjhqJGw0Pjg6Z2x1PXtbemRtITIqcUt8''@;'; put 'put ''ZFthcD17W2ZadUw1dklFM2w+TUNCJjh4YjFOY2ppTT42dEZaRW5ufU1JbihzfmU4WnsjQSFlVDJWXzR7PVRmPmYxbSl7UlozSTlJPjQpazVTRjA4dFBxcEhhXjN0Y2olOGosb1BzRyIhYWkkVnBIWz1KYGVMbDNeK2BKZz5PPTgiSDE7U2BmcTlSIzZFO3JaclReaWhpNSIyJSNhOl5hYVdgYj5V''@;'; put 'put ''Qyk3VisxRzJxUEB4N2BXSlN9IWN7b3ZqU1RDSUJNRVllMHh8WmJgP2tEVDpHWHdPQmE6UDorbiNEN0k2L14oZjBqO3xRYXI0QXdVelljR15UY0ose0c7S0BKQ2V7PUJve2xhcl9wQnxsWG8+VHNxKHw3ZlZKe3QkJFkqY3I9SV18WXFbSl96ITUzb3x4KUdlN09QTWFgQUVbWlZ3ZnRNW0smWSZu''@;'; put 'put ''SCZSe2kqSz5YfGxfdUllTDgoRz5bO3JCel8wUyx6YypmbmBJYmg1fEspdX0wK3I+aDMyZ3tOayJQImxROEx2JWtla2l8T3heNG5VcShxS0IvZzoxYz5JPHlpIk05NjgufCFVK1dKVCRSS1RPLFVtdTRvNkRJKmxNOkBRVUVGQit1LzdmVTh5XmFWRlhHYXVkIylVZytKayVGL0dmKz1CSE00NjNw''@;'; put 'put ''W3R1S31MQj0/Uy4+Xyg3Sj1pYjtiRCl7dEBMZyhwSGZQaHU4RDd7KSs4Nk0vOltXVnRKRGlBMUlkN2BKW0FAUFN5fkZFcyswcD06RiheZnp1VW97X1d7L0BNQURKZGVKQHBqNyF3P1loSVp4Nkk2bkt4XjFGdVgma0k4QFZ3I2JjIWJib3taPjxoR3JnRSolUSthK3hyb3NUYl0sT15WK2ErSigm''@;'; put 'put ''PGRmR1V1QlVHQG9RRj59SmsrXj54QSVSekBPYywkTD5uaF95VWNIYWFNaUI4Snh0JUVPSHdYREM4XyFOcWF1SDZ3WiNYRlBNZVhlLjNqbEBGb1s4JCwwSUdbKiQqLHdCJDpjMn1Qant6fWgpRTg/WSF0Y3wmN2EpSj99ZDQ2KF5oeFBNZyg5M2M0NHY4OFRDOFdFeCM0SFh7ZDw/V1RiUHIhSSQp''@;'; put 'put ''PWdBYF5Pc3N9R3xNMDh5VjY/Tl55Q2VuJGZRYnZARGMpYUdwbGJxdFI4Rmp5JT1oYnU3TzckIVA/MG5DKXthNVsqW08vdyJTXyFgZ1orfEV9NVpvKHBEUUoxMztSJXw0LlM9Z0JeZE4+RD1yN2FlZjo5N3pOMC9GcThTMWRNVVdmYD1OOEB5M0RDRHdwa14oVm5vTiQuNkRkOHRJQ21LcXJXRFht''@;'; put 'put ''MktDQz1HOFBfVkVRe3QiVilfMmp6WSlSXXxYL2dyY1o3eUJxdlB4I0YkWCJTYGRqOTFHXnh7XVY4ZW1NeU1YfmQ1I3BuSyFAVCVweil1TWY1QSRKLCgzQCQrbiV5a3l2XihWYWBbe0gheT9TdlhdP1I+WSZZYTArOnFlTGt+UGcqWk9AR3pPZyo8ZjdsP084On5iR0NWZCt4QCo0K3Y1MFVaJFkk''@;'; put 'put ''WSQidSs9c15YV1A2YztBZiNPWGdKM1VNQ0J1LzZia3hsaV1IUmZsUktrbCRoPG1mVF0jby5mYyxnZTtMamE5eG0yJD9CMzxnWUl1TGpheEYsP2IxL1MjKUFmNV9+ZTQvY0Q9ckE8bl4uZTpTfmw1YWY8ey48K0RURT5eaGR5KURrV3w9JGIqcEh1R0VWekV2WCZpVlNEVUdLK3xYR3AoTHI7QE95''@;'; put 'put ''OFg9azhfR1I3YEptZltlWSI2Jk8peXNMPjUoNmI6L2JKQzcmSUFqLGFeUDpPXUJTcmZoe1pWXWsjWyJ+YnFtSEpvOWJUVm4+ISNKLiF+bFIkLGhGfXFOUGFUWmNeeVN+YD9gPCt4OGY0biZPOkEhamhJakBZVVAwcyorZCFqa1AsLlJ8UjlZTERtYH1QfC5hVGRrQTxKTjBzYXZ4ODN2JCVrekg8''@;'; put 'put ''fVZFZ0Q8ZlFXKXNeeCJ8NFMlcDxgVzh8fDluT29IMlAiVyNePCE7KEJudVkkQHBDKlNhajxiWnUmNDs1WV9MQmZFJHM9cTc6cloyJls7QlgkQGJpfEtVdjxyRE1dR3U4TGpPImxAWjJNUCY1WTJHQiVwOCFjJiJZPTpnT2RNTzBHNilWQzklY1RIaVpxSktoRGpATSREQjolY1RIQ1pmYVJjdGMm''@;'; put 'put ''MkgsQXBvSEBNYWQ0MFNhSWR+WSZ1PG5WZCEwIWtpZyR8ImNqdmk3LExTcH5jQ3BSUXlZaC89dnI3OnpJNk0xO1Bpb35RezB7Y3QsJU8iL11aQ31eZFs1KWdYMDZPTnh1Jl9TbVpiNSh5OzU6ellZIlFJT2VdfDViWX5Zb1NsOUFySU8pd1h3NGU0TmtEZzJbWkNwc3piVlNkWEQzJUFdR05GeHY0''@;'; put 'put ''PWxNeVBEPD9DeV9TQlkraSpae3FqOVdKSFo2TF1vSWd0UyNQOUg+YUhlREZKWlQlfTx8ZUVxPjBmUCtXSStvTmxaY25BV2xOM0MjcSZkcSVXRSNMZCNFMDEvImg1WmRxdTUyLyJoIitTInVzek4xWn10eU4odDMlWDJ8TDxETGg8RGIsOCNZczJ4XkJBWm91TVUzUjlIKkZONGt3eUBfb3RJYnBW''@;'; put 'put ''RjFsOCw0YD9wdWViPy96TH5eZCtZdyM8aDUic15FYW97WGNIRzBZaSM2aFNhKUp0UHtoWXZlVmpFSTpnWV00Ynp1JEVeJWt8bUc8QjE6ZU8rZlJEPiwvdXtnU25FUWhhYDxFdTl8OUU6O09HX0FwQEVZUDVfSmhyN34pJWM2WVphUmFFOnNpRWVGIz0oYjk9Kl53ZldhLiQ4PENFOHVsKER0S3xS''@;'; put 'put ''SF5VOC5PMF4ldk1hZzttTSROT01FRCgxPSpXdSEqSzY0NF5WcDtUZmtORDpKNDcrcDdyOzRdIngoaihZZGtEbVFGTzhuMyI5WEpBSGdpdzApe35WO1A8RHNZR1RrRTsmaCQmPnRZS3JIYF5OLEs6VyNvcVg7Yn1meVZ9REREV0EySDM9aTVzfVFDNnQodVBUIVg+L2B4aGlZUDJEejRHPVZuLl0h''@;'; put 'put ''Q1NjXzAuZnBCTjxPa0ZSeDdHKl5hVip9PEdCU015Rjk6SUJTd0chLmcrMXc8dDBWYjROcXNWNXReKlhdVFcpJjxMZmR5Tyw2XiYqQkAjL0NrL1pRYGIyInVyMz1rKjMrdTZdYU5qKUswQzo9M15qclpNLj1rdGUkamVaQCFRWEFUTVltOE9sJmMiL3Y/O3owPz9rY2lUbjU5RURAaXJhTmFUUTNn''@;'; put 'put ''K1Nral1bKllpLCE1NWwpPFRURXMueEJrQT93anlmQE5KLEojWWwjPWJ7Nk0jVjJOWCYmX1QlY2hXe2cqM0kzcEU5bFYhX0NCdSN4aDlyJTJnTD5TLExSXWJpTyE5OnMuSWE5bVRaUS5nSDExZ0dSYkVpYmwkYlJ3YFp7SGBQYWJtTD1tL0dtLElmSjJELGRUWHVMNyVLQ0pfQyZNWCxAKU11Xm9C''@;'; put 'put ''UyQ6WjV+KXM0KWtCXzQvQ1VfaXMhKSx9UkNYMk4zaU4vazlIJS5xT3FgOXR8VStJODBtYjN5SiwpcyloPUouJSFQSlQrTVpOcD5McTFqc0RNeHYwLGNkc2NVeGd8IVJRIyQwKCkqaTIzPkVwXVlYY1RTZWd1PHYxSzpuKSlFcmNyeiIibjAxIWooTl97cGBiT1lPe0VfeG5ZQjBZZldndF1EYWR1''@;'; put 'put ''ak9QZllhVHt2SiNYL208RTg3PShtNGw3eCYqIUJXSm58JmMrTjlge0FJcW84c3JiKDF9KSN1ajMxUVIlanxsZ3ZZI3JpWW9QS3w4TGxEQXgyZixOJDQqTCMqZU5xOERzQW1nYilCKClCSEh8ZmZ5bWVhbFpOUnhwMkJHeVVdakdBYGkmQEt1SkA6fmdsdGZzWmVHSSxMMCY7ZSVYQChAIjZTNWln''@;'; put 'put ''fWtJfHRGeW5uPXh0U1UlaD9YOSI1NlZwVDpAOkBabXM4XTl1Ris1JilqRz1LKzMySUpLUS5DeiJMMz1TKDx6bj09TERoITR1aUJre2gjaXxePXZtL1VLSjJdTiQyVmh2TCk6cGRPSmhbelNJN2cwZTp6QmUqdEpebCwrOi59VmNWZ3kxbHZPZjpqVWUxZjtjdCtvNlF2MiMqV15IVT8vciFTTEta''@;'; put 'put ''I3F7W2pgPC8uOksoRy46bltzUzhQO3JRNkQzcil9RmNpZnQsN0t6N3JPIypyNVVBSWMzSXhpelhZJSg1X2IpQ0kuOm4ydFZ+KDwyJWE8Okc3VXNnK2M9Q1dXMVc5S2JYQFNTfEMjOEJuYVhfcSMofi82bFBnPFhvNz0rQyo5UWBeQWFvVSpbfFpWJnorTHBRaTFMakFXcXlhWi9KWVJpZXM4VmtH''@;'; put 'put ''ZCNGUmBMVXNePS9UJV8/JF48ISpLW1Y8Lkx2TSxWOlh2P0g1eF8wXSxoQFRPXmc6VnxZcHZ6XiZgZm1gMURrcm9bcyspXUxPXlshYzE0R1JWfGU4dzNWW1V2OEsrY1U3ZXkhTiFOZWZQZDcmZ3x1QmU2Jip4ZXJqYW1qdW5PeFhIWjVQVmVJJVBjZT96ditrQHl6U2lLenJ5PkxVK0hEZCNdZDhN''@;'; put 'put ''WjxOJSl3ZUBXSWpbVnI2KDl2ZkY3K25VPFdQdj9ITkdROFdlWypLVShnX0IzJUdORnhHRGYqQ1RtJU8uYHE3YX5vJnh+VG0lbHY+aGtOLDd5V3A4TXlGJUZ0VkV+b2l4P0lYX2F8W29HRk1YNTN7JnMvQkFbQmxqZlBCPyJZNFBjIjFPVVVOTihrSTk0NXpCeFksQXBGeFZmLlU9eVR+eEYiWVZ9''@;'; put 'put ''Tyt3RiZxT09CdVdnb0MzKzBLeSE3KXY4VVFLTi8pLn5ZTlMrMHo1XXlmIzZtJiphQUUiUT5Ba2N1cEtifjF4MStGMj13bGc4els1T25UbntHRjgxQ05HZ2NBW1Y7X1RWbHxoaC9LOChBSUF2V1hMRktDKXV2Y3QseHNxemFHZlBsUCEmMXBoaFp9UCg7PndLaHpHUEglRWFHe0p4NVVBPjtkfmNR''@;'; put 'put ''MDdHdFQ0Zk8zcUtxOCpGNFchWHo+d14lKHQ3R2VxIjtiZD1EbDxwKj55fGguSEgjaWFsOSVpczYxWmNobk9xWHYlbVlIQDlIbDVfQj5rNCZ1Y2xQOTMwfHE6L291PUl3NkxHUVg3QGJJYDlsdWtVa0ZSbWBNKT8lZ1JHYHNDUFVLYj8xTV8uLCQ6TSheOWliQmRuWXVTaTlySFAlV2tEakczNGIz''@;'; put 'put ''PjhEVE1iSzRUciltI3dnc297dWBmZSo/KlkvXWVoPCM/MkYpW3A+RmEoQzZyYiJUbURGcWU4KDNoJUB0Smc1RiFYeD5dVmMuMj1AUyFnVEZBVHs8NEswXnhrXjFQKjVBIzJlRGE7ZXosNThnODRrd3JRXT1XVW53OnZjXm81aSkqQzhhRXRxP0ZXdkAjPURVP0ZpZE0yaHs3eFJIJTsmbXhaR3Eq''@;'; put 'put ''e1A/d2xnPERdRGQsMnY4L1piYU8+dVkwMmVRTWh2LkJNTi5CdUhoWWVPZzVZMGExXXRTNVkhSkgpRUN6PnV4QXtrNU8kKUU5MHpKdmJPdTI1IXp2S1ljYnAqKTp+OXEqTCoxUHBCaSFXSyopM3AuSH0vIjQ1KD98T2ZbWlphQE5kbnpjOGtXUjpoMjM/aEwxe1AoVWhNMVdrbnFxVUtvR1c5Ykhh''@;'; put 'put ''JmpEWHZAeXFPcyxidzVENzMlWSJvKlpEKG1oYmgyUmpgKGRucnRNI3hTT25mKzp8NjFQNWR8dXMjLEhRNT4/SCokWltYMzFtYFlhOUg0WytgajpbQ1B7cWtvUTduUmVYaEp9aSY+bnQ9fjRsampYfU12dzl8QE84a2BqL0Q8ZEFkJCwiX2hRalc0dysyeHAsVF9jWSJtTUlqdmkod2dWdysoPEc4''@;'; put 'put ''cntFUTRAO2VHW0tQVSYjLEdmYllDck1vNEBmTn4mbzJ3LiImLEJeTkFDLGVIWFtjYTtJYX09aXQsOlUyTXk/WXJ5SWRHSTgzMGhfNnNnKnhVcnJORVRbIz1DdGM6RmZYdEt0P2p1bmBJPEZ3RnJaa0ksPlB8UG1TUlZ2UEJKWVVFIy89L25fS1U7WW1BITJoQFlDMDAiTXkvSmxiT2hILjRwTHVt''@;'; put 'put ''IztbcDl+SldONmExOmY3I3hKNE1SY11dJk9bJTJ2TCx0PX0qUGVZKntTSyhpa1N0e083IXszVHthayYxZDdrVWUvSk1LLHwoVzNUYm0kLltPTkVCYiI0Jm98RSNfTVRsMm1ML0pHJXZSK1A5UU8vUlt0LGouMHtKWmc3PW80OEleQEhTNnMsU3ZjZXZaT0AuSjpeRjV0Tmd4O2R2ZyZJcTBiRisq''@;'; put 'put ''aCksWl1sMnRbX3V2JHdzRGYwWCM4V09RJD5OaEJJZ2tDeCtJSDZJOUsrQGcjOyFyYUw2JHkyV31RQGRzOEFHKk1QZyFnIW1UTE41Tl41O09FTlpDMFQsS0NPP0EjWlEmQCE2PWZmVG5ISDMpQHRhcDcmSX5OUFRfZCExTS5vMXVlWVsmRW0kRTdHJS9nKkk0aix7cVQrRFh9L2MmdlV7WSk8bEVY''@;'; put 'put ''alQ+YEpxKT1fbUN1SElIS2RIZWllejkifT5WWF9qWTtZXmVjQCRJSW49VkBObCNPVzZhX0MmOWJEcExod3tyR2VTNihuMEQyZ1h4dFBuKlBMVCheZEBRIy8pJHVAbV9NMEwxYzlYRixyWmQsMHgjRERCRDoyckYmb3I0Oi9idmJRSHcmcSE/enEmMGI1KFpOPHV0KiMxWGdpfEMpam43eWo/Xytr''@;'; put 'put ''QmgsVyRlRDVsZHA/NUtQLHdgXWlZZG93ekJ0dVtMU3VCeCEhX0siNzdPeXE2fVssRHc9RzlQT1FqTjsrKCk9UGlgKkVtIzNmTWQpKnNjY2RyeSVfdnErI1M2dSlYTnghSSwrcnZuUzY5T0d0M11TeT99cTdQR2IpMmlzY2Z3NFUjclpGLEI4W1kqdGw3ZT1XJHJ7TzJvanZtSyFedy4hM3pYall1''@;'; put 'put ''Rk4qTjdyeUNbXXJ8NGdWYyFeVUJwVldfPVduVTc9X1RXVkNFbFFwRC5JTGI2VHtMPDg7eCtqU0BRQWdEVGhSeEllZk5sOVpWe0tib3dDbHBiT2FjeCtmNHJ8dmZrOEBASjNnY3s6eXlicFtpWyVbJVtFOjo2bkJJbElmbkpkSFhQYmB3Z0xkVWhEZEpReXk9MzlARzNqQVReTE0/b0IqQkcoOkEk''@;'; put 'put ''dnYrKT1QQlRPKX17Yk9RL2VmdVpHd1NPeVBpSWdqcH01VS9GciYzaU17QiU4TiF1Vi9+Jjc6dn19b2loZkdTVnhiKl5GRHJaLygkaXcjOUkrRTw9ckdOUyF1dDVYMVN5bHNNMCFHTlNTeXxlMThDIUtXQ1B1UHZ9dj8zJUtedm51SGFJYHd8ZVltcmFzXnpbOndkPHAqWkNzZTNMW15yInRaRS9P''@;'; put 'put ''VEdqVCg4UUNee3kkTHkuIXU2UUAmQUNiakNWWWFBLEw8cWc1ZXRfdTZQZT4pMilZRmlxfSFGWz52eGlza3ZgQnhwXm1fUy5ycTsiUGJNLyNuKCYqU3c1ZTgkd1A8bn4mRjtpPlssSi9QLC5BZEB+dXA4UVJkTDRXLm0vSltQS0l1VVQqeH5xNTs6RjEuIiYiJkt7UVp1b3N3QX0uUSR9ZnJzPSN8''@;'; put 'put ''Jn1sbn1Ta2pZQ1c9dFt0U00zPTh4JHNRVEV7bDYoMjVQT1YyY1hOM3guPHk8Om4jYGw1V2oxYlYuejU2W1pFZDxbKltkY3VjcVg5M1p0aSkoS2tYSWJhWXJWZEgsNWQ/XlFTOXRUUUJQMz1TSDF6TF4yRzpuP3NbcDpwRUppRWZ8cFd5N2g8YypmdG8/YCpkN0pzWiw6b2t7KD8qbjZNSVF4VWFD''@;'; put 'put ''KC5DUzx3Z05TO0w8ZThJMWxiPTt2a0RoTHxONWltYEpLWkc4U2FkdiJZN1suYFIiV2J+U1B3Kls9KF8yaUk1W2VNc2tUPUZuVnZGUDcmNUd2UkxaTlh+Z1dZfio1ezA5Tyg7cDY8JU1uS3BzVFBIbyU+UVchTC5QIUJCSXV0UEdaXXlJe3IhY0xITmRkQHVbME44WHgiUSNTX0QlQnUlXzBBKmgq''@;'; put 'put ''aE06MjcsOFA0OF88e3IwfU14fEgrMFNmfFEsS2c/bTg0Xi82U3BEe24zOlloVyNRQjEmWzYkaTYoYGw6MyU+MWpsTTIva0s5eixBQm13KW5tcEk7eSR8dk9SIVkzbnU4Mz1qSCpFa1kyQUZxQCssOW0kXTYjU1E1bWhESFp6MHpzLD5TazR7UTc7Vi57P2tafldFNCZoTD0jJlZRMF55a0k9Jn5s''@;'; put 'put ''OjJVISY7V11zWT1GPiJKMXA3KSRJbCltOTRPWSp3ZyFDM15bUn5Td2BsPVlFOHJnc3YrdSN6bns/WlJrcUZmJHJnc05oTGBkPUh1a3cocHl6cVM2WCJmeDhmSHtka0hWPEQ2ZzJBKl1fR1JZNzpTRXo9K0FsSU9+cWhNTzgkdUo3ZGV7PEVIKSRSfHIvIjhyLCFIckkpZ1A4Zlg8LHRFXlM2WGp5''@;'; put 'put ''dFp5WVkjTjM3eUdKe01FWWlHUS9NUzNHd21sKXM4WyxtL1BrWnZ3Onw5UFp0UCZ2UGw8OkhSYisla01GZUMiaS9ATXR5YnMzaU1MKnJ+eU1BSEFCN1soLlB2ZT18e2gxcDJEbUdqP3czdUtjUy9nX3smOmgrPG1gWSIxNUl+Q2FHR1UyWFFdRWZqUitLUjtAIihrQGVGMl5WNSlrPUAxSWlNNndH''@;'; put 'put ''VHwmNG56eWcvY2tMRXZMPTA0cCtnJUhXRlJ0MztyQGVGKGsuJmpNZDMrIyJ1bVJEL2RFaV5kY3Q2aD5sdHdvUUtYXitXRCZiI1EucnFUMC5UfTVrYHByREVEUEI2fkBrNGo3WWo8eTB1Nk9TbzdsJGZGLCIkSWVha0txOTAjP1lFW2dvKWFYRk5VJXh6PHg5IXh6JixlZn1ufmhYMUw0ITJnd2tj''@;'; put 'put ''e29DV1NCbmM3fmErS257SW9NS3pwPjpoNSlRQHg3NWl7P1t6MVpuKTBpRGxdY2w6Qj1jJndjV2ojU351JVRRQk9LTjNHcGRFI3E5aXAxRnA0PTMsV1BrbztvazIzelo+ckY0Oy9eSU9tK0c1QklYYiEhaW9FUGRkTDRUYEpbQy88TiojImxdMFE4ekhDSSUhZyhuP284U0ZyLF81SyU+YDhYYVg2''@;'; put 'put ''ZU86UyQvRnxjT2hOUyx2S1lmPkBRKF1TK3gsO0dTUFlRTkdSUH18ZyZ2MXVHdyI4UDEoOmhROEpyOThZdDk4VV1nKGNua25LOXQpVGhwN3dkYlNBQ3tpL0BqWiZANm8rdVBUQTFaUjcpVEVrTXsiJWM/LGV9VnldZUFfWCkhdT5VKyFBQmpaPSNOM0M9MVtQTWFrJkNUTnkjNUM1bWg9QHU6eD9A''@;'; put 'put ''IUlkcFBlMS5razQkTTM7aSJTJGxXR2JRaF12WnAqci9lWW1De1BPSzF4fjA9KFVQWHhzbSNPaXxbQSElYzc9bzkkajRzUll0MGZJK3gyUnYxKVBCOkchOHR8LkdOQ3NlTWk6JUlpUFNPQGFGaEVbZW1YYWJ2UjRkTWlhUjExL00iejU4MC94dTJ4RCZwOkgpMURHJT0/PyRlPGwuIyouSXUrdCx6''@;'; put 'put ''QF5JTnEyUUlgKmw2MmVqI0tTS2IpQ2twUmpadzg/fC8rYTB6TmwyRDA+aE0ucVg/cnZFeU5tOmNBRFh6e3JkT0NvKzdlXmBlPmA5OSFfaWBtNzY7SV9rd1dqS3t1bWBzRk5URGRIQiV1SWZPSk15RV4lUnc5USpiRT90Y1ZgIyl9SGo3Ojszc15GWmRMelJKTCxybEIjcXw8KTM3b1FgKDd5YDUk''@;'; put 'put ''QkQpMXF1WXdiNWdWXXg3ZG1xQXIuMk5gQnVHTXR7WEhUNTJxV2h7WWIxc3BvZTRhJTl4fWMmV2h9cUNaTk8oRm0pVjM+b2BgeGJKQSQkJFFaQk5gM1s9W0hLMihMdHNTQ3tKaERqOmVNbUJ0OkxSUFhibVV9cXd2PGJLTUg3LndDWCNZS3RRIUgwOnlpUlVxVTNmb3d1JThsKjd4I1cjWSNAT0N6''@;'; put 'put ''PypGM3tOb0crNTkjbj1KfWc9di9kSCs1OV99VDM1eDtpS0NScGBgRXlXdiVbSEtDKWw0Zk1qdE8iJGcsRCx0VXwubylzPG8zOStbJWN4QjhCJmtteWxoSGE9VXcrb35qbmFZQ2x3RlhqW1VMKkBWc2gjYjUscm9lUnVHIltEbE49e0ZJdSRvLFo1OGV6cX5RQ2p3JXdsZ1QlXylOZF9UMDpGWz9X''@;'; put 'put ''XWN2WiZ4SCRAdnZ2d3UkVWo2d1NCNzluUHkhdGYmdHNqSFs+ckZoXlNsUi5sV11QRzlrY19oVD40THhYMzZLLGkydkRqV0wydSYjQC9pI0AibU55a1FePFlLMU9FXjY5UCssPDg8XjtLN0AlOHxIKEYmI184byxANy4jNkpqWzgkOUpQKkpKOGw4YWBDNy5vSTNtXjRDeGZdZT88L2Z0XlYmNDg3''@;'; put 'put ''Q3F9VS9PbzJLTThIMiQzKEptUDklM3N6bWA2KGFYK3MyLkVhV2lxNmVZWnxTdk9Sfjt3WzxfZ2tDYz57PVc0TE1QLzc+Yl9EV2A9MDB0eXp+Vn14cE85cSkxcik8NiNvbXptKU5NOE1UTn5FYFBuYmUsXVlzTzc/S1o5V0VFaE05JXRQYU8vRT52I116YHQocCsjX0Y9aHBwR11JQ2RCYm8oJkp7''@;'; put 'put ''MUBQPD9LclFNfm5iYiFRVVJoLmhuXXN9ZjxOKDRlUjY1W0VdbSpdYGg0aDhpJWVVb28kQiFLYDwlSEtCZGY8KDtyImc+WE5rRCYvPGArKiwkdFhYYWJjWjE2T0JpYFVdJkJ8JTEoYlBje3E0a0w+fHc7WEZtbk0wdTFZQkMqMFApOGlPc2MwW1UkXVFScTZ6MkY9aCllZH5OOVVMPDBEbG1MUnR2''@;'; put 'put ''O2o+ZGdYJDEqZ3gsY0loQ3tBVDEqTEs8dFh4MStzUnA4bmomaS9OKSp2NjkrVHtgJno5UDt5IlQuWG10bVArTkBOMDlmX2xdKyh6XTc9YTBTU0kwWjZuW25TKm9RW256YU9JYGExak0lb0AvNyM2bW9iV0U3MmtWSW4sUUI8d0hza107X1lRQnwoTUs6PjwzOE0ofkZDN0hpYXJbdTNSUWw0MHxO''@;'; put 'put ''cztrdXJNSWpyJEVnY05VNjJJLlU6USlwLl5jRkxwM2M4KDEwIXx1X358VlFNOHVhZVc3QihbSz89Ol95TktCeU0pKyo5bk13WzJpKyEqOW44cypgSG1iZ2VCUVJJYVVCVFZlOEQ+QW1IVytAdUxEPXNXM1Q1bFE4PmkvQ1deQXh7OCNlYDJbeUJJKyE2dFZrKXBVYGFLWGguJGhNJDojJXlAU0Y/''@;'; put 'put ''fVZ0Z0JSQHJ7S0g0V1JRIUhKWyZUWiUoSSlYMXlDSSshail6cTh8Ym5hWH1QQzdUZTVEcV42IzRWMSVJOSs7LFg6M0pPJlhFKzlucmokRW1eM2h8bzlwRzRoNC5FYWl8YF5+bT4kWWEhcmY2WWYmRipIIUBWeXEkNT15LCg+YzB3SHJHMDsiSzdQbWpuVzd+b3VgeFdiYjd5dmNVIjlpayRWOG1W''@;'; put 'put ''Rzs3WU0lI2A/JTtIPmZ8ZiFnMjYiRyVPNiQ4cWV5QWpfdG1kR2VAc0B2c1VFLD1fN313OChGIywpUjZQblZAakJpPSooekFtZTo8Vz8qTEtMIkRHVkJbTkEjPyw3REpRXVhQcT16N3BveTxwLiZQQiF0amhLOV5tUSh8VStePXsyW3tEcixob19rPUV8Ukl4L2k0OCpLfFFCbippaHgiVGtSfVNH''@;'; put 'put ''KUhqQltKa0ZeK0suWmVlQVd4XWxzOjJMSUU8ZnVHZHM8Xi5xWihRU0ojWDF6X09gJDZyXixCWyZ5XTVpfTopJEludihhIiVRKVRLSlRuYXAjY2cmTT8wdllPN0RpaWBKM3UpUC9mPUMxWzkvSkNwUHF7Z0JPQjVIZiJTYDAkQlMlfS8uUFgpMHkvRl13cj43eX5we0QjTDZVUHpFKn1WXlhqcTBm''@;'; put 'put ''JXw7Q0VZLDVaa3YhQChoKFZGKkBAK2FRYWUrQ19RMUlHIXArYjkxKWRjU3oyNDg1ZTFYO3JpM0VGPXh4byxlZlMlQHw4Rn5efkFON2p+N2BETT4iTGZ9bip1Nkc9YVJ+XXAoZl0wL1NBQmhEb2A4RiYucDZ0aUlJNnV6cGNsLkYociJwfXx8MDlGcEpmVXBQak4vRjdRPWVqQm5CIUd3UEtYJXE6''@;'; put 'put ''Xissa0ldYTYmOz59b2khRmBzRlcuOHlscztYMncsKD5jLHwiKWxCe15NQG5Qbi5ZVkBVZDsyOl50MjQ1UUg2XlpWNGk0ZjpbfkBiQ0dRUzQzSkQ3T2Y2WEhtKyx8Y3o8KHpQSWU1bUNSZyU6aktxbEQjZnI/VCY5Zk5xX2c6U0lQN21VNDleOl0xQlskIjsmcFtoTE1qLyxlIztWTj11KyVzd3JY''@;'; put 'put ''dnJPWHB2P28sOUd6JVtvV2dTVl4jZmFLZHoka2JmeT5QL0FNPWEmQ3MhSH1iI0w0ZFIidSRRSlcxSCVnc0p7bltbOSpMYU0sfU1CeUIrVlV7SVpkZ1IvZ3QyK2BIbXVSPiFzUXtSQjJlaH5FPGd3Olo2NzVHeiRbP1IhMDAvI1suMnZwI3RTa1YxQyM3TS5vJnoiWntRMk83QiE/ITMhT2BJez8i''@;'; put 'put ''MUJyPGtHNmE+RzZsN3MlbDYkaWUvM1MoMzVbQV5pTitMPTNOUn4laE80Ql9WLHlWYixJbk00Qm5jUGxJcFttYzB0K2ttTUYqanwwO1NjLjNoXjZiX098QUQ+fHhPMVFPRl00OlhRaFVmVksrY2BKckxLMzwsQi48WjpUTipFLk5OdnBodk0qQ2llZk1TMDBgW3BLJjFNZ3hGdmwkMkRqfnZ1ZnBb''@;'; put 'put ''WHU9RzM6YzFjZVo3dXYhR3F3VUJpY0dYWGV4ZiEpZkszUVlbK2wsYF42SzRyPy92ayM1NXZIYCZPQz1GV1daYnpARGs7VUI8bz5IZHI/XW0mKlduTGdHNzlJSkx9RjNzRmQ0VjxTOyp+el1hSi5tdUFBQFFkRHYoKkI5RitNUGY1LzE1cGIoOFF0Q0E4fVllIWtMYlQwK1glKi5JayJBQUNBQUFB''@;'; put 'put ''QTFCUzZGU0dzeWxdOD98Lk1lX05rUFQscyFkQkVNbik9YzNtfl92QU5VTCFzJnl6RXJ4JFp5Y2QlfXM4dF1Nb0lbOFd0RXwzQ1c+cDt0PTFiKClsIz8vL3ZQQk83KV0+b2tYYTh6aDRSQG5jcXk9PUR9NnYkZ2VjNjc0fU5LRXxnWyxpI3xKP3YsaXpBcypdamxmJS5mOjQ3ODBAaj93SE51Ymxs''@;'; put 'put ''P3dvZihHTVdyLHRZOTU+Ol9EKzgsTX1SIkx1czx6VG9LPy4xWFgpdXFnRkdVY0p+JSt9SWtxQnhXYC4qbyglSHdNTj9HUylSXzJJJCZGZXxqLDQzM0dUV312WVJHKmdzRiFeN3tPYGdeam14UTVZWHI/bHc5MldWN2NAPVhWcjQ1LmdzaT5ubiglOSlBbUhVJTNgIllbKUlFYUNDSz81MXY/U0Re''@;'; put 'put ''KkEuKmZpeEh0bG8vbnQoWUN9JDRaKDgpbTwxKl01WUwwUGJCV1NmZi9bdyVJXVt6aHNsJEQ+aDFQTGp3OXIyT0k4OElAJCV8Njc/KCxnQlBgfStpM049LiRqZVJSPjh9MFJrJkdWMCoqSElmXlBrdClQXXFxTXJuRiEjenNVcTZSeGUlN14sUVlsRH1eLHJaOTdzTmo6SHFIMlV6MVEmSiJGRzFP''@;'; put 'put ''K31ReTtTeFBHWnx2VnAlI3pleGcrcWQ6TylUQ15sUERKPEo2Ul5ITStTXXVLPCpRX2sjVzE5Mmh3IyomVTNgVSQ+KlNDXmspO35PL05FdHB5VWBYZW82e204N2wxUnIxTWEpVmNyWlpiRjE+JGlESC9ZQUBYR0VyQUhQYzVuOkxeY1kmYFJvaFFyKz55JmRidSVaI3J9InUlaiZEejZ4IX11eTA5''@;'; put 'put ''K1Eydj1HVllmQXVxbWxmfCs1N24ubi48SEsvJiJ+TWBMdG4qcFJFbThqPXhsWXQ5UFdCZW8uME0jNUZdcCFQa0Q3TWk4dFAsRV0oTDU1VzFTP256QFZvO1Q4TSlzOUJxQ2hzQFFpVjVMP1MmPD5XREpxaS4rSzUvWSNQeDBJRXpKN2lSaTN8cVhlP251OWU4YDV+UWJyQz1+MldtYl8uNHV+cjtv''@;'; put 'put ''PllSLFNqXSxmciRNQyooUDZtMWtEc0xEPmpCWm8qRUs6V3w3dWg0O2JecXZPaUApT0pxW15ZRnhwL2ZKenp+eFYyUTNtQlpHPiV8Uj1ZcTBZaVpPK24oQih0KXsrbX07bC44MmckKi53NVspTiNrRWRGRCQxYEVBZj9PLj5HelsiMT5KLGRaMXQhdFM5LmY4NSxKRXV6L3VUL2AjbFduNEImOCZ3''@;'; put 'put ''OSoiTiZ+S3FacEwkeDI8bCVLaC9oSiEsMTxFIXtCa3FWdW0pfVg9K1RuYSFkKXxiZSNXRWEpImwhezdZSnolaUl4USFRO2I2dCpaN3pPIyt7ZDhRZ2ZoaVl1PkxgXkVVR0tgdHNVbjBddn5gOlFDUEorLjRkMVt1NUc0dyE3Q0pUNFVbZCFzbS42eGB1M3FlbGI9Kil5cHR9fSNDcFBWIj9zJUcp''@;'; put 'put ''PzRdUjBdXzohKyJjbD55MStBcl84T1p4OVZ+Y3BxM2VyJDZfVlglZiFdIjw1T2t2UWFaNDZYKyJXdDR3WXMlV1pqNzp1THg6eFgocl11K0UhPXxNUVllKTRTLGdSMlNgK3Z2QnlPJEZ5WFpmOztEZyg1disqa1QhRERDTS9PUHBeRVI4VER0dDAodktSUChOWyxWaytbSVM5ZXQuR2hBb0ZjWU5U''@;'; put 'put ''LyVSUDw8WyF+T2NgTTYhVj5hK3Y0SUNwIS4ycTMsbiZCO3hBQmY3cGBHZV1tc0tWZGR2UjBwU0tIXnxdYmZpTUchdk03ZTpPVGY4YSt9eWN8a3RNRG8qdzpAa3MyeF5jc2JjLz8iekxvTlg9ZE1gNHZzdXZtLF50UHkxRTFFeV5qcS9aQ1gyW0BmZ0FVTzZIOSREMlVFWWdjfC9nOmB6bCkuYHd2''@;'; put 'put ''PHBjViFHTnkvTHlZKjhNYGUoVnRfXThPWjNgLlFhIm5Ke0BjdCg3JU5CRXNsTGs7eDNiaioidU45W1ZJODhbW1opVn1UOWJvTjI1OiltLkh3M2pnPUwyYkQ6dFBgKX5iJF07Kik+QTBCbEQhKjd0azI8STJ2fmdjSVVELDBOcmRvYVpEZ1FvPm5Ad0U+e0cxUiRzfVs6RyZ+al9NY3IxdW9tfnoj''@;'; put 'put ''fW5xTCMoIkImaT1qWTU9QG1ddip5VHVFRktsJEQ3UVE0K287Iz9lcGY1c2NnOV5Se2BeZGI5Z0IyMFdgKzFrd2FuJEdQOzdxOVZwOWE/QDdGJiYwazh1TDxFSVcqNVBSOURFLnBTPEt0ST87bSZsQCoyP2lReTl0ci5kJXh5TTkySl8sUF0yT2hBa0ZpeCtjXk99VUh2M25DJHxEOHc9bFh8U29i''@;'; put 'put ''djZAZ21qSmxpYlU+JmghbGU7M1lgWSk4OzUhaXQ5TjJbfCQ/WjxJLiU8LG5AVCokTFNwYSUrSV1oRX5fRnZ2TzB7T0cqQkI9OkNXI3xGJWozSEI8KiRRQCpSe2Q6Z1s8Ji9YS1B8Mkg4SCUwK3RoZjIsTk5bKSxsMDZPfHk8MlVwV3woR2g7LkdZUl42NFo9PGZjRH51d35DdiYyKENgYkVFJGpL''@;'; put 'put ''fF1DezV5QyxlVTwuajdKLnVCLjwwanlNNExieCF+XXE1U1RfWkZ2MnAoWVduUWNzcE5CNkt3MmsjZStXdUlxZVc0Lz1AJWd3b3l3bnVTMG1zOng9by9+WntlTzdPTnJ+aDx0eDAwYGhYaHt9YEdzdiNhUy5rM3NGWSJnciFlMn45NWcubFZ2ZmI4OUBUejdCY0hZRCIoX3tnUkV2amhZRTZhZ3pk''@;'; put 'put ''bF5NcHlyNUVfYkRgWHIzczZESFA6PWViK0s6V2NGLk9xT0NTVVU/Zl1ZZmVjaGw5Tk46N21+XlZiemdMJT5PMCQ3YlUhUWwoNFM2cEdQI2J4Wmo0LlE5X2M2Ym1CJipmejtvOjhbelQ3cGZkOFdQN2dzNzBQX3k9Nlk8eTl+IUZTXjZsciFOQnZgT2ldWGw6IS95Mm8ocUdLJU1jLGZuRmtbVCw1''@;'; put 'put ''eFEqcUhidS9lY2trKzxqQXhReUlGentHeHNHeHBwXUFGN0Y8Y2dQWUNxLF87V1g9dmJFRXZ3JmIufjJgSGhOZkRzVD5lK3RUeCsxelhEbkh8JT5RSU9ycldxYCxYY2pxSDg4OjtCTylgTUd6NlRzcm5xajBvTEt5fTpDemh7Nm92RSNuRkxYPz9kYFpnZl44ZVAse0p8Ri5vSjpgbC8lUH1CZllW''@;'; put 'put ''cC9AYjx+PEA1KjxvPDt3cG9MeD94WDE2dW04bTdYZzd4TFA5SlJ9QjRSSlBybEJzOWwwdElnaV8jNy5gTFkwenhhNjRjVnxsZTlbRikkSz1EUV58W2VyTn4hX0EwTVA4aHZAOT09QF1NN2Y3ekBKRDk1cmZrWTNEZi9VUnt6YEB4Nj5FR25VVjBiZHddUj5oVFFGI103bU9vdU40Tk1JdllPNkFd''@;'; put 'put ''RSxdfFVOXSIuUUlpb3M7SXt3aENAY1dPfmVOLytXNjByL1ZEXmFqcyMyeSUqNFR6YTk9fWpudkQpVW4kUylmIk0hYkwrcG8vMkVOJHFGbSJYUVJwRFJsdl12VkIuQHVNRTRwTzMkdkAmY296PzR+W24iYTAhdjAlLy55QXdqNHhta0RTJFouIklIWV1bZkwqbnRfUkB+K042djZlaj1VaENpeU1g''@;'; put 'put ''QWQ1WUpWanBoMTZbVG5qMUpNQTglQzZnQm5gaE1XVWtLciZ6SjRHaERibylBLz88V0xgIypvYHZWKzJRYnsrT3lYNm5VdFgjNSRsVWU8Wy9eNURNOkhYKjFAe3N2aUx4KlA/LzF+cyU1eWBTWjxFfn4vXnBtXTg1ZGcpJjU9U1JxKnJTd3VPKkxlU0A4SXBnb0hedzVheXBkWkxuQjJsRjwoZXBU''@;'; put 'put ''SyNrYGkvJCgiOS44bmxsRXEvMH14JmB4Umw8OCFseDg8Mmg4Q2JLNGkxej0mUWsoZVc7eEp1PXEzN0M8VmZed2hrSVRCYCxhLih4LEh3flhkRmg8aHl5P24icE44VE5IJVQ6XiNESmgqWFhjRiFmI1I/KmVtXixqS0ZxSzMkJVtNb1lUZkx1QThecylddjkqXmp8WDwlLHlzNzxPaWdpPTxFQmAw''@;'; put 'put ''ZnV4YUB8bVpSNDl+YCtsQF1uXls4SkkpWFUzfW1EWiNXeHhjdWJXcls4RX5AYjJ4K0U5aStJQ2laK0N3SG1WeHdmPV9deUVvYV9XVSIoRzBnQWtLSD5zUXRZfFsiTlB8Tjorbyhkfkx3VGBJUnxVP1Z8WHVMKm4jJDZ7fDtKPyMmc30sL2dYUShdcmBpalRTZihpYD9SKihjaWBIcURzOjlHM1pD''@;'; put 'put ''JlAzZEZMMltYI2M2MWdzTy5BXyhwa20wOnhNMHxzOVkjPVNCajp3R085c3skQzxsZGVLU3hQVzg5Rm1hSiFhWU9FUD9xPEZDVH1BJEUxcT9lZCNeLEAhRVVxN2IkVEg+JDYrIjspLk9ya3pIQl5dUU1rLCpJN19hJEgsbi5TRVZLXnZ7W0VsMW4kSHBTXzAjQm16UispLlRML0IuazFzY2E2fVYp''@;'; put 'put ''dVdKNi8rMyhIX3JKZzhJWWwrTSl2ZEFQSlBrXnZ7em19OSVAV3svMzQ8b3U8TWoyVi9rSkp3ezBnMmQpaHUuMVt6VlFAV2Y4YllVeGY+TnA9UTYjPSZzVCUrcSNlNHZ7KHVfTTpeLzkoRk9ERzRpcjtye2o5cnB4dSFWbURddnRgbUhpUyQxKl5hZSozQjV1TFt6WHtUblEkWS8wVTpZIXZEXnto''@;'; put 'put ''YT4hckJeRDVKLHpHaUxZMWNJMktPRl4mTTBzPEIoZkxKJSguTzFrSz43QzAxUCkqJWxbO31qaTpJbTZlNVduOEc/VEhQI10oI34vL3JEdEIob3xqNDVfaitTblpXVXZ4fUtSS2FKOXlGWFI7OUlvaSsiKlRgYGckI0pYeGp+K2tTODd7e1JZM1cwU3UhUktkJlQwNHc3ajtIMFl9aF4iQW1ITFNs''@;'; put 'put ''NXkjIyMlaFRgWl57ZE5LO1VvbDl+TVttTCxYLEdnVjFmSnJJNm88OVhpJCpjaHJuIm9OM2xOXUleTz50R0JUbSQ0TEpFaUN3ZHBiQzEjbWovYE90YiR7aUlxJTpBMUUoRDVUdjFQWlspaENoLjQqTzQ2K3QrY2NtfW1AS1RPaUsheXpEfk01b086YiRRV0ZJSVdQRjJTTDxucncoTEI4ZWpLUzdZ''@;'; put 'put ''ZXtual5qXTtZeyZacDc6dHV4L05PUV5uNyZYL0Flci9gODhjRVVqZFVbY35AUjAlY3ZxaTI0a0pZQkEoTX1GPkNfTml4S3JUUC4oanJaSVBnfUY7Xi5PRGszJS5kKVojU2xmfW8xd3wrSllNYVdEUlBNU2ZffmQiTDk3bE0oMj85L258REYyYDVRailSYDcuPVcqcF1kMDt0c2FfSnMzdntsXVdd''@;'; put 'put ''KndUUlhHelhwbFNJKHpSNiFZU1JzQlloI00+RCNTYlIsbzI1Mk1YQFVJOEY0KCtiNWU8cmhra3RsSSZZXXgvZVJpKTZtZzpGLyMwfCwoOSRqYVZbVkhubUxVckZANyMvJmlSa2hFTGBlWCE1JHBaUVo7TGh3KFF1W1o6R3tqKFlxRUg1PT4sVT1IOEkhaUBQTVdmLFBJbUYoUj0xKVh4cGJmWVBj''@;'; put 'put ''OEsleTpAImJ5T0NMVWhtImtdVCF1R1J0fDJpaSNbUD1WOFZYWz1HXXUqTDd+Pyt1dDNmOjM3OThLWXY6bEw6QyxUVUY0XndgdSpZQXp6ajI1PCglKm5lKylKWWR0XUR3WntQOCxNT1AoKER3e3tHRWBLaVdWdlg2a29ufDtWJGx0MWlEXyMuIVtYcHNxVXBsMWsocj09U3k3RGpPQWlSe1RIMFk2''@;'; put 'put ''R2xLOTQqK0shPWhUN3IxYVlaWElzS09bZW1QJD9XSVRmb1lnXjh8YHArYzg2cjt5RF1aIXo/SF4ucHU1PS5LYjImUnE8W2pGNEsueVVFZSFxTmJDK2xQbjBqfVhPNWRiP2ZLbF8wYXBjbEVAenlFaW5QUk9Fe25RK29pYXNuRjpqRTY7TFciVTtKIS84LiVJdGVdZX0hJWs3aDhWVmpwLjdeP2du''@;'; put 'put ''ZzFXejdBLlV6fTlFVXB8aj8/dV1CYkhUT2FhbkVbNE06c29eRFVINWd1V2JlLFFEW2F3OmtUM3orIVUhNXRaRmk/OlFUOCowSV5PKFNDfG0pXWo+Xm09ZE5XPE8yK1lFR0pWIW93YkZVT2c2Uz96RHl8dmVPXXA0NlhHZm55Qn57QnZwVmdocEE+fW5+QFIlJGNoa1khPUAzIW85cShGWXRKODU9''@;'; put 'put ''OyhyUiRJTUoha1hEYk5sd2A+azBiIXBtKkZgfClOTDN2TF5lNEA7OVNsfk0zZk9NZUJ0MFp1SGlVZHgrYVpIZkxsK0giXnpEbGtyIyUlbm0vPHFvT2coJjtZLD07YjEqI2wuRUcoIno7Lks2LFBnbjkxI34lcUlDYEEzQ0lFNyR4SmJ4PEFCel4yRGY4RCR7Qk9aem1zUmd5R21QdFc8WC49KVdY''@;'; put 'put ''WzJ2MTRUTzwuPX5FUzdQe3wuZ0tKPSs/ZjZnfXxrR00kKkFQZmFBOj9HdG5IbldCZmZxU2lzdm1zZU5yYDNCQHtdMTpYYClFIWs2dU1nIypWMW1CR3VpKCt2PmM2bDolN0ErJXJVKmVsTFVEdkJUblRGYUN+R3JaUTZhVXRYMGlpVEQiaXgpTElPNjZ4NGluOCVMb1I/bTcydDYmfUZFbzhlSkpH''@;'; put 'put ''bW5UJDFNP3FLL2xmPXFwTjJsPWVUKUpDMDtLJWhiZixCKSEzLmEjN0Q5Y34pXnQ8L0g8dEM+c0hnUDA3MVsiYSMrOTklfkZHN24mbmVWfV02MGZ5bHRZYyhPdExnIWtgfltiaW9XaD9PSU1kbHd6OX5nVi9Gdz0lcF5zP31ETGFsQ19gJUBgXkUrYDU7VTR7K1IzZV5eR0x8Sj5faVVsRiw4WGZQ''@;'; put 'put ''Sn0xNk15cCVKODEmOX1DVDhBUE0/PVtSV2tId2gjeyhsWW0oVz5kPmwzWlQmZEM7UFJwcUJsfSwjZTludGlVcFZ+V3l1Jl0zcCJkIk88QjlTZW8xOFpdeHc/MSZiYVVuSSkyNiMrZVlaSXFBeD1UeUcofUhJdjA+Ulo9d1RAOlczOSY4K1dCMDwmOFVyJChuRj9Idz4/O3s+dzFQMzdxNF96NDk4''@;'; put 'put ''S3c8M042UWhOKFlhbXdjO0JsO3NqWSZbXmR1b259R1Mub1B9XToifF9iWHouXS4vNml0PHJtV1B8NSpEO1lmJV1Dc3tJcVYjKnl5NCssSEtWU3Z5IXZoP31OQXZbZHJbKHI1XnF3aT5NZEgjQG9LVm1aZTMlM2NTT0NASkF+TjJtaipQU1khQy5xfm5hOCgkPCV4bG1uWCsidXN5Jj1SNzxzZVRt''@;'; put 'put ''ZD05KWhdOWRmeXJrUkBhZGdvNSVwSklSc2Y4LyxJJTRbWShkP3BASWFRKWRMTWU0RS4yMDQ2OHQmS0lfWkhEKFNWeUNqJkhAaCNlO2U0NyN3Mmo7YitVY0t7V2JoPk8sSlR8S0VqTDhYRC5RTG07Ln5DdltoI3c6bnR6emNxbiR9ITd+OmpjTHl7Q3EvT0paJnB6NWguUGp7QlJjd3BXSVUjQlEu''@;'; put 'put ''QGQlU0NaPGk4ZlVRZ2dKVlNaW2RyVGh8bzRdJSxHYk87R2pEZHprZHovQENmZ3h6UnNNSVkvLnJaS0AsQ1NofHxqUmNTamI3PnY5QE9JW2E7ZTRVNmxFaHFIYHtGVyIxX09vM3EhbF98flAoXSFMeWRMTFNXeTdFfiNFMjIldVcyU0dyQWphW35pI24vdCokSFU8TW45K3xdMk1ULnovPD55NDtg''@;'; put 'put ''ZCk0bHI4PlAiVVdIVGkydCQ9Q2p0MSJkUTZ9RWtpYU0oaWEzXXQyXXJYZz0kUiM1PyJFUTQiTGFkMElNOmx9RCZFYWxqZWJ7KEViWSpneX4wQCY/YV5yPGRFJk1aYGIyXWIjeUNSNTh6Y0UiQUQjUXdSM0M6ZiVzWXl4Q043Myx0XklgdFtMISJkMU82Pis0dj5CcHs4ODx8ZjcwV1NUensqNiF+''@;'; put 'put ''eFM1LjZFRWliPyVhfGkkQFY6Z05Xc3x9KGx2Qls8TW0zKWMxcyVKL1ZvejMzaW9HbEssTloiaj4oOEE8V1hPV2BKU0JkMndUWyQ0XlhQRVlkMElVRlU1Rj5UNUloVFJpSjEuWEg0fSx3RFc+TCk1PTooOVtHL00pZWg4c2F4Jl94LDFHM2lmYVYkWENBYmYyLDNlMnt0R0AuRih0QDpCL3Z9M1gv''@;'; put 'put ''PD1UXlRxdXNYI05QcSNOKXthWD9LIURpbUM4SyMhWiJjS0I0Zy9KQDJpWW13bzgwW3ozSFZRcUJDZE5QP1FwIXAkVER3e2E1XThCcDRnR1I1PG1rPGVQQCQsXVNGNiUoKzAoS0poJitGcENFaFg5Wi9dKSlEbV8jVU1MOmVuOlpnQVEvUnFLWiwuUS8jQHA5WEF9ZWxXSEd0cVZhWXhEV1ssY3k5''@;'; put 'put ''fGBKdGlNcyxAMTVKR1JmS1o6VTptQCp1UThRJj49XmNOL2Qid0Z6cEBzejR7Rj12Q1k8Xmc1Z01xPXFbVTtCdClJWiQoMjZNNXkoI15SUElYcj0xRHVDSUc6VWc/dzBGU1lmSztzUTpoR29AJVNlLEtVQ1F1ZkJEI1ZsPC4+MyxKRDNUR2NpeXpjfVFOXzNHKVBEJDAxVExQdHl+KHZxSz1gOUQ7''@;'; put 'put ''SWFgeU1lNEZZe3NFfVk9a1UpYUd0Q35QN2c1e31qREhZbElQYGVvMGQ9ZT5pJCEvJGIrM0AqMStNRWVod3V8LFtCZS55S3hUQlNRMUU5Z0FlfFRlV3k7Tj1dfi5nTX07eHIjfUpwUDtHWU9nJGZPanRiPDgoT1U1X0hTUjU/VEFKS0QvVGkmRW1JWUQpcjdlTkEiLkx2blp1KiFHKHgyPXxDQmp0''@;'; put 'put ''cEBMY3xEPVhJPEdlN1VYfDl+STh2SGwmeHQrfUFXJjl+KUZudlcvZChydFBFfXU6OkddWTs1MG9FVEhfSHtvdypYRShWezozbmAidDFYKTAyZndmfjFaeGA7bWNfb0QoVyI6KkJWNHUzXU5LLGdsKCQ+V2gycnFHUkpzXnVIMyk1LG0qVipqUGxGRW0zRC9hQiFAUF9RckMmISZAYXtqUEtpZ1F9''@;'; put 'put ''IkM4Rj1vMnAxUWkxYG0rZyZSR2w0Sl41O3IuMFFpdXdZQn5JL09XZm5ORkdGQHBpIXlDPkt+eDMpfD9lPzxuUCRVNGZPfUk1TjV8VDoxd3xtbz5RQGI1JGFVdzI9ZGx2dDcobkwiUz0oOT8uK0JrKWdBcCI2NGhaMlM+OUJIJTRsMHZGU1RXeG1dSyg7QXBvR3F6Rmc2UzAyVkRKYGt1MjE0Zzko''@;'; put 'put ''TCl0TGRRL1hjMCwkXWJhfU1fYChge1glN301fjgjMk9uN2BNclY1Zj0qUUUmcFsmb01hTkNCKzkuKVl6NixPeSVEXWt8L2ExQnA/JWZwaXljYjxVJXtgaTZuV0hjL041JVMvOVJpJTNeXSRlUyojNXlDV1IkR21dNS59dmpjPWlhbmUieyZuYl5aO1pLR1FSYnRmNWdPImxUIlFUIVNKeDE3JChf''@;'; put 'put ''dVNYfGk3MEhCM0JhOUJ8c3B2T2JPdk9yd2ZMPS9qOmdeKytZI2Y8YVgwZGR4YCpVQzFvVG45VmhPJmZufUtoJH18OXV1YltgWHB5MVpGQFk7Xk5lUn46NSlKX3BEL1owZS43KDRuVnkiXil9SXZCTUw1U2RIN2J9JFV8YDRHRz1AUlU/U1RCfmwjZkJrJmxKQElEaT55fTQyLnRqcTksRF5QWDti''@;'; put 'put ''JXBMZFc/byRJa0lUVENtNkl2YjRLKHJTVG5+NUhiTFkxfGJGZntuK2w9QUcqTFpPZChqUTBJTTt9MiMhQjo0QTxPV3FzcjJKJS96MnFVdHx8QUlsOmhCTVNReF9eJH5VVn5UaiZGU3tCcVpjKEFKP0o5d0AxSXBvXWZnfTcmSDNrdERSSFlpJmJKRXhHWVYxYlJyImZUdCt7V0FWfn5jLls7UiNU''@;'; put 'put ''bClZfXspZnJscmZIeVI9ZzEwT20wV1t5SmQ7eFkpV35ucTA/WlJ8QCklTFRxfVQ0WTNsN3NuIU4rPmRRVVIvYjxwNit6N2AuaF9VYmM1MHBsd3pRTGNpP1UqYVUkWiprYWEpaFlZdT4yRyReKHBLfX5ITCRiSjRVcSJlTFVNMVFWN1ZjIVlqVn12V3RAVHwofjhuVHo2QlV2dDldUW8yPHc3JlRC''@;'; put 'put ''LFFrKDVLd2w9ZSlsaTZTPytNezxmP2I0UVdfeGJ7b1Q7WV1ZOj03czxefkNzS1BhcVNJX1krL21KVDRFUilnaXMjLzlvMzJaPCN0cnVMTWZ1RUlxP0RLbTV4dlNBO2ozQyQ9cmlyJTQrUFVlXURnR1k1Ojx5YUsrWVZCMGQyQ3Mxe1lJeWNNJCxqPWZrLGR4Ojt8eWtmaiQuQyRnND9uI2oySFlP''@;'; put 'put ''MCx+Nno5ZWNmdnpIfXI4TndNSGJuZFVKMmZTIS5aVSRgZ1EjY189Q29GNllJS1lGZmlob25Ofl1SUHlKJV41cEFNdWc3Tn5BXmtjYXl4MXIhQmg4L21XXXxsKG85Zk9AWCNiUWpaWXgwcy93dzQqZ1dnLlQpdC8seXZINyVATy9OQmNdMDAqOVk9KF5CS3dePyE3PHBedComSUIuWXRnRHV7Lkc+''@;'; put 'put ''LGZkI19hRF0vMnVUX1p6WDJEQENaYUNDXzMxVz1+KH02fHc/Wko2bCNjWSZtRllqYkpGTE09blVJY1BFZXg8bDMwNDRRbz5DTDNPNVAkLlM1IiFbTUd4TDRAaUUrYXlaZS5oeDh0YGZqNll8cWtHL1ZpPGBiKHMxN04+dmRFL3MlSHFdVF8zfnRKb2h2dnJpWDBvY1lvUn5+YCs4cmh0e3NDQXQ0''@;'; put 'put ''PzAkV1p3KG5JQTBqIVRNfTA6WT99clYudDo2SVdBVTFJTXxgZVpfIWMkRks6Qy9CR2FDQ00ieUZ6TXAhJVNWR1dxNyxAUmdiZ2csJjo5JGcmOm9xbE9TTztEKjJqUFh6JkxbTXIwJUxMQnttdWZmeSl1WFpyYDkiWz4yPk9VU3JjIztzT1E6fiYoc3Q/Lj0veV5pWnJLflc5RyU5JEMxNCpJflJT''@;'; put 'put ''b1Z5Q2t8WC85QHVqcmdUO1VhSSkpVEVqNi5TND9edjVndDtHbiZUIWh3QVModylJWT4mSmZjVjEsLjB5M31kOWYzLzYmW0BeOC49Z1o8LHx+aUhuRWs6e1VENmBvcDoxcHR8K19fV157OXIzVC9TKjNHZjp+ayxXOiR2XmNEWDs/RCw9Rn1sIXNseShYczNGI2FEJHtxSWVhVVchVlI0NmlBJjgk''@;'; put 'put ''M0JJKF9eflczd2hPdEp+bCgpZzRzJXN4WHFPRm8oSENsYmNCVkRdVEoqLj9XMjMlYSx8QldaI0g0SzFEaHwvZk53PjN4bCE+YkNQVTtnOk9leWthPiFoaVF5QGdOaVtBRnpHQFJzdyV7UH55LzhgT15LUjFlPVhodnAxXmApRGBrIjBCI1ZYSmBhPTxwPEkwQ0teaWUvM2laXm1id0tjR2AuQGAs''@;'; put 'put ''ZVovfVRoZ0VZQXVnNj46RD97MCwiSD5sK10pUTtuN1tOOiN4TmVhXlJJKV4oIVZocThBMXNfUHtCbWQsYzh+PmNXNWswRldeRko4cStpdGQ2UnAjTFtlNShtPDRaQlpHeTIzIVQwPkM4RGxCVUlaQ284TnV7UjEjb2pEOX5rKW1hNV9mI1EsM2IpP215dHtKXnYsNWgvfDR7e3N2UEpBfXd8VWJX''@;'; put 'put ''dDdDVFQxa3R8IkByPTNoQ210JloldmgxR24iU3g0cXcjI3VNKXs/RXgwdksvQnBvXWxneUc0UjBiOFFmKFdYT0F8SVBqNWRhUWsvbWl+NSYuIm9TTUM2ZFpsRnE9fXk7OSRtJHo3RyJMa0xFTTpaJnt3M1FhSSV8UzM3K2NuK0leUTVnXishUztiOXgkfD5FPUVVdj1UVC8laDo2UDlCXjtSMENd''@;'; put 'put ''dFgmL3FlXXhvTWg3WkRzYkIzOF52Yl1nOkkkcn5CJnRJc2l5XmwzT09kX2pwSU85KnhCdVV4SzV2bWdZQCo7S3psKG0/Nm19XyFxcT5jNFtuP2pUXXVUPFhpLiw0RG1zRDxYTXlPcl5XJSk0fkFlYXhea3BWRUpTOGRUdWBdb3g2MWwkJnVyZUZAYlhvdzc6aCkkOkIramhjcil4fUxDSS81djBU''@;'; put 'put ''fmFWSlpUa3h+KFEzckNsKHRLKSRCVDkvNSJfYlUlTSVofWYifCJTY15PJCQoKjx5KH5hQ30sL0t5fTVab1I+YlhBY2F4Y1kpLHsyUzp8JUc4QXYkTiZZbiEzcik+OlJZP0ViWmpKNGZrZE1rQ1o/SmJqM1I0Xj5Vdi5ePm8wRHQhOCo5YmtwaFZwJm14M35rbVVMWWpJL0pfTjIxVylec3E2NGpZ''@;'; put 'put ''Q0gySkpYM2xpJlVuSWZtKVVtdjduKCNEdCUzUkteajg9aTlnSndXJHVtSzJ1SmAoYXFnSVF0NkZNeSNacFY6aFkscUZvR2BFQTszdlJeQzBFRXRDQ21lJkp7QXN4WCVDO3JLUTciZTFgbm0vU0pibUt2NkpRdSZGJlEvRFIyODc4aU44YCNiZFZTaFRwUkFVdStVSSpvdyYxQERoeT4uKHRmVVpv''@;'; put 'put ''fDxVeGEwJWVPUmVCUXI3UlVQKURRQnp5Mk5uZHMhcU0xfXtHc2VHUXpfcSxBSyxbTSg8cTlDZ0V2UnRLIjhnL31PR2A5VWNBNiRnR31fPHc3dEhvYiUxMU1Oe0AvbHJOPDJDIyVzZy9QeEJgOXBkIU04UUBreH0vcXN6YDJ+RTlfaTI5fS9bTFJva2gvIz16UkBtX3dGUl0rQGZDcX50LkR4PV5I''@;'; put 'put ''LCVbbEVDWWBwdi4+OXQ1PDZaXyNbR2V1KD11OTYxYDZmWmpXMT5rR0E4MU1Qcy9SW1VbSTVwS21nbCxwXlB7XiIheWBzVjVFe1FBTHx8ckM1PGI/SFdQbDJnK3tfZmR+M1p1PTdVZjpfP2ZmLFBbSSwheCJPaCpqNzxqV0xubFN7Y2hKRFtmIzhzSzxzSSx7SCMibT9SIVUiLz0iazU6ZDxONTZ9''@;'; put 'put ''Vko7Q0VzYWxZJDBBd2FFJjc+Y1plNExGc1lAL0I4VFV0QGg+UyJjQ3F6M0F2S00uYUBuZjRFXkJfSnA7U3ZvITVzfE9YTU58YXpXTGI1TzRISlFRe3UhSDpGK1YjKUduJCpVL2FuJCRGcyVtUmdFSVQ9NXI2dHQ8PFJLR1FqQFRRfSNNdTV8Z3dwJVZbUXQ7RkNOeTt+VW83IldmYSxFOj1SRnd5''@;'; put 'put ''ZEcqLDJEekNPbmB6RT1CKCQ0cTtvL3hsR1dBQn5Zd0NEXjd2QWpWbzVUL1tmWlM2Q2YsRD98KVcrRD84LGMpR3VNfEtlT3krUUtqKnJVbWhMPFlMUXg8MiRrXSNOeTllPFtIQi8hYlVPLH1JbmZLOEMsRHUzVmJ6QVhQOkh2TEd6VnZObDR5Q1tUIX1YcC5yemNbfkZhWjJjTHpwc3ZhUCF+YG1A''@;'; put 'put ''PHxMUVQvbngxU3skelFAKiliWl1wcEBqeDRtYSNRJGhmUSZlNWVPUTRMRC5Nckx9X0NTPjtrKiN1LjRSQS90ZFpSP2tQVn5NZEZxZSwmOXJvaHwrIis0VD9AfHJXRV59QEMlc0UmdykyUS9xOXomMjQhZiZkNChwQyZSKWR3USFzUmVmNTtxSlBPPC9XUipVcXtnZTk9O1A8cDYhUUkod1BZaXc7''@;'; put 'put ''OT0vYD4pUVdlMF1bL0dJTylWMkI5aF01WGZCe3BWYSlCZTtNWiZwLlBWUEdnTzhgbUsheHB+Z3I1IU0qOmY2ITVFQWlvUWxMTmhXXV5rMUYiRC86bFM5ISR3PmlsQltXZUpiMCErOU1efElpTSUpbGtJNyVTQlpjNGRsRE4zbktXeF1XNl1LUDxvMjxWQmE+PSVPfVhrbWFtIW9BaVNofX40Ll57''@;'; put 'put ''QkM0SzVFY25RIj5zb0RIQUtaRWlNPDtmXyNtOTQ7TltEJilfKCRTbGRlZGB3UEsqTDohc0ReTSF1MFI9LmkldSlqLHoxQU9pemdxKSopU2AzV1JIVUtzMSJnOEBFTW92PENGdUwkYT1DKkxLMVNRSTF8I31ub2xDVH4icSRae3RbMSFrb3ZUVVM5b0syPS9vT2FUKThKZ3wxfXNxKl0+LkRJWj55''@;'; put 'put ''KXtna0BYd1k9YGspTlBwUCFOZ0VsOHZ0Q3dtRzpwIzVxIUdteDt+VipfcX16VkVAMyUjaitudStCU2EmYVI4MUgsVEhYLmJSV0k1LzgwQCRRM09kUFdfbUMzfk1Ye0NMNSIiQy5WTHw1Nk1xU01Jc1I8YEY7XX0iU31NTG9CTnchSkBpOEF2Wjs1WyhxU2VfeCJPKjhVUTFCWXttIz1DX1F6QzBE''@;'; put 'put ''ZUJgb1dmLzN+c2FuKzA+SigrK0tdNi8xZmtoL3BZR0tbdV83UG89aCNhQy9TUl9WTXkwIUlWcGw1cG5lUU8ocm0lWkguKkhuMUY8OChiX3I4dz9bVjFHQFtNeHk9bkx4IXBvNX1LUVg6QH1KaHRmdX1pTTtVVUJhVypMMmZKXiwoPUEiWCpDXV8rd2pUM1Z1YSs8Q3pLTUspNkBLRVh6YHkibnpj''@;'; put 'put ''eiR1cXhaMW14S2YscEA0fGphLmhQfmxQNlY0RUE2aTx5LEJTPWFgU1l7Zy9yS1czbTJzI0FAaEJLN21AXlc8UVJHXXR2a2puO213Im0mT3ppcDt8Rmx5TXZxTk0xaG1jNEAyLn0zMmZAcGU1KkFSTnZzaT9lQDtlSXBDN2FnM2ZoWjs8WmkiPzs2L3lqXX49Q2tTWUYqRGdiMVdTazp+e010QkIs''@;'; put 'put ''b0I+QFNmNnssPzxLcyYjaUpHbDtVZFJvazZidjdIV3ZJQ1hQbGl2cjZxZXtEQXJAQFd7PXQsKjErTURYc01HVlosbFNPInFadCpsQV5jdnsuYSU8WWImZUVdO2EySiN7ak9uZ0Q/QzdLTlRUZmhvMWc+QDI/NTYlO20qSWk0P3JHVTlLdys+YEU9fUsyOHsoMDJdNzZ6VCNSPiRBLnh0OSh1Im91''@;'; put 'put ''aFFtdGArdkk8e3I5bHZYNyldUjRybFJRNy9qPlVJR3c0Sj1OLyovLykoQ2wvKmg0LmteMGdhIW02KnIxdmJmW1Qyd3NbOEU0X3AmMUkjVnhjZ2ZUbW8odEs/KD1pRmAkWEouJjEuQlBBXlVjQjcsfC5KVWYkOFI6NGFmdyEieC57UipfIyNGKF9DLGBuZD1ybFRCYTF6QS90MVZqYXZMZW8hYFl5''@;'; put 'put ''O3ZjQGlDaXtjbU07YlkrS0g/cnA9VmFRWlBfSC4hRUQ5dCp0PDVqJnxXTT05dngsTFskM0VLNiExNT9efFooWkxRd1RLVkpZaDkvcDg6OXUufWBab31vemF+NHVyQHhXI0U/NGpCOF1vTWJLXmc7MlZoaVJDQy59SWRfSjwjJWBnKGtmcEcmVzJ5amc7azxCR0BENGRvMUQ4RCk0XS5NJThdN3pd''@;'; put 'put ''VU9IVU1MayhsUFV9SjZzKCFMV3w/aj1WRHIkfWloOGpYRE1ENjFoUSQ+bF9tZl1FQX5gTGN8VkAzMzhHIkFZaE1fbl5fKjZYVC8+QkAubWE3IyZWVS96ZjxgUXlJUXtpa0BqOURWRSNGfnQvSnFgZSZQQTNqQDYjW2ZffVVpMUZWbE4vQGIqQmU+b19LPzNDRktxRTpKWmF+WHQzYmJUInZYdyg9''@;'; put 'put ''ZSE7WWoyUj8mVnZnTzc6LFJ5QkJYSClKJSFpa0NZbUo7MnAxazVqXkhUZ0N5e1Z6TDRlRUtVbm1IJEg5c3BRSV0iUEdGSmohJCgvZ2VnPDNydH07RTAjRWBtQ2BORjN7ZnZESF04KlJZRmE7OWpOblNiQGpvQG5ebDpGMTlHMEZ9PjJGWytUZ2RRWHFdR1VPJnk0W1d5fH5zIXpRejc2QTkrcHxk''@;'; put 'put ''VU92VUxJZHZAc0JBe0pfQDs7L2l+I3VtOTwiZXxCWVRFcV4oQ3hTajBtdUVoOllTdyY/KWBvSHU8ZCVxaHd0Om0jKUpPPnguVEp+XSVEOHwkaVM8XnpbcVI8bHNKI25+aHxxel9kK3g3TSloKz1sS2RoNFZAfmliVnBfV2dzNEAjYnhAL2N3KD5hMGo9cEE2PlspZkh6anI2Rn1VSSxiVGNfI3g0''@;'; put 'put ''ZjsqOWNDSih2d2JpYHJlaixBe1BTej1CNSpYdTUvamlaL1IzWVE1XUwoe2lgV0FuaTIqSndkbyMqKCJbLCwrVXViUj15dDl1MFduaX5gPlVGdWN3K04oWVJ3Z1hDM2UldFV8QiR0Xk0vV25HcyZ8XSZkSHQ9WHo5R1p5Znl9RTJZMCxNeT8vZn1IViRVVXE0XS9WUUsyQkEmV3V4SS5rbUUwZXg5''@;'; put 'put ''N2xJdERNeVFmLzF8Lih+PU1gYz9Rd1MzIS50K1s7WUo4KzhpPDwhN3s4M1svdzZzJXtSQmJWZV1dOGEpdU40Xnk+OEJSeyZQZWQiXXEwdSEyKnF2cVNAfSlRS0plJUYpRSppYEA0SyZJNXU8fXZSQmRWbSlOVUV8YWxycU1BYT5ySS9DfCojPEN3bzM4P0RaPGhKXT46a2hFR0R3K1s0aD12X1Nv''@;'; put 'put ''YlNpdyN0PERYJjd1JGE0IThMcV9jYFgyIWg3N0I7WCNgOEY5eGM9RVk8MD5AM3pAakwjL0Zvak0jZFJ4QDtlUnFDYmBZJS98YiYwQ2pzY3ZvPm51WW1JSz1GUVZzcjouZTUxQiw8XVhIaWF+JSJBfTx8NVZ5LlMlWX5eMigqQyl0LkA8LE81SmVnZ1ReSD5Qbz4lM2BwVFFFMCR+eWM1fkF0cWJp''@;'; put 'put ''Zmp2bmtKJiVjOU8qdTRwOEMsQ1FsQVQ9eiUmJTpebjpJVWBddTZLRU4oe2NXaWZaYiRrM19ZX044Z3xSaC4le3trdnYlNEp4ND07JnhLPUdDZyhEKFY1SDt6dCtOPnNDal8qP3k3Q2VaR25+RnUwVmIuWVdFcU4hI0p2OTBHcG8yalcxOzpnRTY7ZEZbdGkwT2pFQEA5YT44P2tiPVZJUnBHOVpU''@;'; put 'put ''YFBlOj1scn1bTTgzUWAzfClpMVgmcDdfUTk4XSVuUjtvOTY/bVF8Y2JFJEBdVU4vLjIjdVhBZlFgXkNUK2d4I2JbY2dVKzxuLDcyOUJJMG5tcDhRTzdILygzaEFRdHUmL19BaUtbaGRGXlBdXiE9QSpNN1s9cyJjL2U9PXxMVU5SVHx+KnsuIV9GSlBENSM5NGgqe1N6dVtvKDJtZEdIfnImdUxK''@;'; put 'put ''MkFeIXMxSzNuVHRfQmFTUXw1N2gkYDUrQG84eDwhMSJEN1BCM2teIWwjWVkycC5uOiE+b2xHdHB5O0x3JVhaUzdaUkVuQz9AMih9T35nTSlzJG8/bTdgcEg5VkhTI1BYdGpDdXY6fGQqRVlCdmNDdCpOZDRdYUZiMlR4ISNwOmI5fjlgSTkrcWxSW149fExkPDMqVyNmX2B6cytmTFFPbzA1NCYi''@;'; put 'put ''QTxHdihnOnIsbGtIdFRbK0RfMipfQWxrPHAja0hRU1I3TFdNJi8+S1tKdSRCVzdlMy5zYU9KOk5NMUcudTorIkMpYGY7JF5AYFdwPHFkI0ZUZixpIyxody9wZnFUXT9RP2N7flZYTGhQLF1lTV13ZmJkPigjT0lfYHk9NTNMYHd8JnNAaTs4dSlgVzglK3BDWVNRcEImKSpobzRUWy9gPSg7W3so''@;'; put 'put ''Nm5QPjskaj5KLilCVnd9Pz5OJFpJOVFNMVVMa11PNEomUD0oZUxXLHB+Q3JkZ0ojUjhdXllEJmlMTTp9akkpfSNxUE1MLno1Z2g2ZyFuRF4/KldiMmUyXkd6ODJgeTpSejk2NUY+U2NOY0o3a2tgamZ4UmYqVnBabmNPN1piSC5sbHwqdFluKV1oPDp5dCQpeVM4UTssRypRL19LbE9QSFM+TUVD''@;'; put 'put ''QCE5YiJZLDltKHdeKDllMmQlfCFJPSM9aE0/VmkycjF9QHAkZnZ8IkZsPVR3aDowKShgKGltdnQvSWNRSWNUPS5+c3U0JCxbdj95RUE+UUJqKjVoXV1CZ0hjVkRPRUBBZ3k+MHJ1OT0mVSFARCZYbiNiTUg9eW13MCgqMUdQclRuSktWKSJpIi80clFJTktqcWBtbCZ6V3ghKCtRUDtlckkrSzZO''@;'; put 'put ''SVhFRClwLl4qeWldaXg9IWhxLkYmK0RWWkMpZVR7YHlpSTBXMzVtQ0JtLkxaRyJDW0xrXSgoeSt+UXZxUGVUfHFEZDxRMjIxVWlaQ2ZCRSwqbkxOJVVbLmlCWCk/V3MuXmdOaVteTXJwcnZAW29tVlJ+O0g4Ol0meXpeMitSO18/Mk51QzNjSXxNRG5rLCpYOkl8T00vb0BwTk1XJTZ8VGMoTDd7''@;'; put 'put ''eVdhXWtFej07O0gwbykwK20iSF5iQntdNjghYkR2QylzKk06c2xCJGEjUHdHTipYaGQxLi4rdShxTUhQfTk0MUFrNm5vdzZHYXooWEg+RmBORk5+KS5PT3kwcjVPKU8lZGtiYWEuMmxHRlEiSG0ia0w+RW9RNVdZK3g9X0xidE1Yd1BgcVU0eV9fXTxPcEo4MzNHVntbS25pZTxSfHlgRXpJZ2l6''@;'; put 'put ''V2M6T2UhMjEsOTlib3VTPUB0OSY4ayRwTTRALktoeC91UyhuIktTI3I/JkhnKmBCVkBJYnNzZ0ZgKFJWKjt4ZX4zM0dxMzVHSFZidGpFKmxLWDNiUVlsZlNlUHdIMkFMJVEhZk5bMkg+W194JEExZCJscEQhWXtEITBNO2BMKztEM3ZXNjAkUHhsX28sPkYkfmR5cTpIdUxONTRfdGEkbFQ9cWNS''@;'; put 'put ''MjdDdWdjOUNpfFB4NXhlN0ZUNkpBMll2O3xdTnNsd0ElIW1yVHYhSUVXWzVBMUQ+WmpzSGRmWVNYTHhWSSlZJFleNTR6I2U5dzZlWXUrKDx4KmRvfH1VWVtKUiFyIVBjI31sLjxBW2c0R01MaGVKNDlFajlRQFFnQVtaZClNUjAqOVZuZmZLPjRXYlpYdSQ9Vzw/TEs2V0JCMjBYPzJfMHpuNWNL''@;'; put 'put ''PzBwTE9UUS5GRWUmaHdSI3ZIJTFWbCNzbkV6Ol9xYXcobXVnVSxzeCNzMWlreE14V0skN0FJUCZ3JSwwRC40TUl3TUQmMkpFfjMyZDpefi4jPkg5aS95ekBCVkR6ZjJrXlA0Tnt5SipJZnxGXTEkdDkxSV4zQm9kOW4jfE1JW0J+ekYwUHdUPkEmUHFQaUdsUk49blooZWFVW2lrIXlKRVFWYU1L''@;'; put 'put ''UzJ+QUo4JSwpd2lwYW12PTBvaCVlZzAhXy43QSI7QEJDRFV7M1l2SGZlUlpIeXhXLnN7WWwsOUxmaHUzRVNSYDV7NWluUnRpLk9deEtpKHNxKE5lSDtJayFvUXxwYjNqV1I9NVdBO0l3KHFMI2o8Zlk2QmQvKn0mUjRbS3pOYWRMV2ZKJj0vPDJ8fHxxeFZwKUJpZWBFVzFlVkc3W3diWyV3bDNT''@;'; put 'put ''TEhCe1g2Q2JCQD1Tb2ZqMyltWHdXPl0zVDxaME5gbGFALH0xfXdCKUJxXlh1JXN7P0tMSkx1c1ZKYCFnPH1ebC5sQClPdzxHWytBNjMpSTg7eU03NThzeG00WjdFIkNOfF1TbV5FQylzNHI1OloxNUNQN19SUzZUZ2I7d2RYU0ZibU9RPVA3XUxIVjx9LF9kZ0Qpb35NO1B0cndUdHlYO3pWYWA5''@;'; put 'put ''TFpzTCRIMzZ8PTAqUkBXI2Z7K0ZtIWhMa21FZW94S04zcUoqdFgoPHNPOk1SOElEdlUqPGJNZ18rbHRpPVY+UVk6ZCxRRCF3RXZQL1lxTjdXeUJbTmtqa0Q8LHhQLENwaHBNX1pGXktaTUhjTzYlVW9EVDk3Y2Bed3JmKDwsK1pBTzZNOGooJS9QbGNtJSpfVWJlZSwlL0NuIXVjZSNqYSFSayVl''@;'; put 'put ''dUROLCQpXkpeaE4hR0ZPbWtwdkZ1amZVVzN9RV9ROnJmOUpMX1p6TjdYODFSfWZIKTw8RkYzbGl7YjRLb2Z3O10oIkJkRXkwXzJvaVZEJlRSX3o+dC5vI3xTa3xPRSJlZWJAKD58TjVXQjNiUGc6U0g3dndePHM1SzxRfltnckY4QmReYWN2Pz8pblEuMXY5SHtNKThPYz03dG9jKk97MHklL3N2''@;'; put 'put ''USRDWHd3akJSVDlEPzpkPkFEOyhpKyZbdDJHbGZ2IXQme143XTJMa0ZOQWYoeENNKFhlODpiUGp6fDt0ZSUoTHsoVWRGIWFeL0NASkZ8ZUpVb1opYjcjYjhnZVhUcSwmcUFDfCFVMHMsOCRwM1FNSSMmWCFMQWskdyFnanNsQ1ZrcytdVkJMSVE8ZzolTjZrKjFhOk4yblJSSEpdMm86Mz5OMUN+''@;'; put 'put ''enJxLmxAJFh8OXdYSmU5dSRmVGBHaSQ0SHMpOVpiUWdzTVRaUiw2QWNATkxFRSNnZyYlSW8pNUNZaiI8c19BKl86ZnJEe2lLZEp1fCwvNj9bQWhDUFpaLzdDXkU5ZUxxc1JxS3toOyF3My5OUFs4KktEfj9SQT5NUE1wU0x3RGd+dkBsNEBbOThrSmdYdVF2JHtTSTgzTyU6floubF9MQVYqPGdV''@;'; put 'put ''X0IoSW96T3IiMlF5OmpwKTprWEg3QXUzQjpfRT5EZTlSMVA7dDp4N1NkRk4yNjkmb3o6IlJSMDB9d1oxcTJveDBtUmRMW0wqOytHfDleQyw8WiUqNGEwZm1TfkZWZmBETTJxN0VaOl5RKEIlOSJfZSlONUhHUz1FcHl6XW01RzRAQ3NPZ214Slg2OSEwWiNOIiE3XW17PTxEUDdweU1Je2B4K2Y9''@;'; put 'put ''PlprX1lkLl1iR0dYWnlmKnI3Pmtwciw3ZismfSVYPUs9Y2plcHBwIU1JUEdsO2NmSDZpKXRsOzVydlMyNEhXMGswJXg0IVdaInYqd1ZqcHVjcklaPCxtY3o7K1g/YH1AOGMsVEhfZkx3IX52RDAiK2FBUXJKYlZzLlJ2dF5HWmBAczlJXV1wd3RVdSt6Z158ZHB3Tm9WMzgmRkxxeEZuTmxOPV8z''@;'; put 'put ''T15LYyk4VUE8JkYiTE1gRD5+WTw+YnVIQ1R2WkhtIll5KWZTPSQyYkIySCU0ZnxlVX1VUCtQMz1eRilgWGdydjwwVTg1fUsjcDQvZmJkKyhAVCQ9O3klaTFVSy83V0kmN0lhMWt2ZF8mYVhIYSpmZkRmeWk6IisiWiQlRFNUYG1VaFh6JH1hcF5ycjcjODdMQ0VtXVdHfHs5blkoWlU4MTBkYGo2''@;'; put 'put ''ezZ6V3NWMVs3ay51IT5aVT5VYU8kTypsW0s3ZSFKeztwVndwR3tGMzRxMFt9UCpVIip0fV1MdTtzN2UkaHNORCw3VSEyYDkmNixtfXUxVyozO09iRmdxKGN0b0ZSeFIzJTRKYH5uQyYkPiVBN3o4Qil2aEJJaEpGK2E7ciZmV3R4TGZfeFohV1s1TE8waXopRSs7OSksaUVAOyZ4enYwMSFWM1Vi''@;'; put 'put ''cTg4eEBKX3xhTChUKixhUDwlcCVNVTJGeXVpZ0NBMjgjWzomMVlOKFcsSENUKD1TWV8vfS9DeT52MWdTeVhjM2YhP2pgPnNVUzxDQjJeSiRhVTlYZ2pPLkcmTnJvUkp2VXgzM3FHaWdxWlMjOSFqdmpXP1VvLmJvZX5fYFJpUlJjXzsweUFAelZOfi9CKjEybER8an5fUixRRWZXTkEuZUV4Miww''@;'; put 'put ''WSxYfXU0VX06fn5lIncwV24mOUVaKXw1fCllXlZzP09LZXFSMnUkeGFPV0pFdnJnd21hQilEWXlKcjVqJTd7ezxfakJpeFNxZjtRI3UsX1daOn1LK2wsLllLd1EuQ35CSSJIPEA2eEZ9LmxjfCV4RGI3e3BXdkZSTlJaQnAoQDtlXiE3cS8kUkJ5PiZJSzQ7LllRV2A9UU9qekV4KGI3Z2BCWDRF''@;'; put 'put ''OHQzRHkmLDA6UXJWZilISXFmLy8xPU5WNXRVY1V6SUpEUno0NmY+Zk1JUnMhWFBRQltMOWl4SWpkYFZiQ2c5eVs9NVRyNi9gTEtsUDo5a3o3YEMiKEhCcX51Q3RHUU53P21wcjcjPm1GSjhhfHchQ09+SFBVSGIkMnBRVUBeRSwsQVlAZCNGT11DP291Mkw2R1FON15rQlZJMy9tXTRMcTE+ViY1''@;'; put 'put ''Y217e3BbLG1scFduVkssJFIpc1t9eykrJW5IRy5Na1I+U0VpNnkqYWREZWRybHAmKUhedDNVajZSREg3U0N0R0JEc3hpXylXbldqS31HUzFYYnNVa3JpWyZULl84TDxRSj1NRjl0ZTJ9KStJcW81RUt9U2w2W1VUOjA6cy9vVUpqN1dJWk8ye18hVl1nTilVbEM0bylydzMiQyhJYE8jSUdVUlMl''@;'; put 'put ''NHxiNWUrMHg2enlbKktFIUQyUW91cmhRdzJfZH4lJSJjbVpHfnMmNlt5a3dsRk5RO1ByKFM0cTZ4bDdeMStjaGRCNnpwNjNhTClYOS9mY3Q7XjJaOWoyNzVtVl9TYCs1S3lZU3V0THxIPzJRan06VExEbChlZyRmTDFxTXpLV3l3fU52LDxvQT1LOnJxbTQvUGdKRjdleHZ2ZyJfZj8kLlRoZHgl''@;'; put 'put ''OzNfJj1IcilrMTQ8UzRhJFgiZjxpajJIMD43Kj4rL0ZCeUQzKDtlWyh5bWdeT3VZXz1vaVpoK1Q4OF1KLjxLMDZTX35OfH1tW0U3MUtZNkZIcyJSZC9JWHw0VDEud1F3RDchZXgkMj1GYC49Q2RSfHZDVWY6XkoqYFheUDF4eVdOe2lgI3VbYE5GOSk8Q2MlZntOZXliflh4WS48SjlITms8Q148''@;'; put 'put ''OXsxbDZ5QyN3KHAjWTdyRFVdI3VaT2s2RDEhK3VSMDomTllKVyxEWHsraThNamkxYy5lRTFNJVtdSURwNV9tWHFTezBAcS4yOnNIPkd4QUVXc0sxZD5eRHl1Tzd1bil2X309KERDPWlKUHhUKDJhbmE/W3VqRXN6ZCZ5M3V0dzU6KGpIUyR7KGdIflNQVmRoPChLWVo4bHFHeX5XYXM2NH1NT1Uk''@;'; put 'put ''bGheP1B3RzlucngpJE0uL3pzQyxtTz8kX0NlXmNRWkBjJGYpMl59cWd5SStJYU5KW1NZcnlKPDxFJElwIntVdGx+dWRrfEcsYXF0dFMhcUhaOHdxWVFidX58QD0uRXYpaV57ZD8yczA8dExmbUo+JiY6QW5Sb0I0UjNpdSZjZmNLQGMkOWxXajpMTTRjMjxnfiMwQHlKJkkxOFArPHxCQGl9OGs4''@;'; put 'put ''ZnhvLGRoY0JlTH1NUHBeK1Z7bGMlPnZ5RjJ5WXNyTGRmRnpsa003O1pgYCxLe3gkPn50RiQ0XzR3TXZzfi44TzIpTmlHQCokPkpnKD9KK1JxTDwsJigiV3t5fHkqXzgqdyg9PlZEZnh9K2o4W191OCRZfG5ROyFuaVtCZkFjJDtrPld2XUV3YmMwfTU6W0VNSlk8PkcyTWNLaFdPQGNaISlpPDNn''@;'; put 'put ''XXk4fSVzN35MNUhXKDhVYEtxeFtbYzJLQCVyQHpgTC5IIywyQ19dO0dPTjc+V2NgU0RhVTI6Iyo4Lyl3WTcrTmlMZX11OmhyQzpFJTI4R1EyeEYhe15kaGF8cylUOkRYfn58THA/NkNmSXBeL312X1lXPEZeYmxdPk5gYUcueTAwIWQ+fF5+bG0yWSFKSzZbVGJKNUFwLi5sNSJmP3RCQjtofFtT''@;'; put 'put ''QmNsI0c1bHo9PVZoa3ZdYTNPOUpBODd3WC46XVRyRldnQG96bDgzVG5sZ2QvNCp9YSs4fThDXyh4V3wqZlNRT3tndkUqfFhlTiJnOk9FZjIxW0Z3XXw2digoJHJAcS9YL0cxcV9SSCIwVUEld041Tm1wdX1xWmB4YE1xJkIxa3l3TzREV2hKXzVnaDNqTEpfcVt6W05SSDZuanxCaE4ldTBXcF8l''@;'; put 'put ''e2tyaH4hVVRsajhDfE5dX21LY301enhnUUQpWCt1SENddlVPMnFLXUg+LE4/dSlhKVhWREs8N2k5NFYiSS4mPTJbbTRCdmduLyVbZHB1TUt1S3pUKjZUWS5iQUl5RU5YfmA2Pyp1c2ZaTD9RY35sSXMhWTV4Q2h6R354VSh4Q2BBbWkjOiM5Tj42dWxSfm9UJmEwc1JncDFgdnhsVnJkQjlWZW58''@;'; put 'put ''Lkh8cj5MdytqJkVfJD09LFIqcFZ6MX1lPHhKL0RoSVFiTkYqRCMxOnRHVmJRI1VkWDs+NyRAZlBqPjoiYSw/V09SV2h8dXh8QSFGZUpYJWg3MWYyQEQyd2lYbWlVWnwoV0ksWCs0YkxtUylQLGBAdEIkNTpKPH5WPUg4UGZRXzdrW0UyNkIkRHhIUE9ecjJkYGF5QlUuLGpjZyVUO3QjRHMudmU7''@;'; put 'put ''IXZaamVfNl5AeXE+YTc1LlFEPUM0e3RPWHN0WkZ2Lmd9RW0xbkRvL1lUYFdyYUVWcXpoNXA1VztgXiNYSDtxcGQzS01lemNOXn5SfEFYP3EuXTcifGhRK2lFR0FHZi9YNzU0bG54TTRyRVcmcCkkd1ZjZD9HLEdlbX58MWVReSR7eE4uZlIuPkp8fVNEcXwjO1pUXUUzcVhQU14mKV5RcjRrYywr''@;'; put 'put ''SEI5Y2NGRlZDMktrVlhFYyRKYy90Llh+VTZ+KDl7V3llRl1jXz58M0c5d0l4WEFeT0lIXV09U0YoZDk8VyQpL2h1WyNpKTU2bilPMFZXUm41YFF1WS55Oz9kZkMxcyFBfF5AQzcyIzcoVDp6dXZKXlowJTV3WltTYEZAUlMyM3x2eSZsNCJvYWZHdVRBQ1BubG4lRHA9QSFVRSxqLjlmSEJlLz0v''@;'; put 'put ''PHFue31Ac2lQW1N4W3YoV3Q1L3BJJDwuIlR4Vj9tZHEiMU5JW1hgcDl1ekd2SFVjOz9WPC96Yj4mL01MemY6MCtrQVkpNCJvPlV3UWdRVmc5KztdeVhDRDl6OkhLQVZLenciOXNOXXpee1JFQUpkdmJ0Qj9ffm9iLHF5WCZVMDUzUG0kLnFOSUVaOEtCdDI2ZFp+QUlmWCk1Tjs0N1Z6WkxDTWVd''@;'; put 'put ''UixuX0NmcVgxZlY9XWo5RExLJXsrYVJwLFAxazUjSFU8RD0oe1VjcWZJTzZWa1cyTlQ2Kz8rT0hYODRwfXo+TjB8YDNeOC9VXX5pTXUiW25uIlI1MUs9amBXZEhvJVhHW11JIy5bSzsjLCNTXnJJfX51KzJmcVlvezdYK0U1WEcoV35jfVkjcn09UkhXVGlkTz50UjsiaUxJczpmcFRyKzNaVExD''@;'; put 'put ''ZjVqTTU9K11rZX1ROG5wXiRWaHtAOVh0KW9ZMmQ6TVM3MG02YjdHQjMlLj9LZXV2aVQpTF18PFN1dE1XKERNOWwlfUkxIXxUfVFBZ2RNPmduMV1aM0AjLH1qPjJVZGUvX156OkBkYDdofUJnM2trWGpZNFM1K3o8fEt8KX5ZP2x1OGg2dVVhL2hhSGsjUlZudGlHTjtiP3I1X3FgbDdgb2hESTw7''@;'; put 'put ''M2hKUSwoQldTdCNeRzlMeEd4MmlRWjQrUld3eldWbmAycnpWSW5VcDttWHs5cGpxaCV0NzEwSTp2Z0IwTnBPMlV2Smp3c25LfjpqQzpuX1c5Mno6NF4qIX46OEhdZEgxLHd7dDFzeGtFNHNAQytWcTJoL0pCQUNLcEohU0N9UjU5PDhZcDgmTyRvQndkNHhCQGlXZFt9YmJ+MXdEekswRn1oQFF6''@;'; put 'put ''SGUpTDF8OW4waFdxLHsoIWxsYCY8OCNmcDRlS1QoWmAxYHBeayRoYXdmbXY8dHIlM3U+JjVZK19FNlU9MHVeSWNVYzhBJGJVOipUKkdsYUw9UGdNTHEpRzBdLih8WXZ+clNBW3xKLFciTnxrJlohRi5MV2M3ODxSWVE2eTNzIWZ9dVFdWDR4JFZWV2l+Rj5saWYiMTVVSX1hJmFzZXNwQj5oW218''@;'; put 'put ''PURPdmAqQmNgTCUyd1l0MFRfZC9CLzAmQmJdTH1fI3xGKXF5Oz9uUi9BclZsfW9sNDd2LHJeaXB9R3FDMlp0US5YZG86ZCRnR3NJbkpleFtiSFIyMlkwJXF4MERed3xsMz9oSnNyQ1FkKl0ybmB1N042NFMmVjhOMnh9ckFsPy4kdjhoX0hITGBIJD0ke1VATil+SFhrVjhTTGpwQ0pNK09vbSsw''@;'; put 'put ''YDhDYVBrWDlBNENpdWhiLnM2Ly4leShOfHheK1NtakZ2Oit2N0hmPWlkKndwdi91aHh3e2BUYGpfKDI1QUg8bGwmQHtOIypaIyhkQFI2ZVhYVWZIIkdbZy9AQlNRWFhaciwkb1YyMXh3fDxKOzJLIWNrUmE8bnZyc2pvJXtTWU0+c1NRTDVbcChJdjQ8OmpifWx2eE4lN14veUVVeE80eFovJXx4''@;'; put 'put ''NUZgayFGYTs0T2dAKGt0L1oqK1dHZzNOQlFSIW93an48OUgrRWVEWS9+amUuUE9DWlFVJEdjaENufXl+bDJvQWhgcWVTLHw5VXxvMSZ4R3o8cmwhXzMycVhpfV1LMVkxcVVFSjF6NVMxQ3tGSl91ND16bHJpQlp9VHxtJjxsND9ZMCZlXVc2JD53Y3dmOnRIdkZbL0tucjtbPz4/IVZjMjZLeiYy''@;'; put 'put ''Iz1HRHRITDxGOlolIU9yWHJOZ3JJTixQQkozU2ZARCl3Yjs7U0wjTjJ9UFRGbXttezl0RDUmems3aC92TyFwYGI9LyVLVF5KNjtqYz5XX0w8OUJ7U0Q5M2J8fGU+Pm1MLGJqVDFfWj4lSFRtI2ZBRShiL1FDaVt0NnA2Ml9hfSNFdV10T0pkdj9tRG12eDJ4LmxWNUkuOlI9VCNsKSgoYiJoOGN7''@;'; put 'put ''K2poSUFSTzEmMTBvW1pUdj5pZjhdYTIqbGpPPGNoPUkkM3NoTTVUZW56Y1lrYmRrMFlkRHtkdiNIWzJhU0k6ZnpVRG5fPE5OTlt2bV1hSEIuantEIXA2JU5nMUxqWWxiemxrRTNnIn5FMztwSGRjMzlfVkJSJHRISSR5ay9nXX40bFtXQWM6cUpZRzN8KTMkOldReXFHZGdjMUlIVFhkQ0cpKSpw''@;'; put 'put ''bHxTbWhkZ3wkfS9heHNzPjBUY2tdMXBOUnU2SXVpYXxMd0pmV3VUSVQkTE8zJjoyXVg8TEtwLnJhNTpoNTplUUgmbn5KKFljQTZTQkNdJl9mdE8pd29VZ3pJJjFTTno/SCsvQD44IiwhPn07JSo9YW9uKlg2WXQ9My9LRktmLFEqXypTYkxhOFZqbE49I1U6d3RibH1DdG9hZUAhIz9kdTI9OE4y''@;'; put 'put ''MUVSdWBrXz5tPi9RQzFgXzd9WlUuMVUqNXcwZCltdFl5bXtURyE0ZD9aUDdMfFM8I3xTMytjOTFJNUkwVmZ7ejduWFI3KS56cy89KWxiLkNsTWcyS11rXWA9Nm4ve3lNN2oqVSVJV3c2MTB1KjE7NEA6WkdFWTExKSlNXkBEYFhPS15iWXtDbXtVYEpZSUcpWldEIng7KFhnV1EkcSkwcyFqMiR1''@;'; put 'put ''IUpLcGZvPWs5LFJ1OyxCLFlpQWdXVGBKWnZxfWBda0J+flgiPkFhPFkvaVE8IyxpMT9YeigoPmlzUzEvIXE4Py9JU2l2SmM+O3heJk5ePHFGUk8la3pgQFR0Y0F3YS4iVG5LT3VXU0w1JUZvYFpYKCgsPSJSInswZ0UqWjxUdn0vT005OEpDMGxrKjBjMHNnPkg6NGUuV0s0dWk0ZlJfUXh2Lm8q''@;'; put 'put ''fFNbKyNURFpEbnFCOUk6USpoczl7IzVtVjN0W0J6TDxQWjEoa1YzcTU7amRUKm5LbSleWytSKyNhNnF0ekxUXSVXMCJHfHReZHpZJmVXfF9hKmJ7KnxnSCNlbX1aTipTYCNqVnpWV0tCSiV4QDBjbSl9OS9yTy8qK3lHWmdbLFNpQCVOQGJsPih+KFUyJShdP2Uya3x5TS8jX3JvUD99UWdAMmVf''@;'; put 'put ''QWJhSyV6eltHZi5HaFFRMitge0l+cV85OG18fDhdb3YoTnk2bDdSUTNkLyM4U1shalpCOlE4JFNiTElGeTlRZTB8djp2N2pabz9iUUBAIztLdCFCSyxhTSQwQjAsPSVKLiNiL3pIUCpJXW5DTi5vazdyT0ZObGN5U05YOSFaKVlUKVA7TE5FbWAoTypxcGR+ajsjWF8zPilGcyVPUG56b05QMi5E''@;'; put 'put ''K00pSWBGVHE5KHJ+OyJEQ1VYSjw/O2MmdXNPV3xnW2B6MlUoa0VWWSxKYDJaXUxFNiNHfGZCKl1aNj4uemhkVFhre0x6Z01WOl5Aa0VsQn4pJjx6fSNddWxpb1tUNWhQXS45SlE4UVMlbEdGWV9LX2wkNGY5TTYzWiJjfmBWUF84dkUpemFYdDZ5V3d7X3ZbUXBkJC9dNHcoT20veC90P102RXZN''@;'; put 'put ''cTJDP31RNnQ9SU06RktyeSNTXiVqfW4pQnR3SSNLbGVzTndTQEFhRyQrcXUjI1Q/LjdyMzQkMmZXVFI5eVojIy8vSkRAQks+YzFLP2FYVHYzXk9EW1pmJC5QSjtGXWddeSU6Mk8qZ1d9dXQwTFpYPVdvUnFGO1UjZV9oeG13L3xiQj4wVilpa25sIlAiWVtGc3kqZjpMJipmNXFVQUQzVVV5fEFi''@;'; put 'put ''bW9AK2x3IjIvXzBnWXZtKFcyW0V4dmhMbVZrSjJ9cyZ0ajE2PS5UfUwuPWhwcyspPjNFZ1FJLlFVNyMyOkhgZUJfazxWeEshbTBSIUFmTkd0UGI4YF5YYmMrMFlTaX0/XjlbN3J6JDlKWzFnIUU8O3d+dX50TFZPPz1QSlBTUHo7STJPezYzcTZjTlU1IXY6RiZvaT5eNjE8ZVtlRSZXZlMseWlR''@;'; put 'put ''aXE3WzZvc09GXzFscHwlMl5aR0NsWmZ+Y2hnLnVZY0VPYlVQekJLNjp9ezolREFpRFJ7bnxzO0AzO1MqKytAK30/N1pWJClNWm9vZnJpUXx1QEM9bmB4fWdIa1BbWG0/ODtPMU0/XzdRVC4lNUkyNEZsdEUxPFZlWjFzTGI/YU9TWTdKO1hdRnR7TDdVITAyLnNVZ2BIPS43V2I5e1laVGcyflQ0''@;'; put 'put ''Q1F+XTQ3LyhkXjFvN3Q7QHtteU9hMX5HNDk1eSg0amk5bVZWfSJzQGlEdWYuJUY1KGtpRk5RWlU3SVhWVHVUWEhqYFIwbXR4RFBtdF9DW2w4fm5FWntkfmdsWlcyQG8mZlZ3VTg0VDFRUz8sITNXMX0/Qi43cn1Gd1E+JHQvaERMQ0VXIXNaYjFBMTk9THI4MV9VcWNaRVZobj1ZVk9ycEBpJXt9''@;'; put 'put ''ZWZRbmRjQlprLz9yP2o4NVMpNmg6fEp5fEpydU1TITZ2MVdrdlpUbl1tI097MWg8dHlLNnNRdk43M09AKGZrSFkxbkhXa1Ixd2BUUG4yeWd3PiI2WShPXixnOzc8SC80Y2FUOS58aXlZVjsrRDhZNiI6LF00dis9ajI/YjVKTT4uZng4WSk7L0RUWUQuPW5obXNYe0tpP0V5bTNKanJ5eF9qPnAk''@;'; put 'put ''QExzbXwoVkJKdFJWSXRjPyp7eEV2Y3VKW1k9c3VQam9rNkAyUyJwUUN+QF9LRE5PP3lXI3N7eDNPSm5vNiZzMFBmWnBMQHhlUWhZJTdKel4ucllZK3QrZVMja3J4MDRRcVQmZTFsWT9QImpSRlQzRyVSXkFGeX4qWShASmlGN1NwcnFuOHZeYy9DcUorRH5Pcnl0aUFtO2tybkg5NTZhV0pGdXV8''@;'; put 'put ''K31aL1RiWjZedUo0KTtsU1B9TEBdeXBxIk14NV4/aTBPcF49QXhGOS46PyhPK0sofikmUC5ERjk3QU9fN1N2W0hxSixDTHxRMFl8Z2BdRGZLJEB2I2Uuayx3KDtTYHt8N0VWM05WQiwyU1YlIlR5TzdbZF9JQkoxL1F1SmJWPD95cnZNPzBWL1oxZFFAbjtufm0yNUo7NmBgaGZAXiZYdnRtbWc2''@;'; put 'put ''TCZHbkpfbXwiTSlVeFM3fW1fXVFHY1tJOWBPI0JJKmFQaWBWcn50Wl9QdTdqLnpHUWtQcUVFbG9HemMweD1DNXM2diFfL1N7WnlTOn55MEVSYXQlOVM6VjxNNV01NGplc1NQSkNzNHYlZyJqWUtPW015ISIvW3JmUE1HY01teGRIYlIxXUlncmNyJVZwT3E0XjFBcUJOX1F6YUtQKEVweFhuV11q''@;'; put 'put ''YzY9N35tWzJjYTomP2B5bG46ci59L3xyR1srJD1LN0suL30hNXAifHdwY052UjFRaz4vdDMiMC9gdTNqPC5hT1cpKD9Ab1BGSmFeKn5KJWUzeDp9OzRHSlhDY2AhQlRSIzF2XTNJP3srMWRzcD0kJFNNImBpbjpFNFleWlc2SmxfJjdkWGdFTU43dzd9Tn0pUDprQ2NrS0NYTjBgd3t6JX5vLGJo''@;'; put 'put ''WXdCV2dCflR3MUtLZ31oUUkuJSFZIS5dZ2h4JC9hSSUhJnwvP100I3FUQCohWm0rWi50REksd0ZyX0pGZmshc3BqV2ZJQHVOM3A/PStkal80MXp2OWNzW01dRVApZGp2eXJ0WWNgO0klXiN9fDhoVF83UCFCZSpbXk0mS28mOVY1Qz5FZiRsSl9zRytKP2pWdkJbTn0kbWllelhJIUtZPThBXWt8''@;'; put 'put ''QXprZ3E9dEIzUD1TXVFbdCxgRHdOVipBcTU9M0FeY110TH14JWFJJF9GM0pDXjc+T3BddzdnTk9NYnp1PW9lbmI/e2BlaUFRSWNMZnpwJk52MF9hYzg5cXx0XU1OYE06K1lxemtmWGx7JnI0c1ZqPyk4XjIlJlJFYk4saD03NVhtU3JnJHo5SmNBVHF3W0x1fHFoTyYyVE1PeEhtUGA5a2swVmh1''@;'; put 'put ''QGh8NTQxMTwkPmhTUDw8THI8OCxtTi9aViw+V0J1N1JaX0VuOmpaUWMhSTdOZzFRb1tqRVFZR08wU0lleylPUUNtRXRUZSgsUHNxKWJGIyhGRyslYk4jTEpxMyVoTi9rMHtXLjE4aFF7KkZ9V3RTRDl6OD1oMCEwYnt7OEZ4cyIkSDh8bXN8NW5ZcTV6S0c1dnZuemlmbjY3QjRnP2RpPDolZ3Rm''@;'; put 'put ''JnhOS3A1IWNxZDpKfVdWSkN0TTZKZSZjUTpaLk5FakR8X1gsdTtDdTJNRCU8OEJLS0E0SV17IztKWFdDNFBFYndlRjYkM11vW1VmTHgzT0ZIZmZmVTJQXnx2SEIxJD5kIj9LUl1MT1ZPUHIyI1lsZ31jOlZdd18/JTZuRTF1biV+OkxrOHNkfTZgUS9JbHwpZT9aSWRfWURIfn1mQUpkYzF8MnB0''@;'; put 'put ''YWFoLio3Y2hpMWJ0KnlJNypSI0o+e3tiajdFOmVvO2lBcEhJbCp1fVZycFZLd1U/Zm9TTEUwPUhbSzZgSWJGPyY8WWBJcn06UXJjZHMvNyN+fkkrSm1jZHZLayMoUEokZzEuPCQzUncqTCpKO1QxdXY8fWAxSFhOIW0iTDUpZTtWdzpDZ2o9Tys9a0d1VCUmW0EoLHRYPj08ZlklWW0rUGVzTlgx''@;'; put 'put ''KG5vcVtQNEg9d3wsQl9GUVM7NTR2WWhTQWY3dnQ8Xns8KUdyfUBFUld5RWdtKy8pciVQcDt+ek1qRy4sPGt4Kn1sO1RGNnE/My4jJlBSL1Y1JG42U3t4TnxEeVJNdnJ4JkVBMEc0aXQ7bH18JU1zTk95IVFsUSkhODJ5My9NdXY4fmFAIm1CNEVKenVwMENHMzBBKjJnd3pzWk10JT5oeVgzd0hh''@;'; put 'put ''Lk5WRT59Wj9QKXBEeDE3ZWJOWXhDNHw9OUpVY3pJbTxpWCtgcFM3d10/S3lrKUtzSS5UVD9DRUNJV0R1Snh7dV9neHxVI3tbZXZfKz5TQnshZzFRUSs6KSorSV0yUy5LYncrVjs4OCpAL1hXNEhRbSx3Z1JeYm9VeilDVHolVnhzTCtlJXpraWRjPEZaIyVkcUU7cm1oXjAvZDY4Vmt7Y1pRcFBb''@;'; put 'put ''e2FwPUxEXjxAVXFPcmkyKW5MJlJjRDVkVkdpNiE4RXZsYl0rTGs5SjY9XmkoaExldyNUX3U9V3JDW054RFlUUGc9dVhIXiFNQyo0eFguTngiI3g1ITtzckYlLjVuQHY2bUs8dCNUIkNkTHdBI012R1JDej58dVk5cEFxeyE1WEpMSH1KI0cjWmVFc2dQI11uZyk+K2hLNGc8fWE5Zm1ZXkBMOUh4''@;'; put 'put ''MXRqLkxpOUh+a3lbUmJKaWhjVHdvakk3NktJV0xyLlFCIkI5SCJHZV1+Qll8JS4pIW5WNiReai9nYmM5eyQvYVdBWiNtMVFEUGd5P0svUXlZND8yfjI5L1o3ditSSSIkMnNISGRNenNHK3NFVH4yK2A1QHZGaUI5ZFc8RHAjL0RvT1dnemdXPzk6M3kmTn5GLF1CQEQsKzpKWCI/d0ZLZEt3fWcv''@;'; put 'put ''dGd1JG5ubDc3bm52Qkt6JFNKMisjQ1daSzgpLFdpfk8rTCpIS0ZpeTZ7MDJHYnNreCpeNDx+SD4qSjxjZj1ZajRlUyx3VVo3ZUtxbVF5ITJ1V11hdXZfIXc6d1pRTFNgcHRveG40bTZ+USFYVmRDaT0oVG15YFNza19uTERQUzZPPWg2OzNtSG1wVEpSMHRDVmQ1ZHk7QVQ9Xi9hSSx9YSZ0alR6''@;'; put 'put ''STJ4UFs1K0psX28oWUJULEo7PGc2PmUobksiW2pKSEpfd2kkdSpsel9Kb31iV3puWzNTLGg9Xmt+PyEpYzJ5d0lHOEpATyQ4YjVhRHd8JWdzLFZQT2AzKzZJKHYoVnRJOUd2MGdyVGdkWlp1JHBJL3Zba19mYjtwSj9OWT5BSltnflRQISw5TSs0bDBnUGRQbkVoO3UzOzE7V356RVJhMH5QPjNq''@;'; put 'put ''Ijd7TjE/QD8uVSIuc1VpYyVVS0xwLkpaSiFXUF4sUiheeGRLLkRbe25GVlF5IWYiVEN3JTtkYS80TzZyY2cjMH5Je3NdXUA2e0Z9MjBxej5UdGoiPjIvV19bQWs7PktZWmlgK2I1d0V5d2lMckBoejhkKD1vKiVWPzM/dTdRNzpnIUBkIXZGdnAjaVY8I3xaRTJARD5YRmxgUm4jaDU1W2wjMCFH''@;'; put 'put ''IzYuQyV3MixGeXFzZl0mIzdadG56ei9PZDowWmJ7bHVOO1NzZEd0NG0mVGtPVXpKJV0uIVJAVVcmQio+JTRmYTVOL01eQ283eXI5I0spNihPLjtRJl5JYjEvZUtnKEMvVmYuYXJ3NWBlYVsuNiRTdFFHcytYWENqSGJVQnREQnlHOlc5I1Y1VWojV1khamI4NXpDMU8jbTNLLnJaSktuSCF0ZUAy''@;'; put 'put ''QyVORyRRXypHOnc6PCtVOHg8S2lLcURHLF95NEIsTnRJODFfUzhQbyxCdDwwRVFOZSImeSxwe1BfXWVWeSVbYHIlcnkrOU0pQ3FZVVRERXh9K2NgUXRWY3pmPXFELEdfRC96RTA6SmZ4O15PRGNEMU9Ae0YkdyIqbFJII0RlUFMmV0A+ailNJm17TCJYKHZEfislfHdMR2IsNTxMWEw4fHN9STli''@;'; put 'put ''SlJ1SjkoXlJOVF1AVXxPLytXKjw8JXpNSEBuL0opfFgzWil2NnY4PCpyM3FbT1RYOHhfTzhNZykvSlBJaTF8ZzxEQEkiPVRjNFNVcz89b35iXSpiXVtzKHxuLGRfeU5yYzlCUTl0LyI0T0U8R2ZWczY2eX1HLEExKHxNZntaciFjUWt5aihae1RXP31IdHR6TH1BLjZgOS5WRzRYaTBjQlBhYXcw''@;'; put 'put ''TjlgLmtHcTFoKjwrQCo4Y2l9ekprdzQrIU07X09KN0l9SmlFbWlOcCMhRjV7LyNXXyxvM3pEWDRffDN9XiErKXNOQlBbS0ppc1Yyfl9hI1ZHRD02dz9jK1ZpMkdkXUZsYGhaeHRXREx0MSN+JCxnN0Y9T19XfHAyPDkvbD9Ad0x7VjV+fWlsMFVTVX5DY0l+WTR8Wi5oUG08OXV6N0lkIkhQcSJk''@;'; put 'put ''c3JCX0UveC9SOUIlRj8lLHxbU2QlRElVRER6O3w3YHo4WDlfflFdZDlxWEVxcUdgIlFTWEhvSSpORitiVVYybXxESyp5QGh5Q1ZTMkN0bHAkUllsIiI/NVdER2UscnwsZGgyL0gld0NpVTZnalVsO3xTY2BNM1BNaW8sWFtMZGY/JmUxfHcjRVg3T2FfLyYvUkZLTyheWCpGQWhmaHBHNnU8e2Rz''@;'; put 'put ''KVR5TV04NWVacEgxc3dhTWJYLlVYP3ZuPWN8RyZoPWN1UEddZ3F6V15iU1BiI1J4a2UiYy84aDx8XWpmOFFRfT1KKzdvR0pHdGU9W0doa2pYYFtAVmEoOT91bkFjMWhuLnMoczMvYFAlKkVpIyxaRjVyTlp6WGpZayJFcXpKKHxyXVZvdzBeSSZTI3g+TXRFcVtAUVtGYmcoRUdaTW9gRUA8Nitr''@;'; put 'put ''ZHFqVXArXlk8MXVlZGtxVUZ5UD8zeG5qSD13SDdCMEUzYDZ0aGY5bD5EPFpEPVRdITdYIjw8dTNDVSJmfnx7dztvTV5RJFpzSk1YOHtha0peVXwsT0ZXbUB8bktIIncpVV5CIUpOKjc0U2B3ejFqUkdNZzNydT5xO0lNUF1xdTF8eEQ/WWdrLHF3KFRIW29xRjpgZExme1BfWDFAI25sfWN7PUcr''@;'; put 'put ''cDY0U0U1NiFgMzUuLCpfS31wQlFReTI4KHl6YmUuRHdkLntOaW10TVchZTp7I1AxUTg9JGNNXU04OTVJT0t5bDVgXkYkU2MzNz56QnpNVzNyVzRRJVJaKD0kUXl4bmtqOlN8IVglfTE7N0ptN2A5LzFiUTlmMkEiQUYwW0xgJGFTK19yZyt+TUhGbkZLNTV6U1lzOSFqX0YydHI2LmA2PEddSSE0''@;'; put 'put ''KDF3akRvUWpTTiEjVnJuKX05eSt5bV9sQUV6N2Q5KFp6SnR+aE9gPThfUkBKdl8zR0l7NjBYYG9KJTEhcmh1MnY+cTR3NV9bbiFDVShtRFlVW2BKO2x+cjE1ZGA/XWA1QURfIVFRWzNnSFE2bCE0Y05hOUBafFIvZnc+QmFvaFtse0lQKilAJkM+LDZYOlhuMlcvcGYifjsoRjtwMn5NVEJjbHFA''@;'; put 'put ''KGFrZDYxIUlEW3R0Pi9mcHlsdyg4byldYG87e0RRZTNMayhENzJfXypzLl87T3VlLDQ+eG9VeVZIPStqQkksJHc0czdzbSZBaSVAU2teMFs/MXRJIjQlVEJAdDF5SkE0X0h0X3NvQz9HeCk1Wjh9Nkk7QWtSWXM5IToheTg1RHZtQz9VUD83NWRab3xEP2leOUR8THZ6fFIsODZqJjQqaWUuPWR2''@;'; put 'put ''W2c0QzBhc1puMG4rQiNFVjhdMG1IWEw2XkEkI2UpQEAxTF4reChhcWJoUmNTQVdbLHlrZmlBWmorVDhieHZTVjRBI34xRkZIez44YlMwfT89X3Yzc2ouMTglPyQpdmtaTnB8azhlaSlJImVEL01SOUFOWn1OV1NIeGlyK3VMO1FAXzZmfXBqNXssPXReaWZoUzc2M1N8OSR1QyhkXTlzJSZjPXM9''@;'; put 'put ''R3J4a35XWm4xcH5NKDUqdjdJdVYvUjxxNVRfPmVnTEE1MHw9XntHZDphJG8wN1BzR25vbzYzT1BFYjp5I287SVtZWXU/Mjx8a11pUm9lSj1nXShYKVRoU0FQc202dWM8N0MySmJIeWV+NTBkSG0xdj1XVmRBNVI/cUs2NlsqMmtpS3tuZipdWCpQRHouXndyQ3QsfTBrZ0dsOng/eyw4NUZUNFNR''@;'; put 'put ''UGZbOGEhXyRlKUZYaTFrNFM3R011L3IsSF54ZWViYjF9SHtuWDduZC9sMGRlV2d+W3R8fGBMWy9kXl18QzssZmlkLFdDVHdHfEcsb2d8V2UzS3NeXjN1KDpNbCJELlRoQ31gfCwqWF1zWSRZPSZhJmBkeUxuLzZTZDxlI35rY0lkOVdtUGN1NSt7KlU8OnFmbDAyQ2A7fGhDQ0xCQXU3fm8kWTl3''@;'; put 'put ''VCFUL35LSHtORS47bHxxb05WMXt4dmRQJD93IVJYcC8sPyw5SC4lbTgjbyo/N3N3ancuUUFgJGsmcWp4dUpRako1Lj5IMHhLOHR9PFImaDlYT35kWVkwPzN1QzRfKXRqUGM3SUt+Uk0zVDoqeU01djFiU3syKSN4WnQwPyNDR0I6eWR1P31eVyFsY3ZebileIXopIXAvWE92M2RYa1RRajgwQSwm''@;'; put 'put ''WGA7eEU5ZzUvZlM8dndSY2ZwJUMze14zTmlfOHlLL0plfkosTkM1RXlURHIrUk1KdGdWKUUqRTB3VFZSKDJbOnNxUXB0PTRuflkzIWpPTHIwNnVlRClYaTMpZVVIYFdRXV10c1ZpcGQ7IWN0ak8mVFE4OyRKbUpgRUEiXSI2P050MSxML1o6aHtDQGQxSyNdYmx5OjY8fnk4cTNrT057VG5zJlJ7''@;'; put 'put ''dCpwW31pbkYsM14xeHxGaSJaNTwuW0FyY2RSNnl1fDQuT058PkQ0fS8uTnxDLFJDW0FuLj9nXUpAZiRCTTVZTEs5UmBvRkosNVVJX0kyQmcyKCh7SztWTGNwM0UjXys6ciIhVjg4NnxoNFEiPSZRa1Y5KDhAXlJPY3tXUU1JIkZnXW8xQTJmTGc9eDNOKD5jTn4reEVHdXBzelsuO0VqZz9Ec2t1''@;'; put 'put ''ZXkxJnBlKzdiaDAsQ1MsbDs2dn0kb1VQay4zUTMld2B1O0JIOkdLRVNPS3NBXWg8aXN6OU5uPVZFREcoT1EsRVNbJSVQRjYmNH01eVs9QkpKdzwuRVdXMHlsUDJzMi5DUCtjM2opbHRhdWNsfi9McTZFNHI2ZmtuOUpkM0IuN3VwSjVoNEVjSXc1OGY2c3c4ZHI/cE9iLF03ck4+PVJ2XVFUU3x2''@;'; put 'put ''WkApYEpwWiM5MjU8SHwrYj9YIj9mdDk1SjUua1QwPE1jLG5zN1Q7P2AqJitUWGZ2YzAxV0h5VUhRTSsjWVBbUzVATlRkPUJZJixMaXQuMHhZRTE6Slo9VSVuLExrU3p5b3ZycTBQeDNyQXRlLG5rV116JE9ZUngufX59Nl1jPzFbXTErYlRkVnZIeyRqWV5hQzpESEdAeTg7KkAyOzEkP1czP0Nq''@;'; put 'put ''M0FPNkIlbi9uPjFIKH5heCFDZD5DWlhUImM4LDEvdUJlMU13c3FlYyw5L3pTKDBnbTd1TjZYPjheMCokRENIQS83dnZQb2RyN0xqR0J7JS9pVGBTKlFwbnJedjlQS3E4M0xYbURVN2t+NChDaV5ZPU0rcCl1L0xjckIwWk4/KGI4dVNPZWg+dFV8anB1UVheRDt5eDokPn51I0Y/aU1td2N0LE8i''@;'; put 'put ''KTYwWTEyYDtATSJwZXlWfCRGbyx3JnFCbCNtMTYiW0J1WnJPKS5WRV1CZFsxODpFJHk1an1rLFtudWtQPyFyPTt4eF5zX0hFbXdLazN9JSxPVHFPRm03KytNaFgpUHE9XzdYSDgoXjkxTCJnUTgxPnYzY0RAJDZLOEZJOmdtYD1JSCQ8enRHST9RbHopd1RrSlVuaDoreUBgYkouME9+PENbcEZJ''@;'; put 'put ''enlFWG57PTtNaWg7NlQ6OitgeDMjRmIpfjVYQkVsZUxdM1tDSWo1WmRxSTMmZU9xdXJ+OnR8Rl8wKkFDfDZbfnElYW1ZRjkyWj5TYHE6dV1UQmdXWHYxPmpNT0FkdyF3RHdgfUleJnQ7KyxsOVM1R2h4SlNJVEpzKVlbZWVaeUlKaSEmS1hmem9kViVDVFhhKyZuYDc7LHc1MSZWVl08Mzk1OzVf''@;'; put 'put ''SldpSUlVQmVFa2U0U2ciYDl+dng9QlpGZDNGNzo7fS94JkNdOW5nTFRPZkBybEdEYXpTfEpwInI+XlR9ZUdIfWciKVc7ekVScnhjVXFQaHtjUF5KVmlIZiIrIj1SQmQkbEZ6Ulc1T3lfMSgxJE44S2BaVSY8czFEZTVScUB3dXwsYmZ8aWMwbSwoMTtMKCFYfFFfLltkaE9hM0lFOCxuKVA4IkFy''@;'; put 'put ''JVB3PWQ6dGteSW17K3xiKnd3W0ZmYk1JZ1BjbW41ZlVbX3YocCgxdFtRPHs1R1pqKDYuT2NNTlRxeSRPL2pGeW1UYz5fOkxTUUE/RyQoNTw0eDciI2E2QTxbMGlhfEdGPEdnWlIvcmNsYUtmZWE6RipNT2o1O0JOJGFSPjEsSzEqQ31LaUlgezBPUTkkekNvMlBkaUlUe18uVVVbaC9ddHhUNU9C''@;'; put 'put ''JVpsdEIhU1dnVSNXTWA/M0E5cEt2ZmVCU0UpN1F5U1Rsa0lCdUVUeVg+LGNAKCJtOSgleXI2ZkB+cipaXjBuP2F0THFoV2EmKklAPSopWEhTUHtwSV9YXSl2cjY0SFFKdlhLYmUyei99dUZhRCRRayVHKnd9TF9yMlc2ckNfLzdifUJqY2dFVDc1fWUjd1B7bXo1aX5MNmNRL3ZfJFc3PEkjRy9j''@;'; put 'put ''VUpZIklrO0UqJWZGK31UclRhdGNSX20vRCxWKklYejBDWWdDY0NgJjZdWE1bWkRnPUJXfExJW0shbmVvUXlbaUUyPjsoTntEJn1yUiM5KDB7ciQ1UXdqZGMxO0xiVUthLE9PYmM7ZEFYbnc0RXpUQzsjS2tPcm9WREBNRmA4P3lFYG9lYF8oZU9NTzwsZjM2S0dZTyYxcHwmdXskKi5ObmhuP0lz''@;'; put 'put ''fkYjb350PEdffG89W2tpJC5iajRfbHQ4blBocWU5UTNbPT1IMntaeHNfKz4wWWFgNVA6ZyYsdyouKjNUX3RuRitpLkYmNkNpbVs3RT1HfH0paUAjeyspJEg7WTUpV21ncC9DRjJhZEJbYzRgUUBeTjxYZ1FVJmVMRCxaVkJDPnF2MXFeUGpgVFR2akwoeWpmdVt1Wz5LR2BwaiNHbVVWT3M3UiFF''@;'; put 'put ''RWd8L1dbQ1k5KUZGKEohTyRaLm4rKGUlU11tSkhrZHJ2fit1NFVpcmgkaVdILz96TjJpRyliSFheZSlpUjlBeH0zQkhYfWsmOS5wQSJ+Vk5+aWVNJUdURnB9QHBhWFhpNncqTm93X313WjRSUGolUkh9MiRKJTB9c31INT5jdTpUfXQxUVYrO2I5MDlIOVZHRkJUKyghXXA5ITVJM3d6JG82WFU3''@;'; put 'put ''OTF6KnA2KXE7a11dW2NiaWdQeWtAMFdre347d3dKekJAWGA0Pj8iRmFbYitSKDZRYiMkMmBdd3wqZT9oZ1N+KEtgb0hSSSEvfExQcHBrR2x0azl8NjQxLmlQfHUwIU9JJXE3b3Q0eW8ldDU5LDZTZllJMzYkWDh7ZCNGQ1A0REtCKytqSFVVPmtOJDs1VltKOzJ4RV9BX3k1TEg/KUshdSpxWWow''@;'; put 'put ''N3ZEZyFxQlFmbTZnPUtVTUd8dWQ0U0U4O1g6PzIiQTEvP01SWkhde15gdjB8fHswPGgvRm0yYl9CMFU2S1trRS5XTl4jT203eD1gJWE1M1kld0ZMIXAwL2NgMWVCYTtEUSt4NjBmJGt2ZSw5TXw9Nig6K1EwLltRQ2trfWNATGJpcDohN0N4UXZVQjElQyxmfD1zezoqK0p2fXBie2UwWFhkS2lQ''@;'; put 'put ''IiY7OEszeTQ6PFJjJk0lOXBQYUJtWWBLenswXy5YYTZrLmEiMmNIMyw5VmFwPi8rMCppYGxlVDozZGhHclA9d3pNcDx1RC5JS3BgQmg/dUNpaUt7K0tCQyI/ZGBbMk5+RzZHWkVpKV5iLkw1cFUiT1pLMnkmTU9ISmkoQDRHTH4mSjVEL08wWj5kMVldU0xJQDQ2aCo0cnpNQ2Y1fm43YWtfWHgz''@;'; put 'put ''bDhtL2k8RyprTzxXW2xsMjdgISZebDpFP1ZjdSFlP2FqcTtNd00vLHZic20iZm5ZSCUkKGZAYmQjMmRoMEZ2eEJicjNoPEJ7STh7NVpZbFEoViRCRCFnIyQ5KH14cFZSPWFTK2wySloqIk51eTc/RT9QS09xYEAqLnBOc0BPYyJVaUtiWXRCcSNNYl0hUU8/LE9oUW4ra3lRRHVzWEI2WjEuVDIj''@;'; put 'put ''PnhhPyJ4ZGRdLDJ4KDpJbkhzIiRDT3h0ZV5FWXZkd2cqam40PUY9ZSM4NWI9RiJqTHY6bjJyVjpkREdETSNbbF1SR18ofEQvO1JmRGlCU0dEfiRMMGFdZEYycTZsMkk7amRDJkMsaHpeYXFGYDlNNGlvQHRMJGhrQlssSHM1UXJuXmB6RUVfeCplWElQTz1+alorRyV5alRhYkVzPSZ1P3A7flc4''@;'; put 'put ''K18kaWU7eUR0STU8QjhJZkVxY0s0UjQ2czhMMWBWdWB6Rk5xKUhISypsO15mNVNlUVlNSVd1JjxpUTN5b1tOciskc19JUHt4MC9HMz1qO0RlaXF3WntOJEpmVzhUa2E1fHpse0MwV0x9OUgqaClNIUR4K0tJPEtvQXImfUdsekFjRU5Qdzw/TkJPTDAsJEUlTE02dHhGcmguVVVWdmp6Vj9xbz42''@;'; put 'put ''K2o2Sl1fRyt8XlJATyY4RU5fcHorT1J0YlQ5ViVmcH5LdVZfcF97enQ1OyVRK0RpI1o9TW9VN0Rxdmt4UHNreERnOFptZG9eI0wmMilOV2gvSFp9JE1jRl5NcENgWCY1RypsOkM2dWt9V0s4T1ZINTYuSShoaml0YF5ycykiW3BxQ3lTU0oxMm8zK0lfLm1CXVsqNHhDNG5CdmpEcFhiISlHcVdy''@;'; put 'put ''X1o5emFdYEheQiVuIWwreDxkenEobl1KeXxldld2OyR1K3J4R2V2anorY3o4Z0Y4Q0BiPUl9NmM8bXhVfCN9Un5JZiJiX05APjJ6R3RNYFQyakZoLyQoLHR1cC5RKHRKY0hONHtGJGlPcmQzKU46ZGZJO1l6UU0yPD5TS1FQM10sYCNHakA+a2x6KjNuQWJTKjBGQUZuIm9Ed1E1K3s2SiY3PC9x''@;'; put 'put ''JH5vJldEIzVGdzdVRGwxeW5MVWw/YiNRUER3czpQMixsWTglWjE+MC5vXixDdzdQaWQ4Z2FyIjkpbHNjdy5aTyFCYyR6eylUOXMsKyojTCZYLG0/JUNBMl51XyNbWXo2WXw3cF58UXMzSmpLamh7cCM3TVR9bShsL0hlaGJuUTpqdi5QOnkwK0luSFc6N0oiP1RsSkh0QT9KWjZGcWlQS0RQM19Q''@;'; put 'put ''SEE1QDxeMTR6elgvSU5FU35yMmpxZnZOZ1dwTFhySlJoNnZiSDNeZktpTFV9YzxuSHVuXmN1KipHUUpDd1Y9ZFlVPmJMTmElZ3pbXlIsXzJGK0JfPHZuXTU/fnZQW2AwTy5Ob2FufCtFJSs1fW1rfH5mN2xlNUJ7akxdWSkmVk9gSzk1cTEsa3VQRix8QUVvdGNMYEROSGYwYHJNNF5kWEo6VEVH''@;'; put 'put ''OHxEciwmNGNsWHdNIndCfVB+UWRuWEluKVVKL1NjSWxMdUNkcmciNmk9KG5rYWNjYiF6fTQld31feXR8K0JZYy9IOXtdTTM9eD9lKFYkX25IeShMMkp9QUVIfFZtWDA9b31ba2cvQElGaURocHB0KDBbQXtnJUBVLGJUOyswU09yR2oocWVFYDJyR2BdPFd8ak1gSW1SUlEwXiQ+Kk1KbSNZI3B+''@;'; put 'put ''NC4mWzhKJGFFL0xlKkZAXWNRajxOayhiO3A7K2t3eHFIU2IrTHFBK2RKPXxkPVBjJWNUdTlJLGNaK1A0RX16WXJtQiQsT0AlPGo/QilleCh4W1h5PCNMQUFrTVB+MjpVeHxCXXpgQzFFPkchaCE1aDRRRDc5ViYqSXc9ISJgSnxKVDVHITtEYywrYGhhc0EpRl5TOzIiaz5RfnRMd0MlYWc/Jk5j''@;'; put 'put ''THZVUl1xfl1pU2lsWX1SK04rMlFGUTI4SXNbTmclcCo8IXNeUGQxTHtqc2o+MWNjajVSZFh6aixkJkdzRDYhRkI0RTVPbTMxcVZpbmwjZy46KlchbkN9QjJXSl5ZblhmZUZwYnpmbGU0bkYiLFtmOXEiS09nNDBkOGd3Yn1IbjdmWSlnbURZM308UF9yTCk5dmpaWTUyKG9iP2JnNGFlKGQ6SmpG''@;'; put 'put ''Wi9ualkvcVFFPURZbHpAX1pUIj0rUjxueG5rZH5RXUQzTiZUe1VyTXoye24qIVIvKCViSDgjXyJLYmA7cz9dfD8qXkpSWm9CTEoxJUo1NjEjP2glWiJAVEFfUDA5NjlCeXtDITByQmBeeWRRV2xteTRyXS95YSxLTyQrT0EwdGx8TEwhWX1JXS9FeEJ9R0tBcWVrLExxYH13X3NXfVM+IUslIXxm''@;'; put 'put ''WTE3fHlnOH1Wcj1abSQ+bUlsUXc2JCtzUm5VMltmNnJhYSV+d0ZvdUBlOGwyZX5uXl52WFt0SiUsTSQ/a2t2d3VjOGJAZzd1SCN0dl0wW0JgP2JjeCQlQ2Y+OWpuSjNXfldvN0RTdm9tVlhVS0skUkgkRVRIdSEhKCN4cjsqSFBuOVAjeDQxXWJPQ0Q5WStiZmRWfkw6YD5Vd0ltUnQsTmx9KE12''@;'; put 'put ''WShnam4xKVQ/ZGAuYCh4PVdtfD8+YGF4Y11RPXNRYGNDcypEUjZ+TGBhR2MqTSRENW4wQEVRLzJNV25wcW5mXyNKOjlNVytRYVdqY2J5Rj0jL2F2dU9ffi8yREEsR005JC96PXA7MClRQzl3KWlRKj9mfX54X2suck5yY3c8c3libXFvK3FYV1tKPDl5dDhrVmp6P2NHUDJiVnApek86cUBMRi4r''@;'; put 'put ''MT42P0svOnsmZzRkOmdgUn1JdUB6a0xLNDtTV2d3LEhOV21RZWdOb2pvMWpmelJRUjpxPFp8QUZCRVs+L3J2NjNzXmY9TEwsQk9BcTdTPUYkdGBAai5GKTBrIUI1TnhpKW1lKHsrJjgwPkFnVF4oSDNFKFFWKDRMVH1EekhzIkYsdEw1VjpIeyxPQFcrZmJkNCk7M0BBWmxIcTJLP2N+KlteZ0Yy''@;'; put 'put ''eUA+MTZBYmdiKTFCSSVseGdAaU1qN1YmN1lWdzpVRWNLYnd5b08xe19DO0xXT28ieyJqZHMwe0RHZF4uQkg+RE1Va3hCLGshJVgyOG95a0cpSyl2K15Zd1V3bns+KmY+QnVMRWhuZ0RJSj92U3pHK2M0bjRyUUV+KDRvQk5hR2tLSGwrQlNQZTZbeTg+NjJEWnRNV1RnL3JUdyxuLlosdys2cDsv''@;'; put 'put ''dnZ2Xzp9UGFNL04lMj1AJFJUb2hEQmlDYE5RKikrVyVzQHsmX1d9Pj1mYlR6cD17bkIqe0swbk1eeG1hVWVSY3pJKXJxPXs9MXFMWUpqeDd9ez9BYSNscmBKUWc7bTo3TXReW0decDs7dE5IUU5VRyp0c2lvUihZfXpkVFJnZFs1dStad05OYF1WKDNfXk89R2FMcCx5Tm5oOXtoRHxLaUlFSWAy''@;'; put 'put ''ZnVLRUwwKGZmcyVndnxqUj5PbThYRiVoRTxgLCRyNkVUciZSVUlEP3R3eVhwVzhuaUAsc0xRcCMvezY7JDN8TGpPO3MyQ0xmJm8hP2hyOzhvSUdzVkJoZWU1V30+aFdAX2EwJlp7aHB8JGtTWFN9ZHdPfn1USi9Qd3VJRyJ7Z3UxWkR4Kz9+OU5za0tjfWxSSFhLSHZyYzkjSVU9fntiPjA/TXhJ''@;'; put 'put ''OzFBMUxjR2YxIU4ifFN9c000dHNjfFg+SExKOix0Kl40b2ttIiEvbGFUMyIxITA1KWxQUGBMb3g7eUhhflI8PSNPQlhZYj4kPjRgWUtrKlR7V09DJWNSe0g/WklRayFWV19tbGlhWzYsKGMwO3ZVc0o9aXdAbChQImg6R1k8QXNuNUphQSZEZGt2X2IjflcxWXI0fHMvRTVuSXc6XyE1dzEpPWZd''@;'; put 'put ''eDQySH1edDJaMzJbMmVXN3lqdWN6Y092LkJyVm5PKjlZayxZXWhrWzZDZSgrOjVYUFhSTl8+eH4rLCM1TVU/MUclTF9xd3lwXis6YyQqQ3p2ZWIxbnZVTU9JMXMudlNvIWY9PF5jaVJ8QEpwN2RsSnRMdDFYQzYrNEc7LjZUKXxULjdSdThmeElCPDo4JVszI3I/eEI8JV5zY2tWU3hNJnVsO2Rp''@;'; put 'put ''QWV7KyhrJk1LISNVa0tJcHdFXXFNW3VUfTBBVjoySEpsZEk2Q0xbTU9gV3hwX1Qvbj5uODdOW3hee1s+ZUdXMS5bN1U5TjU9az1CdXp0fV4yOjBxLFtkJGA2Kl9qLFQ4dlRKcTt0TCYkVk5hJklNaThWbzh9JEwqU1RwSEllRHwoXVoqU2dxIyYsO3EyZXRabz9rISJBditkWTZWIlRVbX5CZFlA''@;'; put 'put ''MkRPPyFdSmNMYXt7ZE8lP3p9KXx6KkI4NldiUX1mQ2MpIVhtMjNlU0ByKUVSRFE7YiNJPzEzU21Jb00wd2JHS20+SlVZUGhEfUMvIls4ZXF5ZF1Qb2BRVXR5VW99Zz0ifGMhX1pmR2lUQFhWXk1+XUY1OUErKSEoT2xoRDFnM08+b1creGpuQlBFJD06PD1nMT4+Wz1qWnpAW3NGSSF2UTU0RWo8''@;'; put 'put ''STFCN1FKPG15ISJYbWNETkEpYF1YeyZ9VmVmbjxKU1EsOz1QLE1eVjsrWzVqK0ZfPVh2YUNHZHw7JDNDQ3VIbFUqP2UodE9ZP3gyVCsyN1A/bWxoaTRTL2p2YkgrST0lYSxHcyI/RSxidmsjOWQmR1Q8RHA5c2pkUXsiW154YmVwc0BZdlQ4TWR1VVF2dmluRkklOVk/WHd5JCV6I2ArNWdRRG5g''@;'; put 'put ''NC50Y09iYCJoOkdBLGddO1AmIXdmM0olOn4jbmgmaiVtelZBN2MsaVopZDt9N29ALHpKZEM6Rn5OejpTQ1B6UTk0aTR+ZTQpZVssOklbN3J5OixQYWk/U0tqfE45TXNWYkBKPyhZZ1dBNDZgXWtgMytkQCZpWyNgTE99cDVbRkkhVy5uXkArO3phaXd7Yl1gUnVnW2wuQUFAWzFeazc6JUsxZy9H''@;'; put 'put ''O3lQYkRdL1BGQFJDLDJzKjNjfk0kVFVaJkQvV0VkcmxwLyU+e1ZyJHdnQ2RCbGRvLDVeWHZ3YDYjbjUzT19TIzg0JWRUOURnW15HPHtJa1tWT1s9VSYlZEJdNlE4cWUucjAvMURAbiojIzFKT3FZWXRiak9wRDRKbFtIXV45X1cxd1VCe1BoMWZOYSJZPz4saSttPnNmR09pUCsmOnFxdXluTFI5''@;'; put 'put ''ISM0clVTVSxuZyVUOCE0TEkmWlA/LzFGL0JoSHEleCxXQGNpIUkmVDxxSGI/NDhbcEp6MD5qeUhIMXhSVmgsSXgwWlJBIU0sME1CcXx3PXs1MjFQPTsxcShEaWhtZHsqT0FEdW1IP2x4aSQzO1Q1SUdyWysoYWkydnFZcWpJIWhuXSU9eV5iayxQVVplZCMxUzI8Uy5iV34/W3FMZlBsdUVHJE4i''@;'; put 'put ''PTR0KFBjTkRIYCRSS1VOb0h5ejRSR0RWejZvYVdxWG48KWZ5bUgwPlgkI1AvVnZ2aEQsaiVkQCFdMihXcy8yPntNO3t3WDFzbikiO3YvMTdsOTEobj1QaUJoSG9MUyV1dlFmdX5Te316JltnSD89ZEspblpeJipbKXJ8dmtrRCFVY0VsMnRJbyU3cSJAUj14YzFSZiljZWYydVV9bGQkKChlSUA3''@;'; put 'put ''c1lMR1ddeGpXemwqM3xALC9bLGZXZ0MyY1tIUyJtcyt+RU4mZTxKeU1ZKFU5IjooJXc0S05MYTYzYHZFZG1uN2w6JTVOVDkmZ1d4WEJAcHRUcz5tdzldOGk3UT5nSjhyX0xrZF14NzVIVFoseWhBLENMK3hkXnxwe3FKezIpRmJMSUdlJjApbHd5bnkpIm1CWkdLZ1k4a119UGZNbjBJQ0spaGZt''@;'; put 'put ''NGUuNzZycSg2RmcyeSxUdCYyW1J2VjZGaHs3OXxHKjhLJWV3RDAscXt4dltMTT07YiZlQVslckA6QEc9cGRvOSQkLEl7UzFJTitdS0RxVUJEU30yb19zPFVNSDMkQyFhSm9KL1ljOGJ8NXp7T3lsaWEsIilnbXYxeCtBVk5ZXX4yNyQiLkQ8MitJYjo3aVRzWExnOzIjWkQjUCV+Mm1iTlc/cnkx''@;'; put 'put ''dkFMQyouX3R7aUw+Ukw3bDttMV0/JkA5X1JfaDMkPnB2e31qYXpwe0k4ZGckJS4qeCVuO2xdaFpmQShbPUJINVZfdCsjd1R+T3F7PExaN1tgK2xWOmF2VFJ1LyMlK2lTMDlMOjYvKkQ8VGtbZjU3MmpCVy5IJUwwZD8zLmRVdDpeY3x1R1hfaVNLb25TLFQpP1NMbWhvYChGNjBYWkpoPXBII006''@;'; put 'put ''Yjt+dXBwXkkpcG89aXxtYVlpUUpELGBTPFQkeT5QZ1NDTyNdPHY1NGNWPHc7dUVweHVUZT0mW00lZVBLMmlvMG49OmQmc2RNVEVIIWNOe0gjeTdeeUU8YzJuNXl8O0lDO3FuUlFRfitHTTAkYUZ6UVZbJGJwKGxvYVlqaF8yMiRxS2FZaHw5eUt5a3smd01CR3hkfk9idi9HUiFfZiFTY0hCazNv''@;'; put 'put ''YW9gbHssVGhiUmBRYDxVLGM4SlFdVGlzNDlyaGhAPztPLCsmWUBgNiNTcVdLI1s5NGthYmo1fndqL3R4WV1oKF9eNWJBaklzJk5TaCtERGE6bX5xWW1dTU5wW1hqRC9reWgjO0JMU3pGTipHTTYvei8jPD17WyQ4bH1ZOldUMTNNQDREaiRvbWNOWmQma1dQVTE+P2M0YyI+ZCRhMD85Sj44NShY''@;'; put 'put ''U0l2QXUubXNUUlU4dUFKUzpBQGNqY3h9OS5pb21wfm4qKnhsIyFuWl9FOWNaQUI/WDU7TW1UUlAlTyRwJiRvXy9bTGxoPVdTRz1EN21wJXRUIVdZdzFdRWxxck0wZ1kmUzI5SV5FIXhWUC5NPShXbUVDLklqSX5EPmZefVsoSjJva1Vte1ojNGY1QD9DZzorMmBZNnEmPyU7e3Z5YHtHP0YlPkFT''@;'; put 'put ''Ol9GYVkjNWA5T2BROyppYmJoY2BqW3M4fEAmUSglUWt+bkB4fCwxOSUsNH1kW0xJWThzakNgRGdQbEpBZ1tZUTQrbW00Ynw8fVMkbWY8SUVXTkMoSUxgUnklNk0sfiwlLkIoKXJKXXoodTRJJWM8UCU/ZENfVCZ4dX02RChGUyxXcCRiZUJqSmVweCE0M25EYUwuPUp6U1QpQHxZKW5pPj4iM0t3''@;'; put 'put ''VFppPHZ1Xk5nYShQRGJVNlkiPVZafG1ue204fVJWP3w5Xl9ETUcsNk4sbDRCQU5Hdj8rKUtIKjdjaVV7Y1JwMHFXe01NdyhQK147I1R8elY+MUh6fDRgTXlvIjZrK2BORSk8b2dEVn44OS8rTVIyV0Y+JTttWkkkODxRTW9RMnk5SCwiTE9QXituTCJUTGNlPWImWV8pVzxTUWQ/Lm91KHRuViFK''@;'; put 'put ''MEpTcD98NmZMSzJuIjoxUEB9Km48Ynhoc3dhW3JyflVDay8+eHplXm44KF49aG5SeTt4c21EYGsvMj9uKUJCdDpEWFE8WCt2bVhDOmFNcGJ2TV5OSER0eEJudGRyVl1SNUlrI1UselFNQn1BeTdGbnFgS0s5YTIxTjpSQUxqOEBmfj4le0VpPW9jOVNlaURTPGhhYjpLWjZEMiFuSV1ALmleI3ls''@;'; put 'put ''R0tzNzdRPWciRSw6JlVAU2cvX0NOfixfOVlJViIoXUk2ZkRKcTokfFdYPC8kZmg6KFFLaURKMFdlKSM/MlorKWU7KG5UImU6JTQjZSVsKFohbUgoYlhSdD9+Kzd1OSk8O0hgU2I3ay97cUQ1emc3ZjBKWzxwVEZ4bUh7Q2l2enl7dm88YCxDOWtQIlB5OGpIUT58KztsPTgrSUo5Uy9HSCVEP0B9''@;'; put 'put ''NWhddHRWTVk1cTw9Y0dpYGk3fmUyT3d2UUQ7W1YxdixPPUYyMmpRN2poQk41MnB4W31WM34uLGEldDpqOnwvXXMqJClGTHQ7VmIvcHp6NjkwdVdXMDFrVyoob2luKGlCdlo4fWQ/Tjx7JllWV3tDTjV5IzZnfHErWEdFIW5yfnJlNXVUNEE9Tm8iOyh8e1RdTnBANl06cz9GQ2lgMGo+dSZxTEdS''@;'; put 'put ''IUtoLGBPe09iSFRrdkRse0J0NCk+LEpaekA8cm44d2JDfjheTS5eQH5oKUg6aUZPa0RMT0lWa1ZdVE8kQyFlLkkuVDx2KWVlV1ByJFYsVGlfdWJyK1ZCS1BPMkZ5TXs1X1hoTnssaCJOdEM4Q2wsP0s+OjtQISQwRzEuNHZyUDxPSCspfjRiSkVxLmI7WkNYb04iIkNOTiwydz8uMCtMNzdOQkda''@;'; put 'put ''aSl+VFE+W054XWpQfCEkYzhsPDxMUzIjXlhxSTd0PGpERGA1Q01KSF1XKXEyWkNJcGtVL3dbQSl8I24+Vz5NOFRwMUVeQiQ3X3dSO1ZEQC9WRUlIQ3xSI0I+KktNUz9PeXhReFMoTTkxfGFAJChibFcqNXZ0KEI+R10lfkVBfWJlPk9Wc3cwdzpJOm9UdXoiV0R4SmBzaUUhP1dQK0R2Wj42RWI3''@;'; put 'put ''KHxjQ3x3ZEZDW1tiWV9ITyxqT2tvdE9xdTFYWyJpZSVkRzsydT5reitxbEJvVlI+WW1fT1k4Q0xJKGUxM0UmYDImP24vNTVpOitdUllnSWdlbGtNb2FnVHd+a1tzP0wyNm9+clhibzE/I3VhSyZvXkt5Lkh6VkNQdXB3VXxiZSE+T0hHL3BveCRlZGNBJVZoZitfOCokKztddldRIiF0ZExJampU''@;'; put 'put ''VHFYWktiViUpSTxIdUJaaHl+fHVLX2tTZUVmUDEwSnZYc1deZElnfFhUflMmVCxKJH4qRnBKOTFQU0xdREwqWzgsMGYlRWZlNmZ1enRRdyw0QkJBKjtyRGNaMVE1QCI+SCQ8JGdVeldUdExNOlQ2YiJzKWJfM0VTb3dkVDY8X3IyQFlyfCJwe1c4OG4qOVclZCxbYCYxez1KZjRuUlVkI3EicjdL''@;'; put 'put ''bUxyKyomYEBTKjcqWHgqdSF0WGhtLjdGUnR8fkxEJldvcEAue0UwNigqXzBOKThYb1hWXyQ8dz1AS3E7Wml1dyZsPnBTNj84KH43KkZJeSw8Vm1qPzIiV3h0dl8+Ikk+JlUuVV56WmsoUThFbzB2TnJkey5yJStPLFtBND40XyQ6MWddVldXeWlJXj1rY2YoP2JuNFI3TXwpdX5hRExrTDF3THhq''@;'; put 'put ''Rz1BWkhBQX5AJTVmPD5ab3xhd1Muazw5Qlc7XncvJG5jTzRNX08zaUp8X148K01xdUYhY3djMTQ5JCMuQHxtSW51dmxTYCFOSjxoY2tRbmZAbmYpPSVaaVswVyk2PCNdSFRWMSxwW08wVG9KXmlPeXtYdzpJJCUxIX16QyZfWSRQfiV8Pk5PXjNBUWBxQTl1JVFVLGNoQ0gkUmVAO2k0LEB9ME5j''@;'; put 'put ''WmJjcWtoXlAlKDBvWTk2U0ZLXTF7MFh6VFIlKXROW3ZNViljQUB1dXgmeFdRZmU1JE14b2FIPUhhcS9eNkIlV2l3W3FjJnU1Xz8pUE1TRyl6TiUmITpgcGg+WDhUeXlffEU4NEZnYHZ4Snd1LmEkWz9ATnw7bl4xVG8rflRAS2R4aiE8QygzPSM6L08kOEJZO2IrUUk8WzhlNVdPRFcwdzdTeFVy''@;'; put 'put ''NHpbJWtaMU56YHghZjFhNTNHVEtqLGlQTSRvLD87U2JfQj5Sb1JKQDA+XzpXdUc6a3l9TlEsSmMwPVNNWSZ3Z1sxRy54ZU1FbEJQXVcxfGBbWz9VXj9CT1FCfHU1UHUzNm9PKkhiI2F4OmB9TU5lN1A3aENje01IaEZzcX53Sk00IntPYX5iLE9SITJaRX5xKUwrTX01dXxzRjt0XnB0RVVDPztY''@;'; put 'put ''KThwOz9ISzcmeSxpTiRnN0IqVmFGN3d6OGRfV2BNXldBUSYybU1LV2FZVF4hKDIsLHR6Z1toOUREU1dUQzdXdGhMVjZRN2kmKiZLK0VHKGcjYl1zYkxCXiZCWjRDPDlNUnxvPlgpT3QrMGhFXXQ6MUtvXShvVVkofGA4LDtxeywmczxDVFp2MSVlS1tWJDIyc10sMGNCakRfLEMqSClnen5TWHJE''@;'; put 'put ''V0RBY3xLPVt7b2FxUjR6YWI/UF1xIktkZ3Y9P0l3OVRxKEVXSTo8QjJUPz4sVT5xNjd0RGUmW142R1tCY1FhUSErUmtDZzBhSkpXKkNQfDh6byo2MGNae0x5cVBXOyR2bEtbfXlUeXdNeWIqdEI2blN8RTYvWVpMeHs5KyQrNDwzWVpNczxCPEk3XXk4KyhIYDlQT1t7Qy8xIihXbmtlXnJdYERv''@;'; put 'put ''JkZ8WDZPVyZPOytgQ3YiPFZhOSY4SV0mUkxLcD5ZUC9YVy42VyZVYGcjVEpPTjZaUlRQMUpAT1ImTDd8bTQhb2NbZGN0eFEjKEdZWFQyVVouUyxCUlNgUGZsYHhmcmgiZD1XQXBeNlE2WE8rKCt2O2xKOSZDQz9iTjYuV01wLkBEVkd8UyNxa3kzeipzTFdbZ2xNIX1tQ1FPXk1pUFs2SFF7RVhu''@;'; put 'put ''eGtrJFk9XWxFY1JeczlHaGg0Zmo0JU81PCxCV1FII1EwUHA9UVtvMENkKHxqUlZnKHY1KG04PGN1WCJRNEV1JUpwM3NMaHE2UH0oQUFJdF1eejYzdVtLUE90XS8+ciREfU1ffFo6SE55KTF0ND9KRz50QDxEcz4sUmchPjBdQ3dxMl0jLFpqLHEpQSFpTT0qU1QycCNUbFspW1tHIVk+Q156KH5E''@;'; put 'put ''RXhyYn4zOGohfTlJcW1sfVpaTGVlfXRZNTp+b1Mre3VfYzYuN1AqPW4oYGJ6O3wjRDFIQWFEP308dkRSWXM3OmpaeiVFcz5+Z0deV2xKYTBlYCFaWm9SfD8lRXN7V2kvXVo+L0MmVTNIRmFpfjs6ZG1sciRSIkNwJG5sciR2d11jYyxFYEolSWFNTU5tUUBkVS9zK0NjZXM1XW01fGhkUiwodWlM''@;'; put 'put ''JHI6PSMjRnhaMkpJd2RPP1tLflZwaTVERTYrX0lMQkh3cVdhTS9obnxSVVJsfldfRSlNNCsiRjE5RTZ0MU4pS0VsKzwxeyQiSVQyYmpVZiJpUFYqTDM4S04heUVSMnBuWyNIa14iUDwpfElVWW58L2NmKGw9JVtQIV9sX1VYTUN+cXEyPGs3cXEoPmQpTDVRRVYheENnQnc4YjZoKStVaH0xaHQr''@;'; put 'put ''L3A3bHpNe2RmMCVidGk4Y1lfM14mOmUvbkhvJG1QN1BpKHg6NGkqclBfcC5rQytYMH5icjIkI2pTR1o7bSo9fCV7SDlyTV93N05NNFUlRyhwLGg3QjVlRFVHXlhJbnU/I3trYTVJJWhnRnFVMFhXK3kmL1JnYmlhbFZadWN5USR8YTchMEZHKlB2Zno/PVFoPGlpOV5nWH0qVThEaVdValsjJkUm''@;'; put 'put ''d3Q1JHlydWdjWVRFSjF6eE1zTz9ERElQXnoxMGlEJFd3UTdAZE1WfHhodXhFazFkNVgqOHdTZF02ZXpWZlclNlBIdFtGXVtXVyU7N282SDgzb2hueE1ZVE5sMWkrR3lucyxXKF81b3woOmpDaT5HNWh2Qj1+USsofVQkLnA+eix8dCtRS1JLK0lYTGY8X19SfHI+WkRAeDV1XVA0RyxZQClFIjp8''@;'; put 'put ''ZU9XYXZfPW1COUNGezFJW1AhWlhBciUwSmNNVHJ1YiVDMlhGQy5SY3NuTUxqYiY/dD5EalZETTZ2U11XeDh+d2QyLFJtUkBTS35gU1RpMG5OPF1ddHl9QkNWQnpJRFRCU29VJiZacV1JVkhiVC84dmc1TDt5bm1xKH5KPWFVUUFue25YZ0dsRDZfR2JuZGc5eyxmayIoRWNwckEsWkpqUy44UT1T''@;'; put 'put ''Rkchd1lAN1JMWl5aQ0Q7NC5EPzBOUHM2JTQwXTJqS29PUCVkPTlGbCtgJF9TWGBQKX5jekE0a1ZtfjBZfUVwfS59e0QlUV8rNnJpTV9uKVg8WjltOF8lZk9xXWVjRzxuUD4weWRSZmJ9MjhoWyhEcnpuWTB8WVZETTxaX2VTK31uOWo8c1VeIVpkeDl4Q0lke3dDSS8vLmAyb2AlOXc8O0llSyZ3''@;'; put 'put ''NGghfTJeU2FwfFdiNyVfR0E/b2IhYUokQi46ZTN7TiF5JkBsTUBUYT9ENzhIaXlCc0t5a1dCZF9tcDVfYjl+STsoTUAiblNNTFhgS2U1Rj8qbihNNEooXXp1L244JCNobHRhJW8lODd2TjkvTX5HS2d5RDxlUkBuQChyM25VQ0F4KyYlSG1zUCg2KzJoZTleMWpOQnVbInE2YlZqSXtIOiJ+WkJM''@;'; put 'put ''NixQW2RfbEJOYWUqc2gqQUw0dGA8e28lMnRGc3RNcThpYjNKQjlOSUNLTXpDMTdAb2RQJUV3Pj0iZGlpfF8/NHAvbDVjeHImTlV8OCojbSxec0YqcDxjLHRTKVh0IkxnantlS2FyeD9sP3ZPKTkuNUsiXWVbRGFPT1cwQXxdLGdtTnteUlQvb3dIT2V+Qi9xPUx8YX1dWVdFTUldZG10M0E/ZixG''@;'; put 'put ''Vz5FTGIpcSEmK2tSZ3o5fTNNOm03MV45WnAjVCJdKj1dMzVxZk94YkhAaks7UTNXfSx0ZTNQQHpTWk5YPEt5d2NrdTJUUmxpRmNjL1klWEBeTCFlW2g1S1U4T0drT1FuJC52cnFdMCxLWTRzSipDVUhLYjxmR3NxV1hrYkEudU9EQldTO2pPeHEoR0BHJGdtKWx0Ql8kJH59fX1UVWRvan1vKSFZ''@;'; put 'put ''NEMxM3JZI2d+PGQxVXFGdzNoMXJuMiZodEFiXVZMPz9QfjgwZTg6KnVCUFo5LGQ6JHM/fCYyUFYsRXQvJihlQT4ibSYhLmFTWSJdJDpxYn5xXlZkTWtXeVtRRX5HdDBSQXZDXzI7KUt7NTx2dzovUHpFSDAmc1F2Okw8dFZtK0EzOy9RWG9ieElEQ31bdUxFRnA0SUlSUC5SUWRJYXcufi4yZUBj''@;'; put 'put ''PyFeZ3BJMVB8MStaTXslSTFYKy5JcCFGdFp0Ql1LSlF8KkRNQnBkJWc1PnhJWUp7ZiV0V21fcGNMcUg3aldSdHt5KEY0LFY9JS53JHkmREtPYEVEJls4VnNab1ZAYTQse3Ijb0YvSX1Uemg+fDYoP2JjJnZgc2VTP20xfTMlKy9EJlpxQVsyeWczMjghcVUyL11NNDMsQGQuI3BVOHpuU2duIVFM''@;'; put 'put ''dShLUW59QzYzbUM1U0FITTEoaTFxSjE8SSR5UTdoQ0k5Vj9tYWt1YmN9dSJlPWwiREhfWUdUP2tVOyhXSmRLVlJoaSVqaHNzVUA5a0xLV0VCdjVqP1RCQVRTeVJXfmVNK3w8fiteYVciNFhyPD9RMk0uenE7c3plfG5gQWVrdVI1XXZ2VzlBa2U5WXx+PHJ8TTZKbiVbXWE8MEc7cXs1SVQjcEhi''@;'; put 'put ''aylBaVEpSSw5ZGZ7R3xJXlcmSH15WiwsQyRIcCN7WjJfKC5+SygiNXUqXWoiTmt9WlpIejp6VEE2JjpAfH09Y0VVdjU3T159Mz10UiEvbkxFUWkpWmFYPXZyPHs7ZklOZltiaDlHRz9DM055dCUvbUtDM0slPGV9e2dMRWB9QypyTyxCPjAlNzpXOHQ6WzpnZHlOcHtQPklPe0l7U1VVKzFLaisr''@;'; put 'put ''RDA5WyExPSI4VSVQZmUsNlkoeEZPUzo+JV1YZW9VWUs3Jl57Sm0yMTZvR0FTXlI+UHJDbilxUTx1dVB3TiRHSXlFRC5yeHEiW3dKe14jTG8uTkpYUCVIekh5UkNmMGR2PyFYL001ZzJHZVk0XjRdT3k9M3p0ZEZRSFIjLEpvbGR6e2ZTbkdfdFVaeT4vUEY2TG9keDMqc3tGQFsmRUQkN29YJUZw''@;'; put 'put ''OUVtJjQ6ZC5TR3U5cTlJJE5KYEJbMj4lJFFxR3FfVUhTczlFdn1qYWJCeCJyVWVMbSFHNl1AbGB5UkZfRjgmWmV0XWBXQEJ+azxsTj8rfDlpOEU8KXRMWSxvKypKbjNkSjJhLzElUzpzSXZ2dmpUSlRqcCx0cGdSOS8jSk1zJTchSXc5a0Emc3pEQjF+K305THt3bllFOis4TmkoUXE0IXswNT40''@;'; put 'put ''MTRzLEAzdTszOkBXOT9AWFQ7O0oyLjM8OXxHUXFYW0E6Lzx1KVohb3ZCJnxnR3lUbF02TSJxQXtrMV9fNXFJY05RNWd1eSYzQTtDTlo3Yl1ZTSNXdUt8ZSRIMHN3L1laI2x1bnNST29uP1RGR29OSE5FR0diVVIwezZ+TDNfaH5jfl5waSx1RT1ifUBaISk8XXxLY2tuITt2LmNLPjUrXlp3VlQ2''@;'; put 'put ''QXNPY2VWZF89Wld2aTkpQERKPm0oMUIsOCpzMVllJTlnS3IlYkpdSk1rbVNQUVA8L180c1JjdlhfYGdAVkQ3VnZhc0lOeXFtP0ldPGZMLDA/RCJKKG5WT34sPkRgTTZYdSV1cW1pZ3o/XkI4ITRMZUU8RkJgfWtge2pKODIhOUA4aVdRJUh2OV1NbipXa3BreSZIQXxvXUhtSSQ/ekhyW3d9VGV5''@;'; put 'put ''MVtJYHBOWCZrJGpwVz95OW0rZl0pRX0rVn17OTFyNChfZEs9c2U5YzNecTZgK3VeO3J2b2IjUkVVMi96RFpMV0hZPTshalcqW1ZiWHMvQyEjdGtTMX5MKCowbmgke3R3RDp4XzNtdE46dkRaRCJddygpQ1syIShncytRakV+PUlsOEQwc1ZYOjUpcmpEUD5rU1RYM3pkTSR9dSN9JEw+JFhmTGR8''@;'; put 'put ''KmE6SW49Tk5vYXh3I2FSUTpkZU94KnNbXnNQMCF5RSttN1csZHA4bi82YjlOcHBzMiJSQkFoXj5GXVU6RTVoTDhfQ113d08sXikzQldbOz0zQ3IlTVlwVFFYTk1rUSZSanwqNl5SZiRxNHd3cjFzVjUjZ2YyTH1SOm9wdzZUfWUuQ0E/W21jfV5kNiVwL2tzUCVUI2tJcSMqPlREZj5oalRfek95''@;'; put 'put ''eixmSURGWihQOFN7fDl9N2BVTjhXbWAzcU4xJGx5cERHPCYlX0xLP1h+UGdwc2VteXVSUVpvUzlOflF8YkBuRHJ1Q2peemYlUkhgL1NpLHMyY29FODklNyYwUDleW2dgYElxcyVaMWJqe2g/JkAxc3NpV2RnbmFzXyhjQzhaV0R6UTluKm5WSD1PU0EjaEZwKiFJcGxePGF8MS4lNWVzbShucmND''@;'; put 'put ''PkBjMTFJcSx4XjcxO0ZXbntTRG97NFReUEMsPF5mdDdjUCFCWFNyW341YyEjVn0laSY2IkBxbyw3OSVlfmBJY1J3NUdTKFc6dWM4YX5hVD0uVSxmQiZpcGU2Yjp0Kjl4P3tiUk9ndWd1WUsrZzomZUJbXzQpcnVDRVE8ZjVodCxoYWhUYUVGQ0hRS2FTblEqZndURTBhISwjMVgkRkpHV3hbbnEz''@;'; put 'put ''XV1dZngjSVtuMmldVk5hT2FZbChbQ05Ya0clTD80VD5MZHEjYV9AL19KbWIySUteJEw/SWlsdmNwb2E/P25zNDZuc2lRRT8zaDhXbUd8LFNkUDJze2RrXSpWI195YjZVJSJEPFA3PC9zRkN5JWtnRU1SKmZrfit6THdCRjxdNyh0cjhpen4mNiJKVVNHY0lAMDY4R0Z7akpHPTtdL042YCYwRGR3''@;'; put 'put ''ZTVvX2dnWTAweiJTJTRJUnF3QEBAd0M2Y21LZiZKb29UblB6SVplQDp3O29rZ2BIRjU4IUJLOmgob0RHWWFORGh1Kmc4Rz5yWE9DVTJdJUJKP1lCWXBjWURQLmYxK0NVbk9dbFtFTVN9OThbSFB3KHAvcHohOGZlanRbNCNTUnBwYj0wZElAREkhbT57VHxyOyxiXVtrdUYoLDFFWEIjcCI7djht''@;'; put 'put ''en5lLHFdVzhzJHg2KzhDeF1AQC5vLEZja0FVNS9GS3lQXUlXejJ8XjNGVE9kOD1pcz1ZSG0jNyVdN3ghcVhEX3ghcUNnJTl8VjNaaVdfdldWdSU9eSIkazI/UHcoRnQ0SzhUaE5pNkhBdk1ZUy9RO21wVD0mRjMjdV1ndWtZVWlQWjhQQURaO2pMTnIxIWYhTEszVG9RcWFOdl9SWW9ve3FJfXU3''@;'; put 'put ''PToiVzFNKSFgKkFsYXxWfStne3Y7X2QmRDYqYzwyXiVsek8xdzErbkJ0WEdvUF5wX0wjKj0mXTBPNyI4PGRLRzZ9Y3B8R0Q+bltkXVRVeVt7ZnpeamM+W3klMFBOM2wsN2VVS3M5QX5eWl0sKjZiRGl8bUtrSU44flpLZV1kPShUUjlHZDs+JjFJc2VCSzRtbVg9S0JVeHA5S3drUyE2IiJNNCwm''@;'; put 'put ''emAhJHF8cnNVZzk3dFhHMVkjLz5leT1tJnQ4Z2VtM1hgMj1mVj8hcnhbOjFvbVUiTGolckNWTkcpJXMrSkY8dmNnfGVZY2tUYz9eYklmVn5QZWpNbWZ1PVlMOCVPOVo7Qy5bYFNaUXMmXmhwI3ksY19zfHUxMXVGKUcsajxuOndifXhab18yTn1MODV0cXBYZ00lc2c7Kj9pVmw0M3c6eW5Ycnd4''@;'; put 'put ''NFFGe11FfHtndXtFYSY7R3ZfLClfNmF+bDo3OkA/KTpdP1teaDIqUDQsJXt2LypQRzFtXlR6fi5ldXkpUStJbnwuX207KmI6SmIkUk9dNXouO24sYD9UMiNlI2ZkQCRaVXBnMz46NXFDYnU7LG1QTT06VjNjOk03OylOXXt1Ols0Z1lLPXJQIW9AT10jajs5O1pZVUJPZFg0UT43O3FoW1RwMWx+''@;'; put 'put ''b1pVXU80REN5IWlQTmErYmRpOXdjRn5sJTpXLzVJJlVZb29SfkN0TikzQXc1eiE0Qm9vfERRR0YoOn1OI291d3ZdX206aE0/fVpeO2A1byE7RURiZyFLNnp4JFs/fjpZLkBtVSN8MUpmR2U6P1ByUEZJNXFIJE0pOz5VaDliKTE7WTlgL1Q7RUx5fkliLlBfYSRSUWY/P0tTYkphdk8xVkNHRVEy''@;'; put 'put ''TDcxdTt3dVZjcyVPJXgrM0tnODdLOkMwJXs6ZnxfRktnV1pRUnc1VVVVRig/cEghPWRbd1hkU05WL2FkdkdGSFBtV2ZLVT4rXT9nL05pTnQ2L1l5QnhSRyIkIjJpcz5zL3RIL1FoaEpFeEEvPjo6W1pbOGdUMThgQUxXazxTNyovMX5QQSUiMllbUDNAOmRZcjc7VyFOVDg2TVA4K3dDZUYhMH5W''@;'; put 'put ''Y1s2ZU51cmQrTGhIfnltOjgzcG9pT1RjKDlCeVsqS0Q7S0hdRz07WmVZRH0yWmV3dip3aVd5emoxUkp8bWteTHtHZXB6M1h8fCJNcTlFfDpLaTs4SjNXPyl9eXRbVyVKbiJIO2kwOGYkK01bMXR6PnA6OWZ5MHY2PGlaUVp1Vms6aU5GKz9lfkk3SHwhZjVxez8kQzQvcHNWMGFdZ2R5amBPe2hW''@;'; put 'put ''NypjOGpbKkBwSTtpRCxyeyQpTip7NVFAeCluZlUuQSZsUmpsbS5lTU0lc3coaWtAeSlbJWdoV1lALkEmNTEvLFppJGFwZSkxbE4/Z08hY3E8TEReXmZHZTR2TTo8I0dCOUJGTjlGX0V5QDhDbHJlQkxFTVIhWXk4TGZ8THpLRTBkPCJCfEh0QGhQOj5sT3h6JnEiTiMuLH1TenF6UEw8TX1YLDQv''@;'; put 'put ''KVc7VHs0cHc3S1ZsTHVMX01VeFh9SFdvbGBhRFAqXlchKUpVNmkmNHFoZVczX25Nayp+cHxzOUs8bV9VO2thXT0qbVM7WilpeFF6Y0hBJl9GOlFCWDZtOWFBOjNnN1BoVjJhOFdbZl80MjZWJFAxVWFZS3FUdCFKOnFbUmpUcS9AfkB5Z2xgc282VzgxPW13ZU10Y25xeD5mIUxeO148PTNsYDpE''@;'; put 'put ''e1QvUGl5V2YufDR8aXE+d285cXAmJUw/KG0sI2dWUXJ9ekJAOHF9eiZWfUNmbiRQYntfKjNpbj5rYk1hN2E5eixSKCU+Z0JfNF1bNV92PCxjUnJxZWxAYUNqWXorUiZZXl1jJjE5RytmcCJfYm9JZCllTGBlOVUxJDgkS3pGRHUvWTo7YjtvckNDPEA3cmMsRzBUfT5WKkZgciUyKUl2WW49QXEz''@;'; put 'put ''KUJqWC9uW2JAYUEsSCVuPDFMS2B9MjBRZlNYZ0YpLF9vYDxNY1EoXlsrMDpIdCVMRVVMV2lSJT5nJWY5QUp8eiVaNGJYZHwmM2c9OHJjPT5gZDFVVSRWdWgjMDJCOTsiblUrRlsxeDh+Q2s3IigkRkV8SjpLYEZjbG9vJkQjOzlpMXtKT3p7NFIkQ1ZpQH1sPUJsUXldVWh6e3tSdWpgdnpqRz52''@;'; put 'put ''S05pe3Q6dD1lPnI0Rz8+NHI0dD9vbHo/T2pmXkRKOTwkdCp2MSxvV3hOWFcuKV9Xan1UY3MvK1dzUiU9cFRbVy9Lc29ibCY9dkI1RXJyTWBTL2hFPl04OVlyTVR+OnImbDpFTHZCRkhmUnNlY29HZU9eLj88S35IPV1vOWwlXUJJRUJVNVVkaCJ6PjpETEk/WWU+KXUxIWF2KXVuYGRDSUF9UyRU''@;'; put 'put ''SENYXjtIQ1E3M2h0dV1AXmJNWmZGdltnMHQ5KX13djwkc3dJXXl8JklpNEo/SjBSOHxQP3IidkclYzwlfFJ8aGUuQCZGcFB0RW9ZPHBodHs/Y2Q0X1QpZ0Z7YDklPnVbfTBzQEQ1aCRLQ293KTNbKX5LL2RsVSNxd0hPekQjfU9QViFhbmAkQ15uISV9OUxCbHBDdV9BL28qT3c1PWxCZkNIPVNo''@;'; put 'put ''QD9YY11zQi9TcEdSRVssaGc2Wj89LnlENCNrUTpAbF1uaHIvbSsqfXVKZlZbIVpyQHw9Zy5DYF1mXmVvaS9IQ0o9QXpkSm07WVdrdWF+YSY+Z2IxVWhQUlcxfjNZJEk8TSRDQkxMYVtgLjYiRH5hNCw0VVZYOFZ7QF1HZVl0cXNVX044VmBRQ0JRcmhMUz9OWzo2MFBsXXJ4IyxDMl1EPE09MVt9''@;'; put 'put ''OCtVPUlGZH4zJTJJZmZ0VHgzRT1MVi9eKXhQOzxfbm9HRj1yPmR0cyQxcG8sP1opOCRSPCNSKWpzJWhlPjEwKDZ+aHU0ezRjP3BURDYoLGJRRiZaajEsQV48RFB+bWBvQGpZIjdofC8qbCVsIjovWEpDVDklTFNsVXU1MjtEYSsvJHBBUXdJQTk7b0piWmZ2SUNaPTlhYzUoXWVsbWNTVSxrfX54''@;'; put 'put ''Yi92OltfcT46YzY0X3NCXiMhXnFxWGBXMFpxUHw3REhbOz9vaUJoTTovJlhaNGdpL0lpJlB2YDc5PGg4aC4mRyE9VlUvPEM5Nms5KzhnXTFVK3N+XiszOXM8WzNWYmlaPHltPkQoMWY0e3FFVnciaTY4PGAvUz17OlVvRSNBJntANnMmVDNxJlRMXS55RHB1flFBTT1QRjBjZnVOMGQ9TnVCdUZk''@;'; put 'put ''KX1FMUMvMlJsSVgyP1llMT9ZZVA5N1t6UlVbOFZSY3kiJW9FPjQ8SWFVKG4me3VSY2RbejdVclFAMU1RJGRoXmJ5ZGY0YCI0JkU8OHNHLCo3WSxudlNnbEZlc3h3RWpEUHp2Pm51JmM2Y1NTKFdTJFAjW1NwcShMOWBDenVeOHFOUExaZDBBeDpOQFl0WVZHYy5UJWY2JndJbEAqWEEpLz88XWhi''@;'; put 'put ''aDEsdmxWdVVrZyNpOyo2PzN2VHglOEtoZjQwPXArXnJ7Wl5FOzl3VkNlNlRpblp2YTRnVWxWRTA3b0shV3E4LDhLTXNNfE9Fem5qUi9vPXxWSncjWDUuT1UhOXxOTlNnKCtvczx2OG84ZEpOO0BIUHEwSkpRYX1dJTdEOSZTezZeYm5gRUtYTmYpQGU7Wz5lOksseSRMP143KTZ3bVgrdUdiKGwv''@;'; put 'put ''SEQjNiYmKklPWjJlKHBodC5+N2ErIWlFXjpkQjtsZnlTVmV0e2Erb29acE5EOiE5ZElqPExPM1lwa2ZOT2omaytmZDIsNnVvQEFRTVt6dzA2MlU3fFpZQCgzZlZeMHB4bDRuOjN3dz1dc051Q156cXY3YHV4NTNPKXxjZW1GTyNdXU9lISNNQnJgKmI1YG12NDdmQmpeIm5gW1VROF5lKGt3VXRS''@;'; put 'put ''TyFadzNpbTNLe1pZbEFbQExGdzh9aSohc3lFZTQ2clRSaXghMD4peyk7LyJGO0taSzs/Zng3YU07bzN9ezxGZUJxIXoya1phKXBHLGNuJlNLUH52aXxgVlEzWDhkMnlbajs0VEM4MlRRc2FoeyJzeTsza0A5LE02ZCN3KC5kZTR4W2JPTShKRmJ+SX5NOHVlNiZidEhNdEl8dF1CLzJrTyRuSGZn''@;'; put 'put ''ZkdCS0siaTpLKUlLZDRQMmteWkxDe2BLbUI8Izh2Zl1QajRNS3t3K2Q6RjdNfEhWP245bjxHIX4qUTh6d3JxTCMpKE5sPkZ8MjdlUTZ5NWAhMy9tc29nXUlmYGwzQCQvUkZQMGQ1ZmFFW3Vpb2FlL3M3QEdOK1pNOCljMkc8MnBDKkRXbkFLKlhqcVg4O2ZlPk1yYXBwM3FDMk9TXjA9JHYiOCtP''@;'; put 'put ''YjxBckdSdUQ0Xl5OSVRJN0pddWYuKT1BUF14VHRrVjE2dFRgQlIvTjQqJEtHLGw3R2FMQm9bVG9sQStwY24+QEBNPz5vQkk0NnQwc3FReG5xPDpkSjZCJktOX2I+TSVBY3lhKnEydCNkQ0hTQ3s/cnV9aHR3JiVPZ3J+YEhObUZaTHt9OTs/WG5mPEpVYVVeVXAzJjliS3Rra1V0KnZXfUNLVTIs''@;'; put 'put ''dj10N2kwLjUsI3xUaWhzO259cDtmbVs7ZDl5K1txWH0ubyV6eGhGOmp5RmZpX1E6bkdRb3h0aEwxLzNRMEdSNF8yP3A7VFU5NFBXOjh3cSRDLkRzfTtqXjlrSVZYWlI3WUI3cyQpRFBYUlBULCtEJjJSRUhOTi45MCMlV349PSRmJjFtOzAse0chZ3BUNEJmPSFCPF84JVFNZkViaXVQKEhjKWZI''@;'; put 'put ''QX0jYmxEdCw/TT10VztXQiIucVM6S1srMVJTK2QqMEV4emBxXnd+aHU0eXQ0Mkp1KnxDJF9pLGldOjRtSHlKdT1bXT1ONU5KR1hLMSxZYlNeYHlxS3hCNSU+dEldNHJjflFkRE5Tc0xwIzhTdmx9Ri9PTTNUNGg1Wi9ESkcyelh6UXBSSmhbaHpwUmZTamFyQl9maDxgM2dhY1RQNC5gW149fWhL''@;'; put 'put ''UG9DVFooS3cyeEcpJmFDZUZ+NGJxQDR8fUYseUU2a0AuZFBwYHR+SEp7JWhYWllWZillTSR9QksxUkZkcENkIlU6d195U3g5eXFWNkdoKSgzY3BiVGZMQF97LGVaWy9SQ19TZipAWVZSazVJRnJDWEI/SjZLXzQyYmNQVmU5Rl8lK1dMRSUwUDU8PGBoWkRVcjk8IiZEW0ouKkZZfEowfXJARzh+''@;'; put 'put ''OyYrYEw7eHdQOjowPT5KQytQTE1vY1VAYyg3anl0LzlKT3p3cntQKFZlayRha3JFfCtFcGBrQDpqV2N1ayVSL0BIM2oxJnchNiJOPWFOciwyYjxQNnxjT2x6R09PUVt2LDFhOy4/dWVjLDoySmV+LmsmJWd9Xl4zUUl9QkVdWU0vTmY0WVY6ITl2Wjt6YmZOMjtHUmU0KC5mPigqWmNAb2lXLkk+''@;'; put 'put ''VChUfEdeWG1paUBKSFt1REY5YSE1JV1NZ009ImdbLnI/Y1tsRDdbMV4iSVkwMVNdJSoqMkpjVEFsKn19Sk0maX50Xz1EJkJDfk9PRmFrWDxeQ3IyeDhRPUR5RCxvekpRT3M2SU8sWHJ0Wz9wVH5HNEBhRDVzYEY+alE9UmZLSSxaZHM3XUtSPH1rKkgyPWcrLkVdNTU0cDxGPEMwZyk+K1FAO2h5''@;'; put 'put ''Lyp+aTpSUmkyYmZWQE0iW0koenpCXWwhI35rOk49YkZ5QjxUXTpOPW5Cekdja3c0U1Q9NDFFTG17aUIybS9UdlBbeTJWPE1rN1ImPDY2cE1CU0hVUUo7eF4+OXYxOCtTakx5UjQxfWBIbVM7U3gmLHBdMlV0QDk4RDFKQ0tCTFlme0RZaFhCNTQ0QFAkK008c0QifCpRdUw4R1ZEYm4sQ2ZrdXNy''@;'; put 'put ''QCMue0w0SilPWzliZCYiZEpzWHJ8WG0kJX1LZmhWa3drQzw7bV1nc3hUQDBtSHA4VzhzOCEiLCt8NVQrd2F4V25wS19nS3ZqbkkkJTpdP189JX5HQE0rUWN1PnU5R0xMSVFzWG0/cilTTHpbYEVNe3NPeWlzY0M6UjwlNzglMDB2QlVpeXl8U2Rhe01zLlE2akVyeHZ3IzhLRDx9cDIsP0M5b01M''@;'; put 'put ''QClkbk5YLjQyO2BWX0BLUXVMdWZ3NV5LLFBUdUZJPCpZRE9tP31KNzdHeHZFIVA5MDFbV1VpY2h6WCg4TUNXRTdteSFmK1ooVypYZTsmcWY+KnZ7YmREU3gyPUVyVXxuLnBEYntSQS9HMyU3LFhCWCtxNDhzIzRhMEZbb0EwJjkudVE4TTMzbXVYWyltO3p8fXQqfFFIbj5heXp5R2V4TkUwfEA4''@;'; put 'put ''PEJ2cUBFRl5Qfk5ZQkFUInlKNFgjJkIlRSlyKW1BSil4XUdUVGY5RiJwQ2tfYW14cz5mTUkmTyhjeGdgJS82RkRqc1tHQ2t3KUg8UlFzbGNZPE9LQV5acDxQRU5dVl4vUSNfR0ZGTjFlc2xSUTtXVGBiQipFbn1yPW1VdC9dIWRYOFdtPypUbUk1QiRZLEIxUXtVKz5JYU94elZrX3YoRHUjb21I''@;'; put 'put ''QkFKeUpDS1BeZDhkOFREMihvYmR0WU0rYjpVYms7VjV8cEtgUS8laFQ1WTR0OzImUUorO0VESDc/K2ddZjRuV1YrK1MsczJReTVENjUyLmREMUhxLHxrOipVKWkseXc6aFAufmVMTDI/d040MSVwaHlVanJ6YyVlWTB9KiFkWTB6QFopbGt3M3x5Qis+QndHZXRSYm1wPzcjTixnYz49MChGWWEk''@;'; put 'put ''VTwhTVtgYmN5JlZaLFR1MHAvQFdeXTcqdXlAbFE6W0lkZXBhfCM0Ym5XVHdNIXw8PSImJlRtMFhAZ3kjJUB1eDdlNjJ5KUBAMWBEXSw3aTFnKEg1NSN8UD5VdTIpVGx4UkkxMHBUV3xvVSgsNThmbW9geTFJfWRjMG9SQCt6TVIoPyZIfDFyKGBfYytvTkRVVnVDdzg0Q2pHd3xae1QuOj82KXdQ''@;'; put 'put ''RGhHTmwzXU82Rnp9US9VTzNwSHFdfVJ3bExVN20vOmFRNFAuNU1MeTNvbXZ2RHZLS3l8dzh6fGxBVV0wK3ZvVX1dPHc2Pn1GQ0d6ZyY9bXNWUC4rIWRGZEZJVjhRcnFIa3tUeVVlUjNtNj5NOmBCYzdjMlF6TjBeelpbO0c7OklrO01pY21TI2I1ZDlnN2A9WiQ8d0g7WyUsRTMpblIqcTcpQ1NS''@;'; put 'put ''NSVHWVdENE41WlsqdX56ZmtSSjh4cTR2cypjO3BSYVNvaXlCKV5vVD09eCQpYWovO2I3KW1hSV0qOj1nWTk3Qj46YGQmJlNEMlYoW1JQZElOODwzZT14JkNdZmg1aWNham1rdEs6NiFKW1k2L3NIR14hd143K3R6d3FlIld1R05fX0U6SkZsXlt3PzkhdUJdInp3ZEJhKTo3V1dpSVlXakokL2pl''@;'; put 'put ''YGpgXWp8LiJ4WDZ1ZV5WaFE/YUxVKlEiZFVTanMjX0Q6JH1EUVB1eFldRl1nezV7T0hjPVVlKHFpO1IxZCRndGtLL0VnNHhoVjcwaH1DcyoiKyZ8bGA4KGJRI3MxeFNrRzA/Z1J9djFZWTNDXUk2dmFubGAwLnZYK3x8S1NhYGVpKGlPQTRkVDttdXc3XW0pL3o/dldubExMSyJiMU9DaiU4MS47''@;'; put 'put ''IlglNmlzKzsiTzhfUj55SltVYCF9Y0dmOCJia3sxLkxLbHxkfDIyTk13IzREPjsuL2hdR11AW1trUnA5SyUxQU03aUZIN1JiSm1SJDc+O21wWjUxNlAwQXpwTyldVERAQEBAQ0tHIWBUT3pzSEtUTkdlYmxUQEB9d2lzb2VuIksqNXhKVmdzRmN7UFIlMFk4LkQmRDJPeiNlPTE5LHp1QSxKZnJw''@;'; put 'put ''OUskOzhnVE1+TzpreVpmImBlKlFyWnIwKmhIKnx0Mz0scjNBdk0weTVWUXJIOj5dcCRgI0ApTWNrZnBdUzpPe0dSISVgeVhPRWFYUFlhYUdfMHttRjVLK0JnamNFTV11TntHW3p3Rzh8VnQoX01aaW9XRX5vdztUUl1pI3tnQ3dpanZ+XmFaOGR1YT1wXSQmWXgvWEhxYWk2VndAfmNzc0I5TndC''@;'; put 'put ''KWN3QXVuVyo1ck1yYXcwTmlOUUI2bjFGNTNGdSNHez5UTF0odVdbU1J3MzJvenkpIyl6bDpraTZnKWlocEd7SCpLXV9GWj5YT0dnRFZwNVpYdj5KPT0qXlBzYXAjelA+dz1adktkY2c2ek1OO1ZHdyZaIUN9eD9MeXxgcGVZOFs3WFgrfjNIQ05sU0RhTVo6ZmRvU21IPEJHXVRFSGp5eXxWNGFp''@;'; put 'put ''SV1yYzkyIm82b0pyRX4hZippJHwzZSppQn4vZF5vXW9tSXNHdGEjWSFzJk5IcWp2cTNYNjA1WHFLakpyRm1NNigpTT54fHYmPlA9KktdVCFlSm42OyklI1VIZi4vYE9ueC4zTiV9L1VmTzVoLls4PU9fIWV2Pmd9fGBKfUF5VTYwNSg6VkdZWjhSbmE+fXQqRTc9WUJMZjZhYl4hOigxTCZlTl9A''@;'; put 'put ''Liwhbjd6TUVzNSFXTmt2amx0cSV6QjB+K25vODx+fUdXcHtqWSRaNHZMbncuRjVxM0ZZSVN2XjtXZXJWKTk9OUl9UT10bWFIKkU8JUdeeXh8LkxHYDxWVnJNQFNaJVMrL1FiSzx0Q307b18+aGBoNHtMUlNiQ1RRKmlYSi9ZcjsjbF5LaHFZYzl0KmUkSFFQaWU+QSZhakkpZFREZzBIVSs6Uk5p''@;'; put 'put ''TkZLankie3A8UV4qNT1vVnsqQE5BYyh+UG5BW1goeDV4eyspcThfOlYpTysxOHJ9U08hUCxhY3IwZmxjPHxVVX0vOGxlUS93TzBsWCtRd1hROHk2VjErWy93UkhGJmxmMEZPIyp8Jn5OUF8xTk9La31UYyw+MEBMPkwrWno4L0kpM1dXd3ptJWY1R2psb3wmXUhsdV5+dT9mPklRK3c7dVgodFF2''@;'; put 'put ''SFt1O2B+bjZMbVMiJV5ePUlCSFUrWlVdT3ZIa1lfemZWSih1UTwkekMwZzlgUk9DZUN2SHlUcE4hQ3ZAIVYlVjtCLlgjY2Q0eWI8Zy9kJmxZMGk9SzdAcTlZZSghRH1KUHd7W244e1Mhc1E3a0UxPENYJEwhZUxSLlA2cGhIZiUmZHBsSSh6Nk56RW1sJi5RazJvPV5KJUhwZClAK0UvT11xOUEp''@;'; put 'put ''ITd2YDpkTStpWCFsOkRGJkE+UzVMU1RhfGNzezQkTWR7WkxXMkk/TzMmbzB5c0spWEREKX5xTSRZWGBFRnYiVl5sSX1dQ1h1I2tKZUFoTXs1VlN5XUI4VzNiJkM+XjFCRnRGX3h7fD9xNXlAKC9aPnlkS0Ixam9IdkhGc31ZUzN2WDlNcVswT2Nmbi9KXTQhKVs6UyJbNHxzcyFgOipCSGNJOX1S''@;'; put 'put ''RlModUI4NjQuQU1kbk1SekZNLEwpNjZVfmpuJUdPdVhQTll7I1d5IkI2PnQscUBFTCowOkh7Jj86Xl5BfWlmTTUxdSxPbmBHQCF7cUVUMyo3UFA9OyozI3gjPUV+WDBRXjsqXzdDVyVuPSo+bzx+VWdyJSNafF9STVBecnFiZkUpNjFkVXN4PFpnakNPR2J1OykjaE04WiN4NCVeN09ocD4jQkc8''@;'; put 'put ''dCxbVnNTTTF4JHglX0l7XiZnW2FkOjddRiNhPEUjKDJRVW42LlUyYUAxImA1SDRQRThWaSh7U0Z7I1MjXkRCZTJmZT5oLDxhJk1LTlpSQFclKX0/fW5XPGNralFTYlYyQ0VLQktKdCM2Jl1DeThjUzJ4aSw2JjZaMCNVa2hTdy9VOVZfUGleVX5lYz02dWlFVlRgXj9VSlpua1p3RzVdVy5RO1ck''@;'; put 'put ''aSplPW8xSF9sZXRROjlRfHc4JSpWIjg+IXcxSFRuRTpHMiRaLjx2a1I7dyhyTSM9VGhyVmZHZTdtQSlySjo9b1E0Lzp4dlBoVDgsNj1DIUJePCNBT0c7MGg/d218NiZ6dkhpQntaIm56dzE7YCs+eClSUCNKczRYVUE3eFM2YmgjJjcrdmBLIzZ0XmcvVmNRbDxQd0AhaSxtaU8/Zj14M3ZZX044''@;'; put 'put ''d21JYjxkTDdyVUtqSWY5SThsTyEvSWNhXVZ4dUBmOFdNZj4kWGJoeHhvdk5KQG8oLy9wc0dXW0w0XzwpbFAxcGNxL0AiKmVGYCslYG1rUEMkeDVNPm1BOSxgemZIZDB7aUB7d0kzenpAMDwsJGJEUGYwdSE5fTE9SmREUGRSUV85SFpTODJZeWghVnRrdX1SJmopKzwpJXw7ZGJGb1g2aUU4SyNa''@;'; put 'put ''eEtEZGJsVFZxWHI3PV56W0llTDFWOi9fM1pmYHk1RSJGcnFDMzZhIiwwR253Vz0/Qjl9fTE8bGJyL3dIRD5UUUc4a192YFheMG9veE5oYHdvSjN7KyVXTjhUJUZmOGRAdVhhY1BmYWxldUcvcXYyYlRmM1Q+Z1Z2Ql9iOnJyaEVbZml9MTBoSF57W3M3Ikx9REM4TjE+JGxnRThKW0FpUzVDcE44''@;'; put 'put ''V0s4YTQxZTYvXXdtNTNOYyl1NiVZV1JpS1JTPy5HIXFWQmJGUG4rfGMkVDZ8P25CTCRmRyNxJiJoYHdvcm1oPDBtWF8/WVUyfSosd0cpMmh8bHFkUFoqO1ksdVJ0VDh6R2U7SStTaWxVaWxxWS9kPSh6US9xbVZpOEo8VDcjVG1RUmxUXWpsMWx1c2BMRlM/XT5PIUJMTU9ITnFmV1kwOHhRZXhr''@;'; put 'put ''cChaVEVmKUx9RStsQXosMGdDfV43dUgvdGFAIzcyR3YoREBqWX5Gd2I/Nj18eDF+UH5YOnAoUDF4UUtnKXp3MmgydHJgZWNLbURqYns1YkoyV3NsU3MyWkNYRWBObm9iKTRTIyRvYEZQKitFZmoraUR9ZSsjcXkvO0xvNi5dQExLRl1jNitkfXtUNn1zIUNQbSZqeXZ1aCl9PUBaaS8kVmA1Mjo/''@;'; put 'put ''PWRjd3guUz09dEF8Lzt2e1FdQEB+a1BSQ2UhO34wdWlfcU1UWXlwRTsjTU8mK2BzbnohdmZvUFB2SEtSQCpbYGozYEN7NFgiSVdjSl56InhrMEMzWCE5ZktWWnJvKStJYHYvJnpXSTM7TCoqSiROUFBufHlxKiJhUis+X3x2bXIvZzFeZlZpKVszVVVDd3x3KzFNWz57TklnW29pWjdAQDZ0fSMj''@;'; put 'put ''UUBySFJjM1YxfmV0LiVsTzhXYV1HRFh8b1JaUCMzL0Y6OT05WT5eLk9eaz9pZk5eVXMjcEM7KFY/WjFufVYxcmlPIXdfRixGZnF4OGpWSntTLDZBNFZVR2VaTUNlSzxqdC8iZX1NaU9eV3JoJStYfnEueWs/ISZYQiJ6RmBBMV1QUFU7YTdEK1siNHdYYCUoQntJbWNUcFpAPz5GWEVHJlkzKDxM''@;'; put 'put ''YUw0OEhNI2ZraTAkPGdAbWVqN2gzYSFdKGRqIlJIOSZJKDAoa2k+SStjbGN3enhRLGpLeT9JRnR0QSVBQFhSWmFFQWdzODVpcCtqT1ppYyFdS0Y8MF9sRXBHezloOyl+SXxYbklzVi9uZyoxKyw+RmlWYHYmKDdSUn5FcTMsQlVoZztoXUwocXZIKE4qeCt5d3FsUTE4VG8mJHx2cGZ+KTNXTHU1''@;'; put 'put ''aFJ6Z155XXlnM2FAdWVld1glQnJqZnI8Z2o5Un16cCFSbS9DKENkRUosTnVDTyZ5b0pYN29+PHJmdltWc3gqTVFjIXN8JnUpISEiRT55Rm9pPWwlLD5qMmw6S3thQ1IpfVZRQmRLLEhVOVpmQDkqPCo/Vzcmcmw6Q0I5O1NVc3hvenZ+bSQqR0M7dUNoS1I5SS8yNlVGVUdjLjI5ayVoQFpremAu''@;'; put 'put ''QkFKXUVRZlZJUCJpOkMqfU5hLFRDIzgwPTZvXz9NSl9zUC5RJSkvaj9AUGpKTyhFKVM+JGglIyxJN0AmRD15Q2kyYSRUOVJvWVsvelg7Uz9BS2xlXz9CbiNFI0wqcW4yXzdwNWNTO29BcTtxXzQlXUVlPXhYL1kvJnxUO2tqZjhpOCshb2RKPFZdLHdrVT1ZRkxZL3s/Ui57ZWQ6NXIpdXx4Kz5N''@;'; put 'put ''SXAvPW96LH5PIT1HPTxiZkZsJU9pXSp5Vjt2U2JyR2k3R2BpY3FwQ09DMmhLdEMrS3FrcX10PUJTQUpvRnYwezNwfUdxN2p0eEYmdUkrQUpGcVR5YkUvSS9wZFVyT1dgNzttdyFDc2c9aCkzLzohRWUlPzVdS0YyODp+RDIhK2woPzFGPDhOK341VVQhby8qMl1DW0xKIUpeIyxUc1sraC93dj0r''@;'; put 'put ''akMrPkc7bHQjKVlxWm5pZl5bS1AyQSUsYHplRiV2PS9HfkkrPnJFKCZBbTpJSVUhcDN9PFp3Omwwe2xmWjFpdiUwamJnc1goJjh+fSpSPGVjeU44L3wuXUhgNGAqPGp1SH1VKWchIzRLM0ZRZlFQZ044UWVBb15PSVA5OW0qcG5HLj5qTUpmQDpxbVEucEwheW9mNWFkWXIufnJ6WmVWVWwwYkpk''@;'; put 'put ''KzxiRFp4XmJpZmk5V0MxcW49KTZodkZMTm9oWUR1ODV7ZixqPVtCYitEaHBAL2x1K3xyVHN6TyklbXNNcHM2MUNTOVQ6JXFbQ0JQRnEvRlplRHVBTV13TjhYJSlrKkxGbEBpWjk9SDZMZ0FvSmBpYF49SSZCV1I4VT87QE9wQD4sVCg5SFlyeFNGS3FUY3BATE1DfEp5b1hyPzEwISRxPWJZdjUy''@;'; put 'put ''XT8pb20sKzYreEAlYlRES0k6Xm1AZXsxb1M4em9ZUmE+OEUrUTtRISt6NV1FY2NrU1s1VnRdbV02SDJJZStqNkUrdGRUSWU1YF5KMHEyLmRlaGV8UjhMO308aHBVNWNAeGRMTj44a0Z0Okd4UUJQKHBoXTEwLkhbYDQsOm5VMk1xfSVAc1AwZjVnbmt+YSRiQDFOLGZwZWE6L20sRjZlOyFmYUgw''@;'; put 'put ''X0ImSHZgISojR14kelJ6a2VgU3VUOixhUlVbPjkhciFvN0BVaUNYZ3V2XWNLeF4pWGU+KkxBeGBJSWppSU1KQy95RWNqflIqNmthXj9CMmxFLmZIRSo/PylUUmxlZzElUiV2YT1ZcDVWRExbNjcufV5sYU44MCJ5Q3Ywdl1MUDNhL1JiX0RDJi5vaV9bWUtsY0xpbG9HTFRKM3pmOWF0UThWIU8w''@;'; put 'put ''NT9IeFJzSUgjdHxaITN6MlchJXVSS1VhST5OUnNVc2RHIXtAbCVyQF5hNk5oNjQoVSUhK3ZHR2BfTnx9VmxqcyJNP019XUVLd2ckQUlZLlsoQnwyaGZmKEt1bUVGKiRWYWd3aTlQWCF2Tl9HZjhzRnxbNl45ZD1pXzwjQ157d0BAYDI0NlZsNSVXaEAyNE48LktuM0FEaXdIOTdreSMjQ2JXbEY0''@;'; put 'put ''e05fSERWIyNDVFclQ01UbGFSITJOTilzPT8xPVhbLiZZZDF9XSZmLyxQfU16ZGZhcF1XNyFYL1VIel1JJHR6OUlwdGNXT0B+XXt+bGBTPjI0Rk1WNCsjUjF3Wls2ODVWJHU6KzNKaXRZRDgucl5ERUB8TFldMHZgcSV5InF8QEtfYyYhPW1ReD4pOFFzQ15PZCk7I3EwKV5OYS9HXVdnc3NOKH51''@;'; put 'put ''Ol92SGpEWXU/d0dgNjgka35yXXVbUWY0bypPIkk2TnlwRzU6VWJoZV12VVUhLloxImo/NFBrMHViaXhFVSpCQkN4RkhDb1hyIm1ue2spKko+KTd9YWtuMXcqLnt7VnxBVil2NzJXKzAjJG9QdkgkSUlVUEhmTy9qbXgmcUB4UEhQOmg+UE1Id0dxR1E7XkVEU1pbb3AvMzxNaUxlMjYxLy91PDBH''@;'; put 'put ''QlBIUyFYdmNhc1Q6QCMvenVsfWZZM2diSXFgej19I1QlXmJ6STldYnBSTWNpLDc7KTUkeHZFJk95SXFJVWQmM1NtOmN4OWRCTU92K1kyd2ZsKnc1KSN6dXZZeUJZRFZ8ZFc8fEN7YGpbTi9fPGUwej1VOD9rZmRWbUlqfCx1M2FWI2NfVltqVyQ7UCEjMyRHaihsRVY0cWdkZXNPSGVnR15JKytH''@;'; put 'put ''XT9vOFdtQCYrYX14fHVDamE1QX1sUVI3UG9meldbOThoVCNnV15pcCx0X3QrdzUpMVtePWJLRSFgR2wyNyZZaCkyWjwlY1NNcTQ+bnVaNnZ8RXczemhyczdvLj9+NkNIOzJDN3g6ayU6MlF4QHNOUCtGL1RAc0ooenlAc1I7UF8oRGBOY1pnPTRQMmJmTnRkPHhGb1lITEhFcTdmeCh3akk1MSRl''@;'; put 'put ''UjdVPzRYJF0laTdKc0lYdHV2XjkvZFV7Ni81QjArZ21sW1IlY0c4VEMpMil5XiwwTD88e3w6fm8wMltzY1pkaCRIQE92SzZ3fC8pfl97fDdWQ1BuSHplWCFDY2R4bi9se0U4cWc/d1tdZD9AUzxDP1tmTyhGcXJHYGBFNmVTamlNQXdAQlcxcm5yUHVNbWlBPHhuN2c5Rl5hWVdhKkZKQzMsdXQp''@;'; put 'put ''WXYua2d9U1F6fXBUMWV9YVQ8I11rPGZNdWBjOUkjIldlbVBnIVd0e1lzRFZPcyF8WWtZcjVxSEBXaUxNREh0aX1WM25yfXs2eDooPVEzSnBkdX5ebWUzXkRUaHcrSjV6VTliI1FNYFsyQnU0eDxMMWVHTFAoR3Jja15tdTBLK0FvTCo6Zy5lI15tbSZTbTxDSm4leX0vJWl7YlomWXkxN3ZMZ1lH''@;'; put 'put ''TzleaVUyNXFme1BxdksieVF3V3Q4Q0RaKkNELnkrNHx6fnEiYE5eYVZAejYzJjRCe0cqSWJ9UyskYFckYkk7eCgmeUF9fTJ8XXdyU187V3pmPjA4REsqQnRsWTFhZGhHN2dZXnJiVWBtZ2U5V3Q9Z3l6SkQqRC8+Lj8ydUgscHZgPDZZQl97NGtiak1HNSxye0UhSC9SSy8uWF5SUUV9UltnLGNu''@;'; put 'put ''JlNeRUBIW087TyxPT2RjNkxvMU5lRHA7JTRCSHJFVFg6YDEsYlF5QlRJVmZOUDM1LFgsdVssaDQmTzo2XTpwLyZ6XTpiZHc8Nyk8K293V0gpckI0R1dMaXldfmpGXSshNlRIOHo5NCx0M2tpRzU3XllHTlN1bjl2a1JyYF4uODwsJm1MWktaQmteTl9Jc1RdXjMrLikmbVlZWEpiUUxhV00zWHNq''@;'; put 'put ''KFtJZ14sUnxbRVgsdmBMWk5tRXdCb19ANTVNLGZkeldLLFgyLHd3JmdQeG4jXWNaTF1oa3RoaiI7ZkMkJkVkTjs3U1BfbVcxWzVTOixbWnxARFBAWiJwNj1wdFdfIldKfWZPV2BwMj5bbWVpPGk1c2A5MlA4SmlUOEppTlkpNWBIbURIM35xPWA7KjUxMEoiQjJHdWRSTmhNMWxZPi5hSFZEWStb''@;'; put 'put ''OklGeEpSQjVtdUElflBuZlZocTIuNEFAUmFVR1ReJSFiNSNyOVdfWE5tVi8vMDRRaXh0VjFgcDRseTVzIzt5KmIsIkI2PkJQMywiQjVoZjFDIjU3LzklYE43SHxLQVJXPl02LkczeHdsPG5LK3VJITtCNmVkTHdnTCozYyxOM0gqSjxLYUAmNHd7WzF2RCppdVQ9Rmk0Q1JBI1pgMmIqUFokT2p7''@;'; put 'put ''S3FgVmRoOWp0UXdoYClZKF03dUtpSWFhKDA0byp6SERJPH0qeE9jOHY+aVdva1hOIUVmQ0pDWntMYnwsRS9jRXRCZGdCQCludHJpfnxDbVllJltwJF9Db2l9aEJ8MTdVRnpsc0h4RF0/XUl4fnQ3Inx7bUVEbHl7WWY4JEpsUFlsTi9SPmdNWnw5TXMmN14qMTF4KFtyYi51ciVxdVk+RjBVbVNr''@;'; put 'put ''WGg6MTVWeng5UD1tVmNAYWpYdHUoTnd6ZUZDfmBhIUtTb3lFNVh3azBnOjllUUpiRGZzcCMsJkVVS1VVdXJUXWlLQGd3Zls2WXFJTn0ub1gyaWNDdFt4LEAuIV1CXXBGJXVXVXx5diFpIVFPPzk8S09XRVBfJE9YJU1ILmE8cDxCK29vQnMxYnE5N09sekldQilPMVFmbyEyekR9Pmk2ODArU1dE''@;'; put 'put ''Jip5ImRQayhMZl9XbVgyNFo9XXpmLzc5aCJ0biU+VyRvek0+STR7dF55R3c8SEg0ezQ0PHR+fHx2XmIlP0I1L0lrKV9weUY+VC4sRkBfRT07Ild3PUJMZXRqNn49Z1lZZjFdUEZ7eWdqX3E/WFZHUl8yJlA3Pj1tdFRMfVRXdDtXYF5FWGJecWAjaSlrL35FQGY8RkBac1UuQGU/Xi45fGp3ODpN''@;'; put 'put ''WkpSPSJVRWFdWGQvcTE8UzF4ZGZQY2RrIWB4amVwcDpdTF1EazwiPSYpWEJPVTZbUXFZL2llMXVscjBPdmouUE01X0pnW3ZCbUZiZ0dAX2NtJXBmUS9SNXNgfCgidyZxXk9FJiFpeEVpIU1oLGk8eHBjXXlmcmRoL0s5PChkTU1pOXRDUmYpS3oqM1AyUXhhOzl6ZXE5IlthKV9ZeGxuQ2hJT3Bt''@;'; put 'put ''TzVrcjs4InE4eCQ5dDB3diFrRz1AND1PT1pDXUI9b2F7L3tsZCFvcltxMkM6elU+VE03SC4ubWQ0SkY+ajlHcms+K2E1eURlMUJ7YUIrWiY6ISs5XmhfSUdrXkNhazp8Z2RMWStHbF5iekRCfj0sX0BPZnQ0QSk/QExGbUsofGI7dWA7Z3tEd3dHUT9mPlkldmNEc1ovTCQxIUp+NjNtZUJFPClK''@;'; put 'put ''ITdMP3N6fXpFUG0rPCR3eCUuUltLKXcsTEkxbVUjI3FbJW9RY0xFUE9xRTFHXn5ta2BOW3BAREppVmZNRHdoWGdURTw+JFJbPUhdLmdQT3suUTZqa3RhWW5lQXEoIjhtYjAxay9LPTg6OTksPHYsWCwqM2xQSFZ2UWtyI1o2QlI/YCJya21NbiRGKVdzVlgxdjF5VHwsY110Szc3ayZicCYiP3c4''@;'; put 'put ''eS5zPWMkSU4hemNROVc+UjMkSSg4XmBxeHBKVz8yKXheekdUejM6KEAoR0ZGKyN6TjRnX3J0KFNVN3VNZDx4Ij8mUU1OPmopYkEmUmU3WFlVLjZ0ZjArLGNJK0x3WTdLY3tqTEtbTzw9cXhUOHJjYWZJYGo4PCJ8SX5bdHw/ITFDSHJ0O0pXKkJES2lxQWh+KSIhaENvVTh0OilYYUBwLnRoLmlg''@;'; put 'put ''djtGO1FycyQxeyZnejh9bWJHRmZobSlNOmcjd21nckp4KDl1JktDOyMwXWt9QE1SXlViO0k7cGZRNWNmfEM+IXxCaWg4RjNbSThqImAhQUNwYGk5OCpYZTcyNCNTd0tzN1FldE5EQy9RaF54eXNaekQ5KV9mezhrcnNtR2ZsaC4qKkdzYGMlfkV2fHdlPWEpeDRMfmU/aixuJV5iIS48cjpvJG1L''@;'; put 'put ''NGdAaDhaRyVMWCt7eSxFWiQqUHlKQjk7Uz5ZKUtgNjVYVigodCJLYGk1OElMejl6OSFXNWZ5XWB2O3F6dzIzS2ZYS3dSUEl+amk7PC9PSSxScXF7aWYsfXhdTml8ZX55TUxMc1s4S25wXmZ3RyQ4US9hV2Z2Kig2ZXs5JXFjezZEfnRkfXE2T3c1KSRRV3c7PntYKldxeCIyajF3cGF3IlUwOnVq''@;'; put 'put ''WTomYjUpYFhOe3Ukd2R8ZzhXUX1xd3xNSEsxQjQsRGowMyoqWG9yZDJ6d2BbVyo2QUwvSUQwc3xsbHcsflY+UmVxIzV4a0I7JXw9ZEkqbHNTLjdeUUVgeSNhbUplZT04YyxqZTw4bCwuNGUpeTorP2l5RSEralBnZytmbWFteDFNazg8QiwrSXFWbmBCOj0hI1s4Ji9TYkRNN2pNazxMV2ojVkNm''@;'; put 'put ''UDhPe3shaGZYJSs6JEVFdDpDfjNoUDlFbGg2aGtwbDVmYjFAdVNvS3FRKFl4JGdBeU9fYDExWTIkdntlalNlSUNWTmNbUGtBLGJrKE00fDdWRzMpRjMrO3oya09oX1YsfCUoTGk1WissIUIjRE1MTGEpW3hoP2hdMGNnbC9ie1UqZ3tadj9uL1hyIVYoaHJlPlUoMjo5RWRjLFgobktgQVs1Nkws''@;'; put 'put ''RHgwRGZoZTFdc2pgR1Jna2VbflgqRGpXJF1UaGRDU15AVDJNYVJAYEtmVGVaZUo4SiJaWCQ9cDkvPlthVUQ/d3ZwcTkwMng0Y1EiSWs3RUx4ZDhFeiFlQSx+N1NMejVjKkJlc0VbdWYjLm9LOXUmbG0rdUw9XSs0PTJKZVo7NCwqeUYmKV54dlZman1AQ25sWWhZZU1xamlLM3loblFJQ0YyJX1O''@;'; put 'put ''Uk1nY3BJWCNpcXNPNkVjRXN1WzNwNz1pcGdXYyFMW20yWixeeFEvVzk4Jk4xPHchXSFnTixCM2NgYSR+MDA8Mi4/eDxtRFp0YU94I09eeUVGcjI+eXhrNmgsbSk2M1gvfGpKIU55X1AvZVVCWFBiPzFKYjEuXU90fUhwN3xPQ1EvRWpUIVp0NCEuWlEkIVl4KlZnKlIsTXVkdUxuMmI6e100fDop''@;'; put 'put ''VmozOmw+bFkxLFJ1bzJ5cT0sYFYmWEZzb0NoN3YhRzFBTzQlMUAkdSlERHE9eUJGQ1pWbmlzdjZaWGpAUjw5ZlkkWkVMWTdhXU5obWM+MFAhY2M+Mkprcm9ONHpEVCphXVlXXT1sbWdfO1NROkU0JXNANiZ6Zz9VSn5HOClLZWhzblAuWXZ9I31ZZG92U29daCEwVS46biVkMjIzVWkwYHNAbFJd''@;'; put 'put ''MVVPZjFhbHdEbm9AZSg3c2ZnU04kLjtwKlpUQnI3Njo3S2IoPFpMXk1hayVQTzdFVEdOOkh1NHxVMi4jSklTT2ZyZj1ibCVPUVovYEoqTWpYbXJhMVUxKDgub0VoVGpUUyVAW29WTWNLOFElNyJxfUIyVjxRZH1nYz9Gcj87aENwRFB7V2ApOmZAST9MQ2FbVGkrYX1YSG5gfSVRKUs3WFhPV3Vr''@;'; put 'put ''eUM6OClLZkVnOUBfdWZ+MT1Dd2tYYVJqRWhzWEU6TDg8V1MxVX4iPVhIbmBpIiFYSUlROkslcz1tPmpsR15uKl5RdXhxfFM1R1IuLmZhLCJEPFY1TUNTS1l+QlFha3xIUG5KYjJ9bmBoc00qKiNtcldMUithfFk8VShBZmBAaSM5ZiU0OkQuLEZIVU8pbT9HXylZJTgoWTVEVjt5PENnK1c5Oiht''@;'; put 'put ''dUxmTSFHRFI2aCQmIWVWJDBobTYxcXEpNEpGfl1CNmRKXWJffDB+STZwMSs7fmh4RT99cSRWdzFIJFg3am9IXmU+OXpmSlI6QmkmJldTKDlLcmZ4MT9vRjA2bFVPclRUM3U4T1haYU5zPTZnY2R5an5MTERqcjVJPFJ3NVYkXW1DRkZLSi8saCQ0eGRgOz4sbCk0bXlfeH5BPk5KViYwd0JfOyI7''@;'; put 'put ''Li9DKCJsLnRFQ1MqSnd4LipZQXk6KkA/RDoseHZAfW46bVhIUlp+dzRte1M9WX1uRz9Xb3JxdW5JeWZ1Y2FsVUMvWWdQYlhlPTpXMkNJc2xzMWl2OWJUaCo2Yl1zL1dNcXNCakc0RzNiSVh1OnlqJlM7PXQ2OFM4TC9tXUx6XVZpVGlKKXZ0PXwzWF1pSHBAfm4+YT0uK1AhZ0pLcit8Rik5P3Aq''@;'; put 'put ''eD06YHFkUzloZF4kfix3b0FwZzsicFouPiVGTVBaJVBEV0E6QXtFN1M9WHxnZHg+ajxWLDJjM15hYko4eEBUWiE7Q0w3Lik9X0IoSl5yJlJJVFVsZ2ZAOTFiVFRwSmRUPWZQLH5CWzhSPVJ8Uz13dTpqVTFVYTB2KyUqNj84Zz5VKipWb0hrSnAzRU9fNl1Ne0RSR2JOZTVDR3xLKykrUF4uZFVw''@;'; put 'put ''QUA7fC5UPVgoXVs1LGJRZldVbGpgTGQ7Sj4uTFRfIktUOmdNL2NZQjJsSE85PTNnfWF4L11qOGlEcnMkLD9LTmYzXzNnKW9Wdi8iamVCXUVsW0g1KkdzKUg0Z2l2RGw5SVBrKU9paH4sY0xudUE4U0JEbTcoJF5ROGY2ZGk9LlleRX0jcXAudzVSX15jdVpQdytXfVk2VWcoaHFrOnZbLyZQY191''@;'; put 'put ''RUxLWWExNyVlcEt2ZmpHbDhyJGBKKlcwWk9eKTZ5V3IkcGJqRXk7RiRbaXY8XThIbjU2RHtVLmNoSjw1JT40eDkhIzdHZjRvOltUYFs3Sn19QzZYcndDRjlgNTZpfV1IV19uWyFOZylHUjhhQCopJk1zc2JRZHQ/RiNST2djZT9pOltyeHt0QFJDOG1nbWxjOnpOIjBUdSYqVmFabWU6cyEreHpK''@;'; put 'put ''IW5zISN1Xys3L1Iqfl5tPi8/aD59Sk05T0g5VkNLVTBkWjs5TUtFXTdRTDwzJjRNTU5jZDgoeCw9ciRFO2YoWGBmX0YjS1FKJFZJV148d1YoJUI+WXZeW0FvaithcjwiVHhKXWdKb28vd3UlWV9pO0pIS3loXkppVSkoMl53VCFkW0tRWDFDS1RfeVhmfDklfUooWC9yOCxwNShKOV0we2pwbEN6''@;'; put 'put ''dmkmdEU/NHlUXlRuP1hyJktodUdgflZsRiRDTEB0cU4hTj0mW05ifmpwOVU8e0M2LFMqUVcie1J3UytNXjAsNX5ARXtgcWRxdUNoRF8oUnU+MGlRN003MlFdbEB3YGVCRT9SWFsxbCFwYEdYZ3xdMGxRbmJLKGVYX3kkUHM7QEVrO01oW3I8ZGlPO1lXIypZZUZTW3ViSFBrKSJpbj5ZSXF2Oig1''@;'; put 'put ''OFRELDpXTXdfenIyeURTNTx8bXRSMjQ4PGFBNFpgT1hJSHJAcUJtcy5QeiE/VUBsekNYNU1fLHBSfVBPfWlyRSZvcEZ1RHR7cFs4S1FKTSlzYEtkY2pSNj49PUgwb0IxZW13RlI6fW9rVURoNHpPWjosOjJwQCgyIVdXMyR4bnZ0YGl5NXxTK2hiZzQkSCUyPjdYaHZsPlkrdyJiJGJXbmtbRVFQ''@;'; put 'put ''eCJfdH55bjwzK1EiTi9dUE5feEdEa1RKemJbKD1pMndTPDJtbzhuXiFucExLM3k2QGxdQE1OcWhjSjx5bGJGUEoqMHZIX1hEVixsUThHVXVhWmArdkZHNkt5IW50U1Y9TFEkRUZnbishW2Yvd3xAcml9SFRPUCsiRyJVLEpUPXRCI1sqfEZ5QEo+a3FoaihaPFZdWmtdX0RWWCR4clBJKHp9KCos''@;'; put 'put ''dHtEOz5SMXtPaFldQlUqM2NXXTtvNWI6TmxfLypPczshZFRkQkd7ezJCUVl7LzhWUUN8SWAoLDA/R180KXg1L2labj9eJGVzO3VTP3xnIXN7RyRBekV5Nz4va0VFUSFvN0UkTyNFRGVjantLal1md2tLXjs/KSUiVWo5WmhxRC8iPlI+bTUlJi9GdHsre2dEOHJWJWt6dipEaSwoSHRNditPdSJH''@;'; put 'put ''Zj8rL0RUKEQ3XjtiVVhNV3ZyfCs5Wis2bngrYnxTMENrQU42WmQrXzgvcl9TISMucTRLU3dfTT1hSUx3LypiQnhTMUhxNjpxRD84YWo3IWAvWXkleFlQZDl8VkE6eSQuQ1tVOixvfCpRMGJ1eWFuND1HbEd6Tj8xSXY7SnpqSzl3X2RlSjxrajImKzNUWSg2UVdyUjpEfmxOLH5ROFM1e1Eidzxs''@;'; put 'put ''LjV3NF9qSFRzeTA3IlkqKnlgRWR3SDc3MnQld1lVfjh8Uj9TOGM0YkQydDBjdWlRLFtEMShfQn1SRW4iXzU7TEMxYykyXXtdKHxBNF1bK0xQeEl5dVd8WCFPWmBseW4hRFk+Y147Kk11QWheeUFBTCVJVTN+QkBCbDdBek0pY0QxcUtMSlJXL0dmaDguQyxDXkAjcitXJGNRK05FQkdFM3d3d2JJ''@;'; put 'put ''Z2RvdHYuPyJye0smOV93ZHRVSCs/WGlld29RImNQIzErJnw0UW8zTGp6d3UjYX1qZj94UTw3eiZHQFZ7Y2N4ZDtgdFE7PUVQJjxQQn0kW0FtbHolbERQU2h+NyNdYy80VnovS2lESVo+cT0yc0csSkFLPzNnMkZFXUJNYVpvVzsrN3ZwNDdNalFaN0F4Z0R5OzVzU2FYZTxAa31AK2MvaTM4IUxE''@;'; put 'put ''WFdrJHlha05fRGMxTEZPdltvNE8vRDUoS01IdVE7PUVQJl46KiUzNC9zJWdeO257OFtoXWcjTjdTIXxKL3EiezBka19SQE99ZWZ1Q3R7SnwvbElySX1Hei5nPWFReTdNU3dQP2lQaitTS2ZFVmZURzZ4Wyh8WHBgWmVXYSExUVdRZV5IKU1JUXZLb2k/cHMod2tLQWJJO1YxY2Z4QVlQSEQ/VUZF''@;'; put 'put ''bmM4PHJyeUlNe1guO3FgbVNtaCRNfTtqXT9rSV1fRlIoYko5bF47UVZqeTBuKFhUd0xIPDJvdT0pW0NHKUdiTy92ciUiYnw+RmspNSZMTGpYZkk9aTY+ZUZCSlhgP187T3FhNyJpeTcxO3MmRkdAN2BFe0ZZYFdLZTxUcEQ3fEVNfXUpJVMscnxzcjxCcWB1OUV+ZDQ4RUxSJHdNRyhHeiE2W00m''@;'; put 'put ''SHUjdjUhcG9aKWBbdnU0L2RmKyM4X0Z7fmE7MEM/Unl+ZStOWWUsaTEkXkh0e3xbSGkzNk14IXwhYDNMS2lie357KC8seSFzOEheRSRKXzRIfWdWRUhDOCZobTZBdldsdntCdjdtI3trbiFlPU9PNUNuRVhXbWVKdHtPeFgvXl9kOmRvMjozdkM/XW9bZFIsJDY3bCthYCR6OV1qUWI9LyQ5Snxj''@;'; put 'put ''L2RzLCZxYkhPSSxbVkwqMzw6TC4lY2RnUS8ycEFgb2NjZXN7YDV4bE05eEdsI31IR3ZYSkd6dW4hWVR1fX0lUnlbZ1VnS21ESlF3eEtsZzFoOjBPP1dxNDQkLGwpV2M4OkVwfE9YQnxKXjtXelA1N0JBZGIqQD1hQkRDXzsqS2owXU5tS2R8ZHMkbjFJcnlYM3shNmh3Rm9pOCp4X0Q0bWAuaWhz''@;'; put 'put ''c2xiMWVzOWdBMHtARygySUQ2UyNMNWB6Vy51Jl1UZFkvSndiaXUyX2ZrbWdhNGdBQykxPl1KSEN9LiosKU0id3hRP1cuUSYsV0VNP309VDozPG4xWEZlRDApOWtHXz1aZ0EzenhkVlBTYSRFZm5AaCxCQ3xFSDF6YVMiRDcqP2dafDEkJFdKZUtWY18lbVlMN1Y7b05hUWlVL3dPS0JLP0ZXY0Im''@;'; put 'put ''eERodygwMFBZLzd9SXJyI3J3W0pnfmB5TCF1VF5sfGFZVTB1cCRnY3N2OkBoRmN6XWdaPilZMmZ5XmIyX1BfS0Y4Wm59ck82QmpqL2JiPW92RjNLT3pyWnwqUUIvbnRpO0t0cDdgcFRpJX14WGh6OV5+Vzl8VXc+VChaYmgwQF9aeEZCMGxzSCY0S3BYKUc8dShVbjRwYmBgK1AiYjxHfSltNDVV''@;'; put 'put ''bGBDXTMsaEtvT3IkcHNKNEd8dHU2aUB1MiozYzF0fUxFKWZadTt1KjIhcGBnVmNMVlNfZWAuOXZjXkd0a2tDWE9WaUR2P1J1NiFCelB7R3RONXRJdT84aDV4di9lUXFie3tkaW53JktMLGwoJjZmeVs1JXFEfE5tJEwwfUpBdS9xKnskI0IuXy5lJGcoU3hKLyxaSjhpVGNpbm40OD84dEErNSZV''@;'; put 'put ''L1JfZWUyaEhZKD1oYSxPXUNDczBFfV1+MlpRUypzRWtBbHxZbk4uQ2lJQ3B8USNydlIjbVRHKlVrXzR9L2BCfDRmTEFSKVt6XjVndH5RV1tqMz47M2Zac3BZUUtAZVBHQ3pad05pc2NNL05zUU1pd3ByVFtlfn59Tzo0SmRkOXlVfFp3NHZ0Yj1kc1hrPEY7Mk9xV3YzV0pSJDRrSWQhKmlpZ24+''@;'; put 'put ''Sk9ISE0/JFZHWExFKSYhTU9HTT5kKSt1XnhJKWhLIUU0ey5MOH0sSmg0TDVsTnhubjk3fTVUQWZhUiRdIjRuZmwxajxHUWd4L241aGRHPG9zP0EybU9vRUowY1AuIk5DQiE0IUZ4Ojkydk59QnIlVnl3MWgydDxvIS8zbjZPU0NyKUxiUipzZ2NIW0JbdnM/Q1kobnVQN1NyQmhIYVlCeGwjKFdk''@;'; put 'put ''MCtHeWE/fWdDUTVBKjVfN25NZkxMMXIyOVUyXjtMQEI8Z0JwYm5HRGwwe3pmVUV9XSw/RygmWm9SZ31mUklUWz0lX3RZd2dEVjhOcz9XYjAjNCFFRXU0dmlZWXk0XjlxU191RD9HakwqNFZtc110WH12QlJ1WnxUK31RTXVpa0VSX254QGF8KlFTRy9uKFh4ZXtHc2oyaHFBcSVxL1pkLzkwJV5Y''@;'; put 'put ''QyZFLlBacCwuW2lLbWB4cD93e3pXcl9oO3VgQ2NmVCo2fVUhMFpEdVQ/ZD53Wl9mQkV5X2lMYWFXSDd9UHgkKUgsaTNXajRfRjxdS3A4RGZIKSM0aHN8dUM/e14qT0l7c2VHLlVgL1hCbCJCdVgzaEc5JXBiLEg4ejFJZTl3JnEpV21yKCgya11STX52OGpwI3s0aTw7bT9jJnhyYTNEKVB8KHJy''@;'; put 'put ''Xik/KWNVTjluUz91MVZaVEUwdWYkN2xnak16bTpKREZ1fChyUVtgMDZxIipbeFIkQEcodHM1aGVLQFVNeEp3eGc5KmdVUEhNdnU4VlpeSSF2XTltMXNWYCRkWnNwZVJHOn5nKVkiLCVMZXxTWn5XOGh8VEA0eFIxKn0vM3ckYTpraHlNUHR7bmZNc1VIPmp5IjNocDokZC8qOTI+QyExRlZSN15x''@;'; put 'put ''MmVtZTdZZ2g2d2RWb3g8X0xBUGhtJS4mTTN1Zit1JUtlPjdWcnhWOUBhd1NkdCEpMls4JjVKeTR2RUEreDR+QShfMT8peiklKmpMJnFJX0JjPipSbTxqRi5AfGJgMzVWUmlEQFhyRGlrU1BFZX55biwzd0RwYzExMDgkR3t4OkZNTjlGIXFsQiEzRjNWJXc4PXojTlttWHJycUJ7R0BNOFlVJEpF''@;'; put 'put ''V0ZTOm9PNH13dyx5Pz9veUIzX3hTejh5d2dIfjwlV15zUjtmI3xRMEd7TSYldE11TDxwLjVMPDRKUFdKSEpEcERuTVJ0YkNucFAzeDcwJXJAa2V9RF9dWHJTPUpefUJXbntfaGsxNzRRK2RdWERzWUMhb0QrWGE4ZVN0cGJLUGZaPikkZ2VecEkxPz5YQWgsdFhsez43fSRtSi48SEhIQztlXlov''@;'; put 'put ''JUVfLjo4SkU3ZUA0LFkuYjBpYnBXdSZncSN0UCFheCkhUCJeb2M+VXVDcU01V3xQNEdedmtOMlBqbEJiSndSWm9sMihIP29ZRCY9TC9FJVtsV21xOHlJIjskPS5pVXs2OjFpM2guODgldjl4Ky96LFtTZ0wpS1YsQXFVOCtyVEIrWFZVQ3ppZFhAY3VdT0JfbjNJOlh5SFBBK2U6aW0oV3MmaVA/''@;'; put 'put ''VWlgREgqRCRPTWA6LF5BK35qMkJ+MGdrPjJmUjwhdl0wWmZPWFVpKiFUcCwwXy9hP3NFPCNBKmArNmwidm4uRlVeRlQhSWUuK2dySU59RmRlVDVvQiZLRWxLQyxoS0tneGNkPW8sXkRsPD01MF1wRDoxW0lKNWxGM3xaR30uRGkqRjh3PVYjJTJXajdsIigreUhxTG9+WF46MzxMRyZzb29bdipN''@;'; put 'put ''RWciKjYmb3tNcjhFaWo5RDRyXlBgQmM9Pj1qN0YyUi5ndzpLbEFUMjNbfntHUncoZkhuVFpyWEpxeW5ISnN2QlhiIjREP3lDOHJ7R2h4QGBGLlR6O01VYilMYHB3KkhmI0wpcFpMcHBIOklpRVIrSGkubiUoWzEwU1FyOnk+PVI7MD4qPmFBaEJNLCpZcDdleSl4eEI4YTYmcXM+OzB6R3dyaDFL''@;'; put 'put ''fkBDPD84bC9dV19QPk5sZDlCX1U8d3ZmbH4oYW1bVyJyQiwmW0hSO3pfMm4lY21iVVhkMEF8XVIuJCRiQUFTVGIhY2dEU1MyN1dBNEcjST9eL2UuOC8qT2dhfGxLa3ImRyU/cShWNGZSR25eVTBEOXlqOlJMMElVeT8yV1NnUGFFXmEqQjdzTX5+T29dQGQvSV8oUGp4N0dEZzNCXn1kQWx6OWZT''@;'; put 'put ''dmtzcHNlfDxQNyY5YiQxeDR8SUdlSCVseFBTXjsjdTQmdDFNWDlVNmdieVM0KmRnNi94e1VvaDMiZFhjO0h7RUQ8Qm0+OF9GKkRJWzhVdXgqdyFWXkxmVmR0Rjt3RU44UFBrSWYxVVQxelRVKG4wIjh1K2QuZSwrLDxCdH4/UFRHJHdXST8uQDt8bCpVeFB8WHJpaWtYQl1EcVAvVEdlSStuVjVJ''@;'; put 'put ''TVFJcDdgTmRWV1QmKFYvQy80XlYvQy97KFpyU3drMEs8Rk1FSFpxYDI5UixePnp+Qi5OOSxnLGNFfitZYCxeOG1ILlh1KUROJCFCPnk5S0VabWBTXTl2aSlHc0FSX1toUVs1fG9RMnF5MklzSWxEMl9IKlJpViQvSG5KRD9RTEJVNDxQM0Z5X20iNWMqU2t7U31feXhMc2x7WTQscWdPSEc8OmYz''@;'; put 'put ''fFVia1ZbMGxlLy5rNG9ROkhkT2gjeD05dzFxVDxYT2wiOHxkOVttXShNLHF9VDlvQDF3YSR4R2U0cVhuJjI5TjU0fTpFdGxyZ2s0Ln1fOGlPcTFNMVleSHl8TlZyUkF7aTlMfWMuZXliSSQ0R0s4VHRfYkYzfXkhJixwe285b3spblV0aVdFan55XT55R29qQSslPS9pKSJyNlB8clNSLyozZypt''@;'; put 'put ''cmtXfUg+XU5rbCVjbVgvUSMoU3hiVGg5QW86ZFJnYl54S0pie1s5dENlaz1lZEYhMi8vK3xfYzNkSVI3V1J5djhZV359N2BpVmoleTg7YCMzRjQuVERnQ0pLdnVOW0EpcVd1cnJOIVEpNDw5MWBsYSE7aE88Iix3UE5tcil1N1BYVFVJazU3cS9WZGxLQWFGRlhDWUJLQCMoZEtTIW5UcFN6ZHBl''@;'; put 'put ''S0k9O3QpenclQGh9OH04LD4xNTBxNFIoVzt0KyY7bCs3ZSVDY3xRfEZaIkczfjA6cUIjeE5hV2FFd05XJnhoeGREW2NHOkxuOHw1a1BhMWhdRU12ajJiLm1OVCN6PChnKzU9bXxsIllGenRoW0lxLD4qMDRecjVBSW9OODlePXI3X2FjZFIyInpIVEVXL2J7ZkwuLDBoeDlrVU5bXXNiaiQyV1Mq''@;'; put 'put ''TXlbeTB1TlJRVmVlQ2E2fmUlcWEhLmVwYmY9MFJ9K2lYSC8uX3I+Uk0leUY1QFo0MEUkc2tmL0s0RzVONFRwb003RGFHT0F1c0klUUFRP19aKERsZmY9fDQwP0NTc25Oaz1JW009OCNrRy9tImIxPCJXKSlLTGBgK0x9O2pDbzVKdWNVQzpte3olRnAyNEQlTGNfWmw6OEw5cEdzPyY/JExoWyIk''@;'; put 'put ''X3wqX1UrbE56KDBMP0VlaFBebVpCWG0oTlR8UkhFIzs/PDVZWl5QIi8hOmtpTVFPVCE1ayl2N1cjY31yL29EVXY/TiFHSDhxIT5WaTc4M0tmI3xAcy91PTpvM31JTylEO0p7UT0vV3pRZz9qPkNWejd9aDgodUlpdz1DXl9uLldrMEF1YjsvUmBPYCNDLkwiLlVWY2xKMjk8V0tKN0VSLy5YQFdH''@;'; put 'put ''VTFXeFklMV8lUWN4ITE3UjFEMnI0QzFlbT17WHJvOFYveDQzRi9lPzBBITEzI2tVbldJVSlINHNDSHg4Sk4pLmRxJEReY19jb0VzckosVXFvcHZAQ3ZFbU05OU44MSVAVDVZcEJydVg3d2N4bEJ+ZzxpKH1YNFchXm1qalhUWXl1cntSTVgoZTFAYHo0Vz5pWHN8L05teUFDKz9XM2xEXzpqRDVx''@;'; put 'put ''Kl9lRC5KfTt6JDsvT2RBe3NpVCF6VncwTTwsVWpxZUdzZVpYM3FEXl09ViZWWkd6S2NPLndCJEZOXyQpX3d8b1RSO2BwUy95X20mSi5FKDU0TXlfRCF7fGEvbUkifE1ffmQpY0V7ailrMFQwJmtEXlpBekZ4LGBxIkR6X0tGQ3YxaT1GfChjcDJlYVZHZShBUFdWMEB1RFIka21yL2czSWgjRCQ1''@;'; put 'put ''XTg+Ukc2Qyt3fTk2LFNqJnN8WDU1b1o8SHBBaXNjTWNZaCNbaWB8YyhkPXRVSihUcTI+Pjt6fElZL0IwIn4vMSEvbytGeWR7dWZ+dVdaYUxISSY1d3toSG1yKiQqIWVAMjU1d3goXyhLV2Q+NHMvTT9oZTI0Mz94eXc4ZEhRV0hyblRgYztYYjBAYD9gQUgpW3F5eDJwQTNCY1NyZGd6KVsuImNl''@;'; put 'put ''PSg8SGJzNjRaK3hYWF5FUnxSN3RsIXBYdzRtWSwoYyFieDYrKX1mTllPTHd1X28lfGxTRURtIldkPEA1WUouaGF5QCkhS1o7RUd8ITswYWk9LEdsRmIydiNdOSV8KG5ELnpSSH1DRktzcG0xJiU7WGZjMjciPmVEe3xVdShYK1RyQmxvUlZmUWF+ZnsoJjcyPylUS3AvXnkxT2l0V2ZPKGQ5QEpr''@;'; put 'put ''ZUM4QEpLb01yMWJ5aXFbbEZfK0ojZUtPV3doRjF9QmhON3BxMTY3cS9VPmdefTxVbGhObk5KRnlOMHU7VSIjT2lVVnEiZkdQdTthOEg1ejtQJlpYZUdDa1FlZW02cVllMH5OX1lWcEl+UGMhT2lgUV9BMVtKbml+SCFhY01HZ0R2WChLTUNleC9pfHBMVVlgY3pIOH5IT25ILl9zJC47eio+fT94''@;'; put 'put ''cnZKczlIPzh2MSUxWmxmWixHQilOZkVhdkRfTV1Oej9XXjZ4P29WUiN3Wkx0TiUsQTZ2RDYoYzRzTSE6UFBVMHY0LFRFSG93eSsrT0xIY1I2WXwiYFg4SEFZMm4zUkM2X1ElekowNFkiMkxIfkMjdURpNXwlKDssUFllNGNnIT99clVsMC5VQTolailsMTl7OzlgLjhzIVJ3QCY/I1AqW2MofEw2''@;'; put 'put ''R21ge3xUdHNCRjg7cXlEZFVtJVRSVmVSL0kiWnk4JjpqJX1pRW53dHVLdEwqUUZKITl2JEshNXZNTG9pKkVYSUJOSXltfHVINSMqPllgNT5vaVNTQUFBemJDQXc0VkJ4RElIIlEsMUN1Sz12RkBBdEI6P1JEMnoxTiNPVWpoeC5MQUFBQUFBQUFBQUFBVFgoNCI5cHdhTi4lXmZocFglXWhtY0FJ''@;'; put 'put ''QzFEaU1IQ2oiNzQzY2EqOm9pRWdPdD1hIixLZjU7KjhYJCxNVV8sS29rQ0tSSlA+TGtuJHBfe1ttUnVHNk9AcHEjc1hRPiMoK3NKQGxCdFR0PG5gakg9djZDc11EbzckXUdzP0x9bUpOM2Bobklwd01YfGRXcDlXUEwyMFpwPi4xTkM4LGZpWW4oM3Q1RmBDfF0yZ2IuaD5gM0AuXiMuTl4jWE01''@;'; put 'put ''VDg3b11GVWlFWDRFPHppQEgsflhWfi5aKH5jZUJuTWRUP1Qwd1ZObzpIMDQ4Mn42Qno6JDE8QGJne3c3LEJCQEQjMGY3Lmw3bmZtJEJyWHdDN148XjNCTlpSXjtxSi5bP2RrSShRT3RXZ1NoSndhLzRWQFc+T2ZVUW94XjdkPXlkWjV7ZT4pO3cjPjptbUtyYngyek1Hd2VhbjJWOmtVRFlgYG1h''@;'; put 'put ''KloxVE0pNS5YKV9TKV04azgwWX1waDs0Yjp+NlRFMVU0U3lnMntIYSQrPn1RR3lrS2FnU3BrcGkpVUZSdzQjSkJoRFZSbH0xdyNhT3B5Y3BNeU1sOCs/bS5eLnh6dU0yS3o+e2RxKWFyTmIxc0lPOHEpaV9CQilLI1hUVEw3c3VeRFYxSVlKfEJNblpHNFVqXil8eV97XWR6QERKK3V4QWs1clM8''@;'; put 'put ''b1RoJEJxIn48MyEqen5dZFp3ODdVYFFEI3g0Qkw4MGRCTHNXZjBATkQjbUhNV0pzcD1qUHV0d3w/T1lmJklodjl0P1s8azM7eGlvaj4uT0RyXitsaEJYUzY+OU4jU29HOzglemhBO2FaOCJSdF06TmxwNyYsJHZbTmo+UjJKPShLYDhkP2V5e0YyU1IrU1gyVT0vZjJdaT4yWStqaFIvOndUVlJy''@;'; put 'put ''dkhFK0g9YDx2ZTFiYC8zRlUpRFZ2N2p8RnpWRmREZy5BfjsoTFoqaEh6Umh+eTtXVVRaJj1iNyV8KyZjYH5ZU354dkFOSyNFW1RZPzlpPC9PbG5UPHdAIVo9QE9lTSJ8X0JAQ00zNSp5bCpNeV5kQjxSSi9UNl9NeE90cTRiP0pZR0dTLnhLRypSenJ7Xzh6UUYiU2taUUIqX1pyYXVYfT4ofH0r''@;'; put 'put ''ZCZ0T0sheT0zUX53dUhTM0FiLEZ6WTg5U2BGXlRYdm1dJloxdH1aejhERUgqdHBENj0jXmNaV3o+UGErNFtbVksmaCk2MztaKHA5T098RFtnbGduOXsyVTlMRVlLNGR3NUBMb0cybUc9bkpoQCRVWWpsIWZqeUZoLFg+IWRNfSZCODh2U1FkKjspYzNPLFNZZnE9O0QrKSh4QTJwbTVRb09CTW01''@;'; put 'put ''bzJHXV9zYGkzZjkpZEM7NWUqSChwWlA1Q05lS1clfEM4RiZYKFd2Tis0WUY4O0laLDlTdkxGI0V4dSI+OHF0NGdKd0dgP0x5ZmAiMGNpPHkkZVZGenUpZS84U0pfZU9CVlg2JXdMdjEveGdWSEJOTlRqN2giJX1LJiVkaS4mYWNOVWRPfHNUcFRlVzp1cDM8RX1VNzNnQE0oZ0NTb2F4aD9hQGhV''@;'; put 'put ''aH53Tnc6cj1ZeElMIVZAdEs1Szx9YllVXUVebE1md24oJVA4NTxaNH0ufVFOODQwSUhSPlhSe2Q3dHFjdVJKKiU+dTNqfClYb1hnbFh4TzxBUTFaOE4kTlk0UUReJFVRJHQjWCtvPUpITFhlU0FQTTRwY2l9PXxkeGx9WEslW05pR0d8RjhuWkM1LixlbmpGai9gLmswKyV+L25AUD1gQlI6dCRj''@;'; put 'put ''NF1XZ3w5In5aTlFTKXVYSWtTSG0qX1FFX3VnNH0iPXM4KjxGQXA8IUkzfCIvcFNXTldzLmpSaVR4YzEoSjRwbGgvVkA/TF49TUlGXzRVfWUkaGIzRUM+ITglNjFfTCZPRTEvU14odCgqNmRSQlBvLyZ7NV0oc19iQT52XTUvXm00aXZ4W3tIKjRVayMkQC95YUJieD1tcHw1KHhlRDV1Mm9hOXsq''@;'; put 'put ''MjsqclpMfiUxXnRMVFpWLF4+QkN3QiJLPDN7QGxvYHFTJjwoXnhjajZNWj94VmJTajozSjhec0UkNntOR0AoLn1bX2FdQkd6QF5YfWIsWztKPEgoWlN2Zyg5SFpDITg0WXdEPk9bc1UwUVhnJFVZY35jSGUvWFBUTnkpMSYmZURGdjRIUXdUe353SGYqNk4wYUNdNHQ2cmNbe1EjK3FqblA0MSli''@;'; put 'put ''MVN2Nzt3fX02UTh6MEd2Um44NnFeXiwmXiFAO2x6SDhRXmQ9QUd6Kj9pe3g7IUt0ZFtTQiZmM11fak5QMHgyJUJlRUxpZE5KPHE+aWc2UDBlejx2elFCNFQ6RWlsdEBRSGNxZ3QrIUY8eEhjfTZoQ0BMTUwkYDNqKDN2X3NwaFtQY0g3cFViXWMhd0MhdHArKWhsYGFkNX4pPXI1d3pxR0BXcE86''@;'; put 'put ''QmRucSowalMvQi56eHVAW0IkXXBYKztdIjQlN09PZzFjeVpmfE5aMENVWSk6VkomfSJfZ2s8Tm80b2lacTNvfE9bdXk8Q25WbFAlXm1dO1RSIyo2S3xlUiYrfTtIYUovO3VWMEBpPGkrSSpDWjBLXWc9WE1jQWBMbmMhXzloL0dyPkU+R343RWskdn08L3E0UG1mbyhqREpocVMhWyloRDZbZWl8''@;'; put 'put ''ITZQdTlMUyFJOS9laj1WalM+W2dGLDxRJCpkMTFhak40anU1M3ZfKzBXZmJ9KyZyfEI0W3FCNlpkZDBEdyhMc0EjJE1KODBIcDFOZ2VYVlMuQ0w+KWtSLFRnLkNZNCp1WnlCXXpVZjNYNnBUTlgjQSNec3xPSmxeT2NEYFdsTEpiJEhXYGA3Pn1vbVs9QTAoW2RlNDpddjRMUT4xUVE2UGV4N2Ml''@;'; put 'put ''bkd0bmJafnIpZnxyY2pmKTRGbCU+cV9vKV0xQDpENV0rR048X0ZPT2FdNkl6XkBIdX46SWY/Pmo9Oj5lck95ejFBaGRsaVdUYkdXdnczK1IuV0UlYltIa3FQLFRnUCFTekx5KWlYSzhsYD9GYSoyVGBxZj1yL2F5ajA/bSEuTjNSNVZ2aSFJWlEyUl83NHttUDlwN2djdUx+NF5oWEUwa1NQSVlC''@;'; put 'put ''ZUlvQFNhQGkqcHJPaHxNMC5MODVSIV9jP0N+NTZqayYyYmFdRClEa2dFOTZsJStWNTdIciw4Ik0rSXssWVI0Rm9hPnZse2p7YyJ+fHR6dl9qb3R1WXtKSioxQ3hGVD4hKURydipqbCVaMnVsa1YsTV1+ZlZoZ1NnME8rUVF2KjhjPE8lOT5uRzJkMSg3dVtfSHlJbzJEaT9BcHJJMHYzZGJ0VCN9''@;'; put 'put ''ciM4ZkkzcEcrLCxgbnV7TVtFOGhEb2dEUDJrczpKaSZVJF8sX2BNZlpoPlQ9S0xhR3JvLG9iM2w2MlFOJW9TWiVhPDtYPn5LWlJRWmcxUGBDMjJFciUsPSZvSThka35EPE85Wkd0S0RsbFlwPnh5SzAlWHhoX1lzZXtoJTheJkw+R2hwelEmeSg3W0R1RV1UJWxGfW0/MzgzRmIlIVg3aEQsWU5D''@;'; put 'put ''YHRneWRzfj5lcEJNXUloKDZ7cDA1fENUI0deSUs0OnR4bnxGT0kkKnQoLiU2VmZzQGcjYV1Vb1gpdFEqUDo6Ml0xRkclTXV8PFZldSJ5Y1pwelN2Qk86MXthO0k0RDp8fFRFPDlhcismakBCJVdjKW8qdnFXd2kpKVA5JkQwfkAjOFo0d0tBMEQxUC5xWERebkl0PFklXitUNFUme21kS2RrV3Vk''@;'; put 'put ''dzF9Ik1QckR2dDlHaV1fej13Sy5vTWFbYGdVKUJ9NUFFSWBHfDFGbiRuUFdhaDc+ejxNe3g5RmdqPyQzO3h6MGlMals5QD9iXk1ILllPMnJ9JE5iY1g7I2p8PSxVNz88O3dfVEcqaE5TVl9aUiZaSVNyPi5XYzNYW34ub18iQF5XYVlIfiRmeD1Re0I8UChtXzh0aDhzLE9HQSYmb3VkbVMrPXhf''@;'; put 'put ''XzQqQ2BVbTcuX0YhKTVkKldMfH5gdTJaPDQkdDtXSCp2L3A4bV0qPHJpVm1GcmEkLzY8W283Kn1VcFhvYGluZCRae1J4U3MpSmohKVRWOSg1WCY/NGo6QG1zOUt2MmtrUCE/QyQ7JkR4IzR0TEQyMVYxPkZ+dUBiczJ8UGNZTF9PV1s8ai88KDVJJFN8UnNgQnhdIWdYNGROOD9AIzhLZzAydyw8''@;'; put 'put ''SDEoUCVNJStyZDk5Wz8sMUI0Mk5GNDNaUFVCezB8VUFeJW1ZTmR9ZzVaOmA+IykqZChTUGY1Sm9sSCk5UEY+S0h8dk5EI0xbRkBoNlRfaG8iUmskO1hXJjI8Pkg2Z0IzRGYobUo3VjFiUktDWXk8fiJvan5KJkJ+dkxNRD90cC9yWXt5ZFFXek5BOz9DKUNiNGg7Ti9CR356RiN8XzR2YS41Jjpl''@;'; put 'put ''QDg0UkhaUzM2aVdoTmshOVs/RTI/XjszUTRCVkxue3QkT0cvKj98YW18WkNeL3NLfGBVRiRZWlo2fllBSEo2bG0rUHtSVlpHJjoufS40KjZiTT81X25ncGd3I00/Q2gjSGY5dHNMfCtXU0tsR0VqPH5ycmlNRzU+SVU7Z0U/PXs6VnorTlY0bU47b1BUWUdUSUg4ZGpMSy51YmBmV1IzMiRiJil5''@;'; put 'put ''NE9lWjspQ3dkMX5qWVNfJXY+ZT9NTkNTX151bClEVTpLQH4vNHVjPDkxa2I6XWEzazBfdSVXOmA2ND5HWVU5RVomc1NHZDk+ZDk6Wzp5JkhFTF83RVYyWj8ifCp+KzQ4MWZ5RlN5dkBIQzMqWzpaM244K0FwYztKLyZqWnV2d1Y/PVMic0VzcV8oViRqX1ZhREdeSFlmYUFHSHF5eFM/cXJIfXk7''@;'; put 'put ''fFRAPlRGMyo9OHk7azp8JHA+RFZnMFNYYk9UfFg7VlVlP21Tdm44UHB6TlsvTmMkNyRKODJbXUAwbCpkRFlFdzEzL0lKLl1YdiREWilxPz9JeFtKJE4uTChFWjguaWBbRjhXeE17TzRsX3FsLCFdd0JNTWAsTXIzQyFoTVJ2YiEjPX5Se14+VXxhdms9c3x+JWlWP2txcDZPcSlgb35XcGJJWm5A''@;'; put 'put ''RUkuUHBGTEY5MSV1MUc/Pz5oNj8veGBCYXFxRFJ1Njxjb1A+YWVjWitqO0U8QyVdaGxdVWUzX2FWb191Y0klJTRfdVl5MWsiZCxbQVcoaXBdUHlBXzJOfVolOFFpOj5Ce1hyUk9BfmM4JlN2JH56OyZASmlRd1YzNyp2SDVbeiE9T1klZHdLPyN7YEpbckJCZ21eZmRxXnFhKGslYmU9eU5HQklT''@;'; put 'put ''QFBjcVVzK3d7TFIpakYiclB+N0Q+JH5oIkcyNCVmQE8jaXFoVXc9cT1LQ2JtcnZ8MkJTSEx8VzMoTioqdUUzN28mRjtmUjQmNk5BayNTQTprfEtocFhZO0FFPGs/K2JjaltjckNYTll+SGxVQkQmYVt0Q1dIeUcmWGFjZU4hajsuVSFPTSFUVypETG5YUThxTkMha1daTD5lQGJ8Pmd7SSFzPyM+''@;'; put 'put ''XkwwVCh8JUoyfHdAa1ZCWXV+M3g3ZlsqM2MzPGd5MFdLcE1FdFIsOXNjQGJ3SzFfUW9wIVpUZikkUz9tUywuWClYNWx3TWBPNyxMQWtFVWBpfUNJKU9kNmR4NiRBRnp+ekFMYDhPfFVUNm5LUkFJJTVlflQoUV1dM0hCZnlmSSVqKkJub2QpS2xlQyxFdGpMczBnRS4mbz5ZJDE4eyNuLjNZN2k4''@;'; put 'put ''P3F6UlMwRTA2eyJeUF95U2E0RllBOXBGVGs+aV4oJGhoYnl2OWkiME52fFI7N1FIVFlyeTEjezZ2YSIlOFg5S2txaUZ0Jk86MldXRGJrM186OzxyOCRORldZTzNMTSlyZF04R2w4LCllNixBSjFeUUlEb21uPktJQzkpSz1fUlNVKTtkeXlDSWN8am47QypnY2krSGxYRFpYT3U0OzZibTZ7ZkE3''@;'; put 'put ''QjgiMXFAQFRyL2JDNFBZIkY0R0tNYzp0RDQ+P1JGbUZHUUl6cT1OVERIYGE8VWpvY3QxS3x6WV1sL2lrTDY3TVdTVW8kKTJuIytRXTpFNHtnZVFuRWpxIW5wPz5sWHJBLiRVK3NpQypIQiosVSt9Y2ZzKXAhZkMmaUUvWyhTSnRjT3RmXTBQX3pEQjdCN1Y7Pm48WkVdY3A6aTlYViRjM35feiJt''@;'; put 'put ''TDlSYilwWHp7dkFbKFJAZHNsM2JVJT5HLmhvSHphPjV6VGI7Lzp2ZXM5aSJsOHNSOzZtPV5sPkpVaXR2ckUrZ18xZ2JwLFV4Y0NbWyJhWnZKNVlZSlkyVCJzS0RsMUFBdkgzUG8sQnFhdVJKZV4jYkdoQHlKPTtPXVBoPyFALDM7YGZGVit9fFJean1dMlF7Mm9HSTtCcnp3LFdPRWFwUGR7PlUx''@;'; put 'put ''JlkxVz94WzNNZWFqcy47eyZQcDtkO0xDZX5qJFAraStFeGksckcjOXhjX1ZWXXprflpGfiw8QDdObWM9dG5uLHdWZzp4Qy9UUU5DXkliezIlWU5RKktdWDZmXVJ4eFRfbTZ7PXB1STVtP3RlZkRDdnouYXYrbkp7SjRRRSleV3U5Qj1dQjJ4PDw0WikrbT4zK3NvdHFXRiZXRSN8NygpY2NUdHYj''@;'; put 'put ''dVQjcWgvKWNXfkdsUkE0dy92QyE+Pl5hd31WaitYZHl0TGxuZj9YWSZ2LCpZelpFKTdqfC5wWjhEN0lKNT90S0YlSFg6WSN5NzU6LHE8OnRTdTl2NSp5OHBIem58cEBPI19hJDokMGdYMDlubnUicldFK0Ztfn5PIlZVWnQ1Wmx2ekd8b0slUzM0PHEvOk4veUVDUW5saXQ8cnd9Ty93OkU0IUdU''@;'; put 'put ''bTxFOkNMSjsyQ1RXaHBGZ2VDcUoxX3hnQkhLTjxPfEluRUp5QitbcXc8XjhTe1lxV3kpbVohfGo0Y2J1enVWLlJMRFRjdmIzWW4qXyszTjIzSkgqRXFHam4hNipFRjFqNzBlckh5P1FrNGVrTmlAUltsLDIzJjJXbn1JV2xIQjBuUW5icD1xVi9mUlozN00yZDl2WkooJjIua0tWOD9qIlcpWThx''@;'; put 'put ''ayNqTCshKDJiTX0+QXM/d2JAXl17LGA8VUpOeGNeeUssPWRLTFVnVSlIWnh2WUBQSjRyJXhNbjsuciEmcj5Ue3lEeSpaQjYuTDdpVml2UHVlcXlfYnApJGVnZis/akFCU3lIJlEmUXZuNV5EXUUyRUZhXlBIYztwOD1pJSFXcCp0eDo3XWgkX1tWZlNgYEhnc0pFUiY2eXp1XjRFLCopaiwqMkEm''@;'; put 'put ''VEksPzEiUigydjRELF5Va0o8bDVYXjZnSy82KW1pSFRrViM0Rz9OdntfNV8xLHxJMWFhVjF1O19YZWVWeExBbERxaz85ZDxWUFAlY147UDlSLisveSZNdUxYL3FlIWNlNnJNcCM6P1JCS2lEPjxILHdXXTFjWjNUenM9QUpxW2gqOSM6JjFOYmpzPUZQRWpmL0p2a14pIWRtRSwqbllAVUhARHdx''@;'; put 'put ''V0VCL2ZMNmRYVSVgNilUUWx2On0+aDxCcVRdVUlAN3tTdSldV3gqMj50ayU5KyRdbEVzTTl2JmV5M28vN28yMjVwbSxSel5AbEFlMHJAbCxBMjJWQW4yN1pxRkhBdUx9RkJSMCEvOk4sakF3Q2NTaiF9dkQ0eWh+ZUQ3OTNnd2c7RCx9QjolVnZATnVMLmU+PHIjaFNVWm8+YC9hbXZCS0lGIip7''@;'; put 'put ''RF8kVVFYKDclZTA2ZWBPQTQ1SnlaWzd5LGlhdnBycTkrbmpIeVJGPk0kITU1VHVWbDJxWSJZcT9MZFciMVswJFYhWzhUaHJSMyRsLkx3cXw4ezNnNHc+M3YydTQuRlU7aWF2amFebmRURFYqQiM8JGQ+anpXZHlpRVVnRnkwJi5iSjxfbUNNJkYlTzdWcDg3aiwxTlpJVWRNVGhbSTRRMzgyemhs''@;'; put 'put ''VX1KUTY9VjtuOj4jeVQ8NXl2d1g1c0k6ZT9APjQwUlpmeihzVlFIPD1IVjFxSm1aMEg7YFQuNEhXbz9pcWFzTiJ5dlEmYEBSYn10NHZKOTRNOX5aals8e29nRjpCPyxLKF8oL1Q2ZDYhVFRuX3hLIWJhQHZOQStySFN2ez4zSGkqeFRzSSxyXkdRQm11Ykdtb1A7JTZkUmskVjxvP1daODBCZ3xD''@;'; put 'put ''fil7Ly50RWhMd21OYmhKfCVDeDB5Unx+LjREemhDVFhAUCZ+WUUiT0huRl07Jkh1WH1icHZbdEtyPltWZiNeOUwucVNOfjNdaHYzQ31uPW1uaCpUbzJ8bWckeVslMG44Z0o0dm9QMk5JRXUue2BSQ1IoSkxEe1hBSnNnMGZdcCM4dFRjTGphUmNKTS9DISl6RlpTeDFsUXZEMX4hKVluMUpuKW56''@;'; put 'put ''SkhMP1RtXVVZNnt6ey5NWTwuQ1cjJGU7JSRXRjklPFgxVWswIU0vcW5oe1NCQF9tXjpBfFV0cjhRI3g6dWdQbCsyaklgU0AmUkkvODxocS8mVWNGL2FAZ0d2UmR4Tj0uQHo5VFRhO0J3clt9U35rXV8yUnBnJD4mcTF5RDNpNHVeRWdiJjRuRmRjWGBzKmQrOCNFOXU+fGF1a2ZxXmQxTFJjSWk3''@;'; put 'put ''eDtuJWI5KjVNMzxIOlhZbFEvWGZqfF9qZnNjIUh1NShIQCRybG1tbWVwTmRFeGMhcz0rV0c7V3x+cWVOPVU2P3JvQChGbitEQWZ8cCQuUWxGKHFERFhEaFV0JEZIKHZGMVhgPzU2RnglO2lyT0Q1PiZVYVgpPWxSTCYvdHJreCp0I29hLjtLPXxLOGk6IX1TdWZ1WFc+VWZJYUBYcjp5c2VhYVsv''@;'; put 'put ''fHZNIyVbMjZrM2d0XmNHY1VzJiNzZFI1T2dtRjlqN0dMXVZeXlZ2O2BFfWg+bjE6MUM4dDRwJFRwNEphUnRgNW5FI1g4XngkUV4jMHo9blRvI1JVbUsrTzdiLDZ+O1VKPWMrIl53Xzoyd1UhZl5fbSFhW0s4KHt2diVDNkdmblpBRipNMnVUXk4lZkFFJGBoPzgpPihRfUZvN2ZbdXprN0ckXXFX''@;'; put 'put ''bUdkfERLcGhJKDVbW0tkZCllK1s1I2prfUZNMGt6KUJwPDo9QT96JWt9MT5VX2JbTi8mOXR6PTVHRlcsNm5pdVN8ZFI0bW9KUD9KbzEuQCFMNmFxbSIpciZDVHUpMWZPekh4eHtJVW4sJVQqPXlMNH1jcy9uZ00hOjpjVC5ASyRrcT5DKDssWHRKO2JWVmBGUj8jeE1PeSh0W2s7aXF6TXZeKHdd''@;'; put 'put ''KXE8W0VpMXtXcC5jaXQ+QFBpMXZFUmE5YGlCZGovSzhhMzthcz11dl54PHdzMHMmQExgMm9iTix2RjFkazQvfFAyJUB+NHdDWS4+JX1INURDcSJIVVEzPGh+eUMwbmNCdXBQVERhTEk+fEUjNUZTaWNRSSojQyFfe2wlW3JUcyRWQDI7IjUyRDk1MF9BJHR5Omd8MntsOj5JWkF1eDc3QkohPk9P''@;'; put 'put ''SWxYZ0x5cE5kZXddJT5wN2Z+TSslNlo0XzVmSHxIRl9rOFhyJDhhLzBweD4vQWV0IThDPDQzMSRhQF10bCRUWi9SXVolWWYxb0ZgXU5hITYsO0ovbUJHa1QrK2UxOV5zU3NbKE5edDIpTEhRRS40RWZnPX47ZGZsNzZPdnZ+ciZNKC5lZlR6RFY2KFtxaHElTjpzN0kwRSMuKWxiam4vOjNPbiQr''@;'; put 'put ''aCRmIl1TPS90Vjx2Y1lvK0BARzddcV98Zn44fT5AUm9tYlcoUEN8RF94MlRyMCl0KEFAbi5HbCYrbTcoVExdanJiOE5WMS80aEBURGhTQHk3e1IrdktFI1Q3VE9ocHxNO1oqJjZEKmMwODRTSCM3VFFWUn15LjBMeyldQUt8PnlUcmJmZjwlTWVhfTEyXilOVElZOzcvcEpNNilzQGRVO1pkVHQ/''@;'; put 'put ''WnVGQDgoUyRyeSUvRUx8PUl2M0RFJnMuYXg/JFVmV0F5I1NIN1AiaEZze00vdFBCUl1sXzhIbDcuR1kjODFANndpUzNlcjdoOzU6bFszPzgxXWs7MXx4bU9FRUxiaXc+WUowajxpNDFNKkNXZjMxZygmY2NHPih6WWpzKj9XJikzInxmaGhRKzU2cTw4aH1ndkgyaSg4PSklVGQuYiVqPW5+W0xb''@;'; put 'put ''Yk8wIyo+d2tQcnZ1eSRtdlJSVi5fMkt3K0FYM3U4SVhwe3RlR2p0amhgOlcrREN6JDdEd101PWIqRy9VYnB+KzI/PnY4R2NuXlsmanlvd3ZfOFlLcklMc3NCcSxka2I6WT9QbyosV0dsWHg8Y0tSVW1OXUI/X3dUK1tBRjNSZEFTQHVjcm46NSQwKDRLV3loPzB6KChNbWQ4Y0xQRSRUeklFWWks''@;'; put 'put ''S0tpbDc6RGdJV1t+RDk8ckVqJSg+dE5PWUN6dE96Y1dCYSpCU1k7TGpmKT5ORzpOLjtxW2ohPEZvUUo2SkV0IXo4VjRLTExyTmlia0RRb2ZVd2R+OkxkIl9VYkY6Y1l8fCYiZyFzXkY2KnhWTlZfJVcmT2BvQXcyeVFpTiVpYmlCbmRER3lANm9BNEx+aDIvLmN6RSlKflgrQGlTRTp4IktKYW19''@;'; put 'put ''JUZ9L3Q8JGE2RmheYDpKWSVCK3lsSzZoYnhQN1RZXkd4RUkmK3EmN09kJWB6WEJVP35iRkhkT0h1USZQVlo2YldRcyljRStjWmBqTEFRV09YfHFbKGVzT2kwPmkoLmFDZncsMSZyeEVMUCg6PlU3fXAzQXN3Ujl9VSpjMnU/OTJAKEdpREk/Ol4mQU44fUxvZkZMaEAsSjBoY2w9fVc7UXg9eF8k''@;'; put 'put ''TGQ+Q199QHJJOFk5dGU1S31aIytTZk5ZcTEsd0h3Mz9le0gmWS9fRkgmdm59XjB6dH45cjN8RVtbZ0V8fks7XTpjI1Y3IWZyIX1ielROVHwmbmExfWR2cyJ6ZmlIbj5fZzcuZ1VTSGVaazQxNHg8ZElqMGc8cj9dOHAwakNCJTIkblFbXTh2biFGL3tVT2d4OnVsO3FMPDFmQWtbZFdtZFcvdlFX''@;'; put 'put ''QVRqbXwhL21ARnM8KXVVQ1drbSV4UiRCOSpubnBZKE5tbnxMUHteSCQpUXYlOlR3VXBDTz1bViowXztGInhPZ1J1WmdnUiJtVk8/PWlJaUpadUgldVAzKSRLIkMpOjx6JmQpeCxCaFsvVkk7X3FMUGZDTDF1UEosZGwudmV4RlBEYTA0KEg4WUo1dnNFLnpuMzY0ez5aIyx3cktbIyptOntUZjJA''@;'; put 'put ''UE1iX2NMV2BoOXVXIVYwMTBPY1M6b2FZfT1+OUtGLmg7THJlSWJ+NFpPR0ZnajlHRS84KCJ9ZmZ7X1lmLlkuSD9iU0tQZ113UUh8Z0Rfc0MwKjVNKTBQakZXOjcxZF5OYGhwakkvJGwzfTpWSVUmMFdfOC50NHhfeEZUKjtXMEQpVXMwXiFUemQqUnQpSUVoRlpQNlRjYU9KQSR3RSJFUjNxQ3M3''@;'; put 'put ''NUFVWEQmW15eKWNdVHcyWmZuISVtOytuIzJRfjBdLm5VcH1bPn5iM0VWdGJ8bSFwPC9CK2EwM0MqSSU7dC4vITlSK35IOFVXJjZpbTImdz91PCtMbih8IU14UnUoITpVX0gwPXJeIT42dThybUpeOVgySj1OWmtdXUYxLEFvcmowSnJMfn5vXW1PVWV1VHJdajYuYjt1UTFBa28oc3JNelgzQk8v''@;'; put 'put ''PTpefVFlTlhnPzNaTlMpbipvPWpUMThuQlY0VzhEU2l9VUppNCx4cSowdlJzbzpUPSUyPUs9MDhLNXZhPyN4PGRsZFIsLix5SEdtcVsyMlg8IiY2WHUzW01oNWwqPGVtcTRsP1BGUnkmaS9hPytldFlDOHdOSm9lYS4pI3N+N3hXend8djYhJSpVSFpTJTlaSD40cTUwWENEZ3tqMnZHYn5nZj5t''@;'; put 'put ''VFFZZVoyVCFqOHxkSWRfUXM2fEI7QzlhPitdJjN4N3hZVVFOPjNoc2RUUyZFWV5adDlofUhCQiNnUmQjQ1Q6aSEhInxTS0J2QSNWeXI4KFk+dVsuRk99LC5sYCg6Knd2OGo6P2RHcWcwWj90JHUxYmRmMTdIPFs0Wyw2JX05VFFRVTc5PURNW344ey9hbTw2PkIvU3J6ZURfISVeRzhjTCNoWjtB''@;'; put 'put ''dXF8Jm1JbipGPFRfL3ZCJC4xO0x2b09rYT4+bTpMR2E8Tmd4emR9aEh2fGtCYUNDKSE+bltDT3lLaERhbCVORzREM1dCeyVyPFFGfGhQVFtHRSVQe1hwdXtgVVd3LH1MNXZDQlslZjxNRTtiRDY2VUlGdHdOTHVFai9gPnwqMjhFP0J0IXdDNl9hWGwyMUVAeE9EPFhwI0h0QHJpWF1DMFBecVYj''@;'; put 'put ''PXBDKGFPKnNHZ0BSIkNsSnlqbEFhRV5KezcpRTZKPTdXLGs/NCxRQXtJdmtnUjoqZ11CTl8pWiMyUWRkY2NlRCFtel9yTyYpUzJnbHliTkdKRCssbXZNOjFQYXlzO2swL3J3YFskcC9NUGRlPil5IkE/NW9wMDxjakNsY3o7YUhfNyh+aS9mNEE2NT9FNls8Sy5OTS96fk9UTlBNQWU8eS9daH5d''@;'; put 'put ''ZFEoMm9ZLFJ0OzdoIS4mUGU+fjNeWTBCInpPZCFEbGFWdkZXRzZoYHJnY2sjLGFnbWx8ciNfKXBUPCNVR1hGZDgpMFRGPV9eMmRjR1JoSTdBNGQlT3d7UklQcSZLTTUiOFF2KmtrSkYoZGJqQE5aQXE6PyhEZCVeITQobHZ7OG95YUhwSl5WMDMwKT01YiVaTmYzRm0rPXJnOGZzXzZxPzB9bWxt''@;'; put 'put ''VWtBV01Nc0t9aEJkKV51fEopfFBUNVp2WVZ7Zm5JIV07NnReXXU5eXpvWFFINFFfbHY4US5LMyp3QztkME5aWkdQJiRuTVg4Zz91eH01UzwsLzEkYj5RNDJMd2lwaz0sMUBwOmIvciVzZyoxPT4zenQpYHBpXXJNO1p0KkE+YUsySWJZVSQpSHAlRCprL3dNZ0lrcHxsNWV8cFk5QzJXZH0xc3w2''@;'; put 'put ''OiNlO3lHVkxdT2F1VV9nazkidnNLfEt4Y2t+OGtYKnxhckFwNmBhb2slbzNOWno9dWhUY0A9NjkuKkg2W01ULzYiZm46eUhOUTZTUC9KX3trWF1QbH4mbUowe3EpWGA8YX4xIkB+dTxIWGQ8YzdXVl5LIS8vQVs8LGIqMmJqczd0I1NVdmxqO1N4TVt0QmJSKFo9ZHFyXUJqTzw7X1kvT0IuQCFW''@;'; put 'put ''QFkqKDFZVio8VHA6JSlBcDQ7NW4mUX17fDNPemcmUFMqJGZGI0RRcSNmdUd3STk1OGVuRERPbG9mYXB4d0B+JTgvJHkvLnphY2VxdVpXXWVIVlA7QndJOCFyL1tzZitpMW06fTtSYF5AcUBANV4lbiUkRVckZ3pFKnBJQmtnV1Y5WXY1Rl9qdlQ+dWV9Qk9WT0g0VFZNTG9hTWNGJnteKUA7W3J5''@;'; put 'put ''VH1IJHtfWGVUQjt8aW54WklHdU1eWk9LXlVjZWBaIVojS2coZnR4Vy9qb3hmP3VVRSpkPH5fbjsoIWBlJHE7bzJZO1tUR081QHlsPWB6QHROeDBrSFZgPk93a0dtPz53bU5vaD4xJHd6UFh2dUxxK31gI0NgeHR9VDEmTkRjYjpSQGNPVil6elV2cUowblJUSmEwe3RlPVExYmQ5OGM3WWlBaHkm''@;'; put 'put ''LDZ2Rl5CZUhPYDE3flQ9bH15eH5IRTc5ajpEfG9QTjJgLENXNm9oYVFrKWZjez1uXjUhcU1vJC5Ac1ZYe08kXn19ZW86JlRKMXc9VWwhUThaWHpOTFElK3ZtbGkmYnhmfnVQQ35bcVdEailsaUtmbWBIbTsia1dOaCU9PExrQnZ5Y0VyWDBueWpmMWNUWHh0Pjpga3YrWms9TC8pRSJiOlIsWEpG''@;'; put 'put ''YyYhVik3VWtLW3YiMiIvUVslYGVJTCs2cVhNY2paJmYuS3o9VFdQSThXPEpvWU8mXS81THlVbGU1YSo2WywkJXU5fFBaZkxURGwiLl80TH1gIlYmZ1tmXko/cVhZNU00V1E3bGlnd25ray85WmVffm9pRVByQUVSb2hsJG9Uc2RRNWt5ZDZ1OmhhdE5mcipOT0xuVSM4dyMhZS9QakNKNiUjX2Rb''@;'; put 'put ''NzNrZmVGLy5qJXxLaWZLMlt2VXd6SXFocEN2XSZlJFMrNWcxX2NOYnZXUmY1PDQqazVCMV5WTzBHcnMkK0x3SDhIQChdV3U1QUZWdDJuX09ATEwpSUlNWVI+WXhaayVMRSs0K3crZUxsXTxdRUNsNnRDK0ZeSyZEXkMlaygoSWQyQmFGUUg+ZUtBNDRWSntMO1Z0XSRDYlNqP0lkO3B4dD9WXjNa''@;'; put 'put ''OSZCO1MvI3RsIjVlcEM0V2pSVlZFVk5ueFMhYyNldSgmfigpWCpedVZUUWA0KlNnQ205LzFHLkNbRC5fY3VzdEYheiFRImpMTTE0PWhuTDNtRVROUSJJZE9pN0U3aiJ5TVpebzReWDpvMztNVlRLWkBbQGAhb2RfPWEkJXB+WipibD9hUmd8UC8vP0ErMV9+KXFqOXtkY0UxJG9nPl53M0kkMzU0''@;'; put 'put ''cylrc1dqVkBqVSJvNismaChxJCh+cV5TM3RXNzcwTXprNHUofFF6TlNCNz5ANDszdGZFV2JrW2hHcDVlZCpXdWw1QDVDe0ZENjU+fDdodWg/Mjgydy5He2UmcEJBJn1rOGJDMWQ/bXppUj81WDFAMGtMY1lVQDMrbVZ2VjQ4P0NdcV9KWXc1eUFwR1ExMywlNVpNXl9vNSp5ZSFxPHA/ZlVBaHFE''@;'; put 'put ''TEVXTn4+NUIleXpwSklRPGJ5M2VyIWZaP1J4RTVJN158c0UkIU90WHZuY2JoJWw3Z2x1OGFiYnEkK3Q1V0BCdzxnYGJtJDY5UEBOPjc0U2RQTGRyRXB4RkZSTk10PUZaR2NxUkYjflsrTltHRUcoeTwkTWlvcnxrQl4rV15lPjtRcCNQV205cE9tMkFGaVZ7YzA7Xj18VDVGOC8zInV+Mmh0Y0tT''@;'; put 'put ''KmEySUNXVERxL117VV8yOndmKmwlJXZsKyFjO1hrTjA3WjMpYHo+T0J2KzZ5cFdZU2dAUjxVKGhQWTk/ZixtS3dUWiROfTF0VVFrMGh3KGpgeCtwKWc+ajlfajhvWlNTfVU+YkpMR2Q5SnBJemFwOHd5YlEpWWxbVTddJCIoVjtYN2JnQ2dKc29qbWIoSDNmU3p+ZDZyfEc0JDorfU8yPjNpdjFz''@;'; put 'put ''eiNRQFtlJkkpQ1ZXK1glL2MkO2dfI11VYUExeyF+fUdOczVIP3QyNHtqVyZLYngzWHhYR196X3lRKS4zfDFeTDNHIWRmS1p0WVhnS1JJV2lFIjxhVHc/RVppfEJHTD54fGxEeFVIajtQWltwUzVeJWg+fisvcHdkSXplbXE9WDVvWTgkO3NHOnM6ang5TkEhdD5mT3Jda05Ba3EyeGdFKnBSU0xR''@;'; put 'put ''cz1KaTR7UylbJF8zOjkyd2JWZGJ1SUJmO2wmNHciZ2tjPU5QbC4qTCZ7Un1xOSlPRigkZ01xdWsrWCVAcEJUdjR8NCxZaUEwRTc0RCt4SFNWeE1iUSQyYXdsQUokZilva0BndDUxcTY/bkBMcit2UXVlTUNsTVQpL11mWHhGVEtDQ1F1eVFdQkEqcEVrLDRHW0JyR0JhMjw0UWc5JElTWGlAM2Ra''@;'; put 'put ''RGBhanJuTVBvc18/VVlFP0dPdWhCJFozaDo+RUd8OS99QGl+a3Y0eGQiUyk+anwidXBzSWIzbnpiNjZ2TD09fjh8WXtoZUlRPkI7b0J2OEg3KkR8RDxBTWBXdnA8d3A2IT5WTjJBIUZOSWtbbDBSWVgzLnEpTitPeiVNLG8saD1ycXIiY3RkNkZBLiFwfndgeXg2Uk12dENLMXVLVE0oZ3wyan0v''@;'; put 'put ''MltqRW8wV2ImaXZ3d0dLMD8mWWIvPCw4cXNsaD5GcTBPcyNEWEYxMjM9OCkzdkYyQk5fQyJpUUVwdmt2PE0hZUxgTis3WntpPFE8PGgoMChSSF1dNSZ4Mi4hUzY/ZiFQWlouTmQ4U3Q4PHd6JFMkSiI2amp8bl81NVNxZiZ6LloifE9ZdVdDTnYjVj1mPWl5JkFlKTZoek5mSXRfcix2aipSK21H''@;'; put 'put ''IlpPQCZwfWJDVUZFLn5iX0piKjRjd0JzeXNwbih8WXtmfjx+MisoeT9MJmRMV0VeVkh2NS5zb0x1XWtDX0tMRXJjRW1fSkV7WSJOZnE5Z3o+SE8xfWQ2WjIhdUU0SiI4U1pRQGtOZ2JWfVZoRGImSnkmTmU9OFkqWEghYHoxVmdAU3Q7VV57QFlUZHo4bXsmdzs3SXJpcGB3NnQ0RyxbR0Blfiw/''@;'; put 'put ''PEpZISJMZUNxbExgRXNvTGltRjUqWVlpV1cmaD9OImk5I2hWOHZFaktNTkJUSFVwUEYkJXB8XXQlaW8pTjk4V1NlWi9dNjVWKEJYaElUJldnfD5QQHJTZGxmLFVpJnRHIlU7Pm1IWEghN2Q0fV04bWNFcVgmSn5YSTM8NktUfFE4KkB5Y0d5ISJPRUcrS0psRnhHRXk4Km5PXiZmSlckZks9UUs8''@;'; put 'put ''O09ST1A0fF84NCRrMGBRJEZLNVNfLCIrRjxOI1JIZ15vXjExZjUpQXo1QSwzbCRgRlQ+fDEseV1+RywsIjI9UXdnbTM7YiRnejJrOld9PmMpWV58UmdGVy89I31IXnUpMV98W187VntpOCNvaXdQSiNRRC54K2sxUllYQVFvSlFLUixmQVVQaHc4VGxDTkNDSVRMeVRlTm5lK3skIzw6dSV1RlJ6''@;'; put 'put ''dnc0PXhEUH1sXVBwW0RpbykwXXgkczU+cjZVaCJsJChwbHZTcm5OMHkyZXdAJjk8OChxLitzeFZjcVddOzVGPyFJc3htOSRsRDA+QXBORGg3SGwoSlR1e0JTRmNCVTZxTSZAL3ZiUUpkTDJ5VWEqdyxjK1h4akxzMTIlZltqNlFaY3t1fVU1YjFAdUd1Rz9hTXtLQngwUnwuKH1KP3Y6UTBfdjB4''@;'; put 'put ''I2Q0WHRoYG5ac2kyPStVVH1NSz1PIWw/WFgyX2ptMiJsYERGalgjQVBeIyMlMilAVGduYU1+ciZPVG17c3tgQy5aYEZMNT42R1RvNT5bODRTV1pxMy4qI0s1QmFfRFdoYVBbbVhSW11zLjVNcFNKZ1pKUlRRRCFPMzE8ZUs8eD9jI2RjZ0R7bnUoay5xaCNwL2UsVT82Qy8hdWUkdXIhcUZ1YUNn''@;'; put 'put ''eHUqbXFqc2tSI0c1bnViYEl2QD1eZzNqQS9DfSkjMUFNb1czTTFYcmRSY0U6NiJIWnVZJmxAWXxaXWNdbW5qL2BMIUhGMmI6bDk+XiFBSXMzYm0yVD5+Lilbal9MYVUhOlQ0cSltRjZJeWdET088SVF3XWdOcXxtMWtpVn1mL202PzBYczI8e1gsdGNyYW1YJDFqK3FIajhHJDdRUkZIQzFyQVBj''@;'; put 'put ''RjI1WXhKNF1vcE9HbDx8JkgxUXNoRSloUWh2Qk07MX1oZWBhQzg6SDRAcClhOWgvUiYhRndII11KJSYrckVSV1F9LClyP0A0Y3x6fng0NGohJEhkWXpyeW5EM3FMWj5jPWU5OGhoQHBIWGZBNS9ucFpZcWIqLlgodFpXaGF0SyFVfjR3JmNxNlNreSIlNTZ3M31zc3VfamE4eSt5OUZmPzBKTTdn''@;'; put 'put ''LzJNfENeWkVMeE4sNE02SCttVFt1PE9QPzssLmhBXmJ0MFZdZiwrYyNFdiJRQSwrWjlefFc2aD0vaD0+fmREZnU2SDVDPDdWfT9TcztrV3w/cDYjX0dIdi5PVi96SSgoNDRKYmo9YihlRVliUSlPbzBKSCM3MUoxenVqVF5+UW9LVDB2NClIKU9TQjtldnVVe0BkVSNTMzloam56Uz80YEsoWyY7''@;'; put 'put ''N2lnQn0qaHkodHFHMnxeMHB6bUZ0eWFSanFiI3ZqVVcwRktBdWNzTmxNN2loK1g0JHNdJnAsMXMuSmEzLGpmRm0/ZzdBTUkiYjUzekZrI1BVdTpxaiNuIjBCRERpbVdLdEpNOz5jcVk6L0JAWSJpVCtpSHZdL31XfTA4UVt4c01FbFM7eW0ie1JgJFQ+QiVCJGtzMUhneC8/dTxlN1lFWVZzYEsi''@;'; put 'put ''aFVRWy9HOCZnPGY5bl87MXhFIzUoblNvWns2Qmp1ckVtU0NMImgxSFNWWjpXKm59QzF8NHJyWCZxSThvbXpjKj1Ea1pufF5sNVVTOD50Ok59fnQ4VltlfVMoPHZ6LC5GYSJbLH1aTkU/JTlle2wlI3N5VXxyenJ8L3ZLaHV5Ojl3JlhxSjpbVns9QXJkLmt5ZyEuY2NaSmhpU35sPT1lIXxeczhE''@;'; put 'put ''Y1hkQ1VPYEwrL3hnWC9wMns6b21xUV5ZQ3cwMD9ScmE/IzQ+QHgwNDBqVmk0MTI1PHdKaVdUX3FYI01wI3FSWGhpfmVjOEkrUiF9X0YoWVZzTF1MUSN+ZnxFdSttM111KSJiMCorMm1SQzYqNSQwVmtqVD1tX0RQLD5VcFdKW1hNKiU+aUlNN08jYzZePGwjcV8wXz9tUjBlIj5MeSZyeltTL0xG''@;'; put 'put ''bFtiQDgpK3dHWCtpYClrO2VnP0JBOGdNQ2xQXnhtbkU5OjxWZCU0Lz8wQH5HVm1Bdzo0bWczRDJuU2dpZD8mPmRkYUIlcyp+TUxCMEZAVnBSQ19IZSVPZ0Mod1FeaCFHR0BJPUNYX1hFKlNMcnVWMkVXRSlCcFlsRWNIMVdTP2lPUzU/TXR9dmh7ZnxkKF9GSCslOktUT2R3WjskKzQrXlpYeChq''@;'; put 'put ''TFR6bER1P21RcV9WUzRIMyh+OXFXOnNpfGZKPFVbN0hmXjdVQHJjRytaaUQyV04+KXhVaGt9TGZiTDFvLHZaUCE/YClIPzRAP0hfUTRiVzdZZDg0ZmQxYUxGKT5yN0creE1hVT99Q1p5Q3AmdEFPXTBhJXQqSylfaFMsMyxmPlM7RntydjtHc0p5bkg2eUx2eEFbdTJzSmEjeEtLR1NIZVZOWXlg''@;'; put 'put ''eHRKZ1FEMEppZjcpY1dgRnNsZzloI0lCVEw2bUVsbkx8aXVrPihfZWcpcXAhVFZaeykhdjJPcV9tYnkrX15UbkdtKiEkQ252OWlVKzssdDhhcl9CKkZjUjtGK3h0TGRhfT44R0ZEdTJsZCN7Uig8Sk4sT1BkLFZ7ZiN1UGpMM1AwUy95YSg9VUU0Ols8XypZV1RXZnsiRXVSN1hlZkh4ZCpVLD09''@;'; put 'put ''WCEyYGZld2o0R3tbMCJYeCxZSzdONT1pRmZLQn5+SFFOakxfRUJmc1BnTXg7UW9DRk1CYEhnbH1fakw+VD47YHpgYGM9W0U6QEhDIipwbmxCNlhJemhHMD9Fbk5FRVFJMik5djQve0I/cWNgKzpeYl5RVyRVd3VLWlA/ZEV5Onp2S2AvazF9d204TEE3RTBQS2xtITksKnZRIkdOI314KCUmL3cj''@;'; put 'put ''ITNyOyFTWUo9Oy5CbTV1TyI9aitDZWdvUl8leWgsPHkiMWtnNzBeWk5yW2E1XlVLZWQqJEFNUjwibnNXTmlda29+VjZYcT44VjFqM2Z3c3dyUyh0JHo6KXUqcWtVcWk3Jl4mPzhyd2EqQi9YaiVHcllydT5zT2wqU29xY0RBKlIkVVVPU2p5WlQhPEImYGBRJShNQEBhcGs+PF9SfU1zI248UDRR''@;'; put 'put ''WU9CcEZOWTRTeTNiaT1qTGhuQDxeKWFDJk1dKlp7fVs8P2BoTF83MTZRMClFZFNqbyEvfHs0LktsMyZORXlmXil5YmQucChUN1lFWCl8PjR1b3x+LClMS0VJei9eWG5KWz5gNX08N0cmMW5NYkQxb1NoelR3JVRDI3FdYUA6eDg4aChTPVtfNEsoZ2cvO2JwfF9zPEMkJnl7fkdmY1AuKEduTyNW''@;'; put 'put ''a2kpKW5fMjsqXiVZJk0jbGhpM0lxaS5TR3twUntgbkN6NDVkPywkVX55bUg2bCZMNCUkdip3YFYiblEmS04wYD5XQH5MQmhmNTh3O2t3V3BQVHl3Uy5EKHh0PHEyYGVMMjAiPXxOT3IiR3xPUW9rVlAlek41cVVfXjJ3clpmZTpTJXk8Xl11TUZzdWNvU1hoUEZ4S3A7XnMwZjRYcE1VYFQlNilO''@;'; put 'put ''PVZ1S2ApI0M1YlpTZDZkcEJiW2NlVUlHT0NQfj0jI2l3PUt6QVlXdHxhMWNAbVIhPH5XI25aPFVUZD9zOHg+UFk8T1B+fl9Xdm1bRmdNLyNMKiNeb0pYJTI8RnVAMVBfUmB8MCtfMlh6ezA4cCEoQk8+WHJTVSQ6L2N6bnVwLCYkX0slIU0yV0IkKUxyfms8ZkZjPEl0Wj9PVnhsM0gjIy9scDso''@;'; put 'put ''aWJ2N2JXUC5fM3Y2dzZwZ2JPRXclaEQ5cDhVKDZTcDQ5diFvd0lDLiROM2VbbmNULFl4ZXtOOnhueG1FV14wLElLT3MpeTN1OHMub21VVTlBLHx4QDBuJGoiYW8qQyw5XUVePFZjUDI3QWF6Nn4kO0lYbm1yP3hTbGRKSj9hOGckT2djTDFKMXdAMk9lcWdSW08qWCNBOGEsIW1PbEJ+dU9qZnxn''@;'; put 'put ''O3ttdT5jeGV1aTFHXThGOyNVKk5VY2NkUjA4YUpPZG4wJD9xOighTUZrOFp9L2tNO3Y/XykrKV08UnpaJV87ZH1qdSRCVz1JUlVCNF03WC9AOyN1NEQ0Ny86b0xFfXpwNXMhRl0kUGtjJC8+RW0iTWsmITcjQUVUdDZjRyE9K2ZnbHVhaW8kIW5GUUFAKX54aVBTdW9YOCQ7Yk1qZGsyUHAlXiNt''@;'; put 'put ''PE84Olo2KXUpKXVPUGBiJUc9RTIqVjdGRyYpdiR7Wkh6PEU3Ry9LS00rXkUwQS5Sbz4vJm5kQTRObClseHJWfCw5NjhZPkY7U01taH5qOmlpPTlMKDV2QDhZZk08IzRLdG90RVl5d3pRJDRuSUV4W3dWL1tpYyNUUkZFWlgpcF82KSNrYlJTT0ssdz1fNGsuJm5KUWFSXmFQUkIlR1Z+WyEyUkp7''@;'; put 'put ''UGA4O0dBZDo6fmdXWDE4aiQ/UTl6YiROflB8fHFafiV0W3g/WUQ8JmcvN1cvOn17VCIzRWlzazIzaEQmX15gR1RNLjV9a3tGN3UrKjA7UzlnI25OV29MWX5qJEZnVTYwdXxJI29vdl8sOXdEWFBJMnQ4fkNmcCNXTyp3IXYyJilKLmRdTExNQH40aShhfXVSQVpmRGA6T056cm44JDp+Qjk+MSkr''@;'; put 'put ''al54Zko5SzJ4TVtjZkh3LyJVNT1HRzVZTnddSlpebzIlOCpEbX1hW1NlMjhBRHU1eD10Q0RGcWNQeDcwPVI6RVV6YWgiUU4/NFV3aVcyVWpxRyVAOGhnbzRMd114b1ExQlZtYjNPK2ZWUVd6N3RjVUozMHsvRGMlNygwWW5tU2cwTT9LKEQ7L2c8MFIwXSEoWXhOeDZmUXcyLjQ3Ljp9THokMlsx''@;'; put 'put ''MmtVOnJ4ZWQ2bjFlNCZ9PURUO2FLN3JLNTB3LE5ebmZbfWBgOntDU3daMmVxMnphWC4mZXxwMjNuI2cjTHMlVDUoLEd3M3dSOT1Qbjs6QHtPZDVqPFhPN0ZMW0pFdj1mV3BiRi9HTi9MV0srLElWNExWKWRJSj5ldCUmRjpuVnFQQ3RWaClgJXkjenhKfk1jM1cpdnV2dDx6YS9uRSYsRHt+W297''@;'; put 'put ''e0hYRWQrU0lQTTt2Ikc+ZCxlMmwifEN4YSopa2siaUpSLkJrKCNlQjN2cz90VEVrWiVMYjlsdWwvcFlDL0xpaVdvQ0RbfWwrcVhrTmFpKkJ5O3pXP1FKPkk6WDwjckBePC5VU0VVY0sxVjJlRzMmL3c7fHl2M152d29dVX1pZH1oOUtpK1csaFVEWTFHUHBOJUdqKypvPT1FcXFdNWZre0pacT1u''@;'; put 'put ''UCZZckMmQEVVcDBxKXx2ZjE/S1M+PikyXzhJTSVWeChZU3Bqa2VIPWs5b2pHZiMyfHIjRUxuMUNjbTh6QX5MS1t1aUxILmdpS3NXNDIwam1uaXI7dGJOYCxAKGIzO0xlZTpyLCRMeDFVSWNiQzsjPjhqSl4yUk1+ckghazcoRylfZ0I9TWMoeHJ4bEkubDE4MCguW0hPYiRoeXFNV2BAU3FPcURW''@;'; put 'put ''fmtSenF4dW11TVdoTzwuXy8lbGRVYDFHXj1deWBSZ3d4TC44WUZMX242TlFiPlJZNSgme1VkZkR4JT1pcGMjLiVhRy98LDMxLEBOP2tdR3c4RXU8XlR2VFtqSnpWUDtAb3VDZzdjb2QzXjZPNVMuWFNAaip8elhONFZLKSVVXTtMPDNoUk07bX5EfT5zZHY9dmZ7fC8zclNWN3dZY2NQMjRyMlhy''@;'; put 'put ''U0xmSz0oeERCL0pycXFBLjk3YltITj5ELEtgbkUlPzRvW1AiXUU6KzdbTUlzQENTR3VZWmlHaVRnVWJkYmZDVVg4RjI/aCorRmpaRF8lRnc6W2VVJVUpOTlBVF9HSDV1fnprWG4uNlIlfWEoTzI2YF5ORlRBd0pkTFdRdkwwUyI2eG9JZTdkWUVXbzlmPztLI3U4PncjKGFiJXArKlQ7JFpWYyhD''@;'; put 'put ''bWs0MERrcStydWglNlYoS0xgZmRfcF1den5Dc29dN0V6XjtLREglNnlIK0ZWelsofSF3dTNMKEJLOGR+M1EwKytwRWFUL31URGhQOTJsNzM6bHN1RTZ2fDx7MV1jbzRuUD0yLFd0a291KFhVRU9xSi5RQT5QSCtaJXlQeENAc0dWJiVEL2VwUHwpTFojTzBkTCImKmd7TyFQaSZxVDRaSz1wZCg1''@;'; put 'put ''VnJTajBhY2lQaXMkQj9ocDV1RVtGWGptazp5XygsIjhtYHsubU9bXjFqUj1oVHgjU20rL2pzez50T0YjK3RPaEtuSGwlek5ZWX1rd2k7WD1Ra2RoeG5DV017aWZxWDltTnBoXTtRcSVmMlFFTDlkR3Z5eVFeSFtvQyY2PFhzUmgoLiNWeUtjcG9MRkdiKUF3RWgvaVY6fEJmcyFJQ2RbYU9qaSo0''@;'; put 'put ''cilVa3pXNSYwNDFuUE00U147TCpaTHwpJWsqSy9tNXA7WVtgSDJdVHgmJkBQL2AkL0BOTDoiSjg2dW40enFdUnclLDQoVDUzdj9Wfk1HOWhPK2xFO3ZDMXpWciQzQCFNOF9JaD83R01UUkEkXyJjTCJLajoibztFem53QDQpXUh1dztsRH0hLkgwbHdiaWpdaFQ9IjNfazBKalpoPmtqelFNQlZe''@;'; put 'put ''KnY9USV0M3V0R3hmLlsuZXU9RSFnaj09QkxqJmg8QVYkZnIrY3YiRWlpZCRZNW96JSEmbkx2KlJYJjR0RkdIXlh8Y0FEO0ckckcpP3I5d2gvNXZHLH06WUBiTFRWfVh8TCp3Uk48b2FjQ3NOZT1yZnt7Und4MDxUSy59cmZbeWRaN25Mbyt1by5hN3Y8JDNWRzFhMjhWOGwzZ3FWOVc0QE08QDY3''@;'; put 'put ''JXgjMHpKPV4pSDo+WX0wMjZTW2BMNHg8Z18heFpqYHErITgjRzpeRmthVDhxQ0FOIyZ7U0ZVcUxrUFRqO1RjQHRDRmZtayRCT0NARiF4NVdZcTFwNCguQTxrUn1ANUQ+aFBTNG9mV2NDR2Y3Q08yMHpqd1lmaUpERTJBflAmWEZfOUhSISQyVnY3Z1RqVT80dWcrJjRkZ2FzcSszezp5bG54b0xI''@;'; put 'put ''cituaSk/YjkhOU0me0Y/cVQlXUdMLDRecmcrJUtfOE9LP1NON31uOElCSjxdcC9tZm09RFMxLjtoaDZTKlg0anxCSkUqOTVwdytoQFNwaiV7TyttLHxGKX1SNVhjOHtYcD84PnM8VzJbSlREImoyJipGMU90KGU/dTZWZGE1RWc7eE05ZkgjNzdpdEcsLk0uYV1QcktsbHRmSjBHNTBrQCwzNnYy''@;'; put 'put ''Pi9dTzFHanFWYShvanxwNFsldmFSTDtoZD1iOWwvRVJuViZeaHxMTzRQbzZMMHEoMjMrWUJDbV1ZZCh2WGcqKD1kaVlzO09dcCFoWj97RmdFK04lRHRMbipNfHAjQCh4JXZVRyh6c05fI3pQaDpycVlhOVtsQVdZND9xdVs5UT4kb3o4XmpaIU9pdXFDbEAuW3JMPlkrXjRsVk5rS055Yz1gb3VJ''@;'; put 'put ''K34/RzptWkRJZn1IblhzXTNVWFppR34pTj5PRSR8VDxjLktedUlBRSFyeDJINyVtVkE8W3YpRFNLXXI8c2JvW1BJUj4pL1tBeF4mSmBRb2ZkZDNWQ011b1YhT0VHSClAdT0obiVJYm51byU6KihrNlgzZ3FoSmxiOTBMQjlOMktCMHozfW8wfC9ad2JqPGd5YztfVik0dEFTVkRlKXVvMjdqMV45''@;'; put 'put ''em9PeyFFWV4ybzN5K3FOfldpUSt+RSx+akRDRHp+MSsoLmMvPGtkRW92JkIoM3tUY3l0ZyhPeCVeUS9rNGVqL0BoeXZiTDkwfmkmJXVAYCN3TTFuP2tCRCglQSM+QHtGaGdXITk8JlEuTlNBO2M5Vzd3KG5BZzY/flpJKnlBX3w1VW1HUVY1JHQ0YGhaPUp0OTluRSRuKUdPJk4qfTVhKlBlfHQ3''@;'; put 'put ''PXFVRS5fW1B+Pj5oXVE0fFlrTTtDbCQkRH5uKThxYGUpUmBsRXlHS1hodHU6MkA+Q116TVg/LC9MRH5ad301YEpwMV5FSTlgajQzUWIpOWljIXNEPGExV1g8ViVKUGxpPCRdcixaJXpObjV6P0B2VT9TQi9tY2p7aXZvPnJZVjU2QUBrRFJfIWZNS21APztyanZOOis1VHlpKjJnMiVRSUpOP1hg''@;'; put 'put ''aHJTN2hbWWpwZDE8LnBOZmBJWztqZHI2NkQrUGpeajkqVGhTPD1bWWA4SlJ+e3s/cz9vQ3xPQ3QhNStZP0BWWEVxW0lsaDdDK3J9N1FKMSpvPF1ZTkhfcHJFXS4hRk9pfnpkWX1VYiRTSWVOOTFedW5ZIn0vVyRZbillK0pwQDU6KUAvJktzYiJrdj5MNXl0ZVVKYFJKMkU6T1hsQT9de0IoXnxL''@;'; put 'put ''amg5eDg/NFIxJWI2fVtuVDhjY3xMQWNGVDd3THZRYkF1WnZjTmVoXnN8PVd0UDorSzcuaWVhcHd2LEdlXUY3aT5pKlZ2JWRCQV0kcnFvR1gkPVElKDZePV5LTVJpeTJISTZyZztOek9qXU5WbHM9PH0mc3oyYUVfQXtbbl07eTpqMVFRRTNIOk5SPXM0aG4zcXpHVzwvPWFyR3ZoUCxJVFRbNyFR''@;'; put 'put ''c1daTkErXjVlPjJ7bTdvQ29VSVJGal1pZno2b0hyWlQxYVB1Nyt1LDVRPiZnJXFOZTd3PE4mbnViNDJ8REVOQ01TPTRVP1c9PWpaQmwwMXdzcS41Kn1qeklBQlIoUiQ/YGF1WiF5WTJDb05GY3V5I3RxV2Z8UjMqTSNDUUspekxlaDNQPlhfcG4lJH5qTk01c2ZDZSpgX1E/ck0jPEtUeT98ODZh''@;'; put 'put ''Q2B1ZVIqMVQzNUZkUXg/MT96XklWUj8vc31RPkhsfi54WGkmW19UISRYRSZESVR0ZjtiPkBzPWpLRCRwIWFkVS9VIVEpN2EqWTRnVn46TS8qUk9DLk0oJF5VbGw9bUJ0KzEoVXRTQ084JVE2cklucVFleldKbGxpeyo0b2BDRVtJIlN2OF9LdTlGS2dqaSVtPHI0MUNDYFFfQm56c10+PThwRV1R''@;'; put 'put ''OlgqcFpSRSthQ2J5Kjc+QlIhMDtXaGVfcmt8SjFJbXMyImVOQjVbKzlKXipHbC9Edl1oRHtDdmckMXliYD94V3o9YDVvaH1NdVEweDU0MD9KYTdFe01ANjhgMjZpV1U4fUVSdUVoekgsMyR0O2txJH15P0BSWyNnTStkQyliMy9WW1l9bF1iS3BCeCtlJURbQT4qNGBKaU9LdX5DZmE0NDleUF0p''@;'; put 'put ''Kno1cHk7Oz8qWlo6YE8pUl9ee1IsZ0tpR11CZ0dTdSxSZUloMyx1RGJBdmZUV0FGdU0heV9JMjRAZTU4RGosUEtjZHx3O35iXTxvODNHej9qajc4eUw1Zi4pYmFDeCNgUmxnO2hINCUkbmRIRCIsUi5vPEddRiZgcEJXV00/JHtJcnVbe1tFemlKbHEsTDsobVt2c3RXMzJ2MHEobTZPVDRAM2Np''@;'; put 'put ''KnlaLEhzbyVpSTB+bigkU3wqVjNVVW9OJEt5R2R2dXVyLzo+O006KHclcThpPFFsT29fRHBSIWxwUkUjJXcjKWZ3ZkdzOkBhUGgjSk9TWGFPYXdsQ0ZaY1VOZzNiRHxWKSVvcyw8b3FoUl9ucl5NTnAsOSI1by85U3xGQ1RgNVprWVM0d3R+Qn5HY2s5RTRweV5FaH51dyg5O2V+NF5xU0hUejI3''@;'; put 'put ''dyNyR2NsTF0uITFqLGM/fXRHQmF5M2lhfFVhRGF0NEpdcm44PGdsSC9sOmwvZGNveXsoQnhVTF5QXl1vNGI7O09eNTxRNFhTODk4JiIqZjgxOVMrOzAxZDR6ajNHZWZ1ZkdQRE9xQGN2RTFmYWBUVmFzajZURF9FPXNyWiRjfllTL1hecGc+QG5XMzFLNSZZSGQ3bFdXdHFjd29GLj1pRnxfTzsr''@;'; put 'put ''QiNIWWlAOlZ6eEMmaERwaFM3PHJ8RUVWXUxbKUNCP1M7SU82Y28uJH50bSo3VW1dX20sWEdSLF49P2dAZXpIZ2hQTE1RK18mbT9IZ30yVkA8TjlaQyJOTG45aU5+d1dIQFEvNFtMbE92ZVl9U245ay9aNUVSUCZVWih4dUFWYyl3OW1DNjhtT3Ngcmw0PSMkbC8weSwzUmFMLDJkQ3c7IypFJWxy''@;'; put 'put ''XjYiQ3JxZVRgUHgsXzoociRme3NFb0lVLEZZIT02MGs1IWslVCtpa2osQmVpO2I8SW9zQ1NQY2VfIVdYRmMuOENndGRmTkI8bXJCS3FqPG54dDFoakB1OnwwPnYjNFBSVTY4STtwR2lKbCx6dG98SUJvPChnQHFtbDFmTzorcyNneCZVTGF6cX1UOWcpfSg/Xjo8W09hc2IxeXRoQHNgODxtY30p''@;'; put 'put ''VnZwY0p2TDdCSU0qTEF8OSFxTHhNQztObXFbUXBGeT1WQj9XTlBXUUA+Y1Qifko+bEFgWGQ0eVl3MklvZm0iVVdDVjk+TEorWkpxTiJdYXk9JV99TWd9cntEWkRfMz1rdlpdIzFVKSlBTyh2JXVFL1hTcWM1YS8mPCxWJV9oSX47XmVDN2NkZHlhclcsIXAubVcxPDNJO0Ahd1RmfXFLaSove31P''@;'; put 'put ''L3Qxe2BTc1pYNzZMR1ZqcHBQajxJT2NFfW9ZaiM6PTEye0VifDZVSk9iU1A2YHpKfDNDSDd+YHtPUUddJFcqZ09AMSFMVVFqS3hiU012c3lSeTxMbW1rLlZYTi41WS9zZHpDP2NvSlBNUShNYz95QkRvVlB+Xi5+eUxqMmc5eHdTNmAxbzp5fWdMSysuWDE7L2wjS1gid35QOXU3SlREaX1gZX55''@;'; put 'put ''VSR5XT5HXSxNLjZWbElsY15QPytzc1MrWkI+TW0ieUhHeHFmLi9QN29Te01QZkclPWk9LEk3cGJPMjpUOyp7LFR6U3k/WXAmXz5RfExTdjElY04wfUVtdFk7SlowdDVDR08qbGVgKHU9eilVPHBoVXB7fHMvPH1rIk8oRGldeVFfNFdwUlpEeWprVFN2KXJ8Im5FU3x7a2tuWWhPOiR8aFQzQ2lz''@;'; put 'put ''X3xBJHp9cFZOem9aPT4uVHAkLkw0bWNLWnc2Rl0kWH1IOkdCJiVEPGdMeUUrSmZ1KUdbdkV+eHhffG03ZyMxeng+SmM9NTV4ZUMrNlUsZkJ5RktsYnUrR0UhNCxVKEI5Nz5aeywiYy9CS09aPy5XQVVedXR7Uj09UjZudGw5IlIuIkdqbDxWZl5zfXRRQzMudVAmcyRULGFaL2sxc2NRJiZtZUcy''@;'; put 'put ''X3BueWsuVkhxRmIvNHhjI2U2X21dV3k2Wi5fOyw3eWk7ezFiYll5YX1QUXpQJTQrI3JZREB9cmZzJm5ke1p6a2FqOUhVe0ZmWGg0bX1bYUQySGJbck9zRC9dQDlIalpqM0d3ZVgma1pMXVpZYVB8Om4ubEFkel4ramk/Rz9kNGdaNChPd3shXVJjfSY7ZCtPP0pKMWcmemdNM11nMjZDRGVLZEFk''@;'; put 'put ''OT9IOGhMKzgrVilqXUhqKj9udkBNZG1TQiNLZjhyVC8kVXdWSittN0UxN3o0b3Bnclp1P3lUWFllWDw0N3UqQm57dFFAVUAmOy9jZlNCOitLVWglRUo3Om16dXlgVVdMOlQvNkx8KXUhOyp9aGNYaX5ubSU4OywuNiZoIjlpaUhVS1g7JD5OJkREa31iYiZvQEtVMC94YVI4IXNpTjsqN21OSXt0''@;'; put 'put ''LmY+cCVVfSN1aXJrNk1HREV0Ujw1Xz5bKkUrVF9bKDsmZUIpaGZAXzwuJTlaMUpXaUplXyM/Xm5dXjBiNW0pM2lzQF0kQ0Y3U1s0Kjo+by9+OUU6XXYsQ2pga0V6Okplazk+T35RVU09XzppRTw5VC82YDczRiN8bnBsdHA9ZVVnPE01YHY3Lzo1aEhFQ0xPSSgodFpHd2o/NUtlY3QqP017JnNg''@;'; put 'put ''XUB7Yl46N3pnblRiS2UsJC8qSys0O01EI3Y9VXJfZV5jajdbb2pvcFB6QDRgLlReQEtfVFZtKigrW3x5M2gjUkxERVMlJCtNU1FRb21HaTN6biRjbCFCdV9sbEtHeWRzalhFWkY8ZjJyM2Yufkw+UTI2MmBYSWphSEdSQlJmUCt5QklmUVF1TVdgNVdYZFlGKGZzdUBHKlche2ZYXl5nV19re04y''@;'; put 'put ''SkhvaXFQPDBETUcsY3NNNkhoWTJBJWtHWEZdYlZEWmp4UF1ONV1gRz02V2Vmd3Y0eGsoQko5QnZHTSNvK0x4TUpzZmsqXl1yV1hNWyNnI3JhI2hMWVVAYDxOTDNlOE1sc0dHYUEzQUZZaUAkRSQkM3x+SWRjYEJtcnVFajZRd2wqT0N2bzduOTJmOmRMcnM8Nz5bNmxdazxjSEhpRHgjPVNlez8u''@;'; put 'put ''OVg9JChLdWBSSFFiXmwsdSFUdz02LEIzKnVzNSRleWV7cnVBJGVQIV03aVVOP142XlN0Xm0rbSQzalRHWUMiWXRYOSRPb19mVXh4QV0oTmByaGJpdHsjTitgWmRxV1BCUz1sfmJaOD5wW3NBXTVqRV4qJE5wY28lOCNLeSI1VWwvPTY6QGAoQnQzVGpZWmNWemlbXk5ALz5UYSw0THE1QzR5X1cu''@;'; put 'put ''aFVAM2N2RWF1bkg6ME9+P3EpPU1mKiYmeVlwTjYoYzZfP001XnVBfmRUO0RKK3syX0l+NlYvRiFxSzVbXlc/WSNXRHg2R0koPko6ekZhPkI9RHpGYWtHM2BYWz1dP2kzXUBWeHhqQ3wxQihaO2BnYis/ISMuRC53aTlGPSRAPG5fdH1LPW0yOEdoOXlWcWlqbDEoVEdDU3VHM31TV2EmNGg/YiRb''@;'; put 'put ''NDhfSkdNW3tFNFBjWVclWVlHSHU4KD9yKmNDJjY8YzpSTT5IY289bGNFRUVoQnxkJGYreWspRz1yKUA4YVhGQ2IqMCxtJUIwbXNqejdgfV8pbkUjfF5keUN2Mj9uLHl3c0RZSiNaKSkrZSE/Y14qeSVaT1hTQFVARUBSdkNQLHI5ejZVYyNrVyRFSmlBfGZrdW5SPGQjTTpOcHUmdWduQmRhOXE+''@;'; put 'put ''JEtpIyF7ekVdbUphOl1qLEZAITxVeFRgVlI+ZCE+ckY/cCxwfCl+cTlLL1EmWCE3dmRnOVV7QG1bSFBeLlRmXVYvX11uI2NMaCg+Rkt5SHJ7NSRlVldFY31NdndoYygzVWl4V1BkUXVNSVAzPF5TL0lyOFQxRHBAV1JjPkEvNk1MIjB+ZmMwV1hye09ffUtsWEFuUmtgJmc7RkRXXn15NkVpeyhM''@;'; put 'put ''c2FVKm9STE5jdUo2S0BlfU5HdFNEPXZgNTVKajZAc3NfZCZ8K3V4RVVUNl5rXyklXjw6VEx0fCtmJmY/YXJSdT5yNHElJDdxcUFPOm4pJnlEPUVgYUxVRWlSPypXQzcmTzAuUWAqSjImcEcydVYycHRIPEdLW3E5JDksViEyT1lYOlJHZHdpMlFwcX5POk9Zb2JRWSlMenMvQFYmdlh8cl4iVzB+''@;'; put 'put ''PzpaL2VdaTZHPV13aGoyJlF9IUxHTUtuSEhkR0ptYy8zejFZZG0pW0hrRiE8WWhZVTR7bnhIQTgsYW1SKC95Vm0vWyxyPSh3eERiRyVqbTdLfVpoeFRrbGp7R29EW314Tj5SY25IQHs+RVtpRmBlb05weV0rI2tFKnghJjhoOCJdO0xfKFd9bjhjbiJMSiF+ISU6Skk7X0Y5e1hsUlo/OU9QZzEu''@;'; put 'put ''Vi84UjclXV17bSVDLzo5In1FNSsxNGt5KGE5b0JhLHgje14kcE9ZfT0mQzgmWEQzW2FjZ3ZGI0pPZHFbbzkvcU1KcU17T1tgaFRbX1NiNzkuWCpkPTckSDF8JDVBN3dEVzlvSjJ9JiJBfiEmVChHNiF+NTVFX0RNZExGVVVGSz8qRkUsIURZVDgwTiFwOGdLW3laQTM2SSxXMVdKIi5bSGk8YGNl''@;'; put 'put ''Z2ZRK1BGVWBqOHViUWh6TDRJKUh8PjheanNFfWlgWismOmQ4fWFWPH53XWlraj5oLGxbTTJKX1R1Ons6fGt7dzpVMXNEWTRrYjFyNUZzLmJCbiJXU254Okg9SEhmUzcqKTVtJlBTMigvX0U2XS9BaTFnMG51LEtsaF1DKXBQMk5rSFFkbTR5NG5UNTwwbz1rZjcpJVZvMjphZD5NY0x1Qz94W35n''@;'; put 'put ''SCtxM3ooVSw1UXclVmN7YFhuU3hfSjRTLzxtOmo/JkVgem83X1lFWUE1Vk1vNmJMUCM6N2kmaXx+RjhVZE5OYDJqdjMkW0lwKzleQFRWZylPWmBnIz9yMGNrZ05ne304Rj44bnMsTFcpWDl0PXQ+SWdINE1DQk1+YF52aUJUMTJNSWlXflBkUFVYVFNLYGV0Ly9oJWdNS0kuNnROQzs/VGVbTTYi''@;'; put 'put ''UXJzY2IqInVabmIhQ1pOUzE6NGJjZXhZSS9TRHBgOUZVWTdFZ0B7dk1QXUpibDErT2B9P2F1NjwqfnFLWUBCfDIhJnMoakhOfX1VSn59UHUiOGArfWY9PTBQcWYsQnhoYUxgcn5GUks+KGglZ2tlKTJaX11EZDhzfW5IeEJAQX0hWkxXOHMoUWdGZ2RbMj43ZHpsfTlMXkpeYW4xZjM1KXlmZHBR''@;'; put 'put ''VFt4bFVNUkA3JD9FWWs8NSlnUl12R1BlJWI/MVkuQCFETFJoPWlZUyh4QS41Jm4ocixaZnRKYyJJe0ZuQXE0YXd7fkhvPnVpP2NBd2BTT2lJXm5JdHA7PCo9MDYsW3VZP1ghaHFfQVMjaGRiPzQ3U2cqb3Q1a0I1ezNdMmRxJkh6Zj5TbFApSFJkZ0h2cmcpYF87UFFwdVs2dWJmUDJ5fihkKz9k''@;'; put 'put ''YUloY2JWZDU+YUxvPmtDYz4xME46O0pEdDo9IVA3Q0QqYX1aJn1sXlNTT15bQEFZOWl2ayohZXcydFJIQlRvSFpfLC5TTHYuaHBQVVExTlovK3M6XVZvSF0vT1BjNlU+YzQ0NTs1WGh4dF5oSnJCemR7Xl8vSVdpaXhwaTUjKToiLjxzaUZjIltWTHEhc2Fwe0NbX0d1RUlOIzsmeHEufjpLZiRG''@;'; put 'put ''bT1dai8hPXcrQGJsRls5amh9OWNSZUVNSXg8SDh4XyxiO04mRCo+XTs0RCRJRVtZaEEvJXlqNTcySXBDL25yJXZ8cSZTKFp7NUp7TEtPJUs1Njx8fUJJI0pgZy9hcVZddCxEKCojL2pVVlRsOjVTb09POGkiMFJUcjU8cm5XSSxtQ0IsKnIxLzgoc3s2OyxwOkowMlB9NFkwMz11Zn13PGpBYi9p''@;'; put 'put ''bXREdG90MWo5Ny93XT9CT0RORCVzb1VpZWVxSENTdSZYQHYyZ1FRL3ReYTByIVlaRj8uQkZ0dGdxZnZgfjA3R3N+IkdlUlJRcCg5R1diQztDNGUsazNNVmYlQmN2MEtYNks0VzE1LGYzKT9ZRzNvK3RSZjxIdi5IUmheeHB6OGNTXjxFOCZ3N1Q8JDd7WTcsUEM/M2d8YSZ3K1NvWkRAV2k6RF5A''@;'; put 'put ''KH1qOjp5L0RKanhaaSVoITkreiZ0OFdpa1t8ZXE/bi5GPT5MLH5iNnVwQXg5RXFHPyN4LkxIW0k2fXRkYS5JRHxLeUI7V0lWMV0kVGwiI01VeiRKTzUzIlU5OV56YjNESmxAQn09QyF8PU8mISpjTVAmYzkmRnFLc3xHJkVFW0NGb2VJL2Q2Ni5Pa2s/bUteJX43ZGB5W3VTMk9KTSN3QEY5cztq''@;'; put 'put ''UCxwP2AlO1ttYCxrL2ZkbCk8cSk+bmpvTEpFSnozQi4ydHlKUztLQDJPTkZzaTB9JH05Pm9BT1hiVDduKW17RDNSI3dqJHRjODJXQGxXaGJRfHZ1cSt1az52NmcjKzk4LHJaTDkwS3RvKylGdD1DOilZI1hjSVhUUGpONz1bTzhYTGYlUTgqY2o5TGRDOVFdMUssdCsiVzpaW0kiYHRKMEM4K1Ne''@;'; put 'put ''TT89eUNkc1lzYCJJO2NKdXh6IS9tSk04Q2RCUW8jJXZDUE1NO0lMdUg9d0ReUD9RK29ocSRfKzxMfih+OWNHclIpSiFqM146PDlScXBmLnt+ZjphZ040QnRZXWpNcGU0WG1FYU0uc1hoTVhJUys+QVcuR09sQmxsSFNiOX5XYzFQfUV9TVphKXY2ZzFYW1tEKiZPRUFISCNgck5DKV1uYjhlRz0h''@;'; put 'put ''Imc8PC9odDhILDI7b0pRN0k1V3RNPVlqa1JjaD5+LDdadiVedigxI3cwR09eWVFwfGRVIlhDSnpQOjQqYzg2c1dJNkprYyZodDAxM0JiPWpNRTszVyJMbH1sVGs/aWJ3elM2TX1ffEV+KEg4bCQldEI7Nm18YT1AMVZART0yeXZGUCNCLD4lUz9sVTRlQjhxNlN1TyY6QTF9PFI/VTB6bU1EM0di''@;'; put 'put ''d113Q10rM1Q6bHlkOW00JnB2ZkA5SWxnekdiJCVYNl0iQjkwQ1RJWEpBd3F+NHJJN2dFW2oiVlAsYlszV0MiXlczKTxoZDwzbnpbV3AxfmVgY3QrbnghbXJTOmh5NjQ4SCMiJDUyMDlvVz44Kmg0UEI4Nj9Oe0MiQ2RocHlYSV09MVBqdEc5YUMkK09qOUhUM2lnZXhqSy85c2VhKnhLKilAOV1O''@;'; put 'put ''ejR5RytnNEl1SSVdQTFFYUBNcCtQLnpdMk52KE9rfEQvbWZNM1ojZHxLJigyay5oVDw8LCFJPyRzd1RWUTptJmthJmtrZ3JMU3FxNDB7ckVffXsjPSl5am91UmlRPzg9VWwqey5jYy5CfSFGflh+dzg8XyhCX3BbTS8rSDQ2Wnp4UkQxdWJdbEdebWVXVSR6WkF8LmBtdV4raHZvSVZFUHxPKlpe''@;'; put 'put ''KD9pJGQqKDh1QFl1Rm1FYlh8bC82XzJCUF5vbmhaQjV5PHtBSTpubjE7TyU/SjswMDRzYDxMJjwoMTFNXlNQLzFpZUE/M31fQWR7TmIifTtdO3QxQGNqSHlUZyldXWx1MSNCRD93dDMxUy5FYHQ7TnE5fFtASH5MJlMqJlkwZlhnS2pmQiZ6MGxFJG16RDRITUp4TF9ARnN5Ky8mTFNzJU9UKERb''@;'; put 'put ''Yz1CUV5hJFJBQTVKY1kudUZibD9pdDBQLDV0MWgkMTx+bi5II3tCQ2VDMEhqTG97WGMxe35nXm9LVUsyZGxnXTI3Zl14PFAzOD5MY2RRWT80UGhGZ3RKRV96fTBOU24ofGt+VnJNfEU0Ly90RVElQ0I4PlZkelF1VzFtQGQ2TDlTbWJ2KSFoOVFCd0lrLEBQKywkeUNfWHhpS2hWa2huM2tzUnUy''@;'; put 'put ''X0llKnxefiJ6JExBYkdtT0RfSzk9T3J3KEtCe1NuWEBUe2VgQDswfD0/TEBpTVhWciF6RjB5SVV+VWhKQyREVihDT2IlQVlqNWthOSxTc3V0RWksY3F1LkplSDRDPjF1cUU3Q3YpYHk0N294NSJQaVhJM1Y+QWtpdCRfOmtnbSppclI+IzxTfjNkfnZNK1RaVmFeXyVXfnpkeV9dbEgqUzFxUU9a''@;'; put 'put ''Ujc0cWtATyxgQzgiWlFMaTJ6ey93TVEycW89aXlxc2FDclhvTE5SSDNYJXchdU40Nio4RjRbdzFAeWh9eFk0blN0cmNbeEY+L0VWISpYPV9QTmRzS1NOOSU3W186Rls4TGUkQyl7KUh4azxRejsiUmZDUjA2b0lDeXN8d2pta2NiWSlSNVIpX103VVMzTShWdUh5WkUvVjY0R1Q5ZGozN1lEWHR8''@;'; put 'put ''T1ljUHtxfGgueXUwIn5tIiI4TCVXYUJmbHhPP35yNjYwLmNgQFFPfmk4SU9hNWM6KDJyfXZWVEl3ZyYiS0AhZGBNOlV1Q0x6UUZaQD4zOHE/YHFXWmohby95OlI+W2NZUzVHXilqblUhRk04Nih6JHk7L25vTTR0I1d8cVAmNVVbMWhdRk99XkFfSz93UWRkSyUqJmlkfU5MJEM3SjhNblEpWjxi''@;'; put 'put ''QUYuMGhFbj16aXx1XjgjUz83IndFSyUmJlkrTCVeTTpvYF55dCNZWFRZP25wc0UvZmJCRztvXmM0a25qVm9GPl0lLjI4d1lGQCN3OFo2cmdaS1BkWVVFS2IkUTlKW35AMi5EbUcuY2kidFhoIjoqTVhMSyVVbiN1cTtoPFlOZ1YsYih5LDZjNiYyR0RITGUxXzQoWUx9b1ksRVNCRVVVLixwZXU+''@;'; put 'put ''IX02LHFML1A1Z0BqYC96VF9wLzc9TlkqWmo6c2FSNyIrMU1iNiI4PEZbLkw2cyhSYk5GRHo9Yj5iejhrXyZUe2E1TkBjKyhVby81OSY3QUt4T2l6Wjp9eihVe05jR2AlM2BSank0eXFZMyRedV9PUDFrSD1AT0Elcj5TQDAmVSsucTNhZk46PVskW25Rc15JXiQoWlNjOUhlIURjZCJqQiI0UWVU''@;'; put 'put ''cnVUaEx1PE1nWDVzSCMjfDU2JXp5eiF9Nl01aENIfVQjUnJvPjlBQ3k+VVBjTFk8NWgkZk8lJTwhKXojMj90WGpnJjg0c3JDVy9rMnNiPldVO3JiNVhoX3J4X1J2RSF4U0dFKWA4PiZTcTBpWCsrZHdgX1hpdz5XLzs+LHhrZVVKR3lkJTdISCVKIUZFa3AoeVd3WnZtdS5dc28pWGRPODZPVllS''@;'; put 'put ''TEVLcVoiekMydn14dF9bQk9rSDErJVZfNlZtYypuV3ZQUUd0N2l8ano6TTRQPGI7WVlANjxJMiE1U0Q7OzJ3QzQ9bl8oU08jXmZ+RSZHbWRIaW82WjdaeiljREZDTVcpJDtDZSVSMzpjTjlVMnokNTl4fGAlfj46WkFdQDRZPHxIaE5WelgvSH1qdkhieV08M19SajxeOFRmTXRvWElYOXhBZWxG''@;'; put 'put ''ZFFjIkxOXjFsTCs4PiJXLn1aa1BxO15zQERyJVFfISs8LD08dyo9dTltY0BHcW5rZXhmLyNQME1UXjh0YGNMbW92KW4rfjpCdi8ueltAUnYwOktndD8lO2g7cyV6SngsSFBfQkc8OllyI0cxZT5ycV5hLFttdlljaU1wKHk4UjdyfT1UP1IkYl0xKmp5NFApMnFYdi5qJExLZVdYZVRXOl93Snkz''@;'; put 'put ''QlFZejo2P1A9MWY6aE5iRm9KLCFoTFU7WHErXTclVXhDQiFhc1ZPITl3YzF0ZyMyViVuMVJAV0I1MT93ViFnfVkkfkdYUHFycCM2Ui54UGRYW1BbaTh+OXZwTD4+dWJ3blNHaitOSFthUUBXNCZeIzJTY1l7enxFVmh5WkhqbCZbT2VpYmtaNXUqZTo/fV42TS9teyg6TD9oe2FHMiQ5cm8vbVE9''@;'; put 'put ''cDouazBrVyUzIjBINiRfOSovM3cyZ0c8UVQqWyp3cEZLVWEqY1dBJEZbbSo7OT46QHJTVUolOCg+b2dATUElK0R+czxzVilxUEtjX0JUbjZMKmksX3w9LiNoKytZTEZERV5RdyNKeD5jSGBERygjajAmLzElXXA+fUZBRFRRVCpZfj9SdE8uRG9rZDRqKyUkVjwxemI0WCs0aV1CS2VuSyUyUzVz''@;'; put 'put ''NS44dkhIPHhkKGZpSjxJYi83Q2Y7d0I/Pz9UPXVXJmYsZCFyPFJjTG9lSEF5Q1ZTLz1HQ3lDI1E+fVEzbipiZyhmQjJvMD44bSgwPyRNK2ZZWTtNTFJjVS5HbzpecV1UaVlyQ2hsSk5BOVl7TzIlTkRpZjZKUSg0IWAqdVt6JD0oNlQmMTVQeGJDaCNtSHVnc0I1QD47UzgrTXVnMG5ERT8hKD5f''@;'; put 'put ''MlswcExGdEZsTG1JemJQdTpOJktHIStlKGg2OCtFXjRwWWhhLEd8byl4KWIzJDUvQzRMengrUTVsfllnZUMsYC5WWzs7NTRzemh+aDY/MGJYUDxtcUg8fj5uIXRAWU1zRVR4Nkp1KSM0LE9Hcyw5fkRxSmtAVVtoPSkzTGx5ODtAZXZHLzY1ZTZ9SENjQzFXQGh4VX5Nfks9JDB1eWJsOldRL1JK''@;'; put 'put ''QTwjfXs6PzhkWjI9U1I2dDBRaHZwSmlISVpdWXpHd1NYXzFESyNWSE99Pi41eSNZQEV9MHxjQTd5X0x5T3QueERRYU9mWEg2OFljeXJWZmpeW3ZuTF5gQlhyNV5mXWMlYGg3VmlKYGN3WjR5UWwqW2osbzhfdT1Lfn5JaCZpeWc1PDA3RSpuMjxuRGgwaipQU19Xdld8cV5fODt6JnBPUTpRfnMh''@;'; put 'put ''cyRnQkdSeDUrW2AlKmBjcEJwK1QiYXNBXk43Wm5RKEMjTDVWXVdML3dbIiNidDVgPkczS0BhaSN1RCs+OzZdXmg8SjhZPGNrMGRQXTN5fmYvd11gSSQ1NkBSeylae2l2cE8zTzpRL2g9YUMvbiJ0cV4pUFtoYlsjYj1Rb309dHtbRjc2R0VLM1dlOEJPU1kmSVdgLzdpekwmJEZLczEuN3xmbEo7''@;'; put 'put ''O1BnPlZkXTdqJUd2KHtpZSouWkN+OixFZEhwP3N+MGxwZX5dLyVRIiEvJnJWYkBVan4uU0ZLV1J7LGJNLm1NR1YzQEFFO0YiQlZEREsxKCpiVDkqRkxBXUNqKyRxPmBrPzF1MiwmTjM8QSVWb3luVTlIb2goWjImZVRIUFN0RT8xWiF1biNdZUQpSyxxYTpzR1FwNHBVVilJZTgvdD9IRU4udkdv''@;'; put 'put ''KU8/OjY3ZFchWV1vW0JQWjpkSX46cWJvRjkyRHdIcjovNXlSTjhhZkBHM05COWtfTWtSQExKXzQiWk02IT8welRJMTJBdU14STRrfThJO2YpJChTRUtqQjFURk9aZSg3fXhUfUFpUnpgQGI3SUMiIkJNNEIhYlkzQnBKcjghUkRJfGB2PHYoZHN9a2ltTXlxLlsxaWEoUXcpcWphNWZBeEJZKVRy''@;'; put 'put ''fFdeQURYLjNSNkJbL2dHO3cuciNfU241bkIkWmwxZDRbTzdZTTA6PFRzMmphLn1tbCg0PzRjIU49WGN0Y0QuJCFULy9URTlTIVtscnQ6Z3p3PGthV1puPDFJb3Vkdzp3TmA7azooPWExR3NSY1RUNWB4c2Z+M21RVWRpfGd8UF4qKVtgPDc1bmFTO1J4Y0dkUT4oW3R1alZpdCtkVUFhb2RNU3Mk''@;'; put 'put ''Y1QuUz52QUFLQjl6QUJda14+fk07UE5JeWwqLz4lW1ZIb21lQXdvPDg9SE92N1NUeiRNeyFWblRiPX1LVz5QNFcyP2hfbXFZR2cqcGIwI31HWi54YTxbaEJOb3c7ZlBeNjV2fTtUQDM2V2dOInVbNVZAPFYkWWc2b2JCUnMkPzooeykucFpoJTRCO156RU5bL3cmSS45YztJSk9uQltHSm5OQihU''@;'; put 'put ''R1E9fEw9a3RHZ1JoSylhcnFhUyZrbk8oMSRHY04yflQ/XncmPHkpMlFTRmc9SlBzKy5SUXtfM1VAZiljWFN9Z0pTdUI8WXJeb09eMHZNLH1eUWZOPFhZMCR6Om84SVNAUiEld3RHLFZUWEtwdSMsSFRiOGl1THcufWtuKXBJJHFsaXRePH1ybjVLZW81cEpzOGlhMFZodzZOYnpaSDFsQTBjQ0ww''@;'; put 'put ''YyhjY3gjdGEsc1NMfVZYa3RrfUl+fWxvZjdKOmdHPn01ZCZfZDRwNUlVSis1ejc6QWlYNUhGSG4wdUw/K0A+MUpZVDFXVF41UTQ/eTVAbWQ2M1dNLjRSPEVxaTlRQmB8V1JWfF05N0lTWyx5SDBeJFZyZkVOeDw2PzQ2TT1GTU1IQT5hLGNrXSxFMG1ZMUN6emR4Y01HeUBrPSN1dipAY1g2ayw5''@;'; put 'put ''MyRuJjZpcCYsZnpvcnk6Qn1hU0BeIjZbZnhIbndmfkMiKENBUkE/Wmlkd31JfXxIIzQodldCMERmOT1AOXpNN24yYSZAdVo0Lkc5JmdYTGdFY3lsPT9WJjwlRXgxSn19aHBvIVRTN19mKmgqcFZNfF5WTGx2ZzdHbnowTntlOkUjYmBWclt5ZnYlPkJ5dFhFSEFMNVRoIVEwRUI1eHpwTEJ6OjVf''@;'; put 'put ''JTZPK0RvKFdDTGdia1ZgfH5BdUthLDJ4bE44YD5BdEUkTlFlUExwZyMvdSQlYjRfTFpIT3JUKzpCX294Ukw7WE58UjB5SCNgcWYwdlRqJGVheWpzQmBGOml0c1piYjlaamZINGlKcCl3ZGg4SnllSmg4RFoqNG4rV3xhR0s6UjwrSjpCQnQ3bS5TOmo/dkYyODBBInU1JWdnITRmfm1xfGs3KTdq''@;'; put 'put ''UGlkdENWTUIkXyJMNDFCQyM9MWBjezlXaXs4KDhNXiNxYGBSPlRrK0hlcCIkOChQelt2JjswMl9iS21Renp3Nl0zJCUkcXE7dHReajQze2p0dXgyU3lhOU10Zyt5KUsre3hAUls6bXxUMlNQOyxRdTd2LDkzWTlAL0Flaz17MzUlV2E9RVZ4PjREZUBhazQ2Uk9WRVs4O21ANmJ7MFFWNTNoYXZB''@;'; put 'put ''YzZFUzlQJk8xdGNQKnhrPEh+Ul9iREU0JFFjU0BOTChDJmF6Sit2Rk1TLEdZe3ZWRUttWixnZU1gLzVBSCguQ15CTFUuPihDTWRoREk+NjZPR11bR0J3aztXP2VveGdvVlZTKV5eOW8rfkxIXl5LRSowbk8wfVBsYFRHR31zWzRSRjEzNTpJQHkhUWJjJm1ATXhBT3hANikmJGtzOl88dGxtXj56''@;'; put 'put ''STFCWmVobGZlfTBVQnVEK2w3a2prInkoWnVTOjdaZXZwR09zPCk6PGR+UikwN2p1cFo6bXIlIixvNTdXKCZQLFApKDNKKHswXVBTRXx6TDl5SjReJUI1UlJjfChebntuQiorfGhmOlBKMSlwczhfRlkyNiN+YyxJMC5pZnovXT1panE7KT5WW2hsfDtDWDw9e11FXU95PW91WWxdNUlGIU1JV1lI''@;'; put 'put ''Pm1sPXU5cjQ4dzIuXVM4alE1LDlnZ3J0Tj9aV146Nl89eWdvVzkiNW5GTnsrUFNdamtYZTMoTnFATl94O01Vb2lQbGhLUV8rbGdlMFNWfTp1d207IShLP3A5ViF9OnNucSkxT1pELCtsI21PL2gyWzUpO2x9cTBGM09uOjA6KVREUEk6TCE3VEV4QTR3cmd2KDwvOnx5PntwRk5OQy9OX1hJPFtX''@;'; put 'put ''SnIvTXg5blt7V0VwYkpfcls9QCo1SGB8OjA2TzVmWmg0WjNDe2hPRGQ2UnJ9NjdlQyQ4PTdOI2x0QVQ7Syt8dV5KSU94PU15V0J4X10sK3M3WiEvfVMyTnYmT3s+am99YyNCY2RqWGRxNWFMP201PEhsOk4qeVVLTWNWI25BUXk6NSM5LyZ3c2EoRnxyOGBLPldxe2VoZC8/Q3tuczswPTJ2ci9C''@;'; put 'put ''Pmh+Kz1jaTFaUHMzNSVybyI4Mj53KkRdW1V0VFdqRVpjI0VTIyxEWml8JGMoVSkvdkRLN3xrP3Q9fF0rbjhZKnpNQ2N3WilkWz5QVFo8P1Q9fGR7RmlTJHZ0ZFVmcndAakNnbTFOZ3MyKHFeezVFb3opdCIhXmRnaCVhYXs7PGZ4aGd9aWtwNWA9PihDT0dDQ1BwbXk1PSszaHUiPnM6YSRGbndZ''@;'; put 'put ''Tl5ib0JNQmhPVnpueyRwXVE7TC90RFQ2dUJ3Ii5dZHhTInIuNkhgTm52XlZzSENgPzFlUmw8fTMrcWZkXV4jXyMlRmtfVV4obCFRVnhbU34qUF54OVRJckE+aT5Ae2hbX25JZld4OXFoe1F4LDlWVDsmI0U2UXp4c2wxb3NwI2oiaHMueCpAZ2xkJEloOFJOODgofjNOWmpUTSo8VHd5MSkoTD1o''@;'; put 'put ''cWNOK3pqQy9gPm8oTVM2UituO3FCV1M0MyRMbEQ2ZDRVVCV0aFMwOy9SREQ8JDomZiFaK1BGKjZoI2U1PiNqQjs3Q2RDRG1qVEZIMkMzUFpBbWdMI25WcVVpP2BTbGhxeldjd19RdT45az1vaytzWGMzeUtLNWhMRUouPWUvNUpTIyRiOG5FSSg8VVpyVks3LklxeVQraTc4ez5Ja3xKNk9+Sm0r''@;'; put 'put ''dHFhSFd7bT1Oai84W2c0cVliR35KZEBWVm4kdV9KeSxbV1VBOlYoZH59OylXKClNRDQ9TilhYzd8eDNockl5Xzo1YGdKKz5uMzEkInZdLig1Z1d7eikkMk9HMHcxTGtCYC9mTnQ0Uk9qamRgIzk1ZnZ6X2BTfF95IX5gd3ZifjV9Kkw2P2wkN0JRRyQzSTYvN3xHYkM5KzYoczZQZnx4biYzJm9v''@;'; put 'put ''cmohL2lieD8sPlA/Knd7RVNIaDR+OHY2cWZDZ0BNPzJFcm0hZltWLFJFR3hfLHVXRHBYbmhKW1pIeldLSTs7dnk2LE0uSDZjXXBPcDljfk0+RVlVOEZKJkB1JC9teiEhPWdWNURPKlJPUkQ6VENkWGskd10uYWZ2dnBOYG5bTkk4O3RdNSNJa0EhK0RHXmkjJTcxSjw3P1ZNP2ZwQjwxP05PMVVR''@;'; put 'put ''MF4rZXF7fHR7PyU1TGNaaiZFUWp9WSV+YzJucGZje2duI1RfVyhuKVNgNEBgaDVJbWM9UnUmNWhTY29sbixdUXgwRX1QI0Y+ZGg1SD9VeD8oTnJHQCZUJCpCKS5JMSxHUm1HTUlJQkk0RWd2RS88dSFHSCNiIUBFX2dfT3tsX3wpdmdpS2lqLkI2eWBHJDM8TG5wcFlTbysiNEJtYD1KS1Nsa3R5''@;'; put 'put ''QjcqeD8lMT0wUXFDKndqdm5OcnN4WlYwXnAyeFZ2dnAwdC5mNDI5bmNlQGZjWHltVCMqTyU5RGI7YzR2WXAwVHBJSEYqdzc1Y0VYNFo2L2pUbzE+JTEmW1ZsK0JDQlY3Iyk4RFoxNXlVJXJvT3o1KCpZRWxmemZ6eHplYX1JKkd2eyFSbCNFM0dxcmgieXFAMlJ+dys9SENKISE6Jl9Wd1goQE92''@;'; put 'put ''UiR9YCthX0Q/MjsrNkUpWmpCUmt1aXpEL3xSe1VdR2dRPikmQytFPCReUWk4Z2pBZU0jP3FZSioyU3dfckF3M1M2SCxFXVFvPFRBM2Mpbm5AVWpuRjptdHplPTMhYjYmMH1GeTZLRW9UM0VMR3huNkYvXy9JQFMxY2JXOE0rdnNsbEtpL2JCRzcqS1F0YzU2cVZ9UCwlT0FmW0plPCJiTz5dd2s4''@;'; put 'put ''Tjc9LixJQztKK0o/QzldXnVXLGlgfD44RlBXPUY6fm04NzBwfkx3d2p5UF4kYUtuXkFRVT9kNW1YZFZiJEo0VnkkaHxbdkpZIUpra3ZvUFVFdFBUXzRBWmV8fW4/UFRRb0Y9ZiR0eTova0VnOmZpMGVCQytNPH0oek4yPDNBWU51Mj1oSDJNJj15QHtZfkw8YSZWRVpvcU13JXN6L3RkVTRuUFg8''@;'; put 'put ''SVtELjY1I0ooO2wzQ3NXTix6MVVIdFtlUDNlKTozUipSfCh5WTgwNEomZnBhPSNNRVNqflpUSkd2JHZEQHB+JXQvcjhyfCJFMGQ9QFkkKnwmNl5zP3dnOXBrcVphYSJ4PmB1OU5sSmVJZSJdW1J8OS93emJxIyt9WE9hO3QuPXRHYSYzYi5tO349cG85fTspP3h2IiQvLnVDNTEpQjVvKzNfLChF''@;'; put 'put ''bj1tPyVKTF5HZVdnNXBvam4wJXA/ajo1Tl1AM3h5PX1KKDJTUHs7Wlp2PGhGaDBEYi97VCtiM0cwZ2EoV1pdbDFgQz9PcjRoLGxeXmhTZz9HKH1DMS58YHdKYXczbSNlXTZeIyJxb19QNG1gQ099IV5XOCFeS30+RzJybTA8NVZLQlk0Myt5UztUZHRYUWw1dksiXl97emAvSioyb3Y4VVJ4eilB''@;'; put 'put ''O015KWM5UlR8RzFbMCZxZUQ/bjtYdiswbFp+XjAjSD83Lz1iZ2pNZFpDYHE3KFFBJDNeYWkoakpvZHZ2LFNDbTRwVWlwRzZsNVReZVQ7M0c6PE5Bb11lc3B3K2dCWjFBNXw4Q24oZiRfRkkhJCsreUZRN1s+eD93aDVrU31YPj41cDA6JTpgWkBHe0dALyRaJFM7IVBvKihAOzI3T08/PGtCb3o9''@;'; put 'put ''PiMsNFY9UVBdVjtRfnYxYHtoeC5YZHw1QXhkWVJQSVlVcUFLfTNBZEo7fEMhbG9IfGJ6SE5ZVG59Q2xwSDAwW0NDSGk6fGk/K2crQ2EmMk0vQk5pSmssKHgzfFg+Kzp9Q0dQdSIkTGtHVFpYfWhpZDdIL3M9PFVRUX02YWY1SExoM3lQeTB+Q3U3RzplfF5tJWxLOFJdJXdDayhrMlJYLFp9ajRb''@;'; put 'put ''fEBFODpSPWxSVHsrNipRI2xQTDV4PSRJM1RTIzwhM3VFMGd3bSw5PEMuIkl0SVFqajJ7PCNoZkE3L1BiaUV9dDl5O0UkcDtVOF83Nz1JTVJ4czhbVjx7OG4sME9HPSpvQyF2LCphfm9uTDt+OXRnViN3WCVCQSNOKSw9SkopNltTJm52SC53YCFGUypbfStjVzRmS1pCaSRhRU8zWVdCMVMlZCJD''@;'; put 'put ''T3FtL3twLyhRJD9FKTJrWXJjaiRINExWJWRpOCsqPCRsWFJHQzlLUSEvOTQ3MUpuOkRRenZlPztZI2I6K2FyJnBbQVRCUX5xb1M3TjlILjBjZkBrJUxgK2FPR2kiZlVMPDApP1pxfUpDQilVcm18W2oreH06eDVVKTl8PXlIWHpbQnRJd0R9TXhyb3RvS3BuWktnUj9OPHt4UiRifjk9eVY9azlK''@;'; put 'put ''M09qN183aW1FRkVpNm1HRFVsa3N9SWNFWXNMZVtnZzYwWWU/fE86UWZbMWRNVVY9alQ5IXY3fEEwV20lfkFmU2t8KyFZeT5iN3Q/YmdpTFlTdjFVc0tMdiU0PnowNVRydnE5YjR2WUUjLmhxYUV6ek9TMWt6NjksWTVLdV00eD1DUHB2ZitQTWNsd0J1clIiX21jcnBjRGhhRE1qTEd7VE9jKmRi''@;'; put 'put ''YzJbezozXzFGUk49Wjd2SUF9fHRUTlt2Y3ZLVDRUXWBJMGR5VFNETVcwVF95YHFCOnkiNz9TNHV5QygqQltbdkolMXloNnkrQFZSdnE8eEg3RTYyN1M1NSRkNVh4SkxzQm8se3RLPERWcTNIU1lMImdBJSY+JjVQTjM+WmIyYlZAKXc6R3YqWXY/eT44Q1o3WFB1UCgiSH1Rd2NpdXJ9S3JDfXg1''@;'; put 'put ''TGRvTnUoPlp+K347bF57VHdhL0pKK2UuRE4wUG5wL1NPfWl6cXpKO35HN1JEXnd2e19vemZTYX4yRTU+anYwUlIxWyw6OTRkYD1pNE45YyNgdVJdSkZkX2MwfVhZUUosKng6UTlqPF5VaytPQjBFTGFdM2E4Tmw1cilYUyQ1UENuJVNtZHFDRzxnL2JvRml1dmsmYHlCQEksKllwT0UzOzhYfF50''@;'; put 'put ''Tnk5W2VZYnloWSwiaTxbKi5uZTJla1JAekF3LGtjdHc2YCVEJiJBZmtIV3llbEAmazBSYXt2fE18LEsreDtCNSIweCQqVG9tcnpYLF9PIkR8cFV8ai9GXyM5aiQ9RlJXb2k+VUBpZTJfNyhYMCk2KG1NUSY+YEh8e0o/WjdSKnQhOjgvVldFLzJXOWtLdTxqdGJ1TFM5SklGNml1e2RAPW9ndSUo''@;'; put 'put ''O0FRJUVpYS8qayhxTSFXMS5hZlI4ZyZmelMxTnB2Mng7NmdtR3tZMSRXVDRLdFpEKmA6Ql4sdnAoIldNcU5fOiZIOXBqT2QjfWJCaUBDSStgM1pfN3NTTn5JPXxTK3hsOVlgZXpvcjxTYW9LR1gqPDguSWJTNCJeVjAqLzprLyVZQE07YklnMn5vVXp0IS9zYit6bnRCPlE1XnV9VjNYS2A/ZWM8''@;'; put 'put ''aTA7UEE3P05FOkpOITU2In48QkRLIUVSZUkxUTpUdUk/SlIqMU5WMCNweGhzYjYqTWZdOSgjZUVIaFJ5YF1MRilOeGd4YT40PSZVNVlUbnV3WGJYTFdaMWc2RSYpSUFKTlgjZE4xWiw/fG0raV05WG5vQ35oPVRHWVFLajgvXlJAZHFifWYuVSJ9V2M/cnJSaT1YamM4LldrQWNraEhuW2dsXUIy''@;'; put 'put ''VC5pbHplJUg8I3lQS3dSU2ksaXpHS0ZxNz1yPGddIkdCK34vR34+fU0zRnVtMnJyT3J3PGZ+OiZYX31mWHk7VkpGQXBTPzYlQ35pOGZRITloSnxUK2Akblk0b1l6VCx5dThbfVBffSJybUE6VG1mYTJnbSFSWkZwUWJzOXRtSUB4NHhqYEk2YFpXdDNoYS99TFp+IXNyNnpQKUVrdG9CYm1wMnZN''@;'; put 'put ''cz1balJtVVE5dSU7Z0leWG10KlN6RjVoc2tdXVtbfU9gPFokTGZtTTVbW2E0P2w0Zzg0YV01PnYhaV4icktwckVJZkdUemZ3a3VMIWpucz1FKF1QeHVUZHpvVEMyUnUsM09PPyRuRHk/dmNdaEVeS0VpISgzMUVdWDVrcTBBUUVIREhQaj8mbDNZdF0hS086bmg8e2pMVVVJTSZOTSlBN1ZGJk1f''@;'; put 'put ''ZX5SSHVsTEZIUERINWQ6N3BTTUlZXztjTTZAeylWND1jXWo7bnNnazVNLmNvbnsqKHYvJlB+KjRQd1NtS0xKRn13VnJyeG1LRjIwWkhyU3FvS1JJOXxocmlfdEZ1I1JlNik4P01OaWFmZmx9c3FGLnl0TzlZayRLeWljXSZxWVVrTjBsYDVtd0N4biVCXz5gVSx7fE9UaXBOajVme2ppWzw+dHBo''@;'; put 'put ''P1dnSi96KzJ9flo1OkleXXQ4MjxSLHUvfENSKWZ1RzlEaiZTKSQxYXVINyElR2BUOyQ6dXh0X01zOFswRn1NNWNjTUNHdVR1XUg+dSZZbEsiWEpMbVEhXUN8VF0/Ty9HMlE6aTRLQmU0RFkyYEliR0hKIVMqW2VYNXJ6djh9b15oN2s8Uy5NNTg6Ukx3fERkLE5vdVVpN1QlVG9SI1s6OkZ4UnNR''@;'; put 'put ''angpNzlXeiopQzEhWT9NLisuQFhhbiV8RDxkc300R2hkPDZ7RiFdVW89fW82M0BeekBFai9OQTI6SWlbezxYViVFOW0kbnNoKyxRbyRPPk10UHBbTjM+STgvP25mV2UoWlFSPSomMHhRJWJATSg+b08weH4/MEorRWRVc29KL2xTaWpiWTkkZXRoSmJEIldtb1BATyNAYmw5JSkua2NETGB7aGNl''@;'; put 'put ''VmA+IV0xS2tnU2k1amgvWiNAWVZfL15sQGI0X2BHO0g5eWtpPS5EcUBLI1p5SDh5eXhAPCZ6QyVGTm55NSkzVmIwY2x5VHJgXS9BRiJeUkhuZnNpRGgpS1hVOl5RZ3ZDY1giOXRKTiVrbFM2LHtTKnkxQlt6KEZYdiMkR0hLc1NqdnJwUDpHMXFfOiRdblo2ZC97UStkbmA1JENTUmtWMzRgZG5p''@;'; put 'put ''a3pLZytpeE5AMFNlUF5rOH1MdCQ1PlU2WDdXY0QrZjc3Ynh2WTIzUDg7ZyN6Nk83ST1RMClsfHNuTSFAYTgmSUU/ckAwfWo0Nkc+RWUqKDZXVDFsRlgwYGleWG44YWQ5Q3kvaWs2bURIKEtNcW8ldTdmIVM3MUApNEsoV3NbPFAlOzR7I2AyM1oiIm59KHtAPERCTW44LygpWnVZfDpDRURkR1o+''@;'; put 'put ''WyxzUlJWeStKUTg3e15GIV4yKixyTWdlR2loMmt+JjteSDpAeDBpc0BuY3dJamR1fkdKSF8yW31+YUVpPXIjVXBpZi4wdGd3RzpYYkY/fkJ6fVg2eyYuZlBndTRXZ2Z+bTsjXUA0ZG9eWE1nalJOdCl8PG07ZiFUbVJseGEzalNARWdSZjA6SnUrYGh1RFF9LGMqeyNuL1RUdF9GXys+REZ5aG1Z''@;'; put 'put ''SkZ5S3ByKVcscjt8S3QidCloc0B0K0A1JjpadGQ/LlAxTmNjQngwNG42dV1pWERgWSZvXjQlYl1vUit0amd7aC87JXBVUFRFZnNaYkI3XklDRUIifjxAOXVnWF9Ve0BWTzYrenxXWHxxfmBoXjN5fm9QUSolYmkiZjZZdTtGVltOJGhoNls6KSVpKUwvWl8hUXViazQsWT1DcnVUJix4PmlNQ1VH''@;'; put 'put ''ISwuP0prW0VxcG15P0Y0PTR6ODclaChyIngzXixnbE4iTEBrUy5fJC8pMjdlTWFGMV1dRWFUKTdlVVZQSE9gbWo6OHtjPTBmQEJEQG5LYjNPLFJVeU0/OnxualpsVUZIO2B+UXJBP00kYGIpVnJeU09AO11lckc1UTRTdT8lQks/KFtXYV9gQkI0V0IuSUtLLkRPYVdFaGVnLiEuIzBsP3NRcyMh''@;'; put 'put ''WEJzSip9N089PkN9UnErSzBrLHlUejlrOV9UJmp9KUl6emYrXyNFOXRsZyMkWVRhWVF8MkIvOXBxVHsqaz8vIWp6UGlRNC8kTUU1OD1VWFsuOy5QRzEvc3dlSkVRJXZhayhWfV07e3NDPk1TQmNTLH1mdVEiPDNVRSQ9cWlbJj13cyUoeU41eCtdOShKMFFORlZNUFROJks5aVopcS5JfXU1TFU5''@;'; put 'put ''RWt8TEhhJEd7LFZ4SmI6IntkaEhPNipTLklFOlprd1AuSyE/fUkkWSQ8OnpsSzVkZ3VTUlRaMU1NKT5FXU12Pi4ufVZnazxINzdwSHFqYEdWJS90XXVYJjZzMnFBP3FbeCkjRDlkeltTen5waEgoKnB6VVtdTzh+bSJpKSVaMV1CdXVNcGlwPnI6Il5heDczcmxIaDtfO21+NEc3fXF1YHZ6Wnxp''@;'; put 'put ''KDFePXMhanR8cjpvTmJxWzB5IihrTUc2RDNbfEhgcDlNTEpsX358Y0E+bFpCRmwib3ZdQnRNITZOR3U/ZltFci8/djxsUWg2dUZvWmNxV3RySlQ8ZkJTbz59SiZYU3kiTHNiYEEvMkV1dHQ3Il9HXlV5IWMlJEpaI0ldNmQ1bG8lW3A4aEFtSiRtKX0mZWs9NTNJdiE7anF6fXZ0YERWOkwrR3V2''@;'; put 'put ''Ij5CaksucnEiK2ZgPEZdQ1U7b2wsT1YjT1AmaGlvNT86XkIiN1JWXXc3UmNBR1poPzJUKH0mVn1oNm1CMnJiV1d7ejhXQDZLa2wodXombSNGfSs6JGtJO15wdmF2eDh2RUU9b19gQHdxdGgrfXgrZzNeblolSnA6XTxrcDt4KXJ6JnA6YWE9MCp0TG1teFIlNVd+cDAscWQ8WW91QTUsdFBVdVpx''@;'; put 'put ''I2pfflREZXhpSUF1fSw2aF8sKUA2L0diP2o7cX5FMV9IW3QuYXV7MXQ7XTpVPy9QWmJ1SyRAZShwQE9vaXohQER4Ozl9ZkkoKjlYcyoxYyZsR0hWfVlbaHFBYSh5bW1rZVsjeGZ2SikxMSk4MThPUDtlL3hVVWBVfiRRPUw7VDFgUGUpZV4sKiEjX3FdSmJVX0l5OWFHZzV8XXBrSDZ4V1VaTEJf''@;'; put 'put ''KFhtL3YxWkI2VWNeP1J8Lnl+UzZddTJGNjtfeSJXM289NWw1WmEuQ3xJNjRwViZfO2l9Pmw4RzdTQ3RmMHpfaDQqWHJZRzhJUDZCUFRZeiM+YV4jJGdhQmNlclVjNFAuKzZwVHRbRnIpaTVAJmZjaiFGVl5GSE4zYFRERDFzWzNPcTY3IWRiaFBEJGlsRTtRPSZCRC5ROm09V2RvPUdkI2l9UmMu''@;'; put 'put ''QUQhfEIqaDphZzk8OEJWUG4vckZIUmk0WDs8c04uNV9pTWYrdHFtMGROJWFuNV83NE9tQD1JWmZfZUArMGBDQz1ZKF9ZXVlOQCsocz9kYjVicGp3YW9eeHZpUyRPRn1ge2xCSTdfcDk4cW90VCZoVTRTJFMiQ056TXRwa2w4cSI5W01QIyF7Vj12YWNXUmp8MHdYL2VDSG9odGY1OTZwRXNkOmtr''@;'; put 'put ''V3Z3PTJqUUt0Skp8OGI4LFBsQlhlMjZYfVtXVmNyRVVEUyFHYHckaz9fflhFfWArSkdqIzRyQSxnJU9WNl9UaSJHKDNyMysmbnlmMlFPZHlDUiNkclB8aW86R1k8P0ouRUdpWilaIzNiI205Nk1WS0lIPlY5ZEB7cyRkT3JZaWdXcWBOS1Y/fCs3c0x9QXVQc2l+WmE7PTdBKnBuV3RGflI1SH1O''@;'; put 'put ''TzQrRV1ZKDlLXVdGSTw4Q304ZHZ1V3Uxcmp0VzhsS2dXYWBIX257YFtXZEwxfVkzbm1qflJxMEIsfHNFfGFkZywsMnxzcSg9aWshWnhvSm8mSylod1YrV2tlMCFzfjs3bSFoNHtWRTVCXVMkMyR6Myx0O1pOdVRXaiZ5fkUkd1VxcWtvaW1eYmhCRihpVW1CRnZxZjNlZlRHKUI8fGB+ZTdWUiVX''@;'; put 'put ''YHJyb250LjFnaF1CQ0Ywc3gxJnh1OD5NcCpDUSxuRyY2T1kiNzEmfG1OM3wwUEppLHEuS14yX2RlL1N6MzYkMUdRNS5yezchZT4jeXZAK25hRHpKPCosJXpjS2hCfSprTWdzdThtd1Q3RGMwbWZ5fWBCPVVOaURqfFtFM2A6Xio3X1suN1t6KE5zbnwpRX5CUEJiJDFqb3dSY15DZXB8VzNePj5M''@;'; put 'put ''UHpjVi5FVE9RYUkqKXs6ejwlIVBVJEYuTHYxIig6OlMxJi9UUEpdR09GSDdDUDh2S2d4e20rUiNPNEcmMW9II3MhZyQ7emFHc2VFJWg6O0AhKTR7U2VsOFV6VUI7JVRVNkxfIyNvWFg8SlI5I042enw4QDBiensjX1p9RVJXIyJ7UGB+UzllaC91RmQwWztvfUx6cVRYU1Y/anhONEN9WmohMmYp''@;'; put 'put ''VT1MMH16d0JGelUxakVscHFSdUhLNjhvZUhwNVg4KGxPeGlqTi5kLmtMM2ZvNHRqPSZoLzlTSEU8THooZj07UDY0T0BRNnApSTYxMCVOSiZbZ2tAPXZ7JTV7KjBOJVJmWUJKcStaKGQ1R25PbiReVE5fSn1MRkR3QzttK0R9dnVZUHUicEYiPTVRcz83U2RpPGtwJENGaGxdeCY0R1hBb1VhKGNm''@;'; put 'put ''WngoJF42WGF8cDJmey90OGxRI318InI4SzxnczUwaVJmTSFAU1cyQ1tdTGQ1UThON0t0Rk1JZHpYSjcsPS9MMWRpYTJMP1FnO014NTBCM1olY1M4ZCt9KDEvJml6IStvTXAvYzNdMHFdfSkvSD9KRHMhSHVNQGd6O3owPk1xLzwvNzBEaSlybGM3Yjl9ITJhaTZ1alNsXSRCP3dhM1E2NEdmPktP''@;'; put 'put ''SSZeXyo6WDVkc35qSkVlS1UkSkdSYyJZM30ibEpYJWdgLllTMF9rRW49cmk9entzeCZ8fkVxISV5NU9OfGpBU0hqY3sxWkQuOktOdX1mfjlPTTNnRUtKdzlmSTJOUXNER1FROnVHJUEvSiliXncjdWYvLE58Qzp5a3NLeS5lOnJweHppYklQL2omVjEhaUdCO3w8Z0sxL19Aakxdfm8xJjxtMHhY''@;'; put 'put ''QyFQaTF+S1VnVnxeMTlvSmkjaDE+Sld8VlVdXUBBMHJMaSEvY0d6LH11X1hfa0ByaCg/Uy5ofTlqPnpaOGMmKVhrfSJINGUzcE8kZXswKCVdWEAvdTVpXXN4WCk9JX5kemVyPVFhajY4ITM2OTpVPlpiX0d8flc+PVg9TlBRYDBGK0V6WCYxfHMlM0N8WyEjfjB3fnc1Pl5oQ3h8VlY/aCpwcUxV''@;'; put 'put ''IURSYDdxWkBmYF41KC47OSNjWj86XXdZVU9FRF5DKVtYLFp4enR+Q1YuKCpzZHViUDlbKkI/b1VwPCsjUzR6LHFZSUsueCl2JFpTMkxPMn08UCpKbCRsWitvRHc/PEFoNiUxOHw0RWhXYUNZQ1RMXzhieX0pe0w+clFzMFlfS3EkPFI5N3U8U0tLdH4pRl1PV1lzXjVRTzBiRVt9eWolOzJWYjxb''@;'; put 'put ''cnZvfmQsOCF+fjckYCY4cm4pIUR1QjVjc2VNImNrP2NYK0wvYXBpMEcibXNub2EiPkd5WWl2KiguUC93M1Nzcl9KciFkO1JUXWZ5S0dTMzJRXmlTcDJiNHw+KiZ+KCV0TVJVYnBleU9SOWNdUUBdRFJHKWEkWzkmMDkyVWgrZmlEQUJXOUI2T0hqNy4pa2tqdyYvcCN8REJZbjheSUdMaTJLSzxO''@;'; put 'put ''ZFp4PzFsdTtlQUVSNXZUWEdVSDdhKX5YPCN4Y3hobnplalAkVXJMbzVscisrcHkkKUlhOk4iNis5eV19QEZaXlZPYFt7a0tra183fXVVOXIlb25qPlglKGYhSSltYG9FYVcmKktmTWt6Kk8mQFI6Uz8sYUlRP0Q2K3N0UyRKYFo1ODI/LD5KU2xUUiloOHNXNSg2fT56TnJ3THxyLH1vYF95UThP''@;'; put 'put ''QX5uOzI/ZyFeREpoajVoS2pGM3FZNVRQQyFCLz9QIzlPM2FCVXkrVD03THpJKTlWIyMlc3Q/MFcsQ1ombW1CfUN7TXB2cjptdyRSWE1vQH1MJTU+QylxcnF2V0RFPjl4OWBTeVZKZiJyfWJYYiQrPlQ3eF9MPTVSKihMbDtJNjZGQ00vTF0wMkBpPSt2dylkUkMpezQveCMkWWFab0kmKSw1O3U/''@;'; put 'put ''cGBuUSo9eT5jMCxERSVDZiY/L1NKQSJPX2U5OW9CPS83KTdUfmckMUByQ0o1SE98MF8/fSVrSzJiLyhQe01iRUVWfiY4Qz1xM2NtXm1zSGhdOSl7bWpnc2c/Ky4lX1EyZzBBX25qS3AuQF1rQHBMTSQ7Xmksa3I9LmouYGBnUChzS3UuJWlRTXNDZTxPRnkyNypXcmdxQnJucj06K2Y3Sk07YHx1''@;'; put 'put ''ZiJLIj5GRkNUaCxoLDI9cz96PFg/NXxfJm5BNmxpUERoMS9ecVdlbjEkKzZWfkNrRkBIfUVvOkokblApVGdoTHc4M0R3VWckSkE8bytIbWlKdH4sdVhwZVRqe25sXnxhfVs2PkdDK3dEViE9Nm0oPD9veyJwMkIyMHk+UnhoTV1XeT1eMCQ1Y0ldNjFQcjd5WztCOjc5RSJCU3ZaQiglWipQU004''@;'; put 'put ''cz0/d1tSL0M+fTt2Wjk2RkRfKHsjS0BjOUIyfG93SVdBLl9eVXFGTWV0fT5TclJxbFEsOzlpJTpiZjlKbFE+WSZGRiFeS0dbI2Q7Zz9YMnpZdXVoLC44dj5eMkpALElIUGM/Vl9gTjk/Kz13eCZPeTlNcHE2OEVxXU13UzQzJmdPeUwsZmthT3dhL0hwX0UySDt4WCNQbEY6JT12VH1QJGJme0pa''@;'; put 'put ''aHJZUyV7XlM6XTRFJEUjdSlEYCtTPG00aTZrRVFyKDYwME0sVEE6aEkkci9mJVl0LEZsam1zVDJmbF9tQjFiQll9TWJ6WChPLDpwNDt5VG5ge11eWkhZKG1KNVFdQENBZCM0aFYkPXBvNVBAeSNVc1ZlNlEqaVR1O09iQEwpV1RLOUMuOjk1OXA5eiJ5Tkk8bWdtalRVW1lJM0glbG0xWkJ+JUtp''@;'; put 'put ''dilgLkY3YCQvU0VtPXRfVE14THJUZnJ7YExFWnFreF4kdCo6NW9LSnBbT2p0UGluLFVtWSs9U1JlXVdEME5kW1kiMEBrSSlbPmVYVzlHN15AOyojTGQ/IWxDUEA8I0ZMcXVvbUVJPD56YSF7JXsuY19Adih9OzxNfCU3WShlKmJFMmZ2U35wRldfW3AvUDdMRzJ7bmFpUUAlT2pub0txPl42IkFJ''@;'; put 'put ''O1svLyZPTG5CXjZ+V0skLzdvLlZJQ0NSNGRLKVFXdmFwdX4vbmtTRz89VVsreCVacXF9a3RwZUNSczZ+Tyx4NXVaO0xHZk9qRDI0Sj8+YDVye2tgKCZvPExhZzdWVU41ImtCQUV8I2okWm9JUHpKKGlePG1SKC9VJkxqe047NU9NNH5DKzIxT0RCW0BKemNbT3N8Rk82aXtkOXVjO347V2dtPkdn''@;'; put 'put ''fkJbPFpHenQqK0NyYyxUJkRCfVRlezZ8Iy9XX3xAUExiSWh4LGA8RmhRI3wuaXBqbW5yRSlodj8uNHZ8ZHUvI2V5QTB0N2RFPVMiXTp1QmAiWWQ3LGs4SGAiTWNOZEthIUpqRi5rN21CciJVPkhia0dDSSVAWnpmI01QcFF4a01VR2V7Slt3TGRQJkg8PyMqRklHJXtpdXxZLD1lWW5CSHUzU2lt''@;'; put 'put ''XzRfPHoiPiFdQlFHeW0vMDtqQEcxY20pRWRrcExLMCwifGxzSUI0NG8uTUJsZGcuWyRxPWU/PFR7VXNqbGNrYEpaWH0oLllTIUVqYUJXRStaclRUMUVNS2hbeW16NzVIZWNQU3FPQkk0KHw1NEBmZixnVStPL3ozJUFvTGlnXm8qdHg7RyZXU3cqZ1dRMX4qVTFSLn5tdlZZXTEybngkd0RmSXI4''@;'; put 'put ''Lm42dVc/NGszSmZpQnVeOG1iMlkxUihOVlNwOzJTTkF8PFBjaiN9UF51LnlfUFI7eG0lTzJbUVs5NzoxP2EiUW1zUUopUCU7OFYubyNialMoQ0dUZWtROT13cDw8WGNaJU5PcEpIU0ZnKkZ3MTgke01hbyNzallLZiVlY24yITxOb3tMe1ckOV4zc2U/dGVYYzR8OTFtTyRUfWklMy5tJjxTWWMx''@;'; put 'put ''NUFUaiVDKnRMSSRIazI0ZVBhM3JlVkJ6cDFgfWMxe0c2cXE/PE0+RkY5OztWK2dBfihiUyRdVm4zOyF6RXI1dVBSVCMwV3Z5VDxjZm9AUTw5MjhnJDVAODR9eUUoIyllVHdIcnBSIyU5LnVjKHtbeGwwUGEzbTZDSVdbZzppdiFIe3xAd016dGxFWlJsZWxFRCY2S0w3JXsvX20uZWpbcmZYSm1f''@;'; put 'put ''UVMydkp1eCJKKDtCci9IPXI1eWlgMmk6d1lheyxePF18TFhMTFFVU0UqWF5DTlljUERyNGdgZUpJOjN4cV0+ZGdMcmdsNCU0WFo5UGMufnJZfFEvRnhiRihOb21qa0Z5PD9sOS5CWHNaRld8REcqPmYjYjIzST5uV2FkISJMbG8pRjQxRltXPmE7ZixlQzBmeipwRV1wNmsiJl9veSRlUVtSJUJH''@;'; put 'put ''V0M9cylmQDYyOWkoLD1TcjpmOC9zcWRhZXIxP318fk1pZF9uMVBAMEpdY3E7Y0p1b1g5I2Q8Zl03ITw8MjIxQnt3SGUsbGZhX3tda1YjP1N1SCx+dihwUndKSUA0PStHakkoZDtRbm0ve2wqIlZ3Kk0wa2kjb0FwcXIxLzcydyZQQ3YzMTowOSU4dGdYUWA8VCVTWCNlVSxxOWtpTSo2K0hHZm8v''@;'; put 'put ''Unc0WCRaJHhHKkZwaV5WUG09SCVDO3Z8MWIhcHhsUVFTa3BPSlJ8QkM3TW5DRUFyamRpLDU2YHo6RmNycWh2WFNFWk5mREdRTl5HOmVBSHVWeD45ZWYqfT5fNSxHdEQveDJSR1pHJHU/QDxfbTVMSTFhXVc1NTk8Tk9RZ3pzI1daQn1ZRm55MThuUTd+I1Rsa3V2QittWCNhIylXfTtMTmxJJEJ5''@;'; put 'put ''OFtZP2J7IV9ybSM9LmlrKzExPipAYEBefWkpJn1WdFFaPWY8Vz53VExmLld1JS9XejR2Wl9rYFp3T0JSbDYhRmFecnV5eyY9YnFafS9ONT5jUzpkZWFoUkM6JF5UcTIuckghY1F9cSN4PzZBSCtOMjRZMDU0VkchbiVEfF5LQlYrN1g7K1VTdmVeLCkrKXVIPVJlazkreE8hMT1TRmhdbGx7VmFe''@;'; put 'put ''MDhLPXJeY3heSyVDMDJpZkBEWC9uPDNEeyNaa3RMKlVwd0E9Ti4mRys3OF5faj9geSEvbTY4bW1DL25bN3ImQElaO1BdJnpFIytfTWRybzg0OXlVIUllNENFY0JDZz9DM3VMRylCOUlwcz0kOXJBVlhTWGsvamd7biRoYHV5YzlZLEQ4ai8iI1IoYT9MRmZpdS5ZWTlIUnh7QW5uLnVXWl1qRz1O''@;'; put 'put ''Mnx7d2tzaitYPWlTRitAcUNRRT48bGpiMEVHWVZCeF9Gd00zSnlAOWZzIVpsSnshaUtnKmpjJkIoeW51bjEuX0IoQ25Hai8mWXg7a2dxKzhmQXE2S0x9d3RkbHt6WTsmJFpNWHNXNUZ4djYjYFFnSlp9S0ZYIl0/JlZNa1IrQ2xkTUs2bF9OMkloWz1qZWMscGRNNDNlQipTMj04WiokQk9sQkM7''@;'; put 'put ''ajZHUnw4OUI1bDY1aVk0SVsia0koZldMQGRZdHdQKElBW0hJTzpVTXJ9al9wPnBjRmR5NF1NUyY+ZyMqdFVGWSxYcTZoN3Y0bnpLZ05neisqPX0qXzVtZXZwQ05zKjtWdTNRNXJHbyloKm52KUtVKWg1QkZ7QVlvZzF4bChRezUmalozcGVfNXMqJDtkZVohRXVuYFgxKnQsXzF7Lzx4UntAWGoh''@;'; put 'put ''NXZeeltsWnlhUzNhcG9dT0wpYVlZcihRblV9OihkaDJWfFo3WGUlQ2pydUJnNFhZLmArcTgrdDEkeE1lKmdsI01TWjRLUzMrUE1wPmwlPF52S3ohPS53fWdqU3ZmcEM7ZEs9Pk9PQT1qUUg+USkjYm99eXlLYFhFYD5RdGYqRX56ODpbJU1SLzIsQUpmSlF2XWVpWTkuQDpIWE1URkZuY2s+UTF1''@;'; put 'put ''MUkod3g+L3ZwRkhwQH0+cyV9OS46aD9wT3Q+QSt9JSolK28uOGBxTkEiay8yMzNxN0FUK11hZzksSyRhb158WipCKjYoS2ZHUEt3MHVYaj99WGdIOmhePkp1NnI4Nl08XTdhKWh2IkRlcDc4SDs6dUo/KzM6NlFlZ2puWX1EUUhUSG0uXX4zcnc+anFVTExyLnViQDMwV3Y6VlB0IXZxX0RCM1M5''@;'; put 'put ''SnNvOj01WTtFeCs5PHN0JW4xaW8iYj88MjFPPDRbOVRxNTFbRE1oNVYiSlpFNiM4WDpfV3Yoa3dRNFV5aFZ4WT0oOE51XnU/bntpYXJZNHx1Q0g1bzZKYyUmX34uaix9UWdGTz1QIzRdbExUPkBfJjNMRDZ0Lnw/dl5rdX0zKGNiVEZ0ZklIbDRzSnYwMlI+JSprN31GYi81ZFFqWndjUXJ6bnNd''@;'; put 'put ''QUIlYjQsIzRIeG9OXVVQZTcmZFpTc191YykxJWBiVGIia0tHSFUwJW0/bFNsX04pajB5cllIJGBdJHUiLG9uKlg9fmVnWEMjfUNYZSUhQHJ2K2M2Vz5ka3dgYWY8cF1rP3MldENURSV1emFPRGJmTyJoWTUwKStveWdveTdpITlkaE4mYXZ2dD15UlRtd05JTUYqLjBBc2tOOFJ6VUY2Oi5Zc3ty''@;'; put 'put ''QytueXplZGMrJHA2Yis+dX5ONVhMMD8jZzs3cz59c2AwOUFrO1BWYDdTVT9aQmB6OXY+MnE7LF5jPWJqbzl+PzlKUEpQK1tJJGxEUSp6bzglLnlIVyZLfTRIMWlPRVt0W3RFU2twI0JHXV4kVThlQFUqMyl0ck1RcHRqR1l1fFdVPlA+cCwlPTMpUDBkYGBAI0lOZGE3KmxYJTYkNnBebE4ueGdp''@;'; put 'put ''RlU0XVtrYkJNeGhdcTdYMDFNTnJXZTA1ITpzT1Y4fH5fe0RFTkEkY009NDVGWTYqWiFdSFFkOiJvdmEyIXA6WCY4IVcrLmQ/MkxJTWcpPCMmUXg/Pjs5I0JZOWcmKVkpKSw5RDFPMT5LQ0N7akg7aHQpKSNCT0xxUTRyNFV5ZEAzN2JvSTpGMW9hITNARGpWVFg+czw0dT0ld1s1JUpuQjpDIkxd''@;'; put 'put ''RTxqfUlLcUs7PVdGWV9ZOU46TWg3YFs4ZD96KFN5PzQyOnBLP2p5SS43dCF1Y2cwN0sva0ldPm5JfTg3W1t4OVBMYXg+Nj1yKGlLNlhUdUFvLEB5KC4zWEp6WzY8dEwlSmYsMChhLyI6OGM2Ly9Fc1tVRmI0QUVkMTdANEdHPEQ3cFE4dHZ6YSF6bFV3aDpNPzRWJTgvNVFIPnpAWyhzWFpyfFlx''@;'; put 'put ''WzMjbV8+PTQuaEh1I0JbKmRLOHdBRF9Ud3pYfTBaPFp8RkFrTDtYVFg0Tmk0cUMqcFkyYURhXVBRTTJaUiEkRkBOLz1gaUFIeEdHLnZyY3o1TyY5ZFkjUik/VyFxOltXYUU3YVZ8YXcmRl0/XWdDRkxJflcqbz9ofT9dSSNaZlZeY35uLkF0K2g1PV5CRkQzYlkpTUpyNmVIM1t1L1kvWCI4Tih5''@;'; put 'put ''aW8xdWVAaDIrUE9UZ11RXVBYMEl1JE55flZsTFhNI0wpTCZkYnN3R05OO2d3KkR1PlBPVDhjUlhoczp0NyFodko7RWtTWUR8YzBde2lgTWhhWzRdKXQ7MXZhQXlhcklsRGphbio/OT9FbFBTUjoxfCF0UlNyJnJHYD9QKmVeYkQkUUdkVlhqJUc3OUJJNjM9VkM/LnxtWlB1IWUxT0c3TD1IYXts''@;'; put 'put ''JCo0XUptSldkRGcqbDlVMShxPjxNVUJZJCJwRTZBaWdgcHsxaGBpZVQsNipgSDRadUA0Nnl6ak9LTF0wRSw+NntCQDVTUCVMRC9bZC9MaE1JRCRXYVRxL2orX0xET2xJOWRpdSgoLnIqWjsjQGoofEtSciszS042Ojl6VS54VUVuSG07RCZLPjQ6YmhpWDs3YUYsMSExfWYxeno+LFBIfFZPNjwm''@;'; put 'put ''cTlMbmVycXV6PmdBYS4qNDpqMHBFPExwKWFeUHl7SXdzazAvXndEWWNBPmczLkBFKD95cFllZ341O1chNDFtNSFuYV1FdE1oVGNmOz0pUmhFS0NIS01VMjpdd2FgLDd7VXQ+UXR0YSpqUi5TRj00JCkmLiQhPj1eRmt4QjRmfkleN259dms0fit3KFh5QUopWn1jbURfdkB7PH5FLjA9OW5lVmdm''@;'; put 'put ''bC9tU244USsoRD8hUkZJUy43OD1heCZvMVIyQCRsWkxqWSFHcVJSUDx3c05ILExFNXNBWVAjN0kxPno0UnN0fHtYJGdAMGdAbDIhUGl4QiR3R0E0S0l7VGRHJjkjWDc8IWVWT3Z0JkkwNUQub1FpaFJ3fUYxdlhxeUo7S2gpJUljL0x2cnR6cTx2NkdrISY/aFg4NTQ6dWUobmlxXSUrcnp7IzVb''@;'; put 'put ''UHJhNzQ6dnphLkpqellbflIsZmBOcj1abjRQKUNSRzttSl5ITmxwIm9KbXZpTEV0JipsM3tSRjt5KF5GXWssV3k4ZjZMMnAlUld2SjZoNy95KTI1d0EkPCk9Y198alooSm9jKiNhJTZRKHRWWzNacyR5S1pIQDQ5UCM9c2dAKHtCM0YqJDVbM1t2PC5uOjYzRTN1S3MkY15iMis+X2VjWD4ydlBq''@;'; put 'put ''Kyt8T3VbNDFhbXVsOkpDe2wuW0ZnOSs8a3AiJSRnImMwIUMha1N9fjhWcUY3UlQyOGwxLigkYmxiK0FJKX1FUX5xU0NdR1VMcjoiNyMmY3AiNSxRfEs7NkBzdj9IeDFRTWMxcS5ZcnZfQitqd1RIQ1lpeTFIfXdxNzlLaFMuLipIOEdzNk8rSkAlPFVmWkw4M3tWa0hqZzgzYTNbZk9WMTFMJDJB''@;'; put 'put ''LyMsSmAkZG5WXUVSbHhONEUlWFpoW1Bqd3IqUTRPYDcuOUwhdTthImosXjZRPDt8eD1jQks0eDFfPyx4W1tTbW0vVTUkJipMdEo9dzszQ31VfEVHO2FgVm4yWU9GfUZLXl0wVyN6NlpKXn1HKytxWWE3WmJJKzI5cTFAbSJwSXYyPFdaIz0rfiIzNy9SKit3NjApflhBQHlMWCVQNmVjK0NPImJA''@;'; put 'put ''SjpiLC5TJDVLVz02V11TVVZyQiE7dT5wP34hOyF3NDRBRE1CRDVgNyZzIXZ9YGg0dzxkfEUhZGUsbHgsQmIvWm5Eb05bNjdOVl1oSGxzMnZrS2ZSRyJLcW4xY30jWm9vQ2pFMUQsamY+K0RmZzdJYSJwYV93ZkhaKz9VMz9mcVJmTHI7ZDlMNExaYU03bClGajZIJl55Ikk6R1deNWBxJT9WU2dy''@;'; put 'put ''aDVCVyQsUk44cF8jRHhAZHtYdy5CM3ZJTyxjZTFyNlBJQ21VfkszIzdZTUpYVk9xYDlxIm0mSzosUntWbjp+fil2SG8qcHBNcklgRmQ5S19XTHcoMjhJXm94TFlgfGJNXVt8Y2ksK3JMd3V5LktndkhPSmp1Z3JNTnleQlhnXTBrQUdrOVJkaFp+US5ERyM6KFpSIXlBUzR3aEkqOF8obEVJR2Yp''@;'; put 'put ''azBddGl9RU99VUFzcSw6MXNLbyRwOWR9ZWhOMH5SKU1xNSV6NTo5XzI1KEtuOWluXUs7SGVWcUA+P0kyTyFBYyZqaFJCQUl2ZlB3Vjo3QXh4YGd8KitJWHc8a3k7Vks1c21HOGNuOn06Q11mbEwjVkhEQjA5ekZvMz07YmNQQWowfStFK3V7eyg0OWNOVEgjbTwjenY4aXkrYDpdXkM8ak93dl1L''@;'; put 'put ''aEteJnxxc0t5Ii49Okdud3BVWDVXLz13Sm59Y1UuPHBDRVNxc0daO0xdcTh0dk5bMlFufGhBMz45QilFN3ZVYXFNJWs+ZFtNRXBjRTB3TW5xeyYqdDhWYW02ZERBMnsiQ2N4a1FGWG02eTE7PH0yRXBIKkd2fXxXLHJQdmE/NENYJEVwc24ye2N2ZUkvUX4sfFArYmchZjd9Jn1zWkBvflo8KTxN''@;'; put 'put ''am42blloOXdJXXFTZD9dKmpVTW5MdzdXVWBoZUNdZllzZ15xeylNPClUcWp5UGhnZnpSQFUsSig3UGg7MH5sQ3o/VFhjeHVMW1hpUnpQTStufVRifCpmTVRadXh3N0RKU10yV2tFd0VgIkZpPSU8ME9kQz5AMnJpNlZCMHJDdi51SyswImg3UT5eI1ZOXj82QjVdeS9tWGxZUFcxK1RkOiFLeUV3''@;'; put 'put ''X1t3cGslb1Z3ZnhdLHxoMDEiYTg+RkY8d210VHs8I0l7MHJCNkc+V3w7aiFIQCE7bXNmdVpKQj5DLE42YiZlYmlPeyxaP0Z0SUojZ09wRyM1KlY+K0ZHIz9mWFNqOlJnYFNTSHRkVGRacn46ISNdYWMrLlVfNDw/YzxbWXJyK2ExL3wkNipaIzttYilwQSJ6IlA+JGNvIz04IlpTR3pxIUFZRSJv''@;'; put 'put ''dW9ZVFhMYWxoQXg5UikqUnVDRXU0eTxWL1VIKEZ5U04wUURNcDx7Lmd9M2tobkliRE05ck94ejljX0hIaWJpakIoJEVnNjtsfTtKeD83OXMzMWkiN2ooYUUqIXZeOXx1Ml9kdzY3ek5+MXttOW0kfXIjQlYjUXVKOWpVeWN8eGI9SUVYQnJ0RGZyZlR8diNZTUAjTyxIX3k2fjEjK1k5bipOP3Io''@;'; put 'put ''RCR4fTpuMmB0VlpKY1IySChwNHM/NzpRfDxaWnJ8PEh2dX53SDZpMFI3PHhiOSw6QTcuY3o0NSFbL25wKj1ZN0x7cUJeKlN+TjBgQUohTXl9VVp5QlVeKHFQYi90djN4bnNWT35CcUZHXkJ0QnA9PWEvYEh1PX5oWHVWejY8KW52Zz5qTns+bTB0flB0fCt2UkgpKUgvdDMsSzYpOnlvY3dCe1RI''@;'; put 'put ''MVg9dGNBeDpRYyxOJjQ0N0t3R09FI3Y+Z2giMiUmM2R2M0U0WDtHZGJodV0xOHJAXl1CbyxDb2VoUzJHIiIuaDg6PENydDdYRjYza1pEMSZSd1BfYjVpKHxbLEZOW25OLyQ1eSUjOVQ/a2p1N1VIJEwhNzp7RSs+YmMpdV5tWkwpV3FeUi55XWZ5YF1wPSZTb0siWSMwZVgjfGw0cV5fWjQhLEBr''@;'; put 'put ''Pk1kTixZMFNRNVtXISl2SnxSOTh8fDc8b3RlfV1JOGYjZntkQmNyfjtwWUxZRC9HdUpQZWZiaDMsI0BnTSVRcFBfcHRfZHNBI3smNGdxb3xtIUBecixLfl1CaisxaixmYnY7Ok4iLGZdP1ssfVBUY1tNXUpIaSNUTyU3SWxjZzZkeEo9ei4qZmxuND9tZDNNXWVwaTQuKldgWlAkQ2xjblRlJX5Q''@;'; put 'put ''UkRdRm9dV01Jey4jV2RNKHZxOSJ8Q3RvIT0/fTliL2pCXzF4RT0rMUtNYWFfPSsxPShyaFl2ZT1lQk5LUS55VG5FfHZtR25rKiUkPFtVZ2pAdXlhMTFDfGNLQXtsb3BRQC5VWWgmQFgwdzo4VjdoIVlwfjlxQD42JHErOD0od10ibD5RPnoqM21RVjQqQ2NmMmNUNEdEeX1POyM0bkBpdUR3Tlla''@;'; put 'put ''YEtLWWFHL1NKQ31TSm5gIm1rSzIxPytrTWlGLDM3ZzwwRVFFLEdMVEhTcEFedW9jZlMkaW1gOEI6I0Y7N0F3YkUhZSs9Sk1UUm1PY1ZoYmpXVTQkSyxYa14jViVhT0ZbZ01kVmhRSnFgKkNqXjxuMkZFaFFKcWBEMTtgKi48cDVgRTxENmI9e3hfI1hON3FlaVQvM3pnU0F7OXQ2IU5FZExjUjBv''@;'; put 'put ''dyF0eiNVQnlZWzVtSU8iejFWanU8Rz52QEtLNm9gK1BvTntMdDN+YH1GKWJsYEsvaUIsW0QxYmo+Vno1JjM1aixxSWdSenQ0Ql9kKEojeDlBaDFHO1ZCNTdHc1QiO2ZLQnpzPlVZNy4pdk0wNSRbTHhILDhAL35yfXRuRllnOUsiVTs5WTY+UGMsQiY7OlFeNHRAd19YZyUldm96L344S1EuS3BN''@;'; put 'put ''azR6Pn1ZNm1mPjBnZklqb0lsJCVdPSVOT1Ihd29sdlA9RS5FdklgV1NLZVQpI2pyLF53UWtNX0MiUHksWHF2TTd8UG9lYzttL2ZVYDRXREUjcmVdLjxgK3NtbWszRGYxQmMvZFAzdVV3RGZzdW0qcWklUDRwUFszOlBPU0RBKUAuP04mP0gvSWFsdXohX2JBe3BHSShXJlVKUC5jLmltb2h+WSRv''@;'; put 'put ''dVd3bGZEQ1A7PEBgQz10VCwyYnNBNH0vO2p9YDssSU9AOXR8SG5feXZqKFVhR1huTHhqTm4ocmt1WH1yPjlQSTBFOXZMJXQ2QVU7SnMmdEpeRUV5d0okX25kNFVbW211Iko6TkkoOztzfTtLeVJPYk9MIlc1PV5efFFpeWUlY1c6S3IkX0JONS5AJFZpWG5yUjV3UlgqPUNPZzlnZVY8N01dWT85''@;'; put 'put ''aF02OUgxQCxMbTkrPHFILDdhaEJpYCtWeVUhWi4mS300JWskP3EjPW45cio5T0BWS3FvT3speTFOTUVHOkJpeClSY1t1TDZVYTFAYV1YMUhVdjVDd2JFTWMvQ0lLPmReVVRGblVJPy5QdyRpXiw0Y0ZeVTw6LyR6LEImKXIkOy5ZZ1ZgPn5vOCwrPFArbmRrfmAxRn17YU5EOm02b3xUNjJUcy5d''@;'; put 'put ''XyklcyFVYytmZkd0VFosKlhEOXB9WDNbXkJuR0tiWUlSRldYNUQ/Y0lDU3pZL3ZpLERnVltlYTQlVU5jMURuQnFPLm9hNFNSPHUjcXRENlV+QXpHIkBRMjB5YSNzPGAzYXh0czhUVXkkZ1ArSWBVODFmTj5mS3J1a1BNc0l0fG0uRHFWYWY3cVMpcWAyKWIxLml4MWVMUE07V2ByKXxbI3RgKTtx''@;'; put 'put ''dFVlOkBnW2FSM25vNGpVe0JZaVpJQil7KSZLMllyRSZgT047RncwRGYjQmghL091Q3c3XnksOVp7bEJNcUBgInd7R3VXUXdtZCEwYlg0dUlMIzFlYzw8d3d2MiUsIX5IcCM7WGZXKmhwYnQvfCw2NnwsSzRSWmdpR29PIkMqeXosd3oyaGFzZ1B5fis4dT9OOUVNXS4kZXBpeSRUM3lVJXdXbzpy''@;'; put 'put ''K1hNM2hyd0AhNiRPaHAwaWNUN292eyNFVFp3SWN+OX1IW29OQUVrc3lYX344N2JrO182fTxscCJ7Zz8vPld5Ul5wWX5GQjNqb0kwV3hxYWdqWV1GRDlrb2o1KnxgeVlhN0xBcltyMXZkWSFgTk1kRzFZLnFaW2pWViNLPFVGYnA8cDhZZV4lNztwdWlfLD5LW2hYfk1yIzN0b3pPUTsyNVpmM3l3''@;'; put 'put ''XW1FOmU5RmIoKDQ0TGYjXWRJRGlJS09eVlMvUUZeVShWO3A+U259cV9tdUtIZUJKTC80RDZhfmVQPXQjNT1WNDZSNStQcUNuSTQ1SXRuZEJnZF49X1U4RzhDOExASyglRFJEJjIwX2IoV1piPmUzR08jSDIpeTQrIVdYKHMwWGVCYEh5RHIjTFg7cCE4bEhLPmh8K09RSU9TNHVwaGpEaTx6ImBR''@;'; put 'put ''T1ZvVUh8SkJ4R2J3NUhEV0ZIR21mLyNOd0h2d31eSjd1I1ooSkZlM1lBP1tlanpENzgsNXdgRFByI3liW21FfDs5UnpbOzhGPlpqZ0p4QFdIPDBYYCNiWDcqWEFrX0V0R08sTGlHb09Te0loM3U1eHlBMDNNRWh2OUlBbTxwdzxzMWhWMnZQU0JeKnFqOGNEaTEpR0ltZVo+OF91VVQ1fWNRa2dP''@;'; put 'put ''TUx2azBHTnIrbTliWFhIUmNxdEpLOGZ7QzN1ZHhpIjlyUUF8V2JFQXpEMytba0tIIXxEQXBKNVhLQGh5aU16fW96S2d3NVg6KXNFdS9LekQzYUZRWTpMOShyWiJILCZHekcxQGo3UWcpayhpLHs7I2B4fXtpIWV0KC5pSEx0Vmoxc0Y9I0IoU1I8Q0g4RGUiVn5dKkU1bG50d2t8QDhrT3w7SDU6''@;'; put 'put ''fH10S0g9MGZkXnw1dDU4fjB5d0A7UzUxV2pWN2dZNGkmXXRpfG85IzUmantPTjhDQHY3Slo9SE96UjlWSX0wM01pTD9XX3chfWFOWiImUUFmNnZAXWZWNXZvSmJXOzU3RGZtRjkxYjhRNXVSNzhpRz5NZlhzU2J3JE1XL007cGtgIkB0PHZPM3c8PlVqcWpkMixxUGMvZVg7eWc8ODwmSGZ5fUs/''@;'; put 'put ''Sl5GQWN1O1RPNjA0SCsxOHBWLlQ1OnpFT3ZxMHc4dilHdFBrNVVPYWdLS0BTL1tMSzNgIVgxMFpkK3F0RlhlYio8OmA+a0g+TV4oPj0zKmRwLjNfaGFPd0hbdTo4ZXddM0FpSk8zOVY4TjtmWTkkfEBpR1lSZU1UZ3U0SU8oa3JlfWUvODIxPjRFNGdpLih6ZUlgMUNMVl49PVJNc1dCKXtJVE9f''@;'; put 'put ''TXdgb2tOcHhUdU1zZ1ZbI0NiNytZaSJhNlpIIUlsIV84Q30hJjoocClabTUjdXkvQkgvQj9JVU1SQHd1UE5NaTk4aXooWzpaUkRgY3BjNWgwZTVofHRPb1NELEY0X3g+RFhdQ2YhJElONiQ4bzkiSDZfUF8jRz5Db3FSWHlDJl9nQDtiRFgwc3IpcDVabGFDOW0lY2dzRD45WDVXbkdbTm9Jdilx''@;'; put 'put ''TGpaXjtDdlo/RldxdShkZVNpdExsbnEzPnJ0OjdFSzhrYHExMjUzYmt+RnBWKVFuQz97djQ4fHhbTWVWVXczRlo9Y1Rfa29vL0thInI0ZDc+QiJIbmZ6bTQ0eVl5fFA9UGR6V0wrXygjVFZKWUZTNlhaK29DP2B9X0g7aCMxUHtARn1YYytnY15Wdl86NXYpIz1tWE9WZX0mdUIvdiQ9SC5mPllV''@;'; put 'put ''ZV5QMFRjdVRCfH1SS2VgaSRPel93aDR3VixLTlVWQi9XPjYqUE05V1VLWTZeSF47ZnVncXolN3N8THtQdyRRL1RVSTA5JUwmZXRVT0tKRlBEeFtLIlF4fUpqK1oiKHdgb35zJlZ2VyFJPFZ5MzFLK3B6dTZyMWlXTzAjd1U/QEZwR2FwPWU1dm5AYGk3fHB1b0ZFYUdtSWdmbz9MVSlNP1FYWERM''@;'; put 'put ''aUJFJSxOMVJRKDAvRldWSThqU2FjW3QjLGNib29EVnhnYn56aFBKeCZzKnNYUFc2fnl+cyQ/fHN8dzoyc25gJnwhO2ZNNF9+PHx0IykpOW9bXmB6JXQ2UWNbSFtfWHlyWVVWak1AfkVTbXRUeEg/Ij0xJDgwdkBlJDE4eXlnOkFWIzF8XyN6KXdvJThSKGBua2orW0I0e1k5Oix6bnZRfThpQExW''@;'; put 'put ''XXRRNnF5VjVhSHM0Yz4/YEpFRWgvOFc2YlM/OWxERDdFMDllYihCRjleLk0vTjFaW1F1dF9IfFAxdFVIUDVjOzRZbSNHLnxQQXV7QUtkM2ZVVkh9IltxemFDM0VHbCMsXk08IzF0bHooWDNaKWFGYUchaShgYmpmYjkyPis7USw3XWdWNHh7clBreTRTTDVKTE9ScXJwZkkqfGNDcmglSHsmVngl''@;'; put 'put ''KHNFKHxXXzJJTyp4KCRFbCJOUHZkM2tMcGNCSmpVTSRNQ1oicU5pIS9SUEFCQVJEUHlAPkJnKXtTMyI1TGVSMUgkfCtgNExlNWM3OUtwZ0lZaythQ21nQ0NXSl15OU16dElfU1E/P2pmfGA/JmFDaGYmQFZKP3J1NV1uR0s7KyZRRHo5L0xSKkg1Lz9qSm1kTV1ocCpEZnl1T1BBQnh1YVkwY3pE''@;'; put 'put ''XWhETnd1MXRNSHl3VlhVellPW0EhWSZhIyhiRF1oeEI5Qk9CVU5oTj1ob3VxSXEiUEd7ITJLeSZoI3EhP1BpeHE5d1M/KnQjcFJSUEdsR11nVjd8WDZUNiRGenp9XUlnX142KWdVNTh9Yj1pNCIqeCJqVVdXalI2MVtyTDdlRHZuc2g8aUtfeyJ0SWptNGowZE9sJWt5Sj81U3JmWzs4Wl4wPnpW''@;'; put 'put ''eipLJGkvIUlaTVoxayx2eFpNWktILCkqREw0KHxCezssVlVyVF8zNWgxSF84L08jXVFFZXM2Wz5yK1U+OWIvbj5GKDZ1fWpsVEVKendYS0dNTjhmXzB2anBJSF1yVnw5a1VUZWVyV2FwISlORGJ8WzxnVmxCV0I2Zj1HWj82VSE1VGMubFM1VmZZK10veXJTKVk5M19JUlM3ckQifSJYTGoyYVoh''@;'; put 'put ''VShjK1IvLlhodDIuW1c+Yj40NHZxIjdoOjtDYlRad0RYL1Y2dnZXfld1Jn18RT5fTFg5fWhTKGtzLy8uaCNMPCxMRUxpenUmP01jYlRqd1gzbUZSfi5zRkt2eV1QRCQ4IXg/XzQ8IS8yOSF4JkwzOTlFaG15OSF4W185dGklR18yOnpIZmk8Yl15UXlhImtqc20yLlFiVkxyU1FGZCRUMT07M2t2''@;'; put 'put ''KXJTWD9obGo3NmRCUUo9fHg9KnJTWD9obDx3IiQ2NGN0I1M3alRbflg0LkYpOi5iZSYwOF05ajdMTGVyKWJxUj8hYjdYeFh6ZzFoQktHLF0hQCZLZUFrMEd7blNPMCRlY3NUKz5PUj9ATmlnc1lqKlleVkFSL1Bed1YyalpPXWtWIltqLm4lWGliRUtGOVhtPjF7NmtUIVpmS3AkRSg7b3pfO1VA''@;'; put 'put ''WnVyKk1+QX4oOUZ6QEBCKHBKWCU7RClAfSpGViJLJCxlJTA0amkzXWdHQX11aFg6UUNYVy5QeyZfSWsyLCJNNGNiJG9RSG87bk4lIVgjXiVVXU9Ga3tOVT1YYWRPcisjTiYkNDxVJGtVUzE0Yjoxdix8TkxhaWlbNDY7IlhGJWkoUFVFWVtKeXx4dHtHfFkkT1J1QERqJTQ1c0tlXm5hSE9CVHYj''@;'; put 'put ''IkBhK1gyRDYzb1tefGpWcXVrelpScVVYb0pkPElNdDRNe3VHejByIl0iJj40Oks0bilDOmg3YTJia1tOMVk+a05iMD9jdSYueFdRbVYzZk9XMl0xeiVhWF9zUz1HWUR8UiRQL1toITZpb0UvKVlpd2M+PXoxXXxKK25YPXxjRWJ5MTw2OjRrQVN6QSlqXk9uZG1EMFIhJC5TNzwsQy81PTBbWWRl''@;'; put 'put ''O290Yk55TFVldDVmOkhURj13Tyo9QzBHPXtHcHlPQzMiR1sxTktmQV4yT0pzNC8xZlR5IXk0PC95W3diOzAvN0AsdHMoOj1gfkZVWWwpT2ExX357MlM5V3ExYFdYTCtFVHgqZ35CPjZfQSh9VGwpV1IodFR4dzFocHlfSndFb3FaKmkza1pDdXRfJjtaWT9Ec3BqNDlZY3wjQ29MWGlwQlBPMDE1''@;'; put 'put ''NC5uPTg0NzlmRFgzdHw+dW5ASiowTWN9XSFRYUNCXWlaPWlsMXkjJE1nWVEkfUljXVo/bSNfb3c4PVtaZE5KeGl0dUVLbjdNKlgvQ3JKfDIrUChqaCtVckRsTmJYPCFzdXB2YlBeOzs4VTgzQl56Q2YhWEg6JEs9PT5sTTsid11DSUlhYHtYYkhXaVlFfUR8ZWlROEV7NWpLSUoleltTT10jPGwx''@;'; put 'put ''YTd9SDxmTGBlUy5MZGxtWk5SRjN2NzNpVXZYNzhMKHRyc0VFd3VvTntDM3UmQ15pVmprQTtoVHZvb0VZY0RmRyZ1Mm55UV5IcnZYNzhMa2BhTEMrQD4jZntDM3UrQ3l6Iys6dFdPckJCR0UrODo6LkBTXnpyb3Bzb21WOGlHRE5ERGt0Z3w1djVKWW1deGQwZUFpfmFYRCpFZkV6QXcuTCUvdGMi''@;'; put 'put ''IntGc2wlOH5YfCYlZU8pJlQhfnpMR0c/OXVIOSIzREpGSThPe09bOU10dlEzNUJ7O114KmNbdG0uIytxUj1SQGlsIy9tM3tTY15FKzZLN0h3UjFub25mcW9FTT5pe0BmMGBeMmVDW1ZsNyNfTnRPUjFwOixLOlsxM280OH1ZOjhDa2dyR1A5NVtIOnE4R3diRXMwNTluWy81TVpPcmFYdHxyV1N7''@;'; put 'put ''OHtvWj1NZTZVWlckPHluVk1EIXpxPmhKXV5nc0gmIUIkP0coYDRSVjxnYHRpa3VfSl9eV258eTVYZHxMb2BxMm9HKH5CKDZaZ3o+UWk0JHdscUUrUFN2W3FnaWBkIl1ZM0Rzfl5bVyprZm9XekVXeTMiOyRwZWFMP3EyNF16OjgjXT1aOHwhXzMofGgqfXZSfWwrPTl+MlNQRndYeTVkY1oxOFNA''@;'; put 'put ''c0kjKEhERDYpXXZ1cDxNOHduY1FjV3t6JUBvbU5ZWVNjPlJWRyp2eDtJeyk7QjVIUEg2JUIjbEFDdUdTYXx4Y1EmTW1HbDAlM1FfbUJNVVcvUVMrW24oYFcoQWR1S1AsSXV5WSYkRWZ2MjpOcE5nJlJhJXZ6Z0VgQ0BEfSg9UFdpNlJvL3psWkgmc1Rdd1BjU0pAKmdnZStXSkA/Z3U1P0BVPWFV''@;'; put 'put ''ZntrZT4zIjNWWSNWKl1ET3heOTA7LCU9P28kRVspTEZSO1lLdWUxISNDfWV9aCZbLltIZEpwNV9LdXtWVVZDXnJueTZRUGJqI1NXVClzdVI3fCVlOVs1JjduPERYPF4zNlp5KVE9YzRWNHQhYVpbNkJZK1ZVZ1t1IipbUGg0bW1lMHd3L1E+RGsoZjIzK3FDQGFIPyJpfXh0RXFuMCk2Kj5KJDlP''@;'; put 'put ''eCZUU3UqVFZCOFtxTjsoPkpANHJDXz5aTnRNc0N9RURCaHcwXkdocXdWaHJzaTFIUWU5T0xxdXciWDFlTGlXe21YOEg5YHApclp1fHRKUU9iZWxyLyt1JE5vJCp3bEpeOEF7WGVGfixsbTkzJisscTMlUFNhNGxsNmhFRmZVNSVhVElFXXV+aCFOPH5mfl1qez1CSUgzP0RjYyp1XzV7VCErKXND''@;'; put 'put ''Qio6Xk49THB6fWY4TFBXN25Ua3MoSjBRZTRHUmJIMn0jIn1lUHxIV3dCP1tRRWwjSU0vWVRrS2hRSiU/MjU7KXd7VV1YO1hfeUtRZTJrUjxwe1k0NDVFLzx7UitkRlNPTHd3Ikw7KlVuOV8xYD1yXyUuYilxX21rX3AmYHQsPS5MdXFVdTQzb3R3Wl9pNEVYaUZVTkRhKEV7YHY0Xnlxbz5tUTd1''@;'; put 'put ''WHpPd2VUOFEjbVFEQ2x9KzwkOVdPSE1LJEVZIkYhZW1QVXcqQlFERVh3bEJHbmFXNmJEU0RXTkBQdiYmXkB5PitWZkdNbCVbRFQ2YUM5LGQ0TDMqLiJAZ1JaYUBOOTx6eDJmT0ZfXXUwKCJDfV5HZ3BGeFI4dmpbaSUzK3Rtb0g3OWBvaCsxZDRvPz5gQCsuRWs6W3Z3NGgha3wyKjhpMU5RPEBT''@;'; put 'put ''bjYmWyskeHB1Y291SHNlbT5gKEZTKy8kXkM2JGFzKHRwUGZbNS87aXAkYjgic319W3QkbCV1d3tzND5ufW9+bElCVkNaKWkzNmpTI3VIVkM8P0ZDPERzT25zJWlSJWswVGZUJWRjOmNnL2M3Pn0kT3lHcUdPOl5JWF9bMUNEWSNkdmNzamYvR1E8cWgoQ051QF03OTk6cWNka2BKUHI1VUs2TDhT''@;'; put 'put ''Z3lDL1VuOUwwOzJlUDZpNnNUfVovfjBpQiU3e0JCL1MzNls7Z3wvJFc/VCEmNGRWUElPS19BWEN+bjosTypvMjBwcEEpZTtaPCFrWVZ+MyhkKyFoYyVfejNOI3lAfjt4Q3N9LmVocG0lVVM7OSJmTHsiUGs8enVSVHImJGUhJEFXRColJCNrMEVdTzhRMyo4QyZEJkQmRCZETHdmQD8mPS8lJiJD''@;'; put 'put ''OVF4P0hsSWw8WkRkOWFCXW5Pc04zPCFrMEU1aUh1XnxdMi8wZTtfZiFxIitjVnxHKjR8ODduTGZwPVdrWTtBbUUkKkhacEhqRSQ7VlFHdHh9XSh0cUAodFF1alhZYkBGJjJGK3opOmErIy96TyR5LjUmOU9IVy8uekNGLilhOFs2ZWAhK10oS3hsbTRXYWRNVihaV2E9PmJfcjhvWzgue3M0QHI/''@;'; put 'put ''XUZmWGM6bUhIRixUVX1RQDw4O2FtNVtYOls8LHRuYG05IXxFam44QEI2cWswYig9OSE0I3UkdVM4IihiaG1zVCFiPkpnJUE1aCJ1N3MhaH1dQnI5ZTNdLC9SNnJVajVqUkkoS016VEhYZG5bWFUlbzRMM3sjaC9qQmkuKSU2YXYwTGJ+cWw1Q1RtJSUlLHglPWZtWGgrWUNjc2s5b3M7XnFeZUFk''@;'; put 'put ''eUNEe2oySTR0LlklYi96LnNybFg3azlgeUtLRlc8ZiMmO21zfWZqLy4zbnw2aFpVU2EhfFluWlVoOTUjSng/fUtzI2BCZ146XWx7ImJwLlk3NFJhIyQ1aHVXKkQrKl8iS0VVeS9GYSlUPHVwaHhAXmpndEV3SHYkQ11uJENdfmdFelF8SStBQnQ8fUA9XlIrUVN4KylgS0dYbjpZa0s0aGJbb1tx''@;'; put 'put ''fmBWPH1gSF1TcjJub1UhVFM+ajBTS3g2PHVwOCpscEhwdzRXdT9SZVpVMSklV297YXBpM2hESUgwR0l9ZkU1fiRPLmdwdj9LMiRwblV6R3Y2Uiw+LltSRlFSRG5HWFAzYHJtOyYyTGNZM2J8SCVQdWBgOHZjejZyVV08YEt+cjBHKF19KUtUOWV2d2U0VHhfKGV8ZnlaIVcvLFR0aHhTQnhRaSJ4''@;'; put 'put ''NHFTcz1eOEMyRHNWRGs1Q3VtbmQ3ITtAdntge05fMTElW0FaXW1+YlV5NWRWeWhzX0ltTGlNTDN6bW05PHg8Jjo9X3tPL3VmUD0zSHZAZE5YSmIsI34ocldnSm9QOVNyQXl0Ln1uYSlfI01bJXR+JFpENmsmWWxobmtWO2YxNXdBclhkJHRSfGo7RzE9WUVwTjN5VTRULk5GS01lZVlFaVh3WXNl''@;'; put 'put ''JiUvREg9aUMzZkBSYiolZSxdPypeenspU2J0WnJ9VDQvWFVmdywqYlVEMyVdYVVSeXBFS2NdclglUGU5O0kmd20vRHR2PzlTNHApdHR+YiUzPWd1LlZTJlJVI2E4O21XXyZqOz1GUHBzM3h2QGxLbFM3T2RmP21IOCVQKyE9dXkyZzkkJk5MOyh3P2UlXmExZSJYalVjL2tCaF8+WlIreipmI2c5''@;'; put 'put ''UDgrMWF2JTczb2RSYiJiUjJyPHtIeUxUSUtdQGBdYls0c0huMkN4ckFuSUtJITs5TE95c097fEJsOiN9JXR1XkA9azp7e3tRK3wyXW1rOCVBNDpeWVNFO19bSTVqVmN1fkE5d1kjJnk6LiFVYkpnODlRZT1EWnkpcTFvJVF0PTEidFIuZHhbWTZXRyh+bXZmeHdGZ1pma2hxamkvOltFeGJsQFFK''@;'; put 'put ''eElhV08jUW1ALzBaI3JnKy9lRHQudXMjWiV9Zi9lMSF8KzV9fWVjZTBKNC9pKn1lY1VHbylyc0NOVj8pfWtJRXVNSXhbKld6MXx9ZGYkYVBicmA0aGIsZUQpNyV9a0kmPzl1PDo4fWtJS35lYyYoeFtIdzNoYmxkSCxgNVcvUXFWWndOe3NpJGE/YnsoR3JTTiVaZ3owZysvJnxyX2thUTkyInFP''@;'; put 'put ''aGxvN040Wk1tIy53KUI1ZTBAeyhQeipXRmMsTFopQ09deUU2KUJGYTMsQHRvTCR8KzU8TGhzI1pMYUUwWFliMSZ8Kk0pZ0ZjempsMFhZMjBnRjplO0ZNNHQlOi40WyVNIyxMTSJCaCNVRTsrPVA/QEFYKV1sezxofEQrV3FJQX1wUUFDWShJMDRCbHxlUj5AOXVIWyZ9OEltYGVYQkA2fThJWTVZ''@;'; put 'put ''WCpPQXl9dWlIRGdsMT9eZU9SV1F2UjxYUipPTjdjRX59Zi91V1dXUXZrfDk0LzQpfTBJcWBlWHBRIUdNSi8sLlElZzZMWnxPUkF7ZVgzKW58T1IuQDl1UUNCPzcpXzA5R0I7P30wSWdgZVgzKW18T1JgYGVYMGA4fTBJOT85dXdhZHNhRTh8OTRkNiN8T1JOKmVEV2xtc2J4fX1mL1cxOXx+UT8q''@;'; put 'put ''ZUQ4ek1QdURLMCRhOjZtfH5RPEA5dXNHRE8rVzZJcEdsYUJ1Nj5FRytXZG41RTxpcGd7KV5XNzwqJDJhbngrb0VZYGNaV1JDQE0hWzh4VlI0REdjTmlZakddOHgkUWdNWFd6dSpMZ1pZbENtUEd7b000YSlMUkdjXShsI3c6ZzQzUj1gO1k6eXN8bE1IRCR8WlE7aWhzSHhEaSh0QzBxej5ATSVF''@;'; put 'put ''RXVzSHgyZ0ZjVCVkUEMwZ3g4dTd8WlFsWG9zSHhtcVMxdkBETjEqbXMwYTtmQG5TMWYkWyQ1W2x7XVA7SXhrN18+TSZ8dVIhQDl1NTczRGpVYnhzWVYmJitYKHZTciwrVyZJQX1wUT5AdyNUV1N2Z1ZuNDJ6fGBDal9rU09oRUN+VmxIOHBRPkBlQkR7dEtRQ3VzLHNqZjNzaUVTcHtSeVk/clhF''@;'; put 'put ''QSwpfVVJajV4dWNueiV9SXdYazQ8d2Vec2lDNnt2dkdiYEkwVEheV2JlYFt4JmpIflc3ZSxEcnd7X1loO0RRJTRlVzZoO0VjXW4kZjlqdyUvSiVbfUNKKUdyQlF3WDRbY0lrYFptRnJ4USNRQ3syYlZoVDVUV0l2cHFENjVdaSZ5Rkx7SGg8MmdYQi5NKFpRRkhlRm9PMjs9cTAzfmJHZGUxa2Rd''@;'; put 'put ''RSEieFojaHkuVmxTRSRLdzMkX0M/RClZcnxROWhmKDhzeFEiNig7ZlttdzgyQ0lSWjooLi5taFNVSUVzJkNWWDwxcEd+TXNEbyV7Y0VgV3RwXkdLWnMzJkMwLjdwLCMuLEhlb3Q4Xj14ekBBbjxwYCooTyxec0AzQ1E+O0NwfEh1XypqOjtDIlQofVNbPF1KQUIzdFRDX1ozbGlEUTUsXVNBRis+''@;'; put 'put ''QmBkdDpWREA6SylrUUtBVXRaM21nVTM1VTl4TSU3Wkc+ZF5vN2BRJDVTUFUjW280VDh0aWRlNyY3KzlFLDc9bWJUO0o3c2dxeTdZJmhLPXdMTFlxMT5fPnZ2fkNjPT8yJF9udDhKOWVQblBvNEF5Qy9oUj05aDBKdXE9Q0dSdi45d3FRIT1GdzovZjpBWG1xJm99Z29bQkY1eWVMJFVYOiwpTEA8''@;'; put 'put ''dj4uJmQ9dypPPHhUVXVxNWEoQzllKHV4dk9kI3RZcFU6UFk6dGZzQitmdGllQUdkOCF0T3NlVW1iPERyVT89d1dNO2BUI1txbUJ3fFNMNVVtb3deP2FXViRXb0piMHh2QUMuXT9pP15nZi8sI30sZntgbyIrJXRLUWIjY1RveytPbWE0aXxVJHomI04iUH5rUVBPX2xZR21aJnc0dTNgPGdEWWh6''@;'; put 'put ''LCwlb3c4ZDdJbUEwa3BEPEIkcFRrPzl0ITdienhXOG91fFBuTiUmKFAoPnhyMDpvWDxbKllCc0NVcHoyN05JNG5bQUEoMzIzcWJndHZ2ekBLPmxvPl18P20xI2VyTys7eDBDQVNaeEZbMlVScGRFKWg6PXN9Q3JkJCIvUWJjVWhjODBzdF1+UnxLM2RBTSZuUjRocXM/M0MvVDwyXntJYzFmPzRE''@;'; put 'put ''XVhgXlh9cWRGYXs6Tlg+e1lmdVUwUzBZYHk8TzVmbnJnPnhFTiVtUWVucGc9IUpIWTheZmJeR1V0fCojdTdbdWxhaGYoWkZiRlhqKXdYMUt1X3gqZW1UUFNSVm1PaHJUNVZiOWYiTyJfTnozJEJAVj16RWJGISEpX2JCJnBkVnRCeCRKT1NIU0pdb1FJVTZ7XzdxcnMhZVJEOEhBdTpJTWMmWzFY''@;'; put 'put ''TThkJjtXMjUqNjNzIVcoQ0tmQEl2fF5ga1hUXXR5aHRibEdQQVVtTF9PcSNwVGlpYkY7elVfJSNLRnlMTyV1I3BUdyMiRGI9dF1tJChyUCw8JTRLNjMiLnBEQzMiZ0k/NCQpfXBERWhjRj92Z0pNY2tHVVhpWWs+Ql9YeyVkTDx0fS8sKClpdWRCKTp0K0ovSztQJWZXSyx0QGVaWVdNOFcwbm87''@;'; put 'put ''cmYqUV9Kb1hUaTBrO2g6VmdNTDYzcSQsfkEzSVRifFpvPk95QF5zalF5SipHSkU4SkssNlhbNmo5UXA/PEA4RixpZHtYW3UzaHkiXipLQmE1YlRPZDt7aDp6PnBIRyNsR1ksXlZGeFIzY3BZKTVqfEskcURZVWhyT3s3O1tyZT0pKj9qeTtnVVYxOzRofWY0PXUufWZUXytWV2ZmVD9eeUBOJXhV''@;'; put 'put ''OlcpPzI1MH1HTlo9KHZHcV08dFZFeUU6ekAkNFlvPFdRUnp5UUF+c3ttcnM1YFolZF0zQ2A3Um1+e3lVPT1WTkUxbGlJTlJaIkwmXS40ai52SEIlSytCW0dLOXhOeUIuLCtGUHA/MTxCQDJdXlVoZCFsbEBDeX5qRUckaDRfV2VuLjdgZmUsdGRURT50XiF1PUFOQXBSbixfKmg6QiRKVFNfOyNK''@;'; put 'put ''VENfdT5LPGZiYH00dilyMnZiPXYyaUlhVWIzKEJzJThDPV1PMzJvaF9SKSpvfD5KLiFbJHhXL083Z0RKRDVtX3RIQiRHYzZiY3gwMCRrUkU/S2VbXkhvbEtPU1B8IUIhJF91PUAjVW0zJFFTfCRTdS9dJXlbSntvW142QWBdYj9yPH17QG9AMTJbfiZgI2dXTGhBNVRtcndZM2JlPFV4bWtmQCRG''@;'; put 'put ''MUY7PXtOaXtDKVJbKCMjYjl7OjAuXyhrO3RAcXlqZ3NYU3xLPmc4fDpdUnJhViJ5T0ZsOW1SZmxzIlNzJFh7ci98VTNmeHJKLldNcU5NZzx+cn0oPTNEVU9KQX11JC90PGlEW2drRkBmTSlLPDk2IUY7MFFCUC9vXXJbcWZzRExeKUQzaHFUL2lLM3hTb3E1MF88LGguS3Vxb0RreV1ZcyIjS1I1''@;'; put 'put ''cUdxXjMqbyJYUzRuMHpgSG4oRTk4Q0dWQFsxZGlwdTJ7XilVb3RreEVJTUwyWkMmRVorNT1IfSl8SExhJV1efXtnfk5hbFIqOGRpLylKNVhhSksoPWVrUDtZdk9GVWxpQ3xtZWkvKW5VUSx2L0BXInJQXygjS1Z5cVUpdFltaU8yYio1IVI6Sz1oJEs8MGBpQmpOPyMzS2hMbilGUXBzKF0weWZC''@;'; put 'put ''d3smcjM2Q11KeS5zMFZPcyMzcHpDLnlqWCVVeywwKTcyTHVDY0VIdCVuVUVFRXtDS2o9LnEwVDR+Q0sxYWFeUS9dW0kzK1NDVlgwPHpsZjQyOzh0ZGArKn4+bXIxMjR9MV0uVVV6PywyYjdKfFVdQDVCNSN9P2tAQncqRyp6cU4uUi8hK3pyNnNOYGE/MXE+NjdeeTJ8bTo7NlUxWG9dL3FmISVj''@;'; put 'put ''aXpTYjJkN0kjbmZGcVsrQiFwJmYlPmduUUVHPCJWT2o4OH0xbF9sP1IwST99ck9odXZnPCg5LnAsUTk4e1pxd0MsKTRxUFtQL2NoYGpPOFQvfG9HaEtSNSM0REg5bldwPSh2cXw/Uk5TMTBvclk1UG88ImttYUkie0toe2E6K0xrTmAhJS47Pn02VWYyTmJwdUZSO29zZ3crYmt+VEdTPUxMOG1S''@;'; put 'put ''cCx8cDlvM2lSIVhgZCF6SWFFV3Y1KWFpbEpvaWFgP20/ME5tflFWfEtLdHZWKyhYMylfX31TYUVDVF9ubnpvLGNpa207R0lxTUNad0YvWG01K3VaN0YoR3lqLHRvVixpNkV0X3RTUGtOUE4kfF59PyZvdVsvfCltYCphL2J2Z1M9TGVwXnxZXixxYmkwTn5ObUxzZyYqYGBPW3hCZn5kPU8hYF16''@;'; put 'put ''eVFiOjJzVT0yQS9lMUY1PGpuYSNnVl52MDZbSjw8TFRNI1FDdzB4OjMwKmFxfjwrVVtNO0RTb0VLTU93eFopNzA2SWFVJm5scD13ald2P3o4V0spVmVCSm89RigzaHM1QUcubEFIRDhCSERaYVcrRU02fk5vXS8hSiI/Q2NuKyF8eEpbaitnbUc9aWtvXS9aZkx9eTlbWD1WPCFOKEsiKnJBZD53''@;'; put 'put ''L0t8Iy87KV4oMXldJFJ0cltxYzZET1JDUlpiV0p6OS5wXmdobVZZUTNCTygpT0glJjlnaG9JfkEyc2p0T353QElhJipodyNDdVY0Kzd7N0tbVj9yemVLbjdVfiZLJjx7QT4sWnJgIi84NW9OZGlvdUpoSG1VIS92fEA0bHZ9WHUsbURHWG5TJFZffUcvKykufFNCLm88TXl1W0BwIihEZV4lfFp4''@;'; put 'put ''LkV+LzthaEk8Kl58cmxDJip1WjdbLyFGeTVdMCksYDx6PXdacCU/TUBnOTBiKEdxe0Z5X3Zfc1dzQWc1RXBldm1GKDBtUF4pWm9rQlUiSjBuXXove05aV0cse09bOkVJcXZsVnw3enx8JV0jVm1MUG1VPTBtOD1zPjBtcz0wbVt4em4sMEs9JE9PZj56SVszX2FwPVp2T007NF1vbzUsWDE9Q20s''@;'; put 'put ''YT9LO25oSGp6eDRmc1FnOWZBPDlLO1MoJm80NDkkflMlaDFRfG9efDRDI3ZwIiUsJlpzam55KTAsfXBePyJ3Tj8iOW1dQ1tdbDYhbyo3bj5nUHlGJl5OaVNzdmxLIkRfUDlHfUdzLE43VUpaWmV9fVI4Rnt4QUsydjhyMTdVXjgzQC54ZXMhfFV0O0VkKyhlR15iOHh7OTtacHQhIXUyT15rYjhe''@;'; put 'put ''Zyxedip2SWwmOn1NKXZvN3dXfjA1SUZSZ3ZNUl4oLk13anJIXntXZEdhSWJEfl89Iz8+OXdacHx0Nk1fPEIlODkrOE0rSykvfmxySGcsd0JuPklMYERnUDlrZV8veDojczh6VzR6PkJ+L31vcD0oanRXWCJzVlo9e2I8WjEyX1czfTlPPlVObDBkfikzbHM2c2xaXkVTZWEjMl5qWjw5V1Z+VjEq''@;'; put 'put ''OHdtemYmMjxbPFM7OCNSSmlGQV5kPkE8R0w2Rk09QWgkISp2O0BeKXFgUztJemNrYzt9RmxFYDEoQyFHW1thdEZMdys4U1RTJT1+TiRnLDEpMXtteTNWTWdUJmttVGpNJVU6PlZlK2R6TF97fTsrJTxxcj9hYykjITU1fGB7WCtCe312c202V2RfdHk5JWtSMUpQY2lfKEMjMWRpP0JbVWQyfVEx''@;'; put 'put ''K3wzRTBYOGd9XipPYUdeLHcsOS56d0YyZGpGUkZtUkF3ZX1ORnRveDRhKD8rTWMxYF9EI1ttITFdb1V4Q15rSUZ5fCpHS0g4PW9ONTxCTGJBZW91JC42ajIxQW1zcEdzfUdGU2FlQnQ8cjFvXipbdH5fKWlFQjUiPTs3QGZXWzcwKTZXcH4vQzhnSHJlPCNFazN0ZCM5KS5FeEVrPFtTOS9Tbl5w''@;'; put 'put ''Z317S3pedUtgNmJFa1YzU0pJZjUhLHJvZHhwUCR7SmZmfGpSe3xnQ0lbWz13MnBtbTQvLCslVm9LPFMxJTlEPXx0MFthXXcuNDlhL0g4Tz18JE17OnhMbHxvQGFmQitWczlmS1huRFpkazdhPi4+P2l8dzgkP3FxSkBkJndPTzRTIUpdYDR2Zz8kLHdwfUBEIUJTemtGdzh7TDYqPmFqPDddYzpq''@;'; put 'put ''KlI3bVt7YXRqUW5kP1dVTG5Pe0Yse29LNHF+dyhUbmFJS2NGUDVxWT4vb3ZIRzRgWjZ2YH1+NXApLz1sPmh4PHcuc2ZfMGhPOzk7cTI5Qy5dR1E8MUU3V34/eiImRkBvfEFyTDBIWyNUXTNLZU5SY1dwRllONCRVaD9rQE59LC9xQT10al8zS2VMMzs/MWJGUDAuczFBakxGWC81NkBmJHAveyRL''@;'; put 'put ''TUksMkgzcWoxK0ZSeTEwakluUzwwI2pLPkBOfiRJI0B2XjQ7JF94aj8/SkpSRXx9NzM4QFMhUDBffTJSNX19VGJbTyk7OiIzdjwia1VrRXhrMTAsaUM6Myl3REx1PFdiQVNYZ3RAZVA4V0wydWc7MFAxaFlMZV9NZSY0bVo8aWZdfVk7VVRlcWUzRmxDa15FfSVYYD4ofHI+fCVTeyhwSzl4YDRY''@;'; put 'put ''ZyUpeFJEMCsudDNHcXxydlY7OVgoVmBBRWV5emVMVWJ6R0ZUNCMsY3BlM2Jed0huXXc9V3E0bVNVSFY7XSY9TUtgbSpTQyMpTEIvLDhuUFFtcVtsNDlyRmxXbF94RHIsYEgqYDtCJFlXXih0eD0pQlA8bFRwT2xMIVh0OnNsOH5lYmljaSRCcWBxcEBURDNgPkYhbXI4W01YQyxsVVp1aUcvS09Y''@;'; put 'put ''JkM3XXhya3Uib1kqKFZwUUtMMn5ONH5ASTdzT1RRZThPbGxRVGNrbEwhMGxIOG1mfmk3fEQvR1lefipxO2ByODV0RFdeeUkvWDBaaEsvJXZbcXg/clFRfkMxSjRBVVlVVHUkfEkzOj1zOG44Om95anlILnNpMyVrITFCPCYsOi9jLGwxZVBWPVdlSVB9LDlzKWAyMCJALDhSRCpER1AjYDJdLmAu''@;'; put 'put ''VzF1dFFvUj9sdWo9cyxLL1pBRjFPOjY7c20kbFV7PmkoSys/OF13Mns2bFlWa0cwMmx2PEFwKnAqUG5zKSlQfXUvUWQ5NSRZcCFvJG9PfUhlZGtSb3tJTVshJVRSY3BwbXUrcXk8Z2pXKyhscmtvSnxnd3hwNVUwVWJoNC9KaWhxYXBYWjlleWxeW09Afi9HckdjKzcoKk0lX0ZRPmJsKmZXWEE3''@;'; put 'put ''TXMvfFo1WUdeNjVLOz03aHJaKH5ie1NeI0FmfEwlV1pPYmh4djx6MD1AVF5hVV5xQy4vUzU+KlZnYXdtWWY2LiJvfSZiNnVUTVtLTzRLIkt9JmFKU1VYUVUxZ0dvcz9lOl0jVSpzWHljfXF+IU95KjR7TzMmQl5PV2puLi9xLDk9dF5RP0AjIV94YnNwQlEoRUZxbjY4cEQ+MD1sTFpUdVMrMCV9''@;'; put 'put ''RU88MkhpMjkyO2h5bG5aY1VdOCZ6OFE+OSVHYVcrVnY3Vzt8YUldRFFsS2kzfHdvYFgsLH5qWlomWCMhXTJIL1I1UDN6KkwhXUoiMlJdMUovcTVGN31ldit5azoyWSUkWnY2QCs5Oyh4JjFjP0R0dmRAZVt9U3B5MnclVS5xOCxmO0VmfnFIL0ZdcUFYUThUWHZrPXpCUHB1MVRiNnFFWHwsNnl+''@;'; put 'put ''aWF4bytfXnw+PXwvRjorc2RqWHxWV25bPFNkLm8oNnR4WDFbKSVKaWhPfGpfVHBgQmU0YSMrTzFzbU9FaS85KiY+ayplYWBybCFDdjZvUVBBLyYydnA1JXxXU2wjLGt2YDZyXSxSZkpFWzh8MjZ9QyhoL1B9MyIkSUV4SXxGRStHYVlVLE4xLHMzeChsOitydSYlI2lmX0RvZ3ZkM0MlfCYhPD1D''@;'; put 'put ''L2xmfExUNEsyUXl0SX5gOldELyRle1BffGAmSXtaSGl8OXRaKTR7fExCK3pGUV4zb2RtNF9LVXhPdWNlODxDL3NVI1pwU34xQzYhI28+QDk3SFVuV3NzfXpMOFIudSFRZUJ7c1tCajxtfGFXZzx2dHx5bmJufHZHeVJ7diFAW3BCIiYhUlUvNTZfRlt9TkU+RlZRVyxkPF18WiM/LkNiIjNJSCQ2''@;'; put 'put ''NUNQfkpUIV47TktQXi5jWz5sPCFdS3VIcHp8O1sqZWR2QHA9NCRQdXV5PUV+bigmZ1RUISRvYyw2fVBVQlomazhnQF0rJXZRRUM7aD0uIX41aihfMj9qODVlWmFjKFR9Pj1bcHtxfGslOEg/V2BpcDEuST1PJnQwJX1XMz1PcSNGI0dedVlRL25xRDduWXg6TlcsSyQuTzUmfXJ4UT8od2pXRzpV''@;'; put 'put ''KE5kUmNQLixZbFJ+IXhyTm4sUSlVUWlkIz1pKks8NlMxPjhxPz9vezV3UTc0c3h1X1RUOnBSOW4pYzIoUjA/PVVpXyJdVmxmdFUyPFgsQ3RTLyw9YiRJIT1KdkpGSWQ7dXgvN108PVdSV21BKi9Ya1tebThEODNwS1M0cypKZjs4XnwkZTE0bn00Q1hGS15HKEFgVWp2NGwlWCFrViZvcThCT2A6''@;'; put 'put ''NDJFSTlIQCluVD5NO3lEPH1HdH5xTl44aUE9eU05UUtfOjp0VjtIYXdheXVXZiU/VmwzT3h1JTRpRm9xdmZDPUdObTp9UXNNeEh+JUVveHA9KHI6KERrPCk/KmV3RC5FVmMsUn1ka1UpQmJHazE6WzVWVj0/Y2g5ZXV+cVNQO1J8QCI0PGd2TiFlNmd+cT0lOF5WaHlvXV5JO1FyPHg7V2w0dD12''@;'; put 'put ''aTNwOTxpVX1YQEJyNCM3V0pnODMvWzNOe2s6fn1ZeHtKYFtRbnV7Pm9CMFI+Zjk4SFdpd0g8Vn1eQSF9R2Z1bHNpdVhad0ZYNH1Oen5PeyFXaGk4Q1NEWVYobjA1LjxULCk0RnQka1p7ZGgka1FMdE5tJU5mcyZAcmI2YyVIJXxwSkBJajZIXi5VM3IxPHRnVkVXRWBncz0oQ3pCTU09ZHVoUHk2''@;'; put 'put ''OlVYIXZOfVZRY2Bla0JiTFZSIXZfMmAwejYmWz1GcTRgWyl5KkI7YS5JOUt+ImRQeGlnK2VHNUJQT2BjdCMmWmFvOHJUL2hgQUlTdEY7LiFGZyRNRmdyI1Evb3xrND1NP1dNSGpYc0lEYTJ1WGQqQXFAJnZrQ3J5LFhHWDdpLDRma3heWTM4Qm5wNF4yNFo9NGVMQFRpeSRzQElzOEViP3k0Nngm''@;'; put 'put ''NF1YQUpbNDR6Y08mWjZkQUlOPHIlUDpFNk9paTdEcGExKUwxT0N4TXpGTl1scSV4OEp4Xk1+d3h6RXtMQWFffmo1YXojKV1iLkE1S3lwZUFyKzo7QiNbLFBPSF9PL2ZdSmUzZEQ8MVBjKz0vOWB1UygkemdmRHB3Sl5EOH1Db1QjaV0ub2JlIkkrZnslLCxKcm1eQ09uTjtAOGAxTlMvOW96V0Fo''@;'; put 'put ''KVtIRXdqazMhanNiOUh6RjJbOz1VKFp7TUZZK2dLKjlkXyFoR0Z6XihPNTl3TCFbSEY9bGJ2e0YpaVVXM09lQ3MvIUpmKmN9ODEqSDJKb1EkRHRWSE8zN34xejF6MWwjMzdRZyhMRHg/dXRZKnkoQigodilNUU1RTVFNUS5NY0diRVR3WjZTI2VNdHd4fHM7Vk1YeCg/Nk5kdztxS0w5SD1udl1b''@;'; put 'put ''V3VYJGdQe3MjOylzWGY8N2F2aj5Ee054RDZbP3hONWYxelZNQ2RpeXVfXz4pJldWRGZgZylhZiVpN3FDJWhnbU44W2RPOyhwdGI5NWApPm5UWHhZNTk6b05uaSJERG02JUJ4KkclLDlIOixjcG52LEYrRD9XM3EmTW1veWg0UXx3aWZGO3hzcCVWRlpNXmUvYWFwIltYPlshQWZCfm1OOmpSPHxb''@;'; put 'put ''ZWU+KV5AOX0jeDY+RUZPeU46MmZVekMpNC9xYFBfZkRVUyZ6RUpeQzhhV055d18jLDQ/cmBnOzk6I2BpSkQybHVzX15oOUxYSEk8bF1qLDhpUm9qYm1bV2dgYSxeWWg5KWl9XSQiaz9QJjJdNWt+RTZRRzlVb15vdFliRjd0I2gvOUtANjM5VzcjJmVPLyMxKy42UTU5ekRHQihxUj81XS5Ecy8h''@;'; put 'put ''Snp4Lm8vNCgzMDV0c2p7JD9zNEtGdnV9cW45Y3prQjI4U2c+XV1MRnhGe119a1RNcVgiU3dGdXVjLCt2PEM1QztUdls0d3N+fmBsX1h1JDFrfHQhV2J4OUI+UDVZZ1ltT2pISUcpQSl3WmwzV0NOJjFDaUwmW0Y2WWpMP0NGZ3o0Omx8Xz5yYFN1UEdbdUUkdT9ALGcwdDYuK09mWn1MeGQjV0VE''@;'; put 'put ''KXcsN2c0eGB3UEdHb1lJdyNtZEo4dyFudGsrezMxQDNLTDwvL09ObUs1eCpiSTh2MWtWOFo1Ykc4KF1faTQ0OmJbLjZZV3s8UCVaPWFVSHJvZ05JaVtkYjIxU1BvZWJZRFkySGJAaF4jVV1fIz9uZXZpNGd4TUFVfFdWVXZnTGZjO2oqTDk2JXg3NlUlPCxYP29zZ2dVREt2KiU8WlVJMGl4eDE7''@;'; put 'put ''XX0pZm4yZzFuSSx+WUVRSTJtIz1deCpJL1FaZl4iNyNkUkxucVArMGM7I1JWNyhIOUd3YkV8N1dudkt+ZFs2RSV2YyR2V0g0X3dCLy5AW2txV0lgdS8jNSlDc0c5RjtudFs9cSw8SSNDOzdLP2BGLiRDfWxCSSQkT28iL2RdZHZLaG5uUExldkd1LEEpLDA3ZDNMNDU+RUlPT0NYQCpsJnAhS3tX''@;'; put 'put ''SnlPYyspS1dZV0pwMTlJJHt0WW5IXmVmV1tIckFIRW4zPXA0Ujt8QHBUJWYhR3xlYio3blBmWmVuViEycGJqayVHPDhxZTtGWCU9REdQUG5CJipRfkRZK1Z3bDc2VUg7YWRbZHVIUFUwSl5EJWUyPkBhMVczQ1F+NT15d3ZjRGVFQE0kdTR+JjtxclVfOnEyYn1BYnNiZDQ7NHApV1NLZT8sPUdX''@;'; put 'put ''Qjw6Ylt0ZFA7NTQ7cEEkNz88Oj1iWjhjKSpIMnNRVHZqITtBajpvKi5VRDRtdlM2NEVdVnkqRnZsaDg3Mmp3KENRYUVrSTNmUUd6YCYyUFReUnlvJHUkVW1xb1QlVVJWOW9jX0UjWypYSE9gR106Wk90WGphOCRlUWUsU0Q4NjhwMnNGWCRnUHtoWyF+RDxzcnZEIVQuUFpkeT50ezxudC4+RjRo''@;'; put 'put ''cSI4fW5MYVchRE4/d3ZdcUkwbVsudUojXTpmbSY0ZHxwSEB1Zn0lW3EvZXJncWJELF8mO1hCXmxAdmgoOUI+cnMjMEI8UGY0Vz9VNDJyRVdeWndEdCwpJHhRcH5+cVBJZmNVU09mUyhxUkIoJV8qRHZsbSU2fVU7IyZLZHNZVnU7RFRtXlVvS2JyaG9QcmlOIz00V21oflUjWExaaDkvZDleMTBH''@;'; put 'put ''SG97XWJ6I3EqPlpBNVk3WihCV158MEYwMHcrUXFHUGE4VmpHNDEzZHJRT1thfn1uZV87N3VlUjR9KG9qTip+eVRAaS4meFglfVtMQXAzP198TStlU3U+dk5+dDxFP3tvRF9bPyJeS248aDRke01fcyxCcCZFUXZ3eTFSWCMsJVVPJGhnLDFZY3FxPFRnJGlvSWRIQ0s7TDxfRE84dW9WfklLTFdl''@;'; put 'put ''TTxtWH0zR0JmUlVFNnk6YnImblZmUDs/e1VEViRrT0Q/P1NGJGhfe3Q8P15ITiZhIVhmN1NDKmQkWXYoMUFUMlpGRWd4TmV1JTVRcGFvL2pYTDtOIyIvbH1BViU3PEFyZnpyRjshWlBUfVU2ZDdHPF51d2gkWmxaREM3QkVHczRJRlYiS3ghR1VhaFBWPWpjJilHXSRuIUljI2Y1T1t8Y2g5QTRf''@;'; put 'put ''OiZ1ISJ0WmAvOFVRRlFPQVJHRz48ZClbXk9zOSI+IWU5K3V8QkdIUVV0WCpjKyN3SEFEbysqTUlVJWxUdilNYWUpOkFyXUx5SmN9IitoX2UofjM4JU59Jnw+RHJIXXAvX1UyO1hySDp4Tz98IXRlbHVVQ0omXng7IUtAIT9pdFVDMnJhZnhdPXMrSX01SiRHcStBK2BLaSUsXnxSUnomRCRSUSVI''@;'; put 'put ''SFghdT9lW0I9QGBtamdqVzNqfHJuUFRQK2A+bm1fIjkyPEp2W3xndWlDJHolLHVNSVF3M2duLnp0NyJHfGIpRWpOPX5yLjtWc18oV3JZcX0jbURqW0U7YSFPRlJpQzFzNiwkdzpATCteJVd2ODp1OUJ7YkJNblhRfFdHTllFNlV3aE9KbEl+SHdEL3d5bno5RkRGLG80IXByRHMkIlEjNFA8YmZ+''@;'; put 'put ''V3JRbUt6Lz10fEF7KlAvbyxvVU8mWWVLZSFxN1smMG1XcWBQMXQ0RUlQdyU6MCZhWmMjOkJCQzxvIUc3QjZJUjlBXmNON0QhVDNkdCpxMSt2Qzc5VzVqWDg7ZDZxb3NSSyY1VG5GYm5jV30ka19UZTQ/UzAoYiJNfDUxSS9YRzNwXUN4UU1FQS9ydXtJK0xEYURPYCsrL0A2MzEqa1M1fE1YSylG''@;'; put 'put ''eFo+WyJ0RFhOX2FXS2t3fCtmUnNBMm5vYkkoRmArLm84RlBQYXA9ai5IIllJanI/LlE+LGEwJkJ2KjtIMDpITzdbem5nV1t8a2d1YD8qKGApOzdlTGUuTUZsRVApU3FIdytobmwlRVs1NG5xenJkcSk4bFlqa3dGRU43Knw1L25nVVl7e29ZdWI4VGwxNGBoeSt2dHdIWixNVnpSJH59UyQqZClM''@;'; put 'put ''OXB4NyVjeUkqNlFjUW1WSlh2fFMwXyE3Q18odiR4THhELkVEVmBWfFJ2W1IvfiZ0KCI+LiVffkV8SjROITImazReTSlPLzl0IXgxfWwsK3lhJUd6b1E3OX5ZeGpmfXMiKFppMDUqaC9EO0IvZWUmMUJ2X2RRaXlUJiJ7KXVdRXQ+MHB4YTtqajhGfjB5bDJnTFVFbTslQjBAKSU5aDFxMz8oVSFo''@;'; put 'put ''PDFXX3E8WG9waVhfZ3NzdCQ+PVcmfiU3Mn1XfChPbGtbKFUjc3BFUi5RXmhMe3s7Wn1zeiJITXFHXnwmR15IMUtxW10kVnRwYmMlaG1ee1QzSHElbmBsXStbQj4qfXpCXkxoc0p1P0ZhQVdNWWp4KFNESUc2TzNYKixBNCMybnEsbis4QFc8XkRaNUl6RH04SihTQkt1fl1WfjQrdkh7O0h7bk13''@;'; put 'put ''ViJ7MUw/akg/Wmo9c0NfWEN1RDZIZTlfUV9gP2cufTV2fVRgS3B8MEwiVU5APnZzWD9ePTlgLEE0TDI2WW4pdW5Lb1BEemY9Yzw/R2dHUzh9ZF1hfExfXVAwIX14dkB3MV9qfE8yLzl+TykyPihfUXVPXihWPV1fSHdpcCs0VCZQZUNMb0AzVyt5VSQ6QzEyW1gqc3B3KCl4Zj9wfCMuVXg1IVQj''@;'; put 'put ''ZHMkMnh9aHB7O3NyfF5+dytiUmQkcmxGKi5rNHk5XlZAXU5XSD8uJXZxTEcmfm5QNSNYLzA5WCZlTWEwa19ePT9FMCE3QVJYK2h4ZE18XV0lQVBELkl4akpGUV9iUHBHR28pKlM3aEh4NE92aGl4cExCPFQhbXlLTDwyZipZOXJdeCtSbjZ1PDIsQz5SLEE8PUA5fnNLUChUKVpqUUFScTFLTDNz''@;'; put 'put ''fj5ZYltqLnhHMy5JPUFbekN7O10qKXhNJDhwVTcyL1BRUDJ+fWolRFVPZndWQVsvS3hGVkV+USZLTSRrfltaYEYwc1FGP3YyMz5bPUlteENRcHtFaSxoMk5gMWFwbG9YUCRhVz9EZnhleiE2czpbZ2hPNGg4WzJUXVpxbi54fnRnYCo+dndwYFZjZSQva2xyZSh4ZUY2U3VUPj5lTW11biJSTk1t''@;'; put 'put ''STcudD41UjpWeEFzQXBgbzJbUDRAVkw2I0JnJmN8fkdAJW5xLylqTHh4XkV3I2t5Lm1jdUhkR1pgTWwsO2BNKHt1NHJOIyhrci95YC5SQ014MHshWT8lcWZocSMoamxUb1E5cm1DMl5BcVshP2FrWWsmcXVCSEVZd0dhK2NtI09XZ0AjVXdNU0JeMVkpdm5pPiEmdjEpaz5hO3BweEw3JiZPRURG''@;'; put 'put ''MTk7I3lkNmZTZCt6YXFHZEwrb3JLVXZ7YWFkREk2Si9LezEwPzBtQSV1PTFeLCYyXkJAQW9wMmBtTlBMWypVLGBrLlV0SGpUckdDelImWlgxeGhjQEs9Nmdve0JddUlqTSg+ZSQxbT4zL2B3aztwdXIvPjBydUAvNVMzW1EhRG19JDJmQDQ3TV91fWtSfGNrVXNvQT9+KEQyPFMmL3IqPDokWTdS''@;'; put 'put ''U3p0RTEqMzYkUzg3OUVBLHc4NkVwMXhse203UncpQ0djYG1ULnkqY21zLmo1eDEpayZFeGtyLnR2QFJwXT8+QFdsZzBlLmVkNF1vfV9pd3wyXi9dbiZwZjowN3pwNSsoczteIWIuQjxDZ2NFa05DWGR4cXomaFIhJnBJLCEqXyFvPGlKZjwpWmkkdCRqV3hSNE0sciYld21VO3pRRTNYaG5RO1Fi''@;'; put 'put ''UUExVCRHPWt9NmclR0t6SFUqTUw2KTsyZ3opa3JkJE59IkJzTkg2QTBtIVhOPSRUUj0kPDpuampnPyRAWTVieHhYbkM+ZXUibmlUPz09eEElIUo7Rm9DQU47cVd4S3YhJWFpQXl2VSI5NSZoIVJXX0R+akFTbHc/a217LypmbF8rNz0pRTFKZ2k0UlZYdXxxZFMrXV8iPUk4fnlAcGgwWDBpRj81''@;'; put 'put ''QG1LU1VxUkV4bix0fURdTV5UJSsuaT5JfVJEeXF6RCtOLD0xVCRBJX1rcyIvK3R1WC5kSyJOS2hlWHZ3bHlLM3VTR0ohNVRyOkAoT2pNdmc0KUJAY0BDW0JrQVNTel5uQVN9TXJ4WldmN1JVYGI8V3F8ZlMjRzYkLDp4eGNzXl1gY2h4I1F0Ymp4L3ZSYU5+UChUWFR2NSZfaTd6X0l2cE01KixO''@;'; put 'put ''W1RJPEFfX1VYO1pJS2tgJCxKbXkpN1FgajlMJGpvYV5dbnhwcVtnXmUlR0l+KiwhWzAsXVdgNn1ZRW5yRklhamhsM15EOjU9RVl8cE4+LC4hI1JUeURUYXMoLCE9cWRPTGt8Z2xHNGF7emF+Ozx5cEdDeVgwUz1XWHN1NH4wYTssUU5MJndZWSp7IU87NT57cVpCcVs6MjdvbS5AbDIuMG8rWXNF''@;'; put 'put ''Q1RsJkVkN0A1cXRNYjdoXS5XIVM2Kz08JmBdQGxXNEt+Uy9xTks6MGNmI0JiKThpOENBT245SzppUD9VX0M+ZGxUMSxkPkY+UWZCKCZiLjIvQV9bXilqXUJdQE5+czZhemVzWix0fWAyfTY4U3JaZ1pRRXBxLF48PUgpK15qS2pUMWUoSllmOVZaPnI4a1c7YVJtJWxgYVg1ZjtHbyhSQHZCNWZl''@;'; put 'put ''ODYsVFlIVmRQeSRFOzFJbjFjWk5oZG5kek4wbCVsKnUvfm1qXjwjPiohKE9OayU9cl5Ab2xoTlZgMnxXYG9AUiZYblZ8T25EOVU7dkdrQWssKnFNc3dBQHVjeCN+MUsjTVUpcGJ8Lz0mYkIzQzNQZzkzUHBTVFJSJm90cU8oX3NxUVNmVmZ3WH12WyVZMVpAX09xWy49QDYqPnNCXyljIyp1T0Y2''@;'; put 'put ''WTAqIUorbSssMDljKComck0sfj0qK1NmU28hISVpe113STBGSHRiYzVSZGVFKzhiWkJIYXZPbk0kKmQhKEkoVTJ3I0x9cHVSbCw1RSRwZyxAZ11mMUNgIUBwY3BHMm02emlQIVhQV2YlUGk7ek9FSj1pT1JkRS9HYDVYdm8seGZVbUgyeXt2XlBrPlIiPW5hRjxiY3pgcEdlKVYkQDBxQD5sOyVv''@;'; put 'put ''Pks0VTBUR3hEckcxNm9mOzltZlosNXBad09oXk15OFg5SmZTO0JpcHAmJTUsbzlUSWh4Y2g0bCg9fmJ7I2AmK3VtYCMpKytPOWdxckU8PzF2NixAPS4wc0o2a2wsUj5VKDRYcnw1PXU5aCJmPlNoTHtiQk1xYzEiLC97RCthSUxeNXE2KmVnYng5JDxAfV1KX1pXXyEkOEd8LEhQMTx7WUROR3Zt''@;'; put 'put ''TC4zLmhFMW1ybWE7UXZXXnx0XixTPlo9SVopMS53LEl5YFk+anhDel1GZEUpS0h1V11ZfEZbKXxPQ3YyV1JNRT8wbyxeUl52MSlBUWNPSHU0RTozPVc7NlRTT0w9PW9zT281QTpQK19rPzRmYG5oSUcsLlMqT0ImQWgsbSwoWW5SbV1DeFFQMTh9RFAmOzMwKlZneTUxYVhRQ2QxKkVQPXJENz5Z''@;'; put 'put ''eU5GKz5HS0x8eX0rSW9OPCFFbTZKRi8ybiE2ISR7empueHhkfnRUbVlwKCU4WUMsYHkyKz56Xk03XTY+RHRyOXN9XXMhJDNCam5gSzl1c3J9c1BxMVEldTMkKEBgRFowUTU1VSUmblUwXkhzNHxyTFlGK35eYiUyIVh9STdOS2UvKktgelVjKHlCLzh2PDtEMlFlcn1yOixOVH5+eFp3JlQoakxT''@;'; put 'put ''TFhRSjw6eTZxX0ErP0VwP3BWI3V+WURBT2ZaPENbL0kuJkpxPExwcygsNnwpfFRjeF5bazp5eXpdKVUhcWh3fHJ7PDYhVlgxJjNUW31wc3JoLkZtTXp5ekZtU15dYkwkM104aTh+Qk9CPUA/OjwlVmkuOzs+Tjg7JSt2PEIuQWt2Vk55QjJ0RUUyQi5BazhlIjI0ciJWRSNhJU87fHtNYShDbiRk''@;'; put 'put ''JCxdTz0wbXJvTyN6QDBtY2oyW0w9SH5QayQmYTheczNTe3JkPzByYEkzK35SdFV6VThgVzZKcSZgQ3NCK2hafD9oPkBmcyNXcHEvTSVEK0FVXiVEYjdqNyZJMlYuKHpyNiY7Pmw3VXo7e1J2QEFzMSN9PzVCfVM8cC5zTndFY2JKYlUuTk9UVitCQGkuWGkyQnRhVGFbQDkwPDAqTmNIKllkWkMi''@;'; put 'put ''dihgTkMid0RlTHZaaSFsNToqXkRCKzxCZUc+d3JObER+QSVjNTEzUiUqW0ZDQUFBQUE6Q1BqMkFBQS4zJWxjezw2ISEzVCZBMmh3QH5tUT9CQzpGbGI9SDw6YSEyeXxpM09+NT9kMDI/Sn17V3s+VXZqN2pkQ189fC9+YDM/QHl1aVl8ZzNHcVRNWndlalBUSFMlaDIxVSQ/U3QmQHI9VWZhOHtT''@;'; put 'put ''IiNLMzByZEprZExCRGZ4YUouREdPOklsaHtSaTVYKHdFcixUPFghdyVRUWgzS2pwaHcoKU8lcjIxYkVve1VIPkJsNkBDXkB8QEdoRV40fn1nc25wY3JiMiUlfkBUOiV1M21zbzRdVFN4KldOdjRSVWkyZ1BZfWdxKSpuVyROb1BpO2lSTzhXSyRReTlJeWYvO2hROCxeRU4+OF9GUkc9P2sicT1d''@;'; put 'put ''MFAkYlAhN1ZII3VSW2V8N3U2PGZOWzdlWXZvdkFKXjxwZllUYm9FT3l9MzdsVjMrQi4+KT05Y1ZgYHFIXV40Oj1HcnYvOi88JlAsNHU8RjoiYTlyMHZETUI3KD1iejl4RFt4RG58UTs/I311L217WCtIKGtLa3ZUR1pZT0s7RylpY0s+YXg0ITl3b3F9JS9EPyZmb2JnZHwuMWdiKWtrY1t7ZmtA''@;'; put 'put ''amglR2QlYmRYez9zUGAsWD9+SiFPVCU1bUQ9KW0sd2JWYF8uQHkyI0N4QzhZaEM2Q3kpKk1rOmkwPXBzJnJrXXZnVU81RGZqOG97QGNGQHoxUWY2ZzRNYSUxNF5pNFV1UnZ0Km0qW11ye2dHRm0hI0FjfVBjdkdebjslQE5HJD4+NWFbTjdLR1Q1UW5eUDc8NClTJD9vbT1OeTN9US9Yb3pHSyZJ''@;'; put 'put ''cWkrRCZTW2Zbb3xGOmdidyMsX0Nxe25ycCN8OC5nTzk0Q0hPXkdlb3tqPSF6d1c2S2F4Vm9xKmZ6WC8pTiY+MlhhUUxfb3xqXkBrWXtrJjJocE8pXV9NKWFKaG1WRjBlZTVffGlkS05HTmkoKFRJYFdjUk0vLCQjPXlTKDFkTi5dI2RgZyVrSEZSdX1IUXd8U0lwdHAhUyNAeCxLLjI7d1s8W0Qx''@;'; put 'put ''OmMoMFImUHEifHRFQGxzfVpCMHZdXj1qPmhpW2YlTGVUQUVIXT19WmtRdj4wZkp8eUh8Kz96QDFwbGl4c3J2bTkrWDV4bT4xVnxqS1FdLEt0eC9HJF4xKz9HflovQlUzQW97YHc1ZiM2Yk5YakRZWzxfTm9MPGVTL3Y/PjA7eDo2Jnx3dGs5L1RGKUdXazpTNVZudDZdRnhuYSIhZH1wRG9dcmhU''@;'; put 'put ''RVZoZk8jPl4vZn0wIWYqMVNgTDUhXTtobUJpfiIlL2YzNCElQ3ZuQXV4ZXNTNE1lMmF6Uj1mb31DLmltaXs3UDEufiZOQHJ4W3c9ZDREMUV4VU91XXE8PW5wS1p0SiRhVERTeDUpI0s9Zzx4IUhKfTh0M0xdKiVtb104c3pKalNjRk4vOE4/YXliWkRTJE1dT3szajdCSyYwLHtMImBUYnlZM0hi''@;'; put 'put ''Y3BSQkliWFY1WTxvfkZOY3xGJGBoOWcuY142bE13WHpnWU9hQkZgZnZlSW11alZrVFJsX2o9NiNAR0l+QVF5Rk5aZy89NntYSnxlMTdYUCNwY2wrQDY0aE1qPU9OLk50MCp0dDR5dEw6ITk2Jll0bTlpL2VdXzldU1dWWzgiOmBySU9lI1pCeHNrYXpbZjVFQGAvMXs3M257WFcjQl5Jc10/P2d6''@;'; put 'put ''Ll0+QytRZTUpMTsqYC5yOjNvMyVmciJRajBtOUZKRExwZCZOfmZ4OGY7SjdTUXZuS216dFN6VFJuSjZ4MjAsZFFUb3wlcHRSJVVpbGZSIXk8WGhlUG1SY1Y2OVIsP0xlTysrTltpOUJaWmltWCZtKCI0NH1sR1kmfEZ3bHdldnQwRmhodTFhRVRWdT5wNkZJfElsNERBOj1iWSxLVzhNYz9mNF4y''@;'; put 'put ''dF9ffl1ydGpfWEdNKTIoZzN6WzdePG5vTEdbYmRddS4oVl1kJV4zP046U15CP18paytadEooI3c6TEVPZV9lTkNReXpWRV4mXmczRlojOWN5d0dXK3VXTHskbWtIYlpUQzIjaXFhO0E2bzpGSDFMNlVLKEQpK2MrcCV5bCNpd1ZIQj4oXSlSbXd7Nm9IKiYhI2k5PnFjJloqdkdAdH16OytoPjc3''@;'; put 'put ''LF1lI3ZxZzVWRz85P15uZnwzbz4jZko/Ty9Ebj9jIS8kTHF4cFZeaGk/OEZbXyh3LmVqLzV3IXBwbSpQIm1RWUNXZiREO3Z2O3FrREUwe1pgcyF1RyV3NlpIQTBfbkllIXMqUjZxX3Z2Q2FYbTFSVFdgRD14KXlOYUUlV3RXanAoVmBqUU5fVSQ9TX1rfFNEKyRyIzMvaTl9bEVvMjFaNmp2S205''@;'; put 'put ''e353bjpxJSQ4eSU/UjhXOWB6XT5obzBQa3FqVkYoIlM0SyRUQmF7NUdhfHsoODhGJE1Xd10kcShZbWcoU2xoS3g3dS5JWEVHa0B4KDppXlRtcW1GI3gyfChSXXRvdng6ZW5iKWw9SUhibjA7SFo/ZXNvMSlUSlRPNWQ6NDNgR34zZTRsWXFvY2UicntZXXk4K1VldUVnQiYpbjV4YVE8TWckS2Vf''@;'; put 'put ''M3B+KmJOYnRYJml2OG1sXjtHPUtWPjQvOmAqfmosOkNUOFhVUThXTX02RDZHQFg6eCxeOnFnJltjVEl+MysiP2cpPUZRMDp5dWdmOk9QYC5RQCt7RVR5MCRSRE4jeikicS9+OjgjNHJIQE18ai9kR2hsWFhpP3VmVUdmIUlkT2VZQSZEI1AjOC9oUCtUcHh+WllLPDN0KztufDJGK2NvO34uMTFN''@;'; put 'put ''flpsdytFUW03IlUkczthe0Bve1A5TkdFa0tMMXgyal1SN2djYGcofjpWKk1ORWghWm53MmlFLigmLFAkQUgsbEZ+aTJ0Q1VbTSg6fUBeNGh5RWhwO2R+Wk97Om5mO3pkP35jeVA/UTZBME1FPFdoTSxXQm15V3c5ZCF7LiZZdnNCM0tRPjdEa1hFeiozeVhWSU48YWI6e2E6a1csS3klfVY+OXx1''@;'; put 'put ''OEVGczFDOjxkd0k1UGx+Z0x5JmxARipmYlU5PWZLVWdtcmxuRDJTOGsxdHNUUldzYTkzaX4yTyV6QWZabWZRNT4kLCQxQ20vW3BoRmJtR3Q0WCMqZywvQmQkc1NJQno1Kld6L0diPXEhVEAzUEJQSmEqTFVNX2B2VXNJTWJzTVFwIjZGRVdCRThVZy8oSlBFRHRzMk18NDdZMlliI0YxT09qVzVl''@;'; put 'put ''dzdFclVvJl13VCx3cEhtWiV6QyFIRzltQjEkVVkvV21nOEhbPmxXJnBBcX5INXpwejBKcE9eK25ia246Zi8/Q1c4SHxuZnFSMFszNjhORXttJSJEQUVOZE9YVXhYNGVCJnVvYjc3UWo6QXY5TnpgIW5gcml1TX5+dEQlSk1xW3hpMXg9Pm9ZeXR3aWZwJXBlRDVFUF8mQGw5bmJvZih8N3dsW0BQ''@;'; put 'put ''fVkwSz50UiJuZGFzQm1fKjRVKCplMnNMJF16M0lmam9mZ21fSGZeUjEoankuYyVMZ3MxP31ZZ0BiTWdtYC9OOXN3SG5BKmJIQ2pqdUJTTFl0OUF6SG5LUHZ+fFczVWhZO3JaTDVYRiYrRjZkYjVFRTEocllnNHpeJjdeRHVLVkA/VnM4X2BpazN1KCReVSwpMk01SzVdZWwkYEpXNkByJXx2ckhu''@;'; put 'put ''eUoxQyF0Rk9+T3osIzJJcXQ8LmpMSTtNeEVzZTRea3NHYSs9a1VqXlpZJERAUTZbSX1Ndm8mRmZHJUpXVWUlI0ljIS8+NUZQdDpRK1o/UVBWKztXKC8jU0FNMTd1O3FpY3t+fD82P0BdcTZObjpGfjlhI0NCbHcrLitNcUsyXytHP2dMd2xNPUJqRTMpeWs0MmN7X19KVVNVWUdzRVRIPmYlRTV7''@;'; put 'put ''XykkKlA+X21aRnM9QncpbTskdi53NG1LanxsZCUjUiRDdDIvN3VaaHlYSE1EIVgid1gucl57b2IpK2F0fTRldTZYUW9MeVVwPSlYO05LTCt4Z1hJVWxheCxnTlRKJHBWL1EiK3NqI0dCdT1QOV1hWXppals6dXNJOUQqUkhrMj5+dDghT3hEZWR2aTd5Jm1YT2htLi4kbyE1SndJM2wwZUQyeU1P''@;'; put 'put ''cTdWNGBSQCxAQThjX3YwYXg9diEvWHozUEw+NWgiZDJ0Lko/P2F4RX04VDBjMG5bT0xZXnlWXU1kV118SnVCQS5sW3YwOCxRfGp6XkhIQFhqMyxWJnxwPjxHcT8oKWAsWy92X11nemsvQ1h2IiVPaVowNV92MDVnL0Z1ZCMvNXp7e3g2fGJkSDBZL1lJI1BKPT4wQFgxWWo/WXg6eCUkeHFtNWRY''@;'; put 'put ''NXsvejttXzxuakd+YWZIMXt4aC9wVyNPVyRVR0B+TXQ1S0tNdlsxRnJEeV9MeFsjK1t0e2FRXyMiYHZhRmskQyFGeEg3QEB7KiVCRXtlOmx4Zko0PnJoJnVVR29vMzIxa2hCMzJaSGIyMysjV1clWTNjal44QTEyamdzOClhcXl1dnw/LGJIQD5mOVlAUkFaRklmbGRFYlNwRncpZFt8Z2szI05S''@;'; put 'put ''RSZ7SVdRfWA9PzBeKWdDK0lwbW4xU09edkA8ZG0rJl5IP0JzZlclfU0sIVZTJlVbL31ZbHlUIj96XlZdNm83Lm90UGhCWD96cGQ2KC9We0NYcSosfDZeSEI5T3cwaTklYzpIOWloNkhYcSgjXmxYZW9hUFZjbHpYZkp8PnQ2UGAic2YoS0hoaXdgPGllRUBGaU4sQS5oVlFSX0psN3w1dFFaMHBC''@;'; put 'put ''ezN+bXpbJld8digqL2gzLEtUW0wkY35lLDAzemxFam9TfUB0cHNVWGJYREtlfV8yVjlsO3gvdWBVTUd9WmBUV3Z9TzxSb29ANE1hekQ+W1kpV1IpO09WNVMkPVR6Mmk3ezw3Wy9CSjhKWjNwJlhSJVowdmxdTntmN1ZhUmZTfFs4a25gPXJMRihDSjV+NTdhRTIkPG5DbSpOW2dmNzchfCtoZlYp''@;'; put 'put ''IXdsV2Q/PiZhLlklI2NzJlolIkEuaDNtNyh3YEBDNyh8d3VmSDFoaXQpSjA2YT88b28+QmdNXmdhKjdQTDZuSXMqaE16XmluIjd9dk44RmMqMCh7fSpeaVsodjtjMT9aPV9WIU5NLFBtd1pOTjtuc0p7fihTKUtsJTJLfU0wYi5jJjhlUTxVZStJPmRPKWY7dzZPbD8sSHx0QXxzRnQzfjUmKkhH''@;'; put 'put ''VFcsSTgmaX4/aClzVkhzRC9jUmdueH1eZUQqaCJIZE9OWix+QmNOciFIPXJQc1VSWTJUUyh4VXpTfXR0fDc3V3xGZ0g/IXBGUUpoIyNiKF1fKi47K3kuNjQqTDBXXXlDS2pwOjFHJGQ2Tm5CXkpLXUswTjxtKyFoYUovTy5Xb2VHZGcpVldWSzZKOjhSbjI1IigyRD1jPChJY3xgX1VYdEBNYSxh''@;'; put 'put ''T2FZZiYoJlI5MVpSNzoqMXAifnUhNSxidzVfLmVEfSJjZ091eyFWZHd5bVlkMzdfQ2hxZkJAYnJJcD54PilHZylrdHFVfkImYjV6OnNPSi9zdXs/NS9gSHtXaUVAX1RIUHVrJCs5UHRHZTcxTTIlSmo3MH1qLltmQ3QyQ0dQQSxyWUg2SHAoSjAjSH5fWzo9cjc2SGsmP1lgfX5nd1Y1K11MKnRg''@;'; put 'put ''OmghRF1oYSNnNEIoUXpzI0pyI1lwZ2k5SWMsJmU7MStxUT9UNUosQHtLI2xnLE13NnhvOFtwYjkqSSh9c00uZXBDK3pUKF9feldUTDhwLiYxcnIwPzwoSl1INk8iNGk1RDBbRTxzIWpNb0xHU2ZYPy56MnhjTC9kO2tTYHlERlMxUE1uKjNzMHNhUjR+Xm5zXWhUYTJna1ZDPHtyZSIkK2h5OUls''@;'; put 'put ''PWpgaXFrdig6cWxKKjd9fnNMYjZ4PjVMb0VIemYmYFApQ0V3RWY8W0Z9UnArQVhWQ35RW3VeXXxdITw0WC8rOkxoMTFoVihGOCpPRSpyTHNsRk13M19JP15QTmt4dDhPUHJOaXk/bn1pKmhEbU4/ISQxY24pd1cjan05ZUxwW0lrKzBiRC8xKjxIOjBSRzNKOlcjRilkZTRdUk86e1hdP3klPjpk''@;'; put 'put ''T209TWE+KHp0SHpzdDVVS2k7Ll5IKXxlTTZ5Sjk5NlJvTyErKHhCXTZrTjUxLF0oI1IsWHdtSV1EVnEveTN+XllxKiQiSXNmN2pYVSZIPHIrJTZZImBlVXRJJnQieiJaMikke3VUMm4jQD1IaCZfQiIzI2dycEVvQyRleyY2VnNkdSxrMzJ3SnI2T094aHRKKnpELyxrPX53UV0pRytRS0VJSTlF''@;'; put 'put ''fW1LM1FfaDJxPWNJZVI2NWZbMVJuPnVbe3JRLlEpUX1INmgxYm1zYUJsdk1jJj5BRGQ3aXNrSiF7YkBpNDYqM3xDdVFAUWJwN2dBITBaQD52Jl8mRGN3JXgkWXRlOyp2XXFkQGR3IUp4YmdvSm42ME1vbmBPPmk7T2NjUFp9fUMrPG5xN2NDL1tAIVlrTk1uPiFZeG1IdlFIdl5tXUQoXS9tQnd7''@;'; put 'put ''RHEsQj1FakQ9clN5bjRhJV9+cjIxWExYO25iYWVkWEk/M28uekY/MztEaFJdWlJpSkp0PmchTC46SjhZQyI/XkUmblciVjs2Mi9ePHlDMS94WlFxdGRYOzoqRntKNGk6QFpxTGZuYzxAMyFfOkkxOmckemROOCxNOSlgMn5qPCtALCp2ZSt3WUF0Imk0NGR3OHZQfClRPV5KYGR5SFk0fVVuPFlb''@;'; put 'put ''YWlALltjbnJkISV+PHo+P1RlRyREQiJGR0JQeDJNODosSChXOW9nOD9bey86eTROUXxaSyshP3BoI3VMLENxWytwbSZrc3xRWSw4Iy5mMzNpPTxXU0tROFclLCUpL3BWJTZXQFU2TXdVZk89Yns6ImZ2aDJ+bkspZVJQO2ZCWWRTQXJ4MFBKeUlDUyV1fGhsQiljXyVJXlkwb1JwaypUXjlKL3xt''@;'; put 'put ''Q2EvaytNVlBIPm02ITFDQT0/VGpsdighfXRJRCJZRkx5QlYwN3xqWlBHdVBDJDw5Iz4oOGttL0gpLkJuI2lWRWBiJV9rMHo2NWhdTXoyI2NfSn5QI1F3bWdJaEBmX2I5dV03Lmx1JVtrY3NEPVYvQzFGR2M0MSxnQSVrSmB9VFJrWStuezAlS0c0fXZ6U21SZi5fLHdGRnspeElaMilaenhVRFdM''@;'; put 'put ''UWZJaipBcWg9InpIVF1GVjBlKV10TjFJN0RQZkRLaDA7IiFzVCQiZTlWVT14SGh4RlQybiFfU00kMiFjfiIsJiQ+elE+TyQodW9jRjIyWCpgYlJ9W1BaYWkxaDJGaGAkSTAuMmIyMEY/ZmdeTFZJcTtIZUUrLzdQclpPL14iMyh6L3tHI0FrRisraiMlXVQzO2A7SClwcCF2I0YvaCMsJXomLiRH''@;'; put 'put ''JUQ0Tz8lLy4pMCU8P1FZbElhRVpUUmBuZkhQOVNTUjg/MiJ4VnFfdEkqTF51ZyZJaU9UP31zXyghZyZXQFQ2aXJiWGBtLCtPKzRbNDgiTnA6ZVFLTk9uNV9UQHFXeHZkRl0janE9dDNNOzhObzRnQlNeaHhePThIbSVLL0E7TV9GbkdnJW0yRj1mRkdQZkp8bmtQek1sOHNORGpZRHFvd1YqUU8z''@;'; put 'put ''RCkoSjtEWikyW3dfTylObzEiMHE3QUQ5a1NWPnI+SFs4Q09gKCMwbyY6P1dYd0llKnFYNyhdVFRiPEhtMTBAa1FiM3g6RzJFRSVDTUFYc2p5VXYhQFJVIU5oen5nOigvfHNQVWBtTGdGVEkzZ3U8a2QsdT1taT9LMn1NVVBBdlBLKGMwY1coVU5TWSp8eCxPUmQme0JhVn5QLH15bD9MM34hUz51''@;'; put 'put ''UEQ3ezksblEpOklEUmZCMmxubWtCQzQ/QlNQdmBMPH41eTd6SzFFKFY2JktwJGlYUFhIMDFOLyRjWHhKOEN5QURxP01pRG40QiU6d1VDc2NET2xHZTlQUUclPVBGP2t3NFVMblFePVEsfltmN2diQyZNSlVIazBpMSZddjFSbXh8TjtmI25kOTo1eVMxOjQlK0tVfkFsbF5VXlthKjlvVjFSYHAw''@;'; put 'put ''b2wyQEo5K3dfeVdfQElvcD5+U247fXlITHFjInRiR0tLVU9xdG0xWkM/Xng1U0s7Vn0oUGZnIVFvezZVcVQ3Ml03Vj0+SVd9UW85STVeZHBsIU1pJloxe0NPIXplQHRjLD9EWloqJG89d0xTQ0c6bklUTDNPJUdMVihIQSlJWDQ5UHoxY3l6X35dczc2cjVMZ2BpPU9kcEFiYSVDfSUocjRKNz1m''@;'; put 'put ''ZltBI0dONkx5fil4ZENqVT1IY2EpP1k4R1tzaF9NQEszPntaeXtCKmZFKTBoOWFNKiE5d0RgYEd2KkJATUxjZjBWdUIycXYxYE1JR3N2LiRwc3VfaF5fb0EoRGxKOW5YPE4vdT1kLj5rOEUqN0Ukbm1IYm1DMmphK3U+QXpkNmk6UCV8S1duSnwxQldkWnprJVN+Z3c6aklXUjJRWnppeWNDM1Vh''@;'; put 'put ''Q0B8LmsoW3RsPWx5NUdsVERNLGVgJFR4eiIsMHBQdThhWEwyWiRuUz9pOnZTNGZoVUkjMW9yeyU+THpSd3p1QHovNit4PyNNaEooYXlqaWh2cjRxSX4xUTo8TyRPej9+eklLMFBXMHVYQFQ/MVkkYHc4dFh2JlgicnAxPThtW31uNl1yTCxATj54UzpRfEhEPWc/VG03NnE6PmxeTUFgWyVqNmo5''@;'; put 'put ''cn5yNm4sI3JpWnQrP2k/c24kI2NlTnhMSTQoYEllL05jQ3JZdjRLZVJOZioranRoNHhARlZxcCYqeXgwaClDeCV6UlBFYnN6bXt4XltgSnoob2FvMXBGKHxERl9EYXZrTTx7RHFvekxRVlZaSl5wdStDNXs4Tn5xWjg0ezR6c1trQz4oZXlFejQ6VEIhd2FjLmolXVFeW2htVV1xfVQ9K01RVUkx''@;'; put 'put ''Jk9NPi42SXkzUTB4bjJodDQ1aTtELjwyUTlnfTtWTl9HYnRwNHNONkk8SU1CfGJvUnxCLnFZRlI6Jl06VkVMbGVbT3okam04VFkuWDF7T1VqfXN6M0Z3UFRQVUFrOnJyN3ptWWF2ZWMwSWt1Z1M3fU5nYWdKV0VrME1Aa2Y9am5oLnJGMklDVyxCQ1U7Oj9POH15QFNudGQ1PFhaVShuKThsLHo9''@;'; put 'put ''cDB1bFcvQ1R2YU8yfllBJitaS1JUdmxwYUJRYEMyPnJ9eGNEUnojfEZsJm4rRGsofCY4LiplUXd8RyxCU0Rne0YyNHJBPiNpSSYkTjRieDBGJWArMlguaHJyQCRFVldkUktmdmJJYF46N0w+TCl+JjMwR29eOn47JEg1dV4rWSl+I015bkllZHBoR3hBVyw5P1M6IXpARkdifmVmRn4lXXk3PF9j''@;'; put 'put ''fnBlQXs0cUNyJDgoYVlRMTZmWCE8Zz9NLiN+ZjxXN1t7WDR1MW1rdVo5T2kmRFJOOnQkVTQifVd3Jip9Iyl4V0ZBcHFeRk87Qls6Vml0KVF9VDslY3dPMV4+cXpkTVJ8cjZsR2cuPzBtKkYkOkQ/XV1uKjk6WXdwbHNaUS9lMTJ0NSN4RHUlPF1lRnMvMilKN2YxdnNvW3BlYzQ1e0puPG9xM3Fz''@;'; put 'put ''I3ZUbTNOd2EuIXNnMjFTIW5Pe18zQCopI05SVyJtWyU8JVo9dkIkNCI0RWslQzwqPlU4RTE+fGczdFkrdWR8PFRgN1R3ekhfRVp6OnJRQnkmaTJYVG8jdWFGL0wsVFhpNj1rJjI3b0dQSigrMnlMU0lwYnoqKygvO0k6UWpDXVYuIV5wKHcsK1lzMXlQbiN3cFU6dH0sWnxERlhifkJkJV4/eEsv''@;'; put 'put ''PyV6TipSPUB9VykkLzspSyRQOEd7RyVOI1IyRGpZKFpqVzpiKnQsNk5wVkZwU3Y3W2REe015RUErMHJlOHtfRz9QVmxfdTojQmtWa0k+eGIkdis+KzhEa05ZfTFweSt7LDt1dip1UDhybHRFTjUsWDI8JTcrQVVnO1t2JVc8fT1sdFtjaVt5X2lBKzxaJX1BPCpqTVtRPHdDMT1BO2NGZ3dSRkBA''@;'; put 'put ''P0tGRm5+RmY5NlF6SiJtR2xFbn1mXjZ6MzF0S286TWAqNTtzQDQ1YCJKPmpPOzxxTWY2dH5XSyZjNSUuMmAyKFgiUD1fPitJOkBjQiFQTm8oY1BOSEYrS0V8amNNfXlNbWxNQ2Q4KChyU2BESGkxWiJ4IzJJRmVSODs/TjtPV0YpRExwOU91LHgkYX1uSVVqOW5nXnR3b1R+QCJGMCpFIkshSl94''@;'; put 'put ''VGE2S3BzdkNoTXZGI0xuektXfUFTUGp8KEczZDAibjY0QGpkOzB9Z1Y8PCtNPG9dRWReXnRhaW1zR3BeJSN9bncsfGI1ek5vQW0wenRJRzNve0NMQGlEQFB3c2xhMmV3b3RZeGtfYiVHTTdBTjdEIWU5JV1RMFRqLHc2OFR+cnRKe3omay8/Pyl7L05Haz5lI0F5bWRjc198MGYpZmJQLGIwU2dV''@;'; put 'put ''I3x7b0xmc3NGcVI5OW5ockdtWW9SXnFNaGg4fTclMEx2anJDKER0PiV3ZmB1UmM5YF5JejV1KDh6MGBRT1ReIlUrV0lhRllgeDsyWklUYlFBTntLK2BPWD5GZz5AJFBUImJtVWpETHFHekh0dzZZfXUrd3A0cStyLGMxV047QnImdCZVdlp0bEVIJmhaekkqPEw5S24oPGJVPl1CQERqb0hOM3I9''@;'; put 'put ''ZWtNJld5XT1YM3hoY2M7fXR0a1M0M2BiMn4mXX1lcV47XkZZU1V7N3VFVyNFKkM8Qz9rYCFwe21LJTRQYmJsfkY0eTA+dD5FaV1RcHxdQXZlbDpQNFQoRUt0cnAzd0Mzb0o0XlRKTWBOY2hNUC54TUklXTZhIVoqTWtzQjwmUGBAQWJ6cytHXVh+PG0kQmJsdGYvdzt4KU9jJnpPKT9GY0tsXmtD''@;'; put 'put ''JipTL21lZC8qTiJoWXVNaTlvUW8vL3pFKERqalFLNUcvalB6cmlMS0A8JlJ3Znl2cHhNN0UiTTFMN0IjYFpGJVIlYmhEWk1MKjlRL01VamJKaGVmdWhzbmIhUk99KWhNQTVrWU1MVlVkSkNKdnljfjRAT2t5NzIufU9CdiVxIV1wQ0VfZDBIX3FxPmJvSVMoOkQmWjQ7W18/SiNLXWsqKVpKS2Uu''@;'; put 'put ''OFVkX2YjXixAY3pKXWtPYkghTT5fVV0sMyRuJGR4R08jUGkkZWR8QTxXeFFwOD89YCJhOnZaT3pSW3tOS2FALk9jW3whOywmdm9Gb0x0Qk5kN0IvPGQ2cktYMmhhWyV4MCRvPT4lLzkoYU5yaz5XYXUvVHN1Mkx0W3txNi8wcUFDdW57fCRUMVN6S2tKbjFNTnVHbCEvSC5DcCkzJj5JPlh8Rloo''@;'; put 'put ''RCEwLEMsdV1xdWtuI11AY1dTPmI3WTIrInlRWCkyTn1OWz1XMURIK3d0V3UoUS9TPkp9XkFQM101WXA7RVAze2hwPlB6Yk5vSD8kK3lBWC9WTm86IndFJih2QSpHLiR4Rl8xSzcvSkh1LDk+ayNePGJQYFdMP1F3YlMlPE5uMUA2aEN7bnAvc2NsVkZWRzM4TmEzX29EfX1xNFdVZi40dmBxY0Rn''@;'; put 'put ''I0B+ekMyYCp7PThuRThzUDU8MSgsc01EYjhabStRTjBjYDM5aSFDdjoofCU5VE8kazQwX2xQentYMDtESntWYXxZP1ZFenU1Y1Q5e2EpUmIqSjw0dzo/bFcyRXpkYiFtWHglTXl3JCJDO1IsRGV9aVtIdCNbKXEiQVhocCRoayVgWEppVTt1dmBOKnR6QWFjMHRJZHtQY0RxdVs6b1skbXMldXMx''@;'; put 'put ''YkxtKDt6QkMyREhLQSNUYj9wQFNBb2toamBQZUc2T0RCWCJuPTJtOEtlWGxURjFZYkFSdjZJcztqeEw2TilOPy9iYmAyeTZBYzYhdCQ7XVFFMyY8eFtAVCIvUj81ciVnQGw/U31GcDpCenVqfFpJaENGeEZPVlJqfCt8UFZ3Ul0yW0hbOEFiXkNMJnhUfn1Fd1Q3aV5MP2oqOk1uQy9IPn0wTiFG''@;'; put 'put ''ND1xQUs7d0tqfmJkcVtANCZuVVdKKHB1fSJyMkJZNGVqJG13KyU1ZXk7eylPNjk/KU9mN0AvfHk9aFcwZDNbSyJ3JGkuKVt1cVMyKG94fk5PUUJYJXhKM2YzMGRQbzZwdjRtMmJHP0goXTwqYGZwMFlYant8YVlaNTZyMzcoZGVOZmdtbXozckZ4OjlHey5YcTFDciwuMHxwZTVfLiR2P0hpQmxz''@;'; put 'put ''UTwwa15mantCMiY6TllwYEtKcmRdb0k1ViledGNaJj4/MjlqLnJFJX5rTi5+IVkuL3lsLHwmVDtDbUNKRXp4Xzk6ZXg5YylOK1JKaTg5eEQmLGdDKjxLelFNWXd0cjMuKVlUTmZQeTVkWFZ4Y1BjP3teeUUiSjZqRCxoV0tTT2UzVipKQ3g2c3BHd1MhM2dwNGc8W1JQeXE0SzttVHpleEpeMFAv''@;'; put 'put ''b2RQTUJWSnE7Zns5LmJSelM0UUEiODBhIU1mLDZoYiNSLGxxeDtvPXBEeDFaQzEqNy5EczBfKD8sXXZRTGNJYWk6bEh8OndBcjU4W1NSbkoiR18lek1BI2E1aDAkTyZkdDRQUSVYNyIwaTFLNjBCRXFWNVMvX11Ldz19dGBecXM/ISxRMTtwaGlBdHpffmIyJndGVHI6fj1DSXR8YHN7QDpiQFZE''@;'; put 'put ''Km8/anF9R3N9YC42KHpmJGlOXlZnVj94RTFdaiw3PnN3bFR1WixsOkNLTX09WSVKKHMuek0rZ1VANDplPS41X1slUzYsQysrUS89X1NCW2hYZGJ2PGRHUmtVbjwjLiMqbD82TFdOT3ZRYXdIKUJUMmBQYE1PUHg6cUl0MkM6Tl0mMkI7YSU7ZTxRfFhQcF9PdnxHYGpfODNlfGJRfEs1JXE+bD17''@;'; put 'put ''KncxaCU6LilbQVhQb19gWUVTa1QkO0dsM1BeSy8iU3deQldoenNSPl5FNnJkZF53amA8ZHFwJVFGYC4hZ2E3KFJPK2NRW0w6T0dCRllNczdHJi8hVjpQQk5BOVlCOTUkOn45fHpwak9PckJ3P3dib1pEYkZpdWsmfj0qenJRLCk8aiFgfnNtWihZUjd6ImRsPkZ0MF5EKyVzdUJ1T29bSn1FaylF''@;'; put 'put ''SWZedn5mLFhVbGRdZUtESTgqeG5WWjVFSnd9ZzlAOyV0anJoWX4iQClHcTZSZTY4SnUsNmlHTVMrOXRaZ1RTKVM+O3IwQjdLPmQmfTp4JkEvXStLeVJuNVg3N2M8ZHFlelNBTnVmbn51RVArLG1wTE5PKDxFIWZmaj89TXclRUVQbjBXcjQhPUMlfE8iTHk0eHZnT2I5ZytPNyN5Yn5IRiwmeyha''@;'; put 'put ''UV1wMyJOVm8kMVghXUU5RWJve1BqVlheQ3xhaiY/L3toSFRNLiw6OGw8UWJ0eitaamtaKVlJXyhSUXM7djVKKUZ6PiouYn5KPHV8W3dGQlo0Rkwmc3EybC9GUk1tJmxjQD59VDokSVE5XiREKyFPdno7Z1M0VUtaUHpSKzkifGBldXNjSlJJZW1eS1hqdk50PSxVO2oieXxydFJnSmpnemZrNm1f''@;'; put 'put ''UXc8ZFFnSiNva2A4YlI7b2Q2fXRtYW0wbngkWilQSHgoeUN3am9GeSUjd0h4NDM7KWdEVjspK3t8QytZSSZ8eHRPTUNYeEBFRXVgWVJ4K1dqSHAhQ1VAb018ZH0kT2pfMmlIcz02fWdVPnhuPFo2TyJyY3MhT2NZY0c4WlRySH4kMXY6dXszcmc0aWlGT2Q1TzQmLylYTW89PWV7eSY9Vn0zKzNP''@;'; put 'put ''VS9HPVE+UVUvIkMmQyNMN18xcFVgbG5DTWRPIy5oPnBCQklCTiFKQTEjSGtSUSo3Qy5RIThvSnZRfEYlfDA9IVM2N3ImS19MaVNWLEYsQ1FOZ0lXJH46eiQuN1haeXo2PVBXdml9dDBKezdGcUp4TFI5OyZGdDVdPHFCOGByamIlL3o1aS5aTm8yPE06bklFZ0I0Q1djOXd2UGdCaD92ajxXJmNk''@;'; put 'put ''Uj1zc1gzKlFOeGJwaDNweixOKUxoXlk7ImsrXURHeXRpImFlPm5xfVs/KTBZNzd4U2cvSih+JU1EVkF2bUV+a1RkV1ZMPEMzRz01T0hYV2gmI3ppQDxTN2dFSTk/eUNQZVU0fklXaEYvUktFV1o/STBMfiFJJi8rcDlKOChVQHVsQmxiXlchR1p1cSt5MWRAViV8YD51bXhZazhLaEhtKzImMkB7''@;'; put 'put ''WyJqSmk5X3lrRih2N31ONzp3WCFKN2wwVlI+XWNMT0VIIklkYzo4YHUyfHIwRWdUZGxGXTxPJngqIz0uJk5LQ2ZyOyFaekBPX3xFVypsamsxc3VtQmJ8OnhXfl5Kal5AS1QwUTxFdTgpPHRaWHJpPTNQOWcqRCNMaktPe3E+X20qfVY3UVlAfD44aXUsUmZNSF5QK11XJDRtcS9qWCkmSV00UEdw''@;'; put 'put ''P2QyQCxeJEA1M35aSjAkU2dITSliNDE4JiQvb25qVS9ffl9hMHhvQlZSPVtULDRvS243fkgyPWJgI10mcHBebTdYWCFrJFh8WU9XJCxDa0M8M2lzLHQ4cSl3cjRSOCYmNHZNdF41P3pxfkVZRFNWYD9tUEopJFZzNHhEIXkrUVFwWXU8bXY8emJgOjl+amYmMEg+YG0rM1ZDaWF9cVFGIyRdWyRf''@;'; put 'put ''SHNpeitLfEdSKGNsR2ZVbmNJcjJZQitgTCp1cmdqKH5EcDJnU0o1ZDohUGNgVWMpRlVyYH0+JGhoZ2B8Y1NGe1BLUGJyMGojZT5KejkyXiU5dD5paWl0X18pcjxKLjI7MCQkeV9JeCRsa0tjTDQkfihPVWQ4TlF2WUNifXw2NT1fIk5FQCZab09PeGU8Knh2NytIPW1RJWcobldgLms2TDcoMEsk''@;'; put 'put ''aHM4NCRAZCI3THpwT1txOVZEdlExSEIrJEp2JE4rJWllYjo/d2pGb3t4cm09cWx3dS5jNixeOzJdIVk1a1ZaKStYW3FjPT9dR3N0NTQqdkczPEooIztKOip5TnlBe2ZSM0RHVClvREN3PHR6PGlIX0xAY307IkBtQUFgTF1pcFFIeDQ8MjtRe3c5SCoqTE0sdnkpWzMlYXB3KDwiUXExfUsoamhr''@;'; put 'put ''Z218Y35LIj5tPWkmPD1IJnp1ZnYsTU05Kjp8ZTYjO2FKY2JscUZndlpYUz9qb0JxKCwrJUNMeTo0R3c2ciUrbj05LzF3Vj5XPHN2STwvSl9YI1peREUjLi5nUCR2YFQ2KDVFSDV3Qk0/NSUlOUdjQDZPclJLdmQ9b0w8en5fQEtHITR8OGlIY2dGa2owV0U9allhWTVnK0E0O3ptRmJ5WlNKXkNf''@;'; put 'put ''ZVojViplfnwqeWZOaWhRZF85UVhXWTkxUngvP0VOVV8wKCoyPHVwbVVYZzpjS0NWIkBRfiFFNyw2UCRnQG1mYGUke2dXYigpfVFPLDkzeG9DeSNqMHRUNzVaelg3fWhFJltvUkxWWVdFZ21hempabVhhQXFQPm5jcCpIU1ZlRDcibCYvVmtGPz1HZ0tpb0U9Tz44LyRtLkRZOiMrPTJnZEBqJCZt''@;'; put 'put ''eyxZaVNwIW1aeGR8YTUjKCNzWnNSUVFIZ04kdlRiKEgzdkFfO35tWXxEOk9ucFVJKEtPQT0hITlMN017O1dsTjpEOE19R1omO0hANUJsdW9RfDpRZ1puMWh6OFVTe09NciNsIUZ8XTIsU3BEOzgxMyJJKzxZVHlZcmNRR3xnaH5CY29YLFo4alFsZTowck1DaWloPC5wMk1eLzgwWHpUMDFeLn0m''@;'; put 'put ''MlZjdD8kI359JEV0NjZ6PS4xTmEiRVE0My4uLnU9fGVbeV1SaXhLUzdjLyV+OzxIWj96JWAkPVAwXVAqTkRwKiFaKjZMVWlxQV5USCgyIkVQLFk1a0VmREpQP1hBK0lVVDVCaHlSMFM0aHkxUDJPRC5KZWVmWk5kVHAkTyQ3TlcjbntQfCZ1ZEViZyV7OV5sXT5aIlAzM1smaTBwMXsuSSgsbj1m''@;'; put 'put ''SmxoXkJuZS5kcTw4eWx+TGRtfGsqPm9EPjJLWkplTVR+bj96PDpMMGAySWlCSUpab0c2c3ljTz5pZDBHZUhaTFdDbjdoSH5zOk1fcD8+V0JuZipJMntOQE5+VEdBSHh5djE9JFViYl5mSDQ5I1ppZkQlLzQ7TE9FT3x+QDF8MCQsejc6OSFNYHwjal5hezpxYzMsakIvN1FOX0tdajMmY2AlOFJp''@;'; put 'put ''cX0qMUU3b2RwJVdsSm9TQSY5R1RgTUBzTkRHPzxoZi9wOSZTeU1TdTtoVXw/RnJPeV8vKklPa2I+d35TITZ9PGEuNWFjcDtGeUMpY096WE92ZlNONjRdNzdiWyEzZF9TPGQmbn14QlYoMmMiYWBXWD09T15vSnNldV9uKShNdjJwSEplViRLXypeKD85Wy9EeXdIWndGUkNoeGtMSFsrIz1lSDdG''@;'; put 'put ''MXx9K2xyazVmSyVWTWImPlJoJj5AY0NAaSU3XUo5az9US0diOERYMyV2OihYcmFyUHk4OShfN2RbP0tBJUl2WTs9TUcvei42aFRzR0NpfDxiZlBCInwpK1hjMnhzQCw6UUEwVkA7MnxHPVJ0dWtSMEEqUyxxdTNaRTwsK2NpRH49LGJ5JE5OZF97LiZqfSVzXUArJi4lamRMbUtHfW1bdTdacnN8''@;'; put 'put ''M0ZKamtVdjlyO04iYSolS25VSz9fRHxVcFhhU3RmTEc4bjkjVDM1RD9NT3l7OW1jJjteIUU0Vjl3emFZYkAjXlspd3JoR2RGYzgzNEJ5fHA9KkV0YC9oITomQy4rRTtBXShRcjNrJkdhPjE5bzlDMChbV1N+N2hRY1NqbjdmbUhlQmJrZWV7OjhOWnt4VE1aTjohM1dfdGJSfkAsNkxmMlU0bz94''@;'; put 'put ''TEBqUkIhUmhMTihnaD46eUJzTnpUQDNSSDBzViRTcFBffiU3RDFOa1dWV0ZGSXVBPF46TXdNSS9MYkRwM0ZOSTNAYnEldVdnSDNGciFeYCZ4NWRWW0tSIXVAVUYiNnB5akQyd1J6NTMzJix7eDkkfU5ITDd7dnlZIilTISgmVkhqQWBscVQicjgkcUJUfDFJWUczezorSVl0PD5OJTRPOUNHQX4z''@;'; put 'put ''cmVNJD49SlkjJlZGImlOLmRrSTQiTmwzSGJWeUJwM2VnZGZYcTdvOyhyYTZMQnFWNXhuWiFSKSRJVS5HPyxdP2UsNUNHd2RWP3VqKjh5KVN+UFNSQXdhZTB5cUdRQEElKCt5TTNEY2MuNzJgZTZkd0p5ZEc7TTkpOXZyKn1HcCgwM2pzRkVkVEJxPm9JVjx3P1NrWzVXfkxCJGdxL1MhTFJ4dEpI''@;'; put 'put ''anR8fTtXYTlEUkBFZSUybzJddGJ2LiRQVSFWZlErQkA7YjgkZTFyaGx4eEhIVCkzNEIlMlBAP0MjWjg/RzV5VCVRUl5LMWZoekBWTU8hQit5QHEpY09UIlV9M1UpQTswVCFCYFAkKH5fSy9pOkRmIzNeWThYUURiMVp6SHB9JnlmYXFJeWZiaW03LllEcUY/TDdTPDcuK3p5QUxmVG5bXmooSSsl''@;'; put 'put ''W2QiL315O2NwXyhLSFNzQDgodF8/UGBxdkZkJmApI208JEM4IyNxcXw9VnRTXXt8aTRWOl9PNmMyUmVfdEpxeUgmXndnIyVjUGM5bkppVG8qOnh1RXpwLjxMNjp6fGd1I20pQzZII0VgJTt0RyQ5cTUoR35ZVkBfbVRGMHwlQlNrW1pwMEdtcnxMWUZAaVoxM2UuUjpDQndNKDYqZkpaVkpbakMp''@;'; put 'put ''VTBNfnlDPWBrVWFYVFh1ZiwvW0tNPVAsVVJ3NiJUSWxDfE5DUjtNVDdLSXhoWDh6ZVVtcm5CRUhKKG9rP0tXP3s0PSlDeF11aHlwTzpPPHJyKEhtaUF0WUNXcjg+fUlVIVBUWCREZys0MUp7T0ttKDZLOEU9e3YmKkE0LG9aTHlmTEM4SU5ORDBEQX1qIWBRK29PMW9wN3M4RGh+MVVIWy4idVI9''@;'; put 'put ''ezZrR1p4Tj54ITwpQjcvbH5AcGsuMz58NmNdU2BAPEtMRSVyPU9KSk1VZkM5YjU8SldrbkdBdCViIzZLQWBgMksiXkRvNn1vUmR2b3RKMHcoQk8hO3w6UW48TmhbZjRxY0thfThAVEx2YSp+TGdNMTJQLjdVQGB3ZXpyKEdfKVRhKExzTXtpVm1PME8iJnZoLm4jIUQ+T14hWnxwKXxMZU59Vkow''@;'; put 'put ''LHFeNmssI3tjU3JLellTb35aaEpxLzZdMU00enVHaThpYmxAfW5UNSZudy5kKTRHJll1UGJwSz4/S1c0ODZbNyFQfmJ+clZsZlpPZiJJaTIrVW04SC5wcUZ1Q1lpOWx2MixvUjdvXmZAd1cwcnZiPyUpdGRndGh4WlJ0MU1nQEB1Ulo8dFBdUlZqR193VHVwKElENyYkI2suMG1XUT1rQ1l4diti''@;'; put 'put ''SmYoV1trRHhKUiVEMzMzJVJkdHhOMy8jSG9deSJGazdWS11KdmlnSntSamlLXWlmXngle3BZTn5GcztYaE5UfC4sNzhJKV9SalZRZS9tNCV6bzBkNF1AU2V2bFg3aE42V1FxZ1U3ZXhYfVl6fHJvTmBbQmlSSixeL3IidGRUOWRzNnN4SjVKWipMVSlqfHwwUiFwVHthL0UyK298X3tGSVNgclI9''@;'; put 'put ''M1RQNDcleHI0R1A9ZzRNSTNsaWJha1haRjcuPDBaWTp8dG9iLFVOcG4+LFlXKT8jIzpWRCg9VVszdEJRc1lWbW5eL2Z8dXZydFZ7eXJHX0tOJmNRdj86em9mOTheaUZPcngmaUFxWDc8WVVMNnxAZ3NlaGpbcCtDJFE4OW8xZWdGK2s/fm4/IkJza2AwQlVkT3FiTUI6ZiRsS1ohS1Z+bDdZMF5l''@;'; put 'put ''PU5zP0I6Mip5Tyw4X0B5SEM1USpsLGE5SispPmldbmdrQyIwK11JRWdJdTRTPFNESXVMemNmfmVNRFgyfj9WPW5GKGtQcyVRLzFBJChneVVBcjlqXnpLdTdqeEd6WDc6V15BTVQiJSxEdFEkPUssS0kmQ3VMQGxrRVZxUj5haS87N2pJQWY1KyowYFNLP0xyNyhVRUU5NkhYKDxIaj5fQkMleXN1''@;'; put 'put ''YVY2RU5QTz13ZUVGMSpIIXpgPn52fGV6UTtgaSExWVpVR3FGRyN4elsma1dKSjcmQjF4TDE8ZWNwRFB6fnEqOHckLElxb2kpQD1hbm18M0IwM2c4OWpZZ1hUTkNXLFhaezUsJGRONF5kcXptMT5adk1MZjFxKlMkWTdtQ311Zy5xIWFodDpnVFFnIzEycHw1enFdcltSW1BpKl1SM2xlTUNVOHBp''@;'; put 'put ''V1V0fGp8aWxsYGwwemEwWmQ3NSNEakg2XWhjJj1mYjh6alRAMzpDWS9eKmR1bmpScEYlWUV7fT8wLGQ8MmU1Qld0P2diKEt0UU1SISt+JnEwd2FKX18oQHFjVGV8KE1bZSNEXUhNTS9rKW0zT1pLZ302R1pVMExxWCEmJHNudCt2N1Q/OWtpVXsxe2lxOFE1Q3QofE5rTSUuYyRSTCsiaW4hN2JX''@;'; put 'put ''Zz5WQERKYlBKO3UxZnMkeX16WFpZV05CSDNxKiN6Qz8xVUhIUDNNal1NPFspbkV3YmJUdlZvZVJvO0t6LGo+NCVTSEFaWjVdOyFHeSxfV1RPVmU4R0lYZzFwKz8lOGlQW1haZ3BiI21ubTNpYk9QMEdxczJPcC9pNihafVAoeC5PRWJGUzBlXzdFOk9QUl5EPFNNK3FXeVZaPnVFT35eYTleJSJ6''@;'; put 'put ''X0AkNHgqbFpWZFgiJjFKLEh3dXAiSm9jO2FSQTlbXX52WUhfe1J7SDpkd1E6bmVkUlMyaTtseFFZfFk4QTM6LGRuT2hOS1ZDQHZTSmNUPzYlWCpRJE8sVytleDNYTStue1BweGxEV11YJGllcFV1MmBPWmI/MTtuOXd0bVRnaTkrNlszSHAickFFYiFeOCJRSHM0bG9iUmEianpTMExGOzdoezM9''@;'; put 'put ''PE5AVTluczM3cE9ZT3xiJFJIYnwuKXljUDxiO1suWWUxIUtreElEZyFKcipDQUslTFVqL30re05sLD5ua3xwSXtORUJzRilxezYrLmIwMEBwckNPXyZtfUZibUx2Sls+JEkxWzt2YXR1eCZiJklyd3FnVipMO2BDTCh1P1MmSlN6TjtpPl82OE9CPzl5YEd1eVB0dVclWnY/IStwODssZmZhWXtj''@;'; put 'put ''Y2RCKjc5LmQoV3dhcl9FKH5SMVdvYGNbMVN8UFo+RWlIcD47LCZ7VmFsITlsSzg8ME4wa2N5UkV4Z1BoPXpYa1dXT3FIWiV6ay94OXJWejVjOzBRY3srVmdXaUdXUzp+KCwvKyJHT0NwVixRe2FEOX1MXkNLdCp9OiRTYUlvSmltbXtNSVk8W0pKaUJ4WVQ1V2F9Nn44Wz02Yz9CdlB8dy5sM1hj''@;'; put 'put ''cVAjVz80XytqMT08XXQ/V2tqKU9FIV9QVDJxbj1lRlZASV9WMXg2TXFPcVtieHJxXyVkcEBWNmIrd1hgQylUeHk+SnE2LzlWKk9HPGg0ISRRKHhiUm8qPkw/ND0rW2wqcFY9MVNVNDJja3hPdFBDUCFZYzp0JFkuWDImKD9FInRQJkxuKElqM0AkNDoxV1ZERTU3NUtqWHlxMlVdV3B9UGg8LCl0''@;'; put 'put ''TFNoVEQydC8sYCJCJjc/by9xSCw9I0xqQVVeNUwheDZaLi9VXm1oWGsjelhvLF9+PzFGbVV1TmpWREY4JWZuX1A1fEdjVyh7e146SVMwcSpMUH5FKSUoTmQoe2p6S0AyNCp9Jmx4R25VPyxxRGtgV08oVnZyYUgvJm43YSJHfSxQMClQYklzL3FWdTttaS92ZyNefjhjczZqckNQMCZpUWQ+MDwu''@;'; put 'put ''WzJmdyZuIXpnJmouZTp3NGVbPDk6ZnBKIzJDIiUoblZgUzojTUopLz9SKXFeKTVmdVBxKS8vPzpgJDwkITZrUWg6U1g2NlJmN24rNV1+WkpTbE5oaWplNWNgL1tOTV1rLmYmRjVfa080QkNzSTxbP1JzRm0oS3VsPThAQDRld19RY29lKTlnSDo6ST5oUSgkLHpYI1A6WDNfTWUjNj1aZCskIVt1''@;'; put 'put ''OnNvKCpNcTJ8O0ldNEFJNnBWWy93I1NGNlBaRjB+Py8reThgL3ltUHkzVmxSa2YuKXdYeF16L1cwNXdJd302NkFWOl9tK0NxV1FwRyMzJGopJmIqLjomST1TLktCLD1XRTB6IWUlLlJ9ZltKO3chalcse0lGbloxTihLX0dVRDUsRC9oOnkhOy9CbX1pISxXYWpYd3x4NDkvSCQ8WzF5YD08TkQk''@;'; put 'put ''eG1fR2BIRCJlUDw0ZklAPGVFQjk5fCNXfTFYLEJCLCZEJChtTjE5V0VTLmA9MHFjNyF0OUhbNyVJOEl0bVY3NWBvL1MkM0c8XTx1OVhKNjU6cSldJWhAOjVxdndjYCRPIkl7R3ZpaUovOS5QSU90b148cSNMRlhBJmJiIW9ObjI4Jl0iZCo0IX5OSntyUnwrZEZTdEM0bitJUjF8Kk51W1VJLkh4''@;'; put 'put ''Xk82VFo0OFpONkx9XV1JRF4kKixlI2RSZXBzaFB5K2NtWmEyWE1uOCojKkJZfE94LEJsN0IiPHhPQVcpeTAiQ25XN2ZzN1V3fmJ3dWBNRjp0cnNHME4wTFRvaTAiRkdlM0AwIz97Mj9ZMCtnKWU2VlFkWjhVPldNKHtFaCxuMDc2ZWNpaU44eFVTP1A4b217IVJPRzZ4L21ZWSVgVDF2eGJeKnJY''@;'; put 'put ''IlJEN00obTVOViVfcmMsTC95I3lCZVV5PW9ga34zRmVwJSkiK0UzRk90Y3h2NUpmREosbzgqSC5NXzlFVDBTcyhmRW16OVZDKyIhQ3pBI3RQWFg5O2FlR303aCghMDI6PXk+M2cvOzkwMUdKL20yMl1gbyR0RXUuSzQ/dmYwJVI2RGNWKzdKbmooX2txX3pnSGJ7QkhQenUqL0ZkI1ZqakY4fHwh''@;'; put 'put ''IVVNN0QpbnZMTDlCKl5VV0FTd3YzMXY4V1hTdlVueG40VEk5fShKaV0yTWdNYSF7cHtBPGgkKlZifE0sJD04YVRhXlZaYHdNYz5CMFk6ZyF9OmdYNWxYKCpWYWEqNXZ3THxqbEMlY0oodUpqSFtnQlsod3wmLGhYcUNFQ0Z8UVU3cWFabSR4eT0xW2QiK1gkXS9GMns5U3NLakRoVmRJTzlhVyVJ''@;'; put 'put ''MUYlZ3RqezhGazA2YTRHTn5GUlM4Wlh8YkwsS3pBbTdSbWl5L3J2TmBiN2lAJGZaOD4pQV1DcW9IV19uaUllJlZdeVFtO29uRDZAQTcrek4lYGQkcz1QSDpIMnx9OzA0I2FlalQ2VWhWLklNcW8kNUB4TWVeSUZbL11VLiFnakJyb3tUdkkkR2c5eWAhYG8jNiIuNjNmZDo6W3ciUk06Wy51fFtn''@;'; put 'put ''ckU3RXlqY0UsOnlSW3pNLm4jczI0RERlaCNXUDtXZW9ub2FOPSsjPWI6JlJsPEM6V2JjQCEqMnl3QlN5UFF6PCZ1TyVFcEMwJVA4S0x+ekp8MipFdlJ0OXxqZ0R6dFQlYCVUI0hVUzUiMDVARmB3d2FlRSEsWzdMcipiTGZOe1tsVSR8cyVEW0FdQHM1Z3tkUG1fUmJSd29PUDgqbWlGTjxrOTQ0''@;'; put 'put ''THhTZnBmd0NqZE9vdCZVLFdpd3xNUGlFOnw6WTsoailDfVh6OnphblpOPylJPXkxXSUrSixlZUV5cWZIYXo9WTp2PC5CV2JyWl07fT04VklJI1IiOWdKJjBoREhdI3F5aXd5MzBde3xkQG5jWjEjcmlIbGxuNW5FY2Y7cSlPYE9YeUxAIjFyVX5XRUssPl9bSUFLS0o8UlU9T3J2dnFrW1hQJH0u''@;'; put 'put ''ZVV5WE5EVXF7Nj9hWSo/dTl2UW1bbXdEb05OQF58P0BjPk5yUTdBeG93bUdFUix3KCQ8PkR0WlVoSk03RCtGJEcpV2h+X15ZUTAqZHZaZitbc3psWF1yWkNLPmhnRHAjJCJFSz5LbEpKUEB3I0p6eVYzRnt3M1sveEZUJG8wKjBIPHl5YjN2IlEjXiNnPXVFOy58N0pUPFlPXUEkVy9yYHxPSnBA''@;'; put 'put ''MnFUb3JvV3ApKzZ3bUdRRkhZaCQ3PWg6ST44dWx7dnVze1YvJHQ1fjxDZToyZHZWejxRR0hGaDhLV3tIbFIpPEtOQFFeL1ZQJHo2byJaRHBhZTZZMXl7VV1CM2JAUXFuYHdqQTRiRlkrbWUvOVZ3X1gpK2BxPCQkeSJ2ODY1MkgwSERCSCw+PHhvdEl+OExwa2h0MVNfaGkxTCh8UFRwLlpHZypa''@;'; put 'put ''Pj5sc0BYc3JtbElDWkNOUFBlMnQ/WllaXWQxOTQ/W29YQnUmOE0lV284XUZIb3Y3Zz55P3d1Tl40PlZwT3ZZVFtfIkFNVE11PFZkP1t1N1I4Q012c18mKj4lRFgxRzo/fFV8fD5sZ05yakdCQzMiW3ZFeH1oMixLQlZbXXJlK3RXMDo5aTV6ajRLQHlOWUpsIUBELipyanEuaD1hRUpYSE13NSh3''@;'; put 'put ''JmA+OWYoL05mRUwrT2N6TkA3SDlAQyVLLk5kOENRR1coQi5pPm9mSDlXXlhJViI8MTpaTntRdCQwWm5hJEEiTEUyI1FyOW5Fc21UW3Yidk5vLi53KzEoNzF3d3EyXSgsS0p2JnU8N2BObUVhTWc4SilZImdiNmYsMFgyWG01Syx5QFVxaGNaV35aP3kyXXFVOF5FVDVQQD5gLFRIMS83ajBGb2gi''@;'; put 'put ''ayM6KHp0X05heFQoM3NZK01adlpMMzFAdzImVjs+Xkk7SUpddWJIPDdIXypbVEtKbXRNcDNPKE1nY1B7In4+K0puViFNTG5kR2V5QmgmRG9nO15qWHx4a312NEJBfiNfaVkleGJXOTI1QFdBOXBRKW9Ca3ZnUixrZiZ7IVooW3N6Q1gibkhSbiw7WW1vZCtrNCtkLG5xeHhmfnZhSUg2YTBafDVT''@;'; put 'put ''WTczMnNmOkI1Mk1EaUtAKlhkKnY0YCVmbFR1S1AoUHpKL2NZdk5rfUh3PGFablY+MTtlbC5ORlRzNyNPNFlrcVs8OTdabjdPfT1Be0lVKytQemdfP2toPHMpO3IwTyJkQT0qNHBVaVJyKzwkImJCejo8fFB4YHRgeX1mb1JqamcqQ2FCai51QnVMeyZbWSp6YTUvanssT2J3eUJiLzFrTiUwNik0''@;'; put 'put ''PmwwVG9IW1MoNDRPI2deaDE9WyREOlpHQXxsSykmdSNJL1U+MHIpaVc7fkBHNFo+c2xkV1lmOSFNKEhZIVVPRXtCZmtMP0FDPUlfQH4rJUwqLlZ0L0JQazRrYS85UjdZJk5FMmg7Sz95KHw6e01iL11rc3dSOD1AYitYRCpVbjgsZn1yb3lPT1FaOUVjekU7MCRNJTUoNE1jdWRkQlpIcjRLcjpO''@;'; put 'put ''TEF+Pl9sVldqd0J8PUl+cXFgOiNIaCZ9emtwaSFeczUyLGo4Sik/TFIlNFdmLjN5UT1MRWBaYjdDXzN+VyZffCxEXiZhKG1nNVJlbiQuOjRdbmBTUDV4YDF7KyRJcD1FPk5tdF80SnVrJTp8TVcrVXoofFc+QXx6UD9AcWw/VnFFMj4/W0tDSUtzUj0oPFFvYl0+M3R5b3JdJipNeE1xRTN9ZmlM''@;'; put 'put ''cy53OENoRDBZei9nVGhTQkd9Nk84VypeL31YWSgqN287TWJEUD1fQFhDIj9yV2c9LlA3PXBTXT1YTTk/JCJDW201Z2QjI1Y5dmtKd04rIUUpL2UyOk5EPjp2TldnZi5ueilLSzxjJWVxZytoenZuKzVRSiNaR0M7NFJwe2Z1OyVSYltga3FzbDBuYXYwej1GUD88U3s/WS4rYT5SRDFhWXd2KnhY''@;'; put 'put ''VV5WeDIpRWskblt8RiwzXXxkV2MqOmRIYS5HNypTWzV6S19DVXh0W0M8ZDskMUUjS2FoViI7LF9UbnxxdXtDQChabldROzJbKmpIXU89Q0hrfSoxKyJwKSo6bnpAIX4lWmhPdH5BVCNfIkRdcGJZbyFle1kqI1ZMdCNeWm9XXnEwOVZTLnJbfjZIYjlKTENhWWxtLlpkLEUjKyI5XytMI3kvQk1w''@;'; put 'put ''X319X21VLkxTZmU/SGp6OzxXbzQ6WE4jVTY1bGU6JiI8azZEaWNMJlJPemM7Qn0vSkleOiR2Q3tjYH1eXjJjQiQkK0ZYP110M1lkQV1aJlNjcz0kZGRoQmQhOzNHe0xKRTAwJUk0TmBDMEo3MUV9eFVxe3BaTDFZVXx4YnRsSUJnYT9OU2VdQUthNHF4ZjBqJXtFQ0R6UF1WL2FZIyEqSDlyQnJw''@;'; put 'put ''MHhzSmZvSiQ3IUMwQjpNJldxIkc0OExWKSYlSiN4dzxnTHwmTX14aUUybT1xeD9nRU1NZTxeIU88RVFla2dqbDxKRmYiO0M4fWFPdj9HdGp1TkQsd3s/NCZpelR4Rnc5SVBTNFZPelZQLiQ2dGFwYVBmcHpqNyhNbm8sKTNgQHVAY0tAR2JQT1Y1KDZsfE90MG1Mb2Q0MU9TTDNESHQ3OVZ1YXhS''@;'; put 'put ''RVFLaU0rLF1vWzJuPlBTdEYrdVQ/WyU3LzV+el4/WjoocSs0PSpPMUdYXVV2SUdSdkdOUUhve315cSppdkcsSy97JTVyXy8rYXNBUEBlMyZ7Ky83b08yLmJtVmx0aSM4cnpVcHw3RXp+LF9JeXtVKVhaIiw0NzZRfnZBXnI6Xmxde05oInI+VXFfU0JYOTFNVERvWjo5Kjt5ZV8wPF5VZDNeSVBp''@;'; put 'put ''NldXPiomK2hEWjc3Syh+IjUxZkhpOl8sfElhe1BeJiNZODouO2EmXXM1QEw9N0YhVz15Xyl5QXJlPVVKJSE2fWR3flh+NmxGSTRfP0YmJTB3XixkSCgvOmpnfGJBMmQzL0Y2XlFgKUwkcShqSHNXbzlOJEBJK1hCdFJBZHF6bWhvYzRtJnJ7fiY0aDtLcUIjNDshWSJRbm84SzhCVCE1KkhLWC4p''@;'; put 'put ''K2RERzM1dkJEeGR8SHNOJTZCR3NDQkErWlp0LjQveGFoSUlGYU5IVjZnflptZUA2IkBnfExhaHhCZSNBdSNybk0ueXxRKmNEZD5wPmpnMyY+dChrLkNKd2doQCpGQnZfKFBnJldTUS5ETS8xcT1tRXV4XSw1b35ASE19ezF9SmkxTkI1TGF7Y2Y7KVVYXi9leFpsPTFpdkBXa1VtZEcoWEx4Nnks''@;'; put 'put ''a0EufnUsNUIpRG4jJX1ddl9bYG5PVXdiZHJFLig4THIpMVdTcVglcEIyTW0sYHs2V1d6bHYwNjJeeTRoSTM/aXhjRCkmJDpjTGFdKnJCY0V6YFc4UzRqez1RS21GTkBKcW1VQU9nY0t7VFgoTjlLZkoxbHIyL1htImZUQSQ6WzNfL3lASCErclkzO0lHeVd6Qj9Yfk16S3pNSDg3dkdaYj93dCxz''@;'; put 'put ''diEwfmUhTjZbUEl4cEI3ZCV9SUFQVEBOWUxnMmNgPzFiWkRbZFAweEUsV1JpPi9kbU4vLHRkRkg1Y0ZjWWtYWkI/aWUjJnFUdWZ4JnNhQ2twQFBOdCZZMGc9Y1ZyfWs9ZVdyQERZbzN+XkxURDpUaCtqTSE7cF0zQTwsQWBmOTI7Mzl2d0ZVNUYkZEZQOUpORlNScTZodk9yfmBEdn5aTVhbe3sq''@;'; put 'put ''On0xJWhFYW1HPWhhP3x2dzloTn1zIU5rV35HOX1VdEx1fkBHLz07P2hvVTRAMlMpYjJPV2hKQi91QXtdUEBvQCpCd2BjZCplcjxAfCs9R2BQYUtockZWc3UpK29TQ0h2MnUmT3sieHpJMnFOSTRyaz1bZEw6YSNHR10qfkJLIj0qekJKP0ZsL0FecD4rIlM+fCo2TiopSk81bFA4eGxyfSs3P1h7''@;'; put 'put ''TkVpRmF9LjttTmY5ZX5JUnAkKENGanc+Skc5QTtyM0xwcl4ue05GZGhLYiJecytrbT5dJjVVTSk9e3JSKUtAPV4kOFo7W2BPYTk4eXI5TkB1flRIWks5MFA5fi5zaytuZDVWLFhwcmdHNTB3eklidDcyeFtHNXIlZzJsSGtQK319cCYwVXI7LC5jKElRN0I5JCR+MX46bSs9dHRvKjViTDtneU05''@;'; put 'put ''KCNqemUzQTRJLyhGcVd1WT9dLmU0WTRxIlZAOW1sS0pvaEMxa1lwP2trW1p2M1FgSkEwMlVYI01ZQWQ/eks/Rz8pITVsW1FFW0prZip3bl4jY0h7czxmZFdLRkAiKl0iTEo5WztKQiQhUU8qXlB6dVZAbkt3bF9vKH1lN0pxYlJCOkpqIlFTZGcyYTglR1RGKlVQOlNdc15GQ187ay93Z1lGbjMo''@;'; put 'put ''fFFycFVEeUIqYmFmSH1OTTlqen5FRV0+QyhJOCV2KT5tZ2lTaVYufjxYWlFvLHZHXWFaZ2FuS0J6XTNwd3xCJjNnJTNRRX01UXMiSnlrMF9lQHpyUixNQkdidWhTNElHUTMxJVAuND9bOWZWTzo0Mz5qdUU4R0JyempZO342SCgiXj1KVz9Je0NFQEVkS1dWQ2JDQSU5UnRbekFxTm8+ajdWbVNT''@;'; put 'put ''LzI4OlYsNFNndkJkLHUkQTd1fWFURnIsXSMhekI1RyQ/QWM0eCJYQy97aSZSSjlgfnw3fXBAOz1lIlhbSDFNX0pfKE5DeyhhYE1We2tGNlBCI3E2K2YlcExCY2piO1N6ayV9eHs7LDFeR0pFU2l8Y0YsKSgjNUBTZnJzM1giZWM5SjpEQ2hHRW9bJHRQPEtWZVBhcWBYSiNTcTIiKTdiWlEiYXlo''@;'; put 'put ''IkM0LFJXZkxMQW12X0c0I3MuXltPYCl4KmolTCs9W05ZfFl2UV5yPDx7dGd0eSF4Z190clMlMjZCYkQ6Q2Z6OG8jOWNeMEY3cjtCcWxCcmx6NlVGb342ez5TSllySHU3cSxiNnw9Q1hMTkBYfWIkVU1fez1NQl91Y08lI2s6UztmLEcldXIpKHRpd0IlLz87THBSZTZaL35ZV3RSVyEwaml0WCE4''@;'; put 'put ''Slk/fXIlQT9DTWxHOk8jbV5ZNEJGMylQPEtAN0RzJH1MN0FJSHVaQ3ZXLjk0JituazVRdl4oUX13N0xLcX5Qa148dXpiaUBDSV98WXpkKzRqYWNPTW92bH4/Wj1eejNANCwvQSkrIyJvODQzWnppdSx6bXtaPWUwNERLd2I/Sj01bms6cDAyQDcqSGlSY0ZDVSluIzhzSEBBdkl5LyR7UCUvZUhd''@;'; put 'put ''NDh7YlpBdjBNfm05WER3W0dpQyQ/X0osb3syKVNmWltjaVN7dlRYcGx3XV1HW1YzeyVVOmVDM3xIaDFpY3c5X1E0QSI9UDsyb3V4fSM/IiNrfVY2YGshSi5rWlBtNjplbHI+KFJ6Xl5LIlY+ZWFKdzdHKmhTZy56S2ozZ0Z9S2IkZWthJSkuaSF8dl96ey4rbCVkRm5JOyY0NmtKSCltIiFYQktH''@;'; put 'put ''U3YxX2ZaW3hjY2BgZFJYKkQ9em53eyR7P0ddUVB8SVRVJC9wSjZZJT4oWShMInMyLjtASTFNeXkvdHRzZX5AQ3dOY11pcjtbWEFJNFgjU2BUQzlpdTpLOEglOkFIVnR3QkA1Izl0UFNRbWgjazRaRyh5Ym9hbGBlSGtednMlMDNOWFgoJT0yVGNdZFNpKHQ3cmBocTkrcnRHRWMoL2c1bSklISNG''@;'; put 'put ''Oj04bjJOVHFuWGA3eEhHYkBiUStCR0lGbGUmbUxeRGldOkFqX0xmZGVwQj09QXlQfEVoV2xnYGA8SUB7PXd+cU1yMVp+XilLZU9+KHZJTl1HaEc8Z1s7KiYrekBIQnY/NU0+NzJFUiRGLztQOWlLRXVpT0BdPVJ1Ql9UPWRSeE5iUXY3e1ZjPWZfWEBKc25UUUJ1TTxjVXA3Wk9nP3pgbi5CI1Bl''@;'; put 'put ''diMpPlUyZyNLUEVwZ2gyXSs9cFV7bExhezZ9fGJSR3U6TX5EV1IpZGZlO05aOFAwUCkmYD9+NiNqIzRFO3tYWjk4P2diZyhXPT9RbWMpQ0Akekx8eVdYNFB8K35tbltKN0VUaz08blFRbmFoallPcF0pPWhxMmxvSCpINkBNPV1OXS5tWD1PVDNxWzNqLitYdiVKTFdyX0xKOl8wc2lXZ3c3VExD''@;'; put 'put ''fldUOzZCay8hRkNWO0RzSTQmQ2FqfitjYWhwTUY1c3chVCFsd0ArJU1AP3V2eDFJZ3YrOl0+XUB+N0leMyZRaUcpfGVDXj9HITJAez1mIi5KI3JgM3BlIXF9LndDbitDbUxpVi5TO2pTKkBWbzZoVCF5NVJGZXFxS0pXcm5rdX4/ZE1HM2NyXy5TKjw6aTM6JjZ3JjNQQFkzKXRaYmdsOFIya0tE''@;'; put 'put ''TT87S2dgRVdOO0t0aC5UQkIpZDd8WzNfTXJCQ3pvbEYoQmIrNTZfQT14WDc7YEN3SWQsSlgiWVkvQXUuaHskVyU5WFZ4YDAiQ2skMlJ3eyZqZ1ZOaCNnPW1CK0MoInZZMWhIPWZqVDpeO3Iia0tybj9YZ1R4fEhOY2skbDJfVDBQaiNQanIuRXIxV0d6YzQsfDw8W1srTVRIR3VMX2Imb25XM3py''@;'; put 'put ''QDhkOG5pUGl4a15PbyVKM1J6akhiZC9gSE1MdndoZmgwMDRoRX0yS24xWTU4M3AxcEAxZm1HdUNiUHFOano8ZEtzNlFITi5AYGA+Rlh+OX1AOzgiWV91ISFwK1JoLlt2Ll1Xci49Wn0xYnFmRTFFO2FgPCpUWGJhOWRqWGtMU2JWe3VtXSRTazt8InJALHJTbSk+Rig4XmliP2ElTGQvL04/Vnch''@;'; put 'put ''RjtlR2hjSHRLI3x7ODUsRUJXU1tWfXxWaXlgSlhSJEtOaUsjfEU6JF1vWyp5Km5aeEFhWFpGbXx1RFhFKGhmS08xTGYkeHVJSHorJDtBaCt1Iy9BUDdWe1JqJmFRMShaXl5PNWcjcGlANmEpSjFeMnhCaXB5Pj9VRDI0LGV+Wk85QSVfMmRQdDNsYjw1MC9mNVRzYCE4Uz46Ikk+NUAjZkIjSThv''@;'; put 'put ''Zz02OClXMk9+allONFRmbjhFRjQlS3ZgUmRqQDBiaFsjZSRUUmB0VDpYcjBXW1ZvM0xmPD9geiJbWihVSCsqP2k0RVEofkUlUjdrOix0W0UiY2NLamZuSU1UOXNDVFZqMFM5cjd4a2tRaVI7YiF+TzE8SilIdTFDYjJhaGpHTDlEVFRdVW9LeDhnK09kVVFtYEpmJCpxdHBfY1cmRnpQby87Tkg2''@;'; put 'put ''Y3QwZ1NqWCFlQDVWdDZMMHlqOFV7a24wVWdwdlI7fiZndkR7SGtFP3dFcW4zeC9hMlImfWhnR3dfOX0lSDAhdG9XOX5hP34vXTN0cXxfZiIhKzk7MjdoT00rLGh6Q3VdISRXXzVrWXtpej1jNlJ3ZU04VjpUUCg7WX4pPyw4IV02VUI6fURjdF9uU01GQW4lTmJoS1RkLCQ2QSZQTSJdRENuRkYw''@;'; put 'put ''Mn51K1hsanQkdEdrbzhIOW8lcyJwLlFQNzB+JWR6WTo4dylFeWJQZndUaF85a29SPzBZW09rbm9WKGtIc34/LypfXkYiNClucXJuK0o0K05VX2RuIV5zSS9AfSVmXiohcjk0bEJlPEw4Nk8yPypHJGBAKlsheCN0Xl1yUlVfYD8qd0RbY0tIbUliPk0/RFkuZ3J1cWJ8a14pWVZxZigiRFQrV0xl''@;'; put 'put ''eUdFaDNpYiltT2JpTX1fPDFedVB4Mmw5XWNbOls+My5TdE51VF4yKzZyI3ZIMU5MalM3an5VQzlLPz5ZbS5VVjVfITc9JGQvI3VpUCtmNDROdHU3e0ZzbnFaaSNpJC9IJGx8RnlGdEJwNXIsRmU5IzpQaV5DQDBCVCFkc0ZhXl8vNj1GOHJLZDpPbiN8QFEzYldGezBfI0ZzdUFybHBkTDsxSSx6''@;'; put 'put ''Oj1de2AkanxVXU4hUWRZTHshYCFuJjtbPVFSSTNHcUhORDdDa1trdiZWUHROdjc/TVRkV1o+JjkjeXdNb3pAKmdDaj5SLyE5eV4kaGdjTnllMDNoKGgicE1SNEQmImZCVj9eQGBGRWMlVDFFcSw8SXV+L29WNytJU2t9cXksPjhQel0vNHIqSDUiaEZ8NCEoPm0wbzZKZCthRTdZX2NeOitAS205''@;'; put 'put ''ZkZFK0RPVVB0REswVEV0IUQyVTR3UHJmZ0k4ViVWcXlDQTwzVStpalglJXB6ZDpOIz97InVkUlU7MEZMS3JmVGNkcl5Tfk5gS1chNm9LbW40TnJIaDElSVsqSyhaX1s8PyJsflZPTXthWzdkRVNKTEgsJFBAfGhwXmw5VV49e0F1JVhLIkVoNGN2LkNdIVIoIXRJbXRaKThqd01XQnRBOTFsWTg3''@;'; put 'put ''Ul1BJWl9dWU5WnhxTl52RWpVOz5IPXZfMisoaHJEZkhDTngjcCxlbipLXiEhQH1SN25QOGFJKHl+RH5pPkddRV47UDRTWWlwImo4djR6WkQrS3BuODFbMSVSOGAxTih4I3huNDFbNXdQV3k6aD0iPk5taG8qOENie1Iwen48RDJWeDsxe3Q1YlpNKiRmQ1lmM0ghaik/b218VGp7QSpAITF6IWxC''@;'; put 'put ''Pz96RUg1W1VuXUc4biJgQjhRKkp3eGFSVWtzX29gQkR7NVNqZXwpfXJkOWJrb342U11JeWpUSFhtR2VLIlJNLFlaXlJueWVMSX0uMUsxPEhLInVzLCRxKnJXKHl1aSh4T3M4eCxOaHJKb1pmX2pKKGA5VEU7IUw2dDhCQklmcDJHcXhUMUFfbTkkakQ7dStEYF1SWztdWDNnSkI3aGc3KSs+S2BT''@;'; put 'put ''bnhIelo8QyEhZTtFQmMwQlspSS83RDJuJEs0PGcwajlYRlMxTWdjZi9ALnh7dlpuQFI+KEAoamQ4dSFBRSwwPCtKJG5RTWFKJD96alU5dEhkckUze1pLSmFzJG1ibDc6LDRBXlM9KkxZJHlHSm1EKFRyVGdsWmJjIUpFTk40Jk1Be1pfOGU6ITJ+eVF9WXpLVVExWkIyJUohd0cmfm9kP09NdD4y''@;'; put 'put ''LnQhQVp8JUBdcFc7a09xd2NsY0s7c3g3LEp7Z0VAN2hSM0JPdzk7Mik2T1Eqb1t7QTYodyVVeDR1ajlrOmtOZHI7S2c9I24yX2l+NC5rQUlqR31RQmkxayRPe3FRWU8vbDh2eU09K09KaEBXYGRGIjhURzVuem4mMyRPIXJlJFtvO1k6e2A0cElJdFZSLnMrP2J3JiU2eklpS1t8UV4vV1hZWjFz''@;'; put 'put ''Q05FYFQpdCFTUDg4R08qYXsxLFs1SkpSZ1E4ZzxlbiFLT3FvUUZoLmJSaWc4eTlKfipNRDhlfitWcSpleCxtNSgoSi8+a1klSV17Y1hFWXF7bz88OG1nfiZad0NrQ1tWKC8mM3hWKVFXVkVOVno+R1VIaWNMPTEvYSZYekZKUVE7NjJOZmNnKUs3K1AwdTNHaFg+USRLIyxhVjQkL0hHdSw7JipF''@;'; put 'put ''YjZuclZicTw0fVhXYXw/ZkBAUSElPHpaSSw2QzBIYlpEa2xLenBPZGhCVW1GUilIQz1Iays6Q0wmN1coKj9YZ2QwczhoNzlVVVYoWDNhe008U0QmO2BMaHIzSFYiPGdIXmQ7dnB3YkdWIzxxYGx+R2tofHojJEc+bUpDY0YzaX1ucUlAb0ddbkUmTzR7Q3gvNmNRUGNJVyF2YUp8bDw8XSRecUh2''@;'; put 'put ''PGYvVzlebSh8KmVQImhrXUgpeWw8ZSFaXUNmN1Q5Q2lucE1EVXtTVVEwVWMlTjdlKU57UD5GaHs+NyZiazA4YG5wKFEqPTN+NGhWbSNOJlc1ekIwWGZhSzR9a3JJej40eD96cncpPTchUXl7fjFrMXJSVXdIRk4rQXZrUHZTR1sjYUEzI2F3d0JZYTE+VlVIST9XXjZhdipZWEBvfUNtMX1Xfjg6''@;'; put 'put ''VHxsUDE4OXBld2V6OlR1ZGcxaGIsaklJXUVFQDJYPiF6QWckQmBCdHNyUiNEVHcpci46Xi9WUEBeUzRkOFcqNiFGOiFYUkpmaEBiWyFGL0BUPzxFJH5rfXh0VC8hK3YmZHo8bFJdWnFgcE1pc0lGKGZxa089P0dUckVPR15OMHY4R04mL1U8WjpFKV4yWDM9eUUhSjZkOEpCaThZcTdCUCZVQHx2''@;'; put 'put ''aUBLMH5ZOUUpU3hbMktjLFAmSEt+MWVQLjF+SmBkSG9Kd2JxMCZZeSZYclg/bC4vPW4vflFpbDUraEtAJHR9eyhtclkmZjZWbSpAXT1vb2MiNjZjPSJuQDUzYUBqY3NufjtieUs3SilWfVVAJnk2ImFwJGlLSSV4fld9VylnI2NgQCteX3NqKy9yUEZPUTYvNVRCMThiYlVpaUZJInlvI31oInw+''@;'; put 'put ''X0s4KUxuWlE3M3J8WnZMXmddVWdeQVhUPlNPXjtkKlB8PF42Oj5FUyEvUkciTThvWDddIkN1Y2k9NS9VZXdxdW1GdCFePnBIS2BKSFdKPUt+a1M4MXxiTD4sUmQuYjAxQ2hqW2kuNVdMIkZ5RXU9Jl5GKWMrNlNXMH59VD1MUzBrJX1POk4zJFBFTTwwPV06eSMwJVVyTDg1TSwjVlNXYHovcGBg''@;'; put 'put ''T31+WDNDeVMhd0EuP3NRLiNkdjB6KnsxYD9lOXMpJmk2V3xoMWZsdHEySW5kQ3M1MX5NSzdha0tDckJkI1ZYPXksTzFEKnAoZSY8JVlJIy46PHtbRDlOaSE8UG1OXmo3K1ZPWEUjZlkzYXQ5QG5vKX08RjFYO3VGPl9RUTsuJHF1Il1qfXohJExzMFVPZVUrZSlWbz1uQnA3ezwxJSJRNiV8PSUz''@;'; put 'put ''NU91fDciPC9+NmckOXQheXU8VHQxSXppcldLRGNNSzd7X1kkQm16TnMySC4mclNXJjRSc14mQ0Y7fmc5SzNlKXJyZU5dMm5nZj5JbmQ2RmRXRk0iQ083ekEzIVkoSzt8TVN9LEFoeWl4SnY+PTtsZ25VdD06K2s+QmxxKVA7NFlJXTlLeHh3d14zbmMzZHoodD5jc191a3wuYEwzbiY0fGkjWEE0''@;'; put 'put ''e357TTtWUFJzRFtiPno/RTp1X1haNkheR2NDVXBGazMwemx7MjRZamMhMyolbDZuc3ckRHx3YkwoPCFzcG1ENz5qQTlySHwzYXQ7UG4yL29tYztAOTdEeH57KmIjans0YiZdN0g4VTBVX2laNUJvdTMvIkpjeUV3JFVvbWdFOzJidXB3QXBzMCZoYiZReztQRVMzcl9aMko8Uz58NU0iOmMhPyVD''@;'; put 'put ''MmQ9UVMsVShJWnokYCNiZFlrNzJZcTh8X2g+bHghOmZxImM9fnFGT1hbPFt+Q1Q8c04+STJ6dnRIbnMiZnBVOjlqLlpUfEp4ajw1cF44eEpkZSpgTHVTIk0wN0QvRUIhYlFQWGw7SFpvZFN4Oj9eI2g1bEApSylGYjNZeS9DTXxjVzMwa1hAN2ElNiw8VU1neGpDV0l9JWlQI00sWC5dMThBeE04''@;'; put 'put ''Z0JLKEVpWHdPcjJPQ2lAREpoQ2YlXmt1cDg7YWlLWE58eWdbXi5pKDlNTnx6cWkjaUQqQE4vTGZSa15MUDI0aHcpYS5+Xlh5YzBrNlFiUFQrI1piJEBpJm9qMlNzaGpDQWk0K2tYMl1zeWFTMH1XdDA7IzspNEVyJDNXalp0JEtUOTFIPz43SnN6blRuYksyOEgrdDtOVX1rO3pOMyJhbildeU5x''@;'; put 'put ''MmlpaEpaQDIpSlZhVFhEYnhGK3hVWWtUTFVeJEFWKiZwbnh9ej1VYjl8fFs6fSVufCJtITh7bDwpdj0sWCZoXU9WTixxQGh5RUAuUT5nL2x3dk8kP1E5YzkzMTo0R1dSRS9TMHFIbWZ0ZG9IX3E1eT49XmU4N2IhSHJgbzpwMT84TFQ9TV9TWyx9Ji5sUlFSdE9OXzhwLjZ+TXI4TDEsUltiKi9e''@;'; put 'put ''flc1Uyg3U2tLN1NHITQ9cnFXLjM7JXlKKzV4dHI2aXdUI3VoWX05SnNheE1nVD5STkI/VWwqZTtfbnl7KTRZIyw2WjZ2RmsoL3MvPEM7JnNucztAaE0+NE83LklYY1kvV2dUMDVFX2M1dm5oYjRDVTo7Y1A8cUk9PGtdNylWJVloeFo0eHMse3RNcXJVOm40U006KVFqI1RSUlJeJGM8L2A+c0Bs''@;'; put 'put ''fCEkVSRPVn02Xmo6M1l9R3R0KDJhL3BibEA7TnhOTCtzSzV3Vy47XUNVWS4pfCYsc2hQOC9EPSJLd2s+RGg4P1IyLHsxbzNFdzppP0cvZUJDREFWSyhAYWlka0BtNzduM0coVCJHaGU7I0l4T2twMFRARGA9em15R2xTYWU8UFtWM1ZGXy8uI0IuUjNaQFZNI2RIYnRxIjElaStAcmRCYkc7e3pa''@;'; put 'put ''WCZxRi9jWmMoPTY6LEBvPlV8RkQ8PURhXV5+K28/OmY9enxrazZ6NisyYUIvKFc7bmM4PDNyNUpaOzx2RkReOEZNM0gkLmd4XXg3SHl3SiI1T3dmKTJiSjJpLjNwaVBrT1MmY21kODJBVXgvIVI+N35VK05SZ0prcEI2TFBCVVpMYDQrNTNGeDVCd3YsOkI4VnVed2kxUF1de2k7JlIkYCUzVCJ7''@;'; put 'put ''N2E3djgoYWwwUldZd3ZRKCFHfF5QOTFUZFRnS2FJNF10VClEUDZbS2doNSFicCFTV1p3YTkoaVp0cSFlekp7VjMhWT9AfCZ2VTZTeilWMzY2T3RvfE8mVj9jXzNZb251NGFMenElNHRHe0dNdzN2OiMlLzp1PXhCSFRsLG8oRkZyfWN4JnczeWI+bCNKcHheQVBveiNueHQsfkxAVmdyV1E5aGor''@;'; put 'put ''YzdFW1RNdWQkRWFlYHZJcVk7MjYlc31ZIUJ4dDlqUWQjcDlwVUQvdSE4bS9GPVlTMWdDWVMuXTE0JHRHOF17Z35vMFYwOm5bMjcsMXRVYjpkQzl6WHxLP1JMcWI1ZitmPlpoYCh7UjgwJns6NHVqWWB3cSV6aig1YVMuNkZUa2BaeW91fGhjKnZIaEVuSXg+USF2Nkk2KGdLTX5yenh2eVhtSDhe''@;'; put 'put ''WS9XMVtkalJeW1llZHJ+bH43fEdTQVBhTn04SyplbTwrJGJzU21NY24ldTdOPEM+Yko3YilaNltWR1ArbXAoOGU5eG83InUzaCZjJm1iNVRlNE4rdGQ2RUdPXj0ycXhUbjwvN2B3LnYsbHNEbnFLP2RJYzVzaHdDYXJfeyFIUS8/fTU7I24payUmOChaQFVYKTJxKSZbemdQUHFSezwqSDd6eGY0''@;'; put 'put ''VGQhYWBiX1dbLn5uQTJmNTRAcz99NzM5YTZMT2IkNTpvWnI0T05YKlUkPzJ0JjNNNVZjfnFhVGdtOWpWdVppSzpYfmFWPmM7TUJfeDFXWDgscm0yTiZbb0NQeygwZFJ3djF7aTRufFIjZTJxbns8OyJjUyZdfnB6dUdMSDpuYEMhRT49fDRjMnd3LjZSNzg6Xi9me3dSK152JEpgeG0jVlhRNGdV''@;'; put 'put ''SlQ2VnRWblZhZzJSK0pdL2A3L2ssKlloaCVMbEdJNXosejJ4KW11Yk9PZGFOdmZMRXR9RHR+eTVEOnFwdXplZm9AYEx1fFZILGxvPypUajAhY2kiMUgxQWpLITJMflBSQjIsRS8/RGBiWztXeE9fMU5+Q3woLjIqZ0Q/JElvJFtocUYwXXJpJEhpVk9+Kj9XYFdifjtSKld6eyN6PjdeN1Y0V0VL''@;'; put 'put ''MH1VYlVZZm5vWkdpWUkjNHcpbU1AUzUzQl9lRnhgZGArajh2U28uU0lwOFpuU0ZnJUIxRWVacmMrQGQ3dDBbNDd8cXNubFgrWXtdQSk5UEBUYFlPY3omZXJrSHR9fnlQWXZpT2BhMm1NLkReKTdqeHtmaVo7TmF8a0RPVnAqMmxwYis9YDhUTkdPTVUqPFlnREdKfVBzXzI0YXZbRUkiTkcpNF5q''@;'; put 'put ''KGd7bjBWdDRtdUZbfFArUjsjIXROW2Q2VlBnVWFoXVpQa2c+YSxhOCMxXWJ7ZTZ2MjxVPy5sRV9WNj1LPWckb241WjpwYT8vcXgxPUIwWVVZcTlQJENIe0MyWHgoKWI0eU4qJDZrcjRJQWh7cCYhTX1aVXJUW1N+MS46R0oqKDZRKVIlOz1mRlF7TlkpUkpfWHw5djd5YD5iV1JAWm9tb2h9azVG''@;'; put 'put ''Z21WXlVFOSg+Q0JKc2dSY11MVSU6QiZfSHQqUlhRWXA9czlTUDtZXn0zY0oiWHVeMkk6ZHgje10uT3doV3lWdl9APD07Y34sWFh0bFRTa1Qlck00PlYvZ1BpY3pNZXJ9Ni5tMHJdbnhWeTEsRm8hW1k0KE06Ql5yQTNuTXl2OWc0IjFSNCh5ZSlrSChmOX1IPT5IbEVQWVRCdUB5TT4kRktXLi5x''@;'; put 'put ''QS9bTG9OLyNmJVROc0hkbF1ALmp6NldTRlEmeyVVNnFiSUlFIy9yV1k+NEZIOSwzUjY5dU5ScWdQNC89dkVHWjV4Unh1JGxZRERHblc0TGRhY3pWbiE4WiQsKjo9JVRBIUMqbF9xaGJDemt2Wyo0NFQxVyZXfFBJbFBgU1ddKXllOT9+KlIwfEp7XyhhOFNnLjJfRjZmWCl8TVRGREsveFo2NEVe''@;'; put 'put ''bl5kQ0M/R2w1RyZFMU9Pak9XP15jaCFEJjk8a1lmKSMrYENxYVM/RGZGT28wTS9PdnBZfVFhODUxWDUyVVdKfkNpYEI1W3RoXl1EKk82OCw7JkFaKFRdYT04STJHSz5gYCx3R1hZWUVNSnpONTFbLi5OOmk3MXo/ITd1I09GXnk1QnZtbjFmdmJrTT08MUZSR0J0L3s4UFM8dSJofHFRbywvOXcu''@;'; put 'put ''RkVpVXtPYWY6TGdEJCFHcmJHMC9xTUZtdiVLPnR0c2MqJUBUS31NanlVM182SEBuUz5EYmB5en5KOE0hQlNlLnE6aD5zaEM9bGIlcnR7dz5QSV80QXZyTEh7NU5CcE99QGF9cmxjZlRzb306OlEoKzpaSS5oJEVdazJmQEdBWmJPZ3coMDk2V2NLTGVKMXc7KVNJcE1ZdmFkIjxnLGJudGN0dElS''@;'; put 'put ''L1YvJS48TSN7ZTU2fXNEaTgqV3RKO1liWDdpRVJuQT91JXJXMUpZNksyKyxFWnNhKS9hPnslcyE0ZihsRDVseH55VFU5bTtoPzZeUmNUXXxUMC8iajlVVj1Qbis7MjomP2dvblc8PU1FfEl1aEdaNDYsajJ6dVBvUSZuSj5nV0psV0MjeFlGWHhMLkMoUTFCQWpRUlBnUTJzb1FbZyV5UFdsXiVm''@;'; put 'put ''SSRbQTI8djV8az1abCZiQExNS3o/I2Ewc1A4LjFEMkx0Wil8IyZsM1MsO0ImajVdXz92PV9wIzNeVldxe34lYUpLVlpJR3UseGl0OWFJTmQ2eC5pMXxwNSZORkl7MCF0M2l+KjssaFgwZkBaSXphZUM3YXshfWZ+Z3wobDZUTmRLWmRdOlMjOW9FKnVkSURDMiFjejFgaGZfMCxSXV9wSlhpUWBF''@;'; put 'put ''SzZ3N1dYUWl4UiZlPndeM35lPFReSWR8d0Rhe1tWakksUl5yXzt+aVIhVTE7VjRZJjspfFdfaUVfWVdUM31RMTVJcm4hQjlwcyl9ZGxDe2VIMHpZfkZUcXhNPSY5bGApTnFPTiNKZFs+OyFvbm9fImxyUX42Pm4qYm1JfmpqMnl2XmVDO3lwLDJdPzRvNzloMGdeJS85cV9HIj9zdFY+MkgoL3p8''@;'; put 'put ''RFFIT3k3cjF3aW9MNSEySnN9RD9lZkxRUENGWV82MTlKXjRjPkEsSFY3a05xclVDQlImJkt+Z091JXZqP1I6cFZkcVMjTEpfN21iSVYjbT1nQTtLe2FvXTx3XjskMS5sZ1J6TjMxM2wrbGQkP31NfktfNU1OWEA5bn5Ze2Fqbn5mLGBrcmt2T2slemY/RERvbS9kYGQ7SDx9eEVHPWUleEkue1I3''@;'; put 'put ''USk3O1lCfUgsajBYbnxdRW5IZlp0Wj5MZlE7cm11MSo1VlFuLEs+OylMUHhUeHZLQyZ2ZWlyR3V3YWEvZCIoWVF6W3pJUFp9Vm9LdzgvaF1CcThAPzB8aShtYH51OmA5MVF2ZV93Zmx2eGN1aWo5fkw3JS9AUD5kfSNrKXJ4MSp7QmZhVTEpKCRhZCUjdXomRmQ4ZWEyZCo4X1BLMzJ+IzVLSThU''@;'; put 'put ''PTZlJnIyOWMqRjJyMHtQYHdCKitCKU93RCNjZHZbO0ZqTixFaHkhcCZ8fTp4Ml04fCghQThTIkNlVTlzLHE9ZUJ9Y3c2P0R0N2hQQmUkZ0FkPS5fMCk2NFoqLCVmYWZGd2diMGBsbG1EdCVUaiZJdjQ0NU9VQypCfkJYTHFSaWdPfiFaeXBqaD4iXSF1Njw0YS8mfHU/VEZVQUlCKiI3TGpVQDps''@;'; put 'put ''OWp2VVZsenFOWGdpRUwyb3xCVTRjdDgxTzIyMSlTamdILjFKd2NWOEA4TksqKlNZMC46L0VuLFYyWTJTXjopVy9BYTQodkcqODlEJDUodTMxWzZIOE4jTChAOlBxK3A5QCp5OXF0MzgkQ1Nobj9HO3JVM305PSY8cWNiXitaNkQpfEEzMWJMWzIlRElWNmlZKUZLbCs5RG5lKT5uL0NMciFrOiJo''@;'; put 'put ''b0AiR3tgZlRLUHUjT1BHMUxLKkl6Im86ZTBiSSkzPmpRdVU2SjUwKEJgbDdydVhiSShUaT58LjkvR0JSSzhneHQ6e2VlQX0uc3k9ezRbX3lhVy8+bl0pfCU9cEkhT3RdQjdkPjlqU3JdPC4wKHwuZj01ZV8mNGxgKzZjZUEqUXVCcVM4bz9zciUjL0Y6ZGpqXzUmM0ddaHQkN1FgMUBPT3U3JV5r''@;'; put 'put ''b1N2LH0qNDdVQz4+fTg9WHlVND4sZDo9PkV4MF1BMnVwKkd3Yzg9PElWJSRaZGZaUEAseHhQYERpPmA1RlZRSGNiQ2lYI2JDNillLF9rP3pyJERWSF1dMFgre0wraV0xXnk5KXZWYmNdKX1yVU1GXnlufC5ENC98Vn5DOHhrcWF0fTliJixEJEtyVTYrPzZhITpFM3QwRUNhVGxmUnQwa0k7Xjg0''@;'; put 'put ''UE5MYEJuYEg7eTlHRH4hKzZne3k0LHtJQm1jPU4wIiVLZ0pRVDI7NDguYFkpUmlsalEyImw8W1c+OjAxTXxdPXZsZTgvfCkray5qel9Pe0BEM19LYkh7eCxtcXhBOHRCQzEsJX1ZLG5MM2VTNHIkJFdDVUY8MHJ5VSNdPXI7YFBGTE9oOno1UkM9LFFPO0c9ZixkYmpddV52cmspUXlESipRV1FM''@;'; put 'put ''TiQxfjxdSEc2bz4wRnN8IlcvIzlNTkYyQFRJWWAqNE5dZThYcTxleEZzRCo3eTNWfT46LEZpcml6IShPMT9RZzBGcXk6PTY5bGRTXiY4QG9WRXMxYzQ8Nn19NXVzZUVNWi48PSwqc29TSVp6QiJ+dF9MJDtgeCU4ZStEP1FOOH1JfXU+RmVCNmZCZiVrbkBYfDxMSFpkO1BpK1Q6YExEfil2THxw''@;'; put 'put ''fmxbNkRCSTFzJDVkSVJWXUxRXUJaKi98dClPT3BVajN+U3k4ekNXYzx4azgwRl19M2xXRmR2R1hDQWxRaiM4PUtYIkBgYGI2Ull1LGVUR0s4Vkk1WX0+TDM7WVUxZkB4KixXODZ5PDhnUiUoJHJTcGVbMWZPXyZNQEohIVlRISZ5TlNkb3JqNT5iaTM6XUM2Q35vI3dYMW9iPkM/SnhEITV1QyZV''@;'; put 'put ''OSg2d1lAR1pNLCF3UjAseztjOGN7QkQrLjBgeVRVczd2IkYsb3hFRTFKNzwkanI8MWx+bm1TS0VPbG43aSMhdltDVkUreF4pMlB2JSwvMkRHeVFVKXAsTHczVUJQSXsyRXN8OEg0a15oR0NTTTZkNUpqJHx8PEhSfHxAMj5wXi89R3UwLlJiNXJrbS5wNWE0KlRTcXFBVEtYaSxZaH57KUQ0cShl''@;'; put 'put ''MDptaGM2WCxBe0tSW1IvYE0/fW5IeUhaRjUkMDMxMGQoUSk6PCxpTkFhI2k7XilFJjkjbWZ+d10jXSw4KEBlKVl3T3B8MUpqP1h9bjtfWVlhcVVZQDUkOiFMKnkzOSVVXisue15RfmJSYjFScnFmKnFObE9kS28/bGdSZig3I3JlVkllUH04Wz9iITtlIXd1QzZUYCVPKEpON0Q2V1p6U3lFO3or''@;'; put 'put ''PnAsZGZhfTFlLzJSITRpR2RwT2hwRTorPXk7JC8rMnF3anZLR19tSzIwX2siUSYxSWFWZkN7Y2J1NiElJHFEeyNebzU9TztfWDxndz8/T3ksaFl2OlAkQSk9QXpeemtVdys4ZFlnIjczK2QqQnJAXSM1OUUmPEl9MDV4ez8kQ0RQIm5lWnMjK3hsOV95WUUyX3NYe3ovfUh9dXUhUHQuU1YjNEVa''@;'; put 'put ''Rj16cCs5Zk43IzNOLDJ5LE88RF99dTpQajc+YFl4NDtYIllIOWF+NGtXRis/YllPJWFyTy9JO3hOeWg9YlM0S0BVbW5zcV55LEkqdzprJkI1blNMTWJLdi89O0VGTz5YfEZuQCpjLi9uQFlEcip5dkh8IU94ZlpYTC40OCphcV1dcyk0V0gwaD8kMzp9QX59VGg4U0w6R0xyK1F2UCklW3o3PTcl''@;'; put 'put ''aHFTPmpINnVAUExyISFaRDN6Vjh5THs0flFrZEBSTEF6Nlc2fSF3ZGBDMWs1NFgrLnV4fH4qUmJeMVU3Il9FNX1TdDZ1NG14Pkcsck46VmE2ekg+UjhYe01LamE4PHw7RXtKKiEoYTJ1PFJhfl1qdC5XKEEjS346Y1IxRCg5fVRmcGA6eF00X1F1R3xAenNjdys1eyo0aTxQNWU6SEAlSzhjb3wv''@;'; put 'put ''P2FnWHszV3c2aCVpYjEhK3clfUd6NW4oRUo8Q1ExUm1iUGFkIkcsZiUjY3w4cltQWXV8RHhTLzhgOSMqdExYfmhXU1NbWF54XzM2U3NASUMrPSVsanwzOSVRYTozVCQ3a1YzLzFoTWpPcDJ5WkE9OyVUez0jNyJ7Rkc5KGVsZ2JTOGlGTVooTyZDamp2K2EjdlttYFVdP0NYYGRmRVFqfkpMfXxf''@;'; put 'put ''YyElI1AsSUk2JWlQWG1JMml3NCx2dkouTTpNfTM7N2VRYWZiQT4qPG1haGBbWyZEQEoqOjgpTXZsTy9vNChhIUkoPT1iWG5MLFlKfStoYF48Ki4hfkRpODpPSiRDRERiSGR4S11YOEtTQCQwJV5MfUw5QUNaU1E/WGh5XXZDbHB+Lzo0JnooKlglcSUzPGBVU31FWjBiLElnRkpoblRVV3tRbkJd''@;'; put 'put ''cz01SyN0cndFWVRTb1Q2VTNvUSNQZ0ZoL3Z+MG15XVc+SC42VV0rendjayZ8dmd1KU00T3YjOHFZW3FwTjdwMn13Um8/ZmAhbipRY0QwcFd3VTZpRFBiIXFCP2wqfCk/Vl0kd3kyUC9GQHF5aG5bNGBWY2xvUXlgNGNsO3gkanpGL1YwLHEhRW8/dCNrWzpEOC8hTjE7WGlYWUZdJGpuXjRFL1Be''@;'; put 'put ''dUlZZDxpKyxzdGZ2fTZTT3lnZmJ3biRxb3BhRXt4LnxKfSVhWWNtSEtEe0RLbDpUblhyTlsjeUhaSzJANl5uUzBlRjtpXSpLfUdnSGpbJkBlKU8wO2JudWR+U1BxQFFRMl17WXpySD9hYUlNQmRnQ1cjVCN7W1VZPlEoa0MpeypMZTBqczpRflpuSnRUWyRMM3EkMEF3MGNVYSJQWlllSF5tNSMw''@;'; put 'put ''YWIiMGcoOjsoXSooRz5PXyorRXNydl1vPFR5RzJDaVpTdn5haTtuWDowdV1za2A5aGtuY3VTWGg7UG5BNHZVJiZuYDhSOWhgMUhGYE1AbDFUdytzbFNgbTxQJGhdQW8jeStgNmxZbFVDWD8yUTdgVmBXSCs+ODpJSlZvRl10QnFOR0xgPmNEcV8kSlNBfH5ydHNiUmdBUHhXPiRhMUkwJSg+NW9T''@;'; put 'put ''SllwZVRJQW1HbmlTaEp3LnJ9cjZJN0RzMmU/N00wPEpxTXY4OCk4eWxrKW5aZkxtc3VbJTUlXkdPX3l6fXNPfWw3I1JzLnAoQFt7cGMxdy9OSl1EbUoqU2hSMEB5MEQyKFtxTVhwK3Q5RVNuOTc/QnElbCk0YVNxOEQ9c35QaDM3I2p0ZUNOVFBdPkJyJWkqNGFTJlEsJGYjVVo1PTVMZUJHZGxM''@;'; put 'put ''fDAyXmRONTxkSCN9KSU2cnwkXXA+UTdMR2ZsL2w4MXpkdC9KME1neyk5NiNyK3Axcl1YZioyRTdVJU4sVW5LbFNBQ1ZBU2pYOnZ8SmgoZDc3YV1gPFM4Vz1OTUk3blpLcEJ+Uk9rKU80RCwha3lGOm1VWS84MEh5cmA6IyRqfD5lY1Q2RiEzfCV6OCk2OUlve0whWHY1c0IyPnZvXSE7I3JyUEBS''@;'; put 'put ''QFFxJX4yZyNaSzdfViQpKlsjbGd+dThGbUhYNmFVUUBCVTY5XzwmSnp9VDxaRnh7TDprOSx2dXZmfE1eV1EvMWdwTyNyTHEvQUs4b10jRTkxK1MqNUY0YnteK05tTnJ0T2ozdWdFOUJhNXlociE4alZufFFlT19QQ2NtZi9sO0xIQj5lfF8mS3ZSdVYmRUUzJmJlWW4zTEJiUCsxaDF9Kzp8Pzcu''@;'; put 'put ''OmxdU3pgMVFSYjMzK35MSWNPNGxOLj0kXnJVUkw0c1tsdVlNb3pIMiZTYnsleSgyME5ZekQhditRP0hjdmMiL1EycG8yQWwrQmwoZ3B1YTBiXjNsMSFwL25RcS9eazJWQmxIfiMhRVFlSHp6aFYxP3B9ZldvZDBhPWsodTBKXlR0TTZXVyV4TDgqJjM1aitxQUc3QjN1Kzt1b1hzaFJ1cU0mYzJl''@;'; put 'put ''QCpMTnZXSTA+OkBaemxuSnFyWG1saVA6fDU+IWZhKUgjMHptXyt1MWBvOHZyIyV6bUhxW1psej9ONTAlVXU4SCFlQShVYVtNJmczRitNTDFPY2xwNWMsbFk1Q2kyT0MmRHNNUzdnRkVoUUEsNSFQQGRkT3I8Rzo4SDZqSj1CKGpBOTYjZyZWNUN+ek5QZHtsfCxdd2V+UmJWd2VkLl99aFVLXyRE''@;'; put 'put ''WV1wUStUfWE+ZTVQLDtXbFNDa1N0QGg1ajZuKUs5XnFRejF7XkJKfWpRbnopZHF9dUB1VmlaO0BEST4hUnhhMFchcGw1KzJrZWlrMmRbTGQlOVlRP2RrUyNnd1UiPDVEI21pPXR+e0x6MUAra3guSlRwQ3lMejwuRVI6IUVUX0BEfGQhX0FITFk+LygxV1MjRm1SYVJfYWlIJVljI35HPDx8aHxo''@;'; put 'put ''TUQwIyUmYFFDbH5PS3UrcW5eaiRtaDVxQF19STJHJSNOe1B4KHJPRz4wYy97QiIzUEZCbSs0ciJTIzRnWktPJnxYIVNIWTMmd1EsRGk7VzpWYV5GMyZjNiMkVXFkPyImZmo2en5wO1BqXmRoWDJ8JXRVRzxNMn1NWDg9XnhrKns8WlNxXlNuMWduI207ZXJmZy5JLnMxPWA9UCtsZD0zLz88dlJJ''@;'; put 'put ''eklIeCZab311XldAcDtbI3ZdOHIyfUQ9Ml1ifnl8eDZWb2hzajhnQEVpfkFfaXJDU0VYczVdRDtGQTZnUSRRWzdnXzVoZjxmMWZgRW5ibnR0bTlnXz81aVY5JV9+THBXVzBgeE5IXkA8X3A0amMxaSowTCVoeC48cn4oS1t1MHJnLG9yYzlKVCV9SFR+aFRnQyU9Qk8sRS86dldPWDdxUWQ1WWUo''@;'; put 'put ''fjc8Ym80dmEobmdySy8jR24pLkE3RzB3KmpRe2swQiRzTFF2Qj9vLkxwTk8jMU1eUDpDRWU5fGRQTjJFMiUzPTdGfTdXYkwkTzFXOllncXchVmRjdGg4aE1sampmTjBQVkQyeClFPGN6XTQxSVtxUVJldnQ4WyNpInV5RVAyQ281dnZga2NLQGRBSW4pR0VDIzIxRjttUkd5Y0AydVBCdXVWSGJJ''@;'; put 'put ''dXVZSlVVUzJYNTI4S0IuNypKVGkkc24ibCh5fm92Pm5RVlIwa2VJKXJ2NlRlK3UqYWFpTj1ubVdyeDVdPjkyOFhyRUIzY09mYllVUjFSRF5YQn5dOS92KisjZUEjN2lGbkx4c0NIWVd6UTxLK2ZCMU9JdG4zJjhDJGI2eCIqenVJP0pkJHw8WiY9TEF3ZHsoMVJUdHVUNUQzeihwN1syNFM7JiNJ''@;'; put 'put ''USxkdyQlTGV6YixLfkZBdTtRWEV9PE48Sjw9WzRHZWV1cTtBMCpWMTs6QVJQZndvaVZLZSsiZl8kOF1JOWtadE1gUkpAe2JJSzcke0FxfklfIWt2dHpRcGJaP1t9Qz5OaHJkPys+ZCl+MUVTa2cwTmBAd0Z6MWFPKW5rU2BXazMsUXRdX01oen0ha2xRJHY4YGtxd0wpcl9mKUJbXTRbbG0xWGha''@;'; put 'put ''Y1o4JXBkQDZNekRtanZyKDJQYX1JeD43L1lOdmxJIn47NDA+SjMhJVFXQHdVVVM8TCI4Xjh1MFE+USFjRm4zU1U4MXtpW10hWz8rNzVMdjYjQltdd3hqL2ZhNkRWfUdTPTx+UjApIllhOWtNKGwjayF+SV9gMGJAPTUuWn0+OmNXZjJtTUFeKyZlfUNAKCFBWnN6RUNjalRdMiJRbytmdihFJWZ7''@;'; put 'put ''cDU7TGN8d0o4fkhNTD5jYjk9Qjk/UzJVZ05BbS8jQnFWMiVtSGRgSEFtIVFrR1JgckhaNTFHKEZQWCFFT05APj5ORCNocjkvc0FxTX1UOW1PcGN7cnV5X0s9aEx1JUZhKCNGOT5YeVgvVjFkZihKVnBDN3U2akt1JURMN158KEN7WnFnTiY1W2tWO2FbUUphajZKPXJYVHpIdmZ6ZTI6dGpebWNQ''@;'; put 'put ''XXE3JitdTnEkZDo7QiRXMmFhdD9iTVg2ZSl3KytNWTs0RiFLdEw7QkpWOVBaMnQ8PHxHRnEkSXAxdENyP3JkcHIxWkFIa21GNColK08zMiwjYiFsSjw9KlI0Z2h+aVt4bDpqS10mIV4sQkRnKU8xb2VkMVFhX3YyeU9TXyUxcnpIZ1AwU2MvO3Z9OEtHb2BCa0JEJiJEU3tgW0lzJFQvXV1RS1Q8''@;'; put 'put ''JkpQalhvVGJmLCZ9Nl56OSxedHFlKl1mYnAlRyJnW3dyUyoxSWt5a15Oczh7dGtSd1BvfVVafF5EZXZUMEo+TyZFQDtTLzJgYDtOIiVTdjNhLmgoQ1MpYyp1RThhUl5+N11+MyswKGpiVjh2aWhVPWk2OCY0W259YlNWdypiYCZeZ3hEYCZIXTI1JkxbXWwuO0A0O2I7TX40Tz8qVFY3WHs1ekZY''@;'; put 'put ''IXh6UUZtOyJDdmdofiM+WF5EZ2xKeDliUHZ7QE1COzlVIzYjVnlbbHhmW017cz5xTGpNRk1IJGk1d11US3BsZH4iKmk0YjhPe2hNPEhacV5XWDYuPW5SO3cyMXhGelZrNldsRkJGTmFnK1NmT1BAWHYlZj90SX1NST9jQV1jT2guSXNRKiRWWW8jUj0wQmwqYmgySGY2XzY3cyV9TGYvITNlXyUl''@;'; put 'put ''KXYjQ0kiM0pidmJeX2d1IywyZWkzdUtGSCRrZyFWQFtld1RoZClnSzpfKDhXeDFmaHFxVU0uaW5hYWFdRn1UOW5GP18lXkdZVHtPImJ1fnFwSWV1Zz5wZWdYQE8zazNuT3lBZ3hjQSU9RSFxeyxtTzAyPWw4TzRmQSp8di5rIiFgWWFgNndxUiVVMVBCXW9MRml7OFhjKDYzUTZUb1JwWjRuXkgp''@;'; put 'put ''cysrfGNMLFEjM1c0JHY4WD5qRyIzeDZzOzljOVo9LEVlXygqb3FgMWxBeFo1N0M2Izk6fUk2VDgpWX1bfE9UTXRkb0tSaVh+Ulo0elg/Wlh7ZXR0TFNPJHU1UDNDb0MveEtDNUVETVghRXJdSUNrQD4yWEtwV0Z6SHMybTJqNE4mUERgMlJbbiNTbXs/JihmMGcudXBVSlE3LCMjPmVoaDR3dC8/''@;'; put 'put ''flIpdjNlQygmcX47JFptV0FrKWk+eChbJTIoN1kyaU5HN2dTNis/d2tFM3QoWGVIO2dHNyMzbDZzNVd1SjMrT1tiZCwpbHtKNVo2dHEjdTRISF5Xd3d9VElCXjttWjpdPix2Ty8sLkBYMmIqcGQ0STxyQGJ4OTFbZ0J8M2lRPWI8bCRVb0VESSpqR3Bld1l8OVsoLmcwfUc5fmxvMkIjZ3thPkQq''@;'; put 'put ''XU0vPn5BfCFETGI3bDNfNWozJEJAS0pWU3Frfng+O3pvPFZQbH1XK1pfLEBoUnI4Nk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5i''@;'; put 'put ''MTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk9dMTYwNmI6TmwwU2IyYiU5YSZCQi8vOnNofiZPYjE2YjpObDBTYjJO''@;'; put 'put ''YjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObEI3YjpObDZAfnt0MCkqZDJOYjE2R3lXbDw6IjNGOndbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9Vnty''@;'; put 'put ''W3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9''@;'; put 'put ''VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjMyNzI3fVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8O3JqPiIzfVZ7ckd5TFd7cmN+Mn1RfGZfOT5lKDdz''@;'; put 'put ''Y34yfVF8Zl85PmUoNzdGIVteQF4vbktOZXxaNjEsdDJrfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxm''@;'; put 'put ''Xzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZShRZEUrKGg8OnQ+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8''@;'; put 'put ''Zl85PmUoN3NjfjJ9UXxIYy5qfn4yfVF8cm8vflF8US9EXW1CPEM5RmZMIVdodCYiJiImIiYiJiImImk2RnMwMG95dFR6YWdmLChwMD0iI0tgIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImInF0JiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYicXQmIiYiJiImIiYiJiImIiYiJiIm''@;'; put 'put ''IiYiJiImIiYiJiJxdCYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImImFkRSteaDw6c2h9JTdIfm4+OSgmfjtoaEJtIzlwbExaYSVHTktbdW8yQzlEIzc6MSxVK2VHeTwoS2lOXnFpVlViQnMqWTxFSF1AUkY5dCV5N0hkclpGOXRMenB5''@;'; put 'put ''cl8mInJfeUs8RVkxXVY2Qz0oVnFaRjl0cl95S2RCYD5LVjZDPShWcVpGVW8rNThDImd8S2BwSSNkQmA+V3hgPktWNkM9KD52PTspci8xLFVZLjVfN0NWfDcja3VhSj44MFY1TlZ7ZkgjQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKVM6Q1dhYVVaKjJhNjlQSD9WLEx1I0tYRXVJQlJDaUUpR3VM''@;'; put 'put ''Q1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUjpLQ2pkOl97dmhxcj45KCZ+O2hoQm0jOXBsTFphJUdO''@;'; put 'put ''S1t1b2xGX08jN3J2R3lSKWdSMXtHdVVVJENxKlk8Kyxxb2xGX0NDanpfQjEmQ0xLaHVVWHdEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0azBVe1hlKFZBPlVRa2owWDA3NkdTLjc0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0Rkhz''@;'; put 'put ''NCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NTYUxLcDJiJVB9Nz0sczxeKShfe0VpcXIyZHxVUy56TyhTRjIsVTI2NlNNNzoxLFVsOUtLXjRvdXYheUQ+LGpLbGZHeXBjVylZPGEqWTwrQiw2dXk3ZFI1bEhjN2dZO08yYyV3N2RSNWxI''@;'; put 'put ''YzdnWTtPRGxCTE82NDVpYk5kPEgkOlYsaTVqVjxPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdnWTtPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO090bypsUFs0XXpvTX5hJX4iPF5KKV97UjdecGkyTWRybElTMXtQYmVsMmM0UjF7LmdWVVRaP0ND''@;'; put 'put ''alNIIzFhcjohS0s0NXF1diEzd3YhPU9SYmdHYlI8QmI2e01yTytaTGF7Y3h6VzBbNUZOck8rWkxhe2N4eihkPDpCU2pQRDR1S0ZPTisxaHkyWD9wMFkpMktabTd1Q3BreDg9I2pCJig/MT9VYU0hfTBhUXw6LmN7Y3h6VzBbNUZOck8rWkxhe2N4elcwWzVGTnJPK1pMYXtjeHooZCJAdjtjLlU7''@;'; put 'put ''TVtXfXpvX0JiJWhDOD0oNDc9cWx3YUA3aC5ZPCNTczcrWnIrWTxTcGBAb1FzTEd5T2QmaU5eVixxb1YxO0YlRWI2cXV2IWtsa2xrbEIrMGpZMENkeD9hNlEwaCY5MS4lWzU3PXF5cntfXUdOak5hPFk4cnJZRUVoUCVDR05rMSMxTWV8NXExezBqaT8wK1JVSzhFfWQmR24zXkxOM01HUlArR2dF''@;'; put 'put ''elZpeTJXaWFhVitWd1tPI0dRKEhUUShyVCsmanp9JD1FOFo2ITxIdHI2ITA/VWE2X1YsVndIfSwzfTpiejl9QWMwak1tLzxoaHtsIzl+Uz1ldTJfbFkuJEhTLms3XnBzNG5CelssPEM3Rk5zN2xUQ2pbOmZ2R3l1ZCVpTl4mRF1AR1d3UEUrKjdoUjF7WURwb0U0eW84ckQ3Nz1xeX46P21WU3E+''@;'; put 'put ''JiY8WW9oOUBQVTZfKXc1dSxAeCpAZF8mQ0B5fClbP2JPN1tYP29xXW8kR2Q4SCVmNy5DMklfe21ULiFhfCxGMVdwUj9dWHhpTHBaZDw7MGR8SkNgeXw4RFBvcVduQiJZK31wNl0pREs0RmZWdnxObTRlNzs5JjRVZmN3aD9len5kPD14eH5WT3pnQ2pmPG5mYWB4UCNZZDpJKlp+LHJHeTp2Ymor''@;'; put 'put ''fVhANWErKz5+ODhXeVJUM0Y0cTM/Q3kvQzd1ejAlOXlvd3goeVpQZjYzcSxmeSRBOGpPfT9Uezo6TWQyPVUrNl9iZ0dsImQie2JWXk9VTFVgNzdhOCw9W2I4YU87fDAwJClHIylLRzFfcSl6MXxieEQwVF47ZmJJa0hAejJMKC5TKSgiTU45PSNLUl51YnEjRUsxLzNPJlYkN0hDTUk+JllQTk45''@;'; put 'put ''WjsxUSJGMGUlXmF7SDhWYDpRPTh0OSgqSzRPJj95PWdFbjk0fjBhOGhWeTk8V29peDdlUjF7c3ZHeVspZ1Ixe0h1VVV2RnEqWTw6LHFvRExuWng3OUVMSzw5bipZPHlILCxPfkZmR3leZShpTl4xR11AMHNhUk5+eDcyNlZqTl5Kb2BAOktdV0tLaHVAd3Yha1ojMWFyIkNwb15iTEt4IWQqWTw7''@;'; put 'put ''U2BAU3k8TENqZTshMSxVfHRVVUZqW3d2IU9QR2Y3R2MxREttZilBX0ZKK2dlcylIdkVqYHd2IWxheDEsVXgjK0B7OWFmZyxjeUdqRV5iYUxLVyMhU2c/bTlLS1cjb3V2IXtEUWhaTVM7fnVgQDszJFBFKy9QTGlOXmA8emQ3TlFEUDw+I2g4MSk6OD1nVVBMZ3MpYEh5Iy5NXy54O31vMUluOUZs''@;'; put 'put ''NmxrTU1gWnBsOF4ufjtodkxgdHRdbH5XL1B+SUY8PiMjZjVsRmZ5I3F7cGtNXl0xLiVJWVZVS0VVSENqW3llUjBwL0lXVUtFOEhDalt5S2lOXih0YEBvUWZmR3l3WHxYKFkqTFcpWTwmNStmQEYhalArR3ZVVXZGSzFFVylnJW1qKzFoMClaOzFoQC9oTUAvWzhkcDwsfldSai5RfElOPDshb1lI''@;'; put 'put ''TlQ6RmY9ITtIaD8yeiFdNFJ5OEZVM3VnfEwhJHFtWmkmZHBSRCwwQHlVWSswXkdWPFg2c0x0SmxEMmlaIlF0bF9IXUQ9QCs2dlheI2FOYGRnU01He1o2P1M2SU48W1MqRmBJRWZmallQTGdjbDZsa00yO3dneD9tOS9ddz54O2ZqMyFZbmNQRVlPUUJHRTFCd3csQioqanVpb0pnJVBWbzllUWB1''@;'; put 'put ''LiwlZSE7ZD5maVgkI0hJXyFfQGh6P2hNWTFodiFdVFZrPmhNYU1JIUxFVCZvWWk4QGwie3AoI0hdc2RFL342SXE5PzkmK1B4X1licCUrKzBqcTJsTGcuRCNKZzt4I2dTSFJ3cVd6XXVnUH5XcU1Nb3cvWjtjanFUSSE1Ky99UzpaekhsK2wxaUtvYG5Kdzl1VTgxaUw8LEt0TFJ9cjEsKEkkaUc3''@;'; put 'put ''SztLOUxgPGU8OyFZQGRNL0w/UjQhI0VTMXJ4UUVsRiVlMXozLGVYVFIpRVVqQ3lwWnBoUUpdRkpsW3cpWX11SmhiTVUxeSNCVDZHYElhMW9JZFAvWjFIJXZNXmF9REs4MyNmcGBbO00qKFlzezxMLigpMGhNR0IjMCJDYVYlMCxRSDI5Wj9lWSZPU3o2TGRlNk5tUG4oTmNSLDJbPXk+dzJzKXUs''@;'; put 'put ''b0BoKWxOcCJSbU9kUjxPfVBQelpgejhQMzlwWm9qP0l3ZSk4JiF+KytEYnt1Kl8rL11tZiV6S3opJXk5V31LQFhgJV91LE1ZTH4ue2J8P0soOX0/MUh4UyNaMl18bFErQWl+eVdiTCV4fF9ePUhNVyg5Pz1jVGciRmVQJVpeN0BJc2YmfXVEK3hKL0xJKFE+UH04cT0rYSxVKk1zZiYuQndoaE15''@;'; put 'put ''ZnZ9XVNEU2pQIXxzO2EsUT0/Z0YsOUh4X3tKcndWaWk4ZXxWOUJqSFFLKngrLFZSZ3ZiOH1eJExeMyprXzBxYXJiJlYzJXJNUEQrejA9PTlAZyYkK05gaiF+X1QjTWsiLl1hTV1eeHVqOlJFZmcmQixMVyltMD1YbyROOnJgITtVWGxmcyZyW3p1cUMsPXc6IVZgNWpLKlNmUnhXZnhodn0xcGE7''@;'; put 'put ''KV5fPEE0bHE7ZDgvVjVwWStuMSpWXjokVm9sYXJnbWxJPnEldSxgWHE8d15dPFQ8LFojaTdAPWEzKitqfUxTbjF0Y2JNK15fb2ZtUjZtNjAoP2FqVSx8ISlAYiEiJTF9Tj92KnFoW0o0KmIsOSY2cXRRRT1kXiEhWTM8YnNsIyFYTTMrRHBmUmtoXVsqanRRa2hQK2R5UyMheGtVXjY/YSI1ez1m''@;'; put 'put ''VnMvKkdSPj8hZ1VdJU96VDI+PXdvQ1Amei5QZWoocS5IOXt8QDI/V29peDQ8IiVMXj5FZV42QD8haXp7bD4yY1ROIzRaRV9fPTkhP2tEYGtTbC5PUU5uVXc8PSNTdTNbJWRmMjZsLF9kL3dxVEo1Z3lDJmJlTyFeelppQHA9W1Y7NzxeIUo5eTtUIzUraTg/bVQuP05RKEZUUndfWTM8NnBzcDhw''@;'; put 'put ''WHNlLG9mYW5ZYkVNPjN6ZV49ImlXXjlyfm5tUHdyJnlaOWVsYm5HZiF4Tzp8VHVReyQ0ODozb3ZYQyFqdTlwWEglPklfWihAfUQ4cGZzP0sxXUFdaSZoVmZxIXxZZXQ3OnhJOE8mLiUsODckVCNEb2JUXz9ULkE+ZSxGPTZuOmxLfXMkZnwubjU8UlVtb2BJcn0ie19mKzI1PDhWP1Z4ZVQ8I1o3''@;'; put 'put ''enk/ak9KRzFyelouaXY5VU1raHBZZk4xfDgrMXxUUmxrdTk7SDJqNW16UUhJUShjP2B3QD1fWnltdypxdD5yVVZ9cDB6KCYqam1wVl5wZkBeK01KfVc9MU4/WV87NGY2LFVaMkgxR31qWXFkfT44Kk1kTmxreik5M1AmMkV8bDNmYm4hSjk7MlQwLCE+Vzlpc3wkJCtycCROZkAxP3ApRGh+JUV5''@;'; put 'put ''WyF2a3xpNyxoVHVxNW1Mc19ZZTwyfXFtY0BWLGd8JmVoYHo8cWtwPCslfCNYfnt3WFBjfmV9TCVoaVleYk4ua0NgbjVwUFUxYk92WTM4UypFcU8mcDcjdUBQSSV3RzVMaGVyeFp4SGZ6d3orMyRnX1kjXmdiTWJzcEpjfjAhIU5eW191KSVZPyU4YFNjbjkmJiplKHhnJGIlfUZ2K2pEZypKTz0i''@;'; put 'put ''JTV8MTNrcSladixZbl93Uj1vPn4lPyU+PWVvay47SjI1NHA4cjdURDlLbHJOdTM8SW4yRHx3O113VSoyMT14O3h5R1BkTyU9fTo1QiV7MX5wOX1GIzl0cnpySytiYnB5MyYhOX1rKDMzd181Xjt4RCZBUXtTbXBQTzw9MSslOFJlQUtVfnV9WH5BJlciSnNRJSFJZ3BUTVE5fGZwfGUsQD9hUGYw''@;'; put 'put ''KSV0JHpUcHBQT1clXUVQUX5mRF92bWZuNyxqZkExTyV4Z1RtdlErQlBkT29yIVdgbT1HSz0rSFY2X0VgI0pxRSl4PnI0cG0kOSQjSDUkNCRsKnteKz9lfSNxd1BCPnElRXh8WTgmSTA8ISFIOEhUeH1fQjBwazw9OjREeUkxQyUwOWtgR2Z8e10lOUd2KUkxXypDcUNROEAsQHteZyZTPHA3N3o5''@;'; put 'put ''JGROQlFuZks4ZCQ+KUZsN2FPYWBeYV80PmIxVzlwc3xJYV9FekNQdVl+UGghOX1lTjtsKFFjQEgxLiV2JD5IITlQWitRbzVlfEBuXmdEWWFReCE0LGRiZ21SZVJuS2tRekRUUCRXc3JAOjAiLE4oT3IvJkkwSVF6YWhgcmZqYE88QT5ifjY8ZHwuQEUvZCxXOUZ9TEo7andeMDV5bSwlWG00UEpH''@;'; put 'put ''KCVIX0JsSF87bnopSz43M3kwMTtaOU9nQHBQYCxkMzZjJE9lNSRtWkVnUnt1cyJyNT9gWVdyNT9iYVsrUTQxNntHa3E3ciNzNT9zLDx6KHFBYEhRQm55ZTJiQz51IUElNHE1SnxZWiw1K2VzcTk6allaWD08RSIsXWllfFRKLmQmOFA7K3t+OWYqKjszVEJ2SEA0SmhAYFk3O149WUAqcik9MVRy''@;'; put 'put ''cFgmbiFxfVFgdXlCaEdiUkNXKjF5Zn5PZUtrNixPMDROaiRtfig/ZWpQQGV9Z3w1S3h5JngmeCZ4NFU5fDQpIXFLfkJRcX0zeU16dkdkKzZfU0wucl5vaT9AKzwvfWZZcWVeZG87OH5fcyVLejwvPER8JF1JRmV5WWBdQy5tYHMldyxUKD56c2YhU31wSmtiWkhRO2xPWkk5ZHFrel9bTWVMJTds''@;'; put 'put ''bXtzJW55W1JwdnxvMV1fYygpSE1zOTUzbCoiXzE/fG9ISTg1aklHfiYwZTFyYF41SXx3K3BrRFZ+ZyRpJVI3O04kbTElbX0zVTxEJVlWJnIzZjRNZmhtV1glVX0xSHk5VHJUeWAmeixqVF0lTXoocXI8QF56SS88SCY7S0coZH1yKjp6cWYkMD9dZTFLaG14TyhAX14vaDFLaCNaX1leW3Ntaywr''@;'; put 'put ''OHk7VD9zTiJQZCY4cUlfWlBfUiwyTF4xP3NOZ045XmQ+KStbIVBndExQZyw5SFE/X3csdVN7ZkIjXys1OF8rN3s+PTFxXTtSRS5WYmdoPE5lMlk7fU0hYSYsYUJ4cEpIbiNzN204QEBSRk83L3lAQHRjT3lmY1AsZXlmY1BMKlksLDhBSS9uJW00UDJZXSRNKEVKd21VSWVnPElhJCRSWSVWaXlt''@;'; put 'put ''e142XlAleWZOa09nejJGJCgqRjJESXBmJVJZJX0/YV4wcjM2QEgmVTYhcHskKWFeI2FrLlAoVFAzY0s4ay55MnI2QTI0TTFHYk1ZVjtsJVFQWj89cXklJWwkJmVWWlZiZXN4KU96Xi5ASzA/OFBYJTBsQF17SX1oKD9PayROSHE7bGNAUG1hLEpvRWdBJlVNUFp8PVopOSFyRzBlOCtNISspOFpb''@;'; put 'put ''cCk/flVrR2FOT1pWRE92MSlFRmVqMSxlS3BAPWY4UmI2UnlVb2YhPDFOZER5VW9ue3BOND04Ui5qM016ZyxWQCtPMThSLmpUZyJORyQqbSh6Nlg0cTxPKHo7VT9afGRieSFhJiEiOTtJYHVXVmJgeGdMdE0lJilJLFA9NmVXKzErL01kUFNlIk4mcjlQUHxKJEU0NUpCYVA/QDFBMHFmaVA8QDcu''@;'; put 'put ''eTx3Vj9lWSZAX2QpW1Z+JHg4ezosM10hUjA5QEZmTTIve1pRJmRMJSl9TjFePTNhNnFhLms4Qmg1fElUd0pXelBfLzttYXJ6XzZpYGt7bWBvPlo8dTl4KEVZbix2Qi9HUGRBJm9CXSUsc3pzUHE0TlpNSElCcUg6SVBLVE4mOCZSZSY8QSZ4Zm4sR1FfZGJvYWoxaUElTDI0eXQkXS92YUtbLDVg''@;'; put 'put ''bmhlZCs1ZjlxTm9sNkxkQ3A3UEZJUnldYT43WSRYWiJ1UT84OHdSZThAKzArWSMwK0xrK2VtUXdlPmlZZ0EmbzxBbkNgIX0oMV0hOiVkJmVoK0pzM3YsQ19YPVpQSiZpYiFzQSZueSw7Jit5KXwudSRXYE9nSl87eCJIJnJfKlJfNjApJSoyVyZAY0QmVSVCfCYvWSRrWWFuI0owPyZRKz9AeDoh''@;'; put 'put ''d1BCPk4sL15LcVtLPFI2LEJ8eiFaQE42bFJZczV8byx+JXYpI1FLdmEsMmhdcDFWSTxMZn40ISU+SHRRIzpkLHAwellsVGM3YixjP2ZvRjFEPkk5ZE5WbkBFcGFrfXpoRj1iLCs9X1o3O1JsIkBNKGE/XVpoVC8oQnxQJiFJYF0wPmw3KXU7XiJUQklNR2VnNXxYMS4+WDEqJTtAIzJhSyJQQlc0''@;'; put 'put ''bU14MD42NXsja1k7a2whMnsxQTRaJjhFP1RtM19MSn1wTV5oXixhR1NTRXs7SF9FeDp+fVM0bUokZWpgKzdQMypuaEBfcHlvZjFtdXhmbkU/SWBkcVZtJW04K0YxMmpYJlpSdztoMCw9Tlk3OzdxUm15OVUqMCtad3U5RXxFbWZIe1o3OzZfJE9kfX57YT9EPSV+ZXNleGQkbHlaMXxzMjleJjNo''@;'; put 'put ''Szk6ajB+UGhtWUhoMyk5KkFNdClsfjdHMGk+ZV82NiptSHBxRzpHXzZ3UV5RQmYsdSpRJWw3PHdPJjl7WlA0TklQPHJDQCk/XitiLF4rWWFtajp6YjlgYzQ3cTJAX29HKS9QTmBpblBMKSFAU2t3ZmRUN1QjZW9Oe0lpLDlANjhXeVRtUjZ7VUlLdllJPlswZm0xb2RvOyE3IUFJKzVEOWNAW2U/''@;'; put 'put ''MXZaNE9namgscjd7YWgsNztfMS5fck53eGNoQDslMFppMjluUGEsN3VZPW8jYURhUCFqSjVtUClOLjlMXkdROnJPMUtoL0BlfGpQc3hhUGdSU0ZBfGtZI0t4RDpYXWNrMTVEOltOQDpAQF5hQCRwRHF3XllUZTN3YUNeLDxwODx4YGlmSzwhTEZrO0o4LlgkNHMrbF17KEVgRGQ3NyQpOmpmclRG''@;'; put 'put ''e1llPEV5Kmk+JXUsOWxDJlZgZEtKPnhUN2omKCVIck01dUExSCsuI0U/XVplZlR7USY0OGYuM04qYSN7TnZGV3lgbzppNiVPYjBMKTklKT94JDldUzhwSyNwMWhqXntLaE0je3A3Y29Oa28hQzlwSDIvczkua2JfJHBiWFV5Vn1IJXtrNXFtN0koaWwpSmNIPVU3LGAzQzI6enV6MHFlO3RUfCVG''@;'; put 'put ''ekZIQmRBOmFvJHtwdyh5ciM6ekxwMCVvTmJYJWJZJjZoX2ZZJlhDIWooMjh1a0swYEoqaFpPWFR5WDZzdyIlZk0oZU8mfXtPe11eOzZoKUJiMVo1bWtQMyVSLlsvclp3UnYpLzs9MUk0JHUqdW4zL1tAK3YwRj0xME16LF5AK3YwRWBhalArIz16WjklKE1qXjtkT1FpfTJ1bUt3K04hQ2M+diU1''@;'; put 'put ''OnB2IyMyRFYrPEEuJFM3XmVzYWp6YFUwQUUvKyFhdTo9M0xKMCxeZj9lKk03TDR2YT49eUdAUURtWm0pXiVIJFo5OzxIK1NnXmUsbCQ8ejFLW3QkQC85ajZSV3pgejxpU2JpWjVtLzl1cTxWUkQ9VStJfkdsXiNyVDV4UGU7LFNPXlU8bExRRD4lZ2A2PH01YGImdiRNJit3Ujx5ciNKV29KUHcl''@;'; put 'put ''NSI1cixoXXhaSUp6PDklLmQsMGokWWAlNSFMVklaVz9tLHFuenMmdmc8ciViP2U1QFUxfSRWYDY4MGpQc0xXPzY4bC85MVV5PDckYTJwS045SFBncD5yKyVITVBtUjBaJEo9T2cwQFlmQzdkWXJZZk5WUEtQZFlpXnA8QXBwQFhheW1JZFR6SSQ/VjV3M2RsZlR4W1J5VmBnb3FkfSlnb3FRUE4r''@;'; put 'put ''KFYhTko1ZFl4bS5yUlc/NkMvQCEvajZSa3B7ODd6P2E0cWpzXS5EXSVMNSt0WWozUTtzOl1VaVR7UCs9ezZVcihWfVBOKz8mMDA7ZHpZNyxBYFZ6OnBkdztkaCxMeiQ5ZjFDOiNaOmVPZnE+dUhYTWEsTToqO3BofGt9R1VeLyUpeCs4TTlOSVshXj0xSV8hXj97d01vOX1oNzRqI1k3SjBsMmNV''@;'; put 'put ''ZXNha0h9P1M4ZFlfJVZmNEdeTkNbJF1OOykjWTBdVkE+aGxPMW5mSTlVLGdmfjhYNmZyKGFVYEtFejBSVz82c2w5UUpsVVAvOnhUeVNfJXRAcDB+XnwxYS43VnpDaT0wNzxZM1ZOJjolOUA2NURSQTRgYlBFLGY2XnM6bWNffHV5IV09VUgpOnp9WjRiZCQvO3pPYjBIQG1eIW89S253SUp5Zmlo''@;'; put 'put ''fVZTJUFJVWAzOG1eKnIucjlzM213PSY/RHFNVXkhSWhtcGpQbGtnd1ImcU0uNV86WSZ2WnB8a3JqUDEsaVRAKXYwc2ZrJDh2U1YsP3BqIUolISNKa31QblFGPUd6Z1I7PiZIeHhYfVNJPkhnZ2pkJEhUQllIJVVWay5lczFRWjA+cmVwd31JQDR7Q3FbIUo+WT9yPj5XYXNVVk45ZGA2L0xeRW55''@;'; put 'put ''KjVfQCE4UztsZHEvbTVnY1ZNUUI+Qk1ocW5zOnJNUF5LcHZFL09tMylwPE5ANkBoJFUudDlwRldEYnM8UyF4ZUlkeilNRDlAXmZgXj0/WWpUY1A5dk8oVkpWa0YuOyFQa2NAbyEvezFobDhhVGJxX1ZdZVtuZV4wMDFLUFZicjhfI2piRSJ2bWk7WCh2YUZnVmVxY3I4X0AhT3ZyKTNLUSYkcWhg''@;'; put 'put ''e1V+ODg3eCNTK1ZsLlF6VT1iOUNscTIrJnpiJlo8UCtXXUZ6ejBgdz0hLzxkcmssZnspS3okQThGejx6JHhzek0oZ118QExdKHE5d3dyUz45aVszLDE9T2ZWUnp5UiRkKHEweV1sak54KCthSkoqb1ZIbyo/KnpaKXptZkk5WTp2WmJyN3FpbyFKRHhNYjNLVGBHQG8kVV4lfFJmb2NWYUs4c28w''@;'; put 'put ''UmtSXW4+VEV8JVZWKlloW2J4YnJEV3BWPVZ2YSwjanZeYTw2M3VaQEtTLGFAWDxkZ0xqTDE7SC4xW190PHtLfnVPKD5WdVE2MEZfOFZTa0NQXypSJiVZVStMUUJoMWpkcSF8Lj9NNjslWkNOK1IhdVEjOClyMSRbZSgwMFRKfURxZThuPHtsSTxIX0VnYyx5eX09MCtGenowWiZAckJZYmdwfERx''@;'; put 'put ''dHlzTkZldCx4JGZ8b2YjSC5qditJWEQld1AkVlU9R28xX3s/Zk1JUCZCRG07bDV7XT0iaHUkWGhPXih4Z1ZUfXkyTWpgK0V6RXhPXjhtbCQyaCNTO2xRJVc9QkxkJCZARCFqczI9WTlKJDc4bkguRlhNSEAxMGRgYmUwIShkMXlOWVFlOXxTSWJNeGdpP0JgWmpyeTA5Z3dCSygpQkA2bj9tckAx''@;'; put 'put ''Pz9tMlBuMFUxeSEsPyF9PiF1M0VvZTt+bS41PXp9angrX15LalloNSxZZjo9dGAkakFWfHtYVFkmbU1FL1Z6WiZlamk/Vl5Hbm8wYTlJTFd2e143VjhHNUBaK3clPHpreGVJPkBuIUA9NU1YcyRfQCtySmQkSWg9RDUsfXBtLzJ7e2tJOH5SLDxaODUpejBhUThsXXVbd01nZWFVSygpVzErITdd''@;'; put 'put ''ZnE3cWNURiMuSj5AcyZUJU9lKT9GZi9uIjlAezxGNGxoUElyVVQmMEptSFdRJjdnYiYsPztSVnJ5KjFJdj1EeC5aYD0wbVJnVWZfWypqSElCX2JRTSszZ0FFRnklcVkxX2p7XnheZjxac08mOTNdUUhsRCZsKlZ3IW4re3Zabz5xa3hUMl9XTTAsaDFHajJeSl84X0AheVFBJWtweWUwPV1aOSYk''@;'; put 'put ''OXl1eGgvPjRYdCgvcHdQZnNWZVZgVD1FZz5pZzFyUXh1REl8STgsQXEhSks5JnJ5bFlnfm5VVH0lQTBOMWIpKlNESW57Om0hLHUkW2VwQCs/OiUjXzVqfnB3UGAhLnB3UDBwSEl4PDA7fSRmJnpweXB8bVtlOCxmd2RvL1FkNm9teTJDQHIqbWZlTkU9aiRbTy45eyNUZld+MjA2PXN6YCE0VUVg''@;'; put 'put ''M2hVbXJAVSh7aWd0UWFVKGAxZSxjUiNWWlBZKkdkIk42MyJ4Mj0/fSVqVWElLClxOjkhLDBoT2UlfDdHYVFFbF8uVCZ7ZFpReCFgWVloL2prOG1re153bVF9Wk5JckprQl9Qck1oV3prXUFdI3FISyMpd1JTZVIueCwobT4xIl53K2k4IywxaDFAazhhMTA5ZnJiJnVxZURrXmxrLytEbiEmdiU8''@;'; put 'put ''ekpLK2poTTNndT04USptNj14aGcxMykmeEV8UV4+QDcsTTFJaFkmQTBGeVBZb3E4LDdfWSZ9c0IuJHxzeGBUcHZEK0hodW80cHM5Pk9nTllWaGBjdWhSZWpkP1phT3NhOXI8KlFpdiQsZWAmUEg8UFkkK0t6LFE7fVteOXU3MChZRl87VVRsTSVXczZ+fThnV0AlSTBWNDNtYSN8Zzc8TU45LkpQ''@;'; put 'put ''WlM5X3V8YToyPjFIdTkiLyg8SD0vcEkxNzJFVD5uYiE0amExI1JXejRLOVE6WXd9OTlRJm5TO1p9MC5kNG1nPyk7fWY0OH01UShiPyZ4SFAvU09zKyUrUFdfQF5wdkhZdFRteDJwVj0lam53LG0vTCJIdilIeDUrKCEpPU0he18jez94I3tTUWk4JmxDOVlzV0BFR2V5ZUlRJjtWOFZCa31WWF43''@;'; put 'put ''T0FyfFooYD1NfFNGLjl6ezZAI3BTRWJ4cUFvQ3NHYEFAZDkjIVgxZndYMUMjfW5aZU5uNWFDYEArK3wzbHcsMm9YXXsmcVh+bThwcmg6LmRgJVJpVmFiblJabUZ8LjB+NjJxaDp0X3BqZFBNQCh3TE11WSo3aFlBb3tfbCNmKkI6IWlVLDdWdEVUeHxOWj0iJTh9bjNjZ302YyVlOHdQMFFkPmYs''@;'; put 'put ''ImdIaFBoW0BePSEhckUvMm48OF8lallyPV1ucCYlPmdvOWI/WW47W3gsUz18Xlk1eGUsOGdJX1BYc3VKOXs1fG0kTDp7YWhUQy54OXMkI0hWPHdfcGo0cDxWYVF4ITZSbmBPaGFuVzxQaD89PiY/IWJuKlBRJmBhe0ltYlV3Ll5CYDVUSlk+Z0YsPDJZUTAoPGRPUSYpRXgjQFc9LGFCeGZmNHVD''@;'; put 'put ''eFZgVm5lUGhqM2hsalA9TTE+TzhwfiVMdG1EP2dqTkNFLDIyPltwMSxhbmVzbTtMaDolJHhnZC5dQFM0bXxtSTkjMiIlfV9+MHk5QmojcX4wKSV+XnhlSzhRKGFnZWFTQFNJSDE2PXUke19vIT59bnAiSHxtalByKmplSj5FcWRQU2VvXk47YVFYQ1diTm4rSjRqVm4/bXRxQDtSRSg4byRycTsy''@;'; put 'put ''U2d9Xl9tSGhkJGVdPSF1UUE+dyQhSjwyMjAuXlklej40PH17SCtzKkdyeyxkQClpN1RAcnNOZnM8cnYjU1BibzhyNTUwWTpjNClVMVlvMi9ePUAqQV03d34sRjF9NSpPK200ZV17UV5pMCh3Wyx8MFVLRnFVaXI6cjBoVk5VS1JKWVErOFFneTxiXW9NQFAlQn07Pi80ZUBnLnBrWEYkL11oKFpP''@;'; put 'put ''aTUpLkIqVVQvZ3pBe3dqfWsmNSovbj9IcSN0WXYsd0FzQUlrcFI9dz0uYTVvKm1xemYldCZfM0oqdyRFbmZzRlM9LG01Wnk8KCl2OWJVSFQydTJiQUcxOmkxWyVYemdGKlZ4fFVkNVtjSGJaelBGMGJnM3RUIVdtVUlSVDYvV1dHMFAjNkhZaFR6bktjQD5OVnpNOHgmXnExLEwjWzJTTjNjRzFQ''@;'; put 'put ''Mi9UUVZQJT8kNTJtZkxEIzhpenBdeWYjMFVLeyFbXyRlKmhFfG1wZGJZeHo1PyltXkBEMV9LIk1QVlEjPEE+Y2JUKmR9MkRvaFRHIl5jfVlhbHhkR2ttKyYpTH07aDhfRW0sN3coSz9Ybnp2SygsdlBXPSo5d003NC5OX3ZiISwxSTNCQG01QjhXPkUsWG8wIW1HWkswK1V+OHBiJDRmdSFaPnVm''@;'; put 'put ''Y1ZdfiUjRzRMLGFKKltOZFo5TT9QXk9XOSNfLy9XVlFANEBCUG90aEc9W2k3Kmg2MD1gTkNsdFBRLn0/bTFoLzlqVW1fZCtyKGA5LHZiYG9sZHNGRCN+Z3F7figiX2VLflc1bFc8QnQobys9MUIiWzV+WmI5NDhmfClabWxFXVQkODAvaGcsYUFgdWQ4MUM/MFBGOUw+UnRQZksrZkhvKS5FIVZL''@;'; put 'put ''WEJWN25Vdk1uJFFaKn4yP1NNZmBbZV1+PXFOLkdMcX5tem40YVpgVUF0MT1HTD9+cn0jVEljLihYPi9LQXRWRCt9WHpdfmtwc3wuQn59e15oKz1+ZXhWTFhnOyRHSihaamlwVmd+MihTRSVAdzlrfih1Zm50TUt6R0s7aGU/dH1ybXc/VHMmWjwhMjA2Uj4ofkJ5MzpJOSU9I0koQ0JITlRJMytA''@;'; put 'put ''UyQwWCRzdXsmX2djYT16KjBbTS4leTlgdyVZLzN9VlJ6RE92OC5+LF09Mjt9V3pzKFN0IyQ1fHlodWB1KG9QNH1wWHc/cSU6d2RuNGw3Q307UnlUfH0qJX52YSk+a0BQUWxzakkiSm1+VnlyKEleUFFiKHA4M1E8fF51WlslXUltcFQieTE9Mis5X1d+ezRJTyJBNGJbRm1NUU9rN2RjWXd3RnNX''@;'; put 'put ''WFdjcWpPZGNXcXpESFVZbU5WZC9gQ3U+MTt7T3puUkZLPCh5N0YvQloqeFc3QyZveWRZKXdid1cqZmtSJn5nOTx8bntlc0ldPHNqWXhbdTAjZ1s+KmVifGg2VFdBMUome0BgZVRoWmBURWlzIlAsbyYqZzkzfF5TXX5RJUZxVzBAQlVTLy8kJTJ9bXAmc2Btfn5bO1g0fVFPJVdjTXZhTjdlbSVm''@;'; put 'put ''fCkxPVgxQmQwTVc7QkIiLnQiKzZ9O2QzaDFUO1oubWQjZnEiSmtNJHM/W3p5PE8uY1Z+aGxvV0UwJHRyXm9Genw9KXF+K3VjX0hIejBgZXs3QGJnI1IuenMhRS59aTI2cyN4S2NdWko0emBAZGZtKzc7YCF1aHxhQiN+IVBgfnlqWiMzREV4Q21pOV55STU4WWFATEFuNWxTL1grJDxpdih+Rjcr''@;'; put 'put ''RXkobllMU2VGQTRuZ1lpNCFtPlE/L2o1dGs1WiQvbWlsVHM6b3JUfHY+XyUrfXN4JmBVWVA0T3hqNXV4YWtqWnhiXjk5X25gJGV8JHdZRWc1Ujt2SUEqa3Ira0U9MGBoQER+V1NANFczZEBmRjhlKTM0fnpoMlIqe0s6L3NWME0uWnhZVFhnfiNgI2BfR0BgcjNVfl8yY1dfJW1WXyVzdkoyXTVZ''@;'; put 'put ''TUtDPSZiZGRHeDhJflJASHJYdEhoN2RzL2lQJG51X0dyKUNyOnp9e2IhSlNpKmF5YzxWMGkzZDhZNmJ2N216Q3UwcEx6JlQ6OFcwb0JraXx6Ri8rPWlfUERCfkdyUzRNe3g1VkZRSk4vbHg7azBIQnlrXyM0Ljk0Tks/KDYwQGkiV0UyTCImWzNxQE1WeihCIkxGP0dLckBrNGkxKW5wWzR+InMo''@;'; put 'put ''enNbfnA5eWJFKl1kbG8+dSwjPSxYWGtjNk1PaGxvXVYuejR4MS9OVToxVCVAUDlRKCt7MDsjUnA4WF1NZV1kSXlDTixoWSsqKkZ9SW9SKjZeeEN6LHhlLDcjRzY7aylIZ1JzYGdVO2hDXWxnfkIzOGhWcyo9LG5rdiYkd0FpMEhuaygxWklOenxSQCxZdylXalYzLiQzMWl5RUUyYGpsMXJie1d9''@;'; put 'put ''UkdNey9PaVRGPU5YPSR2cUUoMWpLTTZadHZHRXpFQUlYfVJuQmZbXV4oT1Qyayk0ZE8rTjArbTBKeS9Xd0kwREIpZnAqfEp+WW5oIl9mME1ZJXI/b3VDWzZlUXFPM1FOU3drO0wiSSQzXX50eDpVSj80anxSTUtZOTRldng+Ln5JPF5MTCpZdzUqWWVQZC5DWztudF97JGRWVSNuKGhIVzsyP0M+''@;'; put 'put ''cEJET2o1QHJeakMyb1tzU0wubVNEX05TTC5HNXRnK09QUzw+RUBPS2xkOjZTYWwwNi5ZSCU3VGdRZ25VbT11Vz11UixANHk0ZExCUzplI09DRlFvQko7aG47b3crJH5UQUJuSiVsVDNjIz5vSHU/SjE0MnR6SW5KJWx7dXRnYVNSb3lYYjBJUnBLdHpvTEc/ISlJVGNVZ1RtbjRMUFlNKWxVby5a''@;'; put 'put ''dENyNENaQlNLR09rL1o0IzBMd28uMi4qPXRCNkF4KmUlNltlL0N0eEdaQlVrZFs3aWhkaEhqZzE0OHRWXjJXKyF4PTNudnVuRThFQ3lYLzdAUFtVNm5NTXdiMzJTN29PJXcrUENsTDM7TSU4NCI0X3QrLklyMDMsTzY/RkpHYltBe0RnLlhASFhTVWYsNEReJSUkcFV9QkZHQ2t7eHFuSnUhZl9P''@;'; put 'put ''VWtOYyxiSSl7KkdKXSJwdEs2XSJ3IVJdPjIrJE8veFUqQnNDcWJ8KE1EJldNd3B0LkBLUyVSUWEyaj46QUAwZEJ5QUE/IkYxQUBqZzJXP01ETWM2YyQ8XVUzST8jQlh5SEVVWWhRYjlubmoiS0xgdDZpJWdGSEBKekM/Tmckb0FZQy9gbm51VXxVcD5bP0ZEdlkreit6TCl4PVdVV3QoQkR4RUVB''@;'; put 'put ''NmckY3R5V00sZiIzSSpicj9DeVcveW5sTl5We1okXlVjOlczMDtRWFF7NnMreyosV3hDXXAwLm5naDRBW0R2VlB4U0RNMDIiSW4mOjZlWkB3XjlBSSRjKDNGdjk8PW9AMlZ1Z3hLRCQ0Qk47b1M3L1Q/L0ZNOjZadjlnPGZffG5iTnRmRS9OX0ViNDcvfTlQYyJ5VUZKOSFtb25PMDtJUytUQzM1''@;'; put 'put ''fTR7dCNCYH13QHo9fj4mdVVDOEtue0dFej1iQFEiPWBSSXtVajowYnt5eEciQkJgMFV3Z2pjISsjQ3lJflY4Ull6cC4sPkhCSEZOMUslMjQlRy5ULGl7e0pvQ1tzXXddZE4rRDlgJmdoTFdoZmRFQGQjd25vb2tRRzFZemFbcVU6eWdKcGM6NiJZOFg+LF5hZGp1TU8jaGtqb1MsdFlVWyl1dGJ8''@;'; put 'put ''VjhvPVRCQjdla25jPzxJNVp9TUZLRT9mQkhGVltuYnEvRUxuT2EzO0lFUSkpfk1ESz5UfChCVXwodEFzbWBwQ2BvYmUvc246RXdhbnYxeGQjWjR5WHIpVGFmSEg3IS5IVTRCM0NqZlAzI1RndDpBe0lrMEcwUi9GK0Z5bz1Bams9VSwsT01VMG54SkBHNy5RY1dYS057RHtVSEhZQHJaX0o4Unp3''@;'; put 'put ''TG9PIkdBT0F9VUYlYnR0YiNkXlNERlBvZXpsIkklaj9DS1RVbW92M2VvL0RgUC89SS5eOkcwI1t2VylCKEdJTm9XdSFlJVhrVzNhemNGMlRxSzk+MU5GRzJhR091Kzh2ZCJIa09nZk1RUjgkPDw4Zm86eG5MdTBDQWVuUXBSRls9Snw+cUMsQS5nODxNT3k0az9+ZGEzW2QmNkczP3R3Q2VpUEkl''@;'; put 'put ''Z1BwJSRQWGxDSkV0aDRzOjZjMnt4PjJNdUtBMVBNXzVaVGM/eXtIIk9GUGlXWWs3a3BASlp9PSFwNnFnfTJTbDpSQF9XNENbZChLLl5XL2l0eWN5VUJfcUM9dn1NZCMkazhuL2ghaytwczNAXnMrZkh2al0/O1BJSiwkR3RTRFA7WlE8VFR0RXV4R0oxcy5VL010REIqZFZoVDNAVDsiRDQ/TXR6''@;'; put 'put ''XXFPL2A2dyg+Rk9FITIxW3pXUEFTeE1GXlQ5REwjXzJFImlZLlguWGJVWXc5MGgkT09db1JAa0N+MH08W3Avb20ifUozLF1UfFZPMTtec25WdXdPTVIua2spd0RxJUwpdHdANiZrJS45bnxwWiw+dF8wfXJbenZiSCVAUHNSOHo7UHoucW51VXxBKlQ7V1d2TUZVfSRnR08+WzRDQ0J+ZzQ7cy4+''@;'; put 'put ''PkZYME8wYTpgWW83VWpGIzRIYl1HeGIrKzxEOUEraSRnRyUmV25NYUh3bzg8bW5FIjRdQkolJWMyUDJPL0osNytEOnF9I2UyazBXPzBCR01EdmJaS08vYXRwTy9gUUBycEMuRFMyPFlRYWNkN2tAS08jSWRVLl49SmtEYlU4eH1NRkh2biVVWkBaQjh4KkI7bz1OL1RsKStKWH57V35oN2BpPU8z''@;'; put 'put ''Lj5BRUl0U0Qoalh6UjlkNGx0fTo4RHR3TC85VWcuYEUjazM0anV3Q0BzekIsNihbWzZANihbMzQzM3EiJURJV349YiNjLz1bMCglQTJNQlMwPFFTYjRHdTVET0UjZGgjVm9idVd3cVlvWk9MZFt7e25VW1RkSGNLKn5WKjZgUG9CMGRLelQvKi9Ad2daQGkwN3dGNiYmIm5vQzBDTyRuJmo6aT1C''@;'; put 'put ''RGFCQTR9TSVOJSRnYjdwYXVIN2grKENDKV1UTyR9NExSdGRSWiRPVmkwKFRdRmFGSFZjaWt1a2I2T0pMb1tAbUBzVV17Yzk6PjJBaUorWSpOSm9wTHxBOTBlRzxVfDBqQSE2dzY3ZUtvVSJwMltlc0dwVkZVKHlxek86KlpwZntPRHlUb1dYVUpzVU15Pm8wekczQ0QiZ1F2c1Z3ZyVbaEJJSDVC''@;'; put 'put ''IWU6b3p6bW43W3pYTzc3NEUweSVoPzp1KWRxQCZAPUYwPCNPPG93LDVFTE5zMGJea1U2PDdPeFNgIzxQJFRjMyhdeWdbPkZYflBdIkR1W1BhSFNdYV0oJGBXR0RaTTlWTjEiWWQ/dEYvPFJJR30wYS9vNGJNWEdCeVlFcyRnMjpXQGFNZ1osTzssVHJsJUlLWSVJbEk3UDN4KE9CTERKRlpLWDdv''@;'; put 'put ''QGpYL0tNWHg9a0BfTXU1SzVUSVtSUVFUQERCckVyflJRWzI4NVUxaGhKMWtuRT9HeXNASVlqK0l2PmdWQiUkQVVaa2QvZnxbUXdgMlNDQ2JTVWMiV3F0M1ZJa1IxRko9SjMoNUFISjQueTpZLzMvfSw1UX13JU4qNnpXQEJER013fHJ6ZDxUVlhndkJ2aHRWS0N1K09Nb0JbUFY0MiFmVEIqTkxP''@;'; put 'put ''VU99W2JCLEN+Z0NLK1tFQXtkY1cpSSI1YVE1ZzhkYzR0LCtCSVd+ZF58cyU9KDg3ZGtPM3BANkNdUGlUbWc0bmF9Okk3RzF3R0hLUTJhcC9vWU5ZSjZSKVdGdz5lUlB1JUdvSCpQSWsvamwwbiVsbmcpNip0RT9DeFYsN003P1twWylJMT9KJHJZRVFjRT5FaylELE8vUXdmJW1ua1g6Qk1MVFRA''@;'; put 'put ''a1JjSSxSd31DV2F7e3VDT2M8eTwxe3lOMU9PK2tvL0VVdDB9UjhSTEwkZ0YlQnR9Q3ltamQlZ2A+TUFhSmFtNEV3YXx5QjJxMmE6SGJdemhrKC5FV0BrUjlkL1klWCkhRiNSKjFjOHx4VC95L3kvQ3RfYTxSRitNTXNqfVpLT2xjYE42ND50ZXdITTJhKCgkbjpFYkdsSTohMm9fMHdnKVsxKFdG''@;'; put 'put ''VEZkUGBxSUs4PWNAJkFrRFhIJU4uTmRvXUBYNXw0dFgsQ11KP2Z8NyRnQzMkWEdWLnAxXk49JFhNU2UjZTR7NHgzcW8xXkBVVVE4X19XdGAhOjY6aFZbaGs4PDA7KDJ1X3R1TTFrbCs7TzVLeGlJeEV5Oj4wQzZKO0RsJEtvJkxDUFl6ZUdQb0J2eHhhbVZrcCszdXllbmJTb35Ae0FCRUs5RDNq''@;'; put 'put ''S2ZIa2dsK2d2LD9kWyNNSFouZENQSlE8bFZLKVs5WCRxZzhsVTFuTVl5Kj9ecDp7MlpYbEdaQkZLaW9hOnxhY1dRSW8lQE1wI3ZucT8lLCksfFczXktTaj15VVV0dERRRjpdVWtmM29MYlN8UUkyeTpxbnVvfHh2Tis2XnpVQDZ1L3Y2RWIyOURIYi9tb241dClDPkE7bHhnajQiTDZIM3c3byFr''@;'; put 'put ''KlRVcF9PNkhfI2NVTzd3QCJBcVIiSGd9OUJhbX1NJFQ1KzREKFZ7WisvdkBDLiNDcnI7bEUzPFtCdlF5T2dKUWo5Yy90b10uazNWOl46LnY/dChiRytIVSZ5bjBxMixuQTh2Tn1NJk5uK0RdVERxSGQlLzZQLyFCUytqQ05Ucn5nOCwvaSsrWipHKFhqZ102eCgyeDlyRzxmTDp7dj5ZREdreW5S''@;'; put 'put ''b3QsRn1bUEFgNWBzLlE/eHBiKndMeWZoLj1tQUIrNjVuUD4sM15uJl4iYmczLiV6cUR0QFpQPVZrRjNMWDZtcFQ6LktVdkA8SVdhaSlHSnMuO2JuM091KHdeZ2hkaWR6bl5iK2JXJWpxbkVrb1Z7S3tnSFVscy54bk8uWFdANFFnZkhaSTQ3SHc0Wk54RzJqVGMlcnF8Xz5vMENfWXUySHduY1oq''@;'; put 'put ''P3xyek8zbnYmMjA9JikmYGpEMyM1P3c2Vkc5SkAkcnFzK0BMQDFRYUsxayRDJXEvNlsrb2tdVyJBJU8kY1VrJCFucys4SHBLNV40LkolYitIU219QHpmayQuRnQ8XUxEX3BkJVpbXjYpVCIzJDMiYml0aXpTVGhYPUVyJCZicFUvKVpBeXZzQFtHWzJ0b1hGOk1gKlNRVVFeanZYejtSUXMuSiVJ''@;'; put 'put ''dkg4YTgoYGxWJSR2bikrYE0xbUV2M143XjFGSmhtdX1FbUdYSjZrJWAlWFFCd18xKStEYDdjODpgaGIyeEBeOUVycj9eIXhrZF1pcnIlM20lN2sqRlBCKFZCMC5KLD9sVjdvaEwlQlZrfjJpInZkZXB2by5KaihsLlFuLGBaL3xUTVJ4TSZmfVl7VTtgLzZwcmhHM3QhWVYpJDdrZDNVPEJsbj00''@;'; put 'put ''SyVIVSFFcFJ0fG4za2QvNkdrT3YzUXpgITp5YmQlZC4uVCJLQnlJcll6YDosXjJ7NisrW08pQnBOdSR4LC4mbnE/UEJCQ1FnRiVdKHRBLlMxYmgkaTYlQmtKLzZjODZWdDNtJU0lejwwPUBbWUNBM1pHRUk6cWRyJENAMzR4fXIsKnh4R0pOU3B2Om9GOnhFfWk5dE55fDwmNixfVFNQO2R4XWs9''@;'; put 'put ''PVRTLzYvKl9uTiIhWSU6cFpAazk9QFs8dW95ZmRFNWVIS0A5WDlPIzY/Xi5eUW8+ei5Ke1clOlhjQ1g9QEsybms8QGcwaWsuQWFbTTNVSl8yIT1tQTtVSVF4PUc/YD9KSiM2MWJuXVovaiRvLkdYQzM6VEVbPjpUU3t7dHRRWFlbOk0yVF4/aT5de0RaMnRgYlJuYzg2YFVvPnouSnBSKFYoJi5e''@;'; put 'put ''UW9tei8yQkdoPXdXJUA+OiNPaVdVcHpbTTMzdzZbJjM7cWxUMS9QYVJTaXlDVWYzdm88V1R2NiFURGtEWGlwZFUsRk9gczN8N00/UV5+Wn1GISFUP35PYEVoTS9dflR9I0E/UWR+Kl12d35+Ln1lOytlKj4sflp7cF1oNnNXLH5Qe1QpL0NBIjx+en1HN1JxfH5Eflo6M31gfnh8JUtYNCR+eH1m''@;'; put 'put ''QTV5JH5FcCJ+Il81UyJzan4pKmQrX3NyfFI2QXQ+fl1fcVAoaCJ4ZlpIb0E+Vz4lZGV+MjQySCFvaWNmLyQoNilfPUZ6PG88by40ezxVMDxveVdiP1ImR2NPY3BbNUM/YGpFQSJFflokXSZiaTErZ2Nwa256eTYiMS5iSU9kdlZFODV0Vz5+Ol9+e0JdQiI2fiRaTz07TWtIV1JlcWlXfjcpWmNY''@;'; put 'put ''KkFZditecHc6QyF9SkBVJHJPUE8wUyFffT00dUpibXZSeXRXMnw4NXRXLjQ8aHk/KWh8fktiQSJpc0c2YHNdJDpzLlR+czpzcmVfc2lXaDRfczV+YWZCIklje2tQYWszSEg1OGVxenxjYGUvOH0leW1iS31hUGZnRi9HN0YvSkdkTjFFSm85clJMMyI3emJ2IlNJaCpmQXRTRGMyMmhBSWUkcXBz''@;'; put 'put ''O2ZxOXhnTSRXVntrOFJ6UShaPkclZnY/U304KDohIUI6OmZZXV44b1VicStienBiUilnOj9XX0w7NGd7PDY5TWUjMztmWzZmQExdNzM9en49JndPZ2cqYV53Kyg9YFR1eXpoalQmZD09KlFwajJeIiQ1c1UoZH1KZltPKkAmUHVmcEpMeClZZnA4WXxCWUs1bWEsYT9xa0J8Ol97I0ckIV9JfkBd''@;'; put 'put ''TFFgQFFePX19YWI2cEh5KFhnIThQUC8rd3FSZmNfQHNPK0lbR1Z3fFRLO2N+JXZQSVZyL100VjZgUUldaDlNJmNtWyZjRkFdP3pOXlBUOSwoXWcyfFdiPHxpTDFrM21ROlg0cExlM0tiejV2bDFiPnghWTpPVU1XRCVXJmdaVWxAKGoxWyxTXzsxRWBVU15bfUQ4N2llJkc5S0RxUUkofV1VdmYu''@;'; put 'put ''aU17el92ZnhxNWlOQFMxZmVKI0JiPjZxOl49cj50LyM/Q05eVUdfZW85Sz09I3FXRnZLT15QVF82TjZkQGx3bmdAbC93I2lxOTtkUk1ZV0F6Y3hqVUUjbj91IUJySSV7JCNzNUtqfnZkTStEb1QuSSslcV9ANHZbLD4sVUY5OVNiUWZNV0hWWmYkK1VGdU43VktAdDxUJGJkaDJfJiNqeWY0IXs5''@;'; put 'put ''ekhaZ0FXNG1NKHchMV9INWcmZD1UVE47LGYscCklPHR2Z01xLGZjJkxiV05yPlE6UGRPMXdLaDJOJSkvJXpLbG9ORj1lYEIoJUchM2Ewak99P0JzWjZ2JCkkOiVZXzBNWXlOJFNKWXM9O2wqXiFjPHB3YFk2emEzW1JDMV5TbE16VT1ifit3YngkWSZJK2tHTGIwPkldKT04Pnwrd2IyPiVQMmIi''@;'; put 'put ''LyEvU00jOiUhWl5sel1TeCw/JWlidyF7VXwxbDF9Z00ha1tyTFl9WnppZjhIfHxmVSI9a106cC9mR3dgenBQQCVRPTZhTnIvNkZ6YTFQZ0JWX20jWnBKfT1eJlM6KSFjJlFFNW1Acjc6UiFnUltwb2p3Lzo8LztNISZRTzY8XSNvcX07eFRZeDdGVnE+fCtlUiE/KT1rMm1kKjE+ZW9JMTwzPiNP''@;'; put 'put ''PEczMWB6PEc2OWtbUTx5Vm9ocF5zQEpbcUAzVmQkOjM6cnchRUkyVkV+e00vaGksdn5JXXNsLlFWbipbaTI9bmZofmlEX3sjLjxNdWM1cyxDYlEpblVSbkBgdCtwa1hsTCVRPTZwajwubXwlbD1dez9dZDokYFRdd1YjZih0cD5RfGtkMCVPJU1eeCwvI3V5T2clTHopXj13Kms3ckpkJERWMmNB''@;'; put 'put ''fG5VVnpdNF9kV29VJj06MlIuMWF1R11vU3IpN3Y+a35tYWhYZyRVMkU0VmBdUFpJUm9qQ2YsU3owM3FfWyJPdEAzPTZRSCZLPztpM2J4UmZPejApKl1eaX5jV3dATEwqck9MSDV7bDViL29bYjFdVjJHJmxPTWVlcys5MUJ2X3BtRyZ5OS9qXj1oUFpibFdJbWVWRiNaLlpWT18xWmV6RjE3TUtf''@;'; put 'put ''aFNxe2llOGEsLlJiYXJnXS9fTUVmbCJkJnFxe2lnJi5zYUZgLzhAcy8xMGdZNjhqZGk4RFU2KVN2T2JRKkt4UHJnNUB7XjE2JFNaMHNhNjNoczc5OjNGZVtnKHptXWprV048cF08YmFqc08rKFtySHB7XS9wODZCUWgxR0hWRl1TJmNtVkFrN2g7a0VFVClnJW1vVE5fSGpKPlg6cE5PMUg+XT1k''@;'; put 'put ''YiIvTDpiZGgmYzZNKGB3PTolSjhhSGdCOzx5ODN8TzUkNU5dKkFgOyRYVDc2W2x8JWwqL2RaP08xdEgmRGBNbilqa3w2Q34wPGprfEthViFbOElZeSN7ak56YFlvUi4iZzpYTzdNKGhiUnBkUE1ARDFRYjhfQVIhfFlAIiVBOHtkMDcvNjJhWzxiYU9kQiV+TkIuI3EiZHBHSSYvODVCUWhPcjJf''@;'; put 'put ''Nl52SCtRYEkmRjVWOWt4TXUpU31AOEhxNlVBYXIzczs7Lno5XVZjfFdEUyNNcU5yMl9jWGE8Si4mKXN0d2Voc3IwUmtLfEU6IUViOiJvOEA/Und9LDxDbDA9ZmBLUSElTGFZRHkxR3szPWEhMFA6Zng+MUlFZ2NhRmdzKjtkLzteIT5AX2c6ciFMXzw+cCxmKC89VXAqNUQuO31vVVApWXBwPTRR''@;'; put 'put ''cSMhMEZ5L3B6e2teTX5efDFlSzlkMmJXbHBvdnZxeGMoNno1c1l3MEdASGkxUExINU42Tll8a1lORFZPbzxOTDpCKCVHXk8vUUYoOnpXZkFlXWVxTiRSeSQiT1FpcjptbC96UGRRaXI6WntAbGpOSVdCL099flYuLzNdMU4hcWcpTWBdOzFwNWxqI25xX0AzQ1AhYzY1QFhOaEdkXyR1WDJ3Pl1a''@;'; put 'put ''ITFHJixpZiowKnkhV11YSV56THJRYXRdZm9DOVErUmRWe1g1JFBoLEkrVmxZZkloTCRZX0lAXz9bZEk4a1tkYlglR0U3L3gwW2dCNWlgVHpTXWg4VWRocz19XiU0VTM2ZG5OKypQSH1PZ2xLenNkZXVvKVZtdiw6QCZ2UlMsVV5OfDVjLHNnMU5vdyxfNkAjREliNi41fTozK1VNclFxPT4rNGcq''@;'; put 'put ''OiFxfSsvTSVRTzZSSDgmPCsrQExSJi5TMHU5JWo3YXtrVSZ4KTg5aXs6WE1xIXF3IVhkWSY3OiFxcGpaMWVsZlZfN0BOKEAzTz1iQ2JLI1p5Sl8wUGQyMjlUVipTUURiUUk+U2d7eTY9JVIuZWJPfGk5PiVAQjhvajBhSXNaSztzek9QZHVxV2RLZlQ6UD1wbStaLCg+KWtmSTVgUTdqVnc4dT1s''@;'; put 'put ''aiNAU2J6W25IbVFoJUFoR3xJLjtHanVyQGY1enojOSVFeERvIT87a1p9Tl5bLEM7VmIiLyhxNlJdPWE5bHJDTWttRzk7K3ghNjBDcFNeQmxCJHZndHs/UEpSWD15ME0oaHNge1JrKSVSITExTD1dU1dvIiVQbXJ1a1kicHJFeFUyUVR4IV1eJW55UnE0WjRlRj1wazw9RXpzJUIpRT4pa15DNjhi''@;'; put 'put ''PUN4L3BgIXghQnxZPUgmZnFvVDY8XVVDRWFEfElJVnczQz5WXngsdyFHajQ4bmRYI35rMW1nX3k8cyFYPUhaYVYkbnp7Lj9LaXYpaF0jcUA3JnxtKTZndDwlfmo+RylCYio7fk1HUD5fcj1mKFN6ak06ZnBmIUsoOVUuOXZ0O3ZhPklzMnc4ZEBFI11ZTHA9PDczeWM1K1loeTNhVmhfTTZUck9x''@;'; put 'put ''UGBAdX02JkpLOG9qUzIqemFWSVBxcGE7OHcwPVNnPGo4SXFCaCEkcHFLZENdekZeJE8rPHNrez87cCZBZXYlVUdWXmU9emZXTSVRPT9Le3FfKTptWnNzZUs4ayhWJlAkcU1yNmsoUkc7M2xxO2RJSjtvL2JDXnlieDpjMk5rMmI5XldtXyt6emokfE1INSwse3d2a0FhIXBhLHYwejBQazp6elVe''@;'; put 'put ''JVdsfjhAI1ZefDB+ckR6djpAYX5rO05vOyMlUi4iIWBNTE17SSg4fUBzZV5OcmhSKCQvVHZkd1JDIjV8TWd5X3Znc0hALDU9PDx6amhkJDp6UiFLOFEoIypHb0E3USglNyNObWtNb2RlPFNsRDlRZXFgcD9PbDQ2MFkmeWxibn0scWdISzA2UGlmcXhtOzpNbzs4cXgkXyltRyssO2lodHZoYiIv''@;'; put 'put ''IWpabkcoVT1RXX5QM2NEeC5jYyVnbVhzcU4ydmsxSmtpYFdNOTpEX3ghXSZvV3M6Tn08bSNFOl4lO3xiSjIzbVo2ek1kRHxOKjQpKUFsQ2guWywxdGgiWlJ1IWxUdldyQG1qTkMuPWVfJld1flpbK0xFUDw6M1IjMjA2MCQ/O2U/UlkhQWwsdTtkKnJ4ZzI5fUxUMl4mTG9LSn1wUHloVkhpTXlo''@;'; put 'put ''Vlo8OlNQPD4/b21abipYKTJZRiYxV2BoOEUveiNeb253PFUobSxxWUZaQDZjNSt3fj1eMyUjUlNlWSZOcUQ6Qjc6ZFk4eSErNXY9QXlqOVQ9Uzx4N0pfbTJ5VmQhNi9OMWJlWCVoZkN+aWhSfSVPaSxnKHBHcTh5M2RxN3FhOz10aT8wWj4xTDp5JHgjPGZHY3V6MEsoVllQRD50Yk9fUFRCdlk9''@;'; put 'put ''e1d7Z3N2R1ZCVmdhT3EvZl82WDZzTHRKdHxlc2hFKD0kOHJ6IiVvLGJnWUZNVyJESzsyMFk/WyhDK2UoRUAqamZwTFlrYmtRaCEuXlUxNDhCPl1ifjZ4RzF1Sl9eZnhidlE9Yk1aTGVfWkpbVHFsT04+LDtBfGYmUUo5USQyYUszWWQmc05INGVOXkJrMTA9bDIiJW13OiFxeFtSUi5tS2ptXWVg''@;'; put 'put ''XiZsSnp3LGx5X1ZwfWQ3fW5PK182Sl9eZjgzPEdmVnovSjVSXkZMdTk8U2xxWmRdWkklPkIvXTkmSyQ5LztyWiRJNHJORmVPPCQrWDFLaCxaYV9IKFtuRyZpJmhWd3E3XkpGci8+cGRfRWtUXkJ2ZVZhelUuX15kUCQyPDtHb2xJWVZ3cWs1VGRDPisweTNYZHZTITFqb3VLITNwLEM7PCFbSVEm''@;'; put 'put ''RDJOUE8odlE9Yit9aDs0VTRtQ1tfdUFuWm5wQCI1WyxxOy5KMmdvODp4MTAxaCNxZTtgdFslfmosJVgxTSxXbzU4ZnU8YjBsP29dXnw1Mn1QaGhpMCtxaD1pbCRYPW1Nb0opakk/JGo1OnRsMXx8bFptVm9lRGk7IXEjJV1gek1hemg8alJQZz9lck1FMUlifEBnfCxpZFRkTjBMLC5wOEVqY1Jm''@;'; put 'put ''b0dWZ3tpeXdxczp+ezVtLzlJSyZ8RF5TLnFNISV1LDx3W2c2LHk8cyFESStwVG0yTmplQFpZeT0hcVRjQGNLbllkeTVLXjRWNmsoPiwseC9iV1BPKHsxK0BxaF88K2xJazFHYG9NcShxK216MmgoPixgOjVQbF54cEphfns3fDNhM3FyR3BQcT58Tz1ieT5gQClEOXplUkZlRU1LeERvSVJ4UTJR''@;'; put 'put ''PWI/b152KHBNeWhWak9CdkpfIVNIKG0sW218Wz1qcjp1b3IpO2Q5Xk8/fk1FUktaL3dgJkVxVm5xbW84R25zPkArL1VaKGd7P20sTWU4MiV0VXtZeyRFeSRyKkBMMVlaeGYwKihZTUhkMjswW0F5JHA+TD5RUFI7TXFEcWRxJiUwVFcyKDUvMHAsPXlYSSMpYCY3UmBATD5SIXJeTjtBeGhsb21r''@;'; put 'put ''UDdAND5MPi5lSTkkXU0rLC58UFpiKz95SUghMj40ZW8wUiE9emJoaGVNZ2gjfF5bbkFIaThBJikvSG45IyNIXz9NeDEkbDEmcHhlYzswKiFqSTk1UHxAMko0bHRySztKTXE5ZV1BXTJANSxEZyV6fXBmcjZsLGQ5QCxpYW5FSS9mYGc4QGpSXWUwcE0oISpvZi9RZl84XTtrQTJyYCgjKH1HMWhi''@;'; put 'put ''MCp1S2p7NWFbKUpjSDR9UHwwLylmeWhWZio3XiR9WkRzcEhxQUZGXzZheygjQFQrcWs7ZyM0PGpkJGE6SDpVMSFfVVNkQC9uMDtgR05xM3p5M35wNHBISWc/P1lbcDM+MnBLKCQhdFRaJHwjS3FNaHM9PWtRRWk7YGkuaUBLR3xCfko7NGl1OUJAKGVSPmZ7USVQJkZiLDhZJFZgY0tlKC5zRz5i''@;'; put 'put ''OWtdNk9HWClacywmeElnfCEhaixpTjZSZml2fFBJK2IpWntCT05sTXN7WnxASCYjTHVZWihsb18qTXpiMTojfTpwdil6JGp6c1pLeiROeXI6Q244M3Q7Q25eaTJiKlZ6Ty9obT82OENmTHBPNkMoNUdZajhASUtGUzRORWpMcEUoQFJnZVJ7V2ZfPW88ZWA6WCEsflA9YT07cmU/PU5gemVmZioy''@;'; put 'put ''aTFfODJscTBPaHZTPm4oOG5eMG1aNyhva3k5eDYhVDI6cnVsfFtFPmExMWYvanByKFNQPGd8WHkvOio7UHBDOVBadU5Oez95aWE1bXteU3txVD1ibnMybHdPMnpGNGtiJikrYm5gcXhbJXdjSmFXI2QkJDBObzUkcjN4ZWU7WF1EbGhQQlsyP0BsXzZGNk42e3owSyxtUXIxcFA1aWAkWVlxTWhZ''@;'; put 'put ''XX1aOG56ZVAlKV05QD9STXN0T086WjlZPyNxJlJEUGsqRHwrcHRLXiosOTlLRHFUZyRVaF5OOzteYnZzSjBqI1lmZCRiQmFgYSZ2WGR1LC8rNnsyWX17Pjo3UTVOdU4qNFpIJEgqYn5QSFZPVVdzdDYuPGtkbCFAK1Z3TGRGOV9dfTtIazhdK0lRMEY6P2ZPbzlRbWRkMksrQCpNVXw2PlhqfTAk''@;'; put 'put ''WmJvalsmZmwyL1smKl41I24wLzhfXTw7N1EvTk1wKGtaeyM1fGhEKUhYRnVpVTw7Xi5DbDhjQVRIZUNYVntDMihgJDdQLn5oMmJzRGx3YikpJlIzSmp5QHtNMCNQRlIseVZOMVkpTyxkbmUmZGw9a096XSZYOihTIzhzOk9hRDJ9R21ZUCVkOkBfKzN3Sy9rL01lNmEwdl42OyMjNT0+aXt6KSos''@;'; put 'put ''ZXpPdlIrcFI1RTs3UXRoODFfXUl8VWQ1JlJkOCMua3heZ1l0YT9tPX0jZDc3P2IkN3gmelFuUypqbWRWeyhqQiZhUlBlN3daSHZ8I2RDMmNAb1RBLGkjYVYyLyFqWzBKOGksWFoxbUohZ19LNlhXSGpyZy50UjJ1Xy97KmxZVDxmXW9iY01eMVZKNkJiKCpncm9dTl8oPTVfUGA9fWs3YkQoMHhL''@;'; put 'put ''PX1WKkhrTGRTPjcxUTAhbHdjaUImXTtuNXUpJSI0Mj1lOGY/UyVsdzdRTCtxb30jcmc2Qk4melEuZFFmLl08YWZ3ZnlxKzdRXz9dUys7bWx2fnNyVzkqXjZlNWE1Nk06c1N0U34wcWd1Sl5NODs/ZmAsRjFFcF83OjViVEV9O2REfDY9dyopbE8xRWk1Nj0sYFN2U3ZTITE8I0U/O2t5JF03aUR7''@;'; put 'put ''N2lEKzlONnU5L15fPDtebU1YJC96cnB3Z2lQd2goJUM8RDJyLChtMXFHaztsJkxhLCgpVy5fNmJAfWYvXTdRZVQmbGFyaFVzfFtHKztDTX5dXjZ3PXU7JjlBOSl4d3NCe196WztHKFEmXlk2TnBUdWh8QF1afElQJmkmdSxlbE5RMzkrOW5AcyxBbyFOZjJHMXIpIl58RiM2LD16blQ4YiF0Zko2''@;'; put 'put ''anl8dyp1S1IxVlNwQ307TCxBc2QraUM3Tz8hYnw0b0Qla2ZyfUdaMCZAQ1FOXy46JTh3VlNwWzdYQDMocSFOdnw2PEJ5RjgzQDpWTjBMezwhMEgodXl8d1EjZzZPaXM/eDhfRjlUe21EekF4WjlPLFI9Tl1mcTo5cENrSV8ydiY4UERKcGhMZGtqNmU9UVArYVY1TXpVdWBdNys8Vzo0TkhzY29W''@;'; put 'put ''b3V1MmZFVEojZXMiZH4rbTlROkF2UWRqMkwoQXxJIWU2ZyFSZWcoIk9YU2QzY3x7ZHNmeH5+NyF1OTpEfX43cGplMWFndEg+ZlU4L19PRThhOXpoalFkajJle0IocSFmd1lASE19cHJNPyE8ejhhOlJ2WzJLKnciaV83aURaJE5kQyR6JndNeGEjaTZRUD59WnQkTzFdJFMlNGdCO3hlM2wzWE8x''@;'; put 'put ''L2Q4K01kfjBmTllnLmplNi4rRyRgd0hATllnbmc8TyoxT0puPG56XytxJEB9Ny9OKHpsbGMhamI8LE55LEBXdypQbXEwIXt8cXpzPVoxUFBRUDUpN0A2YU59ezBZeyNTLnIxZ3UwKCV5OTBLOzA1am52KFkiUkhRX2FdUl5dNm4yQzJfckZWW2hVZ0tLNW9CZkR6VXg5czlRcSlzYilUO1pfSmQw''@;'; put 'put ''ejFoUyhNVmhgRmpRaFUoOlMrclpxM3YvdzdAbmpaMV09TlFAPUZ4T1g/MTReX2FNVyE4NzZYPVNJOE44JSghOEE1di93YndFTWtKWzp7fHlWc0ArNndxOF1KI2tgY05iN2t5RWVUIU15XytaPDRlSXc1OVhaMl5bc2xWaGBDMmhgYkImYGosO0kqYFN5OUN3Kys9QlVPXn5WSSorJiteM2srejwy''@;'; put 'put ''SHBYKV9afjkzKnUzWT5JXlEmSSsrZnVzMmw3YVBwW1JKUUl7P21HIzRlQD8panZSJlhANi9rND43X0x7dVNzellsUV9UXTU2ND80cDVOTXNuQ1RfPDs3UTByZjYmUj44NHEoYSlsPTNJbDUmVnJye3MpZjZye19dPDs4OWNoMSNGe14mUTpROlBkdXExT0NqI1FuXSk5Ij08OU9MNjh+Uz1ldTJf''@;'; put 'put ''bFkuJEhTLms3XnBBZCJaIioielcwaTJELjcmITdYe1ZqTl5DaFZVSnxvdXYhJnZgQGU+PkhDantieDFhclppU25RX0F8S0l5ZSlhenQwOmZ2LzxCL0pmUGVQSlNkQytEeTtjOkRxOndzW3pNTmpUQDRmWjUoYjd7QnBVP2wleVBlITw8dkYqNHArIyVjM0JIZGJMWmEvdHJacmdqeiMjP0ZqR1FB''@;'; put 'put ''eVcvIz5tX1Nja1hPZTJfeVRia0MwMHtQTUlnWE5KP2AheHp1MTU9WXNvQXZLQH1LZUFLTzl4TG1ySDdMYHx+REVQXjI+Smx8N1NDPzVSTys1Ul1mPWhZIktoKWsjOkN1bzdIR3N6UTsuT2FEczRpc1BiOVFxYUgob0V3ZylMZlJmWjFCYUw9ZkQuNElNbF5lcCt3KEE6KE57NlZULno9LyRAXWY2''@;'; put 'put ''Sy5ZWTB0eG40dUlxdWhZZFtdZl5QMGNrWld4PVhDUmF5bXFORUNoKjRTIUlKMUtHeTc9bTZOI04vUzt4RGtRNl93d2tjaVJxT0lmaExmOD5vbkUsITw6ZTdQQ0NSSE9NMHpnPEwrVzVHczFfMGc+UDdvdTpPRzsoM2BqXkBuRFpsczVOJiF1O1tKOFFEYWRsbnJDc2NuRU41dU5KbUY7ZTJpQ151''@;'; put 'put ''SDc0NCpURXp1YXUmKlNWTl4kPTAkNDdTU10wa1I4UiQqU35CLGQ4KncuKSNeeWNML2YlUXdsMUpHIjZQZnVXY3ZFJUFoU095OGc9NH1uQlRVPzVyXlBpRUM6XVFtT0Y7WW9xSz9aeDttN2JDI0tiKXJPRjtuO2U2KHlUemU3YkNiJX1ybGhje0t5X3VDZnEvVWMjRXR6VHE8OChlc1oqdSVnRXc3''@;'; put 'put ''NHpKYzJYO0I2UTtBNUxGYDE3UEk1ekpVQ0JlMi9TOyoiKWJFYjVZOjomKSJDUzZFOjJdQ04lKUYqWmQpOiVYO1BfRGMjM11mbVpRKz43UCw3eC4wX1F6XmRQO0csW2RdWWhxM1dWb2AoSHQoSzk/akYmeFI8MzdRamUyd0VGM2FpNEJPcjxVaSt4XypVXlgxb1BWQCJkSGQ4V2pOaHJCIktKWjFv''@;'; put 'put ''PFdBVyo1b2dCTVBmakZPaXBzPDxffTZGXzRvaHhISXJ7JmlRR2Y8WWRlZzpPVnYsUk1eRkV1cUMkP3k6L05Baz83d1Ysd2gqPWh7fCk4JDpkW0B0dTJMZlBlNiF1TSZMQlpzWWFwbEJHTyVFNWdCTUIhai83K1JkYXBodDgoYUkyOXYvblp9SjV8X0txZU51JmtEbG8pUk1URjYzQFFWYGZKcytQ''@;'; put 'put ''QiE/TEZ4SHZHO1M2SUckI1NHaSRUZDV5X2g4NzpETkEuLj59RGc/SVlxbH1SRiVTWXhLR0plREBRXlBacWorfD5ycGx3RioxaTJBaD08ZihbYFJodCZ8ZTh1Qj9pOmkjZUA0WUtSLEdKKX0uRyksLn0/ZE5QUGJoU048U2ZxYC5HeUJPTj54eTE5UzE0cjFobHcxbDJ3byoqQmZJRWM3U0ZLXlt3''@;'; put 'put ''di9mODZkdmJjKXsyMVJGI0ZxOVFSKnowfjlwYHkxYys0OjN2M2Quen4mSFBSQXk7fXFAKWY3JkJOaSVAcmpmQzdPWnQmTH5Mdy5OY2dKZ0RyTGFkeGZhSmpqVHlyL3tSUGIyYFtSRDh3ZUZ1e0FOQiN8KDM3PTphMml7aldCNG44WUYqOXQmTzgjUVImM0JTfEpaVTphMmkkR1IySXt+fnI4PnhC''@;'; put 'put ''MVdYP0khWV1KM09oQTlbcEg/JXFgZ1UrITJZR0YkR09mImBRWUVyQSJROXhic3V9RWsuNlY8ckpwPVlaWFtickkhfCk2N35hYUM1VVJVL2siMFdeUHVpUCxpYSQ3di9BLjJke1hddU5sPWNCNk4jQVpJR1BtaU16T3k5dUdqLHMrZCNiPyV3SFRZOkwjV2M1eHNIQEV3R3FxeFZ0VlVKKkZGYUxJ''@;'; put 'put ''WVIrUWdhVkskdn1AaXlnRUdEYHVCNTkoIUkjY3QrLG0+Yy5Sb3VHdHxYPEVfN1RGJHZAc0l5fixZZStPajoqSHYsezd7WysvMkxOY1NReTtNQjdieDQoUzVScDpoNDFFPiUkJGY8IUVPQihTNiEzbUk1PjJsWnJ1K29QK2MpaEoseFJZLGJzOWxaajY4dyV5YFIsNWovNDEkdno4cTAyQCVJX0NA''@;'; put 'put ''QShje3YwLl1qKHZbQ2Q2SXJCSnVvbVkpTDVxanhTRiN6R1EuTUhnQT90QjxmQX0xL3RCZmJrMVBVVlg3djlMbjB+YHhSNClGd0RmOyY6XiFGamVfdmQ5Wkx2RCo1InRsZkQ2V3t2MmRYeTJzQisocXU2T2NNfnRuZXEpWGNuK3tANUxZZX00MXQ5MG5vZzp+SEw9cFtGWHEwKDUhWjBfWGVmW0p0''@;'; put 'put ''PTw3UkRfam44TX5MY01FTWMvISJiN3BNbCZlcixYI3VzNGVFbH19KUg3ZjpLLCZUUkgidyQrYEphaVI5SyRVUnhDJldnZ3swflI2Q31RMENtNXdtQWtaXUVLJGE4Rk4lKFt0eD1PTzNnVUdNQCUrcXoiOHRMdU94SlRYU2p1IWtXMlNmTHk9PldrKTVWYkp5QjVHMnQjPCt0UEwsM0ImNCh4ZDlK''@;'; put 'put ''dTY2Wy80V3swYGNgWEhEPmxXb2EhfVJPWFlRZmAkTVVHU1pyMkwvUkpdUUpnb0NGaHwsVU9PcH5gRlZdQkh2O2ZbSDZGNlJFME5YfVJCdXJPdUcuejpvTk9UMzxoaV0ieTEufVk4KSE1VUR3WjFaZExBdU5YclI0LzJVbUNoJDEvI3dgKCI5X2Rzcz9ySGdobHQjKlo4eSt8QzFVN2BYLE5meHZH''@;'; put 'put ''KTxHS2l4fUNDNmFjaitDRmRsdEJKRE4kQVNZfUxJfVlzTFhTO3kyTGEpXXBiP1UyQEFpNyE1YmskRDd0JUZuTj9wYUV3Si5TLyp7JihRZHpxQn1KZSpjRUpHI1N1K0g9OUpsIX1rNyhZQF5DTylbQlBCXSpmWHljVlEkel11TUFAR1dEYEEudjtxJkExVz4lOVA0b0MkcylPN2FTdmBqTD9EKHYi''@;'; put 'put ''QyR3OFtnV14oXU8ieTd7MlsrQyR7Rk45KmlKeTZIN1BqfiFCVVF6JUZ6dFAlOkxaTSs2b1dwaUZMT2xrQy5Pd0JOdCZ0S0FWe3QrcVdxKUNLJHB5PFNvVzptd29XeTI5KVsqemJuL3hCIVdoWFM3NHlALFVYUGFiYTtBZnZ1KTRaPTBZVyhgYkt4KXlTSHRXRSlmUXQmZE1KQjJAb3Q8OXVuRylY''@;'; put 'put ''eDR4TilFeHNzQCZSXXc3Tm9mOUREIlAiX054c3tpMUwlVzNbNXhtR35MbEd6T003NjVgeywrLjE7eW5HV1NsQU1AbGx+eT9lR1NDRlB1PWssR1ZCV3ZpfXsrd1h3Yjp1ZkRPRypbYzxxeDcjTm1qO1lSfCFiKXsxLEB5aSV5L09fW2I2SWtWY3k5VnRfRmIpcWYsTzB4Nj1RJktvTz9JMkNBdVpO''@;'; put 'put ''VlQsdWJSSEt0aU1NSUxMenZJSGpkV1pxUElrUkMjPykzNTdmSndnRjQsXzEvdTF6WW1GamQ4ayRZZzlDY0RmWHg1bn5JZGBeSDApZktlJUlXTDBOSz9jL1p3M3huN0l6bmU4Nk14QiNMNzpaeHNLK1cpVHhkPkBIfmh0IkZobFlPQTttNDNiTkFMPU59YzMyIyJDOExgZEtIaEk9UWUlb1dYWm1d''@;'; put 'put ''fC9uWkdGbWxlWnRsUzs7Y2B2UjJYUn1kMDQ9eVQlMTBJfmJJRFpKKzFELE9Me2pIQDQiYEhQcSZiMzc3JTV5Ojcid2d8bTBvV3RjJk1iXy8uYyw2czMuVGQsYEE+eFdVSUBjZG9tPDBWWSlFJm8ydDw0JFV5WztPQ1JrSCl1fGAxbHNjS2A1P3xSPnVOQ2l1bV91Vy5TWmAodiMuTzxLfURaJnR0''@;'; put 'put ''TCo5KXlVQ1paQSpIR0tSYl4vPmhCNWd0NC9MVHE0aVc1U0k3dn0maiphOWFjfDJwMSxzYFhCRT1+NkMmV2JwZC9bdHExe2R6ZDJ0MlJ2NXM4Ml0wRVRLYSR8ZDU1OHV8X0JBVSIyXV95U2FJTTJHO2MoIkF4eVl8ZVE7Ji90NT8rVkhTNUhCeTR2Vyt1MWd5Sihwfk02NDRjI1drdHp1TX5tPDY2''@;'; put 'put ''R091RTsobGxhOnZpYXw6OUdRW2MrZXhEPEUydH16SD9bQDojMlZeblAyUWo2U010VktmYiV9TD0rTTxDI0dvUiUjaXc4Q0h2N2hOZ1M+dm5LTFY1UVM4SlF3M19wbWdCdmxxTzIheTo6WTdkPz9JbS8jek9xeWFjTlAwNTBHL1JkKTdXLyMyVmw1Q0ZmJjhFRG1Adj9XUShhJGZseURBUTB2PDpg''@;'; put 'put ''WjZXKVhlbzd1c01jWHhGS0tYNjRESFJOTWIlZFhYWD1MfFdTJjZTTGVmRDJnT1BaYVo5TW1ZdU1ES1s9diQhWnhOW1pEWkU+IVgsajllSXhadEJwVnNvN3V+dGRaPzVYe2VDWCl0LzJMOjllY0xmZzV5NEtgXlAhfTV0Y0BwW35EJloye2FhaFpvXmBvIzdkLDojUnReY3FCK2lMN3AuaC98ekZ7''@;'; put 'put ''MWwiRlM2MikvbFA3c2JfPk47UmovI1EkNEUxNnMuLzo3WDcrNmklODFsOjEvYHw5OEVVNXpKUSIjUk9HV29BdiN2RUouQUpeUGJubHsiTHNFJjlYRUdZUjkodng2U3VSc0MjRFtgSTh0Y192VmkiVl1XMW80Q010V0NGJTlYYElYRGJHW0c8WVNQRkJBUSVOd2x5aTdYWTQ0WXdXYXBBKVhZREc1''@;'; put 'put ''ZzxMOnFtT01ZJFc5RTxoW1kyUlglOVh5P3BIciErLF5QdzF+WWU0bU9je2UyTF47RlBCJFMwTH1LIUxAJjJdRlV8MjJMS29VODpVTG9OTW40OWUpWyhhI3VwJjQ2b0tLQFhKN3xlOGhTMGRGQkFNTm8lcG1UNWo1dz96alkmMmhDJUV6cT0qamdWbFgySFtJRzhETGEoZCp0KV0hWiJ8SzY5ZUFE''@;'; put 'put ''VUNhKjskdVdmcVNhPkJDelBlKyJ4PXo9WjFXYzIzPWsxP3wmSFBReyR6WCUmTnJsPSlgcGdNNltRO1kpZE1mdG5aTU1KW1FKPUV6elFALkd3SHwzekxRdEl7RUk0a0Q3b2dKTVljXkdvPzFCMjZpZltqMS5aWy5HO0NNaVdLYnR6OmxCdytzZUAvSFBBRClVTFR3V0dHbTw2dW1eM3pDSih7JiRd''@;'; put 'put ''QzkocU9dZF15dG9aO0RKd1dRbnZYYUpFRnB0SEovM0JBJVtKT3g8dlRMLE5TfEkuTzE0MHxVVEVHYmxHQDFYU3M4d0I7UiZmR3FjflkyOlkrUXZrfTgwXWNNQmFWNDRjWSJjLEVnZHZwTWNnWlZhN2trc2gkQk1GI0xJWCk5fHdNTX12VGMpL09FUV84dmdxK3ZGYDFBZXZAMCtIbUU/YXdGeGQ8''@;'; put 'put ''cChKVGBxOlZHQ19DXkNKM3pJcERePm0wSnNDdSUkbGhjdSlrbGBqZ1JkdVBULC5LZU8xZF5IV01oRWRsP0NJTFZTPk9yQHh4cT11Ingxe2UveTIufGVXLGxUY0dBIz5GbnUpP05pXipvQn5iRz16MTwjM2EsWFNDN04lKSQvODRaYjlGLEcmVGVjQ0lOSiZGbm5xNm0wOGpYWE1PKFFeTFNoQipj''@;'; put 'put ''cWJLSmxXLGxEYUBTJkJJRkRxKnlCRndHdFpZRz17VHZ5T2N3WkBJZDRoWEZReTUrRTtDfURZKUpWOyp1VkpbU3Y5Qmo3NjJCREMweEQ8MGhQaz9BeT10VG0zaiZyT3ZJU29iLCwuT24iITJqQ1QsIjB5blIpY0JUamlhJjBqZ05CPld6MlNeTkVNKVJEI3A6aHZ0JHk5NFQsXU14dEVacHhGRCFs''@;'; put 'put ''VkJ1NkhaOld6MnkjMnVzbiU0UXNnRFR6TTozazRqYHlWRHNNfDFzU2VESWI4Lng/WSwkU3ppIi8hWU0ub0dVRSk0Jk5LeUskQmxtaWsxcSlMLiF1UkI5Y3EwX2JVdmk5MmJHIWxKKnQ1JT8/czB4VW0rbVphazpDcllaJkZGVzBsQlRtUkxPbUozR0d6dEdgTG0wSWF4SyR3NHlxUHQmZEtpVUlF''@;'; put 'put ''cjY0R2FULDVId3RJXkFBRTo/akh5T0c3V0R0azBPTnYockVJSUZaNnFwMzcrXzZON3YsTWIzSS9OPS8/akFYKFBuR1VjfjxYI21VbkJwWmQsLikhWnFCSEE6Z1BNTUV7Qzk0KzxiMHB3XjFGTXNjTGtAST1CVSVXRyxHNTJmVUxWRCMwOkc5Tnc6SHZEbzZTeG1xVCJlJWZNbDlHL0l3NHpwRFYp''@;'; put 'put ''TnpjIyNGVlc1Y1gke2pXODJYd3poUHw0flhLQ3R0VmNNWyssYjtnTWtEVjZASEFgVzBOcCJwdyJ8cThMdnV5WEAvQSFhMCQ6KkA9SiI5ejl7L0x2LixjM3EhSUklO3Z2PENVIkR+MWRhUyMoKEJyU083bzU1WUNsL0xvOnQqYS9ERy5kNSU+SWZ4NlY1dFgpfls+Q3hwc2YxJXVJQEBrU0o9R0Ra''@;'; put 'put ''WXZQckZtIWxVbDkqRW5PNyluZSk8cTFlWndSenRaNHNtZTloeClbQGVuSiZ5YmZbTHBVUXBZUExQZGpPR3haaEdLSFEsZTd2Rz5sJExEbFF1dkVzIzpfK09vQVNBO1hyMj5oPk1+MTJYTUtmenduQUFwKVBwcE0xeH0kTko2dXh6RGZOKnUrUzZWYlh8Lz8vaDNhWlR0biVEITZEaz5sS2lvZyND''@;'; put 'put ''SHtMP2ZaLmIrNE90PXRgIypxfFU0KGRSZXNeQzhScHdubj5sST9VT1dlckl2I0UpbWg3QVR3WXAiSlR2ez4rMjp5UlBiTFM3PGlHQT5sY3RFKnYsfDlXMjNrXiJzc3pEVnA4andNaWVvIXtrQnVpPSg3bD1iUD5sLihvNCVYSHclXiRBcUZaQjhpJTtFKSU9Jm86VjEpJUYvdTcrYGolO0RYRSov''@;'; put 'put ''b3wwW1pxRiU6L2wxOjElN1IzJj9YYTdlcz5CKVg2eShYazc0SiVXUG94TX41aXQ4X0QicnxtImAjIjFeWDN0N3lldlg7RyJRSGswJGNXVG9hZEc1UlNsLjxBZykweV1ONzRKL083ZE9pVE5qZV02VWlWI2RZbDloRSZGeCxwZDp3OSE/dXRWbTJfU3RmJGprcTtmPTNrWVYvYTQ2ZzIlN1IrKERQ''@;'; put 'put ''O2NALzpXPmhnSnxlVEY+bCtXO1R2LHwpfkw1d3AhXUFGKTpnVkMzJVkhL19IW35sNktneSVaWjdkOlRYOTVmbW06fEI+YV1fZldsNSI4N0RWSmF3ZXRocEcvcHMqeGRLLmdsQ1RYMS42Q0NsWk1wQkRQYWtnNSh4TiZNRyRtQXdhaU1AYEtvPEw3Vy5UQC5BREdWSHBCbS5VfGZ4WUFScEVMaU8i''@;'; put 'put ''dlp4dHVRZDlGJnRhKT01flB3OF9FfD4xSVBPakc6dUlOdkRqZDROTnZhXTVbWkZtVWBoRFIyKzJJMSVVR35qZ1NPQkh6ckJwWHRCTSwyRy9naURHbyxIXV18L0d7V1IkRW5aXmFxSkA+L0ltQzA5MDY+VmFDRW9OSnFhcjJfeUtTNih9RUhbUGlKVi5rS0NsOTZ4P3ZlNXhSNTRLNztTRUh2Vlpk''@;'; put 'put ''NTY0S1hCTHJ6dmtrL2l+ZUxIO3lnXXs8UlphXk95LkY3dHRFZ1kwSCk3QXgvSSVCdUxHSyVnYUFMVkZCcTIlOzYpV3VgP0VNcEJDTS52NVA9Ong8ZUcpITBhNXU9Y3pMNXFZTD51YCNNWH1VNV1+RmltejF8KDxmfWg0OlBdWz0rRig2N1pwR18+fVhOKixhbDk4dik0Pygha00udDg/ems8UVRJ''@;'; put 'put ''NzBgQGpbI3goVUQhKFtGckN6IV01YCNXbDNKO1t6WExiMmk4WSI5e1J2WH1mTnsrPjRJIkxjQ3RvYStVaVlZaF0jQkliWCVIaWEyS0tGd2ZPek5lNCh4P1RMSGVWezI+U2dBe1hOQz5lOzpXTiNKPFNsUkkwckIxdD19RkI9dDpnWE1wTEFePixfcTgzKFNjMzVMeGR8PTBnRjl8eWB2UjlDRVpM''@;'; put 'put ''Tz5WLCtnaV4wNklJc2k0O3lneWBOY1QsMEdbKH5lWF11dU9nMEFUPD9UYjV3bX5FfUlpdHF6I0RlXUA+TzwhQlRtOGNObzwpX3IpZl5tXSJXJkVTLk9iQX1BZTxwRlRYalApQWp6QX1uN0ska19FdH00MkVWSlFjPWNuWFFEYTRhLjkhY3VjMGFHZCxqfDFCKC89dTohJCNHaF4oOWQ4I1FBUEhf''@;'; put 'put ''YTFkOiE/T3I9Vnd3RyZBLmg5VjE0cHVVLHxkQGg9Qm1MZC9INU4xWlhDNm0wZ1hOant2YTVwdT8+e0Yiak9rSTd8P1s7YEgpYjo1N2EjZ3tKYkxfRDohLGF9LzU3R0omTm5MTWk8N0xVVSxuTn56Nls3blZKKSQmRHc2anQqWEZnXmEzW0EzO3VMdHclM2pbUTg3anJhWXNdfEJHT1NocDUzaVMp''@;'; put 'put ''Q1BUbUdlOnk2d0thKzhYdkxBU0IxVzpPWTU6Ikk8VUVFd21lZWtzfj5hSU0zaiMwS3Q0S1taQjpLQ3huUGI9VGNJbTwlKFEhMlI1RWh9MUhqcFJJUXc0allCYCsuRHNPdCNxbjhZS0AmbGhYeUpgUXd1PTdBSmdyP0p3ZzMqc3pKVGtMXSZJMm5FZiN+REdkKjcqLFUsI0ZidCEoV1hxdV0+aStO''@;'; put 'put ''QkYqdVltPGhYcExGd1hjd0lpTn4xYChvT0A3KmxYZTpMdUkqSFEoTkJAKFQoWUduMFFufEJsYWhMcHVoWHAlZmBsRUJlXyt+SWZARk1+eTtCU3VBP01NO2gxZHw9WDJDb1dCXkRHdmp4V3FJTWljWiRYUWEreDA5eStRYkx7Y313NW86IVcvYDlRMiU4UHUoTjRjdXB6M3ljQzF+ZEo/JH1GSF50''@;'; put 'put ''KF9ueDVjZjgxXn1XJVpSQ0Vrazh9IXNWczQ4ZFc1W0RjfC5vVUBsUz1CQGpPaUlOKFtMN0pYK2xyaFZFdld8SyxnVXo2MUQ9a2pgfmBlT3RSN3UhY0AqWm5DJEc/RVRgW1E7PTphMmlbRGZjMkZvW1RTPzhuMnBMJEdqXjZ9azAmLkpwPVl4Py5GR35BdEVVeipPbUUlOllCJDNkJH5XN2klVE4h''@;'; put 'put ''fDI3VD9PQnt+KSNYQ1Jme35KaWR2Km4/fipINEwlKG5+ZGFjZXd+TDgoPVdHSW9gQ3svS3gxRWFQTjVjW3h6clEvWF5vbjN8VjMoR2IsWFtWfjN9XnlkODBLLHIxfnpvQixJSkIjfGtjTXYqdVB4WC49Q2dLXSk9fUpPcERPelU8VltzImJfQERpKTp0Pm1Zczs1dC41Rlh1QzdNT0FLRWRGaCNI''@;'; put 'put ''VFcjTSM7VCs2XVFpOnl3Sz40LnNKVk8pZk10TiVgO3YrUWd5QUsjd3wsdFMhbGNHOldfXlFKeGglRVIqJihKWWR0VU9rfko3MClINmJFRkVwSU8peFl9QGdOSCRuUHxITjFpTlElU21UKylqOXcvYWBhNEZubilOayskVGxuOkxWMiJbUSgjbTc/fj9jXUtXRVloVkhPIzJaQ3M0Pn5ZeihDdU1o''@;'; put 'put ''cCNuTXY7fGxGSktXdm1dZzQqbX1NSFB5KnEpTytCUUhgK3l5aVNIRyFIaERaTlU4bmkiL0NZL1goaTQ6Yj1Jb2cjWGxbU1MwVztKS1hpZ2dnVjA5dXBudXZNS3xxQTxEMVp1MDd5JDN1QUhhOUpjU3lhfGJ8PCwpKjB3ZkhCLzwkY29mLC4qSSpYVl8+LlFxQmJLc2Frb05sfnZPekxacU1SdCMu''@;'; put 'put ''UWlDP3BML14vcHBaWlErYSJuTyIiRm5WJS9dR0YwPnFGZjR2UkN5T182UUQ/VGlaZ3t9V3NuTyRzSiFPRkJOPl5DNzNldjpfKTk1RTNUNUUwTX0ycSV9MihYMkRjNyg5SndEVjR6QVUqQ2ZoTE9AP25MbHpnS0hCTktJKktAZWlUaVhJTF1WIzlCTXNVL3E6WFk9SlZfMCtnZ249dXg5XSg1cnBb''@;'; put 'put ''YmAyVDNpVWBpKVZmRF9gQSk5c3ZOOUYzMzFGcV8rbjJXQkJVdzRiaCsjP3Q0ejhZU3ooJmU/OD0mR1Q7LC9AeDFsTGMmPUcoOEVjYnYjX2cvKGF5eWF1JG5OJXkxPHhlWFJ5LnlUeGlBbWdqZV0icypNRF00NShRM29mUWAqKGR4WiNASWkoYXk9SyMqbV9UdEdCdk5NUl1OaUtxPlE3fHZJdHNM''@;'; put 'put ''JE5iWGlxYVY4cjAob0Q0RihxPkttQytfemM1STBPQjlDRXo7P3ovRjVwZ2IyQHZ0W0pIamQ1K3FpcUB7NihEW0B4fXlldXBgWVNQLEBtc1VCLzp2anF8ZjApI2gvdz9WRGY7Xy9uPENqRTgoYkclRVEzdWFbZz1obSsmNS9Ee0RyL0EmPDNVKyFaIXttd3ZqNSNtPUxxaWEkXiI7OHxidnhbY2k3''@;'; put 'put ''WzlKekslVXIrKjM2RF5bMUxHIWBzOjZIPnFfV3x7SkJBRkcwSC9AKUUuVGxaalF6PD9tLHdlOUN6YTdqTyZDY1VnK0pPbWJldiUiJDg0TW1tQHohWjY9VDdqKCQkMz9gPkdGN0djd21WbFlPXT0iR2g1Q19MI157TmR9UmNoMld6eEBsTDBaKmMuLlFfNVluP3s0NWtoSVtGQDJ+Y31KPko8dkk5''@;'; put 'put ''PDcraVJ5Llp6YmI8PXk8RVNDZT9vNXRGV0lmQiokMyMrT0JLMjRSKE9NM19yMlddX3pEYXgqUkJCMDlFVnJVdHR0OkRQTnAjOVUqTFJyY25Bd3tUMklDdF5ScXR9RXxLWXFgeWRKJUN5VUlJcyZLVTVnYFRqTDY+bVhPQU5aSV5hKEp3NGdKeVheYGY8cnJ4Ui5ka0B2fnkyVChSVSNNSWcrPzNH''@;'; put 'put ''aGFrJTVyOXQ/R3F6NF0yLCRGfF9rLjI0KilbVlk9TnouZGxYV0ZAKCR9NTNnPWBZRGY0Zz9ZR1Z4eHxOK2pXSjsqcn5IciU7JD0+KmZJOzErNFtlQCN1RkoiQiRxUntRUWs1TGlLPlhIbFt6IXlRaUVNWW1zV2s3cHhuMktEQjdqaD1lU1ArTk13RGNCP0RfM3xMRDcvYkBKPmAmSzx4OnxeTmp1''@;'; put 'put ''bFZ8aVlXbUI9Lls6I0ZbWDBHcWJOYkIqZUJvTHQ1cnViJSlGalE9RzJ4LDtjVVcoZ1RiXiIoU1MhRDhBMjMpQXwoPVdqcnpuW0tBazIpTVAwLHxPbU9OMk4/W2wjekR5YmxCKGhnVDNkdSE5KSowI0RPfiojUXtIKD8sb205cTcwV2loTEJPaEhOdV08TCheJSU9SXslYEpBY2tRQCZTUEs/VClB''@;'; put 'put ''XjxFQXYyOTJ3dUBpMlhAPlUhTVNuUittWFV1cU1UPCF2dmNBKzBrRjddX2d+W1FPMj43eVA/eHB0bDM9ZzdwcmNoeFdeOHFUUl4+QEo4S30uIVheVDNUc0VWfTpDV1JSUjBBVjMqPDN2R3ZldzkrK2EsaXpOdlFyPzpiVFRXSzhkPkt7eFkufld1UzlnK0w6OUN5aktYQ3Z1SkNaY1JXOjdIJXl1''@;'; put 'put ''cHdTfGdaTUpNIXdkeG5HL3QqaWtqYW8/dnUpImdLa2xba3UvQDtkWnFnPSRrLnNYLjhNeDdXSi96WER5bmhTe1tRJnZ3Qn5XSFZ4RlUmSTc0dzkiJFB8K2IsfF52Y11feXw5TU1XfFdOX3hqIz0pYTJ0K3ZUOkxFXVFMU3oxeXFRY0opU05MTWs4I3Z9I0V1Vl9NYzFbdyFYKDdWYHFLS2deKjRa''@;'; put 'put ''L1RFWTovQE8kSWN7KWdWfFBXKSgiIik1YHxEOyY6bz0qaSosZjJ6e2siPXdFVz5mcyF1VEU8ekJ1fVskb20hTD51Y3c9Y0wiWyYpZnBlImo5VSVtTnh5I3Ijd3x5NDwqeDxxSXdkaGxnOSg6bFpMQDFlYDtqa3pZSXdBW2BBTnNzZ14mKXdCMG9XWTppJG1RaSwoLHs8aTMxcD12RT5GN0NTS0xb''@;'; put 'put ''Zn1sfkszXnkqKygxXlI2SVAoN3V8Mk9vWnMjUkBUSl0lVGR2KTx7dGd4VnMoIWNzdElFeWAxR25qTiJ5KUJaIShYbXhyVHo0I3FoWmBAdClgV2FHWnhTM25zQDRddnh2WiI7a3xGcmJiPSJLUX46VDR9ZCoxP1lgTSx5WHJJc3lvRHolL1t6X0EhQ2clWGJhOGFmelttTE9aPyR6WUJaeStfSm5C''@;'; put 'put ''V1E/cFgvdEdZJGkmOWpDPGJYKUJ0N2NlfFBNfFEqdl5IWVZwQmBFPkxDfnpYJiQ1UFd6c3ZEYTApcXQ4OFlndUMzNXAuJXJ0OGE/bTp1cG9jUlMyM0NKeXsoZ0N5Yi5yUE8rPTxyJkNTRn1XPHh9IltBR0NrJUJPUVQ5OzB2NEdoNWthcjoxQF5fV21dO2pGalk9ZXtsczZSLHxzK05TaTNVZFBY''@;'; put 'put ''RyJOaClzdihNTmdYRzJ3QSJ9Q01nbzRlaixRaig2anc9KGNVOEV7fFQ8Q10pWHxxbUk+WEB7WXY3blBOJkZPTGA5cD5TTjxxYjQvVktXWlp6PSpyTnh0Q2NiOk0jTHNKRkIiXmRsKW9dX3A+bilROjpYWUhwRlhHTD9LejssKUJvSWpVKzEvQ19GezNqSyVnTG1hK0ghSlU0R0pGQktMREoxPUh5''@;'; put 'put ''Xy4vUFc2TSlpR3xGRVhLey9ILEUqWEg0RkpaTXxgQmIoY2skVS81YUNMTW48JW9MZitLJFRmRGlIdlJQV2coQHQrV0g+S08obzU0bkIjTmZ3dCtuNkpDW0YkbXJpYy4yWH4yNkN5RntUbzJFJjBuLClJTkpWY24jLGUmaCNkLzZYXWQkN29Ne0dNTXtAR1NGImViZG9LV1VpP3tHaH0+T0BQRV1m''@;'; put 'put ''Y3N7cjE9TyNrQ1JLVXdtW0FEOFVjNHtSYkVZZEVfc1BTb0ZgJDVmLjtTP1h6WCIyeSVYXnNHJTVFb0l0fSVYejlfNFUqLlFmQFY1QzlxYXR0dCM4aitjZ0ZGO3xXQ3tKaWVtXyFfWHJ0RH1DWihgazVUKkNdJTdQVzBPRDQmd3Q5TEB6eUIiVC8xTndwInJTSEw5d3syPTV1XT1HN1ghYVlmJk5i''@;'; put 'put ''NCtnfl9MVlhxbit4TS55VjdsbjIzL3gxOSkwfnAjVmkqXXpHT05EZX09fip4K18lY21LXUg0T3xicGNZfEshIl1gIktGaWZwSWgsUlIvLmdXQT80aXxlKDB+RlBLYiwyYmZNTytpNy4iaVVPdCpeeVd0JV5baXs+bjUuRXRdN2ouZEgzRmhCZHFtSD1fS2A1KSUiSERPVCF0ME1dUWc5Z1piW0Mp''@;'; put 'put ''Xnd1JEdmWkN3dURtbEJmZXcpdXowYStxVCM3eUZxSTZtc0tYZ2wodGFgSWdFNkBuPllOQnROanNpUnlNZTVWWiRQV2xbQyp3QUlYd2lFRU1pNDR5alZMPzU9PUg8QCVaYU5qMUF6YkpiPGBNUFNFYkxvOkl+KjYkZjl5cS9LNmU+OyFqW3MxWWE4RSUvfU83RSF0XSpVMzZrIXBdLCZaS2V6MUNL''@;'; put 'put ''PDl4aHEycWMmJGVzeU1eR3JPRjZlYT9RcHkmK15pVyNhJDYrPVsmSHxHMmxWd0tSIkYrd3IkPn5WI1RTcVNxVCY9VjRSV0l6ImNQPVFXSUI+TD5vPi5QOT88XzVzaFRhMXx6d0tIRnFPcVhmU3BwcEs2WlhndFR6VCkufm1XejBnRyViP0coe2l2UVNyfV92a2JNZDgwPTAhfm1fY3NtcmlLcVhH''@;'; put 'put ''azhFLkcsdkB2M187PSt2e1YuVV81JSh3e11EMCJ+O31RYDslIyw3MEssO0AleTpEKTthSS9sOEheI2NnXUBpPTd9QUZLViI6KzdRJWolY2dEUk1CYnNiX0E/RWBodVp1WisiP0Ngam5lPV1TSjkmTUQrJVB9eHlbImBufHJnMHZQK3NrbFZ3NlpdYn5jQks/UHsuZ0krViMqTGR9YSZLK3grcFN+''@;'; put 'put ''ZloiQSVROUsjKzsyfmZrJnJiJi85NV1qVHtVL0kxayZRbmlUPDl9L31YUXpycVdAS0hBam5+JChyVzluaF1OUGV9TXNHe148X1d5bmh2NSljfU03NV9bSmgwNXNWSEZxTypXcmlrOFlnaU9HSSN3dypOMFlnOU5HSUFkcz1IalJSe0k4eH57OGdzUTc1QHBxfEEhWHpPQTx4V1BYU2JKPl4/Yj1Q''@;'; put 'put ''Zj17P2shd009USxgWHNpRlAoMz5SbDJTNT8mbUE0b3dKIT9HWTQ2ayoqbitjRXxUP0c6bkVhYT8oTkF1YmVnWXI9NT8oSnI9aSkmbS5ufS90JHx5ej9vJElwWzRxMzpuI0xOVVQpMClNPVlBKz5oSnBSV1heQjJ5IVJIQkswP2BQKzskfERIaTBITSxuQ29HZy5XejBnNiNnfDxMYGY9OCVFPW9M''@;'; put 'put ''Z3tmMThybUxtbCNrbV53VyRjT3tXdEkqRmZMIiZSOlszc0AxTmJSKENPXlN5cS9US1lMUUBaRnFuR10pbSVsUiFCQVk0ZmxhQ0Asc0VKd3BJeSJENjNzcndlbnIzdnchJEguPnAmXnJbKT4mKW1WZz1pW18lO3s8cGNtemRxeXN5fXl+fX1UOWksdlJtTS4hSkoiVzxKSUpgQHc5Q24jI0R5K0xx''@;'; put 'put ''Kj1VQXs2VzZCXSxEc3F+SUt6ak5fT0d+TUUjVEY1anolMzNeZXpvfWp1L3QyUk8mV3tgQi5Vflo0SDM2ZkJBZWZ+VzIoQX5CbksrVmhZfTJZTEx5TU1+b0hRZ2UpZC9CWmNVSCY3M0Q4NGB4SVJ2R1oyRitPZVIiPHd1MSZpN0hqIT1QKW9bRDVfUll7Yk96Lk9QNSV5JmksYTVCaDQ/Xn54b30i''@;'; put 'put ''cC9JeWMoTko1PG95YyYkNzRCRlZRK35NNTpxKTZ+MkBucipjSD5uaip+MkE9eDt1VzI4cm0rbGIpKG1MZ3w8emxxbSZSOmlkO2dDKU49PyhKVCZfPH1tRlNdPXg7VyRYPTI4LCtiZX04O3lPZ3w8bkolRWxHaSFAU3orMGJhb3M/V3Z4Oj19I3ckR1Qic1dwfSYzS250YXhiO012en5DY1ZRMGVM''@;'; put 'put ''djc/byZLTHZ9OUQ6clpVRjooYi91Q0dKN1pNWHduSEx5LzpGbGRpenFpXkpmPVgwOFR1TDgkQ1F8flh+WENxT2JVMkoqYlcwP0VWPztoNWAmODBAU3VwL05KOCl4SVIzKj4/W194dX5ESXMoTnchVCxfJTYqfmxZcihCdyMkfHwmWFt+L1hpbj9gMWUqfnp1JE1PJVdHbG4hQ18+ZnxAfnJtaW5r''@;'; put 'put ''fVBnfHN6NCFUX3xERVt+MFdpbi5gVVspfkpzKT50WzltJH1tRD5+I1ZpbnM/XkUkfWA1cmpUM0h3c3ZQVjhpNzMpTD1SZmdTTmY9MmheRT9PbTJIM0ElVkVDb3NPdklYQntRYj9STVhxLD5KInk0fkl6dGd4eVpiOS88UFZCUnJPV1QiaGpQMlphbyw0WkVuSVtuc09mSXxqNCR6ZltCfDVoaEZC''@;'; put 'put ''Z34/dzBAdlhtdllMTlU3X0cwMU4yOiEpRXIpPl0pPTJ0K0B+UFZpbm8/X3gjfX09NF5CIzBAQXUySWJaOkBFTShNTzFTTVEmLjU8diVfVGs3a29bN1Jsdnorfn4ySmIuVzBdRGFTSi9dY21UZkomfVYlV2guSVFrNX5NTjF5UGV9S1swe2M1UCMsSTRRW0hkJkpPayNGdTd6RjFvdTd6RkkjXXM2''@;'; put 'put ''MGRhYj4veH19VT00RUNiT3heOklJQSJlMj04Y1RCI2oiUmFsXV52aVRxdnEhNTc0Nz4jLmAyMUN0MjxuOyEyKlNEa3d4Xn1MLkB+dFAjM0kqX1ltKTxPa2VvU34rLlRNLD91SVIuYz51fElLOCxNTzEhPFEmJlsrLzVKXVN7cy8rPjVOZFcyOXNVZ2FvcXRYdkkxXj4reGZPVXVePmQ8NDE/Lm9b''@;'; put 'put ''QjJCOEI7VFMzYFBIS25sdGVlVltJTWt1LlpzcGpJM0k6ZTFVJjM3KU0sLHUiSUQlJmBfWWdwTSwodVhSNm0yMmVHYUo6eFtDQSJ5Y3VgPnFyNTFaL15pKzlfVXMjRlk8PGtHLldXaXlnPkx2VjcsSkB8dTU8PnZMVTJ+SyJGcFt9X1V0ZCsoK3hga1lYNUYrQyUsfEMzUVJqVjQvPVtgc1JbZCso''@;'; put 'put ''cSJzNnwiNyMzdjVxVSwvR1smYE9OcU8qRyUoZVc2am5WVkdvXTIxPy5tUiskcy9GWiIxbClNNkV5aFZVRmtFWDBhREdTRW93P2Yub1tIYT8ubmtRWCIxZUoqd0oub1slb30sdHk+Ljo1dWBfWXU+fWM6TU0uXTZPSkZYelFePzVrRUFYJjBFdVMqPzpoYUMrTVcqOEhORy9PPmlwbkddaCMyMV9F''@;'; put 'put ''Ti9Ad3ZaSklSXWBjSGwlajBNKD54WTtacHdEWFJdPX5JSyk+KSlmZ2B9KS9gc08zIVQ8fF8lIX5NVHIoZ3YhVCFfSEkpfkhTcihwLj0yZnxtcj9zZmFfUyQwRF5yZ1J9MTBoTTRHS3pfSXYhVTZHOV1uJmxPIVghb3tfSSxlaXYmXXQpTzx8dDJha0YlZXskPSMlOGJFLGY6REg8bFtnZSwoNUIv''@;'; put 'put ''fn0jZnN+JW03ZFdXOF9benNUXjdNe3w6dFpMUXZJVkJ+emNlfkwhe0gvYEl0Un4jSF5LZTN2KEBOd3xoMCh+RjpGNzhgUnFyTEdGWEwjJFlASTFUfDZIZX5kd28oZElobk12ZmdxP0hJanw3MFdXKXBrJTE/ITslfWVhSjRKbStvTy93OXJ8YFMjcyQxUXFUXSs7On1VcmgoQXhRcXF+cXBmX3s9''@;'; put 'put ''I1FFfmI1UChGe35+ZTApaGs/Tkc2fjF8ZyhMLG1JfXozWS59Ryo5fWtHVygoOmVXc0EvdjIvO012P2I8MXNVOlE5enNASWooR09ScUp9QHQwfFApIn1ndCx+LCR8fnJpYH5LYH5+XXEiczVWdFdbRl1YP0Q8Lzp7NHg0eW9hPC9GdF5rQ0A2SGkxN01xKzlHU3s9dSg+OXEicy58VXhyflsoPVFw''@;'; put 'put ''NzNZXXM0N2VXPz5mbik2WSpdfEI2aH47dTdUfmwxcj5CUFEsRC5WejNraEI/PWVqfFk1c35yPCFoJE1SfF1DTGNbdEJhcX07MFRXcl1mJGxzYFpURUZCSiZdK3VEXXNuNDJyanUpaGd+PkRAfjBWPFFWSFV4dV1UPHV+a0E8c01nQkhUQC5sPFE+LFVCPz9NQl1gQUI1cy95UyghYmB+OEx1KF9A''@;'; put 'put ''bzF7fXc/IXN4Z2xJYndCYUdAYjxWfCpNaCh4PCZ8Nn0xKGlzcG5ncyp5Nj5XfGNfNEgic090KWhSP3s7anxEWWp+OkkzaF1PRU9iOjEhcV94K2soZWAoOGRzOEZjcyZ8REU5PyVDYX5QZH1+JU11KEpbbkl9fXZpI3NQbWxJUXhCYTB9OkhkczN4Zm4/fV1wMj5rX2NfSyVISXgqb0Y2fUhDZ34p''@;'; put 'put ''eCJ+fkR1KCt7MFpUfC41a3NaLlE0d2NkK34oTE06fXE1bDFYKVVCS3shLGQoI3kzPlBjUXxAMiloWWByOHF+aEsjaE5WbUlZei9pe3NCRDV5SHVZKk9+WjhsMWQpVUIyfUhDaHNAaFMoVGMycmt2KWg8fj0rPX43d21JajpiTVZgS15sV1QmNHkjdVkqXnNsQyUsM2BkIi59XyE2PlZ8MXJjTS8m''@;'; put 'put ''ZltvMX5+KlN+fm41M1kyfUUqbHNnRFI0fSlPajRgbHElcz9FJSxtPzNBNHxlTiE+UmpRfFl9cy9wc3NjaCgzM0ljL1kkdEkuKk9tfCwpVUxzdTRsPX47IShoOytiOClfNDFWTDQrJGRwc30+RE9Qe0p5bF8qdSl9KXNuKCszUWRWfWxnOzk1ZTwyYUMyciFgYHtMTGRYNzU0QmlzXmdibWI5dl5O''@;'; put 'put ''Im5OX1YpRl9oOFlCYFZXP01kPFpefVdMQmY/PEgvU2dBZ009VlguMkkxWGd3an4/Uyl9JF43NjZDdEJxbj5JNl1NbGhWOXtUK19SKlE5Y3J0dTRkQlVsKlJkbV5waDd3ejUqI0AqeXFZa2AodGo8MVt7REBUUlg7LHNFKzdoeC9tdEJIKUhmcF9aUkdgPWtnKUBUJmdWfmNBXWp2ejxXQnQ1Visq''@;'; put 'put ''SUpxOTQuLzpsUl8vLzF9OyZ0U0djan11U0puRE1dbmJtdWVKPElSMiUiUkZnLjhNbnJ2TX0yaHRwRHdKSFhdRlRIeTxKTG5uXUl4NHkqX1hLQ0FrbEcsTCI5R1F4aXpQakVDNlRPMEZFc1hGPUlkTTxFJn1ROnNQZTJhfHxFQys+YWtrUEMhbDZMUjUyRDVCRVhIRV91RHptOzlNV0NxL1lSWlo3''@;'; put 'put ''Vnx9XjE/Ll1fNlBFNEw4UEcxcUQ6NWkocjZFVjw4Vn00dX5rVzVmdE5XR0U1YH5DOjtWandvc2g1WHg8UTlaaVU1fWVHXSlsP3ZRSGA2Tkpsa044Lj99cUxAVkB0elYhQlU6Zn5kaXdbeiFAaiRDZkVnX35sW3x6MF4xQiJvZ3VHW0xzYztPIklBMzcrKShoSU5SckJmRCp5VyU/dTpHc1k3UGBT''@;'; put 'put ''eD17REFHb1tXdEo0KioqYGtSfFJ1KFNeOz9YfElNWm1vTX5ZRDAjKUNHPT57SlsqcGAvWU45WE8vdD9qdFtNdHJJUEdEaTFGaVRidEU0bzF1Ryh+MnosNTp1SF07Q2pQISNQJCkzWjxhRlZ+UjVCLyQhKEg1YyYxRi9VRClvYTRXeGVPYnhkR2R0fiZUJGZsMzMpfUBpezNDSFhyVStWb0NIWTQz''@;'; put 'put ''LipISXdmMkBfPHQqXz5SRWM5U3pkKX0wNF5WYDp8TzB6Sk5WTE5jIyFxQDh3W1ZhMVE/PHcxaFBwW0BiRFpMaHRqdmBSTVhVRlM3VUVMND1DR1tKUSw/QDFvfG4jL2dGdk0wY19KQipgRlltU34uNS87RmhBZSp1al0sKitiVl1oPGhUfGA1O1ExLmxCWXtHSkJGWVIkR3F8N1ldSTQuXT92amBq''@;'; put 'put ''eXUlfVE9RzZpI350ZUxFLEx8NSRHJXxVYmojfkBNfS5TUTRZYGB6ZCY+Nll7cjdmY013aXYqfkNEKmZ9RFgjOlcyaX5hLy9WJXVyfHxiJmJJY0hiNjwka0l3REtAdzlHJitJPS9WIzp4VnF8djZzc2haR01LYk02aj9KIVFoYlA+X0dOdnQpUCNHeChGXiExVHVRfnJQK0FVOVthRFVYPnM/REBB''@;'; put 'put ''b3JqQGF3ZmJYPUNwSXErLGVBcUNqIyglcngzZyV8VTtpOklXdUVbUCtIXygyWzEiQmpCPTArLzBKUEdZUj9+aUhPc3JCUUFZTFQzeDZiU2FDIV86djZTV1NvTGBYQXdCIipUK29xKl13QiI6Pndbd2Y9U2Q6Qi8rbExnNH5Ua3B2KkFqRGFIMiheJDRwYlB8XzFRQlgqUDZOYFJ2XnxSMG5rVz1S''@;'; put 'put ''e1FSYEp3R3d6UFlHL30yWEE0ZGcmUXV4Z190VkFDKm86cmI/LCRuYkVPXXRgOC9aUUJyInh3QiVee2Y6YUxOSkguJnNUWzQxbXtjeCxSSERTblRIfWtkMEl0O1IzLyxgRGlrRUcsZUBIST98Nkd9KShGT2NWfWl0X3JXNFhSZ1krdXp+UCIiLlQ6bjdkTGApdURifGNIVkYrJCJMWH1eV0NXa0Yy''@;'; put 'put ''RV9YKkxjc0IyQS9HQSRNTyIrRmtJcjRPaTFOLEh5KG5FTDpvSShYeSlLRSxqbHN5V145MWk8T3BhfGVmQmVxJD11WXVpVGFifGt4SVdGdTdMRkVvKzV9UFBacjhyaDNmLzVVNClUVylxL2Q+MFIvX0VLQ35ub0VOZUs1ZEF8cikyfTRpdGV1YShySTpJWCxOdSpSVSJ6WHBgIiNzY0pad0JkQkw6''@;'; put 'put ''T1cpbyRbX0tCKUBIbVd4Y3pFM2tUSFEhMUBJMSt8MlNYIW91Pkc6fWBoNnJOTGVsUE05SSk+YV0/LmtFUmpfMlMxdUQieyJOO2JsK35PUH5wTEUvUil+YGtjS204VG9Scno3IXY8RU1IQ3ducVlpQ2FZdW9qJXUuKiolWyoqc3BqTXFaRDk3S2Y0JVQiQ0ZYSC9WV11LNWZ4SiYsR3tsUDokaHQw''@;'; put 'put ''RCJMMEFgVkYiJUkqWTY4cFArdDx9QzFFWDhNNFhBNFYiInxCL199RmMkZjd6RkRedGNIdVtxNF0hIXlydT5ELyoiMy8lfFVtI1IoZU9YU3FRdHhYY3JfSUZhKWdGNG86bEhGNCoxWE88LEdSd3tgalRsakhCU3UrKERDVlFnREUifkFZdllrR3U2WyIscmBOa2MlV0l3dnVqUCNeQFFacmZzeEEk''@;'; put 'put ''OX1xNmFTRixDJDd5bXg6SXQrR2RyWU9BOXJ+MytjYEtPRDU+STdLQjR8Jk9TaVVFNUZsP1V4Y09bVztBISIlazZTZG1NdippektzRUc3aCpGKzpDYk5AQ2tFaG49MFY+Z0plKShCOih+Q0xOP1ZadWY8e0UvQiF9WU09ViF2X2d5SyRNcH5zXzxWfnlgW1s0cHw0PmEyb1Z+ZWU7Wn44WmQwdzw9''@;'; put 'put ''VnhaPWJPayVZVTVrSS54LG1mZS8xRCEmIjB3UlBfSStoVSlCU1dNWyhzVW9fb3gsclEiMnFgLGp+ImMhKlBXekVZdkNTbF5BTkFbKVQrTzpXPmhgUnhpSUlnU0tEdld0a2NHUko0azlrXiluNy9vSC5rQEczKn1wRTxjSnR+LGVCPDRoeFMzOkIoWGMjcj8qT1k/MixHQ29oIUdtcztaalV0QmZH''@;'; put 'put ''bkJBODJ5JmF7cjB3dzQrbkNnaG40SU0yX0kyT0s3Q2A/QSh8O1RPWDVwUyIlc1cvfTNFRGN2TjVqL0s0VEBYeiFjQEdKdFBIbVt+QGFiPERifHtFYGpaTkJZbk5gUzFCZCN8KEZYOz9Xam4qRWZQenB6NClkRkl0RUYiQ0BDQSs+cWxPblgzTCthVS8yZXVVVjAiOW1OaSJILEt1YXZYQl1VVnhd''@;'; put 'put ''fWcqcm4hUkcwWSM0OEBpenAsP0YyTDQmdEVmJEdpWW5+UWMjTWtFcCZmKUs8OGZeP3hDQU1jLDxvPll9LnV1XnYqWyloJFM+Y0tGNSg+dl0xKUZQU3w4TTJvSUpTNy88fVFvIjNlTm5CXSh2MT5zPEE2PDM6TFAydD8sWFlufF5MMVtQInY1byhGfTNtQ092RztDY3NkUl8zNUA5fUhMJDhnKC5v''@;'; put 'put ''Km9uRWUyZmhWeEVofj9GcV0vKmdoWit+YzR+LnNEYT9uI3prfSljW09FeklmMFFxREg2PDFWSFJpTHRfT0RNY182VkQhP2FWeG8zR1BOWyZgKjpoamFATUVVKng/alc/M3YkQH1RZ3Ngcj92ImFNaTR5VzVJRiFQQkRXWHw+e3pmVGt8KUkvKCNpNkNvYHRPKywjaiwycV9dUVU8dVpfWWI6YkxT''@;'; put 'put ''S0guLktIQl1yLCxVUk8sX2sjZ3h3SVljTCFDdChQWCpmfXdmVmJQNFh7Mz9BLm0lQkJvOX55Kzs4US8iYTRkYTFmZ3Zbcn0kLkl7QHo/fW5MI3JjbUdta2Q/LF5FMkA6O2VhX1NPQmhXVkV0a1ZSVFE1RkV0NX19PkM0Qll6fHxMMik1fU11IjNuUz5rfn49K0dEbkQ1L0xUcC5WQnFFcTEkeDAz''@;'; put 'put ''bGUkRzg3ankmfTU/RD0ueSx0Pmg1bmFDeUE9Q2sleS5bI016fH0jWX5nR2t2THQ1VVVHWFl8MlNLYU1iXnY5fiFIeUByI3Z8O3ZFaSJWPiw+cXMha35ZREUxNHR3UVN1TnMrQWdpOFklbGZXMltza2R0W1BydmMhMWh0UCpvKShzSFJsWSFUayNwajQiWllHYmY5Xz9JRDNqVV98PUV9QD1tIX1t''@;'; put 'put ''Q0pgX3BJYXRVUkxLSiEkdGk1TyF8NHYlKlo2Y3xxUGZna0gzIUQ9b2hXOmRgdmd+fiU/XlVWPWoiQHxLdTpwWmRHKWY9fXIjUjBzSD9EVSpaeEB3PTtRbFc8KyFUIXNeNDtXdnhgaEQzSkozK0FXenlqfTVlRmpZfCo+e0MmPG5qIV1zfGokUEBBSXxDQ3ksXyptM3ldekRVUUdUWEFFbnU6RCN1''@;'; put 'put ''VGtCbC8/VHxkbjM6I20yZGhnSn5wWG9gOkR2K1g0aS9deTZqQVY5MEsvbmc7fT14Yis/K3c9On0hT2NuSjAmfnlYKXMoNEBXPTtMVWdNXi5NUl94dSs4JC5PbV8+STc2MT0sZW0wcEJmbnBCVChoY29MZWZdbShNVyhkYytNRTFtTjtJRzpva2R3XzE/SCVZYmhhZ0QuX21iYmptaURpNlNgdXZT''@;'; put 'put ''V0xaQSJmTXRNIm90VlNTaCVwPylYTjFWJUx4OFUmO1hNMz8wR0srQXpFImRgTm9YT29fPF1IdTRIJWpUZlV3OCpNO3RJLiQwc3cpT0A/aip0R3VXIW5CckxLfmtheit3PXpzbSZiTmxaZWNANWleUERLTzElSkZuL2J2WDlFJSVFKFhsP2J2UFFBd0VjRVVLdERVTEdoNCNARVVLQkRmRTBOL2J2''@;'; put 'put ''aCMwfD9HOVB6bi5CdFV7RUtpIT4xWyl+XiwoX2NIeXNDdTtEdFoxRnA0fXZMfVhrTUxEOERVOXM0c2Ercl0qbXtjXilzQ3NZYitiXVhRUEw9Pnc9ZFd9JkUlaVc0JkUlTFVkLkMzaW0weVY6QzMsfW17eXlkeUUld3xqOklMSktIb24/RHRHYko0d0YmW1JXel1bJEtbdX1pPDd3Uld3YUhvQWAq''@;'; put 'put ''NlBAfD9BRjR9UDt5eTR4RSUuKFV2fnkiSyE0MUVpUjs/dWJZKHZ5Ilc2fCFhLnkuZENzSklIb1tfdXxgRn1GXUY+KVImMWVRb2J2Z1NxIXl5O3dEVW98emFJTEtISG87X1hrUih+LjZuL19NMUxMfT1CS3VzNVphK11bdWJuZ2NXKFsiPyk5bXZVPCpbJk54cFtGS31edVpbN0hwUG9OS3piaiFd''@;'; put 'put ''NFRkbDgkaHptM1hQNkRvPXc9UUxZPX5+cDVGT0F+PUwkLm9bK18jZ1t+YUdMYyxfQGRbfktHTGMrX0difFhNL3t8JFhYYixCdFVAMmBJOVRYIVVUaEEyRSVrP2A6UFt+ODR6azR+Um1NL1N+eENyV0xPMnVYcj5mTXlwdll2OW0qIWxGSV5kMDU8PEtMMV8mW08yW118KX5YV00vW3xZYGBzfnZH''@;'; put 'put ''N2p8Pl4mRnNkI217TEdaSiNPdlBRNWRuTDhNWGpPSm4vYUNofktyVzRxP1pdZ34qcVc0JWBlXiF+N0tXNCRgJD0hfj1VW0x4MVFnfU1NRFZqOV81ImtFVH1ZdjcqKH5VQm5obXVbfXBYWEJPYTghfSgjQDVfMz0hOGgwWXNmZjBhYlVxVyopYSNyfkFwVzQ4YGowQH5ARUxjI187OCF+V0pXNExT''@;'; put 'put ''RXQmSzt8Uyw9fjoyOF9NcDU+IUNBUl5yUlFxV09bUl16Q2E6IVBIeFgxck5FcGRZYHFVZWxGRXJPTW1mZWx3LEt6Tz5rdW1PUm0lWU5MNkFiV3VtKHtkbSF+XlNNL1J+aWZfc191RzdoN0hMWTZybWR8TTU9fnJETGMzXzpQIX5uR1c0Nkxwc313OHxZdkMkYWUzUDFfWFlAfntDTGMwX3x9OX5U''@;'; put 'put ''U0xjYy80ci8xfV85TTxpWHVHN1t9bVRfc34sd2Q3fUJTX3NIQntfKGEuejhSb19xTllSIVJVNn53ZWxdVj5uUHNneCgxMFtZfDpmPX5bQkxjdV9TMzl+ZVJwTChrbnYyakEiMzN7fFl2d3trYFIxbktRTiE4eFNtZmE6d2U4TyNJeEJMY3Nfe3I5fk9STGNyX2RtOX5+UU0vJnxHcmBzenQwW1Z8''@;'; put 'put ''OHBeInJEZW03YCNfMmFtQC4/X2k5SlpEcVcvQGk/XTFTW1dLP3VTSnMyLm4yYD1fPkUkPT9+fTBGT1Z8JUs9fj9II3xVaGNuPilRQ3FXOUA2ZiZ+fkFXNC9SJn52T21iYE9NMHprQH5+QENIOn5VIzBbP35OVSJzZn5iV2J2WnUib0hIJWoxNWdgXXJnYFNyL3BONHIzaz9lT0daXWk1KSp1P35k''@;'; put 'put ''YF18c1c2fit6TGMlfkhrTS9BbFg0ZH1FcjF+a344eE0vKD4hQ3FSR1pNP1d2UElYTzYqQFBeWn5rT3NHX0xCIm85RjdqS3FRO2l9MGo6clREPCpOJHo/MFNHWmd0SzV9c0B+W305eyYsbzF0VyJzYixBdCo+In4kcz4jKWhefmt+QWBScT5+JX1WZXkoYj85MkNUWk5ba34vSGZkflcsTGNgczxu''@;'; put 'put ''ek5OMn5+On0yek1+ZzEufV4wPX5QQHs3REF0KGlzMCsoNipaM3doTmZ8Kz9NLlZ1alE0en47eDprc1syRz9LKyVPXXx3bkBzWzJsfCZScnZ6ay99Vyg7SmlPPy4mamhWXjAhfjY5emt6c0BKMVEoMltoKlR9Vmw9bXJSV2ArVz5KU0shbShiVT8/TCo3O0hpLEp7eWNuPno4PlI3TEg0SC9tcilA''@;'; put 'put ''K3g5UVBOYlRDbjk5I1IoPzZXbytsOkM9fnxIL315djdUXnkxVGx+MVRTYGlIP35qOz56b2I+LmJJJDMzUXtzOF1NSlQoVEM2fFVoclcjfVsicVd5fl44VzROfSFEWDRJYEI2e3NvXSpPXX4hOkNILH5FPz56KlVBImA0fnhkYntKV1QvX3htMT90IXVHZz1aWlFUTGM4Lj1HMmBQWV59aWw/c1dU''@;'; put 'put ''ZXpQW1h3L3wlOlYoc216W1BbKDxVV3NtVzQyYDFlZn5iLjhKMWBEQV59SilVV0QhbldCbSUsdTIwUk5bYkUvfE8qKH5CIWRfQW0hJHUyOlBOWz5EL3x7dHF+fmhLTEI8cVdBVG1iWS45RzFgWHdxflo8Wlp3MkFOTltkR159dyFSNHgybE9efXUhYHMxdlpHKGBHQEs6JWt1fHVaK2NmWmU/Rk1H''@;'; put 'put ''WllNOCl8fUViWUcrKGI/JU1HZkpvZz9WJkVFay8+NWhtTzUhfmkkV0t3LDBFSElmZyJ1eWd+W0lnVFRjZ0YxeDV6TzEpfVtqenAjN2VRJnErbHhvfCVpI3koaEZBflsoZldrLzk8PHxiZldbYypCfH5UPyNaXy9dUTxWKG10VXswXlEhYTxRdkdBfWEjRnhXS2oieEU5R1lOTURgKTlfIXksYG53''@;'; put 'put ''I1lGKmd3P0spTnFNR1pJQTYpMFJycnZ+flt+YDdZPHlmPXEjVFF3aTkqX08rSWV6K0lQR3A+eVIuYSwvK2hlPzV1NUp3OzNqYmBYME0sMCVuSmhWT0RRUiYzN3tyY2NNIlhyPzhCIyhFeTRlSmBfRi8xKFU5P3Yuc35RfnkzSmYkM2wpTTBJOjhsc0Fsc1JAI09BXWpmWWtQTFN0fGtba0hadVdm''@;'; put 'put ''WVh+S0Z7b3pvMm90ej15R05qTyRSOF8rK0RiK2NMUmI/KEtsVTRrMSVXS2phNUl6W2cvaE8+NU5pU0Znfnw5fF9mS1IxO1ZsVEcleWhSN3lAKXVmdFFbWHdhRHtELGcwWTc1UnV9Ql9aR0osPTVubj97elhFd0UodSImP0xVaHlGRzJYSyNUX1gzVkMrMmdQM2k/KlpnfTM7WltXUz5OZTM4Llgz''@;'; put 'put ''cG9pRFNSfWdwViFKSj9GdlM7K3RYVktXNC5nZzI9PEB3Uzh6eWFvckEvOCkyZW5VUiVhMVUxKGJKOWhrNm83fXZ3R2M2e2NtYTtCfEZ6b3ZHUDY9PF5sX20kMCNFM0cxfGF4LCFsaE1uQGh6ejB2UURZeSw+el5ZXnhIUENeZ0lIZF8haSEueXxnaGI5I3VLTEVoW3chJHEsODNUWD1aKD8mM2g5''@;'; put 'put ''aEk9Wi5jJFNyQmhPJjNQJnw/TmUsXyVDK2xQIS4sbEMmciFVXkojKWlpPyJfUzgpckl8Omx1cXU3PHBuK3xtW3BAXldNI0VfJWZyRkByPnFrI19HKDl7RkQ6KT5IRFkuJUojUlBGVFU9JCtlPCY4Rn5AXSg7ZEtwUG48U1FNPmF7czljamBpYzAwaFJwQlEmUT8rYCh4UElTfnVIZn04SHNndldy''@;'; put 'put ''Ilp4PkskamxZPThRbzhOKykqUVI0cEMmZnJ6XUo5SUtnTk4jRWA6WTgsbDIpYjYwRl9QNj16e3s2SkMrLjJwOV5ZSVNIUTMlPG5rSS55Wm1OK0pNdilXP2EsayRzQElLITc2RzwyYTFlXWBdKW02ZWtQM003OFd6XnVFb0JoUUVuPDh9Jjgsakp+QF1zJG5mNjlfPT49TVQ4Mk8mdHsxalFyfjA8''@;'; put 'put ''cHU5eT1dJTV8OF0wPk99KTthdlBEWVMheUVjbzQ3RD9aNi5RJGlPdSVibCNfaixfeUAoKTBHTjdSSGY3JTEqJTgpRV0jMjlMP29lfnRyLCEhWk5tUXxCdztEMGoraHYlWnFYflJmbnFBbW57Lz95cEUjJGJuJUxDWyZgK0NoOXBGb3RIJWgvIVpsZ04qIXBvIWNTeSkuYUJOX0g1d35JQyJdRGY3''@;'; put 'put ''aWRwJE1OR1o9aCF9Wl4pOiNNfmpkeU1LKyldfUJOP3QjWmAjcUZYPF1DZSMzTlUpJFNrWiJGI3pKb1kwKWd1fGl5PmZDOls5czVkbEpmUTIkWm14eHo9bGBTIix7bUwwJXcvPkAuUmNbYitaYCNYVzB2N1crY3lQJD9HT1s+eldsRU1hTXk3V2JYMldXLzxbe0I9bmNFVXRIVXl5eHpEal16fih5''@;'; put 'put ''eS40JT12eGA4Ykl4QmMoaTA/NXgydUU6Izc4V2FtPV95c3V4TjE6dlJFYHxQOnV4ekRqODF5OXZGIUJYTzlvV1h0NDliKUY3RkZAR2F7L1ViY3ZePEZtcnQ6RmxoaEZMNntIWlRYcTJZK1pMOXZ5ZF50Kno4M0xyQT5PNCNlZV5OYHR4elVnU1RHWDZSOWxedGVVLkchP1cwdk91JWNiZEpCKllx''@;'; put 'put ''R0I4LnQ8KD9tdTY0QE1uQ3p5MD1vd2hUMUpVN3c1T0NtWSN9dU91JW0lZT9OfTBIa2N3UXBCaVc2QEx2WUs3VUNkIm8kNTYpWns0UkM1O2BZSTE6YFE2QHd3SDNiUE4wPzV5TH5JSzhWIUE7RipwNGxjUVd7Nm9DLzRRam1aYll6RWk/dzJgUWpIb219NG5MTmAwWSJveyllIyRRXXU9VDlfSHJv''@;'; put 'put ''bXw7PCw1TWhsOTV8QDFMU1F6TigjYnh8N0kpbWhZMFgzUXdAelNHcEx7bWh0Yy9UYUo+QkcjPGxYditObHYoQk5CZ0VIPSpES016MHlJSjRdViFzbi9vbUIobmZsfjU5IithQlorWkVDZzJ5OTR5ZF49SnBoUG8/OEhKOyhQRFV0a08mWipXfFJTZV58JERLWjx5W31AdVVOPHQiWDBZIm9QalB2''@;'; put 'put ''K0QyVyNkTCErfGw2KmM0WClGaXRVeyNaNkE3QyM0O2lRT2lOUW93PnosJVR7ZVFkbUhAaDVkOUpUWGhFTmcrQixkd090VWVHQ1RfbkdII3ozYl43eiIpZyo0fGMxLytlZVpYb3hbNlhXNnhUOz1HKy9GcUkheTowNilIRGBRcClAUXApM2hnTyZabFdFU1Q7JEFHUlBWYUIpSUBRZTdJI2RPdGcy''@;'; put 'put ''eXNFL1M4OFVrN3lBaiZhS0N2aEwzV05SdGJPJlpWV2tTVDt8TGtOOShbOUZOMFdsUXh4U0g9SmVkcHpxc2lrazghNUZtLjx5Nm1Ic11HMCwoOltkSk5wWUlDPFF6KVMlImQwUHc3eWMhXTE+PiFQL2N2KUNiaywvZkUzdnZeLGRFO0FPcDI2dmF6PXpOWGpodj8mLncuRiwhNTR9dUd6QERwQnpj''@;'; put 'put ''cHpLcz92XzcoWCEqKCM1WGV1KVNkR3hOOkFFNn5bdlt4REUiOz5zUHZMWzo0XzI8NkZsTyFfMENlWmUzWGJQQkg3Uz9eMGJQOHlDZCJvKW83KWRLKk56dH5sJksvamdsRWZ7WEdpfGB1T3RVOmNlP09GKDlEeVIqZDRhXV52T1dEWnsydU90VWNHZT9PRiozWlVrSGZgQDJ+eWxIUCIuIT9tT08h''@;'; put 'put ''XyU7OzskWS5EcitLPHRNc0xyYnBKbWtwPTlfJTs4TVUyOVddMHVDYzcwTDAudCpzRTdTSWhyMmYmUyZwSiY8OCNoeE91WzJhTXUlV1JNdjglRlQhN3UyUEdrSzM3flI6R0ldYUxNYTViT08hX208KFIiKFlObEF1MDdmN14+MjBaNWJzX2I/OyE7Q18+I0dEdX5GeDVUeGR6LG5XZVkwWDNjY2U/''@;'; put 'put ''OyFjLCkxZXhwX1BXezg6dTJQL0Brel1HJEdlcVRtU3VxemhYdHR5OTFecnpscil7TCFiUm91Lkc4QVhYXzheYCN2S2QwWSJvVlNjI3VaMEYqaG9HUHk6ZDZTWmlNRkdrV2glWnVMPCkrZWxDcGhsS2lMRkZIREIyPWZRY0FKSyxYZVkwKWdjYylOcml9ZWFGLyszT0giN0xUVDhlfCh+UWJNdFVL''@;'; put 'put ''aXc4V3lBd3c2XlgrL2NrMjZSUV5IT2whU0pCfSkkRXtIXkN7dUUpPDo1dH1NWkB3SnZpfFV8bnhjc3VhY3dhRUxIUG40UHZ1RTojRXJSWmEya0AsaEVIRiJmMkU8VCs8Ty9baVJxQkUubFNmel1ZanZvMnw5e1V6bFFZU3EwRUQqUVdfOFlFM0MqLCZLR058e3wpO3ZeZF0qcU5gaWdBd2NxRHtu''@;'; put 'put ''YGREc3ViM05ETUxIX31yYDZTaC9xVT5oLFRlSj9fcmkmaWNxOl1HWnM2cEg3TnZVRk5iWXNvfWRqYjZbL2ErWU43XnUkeW8wTi9GNn5bUFpZdlphR219UyVjZlo0dXxQOjZ3UzdGMlFnKUlhey9meXNFejB+YEl3WXs2eXlWLHBeOkF1QUtue1pJey9hRjNJM2x9clAhS2wxaG83UWIjKGpeXnE8''@;'; put 'put ''WWR5L2QpOyh0W19rTik1RlRuZGk2dy5kTzh5RG8yMHp0a0hhQXo6dlgjW0RLdUBkbHJqPUF0dGkwKkIkeTw8ZHE0WXd1byN2T3UlMUxjZSRNbE4uPk15OGNgOGw0THpJIjdjNVJvZEg2MW42bF1hXjpGQj5yLklkZWZ2byNiY2xoSCpKaEpbS1UiKUlpcVNNYU15XXY5X35EanlpQUNDMlJzT31T''@;'; put 'put ''I1NGMnNkWXVVJSk5NEQqX1JKMnVLaT9mWi9IT0FPV0A5eHdLTF1taEd1S3R3Yy8yIShaayNbTzUlY3YwSWkheTFOOjdeLCIwfFVBOnJvNENKRWlpJTp+KjwwYHR7fGZKbjxyaWh2blFAX152TEE+PDcoclNLRHtrRXd5dSg0alk/U1J4cWxIKXs+MyxHPFZGVSohZXw1aExYcTxmbSZsQmpUU3h1''@;'; put 'put ''RUc7fmBTeT1bYTo2aiZ6elcmL3dRdj91Ti5JfHFebVtCYWl7UlNtNDohKXttQS5KbUxaKXgqMyNIVHA5RHg8U0tQbzQ1bWxfKVBvOnVMdF5YSUF4PFEkL0ZacVVZK1pVXVZSImMoR2AvYEtkeDtmJXAxOjRZM0I7dmRmczM/I0RhbGcoWF83OFM1QXhRPmFDSzxMeEdHZ3QiWCkodXFAT3U1RnY/''@;'; put 'put ''N2NwelNVOywrZSJ2aztCWkl0V3hTZ2Y1UFsrNkRIMUVYTyZaX0oua2s4KTUpfmBla3ZHKjI+Q3BQVGQuQm9ETGl1bTRATSRucjN5OXYvQiJzSl9GYGsjXUlSdGx2TSNNRUVPTkJkIm9MWFl2LHdBfUIiLHFTTitoMig8KTs6enZTdnk/e1FaMFdLLEZlP1JNOHlCIjdAfFJ+QjokYGtBOEtGJlBA''@;'; put 'put ''RFYhSGF7L1B5MkV5SEUzfn5LUCQxPFBrKXFaX2RgbyxqRWYodjVjcHpicGlrazhZQCV+YGV3dlVBNTEiPixVOXgrfT92VkE5ZitaUjtmMnk5Qno9fSloNDMxbnJDdCFjQ3FlNlhta2ZaTFBNYWo5SCplcUZ3fUBCIkVdOkY4Rkh6Xm45I3ZSRFE8I0I1QE1dWzEvK2VCd3F+bkk6LnBFYS9bTVRh''@;'; put 'put ''PFRmXmhBM1tDYXsvNS54RXlIImB+fktQUzwuYjYhJFBIWDxUQ2V3UWJ2Wk8mWnJVRVNUO3x8QiJSdStZMUM8KUJyZnYhZmM8eFdVZCtaLC82MXk5RnpBIllsQTBZWEN1WVV3QypALkk/V1oyd3V4eiYyYllJaEpNenxBdHduTGZLVSt1UU5+MHIueTYkOHdjcHoyb2lrazhaQCV+QDkyeDdXK1Vo''@;'; put 'put ''RmUvdCxwbz5ZOlpiWCtaaS5mMnk5Rno9fT9RU0c5TCJdNjpNZmYyXmghMD5jO0lZMCo9TXc5Xy5HXyxCIkw9RkxoTDU6JmMmTGlSK0JqempXM0pzaSRHZHlpd1F7SSpkeGVPTWYuZEB8KWgmIzRMYlJodzwsNzpwW0IiYSxVdkoqTCZ2IXIwQzNGOyRZaV19RF5BfShVQ3RZUk1EPUtXJUw6JExi''@;'; put 'put ''cUkmSy50PkxfNEJ6bSZoI2VNR2x9UlV3Pzo7dCFkR2FEQH4qIUUuJDpCPXg2RiJsYzV2LzNnJHI4aXJ1Jlcpcj5BR15SN1tgQ2tlZmhWVkpLMzRvamkpVUlHXWx1NDI0eWV4TGUyRCEkVD9YJnd5JjNZeVVhWS9OblQ4SVZDQE9FNj5lLi5wMU5pTDdTUXRVKmg8NHFjVnlnbSpEe2syKXhQIj59''@;'; put 'put ''eng3KE05ZTVEJV9ga3tSPEJEMmswejcoTV1AdS8lVCtPL0IldG5YdV18ZV9MfTEse0Z2QWFnQkdTSU9NRUlIVXtXPjFzZ1FTWllRVGcoVyYkY3c9WHMyd1txMU41TGZ+P3JJI3c/dj1YQ2g4WFcidHU6SFhPcio2Ilk0cWNyPThyTj8ydXE0cHpBeWNNbTVeRlBrQ2ElR3pYZU91N2xYWVB+Nz5v''@;'; put 'put ''XWpBTWtuSVlkQmoqUCxAWjtDZ3ZIW3hgNC5IOjZZIkJKTT5KRXc5WF5SS3piViF4bWUlSEd1WkBOSmhKYmA9bj92PEVeS3MwbWZfIm1mYDoiJjhHdW9iejF0Nj1kbG5aUlFoSnM6X1lodENlR2tfRUZnMyhKZl06Y2NgVnVjb3VsWjkieFlWO28vIzpibCJ6blhKdF9rQFJaImUmXTYmOm4lcG82''@;'; put 'put ''U1J6OFpRQmVvVSg0IWlkKjQrcXt2eit7a30ud0xnVXRGQXY+QFk/SDdISFosWSFMI3dPSGUqNFJTK189eFpHZF5FVzAod2JIO0xgalZdUCwhOVtAQEBGXWkmez5meSZAcCV0JU4pSWdSckl3aVROQXY5Pzk0NUZASVRLckh3Zl9FX00lZHNpXXJYRHJ2bG1LekdMPmFKS3pHPkVJeGF5KnlvdVRk''@;'; put 'put ''TWIiKGQkO09ENj9lV2FKTih0d3IlYG1udzBhJlJoV0trLE0/LGhjWXJpK3JtMmRYOEsobUdtPEN7KHo2PHcsNFRhdGhud1JSJF44a3o6eEIoWTZpVmE/Yi54W0Y1OlhYO2gpVG1hP1o7N0kwL2IvRHhCPi9idi42TkZAaSEjTG0ueFpGRipiWCg0ZU17TW5SWFg3Ml99O1J4TXZTOGNAQmd8Qlpu''@;'; put 'put ''N3ZhNT47dEdeVk4pfl5IOSNvRXptXlIzY2EqSUx5OVhmQFlgSntKem04S2tKbHBaKWc0Plk1KnhJeWNRW0QyX0gjdUU6QFd3I0kjKU1peWEkUC5zdX00JVo0R3EibzRTSkVgNyNUT31LLHBoVDttNmM5TylqNmRzIXVOX3E3Tj5GZUVfPFs5WUx4QlRtNm8uVzxGdUxSX2lSYCguayVkejJ4MUda''@;'; put 'put ''OXtXIilrL1J5dm47TUIzamMxLFdHRzBJN3glYClrLkExYVRta1tPYEFnKUdvIltMRSF5VH40YS5GUyZnW1F5dTQoQnRqWEhlOmFGZzVDelhsdF9aOjt1Wmcqe1EkNyNYfklPNXR0TWxIQSJlckd7S2hjdTtOTF51SSlyI2kzWilEeTQ4STc6ejIsLnd+KFRYMzlFRn40QHRfU0dSOnZsNHc4KGox''@;'; put 'put ''MHpXZno0KW5dSihIUEMpOkc4WEtZT1pBZ1hjUHBSX2FXS3RINy9GIz0+LywsTk9QcFNoSEUzXUI8STB8JX1JTXUiZT5sZDJodXYrWlZWOHRQfTQ9Ok15X1M5MSMpa1pKUm4lYTNDaWVTRnhOWDYyc0JGKCJ5UWdeJThNIUsraDBDeC5lQkBMeEc0YSw6ITJXZk10TlhNaVhGOlVTTldgbXF4SVRK''@;'; put 'put ''KTFOWG9gOihlUCt6QlBUNSgkQkI/aGJLMEAodSZmflg1elVZMT0lWm4wMFVOaDEiU1lwSVVAS0lnNmVgZnEwVXkmJEIoRmVKU1E+QndVZTJtdFBwQmQ8UV9XMV80TDNrU2RMaU0kVHp9VzYyPHZ7aEcya0VWdClXR246Q0JQblQwLklSPmM+LygqY0V7dT9HfmREYTU+RV9uTkZSL0hGSU41MFc/''@;'; put 'put ''N3lxTEt5aWROW0NWNjBrUFRLXW9Me3QrLkdIJFNBTW9mfTBNYmJ2ejcpeUxrLmM8RllMTG1aIXV0Lml2THt0NFM9eSNXN1YuT0lJanY0RHRHOjc0NHNFcmJGSks6NyhAJD4+WzU0N2ApYiVMSCJgQC9EM24pMnNOL1U3L29dakhKNVBFbHQudyFwWCQiYWxRd34xYi9CYDFuWEoxRU0mUFQsNSR5''@;'; put 'put ''IiwsNTFRXlg5QmFrQ0ZtXzIwLldeVmdnQGc+L04zUTV7Q1MrZjdSQC58JEssRHx6TFtOQT8/RyE0Ol1xNz1ja0xCQkRQWT9JemosVSVjPUNgQFUhPnR2dU01MzBSM3BGLldjTGUuV1BHMDAjaCFDNG98RTZWYzJbLyxjdUdBLE59UDc0cS4uK19BTi4/KWhlYUxoRW5eQDA2bjVIcyI+QDw0U1ck''@;'; put 'put ''WmMxLy4qIzxWaEZzIjtya0xAR0FEWjZGazZLMDIpNy9gfDZ0QiYvSyErZiZDNChtei40T2NkV1tEWWpxdW1rQUc/TW4/NWRDYWQ4ZWU/W3sweTokL0JRJiFMfWxtNE4oRENZIjokeUVFJldnOUwvMjFrWklaJTFbUH00V0Rjdz52S31ETTAuU0RyanZTaiEiSTApYkI5N1BAdWB3am4iKzU3cVpr''@;'; put 'put ''PldyWl1CW3MrLlJYN0hdejJRZDQicClHIjU0eUxrNWYuL1ZpUWYkOzZ5Vls7OlpdLlB8WDg6bStiZW9vTkw8QVZ7QWRjQXhCZj5edlBDNHdVWUNkWzdWIVNoX1FqTGAvK0BNTXRgb0BNfT1FIXZZdzJaX2tkYDJMdVYuaH46QjohYThYXVgiJCJtTjd8SndjYitBW1RYMU4wU2Q0MG0+T3pqQTtU''@;'; put 'put ''MEcoTDF2TE1JODdYbXcxfTp+Jj89XW5pWj0ifnxHSFVTSkJNfU5fU28mYWFNTjEmNFBNdGlaV3hzOT9UUGFDNk1CQkgjJFpqNDhrJntDPXFXQExYa0UjTlA9WjR3YTQ4Iz1taFY+T2xWUSxhNDJLMXR6ZVlaLCw6NUVCT0Q3V3VuSkl+RjFQaX03LG9NTHR7Q2xed1lCZFgpcnQsI1QwM3dPUGgx''@;'; put 'put ''WiV7KFpOJUprN05ALnx2SWpITE1WMV12WGY+UHZXRjRQLl5vVTQ+Rk4sb01yTE9sZGxCNkVjaHQ9aH5rMChXY0lESmJSZCl2MW93QHcrZFg0YzkpMms3IlI3NE14QzppKkxEOlR0Uk9CR24/Z1Q8ckhbPU9oYk06STYxW0IxRjNjTTxyO2pyNWd0MmtrZ0dEXiw3KkUxXlZufi5nJlg6eXlkckMy''@;'; put 'put ''V0ZtVEhkYEA7Sk12blJkQ0NlQ0FZI046N3U6RG9bUmFGRGZuYl4oPHd2dTl8ZCo0YHhEWGRYdS5sKWB0Vl48RVo1WGMvc1BkWGczSD94TVhYKmVDNzI1PmNMRjc6TlhGeS9CNiooeytCdm94QismNyNeaG5ib0xXb1JzdFgzVzIzPEZ6ZCtjKks9ZmF1cV5xTGpQa3k8PmwwUzBeLCF3OiVZV0E+''@;'; put 'put ''PShVM0w1MWI2MSR2QmZQZVpdPFA3PDBHM1VsR1IqQFRZQEh+XV00NCthZUdmW0NhbnN4V2Y5MHllS051RmFhWEhLR2lLRVJ0LmVhWkk8N3ZqLyxOWCxFSDRue0V3Lk59ZjIxSVFKKU82QCVCZFAjWGxnTUx6Uk1DSD17Qk5uNElPPENdYzk0eWJxWF1rTTU1bHZUJT91ejQ5ZS9DJEkiV31GVjBu''@;'; put 'put ''SncpYyJXKThlemtYUH04V0NKZDVFTUhGRnY/NmUwWyNUaGNgOS5iRGxheXxrVko3Z1VMZj9ee2lNUnh+VH1jPmlgK1E7MSFvUlo0W0M2WHhFP2gpa0tdK0RuVGNpckMhayNkaWlOY3x3NnlAQm02eHxyRkh0VjdkP2hxdlA5OEhQM0w2Rj1MYmUsN3ZuQVQpTWhtK0QhZVZaZzNQP2FdZCJERDJS''@;'; put 'put ''JSxgQXZ1M1oiNV1JOXguYjlYQnRSJEBCK0t4W0RIQ2dOY3sqKGFMKzMjMmwzTE90aTcpM01jMSlMdHRmUGZRO3d3QnpPP0J4T2NRW2kjMV9hSGtKPFUuJHYyITFVJHAuWyxnLm85VC9EQXVHMlciXUl9S29KOXtSR3EydEZCPlBnQm5uLjd6SVhCUTYhNVE7VFh2UC9HQ1dBZWFVRnZRdDd5dUhH''@;'; put 'put ''S1M/OkhvNjhkMF5sWHFGV297dD5NajtbWnE0JTs+Q2V8WFpMOG1PQ0slWUpZfU9AaF1FQVImTkNQXlA9MSRUeGBBOH1LaFo7a3srKUQlTHRlQGkhRWJkWkZ7REIsY3B9b0tde0NwRilXMEQkT19IT2lmOGRTI0ZWVjxpSlhrRFIsLkJTe2RLZUNRT2FkS0NyMEZ0dS8sMSImTlhlPz1MLyohTWUy''@;'; put 'put ''b2F+USRNdTI7Z2liL3lyaj9KZUo6b3JEYHliLG05JERDIT1OLE5XezppfUFrSzhAJTtuLFNDdTRLTzElZkchR2UlWi5tOTJ4S1JYazdyakgkNVNGSlhocz5sN01tbjApfnJGZGxSKzQqJF1lXSpITTQ7VlhaY2V0YS9AUUdDUSVLJFRkNXg2RilOQGZra0NpeHNUbVp0TGgsRCEhajFZdiZAbnNU''@;'; put 'put ''bUpqe1h2djt5N1NgVyg6TyI0bDRaXTp1KmFxWmxkOSNeP0M7OTpFK0F5Q1oqQjUlUFBHO3orfFYkTCt7d0NzPFc9Z1VhbmU1aDcyIWljRUJFektfOEFeV0dsb1YoWlRHbGd2amlpSUlYe09GbndBUSVaVGdmbEMjNTphNDJxaVRqOFk4QEw9dUA8b1cvMWluXngoMG9tdDhATD16aiMzYCNBWjhF''@;'; put 'put ''M2ttRlRJSW96bW1gX1hQelt8YWxFaWJEJWxlLFYkInQxTGYrcCorOjJBX0MpY0NmUTttd1tOY3dOY3c1IkVYTmxzajwxbFg8V3VZRGdHVHZqVktDQkJQUE5bTD15Q2pZa205Sml9X2shTX1FLzlkYjlbfDUkKmlDQXZ5S1h0dVc5eXBtQTU9NFIxYmFlMn1RZysjNDRoOTRWS3pLfEJHR1RUcGJe''@;'; put 'put ''dmJMdmg4TD5bNHZUMyVkL01uVHh1IlRQZXNpXUEhT0V3Tzc3dURfOl1uK0hQbzd6Yz9WMjxnMmdMblJndDpgSFBrSGYyOC8zIS5jcUQ6Pmp6KWk3ZV92Q0IjbTFAYWx7VyE0L1peZV5DY0RPK3dTczRaSCooT05tdUtQQ05xU150RzBvNXBIKVlLYSgsOGVQT2NjVTVzU3o6PFRhVj5IP3ZbSVF2''@;'; put 'put ''WTA7OmJ2b0I5WXNBZFN3cW0hMGNKUkIzXUBZNHYoWjtCbENaNnxnaXBMcnVrRS5MUnYyV0FBQUFBQX5sZ0FFTVFhdTVbNXhEJklpb245Vyg+d2tzL31jOzhOeTQ5KjQ9XjZSITx1IVNoRnRSXkBocXooWX4jTjc8fE5sQkYheiJtWTduNjFrcFh3SHhAVjtkT3V3MmUpOEwxTUZSPXN5I2hhKF81''@;'; put 'put ''NCNXcGRRSmVCOytZZjJ9SjowSm4reGZUQ2VfYE1tWyUyV0pFNERRUkp8RXZ9LixqOVhkZT4paFJCUUBkeWRYJk9dSzV+P21zSlFQcz9WRj84TF9PeWtpKGFmTks+bDxpdUYsLzYqNmIjRGclQnpzTilPXkdpZjl3P19rRW9lKV5oITFFJVN6fC5mNF1ePUY+JiV+Vl01c1c+K2AiP1IhOCFxMkUw''@;'; put 'put ''PXR0NWJkN20rRXguQD9pPUssbVlELy9TU0ZEVi5LQ1FNeXVqWnNzfjNvLy9LOkdCOHNJXlI8UkdZc1ZsajpVPlZZcyZhejkrOiRjK21ddXByWUc0TEduc2x7UHV3dlU9ZUdqbnRKWEBvckZlXng+fHdgOmUoRlMkK2R3U1lyOmFNcFM0WT5CRVVKdnw1YnVqV3BiVTVoMyhTck5PTTEvVFZKQzNJ''@;'; put 'put ''IX5ldz9fcCltQHwqbU96VHRsMT5xVXBzRnVjaVVCVTk0QjwzTkBvYUorbSgxbyYsUVd9NnBDdy82WyNrMG5YYWwociRKQGRaO29fI29RLHV+dHtiZUlHKWUoWi9AIltHMkJZVDt2JWgyJm1eRkFITmZFZHRWbWdIelNSfVZWdCI8bDUrbTJPNXx3L2J9KH5wRUBRfix0QnV2L0BecSx9RGFPZl0v''@;'; put 'put ''W3BGVCVvUTdsSEtLVFFZemgwfktWdGlVJkl7RWliVWJhP2pXb3hSNmY8MngiaHV5SWBJIztJVGZWen5oRHQqb3RVXV9BLE5kfnY4cjsvWGcuek49cC5BYERNdTNybn0uUCtEaXkyNFtfb1t9b0Z5W09FLF9zbktTaXRuczo2UDBEZ2U+YHNXaF83OjVkYVdDVStGYClMKyg/QkwlUis7YmRzM105''@;'; put 'put ''c2UlNk9nQntyI0JFN18/b0d1aT1udVVoRF42aSNTcSZbZnlufW9PQnVFYWE7OTxrSUZyeUdoZFZbRkttVVRsWTQ2TnM8RE11andTWl0jam83NHEyJFFATFNicFQ4SUZYeWk8eCkhdVAuUGRAd19KbXt9MilfYGA/b1hFRjcqQ3NuK1VxYzpsaGBeQiN+eHRlSyE5KCFTLHMoU1hfcXo0Jn5Ubnck''@;'; put 'put ''KUFeXmpeYHxNYmdOM0V6TiNeZ3hKUkA3b1txKjsqcjBFa2RLeGRmIX0pQTQlMi8/cXlOSH5eT1teQ2VxPWR3IzM4ZFk2IU1DOmw5JlYwZ2J+ajA6W3JIbVF3YnpaMnluU3o1dHVeW307eTBOekpFeXosU2xELk54Omo2ODZfXlhzQjlCd2tiPFQ7ZGlONWpEJGdzRnQkOFQwL2J5bmVNbkg4eTkp''@;'; put 'put ''ZH5JK09tTmdTQnxTW01fPlY5Wnc9SjUofSEkeTpMU0dMcltafT0rOzM9PEMjUlJpZFJeU34jJCZ4dmQhSDRMSX1MP0syPzhCVXNvM1BFVnd8KXA+dyNiJSpKYUBUQiR0Old5bykuOjJ5fXIyUGw3cnI2T1NpcHxKT1NiXSFSbVVWRjdENHxTR3pSbX03NDlqc0BNMkVxJltNU0wlfFAmcTBqR0Yu''@;'; put 'put ''bEA2UUlqNzRdPnpLcUg+aSYoWXQpUSV0K2t7STpHLEQkfmc9UiouaWAmJlRnSSR0NmFKailvMkVEeWldJTRAcG0pe3k9fmVqR2BUZ0JPYk43WVhHaCNFd1NAWktuaXRZTDlYdV00WW1MS14rfXtELyp+aClKKm1xSltHc3JrZD9teEFJXzEuYkZTOj0lenZYKn50XjpAOFNjV05xUkd3OXd0SGYx''@;'; put 'put ''S0JPOV4wbmU7QSxWJX5aITtIN3lhflohbS59Nk1DV2FlWTBgO21gMkhsNWllYUJjREhyIXV6L3R1M0ZZRXhrZXo6cnMmT2sobGZscjcodlFxVG8rQlkpZyZSXWNNTChnOGpJRFZ7KDshPEg2Uzw8biZ6a1NKJDAhKWplLyVSJmlOfTtXRHZPa1VbSi92JUlsNSwvYlAqLmpQbUlyZTpOZ3dbXz1g''@;'; put 'put ''WFpfYD42XkJ1RWFbe3xeZ3VFbk4kWF4oRD15JmgjPDNHVitddEZHK3pUaS4jWW1yQVdzKSh4PlEzUkZdSWpfMkEke3RxWF1OeGUvJDpzX2tQeTYsS3tyNz8yMTt4Xmx0eGh0Qj9bWyF6al9tN0ZgZypDITVGcHJ6PztePEFfWDE4NkwoOi5wR0JVQmBDZlc5SVtOO3k7MSE9dGFyL3h5PykxaVdZ''@;'; put 'put ''TzcwImo7RCF9W1cjPlVTPjt8TG95ST5ofj8yJTczJTdQQlRbRFRiPWFvVnJsUG1DbSZAfCRnWV5hbCt5MiY5OzAwVFg7JWdGWkQoSm10LEp+NnJxZ15pbXg/MEU5ekdeI0RPMUpxMXElMWYwNylkbmNecXlLfVNNdFIie0I8MCNpNk1mPXgsIzg1NGAoQzVXdFlseS9NOT5yMkQxMileVWZvSmIv''@;'; put 'put ''RkowPm5AO2dZI1Zva2QzX2xfcUAwVHR5LHZBPyskKEMuJSRycVBwJTpCTDFnKHQ9SChyWzpJanc5NyI1PmUjaDtZUXdmS1VPLHthKXZALnh+dlA7XzhRcmBRPlNZcFIiM0ZNWC44ZnBKXX0+QEhVQ3RaMkFDJkxeVkR8OkxqcmJYeEIsP1t6dDlyYEV+XkxHT0JIP0ZYflsuJHpTUzB7UzN6R2tW''@;'; put 'put ''InkoeFM0bSZALlc6LjhPKmc4TTAjMFUyMDBLfHQmWU5VfGxBYUNgZCFNLD1zXzVtQ35xP2hbWmBQbHtxdCVAJmRSVy41Y2drVihhKTU5bD43alB9T05JLGZsN29HYnRITlM/KixyZExsQlJrT0hTU3VyNUVsKCxsTStoOCF6bjEkNG5KfDpaISljJEtzM2FiS3c6UkZqNHFJMkl1LCJlb2RTTDg+''@;'; put 'put ''SnM4b31+dUpAellsZysqbThaI2skdHVkbmJBfUdgYS50cHMrOGliIzZ0KElBISVbOG5EXnpSLzwpT0pKLHZXfE0lP01uNHo4Z3lNZGkxMUZPbiE4aTZ5aEZGYCgsKk1pbU8kI35QZVE4KGhQZUB1MTY1NDEqY21tSzFoWkNFOVRjN2ZzKjs2WDZhcmFVYnF2YG9bP1ooZEtYKWBSI0hxZSpMLix8''@;'; put 'put ''JWZIM11FLHRtfVlaJWBAKH5iQDEvcSN7eWlke0VJLnU6bDFdO0tWJHVnUUhTLmptd0Uxa0hAVXxYcSNhUHAsS1ZLQ28rNjlHQWcuQV1MSCt6bG0mNyExJSp7Un5ANXwhYTRYbWc3XSw7SFthazRgQDUoRlZeQmUrIWE4QEVKNTBGXi9Yc2NOTXY0L2JHWE45ZTJEZDFdNiNbVjFqODoyM3dwTzUv''@;'; put 'put ''ISl8THptZFo+M3NRTi8vI0g3aldfeiFSZlJIQkdtZlpRNDZQTGZoYnV6bztgfDFPd1VlemJ3PUZ+KXBkKCZhJX4sSXwmIyVzTDFDemt2QTo/MUlKeERuIS5WSjQjVl1bWzA7bUtVQ0tYXj9FbEROfD8udkc1bl00cC8sK2w4ejNnYEJodmBVeUh0SGhldmhWamAjT0xkPjEsQCIueXM2JC41JTUr''@;'; put 'put ''VGQ2NW83KXIrfDI8PCxeSCo7VU8uQTczXUdDRVlKL0A6UUB3T3BReWZeZSJbZFBaTm9fZHpAfTBmbiI6T293bSJsL0Z9YnpOOD87clZoWWJiNXY+aGUrRG0/bksyJlRFcXxqbitsUzJ+LkRZVn5gei9eXyY6UUlnZmM0IjVjPmZxMzllUlsuJm16cTdUIXteWmJLTEI4MEFJeHlUcl06KG83XmU2''@;'; put 'put ''SlJaTjdeY3dLKS9eLm9rX1spY05wPytMVXlxTHwjKHR1VE5pOzVsKUc/bFhrbHUlJHxSbXcvLFhqQCUwanNWZjVTMVtYcyxGPz9LRVFubEArdGpdU1tAL3NmVTtWXyFxNixLPUk5eX54Z3h9aT19QHA3fD58U1paT1JYck9nNytuT15+emNhRUNndDhHV3dLdnBfPkVxcCQ7Wyl5aExvYF4zZE5W''@;'; put 'put ''bzJWP3ZAa28jcmdeTTQ+VjBlR1k1QkxMRyJ6alk1SnNbfVlMOHxrPHA7ajRmVXxqdEo8NzwoKTVaNUJ9aXVwYSh9NUAuMz9iMGdCZEB7YzJ+dnMrPCxVNyZ7RW1RYVZjQ3FSYTArRiVXNzI8TTNgSmRWflQ3JTFKdk52cipjV1h5TFpHTkBqJW5SMFo1TjR+M3Z8b3hrKiUjWitBR1RxZCYibk0s''@;'; put 'put ''S08pKTZIQmdxQlFDKHcobW03djdRb1pzcUlRcWdDRSE8ZDJ9ZFh8MUosN2dTb1csKzxpZkR5T1VPWCtyKzRaSmxlbDQhQjswNkJdUjNtWTJwb0ZvW2pWIU1QaHh1RHR4cVJIfHY7SVg8SllPLks2bldYR0ckTSZzVGJ9YjdCVDRNTVB0JWFwcy5GVH5FbjBNSl0wNl93Vj9aL1k7cytGWEFBfn1m''@;'; put 'put ''RGJ9fHNJNVt7SmEjV0gxI1QxNEc4NVk5SyZ2UlRnMHlaU3FAUEF5JWg8UXVIezIhUUpCbTNteWhHI1NQQ356OzY4K0p0NkpPanJOQFA2cysrRks6ajQqaGZRQj5QVj5SUXBNTHZ6aFlObHN6PUBEfUQ5eDpIbVJgPnQsNmM7elB1VSE1YWhpcXRBYWNgajJzbk5CNTloamtaMHoxVCVqQ1hzaW1r''@;'; put 'put ''aURoQClDLnYqUkoiVzpKM14lWFEhJCFddW1IVGwzTW0qRj5mTmUsezZ1UlFXITBPQjJGU293cTVDZ0dFUHBOYl9GQWplJEJSPiNLcGJtLE88SzEsIkklOV5iezNIK1RgemMxQFt6TyQheWtVQk0xYSxTTnBGPzpkMHFmaWlocVBbMWl8JGs6V0xONTM4MzE0JiF1WTApK2A0cFBKfiVAYmkuYXle''@;'; put 'put ''XVouW1BTfGQuW3IiWSJmelBxXXJ4a0FwKHFfTmNUYW1FMTxSQWE3emlodiErbik7OSFuYk57fnFPNX1eLHhfWV4oS0xPOGw8eCw8WENCdywleTFGL2xAeDc0PVFFJGNNY05NOktGLzlOZHUsSS96LjVdaXkmaUIzcnpFVnklTXxnUHM4fjxsWDc4cnEuN0FkVDgkXXVUNjhbMjBsQmlKfTRqVCkm''@;'; put 'put ''eC95VHljY3A8Wngva0whUTR4WER6JXs+fmlXPUs1eXFoZitDOGErJngzQilqRjchZ1plazNPSFNwWmAkVnoqLD41fDJWZklGfVkwQnpXaE8/VS5NWD0+clpmaUx3e3svL1c/byUuRSt8SXt7JGs7U1Jfemc8amhQPEtLaGQyOHVMNDQyfWxSJV5pTF9QKiQ/ITUxMTdbV2plX0Z1anIwbFR9JF8/''@;'; put 'put ''WSYhXnM4e058RE5PeFMqN1Q0TiNxXXUyTm0yOSs2VktFaCwyWFIoZDwvMGEyc3R4VEh0cCl4Jj8+IW49KUlgO3xOdDkpRExrdDJNZC5sVip1IzVCKTZgPW19cmlNIUV7c3JxNilUc2BESFBxS2xmT3lqOFlzX2EzSTF7eElsbEx2eUpsPC5tOTByMkYvNiEiZGltdTRkWig1QiElUSYwPTVPQFlV''@;'; put 'put ''ImJfZDp0VVAibllkc1JeWGtVN0lfbiQ/ZEI8WTRqO3ZFbXxPMG4iWT85NjBaQ3JPZGI8aUNVZFdsOlZeflg7OmwvfXpRdGVPVTcsJENEZ3RydiJWSCl7Oyl6VlZjUWFaLGtbQmlleWFlIWRiOGp1Y0NUT0w2dVhbZ3srN0xHaXBeI0pOJUokaG5TMXJXJEldJVtxKDM2az5CL3dENkcwNnBDLil5''@;'; put 'put ''PVk+PmU8QypWOFphWTd5PjVYSHt2V3FzRmxzdlJydlEzfSpxT3JdOCkyUEohVztLbTF7QyorYkV4LzZXPUFsNTZrMjxmSnp7XnBjKituZGFTKk1gX2F+RGkiYlBYQ2JsfXlMfVJbNiQ4QSE1KXJIImhMe2t3JWgpeDJsYCYrPHR8cVQ8VmZiKGBbVCp7K2NIPi8oP2YwVmtHZE5rfTk5Z0xLUlY+''@;'; put 'put ''KyNjOTYwfmM2aFVuPk45ZFhxOXtGT2xyPCl9Ii4+VUlqLkNmdVRgYiFZUDM4OktaNE81VkdmM01bPnRfaFNAKThIRC46eShXI3Z3T28+UnAmfl81fVNifSFNRkQhYSMjYGNJSzBOZD1fX3J1JTc4Myp1NHxtW1U2ckdhKUlMWzNCP1V3aShWdl88SjwzRGclUXJlT1ouTEdGVSVkbiUqLElRVnhL''@;'; put 'put ''MD1fXXQxciJFUntLRSorXTBlfCRfW0duPXNNRmovO2M0RnJOXWEhUEJIWG0zdV5AeUROR2YudkEwYmlhXkM/bVVxbEA+UjFvRFM2cSVwRzNTRz4qUmF5STl7ZXooentIQG1FfTBRJHplM3lnPTNdZj40PT08Q3NHYVBgKyNbWGIxdjxdP3ZeS0gsZiwjd0M8YDk5e3dwWzB0UTYqWn03NkJTTCxz''@;'; put 'put ''M2lLN2M5LFYua2t1eGw5NF1zNFl0PG8yJFFRPT0ibDZrM0dCI1hoTS4lT05KaHdHYn1fL1ZdOV45U1B0W3x2ek58Y2ZTZ0JELzZLLjpBPUUwUnFXJjA/VWd0Y0luPkleM317SXxzZyJ0L2tkPVcudmA7eCg2QSsqZlImLEBATlFHODdrMDRqKDZXY1djNlNkdEMqfnVKfWciUDF6OXg+djlDZmJq''@;'; put 'put ''Vig0JlJzXSFlbn5XT3BgYjRNX2VMdk9lWXVzIjhaSX5HNk1jdktsOllkY0t8ailZW19tMlJVdThiRzJBLzk3SkReVFF0O0ldM10jO00vaX5pYm5pfl93OkRePDh8ciN4VysuUmA2S3FLeD1Efi47XjpVU2NkbXtZQUNYJmNQUWB4MzcyNnxeKikyKll6Zkc7eFZtM3RhZzl7NDJLOGtCbigsb3U5''@;'; put 'put ''en03PThLK34/MjQ5e2B6dCw+bmklNF0jI1sjVGxlZjVtSVFXOntYdGJTZnp+T1lCKilMJlJBO1Z5Xkopb3JhTEJIRkwpQ208MX5eM0w1eixaTmw8X3s4WndBMX5gXzxZfGc2W1lGRjJaNmJ0eWRzW2woJlVHe1AlRHJrW307IW5jQlU+aEVxeyZEITVkOWwxb2V0fS9JVkwjPnVWWippeDVNfmhb''@;'; put 'put ''SmBTd0UpcWMid2Z4ZF1YSS5KKmx4P1F1Pjc1WV9aSV1QP0UqQ3tbVmtWRkt3dFIzdDJUWWFESm80Wi5tbiRjQ1AlWz5FRGZsTWJhMiJqTDRFRTwuVEFSdSsldCpsUDVFZz5yLlYseW1wTkFRZ25TXjVlTX14JWBEPFhidD5mPCFfM180QyNqXWpTaSZZZTY1fTc2UXNiVkdWaTphU1lGfltnM1lP''@;'; put 'put ''e0hWXm1vdDNYJj4qTjlXQnAqSSU4VDk+NmpqWEBKSS5iRH1MNCpVT3JFSzVgWEJvUnJaS1VTamIoQTJXXUs9NXhzJjx3T1YwNTNyODV4UG1OWkFuSzAlM2MrdU9FMlQ2WWk+emI/fClxNCU4ZHBFVVkySmUqZzQ9ISNNPCVfVnRbNXJPVztzIzxNWTwzS0BAOktGYl5yOEouWX56IWtxdTArY1kh''@;'; put 'put ''bSl4KUtLLl9mfiFSKCZYckklPDtgM1UycElvIixxXnh4ciF3JFUjOW07PEJLUTRgP1NxM3lndXRQNEJoa1ZQdEBLYDVUbEl4a2djPF0oOk53QmA0T0M6cyVlS2JEPiZdc1Qoe1omTExvdihGSE5OJFE+VTxzJGw8emJ1eElPMHdfTyYiTDh7biIsTGhhaUhad19+aU0+LyFrZy99REZqM0NHOCow''@;'; put 'put ''Y35fV3xLODMzV3RJSXtFelR5M2xvKmcrOD84N00vSD9oeGJmUVZKbDBYJlljI15KM3NVUyVML3l8IUJxJjFjbGNWfWc9eWlyd0dVZFc3eiFOQkkxUk99bHJ9NipMIUw+IklYTDNGdGQ8PndiL2w2flo4L0RDTURsQEIrekZmZDhXY1Jabnt0KzJLM2BLdn42MDhfSU9CZGAwd3lofGpZVC9TLiVd''@;'; put 'put ''aV9naj1kODZIPmImNjx1WCw9QmRiPj44Y3lWMVMkQH4lYks5I2RGW1VXa2I5M1Z8YjlBeWs/ajhIKHR5S0g4NUR0fW0mXm9TUFZkNWhLeU9eIi8ydGwpJW9pNWRndmJbaEN0IVcrYWpuXlJCR0lSV2lEZXUuZTNIe2RSZWEuLyFaOlA4akBhWWglQW51N2h4KTpMTjtZWG0hWixbKFV6dCgrNTpT''@;'; put 'put ''WVlKdyN3Qn1xKTsoVThnXk58bHkqa1U6Yjs4fkxLQmpuZWpNNEJaZ2ZzNyRHR05xMF8sN21PSis9bDBmV2o4YTdyeT9obnRuKlp4YCVuTFJCJmRPMEI8fFErVmJbS3YyJFpOencocjU+STt1QiMkMW5DRmFUbHhGcnlUKkVXOSR1V3Q+Vl4jJG9QMmtod1Y0SEBHQC9Qc010NTUsPUN1SjAyP3tJ''@;'; put 'put ''UDRLZ0MrJE14ZElRc0F9RTNQMGJVSSgkfX5bOXN1ek9rUjh+VDcxRFlyY1B5QSZNUiRLRGA9SVhdaUtXJVZBNjZVdUdDMDcoVk9oN1V+az1mPXclPXtXZyMveE4qR017OipMdmVDc2BCQUBRdFZFT0dgRDNmaEhrWU5KfEZ1KVpMbElQJFh9Mmg+N2pvdj4qQDU0PmowKEcufmsmdEFHSSRQNHck''@;'; put 'put ''TiFJS0Q+b2U7XyZzWyg7Zi9JbkJFeG1SZ00kT0liJnAmV1FJSTVuIyt5T0dORnRIX2FeWiQ9YXV1dGhlZ3p4aChRcCo+ekUxenVmZ2NqYF5iUFNiPEJTMltMLlQpNWxDfVsmKWBPcWFucCRjTTxlP21afnA/cjR9dElran1qJlNSdk1OOjFEclcmRzc0QG9qfXIvbWQvXWRJQmJ6QVNBb3h6R1ln''@;'; put 'put ''bldsOSYjRmBXdWJvdnxPeipWfX41fXVlMzM5IzlSUypJNzlqJSx5QnxIZVFmPG19NERZfU9eZz9yN0t4P1cqcElASkVIa3pbPGxYfUJpMTczZWZMYjpwQTUsXyl2ZEk/QTFxYkVtbWV1WzQ4Iml2L0RMLmR4JD5UNktlfF1HVDwmM3o2WWIlJiEzczhCaylAJC9FN1N6dUczNltATHcvXUw5YGol''@;'; put 'put ''L35UOVVYaWFfR0s2WUcxSz5lSF9CVTp3ZkRndmMxInlCcEhtKn5NSHAiTXhqdW1oflkyNGZSUW8hL2Vlcjs+UGx1ZjsqXilQQCEjKVRvZnxbZl8xNkF5JEZtQF1GOCVCenBVezRCMWBNezQlOSEoOF1CTilNNEpOTV9tampEJWE3YHFZMExxUCFkKjBDX2ZqRE9geGh+Z0kmaTgheE9ve007Vnh0''@;'; put 'put ''KnRsYUNsSVI4PEdMOSJZJlZpbXZZKjMmT3FVU0J9M3dTcVROTThlWXxtNTBEVElQX0oieSVRO0NCcjhBaHRzNllGPXlMUioheTFCKj5FcCZSRWFEUX4ufnhLR0d0TERbKCs/JUlaKSFKY15VMjV8a1g1dCl+LldYRUArfENIZUN0NkIiYDNrb1FmSV5hZFA0bk9zN1QzWGQ4NXpMPFp5aW1RPkNb''@;'; put 'put ''I0Z2RmddO3FxTHozSGtSdH5TIVc7b25ENS9nKVFWPys5WiJpdDdOZSNaQlN3bjZraE5adTVgZHdxNUgpJWRTVEZgclc1X2c+ZFQ4Ki4ldkF0dDB6VV92YWkkNTwoM188a1dDLllmXWg+VCVuRXVDZkQmPENKcEMxYnV0S0goMkZtODtRdFFZZVA2Y2JjVTMlciRFUWxeXWBKTW5QSGpTSlY3e3Fj''@;'; put 'put ''ZElBYCpoKGA9XTleSl9yfm5MMH1taUVVK2s6bHc8aSpVRU9jfURrLllZTUVDK0p1I2MuSyZ3azRnNVlsLkcrJChgKWI1dnxgYGZDeVpnZ1M2aFt1OW1UdTBrRi48Z1NuZSM5YHRtW3VKSi8mNlNfP2E6IVI/cGVDJFEsLCt7TjRBQEV3Z2lYUHIkS1dXb0UhdFo+fjhuSTJ5VnxNOHNYQSFWcFBY''@;'; put 'put ''PVU3Qk9pZTRadDFkNzlWSm52IiQrPVF3PVghaHluVHRdWkZEMmJeODFANWVMO29Bd2U5W3B1ZU5jRHpzcTY9ZWJUTjpybn41YUtZfXJDWllmTmlWWm8xZGM/XkJqJT16YndTMjUsI3Y/RlU9KUUyfChnfTdKQkEwTDlpSFNEQG8rKGdLVjVFSktudUZeJDU1M3tTPSRuVyp3dSwuL2dyLFErMiN3''@;'; put 'put ''LnVGU31GJWBte1UyVD19Sj9yMFpeKE9SJC9IU28/XndaeChSYFtJQ1cvfUopcGV4dXBPNz0+aHsyeEx6Lj0zY2tUN1ZbXUhdcHR1ZmNFPEszJjpCNTUxfmliM15kREI9emVNcFQuI2BaQG50cTd3cjIwSzV+c293a3MhOj42XyFvWihGJTteVDJjWX0+NXJPM0FvaDhHeklwTnBZNVRVVmh3SllF''@;'; put 'put ''TVNOfkxKbWFkNE5rOjxjK0NEczRiN1Z3YUUiXk8rek5FUyZrUn4wYW8mTXt6Q3F0ZDFEfVYwN2htOE5sMnI9Lj40eyY1c2tFUTgwOHd7QD5uPl5VeXNGQzomamArUDhrfEtaXyJVYVZtbW4pMHlCL3V3JXpZcVY2RTQzSF54bE9DTn1BV2FiK3N1ZD9QIjgsKDQ3X0V6SiZZKjYyOnRPPCxzRihv''@;'; put 'put ''U0d3aHgqdzxbaUAkMS5mO0NybVBqbEA8JlRoRn1XdnY1X3FsIjZdN1h7Uzg8WCFKcXtDWSw8VGtVMyNiYSJ2ekguRGV0fGlkQ1I5amw3bldJYmEvMEQxcDcjcXVbW0lxSk04YClrKSRHSDxuWkdId1RjP0w8Rz8sMXdtX0o6ZGJFNHFyZ2AufUtULnElYnBKO2Z2NkkvXWBgNyU8VD1NS1k/JGkv''@;'; put 'put ''OzoocXsoeHtSRUtbeGdjTFh+IUZXS19MSmRwMXJ9PnQhOmdQKXYlcXpiNFh4TX5rSEw0Z1ckRyg8YDBMUCVbRz5uVjhWQHolTjxOWF1sbmFNPEM3InhLPDY4VT9XRCRyR3dvWkhnc3xnbERQV2lSWCIoQF9VQDs1QHJzKmhUJTVHMF9bKz0rSWtAP3BCSj9DLkRLV3pxZk5CS1UwUDRLdWpTPFlw''@;'; put 'put ''bThYSmJ0dT8oN2pCPGBxb1g8OlhtI3JFWz4yY0IsZm1KYSNVSSZGOSMqYTcqfngqfk0xYztLOCFhZi4kdCJ6XVZMNVBAP3BhQ3xVWlR2PnlnT0hWUX10RXpjbCtDJXEoNiMyZGkiLlpTYC9IZilqMil3VkxqQ00jIn51YkxkdEhGTVIvKGFrK1RBfV1SfGJjOnEwfFdSa3ZJLmsyI1poNnBxfXpf''@;'; put 'put ''VGRTYSRJeD9xKSV6e2laLDd+cywzZipKdDtvfCNkXSMubFIiUUxZQF1Vend5VCtYM35xTjwue2JHX3N1NTtLanNDRWsxUTNtdHRFdEZ8aXx3bD4zQ3QrKiEodDY1QmA2JCM2fUlAejh4Oit+STtXQUl7XiVpYzk3bmReaUxmfX1jUX13MDFqaXIwcz5naFJjWVd7fU4sQyZHR3AoN0I3dkB6JS49''@;'; put 'put ''ZCxkR3ojJFlFfkR8KHJ9Vk54YXM/JX1GTFtoQz89T01EdThgYlBXKl9SLEF0Wih4NlF9OjhGOi4zW0dme1pleWooT1ouUC55UH40P34sLlNOcyJ7c1VLbWw4JUJBdH5aV0ZtTThbQz88eXhyZTs5Pyp6aypVU3E9T3FafUtwVWs9aGEqZVtGQVZqYltIVE84Vz5pMEpMNWxIKUpWPEN+cWE1MHRR''@;'; put 'put ''MXg/R0Elbk1ARkVkK3VyU0ohKV9bYWJjNEsofSxpR0VsdnFgLCYveSNSQHRuUlM6eTlKfFV0JVhXW2lYOS9fS0Q5K3xHTXxPTGI0QFo+UWB3Z2BdJk5nRS5rInhKW2g8Z3p9b3FHeDU3YyVqRURmUENbOEJadCJBSyhyVVUiKzBDbSQ0L1dpSj9zXXcjUlFtTn1OUEBPOk5hRmdQL2tLMjtmZFo+''@;'; put 'put ''NCE9QGZye09WczJYU19ab01fRz9rbklqUERVKSYxW00mfXhbM2Modm0vWkEkV2JuVm1QVHYxYmszX0p7TjEsYXdRe20qLCFfb19QZHVmfW5xbEAlJitJXTVsJXE6NlY9PDFdeX54SyZnUTVxOWJjdzxBQlcoL3VDdTBaQnQ0N1FEL217TnF0V0I3a2sqdSopVkswe3MxZHVvaXRTaS9AcE5XejdT''@;'; put 'put ''bXA4OF5wIU4jOjp1fVFCMWo0IyMwfVRiIks6ZV8+a3gsWGh6djdySX5wajlCWEtZXSs5NFskXXE5VGFpIVQyUWhxJGJxZCJQQCZtQyp+clB4Wz0rVEt3PGdYfWxjNEE3ZXd7eVhrVFlmJSMjInBUUns5bT8sWEh4fVBeZmcqJjxzaGBIfjR1YnE7R28vO11OJiNDSjZfWnFMVD9rfj5UVGMpRTBN''@;'; put 'put ''aCMuZHAmT0o7S30iSGxOey9BdmIyJkhWfk1ZYi5BYHZsVWs5eXVjfCQsfDxQPyUiQHo4bFRkQ1drYnMofE9lJjB9V20rLGFnS2VwRlt3bnVEPVJee1hAVWNKTFk4WzB3Z0BDaihoaldHeiMpJEtncT9TRnc/d3h9MTMoKnRhbDA1RkskLHVfW0NYO21dYz99MVR2el4udlZSbFlxanlweTZHRnRo''@;'; put 'put ''RkVVOVNKU24xWSpoUEckOERzSyY9aGEqUz8vWFNgeHBYZGJmSG5bODVqRXFibUVrZj1neiFYQ1tpdSkvVT5sV35deCh9d28oWmMjfnw4QVBTL2Z0Q3dOT2t8Ynt9S1heIzZzQk86KzdzfX5za1QiPlJyPnlOI0dOVSFxQHh4c1A4ZnFOayQ4eH5HOCJELldLXmFJTSVqRiZyVS9iUERbdmpLMDNG''@;'; put 'put ''d3VuVHBDPy9We0hgMFEvQzM8OD9jM31hZE0sMV8rem9pLlRwaUBncF1YeSZgbE5BRjVsQnUoTHImK2dyV3xKSzJDd3tsIi9NYFVqJD5ST3dFKGVpXyxfVEFFd3orL01HJUkkfSY5P0U0TSZ7WTpWa31ZYXxQSUAlRW15WSNZT08we2M8UUVYdyNBayQ5bztoIVV3VlpreD4mJV47OSE6WGwwX1d5''@;'; put 'put ''T05wNzl4QUgoXi81UGwjbkhhTV1VYmcvT3ZQSkQhOHJ6UEpVJSFWTSY9aEd5WnNFM2pEM10+U1l0Q2coSXpMVkNwNGNBcTs4QlRNdSFiaklISHJ1PDleNEp1QUA9bzFmdm1WSnFjQlZkLnReOFVNLEtyPjV1QGckc3ZzMi9NaTpfaCoqJi5WZitCY2dwJil9K1ttJXBxTHp0PGVGWk0hM1tjYnhp''@;'; put 'put ''YHEsLCErYmVSVntjZjhQIkxQK1hfPkIwWFJdfV1HVXlYYSp9OTlpc1ssOGFMR0o+KWA6WEsmYFBUT0Y/e1EzMnd3PSFISnF2bWUvcDg1a1k8MTBgXTN1fjldLz0lWFIkRVVOLjJabjIzcTFpc2F0S3xUKSRXLHcmIlFpMUxnIW1ac3RMUW9NSCUpMlVDIyE+JjFuNy5ufSxFL2MqeCpiTU96c2dk''@;'; put 'put ''NitdPHFtRSxIIzBtRFIuNlRnRDxMV0J7KzkySz1Zd19tSixjdVZdLEJKfltuUFFvUztOOlczSzExPi9zPFVJN0ZfQiR+UHtNNzUvKkc6Pi9Kci9UVU1vOF9ndyk5PH1yTCVSZVF4eFAwOD9jRG52NXdZflYhQk1qUipnPj1aanVpPkZ+V0cpamJReGJSMTlONzc/bm56WGh4Smk5WFlBWVU2LmQ6''@;'; put 'put ''a0lwOm0yfFdwPm8wOkU7UURJeSJfYVVuSSlOZWtlcD1TMjhTbGZ0cDpXJEl9MSZJZz9YalReRFtjWF81UiYjW3djTWNTJXMqQFBPNDA9fXdHO1ckVEshKmlDfmhMT0dVbDdtM3tZIS48ZjI0a309Lkd+Py9nc253Zy5fPTwkc091JEgidTNIYS8ic3g3Nm4xN0ByNml0NnpLOFkhayJFcWVCN0Au''@;'; put 'put ''SW1wdGheZkBvTE9iXn1GW0JgNXVANUZ3P0FUTThCKjslVzJgMDNxXUo6bm8rPi89S2R9Oz1PamFKN3VQYTlKKl8lKW8wTjdnb1ZTNiMkcltxPXttMWN5aXIlSGJPMEwzVThEUy9yQzozNnEvW2BFOjJ6M0xRRDs6NWw6ezdRMW1sZjt7fTR8P2khVD52fn1xTj1HYz5IIl0wajgoaitUV1F8bnM7''@;'; put 'put ''TnJaemlrOmJ2JStrIypsSUcrcSM3ezlASmU0YGlCcFpjL3FwLk5iZTldZDw0JFNFc0B+Vz9XWVVsSi8sZlUkaU1iTCo8JmgjeXB2PylCRklALDtOWD5uXWplTG9jdSR4bXZHX1F7Sz1KViZeK35YMTopQGl3Y1phdDZFe2NjTk9BQTxNMVs2YkwzbSUpSFlyNENyMmRIb2QqeSsqUShJazdnPDE0''@;'; put 'put ''QF1qRDYlZHZefGJQeHhQNkUqLm5XazMqU0N9TzYzdVB5c005QCFNWD9UbVM9Vk1ec0tTMTleeDJlMkNJWW9jJXxFa0dgPy4ycTZMfD1QdkRWayxga0liWHNZQ340Qnl1Pjt9KXt2RU84eT1OWywjP2Z8WXlbdnJkdyRJW0s+YiRNRn5uKE17P007VzgpNnYja241fVE9PlN5WlZ5Y3M9PkFebmk9''@;'; put 'put ''e0ZGKTgzWz81STlKSTNjXU9dI0ZBIipWe2txPkU2NTIwYXVFOWxoeF9kZHB5d2FtPiZGcmIoa1RvU3Q1STtCXUxQO1dnJEssNUxBZSs+UTRHMEYicSg/Tll9IVVefkdNeThBLHhKOUR4Rk93SVUjRHUrKXopJEBPZUNUVG9mTDFdX0kwbDwvKntzYmUob2xOXmBqK0g8aUQwfm8ye3N9TlZITTFw''@;'; put 'put ''LDc8RkRvZip9cFNaQDRdZHk5aTtQQW1pYG5fXlQsciZdS2t4eVpgKEdSLysjdixUWC9Hck9qeTZEfG59JkthRGBYYXAxNFhicWRjMCNrd2pzYElUJnNfMz9IcXhybDxtZCxDIVFrbEYhczlVbyRjTV1ALzpmZUBEJFhgQ1lxZ0VuQml3YUNITk1JLypaYXBOLz95V05PcjNHZ3hhIksxZV08ITIh''@;'; put 'put ''WSs9KEJxfmhDdzFfNWpXQFtUI3U1XzwueCZtJmptZS84S2Z5JXIqR09dPTRAZX04QFEyPUUiI2hvZH0ke1RnKWtuc2Moe1tKd1dKUDR8M2JYbEElc3NTcDR0dnszYiljSD5WdHcsWWlGaiVic2FdYiViRlRUPV44UzFNRytkSDtmZ0lbLzpKOEZLPlpYMntsXkszc0ooJCRYTDZVPW1BMDpgbVNC''@;'; put 'put ''TkgoQmwvRDI2P1p9akt9JG89S3JJQ2AkIkliYERGQXIqSDIqYmZJaDpuPSRTUzMxIUdnNHczWCtrViVXIVR4RClTfCZ+ZyQ7XW5uVlFnWnd4fX55TS8kIiFjZ0A4dU5KbVMuIykkOE9pKlVHOl1KKytyKG1IUVhFQTdqdElwMmpRY1pPIiQoMyFeSWgqYHVgcUNkfWhPa0ZITHo2SixbSWtvMW9C''@;'; put 'put ''Q299V3R2S0UwXXpOSEcicUU7PkIjNVpQeX5lOXlSQHZEaEw4TmZoNElRdHpgIWk+RC5yRz5SUUxvYW5xYmFXYyIqYUYzQjFONDBSJk58cGdWdHd7KHJON2suPn1EV0BfbGdsa2ElbGpCNSQ8SEx9fkQlYjY9dGZncytVanNDI0dIcjIzMU9rJjdaJE1oPyVMIWdKaEtnZ2ZLPkxKZDVMbitPMnVs''@;'; put 'put ''TEhWcF9ZRDAkdl9Gak9ubiE/Yi9SQiIuN2VuYjVAMG1qbyQmLnttJlhYO1VqcFlAY1Z+RjVQcF43Wj8yIlpYOE9bK21QLngiTD8oYHR0KGpaJVhQYDUjaSsqW1dmJD16TTdsMUpZRipuIj5TfE1wT3JMSndgek5JKGVEfmpEQFBAcXlfUV9iKWIwJFI7YGZseEdnL2ZQaXUzYU8zbjs2U1p1OzYq''@;'; put 'put ''X0FNalRbPEBAaF1JI1VqUV1AU3s6R3hUYUB2aGUpX1JuIldyM1txVDo4PVFfXVEhRW42YmBJLjIrL343a09GL2p1KkFpMnp3ZV1jTEJdLi5qKCQlLzlTezZqSks1W35LT0l5fDZnSSttbFU/Y19mVlE3KE5wQ2klNGF4JlZ4MUV8XXA9bDlIVykrLHlxcl1jPFsvfGp+RUJrcEkkUDE1b15UM1Ej''@;'; put 'put ''S0wzJlpAczwvI3IvdUt4MHhecGlxMUAvMURoTlRjOE5OKH1DVjpKajEkbXg9MjJTIjlENUBBSjA1OD5AKUs6bytxWHxvTD1VMCUxbl5mdldmWiY1Q31kU3g/O3xSPCkqLFY0Z3ldLHRGblJ+cWFWbnEqYXthdlR1MT1kenFbOUx+PlhXMkE5bTdOfkljKmBtTkJleV9WTmNFYUVlT0d9Pj4vO340''@;'; put 'put ''d1d5bnUzTzI3Wi5sTHErIV52cX41ayQhMEojTF4lMX5FNGouRkV6OGBjdCojNk9WR2dfPHs5fFE4Y2cwV0RARml0ZSpMc0p0Yz1YcndEU1Q+SkxGaTshdiU6MWpeZklWIjlfJj54RFddbkVYT3p0UT9qZUdsQ0d4JHprc248JjA8Vm9jKCE3fERqTFVIS0B4OGAxT1ZhSUIlNDxuamkyR3NZYVpW''@;'; put 'put ''X0RtKCFjfSx5UExeMXgxczFweCZUTVpMTkdfe3puZXtmdkN6PUp0T2N3LEpyJUVUViEkcipnZWgmfnVCLzZWPG1AUiU5LjZjYTQuIyIpUkoyfHxNNEw4K1FkXzFtLndCYVM3dj1aWV07NkgzSTljZlR9eVExcCRSTS8sVT4rWyRFa0duSkFEQlsxLiNMXSRrKHl6SWVtXm9DNndEekkyVHNuZmRX''@;'; put 'put ''dTM3MU99bnJ8TlNMe21lM1Vgcn1pd1BGZF9UUE04Nyp+eTQpVHhNUV02RzhvI0J6ZDZyPkwvRzdUM0dRQXl9ZWZCO0E/dVZLaW13Miprb2Ftc1BGTXN6O3lQN3RRP3Q6Xjk/NFFCQTFYbSp2IWFEfkleKmZ2UkNabkpDL0ZVJldvJGwoR25Eeyk4bG9Wc0YzOFpXVnMoO3oqSVFBQjp3eyFYU3tl''@;'; put 'put ''IVt1aFhhdCN0K0ZjMEtxM0whaUV+LztWbF40KmlYfHR0djNLNmE2T1kjTyU1U3I5U09dMnI9ZChsZDlHUiwuPFhLdVJIRSFiJkxJOXpuX3p+PXcpPlRRQCxtSUguNnwwO1Z4T15TOEIyRUpAVDZHM1V2SGJ4SVpQUV94cnYsOyI+QDUkVVIzSFkzS0xMQT5tR3QuKS8+NVtpNDtqPjZJWF5DQSIr''@;'; put 'put ''LzVbJEkoYX1SdnNKYGN+N3drJHg0bnx0ZlFQJXNEdHliSX5SfS9CfEpJdzVoY0FVcmxnI09mYS55N1BlQWpjem1ZPTJeXU08fFJqTjhPUV0odVMod3c9X15hbVcpXzpCN1gkd0A8QjVXWj5tdGtvdFVQeiZXPUxNOVkqO0o8OlslUjpWNzNGTytte2c4dXs/JXpoKWExM2ldfkRZe2QwQ1YkeCZ8''@;'; put 'put ''OTYqJkZpelhOSFh2PzhsbUErRUdOZyR2OHxSQ2VUa0ppZ01scXdmX0RsZkFBS0Zge3cpLDxYNmVYMWcvUCpQOXZUbE0pMEtfTVQhU1NtSkNQYl0oYSoxSjNKX0QhXi5fRmwicFg5V0ovTko/XVd5P08zXXs2fi9ebXJFMGRhTjp9XmlrSl0oRCVHezUhLiwzUEUuMVEkP1hHLCFIQSVvXilCYSwl''@;'; put 'put ''cTBReTU6IzBINWM7cylOUEQ9Y3dRUHdzLFkiXSspP1JdPDUmbyIvQklfdW92cWpFbyRqWy98L2ZnW00qbXdDcD0hSiV+WytSbz01IXUhY2dtfGs5U1F1cSskLEl8c35fYCxiLjdEL3JvclZ6JlhzW2dsTzFCZGZ8TmY7elYqMCkzY05WdH1GM0hQQ3VpMihgR0I+Q05sR1ZPfl8pfVhvRyVAYjI/''@;'; put 'put ''dG48M1dsYmg+W3JyT0taUkhXc2dJYj4xRzlaW1gmQE9DcyEkRGEoKU8sWkxmN1Baa0Y5N28wZm4zVUUoInkiWUlQdHRPdy5EeCFkOXdTPjdnZ0lhQiRmbCkyLiYyaWYvR1lrKHwxXXttUHsxPzR0Wzg2UXU2WCU2NXQ6JVFoV3UkYXlPdUlITmM5JS8oOGpRNSVPVnpTWVhEMGJ1V3B1cX1NJn0q''@;'; put 'put ''Z3dlP3xza09AZk4lZD9iPkojUEI9Vn5VLDxwampVaUFtZjM8bUw7RGNNLmVFfUFbSDNmZmZ+JEh3Z1djfE8hTiRlaWBDfEsmYEZ6Jk5Rb0YlaTd+YV93LjQkfnlyTy4+PikrYTshNElIQChIbkY1R2hHW2VHPzRyPFhUKVheQEh8YzJtL3N6dzg2KXk3biVyI1l6KmgzS1thbXZWamo8MjlZPCZe''@;'; put 'put ''aEdbP1BsdV8wIl81YiY1ZGxHLighTTcxPHg7KykhNzNGYCx9SU54QmEvSD9wTTl6SW95bWNqLFg0L2JYY0N8TjM8OHFHKXl8STEiSUpYU0FQa3tTWkBaRDVKU0tPeV53JksqLEYqdWt3ZTx7elRNU2gxa1NKTl1XP1VjK19xanFmaSw0fkdWbUtSRGl7fUZLZE1OXUl1UTlqZEo3Sk98W3puby9f''@;'; put 'put ''enE1RW1OQ1hlWztRQ0ZzNmxOJixnfGksOVtSMXZvRl95L3hkMXsoSDZhRX1lfC5RdElhOnFsJkIjRXlTLGFrWVMyfX5kUjJuYmpTU3NjJCg/PihYPmk5JlR+PlVVI0c1SD1NKW19Ln54MkM4VmNtSC4qIzhiNXcseGpoRmY9dVU9fFc6WGtGOzhCLmtiRG9aSCtZOzRpOn1pdEc2e1IkMyVMRSV9''@;'; put 'put ''TXd2eSN4UVhVNkFuKiQ5X05Gb3dSOFZlVXwrX01XP1IvYFB6Z2YmRXlRLCxbLFt7ekNvREZEOmopYm88fGhaeSZFNHszWm9MYHRmOFhbUnYocUd2MipAdVopZ1EzZzskOWU4RUZ8OGpgSlcicjdLMjovZT58aCQxQixgVGhEUy9FPWsxUHU4fUhVXzZ+aFJqRSkhZy5zcF8lV203UWhWWk03YWxg''@;'; put 'put ''bHg1eH51QmVCWWZxVUFpbExibmF8TzdiY3pKK29Be3FTIURYUjt+UTJTdWBKKTN1JVJIbzhrX0g+XzdIRUFKXT1sbHU3Jlc9TFk+UTVXJUAvWT4vKUkyZlNETmdzJj5YVnwkcil7QlY2eUJ4T3tgd0lrWzh4QWNWQDh9RVBDNGQpT3RENTtwXjA0aElNPm46LzZEaVB+X0ZJN3k2S0BwXTZJeC40''@;'; put 'put ''cjBDbnQ2TWxzKXhvK3hLOnh7VyhrN1JdW2AvLnc9d08+UDQ0QD1jZVNFIXteWVJRQ0IzSjAxbURXbz9yZEFAdnArZkB1QG9zYUFHdFRVJFs8V0hXOCE2JT13byVXPHB+UTdqJWVwP3RWIVRCSWpoZXU7UT9LQE1yYDIkRUtwKEhYW3hgM10pclUxQmZ7fFZGYztDeGRLIUhWTzJKWSU+bEJNeURe''@;'; put 'put ''M3EkKkUvUm1oa3w5NF8vVzFVZ2kvMk9kYGZUa15qcW5QPXFMek0pOmhqOVAzbDd0TzNhITZCOkJJbVpwMT1dXiYlMDRyTmZAOipUVmtJWTMucGVBT3AvUWBuUEtlVnghUiRzcThdVmNMRiFHVHxVRDU7aFhwQjBuXXMxPUQ/S31AOTEwSz4jfjM/MklmTDE/M0M9N1JWdz9aSXFSbSp1eUMwPDhn''@;'; put 'put ''cTlzWFR6Ly5bOGh3ZnNaVV1IWGoxKVh6QihDOUZmckd+fFpoeio8VERvKylPVHgsZGFGOERzQllCMHgvPHMlIU46UUVKWH0xPGJOSDBDSUJVSXYqXllnWDtbYSs3fThXT1FuW31SOHFbKm9UWl9JXU8wPXdqJWojR1VZTkdtUDM/JFsqZGZXb0k8JGE2SFdANTwvYCMkTj91bk8kPTt3ak0xdjVj''@;'; put 'put ''L2xsJjhTRlVPRTQ4Izl9b2NIJk52Wm59UjpFS0NIKnpnY3N+K3RbZDBHZCorNUpPWkBFV286Xm92P11NampoLFNaM1N7K1NWb0pgKSF1OUhgJXJYNU5rVTNEVFp3WHpTO3xpPFZ0ckhnOndENUFsTkIwNnskfmZkdjBdRXQ7eFc+V3c5WTZ2eDNlZk8maHBxVUpMfCNgKH11fVBVOmt9ZSE8Smkm''@;'; put 'put ''Kmt4LFlOeSVKKjlAWCkrWSQlaHJbXnh5XyE6SWVXMFF7Z2dgam4yNVorOml6SmtaInFRRXNtKzhEd3BbKTI8OGJPTCFTPWBgIkJUY3lzKFY9JSxobUBEXzY5Z2NXIjBVWFA8Nk43YV1CakYvMyVZdHdyS2tUO3EoSVg4bysmWVhvKGZ9Kl43ejhVbEM1TUhTY1p7ZVlidUcmYmk1QUtXen54PzIk''@;'; put 'put ''LyNjTEhpb3FOTCFBL0skTE57aXIuYlAhRl5zZzkoWUxFeEEyL1tFfmIxMjQ6Vit9I25HZmdJRDI+Sy8haXsycy9LSXNrMnkrNUJoSCVrbzhtUnF+PmliTiZKdDxwOn1fdVgrS3N9LkJSMVlqOjN9P1VGXlNEXkV5aTl2QCguS0JPRllmIVJpTEJSY3FscmI0ci8zR35rNHlAUmdSKlR6e1FhKjFd''@;'; put 'put ''M0ReNHlQeTFKY3h6WFMqWCs1RThweHhPZ25qaCxsWjQvdiFSRjovdDNLWEBLNS48W3o0MCZHWmFvNDUkcSo8NHpoRVMoXyM3OnlJTUh4VW4qPFl0P1R4NFtHODtbNU10aGI6QmpQUU87MzNiYV82QGh4KVd0am0jaiNGQ0x6QXp9cWJmfkleOSMwc1tSa1JeSysjcWtnJCt9ZG81fENlKS5tMDkz''@;'; put 'put ''VFJKY3BaeSo1IklXbXtDOXolWzdVJj10VENxJm13RG18O31gdzBhIV8pVCZXPHpsbjVxPUZ2dy5Ra2ssX0RTS0NdJjR+RWVEQ048ekspNXZZPmg9TWJ4eVhQUW9vNX1YZi9ZMTlWa0ModzB0PVF3QV59Nng4b0dkWiw/flNHMi8qQF8rXndYfWgiQ1U6Wys3LjtWYUJxP2dqOkxOQ1VvTFsxPTt+''@;'; put 'put ''ZypQYnYvSnNqM1M6dlUwbSJKPjBUc2ZILExvKjsuVFd8SSx+YXBtVn5nZ0Q1dzwjOj1Xbz1VO0M7Rjo7Ujl1TD5HWGV1NEE2NitDKmM5VTFmVUxoQ0dJRGEmVChmcGk7SU5QMDljO0pMY08uSEAwMlo+Nn0yek5yMnBjPlViPGg0ekExLkh+Zjs3eSopZ01dOFZfWThCOWdDYnwmaUM3MC5GdEt6''@;'; put 'put ''fUB8WHQzRT88IXEpW0UxYCVCV1QkX3FYWEtdIztfKzxFL3I5I1RmNWNpaSwoNFY+SyhiaFJEfT9aVSoqSFNOPyZEIW4zVERCPigzbDhsemZPLDtsP0tRRkxOJUJqPCo6VTckSk9iSihVLnJwcH4hbHYkbUY0Wyw7KVE8QGRVQGYrOWQ2JCZlIk42dHJ1L3lZcjN7Ri9wRlgiW3YsdXkmWX14d3xu''@;'; put 'put ''QXJ7cCxEZUkxZU9fRkp1dDJxfWVLbyFAdVF7ZipOaXlJclF8PkFTOUUpazQ+RDA+Y05lQG5EcGErM3kibGBfU1c4OVdYYTE8RTM2L3o4N3l6VkRUfShSPE9gWXhEMUgme309YVd1QGJrVmlUVVo2PSE+KjxudD9BcXllXlYmPj9hKywlbns0RTJua3E3PlIuPmswLE9KU19jQHhbR3JzLiN5U2Jr''@;'; put 'put ''MTdRUzgiVD5FTnt2QDJJN1czPnF5W0xoK3A5SFVnOjsyaXhmTXA9NGw9anlEUiImbG5+UC9JcnBYaz85ajsyK0RiNWg9bEZ0X3hKNmxOU0BUIWNXT1tyfWAlISk6M0QjK0o8QFRkTTZqISE+W1NzV3lVSlI4bCUxMF48I3huTms7Pil6YkJZX0oxKjglTG1ibnY5YCteKiZiY0lfO3Q+eyImP1hv''@;'; put 'put ''WCg0e15fe1BzUzF3cVlSYEUvYyt5eGFxNUtVZFksPjJMMntBW0VEO0Y/KyZrWENpZDVONCU8Wz5uW11VImRHcDZJYEc+S00sM0RiYSZNKXZySmt4fl4mVH4pRTFDN3YzTnVpUEJKbU9YMzc7ZX53OCYic1FYMFdJeHdmXUEkITdAK3x5LyJJTTF8d2p0Xyg4Q2c2ZCN9ck9hXzluQzxCSn1KcDpC''@;'; put 'put ''LnE6MEBPXX1IQXkxKmQzLG1GeyozZCM8ZDJ7Sz1+flNGbihEMm97NlNzbXBVK3I9ckomYjQ7NDZVSnMjSHhYOn5rfSskNnF0U29hKGlrYmlGQFh+ViMoL2Q0biM0d0wzRTkqJH0lTnIyQ14iRyFKPntYIlhZT0NRXzwrfFkvWlBuR3B+Njp4KVlwZFolIkJbN3ElZFQqNWd3Vysld2whbUdvb2Ez''@;'; put 'put ''bFg2Kkd6QlA4bGolQGxIZWJdcD9oJCFJcm5LfXwwPTQ9Qmt9WWdAUXU7PC8xYW1JfGNYOXBsTX5RdiJkfl5oWT1gW1RRfFR1fVp2aTAjVXhlX0JFYn1nTlR+czBIaTskMkJQcihjYFoiaTI2Smx5cCxoPypwIWpMIyUhezJ6TWxQWVc5JH4yLG1GPFY4Pz13UCF3MCEhMHJXZUkhSDZTJHhJNXd8''@;'; put 'put ''RHRHMEV3V0ZdTkFaZTd1fFZve0F2YF1vbmoxQWM/X11yTXlIVkRXbWZJNUphVz8rSyNQZGx0RikvfFlJMzU0flp+LnlKUFtJLjwjNzpGXV1adGNSI3ZFLnw6WT0xQH48THhHKUA2YSNVcCUmKUEwQHRXQiVJckZ+dDdtYUd2M2I6fDNTeVBIdWg/OmZ2RnkiNEJoXXh2PmokV3k5djhZOGJkSGR3''@;'; put 'put ''LnR2NlQiY21scH1zQnZuKFh6Z0lhKFVhPEZENm5ORHBFcm9nI3JrbS5fJX0xR3x4QENmJGY5aV1IaCRpQlJ7JnlLX2Z+MmdZeEApVVRwNjAmVDtfMWRvZyZ3SiZKX08wJn5yOEB0LnV4UzRbbDk1JnFTfiZvMCFqMklSUXJ0aylmNDFobEVOZHgoPjBULGRfa3YueHZWLzY6RT93czhTSyk/JiNh''@;'; put 'put ''S3AwPUszfnFsL3NSbnw1bn4yYzpaR2ApUTlJX05OMiU2PVQlJGB9emFdNj43fC92IVNjVTZFc1ZQNFJ9eUMlcS5eKUw5ZT5qNmo/U2Z4RWtgTF0mTSE2WVNXYns9X0o7IjYxd3M1JGh9WDl7cCthXkVELDYxbj81M1czK2M4azlae2RPcVFwOmEudilTTU9WPWxGbSV8NTlGNFsvTl1CIUE9e3dz''@;'; put 'put ''Sm5udkRSci5Ie29OT3FnOz0yN2phZWExeEsvTTdoYlVlMzlyIzl8e0QuU15uS01rOSw/U3twQCU8Z1R5eCV4Sil6VVpvZF5NMU84NXVdcWI3aFkhVDdUO0BQI3x1Y2N6S31FMC59YXV5RiNKJS9jXS5VOTZ6WTVYPXJFcE1wSChCJWZnN3RTelNjSkRKcURKaDkibVlGK1UxVHh6RTJxelNpdUFN''@;'; put 'put ''dy5Ga2ZLKWFZTDcqJDAwIlpbZGVoRH19Ny8iKnx4bU8qRTorekdhL2N9NCo5O3NBOENyUlk+MXdXOU5KZFc2WWlZdDQpSnNLMzY3QE5SLChMaWRybW54aHo3K24oOHMkZl9xa0o9RT9bdC9CemEhYnZDPVBULmBJbV5gcCxXfE45MyVQITEveT5hS21TbTN4YD9AZGtjSytIQl9gN1g8aSYxMnd3''@;'; put 'put ''IiN3cXElcTdscD52KFtoQVpTaGYocVYoSTg4O05PbVF2eX17ZGlzJDIyeGc9ZH5TM3dWcXA2V3NPa2lRaXVZNUg9cGI+SzYvVmQ9M0FhRmA9Jm9WIUhJaWpHaD1FdlI+T3s+ZDY0PHJefFM3Omp9N2BGW09jMzw2XkohT15kMyJhdzZBL1M5KU1sXldXU0lKL24hcUpNP3R5PktgZkx6UEg6VDBt''@;'; put 'put ''WSljQWtKRW93eW5lZnpqbUN8dGZSZnRAODcwIzlaKDF2MlNCeSw1PHU/Z3o6QSZ3TVc0O1lGYzkkUHBNV2UxTWBWL3QzT1gxaFNhP1dnY3ZYflZVQnw2aHtrdE1feHk0KUkrYiEjOW5DWF9lVXxrNlJaakp2VUcvOGt1Rn5+W3ZINU5bMEVHQX19VmBrL3BqZFRjbUAwdExqZXFjfGFPMzBoZmdn''@;'; put 'put ''cSg9QjVLImczYS9qPVRAbjtqYTFgeTBQV2Zgd2hnfHl8Tig/PDBdeFt6bltnXUBSczhrMn13UTdCbikvPGtSJlBHMXw8RmZ5O3kwfTZYTEp8WCZueUpGXndRXl55OVZjN0wiVWtNcDl7ViJge3dSZTAvXmcmQUQvLGRSaCMvNkUyXkM4ZFhBK2ZrRzVfXSsrWTlFJDh7dURvPS4lPE1uMHdQe3wo''@;'; put 'put ''UixEWHhAcmJHaDY6eCNjTCJPT2c/L3pSX2VFMyxULkB9P0h4QmUzNE9dYUltTks+dVp3L2wrWEozXlBWQXVNTlsySDw+SX5zR3F5RDImTTRHSz51NThbPmVEREptbSE2Oy5YbFpdd1Z2QSUoYXdgO3d3bClMUk5FWyI7WCM7QzNjbjRkWjA1dUQjJjYydF8vPW08K1Fxe2tGW0lLbyhOdytefiNO''@;'; put 'put ''QHM1O1RWfUJsVm19YEdLWW0sdUpoLGJXJjMxamd2SnUvZDRAd3NASCF5N2hIL2VFKysoQDJjZGlDNSZufHJ3dVhQKVNpI2ElOkZCdXlWdFZWQ3c9RDhjXjNXdCxYRUA6JT1kdmBXSUh1Yzd1XnFAT25keCx+Z3R1ZClbJTdMXUd2XWF1Vjh0QkhFJno0V0c6SipHXk96d0NySixvP155YXZRQVJ9''@;'; put 'put ''X3cxWG1OVjNkdSQvekZqaEFAT0IrZC4/VSosIi9CV1NQTm4yOzhaPGUhRkZ6eUA4YyhoZzRBVU1uZiheNCFXeypqcFBiQXR7T0QoKlB5Tm10Qjp0cHVCYXhaIi9+fWk8YEU6fF9uZ1tKKk5YPTBee0kicE5CYU88Kko3YjZUVSM+S25wQEl0d3NXXyI/UnxqeFlzZH1jOWpvNjFndypbQlhKYn48''@;'; put 'put ''aiFnITQ4NDlsP25tbFpPeVEqYDNiSmdaQGkiVD1tK2E/XU5JU2Y4W3ljT21MTW1VVnArPWwiP2JsKi55VUt0b3RodnJBVzQ9Vmp9RTZAemkzKGspL30vOCZlYFc3clFhfTFyQl9uRG4vOEc2UEczVSxRTnViNmZjMk5KWk0hX1oiW3dWXzYqZ0ZJQD4kMitNPE92W0FEO0lKVTxuK2FiN25lJlNN''@;'; put 'put ''Z3ZaQEsjZSRWYGg+bX1HT1huYHQvLk9dVGsrO2JxUSs0NlsyK0JCNSM+NWoqXT0uSSFXKCRCQlU2KiM6N05YRkUvW1pTYXA3JHsqRUM3JXVSKHgpUjdaRFg3bTpmVXx2fjAvZXEzMi4ve2pOPWlpTyRUQDUhamRBZn44SCJne1Z5OyxKc0orY2IrQVE/alZuNyFyZkQlWi8oPW9kVmdMNytPbm1k''@;'; put 'put ''THIscit7WzF4cDF1aUVQcXF9LD9pPkoiZzI5U1duRmFyTDc7ezw/ZkM1Ump5fmIzQ3M2Jn4xZkRtRkF6YChFYFFnQHlNbUo4aXRdfiZKcn07fnpfbjBCR19HM3tOTXpeME90Y0M8TDEqNV5XMWcpUWFsNnV+OmtHcml7bykqcURPKTAyOTxNOFo0KF12NzlCUD91bEleXk0+KGJ1SVF3Lnp6PFVY''@;'; put 'put ''bj5bWSU/X0JacF1uYVZKaFlNKmtEa1ImfiMpRHU9UmkiU0RMKko7PGhSPyl9S0g1ZFdgVSt9YFNjOihlc25oRXZeIzZ9eFsoKHp4bi8weT17I3xLbHNOJmtxSzxYQlBXQDl5eUVVd3A/RS4yYCJuVEIiLDtZIT1TKXZqNSg6IlhMRElHO2NSKndnTSFKc1Z1QHB7O1VRRHM7eWpIOjtzVFJLd3Iz''@;'; put 'put ''fncpWXYzdmZqQXV3c2FXRUZMMENNeiQsa21Ldi5SRlFvR1AvUU0qaz4+X3E/VWl0W0dzd0JgKHdma2dJLExVbDglfng4VU93blNDPl5LQGhWbDlCMj96RyhUVnRJPWVWT3owY3tEOFlSfnt+JFM9Pz0kbk5sZ3RPTzQ0L106IV03WSwzQG47bDlyS3hZZzx+Vz5AQiU9STlmZ2A1bjBYKjM3VFBs''@;'; put 'put ''KFNzREJzcVhneypSaD5FbzloVk5mQWU0dTMwRiVmKmQpQiYkMDdZamI0ZmlLQE9mRk1dNWB5fmhYZUgrU0Q9Uj5RcTRzc0pbdjFLJS4mdVQ3UltOcUAkbGEvQ2AjWU1IOSYpXjJRYE91T2Qxa0c1ekN3Zk1vVGg3fDZfKTYkIT8rUEc0YHF0MHZtI2tNXWJHWF06eEs9MjF1aVBQNkY2MTs1XnVP''@;'; put 'put ''IiJfS1EudkJ8aTk9IyQqZSZxdVhiJXFiZE9qbDtVdkEicDMqPWRxdCkzMnNAXmcuVzhLZ2k6dDlnfio7Z0l3Q0g7eVpFRXhHIz05L05DOG47YkFyQ05jaHRsPklbd2FqO0RiYnxKYzNRKCx3IVhuP15jKkJbPENCRyJyZn1rXjNXZDkmSnNFUV52bUkiOltzaXVGTURIaWBCQ2NSfUt+Qn1lc19s''@;'; put 'put ''fTc4SFA9OTFhQU8mMzUhPFFbU2t+KUJsfjgkTnEmdD4jQGdXL1A8blgmVEtgMWxZNElZdjFQel1LbHpOc2lbJihBO0VtX3J6IyltbEVybCF+S0lNUmtHYndPfTV3Q3x2QlVDZk1VVzlwUlBdS2JPLiozd3QqImlRczZYeDZpNHJNPEg9NFJEQC4mfiIzQWo/W095PUxBdy9Td2olTCQ8RzNtUFFt''@;'; put 'put ''PVtJYXleYHdRYnhiXXw2LG11TEBBPltickAiM0hnekJTK1o7UiJUfCQsYXNeKCxSejdZPmd6KSt2eWQmTiZzcT5ATHI4el10TlNBc2AqJkBxPUJSW0xgPDM8eSNeezY/V1UuMyN9L3NFOjBaS3IvUjc8ZENhS1JDNk47LlhtbiNERj4va0VUZyQ7WjU9Pk1XMXV+XWd3MXw4YUB1YUBdKFAmZnsj''@;'; put 'put ''VS44YClLQUZ1M3RzYlhEeTR0I1M9NCQpSzl6WDM4Ik5nNDRSSDNMMDBzY3RMNkJ9b3AlY3gkNWsxLGRoX0BfX2k0fm9mQTMrLDxKWTBRNUsuP2dCI0F3SUFncT1QWFhkPFRRXmNYW0xHaXBDOm1JUVpXZmxdKX5qIzcmKEkqTSpfQjlnN2tHPEVYO1MlX3VjcH4vU2crQGEwamVmfCQxeklEazpl''@;'; put 'put ''Zm9mfSw1JF5kbXM7P0IvUiosJEN8Vk4yUksqZlVnIVJwKFA2O1psdnVeI3EzI15nKnBdcj5NYD96Y0J6bW48OCh0PTVyX3xnSyF8MlR0fmlZeDk6ajRXSnROWXhncVE/TH5ARkRMNCFOWGIreXZ5LyltPTo9OTt1Lms5OVNNaEZNYVVHajBKZFU9WzFjYmZlQHYmUko4bVphbFNXeSt2eHo7fnMy''@;'; put 'put ''KVppMmNsdTlub116ZV5QWWxkJVhxITl0fHB6TGsuJGx5fjMwOCVYKUdPX2NPUGAxI1goYlsrWlRrXT5xcitwTX5xaVtsRTpQUGZibGxDfF4xbkRpKUE4cFVsYXYoNDczPXpWVXxjNU9jaXIqWSVDMztHOD5veW17alZMRDA+cjE0QyRTe3dwQSxuST9zTU5ncmUyflUzb3hZUjJOcjVZfDA7O35R''@;'; put 'put ''JU5kWTIjNGNxaT48LiomX2k+O2kiQ0VgME4kNUomIzZqI2Q4ZClHPUhFXzB2fTJMdlpmJVZQMUpmSX1AUU4uK1lsfStwRUZrdWNPSFVoL3wiLG10TDVWLjY7dGtTZ1h+dW40alkuYSRyKFtgXW8zZVA1allBWCUvKzRKVV1SQUBbdkljdTBZY1ZTP0t7M2g4eCNNNG42cyVCYSs9OHJ2XT1oJFd5''@;'; put 'put ''eHMkNks6Mm9ta0goZURYZEE0IUBnaWx9IyFURCkibzBjVz4zUGArTWw8RVZ3UztIOVtjd1hvWXx5ZigiN1JOVUw6ZF9MJkdVVElabncpZilzJmEuLCE/UGVJbHl0fCtVZnRmfkNge1Y9ej8mc0VJcVlLUFhOKUVMOkkjal58eVNVdHZqKDtGdihfbUxHYG9JOCpYcixZT3tvSXFHXUU1Ojt5NEJF''@;'; put 'put ''MHpTWEo8MEorPSZGUV1neTZ4Q0VVUlRJUEIqfj1MPVRVQkBbdU8/JltIbk9ISihRTkljNkBeInhMcTQ+KVhGTHo1OV1Pdk14YERlKkYkYyluVHJQe3EsVDVkais4NXY/a1FHWDtxaiJ8STQ+cW9aMzYqIXtZSHRBI2glMHZgSjNtT31wKWM6Y3hKfDlCenMsTmY0RFtCUEIuPXJZOkhsdWBvTERz''@;'; put 'put ''c3IvR1hhNUlXdFZdLFNAMXQ8ZEY+Z1VdOzlfVHxsVy5gVUspTHNETkRxdnp2KkJgb05IemlKO3cud2RaQ29UajFiOCo2KVd2V1Q5UkoqQj4yQmU4PDJyaDRKSE9jYXw8ME1CV3hoO2R0R2VqX0lEPGNsSUs4LH03Nm0pWzExdzZTc0dkOiUxfWl2dGxhaFdWMFtdNit5bH5ONGFrIVIkb2RGP01j''@;'; put 'put ''aytiP19IOls1Nk1fWT1gWWs4e3UzQXRqNjM7YlJfaU4kNk9ic3hlVHlxWSpaQyx5QnAodng9R3dCaGZlXj0lUWJAUFV1TVBvaXtRS2hXODV5SXBQLygxUyhPUyZYV3dINjdDJixoViorNTJdSVQyUXsocjl5U1BYdHQhN0Y3cjdBTy5RWGVdbittSnF8VilNTnhFbjRXMWtRdTJEbXFpLHQkM0so''@;'; put 'put ''bTtqbilNaWtOcHNfdjhhJnMiK3l6WSlyWVEmQVMiTFJERE8sPEhjQlMiYnIjY18qdm18YyFGaHw2IlUkRy9QanxyQihRLnVyOVdNLy94Wyw2dmxyZX5oPGVzI0Imdj09Ky9jTzopKjI9Xlp9M0wlQiYqZTA+bUEjUT86YEtvTjlzSjd1UVFVZChOfDlMU1ZGfDhsdEJnekh6IXg3eS5sWUM1eGpH''@;'; put 'put ''bGFVQV9qU280RClFOEl+NCkxMHd3TDZJL1tUdy5xbE4sTTVFeixlNEdKZnNoPTFbMyVmbz1wVUJAXnR0dFpUXzk0czZQb106YSg1RE5OT2NHPil9O2J7YDF4UER3TTtsLEV5WHVPRUIqZU1FTjAzIWR1SlpJdVB0TihiRV5DVCZHXllVKHV8KjkrMSZiOm41ZCwkWSY+bnRfQ1tAKF49cn5peDBE''@;'; put 'put ''bCVLRnVzX2kuK0YjMms/Ik5udG5ROVBYP082WStUaUN+ZU97a3l6M1ZBRD9uWCU6PGw2bHcydkglNUdjdC5PPlJVcDduKUdAWWt4azBhXkgsaW0jTztoNiQobT0oY2QsdCEzaHg2fCl6TjglOX1KfG1PdDxuS2FTUG1YakQvSkMyWWpUKkJMNlBEYiFDMlMvdzwkQlZzN0EmQUY0VjpjUVpDQHRu''@;'; put 'put ''IU88dCs6KDouekwsJVFzMGljRkI1X0ckenYwJkU2Z0d5QW1dfilPPi9xKUtjSiEjbEdncWdqRGtASDRMJj4/P0dOVmx4elJeKTdsdCJuUSwhOERESWlrQDM2fExMYiNuKHNLSGR7fnAjKThRbUc1QzdPT3VZdUFXO3lYSXZHa08wdj1ybFZtOH5xUlpIWXkrSTEhQzNuPTApNzJ2Ukd3Sl5xLnZG''@;'; put 'put ''NXpEcE5beDQwXn0wd2ttcTFdeXY+OT1zKWJBMCMuWmF9V3cyT2A/TlAyWG1zdWo0UWNwUzpGaXk0PEs/dHgpPFVaQXoqRlUrVn5SY1kubVB7UWR4anFDdT1rLlUmSCpZcUdZOkMrN00mL3RrWkJGe30rT2JNayJfRl8wJVZgRnM6VzdBR3BjPEN1en1lNWpyNVUrWDszLHVYcWA3OVk2Q1crbXkr''@;'; put 'put ''L1ApSFhEP0hbN1YiR1hOa1o+e18rMnNSKjlkR1YlS2ROKkNJa3csMn4jIUpucVIkWHMiIT56ODFKTE86OFJUfX0vV3VWQmtRISg8bUpWKlhRciVrfGtIZjBaP1FlNFBIMnhyJih5Y0JWRiUkQlduXywrN35wSW58Y1Z3YHo6LDtJTzFkZFJ1K2Aybl8/bFFpLHhxW0IkbE96WEFPayN7K3g5RzpR''@;'; put 'put ''a1FfMERxRHcudSt4T1o0Uz8jUCFXPFJvOGBddWVZfi87LEVRJiVVeHRtZnJNbz9sRGRXPnV4Nz5NSnMkOF5Iejc2N2lEVVQwKUVnOnVRZ0ZsJGs2bVlCUEQkTHZfa3VnVE17RHQrTEJ6SWtFNzIheWJseF99JV8vbCNRL3RIVWA/MiZYQVlGJU5UTkNyIj4iamkxOHBQRFBPfksrRmsud2NteHZ2''@;'; put 'put ''M1ZbRCF6bnU1cUU2cT5TPnwqeEU3TGpRWWxrQHwiIVlQYG8laG4kK2pnNk17Rm9OODNlKSg5aC5SX0hNZSttSElEM3FNYzNMdW5gRlghcUZPPyUyPHZ0UE5IcCFvaVBMei9wT1AqWkVSdnFzOmlYRF9VaFFWQmpXelV9MGRPbU9NY1lMd3I+NSlxYlMjKTs7RU0lUVJeLD8rKnt1P3ouS0tHeHA7''@;'; put 'put ''NW5+UD9VYDphfnUreSgjQDRZSV8valhtYyV6b0ZAcWlqeD02a2ZFTUVkPDxOSHs/MW0ka1dqZGdkWSxgZD90XXMmOzIjUXo5OG1FYE9WUytQUHJPNSxtT3N+YjA0W2tNTG9KXk4vQSZOQW9faltqRXtNOGtrUGpAdi94Pk19ekYpcVldNCVRYjtQej1NbkBvNFEwOHVtOWprLzsxaiVSc08saFoy''@;'; put 'put ''cmBefDclXT1lJksxbHp6Ijc8YWl6JnY6fEtZK2p8amhNa3dWYiM6O2pOTzphUnUreT9XJjxkI3JVKmBxSlMveUxoPUd3VjFMaV0wdU0+ITxeIVleckA/PnlzW2cwX2UyUmFCQkFvRyY5ZTxpJTpJLlVaTXFzXWIsd2NYPltDcGhXLFlVVXtbamJaJVt4OFUvRGZ8aGFuT2NDfCZJMlp9KF02aSRV''@;'; put 'put ''WmdrS2s5RSt7QzV6SEl+cWBFZGI9fUxJXT5NOHxudUh8QE54PzNvVlthN2cxb00qbjFdKjZPaEAxXzJVSVBxanpwU3JaLk1eIjgxPXc0dWFOKE9qWG9BbUJ8W0ROQF84WW9ZfW8uPzY7KkMzbExFcXt7P2VZUGw3OjBZeEc/OjB2Z113anNmWmZkT1o6aW1CcCtQWURESX5GUnssaUBXS29nI2Fz''@;'; put 'put ''Y0BqWlNrb3o7JDIhdXNZMjZHWGpyPyFqflh3UV9NTCtDa35fSXZJPlBsLmVHO2x7NHZmSSF7PDBVLlFAUS9TX2EzWmo/UD5dWE89O11Pd2Mqbko3fTFMcnRrI0tsT3c4XWtrXT82dS4rOEpsKD46bVJDKEM0RU9KdCM0dUxETFlhZzlGPld8TGdkTiNkIXNQYHo3ZUcjVE1vI3FPUTw9MH43Knll''@;'; put 'put ''P0FUe28lTz1fRDF9VHxyImksNXlhPWRsQj8me2l3Smwmeiw+Z3t1SD5LQ3tRI2psRDRQUzk7MFYpQ1oqPz4+eEQ3RDhFYSVOKkJaZU5sQlJ0TkRjMXEra0V9VHZUXSJJT3R+SSpWPkZUcyEiMVVAcmdUR3MmM244XXV1a35iQyl0JlpgSDZlOVRZOVdsaGNPdFNDZS92RzdxO1Y/bnAlfl9lKm1j''@;'; put 'put ''UnpBZmZaKyFla2dQSzJBJE9KNXVVMF45czdRWStRMz1YbnVfeixIRyM+M0kjdCx3Rzo6VSZBUC9SISVXfWVQclJKYFJOUnhRNzF8T2BBQylfeE17VHZjPGF6NysmJGpzSUxxTGVKWGElQjV0IWEqbS5XJXlQfCF0S19QezIqQChYPmBDY2hSYU9TQDpWcTdNdmgzd3tNU3ZKX1RZYj4lPHZmZ3Bu''@;'; put 'put ''aGBPb3J5dmVldzAqZ0VSdl9VIk1mVE5rTiI2Wz5MMlVAN0shd3VGMjZVWkFNe3h2SE9XM3VBakpfND1uaEJ2blY0e3BPKDU9WkYqIVs5akZbdWlqayxhYkx2WF5EKlprVn1MY3dXSzVfRSwyZnxCMGY9SFYjdzt3UnRKOmlnd1c+KGZJUTRUIiZCSlNDNC5LLDZrQXpoYkkyZ2xpVEtVb09XPVZY''@;'; put 'put ''fVJHX0NsMDZib0oqOT4sJE81T3IxNGBxOE1XVzk0RUNoK1VfQnEoTV9sfUE0aU1rcCZZdDgsL3RVaiMjPHFNOXl9IXhbWyFQOC44RmI+Zm9aQlI2fHJPd3NgOi56Z3pLeGM6MnIiSzNqWj9UKVhecjw6Wj14N0E4YCRyW1RrYT4xMXkxZUslYGIzMkxBTWxhdWNqKXdQalJAVnNkcTJCQUNRRE5l''@;'; put 'put ''WE1PVHo9bzhvPyZNcl53YWhiZT9KViNCfXYqTUBZNSxKfUw8eE1IKy9PYzIpInJkNDBiPytQYjR6UWg+YXAmI0JkeFNZVFpkV1Zsen0pNlgyPDdvPSQlbC8sRnw7cnY4YDl2eFcjNURkXX4+OCx3JSEoSFZKdmhCZi5pYDNmKWRGQ3s3WElufSYoaVUzfStnSisyVDZNeF47OXh5KUFXdU5UZVBD''@;'; put 'put ''S2FmJjVbV1ticS8qUiJwWkNOeTFJaF42OEg2JmdPaU8uSUx6NkJLVlk3OitsJWU/MUtJcE9HK25PZk4qd2dQS0cydGw0UiVSdE9wPXxCbk4jfUp0YHlpZzpvfnc/fGUzRywqSjdIaUdMWF1xcWYuUlB0K2c+ejhSbjVTOHpLMG5AS1BoWkY5WW8mUypJLEtUVTlHODhGYUYyRD4pKXRzXzR3WUU1''@;'; put 'put ''ciRMKFdmMm9OJiliaG9wSkZFYHg0cHkucTs2WTJ4NWBxeFhIP3wifCsuQkNBc35ZUStWTWJGcD9oJH1XdzEkY0o7SUdKMl8jP0luOn0qOG1KeXV2SWFxQVRAKjowb3VvbE9fPXJpeUQlfjt8UWE+OkVnbT5YWFk6cWI2S29TZ0k/dENTPjxGOVpZTCVlblZXQCk1e0NHTlI0O304SHxRWU5WU20p''@;'; put 'put ''LyIoYlN0TDpNKj1IISZtaFIhJXd7VEBNS05KKnhUTlBdVVhPfDRCc30hRShGPSt5TCJdQUVRX2h0PU9xJm0hXTJGKlp4RCIhbj8hNGZFLkl9fDs0TkNdbFFpdVNlZnFyOC9rTig6YT5yRW0vOClbZTZANzk3SGp5ZEJvQ3suKSJzUzJUb1IsRzM5UldsMHQmPVsoNkhoOFpGOnhpTl9jQjpyOjpN''@;'; put 'put ''PG1HcG5kI2J3SFIjOjk2SGg3eWpMMlVERyxicHZRdmF1OiZZcSNdJnAualoodW87cCpFYXBzUFpzM3U1ei9xfCRgR19gZCZMMF4vPjhraUdKRGxdekokZCpEJFV3VGZEVi96fWtATXMuYW56PSIrVVY+V0smSjpIY1tJU1U1UjtfVkc+bzplMG5oND5leHJ8SS5KUm9OTn0+THxiQiMsTkorRkpP''@;'; put 'put ''Rz85eSQ5fDg3QHFnL2BSVl5JT3JRbFc+OkdqNDI1RjhRRlRIT1U0b3R+fmMyNEpMJEo+Y0ZNaHkjanpvWyFTUHs/Y0w0ZHpqfC9ZNGZQYWpnUWp8KHY7bUl3IT0wV01ZPkovNH5WTi9ecF9NQ2Rjb110Yz9SKGdSa0k6V0lFPXl6NlZlbD9lJlNpMl5fbSNROGRmbF1pejk4Wkp4Oj8lL1lSWT4w''@;'; put 'put ''T0olJkFEeUVKZX4rVk8mZlVrQVtgPkddcTtQQkZmQDA3RyhyYkJpVGkhTUdBTiYkNG9IVk5MeXpyMC4zTWJCeHB6Kk1oelA7amFiSyN+UUFAMXVMJmtAImFIKmRKIVQzJmUqX2M6QkRIcGQmMVd6QXd8TGZtKEtnKSsuaGdWW1MrfnIpQ1E6dEUkWzBDQVcvbHJgNm1abU5nQX11IWR5ZX5TS3tr''@;'; put 'put ''PE1rQFY5b1lfQDwkcildWjl5Ik9FSztBR0h5Ky5PSUU/JjAoR2cuTXc9Tk5YL3IsVXdXeH4jMjIyaTZZN3FWUVlSeHZlZzMpVnRseVo/bEs2fW1GV3xueH1DU0tUMkV8SWVpNTRrYUBtbGd6VXdtWGJHOV1femtsMWFUOkZuW3YwNlc+N1I2TyI3PWM+VDwvc1ZvdUx5eDkuXkoqZ1Z2JW50dFAs''@;'; put 'put ''dk5gWXdrSlp2PjJGTXJ8T3djSXNMb0QuMm9xTGlFVmFFMUYuaCpIO010X3tjJHhWUDU3bigvKUJlQTN3ZkJpW2JWdy9TQy97OG8yeFYsKFtsaWYiK0ohKzp2UUk+MjdJWUMqbTVFdXlfP3Qib3Z6fkxeMyJhM289MWgmbUp2eW5VZ3phWTokOFkrdXBmTjdLTURbS20sWzY1OmZMZVNSRW5Eek9n''@;'; put 'put ''UEg8PEdFfSFHKF1taj9uS305QUIwe3JHOE9EKXFoIyp0czJqZFI4Sk07KCM9djlWd0VkNlNeVkJ1bUtIMFR5R0xQNlVTN25JY09iWUMyeVRgXyxkSlV4NzBJRDd3X015MWZKZU5KaEJ+JllXWy5AMUUwX0o+JjkoJFRxQ2ldPGh2K1dPVXYlKjdkNjs2aFl7e0dGWDNjbCJXVG5OeFVYS0dvZnsr''@;'; put 'put ''d3A3PDYuKWJRUmh+SWlwbGdRVjtwVDtmOHgpLylFUkN9UTpNYkVkfTdpdkE4MCY2eyFHMyQ7XW97VjdfazssUG9CJjwzViloLypTWDZHfmVnJHpBVi9YTn1tKEtkPnomK1I7O3N8RnFwKE5we0hjJFlwcUpZR2xaKHFfaWRHcSxZQThLdTZRMEphP3srOUhbNndxWnJVWjNwQDtjc3BsdWBpUSpn''@;'; put 'put ''flQ3Jig1X3k3OXZxRFhkPV4jO10vOFYvPixWQjVUXmNWV09CbENsL2NmYjp2V3x0VkRGOVBjUlpAXyN6RE1NKktNOSM2Rl1QU29UMlJ8LzZ2ajlya3dgVCEwOjRkZjBQWj9oJCNIeE4jZ2FGbUgjYjE4OnlxZ0luK0ZoL25BKmhSW10kcnVGQCw3TC5LPGk+V2suX211ZjpYTXwwNXFQIzZ5c01L''@;'; put 'put ''TXhrNUB0OjwqTi5TO1ksRV58XVBfeGxFRV5MV2hiWGdHSkxNV0hgcnk6TFJwPTVQPndHLjJ4N31PQGYqVm1kVXB0SEgxeDd9T1EjVTVHYU1Zd2JoPl52IkNIISUrdjR2RCZXS1p3Ql5dODMiK3tIQ244Ni88a1FhUGBsPTA6KyE4fi8oWTdSblJVb3YzW1p0U0FyKl9dY2NZK013ZkZLMHFMQ3tR''@;'; put 'put ''ZXtIKCM6OXg+a1N2QmhzWW0jW1YwQEJNWFh8WFZYNVF3VzpDZ0FpQE5RblgyZExuSGo5NG1AVjRdfGhXdGhwPzxWdGRBJHBwcUNfPlRYQEBTNWxIb3xIbj86YzNEYEVxRFswLlJSdlQ1P3JiYEZhc3lUNGA8dXJKbi9idiU/Rz5QbFNUZWRJbkBER2YqSmVEbVpjKUJ6NFJlKHN7KlElWmpLa2BI''@;'; put 'put ''L3JzLGB7UiZ8VytAVnRjO2VHcnM6aXo+JkImQj4/OkxrKio/LFJScWBmeEl3NUlbRUNWYyVoLlFiZSZbekczc0BnXyhlOCVvey5LZSgjLD5yU0YpcUV2OyRGeDw1bDgkZnNZeHVqO21QZm83ZWdAVj5RXV1KSD9WWztlLDU0dy9bWnNeTllgO2IyNmJAOF8penFOe24iOSNzcHk2K0RLcnkvcXZ1''@;'; put 'put ''XnZ1K0QzYHVediJDZkd8cVBAanNhK0NiOF4oSzovNWVYP09GcS9US2U1R2drPj14QSUrUiVgSHhyZ0JCLiVjQk50W1FVRWksa0VeeTZWfmk4WUYqIXVuUXcpbGdfXyE5XyE/REFpUEdGZT51UjdMM1FscmFZSmomOm4oTkAiMlFuL2J2S1VfYF9XIU19Z1omNUx+THVpcl9ARTpGIkY7ViMoVyNt''@;'; put 'put ''My84SWh6X1pGZnR8Mzl6bXhianRfJilFbWp2b3FJWGRTOCleKU4vdkVeeS9JPzltKCJIQSl0UDl4Ry5xMT1kbThAUEdsJmhvWXVDRUhtK0IhWjYoUzEpO3dlPnpJQTguRzlyZXZvKnFrSjh4SUBxcHJOKTlwa0QyM0hyKz5eZTA2MXpKfCtjVVQyW114bjl4fTZMZGZoLzBXMmNvaGk0cVM6NUhv''@;'; put 'put ''d2hSeiJkfVtKS2cmKF83XTNaSWAxKEpHWSE0Wi9DSlljPlRUdkx3SG5fKiNSRDZAUV0lVS9IJT9HL0lJS3hXamtickBLZXY/QVBPZVd+RCY+Lj9fN1Q8KTsmTSlhMmxIRnMyUzIqTUNBZUBMWmciRW45QlZFWC9XZnZVR3lUYjJ8a3grKTdKYEI4RHg3TnByUHpGJm4qZSxNb0lWdHFNeEg9TW9D''@;'; put 'put ''WFRSKzNhbnY+ajlMK0J5VF9dOi43TT1hMSV1dXJgXiElb0tKJkxyJWsla1gkUlc5Qk5WNig8ZFRiaVEzL2RhWCYsWlVjYTV+cnRdUmUjcW1RMy8+YlU+fWY9OG5PfUc4eXQmI1lIcHcoO3dXX2ZkbFFUfEFdWXkjXUVDXjNUTV0yMkVxZm8wKGRvbERVIXFfWCZKTXJocmd3ZD1RODw4cmQlPnF0''@;'; put 'put ''Nm4kQk5yaHJBVDcjcDdwR2MvNTtjOSZaM1UyKTpEUSZ2X31keE05cjxsVnI5LlI7NUlAcW1gU0U5cE53LmIvZHlacWFWRkw4JGVee0Zfb3tucWJjfjtCKClpeFNSPEdXKzQvP2RNQjhSKm1vWmBgUGlwKzE6S05tPGBkY2Z7SHRYNl8/K101ZUxueEJ9N3kuYmgoUi8/P3poOGFtR2BWP2Z5M15F''@;'; put 'put ''eTZ9dC8pOEJUI1FmYkI4OUVtLjgmYnQjXWhieF88WENxVEBBJjlFKXVBZ0V8cFJvZU0zajhmZFRZen0xUDBgMllzRURgWUtJQjMlQF42akxobHd3WShHKSZ9TUNoO09iOEBbd3E5YE9nTi5oRDVzW3QvKHRLMHpOYkJEYVApXyRhXmRdWk4/MiNjMWZ3bjluR18zQlM1Q0NsWmFOP1BPPEVOKzow''@;'; put 'put ''SE5pV35QYjVJYkBmV1coUG04Lk9uOT5gQ24kUVg8V2dYKGBbcCo1ZHhnJkR2OSZIbjRafFRYLm52QH0vdGwxX29YRW5+fX5kZkN4UW1UTX5HOjlIX2h2MWBXQF9OYlMxWix1JkFlP2NlTmFuYytvcH0/alZxTGdFRnJPTml4YmI5fGxmSGIxcS9rLzAscX5XbEo+bG44PW9hZD5aPmVIMix3OGRe''@;'; put 'put ''bXV1PnpJPiZmNl0+RTFfJG9IcSlkInAiTHJEXSN1MDl6UmtQc05qQnc/WCE4Qjp7ZVpUYVhnQj5TZEwuJCtNPjBFQWtAPDAuLyR8OCtpcz0rNEs0PE5ydmNJfEMuZEwjKz1CbE8yNU03bTZBfTk1SWZod1JiV0IxN21SPmBrYWVZXi8ySTZzUWphSz0rMjQ4Zk9yeCpKRVo8S0JtTyNufiYiVzMr''@;'; put 'put ''JEhQWm14JjJkcWY/eFQ4cDhCWF5wQ1BuL2QqL2szfT5Ca0wmVXpHel8sU0Q1U0l7WmJwXkd3Oks2OEM+c0NjJXYhXi5IVTZNVXY4YzcxQHpmJT5jWUI4JmpPIk9FVUx6cDAqLyM4S2RyJUtgTmNLPi9wZUl2bj51czZIP2MqaCNwOSkhLCpbPG15YGNmIURRI1NfV25geWRnTUVOSj5ZVmAqJVFH''@;'; put 'put ''MD1oS2k/XVdbbFFHWHdDPTlJRkJAOyE0S2JHVChqaFhbJHY0WTghcEwjLG8pbCY4dy5NLFAvL1UpKSp1OUIuT3clclRlPTFMbEx1RjIkcVVCTk0xcTpIWGwkQHQ0XjxKRWdxaWksO1hReixrWjVfZHVVfFZCQC8kWmAoZmU7RDh1M09JdiVMYSJweHNfa0A1M31FJFtnUVd8VD92NnRRQi58bHJb''@;'; put 'put ''Pj15UGFLc0hUeHs6ej1EJl0mR2ZtNnRGMERyLDA6Ll48JC5FJTEhYW5aQUVFd35BQ3w6OjsxPWYocjVTPnhmJnBQYEVwUC4pajBlP1BaVzohc0VTPz8iVEFNYFR6Qkx8ckZOR3VGQ1kxOGM9Vi4pVjw6VTJZTTdLW3QvXzR5S1cxRn47azFJKDFXSTMyTWdgeGBnSV9ob0g1L0l3PEovJnxGQith''@;'; put 'put ''YSZgNTFmQX52Tk53TEFsLEh6MUo+ZF4+WTZXMTdlZWlHa1NtYWQvZkdzSiRIez0mQjhWfE01NEx3WnhJS1ZSdS9nRjFvOmFedmtuP3U/K19sRytVb3NBbXEoMGM/RD85cDoxW3NUcHQlLFFwVDclOXlJX3oyQm5OTTVjRk5FYD9pR259WWl0PTw8I1VKLldLTz1xOjtXcCRPPWh1OncuNVcscmor''@;'; put 'put ''WiI8KU94Xk0oRDpnLjwoOCU5MXM+UmQucXddJktAYDgvRDxPKyZtQCVVa3B3SGlzdGUkMDxZQFNDY2dWaEwrZWx6IntQJFFLbXtUZExpazZAaEQ3bnpmLkpuIUAxTGI/RD5rTypCLFhJPndVQ19NM3w7SCkqcVA8LGVtfWgzKlYkKVorK15gKGZRZF1GJjROOnskez9CKE4hRStWaVpzb1djdXM0''@;'; put 'put ''KEQmeCpWUTIuKUZOKUVtRDd4Pk9ZKztdPEx1WnwuRmM9fGsqNVlqRnxFVSl4e3lRZnRfMDN2LCJue1Y7LypGRlZVKSpDUXoyQGVDKiFncS4obmMxKCRsI05rQC4zKEImRih9JF9MfE5rTm55VDdnaXNRT0NxaEpfVEBPfXs5TEVuZCE7NnNHVnhLI01yW2t7JVtfakZlc2UkNElCOFsoJSx+cWVa''@;'; put 'put ''JHBGQV5iNUwwZX43VXIrdSxJbyZqdTk2V2BJZUhJPGA+Z2prUkUmVnI9LDI4ITpZYTBLK2h1WiYwUGlweEVQfj0sXmxzbnw1L2dHXUxrTl9uISlWZG0wYEgqQW5QJiVyQlZnJiorKmlKKEpNaz5II15TNDU3KyxjLFNHIzY0ZXM5fWRUbi40P1tXZyZGQD4lOmhmfmlHNywjNDRhR0g9aihfenQ8''@;'; put 'put ''PFBDV3FFd3p9Mm1gZ30rR2JNaGZiOUIhTzE/OEJzJkhCKEg1Yz51NiR7Mnh5ImtuTnAuZ1YpeWtQVytFJWNgci9IcTx6cGZ8NjNUJCguZG9rPmBCRmQmVS9EPikkOG1hSV18KChiMSNwOUZINjI1QT1vJnZoTndudzs9RChhfjAyVDR1NnVAak9AVmNHTUE9amlgNHVvR1NJSEAhdE0+Yl9NK21e''@;'; put 'put ''WT4qXklTWF5Fdjc5IUxQNXIwTzJtRFVnWmBUL3BmcjFWKH10WXFPRFlqd3F8cTlHc3I4MVJpVFN1aEBLPntHRWFeX20wM304ckpDNFA6czhbQ2olQyZrcGI4Ul5oMXF0YjBZd1lPKDpAQnh8VytBMm0xVnJZPWcuRiVFSlEmTVRdWyhQdFdMOyxjL2RrNVg1eyZ2UFRlRSVaR2N9L0xCVnUmSW8s''@;'; put 'put ''e1dkMSRIS3Z9RCtQQWxxRFVuNU5EUCpEPFcmKUpDWnJVZDwiWGpoK15kKDZ7Vy9GVlk9bSQ+PkBMVmgiRl5kRD5PVG9xc1tdJWFTI0MyJVJ5SitfOyt9OGk2MEtufDsxZmBjbVsrODJUaDorSGVUWm15PEduW0ZdWi5SMSl9Qk4mUjpBcWIoeCNMRUIhKkRsfEZHNFE6bihOR315dmZ8YWhUNmth''@;'; put 'put ''fCRvaDVYaEtFJTtRZXxQPDplMml9eiV5a3VjOEImYkVWQ1B8YChgQTE+PHsxVE9yQ3Z2OUBySkE9eyJsfjZrXSZ0U2grPFQwTHhEaDZfc0d0Vks9NTVMP2syU25fWSQkaU5wcjs+dlRgdzJaSHFLbnZwNF0oeShCcSpZJmY0OCxHdDFqS2dAfUs8eX1iOksvakpHTEpZUzpdS104LElPJjJHYUde''@;'; put 'put ''XjI3JmZAfV4+Yk1mKEd+YnF+cztlb2IpUiRWYjR9I3JbOTZVKCFzfHxySk58Xz4vVldpRVJjcWw0QHM1YHE/ckVQaEFrMSEzJnFfQ1YiNl0jZElneEdEIVY0ei9KKCwpRl5sNi90dV19M2BCISh+fH1hfEVjLH4kVC5pJl9fRn5LYyEvQ2N8VVs2KjY5ZVZmJGJzTlI3VEs6cmNhI318Yl0jaSVR''@;'; put 'put ''REowUlN+UXtBRzJRTSFPRGhxZXAvOTkpPGt8I2xbYGlHaCphay5yfEFgRmtec3dzSmgmPmhXQiRYND5RTFtNQkNIKz4iQmJufj51NyVzVFpJVkpjcylYOEhMOm8rb1M0Ii8iRDM+OU15azM1Tl8lNlRFaH5Je2NSPTtZMjkyamgydj9AR35Nez40PTtkPzJeeStgW007Pi59cn5mNmA0TF9LaCM7''@;'; put 'put ''PHUmUzw/WCkuKl17ViQ8OCRpV1Y2KDBKUDtbcDZSInZxfjh9emkvdGF9JntRXWVheTEoMHhuSThgRjoqdUhXTEtkR31fTGQ0aEI7QmF5SH5gV008UTwoKWwxaCJMfmY2fTVIUkwqc2RiQTljcy5wfXNSWmgyfnk+UWxbUH1jUno5RShRPVZ8XVttOz87UTI5Mm5oLHNZRml9PlshcG1XNX1lfCM+''@;'; put 'put ''KXN7a2dOZ257XSpAYW5zMTQxUFZ5U3wjVlsqIl9zdX5gcXwjRFtiJFVXIn1SWXJXOmVUYUNIMVleLEF4MGh8RVBUVldWfCNJNj50fiNmXWVMTCFKImZfemUlRDUrPnNvP3RFJF96ZFVOWGBlQH1HKDgpfiRkVCNbPD8qLChST3ZpL3ppRzBAMVNkUjc/IUx2VkgoUjdZZC8/ZmxSRTA+VVhtKkh2''@;'; put 'put ''OCIjTGl0akRKI1toNCVzWSQoUnFqfHxFP3lrUj19KzBvX0hqcHU8UjU+W3Z0NzZxL10rb0kmdGFsUTFEWWdyMWghSD4uN2UrW2EhOW8uajtvI2N0PEFiVUVhUjhna0dqLyM3b0ltWGFsUTF5PTE6KlRfOyM7YXkvWDdue0lDVlhuPFV5R0J4YiN+dC5JYFVLMyFWfmhxMjlDUGl3Q35uZERuVyJE''@;'; put 'put ''dGA2Rzl2QEkrXTZHdXM1OUVIc0plIVtqOXBMSGVRX0RpL3l8WkRzXz48YjZsKl98Nmd8I1FpIWc+MHMvcilwfkI8ZiUkOF00djhrRm45Tkk5L0drUTErckkwTGdRMVNIPWA6aH5CUnsuNFlFUGlaKjh9JiEjNX5DZmZIRXpXQzdhJVlnP1VzeHBVaEYuTFdSZUZHLEZNUS99Q0h5dD82R1JmVTM1''@;'; put 'put ''UlpaQjkxYSxEPW9XT0RuUDgxTElAOUdqW0ZOcy5Ccld4P1Q5dXBVY2tZK3AxaEEmKFlbKDlgTk0mZVE/d3NHWERNJmVRZyxrRT0oUUY5Z01lKSVabDpgS3tmJVBQdlJZRFNxOWckIkAoPShASlhCaTN2VSImcV9mJUhQalgudDIsSDpUUWkzYzlWM1VxOWdaelMkcHBJXTdYe3RwJSRNZlFZLFk3''@;'; put 'put ''YFBKYmRYWzJdN2c+MWYzYzhqMVt+OVgvKVM/YmV7TW0sbG5WfmErZEZabmJja1RnPmZRMShTdjdGWmFEZVEkRFYsKFRQWVNaSDVYSndNYWFxZndEJlVnVlJjKXMxQi5VZ1ZJWChUWzhiNDs7LmpnWkx5RmhRMSUjIVt+OThbW1I1VWZQY002JGtdODhWaCQ0bHA7WnoxKDM5NSJDTlF3d1hITSwp''@;'; put 'put ''W0owcXRWRVtoKkJtcFNVQSF4RGJtYTRgODIsVGE8b3NJIVZ5aj9vZHdlTU9FdkcjLmRZMkZ+ej1MUUplUUksKFtaUWZReUR8MFpZcGFbdG9VeylidjFhQmRvVSFNZlFFLCZreVZRfWxWP308WUJ9cDQlWjY1VltLNEd3OWo/fTo5SEwpVmtNcmNqUUA/W0wxViNMWlh9YkUjVUQmUndTXm40O0dt''@;'; put 'put ''JHpUKnB3Iy9SVDAxP0dRI2pHd2VIZFM/bFc5VzpVbCt7S2JjOGZoO2dnNl1mR2NNIVZYMm4zaClEdHswOilYP3hEQ3R9ajFIZ2wmIys6X29iUEx6NlNIJURkSmdUSEY7XVphIy5lTltZO2xuQGhDbUJYalBNQWB5RyRqdS9ibDltWlMhUFBIdUMrSmZAd3tXYXIqRzRZP0hFUFsoanRLNj5SSGl7''@;'; put 'put ''fTtZaXpVJCtuR1M8aVdrOGhESHs0TU9LP30kOjRPR3ldWVlvKVRQaFl+LipRR3Q3b2diPlhiRS5TZCUyNmxYQzFWW2cyMis2QlExJHVQN18ya2xKTGZCVTh6WjFoN0tSLzFMcj82WyZ7VDFRRFZma1lrVjdILEV0PFcwNlpeeXF1Sk85eXdeOkIlJWxOUXZJKWhxNV95dXpaM0I6fWN9ezlYSFR7''@;'; put 'put ''KCkzRWhFTj9TOXV1YllISGFhclBtRk02cFpXWXhEKy88ZlZWeSNDVy9OXT06cDlnTGR5NHRPYWx0TzFrdG5IbDJwQC5RUGtIISl+NmI6KWNDJkFldEkscSklNCZHSDhmO0MlZkFnXWBjMSJDOkYmPSNEODtdaDA2N2NeS3dGeCIhNUB1JERFUiRgVEZdOFZpbylZRlM+fEx7PWY3WUksM0J7MHpR''@;'; put 'put ''Um14YlUuMCtnKDc2SHpxQXYxZEt4Vns2cHhyJiM/XS9iK2AxWzs+LHAmWywzKnhDXyxhPk03R0VzUk9gfFlLbDoyMXlIfHEyTjBdLyxRbEhfMmNAPSh8SzJEPk5yaGkpdUtnfkJEYFJeWy9WdGt7KVgvMmhUQThvb0ZoQEZmcHczKEI3Nk9ucVFiOkBoXWUkN0NQbTc2UV9fJXVFcXwiZ1B7USxg''@;'; put 'put ''Wz9dUkBnW2giR1hab3grVjl5NzdbKEdvTjBUd3hTKSRFZUE8R25QX2tMKWV7aFQpeHF+T3B3YXUxfTJjLmU3PlU3TlZjMTo3aVBNRGJhU1NZVn1xXnNoamJxVVc6YUpgIVlzOiYmcXA0JSJRWntsLFs7Y058aDVxWWcxajA2U31bezEkZUoiZHw+dzEqcVEscjtIcURNM1QlPFkyUWwqV1gybCh3''@;'; put 'put ''PUc7NWY5Uzl9SWl7e1E2eVdkOlJ8NixEcUJhUVQvc0NYS2l3VDxEMlpKcXNobGdLOElgVHBCcWxicj58YSxqaj5tVm5WRD4lNCJeKi55blM1OU9tQ1cyOHJLUC9fR3NKTyojUV8rTk1feVlyZilqcHl4U1hJdyssI1Ffdkk/b258X2FeL1Z0b3txKTJUVDJ+ZEc3Q0wiRSglQjE/XU1wK2BGKG5S''@;'; put 'put ''fT1aXX1HN1JMJiRKdFNLQmF8QmBaZ1l3QThCai47TFk9ZzooeksoRTdbVEtAezMkWHszOmppYjFHdnpzcG1mM2tOSiZNckxrRWp5dmxzeWFFYC4yOFMwNmdnT0A3KGRLaGRgQT5yczxjSX5AbjlnZ2lfaltlPTpwJSRRRWshO1ZqYnc7bzc7OD9lZDB3bFk3b149U1UlT3JaYU94eHNMW09aTl9s''@;'; put 'put ''LDQ4Ozh5RjA6aD4lJk1iKnt1Ykw+YEVBZSp7KyxyJlcjJV1gI1JxeGBfeWdedF5CaWFtPDpsI35kd3hpcFNoREc4OiNGO20oYSk0IUQscUVkU3lUenB8ZWA+ZWg8ZTdzI2JuNSxwe1d8PlkqPzQ5Tj5GdyNtbkh9R0ArSittIUFqIUxCN2E2ZHE0JU1iRnVJTEFWRmUsN1VpX193dkdfPlUlZUNp''@;'; put 'put ''TUBfciVDVUl1SWx1cm9kSXB6TGJtNURXJTNHSX5iNVU3Zj1AOns0eS44RWxMOzpiUW4rX3BRbyN6Rnh2SGJFJmZmMDZ4QVtlQDtxKCxjWSxKLiNVcCMoeDdDWiY/SVdLU311SzpJYWRxZjEkX0t5LGt3WXtoZTsySHtXLiY4YShEO2h5Vj5IMiJeKDh9R0VHVXExNndheVh6aD9DU2VgQXApeD1i''@;'; put 'put ''VUc+aDgvOCxMRS9mPEI+XzksTH1Oc3c/cXhNUHlXYUdAaVQzOWU3YjUuK1kmbSZCfDY5MmVgJS5VRXVCSypIXyZoTXxrNlFEe3x0R250JiJkMipCKHtaV2IwLFI7MlArYGZbNU06cDIqKjNXdVFdUEswNjBHSnFnY1VUPigzPG45T3hZKW9uS3E5Wj5mdzswKn5kfE1GcVM5MGA0dUdleD9RZjYk''@;'; put 'put ''SnhnciF8R2twaEc5ViNqUkY0T2IrO0x4IVhnckJUIUdDRVpKUjBRSSVxWWp9L0tlX0BfNz43T2tkPm13aHBIeWJxSzJFaWtZS3d8Z2ZORXJRRFVleFt8SztjYWhuO3o8ejlKN2hwU2ghRi9QbnMkYyE9TVhnXiQ2blJyN3F8P2VOOHdsWDBKfWhzbS45cWBtbjI2aHhbL2VHPiE9Yl5xfHxHN1po''@;'; put 'put ''JjFjeWF9V35xbWZuOEUrbDcvb1huai97I3BOJUV4NVY+bT5WZ2lUS3kpdVlCL04wQGpHb1ozVVI3QzNTcXNbLjdYWlB7RkI1UU13OSUrY0Z+IT1UO3hHb3BnY0NYP3FGWUhIRUQ/N3RqfDh8XjYlKVNAMCs7bzl8R1opfHRiSUc/ZDF9L05sY0FDPl9kKUQiaypiIyU0JiVHb2JGOFFsMFppbER0''@;'; put 'put ''S1BPYDZAaVRSYkkuRnlhPilEVi8uR3hgQlZHcSxXfWUlV0tMRk52VyFGdVEyXUtrJDYsaXI3JltwOEheWzxacU5uSV9PMUtxSDZVOT80VispMXZ9NXcuSnl9JUFBW1BoPFtyU0EzWCZtRz03ZlJ2XzppTW41fm45flVScU1IISJbJnxjfWt8SmZ7R3hIfEJxQWVNd2UxbHlrcFFrfWYqaEdgOHs4''@;'; put 'put ''eWNeWHRRfTsmWTRzZy83WnFuTX4vcWVxe3x4JWRMZTB7bl13Myo2KlYsMl86IjhMXkY8Sl8kVT1nNmpiKHx4JDZPJTV4cDJEOChWNkBsPyYlQTpEVm1KaXU2VmxiJDtxT2UsbzhwKllwXXRLZ0EuYlFYPkpFPC5KVCpxfCNEJkFlcixBU1NYNDxjSTlqMDZ3L15LdUxORzRaNVVSakVST3tAeWA4''@;'; put 'put ''LlopKSwuMEI9a2ZlTitnUW5de2RUWSg1WXtDQHouNENQNjk/aDtXSilUcEBeVD9iP3pnYjgjfURyLHhPejlLMiFibFQmRiEwdld9emdibz11U1dXOzo4WSYycUB2UypDK1Q7Ol5UcUBAYFE/ZlY7OjFOQjI+Q2csO2JBU0tGITBUWTE5dzw5cSNgflI7fWg5PkM8YmJSZkdzRCUoZmMhZGgve3hP''@;'; put 'put ''RDs/OWVlMEZndFUzNDN2b2ZeTj0ycH57K202SFgyenJJTSl+QF5XJmdlUjxiMlFZSGYlN0JtWUpCTEdmcTUpaj90YHZ+SS5AQH5ASDZiNl40OXF5OSJ1PSFIaDREJlUwI0JaZlBTP1owK2VhKWFEQkFiP1c6NklVMy8rYGFwRzxvPjE7dChxTGwwdl5WalBJP1RtK2VHKSF8O2VfXVVeZCxDYDEw''@;'; put 'put ''Qlk1MFlCWTkzZ05KQDF3I0Bvb1p0akk6UjN3I3t6fXolWXJYOXU7Yj5JJERwYj5JSURmYT8xQDE5ZD8/dS80Py5wVFBTYEhOeGlDWls1WGo7UENBQDE0OG8lJUR2NytbfWpDTlVYdEdxemZgZmUiTnV2Jk5YMDV2Ik08cjFudkA7ckRkbnhoKC9ZVFdQTyNRbyVzMFlgUD5id15fdFV9ekpBX3JW''@;'; put 'put ''bl5FcDpCNDt6RnVAJkFPcEBDP0o0Vj1eWSVNX3A1N08yP2JVSEF6WkxKP3NvZkppOTx1YE8ocnNJXUFBTjhXeyt+NUM1NXF7My94dXo7dl9NIjQpWkcseyx1JSM8S28iQUYoTE8xRSJKdk5LNWh+b24/eitabHV1QCNyT01CLFhMZ3I/YiIpV0RgMytDLFR1eDFkP2JGYn16MlpGWUI6UCx7LHlp''@;'; put 'put ''e3FWSChSJForW0w/clsseCtETH1EOXY6XlslTlN6JXZuKlhvP1ZPUmh8alRCdGBhUW97cWZKQix1bXNqZ0cjNHpBKUtxVnRFQU5FbXNqPy8jZ35OKjRvYjlMOkYiWldjdGo/L0cxQDFVaXFWb0Q5M143O3VkRE1KMiIofVZ7SilyNlhaZFIqLnhCTk9eaTtffld3N3R4Zmd5Qi9JQ0hPR2AyMHlA''@;'; put 'put ''d0AoN2gsc2k2PEV1V19ITk49P1ZCMX5rQUEwWX17S0xYNnJtRUIsTHNYaHVqRldEQ3ZARmMqfFpRQmFLcyVEMEdvcndOZjB3b01dR21bW2ZyIWVBR2RlKm5aWHtdflJudXg7QDFMUFhPOi5rdypUQWJAdyFldWNvYilHTU0hMG89Mzw+cnNqbnRdNDlxLiR2U1U0VU59XSIhNUlMd2Qvemc8WDBu''@;'; put 'put ''P3pbWXtWTU1VcVdKJiMzIXJtRk1+Tmp7P086cmpAKHojeyZLYHMwR3JqIWMuWy59I11bZ0AxX2A4W1hKYUUyOnJwWCVrc25eOz88Tih3eER1YFZkb0xVM2hFJTNdTzhLITBHWEp+cSRPODxUQWI8WWlXcUNHd1VlTis8YilHU0ZnLC98fStCNWpYPSEvTTlAOW5HdE99fStCNVFYblhgTjc2cTJm''@;'; put 'put ''RnxHPkU8bmhjKFphXWdVPWxRfkoxPjhyUHs0Sj5DXlZGTCFUJk4kKDJEditOeiFMSnp7e3V3bTpfdkJXWTV4ZGZld31xT3QkQykxWDh1WU8xWzEzezQkPz8qNE9rLiVEVF1Sakp4Qmx0QS5PSUlsMlErZDNMLCltZ2VZcHUyJjNLUFFtSjlGM3ciX1UpdmV4ZDdYO3dOOXdjUjkqWXcydm0iQ0lI''@;'; put 'put ''Pm5qUz4rVU0vQWVnQWYzI1dzTzh0KCNkUCJaRnJqZWN3L25dMjdoXUBBP3pjWERZTzcuKFs+YkooV3JqZWMuWz1IJV5gZXJIbF4zd3ssOTx3WlAjRCt+bX5vWn16PHI2bU9uJT1NKVI2W2MvK2RCKytkPlBae196fFdIViJ5IWVzYTwqQkppP3RgZFptVXVWR1pRdXssYjRAb0F9QShXaH1FQDFt''@;'; put 'put ''QiRbb0cuOjl2KFV0RThZZlBuK1RQNWtuLG5EeVdgTklkKnhQaiFbYGZ6SUsoWHZDdlYzcW90aj15SmJIMUZeeksxTC5AcTRVPSUoS3Y6PXs5Sk0qRkMrRC4oeyxMeV4lOUMqK1BAJnl7UFgkLlRZW1l3UWhDR2NFWF1IaH1kNzhWTSlJaT1lYTpXXjFiWDBTNXg+KyRWTXJiYSpBNVkxdjpgPk5u''@;'; put 'put ''KnNXPygpNT4jWyE3OW12czY3PXs+VTp0IjVHaF53eShnRWJCa09xQGd0LjNLaEgjVmYpLDlENl5hbFNeRWFiO0I9Z3U4fHshKVFiQzRLZlZEMX5TaHx5SEkmeD9PVnY6PDYyZEAxdTpAb318Lls0UmpEQDEqYDhbKH0kW2JdfSt8M0hYdjQ0W2slOXspKX5ANFMifXdoVFJRQH1JRyEkXz5KMXRT''@;'; put 'put ''KGhQWEk1dHR2TDxCRno0dUpZaTxWRDFobTNJX1ZvI3hZdik3WCJqJm1AJkE8aG58Xzp6T1oiSXpSZFNbPyJIS3F+SXYyJVE7Q0dMXW56UXxsV2BdX2NTLD9XVHtLT0kjdHdDWFp3NTdFa1F7T3xAflI7TSVnelNUe2N5ZUJAb1g6WS5zNmw8RFl9XSZHLkZieTE0Xi5vVjQvdk5yai9iLlshYDZi''@;'; put 'put ''QDJdT01HKm9FT2AocjZsSGk5UkpUSmwibkkoUk4raS9OWT5QYURtKypJKnJzaisuRl9nRTpAO1QrbnFieyttS0Q1ai5lVFdiIWJsXmxGT0VjVjAjUldnOEZjOUJAMW5kP28mfmlhaH5Ad2BRXjt5QXd3aUMwfHY4bDRnak0zfi9dTi98R1ducD9aS25oOVU0NGU+UWhrRU9LP3NvOk1VM2hFZFZN''@;'; put 'put ''M1dYV1c5VlIvfStPS0M1RVJ9emRVSzV2X19oQDJ0Tm9HITBOalJHVWBfelJZfDRGXU1bNHssOkwoKFIrTmgvakM1TnUyPmIyQGdZTnVEe1JHclJ8O3I2c0BVM0YwZ05+OUt+SylIU1k2enlVVzl+YnM4fntuQHp9VERZdD4vJjo7X3p9VFN1WSY7Yls/a3dOYj96LlRHWUVKUj9+RilTJU1WS2t6''@;'; put 'put ''Z2ImYnM+SEgkIWJ+amBGSz4uVytUYFV6IXEscGl3ZWUpdTNURlpiZj9iZ0B+QFRLP21TaTkzIUspRzksOCQ3JCN6YGF9eEUsXnNbdUNIJSphPDlbdTt1T1Yrc2JEMF0pI2B3ek1WWG17WCFlNzlxZWpGTj5peW5lZkZtWExeIiFuXVQ1RFF3MUAxZTovYV5ab2owTj5Fd1BwLnssWlU1ZztZIks0''@;'; put 'put ''aHB+WH5zfXcofkBUKl5xP3IyLHssYSVvJTd6QDFVam9YZlh+PlZkYUppOSFLNnJhJCI+VmQvTSVnRFNTZFJiSzpAX3Z6JGtZa1tbQ01vKzBrTlt1el47JiZ9On1ZMClAJD97dlshWVI3eVM4RjpzazRpPiJ9cmoxbilbWTJwSX45YitWUjRgX35xLmR8QnVPUkZKN35fQ1Z4SFY2eSJmY0xqc2ha''@;'; put 'put ''LCUhfFowVDRCQjBjIV9+UnF5MFV6WzxpQ34hMzpTaGcmSEkpUTlBZmgoNmomX21QVGA+QEZ1KXxYbyUpPX1JTSM3aUhXXWUzS2N6Zld8JTlHWG4xcEZUfWpBVSNyX1gpUHROMGZBJEB2SSV4XXk0Rn1raUohVDM3ekUjUFplRCIrfjFHOF9XOk5tcGx7K0RMKlNDYzNCciZvekAxI2E7byladGp5''@;'; put 'put ''RSg0bCJUUyx1VSFZfE08cEYmOyJYZGhIczhtdH1eczpVZEc+aldgbTsldVZxTEcqdjd2aENjfF9ueEZuVyszdGV+cl12fSMoKEoiIX47fC54UkxseU1PPmomaF4sUUJsPmxVfnM6MjA4aXZBclpxPDtXIStESX1KXXg0KmRLOjkraWZLTFk2M05sLlNdant0PjtSbCFsfH4oOzsiNCF6eH5wX2t0''@;'; put 'put ''eVE3UjVTaHxxW2o2c34/fHJ3eUY0UTMoI0lpaCt5bCFZcVY2UHhALG8qbCZOWzhtUnIiSTRUSHpUPCZ9JGJ8IyMoNEJ9PGVdaTMyOzFzO3x4SDMqLFszLiJOZkBKJCJLMUReRUt7djIyPlRYVVJTfjlyKnZ8XSxZejk0WElGJmAsVTRGLz9xM09EKnFEITZDLCFMPDl9Jk1ITGtgI0EwOVZrWEZh''@;'; put 'put ''XSUicENrfkEuYU16fGY1N3ZxKmhDcF9RIndrZmhneGBMcD95cFBXVUdsIU1+UU8qdksqUC50czxWd0J6eXNoMUQiUER9S0JydVcmWkhAWG9fUXZQTEg8L2Fofn5lMSo8fTlpM31kPXJbajg3PHAmbC9KSiY6MWV5SCZgYTtKIip9OmBIZ1Q0fk5pTmwhUH40WzIqUnw5ejo7JjRAMXAmakp7bGMp''@;'; put 'put ''Rm1GNE9ZeEsxNVksQWxjcyJld2tbc0wmNEZ9OF98QFAmaDtldldsIVdzZjBsIVUoWkp3OlI0Xl8rVXtMUUBfanwzIVlWIWF8WEw+aTVfVGRUbkg4QTF9fUEyLml5X15SZ18ocz5fIjN5dmp8eHRpQmZ6UnFJaVIjcnZVUmN8N1d0Rjd3cENMfSZxSy9OP0BMS1Y2fU54Wilqd2NzPyxsdWxfVGQu''@;'; put 'put ''ZUxAOixlcyNNYitte1VSRmh4e1hGa11TM3BDUH0ocXl5UmBpcDomUFZ7U2AvU1goOShXZVRefHZdT1Q0UVg5cWYjfT5gIUssO2E0OEpZJiQuU0VBQFF2bWh6SihFeF8zL1JXelYiJGZuQH48Y3s7VXhiflh7IzRdSzghYWZqVkMxKyZqW0opVF9uN3JKcnxGISJCYXtDZy5lWUwiUEB8KmoqdjYq''@;'; put 'put ''SC5sc2B8Xkk7USlzam0vQ3J7UFt6e2x1I3JtazZNS11uNnBrPV43WT8uRUhXNFM0aXRaeX1GRntqYFdueDJUPC99cHJ+ZipgSGl2RmNgOzBSSmswd2l7Jm9YRkJoRHApdkxWdHN1XUZYZFg7W1FXRUJ0TEM0MzNEU0A1dGdTdkRuYj0qJFc1bmdnZEQobjZ5Z0daVjVbZ0FlIVhXakh9c1UzOGI9''@;'; put 'put ''fEwxYmJYeTxkZiNSK1MvVTc+SztGflN1bjdNIT04JE1wVGVJV2pePWVFSVgxWytrXmd2L1tbPXE9SCRrbjxZMH1KbD4jPnMoS3t9V3diS25PTjZQeD4/WStKWTNWZyMzekhmelArVFUpbiZsMEY+OmlqQjhnWz9qZ3Nnb0x3YS9EOE1zP2s6NkAzPj9WbllDVFkrNEBTb1RpPFJUL0U0fl1ibFZK''@;'; put 'put ''LylJIzheYn1fKHo+M01aZTRKZ1M6I1k/VGFUXSRhaUFXc0BtaVVYV1oqZztiUnA4bCReLmlfenVWdjYwcVk0emExMVhvOUx6WWpgXnp5OjEobGpvUUhVeVk8ZUV4PDx0eDZdKVhfKlMqSlJBcz1bLzxaX20la0ZrWGx4NChfUStGZz16XXNqUWM3QWlTT0pzamlYMjpbcmNhLzJJW3x5W0x3YT9v''@;'; put 'put ''NmoofD9PbnN4MDBAUWdUcWc5N2ZjQ1sxLi8oITlLQ2cyKSUpV2ApeCFPZmlIVFZqbE9+X15wP1YvRywyMFpsKUpJNj0jQXAwbjJxbWokREIpekwmTC5NI2lrQHFofFN8UEV1XyFpe0BjYHQuKV5lO0A+IjslQCt1JjJ4dFtFQVNeb0J1UHMxdm9Kb2ovNEElXyNhXixqejNYKCFdaGV3dlNgXSEr''@;'; put 'put ''b3dudiMyO3luYnMkS1ZTQTg3PUc6WmUxYi9CYjB+IzZwN0NlO2ZkUFc0WX1xXSlbRWw3KXVuOnwsPldfaTBFbWQ1IiZ7IShKIjtOcVNjbTw0NHomOkFBbTt1NVFgKDloVXY/YCQkRj9fN3JGanBuN15TYzRySDYxMWVjKU99TCZHOTVWQSZ8NypEJntSMW87eTNkTHElQCw3XWlpdDouWFAhW3tQ''@;'; put 'put ''TGRIUzAmaH1xYm9RW21ZXmwvX2Z7KUNTTXZnei5RQkRpWztLUCJAbUVII19sJk4lQWVLVE5DYC51Yl9WUjYjKkJqVzU+TzJOciNaMXUueCgxdzMpPC9mPTNkNjxkcFVAdSw4Jklvcz9pKV1mIXApU293SGRVP2ksXUtqMl0qd3o2Iks4UWd2cEAzYkA3PzFCNnd2Lishe0xtZ2lyTTg7IXRvPUYh''@;'; put 'put ''VSZXaC5LVEM9P2NvR0JmaXlkZG1lZzdxfiEhIVBsIiJEPXRdJD9jQFtuUFNFJWJ1LFskT1V7VypgdTxXMT5MMDhpcihaZ24vd0JuUTorLkomekR2RnxPKEtkVEsrRkU5eD98ai5WJSVHKm8pdlUmQCF2YHw3MSQlM3Z0XkAkb1YoMX19SVplPjg0NWhXZFdMdkxWJT9vb0JhQCN2YUNOKmZ3US9S''@;'; put 'put ''d0pWM20rLDt1JFQ1KEpIO1okdSpwQFleey9rSlJBNyJ+dlomTnZPOVk4SnNIbzIvfEAiUzY0KyJ4XSZ3YSZ5JGgvNnYsdCxpdyooIjhHQFtib0VEZD1FL2g1Q3YyV2tIOVtWNnRON3tnQkI7elVkUylBSDRSaVA3cSF2SjpuNzFbI0YkSF5jPWEyR0NNcmN+QyskTSxCITEsZmpbdTNfUzl5VDRC''@;'; put 'put ''fERrdHo1Sio8Ji5IdzhgfT8uKl8oLGhSUnhSWF8jXmRTNHBMVDhgPy9WNl0wJikwc2xmW1pgc0ZSJTpYYEI2QS9VdFU9K150Yzl7RzFmKyZZXW9TTXY4T3RFXj90cSgwNFlHQi9AW2xQRSw9ckYiSClGWTZKbHBXLyokfkQiTjl9Wm45fHM8dWBzWltSTHRWYCFqRHFtLHlRZXdYUj5yMmM1NjFy''@;'; put 'put ''VkJVX0xUcCgoK2FkR09WT1FRJFlmWkpuLDBhIXYlQE0haDY7R05aIzReVFFoR0shfDU+aXsyYWMxWCkkaD02TG5ddWgmQD8sJXIvcHR8ZVNmXThmWTB0OFdRRldhQ3RePG04IzpKd0JIdHdZPn5OQ3cuSmxXdll7cTZwO2Y+JSJaa0dOMiRreCY3PDgoaTdRPjF7TmhPNDQ5V11ubGVCeXBYZnRU''@;'; put 'put ''YFZUUF9ZSGwlPDA0M1dbU3w2RjYje0hLTm5LWCY/Q3F1M2o1JCZUKmsyOUMqOk4pJkwhOj44KCF8NTM0TS9AOVIqSiNBZkdwMzY5VFYjYGVXfWBpN3hVaTY0KG17WnNvVTtCZXYlOF55S3klWFpBb3FNSFo0WTFPcmFbe3pbJTd7XysvI1oxRllqMGNVe0pEYCFdZVNEYHwvTzUkLkwuczN8Uyw5''@;'; put 'put ''RzchJm57fDRkfUQxMHIiMjNhbXZ3QUNtfkNlQDRaa1huZVVZPl5UJDNlSCkzP31+PFhZeisqVzBbLDR8QyRVOCNVeTpGU2I5MWFXVkJCenc3YFd8O1FvNU1Mb2YldUxpP0xCaG83NCZebGB0eUF3NVMqbDppajlPZk9rMUJVWVhjUlN5LCxjbH14aU5vVmYvQkYvI2ZUfmQwVmtbeT11ZEJudlJt''@;'; put 'put ''NFlFeldaSzQiV2tCbnpENUZPMCZrTUF4YnluMC5VRC80OyFyS2UxKEU2QnVJfUtJM1dgV3QhMCpXI3lQX3UqOlBdfTU7d1ZGcnIvIXI4TG13PEIoKWAkNEBAZWBlO28zaF5lWVkxKHBldUp7bzY5S0I1NnZCa28kRFArT3o5dCtTc3FjTGBRKk9jd3YpWXFobTJ3XWdbbHYubTo/cGVVKStfci48''@;'; put 'put ''d1AsST9MaX4/YXxteEJyMWM5bkR2dmlEXW4pQERxe0BnL3BxcF05WFdrbGN6XVVqUXRbcntIWCZVSVBZU0d3NyZ6UmM/aWY1NiMqbi9lXyk9STc0TmU+KkMrJTc2d0U1Vl9xNyolOkk3NlZCIXVXb1llPStwP2l8MzxSRypRfDMpN3RKbT44NCxbeyhVeXBiUnBPOEg5N1dJRjhvLz0kZXglREU6''@;'; put 'put ''e043fmB1OmJEcFBvTC81dGVtdkgoXVgzTz8lRjt5K2pvKzFZbUEzWC4wMUshNUElT0hYIklrPz90UG1wYHYvYk1scWpGSys6WSNnbl9gN0oiR0o7dEYzIT5DNG1heDduKzc/XitSRUApYUArajhAdW1ZPWVBaXM0KzoqRkA2Vy90Z35qYHZeV3h5cEwjcSZ2IWMwZiNRWWVtfFQmKSlOI3VzdTlN''@;'; put 'put ''cV4hYmZuQFZWT3tKXl5EIl9hQ3haVENwJUxDVj1CQmlRdSIvamNRZDowYU9JTyV8ckoxbz1kQz51M2pedjtbXkwmdVhjQikobWxufllRQTVzbkYxd0ElazRJWlglRXs0TSl7dFA/MkJCdW1xUyRWdk87czR9a0ZGISxqKX0iR0BnUzF4Wjo5e0pZNkF+PF8/KCtNeTNYYztKIjNDWEtfWmQmfjZq''@;'; put 'put ''UHx5KW9lZjVaWDAuVUV5YD0sSigjZ2hUbHo0PHJJWjg6KTx0WTlwRyw2V2RGYXRgZV5XX1UmOT1EWm42ZWApbkd4UStDMyxrRnlJUTx8ZEZvekFdfWB2QnEsaShSSCFMUEhebkhvS0g1SyxvNnQjLixDfHA/WHFrfCk1cis6Vls1OGh4QCoyWVRMMCxgM1ldRDEmaV90c0ovR2ZmS1pqciIsfHQ8''@;'; put 'put ''SDVSIV5pOigkNik8NSNFVjdTaHg9QS5FdSt4dn0sXnRQYXh7O34yLlZVdD1lMmBrRiFxaSJ5XWMjd1Y4dVNzbTYuN2hSKXluV3t7ZHR1fSpMWTJ1X2B6alI/cWE0Wzh8Q2VXSStuKHdUay4yWWcqLmJOQkNfeUI7fVYyKi9yKUMjWCsofUhEOUY9THw/ND07Yzd4NiVtTkAzOXtSRjFoIi4vWUZK''@;'; put 'put ''Y3FUYW0hSkk0OzooRjxVNEhdT2csSHRtVWc9OUNCWzo7TjlDRzc7L3x1Q09qMl9IOVRxfkQ8eGp3Sj85MlFUW05sMXFaQ3BfNTdQUz99cyNaVztfdm17Ol9SWm5zP3FodyRtMD4ofFozTUldTz0kc0FdTWhKIzBoY0NLPXVfRS5TNypSZS8zdCN4WXk2bGI0b0ciTSltUyZJUTE9Z0UxMnw8V1ph''@;'; put 'put ''TFUsejV7fE5RPz1JaDNoSVQzNVApLFosQzBwKmhfIl5CV3JSNT5YdiguVjdiXV8wLyJvUy84bks4R1pWeDspeH0jYVZYKXomY2JuREdKMCh8bHV7JURaaTJSb2t5OVMibEU2cGtxMV1TPHwlMFUzVTNdSG1DL15pRmI1X104KCt6YXczeVVLSERmaC8iZ2BXV09BaihwK2MwdToqWHI8LjAzVSgs''@;'; put 'put ''R0E+ZSpGbC5acVZQWkpRV1hMLFojbjg5Q35ZRXBmQlk9STJQJlF3QXtxS2pFTzFeJHJEMWBzbm9CSlBoOl8xITVnJD4md2d4KWB2WFo+QCIyRmFQPCpgIXYwVzEhTzxzal5DTjMlcVZRfUQuNGUoZGtaVVleM1dwS1dVQFUraT1jPClUe0lDK2MlQSlXay80OTZUWXh8aVN5OFBSK0N4ZS5GPlt3''@;'; put 'put ''QGAkaytoZCRBT1o8QnJLYDVUMyVuJnNMRCJlTElQaiJUNmYzcnlyQywoe09MX0d6X2Nze30jfVNWNmpnQmAmYCVje0FTPm53TkBia3U4MGdEOng3VXRHMlQ/PnYhLj9AOnwmPW50MFVkZEB8I3QsTW1YWnxGMTFZVlg1ZE9TTEFMMF5tVFozfjEsdkNuIUBMWCRoPUZHYkE2TGg0JV45emdvc0xM''@;'; put 'put ''TmNuV2w0K3k5OjN5WlptfltJaDJfR3ZvPkBWUnNYLFRuYFNlNz5fckYvSCJ7L1tqaGFwaXo5Wz8raWx6S2J5e00oMj5mXTh1cTd4TSpoNGUvXUgqdk1TOnleeE0iU1RdTyxaR2UrYGIuYHFXOW5EOlQiNlJbcXY9bDBwODBCaGBmejVbPUdFWU19MTBCfEEzX340YmgmTG9ZMEw0fW4mVDY3TH1v''@;'; put 'put ''eC9xUlhUe2UoZShJYltue2FkJDY5XWpaIXBoOE86a2QrZD1nVzhIUjJEOyI/NFB2MXBJe1Z6SEEwP3hlPU9fdlVeXzMhalsjVlgoJS5MYzZzVT47MXhJJUtvOGN6SF9SeTluYzsxeU04WTM3NDxSTmVYK1BxIlUsK2N+RS5vfSJWflMwOHtxY340M0RiUDQxRWxVanx4YkVMal1bJEBNQi9iWUY0''@;'; put 'put ''UG9WNllmPGUqTiFZPztIWl5OOmAjXTRNNFIqfXVJP3RAQElMNyZ1djVxeXRuaER5bTc8Tl0iLDQkJCZVR3s3TW18RT40IlgyfH1uUD5pe1RSOU98d08/W09JQ3RjeDM0OiF2b31DP1glOWo5TnRiO2UobjwzPmljVVg4Qn0pNGc5QiN8WWB1elclLk5OTFNvJH0oTmRNMDJtISgrNSh+cFk+d1ZJ''@;'; put 'put ''d2hJX3A1fEBMIVRdYyg9bjJbWU1ubj5VbDB9PWdCOGBXKG9kOTpZNXBqaDk/RHZBXz8mJDAvJmx5IWchPWpgK10+P2xgZD1ge21JJEtVaHx1e15lWyY4WjJfNFcjfTleKU12WHk3ayZlTywsJjlbQVB9eGlKKiZNKFYiX3AmMGlfO11UOXYmTDNHQ3BZNE0qZVF3RDJAZH5LQlcyNVkuWDB4bTB+''@;'; put 'put ''eF9PM305bn1hN0I1ckMlaEMyT35EQGNUMF5lQ2E7flNfIjlAOD1lfm4hKUJoQFVRcl5lfENUWDR8QGJUO1NmVU5obFd2dllsOGlxclMzaClQXmY5QD93O29yOWtlfFYkd3I8fEJPRi5hIWNVJSg4JXNmQygxPC5Ke3MuTTgrNGd1PVpOMj1IRUhKcjh3ckNGQSJnPXR3eSxdVmdrZzRANjZHWUZU''@;'; put 'put ''Z3QwYF18R2VoOT83a1cuWyRtNC4kTEUsajRwKFZFRFFxfi4iQjtpWWdMVS43dVJ0XmxxLGYzZSVRLF5UcmlmN3I8LjRXbTJ9MyhgYEAqK1BJOSgwP0p7UDN7eiMkZURCPGY5TzolfWolKiVDZT5UWjhJJiEsZ0J2fTtkeTZ1emw3WkBIWiJwYj9yMCRnPUhtfWB8ZE1iWlhrPXpzLkJ9a0pjU2Yq''@;'; put 'put ''IylEOjA4RnI0Qzxicn1kezdYWk1VeTpWQn01KzcqU1omXyNYSHxUYlhyVl1hTnNVXW8qcW90KnxjOCkjdWI9M2o0aCV6YjZfMHUlMEs5WmtgS2dbNTtIUSE7QkBeXUgyOX5wZ2slTy5kJlhbeCNRb14pOV1hKnZwVyhDRyRxIj8+PmwoSlBAQGlVRG9CX3RxKHBTejVie3UrJioyLHh4OkN6KltE''@;'; put 'put ''U2FeY1deckBlWEBQIiNrN0xuOFJvb2Q0VkI0aTJrcSwha0JtN3RXREBVOjsxX1AjZ30xKjlscUtmIiowVD8oOUYiYiJQPV8ud15zX1hnMUJsV1s7eSU4fDxPVExqR3lkKHF4Smc3eHAhTH57M3Nye1o1cVt7RUlwXVQpVWdjZiYmd31sdStzan5Ld3hQbEszb2w6az0pYTszTiZHMl43TDp0TVBQ''@;'; put 'put ''eiQvMyR8RnBSJlA5anN9MTUzd1Q0eWJ9bkxGej4jIyVqJEloMH5QYEJfeCx6OGhHTzFeZnMweSNVQy9zVGgyU34uWzFIJCEkQjUmTVB4O0InKSksd3d8fCh3dz1BSmUoe3dhc21CaW5hcnk6WFUsbG9jYXRlRmlsZTp2b2lkIDB9KSksd3cpLnRoZW4obD0+bmV3IERUKGwpKX1zdGF0aWMgdW5s''@;'; put 'put ''b2FkKCl7d3cmJih3dz12b2lkIDApfXZlcnNpb24oKXtyZXR1cm4gdGhpcy5fbW9kdWxlLkdyYXBodml6LnByb3RvdHlwZS52ZXJzaW9uKCl9bGF5b3V0KGwsYT0ic3ZnIixkPSJkb3QiLGgpe2lmKCFsKXJldHVybiIiO2NvbnN0IGY9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeihoPy55SW52''@;'; put 'put ''ZXJ0PzE6MCxoPy5ub3A/aD8ubm9wOjApO2xldCBfPSIiLFQ9IiI7dHJ5eyFmdW5jdGlvbihXLGllKXtjb25zdCBnZT17aW1hZ2VzOltdLGZpbGVzOltdLC4uLmllfTt2YXIgd2U7Wy4uLmdlLmZpbGVzLC4uLih3ZT1nZS5pbWFnZXMsd2UubWFwKFRKZSkpXS5mb3JFYWNoKEVlPT5XLmNyZWF0''@;'; put 'put ''ZUZpbGUoRWUucGF0aCxFZS5kYXRhKSl9KGYsaCk7dHJ5e189Zi5sYXlvdXQobCxhLGQpfWNhdGNoKFcpe1Q9Vy5tZXNzYWdlfVQ9Zi5sYXN0RXJyb3IoKXx8VH1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGYpfWlmKCFfJiZUKXRocm93IG5ldyBFcnJvcihUKTtyZXR1cm4gX31jaXJj''@;'; put 'put ''byhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiY2lyY28iLGQpfWRvdChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiZG90IixkKX1mZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImZkcCIsZCl9c2ZkcChsLGE9InN2ZyIsZCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwic2ZkcCIsZCl9bmVhdG8obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm5lYXRvIixkKX1vc2FnZShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwib3NhZ2UiLGQpfXBhdGNod29yayhsLGE9InN2ZyIsZCl7cmV0''@;'; put 'put ''dXJuIHRoaXMubGF5b3V0KGwsYSwicGF0Y2h3b3JrIixkKX10d29waShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwidHdvcGkiLGQpfX1mdW5jdGlvbiBJVChjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxjKX1mdW5jdGlvbiBjNChjKXtyZXR1cm4gTWF0aC5yb3VuZCgx''@;'; put 'put ''MDAqYykvMTAwfWZ1bmN0aW9uIG5sZShjLGwpe2lmKCJwb2x5Z29uIj09Yy50YWcpeyhhPUlUKGMpKS50YWc9InBhdGgiO3ZhciBoPUlUKGQ9Yy5hdHRyaWJ1dGVzKSxmPWQucG9pbnRzO2lmKCJwb2x5Z29uIj09bC50YWcpeyhfPWMuYmJveCkuY3g9Xy54K18ud2lkdGgvMixfLmN5PV8ueStf''@;'; put 'put ''LmhlaWdodC8yO2Zvcih2YXIgVz1kLnBvaW50cy5zcGxpdCgiICIpLGllPVcubWFwKGZ1bmN0aW9uKEhuKXt2YXIgUHI9SG4uc3BsaXQoIiwiKTtyZXR1cm5bUHJbMF0tXy5jeCxQclsxXS1fLmN5XX0pLGdlPWllW2llLmxlbmd0aC0xXVswXSx3ZT1pZVtpZS5sZW5ndGgtMV1bMV0sRWU9MDtF''@;'; put 'put ''ZTxpZS5sZW5ndGg7RWUrKyxnZT1aZSx3ZT1vdCl7dmFyIGV0PShaZT1pZVtFZV1bMF0pLWdlO2lmKDAhPSh5dD0ob3Q9aWVbRWVdWzFdKS13ZSkmJjA8PShrdD1nZS13ZSpldC95dCkmJmt0PDEvMCYmKGdlPD1rdCYma3Q8PVplfHxaZTw9a3QmJmt0PD1nZSkpYnJlYWt9dmFyIFN0PVtbXy5j''@;'; put 'put ''eCtrdCxfLmN5KzBdLmpvaW4oIiwiKV07Zj0oU3Q9KFN0PVN0LmNvbmNhdChXLnNsaWNlKEVlKSkpLmNvbmNhdChXLnNsaWNlKDAsRWUpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1ofWVsc2V7dmFyIGE7KGE9SVQoYykpLnRhZz0icGF0''@;'; put 'put ''aCIsaD1JVChkPWMuYXR0cmlidXRlcyk7dmFyIGQsWmUsb3Qsa3QsUXQ9ZC5jeCxubj1kLmN5LG1uPWQucngsRW49ZC5yeTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgXzsoXz1sLmJib3gpLmN4PV8ueCtfLndpZHRoLzIsXy5jeT1fLnkrXy5oZWlnaHQvMjt2YXIgbHI9bC5hdHRyaWJ1dGVz''@;'; put 'put ''LnBvaW50cy5zcGxpdCgiICIpWzBdLnNwbGl0KCIsIikseXQ9KGV0PWxyWzBdLV8uY3gsbHJbMV0tXy5jeSksdWk9TWF0aC5zcXJ0KE1hdGgucG93KGV0LDIpK01hdGgucG93KHl0LDIpKSxncj1ldC91aSxFaT0teXQvdWl9ZWxzZSBncj0xLEVpPTA7aC5kPSJNICIrUXQrIiAiK25uKyIgbSAi''@;'; put 'put ''KyhaZT1tbipncikrIiwiKyhvdD0tRW4qRWkpKyIgYSAiK21uKyIsIitFbisiIDAgMSwwICIrKGV0PShrdD1tbiotZ3IpLVplKSsiLCIrKHl0PS1FbiotRWktb3QpKyIgYSAiK21uKyIsIitFbisiIDAgMSwwICIrLWV0KyIsIisteXQrInoiLGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5LGRlbGV0''@;'; put 'put ''ZSBoLnJ4LGRlbGV0ZSBoLnJ5LGEuYXR0cmlidXRlcz1ofXJldHVybiBhfWZ1bmN0aW9uIExKZSgpe3RyeXtEVC5sb2FkKCkudGhlbihhPT57YS5sYXlvdXQoIiIsInN2ZyIsImRvdCIpLHRoaXMubGF5b3V0U3luYz1hLmxheW91dC5iaW5kKGEpLG51bGw9PXRoaXMuX3dvcmtlciYmdGhpcy5f''@;'; put 'put ''ZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyksdGhpcy5fYWZ0ZXJJbml0JiZ0aGlzLl9hZnRlckluaXQoKX0pfWNhdGNoe31pZihudWxsIT10aGlzLl93b3JrZXIpe3ZhciBjPXRoaXMuX3ZpelVSTCxsPXRoaXM7dGhpcy5fd29ya2VyUG9ydC5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7bC5f''@;'; put 'put ''d29ya2VyQ2FsbGJhY2tzLnNoaWZ0KCkuY2FsbChsLGEpfSxjLm1hdGNoKC9eaHR0cHM/OlwvXC98XlwvXC8vaSl8fChjPW5ldyB3aW5kb3cuVVJMKGMsZG9jdW1lbnQubG9jYXRpb24uaHJlZikuaHJlZiksSlUuY2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDoiIixlbmdpbmU6ImRvdCIs''@;'; put 'put ''dml6VVJMOmN9LGZ1bmN0aW9uKGEpe30pLEpVLmNhbGwodGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1bmN0aW9uKGEpeyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1m''@;'; put 'put ''dW5jdGlvbiBKVShjLGwpe3RoaXMuX3dvcmtlckNhbGxiYWNrcy5wdXNoKGwpLHRoaXMuX3dvcmtlclBvcnQucG9zdE1lc3NhZ2UoYyl9ZnVuY3Rpb24gUEplKGMsbCl7dmFyIGE9dGhpcy5fb3B0aW9ucy5rZXlNb2RlLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9u''@;'; put 'put ''cy50d2VlblNoYXBlcztpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24mJnRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKSl2YXIgZj0rdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5zcGxpdCgiJSIpWzBdLzEwMCxfPXRo''@;'; put 'put ''aXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKTtlbHNlIGY9dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbixfPSExO3ZhciBUPXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMsVz17fSxpZT10aGlzLl9kaWN0aW9uYXJ5fHx7fSxnZT17fSx3ZT10aGlzLl9u''@;'; put 'put ''b2RlRGljdGlvbmFyeXx8e307ZnVuY3Rpb24ga3QoZ3IsRWk9MCxVcil7KGZ1bmN0aW9uIEVlKGdyLEVpKXt2YXIgVXI9Z3IudGFnO2lmKCJpbmRleCI9PWEpZ3Iua2V5PUVpO2Vsc2UgaWYoIiMiIT1VclswXSlpZigiaWQiPT1hKWdyLmtleT1nci5hdHRyaWJ1dGVzLmlkO2Vsc2UgaWYoInRp''@;'; put 'put ''dGxlIj09YSl7dmFyIEhuPWdyLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oUHIpe3JldHVybiJ0aXRsZSI9PVByLnRhZ30pO0huJiYoZ3Iua2V5PUhuLmNoaWxkcmVuLmxlbmd0aD4wP0huLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9PWdyLmtleSYmKGgmJigiZWxsaXBzZSI9PVVyfHwicG9s''@;'; put 'put ''eWdvbiI9PVVyKSYmKFVyPSJwYXRoIiksZ3Iua2V5PVVyKyItIitFaSl9KShncixFaSksZnVuY3Rpb24gWmUoZ3IsRWkpe2dyLmlkPShFaT9FaS5pZCsiLiI6IiIpK2dyLmtleX0oZ3IsVXIpO3ZhciBQcj1pZVtnci5pZF07KGZ1bmN0aW9uIG90KGdyKXtXW2dyLmlkXT1ncn0pKGdyKSxmdW5j''@;'; put 'put ''dGlvbiBldChncixFaSl7aCYmZ3IuaWQgaW4gaWUmJigicG9seWdvbiI9PUVpLnRhZ3x8ImVsbGlwc2UiPT1FaS50YWd8fCJwYXRoIj09RWkudGFnKSYmKEVpLnRhZyE9Z3IudGFnfHwicG9seWdvbiI9PWdyLnRhZykmJigicGF0aCIhPUVpLnRhZyYmKGdyLmFsdGVybmF0aXZlT2xkPW5sZShF''@;'; put 'put ''aSxncikpLCJwYXRoIiE9Z3IudGFnJiYoZ3IuYWx0ZXJuYXRpdmVOZXc9bmxlKGdyLEVpKSkpfShncixQciksZnVuY3Rpb24geXQoZ3IsRWkpe2lmKGQmJkVpJiYoInBhdGgiPT1FaS50YWd8fGdyLmFsdGVybmF0aXZlT2xkJiYicGF0aCI9PWdyLmFsdGVybmF0aXZlT2xkLnRhZykpe3ZhciBV''@;'; put 'put ''cj0oZ3IuYWx0ZXJuYXRpdmVOZXd8fGdyKS5hdHRyaWJ1dGVzLmQ7aWYoZ3IuYWx0ZXJuYXRpdmVPbGQpdmFyIEhuPVpVKGdyLmFsdGVybmF0aXZlT2xkKTtlbHNlIEhuPVpVKEVpKTsoZ3IuYWx0ZXJuYXRpdmVPbGR8fChnci5hbHRlcm5hdGl2ZU9sZD17fSkpLnBvaW50cz1mdW5jdGlvbiBs''@;'; put 'put ''SmUoYyxsLGEsZCl7Y29uc3QgaD1jLGY9aC5jbG9uZU5vZGUoKSxfPWguZ2V0VG90YWxMZW5ndGgoKSxUPShmLnNldEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxXPVswXTtsZXQgaWU9MDtjb25zdCBnZT1kP2E6YS9NYXRoLm1heChfLFQpO2Zvcig7KGllKz1nZSk8MTsp''@;'; put 'put ''Vy5wdXNoKGllKTtyZXR1cm4gVy5wdXNoKDEpLFcubWFwKGZ1bmN0aW9uKEVlKXtjb25zdCBaZT1oLmdldFBvaW50QXRMZW5ndGgoRWUqXyksb3Q9Zi5nZXRQb2ludEF0TGVuZ3RoKEVlKlQpO3JldHVybltbWmUueCxaZS55XSxbb3QueCxvdC55XV19KX0oSG4sVXIsZixfKX19KGdyLFByKTt2''@;'; put 'put ''YXIgUW49e307Z3IuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihNcil7dmFyIF9yPU1yLnRhZzsoImVsbGlwc2UiPT1fcnx8InBvbHlnb24iPT1fcikmJihfcj0icGF0aCIpLG51bGw9PVFuW19yXSYmKFFuW19yXT0wKSxrdChNcixRbltfcl0rKyxncil9KX1mdW5jdGlvbiBubihncil7KGZ1''@;'; put 'put ''bmN0aW9uIFN0KGdyKXtpZihUJiZnci5wYXJlbnQmJiJub2RlIj09Z3IucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3MmJiJ0aXRsZSI9PWdyLnRhZyl7aWYoZ3IuY2hpbGRyZW4ubGVuZ3RoPjApdmFyIEhuPWdyLmNoaWxkcmVuWzBdLnRleHQ7ZWxzZSBIbj0iIjtnZVtIbl09Z3IucGFyZW50fX0p''@;'; put 'put ''KGdyKSxmdW5jdGlvbiBRdChncil7dmFyIFVyPWdyLnRhZztpZihUJiYhaWVbZ3IuaWRdJiZnci5wYXJlbnQmJkphZShncikmJigicGF0aCI9PVVyfHwicG9seWdvbiI9PVVyKSl7aWYoInBvbHlnb24iPT1Vcil7dmFyIFByPWdyLnBhcmVudC5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKFpyKXty''@;'; put 'put ''ZXR1cm4icGF0aCI9PVpyLnRhZ30pO1ByJiYoZ3IudG90YWxMZW5ndGg9UHIudG90YWxMZW5ndGgpfXZhciBRbj1mdW5jdGlvbiBkSmUoYyl7cmV0dXJuIGZ1bmN0aW9uIHVKZShjKXtyZXR1cm4iZWRnZSI9PWMucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3M/Yy5wYXJlbnQ6Yy5wYXJlbnQucGFy''@;'; put 'put ''ZW50LnBhcmVudH0oYykuY2hpbGRyZW4uZmluZChmdW5jdGlvbihsKXtyZXR1cm4idGl0bGUiPT1sLnRhZ30pfShnciksTXI9UW4uY2hpbGRyZW5bMF0sX3I9TXIudGV4dC5zcGxpdCgiLT4iKTsyIT1fci5sZW5ndGgmJihfcj1Nci50ZXh0LnNwbGl0KCItLSIpKTt2YXIgdnQ9X3JbMF0sT3Q9''@;'; put 'put ''Z2VbdnRdLGNuPXdlW3Z0XTtpZihjbil7aWYoKFBuPU90LmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihacixIcil7cmV0dXJuImciPT1aci50YWd9KSk+PTApe3ZhciBrbj1PdC5jaGlsZHJlbltQbl0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKFpyLEhyKXtyZXR1cm4iYSI9PVpy''@;'; put 'put ''LnRhZ30pO090PU90LmNoaWxkcmVuW1BuXS5jaGlsZHJlbltrbl19KFBuPWNuLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihacixIcil7cmV0dXJuImciPT1aci50YWd9KSk+PTAmJihrbj1jbi5jaGlsZHJlbltQbl0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKEhyLFJpKXtyZXR1''@;'; put 'put ''cm4iYSI9PUhyLnRhZ30pLGNuPWNuLmNoaWxkcmVuW1BuXS5jaGlsZHJlbltrbl0pO2Zvcih2YXIgSm49T3QuY2hpbGRyZW4sUG49MDtQbjxKbi5sZW5ndGg7UG4rKylpZigicG9seWdvbiI9PUpuW1BuXS50YWd8fCJlbGxpcHNlIj09Sm5bUG5dLnRhZ3x8InBhdGgiPT1KbltQbl0udGFnfHwi''@;'; put 'put ''dGV4dCI9PUpuW1BuXS50YWcpe3ZhciBPcj1KbltQbl07YnJlYWt9dmFyIFJyPWNuLmNoaWxkcmVuO2ZvcihQbj0wO1BuPFJyLmxlbmd0aDtQbisrKWlmKCJwb2x5Z29uIj09UnJbUG5dLnRhZ3x8ImVsbGlwc2UiPT1ScltQbl0udGFnfHwicGF0aCI9PVJyW1BuXS50YWd8fCJ0ZXh0Ij09UnJb''@;'; put 'put ''UG5dLnRhZyl7dmFyICRyPVJyW1BuXTticmVha31nci5vZmZzZXQ9JHImJk9yP3t4OiRyLmNlbnRlci54LU9yLmNlbnRlci54LHk6JHIuY2VudGVyLnktT3IuY2VudGVyLnl9Ont4OjAseTowfX19fShnciksZ3IuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihFaSl7bm4oRWkpfSl9dGhpcy5f''@;'; put 'put ''ZGlzcGF0Y2guY2FsbCgibGF5b3V0RW5kIix0aGlzKTt2YXIgbW49a3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoImRpdiIpLGxyPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGMsImltYWdlL3N2Zyt4bWwiKTttbi5hcHBlbmQoZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gbHIuZG9jdW1lbnRFbGVtZW50fSk7dmFyIF9pPVhnKG1uLnNlbGVjdCgic3ZnIikpO3RoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFFeHRyYWN0RW5kIix0aGlzKSxrdChfaSksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMUVuZCIsdGhpcyksbm4o''@;'; put 'put ''X2kpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczJFbmQiLHRoaXMpLHRoaXMuX2RhdGE9X2ksdGhpcy5fZGljdGlvbmFyeT1XLHRoaXMuX25vZGVEaWN0aW9uYXJ5PWdlLHRoaXMuX2V4dHJhY3REYXRhPWZ1bmN0aW9uKGdyLEVpLFVyKXt2YXIgSG49WGcoZ3IpO3JldHVy''@;'; put 'put ''biBrdChIbixFaSxVciksbm4oSG4pLEhufSx0aGlzLl9idXN5PSExLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSxsJiZsLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVuZ3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBMVChj''@;'; put 'put ''LGwpe2lmKChhPShjPWw/Yy50b0V4cG9uZW50aWFsKGwtMSk6Yy50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgYSxkPWMuc2xpY2UoMCxhKTtyZXR1cm5bZC5sZW5ndGg+MT9kWzBdK2Quc2xpY2UoMik6ZCwrYy5zbGljZShhKzEpXX12YXIgcmxlLHNR''@;'; put 'put ''ZT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBRVShjKXtpZighKGw9c1FlLmV4ZWMoYykpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrYyk7dmFyIGw7cmV0dXJuIG5l''@;'; put 'put ''dyBlWih7ZmlsbDpsWzFdLGFsaWduOmxbMl0sc2lnbjpsWzNdLHN5bWJvbDpsWzRdLHplcm86bFs1XSx3aWR0aDpsWzZdLGNvbW1hOmxbN10scHJlY2lzaW9uOmxbOF0mJmxbOF0uc2xpY2UoMSksdHJpbTpsWzldLHR5cGU6bFsxMF19KX1mdW5jdGlvbiBlWihjKXt0aGlzLmZpbGw9dm9pZCAw''@;'; put 'put ''PT09Yy5maWxsPyIgIjpjLmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT1jLmFsaWduPyI+IjpjLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1jLnNpZ24/Ii0iOmMuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1jLnN5bWJvbD8iIjpjLnN5bWJvbCsiIix0aGlzLnplcm89ISFj''@;'; put 'put ''Lnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT1jLndpZHRoP3ZvaWQgMDorYy53aWR0aCx0aGlzLmNvbW1hPSEhYy5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1jLnByZWNpc2lvbj92b2lkIDA6K2MucHJlY2lzaW9uLHRoaXMudHJpbT0hIWMudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09''@;'; put 'put ''Yy50eXBlPyIiOmMudHlwZSsiIn1mdW5jdGlvbiBpbGUoYyxsKXt2YXIgYT1MVChjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdO3JldHVybiBoPDA/IjAuIituZXcgQXJyYXkoLWgpLmpvaW4oIjAiKStkOmQubGVuZ3RoPmgrMT9kLnNsaWNlKDAsaCsxKSsiLiIrZC5z''@;'; put 'put ''bGljZShoKzEpOmQrbmV3IEFycmF5KGgtZC5sZW5ndGgrMikuam9pbigiMCIpfVFVLnByb3RvdHlwZT1lWi5wcm90b3R5cGUsZVoucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJv''@;'; put 'put ''PyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMu''@;'; put 'put ''dHlwZX07Y29uc3Qgb2xlPXsiJSI6KGMsbCk9PigxMDAqYykudG9GaXhlZChsKSxiOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMiksYzpjPT5jKyIiLGQ6ZnVuY3Rpb24gblFlKGMpe3JldHVybiBNYXRoLmFicyhjPU1hdGgucm91bmQoYykpPj0xZTIxP2MudG9Mb2NhbGVTdHJpbmcoImVu''@;'; put 'put ''IikucmVwbGFjZSgvLC9nLCIiKTpjLnRvU3RyaW5nKDEwKX0sZTooYyxsKT0+Yy50b0V4cG9uZW50aWFsKGwpLGY6KGMsbCk9PmMudG9GaXhlZChsKSxnOihjLGwpPT5jLnRvUHJlY2lzaW9uKGwpLG86Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZyg4KSxwOihjLGwpPT5pbGUoMTAwKmMsbCks''@;'; put 'put ''cjppbGUsczpmdW5jdGlvbiBsUWUoYyxsKXt2YXIgYT1MVChjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdLGY9aC0ocmxlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGgvMykpKSkrMSxfPWQubGVuZ3RoO3JldHVybiBmPT09Xz9kOmY+Xz9kK25l''@;'; put 'put ''dyBBcnJheShmLV8rMSkuam9pbigiMCIpOmY+MD9kLnNsaWNlKDAsZikrIi4iK2Quc2xpY2UoZik6IjAuIituZXcgQXJyYXkoMS1mKS5qb2luKCIwIikrTFQoYyxNYXRoLm1heCgwLGwrZi0xKSlbMF19LFg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OmM9''@;'; put 'put ''Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBzbGUoYyl7cmV0dXJuIGN9dmFyIFJULHdkLGFsZT1BcnJheS5wcm90b3R5cGUubWFwLGxsZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTsh''@;'; put 'put ''ZnVuY3Rpb24gZFFlKGMpe1JUPWZ1bmN0aW9uIGNRZShjKXt2YXIgbD12b2lkIDA9PT1jLmdyb3VwaW5nfHx2b2lkIDA9PT1jLnRob3VzYW5kcz9zbGU6ZnVuY3Rpb24gaVFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBoPWEubGVuZ3RoLGY9W10sXz0wLFQ9Y1swXSxXPTA7''@;'; put 'put ''aD4wJiZUPjAmJihXK1QrMT5kJiYoVD1NYXRoLm1heCgxLGQtVykpLGYucHVzaChhLnN1YnN0cmluZyhoLT1ULGgrVCkpLCEoKFcrPVQrMSk+ZCkpOylUPWNbXz0oXysxKSVjLmxlbmd0aF07cmV0dXJuIGYucmV2ZXJzZSgpLmpvaW4obCl9fShhbGUuY2FsbChjLmdyb3VwaW5nLE51bWJlciks''@;'; put 'put ''Yy50aG91c2FuZHMrIiIpLGE9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzBdKyIiLGQ9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzFdKyIiLGg9dm9pZCAwPT09Yy5kZWNpbWFsPyIuIjpjLmRlY2ltYWwrIiIsZj12b2lkIDA9PT1jLm51bWVyYWxzP3NsZTpm''@;'; put 'put ''dW5jdGlvbiBvUWUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBsLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbK2FdfSl9fShhbGUuY2FsbChjLm51bWVyYWxzLFN0cmluZykpLF89dm9pZCAwPT09Yy5wZXJjZW50PyIlIjpjLnBlcmNlbnQrIiIsVD12b2lkIDA9''@;'; put 'put ''PT1jLm1pbnVzPyJcdTIyMTIiOmMubWludXMrIiIsVz12b2lkIDA9PT1jLm5hbj8iTmFOIjpjLm5hbisiIjtmdW5jdGlvbiBpZSh3ZSl7dmFyIEVlPSh3ZT1RVSh3ZSkpLmZpbGwsWmU9d2UuYWxpZ24sb3Q9d2Uuc2lnbixldD13ZS5zeW1ib2wseXQ9d2UuemVybyxrdD13ZS53aWR0aCxTdD13''@;'; put 'put ''ZS5jb21tYSxRdD13ZS5wcmVjaXNpb24sbm49d2UudHJpbSxtbj13ZS50eXBlOyJuIj09PW1uPyhTdD0hMCxtbj0iZyIpOm9sZVttbl18fCh2b2lkIDA9PT1RdCYmKFF0PTEyKSxubj0hMCxtbj0iZyIpLCh5dHx8IjAiPT09RWUmJiI9Ij09PVplKSYmKHl0PSEwLEVlPSIwIixaZT0iPSIpO3Zh''@;'; put 'put ''ciBFbj0iJCI9PT1ldD9hOiIjIj09PWV0JiYvW2JveFhdLy50ZXN0KG1uKT8iMCIrbW4udG9Mb3dlckNhc2UoKToiIixscj0iJCI9PT1ldD9kOi9bJXBdLy50ZXN0KG1uKT9fOiIiLFZyPW9sZVttbl0sX2k9L1tkZWZncHJzJV0vLnRlc3QobW4pO2Z1bmN0aW9uIHVpKGdyKXt2YXIgSG4sUHIs''@;'; put 'put ''UW4sRWk9RW4sVXI9bHI7aWYoImMiPT09bW4pVXI9VnIoZ3IpK1VyLGdyPSIiO2Vsc2V7dmFyIE1yPShncj0rZ3IpPDB8fDEvZ3I8MDtpZihncj1pc05hTihncik/VzpWcihNYXRoLmFicyhnciksUXQpLG5uJiYoZ3I9ZnVuY3Rpb24gYVFlKGMpe2U6Zm9yKHZhciBoLGw9Yy5sZW5ndGgsYT0x''@;'; put 'put ''LGQ9LTE7YTxsOysrYSlzd2l0Y2goY1thXSl7Y2FzZSIuIjpkPWg9YTticmVhaztjYXNlIjAiOjA9PT1kJiYoZD1hKSxoPWE7YnJlYWs7ZGVmYXVsdDppZighK2NbYV0pYnJlYWsgZTtkPjAmJihkPTApfXJldHVybiBkPjA/Yy5zbGljZSgwLGQpK2Muc2xpY2UoaCsxKTpjfShncikpLE1yJiYw''@;'; put 'put ''PT0rZ3ImJiIrIiE9PW90JiYoTXI9ITEpLEVpPShNcj8iKCI9PT1vdD9vdDpUOiItIj09PW90fHwiKCI9PT1vdD8iIjpvdCkrRWksVXI9KCJzIj09PW1uP2xsZVs4K3JsZS8zXToiIikrVXIrKE1yJiYiKCI9PT1vdD8iKSI6IiIpLF9pKWZvcihIbj0tMSxQcj1nci5sZW5ndGg7KytIbjxQcjsp''@;'; put 'put ''aWYoNDg+KFFuPWdyLmNoYXJDb2RlQXQoSG4pKXx8UW4+NTcpe1VyPSg0Nj09PVFuP2grZ3Iuc2xpY2UoSG4rMSk6Z3Iuc2xpY2UoSG4pKStVcixncj1nci5zbGljZSgwLEhuKTticmVha319U3QmJiF5dCYmKGdyPWwoZ3IsMS8wKSk7dmFyIF9yPUVpLmxlbmd0aCtnci5sZW5ndGgrVXIubGVu''@;'; put 'put ''Z3RoLHZ0PV9yPGt0P25ldyBBcnJheShrdC1fcisxKS5qb2luKEVlKToiIjtzd2l0Y2goU3QmJnl0JiYoZ3I9bCh2dCtncix2dC5sZW5ndGg/a3QtVXIubGVuZ3RoOjEvMCksdnQ9IiIpLFplKXtjYXNlIjwiOmdyPUVpK2dyK1VyK3Z0O2JyZWFrO2Nhc2UiPSI6Z3I9RWkrdnQrZ3IrVXI7YnJl''@;'; put 'put ''YWs7Y2FzZSJeIjpncj12dC5zbGljZSgwLF9yPXZ0Lmxlbmd0aD4+MSkrRWkrZ3IrVXIrdnQuc2xpY2UoX3IpO2JyZWFrO2RlZmF1bHQ6Z3I9dnQrRWkrZ3IrVXJ9cmV0dXJuIGYoZ3IpfXJldHVybiBRdD12b2lkIDA9PT1RdD82Oi9bZ3Byc10vLnRlc3QobW4pP01hdGgubWF4KDEsTWF0aC5t''@;'; put 'put ''aW4oMjEsUXQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLFF0KSksdWkudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gd2UrIiJ9LHVpfXJldHVybntmb3JtYXQ6aWUsZm9ybWF0UHJlZml4OmZ1bmN0aW9uIGdlKHdlLEVlKXt2YXIgWmU9aWUoKCh3ZT1RVSh3ZSkpLnR5cGU9ImYiLHdlKSks''@;'; put 'put ''b3Q9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoZnVuY3Rpb24gclFlKGMpe3JldHVybihjPUxUKE1hdGguYWJzKGMpKSk/Y1sxXTpOYU59KEVlKS8zKSkpLGV0PU1hdGgucG93KDEwLC1vdCkseXQ9bGxlWzgrb3QvM107cmV0dXJuIGZ1bmN0aW9uKGt0KXtyZXR1cm4gWmUo''@;'; put 'put ''ZXQqa3QpK3l0fX19fShjKSx3ZD1SVC5mb3JtYXR9KHt0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO2NvbnN0IHRaPU1hdGguUEksblo9Mip0WixRZz0xZS02LHBRZT1uWi1RZztmdW5jdGlvbiBjbGUoYyl7dGhpcy5fKz1jWzBdO2ZvcihsZXQgbD0xLGE9''@;'; put 'put ''Yy5sZW5ndGg7bDxhOysrbCl0aGlzLl8rPWFyZ3VtZW50c1tsXStjW2xdfWNsYXNzIHJae2NvbnN0cnVjdG9yKGwpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIiLHRoaXMuX2FwcGVuZD1udWxsPT1sP2NsZTpmdW5jdGlvbiBnUWUoYyl7bGV0IGw9''@;'; put 'put ''TWF0aC5mbG9vcihjKTtpZighKGw+PTApKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7Y31gKTtpZihsPjE1KXJldHVybiBjbGU7Y29uc3QgYT0xMCoqbDtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5fKz1kWzBdO2ZvcihsZXQgaD0xLGY9ZC5sZW5ndGg7aDxmOysraCl0aGlz''@;'; put 'put ''Ll8rPU1hdGgucm91bmQoYXJndW1lbnRzW2hdKmEpL2ErZFtoXX19KGwpfW1vdmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1gfWNsb3NlUGF0aCgpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gw''@;'; put 'put ''LHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGwsYSl7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPStsfSwke3RoaXMuX3kxPSthfWB9cXVhZHJhdGljQ3VydmVUbyhsLGEsZCxoKXt0aGlzLl9hcHBlbmRgUSR7K2x9LCR7K2F9LCR7dGhpcy5feDE9K2R9LCR7dGhp''@;'; put 'put ''cy5feTE9K2h9YH1iZXppZXJDdXJ2ZVRvKGwsYSxkLGgsZixfKXt0aGlzLl9hcHBlbmRgQyR7K2x9LCR7K2F9LCR7K2R9LCR7K2h9LCR7dGhpcy5feDE9K2Z9LCR7dGhpcy5feTE9K199YH1hcmNUbyhsLGEsZCxoLGYpe2lmKGw9K2wsYT0rYSxkPStkLGg9K2gsKGY9K2YpPDApdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7Zn1gKTtsZXQgXz10aGlzLl94MSxUPXRoaXMuX3kxLFc9ZC1sLGllPWgtYSxnZT1fLWwsd2U9VC1hLEVlPWdlKmdlK3dlKndlO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWA7ZWxz''@;'; put 'put ''ZSBpZihFZT5RZylpZihNYXRoLmFicyh3ZSpXLWllKmdlKT5RZyYmZil7bGV0IFplPWQtXyxvdD1oLVQsZXQ9VypXK2llKmllLHl0PVplKlplK290Km90LGt0PU1hdGguc3FydChldCksU3Q9TWF0aC5zcXJ0KEVlKSxRdD1mKk1hdGgudGFuKCh0Wi1NYXRoLmFjb3MoKGV0K0VlLXl0KS8oMipr''@;'; put 'put ''dCpTdCkpKS8yKSxubj1RdC9TdCxtbj1RdC9rdDtNYXRoLmFicyhubi0xKT5RZyYmdGhpcy5fYXBwZW5kYEwke2wrbm4qZ2V9LCR7YStubip3ZX1gLHRoaXMuX2FwcGVuZGBBJHtmfSwke2Z9LDAsMCwkeysod2UqWmU+Z2Uqb3QpfSwke3RoaXMuX3gxPWwrbW4qV30sJHt0aGlzLl95MT1hK21u''@;'; put 'put ''KmllfWB9ZWxzZSB0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWB9YXJjKGwsYSxkLGgsZixfKXtpZihsPStsLGE9K2EsXz0hIV8sKGQ9K2QpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7ZH1gKTtsZXQgVD1kKk1hdGguY29zKGgpLFc9ZCpN''@;'; put 'put ''YXRoLnNpbihoKSxpZT1sK1QsZ2U9YStXLHdlPTFeXyxFZT1fP2gtZjpmLWg7bnVsbD09PXRoaXMuX3gxP3RoaXMuX2FwcGVuZGBNJHtpZX0sJHtnZX1gOihNYXRoLmFicyh0aGlzLl94MS1pZSk+UWd8fE1hdGguYWJzKHRoaXMuX3kxLWdlKT5RZykmJnRoaXMuX2FwcGVuZGBMJHtpZX0sJHtn''@;'; put 'put ''ZX1gLGQmJihFZTwwJiYoRWU9RWUlblorblopLEVlPnBRZT90aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLDEsJHt3ZX0sJHtsLVR9LCR7YS1XfUEke2R9LCR7ZH0sMCwxLCR7d2V9LCR7dGhpcy5feDE9aWV9LCR7dGhpcy5feTE9Z2V9YDpFZT5RZyYmdGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0s''@;'; put 'put ''MCwkeysoRWU+PXRaKX0sJHt3ZX0sJHt0aGlzLl94MT1sK2QqTWF0aC5jb3MoZil9LCR7dGhpcy5feTE9YStkKk1hdGguc2luKGYpfWApfXJlY3QobCxhLGQsaCl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPStsfSwke3RoaXMuX3kwPXRoaXMuX3kxPSthfWgke2Q9K2R9diR7''@;'; put 'put ''K2h9aCR7LWR9WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX1mdW5jdGlvbiB1bGUoKXtyZXR1cm4gbmV3IHJafWZ1bmN0aW9uIG1RZShjLGwsYSxkKXtyZXR1cm4gbD0tbCxkPS1kLFtjLGxdPVtjKmEtbCpkLGMqZCtsKmFdLFtjLGw9LWxdfWZ1bmN0aW9uIGRsZShjLGwsYSxkLGgsZixf''@;'; put 'put ''KXt2YXIgVz1YZyhnbGUuY2FsbCh0aGlzLGYpKTtjLmRhdGEoW1ddKSx2dy5jYWxsKGMubm9kZSgpLFcpLGhsZShjLGwsYSxkLGgsZixfKX1mdW5jdGlvbiBobGUoYyxsLGEsZCxoLGYsXyl7dmFyIFQ9Xy5zaG9ydGVuaW5nfHwwLHdlPVtbMCwtMy41XSxbMTAsMF0sWzAsMy41XSxbMCwtMy41''@;'; put 'put ''XV0sRWU9ZC1sLFplPWgtYSxvdD1NYXRoLnNxcnQoRWUqRWUrWmUqWmUpO2lmKDA9PW90KXZhciBldD0xLHl0PTA7ZWxzZSBldD1FZS9vdCx5dD1aZS9vdDtpZihkPWwrKG90LVQtMTAtLjEpKmV0LGg9YSsob3QtVC0xMC0uMSkqeXQsZi5VUkx8fGYudG9vbHRpcCl2YXIga3Q9Yy5zZWxlY3RX''@;'; put 'put ''aXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLFN0PWt0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxRdD1rdC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwb2x5Z29uIik7ZWxzZSBTdD1jLnNlbGVj''@;'; put 'put ''dFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBhdGgiKSxRdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTt2YXIgbm49dWxlKCk7bm4ubW92ZVRvKGwsYSksbm4ubGluZVRvKGQsaCksU3QuYXR0cigiZCIsbm4pLGQ9bCsob3QtVC0xMCkqZXQsaD1hKyhvdC1ULTEw''@;'; put 'put ''KSp5dDtmb3IodmFyIG1uPTA7bW48d2UubGVuZ3RoO21uKyspd2VbbW5dPW1RZSgoRW49d2VbbW5dKVswXSxFblsxXSxldCx5dCk7Zm9yKG1uPTA7bW48d2UubGVuZ3RoO21uKyspd2VbbW5dPVtkKyhFbj13ZVttbl0pWzBdLGgrRW5bMV1dO3ZhciBscj1bXTtmb3IobW49MDttbjx3ZS5sZW5n''@;'; put 'put ''dGg7bW4rKyl7dmFyIEVuO2xyLnB1c2goKEVuPXdlW21uXSkuam9pbigiLCIpKX12YXIgVnI9bHIuam9pbigiICIpO3JldHVybiBRdC5hdHRyKCJwb2ludHMiLFZyKSx0aGlzfWZ1bmN0aW9uIGZsZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/KHRoaXMuX2RyYXduRWRnZS5nLnJlbW92ZSgp''@;'; put 'put ''LHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXMpOnRoaXN9ZnVuY3Rpb24gcGxlKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT90aGlzLl9kcmF3bkVkZ2UuZzprcyhudWxsKX1mdW5jdGlvbiBnbGUoYyl7dmFyIGw9IiI7Zm9yKHZhciBhIG9mIE9iamVjdC5rZXlzKGMpKW51bGwhPWNbYV0mJihs''@;'; put 'put ''Kz0nICInK2ErJyI9IicrY1thXSsnIicpO3ZhciBoPXRoaXMubGF5b3V0U3luYygiZGlncmFwaCB7YSAtPiBiIFsiK2wrIl19Iiwic3ZnIiwiZG90IiksXz0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhoLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIGtzKGRvY3VtZW50''@;'; put 'put ''LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIF8uZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIuZWRnZSIpfWZ1bmN0aW9uIG1sZShjLGwsYSxkLGgsZil7dmFyIFQ9WGcoeWxlLmNhbGwodGhpcyxkLGgpKTtyZXR1cm4gYy5kYXRhKFtUXSksdncu''@;'; put 'put ''Y2FsbChjLm5vZGUoKSxUKSx2bGUoYyxsLGEsaCksdGhpc31mdW5jdGlvbiB2bGUoYyxsLGEsZCxoKXtpZihkLlVSTHx8ZC50b29sdGlwKXZhciBmPWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKTtlbHNlIGY9Yzt2''@;'; put 'put ''YXIgXz1mLnNlbGVjdEFsbCgiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxUPWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpO2lmKDAhPV8uc2l6ZSgpKXt2YXIgVz1fLm5vZGUoKS5nZXRCQm94KCk7Vy5jeD1XLngrVy53aWR0aC8yLFcuY3k9Vy55K1cuaGVp''@;'; put 'put ''Z2h0LzJ9ZWxzZSAwIT1ULnNpemUoKSYmKFc9e3g6K1QuYXR0cigieCIpLHk6K1QuYXR0cigieSIpLHdpZHRoOjAsaGVpZ2h0OjAsY3g6K1QuYXR0cigieCIpLGN5OitULmF0dHIoInkiKX0pO3JldHVybiBfLmVhY2goZnVuY3Rpb24oaWUsZ2Upe3ZhciB3ZT1rcyh0aGlzKTtpZih3ZS5hdHRy''@;'; put 'put ''KCJjeCIpKXdlLmF0dHIoImN4IixjNChsKSkuYXR0cigiY3kiLGM0KGEpKTtlbHNlIGlmKHdlLmF0dHIoInBvaW50cyIpKXt2YXIgRWU9d2UuYXR0cigicG9pbnRzIikudHJpbSgpO3dlLmF0dHIoInBvaW50cyIsZnVuY3Rpb24gREplKGYsbCxhKXt2YXIgaCxkPShoPWYuc3BsaXQoIiAiKSku''@;'; put 'put ''bWFwKGZ1bmN0aW9uKF8pe3JldHVybiBfLnNwbGl0KCIsIil9KTtyZXR1cm4gZD1oLm1hcChmdW5jdGlvbihfKXtyZXR1cm5bYzQoK2wrICtfLnNwbGl0KCIsIilbMF0pLGM0KCthKyArXy5zcGxpdCgiLCIpWzFdKV19KSwoaD1kLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5qb2luKCIsIil9''@;'; put 'put ''KSkuam9pbigiICIpfShFZSxsLVcuY3gsYS1XLmN5KSl9ZWxzZXt2YXIgWmU9d2UuYXR0cigiZCIpO3dlLmF0dHIoImQiLGZ1bmN0aW9uIElKZShjLGwsYSl7KGY9Yy5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCk7dmFyIGQ9Yy5zcGxpdCgvW15bQS1aIF0rLyksZj0oZi5tYXAoZnVuY3Rpb24o''@;'; put 'put ''Xyl7cmV0dXJuIF8uc3BsaXQoIiwiKX0pLGYubWFwKGZ1bmN0aW9uKF8pe3JldHVybltjNCgrbCsgK18uc3BsaXQoIiwiKVswXSksYzQoK2ErICtfLnNwbGl0KCIsIilbMV0pXX0pLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5qb2luKCIsIil9KSk7cmV0dXJuIGQucmVkdWNlKGZ1bmN0aW9u''@;'; put 'put ''KF8sVCxXKXtyZXR1cm4gXy5jb25jYXQoVCxmW1ddKX0sW10pLmpvaW4oIiIpfShaZSxsLVcuY3gsYS1XLmN5KSl9fSksMCE9VC5zaXplKCkmJlQuYXR0cigieCIsYzQoK1QuYXR0cigieCIpK2wtVy5jeCkpLmF0dHIoInkiLGM0KCtULmF0dHIoInkiKSthLVcuY3kpKSx0aGlzfWZ1bmN0aW9u''@;'; put 'put ''IF9sZSgpe2lmKCF0aGlzLl9kcmF3bk5vZGUpcmV0dXJuIHRoaXM7dmFyIGM9dGhpcy5fZHJhd25Ob2RlLmc7cmV0dXJuIGMuZW1wdHkoKXx8Yy5yZW1vdmUoKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfWZ1bmN0aW9uIGJsZSgpe3JldHVybiB0aGlzLl9kcmF3bk5vZGU/dGhpcy5fZHJh''@;'; put 'put ''d25Ob2RlLmc6a3MobnVsbCl9ZnVuY3Rpb24geWxlKGMsbCl7dmFyIGE9IiI7Zm9yKHZhciBkIG9mIE9iamVjdC5rZXlzKGwpKW51bGwhPWxbZF0mJihhKz0nICInK2QrJyI9IicrbFtkXSsnIicpO3ZhciBmPXRoaXMubGF5b3V0U3luYygnZ3JhcGggeyInK2MrJyIgWycrYSsiXX0iLCJzdmci''@;'; put 'put ''LCJkb3QiKSxUPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGYsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4ga3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gVC5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3Qo''@;'; put 'put ''Ii5ub2RlIil9ZnVuY3Rpb24gT1QoYyl7c2VsZi5kb2N1bWVudD17fSxjLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKGwpe2xldCBhPXNlbGZbIkBocGNjLWpzL3dhc20iXTtudWxsPT1hJiZsLmRhdGEudml6VVJMJiYoaW1wb3J0U2NyaXB0cyhsLmRhdGEudml6VVJMKSxh''@;'; put 'put ''PXNlbGZbIkBocGNjLWpzL3dhc20iXSksInZlcnNpb24iIT1sLmRhdGEudHlwZT9hLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9Pntjb25zdCBoPWQubGF5b3V0KGwuZGF0YS5kb3QsInN2ZyIsbC5kYXRhLmVuZ2luZSxsLmRhdGEub3B0aW9ucyk7Yy5wb3N0TWVzc2FnZShoP3t0eXBlOiJkb25l''@;'; put 'put ''Iixzdmc6aH06bC5kYXRhLnZpelVSTD97dHlwZToiaW5pdCJ9Ont0eXBlOiJza2lwIn0pfSkuY2F0Y2goZD0+e2MucG9zdE1lc3NhZ2Uoe3R5cGU6ImVycm9yIixlcnJvcjpkLm1lc3NhZ2V9KX0pOmEuR3JhcGh2aXoubG9hZCgpLnRoZW4oZD0+e2MucG9zdE1lc3NhZ2Uoe3R5cGU6InZlcnNp''@;'; put 'put ''b24iLHZlcnNpb246ZC52ZXJzaW9uKCl9KX0pfSl9ZnVuY3Rpb24geFFlKCl7T1Qoc2VsZil9ZnVuY3Rpb24gRVFlKCl7c2VsZi5vbmNvbm5lY3Q9ZnVuY3Rpb24oYyl7Y29uc3QgbD1jLnBvcnRzWzBdO09UKGwpLGwuc3RhcnQoKX19ZnVuY3Rpb24gaVooYyxsKXtpZih0aGlzLl9vcHRpb25z''@;'; put 'put ''PXt1c2VXb3JrZXI6ITAsdXNlU2hhcmVkV29ya2VyOiExLGVuZ2luZToiZG90IixrZXlNb2RlOiJ0aXRsZSIsZmFkZTohMCx0d2VlblBhdGhzOiEwLHR3ZWVuU2hhcGVzOiEwLGNvbnZlcnRFcXVhbFNpZGVkUG9seWdvbnM6ITAsdHdlZW5QcmVjaXNpb246MSxncm93RW50ZXJpbmdFZGdlczoh''@;'; put 'put ''MCx6b29tOiEwLHpvb21TY2FsZUV4dGVudDpbLjEsMTBdLHpvb21UcmFuc2xhdGVFeHRlbnQ6W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbCxzY2FsZToxLGZpdDohMX0sbCBpbnN0YW5jZW9mIE9iamVjdClmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMobCkp''@;'; put 'put ''dGhpcy5fb3B0aW9uc1thXT1sW2FdO2Vsc2UiYm9vbGVhbiI9PXR5cGVvZiBsJiYodGhpcy5fb3B0aW9ucy51c2VXb3JrZXI9bCk7dmFyIGQ9dGhpcy5fb3B0aW9ucy51c2VXb3JrZXIsaD10aGlzLl9vcHRpb25zLnVzZVNoYXJlZFdvcmtlcjtpZih0eXBlb2YgV29ya2VyPiJ1IiYmKGQ9ITEp''@;'; put 'put ''LHR5cGVvZiBTaGFyZWRXb3JrZXI+InUiJiYoaD0hMSksZHx8aCl7dmFyIF89TVUoInNjcmlwdCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PWtzKHRoaXMpLmF0dHIoInR5cGUiKXx8a3ModGhpcykuYXR0cigic3JjIikmJmtzKHRoaXMpLmF0dHIoInNy''@;'; put 'put ''YyIpLm1hdGNoKC8uKlwvQGhwY2MtanNcL3dhc20vKX0pOzA9PV8uc2l6ZSgpPyhjb25zb2xlLndhcm4oJ05vIHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBmb3VuZCBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0h''@;'; put 'put ''MSxoPSExKToodGhpcy5fdml6VVJMPV8uYXR0cigic3JjIiksdGhpcy5fdml6VVJMfHwoY29uc29sZS53YXJuKCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1''@;'; put 'put ''c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSkpfWlmKGgpe2NvbnN0IGllPSJkYXRhOmFwcGxpY2F0aW9uL2phdmFzY3JpcHQ7YmFzZTY0LCIrYnRvYShPVC50b1N0cmluZygpKyIoIitFUWUudG9TdHJpbmcoKSsiKSgpIik7dGhpcy5fd29ya2VyPXRoaXMuX3dvcmtlcj1uZXcgU2hhcmVk''@;'; put 'put ''V29ya2VyKGllKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlci5wb3J0LHRoaXMuX3dvcmtlclBvcnRDbG9zZT10aGlzLl93b3JrZXIucG9ydC5jbG9zZS5iaW5kKHRoaXMuX3dvcmtlclBvcnQpLHRoaXMuX3dvcmtlci5wb3J0LnN0YXJ0KCksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtd''@;'; put 'put ''fWVsc2UgaWYoZCl7dmFyIFQ9bmV3IEJsb2IoW09ULnRvU3RyaW5nKCkrIigiK3hRZS50b1N0cmluZygpKyIpKCkiXSksVz13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChUKTt0aGlzLl93b3JrZXI9bmV3IFdvcmtlcihXKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlcix0aGlzLl93''@;'; put 'put ''b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnRlcm1pbmF0ZS5iaW5kKHRoaXMuX3dvcmtlciksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgRFQubG9hZCgpLnRoZW4oKGllPT57dGhpcy5fZ3JhcGh2aXpWZXJzaW9uPWllLnZlcnNpb24oKX0pLmJpbmQodGhpcykpO3RoaXMuX3Nl''@;'; put 'put ''bGVjdGlvbj1jLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9idXN5PSExLHRoaXMuX2pvYnM9W10sdGhpcy5fcXVldWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWctaW5kZXgiLCJpbmRleCJdKSx0aGlzLl9pbWFnZXM9W10sdGhpcy5fdHJhbnNsYXRpb249dm9p''@;'; put 'put ''ZCAwLHRoaXMuX3NjYWxlPXZvaWQgMCx0aGlzLl9ldmVudFR5cGVzPVsiaW5pdEVuZCIsInN0YXJ0IiwibGF5b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9jZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NFbmQiLCJy''@;'; put 'put ''ZW5kZXJTdGFydCIsInJlbmRlckVuZCIsInRyYW5zaXRpb25TdGFydCIsInRyYW5zaXRpb25FbmQiLCJyZXN0b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPXhVKC4uLnRoaXMuX2V2ZW50VHlwZXMpLExKZS5jYWxsKHRoaXMpLGMubm9kZSgpLl9fZ3JhcGh2aXpfXz10aGlz''@;'; put 'put ''fWZ1bmN0aW9uIFBUKGMsbCl7cmV0dXJuIGtzKGMpLmdyYXBodml6KGwpfXVsZS5wcm90b3R5cGU9cloucHJvdG90eXBlLGlaLnByb3RvdHlwZT1QVC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlaLGVuZ2luZTpmdW5jdGlvbiBZSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZW5naW5lPWMs''@;'; put 'put ''dGhpc30sYWRkSW1hZ2U6ZnVuY3Rpb24gV0plKGMsbCxhKXtyZXR1cm4gdGhpcy5faW1hZ2VzLnB1c2goe3BhdGg6Yyx3aWR0aDpsLGhlaWdodDphfSksdGhpc30sa2V5TW9kZTpmdW5jdGlvbiBHSmUoYyl7aWYoIXRoaXMuX2tleU1vZGVzLmhhcyhjKSl0aHJvdyBFcnJvcigiSWxsZWdhbCBr''@;'; put 'put ''ZXlNb2RlOiAiK2MpO2lmKGMhPXRoaXMuX29wdGlvbnMua2V5TW9kZSYmbnVsbCE9dGhpcy5fZGF0YSl0aHJvdyBFcnJvcigiVG9vIGxhdGUgdG8gY2hhbmdlIGtleU1vZGUiKTtyZXR1cm4gdGhpcy5fb3B0aW9ucy5rZXlNb2RlPWMsdGhpc30sZmFkZTpmdW5jdGlvbiAkSmUoYyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX29wdGlvbnMuZmFkZT1jLHRoaXN9LHR3ZWVuUGF0aHM6ZnVuY3Rpb24gcUplKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHM9Yyx0aGlzfSx0d2VlblNoYXBlczpmdW5jdGlvbiBLSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM9YyxjJiYodGhp''@;'; put 'put ''cy5fb3B0aW9ucy50d2VlblBhdGhzPSEwKSx0aGlzfSxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOmZ1bmN0aW9uIFhKZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zPWMsdGhpc30sdHdlZW5QcmVjaXNpb246ZnVuY3Rpb24gSkplKGMpe3JldHVy''@;'; put 'put ''biB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uPWMsdGhpc30sZ3Jvd0VudGVyaW5nRWRnZXM6ZnVuY3Rpb24gUUplKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzPWMsdGhpc30sem9vbTpmdW5jdGlvbiB0SmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9v''@;'; put 'put ''bT1jLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvcj9LYWUuY2FsbCh0aGlzKTohdGhpcy5fb3B0aW9ucy56b29tJiZ0aGlzLl96b29tQmVoYXZpb3ImJih0aGlzLl96b29tU2VsZWN0aW9uLm9uKCIuem9vbSIsbnVsbCksdGhpcy5fem9vbUJlaGF2aW9yPW51bGwpLHRo''@;'; put 'put ''aXN9LHJlc2V0Wm9vbTpmdW5jdGlvbiBuSmUoYyl7dmFyIGw9dGhpcy5fem9vbVNlbGVjdGlvbjtyZXR1cm4gYyYmKGw9bC50cmFuc2l0aW9uKGMpKSxsLmNhbGwodGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybSksdGhpc30sem9vbUJlaGF2aW9y''@;'; put 'put ''OmZ1bmN0aW9uIG9KZSgpe3JldHVybiB0aGlzLl96b29tQmVoYXZpb3J8fG51bGx9LHpvb21TZWxlY3Rpb246ZnVuY3Rpb24gc0plKCl7cmV0dXJuIHRoaXMuX3pvb21TZWxlY3Rpb258fG51bGx9LHpvb21TY2FsZUV4dGVudDpmdW5jdGlvbiBySmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMu''@;'; put 'put ''em9vbVNjYWxlRXh0ZW50PWMsdGhpc30sem9vbVRyYW5zbGF0ZUV4dGVudDpmdW5jdGlvbiBpSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbVRyYW5zbGF0ZUV4dGVudD1jLHRoaXN9LHJlbmRlcjpmdW5jdGlvbiBoSmUoYyl7cmV0dXJuIHRoaXMuX2J1c3k/KHRoaXMuX3F1ZXVlLnB1''@;'; put 'put ''c2godGhpcy5yZW5kZXIuYmluZCh0aGlzLGMpKSx0aGlzKToodGhpcy5fZGlzcGF0Y2guY2FsbCgicmVuZGVyU3RhcnQiLHRoaXMpLHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5P2hUKGZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvbj1WVSh0aGlzLl90cmFuc2l0aW9uRmFjdG9yeSgpKSxRYWUu''@;'; put 'put ''Y2FsbCh0aGlzLGMpfS5iaW5kKHRoaXMpLDApOlFhZS5jYWxsKHRoaXMsYyksdGhpcyl9LGxheW91dDpmdW5jdGlvbiBSSmUoYyxsLGEsZCl7aWYodGhpcy5fd29ya2VyKUpVLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6YyxlbmdpbmU6bCxvcHRpb25zOmF9LGZ1bmN0aW9uKGYpe2Qu''@;'; put 'put ''Y2FsbCh0aGlzLGYuZGF0YSl9KTtlbHNlIHRyeXt2YXIgaD10aGlzLmxheW91dFN5bmMoYywic3ZnIixsLGEpO2QuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aH0pfWNhdGNoKGYpe2QuY2FsbCh0aGlzLHt0eXBlOiJlcnJvciIsZXJyb3I6Zi5tZXNzYWdlfSl9fSxkb3Q6ZnVuY3Rpb24g''@;'; put 'put ''T0plKGMsbCl7dmFyIGE9dGhpcyxoPXRoaXMuX29wdGlvbnMuZW5naW5lLGY9dGhpcy5faW1hZ2VzO3JldHVybiB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5fYnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRTdGFydCIsdGhpcyksdGhpcy5fd29ya2Vy''@;'; put 'put ''fHxudWxsIT10aGlzLmxheW91dFN5bmM/KHRoaXMubGF5b3V0KGMsaCx7aW1hZ2VzOmZ9LGZ1bmN0aW9uKFQpe3N3aXRjaChULnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCFhLl9vbmVycm9yKXRocm93IFQuZXJyb3IubWVzc2FnZTthLl9vbmVycm9yKFQuZXJyb3IpO2JyZWFrO2Nhc2UiZG9uZSI6''@;'; put 'put ''UEplLmNhbGwodGhpcyxULnN2ZyxsKX19KSx0aGlzKToodGhpcy5fYWZ0ZXJJbml0PXRoaXMuZG90LmJpbmQodGhpcyxjLGwpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uIGNKZSgpe3JldHVybiB0aGlzLl9kYXRhfHxudWxsfSxyZW5kZXJEb3Q6ZnVuY3Rpb24gRkplKGMsbCl7dmFyIGE9dGhpczty''@;'; put 'put ''ZXR1cm4gdGhpcy5kb3QoYyxmdW5jdGlvbiBkKCl7YS5yZW5kZXIobCl9KSx0aGlzfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIEhKZShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5PWM6dGhpcy5fdHJhbnNpdGlvbj1WVShjKSx0aGlzfSxhY3Rp''@;'; put 'put ''dmU6ZnVuY3Rpb24gTkplKGMpe3ZhciBhPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKTtyZXR1cm4gMCE9YS5zaXplKCk/ZnVuY3Rpb24gT1hlKGMsbCl7dmFyIGQsaCxhPWMuX190cmFuc2l0aW9uO2lmKGEpZm9yKGggaW4gbD1udWxsPT1sP251''@;'; put 'put ''bGw6bCsiIixhKWlmKChkPWFbaF0pLnN0YXRlPjEmJmQubmFtZT09PWwpcmV0dXJuIG5ldyBMaChbW2NdXSxSWGUsbCwraCk7cmV0dXJuIG51bGx9KGEubm9kZSgpLGMpOm51bGx9LG9wdGlvbnM6ZnVuY3Rpb24gVkplKGMpe2lmKHR5cGVvZiBjPiJ1IilyZXR1cm4gT2JqZWN0LmFzc2lnbih7''@;'; put 'put ''fSx0aGlzLl9vcHRpb25zKTtmb3IodmFyIGwgb2YgT2JqZWN0LmtleXMoYykpdGhpcy5fb3B0aW9uc1tsXT1jW2xdO3JldHVybiB0aGlzfSx3aWR0aDpmdW5jdGlvbiBCSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMud2lkdGg9Yyx0aGlzfSxoZWlnaHQ6ZnVuY3Rpb24gakplKGMpe3JldHVy''@;'; put 'put ''biB0aGlzLl9vcHRpb25zLmhlaWdodD1jLHRoaXN9LHNjYWxlOmZ1bmN0aW9uIHpKZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5zY2FsZT1jLHRoaXN9LGZpdDpmdW5jdGlvbiBVSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZml0PWMsdGhpc30sYXR0cmlidXRlcjpmdW5jdGlvbiBaSmUo''@;'; put 'put ''Yyl7cmV0dXJuIHRoaXMuX2F0dHJpYnV0ZXI9Yyx0aGlzfSxvbjpmdW5jdGlvbiBlUWUoYyxsKXtyZXR1cm4gdGhpcy5fZGlzcGF0Y2gub24oYyxsKSx0aGlzfSxvbmVycm9yOmZ1bmN0aW9uIHRRZShjKXtyZXR1cm4gdGhpcy5fb25lcnJvcj1jLHRoaXN9LGxvZ0V2ZW50czpmdW5jdGlvbiBo''@;'; put 'put ''UWUoYyl7dmFyIGw9RGF0ZS5ub3coKSxhPXt9LGQ9dGhpcy5fZXZlbnRUeXBlcyxoPU1hdGgubWF4KC4uLmQubWFwKFc9PlcubGVuZ3RoKSk7Zm9yKGxldCBXPTA7VzxkLmxlbmd0aDtXKyspe2xldCBpZT1kW1ddO2FbaWVdPVtdO3ZhciBfLFQsZj10aGlzO3RoaXMub24oaWUrIi5sb2ciLGM/''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgZ2U9RGF0ZS5ub3coKSx3ZT1hW2llXS5sZW5ndGg7YVtpZV0ucHVzaChnZSk7dmFyIEVlPSIiO2lmKEVlKz0iRXZlbnQgIixFZSs9d2QoIiA+MiIpKFcpKyIgIixFZSs9aWUrIiAiLnJlcGVhdChoLWllLmxlbmd0aCksRWUrPXdkKCIgPjUiKShnZS1sKSsiICIsImlu''@;'; put 'put ''aXRFbmQiIT1pZSYmKEVlKz13ZCgiID41IikoZ2UtYS5zdGFydFt3ZV0pKSwiZGF0YVByb2Nlc3NFbmQiPT1pZSYmKEVlKz0iIHByZXBhcmUgICAgICAgICAgICAgICAgICIrd2QoIiA+NSIpKGdlLWEubGF5b3V0RW5kW3dlXSkpLCJyZW5kZXJFbmQiPT1pZSYmZi5fdHJhbnNpdGlvbiYmKEVl''@;'; put 'put ''Kz0iIHRyYW5zaXRpb24gc3RhcnQgbWFyZ2luICIrd2QoIiA+NSIpKGYuX3RyYW5zaXRpb24uZGVsYXkoKS0oZ2UtYS5yZW5kZXJTdGFydFt3ZV0pKSxfPWYuX3RyYW5zaXRpb24uZGVsYXkoKSxUPWYuX3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFydCI9PWllKXt2YXIg''@;'; put 'put ''WmU9Z2UtYS5yZW5kZXJTdGFydFt3ZV07RWUrPSIgdHJhbnNpdGlvbiBkZWxheSAgICAgICAgIit3ZCgiID41IikoZ2UtYS5yZW5kZXJTdGFydFt3ZV0pLEVlKz0iIGV4cGVjdGVkICIrd2QoIiA+NSIpKF8pLEVlKz0iIGRpZmYgIit3ZCgiID41IikoWmUtXyl9aWYoInRyYW5zaXRpb25FbmQi''@;'; put 'put ''PT1pZSl7dmFyIG90PWdlLWEudHJhbnNpdGlvblN0YXJ0W3dlXTtFZSs9IiB0cmFuc2l0aW9uIGR1cmF0aW9uICAgICAiK3dkKCIgPjUiKShvdCksRWUrPSIgZXhwZWN0ZWQgIit3ZCgiID41IikoVCksRWUrPSIgZGlmZiAiK3dkKCIgPjUiKShvdC1UKX1jb25zb2xlLmxvZyhFZSksbD1nZX06''@;'; put 'put ''bnVsbCl9cmV0dXJuIHRoaXN9LGRlc3Ryb3k6ZnVuY3Rpb24gZlFlKCl7cmV0dXJuIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb24ubm9kZSgpLl9fZ3JhcGh2aXpfXyx0aGlzLl93b3JrZXImJnRoaXMuX3dvcmtlclBvcnRDbG9zZSgpLHRoaXN9LGRyYXdFZGdlOmZ1bmN0aW9uIHZRZShjLGwsYSxk''@;'; put 'put ''LGgsZj17fSl7aWYoKGg9T2JqZWN0LmFzc2lnbih7fSxoKSkuc3R5bGUmJmguc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIF89a3MobnVsbCk7ZWxzZXt2YXIgaWU9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRh''@;'; put 'put ''UHJvcGFnYXRpb24oImciKSx3ZT1YZyhnbGUuY2FsbCh0aGlzLGgpKTtfPWllLmFwcGVuZCgiZyIpLmRhdGEoW3dlXSksdncuY2FsbChfLm5vZGUoKSx3ZSksZGxlLmNhbGwodGhpcyxfLGMsbCxhLGQsaCxmKX1yZXR1cm4gdGhpcy5fZHJhd25FZGdlPXtnOl8seDE6Yyx5MTpsLHgyOmEseTI6''@;'; put 'put ''ZCxhdHRyaWJ1dGVzOmh9LHRoaXN9LHVwZGF0ZURyYXduRWRnZTpmdW5jdGlvbiBfUWUoYyxsLGEsZCxoPXt9LGY9e30pe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgXz10aGlzLl9kcmF3bkVkZ2UuZztyZXR1cm4gaD1PYmpl''@;'; put 'put ''Y3QuYXNzaWduKHRoaXMuX2RyYXduRWRnZS5hdHRyaWJ1dGVzLGgpLHRoaXMuX2RyYXduRWRnZS54MT1jLHRoaXMuX2RyYXduRWRnZS55MT1sLHRoaXMuX2RyYXduRWRnZS54Mj1hLHRoaXMuX2RyYXduRWRnZS55Mj1kLCFfLmVtcHR5KCl8fGguc3R5bGUmJmguc3R5bGUuaW5jbHVkZXMoImlu''@;'; put 'put ''dmlzIil8fChfPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuYXBwZW5kKCJnIiksdGhpcy5fZHJhd25FZGdlLmc9XyksXy5lbXB0eSgpfHxkbGUuY2FsbCh0aGlzLF8sYyxsLGEsZCxo''@;'; put 'put ''LGYpLHRoaXN9LG1vdmVEcmF3bkVkZ2VFbmRQb2ludDpmdW5jdGlvbiBiUWUoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bkVkZ2UuZyxoPXRoaXMuX2RyYXduRWRnZS54MSxmPXRoaXMu''@;'; put 'put ''X2RyYXduRWRnZS55MSxfPXRoaXMuX2RyYXduRWRnZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bkVkZ2UueDI9Yyx0aGlzLl9kcmF3bkVkZ2UueTI9bCxobGUoZCxoLGYsYyxsLF8sYSksdGhpc30saW5zZXJ0RHJhd25FZGdlOmZ1bmN0aW9uIHlRZShjKXtpZighdGhpcy5fZHJhd25F''@;'; put 'put ''ZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIGw9dGhpcy5fZHJhd25FZGdlLmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlzO2wuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpO3ZhciBfPXRoaXMuX3NlbGVjdGlvbi5zZWxl''@;'; put 'put ''Y3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksVD1fLmRhdHVtKCksVz10aGlzLl9leHRyYWN0RGF0YShsLFQuY2hpbGRyZW4ubGVuZ3RoLF8uZGF0dW0oKSk7cmV0dXJuIFQuY2hpbGRyZW4ucHVzaChXKSxZVShsLFcpLHRo''@;'; put 'put ''aXMuX2RyYXduRWRnZT1udWxsLHRoaXN9LHJlbW92ZURyYXduRWRnZTpmbGUscmVtb3ZlRHJhd25FZGdlOmZsZSxkcmF3bkVkZ2VTZWxlY3Rpb246cGxlLGRyYXduRWRnZVNlbGVjdGlvbjpwbGUsZHJhd05vZGU6ZnVuY3Rpb24gd1FlKGMsbCxhLGQ9e30saD17fSl7aWYoKGQ9T2JqZWN0LmFz''@;'; put 'put ''c2lnbih7fSxkKSkuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIGY9a3MobnVsbCk7ZWxzZXt2YXIgVz10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLGdlPVhnKHls''@;'; put 'put ''ZS5jYWxsKHRoaXMsYSxkKSk7Zj1XLmFwcGVuZCgiZyIpLmRhdGEoW2dlXSksdncuY2FsbChmLm5vZGUoKSxnZSksbWxlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCl9cmV0dXJuIHRoaXMuX2RyYXduTm9kZT17ZzpmLG5vZGVJZDphLHg6Yyx5OmwsYXR0cmlidXRlczpkfSx0aGlzfSx1cGRhdGVE''@;'; put 'put ''cmF3bk5vZGU6ZnVuY3Rpb24gQ1FlKGMsbCxhLGQ9e30saD17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBudWxsPT1hJiYoYT10aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxk''@;'; put 'put ''PU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXMsZCksdGhpcy5fZHJhd25Ob2RlLm5vZGVJZD1hLHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCwhZi5lbXB0eSgpfHxkLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoZj10aGlz''@;'; put 'put ''Ll9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5nPWYpLGYuZW1wdHkoKXx8bWxlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCksdGhpc30sbW92ZURy''@;'; put 'put ''YXduTm9kZTpmdW5jdGlvbiBTUWUoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bk5vZGUuZyxoPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bk5vZGUu''@;'; put 'put ''eD1jLHRoaXMuX2RyYXduTm9kZS55PWwsZC5lbXB0eSgpfHx2bGUoZCxjLGwsaCksdGhpc30saW5zZXJ0RHJhd25Ob2RlOmZ1bmN0aW9uIE1RZShjKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7bnVsbD09YyYmKGM9dGhpcy5fZHJh''@;'; put 'put ''d25Ob2RlLm5vZGVJZCk7dmFyIGw9dGhpcy5fZHJhd25Ob2RlLmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlzO3ZhciBhPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpLGEuVVJMfHxhLnRvb2x0aXAp''@;'; put 'put ''dmFyIGY9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLFQ9KGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxmLnNlbGVjdFdpdGhvdXREYXRhUHJv''@;'; put 'put ''cGFnYXRpb24oInRleHQiKSk7ZWxzZSBsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksVD1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtULnRleHQoYS5sYWJlbHx8Yyk7dmFyIGdlPXRoaXMuX3NlbGVj''@;'; put 'put ''dGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksd2U9Z2UuZGF0dW0oKSxFZT10aGlzLl9leHRyYWN0RGF0YShsLHdlLmNoaWxkcmVuLmxlbmd0aCxnZS5kYXR1bSgpKTtyZXR1cm4gd2UuY2hpbGRyZW4ucHVz''@;'; put 'put ''aChFZSksWVUobCxFZSksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc30scmVtb3ZlRHJhd25Ob2RlOl9sZSxyZW1vdmVEcmF3bk5vZGU6X2xlLGRyYXduTm9kZVNlbGVjdGlvbjpibGUsZHJhd25Ob2RlU2VsZWN0aW9uOmJsZSxncmFwaHZpelZlcnNpb246ZnVuY3Rpb24gZkplKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2dyYXBodml6VmVyc2lvbn19LFlnLnByb3RvdHlwZS5ncmFwaHZpej1mdW5jdGlvbiBrUWUoYyl7dmFyIGw9dGhpcy5ub2RlKCkuX19ncmFwaHZpel9fO3JldHVybiBsPyhsLm9wdGlvbnMoYyksaFQoZnVuY3Rpb24oKXtsLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKX0u''@;'; put 'put ''YmluZCh0aGlzKSwwKSk6bD1uZXcgaVoodGhpcyxjKSxsfSxZZy5wcm90b3R5cGUuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbj1mdW5jdGlvbiBBUWUoYyl7cmV0dXJuIGtzKHRoaXMuc2l6ZSgpPjA/dGhpcy5ub2RlKCkucXVlcnlTZWxlY3RvcihjKTpudWxsKX07dmFyIFRRZT1GKDg4''@;'; put 'put ''NzAwKTtmdW5jdGlvbiBEUWUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyOCl9ZnVuY3Rpb24gSVFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgyKTtyZXR1cm4gaC5saWJyYXJp''@;'; put 'put ''ZXNTZWFyY2g9IiIsanQoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBMUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMikoMSwiZGl2IiwyMykoMiwiaW5wdXQiLDI0LDI1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''aCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkubGlicmFyaWVzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCksUWUoNCxEUWUsMSwwLCJjbHItaWNvbiIsMjYpLFFlKDUsSVFlLDEsMCwiY2xyLWljb24iLDI3''@;'; put 'put ''KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9amUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFJRZShjLGwpezEm''@;'; put 'put ''YyYmcXQoMCwiY2xyLWljb24iLDI4KX1mdW5jdGlvbiBPUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMjkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxqZSgpO2NvbnN0IGg9JGkoMyksZj1qZSgyKS4kaW1wbGljaXQsXz1qZSgpO3JldHVybiBoLnZh''@;'; put 'put ''bHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSx5ZSgpfX1mdW5jdGlvbiBQUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMikoMSwiZGl2IiwyMykoMiwiaW5wdXQiLDM1LDM2''@;'; put 'put ''KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkudHJlZU9uRmlsdGVyKGgsInRh''@;'; put 'put ''Ymxlcy5UQUJMRU5BTUUiKSl9KSx5ZSgpLFFlKDQsUlFlLDEsMCwiY2xyLWljb24iLDI2KSxRZSg1LE9RZSwxLDAsImNsci1pY29uIiwyNykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPWplKDIpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENl''@;'; put 'put ''KDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEZRZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI4KX1mdW5jdGlvbiBIUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIs''@;'; put 'put ''MjkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxqZSgpO2NvbnN0IGg9JGkoMyksZj1qZSgpLiRpbXBsaWNpdCxfPWplKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLHllKCl9fWZ1bmN0''@;'; put 'put ''aW9uIE5RZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDIyKSgxLCJkaXYiLDIzKSgyLCJpbnB1dCIsMzksMzYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgp''@;'; put 'put ''fSkoImtleXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSx5ZSgpLFFlKDQsRlFlLDEsMCwiY2xyLWljb24iLDI2KSxRZSg1LEhRZSwxLDAsImNsci1pY29uIiwyNyks''@;'; put 'put ''eWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPWplKCkuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gVlFlKGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdCxfPWplKCkuJGltcGxpY2l0LFQ9amUoMikuJGltcGxpY2l0O3JldHVybiBqdChqZSgpLmNvbHVtbk9u''@;'; put 'put ''Q2xpY2soZixULF8pKX0pLHF0KDIsImNsci1pY29uIiw0MSksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWplKDQpO0NlKDEpLGhyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLENlKDIpLG1yKCIgIixhLkNPTE5BTUUsIiAi''@;'; put 'put ''KX19ZnVuY3Rpb24gQlFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD1qZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkudHJlZU5vZGVDbGlja2VkKGgs''@;'; put 'put ''XyxULnRhYmxlcykpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsMzcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdCxfPWplKDIpLiRpbXBsaWNpdDty''@;'; put 'put ''ZXR1cm4ganQoamUoKS50YWJsZU9uQ2xpY2soZi5UQUJMRVVSSSxmLF8pKX0pLHF0KDIsImNsci1pY29uIiwzOCksTmUoMykseWUoKSxRZSg0LE5RZSw2LDMsImNsci10cmVlLW5vZGUiLDEpLFFlKDUsVlFlLDQsMywiY2xyLXRyZWUtbm9kZSIsMikseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4k''@;'; put 'put ''aW1wbGljaXQ7aHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksQ2UoMSksUmUoImlkIixhLlRBQkxFVVJJKSxDZSgyKSxtcigiICIsYS5UQUJMRU5BTUUsIiAi''@;'; put 'put ''KSxDZSgxKSxSZSgibmdJZiIsYS5jb2x1bW5zKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24galFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1qZSgp''@;'; put 'put ''LiRpbXBsaWNpdCxfPWplKCk7cmV0dXJuIGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLmxpYnJhcnlMaXN0KSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDMyKSx4dCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpLiRpbXBsaWNpdCxmPWplKCk7cmV0dXJuIGYubGliPWguTElCUkFSWUlELGp0KGYubGlicmFyeU9uQ2xpY2soZi5saWJ8fCIiLGgpKX0pLHF0KDIsImNsci1pY29uIiwzMyksTmUoMykseWUoKSxRZSg0LFBRZSw2LDMsImNsci10cmVl''@;'; put 'put ''LW5vZGUiLDEpLFFlKDUsQlFlLDYsOCwiY2xyLXRyZWUtbm9kZSIsMzQpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKCkuJGltcGxpY2l0O2hyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxl''@;'; put 'put ''cyYmIWEudGFibGVzKSxDZSgzKSxtcigiICIsYS5MSUJSQVJZTkFNRSwiICIpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gelFlKGMsbCl7aWYoMSZjJiYoenIoMCksUWUoMSxqUWUsNiw3LCJjbHItdHJlZS1ub2RlIiwz''@;'; put 'put ''MCksWXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gVVFlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw0MikoMSwic3BhbiIsNDMpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rp''@;'; put 'put ''b24gWlFlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw0NCkscXQoMSwiY2xyLWljb24iLDQ1KSxtZSgyLCJoMyIsNDYpLE5lKDMsIlBsZWFzZSBzZWxlY3QgYSBjb2x1bW4gb3IgdGFibGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIFlRZShjLGwpe2lmKDEmYyYmKG1lKDAsImgzIiw1NSksTmUoMSkseWUo''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPWplKDMpO0NlKDEpLG1yKCIgIixhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj9hLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKyIuIithLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbjphLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlLCIgIil9fWZ1bmN0aW9u''@;'; put 'put ''IFdRZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNTMpLFFlKDEsWVFlLDIsMSwiaDMiLDU0KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoMSksUmUoIm5nSWYiLCFhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbiYmIWEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUpfX1mdW5jdGlv''@;'; put 'put ''biBHUWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSksbWUoMiwiYSIsNTYpLE5lKDMpLHllKCksTmUoNCkseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLG1yKCIgIixhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVswXSwiLiIpLENlKDEpLFJlKCJyb3V0ZXJMaW5r''@;'; put 'put ''IiwiL3ZpZXcvZGF0YS8iK2EubGluZWFnZVRhYmxlTmFtZSksQ2UoMSksb3IoYS5saW5lYWdlVGFibGVOYW1lLnNwbGl0KCIuIilbMV0pLENlKDEpLG1yKCIiLGEubGluZWFnZUNvbHVtbk5hbWUubGVuZ3RoPjA/Ii4iK2EubGluZWFnZUNvbHVtbk5hbWU6IiIsIiAiKX19ZnVuY3Rpb24gJFFl''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSg0KS5kb3dubG9hZFBORygpKX0pLE5lKDEsIiBQTkcgIikseWUoKX19ZnVuY3Rpb24gcVFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo''@;'; put 'put ''MCwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSg0KS5kb3dubG9hZENTVigpKX0pLE5lKDEsIiBDU1YgIikseWUoKX19ZnVuY3Rpb24gS1FlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJk''@;'; put 'put ''aXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDMpLmRvd25sb2FkU1ZHKCkpfSksTmUoMiwiU1ZHIikseWUoKSxRZSgzLCRRZSwyLDAsImRpdiIsNjcpLG1lKDQsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUo''@;'; put 'put ''MykuZG93bmxvYWREb3QoKSl9KSxOZSg1LCJEb3QiKSx5ZSgpLFFlKDYscVFlLDIsMCwiZGl2Iiw2NykseWUoKX1pZigyJmMpe2NvbnN0IGE9amUoMyk7Q2UoMyksUmUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpLENlKDMpLFJlKCJuZ0lmIixhLmZsYXRkYXRhKX19ZnVu''@;'; put 'put ''Y3Rpb24gWFFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY4KSgxLCJpbnB1dCIsNjkpLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDMpLmdlbmVyYXRlR3JhcGgoKSl9KSgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKDMpLnJlZnJlc2hDYWNoZT1oKX0pLHllKCksbWUoMiwibGFiZWwiKSxOZSgzLCJSZWZyZXNoIENhY2hlIikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1qZSgzKTtDZSgxKSxSZSgibmdNb2RlbCIsYS5yZWZyZXNoQ2FjaGUpfX1mdW5jdGlvbiBK''@;'; put 'put ''UWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDU3KSgxLCJidXR0b24iLDU4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLmxpbWl0RG90RGVwdGg9ITApfSksTmUoMiwiIExpbWl0IGRlcHRoICIpLHllKCksbWUoMywiZGl2Iiw1OSko''@;'; put 'put ''NCwiZGl2Iiw2MCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoMik7cmV0dXJuIGguZm9yd2FyZExpbmVhZ2U9ITEsanQoaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKT9oLm9uR2VuZXJhdGVDbGljaygpOmgub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygp''@;'; put 'put ''KX0pLHF0KDUsImlucHV0Iiw2MSksbWUoNiwibGFiZWwiKSxOZSg3LCJCYWNrd2FyZCIpLHllKCkoKSxtZSg4LCJkaXYiLDYwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMCxqdChoLnJvdXRlci51cmwuaW5jbHVk''@;'; put 'put ''ZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSkscXQoOSwiaW5wdXQiLDYxKSxtZSgxMCwibGFiZWwiKSxOZSgxMSwiRm9yd2FyZCIpLHllKCkoKSgpLG1lKDEyLCJjbHItZHJvcGRvd24iLDYyKSgxMywiYnV0dG9uIiw2Myks''@;'; put 'put ''TmUoMTQsIiBEb3dubG9hZCAiKSxxdCgxNSwiY2xyLWljb24iLDE5KSx5ZSgpLFFlKDE2LEtRZSw3LDIsImNsci1kcm9wZG93bi1tZW51IiwyMCkseWUoKSxRZSgxNyxYUWUsNCwxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNjQpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKDIpO0NlKDUpLFJl''@;'; put 'put ''KCJjaGVja2VkIiwhYS5mb3J3YXJkTGluZWFnZSksQ2UoNCksUmUoImNoZWNrZWQiLGEuZm9yd2FyZExpbmVhZ2UpLENlKDQpLFJlKCJkaXNhYmxlZCIsIWEuY29sdW1uJiYhYS50YWJsZSksQ2UoNCksUmUoIm5nSWYiLGEuY29sdW1uKX19ZnVuY3Rpb24gUVFlKGMsbCl7MSZjJiYobWUoMCwi''@;'; put 'put ''c3BhbiIsNzMpLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIGVldChjLGwpezEmYyYmcXQoMCwic3BhbiIsNDMpfWZ1bmN0aW9uIHRldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNzQpKDEsImRpdiIsNzUpLFFlKDIsZWV0LDEsMCwic3BhbiIsNzYpLHllKCkscXQoMywi''@;'; put 'put ''ZGl2Iiw3NykseWUoKSksMiZjKXtjb25zdCBhPWplKDMpO0NlKDIpLFJlKCJuZ0lmIixhLmdyYXBoUmVuZGVyaW5nKX19ZnVuY3Rpb24gbmV0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiZGl2Iiw3MCksUWUoMixRUWUsMiwwLCJzcGFuIiw3MSksUWUoMyx0ZXQsNCwxLCJkaXYiLDcy''@;'; put 'put ''KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgyKTtocigibXQtMiIsYS50YWJsZUZsYWcpLENlKDIpLFJlKCJuZ0lmIixhLmdyYXBoTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFhLmdyYXBoTG9hZGluZyl9fWZ1bmN0aW9uIHJldChjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsV1FlLDIsMSwi''@;'; put 'put ''ZGl2Iiw0NyksbWUoMiwiZGl2Iiw0OCkoMywic2VjdGlvbiIsNDkpKDQsImRpdiIsNTApLFFlKDUsR1FlLDUsNCwic3BhbiIsNykseWUoKSxRZSg2LEpRZSwxOCw0LCJkaXYiLDUxKSx5ZSgpLFFlKDcsbmV0LDQsNCwiZGl2Iiw1MikseWUoKSxZcigpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgx''@;'; put 'put ''KSxSZSgibmdJZiIsIWEuZ3JhcGhDb250YWluZXIpLENlKDQpLFJlKCJuZ0lmIixhLmxpbmVhZ2VUYWJsZU5hbWUubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKSxDZSgxKSxSZSgibmdJZiIsYS5ncmFwaENvbnRhaW5lcil9fWZ1bmN0aW9uIGlldChjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoMikucmVuZGVyVG9Eb3dubG9hZCgiUE5HIikpfSksTmUoMSwiIFBORyAiKSx5ZSgpfX1mdW5jdGlvbiBvZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtt''@;'; put 'put ''ZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNjUpKDEsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5yZW5kZXJUb0Rvd25sb2FkKCJTVkciKSl9KSxOZSgyLCJTVkciKSx5ZSgpLFFlKDMsaWV0LDIsMCwiZGl2Iiw2NyksbWUoNCwiZGl2Iiw2Niks''@;'; put 'put ''eHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKTtyZXR1cm4gaC5kb3dubG9hZERvdCgpLGp0KGguY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSl9KSxOZSg1LCIgRG90ICIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoKTtDZSgzKSxSZSgibmdJZiIsIWEuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5pc01pY3Jvc29mdCl9fWNvbnN0IHNldD1GKDE2Njc2KTtsZXQgRlQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMucm91dGVyPWYsdGhpcy5sb2Nh''@;'; put 'put ''dGlvbj1fLHRoaXMuZXZlbnRTZXJ2aWNlPVQsdGhpcy5sb2dnZXJTZXJ2aWNlPVcsdGhpcy5oZWxwZXJTZXJ2aWNlPWllLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmZvcndhcmRMaW5lYWdlPSExLHRoaXMuZmxhdGRhdGE9W10sdGhpcy5ncmFwaExvYWRpbmc9''@;'; put 'put ''ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMudGFibGVDb2x1bW5zUmVmPSIiLHRo''@;'; put 'put ''aXMubGluZWFnZVRhYmxlTmFtZT0iIix0aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGwsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT0iIix0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aENv''@;'; put 'put ''bHVtbj0iIix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMsdGhpcy5saW1pdERvdERlcHRoPSExLHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9MjAwfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFi''@;'; put 'put ''bGVGbGFnPSF0aGlzLnRhYmxlRmxhZ310YWJsZU9uQ2xpY2soYSxkLGgsZj0hMSl7dmFyIF89dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7ZC5jb2x1bW5zPyhkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLCEwPT09ZC5leHBhbmRlZCYmKF8udGFibGU9YSxmfHxfLm9uR2VuZXJhdGVHcmFwaFRh''@;'; put 'put ''YmxlQ2xpY2soKSkpOihkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQubG9hZGluZ0NvbHVtbnM9ITAsXy50YWJsZT1hLF8uY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU9ZC5MSUJOQU1FKyIuIitkLlRBQkxFTkFNRSx5aWVsZCBfLnNlbGVjdFRhYmxlKGEsZCksZnx8Xy5vbkdlbmVyYXRlR3Jh''@;'; put 'put ''cGhUYWJsZUNsaWNrKCkpLF8uY29sbGFwc2VUcmVlSXRlbXMoaC50YWJsZXMsZCl9KSgpfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7dGFibGV1cmk6YX1dfTt5aWVsZCBo''@;'; put 'put ''LnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRhY29scyIsZikudGhlbihfPT57aC5jb2x1bW5zTGlzdD1fLm1ldGFjb2xzLGguY29sdW1uc0xpc3QmJmguY29sdW1uc0xpc3QubGVuZ3RoPjAmJihkLmNvbHVtbnM9aC5jb2x1bW5zTGlzdCxkLmV4cGFuZGVkPSEwLGQubG9hZGlu''@;'; put 'put ''Z0NvbHVtbnM9ITEpfSkuY2F0Y2goXz0+XyksaC5zZXRHbG9iYWxEYXRhKCl9KSgpfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlM''@;'; put 'put ''aXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEu''@;'; put 'put ''dGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtkLmluRm9yZWdyb3VuZD0hMCxkLnRhYmxlcz9kLmV4cGFuZGVkPSFkLmV4cGFuZGVkOihkLmxvYWRpbmdUYWJsZXM9ITAs''@;'; put 'put ''eWllbGQgaC5zZWxlY3RMaWJyYXJ5KGEsZCkpLGguY29sbGFwc2VUcmVlSXRlbXMoaC5saWJyYXJ5TGlzdCxkKX0pKCl9c2VsZWN0TGlicmFyeShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2gudGFibGVzTGlzdD1bXSxoLmNvbHVtbnNMaXN0PVtdO2xldCBmPXtTQVND''@;'; put 'put ''b250cm9sVGFibGU6W3tsaWJ1cmk6YX1dfTt5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRhdGFibGVzIixmKS50aGVuKF89PntoLnRhYmxlc0xpc3Q9Xy5tZXRhdGFibGVzLGgudGFibGVzTGlzdCYmaC50YWJsZXNMaXN0Lmxlbmd0aD4wJiYoZC50YWJsZXM9aC50''@;'; put 'put ''YWJsZXNMaXN0LGQuZXhwYW5kZWQ9ITApLGguc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2goXz0+XyksZC5sb2FkaW5nVGFibGVzPSExfSkoKX1jb2x1bW5PbkNsaWNrKGEsZCxoKXt0aGlzLmxpYj1kLkxJQlJBUllJRCx0aGlzLnRhYmxlPWguVEFCTEVVUkksdGhpcy5jb2x1bW49YS5DT0xVUkks''@;'; put 'put ''dGhpcy5zZXRHbG9iYWxEYXRhKCksdGhpcy5vbkdlbmVyYXRlQ2xpY2soKX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlM''@;'; put 'put ''aXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEduLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1u''@;'; put 'put ''LnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3RoLTFdPT1oW2gubGVuZ3RoLTFdfXNldEdsb2JhbERhdGEoKXtHbi5saW5lYWdlLmxpYnJhcnlMaXN0PXRoaXMubGlicmFyeUxpc3QsR24ubGluZWFnZS50YWJsZXNMaXN0PXRoaXMudGFibGVzTGlzdCxHbi5saW5lYWdlLmNvbHVtbnNMaXN0''@;'; put 'put ''PXRoaXMuY29sdW1uc0xpc3QsR24ubGluZWFnZS5saWI9dGhpcy5saWIsR24ubGluZWFnZS50YWJsZT10aGlzLnRhYmxlLEduLmxpbmVhZ2UuY29sdW1uPXRoaXMuY29sdW1ufWxvYWRHbG9iYWxEYXRhKCl7dGhpcy5saWJyYXJ5TGlzdD1Hbi5saW5lYWdlLmxpYnJhcnlMaXN0LHRoaXMudGFi''@;'; put 'put ''bGVzTGlzdD1Hbi5saW5lYWdlLnRhYmxlc0xpc3QsdGhpcy5jb2x1bW5zTGlzdD1Hbi5saW5lYWdlLmNvbHVtbnNMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoPUduLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNofXJlc3VibWl0V2l0aE1heERlcHRoKGEpe2xldCBkO3RoaXMuY2FuY2VsUmVuZGVy''@;'; put 'put ''aW5nR3JhcGgoKSxhJiYoZD17bWF4X2RlcHRoOmF9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOmR9KX1uZ09uSW5pdCgpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2xpbmVhZ2UiO2xldCBhPXRoaXMucm91dGUu''@;'; put 'put ''c25hcHNob3QucGFyYW1zLnJlbG9hZDtpZih2b2lkIDAhPT1hKXtsZXQgZD10aGlzLnJvdXRlci51cmw7InJlbG9hZCI9PT1hP2xvY2FsU3RvcmFnZS5nZXRJdGVtKCJmaXJzdExvYWQiKT8obG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImZpcnN0TG9hZCIpLHRoaXMubG9jYXRpb24ucmVwbGFj''@;'; put 'put ''ZVN0YXRlKGQuc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKSk6KGxvY2FsU3RvcmFnZS5maXJzdExvYWQ9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sMmUzKSk6dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdElu''@;'; put 'put ''ZGV4T2YoIi8iKSkpfXRoaXMuaW5pdERhdGEoKX1pbml0RGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe0duLmxpbmVhZ2UubGlicmFyeUxpc3QmJihHbi5saW5lYWdlLmxpYnJhcnlMaXN0Lmxlbmd0aD4wP2EubG9hZEdsb2JhbERhdGEoKTp5aWVsZCBhLnNhc1NlcnZp''@;'; put 'put ''Y2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKS50aGVuKF89PnthLmxpYnJhcnlMaXN0PV8uc2FzbGlicyxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcnlMaXN0KSxhLmxpYnJhcnlMaXN0JiZhLmxpYnJhcnlMaXN0Lmxlbmd0aD4wJiYoYS5saWI9YS5s''@;'; put 'put ''aWJyYXJ5TGlzdFswXS5MSUJSQVJZSUQpLGEuc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2goXz0+XyksYS5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoXz0+e2Eub25Sb3V0ZUNoYW5nZSgpfSksYS5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKF89PnthLm9uUm91dGVDaGFuZ2UoKX0pKX0pKCl9''@;'; put 'put ''b25Sb3V0ZUNoYW5nZSgpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuY29sdXJpLGQ9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZGlyZWN0''@;'; put 'put ''aW9uLGg9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVpZCxmPXRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMubWF4X2RlcHRoO2EmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhpcy5jb2x1bW49YSx0aGlzLmdlbmVyYXRlR3JhcGgoYSxkLGYp''@;'; put 'put ''KSwhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKSYmaCYmZCYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09ZCx0aGlzLnRhYmxlPWgsdGhpcy5nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChoLGQsZikpfSx0aGlzLmRlYm91bmNlVGltZSl9bmdBZnRlckNvbnRlbnRJ''@;'; put 'put ''bml0KCl7fWRpcmVjdGlvblRleHQoKXtyZXR1cm4gdGhpcy5mb3J3YXJkTGluZWFnZT8iRk9SV0FSRCI6IlJFVkVSU0UifW9uR2VuZXJhdGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy5jb2x1bW4/dGhpcy5jb2x1bW4uc3Vic3RyaW5nKHRoaXMuY29sdW1uLmlu''@;'; put 'put ''ZGV4T2YoIlxcIikrMSk6bnVsbDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlL2NvbHVtbi8iK2QrIi8iK2EpfW9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMudGFibGUuaW5jbHVkZXMoIlxcIik/dGhp''@;'; put 'put ''cy50YWJsZS5zcGxpdCgiXFwiKVsxXTp0aGlzLnRhYmxlO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvIitkKyIvIithKX1nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e1NBU0NvbnRy''@;'; put 'put ''b2xUYWJsZTpbe3RhYmxlX2lkOmEsZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1bmRlZmluZWQiPT09Xy5TQVNDb250cm9sVGFibGVbMF0udGFibGVfaWQmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoVGFibGVMZXZlbCgpIiwi''@;'; put 'put ''dGFibGVfaWQgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJihfLlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1''@;'; put 'put ''dD0iIixuZXcgUHJvbWlzZSgoVCxXKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFibGVsaW5lYWdlIixfKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGllPWZpKGZ1bmN0aW9uKihnZSl7aWYoZ2UuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tM''@;'; put 'put ''aW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBw''@;'; put 'put ''b3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiBnZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRh''@;'; put 'put ''YmxlTmFtZT1nZS5pbmZvWzBdLkxJQlJFRisiLiIrZ2UuaW5mb1swXS5UQUJMRU5BTUU7bGV0IHdlPWdlLmZpbmFsZmluYWwsRWU9IiI7Zm9yKGxldCBaZT0wO1plPHdlLmxlbmd0aDtaZSsrKUVlKz11bmVzY2FwZSh3ZVtaZV0uTElORSkrIlxuIjtpZihmLmZsYXRkYXRhPWdlLmZsYXRkYXRh''@;'; put 'put ''LGYubGlicmFyeUxpc3Qpe2xldCBaZT1mLmxpYnJhcnlMaXN0LmZpbmQob3Q9PmdlLmluZm9bMF0uTElCVVJJLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMob3QuTElCUkFSWUlELnRvVXBwZXJDYXNlKCkpKTtpZihaZSl7bGV0IG90O2lmKHlpZWxkIGYubGlicmFyeU9uQ2xpY2soWmUuTElCUkFS''@;'; put 'put ''WUlELFplKSxaZS50YWJsZXMmJihvdD1aZS50YWJsZXMuZmluZChldD0+ZXQuVEFCTEVVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhnZS5pbmZvWzBdLlRBQkxFSUQudG9VcHBlckNhc2UoKSkpLG90KSl7aWYoZi50YWJsZT1vdC5UQUJMRVVSSSxmLnRhYmxlKXtjb25zdCBldD1mLnRhYmxl''@;'; put 'put ''LnJlcGxhY2UoIlxcIiwiXFxcXCIpO3NldFRpbWVvdXQoKCk9PntsZXQgeXQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke2V0fSddYCk7eXQmJnl0LnNjcm9sbEludG9WaWV3KCl9LDFlMyl9Zi50YWJsZU9uQ2xpY2sob3QuVEFCTEVVUkksb3QsWmUsdm9pZCAwIT09ZCl9WmUmJiha''@;'; put 'put ''ZS5leHBhbmRlZD0hMCksb3QmJihvdC5leHBhbmRlZD0hMCl9fWYudml6SW5wdXQ9RWV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuaWRsb29r''@;'; put 'put ''dXA9Z2UuaWRsb29rdXAsZ2UuZmluYWxmaW5hbC5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPWdlLmZpbmFsZmluYWwubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLFQoKX0pO3JldHVybiBmdW5jdGlvbihnZSl7cmV0dXJuIGllLmFwcGx5KHRoaXMsYXJndW1l''@;'; put 'put ''bnRzKX19KCkpLmNhdGNoKGllPT57Zi5ncmFwaExvYWRpbmc9ITEsZi5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWNhbmNlbFJlbmRlcmluZ0dyYXBoKCl7dGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVs''@;'; put 'put ''bCx0aGlzLmJ1aWxkR3JhcGgoKX1jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl7dGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgoKT0+e2lmKG51bGwhPT10aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7c3dpdGNoKHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2Fk''@;'; put 'put ''KXtjYXNlIlBORyI6dGhpcy5kb3dubG9hZFBORygpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLmRvd25sb2FkU1ZHKCl9dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5idWlsZEdyYXBoKCl9''@;'; put 'put ''fSl9cmVuZGVyVG9Eb3dubG9hZChhKXtzd2l0Y2goYSl7Y2FzZSJQTkciOnRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJQTkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iU1ZHIix0aGlzLmNvbnRp''@;'; put 'put ''bnVlUmVuZGVyaW5nR3JhcGgoKX19bWFrZUdyYXBoTGlua2FibGUoYSl7bGV0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI2dyYXBoIC5ub2RlIik7Zm9yKGxldCBoIG9mIGQpe2xldCBULGY9aC5xdWVyeVNlbGVjdG9yKCJ0aXRsZSIpLmlubmVySFRNTCxfPWEuZmluZChXPT5XLk1F''@;'; put 'put ''VEFJRD09PWYpO18mJihUPSJUQUJMRSI9PT1fLk1FVEFUWVBFPyIvdmlldy9kYXRhLyIrXy5NRVRBTkFNRToiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIrXy5NRVRBSUQsaC5jbGFzc0xpc3QuYWRkKCJjdXJzb3ItcG9pbnRlciIpLGguYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLFc9Pnt0aGlz''@;'; put 'put ''LnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFQpfSkpfX1nZW5lcmF0ZUdyYXBoKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17U0FTQ29udHJvbFRhYmxlOlt7Y29sdXJpOmF8fGYuY29sdW1uLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKSxyZWZyZXNo''@;'; put 'put ''OmYucmVmcmVzaENhY2hlPzE6MH1dfTtyZXR1cm4idW5kZWZpbmVkIj09PV8uU0FTQ29udHJvbFRhYmxlWzBdLmNvbHVyaSYmZi5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRlR3JhcGgoKSIsImNvbHVyaSBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVycm9y''@;'; put 'put ''IiksaCYmKF8uU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1oKSxmLnRhYmxlRmxhZz0hMSxmLnN3aXRjaEZsYWc9ITAsZi5ncmFwaENvbnRhaW5lcj0hMCxmLmdyYXBoTG9hZGluZz0hMCxmLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKChULFcpPT57Zi5zYXNTZXJ2aWNlLnJlcXVlc3Qo''@;'; put 'put ''ImxpbmVhZ2UvZmV0Y2hjb2xsaW5lYWdlIixfKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGllPWZpKGZ1bmN0aW9uKihnZSl7aWYoZ2UuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2Rh''@;'; put 'put ''bCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5''@;'; put 'put ''VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiBnZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1nZS5pbmZvWzBdLkxJQlJFRisiLiIrZ2UuaW5mb1swXS5UQUJOQU1F''@;'; put 'put ''LGYubGluZWFnZUNvbHVtbk5hbWU9Z2UuaW5mb1swXS5DT0xOQU1FLGYuaWRsb29rdXA9Z2UuaWRsb29rdXA7bGV0IHdlPWdlLmZyb21zYXMsRWU9IiI7Zm9yKGxldCBaZT0wO1plPHdlLmxlbmd0aDtaZSsrKUVlKz11bmVzY2FwZSh3ZVtaZV0uU1RSSU5HKSsiXG4iO2lmKGYudml6SW5wdXQ9''@;'; put 'put ''RWV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuZmxhdGRhdGE9Z2UuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IG90LFplPWYubGlicmFy''@;'; put 'put ''eUxpc3QuZmluZChldD0+Z2UuaW5mb1swXT8uTElCVVJJPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyhldD8uTElCUkFSWUlEPy50b1VwcGVyQ2FzZSgpKSk7WmUmJih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKFplLkxJQlJBUllJRCxaZSksWmUudGFibGVzJiYob3Q9WmUudGFibGVzLmZpbmQo''@;'; put 'put ''ZXQ9PmV0LlRBQkxFVVJJPT09Z2UuaW5mb1swXS5UQUJVUkkpLG90JiZmLnRhYmxlT25DbGljayhvdC5UQUJMRVVSSSxvdCxaZSwhMCkudGhlbigoKT0+e2xldCBldD1vdC5UQUJMRVVSSTtpZihldCl7Y29uc3QgeXQ9ZXQucmVwbGFjZSgiXFwiLCJcXFxcIik7bGV0IGt0PWRvY3VtZW50LnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3IoYFtpZD0nJHt5dH0nXWApO3NldFRpbWVvdXQoKCk9PntrdCYmKGYubG9nZ2VyU2VydmljZS5sb2coImxpYnJhcnlUb1NlbGVjdCIsWmUpLGt0LnNjcm9sbEludG9WaWV3KCkpfSwxZTMpfX0pKSxaZSYmKFplLmV4cGFuZGVkPSEwKSxvdCYmKG90LmV4cGFuZGVkPSEwKSl9''@;'; put 'put ''Z2UuZnJvbXNhcy5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPWdlLmZyb21zYXMubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLFQoKX0pO3JldHVybiBmdW5jdGlvbihnZSl7cmV0dXJuIGllLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKGllPT57''@;'; put 'put ''Zi5ncmFwaExvYWRpbmc9ITEsZi5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWdldFNWR1VSTCgpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXIsaD1uZXcgQmxvYihbZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdl''@;'; put 'put ''L3N2Zyt4bWwifSk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoaCl9Z2V0U1ZHQmxvYigpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXI7cmV0dXJuIG5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1h''@;'; put 'put ''Z2Uvc3ZnK3htbCJ9KX1kb3dubG9hZFNWRygpe2lmKFBUKCIjZ3JhcGgiKS5yZXNldFpvb20oKSxuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYih0aGlzLmdldFNWR0Jsb2IoKSx0aGlzLmNvbnN0cnVj''@;'; put 'put ''dE5hbWUoInN2ZyIpKTtlbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXRTVkdVUkwoKSxhLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgic3ZnIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9k''@;'; put 'put ''eS5yZW1vdmVDaGlsZChhKX19ZG93bmxvYWRQTkcoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtQVCgiI2dyYXBoIikucmVzZXRab29tKCksVFFlLnNhdmVTdmdBc1BuZyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZ3JhcGggc3ZnIiksYS5jb25zdHJ1Y3ROYW1lKCJwbmci''@;'; put 'put ''KSl9KSgpfWRvd25sb2FkQ1NWKCl7bGV0IGE9dGhpcy5mbGF0ZGF0YTtjb25zdCBkPShnZSx3ZSk9Pm51bGw9PT13ZT8iIjp3ZSxoPU9iamVjdC5rZXlzKGFbMF0pO2xldCBmPWEubWFwKGdlPT5oLm1hcCh3ZT0+SlNPTi5zdHJpbmdpZnkoZ2Vbd2VdLGQpKS5qb2luKCIsIikpO2YudW5zaGlm''@;'; put 'put ''dChoLmpvaW4oIiwiKSk7bGV0IF89Zi5qb2luKCJcclxuIik7dmFyIFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLFc9bmV3IEJsb2IoW19dLHt0eXBlOiJ0ZXh0L2NzdiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5u''@;'; put 'put ''YXZpZ2F0b3IubXNTYXZlQmxvYihXLHRoaXMuY29uc3RydWN0TmFtZSgiY3N2IikpO2Vsc2V7dmFyIGllPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKFcpO1QuaHJlZj1pZSxULmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgiY3N2IiksVC5jbGljaygpLHdpbmRvdy5VUkwucmV2b2tl''@;'; put 'put ''T2JqZWN0VVJMKGllKSxULnJlbW92ZSgpfX1nZXREb3RVcmwoKXtsZXQgZD1uZXcgQmxvYihbdGhpcy52aXpJbnB1dF0se3R5cGU6InRleHQvcGxhaW4ifSk7cmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGQpfWdldERvdEJsb2IoKXtyZXR1cm4gbmV3IEJsb2IoW3RoaXMudml6''@;'; put 'put ''SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pfWRvd25sb2FkRG90KCl7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5nZXREb3RCbG9iKCksdGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQi''@;'; put 'put ''KSk7ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0RG90VXJsKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hp''@;'; put 'put ''bGQoYSl9fXNob3dTdmcoKXt3aW5kb3cub3Blbih0aGlzLmdldFNWR1VSTCgpLCJfYmxhbmsiKX1idWlsZEdyYXBoKGEpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuZ3JhcGhMb2FkaW5nPSExLHRoaXMuZ3JhcGhSZW5kZXJpbmc9ITAsc2V0VGltZW91dCgoKT0+e1BU''@;'; put 'put ''KCIjZ3JhcGgiKS56b29tKCEwKS5hZGRJbWFnZSgiaHR0cHM6Ly9kYXRhY29udHJvbGxlci5pby93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wMS9mYzEucG5nIiwiMzBweCIsIjMwcHgiKS5yZW5kZXJEb3QodGhpcy52aXpJbnB1dCwoKT0+e3RoaXMuZ3JhcGhSZW5kZXJpbmc9ITEsdGhpcy5p''@;'; put 'put ''ZGxvb2t1cCYmdGhpcy5tYWtlR3JhcGhMaW5rYWJsZSh0aGlzLmlkbG9va3VwKSxhJiZhKCl9KX0sMTAwKX1jb25zdHJ1Y3ROYW1lKGEpe2xldCBkPSIiLGg9IiIsZj0iIixfPXNldCgpLmZvcm1hdCgiWVlNTUREX0hIbW0iKTtpZih0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmxpYnJhcnlMaXN0''@;'; put 'put ''Lmxlbmd0aCl7bGV0IFQ9dGhpcy5saWJyYXJ5TGlzdC5maW5kKFc9PlcuTElCUkFSWUlEPT10aGlzLmxpYik7VCYmKGQ9YF8ke1QuTElCUkFSWU5BTUV9YCl9aWYodGhpcy50YWJsZXNMaXN0JiZ0aGlzLnRhYmxlc0xpc3QubGVuZ3RoKXtsZXQgVD10aGlzLnRhYmxlc0xpc3QuZmluZChXPT5X''@;'; put 'put ''LlRBQkxFVVJJPT10aGlzLnRhYmxlKTtUJiYoaD1gXyR7VC5UQUJMRU5BTUV9YCl9aWYodGhpcy5jb2x1bW5zTGlzdCYmdGhpcy5jb2x1bW5zTGlzdC5sZW5ndGgpe2xldCBUPXRoaXMuY29sdW1uc0xpc3QuZmluZChXPT5XLkNPTFVSST09dGhpcy5jb2x1bW4pO1QmJihmPWBfJHtULkNPTE5B''@;'; put 'put ''TUV9YCl9cmV0dXJuYCR7dGhpcy5kaXJlY3Rpb25UZXh0KCl9JHtkfSR7aH0ke2Z9XyR7X30uJHthfWB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChvYSksdHQoV2wpLHR0KERzKSx0dChKZCksdHQodmwpLHR0KHcwKSx0dChBYykp''@;'; put 'put ''fSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGluZWFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NTgsdmFyczoxMSxjb25zdHM6W1szLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNs''@;'; put 'put ''ck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsxLCJiaWdsaW5lYWdlLXJvdyIsIm1iLTBpIl0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsInBsYWNlaG9sZGVyIiwi''@;'; put 'put ''TWF4IGRlcHRoIHZhbHVlIiwxLCJjbHItaW5wdXQiLCJtYXgtZGVwdGgtaW5wdXQiXSxbIm1heERlcHRoRG90IiwiIl0sWzEsIm1iLTIwIl0sWzEsImJpZ2xpbmVhZ2Utcm93Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNs''@;'; put 'put ''ckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJtdC0zLW5lZ2F0aXZlIiwzLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbIm1heERlcHRoIiwiIl0s''@;'; put 'put ''WzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJj''@;'; put 'put ''aExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xy''@;'; put 'put ''LWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZl''@;'; put 'put ''ciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUi''@;'; put 'put ''LCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiaWQiLCJjbGljayJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMi''@;'; put 'put ''LCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVy''@;'; put 'put ''Iiwic3Bpbm5lci1zbSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZs''@;'; put 'put ''ZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRsZS13cmFwcGVyIiwi''@;'; put 'put ''ZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiZm9udC13ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29sdXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIsNCwibmdJZiJdLFsx''@;'; put 'put ''LCJjYXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEwIl0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWNvbC1tZC0xMiIs''@;'; put 'put ''InRleHQtY2VudGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImJ0bi1ncm91cCIsImQtYmxvY2siXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8i''@;'; put 'put ''LCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsIm1yLTEwIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImRpc2FibGVkIl0sWyJjbGFzcyIsImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5n''@;'; put 'put ''SWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJj''@;'; put 'put ''bHJDaGVja2JveCIsIiIsIm5hbWUiLCJyZWZyZXNoQ2FjaGUiLDMsIm5nTW9kZWwiLCJjaGFuZ2UiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwicG9zaXRpb24tcmVsYXRpdmUiLDQsIm5nSWYiXSxbMSwi''@;'; put 'put ''c3Bpbm5lciJdLFsxLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJncmFwaC1yZW5kZXItc3Bpbm5lciJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbImlkIiwiZ3JhcGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9Vm4oKTttZSgw''@;'; put 'put ''LCJhcHAtc2lkZWJhciIsMCkseHQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIGQubG9hZE1vcmVMaWJyYXJpZXMoKX0pLG1lKDEsImNsci10cmVlIiksUWUoMixMUWUsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSxRZSgzLHpRZSwyLDEsIm5nLWNvbnRhaW5lciIsMikseWUo''@;'; put 'put ''KSxRZSg0LFVRZSwzLDAsImRpdiIsMykseWUoKSxtZSg1LCJkaXYiLDQpKDYsImRpdiIsNSksUWUoNyxaUWUsNCwwLCJkaXYiLDYpLFFlKDgscmV0LDgsNCwibmctY29udGFpbmVyIiw3KSx5ZSgpKCksbWUoOSwiY2xyLW1vZGFsIiw4KSgxMCwiaDMiLDkpLE5lKDExLCJMaW1pdCBEZXB0aCIp''@;'; put 'put ''LHllKCksbWUoMTIsImRpdiIsMTApKDEzLCJwIiksTmUoMTQsIkVudGVyIHRoZSBkZXB0aCBudW1iZXIgeW91IHdvdWxkIGxpa2UgdG8gbGltaXQgRE9UIHJlbmRlcmluZyB0bzoiKSx5ZSgpKCksbWUoMTUsImRpdiIsMTEpKDE2LCJkaXYiLDEyKSxxdCgxNywiaW5wdXQiLDEzLDE0KSx5ZSgp''@;'; put 'put ''LG1lKDE5LCJjbHItY29udHJvbC1oZWxwZXIiLDE1KSxOZSgyMCwiVG8gcmVuZGVyIHdpdGggdW5saW1pdGVkIGRlcHRoLCBsZWF2ZSB0aGUgaW5wdXQgZW1wdHkiKSx5ZSgpLG1lKDIxLCJkaXYiLDE2KSgyMiwiYnV0dG9uIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmxp''@;'; put 'put ''bWl0RG90RGVwdGg9ITF9KSxOZSgyMywiIENhbmNlbCAiKSx5ZSgpLG1lKDI0LCJidXR0b24iLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoaCk7Y29uc3QgXz0kaSgxOCk7cmV0dXJuIGQucmVzdWJtaXRXaXRoTWF4RGVwdGgoXy52YWx1ZSksanQoZC5saW1pdERvdERlcHRoPSExKX0p''@;'; put 'put ''LE5lKDI1LCIgUmVzdWJtaXQgIikseWUoKSgpKCkoKSxtZSgyNiwiY2xyLW1vZGFsIiw4KSgyNywiaDMiLDkpLE5lKDI4LCJXYXJuaW5nIikseWUoKSxtZSgyOSwiZGl2IiwxMCkoMzAsInAiKSxOZSgzMSkseWUoKSgpLG1lKDMyLCJkaXYiLDExKSgzMywiZGl2IiwxNikoMzQsInAiKSxOZSgz''@;'; put 'put ''NSwiUmVuZGVyIGFueXdheSAodGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZSkiKSx5ZSgpLG1lKDM2LCJidXR0b24iLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY29udGludWVSZW5kZXJpbmdHcmFwaCgpfSksTmUoMzcsIiBSZW5kZXIgIikseWUoKSgpLG1lKDM4LCJkaXYi''@;'; put 'put ''LDE2KSgzOSwicCIpLE5lKDQwLCJEb3dubG9hZCB0aGUgcmVzdWx0IChQTkcgJiBTVkcgcmVxdWlyZSByZW5kZXJpbmcpIikseWUoKSxtZSg0MSwiY2xyLWRyb3Bkb3duIikoNDIsImJ1dHRvbiIsMTgpLE5lKDQzLCIgRG93bmxvYWQgIikscXQoNDQsImNsci1pY29uIiwxOSkseWUoKSxRZSg0''@;'; put 'put ''NSxvZXQsNiwxLCJjbHItZHJvcGRvd24tbWVudSIsMjApLHllKCkoKSxtZSg0NiwiZGl2IiwxNikoNDcsInAiKSxOZSg0OCwiUmVzdWJtaXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSx5ZSgpLHF0KDQ5LCJpbnB1dCIsMTMsMjEpLG1lKDUxLCJidXR0b24iLDE3KSx4dCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7QnQoaCk7Y29uc3QgXz0kaSg1MCk7cmV0dXJuIGp0KGQucmVzdWJtaXRXaXRoTWF4RGVwdGgoXy52YWx1ZSkpfSksTmUoNTIsIiBSZXN1Ym1pdCAiKSx5ZSgpKCksbWUoNTMsImRpdiIsMTYpKDU0LCJwIiksTmUoNTUsIkNhbmNlbCB0aGlzIHN1Ym1pc3Npb24i''@;'; put 'put ''KSx5ZSgpLG1lKDU2LCJidXR0b24iLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FuY2VsUmVuZGVyaW5nR3JhcGgoKX0pLE5lKDU3LCIgQ2FuY2VsICIpLHllKCkoKSgpKCl9MiZhJiYoQ2UoMiksUmUoIm5nSWYiLGQubGlicmFyeUxpc3QpLENlKDEpLFJlKCJuZ0Zvck9m''@;'; put 'put ''IixkLmxpYnJhcnlMaXN0KSxDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJpZXNQYWdpbmcpLENlKDMpLFJlKCJuZ0lmIiwhZC5jb2x1bW4mJiFkLnRhYmxlKSxDZSgxKSxSZSgibmdJZiIsZC5jb2x1bW58fGQudGFibGUpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQubGltaXREb3REZXB0aCko''@;'; put 'put ''ImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSgxNyksUmUoImNsck1vZGFsT3BlbiIsbnVsbCE9PWQubGFyZ2VEb3RGaWxlTGluZXMpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNSksbXIoIiBUaGUgZ2VuZXJhdGVkIGRvdCBmaWxlIGhhcyAiLGQubGFyZ2VEb3RGaWxlTGluZXMsIiBsaW5l''@;'; put 'put ''cy4gUmVuZGVyaW5nIG1heSB0YWtlIGEgbG9uZyB0aW1lLCBob3cgd291bGQgeW91IGxpa2UgdG8gcHJvY2VlZD8gIiksQ2UoMTEpLFJlKCJkaXNhYmxlZCIsIWQuY29sdW1uJiYhZC50YWJsZSkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEJ1LFdhLFMwLEJzLE9zLGRkLGcxLERwLGthLG91LHN1''@;'; put 'put ''LFp1LGMyLFVzLEhGLEQwLFQwLGYxLE5mLGFnLGxnLEs4LG4zXSxzdHlsZXM6WyIudG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPWNoZWNrYm94XVtfbmdjb250ZW50LSVDT01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7''@;'; put 'put ''Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfSNncmFwaFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNh''@;'; put 'put ''bGMoMTAwdmggLSAxOTVweCk7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlNGU0ZTQ7bWFyZ2luLXRvcDoxMHB4fS5zZWxlY3Rpb24td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAw''@;'; put 'put ''JTttYXgtd2lkdGg6NjcwcHh9LmNvbHVtbi1hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Q4ZTNlOTtjb2xvcjojMDAwfS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0haW1wb3J0YW50fS5jb250ZW50LWFyZWFbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdICAgLmNhcmRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDEyMHB4KX0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5n''@;'; put 'put ''Oi41cmVtIC4zNXJlbSFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZ3JhcGgtcmVuZGVyLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3Rv''@;'; put 'put ''cDowO3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxMHB4fS5iaWdsaW5lYWdlLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtt''@;'; put 'put ''YXJnaW4tYm90dG9tOjIwcHh9Lm1vZGFsLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0ubGluZWFnZS10aXRsZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjEycHh9Lm1heC1kZXB0aC1pbnB1dFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV17d2lkdGg6MTAwJX1AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpey50b2dnbGUtc3dpdGNoLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToyMHB4fX0iXX0pLGN9KSgpO2Z1bmN0aW9uIGFldChjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsMTEpLE5l''@;'; put 'put ''KDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4YygidmFsdWUiLGEpLENlKDEpLG1yKCIgIixhLCIgIil9fWZ1bmN0aW9uIGNldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDE4KX1mdW5jdGlvbiB1ZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNv''@;'; put 'put ''biIsMTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDIpO3JldHVybiBoLm1ldGFEYXRhU2VhcmNoPSIiLGp0KGgubWV0YUxpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIGRldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5v''@;'; put 'put ''ZGUiLDEyKSgxLCJkaXYiLDEzKSgyLCJpbnB1dCIsMTQsMTUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS5tZXRhRGF0YVNlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5tZXRhTGlzdE9uRmlsdGVy''@;'; put 'put ''KCkpfSkseWUoKSxRZSg0LGNldCwxLDAsImNsci1pY29uIiwxNiksUWUoNSx1ZXQsMSwwLCJjbHItaWNvbiIsMTcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1qZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLm1ldGFEYXRhU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5s''@;'; put 'put ''ZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBoZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKCkuJGltcGxpY2l0LF89amUo''@;'; put 'put ''KTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8ubWV0YURhdGFMaXN0KSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''QnQoYSk7Y29uc3QgaD1qZSgpLiRpbXBsaWNpdCxmPWplKCk7cmV0dXJuIGYubWV0YURhdGFJZD1oLklELGp0KGYubWV0YURhdGFPbkNsaWNrKGYubWV0YURhdGFJZCxoKSl9KSxxdCgyLCJjbHItaWNvbiIsMjMpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQ7''@;'; put 'put ''UmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLG1yKCIgIixhLklELCIgIil9fWZ1bmN0aW9uIGZldChjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsaGV0LDQsMywiY2xyLXRyZWUtbm9kZSIsMjApLFlyKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gcGV0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwyNCkscXQoMSwiY2xyLWljb24iLDI1KSxtZSgyLCJoMyIsMjYpLE5lKDMsIlBsZWFzZSBzZWxlY3QgYSB0eXBlIikseWUoKSgpKX1m''@;'; put 'put ''dW5jdGlvbiBnZXQoYyxsKXsxJmMmJihtZSgwLCJoNCIpLE5lKDEsIkxvYWRpbmcgbWV0YWRhdGEgdHlwZXMiKSx5ZSgpKX1mdW5jdGlvbiBtZXQoYyxsKXsxJmMmJihtZSgwLCJoNCIpLE5lKDEsIkxvYWRpbmcgbWV0YWRhdGEgb2JqZWN0cyIpLHllKCkpfWZ1bmN0aW9uIHZldChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKG1lKDAsImRpdiIpLFFlKDEsZ2V0LDIsMCwiaDQiLDI5KSxRZSgyLG1ldCwyLDAsImg0IiwyOSkseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLFJlKCJuZ0lmIixhLm1ldGF0eXBlc0xvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5tZXRhdHlwZXNMb2FkaW5nKX19ZnVu''@;'; put 'put ''Y3Rpb24gX2V0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyNykoMSwic3BhbiIsMjgpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCksUWUoMyx2ZXQsMywyLCJkaXYiLDI5KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSgzKSxSZSgibmdJZiIsYS5sb2FkaW5nKX19ZnVuY3Rpb24gYmV0''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzNikoMSwiaW5wdXQiLDM3LDM4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLm1ldGFPYmplY3RTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEp''@;'; put 'put ''LGp0KGplKDIpLm1ldGFPYmplY3RPbkZpbHRlcigpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoMik7Q2UoMSksUmUoIm5nTW9kZWwiLGEubWV0YU9iamVjdFNlYXJjaCl9fWZ1bmN0aW9uIHlldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDQyKX1mdW5jdGlvbiB3ZXQoYyxsKXsx''@;'; put 'put ''JmMmJnF0KDAsImNsci1pY29uIiwyMyl9ZnVuY3Rpb24gQ2V0KGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNTMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1qZSgpLiRpbXBsaWNpdDtDZSgxKSxtcigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gTWV0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xy''@;'; put 'put ''LXRyZWUtbm9kZSIsNDgpKDEsImRpdiIsNDkpLFFlKDIseWV0LDEsMCwiY2xyLWljb24iLDUwKSxRZSgzLHdldCwxLDAsImNsci1pY29uIiw1MSksTmUoNCksUWUoNSxDZXQsMiwxLCJwIiw1MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoImNsckV4cGFuZGFibGUiLCEw''@;'; put 'put ''KSxDZSgxKSxocigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLENlKDEpLFJlKCJuZ0lmIiwhYS5jb3VudCksQ2UoMSksUmUoIm5nSWYiLGEuY291bnQpLENlKDEpLG1yKCIgIixhLmRpc3BsYXksIiAiKSxDZSgxKSxSZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiB4ZXQoYyxsKXtpZigx''@;'; put 'put ''JmMmJihtZSgwLCJjbHItdHJlZSIsNDYpLFFlKDEsTWV0LDYsNywiY2xyLXRyZWUtbm9kZSIsNDcpLGJhKDIsImFzeW5jIikseWUoKSksMiZjKXtjb25zdCBhPWplKDYpO1JlKCJjbHJMYXp5IiwhMCksQ2UoMSksUmUoImNsclJlY3Vyc2l2ZUZvck9mIixVbCgyLDMsYS5yb290JCkpKCJjbHJS''@;'; put 'put ''ZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIEVldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1hY2NvcmRpb24tY29udGVudCIpLFFlKDEseGV0LDMsNSwiY2xyLXRyZWUiLDQ1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoNSk7Q2UoMSksUmUoIm5nSWYi''@;'; put 'put ''LGEuc2hvd0FjYyl9fWZ1bmN0aW9uIGtldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1hY2NvcmRpb24tcGFuZWwiLDQxKSx4dCgiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKCkuJGltcGxpY2l0LF89amUoMyk7''@;'; put 'put ''cmV0dXJuIGp0KGg/Xy5wYW5lbENoYW5nZShoLGYpOiIiKX0pLG1lKDEsImNsci1hY2NvcmRpb24tdGl0bGUiKSxxdCgyLCJjbHItaWNvbiIsNDIpLE5lKDMpLG1lKDQsInAiLDQzKSxOZSg1KSx5ZSgpKCksUWUoNixFZXQsMiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQ0KSx5ZSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1qZSgpLiRpbXBsaWNpdDtDZSgzKSxtcigiICIsYS5OQU1FLCIgIiksQ2UoMiksb3IoYS5JRCl9fWZ1bmN0aW9uIEFldChjLGwpe2lmKDEmYyYmKHpyKDApLFFlKDEsa2V0LDcsMiwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDApLFlyKCkpLDImYyl7Y29uc3QgYT1sLiRp''@;'; put 'put ''bXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gVGV0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzOSkoMSwiY2xyLWFjY29yZGlvbiIpLFFlKDIsQWV0LDIsMSwibmctY29udGFpbmVyIiw0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgyKTtDZSgyKSxSZSgi''@;'; put 'put ''bmdGb3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiBEZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw0Mil9ZnVuY3Rpb24gSWV0KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjMpfWZ1bmN0aW9uIExldChjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDUzKSxOZSgxKSx5''@;'; put 'put ''ZSgpKSwyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQ7Q2UoMSksbXIoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIFJldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlLW5vZGUiLDQ4KSgxLCJkaXYiLDQ5KSxRZSgyLERldCwxLDAsImNsci1pY29uIiw1MCksUWUoMyxJZXQsMSwwLCJj''@;'; put 'put ''bHItaWNvbiIsNTEpLE5lKDQpLFFlKDUsTGV0LDIsMSwicCIsNTIpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJjbHJFeHBhbmRhYmxlIiwhMCksQ2UoMSksaHIoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxDZSgxKSxSZSgibmdJZiIsIWEuY291bnQpLENlKDEpLFJl''@;'; put 'put ''KCJuZ0lmIixhLmNvdW50KSxDZSgxKSxtcigiICIsYS5kaXNwbGF5LCIgIiksQ2UoMSksUmUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rpb24gT2V0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUiLDQ2KSxRZSgxLFJldCw2LDcsImNsci10cmVlLW5vZGUiLDQ3KSxiYSgyLCJhc3luYyIp''@;'; put 'put ''LHllKCkpLDImYyl7Y29uc3QgYT1qZSg0KTtSZSgiY2xyTGF6eSIsITApLENlKDEpLFJlKCJjbHJSZWN1cnNpdmVGb3JPZiIsVWwoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBQZXQoYyxsKXtpZigxJmMmJih6cigw''@;'; put 'put ''KSxtZSgxLCJkaXYiLDU0KSxxdCgyLCJjbHItaWNvbiIsNDIpLG1lKDMsImRpdiIsNTUpKDQsInAiLDU2KSxOZSg1KSx5ZSgpLG1lKDYsInAiLDU3KSxOZSg3KSx5ZSgpKCkoKSxRZSg4LE9ldCwzLDUsImNsci10cmVlIiw0NSksWXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUo''@;'; put 'put ''Myk7Q2UoNSksbXIoIiAiLGEuTkFNRSwiICIpLENlKDIpLG1yKCIgIixhLklELCIgIiksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0FjYyl9fWZ1bmN0aW9uIEZldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzkpLFFlKDEsUGV0LDksMywibmctY29udGFpbmVyIiw0KSx5ZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9amUoMik7Q2UoMSksUmUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gSGV0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksTmUoMikseWUoKSxtZSgzLCJjbHItZGctY2VsbCIpLE5lKDQpLHllKCksbWUoNSwi''@;'; put 'put ''Y2xyLWRnLWNlbGwiKSxOZSg2KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLlRZUEUpLENlKDIpLG9yKGEuTkFNRSksQ2UoMiksb3IoYS5WQUxVRSl9fWNvbnN0IE5ldD1mdW5jdGlvbigpe3JldHVyblsxMCwyMCw1MCwxMDBdfTtmdW5jdGlvbiBWZXQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihtZSgwLCJjbHItZGF0YWdyaWQiLDU4KSgxLCJjbHItZGctY29sdW1uIiksTmUoMiwiIFRZUEUgIikscXQoMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDU5KSx5ZSgpLG1lKDQsImNsci1kZy1jb2x1bW4iKSxOZSg1LCIgTkFNRSAiKSxxdCg2LCJjbHItZGctc3RyaW5nLWZp''@;'; put 'put ''bHRlciIsNTkpLHllKCksbWUoNywiY2xyLWRnLWNvbHVtbiIpLE5lKDgsIiBWQUxVRSAiKSxxdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNTkpLHllKCksUWUoMTAsSGV0LDcsMywiY2xyLWRnLXJvdyIsNjApLG1lKDExLCJjbHItZGctZm9vdGVyIikoMTIsImNsci1kZy1wYWdpbmF0aW9u''@;'; put 'put ''Iiw2MSw2MikoMTQsImNsci1kZy1wYWdlLXNpemUiLDYzKSxOZSgxNSwiQXR0cmlidXRlcyBwZXIgcGFnZSIpLHllKCksTmUoMTYpLHllKCkoKSgpKSwyJmMpe2NvbnN0IGE9JGkoMTMpLGQ9amUoMik7Q2UoMyksUmUoImNsckRnU3RyaW5nRmlsdGVyIixkLnR5cGVGaWx0ZXIpLENlKDMpLFJl''@;'; put 'put ''KCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5uYW1lRmlsdGVyKSxDZSgzKSxSZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQudmFsdWVGaWx0ZXIpLENlKDEpLFJlKCJjbHJEZ0l0ZW1zT2YiLGQubWV0YU9iamVjdEF0dHJpYnV0ZXMpLENlKDIpLFJlKCJjbHJEZ1BhZ2VTaXplIiwxMCksQ2UoMiksUmUo''@;'; put 'put ''ImNsclBhZ2VTaXplT3B0aW9ucyIsJHMoOSxOZXQpKSxDZSgyKSxiMCgiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIEF0dHJpYnV0ZXMgIil9fWZ1bmN0aW9uIEJldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzApKDEsImRpdiIs''@;'; put 'put ''MzEpLFFlKDIsYmV0LDMsMSwiZGl2IiwzMikscXQoMywiYnIiKSxRZSg0LFRldCwzLDEsImRpdiIsMzMpLFFlKDUsRmV0LDIsMSwiZGl2IiwzMykseWUoKSxtZSg2LCJkaXYiLDM0KSg3LCJoMyIpLE5lKDgpLHllKCksUWUoOSxWZXQsMTcsMTAsImNsci1kYXRhZ3JpZCIsMzUpLHllKCkoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPWplKCk7Q2UoMiksUmUoIm5nSWYiLGEubWV0YU9iamVjdExpc3QmJiFhLm9iamVjdFJvdXRlKSxDZSgyKSxSZSgibmdJZiIsIWEub2JqZWN0VmlldyksQ2UoMSksUmUoIm5nSWYiLGEub2JqZWN0VmlldyksQ2UoMyksb3IoYS5hc3NvT2JqZWN0U2VsZWN0ZWQpLENlKDEp''@;'; put 'put ''LFJlKCJuZ0lmIixhLnNob3dUYWJsZSl9fWxldCBvWj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxUKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj1fLHRoaXMu''@;'; put 'put ''cm91dGU9VCx0aGlzLm1ldGFEYXRhU2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdFNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9W10sdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhRGF0YUlk''@;'; put 'put ''PSIiLHRoaXMubG9hZGluZz0hMCx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITAsdGhpcy5tZXRhT2JqZWN0U2l6ZT0yMDAsdGhpcy5hc3NvVHlwZVNlbGVjdGVkPSIiLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIiLHRoaXMucmVwb3NpdG9yeT0iIix0aGlzLm9iamVjdFJvdXRlPSExLHRoaXMu''@;'; put 'put ''c2hvd0RhdGE9ITEsdGhpcy5vYmplY3RWaWV3PSExLHRoaXMuZ2V0Q2hpbGRyZW49Vz0+Vy5jb3VudD9XaShXLmRldGFpbHMpOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOlcuQVNTT0NVUkl9XX0pLnRo''@;'; put 'put ''ZW4oZ2U9Pnt0aGlzLnNob3dUYWJsZT0hMCx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPWdlLmF0dHJpYnV0ZXMsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9Vy5OQU1FO2xldCB3ZT10aGlzLnJvdXRlci51cmw7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMub2JqZWN0''@;'; put 'put ''Um91dGU/d2Uuc2xpY2UoMCx3ZS5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIitXLkFTU09DVVJJLnNsaWNlKDErVy5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKTp3ZSsiL29iamVjdC8iK1cuQVNTT0NVUkkuc2xpY2UoMStXLkFTU09DVVJJLmluZGV4T2YoIlxcIikpKSx0aGlzLmdl''@;'; put 'put ''dEFzc29zaWF0aW9uc0NvdW50KGdlLmFzc29jaWF0aW9ucyl9KSx0aGlzLmRlYm91bmNlPSExfW5nT25Jbml0KCl7R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbWV0YWRhdGEiLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIpJiYodGhp''@;'; put 'put ''cy5vYmplY3RSb3V0ZT0hMCx0aGlzLm9iamVjdFZpZXc9ITApLHRoaXMucGFnZVNpemU9NSxHbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QmJkduLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMmJiF0aGlzLm9iamVjdFJvdXRlPyh0aGlzLm1ldGFEYXRhTGlzdD1Hbi5tZXRhZGF0YS5tZXRhRGF0''@;'; put 'put ''YUxpc3QsdGhpcy5yZXBvc2l0b3JpZXM9R24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyx0aGlzLnJlcG9zaXRvcnk9R24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITEsdGhpcy5tZXRhRGF0YVNlYXJjaD1Hbi5t''@;'; put 'put ''ZXRhZGF0YS5tZXRhRGF0YVNlYXJjaCk6KHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGF0eXBlcyIsbnVsbCkudGhlbihhPT57dGhpcy5tZXRhRGF0YUxpc3Q9YS50eXBlcyxHbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3Q9dGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5sb2FkaW5n''@;'; put 'put ''PSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFyZXBvcyIsbnVsbCkudGhlbihhPT57bGV0IGQ9ITE7dGhpcy5yZXBvc2l0b3JpZXM9W107Zm9yKGxldCBoPTA7aDxhLm91dHJlcG9zLmxlbmd0aDtoKyspdGhpcy5yZXBv''@;'; put 'put ''c2l0b3JpZXMucHVzaChhLm91dHJlcG9zW2hdLk5BTUUpLCJGb3VuZGF0aW9uIj09PWEub3V0cmVwb3NbaF0uTkFNRSYmKGQ9ITApO2lmKHRoaXMucmVwb3NpdG9yeT1kPyJGb3VuZGF0aW9uIjphLm91dHJlcG9zWzBdLk5BTUUsR24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcz10aGlzLnJl''@;'; put 'put ''cG9zaXRvcmllcyxHbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5LHRoaXMub2JqZWN0Um91dGUpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuc2hvd0RhdGE9ITA7bGV0IGg9IiIsZj10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5v''@;'; put 'put ''YmplY3RJRDt0aGlzLm1ldGFPYmplY3RMaXN0PVtdLHRoaXMubWV0YU9iamVjdExpc3QucHVzaCh7SUQ6ZixOQU1FOmh9KSx0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdE9uQ2xpY2sodGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0u''@;'; put 'put ''SUQsdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0pfX0pKX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lm''@;'; put 'put ''eShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1tZXRhRGF0YU9uQ2xpY2soYSxkKXt0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L21ldGFkYXRhIiksdGhpcy5zaG93RGF0YT0hMSx0aGlzLmxvYWRpbmc9ITAsdGhp''@;'; put 'put ''cy5zZWxlY3RtZXRhRGF0YShhLGQpfW1ldGFPYmplY3RPbkNsaWNrKGEsZCl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zZWxlY3RtZXRhT2JqZWN0KGEsZCl9c2VsZWN0bWV0YURhdGEoYSxk''@;'; put 'put ''KXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhb2JqZWN0cyIse1NBU0NvbnRyb2xUYWJsZTpbe21ldGF0eXBlOmEscmVwbzpoLnJlcG9zaXRvcnl9XX0pLnRoZW4oXz0+e2gubWV0YU9iamVjdExpc3Q9Xy5vYmplY3Rz''@;'; put 'put ''LGguZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoaC5tZXRhT2JqZWN0U2l6ZSksaC5sb2FkaW5nPSExLGguYXNzb1R5cGVTZWxlY3RlZD1hLGguZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGguc2hvd0RhdGE9ITB9KX0pKCl9c2VsZWN0bWV0YU9iamVjdChhLGQpe3ZhciBoPXRoaXM7cmV0''@;'; put 'put ''dXJuIGZpKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4oXz0+e2gubWV0YU9iamVjdEFzc29jaWF0aW9ucz1fLmFzc29jaWF0aW9ucyxoLnJvb3QkPVdpKGguZ2V0QXNz''@;'; put 'put ''b3NpYXRpb25zQ291bnQoXy5hc3NvY2lhdGlvbnMpKSxoLnNob3dBY2M9ITAsaC5zaG93VGFibGU9ITA7bGV0IFQ9Xy5hdHRyaWJ1dGVzLmZpbmQoaWU9PiJOYW1lIj09PWllLk5BTUUpLlZBTFVFO2guYXNzb09iamVjdFNlbGVjdGVkPVQsZC5OQU1FPVQ7bGV0IFc9aC5yb3V0ZXIudXJsO2gu''@;'; put 'put ''bG9jYXRpb24ucmVwbGFjZVN0YXRlKGgub2JqZWN0Um91dGU/Vy5zbGljZSgwLFcubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigiXFwiKSk6VysiL29iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpKSxoLm1ldGFPYmplY3RBdHRy''@;'; put 'put ''aWJ1dGVzPV8uYXR0cmlidXRlc30pfSkoKX1zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6YX1d''@;'; put 'put ''fSkudGhlbihfPT57aC5tZXRhT2JqZWN0QXR0cmlidXRlcz1fLmF0dHJpYnV0ZXMsaC5zaG93VGFibGU9ITB9KX0pKCl9Z2V0QXNzb3NpYXRpb25zQ291bnQoYSl7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGYgb2YgYSl7ZC5oYXMoZi5BU1NPQyl8fGQuc2V0KGYuQVNTT0Mse2NvdW50OjAsZGV0''@;'; put 'put ''YWlsczpbXX0pO2xldCBfPWQuZ2V0KGYuQVNTT0MpO18uY291bnQrKyxfLmRldGFpbHMucHVzaCh7QVNTT0NVUkk6Zi5BU1NPQ1VSSSxOQU1FOmYuTkFNRSxkaXNwbGF5OmYuTkFNRSxVUkk6Zi5BU1NPQ1VSSS5zbGljZShmLkFTU09DVVJJLmluZGV4T2YoIjoiKSsxKX0pfWxldCBoPVtdO3Jl''@;'; put 'put ''dHVybiBkLmZvckVhY2goZnVuY3Rpb24oZixfKXtoLnB1c2goe0FTU09DOl8sY291bnQ6Zi5jb3VudCxkZXRhaWxzOmYuZGV0YWlscyxkaXNwbGF5Ol8rIiAoICIrZi5jb3VudCsiICkifSl9KSxofXNldFR5cGVBc3Nvc2lhdGlvbnMoYSl7bGV0IGQ9W107Zm9yKGxldCBoIG9mIHRoaXMubWV0''@;'; put 'put ''YU9iamVjdEFzc29jaWF0aW9ucyloLkFTU09DPT09YSYmZC5wdXNoKGgpO3JldHVybiB0aGlzLmFzc29zaWF0aW9uTmFtZXM9ZCxkfWFzc29zaWF0aW9uTmFtZU9uQ2xpY2soYSl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlz''@;'; put 'put ''LnNob3dUYWJsZT0hMSx0aGlzLnNlbGVjdEFzc29zaWF0aW9uc0RldGFpbHMoYSl9bWV0YUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5tZXRhRGF0YVNlYXJjaCwiSUQiKSxHbi5tZXRhZGF0YS5tZXRhRGF0''@;'; put 'put ''YVNlYXJjaD10aGlzLm1ldGFEYXRhU2VhcmNofW1ldGFPYmplY3RPbkZpbHRlcigpe3RoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5oZWxwZXJTZXJ2aWNlLm1ldGFPYmplY3RPbkZpbHRlcih0aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdFNlYXJjaCwiTkFNRSIp''@;'; put 'put ''LHRoaXMuZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXModGhpcy5tZXRhT2JqZWN0U2l6ZSksR24ubWV0YWRhdGEubWV0YU9iamVjdFNlYXJjaD10aGlzLm1ldGFPYmplY3RTZWFyY2h9Z2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoYSl7aWYodm9pZCAwIT09dGhpcy5tZXRhT2JqZWN0TGlzdCYmdGhp''@;'; put 'put ''cy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg+YSl7bGV0IGQ9MCxoPS0xO2ZvcihsZXQgZj0wO2Y8dGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg7ZisrKWlmKCh2b2lkIDA9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbnx8ITE9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbikm''@;'; put 'put ''JmQrKyxkPT09YSl7aD1mO2JyZWFrfXRoaXMubWV0YU9iamVjdFNob3dMaXN0PS0xIT09aD90aGlzLm1ldGFPYmplY3RMaXN0LnNsaWNlKDAsaCk6dGhpcy5tZXRhT2JqZWN0TGlzdH1lbHNlIHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3R9cGFuZWxDaGFuZ2Uo''@;'; put 'put ''YSxkKXt0aGlzLmRlYm91bmNlfHwodGhpcy5tZXRhT2JqZWN0T25DbGljayhkLklELGQpLHRoaXMuZGVib3VuY2U9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuZGVib3VuY2U9ITF9LDYwMCkpfXVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpe0duLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9y''@;'; put 'put ''eT10aGlzLnJlcG9zaXRvcnl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHZsKSx0dChvYSksdHQoQWMpLHR0KEpkKSx0dChEcyksdHQoV2wpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1ldGFkYXRhIl1dLGhv''@;'; put 'put ''c3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxNyx2YXJzOjgsY29uc3RzOltbMSwicmVwby1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImNoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdG''@;'; put 'put ''b3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQtaSJdLFsxLCJjb2xvci1ncmF5Il0sWyJjbGFzcyIsIm5vLXRhYmxlLXNl''@;'; put 'put ''bGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1yb3cgY2xyLWZsZXgtZ3Jvdy0xIiw0LCJuZ0lmIl0sWzMsInZhbHVlIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0''@;'; put 'put ''IiwiIiwicGxhY2Vob2xkZXIiLCJzZWFyY2ggU0FTIFR5cGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5k''@;'; put 'put ''ZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIs''@;'; put 'put ''MSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0lmIl0sWzEsImNsci1yb3ciLCJjbHItZmxleC1ncm93LTEiXSxbMSwiY2xyLWNvbC02Il0sWyJjbGFzcyIsInNl''@;'; put 'put ''YXJjaC1pbnB1dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvYmplY3RzLWNvbCIsNCwibmdJZiJdLFsxLCJjbHItY29sLTYiLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJw''@;'; put 'put ''bGFjZWhvbGRlciIsInNlYXJjaCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoT2JqVHJlZUlucHV0IiwiIl0sWzEsIm9iamVjdHMtY29sIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNo''@;'; put 'put ''YW5nZSIsNCwibmdJZiJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMSwiZmxvYXQtcmlnaHQiXSxbNCwiY2xySWZFeHBhbmRlZCJdLFszLCJjbHJMYXp5Iiw0LCJuZ0lmIl0sWzMsImNsckxhenkiXSxbMywiY2xyRXhwYW5kYWJs''@;'; put 'put ''ZSIsNCwiY2xyUmVjdXJzaXZlRm9yIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiJdLFszLCJjbHJFeHBhbmRhYmxlIl0sWzEsImZ1bGwtd2lkdGgiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiLDQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2siLDQsIm5n''@;'; put 'put ''SWYiXSxbImNsYXNzIiwiZmxvYXQtcmlnaHQgb2JqZWN0LXVyaSIsNCwibmdJZiJdLFsxLCJmbG9hdC1yaWdodCIsIm9iamVjdC11cmkiXSxbMSwiY29scy1oZWFkIl0sWzEsIm9iamVjdC10ZXh0Il0sWzEsIm0tMCIsIndvcmQtYnJlYWsiLCJtci0yMCJdLFsxLCJmbG9hdC1yaWdodCIsIm1s''@;'; put 'put ''LTMiXSxbMSwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbInBhZ2luYXRpb24iLCIiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl1dLHRlbXBsYXRlOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYiLDApKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxOZSg0LCJNZXRhZGF0YSBSZXBvc2l0b3J5IikseWUoKSxtZSg1LCJzZWxlY3QiLDEpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihm''@;'; put 'put ''KXtyZXR1cm4gZC5yZXBvc2l0b3J5PWZ9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpfSksUWUoNixhZXQsMiwyLCJvcHRpb24iLDIpLHllKCkoKSgpLG1lKDcsImNsci10cmVlIiksUWUoOCxkZXQsNiwzLCJjbHItdHJlZS1ub2RlIiwz''@;'; put 'put ''KSxRZSg5LGZldCwyLDEsIm5nLWNvbnRhaW5lciIsNCkseWUoKSgpLG1lKDEwLCJkaXYiLDUpKDExLCJkaXYiLDYpKDEyLCJoMyIsNyksTmUoMTMpLHllKCksUWUoMTQscGV0LDQsMCwiZGl2Iiw4KSxRZSgxNSxfZXQsNCwxLCJkaXYiLDkpLFFlKDE2LEJldCwxMCw1LCJkaXYiLDEwKSx5ZSgp''@;'; put 'put ''KCkpLDImYSYmKENlKDUpLFJlKCJuZ01vZGVsIixkLnJlcG9zaXRvcnkpLENlKDEpLFJlKCJuZ0Zvck9mIixkLnJlcG9zaXRvcmllcyksQ2UoMiksUmUoIm5nSWYiLGQubWV0YURhdGFMaXN0KSxDZSgxKSxSZSgibmdGb3JPZiIsZC5tZXRhRGF0YUxpc3QpLENlKDQpLG9yKGQuYXNzb1R5cGVT''@;'; put 'put ''ZWxlY3RlZCksQ2UoMSksUmUoIm5nSWYiLCFkLmxvYWRpbmcmJiFkLm1ldGFPYmplY3RMaXN0KSxDZSgxKSxSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93RGF0YSkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLGwxLGMxLFdhLE0wLEJzLE9zLFc4LFRwLHRnLE9FLFU4''@;'; put 'put ''LGdILFBFLG5nLFNRLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LFFGLGRkLGcxLERRLGthLFp1LHpKLFVzLGYxLE44LEg4LFRKLHZFLElKLERKLExKLEVGLG4zLGN4XSxzdHlsZXM6WyIub2JqZWN0cy1jb2xbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo3NXZoO292ZXJmbG93OnNjcm9sbDtib3Jk''@;'; put 'put ''ZXI6MXB4IHNvbGlkICNjY2NjY2M7YmFja2dyb3VuZDp3aGl0ZTtib3JkZXItcmFkaXVzOjRweH0uY29scy1oZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmYWZhZmE7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO3BhZGRpbmc6MTBweDtkaXNwbGF5OmZsZXh9Lm9iamVjdC10''@;'; put 'put ''ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tbGVmdDoxMHB4O2ZsZXg6MX0ucmVwby1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjE1cHg7''@;'; put 'put ''bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9LmNsci1hY2NvcmRpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmZsb2F0LXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDtmbG9hdDpyaWdodH0uZnVsbC13aWR0aFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV17d2lkdGg6MTAwJX0ub2JqZWN0LXVyaVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjVweCAwIDB9Lm9iamVjdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctbGVmdDozcHg7cGFkZGluZy1yaWdodDozcHh9Lm9iamVjdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Q4ZTNlOTtib3JkZXItcmFkaXVzOjNweH0uZGF0YWdyaWQtaG9zdFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp1bnNldCFpbXBvcnRhbnR9LmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtmbGV4OjE7ZGlzcGxheTpmbGV4''@;'; put 'put ''O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufSJdfSksYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMs''@;'; put 'put ''cHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBqZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gemV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1q''@;'; put 'put ''ZSgyKTtyZXR1cm4gaC5yb2xlU2VhcmNoPSIiLGp0KGgucm9sZUxpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIFVldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSkseHQoIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLnJvbGVTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkucm9sZUxpc3RPbkZpbHRlcigpKX0pLHllKCksUWUoNCxqZXQsMSwwLCJjbHItaWNvbiIsMTApLFFlKDUsemV0LDEsMCwiY2xy''@;'; put 'put ''LWljb24iLDExKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9amUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5yb2xlU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBaZXQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkucm9sZU9uQ2xpY2soaCkpfSksbWUoMSwicCIsMTYpLHF0KDIsImNsci1pY29uIiwxNyks''@;'; put 'put ''TmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1qZSgpLiRpbXBsaWNpdCxkPWplKCk7aHIoInRhYmxlLWFjdGl2ZSIsYS5ST0xFVVJJPT09ZC5yb2xlVXJpKSxDZSgzKSxtcigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBZZXQoYyxsKXtpZigxJmMmJih6cigwKSxRZSgxLFpldCw0''@;'; put 'put ''LDMsImNsci10cmVlLW5vZGUiLDE0KSxZcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIFdldChjLGwpezEmYyYmKG1lKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkpfWZ1''@;'; put 'put ''bmN0aW9uIEdldChjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gTWVtYmVycyBQcmVzZW50IikseWUoKSl9ZnVuY3Rpb24gJGV0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLE5lKDIpLHllKCksbWUoMywidGQiLDMwKSxOZSg0KSx5ZSgpLG1lKDUsInRkIiwz''@;'; put 'put ''MCksTmUoNikseWUoKSxtZSg3LCJ0ZCIsMzApLE5lKDgpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuVVJJTUVNKSxDZSgyKSxvcihhLk1FTUJFUk5BTUUpLENlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9y''@;'; put 'put ''KGEuTUVNQkVSQ1JFQVRFRCksQ2UoMiksb3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gcWV0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksTmUoNSwiTkFNRSIpLHllKCkoKSxtZSg2LCJ0ZCIsMjkpKDcsImIi''@;'; put 'put ''KSxOZSg4LCJFTUFJTCIpLHllKCkoKSxtZSg5LCJ0ZCIsMjkpKDEwLCJiIiksTmUoMTEsIkNSRUFURUQiKSx5ZSgpKCksbWUoMTIsInRkIiwzMCkoMTMsImIiKSxOZSgxNCwiVVBEQVRFRCIpLHllKCkoKSgpKCksbWUoMTUsInRib2R5IiksUWUoMTYsJGV0LDksNSwidHIiLDMxKSx5ZSgpKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1qZSgyKTtDZSgxNiksUmUoIm5nRm9yT2YiLGEucm9sZU1lbWJlcnMpfX1mdW5jdGlvbiBLZXQoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIEdyb3VwcyBQcmVzZW50ICEiKSx5ZSgpKX1mdW5jdGlvbiBYZXQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIsMzIp''@;'; put 'put ''KDEsInRkIiwzMCksTmUoMikseWUoKSxtZSgzLCJ0ZCIsMzApLE5lKDQpLHllKCksbWUoNSwidGQiLDMwKSxOZSg2KSx5ZSgpLG1lKDcsInRkIiwzMCksTmUoOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8i''@;'; put 'put ''K2EuVVJJTUVNKSxDZSgyKSxvcihhLk1FTUJFUk5BTUUpLENlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEuTUVNQkVSQ1JFQVRFRCksQ2UoMiksb3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gSmV0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRy''@;'; put 'put ''IikoMywidGQiLDI5KSg0LCJiIiksTmUoNSwiTkFNRSIpLHllKCkoKSxtZSg2LCJ0ZCIsMjkpKDcsImIiKSxOZSg4LCJFTUFJTCIpLHllKCkoKSxtZSg5LCJ0ZCIsMjkpKDEwLCJiIiksTmUoMTEsIkNSRUFURUQiKSx5ZSgpKCksbWUoMTIsInRkIiwzMCkoMTMsImIiKSxOZSgxNCwiVVBEQVRF''@;'; put 'put ''RCIpLHllKCkoKSgpKCksbWUoMTUsInRib2R5IiksUWUoMTYsWGV0LDksNSwidHIiLDMxKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgyKTtDZSgxNiksUmUoIm5nRm9yT2YiLGEucm9sZUdyb3Vwcyl9fWZ1bmN0aW9uIFFldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImRpdiIsMjAp''@;'; put 'put ''KDIsImRpdiIsMjEpKDMsInRhYmxlIiwyMikoNCwidGJvZHkiKSg1LCJ0ciIpKDYsInRkIiwyMykoNywicCIsMjQpKDgsImIiKSxOZSg5KSx5ZSgpKCkoKSgpLG1lKDEwLCJ0ciIpKDExLCJ0ZCIsMjMpKDEyLCJpIiksTmUoMTMpLHllKCkoKSgpKCkoKSgpKCksbWUoMTQsImRpdiIsMjApKDE1''@;'; put 'put ''LCJkaXYiLDIxKSgxNiwiZGl2IiwyNSkoMTcsImRpdiIpKDE4LCJoMyIpLE5lKDE5KSx5ZSgpLFFlKDIwLEdldCwyLDAsImg1Iiw1KSxtZSgyMSwiZGl2IiwyNiksUWUoMjIscWV0LDE3LDEsInRhYmxlIiwyNykseWUoKSgpLHF0KDIzLCJociIpLG1lKDI0LCJkaXYiKSgyNSwiaDMiKSxOZSgy''@;'; put 'put ''NikseWUoKSxRZSgyNyxLZXQsMiwwLCJoNSIsNSksbWUoMjgsImRpdiIsMjYpLFFlKDI5LEpldCwxNywxLCJ0YWJsZSIsMjcpLHllKCkoKSxxdCgzMCwiYnIiKSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9amUoKTtDZSg5KSxvcihhLnJvbGVOYW1lKSxDZSg0KSxvcihhLnJvbGVEZXNjKSxD''@;'; put 'put ''ZSg2KSxtcigiTUVNQkVSUyAoIixhLnJvbGVNZW1iZXJzQ291bnQsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09YS5yb2xlTWVtYmVyc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS5yb2xlTWVtYmVyc0NvdW50KSxDZSg0KSxtcigiR3JvdXBzICgiLGEucm9sZUdyb3Vwc0NvdW50LCIpIiks''@;'; put 'put ''Q2UoMSksUmUoIm5nSWYiLDA9PWEucm9sZUdyb3Vwc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS5yb2xlR3JvdXBzQ291bnQpfX1sZXQgd2xlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlz''@;'; put 'put ''LnJvdXRlcj1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlPV8sdGhpcy5yb2xlU2VhcmNoPSIiLHRoaXMucm9sZVVyaT0iIix0aGlzLnJvbGVOYW1lPSIiLHRoaXMucm9sZURlc2M9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmxvYWRpbmc9ITF9bmdP''@;'; put 'put ''bkluaXQoKXtHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L3JvbGVzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSks''@;'; put 'put ''R24udXNlcm5hdi5yb2xlTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50Pyh0aGlzLnJvbGVzPUduLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5yb2xlU2VhcmNoPUduLnVzZXJuYXYucm9sZVNlYXJjaCk6dm9pZCAwPT09R24udXNlcm5hdi5yb2xlTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc2Fz''@;'; put 'put ''U2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZXM9YS5yb2xlcyxHbi51c2VybmF2LnJvbGVMaXN0PWEucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRo''@;'; put 'put ''aXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxv''@;'; put 'put ''YWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9ZC5S''@;'; put 'put ''T0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkpOih0aGlzLnJvbGVzPUduLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5yb2xlU2VhcmNoPUduLnVzZXJuYXYucm9sZVNlYXJjaCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5h''@;'; put 'put ''di91c2Vycm9sZXMiLG51bGwpLnRoZW4oYT0+e2lmKHRoaXMucm9sZXM9YS5yb2xlcyxHbi51c2VybmF2LnJvbGVMaXN0PWEucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTsh''@;'; put 'put ''MSE9PWQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLnNhc21lbWJlcnMs''@;'; put 'put ''dGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9ZC5ST0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJv''@;'; put 'put ''bGVEZXNjPWQuUk9MRURFU0N9KSl9fSkpfXJvbGVMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMucm9sZXMsdGhpcy5yb2xlU2VhcmNoLCJST0xFTkFNRSIpLEduLnVzZXJuYXYucm9sZVNlYXJjaD10aGlzLnJvbGVTZWFyY2h9cm9sZU9uQ2xp''@;'; put 'put ''Y2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuUk9M''@;'; put 'put ''RVVSSSkpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6YS5ST0xFVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50''@;'; put 'put ''PWYuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9YS5ST0xFVVJJLHRoaXMucm9sZU5hbWU9YS5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWEuUk9MRURFU0N9KX1m''@;'; put 'put ''aW5kUm9sZShhLGQpe2xldCBoPSExO3JldHVybiBhLmZvckVhY2goZj0+e2YuUk9MRVVSST09PWQmJihoPWYpfSksaH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQob2EpLHR0KEFjKSx0dChEcyksdHQoSmQpLHR0KFdsKSl9LGMuXHUwMjc1Y21w''@;'; put 'put ''PXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yb2xlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9y''@;'; put 'put ''T2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBSb2xlcyIsIm5h''@;'; put 'put ''bWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNo''@;'; put 'put ''YXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJ0YWJsZS1hY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbMSwibG9h''@;'; put 'put ''ZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJ0YWJsZSIsInJvbGUtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInJvbGUtaW5mby10ZXh0Il0sWzEsImNhcmQiLCJyb2xlLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFz''@;'; put 'put ''cyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm''@;'; put 'put ''JihtZSgwLCJhcHAtc2lkZWJhciIsMCkoMSwiY2xyLXRyZWUiKSxRZSgyLFVldCw2LDMsImNsci10cmVlLW5vZGUiLDEpLFFlKDMsWWV0LDIsMSwibmctY29udGFpbmVyIiwyKSx5ZSgpKCksbWUoNCwiZGl2IiwzKSxRZSg1LFdldCwzLDAsImRpdiIsNCksUWUoNixRZXQsMzEsOCwiZGl2Iiw1''@;'; put 'put ''KSx5ZSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsZC5yb2xlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGQucm9sZXMpLENlKDIpLFJlKCJuZ0lmIixkLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLnJvbGVNZW1iZXJzJiYhZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbeHMsWmksQnUsV2Es''@;'; put 'put ''QnMsT3MsZGQsZzEsa2EsZjEsbjNdLHN0eWxlczpbIi5zaWRlYmFyLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnJvbGUtaW5mby10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0ucm9sZS1pbmZvW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9LnJvbGUtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1h''@;'; put 'put ''bGlnbjpjZW50ZXJ9LnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS5yb2xlLWRhdGFbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde21pbi1oZWlnaHQ6dW5zZXR9LnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5tZW1iZXItdGFibGVbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTt3aWR0aDoxMDAlfS5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhlYWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2RhZGFkYX0ubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSAgIHRib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdo''@;'; put 'put ''dDo3MDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fSJdfSksY30pKCksZXR0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlcm5hdi1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJnF0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltmcF19KSxjfSkoKSx0dHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxkZXBl''@;'; put 'put ''bmRlbmNpZXM6W2ZwXX0pLGN9KSgpO2Z1bmN0aW9uIG50dChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBydHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDIp''@;'; put 'put ''O3JldHVybiBoLnVzZXJTZWFyY2g9IiIsanQoaC51c2VyTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gaXR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsOCw5KSx4dCgibmdNb2RlbENoYW5nZSIs''@;'; put 'put ''ZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkudXNlclNlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS51c2VyTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LG50dCwxLDAsImNsci1pY29uIiwxMCksUWUoNSxydHQsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsMTEpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1qZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLnVzZXJTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIG90dChjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoKS51c2VyT25DbGljayhoKSl9KSxtZSgxLCJwIiwxNikscXQoMiwiY2xyLWljb24iLDE3KSxOZSgz''@;'; put 'put ''KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWplKCkuJGltcGxpY2l0LGQ9amUoKTtocigidGFibGUtYWN0aXZlIiwobnVsbD09ZC51c2VySW5mbz9udWxsOmQudXNlckluZm8uVVJJKT09PWEuVVJJKSxDZSgzKSxtcigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIHN0dChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KHpyKDApLFFlKDEsb3R0LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLFlyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gYXR0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLE5lKDIsIiBMb2FkaW5n''@;'; put 'put ''Li4uICIpLHllKCkoKSl9ZnVuY3Rpb24gbHR0KGMsbCl7aWYoMSZjJiYoenIoMCksbWUoMSwidHIiKSgyLCJ0ZCIsMjcpLE5lKDMsIiBNZXRhZGF0YSBDcmVhdGVkOiAiKSxtZSg0LCJiIiksTmUoNSkseWUoKSgpKCksbWUoNiwidHIiKSg3LCJ0ZCIsMjcpLE5lKDgsIiBNZXRhZGF0YSBVcGRh''@;'; put 'put ''dGVkOiAiKSxtZSg5LCJiIiksTmUoMTApLHllKCkoKSgpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSgzKTtDZSg1KSxvcihhLnVzZXJJbmZvLk1FVEFEQVRBQ1JFQVRFRCksQ2UoNSksb3IoYS51c2VySW5mby5NRVRBREFUQVVQREFURUQpfX1mdW5jdGlvbiBjdHQoYyxsKXtpZigxJmMmJihtZSgw''@;'; put 'put ''LCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksTmUoOCkseWUoKSgpKCkoKSxtZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpKDExLCJwIiwyOCkoMTIsImIiKSxOZSgxMykseWUoKSgpKCkoKSxRZSgx''@;'; put 'put ''NCxsdHQsMTEsMiwibmctY29udGFpbmVyIiw1KSx5ZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoOCksb3IoYS51c2VySW5mby5OQU1FKSxDZSg1KSxvcihhLnVzZXJJbmZvLkRJU1BMQVlOQU1FKSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNh''@;'; put 'put ''czkpfX1mdW5jdGlvbiB1dHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksTmUoOCkseWUoKSgpKCkoKSxtZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpLE5lKDEx''@;'; put 'put ''LCIgVXNlciBJRDogIiksbWUoMTIsImIiKSxOZSgxMykseWUoKSgpKCksbWUoMTQsInRyIikoMTUsInRkIiwyNyksTmUoMTYsIiBVc2VyIHByb3ZpZGVyIElEOiAiKSxtZSgxNywiYiIpLE5lKDE4KSx5ZSgpKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoOCksb3IoYS51c2Vy''@;'; put 'put ''SW5mby5OQU1FKSxDZSg1KSxvcihhLnVzZXJJbmZvLlVSSSksQ2UoNSksb3IoYS51c2VySW5mby5QUk9WSURFUil9fWZ1bmN0aW9uIGR0dChjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gRW1haWxzIFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiBodHQoYyxsKXtpZigxJmMmJihtZSgw''@;'; put 'put ''LCJ0ciIpKDEsInRkIiwzMSksTmUoMikseWUoKSxtZSgzLCJ0ZCIsMzEpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEuRU1BSUwpLENlKDIpLG9yKGEuVFlQRSl9fWZ1bmN0aW9uIGZ0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwi''@;'; put 'put ''dGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLE5lKDUsIkVNQUlMIikseWUoKSgpLG1lKDYsInRkIiwzMSkoNywiYiIpLE5lKDgsIlRZUEUiKSx5ZSgpKCkoKSgpLG1lKDksInRib2R5IiksUWUoMTAsaHR0LDUsMiwidHIiLDIpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKDMpO0Nl''@;'; put 'put ''KDEwKSxSZSgibmdGb3JPZiIsYS51c2VyRW1haWxzKX19ZnVuY3Rpb24gcHR0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLFFlKDMsZHR0LDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjQpLFFlKDUsZnR0LDExLDEsInRhYmxlIiwyNSkseWUoKSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9amUoMik7Q2UoMiksbXIoIkVNQUlMUyAoIixhLnVzZXJFbWFpbHNDb3VudHx8IjAiLCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEudXNlckVtYWlsc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS51c2VyRW1haWxzQ291bnQpfX1mdW5jdGlvbiBndHQoYyxsKXsxJmMmJnF0''@;'; put 'put ''KDAsImhyIil9ZnVuY3Rpb24gbXR0KGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBHcm91cHMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIHZ0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiwzMyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWplKCkuJGltcGxpY2l0O1JlKCJyb3V0''@;'; put 'put ''ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIithLlVSSSksQ2UoMSksbXIoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIF90dChjLGwpe2lmKDEmYyYmKHpyKDApLG1lKDEsInRkIiwzMyksTmUoMikseWUoKSxZcigpKSwyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQ7Q2Uo''@;'; put 'put ''MSksUmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iKyhhLkdST1VQVVJJfHxhLlVSSSkpLENlKDEpLG1yKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBidHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpLFFlKDEsdnR0LDIsMiwidGQiLDMyKSxRZSgyLF90dCwz''@;'; put 'put ''LDIsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZjKXtjb25zdCBhPWplKDMpO0NlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKX19ZnVuY3Rpb24geXR0''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLFFlKDIsYnR0LDMsMiwidHIiLDIpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDIpLFJlKCJuZ0Zvck9mIixhLnVzZXJHcm91cHMpfX1mdW5jdGlvbiB3dHQoYyxsKXsxJmMmJnF0KDAsImhyIil9ZnVuY3Rp''@;'; put 'put ''b24gQ3R0KGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBSb2xlcyBQcmVzZW50IikseWUoKSl9ZnVuY3Rpb24gU3R0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMzQpLE5lKDIpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUoNCk7Q2UoMSksUmUo''@;'; put 'put ''InJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3JvbGVzLyIrZC5nZXRSb2xlVVJJKGEuUk9MRVVSSSkpLENlKDEpLG1yKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIE10dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxRZSgyLFN0dCwzLDIsInRyIiwy''@;'; put 'put ''KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSgzKTtDZSgyKSxSZSgibmdGb3JPZiIsYS51c2VyUm9sZXMpfX1mdW5jdGlvbiB4dHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIpLHllKCksUWUoMyxDdHQsMiwwLCJoNSIsNSksbWUoNCwiZGl2IiwyNCksUWUoNSxNdHQs''@;'; put 'put ''MywxLCJ0YWJsZSIsMjUpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDIpLG1yKCJST0xFUyAoIixhLnVzZXJSb2xlc0NvdW50fHwiMCIsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09YS51c2VyUm9sZXNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEudXNlclJvbGVzQ291bnQpfX1m''@;'; put 'put ''dW5jdGlvbiBFdHQoYyxsKXsxJmMmJnF0KDAsImhyIil9ZnVuY3Rpb24ga3R0KGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBMb2dpbnMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIEF0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDMxKSxOZSgyKSx5ZSgpLG1lKDMs''@;'; put 'put ''InRkIiwzMSksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksb3IoYS5ET01BSU4pLENlKDIpLG9yKGEuVVNFUklEKX19ZnVuY3Rpb24gVHR0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJi''@;'; put 'put ''IiksTmUoNSwiRE9NQUlOIikseWUoKSgpLG1lKDYsInRkIikoNywiYiIpLE5lKDgsIlVTRVIgSUQiKSx5ZSgpKCkoKSgpLG1lKDksInRib2R5IiksUWUoMTAsQXR0LDUsMiwidHIiLDIpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKDMpO0NlKDEwKSxSZSgibmdGb3JPZiIsYS51c2VyTG9naW5z''@;'; put 'put ''KX19ZnVuY3Rpb24gRHR0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLFFlKDMsa3R0LDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjQpLFFlKDUsVHR0LDExLDEsInRhYmxlIiwyNSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoMiksbXIoIkxPR0lO''@;'; put 'put ''UyAoIixhLnVzZXJMb2dpbnNDb3VudHx8IjAiLCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEudXNlckxvZ2luc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS51c2VyTG9naW5zQ291bnQpfX1mdW5jdGlvbiBJdHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxRZSgxLGN0dCwxNSwzLCJk''@;'; put 'put ''aXYiLDIwKSxRZSgyLHV0dCwxOSwzLCJkaXYiLDIwKSxtZSgzLCJkaXYiLDIxKSg0LCJkaXYiLDIyKSg1LCJkaXYiLDIzKSxRZSg2LHB0dCw2LDMsImRpdiIsNSksUWUoNyxndHQsMSwwLCJociIsNSksbWUoOCwiZGl2IikoOSwiaDMiKSxOZSgxMCkseWUoKSxRZSgxMSxtdHQsMiwwLCJoNSIs''@;'; put 'put ''NSksbWUoMTIsImRpdiIsMjQpLFFlKDEzLHl0dCwzLDEsInRhYmxlIiwyNSkseWUoKSgpLFFlKDE0LHd0dCwxLDAsImhyIiw1KSxRZSgxNSx4dHQsNiwzLCJkaXYiLDUpLFFlKDE2LEV0dCwxLDAsImhyIiw1KSxRZSgxNyxEdHQsNiwzLCJkaXYiLDUpLHF0KDE4LCJiciIpLHllKCkoKSgpKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1qZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhJiZhLnVzZXJJbmZvKSxDZSg0KSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBl''@;'; put 'put ''PT09YS5TZXJ2ZXJUeXBlLlNhczkpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksQ2UoMyksbXIoIkdST1VQUyAoIixhLnVzZXJHcm91cHNDb3VudHx8IjAiLCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEudXNlckdyb3Vwc0NvdW50KSxDZSgyKSxS''@;'; put 'put ''ZSgibmdJZiIsMCE9YS51c2VyR3JvdXBzQ291bnQpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5T''@;'; put 'put ''ZXJ2ZXJUeXBlLlNhczkpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWxldCBDbGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0''@;'; put 'put ''aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZXI9Xyx0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2VyU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1OYW1lPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMuc2VydmVy''@;'; put 'put ''VHlwZT0iIix0aGlzLlNlcnZlclR5cGU9VWMuRCx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlw''@;'; put 'put ''ZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe2lmKEduLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvdXNlcnMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1OYW1lPXRoaXMu''@;'; put 'put ''cm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksR24udXNlcm5hdi51c2VyTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50KXRoaXMudXNlcnM9R24udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9R24udXNlcm5hdi51c2VyU2VhcmNoO2Vsc2UgaWYodm9pZCAwPT09R24udXNlcm5hdi51''@;'; put 'put ''c2VyTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9''@;'; put 'put ''PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe05BTUU6Zi5uYW1lLFVSSTpmLmlkLFBST1ZJREVSOmYucHJvdmlkZXJJZH0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1oLEduLnVzZXJuYXYudXNlckxpc3Q9aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2Vy''@;'; put 'put ''bmF2L3VzZXJtZW1iZXJzIixudWxsKS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1hLnVzZXJzLEduLnVzZXJuYXYudXNlckxpc3Q9YS51c2Vyc30pKToodGhpcy51c2Vycz1Hbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Hbi51c2VybmF2LnVzZXJTZWFy''@;'; put 'put ''Y2gpLHRoaXMucGFyYW1QcmVzZW50KWlmKHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YSl7bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2ErIi9tZW1iZXJzaGlwcz9saW1p''@;'; put 'put ''dD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGQ9PmQudGV4dCgpKS50aGVuKGQ9PntsZXQgaD1KU09OLnBhcnNlKGQpO3RoaXMudXNlckRhdGE9aCx0aGlzLmxvYWRpbmc9ITE7bGV0IGY9aC5pdGVtcy5tYXAoXz0+KHtHUk9VUE5BTUU6Xy5uYW1l''@;'; put 'put ''LFVSSTpfLmlkfSkpO3RoaXMudXNlckdyb3Vwcz1mLHRoaXMudXNlckdyb3Vwc0NvdW50PWYubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChfPT5fLlVSST09PWEpKX0pfWVsc2V7Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7''@;'; put 'put ''dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6YX1dfSkudGhlbihoPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgVWMuRC5TYXM5OnRoaXMudXNlckluZm89aC5pbmZvWzBdLHRoaXMu''@;'; put 'put ''dXNlckVtYWlscz1oLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1oLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9aC5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWgucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1oLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1oLmxv''@;'; put 'put ''Z2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBVYy5ELlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoZj0+Zi5VUkk9PT1hKTtlbHNle2NvbnN0IGY9aC5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJOmYuSUQsTkFNRTpmLk5BTUUsRElTUExBWU5BTUU6''@;'; put 'put ''Zi5OQU1FfX19dGhpcy51c2VyRGF0YT1oLHRoaXMudXNlckdyb3Vwcz1oLmdyb3Vwcyx0aGlzLnVzZXJHcm91cHNDb3VudD1oLmdyb3Vwcy5sZW5ndGh9KX19dXNlckxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy51c2Vycyx0aGlzLnVzZXJT''@;'; put 'put ''ZWFyY2gsIk5BTUUiKSxHbi51c2VybmF2LnVzZXJTZWFyY2g9dGhpcy51c2VyU2VhcmNofXVzZXJPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFz''@;'; put 'put ''dEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuVVJJKSksdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYS5VUkkrIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVy''@;'; put 'put ''czp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGg9PmgudGV4dCgpKS50aGVuKGg9PntsZXQgZj1KU09OLnBhcnNlKGgpO3RoaXMudXNlckRhdGE9Zix0aGlzLmxvYWRpbmc9ITE7bGV0IF89Zi5pdGVtcy5tYXAoVD0+KHtHUk9VUE5BTUU6VC5uYW1lLFVSSTpULmlkfSkpO3Ro''@;'; put 'put ''aXMudXNlckdyb3Vwcz1fLHRoaXMudXNlckdyb3Vwc0NvdW50PV8ubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChUPT5ULlVSST09PWEuVVJJKSl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtp''@;'; put 'put ''d2FudDpbe3VyaTphLlVSSX1dfSkudGhlbihmPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgVWMuRC5TYXM5OnRoaXMudXNlckluZm89Zi5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1mLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1mLmVtYWlscy5s''@;'; put 'put ''ZW5ndGgsdGhpcy51c2VyUm9sZXM9Zi5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWYucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1mLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1mLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBVYy5ELlNhc2pzOmlmKHRoaXMudXNlcnMpdGhp''@;'; put 'put ''cy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoXz0+Xy5VUkk9PT1hLlVSSSk7ZWxzZXtjb25zdCBfPWYuZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTpfLklELE5BTUU6Xy5OQU1FLERJU1BMQVlOQU1FOl8uTkFNRX19fXRoaXMudXNlckRhdGE9Zix0aGlzLnVzZXJHcm91cHM9Zi5ncm91''@;'; put 'put ''cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9Zi5ncm91cHMubGVuZ3RofSl9Z2V0Um9sZVVSSShhKXtyZXR1cm4gYS5zcGxpdCgiT01TT0JKOklkZW50aXR5R3JvdXAiKVsxXS5zbGljZSgxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQWMpLHR0''@;'; put 'put ''KG9hKSx0dChXbCksdHQoSmQpLHR0KERzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11c2VyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJz''@;'; put 'put ''ZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQi''@;'; put 'put ''LCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBVc2VycyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsi''@;'; put 'put ''c2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJ0YWJsZS1hY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFk''@;'; put 'put ''ZGluZyJdLFsic2hhcGUiLCJ1c2VyIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwidXNlci1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsi''@;'; put 'put ''Y2xhc3MiLCJ0YWJsZSB1c2VyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwidXNlci1pbmZvIl0sWzEsImxlZnQiXSxbMSwidXNlci1pbmZvLXRleHQiXSxbMSwidGFibGUiLCJ1c2VyLXRhYmxlIl0sWzEsIndpZHRoLTUwIl0sWzEsIiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2''@;'; put 'put ''ZSIsImNsYXNzIiwiIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCIiLDMsInJvdXRlckxpbmsiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiwwKSgxLCJjbHIt''@;'; put 'put ''dHJlZSIpLFFlKDIsaXR0LDYsMywiY2xyLXRyZWUtbm9kZSIsMSksUWUoMyxzdHQsMiwxLCJuZy1jb250YWluZXIiLDIpLHllKCkoKSxtZSg0LCJkaXYiLDMpLFFlKDUsYXR0LDMsMCwiZGl2Iiw0KSxRZSg2LEl0dCwxOSwxMSwiZGl2Iiw1KSx5ZSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIs''@;'; put 'put ''ZC51c2VycyksQ2UoMSksUmUoIm5nRm9yT2YiLGQudXNlcnMpLENlKDIpLFJlKCJuZ0lmIixkLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLnVzZXJEYXRhJiYhZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbeHMsWmksQnUsV18sV2EsQnMsT3MsZGQsZzEsa2EsZjEsbjNdLHN0eWxlczpb''@;'; put 'put ''Ii5zaWRlYmFyLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnVzZXItaW5mby10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0udXNlci1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5''@;'; put 'put ''Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9LnVzZXItaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnVzZXItZGF0YVtfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6YXV0b30udXNlci1kYXRh''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''I2Y5ZjlmOTt3aWR0aDoxMDAlfS51c2VyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09NUCVdICAgdHJb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtjdXJzb3I6cG9pbnRlcn0ud2lkdGgtNTBbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJX0ud2lkdGgtMzNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMzJX0udGFibGUtY29udGFpbmVyW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OnNjcm9sbDttYXgtaGVpZ2h0OjUwMHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsudXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Il19KSxjfSkoKSxMdHQ9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuaHR0cD1hLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPWQsdGhpcy52aXlhQXBpcz17QW5hbHl0aWNzX0luc2lnaHRzOntpbnNpZ2h0czoiL2luc2lnaHRzIn0sVmlzdWFsaXNhdGlvbjp7cmVwb3J0czoiL3JlcG9ydHMiLHJlcG9ydEltYWdlczoi''@;'; put 'put ''L3JlcG9ydEltYWdlcyIscmVwb3J0VHJhbnNmb3JtczoiL3JlcG9ydFRyYW5zZm9ybXMiLHZpc3VhbEFuYWx5dGljczoiL3Zpc3VhbEFuYWx5dGljcyJ9LENvbXB1dGU6e2pvYnM6Ii9qb2JEZWZpbml0aW9ucyIsam9iRXhlY3V0aW9uOiIvam9iRXhlY3V0aW9uIn0sRGVjaXNpb25fTWFuYWdl''@;'; put 'put ''bWVudDp7bW9kZWxNYW5hZ2VtZW50OiIvbW9kZWxNYW5hZ2VtZW50Iixtb2RlbFJlcG9zaXRvcnk6Ii9tb2RlbFJlcG9zaXRvcnkiLG1vZGVsUHVibGlzaDoiL21vZGVsUHVibGlzaCIsbWljcm9hbmFseXRpY1Njb3JlOiIvbWljcm9hbmFseXRpY1Njb3JlIixkYXRhTWluaW5nOiIvZGF0YU1p''@;'; put 'put ''bmluZyIsYnVzaW5lc3NSdWxlczoiL2J1c2luZXNzUnVsZXMiLHJlZmVyZW5jZURhdGE6Ii9yZWZlcmVuY2VEYXRhIix0cmVhdG1lbnREZWZpbml0aW9uczoiL3RyZWF0bWVudERlZmluaXRpb25zIixzdWJqZWN0Q29udGFjdHM6Ii9zdWJqZWN0Q29udGFjdHMiLGRlY2lzaW9uc1J1bnRpbWVC''@;'; put 'put ''dWlsZGVyOiIvZGVjaXNpb25zUnVudGltZUJ1aWxkZXIifSxDb3JlX1NlcnZpY2VzOntmb2xkZXJzOiIvZm9sZGVycyIsZmlsZXM6Ii9maWxlcyIsYW5ub3RhdGlvbnM6Ii9hbm5vdGF0aW9ucyIsYXV0aG9yaXphdGlvbjoiL2F1dGhvcml6YXRpb24iLHJlbGF0aW9uc2hpcHM6Ii9yZWxhdGlv''@;'; put 'put ''bnNoaXBzIixTQVNMb2dvbjoiL1NBU0xvZ29uIn0sQXV0b21hdGVkX01hY2hpbmVfTGVhcm5pbmc6e21sUGlwZWxpbmVBdXRvbWF0aW9uOiIvbWxQaXBlbGluZUF1dG9tYXRpb24ifSxPdGhlcjp7aWRlbnRpdGllczoiL2lkZW50aXRpZXMifX0sdGhpcy5zZXJ2ZXJVcmw9IiI7Y29uc3QgaD10''@;'; put 'put ''aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPWg/LnNlcnZlclVybHx8IiIsdGhpcy5nZXRCeUNvbGxlY3Rpb24oImpvYnMiKS5zdWJzY3JpYmUoZj0+e2NvbnNvbGUubG9nKCJyZXMiLGYpfSl9Z2V0QWxsQ29sbGVjdGlvbnMoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy52aXlhQXBpc31nZXRCeVVybChhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0QnlDb2xsZWN0aW9uKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7YX1gLHt3aXRo''@;'; put 'put ''Q3JlZGVudGlhbHM6ITB9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoaFApLGFyKGU4KSl9LGMuXHUwMjc1cHJvdj1kcih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gUnR0''@;'; put 'put ''KGMsbCl7MSZjJiZxdCgwLCJkaXYiLDkpfWZ1bmN0aW9uIE90dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInNwYW4iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoKS5vblZhbHVlQ2xpY2soaCkpfSks''@;'; put 'put ''TmUoMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQ7Q2UoMSksb3IoYS5kZXNjcmlwdGlvbil9fWZ1bmN0aW9uIFB0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInNlY3Rpb24iLDExKSgxLCJuZ3gtanNvbi12aWV3ZXIiLDEyKSx4dCgic2VnbWVudExpbmtD''@;'; put 'put ''bGlja2VkIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoMikub25TZWdtZW50TGlua0NsaWNrKGgpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQsZD1qZSgpO0NlKDEpLFJlKCJqc29uIixhLnZhbHVlKSgiZXhwYW5kZWQiLGQuZXhwYW5kZWQpKCJkZXB0''@;'; put 'put ''aCIsZC5kZXB0aCkoIl9jdXJyZW50RGVwdGgiLGQuX2N1cnJlbnREZXB0aCsxKX19Y29uc3QgRnR0PWZ1bmN0aW9uKGMpe3JldHVyblsic2VnbWVudCIsY119LEh0dD1mdW5jdGlvbihjLGwpe3JldHVybnsic2VnbWVudC1tYWluIjohMCxleHBhbmRhYmxlOmMsZXhwYW5kZWQ6bH19O2Z1bmN0''@;'; put 'put ''aW9uIE50dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInNlY3Rpb24iLDIpKDEsInNlY3Rpb24iLDMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoamUoKS50b2dnbGUoZikpfSksUWUoMixSdHQsMSwwLCJkaXYiLDQpLG1l''@;'; put 'put ''KDMsInNwYW4iLDUpLE5lKDQpLHllKCksbWUoNSwic3BhbiIsNiksTmUoNiwiOiAiKSx5ZSgpLFFlKDcsT3R0LDIsMSwic3BhbiIsNykseWUoKSxRZSg4LFB0dCwyLDQsInNlY3Rpb24iLDgpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9amUoKTtSZSgibmdDbGFzcyIsSjIo''@;'; put 'put ''NixGdHQsInNlZ21lbnQtdHlwZS0iK2EudHlwZSkpLENlKDEpLFJlKCJuZ0NsYXNzIixRMig4LEh0dCxkLmlzRXhwYW5kYWJsZShhKSxhLmV4cGFuZGVkKSksQ2UoMSksUmUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKGEpKSxDZSgyKSxvcihhLmtleSksQ2UoMyksUmUoIm5nSWYiLCFhLmV4cGFu''@;'; put 'put ''ZGVkfHwhZC5pc0V4cGFuZGFibGUoYSkpLENlKDEpLFJlKCJuZ0lmIixhLmV4cGFuZGVkJiZkLmlzRXhwYW5kYWJsZShhKSl9fWxldCBWdHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kZWQ9ITAsdGhpcy5kZXB0aD0tMSx0aGlzLl9jdXJyZW50RGVwdGg9MCx0aGlz''@;'; put 'put ''LnNlZ21lbnRMaW5rQ2xpY2tlZD1uZXcgRXIsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMuc2VnbWVudHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3QiPT10eXBlb2YgdGhpcy5qc29uP09iamVjdC5rZXlzKHRoaXMuanNvbikuZm9yRWFj''@;'; put 'put ''aChhPT57dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShhLHRoaXMuanNvblthXSkpfSk6dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMuanNvbn0pYCx0aGlzLmpzb24pKX1pc0V4cGFuZGFibGUoYSl7cmV0dXJuIm9iamVj''@;'; put 'put ''dCI9PT1hLnR5cGV8fCJhcnJheSI9PT1hLnR5cGV9dG9nZ2xlKGEpe3RoaXMuaXNFeHBhbmRhYmxlKGEpJiYoYS5leHBhbmRlZD0hYS5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKGEpeyJsaW5rIj09PWEudHlwZSYmdGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhLnZhbHVlKX1vblNlZ21l''@;'; put 'put ''bnRMaW5rQ2xpY2soYSl7dGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhKX1wYXJzZUtleVZhbHVlKGEsZCl7Y29uc3QgaD17a2V5OmEsdmFsdWU6ZCx0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIitkLGV4cGFuZGVkOnRoaXMuaXNFeHBhbmRlZCgpfTtzd2l0Y2godHlwZW9mIGgudmFs''@;'; put 'put ''dWUpe2Nhc2UibnVtYmVyIjpoLnR5cGU9Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjpoLnR5cGU9ImJvb2xlYW4iO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmgudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nhc2Uic3RyaW5nIjppZih0aGlzLmlzTGluayhoLnZhbHVlKSl7aC50eXBlPSJsaW5r''@;'; put 'put ''IjticmVha31oLnR5cGU9InN0cmluZyIsaC5kZXNjcmlwdGlvbj0nIicraC52YWx1ZSsnIic7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmgudHlwZT0idW5kZWZpbmVkIixoLmRlc2NyaXB0aW9uPSJ1bmRlZmluZWQiO2JyZWFrO2Nhc2Uib2JqZWN0IjpudWxsPT09aC52YWx1ZT8oaC50eXBlPSJu''@;'; put 'put ''dWxsIixoLmRlc2NyaXB0aW9uPSJudWxsIik6QXJyYXkuaXNBcnJheShoLnZhbHVlKT8oaC50eXBlPSJhcnJheSIsaC5kZXNjcmlwdGlvbj0iQXJyYXlbIitoLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKTpoLnZhbHVlIGluc3RhbmNlb2YgRGF0ZT9oLnR5cGU9''@;'; put 'put ''ImRhdGUiOihoLnR5cGU9Im9iamVjdCIsaC5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1ZSkpfXJldHVybiBofWlzTGluayhhKXtyZXR1cm4iaHR0cHM6Ly8iPT09YS5zdWJzdHJpbmcoMCw4KXx8Imh0dHA6Ly8iPT09YS5zdWJzdHJpbmcoMCw3KXx8Ii8iPT09''@;'; put 'put ''YVswXX1pc0V4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5fY3VycmVudERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKGEpe2NvbnN0IGQ9bmV3IFdlYWtNYXA7cmV0dXJuIGZ1bmN0aW9uIGgoZixfKXtsZXQgVCxXO3JldHVybiJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZnx8bnVsbD09PWZ8fGYgaW5zdGFuY2VvZiBCb29sZWFufHxmIGluc3RhbmNlb2YgRGF0ZXx8ZiBpbnN0YW5jZW9mIE51bWJlcnx8ZiBpbnN0YW5jZW9mIFJlZ0V4cHx8ZiBpbnN0YW5jZW9mIFN0cmluZz9mOihUPWQuZ2V0KGYpLHZvaWQgMCE9PVQ/eyRyZWY6VH06KGQuc2V0''@;'; put 'put ''KGYsXyksQXJyYXkuaXNBcnJheShmKT8oVz1bXSxmLmZvckVhY2goZnVuY3Rpb24oaWUsZ2Upe1dbZ2VdPWgoaWUsXysiWyIrZ2UrIl0iKX0pKTooVz17fSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKGllKXtXW2llXT1oKGZbaWVdLF8rIlsiK0pTT04uc3RyaW5naWZ5KGllKSsi''@;'; put 'put ''XSIpfSkpLFcpKX0oYSwiJCIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1dLGlucHV0czp7anNvbjoianNvbiIsZXhwYW5kZWQ6ImV4cGFuZGVkIixk''@;'; put 'put ''ZXB0aDoiZGVwdGgiLF9jdXJyZW50RGVwdGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlua0NsaWNrZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LGZlYXR1cmVzOlt2YV0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5nQ2xhc3Mi''@;'; put 'put ''LDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ0NsYXNzIl0sWzMsIm5nQ2xhc3MiLCJjbGljayJdLFsiY2xhc3MiLCJ0b2dnbGVyIiw0LCJuZ0lmIl0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJhdG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNrIiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJjbGFzcyIsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siXSxbMSwiY2hpbGRyZW4iXSxbMywianNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERlcHRoIiwic2VnbWVudExpbmtDbGlja2VkIl1d''@;'; put 'put ''LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwic2VjdGlvbiIsMCksUWUoMSxOdHQsOSwxMSwic2VjdGlvbiIsMSkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nRm9yT2YiLGQuc2VnbWVudHMpKX0sZGVwZW5kZW5jaWVzOlt1Yyx4cyxaaSxjXSxzdHlsZXM6WydAY2hhcnNldCAi''@;'; put 'put ''VVRGLTgiOy5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OnZhcigtLW5neC1qc29uLWZvbnQtZmFtaWx5LCBtb25vc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1uZ3gtanNvbi1mb250LXNpemUsIDFlbSk7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxv''@;'; put 'put ''dzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHg7bWFyZ2luOjFweCAxcHggMXB4IDEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdyYXA6YnJlYWstd29yZH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1h''@;'; put 'put ''aW5bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0Oi0xNHB4O21hcmdpbi10b3A6M3B4O2ZvbnQtc2l6ZTouOGVtO2xpbmUtaGVpZ2h0OjEuMmVtO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjb2xvcjp2''@;'; put 'put ''YXIoLS1uZ3gtanNvbi10b2dnbGVyLCAjNzg3ODc4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFm''@;'; put 'put ''dGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IlxcMjViYSI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjFzIGVhc2UtaW59Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgIC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24ta2V5LCAjNEUxODdDKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtc2VwYXJhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zZXBhcmF0b3IsICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNl''@;'; put 'put ''Z21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdmFsdWUsICMwMDApfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgLmNoaWxkcmVuW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxMnB4fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1zdHJpbmdbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAu''@;'; put 'put ''c2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tc3RyaW5nLCAjRkY2QjZCKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5b''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bWJlciwgIzAwOTY4OCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWJvb2xlYW5bX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYm9vbGVhbiwgI0I5MzhBNCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10''@;'; put 'put ''eXBlLWRhdGVbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZGF0ZSwgIzA1NjY4RCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWFycmF5LCAjOTk5KX0ubmd4LWpzb24tdmll''@;'; put 'put ''d2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtb2JqZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW9iamVjdCwg''@;'; put 'put ''Izk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZh''@;'; put 'put ''cigtLW5neC1qc29uLWZ1bmN0aW9uLCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1saW5rLCAjOUI1OUI2KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdt''@;'; put 'put ''ZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZCwgI2ZmZil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4g''@;'; put 'put ''LnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi1udWxsLWJnLCByZWQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlw''@;'; put 'put ''ZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1rZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRl''@;'; put 'put ''ZmluZWQta2V5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbGlua1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXt0''@;'; put 'put ''ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12''@;'; put 'put ''aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5k''@;'; put 'put ''ZWRbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVdOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdLCAubmd4LWpzb24tdmll''@;'; put 'put ''d2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcn0nXX0pLGN9KSgpLEJ0dD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvb119KSxjfSkoKSxqdHQ9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7aWYoIWEuaW5jbHVkZXMoIi8iKSlyZXR1cm4gYTtsZXQgZD0iIjtjb25zdCBoPWEuc3BsaXQoIi8i''@;'; put 'put ''KTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylpZigiIiE9PWhbZl0pe2NvbnN0IF89aFtmXTtkKz0iLyIrXyxoW2ZdPWA8YSBocmVmPSR7ZH0+JHtffTwvYT5gfXJldHVybiBoLmpvaW4oIi8iKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1cGlwZT1OYSh7bmFtZToibGlua2luemUiLHR5cGU6YyxwdXJlOiEwfSksY30pKCksenR0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBKU09OLnN0cmluZ2lmeShhLG51bGwsMil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''fSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6InByZXR0eWpzb24iLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7ZnVuY3Rpb24gVXR0KGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwyMiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hjKCJ2YWx1ZSIsYS52YWx1ZSksQ2Uo''@;'; put 'put ''MSksbXIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIFp0dChjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGdyb3VwIiwyMCksUWUoMSxVdHQsMiwyLCJvcHRpb24iLDIxKSxiYSgyLCJrZXl2YWx1ZSIpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWplKCk7UmUoImxhYmVsIixhLmtl''@;'; put 'put ''eSksQ2UoMSksUmUoIm5nRm9yT2YiLFVsKDIsMixkLmNvbGxlY3Rpb25zW2Eua2V5XSkpfX1mdW5jdGlvbiBZdHQoYyxsKXsxJmMmJihtZSgwLCJwIiwyMyksTmUoMSwiIFNlbGVjdCBjb2xsZWN0aW9uIHRvIHN0YXJ0ICIpLHllKCkpfWZ1bmN0aW9uIFd0dChjLGwpezEmYyYmcXQoMCwiY2xy''@;'; put 'put ''LXNwaW5uZXIiLDI0KX1mdW5jdGlvbiBHdHQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gJHR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgyKTtyZXR1cm4g''@;'; put 'put ''aC5saW5rc1NlYXJjaD0iIixqdChoLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gcXR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjUpKDEsImRpdiIsMjYpKDIsImlucHV0IiwyNywyOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1''@;'; put 'put ''bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLmxpbmtzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LEd0dCwxLDAsImNsci1pY29uIiwyOSksUWUoNSwkdHQsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsMzApLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1qZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLmxpbmtzU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBLdHQoYyxsKXtp''@;'; put 'put ''ZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzNCkseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKCkuJGltcGxpY2l0LF89amUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8uZW5kcG9pbnRMaW5rcykpfSkoImNsckV4cGFu''@;'; put 'put ''ZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiwzNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkubGlua09uQ2xpY2soaCkpfSks''@;'; put 'put ''cXQoMiwiY2xyLWljb24iLDM2KSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWplKCkuJGltcGxpY2l0O1JlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLGpjKCIgIixhLm1ldGhvZCwiICIsYS5y''@;'; put 'put ''ZWwsIiAiKX19ZnVuY3Rpb24gWHR0KGMsbCl7aWYoMSZjJiYoenIoMCksUWUoMSxLdHQsNCw0LCJjbHItdHJlZS1ub2RlIiwzMyksWXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBKdHQoYyxsKXsxJmMmJnF0KDAsImNs''@;'; put 'put ''ci1pY29uIiwzMSl9ZnVuY3Rpb24gUXR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDMyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgyKTtyZXR1cm4gaC5pdGVtc1NlYXJjaD0iIixqdChoLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSks''@;'; put 'put ''eWUoKX19ZnVuY3Rpb24gZW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjUpKDEsImRpdiIsMjYpKDIsImlucHV0IiwzNywzOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLml0ZW1zU2VhcmNoPWgp''@;'; put 'put ''fSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSgpLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LEp0dCwxLDAsImNsci1pY29uIiwyOSksUWUoNSxRdHQsMSwwLCJjbHItaWNvbiIsMzApLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1qZSgpO0Nl''@;'; put 'put ''KDIpLFJlKCJuZ01vZGVsIixkLml0ZW1zU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiB0bnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzNCks''@;'; put 'put ''eHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKCkuJGltcGxpY2l0LF89amUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8uZW5kcG9pbnRJdGVtcykpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS4k''@;'; put 'put ''aW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiwzNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KGplKCkuaXRlbU9uQ2xpY2soaCkpfSkscXQoMiwiY2xyLWljb24iLDM2KSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25z''@;'; put 'put ''dCBhPWplKCkuJGltcGxpY2l0O1JlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLG1yKCIgIixhLm5hbWV8fGEuaWQsIiAiKX19ZnVuY3Rpb24gbm50KGMsbCl7aWYoMSZjJiYoenIoMCksUWUoMSx0bnQs''@;'; put 'put ''NCwzLCJjbHItdHJlZS1ub2RlIiwzMyksWXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBybnQoYyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiwzOSl9ZnVuY3Rpb24gaW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu''@;'; put 'put ''KCk7bWUoMCwibmd4LWpzb24tdmlld2VyIiw0OSkseHQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKDMpLm9uSnNvbkxpbmtDbGljayhoKSl9KSx5ZSgpfTImYyYmUmUoImpzb24iLGplKDMpLmVuZHBvaW50SnNvbikoImV4cGFuZGVkIiwhMSl9''@;'; put 'put ''ZnVuY3Rpb24gb250KGMsbCl7aWYoMSZjJiYoenIoMCksTmUoMSksYmEoMiwicHJldHR5anNvbiIpLFlyKCkpLDImYyl7Y29uc3QgYT1qZSgzKTtDZSgxKSxtcigiXG4gICAgICAgICAgICAiLFVsKDIsMSxhLmVuZHBvaW50SnNvbiksIlxuICAgICAgICAgICIpfX1mdW5jdGlvbiBzbnQoYyxs''@;'; put 'put ''KXtpZigxJmMmJih6cigwKSxOZSgxLCJcbiAgICAgICAgICAiKSxRZSgyLGludCwxLDIsIm5neC1qc29uLXZpZXdlciIsNDgpLE5lKDMsIlxuICAgICAgICAgICIpLFFlKDQsb250LDMsMywibmctY29udGFpbmVyIiwxOSksTmUoNSwiXG4gICAgICAgICIpLFlyKCkpLDImYyl7Y29uc3QgYT1q''@;'; put 'put ''ZSgyKTtDZSgyKSxSZSgibmdJZiIsIWEucmF3SnNvbiksQ2UoMiksUmUoIm5nSWYiLGEucmF3SnNvbil9fWZ1bmN0aW9uIGFudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO3pyKDApLG1lKDEsImRpdiIsNDApKDIsInNwYW4iLDQxKSxOZSgzLCIgR0VUICIpLG1lKDQsInAiLDQyKSx4dCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChqZSgpLm9uQnJlYWRjdW1zQ2xpY2soaCkpfSksYmEoNSwibGlua2luemUiKSx5ZSgpLG1lKDYsImJ1dHRvbiIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoKS5jb3B5QnJlYWRjcnVtcygpKX0p''@;'; put 'put ''LHF0KDcsImNsci1pY29uIiwxNSkseWUoKSgpLG1lKDgsImRpdiIsNDMpKDksImNsci1pbnB1dC1jb250YWluZXIiLDEyKSgxMCwibGFiZWwiKSxOZSgxMSwiU3RhcnQiKSx5ZSgpLG1lKDEyLCJpbnB1dCIsNDQpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSks''@;'; put 'put ''anQoamUoKS5lbmRwb2ludC5zdGFydD1oKX0pLHllKCkoKSxtZSgxMywiY2xyLWlucHV0LWNvbnRhaW5lciIsMTIpKDE0LCJsYWJlbCIpLE5lKDE1LCJMaW1pdCIpLHllKCksbWUoMTYsImlucHV0Iiw0NCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChq''@;'; put 'put ''ZSgpLmVuZHBvaW50LmxpbWl0PWgpfSkseWUoKSgpLG1lKDE3LCJidXR0b24iLDQ1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuYXBwbHlRdWVyeVBhcmFtcygpKX0pLHF0KDE4LCJjbHItaWNvbiIsNDYpLHllKCkoKSgpLG1lKDE5LCJwcmUiLDQ3KSxOZSgy''@;'; put 'put ''MCwiICAgICAgICAiKSxRZSgyMSxzbnQsNiwyLCJuZy1jb250YWluZXIiLDE5KSxOZSgyMiwiXG4gICAgICAiKSx5ZSgpLFlyKCl9aWYoMiZjKXtjb25zdCBhPWplKCk7Q2UoNCksUmUoImlubmVySFRNTCIsVWwoNSw3LGEuZW5kcG9pbnQudXJsKSxxMiksQ2UoOCksUmUoIm5nTW9kZWwiLGEu''@;'; put 'put ''ZW5kcG9pbnQuc3RhcnQpKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksQ2UoNCksUmUoIm5nTW9kZWwiLGEuZW5kcG9pbnQubGltaXQpKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCksQ2UoMSksUmUoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBv''@;'; put 'put ''aW50LmxpbWl0JiZ2b2lkIDA9PT1hLmVuZHBvaW50LnN0YXJ0KSxDZSg0KSxSZSgibmdJZiIsYS5lbmRwb2ludEpzb24pfX1sZXQgbG50PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5zYXNWaXlhU2VydmljZT1kLHRoaXMuc2Fz''@;'; put 'put ''U2VydmljZT1oLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5jb2xsZWN0aW9ucz17fSx0aGlzLmNvbGxlY3Rpb249IiIsdGhpcy5lbmRwb2ludExpbmtzPVtdLHRoaXMuZW5kcG9pbnRJdGVtcz1bXSx0aGlzLmVuZHBvaW50PXt1cmw6IiIsc3RhcnQ6LTEsbGltaXQ6LTF9LHRoaXMuZW5kcG9p''@;'; put 'put ''bnRMb2FkaW5nPSExLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhpcy5yYXdKc29uPSExLHRoaXMubGlua3NTZWFyY2g9IiIsdGhpcy5pdGVtc1NlYXJjaD0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZ31uZ09uSW5pdCgpe3RoaXMuc2FzanNDb25maWc9dGhpcy5z''@;'; put 'put ''YXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5jb2xsZWN0aW9ucz10aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEFsbENvbGxlY3Rpb25zKCl9bGlua3NMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRMaW5rcyx0aGlzLmxp''@;'; put 'put ''bmtzU2VhcmNoLCJyZWwiKSxHbi52aXlhQXBpLmxpbmtzc1NlYXJjaD10aGlzLmxpbmtzU2VhcmNofWl0ZW1zTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50SXRlbXMsdGhpcy5pdGVtc1NlYXJjaCwibmFtZSIpLEduLnZpeWFB''@;'; put 'put ''cGkuaXRlbXNTZWFyY2g9dGhpcy5pdGVtc1NlYXJjaH1saW5rT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5ocmVmKX1pdGVtT25DbGljayhhKXt0aGlzLmxvYWRVcmwoYS5saW5rc1swXS5ocmVmKX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYm''@;'; put 'put ''dGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX11cGRhdGVTZWxlY3RlZENvbGxlY3Rpb24oKXtHbi52aXlhQXBpLnNlbGVj''@;'; put 'put ''dGVkQ29sbGVjdGlvbj10aGlzLmNvbGxlY3Rpb24sdGhpcy5lbmRwb2ludC51cmw9dGhpcy5jb2xsZWN0aW9uLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeUNvbGxlY3Rpb24odGhpcy5jb2xsZWN0aW9uKS5zdWJzY3JpYmUoYT0+e3RoaXMuZW5k''@;'; put 'put ''cG9pbnRMaW5rcz1hLmxpbmtzLHRoaXMuZW5kcG9pbnRJdGVtcz1hLml0ZW1zP2EuaXRlbXM6W10sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLmVuZHBvaW50SnNvbj1hLHRoaXMuZW5kcG9pbnQuc3RhcnQ9YS5zdGFydCx0aGlzLmVuZHBvaW50LmxpbWl0PWEubGltaXR9LGE9Pnt0''@;'; put 'put ''aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExO2xldCBkPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO2EubWVzc2FnZSYmKGQ9YS5tZXNzYWdlKSxhLmVycm9yJiYoYS5lcnJvci5tZXNzYWdlJiYoZD1hLmVycm9yLm1lc3NhZ2UpLGEuZXJyb3IucmVtZWRpYXRpb24mJihk''@;'; put 'put ''PWAke2R9XG4ke2EuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsZCxudWxsLCJIVFRQIEVycm9yIil9KX1vbkpzb25MaW5rQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEpfW9uSnNvbkNsaWNrKGEpe2lmKGEucHJldmVudERlZmF1bHQo''@;'; put 'put ''KSwiQSI9PT1hLnNyY0VsZW1lbnQudGFnTmFtZSl7Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfX1vbkJyZWFkY3Vtc0NsaWNrKGEpe2lmKGEucHJldmVudERlZmF1bHQoKSwhYS5zcmNFbGVtZW50LmhyZWYpcmV0''@;'; put 'put ''dXJuO2NvbnN0IGQ9YS5zcmNFbGVtZW50LmhyZWYuc3BsaXQoYS5zcmNFbGVtZW50Lmhvc3QpWzFdO3RoaXMubG9hZFVybChkKX1jb3B5SnNvbigpe3RoaXMuZW5kcG9pbnRKc29uJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLmVuZHBvaW50SnNv''@;'; put 'put ''bixudWxsLDIpKX1jb3B5QnJlYWRjcnVtcygpe3RoaXMuZW5kcG9pbnQmJnRoaXMuZW5kcG9pbnQudXJsJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmVuZHBvaW50LnVybCl9YXBwbHlRdWVyeVBhcmFtcygpe2NvbnN0IGE9dGhpcy5lbmRwb2ludC5zdGFydCxkPXRoaXMu''@;'; put 'put ''ZW5kcG9pbnQubGltaXQsaD1gPyR7dm9pZCAwIT09YT8ic3RhcnQ9IithOiIifSR7dm9pZCAwIT09ZD8iJmxpbWl0PSIrZDoiIn1gLGY9YCR7dGhpcy5lbmRwb2ludC51cmwuc3BsaXQoIj8iKVswXX0ke2h9YDt0aGlzLmxvYWRVcmwoZil9bG9hZFVybChhKXt0aGlzLmVuZHBvaW50TG9hZGlu''@;'; put 'put ''Zz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5VXJsKGEpLnN1YnNjcmliZShkPT57dGhpcy5lbmRwb2ludExpbmtzPWQubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWQuaXRlbXM/ZC5pdGVtczpbXSx0aGlzLmVuZHBvaW50SnNvbj1kLHRoaXMuZW5kcG9pbnRMb2FkaW5nPSExLHRoaXMu''@;'; put 'put ''ZW5kcG9pbnQudXJsPWEsdGhpcy5lbmRwb2ludC5zdGFydD1kLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9ZC5saW1pdH0sZD0+e3RoaXMuZW5kcG9pbnRMb2FkaW5nPSExO2xldCBoPSJFcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHJlcXVlc3QiO2QubWVzc2FnZSYmKGg9ZC5tZXNz''@;'; put 'put ''YWdlKSxkLmVycm9yJiYoZC5lcnJvci5tZXNzYWdlJiYoaD1kLmVycm9yLm1lc3NhZ2UpLGQuZXJyb3IucmVtZWRpYXRpb24mJihoPWAke2h9XG4ke2QuZXJyb3IucmVtZWRpYXRpb259YCkpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsaCxudWxsLCJIVFRQIEVycm9y''@;'; put 'put ''Iil9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQWMpLHR0KEx0dCksdHQob2EpLHR0KHZsKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aXlhLWFwaS1leHBsb3JlciJdXSxob3N0QXR0cnM6WzEsImNvbnRl''@;'; put 'put ''bnQtY29udGFpbmVyIl0sZGVjbHM6MzMsdmFyczoxMyxjb25zdHM6W1sxLCJhcGktY29sbGVjdGlvbi1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImNoYW5nZSJdLFszLCJsYWJlbCIsNCwibmdGb3IiLCJu''@;'; put 'put ''Z0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zv''@;'; put 'put ''ck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiaC0xMDAiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0''@;'; put 'put ''aXZlIl0sWzEsImpzb24tdG9nZ2xlIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJtLTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5r''@;'; put 'put ''IiwiYnRuLXNtIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Il0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzQsIm5nSWYiXSxbMywibGFiZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsz''@;'; put 'put ''LCJ2YWx1ZSJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBsaW5rcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21w''@;'; put 'put ''bGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGlua3NUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNo''@;'; put 'put ''YXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJz''@;'; put 'put ''b3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggaXRlbXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJj''@;'; put 'put ''aEl0ZW1zVHJlZUlucHV0IiwiIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJlbmRw''@;'; put 'put ''b2ludC1icmVhZGNydW1zIiwzLCJpbm5lckhUTUwiLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwicXVlcnktcGFyYW1zIl0sWyJjbHJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwianNvbi1hcmVhIl0sWyJjbGFzcyIsImQtYmxvY2siLDMsImpzb24iLCJleHBhbmRlZCIsInNlZ21lbnRMaW5rQ2xpY2tlZCIsNCwibmdJ''@;'; put 'put ''ZiJdLFsxLCJkLWJsb2NrIiwzLCJqc29uIiwiZXhwYW5kZWQiLCJzZWdtZW50TGlua0NsaWNrZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIpKDEsImRpdiIsMCkoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLE5lKDQsIkFQ''@;'; put 'put ''SSBDb2xsZWN0aW9uIikseWUoKSxtZSg1LCJzZWxlY3QiLDEpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5jb2xsZWN0aW9uPWZ9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpfSksUWUoNixadHQsMyw0LCJv''@;'; put 'put ''cHRncm91cCIsMiksYmEoNywia2V5dmFsdWUiKSx5ZSgpKCkoKSxRZSg4LFl0dCwyLDAsInAiLDMpLG1lKDksImRpdiIsNCksUWUoMTAsV3R0LDEsMCwiY2xyLXNwaW5uZXIiLDUpLHllKCksbWUoMTEsImNsci10cmVlIiksUWUoMTIscXR0LDYsMywiY2xyLXRyZWUtbm9kZSIsNiksUWUoMTMs''@;'; put 'put ''WHR0LDIsMSwibmctY29udGFpbmVyIiw3KSx5ZSgpLG1lKDE0LCJjbHItdHJlZSIpLFFlKDE1LGVudCw2LDMsImNsci10cmVlLW5vZGUiLDYpLFFlKDE2LG5udCwyLDEsIm5nLWNvbnRhaW5lciIsNykseWUoKSgpLG1lKDE3LCJkaXYiLDgpKDE4LCJkaXYiLDkpKDE5LCJkaXYiLDEwKSgyMCwi''@;'; put 'put ''ZGl2IiwxMSkoMjEsImNsci10b2dnbGUtY29udGFpbmVyIiwxMikoMjIsImNsci10b2dnbGUtd3JhcHBlciIpKDIzLCJpbnB1dCIsMTMpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5yYXdKc29uPWZ9KSx5ZSgpLG1lKDI0LCJsYWJlbCIpLE5lKDI1LCJSQVcgSnNv''@;'; put 'put ''biIpLHllKCkoKSgpLG1lKDI2LCJidXR0b24iLDE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY29weUpzb24oKX0pLHF0KDI3LCJjbHItaWNvbiIsMTUpLHllKCkoKSxtZSgyOCwiaDQiLDE2KSxOZSgyOSwiIEFQSSBFeHBsb3JlciAiKSxRZSgzMCxybnQsMSwwLCJjbHItc3Bp''@;'; put 'put ''bm5lciIsMTcpLHllKCkoKSxxdCgzMSwiaHIiLDE4KSxRZSgzMixhbnQsMjMsOSwibmctY29udGFpbmVyIiwxOSkseWUoKSgpKSwyJmEmJihDZSg1KSxSZSgibmdNb2RlbCIsZC5jb2xsZWN0aW9uKSxDZSgxKSxSZSgibmdGb3JPZiIsVWwoNywxMSxkLmNvbGxlY3Rpb25zKSksQ2UoMiksUmUo''@;'; put 'put ''Im5nSWYiLGQuZW5kcG9pbnRMaW5rcy5sZW5ndGg8MSYmIWQuY29sbGVjdGlvbkxvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIixkLmNvbGxlY3Rpb25Mb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5lbmRwb2ludExpbmtzLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5lbmRwb2ludExp''@;'; put 'put ''bmtzKSxDZSgyKSxSZSgibmdJZiIsZC5lbmRwb2ludEl0ZW1zLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5lbmRwb2ludEl0ZW1zKSxDZSg3KSxSZSgibmdNb2RlbCIsZC5yYXdKc29uKSxDZSg3KSxSZSgibmdJZiIsZC5lbmRwb2ludExvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIixk''@;'; put 'put ''LmNvbGxlY3Rpb24ubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxsMSxjMSxXYSxzRSxTMCxNMCxCcyxPcyxkZCxnMSxrYSxadSxVcyxEMCxEOCxUMCxmMSxqRixOOCxIOCx1MixuMyxWdHQsdXgsanR0LHp0dF0sc3R5bGVzOlsiLmFwaS1jb2xsZWN0aW9uLWRyb3Bkb3duW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxNXB4O21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1ib3R0b206MTBweH0uanNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6''@;'; put 'put ''YXV0b30uanNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXt0ZXh0LWRlY29yYXRpb246bm9uZX0uanNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgICA+bmd4LWpzb24tdmlld2Vye2hlaWdodDoxMDAlfS5qc29uLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgID5uZ3gtanNv''@;'; put 'put ''bi12aWV3ZXI+Lm5neC1qc29uLXZpZXdlcntvdmVyZmxvdzphdXRvfS5qc29uLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4O21hcmdpbjowfS5lbmRwb2ludC1icmVhZGNydW1zW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDAgMTBw''@;'; put 'put ''eH0ucXVlcnktcGFyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo3MHB4fSJdfSksY30pKCk7Y29uc3QgY250PW5ldyBNaSgiV2luZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJv''@;'; put 'put ''b3QiLGZhY3Rvcnk6KCk9PndpbmRvd306e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pnt9fSk7bGV0IHVudD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLm5nWm9uZT1hLHRoaXMuZG9jdW1lbnQ9ZCx0aGlzLndpbmRvdz1oLHRoaXMuY29weVN1YmplY3Q9bmV3''@;'; put 'put ''IGJlLHRoaXMuY29weVJlc3BvbnNlJD10aGlzLmNvcHlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLHRoaXMuY29uZmlnPXt9fWNvbmZpZ3VyZShhKXt0aGlzLmNvbmZpZz1hfWNvcHkoYSl7aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFhKXJldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3Vj''@;'; put 'put ''Y2VzczohMSxjb250ZW50OmF9KTtjb25zdCBkPXRoaXMuY29weUZyb21Db250ZW50KGEpO3JldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2UoZD97Y29udGVudDphLGlzU3VjY2VzczpkfTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pfWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5k''@;'; put 'put ''b2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQmJiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoImNvcHkiKSYmISF0aGlzLndpbmRvd31pc1RhcmdldFZhbGlkKGEpe2lmKGEgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50fHxhIGluc3RhbmNlb2YgSFRNTFRleHRB''@;'; put 'put ''cmVhRWxlbWVudCl7aWYoYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIGF0dHJpYnV0ZS4gUGxlYXNlIHVzZSAicmVhZG9ubHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBhdHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlRhcmdldCBzaG91bGQgYmUgaW5wdXQgb3IgdGV4dGFyZWEiKX1jb3B5RnJvbUlucHV0RWxlbWVudChhLGQ9ITApe3RyeXt0aGlzLnNlbGVjdFRhcmdldChhKTtjb25zdCBoPXRoaXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5jbGVhclNlbGVjdGlvbihkP2E6dm9pZCAwLHRoaXMud2lu''@;'; put 'put ''ZG93KSxoJiZ0aGlzLmlzQ29weVN1Y2Nlc3NJbklFMTEoKX1jYXRjaHtyZXR1cm4hMX19aXNDb3B5U3VjY2Vzc0luSUUxMSgpe2NvbnN0IGE9dGhpcy53aW5kb3cuY2xpcGJvYXJkRGF0YTtyZXR1cm4hKGEmJmEuZ2V0RGF0YSYmIWEuZ2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQo''@;'; put 'put ''YSxkPXRoaXMuZG9jdW1lbnQuYm9keSl7aWYodGhpcy50ZW1wVGV4dEFyZWEmJiFkLmNvbnRhaW5zKHRoaXMudGVtcFRleHRBcmVhKSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksIXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0''@;'; put 'put ''QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0QXJlYSh0aGlzLmRvY3VtZW50LHRoaXMud2luZG93KTt0cnl7ZC5hcHBlbmRDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxkIGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4''@;'; put 'put ''dEFyZWEudmFsdWU9YTtjb25zdCBoPXRoaXMuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50ZW1wVGV4dEFyZWEsITEpO3JldHVybiB0aGlzLmNvbmZpZy5jbGVhblVwQWZ0ZXJDb3B5JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxofWRl''@;'; put 'put ''c3Ryb3koYT10aGlzLmRvY3VtZW50LmJvZHkpe3RoaXMudGVtcFRleHRBcmVhJiYoYS5yZW1vdmVDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSksdGhpcy50ZW1wVGV4dEFyZWE9dm9pZCAwKX1zZWxlY3RUYXJnZXQoYSl7cmV0dXJuIGEuc2VsZWN0KCksYS5zZXRTZWxlY3Rpb25SYW5nZSgwLGEu''@;'; put 'put ''dmFsdWUubGVuZ3RoKSxhLnZhbHVlLmxlbmd0aH1jb3B5VGV4dCgpe3JldHVybiB0aGlzLmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iil9Y2xlYXJTZWxlY3Rpb24oYSxkKXthJiZhLmZvY3VzKCksZC5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRB''@;'; put 'put ''cmVhKGEsZCl7Y29uc3QgaD0icnRsIj09PWEuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7bGV0IGY7cmV0dXJuIGY9YS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLGYuc3R5bGUuZm9udFNpemU9IjEycHQiLGYuc3R5bGUuYm9yZGVyPSIwIixmLnN0eWxlLnBhZGRpbmc9''@;'; put 'put ''IjAiLGYuc3R5bGUubWFyZ2luPSIwIixmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZVtoPyJyaWdodCI6ImxlZnQiXT0iLTk5OTlweCIsZi5zdHlsZS50b3A9KGQucGFnZVlPZmZzZXR8fGEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkrInB4IixmLnNldEF0dHJpYnV0ZSgi''@;'; put 'put ''cmVhZG9ubHkiLCIiKSxmfXB1c2hDb3B5UmVzcG9uc2UoYSl7dGhpcy5jb3B5U3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoPjAmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY29weVN1YmplY3QubmV4dChhKX0pfXB1c2hDb3B5UmVwb25zZShhKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoYSl9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihMcyksYXIoY250LDgpKX0sYy5cdTAyNzVwcm92PWRyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxkbnQ9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLm5nWm9uZT1hLHRoaXMuaG9zdD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNsaXBib2FyZFNydj1mLHRoaXMuY2JPblN1Y2Nlc3M9bmV3IEVyLHRoaXMuY2JPbkVycm9yPW5ldyBFcix0aGlzLm9uQ2xpY2s9Xz0+e3RoaXMuY2xpcGJvYXJkU3J2Lmlz''@;'; put 'put ''U3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxtJiZ0aGlzLmNsaXBib2FyZFNydi5pc1RhcmdldFZhbGlkKHRoaXMudGFyZ2V0RWxtKT90aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFs''@;'; put 'put ''dWUsXyk6dGhpcy5jYkNvbnRlbnQmJnRoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tQ29udGVudCh0aGlzLmNiQ29udGVudCx0aGlzLmNvbnRhaW5lciksdGhpcy5jYkNvbnRlbnQsXyk6dGhpcy5oYW5kbGVSZXN1bHQoITEsdm9pZCAwLF8pfX1uZ09uSW5pdCgp''@;'; put 'put ''e3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5jbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJjbGljayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNs''@;'; put 'put ''aWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBib2FyZFNydi5kZXN0cm95KHRoaXMuY29udGFpbmVyKX1oYW5kbGVSZXN1bHQoYSxkLGgpe2xldCBmPXtpc1N1Y2Nlc3M6YSxjb250ZW50OmQsc3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nlc3NNc2csZXZlbnQ6aH07YT90aGlzLmNiT25TdWNjZXNz''@;'; put 'put ''Lm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25TdWNjZXNzLmVtaXQoZil9KTp0aGlzLmNiT25FcnJvci5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uRXJyb3IuZW1pdChmKX0pLHRoaXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2Uo''@;'; put 'put ''Zil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5vKSx0dChOaSksdHQoRm8pLHR0KHVudCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9hcmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06WyJuZ3hD''@;'; put 'put ''bGlwYm9hcmQiLCJ0YXJnZXRFbG0iXSxjb250YWluZXI6ImNvbnRhaW5lciIsY2JDb250ZW50OiJjYkNvbnRlbnQiLGNiU3VjY2Vzc01zZzoiY2JTdWNjZXNzTXNnIn0sb3V0cHV0czp7Y2JPblN1Y2Nlc3M6ImNiT25TdWNjZXNzIixjYk9uRXJyb3I6ImNiT25FcnJvciJ9fSksY30pKCksaG50''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgpO3ZhciBmbnQ9Rig1MTcxNCk7bGV0IHBudD0oKCk9PntjbGFzcyBj''@;'; put 'put ''e3RyYW5zZm9ybShhLC4uLmQpe2NvbnN0IGg9cGFyc2VJbnQoZFswXSl8fDIsZj0ibnVtYmVyIiE9dHlwZW9mIGE/cGFyc2VJbnQoYSk6YTtyZXR1cm4oMCxmbnQuUikoZixoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1O''@;'; put 'put ''YSh7bmFtZToiY29udmVydFNpemUiLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7Y29uc3QgZ250PVsicXVlcnlGaWx0ZXIiXTtmdW5jdGlvbiBtbnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDUwKSxxdCgxLCJjbHItc3Bpbm5lciIsNTEpLHllKCkpfWZ1bmN0aW9uIHZudChjLGwpezEmYyYmcXQo''@;'; put 'put ''MCwiY2xyLWljb24iLDU4KX1mdW5jdGlvbiBfbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsNTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixqdChoLmxpYnJhcnlPbkZpbHRl''@;'; put 'put ''cigpKX0pLHllKCl9fWZ1bmN0aW9uIGJudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDUyKSgxLCJkaXYiLDUzKSgyLCJpbnB1dCIsNTQsNTUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoamUoKS5saWJyYXJp''@;'; put 'put ''ZXNTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKSxRZSg0LHZudCwxLDAsImNsci1pY29uIiw1NiksUWUoNSxfbnQsMSwwLCJjbHItaWNvbiIsNTcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyks''@;'; put 'put ''ZD1qZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24geW50KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNTgpfWZ1bmN0aW9u''@;'; put 'put ''IHdudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiw1OSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLGplKCk7Y29uc3QgaD0kaSgzKSxmPWplKDIpLiRpbXBsaWNpdCxfPWplKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50''@;'; put 'put ''cmVlT25GaWx0ZXIoZiwidGFibGVzIikpfSkseWUoKX19ZnVuY3Rpb24gQ250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNTIpKDEsImRpdiIsNTMpKDIsImlucHV0Iiw2NCw2NSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBC''@;'; put 'put ''dChhKSxqdChqZSgyKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9amUoMikuJGltcGxpY2l0O3JldHVybiBqdChqZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSx5ZSgpLFFlKDQseW50LDEsMCwiY2xyLWljb24iLDU2''@;'; put 'put ''KSxRZSg1LHdudCwxLDAsImNsci1pY29uIiw1NykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPWplKDIpLiRpbXBsaWNpdDtDZSgyKSxSZSgiaWQiLCJzZWFyY2hfIitkLkxJQlJBUllSRUYpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUu''@;'; put 'put ''bGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gU250KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNzMpfWZ1bmN0aW9uIE1udChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDc0KX1mdW5jdGlvbiB4bnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''Vm4oKTttZSgwLCJidXR0b24iLDY5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1qZSgpLm5nVmFyLGY9amUoKS4kaW1wbGljaXQsXz1qZSgyKS4kaW1wbGljaXQsVD1qZSgpO3JldHVybiBqdChoPyIiOlQub25UYWJsZUNsaWNrKGYsXykpfSksenIoMSw3MCksUWUoMixT''@;'; put 'put ''bnQsMSwwLCJjbHItaWNvbiIsNzEpLFFlKDMsTW50LDEsMCwiY2xyLWljb24iLDcyKSxZcigpLE5lKDQpLHllKCl9aWYoMiZjKXtjb25zdCBhPWplKCkubmdWYXIsZD1qZSgpLiRpbXBsaWNpdCxoPWplKDIpLiRpbXBsaWNpdCxmPWplKCk7aHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgidGFi''@;'; put 'put ''bGUtYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLENlKDEpLFJlKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCEwKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwhMSksQ2UoMSksbXIoIiAiLGQucmVwbGFjZSgiLUZD''@;'; put 'put ''IiwiIiksIiAiKX19ZnVuY3Rpb24gRW50KGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLHllKCkpfWZ1bmN0aW9uIGtudChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlw''@;'; put 'put ''LWNvbnRlbnQiLDc1KSxRZSgxLEVudCwyLDAsInNwYW4iLDM4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKS5uZ1ZhcjtDZSgxKSxSZSgibmdJZiIsYSl9fWZ1bmN0aW9uIEFudChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwIiksUWUoMSx4bnQsNSw4LCJidXR0b24iLDY3KSxRZSgy''@;'; put 'put ''LGtudCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDY4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLGEubGVuZ3RoPjApfX1mdW5jdGlvbiBUbnQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiksUWUoMSxBbnQsMywxLCJjbHIt''@;'; put 'put ''dG9vbHRpcCIsNjYpLHllKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9amUoMyk7Q2UoMSksUmUoIm5nVmFyIixhKzE+ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBEbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHIt''@;'; put 'put ''dHJlZS1ub2RlIiw2MSkseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPWplKCkuJGltcGxpY2l0O3JldHVybiBqdChqZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KGplKCkuJGltcGxp''@;'; put 'put ''Y2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsNjIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPWplKCkuJGltcGxpY2l0LGY9amUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLGp0KGYubGlicmFyeU9uQ2xpY2soaC5MSUJSQVJZUkVGLGgpKX0pLHF0KDIsImNsci1p''@;'; put 'put ''Y29uIiw2MyksTmUoMykseWUoKSxRZSg0LENudCw2LDQsImNsci10cmVlLW5vZGUiLDIpLFFlKDUsVG50LDIsMSwiY2xyLXRyZWUtbm9kZSIsMykseWUoKX1pZigyJmMpe2NvbnN0IGE9amUoKS4kaW1wbGljaXQ7aHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVk''@;'; put 'put ''IixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLG1yKCIgIixhLkxJQlJBUllOQU1FLCIgIiksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVzKSxDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBJbnQoYyxsKXtpZigx''@;'; put 'put ''JmMmJih6cigwKSxRZSgxLERudCw2LDcsImNsci10cmVlLW5vZGUiLDYwKSxZcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBMbnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDc2KSgxLCJzcGFu''@;'; put 'put ''Iiw3NyksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1mdW5jdGlvbiBSbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSgyLCJkaXYiLDgwKSgzLCJkaXYiLDgxKSg0LCJidXR0b24iLDgyKSxxdCg1LCJjbHItaWNvbiIsODMpLHllKCks''@;'; put 'put ''bWUoNiwiaDMiLDQzKSxOZSg3LCJFcnJvciIpLHllKCkoKSxtZSg4LCJkaXYiLDEwKSg5LCJwIiksTmUoMTAsIllvdSBjYW5ub3Qgc3VibWl0IGVtcHR5IGNsYXVzZXMiKSx5ZSgpKCksbWUoMTEsImRpdiIsMjEpKDEyLCJidXR0b24iLDg0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IEJ0KGEpLGp0KGplKCkubnVsbFZhcmlhYmxlcz0hMSl9KSxOZSgxMywiIE9rICIpLHllKCkoKSgpKCkoKX19ZnVuY3Rpb24gT250KGMsbCl7MSZjJiZxdCgwLCJkaXYiLDg1KX1mdW5jdGlvbiBQbnQoYyxsKXsxJmMmJnF0KDAsImFwcC1xdWVyeSIsbnVsbCw4Nil9ZnVuY3Rpb24gRm50KGMs''@;'; put 'put ''bCl7MSZjJiYobWUoMCwiZGl2Iiw4NykoMSwic3BhbiIsODgpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCksbWUoMywiZGl2IikoNCwiaDQiKSxOZSg1LCJMb2FkaW5nIHRhYmxlIHZpZXdlciIpLHllKCkoKSgpKX1mdW5jdGlvbiBIbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgw''@;'; put 'put ''LCJjbHItaWNvbiIsMTExKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSksamUoKTtjb25zdCBoPSRpKDUpO3JldHVybiBqdChqZSgyKS5zZWFyY2hUYWJsZShoKSl9KSx5ZSgpfX1mdW5jdGlvbiBObnQoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMTIpLE5lKDEsIiBMb2FkaW5nLi4uICIp''@;'; put 'put ''LHllKCkpfWZ1bmN0aW9uIFZudChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDExMyl9ZnVuY3Rpb24gQm50KGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLGJhKDIsInRob3VzYW5kU2VwYXJhdG9yIikseWUoKSksMiZjKXtjb25zdCBhPWplKDQpO0NlKDEpLHc1KCIgKCIsTTUo''@;'; put 'put ''Miw0LGEubnVtYmVyT2ZSb3dzLCIsIiksIiAiLDE9PT1hLm51bWJlck9mUm93cz8icm93Ijoicm93cyIsIiwgIixhLmZpbHRlckNvbHMubGVuZ3RoLCIiLDE9PT1hLmZpbHRlckNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBqbnQoYyxsKXtpZigxJmMpe2NvbnN0''@;'; put 'put ''IGE9Vm4oKTttZSgwLCJoMyIsMTE0KSxOZSgxKSxRZSgyLEJudCwzLDcsInNwYW4iLDM4KSxtZSgzLCJjbHItaWNvbiIsMTE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDMpLnJlbG9hZFRhYmxlRGF0YSgpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9amUo''@;'; put 'put ''Myk7Q2UoMSksbXIoIiAiLG51bGw9PWEudGFibGVUaXRsZT9udWxsOmEudGFibGVUaXRsZS5yZXBsYWNlKCItRkMiLCIiKSwiICIpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09YS5udW1iZXJPZlJvd3MpfX1mdW5jdGlvbiB6bnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0''@;'; put 'put ''b24iLDEyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChqZSg1KS5lZGl0VGFibGUoKSl9KSxxdCgxLCJjbHItaWNvbiIsMTI4KSxtZSgyLCJzcGFuIiksTmUoMywiRWRpdCIpLHllKCkoKX19ZnVuY3Rpb24gVW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo''@;'; put 'put ''MCwiYnV0dG9uIiwxMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoNSkuZ29Ub0xpbmVhZ2UoKSl9KSxxdCgxLCJjbHItaWNvbiIsMTI5KSxtZSgyLCJzcGFuIiksTmUoMywiTGluZWFnZSIpLHllKCkoKX19ZnVuY3Rpb24gWm50KGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDEyMCkoMSwiYnV0dG9uIiwxMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoNCkubmV3Vmlld2JveCgpKX0pLHF0KDIsImNsci1pY29uIiwxMjIpLG1lKDMsInNwYW4iKSxOZSg0LCJWaWV3Ym94ZXMi''@;'; put 'put ''KSx5ZSgpKCksUWUoNSx6bnQsNCwwLCJidXR0b24iLDEyMyksUWUoNixVbnQsNCwwLCJidXR0b24iLDEyMyksbWUoNywiYnV0dG9uIiwxMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoNCkub3BlblFiKCkpfSkscXQoOCwiY2xyLWljb24iLDEyNSksbWUoOSwi''@;'; put 'put ''c3BhbiIpLE5lKDEwLCJGaWx0ZXIiKSx5ZSgpKCksbWUoMTEsImJ1dHRvbiIsMTIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDQpLm9wZW5Eb3dubG9hZD0hMCl9KSxxdCgxMiwiY2xyLWljb24iLDEyNiksbWUoMTMsInNwYW4iKSxOZSgxNCwiRG93bmxvYWQi''@;'; put 'put ''KSx5ZSgpKCksbWUoMTUsImJ1dHRvbiIsMTIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDQpLnNob3dXZWJRdWVyeSgpKX0pLHF0KDE2LCJjbHItaWNvbiIsMTI3KSxtZSgxNywic3BhbiIpLE5lKDE4LCJXZWIgUXVlcnkgVVJMIikseWUoKSgpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPWplKDQpO0NlKDUpLFJlKCJuZ0lmIixhLnRhYmxlRWRpdEV4aXN0cygpKSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZXVyaSl9fWZ1bmN0aW9uIFludChjLGwpezEmYyYmKG1lKDAsImNsci1kcm9wZG93biIsMTE2KSgxLCJidXR0b24iLDExNykscXQoMiwiY2xyLWljb24iLDEx''@;'; put 'put ''OCksTmUoMywiIG9wdGlvbnMgIikseWUoKSxRZSg0LFpudCwxOSwyLCJjbHItZHJvcGRvd24tbWVudSIsMTE5KSx5ZSgpKSwyJmMmJlJlKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApfWZ1bmN0aW9uIFdudChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTMwKSgxLCJzcGFuIiksTmUo''@;'; put 'put ''MiwiRklMVEVSIDogIiksbWUoMywiYiIpLE5lKDQpLHllKCkoKSgpKSwyJmMpe2NvbnN0IGE9amUoMyk7Q2UoNCksb3IoYS5xdWVyeVRleHQpfX1jb25zdCBHbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bIiIsIiAiXX07ZnVuY3Rpb24gJG50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwi''@;'; put 'put ''ZGl2Iiw5NSkoMSwic2VjdGlvbiIsOTYpKDIsImZvcm0iLDk3KSgzLCJkaXYiLDk4KSg0LCJpbnB1dCIsOTksMTAwKSx4dCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD0kaSg1KTtyZXR1cm4ganQoamUoMikuc2VhcmNoVGFibGUoaCkpfSkseWUoKSxRZSg2LEhudCwx''@;'; put 'put ''LDAsImNsci1pY29uIiwxMDEpLFFlKDcsTm50LDIsMCwic3BhbiIsMTAyKSx5ZSgpLG1lKDgsImNsci1jaGVja2JveC1jb250YWluZXIiKSg5LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEwLCJpbnB1dCIsMTAzKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEp''@;'; put 'put ''LGp0KGplKDIpLnNlYXJjaE51bWVyaWM9aCl9KSx5ZSgpLG1lKDExLCJsYWJlbCIpLE5lKDEyLCJOdW1lcmljIikseWUoKSgpKCkoKSgpLG1lKDEzLCJkaXYiLDEwNCkoMTQsImNsci1pY29uIiwxMDUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoMikuZGF0YXNl''@;'; put 'put ''dEluZm89ITApfSkseWUoKSxRZSgxNSxWbnQsMSwwLCJjbHItaWNvbiIsMTA2KSxRZSgxNixqbnQsNCwyLCJoMyIsMTA3KSx5ZSgpLG1lKDE3LCJkaXYiLDEwOCksUWUoMTgsWW50LDUsMSwiY2xyLWRyb3Bkb3duIiwxMDkpLHllKCksUWUoMTksV250LDUsMSwiZGl2IiwxMTApLHllKCl9aWYo''@;'; put 'put ''MiZjKXtjb25zdCBhPWplKDIpO0NlKDQpLFJlKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxDZSgyKSxSZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksQ2UoMyksUmUoIm5nTW9kZWwiLGEuc2VhcmNoTnVt''@;'; put 'put ''ZXJpYyksQ2UoNSksUmUoIm5nSWYiLG51bGw9PWEudGFibGVUaXRsZT9udWxsOmEudGFibGVUaXRsZS5pbmNsdWRlcygiLUZDIikpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksQ2UoMiksUmUoIm5nSWYiLGEudGFibGVUaXRsZSYmIWEuYWJv''@;'; put 'put ''cnRBY3RpdmUpLENlKDEpLFJlKCJuZ0lmIiwiMT0xIiE9PWEucXVlcnlUZXh0JiYhJHMoOCxHbnQpLmluY2x1ZGVzKGEucXVlcnlUZXh0KSYmIWEuYWJvcnRBY3RpdmUpfX1mdW5jdGlvbiBxbnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDEzMSkscXQoMSwiY2xyLWljb24iLDEzMiksbWUoMiwi''@;'; put 'put ''aDMiLDEzMyksTmUoMywiUGxlYXNlIHNlbGVjdCBhIGxpYnJhcnkiKSx5ZSgpKCkpfWZ1bmN0aW9uIEtudChjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDUxKX1mdW5jdGlvbiBYbnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE0MSkscXQoMSwiY2xyLWljb24iLDE0MiksbWUoMiwiaDMi''@;'; put 'put ''LDEzMyksTmUoMywiUGxlYXNlIHNlbGVjdCBhIHRhYmxlIikseWUoKSgpKX1mdW5jdGlvbiBKbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJwIiwxNDUpLE5lKDEsIiBObyBsaWJyYXJ5IGluZm8gZm91bmQuIENsaWNrICIpLG1lKDIsImNsci1pY29uIiwxNDYpLHh0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoamUoNCkucmVsb2FkTGliSW5mbygpKX0pLHllKCksTmUoMywiIGJ1dHRvbiB0byByZWZyZXNoLiAiKSx5ZSgpfX1mdW5jdGlvbiBRbnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNDcpLE5lKDIsIkVOR0lORToiKSx5ZSgp''@;'; put 'put ''LG1lKDMsInRkIiwxNDgpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKDUpO0NlKDQpLG1yKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkVOR0lORToiIiwiICIpfX1mdW5jdGlvbiBlcnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNDcpLE5lKDIsIkxJQklE''@;'; put 'put ''OiIpLHllKCksbWUoMywidGQiLDE0OCksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoNSk7Q2UoNCksbXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCSUQ6IiIsIiAiKX19ZnVuY3Rpb24gdHJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxOZSgy''@;'; put 'put ''LCJMSUJOQU1FOiIpLHllKCksbWUoMywidGQiLDE0OCksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoNSk7Q2UoNCksbXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCTkFNRToiIiwiICIpfX1mdW5jdGlvbiBucnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRk''@;'; put 'put ''IiwxNDcpLE5lKDIsIkxJQlNJWkU6IikseWUoKSxtZSgzLCJ0ZCIsMTQ4KSxOZSg0KSxiYSg1LCJjb252ZXJ0U2l6ZSIpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKDUpO0NlKDQpLG1yKCIgIixhLmxpYmluZm9bMF0/VWwoNSwxLGEubGliaW5mb1swXS5MSUJTSVpFKToiIiwiICIpfX1mdW5j''@;'; put 'put ''dGlvbiBycnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNDcpLE5lKDIsIk9XTkVSUzoiKSx5ZSgpLG1lKDMsInRkIiwxNDgpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKDUpO0NlKDQpLG1yKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLk9XTkVSUzoiIiwi''@;'; put 'put ''ICIpfX1mdW5jdGlvbiBpcnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNDcpLE5lKDIsIlBBVEhTOiIpLHllKCksbWUoMywidGQiLDE0OCksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9amUoNSk7Q2UoNCksbXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEFU''@;'; put 'put ''SFM6IiIsIiAiKX19ZnVuY3Rpb24gb3J0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxOZSgyLCJQRVJNUzoiKSx5ZSgpLG1lKDMsInRkIiwxNDgpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKDUpO0NlKDQpLG1yKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZv''@;'; put 'put ''WzBdLlBFUk1TOiIiLCIgIil9fWZ1bmN0aW9uIHNydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE0NyksTmUoMiwiU0NIRU1BUzoiKSx5ZSgpLG1lKDMsInRkIiwxNDgpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKDUpO0NlKDQpLG1yKCIgIixhLmxpYmluZm9bMF0/''@;'; put 'put ''YS5saWJpbmZvWzBdLlNDSEVNQVM6IiIsIiAiKX19ZnVuY3Rpb24gYXJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxOZSgyLCJUQUJMRV9DTlQ6IikseWUoKSxtZSgzLCJ0ZCIsMTQ4KSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1qZSg1KTtDZSg0KSxtcigiICIs''@;'; put 'put ''YS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5UQUJMRV9DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gbHJ0KGMsbCl7aWYoMSZjJiYoenIoMCksbWUoMSwidGFibGUiKSxRZSgyLFFudCw1LDEsInRyIiwzOCksUWUoMyxlcnQsNSwxLCJ0ciIsMzgpLFFlKDQsdHJ0LDUsMSwidHIiLDM4KSxRZSg1LG5y''@;'; put 'put ''dCw2LDMsInRyIiwzOCksUWUoNixycnQsNSwxLCJ0ciIsMzgpLFFlKDcsaXJ0LDUsMSwidHIiLDM4KSxRZSg4LG9ydCw1LDEsInRyIiwzOCksUWUoOSxzcnQsNSwxLCJ0ciIsMzgpLFFlKDEwLGFydCw1LDEsInRyIiwzOCkseWUoKSxZcigpKSwyJmMpe2NvbnN0IGE9amUoNCk7Q2UoMiksUmUo''@;'; put 'put ''Im5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkVOR0lORSksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkxJQklEKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCTkFNRSksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uTElCU0laRSksQ2Uo''@;'; put 'put ''MSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLk9XTkVSUyksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBBVEhTKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uUEVSTVMpLENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5TQ0hFTUFTKSxD''@;'; put 'put ''ZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5UQUJMRV9DTlQpfX1mdW5jdGlvbiBjcnQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE0MyksUWUoMSxKbnQsNCwwLCJwIiwxNDQpLFFlKDIsbHJ0LDExLDksIm5nLWNvbnRhaW5lciIsMzgpLHllKCkpLDImYyl7Y29uc3QgYT1q''@;'; put 'put ''ZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aD4wKX19ZnVuY3Rpb24gdXJ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7enIoMCksbWUoMSwiZGl2IiwxMzQpLHF0KDIsInNlY3Rpb24iLDk2KSxtZSgzLCJk''@;'; put 'put ''aXYiLDEzNSkoNCwiaDMiLDEzNiksTmUoNSkseWUoKSxtZSg2LCJjbHItaWNvbiIsMTE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KGplKDIpLnJlbG9hZExpYkluZm8oKSl9KSx5ZSgpKCkscXQoNywiZGl2IiwxMDgpLHllKCksbWUoOCwiZGl2IiwxMzcpLFFlKDks''@;'; put 'put ''S250LDEsMCwiY2xyLXNwaW5uZXIiLDEzOCkseWUoKSxRZSgxMCxYbnQsNCwwLCJkaXYiLDEzOSksUWUoMTEsY3J0LDMsMiwiZGl2IiwxNDApLFlyKCl9aWYoMiZjKXtjb25zdCBhPWplKDIpO0NlKDUpLG1yKCIgIixhLmxpYiwiICIpLENlKDQpLFJlKCJuZ0lmIixudWxsPT09YS5saWJpbmZv''@;'; put 'put ''KSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pfX1mdW5jdGlvbiBkcnQoYyxsKXsxJmMmJihtZSgwLCJoMyIsMTMzKSxOZSgxLCIgTm8gZGF0YSBmb3VuZCB3aXRoIGdpdmVuIGNvbmRpdGlvbnMgIikseWUoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gaHJ0KGMsbCl7MSZjJiYobWUoMCwiaDMiLDEzMyksTmUoMSwiIE5vIGRhdGEgZm91bmQgZHVlIHRvIHNhcyByZXF1ZXN0IGVycm9yICIpLHllKCkpfWZ1bmN0aW9uIGZydChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTQ5KSxxdCgxLCJjbHItaWNvbiIsMTUwKSxRZSgyLGRydCwy''@;'; put 'put ''LDAsImgzIiwxNTEpLFFlKDMsaHJ0LDIsMCwiaDMiLDE1MSkseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDIpLFJlKCJuZ0lmIixhLm5vRGF0YSksQ2UoMSksUmUoIm5nSWYiLGEubm9EYXRhUmVxRXJyKX19ZnVuY3Rpb24gcHJ0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNTIpLHF0''@;'; put 'put ''KDEsImhvdC10YWJsZSIsMTUzKSx5ZSgpKSwyJmMpe2NvbnN0IGE9amUoMik7Q2UoMSksUmUoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhl''@;'; put 'put ''YWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMpKCJjb3B5UGFzdGUiLGEuaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4dE1lbnUiLGEuaG90VGFibGUuY29udGV4dE1lbnUpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsYS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJo''@;'; put 'put ''ZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0KSgibW9kaWZ5Q29sV2lkdGgiLGEubWF4V2lkdGhDaGVrZXIpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGEuaG90VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJyb3dIZWFkZXJzIixhLmhvdFRhYmxl''@;'; put 'put ''LnJvd0hlYWRlcnMpKCJyb3dIZWFkZXJXaWR0aCIsYS5ob3RUYWJsZS5yb3dIZWFkZXJXaWR0aCkoInJvd0hlaWdodHMiLGEuaG90VGFibGUucm93SGVpZ2h0cykoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIGdydChjLGwpe2lmKDEmYyYmKG1lKDAsInAi''@;'; put 'put ''LDE1NCksTmUoMSkscXQoMiwiY29udGFjdC1saW5rIikseWUoKSksMiZjKXtjb25zdCBhPWplKDIpO0NlKDEpLG1yKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gbXJ0''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw4OSksUWUoMSwkbnQsMjAsOSwiZGl2Iiw5MCksUWUoMixxbnQsNCwwLCJkaXYiLDkxKSxRZSgzLHVydCwxMiw0LCJuZy1jb250YWluZXIiLDM4KSxRZSg0LGZydCw0LDIsImRpdiIsOTIpLFFlKDUscHJ0LDIsMTgsImRpdiIsOTMpLG1lKDYsImRp''@;'; put 'put ''diIpLFFlKDcsZ3J0LDMsMSwicCIsOTQpLHllKCkoKSksMiZjKXtjb25zdCBhPWplKCk7Q2UoMSksUmUoIm5nSWYiLGEudGFibGUpLENlKDEpLFJlKCJuZ0lmIiwhKGEubGlifHxhLnRhYmxlfHxhLm5vRGF0YVJlcUVycnx8YS5ub0RhdGEpKSxDZSgxKSxSZSgibmdJZiIsIWEubm9EYXRhJiYh''@;'; put 'put ''YS5ub0RhdGFSZXFFcnImJiFhLnRhYmxlJiZhLmxpYiksQ2UoMSksUmUoIm5nSWYiLGEubm9EYXRhfHxhLm5vRGF0YVJlcUVyciksQ2UoMSksUmUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiZhLnRhYmxlKSxDZSgyKSxSZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUu''@;'; put 'put ''dmlld2VyX3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkmJmEuaG90VGFibGUuZGF0YSYmYS5ob3RUYWJsZS5kYXRhLmxlbmd0aD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19bGV0IEhUPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxp''@;'; put 'put ''ZSxnZSx3ZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnJvdXRlPV8sdGhpcy5ldmVudFNlcnZpY2U9VCx0aGlzLmxvZ2dlclNlcnZpY2U9Vyx0aGlzLmhlbHBlclNlcnZpY2U9aWUsdGhp''@;'; put 'put ''cy5sb2NhdGlvbj1nZSx0aGlzLmNkZj13ZSx0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IGVoLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGlicmFyeVRhYmxlc1JlZj0iIix0aGlzLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMSx0aGlz''@;'; put 'put ''LmxpYmluZm89bnVsbCx0aGlzLnRhYmxldXJpPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJDb2xzPVtdLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmFib3J0QWN0aXZlPSExLHRoaXMudXJsRmlsdGVyUGs9bnVsbCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLndlYlF1ZXJ5VGV4''@;'; put 'put ''dD0iIix0aGlzLnF1ZXJ5RXJyPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMSx0aGlzLmxvYWRpbmdUYWJsZVZpZXc9ITEsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMubm9EYXRhPSExLHRoaXMubm9EYXRhUmVxRXJyPSExLHRoaXMudGFibGVEaXNhYmxlPSEx''@;'; put 'put ''LHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlzLm9wZW5Eb3dubG9hZD0hMSx0aGlzLndlYlF1ZXJ5PSExLHRoaXMud2ViUXVlcnlUYWI9ITEsdGhpcy5kb3dubG9hZEZvcm1hdD0iQ1NWIix0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLnNlYXJjaExvYWRpbmc9ITEs''@;'; put 'put ''dGhpcy5zZWFyY2hOdW1lcmljPSExLHRoaXMubnVtYmVyT2ZSb3dzPW51bGwsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5j''@;'; put 'put ''ZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDoiMTAwJSIsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsc2V0dGluZ3M6e30sYWZ0ZXJHZXRD''@;'; put 'put ''b2xIZWFkZXI6dm9pZCAwLGxpY2Vuc2VLZXk6dm9pZCAwLHJvd0hlYWRlcnM6RWU9PiIgIixyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjIwLGNvbnRleHRNZW51OlsiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIiwiY29weV9jb2x1bW5faGVhZGVyc19vbmx5Il0sY29weVBhc3RlOntj''@;'; put 'put ''b3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LGRyb3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntu''@;'; put 'put ''YW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVyOihFZSxaZSxvdCxldCx5dCxrdCk9Pntjb25zdCBTdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IFF0LG5uPSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCBtbj10aGlzLmhvdEluc3RhbmNlLmdldFNl''@;'; put 'put ''bGVjdGVkKCl8fFtdLEVuPW1uP21uWzBdWzFdOi0xLGxyPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChFbik7UXQ9dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbbHJdLFF0JiYobm49YExBQkVMOiAke1F0Py5sYWJlbH08YnI+VFlQRTogJHtRdD8udHlwZX08YnI+TEVOR1RIOiAke1F0Py5s''@;'; put 'put ''ZW5ndGh9PGJyPkZPUk1BVDogJHtRdD8uZm9ybWF0fWApfXJldHVybiBTdC5pbm5lckhUTUw9bm4sU3R9fX19fSx0aGlzLmhvdEluc3RhbmNlPW51bGwsdGhpcy5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITEsdGhpcy52aWV3Ym94T3Blbj0hMSx0aGlzLmhvdFRhYmxlUmVnaXN0ZXJlcj1u''@;'; put 'put ''ZXcgQWcsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKX1uZ09uSW5pdCgpeyIiIT09R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb24mJjA9PT1PYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcykubGVuZ3RoJiZ0aGlzLnJvdXRlci5u''@;'; put 'put ''YXZpZ2F0ZShbR24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb25dLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSx2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0mJihHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9kYXRhIiksdGhpcy5saWNl''@;'; put 'put ''bmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlLmxpY2Vuc2VLZXk9YX0pfW5ld1ZpZXdib3goKXt0aGlzLnZpZXdib3hPcGVuPSEwfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVy''@;'; put 'put ''Q29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1zZWFyY2hUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGg9YS52YWx1ZSxmPWQubGliKyIuIitkLnRhYmxlLF89cGFyc2VJbnQoZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMu''@;'; put 'put ''ZmlsdGVySWQpfHwwO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGgsZC5zZWFyY2hOdW1lcmljLGYsXykudGhlbihUPT57VC5zYXNwYXJhbXN8fFQudmlld0RhdGE/KGQuaG90VGFibGUuZGF0YT1ULnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPVQuJHZpZXdkYXRhLGQu''@;'; put 'put ''ZHNtZXRhPVQuZHNtZXRhLGQubnVtYmVyT2ZSb3dzPVQuc2FzcGFyYW1zWzBdLk5PQlMsZC5xdWVyeVRleHQ9VC5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsZC5oZWFkZXJQa3M9VC5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/''@;'; put 'put ''ZC5ub0RhdGE9ITA6KGQubm9EYXRhPSExLGQudGFibGVGbGFnPSExLGQuc2V0dXBIb3QoKSkpOmQuc2VhcmNoTG9hZGluZz0hMX0pLmNhdGNoKFQ9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoVCl9KSxkLnNlYXJjaExvYWRpbmc9ITF9KSgpfXJlbG9hZFRhYmxlRGF0YSgpe3RoaXMudmlld0Rh''@;'; put 'put ''dGEodGhpcy51cmxGaWx0ZXJQa3x8MCl9cmVsb2FkTGliSW5mbygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EubGliaW5mbz1udWxsLGEuc2FzU3RvcmVTZXJ2aWNlLnJlZnJlc2hMaWJJbmZvKGEubGliKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9ZmkoZnVuY3Rpb24qKGgp''@;'; put 'put ''e2EubGliaW5mbz1oLmxpYmluZm8sR24udmlld2VyLmxpYmluZm89YS5saWJpbmZvO2NvbnN0IGY9YS5saWJyYXJpZXMuZmluZChfPT5fLkxJQlJBUllSRUY9PT1hLmxpYik7ZiYmKGYubGliaW5mbz1hLmxpYmluZm8pfSk7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybiBkLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX19KCksZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxudWxsPT09YS5saWJpbmZvJiYoYS5saWJpbmZvPVtdKX0pfSkoKX1maWx0ZXJGbihhKXt0aGlzLmxpYnJhcmllcz10aGlzLmxpYnJhcmllcy5maWx0ZXIoaD0+LTEhPT1oLkxJQlJBUllOQU1FLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkuaW5kZXhPZihhLnRvTG9jYWxlTG93ZXJDYXNlKCkpKX1kb3dubG9hZERhdGEoKXtsZXQgYT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxkPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGg9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgVyxmPSImdHlw''@;'; put 'put ''ZT0iK3RoaXMuZG93bmxvYWRGb3JtYXQsXz0iJnRhYmxlPSIrdGhpcy50YWJsZVRpdGxlLFQ9IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIiO1c9dHlwZW9mIHRoaXMucm91dGUu''@;'; put 'put ''c25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKSx3aW5kb3cub3BlbihhK2grIi8/X3Byb2dyYW09IitkKyIvc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEiK2YrXytUKyImZmlsdGVyPSIrVyksdGhpcy5v''@;'; put 'put ''cGVuRG93bmxvYWQ9ITF9ZG93bmxvYWREREwoKXtsZXQgYT10aGlzLmxpYixkPXRoaXMudGFibGUsaD10aGlzLmRvd25sb2FkRm9ybWF0LnJlcGxhY2UoIl9EREwiLCIiKSxmPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLF89dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgVD10aGlz''@;'; put 'put ''LnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGYrVCsiLz9fcHJvZ3JhbT0iK18rIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0ZGRsIitgJmRzPSR7ZH0mbGlicmVmPSR7YX0mZmxhdm91cj0ke2h9JHsiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/''@;'; put 'put ''YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiJ9YCksdGhpcy5vcGVuRG93bmxvYWQ9ITF9b25DbGlDb21tYW5kRm9jdXMoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEudGFyZ2V0LnNlbGVjdCgpfWVkaXRUYWJsZSgpe3RoaXMucm91dGVyLm5hdmlnYXRl''@;'; put 'put ''QnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYlRhYil9dGFibGVFZGl0RXhpc3RzKCl7bGV0IGE9e307YT1Hbi5lZGl0b3IubGlic0FuZFRhYmxlcztsZXQgZD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzFdLGg9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVswXTtyZXR1cm4hIWFbaF0mJmFbaF0uaW5j''@;'; put 'put ''bHVkZXMoZCl9Z29Ub0xpbmVhZ2UoKXtsZXQgZD1gL3ZpZXcvbGluZWFnZS8ke3RoaXMudGFibGV1cmkuc3BsaXQoIlxcIilbMV19L1JFVkVSU0VgO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZCl9c2hvd1dlYlF1ZXJ5KCl7bGV0IGE7dGhpcy53ZWJRdWVyeT0hMCxhPXR5cGVvZiB0aGlz''@;'; put 'put ''LnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCk7bGV0IGQ9d2luZG93LmxvY2F0aW9uLnBvcnQubGVuZ3RoPjA/IjoiK3dpbmRvdy5sb2NhdGlvbi5wb3J0OiIiO2NvbnN0IGg9dGhpcy5zYXNT''@;'; put 'put ''ZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTtsZXQgXz1gJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX0ke2R9LyR7aH0vP19wcm9ncmFtPSR7dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2N9L3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhJnR5''@;'; put 'put ''cGU9V0VCJHt0aGlzLndlYlF1ZXJ5VGFiPyJUQUIiOiJDU1YifSZ0YWJsZT0ke3RoaXMudGFibGVUaXRsZX0keyImZmlsdGVyPSIrYX1gO3RoaXMud2ViUXVlcnlUZXh0PV8ucmVwbGFjZSgvIC9naW0sIiUyMCIpfWNvcHlUb0NsaXAoKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0''@;'; put 'put ''ZXh0YXJlYSIpO2Euc3R5bGUucG9zaXRpb249ImZpeGVkIixhLnN0eWxlLmxlZnQ9IjAiLGEuc3R5bGUudG9wPSIwIixhLnN0eWxlLm9wYWNpdHk9IjAiLGEudmFsdWU9dGhpcy53ZWJRdWVyeVRleHQsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmZvY3VzKCksYS5zZWxlY3QoKSxk''@;'; put 'put ''b2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93VGFibGVTZWxlY3QoKXt0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Y2hlY2tF''@;'; put 'put ''eHBhbmQoYSl7fWNvbGxhcHNlTGlicmFyeUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntoLkxJQlJBUllSRUYhPT1kLkxJQlJBUllSRUYmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0''@;'; put 'put ''aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcmllcywhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJh''@;'; put 'put ''cmllcyxkKX1saWJyYXJ5RXhwYW5kZWRDaGFuZ2UoYSxkKXthJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihkLnRhYmxlcz9kLmV4cGFuZGVkPSEhaHx8''@;'; put 'put ''IWQuZXhwYW5kZWQ6eWllbGQgZi5zZWxlY3RUYWJsZShhLCExLGQpLGQuZXhwYW5kZWQpe2YuY2RmLmRldGVjdENoYW5nZXMoKTtsZXQgXz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjc2VhcmNoXyR7ZC5MSUJSQVJZUkVGfWApO2YubG9nZ2VyU2VydmljZS5sb2coIltsaWJUcmVlU2VhcmNo''@;'; put 'put ''SW5wdXRdIixfKSxfJiZfLmZvY3VzKCksZCYmZC5saWJpbmZvJiYoZi5saWJpbmZvPWQubGliaW5mbyksZi5saWImJmYudGFibGUmJiFoP2Yucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUi''@;'; put 'put ''fSkudGhlbigoKT0+e2Yucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2YubGliXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KTpmLmxpYiYmIWYudGFibGUmJmYubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9kYXRhLyIrZi5saWIpfWYuY29sbGFwc2VMaWJy''@;'; put 'put ''YXJ5SXRlbXMoZi5saWJyYXJpZXMsZCl9KSgpfW9uVGFibGVDbGljayhhLGQpe3RoaXMubGliPWQuTElCUkFSWVJFRix0aGlzLnRhYmxlPWEsdGhpcy5zZWxlY3RMaWJUYWJsZShhKSx0aGlzLnZpZXdEYXRhKDApfXNlbGVjdFRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5j''@;'; put 'put ''dGlvbiooKXtoLmxvYWRpbmdUYWJsZXM9ITAsZi50YWJsZT0hMSxmLnRhYmxlRGlzYWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWE/R24udmlld2VyLnRhYmxlc1NldCYmZD8oZi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMSxmLnRhYmxlcz1Hbi52aWV3ZXIudGFi''@;'; put 'put ''bGVzLGYubGliaW5mbz1Hbi52aWV3ZXIubGliaW5mbyk6KGYubGliaW5mbz1udWxsLHlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbihfPT57Zi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMTtsZXQgVD1fLm1wdGFibGVzLm1hcChmdW5jdGlvbihXKXty''@;'; put 'put ''ZXR1cm4gVy5NRU1OQU1FfSk7Zi5saWJpbmZvPV8ubGliaW5mb3x8W10sZi50YWJsZXM9VCxoJiYoaC50YWJsZXM9VCxoLmxpYmluZm89Zi5saWJpbmZvKSxHbi52aWV3ZXIubGlicmFyaWVzPWYubGlicmFyaWVzLEduLnZpZXdlci5saWJyYXJ5PWYubGliLEduLnZpZXdlci50YWJsZXM9Zi50''@;'; put 'put ''YWJsZXMsR24udmlld2VyLmxpYmluZm89Zi5saWJpbmZvLEduLnZpZXdlci50YWJsZXNTZXQ9ITB9KS5jYXRjaChfPT57Zi5sb2dnZXJTZXJ2aWNlLmVycm9yKF8pLGYuYWJvcnRBY3RpdmU9ITAsZi5ub0RhdGE9ITAsZi50YWJsZVRpdGxlPSIiLGYudGFibGVEaXNhYmxlPSEwfSkpOmYudGFi''@;'; put 'put ''bGVEaXNhYmxlPSEwLEduLnZpZXdlci5saWJyYXJ5PWYubGliLGR8fGYuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9IWguZXhwYW5kZWR9KSgpfXNlbGVjdExpYlRhYmxlKGEsZCl7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09YT8odGhpcy5hY3Rp''@;'; put 'put ''b25EaXNhYmxlPSExLHRoaXMubGliVGFiPXRoaXMubGliKyIuIit0aGlzLnRhYmxlKTp0aGlzLmFjdGlvbkRpc2FibGU9ITAsR24udmlld2VyLnRhYmxlPWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckdsb2Jh''@;'; put 'put ''bHNGaWx0ZXIoKXtHbi52aWV3ZXIuZmlsdGVyLmxpYmRzPSIiLEduLnZpZXdlci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsR24udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiLEduLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxHbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sR24udmlld2VyLmZp''@;'; put 'put ''bHRlci52YWxzPVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEhdGhpcy5saWJUYWImJmErIi4iK2Q9PT10aGlzLmxpYlRhYn10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNl''@;'; put 'put ''LmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxHbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFycmF5''@;'; put 'put ''RmlsdGVyKHRoaXMubGlicmFyaWVzKX12aWV3RGF0YShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgaDtpZihkLmxvYWRpbmdUYWJsZVZpZXc9ITAsdHlwZW9mIGQubGliRGF0YXNldD4idSIpaD1kLmxpYisiLiIrZC50YWJsZTtlbHNlIGlmKHR5cGVvZiBkLmxpYj4i''@;'; put 'put ''dSImJnR5cGVvZiBkLnRhYmxlPiJ1Iil7bGV0IFQ9W107aWYoVD1kLmxpYkRhdGFzZXQuc3BsaXQoIi4iKSxHbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Hbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihXPT57ZC5saWJy''@;'; put 'put ''YXJpZXM9Vy5zYXNsaWJzfSkuY2F0Y2goVz0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihXKX0pLGQubGliPVRbMF0sR24udmlld2VyLnN0YXJ0dXBTZXQpZC50YWJsZXM9R24udmlld2VyLnRhYmxlcztlbHNle2xldCBXPWQubGlicmFyaWVzLmZpbmQoaWU9PmllLkxJQlJBUllSRUYudG9Mb3dl''@;'; put 'put ''ckNhc2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkpO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5saWIpLnRoZW4oaWU9PntkLnRhYmxlcz1pZS5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oZ2Upe3JldHVybiBnZS5NRU1OQU1FfSksVy50YWJsZXM9ZC50YWJsZXMsR24udmll''@;'; put 'put ''d2VyLmxpYnJhcmllcz1kLmxpYnJhcmllcyxHbi52aWV3ZXIudGFibGVzPWQudGFibGVzLEduLnZpZXdlci5zdGFydHVwU2V0PSEwfSkuY2F0Y2goaWU9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoaWUpfSl9ZC50YWJsZT1UWzFdLGQudGFibGVGbGFnPSExLGg9ZC5saWJEYXRhc2V0LGQubGli''@;'; put 'put ''VGFiPWh9ZWxzZSBHbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Hbi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihUPT57ZC5saWJyYXJpZXM9VC5zYXNsaWJzfSkuY2F0Y2goVD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihU''@;'; put 'put ''KX0pLHR5cGVvZiBkLnRhYmxlPCJ1IiYmKEduLnZpZXdlci5zdGFydHVwU2V0P2QudGFibGVzPUduLnZpZXdlci50YWJsZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhkLmxpYikudGhlbihUPT57ZC50YWJsZXM9VC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oVyl7cmV0dXJu''@;'; put 'put ''IFcuTUVNTkFNRX0pfSkuY2F0Y2goVD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihUKSxkLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KSxkLnRhYmxlRmxhZz0hMSxoPWQubGliKyIuIitkLnRhYmxlLGQudGFibGVUaXRs''@;'; put 'put ''ZT1oLGQubGliVGFiPWgpO2Qucm91dGVyLnVybC5zcGxpdCgiLyIpLmxlbmd0aD4zJiZoJiYoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoaCxhKS50aGVuKFQ9PntpZihULnF1ZXJ5Lmxlbmd0aD4wJiYidmlldyI9PT1Hbi5yb290UGFyYW0mJjA9PT1Hbi52aWV3ZXIuZmlsdGVy''@;'; put 'put ''LmNsYXVzZXMubGVuZ3RoJiYoR24udmlld2VyLmZpbHRlci5xdWVyeT1kLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFQucXVlcnkpLEduLnZpZXdlci5maWx0ZXIubGliZHM9ZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGQuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxG''@;'; put 'put ''aWx0ZXJDbGF1c2UoInZpZXdlciIsVC5jb2xzKSksZC5hYm9ydEFjdGl2ZT0hMSxkLmZpbHRlckNvbHM9VC5jb2xzLHp6KGQuZmlsdGVyQ29scyxbXSxULiR2aWV3ZGF0YSksZC5udW1iZXJPZlJvd3M9VC5zYXNwYXJhbXNbMF0uTk9CUyxkLmhlYWRlclBrcz1ULnNhc3BhcmFtc1swXS5QS19G''@;'; put 'put ''SUVMRFMuc3BsaXQoIiAiKSwiU0FTOSI9PT1kLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpe2xldCBFZT1ULnNhc3BhcmFtc1swXS5UQUJMRVVSSTtFZSYmRWUubGVuZ3RoPjAmJihkLnRhYmxldXJpPUVlKX1kLmhvdFRhYmxlLmRhdGE9VC52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1ULiR2aWV3''@;'; put 'put ''ZGF0YSxkLmRzbWV0YT1ULmRzbWV0YSxkLnF1ZXJ5VGV4dD1ULnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVDtsZXQgVz1bXSxpZT1bXTtmb3IobGV0IEVlIGluIFQudmlld2RhdGFbMF0pRWUmJmllLnB1c2goRWUpO2ZvcihsZXQgRWU9MDtFZTxpZS5sZW5ndGg7RWUrKylXLnB1c2goe2RhdGE6''@;'; put 'put ''aWVbRWVdfSk7ZC5ob3RUYWJsZS5jb2xIZWFkZXJzPWllLGQuaG90VGFibGUuY29sdW1ucz1XLGQuaG90VGFibGUuY2VsbHM9ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fSxkLnRhYmxlRmxhZz0hMTtsZXQgd2U9W107d2U9aC5zcGxpdCgiLiIpLGQubGliPXdlWzBdLGQudGFibGU9''@;'; put 'put ''d2VbMV0sMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/KGQubm9EYXRhPSEwLGQudGFibGVGbGFnPSEwKTooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEpLGQubm9EYXRhUmVxRXJyPSExfSkuY2F0Y2goVD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihUKSxkLmFib3J0QWN0aXZlPSEwLGQu''@;'; put 'put ''bm9EYXRhUmVxRXJyPSEwfSkpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmaCYmZC5yb3V0ZXIubmF2aWdhdGUoMCE9PWE/WyIvdmlldy9kYXRhLyIraCsiLyIrYV06WyIvdmlldy9kYXRhLyIraF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2xldCBmPWQudGFi''@;'; put 'put ''bGUsXz1kLmxpYnJhcmllcy5maW5kKFQ9PlQuTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2UoKSk7Xz8oR24udmlld2VyLmxpYnJhcmllcy5sZW5ndGg+MCYmKGQubGlicmFyaWVzPUduLnZpZXdlci5saWJyYXJpZXMsZC5saWJyYXJpZXNTZWFyY2g9R24udmll''@;'; put 'put ''d2VyLmxpYnJhcmllc1NlYXJjaCksZC5saWJyYXJ5T25DbGljayhkLmxpYixfLCEwKSk6ZC5saWJpbmZvPVtdLGQudGFibGU9Znx8ZC50YWJsZSxkLmxpYnJhcmllcyYmZC5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoZC5saWJyYXJpZXMpLGQucm91dGVyLnVybC5pbmNsdWRlcygi''@;'; put 'put ''L2RhdGEiKSYmZC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksZC5sb2FkaW5nVGFibGVWaWV3PSExLCFkLm5vRGF0YSYmIWQubm9EYXRhUmVxRXJyJiZoJiZkLnNldHVwSG90KCksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXJ8fHNldFRpbWVvdXQoKCk9PntsZXQgVD1kb2N1bWVudC5n''@;'; put 'put ''ZXRFbGVtZW50QnlJZCgiaG90SW5zdGFuY2UiKTtUJiYoVC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFc9PntzZXRUaW1lb3V0KCgpPT57bGV0IGllPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2b2lkIDA7aWUmJmllLmNsaWNrKCl9LDEwMCl9''@;'; put 'put ''KSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcj0hMCl9LDJlMyl9KSgpfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfW9wZW5RYigpe3RoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlh''@;'; put 'put ''Ymxlcyh0aGlzLmxpYisiLiIrdGhpcy50YWJsZSx0aGlzLmZpbHRlckNvbHMpfXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W10saD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFy''@;'; put 'put ''aWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7bGV0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuInZpZXciPT09R24ucm9vdFBhcmFtJiYoR24udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLEduLnZpZXdlci5maWx0ZXIucXVl''@;'; put 'put ''cnk9W10sR24udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IF89MDtfPGYubGVuZ3RoO18rKyl7Y29uc3QgVD1mW19dLmVsZW1l''@;'; put 'put ''bnRzO2Q9VC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIG51bGw9PT1XLnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChUKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2NvbnN0IGY9e2dyb3VwTG9naWM6YS5jbGF1''@;'; put 'put ''c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTthLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChUPT57Y29uc3QgVz17ZmlsdGVyQ2xhdXNlczpbXX07VC5lbGVtZW50cy5mb3JFYWNoKGllPT57Vy5maWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShpZSkp''@;'; put 'put ''fSksVy5jbGF1c2VMb2dpYz1ULmNsYXVzZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShXKSl9KTtjb25zdCBfPWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1''@;'; put 'put ''ZXJ5KGEubGliZHMsXykudGhlbihUPT57YS5xdWVyeVRleHQ9VC5yZXN1bHRbMF0uRklMVEVSX1RFWFQ7bGV0IFc9VC5yZXN1bHRbMF0uRklMVEVSX1JLO2Eucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHMrIi8iK1ddLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2''@;'; put 'put ''ZSJ9KSxhLnZpZXdEYXRhKFcpLGEuZmlsdGVyPSExfSkuY2F0Y2goVD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihUKX0pLGEuc3VibWl0TG9hZGluZz0hMX19KSgpfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9c2V0dXBIb3QoKXtzZXRUaW1lb3V0''@;'; put 'put ''KCgpPT57IXRoaXMubG9hZGluZ1RhYmxlVmlldyYmdGhpcy5saWJEYXRhc2V0JiYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2UiKSx0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdz''@;'; put 'put ''KHtoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT41MDA/NTAwOmF9LGFmdGVyR2V0Q29sSGVhZGVyOihhLGQpPT57Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoYSk7aCYmdGhpcy5oZWFkZXJQa3MuaW5k''@;'; put 'put ''ZXhPZihoKT4tMSYmZC5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKX19KSl9LDFlMyl9bG9hZFdpdGhQYXJhbWV0ZXJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSEwLGEudGFibGVUaXRsZT1hLnJvdXRlLnNuYXBzaG90LnBh''@;'; put 'put ''cmFtcy5saWJNZW18fDAsYS51cmxGaWx0ZXJQaz1wYXJzZUludChhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZHx8IjAiKTtsZXQgaD1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW07YS5saWJEYXRhc2V0PWgsaC5pbmNsdWRlcygiLiIpfHwoYS5saWI9aCkseWllbGQgYS52''@;'; put 'put ''aWV3RGF0YShhLnVybEZpbHRlclBrKSxhLm5vRGF0YT9zZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITB9LDEyMDApOnNldFRpbWVvdXQoKCk9PnthLnRhYmxlRmxhZz0hMX0sMTIwMCl9KSgpfWxvYWRXaXRob3V0UGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9u''@;'; put 'put ''Kigpe2Euc3dpdGNoRmxhZz0hMSxhLmxpYnJhcmllc0xvYWRpbmc9ITAsR24udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2EubGlicmFyaWVzPUduLnZpZXdlci5saWJyYXJpZXMsYS5saWJyYXJpZXNTZWFyY2g9R24udmlld2VyLmxpYnJhcmllc1NlYXJjaCxhLmxpYj1Hbi52''@;'; put 'put ''aWV3ZXIubGlicmFyeSxhLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSwxMDApOihhLm5vRGF0YVJlcUVycj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS52aWV3TGli''@;'; put 'put ''cygpLnRoZW4oZD0+e2EubGlicmFyaWVzPWQuc2FzbGlicyxHbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLEduLnZpZXdlci5zdGFydHVwU2V0PSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcmllcyl9KS5jYXRj''@;'; put 'put ''aChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EuaG90VGFibGUuZGF0''@;'; put 'put ''YS5sZW5ndGg+MCYmKGEudGFibGVGbGFnPSEwKSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e2Eud2hlcmVTdHJpbmc9ZC5zdHJpbmcsYS5jbGF1c2VzPWQub2JqLGEubGliZHM9ZC5saWJkc30pLHR5cGVvZiBhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5s''@;'; put 'put ''aWJNZW08InUiP2EubG9hZFdpdGhQYXJhbWV0ZXJzKCk6YS5sb2FkV2l0aG91dFBhcmFtZXRlcnMoKX0pKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChiZCksdHQob2EpLHR0KERzKSx0dChXbCksdHQodmwpLHR0KHcwKSx0dChB''@;'; put 'put ''YyksdHQoSmQpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhnbnQsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5xdWVyeUZpbHRlckNvbXBMaXN0PWgpfX0saG9z''@;'; put 'put ''dEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjk1LHZhcnM6MjksY29uc3RzOltbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5n''@;'; put 'put ''Rm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsLWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJjbHItY29sLW1kLTYiXSxbMSwi''@;'; put 'put ''ZG93bmxvYWQtc2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ2YWx1ZSIsIkNTViJdLFsidmFsdWUiLCJTQVMiXSxbInZhbHVlIiwiUEdTUUxfRERMIl0sWyJ2YWx1ZSIsIlNBU19EREwiXSxbInZhbHVlIiwiVFNRTF9EREwiXSxbInZhbHVl''@;'; put 'put ''IiwiRVhDRUwiXSxbInZhbHVlIiwiTUFSS0RPV04iXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUi''@;'; put 'put ''LDMsImlkIiwiY2xpY2siXSxbMSwibW9kYWwtYm9keSIsIndlYi1xdWVyeSJdLFsxLCJyb3ciXSxbMSwiY2xyLWNvbC1sZy0xMiIsImNsci1jb2wtbWQtMTIiLCJjbHItY29sLXNtLTEyIiwiY2xyLWNvbC14cy0xMiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwianVz''@;'; put 'put ''dGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiYnRuLWdyb3VwIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJjYXJkLWJsb2NrIiwid29yZC1icmVhay1hbGwiXSxbInJv''@;'; put 'put ''d3MiLCI0IiwiY29scyIsIjUwIiwidHlwZSIsInRleHQiLCJyZWFkb25seSIsIiIsMSwid2ViLXF1ZXJ5LXRleHQiLCJ3LTEwMCIsMywidmFsdWUiLCJmb2N1cyJdLFsiY2xpQ29tbWFuZElucHV0IiwiIl0sWzEsImNhcmQtZm9vdGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwz''@;'; put 'put ''LCJuZ3hDbGlwYm9hcmQiLCJjbGljayJdLFsiYXJpYS1tb2RhbCIsInRydWUiLDEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwx''@;'; put 'put ''LCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiYnRuLXNtIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xyTG9hZGlu''@;'; put 'put ''ZyIsImNsaWNrIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xp''@;'; put 'put ''Y2siXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiw0LCJuZ0lmIl0sWzMsIm9wZW4iLCJkc21ldGEiLCJvcGVuQ2hhbmdlIl0sWzMsInZpZXdib3hNb2RhbCIsInZpZXdib3hNb2RhbENoYW5n''@;'; put 'put ''ZSJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBs''@;'; put 'put ''ZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBl''@;'; put 'put ''IiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsx''@;'; put 'put ''LCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsImlkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LCJrZXl1cCJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImRjLWxvY2tlZC1jb250cm9sIiwidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbImNsclBvc2l0aW9u''@;'; put 'put ''IiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRh''@;'; put 'put ''YmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJtb2Rh''@;'; put 'put ''bCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJd''@;'; put 'put ''LFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsxLCJs''@;'; put 'put ''b2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsImNhcmQiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJoZWFkZXItcm93IGNsci1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAgbS0w''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2sgbm9EYXRhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1mbGV4LTEiLDQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsImZvcm0tYmxvY2siLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciIsInN3IiwiY2xyLWNvbC1tZCJdLFsiY2xyRm9y''@;'; put 'put ''bSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJ0eXBlIiwia2V5dXAuZW50ZXIiXSxbInNlYXJjaEVsIiwiIl0sWyJzaGFw''@;'; put 'put ''ZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxb''@;'; put 'put ''MSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtc20tcm93Il0sWyJzaGFwZSIsImluZm8tY2lyY2xlIiwic2l6ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNs''@;'; put 'put ''YXNzIiwiY29sb3IteWVsbG93IG10LTUgbXItNSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2aWV3ZXJUaXRsZSBjbHItZmxleC1jb2x1bW4gZC1mbGV4IGNsci1mbGV4LXNtLXJvdyBjbHItYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsIm9wdGlvbnMtY29sIiwiY2xyLWNvbC1tZCJd''@;'; put 'put ''LFsiY2xhc3MiLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxp''@;'; put 'put ''bmUiXSxbInNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93IiwibXQtNSIsIm1yLTUiXSxbMSwidmlld2VyVGl0bGUiLCJjbHItZmxleC1jb2x1bW4iLCJkLWZsZXgiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJl''@;'; put 'put ''ZnJlc2gtdGFibGUiLDMsImNsaWNrIl0sWzEsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsImZpbHRlclNpZGUiXSxbInNo''@;'; put 'put ''YXBlIiwiY29nIiwic2l6ZSIsIjE1Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nl''@;'; put 'put ''c3Mtb3V0bGluZSIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2Vzcy1vdXRsaW5lIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNs''@;'; put 'put ''ckRyb3Bkb3duSXRlbSIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJkb3dubG9hZC1jbG91ZCJdLFsic2hhcGUiLCJwZW5jaWwiXSxbInNoYXBl''@;'; put 'put ''Iiwic3dpdGNoIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0s''@;'; put 'put ''WzEsImhlYWRlci1yb3ciLCJjbHItcm93IiwiYm9yZGVyLWJvdHRvbS1kaXZpZGVyIiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJ3LTEwMCIsIm0tMCJdLFsxLCJ0aXRsZS1jb2wiLCJjbHItY29sLWF1dG8iXSxbMSwidmlld2VyVGl0bGUiLCJtdC0xNyJdLFsxLCJ0ZXh0LWNlbnRlciIs''@;'; put 'put ''Im10LTEwIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxpYmluZm8gbS0wIGNsci1yb3ciLDQsIm5nSWYiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQtaW5m''@;'; put 'put ''byIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNoYXBlIiwiaW5mby1zdGFuZGFyZCIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJsaWJpbmZvIiwibS0wIiwiY2xyLXJvdyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBtLTAgdy0xMDAiLDQsIm5nSWYiXSxb''@;'; put 'put ''MSwidGV4dC1jZW50ZXIiLCJtLTAiLCJ3LTEwMCJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwibS0wIiwzLCJjbGljayJdLFsxLCJtLTAiXSxbMSwibS0wIiwiZm9udC1ib2xkIl0sWzEsImNhcmQtYmxvY2siLCJub0RhdGEiXSxbInNoYXBlIiwid2FybmluZy1zdGFu''@;'; put 'put ''ZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29y''@;'; put 'put ''dGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwibW9kaWZ5Q29sV2lkdGgiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51''@;'; put 'put ''YWxDb2x1bW5SZXNpemUiLCJyb3dIZWFkZXJzIiwicm93SGVhZGVyV2lkdGgiLCJyb3dIZWlnaHRzIiwibGljZW5zZUtleSJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYobWUoMCwiYXBwLXNpZGViYXIiLDApLHh0''@;'; put 'put ''KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiBkLmxvYWRNb3JlTGlicmFyaWVzKCl9KSxRZSgxLG1udCwyLDAsImRpdiIsMSksbWUoMiwiY2xyLXRyZWUiKSxRZSgzLGJudCw2LDMsImNsci10cmVlLW5vZGUiLDIpLFFlKDQsSW50LDIsMSwibmctY29udGFpbmVyIiwzKSx5''@;'; put 'put ''ZSgpLFFlKDUsTG50LDMsMCwiZGl2Iiw0KSx5ZSgpLG1lKDYsImRpdiIsNSksUWUoNyxSbnQsMTQsMCwiZGl2Iiw2KSxRZSg4LE9udCwxLDAsImRpdiIsNyksbWUoOSwiY2xyLW1vZGFsIiw4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vcGVuRG93bmxv''@;'; put 'put ''YWQ9Zn0pLG1lKDEwLCJoMyIsOSksTmUoMTEsIkRvd25sb2FkIikseWUoKSxtZSgxMiwiZGl2IiwxMCkoMTMsImRpdiIsMTEpKDE0LCJjbHItc2VsZWN0LWNvbnRhaW5lciIsMTIpKDE1LCJsYWJlbCIpLE5lKDE2LCJQbGVhc2UgY2hvb3NlIGRvd25sb2FkIGZvcm1hdCIpLHllKCksbWUoMTcs''@;'; put 'put ''InNlbGVjdCIsMTMpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kb3dubG9hZEZvcm1hdD1mfSksbWUoMTgsIm9wdGlvbiIsMTQpLE5lKDE5LCJDU1YiKSx5ZSgpLG1lKDIwLCJvcHRpb24iLDE1KSxOZSgyMSwiRGF0YWxpbmVzIChjYXJkcyBmaWxlKSIpLHllKCks''@;'; put 'put ''bWUoMjIsIm9wdGlvbiIsMTYpLE5lKDIzLCJEREwgKFBHU1FMIEZsYXZvdXIpIikseWUoKSxtZSgyNCwib3B0aW9uIiwxNyksTmUoMjUsIkRETCAoU0FTIEZsYXZvdXIpIikseWUoKSxtZSgyNiwib3B0aW9uIiwxOCksTmUoMjcsIkRETCAoVFNRTCBGbGF2b3VyKSIpLHllKCksbWUoMjgsIm9w''@;'; put 'put ''dGlvbiIsMTkpLE5lKDI5LCJFeGNlbCAoLnhsc3gpIikseWUoKSxtZSgzMCwib3B0aW9uIiwyMCksTmUoMzEsIk1hcmtkb3duICgubWQpIikseWUoKSgpKCkoKSgpLG1lKDMyLCJkaXYiLDIxKSgzMywiYnV0dG9uIiwyMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm9wZW5Eb3du''@;'; put 'put ''bG9hZD0hMX0pLE5lKDM0LCIgQ2FuY2VsICIpLHllKCksbWUoMzUsImJ1dHRvbiIsMjMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kb3dubG9hZEZvcm1hdC5pbmNsdWRlcygiRERMIik/ZC5kb3dubG9hZERETCgpOmQuZG93bmxvYWREYXRhKCl9KSxOZSgzNiwiIE9rICIpLHll''@;'; put 'put ''KCkoKSgpLG1lKDM3LCJjbHItbW9kYWwiLDgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLndlYlF1ZXJ5PWZ9KSxtZSgzOCwiaDMiLDkpLE5lKDM5LCIgV2ViIFF1ZXJ5IFVSTCAiKSx5ZSgpLG1lKDQwLCJkaXYiLDI0KSg0MSwiZGl2IiwyNSkoNDIsImRp''@;'; put 'put ''diIsMjYpKDQzLCJkaXYiLDI3KSg0NCwiZGl2IiwyOCkoNDUsInNwYW4iKSxOZSg0NiwiQ29weSB0aGUgYmVsb3cgaW50byB5b3VyIHByZWZlcnJlZCBjbGllbnQgdG9vbDoiKSx5ZSgpLG1lKDQ3LCJkaXYiLDI5KSg0OCwiZGl2IiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBk''@;'; put 'put ''LndlYlF1ZXJ5VGFiPSEwLGQuc2hvd1dlYlF1ZXJ5KCl9KSxxdCg0OSwiaW5wdXQiLDMxKSxtZSg1MCwibGFiZWwiKSxOZSg1MSwiVEFCIikseWUoKSgpLG1lKDUyLCJkaXYiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQud2ViUXVlcnlUYWI9ITEsZC5zaG93V2ViUXVlcnko''@;'; put 'put ''KX0pLHF0KDUzLCJpbnB1dCIsMzEpLG1lKDU0LCJsYWJlbCIpLE5lKDU1LCJDU1YiKSx5ZSgpKCkoKSgpLG1lKDU2LCJkaXYiLDMyKSg1NywidGV4dGFyZWEiLDMzLDM0KSx4dCgiZm9jdXMiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2xpQ29tbWFuZEZvY3VzKGYpfSksTmUoNTksIiAgICAg''@;'; put 'put ''ICAgICAgICAgIikseWUoKSgpLG1lKDYwLCJkaXYiLDM1KSg2MSwiYnV0dG9uIiwzNikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNvcHlUb0NsaXAoKX0pLE5lKDYyLCIgY29weSB0byBjbGlwYm9hcmQgIikseWUoKSgpKCkoKSgpKCksbWUoNjMsImRpdiIsMjEpKDY0LCJidXR0''@;'; put 'put ''b24iLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQud2ViUXVlcnk9ITF9KSxOZSg2NSwiIGNsb3NlICIpLHllKCkoKSgpLG1lKDY2LCJjbHItbW9kYWwiLDM3KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5maWx0ZXI9Zn0pLG1lKDY3LCJo''@;'; put 'put ''MyIsOSksTmUoNjgsIiBGaWx0ZXIgZm9yIHRhYmxlOiIpLG1lKDY5LCJzcGFuIiksTmUoNzApLHllKCkoKSxtZSg3MSwiZGl2IiwxMCksUWUoNzIsUG50LDIsMCwiYXBwLXF1ZXJ5IiwzOCkseWUoKSxtZSg3MywiZGl2IiwyMSkoNzQsImJ1dHRvbiIsMzkpLHh0KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZC5yZXNldEZpbHRlcigpfSksTmUoNzUsIiByZXNldCBmaWx0ZXIgIikseWUoKSxtZSg3NiwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmZpbHRlcj0hMSxkLnJlbW92ZVF1ZXJ5KCl9KSxOZSg3NywiIENhbmNlbCAiKSx5ZSgpLG1lKDc4LCJi''@;'; put 'put ''dXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VuZENsYXVzZSgpfSksTmUoNzksIiBPayAiKSx5ZSgpKCkoKSxtZSg4MCwiY2xyLW1vZGFsIiw0MikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucXVlcnlFcnI9Zn0pLG1lKDgx''@;'; put 'put ''LCJoMyIsNDMpLE5lKDgyLCJFcnJvciIpLHllKCksbWUoODMsImRpdiIsMTApKDg0LCJwIiksTmUoODUpLHllKCkoKSxtZSg4NiwiZGl2IiwyMSkoODcsImJ1dHRvbiIsNDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5xdWVyeUVycj0hMX0pLE5lKDg4LCIgQ2FuY2VsICIpLHll''@;'; put 'put ''KCksbWUoODksImJ1dHRvbiIsNDUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5xdWVyeUVycj0hMX0pLE5lKDkwLCIgT2sgIikseWUoKSgpKCksUWUoOTEsRm50LDYsMCwiZGl2Iiw0NiksUWUoOTIsbXJ0LDgsNiwiZGl2Iiw0NykseWUoKSxtZSg5MywiYXBwLWRhdGFzZXQtaW5m''@;'; put 'put ''byIsNDgpLHh0KCJvcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kYXRhc2V0SW5mbz1mfSkseWUoKSxtZSg5NCwiYXBwLXZpZXdib3hlcyIsNDkpLHh0KCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnZpZXdib3hPcGVuPWZ9KSx5ZSgpKSwyJmEpe2Nv''@;'; put 'put ''bnN0IGg9JGkoNTgpO0NlKDEpLFJlKCJuZ0lmIixkLmxpYnJhcmllc0xvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIixkLmxpYnJhcmllcyksQ2UoMSksUmUoIm5nRm9yT2YiLGQubGlicmFyaWVzKSxDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJpZXNQYWdpbmcpLENlKDIpLFJlKCJuZ0lmIixkLm51''@;'; put 'put ''bGxWYXJpYWJsZXMpLENlKDEpLFJlKCJuZ0lmIixkLm51bGxWYXJpYWJsZXMpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQub3BlbkRvd25sb2FkKSgiY2xyTW9kYWxTaXplIiwibWQiKSxDZSg4KSxSZSgibmdNb2RlbCIsZC5kb3dubG9hZEZvcm1hdCksQ2UoMTgpLFJlKCJpZCIsZC50YWJs''@;'; put 'put ''ZVRpdGxlKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLndlYlF1ZXJ5KSgiY2xyTW9kYWxTaXplIiwibGciKSxDZSgxMiksUmUoImNoZWNrZWQiLGQud2ViUXVlcnlUYWIpLENlKDQpLFJlKCJjaGVja2VkIiwhZC53ZWJRdWVyeVRhYiksQ2UoNCkseGMoInZhbHVlIixkLndlYlF1ZXJ5VGV4''@;'; put 'put ''dCksQ2UoNCksUmUoIm5neENsaXBib2FyZCIsaCksQ2UoNSksUmUoImNsck1vZGFsT3BlbiIsZC5maWx0ZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNCksbXIoIiAiLGQubGliVGFiLCIgIiksQ2UoMiksUmUoIm5nSWYiLGQuZmlsdGVyKSxDZSg2''@;'; put 'put ''KSxSZSgiY2xyTG9hZGluZyIsZC5zdWJtaXRMb2FkaW5nKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLnF1ZXJ5RXJyKSxDZSg1KSxvcihkLnF1ZXJ5RXJyTWVzc2FnZSksQ2UoNiksUmUoIm5nSWYiLGQubG9hZGluZ1RhYmxlVmlldyksQ2UoMSksUmUoIm5nSWYiLCFkLmxvYWRpbmdUYWJs''@;'; put 'put ''ZVZpZXcpLENlKDEpLFJlKCJvcGVuIixkLmRhdGFzZXRJbmZvKSgiZHNtZXRhIixkLmRzbWV0YSksQ2UoMSksUmUoInZpZXdib3hNb2RhbCIsZC52aWV3Ym94T3Blbil9fSxkZXBlbmRlbmNpZXM6W3hzZSx4cyxaaSxuZCx0aCxkbnQsQ3AsbDEsYzEsV2EsUzAsTTAsQnMsd3AsT3MscjIsZGQs''@;'; put 'put ''ZzEsRHAsa2Esb3Usc3UsWnUsYzIsZGgsVXMsWEosRDAsRDgsVDAsZjEsTjgsSDgsTmYsYWcsbGcsSzgsQmIsemIsamIsdTIsTXksbjMsQXNlLEJFLGNVLFU3LERzZSxwbnRdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6Zmxl''@;'; put 'put ''eDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0udG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPWNoZWNrYm94XVtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1j''@;'; put 'put ''b2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLm9wdGlvbnMtY29sW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5zd1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHg7YmFja2dyb3VuZDojNDk1''@;'; put 'put ''OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozcHg7Zm9udC1zaXplOjE2cHh9LmZpbHRlclNpZGVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MjZweDttYXJnaW4tYm90dG9tOjE5cHh9Lm9wdGlvbnMtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''ICBjbHItaWNvbnttYXJnaW4tcmlnaHQ6NXB4fS52aWV3ZXJUaXRsZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4fS5kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxODBweDttYXJnaW4tdG9wOi0xOHB4O3BhZGRp''@;'; put 'put ''bmc6MH0uZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmNhcmRGbGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubm9E''@;'; put 'put ''YXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MX0uZmlsdGVyQnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OmZsZXgtZW5kfS5lZGl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmJ0blZpZXdbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIWltcG9ydGFudH0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5n''@;'; put 'put ''Oi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5kb3dubG9hZC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fS5yZWZyZXNoLXRhYmxlW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXtjdXJzb3I6cG9pbnRlcjttYXJnaW4tbGVmdDo1cHh9LmxpYmluZm9bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAyMHB4O292ZXJmbG93OmF1dG99aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5k''@;'; put 'put ''OnJnYmEoNDgsMTA3LDAsLjQzMTM3MjU0OSl9Lm5vLXRhYmxlLXNlbGVjdGVkLWluZm9bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ud2ViLXF1ZXJ5W19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXttYXgtaGVpZ2h0OjM1dmh9LndlYi1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAud2ViLXF1ZXJ5LXRleHRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDoxMDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LmZpbHRl''@;'; put 'put ''ckJ0bltfbmdjb250ZW50LSVDT01QJV0sIC5lZGl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn19QG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KXsucm93W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MHJlbTttYXJnaW4t''@;'; put 'put ''bGVmdDowcmVtfX0iXX0pLGN9KSgpO2NvbnN0IHZydD1be3BhdGg6IiIsY29tcG9uZW50OnR0dCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJkYXRhIn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpIVH0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpIVH0s''@;'; put 'put ''e3BhdGg6ImRhdGEvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpIVH0se3BhdGg6ImRhdGEvOmxpYk1lbSIsY29tcG9uZW50OkhUfSx7cGF0aDoibGluZWFnZSIsY29tcG9uZW50OkZUfSx7cGF0aDoibGluZWFnZS86dGFibGVpZC86ZGlyZWN0aW9uIixjb21wb25lbnQ6RlR9LHtwYXRo''@;'; put 'put ''OiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24iLGNvbXBvbmVudDpGVH0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbi86cmVsb2FkIixjb21wb25lbnQ6RlR9LHtwYXRoOiJ2aXlhLWFwaS1leHBsb3JlciIsY29tcG9uZW50OmxudH0se3BhdGg6Im1l''@;'; put 'put ''dGFkYXRhIixjb21wb25lbnQ6b1p9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElEIixjb21wb25lbnQ6b1p9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElELzpvYmplY3ROYW1lIixjb21wb25lbnQ6b1p9LHtwYXRoOiJ1c2VybmF2Iixjb21wb25lbnQ6ZXR0LGNoaWxk''@;'; put 'put ''cmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86Imdyb3VwcyJ9LHtwYXRoOiJ1c2VycyIsY29tcG9uZW50OkNsZX0se3BhdGg6InVzZXJzLzp1cmkiLGNvbXBvbmVudDpDbGV9LHtwYXRoOiJncm91cHMiLGNvbXBvbmVudDplYWV9LHtwYXRoOiJncm91cHMvOnVyaSIs''@;'; put 'put ''Y29tcG9uZW50OmVhZX0se3BhdGg6InJvbGVzIixjb21wb25lbnQ6d2xlfSx7cGF0aDoicm9sZXMvOnVyaSIsY29tcG9uZW50OndsZX1dfV19XTtsZXQgX3J0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1v''@;'; put 'put ''ZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2RjLmZvckNoaWxkKHZydCksZGNdfSksY30pKCksYnJ0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5c''@;'; put 'put ''dTAyNzVpbmo9bWkoe2ltcG9ydHM6W0ZzZSxvbyxfcnQsaG50LCRsLF91LF83LmZvclJvb3QoKSxCNyxWNyxldyxmVSxDMl19KSxjfSkoKTtjb25zdCB3cnQ9ZGMuZm9yUm9vdChbe3BhdGg6IiIscmVkaXJlY3RUbzoiaG9tZSIscGF0aE1hdGNoOiJmdWxsIn0se3BhdGg6InZpZXciLGxvYWRD''@;'; put 'put ''aGlsZHJlbjooKT0+YnJ0fSx7cGF0aDoicmV2aWV3Iixjb21wb25lbnQ6T0dlLGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRvYXBwcm92ZSJ9LHtwYXRoOiIiLGxvYWRDaGlsZHJlbjooKT0+UkdlfV19LHtwYXRoOiJsaWNlbnNpbmciLGxvYWRDaGls''@;'; put 'put ''ZHJlbjooKT0+ZVdlfSx7cGF0aDoiaG9tZSIsbG9hZENoaWxkcmVuOigpPT5oVX0se3BhdGg6ImVkaXRvciIsbG9hZENoaWxkcmVuOigpPT5kWWV9LHtwYXRoOiJzdGFnZSIsbG9hZENoaWxkcmVuOigpPT5qR2V9LHtwYXRoOiJzeXN0ZW0iLGxvYWRDaGlsZHJlbjooKT0+ZSRlfSx7cGF0aDoi''@;'; put 'put ''ZGVwbG95Iixsb2FkQ2hpbGRyZW46KCk9PlRFZX0se3BhdGg6IioqIixjb21wb25lbnQ6WXhlfV0se3VzZUhhc2g6ITB9KTtsZXQgQ3J0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpj''@;'; put 'put ''LGJvb3RzdHJhcDpbcVNlXX0pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W3p4LGJkLHBVXSxpbXBvcnRzOltaeGUsRUcsJGwsRDZlLEZoZSx3cnQsVjcsX3UsQjcsaFUsZXcsQzIsQnR0XX0pLGN9KSgpO0wxZSgpLmJvb3RzdHJhcE1vZHVsZShDcnQpfSw1NjMyMTooYXQsSWUsRik9Pnt2''@;'; put 'put ''YXIgYWU9RigxNzE1NikuZGVmYXVsdDtzZWxmLGF0LmV4cG9ydHM9KCgpPT57dmFyIHg9ezI2NTY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oayl7cmV0dXJuIGsmJmsuX19lc01vZHVsZT9rOntkZWZhdWx0''@;'; put 'put ''Omt9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kZWNvZGVUb2tlbj1PLmhhc1Rva2VuRXhwaXJlZD1PLmlzUmVmcmVzaFRva2VuRXhwaXJpbmc9Ty5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9dm9pZCAwO3ZhciBLPXooUig2MjQ1KSk7ZnVuY3Rp''@;'; put 'put ''b24gSShrLEUpe3JldHVybigwLEsuZGVmYXVsdCkoaykuZXhwLShuZXcgRGF0ZSkudmFsdWVPZigpLzFlMzw9RX1PLmlzQWNjZXNzVG9rZW5FeHBpcmluZz1mdW5jdGlvbihrLEUpe3JldHVybiB2b2lkIDA9PT1FJiYoRT0zNjAwKSwha3x8SShrLEUpfSxPLmlzUmVmcmVzaFRva2VuRXhwaXJp''@;'; put 'put ''bmc9ZnVuY3Rpb24oayxFKXtyZXR1cm4gdm9pZCAwPT09RSYmKEU9MzApLCFrfHxJKGssRSl9LE8uaGFzVG9rZW5FeHBpcmVkPWZ1bmN0aW9uKGspe3JldHVybiFrfHxJKGssMCl9LE8uZGVjb2RlVG9rZW49ZnVuY3Rpb24oayl7dmFyIEU7dHJ5e0U9KDAsSy5kZWZhdWx0KShrKX1jYXRjaHt0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9rZW4gc3VwcGxpZWQuIil9cmV0dXJuIEV9fSw2Nzk5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWom''@;'; put 'put ''JihqPUUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLGose2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSl9OmZ1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLElbal09a1tFXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEks''@;'; put 'put ''ayl7Zm9yKHZhciBFIGluIEkpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSyhSKDI2NTYpLE8pfSwzMjU5OmZ1bmN0aW9uKE0s''@;'; put 'put ''Tyl7InVzZSBzdHJpY3QiO3ZhciBSPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIFI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oeil7Zm9yKHZhciBLLEk9MSxrPWFyZ3VtZW50cy5sZW5ndGg7STxrO0krKylmb3IodmFyIEUgaW4gSz1hcmd1bWVudHNbSV0pT2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEssRSkmJih6W0VdPUtbRV0pO3JldHVybiB6fSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucHJlZml4TWVzc2FnZT12b2lkIDAsTy5wcmVmaXhN''@;'; put 'put ''ZXNzYWdlPWZ1bmN0aW9uKHosSyl7aWYoIm9iamVjdCI9PXR5cGVvZiB6KWlmKHouaGFzT3duUHJvcGVydHkoIm1lc3NhZ2UiKSl6Lm1lc3NhZ2U9Syt6Lm1lc3NhZ2U7ZWxzZXtpZighei5oYXNPd25Qcm9wZXJ0eSgiYm9keSIpKXJldHVybiBSKFIoe30seikse21lc3NhZ2U6S30pO2lmKCJv''@;'; put 'put ''YmplY3QiPT10eXBlb2Ygei5ib2R5JiYoei5tZXNzYWdlPXouYm9keS5tZXNzYWdlP0srei5ib2R5Lm1lc3NhZ2U6SyksInN0cmluZyI9PXR5cGVvZiB6LmJvZHkpe3ZhciBJPXZvaWQgMDt0cnl7ST1KU09OLnBhcnNlKHouYm9keSl9Y2F0Y2h7cmV0dXJuIHoubWVzc2FnZT1LLHp9cmV0dXJu''@;'; put 'put ''IEkubWVzc2FnZT1JLm1lc3NhZ2U/SytJLm1lc3NhZ2U6Syx6LmJvZHk9SSx6fX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHomJih6PUsreiksen19LDk3Nzg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVh''@;'; put 'put ''dGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlz''@;'; put 'put ''JiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9''@;'; put 'put ''KSxLKFIoMzI1OSksTyksSyhSKDEwNjQpLE8pfSwxMDY0OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oVixCKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2Vv''@;'; put 'put ''ZiBBcnJheSYmZnVuY3Rpb24oWSxYKXtZLl9fcHJvdG9fXz1YfXx8ZnVuY3Rpb24oWSxYKXtmb3IodmFyIFUgaW4gWClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWCxVKSYmKFlbVV09WFtVXSl9KShWLEIpfSxmdW5jdGlvbihWLEIpe2lmKCJmdW5jdGlvbiIhPXR5cGVv''@;'; put 'put ''ZiBCJiZudWxsIT09Qil0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKEIpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIFkoKXt0aGlzLmNvbnN0cnVjdG9yPVZ9eihWLEIpLFYucHJvdG90eXBlPW51bGw9PT1CP09iamVj''@;'; put 'put ''dC5jcmVhdGUoQik6KFkucHJvdG90eXBlPUIucHJvdG90eXBlLG5ldyBZKX0pLEk9dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKFYsQil7dmFyIFk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmVltTeW1ib2wuaXRlcmF0b3JdO2lmKCFZKXJldHVybiBWO3ZhciBYLFUscT1ZLmNhbGwo''@;'; put 'put ''ViksZWU9W107dHJ5e2Zvcig7KHZvaWQgMD09PUJ8fEItLSA+MCkmJiEoWD1xLm5leHQoKSkuZG9uZTspZWUucHVzaChYLnZhbHVlKX1jYXRjaCh0ZSl7VT17ZXJyb3I6dGV9fWZpbmFsbHl7dHJ5e1gmJiFYLmRvbmUmJihZPXEucmV0dXJuKSYmWS5jYWxsKHEpfWZpbmFsbHl7aWYoVSl0aHJv''@;'; put 'put ''dyBVLmVycm9yfX1yZXR1cm4gZWV9LGs9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihWLEIsWSl7aWYoWXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBYLFU9MCxxPUIubGVuZ3RoO1U8cTtVKyspIVgmJlUgaW4gQnx8KFh8fChYPUFycmF5LnByb3RvdHlwZS5zbGlj''@;'; put 'put ''ZS5jYWxsKEIsMCxVKSksWFtVXT1CW1VdKTtyZXR1cm4gVi5jb25jYXQoWHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoQikpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TZXJ2ZXJUeXBlRXJyb3I9dm9pZCAwO3ZhciBFPVIoMzkwMCks''@;'; put 'put ''aj1mdW5jdGlvbihWKXtmdW5jdGlvbiBCKFkpe3ZvaWQgMD09PVkmJihZPVtdKTt2YXIgWD10aGlzLFU9KFk9ayhbXSxJKG5ldyBTZXQoWSkpLCExKSkubGVuZ3RoP1kuam9pbigiLCAiKS50cmltKCk6W0UuU2VydmVyVHlwZS5TYXNWaXlhLEUuU2VydmVyVHlwZS5TYXM5LEUuU2VydmVyVHlw''@;'; put 'put ''ZS5TYXNqc10uam9pbigiLCAiKS50cmltKCk7cmV0dXJuIFU9VS5yZXBsYWNlKC8sXHMoW14sXSopJC8sIiBhbmQgJDEiKSwoWD1WLmNhbGwodGhpcywiSW52YWxpZCBzZXJ2ZXIgdHlwZTogdmFsaWQgb3B0aW9uIi5jb25jYXQoMSE9PVkubGVuZ3RoPyJzIjoiIiwiICIpLmNvbmNhdCgxIT09''@;'; put 'put ''WS5sZW5ndGg/ImFyZSI6ImlzIiwiICIpLmNvbmNhdChVKSl8fHRoaXMpLm5hbWU9IlNlcnZlclR5cGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFgsQi5wcm90b3R5cGUpLFh9cmV0dXJuIEsoQixWKSxCfShFcnJvcik7Ty5TZXJ2ZXJUeXBlRXJyb3I9an0sMzkwNjpmdW5jdGlvbihN''@;'; put 'put ''LE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihlZSx0ZSl7ZnVuY3Rpb24gb2UodWUpe3RyeXtoZShxLm5leHQodWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5j''@;'; put 'put ''dGlvbiBzZSh1ZSl7dHJ5e2hlKHEudGhyb3codWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBoZSh1ZSl7dmFyIGNlO3VlLmRvbmU/ZWUodWUudmFsdWUpOihjZT11ZS52YWx1ZSxjZSBpbnN0YW5jZW9mIFU/Y2U6bmV3IFUoZnVuY3Rpb24oRyl7RyhjZSl9KSkudGhlbihvZSxzZSl9''@;'; put 'put ''aGUoKHE9cS5hcHBseShZLFh8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFksWCl7dmFyIFUscSxlZSx0ZSxvZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZlZVswXSl0aHJvdyBlZVsxXTtyZXR1cm4gZWVbMV19LHRyeXM6W10sb3Bz''@;'; put 'put ''OltdfTtyZXR1cm4gdGU9e25leHQ6c2UoMCksdGhyb3c6c2UoMSkscmV0dXJuOnNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdGU7ZnVuY3Rpb24gc2UoaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKGNlKXtpZihVKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO29lOyl0cnl7aWYoVT0xLHEmJihlZT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhyb3d8fCgoZWU9cS5yZXR1cm4pJiZlZS5jYWxsKHEp''@;'; put 'put ''LDApOnEubmV4dCkmJiEoZWU9ZWUuY2FsbChxLGNlWzFdKSkuZG9uZSlyZXR1cm4gZWU7c3dpdGNoKHE9MCxlZSYmKGNlPVsyJmNlWzBdLGVlLnZhbHVlXSksY2VbMF0pe2Nhc2UgMDpjYXNlIDE6ZWU9Y2U7YnJlYWs7Y2FzZSA0OnJldHVybiBvZS5sYWJlbCsrLHt2YWx1ZTpjZVsxXSxkb25l''@;'; put 'put ''OiExfTtjYXNlIDU6b2UubGFiZWwrKyxxPWNlWzFdLGNlPVswXTtjb250aW51ZTtjYXNlIDc6Y2U9b2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChlZT0oZWU9b2UudHJ5cykubGVuZ3RoPjAmJmVlW2VlLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9''@;'; put 'put ''PWNlWzBdKSl7b2U9MDtjb250aW51ZX1pZigzPT09Y2VbMF0mJighZWV8fGNlWzFdPmVlWzBdJiZjZVsxXTxlZVszXSkpe29lLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVswXSYmb2UubGFiZWw8ZWVbMV0pe29lLmxhYmVsPWVlWzFdLGVlPWNlO2JyZWFrfWlmKGVlJiZvZS5sYWJlbDxl''@;'; put 'put ''ZVsyXSl7b2UubGFiZWw9ZWVbMl0sb2Uub3BzLnB1c2goY2UpO2JyZWFrfWVlWzJdJiZvZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZX1jZT1YLmNhbGwoWSxvZSl9Y2F0Y2goRyl7Y2U9WzYsR10scT0wfWZpbmFsbHl7VT1lZT0wfWlmKDUmY2VbMF0pdGhyb3cgY2VbMV07cmV0''@;'; put 'put ''dXJue3ZhbHVlOmNlWzBdP2NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW2hlLHVlXSl9fX0sST10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oWSxYKXt2YXIgVT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZZW1N5bWJvbC5pdGVyYXRvcl07aWYoIVUpcmV0dXJuIFk7dmFyIHEsZWUsdGU9''@;'; put 'put ''VS5jYWxsKFkpLG9lPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1YfHxYLS0gPjApJiYhKHE9dGUubmV4dCgpKS5kb25lOylvZS5wdXNoKHEudmFsdWUpfWNhdGNoKHNlKXtlZT17ZXJyb3I6c2V9fWZpbmFsbHl7dHJ5e3EmJiFxLmRvbmUmJihVPXRlLnJldHVybikmJlUuY2FsbCh0ZSl9ZmluYWxs''@;'; put 'put ''eXtpZihlZSl0aHJvdyBlZS5lcnJvcn19cmV0dXJuIG9lfSxrPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oWSxYLFUpe2lmKFV8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgcSxlZT0wLHRlPVgubGVuZ3RoO2VlPHRlO2VlKyspIXEmJmVlIGluIFh8fChxfHwocT1B''@;'; put 'put ''cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChYLDAsZWUpKSxxW2VlXT1YW2VlXSk7cmV0dXJuIFkuY29uY2F0KHF8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFgpKX0sRT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oWSl7cmV0dXJuIFkmJlkuX19lc01vZHVsZT9Z''@;'; put 'put ''OntkZWZhdWx0Oll9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy51cGRhdGVDc3Y9Ty5jcmVhdGVDc3Y9Ty5yZWFkQ3N2PXZvaWQgMDt2YXIgaj1SKDE1NTkpLFY9RShSKDc1NjUpKTtPLnJlYWRDc3Y9ZnVuY3Rpb24oWSl7cmV0dXJuIHoodm9p''@;'; put 'put ''ZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsai5yZWFkRmlsZSkoWSldO2Nhc2UgMTpyZXR1cm5bMixYLnNlbnQoKS5zcGxpdCgiXG4iKS5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0''@;'; put 'put ''dXJuIFUubGVuZ3RofSkubWFwKGZ1bmN0aW9uKFUpe3JldHVybiBVLnNwbGl0KCIsIil9KV19fSl9KX0sTy5jcmVhdGVDc3Y9ZnVuY3Rpb24oWSxYLFUpe3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHE7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihlZSl7c3dp''@;'; put 'put ''dGNoKGVlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE9KDAsVi5kZWZhdWx0KShYLHtoZWFkZXI6MT09PVgubGVuZ3RoLGNvbHVtbnM6VX0pLFs0LCgwLGouY3JlYXRlRmlsZSkoWSxxKV07Y2FzZSAxOnJldHVybiBlZS5zZW50KCksWzJdfX0pfSl9LE8udXBkYXRlQ3N2PWZ1bmN0aW9uKFksWCxV''@;'; put 'put ''LHEpe3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGVlLHRlLG9lO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oc2Upe3N3aXRjaChzZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LEIoWSxYLFUscSldO2Nhc2UgMTpyZXR1cm4gZWU9c2Uuc2VudCgpLHEmJih0ZT0w''@;'; put 'put ''PT09ZWUubGVuZ3RoPzE6ZWUubGVuZ3RoLChvZT1VLmZpbmRJbmRleChmdW5jdGlvbihoZSl7cmV0dXJuIGhlPT09cX0pKT4tMT9YLnNwbGljZShvZSwwLHRlKTooVS5zcGxpY2UoMCwwLHEpLFguc3BsaWNlKDAsMCx0ZSkpKSxlZS5wdXNoKFgpLFs0LCgwLE8uY3JlYXRlQ3N2KShZLGVlLFUp''@;'; put 'put ''XTtjYXNlIDI6cmV0dXJuIHNlLnNlbnQoKSxbMl19fSl9KX07dmFyIEI9ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZWUsdGUsb2Usc2U7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNl''@;'; put 'put ''IDA6aWYoWC5sZW5ndGghPT1VLmxlbmd0aCl7aWYoWC5sZW5ndGg+VS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7aWYoIXF8fFgubGVuZ3RoKzEhPT1VLmxlbmd0aCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBsZXNzIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKX1lbHNlIGlmKHEmJlUuaW5jbHVkZXMocSkpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7cmV0''@;'; put 'put ''dXJuWzQsKDAsTy5yZWFkQ3N2KShZKS5jYXRjaChmdW5jdGlvbih1ZSl7cmV0dXJuW119KV07Y2FzZSAxOmlmKGVlPWhlLnNlbnQoKSx0ZT1lZVswXSl7aWYoVS5sZW5ndGg+dGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibnVtYmVyIG9mIHByb3ZpZGVkIGNvbHVtbnMgYXJlIGdyZWF0ZXIg''@;'; put 'put ''dGhhbiBudW1iZXIgb2YgZXhpc3RpbmcgY29sdW1ucyIpO2lmKFUubGVuZ3RoPHRlLmxlbmd0aCl7aWYoIXF8fFUubGVuZ3RoKzEhPT10ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgbGVzcyB0aGFuIG51bWJlciBvZiBleGlzdGluZyBj''@;'; put 'put ''b2x1bW5zIik7aWYob2U9dGUuZmluZEluZGV4KGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWU9PT1xfSksc2U9ayhbXSxJKFUpLCExKSwhKG9lPi0xKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lmKHNlLnNwbGljZShv''@;'; put 'put ''ZSwwLHEpLEpTT04uc3RyaW5naWZ5KFUpIT09SlNPTi5zdHJpbmdpZnkoc2UpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIil9ZWxzZXtpZihKU09OLnN0cmluZ2lmeShVKSE9PUpTT04uc3RyaW5naWZ5KHRlKSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lmKHEmJiFVLmluY2x1ZGVzKHEpKXRocm93IG5ldyBFcnJvcigiY2FuIG5vdCBhZGQgbmV3IGlkIHRvIGV4aXN0aW5nIGRhdGEiKX19cmV0dXJuWzIsZWVdfX0pfSl9fSwxNTU5''@;'; put 'put ''OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEcsYixELEgpe3ZvaWQgMD09PUgmJihIPUQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHLEgse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGJbRF19fSl9OmZ1bmN0aW9uKEcsYixELEgpe3ZvaWQgMD09PUgmJihIPUQpLEdbSF09YltEXX0pLEs9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEcsYil7T2JqZWN0LmRlZmluZVByb3BlcnR5KEcsImRlZmF1bHQi''@;'; put 'put ''LHtlbnVtZXJhYmxlOiEwLHZhbHVlOmJ9KX06ZnVuY3Rpb24oRyxiKXtHLmRlZmF1bHQ9Yn0pLEk9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKEcpe2lmKEcmJkcuX19lc01vZHVsZSlyZXR1cm4gRzt2YXIgYj17fTtpZihudWxsIT1HKWZvcih2YXIgRCBpbiBHKSJkZWZhdWx0''@;'; put 'put ''IiE9PUQmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLEQpJiZ6KGIsRyxEKTtyZXR1cm4gSyhiLEcpLGJ9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEcsYixELEgpe3JldHVybiBuZXcoRHx8KEQ9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sZyl7ZnVuY3Rp''@;'; put 'put ''b24gQyhwKXt0cnl7dihILm5leHQocCkpfWNhdGNoKHcpe2codyl9fWZ1bmN0aW9uIFMocCl7dHJ5e3YoSC50aHJvdyhwKSl9Y2F0Y2godyl7Zyh3KX19ZnVuY3Rpb24gdihwKXt2YXIgdztwLmRvbmU/TihwLnZhbHVlKToodz1wLnZhbHVlLHcgaW5zdGFuY2VvZiBEP3c6bmV3IEQoZnVuY3Rp''@;'; put 'put ''b24oSil7Sih3KX0pKS50aGVuKEMsUyl9digoSD1ILmFwcGx5KEcsYnx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRyxiKXt2YXIgRCxILE4sZyxDPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJk5bMF0pdGhyb3cgTlsxXTtyZXR1cm4g''@;'; put 'put ''TlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBnPXtuZXh0OlMoMCksdGhyb3c6UygxKSxyZXR1cm46UygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksZztmdW5jdGlvbiBTKHYpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gZnVuY3Rpb24odyl7aWYoRCl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtDOyl0cnl7aWYoRD0xLEgmJihOPTImd1swXT9ILnJldHVybjp3WzBdP0gudGhyb3d8fCgoTj1ILnJldHVybikmJk4uY2FsbChI''@;'; put 'put ''KSwwKTpILm5leHQpJiYhKE49Ti5jYWxsKEgsd1sxXSkpLmRvbmUpcmV0dXJuIE47c3dpdGNoKEg9MCxOJiYodz1bMiZ3WzBdLE4udmFsdWVdKSx3WzBdKXtjYXNlIDA6Y2FzZSAxOk49dzticmVhaztjYXNlIDQ6cmV0dXJuIEMubGFiZWwrKyx7dmFsdWU6d1sxXSxkb25lOiExfTtjYXNlIDU6''@;'; put 'put ''Qy5sYWJlbCsrLEg9d1sxXSx3PVswXTtjb250aW51ZTtjYXNlIDc6dz1DLm9wcy5wb3AoKSxDLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChOPShOPUMudHJ5cykubGVuZ3RoPjAmJk5bTi5sZW5ndGgtMV0pfHw2IT09d1swXSYmMiE9PXdbMF0pKXtDPTA7Y29udGludWV9aWYo''@;'; put 'put ''Mz09PXdbMF0mJighTnx8d1sxXT5OWzBdJiZ3WzFdPE5bM10pKXtDLmxhYmVsPXdbMV07YnJlYWt9aWYoNj09PXdbMF0mJkMubGFiZWw8TlsxXSl7Qy5sYWJlbD1OWzFdLE49dzticmVha31pZihOJiZDLmxhYmVsPE5bMl0pe0MubGFiZWw9TlsyXSxDLm9wcy5wdXNoKHcpO2JyZWFrfU5bMl0m''@;'; put 'put ''JkMub3BzLnBvcCgpLEMudHJ5cy5wb3AoKTtjb250aW51ZX13PWIuY2FsbChHLEMpfWNhdGNoKEope3c9WzYsSl0sSD0wfWZpbmFsbHl7RD1OPTB9aWYoNSZ3WzBdKXRocm93IHdbMV07cmV0dXJue3ZhbHVlOndbMF0/d1sxXTp2b2lkIDAsZG9uZTohMH19KFt2LHBdKX19fSxqPXRoaXMmJnRo''@;'; put 'put ''aXMuX19yZWFkfHxmdW5jdGlvbihHLGIpe3ZhciBEPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJkdbU3ltYm9sLml0ZXJhdG9yXTtpZighRClyZXR1cm4gRzt2YXIgSCxOLGc9RC5jYWxsKEcpLEM9W107dHJ5e2Zvcig7KHZvaWQgMD09PWJ8fGItLSA+MCkmJiEoSD1nLm5leHQoKSkuZG9u''@;'; put 'put ''ZTspQy5wdXNoKEgudmFsdWUpfWNhdGNoKFMpe049e2Vycm9yOlN9fWZpbmFsbHl7dHJ5e0gmJiFILmRvbmUmJihEPWcucmV0dXJuKSYmRC5jYWxsKGcpfWZpbmFsbHl7aWYoTil0aHJvdyBOLmVycm9yfX1yZXR1cm4gQ30sVj10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKEcs''@;'; put 'put ''YixEKXtpZihEfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIEgsTj0wLGc9Yi5sZW5ndGg7TjxnO04rKykhSCYmTiBpbiBifHwoSHx8KEg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYiwwLE4pKSxIW05dPWJbTl0pO3JldHVybiBHLmNvbmNhdChIfHxBcnJheS5wcm90b3R5cGUu''@;'; put 'put ''c2xpY2UuY2FsbChiKSl9LEI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEcpe3JldHVybiBHJiZHLl9fZXNNb2R1bGU/Rzp7ZGVmYXVsdDpHfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNUZXN0RmlsZT1PLnRlc3RG''@;'; put 'put ''aWxlUmVnRXhwPU8uY3JlYXRlUmVhZFN0cmVhbT1PLmNyZWF0ZVdyaXRlU3RyZWFtPU8uZ2V0UmVhbFBhdGg9Ty5iYXNlNjRFbmNvZGVGaWxlPU8uYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPU8ucGF0aFNlcEVzY2FwZWQ9Ty5jb3B5PU8ubW92ZUZpbGU9Ty5nZXRSZWxhdGl2ZVBhdGg9Ty51bmlm''@;'; put 'put ''eUZpbGVQYXRoPU8uZGVsZXRlRm9sZGVyPU8uZGVsZXRlRmlsZT1PLmNyZWF0ZUZpbGU9Ty5jcmVhdGVGb2xkZXI9Ty5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9Ty5saXN0U3ViRm9sZGVyc0luRm9sZGVyPU8ubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9Ty5saXN0SW5pRmlsZXNJbkZv''@;'; put 'put ''bGRlcj1PLmxpc3RGaWxlc0luRm9sZGVyPU8ucmVhZEZpbGVCaW5hcnk9Ty5yZWFkRmlsZT1PLmlzRm9sZGVyPU8uZm9sZGVyRXhpc3RzPU8uZmlsZUV4aXN0cz12b2lkIDA7dmFyIFk9QihSKDU2NzQpKSxYPUIoUig5ODQpKSxVPUIoUigyNTIwKSkscT1SKDYyNjYpLGVlPUkoUigyOTc1KSk7''@;'; put 'put ''ZnVuY3Rpb24gdGUoRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKEcsWS5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''ITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSldfSl9KX1mdW5jdGlvbiBvZShHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShHKV19KX0pfWZ1''@;'; put 'put ''bmN0aW9uIHNlKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oZnVuY3Rpb24oRCl7cmV0dXJuIEQuZmls''@;'; put 'put ''dGVyKGZ1bmN0aW9uKEgpe3JldHVybiFILmlzRGlyZWN0b3J5KCl9KS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuIEgubmFtZX0pfSldfSl9KX1mdW5jdGlvbiBoZShHLGIsRCl7cmV0dXJuIHZvaWQgMD09PWImJihiPSEwKSx2b2lkIDA9PT1EJiYoRD1bXSksayh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgSD10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oZnVuY3Rpb24oZyl7cmV0dXJuIGsoSCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEMs''@;'; put 'put ''Uz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24odil7c3dpdGNoKHYubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYiYmZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNEaXJlY3RvcnkoKX0pLmxlbmd0aD8oQz1bXSxbNCwoMCxxLmFzeW5jRm9yRWFjaCkoZy5maWx0ZXIoZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHAuaXNEaXJlY3RvcnkoKX0pLGZ1bmN0aW9uKHApe3JldHVybiBrKFMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB3LEosbmU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihkZSl7c3dpdGNoKGRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQuaW5jbHVkZXModz1wLm5hbWUp''@;'; put 'put ''P1szLDJdOihKPVUuZGVmYXVsdC5qb2luKEcsdyksbmU9W1YoW10saihDKSwhMSldLFs0LGhlKEosYixEKV0pO2Nhc2UgMTpDPVYuYXBwbHkodm9pZCAwLG5lLmNvbmNhdChbai5hcHBseSh2b2lkIDAsW2RlLnNlbnQoKS5tYXAoZnVuY3Rpb24oZmUpe3JldHVybiBVLmRlZmF1bHQuam9pbih3''@;'; put 'put ''LGZlKX0pXSksITFdKSksZGUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzJdfX0pfSl9KV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4gdi5zZW50KCksWzIsVihWKFtdLGooZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIXAuaXNEaXJlY3RvcnkoKX0pLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcC5u''@;'; put 'put ''YW1lfSkpLCExKSxqKEMpLCExKV07Y2FzZSAyOnJldHVyblsyLGcubWFwKGZ1bmN0aW9uKHApe3JldHVybiBwLm5hbWV9KV19fSl9KX0pXX0pfSl9ZnVuY3Rpb24gdWUoRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXty''@;'; put 'put ''ZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMubWtkaXIoRyx7cmVjdXJzaXZlOiEwfSldfSl9KX1mdW5jdGlvbiBjZShHLGIsRCl7dm9pZCAwPT09YiYmKGI9VS5kZWZhdWx0LnNlcCksdm9pZCAwPT09RCYmKEQ9Ii8iKTt2YXIgSD17dW5peDoiLyIsd2luOiJcXCJ9LE49T2JqZWN0LmtleXMo''@;'; put 'put ''SCkuZmluZChmdW5jdGlvbihDKXtyZXR1cm4gSFtDXT09PWJ9KTtpZihOKXt2YXIgZz1IW09iamVjdC5rZXlzKEgpLmZpbmQoZnVuY3Rpb24oQyl7cmV0dXJuIEMhPT1OfSldO3JldHVybiBOPUhbTl0sRy5zcGxpdChnKS5qb2luKE4pfXJldHVybiBHLnNwbGl0KEQpLmpvaW4oYil9Ty5maWxl''@;'; put 'put ''RXhpc3RzPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLmFjY2VzcyhHLFkuZGVmYXVsdC5jb25zdGFudHMuRl9PSykudGhlbihmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pXX0pfSl9LE8uZm9sZGVyRXhpc3RzPXRlLE8uaXNGb2xkZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1''@;'; put 'put ''bHQucHJvbWlzZXMubHN0YXQoRykudGhlbihmdW5jdGlvbihEKXtyZXR1cm4gRC5pc0RpcmVjdG9yeSgpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pXX0pfSl9LE8ucmVhZEZpbGU9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9InV0ZjgiKSxrKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRCl7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKEcsYildfSl9KX0sTy5yZWFkRmlsZUJpbmFyeT1vZSxPLmxpc3RGaWxlc0luRm9sZGVyPXNlLE8ubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rp''@;'; put 'put ''b24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHNlKEcpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCkuZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBELmVu''@;'; put 'put ''ZHNXaXRoKCIuaW5pIil9KV19fSl9KX0sTy5saXN0U2FzRmlsZXNJbkZvbGRlcj1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIHZvaWQgMD09PWImJihiPSExKSx2b2lkIDA9PT1EJiYoRD1bXSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4p''@;'; put 'put ''e3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsaGUoRyxiLEQpXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCkuZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybiBnLmVuZHNXaXRoKCIuc2FzIil9KV19fSl9KX0sTy5saXN0U3ViRm9sZGVyc0luRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVy''@;'; put 'put ''biBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oZnVuY3Rpb24oRCl7cmV0dXJuIEQuZmlsdGVyKGZ1bmN0aW9uKEgpe3Jl''@;'; put 'put ''dHVybiBILmlzRGlyZWN0b3J5KCl9KS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuIEgubmFtZX0pfSldfSl9KX0sTy5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9aGUsTy5jcmVhdGVGb2xkZXI9dWUsTy5jcmVhdGVGaWxlPWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gayh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSCxOO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm4oRz1jZShHKSkuc3BsaXQoVS5kZWZhdWx0LnNlcCkubGVuZ3RoPjE/KChIPUcuc3BsaXQoVS5kZWZhdWx0LnNlcCkpLnBvcCgpLFs0LHRlKE49''@;'; put 'put ''SC5qb2luKFUuZGVmYXVsdC5zZXApKV0pOlszLDNdO2Nhc2UgMTpyZXR1cm4gZy5zZW50KCk/WzMsM106WzQsdWUoTildO2Nhc2UgMjpnLnNlbnQoKSxnLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy53cml0ZUZpbGUoRyxiLEQpXX19KX0pfSxPLmRlbGV0ZUZp''@;'; put 'put ''bGU9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucmVtb3ZlKEcpXX0pfSl9LE8uZGVsZXRlRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oRCxIKXsoMCxYLmRlZmF1bHQpKEcse30sZnVuY3Rpb24oTil7cmV0dXJuIE4/SChOKTpEKCl9KX0pXX0pfSl9LE8udW5pZnlGaWxlUGF0aD1jZSxPLmdldFJlbGF0''@;'; put 'put ''aXZlUGF0aD1mdW5jdGlvbihHLGIpe3ZhciBEPUcuc3BsaXQoVS5kZWZhdWx0LnNlcCksSD1iLnNwbGl0KFUuZGVmYXVsdC5zZXApLE49W10sZz1bXTtELmZvckVhY2goZnVuY3Rpb24ocCx3KXt2b2lkIDAhPT1IW3ddJiZEW3ddPT09SFt3XT9OLnB1c2gocCk6cCYmZy5wdXNoKHApfSk7dmFy''@;'; put 'put ''IEM9Ti5qb2luKFUuZGVmYXVsdC5zZXApLFM9bmV3IFJlZ0V4cCgiXiIuY29uY2F0KFUuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpKSksdj1uZXcgUmVnRXhwKCIiLmNvbmNhdChVLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKSwiJCIpKTtyZXR1cm4oZy5sZW5n''@;'; put 'put ''dGg/Ii4uIi5jb25jYXQoVS5kZWZhdWx0LnNlcCkucmVwZWF0KGcubGVuZ3RoKToiLiIuY29uY2F0KFUuZGVmYXVsdC5zZXApKStiLnJlcGxhY2UoQywiIikucmVwbGFjZShTLCIiKS5yZXBsYWNlKHYsIiIpfSxPLm1vdmVGaWxlPWZ1bmN0aW9uKEcsYil7cmV0dXJuIGsodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMucmVuYW1lKEcsYildfSl9KX0sTy5jb3B5PWZ1bmN0aW9uKEcsYil7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxm''@;'; put 'put ''dW5jdGlvbihEKXtyZXR1cm5bMixZLmRlZmF1bHQuY29weShHLGIpXX0pfSl9LE8ucGF0aFNlcEVzY2FwZWQ9VS5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIiksTy5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixvZShHKS50aGVuKGZ1bmN0aW9uKEQpe3ZhciBIPVUuZGVmYXVsdC5leHRuYW1lKEcpLnN1YnN0cigxKXx8InBuZyI7cmV0dXJuInN2ZyI9PT1IJiYoSD0ic3ZnK3htbCIpLCJkYXRhOmltYWdlLyIrSCsiO2Jhc2U2''@;'; put 'put ''NCwiK0QudG9TdHJpbmcoImJhc2U2NCIpfSldfSl9KX0sTy5iYXNlNjRFbmNvZGVGaWxlPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxl''@;'; put 'put ''KEcse2VuY29kaW5nOiJiYXNlNjQifSldfSl9KX0sTy5nZXRSZWFsUGF0aD1mdW5jdGlvbihHKXtyZXR1cm4gWS5kZWZhdWx0LnJlYWxwYXRoU3luYyhHKX0sTy5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsZWUuZmlsZUV4aXN0cyhHKV07Y2FzZSAxOnJldHVybiBiLnNlbnQoKT9bMixZLmRlZmF1bHQuY3JlYXRlV3JpdGVTdHJlYW0oRyx7ZmxhZ3M6ImEifSldOls0LGVlLmNyZWF0ZUZpbGUoRywiIild''@;'; put 'put ''O2Nhc2UgMjpyZXR1cm4gYi5zZW50KCksWzIsWS5kZWZhdWx0LmNyZWF0ZVdyaXRlU3RyZWFtKEcse2ZsYWdzOiJhIn0pXX19KX0pfSxPLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24oRyl7cmV0dXJuIGsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5jcmVhdGVSZWFkU3RyZWFtKEcpXX0pfSl9LE8udGVzdEZpbGVSZWdFeHA9L1wudGVzdFwuKFxkK1wuKT9zYXMkL2ksTy5pc1Rlc3RGaWxlPWZ1bmN0aW9uKEcpe3JldHVybiBPLnRlc3RGaWxlUmVnRXhwLnRlc3QoRyl9fSw1NjI2OmZ1bmN0''@;'; put 'put ''aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGspe3JldHVybiBrJiZrLl9fZXNNb2R1bGU/azp7ZGVmYXVsdDprfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0QWJz''@;'; put 'put ''b2x1dGVQYXRoPXZvaWQgMDt2YXIgSz16KFIoMjUyMCkpLEk9eihSKDc0MzUpKTtPLmdldEFic29sdXRlUGF0aD1mdW5jdGlvbihrLEUpe3JldHVybiBLLmRlZmF1bHQuaXNBYnNvbHV0ZShrKXx8L15+Ly5leGVjKGspP0suZGVmYXVsdC5ub3JtYWxpemUoay5yZXBsYWNlKC9efi8sSS5kZWZh''@;'; put 'put ''dWx0LmhvbWVkaXIoKSkpOksuZGVmYXVsdC5qb2luKEUsayl9fSwyOTc1OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEUsaixWLEIpe3ZvaWQgMD09PUImJihCPVYpLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShFLEIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGpbVl19fSl9OmZ1bmN0aW9uKEUsaixWLEIpe3ZvaWQgMD09PUImJihCPVYpLEVbQl09altWXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGlu''@;'; put 'put ''IEUpImRlZmF1bHQiPT09Vnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVil8fHooaixFLFYpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5yZWFkQ3N2PU8uY3JlYXRlQ3N2PU8udXBkYXRlQ3N2PU8udGVzdEZpbGVS''@;'; put 'put ''ZWdFeHA9Ty5pc1Rlc3RGaWxlPU8uZ2V0UmVhbFBhdGg9Ty5iYXNlNjRFbmNvZGVGaWxlPU8uYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPU8uY29weT1PLnBhdGhTZXBFc2NhcGVkPU8ubW92ZUZpbGU9Ty51bmlmeUZpbGVQYXRoPU8uZ2V0UmVsYXRpdmVQYXRoPU8uZGVsZXRlRm9sZGVyPU8uZGVs''@;'; put 'put ''ZXRlRmlsZT1PLmNyZWF0ZVdyaXRlU3RyZWFtPU8uY3JlYXRlUmVhZFN0cmVhbT1PLmNyZWF0ZUZvbGRlcj1PLmNyZWF0ZUZpbGU9Ty5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9Ty5saXN0U3ViRm9sZGVyc0luRm9sZGVyPU8ubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9Ty5saXN0SW5p''@;'; put 'put ''RmlsZXNJbkZvbGRlcj1PLmxpc3RGaWxlc0luRm9sZGVyPU8ucmVhZEZpbGVCaW5hcnk9Ty5yZWFkRmlsZT1PLmlzRm9sZGVyPU8uZm9sZGVyRXhpc3RzPU8uZmlsZUV4aXN0cz12b2lkIDA7dmFyIEk9UigxNTU5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZmlsZUV4aXN0cyIse2VudW1l''@;'; put 'put ''cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZmlsZUV4aXN0c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZm9sZGVyRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5mb2xkZXJFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8s''@;'; put 'put ''ImlzRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc0ZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywicmVhZEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnJlYWRGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShPLCJyZWFkRmlsZUJpbmFyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucmVhZEZpbGVCaW5hcnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5s''@;'; put 'put ''aXN0RmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywibGlzdEluaUZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxpc3RJbmlGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJsaXN0U2FzRmls''@;'; put 'put ''ZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubGlzdFNhc0ZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxp''@;'; put 'put ''c3RTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShPLCJjcmVhdGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jcmVhdGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjcmVhdGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNyZWF0ZUZv''@;'; put 'put ''bGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY3JlYXRlUmVhZFN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY3JlYXRlUmVhZFN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY3JlYXRlV3JpdGVTdHJlYW0iLHtlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNyZWF0ZVdyaXRlU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJkZWxldGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5kZWxldGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJk''@;'; put 'put ''ZWxldGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmRlbGV0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2V0UmVsYXRpdmVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZXRSZWxhdGl2ZVBhdGh9''@;'; put 'put ''fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInVuaWZ5RmlsZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnVuaWZ5RmlsZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIm1vdmVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gSS5tb3ZlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywicGF0aFNlcEVzY2FwZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnBhdGhTZXBFc2NhcGVkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjb3B5Iix7ZW51bWVyYWJsZTohMCxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jb3B5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJiYXNlNjRFbmNvZGVJbWFnZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmJhc2U2NEVuY29kZUltYWdlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''TywiYmFzZTY0RW5jb2RlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuYmFzZTY0RW5jb2RlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2V0UmVhbFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdldFJlYWxQ''@;'; put 'put ''YXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJpc1Rlc3RGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1Rlc3RGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ0ZXN0RmlsZVJlZ0V4cCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIEkudGVzdEZpbGVSZWdFeHB9fSk7dmFyIGs9UigzOTA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidXBkYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay51cGRhdGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImNyZWF0ZUNz''@;'; put 'put ''diIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsuY3JlYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJyZWFkQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay5yZWFkQ3N2fX0pLEsoUig1NjI2KSxPKX0sMjc3NzooTSxPLFIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm5ld0xpbmU9Ty5jYXBpdGFsaXplRmlyc3RDaGFyPU8uc2FuaXRpemVTcGVjaWFsQ2hhcnM9Ty5wYWRXaXRoTnVtYmVyPXZvaWQgMDt2YXIgej1SKDUzMDYpO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShPLCJwYWRXaXRoTnVtYmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gei5wYWRXaXRoTnVtYmVyfX0pO3ZhciBLPVIoOTI3NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInNhbml0aXplU3BlY2lhbENoYXJzIix7ZW51bWVyYWJsZTohMCxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy5zYW5pdGl6ZVNwZWNpYWxDaGFyc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY2FwaXRhbGl6ZUZpcnN0Q2hhciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsuY2FwaXRhbGl6ZUZpcnN0Q2hhcn19KTt2YXIgST1SKDE2''@;'; put 'put ''MjgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJuZXdMaW5lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5uZXdMaW5lfX0pfSw1MzA2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxP''@;'; put 'put ''LnBhZFdpdGhOdW1iZXI9dm9pZCAwLE8ucGFkV2l0aE51bWJlcj1mdW5jdGlvbihSLHope3JldHVybiB2b2lkIDA9PT16JiYoej0wKSxSPjk/UjoiIi5jb25jYXQoeikuY29uY2F0KFIpfX0sMTYyODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ubmV3TGluZT12b2lkIDAsTy5uZXdMaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIndpbjMyIj09PXoucGxhdGZvcm0/IlxcclxcbiI6IlxcbiJ9fSw5Mjc1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShP''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmNhcGl0YWxpemVGaXJzdENoYXI9Ty5zYW5pdGl6ZVNwZWNpYWxDaGFycz12b2lkIDAsTy5zYW5pdGl6ZVNwZWNpYWxDaGFycz1mdW5jdGlvbihSKXtyZXR1cm4gUi5yZXBsYWNlKC9bXHUwMDFiXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEs''@;'; put 'put ''NH0oPzo7WzAtOV17MCw0fSkqKT9bMC05QS1PUlpjZi1ucXJ5PT48XS9nLCIiKX0sTy5jYXBpdGFsaXplRmlyc3RDaGFyPWZ1bmN0aW9uKFIpe3JldHVybiBSLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK1Iuc2xpY2UoMSl9fSw2NDY3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IHo9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEkpe3JldHVybiBJJiZJLl9fZXNNb2R1bGU/STp7ZGVmYXVsdDpJfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNTcGVjaWFsTWlzc2luZz1PLmNob2ljZVZhbGlkYXRv''@;'; put 'put ''cj1PLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1PLnVybFZhbGlkYXRvcj12b2lkIDA7dmFyIEs9eihSKDQ4MSkpO08udXJsVmFsaWRhdG9yPWZ1bmN0aW9uKEksayl7cmV0dXJuISFLLmRlZmF1bHQuaXNIdHRwVXJpKEkpfHwhIUsuZGVmYXVsdC5pc0h0dHBzVXJpKEkpfHwiIj09PUl8fGt9LE8u''@;'; put 'put ''Y29uZmlybWF0aW9uVmFsaWRhdG9yPWZ1bmN0aW9uKEkpe3JldHVybiEwPT09SXx8ITE9PT1JfSxPLmNob2ljZVZhbGlkYXRvcj1mdW5jdGlvbihJLGssRSl7cmV0dXJuIEk+MCYmSTw9a3x8RX0sTy5pc1NwZWNpYWxNaXNzaW5nPWZ1bmN0aW9uKEkpe3JldHVybigic3RyaW5nIiE9dHlwZW9m''@;'; put 'put ''IEl8fCFJLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoSSl9fSw3NzU3OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2VuZXJhdGVUaW1lc3Rh''@;'; put 'put ''bXA9Ty50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPXZvaWQgMDt2YXIgej1SKDEzMDIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ0aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gei50aW1lc3RhbXBUb1lZWVlNTURESEhN''@;'; put 'put ''TVNTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJnZW5lcmF0ZVRpbWVzdGFtcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHouZ2VuZXJhdGVUaW1lc3RhbXB9fSl9LDEzMDI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZW5lcmF0ZVRpbWVzdGFtcD1PLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9dm9pZCAwO3ZhciB6PVIoMjc3Nyk7Ty50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPWZ1bmN0aW9uKEspe3ZvaWQgMD09PUsmJihLPURhdGUubm93KCkpO3ZhciBJ''@;'; put 'put ''PW5ldyBEYXRlKEspO3JldHVybltJLmdldEZ1bGxZZWFyKCksKDAsei5wYWRXaXRoTnVtYmVyKShJLmdldE1vbnRoKCkrMSksKDAsei5wYWRXaXRoTnVtYmVyKShJLmdldERhdGUoKSldLmpvaW4oIi8iKSsiICIrWygwLHoucGFkV2l0aE51bWJlcikoSS5nZXRIb3VycygpKSwoMCx6LnBhZFdp''@;'; put 'put ''dGhOdW1iZXIpKEkuZ2V0TWludXRlcygpKSwoMCx6LnBhZFdpdGhOdW1iZXIpKEkuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpfSxPLmdlbmVyYXRlVGltZXN0YW1wPWZ1bmN0aW9uKEssSSl7dm9pZCAwPT09SyYmKEs9IiIpO3ZhciBrPW5ldyBEYXRlLEU9W2suZ2V0VVRDRnVsbFllYXIoKSxr''@;'; put 'put ''LmdldFVUQ01vbnRoKCkrMSxrLmdldFVUQ0RhdGUoKSxrLmdldFVUQ0hvdXJzKCksay5nZXRVVENNaW51dGVzKCksay5nZXRVVENTZWNvbmRzKCldO3JldHVybiBFPUUubWFwKGZ1bmN0aW9uKGope3JldHVybigwLHoucGFkV2l0aE51bWJlcikoail9KSxJJiZLJiZJPEUubGVuZ3RoJiZJPj0w''@;'; put 'put ''JiZFLnNwbGljZShJLDAsSyksRS5qb2luKEk/IiI6Syl9fSw4MjM5OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkNvbmZpZ1R5cGVzPXZvaWQgMCwoUj1PLkNvbmZpZ1R5cGVzfHwoTy5Db25maWdU''@;'; put 'put ''eXBlcz17fSkpLkJ1aWxkPSJidWlsZENvbmZpZyIsUi5TZXJ2aWNlPSJzZXJ2aWNlQ29uZmlnIixSLkpvYj0iam9iQ29uZmlnIixSLlRlc3Q9InRlc3RDb25maWciLFIuRG9jPSJkb2NDb25maWciLFIuRGVwbG95PSJkZXBsb3lDb25maWciLFIuU3RyZWFtPSJzdHJlYW1Db25maWciLFIuQXV0''@;'; put 'put ''aD0iYXV0aENvbmZpZyJ9LDI0Mjc6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxODk6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''fSwzNjkyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNjkzOTooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5NZW1i''@;'; put 'put ''ZXJUeXBlPXZvaWQgMCwoUj1PLk1lbWJlclR5cGV8fChPLk1lbWJlclR5cGU9e30pKS5zZXJ2aWNlPSJzZXJ2aWNlIixSLmZpbGU9ImZpbGUiLFIuZm9sZGVyPSJmb2xkZXIifSwzMzI3OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KX0sNTE2NTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM5MDA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5j''@;'; put 'put ''cmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10''@;'; put 'put ''aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6''@;'; put 'put ''ITB9KSxLKFIoODIzOSksTyksSyhSKDI0MjcpLE8pLEsoUigxODkpLE8pLEsoUigzNjkyKSxPKSxLKFIoNjkzOSksTyksSyhSKDMzMjcpLE8pLEsoUig1MTY1KSxPKSxLKFIoNDA2OSksTyksSyhSKDg5MzIpLE8pLEsoUig0KSxPKSxLKFIoMjAxNSksTyksSyhSKDg1MTUpLE8pLEsoUig1MzEz''@;'; put 'put ''KSxPKSxLKFIoODk3OSksTyl9LDQwNjk6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNNYWNyb1ZhcnM9dm9pZCAwLE8uaXNNYWNyb1ZhcnM9ZnVuY3Rpb24oUil7cmV0dXJuIFImJiJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgUi5tYWNyb1ZhcnMmJiFBcnJheS5pc0FycmF5KFIubWFjcm9WYXJzKX19LDg5MzI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSO09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBU0pzRmlsZVR5cGU9dm9pZCAwLChSPU8uU0FTSnNGaWxlVHlwZXx8KE8uU0FTSnNGaWxlVHlwZT17fSkpLnNlcnZpY2U9IlNlcnZpY2UiLFIuam9iPSJKb2IiLFIudGVzdD0iVGVzdCIsUi5maWxlPSJGaWxlIn0sMjAxNToo''@;'; put 'put ''TSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTU6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2VydmVyVHlwZT12''@;'; put 'put ''b2lkIDAsKFI9Ty5TZXJ2ZXJUeXBlfHwoTy5TZXJ2ZXJUeXBlPXt9KSkuU2FzVml5YT0iU0FTVklZQSIsUi5TYXM5PSJTQVM5IixSLlNhc2pzPSJTQVNKUyJ9LDUzMTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''fSw4OTc5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gej1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihqKXtmb3IodmFyIFYsQj0xLFk9YXJndW1lbnRzLmxlbmd0aDtCPFk7QisrKWZvcih2YXIgWCBpbiBW''@;'; put 'put ''PWFyZ3VtZW50c1tCXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVixYKSYmKGpbWF09VltYXSk7cmV0dXJuIGp9LHouYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5UYXJnZXQ9dm9p''@;'; put 'put ''ZCAwO3ZhciBLPVIoODIzOSksST1SKDg1MTUpLGs9Uig2NzgxKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaihWLEIpe3ZhciBZPXRoaXM7dm9pZCAwPT09QiYmKEI9e30pLHRoaXMuX3NlcnZlclR5cGU9SS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsdGhpcy5nZXRDb25maWc9ZnVuY3Rpb24oWCxVKXty''@;'; put 'put ''ZXR1cm4geih6KHt9LFkuX2NvbmZpZ1tYXXx8e30pLFVbWF0pfTt0cnl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldDogSW5wdXQgSlNPTiBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTt0aGlzLl9jb25maWc9Qix0aGlzLl9uYW1lPSgwLGsudmFsaWRhdGVUYXJnZXROYW1l''@;'; put 'put ''KShWLm5hbWUpLHRoaXMuX3NlcnZlclVybD0oMCxrLnZhbGlkYXRlU2VydmVyVXJsKShWLnNlcnZlclVybCksdGhpcy5fc2VydmVyVHlwZT0oMCxrLnZhbGlkYXRlU2VydmVyVHlwZSkoVi5zZXJ2ZXJUeXBlKSx0aGlzLl9odHRwc0FnZW50T3B0aW9ucz0oMCxrLnZhbGlkYXRlSHR0cHNBZ2Vu''@;'; put 'put ''dE9wdGlvbnMpKFYuaHR0cHNBZ2VudE9wdGlvbnMpLHRoaXMuX2FwcExvYz0oMCxrLnZhbGlkYXRlQXBwTG9jKShWLmFwcExvYyksdGhpcy5fY29udGV4dE5hbWU9KDAsay52YWxpZGF0ZUNvbnRleHROYW1lKShWLmNvbnRleHROYW1lLHRoaXMuX3NlcnZlclR5cGUpLHRoaXMuX3NlcnZlck5h''@;'; put 'put ''bWU9KDAsay52YWxpZGF0ZVNlcnZlck5hbWUpKFYuc2VydmVyTmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zeW5jRm9sZGVyPSgwLGsudmFsaWRhdGVTeW5jRm9sZGVyKShWLnN5bmNGb2xkZXIpLHRoaXMuX3JlcG9zaXRvcnlOYW1lPSgwLGsudmFsaWRhdGVSZXBvc2l0b3J5TmFtZSko''@;'; put 'put ''Vi5yZXBvc2l0b3J5TmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSxWLmRvY0NvbmZpZyYmKHRoaXMuX2RvY0NvbmZpZz0oMCxrLnZhbGlkYXRlRG9jQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkRvYyxWKSkpLFYuYXV0aENvbmZpZyYmKHRoaXMuX2F1dGhDb25maWc9KDAsay52''@;'; put 'put ''YWxpZGF0ZUF1dGhDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuQXV0aCxWKSkpLFYuYXV0aENvbmZpZ1NhczkmJih0aGlzLl9hdXRoQ29uZmlnU2FzOT0oMCxrLnZhbGlkYXRlQXV0aENvbmZpZ1NhczkpKFYuYXV0aENvbmZpZ1NhczkpKSxWLmJ1aWxkQ29uZmlnJiYodGhp''@;'; put 'put ''cy5fYnVpbGRDb25maWc9KDAsay52YWxpZGF0ZUJ1aWxkQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkJ1aWxkLFYpLHRoaXMuX25hbWUpKSx0aGlzLl9kZXBsb3lDb25maWc9KDAsay52YWxpZGF0ZURlcGxveUNvbmZpZykoVi5kZXBsb3lDb25maWc/dGhpcy5nZXRDb25m''@;'; put 'put ''aWcoSy5Db25maWdUeXBlcy5EZXBsb3ksVik6e2RlcGxveVNlcnZpY2VQYWNrOiEwLGRlcGxveVNjcmlwdHM6W119KSxWLnNlcnZpY2VDb25maWcmJih0aGlzLl9zZXJ2aWNlQ29uZmlnPSgwLGsudmFsaWRhdGVTZXJ2aWNlQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLlNl''@;'; put 'put ''cnZpY2UsVikpKSxWLmpvYkNvbmZpZyYmKHRoaXMuX2pvYkNvbmZpZz0oMCxrLnZhbGlkYXRlSm9iQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkpvYixWKSkpLFYuc3RyZWFtQ29uZmlnJiYodGhpcy5fc3RyZWFtQ29uZmlnPSgwLGsudmFsaWRhdGVTdHJlYW1Db25maWcp''@;'; put 'put ''KHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuU3RyZWFtLFYpKSksVi50ZXN0Q29uZmlnJiYodGhpcy5fdGVzdENvbmZpZz0oMCxrLnZhbGlkYXRlVGVzdENvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5UZXN0LFYpKSksVi5tYWNyb0ZvbGRlcnMmJlYubWFjcm9Gb2xk''@;'; put 'put ''ZXJzLmxlbmd0aCYmKHRoaXMuX21hY3JvRm9sZGVycz1WLm1hY3JvRm9sZGVycyksVi5wcm9ncmFtRm9sZGVycyYmVi5wcm9ncmFtRm9sZGVycy5sZW5ndGgmJih0aGlzLl9wcm9ncmFtRm9sZGVycz1WLnByb2dyYW1Gb2xkZXJzKSxWLmJpbmFyeUZvbGRlcnMmJlYuYmluYXJ5Rm9sZGVycy5s''@;'; put 'put ''ZW5ndGgmJih0aGlzLl9iaW5hcnlGb2xkZXJzPVYuYmluYXJ5Rm9sZGVycyksVi5zeW5jRGlyZWN0b3JpZXMmJlYuc3luY0RpcmVjdG9yaWVzLmxlbmd0aCYmKHRoaXMuX3N5bmNEaXJlY3Rvcmllcz0oMCxrLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzKShWLnN5bmNEaXJlY3RvcmllcykpfWNh''@;'; put 'put ''dGNoKFgpe3Rocm93IG5ldyBFcnJvcigiRXJyb3IgcGFyc2luZyB0YXJnZXQ6ICIuY29uY2F0KFgubWVzc2FnZSkpfX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LGVudW1lcmFibGU6ITEs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJzZXJ2ZXJVcmwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmVyVXJsfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3Rv''@;'; put 'put ''dHlwZSwic2VydmVyVHlwZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXJ2ZXJUeXBlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiaHR0cHNBZ2VudE9wdGlvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5faHR0cHNBZ2VudE9wdGlvbnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJhcHBMb2MiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwTG9jfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJs''@;'; put 'put ''ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiZG9jQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RvY0NvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImF1dGhD''@;'; put 'put ''b25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0aENvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImF1dGhDb25maWdTYXM5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dGhD''@;'; put 'put ''b25maWdTYXM5fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiYnVpbGRDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVpbGRDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJkZXBsb3lDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVwbG95Q29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic2Vydmlj''@;'; put 'put ''ZUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXJ2aWNlQ29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiam9iQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2pvYkNv''@;'; put 'put ''bmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInN0cmVhbUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJlYW1Db25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJtYWNyb0ZvbGRlcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFjcm9Gb2xkZXJzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwicHJvZ3JhbUZv''@;'; put 'put ''bGRlcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJvZ3JhbUZvbGRlcnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJiaW5hcnlGb2xkZXJzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jp''@;'; put 'put ''bmFyeUZvbGRlcnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJjb250ZXh0TmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZXh0TmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9''@;'; put 'put ''KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInNlcnZlck5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmVyTmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInJlcG9zaXRv''@;'; put 'put ''cnlOYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlOYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwidGVzdENvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZXN0''@;'; put 'put ''Q29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic3luY0ZvbGRlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zeW5jRm9sZGVyfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic3luY0RpcmVjdG9yaWVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N5bmNEaXJlY3Rvcmllc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxqLnByb3RvdHlwZS50b0pzb249ZnVuY3Rpb24oVil7dmFyIEIsWSxY''@;'; put 'put ''O3ZvaWQgMD09PVYmJihWPSEwKTt2YXIgVT17bmFtZTp0aGlzLm5hbWUsc2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHNlcnZlclR5cGU6dGhpcy5zZXJ2ZXJUeXBlLGh0dHBzQWdlbnRPcHRpb25zOnRoaXMuaHR0cHNBZ2VudE9wdGlvbnMsYXBwTG9jOnRoaXMuYXBwTG9jLGRvY0NvbmZpZzp0''@;'; put 'put ''aGlzLmRvY0NvbmZpZyxkZXBsb3lDb25maWc6dGhpcy5kZXBsb3lDb25maWd9O3JldHVybiEobnVsbD09PShCPXRoaXMubWFjcm9Gb2xkZXJzKXx8dm9pZCAwPT09QikmJkIubGVuZ3RoJiYoVS5tYWNyb0ZvbGRlcnM9dGhpcy5tYWNyb0ZvbGRlcnMpLCEobnVsbD09PShZPXRoaXMucHJvZ3Jh''@;'; put 'put ''bUZvbGRlcnMpfHx2b2lkIDA9PT1ZKSYmWS5sZW5ndGgmJihVLnByb2dyYW1Gb2xkZXJzPXRoaXMucHJvZ3JhbUZvbGRlcnMpLCEobnVsbD09PShYPXRoaXMuYmluYXJ5Rm9sZGVycyl8fHZvaWQgMD09PVgpJiZYLmxlbmd0aCYmKFUuYmluYXJ5Rm9sZGVycz10aGlzLmJpbmFyeUZvbGRlcnMp''@;'; put 'put ''LHRoaXMuYXV0aENvbmZpZyYmKFUuYXV0aENvbmZpZz10aGlzLmF1dGhDb25maWcpLHRoaXMuYXV0aENvbmZpZ1NhczkmJihVLmF1dGhDb25maWdTYXM5PXRoaXMuYXV0aENvbmZpZ1NhczkpLHRoaXMuc3luY0RpcmVjdG9yaWVzP1Uuc3luY0RpcmVjdG9yaWVzPXRoaXMuc3luY0RpcmVjdG9y''@;'; put 'put ''aWVzOlYmJihVLnN5bmNEaXJlY3Rvcmllcz1bXSksdGhpcy5idWlsZENvbmZpZz9VLmJ1aWxkQ29uZmlnPXRoaXMuYnVpbGRDb25maWc6ViYmKFUuYnVpbGRDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLGJ1aWxkT3V0cHV0RmlsZU5hbWU6IiIuY29uY2F0KHRoaXMubmFt''@;'; put 'put ''ZSwiLnNhcyIpLGJ1aWxkT3V0cHV0Rm9sZGVyOiJzYXNqc2J1aWxkIixidWlsZFJlc3VsdHNGb2xkZXI6InNhc2pzcmVzdWx0cyIsbWFjcm9WYXJzOnt9fSksdGhpcy5qb2JDb25maWc/VS5qb2JDb25maWc9dGhpcy5qb2JDb25maWc6ViYmKFUuam9iQ29uZmlnPXtqb2JGb2xkZXJzOltdLGlu''@;'; put 'put ''aXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fX0pLHRoaXMuc2VydmljZUNvbmZpZz9VLnNlcnZpY2VDb25maWc9dGhpcy5zZXJ2aWNlQ29uZmlnOlYmJihVLnNlcnZpY2VDb25maWc9e3NlcnZpY2VGb2xkZXJzOltdLGluaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIi''@;'; put 'put ''LG1hY3JvVmFyczp7fX0pLHRoaXMuc3RyZWFtQ29uZmlnP1Uuc3RyZWFtQ29uZmlnPXRoaXMuc3RyZWFtQ29uZmlnOlYmJihVLnN0cmVhbUNvbmZpZz17c3RyZWFtV2ViRm9sZGVyOiIiLHN0cmVhbVdlYjohMSx3ZWJTb3VyY2VQYXRoOiIiLHN0cmVhbVNlcnZpY2VOYW1lOiIiLGFzc2V0UGF0''@;'; put 'put ''aHM6W119KSx0aGlzLnRlc3RDb25maWc/VS50ZXN0Q29uZmlnPXRoaXMudGVzdENvbmZpZzpWJiYoVS50ZXN0Q29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e30sdGVzdFNldFVwOiIiLHRlc3RUZWFyRG93bjoiIn0pLHRoaXMuc2VydmVyVHlwZT09PUku''@;'; put 'put ''U2VydmVyVHlwZS5TYXNWaXlhP1UuY29udGV4dE5hbWU9dGhpcy5jb250ZXh0TmFtZTp0aGlzLnNlcnZlclR5cGU9PT1JLlNlcnZlclR5cGUuU2FzOSYmKFUuc2VydmVyTmFtZT10aGlzLnNlcnZlck5hbWUsVS5yZXBvc2l0b3J5TmFtZT10aGlzLnJlcG9zaXRvcnlOYW1lKSxVfSxqfSgpO08u''@;'; put 'put ''VGFyZ2V0PUV9LDY3ODE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oayl7cmV0dXJuIGsmJmsuX19lc01vZHVsZT9rOntkZWZhdWx0Omt9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksTy52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1PLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9Ty52YWxpZGF0ZVN5bmNGb2xkZXI9Ty52YWxpZGF0ZVNlcnZlck5hbWU9Ty52YWxpZGF0ZUNvbnRleHROYW1lPU8udmFsaWRhdGVTdHJlYW1Db25maWc9Ty52YWxpZGF0ZURlcGxv''@;'; put 'put ''eUNvbmZpZz1PLnZhbGlkYXRlSm9iQ29uZmlnPU8udmFsaWRhdGVUZXN0Q29uZmlnPU8udmFsaWRhdGVTZXJ2aWNlQ29uZmlnPU8udmFsaWRhdGVCdWlsZENvbmZpZz1PLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9Ty52YWxpZGF0ZUF1dGhDb25maWc9Ty52YWxpZGF0ZURvY0NvbmZpZz1PLnZh''@;'; put 'put ''bGlkYXRlQXBwTG9jPU8udmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucz1PLnZhbGlkYXRlU2VydmVyVXJsPU8udmFsaWRhdGVUYXJnZXROYW1lPU8udmFsaWRhdGVTZXJ2ZXJUeXBlPXZvaWQgMDt2YXIgSz16KFIoNDgxKSksST1SKDM5MDApO08udmFsaWRhdGVTZXJ2ZXJUeXBlPWZ1bmN0aW9u''@;'; put 'put ''KGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgdHlwZTogYHNlcnZlclR5cGVgIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihrIT09SS5TZXJ2ZXJUeXBlLlNhczkmJmshPT1JLlNlcnZlclR5cGUuU2FzVml5YSYmayE9PUkuU2VydmVyVHlwZS5TYXNq''@;'; put 'put ''cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIHR5cGU6IFN1cHBvcnRlZCB2YWx1ZXMgZm9yICBgc2VydmVyVHlwZWAgYXJlICIuY29uY2F0KEkuU2VydmVyVHlwZS5TYXNWaXlhLCIsICIpLmNvbmNhdChJLlNlcnZlclR5cGUuU2FzOSwiIGFuZCAiKS5jb25jYXQoSS5TZXJ2ZXJU''@;'; put 'put ''eXBlLlNhc2pzLCIuIikpO3JldHVybiBrfSxPLnZhbGlkYXRlVGFyZ2V0TmFtZT1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKGsudHJpbSgpLmluY2x1''@;'; put 'put ''ZGVzKCIgIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGluY2x1ZGUgc3BhY2VzLiIpO2lmKCEvXlthLXpBLVowLTlcLV0rJC9pLnRlc3QoaykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2FuIG9ubHkg''@;'; put 'put ''Y29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgZGFzaGVzLiIpO3JldHVybiBrfSxPLnZhbGlkYXRlU2VydmVyVXJsPWZ1bmN0aW9uKGspe2lmKG51bGw9PWsmJihrPSIiKSwiIiE9PWsmJiFLLmRlZmF1bHQuaXNIdHRwVXJpKGspJiYhSy5kZWZhdWx0LmlzSHR0cHNVcmkoaykp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciBVUkw6IGBzZXJ2ZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQpLiIpO3JldHVybiBrfSxPLnZhbGlkYXRl''@;'; put 'put ''SHR0cHNBZ2VudE9wdGlvbnM9ZnVuY3Rpb24oayl7aWYoayl7aWYoIm9iamVjdCIhPXR5cGVvZiBrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGFuIG9iamVjdCBvZiBgSHR0cHNBZ2VudE9w''@;'; put 'put ''dGlvbnNgIik7aWYobnVsbD09ay5hbGxvd0luc2VjdXJlUmVxdWVzdHMpay5hbGxvd0luc2VjdXJlUmVxdWVzdHM9ITE7ZWxzZSBpZigiYm9vbGVhbiIhPXR5cGVvZiBrLmFsbG93SW5zZWN1cmVSZXF1ZXN0cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0''@;'; put 'put ''aW9ucy5hbGxvd0luc2VjdXJlUmVxdWVzdHNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYSBib29sZWFuIik7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBrLmNhUGF0aCYmKGsuY2FQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBrLmtleVBhdGgmJihrLmtleVBhdGg9dm9pZCAw''@;'; put 'put ''KSwic3RyaW5nIiE9dHlwZW9mIGsuY2VydFBhdGgmJihrLmNlcnRQYXRoPXZvaWQgMCksa319LE8udmFsaWRhdGVBcHBMb2M9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVu''@;'; put 'put ''ZGVmaW5lZC4iKTtpZighay5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgbXVzdCBzdGFydCB3aXRoIGEgYC9gLiIpO3JldHVybiBrfSxPLnZhbGlkYXRlRG9jQ29uZmlnPWZ1bmN0aW9uKGspe2lmKGt8fChrPXt9KSwiYm9v''@;'; put 'put ''bGVhbiIhPXR5cGVvZiBrLmRpc3BsYXlNYWNyb0NvcmUmJihrLmRpc3BsYXlNYWNyb0NvcmU9dm9pZCAwKSwiYm9vbGVhbiIhPXR5cGVvZiBrLmVuYWJsZUxpbmVhZ2UmJihrLmVuYWJsZUxpbmVhZ2U9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIGsub3V0RGlyZWN0b3J5JiYoay5vdXREaXJl''@;'; put 'put ''Y3Rvcnk9dm9pZCAwKSwic3RyaW5nIj09dHlwZW9mIGsuZGF0YUNvbnRyb2xsZXJVcmwpe2lmKCIiIT09ay5kYXRhQ29udHJvbGxlclVybCYmIUsuZGVmYXVsdC5pc0h0dHBVcmkoay5kYXRhQ29udHJvbGxlclVybCkmJiFLLmRlZmF1bHQuaXNIdHRwc1VyaShrLmRhdGFDb250cm9sbGVyVXJs''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRGF0YSBDb250cm9sbGVyIFVybDogYGRhdGFDb250cm9sbGVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKX1l''@;'; put 'put ''bHNlIGsuZGF0YUNvbnRyb2xsZXJVcmw9dm9pZCAwO3JldHVybiBrfSxPLnZhbGlkYXRlQXV0aENvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrfSxP''@;'; put 'put ''LnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighay51c2VyTmFtZXx8IWsucGFzc3dvcmQpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiB1c2VyTmFtZSBhbmQgcGFzc3dvcmQgY2FuIG5vdCBiZSBlbXB0eSIpO3JldHVybiBrfSxPLnZhbGlkYXRlQnVpbGRDb25maWc9ZnVuY3Rpb24oayxFKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYnVpbGQgY29uZmln''@;'; put 'put ''OiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5idWlsZFJlc3VsdHNGb2xkZXJ8fChrLmJ1aWxkUmVzdWx0c0ZvbGRlcj0ic2FzanNyZXN1bHRzIiksay5idWlsZE91dHB1dEZvbGRlcnx8KGsuYnVpbGRPdXRwdXRGb2xkZXI9InNhc2pzYnVpbGQiKSxrLmJ1''@;'; put 'put ''aWxkT3V0cHV0RmlsZU5hbWV8fChrLmJ1aWxkT3V0cHV0RmlsZU5hbWU9IiIuY29uY2F0KEUsIi5zYXMiKSksay5pbml0UHJvZ3JhbXx8KGsuaW5pdFByb2dyYW09IiIpLGsudGVybVByb2dyYW18fChrLnRlcm1Qcm9ncmFtPSIiKSxrLm1hY3JvVmFyc3x8KGsubWFjcm9WYXJzPXt9KSxrfSxP''@;'; put 'put ''LnZhbGlkYXRlU2VydmljZUNvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmljZSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmluaXRQcm9ncmFtfHwoay5pbml0UHJvZ3JhbT0iIiksay50ZXJt''@;'; put 'put ''UHJvZ3JhbXx8KGsudGVybVByb2dyYW09IiIpLGsuc2VydmljZUZvbGRlcnN8fChrLnNlcnZpY2VGb2xkZXJzPVtdKSxrLm1hY3JvVmFyc3x8KGsubWFjcm9WYXJzPXt9KSxrfSxPLnZhbGlkYXRlVGVzdENvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQg''@;'; put 'put ''dGVzdCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmluaXRQcm9ncmFtfHwoay5pbml0UHJvZ3JhbT0iIiksay50ZXJtUHJvZ3JhbXx8KGsudGVybVByb2dyYW09IiIpLGsubWFjcm9WYXJzfHwoay5tYWNyb1ZhcnM9e30pLGsudGVzdFNldFVw''@;'; put 'put ''fHwoay50ZXN0U2V0VXA9IiIpLGsudGVzdFRlYXJEb3dufHwoay50ZXN0VGVhckRvd249IiIpLGt9LE8udmFsaWRhdGVKb2JDb25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGpvYiBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVk''@;'; put 'put ''LiIpO3JldHVybiBrLmluaXRQcm9ncmFtfHwoay5pbml0UHJvZ3JhbT0iIiksay50ZXJtUHJvZ3JhbXx8KGsudGVybVByb2dyYW09IiIpLGsuam9iRm9sZGVyc3x8KGsuam9iRm9sZGVycz1bXSksay5tYWNyb1ZhcnN8fChrLm1hY3JvVmFycz17fSksa30sTy52YWxpZGF0ZURlcGxveUNvbmZp''@;'; put 'put ''Zz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGVwbG95IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGsuZGVwbG95U2VydmljZVBhY2s9ISFrLmRlcGxveVNlcnZpY2VQYWNrLGsuZGVwbG95U2NyaXB0c3x8KGsu''@;'; put 'put ''ZGVwbG95U2NyaXB0cz1bXSksa30sTy52YWxpZGF0ZVN0cmVhbUNvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoITAhPT1rLnN0cmVhbVdlYiYmITEhPT1r''@;'; put 'put ''LnN0cmVhbVdlYil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYmAgY2Fubm90IGJlIGEgbm9uLWJvb2xlYW4gdmFsdWUuIik7aWYoay5zdHJlYW1XZWImJiFrLnN0cmVhbVdlYkZvbGRlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNv''@;'; put 'put ''bmZpZzogYHN0cmVhbVdlYkZvbGRlcmAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGBzdHJlYW1XZWJgIGlzIHRydWUuIik7aWYoay5zdHJlYW1XZWImJiFrLndlYlNvdXJjZVBhdGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGB3ZWJT''@;'; put 'put ''b3VyY2VQYXRoYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLnN0cmVhbUxvZ28mJiJzdHJpbmciIT10eXBlb2Ygay5zdHJlYW1Mb2dvJiYoay5zdHJlYW1Mb2dvPXZvaWQgMCksay5hc3NldFBhdGhzfHwoay5hc3NldFBhdGhzPVtdKSxrLnN0cmVhbVNl''@;'; put 'put ''cnZpY2VOYW1lfHwoay5zdHJlYW1TZXJ2aWNlTmFtZT0iY2xpY2ttZSIpLGt9LE8udmFsaWRhdGVDb250ZXh0TmFtZT1mdW5jdGlvbihrLEUpe3JldHVybiBFIT09SS5TZXJ2ZXJUeXBlLlNhc1ZpeWF8fGs/azoiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0In0sTy52YWxpZGF0''@;'; put 'put ''ZVNlcnZlck5hbWU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gRSE9PUkuU2VydmVyVHlwZS5TYXM5fHxrP2s6IlNBU0FwcCJ9LE8udmFsaWRhdGVTeW5jRm9sZGVyPWZ1bmN0aW9uKGspe2lmKCJzdHJpbmciPT10eXBlb2YgayYmaylyZXR1cm4ga30sTy52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPWZ1''@;'; put 'put ''bmN0aW9uKGssRSl7cmV0dXJuIEUhPT1JLlNlcnZlclR5cGUuU2FzOXx8az9rOiJGb3VuZGF0aW9uIn0sTy52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yaWVzIGNvbmZpZzogSlNPTiBjYW5ub3Qg''@;'; put 'put ''YmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGsuZm9yRWFjaChmdW5jdGlvbihFKXtpZighRS5sb2NhbHx8IUUucmVtb3RlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzeW5jRGlyZWN0b3J5IGNvbmZpZzogdmFsdWVzIG9mIHByb3BlcnR5ICdsb2NhbCcgYW5kICdyZW1vdGUgY2Fu''@;'; put 'put ''IG5vdCBiZSBlbXB0eSBvciB1bmRlZmluZWQiKX0pLGt9fSwyOTI3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJkUuX19lc01vZHVsZT9FOntkZWZhdWx0''@;'; put 'put ''OkV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kZWNvZGVGcm9tQmFzZTY0PU8uZW5jb2RlVG9CYXNlNjQ9dm9pZCAwO3ZhciBJPUsoUig1ODM1KSksaz0ie3Nhc2pzX2VuY29kZWR9IjtPLmVuY29kZVRvQmFzZTY0PWZ1bmN0aW9uKEUpe3Zh''@;'; put 'put ''ciBqPUkuZGVmYXVsdC5yYW5kb21CeXRlcygxMDApLnRvU3RyaW5nKCJoZXgiKSxWPXouZnJvbShqK0UpLnRvU3RyaW5nKCJiYXNlNjQiKTtyZXR1cm4gaytWfSxPLmRlY29kZUZyb21CYXNlNjQ9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuc3RhcnRzV2l0aChrKT8oRT1FLnJlcGxhY2UoL157c2Fz''@;'; put 'put ''anNfZW5jb2RlZH0vLCIiKSx6LmZyb20oRSwiYmFzZTY0IikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMjAwKSk6RX19LDU4MTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5ieXRlc1RvU2l6ZT12b2lkIDAsTy5i''@;'; put 'put ''eXRlc1RvU2l6ZT1mdW5jdGlvbihSLHosSyl7aWYodm9pZCAwPT09eiYmKHo9MSksdm9pZCAwPT09SyYmKEs9MTA5OTUxMTYyNzc3NiksMD09PVIpcmV0dXJuIjAgQiI7Uj1SPks/SzpSO3ZhciBJPXo8MD8wOnosaz1NYXRoLmZsb29yKE1hdGgubG9nKFIpL01hdGgubG9nKDEwMjQpKTtyZXR1''@;'; put 'put ''cm4oUi9NYXRoLnBvdygxMDI0LGspKS50b0ZpeGVkKEkpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW2tdfX0sODY1MzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jaHVuaz12b2lkIDAsTy5jaHVu''@;'; put 'put ''az1mdW5jdGlvbihSLHope3JldHVybiB2b2lkIDA9PT16JiYoej0yMjApLFIubGVuZ3RoPD16P1tSXTooUi5tYXRjaChuZXcgUmVnRXhwKCIuezEsIit6KyJ9IiwiZyIpKXx8W10pLmZpbHRlcihmdW5jdGlvbihLKXtyZXR1cm4hIUt9KX19LDY0NTc6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIFI9dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKEssSSl7dmFyIGs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmS1tTeW1ib2wuaXRlcmF0b3JdO2lmKCFrKXJldHVybiBLO3ZhciBFLGosVj1rLmNhbGwoSyksQj1bXTt0cnl7Zm9yKDsodm9pZCAwPT09SXx8SS0tID4wKSYm''@;'; put 'put ''IShFPVYubmV4dCgpKS5kb25lOylCLnB1c2goRS52YWx1ZSl9Y2F0Y2goWSl7aj17ZXJyb3I6WX19ZmluYWxseXt0cnl7RSYmIUUuZG9uZSYmKGs9Vi5yZXR1cm4pJiZrLmNhbGwoVil9ZmluYWxseXtpZihqKXRocm93IGouZXJyb3J9fXJldHVybiBCfSx6PXRoaXMmJnRoaXMuX19zcHJlYWRB''@;'; put 'put ''cnJheXx8ZnVuY3Rpb24oSyxJLGspe2lmKGt8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgRSxqPTAsVj1JLmxlbmd0aDtqPFY7aisrKSFFJiZqIGluIEl8fChFfHwoRT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChJLDAsaikpLEVbal09SVtqXSk7cmV0dXJuIEsuY29uY2F0KEV8''@;'; put 'put ''fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEkpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZGlmZj12b2lkIDAsTy5kaWZmPWZ1bmN0aW9uKEssSSl7dmFyIGs9Sy5maWx0ZXIoZnVuY3Rpb24oail7cmV0dXJuIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBqPyFKU09OLnN0cmluZ2lmeShJKS5pbmNsdWRlcyhKU09OLnN0cmluZ2lmeShqKSk6IUkuaW5jbHVkZXMoail9KSxFPUkuZmlsdGVyKGZ1bmN0aW9uKGope3JldHVybiJvYmplY3QiPT10eXBlb2Ygaj8hSlNPTi5zdHJpbmdpZnkoSykuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkoaikpOiFL''@;'; put 'put ''LmluY2x1ZGVzKGopfSk7cmV0dXJuIHooeihbXSxSKGspLCExKSxSKEUpLCExKX19LDE1Mjk6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0RXhlY3V0b3JQYXRoPXZvaWQgMDt2YXIgUj17U0FTVklZQToi''@;'; put 'put ''L1NBU0pvYkV4ZWN1dGlvbiIsU0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8ifTtPLmdldEV4ZWN1dG9yUGF0aD1mdW5jdGlvbih6KXtyZXR1cm4gej8oej16LnRvVXBwZXJDYXNlKCksUlt6XXx8IiIpOiIifX0sMzMxNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldFRyZWVFeGFtcGxlPU8uaXNGaWxlVHJlZT12b2lkIDA7dmFyIHo9UigzOTAwKTtPLmlzRmlsZVRyZWU9ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJkUubWVtYmVycyYmQXJyYXkuaXNBcnJheShFLm1lbWJlcnMpJiYwPT09RS5tZW1i''@;'; put 'put ''ZXJzLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4hSyhqKSYmIUkoaikmJiFrKGopfSkubGVuZ3RofTt2YXIgSz1mdW5jdGlvbihFKXtyZXR1cm4gRSYmInN0cmluZyI9PXR5cGVvZiBFLm5hbWUmJkUudHlwZT09PXouTWVtYmVyVHlwZS5zZXJ2aWNlJiYic3RyaW5nIj09dHlwZW9mIEUuY29k''@;'; put 'put ''ZX0sST1mdW5jdGlvbihFKXtyZXR1cm4gRSYmInN0cmluZyI9PXR5cGVvZiBFLm5hbWUmJkUudHlwZT09PXouTWVtYmVyVHlwZS5maWxlJiYic3RyaW5nIj09dHlwZW9mIEUuY29kZX0saz1mdW5jdGlvbihFKXtyZXR1cm4gRSYmInN0cmluZyI9PXR5cGVvZiBFLm5hbWUmJkUudHlwZT09PXou''@;'; put 'put ''TWVtYmVyVHlwZS5mb2xkZXImJkUubWVtYmVycyYmQXJyYXkuaXNBcnJheShFLm1lbWJlcnMpJiYwPT09RS5tZW1iZXJzLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4hSyhqKSYmIUkoaikmJiFrKGopfSkubGVuZ3RofTtPLmdldFRyZWVFeGFtcGxlPWZ1bmN0aW9uKCl7cmV0dXJue21lbWJl''@;'; put 'put ''cnM6W3tuYW1lOiJqb2JzIix0eXBlOnouTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6ImV4dHJhY3QiLHR5cGU6ei5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToibWFrZWRhdGExIix0eXBlOnouTWVtYmVyVHlwZS5zZXJ2aWNlLGNvZGU6IiVwdXQgSGVsbG8gV29y''@;'; put 'put ''bGQhOyJ9XX1dfV19fX0sNjI2NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihYLFUscSxlZSl7dm9pZCAwPT09ZWUmJihlZT1xKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCxlZSx7''@;'; put 'put ''ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVVtxXX19KX06ZnVuY3Rpb24oWCxVLHEsZWUpe3ZvaWQgMD09PWVlJiYoZWU9cSksWFtlZV09VVtxXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKFgsVSl7Zm9yKHZhciBxIGluIFgpImRlZmF1bHQiPT09''@;'; put 'put ''cXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUscSl8fHooVSxYLHEpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jaHVuaz1PLmRpZmY9Ty5ieXRlc1RvU2l6ZT1PLmdldEV4ZWN1dG9yUGF0aD1PLmRlY29kZUZyb21C''@;'; put 'put ''YXNlNjQ9Ty5lbmNvZGVUb0Jhc2U2ND1PLnVybE9yaWdpbj1PLmdlbmVyYXRlUGF0aEZvclNhcz1PLmdldE1hY3Jvc1BhdGg9Ty5lc2NhcGVXaW5TbGFzaGVzPU8uaXNMaW51eD1PLmlzV2luZG93cz1PLnVuaXFBcnJheT1PLmFzeW5jRm9yRWFjaD1PLnV1aWR2ND12b2lkIDA7dmFyIEk9Uigx''@;'; put 'put ''MTMxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidXVpZHY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS51dWlkdjR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImFzeW5jRm9yRWFjaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEku''@;'; put 'put ''YXN5bmNGb3JFYWNofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ1bmlxQXJyYXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnVuaXFBcnJheX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiaXNXaW5kb3dzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gSS5pc1dpbmRvd3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImlzTGludXgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmlzTGludXh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImVzY2FwZVdpblNsYXNoZXMiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmVzY2FwZVdpblNsYXNoZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdldE1hY3Jvc1BhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdldE1hY3Jvc1BhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KE8sImdlbmVyYXRlUGF0aEZvclNhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2VuZXJhdGVQYXRoRm9yU2FzfX0pLEsoUigzMzE2KSxPKTt2YXIgaz1SKDk2NTIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ1cmxPcmlnaW4iLHtlbnVtZXJhYmxlOiEwLGdl''@;'; put 'put ''dDpmdW5jdGlvbigpe3JldHVybiBrLnVybE9yaWdpbn19KTt2YXIgRT1SKDI5MjcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJlbmNvZGVUb0Jhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuZW5jb2RlVG9CYXNlNjR9fSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KE8sImRlY29kZUZyb21CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmRlY29kZUZyb21CYXNlNjR9fSk7dmFyIGo9UigxNTI5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2V0RXhlY3V0b3JQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gai5nZXRFeGVjdXRvclBhdGh9fSk7dmFyIFY9Uig1ODEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJieXRlc1RvU2l6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFYuYnl0ZXNUb1NpemV9fSk7dmFyIEI9Uig2NDU3KTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoTywiZGlmZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuZGlmZn19KTt2YXIgWT1SKDg2NTMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjaHVuayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFkuY2h1bmt9fSl9LDk2NTI6''@;'; put 'put ''KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udXJsT3JpZ2luPXZvaWQgMCxPLnVybE9yaWdpbj1mdW5jdGlvbihSKXtpZigiIj09PVIpcmV0dXJuIFI7dmFyIHo7dHJ5e3o9bmV3IFVSTChSKS5vcmlnaW59Y2F0''@;'; put 'put ''Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVSTC4iKX1yZXR1cm4gen19LDExMzE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1''@;'; put 'put ''bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShvZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0ZShZLnRocm93KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFyIHNlO29lLmRvbmU/WChvZS52YWx1ZSk6KHNlPW9l''@;'; put 'put ''LnZhbHVlLHNlIGluc3RhbmNlb2YgQj9zZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkpLnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEIsWSxYLFUscT17bGFiZWw6MCxz''@;'; put 'put ''ZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBdKXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgwKSx0aHJvdzplZSgxKSxyZXR1cm46ZWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihVW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpc30pLFU7ZnVuY3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihCPTEsWSYmKFg9MiZz''@;'; put 'put ''ZVswXT9ZLnJldHVybjpzZVswXT9ZLnRocm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSksMCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFdKSkuZG9uZSlyZXR1cm4gWDtzd2l0Y2goWT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6WD1zZTti''@;'; put 'put ''cmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtjb250aW51ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWD0oWD1xLnRyeXMpLmxl''@;'; put 'put ''bmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFdPlhbMF0mJnNlWzFdPFhbM10pKXtxLmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxYWzFdKXtxLmxhYmVsPVhbMV0s''@;'; put 'put ''WD1zZTticmVha31pZihYJiZxLmxhYmVsPFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNoKHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWV9c2U9Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2LGhlXSxZPTB9ZmluYWxseXtCPVg9MH1pZig1JnNl''@;'; put 'put ''WzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxvZV0pfX19LGs9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGope3JldHVybiBqJiZqLl9fZXNNb2R1bGU/ajp7ZGVmYXVsdDpqfX07T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2VuZXJhdGVQYXRoRm9yU2FzPU8uZ2V0TWFjcm9zUGF0aD1PLmVzY2FwZVdpblNsYXNoZXM9Ty5pc0xpbnV4PU8uaXNXaW5kb3dzPU8udW5pcUFycmF5PU8udXVpZHY0PU8uYXN5bmNGb3JFYWNoPXZvaWQgMDt2YXIgRT1rKFIo''@;'; put 'put ''MjUyMCkpO08uYXN5bmNGb3JFYWNoPWZ1bmN0aW9uKGosVil7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEI7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihZKXtzd2l0Y2goWS5sYWJlbCl7Y2FzZSAwOkI9MCxZLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBCPGoubGVu''@;'; put 'put ''Z3RoP1s0LFYoaltCXSxCLGopXTpbMyw0XTtjYXNlIDI6WS5zZW50KCksWS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gQisrLFszLDFdO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0sTy51dWlkdjQ9ZnVuY3Rpb24oKXtyZXR1cm4ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5y''@;'; put 'put ''ZXBsYWNlKC9beHldL2csZnVuY3Rpb24oail7dmFyIFY9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PWo/VjozJlZ8OCkudG9TdHJpbmcoMTYpfSl9LE8udW5pcUFycmF5PWZ1bmN0aW9uKGope3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoaikpfSxPLmlzV2luZG93cz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiJ3aW4zMiI9PT16LnBsYXRmb3JtfSxPLmlzTGludXg9ZnVuY3Rpb24oKXtyZXR1cm4ibGludXgiPT09ei5wbGF0Zm9ybX0sTy5lc2NhcGVXaW5TbGFzaGVzPWZ1bmN0aW9uKGope3JldHVybigwLE8uaXNXaW5kb3dzKSgpP2oucmVwbGFjZSgvXFwvZywiXFxcXCIpOmp9LE8u''@;'; put 'put ''Z2V0TWFjcm9zUGF0aD1mdW5jdGlvbigpe3JldHVybiBFLmRlZmF1bHQuam9pbigiLyIsIi4uIiwibWFjcm9zIil9LE8uZ2VuZXJhdGVQYXRoRm9yU2FzPWZ1bmN0aW9uKGope3JldHVybiBqLnJlcGxhY2UoL1xcL2csIi8iKX19LDk4MDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6''@;'; put 'put ''PU87ei5iaWdudW09Uig0NTkwKSx6LmRlZmluZT1SKDI1MDApLmRlZmluZSx6LmJhc2U9UigxOTc5KSx6LmNvbnN0YW50cz1SKDY4MjYpLHouZGVjb2RlcnM9Uig4MzA3KSx6LmVuY29kZXJzPVIoNjU3OSl9LDI1MDA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNjU3OSksSz1S''@;'; put 'put ''KDgzMDcpLEk9Uig1NzE3KTtmdW5jdGlvbiBrKEUsail7dGhpcy5uYW1lPUUsdGhpcy5ib2R5PWosdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fU8uZGVmaW5lPWZ1bmN0aW9uKEUsail7cmV0dXJuIG5ldyBrKEUsail9LGsucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlv''@;'; put 'put ''bihFKXtjb25zdCBqPXRoaXMubmFtZTtmdW5jdGlvbiBWKEIpe3RoaXMuX2luaXROYW1lZChCLGopfXJldHVybiBJKFYsRSksVi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihCLFkpe0UuY2FsbCh0aGlzLEIsWSl9LG5ldyBWKHRoaXMpfSxrLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1m''@;'; put 'put ''dW5jdGlvbihFKXtyZXR1cm4gdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShFPUV8fCJkZXIiKXx8KHRoaXMuZGVjb2RlcnNbRV09dGhpcy5fY3JlYXRlTmFtZWQoS1tFXSkpLHRoaXMuZGVjb2RlcnNbRV19LGsucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihFLGosVil7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2dldERlY29kZXIoaikuZGVjb2RlKEUsVil9LGsucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KEU9RXx8ImRlciIpfHwodGhpcy5lbmNvZGVyc1tFXT10aGlzLl9jcmVhdGVOYW1lZCh6W0VdKSksdGhpcy5l''@;'; put 'put ''bmNvZGVyc1tFXX0say5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEUsaixWKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihqKS5lbmNvZGUoRSxWKX19LDY2MjU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyksSz1SKDg0NjUpLmIsST1SKDIzOTkpLkJ1ZmZlcjtmdW5j''@;'; put 'put ''dGlvbiBrKGosVil7Sy5jYWxsKHRoaXMsViksSS5pc0J1ZmZlcihqKT8odGhpcy5iYXNlPWosdGhpcy5vZmZzZXQ9MCx0aGlzLmxlbmd0aD1qLmxlbmd0aCk6dGhpcy5lcnJvcigiSW5wdXQgbm90IEJ1ZmZlciIpfWZ1bmN0aW9uIEUoaixWKXtpZihBcnJheS5pc0FycmF5KGopKXRoaXMubGVu''@;'; put 'put ''Z3RoPTAsdGhpcy52YWx1ZT1qLm1hcChmdW5jdGlvbihCKXtyZXR1cm4gRS5pc0VuY29kZXJCdWZmZXIoQil8fChCPW5ldyBFKEIsVikpLHRoaXMubGVuZ3RoKz1CLmxlbmd0aCxCfSx0aGlzKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2Ygail7aWYoISgwPD1qJiZqPD0yNTUpKXJldHVybiBW''@;'; put 'put ''LmVycm9yKCJub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlIik7dGhpcy52YWx1ZT1qLHRoaXMubGVuZ3RoPTF9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGopdGhpcy52YWx1ZT1qLHRoaXMubGVuZ3RoPUkuYnl0ZUxlbmd0aChqKTtlbHNle2lmKCFJLmlzQnVmZmVyKGopKXJldHVybiBW''@;'; put 'put ''LmVycm9yKCJVbnN1cHBvcnRlZCB0eXBlOiAiK3R5cGVvZiBqKTt0aGlzLnZhbHVlPWosdGhpcy5sZW5ndGg9ai5sZW5ndGh9fXooayxLKSxPLkM9ayxrLmlzRGVjb2RlckJ1ZmZlcj1mdW5jdGlvbihqKXtyZXR1cm4gaiBpbnN0YW5jZW9mIGt8fCJvYmplY3QiPT10eXBlb2YgaiYmSS5pc0J1''@;'; put 'put ''ZmZlcihqLmJhc2UpJiYiRGVjb2RlckJ1ZmZlciI9PT1qLmNvbnN0cnVjdG9yLm5hbWUmJiJudW1iZXIiPT10eXBlb2Ygai5vZmZzZXQmJiJudW1iZXIiPT10eXBlb2Ygai5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnNhdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnJlc3RvcmUmJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBqLmlzRW1wdHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnJlYWRVSW50OCYmImZ1bmN0aW9uIj09dHlwZW9mIGouc2tpcCYmImZ1bmN0aW9uIj09dHlwZW9mIGoucmF3fSxrLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNl''@;'; put 'put ''dCxyZXBvcnRlcjpLLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxrLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKGope2NvbnN0IFY9bmV3IGsodGhpcy5iYXNlKTtyZXR1cm4gVi5vZmZzZXQ9ai5vZmZzZXQsVi5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9ai5vZmZzZXQs''@;'; put 'put ''Sy5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsai5yZXBvcnRlciksVn0say5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxrLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMub2Zmc2V0KzE8''@;'; put 'put ''PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcihqfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LGsucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oaixWKXtpZighKHRoaXMub2Zmc2V0K2o8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhp''@;'; put 'put ''cy5lcnJvcihWfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7Y29uc3QgQj1uZXcgayh0aGlzLmJhc2UpO3JldHVybiBCLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsQi5vZmZzZXQ9dGhpcy5vZmZzZXQsQi5sZW5ndGg9dGhpcy5vZmZzZXQraix0aGlzLm9mZnNldCs9aixC''@;'; put 'put ''fSxrLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShqP2oub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sTy5SPUUsRS5pc0VuY29kZXJCdWZmZXI9ZnVuY3Rpb24oail7cmV0dXJuIGogaW5zdGFuY2VvZiBFfHwib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IGomJiJFbmNvZGVyQnVmZmVyIj09PWouY29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiBqLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGouam9pbn0sRS5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihqLFYpe3JldHVybiBqfHwoaj1JLmFsbG9jKHRoaXMubGVuZ3RoKSksVnx8''@;'; put 'put ''KFY9MCksMD09PXRoaXMubGVuZ3RofHwoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24oQil7Qi5qb2luKGosViksVis9Qi5sZW5ndGh9KTooIm51bWJlciI9PXR5cGVvZiB0aGlzLnZhbHVlP2pbVl09dGhpcy52YWx1ZToic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIHRoaXMudmFsdWU/ai53cml0ZSh0aGlzLnZhbHVlLFYpOkkuaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weShqLFYpLFYrPXRoaXMubGVuZ3RoKSksan19LDE5Nzk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PU87ei5SZXBvcnRlcj1SKDg0NjUpLmIsei5E''@;'; put 'put ''ZWNvZGVyQnVmZmVyPVIoNjYyNSkuQyx6LkVuY29kZXJCdWZmZXI9Uig2NjI1KS5SLHouTm9kZT1SKDE5NDkpfSwxOTQ5OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg0NjUpLmIsSz1SKDY2MjUpLlIsST1SKDY2MjUpLkMsaz1SKDk3NDYpLEU9WyJzZXEiLCJzZXFvZiIsInNl''@;'; put 'put ''dCIsInNldG9mIiwib2JqaWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwi''@;'; put 'put ''cHJpbnRzdHIiLCJ0NjFzdHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSxqPVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQoRSk7ZnVuY3Rpb24gVihZLFgsVSl7''@;'; put 'put ''Y29uc3QgcT17fTt0aGlzLl9iYXNlU3RhdGU9cSxxLm5hbWU9VSxxLmVuYz1ZLHEucGFyZW50PVh8fG51bGwscS5jaGlsZHJlbj1udWxsLHEudGFnPW51bGwscS5hcmdzPW51bGwscS5yZXZlcnNlQXJncz1udWxsLHEuY2hvaWNlPW51bGwscS5vcHRpb25hbD0hMSxxLmFueT0hMSxxLm9iaj0h''@;'; put 'put ''MSxxLnVzZT1udWxsLHEudXNlRGVjb2Rlcj1udWxsLHEua2V5PW51bGwscS5kZWZhdWx0PW51bGwscS5leHBsaWNpdD1udWxsLHEuaW1wbGljaXQ9bnVsbCxxLmNvbnRhaW5zPW51bGwscS5wYXJlbnR8fChxLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9TS5leHBvcnRzPVY7Y29uc3QgQj1b''@;'; put 'put ''ImVuYyIsInBhcmVudCIsImNoaWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO1YucHJvdG90eXBl''@;'; put 'put ''LmNsb25lPWZ1bmN0aW9uKCl7Y29uc3QgWT10aGlzLl9iYXNlU3RhdGUsWD17fTtCLmZvckVhY2goZnVuY3Rpb24ocSl7WFtxXT1ZW3FdfSk7Y29uc3QgVT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihYLnBhcmVudCk7cmV0dXJuIFUuX2Jhc2VTdGF0ZT1YLFV9LFYucHJvdG90eXBlLl93cmFwPWZ1''@;'; put 'put ''bmN0aW9uKCl7Y29uc3QgWT10aGlzLl9iYXNlU3RhdGU7ai5mb3JFYWNoKGZ1bmN0aW9uKFgpe3RoaXNbWF09ZnVuY3Rpb24oKXtjb25zdCBVPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBZLmNoaWxkcmVuLnB1c2goVSksVVtYXS5hcHBseShVLGFyZ3VtZW50cyl9fSx0aGlz''@;'; put 'put ''KX0sVi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7ayhudWxsPT09WC5wYXJlbnQpLFkuY2FsbCh0aGlzKSxYLmNoaWxkcmVuPVguY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBVLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30s''@;'; put 'put ''dGhpcyksay5lcXVhbChYLmNoaWxkcmVuLmxlbmd0aCwxLCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQiKX0sVi5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGUsVT1ZLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4gcSBpbnN0''@;'; put 'put ''YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO1k9WS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIShxIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1VLmxlbmd0aCYmKGsobnVsbD09PVguY2hpbGRyZW4pLFguY2hpbGRyZW49VSxVLmZvckVhY2goZnVuY3Rp''@;'; put 'put ''b24ocSl7cS5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PVkubGVuZ3RoJiYoayhudWxsPT09WC5hcmdzKSxYLmFyZ3M9WSxYLnJldmVyc2VBcmdzPVkubWFwKGZ1bmN0aW9uKHEpe2lmKCJvYmplY3QiIT10eXBlb2YgcXx8cS5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4g''@;'; put 'put ''cTtjb25zdCBlZT17fTtyZXR1cm4gT2JqZWN0LmtleXMocSkuZm9yRWFjaChmdW5jdGlvbih0ZSl7dGU9PSgwfHRlKSYmKHRlfD0wKSxlZVtxW3RlXV09dGV9KSxlZX0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNv''@;'; put 'put ''ZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJd''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oWSl7Vi5wcm90b3R5cGVbWV09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoWSsiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksRS5mb3JFYWNoKGZ1bmN0aW9uKFkpe1YucHJvdG90eXBlW1ldPWZ1bmN0''@;'; put 'put ''aW9uKCl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGUsVT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBrKG51bGw9PT1YLnRhZyksWC50YWc9WSx0aGlzLl91c2VBcmdzKFUpLHRoaXN9fSksVi5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKFkpe2soWSk7Y29uc3Qg''@;'; put 'put ''WD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVgudXNlKSxYLnVzZT1ZLHRoaXN9LFYucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxWLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oWSl7Y29uc3QgWD10''@;'; put 'put ''aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVguZGVmYXVsdCksWC5kZWZhdWx0PVksWC5vcHRpb25hbD0hMCx0aGlzfSxWLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC5leHBsaWNpdCYmbnVsbD09''@;'; put 'put ''PVguaW1wbGljaXQpLFguZXhwbGljaXQ9WSx0aGlzfSxWLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC5leHBsaWNpdCYmbnVsbD09PVguaW1wbGljaXQpLFguaW1wbGljaXQ9WSx0aGlzfSxWLnByb3RvdHlw''@;'; put 'put ''ZS5vYmo9ZnVuY3Rpb24oKXtjb25zdCBZPXRoaXMuX2Jhc2VTdGF0ZSxYPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIFkub2JqPSEwLDAhPT1YLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhYKSx0aGlzfSxWLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oWSl7Y29u''@;'; put 'put ''c3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVgua2V5KSxYLmtleT1ZLHRoaXN9LFYucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEwLHRoaXN9LFYucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMu''@;'; put 'put ''X2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC5jaG9pY2UpLFguY2hvaWNlPVksdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhZKS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIFlbVV19KSksdGhpc30sVi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNl''@;'; put 'put ''U3RhdGU7cmV0dXJuIGsobnVsbD09PVgudXNlKSxYLmNvbnRhaW5zPVksdGhpc30sVi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1VLnBhcmVudClyZXR1cm4gWS53cmFwUmVzdWx0KFUuY2hpbGRyZW5bMF0uX2RlY29k''@;'; put 'put ''ZShZLFgpKTtsZXQgcSxlZT1VLmRlZmF1bHQsdGU9ITAsb2U9bnVsbDtpZihudWxsIT09VS5rZXkmJihvZT1ZLmVudGVyS2V5KFUua2V5KSksVS5vcHRpb25hbCl7bGV0IHNlPW51bGw7aWYobnVsbCE9PVUuZXhwbGljaXQ/c2U9VS5leHBsaWNpdDpudWxsIT09VS5pbXBsaWNpdD9zZT1VLmlt''@;'; put 'put ''cGxpY2l0Om51bGwhPT1VLnRhZyYmKHNlPVUudGFnKSxudWxsIT09c2V8fFUuYW55KXtpZih0ZT10aGlzLl9wZWVrVGFnKFksc2UsVS5hbnkpLFkuaXNFcnJvcih0ZSkpcmV0dXJuIHRlfWVsc2V7Y29uc3QgaGU9WS5zYXZlKCk7dHJ5e251bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5l''@;'; put 'put ''cmljKFUudGFnLFksWCk6dGhpcy5fZGVjb2RlQ2hvaWNlKFksWCksdGU9ITB9Y2F0Y2h7dGU9ITF9WS5yZXN0b3JlKGhlKX19aWYoVS5vYmomJnRlJiYocT1ZLmVudGVyT2JqZWN0KCkpLHRlKXtpZihudWxsIT09VS5leHBsaWNpdCl7Y29uc3QgaGU9dGhpcy5fZGVjb2RlVGFnKFksVS5leHBs''@;'; put 'put ''aWNpdCk7aWYoWS5pc0Vycm9yKGhlKSlyZXR1cm4gaGU7WT1oZX1jb25zdCBzZT1ZLm9mZnNldDtpZihudWxsPT09VS51c2UmJm51bGw9PT1VLmNob2ljZSl7bGV0IGhlO1UuYW55JiYoaGU9WS5zYXZlKCkpO2NvbnN0IHVlPXRoaXMuX2RlY29kZVRhZyhZLG51bGwhPT1VLmltcGxpY2l0P1Uu''@;'; put 'put ''aW1wbGljaXQ6VS50YWcsVS5hbnkpO2lmKFkuaXNFcnJvcih1ZSkpcmV0dXJuIHVlO1UuYW55P2VlPVkucmF3KGhlKTpZPXVlfWlmKFgmJlgudHJhY2smJm51bGwhPT1VLnRhZyYmWC50cmFjayhZLnBhdGgoKSxzZSxZLmxlbmd0aCwidGFnZ2VkIiksWCYmWC50cmFjayYmbnVsbCE9PVUudGFn''@;'; put 'put ''JiZYLnRyYWNrKFkucGF0aCgpLFkub2Zmc2V0LFkubGVuZ3RoLCJjb250ZW50IiksVS5hbnl8fChlZT1udWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxZLFgpOnRoaXMuX2RlY29kZUNob2ljZShZLFgpKSxZLmlzRXJyb3IoZWUpKXJldHVybiBlZTtpZihVLmFueXx8''@;'; put 'put ''bnVsbCE9PVUuY2hvaWNlfHxudWxsPT09VS5jaGlsZHJlbnx8VS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGhlKXtoZS5fZGVjb2RlKFksWCl9KSxVLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1VLnRhZ3x8ImJpdHN0ciI9PT1VLnRhZykpe2NvbnN0IGhlPW5ldyBJKGVlKTtlZT10aGlzLl9n''@;'; put 'put ''ZXRVc2UoVS5jb250YWlucyxZLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShoZSxYKX19cmV0dXJuIFUub2JqJiZ0ZSYmKGVlPVkubGVhdmVPYmplY3QocSkpLG51bGw9PT1VLmtleXx8bnVsbD09PWVlJiYhMCE9PXRlP251bGwhPT1vZSYmWS5leGl0S2V5KG9lKTpZLmxlYXZlS2V5KG9l''@;'; put 'put ''LFUua2V5LGVlKSxlZX0sVi5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oWSxYLFUpe2NvbnN0IHE9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09WXx8InNldCI9PT1ZP251bGw6InNlcW9mIj09PVl8fCJzZXRvZiI9PT1ZP3RoaXMuX2RlY29kZUxpc3QoWCxZLHEuYXJn''@;'; put 'put ''c1swXSxVKTovc3RyJC8udGVzdChZKT90aGlzLl9kZWNvZGVTdHIoWCxZLFUpOiJvYmppZCI9PT1ZJiZxLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoWCxxLmFyZ3NbMF0scS5hcmdzWzFdLFUpOiJvYmppZCI9PT1ZP3RoaXMuX2RlY29kZU9iamlkKFgsbnVsbCxudWxsLFUpOiJnZW50aW1lIj09''@;'; put 'put ''PVl8fCJ1dGN0aW1lIj09PVk/dGhpcy5fZGVjb2RlVGltZShYLFksVSk6Im51bGxfIj09PVk/dGhpcy5fZGVjb2RlTnVsbChYLFUpOiJib29sIj09PVk/dGhpcy5fZGVjb2RlQm9vbChYLFUpOiJvYmpEZXNjIj09PVk/dGhpcy5fZGVjb2RlU3RyKFgsWSxVKToiaW50Ij09PVl8fCJlbnVtIj09''@;'; put 'put ''PVk/dGhpcy5fZGVjb2RlSW50KFgscS5hcmdzJiZxLmFyZ3NbMF0sVSk6bnVsbCE9PXEudXNlP3RoaXMuX2dldFVzZShxLnVzZSxYLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShYLFUpOlguZXJyb3IoInVua25vd24gdGFnOiAiK1kpfSxWLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9u''@;'; put 'put ''KFksWCl7Y29uc3QgVT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFUudXNlRGVjb2Rlcj10aGlzLl91c2UoWSxYKSxrKG51bGw9PT1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLFUudXNlRGVjb2Rlcj1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxVLmltcGxpY2l0''@;'; put 'put ''IT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihVLnVzZURlY29kZXI9VS51c2VEZWNvZGVyLmNsb25lKCksVS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9VS5pbXBsaWNpdCksVS51c2VEZWNvZGVyfSxWLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9u''@;'; put 'put ''KFksWCl7Y29uc3QgVT10aGlzLl9iYXNlU3RhdGU7bGV0IHE9bnVsbCxlZT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoVS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24odGUpe2NvbnN0IG9lPVkuc2F2ZSgpLHNlPVUuY2hvaWNlW3RlXTt0cnl7Y29uc3QgaGU9c2UuX2RlY29kZShZLFgpO2lmKFkuaXNF''@;'; put 'put ''cnJvcihoZSkpcmV0dXJuITE7cT17dHlwZTp0ZSx2YWx1ZTpoZX0sZWU9ITB9Y2F0Y2h7cmV0dXJuIFkucmVzdG9yZShvZSksITF9cmV0dXJuITB9LHRoaXMpLGVlP3E6WS5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LFYucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0''@;'; put 'put ''aW9uKFkpe3JldHVybiBuZXcgSyhZLHRoaXMucmVwb3J0ZXIpfSxWLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKFksWCxVKXtjb25zdCBxPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsIT09cS5kZWZhdWx0JiZxLmRlZmF1bHQ9PT1ZKXJldHVybjtjb25zdCBlZT10aGlzLl9lbmNvZGVWYWx1''@;'; put 'put ''ZShZLFgsVSk7cmV0dXJuIHZvaWQgMD09PWVlfHx0aGlzLl9za2lwRGVmYXVsdChlZSxYLFUpP3ZvaWQgMDplZX0sVi5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKFksWCxVKXtjb25zdCBxPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09cS5wYXJlbnQpcmV0dXJuIHEuY2hpbGRy''@;'; put 'put ''ZW5bMF0uX2VuY29kZShZLFh8fG5ldyB6KTtsZXQgZWU9bnVsbDtpZih0aGlzLnJlcG9ydGVyPVgscS5vcHRpb25hbCYmdm9pZCAwPT09WSl7aWYobnVsbD09PXEuZGVmYXVsdClyZXR1cm47WT1xLmRlZmF1bHR9bGV0IHRlPW51bGwsb2U9ITE7aWYocS5hbnkpZWU9dGhpcy5fY3JlYXRlRW5j''@;'; put 'put ''b2RlckJ1ZmZlcihZKTtlbHNlIGlmKHEuY2hvaWNlKWVlPXRoaXMuX2VuY29kZUNob2ljZShZLFgpO2Vsc2UgaWYocS5jb250YWlucyl0ZT10aGlzLl9nZXRVc2UocS5jb250YWlucyxVKS5fZW5jb2RlKFksWCksb2U9ITA7ZWxzZSBpZihxLmNoaWxkcmVuKXRlPXEuY2hpbGRyZW4ubWFwKGZ1''@;'; put 'put ''bmN0aW9uKHNlKXtpZigibnVsbF8iPT09c2UuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHNlLl9lbmNvZGUobnVsbCxYLFkpO2lmKG51bGw9PT1zZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gWC5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTtjb25zdCBoZT1YLmVudGVyS2V5KHNlLl9i''@;'; put 'put ''YXNlU3RhdGUua2V5KTtpZigib2JqZWN0IiE9dHlwZW9mIFkpcmV0dXJuIFguZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO2NvbnN0IHVlPXNlLl9lbmNvZGUoWVtzZS5fYmFzZVN0YXRlLmtleV0sWCxZKTtyZXR1cm4gWC5sZWF2ZUtleShoZSksdWV9''@;'; put 'put ''LHRoaXMpLmZpbHRlcihmdW5jdGlvbihzZSl7cmV0dXJuIHNlfSksdGU9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0ZSk7ZWxzZSBpZigic2Vxb2YiPT09cS50YWd8fCJzZXRvZiI9PT1xLnRhZyl7aWYoIXEuYXJnc3x8MSE9PXEuYXJncy5sZW5ndGgpcmV0dXJuIFguZXJyb3IoIlRvbyBt''@;'; put 'put ''YW55IGFyZ3MgZm9yIDogIitxLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoWSkpcmV0dXJuIFguZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTtjb25zdCBzZT10aGlzLmNsb25lKCk7c2UuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLHRlPXRoaXMuX2NyZWF0ZUVu''@;'; put 'put ''Y29kZXJCdWZmZXIoWS5tYXAoZnVuY3Rpb24oaGUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0sWSkuX2VuY29kZShoZSxYKX0sc2UpKX1lbHNlIG51bGwhPT1xLnVzZT9lZT10aGlzLl9nZXRVc2UocS51c2UsVSkuX2VuY29kZShZLFgpOih0ZT10aGlzLl9l''@;'; put 'put ''bmNvZGVQcmltaXRpdmUocS50YWcsWSksb2U9ITApO2lmKCFxLmFueSYmbnVsbD09PXEuY2hvaWNlKXtjb25zdCBzZT1udWxsIT09cS5pbXBsaWNpdD9xLmltcGxpY2l0OnEudGFnLGhlPW51bGw9PT1xLmltcGxpY2l0PyJ1bml2ZXJzYWwiOiJjb250ZXh0IjtudWxsPT09c2U/bnVsbD09PXEu''@;'; put 'put ''dXNlJiZYLmVycm9yKCJUYWcgY291bGQgYmUgb21pdHRlZCBvbmx5IGZvciAudXNlKCkiKTpudWxsPT09cS51c2UmJihlZT10aGlzLl9lbmNvZGVDb21wb3NpdGUoc2Usb2UsaGUsdGUpKX1yZXR1cm4gbnVsbCE9PXEuZXhwbGljaXQmJihlZT10aGlzLl9lbmNvZGVDb21wb3NpdGUocS5leHBs''@;'; put 'put ''aWNpdCwhMSwiY29udGV4dCIsZWUpKSxlZX0sVi5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlLHE9VS5jaG9pY2VbWS50eXBlXTtyZXR1cm4gcXx8ayghMSxZLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShP''@;'; put 'put ''YmplY3Qua2V5cyhVLmNob2ljZSkpKSxxLl9lbmNvZGUoWS52YWx1ZSxYKX0sVi5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KFkpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoWCxZKTtpZigib2Jq''@;'; put 'put ''aWQiPT09WSYmVS5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChYLFUucmV2ZXJzZUFyZ3NbMF0sVS5hcmdzWzFdKTtpZigib2JqaWQiPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoWCxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PVl8fCJ1dGN0aW1lIj09PVkpcmV0dXJuIHRo''@;'; put 'put ''aXMuX2VuY29kZVRpbWUoWCxZKTtpZigibnVsbF8iPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09WXx8ImVudW0iPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlSW50KFgsVS5hcmdzJiZVLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1ZKXJldHVybiB0aGlzLl9l''@;'; put 'put ''bmNvZGVCb29sKFgpO2lmKCJvYmpEZXNjIj09PVkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihYLFkpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK1kpfSxWLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oWSl7cmV0dXJuL15bMC05IF0qJC8udGVzdChZKX0sVi5wcm90''@;'; put 'put ''b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oWSl7cmV0dXJuL15bQS1aYS16MC05ICcoKSssLS4vOj0/XSokLy50ZXN0KFkpfX0sODQ2NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KTtmdW5jdGlvbiBLKGspe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBh''@;'; put 'put ''dGg6W10sb3B0aW9uczprfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIEkoayxFKXt0aGlzLnBhdGg9ayx0aGlzLnJldGhyb3coRSl9Ty5iPUssSy5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihrKXtyZXR1cm4gayBpbnN0YW5jZW9mIEl9LEsucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtj''@;'; put 'put ''b25zdCBrPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajprLm9iaixwYXRoTGVuOmsucGF0aC5sZW5ndGh9fSxLLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtFLm9iaj1rLm9iaixFLnBhdGg9RS5wYXRoLnNsaWNlKDAsay5w''@;'; put 'put ''YXRoTGVuKX0sSy5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKGspfSxLLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtFLnBhdGg9RS5wYXRoLnNsaWNlKDAs''@;'; put 'put ''ay0xKX0sSy5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24oayxFLGope2NvbnN0IFY9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkoayksbnVsbCE9PVYub2JqJiYoVi5vYmpbRV09ail9LEsucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJT''@;'; put 'put ''dGF0ZS5wYXRoLmpvaW4oIi8iKX0sSy5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMuX3JlcG9ydGVyU3RhdGUsRT1rLm9iajtyZXR1cm4gay5vYmo9e30sRX0sSy5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9yZXBv''@;'; put 'put ''cnRlclN0YXRlLGo9RS5vYmo7cmV0dXJuIEUub2JqPWssan0sSy5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oayl7bGV0IEU7Y29uc3Qgaj10aGlzLl9yZXBvcnRlclN0YXRlLFY9ayBpbnN0YW5jZW9mIEk7aWYoRT1WP2s6bmV3IEkoai5wYXRoLm1hcChmdW5jdGlvbihCKXtyZXR1cm4iWyIr''@;'; put 'put ''SlNPTi5zdHJpbmdpZnkoQikrIl0ifSkuam9pbigiIiksay5tZXNzYWdlfHxrLGsuc3RhY2spLCFqLm9wdGlvbnMucGFydGlhbCl0aHJvdyBFO3JldHVybiBWfHxqLmVycm9ycy5wdXNoKEUpLEV9LEsucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9yZXBv''@;'; put 'put ''cnRlclN0YXRlO3JldHVybiBFLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcihrKT9udWxsOmssZXJyb3JzOkUuZXJyb3JzfTprfSx6KEksRXJyb3IpLEkucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24oayl7aWYodGhpcy5tZXNzYWdlPWsrIiBhdDogIisodGhpcy5wYXRo''@;'; put 'put ''fHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsSSksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKEUpe3RoaXMuc3RhY2s9RS5zdGFja31yZXR1cm4gdGhpc319LDE2MDoo''@;'; put 'put ''TSxPKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBSKHope2NvbnN0IEs9e307cmV0dXJuIE9iamVjdC5rZXlzKHopLmZvckVhY2goZnVuY3Rpb24oSSl7KDB8SSk9PUkmJihJfD0wKSxLW3pbSV1dPUl9KSxLfU8udGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNv''@;'; put 'put ''bnRleHQiLDM6InByaXZhdGUifSxPLnRhZ0NsYXNzQnlOYW1lPVIoTy50YWdDbGFzcyksTy50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVu''@;'; put 'put ''dW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3Ry''@;'; put 'put ''IiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LE8udGFnQnlOYW1lPVIoTy50YWcpfSw2ODI2OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1PO3ouX3JldmVyc2U9ZnVuY3Rpb24oSyl7Y29uc3QgST17fTtyZXR1''@;'; put 'put ''cm4gT2JqZWN0LmtleXMoSykuZm9yRWFjaChmdW5jdGlvbihrKXsoMHxrKT09ayYmKGt8PTApLElbS1trXV09a30pLEl9LHouZGVyPVIoMTYwKX0sMTY3MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KSxLPVIoNDU5MCksST1SKDY2MjUpLkMsaz1SKDE5NDkpLEU9Uigx''@;'; put 'put ''NjApO2Z1bmN0aW9uIGooWCl7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPVgubmFtZSx0aGlzLmVudGl0eT1YLHRoaXMudHJlZT1uZXcgVix0aGlzLnRyZWUuX2luaXQoWC5ib2R5KX1mdW5jdGlvbiBWKFgpe2suY2FsbCh0aGlzLCJkZXIiLFgpfWZ1bmN0aW9uIEIoWCxVKXtsZXQgcT1YLnJl''@;'; put 'put ''YWRVSW50OChVKTtpZihYLmlzRXJyb3IocSkpcmV0dXJuIHE7Y29uc3QgZWU9RS50YWdDbGFzc1txPj42XSx0ZT0wPT0oMzImcSk7aWYoMzE9PSgzMSZxKSl7bGV0IG9lPXE7Zm9yKHE9MDsxMjg9PSgxMjgmb2UpOyl7aWYob2U9WC5yZWFkVUludDgoVSksWC5pc0Vycm9yKG9lKSlyZXR1cm4g''@;'; put 'put ''b2U7cTw8PTcscXw9MTI3Jm9lfX1lbHNlIHEmPTMxO3JldHVybntjbHM6ZWUscHJpbWl0aXZlOnRlLHRhZzpxLHRhZ1N0cjpFLnRhZ1txXX19ZnVuY3Rpb24gWShYLFUscSl7bGV0IGVlPVgucmVhZFVJbnQ4KHEpO2lmKFguaXNFcnJvcihlZSkpcmV0dXJuIGVlO2lmKCFVJiYxMjg9PT1lZSly''@;'; put 'put ''ZXR1cm4gbnVsbDtpZighKDEyOCZlZSkpcmV0dXJuIGVlO2NvbnN0IHRlPTEyNyZlZTtpZih0ZT40KXJldHVybiBYLmVycm9yKCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nIik7ZWU9MDtmb3IobGV0IG9lPTA7b2U8dGU7b2UrKyl7ZWU8PD04O2NvbnN0IHNlPVgucmVhZFVJbnQ4KHEpO2lm''@;'; put 'put ''KFguaXNFcnJvcihzZSkpcmV0dXJuIHNlO2VlfD1zZX1yZXR1cm4gZWV9TS5leHBvcnRzPWosai5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFgsVSl7cmV0dXJuIEkuaXNEZWNvZGVyQnVmZmVyKFgpfHwoWD1uZXcgSShYLFUpKSx0aGlzLnRyZWUuX2RlY29kZShYLFUpfSx6KFYsayksVi5w''@;'; put 'put ''cm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oWCxVLHEpe2lmKFguaXNFbXB0eSgpKXJldHVybiExO2NvbnN0IGVlPVguc2F2ZSgpLHRlPUIoWCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytVKyciJyk7cmV0dXJuIFguaXNFcnJvcih0ZSk/dGU6KFgucmVzdG9yZShlZSksdGUudGFnPT09VXx8''@;'; put 'put ''dGUudGFnU3RyPT09VXx8dGUudGFnU3RyKyJvZiI9PT1VfHxxKX0sVi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihYLFUscSl7Y29uc3QgZWU9QihYLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytVKyciJyk7aWYoWC5pc0Vycm9yKGVlKSlyZXR1cm4gZWU7bGV0IHRlPVkoWCxl''@;'; put 'put ''ZS5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mICInK1UrJyInKTtpZihYLmlzRXJyb3IodGUpKXJldHVybiB0ZTtpZighcSYmZWUudGFnIT09VSYmZWUudGFnU3RyIT09VSYmZWUudGFnU3RyKyJvZiIhPT1VKXJldHVybiBYLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAi''@;'; put 'put ''JytVKyciJyk7aWYoZWUucHJpbWl0aXZlfHxudWxsIT09dGUpcmV0dXJuIFguc2tpcCh0ZSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK1UrJyInKTtjb25zdCBvZT1YLnNhdmUoKSxzZT10aGlzLl9za2lwVW50aWxFbmQoWCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGgg''@;'; put 'put ''Ym9keTogIicrdGhpcy50YWcrJyInKTtyZXR1cm4gWC5pc0Vycm9yKHNlKT9zZToodGU9WC5vZmZzZXQtb2Uub2Zmc2V0LFgucmVzdG9yZShvZSksWC5za2lwKHRlLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrVSsnIicpKX0sVi5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlv''@;'; put 'put ''bihYLFUpe2Zvcig7Oyl7Y29uc3QgcT1CKFgsVSk7aWYoWC5pc0Vycm9yKHEpKXJldHVybiBxO2NvbnN0IGVlPVkoWCxxLnByaW1pdGl2ZSxVKTtpZihYLmlzRXJyb3IoZWUpKXJldHVybiBlZTtsZXQgdGU7aWYodGU9cS5wcmltaXRpdmV8fG51bGwhPT1lZT9YLnNraXAoZWUpOnRoaXMuX3Nr''@;'; put 'put ''aXBVbnRpbEVuZChYLFUpLFguaXNFcnJvcih0ZSkpcmV0dXJuIHRlO2lmKCJlbmQiPT09cS50YWdTdHIpYnJlYWt9fSxWLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihYLFUscSxlZSl7Y29uc3QgdGU9W107Zm9yKDshWC5pc0VtcHR5KCk7KXtjb25zdCBvZT10aGlzLl9wZWVrVGFn''@;'; put 'put ''KFgsImVuZCIpO2lmKFguaXNFcnJvcihvZSkpcmV0dXJuIG9lO2NvbnN0IHNlPXEuZGVjb2RlKFgsImRlciIsZWUpO2lmKFguaXNFcnJvcihzZSkmJm9lKWJyZWFrO3RlLnB1c2goc2UpfXJldHVybiB0ZX0sVi5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5jdGlvbihYLFUpe2lmKCJiaXRzdHIi''@;'; put 'put ''PT09VSl7Y29uc3QgcT1YLnJlYWRVSW50OCgpO3JldHVybiBYLmlzRXJyb3IocSk/cTp7dW51c2VkOnEsZGF0YTpYLnJhdygpfX1pZigiYm1wc3RyIj09PVUpe2NvbnN0IHE9WC5yYXcoKTtpZihxLmxlbmd0aCUyPT0xKXJldHVybiBYLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTog''@;'; put 'put ''Ym1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2xldCBlZT0iIjtmb3IobGV0IHRlPTA7dGU8cS5sZW5ndGgvMjt0ZSsrKWVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHEucmVhZFVJbnQxNkJFKDIqdGUpKTtyZXR1cm4gZWV9aWYoIm51bXN0ciI9PT1VKXtjb25zdCBxPVgucmF3KCkudG9TdHJpbmco''@;'; put 'put ''ImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKHEpP3E6WC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1VfHwib2JqRGVzYyI9PT1VKXJldHVybiBYLnJhdygpO2lmKCJwcmludHN0ciI9PT1V''@;'; put 'put ''KXtjb25zdCBxPVgucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIocSk/cTpYLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KFUpP1gucmF3KCkudG9T''@;'; put 'put ''dHJpbmcoKTpYLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitVKyIgdW5zdXBwb3J0ZWQiKX0sVi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKFgsVSxxKXtsZXQgZWU7Y29uc3QgdGU9W107bGV0IG9lPTAsc2U9MDtmb3IoOyFYLmlzRW1wdHkoKTspc2U9WC5yZWFk''@;'; put 'put ''VUludDgoKSxvZTw8PTcsb2V8PTEyNyZzZSwhKDEyOCZzZSkmJih0ZS5wdXNoKG9lKSxvZT0wKTtpZigxMjgmc2UmJnRlLnB1c2gob2UpLGVlPXE/dGU6W3RlWzBdLzQwfDAsdGVbMF0lNDBdLmNvbmNhdCh0ZS5zbGljZSgxKSksVSl7bGV0IGNlPVVbZWUuam9pbigiICIpXTt2b2lkIDA9PT1j''@;'; put 'put ''ZSYmKGNlPVVbZWUuam9pbigiLiIpXSksdm9pZCAwIT09Y2UmJihlZT1jZSl9cmV0dXJuIGVlfSxWLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihYLFUpe2NvbnN0IHE9WC5yYXcoKS50b1N0cmluZygpO2xldCBlZSx0ZSxvZSxzZSxoZSx1ZTtpZigiZ2VudGltZSI9PT1VKWVlPTB8''@;'; put 'put ''cS5zbGljZSgwLDQpLHRlPTB8cS5zbGljZSg0LDYpLG9lPTB8cS5zbGljZSg2LDgpLHNlPTB8cS5zbGljZSg4LDEwKSxoZT0wfHEuc2xpY2UoMTAsMTIpLHVlPTB8cS5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1VKXJldHVybiBYLmVycm9yKCJEZWNvZGluZyAiK1UrIiB0aW1l''@;'; put 'put ''IGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7ZWU9MHxxLnNsaWNlKDAsMiksdGU9MHxxLnNsaWNlKDIsNCksb2U9MHxxLnNsaWNlKDQsNiksc2U9MHxxLnNsaWNlKDYsOCksaGU9MHxxLnNsaWNlKDgsMTApLHVlPTB8cS5zbGljZSgxMCwxMiksZWU9ZWU8NzA/MmUzK2VlOjE5MDArZWV9cmV0dXJu''@;'; put 'put ''IERhdGUuVVRDKGVlLHRlLTEsb2Usc2UsaGUsdWUsMCl9LFYucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LFYucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKFgpe2NvbnN0IFU9WC5yZWFkVUludDgoKTtyZXR1cm4gWC5pc0Vycm9yKFUpP1U6MCE9''@;'; put 'put ''PVV9LFYucHJvdG90eXBlLl9kZWNvZGVJbnQ9ZnVuY3Rpb24oWCxVKXtjb25zdCBxPVgucmF3KCk7bGV0IGVlPW5ldyBLKHEpO3JldHVybiBVJiYoZWU9VVtlZS50b1N0cmluZygxMCldfHxlZSksZWV9LFYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oWCxVKXtyZXR1cm4iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgWCYmKFg9WChVKSksWC5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDgzMDc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PU87ei5kZXI9UigxNjcxKSx6LnBlbT1SKDk2MzEpfSw5NjMxOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDU3MTcpLEs9UigyMzk5''@;'; put 'put ''KS5CdWZmZXIsST1SKDE2NzEpO2Z1bmN0aW9uIGsoRSl7SS5jYWxsKHRoaXMsRSksdGhpcy5lbmM9InBlbSJ9eihrLEkpLE0uZXhwb3J0cz1rLGsucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihFLGope2NvbnN0IFY9RS50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLEI9ai5sYWJlbC50''@;'; put 'put ''b1VwcGVyQ2FzZSgpLFk9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvO2xldCBYPS0xLFU9LTE7Zm9yKGxldCB0ZT0wO3RlPFYubGVuZ3RoO3RlKyspe2NvbnN0IG9lPVZbdGVdLm1hdGNoKFkpO2lmKG51bGwhPT1vZSYmb2VbMl09PT1CKXtpZigtMSE9PVgpe2lmKCJFTkQiIT09''@;'; put 'put ''b2VbMV0pYnJlYWs7VT10ZTticmVha31pZigiQkVHSU4iIT09b2VbMV0pYnJlYWs7WD10ZX19aWYoLTE9PT1YfHwtMT09PVUpdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK0IpO2NvbnN0IHE9Vi5zbGljZShYKzEsVSkuam9pbigiIik7cS5yZXBsYWNlKC9b''@;'; put 'put ''XmEtejAtOSsvPV0rL2dpLCIiKTtjb25zdCBlZT1LLmZyb20ocSwiYmFzZTY0Iik7cmV0dXJuIEkucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsZWUsail9fSw2OTg0OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDU3MTcpLEs9UigyMzk5KS5CdWZmZXIsST1SKDE5NDkpLGs9''@;'; put 'put ''UigxNjApO2Z1bmN0aW9uIEUoQil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPUIubmFtZSx0aGlzLmVudGl0eT1CLHRoaXMudHJlZT1uZXcgaix0aGlzLnRyZWUuX2luaXQoQi5ib2R5KX1mdW5jdGlvbiBqKEIpe0kuY2FsbCh0aGlzLCJkZXIiLEIpfWZ1bmN0aW9uIFYoQil7cmV0dXJuIEI8''@;'; put 'put ''MTA/IjAiK0I6Qn1NLmV4cG9ydHM9RSxFLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oQixZKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoQixZKS5qb2luKCl9LHooaixJKSxqLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKEIsWSxYLFUpe2NvbnN0IHE9ZnVuY3Rpb24o''@;'; put 'put ''b2Usc2UsaGUsdWUpe2xldCBjZTtpZigic2Vxb2YiPT09b2U/b2U9InNlcSI6InNldG9mIj09PW9lJiYob2U9InNldCIpLGsudGFnQnlOYW1lLmhhc093blByb3BlcnR5KG9lKSljZT1rLnRhZ0J5TmFtZVtvZV07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIG9lfHwoMHxvZSkhPT1vZSlyZXR1''@;'; put 'put ''cm4gdWUuZXJyb3IoIlVua25vd24gdGFnOiAiK29lKTtjZT1vZX1yZXR1cm4gY2U+PTMxP3VlLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooc2V8fChjZXw9MzIpLGNlfD1rLnRhZ0NsYXNzQnlOYW1lW2hlfHwidW5pdmVyc2FsIl08PDYsY2UpfShCLFks''@;'; put 'put ''WCx0aGlzLnJlcG9ydGVyKTtpZihVLmxlbmd0aDwxMjgpe2NvbnN0IG9lPUsuYWxsb2MoMik7cmV0dXJuIG9lWzBdPXEsb2VbMV09VS5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbb2UsVV0pfWxldCBlZT0xO2ZvcihsZXQgb2U9VS5sZW5ndGg7b2U+PTI1NjtvZT4+PTgpZWUr''@;'; put 'put ''Kztjb25zdCB0ZT1LLmFsbG9jKDIrZWUpO3RlWzBdPXEsdGVbMV09MTI4fGVlO2ZvcihsZXQgb2U9MStlZSxzZT1VLmxlbmd0aDtzZT4wO29lLS0sc2U+Pj04KXRlW29lXT0yNTUmc2U7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW3RlLFVdKX0sai5wcm90b3R5cGUuX2VuY29k''@;'; put 'put ''ZVN0cj1mdW5jdGlvbihCLFkpe2lmKCJiaXRzdHIiPT09WSlyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxCLnVudXNlZCxCLmRhdGFdKTtpZigiYm1wc3RyIj09PVkpe2NvbnN0IFg9Sy5hbGxvYygyKkIubGVuZ3RoKTtmb3IobGV0IFU9MDtVPEIubGVuZ3RoO1UrKylYLndy''@;'; put 'put ''aXRlVUludDE2QkUoQi5jaGFyQ29kZUF0KFUpLDIqVSk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWCl9cmV0dXJuIm51bXN0ciI9PT1ZP3RoaXMuX2lzTnVtc3RyKEIpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcg''@;'; put 'put ''b2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09WT90aGlzLl9pc1ByaW50c3RyKEIpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6''@;'; put 'put ''IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFs''@;'; put 'put ''IHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChZKXx8Im9iakRlc2MiPT09WT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK1krIiB1bnN1cHBvcnRlZCIpfSxqLnByb3RvdHlwZS5fZW5j''@;'; put 'put ''b2RlT2JqaWQ9ZnVuY3Rpb24oQixZLFgpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7aWYoIVkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighWS5oYXNPd25Qcm9wZXJ0eShCKSlyZXR1cm4gdGhpcy5y''@;'; put 'put ''ZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtCPVlbQl0uc3BsaXQoL1tccy5dKy9nKTtmb3IobGV0IHRlPTA7dGU8Qi5sZW5ndGg7dGUrKylCW3RlXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoQikpe0I9Qi5zbGljZSgpO2ZvcihsZXQgdGU9MDt0ZTxC''@;'; put 'put ''Lmxlbmd0aDt0ZSsrKUJbdGVdfD0wfWlmKCFBcnJheS5pc0FycmF5KEIpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoQikpO2lmKCFYKXtpZihCWzFdPj00MClyZXR1cm4g''@;'; put 'put ''dGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7Qi5zcGxpY2UoMCwyLDQwKkJbMF0rQlsxXSl9bGV0IFU9MDtmb3IobGV0IHRlPTA7dGU8Qi5sZW5ndGg7dGUrKyl7bGV0IG9lPUJbdGVdO2ZvcihVKys7b2U+PTEyODtvZT4+PTcpVSsrfWNvbnN0IHE9''@;'; put 'put ''Sy5hbGxvYyhVKTtsZXQgZWU9cS5sZW5ndGgtMTtmb3IobGV0IHRlPUIubGVuZ3RoLTE7dGU+PTA7dGUtLSl7bGV0IG9lPUJbdGVdO2ZvcihxW2VlLS1dPTEyNyZvZTsob2U+Pj03KT4wOylxW2VlLS1dPTEyOHwxMjcmb2V9cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocSl9LGou''@;'; put 'put ''cHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEIsWSl7bGV0IFg7Y29uc3QgVT1uZXcgRGF0ZShCKTtyZXR1cm4iZ2VudGltZSI9PT1ZP1g9W1YoVS5nZXRVVENGdWxsWWVhcigpKSxWKFUuZ2V0VVRDTW9udGgoKSsxKSxWKFUuZ2V0VVRDRGF0ZSgpKSxWKFUuZ2V0VVRDSG91cnMoKSks''@;'; put 'put ''VihVLmdldFVUQ01pbnV0ZXMoKSksVihVLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1ZP1g9W1YoVS5nZXRVVENGdWxsWWVhcigpJTEwMCksVihVLmdldFVUQ01vbnRoKCkrMSksVihVLmdldFVUQ0RhdGUoKSksVihVLmdldFVUQ0hvdXJzKCkpLFYoVS5nZXRV''@;'; put 'put ''VENNaW51dGVzKCkpLFYoVS5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitZKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihYLCJvY3RzdHIiKX0sai5wcm90b3R5cGUuX2VuY29kZU51bGw9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LGoucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oQixZKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe2lmKCFZKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2''@;'; put 'put ''ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIVkuaGFzT3duUHJvcGVydHkoQikpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEIpKTtCPVlbQl19aWYoIm51bWJlciIhPXR5cGVvZiBCJiYhSy5pc0J1ZmZl''@;'; put 'put ''cihCKSl7Y29uc3QgcT1CLnRvQXJyYXkoKTshQi5zaWduJiYxMjgmcVswXSYmcS51bnNoaWZ0KDApLEI9Sy5mcm9tKHEpfWlmKEsuaXNCdWZmZXIoQikpe2xldCBxPUIubGVuZ3RoOzA9PT1CLmxlbmd0aCYmcSsrO2NvbnN0IGVlPUsuYWxsb2MocSk7cmV0dXJuIEIuY29weShlZSksMD09PUIu''@;'; put 'put ''bGVuZ3RoJiYoZWVbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlZSl9aWYoQjwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQik7aWYoQjwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsQl0pO2xldCBYPTE7Zm9yKGxldCBxPUI7cT49''@;'; put 'put ''MjU2O3E+Pj04KVgrKztjb25zdCBVPW5ldyBBcnJheShYKTtmb3IobGV0IHE9VS5sZW5ndGgtMTtxPj0wO3EtLSlVW3FdPTI1NSZCLEI+Pj04O3JldHVybiAxMjgmVVswXSYmVS51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoSy5mcm9tKFUpKX0sai5wcm90b3R5cGUuX2Vu''@;'; put 'put ''Y29kZUJvb2w9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQj8yNTU6MCl9LGoucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oQixZKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgQiYmKEI9QihZKSksQi5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sai5wcm90''@;'; put 'put ''b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKEIsWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgcTtpZihudWxsPT09VS5kZWZhdWx0KXJldHVybiExO2NvbnN0IGVlPUIuam9pbigpO2lmKHZvaWQgMD09PVUuZGVmYXVsdEJ1ZmZlciYmKFUuZGVmYXVsdEJ1ZmZlcj10aGlzLl9l''@;'; put 'put ''bmNvZGVWYWx1ZShVLmRlZmF1bHQsWSxYKS5qb2luKCkpLGVlLmxlbmd0aCE9PVUuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKHE9MDtxPGVlLmxlbmd0aDtxKyspaWYoZWVbcV0hPT1VLmRlZmF1bHRCdWZmZXJbcV0pcmV0dXJuITE7cmV0dXJuITB9fSw2NTc5OihNLE8sUik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7Y29uc3Qgej1PO3ouZGVyPVIoNjk4NCksei5wZW09UigyODgzKX0sMjg4MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KSxLPVIoNjk4NCk7ZnVuY3Rpb24gSShrKXtLLmNhbGwodGhpcyxrKSx0aGlzLmVuYz0icGVtIn16KEksSyksTS5leHBv''@;'; put 'put ''cnRzPUksSS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj1LLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLGspLnRvU3RyaW5nKCJiYXNlNjQiKSxWPVsiLS0tLS1CRUdJTiAiK0UubGFiZWwrIi0tLS0tIl07Zm9yKGxldCBCPTA7QjxqLmxlbmd0aDtCKz02NClWLnB1''@;'; put 'put ''c2goai5zbGljZShCLEIrNjQpKTtyZXR1cm4gVi5wdXNoKCItLS0tLUVORCAiK0UubGFiZWwrIi0tLS0tIiksVi5qb2luKCJcbiIpfX0sNDU5MDpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Q3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKGcsQyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4o''@;'; put 'put ''ZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChD''@;'; put 'put ''KTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5s''@;'; put 'put ''ZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBl''@;'; put 'put ''Ll9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYm''@;'; put 'put ''Qzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5f''@;'; put 'put ''aW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2Mjcz''@;'; put 'put ''NzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMu''@;'; put 'put ''X2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5n''@;'; put 'put ''dGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMu''@;'; put 'put ''d29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jk''@;'; put 'put ''c1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMp''@;'; put 'put ''e3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49''@;'; put 'put ''Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jk''@;'; put 'put ''c1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9Njcx''@;'; put 'put ''MDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRz''@;'; put 'put ''WzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9''@;'; put 'put ''dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5s''@;'; put 'put ''ZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4i''@;'; put 'put ''fTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVd''@;'; put 'put ''LHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2''@;'; put 'put ''NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVn''@;'; put 'put ''YXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtm''@;'; put 'put ''ZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82''@;'; put 'put ''NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8''@;'; put 'put ''MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2''@;'; put 'put ''LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYp''@;'; put 'put ''e3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9''@;'; put 'put ''Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEs''@;'; put 'put ''Ik51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1''@;'; put 'put ''cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5''@;'; put 'put ''dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRo''@;'; put 'put ''aXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5k''@;'; put 'put ''bG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+''@;'; put 'put ''Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+''@;'; put 'put ''PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0''@;'; put 'put ''aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtp''@;'; put 'put ''ZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFi''@;'; put 'put ''cygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlw''@;'; put 'put ''ZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnBy''@;'; put 'put ''b3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlv''@;'; put 'put ''cih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0''@;'; put 'put ''aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5u''@;'; put 'put ''ZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIg''@;'; put 'put ''dj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBl''@;'; put 'put ''Lml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3Io''@;'; put 'put ''dGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0w''@;'; put 'put ''KTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2''@;'; put 'put ''Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1''@;'; put 'put ''cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25v''@;'; put 'put ''cm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1w''@;'; put 'put ''JiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxT''@;'; put 'put ''Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49''@;'; put 'put ''MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUu''@;'; put 'put ''aXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2''@;'; put 'put ''Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09''@;'; put 'put ''dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBl''@;'; put 'put ''LnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxCZT04MTkx''@;'; put 'put ''Jk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsSmU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6''@;'; put 'put ''ZT1NZT4+PjEzLGl0PTB8Sls3XSx1dD04MTkxJml0LE10PWl0Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLE5uPTB8bmVbMV0sZnQ9ODE5MSZObixmbj1O''@;'; put 'put ''bj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCx2bj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLExuPTB8bmVbNl0senQ9ODE5MSZMbix5bj1M''@;'; put 'put ''bj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLE9uPTB8bmVbOF0sJHQ9ODE5MSZPbixGbj1Pbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9''@;'; put 'put ''TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEJlLGVuKSxwPShw''@;'; put 'put ''PU1hdGguaW11bChCZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3''@;'; put 'put ''PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKEJlLGZ0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEz''@;'; put 'put ''KXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZ''@;'; put 'put ''ZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoSmUsZnQpfDAsdz13K01hdGguaW11bChKZSxmbil8MCx2PXYrTWF0aC5pbXVsKEJlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0''@;'; put 'put ''KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx2bil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx2bil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3''@;'; put 'put ''MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGgu''@;'; put 'put ''aW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0KXwwLHY9ditNYXRoLmltdWwoQmUsTnQpfDAscD0ocD1wK01hdGguaW11bChCZSx2bil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2Usdm4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSso''@;'; put 'put ''cD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDAp''@;'; put 'put ''K01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKFllLHZuKXwwKStNYXRoLmltdWwoSmUsTnQpfDAsdz13K01hdGguaW11bChKZSx2bil8MCx2PXYrTWF0aC5pbXVsKEJlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUr''@;'; put 'put ''KHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5p''@;'; put 'put ''bXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2''@;'; put 'put ''PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSx2bil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytN''@;'; put 'put ''YXRoLmltdWwoYmUsdm4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChKZSxKdCl8MCx2PXYrTWF0aC5pbXVsKEJlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsWXQpfDApK01hdGgu''@;'; put 'put ''aW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBGcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8''@;'; put 'put ''MCkrKHA+Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChUZSx2bil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsdm4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChKZSxwdCl8MCx3PXcrTWF0aC5pbXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoQmUsenQpfDAscD0ocD1wK01hdGguaW11bChCZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8''@;'; put 'put ''MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3''@;'; put 'put ''PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHZuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCx2bil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KEJlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxGbil8MCkrTWF0aC5pbXVsKEZl''@;'; put 'put ''LCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxGbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12''@;'; put 'put ''K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSx2bil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsdm4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxKdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKEJlLCR0''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsRm4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXww''@;'; put 'put ''KSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGgu''@;'; put 'put ''aW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsdm4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVs''@;'; put 'put ''KE10LHZuKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxKdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQs''@;'; put 'put ''cHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxC''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxGbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVs''@;'; put 'put ''KEJlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQmUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0o''@;'; put 'put ''cD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCx2bil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sdm4pfDAsdj12K01hdGguaW11bCh1''@;'; put 'put ''dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEp0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxKdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0''@;'; put 'put ''KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAs''@;'; put 'put ''dz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsRm4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0o''@;'; put 'put ''cD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKEplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChKZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCx2bikpK01hdGgu''@;'; put 'put ''aW11bChibixOdCl8MCx3PU1hdGguaW11bChibix2biksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''dXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3Zh''@;'; put 'put ''ciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYz''@;'; put 'put ''LHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxKdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChv''@;'; put 'put ''bixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNu''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStN''@;'; put 'put ''YXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLEZuKXwwO3ZhciB5cj0oZmUrKHY9ditN''@;'; put 'put ''YXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0''@;'; put 'put ''LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsRm4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixC''@;'; put 'put ''biksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEZuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixGbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4p''@;'; put 'put ''fDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsRm4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRo''@;'; put 'put ''LmltdWwoYm4sRm4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYp''@;'; put 'put ''fDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXww''@;'; put 'put ''LHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1GcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxk''@;'; put 'put ''ZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUu''@;'; put 'put ''cHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5l''@;'; put 'put ''Z2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgo''@;'; put 'put ''MCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4''@;'; put 'put ''ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJh''@;'; put 'put ''eShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8Qztw''@;'; put 'put ''Kyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYs''@;'; put 'put ''cCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09l''@;'; put 'put ''PEo7T2UrKyl7dmFyIEJlPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxKZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1CZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09QmUtS2Usdlt4ZStPZStKXT1XZS1ZZSxP''@;'; put 'put ''ZSE9PW5lJiYoSmU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9SmUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5w''@;'; put 'put ''cm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEz''@;'; put 'put ''Yj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlw''@;'; put 'put ''ZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2Uu''@;'; put 'put ''cHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5t''@;'; put 'put ''YWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3Jk''@;'; put 'put ''cyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgQmU9bmVbT2VdKnhlW09lXS1kZVtP''@;'; put 'put ''ZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPUJlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxT''@;'; put 'put ''Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRo''@;'; put 'put ''aXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSso''@;'; put 'put ''NjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0''@;'; put 'put ''aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZh''@;'; put 'put ''ciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0''@;'; put 'put ''aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0o''@;'; put 'put ''MHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRz''@;'; put 'put ''W0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKysp''@;'; put 'put ''bmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRo''@;'; put 'put ''aXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25l''@;'; put 'put ''Lmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJv''@;'; put 'put ''dG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5p''@;'; put 'put ''c2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxl''@;'; put 'put ''bmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUu''@;'; put 'put ''cHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcp''@;'; put 'put ''fSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6''@;'; put 'put ''dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtp''@;'; put 'put ''ZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0o''@;'; put 'put ''MHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYz''@;'; put 'put ''JnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0s''@;'; put 'put ''RS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7''@;'; put 'put ''dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5z''@;'; put 'put ''dWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgu''@;'; put 'put ''bWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3Ry''@;'; put 'put ''aXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1D''@;'; put 'put ''JiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihn''@;'; put 'put ''LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9''@;'; put 'put ''LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVz''@;'; put 'put ''aHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBD''@;'; put 'put ''PTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFy''@;'; put 'put ''IHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihn''@;'; put 'put ''KXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZT''@;'; put 'put ''LmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4''@;'; put 'put ''ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtG''@;'; put 'put ''ZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6''@;'; put 'put ''dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcg''@;'; put 'put ''RSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSiks''@;'; put 'put ''cC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3''@;'; put 'put ''KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFi''@;'; put 'put ''cygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3Io''@;'; put 'put ''O1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNb''@;'; put 'put ''U118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlz''@;'; put 'put ''fSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53''@;'; put 'put ''b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlz''@;'; put 'put ''LmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9''@;'; put 'put ''LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5''@;'; put 'put ''cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9''@;'; put 'put ''LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJl''@;'; put 'put ''ZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMs''@;'; put 'put ''Zyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJy''@;'; put 'put ''ZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMs''@;'; put 'put ''Zyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNx''@;'; put 'put ''ciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQu''@;'; put 'put ''c3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJl''@;'; put 'put ''ZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywx''@;'; put 'put ''NiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJw''@;'; put 'put ''MTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQi''@;'; put 'put ''KX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24g''@;'; put 'put ''TihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkp''@;'; put 'put ''LHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5f''@;'; put 'put ''dG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMu''@;'; put 'put ''aW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5z''@;'; put 'put ''dHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlv''@;'; put 'put ''bihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9y''@;'; put 'put ''KEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90''@;'; put 'put ''eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYr''@;'; put 'put ''KEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAs''@;'; put 'put ''Uz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVb''@;'; put 'put ''Z107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1D''@;'; put 'put ''LEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMp''@;'; put 'put ''e0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnBy''@;'; put 'put ''aW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnBy''@;'; put 'put ''b3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5Mihn''@;'; put 'put ''LEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3Zl''@;'; put 'put ''cmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxD''@;'; put 'put ''KSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYo''@;'; put 'put ''Zy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVy''@;'; put 'put ''bygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50''@;'; put 'put ''b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxl''@;'; put 'put ''LEJlPTA7MCE9PU9lLmNtcCh3KTtCZSsrKU9lPU9lLnJlZFNxcigpO0koQmU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtQmUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1CZX1yZXR1cm4geGV9LEgucHJv''@;'; put 'put ''dG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSly''@;'; put 'put ''ZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7''@;'; put 'put ''dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkp''@;'; put 'put ''LDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4g''@;'; put 'put ''Qz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7''@;'; put 'put ''aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhp''@;'; put 'put ''cy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1''@;'; put 'put ''cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5t''@;'; put 'put ''KT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMp''@;'; put 'put ''fX0oTT1SLm5tZChNKSx0aGlzKX0sOTI4MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpO2Z1bmN0aW9uIEkoZmUpe3JldHVybihJPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9u''@;'; put 'put ''KHhlKXtyZXR1cm4gdHlwZW9mIHhlfTpmdW5jdGlvbih4ZSl7cmV0dXJuIHhlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ4ZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmeGUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB4ZX0pKGZlKX12YXIgayxFLGo9UigyMTM2KS5j''@;'; put 'put ''b2RlcyxWPWouRVJSX0FNQklHVU9VU19BUkdVTUVOVCxCPWouRVJSX0lOVkFMSURfQVJHX1RZUEUsWT1qLkVSUl9JTlZBTElEX0FSR19WQUxVRSxYPWouRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFLFU9ai5FUlJfTUlTU0lOR19BUkdTLHE9Uig1OTYxKSxlZT1SKDk1MzkpLmluc3BlY3QsdGU9''@;'; put 'put ''Uig5NTM5KS50eXBlcyxvZT10ZS5pc1Byb21pc2Usc2U9dGUuaXNSZWdFeHAsaGU9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduOlIoODA5MSkuYXNzaWduLHVlPU9iamVjdC5pcz9PYmplY3QuaXM6Uig2MDkpO2Z1bmN0aW9uIGNlKCl7dmFyIGZlPVIoOTE1OCk7az1mZS5pc0RlZXBFcXVh''@;'; put 'put ''bCxFPWZlLmlzRGVlcFN0cmljdEVxdWFsfXZhciBHPSExLGI9TS5leHBvcnRzPWcsRD17fTtmdW5jdGlvbiBIKGZlKXt0aHJvdyBmZS5tZXNzYWdlIGluc3RhbmNlb2YgRXJyb3I/ZmUubWVzc2FnZTpuZXcgcShmZSl9ZnVuY3Rpb24gTihmZSx4ZSxMZSxGZSl7aWYoIUxlKXt2YXIgT2U9ITE7''@;'; put 'put ''aWYoMD09PXhlKU9lPSEwLEZlPSJObyB2YWx1ZSBhcmd1bWVudCBwYXNzZWQgdG8gYGFzc2VydC5vaygpYCI7ZWxzZSBpZihGZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IEZlO3ZhciBCZT1uZXcgcSh7YWN0dWFsOkxlLGV4cGVjdGVkOiEwLG1lc3NhZ2U6RmUsb3BlcmF0b3I6Ij09IixzdGFj''@;'; put 'put ''a1N0YXJ0Rm46ZmV9KTt0aHJvdyBCZS5nZW5lcmF0ZWRNZXNzYWdlPU9lLEJlfX1mdW5jdGlvbiBnKCl7Zm9yKHZhciBmZT1hcmd1bWVudHMubGVuZ3RoLHhlPW5ldyBBcnJheShmZSksTGU9MDtMZTxmZTtMZSsrKXhlW0xlXT1hcmd1bWVudHNbTGVdO04uYXBwbHkodm9pZCAwLFtnLHhlLmxl''@;'; put 'put ''bmd0aF0uY29uY2F0KHhlKSl9Yi5mYWlsPWZ1bmN0aW9uIGZlKHhlLExlLEZlLE9lLEJlKXt2YXIgV2UsS2U9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09S2U/V2U9IkZhaWxlZCI6MT09PUtlPyhGZT14ZSx4ZT12b2lkIDApOighMT09PUcmJihHPSEwLCh6LmVtaXRXYXJuaW5nP3ouZW1pdFdh''@;'; put 'put ''cm5pbmc6Sy53YXJuLmJpbmQoSykpKCJhc3NlcnQuZmFpbCgpIHdpdGggbW9yZSB0aGFuIG9uZSBhcmd1bWVudCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFzc2VydC5zdHJpY3RFcXVhbCgpIGluc3RlYWQgb3Igb25seSBwYXNzIGEgbWVzc2FnZS4iLCJEZXByZWNhdGlvbldhcm5pbmci''@;'; put 'put ''LCJERVAwMDk0IikpLDI9PT1LZSYmKE9lPSIhPSIpKSxGZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IEZlO3ZhciBZZT17YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG9wZXJhdG9yOnZvaWQgMD09PU9lPyJmYWlsIjpPZSxzdGFja1N0YXJ0Rm46QmV8fGZlfTt2b2lkIDAhPT1GZSYmKFllLm1lc3Nh''@;'; put 'put ''Z2U9RmUpO3ZhciBKZT1uZXcgcShZZSk7dGhyb3cgV2UmJihKZS5tZXNzYWdlPVdlLEplLmdlbmVyYXRlZE1lc3NhZ2U9ITApLEplfSxiLkFzc2VydGlvbkVycm9yPXEsYi5vaz1nLGIuZXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcg''@;'; put 'put ''VSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt4ZSE9TGUmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcg''@;'; put 'put ''VSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt4ZT09TGUmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiIhPSIsc3RhY2tTdGFydEZuOmZlfSl9LGIuZGVlcEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3''@;'; put 'put ''IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09ayYmY2UoKSxrKHhlLExlKXx8SCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6ImRlZXBFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90RGVlcEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtp''@;'; put 'put ''Zihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09ayYmY2UoKSxrKHhlLExlKSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6Im5vdERlZXBFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIuZGVl''@;'; put 'put ''cFN0cmljdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09ayYmY2UoKSxFKHhlLExlKXx8SCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6ImRl''@;'; put 'put ''ZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09ayYmY2UoKSxFKHhlLExlKSYmSCh7YWN0''@;'; put 'put ''dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6Im5vdERlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIuc3RyaWN0RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0''@;'; put 'put ''ZWQiKTt1ZSh4ZSxMZSl8fEgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJzdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9LGIubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcg''@;'; put 'put ''VSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt1ZSh4ZSxMZSkmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJub3RTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmZlfSl9O3ZhciBDPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXt2YXIgT2U9dGhpczsoZnVuY3Rpb24o''@;'; put 'put ''QmUsV2Upe2lmKCEoQmUgaW5zdGFuY2VvZiBXZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGZlKSxMZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXtCZSBpbiB4ZSYmKE9lW0JlXT12b2lkIDAhPT1GZSYmInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBGZVtCZV0mJnNlKHhlW0JlXSkmJnhlW0JlXS50ZXN0KEZlW0JlXSk/RmVbQmVdOnhlW0JlXSl9KX07ZnVuY3Rpb24gUyhmZSx4ZSxMZSxGZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHhlKXtpZihzZSh4ZSkpcmV0dXJuIHhlLnRlc3QoZmUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''KXRocm93IG5ldyBCKCJleHBlY3RlZCIsWyJGdW5jdGlvbiIsIlJlZ0V4cCJdLHhlKTtpZigib2JqZWN0IiE9PUkoZmUpfHxudWxsPT09ZmUpe3ZhciBPZT1uZXcgcSh7YWN0dWFsOmZlLGV4cGVjdGVkOnhlLG1lc3NhZ2U6TGUsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFy''@;'; put 'put ''dEZuOkZlfSk7dGhyb3cgT2Uub3BlcmF0b3I9RmUubmFtZSxPZX12YXIgQmU9T2JqZWN0LmtleXMoeGUpO2lmKHhlIGluc3RhbmNlb2YgRXJyb3IpQmUucHVzaCgibmFtZSIsIm1lc3NhZ2UiKTtlbHNlIGlmKDA9PT1CZS5sZW5ndGgpdGhyb3cgbmV3IFkoImVycm9yIix4ZSwibWF5IG5vdCBi''@;'; put 'put ''ZSBhbiBlbXB0eSBvYmplY3QiKTtyZXR1cm4gdm9pZCAwPT09ayYmY2UoKSxCZS5mb3JFYWNoKGZ1bmN0aW9uKFdlKXsic3RyaW5nIj09dHlwZW9mIGZlW1dlXSYmc2UoeGVbV2VdKSYmeGVbV2VdLnRlc3QoZmVbV2VdKXx8ZnVuY3Rpb24oS2UsWWUsSmUsbHQsUGUsYmUpe2lmKCEoSmUgaW4g''@;'; put 'put ''S2UpfHwhRShLZVtKZV0sWWVbSmVdKSl7aWYoIWx0KXt2YXIgQWU9bmV3IEMoS2UsUGUpLFRlPW5ldyBDKFllLFBlLEtlKSxxZT1uZXcgcSh7YWN0dWFsOkFlLGV4cGVjdGVkOlRlLG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpiZX0pO3Rocm93IHFlLmFjdHVhbD1L''@;'; put 'put ''ZSxxZS5leHBlY3RlZD1ZZSxxZS5vcGVyYXRvcj1iZS5uYW1lLHFlfUgoe2FjdHVhbDpLZSxleHBlY3RlZDpZZSxtZXNzYWdlOmx0LG9wZXJhdG9yOmJlLm5hbWUsc3RhY2tTdGFydEZuOmJlfSl9fShmZSx4ZSxXZSxMZSxCZSxGZSl9KSwhMH1yZXR1cm4gdm9pZCAwIT09eGUucHJvdG90eXBl''@;'; put 'put ''JiZmZSBpbnN0YW5jZW9mIHhlfHwhRXJyb3IuaXNQcm90b3R5cGVPZih4ZSkmJiEwPT09eGUuY2FsbCh7fSxmZSl9ZnVuY3Rpb24gdihmZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGZlKXRocm93IG5ldyBCKCJmbiIsIkZ1bmN0aW9uIixmZSk7dHJ5e2ZlKCl9Y2F0Y2goeGUpe3JldHVybiB4''@;'; put 'put ''ZX1yZXR1cm4gRH1mdW5jdGlvbiBwKGZlKXtyZXR1cm4gb2UoZmUpfHxudWxsIT09ZmUmJiJvYmplY3QiPT09SShmZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBmZS50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgZmUuY2F0Y2h9ZnVuY3Rpb24gdyhmZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgp''@;'; put 'put ''LnRoZW4oZnVuY3Rpb24oKXt2YXIgeGU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGZlKXtpZighcCh4ZT1mZSgpKSl0aHJvdyBuZXcgWCgiaW5zdGFuY2Ugb2YgUHJvbWlzZSIsInByb21pc2VGbiIseGUpfWVsc2V7aWYoIXAoZmUpKXRocm93IG5ldyBCKCJwcm9taXNlRm4iLFsiRnVuY3Rpb24i''@;'; put 'put ''LCJQcm9taXNlIl0sZmUpO3hlPWZlfXJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHhlfSkudGhlbihmdW5jdGlvbigpe3JldHVybiBEfSkuY2F0Y2goZnVuY3Rpb24oTGUpe3JldHVybiBMZX0pfSl9ZnVuY3Rpb24gSihmZSx4ZSxMZSxGZSl7aWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBMZSl7aWYoND09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEIoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxMZSk7aWYoIm9iamVjdCI9PT1JKHhlKSYmbnVsbCE9PXhlKXtpZih4ZS5tZXNzYWdlPT09TGUpdGhyb3cgbmV3''@;'; put 'put ''IFYoImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgbWVzc2FnZSAiJy5jb25jYXQoeGUubWVzc2FnZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpfWVsc2UgaWYoeGU9PT1MZSl0aHJvdyBuZXcgVigiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciAiJy5jb25jYXQoeGUsJyIg''@;'; put 'put ''aXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKTtGZT1MZSxMZT12b2lkIDB9ZWxzZSBpZihudWxsIT1MZSYmIm9iamVjdCIhPT1JKExlKSYmImZ1bmN0aW9uIiE9dHlwZW9mIExlKXRocm93IG5ldyBCKCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhwIl0s''@;'; put 'put ''TGUpO2lmKHhlPT09RCl7dmFyIE9lPSIiO0xlJiZMZS5uYW1lJiYoT2UrPSIgKCIuY29uY2F0KExlLm5hbWUsIikiKSksT2UrPUZlPyI6ICIuY29uY2F0KEZlKToiLiIsSCh7YWN0dWFsOnZvaWQgMCxleHBlY3RlZDpMZSxvcGVyYXRvcjpmZS5uYW1lLG1lc3NhZ2U6Ik1pc3NpbmcgZXhwZWN0''@;'; put 'put ''ZWQgIi5jb25jYXQoInJlamVjdHMiPT09ZmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KE9lKSxzdGFja1N0YXJ0Rm46ZmV9KX1pZihMZSYmIVMoeGUsTGUsRmUsZmUpKXRocm93IHhlfWZ1bmN0aW9uIG5lKGZlLHhlLExlLEZlKXtpZih4ZSE9PUQpe2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgTGUmJihGZT1MZSxMZT12b2lkIDApLCFMZXx8Uyh4ZSxMZSkpe3ZhciBPZT1GZT8iOiAiLmNvbmNhdChGZSk6Ii4iO0goe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxvcGVyYXRvcjpmZS5uYW1lLG1lc3NhZ2U6IkdvdCB1bndhbnRlZCAiLmNvbmNhdCgiZG9lc05vdFJlamVjdCI9''@;'; put 'put ''PT1mZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQoT2UsIlxuIikrJ0FjdHVhbCBtZXNzYWdlOiAiJy5jb25jYXQoeGUmJnhlLm1lc3NhZ2UsJyInKSxzdGFja1N0YXJ0Rm46ZmV9KX10aHJvdyB4ZX19ZnVuY3Rpb24gZGUoKXtmb3IodmFyIGZlPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgseGU9bmV3IEFycmF5KGZlKSxMZT0wO0xlPGZlO0xlKyspeGVbTGVdPWFyZ3VtZW50c1tMZV07Ti5hcHBseSh2b2lkIDAsW2RlLHhlLmxlbmd0aF0uY29uY2F0KHhlKSl9Yi50aHJvd3M9ZnVuY3Rpb24gZmUoeGUpe2Zvcih2YXIgTGU9YXJndW1lbnRzLmxlbmd0aCxGZT1uZXcgQXJyYXko''@;'; put 'put ''TGU+MT9MZS0xOjApLE9lPTE7T2U8TGU7T2UrKylGZVtPZS0xXT1hcmd1bWVudHNbT2VdO0ouYXBwbHkodm9pZCAwLFtmZSx2KHhlKV0uY29uY2F0KEZlKSl9LGIucmVqZWN0cz1mdW5jdGlvbiBmZSh4ZSl7Zm9yKHZhciBMZT1hcmd1bWVudHMubGVuZ3RoLEZlPW5ldyBBcnJheShMZT4xP0xl''@;'; put 'put ''LTE6MCksT2U9MTtPZTxMZTtPZSsrKUZlW09lLTFdPWFyZ3VtZW50c1tPZV07cmV0dXJuIHcoeGUpLnRoZW4oZnVuY3Rpb24oQmUpe3JldHVybiBKLmFwcGx5KHZvaWQgMCxbZmUsQmVdLmNvbmNhdChGZSkpfSl9LGIuZG9lc05vdFRocm93PWZ1bmN0aW9uIGZlKHhlKXtmb3IodmFyIExlPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgsRmU9bmV3IEFycmF5KExlPjE/TGUtMTowKSxPZT0xO09lPExlO09lKyspRmVbT2UtMV09YXJndW1lbnRzW09lXTtuZS5hcHBseSh2b2lkIDAsW2ZlLHYoeGUpXS5jb25jYXQoRmUpKX0sYi5kb2VzTm90UmVqZWN0PWZ1bmN0aW9uIGZlKHhlKXtmb3IodmFyIExlPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgsRmU9bmV3IEFycmF5KExlPjE/TGUtMTowKSxPZT0xO09lPExlO09lKyspRmVbT2UtMV09YXJndW1lbnRzW09lXTtyZXR1cm4gdyh4ZSkudGhlbihmdW5jdGlvbihCZSl7cmV0dXJuIG5lLmFwcGx5KHZvaWQgMCxbZmUsQmVdLmNvbmNhdChGZSkpfSl9LGIuaWZFcnJv''@;'; put 'put ''cj1mdW5jdGlvbiBmZSh4ZSl7aWYobnVsbCE9eGUpe3ZhciBMZT0iaWZFcnJvciBnb3QgdW53YW50ZWQgZXhjZXB0aW9uOiAiOyJvYmplY3QiPT09SSh4ZSkmJiJzdHJpbmciPT10eXBlb2YgeGUubWVzc2FnZT9MZSs9MD09PXhlLm1lc3NhZ2UubGVuZ3RoJiZ4ZS5jb25zdHJ1Y3Rvcj94ZS5j''@;'; put 'put ''b25zdHJ1Y3Rvci5uYW1lOnhlLm1lc3NhZ2U6TGUrPWVlKHhlKTt2YXIgRmU9bmV3IHEoe2FjdHVhbDp4ZSxleHBlY3RlZDpudWxsLG9wZXJhdG9yOiJpZkVycm9yIixtZXNzYWdlOkxlLHN0YWNrU3RhcnRGbjpmZX0pLE9lPXhlLnN0YWNrO2lmKCJzdHJpbmciPT10eXBlb2YgT2Upe3ZhciBC''@;'; put 'put ''ZT1PZS5zcGxpdCgiXG4iKTtCZS5zaGlmdCgpO2Zvcih2YXIgV2U9RmUuc3RhY2suc3BsaXQoIlxuIiksS2U9MDtLZTxCZS5sZW5ndGg7S2UrKyl7dmFyIFllPVdlLmluZGV4T2YoQmVbS2VdKTtpZigtMSE9PVllKXtXZT1XZS5zbGljZSgwLFllKTticmVha319RmUuc3RhY2s9IiIuY29uY2F0''@;'; put 'put ''KFdlLmpvaW4oIlxuIiksIlxuIikuY29uY2F0KEJlLmpvaW4oIlxuIikpfXRocm93IEZlfX0sYi5zdHJpY3Q9aGUoZGUsYix7ZXF1YWw6Yi5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6Yi5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6Yi5ub3RTdHJpY3RFcXVhbCxub3REZWVwRXF1YWw6Yi5ub3RE''@;'; put 'put ''ZWVwU3RyaWN0RXF1YWx9KSxiLnN0cmljdC5zdHJpY3Q9Yi5zdHJpY3R9LDU5NjE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsoTixnLEMpe3JldHVybiBnIGluIE4/T2JqZWN0LmRlZmluZVByb3BlcnR5KE4sZyx7dmFsdWU6QyxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOk5bZ109QyxOfWZ1bmN0aW9uIGsoTixnKXtyZXR1cm4hZ3x8Im9iamVjdCIhPT1YKGcpJiYiZnVuY3Rpb24iIT10eXBlb2YgZz9FKE4pOmd9ZnVuY3Rpb24gRShOKXtpZih2b2lkIDA9PT1OKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigi''@;'; put 'put ''dGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIE59ZnVuY3Rpb24gaihOKXt2YXIgZz0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybiBqPWZ1bmN0aW9uKEMpe2lmKG51bGw9PT1DfHwtMT09''@;'; put 'put ''PUZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQykuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpKXJldHVybiBDO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBDKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7aWYodm9p''@;'; put 'put ''ZCAwIT09Zyl7aWYoZy5oYXMoQykpcmV0dXJuIGcuZ2V0KEMpO2cuc2V0KEMsdil9ZnVuY3Rpb24gdigpe3JldHVybiBWKEMsYXJndW1lbnRzLFkodGhpcykuY29uc3RydWN0b3IpfXJldHVybiB2LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFs''@;'; put 'put ''dWU6dixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxCKHYsQyl9LGooTil9ZnVuY3Rpb24gVihOLGcsQyl7cmV0dXJuKFY9ZnVuY3Rpb24oKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hh''@;'; put 'put ''bSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpP1JlZmxlY3QuY29uc3Ry''@;'; put 'put ''dWN0OmZ1bmN0aW9uKFMsdixwKXt2YXIgdz1bbnVsbF07dy5wdXNoLmFwcGx5KHcsdik7dmFyIEo9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoUyx3KSk7cmV0dXJuIHAmJkIoSixwLnByb3RvdHlwZSksSn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBCKE4sZyl7cmV0dXJuKEI9''@;'; put 'put ''T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihDLFMpe3JldHVybiBDLl9fcHJvdG9fXz1TLEN9KShOLGcpfWZ1bmN0aW9uIFkoTil7cmV0dXJuKFk9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihnKXtyZXR1cm4gZy5fX3Byb3RvX198''@;'; put 'put ''fE9iamVjdC5nZXRQcm90b3R5cGVPZihnKX0pKE4pfWZ1bmN0aW9uIFgoTil7cmV0dXJuKFg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZyl7cmV0dXJuIHR5cGVvZiBnfTpmdW5jdGlvbihnKXtyZXR1cm4gZyYm''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZy5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZyE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGd9KShOKX12YXIgVT1SKDk1MzkpLmluc3BlY3QscT1SKDIxMzYpLmNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFO2Z1bmN0aW9uIGVl''@;'; put 'put ''KE4sZyxDKXtyZXR1cm4odm9pZCAwPT09Q3x8Qz5OLmxlbmd0aCkmJihDPU4ubGVuZ3RoKSxOLnN1YnN0cmluZyhDLWcubGVuZ3RoLEMpPT09Z312YXIgdGU9IiIsb2U9IiIsc2U9IiIsaGU9IiIsdWU9e2RlZXBTdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGRl''@;'; put 'put ''ZXAtZXF1YWw6IixzdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGVxdWFsOiIsc3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsZGVlcEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMg''@;'; put 'put ''dG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsOiIsZXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGVxdWFsOiIsbm90RGVlcFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFsOidFeHBl''@;'; put 'put ''Y3RlZCAiYWN0dWFsIiB0byBiZSBzdHJpY3RseSB1bmVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLG5vdERlZXBFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJl''@;'; put 'put ''IGxvb3NlbHkgZGVlcC1lcXVhbCB0bzonLG5vdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBsb29zZWx5IHVuZXF1YWwgdG86Jyxub3RJZGVudGljYWw6IlZhbHVlcyBpZGVudGljYWwgYnV0IG5vdCByZWZlcmVuY2UtZXF1YWw6In07ZnVuY3Rpb24gRyhOKXt2YXIgZz1PYmplY3Qu''@;'; put 'put ''a2V5cyhOKSxDPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKE4pKTtyZXR1cm4gZy5mb3JFYWNoKGZ1bmN0aW9uKFMpe0NbU109TltTXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDLCJtZXNzYWdlIix7dmFsdWU6Ti5tZXNzYWdlfSksQ31mdW5jdGlvbiBiKE4pe3JldHVy''@;'; put 'put ''biBVKE4se2NvbXBhY3Q6ITEsY3VzdG9tSW5zcGVjdDohMSxkZXB0aDoxZTMsbWF4QXJyYXlMZW5ndGg6MS8wLHNob3dIaWRkZW46ITEsYnJlYWtMZW5ndGg6MS8wLHNob3dQcm94eTohMSxzb3J0ZWQ6ITAsZ2V0dGVyczohMH0pfXZhciBIPWZ1bmN0aW9uKE4pe2Z1bmN0aW9uIGcocCl7dmFy''@;'; put 'put ''IHc7aWYoZnVuY3Rpb24oWWUsSmUpe2lmKCEoWWUgaW5zdGFuY2VvZiBKZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZyksIm9iamVjdCIhPT1YKHApfHxudWxsPT09cCl0aHJvdyBuZXcgcSgib3B0aW9ucyIsIk9iamVj''@;'; put 'put ''dCIscCk7dmFyIEo9cC5tZXNzYWdlLG5lPXAub3BlcmF0b3IsZGU9cC5zdGFja1N0YXJ0Rm4sZmU9cC5hY3R1YWwseGU9cC5leHBlY3RlZCxMZT1FcnJvci5zdGFja1RyYWNlTGltaXQ7aWYoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTAsbnVsbCE9Sil3PWsodGhpcyxZKGcpLmNhbGwodGhpcyxT''@;'; put 'put ''dHJpbmcoSikpKTtlbHNlIGlmKHouc3RkZXJyJiZ6LnN0ZGVyci5pc1RUWSYmKHouc3RkZXJyJiZ6LnN0ZGVyci5nZXRDb2xvckRlcHRoJiYxIT09ei5zdGRlcnIuZ2V0Q29sb3JEZXB0aCgpPyh0ZT0iXHgxYlszNG0iLG9lPSJceDFiWzMybSIsaGU9Ilx4MWJbMzltIixzZT0iXHgxYlszMW0i''@;'; put 'put ''KToodGU9IiIsb2U9IiIsaGU9IiIsc2U9IiIpKSwib2JqZWN0Ij09PVgoZmUpJiZudWxsIT09ZmUmJiJvYmplY3QiPT09WCh4ZSkmJm51bGwhPT14ZSYmInN0YWNrImluIGZlJiZmZSBpbnN0YW5jZW9mIEVycm9yJiYic3RhY2siaW4geGUmJnhlIGluc3RhbmNlb2YgRXJyb3ImJihmZT1HKGZl''@;'; put 'put ''KSx4ZT1HKHhlKSksImRlZXBTdHJpY3RFcXVhbCI9PT1uZXx8InN0cmljdEVxdWFsIj09PW5lKXc9ayh0aGlzLFkoZykuY2FsbCh0aGlzLGZ1bmN0aW9uIEQoTixnLEMpe3ZhciBTPSIiLHY9IiIscD0wLHc9IiIsSj0hMSxuZT1iKE4pLGRlPW5lLnNwbGl0KCJcbiIpLGZlPWIoZykuc3BsaXQo''@;'; put 'put ''IlxuIikseGU9MCxMZT0iIjtpZigic3RyaWN0RXF1YWwiPT09QyYmIm9iamVjdCI9PT1YKE4pJiYib2JqZWN0Ij09PVgoZykmJm51bGwhPT1OJiZudWxsIT09ZyYmKEM9InN0cmljdEVxdWFsT2JqZWN0IiksMT09PWRlLmxlbmd0aCYmMT09PWZlLmxlbmd0aCYmZGVbMF0hPT1mZVswXSl7dmFy''@;'; put 'put ''IEZlPWRlWzBdLmxlbmd0aCtmZVswXS5sZW5ndGg7aWYoRmU8PTEwKXtpZighKCJvYmplY3QiPT09WChOKSYmbnVsbCE9PU58fCJvYmplY3QiPT09WChnKSYmbnVsbCE9PWd8fDA9PT1OJiYwPT09ZykpcmV0dXJuIiIuY29uY2F0KHVlW0NdLCJcblxuIikrIiIuY29uY2F0KGRlWzBdLCIgIT09''@;'; put 'put ''ICIpLmNvbmNhdChmZVswXSwiXG4iKX1lbHNlIGlmKCJzdHJpY3RFcXVhbE9iamVjdCIhPT1DJiZGZTwoei5zdGRlcnImJnouc3RkZXJyLmlzVFRZP3ouc3RkZXJyLmNvbHVtbnM6ODApKXtmb3IoO2RlWzBdW3hlXT09PWZlWzBdW3hlXTspeGUrKzt4ZT4yJiYoTGU9IlxuICAiLmNvbmNhdChm''@;'; put 'put ''dW5jdGlvbihxZSxYZSl7aWYoWGU9TWF0aC5mbG9vcihYZSksMD09cWUubGVuZ3RofHwwPT1YZSlyZXR1cm4iIjt2YXIgVWU9cWUubGVuZ3RoKlhlO2ZvcihYZT1NYXRoLmZsb29yKE1hdGgubG9nKFhlKS9NYXRoLmxvZygyKSk7WGU7KXFlKz1xZSxYZS0tO3JldHVybiBxZStxZS5zdWJzdHJp''@;'; put 'put ''bmcoMCxVZS1xZS5sZW5ndGgpfSgiICIseGUpLCJeIikseGU9MCl9fWZvcih2YXIgT2U9ZGVbZGUubGVuZ3RoLTFdLEJlPWZlW2ZlLmxlbmd0aC0xXTtPZT09PUJlJiYoeGUrKzwyP3c9IlxuICAiLmNvbmNhdChPZSkuY29uY2F0KHcpOlM9T2UsZGUucG9wKCksZmUucG9wKCksMCE9PWRlLmxl''@;'; put 'put ''bmd0aCYmMCE9PWZlLmxlbmd0aCk7KU9lPWRlW2RlLmxlbmd0aC0xXSxCZT1mZVtmZS5sZW5ndGgtMV07dmFyIFdlPU1hdGgubWF4KGRlLmxlbmd0aCxmZS5sZW5ndGgpO2lmKDA9PT1XZSl7dmFyIEtlPW5lLnNwbGl0KCJcbiIpO2lmKEtlLmxlbmd0aD4zMClmb3IoS2VbMjZdPSIiLmNvbmNh''@;'; put 'put ''dCh0ZSwiLi4uIikuY29uY2F0KGhlKTtLZS5sZW5ndGg+Mjc7KUtlLnBvcCgpO3JldHVybiIiLmNvbmNhdCh1ZS5ub3RJZGVudGljYWwsIlxuXG4iKS5jb25jYXQoS2Uuam9pbigiXG4iKSwiXG4iKX14ZT4zJiYodz0iXG4iLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKS5jb25jYXQodyks''@;'; put 'put ''Sj0hMCksIiIhPT1TJiYodz0iXG4gICIuY29uY2F0KFMpLmNvbmNhdCh3KSxTPSIiKTt2YXIgWWU9MCxKZT11ZVtDXSsiXG4iLmNvbmNhdChvZSwiKyBhY3R1YWwiKS5jb25jYXQoaGUsIiAiKS5jb25jYXQoc2UsIi0gZXhwZWN0ZWQiKS5jb25jYXQoaGUpLGx0PSIgIi5jb25jYXQodGUsIi4u''@;'; put 'put ''LiIpLmNvbmNhdChoZSwiIExpbmVzIHNraXBwZWQiKTtmb3IoeGU9MDt4ZTxXZTt4ZSsrKXt2YXIgUGU9eGUtcDtpZihkZS5sZW5ndGg8eGUrMSlQZT4xJiZ4ZT4yJiYoUGU+ND8odis9IlxuIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSksSj0hMCk6UGU+MyYmKHYrPSJcbiAgIi5jb25j''@;'; put 'put ''YXQoZmVbeGUtMl0pLFllKyspLHYrPSJcbiAgIi5jb25jYXQoZmVbeGUtMV0pLFllKyspLHA9eGUsUys9IlxuIi5jb25jYXQoc2UsIi0iKS5jb25jYXQoaGUsIiAiKS5jb25jYXQoZmVbeGVdKSxZZSsrO2Vsc2UgaWYoZmUubGVuZ3RoPHhlKzEpUGU+MSYmeGU+MiYmKFBlPjQ/KHYrPSJcbiIu''@;'; put 'put ''Y29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpLEo9ITApOlBlPjMmJih2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTJdKSxZZSsrKSx2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTFdKSxZZSsrKSxwPXhlLHYrPSJcbiIuY29uY2F0KG9lLCIrIikuY29uY2F0KGhlLCIgIikuY29uY2F0KGRlW3hlXSks''@;'; put 'put ''WWUrKztlbHNle3ZhciBiZT1mZVt4ZV0sQWU9ZGVbeGVdLFRlPUFlIT09YmUmJighZWUoQWUsIiwiKXx8QWUuc2xpY2UoMCwtMSkhPT1iZSk7VGUmJmVlKGJlLCIsIikmJmJlLnNsaWNlKDAsLTEpPT09QWUmJihUZT0hMSxBZSs9IiwiKSxUZT8oUGU+MSYmeGU+MiYmKFBlPjQ/KHYrPSJcbiIu''@;'; put 'put ''Y29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpLEo9ITApOlBlPjMmJih2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTJdKSxZZSsrKSx2Kz0iXG4gICIuY29uY2F0KGRlW3hlLTFdKSxZZSsrKSxwPXhlLHYrPSJcbiIuY29uY2F0KG9lLCIrIikuY29uY2F0KGhlLCIgIikuY29uY2F0KEFlKSxTKz0i''@;'; put 'put ''XG4iLmNvbmNhdChzZSwiLSIpLmNvbmNhdChoZSwiICIpLmNvbmNhdChiZSksWWUrPTIpOih2Kz1TLFM9IiIsMSE9PVBlJiYwIT09eGV8fCh2Kz0iXG4gICIuY29uY2F0KEFlKSxZZSsrKSl9aWYoWWU+MjAmJnhlPFdlLTIpcmV0dXJuIiIuY29uY2F0KEplKS5jb25jYXQobHQsIlxuIikuY29u''@;'; put 'put ''Y2F0KHYsIlxuIikuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpLmNvbmNhdChTLCJcbiIpKyIiLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKX1yZXR1cm4iIi5jb25jYXQoSmUpLmNvbmNhdChKP2x0OiIiLCJcbiIpLmNvbmNhdCh2KS5jb25jYXQoUykuY29uY2F0KHcpLmNvbmNhdChM''@;'; put 'put ''ZSl9KGZlLHhlLG5lKSkpO2Vsc2UgaWYoIm5vdERlZXBTdHJpY3RFcXVhbCI9PT1uZXx8Im5vdFN0cmljdEVxdWFsIj09PW5lKXt2YXIgRmU9dWVbbmVdLE9lPWIoZmUpLnNwbGl0KCJcbiIpO2lmKCJub3RTdHJpY3RFcXVhbCI9PT1uZSYmIm9iamVjdCI9PT1YKGZlKSYmbnVsbCE9PWZlJiYo''@;'; put 'put ''RmU9dWUubm90U3RyaWN0RXF1YWxPYmplY3QpLE9lLmxlbmd0aD4zMClmb3IoT2VbMjZdPSIiLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKTtPZS5sZW5ndGg+Mjc7KU9lLnBvcCgpO3c9ayh0aGlzLDE9PT1PZS5sZW5ndGg/WShnKS5jYWxsKHRoaXMsIiIuY29uY2F0KEZlLCIgIikuY29u''@;'; put 'put ''Y2F0KE9lWzBdKSk6WShnKS5jYWxsKHRoaXMsIiIuY29uY2F0KEZlLCJcblxuIikuY29uY2F0KE9lLmpvaW4oIlxuIiksIlxuIikpKX1lbHNle3ZhciBCZT1iKGZlKSxXZT0iIixLZT11ZVtuZV07Im5vdERlZXBFcXVhbCI9PT1uZXx8Im5vdEVxdWFsIj09PW5lPyhCZT0iIi5jb25jYXQodWVb''@;'; put 'put ''bmVdLCJcblxuIikuY29uY2F0KEJlKSkubGVuZ3RoPjEwMjQmJihCZT0iIi5jb25jYXQoQmUuc2xpY2UoMCwxMDIxKSwiLi4uIikpOihXZT0iIi5jb25jYXQoYih4ZSkpLEJlLmxlbmd0aD41MTImJihCZT0iIi5jb25jYXQoQmUuc2xpY2UoMCw1MDkpLCIuLi4iKSksV2UubGVuZ3RoPjUxMiYm''@;'; put 'put ''KFdlPSIiLmNvbmNhdChXZS5zbGljZSgwLDUwOSksIi4uLiIpKSwiZGVlcEVxdWFsIj09PW5lfHwiZXF1YWwiPT09bmU/QmU9IiIuY29uY2F0KEtlLCJcblxuIikuY29uY2F0KEJlLCJcblxuc2hvdWxkIGVxdWFsXG5cbiIpOldlPSIgIi5jb25jYXQobmUsIiAiKS5jb25jYXQoV2UpKSx3PWso''@;'; put 'put ''dGhpcyxZKGcpLmNhbGwodGhpcywiIi5jb25jYXQoQmUpLmNvbmNhdChXZSkpKX1yZXR1cm4gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PUxlLHcuZ2VuZXJhdGVkTWVzc2FnZT0hSixPYmplY3QuZGVmaW5lUHJvcGVydHkoRSh3KSwibmFtZSIse3ZhbHVlOiJBc3NlcnRpb25FcnJvciBbRVJSX0FT''@;'; put 'put ''U0VSVElPTl0iLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdy5jb2RlPSJFUlJfQVNTRVJUSU9OIix3LmFjdHVhbD1mZSx3LmV4cGVjdGVkPXhlLHcub3BlcmF0b3I9bmUsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNl''@;'; put 'put ''KEUodyksZGUpLHcubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLGsodyl9dmFyIFM7cmV0dXJuIGZ1bmN0aW9uKHAsdyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHcmJm51bGwhPT13KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1''@;'; put 'put ''bmN0aW9uIik7cC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh3JiZ3LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHcmJkIocCx3KX0oZyxOKSxTPVt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIi5j''@;'; put 'put ''b25jYXQodGhpcy5uYW1lLCIgWyIpLmNvbmNhdCh0aGlzLmNvZGUsIl06ICIpLmNvbmNhdCh0aGlzLm1lc3NhZ2UpfX0se2tleTpVLmN1c3RvbSx2YWx1ZTpmdW5jdGlvbihwLHcpe3JldHVybiBVKHRoaXMsZnVuY3Rpb24oSil7Zm9yKHZhciBuZT0xO25lPGFyZ3VtZW50cy5sZW5ndGg7bmUr''@;'; put 'put ''Kyl7dmFyIGRlPW51bGwhPWFyZ3VtZW50c1tuZV0/YXJndW1lbnRzW25lXTp7fSxmZT1PYmplY3Qua2V5cyhkZSk7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihmZT1mZS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhkZSkuZmls''@;'; put 'put ''dGVyKGZ1bmN0aW9uKHhlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkZSx4ZSkuZW51bWVyYWJsZX0pKSksZmUuZm9yRWFjaChmdW5jdGlvbih4ZSl7SyhKLHhlLGRlW3hlXSl9KX1yZXR1cm4gSn0oe30sdyx7Y3VzdG9tSW5zcGVjdDohMSxkZXB0aDowfSkpfX1d''@;'; put 'put ''LFMmJmZ1bmN0aW9uIEkoTixnKXtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl7dmFyIFM9Z1tDXTtTLmVudW1lcmFibGU9Uy5lbnVtZXJhYmxlfHwhMSxTLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gUyYmKFMud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFMua2V5''@;'; put 'put ''LFMpfX0oZy5wcm90b3R5cGUsUyksZ30oaihFcnJvcikpO00uZXhwb3J0cz1IfSwyMTM2OihNLE8sUik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geihYKXtyZXR1cm4oej0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlv''@;'; put 'put ''bihVKXtyZXR1cm4gdHlwZW9mIFV9OmZ1bmN0aW9uKFUpe3JldHVybiBVJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZVLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZVIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgVX0pKFgpfWZ1bmN0aW9uIEkoWCl7cmV0dXJuKEk9T2Jq''@;'; put 'put ''ZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihVKXtyZXR1cm4gVS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihVKX0pKFgpfWZ1bmN0aW9uIGsoWCxVKXtyZXR1cm4oaz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHEsZWUp''@;'; put 'put ''e3JldHVybiBxLl9fcHJvdG9fXz1lZSxxfSkoWCxVKX12YXIgRSxqLFY9e307ZnVuY3Rpb24gQihYLFUscSl7cXx8KHE9RXJyb3IpO3ZhciBlZT1mdW5jdGlvbih0ZSl7ZnVuY3Rpb24gb2Uoc2UsaGUsdWUpe3ZhciBjZTtyZXR1cm4gZnVuY3Rpb24oRyxiKXtpZighKEcgaW5zdGFuY2VvZiBi''@;'; put 'put ''KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxvZSksY2U9ZnVuY3Rpb24gSyhYLFUpe3JldHVybiFVfHwib2JqZWN0IiE9PXooVSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBVP2Z1bmN0aW9uKHEpe2lmKHZvaWQgMD09PXEpdGhy''@;'; put 'put ''b3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gcX0oWCk6VX0odGhpcyxJKG9lKS5jYWxsKHRoaXMsInN0cmluZyI9PXR5cGVvZiBVP1U6VShzZSxoZSx1ZSkpKSxjZS5jb2RlPVgs''@;'; put 'put ''Y2V9cmV0dXJuIGZ1bmN0aW9uKHNlLGhlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgaGUmJm51bGwhPT1oZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3NlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGhl''@;'; put 'put ''JiZoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpzZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksaGUmJmsoc2UsaGUpfShvZSx0ZSksb2V9KHEpO1ZbWF09ZWV9ZnVuY3Rpb24gWShYLFUpe2lmKEFycmF5LmlzQXJyYXkoWCkpe3ZhciBxPVgubGVuZ3RoO3JldHVybiBY''@;'; put 'put ''PVgubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4gU3RyaW5nKGVlKX0pLHE+Mj8ib25lIG9mICIuY29uY2F0KFUsIiAiKS5jb25jYXQoWC5zbGljZSgwLHEtMSkuam9pbigiLCAiKSwiLCBvciAiKStYW3EtMV06Mj09PXE/Im9uZSBvZiAiLmNvbmNhdChVLCIgIikuY29uY2F0KFhbMF0sIiBvciAi''@;'; put 'put ''KS5jb25jYXQoWFsxXSk6Im9mICIuY29uY2F0KFUsIiAiKS5jb25jYXQoWFswXSl9cmV0dXJuIm9mICIuY29uY2F0KFUsIiAiKS5jb25jYXQoU3RyaW5nKFgpKX1CKCJFUlJfQU1CSUdVT1VTX0FSR1VNRU5UIiwnVGhlICIlcyIgYXJndW1lbnQgaXMgYW1iaWd1b3VzLiAlcycsVHlwZUVycm9y''@;'; put 'put ''KSxCKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oWCxVLHEpe3ZhciBlZSxzZSx1ZSxHO2lmKHZvaWQgMD09PUUmJihFPVIoOTI4MikpLEUoInN0cmluZyI9PXR5cGVvZiBYLCInbmFtZScgbXVzdCBiZSBhIHN0cmluZyIpLCJzdHJpbmciPT10eXBlb2YgVSYmIm5vdCAiPT09VS5z''@;'; put 'put ''dWJzdHIoMCw0KT8oZWU9Im11c3Qgbm90IGJlIixVPVUucmVwbGFjZSgvXm5vdCAvLCIiKSk6ZWU9Im11c3QgYmUiLHVlPVgsKHZvaWQgMD09PUd8fEc+dWUubGVuZ3RoKSYmKEc9dWUubGVuZ3RoKSwiIGFyZ3VtZW50Ij09PXVlLnN1YnN0cmluZyhHLTksRykpc2U9IlRoZSAiLmNvbmNhdChY''@;'; put 'put ''LCIgIikuY29uY2F0KGVlLCIgIikuY29uY2F0KFkoVSwidHlwZSIpKTtlbHNle3ZhciBoZT1mdW5jdGlvbih1ZSxjZSxHKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIEcmJihHPTApLCEoRysxPnVlLmxlbmd0aCkmJi0xIT09dWUuaW5kZXhPZigiLiIsRyl9KFgpPyJwcm9wZXJ0eSI6ImFyZ3Vt''@;'; put 'put ''ZW50IjtzZT0nVGhlICInLmNvbmNhdChYLCciICcpLmNvbmNhdChoZSwiICIpLmNvbmNhdChlZSwiICIpLmNvbmNhdChZKFUsInR5cGUiKSl9cmV0dXJuIHNlKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQoeihxKSl9LFR5cGVFcnJvciksQigiRVJSX0lOVkFMSURfQVJHX1ZBTFVFIixmdW5j''@;'; put 'put ''dGlvbihYLFUpe3ZhciBxPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiaXMgaW52YWxpZCI7dm9pZCAwPT09aiYmKGo9Uig5NTM5KSk7dmFyIGVlPWouaW5zcGVjdChVKTtyZXR1cm4gZWUubGVuZ3RoPjEyOCYmKGVlPSIiLmNvbmNhdChl''@;'; put 'put ''ZS5zbGljZSgwLDEyOCksIi4uLiIpKSwiVGhlIGFyZ3VtZW50ICciLmNvbmNhdChYLCInICIpLmNvbmNhdChxLCIuIFJlY2VpdmVkICIpLmNvbmNhdChlZSl9LFR5cGVFcnJvcixSYW5nZUVycm9yKSxCKCJFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUiLGZ1bmN0aW9uKFgsVSxxKXt2YXIgZWU7''@;'; put 'put ''cmV0dXJuIGVlPXEmJnEuY29uc3RydWN0b3ImJnEuY29uc3RydWN0b3IubmFtZT8iaW5zdGFuY2Ugb2YgIi5jb25jYXQocS5jb25zdHJ1Y3Rvci5uYW1lKToidHlwZSAiLmNvbmNhdCh6KHEpKSwiRXhwZWN0ZWQgIi5jb25jYXQoWCwnIHRvIGJlIHJldHVybmVkIGZyb20gdGhlICInKS5jb25j''@;'; put 'put ''YXQoVSwnIicpKyIgZnVuY3Rpb24gYnV0IGdvdCAiLmNvbmNhdChlZSwiLiIpfSxUeXBlRXJyb3IpLEIoIkVSUl9NSVNTSU5HX0FSR1MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBYPWFyZ3VtZW50cy5sZW5ndGgsVT1uZXcgQXJyYXkoWCkscT0wO3E8WDtxKyspVVtxXT1hcmd1bWVudHNbcV07dm9p''@;'; put 'put ''ZCAwPT09RSYmKEU9Uig5MjgyKSksRShVLmxlbmd0aD4wLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO3ZhciBlZT0iVGhlICIsdGU9VS5sZW5ndGg7c3dpdGNoKFU9VS5tYXAoZnVuY3Rpb24ob2Upe3JldHVybiciJy5jb25jYXQob2UsJyInKX0pLHRlKXtjYXNl''@;'; put 'put ''IDE6ZWUrPSIiLmNvbmNhdChVWzBdLCIgYXJndW1lbnQiKTticmVhaztjYXNlIDI6ZWUrPSIiLmNvbmNhdChVWzBdLCIgYW5kICIpLmNvbmNhdChVWzFdLCIgYXJndW1lbnRzIik7YnJlYWs7ZGVmYXVsdDplZSs9VS5zbGljZSgwLHRlLTEpLmpvaW4oIiwgIiksZWUrPSIsIGFuZCAiLmNvbmNh''@;'; put 'put ''dChVW3RlLTFdLCIgYXJndW1lbnRzIil9cmV0dXJuIiIuY29uY2F0KGVlLCIgbXVzdCBiZSBzcGVjaWZpZWQiKX0sVHlwZUVycm9yKSxNLmV4cG9ydHMuY29kZXM9Vn0sOTE1ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooYmUsQWUpe3JldHVybiBmdW5jdGlvbihUZSl7aWYo''@;'; put 'put ''QXJyYXkuaXNBcnJheShUZSkpcmV0dXJuIFRlfShiZSl8fGZ1bmN0aW9uKFRlLHFlKXt2YXIgWGU9W10sVWU9ITAsaHQ9ITEsTWU9dm9pZCAwO3RyeXtmb3IodmFyIERlLHplPVRlW1N5bWJvbC5pdGVyYXRvcl0oKTshKFVlPShEZT16ZS5uZXh0KCkpLmRvbmUpJiYoWGUucHVzaChEZS52YWx1''@;'; put 'put ''ZSksIXFlfHxYZS5sZW5ndGghPT1xZSk7VWU9ITApO31jYXRjaChpdCl7aHQ9ITAsTWU9aXR9ZmluYWxseXt0cnl7VWV8fG51bGw9PXplLnJldHVybnx8emUucmV0dXJuKCl9ZmluYWxseXtpZihodCl0aHJvdyBNZX19cmV0dXJuIFhlfShiZSxBZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIEsoYmUpe3JldHVybihLPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKEFlKXty''@;'; put 'put ''ZXR1cm4gdHlwZW9mIEFlfTpmdW5jdGlvbihBZSl7cmV0dXJuIEFlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZBZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmQWUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBBZX0pKGJlKX12YXIgST12b2lkIDAhPT0vYS9nLmZsYWdz''@;'; put 'put ''LGs9ZnVuY3Rpb24oYmUpe3ZhciBBZT1bXTtyZXR1cm4gYmUuZm9yRWFjaChmdW5jdGlvbihUZSl7cmV0dXJuIEFlLnB1c2goVGUpfSksQWV9LEU9ZnVuY3Rpb24oYmUpe3ZhciBBZT1bXTtyZXR1cm4gYmUuZm9yRWFjaChmdW5jdGlvbihUZSxxZSl7cmV0dXJuIEFlLnB1c2goW3FlLFRlXSl9''@;'; put 'put ''KSxBZX0saj1PYmplY3QuaXM/T2JqZWN0LmlzOlIoNjA5KSxWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbigpe3JldHVybltdfSxCPU51bWJlci5pc05hTj9OdW1iZXIuaXNOYU46UigzNjApO2Z1bmN0aW9uIFkoYmUp''@;'; put 'put ''e3JldHVybiBiZS5jYWxsLmJpbmQoYmUpfXZhciBYPVkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksVT1ZKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUpLHE9WShPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxlZT1SKDk1MzkpLnR5cGVzLHRlPWVlLmlz''@;'; put 'put ''QW55QXJyYXlCdWZmZXIsb2U9ZWUuaXNBcnJheUJ1ZmZlclZpZXcsc2U9ZWUuaXNEYXRlLGhlPWVlLmlzTWFwLHVlPWVlLmlzUmVnRXhwLGNlPWVlLmlzU2V0LEc9ZWUuaXNOYXRpdmVFcnJvcixiPWVlLmlzQm94ZWRQcmltaXRpdmUsRD1lZS5pc051bWJlck9iamVjdCxIPWVlLmlzU3RyaW5n''@;'; put 'put ''T2JqZWN0LE49ZWUuaXNCb29sZWFuT2JqZWN0LGc9ZWUuaXNCaWdJbnRPYmplY3QsQz1lZS5pc1N5bWJvbE9iamVjdCxTPWVlLmlzRmxvYXQzMkFycmF5LHY9ZWUuaXNGbG9hdDY0QXJyYXk7ZnVuY3Rpb24gcChiZSl7aWYoMD09PWJlLmxlbmd0aHx8YmUubGVuZ3RoPjEwKXJldHVybiEwO2Zv''@;'; put 'put ''cih2YXIgQWU9MDtBZTxiZS5sZW5ndGg7QWUrKyl7dmFyIFRlPWJlLmNoYXJDb2RlQXQoQWUpO2lmKFRlPDQ4fHxUZT41NylyZXR1cm4hMH1yZXR1cm4gMTA9PT1iZS5sZW5ndGgmJmJlPj1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiB3KGJlKXtyZXR1cm4gT2JqZWN0LmtleXMoYmUpLmZpbHRl''@;'; put 'put ''cihwKS5jb25jYXQoVihiZSkuZmlsdGVyKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYmluZChiZSkpKX1mdW5jdGlvbiBKKGJlLEFlKXtpZihiZT09PUFlKXJldHVybiAwO2Zvcih2YXIgVGU9YmUubGVuZ3RoLHFlPUFlLmxlbmd0aCxYZT0wLFVlPU1hdGgubWluKFRl''@;'; put 'put ''LHFlKTtYZTxVZTsrK1hlKWlmKGJlW1hlXSE9PUFlW1hlXSl7VGU9YmVbWGVdLHFlPUFlW1hlXTticmVha31yZXR1cm4gVGU8cWU/LTE6cWU8VGU/MTowfXZhciBmZT0wLHhlPTEsTGU9MixGZT0zO2Z1bmN0aW9uIE9lKGJlLEFlLFRlLHFlKXtpZihiZT09PUFlKXJldHVybiAwIT09YmV8fCFU''@;'; put 'put ''ZXx8aihiZSxBZSk7aWYoVGUpe2lmKCJvYmplY3QiIT09SyhiZSkpcmV0dXJuIm51bWJlciI9PXR5cGVvZiBiZSYmQihiZSkmJkIoQWUpO2lmKCJvYmplY3QiIT09SyhBZSl8fG51bGw9PT1iZXx8bnVsbD09PUFlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmUpIT09T2JqZWN0LmdldFByb3Rv''@;'; put 'put ''dHlwZU9mKEFlKSlyZXR1cm4hMX1lbHNle2lmKG51bGw9PT1iZXx8Im9iamVjdCIhPT1LKGJlKSlyZXR1cm4obnVsbD09PUFlfHwib2JqZWN0IiE9PUsoQWUpKSYmYmU9PUFlO2lmKG51bGw9PT1BZXx8Im9iamVjdCIhPT1LKEFlKSlyZXR1cm4hMX12YXIgWGUsVWUsaHQsTWUsSHQsUHQsRGU9''@;'; put 'put ''cShiZSk7aWYoRGUhPT1xKEFlKSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGJlKSl7aWYoYmUubGVuZ3RoIT09QWUubGVuZ3RoKXJldHVybiExO3ZhciB6ZT13KGJlKSxpdD13KEFlKTtyZXR1cm4gemUubGVuZ3RoPT09aXQubGVuZ3RoJiZXZShiZSxBZSxUZSxxZSx4ZSx6ZSl9aWYoIltv''@;'; put 'put ''YmplY3QgT2JqZWN0XSI9PT1EZSYmKCFoZShiZSkmJmhlKEFlKXx8IWNlKGJlKSYmY2UoQWUpKSlyZXR1cm4hMTtpZihzZShiZSkpe2lmKCFzZShBZSl8fERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbChiZSkhPT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoQWUpKXJldHVybiExfWVs''@;'; put 'put ''c2UgaWYodWUoYmUpKXtpZighdWUoQWUpfHwoaHQ9YmUsTWU9QWUsIShJP2h0LnNvdXJjZT09PU1lLnNvdXJjZSYmaHQuZmxhZ3M9PT1NZS5mbGFnczpSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaHQpPT09UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE1lKSkpKXJldHVy''@;'; put 'put ''biExfWVsc2UgaWYoRyhiZSl8fGJlIGluc3RhbmNlb2YgRXJyb3Ipe2lmKGJlLm1lc3NhZ2UhPT1BZS5tZXNzYWdlfHxiZS5uYW1lIT09QWUubmFtZSlyZXR1cm4hMX1lbHNle2lmKG9lKGJlKSl7aWYoVGV8fCFTKGJlKSYmIXYoYmUpKXtpZigoSHQ9YmUpLmJ5dGVMZW5ndGghPT0oUHQ9QWUp''@;'; put 'put ''LmJ5dGVMZW5ndGh8fDAhPT1KKG5ldyBVaW50OEFycmF5KEh0LmJ1ZmZlcixIdC5ieXRlT2Zmc2V0LEh0LmJ5dGVMZW5ndGgpLG5ldyBVaW50OEFycmF5KFB0LmJ1ZmZlcixQdC5ieXRlT2Zmc2V0LFB0LmJ5dGVMZW5ndGgpKSlyZXR1cm4hMX1lbHNlIGlmKCFmdW5jdGlvbihIdCxQdCl7aWYo''@;'; put 'put ''SHQuYnl0ZUxlbmd0aCE9PVB0LmJ5dGVMZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvbj0wO29uPEh0LmJ5dGVMZW5ndGg7b24rKylpZihIdFtvbl0hPT1QdFtvbl0pcmV0dXJuITE7cmV0dXJuITB9KGJlLEFlKSlyZXR1cm4hMTt2YXIgdXQ9dyhiZSksTXQ9dyhBZSk7cmV0dXJuIHV0Lmxlbmd0''@;'; put 'put ''aD09PU10Lmxlbmd0aCYmV2UoYmUsQWUsVGUscWUsZmUsdXQpfWlmKGNlKGJlKSlyZXR1cm4hKCFjZShBZSl8fGJlLnNpemUhPT1BZS5zaXplKSYmV2UoYmUsQWUsVGUscWUsTGUpO2lmKGhlKGJlKSlyZXR1cm4hKCFoZShBZSl8fGJlLnNpemUhPT1BZS5zaXplKSYmV2UoYmUsQWUsVGUscWUs''@;'; put 'put ''RmUpO2lmKHRlKGJlKSl7aWYoKFhlPWJlKS5ieXRlTGVuZ3RoIT09KFVlPUFlKS5ieXRlTGVuZ3RofHwwIT09SihuZXcgVWludDhBcnJheShYZSksbmV3IFVpbnQ4QXJyYXkoVWUpKSlyZXR1cm4hMX1lbHNlIGlmKGIoYmUpJiYhZnVuY3Rpb24oSHQsUHQpe3JldHVybiBEKEh0KT9EKFB0KSYm''@;'; put 'put ''aihOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbChIdCksTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUHQpKTpIKEh0KT9IKFB0KSYmU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpPT09U3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUHQpOk4oSHQpP04oUHQp''@;'; put 'put ''JiZCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpPT09Qm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KTpnKEh0KT9nKFB0KSYmQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpPT09QmlnSW50LnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUHQpOkMoUHQpJiZT''@;'; put 'put ''eW1ib2wucHJvdG90eXBlLnZhbHVlT2YuY2FsbChIdCk9PT1TeW1ib2wucHJvdG90eXBlLnZhbHVlT2YuY2FsbChQdCl9KGJlLEFlKSlyZXR1cm4hMX1yZXR1cm4gV2UoYmUsQWUsVGUscWUsZmUpfWZ1bmN0aW9uIEJlKGJlLEFlKXtyZXR1cm4gQWUuZmlsdGVyKGZ1bmN0aW9uKFRlKXtyZXR1''@;'; put 'put ''cm4gVShiZSxUZSl9KX1mdW5jdGlvbiBXZShiZSxBZSxUZSxxZSxYZSxVZSl7aWYoNT09PWFyZ3VtZW50cy5sZW5ndGgpe1VlPU9iamVjdC5rZXlzKGJlKTt2YXIgaHQ9T2JqZWN0LmtleXMoQWUpO2lmKFVlLmxlbmd0aCE9PWh0Lmxlbmd0aClyZXR1cm4hMX1mb3IodmFyIE1lPTA7TWU8VWUu''@;'; put 'put ''bGVuZ3RoO01lKyspaWYoIVgoQWUsVWVbTWVdKSlyZXR1cm4hMTtpZihUZSYmNT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBEZT1WKGJlKTtpZigwIT09RGUubGVuZ3RoKXt2YXIgemU9MDtmb3IoTWU9MDtNZTxEZS5sZW5ndGg7TWUrKyl7dmFyIGl0PURlW01lXTtpZihVKGJlLGl0KSl7aWYo''@;'; put 'put ''IVUoQWUsaXQpKXJldHVybiExO1VlLnB1c2goaXQpLHplKyt9ZWxzZSBpZihVKEFlLGl0KSlyZXR1cm4hMX12YXIgdXQ9VihBZSk7aWYoRGUubGVuZ3RoIT09dXQubGVuZ3RoJiZCZShBZSx1dCkubGVuZ3RoIT09emUpcmV0dXJuITF9ZWxzZXt2YXIgTXQ9VihBZSk7aWYoMCE9PU10Lmxlbmd0''@;'; put 'put ''aCYmMCE9PUJlKEFlLE10KS5sZW5ndGgpcmV0dXJuITF9fWlmKDA9PT1VZS5sZW5ndGgmJihYZT09PWZlfHxYZT09PXhlJiYwPT09YmUubGVuZ3RofHwwPT09YmUuc2l6ZSkpcmV0dXJuITA7aWYodm9pZCAwPT09cWUpcWU9e3ZhbDE6bmV3IE1hcCx2YWwyOm5ldyBNYXAscG9zaXRpb246MH07''@;'; put 'put ''ZWxzZXt2YXIgSHQ9cWUudmFsMS5nZXQoYmUpO2lmKHZvaWQgMCE9PUh0KXt2YXIgUHQ9cWUudmFsMi5nZXQoQWUpO2lmKHZvaWQgMCE9PVB0KXJldHVybiBIdD09PVB0fXFlLnBvc2l0aW9uKyt9cWUudmFsMS5zZXQoYmUscWUucG9zaXRpb24pLHFlLnZhbDIuc2V0KEFlLHFlLnBvc2l0aW9u''@;'; put 'put ''KTt2YXIgb249ZnVuY3Rpb24oQ24sVXQsYm4sV24sZW4sJG4pe3ZhciBObj0wO2lmKCRuPT09TGUpe2lmKCFmdW5jdGlvbih3dCxYdCxfdCxOdCl7Zm9yKHZhciB2bj1udWxsLHJ0PWsod3QpLEl0PTA7SXQ8cnQubGVuZ3RoO0l0Kyspe3ZhciBKdD1ydFtJdF07aWYoIm9iamVjdCI9PT1LKEp0''@;'; put 'put ''KSYmbnVsbCE9PUp0KW51bGw9PT12biYmKHZuPW5ldyBTZXQpLHZuLmFkZChKdCk7ZWxzZSBpZighWHQuaGFzKEp0KSl7aWYoX3R8fCFKZSh3dCxYdCxKdCkpcmV0dXJuITE7bnVsbD09PXZuJiYodm49bmV3IFNldCksdm4uYWRkKEp0KX19aWYobnVsbCE9PXZuKXtmb3IodmFyIER0PWsoWHQp''@;'; put 'put ''LHB0PTA7cHQ8RHQubGVuZ3RoO3B0Kyspe3ZhciBZdD1EdFtwdF07aWYoIm9iamVjdCI9PT1LKFl0KSYmbnVsbCE9PVl0KXtpZighS2Uodm4sWXQsX3QsTnQpKXJldHVybiExfWVsc2UgaWYoIV90JiYhd3QuaGFzKFl0KSYmIUtlKHZuLFl0LF90LE50KSlyZXR1cm4hMX1yZXR1cm4gMD09PXZu''@;'; put 'put ''LnNpemV9cmV0dXJuITB9KENuLFV0LGJuLGVuKSlyZXR1cm4hMX1lbHNlIGlmKCRuPT09RmUpe2lmKCFmdW5jdGlvbih3dCxYdCxfdCxOdCl7Zm9yKHZhciB2bj1udWxsLHJ0PUUod3QpLEl0PTA7SXQ8cnQubGVuZ3RoO0l0Kyspe3ZhciBKdD16KHJ0W0l0XSwyKSxEdD1KdFswXSxwdD1KdFsx''@;'; put 'put ''XTtpZigib2JqZWN0Ij09PUsoRHQpJiZudWxsIT09RHQpbnVsbD09PXZuJiYodm49bmV3IFNldCksdm4uYWRkKER0KTtlbHNle3ZhciBZdD1YdC5nZXQoRHQpO2lmKHZvaWQgMD09PVl0JiYhWHQuaGFzKER0KXx8IU9lKHB0LFl0LF90LE50KSl7aWYoX3R8fCFsdCh3dCxYdCxEdCxwdCxOdCkp''@;'; put 'put ''cmV0dXJuITE7bnVsbD09PXZuJiYodm49bmV3IFNldCksdm4uYWRkKER0KX19fWlmKG51bGwhPT12bil7Zm9yKHZhciBMbj1FKFh0KSx6dD0wO3p0PExuLmxlbmd0aDt6dCsrKXt2YXIgeW49eihMblt6dF0sMikseG49KER0PXluWzBdLHluWzFdKTtpZigib2JqZWN0Ij09PUsoRHQpJiZudWxs''@;'; put 'put ''IT09RHQpe2lmKCFQZSh2bix3dCxEdCx4bixfdCxOdCkpcmV0dXJuITF9ZWxzZSBpZighKF90fHx3dC5oYXMoRHQpJiZPZSh3dC5nZXQoRHQpLHhuLCExLE50KXx8UGUodm4sd3QsRHQseG4sITEsTnQpKSlyZXR1cm4hMX1yZXR1cm4gMD09PXZuLnNpemV9cmV0dXJuITB9KENuLFV0LGJuLGVu''@;'; put 'put ''KSlyZXR1cm4hMX1lbHNlIGlmKCRuPT09eGUpZm9yKDtObjxDbi5sZW5ndGg7Tm4rKyl7aWYoIVgoQ24sTm4pKXtpZihYKFV0LE5uKSlyZXR1cm4hMTtmb3IodmFyIGZ0PU9iamVjdC5rZXlzKENuKTtObjxmdC5sZW5ndGg7Tm4rKyl7dmFyIGZuPWZ0W05uXTtpZighWChVdCxmbil8fCFPZShD''@;'; put 'put ''bltmbl0sVXRbZm5dLGJuLGVuKSlyZXR1cm4hMX1yZXR1cm4gZnQubGVuZ3RoPT09T2JqZWN0LmtleXMoVXQpLmxlbmd0aH1pZighWChVdCxObil8fCFPZShDbltObl0sVXRbTm5dLGJuLGVuKSlyZXR1cm4hMX1mb3IoTm49MDtObjxXbi5sZW5ndGg7Tm4rKyl7dmFyIGhuPVduW05uXTtpZigh''@;'; put 'put ''T2UoQ25baG5dLFV0W2huXSxibixlbikpcmV0dXJuITF9cmV0dXJuITB9KGJlLEFlLFRlLFVlLHFlLFhlKTtyZXR1cm4gcWUudmFsMS5kZWxldGUoYmUpLHFlLnZhbDIuZGVsZXRlKEFlKSxvbn1mdW5jdGlvbiBLZShiZSxBZSxUZSxxZSl7Zm9yKHZhciBYZT1rKGJlKSxVZT0wO1VlPFhlLmxl''@;'; put 'put ''bmd0aDtVZSsrKXt2YXIgaHQ9WGVbVWVdO2lmKE9lKEFlLGh0LFRlLHFlKSlyZXR1cm4gYmUuZGVsZXRlKGh0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBZZShiZSl7c3dpdGNoKEsoYmUpKXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIG51bGw7Y2FzZSJvYmplY3QiOnJldHVybjtjYXNlInN5bWJv''@;'; put 'put ''bCI6cmV0dXJuITE7Y2FzZSJzdHJpbmciOmJlPStiZTtjYXNlIm51bWJlciI6aWYoQihiZSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gSmUoYmUsQWUsVGUpe3ZhciBxZT1ZZShUZSk7cmV0dXJuIHFlPz8oQWUuaGFzKHFlKSYmIWJlLmhhcyhxZSkpfWZ1bmN0aW9uIGx0KGJlLEFlLFRl''@;'; put 'put ''LHFlLFhlKXt2YXIgVWU9WWUoVGUpO2lmKG51bGwhPVVlKXJldHVybiBVZTt2YXIgaHQ9QWUuZ2V0KFVlKTtyZXR1cm4hKHZvaWQgMD09PWh0JiYhQWUuaGFzKFVlKXx8IU9lKHFlLGh0LCExLFhlKSkmJiFiZS5oYXMoVWUpJiZPZShxZSxodCwhMSxYZSl9ZnVuY3Rpb24gUGUoYmUsQWUsVGUs''@;'; put 'put ''cWUsWGUsVWUpe2Zvcih2YXIgaHQ9ayhiZSksTWU9MDtNZTxodC5sZW5ndGg7TWUrKyl7dmFyIERlPWh0W01lXTtpZihPZShUZSxEZSxYZSxVZSkmJk9lKHFlLEFlLmdldChEZSksWGUsVWUpKXJldHVybiBiZS5kZWxldGUoRGUpLCEwfXJldHVybiExfU0uZXhwb3J0cz17aXNEZWVwRXF1YWw6''@;'; put 'put ''ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBPZShiZSxBZSwhMSl9LGlzRGVlcFN0cmljdEVxdWFsOmZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gT2UoYmUsQWUsITApfX19LDgyMjQ6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIE99fSw5NjY5OihNLE8sUik9PntN''@;'; put 'put ''LmV4cG9ydHM9UigxNjA5KX0sNTQ0ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1SKDYwMjYpLEk9Uig0MzcyKSxrPVIoNTMyNyksRT1SKDQwOTcpLGo9Uig0MTA5KSxWPVIoNzk4NSksQj1SKDc4NzQpLFk9UigyNjQ4KSxYPVIoNjQ0KSxVPVIoMjA1KTtNLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24ocSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGVlLHRlKXt2YXIgb2Usc2U9cS5kYXRhLGhlPXEuaGVhZGVycyx1ZT1xLnJlc3BvbnNlVHlwZTtmdW5jdGlvbiBjZSgpe3EuY2FuY2VsVG9rZW4mJnEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob2UpLHEuc2lnbmFs''@;'; put 'put ''JiZxLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsb2UpfXouaXNGb3JtRGF0YShzZSkmJnouaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSYmZGVsZXRlIGhlWyJDb250ZW50LVR5cGUiXTt2YXIgRz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYocS5hdXRoKXt2YXIgYj1xLmF1dGgudXNl''@;'; put 'put ''cm5hbWV8fCIiLEQ9cS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChxLmF1dGgucGFzc3dvcmQpKToiIjtoZS5BdXRob3JpemF0aW9uPSJCYXNpYyAiK2J0b2EoYisiOiIrRCl9dmFyIEg9RShxLmJhc2VVUkwscS51cmwpO2Z1bmN0aW9uIE4oKXtpZihHKXt2YXIg''@;'; put 'put ''Uz0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIEc/aihHLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKTpudWxsO0soZnVuY3Rpb24ocCl7ZWUocCksY2UoKX0sZnVuY3Rpb24ocCl7dGUocCksY2UoKX0se2RhdGE6dWUmJiJ0ZXh0IiE9PXVlJiYianNvbiIhPT11ZT9HLnJlc3BvbnNlOkcucmVz''@;'; put 'put ''cG9uc2VUZXh0LHN0YXR1czpHLnN0YXR1cyxzdGF0dXNUZXh0Okcuc3RhdHVzVGV4dCxoZWFkZXJzOlMsY29uZmlnOnEscmVxdWVzdDpHfSksRz1udWxsfX1pZihHLm9wZW4ocS5tZXRob2QudG9VcHBlckNhc2UoKSxrKEgscS5wYXJhbXMscS5wYXJhbXNTZXJpYWxpemVyKSwhMCksRy50aW1l''@;'; put 'put ''b3V0PXEudGltZW91dCwib25sb2FkZW5kImluIEc/Ry5vbmxvYWRlbmQ9TjpHLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe0cmJjQ9PT1HLnJlYWR5U3RhdGUmJigwIT09Ry5zdGF0dXN8fEcucmVzcG9uc2VVUkwmJjA9PT1HLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZz''@;'; put 'put ''ZXRUaW1lb3V0KE4pfSxHLm9uYWJvcnQ9ZnVuY3Rpb24oKXtHJiYodGUobmV3IFkoIlJlcXVlc3QgYWJvcnRlZCIsWS5FQ09OTkFCT1JURUQscSxHKSksRz1udWxsKX0sRy5vbmVycm9yPWZ1bmN0aW9uKCl7dGUobmV3IFkoIk5ldHdvcmsgRXJyb3IiLFkuRVJSX05FVFdPUksscSxHLEcpKSxH''@;'; put 'put ''PW51bGx9LEcub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIFM9cS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrcS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiO3EudGltZW91dEVycm9yTWVzc2FnZSYmKFM9cS50aW1lb3V0RXJyb3JNZXNzYWdlKSx0ZShuZXcgWShTLChx''@;'; put 'put ''LnRyYW5zaXRpb25hbHx8QikuY2xhcmlmeVRpbWVvdXRFcnJvcj9ZLkVUSU1FRE9VVDpZLkVDT05OQUJPUlRFRCxxLEcpKSxHPW51bGx9LHouaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGc9KHEud2l0aENyZWRlbnRpYWxzfHxWKEgpKSYmcS54c3JmQ29va2llTmFtZT9JLnJlYWQocS54''@;'; put 'put ''c3JmQ29va2llTmFtZSk6dm9pZCAwO2cmJihoZVtxLnhzcmZIZWFkZXJOYW1lXT1nKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBHJiZ6LmZvckVhY2goaGUsZnVuY3Rpb24oUyx2KXt2b2lkIDA9PT1zZSYmImNvbnRlbnQtdHlwZSI9PT12LnRvTG93ZXJDYXNlKCk/ZGVsZXRlIGhlW3ZdOkcuc2V0''@;'; put 'put ''UmVxdWVzdEhlYWRlcih2LFMpfSksei5pc1VuZGVmaW5lZChxLndpdGhDcmVkZW50aWFscyl8fChHLndpdGhDcmVkZW50aWFscz0hIXEud2l0aENyZWRlbnRpYWxzKSx1ZSYmImpzb24iIT09dWUmJihHLnJlc3BvbnNlVHlwZT1xLnJlc3BvbnNlVHlwZSksImZ1bmN0aW9uIj09dHlwZW9mIHEu''@;'; put 'put ''b25Eb3dubG9hZFByb2dyZXNzJiZHLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixxLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIHEub25VcGxvYWRQcm9ncmVzcyYmRy51cGxvYWQmJkcudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixxLm9uVXBs''@;'; put 'put ''b2FkUHJvZ3Jlc3MpLChxLmNhbmNlbFRva2VufHxxLnNpZ25hbCkmJihvZT1mdW5jdGlvbihTKXtHJiYodGUoIVN8fFMmJlMudHlwZT9uZXcgWDpTKSxHLmFib3J0KCksRz1udWxsKX0scS5jYW5jZWxUb2tlbiYmcS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob2UpLHEuc2lnbmFsJiYocS5zaWdu''@;'; put 'put ''YWwuYWJvcnRlZD9vZSgpOnEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixvZSkpKSxzZXx8KHNlPW51bGwpO3ZhciBDPVUoSCk7QyYmLTE9PT1bImh0dHAiLCJodHRwcyIsImZpbGUiXS5pbmRleE9mKEMpP3RlKG5ldyBZKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0MrIjoiLFku''@;'; put 'put ''RVJSX0JBRF9SRVFVRVNULHEpKTpHLnNlbmQoc2UpfSl9fSwxNjA5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoMTg0OSksST1SKDMyMSksaz1SKDcxODUpLEU9ZnVuY3Rpb24gaihWKXt2YXIgQj1uZXcgSShWKSxZPUsoSS5wcm90b3R5cGUucmVxdWVzdCxCKTty''@;'; put 'put ''ZXR1cm4gei5leHRlbmQoWSxJLnByb3RvdHlwZSxCKSx6LmV4dGVuZChZLEIpLFkuY3JlYXRlPWZ1bmN0aW9uKFgpe3JldHVybiBqKGsoVixYKSl9LFl9KFIoNTU0NikpO0UuQXhpb3M9SSxFLkNhbmNlbGVkRXJyb3I9Uig2NDQpLEUuQ2FuY2VsVG9rZW49Uig0OTcyKSxFLmlzQ2FuY2VsPVIo''@;'; put 'put ''NjUwMiksRS5WRVJTSU9OPVIoNzI4OCkudmVyc2lvbixFLnRvRm9ybURhdGE9Uig3Njc1KSxFLkF4aW9zRXJyb3I9UigyNjQ4KSxFLkNhbmNlbD1FLkNhbmNlbGVkRXJyb3IsRS5hbGw9ZnVuY3Rpb24oail7cmV0dXJuIFByb21pc2UuYWxsKGopfSxFLnNwcmVhZD1SKDg3MTMpLEUuaXNBeGlv''@;'; put 'put ''c0Vycm9yPVIoNjI2OCksTS5leHBvcnRzPUUsTS5leHBvcnRzLmRlZmF1bHQ9RX0sNDk3MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQ0KTtmdW5jdGlvbiBLKEkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUg''@;'; put 'put ''YSBmdW5jdGlvbi4iKTt2YXIgazt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oail7az1qfSk7dmFyIEU9dGhpczt0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihqKXtpZihFLl9saXN0ZW5lcnMpe3ZhciBWLEI9RS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoVj0wO1Y8QjtWKysp''@;'; put 'put ''RS5fbGlzdGVuZXJzW1ZdKGopO0UuX2xpc3RlbmVycz1udWxsfX0pLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKGope3ZhciBWLEI9bmV3IFByb21pc2UoZnVuY3Rpb24oWSl7RS5zdWJzY3JpYmUoWSksVj1ZfSkudGhlbihqKTtyZXR1cm4gQi5jYW5jZWw9ZnVuY3Rpb24oKXtFLnVuc3Vi''@;'; put 'put ''c2NyaWJlKFYpfSxCfSxJKGZ1bmN0aW9uKGope0UucmVhc29ufHwoRS5yZWFzb249bmV3IHooaiksayhFLnJlYXNvbikpfSl9Sy5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxLLnByb3RvdHlwZS5zdWJzY3Jp''@;'; put 'put ''YmU9ZnVuY3Rpb24oSSl7dGhpcy5yZWFzb24/SSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEkpOnRoaXMuX2xpc3RlbmVycz1bSV19LEsucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKEkpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIGs9''@;'; put 'put ''dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoSSk7LTEhPT1rJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGssMSl9fSxLLnNvdXJjZT1mdW5jdGlvbigpe3ZhciBJO3JldHVybnt0b2tlbjpuZXcgSyhmdW5jdGlvbihrKXtJPWt9KSxjYW5jZWw6SX19LE0uZXhwb3J0cz1LfSw2NDQ6KE0sTyxSKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDI2NDgpO2Z1bmN0aW9uIEsoSSl7ei5jYWxsKHRoaXMsST8/ImNhbmNlbGVkIix6LkVSUl9DQU5DRUxFRCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1SKDQ4NjcpLmluaGVyaXRzKEsseix7X19DQU5DRUxfXzohMH0pLE0uZXhwb3J0cz1LfSw2NTAy''@;'; put 'put ''Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiEoIU98fCFPLl9fQ0FOQ0VMX18pfX0sMzIxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoNTMyNyksST1SKDc4Miksaz1SKDM1NzIpLEU9Uig3MTg1KSxqPVIoNDA5NyksVj1SKDQ4''@;'; put 'put ''NzUpLEI9Vi52YWxpZGF0b3JzO2Z1bmN0aW9uIFkoWCl7dGhpcy5kZWZhdWx0cz1YLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBJLHJlc3BvbnNlOm5ldyBJfX1ZLnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKFgsVSl7InN0cmluZyI9PXR5cGVvZiBYPyhVPVV8fHt9KS51cmw9''@;'; put 'put ''WDpVPVh8fHt9LFUubWV0aG9kPShVPUUodGhpcy5kZWZhdWx0cyxVKSkubWV0aG9kP1UubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKToiZ2V0Ijt2YXIgcT1VLnRyYW5zaXRpb25hbDt2b2lkIDAhPT1x''@;'; put 'put ''JiZWLmFzc2VydE9wdGlvbnMocSx7c2lsZW50SlNPTlBhcnNpbmc6Qi50cmFuc2l0aW9uYWwoQi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpCLnRyYW5zaXRpb25hbChCLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Qi50cmFuc2l0aW9uYWwoQi5ib29sZWFuKX0sITEpO3ZhciBl''@;'; put 'put ''ZT1bXSx0ZT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYil7ImZ1bmN0aW9uIj09dHlwZW9mIGIucnVuV2hlbiYmITE9PT1iLnJ1bldoZW4oVSl8fCh0ZT10ZSYmYi5zeW5jaHJvbm91cyxlZS51bnNoaWZ0KGIuZnVsZmlsbGVkLGIucmVqZWN0ZWQpKX0p''@;'; put 'put ''O3ZhciBvZSxzZT1bXTtpZih0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3NlLnB1c2goYi5mdWxmaWxsZWQsYi5yZWplY3RlZCl9KSwhdGUpe3ZhciBoZT1bayx2b2lkIDBdO2ZvcihBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShoZSxlZSksaGU9''@;'; put 'put ''aGUuY29uY2F0KHNlKSxvZT1Qcm9taXNlLnJlc29sdmUoVSk7aGUubGVuZ3RoOylvZT1vZS50aGVuKGhlLnNoaWZ0KCksaGUuc2hpZnQoKSk7cmV0dXJuIG9lfWZvcih2YXIgdWU9VTtlZS5sZW5ndGg7KXt2YXIgY2U9ZWUuc2hpZnQoKSxHPWVlLnNoaWZ0KCk7dHJ5e3VlPWNlKHVlKX1jYXRj''@;'; put 'put ''aChiKXtHKGIpO2JyZWFrfX10cnl7b2U9ayh1ZSl9Y2F0Y2goYil7cmV0dXJuIFByb21pc2UucmVqZWN0KGIpfWZvcig7c2UubGVuZ3RoOylvZT1vZS50aGVuKHNlLnNoaWZ0KCksc2Uuc2hpZnQoKSk7cmV0dXJuIG9lfSxZLnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oWCl7WD1FKHRoaXMu''@;'; put 'put ''ZGVmYXVsdHMsWCk7dmFyIFU9aihYLmJhc2VVUkwsWC51cmwpO3JldHVybiBLKFUsWC5wYXJhbXMsWC5wYXJhbXNTZXJpYWxpemVyKX0sei5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihYKXtZLnByb3RvdHlwZVtYXT1mdW5jdGlvbihVLHEpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnJlcXVlc3QoRShxfHx7fSx7bWV0aG9kOlgsdXJsOlUsZGF0YToocXx8e30pLmRhdGF9KSl9fSksei5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oWCl7ZnVuY3Rpb24gVShxKXtyZXR1cm4gZnVuY3Rpb24oZWUsdGUsb2Upe3JldHVybiB0aGlzLnJl''@;'; put 'put ''cXVlc3QoRShvZXx8e30se21ldGhvZDpYLGhlYWRlcnM6cT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6ZWUsZGF0YTp0ZX0pKX19WS5wcm90b3R5cGVbWF09VSgpLFkucHJvdG90eXBlW1grIkZvcm0iXT1VKCEwKX0pLE0uZXhwb3J0cz1ZfSwyNjQ4OihN''@;'; put 'put ''LE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KTtmdW5jdGlvbiBLKEUsaixWLEIsWSl7RXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9RSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGomJih0aGlzLmNvZGU9aiksViYmKHRoaXMuY29uZmlnPVYpLEImJih0aGlzLnJlcXVlc3Q9''@;'; put 'put ''QiksWSYmKHRoaXMucmVzcG9uc2U9WSl9ei5pbmhlcml0cyhLLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhp''@;'; put 'put ''cy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3Ro''@;'; put 'put ''aXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBJPUsucHJvdG90eXBlLGs9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJS''@;'; put 'put ''X0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIl0uZm9yRWFjaChmdW5jdGlvbihFKXtrW0VdPXt2YWx1ZTpFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssayksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksImlzQXhpb3NF''@;'; put 'put ''cnJvciIse3ZhbHVlOiEwfSksSy5mcm9tPWZ1bmN0aW9uKEUsaixWLEIsWSxYKXt2YXIgVT1PYmplY3QuY3JlYXRlKEkpO3JldHVybiB6LnRvRmxhdE9iamVjdChFLFUsZnVuY3Rpb24ocSl7cmV0dXJuIHEhPT1FcnJvci5wcm90b3R5cGV9KSxLLmNhbGwoVSxFLm1lc3NhZ2UsaixWLEIsWSks''@;'; put 'put ''VS5uYW1lPUUubmFtZSxYJiZPYmplY3QuYXNzaWduKFUsWCksVX0sTS5leHBvcnRzPUt9LDc4MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7ZnVuY3Rpb24gSygpe3RoaXMuaGFuZGxlcnM9W119Sy5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKEksayxFKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6SSxyZWplY3RlZDprLHN5bmNocm9ub3VzOiEhRSYmRS5zeW5jaHJvbm91cyxydW5XaGVuOkU/RS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfSxLLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihJKXt0aGlzLmhhbmRsZXJz''@;'; put 'put ''W0ldJiYodGhpcy5oYW5kbGVyc1tJXT1udWxsKX0sSy5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihJKXt6LmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihrKXtudWxsIT09ayYmSShrKX0pfSxNLmV4cG9ydHM9S30sNDA5NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIo''@;'; put 'put ''MTc5MyksSz1SKDczMDMpO00uZXhwb3J0cz1mdW5jdGlvbihJLGspe3JldHVybiBJJiYheihrKT9LKEksayk6a319LDM1NzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpLEs9Uig4NTI3KSxJPVIoNjUwMiksaz1SKDU1NDYpLEU9Uig2NDQpO2Z1bmN0aW9uIGooVil7aWYo''@;'; put 'put ''Vi5jYW5jZWxUb2tlbiYmVi5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksVi5zaWduYWwmJlYuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEV9TS5leHBvcnRzPWZ1bmN0aW9uKFYpe3JldHVybiBqKFYpLFYuaGVhZGVycz1WLmhlYWRlcnN8fHt9LFYuZGF0YT1LLmNhbGwoVixWLmRh''@;'; put 'put ''dGEsVi5oZWFkZXJzLFYudHJhbnNmb3JtUmVxdWVzdCksVi5oZWFkZXJzPXoubWVyZ2UoVi5oZWFkZXJzLmNvbW1vbnx8e30sVi5oZWFkZXJzW1YubWV0aG9kXXx8e30sVi5oZWFkZXJzKSx6LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29t''@;'; put 'put ''bW9uIl0sZnVuY3Rpb24oQil7ZGVsZXRlIFYuaGVhZGVyc1tCXX0pLChWLmFkYXB0ZXJ8fGsuYWRhcHRlcikoVikudGhlbihmdW5jdGlvbihCKXtyZXR1cm4gaihWKSxCLmRhdGE9Sy5jYWxsKFYsQi5kYXRhLEIuaGVhZGVycyxWLnRyYW5zZm9ybVJlc3BvbnNlKSxCfSxmdW5jdGlvbihCKXty''@;'; put 'put ''ZXR1cm4gSShCKXx8KGooViksQiYmQi5yZXNwb25zZSYmKEIucmVzcG9uc2UuZGF0YT1LLmNhbGwoVixCLnJlc3BvbnNlLmRhdGEsQi5yZXNwb25zZS5oZWFkZXJzLFYudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QoQil9KX19LDcxODU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz1mdW5jdGlvbihLLEkpe0k9SXx8e307dmFyIGs9e307ZnVuY3Rpb24gRShVLHEpe3JldHVybiB6LmlzUGxhaW5PYmplY3QoVSkmJnouaXNQbGFpbk9iamVjdChxKT96Lm1lcmdlKFUscSk6ei5pc1BsYWluT2JqZWN0KHEpP3oubWVyZ2Uoe30scSk6''@;'; put 'put ''ei5pc0FycmF5KHEpP3Euc2xpY2UoKTpxfWZ1bmN0aW9uIGooVSl7cmV0dXJuIHouaXNVbmRlZmluZWQoSVtVXSk/ei5pc1VuZGVmaW5lZChLW1VdKT92b2lkIDA6RSh2b2lkIDAsS1tVXSk6RShLW1VdLElbVV0pfWZ1bmN0aW9uIFYoVSl7aWYoIXouaXNVbmRlZmluZWQoSVtVXSkpcmV0dXJu''@;'; put 'put ''IEUodm9pZCAwLElbVV0pfWZ1bmN0aW9uIEIoVSl7cmV0dXJuIHouaXNVbmRlZmluZWQoSVtVXSk/ei5pc1VuZGVmaW5lZChLW1VdKT92b2lkIDA6RSh2b2lkIDAsS1tVXSk6RSh2b2lkIDAsSVtVXSl9ZnVuY3Rpb24gWShVKXtyZXR1cm4gVSBpbiBJP0UoS1tVXSxJW1VdKTpVIGluIEs/RSh2''@;'; put 'put ''b2lkIDAsS1tVXSk6dm9pZCAwfXZhciBYPXt1cmw6VixtZXRob2Q6VixkYXRhOlYsYmFzZVVSTDpCLHRyYW5zZm9ybVJlcXVlc3Q6Qix0cmFuc2Zvcm1SZXNwb25zZTpCLHBhcmFtc1NlcmlhbGl6ZXI6Qix0aW1lb3V0OkIsdGltZW91dE1lc3NhZ2U6Qix3aXRoQ3JlZGVudGlhbHM6QixhZGFw''@;'; put 'put ''dGVyOkIscmVzcG9uc2VUeXBlOkIseHNyZkNvb2tpZU5hbWU6Qix4c3JmSGVhZGVyTmFtZTpCLG9uVXBsb2FkUHJvZ3Jlc3M6QixvbkRvd25sb2FkUHJvZ3Jlc3M6QixkZWNvbXByZXNzOkIsbWF4Q29udGVudExlbmd0aDpCLG1heEJvZHlMZW5ndGg6QixiZWZvcmVSZWRpcmVjdDpCLHRyYW5z''@;'; put 'put ''cG9ydDpCLGh0dHBBZ2VudDpCLGh0dHBzQWdlbnQ6QixjYW5jZWxUb2tlbjpCLHNvY2tldFBhdGg6QixyZXNwb25zZUVuY29kaW5nOkIsdmFsaWRhdGVTdGF0dXM6WX07cmV0dXJuIHouZm9yRWFjaChPYmplY3Qua2V5cyhLKS5jb25jYXQoT2JqZWN0LmtleXMoSSkpLGZ1bmN0aW9uKFUpe3Zh''@;'; put 'put ''ciBxPVhbVV18fGosZWU9cShVKTt6LmlzVW5kZWZpbmVkKGVlKSYmcSE9PVl8fChrW1VdPWVlKX0pLGt9fSw2MDI2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyNjQ4KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSyxJLGspe3ZhciBFPWsuY29uZmlnLnZhbGlkYXRlU3RhdHVzO2suc3Rh''@;'; put 'put ''dHVzJiZFJiYhRShrLnN0YXR1cyk/SShuZXcgeigiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK2suc3RhdHVzLFt6LkVSUl9CQURfUkVRVUVTVCx6LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Ioay5zdGF0dXMvMTAwKS00XSxrLmNvbmZpZyxrLnJlcXVlc3QsaykpOkso''@;'; put 'put ''ayl9fSw4NTI3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoNTU0Nik7TS5leHBvcnRzPWZ1bmN0aW9uKEksayxFKXt2YXIgaj10aGlzfHxLO3JldHVybiB6LmZvckVhY2goRSxmdW5jdGlvbihWKXtJPVYuY2FsbChqLEksayl9KSxJfX0sNTU0NjooTSxPLFIpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDQ4NjcpLEk9Uig2MDE2KSxrPVIoMjY0OCksRT1SKDc4NzQpLGo9Uig3Njc1KSxWPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn07ZnVuY3Rpb24gQihVLHEpeyFLLmlzVW5kZWZpbmVkKFUp''@;'; put 'put ''JiZLLmlzVW5kZWZpbmVkKFVbIkNvbnRlbnQtVHlwZSJdKSYmKFVbIkNvbnRlbnQtVHlwZSJdPXEpfXZhciBZLFg9e3RyYW5zaXRpb25hbDpFLGFkYXB0ZXI6KCh0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUifHx2b2lkIDAhPT16JiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90''@;'; put 'put ''eXBlLnRvU3RyaW5nLmNhbGwoeikpJiYoWT1SKDU0NDgpKSxZKSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihVLHEpe2lmKEkocSwiQWNjZXB0IiksSShxLCJDb250ZW50LVR5cGUiKSxLLmlzRm9ybURhdGEoVSl8fEsuaXNBcnJheUJ1ZmZlcihVKXx8Sy5pc0J1ZmZlcihVKXx8Sy5pc1N0''@;'; put 'put ''cmVhbShVKXx8Sy5pc0ZpbGUoVSl8fEsuaXNCbG9iKFUpKXJldHVybiBVO2lmKEsuaXNBcnJheUJ1ZmZlclZpZXcoVSkpcmV0dXJuIFUuYnVmZmVyO2lmKEsuaXNVUkxTZWFyY2hQYXJhbXMoVSkpcmV0dXJuIEIocSwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9''@;'; put 'put ''dXRmLTgiKSxVLnRvU3RyaW5nKCk7dmFyIGVlLHRlPUsuaXNPYmplY3QoVSksb2U9cSYmcVsiQ29udGVudC1UeXBlIl07aWYoKGVlPUsuaXNGaWxlTGlzdChVKSl8fHRlJiYibXVsdGlwYXJ0L2Zvcm0tZGF0YSI9PT1vZSl7dmFyIHNlPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1''@;'; put 'put ''cm4gaihlZT97ImZpbGVzW10iOlV9OlUsc2UmJm5ldyBzZSl9cmV0dXJuIHRlfHwiYXBwbGljYXRpb24vanNvbiI9PT1vZT8oQihxLCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oaGUsdWUsY2Upe2lmKEsuaXNTdHJpbmcoaGUpKXRyeXtyZXR1cm4oMCxKU09OLnBhcnNlKShoZSksSy50''@;'; put 'put ''cmltKGhlKX1jYXRjaChHKXtpZigiU3ludGF4RXJyb3IiIT09Ry5uYW1lKXRocm93IEd9cmV0dXJuKDAsSlNPTi5zdHJpbmdpZnkpKGhlKX0oVSkpOlV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oVSl7dmFyIHE9dGhpcy50cmFuc2l0aW9uYWx8fFgudHJhbnNpdGlvbmFsLG9lPSEo''@;'; put 'put ''cSYmcS5zaWxlbnRKU09OUGFyc2luZykmJiJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKG9lfHxxJiZxLmZvcmNlZEpTT05QYXJzaW5nJiZLLmlzU3RyaW5nKFUpJiZVLmxlbmd0aCl0cnl7cmV0dXJuIEpTT04ucGFyc2UoVSl9Y2F0Y2goc2Upe2lmKG9lKXRocm93IlN5bnRheEVycm9y''@;'; put 'put ''Ij09PXNlLm5hbWU/ay5mcm9tKHNlLGsuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6c2V9cmV0dXJuIFV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6''@;'; put 'put ''LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOlIoMTYyMyl9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKFUpe3JldHVybiBVPj0yMDAmJlU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIn19fTtLLmZvckVhY2go''@;'; put 'put ''WyJkZWxldGUiLCJnZXQiLCJoZWFkIl0sZnVuY3Rpb24oVSl7WC5oZWFkZXJzW1VdPXt9fSksSy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oVSl7WC5oZWFkZXJzW1VdPUsubWVyZ2UoVil9KSxNLmV4cG9ydHM9WH0sNzg3NDpNPT57InVzZSBzdHJpY3QiO00uZXhw''@;'; put 'put ''b3J0cz17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX19LDcyODg6TT0+e00uZXhwb3J0cz17dmVyc2lvbjoiMC4yNy4yIn19LDE4NDk6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyxSKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIHo9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLEs9MDtLPHoubGVuZ3RoO0srKyl6W0tdPWFyZ3VtZW50c1tLXTtyZXR1cm4gTy5hcHBseShSLHopfX19LDUzMjc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO2Z1bmN0aW9uIEsoSSl7''@;'; put 'put ''cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChJKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9TS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKEksayxFKXtpZighaylyZXR1cm4gSTt2YXIgajtpZihFKWo9RShrKTtlbHNlIGlmKHouaXNVUkxTZWFyY2hQYXJhbXMoaykpaj1rLnRvU3RyaW5nKCk7ZWxzZXt2YXIgVj1bXTt6LmZvckVhY2goayxmdW5jdGlvbihZLFgpe251bGwhPVkmJih6LmlzQXJyYXkoWSk/WCs9IltdIjpZ''@;'; put 'put ''PVtZXSx6LmZvckVhY2goWSxmdW5jdGlvbihVKXt6LmlzRGF0ZShVKT9VPVUudG9JU09TdHJpbmcoKTp6LmlzT2JqZWN0KFUpJiYoVT1KU09OLnN0cmluZ2lmeShVKSksVi5wdXNoKEsoWCkrIj0iK0soVSkpfSkpfSksaj1WLmpvaW4oIiYiKX1pZihqKXt2YXIgQj1JLmluZGV4T2YoIiMiKTst''@;'; put 'put ''MSE9PUImJihJPUkuc2xpY2UoMCxCKSksSSs9KC0xPT09SS5pbmRleE9mKCI/Iik/Ij8iOiImIikran1yZXR1cm4gSX19LDczMDM6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyxSKXtyZXR1cm4gUj9PLnJlcGxhY2UoL1wvKyQvLCIiKSsiLyIrUi5yZXBsYWNlKC9eXC8r''@;'; put 'put ''LywiIik6T319LDQzNzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz16LmlzU3RhbmRhcmRCcm93c2VyRW52KCk/e3dyaXRlOmZ1bmN0aW9uKEssSSxrLEUsaixWKXt2YXIgQj1bXTtCLnB1c2goSysiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEkpKSx6Lmlz''@;'; put 'put ''TnVtYmVyKGspJiZCLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShrKS50b0dNVFN0cmluZygpKSx6LmlzU3RyaW5nKEUpJiZCLnB1c2goInBhdGg9IitFKSx6LmlzU3RyaW5nKGopJiZCLnB1c2goImRvbWFpbj0iK2opLCEwPT09ViYmQi5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9''@;'; put 'put ''Qi5qb2luKCI7ICIpfSxyZWFkOmZ1bmN0aW9uKEspe3ZhciBJPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitLKyIpPShbXjtdKikiKSk7cmV0dXJuIEk/ZGVjb2RlVVJJQ29tcG9uZW50KElbM10pOm51bGx9LHJlbW92ZTpmdW5jdGlvbihLKXt0aGlzLndy''@;'; put 'put ''aXRlKEssIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGU6ZnVuY3Rpb24oKXt9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0scmVtb3ZlOmZ1bmN0aW9uKCl7fX19LDE3OTM6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuL14oW2Etel1bYS16XGQr''@;'; put 'put ''XC0uXSo6KT9cL1wvL2kudGVzdChPKX19LDYyNjg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz1mdW5jdGlvbihLKXtyZXR1cm4gei5pc09iamVjdChLKSYmITA9PT1LLmlzQXhpb3NFcnJvcn19LDc5ODU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ej1SKDQ4NjcpO00uZXhwb3J0cz16LmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgSyxJPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gRShqKXt2YXIgVj1qO3JldHVy''@;'; put 'put ''biBJJiYoay5zZXRBdHRyaWJ1dGUoImhyZWYiLFYpLFY9ay5ocmVmKSxrLnNldEF0dHJpYnV0ZSgiaHJlZiIsVikse2hyZWY6ay5ocmVmLHByb3RvY29sOmsucHJvdG9jb2w/ay5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ay5ob3N0LHNlYXJjaDprLnNlYXJjaD9rLnNlYXJj''@;'; put 'put ''aC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOmsuaGFzaD9rLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTprLmhvc3RuYW1lLHBvcnQ6ay5wb3J0LHBhdGhuYW1lOiIvIj09PWsucGF0aG5hbWUuY2hhckF0KDApP2sucGF0aG5hbWU6Ii8iK2sucGF0aG5hbWV9fXJldHVybiBL''@;'; put 'put ''PUUod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKGope3ZhciBWPXouaXNTdHJpbmcoaik/RShqKTpqO3JldHVybiBWLnByb3RvY29sPT09Sy5wcm90b2NvbCYmVi5ob3N0PT09Sy5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiEwfX0sNjAxNjooTSxPLFIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciB6PVIoNDg2Nyk7TS5leHBvcnRzPWZ1bmN0aW9uKEssSSl7ei5mb3JFYWNoKEssZnVuY3Rpb24oayxFKXtFIT09SSYmRS50b1VwcGVyQ2FzZSgpPT09SS50b1VwcGVyQ2FzZSgpJiYoS1tJXT1rLGRlbGV0ZSBLW0VdKX0pfX0sMTYyMzpNPT57TS5leHBvcnRzPW51bGx9LDQxMDk6KE0s''@;'; put 'put ''TyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpLEs9WyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwi''@;'; put 'put ''bGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXTtNLmV4cG9ydHM9ZnVuY3Rpb24oSSl7dmFyIGssRSxqLFY9e307cmV0dXJuIEkmJnouZm9yRWFjaChJLnNwbGl0''@;'; put 'put ''KCJcbiIpLGZ1bmN0aW9uKEIpe2lmKGo9Qi5pbmRleE9mKCI6Iiksaz16LnRyaW0oQi5zdWJzdHIoMCxqKSkudG9Mb3dlckNhc2UoKSxFPXoudHJpbShCLnN1YnN0cihqKzEpKSxrKXtpZihWW2tdJiZLLmluZGV4T2Yoayk+PTApcmV0dXJuO1Zba109InNldC1jb29raWUiPT09az8oVltrXT9W''@;'; put 'put ''W2tdOltdKS5jb25jYXQoW0VdKTpWW2tdP1Zba10rIiwgIitFOkV9fSksVn19LDIwNTpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXt2YXIgUj0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhPKTtyZXR1cm4gUiYmUlsxXXx8IiJ9fSw4NzEzOk09PnsidXNl''@;'; put 'put ''IHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiBmdW5jdGlvbihSKXtyZXR1cm4gTy5hcHBseShudWxsLFIpfX19LDc2NzU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPVIoNDg2Nyk7TS5leHBvcnRzPWZ1bmN0aW9uKEksayl7az1rfHxu''@;'; put 'put ''ZXcgRm9ybURhdGE7dmFyIEU9W107ZnVuY3Rpb24gaihWKXtyZXR1cm4gbnVsbD09PVY/IiI6Sy5pc0RhdGUoVik/Vi50b0lTT1N0cmluZygpOksuaXNBcnJheUJ1ZmZlcihWKXx8Sy5pc1R5cGVkQXJyYXkoVik/ImZ1bmN0aW9uIj09dHlwZW9mIEJsb2I/bmV3IEJsb2IoW1ZdKTp6LmZyb20o''@;'; put 'put ''Vik6Vn1yZXR1cm4gZnVuY3Rpb24gVihCLFkpe2lmKEsuaXNQbGFpbk9iamVjdChCKXx8Sy5pc0FycmF5KEIpKXtpZigtMSE9PUUuaW5kZXhPZihCKSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrWSk7RS5wdXNoKEIpLEsuZm9yRWFjaChCLGZ1bmN0aW9u''@;'; put 'put ''KFgsVSl7aWYoIUsuaXNVbmRlZmluZWQoWCkpe3ZhciBxLGVlPVk/WSsiLiIrVTpVO2lmKFgmJiFZJiYib2JqZWN0Ij09dHlwZW9mIFgpaWYoSy5lbmRzV2l0aChVLCJ7fSIpKVg9SlNPTi5zdHJpbmdpZnkoWCk7ZWxzZSBpZihLLmVuZHNXaXRoKFUsIltdIikmJihxPUsudG9BcnJheShYKSkp''@;'; put 'put ''cmV0dXJuIHZvaWQgcS5mb3JFYWNoKGZ1bmN0aW9uKHRlKXshSy5pc1VuZGVmaW5lZCh0ZSkmJmsuYXBwZW5kKGVlLGoodGUpKX0pO1YoWCxlZSl9fSksRS5wb3AoKX1lbHNlIGsuYXBwZW5kKFksaihCKSl9KEkpLGt9fSw0ODc1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1MTA4''@;'; put 'put ''KSxLPVIoNzI4OCkudmVyc2lvbixJPVIoMjY0OCksaz17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goZnVuY3Rpb24oaixWKXtrW2pdPWZ1bmN0aW9uKEIpe3JldHVybiB0eXBlb2YgQj09PWp8fCJhIisoVjwxPyJu''@;'; put 'put ''ICI6IiAiKStqfX0pO3ZhciBFPXt9O2sudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGosVixCKXtmdW5jdGlvbiBZKFgsVSl7cmV0dXJuIltBeGlvcyB2IitLKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrWCsiJyIrVSsoQj8iLiAiK0I6IiIpfXJldHVybiBmdW5jdGlvbihYLFUscSl7aWYoITE9''@;'; put 'put ''PT1qKXRocm93IG5ldyBJKFkoVSwiIGhhcyBiZWVuIHJlbW92ZWQiKyhWPyIgaW4gIitWOiIiKSksSS5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIFYmJiFFW1VdJiYoRVtVXT0hMCx6Lndhcm4oWShVLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitWKyIgYW5kIHdpbGwgYmUgcmVtb3Zl''@;'; put 'put ''ZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFqfHxqKFgsVSxxKX19LE0uZXhwb3J0cz17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihqLFYsQil7aWYoIm9iamVjdCIhPXR5cGVvZiBqKXRocm93IG5ldyBJKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixJLkVSUl9CQURfT1BUSU9OX1ZBTFVF''@;'; put 'put ''KTtmb3IodmFyIFk9T2JqZWN0LmtleXMoaiksWD1ZLmxlbmd0aDtYLS0gPjA7KXt2YXIgVT1ZW1hdLHE9VltVXTtpZihxKXt2YXIgZWU9altVXSx0ZT12b2lkIDA9PT1lZXx8cShlZSxVLGopO2lmKCEwIT09dGUpdGhyb3cgbmV3IEkoIm9wdGlvbiAiK1UrIiBtdXN0IGJlICIrdGUsSS5FUlJf''@;'; put 'put ''QkFEX09QVElPTl9WQUxVRSl9ZWxzZSBpZighMCE9PUIpdGhyb3cgbmV3IEkoIlVua25vd24gb3B0aW9uICIrVSxJLkVSUl9CQURfT1BUSU9OKX19LHZhbGlkYXRvcnM6a319LDQ4Njc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVIoMTg0OSksST1PYmplY3QucHJvdG90eXBlLnRv''@;'; put 'put ''U3RyaW5nLGs9KHo9T2JqZWN0LmNyZWF0ZShudWxsKSxmdW5jdGlvbihHKXt2YXIgYj1JLmNhbGwoRyk7cmV0dXJuIHpbYl18fCh6W2JdPWIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KTtmdW5jdGlvbiBFKEcpe3JldHVybiBHPUcudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXtyZXR1''@;'; put 'put ''cm4gayhiKT09PUd9fWZ1bmN0aW9uIGooRyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoRyl9ZnVuY3Rpb24gVihHKXtyZXR1cm4gdm9pZCAwPT09R312YXIgQj1FKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIFkoRyl7cmV0dXJuIG51bGwhPT1HJiYib2JqZWN0Ij09dHlwZW9mIEd9ZnVuY3Rpb24g''@;'; put 'put ''WChHKXtpZigib2JqZWN0IiE9PWsoRykpcmV0dXJuITE7dmFyIGI9T2JqZWN0LmdldFByb3RvdHlwZU9mKEcpO3JldHVybiBudWxsPT09Ynx8Yj09PU9iamVjdC5wcm90b3R5cGV9dmFyIFU9RSgiRGF0ZSIpLHE9RSgiRmlsZSIpLGVlPUUoIkJsb2IiKSx0ZT1FKCJGaWxlTGlzdCIpO2Z1bmN0''@;'; put 'put ''aW9uIG9lKEcpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1JLmNhbGwoRyl9dmFyIHNlPUUoIlVSTFNlYXJjaFBhcmFtcyIpO2Z1bmN0aW9uIGhlKEcsYil7aWYobnVsbCE9RylpZigib2JqZWN0IiE9dHlwZW9mIEcmJihHPVtHXSksaihHKSlmb3IodmFyIEQ9MCxIPUcubGVuZ3RoO0Q8''@;'; put 'put ''SDtEKyspYi5jYWxsKG51bGwsR1tEXSxELEcpO2Vsc2UgZm9yKHZhciBOIGluIEcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsTikmJmIuY2FsbChudWxsLEdbTl0sTixHKX12YXIgdWUsY2U9KHVlPXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmT2JqZWN0LmdldFByb3Rv''@;'; put 'put ''dHlwZU9mKFVpbnQ4QXJyYXkpLGZ1bmN0aW9uKEcpe3JldHVybiB1ZSYmRyBpbnN0YW5jZW9mIHVlfSk7TS5leHBvcnRzPXtpc0FycmF5OmosaXNBcnJheUJ1ZmZlcjpCLGlzQnVmZmVyOmZ1bmN0aW9uKEcpe3JldHVybiBudWxsIT09RyYmIVYoRykmJm51bGwhPT1HLmNvbnN0cnVjdG9yJiYh''@;'; put 'put ''VihHLmNvbnN0cnVjdG9yKSYmImZ1bmN0aW9uIj09dHlwZW9mIEcuY29uc3RydWN0b3IuaXNCdWZmZXImJkcuY29uc3RydWN0b3IuaXNCdWZmZXIoRyl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oRyl7dmFyIGI9IltvYmplY3QgRm9ybURhdGFdIjtyZXR1cm4gRyYmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBGb3JtRGF0YSYmRyBpbnN0YW5jZW9mIEZvcm1EYXRhfHxJLmNhbGwoRyk9PT1ifHxvZShHLnRvU3RyaW5nKSYmRy50b1N0cmluZygpPT09Yil9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKEcpe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/''@;'; put 'put ''QXJyYXlCdWZmZXIuaXNWaWV3KEcpOkcmJkcuYnVmZmVyJiZCKEcuYnVmZmVyKX0saXNTdHJpbmc6ZnVuY3Rpb24oRyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBHfSxpc051bWJlcjpmdW5jdGlvbihHKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEd9LGlzT2JqZWN0OlksaXNQbGFpbk9iamVj''@;'; put 'put ''dDpYLGlzVW5kZWZpbmVkOlYsaXNEYXRlOlUsaXNGaWxlOnEsaXNCbG9iOmVlLGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oRyl7cmV0dXJuIFkoRykmJm9lKEcucGlwZSl9LGlzVVJMU2VhcmNoUGFyYW1zOnNlLGlzU3RhbmRhcmRCcm93c2VyRW52OmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''KHR5cGVvZiBuYXZpZ2F0b3I+InUifHwiUmVhY3ROYXRpdmUiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOYXRpdmVTY3JpcHQiIT09bmF2aWdhdG9yLnByb2R1Y3QmJiJOUyIhPT1uYXZpZ2F0b3IucHJvZHVjdCkmJnR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUifSxmb3JF''@;'; put 'put ''YWNoOmhlLG1lcmdlOmZ1bmN0aW9uIEcoKXt2YXIgYj17fTtmdW5jdGlvbiBEKGcsQyl7YltDXT1YKGJbQ10pJiZYKGcpP0coYltDXSxnKTpYKGcpP0coe30sZyk6aihnKT9nLnNsaWNlKCk6Z31mb3IodmFyIEg9MCxOPWFyZ3VtZW50cy5sZW5ndGg7SDxOO0grKyloZShhcmd1bWVudHNbSF0s''@;'; put 'put ''RCk7cmV0dXJuIGJ9LGV4dGVuZDpmdW5jdGlvbihHLGIsRCl7cmV0dXJuIGhlKGIsZnVuY3Rpb24oSCxOKXtHW05dPUQmJiJmdW5jdGlvbiI9PXR5cGVvZiBIP0soSCxEKTpIfSksR30sdHJpbTpmdW5jdGlvbihHKXtyZXR1cm4gRy50cmltP0cudHJpbSgpOkcucmVwbGFjZSgvXlxzK3xccysk''@;'; put 'put ''L2csIiIpfSxzdHJpcEJPTTpmdW5jdGlvbihHKXtyZXR1cm4gNjUyNzk9PT1HLmNoYXJDb2RlQXQoMCkmJihHPUcuc2xpY2UoMSkpLEd9LGluaGVyaXRzOmZ1bmN0aW9uKEcsYixELEgpe0cucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUsSCksRy5wcm90b3R5cGUuY29uc3Ry''@;'; put 'put ''dWN0b3I9RyxEJiZPYmplY3QuYXNzaWduKEcucHJvdG90eXBlLEQpfSx0b0ZsYXRPYmplY3Q6ZnVuY3Rpb24oRyxiLEQpe3ZhciBILE4sZyxDPXt9O2I9Ynx8e307ZG97Zm9yKE49KEg9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRykpLmxlbmd0aDtOLS0gPjA7KUNbZz1IW05dXXx8KGJb''@;'; put 'put ''Z109R1tnXSxDW2ddPSEwKTtHPU9iamVjdC5nZXRQcm90b3R5cGVPZihHKX13aGlsZShHJiYoIUR8fEQoRyxiKSkmJkchPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gYn0sa2luZE9mOmssa2luZE9mVGVzdDpFLGVuZHNXaXRoOmZ1bmN0aW9uKEcsYixEKXtHPVN0cmluZyhHKSwodm9pZCAw''@;'; put 'put ''PT09RHx8RD5HLmxlbmd0aCkmJihEPUcubGVuZ3RoKTt2YXIgSD1HLmluZGV4T2YoYixELT1iLmxlbmd0aCk7cmV0dXJuLTEhPT1IJiZIPT09RH0sdG9BcnJheTpmdW5jdGlvbihHKXtpZighRylyZXR1cm4gbnVsbDt2YXIgYj1HLmxlbmd0aDtpZihWKGIpKXJldHVybiBudWxsO2Zvcih2YXIg''@;'; put 'put ''RD1uZXcgQXJyYXkoYik7Yi0tID4wOylEW2JdPUdbYl07cmV0dXJuIER9LGlzVHlwZWRBcnJheTpjZSxpc0ZpbGVMaXN0OnRlfX0sNTYyMzpNPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE8oSyxJLGspe0sgaW5zdGFuY2VvZiBSZWdFeHAmJihLPVIoSyxrKSksSSBpbnN0YW5jZW9mIFJlZ0V4''@;'; put 'put ''cCYmKEk9UihJLGspKTt2YXIgRT16KEssSSxrKTtyZXR1cm4gRSYme3N0YXJ0OkVbMF0sZW5kOkVbMV0scHJlOmsuc2xpY2UoMCxFWzBdKSxib2R5Omsuc2xpY2UoRVswXStLLmxlbmd0aCxFWzFdKSxwb3N0Omsuc2xpY2UoRVsxXStJLmxlbmd0aCl9fWZ1bmN0aW9uIFIoSyxJKXt2YXIgaz1J''@;'; put 'put ''Lm1hdGNoKEspO3JldHVybiBrP2tbMF06bnVsbH1mdW5jdGlvbiB6KEssSSxrKXt2YXIgRSxqLFYsQixZLFg9ay5pbmRleE9mKEspLFU9ay5pbmRleE9mKEksWCsxKSxxPVg7aWYoWD49MCYmVT4wKXtpZihLPT09SSlyZXR1cm5bWCxVXTtmb3IoRT1bXSxWPWsubGVuZ3RoO3E+PTAmJiFZOylx''@;'; put 'put ''PT1YPyhFLnB1c2gocSksWD1rLmluZGV4T2YoSyxxKzEpKToxPT1FLmxlbmd0aD9ZPVtFLnBvcCgpLFVdOigoaj1FLnBvcCgpKTxWJiYoVj1qLEI9VSksVT1rLmluZGV4T2YoSSxxKzEpKSxxPVg8VSYmWD49MD9YOlU7RS5sZW5ndGgmJihZPVtWLEJdKX1yZXR1cm4gWX1NLmV4cG9ydHM9TyxP''@;'; put 'put ''LnJhbmdlPXp9LDk3NDI6KE0sTyk9PnsidXNlIHN0cmljdCI7Ty5ieXRlTGVuZ3RoPWZ1bmN0aW9uKEIpe3ZhciBZPWooQiksVT1ZWzFdO3JldHVybiAzKihZWzBdK1UpLzQtVX0sTy50b0J5dGVBcnJheT1mdW5jdGlvbihCKXt2YXIgWSxYLGNlLFU9aihCKSxxPVVbMF0sZWU9VVsxXSx0ZT1u''@;'; put 'put ''ZXcgSygzKihxKyhjZT1lZSkpLzQtY2UpLG9lPTAsc2U9ZWU+MD9xLTQ6cTtmb3IoWD0wO1g8c2U7WCs9NClZPXpbQi5jaGFyQ29kZUF0KFgpXTw8MTh8eltCLmNoYXJDb2RlQXQoWCsxKV08PDEyfHpbQi5jaGFyQ29kZUF0KFgrMildPDw2fHpbQi5jaGFyQ29kZUF0KFgrMyldLHRlW29lKytd''@;'; put 'put ''PVk+PjE2JjI1NSx0ZVtvZSsrXT1ZPj44JjI1NSx0ZVtvZSsrXT0yNTUmWTtyZXR1cm4gMj09PWVlJiYoWT16W0IuY2hhckNvZGVBdChYKV08PDJ8eltCLmNoYXJDb2RlQXQoWCsxKV0+PjQsdGVbb2UrK109MjU1JlkpLDE9PT1lZSYmKFk9eltCLmNoYXJDb2RlQXQoWCldPDwxMHx6W0IuY2hh''@;'; put 'put ''ckNvZGVBdChYKzEpXTw8NHx6W0IuY2hhckNvZGVBdChYKzIpXT4+Mix0ZVtvZSsrXT1ZPj44JjI1NSx0ZVtvZSsrXT0yNTUmWSksdGV9LE8uZnJvbUJ5dGVBcnJheT1mdW5jdGlvbihCKXtmb3IodmFyIFksWD1CLmxlbmd0aCxVPVglMyxxPVtdLHRlPTAsb2U9WC1VO3RlPG9lO3RlKz0xNjM4''@;'; put 'put ''MylxLnB1c2goVihCLHRlLHRlKzE2MzgzPm9lP29lOnRlKzE2MzgzKSk7cmV0dXJuIDE9PT1VP3EucHVzaChSWyhZPUJbWC0xXSk+PjJdK1JbWTw8NCY2M10rIj09Iik6Mj09PVUmJnEucHVzaChSWyhZPShCW1gtMl08PDgpK0JbWC0xXSk+PjEwXStSW1k+PjQmNjNdK1JbWTw8MiY2M10rIj0i''@;'; put 'put ''KSxxLmpvaW4oIiIpfTtmb3IodmFyIFI9W10sej1bXSxLPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LEk9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGs9MDtrPDY0OysraylSW2tdPUlba10s''@;'; put 'put ''eltJLmNoYXJDb2RlQXQoayldPWs7ZnVuY3Rpb24gaihCKXt2YXIgWT1CLmxlbmd0aDtpZihZJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgWD1CLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PVgmJihYPVkp''@;'; put 'put ''LFtYLFg9PT1ZPzA6NC1YJTRdfWZ1bmN0aW9uIFYoQixZLFgpe2Zvcih2YXIgcSxlZT1bXSx0ZT1ZO3RlPFg7dGUrPTMpZWUucHVzaChSWyhxPShCW3RlXTw8MTYmMTY3MTE2ODApKyhCW3RlKzFdPDw4JjY1MjgwKSsoMjU1JkJbdGUrMl0pKT4+MTgmNjNdK1JbcT4+MTImNjNdK1JbcT4+NiY2''@;'; put 'put ''M10rUls2MyZxXSk7cmV0dXJuIGVlLmpvaW4oIiIpfXpbIi0iLmNoYXJDb2RlQXQoMCldPTYyLHpbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSwzNTUwOmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSSh2LHApe2lmKCF2KXRocm93IG5ldyBFcnJv''@;'; put 'put ''cihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsodixwKXt2LnN1cGVyXz1wO3ZhciB3PWZ1bmN0aW9uKCl7fTt3LnByb3RvdHlwZT1wLnByb3RvdHlwZSx2LnByb3RvdHlwZT1uZXcgdyx2LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj12fWZ1bmN0aW9uIEUodixwLHcpe2lmKEUuaXNC''@;'; put 'put ''Tih2KSlyZXR1cm4gdjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09diYmKCJsZSIhPT1wJiYiYmUiIT09cHx8KHc9cCxwPTEwKSx0aGlzLl9pbml0KHZ8fDAscHx8MTAsd3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10''@;'; put 'put ''eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDY2MDEpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVih2LHApe3ZhciB3PXYuY2hhckNvZGVB''@;'; put 'put ''dChwKTtyZXR1cm4gdz49NDgmJnc8PTU3P3ctNDg6dz49NjUmJnc8PTcwP3ctNTU6dz49OTcmJnc8PTEwMj93LTg3OnZvaWQgSSghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit2KX1mdW5jdGlvbiBCKHYscCx3KXt2YXIgSj1WKHYsdyk7cmV0dXJuIHctMT49cCYmKEp8PVYodix3LTEpPDw0''@;'; put 'put ''KSxKfWZ1bmN0aW9uIFkodixwLHcsSil7Zm9yKHZhciBuZT0wLGRlPTAsZmU9TWF0aC5taW4odi5sZW5ndGgsdykseGU9cDt4ZTxmZTt4ZSsrKXt2YXIgTGU9di5jaGFyQ29kZUF0KHhlKS00ODtuZSo9SixkZT1MZT49NDk/TGUtNDkrMTA6TGU+PTE3P0xlLTE3KzEwOkxlLEkoTGU+PTAmJmRl''@;'; put 'put ''PEosIkludmFsaWQgY2hhcmFjdGVyIiksbmUrPWRlfXJldHVybiBuZX1mdW5jdGlvbiBYKHYscCl7di53b3Jkcz1wLndvcmRzLHYubGVuZ3RoPXAubGVuZ3RoLHYubmVnYXRpdmU9cC5uZWdhdGl2ZSx2LnJlZD1wLnJlZH1pZihFLmlzQk49ZnVuY3Rpb24odil7cmV0dXJuIHYgaW5zdGFuY2Vv''@;'; put 'put ''ZiBFfHxudWxsIT09diYmIm9iamVjdCI9PXR5cGVvZiB2JiZ2LmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh2LndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24odixwKXtyZXR1cm4gdi5jbXAocCk+MD92OnB9LEUubWluPWZ1bmN0aW9uKHYscCl7cmV0dXJu''@;'; put 'put ''IHYuY21wKHApPDA/djpwfSxFLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih2LHAsdyl7aWYoIm51bWJlciI9PXR5cGVvZiB2KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHYscCx3KTtpZigib2JqZWN0Ij09dHlwZW9mIHYpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh2LHAsdyk7ImhleCI9PT1w''@;'; put 'put ''JiYocD0xNiksSShwPT09KDB8cCkmJnA+PTImJnA8PTM2KTt2YXIgSj0wOyItIj09PSh2PXYudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoSisrLHRoaXMubmVnYXRpdmU9MSksSjx2Lmxlbmd0aCYmKDE2PT09cD90aGlzLl9wYXJzZUhleCh2LEosdyk6KHRoaXMuX3BhcnNl''@;'; put 'put ''QmFzZSh2LHAsSiksImxlIj09PXcmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxwLHcpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHYscCx3KXt2PDAmJih0aGlzLm5lZ2F0aXZlPTEsdj0tdiksdjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdl0s''@;'; put 'put ''dGhpcy5sZW5ndGg9MSk6djw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ2LHYvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKHY8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdix2LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRo''@;'; put 'put ''aXMubGVuZ3RoPTMpLCJsZSI9PT13JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkscCx3KX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih2LHAsdyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIHYubGVuZ3RoKSx2Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0s''@;'; put 'put ''dGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh2Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBKPTA7Sjx0aGlzLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT0wO3ZhciBuZSxkZSxmZT0wO2lmKCJiZSI9PT13KWZvcihK''@;'; put 'put ''PXYubGVuZ3RoLTEsbmU9MDtKPj0wO0otPTMpdGhpcy53b3Jkc1tuZV18PShkZT12W0pdfHZbSi0xXTw8OHx2W0otMl08PDE2KTw8ZmUmNjcxMDg4NjMsdGhpcy53b3Jkc1tuZSsxXT1kZT4+PjI2LWZlJjY3MTA4ODYzLChmZSs9MjQpPj0yNiYmKGZlLT0yNixuZSsrKTtlbHNlIGlmKCJsZSI9''@;'; put 'put ''PT13KWZvcihKPTAsbmU9MDtKPHYubGVuZ3RoO0orPTMpdGhpcy53b3Jkc1tuZV18PShkZT12W0pdfHZbSisxXTw8OHx2W0orMl08PDE2KTw8ZmUmNjcxMDg4NjMsdGhpcy53b3Jkc1tuZSsxXT1kZT4+PjI2LWZlJjY3MTA4ODYzLChmZSs9MjQpPj0yNiYmKGZlLT0yNixuZSsrKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHYscCx3KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHYubGVuZ3RoLXApLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEo9MDtKPHRoaXMubGVuZ3RoO0orKyl0aGlzLndvcmRz''@;'; put 'put ''W0pdPTA7dmFyIG5lLGRlPTAsZmU9MDtpZigiYmUiPT09dylmb3IoSj12Lmxlbmd0aC0xO0o+PXA7Si09MiluZT1CKHYscCxKKTw8ZGUsdGhpcy53b3Jkc1tmZV18PTY3MTA4ODYzJm5lLGRlPj0xOD8oZGUtPTE4LHRoaXMud29yZHNbZmUrPTFdfD1uZT4+PjI2KTpkZSs9ODtlbHNlIGZvcihK''@;'; put 'put ''PSh2Lmxlbmd0aC1wKSUyPT0wP3ArMTpwO0o8di5sZW5ndGg7Sis9MiluZT1CKHYscCxKKTw8ZGUsdGhpcy53b3Jkc1tmZV18PTY3MTA4ODYzJm5lLGRlPj0xOD8oZGUtPTE4LHRoaXMud29yZHNbZmUrPTFdfD1uZT4+PjI2KTpkZSs9ODt0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFy''@;'; put 'put ''c2VCYXNlPWZ1bmN0aW9uKHYscCx3KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgSj0wLG5lPTE7bmU8PTY3MTA4ODYzO25lKj1wKUorKztKLS0sbmU9bmUvcHwwO2Zvcih2YXIgZGU9di5sZW5ndGgtdyxmZT1kZSVKLHhlPU1hdGgubWluKGRlLGRlLWZlKSt3LExlPTAs''@;'; put 'put ''RmU9dztGZTx4ZTtGZSs9SilMZT1ZKHYsRmUsRmUrSixwKSx0aGlzLmltdWxuKG5lKSx0aGlzLndvcmRzWzBdK0xlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPUxlOnRoaXMuX2lhZGRuKExlKTtpZigwIT09ZmUpe3ZhciBPZT0xO2ZvcihMZT1ZKHYsRmUsdi5sZW5ndGgscCksRmU9MDtGZTxm''@;'; put 'put ''ZTtGZSsrKU9lKj1wO3RoaXMuaW11bG4oT2UpLHRoaXMud29yZHNbMF0rTGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9TGU6dGhpcy5faWFkZG4oTGUpfXRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odil7di53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zv''@;'; put 'put ''cih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD10aGlzLmxlbmd0aCx2Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdi5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHYpe1godix0aGlzKX0sRS5wcm90b3R5''@;'; put 'put ''cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdj1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHYpLHZ9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odil7Zm9yKDt0aGlzLmxlbmd0aDx2Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBl''@;'; put 'put ''Ll9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''JjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e0UucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPVV9Y2F0Y2h7RS5wcm90''@;'; put 'put ''b3R5cGUuaW5zcGVjdD1VfWVsc2UgRS5wcm90b3R5cGUuaW5zcGVjdD1VO2Z1bmN0aW9uIFUoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgcT1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxlZT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSx0ZT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2''@;'; put 'put ''LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2''@;'; put 'put ''LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBvZSh2LHAsdyl7dy5uZWdhdGl2ZT1wLm5lZ2F0aXZlXnYubmVnYXRpdmU7dmFyIEo9di5sZW5ndGgrcC5sZW5ndGh8''@;'; put 'put ''MDt3Lmxlbmd0aD1KLEo9Si0xfDA7dmFyIG5lPTB8di53b3Jkc1swXSxkZT0wfHAud29yZHNbMF0sZmU9bmUqZGUsTGU9ZmUvNjcxMDg4NjR8MDt3LndvcmRzWzBdPTY3MTA4ODYzJmZlO2Zvcih2YXIgRmU9MTtGZTxKO0ZlKyspe2Zvcih2YXIgT2U9TGU+Pj4yNixCZT02NzEwODg2MyZMZSxX''@;'; put 'put ''ZT1NYXRoLm1pbihGZSxwLmxlbmd0aC0xKSxLZT1NYXRoLm1heCgwLEZlLXYubGVuZ3RoKzEpO0tlPD1XZTtLZSsrKU9lKz0oZmU9KG5lPTB8di53b3Jkc1tGZS1LZXwwXSkqKGRlPTB8cC53b3Jkc1tLZV0pK0JlKS82NzEwODg2NHwwLEJlPTY3MTA4ODYzJmZlO3cud29yZHNbRmVdPTB8QmUs''@;'; put 'put ''TGU9MHxPZX1yZXR1cm4gMCE9PUxlP3cud29yZHNbRmVdPTB8TGU6dy5sZW5ndGgtLSx3Ll9zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHYscCl7dmFyIHc7aWYocD0wfHB8fDEsMTY9PT0odj12fHwxMCl8fCJoZXgiPT09dil7dz0iIjtmb3IodmFyIEo9MCxuZT0wLGRl''@;'; put 'put ''PTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl7dmFyIGZlPXRoaXMud29yZHNbZGVdLHhlPSgxNjc3NzIxNSYoZmU8PEp8bmUpKS50b1N0cmluZygxNik7bmU9ZmU+Pj4yNC1KJjE2Nzc3MjE1LChKKz0yKT49MjYmJihKLT0yNixkZS0tKSx3PTAhPT1uZXx8ZGUhPT10aGlzLmxlbmd0aC0xP3FbNi14''@;'; put 'put ''ZS5sZW5ndGhdK3hlK3c6eGUrd31mb3IoMCE9PW5lJiYodz1uZS50b1N0cmluZygxNikrdyk7dy5sZW5ndGglcCE9MDspdz0iMCIrdztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih3PSItIit3KSx3fWlmKHY9PT0oMHx2KSYmdj49MiYmdjw9MzYpe3ZhciBMZT1lZVt2XSxGZT10ZVt2XTt3''@;'; put 'put ''PSIiO3ZhciBPZT10aGlzLmNsb25lKCk7Zm9yKE9lLm5lZ2F0aXZlPTA7IU9lLmlzWmVybygpOyl7dmFyIEJlPU9lLm1vZHJuKEZlKS50b1N0cmluZyh2KTt3PShPZT1PZS5pZGl2bihGZSkpLmlzWmVybygpP0JlK3c6cVtMZS1CZS5sZW5ndGhdK0JlK3d9Zm9yKHRoaXMuaXNaZXJvKCkmJih3''@;'; put 'put ''PSIwIit3KTt3Lmxlbmd0aCVwIT0wOyl3PSIwIit3O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHc9Ii0iK3cpLHd9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB2PXRoaXMud29yZHNbMF07cmV0''@;'; put 'put ''dXJuIDI9PT10aGlzLmxlbmd0aD92Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZl''@;'; put 'put ''bHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy12OnZ9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxqJiYoRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odixwKXtyZXR1cm4gdGhpcy50b0FycmF5''@;'; put 'put ''TGlrZShqLHYscCl9KSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHYscCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdixwKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odixwLHcpe3RoaXMuX3N0cmlwKCk7dmFyIEo9dGhpcy5ieXRlTGVuZ3RoKCksbmU9''@;'; put 'put ''d3x8TWF0aC5tYXgoMSxKKTtJKEo8PW5lLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShuZT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgZmUseGUsZGU9KHhlPW5lLChmZT12KS5hbGxvY1Vuc2FmZT9mZS5hbGxvY1Vuc2FmZSh4ZSk6bmV3''@;'; put 'put ''IGZlKHhlKSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1wPyJMRSI6IkJFIildKGRlLEopLGRlfSxFLnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbih2LHApe2Zvcih2YXIgdz0wLEo9MCxuZT0wLGRlPTA7bmU8dGhpcy5sZW5ndGg7bmUrKyl7dmFyIGZlPXRo''@;'; put 'put ''aXMud29yZHNbbmVdPDxkZXxKO3ZbdysrXT0yNTUmZmUsdzx2Lmxlbmd0aCYmKHZbdysrXT1mZT4+OCYyNTUpLHc8di5sZW5ndGgmJih2W3crK109ZmU+PjE2JjI1NSksNj09PWRlPyh3PHYubGVuZ3RoJiYodlt3KytdPWZlPj4yNCYyNTUpLEo9MCxkZT0wKTooSj1mZT4+PjI0LGRlKz0yKX1p''@;'; put 'put ''Zih3PHYubGVuZ3RoKWZvcih2W3crK109Sjt3PHYubGVuZ3RoOyl2W3crK109MH0sRS5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24odixwKXtmb3IodmFyIHc9di5sZW5ndGgtMSxKPTAsbmU9MCxkZT0wO25lPHRoaXMubGVuZ3RoO25lKyspe3ZhciBmZT10aGlzLndvcmRzW25l''@;'; put 'put ''XTw8ZGV8Sjt2W3ctLV09MjU1JmZlLHc+PTAmJih2W3ctLV09ZmU+PjgmMjU1KSx3Pj0wJiYodlt3LS1dPWZlPj4xNiYyNTUpLDY9PT1kZT8odz49MCYmKHZbdy0tXT1mZT4+MjQmMjU1KSxKPTAsZGU9MCk6KEo9ZmU+Pj4yNCxkZSs9Mil9aWYodz49MClmb3Iodlt3LS1dPUo7dz49MDspdlt3''@;'; put 'put ''LS1dPTB9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbih2KXtyZXR1cm4gMzItTWF0aC5jbHozMih2KX06ZnVuY3Rpb24odil7dmFyIHA9dix3PTA7cmV0dXJuIHA+PTQwOTYmJih3Kz0xMyxwPj4+PTEzKSxwPj02NCYmKHcrPTcscD4+Pj03KSxwPj04JiYodys9''@;'; put 'put ''NCxwPj4+PTQpLHA+PTImJih3Kz0yLHA+Pj49MiksdytwfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odil7aWYoMD09PXYpcmV0dXJuIDI2O3ZhciBwPXYsdz0wO3JldHVybiEoODE5MSZwKSYmKHcrPTEzLHA+Pj49MTMpLCEoMTI3JnApJiYodys9NyxwPj4+PTcpLCEoMTUmcCkm''@;'; put 'put ''Jih3Kz00LHA+Pj49NCksISgzJnApJiYodys9MixwPj4+PTIpLCEoMSZwKSYmdysrLHd9LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBwPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3B9LEUu''@;'; put 'put ''cHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHY9MCxwPTA7cDx0aGlzLmxlbmd0aDtwKyspe3ZhciB3PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbcF0pO2lmKHYrPXcsMjYhPT13KWJyZWFrfXJldHVybiB2fSxFLnByb3Rv''@;'; put 'put ''dHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxF''@;'; put 'put ''LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy50ZXN0bih2LTEpP3RoaXMubm90bih2KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUu''@;'; put 'put ''bmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odil7Zm9yKDt0aGlzLmxlbmd0aDx2''@;'; put 'put ''Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twXXx2LndvcmRzW3BdO3JldHVybiB0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odil7cmV0dXJuIEkoMD09''@;'; put 'put ''KHRoaXMubmVnYXRpdmV8di5uZWdhdGl2ZSkpLHRoaXMuaXVvcih2KX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3Iodik6di5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHYp''@;'; put 'put ''e3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih2KTp2LmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odil7dmFyIHA7cD10aGlzLmxlbmd0aD52Lmxlbmd0aD92OnRoaXM7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3Kysp''@;'; put 'put ''dGhpcy53b3Jkc1t3XT10aGlzLndvcmRzW3ddJnYud29yZHNbd107cmV0dXJuIHRoaXMubGVuZ3RoPXAubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odil7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8di5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodil9''@;'; put 'put ''LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodik6di5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xv''@;'; put 'put ''bmUoKS5pdWFuZCh2KTp2LmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHYpe3ZhciBwLHc7dGhpcy5sZW5ndGg+di5sZW5ndGg/KHA9dGhpcyx3PXYpOihwPXYsdz10aGlzKTtmb3IodmFyIEo9MDtKPHcubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPXAu''@;'; put 'put ''d29yZHNbSl1edy53b3Jkc1tKXTtpZih0aGlzIT09cClmb3IoO0o8cC5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09cC53b3Jkc1tKXTtyZXR1cm4gdGhpcy5sZW5ndGg9cC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih2KXtyZXR1cm4gSSgwPT0odGhp''@;'; put 'put ''cy5uZWdhdGl2ZXx2Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih2KX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih2KTp2LmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih2''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHYpOnYuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odil7SSgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApO3ZhciBwPTB8TWF0aC5jZWlsKHYvMjYpLHc9diUyNjt0''@;'; put 'put ''aGlzLl9leHBhbmQocCksdz4wJiZwLS07Zm9yKHZhciBKPTA7SjxwO0orKyl0aGlzLndvcmRzW0pdPTY3MTA4ODYzJn50aGlzLndvcmRzW0pdO3JldHVybiB3PjAmJih0aGlzLndvcmRzW0pdPX50aGlzLndvcmRzW0pdJjY3MTA4ODYzPj4yNi13KSx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlw''@;'; put 'put ''ZS5ub3RuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odil9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odixwKXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHc9di8yNnwwLEo9diUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHcrMSksdGhpcy53b3Jkc1t3''@;'; put 'put ''XT1wP3RoaXMud29yZHNbd118MTw8Sjp0aGlzLndvcmRzW3ddJn4oMTw8SiksdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih2KXt2YXIgcCx3LEo7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT12Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAscD10aGlz''@;'; put 'put ''LmlzdWIodiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09di5uZWdhdGl2ZSlyZXR1cm4gdi5uZWdhdGl2ZT0wLHA9dGhpcy5pc3ViKHYpLHYubmVnYXRpdmU9MSxwLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnYubGVuZ3RoPyh3''@;'; put 'put ''PXRoaXMsSj12KToodz12LEo9dGhpcyk7Zm9yKHZhciBuZT0wLGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT02NzEwODg2MyYocD0oMHx3LndvcmRzW2RlXSkrKDB8Si53b3Jkc1tkZV0pK25lKSxuZT1wPj4+MjY7Zm9yKDswIT09bmUmJmRlPHcubGVuZ3RoO2RlKyspdGhp''@;'; put 'put ''cy53b3Jkc1tkZV09NjcxMDg4NjMmKHA9KDB8dy53b3Jkc1tkZV0pK25lKSxuZT1wPj4+MjY7aWYodGhpcy5sZW5ndGg9dy5sZW5ndGgsMCE9PW5lKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPW5lLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih3IT09dGhpcylmb3IoO2RlPHcubGVuZ3RoO2RlKysp''@;'; put 'put ''dGhpcy53b3Jkc1tkZV09dy53b3Jkc1tkZV07cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih2KXt2YXIgcDtyZXR1cm4gMCE9PXYubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh2Lm5lZ2F0aXZlPTAscD10aGlzLnN1Yih2KSx2Lm5lZ2F0aXZlXj0xLHApOjA9PT12''@;'; put 'put ''Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHA9di5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHApOnRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHYpOnYuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0''@;'; put 'put ''aW9uKHYpe2lmKDAhPT12Lm5lZ2F0aXZlKXt2Lm5lZ2F0aXZlPTA7dmFyIHA9dGhpcy5pYWRkKHYpO3JldHVybiB2Lm5lZ2F0aXZlPTEscC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh2KSx0aGlzLm5lZ2F0aXZlPTEs''@;'; put 'put ''dGhpcy5fbm9ybVNpZ24oKTt2YXIgdyxKLG5lPXRoaXMuY21wKHYpO2lmKDA9PT1uZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7bmU+MD8odz10aGlzLEo9dik6KHc9dixKPXRoaXMpO2Zvcih2YXIgZGU9MCxmZT0wO2ZlPEoubGVu''@;'; put 'put ''Z3RoO2ZlKyspZGU9KHA9KDB8dy53b3Jkc1tmZV0pLSgwfEoud29yZHNbZmVdKStkZSk+PjI2LHRoaXMud29yZHNbZmVdPTY3MTA4ODYzJnA7Zm9yKDswIT09ZGUmJmZlPHcubGVuZ3RoO2ZlKyspZGU9KHA9KDB8dy53b3Jkc1tmZV0pK2RlKT4+MjYsdGhpcy53b3Jkc1tmZV09NjcxMDg4NjMm''@;'; put 'put ''cDtpZigwPT09ZGUmJmZlPHcubGVuZ3RoJiZ3IT09dGhpcylmb3IoO2ZlPHcubGVuZ3RoO2ZlKyspdGhpcy53b3Jkc1tmZV09dy53b3Jkc1tmZV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGZlKSx3IT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5fc3Ry''@;'; put 'put ''aXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih2KX07dmFyIHNlPWZ1bmN0aW9uKHYscCx3KXt2YXIgSixuZSxkZSxmZT12LndvcmRzLHhlPXAud29yZHMsTGU9dy53b3JkcyxGZT0wLE9lPTB8ZmVbMF0sQmU9ODE5MSZPZSxXZT1PZT4+''@;'; put 'put ''PjEzLEtlPTB8ZmVbMV0sWWU9ODE5MSZLZSxKZT1LZT4+PjEzLGx0PTB8ZmVbMl0sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8ZmVbM10sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8ZmVbNF0sVWU9ODE5MSZYZSxodD1YZT4+PjEzLE1lPTB8ZmVbNV0sRGU9ODE5MSZNZSx6ZT1NZT4+''@;'; put 'put ''PjEzLGl0PTB8ZmVbNl0sdXQ9ODE5MSZpdCxNdD1pdD4+PjEzLEh0PTB8ZmVbN10sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENuPTB8ZmVbOF0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8ZmVbOV0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLE5uPTB8eGVbMF0sZnQ9ODE5MSZObixmbj1Obj4+''@;'; put 'put ''PjEzLGhuPTB8eGVbMV0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8eGVbMl0sTnQ9ODE5MSZfdCx2bj1fdD4+PjEzLHJ0PTB8eGVbM10sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8eGVbNF0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLExuPTB8eGVbNV0senQ9ODE5MSZMbix5bj1Mbj4+''@;'; put 'put ''PjEzLHhuPTB8eGVbNl0sc249ODE5MSZ4bixCbj14bj4+PjEzLE9uPTB8eGVbN10sJHQ9ODE5MSZPbixGbj1Pbj4+PjEzLG5pPTB8eGVbOF0sbG49ODE5MSZuaSxqbj1uaT4+PjEzLHFyPTB8eGVbOV0sZ2k9ODE5MSZxcix4cj1xcj4+PjEzO3cubmVnYXRpdmU9di5uZWdhdGl2ZV5wLm5lZ2F0''@;'; put 'put ''aXZlLHcubGVuZ3RoPTE5O3ZhciBVaT0oRmUrKEo9TWF0aC5pbXVsKEJlLGZ0KSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKEJlLGZuKSkrTWF0aC5pbXVsKFdlLGZ0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9TWF0aC5pbXVsKFdlLGZuKSkrKG5lPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVp''@;'; put 'put ''Jj02NzEwODg2MyxKPU1hdGguaW11bChZZSxmdCksbmU9KG5lPU1hdGguaW11bChZZSxmbikpK01hdGguaW11bChKZSxmdCl8MCxkZT1NYXRoLmltdWwoSmUsZm4pO3ZhciBLcj0oRmUrKEo9SitNYXRoLmltdWwoQmUsd3QpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChCZSxY''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFdlLHd0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLFh0KXwwKSsobmU+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFBlLGZ0KSxuZT0obmU9TWF0aC5pbXVsKFBlLGZuKSkrTWF0aC5pbXVsKGJlLGZ0KXww''@;'; put 'put ''LGRlPU1hdGguaW11bChiZSxmbiksSj1KK01hdGguaW11bChZZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoSmUsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKEplLFh0KXwwO3ZhciBubz0oRmUrKEo9SitNYXRoLmltdWwoQmUsTnQpfDApfDApKygoODE5MSYo''@;'; put 'put ''bmU9KG5lPW5lK01hdGguaW11bChCZSx2bil8MCkrTWF0aC5pbXVsKFdlLE50KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLHZuKXwwKSsobmU+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFRlLGZ0KSxuZT0obmU9TWF0aC5pbXVsKFRl''@;'; put 'put ''LGZuKSkrTWF0aC5pbXVsKHFlLGZ0KXwwLGRlPU1hdGguaW11bChxZSxmbiksSj1KK01hdGguaW11bChQZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLFh0KXwwLEo9SitNYXRoLmltdWwoWWUsTnQpfDAs''@;'; put 'put ''bmU9KG5lPW5lK01hdGguaW11bChZZSx2bil8MCkrTWF0aC5pbXVsKEplLE50KXwwLGRlPWRlK01hdGguaW11bChKZSx2bil8MDt2YXIgRnI9KEZlKyhKPUorTWF0aC5pbXVsKEJlLEl0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoQmUsSnQpfDApK01hdGguaW11bChXZSxJ''@;'; put 'put ''dCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxKdCl8MCkrKG5lPj4+MTMpfDApKyhGcj4+PjI2KXwwLEZyJj02NzEwODg2MyxKPU1hdGguaW11bChVZSxmdCksbmU9KG5lPU1hdGguaW11bChVZSxmbikpK01hdGguaW11bChodCxmdCl8MCxkZT1NYXRoLmltdWwoaHQsZm4p''@;'; put 'put ''LEo9SitNYXRoLmltdWwoVGUsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLGRlPWRlK01hdGguaW11bChxZSxYdCl8MCxKPUorTWF0aC5pbXVsKFBlLE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsdm4pfDApK01hdGguaW11bChiZSxO''@;'; put 'put ''dCl8MCxkZT1kZStNYXRoLmltdWwoYmUsdm4pfDAsSj1KK01hdGguaW11bChZZSxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsZGU9ZGUrTWF0aC5pbXVsKEplLEp0KXwwO3ZhciBxaT0oRmUrKEo9SitNYXRoLmltdWwoQmUscHQpfDApfDAp''@;'; put 'put ''KygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChCZSxZdCl8MCkrTWF0aC5pbXVsKFdlLHB0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLFl0KXwwKSsobmU+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKERlLGZ0KSxuZT0obmU9TWF0''@;'; put 'put ''aC5pbXVsKERlLGZuKSkrTWF0aC5pbXVsKHplLGZ0KXwwLGRlPU1hdGguaW11bCh6ZSxmbiksSj1KK01hdGguaW11bChVZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LFh0KXwwLEo9SitNYXRoLmltdWwo''@;'; put 'put ''VGUsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSx2bil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLGRlPWRlK01hdGguaW11bChxZSx2bil8MCxKPUorTWF0aC5pbXVsKFBlLEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsSnQpfDApK01hdGguaW11bChiZSxJdCl8MCxkZT1kZStNYXRo''@;'; put 'put ''LmltdWwoYmUsSnQpfDAsSj1KK01hdGguaW11bChZZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoSmUscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKEplLFl0KXwwO3ZhciBKaT0oRmUrKEo9SitNYXRoLmltdWwoQmUsenQpfDApfDApKygoODE5MSYobmU9KG5l''@;'; put 'put ''PW5lK01hdGguaW11bChCZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLHluKXwwKSsobmU+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKHV0LGZ0KSxuZT0obmU9TWF0aC5pbXVsKHV0LGZuKSkr''@;'; put 'put ''TWF0aC5pbXVsKE10LGZ0KXwwLGRlPU1hdGguaW11bChNdCxmbiksSj1KK01hdGguaW11bChEZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLFh0KXwwKStNYXRoLmltdWwoemUsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLFh0KXwwLEo9SitNYXRoLmltdWwoVWUsTnQpfDAsbmU9KG5l''@;'; put 'put ''PW5lK01hdGguaW11bChVZSx2bil8MCkrTWF0aC5pbXVsKGh0LE50KXwwLGRlPWRlK01hdGguaW11bChodCx2bil8MCxKPUorTWF0aC5pbXVsKFRlLEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCxkZT1kZStNYXRoLmltdWwocWUsSnQpfDAs''@;'; put 'put ''Sj1KK01hdGguaW11bChQZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmltdWwoYmUscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLFl0KXwwLEo9SitNYXRoLmltdWwoWWUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKEplLHp0''@;'; put 'put ''KXwwLGRlPWRlK01hdGguaW11bChKZSx5bil8MDt2YXIgYW89KEZlKyhKPUorTWF0aC5pbXVsKEJlLHNuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoQmUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxCbil8MCkr''@;'; put 'put ''KG5lPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2MyxKPU1hdGguaW11bChQdCxmdCksbmU9KG5lPU1hdGguaW11bChQdCxmbikpK01hdGguaW11bChvbixmdCl8MCxkZT1NYXRoLmltdWwob24sZm4pLEo9SitNYXRoLmltdWwodXQsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1''@;'; put 'put ''dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0KXwwLGRlPWRlK01hdGguaW11bChNdCxYdCl8MCxKPUorTWF0aC5pbXVsKERlLE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsdm4pfDApK01hdGguaW11bCh6ZSxOdCl8MCxkZT1kZStNYXRoLmltdWwoemUsdm4pfDAsSj1KK01hdGguaW11bChV''@;'; put 'put ''ZSxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LEp0KXwwLEo9SitNYXRoLmltdWwoVGUscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxZdCl8MCkrTWF0aC5pbXVsKHFlLHB0KXwwLGRlPWRlK01hdGgu''@;'; put 'put ''aW11bChxZSxZdCl8MCxKPUorTWF0aC5pbXVsKFBlLHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCxkZT1kZStNYXRoLmltdWwoYmUseW4pfDAsSj1KK01hdGguaW11bChZZSxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLEJuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoSmUsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKEplLEJuKXwwO3ZhciBybz0oRmUrKEo9SitNYXRoLmltdWwoQmUsJHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChCZSxGbil8MCkrTWF0aC5pbXVsKFdlLCR0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5p''@;'; put 'put ''bXVsKFdlLEZuKXwwKSsobmU+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFV0LGZ0KSxuZT0obmU9TWF0aC5pbXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJuLGZ0KXwwLGRlPU1hdGguaW11bChibixmbiksSj1KK01hdGguaW11bChQdCx3dCl8MCxuZT0obmU9''@;'; put 'put ''bmUrTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLFh0KXwwLEo9SitNYXRoLmltdWwodXQsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCx2bil8MCkrTWF0aC5pbXVsKE10LE50KXwwLGRlPWRlK01hdGguaW11bChNdCx2bil8MCxK''@;'; put 'put ''PUorTWF0aC5pbXVsKERlLEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsSnQpfDApK01hdGguaW11bCh6ZSxJdCl8MCxkZT1kZStNYXRoLmltdWwoemUsSnQpfDAsSj1KK01hdGguaW11bChVZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQp''@;'; put 'put ''fDAsZGU9ZGUrTWF0aC5pbXVsKGh0LFl0KXwwLEo9SitNYXRoLmltdWwoVGUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSx5bil8MCkrTWF0aC5pbXVsKHFlLHp0KXwwLGRlPWRlK01hdGguaW11bChxZSx5bil8MCxKPUorTWF0aC5pbXVsKFBlLHNuKXwwLG5lPShuZT1uZStNYXRoLmlt''@;'; put 'put ''dWwoUGUsQm4pfDApK01hdGguaW11bChiZSxzbil8MCxkZT1kZStNYXRoLmltdWwoYmUsQm4pfDAsSj1KK01hdGguaW11bChZZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKEplLEZuKXwwO3ZhciBpbz0oRmUr''@;'; put 'put ''KEo9SitNYXRoLmltdWwoQmUsbG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChCZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLGpuKXwwKSsobmU+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLEo9''@;'; put 'put ''TWF0aC5pbXVsKGVuLGZ0KSxuZT0obmU9TWF0aC5pbXVsKGVuLGZuKSkrTWF0aC5pbXVsKCRuLGZ0KXwwLGRlPU1hdGguaW11bCgkbixmbiksSj1KK01hdGguaW11bChVdCx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LFh0KXwwKStNYXRoLmltdWwoYm4sd3QpfDAsZGU9ZGUrTWF0aC5p''@;'; put 'put ''bXVsKGJuLFh0KXwwLEo9SitNYXRoLmltdWwoUHQsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCx2bil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLGRlPWRlK01hdGguaW11bChvbix2bil8MCxKPUorTWF0aC5pbXVsKHV0LEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQsSnQpfDApK01h''@;'; put 'put ''dGguaW11bChNdCxJdCl8MCxkZT1kZStNYXRoLmltdWwoTXQsSnQpfDAsSj1KK01hdGguaW11bChEZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLFl0KXwwLEo9SitNYXRoLmltdWwoVWUsenQpfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLGRlPWRlK01hdGguaW11bChodCx5bil8MCxKPUorTWF0aC5pbXVsKFRlLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChxZSxzbil8MCxkZT1kZStNYXRoLmltdWwocWUsQm4p''@;'; put 'put ''fDAsSj1KK01hdGguaW11bChQZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLEZuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLEZuKXwwLEo9SitNYXRoLmltdWwoWWUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKEpl''@;'; put 'put ''LGxuKXwwLGRlPWRlK01hdGguaW11bChKZSxqbil8MDt2YXIgR2k9KEZlKyhKPUorTWF0aC5pbXVsKEJlLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoQmUseHIpfDApK01hdGguaW11bChXZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSx4cil8''@;'; put 'put ''MCkrKG5lPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2MyxKPU1hdGguaW11bChlbix3dCksbmU9KG5lPU1hdGguaW11bChlbixYdCkpK01hdGguaW11bCgkbix3dCl8MCxkZT1NYXRoLmltdWwoJG4sWHQpLEo9SitNYXRoLmltdWwoVXQsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11''@;'; put 'put ''bChVdCx2bil8MCkrTWF0aC5pbXVsKGJuLE50KXwwLGRlPWRlK01hdGguaW11bChibix2bil8MCxKPUorTWF0aC5pbXVsKFB0LEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsSnQpfDApK01hdGguaW11bChvbixJdCl8MCxkZT1kZStNYXRoLmltdWwob24sSnQpfDAsSj1KK01hdGguaW11''@;'; put 'put ''bCh1dCxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LFl0KXwwLEo9SitNYXRoLmltdWwoRGUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLGRlPWRlK01h''@;'; put 'put ''dGguaW11bCh6ZSx5bil8MCxKPUorTWF0aC5pbXVsKFVlLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCxkZT1kZStNYXRoLmltdWwoaHQsQm4pfDAsSj1KK01hdGguaW11bChUZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLEZuKXww''@;'; put 'put ''KStNYXRoLmltdWwocWUsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHFlLEZuKXwwLEo9SitNYXRoLmltdWwoUGUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwLGRlPWRlK01hdGguaW11bChiZSxqbil8MDt2YXIgaG89KEZlKyhKPUorTWF0aC5p''@;'; put 'put ''bXVsKFllLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoWWUseHIpfDApK01hdGguaW11bChKZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChKZSx4cil8MCkrKG5lPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxKPU1hdGguaW11bChl''@;'; put 'put ''bixOdCksbmU9KG5lPU1hdGguaW11bChlbix2bikpK01hdGguaW11bCgkbixOdCl8MCxkZT1NYXRoLmltdWwoJG4sdm4pLEo9SitNYXRoLmltdWwoVXQsSXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxKdCl8MCkrTWF0aC5pbXVsKGJuLEl0KXwwLGRlPWRlK01hdGguaW11bChibixKdCl8''@;'; put 'put ''MCxKPUorTWF0aC5pbXVsKFB0LHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsWXQpfDApK01hdGguaW11bChvbixwdCl8MCxkZT1kZStNYXRoLmltdWwob24sWXQpfDAsSj1KK01hdGguaW11bCh1dCx6dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQs''@;'; put 'put ''enQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LHluKXwwLEo9SitNYXRoLmltdWwoRGUsc24pfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLGRlPWRlK01hdGguaW11bCh6ZSxCbil8MCxKPUorTWF0aC5pbXVsKFVlLCR0KXwwLG5lPShuZT1uZStNYXRo''@;'; put 'put ''LmltdWwoVWUsRm4pfDApK01hdGguaW11bChodCwkdCl8MCxkZT1kZStNYXRoLmltdWwoaHQsRm4pfDAsSj1KK01hdGguaW11bChUZSxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKHFlLGpuKXwwO3ZhciB5cj0o''@;'; put 'put ''RmUrKEo9SitNYXRoLmltdWwoUGUsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChQZSx4cil8MCkrTWF0aC5pbXVsKGJlLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKGJlLHhyKXwwKSsobmU+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYz''@;'; put 'put ''LEo9TWF0aC5pbXVsKGVuLEl0KSxuZT0obmU9TWF0aC5pbXVsKGVuLEp0KSkrTWF0aC5pbXVsKCRuLEl0KXwwLGRlPU1hdGguaW11bCgkbixKdCksSj1KK01hdGguaW11bChVdCxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LFl0KXwwKStNYXRoLmltdWwoYm4scHQpfDAsZGU9ZGUrTWF0''@;'; put 'put ''aC5pbXVsKGJuLFl0KXwwLEo9SitNYXRoLmltdWwoUHQsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLGRlPWRlK01hdGguaW11bChvbix5bil8MCxKPUorTWF0aC5pbXVsKHV0LHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQsQm4pfDAp''@;'; put 'put ''K01hdGguaW11bChNdCxzbil8MCxkZT1kZStNYXRoLmltdWwoTXQsQm4pfDAsSj1KK01hdGguaW11bChEZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLEZuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLEZuKXwwLEo9SitNYXRoLmltdWwoVWUsbG4pfDAs''@;'; put 'put ''bmU9KG5lPW5lK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwLGRlPWRlK01hdGguaW11bChodCxqbil8MDt2YXIgUGk9KEZlKyhKPUorTWF0aC5pbXVsKFRlLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoVGUseHIpfDApK01hdGguaW11bChxZSxn''@;'; put 'put ''aSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChxZSx4cil8MCkrKG5lPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2MyxKPU1hdGguaW11bChlbixwdCksbmU9KG5lPU1hdGguaW11bChlbixZdCkpK01hdGguaW11bCgkbixwdCl8MCxkZT1NYXRoLmltdWwoJG4sWXQp''@;'; put 'put ''LEo9SitNYXRoLmltdWwoVXQsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCx5bil8MCkrTWF0aC5pbXVsKGJuLHp0KXwwLGRlPWRlK01hdGguaW11bChibix5bil8MCxKPUorTWF0aC5pbXVsKFB0LHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsQm4pfDApK01hdGguaW11bChvbixz''@;'; put 'put ''bil8MCxkZT1kZStNYXRoLmltdWwob24sQm4pfDAsSj1KK01hdGguaW11bCh1dCwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LEZuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LEZuKXwwLEo9SitNYXRoLmltdWwoRGUsbG4pfDAsbmU9KG5lPW5lK01hdGgu''@;'; put 'put ''aW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwLGRlPWRlK01hdGguaW11bCh6ZSxqbil8MDt2YXIgTG89KEZlKyhKPUorTWF0aC5pbXVsKFVlLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoVWUseHIpfDApK01hdGguaW11bChodCxnaSl8MCkpPDwxMyl8MDtG''@;'; put 'put ''ZT0oKGRlPWRlK01hdGguaW11bChodCx4cil8MCkrKG5lPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2MyxKPU1hdGguaW11bChlbix6dCksbmU9KG5lPU1hdGguaW11bChlbix5bikpK01hdGguaW11bCgkbix6dCl8MCxkZT1NYXRoLmltdWwoJG4seW4pLEo9SitNYXRoLmltdWwo''@;'; put 'put ''VXQsc24pfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxCbil8MCkrTWF0aC5pbXVsKGJuLHNuKXwwLGRlPWRlK01hdGguaW11bChibixCbil8MCxKPUorTWF0aC5pbXVsKFB0LCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsRm4pfDApK01hdGguaW11bChvbiwkdCl8MCxkZT1kZStNYXRo''@;'; put 'put ''LmltdWwob24sRm4pfDAsSj1KK01hdGguaW11bCh1dCxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LGpuKXwwKStNYXRoLmltdWwoTXQsbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKE10LGpuKXwwO3ZhciBocz0oRmUrKEo9SitNYXRoLmltdWwoRGUsZ2kpfDApfDApKygoODE5MSYobmU9KG5l''@;'; put 'put ''PW5lK01hdGguaW11bChEZSx4cil8MCkrTWF0aC5pbXVsKHplLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKHplLHhyKXwwKSsobmU+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLHNuKSxuZT0obmU9TWF0aC5pbXVsKGVuLEJuKSkr''@;'; put 'put ''TWF0aC5pbXVsKCRuLHNuKXwwLGRlPU1hdGguaW11bCgkbixCbiksSj1KK01hdGguaW11bChVdCwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LEZuKXwwKStNYXRoLmltdWwoYm4sJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLEZuKXwwLEo9SitNYXRoLmltdWwoUHQsbG4pfDAsbmU9KG5l''@;'; put 'put ''PW5lK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwLGRlPWRlK01hdGguaW11bChvbixqbil8MDt2YXIgcnM9KEZlKyhKPUorTWF0aC5pbXVsKHV0LGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwodXQseHIpfDApK01hdGguaW11bChNdCxnaSl8MCkp''@;'; put 'put ''PDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChNdCx4cil8MCkrKG5lPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxKPU1hdGguaW11bChlbiwkdCksbmU9KG5lPU1hdGguaW11bChlbixGbikpK01hdGguaW11bCgkbiwkdCl8MCxkZT1NYXRoLmltdWwoJG4sRm4pLEo9SitN''@;'; put 'put ''YXRoLmltdWwoVXQsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxqbil8MCkrTWF0aC5pbXVsKGJuLGxuKXwwLGRlPWRlK01hdGguaW11bChibixqbil8MDt2YXIgTGM9KEZlKyhKPUorTWF0aC5pbXVsKFB0LGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoUHQseHIp''@;'; put 'put ''fDApK01hdGguaW11bChvbixnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChvbix4cil8MCkrKG5lPj4+MTMpfDApKyhMYz4+PjI2KXwwLExjJj02NzEwODg2MyxKPU1hdGguaW11bChlbixsbiksbmU9KG5lPU1hdGguaW11bChlbixqbikpK01hdGguaW11bCgkbixsbil8MCxk''@;'; put 'put ''ZT1NYXRoLmltdWwoJG4sam4pO3ZhciB1bD0oRmUrKEo9SitNYXRoLmltdWwoVXQsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVdCx4cil8MCkrTWF0aC5pbXVsKGJuLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKGJuLHhyKXwwKSsobmU+Pj4xMyl8''@;'; put 'put ''MCkrKHVsPj4+MjYpfDAsdWwmPTY3MTA4ODYzO3ZhciBSYz0oRmUrKEo9TWF0aC5pbXVsKGVuLGdpKSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKGVuLHhyKSkrTWF0aC5pbXVsKCRuLGdpKXwwKSk8PDEzKXwwO3JldHVybiBGZT0oKGRlPU1hdGguaW11bCgkbix4cikpKyhuZT4+PjEz''@;'; put 'put ''KXwwKSsoUmM+Pj4yNil8MCxSYyY9NjcxMDg4NjMsTGVbMF09VWksTGVbMV09S3IsTGVbMl09bm8sTGVbM109RnIsTGVbNF09cWksTGVbNV09SmksTGVbNl09YW8sTGVbN109cm8sTGVbOF09aW8sTGVbOV09R2ksTGVbMTBdPWhvLExlWzExXT15cixMZVsxMl09UGksTGVbMTNdPUxvLExlWzE0''@;'; put 'put ''XT1ocyxMZVsxNV09cnMsTGVbMTZdPUxjLExlWzE3XT11bCxMZVsxOF09UmMsMCE9PUZlJiYoTGVbMTldPUZlLHcubGVuZ3RoKyspLHd9O2Z1bmN0aW9uIGhlKHYscCx3KXt3Lm5lZ2F0aXZlPXAubmVnYXRpdmVedi5uZWdhdGl2ZSx3Lmxlbmd0aD12Lmxlbmd0aCtwLmxlbmd0aDtmb3IodmFy''@;'; put 'put ''IEo9MCxuZT0wLGRlPTA7ZGU8dy5sZW5ndGgtMTtkZSsrKXt2YXIgZmU9bmU7bmU9MDtmb3IodmFyIHhlPTY3MTA4ODYzJkosTGU9TWF0aC5taW4oZGUscC5sZW5ndGgtMSksRmU9TWF0aC5tYXgoMCxkZS12Lmxlbmd0aCsxKTtGZTw9TGU7RmUrKyl7dmFyIEJlPSgwfHYud29yZHNbZGUtRmVd''@;'; put 'put ''KSooMHxwLndvcmRzW0ZlXSksV2U9NjcxMDg4NjMmQmU7eGU9NjcxMDg4NjMmKFdlPVdlK3hlfDApLG5lKz0oZmU9KGZlPWZlKyhCZS82NzEwODg2NHwwKXwwKSsoV2U+Pj4yNil8MCk+Pj4yNixmZSY9NjcxMDg4NjN9dy53b3Jkc1tkZV09eGUsSj1mZSxmZT1uZX1yZXR1cm4gMCE9PUo/dy53''@;'; put 'put ''b3Jkc1tkZV09Sjp3Lmxlbmd0aC0tLHcuX3N0cmlwKCl9ZnVuY3Rpb24gdWUodixwLHcpe3JldHVybiBoZSh2LHAsdyl9ZnVuY3Rpb24gY2UodixwKXt0aGlzLng9dix0aGlzLnk9cH1NYXRoLmltdWx8fChzZT1vZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odixwKXt2YXIgdz10aGlz''@;'; put 'put ''Lmxlbmd0aCt2Lmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT12Lmxlbmd0aD9zZSh0aGlzLHYscCk6dzw2Mz9vZSh0aGlzLHYscCk6dzwxMDI0P2hlKHRoaXMsdixwKTp1ZSh0aGlzLHYscCl9LGNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHYpe2Zvcih2YXIgcD1u''@;'; put 'put ''ZXcgQXJyYXkodiksdz1FLnByb3RvdHlwZS5fY291bnRCaXRzKHYpLTEsSj0wO0o8djtKKyspcFtKXT10aGlzLnJldkJpbihKLHcsdik7cmV0dXJuIHB9LGNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odixwLHcpe2lmKDA9PT12fHx2PT09dy0xKXJldHVybiB2O2Zvcih2YXIgSj0wLG5l''@;'; put 'put ''PTA7bmU8cDtuZSsrKUp8PSgxJnYpPDxwLW5lLTEsdj4+PTE7cmV0dXJuIEp9LGNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHYscCx3LEosbmUsZGUpe2Zvcih2YXIgZmU9MDtmZTxkZTtmZSsrKUpbZmVdPXBbdltmZV1dLG5lW2ZlXT13W3ZbZmVdXX0sY2UucHJvdG90eXBlLnRyYW5z''@;'; put 'put ''Zm9ybT1mdW5jdGlvbih2LHAsdyxKLG5lLGRlKXt0aGlzLnBlcm11dGUoZGUsdixwLHcsSixuZSk7Zm9yKHZhciBmZT0xO2ZlPG5lO2ZlPDw9MSlmb3IodmFyIHhlPWZlPDwxLExlPU1hdGguY29zKDIqTWF0aC5QSS94ZSksRmU9TWF0aC5zaW4oMipNYXRoLlBJL3hlKSxPZT0wO09lPG5lO09l''@;'; put 'put ''Kz14ZSlmb3IodmFyIEJlPUxlLFdlPUZlLEtlPTA7S2U8ZmU7S2UrKyl7dmFyIFllPXdbT2UrS2VdLEplPUpbT2UrS2VdLGx0PXdbT2UrS2UrZmVdLFBlPUpbT2UrS2UrZmVdLGJlPUJlKmx0LVdlKlBlO1BlPUJlKlBlK1dlKmx0LHdbT2UrS2VdPVllKyhsdD1iZSksSltPZStLZV09SmUrUGUs''@;'; put 'put ''d1tPZStLZStmZV09WWUtbHQsSltPZStLZStmZV09SmUtUGUsS2UhPT14ZSYmKGJlPUxlKkJlLUZlKldlLFdlPUxlKldlK0ZlKkJlLEJlPWJlKX19LGNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih2LHApe3ZhciB3PTF8TWF0aC5tYXgocCx2KSxKPTEmdyxuZT0wO2Zvcih3PXcv''@;'; put 'put ''MnwwO3c7dz4+Pj0xKW5lKys7cmV0dXJuIDE8PG5lKzErSn0sY2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih2LHAsdyl7aWYoISh3PD0xKSlmb3IodmFyIEo9MDtKPHcvMjtKKyspe3ZhciBuZT12W0pdO3ZbSl09dlt3LUotMV0sdlt3LUotMV09bmUsbmU9cFtKXSxwW0pdPS1wW3ct''@;'; put 'put ''Si0xXSxwW3ctSi0xXT0tbmV9fSxjZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHYscCl7Zm9yKHZhciB3PTAsSj0wO0o8cC8yO0orKyl7dmFyIG5lPTgxOTIqTWF0aC5yb3VuZCh2WzIqSisxXS9wKStNYXRoLnJvdW5kKHZbMipKXS9wKSt3O3ZbSl09NjcxMDg4NjMmbmUsdz1u''@;'; put 'put ''ZTw2NzEwODg2ND8wOm5lLzY3MTA4ODY0fDB9cmV0dXJuIHZ9LGNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHYscCx3LEope2Zvcih2YXIgbmU9MCxkZT0wO2RlPHA7ZGUrKyl3WzIqZGVdPTgxOTEmKG5lKz0wfHZbZGVdKSx3WzIqZGUrMV09ODE5MSYobmU+Pj49MTMpLG5lPj4+''@;'; put 'put ''PTEzO2ZvcihkZT0yKnA7ZGU8SjsrK2RlKXdbZGVdPTA7SSgwPT09bmUpLEkoMD09KC04MTkyJm5lKSl9LGNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHYpe2Zvcih2YXIgcD1uZXcgQXJyYXkodiksdz0wO3c8djt3KyspcFt3XT0wO3JldHVybiBwfSxjZS5wcm90b3R5cGUubXVscD1mdW5j''@;'; put 'put ''dGlvbih2LHAsdyl7dmFyIEo9Mip0aGlzLmd1ZXNzTGVuMTNiKHYubGVuZ3RoLHAubGVuZ3RoKSxuZT10aGlzLm1ha2VSQlQoSiksZGU9dGhpcy5zdHViKEopLGZlPW5ldyBBcnJheShKKSx4ZT1uZXcgQXJyYXkoSiksTGU9bmV3IEFycmF5KEopLEZlPW5ldyBBcnJheShKKSxPZT1uZXcgQXJy''@;'; put 'put ''YXkoSiksQmU9bmV3IEFycmF5KEopLFdlPXcud29yZHM7V2UubGVuZ3RoPUosdGhpcy5jb252ZXJ0MTNiKHYud29yZHMsdi5sZW5ndGgsZmUsSiksdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsRmUsSiksdGhpcy50cmFuc2Zvcm0oZmUsZGUseGUsTGUsSixuZSksdGhpcy50cmFu''@;'; put 'put ''c2Zvcm0oRmUsZGUsT2UsQmUsSixuZSk7Zm9yKHZhciBLZT0wO0tlPEo7S2UrKyl7dmFyIFllPXhlW0tlXSpPZVtLZV0tTGVbS2VdKkJlW0tlXTtMZVtLZV09eGVbS2VdKkJlW0tlXStMZVtLZV0qT2VbS2VdLHhlW0tlXT1ZZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoeGUsTGUsSiksdGhpcy50''@;'; put 'put ''cmFuc2Zvcm0oeGUsTGUsV2UsZGUsSixuZSksdGhpcy5jb25qdWdhdGUoV2UsZGUsSiksdGhpcy5ub3JtYWxpemUxM2IoV2UsSiksdy5uZWdhdGl2ZT12Lm5lZ2F0aXZlXnAubmVnYXRpdmUsdy5sZW5ndGg9di5sZW5ndGgrcC5sZW5ndGgsdy5fc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1''@;'; put 'put ''bmN0aW9uKHYpe3ZhciBwPW5ldyBFKG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt2Lmxlbmd0aCksdGhpcy5tdWxUbyh2LHApfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHYpe3ZhciBwPW5ldyBFKG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheSh0''@;'; put 'put ''aGlzLmxlbmd0aCt2Lmxlbmd0aCksdWUodGhpcyx2LHApfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odix0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odil7dmFyIHA9djwwO3AmJih2PS12KSxJKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgdiksSSh2PDY3MTA4ODY0KTtmb3IodmFyIHc9MCxKPTA7Sjx0aGlzLmxlbmd0aDtKKyspe3ZhciBuZT0oMHx0aGlzLndvcmRzW0pdKSp2LGRlPSg2NzEwODg2MyZuZSkrKDY3MTA4ODYzJncpO3c+Pj0yNix3Kz1uZS82NzEwODg2NHwwLHcrPWRlPj4+MjYsdGhpcy53b3Jkc1tKXT02NzEw''@;'; put 'put ''ODg2MyZkZX1yZXR1cm4gMCE9PXcmJih0aGlzLndvcmRzW0pdPXcsdGhpcy5sZW5ndGgrKykscD90aGlzLmluZWcoKTp0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odil9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHYpe3ZhciBwPWZ1bmN0aW9uKGRlKXtmb3IodmFyIGZlPW5ldyBBcnJheShkZS5iaXRMZW5ndGgoKSkseGU9''@;'; put 'put ''MDt4ZTxmZS5sZW5ndGg7eGUrKylmZVt4ZV09ZGUud29yZHNbeGUvMjZ8MF0+Pj54ZSUyNiYxO3JldHVybiBmZX0odik7aWYoMD09PXAubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIHc9dGhpcyxKPTA7SjxwLmxlbmd0aCYmMD09PXBbSl07SisrLHc9dy5zcXIoKSk7aWYoKytKPHAu''@;'; put 'put ''bGVuZ3RoKWZvcih2YXIgbmU9dy5zcXIoKTtKPHAubGVuZ3RoO0orKyxuZT1uZS5zcXIoKSkwIT09cFtKXSYmKHc9dy5tdWwobmUpKTtyZXR1cm4gd30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHYpe0koIm51bWJlciI9PXR5cGVvZiB2JiZ2Pj0wKTt2YXIgcCx3PXYlMjYsSj0odi13''@;'; put 'put ''KS8yNixuZT02NzEwODg2Mz4+PjI2LXc8PDI2LXc7aWYoMCE9PXcpe3ZhciBkZT0wO2ZvcihwPTA7cDx0aGlzLmxlbmd0aDtwKyspe3ZhciBmZT10aGlzLndvcmRzW3BdJm5lO3RoaXMud29yZHNbcF09KDB8dGhpcy53b3Jkc1twXSktZmU8PHd8ZGUsZGU9ZmU+Pj4yNi13fWRlJiYodGhpcy53''@;'; put 'put ''b3Jkc1twXT1kZSx0aGlzLmxlbmd0aCsrKX1pZigwIT09Sil7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wO3AtLSl0aGlzLndvcmRzW3ArSl09dGhpcy53b3Jkc1twXTtmb3IocD0wO3A8SjtwKyspdGhpcy53b3Jkc1twXT0wO3RoaXMubGVuZ3RoKz1KfXJldHVybiB0aGlzLl9zdHJpcCgpfSxF''@;'; put 'put ''LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih2KXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odil9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih2LHAsdyl7dmFyIEo7SSgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApLEo9cD8ocC1wJTI2KS8yNjowO3ZhciBu''@;'; put 'put ''ZT12JTI2LGRlPU1hdGgubWluKCh2LW5lKS8yNix0aGlzLmxlbmd0aCksZmU9NjcxMDg4NjNeNjcxMDg4NjM+Pj5uZTw8bmUseGU9dztpZihKLT1kZSxKPU1hdGgubWF4KDAsSikseGUpe2Zvcih2YXIgTGU9MDtMZTxkZTtMZSsrKXhlLndvcmRzW0xlXT10aGlzLndvcmRzW0xlXTt4ZS5sZW5n''@;'; put 'put ''dGg9ZGV9aWYoMCE9PWRlKWlmKHRoaXMubGVuZ3RoPmRlKWZvcih0aGlzLmxlbmd0aC09ZGUsTGU9MDtMZTx0aGlzLmxlbmd0aDtMZSsrKXRoaXMud29yZHNbTGVdPXRoaXMud29yZHNbTGUrZGVdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEZlPTA7Zm9yKExlPXRo''@;'; put 'put ''aXMubGVuZ3RoLTE7TGU+PTAmJigwIT09RmV8fExlPj1KKTtMZS0tKXt2YXIgT2U9MHx0aGlzLndvcmRzW0xlXTt0aGlzLndvcmRzW0xlXT1GZTw8MjYtbmV8T2U+Pj5uZSxGZT1PZSZmZX1yZXR1cm4geGUmJjAhPT1GZSYmKHhlLndvcmRzW3hlLmxlbmd0aCsrXT1GZSksMD09PXRoaXMubGVu''@;'; put 'put ''Z3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHYscCx3KXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odixwLHcpfSxFLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHYpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaXNobG4odil9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odil9LEUucHJvdG90eXBlLnVzaHJu''@;'; put 'put ''PWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHYpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHA9diUyNix3PSh2LXApLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXd8fCEodGhpcy53b3Jkc1t3XSYx''@;'; put 'put ''PDxwKSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHA9diUyNix3PSh2LXApLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxl''@;'; put 'put ''bmd0aDw9dz90aGlzOigwIT09cCYmdysrLHRoaXMubGVuZ3RoPU1hdGgubWluKHcsdGhpcy5sZW5ndGgpLDAhPT1wJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwKSx0aGlzLl9zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24o''@;'; put 'put ''dil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odil9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHYpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgdiksSSh2PDY3MTA4ODY0KSx2PDA/dGhpcy5pc3Vibigtdik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0''@;'; put 'put ''aGlzLndvcmRzWzBdKTw9dj8odGhpcy53b3Jkc1swXT12LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHYpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVu''@;'; put 'put ''Y3Rpb24odil7dGhpcy53b3Jkc1swXSs9djtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3BdPj02NzEwODg2NDtwKyspdGhpcy53b3Jkc1twXS09NjcxMDg4NjQscD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1twKzFdPTE6dGhpcy53b3Jkc1twKzFdKys7cmV0dXJu''@;'; put 'put ''IHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHArMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odil7aWYoSSgibnVtYmVyIj09dHlwZW9mIHYpLEkodjw2NzEwODg2NCksdjwwKXJldHVybiB0aGlzLmlhZGRuKC12KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09diwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIg''@;'; put 'put ''cD0wO3A8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbcF08MDtwKyspdGhpcy53b3Jkc1twXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1twKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odil9LEUu''@;'; put 'put ''cHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih2KX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJz''@;'; put 'put ''KCl9LEUucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih2LHAsdyl7dmFyIEosbmU7dGhpcy5fZXhwYW5kKHYubGVuZ3RoK3cpO3ZhciBmZT0wO2ZvcihKPTA7Sjx2Lmxlbmd0aDtKKyspe25lPSgwfHRoaXMud29yZHNbSit3XSkrZmU7dmFyIHhlPSgwfHYud29yZHNbSl0pKnA7ZmU9''@;'; put 'put ''KChuZS09NjcxMDg4NjMmeGUpPj4yNiktKHhlLzY3MTA4ODY0fDApLHRoaXMud29yZHNbSit3XT02NzEwODg2MyZuZX1mb3IoO0o8dGhpcy5sZW5ndGgtdztKKyspZmU9KG5lPSgwfHRoaXMud29yZHNbSit3XSkrZmUpPj4yNix0aGlzLndvcmRzW0ord109NjcxMDg4NjMmbmU7aWYoMD09PWZl''@;'; put 'put ''KXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihJKC0xPT09ZmUpLGZlPTAsSj0wO0o8dGhpcy5sZW5ndGg7SisrKWZlPShuZT0tKDB8dGhpcy53b3Jkc1tKXSkrZmUpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJm5lO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sRS5w''@;'; put 'put ''cm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odixwKXt2YXIgdyxKPXRoaXMuY2xvbmUoKSxuZT12LGRlPTB8bmUud29yZHNbbmUubGVuZ3RoLTFdOzAhPSh3PTI2LXRoaXMuX2NvdW50Qml0cyhkZSkpJiYobmU9bmUudXNobG4odyksSi5pdXNobG4odyksZGU9MHxuZS53b3Jkc1tuZS5sZW5n''@;'; put 'put ''dGgtMV0pO3ZhciBmZSx4ZT1KLmxlbmd0aC1uZS5sZW5ndGg7aWYoIm1vZCIhPT1wKXsoZmU9bmV3IEUobnVsbCkpLmxlbmd0aD14ZSsxLGZlLndvcmRzPW5ldyBBcnJheShmZS5sZW5ndGgpO2Zvcih2YXIgTGU9MDtMZTxmZS5sZW5ndGg7TGUrKylmZS53b3Jkc1tMZV09MH12YXIgRmU9Si5j''@;'; put 'put ''bG9uZSgpLl9pc2hsbnN1Ym11bChuZSwxLHhlKTswPT09RmUubmVnYXRpdmUmJihKPUZlLGZlJiYoZmUud29yZHNbeGVdPTEpKTtmb3IodmFyIE9lPXhlLTE7T2U+PTA7T2UtLSl7dmFyIEJlPTY3MTA4ODY0KigwfEoud29yZHNbbmUubGVuZ3RoK09lXSkrKDB8Si53b3Jkc1tuZS5sZW5ndGgr''@;'; put 'put ''T2UtMV0pO2ZvcihCZT1NYXRoLm1pbihCZS9kZXwwLDY3MTA4ODYzKSxKLl9pc2hsbnN1Ym11bChuZSxCZSxPZSk7MCE9PUoubmVnYXRpdmU7KUJlLS0sSi5uZWdhdGl2ZT0wLEouX2lzaGxuc3VibXVsKG5lLDEsT2UpLEouaXNaZXJvKCl8fChKLm5lZ2F0aXZlXj0xKTtmZSYmKGZlLndvcmRz''@;'; put 'put ''W09lXT1CZSl9cmV0dXJuIGZlJiZmZS5fc3RyaXAoKSxKLl9zdHJpcCgpLCJkaXYiIT09cCYmMCE9PXcmJkouaXVzaHJuKHcpLHtkaXY6ZmV8fG51bGwsbW9kOkp9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odixwLHcpe3JldHVybiBJKCF2LmlzWmVybygpKSx0aGlzLmlzWmVybygp''@;'; put 'put ''P3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXYubmVnYXRpdmU/KGRlPXRoaXMubmVnKCkuZGl2bW9kKHYscCksIm1vZCIhPT1wJiYoSj1kZS5kaXYubmVnKCkpLCJkaXYiIT09cCYmKG5lPWRlLm1vZC5uZWcoKSx3JiYwIT09bmUubmVnYXRpdmUm''@;'; put 'put ''Jm5lLmlhZGQodikpLHtkaXY6Sixtb2Q6bmV9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXYubmVnYXRpdmU/KGRlPXRoaXMuZGl2bW9kKHYubmVnKCkscCksIm1vZCIhPT1wJiYoSj1kZS5kaXYubmVnKCkpLHtkaXY6Sixtb2Q6ZGUubW9kfSk6dGhpcy5uZWdhdGl2ZSZ2Lm5lZ2F0aXZlPyhk''@;'; put 'put ''ZT10aGlzLm5lZygpLmRpdm1vZCh2Lm5lZygpLHApLCJkaXYiIT09cCYmKG5lPWRlLm1vZC5uZWcoKSx3JiYwIT09bmUubmVnYXRpdmUmJm5lLmlzdWIodikpLHtkaXY6ZGUuZGl2LG1vZDpuZX0pOnYubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh2KTwwP3tkaXY6bmV3IEUoMCksbW9k''@;'; put 'put ''OnRoaXN9OjE9PT12Lmxlbmd0aD8iZGl2Ij09PXA/e2Rpdjp0aGlzLmRpdm4odi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09cD97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kcm4odi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih2LndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5t''@;'; put 'put ''b2Rybih2LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodixwKTt2YXIgSixuZSxkZX0sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmRpdm1vZCh2LCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5kaXZtb2Qodiwi''@;'; put 'put ''bW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmRpdm1vZCh2LCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHYpe3ZhciBwPXRoaXMuZGl2bW9kKHYpO2lmKHAubW9kLmlzWmVybygpKXJldHVybiBwLmRpdjt2''@;'; put 'put ''YXIgdz0wIT09cC5kaXYubmVnYXRpdmU/cC5tb2QuaXN1Yih2KTpwLm1vZCxKPXYudXNocm4oMSksbmU9di5hbmRsbigxKSxkZT13LmNtcChKKTtyZXR1cm4gZGU8MHx8MT09PW5lJiYwPT09ZGU/cC5kaXY6MCE9PXAuZGl2Lm5lZ2F0aXZlP3AuZGl2LmlzdWJuKDEpOnAuZGl2LmlhZGRuKDEp''@;'; put 'put ''fSxFLnByb3RvdHlwZS5tb2Rybj1mdW5jdGlvbih2KXt2YXIgcD12PDA7cCYmKHY9LXYpLEkodjw9NjcxMDg4NjMpO2Zvcih2YXIgdz02NzEwODg2NCV2LEo9MCxuZT10aGlzLmxlbmd0aC0xO25lPj0wO25lLS0pSj0odypKKygwfHRoaXMud29yZHNbbmVdKSkldjtyZXR1cm4gcD8tSjpKfSxF''@;'; put 'put ''LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLm1vZHJuKHYpfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih2KXt2YXIgcD12PDA7cCYmKHY9LXYpLEkodjw9NjcxMDg4NjMpO2Zvcih2YXIgdz0wLEo9dGhpcy5sZW5ndGgtMTtKPj0wO0otLSl7dmFyIG5lPSgwfHRo''@;'; put 'put ''aXMud29yZHNbSl0pKzY3MTA4ODY0Knc7dGhpcy53b3Jkc1tKXT1uZS92fDAsdz1uZSV2fXJldHVybiB0aGlzLl9zdHJpcCgpLHA/dGhpcy5pbmVnKCk6dGhpc30sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHYpfSxFLnByb3RvdHlwZS5l''@;'; put 'put ''Z2NkPWZ1bmN0aW9uKHYpe0koMD09PXYubmVnYXRpdmUpLEkoIXYuaXNaZXJvKCkpO3ZhciBwPXRoaXMsdz12LmNsb25lKCk7cD0wIT09cC5uZWdhdGl2ZT9wLnVtb2Qodik6cC5jbG9uZSgpO2Zvcih2YXIgSj1uZXcgRSgxKSxuZT1uZXcgRSgwKSxkZT1uZXcgRSgwKSxmZT1uZXcgRSgxKSx4''@;'; put 'put ''ZT0wO3AuaXNFdmVuKCkmJncuaXNFdmVuKCk7KXAuaXVzaHJuKDEpLHcuaXVzaHJuKDEpLCsreGU7Zm9yKHZhciBMZT13LmNsb25lKCksRmU9cC5jbG9uZSgpOyFwLmlzWmVybygpOyl7Zm9yKHZhciBPZT0wLEJlPTE7IShwLndvcmRzWzBdJkJlKSYmT2U8MjY7KytPZSxCZTw8PTEpO2lmKE9l''@;'; put 'put ''PjApZm9yKHAuaXVzaHJuKE9lKTtPZS0tID4wOykoSi5pc09kZCgpfHxuZS5pc09kZCgpKSYmKEouaWFkZChMZSksbmUuaXN1YihGZSkpLEouaXVzaHJuKDEpLG5lLml1c2hybigxKTtmb3IodmFyIFdlPTAsS2U9MTshKHcud29yZHNbMF0mS2UpJiZXZTwyNjsrK1dlLEtlPDw9MSk7aWYoV2U+''@;'; put 'put ''MClmb3Iody5pdXNocm4oV2UpO1dlLS0gPjA7KShkZS5pc09kZCgpfHxmZS5pc09kZCgpKSYmKGRlLmlhZGQoTGUpLGZlLmlzdWIoRmUpKSxkZS5pdXNocm4oMSksZmUuaXVzaHJuKDEpO3AuY21wKHcpPj0wPyhwLmlzdWIodyksSi5pc3ViKGRlKSxuZS5pc3ViKGZlKSk6KHcuaXN1YihwKSxk''@;'; put 'put ''ZS5pc3ViKEopLGZlLmlzdWIobmUpKX1yZXR1cm57YTpkZSxiOmZlLGdjZDp3Lml1c2hsbih4ZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odil7SSgwPT09di5uZWdhdGl2ZSksSSghdi5pc1plcm8oKSk7dmFyIHA9dGhpcyx3PXYuY2xvbmUoKTtwPTAhPT1wLm5lZ2F0aXZlP3Au''@;'; put 'put ''dW1vZCh2KTpwLmNsb25lKCk7Zm9yKHZhciBKLG5lPW5ldyBFKDEpLGRlPW5ldyBFKDApLGZlPXcuY2xvbmUoKTtwLmNtcG4oMSk+MCYmdy5jbXBuKDEpPjA7KXtmb3IodmFyIHhlPTAsTGU9MTshKHAud29yZHNbMF0mTGUpJiZ4ZTwyNjsrK3hlLExlPDw9MSk7aWYoeGU+MClmb3IocC5pdXNo''@;'; put 'put ''cm4oeGUpO3hlLS0gPjA7KW5lLmlzT2RkKCkmJm5lLmlhZGQoZmUpLG5lLml1c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKHcud29yZHNbMF0mT2UpJiZGZTwyNjsrK0ZlLE9lPDw9MSk7aWYoRmU+MClmb3Iody5pdXNocm4oRmUpO0ZlLS0gPjA7KWRlLmlzT2RkKCkmJmRlLmlhZGQoZmUp''@;'; put 'put ''LGRlLml1c2hybigxKTtwLmNtcCh3KT49MD8ocC5pc3ViKHcpLG5lLmlzdWIoZGUpKToody5pc3ViKHApLGRlLmlzdWIobmUpKX1yZXR1cm4oSj0wPT09cC5jbXBuKDEpP25lOmRlKS5jbXBuKDApPDAmJkouaWFkZCh2KSxKfSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odil7aWYodGhpcy5p''@;'; put 'put ''c1plcm8oKSlyZXR1cm4gdi5hYnMoKTtpZih2LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBwPXRoaXMuY2xvbmUoKSx3PXYuY2xvbmUoKTtwLm5lZ2F0aXZlPTAsdy5uZWdhdGl2ZT0wO2Zvcih2YXIgSj0wO3AuaXNFdmVuKCkmJncuaXNFdmVuKCk7SisrKXAuaXVzaHJuKDEpLHcu''@;'; put 'put ''aXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtwLmlzRXZlbigpOylwLml1c2hybigxKTtmb3IoO3cuaXNFdmVuKCk7KXcuaXVzaHJuKDEpO3ZhciBuZT1wLmNtcCh3KTtpZihuZTwwKXt2YXIgZGU9cDtwPXcsdz1kZX1lbHNlIGlmKDA9PT1uZXx8MD09PXcuY21wbigxKSlicmVhaztwLmlzdWIodyl9''@;'; put 'put ''cmV0dXJuIHcuaXVzaGxuKEopfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmVnY2QodikuYS51bW9kKHYpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ2fSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2Ygdik7dmFyIHA9diUyNix3PSh2LXApLzI2LEo9MTw8''@;'; put 'put ''cDtpZih0aGlzLmxlbmd0aDw9dylyZXR1cm4gdGhpcy5fZXhwYW5kKHcrMSksdGhpcy53b3Jkc1t3XXw9Six0aGlzO2Zvcih2YXIgbmU9SixkZT13OzAhPT1uZSYmZGU8dGhpcy5sZW5ndGg7ZGUrKyl7dmFyIGZlPTB8dGhpcy53b3Jkc1tkZV07bmU9KGZlKz1uZSk+Pj4yNix0aGlzLndvcmRz''@;'; put 'put ''W2RlXT1mZSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1uZSYmKHRoaXMud29yZHNbZGVdPW5lLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1''@;'; put 'put ''bmN0aW9uKHYpe3ZhciBwLHc9djwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhdylyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmdylyZXR1cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpcD0xO2Vsc2V7dyYmKHY9LXYpLEkodjw9NjcxMDg4NjMsIk51bWJlciBpcyB0''@;'; put 'put ''b28gYmlnIik7dmFyIEo9MHx0aGlzLndvcmRzWzBdO3A9Sj09PXY/MDpKPHY/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcDpwfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT12Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlJiYwIT09di5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgcD10aGlzLnVjbXAodik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXA6cH0sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih2KXtpZih0aGlzLmxlbmd0aD52Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0''@;'; put 'put ''aDx2Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHA9MCx3PXRoaXMubGVuZ3RoLTE7dz49MDt3LS0pe3ZhciBKPTB8dGhpcy53b3Jkc1t3XSxuZT0wfHYud29yZHNbd107aWYoSiE9PW5lKXtKPG5lP3A9LTE6Sj5uZSYmKHA9MSk7YnJlYWt9fXJldHVybiBwfSxFLnByb3RvdHlwZS5ndG49ZnVu''@;'; put 'put ''Y3Rpb24odil7cmV0dXJuIDE9PT10aGlzLmNtcG4odil9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHYpe3JldHVybiAxPT09dGhpcy5jbXAodil9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY21wbih2KT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHYp''@;'; put 'put ''e3JldHVybiB0aGlzLmNtcCh2KT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHYpe3JldHVybi0xPT09dGhpcy5jbXBuKHYpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbih2KXtyZXR1cm4tMT09PXRoaXMuY21wKHYpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHYpe3JldHVybiB0''@;'; put 'put ''aGlzLmNtcG4odik8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbXAodik8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlvbih2KXtyZXR1cm4gMD09PXRoaXMuY21wbih2KX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odil7cmV0dXJuIDA9PT10aGlzLmNt''@;'; put 'put ''cCh2KX0sRS5yZWQ9ZnVuY3Rpb24odil7cmV0dXJuIG5ldyBDKHYpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih2KXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHBvc2l0aXZlcyIpLHYuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh2KX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQu''@;'; put 'put ''Y29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5yZWQ9dix0aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih2KXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRl''@;'; put 'put ''eHQiKSx0aGlzLl9mb3JjZVJlZCh2KX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odil7''@;'; put 'put ''cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5zdWIodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih2''@;'; put 'put ''KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHYpLHRoaXMucmVkLm11bCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx2KSx0''@;'; put 'put ''aGlzLnJlZC5pbXVsKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5y''@;'; put 'put ''ZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMu''@;'; put 'put ''cmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVk''@;'; put 'put ''IG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMp''@;'; put 'put ''LHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkJiYhdi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdil9O3ZhciBHPXtrMjU2Om51bGwscDIy''@;'; put 'put ''NDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gYih2LHApe3RoaXMubmFtZT12LHRoaXMucD1uZXcgRShwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1w''@;'; put 'put ''KCl9ZnVuY3Rpb24gRCgpe2IuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBIKCl7Yi5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIE4oKXtiLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gZygpe2IuY2FsbCh0aGlzLCIyNTUxOSIs''@;'; put 'put ''IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBDKHYpe2lmKCJzdHJpbmciPT10eXBlb2Ygdil7dmFyIHA9RS5fcHJpbWUodik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBJKHYuZ3RuKDEp''@;'; put 'put ''LCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09dix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gUyh2KXtDLmNhbGwodGhpcyx2KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUy''@;'; put 'put ''NiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9''@;'; put 'put ''dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWIucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdj1uZXcgRShudWxsKTtyZXR1cm4gdi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHZ9LGIucHJvdG90eXBlLmly''@;'; put 'put ''ZWR1Y2U9ZnVuY3Rpb24odil7dmFyIHAsdz12O2Rve3RoaXMuc3BsaXQodyx0aGlzLnRtcCkscD0odz0odz10aGlzLmltdWxLKHcpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUocD50aGlzLm4pO3ZhciBKPXA8dGhpcy5uPy0xOncudWNtcCh0aGlzLnApO3JldHVybiAwPT09''@;'; put 'put ''Sj8ody53b3Jkc1swXT0wLHcubGVuZ3RoPTEpOko+MD93LmlzdWIodGhpcy5wKTp2b2lkIDAhPT13LnN0cmlwP3cuc3RyaXAoKTp3Ll9zdHJpcCgpLHd9LGIucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHYscCl7di5pdXNocm4odGhpcy5uLDAscCl9LGIucHJvdG90eXBlLmltdWxLPWZ1bmN0''@;'; put 'put ''aW9uKHYpe3JldHVybiB2LmltdWwodGhpcy5rKX0sayhELGIpLEQucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHYscCl7Zm9yKHZhciB3PTQxOTQzMDMsSj1NYXRoLm1pbih2Lmxlbmd0aCw5KSxuZT0wO25lPEo7bmUrKylwLndvcmRzW25lXT12LndvcmRzW25lXTtpZihwLmxlbmd0aD1KLHYu''@;'; put 'put ''bGVuZ3RoPD05KXJldHVybiB2LndvcmRzWzBdPTAsdm9pZCh2Lmxlbmd0aD0xKTt2YXIgZGU9di53b3Jkc1s5XTtmb3IocC53b3Jkc1twLmxlbmd0aCsrXT1kZSZ3LG5lPTEwO25lPHYubGVuZ3RoO25lKyspe3ZhciBmZT0wfHYud29yZHNbbmVdO3Yud29yZHNbbmUtMTBdPShmZSZ3KTw8NHxk''@;'; put 'put ''ZT4+PjIyLGRlPWZlfXYud29yZHNbbmUtMTBdPWRlPj4+PTIyLHYubGVuZ3RoLT0wPT09ZGUmJnYubGVuZ3RoPjEwPzEwOjl9LEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHYpe3Yud29yZHNbdi5sZW5ndGhdPTAsdi53b3Jkc1t2Lmxlbmd0aCsxXT0wLHYubGVuZ3RoKz0yO2Zvcih2YXIg''@;'; put 'put ''cD0wLHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIEo9MHx2LndvcmRzW3ddO3Yud29yZHNbd109NjcxMDg4NjMmKHArPTk3NypKKSxwPTY0KkorKHAvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT12LndvcmRzW3YubGVuZ3RoLTFdJiYodi5sZW5ndGgtLSwwPT09di53b3Jkc1t2Lmxlbmd0aC0xXSYm''@;'; put 'put ''di5sZW5ndGgtLSksdn0sayhILGIpLGsoTixiKSxrKGcsYiksZy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odil7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXt2YXIgSj0xOSooMHx2LndvcmRzW3ddKStwLG5lPTY3MTA4ODYzJko7Sj4+Pj0yNix2LndvcmRzW3ddPW5lLHA9Sn1y''@;'; put 'put ''ZXR1cm4gMCE9PXAmJih2LndvcmRzW3YubGVuZ3RoKytdPXApLHZ9LEUuX3ByaW1lPWZ1bmN0aW9uKHYpe2lmKEdbdl0pcmV0dXJuIEdbdl07dmFyIHA7aWYoImsyNTYiPT09dilwPW5ldyBEO2Vsc2UgaWYoInAyMjQiPT09dilwPW5ldyBIO2Vsc2UgaWYoInAxOTIiPT09dilwPW5ldyBOO2Vs''@;'; put 'put ''c2V7aWYoInAyNTUxOSIhPT12KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3YpO3A9bmV3IGd9cmV0dXJuIEdbdl09cCxwfSxDLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih2KXtJKDA9PT12Lm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEko''@;'; put 'put ''di5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sQy5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odixwKXtJKDA9PSh2Lm5lZ2F0aXZlfHAubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkodi5yZWQmJnYucmVkPT09cC5yZWQsInJl''@;'; put 'put ''ZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sQy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodikuX2ZvcmNlUmVkKHRoaXMpOihYKHYsdi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSx2KX0sQy5wcm90''@;'; put 'put ''b3R5cGUubmVnPWZ1bmN0aW9uKHYpe3JldHVybiB2LmlzWmVybygpP3YuY2xvbmUoKTp0aGlzLm0uc3ViKHYpLl9mb3JjZVJlZCh0aGlzKX0sQy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHYscCl7dGhpcy5fdmVyaWZ5Mih2LHApO3ZhciB3PXYuYWRkKHApO3JldHVybiB3LmNtcCh0aGlzLm0p''@;'; put 'put ''Pj0wJiZ3LmlzdWIodGhpcy5tKSx3Ll9mb3JjZVJlZCh0aGlzKX0sQy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih2LHApe3RoaXMuX3ZlcmlmeTIodixwKTt2YXIgdz12LmlhZGQocCk7cmV0dXJuIHcuY21wKHRoaXMubSk+PTAmJncuaXN1Yih0aGlzLm0pLHd9LEMucHJvdG90eXBlLnN1Yj1m''@;'; put 'put ''dW5jdGlvbih2LHApe3RoaXMuX3ZlcmlmeTIodixwKTt2YXIgdz12LnN1YihwKTtyZXR1cm4gdy5jbXBuKDApPDAmJncuaWFkZCh0aGlzLm0pLHcuX2ZvcmNlUmVkKHRoaXMpfSxDLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHYscCl7dGhpcy5fdmVyaWZ5Mih2LHApO3ZhciB3PXYuaXN1Yihw''@;'; put 'put ''KTtyZXR1cm4gdy5jbXBuKDApPDAmJncuaWFkZCh0aGlzLm0pLHd9LEMucHJvdG90eXBlLnNobD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkxKHYpLHRoaXMuaW1vZCh2LnVzaGxuKHApKX0sQy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJp''@;'; put 'put ''ZnkyKHYscCksdGhpcy5pbW9kKHYuaW11bChwKSl9LEMucHJvdG90eXBlLm11bD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkyKHYscCksdGhpcy5pbW9kKHYubXVsKHApKX0sQy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5pbXVsKHYsdi5jbG9uZSgp''@;'; put 'put ''KX0sQy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLm11bCh2LHYpfSxDLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHYpe2lmKHYuaXNaZXJvKCkpcmV0dXJuIHYuY2xvbmUoKTt2YXIgcD10aGlzLm0uYW5kbG4oMyk7aWYoSShwJTI9PTEpLDM9PT1wKXt2YXIgdz10aGlz''@;'; put 'put ''Lm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHYsdyl9Zm9yKHZhciBKPXRoaXMubS5zdWJuKDEpLG5lPTA7IUouaXNaZXJvKCkmJjA9PT1KLmFuZGxuKDEpOyluZSsrLEouaXVzaHJuKDEpO0koIUouaXNaZXJvKCkpO3ZhciBkZT1uZXcgRSgxKS50b1JlZCh0aGlz''@;'; put 'put ''KSxmZT1kZS5yZWROZWcoKSx4ZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksTGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihMZT1uZXcgRSgyKkxlKkxlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coTGUseGUpLmNtcChmZSk7KUxlLnJlZElBZGQoZmUpO2Zvcih2YXIgRmU9dGhpcy5wb3co''@;'; put 'put ''TGUsSiksT2U9dGhpcy5wb3codixKLmFkZG4oMSkuaXVzaHJuKDEpKSxCZT10aGlzLnBvdyh2LEopLFdlPW5lOzAhPT1CZS5jbXAoZGUpOyl7Zm9yKHZhciBLZT1CZSxZZT0wOzAhPT1LZS5jbXAoZGUpO1llKyspS2U9S2UucmVkU3FyKCk7SShZZTxXZSk7dmFyIEplPXRoaXMucG93KEZlLG5l''@;'; put 'put ''dyBFKDEpLml1c2hsbihXZS1ZZS0xKSk7T2U9T2UucmVkTXVsKEplKSxGZT1KZS5yZWRTcXIoKSxCZT1CZS5yZWRNdWwoRmUpLFdlPVllfXJldHVybiBPZX0sQy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih2KXt2YXIgcD12Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09cC5uZWdhdGl2ZT8o''@;'; put 'put ''cC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChwKS5yZWROZWcoKSk6dGhpcy5pbW9kKHApfSxDLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odixwKXtpZihwLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09cC5jbXBuKDEpKXJldHVybiB2LmNsb25lKCk7dmFyIHc9bmV3''@;'; put 'put ''IEFycmF5KDE2KTt3WzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLHdbMV09djtmb3IodmFyIEo9MjtKPHcubGVuZ3RoO0orKyl3W0pdPXRoaXMubXVsKHdbSi0xXSx2KTt2YXIgbmU9d1swXSxkZT0wLGZlPTAseGU9cC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXhlJiYoeGU9MjYpLEo9cC5sZW5n''@;'; put 'put ''dGgtMTtKPj0wO0otLSl7Zm9yKHZhciBMZT1wLndvcmRzW0pdLEZlPXhlLTE7RmU+PTA7RmUtLSl7dmFyIE9lPUxlPj5GZSYxO25lIT09d1swXSYmKG5lPXRoaXMuc3FyKG5lKSksMCE9PU9lfHwwIT09ZGU/KGRlPDw9MSxkZXw9T2UsKDQ9PSsrZmV8fDA9PT1KJiYwPT09RmUpJiYobmU9dGhp''@;'; put 'put ''cy5tdWwobmUsd1tkZV0pLGZlPTAsZGU9MCkpOmZlPTB9eGU9MjZ9cmV0dXJuIG5lfSxDLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odil7dmFyIHA9di51bW9kKHRoaXMubSk7cmV0dXJuIHA9PT12P3AuY2xvbmUoKTpwfSxDLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih2''@;'; put 'put ''KXt2YXIgcD12LmNsb25lKCk7cmV0dXJuIHAucmVkPW51bGwscH0sRS5tb250PWZ1bmN0aW9uKHYpe3JldHVybiBuZXcgUyh2KX0sayhTLEMpLFMucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5pbW9kKHYudXNobG4odGhpcy5zaGlmdCkpfSxTLnByb3RvdHlw''@;'; put 'put ''ZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih2KXt2YXIgcD10aGlzLmltb2Qodi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHAucmVkPW51bGwscH0sUy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih2LHApe2lmKHYuaXNaZXJvKCl8fHAuaXNaZXJvKCkpcmV0dXJuIHYud29yZHNbMF09MCx2Lmxlbmd0''@;'; put 'put ''aD0xLHY7dmFyIHc9di5pbXVsKHApLEo9dy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksbmU9dy5pc3ViKEopLml1c2hybih0aGlzLnNoaWZ0KSxkZT1uZTtyZXR1cm4gbmUuY21wKHRoaXMubSk+PTA/ZGU9bmUuaXN1Yih0''@;'; put 'put ''aGlzLm0pOm5lLmNtcG4oMCk8MCYmKGRlPW5lLmlhZGQodGhpcy5tKSksZGUuX2ZvcmNlUmVkKHRoaXMpfSxTLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odixwKXtpZih2LmlzWmVybygpfHxwLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHc9di5tdWwocCks''@;'; put 'put ''Sj13Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxuZT13LmlzdWIoSikuaXVzaHJuKHRoaXMuc2hpZnQpLGRlPW5lO3JldHVybiBuZS5jbXAodGhpcy5tKT49MD9kZT1uZS5pc3ViKHRoaXMubSk6bmUuY21wbigwKTwwJiYo''@;'; put 'put ''ZGU9bmUuaWFkZCh0aGlzLm0pKSxkZS5fZm9yY2VSZWQodGhpcyl9LFMucHJvdG90eXBlLmludm09ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuaW1vZCh2Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sMzY0NDooTSxPLFIp''@;'; put 'put ''PT57dmFyIHo9UigxMDQ4KSxLPVIoNTYyMyk7TS5leHBvcnRzPWZ1bmN0aW9uKHNlKXtyZXR1cm4gc2U/KCJ7fSI9PT1zZS5zdWJzdHIoMCwyKSYmKHNlPSJcXHtcXH0iK3NlLnN1YnN0cigyKSksb2UoKGhlPXNlLGhlLnNwbGl0KCJcXFxcIikuam9pbihJKS5zcGxpdCgiXFx7Iikuam9pbihr''@;'; put 'put ''KS5zcGxpdCgiXFx9Iikuam9pbihFKS5zcGxpdCgiXFwsIikuam9pbihqKS5zcGxpdCgiXFwuIikuam9pbihWKSksITApLm1hcChZKSk6W107dmFyIGhlfTt2YXIgST0iXDBTTEFTSCIrTWF0aC5yYW5kb20oKSsiXDAiLGs9IlwwT1BFTiIrTWF0aC5yYW5kb20oKSsiXDAiLEU9IlwwQ0xPU0Ui''@;'; put 'put ''K01hdGgucmFuZG9tKCkrIlwwIixqPSJcMENPTU1BIitNYXRoLnJhbmRvbSgpKyJcMCIsVj0iXDBQRVJJT0QiK01hdGgucmFuZG9tKCkrIlwwIjtmdW5jdGlvbiBCKHNlKXtyZXR1cm4gcGFyc2VJbnQoc2UsMTApPT1zZT9wYXJzZUludChzZSwxMCk6c2UuY2hhckNvZGVBdCgwKX1mdW5jdGlv''@;'; put 'put ''biBZKHNlKXtyZXR1cm4gc2Uuc3BsaXQoSSkuam9pbigiXFwiKS5zcGxpdChrKS5qb2luKCJ7Iikuc3BsaXQoRSkuam9pbigifSIpLnNwbGl0KGopLmpvaW4oIiwiKS5zcGxpdChWKS5qb2luKCIuIil9ZnVuY3Rpb24gWChzZSl7aWYoIXNlKXJldHVyblsiIl07dmFyIGhlPVtdLHVlPUsoInsi''@;'; put 'put ''LCJ9IixzZSk7aWYoIXVlKXJldHVybiBzZS5zcGxpdCgiLCIpO3ZhciBHPXVlLmJvZHksYj11ZS5wb3N0LEQ9dWUucHJlLnNwbGl0KCIsIik7RFtELmxlbmd0aC0xXSs9InsiK0crIn0iO3ZhciBIPVgoYik7cmV0dXJuIGIubGVuZ3RoJiYoRFtELmxlbmd0aC0xXSs9SC5zaGlmdCgpLEQucHVz''@;'; put 'put ''aC5hcHBseShELEgpKSxoZS5wdXNoLmFwcGx5KGhlLEQpLGhlfWZ1bmN0aW9uIFUoc2Upe3JldHVybiJ7IitzZSsifSJ9ZnVuY3Rpb24gcShzZSl7cmV0dXJuL14tPzBcZC8udGVzdChzZSl9ZnVuY3Rpb24gZWUoc2UsaGUpe3JldHVybiBzZTw9aGV9ZnVuY3Rpb24gdGUoc2UsaGUpe3JldHVy''@;'; put 'put ''biBzZT49aGV9ZnVuY3Rpb24gb2Uoc2UsaGUpe3ZhciB1ZT1bXSxjZT1LKCJ7IiwifSIsc2UpO2lmKCFjZXx8L1wkJC8udGVzdChjZS5wcmUpKXJldHVybltzZV07dmFyIEcsYj0vXi0/XGQrXC5cLi0/XGQrKD86XC5cLi0/XGQrKT8kLy50ZXN0KGNlLmJvZHkpLEQ9L15bYS16QS1aXVwuXC5b''@;'; put 'put ''YS16QS1aXSg/OlwuXC4tP1xkKyk/JC8udGVzdChjZS5ib2R5KSxIPWJ8fEQsTj1jZS5ib2R5LmluZGV4T2YoIiwiKT49MDtpZighSCYmIU4pcmV0dXJuIGNlLnBvc3QubWF0Y2goLywuKlx9Lyk/b2Uoc2U9Y2UucHJlKyJ7IitjZS5ib2R5K0UrY2UucG9zdCk6W3NlXTtpZihIKUc9Y2UuYm9k''@;'; put 'put ''eS5zcGxpdCgvXC5cLi8pO2Vsc2UgaWYoMT09PShHPVgoY2UuYm9keSkpLmxlbmd0aCYmMT09PShHPW9lKEdbMF0sITEpLm1hcChVKSkubGVuZ3RoKXJldHVybihTPWNlLnBvc3QubGVuZ3RoP29lKGNlLnBvc3QsITEpOlsiIl0pLm1hcChmdW5jdGlvbihLZSl7cmV0dXJuIGNlLnByZStHWzBd''@;'; put 'put ''K0tlfSk7dmFyIGcsQz1jZS5wcmUsUz1jZS5wb3N0Lmxlbmd0aD9vZShjZS5wb3N0LCExKTpbIiJdO2lmKEgpe3ZhciB2PUIoR1swXSkscD1CKEdbMV0pLHc9TWF0aC5tYXgoR1swXS5sZW5ndGgsR1sxXS5sZW5ndGgpLEo9Mz09Ry5sZW5ndGg/TWF0aC5hYnMoQihHWzJdKSk6MSxuZT1lZTtw''@;'; put 'put ''PHYmJihKKj0tMSxuZT10ZSk7dmFyIGRlPUcuc29tZShxKTtnPVtdO2Zvcih2YXIgZmU9djtuZShmZSxwKTtmZSs9Sil7dmFyIHhlO2lmKEQpIlxcIj09PSh4ZT1TdHJpbmcuZnJvbUNoYXJDb2RlKGZlKSkmJih4ZT0iIik7ZWxzZSBpZih4ZT1TdHJpbmcoZmUpLGRlKXt2YXIgTGU9dy14ZS5s''@;'; put 'put ''ZW5ndGg7aWYoTGU+MCl7dmFyIEZlPW5ldyBBcnJheShMZSsxKS5qb2luKCIwIik7eGU9ZmU8MD8iLSIrRmUreGUuc2xpY2UoMSk6RmUreGV9fWcucHVzaCh4ZSl9fWVsc2UgZz16KEcsZnVuY3Rpb24oS2Upe3JldHVybiBvZShLZSwhMSl9KTtmb3IodmFyIE9lPTA7T2U8Zy5sZW5ndGg7T2Ur''@;'; put 'put ''Kylmb3IodmFyIEJlPTA7QmU8Uy5sZW5ndGg7QmUrKyl7dmFyIFdlPUMrZ1tPZV0rU1tCZV07KCFoZXx8SHx8V2UpJiZ1ZS5wdXNoKFdlKX1yZXR1cm4gdWV9fSw5OTMxOihNLE8sUik9Pnt2YXIgejtmdW5jdGlvbiBLKGspe3RoaXMucmFuZD1rfWlmKE0uZXhwb3J0cz1mdW5jdGlvbihrKXty''@;'; put 'put ''ZXR1cm4genx8KHo9bmV3IEsobnVsbCkpLHouZ2VuZXJhdGUoayl9LE0uZXhwb3J0cy5SYW5kPUssSy5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuX3JhbmQoayl9LEsucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGspe2lmKHRoaXMucmFuZC5nZXRCeXRlcyly''@;'; put 'put ''ZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKGspO2Zvcih2YXIgRT1uZXcgVWludDhBcnJheShrKSxqPTA7ajxFLmxlbmd0aDtqKyspRVtqXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBFfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRv''@;'; put 'put ''bVZhbHVlcz9LLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihrKXt2YXIgRT1uZXcgVWludDhBcnJheShrKTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKEUpLEV9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP0sucHJvdG90eXBlLl9yYW5k''@;'; put 'put ''PWZ1bmN0aW9uKGspe3ZhciBFPW5ldyBVaW50OEFycmF5KGspO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhFKSxFfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKEsucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50''@;'; put 'put ''ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgST1SKDkyMTQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBJLnJhbmRvbUJ5dGVzKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO0sucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGspe3JldHVybiBJLnJhbmRvbUJ5dGVzKGspfX1jYXRjaHt9''@;'; put 'put ''fSw0NDk3OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBLKEIpe3ouaXNCdWZmZXIoQil8fChCPXouZnJvbShCKSk7Zm9yKHZhciBZPUIubGVuZ3RoLzR8MCxYPW5ldyBBcnJheShZKSxVPTA7VTxZO1UrKylYW1VdPUIucmVhZFVJbnQzMkJFKDQqVSk7cmV0dXJuIFh9''@;'; put 'put ''ZnVuY3Rpb24gSShCKXtmb3IoOzA8Qi5sZW5ndGg7QisrKUJbMF09MH1mdW5jdGlvbiBrKEIsWSxYLFUscSl7Zm9yKHZhciBlZSx0ZSxvZSxzZSxoZT1YWzBdLHVlPVhbMV0sY2U9WFsyXSxHPVhbM10sYj1CWzBdXllbMF0sRD1CWzFdXllbMV0sSD1CWzJdXllbMl0sTj1CWzNdXllbM10sZz00''@;'; put 'put ''LEM9MTtDPHE7QysrKWVlPWhlW2I+Pj4yNF1edWVbRD4+PjE2JjI1NV1eY2VbSD4+PjgmMjU1XV5HWzI1NSZOXV5ZW2crK10sdGU9aGVbRD4+PjI0XV51ZVtIPj4+MTYmMjU1XV5jZVtOPj4+OCYyNTVdXkdbMjU1JmJdXllbZysrXSxvZT1oZVtIPj4+MjRdXnVlW04+Pj4xNiYyNTVdXmNlW2I+''@;'; put 'put ''Pj44JjI1NV1eR1syNTUmRF1eWVtnKytdLHNlPWhlW04+Pj4yNF1edWVbYj4+PjE2JjI1NV1eY2VbRD4+PjgmMjU1XV5HWzI1NSZIXV5ZW2crK10sYj1lZSxEPXRlLEg9b2UsTj1zZTtyZXR1cm4gZWU9KFVbYj4+PjI0XTw8MjR8VVtEPj4+MTYmMjU1XTw8MTZ8VVtIPj4+OCYyNTVdPDw4fFVb''@;'; put 'put ''MjU1Jk5dKV5ZW2crK10sdGU9KFVbRD4+PjI0XTw8MjR8VVtIPj4+MTYmMjU1XTw8MTZ8VVtOPj4+OCYyNTVdPDw4fFVbMjU1JmJdKV5ZW2crK10sb2U9KFVbSD4+PjI0XTw8MjR8VVtOPj4+MTYmMjU1XTw8MTZ8VVtiPj4+OCYyNTVdPDw4fFVbMjU1JkRdKV5ZW2crK10sc2U9KFVbTj4+PjI0''@;'; put 'put ''XTw8MjR8VVtiPj4+MTYmMjU1XTw8MTZ8VVtEPj4+OCYyNTVdPDw4fFVbMjU1JkhdKV5ZW2crK10sW2VlPj4+PTAsdGU+Pj49MCxvZT4+Pj0wLHNlPj4+PTBdfXZhciBFPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxqPWZ1bmN0aW9uKCl7Zm9yKHZhciBCPW5ldyBBcnJheSgyNTYp''@;'; put 'put ''LFk9MDtZPDI1NjtZKyspQltZXT1ZPDEyOD9ZPDwxOlk8PDFeMjgzO2Zvcih2YXIgWD1bXSxVPVtdLHE9W1tdLFtdLFtdLFtdXSxlZT1bW10sW10sW10sW11dLHRlPTAsb2U9MCxzZT0wO3NlPDI1NjsrK3NlKXt2YXIgaGU9b2Veb2U8PDFeb2U8PDJeb2U8PDNeb2U8PDQ7WFt0ZV09aGU9aGU+''@;'; put 'put ''Pj44XjI1NSZoZV45OSxVW2hlXT10ZTt2YXIgdWU9Qlt0ZV0sY2U9Qlt1ZV0sRz1CW2NlXSxiPTI1NypCW2hlXV4xNjg0MzAwOCpoZTtxWzBdW3RlXT1iPDwyNHxiPj4+OCxxWzFdW3RlXT1iPDwxNnxiPj4+MTYscVsyXVt0ZV09Yjw8OHxiPj4+MjQscVszXVt0ZV09YixlZVswXVtoZV09KGI9''@;'; put 'put ''MTY4NDMwMDkqR142NTUzNypjZV4yNTcqdWVeMTY4NDMwMDgqdGUpPDwyNHxiPj4+OCxlZVsxXVtoZV09Yjw8MTZ8Yj4+PjE2LGVlWzJdW2hlXT1iPDw4fGI+Pj4yNCxlZVszXVtoZV09YiwwPT09dGU/dGU9b2U9MToodGU9dWVeQltCW0JbR151ZV1dXSxvZV49QltCW29lXV0pfXJldHVybntT''@;'; put 'put ''Qk9YOlgsSU5WX1NCT1g6VSxTVUJfTUlYOnEsSU5WX1NVQl9NSVg6ZWV9fSgpO2Z1bmN0aW9uIFYoQil7dGhpcy5fa2V5PUsoQiksdGhpcy5fcmVzZXQoKX1WLmJsb2NrU2l6ZT0xNixWLmtleVNpemU9MzIsVi5wcm90b3R5cGUuYmxvY2tTaXplPVYuYmxvY2tTaXplLFYucHJvdG90eXBlLmtl''@;'; put 'put ''eVNpemU9Vi5rZXlTaXplLFYucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgQj10aGlzLl9rZXksWT1CLmxlbmd0aCxYPVkrNixVPTQqKFgrMSkscT1bXSxlZT0wO2VlPFk7ZWUrKylxW2VlXT1CW2VlXTtmb3IoZWU9WTtlZTxVO2VlKyspe3ZhciB0ZT1xW2VlLTFdO2VlJVk9''@;'; put 'put ''PTA/KHRlPWouU0JPWFsodGU9dGU8PDh8dGU+Pj4yNCk+Pj4yNF08PDI0fGouU0JPWFt0ZT4+PjE2JjI1NV08PDE2fGouU0JPWFt0ZT4+PjgmMjU1XTw8OHxqLlNCT1hbMjU1JnRlXSx0ZV49RVtlZS9ZfDBdPDwyNCk6WT42JiZlZSVZPT00JiYodGU9ai5TQk9YW3RlPj4+MjRdPDwyNHxqLlNC''@;'; put 'put ''T1hbdGU+Pj4xNiYyNTVdPDwxNnxqLlNCT1hbdGU+Pj44JjI1NV08PDh8ai5TQk9YWzI1NSZ0ZV0pLHFbZWVdPXFbZWUtWV1edGV9Zm9yKHZhciBvZT1bXSxzZT0wO3NlPFU7c2UrKyl7dmFyIGhlPVUtc2UsdWU9cVtoZS0oc2UlND8wOjQpXTtvZVtzZV09c2U8NHx8aGU8PTQ/dWU6ai5JTlZf''@;'; put 'put ''U1VCX01JWFswXVtqLlNCT1hbdWU+Pj4yNF1dXmouSU5WX1NVQl9NSVhbMV1bai5TQk9YW3VlPj4+MTYmMjU1XV1eai5JTlZfU1VCX01JWFsyXVtqLlNCT1hbdWU+Pj44JjI1NV1dXmouSU5WX1NVQl9NSVhbM11bai5TQk9YWzI1NSZ1ZV1dfXRoaXMuX25Sb3VuZHM9WCx0aGlzLl9rZXlTY2hl''@;'; put 'put ''ZHVsZT1xLHRoaXMuX2ludktleVNjaGVkdWxlPW9lfSxWLnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oQil7cmV0dXJuIGsoQj1LKEIpLHRoaXMuX2tleVNjaGVkdWxlLGouU1VCX01JWCxqLlNCT1gsdGhpcy5fblJvdW5kcyl9LFYucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1m''@;'; put 'put ''dW5jdGlvbihCKXt2YXIgWT10aGlzLmVuY3J5cHRCbG9ja1JhdyhCKSxYPXouYWxsb2NVbnNhZmUoMTYpO3JldHVybiBYLndyaXRlVUludDMyQkUoWVswXSwwKSxYLndyaXRlVUludDMyQkUoWVsxXSw0KSxYLndyaXRlVUludDMyQkUoWVsyXSw4KSxYLndyaXRlVUludDMyQkUoWVszXSwxMiks''@;'; put 'put ''WH0sVi5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKEIpe3ZhciBZPShCPUsoQikpWzFdO0JbMV09QlszXSxCWzNdPVk7dmFyIFg9ayhCLHRoaXMuX2ludktleVNjaGVkdWxlLGouSU5WX1NVQl9NSVgsai5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxVPXouYWxsb2NVbnNhZmUoMTYp''@;'; put 'put ''O3JldHVybiBVLndyaXRlVUludDMyQkUoWFswXSwwKSxVLndyaXRlVUludDMyQkUoWFszXSw0KSxVLndyaXRlVUludDMyQkUoWFsyXSw4KSxVLndyaXRlVUludDMyQkUoWFsxXSwxMiksVX0sVi5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtJKHRoaXMuX2tleVNjaGVkdWxlKSxJKHRoaXMu''@;'; put 'put ''X2ludktleVNjaGVkdWxlKSxJKHRoaXMuX2tleSl9LE0uZXhwb3J0cy5BRVM9Vn0sNDg0ODooTSxPLFIpPT57dmFyIHo9Uig0NDk3KSxLPVIoOTUwOSkuQnVmZmVyLEk9UigxMDI3KSxrPVIoNTcxNyksRT1SKDMyODgpLGo9Uig3Mjk1KSxWPVIoNjg1KTtmdW5jdGlvbiBCKFksWCxVLHEpe0ku''@;'; put 'put ''Y2FsbCh0aGlzKTt2YXIgZWU9Sy5hbGxvYyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgei5BRVMoWCk7dmFyIHRlPXRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soZWUpO3RoaXMuX2doYXNoPW5ldyBFKHRlKSxVPWZ1bmN0aW9uKG9lLHNlLGhlKXtpZigxMj09PXNlLmxlbmd0aClyZXR1cm4gb2Uu''@;'; put 'put ''X2ZpbklEPUsuY29uY2F0KFtzZSxLLmZyb20oWzAsMCwwLDFdKV0pLEsuY29uY2F0KFtzZSxLLmZyb20oWzAsMCwwLDJdKV0pO3ZhciB1ZT1uZXcgRShoZSksY2U9c2UubGVuZ3RoLEc9Y2UlMTY7dWUudXBkYXRlKHNlKSxHJiZ1ZS51cGRhdGUoSy5hbGxvYyhHPTE2LUcsMCkpLHVlLnVwZGF0''@;'; put 'put ''ZShLLmFsbG9jKDgsMCkpO3ZhciBiPTgqY2UsRD1LLmFsbG9jKDgpO0Qud3JpdGVVSW50QkUoYiwwLDgpLHVlLnVwZGF0ZShEKSxvZS5fZmluSUQ9dWUuc3RhdGU7dmFyIEg9Sy5mcm9tKG9lLl9maW5JRCk7cmV0dXJuIFYoSCksSH0odGhpcyxVLHRlKSx0aGlzLl9wcmV2PUsuZnJvbShVKSx0''@;'; put 'put ''aGlzLl9jYWNoZT1LLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPUsuYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1xLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPVksdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1rKEIsSSksQi5wcm90b3R5''@;'; put 'put ''cGUuX3VwZGF0ZT1mdW5jdGlvbihZKXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgWD0xNi10aGlzLl9hbGVuJTE2O1g8MTYmJihYPUsuYWxsb2MoWCwwKSx0aGlzLl9naGFzaC51cGRhdGUoWCkpfXRoaXMuX2NhbGxlZD0hMDt2YXIgVT10aGlzLl9tb2RlLmVuY3J5cHQodGhp''@;'; put 'put ''cyxZKTtyZXR1cm4gdGhpcy5fZ2hhc2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/WTpVKSx0aGlzLl9sZW4rPVkubGVuZ3RoLFV9LEIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQg''@;'; put 'put ''c3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dmFyIFk9aih0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbihYLFUpe3Zh''@;'; put 'put ''ciBxPTA7WC5sZW5ndGghPT1VLmxlbmd0aCYmcSsrO2Zvcih2YXIgZWU9TWF0aC5taW4oWC5sZW5ndGgsVS5sZW5ndGgpLHRlPTA7dGU8ZWU7Kyt0ZSlxKz1YW3RlXV5VW3RlXTtyZXR1cm4gcX0oWSx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9y''@;'; put 'put ''IHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9WSx0aGlzLl9jaXBoZXIuc2NydWIoKX0sQi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFLLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''QXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sQi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihZKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGgg''@;'; put 'put ''dGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1ZfSxCLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oWSl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gu''@;'; put 'put ''dXBkYXRlKFkpLHRoaXMuX2FsZW4rPVkubGVuZ3RofSxNLmV4cG9ydHM9Qn0sNDY5NjooTSxPLFIpPT57dmFyIHo9UigxNDk0KSxLPVIoNjE5MyksST1SKDQ5NDYpO08uY3JlYXRlQ2lwaGVyPU8uQ2lwaGVyPXouY3JlYXRlQ2lwaGVyLE8uY3JlYXRlQ2lwaGVyaXY9Ty5DaXBoZXJpdj16LmNy''@;'; put 'put ''ZWF0ZUNpcGhlcml2LE8uY3JlYXRlRGVjaXBoZXI9Ty5EZWNpcGhlcj1LLmNyZWF0ZURlY2lwaGVyLE8uY3JlYXRlRGVjaXBoZXJpdj1PLkRlY2lwaGVyaXY9Sy5jcmVhdGVEZWNpcGhlcml2LE8ubGlzdENpcGhlcnM9Ty5nZXRDaXBoZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlz''@;'; put 'put ''KEkpfX0sNjE5MzooTSxPLFIpPT57dmFyIHo9Uig0ODQ4KSxLPVIoOTUwOSkuQnVmZmVyLEk9Uig0NSksaz1SKDU5NjkpLEU9UigxMDI3KSxqPVIoNDQ5NyksVj1SKDMwNDgpO2Z1bmN0aW9uIEIoVSxxLGVlKXtFLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IFksdGhpcy5fbGFzdD12b2lk''@;'; put 'put ''IDAsdGhpcy5fY2lwaGVyPW5ldyBqLkFFUyhxKSx0aGlzLl9wcmV2PUsuZnJvbShlZSksdGhpcy5fbW9kZT1VLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIFkoKXt0aGlzLmNhY2hlPUsuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gWChVLHEsZWUpe3ZhciB0ZT1JW1UudG9Mb3dlckNh''@;'; put 'put ''c2UoKV07aWYoIXRlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgZWUmJihlZT1LLmZyb20oZWUpKSwiR0NNIiE9PXRlLm1vZGUmJmVlLmxlbmd0aCE9PXRlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVu''@;'; put 'put ''Z3RoICIrZWUubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIHEmJihxPUsuZnJvbShxKSkscS5sZW5ndGghPT10ZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT10ZS50eXBlP25ldyBrKHRlLm1vZHVs''@;'; put 'put ''ZSxxLGVlLCEwKToiYXV0aCI9PT10ZS50eXBlP25ldyB6KHRlLm1vZHVsZSxxLGVlLCEwKTpuZXcgQih0ZS5tb2R1bGUscSxlZSl9Uig1NzE3KShCLEUpLEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSl7dmFyIHEsZWU7dGhpcy5fY2FjaGUuYWRkKFUpO2Zvcih2YXIgdGU9W107cT10''@;'; put 'put ''aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOyllZT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxxKSx0ZS5wdXNoKGVlKTtyZXR1cm4gSy5jb25jYXQodGUpfSxCLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVT10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1''@;'; put 'put ''dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbihxKXt2YXIgZWU9cVsxNV07aWYoZWU8MXx8ZWU+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciB0ZT0tMTsrK3RlPGVlOylpZihxW3RlKygxNi1lZSldIT09ZWUpdGhyb3cgbmV3IEVycm9yKCJ1bmFi''@;'; put 'put ''bGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1lZSlyZXR1cm4gcS5zbGljZSgwLDE2LWVlKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsVSkpO2lmKFUpdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sQi5wcm90b3R5cGUuc2V0QXV0b1Bh''@;'; put 'put ''ZGRpbmc9ZnVuY3Rpb24oVSl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVSx0aGlzfSxZLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVSl7dGhpcy5jYWNoZT1LLmNvbmNhdChbdGhpcy5jYWNoZSxVXSl9LFkucHJvdG90eXBlLmdldD1mdW5jdGlvbihVKXt2YXIgcTtpZihVKXtpZih0aGlz''@;'; put 'put ''LmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gcT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNikscX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gcT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNo''@;'; put 'put ''ZS5zbGljZSgxNikscTtyZXR1cm4gbnVsbH0sWS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0sTy5jcmVhdGVEZWNpcGhlcj1mdW5jdGlvbihVLHEpe3ZhciBlZT1JW1UudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciB0ZT1WKHEsITEsZWUua2V5LGVlLml2KTtyZXR1cm4gWChVLHRlLmtleSx0ZS5pdil9LE8uY3JlYXRlRGVjaXBoZXJpdj1YfSwxNDk0OihNLE8sUik9Pnt2YXIgej1SKDQ1KSxLPVIoNDg0OCksST1SKDk1MDkpLkJ1ZmZl''@;'; put 'put ''cixrPVIoNTk2OSksRT1SKDEwMjcpLGo9Uig0NDk3KSxWPVIoMzA0OCk7ZnVuY3Rpb24gQihxLGVlLHRlKXtFLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IFgsdGhpcy5fY2lwaGVyPW5ldyBqLkFFUyhlZSksdGhpcy5fcHJldj1JLmZyb20odGUpLHRoaXMuX21vZGU9cSx0aGlzLl9hdXRv''@;'; put 'put ''cGFkZGluZz0hMH1SKDU3MTcpKEIsRSksQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihxKXt2YXIgZWUsdGU7dGhpcy5fY2FjaGUuYWRkKHEpO2Zvcih2YXIgb2U9W107ZWU9dGhpcy5fY2FjaGUuZ2V0KCk7KXRlPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLGVlKSxvZS5wdXNoKHRlKTty''@;'; put 'put ''ZXR1cm4gSS5jb25jYXQob2UpfTt2YXIgWT1JLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBYKCl7dGhpcy5jYWNoZT1JLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIFUocSxlZSx0ZSl7dmFyIG9lPXpbcS50b0xvd2VyQ2FzZSgpXTtpZighb2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBz''@;'; put 'put ''dWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBlZSYmKGVlPUkuZnJvbShlZSkpLGVlLmxlbmd0aCE9PW9lLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK2VlLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiB0ZSYmKHRlPUkuZnJvbSh0ZSkp''@;'; put 'put ''LCJHQ00iIT09b2UubW9kZSYmdGUubGVuZ3RoIT09b2UuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIit0ZS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09b2UudHlwZT9uZXcgayhvZS5tb2R1bGUsZWUsdGUpOiJhdXRoIj09PW9lLnR5cGU/bmV3IEsob2UubW9k''@;'; put 'put ''dWxlLGVlLHRlKTpuZXcgQihvZS5tb2R1bGUsZWUsdGUpfUIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBxPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIHE9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMscSksdGhpcy5fY2lwaGVyLnNjcnVi''@;'; put 'put ''KCkscTtpZighcS5lcXVhbHMoWSkpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sQi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhcSx0''@;'; put 'put ''aGlzfSxYLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocSl7dGhpcy5jYWNoZT1JLmNvbmNhdChbdGhpcy5jYWNoZSxxXSl9LFgucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgcT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNh''@;'; put 'put ''Y2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHF9cmV0dXJuIG51bGx9LFgucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBxPTE2LXRoaXMuY2FjaGUubGVuZ3RoLGVlPUkuYWxsb2NVbnNhZmUocSksdGU9LTE7Kyt0ZTxxOyllZS53cml0ZVVJbnQ4KHEsdGUpO3JldHVybiBJLmNv''@;'; put 'put ''bmNhdChbdGhpcy5jYWNoZSxlZV0pfSxPLmNyZWF0ZUNpcGhlcml2PVUsTy5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24ocSxlZSl7dmFyIHRlPXpbcS50b0xvd2VyQ2FzZSgpXTtpZighdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIG9lPVYoZWUsITEsdGUu''@;'; put 'put ''a2V5LHRlLml2KTtyZXR1cm4gVShxLG9lLmtleSxvZS5pdil9fSwzMjg4OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPXouYWxsb2MoMTYsMCk7ZnVuY3Rpb24gSShFKXt2YXIgaj16LmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gai53cml0ZVVJbnQzMkJFKEVbMF0+Pj4wLDApLGou''@;'; put 'put ''d3JpdGVVSW50MzJCRShFWzFdPj4+MCw0KSxqLndyaXRlVUludDMyQkUoRVsyXT4+PjAsOCksai53cml0ZVVJbnQzMkJFKEVbM10+Pj4wLDEyKSxqfWZ1bmN0aW9uIGsoRSl7dGhpcy5oPUUsdGhpcy5zdGF0ZT16LmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9ei5hbGxvY1Vuc2FmZSgwKX1rLnBy''@;'; put 'put ''b3RvdHlwZS5naGFzaD1mdW5jdGlvbihFKXtmb3IodmFyIGo9LTE7KytqPEUubGVuZ3RoOyl0aGlzLnN0YXRlW2pdXj1FW2pdO3RoaXMuX211bHRpcGx5KCl9LGsucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgRSxqLFYsQj1bKEU9dGhpcy5oKS5yZWFkVUludDMyQkUo''@;'; put 'put ''MCksRS5yZWFkVUludDMyQkUoNCksRS5yZWFkVUludDMyQkUoOCksRS5yZWFkVUludDMyQkUoMTIpXSxZPVswLDAsMCwwXSxYPS0xOysrWDwxMjg7KXtmb3IodGhpcy5zdGF0ZVt+fihYLzgpXSYxPDw3LVglOCYmKFlbMF1ePUJbMF0sWVsxXV49QlsxXSxZWzJdXj1CWzJdLFlbM11ePUJbM10p''@;'; put 'put ''LFY9MCE9KDEmQlszXSksaj0zO2o+MDtqLS0pQltqXT1CW2pdPj4+MXwoMSZCW2otMV0pPDwzMTtCWzBdPUJbMF0+Pj4xLFYmJihCWzBdPS01MjAwOTM2OTZeQlswXSl9dGhpcy5zdGF0ZT1JKFkpfSxrLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oRSl7dmFyIGo7Zm9yKHRoaXMuY2FjaGU9''@;'; put 'put ''ei5jb25jYXQoW3RoaXMuY2FjaGUsRV0pO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspaj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChqKX0say5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oRSxqKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''YWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goei5jb25jYXQoW3RoaXMuY2FjaGUsS10sMTYpKSx0aGlzLmdoYXNoKEkoWzAsRSwwLGpdKSksdGhpcy5zdGF0ZX0sTS5leHBvcnRzPWt9LDY4NTpNPT57TS5leHBvcnRzPWZ1bmN0aW9uKE8pe2Zvcih2YXIgUix6PU8ubGVuZ3RoO3otLTspe2lmKDI1''@;'; put 'put ''NSE9PShSPU8ucmVhZFVJbnQ4KHopKSl7UisrLE8ud3JpdGVVSW50OChSLHopO2JyZWFrfU8ud3JpdGVVSW50OCgwLHopfX19LDUyOTI6KE0sTyxSKT0+e3ZhciB6PVIoNzI5NSk7Ty5lbmNyeXB0PWZ1bmN0aW9uKEssSSl7dmFyIGs9eihJLEsuX3ByZXYpO3JldHVybiBLLl9wcmV2PUsuX2Np''@;'; put 'put ''cGhlci5lbmNyeXB0QmxvY2soayksSy5fcHJldn0sTy5kZWNyeXB0PWZ1bmN0aW9uKEssSSl7dmFyIGs9Sy5fcHJldjtLLl9wcmV2PUk7dmFyIEU9Sy5fY2lwaGVyLmRlY3J5cHRCbG9jayhJKTtyZXR1cm4geihFLGspfX0sNjMxMTooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1S''@;'; put 'put ''KDcyOTUpO2Z1bmN0aW9uIEkoayxFLGope3ZhciBWPUUubGVuZ3RoLEI9SyhFLGsuX2NhY2hlKTtyZXR1cm4gay5fY2FjaGU9ay5fY2FjaGUuc2xpY2UoViksay5fcHJldj16LmNvbmNhdChbay5fcHJldixqP0U6Ql0pLEJ9Ty5lbmNyeXB0PWZ1bmN0aW9uKGssRSxqKXtmb3IodmFyIFYsQj16''@;'; put 'put ''LmFsbG9jVW5zYWZlKDApO0UubGVuZ3RoOyl7aWYoMD09PWsuX2NhY2hlLmxlbmd0aCYmKGsuX2NhY2hlPWsuX2NpcGhlci5lbmNyeXB0QmxvY2soay5fcHJldiksay5fcHJldj16LmFsbG9jVW5zYWZlKDApKSwhKGsuX2NhY2hlLmxlbmd0aDw9RS5sZW5ndGgpKXtCPXouY29uY2F0KFtCLEko''@;'; put 'put ''ayxFLGopXSk7YnJlYWt9Qj16LmNvbmNhdChbQixJKGssRS5zbGljZSgwLFY9ay5fY2FjaGUubGVuZ3RoKSxqKV0pLEU9RS5zbGljZShWKX1yZXR1cm4gQn19LDE1MTA6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEsoayxFLGope2Zvcih2YXIgVixCLFk9LTEsWD0w''@;'; put 'put ''OysrWTw4OylWPUUmMTw8Ny1ZPzEyODowLFgrPSgxMjgmKEI9ay5fY2lwaGVyLmVuY3J5cHRCbG9jayhrLl9wcmV2KVswXV5WKSk+PlklOCxrLl9wcmV2PUkoay5fcHJldixqP1Y6Qik7cmV0dXJuIFh9ZnVuY3Rpb24gSShrLEUpe3ZhciBqPWsubGVuZ3RoLFY9LTEsQj16LmFsbG9jVW5zYWZl''@;'; put 'put ''KGsubGVuZ3RoKTtmb3Ioaz16LmNvbmNhdChbayx6LmZyb20oW0VdKV0pOysrVjxqOylCW1ZdPWtbVl08PDF8a1tWKzFdPj43O3JldHVybiBCfU8uZW5jcnlwdD1mdW5jdGlvbihrLEUsail7Zm9yKHZhciBWPUUubGVuZ3RoLEI9ei5hbGxvY1Vuc2FmZShWKSxZPS0xOysrWTxWOylCW1ldPUso''@;'; put 'put ''ayxFW1ldLGopO3JldHVybiBCfX0sMTk2NDooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSyhJLGssRSl7dmFyIGo9SS5fY2lwaGVyLmVuY3J5cHRCbG9jayhJLl9wcmV2KVswXV5rO3JldHVybiBJLl9wcmV2PXouY29uY2F0KFtJLl9wcmV2LnNsaWNlKDEpLHouZnJv''@;'; put 'put ''bShbRT9rOmpdKV0pLGp9Ty5lbmNyeXB0PWZ1bmN0aW9uKEksayxFKXtmb3IodmFyIGo9ay5sZW5ndGgsVj16LmFsbG9jVW5zYWZlKGopLEI9LTE7KytCPGo7KVZbQl09SyhJLGtbQl0sRSk7cmV0dXJuIFZ9fSw2MDA5OihNLE8sUik9Pnt2YXIgej1SKDcyOTUpLEs9Uig5NTA5KS5CdWZmZXIs''@;'; put 'put ''ST1SKDY4NSk7ZnVuY3Rpb24gayhFKXt2YXIgaj1FLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KEUuX3ByZXYpO3JldHVybiBJKEUuX3ByZXYpLGp9Ty5lbmNyeXB0PWZ1bmN0aW9uKEUsail7dmFyIFY9TWF0aC5jZWlsKGoubGVuZ3RoLzE2KSxCPUUuX2NhY2hlLmxlbmd0aDtFLl9jYWNoZT1L''@;'; put 'put ''LmNvbmNhdChbRS5fY2FjaGUsSy5hbGxvY1Vuc2FmZSgxNipWKV0pO2Zvcih2YXIgWT0wO1k8VjtZKyspe3ZhciBYPWsoRSksVT1CKzE2Klk7RS5fY2FjaGUud3JpdGVVSW50MzJCRShYWzBdLFUrMCksRS5fY2FjaGUud3JpdGVVSW50MzJCRShYWzFdLFUrNCksRS5fY2FjaGUud3JpdGVVSW50''@;'; put 'put ''MzJCRShYWzJdLFUrOCksRS5fY2FjaGUud3JpdGVVSW50MzJCRShYWzNdLFUrMTIpfXZhciBxPUUuX2NhY2hlLnNsaWNlKDAsai5sZW5ndGgpO3JldHVybiBFLl9jYWNoZT1FLl9jYWNoZS5zbGljZShqLmxlbmd0aCkseihqLHEpfX0sMTA4NDooTSxPKT0+e08uZW5jcnlwdD1mdW5jdGlvbihS''@;'; put 'put ''LHope3JldHVybiBSLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHopfSxPLmRlY3J5cHQ9ZnVuY3Rpb24oUix6KXtyZXR1cm4gUi5fY2lwaGVyLmRlY3J5cHRCbG9jayh6KX19LDQ1OihNLE8sUik9Pnt2YXIgej17RUNCOlIoMTA4NCksQ0JDOlIoNTI5MiksQ0ZCOlIoNjMxMSksQ0ZCODpSKDE5NjQp''@;'; put 'put ''LENGQjE6UigxNTEwKSxPRkI6Uig4ODYxKSxDVFI6Uig2MDA5KSxHQ006Uig2MDA5KX0sSz1SKDQ5NDYpO2Zvcih2YXIgSSBpbiBLKUtbSV0ubW9kdWxlPXpbS1tJXS5tb2RlXTtNLmV4cG9ydHM9S30sODg2MTooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDcyOTUpO2Z1bmN0''@;'; put 'put ''aW9uIEkoayl7cmV0dXJuIGsuX3ByZXY9ay5fY2lwaGVyLmVuY3J5cHRCbG9jayhrLl9wcmV2KSxrLl9wcmV2fU8uZW5jcnlwdD1mdW5jdGlvbihrLEUpe2Zvcig7ay5fY2FjaGUubGVuZ3RoPEUubGVuZ3RoOylrLl9jYWNoZT16LmNvbmNhdChbay5fY2FjaGUsSShrKV0pO3ZhciBqPWsuX2Nh''@;'; put 'put ''Y2hlLnNsaWNlKDAsRS5sZW5ndGgpO3JldHVybiBrLl9jYWNoZT1rLl9jYWNoZS5zbGljZShFLmxlbmd0aCksSyhFLGopfX0sNTk2OTooTSxPLFIpPT57dmFyIHo9Uig0NDk3KSxLPVIoOTUwOSkuQnVmZmVyLEk9UigxMDI3KTtmdW5jdGlvbiBrKEUsaixWLEIpe0kuY2FsbCh0aGlzKSx0aGlz''@;'; put 'put ''Ll9jaXBoZXI9bmV3IHouQUVTKGopLHRoaXMuX3ByZXY9Sy5mcm9tKFYpLHRoaXMuX2NhY2hlPUsuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Sy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PUIsdGhpcy5fbW9kZT1FfVIoNTcxNykoayxJKSxrLnByb3RvdHlwZS5fdXBkYXRl''@;'; put 'put ''PWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxFLHRoaXMuX2RlY3J5cHQpfSxrLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sTS5leHBvcnRzPWt9LDM2MTQ6KE0sTyxSKT0+e3ZhciB6PVIoNzY2NyksSz1SKDQ2OTYp''@;'; put 'put ''LEk9Uig0NSksaz1SKDk3MTUpLEU9UigzMDQ4KTtmdW5jdGlvbiBqKEIsWSxYKXtpZihCPUIudG9Mb3dlckNhc2UoKSxJW0JdKXJldHVybiBLLmNyZWF0ZUNpcGhlcml2KEIsWSxYKTtpZihrW0JdKXJldHVybiBuZXcgeih7a2V5OlksaXY6WCxtb2RlOkJ9KTt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1mdW5jdGlvbiBWKEIsWSxYKXtpZihCPUIudG9Mb3dlckNhc2UoKSxJW0JdKXJldHVybiBLLmNyZWF0ZURlY2lwaGVyaXYoQixZLFgpO2lmKGtbQl0pcmV0dXJuIG5ldyB6KHtrZXk6WSxpdjpYLG1vZGU6QixkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9Ty5jcmVhdGVDaXBoZXI9Ty5DaXBoZXI9ZnVuY3Rpb24oQixZKXt2YXIgWCxVO2lmKEI9Qi50b0xvd2VyQ2FzZSgpLElbQl0pWD1JW0JdLmtleSxVPUlbQl0uaXY7ZWxzZXtpZigha1tCXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlk''@;'; put 'put ''IHN1aXRlIHR5cGUiKTtYPTgqa1tCXS5rZXksVT1rW0JdLml2fXZhciBxPUUoWSwhMSxYLFUpO3JldHVybiBqKEIscS5rZXkscS5pdil9LE8uY3JlYXRlQ2lwaGVyaXY9Ty5DaXBoZXJpdj1qLE8uY3JlYXRlRGVjaXBoZXI9Ty5EZWNpcGhlcj1mdW5jdGlvbihCLFkpe3ZhciBYLFU7aWYoQj1C''@;'; put 'put ''LnRvTG93ZXJDYXNlKCksSVtCXSlYPUlbQl0ua2V5LFU9SVtCXS5pdjtlbHNle2lmKCFrW0JdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1g9OCprW0JdLmtleSxVPWtbQl0uaXZ9dmFyIHE9RShZLCExLFgsVSk7cmV0dXJuIFYoQixxLmtleSxxLml2KX0sTy5j''@;'; put 'put ''cmVhdGVEZWNpcGhlcml2PU8uRGVjaXBoZXJpdj1WLE8ubGlzdENpcGhlcnM9Ty5nZXRDaXBoZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKGspLmNvbmNhdChLLmdldENpcGhlcnMoKSl9fSw3NjY3OihNLE8sUik9Pnt2YXIgej1SKDEwMjcpLEs9Uig1MjUxKSxJPVIoNTcxNyks''@;'; put 'put ''az1SKDk1MDkpLkJ1ZmZlcixFPXsiZGVzLWVkZTMtY2JjIjpLLkNCQy5pbnN0YW50aWF0ZShLLkVERSksImRlcy1lZGUzIjpLLkVERSwiZGVzLWVkZS1jYmMiOksuQ0JDLmluc3RhbnRpYXRlKEsuRURFKSwiZGVzLWVkZSI6Sy5FREUsImRlcy1jYmMiOksuQ0JDLmluc3RhbnRpYXRlKEsuREVT''@;'; put 'put ''KSwiZGVzLWVjYiI6Sy5ERVN9O2Z1bmN0aW9uIGooVil7ei5jYWxsKHRoaXMpO3ZhciBCLFk9Vi5tb2RlLnRvTG93ZXJDYXNlKCksWD1FW1ldO0I9Vi5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIFU9Vi5rZXk7ay5pc0J1ZmZlcihVKXx8KFU9ay5mcm9tKFUpKSwiZGVzLWVkZSIh''@;'; put 'put ''PT1ZJiYiZGVzLWVkZS1jYmMiIT09WXx8KFU9ay5jb25jYXQoW1UsVS5zbGljZSgwLDgpXSkpO3ZhciBxPVYuaXY7ay5pc0J1ZmZlcihxKXx8KHE9ay5mcm9tKHEpKSx0aGlzLl9kZXM9WC5jcmVhdGUoe2tleTpVLGl2OnEsdHlwZTpCfSl9RS5kZXM9RVsiZGVzLWNiYyJdLEUuZGVzMz1FWyJk''@;'; put 'put ''ZXMtZWRlMy1jYmMiXSxNLmV4cG9ydHM9aixJKGoseiksai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXtyZXR1cm4gay5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoVikpfSxqLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gay5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19''@;'; put 'put ''LDk3MTU6KE0sTyk9PntPWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LE9bImRlcy1jYmMiXT1PLmRlcz17a2V5OjgsaXY6OH0sT1siZGVzLWVkZTMtY2JjIl09Ty5kZXMzPXtrZXk6MjQsaXY6OH0sT1siZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LE9bImRlcy1lZGUtY2JjIl09e2tleToxNixp''@;'; put 'put ''djo4fSxPWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sMzY2MzooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDM1NTApLEk9UigxNzk4KTtmdW5jdGlvbiBrKGope3ZhciBWLEI9ai5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3tWPW5ldyBLKEkoQikpfXdoaWxlKFYuY21wKGou''@;'; put 'put ''bW9kdWx1cyk+PTB8fCFWLnVtb2Qoai5wcmltZTEpfHwhVi51bW9kKGoucHJpbWUyKSk7cmV0dXJuIFZ9ZnVuY3Rpb24gRShqLFYpe3ZhciBjZSxHLEI9e2JsaW5kZXI6KEc9ayhjZT1WKSkudG9SZWQoSy5tb250KGNlLm1vZHVsdXMpKS5yZWRQb3cobmV3IEsoY2UucHVibGljRXhwb25lbnQp''@;'; put 'put ''KS5mcm9tUmVkKCksdW5ibGluZGVyOkcuaW52bShjZS5tb2R1bHVzKX0sWT1WLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFg9bmV3IEsoaikubXVsKEIuYmxpbmRlcikudW1vZChWLm1vZHVsdXMpLFU9WC50b1JlZChLLm1vbnQoVi5wcmltZTEpKSxxPVgudG9SZWQoSy5tb250KFYucHJpbWUyKSks''@;'; put 'put ''ZWU9Vi5jb2VmZmljaWVudCx0ZT1WLnByaW1lMSxvZT1WLnByaW1lMixzZT1VLnJlZFBvdyhWLmV4cG9uZW50MSkuZnJvbVJlZCgpLGhlPXEucmVkUG93KFYuZXhwb25lbnQyKS5mcm9tUmVkKCksdWU9c2UuaXN1YihoZSkuaW11bChlZSkudW1vZCh0ZSkuaW11bChvZSk7cmV0dXJuIGhlLmlh''@;'; put 'put ''ZGQodWUpLmltdWwoQi51bmJsaW5kZXIpLnVtb2QoVi5tb2R1bHVzKS50b0FycmF5TGlrZSh6LCJiZSIsWSl9RS5nZXRyPWssTS5leHBvcnRzPUV9LDYwNDI6KE0sTyxSKT0+e00uZXhwb3J0cz1SKDUyMDcpfSw0NzQzOihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPVIoMzQ4Miks''@;'; put 'put ''ST1SKDg0NzMpLGs9Uig1NzE3KSxFPVIoMjk1Nyksaj1SKDc3NTMpLFY9Uig1MjA3KTtmdW5jdGlvbiBCKHEpe0kuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgZWU9VltxXTtpZighZWUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9ZWUu''@;'; put 'put ''aGFzaCx0aGlzLl9oYXNoPUsoZWUuaGFzaCksdGhpcy5fdGFnPWVlLmlkLHRoaXMuX3NpZ25UeXBlPWVlLnNpZ259ZnVuY3Rpb24gWShxKXtJLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGVlPVZbcV07aWYoIWVlKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3Ro''@;'; put 'put ''aXMuX2hhc2g9SyhlZS5oYXNoKSx0aGlzLl90YWc9ZWUuaWQsdGhpcy5fc2lnblR5cGU9ZWUuc2lnbn1mdW5jdGlvbiBYKHEpe3JldHVybiBuZXcgQihxKX1mdW5jdGlvbiBVKHEpe3JldHVybiBuZXcgWShxKX1PYmplY3Qua2V5cyhWKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe1ZbcV0uaWQ9ei5m''@;'; put 'put ''cm9tKFZbcV0uaWQsImhleCIpLFZbcS50b0xvd2VyQ2FzZSgpXT1WW3FdfSksayhCLEkuV3JpdGFibGUpLEIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihxLGVlLHRlKXt0aGlzLl9oYXNoLnVwZGF0ZShxKSx0ZSgpfSxCLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24ocSxlZSl7cmV0dXJu''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBxJiYocT16LmZyb20ocSxlZSkpLHRoaXMuX2hhc2gudXBkYXRlKHEpLHRoaXN9LEIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24ocSxlZSl7dGhpcy5lbmQoKTt2YXIgdGU9dGhpcy5faGFzaC5kaWdlc3QoKSxvZT1FKHRlLHEsdGhpcy5faGFzaFR5cGUsdGhpcy5f''@;'; put 'put ''c2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gZWU/b2UudG9TdHJpbmcoZWUpOm9lfSxrKFksSS5Xcml0YWJsZSksWS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHEsZWUsdGUpe3RoaXMuX2hhc2gudXBkYXRlKHEpLHRlKCl9LFkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihxLGVlKXty''@;'; put 'put ''ZXR1cm4ic3RyaW5nIj09dHlwZW9mIHEmJihxPXouZnJvbShxLGVlKSksdGhpcy5faGFzaC51cGRhdGUocSksdGhpc30sWS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHEsZWUsdGUpeyJzdHJpbmciPT10eXBlb2YgZWUmJihlZT16LmZyb20oZWUsdGUpKSx0aGlzLmVuZCgpO3ZhciBvZT10''@;'; put 'put ''aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBqKGVlLG9lLHEsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sTS5leHBvcnRzPXtTaWduOlgsVmVyaWZ5OlUsY3JlYXRlU2lnbjpYLGNyZWF0ZVZlcmlmeTpVfX0sMjk1NzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDgzNTUp''@;'; put 'put ''LEk9UigzNjYzKSxrPVIoNjk0OCkuZWMsRT1SKDM1NTApLGo9Uig5ODApLFY9UigxMzA4KTtmdW5jdGlvbiBCKHEsZWUsdGUsb2Upe2lmKChxPXouZnJvbShxLnRvQXJyYXkoKSkpLmxlbmd0aDxlZS5ieXRlTGVuZ3RoKCkpe3ZhciBzZT16LmFsbG9jKGVlLmJ5dGVMZW5ndGgoKS1xLmxlbmd0''@;'; put 'put ''aCk7cT16LmNvbmNhdChbc2UscV0pfXZhciBoZT10ZS5sZW5ndGgsdWU9ZnVuY3Rpb24oYixEKXtiPShiPVkoYixEKSkubW9kKEQpO3ZhciBIPXouZnJvbShiLnRvQXJyYXkoKSk7aWYoSC5sZW5ndGg8RC5ieXRlTGVuZ3RoKCkpe3ZhciBOPXouYWxsb2MoRC5ieXRlTGVuZ3RoKCktSC5sZW5n''@;'; put 'put ''dGgpO0g9ei5jb25jYXQoW04sSF0pfXJldHVybiBIfSh0ZSxlZSksY2U9ei5hbGxvYyhoZSk7Y2UuZmlsbCgxKTt2YXIgRz16LmFsbG9jKGhlKTtyZXR1cm4gRz1LKG9lLEcpLnVwZGF0ZShjZSkudXBkYXRlKHouZnJvbShbMF0pKS51cGRhdGUocSkudXBkYXRlKHVlKS5kaWdlc3QoKSxjZT1L''@;'; put 'put ''KG9lLEcpLnVwZGF0ZShjZSkuZGlnZXN0KCkse2s6Rz1LKG9lLEcpLnVwZGF0ZShjZSkudXBkYXRlKHouZnJvbShbMV0pKS51cGRhdGUocSkudXBkYXRlKHVlKS5kaWdlc3QoKSx2OmNlPUsob2UsRykudXBkYXRlKGNlKS5kaWdlc3QoKX19ZnVuY3Rpb24gWShxLGVlKXt2YXIgdGU9bmV3IEUo''@;'; put 'put ''cSksb2U9KHEubGVuZ3RoPDwzKS1lZS5iaXRMZW5ndGgoKTtyZXR1cm4gb2U+MCYmdGUuaXNocm4ob2UpLHRlfWZ1bmN0aW9uIFgocSxlZSx0ZSl7dmFyIG9lLHNlO2Rve2ZvcihvZT16LmFsbG9jKDApOzgqb2UubGVuZ3RoPHEuYml0TGVuZ3RoKCk7KWVlLnY9Syh0ZSxlZS5rKS51cGRhdGUo''@;'; put 'put ''ZWUudikuZGlnZXN0KCksb2U9ei5jb25jYXQoW29lLGVlLnZdKTtzZT1ZKG9lLHEpLGVlLms9Syh0ZSxlZS5rKS51cGRhdGUoZWUudikudXBkYXRlKHouZnJvbShbMF0pKS5kaWdlc3QoKSxlZS52PUsodGUsZWUuaykudXBkYXRlKGVlLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09c2UuY21wKHEp''@;'; put 'put ''KTtyZXR1cm4gc2V9ZnVuY3Rpb24gVShxLGVlLHRlLG9lKXtyZXR1cm4gcS50b1JlZChFLm1vbnQodGUpKS5yZWRQb3coZWUpLmZyb21SZWQoKS5tb2Qob2UpfU0uZXhwb3J0cz1mdW5jdGlvbihxLGVlLHRlLG9lLHNlKXt2YXIgaGU9aihlZSk7aWYoaGUuY3VydmUpe2lmKCJlY2RzYSIhPT1v''@;'; put 'put ''ZSYmImVjZHNhL3JzYSIhPT1vZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oYixEKXt2YXIgSD1WW0QuY3VydmUuam9pbigiLiIpXTtpZighSCl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitELmN1cnZlLmpvaW4oIi4i''@;'; put 'put ''KSk7dmFyIGc9bmV3IGsoSCkua2V5RnJvbVByaXZhdGUoRC5wcml2YXRlS2V5KS5zaWduKGIpO3JldHVybiB6LmZyb20oZy50b0RFUigpKX0ocSxoZSl9aWYoImRzYSI9PT1oZS50eXBlKXtpZigiZHNhIiE9PW9lKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihiLEQsSCl7Zm9yKHZhciBOLGc9RC5wYXJhbXMucHJpdl9rZXksQz1ELnBhcmFtcy5wLFM9RC5wYXJhbXMucSx2PUQucGFyYW1zLmcscD1uZXcgRSgwKSx3PVkoYixTKS5tb2QoUyksSj0hMSxuZT1CKGcsUyxiLEgpOyExPT09SjspcD1VKHYsTj1YKFMsbmUsSCksQyxT''@;'; put 'put ''KSwwPT09KEo9Ti5pbnZtKFMpLmltdWwody5hZGQoZy5tdWwocCkpKS5tb2QoUykpLmNtcG4oMCkmJihKPSExLHA9bmV3IEUoMCkpO3JldHVybiBmdW5jdGlvbihkZSxmZSl7ZGU9ZGUudG9BcnJheSgpLGZlPWZlLnRvQXJyYXkoKSwxMjgmZGVbMF0mJihkZT1bMF0uY29uY2F0KGRlKSksMTI4''@;'; put 'put ''JmZlWzBdJiYoZmU9WzBdLmNvbmNhdChmZSkpO3ZhciBMZT1bNDgsZGUubGVuZ3RoK2ZlLmxlbmd0aCs0LDIsZGUubGVuZ3RoXTtyZXR1cm4gTGU9TGUuY29uY2F0KGRlLFsyLGZlLmxlbmd0aF0sZmUpLHouZnJvbShMZSl9KHAsSil9KHEsaGUsdGUpfWlmKCJyc2EiIT09b2UmJiJlY2RzYS9y''@;'; put 'put ''c2EiIT09b2UpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cT16LmNvbmNhdChbc2UscV0pO2Zvcih2YXIgdWU9aGUubW9kdWx1cy5ieXRlTGVuZ3RoKCksY2U9WzAsMV07cS5sZW5ndGgrY2UubGVuZ3RoKzE8dWU7KWNlLnB1c2goMjU1KTtjZS5wdXNoKDApO2Zv''@;'; put 'put ''cih2YXIgRz0tMTsrK0c8cS5sZW5ndGg7KWNlLnB1c2gocVtHXSk7cmV0dXJuIEkoY2UsaGUpfSxNLmV4cG9ydHMuZ2V0S2V5PUIsTS5leHBvcnRzLm1ha2VLZXk9WH0sNzc1MzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDM1NTApLEk9Uig2OTQ4KS5lYyxrPVIoOTgwKSxF''@;'; put 'put ''PVIoMTMwOCk7ZnVuY3Rpb24gaihWLEIpe2lmKFYuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoVi5jbXAoQik+PUIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfU0uZXhwb3J0cz1mdW5jdGlvbihWLEIsWSxYLFUpe3ZhciBxPWsoWSk7aWYoImVj''@;'; put 'put ''Ij09PXEudHlwZSl7aWYoImVjZHNhIiE9PVgmJiJlY2RzYS9yc2EiIT09WCl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihjZSxHLGIpe3ZhciBEPUVbYi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIildO2lmKCFEKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK2IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpKTtyZXR1cm4gbmV3IEkoRCkudmVyaWZ5KEcsY2UsYi5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShWLEIscSl9aWYoImRzYSI9PT1xLnR5cGUpe2lmKCJkc2EiIT09WCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihjZSxHLGIpe3ZhciBEPWIuZGF0YS5wLEg9Yi5kYXRhLnEsTj1iLmRhdGEuZyxnPWIuZGF0YS5wdWJfa2V5LEM9ay5zaWduYXR1cmUuZGVjb2RlKGNlLCJkZXIiKSxTPUMucyx2PUMucjtqKFMsSCksaih2''@;'; put 'put ''LEgpO3ZhciBwPUsubW9udChEKSx3PVMuaW52bShIKTtyZXR1cm4gMD09PU4udG9SZWQocCkucmVkUG93KG5ldyBLKEcpLm11bCh3KS5tb2QoSCkpLmZyb21SZWQoKS5tdWwoZy50b1JlZChwKS5yZWRQb3codi5tdWwodykubW9kKEgpKS5mcm9tUmVkKCkpLm1vZChEKS5tb2QoSCkuY21wKHYp''@;'; put 'put ''fShWLEIscSl9aWYoInJzYSIhPT1YJiYiZWNkc2EvcnNhIiE9PVgpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtCPXouY29uY2F0KFtVLEJdKTtmb3IodmFyIGVlPXEubW9kdWx1cy5ieXRlTGVuZ3RoKCksdGU9WzFdLG9lPTA7Qi5sZW5ndGgrdGUubGVuZ3RoKzI8''@;'; put 'put ''ZWU7KXRlLnB1c2goMjU1KSxvZSsrO3RlLnB1c2goMCk7Zm9yKHZhciBzZT0tMTsrK3NlPEIubGVuZ3RoOyl0ZS5wdXNoKEJbc2VdKTt0ZT16LmZyb20odGUpO3ZhciBoZT1LLm1vbnQocS5tb2R1bHVzKTtWPShWPW5ldyBLKFYpLnRvUmVkKGhlKSkucmVkUG93KG5ldyBLKHEucHVibGljRXhw''@;'; put 'put ''b25lbnQpKSxWPXouZnJvbShWLmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciB1ZT1vZTw4PzE6MDtmb3IoZWU9TWF0aC5taW4oVi5sZW5ndGgsdGUubGVuZ3RoKSxWLmxlbmd0aCE9PXRlLmxlbmd0aCYmKHVlPTEpLHNlPS0xOysrc2U8ZWU7KXVlfD1WW3NlXV50ZVtzZV07cmV0dXJuIDA9PT11''@;'; put 'put ''ZX19LDcyOTU6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihLLEkpe2Zvcih2YXIgaz1NYXRoLm1pbihLLmxlbmd0aCxJLmxlbmd0aCksRT1uZXcgeihrKSxqPTA7ajxrOysrailFW2pdPUtbal1eSVtqXTtyZXR1cm4gRX19LDg3NjQ6KE0sTyxSKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUxMDgpO2NvbnN0IEs9Uig5NzQyKSxJPVIoNjQ1KSxrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtPLkJ1ZmZl''@;'; put 'put ''cj1WLE8uU2xvd0J1ZmZlcj1mdW5jdGlvbihNZSl7cmV0dXJuK01lIT1NZSYmKE1lPTApLFYuYWxsb2MoK01lKX0sTy5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25zdCBFPTIxNDc0ODM2NDc7ZnVuY3Rpb24gaihNZSl7aWYoTWU+RSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICIn''@;'; put 'put ''K01lKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTtjb25zdCBEZT1uZXcgVWludDhBcnJheShNZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihEZSxWLnByb3RvdHlwZSksRGV9ZnVuY3Rpb24gVihNZSxEZSx6ZSl7aWYoIm51bWJlciI9PXR5cGVvZiBNZSl7aWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBEZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gWChNZSl9cmV0dXJuIEIoTWUsRGUsemUpfWZ1bmN0aW9uIEIoTWUsRGUsemUpe2lmKCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgTWUpcmV0dXJuIGZ1bmN0aW9uKE10LEh0KXtpZigic3RyaW5nIj09dHlwZW9mIEh0JiYiIiE9PUh0fHwoSHQ9InV0ZjgiKSwhVi5pc0VuY29kaW5nKEh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0h0KTtjb25zdCBQdD0wfHRlKE10''@;'; put 'put ''LEh0KTtsZXQgb249aihQdCk7Y29uc3QgQ249b24ud3JpdGUoTXQsSHQpO3JldHVybiBDbiE9PVB0JiYob249b24uc2xpY2UoMCxDbikpLG9ufShNZSxEZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KE1lKSlyZXR1cm4gZnVuY3Rpb24oTXQpe2lmKFRlKE10LFVpbnQ4QXJyYXkpKXtjb25zdCBI''@;'; put 'put ''dD1uZXcgVWludDhBcnJheShNdCk7cmV0dXJuIHEoSHQuYnVmZmVyLEh0LmJ5dGVPZmZzZXQsSHQuYnl0ZUxlbmd0aCl9cmV0dXJuIFUoTXQpfShNZSk7aWYobnVsbD09TWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5n''@;'; put 'put ''LCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgTWUpO2lmKFRlKE1lLEFycmF5QnVmZmVyKXx8TWUmJlRlKE1lLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihU''@;'; put 'put ''ZShNZSxTaGFyZWRBcnJheUJ1ZmZlcil8fE1lJiZUZShNZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gcShNZSxEZSx6ZSk7aWYoIm51bWJlciI9PXR5cGVvZiBNZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBl''@;'; put 'put ''IG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtjb25zdCBpdD1NZS52YWx1ZU9mJiZNZS52YWx1ZU9mKCk7aWYobnVsbCE9aXQmJml0IT09TWUpcmV0dXJuIFYuZnJvbShpdCxEZSx6ZSk7Y29uc3QgdXQ9ZnVuY3Rpb24oTXQpe2lmKFYuaXNCdWZmZXIoTXQpKXtjb25zdCBIdD0wfGVl''@;'; put 'put ''KE10Lmxlbmd0aCksUHQ9aihIdCk7cmV0dXJuIDA9PT1QdC5sZW5ndGh8fE10LmNvcHkoUHQsMCwwLEh0KSxQdH1yZXR1cm4gdm9pZCAwIT09TXQubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgTXQubGVuZ3RofHxxZShNdC5sZW5ndGgpP2ooMCk6VShNdCk6IkJ1ZmZlciI9PT1NdC50eXBlJiZB''@;'; put 'put ''cnJheS5pc0FycmF5KE10LmRhdGEpP1UoTXQuZGF0YSk6dm9pZCAwfShNZSk7aWYodXQpcmV0dXJuIHV0O2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBNZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBWLmZyb20o''@;'; put 'put ''TWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksRGUsemUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZl''@;'; put 'put ''ZCB0eXBlICIrdHlwZW9mIE1lKX1mdW5jdGlvbiBZKE1lKXtpZigibnVtYmVyIiE9dHlwZW9mIE1lKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoTWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK01l''@;'; put 'put ''KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBYKE1lKXtyZXR1cm4gWShNZSksaihNZTwwPzA6MHxlZShNZSkpfWZ1bmN0aW9uIFUoTWUpe2NvbnN0IERlPU1lLmxlbmd0aDwwPzA6MHxlZShNZS5sZW5ndGgpLHplPWooRGUpO2ZvcihsZXQgaXQ9MDtpdDxEZTtp''@;'; put 'put ''dCs9MSl6ZVtpdF09MjU1Jk1lW2l0XTtyZXR1cm4gemV9ZnVuY3Rpb24gcShNZSxEZSx6ZSl7aWYoRGU8MHx8TWUuYnl0ZUxlbmd0aDxEZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoTWUuYnl0ZUxlbmd0aDxEZSsoemV8''@;'; put 'put ''fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgaXQ7cmV0dXJuIGl0PXZvaWQgMD09PURlJiZ2b2lkIDA9PT16ZT9uZXcgVWludDhBcnJheShNZSk6dm9pZCAwPT09emU/bmV3IFVpbnQ4QXJyYXkoTWUsRGUpOm5ldyBV''@;'; put 'put ''aW50OEFycmF5KE1lLERlLHplKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoaXQsVi5wcm90b3R5cGUpLGl0fWZ1bmN0aW9uIGVlKE1lKXtpZihNZT49RSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIr''@;'; put 'put ''RS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfE1lfWZ1bmN0aW9uIHRlKE1lLERlKXtpZihWLmlzQnVmZmVyKE1lKSlyZXR1cm4gTWUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhNZSl8fFRlKE1lLEFycmF5QnVmZmVyKSlyZXR1cm4gTWUuYnl0ZUxlbmd0aDtpZigic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIE1lKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBNZSk7Y29uc3QgemU9TWUubGVuZ3RoLGl0PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIWl0JiYwPT09emUpcmV0dXJuIDA7bGV0IHV0PSExO2Zvcig7Oylzd2l0Y2goRGUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHplO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFBl''@;'; put 'put ''KE1lKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKnplO2Nhc2UiaGV4IjpyZXR1cm4gemU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gYmUoTWUpLmxlbmd0aDtkZWZhdWx0OmlmKHV0KXJldHVybiBpdD8tMTpQZShN''@;'; put 'put ''ZSkubGVuZ3RoO0RlPSgiIitEZSkudG9Mb3dlckNhc2UoKSx1dD0hMH19ZnVuY3Rpb24gb2UoTWUsRGUsemUpe2xldCBpdD0hMTtpZigodm9pZCAwPT09RGV8fERlPDApJiYoRGU9MCksRGU+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09emV8fHplPnRoaXMubGVuZ3RoKSYmKHplPXRoaXMubGVu''@;'; put 'put ''Z3RoKSx6ZTw9MCl8fCh6ZT4+Pj0wKTw9KERlPj4+PTApKXJldHVybiIiO2ZvcihNZXx8KE1lPSJ1dGY4Iik7Oylzd2l0Y2goTWUpe2Nhc2UiaGV4IjpyZXR1cm4gcCh0aGlzLERlLHplKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBnKHRoaXMsRGUsemUpO2Nhc2UiYXNjaWkiOnJl''@;'; put 'put ''dHVybiBTKHRoaXMsRGUsemUpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHYodGhpcyxEZSx6ZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBOKHRoaXMsRGUsemUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gdyh0aGlz''@;'; put 'put ''LERlLHplKTtkZWZhdWx0OmlmKGl0KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrTWUpO01lPShNZSsiIikudG9Mb3dlckNhc2UoKSxpdD0hMH19ZnVuY3Rpb24gc2UoTWUsRGUsemUpe2NvbnN0IGl0PU1lW0RlXTtNZVtEZV09TWVbemVdLE1lW3plXT1pdH1mdW5j''@;'; put 'put ''dGlvbiBoZShNZSxEZSx6ZSxpdCx1dCl7aWYoMD09PU1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHplPyhpdD16ZSx6ZT0wKTp6ZT4yMTQ3NDgzNjQ3P3plPTIxNDc0ODM2NDc6emU8LTIxNDc0ODM2NDgmJih6ZT0tMjE0NzQ4MzY0OCkscWUoemU9K3plKSYmKHplPXV0''@;'; put 'put ''PzA6TWUubGVuZ3RoLTEpLHplPDAmJih6ZT1NZS5sZW5ndGgremUpLHplPj1NZS5sZW5ndGgpe2lmKHV0KXJldHVybi0xO3plPU1lLmxlbmd0aC0xfWVsc2UgaWYoemU8MCl7aWYoIXV0KXJldHVybi0xO3plPTB9aWYoInN0cmluZyI9PXR5cGVvZiBEZSYmKERlPVYuZnJvbShEZSxpdCkpLFYu''@;'; put 'put ''aXNCdWZmZXIoRGUpKXJldHVybiAwPT09RGUubGVuZ3RoPy0xOnVlKE1lLERlLHplLGl0LHV0KTtpZigibnVtYmVyIj09dHlwZW9mIERlKXJldHVybiBEZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP3V0P1VpbnQ4QXJyYXkucHJvdG90eXBl''@;'; put 'put ''LmluZGV4T2YuY2FsbChNZSxEZSx6ZSk6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChNZSxEZSx6ZSk6dWUoTWUsW0RlXSx6ZSxpdCx1dCk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gdWUo''@;'; put 'put ''TWUsRGUsemUsaXQsdXQpe2xldCBNdCxIdD0xLFB0PU1lLmxlbmd0aCxvbj1EZS5sZW5ndGg7aWYodm9pZCAwIT09aXQmJigidWNzMiI9PT0oaXQ9U3RyaW5nKGl0KS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PWl0fHwidXRmMTZsZSI9PT1pdHx8InV0Zi0xNmxlIj09PWl0KSl7aWYoTWUu''@;'; put 'put ''bGVuZ3RoPDJ8fERlLmxlbmd0aDwyKXJldHVybi0xO0h0PTIsUHQvPTIsb24vPTIsemUvPTJ9ZnVuY3Rpb24gQ24oVXQsYm4pe3JldHVybiAxPT09SHQ/VXRbYm5dOlV0LnJlYWRVSW50MTZCRShibipIdCl9aWYodXQpe2xldCBVdD0tMTtmb3IoTXQ9emU7TXQ8UHQ7TXQrKylpZihDbihNZSxN''@;'; put 'put ''dCk9PT1DbihEZSwtMT09PVV0PzA6TXQtVXQpKXtpZigtMT09PVV0JiYoVXQ9TXQpLE10LVV0KzE9PT1vbilyZXR1cm4gVXQqSHR9ZWxzZS0xIT09VXQmJihNdC09TXQtVXQpLFV0PS0xfWVsc2UgZm9yKHplK29uPlB0JiYoemU9UHQtb24pLE10PXplO010Pj0wO010LS0pe2xldCBVdD0hMDtm''@;'; put 'put ''b3IobGV0IGJuPTA7Ym48b247Ym4rKylpZihDbihNZSxNdCtibikhPT1DbihEZSxibikpe1V0PSExO2JyZWFrfWlmKFV0KXJldHVybiBNdH1yZXR1cm4tMX1mdW5jdGlvbiBjZShNZSxEZSx6ZSxpdCl7emU9TnVtYmVyKHplKXx8MDtjb25zdCB1dD1NZS5sZW5ndGgtemU7aXQ/KGl0PU51bWJl''@;'; put 'put ''cihpdCkpPnV0JiYoaXQ9dXQpOml0PXV0O2NvbnN0IE10PURlLmxlbmd0aDtsZXQgSHQ7Zm9yKGl0Pk10LzImJihpdD1NdC8yKSxIdD0wO0h0PGl0OysrSHQpe2NvbnN0IFB0PXBhcnNlSW50KERlLnN1YnN0cigyKkh0LDIpLDE2KTtpZihxZShQdCkpcmV0dXJuIEh0O01lW3plK0h0XT1QdH1y''@;'; put 'put ''ZXR1cm4gSHR9ZnVuY3Rpb24gRyhNZSxEZSx6ZSxpdCl7cmV0dXJuIEFlKFBlKERlLE1lLmxlbmd0aC16ZSksTWUsemUsaXQpfWZ1bmN0aW9uIGIoTWUsRGUsemUsaXQpe3JldHVybiBBZShmdW5jdGlvbih1dCl7Y29uc3QgTXQ9W107Zm9yKGxldCBIdD0wO0h0PHV0Lmxlbmd0aDsrK0h0KU10''@;'; put 'put ''LnB1c2goMjU1JnV0LmNoYXJDb2RlQXQoSHQpKTtyZXR1cm4gTXR9KERlKSxNZSx6ZSxpdCl9ZnVuY3Rpb24gRChNZSxEZSx6ZSxpdCl7cmV0dXJuIEFlKGJlKERlKSxNZSx6ZSxpdCl9ZnVuY3Rpb24gSChNZSxEZSx6ZSxpdCl7cmV0dXJuIEFlKGZ1bmN0aW9uKHV0LE10KXtsZXQgSHQsUHQs''@;'; put 'put ''b247Y29uc3QgQ249W107Zm9yKGxldCBVdD0wO1V0PHV0Lmxlbmd0aCYmISgoTXQtPTIpPDApOysrVXQpSHQ9dXQuY2hhckNvZGVBdChVdCksUHQ9SHQ+Pjgsb249SHQlMjU2LENuLnB1c2gob24pLENuLnB1c2goUHQpO3JldHVybiBDbn0oRGUsTWUubGVuZ3RoLXplKSxNZSx6ZSxpdCl9ZnVu''@;'; put 'put ''Y3Rpb24gTihNZSxEZSx6ZSl7cmV0dXJuIEsuZnJvbUJ5dGVBcnJheSgwPT09RGUmJnplPT09TWUubGVuZ3RoP01lOk1lLnNsaWNlKERlLHplKSl9ZnVuY3Rpb24gZyhNZSxEZSx6ZSl7emU9TWF0aC5taW4oTWUubGVuZ3RoLHplKTtjb25zdCBpdD1bXTtsZXQgdXQ9RGU7Zm9yKDt1dDx6ZTsp''@;'; put 'put ''e2NvbnN0IE10PU1lW3V0XTtsZXQgSHQ9bnVsbCxQdD1NdD4yMzk/NDpNdD4yMjM/MzpNdD4xOTE/MjoxO2lmKHV0K1B0PD16ZSl7bGV0IG9uLENuLFV0LGJuO3N3aXRjaChQdCl7Y2FzZSAxOk10PDEyOCYmKEh0PU10KTticmVhaztjYXNlIDI6b249TWVbdXQrMV0sMTI4PT0oMTkyJm9uKSYm''@;'; put 'put ''KGJuPSgzMSZNdCk8PDZ8NjMmb24sYm4+MTI3JiYoSHQ9Ym4pKTticmVhaztjYXNlIDM6b249TWVbdXQrMV0sQ249TWVbdXQrMl0sMTI4PT0oMTkyJm9uKSYmMTI4PT0oMTkyJkNuKSYmKGJuPSgxNSZNdCk8PDEyfCg2MyZvbik8PDZ8NjMmQ24sYm4+MjA0NyYmKGJuPDU1Mjk2fHxibj41NzM0''@;'; put 'put ''MykmJihIdD1ibikpO2JyZWFrO2Nhc2UgNDpvbj1NZVt1dCsxXSxDbj1NZVt1dCsyXSxVdD1NZVt1dCszXSwxMjg9PSgxOTImb24pJiYxMjg9PSgxOTImQ24pJiYxMjg9PSgxOTImVXQpJiYoYm49KDE1Jk10KTw8MTh8KDYzJm9uKTw8MTJ8KDYzJkNuKTw8Nnw2MyZVdCxibj42NTUzNSYmYm48''@;'; put 'put ''MTExNDExMiYmKEh0PWJuKSl9fW51bGw9PT1IdD8oSHQ9NjU1MzMsUHQ9MSk6SHQ+NjU1MzUmJihIdC09NjU1MzYsaXQucHVzaChIdD4+PjEwJjEwMjN8NTUyOTYpLEh0PTU2MzIwfDEwMjMmSHQpLGl0LnB1c2goSHQpLHV0Kz1QdH1yZXR1cm4gZnVuY3Rpb24oTXQpe2NvbnN0IEh0PU10Lmxl''@;'; put 'put ''bmd0aDtpZihIdDw9QylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsTXQpO2xldCBQdD0iIixvbj0wO2Zvcig7b248SHQ7KVB0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxNdC5zbGljZShvbixvbis9QykpO3JldHVybiBQdH0oaXQpfU8ua01heExl''@;'; put 'put ''bmd0aD1FLChWLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXt0cnl7Y29uc3QgTWU9bmV3IFVpbnQ4QXJyYXkoMSksRGU9e2ZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoRGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5z''@;'; put 'put ''ZXRQcm90b3R5cGVPZihNZSxEZSksNDI9PT1NZS5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpfHx2b2lkIDA9PT16fHwiZnVuY3Rpb24iIT10eXBlb2Ygei5lcnJvcnx8ei5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlz''@;'; put 'put ''IHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKFYuaXNC''@;'; put 'put ''dWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihWLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksVi5wb29sU2l6ZT04''@;'; put 'put ''MTkyLFYuZnJvbT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIEIoTWUsRGUsemUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoVi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihWLFVpbnQ4QXJyYXkpLFYuYWxsb2M9ZnVuY3Rpb24oTWUsRGUs''@;'; put 'put ''emUpe3JldHVybiB1dD1EZSxNdD16ZSxZKGl0PU1lKSxpdDw9MD9qKGl0KTp2b2lkIDAhPT11dD8ic3RyaW5nIj09dHlwZW9mIE10P2ooaXQpLmZpbGwodXQsTXQpOmooaXQpLmZpbGwodXQpOmooaXQpO3ZhciBpdCx1dCxNdH0sVi5hbGxvY1Vuc2FmZT1mdW5jdGlvbihNZSl7cmV0dXJuIFgo''@;'; put 'put ''TWUpfSxWLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihNZSl7cmV0dXJuIFgoTWUpfSxWLmlzQnVmZmVyPWZ1bmN0aW9uKE1lKXtyZXR1cm4gbnVsbCE9TWUmJiEwPT09TWUuX2lzQnVmZmVyJiZNZSE9PVYucHJvdG90eXBlfSxWLmNvbXBhcmU9ZnVuY3Rpb24oTWUsRGUpe2lmKFRlKE1lLFVp''@;'; put 'put ''bnQ4QXJyYXkpJiYoTWU9Vi5mcm9tKE1lLE1lLm9mZnNldCxNZS5ieXRlTGVuZ3RoKSksVGUoRGUsVWludDhBcnJheSkmJihEZT1WLmZyb20oRGUsRGUub2Zmc2V0LERlLmJ5dGVMZW5ndGgpKSwhVi5pc0J1ZmZlcihNZSl8fCFWLmlzQnVmZmVyKERlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdU''@;'; put 'put ''aGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihNZT09PURlKXJldHVybiAwO2xldCB6ZT1NZS5sZW5ndGgsaXQ9RGUubGVuZ3RoO2ZvcihsZXQgdXQ9MCxNdD1NYXRoLm1pbih6ZSxpdCk7dXQ8TXQ7Kyt1dClp''@;'; put 'put ''ZihNZVt1dF0hPT1EZVt1dF0pe3plPU1lW3V0XSxpdD1EZVt1dF07YnJlYWt9cmV0dXJuIHplPGl0Py0xOml0PHplPzE6MH0sVi5pc0VuY29kaW5nPWZ1bmN0aW9uKE1lKXtzd2l0Y2goU3RyaW5nKE1lKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04Ijpj''@;'; put 'put ''YXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LFYuY29uY2F0PWZ1bmN0aW9uKE1lLERlKXtpZighQXJyYXku''@;'; put 'put ''aXNBcnJheShNZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1NZS5sZW5ndGgpcmV0dXJuIFYuYWxsb2MoMCk7bGV0IHplO2lmKHZvaWQgMD09PURlKWZvcihEZT0wLHplPTA7emU8TWUubGVuZ3RoOysr''@;'; put 'put ''emUpRGUrPU1lW3plXS5sZW5ndGg7Y29uc3QgaXQ9Vi5hbGxvY1Vuc2FmZShEZSk7bGV0IHV0PTA7Zm9yKHplPTA7emU8TWUubGVuZ3RoOysremUpe2xldCBNdD1NZVt6ZV07aWYoVGUoTXQsVWludDhBcnJheSkpdXQrTXQubGVuZ3RoPml0Lmxlbmd0aD8oVi5pc0J1ZmZlcihNdCl8fChNdD1W''@;'; put 'put ''LmZyb20oTXQpKSxNdC5jb3B5KGl0LHV0KSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoaXQsTXQsdXQpO2Vsc2V7aWYoIVYuaXNCdWZmZXIoTXQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtNdC5jb3B5''@;'; put 'put ''KGl0LHV0KX11dCs9TXQubGVuZ3RofXJldHVybiBpdH0sVi5ieXRlTGVuZ3RoPXRlLFYucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxWLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXtjb25zdCBNZT10aGlzLmxlbmd0aDtpZihNZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIg''@;'; put 'put ''c2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2ZvcihsZXQgRGU9MDtEZTxNZTtEZSs9MilzZSh0aGlzLERlLERlKzEpO3JldHVybiB0aGlzfSxWLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtjb25zdCBNZT10aGlzLmxlbmd0aDtpZihNZSU0IT0wKXRocm93IG5ldyBS''@;'; put 'put ''YW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2ZvcihsZXQgRGU9MDtEZTxNZTtEZSs9NClzZSh0aGlzLERlLERlKzMpLHNlKHRoaXMsRGUrMSxEZSsyKTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7Y29uc3Qg''@;'; put 'put ''TWU9dGhpcy5sZW5ndGg7aWYoTWUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IobGV0IERlPTA7RGU8TWU7RGUrPTgpc2UodGhpcyxEZSxEZSs3KSxzZSh0aGlzLERlKzEsRGUrNiksc2UodGhpcyxEZSsy''@;'; put 'put ''LERlKzUpLHNlKHRoaXMsRGUrMyxEZSs0KTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9Vi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtjb25zdCBNZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PU1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2codGhpcyww''@;'; put 'put ''LE1lKTpvZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFYucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihNZSl7aWYoIVYuaXNCdWZmZXIoTWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PU1lfHwwPT09Vi5jb21wYXJlKHRo''@;'; put 'put ''aXMsTWUpfSxWLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7bGV0IE1lPSIiO2NvbnN0IERlPU8uSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIE1lPXRoaXMudG9TdHJpbmcoImhleCIsMCxEZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5EZSYmKE1l''@;'; put 'put ''Kz0iIC4uLiAiKSwiPEJ1ZmZlciAiK01lKyI+In0sayYmKFYucHJvdG90eXBlW2tdPVYucHJvdG90eXBlLmluc3BlY3QpLFYucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oTWUsRGUsemUsaXQsdXQpe2lmKFRlKE1lLFVpbnQ4QXJyYXkpJiYoTWU9Vi5mcm9tKE1lLE1lLm9mZnNldCxNZS5i''@;'; put 'put ''eXRlTGVuZ3RoKSksIVYuaXNCdWZmZXIoTWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIE1lKTtpZih2b2lkIDA9PT1EZSYmKERlPTApLHZv''@;'; put 'put ''aWQgMD09PXplJiYoemU9TWU/TWUubGVuZ3RoOjApLHZvaWQgMD09PWl0JiYoaXQ9MCksdm9pZCAwPT09dXQmJih1dD10aGlzLmxlbmd0aCksRGU8MHx8emU+TWUubGVuZ3RofHxpdDwwfHx1dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7''@;'; put 'put ''aWYoaXQ+PXV0JiZEZT49emUpcmV0dXJuIDA7aWYoaXQ+PXV0KXJldHVybi0xO2lmKERlPj16ZSlyZXR1cm4gMTtpZih0aGlzPT09TWUpcmV0dXJuIDA7bGV0IE10PSh1dD4+Pj0wKS0oaXQ+Pj49MCksSHQ9KHplPj4+PTApLShEZT4+Pj0wKTtjb25zdCBQdD1NYXRoLm1pbihNdCxIdCksb249''@;'; put 'put ''dGhpcy5zbGljZShpdCx1dCksQ249TWUuc2xpY2UoRGUsemUpO2ZvcihsZXQgVXQ9MDtVdDxQdDsrK1V0KWlmKG9uW1V0XSE9PUNuW1V0XSl7TXQ9b25bVXRdLEh0PUNuW1V0XTticmVha31yZXR1cm4gTXQ8SHQ/LTE6SHQ8TXQ/MTowfSxWLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihN''@;'; put 'put ''ZSxEZSx6ZSl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoTWUsRGUsemUpfSxWLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gaGUodGhpcyxNZSxEZSx6ZSwhMCl9LFYucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gaGUo''@;'; put 'put ''dGhpcyxNZSxEZSx6ZSwhMSl9LFYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKE1lLERlLHplLGl0KXtpZih2b2lkIDA9PT1EZSlpdD0idXRmOCIsemU9dGhpcy5sZW5ndGgsRGU9MDtlbHNlIGlmKHZvaWQgMD09PXplJiYic3RyaW5nIj09dHlwZW9mIERlKWl0PURlLHplPXRoaXMubGVuZ3Ro''@;'; put 'put ''LERlPTA7ZWxzZXtpZighaXNGaW5pdGUoRGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtEZT4+Pj0wLGlzRmluaXRlKHplKT8oemU+Pj49MCx2b2lkIDA9PT1pdCYmKGl0''@;'; put 'put ''PSJ1dGY4IikpOihpdD16ZSx6ZT12b2lkIDApfWNvbnN0IHV0PXRoaXMubGVuZ3RoLURlO2lmKCh2b2lkIDA9PT16ZXx8emU+dXQpJiYoemU9dXQpLE1lLmxlbmd0aD4wJiYoemU8MHx8RGU8MCl8fERlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRl''@;'; put 'put ''IG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO2l0fHwoaXQ9InV0ZjgiKTtsZXQgTXQ9ITE7Zm9yKDs7KXN3aXRjaChpdCl7Y2FzZSJoZXgiOnJldHVybiBjZSh0aGlzLE1lLERlLHplKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBHKHRoaXMsTWUsRGUsemUpO2Nhc2UiYXNjaWkiOmNh''@;'; put 'put ''c2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGIodGhpcyxNZSxEZSx6ZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBEKHRoaXMsTWUsRGUsemUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gSCh0aGlzLE1lLERlLHplKTtkZWZh''@;'; put 'put ''dWx0OmlmKE10KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraXQpO2l0PSgiIitpdCkudG9Mb3dlckNhc2UoKSxNdD0hMH19LFYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNl''@;'; put 'put ''LmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07Y29uc3QgQz00MDk2O2Z1bmN0aW9uIFMoTWUsRGUsemUpe2xldCBpdD0iIjt6ZT1NYXRoLm1pbihNZS5sZW5ndGgsemUpO2ZvcihsZXQgdXQ9RGU7dXQ8emU7Kyt1dClpdCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmTWVbdXRdKTtyZXR1cm4g''@;'; put 'put ''aXR9ZnVuY3Rpb24gdihNZSxEZSx6ZSl7bGV0IGl0PSIiO3plPU1hdGgubWluKE1lLmxlbmd0aCx6ZSk7Zm9yKGxldCB1dD1EZTt1dDx6ZTsrK3V0KWl0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKE1lW3V0XSk7cmV0dXJuIGl0fWZ1bmN0aW9uIHAoTWUsRGUsemUpe2NvbnN0IGl0PU1lLmxlbmd0''@;'; put 'put ''aDsoIURlfHxEZTwwKSYmKERlPTApLCghemV8fHplPDB8fHplPml0KSYmKHplPWl0KTtsZXQgdXQ9IiI7Zm9yKGxldCBNdD1EZTtNdDx6ZTsrK010KXV0Kz1YZVtNZVtNdF1dO3JldHVybiB1dH1mdW5jdGlvbiB3KE1lLERlLHplKXtjb25zdCBpdD1NZS5zbGljZShEZSx6ZSk7bGV0IHV0PSIi''@;'; put 'put ''O2ZvcihsZXQgTXQ9MDtNdDxpdC5sZW5ndGgtMTtNdCs9Mil1dCs9U3RyaW5nLmZyb21DaGFyQ29kZShpdFtNdF0rMjU2Kml0W010KzFdKTtyZXR1cm4gdXR9ZnVuY3Rpb24gSihNZSxEZSx6ZSl7aWYoTWUlMSE9MHx8TWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1''@;'; put 'put ''aW50Iik7aWYoTWUrRGU+emUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBuZShNZSxEZSx6ZSxpdCx1dCxNdCl7aWYoIVYuaXNCdWZmZXIoTWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3Vt''@;'; put 'put ''ZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihEZT51dHx8RGU8TXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHplK2l0Pk1lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdl''@;'; put 'put ''Iil9ZnVuY3Rpb24gZGUoTWUsRGUsemUsaXQsdXQpe0tlKERlLGl0LHV0LE1lLHplLDcpO2xldCBNdD1OdW1iZXIoRGUmQmlnSW50KDQyOTQ5NjcyOTUpKTtNZVt6ZSsrXT1NdCxNdD4+PTgsTWVbemUrK109TXQsTXQ+Pj04LE1lW3plKytdPU10LE10Pj49OCxNZVt6ZSsrXT1NdDtsZXQgSHQ9''@;'; put 'put ''TnVtYmVyKERlPj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIE1lW3plKytdPUh0LEh0Pj49OCxNZVt6ZSsrXT1IdCxIdD4+PTgsTWVbemUrK109SHQsSHQ+Pj04LE1lW3plKytdPUh0LHplfWZ1bmN0aW9uIGZlKE1lLERlLHplLGl0LHV0KXtLZShEZSxpdCx1dCxNZSx6''@;'; put 'put ''ZSw3KTtsZXQgTXQ9TnVtYmVyKERlJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7TWVbemUrN109TXQsTXQ+Pj04LE1lW3plKzZdPU10LE10Pj49OCxNZVt6ZSs1XT1NdCxNdD4+PTgsTWVbemUrNF09TXQ7bGV0IEh0PU51bWJlcihEZT4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVy''@;'; put 'put ''biBNZVt6ZSszXT1IdCxIdD4+PTgsTWVbemUrMl09SHQsSHQ+Pj04LE1lW3plKzFdPUh0LEh0Pj49OCxNZVt6ZV09SHQsemUrOH1mdW5jdGlvbiB4ZShNZSxEZSx6ZSxpdCx1dCxNdCl7aWYoemUraXQ+TWUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2Ui''@;'; put 'put ''KTtpZih6ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBMZShNZSxEZSx6ZSxpdCx1dCl7cmV0dXJuIERlPStEZSx6ZT4+Pj0wLHV0fHx4ZShNZSwwLHplLDQpLEkud3JpdGUoTWUsRGUsemUsaXQsMjMsNCksemUrNH1mdW5jdGlvbiBGZShN''@;'; put 'put ''ZSxEZSx6ZSxpdCx1dCl7cmV0dXJuIERlPStEZSx6ZT4+Pj0wLHV0fHx4ZShNZSwwLHplLDgpLEkud3JpdGUoTWUsRGUsemUsaXQsNTIsOCksemUrOH1WLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihNZSxEZSl7Y29uc3QgemU9dGhpcy5sZW5ndGg7KE1lPX5+TWUpPDA/KE1lKz16ZSk8MCYm''@;'; put 'put ''KE1lPTApOk1lPnplJiYoTWU9emUpLChEZT12b2lkIDA9PT1EZT96ZTp+fkRlKTwwPyhEZSs9emUpPDAmJihEZT0wKTpEZT56ZSYmKERlPXplKSxEZTxNZSYmKERlPU1lKTtjb25zdCBpdD10aGlzLnN1YmFycmF5KE1lLERlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGl0LFYucHJv''@;'; put 'put ''dG90eXBlKSxpdH0sVi5wcm90b3R5cGUucmVhZFVpbnRMRT1WLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKE1lLERlLHplKXtNZT4+Pj0wLERlPj4+PTAsemV8fEooTWUsRGUsdGhpcy5sZW5ndGgpO2xldCBpdD10aGlzW01lXSx1dD0xLE10PTA7Zm9yKDsrK010PERlJiYodXQqPTI1''@;'; put 'put ''Nik7KWl0Kz10aGlzW01lK010XSp1dDtyZXR1cm4gaXR9LFYucHJvdG90eXBlLnJlYWRVaW50QkU9Vi5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihNZSxEZSx6ZSl7TWU+Pj49MCxEZT4+Pj0wLHplfHxKKE1lLERlLHRoaXMubGVuZ3RoKTtsZXQgaXQ9dGhpc1tNZSstLURlXSx1dD0x''@;'; put 'put ''O2Zvcig7RGU+MCYmKHV0Kj0yNTYpOylpdCs9dGhpc1tNZSstLURlXSp1dDtyZXR1cm4gaXR9LFYucHJvdG90eXBlLnJlYWRVaW50OD1WLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDEsdGhpcy5sZW5ndGgpLHRoaXNbTWVdfSxW''@;'; put 'put ''LnByb3RvdHlwZS5yZWFkVWludDE2TEU9Vi5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSwyLHRoaXMubGVuZ3RoKSx0aGlzW01lXXx0aGlzW01lKzFdPDw4fSxWLnByb3RvdHlwZS5yZWFkVWludDE2QkU9Vi5wcm90b3R5cGUu''@;'; put 'put ''cmVhZFVJbnQxNkJFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSwyLHRoaXMubGVuZ3RoKSx0aGlzW01lXTw8OHx0aGlzW01lKzFdfSxWLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Vi5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4g''@;'; put 'put ''TWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tNZV18dGhpc1tNZSsxXTw8OHx0aGlzW01lKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tNZSszXX0sVi5wcm90b3R5cGUucmVhZFVpbnQzMkJFPVYucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJu''@;'; put 'put ''IE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tNZV0rKHRoaXNbTWUrMV08PDE2fHRoaXNbTWUrMl08PDh8dGhpc1tNZSszXSl9LFYucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT1VZShmdW5jdGlvbihNZSl7WWUoTWU+Pj49MCwib2Zmc2V0Iik7Y29uc3Qg''@;'; put 'put ''RGU9dGhpc1tNZV0semU9dGhpc1tNZSs3XTt2b2lkIDAhPT1EZSYmdm9pZCAwIT09emV8fEplKE1lLHRoaXMubGVuZ3RoLTgpO2NvbnN0IGl0PURlKzI1Nip0aGlzWysrTWVdKzY1NTM2KnRoaXNbKytNZV0rdGhpc1srK01lXSoyKioyNCx1dD10aGlzWysrTWVdKzI1Nip0aGlzWysrTWVdKzY1''@;'; put 'put ''NTM2KnRoaXNbKytNZV0remUqMioqMjQ7cmV0dXJuIEJpZ0ludChpdCkrKEJpZ0ludCh1dCk8PEJpZ0ludCgzMikpfSksVi5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFPVVlKGZ1bmN0aW9uKE1lKXtZZShNZT4+Pj0wLCJvZmZzZXQiKTtjb25zdCBEZT10aGlzW01lXSx6ZT10aGlzW01lKzdd''@;'; put 'put ''O3ZvaWQgMCE9PURlJiZ2b2lkIDAhPT16ZXx8SmUoTWUsdGhpcy5sZW5ndGgtOCk7Y29uc3QgaXQ9RGUqMioqMjQrNjU1MzYqdGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt0aGlzWysrTWVdLHV0PXRoaXNbKytNZV0qMioqMjQrNjU1MzYqdGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt6ZTty''@;'; put 'put ''ZXR1cm4oQmlnSW50KGl0KTw8QmlnSW50KDMyKSkrQmlnSW50KHV0KX0pLFYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihNZSxEZSx6ZSl7TWU+Pj49MCxEZT4+Pj0wLHplfHxKKE1lLERlLHRoaXMubGVuZ3RoKTtsZXQgaXQ9dGhpc1tNZV0sdXQ9MSxNdD0wO2Zvcig7KytNdDxEZSYm''@;'; put 'put ''KHV0Kj0yNTYpOylpdCs9dGhpc1tNZStNdF0qdXQ7cmV0dXJuIHV0Kj0xMjgsaXQ+PXV0JiYoaXQtPU1hdGgucG93KDIsOCpEZSkpLGl0fSxWLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oTWUsRGUsemUpe01lPj4+PTAsRGU+Pj49MCx6ZXx8SihNZSxEZSx0aGlzLmxlbmd0aCk7bGV0''@;'; put 'put ''IGl0PURlLHV0PTEsTXQ9dGhpc1tNZSstLWl0XTtmb3IoO2l0PjAmJih1dCo9MjU2KTspTXQrPXRoaXNbTWUrLS1pdF0qdXQ7cmV0dXJuIHV0Kj0xMjgsTXQ+PXV0JiYoTXQtPU1hdGgucG93KDIsOCpEZSkpLE10fSxWLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihNZSxEZSl7cmV0dXJu''@;'; put 'put ''IE1lPj4+PTAsRGV8fEooTWUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbTWVdPy0xKigyNTUtdGhpc1tNZV0rMSk6dGhpc1tNZV19LFYucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKE1lLERlKXtNZT4+Pj0wLERlfHxKKE1lLDIsdGhpcy5sZW5ndGgpO2NvbnN0IHplPXRoaXNbTWVd''@;'; put 'put ''fHRoaXNbTWUrMV08PDg7cmV0dXJuIDMyNzY4JnplPzQyOTQ5MDE3NjB8emU6emV9LFYucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKE1lLERlKXtNZT4+Pj0wLERlfHxKKE1lLDIsdGhpcy5sZW5ndGgpO2NvbnN0IHplPXRoaXNbTWUrMV18dGhpc1tNZV08PDg7cmV0dXJuIDMyNzY4''@;'; put 'put ''JnplPzQyOTQ5MDE3NjB8emU6emV9LFYucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSx0aGlzW01lXXx0aGlzW01lKzFdPDw4fHRoaXNbTWUrMl08PDE2fHRoaXNbTWUrM108PDI0fSxWLnByb3RvdHlw''@;'; put 'put ''ZS5yZWFkSW50MzJCRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksdGhpc1tNZV08PDI0fHRoaXNbTWUrMV08PDE2fHRoaXNbTWUrMl08PDh8dGhpc1tNZSszXX0sVi5wcm90b3R5cGUucmVhZEJpZ0ludDY0TEU9VWUoZnVuY3Rpb24oTWUp''@;'; put 'put ''e1llKE1lPj4+PTAsIm9mZnNldCIpO2NvbnN0IERlPXRoaXNbTWVdLHplPXRoaXNbTWUrN107cmV0dXJuIHZvaWQgMCE9PURlJiZ2b2lkIDAhPT16ZXx8SmUoTWUsdGhpcy5sZW5ndGgtOCksKEJpZ0ludCh0aGlzW01lKzRdKzI1Nip0aGlzW01lKzVdKzY1NTM2KnRoaXNbTWUrNl0rKHplPDwy''@;'; put 'put ''NCkpPDxCaWdJbnQoMzIpKStCaWdJbnQoRGUrMjU2KnRoaXNbKytNZV0rNjU1MzYqdGhpc1srK01lXSsxNjc3NzIxNip0aGlzWysrTWVdKX0pLFYucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPVVlKGZ1bmN0aW9uKE1lKXtZZShNZT4+Pj0wLCJvZmZzZXQiKTtjb25zdCBEZT10aGlzW01lXSx6''@;'; put 'put ''ZT10aGlzW01lKzddO3ZvaWQgMCE9PURlJiZ2b2lkIDAhPT16ZXx8SmUoTWUsdGhpcy5sZW5ndGgtOCk7Y29uc3QgaXQ9KERlPDwyNCkrNjU1MzYqdGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt0aGlzWysrTWVdO3JldHVybihCaWdJbnQoaXQpPDxCaWdJbnQoMzIpKStCaWdJbnQoMTY3Nzcy''@;'; put 'put ''MTYqdGhpc1srK01lXSs2NTUzNip0aGlzWysrTWVdKzI1Nip0aGlzWysrTWVdK3plKX0pLFYucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSxJLnJlYWQodGhpcyxNZSwhMCwyMyw0KX0sVi5wcm90b3R5''@;'; put 'put ''cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDQsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLE1lLCExLDIzLDQpfSxWLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDgsdGhp''@;'; put 'put ''cy5sZW5ndGgpLEkucmVhZCh0aGlzLE1lLCEwLDUyLDgpfSxWLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDgsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLE1lLCExLDUyLDgpfSxWLnByb3RvdHlwZS53cml0ZVVpbnRMRT1W''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihNZSxEZSx6ZSxpdCl7TWU9K01lLERlPj4+PTAsemU+Pj49MCwhaXQmJm5lKHRoaXMsTWUsRGUsemUsTWF0aC5wb3coMiw4KnplKS0xLDApO2xldCB1dD0xLE10PTA7Zm9yKHRoaXNbRGVdPTI1NSZNZTsrK010PHplJiYodXQqPTI1Nik7''@;'; put 'put ''KXRoaXNbRGUrTXRdPU1lL3V0JjI1NTtyZXR1cm4gRGUremV9LFYucHJvdG90eXBlLndyaXRlVWludEJFPVYucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKE1lLERlLHplLGl0KXtNZT0rTWUsRGU+Pj49MCx6ZT4+Pj0wLCFpdCYmbmUodGhpcyxNZSxEZSx6ZSxNYXRoLnBvdygyLDgq''@;'; put 'put ''emUpLTEsMCk7bGV0IHV0PXplLTEsTXQ9MTtmb3IodGhpc1tEZSt1dF09MjU1Jk1lOy0tdXQ+PTAmJihNdCo9MjU2KTspdGhpc1tEZSt1dF09TWUvTXQmMjU1O3JldHVybiBEZSt6ZX0sVi5wcm90b3R5cGUud3JpdGVVaW50OD1WLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKE1lLERl''@;'; put 'put ''LHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsMSwyNTUsMCksdGhpc1tEZV09MjU1Jk1lLERlKzF9LFYucHJvdG90eXBlLndyaXRlVWludDE2TEU9Vi5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+''@;'; put 'put ''Pj0wLHplfHxuZSh0aGlzLE1lLERlLDIsNjU1MzUsMCksdGhpc1tEZV09MjU1Jk1lLHRoaXNbRGUrMV09TWU+Pj44LERlKzJ9LFYucHJvdG90eXBlLndyaXRlVWludDE2QkU9Vi5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0w''@;'; put 'put ''LHplfHxuZSh0aGlzLE1lLERlLDIsNjU1MzUsMCksdGhpc1tEZV09TWU+Pj44LHRoaXNbRGUrMV09MjU1Jk1lLERlKzJ9LFYucHJvdG90eXBlLndyaXRlVWludDMyTEU9Vi5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHpl''@;'; put 'put ''fHxuZSh0aGlzLE1lLERlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0RlKzNdPU1lPj4+MjQsdGhpc1tEZSsyXT1NZT4+PjE2LHRoaXNbRGUrMV09TWU+Pj44LHRoaXNbRGVdPTI1NSZNZSxEZSs0fSxWLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPVYucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVu''@;'; put 'put ''Y3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tEZV09TWU+Pj4yNCx0aGlzW0RlKzFdPU1lPj4+MTYsdGhpc1tEZSsyXT1NZT4+PjgsdGhpc1tEZSszXT0yNTUmTWUsRGUrNH0sVi5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVCaWdVSW50NjRMRT1VZShmdW5jdGlvbihNZSxEZT0wKXtyZXR1cm4gZGUodGhpcyxNZSxEZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxWLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPVVlKGZ1bmN0aW9uKE1lLERlPTApe3JldHVybiBmZSh0aGlzLE1l''@;'; put 'put ''LERlLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLFYucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oTWUsRGUsemUsaXQpe2lmKE1lPStNZSxEZT4+Pj0wLCFpdCl7Y29uc3QgUHQ9TWF0aC5wb3coMiw4KnplLTEpO25lKHRoaXMsTWUsRGUsemUsUHQtMSwt''@;'; put 'put ''UHQpfWxldCB1dD0wLE10PTEsSHQ9MDtmb3IodGhpc1tEZV09MjU1Jk1lOysrdXQ8emUmJihNdCo9MjU2KTspTWU8MCYmMD09PUh0JiYwIT09dGhpc1tEZSt1dC0xXSYmKEh0PTEpLHRoaXNbRGUrdXRdPShNZS9NdD4+MCktSHQmMjU1O3JldHVybiBEZSt6ZX0sVi5wcm90b3R5cGUud3JpdGVJ''@;'; put 'put ''bnRCRT1mdW5jdGlvbihNZSxEZSx6ZSxpdCl7aWYoTWU9K01lLERlPj4+PTAsIWl0KXtjb25zdCBQdD1NYXRoLnBvdygyLDgqemUtMSk7bmUodGhpcyxNZSxEZSx6ZSxQdC0xLC1QdCl9bGV0IHV0PXplLTEsTXQ9MSxIdD0wO2Zvcih0aGlzW0RlK3V0XT0yNTUmTWU7LS11dD49MCYmKE10Kj0y''@;'; put 'put ''NTYpOylNZTwwJiYwPT09SHQmJjAhPT10aGlzW0RlK3V0KzFdJiYoSHQ9MSksdGhpc1tEZSt1dF09KE1lL010Pj4wKS1IdCYyNTU7cmV0dXJuIERlK3plfSxWLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxN''@;'; put 'put ''ZSxEZSwxLDEyNywtMTI4KSxNZTwwJiYoTWU9MjU1K01lKzEpLHRoaXNbRGVdPTI1NSZNZSxEZSsxfSxWLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tE''@;'; put 'put ''ZV09MjU1Jk1lLHRoaXNbRGUrMV09TWU+Pj44LERlKzJ9LFYucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0RlXT1NZT4+PjgsdGhpc1tEZSsxXT0yNTUm''@;'; put 'put ''TWUsRGUrMn0sVi5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW0RlXT0yNTUmTWUsdGhpc1tEZSsxXT1NZT4+PjgsdGhpc1tEZSsyXT1N''@;'; put 'put ''ZT4+PjE2LHRoaXNbRGUrM109TWU+Pj4yNCxEZSs0fSxWLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLE1lPDAmJihNZT00Mjk0OTY3Mjk1K01l''@;'; put 'put ''KzEpLHRoaXNbRGVdPU1lPj4+MjQsdGhpc1tEZSsxXT1NZT4+PjE2LHRoaXNbRGUrMl09TWU+Pj44LHRoaXNbRGUrM109MjU1Jk1lLERlKzR9LFYucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRT1VZShmdW5jdGlvbihNZSxEZT0wKXtyZXR1cm4gZGUodGhpcyxNZSxEZSwtQmlnSW50KCIweDgw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiKSxCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKX0pLFYucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRT1VZShmdW5jdGlvbihNZSxEZT0wKXtyZXR1cm4gZmUodGhpcyxNZSxEZSwtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSxCaWdJbnQoIjB4N2ZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZiIpKX0pLFYucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIExlKHRoaXMsTWUsRGUsITAsemUpfSxWLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBMZSh0aGlzLE1lLERlLCExLHplKX0sVi5w''@;'; put 'put ''cm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIEZlKHRoaXMsTWUsRGUsITAsemUpfSxWLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gRmUodGhpcyxNZSxEZSwhMSx6ZSl9LFYucHJvdG90eXBlLmNvcHk9ZnVu''@;'; put 'put ''Y3Rpb24oTWUsRGUsemUsaXQpe2lmKCFWLmlzQnVmZmVyKE1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZih6ZXx8KHplPTApLGl0fHwwPT09aXR8fChpdD10aGlzLmxlbmd0aCksRGU+PU1lLmxlbmd0aCYmKERlPU1lLmxlbmd0aCksRGV8''@;'; put 'put ''fChEZT0wKSxpdD4wJiZpdDx6ZSYmKGl0PXplKSxpdD09PXplfHwwPT09TWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoRGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHplPDB8fHplPj10aGlzLmxlbmd0aCl0aHJv''@;'; put 'put ''dyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoaXQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtpdD50aGlzLmxlbmd0aCYmKGl0PXRoaXMubGVuZ3RoKSxNZS5sZW5ndGgtRGU8aXQtemUmJihpdD1NZS5sZW5ndGgtRGUr''@;'; put 'put ''emUpO2NvbnN0IHV0PWl0LXplO3JldHVybiB0aGlzPT09TWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihEZSx6ZSxpdCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoTWUsdGhpcy5zdWJhcnJheSh6ZSxp''@;'; put 'put ''dCksRGUpLHV0fSxWLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKE1lLERlLHplLGl0KXtpZigic3RyaW5nIj09dHlwZW9mIE1lKXtpZigic3RyaW5nIj09dHlwZW9mIERlPyhpdD1EZSxEZT0wLHplPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHplJiYoaXQ9emUsemU9dGhpcy5sZW5n''@;'; put 'put ''dGgpLHZvaWQgMCE9PWl0JiYic3RyaW5nIiE9dHlwZW9mIGl0KXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIGl0JiYhVi5pc0VuY29kaW5nKGl0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5n''@;'; put 'put ''OiAiK2l0KTtpZigxPT09TWUubGVuZ3RoKXtjb25zdCBNdD1NZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1pdCYmTXQ8MTI4fHwibGF0aW4xIj09PWl0KSYmKE1lPU10KX19ZWxzZSJudW1iZXIiPT10eXBlb2YgTWU/TWUmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiBNZSYmKE1lPU51bWJlcihN''@;'; put 'put ''ZSkpO2lmKERlPDB8fHRoaXMubGVuZ3RoPERlfHx0aGlzLmxlbmd0aDx6ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoemU8PURlKXJldHVybiB0aGlzO2xldCB1dDtpZihEZT4+Pj0wLHplPXZvaWQgMD09PXplP3RoaXMubGVuZ3RoOnplPj4+MCxNZXx8''@;'; put 'put ''KE1lPTApLCJudW1iZXIiPT10eXBlb2YgTWUpZm9yKHV0PURlO3V0PHplOysrdXQpdGhpc1t1dF09TWU7ZWxzZXtjb25zdCBNdD1WLmlzQnVmZmVyKE1lKT9NZTpWLmZyb20oTWUsaXQpLEh0PU10Lmxlbmd0aDtpZigwPT09SHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK01l''@;'; put 'put ''KyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IodXQ9MDt1dDx6ZS1EZTsrK3V0KXRoaXNbdXQrRGVdPU10W3V0JUh0XX1yZXR1cm4gdGhpc307Y29uc3QgT2U9e307ZnVuY3Rpb24gQmUoTWUsRGUsemUpe09lW01lXT1jbGFzcyBleHRlbmRzIHple2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibWVzc2FnZSIse3ZhbHVlOkRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0aGlzLm5hbWU9YCR7dGhpcy5uYW1lfSBbJHtNZX1dYCxkZWxldGUgdGhpcy5uYW1lfWdldCBj''@;'; put 'put ''b2RlKCl7cmV0dXJuIE1lfXNldCBjb2RlKGl0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29kZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml0LHdyaXRhYmxlOiEwfSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFske01lfV06ICR7dGhpcy5t''@;'; put 'put ''ZXNzYWdlfWB9fX1mdW5jdGlvbiBXZShNZSl7bGV0IERlPSIiLHplPU1lLmxlbmd0aDtjb25zdCBpdD0iLSI9PT1NZVswXT8xOjA7Zm9yKDt6ZT49aXQrNDt6ZS09MylEZT1gXyR7TWUuc2xpY2UoemUtMyx6ZSl9JHtEZX1gO3JldHVybmAke01lLnNsaWNlKDAsemUpfSR7RGV9YH1mdW5jdGlv''@;'; put 'put ''biBLZShNZSxEZSx6ZSxpdCx1dCxNdCl7aWYoTWU+emV8fE1lPERlKXtjb25zdCBIdD0iYmlnaW50Ij09dHlwZW9mIERlPyJuIjoiIjtsZXQgUHQ7dGhyb3cgUHQ9TXQ+Mz8wPT09RGV8fERlPT09QmlnSW50KDApP2A+PSAwJHtIdH0gYW5kIDwgMiR7SHR9ICoqICR7OCooTXQrMSl9JHtIdH1g''@;'; put 'put ''OmA+PSAtKDIke0h0fSAqKiAkezgqKE10KzEpLTF9JHtIdH0pIGFuZCA8IDIgKiogJHs4KihNdCsxKS0xfSR7SHR9YDpgPj0gJHtEZX0ke0h0fSBhbmQgPD0gJHt6ZX0ke0h0fWAsbmV3IE9lLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIixQdCxNZSl9dmFyIEh0LFB0LG9uO0h0PWl0LG9uPU10''@;'; put 'put ''LFllKFB0PXV0LCJvZmZzZXQiKSx2b2lkIDAhPT1IdFtQdF0mJnZvaWQgMCE9PUh0W1B0K29uXXx8SmUoUHQsSHQubGVuZ3RoLShvbisxKSl9ZnVuY3Rpb24gWWUoTWUsRGUpe2lmKCJudW1iZXIiIT10eXBlb2YgTWUpdGhyb3cgbmV3IE9lLkVSUl9JTlZBTElEX0FSR19UWVBFKERlLCJudW1i''@;'; put 'put ''ZXIiLE1lKX1mdW5jdGlvbiBKZShNZSxEZSx6ZSl7dGhyb3cgTWF0aC5mbG9vcihNZSkhPT1NZT8oWWUoTWUsemUpLG5ldyBPZS5FUlJfT1VUX09GX1JBTkdFKHplfHwib2Zmc2V0IiwiYW4gaW50ZWdlciIsTWUpKTpEZTwwP25ldyBPZS5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFM6bmV3IE9l''@;'; put 'put ''LkVSUl9PVVRfT0ZfUkFOR0UoemV8fCJvZmZzZXQiLGA+PSAke3plPzE6MH0gYW5kIDw9ICR7RGV9YCxNZSl9QmUoIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsZnVuY3Rpb24oTWUpe3JldHVybiBNZT9gJHtNZX0gaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzYDoiQXR0ZW1wdCB0byBh''@;'; put 'put ''Y2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5kcyJ9LFJhbmdlRXJyb3IpLEJlKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oTWUsRGUpe3JldHVybmBUaGUgIiR7TWV9IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9m''@;'; put 'put ''IERlfWB9LFR5cGVFcnJvciksQmUoIkVSUl9PVVRfT0ZfUkFOR0UiLGZ1bmN0aW9uKE1lLERlLHplKXtsZXQgaXQ9YFRoZSB2YWx1ZSBvZiAiJHtNZX0iIGlzIG91dCBvZiByYW5nZS5gLHV0PXplO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHplKSYmTWF0aC5hYnMoemUpPjQyOTQ5NjcyOTY/''@;'; put 'put ''dXQ9V2UoU3RyaW5nKHplKSk6ImJpZ2ludCI9PXR5cGVvZiB6ZSYmKHV0PVN0cmluZyh6ZSksKHplPkJpZ0ludCgyKSoqQmlnSW50KDMyKXx8emU8LShCaWdJbnQoMikqKkJpZ0ludCgzMikpKSYmKHV0PVdlKHV0KSksdXQrPSJuIiksaXQrPWAgSXQgbXVzdCBiZSAke0RlfS4gUmVjZWl2ZWQg''@;'; put 'put ''JHt1dH1gLGl0fSxSYW5nZUVycm9yKTtjb25zdCBsdD0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFBlKE1lLERlKXtsZXQgemU7RGU9RGV8fDEvMDtjb25zdCBpdD1NZS5sZW5ndGg7bGV0IHV0PW51bGw7Y29uc3QgTXQ9W107Zm9yKGxldCBIdD0wO0h0PGl0OysrSHQpe2lmKHplPU1l''@;'; put 'put ''LmNoYXJDb2RlQXQoSHQpLHplPjU1Mjk1JiZ6ZTw1NzM0NCl7aWYoIXV0KXtpZih6ZT41NjMxOSl7KERlLT0zKT4tMSYmTXQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoSHQrMT09PWl0KXsoRGUtPTMpPi0xJiZNdC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX11dD16ZTtjb250''@;'; put 'put ''aW51ZX1pZih6ZTw1NjMyMCl7KERlLT0zKT4tMSYmTXQucHVzaCgyMzksMTkxLDE4OSksdXQ9emU7Y29udGludWV9emU9NjU1MzYrKHV0LTU1Mjk2PDwxMHx6ZS01NjMyMCl9ZWxzZSB1dCYmKERlLT0zKT4tMSYmTXQucHVzaCgyMzksMTkxLDE4OSk7aWYodXQ9bnVsbCx6ZTwxMjgpe2lmKChE''@;'; put 'put ''ZS09MSk8MClicmVhaztNdC5wdXNoKHplKX1lbHNlIGlmKHplPDIwNDgpe2lmKChEZS09Mik8MClicmVhaztNdC5wdXNoKHplPj42fDE5Miw2MyZ6ZXwxMjgpfWVsc2UgaWYoemU8NjU1MzYpe2lmKChEZS09Myk8MClicmVhaztNdC5wdXNoKHplPj4xMnwyMjQsemU+PjYmNjN8MTI4LDYzJnpl''@;'; put 'put ''fDEyOCl9ZWxzZXtpZighKHplPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKERlLT00KTwwKWJyZWFrO010LnB1c2goemU+PjE4fDI0MCx6ZT4+MTImNjN8MTI4LHplPj42JjYzfDEyOCw2MyZ6ZXwxMjgpfX1yZXR1cm4gTXR9ZnVuY3Rpb24gYmUo''@;'; put 'put ''TWUpe3JldHVybiBLLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKERlKXtpZigoRGU9KERlPURlLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKGx0LCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtEZS5sZW5ndGglNCE9MDspRGUrPSI9IjtyZXR1cm4gRGV9KE1lKSl9ZnVuY3Rpb24gQWUo''@;'; put 'put ''TWUsRGUsemUsaXQpe2xldCB1dDtmb3IodXQ9MDt1dDxpdCYmISh1dCt6ZT49RGUubGVuZ3RofHx1dD49TWUubGVuZ3RoKTsrK3V0KURlW3V0K3plXT1NZVt1dF07cmV0dXJuIHV0fWZ1bmN0aW9uIFRlKE1lLERlKXtyZXR1cm4gTWUgaW5zdGFuY2VvZiBEZXx8bnVsbCE9TWUmJm51bGwhPU1l''@;'; put 'put ''LmNvbnN0cnVjdG9yJiZudWxsIT1NZS5jb25zdHJ1Y3Rvci5uYW1lJiZNZS5jb25zdHJ1Y3Rvci5uYW1lPT09RGUubmFtZX1mdW5jdGlvbiBxZShNZSl7cmV0dXJuIE1lIT1NZX1jb25zdCBYZT1mdW5jdGlvbigpe2NvbnN0IE1lPSIwMTIzNDU2Nzg5YWJjZGVmIixEZT1uZXcgQXJyYXkoMjU2''@;'; put 'put ''KTtmb3IobGV0IHplPTA7emU8MTY7Kyt6ZSl7Y29uc3QgaXQ9MTYqemU7Zm9yKGxldCB1dD0wO3V0PDE2OysrdXQpRGVbaXQrdXRdPU1lW3plXStNZVt1dF19cmV0dXJuIERlfSgpO2Z1bmN0aW9uIFVlKE1lKXtyZXR1cm4gdHlwZW9mIEJpZ0ludD4idSI/aHQ6TWV9ZnVuY3Rpb24gaHQoKXt0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkJpZ0ludCBub3Qgc3VwcG9ydGVkIil9fSwxOTI0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyMTApLEs9Uig1NTU5KSxJPUsoeigiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO00uZXhwb3J0cz1mdW5jdGlvbihrLEUpe3ZhciBqPXooaywhIUUp''@;'; put 'put ''O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBqJiZJKGssIi5wcm90b3R5cGUuIik+LTE/SyhqKTpqfX0sNTU1OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODYxMiksSz1SKDIxMCksST1LKCIlRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JSIpLGs9SygiJUZ1bmN0aW9uLnByb3Rv''@;'; put 'put ''dHlwZS5jYWxsJSIpLEU9SygiJVJlZmxlY3QuYXBwbHklIiwhMCl8fHouY2FsbChrLEkpLGo9SygiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIiwhMCksVj1LKCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSIsITApLEI9SygiJU1hdGgubWF4JSIpO2lmKFYpdHJ5e1Yoe30sImEi''@;'; put 'put ''LHt2YWx1ZToxfSl9Y2F0Y2h7Vj1udWxsfU0uZXhwb3J0cz1mdW5jdGlvbihYKXt2YXIgVT1FKHosayxhcmd1bWVudHMpO3JldHVybiBqJiZWJiZqKFUsImxlbmd0aCIpLmNvbmZpZ3VyYWJsZSYmVihVLCJsZW5ndGgiLHt2YWx1ZToxK0IoMCxYLmxlbmd0aC0oYXJndW1lbnRzLmxlbmd0aC0x''@;'; put 'put ''KSl9KSxVfTt2YXIgWT1mdW5jdGlvbigpe3JldHVybiBFKHosSSxhcmd1bWVudHMpfTtWP1YoTS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOll9KTpNLmV4cG9ydHMuYXBwbHk9WX0sMTAyNzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDI4MzApLlRyYW5zZm9ybSxJPVIoMjU1''@;'; put 'put ''MykuU3RyaW5nRGVjb2RlcjtmdW5jdGlvbiBrKEUpe0suY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2YgRSx0aGlzLmhhc2hNb2RlP3RoaXNbRV09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0''@;'; put 'put ''aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9Uig1NzE3KShrLEspLGsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihFLGosVil7InN0cmluZyI9PXR5cGVvZiBFJiYoRT16LmZyb20oRSxqKSk7''@;'; put 'put ''dmFyIEI9dGhpcy5fdXBkYXRlKEUpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KFYmJihCPXRoaXMuX3RvU3RyaW5nKEIsVikpLEIpfSxrLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30say5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBF''@;'; put 'put ''cnJvcigidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxrLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LGsucHJvdG90eXBlLnNl''@;'; put 'put ''dEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0say5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihFLGosVil7dmFyIEI7dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKEUpOnRoaXMucHVzaCh0''@;'; put 'put ''aGlzLl91cGRhdGUoRSkpfWNhdGNoKFkpe0I9WX1maW5hbGx5e1YoQil9fSxrLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oRSl7dmFyIGo7dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0Y2goVil7aj1WfUUoail9LGsucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9u''@;'; put 'put ''KEUpe3ZhciBqPXRoaXMuX19maW5hbCgpfHx6LmFsbG9jKDApO3JldHVybiBFJiYoaj10aGlzLl90b1N0cmluZyhqLEUsITApKSxqfSxrLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oRSxqLFYpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBJKGopLHRoaXMuX2Vu''@;'; put 'put ''Y29kaW5nPWopLHRoaXMuX2VuY29kaW5nIT09ail0aHJvdyBuZXcgRXJyb3IoImNhbid0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgQj10aGlzLl9kZWNvZGVyLndyaXRlKEUpO3JldHVybiBWJiYoQis9dGhpcy5fZGVjb2Rlci5lbmQoKSksQn0sTS5leHBvcnRzPWt9LDEwNDg6TT0+e00uZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihSLHope2Zvcih2YXIgSz1bXSxJPTA7STxSLmxlbmd0aDtJKyspe3ZhciBrPXooUltJXSxJKTtPKGspP0sucHVzaC5hcHBseShLLGspOksucHVzaChrKX1yZXR1cm4gS307dmFyIE89QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oUil7cmV0dXJuIltvYmplY3QgQXJyYXld''@;'; put 'put ''Ij09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSKX19LDUxMDg6KE0sTyxSKT0+e3ZhciB6PVIoOTUzOSksSz1SKDkyODIpO2Z1bmN0aW9uIEkoKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX12YXIgayxFPUFycmF5LnByb3RvdHlwZS5zbGljZSxqPXt9O2s9dm9pZCAwIT09''@;'; put 'put ''Ui5nJiZSLmcuY29uc29sZT9SLmcuY29uc29sZTp0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNvbnNvbGU/d2luZG93LmNvbnNvbGU6e307Zm9yKHZhciBWPVtbZnVuY3Rpb24oKXt9LCJsb2ciXSxbZnVuY3Rpb24oKXtrLmxvZy5hcHBseShrLGFyZ3VtZW50cyl9LCJpbmZvIl0sW2Z1bmN0''@;'; put 'put ''aW9uKCl7ay5sb2cuYXBwbHkoayxhcmd1bWVudHMpfSwid2FybiJdLFtmdW5jdGlvbigpe2sud2Fybi5hcHBseShrLGFyZ3VtZW50cyl9LCJlcnJvciJdLFtmdW5jdGlvbihxKXtqW3FdPUkoKX0sInRpbWUiXSxbZnVuY3Rpb24ocSl7dmFyIGVlPWpbcV07aWYoIWVlKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiTm8gc3VjaCBsYWJlbDogIitxKTtkZWxldGUgaltxXTt2YXIgdGU9SSgpLWVlO2subG9nKHErIjogIit0ZSsibXMiKX0sInRpbWVFbmQiXSxbZnVuY3Rpb24oKXt2YXIgcT1uZXcgRXJyb3I7cS5uYW1lPSJUcmFjZSIscS5tZXNzYWdlPXouZm9ybWF0LmFwcGx5KG51bGwsYXJndW1lbnRz''@;'; put 'put ''KSxrLmVycm9yKHEuc3RhY2spfSwidHJhY2UiXSxbZnVuY3Rpb24ocSl7ay5sb2coei5pbnNwZWN0KHEpKyJcbiIpfSwiZGlyIl0sW2Z1bmN0aW9uKHEpe2lmKCFxKXt2YXIgZWU9RS5jYWxsKGFyZ3VtZW50cywxKTtLLm9rKCExLHouZm9ybWF0LmFwcGx5KG51bGwsZWUpKX19LCJhc3NlcnQi''@;'; put 'put ''XV0sQj0wO0I8Vi5sZW5ndGg7QisrKXt2YXIgWT1WW0JdLFU9WVsxXTtrW1VdfHwoa1tVXT1ZWzBdKX1NLmV4cG9ydHM9a30sNjM5MzooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDY5NDgpLEk9Uig2NDI2KTtNLmV4cG9ydHM9ZnVuY3Rpb24oVil7cmV0dXJuIG5ldyBFKFYp''@;'; put 'put ''fTt2YXIgaz17c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoy''@;'; put 'put ''NH0sZWQyNTUxOTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiBFKFYpe3RoaXMuY3VydmVUeXBlPWtbVl0sdGhpcy5jdXJ2ZVR5''@;'; put 'put ''cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTpWfSksdGhpcy5jdXJ2ZT1uZXcgSy5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIGooVixCLFkpe0FycmF5LmlzQXJyYXkoVil8fChWPVYudG9BcnJheSgpKTt2YXIgWD1uZXcgeihWKTtpZihZJiZYLmxl''@;'; put 'put ''bmd0aDxZKXt2YXIgVT1uZXcgeihZLVgubGVuZ3RoKTtVLmZpbGwoMCksWD16LmNvbmNhdChbVSxYXSl9cmV0dXJuIEI/WC50b1N0cmluZyhCKTpYfWsucDIyND1rLnNlY3AyMjRyMSxrLnAyNTY9ay5zZWNwMjU2cjE9ay5wcmltZTI1NnYxLGsucDE5Mj1rLnNlY3AxOTJyMT1rLnByaW1lMTky''@;'; put 'put ''djEsay5wMzg0PWsuc2VjcDM4NHIxLGsucDUyMT1rLnNlY3A1MjFyMSxFLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oVixCKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KFYsQil9LEUucHJvdG90eXBlLmNvbXB1dGVT''@;'; put 'put ''ZWNyZXQ9ZnVuY3Rpb24oVixCLFkpe3JldHVybiBCPUJ8fCJ1dGY4Iix6LmlzQnVmZmVyKFYpfHwoVj1uZXcgeihWLEIpKSxqKHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhWKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLFksdGhpcy5jdXJ2ZVR5cGUu''@;'; put 'put ''Ynl0ZUxlbmd0aCl9LEUucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihWLEIpe3ZhciBZPXRoaXMua2V5cy5nZXRQdWJsaWMoImNvbXByZXNzZWQiPT09QiwhMCk7cmV0dXJuImh5YnJpZCI9PT1CJiYoWVswXT1ZW1kubGVuZ3RoLTFdJTI/Nzo2KSxqKFksVil9LEUucHJvdG90eXBl''@;'; put 'put ''LmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oVil7cmV0dXJuIGoodGhpcy5rZXlzLmdldFByaXZhdGUoKSxWKX0sRS5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKFYsQil7cmV0dXJuIEI9Qnx8InV0ZjgiLHouaXNCdWZmZXIoVil8fChWPW5ldyB6KFYsQikpLHRoaXMua2V5cy5faW1w''@;'; put 'put ''b3J0UHVibGljKFYpLHRoaXN9LEUucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oVixCKXtCPUJ8fCJ1dGY4Iix6LmlzQnVmZmVyKFYpfHwoVj1uZXcgeihWLEIpKTt2YXIgWT1uZXcgSShWKTtyZXR1cm4gWT1ZLnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5L''@;'; put 'put ''ZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKFkpLHRoaXN9fSw2NDI2OmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGso''@;'; put 'put ''ZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53''@;'; put 'put ''b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUu''@;'; put 'put ''d29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDg2MjMpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcm''@;'; put 'put ''JlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNo''@;'; put 'put ''YXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1F''@;'; put 'put ''LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmlu''@;'; put 'put ''ZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0s''@;'; put 'put ''RS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82''@;'; put 'put ''NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxF''@;'; put 'put ''LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29y''@;'; put 'put ''ZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0y''@;'; put 'put ''XTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwx''@;'; put 'put ''Nik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgt''@;'; put 'put ''QykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tK''@;'; put 'put ''XXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhp''@;'; put 'put ''cy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZh''@;'; put 'put ''ciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUop''@;'; put 'put ''e3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1''@;'; put 'put ''bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3Rv''@;'; put 'put ''dHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5''@;'; put 'put ''cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3Ro''@;'; put 'put ''JiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAi''@;'; put 'put ''LCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIx''@;'; put 'put ''Niw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2''@;'; put 'put ''MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2''@;'; put 'put ''PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02''@;'; put 'put ''NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tm''@;'; put 'put ''ZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAs''@;'; put 'put ''cD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYm''@;'; put 'put ''Jih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9''@;'; put 'put ''dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxl''@;'; put 'put ''bmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlz''@;'; put 'put ''Lmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAg''@;'; put 'put ''dG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtl''@;'; put 'put ''KGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2''@;'; put 'put ''PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNa''@;'; put 'put ''ZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9''@;'; put 'put ''cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYm''@;'; put 'put ''KFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1''@;'; put 'put ''JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStD''@;'; put 'put ''fSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5w''@;'; put 'put ''cm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUo''@;'; put 'put ''KX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90''@;'; put 'put ''eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5n''@;'; put 'put ''dGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEko''@;'; put 'put ''MD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtT''@;'; put 'put ''KyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChn''@;'; put 'put ''KX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5j''@;'; put 'put ''bG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09''@;'; put 'put ''Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRo''@;'; put 'put ''aXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7''@;'; put 'put ''dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlw''@;'; put 'put ''ZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tT''@;'; put 'put ''XT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMu''@;'; put 'put ''aXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9''@;'; put 'put ''dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3''@;'; put 'put ''MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRz''@;'; put 'put ''W3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2''@;'; put 'put ''ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMs''@;'; put 'put ''dixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0o''@;'; put 'put ''MHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMu''@;'; put 'put ''bGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxCZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEm''@;'; put 'put ''S2UsSmU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLGl0PTB8Sls3XSx1dD04MTkxJml0LE10''@;'; put 'put ''PWl0Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLE5uPTB8bmVbMV0sZnQ9ODE5MSZObixmbj1Obj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1o''@;'; put 'put ''bj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCx2bj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLExuPTB8bmVbNl0senQ9ODE5MSZMbix5bj1Mbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14''@;'; put 'put ''bj4+PjEzLE9uPTB8bmVbOF0sJHQ9ODE5MSZPbixGbj1Pbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShw''@;'; put 'put ''PU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEJlLGVuKSxwPShwPU1hdGguaW11bChCZSwkbikpK01hdGguaW11bChXZSxl''@;'; put 'put ''bil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXww''@;'; put 'put ''KSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKEJlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11''@;'; put 'put ''bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkr''@;'; put 'put ''KHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUsZnQpfDAsdz13K01hdGguaW11bChKZSxmbil8MCx2PXYrTWF0aC5pbXVsKEJlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUs''@;'; put 'put ''TnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx2bil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx2bil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1h''@;'; put 'put ''dGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0KXwwLHY9ditNYXRoLmltdWwoQmUsTnQpfDAscD0ocD1wK01hdGguaW11bChCZSx2bil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2Usdm4pfDA7''@;'; put 'put ''dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4''@;'; put 'put ''NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVs''@;'; put 'put ''KHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHZuKXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''TnQpfDAsdz13K01hdGguaW11bChKZSx2bil8MCx2PXYrTWF0aC5pbXVsKEJlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5''@;'; put 'put ''MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikp''@;'; put 'put ''K01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSx2bil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsdm4pfDAsdj12K01hdGguaW11bChZ''@;'; put 'put ''ZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChKZSxKdCl8MCx2PXYrTWF0aC5pbXVsKEJlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0''@;'; put 'put ''KXwwO3ZhciBGcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3''@;'; put 'put ''MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGgu''@;'; put 'put ''aW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSx2bil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsdm4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''WWUsWXQpfDApK01hdGguaW11bChKZSxwdCl8MCx3PXcrTWF0aC5pbXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoQmUsenQpfDAscD0ocD1wK01hdGguaW11bChCZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGgu''@;'; put 'put ''aW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4p''@;'; put 'put ''LHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHZuKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bCho''@;'; put 'put ''dCx2bil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVsKEJlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsQm4p''@;'; put 'put ''fDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxGbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11''@;'; put 'put ''bChGZSxGbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUs''@;'; put 'put ''TnQpfDAscD0ocD1wK01hdGguaW11bChEZSx2bil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsdm4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxKdCl8''@;'; put 'put ''MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9''@;'; put 'put ''dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKEJlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsRm4pfDApK01h''@;'; put 'put ''dGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxq''@;'; put 'put ''bil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0''@;'; put 'put ''LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsdm4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LHZuKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAs''@;'; put 'put ''cD0ocD1wK01hdGguaW11bChEZSxKdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYr''@;'; put 'put ''TWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRo''@;'; put 'put ''LmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxGbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKEJlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoQmUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4s''@;'; put 'put ''d3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCx2bil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sdm4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEp0KXww''@;'; put 'put ''KStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxKdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsRm4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChKZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCx2bikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibix2biks''@;'; put 'put ''dj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcr''@;'; put 'put ''TWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDAp''@;'; put 'put ''fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11''@;'; put 'put ''bChVdCxKdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01h''@;'; put 'put ''dGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGgu''@;'; put 'put ''aW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4s''@;'; put 'put ''WXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAs''@;'; put 'put ''dz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLEZuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0o''@;'; put 'put ''cD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGgu''@;'; put 'put ''aW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''dXQsRm4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01h''@;'; put 'put ''dGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKFB0LEZuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixGbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtm''@;'; put 'put ''ZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsRm4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sRm4pO3ZhciBocz0oZmUrKHY9ditNYXRo''@;'; put 'put ''LmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0''@;'; put 'put ''aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxk''@;'; put 'put ''ZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1GcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09''@;'; put 'put ''ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFy''@;'; put 'put ''IHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5n''@;'; put 'put ''dGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFy''@;'; put 'put ''IFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUs''@;'; put 'put ''eGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZykt''@;'; put 'put ''MSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2''@;'; put 'put ''fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zv''@;'; put 'put ''cih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIEJlPVNbeGUrT2VdLFdlPXZbeGUr''@;'; put 'put ''T2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxKZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1CZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09QmUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoSmU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUr''@;'; put 'put ''ZmUqTGUsTGU9SmUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxT''@;'; put 'put ''KXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2''@;'; put 'put ''PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zv''@;'; put 'put ''cih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZh''@;'; put 'put ''ciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFy''@;'; put 'put ''cmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihD''@;'; put 'put ''LndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgQmU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2Rl''@;'; put 'put ''W09lXSp4ZVtPZV0sbmVbT2VdPUJlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxT''@;'; put 'put ''Lmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1m''@;'; put 'put ''dW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBl''@;'; put 'put ''LmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8''@;'; put 'put ''MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRM''@;'; put 'put ''ZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3Zd''@;'; put 'put ''O3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0w''@;'; put 'put ''KTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYt''@;'; put 'put ''U313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMu''@;'; put 'put ''c3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikv''@;'; put 'put ''MjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxl''@;'; put 'put ''bmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMu''@;'; put 'put ''bGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYo''@;'; put 'put ''dGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0s''@;'; put 'put ''RS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1T''@;'; put 'put ''P3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jk''@;'; put 'put ''c1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7''@;'; put 'put ''dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVu''@;'; put 'put ''Z3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhp''@;'; put 'put ''cy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUu''@;'; put 'put ''c3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90''@;'; put 'put ''b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZu''@;'; put 'put ''ZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtm''@;'; put 'put ''b3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxD''@;'; put 'put ''KXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1v''@;'; put 'put ''ZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2''@;'; put 'put ''PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJt''@;'; put 'put ''dWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYm''@;'; put 'put ''di5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZl''@;'; put 'put ''Pyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhp''@;'; put 'put ''cy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2''@;'; put 'put ''ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tk''@;'; put 'put ''aXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnBy''@;'; put 'put ''b3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3Jl''@;'; put 'put ''dHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2''@;'; put 'put ''Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0''@;'; put 'put ''aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygp''@;'; put 'put ''KTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigx''@;'; put 'put ''KSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgp''@;'; put 'put ''KSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYo''@;'; put 'put ''dy5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90''@;'; put 'put ''eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21w''@;'; put 'put ''bigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShT''@;'; put 'put ''LndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2''@;'; put 'put ''PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUo''@;'; put 'put ''KTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMu''@;'; put 'put ''Y21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5''@;'; put 'put ''cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5w''@;'; put 'put ''cm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAm''@;'; put 'put ''Jnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgp''@;'; put 'put ''LHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rp''@;'; put 'put ''b24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNt''@;'; put 'put ''cD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7''@;'; put 'put ''djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''bi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhp''@;'; put 'put ''cy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBp''@;'; put 'put ''biByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5p''@;'; put 'put ''c3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRO''@;'; put 'put ''ZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5f''@;'; put 'put ''dmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlz''@;'; put 'put ''Lms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZj''@;'; put 'put ''MmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRo''@;'; put 'put ''aXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSks''@;'; put 'put ''dGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7''@;'; put 'put ''cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5n''@;'; put 'put ''dGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBl''@;'; put 'put ''LnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5t''@;'; put 'put ''aW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxn''@;'; put 'put ''Lmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5s''@;'; put 'put ''ZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRz''@;'; put 'put ''W2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxn''@;'; put 'put ''LndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtl''@;'; put 'put ''bHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9u''@;'; put 'put ''KGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJl''@;'; put 'put ''ZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VS''@;'; put 'put ''ZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92''@;'; put 'put ''ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAo''@;'; put 'put ''dGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9''@;'; put 'put ''ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxI''@;'; put 'put ''LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlw''@;'; put 'put ''ZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBD''@;'; put 'put ''PXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJu''@;'; put 'put ''KDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNt''@;'; put 'put ''cChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLEJlPTA7MCE9PU9lLmNtcCh3KTtCZSsrKU9lPU9lLnJl''@;'; put 'put ''ZFNxcigpO0koQmU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtQmUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1CZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5f''@;'; put 'put ''aW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09''@;'; put 'put ''PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3Ro''@;'; put 'put ''KCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0r''@;'; put 'put ''K0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNv''@;'; put 'put ''bnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlz''@;'; put 'put ''LnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4g''@;'; put 'put ''Zy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0p''@;'; put 'put ''Pj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBT''@;'; put 'put ''PWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTww''@;'; put 'put ''JiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sMzQ4MjooTSxPLFIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTcxNyksSz1SKDIzMTgpLEk9Uig5Nzg1KSxrPVIoOTA3MiksRT1SKDEwMjcpO2Z1bmN0aW9uIGooVil7RS5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9Vn16KGosRSksai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9o''@;'; put 'put ''YXNoLnVwZGF0ZShWKX0sai5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LE0uZXhwb3J0cz1mdW5jdGlvbihWKXtyZXR1cm4ibWQ1Ij09PShWPVYudG9Mb3dlckNhc2UoKSk/bmV3IEs6InJtZDE2MCI9PT1WfHwicmlwZW1kMTYwIj09PVY/''@;'; put 'put ''bmV3IEk6bmV3IGooayhWKSl9fSw4MDI4OihNLE8sUik9Pnt2YXIgej1SKDIzMTgpO00uZXhwb3J0cz1mdW5jdGlvbihLKXtyZXR1cm4obmV3IHopLnVwZGF0ZShLKS5kaWdlc3QoKX19LDgzNTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU3MTcpLEs9UigxMDMxKSxJPVIoMTAy''@;'; put 'put ''Nyksaz1SKDk1MDkpLkJ1ZmZlcixFPVIoODAyOCksaj1SKDk3ODUpLFY9Uig5MDcyKSxCPWsuYWxsb2MoMTI4KTtmdW5jdGlvbiBZKFgsVSl7SS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgVSYmKFU9ay5mcm9tKFUpKTt2YXIgcT0ic2hhNTEyIj09PVh8fCJzaGEzODQi''@;'; put 'put ''PT09WD8xMjg6NjQ7dGhpcy5fYWxnPVgsdGhpcy5fa2V5PVUsVS5sZW5ndGg+cT9VPSgicm1kMTYwIj09PVg/bmV3IGo6VihYKSkudXBkYXRlKFUpLmRpZ2VzdCgpOlUubGVuZ3RoPHEmJihVPWsuY29uY2F0KFtVLEJdLHEpKTtmb3IodmFyIGVlPXRoaXMuX2lwYWQ9ay5hbGxvY1Vuc2FmZShx''@;'; put 'put ''KSx0ZT10aGlzLl9vcGFkPWsuYWxsb2NVbnNhZmUocSksb2U9MDtvZTxxO29lKyspZWVbb2VdPTU0XlVbb2VdLHRlW29lXT05Ml5VW29lXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09WD9uZXcgajpWKFgpLHRoaXMuX2hhc2gudXBkYXRlKGVlKX16KFksSSksWS5wcm90b3R5cGUuX3VwZGF0ZT1m''@;'; put 'put ''dW5jdGlvbihYKXt0aGlzLl9oYXNoLnVwZGF0ZShYKX0sWS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFg9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IGo6Vih0aGlzLl9hbGcpKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKFgp''@;'; put 'put ''LmRpZ2VzdCgpfSxNLmV4cG9ydHM9ZnVuY3Rpb24oWCxVKXtyZXR1cm4icm1kMTYwIj09PShYPVgudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09WD9uZXcgWSgicm1kMTYwIixVKToibWQ1Ij09PVg/bmV3IEsoRSxVKTpuZXcgWShYLFUpfX0sMTAzMTooTSxPLFIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciB6PVIoNTcxNyksSz1SKDk1MDkpLkJ1ZmZlcixJPVIoMTAyNyksaz1LLmFsbG9jKDEyOCksRT02NDtmdW5jdGlvbiBqKFYsQil7SS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgQiYmKEI9Sy5mcm9tKEIpKSx0aGlzLl9hbGc9Vix0aGlzLl9rZXk9QixCLmxl''@;'; put 'put ''bmd0aD5FP0I9VihCKTpCLmxlbmd0aDxFJiYoQj1LLmNvbmNhdChbQixrXSxFKSk7Zm9yKHZhciBZPXRoaXMuX2lwYWQ9Sy5hbGxvY1Vuc2FmZShFKSxYPXRoaXMuX29wYWQ9Sy5hbGxvY1Vuc2FmZShFKSxVPTA7VTxFO1UrKylZW1VdPTU0XkJbVV0sWFtVXT05Ml5CW1VdO3RoaXMuX2hhc2g9''@;'; put 'put ''W1ldfXooaixJKSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFYpe3RoaXMuX2hhc2gucHVzaChWKX0sai5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fYWxnKEsuY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKEsuY29uY2F0KFt0aGlzLl9v''@;'; put 'put ''cGFkLFZdKSl9LE0uZXhwb3J0cz1qfSw1ODM1OihNLE8sUik9PnsidXNlIHN0cmljdCI7Ty5yYW5kb21CeXRlcz1PLnJuZz1PLnBzZXVkb1JhbmRvbUJ5dGVzPU8ucHJuZz1SKDE3OTgpLE8uY3JlYXRlSGFzaD1PLkhhc2g9UigzNDgyKSxPLmNyZWF0ZUhtYWM9Ty5IbWFjPVIoODM1NSk7dmFy''@;'; put 'put ''IHo9Uig2MDQyKSxLPU9iamVjdC5rZXlzKHopLEk9WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYwIl0uY29uY2F0KEspO08uZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEl9O3ZhciBrPVIoNTYzMik7Ty5wYmtkZjI9ay5wYmtkZjIs''@;'; put 'put ''Ty5wYmtkZjJTeW5jPWsucGJrZGYyU3luYzt2YXIgRT1SKDM2MTQpO08uQ2lwaGVyPUUuQ2lwaGVyLE8uY3JlYXRlQ2lwaGVyPUUuY3JlYXRlQ2lwaGVyLE8uQ2lwaGVyaXY9RS5DaXBoZXJpdixPLmNyZWF0ZUNpcGhlcml2PUUuY3JlYXRlQ2lwaGVyaXYsTy5EZWNpcGhlcj1FLkRlY2lwaGVy''@;'; put 'put ''LE8uY3JlYXRlRGVjaXBoZXI9RS5jcmVhdGVEZWNpcGhlcixPLkRlY2lwaGVyaXY9RS5EZWNpcGhlcml2LE8uY3JlYXRlRGVjaXBoZXJpdj1FLmNyZWF0ZURlY2lwaGVyaXYsTy5nZXRDaXBoZXJzPUUuZ2V0Q2lwaGVycyxPLmxpc3RDaXBoZXJzPUUubGlzdENpcGhlcnM7dmFyIGo9UigyNjA3''@;'; put 'put ''KTtPLkRpZmZpZUhlbGxtYW5Hcm91cD1qLkRpZmZpZUhlbGxtYW5Hcm91cCxPLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1qLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxPLmdldERpZmZpZUhlbGxtYW49ai5nZXREaWZmaWVIZWxsbWFuLE8uY3JlYXRlRGlmZmllSGVsbG1hbj1qLmNyZWF0''@;'; put 'put ''ZURpZmZpZUhlbGxtYW4sTy5EaWZmaWVIZWxsbWFuPWouRGlmZmllSGVsbG1hbjt2YXIgVj1SKDQ3NDMpO08uY3JlYXRlU2lnbj1WLmNyZWF0ZVNpZ24sTy5TaWduPVYuU2lnbixPLmNyZWF0ZVZlcmlmeT1WLmNyZWF0ZVZlcmlmeSxPLlZlcmlmeT1WLlZlcmlmeSxPLmNyZWF0ZUVDREg9Uig2''@;'; put 'put ''MzkzKTt2YXIgQj1SKDc5MDApO08ucHVibGljRW5jcnlwdD1CLnB1YmxpY0VuY3J5cHQsTy5wcml2YXRlRW5jcnlwdD1CLnByaXZhdGVFbmNyeXB0LE8ucHVibGljRGVjcnlwdD1CLnB1YmxpY0RlY3J5cHQsTy5wcml2YXRlRGVjcnlwdD1CLnByaXZhdGVEZWNyeXB0O3ZhciBZPVIoNzk2Myk7''@;'; put 'put ''Ty5yYW5kb21GaWxsPVkucmFuZG9tRmlsbCxPLnJhbmRvbUZpbGxTeW5jPVkucmFuZG9tRmlsbFN5bmMsTy5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihbInNvcnJ5LCBjcmVhdGVDcmVkZW50aWFscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0Iiwid2UgYWNj''@;'; put 'put ''ZXB0IHB1bGwgcmVxdWVzdHMiLCJodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvLWJyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiXS5qb2luKCJcbiIpKX0sTy5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9U''@;'; put 'put ''T19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9Y''@;'; put 'put ''OTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9fSw1MDU2OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcjtj''@;'; put 'put ''b25zdHtUcmFuc2Zvcm06S309UigyODMwKSxJPXouZnJvbShbMjM5LDE4NywxOTFdKTtjbGFzcyBrIGV4dGVuZHMgS3tjb25zdHJ1Y3RvcihjZT17fSl7c3VwZXIoe3dyaXRhYmxlT2JqZWN0TW9kZTohMCwuLi5jZX0pO2NvbnN0IEc9e307bGV0IGI7Zm9yKGxldCBEIGluIGNlKUdbQihEKV09''@;'; put 'put ''Y2VbRF07aWYoYj10aGlzLm5vcm1hbGl6ZShHKSl0aHJvdyBiO3N3aXRjaChHLnJlY29yZF9kZWxpbWl0ZXIpe2Nhc2UiYXV0byI6Ry5yZWNvcmRfZGVsaW1pdGVyPW51bGw7YnJlYWs7Y2FzZSJ1bml4IjpHLnJlY29yZF9kZWxpbWl0ZXI9IlxuIjticmVhaztjYXNlIm1hYyI6Ry5yZWNvcmRf''@;'; put 'put ''ZGVsaW1pdGVyPSJcciI7YnJlYWs7Y2FzZSJ3aW5kb3dzIjpHLnJlY29yZF9kZWxpbWl0ZXI9IlxyXG4iO2JyZWFrO2Nhc2UiYXNjaWkiOkcucmVjb3JkX2RlbGltaXRlcj0iXHgxZSI7YnJlYWs7Y2FzZSJ1bmljb2RlIjpHLnJlY29yZF9kZWxpbWl0ZXI9Ilx1MjAyOCJ9dGhpcy5vcHRpb25z''@;'; put 'put ''PUcsdGhpcy5zdGF0ZT17c3RvcDohMX0sdGhpcy5pbmZvPXtyZWNvcmRzOjB9fW5vcm1hbGl6ZShjZSl7aWYobnVsbD09Y2UuYm9tfHwhMT09PWNlLmJvbSljZS5ib209ITE7ZWxzZSBpZighMCE9PWNlLmJvbSlyZXR1cm4gbmV3IGooIkNTVl9PUFRJT05fQk9PTEVBTl9JTlZBTElEX1RZUEUi''@;'; put 'put ''LFsib3B0aW9uIGBib21gIGlzIG9wdGlvbmFsIGFuZCBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZSwiLGBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5ib20pfWBdKTtpZihudWxsPT1jZS5kZWxpbWl0ZXIpY2UuZGVsaW1pdGVyPSIsIjtlbHNlIGlmKHouaXNCdWZmZXIoY2UuZGVsaW1pdGVyKSlj''@;'; put 'put ''ZS5kZWxpbWl0ZXI9Y2UuZGVsaW1pdGVyLnRvU3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNlLmRlbGltaXRlcilyZXR1cm4gbmV3IGooIkNTVl9PUFRJT05fREVMSU1JVEVSX0lOVkFMSURfVFlQRSIsWyJvcHRpb24gYGRlbGltaXRlcmAgbXVzdCBiZSBhIGJ1ZmZlciBvciBh''@;'; put 'put ''IHN0cmluZywiLGBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5kZWxpbWl0ZXIpfWBdKTtpZihudWxsPT1jZS5xdW90ZSljZS5xdW90ZT0nIic7ZWxzZSBpZighMD09PWNlLnF1b3RlKWNlLnF1b3RlPSciJztlbHNlIGlmKCExPT09Y2UucXVvdGUpY2UucXVvdGU9IiI7ZWxzZSBpZih6LmlzQnVm''@;'; put 'put ''ZmVyKGNlLnF1b3RlKSljZS5xdW90ZT1jZS5xdW90ZS50b1N0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBjZS5xdW90ZSlyZXR1cm4gbmV3IGooIkNTVl9PUFRJT05fUVVPVEVfSU5WQUxJRF9UWVBFIixbIm9wdGlvbiBgcXVvdGVgIG11c3QgYmUgYSBib29sZWFuLCBhIGJ1ZmZl''@;'; put 'put ''ciBvciBhIHN0cmluZywiLGBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5xdW90ZSl9YF0pO2lmKG51bGwhPWNlLnF1b3RlZHx8KGNlLnF1b3RlZD0hMSksbnVsbCE9Y2UucXVvdGVkX2VtcHR5fHwoY2UucXVvdGVkX2VtcHR5PXZvaWQgMCksbnVsbD09Y2UucXVvdGVkX21hdGNofHwhMT09PWNl''@;'; put 'put ''LnF1b3RlZF9tYXRjaD9jZS5xdW90ZWRfbWF0Y2g9bnVsbDpBcnJheS5pc0FycmF5KGNlLnF1b3RlZF9tYXRjaCl8fChjZS5xdW90ZWRfbWF0Y2g9W2NlLnF1b3RlZF9tYXRjaF0pLGNlLnF1b3RlZF9tYXRjaClmb3IobGV0IEcgb2YgY2UucXVvdGVkX21hdGNoKXtjb25zdCBiPUcgaW5zdGFu''@;'; put 'put ''Y2VvZiBSZWdFeHA7aWYoInN0cmluZyIhPXR5cGVvZiBHJiYhYilyZXR1cm4gRXJyb3IoYEludmFsaWQgT3B0aW9uOiBxdW90ZWRfbWF0Y2ggbXVzdCBiZSBhIHN0cmluZyBvciBhIHJlZ2V4LCBnb3QgJHtKU09OLnN0cmluZ2lmeShHKX1gKX1pZihudWxsIT1jZS5xdW90ZWRfc3RyaW5nfHwo''@;'; put 'put ''Y2UucXVvdGVkX3N0cmluZz0hMSksbnVsbCE9Y2UuZW9mfHwoY2UuZW9mPSEwKSxudWxsPT1jZS5lc2NhcGUpY2UuZXNjYXBlPSciJztlbHNlIGlmKHouaXNCdWZmZXIoY2UuZXNjYXBlKSljZS5lc2NhcGU9Y2UuZXNjYXBlLnRvU3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNl''@;'; put 'put ''LmVzY2FwZSlyZXR1cm4gRXJyb3IoYEludmFsaWQgT3B0aW9uOiBlc2NhcGUgbXVzdCBiZSBhIGJ1ZmZlciBvciBhIHN0cmluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UuZXNjYXBlKX1gKTtpZihjZS5lc2NhcGUubGVuZ3RoPjEpcmV0dXJuIEVycm9yKGBJbnZhbGlkIE9wdGlvbjogZXNj''@;'; put 'put ''YXBlIG11c3QgYmUgb25lIGNoYXJhY3RlciwgZ290ICR7Y2UuZXNjYXBlLmxlbmd0aH0gY2hhcmFjdGVyc2ApO2lmKG51bGwhPWNlLmhlYWRlcnx8KGNlLmhlYWRlcj0hMSksY2UuY29sdW1ucz10aGlzLm5vcm1hbGl6ZV9jb2x1bW5zKGNlLmNvbHVtbnMpLG51bGwhPWNlLnF1b3RlZHx8KGNl''@;'; put 'put ''LnF1b3RlZD0hMSksbnVsbCE9Y2UuY2FzdHx8KGNlLmNhc3Q9e30pLG51bGwhPWNlLmNhc3QuYmlnaW50fHwoY2UuY2FzdC5iaWdpbnQ9Rz0+IiIrRyksbnVsbCE9Y2UuY2FzdC5ib29sZWFufHwoY2UuY2FzdC5ib29sZWFuPUc9Pkc/IjEiOiIiKSxudWxsIT1jZS5jYXN0LmRhdGV8fChjZS5j''@;'; put 'put ''YXN0LmRhdGU9Rz0+IiIrRy5nZXRUaW1lKCkpLG51bGwhPWNlLmNhc3QubnVtYmVyfHwoY2UuY2FzdC5udW1iZXI9Rz0+IiIrRyksbnVsbCE9Y2UuY2FzdC5vYmplY3R8fChjZS5jYXN0Lm9iamVjdD1HPT5KU09OLnN0cmluZ2lmeShHKSksbnVsbCE9Y2UuY2FzdC5zdHJpbmd8fChjZS5jYXN0''@;'; put 'put ''LnN0cmluZz1mdW5jdGlvbihHKXtyZXR1cm4gR30pLG51bGw9PWNlLnJlY29yZF9kZWxpbWl0ZXIpY2UucmVjb3JkX2RlbGltaXRlcj0iXG4iO2Vsc2UgaWYoei5pc0J1ZmZlcihjZS5yZWNvcmRfZGVsaW1pdGVyKSljZS5yZWNvcmRfZGVsaW1pdGVyPWNlLnJlY29yZF9kZWxpbWl0ZXIudG9T''@;'; put 'put ''dHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgY2UucmVjb3JkX2RlbGltaXRlcilyZXR1cm4gRXJyb3IoYEludmFsaWQgT3B0aW9uOiByZWNvcmRfZGVsaW1pdGVyIG11c3QgYmUgYSBidWZmZXIgb3IgYSBzdHJpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLnJlY29yZF9kZWxp''@;'; put 'put ''bWl0ZXIpfWApfV90cmFuc2Zvcm0oY2UsRyxiKXtpZighMD09PXRoaXMuc3RhdGUuc3RvcClyZXR1cm47aWYoIUFycmF5LmlzQXJyYXkoY2UpJiYib2JqZWN0IiE9dHlwZW9mIGNlKXJldHVybiB0aGlzLnN0YXRlLnN0b3A9ITAsYihFcnJvcihgSW52YWxpZCBSZWNvcmQ6IGV4cGVjdCBhbiBh''@;'; put 'put ''cnJheSBvciBhbiBvYmplY3QsIGdvdCAke0pTT04uc3RyaW5naWZ5KGNlKX1gKSk7aWYoMD09PXRoaXMuaW5mby5yZWNvcmRzKWlmKEFycmF5LmlzQXJyYXkoY2UpKXtpZighMD09PXRoaXMub3B0aW9ucy5oZWFkZXImJiF0aGlzLm9wdGlvbnMuY29sdW1ucylyZXR1cm4gdGhpcy5zdGF0ZS5z''@;'; put 'put ''dG9wPSEwLGIoRXJyb3IoIlVuZGlzY292ZXJhYmxlIENvbHVtbnM6IGhlYWRlciBvcHRpb24gcmVxdWlyZXMgY29sdW1uIG9wdGlvbiBvciBvYmplY3QgcmVjb3JkcyIpKX1lbHNlIG51bGwhPXRoaXMub3B0aW9ucy5jb2x1bW5zfHwodGhpcy5vcHRpb25zLmNvbHVtbnM9dGhpcy5ub3JtYWxp''@;'; put 'put ''emVfY29sdW1ucyhPYmplY3Qua2V5cyhjZSkpKTswPT09dGhpcy5pbmZvLnJlY29yZHMmJih0aGlzLmJvbSgpLHRoaXMuaGVhZGVycygpKTt0cnl7dGhpcy5lbWl0KCJyZWNvcmQiLGNlLHRoaXMuaW5mby5yZWNvcmRzKX1jYXRjaChIKXtyZXR1cm4gdGhpcy5zdGF0ZS5zdG9wPSEwLHRoaXMu''@;'; put 'put ''ZW1pdCgiZXJyb3IiLEgpfWxldCBEO2lmKHRoaXMub3B0aW9ucy5lb2Ype2lmKEQ9dGhpcy5zdHJpbmdpZnkoY2UpLHZvaWQgMD09PUQpcmV0dXJuO0QrPXRoaXMub3B0aW9ucy5yZWNvcmRfZGVsaW1pdGVyfWVsc2V7aWYoRD10aGlzLnN0cmluZ2lmeShjZSksdm9pZCAwPT09RClyZXR1cm47''@;'; put 'put ''KHRoaXMub3B0aW9ucy5oZWFkZXJ8fHRoaXMuaW5mby5yZWNvcmRzKSYmKEQ9dGhpcy5vcHRpb25zLnJlY29yZF9kZWxpbWl0ZXIrRCl9dGhpcy5pbmZvLnJlY29yZHMrKyx0aGlzLnB1c2goRCksYigpfV9mbHVzaChjZSl7MD09PXRoaXMuaW5mby5yZWNvcmRzJiYodGhpcy5ib20oKSx0aGlz''@;'; put 'put ''LmhlYWRlcnMoKSksY2UoKX1zdHJpbmdpZnkoY2UsRz0hMSl7aWYoIm9iamVjdCIhPXR5cGVvZiBjZSlyZXR1cm4gY2U7Y29uc3R7Y29sdW1uczpifT10aGlzLm9wdGlvbnMsSD1bXTtpZihBcnJheS5pc0FycmF5KGNlKSl7YiYmY2Uuc3BsaWNlKGIubGVuZ3RoKTtmb3IobGV0IGc9MDtnPGNl''@;'; put 'put ''Lmxlbmd0aDtnKyspe2NvbnN0IEM9Y2VbZ10sW1Msdl09dGhpcy5fX2Nhc3QoQyx7aW5kZXg6Zyxjb2x1bW46ZyxyZWNvcmRzOnRoaXMuaW5mby5yZWNvcmRzLGhlYWRlcjpHfSk7aWYoUylyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixTKTtIW2ddPVt2LENdfX1lbHNlIGlmKGIpZm9y''@;'; put 'put ''KGxldCBnPTA7ZzxiLmxlbmd0aDtnKyspe2NvbnN0IEM9aGUoY2UsYltnXS5rZXkpLFtTLHZdPXRoaXMuX19jYXN0KEMse2luZGV4OmcsY29sdW1uOmJbZ10ua2V5LHJlY29yZHM6dGhpcy5pbmZvLnJlY29yZHMsaGVhZGVyOkd9KTtpZihTKXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3Ii''@;'; put 'put ''LFMpO0hbZ109W3YsQ119ZWxzZSBmb3IobGV0IGcgb2YgY2Upe2NvbnN0IEM9Y2VbZ10sW1Msdl09dGhpcy5fX2Nhc3QoQyx7aW5kZXg6aSxjb2x1bW46YltpXS5rZXkscmVjb3Jkczp0aGlzLmluZm8ucmVjb3JkcyxoZWFkZXI6R30pO2lmKFMpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJv''@;'; put 'put ''ciIsUyk7SC5wdXNoKFt2LENdKX1sZXQgTj0iIjtmb3IobGV0IGc9MDtnPEgubGVuZ3RoO2crKyl7bGV0IEMsUyxbdixwXT1IW2ddO2lmKCJzdHJpbmciPT10eXBlb2YgdilDPXRoaXMub3B0aW9ucztlbHNlIGlmKFYodikpe2lmKEM9dix2PUMudmFsdWUsZGVsZXRlIEMudmFsdWUsInN0cmlu''@;'; put 'put ''ZyIhPXR5cGVvZiB2JiZudWxsIT12KXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLEVycm9yKGBJbnZhbGlkIENhc3RpbmcgVmFsdWU6IHJldHVybmVkIHZhbHVlIG11c3QgcmV0dXJuIGEgc3RyaW5nLCBudWxsIG9yIHVuZGVmaW5lZCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodil9YCkp''@;'; put 'put ''O2lmKEM9ey4uLnRoaXMub3B0aW9ucywuLi5DfSxTPXRoaXMubm9ybWFsaXplKEMpKXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLFMpfWVsc2V7aWYobnVsbCE9dilyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixFcnJvcihgSW52YWxpZCBDYXN0aW5nIFZhbHVlOiByZXR1cm5l''@;'; put 'put ''ZCB2YWx1ZSBtdXN0IHJldHVybiBhIHN0cmluZywgYW4gb2JqZWN0LCBudWxsIG9yIHVuZGVmaW5lZCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodil9YCkpO0M9dGhpcy5vcHRpb25zfWNvbnN0e2RlbGltaXRlcjp3LGVzY2FwZTpKLHF1b3RlOm5lLHF1b3RlZDpkZSxxdW90ZWRfZW1wdHk6ZmUs''@;'; put 'put ''cXVvdGVkX3N0cmluZzp4ZSxxdW90ZWRfbWF0Y2g6TGUscmVjb3JkX2RlbGltaXRlcjpGZX09QztpZih2KXtpZigic3RyaW5nIiE9dHlwZW9mIHYpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLEVycm9yKGBGb3JtYXR0ZXIgbXVzdCByZXR1cm4gYSBzdHJpbmcsIG51bGwgb3IgdW5kZWZpbmVk''@;'; put 'put ''LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2KX1gKSksbnVsbDtjb25zdCBPZT13Lmxlbmd0aCYmdi5pbmRleE9mKHcpPj0wLEJlPSIiIT09bmUmJnYuaW5kZXhPZihuZSk+PTAsV2U9di5pbmRleE9mKEopPj0wJiZKIT09bmUsS2U9di5pbmRleE9mKEZlKT49MCxZZT14ZSYmInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBwO2xldCBKZT1MZSYmTGUuZmlsdGVyKFBlPT4ic3RyaW5nIj09dHlwZW9mIFBlPy0xIT09di5pbmRleE9mKFBlKTpQZS50ZXN0KHYpKTtKZT1KZSYmSmUubGVuZ3RoPjA7Y29uc3QgbHQ9ITA9PT1CZXx8T2V8fEtlfHxkZXx8WWV8fEplO2lmKCEwPT09bHQmJiEwPT09V2Upe2NvbnN0''@;'; put 'put ''IFBlPSJcXCI9PT1KP25ldyBSZWdFeHAoSitKLCJnIik6bmV3IFJlZ0V4cChKLCJnIik7dj12LnJlcGxhY2UoUGUsSitKKX1pZighMD09PUJlKXtjb25zdCBQZT1uZXcgUmVnRXhwKG5lLCJnIik7dj12LnJlcGxhY2UoUGUsSituZSl9ITA9PT1sdCYmKHY9bmUrdituZSksTis9dn1lbHNlKCEw''@;'; put 'put ''PT09ZmV8fCIiPT09cCYmITA9PT14ZSYmITEhPT1mZSkmJihOKz1uZStuZSk7ZyE9PUgubGVuZ3RoLTEmJihOKz13KX1yZXR1cm4gTn1ib20oKXshMD09PXRoaXMub3B0aW9ucy5ib20mJnRoaXMucHVzaChJKX1oZWFkZXJzKCl7aWYoITE9PT10aGlzLm9wdGlvbnMuaGVhZGVyfHx2b2lkIDA9''@;'; put 'put ''PT10aGlzLm9wdGlvbnMuY29sdW1ucylyZXR1cm47bGV0IGNlPXRoaXMub3B0aW9ucy5jb2x1bW5zLm1hcChHPT5HLmhlYWRlcik7Y2U9dGhpcy5vcHRpb25zLmVvZj90aGlzLnN0cmluZ2lmeShjZSwhMCkrdGhpcy5vcHRpb25zLnJlY29yZF9kZWxpbWl0ZXI6dGhpcy5zdHJpbmdpZnkoY2Up''@;'; put 'put ''LHRoaXMucHVzaChjZSl9X19jYXN0KGNlLEcpe2NvbnN0IGI9dHlwZW9mIGNlO3RyeXtyZXR1cm4ic3RyaW5nIj09PWI/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5zdHJpbmcoY2UsRyldOiJiaWdpbnQiPT09Yj9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0LmJpZ2ludChjZSxHKV06Im51''@;'; put 'put ''bWJlciI9PT1iP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3QubnVtYmVyKGNlLEcpXToiYm9vbGVhbiI9PT1iP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3QuYm9vbGVhbihjZSxHKV06Y2UgaW5zdGFuY2VvZiBEYXRlP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3QuZGF0ZShjZSxHKV06Im9i''@;'; put 'put ''amVjdCI9PT1iJiZudWxsIT09Y2U/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5vYmplY3QoY2UsRyldOlt2b2lkIDAsY2UsY2VdfWNhdGNoKEQpe3JldHVybltEXX19bm9ybWFsaXplX2NvbHVtbnMoY2Upe2lmKG51bGwhPWNlKXtpZigib2JqZWN0IiE9dHlwZW9mIGNlKXRocm93IEVycm9y''@;'; put 'put ''KCdJbnZhbGlkIG9wdGlvbiAiY29sdW1ucyI6IGV4cGVjdCBhbiBhcnJheSBvciBhbiBvYmplY3QnKTtpZihBcnJheS5pc0FycmF5KGNlKSl7Y29uc3QgRz1bXTtmb3IobGV0IGIgb2YgY2UpaWYoInN0cmluZyI9PXR5cGVvZiBiKUcucHVzaCh7a2V5OmIsaGVhZGVyOmJ9KTtlbHNle2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgYnx8dm9pZCAwPT09Ynx8QXJyYXkuaXNBcnJheShiKSl0aHJvdyBFcnJvcigiSW52YWxpZCBjb2x1bW4gZGVmaW5pdGlvbjogZXhwZWN0IGEgc3RyaW5nIG9yIGFuIG9iamVjdCIpO2lmKCFiLmtleSl0aHJvdyBFcnJvcignSW52YWxpZCBjb2x1bW4gZGVmaW5pdGlv''@;'; put 'put ''bjogcHJvcGVydHkgImtleSIgaXMgcmVxdWlyZWQnKTt2b2lkIDA9PT1iLmhlYWRlciYmKGIuaGVhZGVyPWIua2V5KSxHLnB1c2goYil9Y2U9R31lbHNle2NvbnN0IEc9W107Zm9yKGxldCBiIGluIGNlKUcucHVzaCh7a2V5OmIsaGVhZGVyOmNlW2JdfSk7Y2U9R31yZXR1cm4gY2V9fX1jb25z''@;'; put 'put ''dCBFPWZ1bmN0aW9uKCl7bGV0IHVlLGNlLEc7Zm9yKGxldCBEIGluIGFyZ3VtZW50cyl7Y29uc3QgSD1hcmd1bWVudHNbRF0sTj10eXBlb2YgSDtpZih2b2lkIDA9PT11ZSYmQXJyYXkuaXNBcnJheShIKSl1ZT1IO2Vsc2UgaWYodm9pZCAwPT09Y2UmJlYoSCkpY2U9SDtlbHNle2lmKHZvaWQg''@;'; put 'put ''MCE9PUd8fCJmdW5jdGlvbiIhPT1OKXRocm93IG5ldyBqKCJDU1ZfSU5WQUxJRF9BUkdVTUVOVCIsWyJJbnZhbGlkIGFyZ3VtZW50OiIsYGdvdCAke0pTT04uc3RyaW5naWZ5KEgpfSBhdCBpbmRleCAke0R9YF0pO0c9SH19Y29uc3QgYj1uZXcgayhjZSk7aWYoRyl7Y29uc3QgRD1bXTtiLm9u''@;'; put 'put ''KCJyZWFkYWJsZSIsZnVuY3Rpb24oKXtsZXQgSDtmb3IoO251bGwhPT0oSD10aGlzLnJlYWQoKSk7KUQucHVzaChIKX0pLGIub24oImVycm9yIixmdW5jdGlvbihIKXtHKEgpfSksYi5vbigiZW5kIixmdW5jdGlvbigpe0codm9pZCAwLEQuam9pbigiIikpfSl9aWYodm9pZCAwIT09dWUpaWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIHNldEltbWVkaWF0ZSlzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKXtmb3IobGV0IEQgb2YgdWUpYi53cml0ZShEKTtiLmVuZCgpfSk7ZWxzZXtmb3IobGV0IEQgb2YgdWUpYi53cml0ZShEKTtiLmVuZCgpfXJldHVybiBifTtjbGFzcyBqIGV4dGVuZHMgRXJyb3J7''@;'; put 'put ''Y29uc3RydWN0b3IoY2UsRywuLi5iKXtBcnJheS5pc0FycmF5KEcpJiYoRz1HLmpvaW4oIiAiKSksc3VwZXIoRyksdm9pZCAwIT09RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsaiksdGhpcy5jb2RlPWNlO2Zvcihjb25zdCBEIG9mIGIpZm9y''@;'; put 'put ''KGNvbnN0IEggaW4gRCl7Y29uc3QgTj1EW0hdO3RoaXNbSF09ei5pc0J1ZmZlcihOKT9OLnRvU3RyaW5nKCk6bnVsbD09Tj9OOkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoTikpfX19RS5TdHJpbmdpZmllcj1rLEUuQ3N2RXJyb3I9aixNLmV4cG9ydHM9RTtjb25zdCBWPWZ1bmN0aW9uKHVl''@;'; put 'put ''KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHVlJiZudWxsIT09dWUmJiFBcnJheS5pc0FycmF5KHVlKX0sQj1mdW5jdGlvbih1ZSl7cmV0dXJuIHVlLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihjZSxHKXtyZXR1cm4iXyIrRy50b0xvd2VyQ2FzZSgpfSl9LFk9Ii4iLmNoYXJDb2RlQXQo''@;'; put 'put ''MCksWD0vXFwoXFwpPy9nLFU9UmVnRXhwKCJbXi5bXFxdXSt8XFxbKD86KFteXCInXVteW10qKXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKSIsImciKSxxPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10p''@;'; put 'put ''KD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGVlPS9eXHcqJC8sdGU9ZnVuY3Rpb24odWUpe2NvbnN0IGNlPXR5cGVvZiB1ZTtyZXR1cm4ic3ltYm9sIj09PWNlfHwib2JqZWN0Ij09PWNlJiZ1ZSYmIltvYmplY3QgU3ltYm9sXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwo''@;'; put 'put ''dWUpfSxzZT1mdW5jdGlvbih1ZSl7aWYoInN0cmluZyI9PXR5cGVvZiB1ZXx8dGUodWUpKXJldHVybiB1ZTtjb25zdCBjZT1gJHt1ZX1gO3JldHVybiIwIj09Y2UmJjEvdWU9PS1JTkZJTklUWT8iLTAiOmNlfSxoZT1mdW5jdGlvbih1ZSxjZSl7bGV0IEc9MDtjb25zdCBiPShjZT1mdW5jdGlv''@;'; put 'put ''bih1ZSxjZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodWUpP3VlOmZ1bmN0aW9uKEcsYil7aWYoQXJyYXkuaXNBcnJheShHKSlyZXR1cm4hMTtjb25zdCBEPXR5cGVvZiBHO3JldHVybiEoIm51bWJlciIhPT1EJiYic3ltYm9sIiE9PUQmJiJib29sZWFuIiE9PUQmJkcmJiF0ZShHKSl8fGVlLnRl''@;'; put 'put ''c3QoRyl8fCFxLnRlc3QoRyl8fG51bGwhPWImJkcgaW4gT2JqZWN0KGIpfSh1ZSxjZSk/W3VlXTpmdW5jdGlvbihHKXtjb25zdCBiPVtdO3JldHVybiBHLmNoYXJDb2RlQXQoMCk9PT1ZJiZiLnB1c2goIiIpLEcucmVwbGFjZShVLGZ1bmN0aW9uKEQsSCxOLGcpe2xldCBDPUQ7Tj9DPWcucmVw''@;'; put 'put ''bGFjZShYLCIkMSIpOkgmJihDPUgudHJpbSgpKSxiLnB1c2goQyl9KSxifSh1ZSl9KGNlLHVlKSkubGVuZ3RoO2Zvcig7bnVsbCE9dWUmJkc8YjspdWU9dWVbc2UoY2VbRysrXSldO3JldHVybiBHJiZHPT09Yj91ZTp2b2lkIDB9fSw3NTY1OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZl''@;'; put 'put ''cjtjb25zdCBLPVIoNTA1Nikse1N0cmluZ0RlY29kZXI6SX09UigyNTUzKTtNLmV4cG9ydHM9ZnVuY3Rpb24oayxFPXt9KXtjb25zdCBqPVtdO2Z1bmN0aW9uIFYoWSl7WSYmai5wdXNoKFkudG9TdHJpbmcoKSl9ei5pc0J1ZmZlcihrKSYmKGs9KG5ldyBJKS53cml0ZShrKSk7bGV0IEI9bmV3''@;'; put 'put ''IEsuU3RyaW5naWZpZXIoRSk7Qi5vbigiZGF0YSIsVik7Zm9yKGxldCBZIG9mIGspQi53cml0ZShZKTtyZXR1cm4gQi5lbmQoKSxCLm9mZigiZGF0YSIsViksai5qb2luKCIiKX19LDQyODk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDIyMTUpLEs9ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImZvbyIpLEk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxrPUFycmF5LnByb3RvdHlwZS5jb25jYXQsRT1PYmplY3QuZGVmaW5lUHJvcGVydHksaj1SKDEwNDQpKCksVj1FJiZqLEI9ZnVuY3Rpb24oWCxVLHEsZWUpe2lmKFUgaW4g''@;'; put 'put ''WClpZighMD09PWVlKXtpZihYW1VdPT09cSlyZXR1cm59ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YodGU9ZWUpfHwiW29iamVjdCBGdW5jdGlvbl0iIT09SS5jYWxsKHRlKXx8IWVlKCkpcmV0dXJuO3ZhciB0ZTtWP0UoWCxVLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1''@;'; put 'put ''ZTpxLHdyaXRhYmxlOiEwfSk6WFtVXT1xfSxZPWZ1bmN0aW9uKFgsVSl7dmFyIHE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp7fSxlZT16KFUpO0smJihlZT1rLmNhbGwoZWUsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhVKSkpO2Zvcih2YXIgdGU9MDt0ZTxlZS5sZW5n''@;'; put 'put ''dGg7dGUrPTEpQihYLGVlW3RlXSxVW2VlW3RlXV0scVtlZVt0ZV1dKX07WS5zdXBwb3J0c0Rlc2NyaXB0b3JzPSEhVixNLmV4cG9ydHM9WX0sNTI1MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO08udXRpbHM9UigxMjc4KSxPLkNpcGhlcj1SKDU3NTYpLE8uREVTPVIoMzI3KSxPLkNCQz1SKDkw''@;'; put 'put ''NTEpLE8uRURFPVIoNjUxKX0sOTA1MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTc0NiksSz1SKDU3MTcpLEk9e307ZnVuY3Rpb24gayhFKXt6LmVxdWFsKEUubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBqPTA7ajx0''@;'; put 'put ''aGlzLml2Lmxlbmd0aDtqKyspdGhpcy5pdltqXT1FW2pdfU8uaW5zdGFudGlhdGU9ZnVuY3Rpb24oRSl7ZnVuY3Rpb24gaihYKXtFLmNhbGwodGhpcyxYKSx0aGlzLl9jYmNJbml0KCl9SyhqLEUpO2Zvcih2YXIgVj1PYmplY3Qua2V5cyhJKSxCPTA7QjxWLmxlbmd0aDtCKyspe3ZhciBZPVZb''@;'; put 'put ''Ql07ai5wcm90b3R5cGVbWV09SVtZXX1yZXR1cm4gai5jcmVhdGU9ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBqKFgpfSxqfSxJLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEU9bmV3IGsodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1FfSxJLl91cGRhdGU9ZnVuY3Rpb24oRSxqLFYs''@;'; put 'put ''Qil7dmFyIFg9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLFU9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIHE9MDtxPHRoaXMuYmxvY2tTaXplO3ErKylVW3FdXj1FW2orcV07Zm9yKFguX3VwZGF0ZS5jYWxsKHRoaXMsVSwwLFYs''@;'; put 'put ''QikscT0wO3E8dGhpcy5ibG9ja1NpemU7cSsrKVVbcV09VltCK3FdfWVsc2V7Zm9yKFguX3VwZGF0ZS5jYWxsKHRoaXMsRSxqLFYsQikscT0wO3E8dGhpcy5ibG9ja1NpemU7cSsrKVZbQitxXV49VVtxXTtmb3IocT0wO3E8dGhpcy5ibG9ja1NpemU7cSsrKVVbcV09RVtqK3FdfX19LDU3NTY6''@;'; put 'put ''KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk3NDYpO2Z1bmN0aW9uIEsoSSl7dGhpcy5vcHRpb25zPUksdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhp''@;'; put 'put ''cy5idWZmZXJPZmY9MH1NLmV4cG9ydHM9SyxLLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sSy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEkpe3JldHVybiAwPT09SS5sZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoSSk6dGhpcy5fdXBk''@;'; put 'put ''YXRlRW5jcnlwdChJKX0sSy5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihJLGspe2Zvcih2YXIgRT1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsSS5sZW5ndGgtayksaj0wO2o8RTtqKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYral09SVtrK2pdO3Jl''@;'; put 'put ''dHVybiB0aGlzLmJ1ZmZlck9mZis9RSxFfSxLLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsSSxrKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxLLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1m''@;'; put 'put ''dW5jdGlvbihJKXt2YXIgaz0wLEU9MCxWPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK0kubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYoays9dGhpcy5fYnVmZmVyKEksayksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZl''@;'; put 'put ''ci5sZW5ndGgmJihFKz10aGlzLl9mbHVzaEJ1ZmZlcihWLEUpKSk7Zm9yKHZhciBCPUkubGVuZ3RoLShJLmxlbmd0aC1rKSV0aGlzLmJsb2NrU2l6ZTtrPEI7ays9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKEksayxWLEUpLEUrPXRoaXMuYmxvY2tTaXplO2Zvcig7azxJLmxlbmd0aDtr''@;'; put 'put ''KyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09SVtrXTtyZXR1cm4gVn0sSy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oSSl7Zm9yKHZhciBrPTAsRT0wLGo9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitJLmxlbmd0aCkvdGhpcy5ibG9j''@;'; put 'put ''a1NpemUpLTEsVj1uZXcgQXJyYXkoaip0aGlzLmJsb2NrU2l6ZSk7aj4wO2otLSlrKz10aGlzLl9idWZmZXIoSSxrKSxFKz10aGlzLl9mbHVzaEJ1ZmZlcihWLEUpO3JldHVybiBrKz10aGlzLl9idWZmZXIoSSxrKSxWfSxLLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihJKXt2YXIgayxFO3Jl''@;'; put 'put ''dHVybiBJJiYoaz10aGlzLnVwZGF0ZShJKSksRT0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksaz9rLmNvbmNhdChFKTpFfSxLLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKEksayl7aWYoMD09PWspcmV0dXJuITE7Zm9yKDtr''@;'; put 'put ''PEkubGVuZ3RoOylJW2srK109MDtyZXR1cm4hMH0sSy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBJPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3Vw''@;'; put 'put ''ZGF0ZSh0aGlzLmJ1ZmZlciwwLEksMCksSX0sSy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEkpe3JldHVybiBJfSxLLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7ei5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRl''@;'; put 'put ''Y3J5cHQiKTt2YXIgST1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihJLDApLHRoaXMuX3VucGFkKEkpfX0sMzI3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NzQ2KSxLPVIoNTcxNyksST1SKDEyNzgpLGs9Uig1NzU2KTtmdW5jdGlv''@;'; put 'put ''biBFKCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIGooQil7ay5jYWxsKHRoaXMsQik7dmFyIFk9bmV3IEU7dGhpcy5fZGVzU3RhdGU9WSx0aGlzLmRlcml2ZUtleXMoWSxCLmtleSl9SyhqLGspLE0uZXhwb3J0cz1qLGouY3JlYXRlPWZ1bmN0aW9uKEIp''@;'; put 'put ''e3JldHVybiBuZXcgaihCKX07dmFyIFY9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO2oucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oQixZKXtCLmtleXM9bmV3IEFycmF5KDMyKSx6LmVxdWFsKFkubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBsZW5n''@;'; put 'put ''dGgiKTt2YXIgWD1JLnJlYWRVSW50MzJCRShZLDApLFU9SS5yZWFkVUludDMyQkUoWSw0KTtJLnBjMShYLFUsQi50bXAsMCksWD1CLnRtcFswXSxVPUIudG1wWzFdO2Zvcih2YXIgcT0wO3E8Qi5rZXlzLmxlbmd0aDtxKz0yKXt2YXIgZWU9VltxPj4+MV07WD1JLnIyOHNobChYLGVlKSxVPUku''@;'; put 'put ''cjI4c2hsKFUsZWUpLEkucGMyKFgsVSxCLmtleXMscSl9fSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEIsWSxYLFUpe3ZhciBxPXRoaXMuX2Rlc1N0YXRlLGVlPUkucmVhZFVJbnQzMkJFKEIsWSksdGU9SS5yZWFkVUludDMyQkUoQixZKzQpO0kuaXAoZWUsdGUscS50bXAsMCksZWU9''@;'; put 'put ''cS50bXBbMF0sdGU9cS50bXBbMV0sImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQocSxlZSx0ZSxxLnRtcCwwKTp0aGlzLl9kZWNyeXB0KHEsZWUsdGUscS50bXAsMCksdGU9cS50bXBbMV0sSS53cml0ZVVJbnQzMkJFKFgsZWU9cS50bXBbMF0sVSksSS53cml0ZVVJbnQzMkJF''@;'; put 'put ''KFgsdGUsVSs0KX0sai5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihCLFkpe2Zvcih2YXIgWD1CLmxlbmd0aC1ZLFU9WTtVPEIubGVuZ3RoO1UrKylCW1VdPVg7cmV0dXJuITB9LGoucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihCKXtmb3IodmFyIFk9QltCLmxlbmd0aC0xXSxYPUIubGVuZ3Ro''@;'; put 'put ''LVk7WDxCLmxlbmd0aDtYKyspei5lcXVhbChCW1hdLFkpO3JldHVybiBCLnNsaWNlKDAsQi5sZW5ndGgtWSl9LGoucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKEIsWSxYLFUscSl7Zm9yKHZhciBlZT1ZLHRlPVgsb2U9MDtvZTxCLmtleXMubGVuZ3RoO29lKz0yKXt2YXIgc2U9Qi5rZXlz''@;'; put 'put ''W29lXSxoZT1CLmtleXNbb2UrMV07SS5leHBhbmQodGUsQi50bXAsMCk7dmFyIHVlPUkuc3Vic3RpdHV0ZShzZV49Qi50bXBbMF0saGVePUIudG1wWzFdKSxjZT10ZTt0ZT0oZWVeSS5wZXJtdXRlKHVlKSk+Pj4wLGVlPWNlfUkucmlwKHRlLGVlLFUscSl9LGoucHJvdG90eXBlLl9kZWNyeXB0''@;'; put 'put ''PWZ1bmN0aW9uKEIsWSxYLFUscSl7Zm9yKHZhciBlZT1YLHRlPVksb2U9Qi5rZXlzLmxlbmd0aC0yO29lPj0wO29lLT0yKXt2YXIgc2U9Qi5rZXlzW29lXSxoZT1CLmtleXNbb2UrMV07SS5leHBhbmQoZWUsQi50bXAsMCk7dmFyIHVlPUkuc3Vic3RpdHV0ZShzZV49Qi50bXBbMF0saGVePUIu''@;'; put 'put ''dG1wWzFdKSxjZT1lZTtlZT0odGVeSS5wZXJtdXRlKHVlKSk+Pj4wLHRlPWNlfUkucmlwKGVlLHRlLFUscSl9fSw2NTE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk3NDYpLEs9Uig1NzE3KSxJPVIoNTc1Niksaz1SKDMyNyk7ZnVuY3Rpb24gRShWLEIpe3ouZXF1YWwoQi5sZW5n''@;'; put 'put ''dGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBZPUIuc2xpY2UoMCw4KSxYPUIuc2xpY2UoOCwxNiksVT1CLnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09Vj9bay5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpZfSksay5jcmVhdGUoe3R5cGU6ImRlY3J5cHQi''@;'; put 'put ''LGtleTpYfSksay5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpVfSldOltrLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5OlV9KSxrLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Olh9KSxrLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Oll9KV19ZnVuY3Rpb24gaihWKXtJLmNhbGwo''@;'; put 'put ''dGhpcyxWKTt2YXIgQj1uZXcgRSh0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9Qn1LKGosSSksTS5leHBvcnRzPWosai5jcmVhdGU9ZnVuY3Rpb24oVil7cmV0dXJuIG5ldyBqKFYpfSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFYsQixZLFgpe3ZhciBV''@;'; put 'put ''PXRoaXMuX2VkZVN0YXRlO1UuY2lwaGVyc1swXS5fdXBkYXRlKFYsQixZLFgpLFUuY2lwaGVyc1sxXS5fdXBkYXRlKFksWCxZLFgpLFUuY2lwaGVyc1syXS5fdXBkYXRlKFksWCxZLFgpfSxqLnByb3RvdHlwZS5fcGFkPWsucHJvdG90eXBlLl9wYWQsai5wcm90b3R5cGUuX3VucGFkPWsucHJv''@;'; put 'put ''dG90eXBlLl91bnBhZH0sMTI3ODooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPLnJlYWRVSW50MzJCRT1mdW5jdGlvbihJLGspe3JldHVybihJWzAra108PDI0fElbMStrXTw8MTZ8SVsyK2tdPDw4fElbMytrXSk+Pj4wfSxPLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oSSxrLEUpe0lbMCtFXT1rPj4+''@;'; put 'put ''MjQsSVsxK0VdPWs+Pj4xNiYyNTUsSVsyK0VdPWs+Pj44JjI1NSxJWzMrRV09MjU1Jmt9LE8uaXA9ZnVuY3Rpb24oSSxrLEUsail7Zm9yKHZhciBWPTAsQj0wLFk9NjtZPj0wO1ktPTIpe2Zvcih2YXIgWD0wO1g8PTI0O1grPTgpVjw8PTEsVnw9az4+PlgrWSYxO2ZvcihYPTA7WDw9MjQ7WCs9''@;'; put 'put ''OClWPDw9MSxWfD1JPj4+WCtZJjF9Zm9yKFk9NjtZPj0wO1ktPTIpe2ZvcihYPTE7WDw9MjU7WCs9OClCPDw9MSxCfD1rPj4+WCtZJjE7Zm9yKFg9MTtYPD0yNTtYKz04KUI8PD0xLEJ8PUk+Pj5YK1kmMX1FW2orMF09Vj4+PjAsRVtqKzFdPUI+Pj4wfSxPLnJpcD1mdW5jdGlvbihJLGssRSxq''@;'; put 'put ''KXtmb3IodmFyIFY9MCxCPTAsWT0wO1k8NDtZKyspZm9yKHZhciBYPTI0O1g+PTA7WC09OClWPDw9MSxWfD1rPj4+WCtZJjEsVjw8PTEsVnw9ST4+PlgrWSYxO2ZvcihZPTQ7WTw4O1krKylmb3IoWD0yNDtYPj0wO1gtPTgpQjw8PTEsQnw9az4+PlgrWSYxLEI8PD0xLEJ8PUk+Pj5YK1kmMTtF''@;'; put 'put ''W2orMF09Vj4+PjAsRVtqKzFdPUI+Pj4wfSxPLnBjMT1mdW5jdGlvbihJLGssRSxqKXtmb3IodmFyIFY9MCxCPTAsWT03O1k+PTU7WS0tKXtmb3IodmFyIFg9MDtYPD0yNDtYKz04KVY8PD0xLFZ8PWs+PlgrWSYxO2ZvcihYPTA7WDw9MjQ7WCs9OClWPDw9MSxWfD1JPj5YK1kmMX1mb3IoWD0w''@;'; put 'put ''O1g8PTI0O1grPTgpVjw8PTEsVnw9az4+WCtZJjE7Zm9yKFk9MTtZPD0zO1krKyl7Zm9yKFg9MDtYPD0yNDtYKz04KUI8PD0xLEJ8PWs+PlgrWSYxO2ZvcihYPTA7WDw9MjQ7WCs9OClCPDw9MSxCfD1JPj5YK1kmMX1mb3IoWD0wO1g8PTI0O1grPTgpQjw8PTEsQnw9ST4+WCtZJjE7RVtqKzBd''@;'; put 'put ''PVY+Pj4wLEVbaisxXT1CPj4+MH0sTy5yMjhzaGw9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gSTw8ayYyNjg0MzU0NTV8ST4+PjI4LWt9O3ZhciBSPVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYs''@;'; put 'put ''MTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO08ucGMyPWZ1bmN0aW9uKEksayxFLGope2Zvcih2YXIgVj0wLEI9MCxZPVIubGVuZ3RoPj4+MSxYPTA7WDxZO1grKylWPDw9MSxWfD1JPj4+UltYXSYxO2ZvcihYPVk7WDxSLmxlbmd0aDtYKyspQjw8PTEsQnw9''@;'; put 'put ''az4+PlJbWF0mMTtFW2orMF09Vj4+PjAsRVtqKzFdPUI+Pj4wfSxPLmV4cGFuZD1mdW5jdGlvbihJLGssRSl7dmFyIGo9MCxWPTA7aj0oMSZJKTw8NXxJPj4+Mjc7Zm9yKHZhciBCPTIzO0I+PTE1O0ItPTQpajw8PTYsanw9ST4+PkImNjM7Zm9yKEI9MTE7Qj49MztCLT00KVZ8PUk+Pj5CJjYz''@;'; put 'put ''LFY8PD02O1Z8PSgzMSZJKTw8MXxJPj4+MzEsa1tFKzBdPWo+Pj4wLGtbRSsxXT1WPj4+MH07dmFyIHo9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2LDks''@;'; put 'put ''MiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwyLDUs''@;'; put 'put ''MTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQsMTIs''@;'; put 'put ''Myw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwyLDcs''@;'; put 'put ''OCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywxMiwx''@;'; put 'put ''MCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDExLDE0''@;'; put 'put ''LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUsMywx''@;'; put 'put ''MSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07Ty5zdWJzdGl0dXRlPWZ1bmN0aW9uKEksayl7Zm9yKHZhciBFPTAsaj0w''@;'; put 'put ''O2o8NDtqKyspRTw8PTQsRXw9els2NCpqKyhJPj4+MTgtNipqJjYzKV07Zm9yKGo9MDtqPDQ7aisrKUU8PD00LEV8PXpbMjU2KzY0KmorKGs+Pj4xOC02KmomNjMpXTtyZXR1cm4gRT4+PjB9O3ZhciBLPVsxNiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2LDI3LDE0LDEsMjIsMzAsMjQs''@;'; put 'put ''OCwxOCwwLDUsMjksMjMsMTMsMTksMiwyNiwxMCwyMSwyOCw3XTtPLnBlcm11dGU9ZnVuY3Rpb24oSSl7Zm9yKHZhciBrPTAsRT0wO0U8Sy5sZW5ndGg7RSsrKWs8PD0xLGt8PUk+Pj5LW0VdJjE7cmV0dXJuIGs+Pj4wfSxPLnBhZFNwbGl0PWZ1bmN0aW9uKEksayxFKXtmb3IodmFyIGo9SS50''@;'; put 'put ''b1N0cmluZygyKTtqLmxlbmd0aDxrOylqPSIwIitqO2Zvcih2YXIgVj1bXSxCPTA7QjxrO0IrPUUpVi5wdXNoKGouc2xpY2UoQixCK0UpKTtyZXR1cm4gVi5qb2luKCIgIil9fSwyNjA3OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPVIoMzU5MCksST1SKDk3OTkpLGs9Uig3NDI2''@;'; put 'put ''KSxFPXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07Ty5EaWZmaWVIZWxsbWFuR3JvdXA9Ty5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9Ty5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uKGope3ZhciBWPW5ldyB6KElbal0ucHJpbWUsImhleCIpLEI9bmV3IHooSVtqXS5nZW4sImhleCIp''@;'; put 'put ''O3JldHVybiBuZXcgayhWLEIpfSxPLmNyZWF0ZURpZmZpZUhlbGxtYW49Ty5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIGooVixCLFksWCl7cmV0dXJuIHouaXNCdWZmZXIoQil8fHZvaWQgMD09PUVbQl0/aihWLCJiaW5hcnkiLEIsWSk6KEI9Qnx8ImJpbmFyeSIsWD1YfHwiYmluYXJ5IixZPVl8''@;'; put 'put ''fG5ldyB6KFsyXSksei5pc0J1ZmZlcihZKXx8KFk9bmV3IHooWSxYKSksIm51bWJlciI9PXR5cGVvZiBWP25ldyBrKEsoVixZKSxZLCEwKTooei5pc0J1ZmZlcihWKXx8KFY9bmV3IHooVixCKSksbmV3IGsoVixZLCEwKSkpfX0sNzQyNjooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIs''@;'; put 'put ''Sz1SKDM2MjApLEk9bmV3KFIoMzA0NykpLGs9bmV3IEsoMjQpLEU9bmV3IEsoMTEpLGo9bmV3IEsoMTApLFY9bmV3IEsoMyksQj1uZXcgSyg3KSxZPVIoMzU5MCksWD1SKDE3OTgpO2Z1bmN0aW9uIFUoc2UsaGUpe3JldHVybiBoZT1oZXx8InV0ZjgiLHouaXNCdWZmZXIoc2UpfHwoc2U9bmV3''@;'; put 'put ''IHooc2UsaGUpKSx0aGlzLl9wdWI9bmV3IEsoc2UpLHRoaXN9ZnVuY3Rpb24gcShzZSxoZSl7cmV0dXJuIGhlPWhlfHwidXRmOCIsei5pc0J1ZmZlcihzZSl8fChzZT1uZXcgeihzZSxoZSkpLHRoaXMuX3ByaXY9bmV3IEsoc2UpLHRoaXN9TS5leHBvcnRzPXRlO3ZhciBlZT17fTtmdW5jdGlv''@;'; put 'put ''biB0ZShzZSxoZSx1ZSl7dGhpcy5zZXRHZW5lcmF0b3IoaGUpLHRoaXMuX19wcmltZT1uZXcgSyhzZSksdGhpcy5fcHJpbWU9Sy5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49c2UubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVD''@;'; put 'put ''b2RlPXZvaWQgMCx1ZT8odGhpcy5zZXRQdWJsaWNLZXk9VSx0aGlzLnNldFByaXZhdGVLZXk9cSk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gb2Uoc2UsaGUpe3ZhciB1ZT1uZXcgeihzZS50b0FycmF5KCkpO3JldHVybiBoZT91ZS50b1N0cmluZyhoZSk6dWV9T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KHRlLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uKHNlLGhlKXt2YXIgdWU9aGUudG9TdHJpbmcoImhleCIpLGNl''@;'; put 'put ''PVt1ZSxzZS50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihjZSBpbiBlZSlyZXR1cm4gZWVbY2VdO3ZhciBHLGI9MDtpZihzZS5pc0V2ZW4oKXx8IVkuc2ltcGxlU2lldmV8fCFZLmZlcm1hdFRlc3Qoc2UpfHwhSS50ZXN0KHNlKSlyZXR1cm4gYis9MSxlZVtjZV09Yis9IjAyIj09PXVlfHwi''@;'; put 'put ''MDUiPT09dWU/ODo0LGI7c3dpdGNoKEkudGVzdChzZS5zaHJuKDEpKXx8KGIrPTIpLHVlKXtjYXNlIjAyIjpzZS5tb2QoaykuY21wKEUpJiYoYis9OCk7YnJlYWs7Y2FzZSIwNSI6KEc9c2UubW9kKGopKS5jbXAoVikmJkcuY21wKEIpJiYoYis9OCk7YnJlYWs7ZGVmYXVsdDpiKz00fXJldHVy''@;'; put 'put ''biBlZVtjZV09YixifSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSx0ZS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBLKFgodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRo''@;'; put 'put ''aXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSx0ZS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihzZSl7dmFyIGhlPShzZT0oc2U9bmV3IEsoc2UpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJl''@;'; put 'put ''ZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdWU9bmV3IHooaGUudG9BcnJheSgpKSxjZT10aGlzLmdldFByaW1lKCk7aWYodWUubGVuZ3RoPGNlLmxlbmd0aCl7dmFyIEc9bmV3IHooY2UubGVuZ3RoLXVlLmxlbmd0aCk7Ry5maWxsKDApLHVlPXouY29uY2F0KFtHLHVlXSl9cmV0dXJuIHVl''@;'; put 'put ''fSx0ZS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKHNlKXtyZXR1cm4gb2UodGhpcy5fcHViLHNlKX0sdGUucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oc2Upe3JldHVybiBvZSh0aGlzLl9wcml2LHNlKX0sdGUucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKHNl''@;'; put 'put ''KXtyZXR1cm4gb2UodGhpcy5fX3ByaW1lLHNlKX0sdGUucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihzZSl7cmV0dXJuIG9lKHRoaXMuX2dlbixzZSl9LHRlLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oc2UsaGUpe3JldHVybiBoZT1oZXx8InV0ZjgiLHouaXNCdWZm''@;'; put 'put ''ZXIoc2UpfHwoc2U9bmV3IHooc2UsaGUpKSx0aGlzLl9fZ2VuPXNlLHRoaXMuX2dlbj1uZXcgSyhzZSksdGhpc319LDM1OTA6KE0sTyxSKT0+e3ZhciB6PVIoMTc5OCk7TS5leHBvcnRzPXNlLHNlLnNpbXBsZVNpZXZlPXRlLHNlLmZlcm1hdFRlc3Q9b2U7dmFyIEs9UigzNjIwKSxJPW5ldyBL''@;'; put 'put ''KDI0KSxrPW5ldyhSKDMwNDcpKSxFPW5ldyBLKDEpLGo9bmV3IEsoMiksVj1uZXcgSyg1KSxCPShuZXcgSygxNiksbmV3IEsoOCksbmV3IEsoMTApKSxZPW5ldyBLKDMpLFg9KG5ldyBLKDcpLG5ldyBLKDExKSksVT1uZXcgSyg0KSxxPShuZXcgSygxMiksbnVsbCk7ZnVuY3Rpb24gdGUoaGUp''@;'; put 'put ''e2Zvcih2YXIgdWU9ZnVuY3Rpb24gZWUoKXtpZihudWxsIT09cSlyZXR1cm4gcTt2YXIgaGU9W107aGVbMF09Mjtmb3IodmFyIHVlPTEsY2U9MztjZTwxMDQ4NTc2O2NlKz0yKXtmb3IodmFyIEc9TWF0aC5jZWlsKE1hdGguc3FydChjZSkpLGI9MDtiPHVlJiZoZVtiXTw9RyYmY2UlaGVbYl0h''@;'; put 'put ''PTA7YisrKTt1ZSE9PWImJmhlW2JdPD1HfHwoaGVbdWUrK109Y2UpfXJldHVybiBxPWhlLGhlfSgpLGNlPTA7Y2U8dWUubGVuZ3RoO2NlKyspaWYoMD09PWhlLm1vZG4odWVbY2VdKSlyZXR1cm4gMD09PWhlLmNtcG4odWVbY2VdKTtyZXR1cm4hMH1mdW5jdGlvbiBvZShoZSl7dmFyIHVlPUsu''@;'; put 'put ''bW9udChoZSk7cmV0dXJuIDA9PT1qLnRvUmVkKHVlKS5yZWRQb3coaGUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gc2UoaGUsdWUpe2lmKGhlPDE2KXJldHVybiBuZXcgSygyPT09dWV8fDU9PT11ZT9bMTQwLDEyM106WzE0MCwzOV0pO3ZhciBjZSxHO2Zvcih1ZT1uZXcg''@;'; put 'put ''Syh1ZSk7Oyl7Zm9yKGNlPW5ldyBLKHooTWF0aC5jZWlsKGhlLzgpKSk7Y2UuYml0TGVuZ3RoKCk+aGU7KWNlLmlzaHJuKDEpO2lmKGNlLmlzRXZlbigpJiZjZS5pYWRkKEUpLGNlLnRlc3RuKDEpfHxjZS5pYWRkKGopLHVlLmNtcChqKSl7aWYoIXVlLmNtcChWKSlmb3IoO2NlLm1vZChCKS5j''@;'; put 'put ''bXAoWSk7KWNlLmlhZGQoVSl9ZWxzZSBmb3IoO2NlLm1vZChJKS5jbXAoWCk7KWNlLmlhZGQoVSk7aWYodGUoRz1jZS5zaHJuKDEpKSYmdGUoY2UpJiZvZShHKSYmb2UoY2UpJiZrLnRlc3QoRykmJmsudGVzdChjZSkpcmV0dXJuIGNlfX19LDM2MjA6ZnVuY3Rpb24oTSxPLFIpeyFmdW5jdGlv''@;'; put 'put ''bih6LEspeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gayhnLEMpe2cuc3VwZXJfPUM7dmFyIFM9ZnVuY3Rpb24oKXt9O1MucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5l''@;'; put 'put ''dyBTLGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gRShnLEMsUyl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoUz1D''@;'; put 'put ''LEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwxMCxTfHwiYmUiKSl9dmFyIGo7Im9iamVjdCI9PXR5cGVvZiB6P3ouZXhwb3J0cz1FOksuQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7aj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVy''@;'; put 'put ''OlIoNzc0OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBWKGcsQyl7dmFyIFM9Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBTPj02NSYmUzw9NzA/Uy01NTpTPj05NyYmUzw9MTAyP1MtODc6Uy00OCYxNX1mdW5jdGlvbiBCKGcsQyxTKXt2YXIgdj1WKGcsUyk7cmV0dXJuIFMtMT49QyYmKHZ8PVYo''@;'; put 'put ''ZyxTLTEpPDw0KSx2fWZ1bmN0aW9uIFkoZyxDLFMsdil7Zm9yKHZhciBwPTAsdz1NYXRoLm1pbihnLmxlbmd0aCxTKSxKPUM7Sjx3O0orKyl7dmFyIG5lPWcuY2hhckNvZGVBdChKKS00ODtwKj12LHArPW5lPj00OT9uZS00OSsxMDpuZT49MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9RS5pc0JO''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2YgRXx8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/''@;'; put 'put ''ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKTwwP2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLFMpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsUyk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0''@;'; put 'put ''aGlzLl9pbml0QXJyYXkoZyxDLFMpOyJoZXgiPT09QyYmKEM9MTYpLEkoQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHY9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHYrKyx0aGlzLm5lZ2F0aXZlPTEpLHY8Zy5sZW5ndGgmJigxNj09PUM/dGhp''@;'; put 'put ''cy5fcGFyc2VIZXgoZyx2LFMpOih0aGlzLl9wYXJzZUJhc2UoZyxDLHYpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsUyl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8Njcx''@;'; put 'put ''MDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4''@;'; put 'put ''ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUyl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLFMpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5s''@;'; put 'put ''ZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2''@;'; put 'put ''YXIgcCx3LEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xLHA9MDt2Pj0wO3YtPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YtMV08PDh8Z1t2LTJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYs''@;'; put 'put ''cCsrKTtlbHNlIGlmKCJsZSI9PT1TKWZvcih2PTAscD0wO3Y8Zy5sZW5ndGg7dis9Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdisxXTw8OHxnW3YrMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKysp''@;'; put 'put ''O3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLEMsUyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhp''@;'; put 'put ''cy53b3Jkc1t2XT0wO3ZhciBwLHc9MCxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMTt2Pj1DO3YtPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7ZWxzZSBmb3Iodj0oZy5s''@;'; put 'put ''ZW5ndGgtQyklMj09MD9DKzE6Qzt2PGcubGVuZ3RoO3YrPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9u''@;'; put 'put ''KGcsQyxTKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgdj0wLHA9MTtwPD02NzEwODg2MztwKj1DKXYrKzt2LS0scD1wL0N8MDtmb3IodmFyIHc9Zy5sZW5ndGgtUyxKPXcldixuZT1NYXRoLm1pbih3LHctSikrUyxkZT0wLGZlPVM7ZmU8bmU7ZmUrPXYpZGU9WShnLGZl''@;'; put 'put ''LGZlK3YsQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKTtpZigwIT09Sil7dmFyIHhlPTE7Zm9yKGRlPVkoZyxmZSxnLmxlbmd0aCxDKSxmZT0wO2ZlPEo7ZmUrKyl4ZSo9Qzt0aGlzLmltdWxuKHhlKSx0''@;'; put 'put ''aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcu''@;'; put 'put ''d29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlw''@;'; put 'put ''ZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRo''@;'; put 'put ''aXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBYPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5''@;'; put 'put ''LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0''@;'; put 'put ''ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5''@;'; put 'put ''MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZShnLEMsUyl7Uy5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHY9Zy5sZW5ndGgrQy5sZW5ndGh8MDtTLmxlbmd0aD12LHY9di0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLHc9MHxDLndvcmRzWzBd''@;'; put 'put ''LEo9cCp3LGRlPUovNjcxMDg4NjR8MDtTLndvcmRzWzBdPTY3MTA4ODYzJko7Zm9yKHZhciBmZT0xO2ZlPHY7ZmUrKyl7Zm9yKHZhciB4ZT1kZT4+PjI2LExlPTY3MTA4ODYzJmRlLEZlPU1hdGgubWluKGZlLEMubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtZy5sZW5ndGgrMSk7T2U8PUZl''@;'; put 'put ''O09lKyspeGUrPShKPShwPTB8Zy53b3Jkc1tmZS1PZXwwXSkqKHc9MHxDLndvcmRzW09lXSkrTGUpLzY3MTA4ODY0fDAsTGU9NjcxMDg4NjMmSjtTLndvcmRzW2ZlXT0wfExlLGRlPTB8eGV9cmV0dXJuIDAhPT1kZT9TLndvcmRzW2ZlXT0wfGRlOlMubGVuZ3RoLS0sUy5zdHJpcCgpfUUucHJv''@;'; put 'put ''dG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFyIFM7aWYoQz0wfEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7Uz0iIjtmb3IodmFyIHY9MCxwPTAsdz0wO3c8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj10aGlzLndvcmRzW3ddLG5lPSgxNjc3NzIxNSYoSjw8dnxwKSkudG9T''@;'; put 'put ''dHJpbmcoMTYpO1M9MCE9KHA9Sj4+PjI0LXYmMTY3NzcyMTUpfHx3IT09dGhpcy5sZW5ndGgtMT9YWzYtbmUubGVuZ3RoXStuZStTOm5lK1MsKHYrPTIpPj0yNiYmKHYtPTI2LHctLSl9Zm9yKDAhPT1wJiYoUz1wLnRvU3RyaW5nKDE2KStTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVy''@;'; put 'put ''biAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIGRlPVVbZ10sZmU9cVtnXTtTPSIiO3ZhciB4ZT10aGlzLmNsb25lKCk7Zm9yKHhlLm5lZ2F0aXZlPTA7IXhlLmlzWmVybygpOyl7dmFyIExlPXhlLm1vZG4oZmUpLnRvU3RyaW5n''@;'; put 'put ''KGcpO1M9KHhlPXhlLmlkaXZuKGZlKSkuaXNaZXJvKCk/TGUrUzpYW2RlLUxlLmxlbmd0aF0rTGUrU31mb3IodGhpcy5pc1plcm8oKSYmKFM9IjAiK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31JKCExLCJCYXNlIHNob3Vs''@;'; put 'put ''ZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00''@;'; put 'put ''NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PWopLHRoaXMudG9BcnJheUxpa2UoaixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXks''@;'; put 'put ''ZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PXRoaXMuYnl0ZUxlbmd0aCgpLHA9U3x8TWF0aC5tYXgoMSx2KTtJKHY8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0''@;'; put 'put ''aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB3LEosbmU9ImxlIj09PUMsZGU9bmV3IGcocCksZmU9dGhpcy5jbG9uZSgpO2lmKG5lKXtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtKXT13O2Zvcig7SjxwO0orKylkZVtKXT0wfWVsc2V7''@;'; put 'put ''Zm9yKEo9MDtKPHAtdjtKKyspZGVbSl09MDtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtwLUotMV09d31yZXR1cm4gZGV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5j''@;'; put 'put ''bHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxTPTA7cmV0dXJuIEM+PTQwOTYmJihTKz0xMyxDPj4+PTEzKSxDPj02NCYmKFMrPTcsQz4+Pj03KSxDPj04JiYoUys9NCxDPj4+PTQpLEM+PTImJihTKz0yLEM+Pj49MiksUytDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7''@;'; put 'put ''aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsUz0wO3JldHVybiEoODE5MSZDKSYmKFMrPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoUys9NyxDPj4+PTcpLCEoMTUmQykmJihTKz00LEM+Pj49NCksISgzJkMpJiYoUys9MixDPj4+PTIpLCEoMSZDKSYmUysrLFN9LEUucHJvdG90eXBlLmJpdExl''@;'; put 'put ''bmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxD''@;'; put 'put ''PTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbQ10pO2lmKGcrPVMsMjYhPT1TKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnBy''@;'; put 'put ''b3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5p''@;'; put 'put ''YWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMu''@;'; put 'put ''d29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0NdO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMp''@;'; put 'put ''fSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgQztDPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIFM9MDtTPEMubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPXRoaXMud29yZHNbU10mZy53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhp''@;'; put 'put ''cy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5p''@;'; put 'put ''YW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIg''@;'; put 'put ''QyxTO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMsUz1nKTooQz1nLFM9dGhpcyk7Zm9yKHZhciB2PTA7djxTLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdXlMud29yZHNbdl07aWYodGhpcyE9PUMpZm9yKDt2PEMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29y''@;'; put 'put ''ZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlz''@;'; put 'put ''KX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLFM9ZyUyNjt0aGlzLl9leHBhbmQoQyksUz4wJiZDLS07Zm9yKHZhciB2PTA7djxDO3YrKyl0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJn50aGlz''@;'; put 'put ''LndvcmRzW3ZdO3JldHVybiBTPjAmJih0aGlzLndvcmRzW3ZdPX50aGlzLndvcmRzW3ZdJjY3MTA4ODYzPj4yNi1TKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlv''@;'; put 'put ''bihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nLzI2fDAsdj1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdPUM/dGhpcy53b3Jkc1tTXXwxPDx2OnRoaXMud29yZHNbU10mfigxPDx2KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlh''@;'; put 'put ''ZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsUyx2O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVn''@;'; put 'put ''YXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4''@;'; put 'put ''ODYzJihDPSgwfFMud29yZHNbd10pKygwfHYud29yZHNbd10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9PXAmJnc8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9Uy5sZW5ndGgsMCE9PXApdGhpcy53''@;'; put 'put ''b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoUyE9PXRoaXMpZm9yKDt3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPVMud29yZHNbd107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUm''@;'; put 'put ''JjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsQz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVu''@;'; put 'put ''Z3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigw''@;'; put 'put ''IT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgUyx2LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNb''@;'; put 'put ''MF09MCx0aGlzO3A+MD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgdz0wLEo9MDtKPHYubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pLSgwfHYud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7Zm9yKDswIT09dyYmSjxTLmxlbmd0aDtKKysp''@;'; put 'put ''dz0oQz0oMHxTLndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2lmKDA9PT13JiZKPFMubGVuZ3RoJiZTIT09dGhpcylmb3IoO0o8Uy5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09Uy53b3Jkc1tKXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5n''@;'; put 'put ''dGgsSiksUyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIHRlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwLHcsSj1nLndvcmRzLG5lPUMud29yZHMsZGU9Uy53''@;'; put 'put ''b3JkcyxmZT0wLHhlPTB8SlswXSxMZT04MTkxJnhlLEZlPXhlPj4+MTMsT2U9MHxKWzFdLEJlPTgxOTEmT2UsV2U9T2U+Pj4xMyxLZT0wfEpbMl0sWWU9ODE5MSZLZSxKZT1LZT4+PjEzLGx0PTB8SlszXSxQZT04MTkxJmx0LGJlPWx0Pj4+MTMsQWU9MHxKWzRdLFRlPTgxOTEmQWUscWU9QWU+''@;'; put 'put ''Pj4xMyxYZT0wfEpbNV0sVWU9ODE5MSZYZSxodD1YZT4+PjEzLE1lPTB8Sls2XSxEZT04MTkxJk1lLHplPU1lPj4+MTMsaXQ9MHxKWzddLHV0PTgxOTEmaXQsTXQ9aXQ+Pj4xMyxIdD0wfEpbOF0sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENuPTB8Sls5XSxVdD04MTkxJkNuLGJuPUNuPj4+MTMs''@;'; put 'put ''V249MHxuZVswXSxlbj04MTkxJlduLCRuPVduPj4+MTMsTm49MHxuZVsxXSxmdD04MTkxJk5uLGZuPU5uPj4+MTMsaG49MHxuZVsyXSx3dD04MTkxJmhuLFh0PWhuPj4+MTMsX3Q9MHxuZVszXSxOdD04MTkxJl90LHZuPV90Pj4+MTMscnQ9MHxuZVs0XSxJdD04MTkxJnJ0LEp0PXJ0Pj4+MTMs''@;'; put 'put ''RHQ9MHxuZVs1XSxwdD04MTkxJkR0LFl0PUR0Pj4+MTMsTG49MHxuZVs2XSx6dD04MTkxJkxuLHluPUxuPj4+MTMseG49MHxuZVs3XSxzbj04MTkxJnhuLEJuPXhuPj4+MTMsT249MHxuZVs4XSwkdD04MTkxJk9uLEZuPU9uPj4+MTMsbmk9MHxuZVs5XSxsbj04MTkxJm5pLGpuPW5pPj4+MTM7''@;'; put 'put ''Uy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9MTk7dmFyIHFyPShmZSsodj1NYXRoLmltdWwoTGUsZW4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKExlLCRuKSkrTWF0aC5pbXVsKEZlLGVuKXwwKSk8PDEzKXwwO2ZlPSgodz1NYXRoLmltdWwoRmUsJG4pKSso''@;'; put 'put ''cD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoQmUsZW4pLHA9KHA9TWF0aC5pbXVsKEJlLCRuKSkrTWF0aC5pbXVsKFdlLGVuKXwwLHc9TWF0aC5pbXVsKFdlLCRuKTt2YXIgZ2k9KGZlKyh2PXYrTWF0aC5pbXVsKExlLGZ0KXwwKXwwKSsoKDgxOTEmKHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoTGUsZm4pfDApK01hdGguaW11bChGZSxmdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsZm4pfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChZZSxlbikscD0ocD1NYXRoLmltdWwoWWUsJG4pKStNYXRo''@;'; put 'put ''LmltdWwoSmUsZW4pfDAsdz1NYXRoLmltdWwoSmUsJG4pLHY9ditNYXRoLmltdWwoQmUsZnQpfDAscD0ocD1wK01hdGguaW11bChCZSxmbil8MCkrTWF0aC5pbXVsKFdlLGZ0KXwwLHc9dytNYXRoLmltdWwoV2UsZm4pfDA7dmFyIHhyPShmZSsodj12K01hdGguaW11bChMZSx3dCl8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFh0KXwwKStNYXRoLmltdWwoRmUsd3QpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFh0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUGUsZW4pLHA9KHA9TWF0aC5pbXVsKFBl''@;'; put 'put ''LCRuKSkrTWF0aC5pbXVsKGJlLGVuKXwwLHc9TWF0aC5pbXVsKGJlLCRuKSx2PXYrTWF0aC5pbXVsKFllLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsZm4pfDApK01hdGguaW11bChKZSxmdCl8MCx3PXcrTWF0aC5pbXVsKEplLGZuKXwwLHY9ditNYXRoLmltdWwoQmUsd3QpfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChCZSxYdCl8MCkrTWF0aC5pbXVsKFdlLHd0KXwwLHc9dytNYXRoLmltdWwoV2UsWHQpfDA7dmFyIFVpPShmZSsodj12K01hdGguaW11bChMZSxOdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLHZuKXwwKStNYXRoLmltdWwoRmUsTnQpfDApKTw8MTMpfDA7''@;'; put 'put ''ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLHZuKXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVGUsZW4pLHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKHFlLGVuKXwwLHc9TWF0aC5pbXVsKHFlLCRuKSx2PXYrTWF0aC5pbXVsKFBlLGZ0''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsZm4pfDApK01hdGguaW11bChiZSxmdCl8MCx3PXcrTWF0aC5pbXVsKGJlLGZuKXwwLHY9ditNYXRoLmltdWwoWWUsd3QpfDAscD0ocD1wK01hdGguaW11bChZZSxYdCl8MCkrTWF0aC5pbXVsKEplLHd0KXwwLHc9dytNYXRoLmltdWwoSmUsWHQpfDAs''@;'; put 'put ''dj12K01hdGguaW11bChCZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKEJlLHZuKXwwKStNYXRoLmltdWwoV2UsTnQpfDAsdz13K01hdGguaW11bChXZSx2bil8MDt2YXIgS3I9KGZlKyh2PXYrTWF0aC5pbXVsKExlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsSnQpfDAp''@;'; put 'put ''K01hdGguaW11bChGZSxJdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsSnQpfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChVZSxlbikscD0ocD1NYXRoLmltdWwoVWUsJG4pKStNYXRoLmltdWwoaHQsZW4pfDAsdz1NYXRoLmlt''@;'; put 'put ''dWwoaHQsJG4pLHY9ditNYXRoLmltdWwoVGUsZnQpfDAscD0ocD1wK01hdGguaW11bChUZSxmbil8MCkrTWF0aC5pbXVsKHFlLGZ0KXwwLHc9dytNYXRoLmltdWwocWUsZm4pfDAsdj12K01hdGguaW11bChQZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUs''@;'; put 'put ''d3QpfDAsdz13K01hdGguaW11bChiZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFllLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsdm4pfDApK01hdGguaW11bChKZSxOdCl8MCx3PXcrTWF0aC5pbXVsKEplLHZuKXwwLHY9ditNYXRoLmltdWwoQmUsSXQpfDAscD0ocD1wK01hdGguaW11bChCZSxK''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFdlLEl0KXwwLHc9dytNYXRoLmltdWwoV2UsSnQpfDA7dmFyIG5vPShmZSsodj12K01hdGguaW11bChMZSxwdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwoRmUscHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5p''@;'; put 'put ''bXVsKEZlLFl0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoRGUsZW4pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5pbXVsKHplLGVuKXwwLHc9TWF0aC5pbXVsKHplLCRuKSx2PXYrTWF0aC5pbXVsKFVlLGZ0KXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoVWUsZm4pfDApK01hdGguaW11bChodCxmdCl8MCx3PXcrTWF0aC5pbXVsKGh0LGZuKXwwLHY9ditNYXRoLmltdWwoVGUsd3QpfDAscD0ocD1wK01hdGguaW11bChUZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLHc9dytNYXRoLmltdWwocWUsWHQpfDAsdj12K01hdGguaW11bChQ''@;'; put 'put ''ZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLHZuKXwwKStNYXRoLmltdWwoYmUsTnQpfDAsdz13K01hdGguaW11bChiZSx2bil8MCx2PXYrTWF0aC5pbXVsKFllLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsSnQpfDApK01hdGguaW11bChKZSxJdCl8MCx3PXcrTWF0aC5pbXVsKEplLEp0''@;'; put 'put ''KXwwLHY9ditNYXRoLmltdWwoQmUscHQpfDAscD0ocD1wK01hdGguaW11bChCZSxZdCl8MCkrTWF0aC5pbXVsKFdlLHB0KXwwLHc9dytNYXRoLmltdWwoV2UsWXQpfDA7dmFyIEZyPShmZSsodj12K01hdGguaW11bChMZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLHlu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRmUsenQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLHluKXwwKSsocD4+PjEzKXwwKSsoRnI+Pj4yNil8MCxGciY9NjcxMDg4NjMsdj1NYXRoLmltdWwodXQsZW4pLHA9KHA9TWF0aC5pbXVsKHV0LCRuKSkrTWF0aC5pbXVsKE10LGVuKXwwLHc9TWF0''@;'; put 'put ''aC5pbXVsKE10LCRuKSx2PXYrTWF0aC5pbXVsKERlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bCh6ZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHplLGZuKXwwLHY9ditNYXRoLmltdWwoVWUsd3QpfDAscD0ocD1wK01hdGguaW11bChVZSxYdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KGh0LHd0KXwwLHc9dytNYXRoLmltdWwoaHQsWHQpfDAsdj12K01hdGguaW11bChUZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHZuKXwwKStNYXRoLmltdWwocWUsTnQpfDAsdz13K01hdGguaW11bChxZSx2bil8MCx2PXYrTWF0aC5pbXVsKFBlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''UGUsSnQpfDApK01hdGguaW11bChiZSxJdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEp0KXwwLHY9ditNYXRoLmltdWwoWWUscHQpfDAscD0ocD1wK01hdGguaW11bChZZSxZdCl8MCkrTWF0aC5pbXVsKEplLHB0KXwwLHc9dytNYXRoLmltdWwoSmUsWXQpfDAsdj12K01hdGguaW11bChCZSx6dCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKEJlLHluKXwwKStNYXRoLmltdWwoV2UsenQpfDAsdz13K01hdGguaW11bChXZSx5bil8MDt2YXIgcWk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsQm4pfDApK01hdGguaW11bChGZSxzbil8MCkp''@;'; put 'put ''PDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsQm4pfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChQdCxlbikscD0ocD1NYXRoLmltdWwoUHQsJG4pKStNYXRoLmltdWwob24sZW4pfDAsdz1NYXRoLmltdWwob24sJG4pLHY9ditNYXRoLmlt''@;'; put 'put ''dWwodXQsZnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxmbil8MCkrTWF0aC5pbXVsKE10LGZ0KXwwLHc9dytNYXRoLmltdWwoTXQsZm4pfDAsdj12K01hdGguaW11bChEZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFh0KXwwKStNYXRoLmltdWwoemUsd3QpfDAsdz13K01hdGguaW11bCh6''@;'; put 'put ''ZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFVlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsdm4pfDApK01hdGguaW11bChodCxOdCl8MCx3PXcrTWF0aC5pbXVsKGh0LHZuKXwwLHY9ditNYXRoLmltdWwoVGUsSXQpfDAscD0ocD1wK01hdGguaW11bChUZSxKdCl8MCkrTWF0aC5pbXVsKHFlLEl0''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwocWUsSnQpfDAsdj12K01hdGguaW11bChQZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmltdWwoYmUscHQpfDAsdz13K01hdGguaW11bChiZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFllLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUseW4p''@;'; put 'put ''fDApK01hdGguaW11bChKZSx6dCl8MCx3PXcrTWF0aC5pbXVsKEplLHluKXwwLHY9ditNYXRoLmltdWwoQmUsc24pfDAscD0ocD1wK01hdGguaW11bChCZSxCbil8MCkrTWF0aC5pbXVsKFdlLHNuKXwwLHc9dytNYXRoLmltdWwoV2UsQm4pfDA7dmFyIEppPShmZSsodj12K01hdGguaW11bChM''@;'; put 'put ''ZSwkdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEZuKXwwKStNYXRoLmltdWwoRmUsJHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEZuKXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZW4pLHA9KHA9''@;'; put 'put ''TWF0aC5pbXVsKFV0LCRuKSkrTWF0aC5pbXVsKGJuLGVuKXwwLHc9TWF0aC5pbXVsKGJuLCRuKSx2PXYrTWF0aC5pbXVsKFB0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsZm4pfDApK01hdGguaW11bChvbixmdCl8MCx3PXcrTWF0aC5pbXVsKG9uLGZuKXwwLHY9ditNYXRoLmltdWwodXQs''@;'; put 'put ''d3QpfDAscD0ocD1wK01hdGguaW11bCh1dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0KXwwLHc9dytNYXRoLmltdWwoTXQsWHQpfDAsdj12K01hdGguaW11bChEZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLHZuKXwwKStNYXRoLmltdWwoemUsTnQpfDAsdz13K01hdGguaW11bCh6ZSx2bil8''@;'; put 'put ''MCx2PXYrTWF0aC5pbXVsKFVlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsSnQpfDApK01hdGguaW11bChodCxJdCl8MCx3PXcrTWF0aC5pbXVsKGh0LEp0KXwwLHY9ditNYXRoLmltdWwoVGUscHQpfDAscD0ocD1wK01hdGguaW11bChUZSxZdCl8MCkrTWF0aC5pbXVsKHFlLHB0KXwwLHc9''@;'; put 'put ''dytNYXRoLmltdWwocWUsWXQpfDAsdj12K01hdGguaW11bChQZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLHluKXwwKStNYXRoLmltdWwoYmUsenQpfDAsdz13K01hdGguaW11bChiZSx5bil8MCx2PXYrTWF0aC5pbXVsKFllLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsQm4pfDApK01h''@;'; put 'put ''dGguaW11bChKZSxzbil8MCx3PXcrTWF0aC5pbXVsKEplLEJuKXwwLHY9ditNYXRoLmltdWwoQmUsJHQpfDAscD0ocD1wK01hdGguaW11bChCZSxGbil8MCkrTWF0aC5pbXVsKFdlLCR0KXwwLHc9dytNYXRoLmltdWwoV2UsRm4pfDA7dmFyIGFvPShmZSsodj12K01hdGguaW11bChMZSxsbil8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGpuKXwwKStNYXRoLmltdWwoRmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGpuKXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZnQpLHA9KHA9TWF0aC5p''@;'; put 'put ''bXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJuLGZ0KXwwLHc9TWF0aC5pbXVsKGJuLGZuKSx2PXYrTWF0aC5pbXVsKFB0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWHQpfDApK01hdGguaW11bChvbix3dCl8MCx3PXcrTWF0aC5pbXVsKG9uLFh0KXwwLHY9ditNYXRoLmltdWwodXQsTnQpfDAs''@;'; put 'put ''cD0ocD1wK01hdGguaW11bCh1dCx2bil8MCkrTWF0aC5pbXVsKE10LE50KXwwLHc9dytNYXRoLmltdWwoTXQsdm4pfDAsdj12K01hdGguaW11bChEZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLEp0KXwwKStNYXRoLmltdWwoemUsSXQpfDAsdz13K01hdGguaW11bCh6ZSxKdCl8MCx2PXYr''@;'; put 'put ''TWF0aC5pbXVsKFVlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWXQpfDApK01hdGguaW11bChodCxwdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFl0KXwwLHY9ditNYXRoLmltdWwoVGUsenQpfDAscD0ocD1wK01hdGguaW11bChUZSx5bil8MCkrTWF0aC5pbXVsKHFlLHp0KXwwLHc9dytNYXRo''@;'; put 'put ''LmltdWwocWUseW4pfDAsdj12K01hdGguaW11bChQZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFBlLEJuKXwwKStNYXRoLmltdWwoYmUsc24pfDAsdz13K01hdGguaW11bChiZSxCbil8MCx2PXYrTWF0aC5pbXVsKFllLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsRm4pfDApK01hdGguaW11''@;'; put 'put ''bChKZSwkdCl8MCx3PXcrTWF0aC5pbXVsKEplLEZuKXwwO3ZhciBybz0oZmUrKHY9ditNYXRoLmltdWwoQmUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChCZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChXZSxqbil8MCkr''@;'; put 'put ''KHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHd0KSxwPShwPU1hdGguaW11bChVdCxYdCkpK01hdGguaW11bChibix3dCl8MCx3PU1hdGguaW11bChibixYdCksdj12K01hdGguaW11bChQdCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LHZuKXww''@;'; put 'put ''KStNYXRoLmltdWwob24sTnQpfDAsdz13K01hdGguaW11bChvbix2bil8MCx2PXYrTWF0aC5pbXVsKHV0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsSnQpfDApK01hdGguaW11bChNdCxJdCl8MCx3PXcrTWF0aC5pbXVsKE10LEp0KXwwLHY9ditNYXRoLmltdWwoRGUscHQpfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChEZSxZdCl8MCkrTWF0aC5pbXVsKHplLHB0KXwwLHc9dytNYXRoLmltdWwoemUsWXQpfDAsdj12K01hdGguaW11bChVZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHluKXwwKStNYXRoLmltdWwoaHQsenQpfDAsdz13K01hdGguaW11bChodCx5bil8MCx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKFRlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChxZSxzbil8MCx3PXcrTWF0aC5pbXVsKHFlLEJuKXwwLHY9ditNYXRoLmltdWwoUGUsJHQpfDAscD0ocD1wK01hdGguaW11bChQZSxGbil8MCkrTWF0aC5pbXVsKGJlLCR0KXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''YmUsRm4pfDA7dmFyIGlvPShmZSsodj12K01hdGguaW11bChZZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFllLGpuKXwwKStNYXRoLmltdWwoSmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEplLGpuKXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxp''@;'; put 'put ''byY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsTnQpLHA9KHA9TWF0aC5pbXVsKFV0LHZuKSkrTWF0aC5pbXVsKGJuLE50KXwwLHc9TWF0aC5pbXVsKGJuLHZuKSx2PXYrTWF0aC5pbXVsKFB0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsSnQpfDApK01hdGguaW11bChvbixJdCl8MCx3PXcr''@;'; put 'put ''TWF0aC5pbXVsKG9uLEp0KXwwLHY9ditNYXRoLmltdWwodXQscHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxZdCl8MCkrTWF0aC5pbXVsKE10LHB0KXwwLHc9dytNYXRoLmltdWwoTXQsWXQpfDAsdj12K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLHluKXwwKStNYXRo''@;'; put 'put ''LmltdWwoemUsenQpfDAsdz13K01hdGguaW11bCh6ZSx5bil8MCx2PXYrTWF0aC5pbXVsKFVlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCx3PXcrTWF0aC5pbXVsKGh0LEJuKXwwLHY9ditNYXRoLmltdWwoVGUsJHQpfDAscD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChUZSxGbil8MCkrTWF0aC5pbXVsKHFlLCR0KXwwLHc9dytNYXRoLmltdWwocWUsRm4pfDA7dmFyIEdpPShmZSsodj12K01hdGguaW11bChQZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFBlLGpuKXwwKStNYXRoLmltdWwoYmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3''@;'; put 'put ''PXcrTWF0aC5pbXVsKGJlLGpuKXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsSXQpLHA9KHA9TWF0aC5pbXVsKFV0LEp0KSkrTWF0aC5pbXVsKGJuLEl0KXwwLHc9TWF0aC5pbXVsKGJuLEp0KSx2PXYrTWF0aC5pbXVsKFB0LHB0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoUHQsWXQpfDApK01hdGguaW11bChvbixwdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFl0KXwwLHY9ditNYXRoLmltdWwodXQsenQpfDAscD0ocD1wK01hdGguaW11bCh1dCx5bil8MCkrTWF0aC5pbXVsKE10LHp0KXwwLHc9dytNYXRoLmltdWwoTXQseW4pfDAsdj12K01h''@;'; put 'put ''dGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoemUsc24pfDAsdz13K01hdGguaW11bCh6ZSxCbil8MCx2PXYrTWF0aC5pbXVsKFVlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsRm4pfDApK01hdGguaW11bChodCwkdCl8MCx3PXcrTWF0aC5p''@;'; put 'put ''bXVsKGh0LEZuKXwwO3ZhciBobz0oZmUrKHY9ditNYXRoLmltdWwoVGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChUZSxqbil8MCkrTWF0aC5pbXVsKHFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChxZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYp''@;'; put 'put ''fDAsaG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHB0KSxwPShwPU1hdGguaW11bChVdCxZdCkpK01hdGguaW11bChibixwdCl8MCx3PU1hdGguaW11bChibixZdCksdj12K01hdGguaW11bChQdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LHluKXwwKStNYXRoLmltdWwob24senQpfDAs''@;'; put 'put ''dz13K01hdGguaW11bChvbix5bil8MCx2PXYrTWF0aC5pbXVsKHV0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwodXQsQm4pfDApK01hdGguaW11bChNdCxzbil8MCx3PXcrTWF0aC5pbXVsKE10LEJuKXwwLHY9ditNYXRoLmltdWwoRGUsJHQpfDAscD0ocD1wK01hdGguaW11bChEZSxGbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHplLCR0KXwwLHc9dytNYXRoLmltdWwoemUsRm4pfDA7dmFyIHlyPShmZSsodj12K01hdGguaW11bChVZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFVlLGpuKXwwKStNYXRoLmltdWwoaHQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGh0''@;'; put 'put ''LGpuKXwwKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsenQpLHA9KHA9TWF0aC5pbXVsKFV0LHluKSkrTWF0aC5pbXVsKGJuLHp0KXwwLHc9TWF0aC5pbXVsKGJuLHluKSx2PXYrTWF0aC5pbXVsKFB0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''UHQsQm4pfDApK01hdGguaW11bChvbixzbil8MCx3PXcrTWF0aC5pbXVsKG9uLEJuKXwwLHY9ditNYXRoLmltdWwodXQsJHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxGbil8MCkrTWF0aC5pbXVsKE10LCR0KXwwLHc9dytNYXRoLmltdWwoTXQsRm4pfDA7dmFyIFBpPShmZSsodj12K01hdGgu''@;'; put 'put ''aW11bChEZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoemUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHplLGpuKXwwKSsocD4+PjEzKXwwKSsoUGk+Pj4yNil8MCxQaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsc24p''@;'; put 'put ''LHA9KHA9TWF0aC5pbXVsKFV0LEJuKSkrTWF0aC5pbXVsKGJuLHNuKXwwLHc9TWF0aC5pbXVsKGJuLEJuKSx2PXYrTWF0aC5pbXVsKFB0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsRm4pfDApK01hdGguaW11bChvbiwkdCl8MCx3PXcrTWF0aC5pbXVsKG9uLEZuKXwwO3ZhciBMbz0oZmUr''@;'; put 'put ''KHY9ditNYXRoLmltdWwodXQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh1dCxqbil8MCkrTWF0aC5pbXVsKE10LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChNdCxqbil8MCkrKHA+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3MTA4ODYzLHY9TWF0aC5p''@;'; put 'put ''bXVsKFV0LCR0KSxwPShwPU1hdGguaW11bChVdCxGbikpK01hdGguaW11bChibiwkdCl8MCx3PU1hdGguaW11bChibixGbik7dmFyIGhzPShmZSsodj12K01hdGguaW11bChQdCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFB0LGpuKXwwKStNYXRoLmltdWwob24sbG4pfDAp''@;'; put 'put ''KTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKG9uLGpuKXwwKSsocD4+PjEzKXwwKSsoaHM+Pj4yNil8MCxocyY9NjcxMDg4NjM7dmFyIHJzPShmZSsodj1NYXRoLmltdWwoVXQsbG4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFV0LGpuKSkrTWF0aC5pbXVsKGJuLGxuKXwwKSk8PDEz''@;'; put 'put ''KXwwO3JldHVybiBmZT0oKHc9TWF0aC5pbXVsKGJuLGpuKSkrKHA+Pj4xMyl8MCkrKHJzPj4+MjYpfDAscnMmPTY3MTA4ODYzLGRlWzBdPXFyLGRlWzFdPWdpLGRlWzJdPXhyLGRlWzNdPVVpLGRlWzRdPUtyLGRlWzVdPW5vLGRlWzZdPUZyLGRlWzddPXFpLGRlWzhdPUppLGRlWzldPWFvLGRl''@;'; put 'put ''WzEwXT1ybyxkZVsxMV09aW8sZGVbMTJdPUdpLGRlWzEzXT1obyxkZVsxNF09eXIsZGVbMTVdPVBpLGRlWzE2XT1MbyxkZVsxN109aHMsZGVbMThdPXJzLDAhPT1mZSYmKGRlWzE5XT1mZSxTLmxlbmd0aCsrKSxTfTtmdW5jdGlvbiBvZShnLEMsUyl7cmV0dXJuKG5ldyBzZSkubXVscChnLEMs''@;'; put 'put ''Uyl9ZnVuY3Rpb24gc2UoZyxDKXt0aGlzLng9Zyx0aGlzLnk9Q31NYXRoLmltdWx8fCh0ZT1lZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgdj10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD90ZSh0aGlzLGcs''@;'; put 'put ''Qyk6djw2Mz9lZSh0aGlzLGcsQyk6djwxMDI0P2Z1bmN0aW9uKHAsdyxKKXtKLm5lZ2F0aXZlPXcubmVnYXRpdmVecC5uZWdhdGl2ZSxKLmxlbmd0aD1wLmxlbmd0aCt3Lmxlbmd0aDtmb3IodmFyIG5lPTAsZGU9MCxmZT0wO2ZlPEoubGVuZ3RoLTE7ZmUrKyl7dmFyIHhlPWRlO2RlPTA7Zm9y''@;'; put 'put ''KHZhciBMZT02NzEwODg2MyZuZSxGZT1NYXRoLm1pbihmZSx3Lmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLXAubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXt2YXIgV2U9KDB8cC53b3Jkc1tmZS1PZV0pKigwfHcud29yZHNbT2VdKSxLZT02NzEwODg2MyZXZTtMZT02NzEwODg2MyYoS2U9S2Ur''@;'; put 'put ''TGV8MCksZGUrPSh4ZT0oeGU9eGUrKFdlLzY3MTA4ODY0fDApfDApKyhLZT4+PjI2KXwwKT4+PjI2LHhlJj02NzEwODg2M31KLndvcmRzW2ZlXT1MZSxuZT14ZSx4ZT1kZX1yZXR1cm4gMCE9PW5lP0oud29yZHNbZmVdPW5lOkoubGVuZ3RoLS0sSi5zdHJpcCgpfSh0aGlzLGcsQyk6b2UodGhp''@;'; put 'put ''cyxnLEMpfSxzZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHY9MDt2PGc7disrKUNbdl09dGhpcy5yZXZCaW4odixTLGcpO3JldHVybiBDfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0''@;'; put 'put ''aW9uKGcsQyxTKXtpZigwPT09Z3x8Zz09PVMtMSlyZXR1cm4gZztmb3IodmFyIHY9MCxwPTA7cDxDO3ArKyl2fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHZ9LHNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXtmb3IodmFyIEo9MDtKPHc7SisrKXZbSl09Q1tn''@;'; put 'put ''W0pdXSxwW0pdPVNbZ1tKXV19LHNlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLFMsdixwLHcpe3RoaXMucGVybXV0ZSh3LGcsQyxTLHYscCk7Zm9yKHZhciBKPTE7SjxwO0o8PD0xKWZvcih2YXIgbmU9Sjw8MSxkZT1NYXRoLmNvcygyKk1hdGguUEkvbmUpLGZlPU1hdGguc2lu''@;'; put 'put ''KDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxwO3hlKz1uZSlmb3IodmFyIExlPWRlLEZlPWZlLE9lPTA7T2U8SjtPZSsrKXt2YXIgQmU9U1t4ZStPZV0sV2U9dlt4ZStPZV0sS2U9U1t4ZStPZStKXSxZZT12W3hlK09lK0pdLEplPUxlKktlLUZlKlllO1llPUxlKlllK0ZlKktlLFNbeGUrT2VdPUJl''@;'; put 'put ''KyhLZT1KZSksdlt4ZStPZV09V2UrWWUsU1t4ZStPZStKXT1CZS1LZSx2W3hlK09lK0pdPVdlLVllLE9lIT09bmUmJihKZT1kZSpMZS1mZSpGZSxGZT1kZSpGZStmZSpMZSxMZT1KZSl9fSxzZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgUz0xfE1hdGgubWF4KEMs''@;'; put 'put ''Zyksdj0xJlMscD0wO2ZvcihTPVMvMnwwO1M7Uz4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK3Z9LHNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLFMpe2lmKCEoUzw9MSkpZm9yKHZhciB2PTA7djxTLzI7disrKXt2YXIgcD1nW3ZdO2dbdl09Z1tTLXYtMV0sZ1tTLXYtMV09cCxw''@;'; put 'put ''PUNbdl0sQ1t2XT0tQ1tTLXYtMV0sQ1tTLXYtMV09LXB9fSxzZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTAsdj0wO3Y8Qy8yO3YrKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip2KzFdL0MpK01hdGgucm91bmQoZ1syKnZdL0MpK1M7Z1t2XT02''@;'; put 'put ''NzEwODg2MyZwLFM9cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sc2UucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLFMsdil7Zm9yKHZhciBwPTAsdz0wO3c8Qzt3KyspU1syKnddPTgxOTEmKHArPTB8Z1t3XSksU1syKncrMV09ODE5MSYocD4+Pj0xMykscD4+''@;'; put 'put ''Pj0xMztmb3Iodz0yKkM7dzx2OysrdylTW3ddPTA7SSgwPT09cCksSSgwPT0oLTgxOTImcCkpfSxzZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9MDtTPGc7UysrKUNbU109MDtyZXR1cm4gQ30sc2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24o''@;'; put 'put ''ZyxDLFMpe3ZhciB2PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxDLmxlbmd0aCkscD10aGlzLm1ha2VSQlQodiksdz10aGlzLnN0dWIodiksSj1uZXcgQXJyYXkodiksbmU9bmV3IEFycmF5KHYpLGRlPW5ldyBBcnJheSh2KSxmZT1uZXcgQXJyYXkodikseGU9bmV3IEFycmF5KHYpLExl''@;'; put 'put ''PW5ldyBBcnJheSh2KSxGZT1TLndvcmRzO0ZlLmxlbmd0aD12LHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLEosdiksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsZmUsdiksdGhpcy50cmFuc2Zvcm0oSix3LG5lLGRlLHYscCksdGhpcy50cmFuc2Zvcm0oZmUsdyx4''@;'; put 'put ''ZSxMZSx2LHApO2Zvcih2YXIgT2U9MDtPZTx2O09lKyspe3ZhciBCZT1uZVtPZV0qeGVbT2VdLWRlW09lXSpMZVtPZV07ZGVbT2VdPW5lW09lXSpMZVtPZV0rZGVbT2VdKnhlW09lXSxuZVtPZV09QmV9cmV0dXJuIHRoaXMuY29uanVnYXRlKG5lLGRlLHYpLHRoaXMudHJhbnNmb3JtKG5lLGRl''@;'; put 'put ''LEZlLHcsdixwKSx0aGlzLmNvbmp1Z2F0ZShGZSx3LHYpLHRoaXMubm9ybWFsaXplMTNiKEZlLHYpLFMubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLFMuc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5l''@;'; put 'put ''dyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0''@;'; put 'put ''aCksb2UodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsUz0wO1M8''@;'; put 'put ''dGhpcy5sZW5ndGg7UysrKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSpnLHA9KDY3MTA4ODYzJnYpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9di82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMu''@;'; put 'put ''bGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVuY3Rpb24odyl7Zm9yKHZhciBKPW5ldyBBcnJheSh3LmJpdExlbmd0aCgpKSxuZT0wO25lPEoubGVuZ3RoO25lKyspe3ZhciBmZT1uZSUyNjtKW25lXT0ody53b3Jkc1tuZS8yNnwwXSYxPDxm''@;'; put 'put ''ZSk+Pj5mZX1yZXR1cm4gSn0oZyk7aWYoMD09PUMubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIFM9dGhpcyx2PTA7djxDLmxlbmd0aCYmMD09PUNbdl07disrLFM9Uy5zcXIoKSk7aWYoKyt2PEMubGVuZ3RoKWZvcih2YXIgcD1TLnNxcigpO3Y8Qy5sZW5ndGg7disrLHA9cC5zcXIo''@;'; put 'put ''KSkwIT09Q1t2XSYmKFM9Uy5tdWwocCkpO3JldHVybiBTfSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDLFM9ZyUyNix2PShnLVMpLzI2LHA9NjcxMDg4NjM+Pj4yNi1TPDwyNi1TO2lmKDAhPT1TKXt2YXIgdz0wO2ZvcihD''@;'; put 'put ''PTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBKPXRoaXMud29yZHNbQ10mcDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLUo8PFN8dyx3PUo+Pj4yNi1TfXcmJih0aGlzLndvcmRzW0NdPXcsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXYpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtD''@;'; put 'put ''LS0pdGhpcy53b3Jkc1tDK3ZdPXRoaXMud29yZHNbQ107Zm9yKEM9MDtDPHY7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9dn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5p''@;'; put 'put ''dXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLEMsUyl7dmFyIHY7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHY9Qz8oQy1DJTI2KS8yNjowO3ZhciBwPWclMjYsdz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksSj02NzEwODg2M142NzEwODg2Mz4+PnA8''@;'; put 'put ''PHAsbmU9UztpZih2LT13LHY9TWF0aC5tYXgoMCx2KSxuZSl7Zm9yKHZhciBkZT0wO2RlPHc7ZGUrKyluZS53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZV07bmUubGVuZ3RoPXd9aWYoMCE9PXcpaWYodGhpcy5sZW5ndGg+dylmb3IodGhpcy5sZW5ndGgtPXcsZGU9MDtkZTx0aGlzLmxlbmd0aDtk''@;'; put 'put ''ZSsrKXRoaXMud29yZHNbZGVdPXRoaXMud29yZHNbZGUrd107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZmU9MDtmb3IoZGU9dGhpcy5sZW5ndGgtMTtkZT49MCYmKDAhPT1mZXx8ZGU+PXYpO2RlLS0pe3ZhciB4ZT0wfHRoaXMud29yZHNbZGVdO3RoaXMud29yZHNb''@;'; put 'put ''ZGVdPWZlPDwyNi1wfHhlPj4+cCxmZT14ZSZKfXJldHVybiBuZSYmMCE9PWZlJiYobmUud29yZHNbbmUubGVuZ3RoKytdPWZlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihn''@;'; put 'put ''LEMsUyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxTKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1''@;'; put 'put ''c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1TfHwhKHRoaXMud29yZHNbU10mMTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0o''@;'; put 'put ''Zy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PVM/dGhpczooMCE9PUMmJlMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihTLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNb''@;'; put 'put ''dGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0''@;'; put 'put ''aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlz''@;'; put 'put ''Lmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7''@;'; put 'put ''cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK1MpO3ZhciBK''@;'; put 'put ''PTA7Zm9yKHY9MDt2PGcubGVuZ3RoO3YrKyl7cD0oMHx0aGlzLndvcmRzW3YrU10pK0o7dmFyIG5lPSgwfGcud29yZHNbdl0pKkM7Sj0oKHAtPTY3MTA4ODYzJm5lKT4+MjYpLShuZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcH1mb3IoO3Y8dGhpcy5sZW5ndGgtUzt2''@;'; put 'put ''KyspSj0ocD0oMHx0aGlzLndvcmRzW3YrU10pK0opPj4yNix0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcDtpZigwPT09SilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09SiksSj0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKylKPShwPS0oMHx0aGlzLndvcmRzW3ZdKStKKT4+MjYsdGhp''@;'; put 'put ''cy53b3Jkc1t2XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBTLHY9dGhpcy5jbG9uZSgpLHA9Zyx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oUz0yNi10aGlzLl9jb3VudEJp''@;'; put 'put ''dHModykpJiYocD1wLnVzaGxuKFMpLHYuaXVzaGxuKFMpLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgSixuZT12Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMpeyhKPW5ldyBFKG51bGwpKS5sZW5ndGg9bmUrMSxKLndvcmRzPW5ldyBBcnJheShKLmxlbmd0aCk7Zm9yKHZhciBk''@;'; put 'put ''ZT0wO2RlPEoubGVuZ3RoO2RlKyspSi53b3Jkc1tkZV09MH12YXIgZmU9di5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEsbmUpOzA9PT1mZS5uZWdhdGl2ZSYmKHY9ZmUsSiYmKEoud29yZHNbbmVdPTEpKTtmb3IodmFyIHhlPW5lLTE7eGU+PTA7eGUtLSl7dmFyIExlPTY3MTA4ODY0KigwfHYu''@;'; put 'put ''d29yZHNbcC5sZW5ndGgreGVdKSsoMHx2LndvcmRzW3AubGVuZ3RoK3hlLTFdKTtmb3IoTGU9TWF0aC5taW4oTGUvd3wwLDY3MTA4ODYzKSx2Ll9pc2hsbnN1Ym11bChwLExlLHhlKTswIT09di5uZWdhdGl2ZTspTGUtLSx2Lm5lZ2F0aXZlPTAsdi5faXNobG5zdWJtdWwocCwxLHhlKSx2Lmlz''@;'; put 'put ''WmVybygpfHwodi5uZWdhdGl2ZV49MSk7SiYmKEoud29yZHNbeGVdPUxlKX1yZXR1cm4gSiYmSi5zdHJpcCgpLHYuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1TJiZ2Lml1c2hybihTKSx7ZGl2Okp8fG51bGwsbW9kOnZ9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLFMpe3JldHVy''@;'; put 'put ''biBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPXcubW9k''@;'; put 'put ''Lm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6dixtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8odz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLHtkaXY6dixtb2Q6dy5tb2R9KTp0aGlzLm5l''@;'; put 'put ''Z2F0aXZlJmcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6dy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2''@;'; put 'put ''Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6''@;'; put 'put ''bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLEMpO3ZhciB2LHAsd30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''aXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVy''@;'; put 'put ''biBDLmRpdjt2YXIgUz0wIT09Qy5kaXYubmVnYXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1vZCx2PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLHc9Uy5jbXAodik7cmV0dXJuIHc8MHx8MT09PXAmJjA9PT13P0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRk''@;'; put 'put ''bigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxTPTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklZztyZXR1cm4gU30sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24o''@;'; put 'put ''Zyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSs2NzEwODg2NCpDO3RoaXMud29yZHNbU109di9nfDAsQz12JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdj1u''@;'; put 'put ''ZXcgRSgxKSxwPW5ldyBFKDApLHc9bmV3IEUoMCksSj1uZXcgRSgxKSxuZT0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7KUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpLCsrbmU7Zm9yKHZhciBkZT1TLmNsb25lKCksZmU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciB4ZT0wLExlPTE7''@;'; put 'put ''IShDLndvcmRzWzBdJkxlKSYmeGU8MjY7Kyt4ZSxMZTw8PTEpO2lmKHhlPjApZm9yKEMuaXVzaHJuKHhlKTt4ZS0tID4wOykodi5pc09kZCgpfHxwLmlzT2RkKCkpJiYodi5pYWRkKGRlKSxwLmlzdWIoZmUpKSx2Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKFMu''@;'; put 'put ''d29yZHNbMF0mT2UpJiZGZTwyNjsrK0ZlLE9lPDw9MSk7aWYoRmU+MClmb3IoUy5pdXNocm4oRmUpO0ZlLS0gPjA7KSh3LmlzT2RkKCl8fEouaXNPZGQoKSkmJih3LmlhZGQoZGUpLEouaXN1YihmZSkpLHcuaXVzaHJuKDEpLEouaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUyksdi5p''@;'; put 'put ''c3ViKHcpLHAuaXN1YihKKSk6KFMuaXN1YihDKSx3LmlzdWIodiksSi5pc3ViKHApKX1yZXR1cm57YTp3LGI6SixnY2Q6Uy5pdXNobG4obmUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNs''@;'; put 'put ''b25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdixwPW5ldyBFKDEpLHc9bmV3IEUoMCksSj1TLmNsb25lKCk7Qy5jbXBuKDEpPjAmJlMuY21wbigxKT4wOyl7Zm9yKHZhciBuZT0wLGRlPTE7IShDLndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8''@;'; put 'put ''PTEpO2lmKG5lPjApZm9yKEMuaXVzaHJuKG5lKTtuZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChKKSxwLml1c2hybigxKTtmb3IodmFyIGZlPTAseGU9MTshKFMud29yZHNbMF0meGUpJiZmZTwyNjsrK2ZlLHhlPDw9MSk7aWYoZmU+MClmb3IoUy5pdXNocm4oZmUpO2ZlLS0gPjA7KXcuaXNP''@;'; put 'put ''ZGQoKSYmdy5pYWRkKEopLHcuaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUykscC5pc3ViKHcpKTooUy5pc3ViKEMpLHcuaXN1YihwKSl9cmV0dXJuKHY9MD09PUMuY21wbigxKT9wOncpLmNtcG4oMCk8MCYmdi5pYWRkKGcpLHZ9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtp''@;'; put 'put ''Zih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLFM9Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxTLm5lZ2F0aXZlPTA7Zm9yKHZhciB2PTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTt2KyspQy5pdXNo''@;'; put 'put ''cm4oMSksUy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zvcig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoUyk7aWYocDwwKXt2YXIgdz1DO0M9UyxTPXd9ZWxzZSBpZigwPT09cHx8MD09PVMuY21wbigxKSlicmVhaztDLmlzdWIo''@;'; put 'put ''Uyl9cmV0dXJuIFMuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixTPShnLUMpLzI2LHY9''@;'; put 'put ''MTw8QztpZih0aGlzLmxlbmd0aDw9UylyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXXw9dix0aGlzO2Zvcih2YXIgcD12LHc9UzswIT09cCYmdzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPTB8dGhpcy53b3Jkc1t3XTtwPShKKz1wKT4+PjI2LHRoaXMud29yZHNbd109SiY9''@;'; put 'put ''NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1t3XT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3Zh''@;'; put 'put ''ciBDLFM9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhUylyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmUylyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtTJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIg''@;'; put 'put ''dj0wfHRoaXMud29yZHNbMF07Qz12PT09Zz8wOnY8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''JjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJl''@;'; put 'put ''dHVybi0xO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9MHx0aGlzLndvcmRzW1NdLHA9MHxnLndvcmRzW1NdO2lmKHYhPT1wKXt2PHA/Qz0tMTp2PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAx''@;'; put 'put ''PT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAo''@;'; put 'put ''Zyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxF''@;'; put 'put ''LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiBuZXcgSChnKX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMi''@;'; put 'put ''KSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMp''@;'; put 'put ''fSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VS''@;'; put 'put ''ZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVk''@;'; put 'put ''LCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRo''@;'; put 'put ''aXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5y''@;'; put 'put ''ZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm''@;'; put 'put ''eTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlz''@;'; put 'put ''LGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhp''@;'; put 'put ''cyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgaGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxs''@;'; put 'put ''LHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2Uo''@;'; put 'put ''KXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIEcoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEQoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIEgoZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMg''@;'; put 'put ''bXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBOKGcpe0guY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9''@;'; put 'put ''bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYu''@;'; put 'put ''dW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3ZhciBDLFM9Zztkb3t0aGlzLnNwbGl0KFMsdGhpcy50bXApLEM9KFM9KFM9dGhpcy5pbXVsSyhTKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgdj1DPHRoaXMubj8tMTpTLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXY/KFMud29y''@;'; put 'put ''ZHNbMF09MCxTLmxlbmd0aD0xKTp2PjA/Uy5pc3ViKHRoaXMucCk6dm9pZCAwIT09Uy5zdHJpcD9TLnN0cmlwKCk6Uy5fc3RyaXAoKSxTfSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiBnLmltdWwodGhpcy5rKX0sayhjZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTQxOTQzMDMsdj1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx2O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9dixnLmxlbmd0aDw9''@;'; put 'put ''OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIHc9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT13JlMscD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIEo9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KEomUyk8PDR8dz4+PjIyLHc9Sn1nLndvcmRz''@;'; put 'put ''W3AtMTBdPXc+Pj49MjIsZy5sZW5ndGgtPTA9PT13JiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7Uysr''@;'; put 'put ''KXt2YXIgdj0wfGcud29yZHNbU107Zy53b3Jkc1tTXT02NzEwODg2MyYoQys9OTc3KnYpLEM9NjQqdisoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxrKEcsdWUp''@;'; put 'put ''LGsoYix1ZSksayhELHVlKSxELnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTE5KigwfGcud29yZHNbU10pK0MscD02NzEwODg2MyZ2O3Y+Pj49MjYsZy53b3Jkc1tTXT1wLEM9dn1yZXR1cm4gMCE9PUMmJihnLndvcmRz''@;'; put 'put ''W2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKGhlW2ddKXJldHVybiBoZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBHO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1n''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO0M9bmV3IER9cmV0dXJuIGhlW2ddPUMsQ30sSC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksUy5fZm9y''@;'; put 'put ''Y2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnky''@;'; put 'put ''KGcsQyk7dmFyIFM9Zy5zdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlzdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlh''@;'; put 'put ''ZGQodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwo''@;'; put 'put ''QykpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LEgucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sSC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIFM9dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIp''@;'; put 'put ''O3JldHVybiB0aGlzLnBvdyhnLFMpfWZvcih2YXIgdj10aGlzLm0uc3VibigxKSxwPTA7IXYuaXNaZXJvKCkmJjA9PT12LmFuZGxuKDEpOylwKyssdi5pdXNocm4oMSk7SSghdi5pc1plcm8oKSk7dmFyIHc9bmV3IEUoMSkudG9SZWQodGhpcyksSj13LnJlZE5lZygpLG5lPXRoaXMubS5zdWJu''@;'; put 'put ''KDEpLml1c2hybigxKSxkZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGRlPW5ldyBFKDIqZGUqZGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhkZSxuZSkuY21wKEopOylkZS5yZWRJQWRkKEopO2Zvcih2YXIgZmU9dGhpcy5wb3coZGUsdikseGU9dGhpcy5wb3coZyx2LmFkZG4oMSkuaXVz''@;'; put 'put ''aHJuKDEpKSxMZT10aGlzLnBvdyhnLHYpLEZlPXA7MCE9PUxlLmNtcCh3KTspe2Zvcih2YXIgT2U9TGUsQmU9MDswIT09T2UuY21wKHcpO0JlKyspT2U9T2UucmVkU3FyKCk7SShCZTxGZSk7dmFyIFdlPXRoaXMucG93KGZlLG5ldyBFKDEpLml1c2hsbihGZS1CZS0xKSk7eGU9eGUucmVkTXVs''@;'; put 'put ''KFdlKSxmZT1XZS5yZWRTcXIoKSxMZT1MZS5yZWRNdWwoZmUpLEZlPUJlfXJldHVybiB4ZX0sSC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6''@;'; put 'put ''dGhpcy5pbW9kKEMpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIFM9bmV3IEFycmF5KDE2KTtTWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMp''@;'; put 'put ''LFNbMV09Zztmb3IodmFyIHY9Mjt2PFMubGVuZ3RoO3YrKylTW3ZdPXRoaXMubXVsKFNbdi0xXSxnKTt2YXIgcD1TWzBdLHc9MCxKPTAsbmU9Qy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLHY9Qy5sZW5ndGgtMTt2Pj0wO3YtLSl7Zm9yKHZhciBkZT1DLndvcmRzW3ZdLGZl''@;'; put 'put ''PW5lLTE7ZmU+PTA7ZmUtLSl7dmFyIHhlPWRlPj5mZSYxO3AhPT1TWzBdJiYocD10aGlzLnNxcihwKSksMCE9PXhlfHwwIT09dz8odzw8PTEsd3w9eGUsKDQ9PSsrSnx8MD09PXYmJjA9PT1mZSkmJihwPXRoaXMubXVsKHAsU1t3XSksSj0wLHc9MCkpOko9MH1uZT0yNn1yZXR1cm4gcH0sSC5w''@;'; put 'put ''cm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBDPWcudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sSC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gbmV3IE4oZyl9LGsoTixIKSxOLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMu''@;'; put 'put ''cmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBTPWcuaW11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMu''@;'; put 'put ''bWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxO''@;'; put 'put ''LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIFM9Zy5tdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhp''@;'; put 'put ''cy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShNPVIubm1kKE0pLHRoaXMpfSw2OTQ4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Tzt6LnZlcnNpb249Uig4NTk3KS5pOCx6LnV0aWxzPVIoOTUzKSx6LnJhbmQ9Uig5OTMx''@;'; put 'put ''KSx6LmN1cnZlPVIoODI1NCksei5jdXJ2ZXM9Uig1NDI3KSx6LmVjPVIoNzk1NCksei5lZGRzYT1SKDU5ODApfSw0OTE4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoOTUzKSxJPUsuZ2V0TkFGLGs9Sy5nZXRKU0YsRT1LLmFzc2VydDtmdW5jdGlvbiBqKEIsWSl7''@;'; put 'put ''dGhpcy50eXBlPUIsdGhpcy5wPW5ldyB6KFkucCwxNiksdGhpcy5yZWQ9WS5wcmltZT96LnJlZChZLnByaW1lKTp6Lm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IHooMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyB6KDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgeigy''@;'; put 'put ''KS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPVkubiYmbmV3IHooWS5uLDE2KSx0aGlzLmc9WS5nJiZ0aGlzLnBvaW50RnJvbUpTT04oWS5nLFkuZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCks''@;'; put 'put ''dGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBYPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFYfHxYLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5y''@;'; put 'put ''ZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIFYoQixZKXt0aGlzLmN1cnZlPUIsdGhpcy50eXBlPVksdGhpcy5wcmVjb21wdXRlZD1udWxsfU0uZXhwb3J0cz1qLGoucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQi''@;'; put 'put ''KX0sai5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxqLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oQixZKXtFKEIucHJlY29tcHV0ZWQpO3ZhciBYPUIuX2dldERvdWJsZXMoKSxVPUkoWSwxLHRoaXMuX2Jp''@;'; put 'put ''dExlbmd0aCkscT0oMTw8WC5zdGVwKzEpLShYLnN0ZXAlMj09MD8yOjEpO3EvPTM7dmFyIGVlLHRlLG9lPVtdO2ZvcihlZT0wO2VlPFUubGVuZ3RoO2VlKz1YLnN0ZXApe3RlPTA7Zm9yKHZhciBzZT1lZStYLnN0ZXAtMTtzZT49ZWU7c2UtLSl0ZT0odGU8PDEpK1Vbc2VdO29lLnB1c2godGUp''@;'; put 'put ''fWZvcih2YXIgaGU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHVlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxjZT1xO2NlPjA7Y2UtLSl7Zm9yKGVlPTA7ZWU8b2UubGVuZ3RoO2VlKyspKHRlPW9lW2VlXSk9PT1jZT91ZT11ZS5taXhlZEFkZChYLnBvaW50c1tlZV0pOnRlPT09''@;'; put 'put ''LWNlJiYodWU9dWUubWl4ZWRBZGQoWC5wb2ludHNbZWVdLm5lZygpKSk7aGU9aGUuYWRkKHVlKX1yZXR1cm4gaGUudG9QKCl9LGoucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKEIsWSl7Zm9yKHZhciBYPTQsVT1CLl9nZXROQUZQb2ludHMoWCkscT1VLnBvaW50cyxlZT1JKFksWD1VLndu''@;'; put 'put ''ZCx0aGlzLl9iaXRMZW5ndGgpLHRlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxvZT1lZS5sZW5ndGgtMTtvZT49MDtvZS0tKXtmb3IodmFyIHNlPTA7b2U+PTAmJjA9PT1lZVtvZV07b2UtLSlzZSsrO2lmKG9lPj0wJiZzZSsrLHRlPXRlLmRibHAoc2UpLG9lPDApYnJlYWs7dmFyIGhl''@;'; put 'put ''PWVlW29lXTtFKDAhPT1oZSksdGU9ImFmZmluZSI9PT1CLnR5cGU/dGUubWl4ZWRBZGQoaGU+MD9xW2hlLTE+PjFdOnFbLWhlLTE+PjFdLm5lZygpKTp0ZS5hZGQoaGU+MD9xW2hlLTE+PjFdOnFbLWhlLTE+PjFdLm5lZygpKX1yZXR1cm4iYWZmaW5lIj09PUIudHlwZT90ZS50b1AoKTp0ZX0s''@;'; put 'put ''ai5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24oQixZLFgsVSxxKXt2YXIgZWUsdGUsb2Usc2U9dGhpcy5fd25hZlQxLGhlPXRoaXMuX3duYWZUMix1ZT10aGlzLl93bmFmVDMsY2U9MDtmb3IoZWU9MDtlZTxVO2VlKyspe3ZhciBHPShvZT1ZW2VlXSkuX2dldE5BRlBvaW50cyhCKTtz''@;'; put 'put ''ZVtlZV09Ry53bmQsaGVbZWVdPUcucG9pbnRzfWZvcihlZT1VLTE7ZWU+PTE7ZWUtPTIpe3ZhciBiPWVlLTEsRD1lZTtpZigxPT09c2VbYl0mJjE9PT1zZVtEXSl7dmFyIEg9W1lbYl0sbnVsbCxudWxsLFlbRF1dOzA9PT1ZW2JdLnkuY21wKFlbRF0ueSk/KEhbMV09WVtiXS5hZGQoWVtEXSks''@;'; put 'put ''SFsyXT1ZW2JdLnRvSigpLm1peGVkQWRkKFlbRF0ubmVnKCkpKTowPT09WVtiXS55LmNtcChZW0RdLnkucmVkTmVnKCkpPyhIWzFdPVlbYl0udG9KKCkubWl4ZWRBZGQoWVtEXSksSFsyXT1ZW2JdLmFkZChZW0RdLm5lZygpKSk6KEhbMV09WVtiXS50b0ooKS5taXhlZEFkZChZW0RdKSxIWzJd''@;'; put 'put ''PVlbYl0udG9KKCkubWl4ZWRBZGQoWVtEXS5uZWcoKSkpO3ZhciBOPVstMywtMSwtNSwtNywwLDcsNSwxLDNdLGc9ayhYW2JdLFhbRF0pO2ZvcihjZT1NYXRoLm1heChnWzBdLmxlbmd0aCxjZSksdWVbYl09bmV3IEFycmF5KGNlKSx1ZVtEXT1uZXcgQXJyYXkoY2UpLHRlPTA7dGU8Y2U7dGUr''@;'; put 'put ''Kyl1ZVtiXVt0ZV09TlszKigxKygwfGdbMF1bdGVdKSkrKDErKDB8Z1sxXVt0ZV0pKV0sdWVbRF1bdGVdPTAsaGVbYl09SH1lbHNlIHVlW2JdPUkoWFtiXSxzZVtiXSx0aGlzLl9iaXRMZW5ndGgpLHVlW0RdPUkoWFtEXSxzZVtEXSx0aGlzLl9iaXRMZW5ndGgpLGNlPU1hdGgubWF4KHVlW2Jd''@;'; put 'put ''Lmxlbmd0aCxjZSksY2U9TWF0aC5tYXgodWVbRF0ubGVuZ3RoLGNlKX12YXIgdj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkscD10aGlzLl93bmFmVDQ7Zm9yKGVlPWNlO2VlPj0wO2VlLS0pe2Zvcih2YXIgdz0wO2VlPj0wOyl7dmFyIEo9ITA7Zm9yKHRlPTA7dGU8VTt0ZSsrKXBbdGVd''@;'; put 'put ''PTB8dWVbdGVdW2VlXSwwIT09cFt0ZV0mJihKPSExKTtpZighSilicmVhazt3KyssZWUtLX1pZihlZT49MCYmdysrLHY9di5kYmxwKHcpLGVlPDApYnJlYWs7Zm9yKHRlPTA7dGU8VTt0ZSsrKXt2YXIgbmU9cFt0ZV07MCE9PW5lJiYobmU+MD9vZT1oZVt0ZV1bbmUtMT4+MV06bmU8MCYmKG9l''@;'; put 'put ''PWhlW3RlXVstbmUtMT4+MV0ubmVnKCkpLHY9ImFmZmluZSI9PT1vZS50eXBlP3YubWl4ZWRBZGQob2UpOnYuYWRkKG9lKSl9fWZvcihlZT0wO2VlPFU7ZWUrKyloZVtlZV09bnVsbDtyZXR1cm4gcT92OnYudG9QKCl9LGouQmFzZVBvaW50PVYsVi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxWLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxqLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihCLFkpe0I9Sy50b0FycmF5KEIsWSk7dmFyIFg9dGhp''@;'; put 'put ''cy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PUJbMF18fDY9PT1CWzBdfHw3PT09QlswXSkmJkIubGVuZ3RoLTE9PTIqWClyZXR1cm4gNj09PUJbMF0/RShCW0IubGVuZ3RoLTFdJTI9PTApOjc9PT1CWzBdJiZFKEJbQi5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludChCLnNsaWNlKDEsMStYKSxC''@;'; put 'put ''LnNsaWNlKDErWCwxKzIqWCkpO2lmKCgyPT09QlswXXx8Mz09PUJbMF0pJiZCLmxlbmd0aC0xPT09WClyZXR1cm4gdGhpcy5wb2ludEZyb21YKEIuc2xpY2UoMSwxK1gpLDM9PT1CWzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LFYucHJvdG90eXBlLmVuY29k''@;'; put 'put ''ZUNvbXByZXNzZWQ9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuZW5jb2RlKEIsITApfSxWLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKEIpe3ZhciBZPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCksWD10aGlzLmdldFgoKS50b0FycmF5KCJiZSIsWSk7cmV0dXJuIEI/W3RoaXMuZ2V0WSgp''@;'; put 'put ''LmlzRXZlbigpPzI6M10uY29uY2F0KFgpOls0XS5jb25jYXQoWCx0aGlzLmdldFkoKS50b0FycmF5KCJiZSIsWSkpfSxWLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oQixZKXtyZXR1cm4gSy5lbmNvZGUodGhpcy5fZW5jb2RlKFkpLEIpfSxWLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0''@;'; put 'put ''aW9uKEIpe2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIFk9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBZLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksWS5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCxCKSxZLmJldGE9dGhpcy5fZ2V0QmV0''@;'; put 'put ''YSgpLHRoaXMucHJlY29tcHV0ZWQ9WSx0aGlzfSxWLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbihCKXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgWT10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFZJiZZLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgo''@;'; put 'put ''Qi5iaXRMZW5ndGgoKSsxKS9ZLnN0ZXApfSxWLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbihCLFkpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgWD1bdGhpc10sVT10aGlz''@;'; put 'put ''LHE9MDtxPFk7cSs9Qil7Zm9yKHZhciBlZT0wO2VlPEI7ZWUrKylVPVUuZGJsKCk7WC5wdXNoKFUpfXJldHVybntzdGVwOkIscG9pbnRzOlh9fSxWLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKEIpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJl''@;'; put 'put ''dHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIFk9W3RoaXNdLFg9KDE8PEIpLTEsVT0xPT09WD9udWxsOnRoaXMuZGJsKCkscT0xO3E8WDtxKyspWVtxXT1ZW3EtMV0uYWRkKFUpO3JldHVybnt3bmQ6Qixwb2ludHM6WX19LFYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIG51bGx9LFYucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oQil7Zm9yKHZhciBZPXRoaXMsWD0wO1g8QjtYKyspWT1ZLmRibCgpO3JldHVybiBZfX0sMTEzODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUzKSxLPVIoMzc4NSksST1SKDU3MTcpLGs9Uig0OTE4KSxFPXou''@;'; put 'put ''YXNzZXJ0O2Z1bmN0aW9uIGooQil7dGhpcy50d2lzdGVkPTEhPSgwfEIuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxCLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxrLmNhbGwodGhpcywiZWR3YXJkcyIsQiksdGhpcy5hPW5ldyBLKEIuYSwxNikudW1vZCh0aGlzLnJl''@;'; put 'put ''ZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IEsoQi5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBLKEIuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLEUo''@;'; put 'put ''IXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfEIuYyl9ZnVuY3Rpb24gVihCLFksWCxVLHEpe2suQmFzZVBvaW50LmNhbGwodGhpcyxCLCJwcm9qZWN0aXZlIiksbnVsbD09PVkmJm51bGw9PT1YJiZudWxsPT09VT8odGhpcy54PXRo''@;'; put 'put ''aXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBLKFksMTYpLHRoaXMueT1uZXcgSyhYLDE2KSx0aGlzLno9VT9uZXcgSyhVLDE2KTp0aGlzLmN1cnZl''@;'; put 'put ''Lm9uZSx0aGlzLnQ9cSYmbmV3IEsocSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMu''@;'; put 'put ''Y3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSks''@;'; put 'put ''dGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9SShqLGspLE0uZXhwb3J0cz1qLGoucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLm1PbmVBP0IucmVkTmVnKCk6dGhpcy5hLnJlZE11bChCKX0sai5wcm90b3R5cGUuX211''@;'; put 'put ''bEM9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMub25lQz9COnRoaXMuYy5yZWRNdWwoQil9LGoucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gdGhpcy5wb2ludChCLFksWCxVKX0sai5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihCLFkpeyhCPW5ldyBLKEIs''@;'; put 'put ''MTYpKS5yZWR8fChCPUIudG9SZWQodGhpcy5yZWQpKTt2YXIgWD1CLnJlZFNxcigpLFU9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChYKSkscT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoWCkpLGVlPVUucmVkTXVsKHEucmVkSW52bSgpKSx0ZT1l''@;'; put 'put ''ZS5yZWRTcXJ0KCk7aWYoMCE9PXRlLnJlZFNxcigpLnJlZFN1YihlZSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIG9lPXRlLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihZJiYhb2V8fCFZJiZvZSkmJih0ZT10ZS5yZWROZWcoKSksdGhpcy5w''@;'; put 'put ''b2ludChCLHRlKX0sai5wcm90b3R5cGUucG9pbnRGcm9tWT1mdW5jdGlvbihCLFkpeyhCPW5ldyBLKEIsMTYpKS5yZWR8fChCPUIudG9SZWQodGhpcy5yZWQpKTt2YXIgWD1CLnJlZFNxcigpLFU9WC5yZWRTdWIodGhpcy5jMikscT1YLnJlZE11bCh0aGlzLmQpLnJlZE11bCh0aGlzLmMyKS5y''@;'; put 'put ''ZWRTdWIodGhpcy5hKSxlZT1VLnJlZE11bChxLnJlZEludm0oKSk7aWYoMD09PWVlLmNtcCh0aGlzLnplcm8pKXtpZihZKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyxCKX12YXIgdGU9ZWUucmVkU3FydCgpO2lmKDAhPT10ZS5y''@;'; put 'put ''ZWRTcXIoKS5yZWRTdWIoZWUpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0ZS5mcm9tUmVkKCkuaXNPZGQoKSE9PVkmJih0ZT10ZS5yZWROZWcoKSksdGhpcy5wb2ludCh0ZSxCKX0sai5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''Qil7aWYoQi5pc0luZmluaXR5KCkpcmV0dXJuITA7Qi5ub3JtYWxpemUoKTt2YXIgWT1CLngucmVkU3FyKCksWD1CLnkucmVkU3FyKCksVT1ZLnJlZE11bCh0aGlzLmEpLnJlZEFkZChYKSxxPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKFkpLnJlZE11bChY''@;'; put 'put ''KSkpO3JldHVybiAwPT09VS5jbXAocSl9LEkoVixrLkJhc2VQb2ludCksai5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihCKXtyZXR1cm4gVi5mcm9tSlNPTih0aGlzLEIpfSxqLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gbmV3IFYodGhpcyxCLFks''@;'; put 'put ''WCxVKX0sVi5mcm9tSlNPTj1mdW5jdGlvbihCLFkpe3JldHVybiBuZXcgVihCLFlbMF0sWVsxXSxZWzJdKX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5m''@;'; put 'put ''cm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxWLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigw''@;'; put 'put ''KSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LFYucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgQj10aGlzLngucmVkU3FyKCksWT10aGlzLnkucmVkU3FyKCksWD10aGlzLnoucmVkU3FyKCk7WD1YLnJl''@;'; put 'put ''ZElBZGQoWCk7dmFyIFU9dGhpcy5jdXJ2ZS5fbXVsQShCKSxxPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKEIpLnJlZElTdWIoWSksZWU9VS5yZWRBZGQoWSksdGU9ZWUucmVkU3ViKFgpLG9lPVUucmVkU3ViKFkpLHNlPXEucmVkTXVsKHRlKSxoZT1lZS5yZWRNdWwo''@;'; put 'put ''b2UpLHVlPXEucmVkTXVsKG9lKSxjZT10ZS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHNlLGhlLGNlLHVlKX0sVi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgQixZLFgsVSxxLGVlLHRlPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxvZT10aGlz''@;'; put 'put ''LngucmVkU3FyKCksc2U9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIGhlPShVPXRoaXMuY3VydmUuX211bEEob2UpKS5yZWRBZGQoc2UpO3RoaXMuek9uZT8oQj10ZS5yZWRTdWIob2UpLnJlZFN1YihzZSkucmVkTXVsKGhlLnJlZFN1Yih0aGlzLmN1cnZlLnR3''@;'; put 'put ''bykpLFk9aGUucmVkTXVsKFUucmVkU3ViKHNlKSksWD1oZS5yZWRTcXIoKS5yZWRTdWIoaGUpLnJlZFN1YihoZSkpOihxPXRoaXMuei5yZWRTcXIoKSxlZT1oZS5yZWRTdWIocSkucmVkSVN1YihxKSxCPXRlLnJlZFN1YihvZSkucmVkSVN1YihzZSkucmVkTXVsKGVlKSxZPWhlLnJlZE11bChV''@;'; put 'put ''LnJlZFN1YihzZSkpLFg9aGUucmVkTXVsKGVlKSl9ZWxzZSBVPW9lLnJlZEFkZChzZSkscT10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksZWU9VS5yZWRTdWIocSkucmVkU3ViKHEpLEI9dGhpcy5jdXJ2ZS5fbXVsQyh0ZS5yZWRJU3ViKFUpKS5yZWRNdWwoZWUpLFk9dGhpcy5j''@;'; put 'put ''dXJ2ZS5fbXVsQyhVKS5yZWRNdWwob2UucmVkSVN1YihzZSkpLFg9VS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEIsWSxYKX0sVi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlz''@;'; put 'put ''Ll9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LFYucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oQil7dmFyIFk9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChCLnkucmVkU3ViKEIueCkpLFg9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bChCLnkucmVkQWRkKEIueCkpLFU9dGhp''@;'; put 'put ''cy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoQi50KSxxPXRoaXMuei5yZWRNdWwoQi56LnJlZEFkZChCLnopKSxlZT1YLnJlZFN1YihZKSx0ZT1xLnJlZFN1YihVKSxvZT1xLnJlZEFkZChVKSxzZT1YLnJlZEFkZChZKSxoZT1lZS5yZWRNdWwodGUpLHVlPW9lLnJlZE11bChzZSks''@;'; put 'put ''Y2U9ZWUucmVkTXVsKHNlKSxHPXRlLnJlZE11bChvZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoaGUsdWUsRyxjZSl9LFYucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKEIpe3ZhciBZLFgsVT10aGlzLnoucmVkTXVsKEIueikscT1VLnJlZFNxcigpLGVlPXRoaXMueC5yZWRNdWwoQi54''@;'; put 'put ''KSx0ZT10aGlzLnkucmVkTXVsKEIueSksb2U9dGhpcy5jdXJ2ZS5kLnJlZE11bChlZSkucmVkTXVsKHRlKSxzZT1xLnJlZFN1YihvZSksaGU9cS5yZWRBZGQob2UpLHVlPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoQi54LnJlZEFkZChCLnkpKS5yZWRJU3ViKGVlKS5yZWRJU3ViKHRl''@;'; put 'put ''KSxjZT1VLnJlZE11bChzZSkucmVkTXVsKHVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyhZPVUucmVkTXVsKGhlKS5yZWRNdWwodGUucmVkU3ViKHRoaXMuY3VydmUuX211bEEoZWUpKSksWD1zZS5yZWRNdWwoaGUpKTooWT1VLnJlZE11bChoZSkucmVkTXVsKHRlLnJlZFN1YihlZSkp''@;'; put 'put ''LFg9dGhpcy5jdXJ2ZS5fbXVsQyhzZSkucmVkTXVsKGhlKSksdGhpcy5jdXJ2ZS5wb2ludChjZSxZLFgpfSxWLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP0I6Qi5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4''@;'; put 'put ''dEFkZChCKTp0aGlzLl9wcm9qQWRkKEIpfSxWLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoQik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxCKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsQil9LFYucHJvdG90eXBlLm11bEFkZD1mdW5j''@;'; put 'put ''dGlvbihCLFksWCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxZXSxbQixYXSwyLCExKX0sVi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihCLFksWCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxZXSxbQixYXSwyLCEwKX0sVi5wcm90b3R5''@;'; put 'put ''cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciBCPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKEIpLHRoaXMueT10aGlzLnkucmVkTXVsKEIpLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKEIpKSx0aGlz''@;'; put 'put ''Lno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LFYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sVi5wcm90b3R5cGUuZ2V0WD1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LFYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxWLnByb3RvdHlwZS5lcT1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcz09PUJ8fDA9''@;'; put 'put ''PT10aGlzLmdldFgoKS5jbXAoQi5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKEIuZ2V0WSgpKX0sVi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKEIpe3ZhciBZPUIudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKFkpKXJldHVybiEw''@;'; put 'put ''O2Zvcih2YXIgWD1CLmNsb25lKCksVT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoWC5pYWRkKHRoaXMuY3VydmUubiksWC5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihZLnJlZElBZGQoVSksMD09PXRoaXMueC5jbXAoWSkpcmV0dXJuITB9fSxWLnByb3Rv''@;'; put 'put ''dHlwZS50b1A9Vi5wcm90b3R5cGUubm9ybWFsaXplLFYucHJvdG90eXBlLm1peGVkQWRkPVYucHJvdG90eXBlLmFkZH0sODI1NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PU87ei5iYXNlPVIoNDkxOCksei5zaG9ydD1SKDY2NzMpLHoubW9udD1SKDI4ODEpLHouZWR3YXJkcz1SKDEx''@;'; put 'put ''MzgpfSwyODgxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoNTcxNyksST1SKDQ5MTgpLGs9Uig5NTMpO2Z1bmN0aW9uIEUoVil7SS5jYWxsKHRoaXMsIm1vbnQiLFYpLHRoaXMuYT1uZXcgeihWLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IHooVi5i''@;'; put 'put ''LDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgeig0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyB6KDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gaihWLEIsWSl7''@;'; put 'put ''SS5CYXNlUG9pbnQuY2FsbCh0aGlzLFYsInByb2plY3RpdmUiKSxudWxsPT09QiYmbnVsbD09PVk/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyB6KEIsMTYpLHRoaXMuej1uZXcgeihZLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRo''@;'; put 'put ''aXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfUsoRSxJKSxNLmV4cG9ydHM9RSxFLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihWKXt2YXIgQj1WLm5vcm1hbGl6ZSgpLngsWT1CLnJlZFNxcigp''@;'; put 'put ''LFg9WS5yZWRNdWwoQikucmVkQWRkKFkucmVkTXVsKHRoaXMuYSkpLnJlZEFkZChCKTtyZXR1cm4gMD09PVgucmVkU3FydCgpLnJlZFNxcigpLmNtcChYKX0sSyhqLEkuQmFzZVBvaW50KSxFLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihWLEIpe3JldHVybiB0aGlzLnBvaW50KGsu''@;'; put 'put ''dG9BcnJheShWLEIpLDEpfSxFLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihWLEIpe3JldHVybiBuZXcgaih0aGlzLFYsQil9LEUucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oVil7cmV0dXJuIGouZnJvbUpTT04odGhpcyxWKX0sai5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5j''@;'; put 'put ''dGlvbigpe30sai5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LGouZnJvbUpTT049ZnVuY3Rpb24oVixCKXtyZXR1cm4gbmV3IGooVixCWzBdLEJbMV18fFYub25lKX0sai5wcm90''@;'; put 'put ''b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxq''@;'; put 'put ''LnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sai5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLEI9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLFk9Vi5yZWRT''@;'; put 'put ''dWIoQiksWD1WLnJlZE11bChCKSxVPVkucmVkTXVsKEIucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChZKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFgsVSl9LGoucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29t''@;'; put 'put ''ZXJ5IGN1cnZlIil9LGoucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24oVixCKXt2YXIgWT10aGlzLngucmVkQWRkKHRoaXMueiksWD10aGlzLngucmVkU3ViKHRoaXMueiksVT1WLngucmVkQWRkKFYueikscT1WLngucmVkU3ViKFYueikucmVkTXVsKFkpLGVlPVUucmVkTXVsKFgpLHRlPUIu''@;'; put 'put ''ei5yZWRNdWwocS5yZWRBZGQoZWUpLnJlZFNxcigpKSxvZT1CLngucmVkTXVsKHEucmVkSVN1YihlZSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRlLG9lKX0sai5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFYpe2Zvcih2YXIgQj1WLmNsb25lKCksWT10aGlzLFg9dGhpcy5j''@;'; put 'put ''dXJ2ZS5wb2ludChudWxsLG51bGwpLFU9W107MCE9PUIuY21wbigwKTtCLml1c2hybigxKSlVLnB1c2goQi5hbmRsbigxKSk7Zm9yKHZhciBxPVUubGVuZ3RoLTE7cT49MDtxLS0pMD09PVVbcV0/KFk9WS5kaWZmQWRkKFgsdGhpcyksWD1YLmRibCgpKTooWD1ZLmRpZmZBZGQoWCx0aGlzKSxZ''@;'; put 'put ''PVkuZGJsKCkpO3JldHVybiBYfSxqLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxqLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVk''@;'; put 'put ''IG9uIE1vbnRnb21lcnkgY3VydmUiKX0sai5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oVil7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAoVi5nZXRYKCkpfSxqLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0o''@;'; put 'put ''KSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LGoucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sNjY3MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUzKSxLPVIoMzc4NSksST1SKDU3MTcpLGs9''@;'; put 'put ''Uig0OTE4KSxFPXouYXNzZXJ0O2Z1bmN0aW9uIGooWSl7ay5jYWxsKHRoaXMsInNob3J0IixZKSx0aGlzLmE9bmV3IEsoWS5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBLKFkuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56''@;'; put 'put ''ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20oWSksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1du''@;'; put 'put ''YWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gVihZLFgsVSxxKXtrLkJhc2VQb2ludC5jYWxsKHRoaXMsWSwiYWZmaW5lIiksbnVsbD09PVgmJm51bGw9PT1VPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgSyhYLDE2KSx0aGlzLnk9bmV3IEsoVSwx''@;'; put 'put ''NikscSYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZl''@;'; put 'put ''LnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBCKFksWCxVLHEpe2suQmFzZVBvaW50LmNhbGwodGhpcyxZLCJqYWNvYmlhbiIpLG51bGw9PT1YJiZudWxsPT09VSYmbnVsbD09PXE/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBLKDAp''@;'; put 'put ''KToodGhpcy54PW5ldyBLKFgsMTYpLHRoaXMueT1uZXcgSyhVLDE2KSx0aGlzLno9bmV3IEsocSwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlz''@;'; put 'put ''LnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1JKGosayksTS5leHBvcnRzPWosai5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbihZKXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRo''@;'; put 'put ''aXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgWCxVO2lmKFkuYmV0YSlYPW5ldyBLKFkuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIHE9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7WD0oWD1xWzBdLmNtcChxWzFdKTwwP3FbMF06cVsxXSkudG9SZWQodGhpcy5yZWQp''@;'; put 'put ''fWlmKFkubGFtYmRhKVU9bmV3IEsoWS5sYW1iZGEsMTYpO2Vsc2V7dmFyIGVlPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKGVlWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoWCkpP1U9ZWVbMF06RSgwPT09dGhpcy5nLm11bChVPWVlWzFdKS54LmNtcCh0aGlz''@;'; put 'put ''LmcueC5yZWRNdWwoWCkpKX1yZXR1cm57YmV0YTpYLGxhbWJkYTpVLGJhc2lzOlkuYmFzaXM/WS5iYXNpcy5tYXAoZnVuY3Rpb24odGUpe3JldHVybnthOm5ldyBLKHRlLmEsMTYpLGI6bmV3IEsodGUuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKFUpfX19LGoucHJvdG90eXBlLl9nZXRF''@;'; put 'put ''bmRvUm9vdHM9ZnVuY3Rpb24oWSl7dmFyIFg9WT09PXRoaXMucD90aGlzLnJlZDpLLm1vbnQoWSksVT1uZXcgSygyKS50b1JlZChYKS5yZWRJbnZtKCkscT1VLnJlZE5lZygpLGVlPW5ldyBLKDMpLnRvUmVkKFgpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoVSk7cmV0dXJuW3EucmVkQWRk''@;'; put 'put ''KGVlKS5mcm9tUmVkKCkscS5yZWRTdWIoZWUpLmZyb21SZWQoKV19LGoucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oWSl7Zm9yKHZhciBYLFUscSxlZSx0ZSxvZSxzZSxoZSx1ZSxjZT10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEc9WSxi''@;'; put 'put ''PXRoaXMubi5jbG9uZSgpLEQ9bmV3IEsoMSksSD1uZXcgSygwKSxOPW5ldyBLKDApLGc9bmV3IEsoMSksQz0wOzAhPT1HLmNtcG4oMCk7KXt2YXIgUz1iLmRpdihHKTtoZT1iLnN1YihTLm11bChHKSksdWU9Ti5zdWIoUy5tdWwoRCkpO3ZhciB2PWcuc3ViKFMubXVsKEgpKTtpZighcSYmaGUu''@;'; put 'put ''Y21wKGNlKTwwKVg9c2UubmVnKCksVT1ELHE9aGUubmVnKCksZWU9dWU7ZWxzZSBpZihxJiYyPT0rK0MpYnJlYWs7c2U9aGUsYj1HLEc9aGUsTj1ELEQ9dWUsZz1ILEg9dn10ZT1oZS5uZWcoKSxvZT11ZTt2YXIgcD1xLnNxcigpLmFkZChlZS5zcXIoKSk7cmV0dXJuIHRlLnNxcigpLmFkZChv''@;'; put 'put ''ZS5zcXIoKSkuY21wKHApPj0wJiYodGU9WCxvZT1VKSxxLm5lZ2F0aXZlJiYocT1xLm5lZygpLGVlPWVlLm5lZygpKSx0ZS5uZWdhdGl2ZSYmKHRlPXRlLm5lZygpLG9lPW9lLm5lZygpKSxbe2E6cSxiOmVlfSx7YTp0ZSxiOm9lfV19LGoucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24o''@;'; put 'put ''WSl7dmFyIFg9dGhpcy5lbmRvLmJhc2lzLFU9WFswXSxxPVhbMV0sZWU9cS5iLm11bChZKS5kaXZSb3VuZCh0aGlzLm4pLHRlPVUuYi5uZWcoKS5tdWwoWSkuZGl2Um91bmQodGhpcy5uKSxvZT1lZS5tdWwoVS5hKSxzZT10ZS5tdWwocS5hKSxoZT1lZS5tdWwoVS5iKSx1ZT10ZS5tdWwocS5i''@;'; put 'put ''KTtyZXR1cm57azE6WS5zdWIob2UpLnN1YihzZSksazI6aGUuYWRkKHVlKS5uZWcoKX19LGoucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oWSxYKXsoWT1uZXcgSyhZLDE2KSkucmVkfHwoWT1ZLnRvUmVkKHRoaXMucmVkKSk7dmFyIFU9WS5yZWRTcXIoKS5yZWRNdWwoWSkucmVkSUFk''@;'; put 'put ''ZChZLnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYikscT1VLnJlZFNxcnQoKTtpZigwIT09cS5yZWRTcXIoKS5yZWRTdWIoVSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIGVlPXEuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKFgmJiFl''@;'; put 'put ''ZXx8IVgmJmVlKSYmKHE9cS5yZWROZWcoKSksdGhpcy5wb2ludChZLHEpfSxqLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihZKXtpZihZLmluZilyZXR1cm4hMDt2YXIgWD1ZLngsVT1ZLnkscT10aGlzLmEucmVkTXVsKFgpLGVlPVgucmVkU3FyKCkucmVkTXVsKFgpLnJlZElBZGQocSku''@;'; put 'put ''cmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09VS5yZWRTcXIoKS5yZWRJU3ViKGVlKS5jbXBuKDApfSxqLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24oWSxYLFUpe2Zvcih2YXIgcT10aGlzLl9lbmRvV25hZlQxLGVlPXRoaXMuX2VuZG9XbmFmVDIsdGU9MDt0ZTxZLmxlbmd0''@;'; put 'put ''aDt0ZSsrKXt2YXIgb2U9dGhpcy5fZW5kb1NwbGl0KFhbdGVdKSxzZT1ZW3RlXSxoZT1zZS5fZ2V0QmV0YSgpO29lLmsxLm5lZ2F0aXZlJiYob2UuazEuaW5lZygpLHNlPXNlLm5lZyghMCkpLG9lLmsyLm5lZ2F0aXZlJiYob2UuazIuaW5lZygpLGhlPWhlLm5lZyghMCkpLHFbMip0ZV09c2Us''@;'; put 'put ''cVsyKnRlKzFdPWhlLGVlWzIqdGVdPW9lLmsxLGVlWzIqdGUrMV09b2UuazJ9Zm9yKHZhciB1ZT10aGlzLl93bmFmTXVsQWRkKDEscSxlZSwyKnRlLFUpLGNlPTA7Y2U8Mip0ZTtjZSsrKXFbY2VdPW51bGwsZWVbY2VdPW51bGw7cmV0dXJuIHVlfSxJKFYsay5CYXNlUG9pbnQpLGoucHJvdG90''@;'; put 'put ''eXBlLnBvaW50PWZ1bmN0aW9uKFksWCxVKXtyZXR1cm4gbmV3IFYodGhpcyxZLFgsVSl9LGoucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oWSxYKXtyZXR1cm4gVi5mcm9tSlNPTih0aGlzLFksWCl9LFYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2''@;'; put 'put ''ZS5lbmRvKXt2YXIgWT10aGlzLnByZWNvbXB1dGVkO2lmKFkmJlkuYmV0YSlyZXR1cm4gWS5iZXRhO3ZhciBYPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihZKXt2YXIgVT10aGlzLmN1cnZlLHE9ZnVuY3Rpb24oZWUpe3Jl''@;'; put 'put ''dHVybiBVLnBvaW50KGVlLngucmVkTXVsKFUuZW5kby5iZXRhKSxlZS55KX07WS5iZXRhPVgsWC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjpZLm5hZiYme3duZDpZLm5hZi53bmQscG9pbnRzOlkubmFmLnBvaW50cy5tYXAocSl9LGRvdWJsZXM6WS5kb3VibGVzJiZ7c3RlcDpZLmRvdWJs''@;'; put 'put ''ZXMuc3RlcCxwb2ludHM6WS5kb3VibGVzLnBvaW50cy5tYXAocSl9fX1yZXR1cm4gWH19LFYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQu''@;'; put 'put ''ZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJl''@;'; put 'put ''Y29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LFYuZnJvbUpTT049ZnVuY3Rpb24oWSxYLFUpeyJzdHJpbmciPT10eXBlb2YgWCYmKFg9SlNPTi5wYXJzZShYKSk7dmFyIHE9WS5wb2ludChYWzBdLFhbMV0sVSk7aWYoIVhbMl0pcmV0dXJuIHE7ZnVuY3Rp''@;'; put 'put ''b24gZWUob2Upe3JldHVybiBZLnBvaW50KG9lWzBdLG9lWzFdLFUpfXZhciB0ZT1YWzJdO3JldHVybiBxLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91Ymxlczp0ZS5kb3VibGVzJiZ7c3RlcDp0ZS5kb3VibGVzLnN0ZXAscG9pbnRzOltxXS5jb25jYXQodGUuZG91Ymxlcy5wb2ludHMubWFw''@;'; put 'put ''KGVlKSl9LG5hZjp0ZS5uYWYmJnt3bmQ6dGUubmFmLnduZCxwb2ludHM6W3FdLmNvbmNhdCh0ZS5uYWYucG9pbnRzLm1hcChlZSkpfX0scX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQ''@;'; put 'put ''b2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxWLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxWLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oWSl7''@;'; put 'put ''aWYodGhpcy5pbmYpcmV0dXJuIFk7aWYoWS5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShZKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKFkpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoWS54KSlyZXR1cm4gdGhpcy5j''@;'; put 'put ''dXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBYPXRoaXMueS5yZWRTdWIoWS55KTswIT09WC5jbXBuKDApJiYoWD1YLnJlZE11bCh0aGlzLngucmVkU3ViKFkueCkucmVkSW52bSgpKSk7dmFyIFU9WC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihZLngpLHE9WC5yZWRNdWwodGhp''@;'; put 'put ''cy54LnJlZFN1YihVKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUscSl9LFYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBZPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09WS5jbXBuKDApKXJldHVybiB0''@;'; put 'put ''aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIFg9dGhpcy5jdXJ2ZS5hLFU9dGhpcy54LnJlZFNxcigpLHE9WS5yZWRJbnZtKCksZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKS5yZWRJQWRkKFgpLnJlZE11bChxKSx0ZT1lZS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhp''@;'; put 'put ''cy54KSksb2U9ZWUucmVkTXVsKHRoaXMueC5yZWRTdWIodGUpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGUsb2UpfSxWLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LFYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0sVi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFkpe3JldHVybiBZPW5ldyBLKFksMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhZKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLFkpOnRoaXMuY3VydmUuZW5k''@;'; put 'put ''bz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW1ldKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsWSl9LFYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihZLFgsVSl7dmFyIHE9W3RoaXMsWF0sZWU9W1ksVV07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9l''@;'; put 'put ''bmRvV25hZk11bEFkZChxLGVlKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEscSxlZSwyKX0sVi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihZLFgsVSl7dmFyIHE9W3RoaXMsWF0sZWU9W1ksVV07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChx''@;'; put 'put ''LGVlLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEscSxlZSwyLCEwKX0sVi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oWSl7cmV0dXJuIHRoaXM9PT1ZfHx0aGlzLmluZj09PVkuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKFkueCkmJjA9PT10aGlzLnkuY21wKFkueSkpfSxWLnBy''@;'; put 'put ''b3RvdHlwZS5uZWc9ZnVuY3Rpb24oWSl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIFg9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihZJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgVT10aGlzLnByZWNvbXB1dGVkLHE9ZnVuY3Rpb24oZWUpe3JldHVybiBl''@;'; put 'put ''ZS5uZWcoKX07WC5wcmVjb21wdXRlZD17bmFmOlUubmFmJiZ7d25kOlUubmFmLnduZCxwb2ludHM6VS5uYWYucG9pbnRzLm1hcChxKX0sZG91YmxlczpVLmRvdWJsZXMmJntzdGVwOlUuZG91Ymxlcy5zdGVwLHBvaW50czpVLmRvdWJsZXMucG9pbnRzLm1hcChxKX19fXJldHVybiBYfSxWLnBy''@;'; put 'put ''b3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxJKEIsay5CYXNlUG9pbnQpLGoucHJvdG90eXBlLmpwb2ludD1mdW5jdGlv''@;'; put 'put ''bihZLFgsVSl7cmV0dXJuIG5ldyBCKHRoaXMsWSxYLFUpfSxCLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBZPXRoaXMuei5yZWRJbnZtKCksWD1ZLnJlZFNxcigpLFU9dGhpcy54LnJl''@;'; put 'put ''ZE11bChYKSxxPXRoaXMueS5yZWRNdWwoWCkucmVkTXVsKFkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUscSl9LEIucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LEIucHJvdG90eXBlLmFk''@;'; put 'put ''ZD1mdW5jdGlvbihZKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gWTtpZihZLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgWD1ZLnoucmVkU3FyKCksVT10aGlzLnoucmVkU3FyKCkscT10aGlzLngucmVkTXVsKFgpLGVlPVkueC5yZWRNdWwoVSksdGU9dGhpcy55LnJlZE11bChY''@;'; put 'put ''LnJlZE11bChZLnopKSxvZT1ZLnkucmVkTXVsKFUucmVkTXVsKHRoaXMueikpLHNlPXEucmVkU3ViKGVlKSxoZT10ZS5yZWRTdWIob2UpO2lmKDA9PT1zZS5jbXBuKDApKXJldHVybiAwIT09aGUuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2''@;'; put 'put ''YXIgdWU9c2UucmVkU3FyKCksY2U9dWUucmVkTXVsKHNlKSxHPXEucmVkTXVsKHVlKSxiPWhlLnJlZFNxcigpLnJlZElBZGQoY2UpLnJlZElTdWIoRykucmVkSVN1YihHKSxEPWhlLnJlZE11bChHLnJlZElTdWIoYikpLnJlZElTdWIodGUucmVkTXVsKGNlKSksSD10aGlzLnoucmVkTXVsKFku''@;'; put 'put ''eikucmVkTXVsKHNlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYixELEgpfSxCLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihZKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gWS50b0ooKTtpZihZLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgWD10aGlzLnoucmVkU3Fy''@;'; put 'put ''KCksVT10aGlzLngscT1ZLngucmVkTXVsKFgpLGVlPXRoaXMueSx0ZT1ZLnkucmVkTXVsKFgpLnJlZE11bCh0aGlzLnopLG9lPVUucmVkU3ViKHEpLHNlPWVlLnJlZFN1Yih0ZSk7aWYoMD09PW9lLmNtcG4oMCkpcmV0dXJuIDAhPT1zZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGws''@;'; put 'put ''bnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBoZT1vZS5yZWRTcXIoKSx1ZT1oZS5yZWRNdWwob2UpLGNlPVUucmVkTXVsKGhlKSxHPXNlLnJlZFNxcigpLnJlZElBZGQodWUpLnJlZElTdWIoY2UpLnJlZElTdWIoY2UpLGI9c2UucmVkTXVsKGNlLnJlZElTdWIoRykpLnJlZElTdWIoZWUucmVk''@;'; put 'put ''TXVsKHVlKSksRD10aGlzLnoucmVkTXVsKG9lKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoRyxiLEQpfSxCLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKFkpe2lmKDA9PT1ZKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFZKXJldHVybiB0aGlzLmRi''@;'; put 'put ''bCgpO3ZhciBYO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgVT10aGlzO2ZvcihYPTA7WDxZO1grKylVPVUuZGJsKCk7cmV0dXJuIFV9dmFyIHE9dGhpcy5jdXJ2ZS5hLGVlPXRoaXMuY3VydmUudGludix0ZT10aGlzLngsb2U9dGhpcy55LHNlPXRoaXMueixo''@;'; put 'put ''ZT1zZS5yZWRTcXIoKS5yZWRTcXIoKSx1ZT1vZS5yZWRBZGQob2UpO2ZvcihYPTA7WDxZO1grKyl7dmFyIGNlPXRlLnJlZFNxcigpLEc9dWUucmVkU3FyKCksYj1HLnJlZFNxcigpLEQ9Y2UucmVkQWRkKGNlKS5yZWRJQWRkKGNlKS5yZWRJQWRkKHEucmVkTXVsKGhlKSksSD10ZS5yZWRNdWwo''@;'; put 'put ''RyksTj1ELnJlZFNxcigpLnJlZElTdWIoSC5yZWRBZGQoSCkpLGc9SC5yZWRJU3ViKE4pLEM9RC5yZWRNdWwoZyk7Qz1DLnJlZElBZGQoQykucmVkSVN1YihiKTt2YXIgUz11ZS5yZWRNdWwoc2UpO1grMTxZJiYoaGU9aGUucmVkTXVsKGIpKSx0ZT1OLHNlPVMsdWU9Q31yZXR1cm4gdGhpcy5j''@;'; put 'put ''dXJ2ZS5qcG9pbnQodGUsdWUucmVkTXVsKGVlKSxzZSl9LEIucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5f''@;'; put 'put ''ZGJsKCl9LEIucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIFksWCxVO2lmKHRoaXMuek9uZSl7dmFyIHE9dGhpcy54LnJlZFNxcigpLGVlPXRoaXMueS5yZWRTcXIoKSx0ZT1lZS5yZWRTcXIoKSxvZT10aGlzLngucmVkQWRkKGVlKS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElT''@;'; put 'put ''dWIodGUpO29lPW9lLnJlZElBZGQob2UpO3ZhciBzZT1xLnJlZEFkZChxKS5yZWRJQWRkKHEpLGhlPXNlLnJlZFNxcigpLnJlZElTdWIob2UpLnJlZElTdWIob2UpLHVlPXRlLnJlZElBZGQodGUpO3VlPSh1ZT11ZS5yZWRJQWRkKHVlKSkucmVkSUFkZCh1ZSksWT1oZSxYPXNlLnJlZE11bChv''@;'; put 'put ''ZS5yZWRJU3ViKGhlKSkucmVkSVN1Yih1ZSksVT10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgY2U9dGhpcy54LnJlZFNxcigpLEc9dGhpcy55LnJlZFNxcigpLGI9Ry5yZWRTcXIoKSxEPXRoaXMueC5yZWRBZGQoRykucmVkU3FyKCkucmVkSVN1YihjZSkucmVkSVN1YihiKTtEPUQu''@;'; put 'put ''cmVkSUFkZChEKTt2YXIgSD1jZS5yZWRBZGQoY2UpLnJlZElBZGQoY2UpLE49SC5yZWRTcXIoKSxnPWIucmVkSUFkZChiKTtnPShnPWcucmVkSUFkZChnKSkucmVkSUFkZChnKSxZPU4ucmVkSVN1YihEKS5yZWRJU3ViKEQpLFg9SC5yZWRNdWwoRC5yZWRJU3ViKFkpKS5yZWRJU3ViKGcpLFU9''@;'; put 'put ''KFU9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKFUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChZLFgsVSl9LEIucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBZLFgsVTtpZih0aGlzLnpPbmUpe3ZhciBxPXRoaXMueC5yZWRTcXIoKSxlZT10aGlzLnkucmVkU3Fy''@;'; put 'put ''KCksdGU9ZWUucmVkU3FyKCksb2U9dGhpcy54LnJlZEFkZChlZSkucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHRlKTtvZT1vZS5yZWRJQWRkKG9lKTt2YXIgc2U9cS5yZWRBZGQocSkucmVkSUFkZChxKS5yZWRJQWRkKHRoaXMuY3VydmUuYSksaGU9c2UucmVkU3FyKCkucmVkSVN1Yihv''@;'; put 'put ''ZSkucmVkSVN1YihvZSk7WT1oZTt2YXIgdWU9dGUucmVkSUFkZCh0ZSk7dWU9KHVlPXVlLnJlZElBZGQodWUpKS5yZWRJQWRkKHVlKSxYPXNlLnJlZE11bChvZS5yZWRJU3ViKGhlKSkucmVkSVN1Yih1ZSksVT10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgY2U9dGhpcy56LnJlZFNx''@;'; put 'put ''cigpLEc9dGhpcy55LnJlZFNxcigpLGI9dGhpcy54LnJlZE11bChHKSxEPXRoaXMueC5yZWRTdWIoY2UpLnJlZE11bCh0aGlzLngucmVkQWRkKGNlKSk7RD1ELnJlZEFkZChEKS5yZWRJQWRkKEQpO3ZhciBIPWIucmVkSUFkZChiKSxOPShIPUgucmVkSUFkZChIKSkucmVkQWRkKEgpO1k9RC5y''@;'; put 'put ''ZWRTcXIoKS5yZWRJU3ViKE4pLFU9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoRykucmVkSVN1YihjZSk7dmFyIGc9Ry5yZWRTcXIoKTtnPShnPShnPWcucmVkSUFkZChnKSkucmVkSUFkZChnKSkucmVkSUFkZChnKSxYPUQucmVkTXVsKEgucmVkSVN1YihZKSkucmVk''@;'; put 'put ''SVN1YihnKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWSxYLFUpfSxCLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5jdXJ2ZS5hLFg9dGhpcy54LFU9dGhpcy55LHE9dGhpcy56LGVlPXEucmVkU3FyKCkucmVkU3FyKCksdGU9WC5yZWRTcXIoKSxvZT1VLnJlZFNxcigp''@;'; put 'put ''LHNlPXRlLnJlZEFkZCh0ZSkucmVkSUFkZCh0ZSkucmVkSUFkZChZLnJlZE11bChlZSkpLGhlPVgucmVkQWRkKFgpLHVlPShoZT1oZS5yZWRJQWRkKGhlKSkucmVkTXVsKG9lKSxjZT1zZS5yZWRTcXIoKS5yZWRJU3ViKHVlLnJlZEFkZCh1ZSkpLEc9dWUucmVkSVN1YihjZSksYj1vZS5yZWRT''@;'; put 'put ''cXIoKTtiPShiPShiPWIucmVkSUFkZChiKSkucmVkSUFkZChiKSkucmVkSUFkZChiKTt2YXIgRD1zZS5yZWRNdWwoRykucmVkSVN1YihiKSxIPVUucmVkQWRkKFUpLnJlZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoY2UsRCxIKX0sQi5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigp''@;'; put 'put ''e2lmKCF0aGlzLmN1cnZlLnplcm9BKXJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgWT10aGlzLngucmVkU3FyKCksWD10aGlzLnkucmVkU3FyKCksVT10aGlzLnoucmVkU3FyKCkscT1YLnJlZFNxcigpLGVlPVkucmVkQWRkKFkpLnJlZElBZGQoWSksdGU9ZWUucmVkU3FyKCksb2U9''@;'; put 'put ''dGhpcy54LnJlZEFkZChYKS5yZWRTcXIoKS5yZWRJU3ViKFkpLnJlZElTdWIocSksc2U9KG9lPShvZT0ob2U9b2UucmVkSUFkZChvZSkpLnJlZEFkZChvZSkucmVkSUFkZChvZSkpLnJlZElTdWIodGUpKS5yZWRTcXIoKSxoZT1xLnJlZElBZGQocSk7aGU9KGhlPShoZT1oZS5yZWRJQWRkKGhl''@;'; put 'put ''KSkucmVkSUFkZChoZSkpLnJlZElBZGQoaGUpO3ZhciB1ZT1lZS5yZWRJQWRkKG9lKS5yZWRTcXIoKS5yZWRJU3ViKHRlKS5yZWRJU3ViKHNlKS5yZWRJU3ViKGhlKSxjZT1YLnJlZE11bCh1ZSk7Y2U9KGNlPWNlLnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKTt2YXIgRz10aGlzLngucmVkTXVs''@;'; put 'put ''KHNlKS5yZWRJU3ViKGNlKTtHPShHPUcucmVkSUFkZChHKSkucmVkSUFkZChHKTt2YXIgYj10aGlzLnkucmVkTXVsKHVlLnJlZE11bChoZS5yZWRJU3ViKHVlKSkucmVkSVN1YihvZS5yZWRNdWwoc2UpKSk7Yj0oYj0oYj1iLnJlZElBZGQoYikpLnJlZElBZGQoYikpLnJlZElBZGQoYik7dmFy''@;'; put 'put ''IEQ9dGhpcy56LnJlZEFkZChvZSkucmVkU3FyKCkucmVkSVN1YihVKS5yZWRJU3ViKHNlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoRyxiLEQpfSxCLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oWSxYKXtyZXR1cm4gWT1uZXcgSyhZLFgpLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxZKX0s''@;'; put 'put ''Qi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oWSl7aWYoImFmZmluZSI9PT1ZLnR5cGUpcmV0dXJuIHRoaXMuZXEoWS50b0ooKSk7aWYodGhpcz09PVkpcmV0dXJuITA7dmFyIFg9dGhpcy56LnJlZFNxcigpLFU9WS56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKFUpLnJlZElTdWIoWS54''@;'; put 'put ''LnJlZE11bChYKSkuY21wbigwKSlyZXR1cm4hMTt2YXIgcT1YLnJlZE11bCh0aGlzLnopLGVlPVUucmVkTXVsKFkueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKGVlKS5yZWRJU3ViKFkueS5yZWRNdWwocSkpLmNtcG4oMCl9LEIucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihZKXt2YXIg''@;'; put 'put ''WD10aGlzLnoucmVkU3FyKCksVT1ZLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoWCk7aWYoMD09PXRoaXMueC5jbXAoVSkpcmV0dXJuITA7Zm9yKHZhciBxPVkuY2xvbmUoKSxlZT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKFgpOzspe2lmKHEuaWFkZCh0aGlzLmN1cnZlLm4pLHEuY21w''@;'; put 'put ''KHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoVS5yZWRJQWRkKGVlKSwwPT09dGhpcy54LmNtcChVKSlyZXR1cm4hMH19LEIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4''@;'; put 'put ''OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxCLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDU0Mjc6KE0sTyxSKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPU8sST1SKDM3MTUpLGs9Uig4MjU0KSxFPVIoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gaihCKXt0aGlzLmN1cnZlPSJzaG9ydCI9PT1CLnR5cGU/bmV3IGsuc2hvcnQoQik6ImVkd2FyZHMiPT09Qi50eXBlP25ldyBrLmVkd2FyZHMoQik6bmV3IGsubW9udChC''@;'; put 'put ''KSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPUIuaGFzaCxFKHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZlIiksRSh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9u''@;'; put 'put ''IFYoQixZKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSyxCLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgWD1uZXcgaihZKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KEssQix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6''@;'; put 'put ''WH0pLFh9fSl9Sy5QcmVzZXRDdXJ2ZT1qLFYoInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmYyIsYjoiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIw''@;'; put 'put ''MzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEiXX0pLFYoInAyMjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAyMjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSIsYjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMg''@;'; put 'put ''MjM1NWZmYjQiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIx''@;'; put 'put ''IiwiYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLFYoInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRi''@;'; put 'put ''IixuOiJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0''@;'; put 'put ''NSBkODk4YzI5NiIsIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxWKCJwMzg0Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAw''@;'; put 'put ''MDAwMDAwIGZmZmZmZmZjIixiOiJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6SS5zaGEzODQsZ1JlZDohMSxnOlsiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAg''@;'; put 'put ''ODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksVigicDUy''@;'; put 'put ''MSIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIixhOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmYyIsYjoiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNm''@;'; put 'put ''MDAiLG46IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNo''@;'; put 'put ''Okkuc2hhNTEyLGdSZWQ6ITEsZzpbIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMx''@;'; put 'put ''IGMyZTViZDY2IiwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAi''@;'; put 'put ''XX0pLFYoImN1cnZlMjU1MTkiLHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxWKCJlZDI1NTE5Iix7dHlwZToiZWR3YXJkcyIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTMiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4''@;'; put 'put ''MTI2MzFhNWNmNWQzZWQiLGhhc2g6SS5zaGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYSIsIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2''@;'; put 'put ''NjY2NjY2NTgiXX0pO3RyeXt6PVIoMTAzNyl9Y2F0Y2h7ej12b2lkIDB9Vigic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIs''@;'; put 'put ''YjoiNyIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6SS5zaGEyNTYsYmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3''@;'; put 'put ''MTk1MDFlZSIsbGFtYmRhOiI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMi''@;'; put 'put ''fSx7YToiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRh''@;'; put 'put ''NzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsel19KX0sNzk1NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDIxNTYpLEk9Uig5NTMpLGs9Uig1NDI3KSxFPVIoOTkzMSksaj1JLmFzc2VydCxWPVIoMTI1''@;'; put 'put ''MSksQj1SKDYxMSk7ZnVuY3Rpb24gWShYKXtpZighKHRoaXMgaW5zdGFuY2VvZiBZKSlyZXR1cm4gbmV3IFkoWCk7InN0cmluZyI9PXR5cGVvZiBYJiYoaihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxYKSwiVW5rbm93biBjdXJ2ZSAiK1gpLFg9a1tYXSksWCBpbnN0''@;'; put 'put ''YW5jZW9mIGsuUHJlc2V0Q3VydmUmJihYPXtjdXJ2ZTpYfSksdGhpcy5jdXJ2ZT1YLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9WC5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKFguY3Vy''@;'; put 'put ''dmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9WC5oYXNofHxYLmN1cnZlLmhhc2h9TS5leHBvcnRzPVksWS5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbihYKXtyZXR1cm4gbmV3IFYodGhpcyxYKX0sWS5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24oWCxVKXtyZXR1cm4g''@;'; put 'put ''Vi5mcm9tUHJpdmF0ZSh0aGlzLFgsVSl9LFkucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oWCxVKXtyZXR1cm4gVi5mcm9tUHVibGljKHRoaXMsWCxVKX0sWS5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihYKXtYfHwoWD17fSk7Zm9yKHZhciBVPW5ldyBLKHtoYXNoOnRo''@;'; put 'put ''aXMuaGFzaCxwZXJzOlgucGVycyxwZXJzRW5jOlgucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6WC5lbnRyb3B5fHxFKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6WC5lbnRyb3B5JiZYLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0aGlzLm4udG9BcnJheSgpfSkscT10aGlz''@;'; put 'put ''Lm4uYnl0ZUxlbmd0aCgpLGVlPXRoaXMubi5zdWIobmV3IHooMikpOzspe3ZhciB0ZT1uZXcgeihVLmdlbmVyYXRlKHEpKTtpZighKHRlLmNtcChlZSk+MCkpcmV0dXJuIHRlLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUodGUpfX0sWS5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0''@;'; put 'put ''aW9uKFgsVSl7dmFyIHE9OCpYLmJ5dGVMZW5ndGgoKS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIHE+MCYmKFg9WC51c2hybihxKSksIVUmJlguY21wKHRoaXMubik+PTA/WC5zdWIodGhpcy5uKTpYfSxZLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFgsVSxxLGVlKXsib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIHEmJihlZT1xLHE9bnVsbCksZWV8fChlZT17fSksVT10aGlzLmtleUZyb21Qcml2YXRlKFUscSksWD10aGlzLl90cnVuY2F0ZVRvTihuZXcgeihYLDE2KSk7Zm9yKHZhciB0ZT10aGlzLm4uYnl0ZUxlbmd0aCgpLG9lPVUuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIix0ZSksc2U9WC50''@;'; put 'put ''b0FycmF5KCJiZSIsdGUpLGhlPW5ldyBLKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5Om9lLG5vbmNlOnNlLHBlcnM6ZWUucGVycyxwZXJzRW5jOmVlLnBlcnNFbmN8fCJ1dGY4In0pLHVlPXRoaXMubi5zdWIobmV3IHooMSkpLGNlPTA7O2NlKyspe3ZhciBHPWVlLms/ZWUuayhjZSk6bmV3IHoo''@;'; put 'put ''aGUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKEc9dGhpcy5fdHJ1bmNhdGVUb04oRywhMCkpLmNtcG4oMSk8PTB8fEcuY21wKHVlKT49MCkpe3ZhciBiPXRoaXMuZy5tdWwoRyk7aWYoIWIuaXNJbmZpbml0eSgpKXt2YXIgRD1iLmdldFgoKSxIPUQudW1vZCh0aGlzLm4p''@;'; put 'put ''O2lmKDAhPT1ILmNtcG4oMCkpe3ZhciBOPUcuaW52bSh0aGlzLm4pLm11bChILm11bChVLmdldFByaXZhdGUoKSkuaWFkZChYKSk7aWYoMCE9PShOPU4udW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgZz0oYi5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09RC5jbXAoSCk/MjowKTtyZXR1cm4g''@;'; put 'put ''ZWUuY2Fub25pY2FsJiZOLmNtcCh0aGlzLm5oKT4wJiYoTj10aGlzLm4uc3ViKE4pLGdePTEpLG5ldyBCKHtyOkgsczpOLHJlY292ZXJ5UGFyYW06Z30pfX19fX19LFkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihYLFUscSxlZSl7WD10aGlzLl90cnVuY2F0ZVRvTihuZXcgeihYLDE2KSks''@;'; put 'put ''cT10aGlzLmtleUZyb21QdWJsaWMocSxlZSk7dmFyIHRlPShVPW5ldyBCKFUsImhleCIpKS5yLG9lPVUucztpZih0ZS5jbXBuKDEpPDB8fHRlLmNtcCh0aGlzLm4pPj0wfHxvZS5jbXBuKDEpPDB8fG9lLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBzZSxoZT1vZS5pbnZtKHRoaXMubiks''@;'; put 'put ''dWU9aGUubXVsKFgpLnVtb2QodGhpcy5uKSxjZT1oZS5tdWwodGUpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEoc2U9dGhpcy5nLmptdWxBZGQodWUscS5nZXRQdWJsaWMoKSxjZSkpLmlzSW5maW5pdHkoKSYmc2UuZXFYVG9QKHRlKTohKHNlPXRoaXMu''@;'; put 'put ''Zy5tdWxBZGQodWUscS5nZXRQdWJsaWMoKSxjZSkpLmlzSW5maW5pdHkoKSYmMD09PXNlLmdldFgoKS51bW9kKHRoaXMubikuY21wKHRlKX0sWS5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihYLFUscSxlZSl7aigoMyZxKT09PXEsIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3Jl''@;'; put 'put ''IHRoYW4gdHdvIGJpdHMiKSxVPW5ldyBCKFUsZWUpO3ZhciB0ZT10aGlzLm4sb2U9bmV3IHooWCksc2U9VS5yLGhlPVUucyx1ZT0xJnEsY2U9cT4+MTtpZihzZS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJmNlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZp''@;'; put 'put ''bmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7c2U9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKGNlP3NlLmFkZCh0aGlzLmN1cnZlLm4pOnNlLHVlKTt2YXIgRz1VLnIuaW52bSh0ZSksYj10ZS5zdWIob2UpLm11bChHKS51bW9kKHRlKSxEPWhlLm11bChHKS51bW9kKHRlKTtyZXR1cm4gdGhpcy5n''@;'; put 'put ''Lm11bEFkZChiLHNlLEQpfSxZLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKFgsVSxxLGVlKXtpZihudWxsIT09KFU9bmV3IEIoVSxlZSkpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIFUucmVjb3ZlcnlQYXJhbTtmb3IodmFyIHRlPTA7dGU8NDt0ZSsrKXt2YXIgb2U7dHJ5''@;'; put 'put ''e29lPXRoaXMucmVjb3ZlclB1YktleShYLFUsdGUpfWNhdGNoe2NvbnRpbnVlfWlmKG9lLmVxKHEpKXJldHVybiB0ZX10aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvciIpfX0sMTI1MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4''@;'; put 'put ''NSksSz1SKDk1MykuYXNzZXJ0O2Z1bmN0aW9uIEkoayxFKXt0aGlzLmVjPWssdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxFLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoRS5wcml2LEUucHJpdkVuYyksRS5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhFLnB1YixFLnB1YkVuYyl9TS5l''@;'; put 'put ''eHBvcnRzPUksSS5mcm9tUHVibGljPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4gRSBpbnN0YW5jZW9mIEk/RTpuZXcgSShrLHtwdWI6RSxwdWJFbmM6an0pfSxJLmZyb21Qcml2YXRlPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4gRSBpbnN0YW5jZW9mIEk/RTpuZXcgSShrLHtwcml2OkUscHJpdkVu''@;'; put 'put ''YzpqfSl9LEkucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gay5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OmsudmFsaWRhdGUoKT9rLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5m''@;'; put 'put ''aW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LEkucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihrLEUpe3JldHVybiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgayYmKEU9ayxrPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxFP3RoaXMucHViLmVuY29kZShFLGspOnRoaXMucHVifSxJLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKGspe3JldHVybiJoZXgiPT09az90aGlz''@;'; put 'put ''LnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxJLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihrLEUpe3RoaXMucHJpdj1uZXcgeihrLEV8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sSS5wcm90b3R5cGUuX2ltcG9ydFB1Ymxp''@;'; put 'put ''Yz1mdW5jdGlvbihrLEUpe2lmKGsueHx8ay55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9LKGsueCwiTmVlZCB4IGNvb3JkaW5hdGUiKToic2hvcnQiIT09dGhpcy5lYy5jdXJ2ZS50eXBlJiYiZWR3YXJkcyIhPT10aGlzLmVjLmN1cnZlLnR5cGV8fEsoay54JiZrLnksIk5l''@;'; put 'put ''ZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQoay54LGsueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoayxFKX0sSS5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKGspe3JldHVybiBrLnZhbGlkYXRlKCl8''@;'; put 'put ''fEsoay52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLGsubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxJLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4gdGhpcy5lYy5zaWduKGssdGhpcyxFLGopfSxJLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24o''@;'; put 'put ''ayxFKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoayxFLHRoaXMpfSxJLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgp''@;'; put 'put ''KSsiID4ifX0sNjExOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoOTUzKSxJPUsuYXNzZXJ0O2Z1bmN0aW9uIGsoWSxYKXtpZihZIGluc3RhbmNlb2YgaylyZXR1cm4gWTt0aGlzLl9pbXBvcnRERVIoWSxYKXx8KEkoWS5yJiZZLnMsIlNpZ25hdHVyZSB3aXRob3V0''@;'; put 'put ''IHIgb3IgcyIpLHRoaXMucj1uZXcgeihZLnIsMTYpLHRoaXMucz1uZXcgeihZLnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1ZLnJlY292ZXJ5UGFyYW0/bnVsbDpZLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIEUoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gaihZLFgpe3ZhciBV''@;'; put 'put ''PVlbWC5wbGFjZSsrXTtpZighKDEyOCZVKSlyZXR1cm4gVTt2YXIgcT0xNSZVO2lmKDA9PT1xfHxxPjQpcmV0dXJuITE7Zm9yKHZhciBlZT0wLHRlPTAsb2U9WC5wbGFjZTt0ZTxxO3RlKyssb2UrKyllZTw8PTgsZWV8PVlbb2VdLGVlPj4+PTA7cmV0dXJuIShlZTw9MTI3KSYmKFgucGxhY2U9''@;'; put 'put ''b2UsZWUpfWZ1bmN0aW9uIFYoWSl7Zm9yKHZhciBYPTAsVT1ZLmxlbmd0aC0xOyFZW1hdJiYhKDEyOCZZW1grMV0pJiZYPFU7KVgrKztyZXR1cm4gMD09PVg/WTpZLnNsaWNlKFgpfWZ1bmN0aW9uIEIoWSxYKXtpZihYPDEyOClZLnB1c2goWCk7ZWxzZXt2YXIgVT0xKyhNYXRoLmxvZyhYKS9N''@;'; put 'put ''YXRoLkxOMj4+PjMpO2ZvcihZLnB1c2goMTI4fFUpOy0tVTspWS5wdXNoKFg+Pj4oVTw8MykmMjU1KTtZLnB1c2goWCl9fU0uZXhwb3J0cz1rLGsucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oWSxYKXtZPUsudG9BcnJheShZLFgpO3ZhciBVPW5ldyBFO2lmKDQ4IT09WVtVLnBsYWNl''@;'; put 'put ''KytdKXJldHVybiExO3ZhciBxPWooWSxVKTtpZighMT09PXF8fHErVS5wbGFjZSE9PVkubGVuZ3RofHwyIT09WVtVLnBsYWNlKytdKXJldHVybiExO3ZhciBlZT1qKFksVSk7aWYoITE9PT1lZSlyZXR1cm4hMTt2YXIgdGU9WS5zbGljZShVLnBsYWNlLGVlK1UucGxhY2UpO2lmKFUucGxhY2Ur''@;'; put 'put ''PWVlLDIhPT1ZW1UucGxhY2UrK10pcmV0dXJuITE7dmFyIG9lPWooWSxVKTtpZighMT09PW9lfHxZLmxlbmd0aCE9PW9lK1UucGxhY2UpcmV0dXJuITE7dmFyIHNlPVkuc2xpY2UoVS5wbGFjZSxvZStVLnBsYWNlKTtpZigwPT09dGVbMF0pe2lmKCEoMTI4JnRlWzFdKSlyZXR1cm4hMTt0ZT10''@;'; put 'put ''ZS5zbGljZSgxKX1pZigwPT09c2VbMF0pe2lmKCEoMTI4JnNlWzFdKSlyZXR1cm4hMTtzZT1zZS5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyB6KHRlKSx0aGlzLnM9bmV3IHooc2UpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxrLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihZKXt2''@;'; put 'put ''YXIgWD10aGlzLnIudG9BcnJheSgpLFU9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JlhbMF0mJihYPVswXS5jb25jYXQoWCkpLDEyOCZVWzBdJiYoVT1bMF0uY29uY2F0KFUpKSxYPVYoWCksVT1WKFUpOyEoVVswXXx8MTI4JlVbMV0pOylVPVUuc2xpY2UoMSk7dmFyIHE9WzJdO0IocSxYLmxl''@;'; put 'put ''bmd0aCksKHE9cS5jb25jYXQoWCkpLnB1c2goMiksQihxLFUubGVuZ3RoKTt2YXIgZWU9cS5jb25jYXQoVSksdGU9WzQ4XTtyZXR1cm4gQih0ZSxlZS5sZW5ndGgpLHRlPXRlLmNvbmNhdChlZSksSy5lbmNvZGUodGUsWSl9fSw1OTgwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uigz''@;'; put 'put ''NzE1KSxLPVIoNTQyNyksST1SKDk1Myksaz1JLmFzc2VydCxFPUkucGFyc2VCeXRlcyxqPVIoOTA4NyksVj1SKDM2MjIpO2Z1bmN0aW9uIEIoWSl7aWYoaygiZWQyNTUxOSI9PT1ZLCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJu''@;'; put 'put ''IG5ldyBCKFkpO3RoaXMuY3VydmU9WT1LW1ldLmN1cnZlLHRoaXMuZz1ZLmcsdGhpcy5nLnByZWNvbXB1dGUoWS5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz1ZLnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoWS5uLmJpdExlbmd0aCgp''@;'; put 'put ''LzgpLHRoaXMuaGFzaD16LnNoYTUxMn1NLmV4cG9ydHM9QixCLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFksWCl7WT1FKFkpO3ZhciBVPXRoaXMua2V5RnJvbVNlY3JldChYKSxxPXRoaXMuaGFzaEludChVLm1lc3NhZ2VQcmVmaXgoKSxZKSxlZT10aGlzLmcubXVsKHEpLHRlPXRoaXMuZW5j''@;'; put 'put ''b2RlUG9pbnQoZWUpLG9lPXRoaXMuaGFzaEludCh0ZSxVLnB1YkJ5dGVzKCksWSkubXVsKFUucHJpdigpKSxzZT1xLmFkZChvZSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6ZWUsUzpzZSxSZW5jb2RlZDp0ZX0pfSxCLnByb3RvdHlwZS52ZXJpZnk9''@;'; put 'put ''ZnVuY3Rpb24oWSxYLFUpe1k9RShZKSxYPXRoaXMubWFrZVNpZ25hdHVyZShYKTt2YXIgcT10aGlzLmtleUZyb21QdWJsaWMoVSksZWU9dGhpcy5oYXNoSW50KFguUmVuY29kZWQoKSxxLnB1YkJ5dGVzKCksWSksdGU9dGhpcy5nLm11bChYLlMoKSk7cmV0dXJuIFguUigpLmFkZChxLnB1Yigp''@;'; put 'put ''Lm11bChlZSkpLmVxKHRlKX0sQi5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgWT10aGlzLmhhc2goKSxYPTA7WDxhcmd1bWVudHMubGVuZ3RoO1grKylZLnVwZGF0ZShhcmd1bWVudHNbWF0pO3JldHVybiBJLmludEZyb21MRShZLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3Vy''@;'; put 'put ''dmUubil9LEIucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oWSl7cmV0dXJuIGouZnJvbVB1YmxpYyh0aGlzLFkpfSxCLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKFkpe3JldHVybiBqLmZyb21TZWNyZXQodGhpcyxZKX0sQi5wcm90b3R5cGUubWFrZVNpZ25hdHVy''@;'; put 'put ''ZT1mdW5jdGlvbihZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIFY/WTpuZXcgVih0aGlzLFkpfSxCLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihZKXt2YXIgWD1ZLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIFhbdGhpcy5lbmNvZGluZ0xlbmd0''@;'; put 'put ''aC0xXXw9WS5nZXRYKCkuaXNPZGQoKT8xMjg6MCxYfSxCLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihZKXt2YXIgWD0oWT1JLnBhcnNlQnl0ZXMoWSkpLmxlbmd0aC0xLFU9WS5zbGljZSgwLFgpLmNvbmNhdCgtMTI5JllbWF0pLHE9MCE9KDEyOCZZW1hdKSxlZT1JLmludEZyb21M''@;'; put 'put ''RShVKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKGVlLHEpfSxCLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oWSl7cmV0dXJuIFkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxCLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oWSl7cmV0dXJuIEkuaW50''@;'; put 'put ''RnJvbUxFKFkpfSxCLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKFkpe3JldHVybiBZIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sOTA4NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUzKSxLPXouYXNzZXJ0LEk9ei5wYXJzZUJ5dGVzLGs9ei5jYWNoZWRQcm9wZXJ0''@;'; put 'put ''eTtmdW5jdGlvbiBFKGosVil7dGhpcy5lZGRzYT1qLHRoaXMuX3NlY3JldD1JKFYuc2VjcmV0KSxqLmlzUG9pbnQoVi5wdWIpP3RoaXMuX3B1Yj1WLnB1Yjp0aGlzLl9wdWJCeXRlcz1JKFYucHViKX1FLmZyb21QdWJsaWM9ZnVuY3Rpb24oaixWKXtyZXR1cm4gViBpbnN0YW5jZW9mIEU/Vjpu''@;'; put 'put ''ZXcgRShqLHtwdWI6Vn0pfSxFLmZyb21TZWNyZXQ9ZnVuY3Rpb24oaixWKXtyZXR1cm4gViBpbnN0YW5jZW9mIEU/VjpuZXcgRShqLHtzZWNyZXQ6Vn0pfSxFLnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxrKEUsInB1YkJ5dGVzIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksayhFLCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksayhFLCJw''@;'; put 'put ''cml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIGo9dGhpcy5lZGRzYSxWPXRoaXMuaGFzaCgpLEI9ai5lbmNvZGluZ0xlbmd0aC0xLFk9Vi5zbGljZSgwLGouZW5jb2RpbmdMZW5ndGgpO3JldHVybiBZWzBdJj0yNDgsWVtCXSY9MTI3LFlbQl18PTY0LFl9KSxrKEUsInByaXYiLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksayhFLCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxrKEUsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksRS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihqKXtyZXR1cm4gSyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKGosdGhpcyl9LEUucHJvdG90eXBlLnZl''@;'; put 'put ''cmlmeT1mdW5jdGlvbihqLFYpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShqLFYsdGhpcyl9LEUucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihqKXtyZXR1cm4gSyh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSx6LmVuY29kZSh0aGlzLnNlY3JldCgpLGopfSxF''@;'; put 'put ''LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oail7cmV0dXJuIHouZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxqKX0sTS5leHBvcnRzPUV9LDM2MjI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM3ODUpLEs9Uig5NTMpLEk9Sy5hc3NlcnQsaz1LLmNhY2hlZFByb3BlcnR5LEU9''@;'; put 'put ''Sy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIGooVixCKXt0aGlzLmVkZHNhPVYsIm9iamVjdCIhPXR5cGVvZiBCJiYoQj1FKEIpKSxBcnJheS5pc0FycmF5KEIpJiYoQj17UjpCLnNsaWNlKDAsVi5lbmNvZGluZ0xlbmd0aCksUzpCLnNsaWNlKFYuZW5jb2RpbmdMZW5ndGgpfSksSShCLlImJkIuUywi''@;'; put 'put ''U2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTIiksVi5pc1BvaW50KEIuUikmJih0aGlzLl9SPUIuUiksQi5TIGluc3RhbmNlb2YgeiYmKHRoaXMuX1M9Qi5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KEIuUik/Qi5SOkIuUmVuY29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJh''@;'; put 'put ''eShCLlMpP0IuUzpCLlNlbmNvZGVkfWsoaiwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLGsoaiwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSksayhqLCJSZW5j''@;'; put 'put ''b2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxrKGosIlNlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxqLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sai5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gSy5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LE0uZXhwb3J0cz1qfSwxMDM3Ok09PntNLmV4cG9ydHM9e2RvdWJsZXM6e3N0''@;'; put 'put ''ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJjNjA5''@;'; put 'put ''ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQy''@;'; put 'put ''MjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRlMjcz''@;'; put 'put ''YWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0Zjll''@;'; put 'put ''MzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVm''@;'; put 'put ''Il0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEw''@;'; put 'put ''OWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIsImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFj''@;'; put 'put ''ZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2RjZTFi''@;'; put 'put ''YWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3''@;'; put 'put ''NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4ZTdi''@;'; put 'put ''Y2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3''@;'; put 'put ''MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNh''@;'; put 'put ''NyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0''@;'; put 'put ''ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0sWyI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5''@;'; put 'put ''NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4MDFj''@;'; put 'put ''MzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJm''@;'; put 'put ''ZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5MDg5''@;'; put 'put ''NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0''@;'; put 'put ''ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2''@;'; put 'put ''Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBk''@;'; put 'put ''NTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIsImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1''@;'; put 'put ''MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJjN2Vh''@;'; put 'put ''ZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZm''@;'; put 'put ''M2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJhMzAx''@;'; put 'put ''Njk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIw''@;'; put 'put ''OGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBk''@;'; put 'put ''YSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBl''@;'; put 'put ''YTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0sWyI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0''@;'; put 'put ''YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2NjJl''@;'; put 'put ''YzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTcz''@;'; put 'put ''YzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4YTM2''@;'; put 'put ''NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUw''@;'; put 'put ''NmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCJd''@;'; put 'put ''LFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgiXSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUx''@;'; put 'put ''OGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4''@;'; put 'put ''OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhYyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJhODI3''@;'; put 'put ''Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMx''@;'; put 'put ''NTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4MjdmYmJl''@;'; put 'put ''NGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4''@;'; put 'put ''ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYi''@;'; put 'put ''LCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdh''@;'; put 'put ''YmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4''@;'; put 'put ''M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIxYTEx''@;'; put 'put ''YjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYx''@;'; put 'put ''ZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5ZGMz''@;'; put 'put ''N2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1''@;'; put 'put ''M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUi''@;'; put 'put ''XSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNl''@;'; put 'put ''NTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4IiwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMw''@;'; put 'put ''M2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVjMDYz''@;'; put 'put ''ODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5''@;'; put 'put ''NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2MjVm''@;'; put 'put ''YWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJi''@;'; put 'put ''YzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZm''@;'; put 'put ''OTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhhYzIy''@;'; put 'put ''MjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgx''@;'; put 'put ''M2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3''@;'; put 'put ''Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1''@;'; put 'put ''YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIsImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJj''@;'; put 'put ''ZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1MTY4''@;'; put 'put ''ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5''@;'; put 'put ''NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJmYTIx''@;'; put 'put ''MDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYz''@;'; put 'put ''YzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5''@;'; put 'put ''IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5''@;'; put 'put ''ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxbIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0''@;'; put 'put ''ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgxNzE4''@;'; put 'put ''Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTli''@;'; put 'put ''MTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4MzAz''@;'; put 'put ''ZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5''@;'; put 'put ''ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMyJd''@;'; put 'put ''LFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJdLFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0''@;'; put 'put ''NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFi''@;'; put 'put ''NzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMzNTQz''@;'; put 'put ''MTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2Uy''@;'; put 'put ''NmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAwY2E0''@;'; put 'put ''YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0''@;'; put 'put ''ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCIs''@;'; put 'put ''IjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIsIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEz''@;'; put 'put ''Y2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZl''@;'; put 'put ''ODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmIiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3YTQ5''@;'; put 'put ''N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3''@;'; put 'put ''YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNmZDgz''@;'; put 'put ''MWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRh''@;'; put 'put ''NjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlIl0s''@;'; put 'put ''WyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJdLFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5''@;'; put 'put ''Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5''@;'; put 'put ''ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlIl0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3NjBk''@;'; put 'put ''NWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4''@;'; put 'put ''YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0ZDg0''@;'; put 'put ''NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTky''@;'; put 'put ''NDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMi''@;'; put 'put ''LCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwIiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5''@;'; put 'put ''NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3''@;'; put 'put ''ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJlODli''@;'; put 'put ''MzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFm''@;'; put 'put ''ZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2ODEy''@;'; put 'put ''OGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFj''@;'; put 'put ''OWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2Il0s''@;'; put 'put ''WyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJdLFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVl''@;'; put 'put ''NjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1''@;'; put 'put ''ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjIl0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0''@;'; put 'put ''MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZl''@;'; put 'put ''NTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkxNjM2''@;'; put 'put ''NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUw''@;'; put 'put ''ZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUiLCIz''@;'; put 'put ''OWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2IiwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFh''@;'; put 'put ''OTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZk''@;'; put 'put ''YTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIsIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4MTMz''@;'; put 'put ''MzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQiLCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0''@;'; put 'put ''MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTljNzc1''@;'; put 'put ''YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0''@;'; put 'put ''YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsiZDI0''@;'; put 'put ''YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0''@;'; put 'put ''MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIx''@;'; put 'put ''MzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdi''@;'; put 'put ''ZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0sWyI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThm''@;'; put 'put ''MWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5YzVh''@;'; put 'put ''MTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0''@;'; put 'put ''YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZmMGEy''@;'; put 'put ''NTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzVi''@;'; put 'put ''NzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYi''@;'; put 'put ''XSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3''@;'; put 'put ''NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5''@;'; put 'put ''NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBmYjky''@;'; put 'put ''YTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2''@;'; put 'put ''YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0Zjll''@;'; put 'put ''YWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0''@;'; put 'put ''ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJj''@;'; put 'put ''NCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIz''@;'; put 'put ''OTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0sWyI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5''@;'; put 'put ''MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0ZGZh''@;'; put 'put ''YTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4''@;'; put 'put ''ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFhY2Iy''@;'; put 'put ''NTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThj''@;'; put 'put ''ZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBk''@;'; put 'put ''OCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3''@;'; put 'put ''MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMiLCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0''@;'; put 'put ''M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMxYzk0''@;'; put 'put ''YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRm''@;'; put 'put ''ZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUyY2I3''@;'; put 'put ''NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2''@;'; put 'put ''MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3''@;'; put 'put ''ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdj''@;'; put 'put ''NzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxbIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNj''@;'; put 'put ''NjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUzODU1''@;'; put 'put ''NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFl''@;'; put 'put ''NTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2MxMGRm''@;'; put 'put ''YjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2Iz''@;'; put 'put ''Y2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdh''@;'; put 'put ''Il0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQy''@;'; put 'put ''MjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIsImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2Rk''@;'; put 'put ''ZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5YzYz''@;'; put 'put ''Y2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTlj''@;'; put 'put ''YTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3NmUy''@;'; put 'put ''Njk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNm''@;'; put 'put ''MTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcy''@;'; put 'put ''MSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdm''@;'; put 'put ''ZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1dfX19LDk1MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PU8sSz1SKDM3ODUpLEk9Uig5NzQ2KSxrPVIoNDUwNCk7ei5hc3NlcnQ9SSx6LnRvQXJyYXk9ay50b0FycmF5LHouemVybzI9ay56ZXJvMix6LnRvSGV4''@;'; put 'put ''PWsudG9IZXgsei5lbmNvZGU9ay5lbmNvZGUsei5nZXROQUY9ZnVuY3Rpb24oRSxqLFYpe3ZhciBCPW5ldyBBcnJheShNYXRoLm1heChFLmJpdExlbmd0aCgpLFYpKzEpO0IuZmlsbCgwKTtmb3IodmFyIFk9MTw8aisxLFg9RS5jbG9uZSgpLFU9MDtVPEIubGVuZ3RoO1UrKyl7dmFyIHEsZWU9''@;'; put 'put ''WC5hbmRsbihZLTEpO1guaXNPZGQoKT9YLmlzdWJuKHE9ZWU+KFk+PjEpLTE/KFk+PjEpLWVlOmVlKTpxPTAsQltVXT1xLFguaXVzaHJuKDEpfXJldHVybiBCfSx6LmdldEpTRj1mdW5jdGlvbihFLGope3ZhciBWPVtbXSxbXV07RT1FLmNsb25lKCksaj1qLmNsb25lKCk7Zm9yKHZhciBCLFk9''@;'; put 'put ''MCxYPTA7RS5jbXBuKC1ZKT4wfHxqLmNtcG4oLVgpPjA7KXt2YXIgVSxxLGVlPUUuYW5kbG4oMykrWSYzLHRlPWouYW5kbG4oMykrWCYzOzM9PT1lZSYmKGVlPS0xKSwzPT09dGUmJih0ZT0tMSksVT0xJmVlPzMhPShCPUUuYW5kbG4oNykrWSY3KSYmNSE9PUJ8fDIhPT10ZT9lZTotZWU6MCxW''@;'; put 'put ''WzBdLnB1c2goVSkscT0xJnRlPzMhPShCPWouYW5kbG4oNykrWCY3KSYmNSE9PUJ8fDIhPT1lZT90ZTotdGU6MCxWWzFdLnB1c2gocSksMipZPT09VSsxJiYoWT0xLVkpLDIqWD09PXErMSYmKFg9MS1YKSxFLml1c2hybigxKSxqLml1c2hybigxKX1yZXR1cm4gVn0sei5jYWNoZWRQcm9wZXJ0''@;'; put 'put ''eT1mdW5jdGlvbihFLGosVil7dmFyIEI9Il8iK2o7RS5wcm90b3R5cGVbal09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tCXT90aGlzW0JdOnRoaXNbQl09Vi5jYWxsKHRoaXMpfX0sei5wYXJzZUJ5dGVzPWZ1bmN0aW9uKEUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgRT96LnRv''@;'; put 'put ''QXJyYXkoRSwiaGV4Iik6RX0sei5pbnRGcm9tTEU9ZnVuY3Rpb24oRSl7cmV0dXJuIG5ldyBLKEUsImhleCIsImxlIil9fSwzNzg1OmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNz''@;'; put 'put ''ZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1''@;'; put 'put ''cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96''@;'; put 'put ''LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDU1NjgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1''@;'; put 'put ''cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgs''@;'; put 'put ''UyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcm''@;'; put 'put ''JmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0''@;'; put 'put ''PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYp''@;'; put 'put ''O3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFy''@;'; put 'put ''cmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/''@;'; put 'put ''KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRB''@;'; put 'put ''cnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0''@;'; put 'put ''aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNb''@;'; put 'put ''cF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9''@;'; put 'put ''KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMu''@;'; put 'put ''bGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0y''@;'; put 'put ''KXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9''@;'; put 'put ''NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7''@;'; put 'put ''cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1k''@;'; put 'put ''ZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5z''@;'; put 'put ''dHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgr''@;'; put 'put ''K109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIg''@;'; put 'put ''WD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAs''@;'; put 'put ''MCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQw''@;'; put 'put ''ODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9''@;'; put 'put ''Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2Zl''@;'; put 'put ''Kyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2''@;'; put 'put ''NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwi''@;'; put 'put ''aGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxl''@;'; put 'put ''bmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBk''@;'; put 'put ''ZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRo''@;'; put 'put ''aXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRo''@;'; put 'put ''aXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJl''@;'; put 'put ''ciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2''@;'; put 'put ''b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5n''@;'; put 'put ''dGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xv''@;'; put 'put ''bmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1''@;'; put 'put ''KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyks''@;'; put 'put ''Qz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwh''@;'; put 'put ''KDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7''@;'; put 'put ''cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1T''@;'; put 'put ''LDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlu''@;'; put 'put ''b3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9y''@;'; put 'put ''PWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlw''@;'; put 'put ''ZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlz''@;'; put 'put ''KX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRo''@;'; put 'put ''aXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2''@;'; put 'put ''ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8''@;'; put 'put ''Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9''@;'; put 'put ''LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIg''@;'; put 'put ''Qz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYt''@;'; put 'put ''UyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhp''@;'; put 'put ''cy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0''@;'; put 'put ''dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWdu''@;'; put 'put ''KCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMu''@;'; put 'put ''bGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0''@;'; put 'put ''aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTow''@;'; put 'put ''PT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1m''@;'; put 'put ''dW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0''@;'; put 'put ''aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxT''@;'; put 'put ''Lmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxCZT04MTkxJk9lLFdl''@;'; put 'put ''PU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsSmU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+''@;'; put 'put ''PjEzLGl0PTB8Sls3XSx1dD04MTkxJml0LE10PWl0Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLE5uPTB8bmVbMV0sZnQ9ODE5MSZObixmbj1Obj4+PjEz''@;'; put 'put ''LGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCx2bj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLExuPTB8bmVbNl0senQ9ODE5MSZMbix5bj1Mbj4+PjEz''@;'; put 'put ''LHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLE9uPTB8bmVbOF0sJHQ9ODE5MSZPbixGbj1Pbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5p''@;'; put 'put ''bXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEJlLGVuKSxwPShwPU1hdGgu''@;'; put 'put ''aW11bChCZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0''@;'; put 'put ''aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKEJlLGZ0KXwwLHA9KHA9cCtN''@;'; put 'put ''YXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2Zl''@;'; put 'put ''PSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoSmUsZnQpfDAsdz13K01hdGguaW11bChKZSxmbil8MCx2PXYrTWF0aC5pbXVsKEJlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3Zh''@;'; put 'put ''ciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx2bil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx2bil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYz''@;'; put 'put ''LHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChi''@;'; put 'put ''ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0KXwwLHY9ditNYXRoLmltdWwoQmUsTnQpfDAscD0ocD1wK01hdGguaW11bChCZSx2bil8MCkrTWF0aC5pbXVsKFdlLE50''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoV2Usdm4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSsocD4+PjEz''@;'; put 'put ''KXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGgu''@;'; put 'put ''aW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKFllLHZuKXwwKStNYXRoLmltdWwoSmUsTnQpfDAsdz13K01hdGguaW11bChKZSx2bil8MCx2PXYrTWF0aC5pbXVsKEJlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUrKHY9ditN''@;'; put 'put ''YXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERl''@;'; put 'put ''LGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSx2bil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoYmUsdm4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChKZSxKdCl8MCx2PXYrTWF0aC5pbXVsKEJlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsWXQpfDApK01hdGguaW11bChX''@;'; put 'put ''ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBGcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+''@;'; put 'put ''Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChUZSx2bil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsdm4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChKZSxwdCl8MCx3PXcrTWF0aC5pbXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoQmUsenQpfDAscD0ocD1wK01hdGguaW11bChCZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2Us''@;'; put 'put ''eW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9''@;'; put 'put ''NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHZuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCx2bil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVsKEJlLHNu''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxGbil8MCkrTWF0aC5pbXVsKEZlLCR0KXww''@;'; put 'put ''KSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxGbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGgu''@;'; put 'put ''aW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVs''@;'; put 'put ''KE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSx2bil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsdm4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQs''@;'; put 'put ''SXQpfDAsdz13K01hdGguaW11bChodCxKdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKEJlLCR0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoQmUsRm4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEz''@;'; put 'put ''KXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQ''@;'; put 'put ''dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsdm4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LHZu''@;'; put 'put ''KXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxKdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAs''@;'; put 'put ''dz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxGbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKEJlLGxu''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQmUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRo''@;'; put 'put ''LmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCx2bil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sdm4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKHV0LEp0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxKdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9''@;'; put 'put ''ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01h''@;'; put 'put ''dGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsRm4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01h''@;'; put 'put ''dGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKEplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChKZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCx2bikpK01hdGguaW11bChi''@;'; put 'put ''bixOdCl8MCx3PU1hdGguaW11bChibix2biksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQp''@;'; put 'put ''fDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3ZhciBHaT0o''@;'; put 'put ''ZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0''@;'; put 'put ''aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxKdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8''@;'; put 'put ''MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9''@;'; put 'put ''dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9''@;'; put 'put ''cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmlt''@;'; put 'put ''dWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0''@;'; put 'put ''LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLEZuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmlt''@;'; put 'put ''dWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxw''@;'; put 'put ''PShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsRm4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHpl''@;'; put 'put ''LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12''@;'; put 'put ''K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEZuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixGbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01h''@;'; put 'put ''dGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsRm4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwo''@;'; put 'put ''Ym4sRm4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMm''@;'; put 'put ''PTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02''@;'; put 'put ''NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1GcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09''@;'; put 'put ''TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90''@;'; put 'put ''eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZl''@;'; put 'put ''XnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1w''@;'; put 'put ''Lmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9Njcx''@;'; put 'put ''MDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxT''@;'; put 'put ''PUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9''@;'; put 'put ''KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0''@;'; put 'put ''aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2Ur''@;'; put 'put ''Kyl7dmFyIEJlPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxKZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1CZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09QmUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5l''@;'; put 'put ''JiYoSmU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9SmUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5''@;'; put 'put ''cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5j''@;'; put 'put ''dGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252''@;'; put 'put ''ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90''@;'; put 'put ''eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJU''@;'; put 'put ''KHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxl''@;'; put 'put ''bmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgQmU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVb''@;'; put 'put ''T2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPUJlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0''@;'; put 'put ''aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVs''@;'; put 'put ''VG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''Lm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4''@;'; put 'put ''NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcp''@;'; put 'put ''e2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRo''@;'; put 'put ''aXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcp''@;'; put 'put ''e0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlz''@;'; put 'put ''LndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7''@;'; put 'put ''dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29y''@;'; put 'put ''ZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVu''@;'; put 'put ''Z3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0''@;'; put 'put ''aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBl''@;'; put 'put ''LnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihn''@;'; put 'put ''KX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9''@;'; put 'put ''U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRp''@;'; put 'put ''dmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90''@;'; put 'put ''eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9''@;'; put 'put ''PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnBy''@;'; put 'put ''b3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53''@;'; put 'put ''b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndv''@;'; put 'put ''cmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYo''@;'; put 'put ''MD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90''@;'; put 'put ''b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEos''@;'; put 'put ''bmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwo''@;'; put 'put ''cCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExl''@;'; put 'put ''L3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2''@;'; put 'put ''LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13''@;'; put 'put ''Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRz''@;'; put 'put ''WzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJv''@;'; put 'put ''dG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''aXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEp''@;'; put 'put ''LHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4''@;'; put 'put ''ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8''@;'; put 'put ''dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9''@;'; put 'put ''PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZl''@;'; put 'put ''bigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUt''@;'; put 'put ''LSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4w''@;'; put 'put ''Oykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkos''@;'; put 'put ''Z2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3''@;'; put 'put ''PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNo''@;'; put 'put ''cm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMu''@;'; put 'put ''aXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3Zh''@;'; put 'put ''ciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNF''@;'; put 'put ''dmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5l''@;'; put 'put ''Z2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYs''@;'; put 'put ''dGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnBy''@;'; put 'put ''b3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''JlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwt''@;'; put 'put ''QzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tT''@;'; put 'put ''XSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChn''@;'; put 'put ''KX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJv''@;'; put 'put ''dG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFu''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0''@;'; put 'put ''aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJv''@;'; put 'put ''dG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUu''@;'; put 'put ''cHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3Vi''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUu''@;'; put 'put ''cHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0''@;'; put 'put ''aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVk''@;'; put 'put ''UG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhp''@;'; put 'put ''cy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwi''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5j''@;'; put 'put ''dGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtI''@;'; put 'put ''LmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMu''@;'; put 'put ''cmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEso''@;'; put 'put ''UykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgp''@;'; put 'put ''OlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMp''@;'; put 'put ''e2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29y''@;'; put 'put ''ZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmlt''@;'; put 'put ''dWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcx''@;'; put 'put ''MDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8''@;'; put 'put ''Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFy''@;'; put 'put ''IEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgu''@;'; put 'put ''cHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09''@;'; put 'put ''KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3Ro''@;'; put 'put ''aXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlw''@;'; put 'put ''ZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3Zh''@;'; put 'put ''ciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VS''@;'; put 'put ''ZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEo''@;'; put 'put ''ZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlz''@;'; put 'put ''Lmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1pl''@;'; put 'put ''cm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYw''@;'; put 'put ''PT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0''@;'; put 'put ''aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLEJlPTA7''@;'; put 'put ''MCE9PU9lLmNtcCh3KTtCZSsrKU9lPU9lLnJlZFNxcigpO0koQmU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtQmUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1CZX1yZXR1cm4geGV9LEgucHJvdG90eXBl''@;'; put 'put ''Lmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4g''@;'; put 'put ''bmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9''@;'; put 'put ''U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14''@;'; put 'put ''ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/''@;'; put 'put ''Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5p''@;'; put 'put ''c1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlm''@;'; put 'put ''dCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3''@;'; put 'put ''IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93''@;'; put 'put ''PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1S''@;'; put 'put ''Lm5tZChNKSx0aGlzKX0sODA5MTpNPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIE8oUix6KXtpZihudWxsPT1SKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGZpcnN0IGFyZ3VtZW50IHRvIG9iamVjdCIpO2Zvcih2YXIgSz1PYmplY3QoUiksST0xO0k8YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aDtJKyspe3ZhciBrPWFyZ3VtZW50c1tJXTtpZihudWxsIT1rKWZvcih2YXIgRT1PYmplY3Qua2V5cyhPYmplY3QoaykpLGo9MCxWPUUubGVuZ3RoO2o8VjtqKyspe3ZhciBCPUVbal0sWT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGssQik7dm9pZCAwIT09WSYmWS5lbnVt''@;'; put 'put ''ZXJhYmxlJiYoS1tCXT1rW0JdKX19cmV0dXJuIEt9TS5leHBvcnRzPXthc3NpZ246Tyxwb2x5ZmlsbDpmdW5jdGlvbigpe09iamVjdC5hc3NpZ258fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QsImFzc2lnbiIse2VudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEw''@;'; put 'put ''LHZhbHVlOk99KX19fSw3MTg3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1SKDUxMDgpLEk9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxrPUkmJiJmdW5jdGlvbiI9PXR5cGVvZiBJLmFwcGx5P0kuYXBwbHk6ZnVuY3Rpb24oaGUsdWUsY2Upe3JldHVybiBG''@;'; put 'put ''dW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChoZSx1ZSxjZSl9O3o9SSYmImZ1bmN0aW9uIj09dHlwZW9mIEkub3duS2V5cz9JLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihoZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlKS5j''@;'; put 'put ''b25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhoZSkpfTpmdW5jdGlvbihoZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlKX07dmFyIEU9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihoZSl7cmV0dXJuIGhlIT1oZX07ZnVuY3Rpb24gaigpe2ouaW5pdC5jYWxs''@;'; put 'put ''KHRoaXMpfU0uZXhwb3J0cz1qLE0uZXhwb3J0cy5vbmNlPWZ1bmN0aW9uKGhlLHVlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oY2UsRyl7ZnVuY3Rpb24gYihIKXtoZS5yZW1vdmVMaXN0ZW5lcih1ZSxEKSxHKEgpfWZ1bmN0aW9uIEQoKXsiZnVuY3Rpb24iPT10eXBlb2YgaGUucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXImJmhlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsYiksY2UoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX12YXIgSDtzZShoZSx1ZSxELHtvbmNlOiEwfSksImVycm9yIiE9PXVlJiYiZnVuY3Rpb24iPT10eXBlb2YoSD1oZSkub24mJnNlKEgsImVycm9yIixiLHtvbmNlOiEw''@;'; put 'put ''fSl9KX0sai5FdmVudEVtaXR0ZXI9aixqLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxqLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxqLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgVj0xMDtmdW5jdGlvbiBCKGhlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgaGUpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcignVGhlICJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGhlKX1mdW5jdGlvbiBZKGhlKXtyZXR1cm4gdm9pZCAwPT09aGUuX21heExpc3RlbmVycz9qLmRlZmF1bHRNYXhMaXN0ZW5lcnM6aGUu''@;'; put 'put ''X21heExpc3RlbmVyc31mdW5jdGlvbiBYKGhlLHVlLGNlLEcpe3ZhciBiLEQsSDtpZihCKGNlKSx2b2lkIDA9PT0oRD1oZS5fZXZlbnRzKT8oRD1oZS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksaGUuX2V2ZW50c0NvdW50PTApOih2b2lkIDAhPT1ELm5ld0xpc3RlbmVyJiYoaGUuZW1p''@;'; put 'put ''dCgibmV3TGlzdGVuZXIiLHVlLGNlLmxpc3RlbmVyP2NlLmxpc3RlbmVyOmNlKSxEPWhlLl9ldmVudHMpLEg9RFt1ZV0pLHZvaWQgMD09PUgpSD1EW3VlXT1jZSwrK2hlLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBIP0g9RFt1ZV09Rz9bY2UsSF06W0gsY2VdOkc/''@;'; put 'put ''SC51bnNoaWZ0KGNlKTpILnB1c2goY2UpLChiPVkoaGUpKT4wJiZILmxlbmd0aD5iJiYhSC53YXJuZWQpe0gud2FybmVkPSEwO3ZhciBnPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK0gubGVuZ3RoKyIgIitTdHJpbmcodWUpKyIgbGlz''@;'; put 'put ''dGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO2cubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixnLmVtaXR0ZXI9aGUsZy50eXBlPXVlLGcuY291bnQ9SC5sZW5ndGgsSyYmSy53YXJuJiZLLndhcm4oZyl9cmV0''@;'; put 'put ''dXJuIGhlfWZ1bmN0aW9uIFUoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5s''@;'; put 'put ''aXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIHEoaGUsdWUsY2Upe3ZhciBHPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpoZSx0eXBlOnVlLGxpc3RlbmVyOmNlfSxiPVUuYmluZChHKTtyZXR1cm4gYi5saXN0ZW5lcj1jZSxHLndyYXBGbj1iLGJ9''@;'; put 'put ''ZnVuY3Rpb24gZWUoaGUsdWUsY2Upe3ZhciBHPWhlLl9ldmVudHM7aWYodm9pZCAwPT09RylyZXR1cm5bXTt2YXIgYj1HW3VlXTtyZXR1cm4gdm9pZCAwPT09Yj9bXToiZnVuY3Rpb24iPT10eXBlb2YgYj9jZT9bYi5saXN0ZW5lcnx8Yl06W2JdOmNlP2Z1bmN0aW9uKEQpe2Zvcih2YXIgSD1u''@;'; put 'put ''ZXcgQXJyYXkoRC5sZW5ndGgpLE49MDtOPEgubGVuZ3RoOysrTilIW05dPURbTl0ubGlzdGVuZXJ8fERbTl07cmV0dXJuIEh9KGIpOm9lKGIsYi5sZW5ndGgpfWZ1bmN0aW9uIHRlKGhlKXt2YXIgdWU9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PXVlKXt2YXIgY2U9dWVbaGVdO2lmKCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBjZSlyZXR1cm4gMTtpZih2b2lkIDAhPT1jZSlyZXR1cm4gY2UubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIG9lKGhlLHVlKXtmb3IodmFyIGNlPW5ldyBBcnJheSh1ZSksRz0wO0c8dWU7KytHKWNlW0ddPWhlW0ddO3JldHVybiBjZX1mdW5jdGlvbiBzZShoZSx1ZSxj''@;'; put 'put ''ZSxHKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgaGUub24pRy5vbmNlP2hlLm9uY2UodWUsY2UpOmhlLm9uKHVlLGNlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBi''@;'; put 'put ''ZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBoZSk7aGUuYWRkRXZlbnRMaXN0ZW5lcih1ZSxmdW5jdGlvbiBiKEQpe0cub25jZSYmaGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih1ZSxiKSxjZShEKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoaiwiZGVmYXVs''@;'; put 'put ''dE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFZ9LHNldDpmdW5jdGlvbihoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBoZXx8aGU8MHx8RShoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIg''@;'; put 'put ''aXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytoZSsiLiIpO1Y9aGV9fSksai5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2''@;'; put 'put ''ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sai5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGhlKXtpZigibnVtYmVyIiE9dHlw''@;'; put 'put ''ZW9mIGhlfHxoZTwwfHxFKGhlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2hlKyIuIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1oZSx0aGlzfSxq''@;'; put 'put ''LnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gWSh0aGlzKX0sai5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihoZSl7Zm9yKHZhciB1ZT1bXSxjZT0xO2NlPGFyZ3VtZW50cy5sZW5ndGg7Y2UrKyl1ZS5wdXNoKGFyZ3VtZW50c1tjZV0pO3ZhciBHPSJlcnJvciI9''@;'; put 'put ''PT1oZSxiPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1iKUc9RyYmdm9pZCAwPT09Yi5lcnJvcjtlbHNlIGlmKCFHKXJldHVybiExO2lmKEcpe3ZhciBEO2lmKHVlLmxlbmd0aD4wJiYoRD11ZVswXSksRCBpbnN0YW5jZW9mIEVycm9yKXRocm93IEQ7dmFyIEg9bmV3IEVycm9yKCJVbmhhbmRs''@;'; put 'put ''ZWQgZXJyb3IuIisoRD8iICgiK0QubWVzc2FnZSsiKSI6IiIpKTt0aHJvdyBILmNvbnRleHQ9RCxIfXZhciBOPWJbaGVdO2lmKHZvaWQgMD09PU4pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE4payhOLHRoaXMsdWUpO2Vsc2V7dmFyIGc9Ti5sZW5ndGgsQz1vZShOLGcpO2Zvcihj''@;'; put 'put ''ZT0wO2NlPGc7KytjZSlrKENbY2VdLHRoaXMsdWUpfXJldHVybiEwfSxqLnByb3RvdHlwZS5vbj1qLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihoZSx1ZSl7cmV0dXJuIFgodGhpcyxoZSx1ZSwhMSl9LGoucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihoZSx1ZSl7''@;'; put 'put ''cmV0dXJuIFgodGhpcyxoZSx1ZSwhMCl9LGoucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiBCKHVlKSx0aGlzLm9uKGhlLHEodGhpcyxoZSx1ZSkpLHRoaXN9LGoucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiBCKHVlKSx0''@;'; put 'put ''aGlzLnByZXBlbmRMaXN0ZW5lcihoZSxxKHRoaXMsaGUsdWUpKSx0aGlzfSxqLnByb3RvdHlwZS5vZmY9ai5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oaGUsdWUpe3ZhciBjZSxHLGIsRCxIO2lmKEIodWUpLHZvaWQgMD09PShHPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7''@;'; put 'put ''aWYodm9pZCAwPT09KGNlPUdbaGVdKSlyZXR1cm4gdGhpcztpZihjZT09PXVlfHxjZS5saXN0ZW5lcj09PXVlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBHW2hlXSxHLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJl''@;'; put 'put ''bW92ZUxpc3RlbmVyIixoZSxjZS5saXN0ZW5lcnx8dWUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBjZSl7Zm9yKGI9LTEsRD1jZS5sZW5ndGgtMTtEPj0wO0QtLSlpZihjZVtEXT09PXVlfHxjZVtEXS5saXN0ZW5lcj09PXVlKXtIPWNlW0RdLmxpc3RlbmVyLGI9RDticmVha31pZihi''@;'; put 'put ''PDApcmV0dXJuIHRoaXM7MD09PWI/Y2Uuc2hpZnQoKTpmdW5jdGlvbihOLGcpe2Zvcig7ZysxPE4ubGVuZ3RoO2crKylOW2ddPU5bZysxXTtOLnBvcCgpfShjZSxiKSwxPT09Y2UubGVuZ3RoJiYoR1toZV09Y2VbMF0pLHZvaWQgMCE9PUcucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVt''@;'; put 'put ''b3ZlTGlzdGVuZXIiLGhlLEh8fHVlKX1yZXR1cm4gdGhpc30sai5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGhlKXt2YXIgdWUsY2UsRztpZih2b2lkIDA9PT0oY2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1jZS5yZW1vdmVMaXN0ZW5lcily''@;'; put 'put ''ZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PWNlW2hlXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIGNl''@;'; put 'put ''W2hlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGIsRD1PYmplY3Qua2V5cyhjZSk7Zm9yKEc9MDtHPEQubGVuZ3RoOysrRykicmVtb3ZlTGlzdGVuZXIiIT09KGI9RFtHXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGIpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3Rl''@;'; put 'put ''bmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKHVlPWNlW2hlXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihoZSx1ZSk7ZWxzZSBpZih2b2lkIDAhPT11ZSlmb3Io''@;'; put 'put ''Rz11ZS5sZW5ndGgtMTtHPj0wO0ctLSl0aGlzLnJlbW92ZUxpc3RlbmVyKGhlLHVlW0ddKTtyZXR1cm4gdGhpc30sai5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGhlKXtyZXR1cm4gZWUodGhpcyxoZSwhMCl9LGoucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihoZSl7cmV0''@;'; put 'put ''dXJuIGVlKHRoaXMsaGUsITEpfSxqLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBoZS5saXN0ZW5lckNvdW50P2hlLmxpc3RlbmVyQ291bnQodWUpOnRlLmNhbGwoaGUsdWUpfSxqLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PXRlLGoucHJv''@;'; put 'put ''dG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD96KHRoaXMuX2V2ZW50cyk6W119fSwzMDQ4OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPVIoMjMxOCk7TS5leHBvcnRzPWZ1bmN0aW9uKEksayxFLGope2lmKHouaXNCdWZmZXIo''@;'; put 'put ''SSl8fChJPXouZnJvbShJLCJiaW5hcnkiKSksayYmKHouaXNCdWZmZXIoayl8fChrPXouZnJvbShrLCJiaW5hcnkiKSksOCE9PWsubGVuZ3RoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIgVj1FLzgsQj16''@;'; put 'put ''LmFsbG9jKFYpLFk9ei5hbGxvYyhqfHwwKSxYPXouYWxsb2MoMCk7Vj4wfHxqPjA7KXt2YXIgVT1uZXcgSztVLnVwZGF0ZShYKSxVLnVwZGF0ZShJKSxrJiZVLnVwZGF0ZShrKSxYPVUuZGlnZXN0KCk7dmFyIHE9MDtpZihWPjApe3ZhciBlZT1CLmxlbmd0aC1WO3E9TWF0aC5taW4oVixYLmxl''@;'; put 'put ''bmd0aCksWC5jb3B5KEIsZWUsMCxxKSxWLT1xfWlmKHE8WC5sZW5ndGgmJmo+MCl7dmFyIHRlPVkubGVuZ3RoLWosb2U9TWF0aC5taW4oaixYLmxlbmd0aC1xKTtYLmNvcHkoWSx0ZSxxLHErb2UpLGotPW9lfX1yZXR1cm4gWC5maWxsKDApLHtrZXk6QixpdjpZfX19LDQwMjk6KE0sTyxSKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUzMjApLEs9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7TS5leHBvcnRzPWZ1bmN0aW9uKGssRSxqKXtpZigheihFKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJlIGEg''@;'; put 'put ''ZnVuY3Rpb24iKTt2YXIgVjthcmd1bWVudHMubGVuZ3RoPj0zJiYoVj1qKSwiW29iamVjdCBBcnJheV0iPT09Sy5jYWxsKGspP2Z1bmN0aW9uKEIsWSxYKXtmb3IodmFyIFU9MCxxPUIubGVuZ3RoO1U8cTtVKyspSS5jYWxsKEIsVSkmJihudWxsPT1YP1koQltVXSxVLEIpOlkuY2FsbChYLEJb''@;'; put 'put ''VV0sVSxCKSl9KGssRSxWKToic3RyaW5nIj09dHlwZW9mIGs/ZnVuY3Rpb24oQixZLFgpe2Zvcih2YXIgVT0wLHE9Qi5sZW5ndGg7VTxxO1UrKyludWxsPT1YP1koQi5jaGFyQXQoVSksVSxCKTpZLmNhbGwoWCxCLmNoYXJBdChVKSxVLEIpfShrLEUsVik6ZnVuY3Rpb24oQixZLFgpe2Zvcih2''@;'; put 'put ''YXIgVSBpbiBCKUkuY2FsbChCLFUpJiYobnVsbD09WD9ZKEJbVV0sVSxCKTpZLmNhbGwoWCxCW1VdLFUsQikpfShrLEUsVil9fSw2MjMwOk09PntNLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGYuRm9ybURhdGE6d2luZG93LkZvcm1EYXRhfSw1MzAyOihNLE8sUik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCk7Y29uc3QgST1SKDc3KSxrPVIoMjUyMCksRT1SKDEzODEpLm1rZGlyc1N5bmMsaj1SKDMxOCkudXRpbWVzTWlsbGlzU3luYyxWPVIoMjczMyk7ZnVuY3Rpb24gQihxLGVlLHRlLG9lKXtjb25zdCBzZT0ob2UuZGVyZWZlcmVuY2U/SS5z''@;'; put 'put ''dGF0U3luYzpJLmxzdGF0U3luYykoZWUpO2lmKHNlLmlzRGlyZWN0b3J5KCkpcmV0dXJuIGhlPXNlLGNlPWVlLEc9dGUsYj1vZSxxP1UoY2UsRyxiKTooRD1oZS5tb2RlLEg9Y2UsZz1iLEkubWtkaXJTeW5jKE49RyksVShILE4sZyksWChOLEQpKTt2YXIgaGUsY2UsRyxiLEQsSCxOLGc7aWYo''@;'; put 'put ''c2UuaXNGaWxlKCl8fHNlLmlzQ2hhcmFjdGVyRGV2aWNlKCl8fHNlLmlzQmxvY2tEZXZpY2UoKSlyZXR1cm4gZnVuY3Rpb24oaGUsdWUsY2UsRyxiKXtyZXR1cm4gdWU/ZnVuY3Rpb24oRCxILE4sZyl7aWYoZy5vdmVyd3JpdGUpcmV0dXJuIEkudW5saW5rU3luYyhOKSxZKEQsSCxOLGcpO2lm''@;'; put 'put ''KGcuZXJyb3JPbkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7Tn0nIGFscmVhZHkgZXhpc3RzYCl9KGhlLGNlLEcsYik6WShoZSxjZSxHLGIpfShzZSxxLGVlLHRlLG9lKTtpZihzZS5pc1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlvbihoZSx1ZSxjZSxHKXtsZXQgYj1JLnJlYWRsaW5r''@;'; put 'put ''U3luYyh1ZSk7aWYoRy5kZXJlZmVyZW5jZSYmKGI9ay5yZXNvbHZlKHouY3dkKCksYikpLGhlKXtsZXQgRDt0cnl7RD1JLnJlYWRsaW5rU3luYyhjZSl9Y2F0Y2goSCl7aWYoIkVJTlZBTCI9PT1ILmNvZGV8fCJVTktOT1dOIj09PUguY29kZSlyZXR1cm4gSS5zeW1saW5rU3luYyhiLGNlKTt0''@;'; put 'put ''aHJvdyBIfWlmKEcuZGVyZWZlcmVuY2UmJihEPWsucmVzb2x2ZSh6LmN3ZCgpLEQpKSxWLmlzU3JjU3ViZGlyKGIsRCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtifScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtEfScuYCk7aWYoSS5zdGF0U3luYyhjZSkuaXNE''@;'; put 'put ''aXJlY3RvcnkoKSYmVi5pc1NyY1N1YmRpcihELGIpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtEfScgd2l0aCAnJHtifScuYCk7cmV0dXJuIGZ1bmN0aW9uKEgsTil7cmV0dXJuIEkudW5saW5rU3luYyhOKSxJLnN5bWxpbmtTeW5jKEgsTil9KGIsY2UpfXJldHVybiBJ''@;'; put 'put ''LnN5bWxpbmtTeW5jKGIsY2UpfShxLGVlLHRlLG9lKTt0aHJvdyBzZS5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtlZX1gKTpzZS5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke2VlfWApOm5ldyBFcnJvcihg''@;'; put 'put ''VW5rbm93biBmaWxlOiAke2VlfWApfWZ1bmN0aW9uIFkocSxlZSx0ZSxvZSl7cmV0dXJuIEkuY29weUZpbGVTeW5jKGVlLHRlKSxvZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJihoZT1lZSx1ZT10ZSwwPT0oMTI4JihzZT1xLm1vZGUpKSYmWCh1ZSwxMjh8c2UpLGZ1bmN0aW9uKGNlLEcpe2NvbnN0''@;'; put 'put ''IGI9SS5zdGF0U3luYyhjZSk7aihHLGIuYXRpbWUsYi5tdGltZSl9KGhlLHVlKSksWCh0ZSxxLm1vZGUpO3ZhciBzZSxoZSx1ZX1mdW5jdGlvbiBYKHEsZWUpe3JldHVybiBJLmNobW9kU3luYyhxLGVlKX1mdW5jdGlvbiBVKHEsZWUsdGUpe0kucmVhZGRpclN5bmMocSkuZm9yRWFjaChvZT0+''@;'; put 'put ''ZnVuY3Rpb24oc2UsaGUsdWUsY2Upe2NvbnN0IEc9ay5qb2luKGhlLHNlKSxiPWsuam9pbih1ZSxzZSkse2Rlc3RTdGF0OkR9PVYuY2hlY2tQYXRoc1N5bmMoRyxiLCJjb3B5IixjZSk7cmV0dXJuIGZ1bmN0aW9uKEgsTixnLEMpe2lmKCFDLmZpbHRlcnx8Qy5maWx0ZXIoTixnKSlyZXR1cm4g''@;'; put 'put ''QihILE4sZyxDKX0oRCxHLGIsY2UpfShvZSxxLGVlLHRlKSl9TS5leHBvcnRzPWZ1bmN0aW9uKHEsZWUsdGUpeyJmdW5jdGlvbiI9PXR5cGVvZiB0ZSYmKHRlPXtmaWx0ZXI6dGV9KSwodGU9dGV8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gdGUpfHwhIXRlLmNsb2JiZXIsdGUub3Zlcndy''@;'; put 'put ''aXRlPSJvdmVyd3JpdGUiaW4gdGU/ISF0ZS5vdmVyd3JpdGU6dGUuY2xvYmJlcix0ZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PXouYXJjaCYmSy53YXJuKCJmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJl''@;'; put 'put ''Y29tbWVuZGVkO1xuXG4gICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5Iik7Y29uc3R7c3JjU3RhdDpvZSxkZXN0U3RhdDpzZX09Vi5jaGVja1BhdGhzU3luYyhxLGVlLCJjb3B5Iix0ZSk7cmV0dXJuIFYuY2hlY2tQYXJlbnRQ''@;'; put 'put ''YXRoc1N5bmMocSxvZSxlZSwiY29weSIpLGZ1bmN0aW9uKGhlLHVlLGNlLEcpe2lmKEcuZmlsdGVyJiYhRy5maWx0ZXIodWUsY2UpKXJldHVybjtjb25zdCBiPWsuZGlybmFtZShjZSk7cmV0dXJuIEkuZXhpc3RzU3luYyhiKXx8RShiKSxCKGhlLHVlLGNlLEcpfShzZSxxLGVlLHRlKX19LDg2''@;'; put 'put ''OTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9e2NvcHlTeW5jOlIoNTMwMil9fSw3MTg5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCk7Y29uc3QgST1SKDc3KSxrPVIoMjUyMCksRT1SKDEzODEpLm1rZGlycyxqPVIoOTI1NykucGF0aEV4''@;'; put 'put ''aXN0cyxWPVIoMzE4KS51dGltZXNNaWxsaXMsQj1SKDI3MzMpO2Z1bmN0aW9uIFkodWUsY2UsRyxiLEQpe2NvbnN0IEg9ay5kaXJuYW1lKEcpO2ooSCwoTixnKT0+Tj9EKE4pOmc/VSh1ZSxjZSxHLGIsRCk6dm9pZCBFKEgsQz0+Qz9EKEMpOlUodWUsY2UsRyxiLEQpKSl9ZnVuY3Rpb24gWCh1''@;'; put 'put ''ZSxjZSxHLGIsRCxIKXtQcm9taXNlLnJlc29sdmUoRC5maWx0ZXIoRyxiKSkudGhlbihOPT5OP3VlKGNlLEcsYixELEgpOkgoKSxOPT5IKE4pKX1mdW5jdGlvbiBVKHVlLGNlLEcsYixEKXsoYi5kZXJlZmVyZW5jZT9JLnN0YXQ6SS5sc3RhdCkoY2UsKEgsTik9PntyZXR1cm4gSD9EKEgpOk4u''@;'; put 'put ''aXNEaXJlY3RvcnkoKT8oZz1OLFM9Y2Usdj1HLHA9Yix3PUQsdWU/b2UoUyx2LHAsdyk6KEo9Zy5tb2RlLG5lPVMsZmU9cCx4ZT13LHZvaWQgSS5ta2RpcihkZT12LExlPT57aWYoTGUpcmV0dXJuIHhlKExlKTtvZShuZSxkZSxmZSxGZT0+RmU/eGUoRmUpOnRlKGRlLEoseGUpKX0pKSk6Ti5p''@;'; put 'put ''c0ZpbGUoKXx8Ti5pc0NoYXJhY3RlckRldmljZSgpfHxOLmlzQmxvY2tEZXZpY2UoKT9mdW5jdGlvbihnLEMsUyx2LHAsdyl7cmV0dXJuIEM/ZnVuY3Rpb24oSixuZSxkZSxmZSx4ZSl7aWYoIWZlLm92ZXJ3cml0ZSlyZXR1cm4gZmUuZXJyb3JPbkV4aXN0P3hlKG5ldyBFcnJvcihgJyR7ZGV9''@;'; put 'put ''JyBhbHJlYWR5IGV4aXN0c2ApKTp4ZSgpO0kudW5saW5rKGRlLExlPT5MZT94ZShMZSk6cShKLG5lLGRlLGZlLHhlKSl9KGcsUyx2LHAsdyk6cShnLFMsdixwLHcpfShOLHVlLGNlLEcsYixEKTpOLmlzU3ltYm9saWNMaW5rKCk/ZnVuY3Rpb24gaGUodWUsY2UsRyxiLEQpe0kucmVhZGxpbmso''@;'; put 'put ''Y2UsKEgsTik9Pkg/RChIKTooYi5kZXJlZmVyZW5jZSYmKE49ay5yZXNvbHZlKHouY3dkKCksTikpLHVlP3ZvaWQgSS5yZWFkbGluayhHLChnLEMpPT5nPyJFSU5WQUwiPT09Zy5jb2RlfHwiVU5LTk9XTiI9PT1nLmNvZGU/SS5zeW1saW5rKE4sRyxEKTpEKGcpOihiLmRlcmVmZXJlbmNlJiYo''@;'; put 'put ''Qz1rLnJlc29sdmUoei5jd2QoKSxDKSksQi5pc1NyY1N1YmRpcihOLEMpP0QobmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtOfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtDfScuYCkpOnVlLmlzRGlyZWN0b3J5KCkmJkIuaXNTcmNTdWJkaXIoQyxOKT9EKG5ldyBFcnJvcihg''@;'; put 'put ''Q2Fubm90IG92ZXJ3cml0ZSAnJHtDfScgd2l0aCAnJHtOfScuYCkpOmZ1bmN0aW9uKFMsdixwKXtJLnVubGluayh2LHc9Pnc/cCh3KTpJLnN5bWxpbmsoUyx2LHApKX0oTixHLEQpKSk6SS5zeW1saW5rKE4sRyxEKSkpfSh1ZSxjZSxHLGIsRCk6Ti5pc1NvY2tldCgpP0QobmV3IEVycm9yKGBD''@;'; put 'put ''YW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke2NlfWApKTpOLmlzRklGTygpP0QobmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtjZX1gKSk6RChuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtjZX1gKSk7dmFyIGcsUyx2LHAsdyxKLG5lLGRlLGZlLHhlfSl9ZnVuY3Rp''@;'; put 'put ''b24gcSh1ZSxjZSxHLGIsRCl7SS5jb3B5RmlsZShjZSxHLEg9PntyZXR1cm4gSD9EKEgpOmIucHJlc2VydmVUaW1lc3RhbXBzPyhnPWNlLEM9RyxTPUQsMD09KDEyOCYoTj11ZS5tb2RlKSk/dGUoQywxMjh8Tix2PT52P1Modik6ZWUoTixnLEMsUykpOmVlKE4sZyxDLFMpKTp0ZShHLHVlLm1v''@;'; put 'put ''ZGUsRCk7dmFyIE4sZyxDLFN9KX1mdW5jdGlvbiBlZSh1ZSxjZSxHLGIpe3ZhciBILE47SD1HLE49RD0+RD9iKEQpOnRlKEcsdWUsYiksSS5zdGF0KGNlLChnLEMpPT5nP04oZyk6VihILEMuYXRpbWUsQy5tdGltZSxOKSl9ZnVuY3Rpb24gdGUodWUsY2UsRyl7cmV0dXJuIEkuY2htb2QodWUs''@;'; put 'put ''Y2UsRyl9ZnVuY3Rpb24gb2UodWUsY2UsRyxiKXtJLnJlYWRkaXIodWUsKEQsSCk9PkQ/YihEKTpzZShILHVlLGNlLEcsYikpfWZ1bmN0aW9uIHNlKHVlLGNlLEcsYixEKXtjb25zdCBIPXVlLnBvcCgpO3JldHVybiBIP2Z1bmN0aW9uKE4sZyxDLFMsdixwKXtjb25zdCB3PWsuam9pbihDLGcp''@;'; put 'put ''LEo9ay5qb2luKFMsZyk7Qi5jaGVja1BhdGhzKHcsSiwiY29weSIsdiwobmUsZGUpPT57aWYobmUpcmV0dXJuIHAobmUpO2NvbnN0e2Rlc3RTdGF0OmZlfT1kZTt2YXIgeGUsTGUsRmUsT2UsQmU7eGU9ZmUsTGU9dyxGZT1KLEJlPXhlPT54ZT9wKHhlKTpzZShOLEMsUyx2LHApLChPZT12KS5m''@;'; put 'put ''aWx0ZXI/WChVLHhlLExlLEZlLE9lLEJlKTpVKHhlLExlLEZlLE9lLEJlKX0pfSh1ZSxILGNlLEcsYixEKTpEKCl9TS5leHBvcnRzPWZ1bmN0aW9uKHVlLGNlLEcsYil7ImZ1bmN0aW9uIiE9dHlwZW9mIEd8fGI/ImZ1bmN0aW9uIj09dHlwZW9mIEcmJihHPXtmaWx0ZXI6R30pOihiPUcsRz17''@;'; put 'put ''fSksYj1ifHxmdW5jdGlvbigpe30sKEc9R3x8e30pLmNsb2JiZXI9ISgiY2xvYmJlciJpbiBHKXx8ISFHLmNsb2JiZXIsRy5vdmVyd3JpdGU9Im92ZXJ3cml0ZSJpbiBHPyEhRy5vdmVyd3JpdGU6Ry5jbG9iYmVyLEcucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT16LmFyY2gmJksud2Fy''@;'; put 'put ''bigiZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIpLEIuY2hlY2tQYXRo''@;'; put 'put ''cyh1ZSxjZSwiY29weSIsRywoRCxIKT0+e2lmKEQpcmV0dXJuIGIoRCk7Y29uc3R7c3JjU3RhdDpOLGRlc3RTdGF0Omd9PUg7Qi5jaGVja1BhcmVudFBhdGhzKHVlLE4sY2UsImNvcHkiLEM9PkM/YihDKTpHLmZpbHRlcj9YKFksZyx1ZSxjZSxHLGIpOlkoZyx1ZSxjZSxHLGIpKX0pfX0sNjQ2''@;'; put 'put ''NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2s7TS5leHBvcnRzPXtjb3B5OnooUig3MTg5KSl9fSw1NTkwOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21Qcm9taXNlLEs9Uig3NzQ5KSxJPVIoMjUyMCksaz1SKDEz''@;'; put 'put ''ODEpLEU9Uig0NTQyKSxqPXooZnVuY3Rpb24oKXt2YXIgQj1hZShmdW5jdGlvbiooWSl7bGV0IFg7dHJ5e1g9eWllbGQgSy5yZWFkZGlyKFkpfWNhdGNoe3JldHVybiBrLm1rZGlycyhZKX1yZXR1cm4gUHJvbWlzZS5hbGwoWC5tYXAoVT0+RS5yZW1vdmUoSS5qb2luKFksVSkpKSl9KTtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oWSl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSk7ZnVuY3Rpb24gVihCKXtsZXQgWTt0cnl7WT1LLnJlYWRkaXJTeW5jKEIpfWNhdGNoe3JldHVybiBrLm1rZGlyc1N5bmMoQil9WS5mb3JFYWNoKFg9PntYPUkuam9pbihCLFgpLEUucmVtb3ZlU3luYyhY''@;'; put 'put ''KX0pfU0uZXhwb3J0cz17ZW1wdHlEaXJTeW5jOlYsZW1wdHlkaXJTeW5jOlYsZW1wdHlEaXI6aixlbXB0eWRpcjpqfX0sNjUzMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDI1MjApLEk9Uig3Nyksaz1SKDEzODEpO00uZXhwb3J0cz17''@;'; put 'put ''Y3JlYXRlRmlsZTp6KGZ1bmN0aW9uKEUsail7ZnVuY3Rpb24gVigpe0kud3JpdGVGaWxlKEUsIiIsQj0+e2lmKEIpcmV0dXJuIGooQik7aigpfSl9SS5zdGF0KEUsKEIsWSk9PntpZighQiYmWS5pc0ZpbGUoKSlyZXR1cm4gaigpO2NvbnN0IFg9Sy5kaXJuYW1lKEUpO0kuc3RhdChYLChVLHEp''@;'; put 'put ''PT57aWYoVSlyZXR1cm4iRU5PRU5UIj09PVUuY29kZT9rLm1rZGlycyhYLGVlPT57aWYoZWUpcmV0dXJuIGooZWUpO1YoKX0pOmooVSk7cS5pc0RpcmVjdG9yeSgpP1YoKTpJLnJlYWRkaXIoWCxlZT0+e2lmKGVlKXJldHVybiBqKGVlKX0pfSl9KX0pLGNyZWF0ZUZpbGVTeW5jOmZ1bmN0aW9u''@;'; put 'put ''KEUpe2xldCBqO3RyeXtqPUkuc3RhdFN5bmMoRSl9Y2F0Y2h7fWlmKGomJmouaXNGaWxlKCkpcmV0dXJuO2NvbnN0IFY9Sy5kaXJuYW1lKEUpO3RyeXtJLnN0YXRTeW5jKFYpLmlzRGlyZWN0b3J5KCl8fEkucmVhZGRpclN5bmMoVil9Y2F0Y2goQil7aWYoIUJ8fCJFTk9FTlQiIT09Qi5jb2Rl''@;'; put 'put ''KXRocm93IEI7ay5ta2RpcnNTeW5jKFYpfUkud3JpdGVGaWxlU3luYyhFLCIiKX19fSwxNzIwOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDY1MzApLEs9Uig0MTQ3KSxJPVIoMzYzNSk7TS5leHBvcnRzPXtjcmVhdGVGaWxlOnouY3JlYXRlRmlsZSxjcmVhdGVGaWxlU3luYzp6''@;'; put 'put ''LmNyZWF0ZUZpbGVTeW5jLGVuc3VyZUZpbGU6ei5jcmVhdGVGaWxlLGVuc3VyZUZpbGVTeW5jOnouY3JlYXRlRmlsZVN5bmMsY3JlYXRlTGluazpLLmNyZWF0ZUxpbmssY3JlYXRlTGlua1N5bmM6Sy5jcmVhdGVMaW5rU3luYyxlbnN1cmVMaW5rOksuY3JlYXRlTGluayxlbnN1cmVMaW5rU3lu''@;'; put 'put ''YzpLLmNyZWF0ZUxpbmtTeW5jLGNyZWF0ZVN5bWxpbms6SS5jcmVhdGVTeW1saW5rLGNyZWF0ZVN5bWxpbmtTeW5jOkkuY3JlYXRlU3ltbGlua1N5bmMsZW5zdXJlU3ltbGluazpJLmNyZWF0ZVN5bWxpbmssZW5zdXJlU3ltbGlua1N5bmM6SS5jcmVhdGVTeW1saW5rU3luY319LDQxNDc6KE0s''@;'; put 'put ''TyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9UigyNTIwKSxJPVIoNzcpLGs9UigxMzgxKSxFPVIoOTI1NykucGF0aEV4aXN0cyx7YXJlSWRlbnRpY2FsOmp9PVIoMjczMyk7TS5leHBvcnRzPXtjcmVhdGVMaW5rOnooZnVuY3Rpb24oVixCLFkpe2Z1''@;'; put 'put ''bmN0aW9uIFgoVSxxKXtJLmxpbmsoVSxxLGVlPT57aWYoZWUpcmV0dXJuIFkoZWUpO1kobnVsbCl9KX1JLmxzdGF0KEIsKFUscSk9PntJLmxzdGF0KFYsKGVlLHRlKT0+e2lmKGVlKXJldHVybiBlZS5tZXNzYWdlPWVlLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksWShl''@;'; put 'put ''ZSk7aWYocSYmaih0ZSxxKSlyZXR1cm4gWShudWxsKTtjb25zdCBvZT1LLmRpcm5hbWUoQik7RShvZSwoc2UsaGUpPT5zZT9ZKHNlKTpoZT9YKFYsQik6dm9pZCBrLm1rZGlycyhvZSx1ZT0+e2lmKHVlKXJldHVybiBZKHVlKTtYKFYsQil9KSl9KX0pfSksY3JlYXRlTGlua1N5bmM6ZnVuY3Rp''@;'; put 'put ''b24oVixCKXtsZXQgWTt0cnl7WT1JLmxzdGF0U3luYyhCKX1jYXRjaHt9dHJ5e2NvbnN0IFU9SS5sc3RhdFN5bmMoVik7aWYoWSYmaihVLFkpKXJldHVybn1jYXRjaChVKXt0aHJvdyBVLm1lc3NhZ2U9VS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLFV9Y29uc3QgWD1L''@;'; put 'put ''LmRpcm5hbWUoQik7cmV0dXJuIEkuZXhpc3RzU3luYyhYKXx8ay5ta2RpcnNTeW5jKFgpLEkubGlua1N5bmMoVixCKX19fSw2MDcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDI1MjApLEs9Uig3NyksST1SKDkyNTcpLnBhdGhFeGlzdHM7TS5leHBvcnRzPXtzeW1saW5rUGF0''@;'; put 'put ''aHM6ZnVuY3Rpb24oayxFLGope2lmKHouaXNBYnNvbHV0ZShrKSlyZXR1cm4gSy5sc3RhdChrLFY9PlY/KFYubWVzc2FnZT1WLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVTeW1saW5rIiksaihWKSk6aihudWxsLHt0b0N3ZDprLHRvRHN0Omt9KSk7e2NvbnN0IFY9ei5kaXJuYW1l''@;'; put 'put ''KEUpLEI9ei5qb2luKFYsayk7cmV0dXJuIEkoQiwoWSxYKT0+WT9qKFkpOlg/aihudWxsLHt0b0N3ZDpCLHRvRHN0Omt9KTpLLmxzdGF0KGssVT0+VT8oVS5tZXNzYWdlPVUubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxqKFUpKTpqKG51bGwse3RvQ3dkOmssdG9E''@;'; put 'put ''c3Q6ei5yZWxhdGl2ZShWLGspfSkpKX19LHN5bWxpbmtQYXRoc1N5bmM6ZnVuY3Rpb24oayxFKXtsZXQgajtpZih6LmlzQWJzb2x1dGUoaykpe2lmKGo9Sy5leGlzdHNTeW5jKGspLCFqKXRocm93IG5ldyBFcnJvcigiYWJzb2x1dGUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0''@;'; put 'put ''b0N3ZDprLHRvRHN0Omt9fXtjb25zdCBWPXouZGlybmFtZShFKSxCPXouam9pbihWLGspO2lmKGo9Sy5leGlzdHNTeW5jKEIpLGopcmV0dXJue3RvQ3dkOkIsdG9Ec3Q6a307aWYoaj1LLmV4aXN0c1N5bmMoayksIWopdGhyb3cgbmV3IEVycm9yKCJyZWxhdGl2ZSBzcmNwYXRoIGRvZXMgbm90''@;'; put 'put ''IGV4aXN0Iik7cmV0dXJue3RvQ3dkOmssdG9Ec3Q6ei5yZWxhdGl2ZShWLGspfX19fX0sOTI1OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3Nyk7TS5leHBvcnRzPXtzeW1saW5rVHlwZTpmdW5jdGlvbihLLEksayl7aWYoaz0iZnVuY3Rpb24iPT10eXBlb2YgST9JOmssST0i''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgSSYmSSlyZXR1cm4gayhudWxsLEkpO3oubHN0YXQoSywoRSxqKT0+e2lmKEUpcmV0dXJuIGsobnVsbCwiZmlsZSIpO0k9aiYmai5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIixrKG51bGwsSSl9KX0sc3ltbGlua1R5cGVTeW5jOmZ1bmN0aW9uKEssSSl7bGV0''@;'; put 'put ''IGs7aWYoSSlyZXR1cm4gSTt0cnl7az16LmxzdGF0U3luYyhLKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIGsmJmsuaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9fX0sMzYzNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDI1MjAp''@;'; put 'put ''LEk9Uig3NzQ5KSxrPVIoMTM4MSksRT1rLm1rZGlycyxqPWsubWtkaXJzU3luYyxWPVIoNjA3MiksQj1WLnN5bWxpbmtQYXRocyxZPVYuc3ltbGlua1BhdGhzU3luYyxYPVIoOTI1OSksVT1YLnN5bWxpbmtUeXBlLHE9WC5zeW1saW5rVHlwZVN5bmMsZWU9Uig5MjU3KS5wYXRoRXhpc3RzLHth''@;'; put 'put ''cmVJZGVudGljYWw6dGV9PVIoMjczMyk7ZnVuY3Rpb24gb2Uoc2UsaGUsdWUsY2Upe0Ioc2UsaGUsKEcsYik9PntpZihHKXJldHVybiBjZShHKTtzZT1iLnRvRHN0LFUoYi50b0N3ZCx1ZSwoRCxIKT0+e2lmKEQpcmV0dXJuIGNlKEQpO2NvbnN0IE49Sy5kaXJuYW1lKGhlKTtlZShOLChnLEMp''@;'; put 'put ''PT5nP2NlKGcpOkM/SS5zeW1saW5rKHNlLGhlLEgsY2UpOnZvaWQgRShOLFM9PntpZihTKXJldHVybiBjZShTKTtJLnN5bWxpbmsoc2UsaGUsSCxjZSl9KSl9KX0pfU0uZXhwb3J0cz17Y3JlYXRlU3ltbGluazp6KGZ1bmN0aW9uKHNlLGhlLHVlLGNlKXtjZT0iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''dWU/dWU6Y2UsdWU9ImZ1bmN0aW9uIiE9dHlwZW9mIHVlJiZ1ZSxJLmxzdGF0KGhlLChHLGIpPT57IUcmJmIuaXNTeW1ib2xpY0xpbmsoKT9Qcm9taXNlLmFsbChbSS5zdGF0KHNlKSxJLnN0YXQoaGUpXSkudGhlbigoW0QsSF0pPT57aWYodGUoRCxIKSlyZXR1cm4gY2UobnVsbCk7b2Uoc2Us''@;'; put 'put ''aGUsdWUsY2UpfSk6b2Uoc2UsaGUsdWUsY2UpfSl9KSxjcmVhdGVTeW1saW5rU3luYzpmdW5jdGlvbihzZSxoZSx1ZSl7bGV0IGNlO3RyeXtjZT1JLmxzdGF0U3luYyhoZSl9Y2F0Y2h7fWlmKGNlJiZjZS5pc1N5bWJvbGljTGluaygpKXtjb25zdCBEPUkuc3RhdFN5bmMoc2UpLEg9SS5zdGF0''@;'; put 'put ''U3luYyhoZSk7aWYodGUoRCxIKSlyZXR1cm59Y29uc3QgRz1ZKHNlLGhlKTtzZT1HLnRvRHN0LHVlPXEoRy50b0N3ZCx1ZSk7Y29uc3QgYj1LLmRpcm5hbWUoaGUpO3JldHVybiBJLmV4aXN0c1N5bmMoYil8fGooYiksSS5zeW1saW5rU3luYyhzZSxoZSx1ZSl9fX0sNzc0OTooTSxPLFIpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDc3KSxJPVsiYWNjZXNzIiwiYXBwZW5kRmlsZSIsImNobW9kIiwiY2hvd24iLCJjbG9zZSIsImNvcHlGaWxlIiwiZmNobW9kIiwiZmNob3duIiwiZmRhdGFzeW5jIiwiZnN0YXQiLCJmc3luYyIsImZ0cnVuY2F0''@;'; put 'put ''ZSIsImZ1dGltZXMiLCJsY2htb2QiLCJsY2hvd24iLCJsaW5rIiwibHN0YXQiLCJta2RpciIsIm1rZHRlbXAiLCJvcGVuIiwib3BlbmRpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJlYWRsaW5rIiwicmVhbHBhdGgiLCJyZW5hbWUiLCJybSIsInJtZGlyIiwic3RhdCIsInN5bWxpbmsiLCJ0''@;'; put 'put ''cnVuY2F0ZSIsInVubGluayIsInV0aW1lcyIsIndyaXRlRmlsZSJdLmZpbHRlcihrPT4iZnVuY3Rpb24iPT10eXBlb2YgS1trXSk7T2JqZWN0LmFzc2lnbihPLEspLEkuZm9yRWFjaChrPT57T1trXT16KEtba10pfSksTy5yZWFscGF0aC5uYXRpdmU9eihLLnJlYWxwYXRoLm5hdGl2ZSksTy5l''@;'; put 'put ''eGlzdHM9ZnVuY3Rpb24oayxFKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRT9LLmV4aXN0cyhrLEUpOm5ldyBQcm9taXNlKGo9PksuZXhpc3RzKGssaikpfSxPLnJlYWQ9ZnVuY3Rpb24oayxFLGosVixCLFkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBZP0sucmVhZChrLEUsaixWLEIs''@;'; put 'put ''WSk6bmV3IFByb21pc2UoKFgsVSk9PntLLnJlYWQoayxFLGosVixCLChxLGVlLHRlKT0+e2lmKHEpcmV0dXJuIFUocSk7WCh7Ynl0ZXNSZWFkOmVlLGJ1ZmZlcjp0ZX0pfSl9KX0sTy53cml0ZT1mdW5jdGlvbihrLEUsLi4uail7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGpbai5sZW5ndGgt''@;'; put 'put ''MV0/Sy53cml0ZShrLEUsLi4uaik6bmV3IFByb21pc2UoKFYsQik9PntLLndyaXRlKGssRSwuLi5qLChZLFgsVSk9PntpZihZKXJldHVybiBCKFkpO1Yoe2J5dGVzV3JpdHRlbjpYLGJ1ZmZlcjpVfSl9KX0pfSwiZnVuY3Rpb24iPT10eXBlb2YgSy53cml0ZXYmJihPLndyaXRldj1mdW5jdGlv''@;'; put 'put ''bihrLEUsLi4uail7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGpbai5sZW5ndGgtMV0/Sy53cml0ZXYoayxFLC4uLmopOm5ldyBQcm9taXNlKChWLEIpPT57Sy53cml0ZXYoayxFLC4uLmosKFksWCxVKT0+e2lmKFkpcmV0dXJuIEIoWSk7Vih7Ynl0ZXNXcml0dGVuOlgsYnVmZmVyczpVfSl9''@;'; put 'put ''KX0pfSl9LDU2NzQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ey4uLlIoNzc0OSksLi4uUig4NjkwKSwuLi5SKDY0NjQpLC4uLlIoNTU5MCksLi4uUigxNzIwKSwuLi5SKDY1NzMpLC4uLlIoMTM4MSksLi4uUig0MDI2KSwuLi5SKDUzMCksLi4uUigxMzE1KSwuLi5SKDkyNTcp''@;'; put 'put ''LC4uLlIoNDU0Mil9fSw2NTczOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21Qcm9taXNlLEs9Uig3MTgzKTtLLm91dHB1dEpzb249eihSKDM1MDgpKSxLLm91dHB1dEpzb25TeW5jPVIoOTU3OCksSy5vdXRwdXRKU09OPUsub3V0cHV0SnNvbixLLm91dHB1dEpT''@;'; put 'put ''T05TeW5jPUsub3V0cHV0SnNvblN5bmMsSy53cml0ZUpTT049Sy53cml0ZUpzb24sSy53cml0ZUpTT05TeW5jPUsud3JpdGVKc29uU3luYyxLLnJlYWRKU09OPUsucmVhZEpzb24sSy5yZWFkSlNPTlN5bmM9Sy5yZWFkSnNvblN5bmMsTS5leHBvcnRzPUt9LDcxODM6KE0sTyxSKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijtjb25zdCB6PVIoNjgxMyk7TS5leHBvcnRzPXtyZWFkSnNvbjp6LnJlYWRGaWxlLHJlYWRKc29uU3luYzp6LnJlYWRGaWxlU3luYyx3cml0ZUpzb246ei53cml0ZUZpbGUsd3JpdGVKc29uU3luYzp6LndyaXRlRmlsZVN5bmN9fSw5NTc4OihNLE8sUik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''Y29uc3R7c3RyaW5naWZ5Onp9PVIoNjc4MCkse291dHB1dEZpbGVTeW5jOkt9PVIoMTMxNSk7TS5leHBvcnRzPWZ1bmN0aW9uKEksayxFKXtjb25zdCBqPXooayxFKTtLKEksaixFKX19LDM1MDg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtzdHJpbmdpZnk6en09Uig2NzgwKSx7b3V0''@;'; put 'put ''cHV0RmlsZTpLfT1SKDEzMTUpO00uZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBJPWFlKGZ1bmN0aW9uKihrLEUsaj17fSl7Y29uc3QgVj16KEUsaik7eWllbGQgSyhrLFYsail9KTtyZXR1cm4gZnVuY3Rpb24oayxFKXtyZXR1cm4gSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSwxMzgxOihN''@;'; put 'put ''LE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21Qcm9taXNlLHttYWtlRGlyOkssbWFrZURpclN5bmM6SX09Uig4MjMzKSxrPXooSyk7TS5leHBvcnRzPXtta2RpcnM6ayxta2RpcnNTeW5jOkksbWtkaXJwOmssbWtkaXJwU3luYzpJLGVuc3VyZURpcjprLGVuc3VyZURp''@;'; put 'put ''clN5bmM6SX19LDgyMzM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzc0OSkse2NoZWNrUGF0aDpLfT1SKDM0NjgpLEk9az0+Im51bWJlciI9PXR5cGVvZiBrP2s6e21vZGU6NTExLC4uLmt9Lm1vZGU7TS5leHBvcnRzLm1ha2VEaXI9ZnVuY3Rpb24oKXt2YXIgaz1hZShmdW5j''@;'; put 'put ''dGlvbiooRSxqKXtyZXR1cm4gSyhFKSx6Lm1rZGlyKEUse21vZGU6SShqKSxyZWN1cnNpdmU6ITB9KX0pO3JldHVybiBmdW5jdGlvbihFLGope3JldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksTS5leHBvcnRzLm1ha2VEaXJTeW5jPShrLEUpPT4oSyhrKSx6Lm1rZGlyU3luYyhr''@;'; put 'put ''LHttb2RlOkkoRSkscmVjdXJzaXZlOiEwfSkpfSwzNDY4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtjb25zdCBLPVIoMjUyMCk7TS5leHBvcnRzLmNoZWNrUGF0aD1mdW5jdGlvbihJKXtpZigid2luMzIiPT09ei5wbGF0Zm9ybSYmL1s8PjoifD8qXS8udGVzdChJLnJl''@;'; put 'put ''cGxhY2UoSy5wYXJzZShJKS5yb290LCIiKSkpe2NvbnN0IGs9bmV3IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHtJfWApO3Rocm93IGsuY29kZT0iRUlOVkFMIixrfX19LDQwMjY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9e21vdmVTeW5jOlIo''@;'; put 'put ''NjAwNil9fSw2MDA2OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3KSxLPVIoMjUyMCksST1SKDg2OTApLmNvcHlTeW5jLGs9Uig0NTQyKS5yZW1vdmVTeW5jLEU9UigxMzgxKS5ta2RpcnBTeW5jLGo9UigyNzMzKTtmdW5jdGlvbiBWKEIsWSxYKXt0cnl7ei5yZW5hbWVTeW5j''@;'; put 'put ''KEIsWSl9Y2F0Y2goVSl7aWYoIkVYREVWIiE9PVUuY29kZSl0aHJvdyBVO3JldHVybiBJKHE9QixZLHtvdmVyd3JpdGU6WCxlcnJvck9uRXhpc3Q6ITB9KSxrKHEpfXZhciBxfU0uZXhwb3J0cz1mdW5jdGlvbihCLFksWCl7Y29uc3QgVT0oWD1YfHx7fSkub3ZlcndyaXRlfHxYLmNsb2JiZXJ8''@;'; put 'put ''fCExLHtzcmNTdGF0OnEsaXNDaGFuZ2luZ0Nhc2U6ZWU9ITF9PWouY2hlY2tQYXRoc1N5bmMoQixZLCJtb3ZlIixYKTtyZXR1cm4gai5jaGVja1BhcmVudFBhdGhzU3luYyhCLHEsWSwibW92ZSIpLGZ1bmN0aW9uKHRlKXtjb25zdCBvZT1LLmRpcm5hbWUodGUpO3JldHVybiBLLnBhcnNlKG9l''@;'; put 'put ''KS5yb290PT09b2V9KFkpfHxFKEsuZGlybmFtZShZKSksZnVuY3Rpb24odGUsb2Usc2UsaGUpe2lmKGhlKXJldHVybiBWKHRlLG9lLHNlKTtpZihzZSlyZXR1cm4gayhvZSksVih0ZSxvZSxzZSk7aWYoei5leGlzdHNTeW5jKG9lKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlz''@;'; put 'put ''dHMuIik7cmV0dXJuIFYodGUsb2Usc2UpfShCLFksVSxlZSl9fSw1MzA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrO00uZXhwb3J0cz17bW92ZTp6KFIoNDM2KSl9fSw0MzY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzcpLEs9''@;'; put 'put ''UigyNTIwKSxJPVIoNjQ2NCkuY29weSxrPVIoNDU0MikucmVtb3ZlLEU9UigxMzgxKS5ta2RpcnAsaj1SKDkyNTcpLnBhdGhFeGlzdHMsVj1SKDI3MzMpO2Z1bmN0aW9uIEIoWCxVLHEsZWUsdGUpe3JldHVybiBlZT9ZKFgsVSxxLHRlKTpxP2soVSxvZT0+b2U/dGUob2UpOlkoWCxVLHEsdGUp''@;'; put 'put ''KTp2b2lkIGooVSwob2Usc2UpPT5vZT90ZShvZSk6c2U/dGUobmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhpc3RzLiIpKTpZKFgsVSxxLHRlKSl9ZnVuY3Rpb24gWShYLFUscSxlZSl7ei5yZW5hbWUoWCxVLHRlPT57cmV0dXJuIHRlPyJFWERFViIhPT10ZS5jb2RlP2VlKHRlKToodWU9ZWUs''@;'; put 'put ''dm9pZCBJKG9lPVgsVSx7b3ZlcndyaXRlOnEsZXJyb3JPbkV4aXN0OiEwfSxHPT5HP3VlKEcpOmsob2UsdWUpKSk6ZWUoKTt2YXIgb2UsdWV9KX1NLmV4cG9ydHM9ZnVuY3Rpb24oWCxVLHEsZWUpeyJmdW5jdGlvbiI9PXR5cGVvZiBxJiYoZWU9cSxxPXt9KTtjb25zdCB0ZT1xLm92ZXJ3cml0''@;'; put 'put ''ZXx8cS5jbG9iYmVyfHwhMTtWLmNoZWNrUGF0aHMoWCxVLCJtb3ZlIixxLChvZSxzZSk9PntpZihvZSlyZXR1cm4gZWUob2UpO2NvbnN0e3NyY1N0YXQ6aGUsaXNDaGFuZ2luZ0Nhc2U6dWU9ITF9PXNlO1YuY2hlY2tQYXJlbnRQYXRocyhYLGhlLFUsIm1vdmUiLGNlPT5jZT9lZShjZSk6ZnVu''@;'; put 'put ''Y3Rpb24oRyl7Y29uc3QgYj1LLmRpcm5hbWUoRyk7cmV0dXJuIEsucGFyc2UoYikucm9vdD09PWJ9KFUpP0IoWCxVLHRlLHVlLGVlKTp2b2lkIEUoSy5kaXJuYW1lKFUpLEc9Pkc/ZWUoRyk6QihYLFUsdGUsdWUsZWUpKSl9KX19LDEzMTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6''@;'; put 'put ''PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9Uig3NyksST1SKDI1MjApLGs9UigxMzgxKSxFPVIoOTI1NykucGF0aEV4aXN0cztNLmV4cG9ydHM9e291dHB1dEZpbGU6eihmdW5jdGlvbihqLFYsQixZKXsiZnVuY3Rpb24iPT10eXBlb2YgQiYmKFk9QixCPSJ1dGY4Iik7Y29uc3QgWD1JLmRpcm5h''@;'; put 'put ''bWUoaik7RShYLChVLHEpPT5VP1koVSk6cT9LLndyaXRlRmlsZShqLFYsQixZKTp2b2lkIGsubWtkaXJzKFgsZWU9PntpZihlZSlyZXR1cm4gWShlZSk7Sy53cml0ZUZpbGUoaixWLEIsWSl9KSl9KSxvdXRwdXRGaWxlU3luYzpmdW5jdGlvbihqLC4uLlYpe2NvbnN0IEI9SS5kaXJuYW1lKGop''@;'; put 'put ''O2lmKEsuZXhpc3RzU3luYyhCKSlyZXR1cm4gSy53cml0ZUZpbGVTeW5jKGosLi4uVik7ay5ta2RpcnNTeW5jKEIpLEsud3JpdGVGaWxlU3luYyhqLC4uLlYpfX19LDkyNTc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbVByb21pc2UsSz1SKDc3NDkpO00uZXhw''@;'; put 'put ''b3J0cz17cGF0aEV4aXN0czp6KGZ1bmN0aW9uKEkpe3JldHVybiBLLmFjY2VzcyhJKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pLHBhdGhFeGlzdHNTeW5jOksuZXhpc3RzU3luY319LDQ1NDI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzcpLEs9Uig4OTgxKS5mcm9t''@;'; put 'put ''Q2FsbGJhY2ssST1SKDM0NTYpO00uZXhwb3J0cz17cmVtb3ZlOksoZnVuY3Rpb24oayxFKXtpZih6LnJtKXJldHVybiB6LnJtKGsse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0sRSk7SShrLEUpfSkscmVtb3ZlU3luYzpmdW5jdGlvbihrKXtpZih6LnJtU3luYylyZXR1cm4gei5ybVN5bmMoayx7''@;'; put 'put ''cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSk7SS5zeW5jKGspfX19LDM0NTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2NvbnN0IEs9Uig3NyksST1SKDI1MjApLGs9Uig5MjgyKSxFPSJ3aW4zMiI9PT16LnBsYXRmb3JtO2Z1bmN0aW9uIGoodGUpe1sidW5saW5rIiwiY2ht''@;'; put 'put ''b2QiLCJzdGF0IiwibHN0YXQiLCJybWRpciIsInJlYWRkaXIiXS5mb3JFYWNoKG9lPT57dGVbb2VdPXRlW29lXXx8S1tvZV0sdGVbb2UrPSJTeW5jIl09dGVbb2VdfHxLW29lXX0pLHRlLm1heEJ1c3lUcmllcz10ZS5tYXhCdXN5VHJpZXN8fDN9ZnVuY3Rpb24gVih0ZSxvZSxzZSl7bGV0IGhl''@;'; put 'put ''PTA7ImZ1bmN0aW9uIj09dHlwZW9mIG9lJiYoc2U9b2Usb2U9e30pLGsodGUsInJpbXJhZjogbWlzc2luZyBwYXRoIiksay5zdHJpY3RFcXVhbCh0eXBlb2YgdGUsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmciKSxrLnN0cmljdEVxdWFsKHR5cGVvZiBzZSwiZnVu''@;'; put 'put ''Y3Rpb24iLCJyaW1yYWY6IGNhbGxiYWNrIGZ1bmN0aW9uIHJlcXVpcmVkIiksayhvZSwicmltcmFmOiBpbnZhbGlkIG9wdGlvbnMgYXJndW1lbnQgcHJvdmlkZWQiKSxrLnN0cmljdEVxdWFsKHR5cGVvZiBvZSwib2JqZWN0IiwicmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QiKSxq''@;'; put 'put ''KG9lKSxCKHRlLG9lLGZ1bmN0aW9uIHVlKGNlKXtpZihjZSl7aWYoKCJFQlVTWSI9PT1jZS5jb2RlfHwiRU5PVEVNUFRZIj09PWNlLmNvZGV8fCJFUEVSTSI9PT1jZS5jb2RlKSYmaGU8b2UubWF4QnVzeVRyaWVzKXJldHVybiBoZSsrLHNldFRpbWVvdXQoKCk9PkIodGUsb2UsdWUpLDEwMCpo''@;'; put 'put ''ZSk7IkVOT0VOVCI9PT1jZS5jb2RlJiYoY2U9bnVsbCl9c2UoY2UpfSl9ZnVuY3Rpb24gQih0ZSxvZSxzZSl7ayh0ZSksayhvZSksaygiZnVuY3Rpb24iPT10eXBlb2Ygc2UpLG9lLmxzdGF0KHRlLChoZSx1ZSk9PmhlJiYiRU5PRU5UIj09PWhlLmNvZGU/c2UobnVsbCk6aGUmJiJFUEVSTSI9''@;'; put 'put ''PT1oZS5jb2RlJiZFP1kodGUsb2UsaGUsc2UpOnVlJiZ1ZS5pc0RpcmVjdG9yeSgpP1UodGUsb2UsaGUsc2UpOnZvaWQgb2UudW5saW5rKHRlLGNlPT57aWYoY2Upe2lmKCJFTk9FTlQiPT09Y2UuY29kZSlyZXR1cm4gc2UobnVsbCk7aWYoIkVQRVJNIj09PWNlLmNvZGUpcmV0dXJuIEU/WSh0''@;'; put 'put ''ZSxvZSxjZSxzZSk6VSh0ZSxvZSxjZSxzZSk7aWYoIkVJU0RJUiI9PT1jZS5jb2RlKXJldHVybiBVKHRlLG9lLGNlLHNlKX1yZXR1cm4gc2UoY2UpfSkpfWZ1bmN0aW9uIFkodGUsb2Usc2UsaGUpe2sodGUpLGsob2UpLGsoImZ1bmN0aW9uIj09dHlwZW9mIGhlKSxvZS5jaG1vZCh0ZSw0Mzgs''@;'; put 'put ''dWU9Pnt1ZT9oZSgiRU5PRU5UIj09PXVlLmNvZGU/bnVsbDpzZSk6b2Uuc3RhdCh0ZSwoY2UsRyk9PntjZT9oZSgiRU5PRU5UIj09PWNlLmNvZGU/bnVsbDpzZSk6Ry5pc0RpcmVjdG9yeSgpP1UodGUsb2Usc2UsaGUpOm9lLnVubGluayh0ZSxoZSl9KX0pfWZ1bmN0aW9uIFgodGUsb2Usc2Up''@;'; put 'put ''e2xldCBoZTtrKHRlKSxrKG9lKTt0cnl7b2UuY2htb2RTeW5jKHRlLDQzOCl9Y2F0Y2godWUpe2lmKCJFTk9FTlQiPT09dWUuY29kZSlyZXR1cm47dGhyb3cgc2V9dHJ5e2hlPW9lLnN0YXRTeW5jKHRlKX1jYXRjaCh1ZSl7aWYoIkVOT0VOVCI9PT11ZS5jb2RlKXJldHVybjt0aHJvdyBzZX1o''@;'; put 'put ''ZS5pc0RpcmVjdG9yeSgpP2VlKHRlLG9lLHNlKTpvZS51bmxpbmtTeW5jKHRlKX1mdW5jdGlvbiBVKHRlLG9lLHNlLGhlKXtrKHRlKSxrKG9lKSxrKCJmdW5jdGlvbiI9PXR5cGVvZiBoZSksb2Uucm1kaXIodGUsdWU9Pnt2YXIgY2UsRyxiOyF1ZXx8IkVOT1RFTVBUWSIhPT11ZS5jb2RlJiYi''@;'; put 'put ''RUVYSVNUIiE9PXVlLmNvZGUmJiJFUEVSTSIhPT11ZS5jb2RlP2hlKHVlJiYiRU5PVERJUiI9PT11ZS5jb2RlP3NlOnVlKTooRz1vZSxiPWhlLGsoY2U9dGUpLGsoRyksaygiZnVuY3Rpb24iPT10eXBlb2YgYiksRy5yZWFkZGlyKGNlLChELEgpPT57aWYoRClyZXR1cm4gYihEKTtsZXQgTixn''@;'; put 'put ''PUgubGVuZ3RoO2lmKDA9PT1nKXJldHVybiBHLnJtZGlyKGNlLGIpO0guZm9yRWFjaChDPT57VihJLmpvaW4oY2UsQyksRyxTPT57aWYoIU4pcmV0dXJuIFM/YihOPVMpOnZvaWQoMD09LS1nJiZHLnJtZGlyKGNlLGIpKX0pfSl9KSl9KX1mdW5jdGlvbiBxKHRlLG9lKXtsZXQgc2U7aihvZT1v''@;'; put 'put ''ZXx8e30pLGsodGUsInJpbXJhZjogbWlzc2luZyBwYXRoIiksay5zdHJpY3RFcXVhbCh0eXBlb2YgdGUsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmciKSxrKG9lLCJyaW1yYWY6IG1pc3Npbmcgb3B0aW9ucyIpLGsuc3RyaWN0RXF1YWwodHlwZW9mIG9lLCJvYmpl''@;'; put 'put ''Y3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCIpO3RyeXtzZT1vZS5sc3RhdFN5bmModGUpfWNhdGNoKGhlKXtpZigiRU5PRU5UIj09PWhlLmNvZGUpcmV0dXJuOyJFUEVSTSI9PT1oZS5jb2RlJiZFJiZYKHRlLG9lLGhlKX10cnl7c2UmJnNlLmlzRGlyZWN0b3J5KCk/ZWUo''@;'; put 'put ''dGUsb2UsbnVsbCk6b2UudW5saW5rU3luYyh0ZSl9Y2F0Y2goaGUpe2lmKCJFTk9FTlQiPT09aGUuY29kZSlyZXR1cm47aWYoIkVQRVJNIj09PWhlLmNvZGUpcmV0dXJuIEU/WCh0ZSxvZSxoZSk6ZWUodGUsb2UsaGUpO2lmKCJFSVNESVIiIT09aGUuY29kZSl0aHJvdyBoZTtlZSh0ZSxvZSxo''@;'; put 'put ''ZSl9fWZ1bmN0aW9uIGVlKHRlLG9lLHNlKXtrKHRlKSxrKG9lKTt0cnl7b2Uucm1kaXJTeW5jKHRlKX1jYXRjaChoZSl7aWYoIkVOT1RESVIiPT09aGUuY29kZSl0aHJvdyBzZTtpZigiRU5PVEVNUFRZIj09PWhlLmNvZGV8fCJFRVhJU1QiPT09aGUuY29kZXx8IkVQRVJNIj09PWhlLmNvZGUp''@;'; put 'put ''IWZ1bmN0aW9uKHVlLGNlKXtpZihrKHVlKSxrKGNlKSxjZS5yZWFkZGlyU3luYyh1ZSkuZm9yRWFjaChHPT5xKEkuam9pbih1ZSxHKSxjZSkpLCFFKXJldHVybiBjZS5ybWRpclN5bmModWUsY2UpO3tjb25zdCBHPURhdGUubm93KCk7ZG97dHJ5e3JldHVybiBjZS5ybWRpclN5bmModWUsY2Up''@;'; put 'put ''fWNhdGNoe319d2hpbGUoRGF0ZS5ub3coKS1HPDUwMCl9fSh0ZSxvZSk7ZWxzZSBpZigiRU5PRU5UIiE9PWhlLmNvZGUpdGhyb3cgaGV9fU0uZXhwb3J0cz1WLFYuc3luYz1xfSwyNzMzOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3NDkpLEs9UigyNTIwKSxJPVIoOTUzOSk7''@;'; put 'put ''ZnVuY3Rpb24gayhCLFksWCl7Y29uc3QgVT1YLmRlcmVmZXJlbmNlP3E9Pnouc3RhdChxLHtiaWdpbnQ6ITB9KTpxPT56LmxzdGF0KHEse2JpZ2ludDohMH0pO3JldHVybiBQcm9taXNlLmFsbChbVShCKSxVKFkpLmNhdGNoKHE9PntpZigiRU5PRU5UIj09PXEuY29kZSlyZXR1cm4gbnVsbDt0''@;'; put 'put ''aHJvdyBxfSldKS50aGVuKChbcSxlZV0pPT4oe3NyY1N0YXQ6cSxkZXN0U3RhdDplZX0pKX1mdW5jdGlvbiBFKEIsWSl7cmV0dXJuIFkuaW5vJiZZLmRldiYmWS5pbm89PT1CLmlubyYmWS5kZXY9PT1CLmRldn1mdW5jdGlvbiBqKEIsWSl7Y29uc3QgWD1LLnJlc29sdmUoQikuc3BsaXQoSy5z''@;'; put 'put ''ZXApLmZpbHRlcihxPT5xKSxVPUsucmVzb2x2ZShZKS5zcGxpdChLLnNlcCkuZmlsdGVyKHE9PnEpO3JldHVybiBYLnJlZHVjZSgocSxlZSx0ZSk9PnEmJlVbdGVdPT09ZWUsITApfWZ1bmN0aW9uIFYoQixZLFgpe3JldHVybmBDYW5ub3QgJHtYfSAnJHtCfScgdG8gYSBzdWJkaXJlY3Rvcnkg''@;'; put 'put ''b2YgaXRzZWxmLCAnJHtZfScuYH1NLmV4cG9ydHM9e2NoZWNrUGF0aHM6ZnVuY3Rpb24oQixZLFgsVSxxKXtJLmNhbGxiYWNraWZ5KGspKEIsWSxVLChlZSx0ZSk9PntpZihlZSlyZXR1cm4gcShlZSk7Y29uc3R7c3JjU3RhdDpvZSxkZXN0U3RhdDpzZX09dGU7aWYoc2Upe2lmKEUob2Usc2Up''@;'; put 'put ''KXtjb25zdCBoZT1LLmJhc2VuYW1lKEIpLHVlPUsuYmFzZW5hbWUoWSk7cmV0dXJuIm1vdmUiPT09WCYmaGUhPT11ZSYmaGUudG9Mb3dlckNhc2UoKT09PXVlLnRvTG93ZXJDYXNlKCk/cShudWxsLHtzcmNTdGF0Om9lLGRlc3RTdGF0OnNlLGlzQ2hhbmdpbmdDYXNlOiEwfSk6cShuZXcgRXJy''@;'; put 'put ''b3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIikpfWlmKG9lLmlzRGlyZWN0b3J5KCkmJiFzZS5pc0RpcmVjdG9yeSgpKXJldHVybiBxKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke1l9JyB3aXRoIGRpcmVjdG9yeSAn''@;'; put 'put ''JHtCfScuYCkpO2lmKCFvZS5pc0RpcmVjdG9yeSgpJiZzZS5pc0RpcmVjdG9yeSgpKXJldHVybiBxKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7WX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtCfScuYCkpfXJldHVybiBvZS5pc0RpcmVjdG9yeSgpJiZqKEIsWSk/''@;'; put 'put ''cShuZXcgRXJyb3IoVihCLFksWCkpKTpxKG51bGwse3NyY1N0YXQ6b2UsZGVzdFN0YXQ6c2V9KX0pfSxjaGVja1BhdGhzU3luYzpmdW5jdGlvbihCLFksWCxVKXtjb25zdHtzcmNTdGF0OnEsZGVzdFN0YXQ6ZWV9PWZ1bmN0aW9uKHRlLG9lLHNlKXtsZXQgaGU7Y29uc3QgdWU9c2UuZGVyZWZl''@;'; put 'put ''cmVuY2U/Rz0+ei5zdGF0U3luYyhHLHtiaWdpbnQ6ITB9KTpHPT56LmxzdGF0U3luYyhHLHtiaWdpbnQ6ITB9KSxjZT11ZSh0ZSk7dHJ5e2hlPXVlKG9lKX1jYXRjaChHKXtpZigiRU5PRU5UIj09PUcuY29kZSlyZXR1cm57c3JjU3RhdDpjZSxkZXN0U3RhdDpudWxsfTt0aHJvdyBHfXJldHVy''@;'; put 'put ''bntzcmNTdGF0OmNlLGRlc3RTdGF0OmhlfX0oQixZLFUpO2lmKGVlKXtpZihFKHEsZWUpKXtjb25zdCB0ZT1LLmJhc2VuYW1lKEIpLG9lPUsuYmFzZW5hbWUoWSk7aWYoIm1vdmUiPT09WCYmdGUhPT1vZSYmdGUudG9Mb3dlckNhc2UoKT09PW9lLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0''@;'; put 'put ''YXQ6cSxkZXN0U3RhdDplZSxpc0NoYW5naW5nQ2FzZTohMH07dGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpfWlmKHEuaXNEaXJlY3RvcnkoKSYmIWVlLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3Zl''@;'; put 'put ''cndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7WX0nIHdpdGggZGlyZWN0b3J5ICcke0J9Jy5gKTtpZighcS5pc0RpcmVjdG9yeSgpJiZlZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7WX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtC''@;'; put 'put ''fScuYCl9aWYocS5pc0RpcmVjdG9yeSgpJiZqKEIsWSkpdGhyb3cgbmV3IEVycm9yKFYoQixZLFgpKTtyZXR1cm57c3JjU3RhdDpxLGRlc3RTdGF0OmVlfX0sY2hlY2tQYXJlbnRQYXRoczpmdW5jdGlvbiBCKFksWCxVLHEsZWUpe2NvbnN0IHRlPUsucmVzb2x2ZShLLmRpcm5hbWUoWSkpLG9l''@;'; put 'put ''PUsucmVzb2x2ZShLLmRpcm5hbWUoVSkpO2lmKG9lPT09dGV8fG9lPT09Sy5wYXJzZShvZSkucm9vdClyZXR1cm4gZWUoKTt6LnN0YXQob2Use2JpZ2ludDohMH0sKHNlLGhlKT0+c2U/IkVOT0VOVCI9PT1zZS5jb2RlP2VlKCk6ZWUoc2UpOkUoWCxoZSk/ZWUobmV3IEVycm9yKFYoWSxVLHEp''@;'; put 'put ''KSk6QihZLFgsb2UscSxlZSkpfSxjaGVja1BhcmVudFBhdGhzU3luYzpmdW5jdGlvbiBCKFksWCxVLHEpe2NvbnN0IGVlPUsucmVzb2x2ZShLLmRpcm5hbWUoWSkpLHRlPUsucmVzb2x2ZShLLmRpcm5hbWUoVSkpO2lmKHRlPT09ZWV8fHRlPT09Sy5wYXJzZSh0ZSkucm9vdClyZXR1cm47bGV0''@;'; put 'put ''IG9lO3RyeXtvZT16LnN0YXRTeW5jKHRlLHtiaWdpbnQ6ITB9KX1jYXRjaChzZSl7aWYoIkVOT0VOVCI9PT1zZS5jb2RlKXJldHVybjt0aHJvdyBzZX1pZihFKFgsb2UpKXRocm93IG5ldyBFcnJvcihWKFksVSxxKSk7cmV0dXJuIEIoWSxYLHRlLHEpfSxpc1NyY1N1YmRpcjpqLGFyZUlkZW50''@;'; put 'put ''aWNhbDpFfX0sMzE4OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3KTtNLmV4cG9ydHM9e3V0aW1lc01pbGxpczpmdW5jdGlvbihLLEksayxFKXt6Lm9wZW4oSywicisiLChqLFYpPT57aWYoailyZXR1cm4gRShqKTt6LmZ1dGltZXMoVixJLGssQj0+e3ouY2xvc2UoVixZPT57''@;'; put 'put ''RSYmRShCfHxZKX0pfSl9KX0sdXRpbWVzTWlsbGlzU3luYzpmdW5jdGlvbihLLEksayl7Y29uc3QgRT16Lm9wZW5TeW5jKEssInIrIik7cmV0dXJuIHouZnV0aW1lc1N5bmMoRSxJLGspLHouY2xvc2VTeW5jKEUpfX19LDczMzQ6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSk7TS5leHBvcnRzPVks''@;'; put 'put ''WS5yZWFscGF0aD1ZLFkuc3luYz1YLFkucmVhbHBhdGhTeW5jPVgsWS5tb25rZXlwYXRjaD1mdW5jdGlvbigpe0sucmVhbHBhdGg9WSxLLnJlYWxwYXRoU3luYz1YfSxZLnVubW9ua2V5cGF0Y2g9ZnVuY3Rpb24oKXtLLnJlYWxwYXRoPUksSy5yZWFscGF0aFN5bmM9a307dmFyIEs9UigyNTM1''@;'; put 'put ''KSxJPUsucmVhbHBhdGgsaz1LLnJlYWxwYXRoU3luYyxqPS9edlswLTVdXC4vLnRlc3Qoei52ZXJzaW9uKSxWPVIoNzA1OSk7ZnVuY3Rpb24gQihVKXtyZXR1cm4gVSYmInJlYWxwYXRoIj09PVUuc3lzY2FsbCYmKCJFTE9PUCI9PT1VLmNvZGV8fCJFTk9NRU0iPT09VS5jb2RlfHwiRU5BTUVU''@;'; put 'put ''T09MT05HIj09PVUuY29kZSl9ZnVuY3Rpb24gWShVLHEsZWUpe2lmKGopcmV0dXJuIEkoVSxxLGVlKTsiZnVuY3Rpb24iPT10eXBlb2YgcSYmKGVlPXEscT1udWxsKSxJKFUscSxmdW5jdGlvbih0ZSxvZSl7Qih0ZSk/Vi5yZWFscGF0aChVLHEsZWUpOmVlKHRlLG9lKX0pfWZ1bmN0aW9uIFgo''@;'; put 'put ''VSxxKXtpZihqKXJldHVybiBrKFUscSk7dHJ5e3JldHVybiBrKFUscSl9Y2F0Y2goZWUpe2lmKEIoZWUpKXJldHVybiBWLnJlYWxwYXRoU3luYyhVLHEpO3Rocm93IGVlfX19LDcwNTk6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9UigyNTIwKSxrPSJ3aW4zMiI9PT16LnBs''@;'; put 'put ''YXRmb3JtLEU9UigyNTM1KSxqPXouZW52Lk5PREVfREVCVUcmJi9mcy8udGVzdCh6LmVudi5OT0RFX0RFQlVHKTtpZihrKXZhciBCPS8oLio/KSg/OltcL1xcXSt8JCkvZztlbHNlIEI9LyguKj8pKD86W1wvXSt8JCkvZztpZihrKXZhciBZPS9eKD86W2EtekEtWl06fFtcXFwvXXsyfVteXFxc''@;'; put 'put ''L10rW1xcXC9dW15cXFwvXSspP1tcXFwvXSovO2Vsc2UgWT0vXltcL10qLztPLnJlYWxwYXRoU3luYz1mdW5jdGlvbihYLFUpe2lmKFg9SS5yZXNvbHZlKFgpLFUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLFgpKXJldHVybiBVW1hdO3ZhciBxLGVlLHRlLG9lLHNl''@;'; put 'put ''PVgsaGU9e30sdWU9e307ZnVuY3Rpb24gY2UoKXt2YXIgZz1ZLmV4ZWMoWCk7cT1nWzBdLmxlbmd0aCxlZT1nWzBdLHRlPWdbMF0sb2U9IiIsayYmIXVlW3RlXSYmKEUubHN0YXRTeW5jKHRlKSx1ZVt0ZV09ITApfWZvcihjZSgpO3E8WC5sZW5ndGg7KXtCLmxhc3RJbmRleD1xO3ZhciBHPUIu''@;'; put 'put ''ZXhlYyhYKTtpZihvZT1lZSxlZSs9R1swXSxxPUIubGFzdEluZGV4LCEodWVbdGU9b2UrR1sxXV18fFUmJlVbdGVdPT09dGUpKXt2YXIgYjtpZihVJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSx0ZSkpYj1VW3RlXTtlbHNle3ZhciBEPUUubHN0YXRTeW5jKHRlKTtp''@;'; put 'put ''ZighRC5pc1N5bWJvbGljTGluaygpKXt1ZVt0ZV09ITAsVSYmKFVbdGVdPXRlKTtjb250aW51ZX12YXIgSD1udWxsO2lmKCFrKXt2YXIgTj1ELmRldi50b1N0cmluZygzMikrIjoiK0QuaW5vLnRvU3RyaW5nKDMyKTtoZS5oYXNPd25Qcm9wZXJ0eShOKSYmKEg9aGVbTl0pfW51bGw9PT1IJiYo''@;'; put 'put ''RS5zdGF0U3luYyh0ZSksSD1FLnJlYWRsaW5rU3luYyh0ZSkpLGI9SS5yZXNvbHZlKG9lLEgpLFUmJihVW3RlXT1iKSxrfHwoaGVbTl09SCl9WD1JLnJlc29sdmUoYixYLnNsaWNlKHEpKSxjZSgpfX1yZXR1cm4gVSYmKFVbc2VdPVgpLFh9LE8ucmVhbHBhdGg9ZnVuY3Rpb24oWCxVLHEpe2lm''@;'; put 'put ''KCJmdW5jdGlvbiIhPXR5cGVvZiBxJiYocT1mdW5jdGlvbiBWKFgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBYP1g6ZnVuY3Rpb24oKXt2YXIgVTtpZihqKXt2YXIgcT1uZXcgRXJyb3I7VT1mdW5jdGlvbih0ZSl7dGUmJihxLm1lc3NhZ2U9dGUubWVzc2FnZSxlZSh0ZT1xKSl9fWVsc2Ug''@;'; put 'put ''VT1lZTtyZXR1cm4gVTtmdW5jdGlvbiBlZSh0ZSl7aWYodGUpe2lmKHoudGhyb3dEZXByZWNhdGlvbil0aHJvdyB0ZTtpZighei5ub0RlcHJlY2F0aW9uKXt2YXIgb2U9ImZzOiBtaXNzaW5nIGNhbGxiYWNrICIrKHRlLnN0YWNrfHx0ZS5tZXNzYWdlKTt6LnRyYWNlRGVwcmVjYXRpb24/Sy50''@;'; put 'put ''cmFjZShvZSk6Sy5lcnJvcihvZSl9fX19KCl9KFUpLFU9bnVsbCksWD1JLnJlc29sdmUoWCksVSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsWCkpcmV0dXJuIHoubmV4dFRpY2socS5iaW5kKG51bGwsbnVsbCxVW1hdKSk7dmFyIGVlLHRlLG9lLHNlLGhlPVgsdWU9''@;'; put 'put ''e30sY2U9e307ZnVuY3Rpb24gRygpe3ZhciBnPVkuZXhlYyhYKTtlZT1nWzBdLmxlbmd0aCx0ZT1nWzBdLG9lPWdbMF0sc2U9IiIsayYmIWNlW29lXT9FLmxzdGF0KG9lLGZ1bmN0aW9uKEMpe2lmKEMpcmV0dXJuIHEoQyk7Y2Vbb2VdPSEwLGIoKX0pOnoubmV4dFRpY2soYil9ZnVuY3Rpb24g''@;'; put 'put ''Yigpe2lmKGVlPj1YLmxlbmd0aClyZXR1cm4gVSYmKFVbaGVdPVgpLHEobnVsbCxYKTtCLmxhc3RJbmRleD1lZTt2YXIgZz1CLmV4ZWMoWCk7cmV0dXJuIHNlPXRlLHRlKz1nWzBdLGVlPUIubGFzdEluZGV4LGNlW29lPXNlK2dbMV1dfHxVJiZVW29lXT09PW9lP3oubmV4dFRpY2soYik6VSYm''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsb2UpP04oVVtvZV0pOkUubHN0YXQob2UsRCl9ZnVuY3Rpb24gRChnLEMpe2lmKGcpcmV0dXJuIHEoZyk7aWYoIUMuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gY2Vbb2VdPSEwLFUmJihVW29lXT1vZSksei5uZXh0VGljayhi''@;'; put 'put ''KTtpZighayl7dmFyIFM9Qy5kZXYudG9TdHJpbmcoMzIpKyI6IitDLmluby50b1N0cmluZygzMik7aWYodWUuaGFzT3duUHJvcGVydHkoUykpcmV0dXJuIEgobnVsbCx1ZVtTXSxvZSl9RS5zdGF0KG9lLGZ1bmN0aW9uKHYpe2lmKHYpcmV0dXJuIHEodik7RS5yZWFkbGluayhvZSxmdW5jdGlv''@;'; put 'put ''bihwLHcpe2t8fCh1ZVtTXT13KSxIKHAsdyl9KX0pfWZ1bmN0aW9uIEgoZyxDLFMpe2lmKGcpcmV0dXJuIHEoZyk7dmFyIHY9SS5yZXNvbHZlKHNlLEMpO1UmJihVW1NdPXYpLE4odil9ZnVuY3Rpb24gTihnKXtYPUkucmVzb2x2ZShnLFguc2xpY2UoZWUpKSxHKCl9RygpfX0sNzY0ODpNPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBPPUFycmF5LnByb3RvdHlwZS5zbGljZSxSPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7TS5leHBvcnRzPWZ1bmN0aW9uKHope3ZhciBLPXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEt8fCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1SLmNhbGwoSykpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiK0spO2Zvcih2YXIgSSxrPU8uY2FsbChhcmd1bWVudHMsMSksRT1NYXRoLm1heCgwLEsubGVuZ3RoLWsubGVuZ3RoKSxqPVtdLFY9MDtWPEU7VisrKWoucHVzaCgiJCIrVik7aWYo''@;'; put 'put ''ST1GdW5jdGlvbigiYmluZGVyIiwicmV0dXJuIGZ1bmN0aW9uICgiK2ouam9pbigiLCIpKyIpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfSIpKGZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIEkpe3ZhciBZPUsuYXBwbHkodGhpcyxrLmNvbmNhdChPLmNhbGwo''@;'; put 'put ''YXJndW1lbnRzKSkpO3JldHVybiBPYmplY3QoWSk9PT1ZP1k6dGhpc31yZXR1cm4gSy5hcHBseSh6LGsuY29uY2F0KE8uY2FsbChhcmd1bWVudHMpKSl9KSxLLnByb3RvdHlwZSl7dmFyIEI9ZnVuY3Rpb24oKXt9O0IucHJvdG90eXBlPUsucHJvdG90eXBlLEkucHJvdG90eXBlPW5ldyBCLEIu''@;'; put 'put ''cHJvdG90eXBlPW51bGx9cmV0dXJuIEl9fSw4NjEyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig3NjQ4KTtNLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fHp9LDIxMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9U3ludGF4RXJyb3IsST1GdW5jdGlvbixr''@;'; put 'put ''PVR5cGVFcnJvcixFPWZ1bmN0aW9uKFMpe3RyeXtyZXR1cm4gSSgnInVzZSBzdHJpY3QiOyByZXR1cm4gKCcrUysiKS5jb25zdHJ1Y3RvcjsiKSgpfWNhdGNoe319LGo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtpZihqKXRyeXtqKHt9LCIiKX1jYXRjaHtqPW51bGx9dmFyIFY9''@;'; put 'put ''ZnVuY3Rpb24oKXt0aHJvdyBuZXcga30sQj1qP2Z1bmN0aW9uKCl7dHJ5e3JldHVybiBWfWNhdGNoe3RyeXtyZXR1cm4gaihhcmd1bWVudHMsImNhbGxlZSIpLmdldH1jYXRjaHtyZXR1cm4gVn19fSgpOlYsWT1SKDE0MDUpKCksWD1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKFMp''@;'; put 'put ''e3JldHVybiBTLl9fcHJvdG9fX30sVT17fSxxPXR5cGVvZiBVaW50OEFycmF5PiJ1Ij96OlgoVWludDhBcnJheSksZWU9eyIlQWdncmVnYXRlRXJyb3IlIjp0eXBlb2YgQWdncmVnYXRlRXJyb3I+InUiP3o6QWdncmVnYXRlRXJyb3IsIiVBcnJheSUiOkFycmF5LCIlQXJyYXlCdWZmZXIlIjp0''@;'; put 'put ''eXBlb2YgQXJyYXlCdWZmZXI+InUiP3o6QXJyYXlCdWZmZXIsIiVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSI6WT9YKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSk6eiwiJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUiOnosIiVBc3luY0Z1bmN0aW9uJSI6VSwiJUFzeW5jR2VuZXJhdG9y''@;'; put 'put ''JSI6VSwiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIjpVLCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiOlUsIiVBdG9taWNzJSI6dHlwZW9mIEF0b21pY3M+InUiP3o6QXRvbWljcywiJUJpZ0ludCUiOnR5cGVvZiBCaWdJbnQ+InUiP3o6QmlnSW50LCIlQmlnSW50NjRBcnJheSUiOnR5cGVv''@;'; put 'put ''ZiBCaWdJbnQ2NEFycmF5PiJ1Ij96OkJpZ0ludDY0QXJyYXksIiVCaWdVaW50NjRBcnJheSUiOnR5cGVvZiBCaWdVaW50NjRBcnJheT4idSI/ejpCaWdVaW50NjRBcnJheSwiJUJvb2xlYW4lIjpCb29sZWFuLCIlRGF0YVZpZXclIjp0eXBlb2YgRGF0YVZpZXc+InUiP3o6RGF0YVZpZXcsIiVE''@;'; put 'put ''YXRlJSI6RGF0ZSwiJWRlY29kZVVSSSUiOmRlY29kZVVSSSwiJWRlY29kZVVSSUNvbXBvbmVudCUiOmRlY29kZVVSSUNvbXBvbmVudCwiJWVuY29kZVVSSSUiOmVuY29kZVVSSSwiJWVuY29kZVVSSUNvbXBvbmVudCUiOmVuY29kZVVSSUNvbXBvbmVudCwiJUVycm9yJSI6RXJyb3IsIiVldmFs''@;'; put 'put ''JSI6ZXZhbCwiJUV2YWxFcnJvciUiOkV2YWxFcnJvciwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP3o6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/ejpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3Ry''@;'; put 'put ''eSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/ejpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6SSwiJUdlbmVyYXRvckZ1bmN0aW9uJSI6VSwiJUludDhBcnJheSUiOnR5cGVvZiBJbnQ4QXJyYXk+InUiP3o6SW50OEFycmF5LCIlSW50MTZBcnJheSUiOnR5cGVv''@;'; put 'put ''ZiBJbnQxNkFycmF5PiJ1Ij96OkludDE2QXJyYXksIiVJbnQzMkFycmF5JSI6dHlwZW9mIEludDMyQXJyYXk+InUiP3o6SW50MzJBcnJheSwiJWlzRmluaXRlJSI6aXNGaW5pdGUsIiVpc05hTiUiOmlzTmFOLCIlSXRlcmF0b3JQcm90b3R5cGUlIjpZP1goWChbXVtTeW1ib2wuaXRlcmF0b3Jd''@;'; put 'put ''KCkpKTp6LCIlSlNPTiUiOiJvYmplY3QiPT10eXBlb2YgSlNPTj9KU09OOnosIiVNYXAlIjp0eXBlb2YgTWFwPiJ1Ij96Ok1hcCwiJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIE1hcDwidSImJlk/WCgobmV3IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKTp6LCIlTWF0aCUiOk1hdGgs''@;'; put 'put ''IiVOdW1iZXIlIjpOdW1iZXIsIiVPYmplY3QlIjpPYmplY3QsIiVwYXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNlJSI6dHlwZW9mIFByb21pc2U+InUiP3o6UHJvbWlzZSwiJVByb3h5JSI6dHlwZW9mIFByb3h5PiJ1Ij96OlByb3h5LCIlUmFu''@;'; put 'put ''Z2VFcnJvciUiOlJhbmdlRXJyb3IsIiVSZWZlcmVuY2VFcnJvciUiOlJlZmVyZW5jZUVycm9yLCIlUmVmbGVjdCUiOnR5cGVvZiBSZWZsZWN0PiJ1Ij96OlJlZmxlY3QsIiVSZWdFeHAlIjpSZWdFeHAsIiVTZXQlIjp0eXBlb2YgU2V0PiJ1Ij96OlNldCwiJVNldEl0ZXJhdG9yUHJvdG90eXBl''@;'; put 'put ''JSI6dHlwZW9mIFNldDwidSImJlk/WCgobmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgpKTp6LCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP3o6U2hhcmVkQXJyYXlCdWZmZXIsIiVTdHJpbmclIjpTdHJpbmcsIiVTdHJpbmdJdGVyYXRvclByb3Rv''@;'; put 'put ''dHlwZSUiOlk/WCgiIltTeW1ib2wuaXRlcmF0b3JdKCkpOnosIiVTeW1ib2wlIjpZP1N5bWJvbDp6LCIlU3ludGF4RXJyb3IlIjpLLCIlVGhyb3dUeXBlRXJyb3IlIjpCLCIlVHlwZWRBcnJheSUiOnEsIiVUeXBlRXJyb3IlIjprLCIlVWludDhBcnJheSUiOnR5cGVvZiBVaW50OEFycmF5PiJ1''@;'; put 'put ''Ij96OlVpbnQ4QXJyYXksIiVVaW50OENsYW1wZWRBcnJheSUiOnR5cGVvZiBVaW50OENsYW1wZWRBcnJheT4idSI/ejpVaW50OENsYW1wZWRBcnJheSwiJVVpbnQxNkFycmF5JSI6dHlwZW9mIFVpbnQxNkFycmF5PiJ1Ij96OlVpbnQxNkFycmF5LCIlVWludDMyQXJyYXklIjp0eXBlb2YgVWlu''@;'; put 'put ''dDMyQXJyYXk+InUiP3o6VWludDMyQXJyYXksIiVVUklFcnJvciUiOlVSSUVycm9yLCIlV2Vha01hcCUiOnR5cGVvZiBXZWFrTWFwPiJ1Ij96OldlYWtNYXAsIiVXZWFrUmVmJSI6dHlwZW9mIFdlYWtSZWY+InUiP3o6V2Vha1JlZiwiJVdlYWtTZXQlIjp0eXBlb2YgV2Vha1NldD4idSI/ejpX''@;'; put 'put ''ZWFrU2V0fTt0cnl7bnVsbC5lcnJvcn1jYXRjaChTKXt2YXIgdGU9WChYKFMpKTtlZVsiJUVycm9yLnByb3RvdHlwZSUiXT10ZX12YXIgb2U9ZnVuY3Rpb24gUyh2KXt2YXIgcDtpZigiJUFzeW5jRnVuY3Rpb24lIj09PXYpcD1FKCJhc3luYyBmdW5jdGlvbiAoKSB7fSIpO2Vsc2UgaWYoIiVH''@;'; put 'put ''ZW5lcmF0b3JGdW5jdGlvbiUiPT09dilwPUUoImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT12KXA9RSgiYXN5bmMgZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yJSI9PT12KXt2YXIgdz1TKCIlQXN5bmNHZW5l''@;'; put 'put ''cmF0b3JGdW5jdGlvbiUiKTt3JiYocD13LnByb3RvdHlwZSl9ZWxzZSBpZigiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIj09PXYpe3ZhciBKPVMoIiVBc3luY0dlbmVyYXRvciUiKTtKJiYocD1YKEoucHJvdG90eXBlKSl9cmV0dXJuIGVlW3ZdPXAscH0sc2U9eyIlQXJyYXlCdWZmZXJQcm90''@;'; put 'put ''b3R5cGUlIjpbIkFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvdHlwZSUiOlsiQXJyYXkiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG9fZW50cmllcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJlbnRyaWVzIl0sIiVBcnJheVByb3RvX2ZvckVhY2glIjpbIkFycmF5Iiwi''@;'; put 'put ''cHJvdG90eXBlIiwiZm9yRWFjaCJdLCIlQXJyYXlQcm90b19rZXlzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImtleXMiXSwiJUFycmF5UHJvdG9fdmFsdWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsInZhbHVlcyJdLCIlQXN5bmNGdW5jdGlvblByb3RvdHlwZSUiOlsiQXN5bmNGdW5jdGlv''@;'; put 'put ''biIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3IlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVCb29sZWFuUHJv''@;'; put 'put ''dG90eXBlJSI6WyJCb29sZWFuIiwicHJvdG90eXBlIl0sIiVEYXRhVmlld1Byb3RvdHlwZSUiOlsiRGF0YVZpZXciLCJwcm90b3R5cGUiXSwiJURhdGVQcm90b3R5cGUlIjpbIkRhdGUiLCJwcm90b3R5cGUiXSwiJUVycm9yUHJvdG90eXBlJSI6WyJFcnJvciIsInByb3RvdHlwZSJdLCIlRXZh''@;'; put 'put ''bEVycm9yUHJvdG90eXBlJSI6WyJFdmFsRXJyb3IiLCJwcm90b3R5cGUiXSwiJUZsb2F0MzJBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVGbG9hdDY0QXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0NjRBcnJheSIsInByb3RvdHlwZSJdLCIlRnVuY3Rpb25Q''@;'; put 'put ''cm90b3R5cGUlIjpbIkZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3IlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVJbnQ4QXJyYXlQ''@;'; put 'put ''cm90b3R5cGUlIjpbIkludDhBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MTZBcnJheVByb3RvdHlwZSUiOlsiSW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MzJBcnJheVByb3RvdHlwZSUiOlsiSW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlSlNPTlBhcnNlJSI6WyJKU09OIiwicGFy''@;'; put 'put ''c2UiXSwiJUpTT05TdHJpbmdpZnklIjpbIkpTT04iLCJzdHJpbmdpZnkiXSwiJU1hcFByb3RvdHlwZSUiOlsiTWFwIiwicHJvdG90eXBlIl0sIiVOdW1iZXJQcm90b3R5cGUlIjpbIk51bWJlciIsInByb3RvdHlwZSJdLCIlT2JqZWN0UHJvdG90eXBlJSI6WyJPYmplY3QiLCJwcm90b3R5cGUi''@;'; put 'put ''XSwiJU9ialByb3RvX3RvU3RyaW5nJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyJdLCIlT2JqUHJvdG9fdmFsdWVPZiUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidmFsdWVPZiJdLCIlUHJvbWlzZVByb3RvdHlwZSUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSJdLCIlUHJvbWlz''@;'; put 'put ''ZVByb3RvX3RoZW4lIjpbIlByb21pc2UiLCJwcm90b3R5cGUiLCJ0aGVuIl0sIiVQcm9taXNlX2FsbCUiOlsiUHJvbWlzZSIsImFsbCJdLCIlUHJvbWlzZV9yZWplY3QlIjpbIlByb21pc2UiLCJyZWplY3QiXSwiJVByb21pc2VfcmVzb2x2ZSUiOlsiUHJvbWlzZSIsInJlc29sdmUiXSwiJVJh''@;'; put 'put ''bmdlRXJyb3JQcm90b3R5cGUlIjpbIlJhbmdlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSI6WyJSZWZlcmVuY2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVnRXhwUHJvdG90eXBlJSI6WyJSZWdFeHAiLCJwcm90b3R5cGUiXSwiJVNldFByb3RvdHlwZSUi''@;'; put 'put ''OlsiU2V0IiwicHJvdG90eXBlIl0sIiVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiU2hhcmVkQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJVN0cmluZ1Byb3RvdHlwZSUiOlsiU3RyaW5nIiwicHJvdG90eXBlIl0sIiVTeW1ib2xQcm90b3R5cGUlIjpbIlN5bWJvbCIsInByb3Rv''@;'; put 'put ''dHlwZSJdLCIlU3ludGF4RXJyb3JQcm90b3R5cGUlIjpbIlN5bnRheEVycm9yIiwicHJvdG90eXBlIl0sIiVUeXBlZEFycmF5UHJvdG90eXBlJSI6WyJUeXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVUeXBlRXJyb3JQcm90b3R5cGUlIjpbIlR5cGVFcnJvciIsInByb3RvdHlwZSJdLCIlVWlu''@;'; put 'put ''dDhBcnJheVByb3RvdHlwZSUiOlsiVWludDhBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4Q2xhbXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MTZBcnJheVByb3RvdHlwZSUiOlsiVWludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwi''@;'; put 'put ''JVVpbnQzMkFycmF5UHJvdG90eXBlJSI6WyJVaW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlVVJJRXJyb3JQcm90b3R5cGUlIjpbIlVSSUVycm9yIiwicHJvdG90eXBlIl0sIiVXZWFrTWFwUHJvdG90eXBlJSI6WyJXZWFrTWFwIiwicHJvdG90eXBlIl0sIiVXZWFrU2V0UHJvdG90eXBlJSI6''@;'; put 'put ''WyJXZWFrU2V0IiwicHJvdG90eXBlIl19LGhlPVIoODYxMiksdWU9Uig3NjQyKSxjZT1oZS5jYWxsKEZ1bmN0aW9uLmNhbGwsQXJyYXkucHJvdG90eXBlLmNvbmNhdCksRz1oZS5jYWxsKEZ1bmN0aW9uLmFwcGx5LEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLGI9aGUuY2FsbChGdW5jdGlvbi5j''@;'; put 'put ''YWxsLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksRD1oZS5jYWxsKEZ1bmN0aW9uLmNhbGwsU3RyaW5nLnByb3RvdHlwZS5zbGljZSksSD1oZS5jYWxsKEZ1bmN0aW9uLmNhbGwsUmVnRXhwLnByb3RvdHlwZS5leGVjKSxOPS9bXiUuW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyIn''@;'; put 'put ''XSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwlJCkpL2csZz0vXFwoXFwpPy9nLEM9ZnVuY3Rpb24oUyx2KXt2YXIgcCx3PVM7aWYodWUoc2UsdykmJih3PSIlIisocD1zZVt3XSlbMF0rIiUiKSx1ZShlZSx3KSl7dmFyIEo9ZWVbd107aWYo''@;'; put 'put ''Sj09PVUmJihKPW9lKHcpKSx2b2lkIDA9PT1KJiYhdil0aHJvdyBuZXcgaygiaW50cmluc2ljICIrUysiIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlhczpwLG5hbWU6dyx2YWx1ZTpKfX10aHJvdyBuZXcgSygiaW50cmlu''@;'; put 'put ''c2ljICIrUysiIGRvZXMgbm90IGV4aXN0ISIpfTtNLmV4cG9ydHM9ZnVuY3Rpb24oUyx2KXtpZigic3RyaW5nIiE9dHlwZW9mIFN8fDA9PT1TLmxlbmd0aCl0aHJvdyBuZXcgaygiaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjEmJiJib29sZWFuIiE9dHlwZW9mIHYpdGhyb3cgbmV3IGsoJyJhbGxvd01pc3NpbmciIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7aWYobnVsbD09PUgoL14lP1teJV0qJT8kLyxTKSl0aHJvdyBuZXcgSygiYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhl''@;'; put 'put ''IGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZSIpO3ZhciBwPWZ1bmN0aW9uKFllKXt2YXIgSmU9RChZZSwwLDEpLGx0PUQoWWUsLTEpO2lmKCIlIj09PUplJiYiJSIhPT1sdCl0aHJvdyBuZXcgSygiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9z''@;'; put 'put ''aW5nIGAlYCIpO2lmKCIlIj09PWx0JiYiJSIhPT1KZSl0aHJvdyBuZXcgSygiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCIpO3ZhciBQZT1bXTtyZXR1cm4gYihZZSxOLGZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtQZVtQZS5sZW5ndGhdPVRlP2IocWUsZywi''@;'; put 'put ''JDEiKTpBZXx8YmV9KSxQZX0oUyksdz1wLmxlbmd0aD4wP3BbMF06IiIsSj1DKCIlIit3KyIlIix2KSxuZT1KLm5hbWUsZGU9Si52YWx1ZSxmZT0hMSx4ZT1KLmFsaWFzO3hlJiYodz14ZVswXSxHKHAsY2UoWzAsMV0seGUpKSk7Zm9yKHZhciBMZT0xLEZlPSEwO0xlPHAubGVuZ3RoO0xlKz0x''@;'; put 'put ''KXt2YXIgT2U9cFtMZV0sQmU9RChPZSwwLDEpLFdlPUQoT2UsLTEpO2lmKCgnIic9PT1CZXx8IiciPT09QmV8fCJgIj09PUJlfHwnIic9PT1XZXx8IiciPT09V2V8fCJgIj09PVdlKSYmQmUhPT1XZSl0aHJvdyBuZXcgSygicHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1h''@;'; put 'put ''dGNoaW5nIHF1b3RlcyIpO2lmKCJjb25zdHJ1Y3RvciIhPT1PZSYmRmV8fChmZT0hMCksdWUoZWUsbmU9IiUiKyh3Kz0iLiIrT2UpKyIlIikpZGU9ZWVbbmVdO2Vsc2UgaWYobnVsbCE9ZGUpe2lmKCEoT2UgaW4gZGUpKXtpZighdil0aHJvdyBuZXcgaygiYmFzZSBpbnRyaW5zaWMgZm9yICIr''@;'; put 'put ''UysiIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZihqJiZMZSsxPj1wLmxlbmd0aCl7dmFyIEtlPWooZGUsT2UpO2RlPShGZT0hIUtlKSYmImdldCJpbiBLZSYmISgib3JpZ2luYWxWYWx1ZSJpbiBLZS5nZXQpP0tlLmdldDpkZVtPZV19ZWxz''@;'; put 'put ''ZSBGZT11ZShkZSxPZSksZGU9ZGVbT2VdO0ZlJiYhZmUmJihlZVtuZV09ZGUpfX1yZXR1cm4gZGV9fSw2NzcyOihNLE8sUik9Pnt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsocSxlZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxLGVlKX1PLnNldG9wdHM9''@;'; put 'put ''ZnVuY3Rpb24ocSxlZSx0ZSl7aWYodGV8fCh0ZT17fSksdGUubWF0Y2hCYXNlJiYtMT09PWVlLmluZGV4T2YoIi8iKSl7aWYodGUubm9nbG9ic3Rhcil0aHJvdyBuZXcgRXJyb3IoImJhc2UgbWF0Y2hpbmcgcmVxdWlyZXMgZ2xvYnN0YXIiKTtlZT0iKiovIitlZX12YXIgc2U7cS5zaWxlbnQ9''@;'; put 'put ''ISF0ZS5zaWxlbnQscS5wYXR0ZXJuPWVlLHEuc3RyaWN0PSExIT09dGUuc3RyaWN0LHEucmVhbHBhdGg9ISF0ZS5yZWFscGF0aCxxLnJlYWxwYXRoQ2FjaGU9dGUucmVhbHBhdGhDYWNoZXx8T2JqZWN0LmNyZWF0ZShudWxsKSxxLmZvbGxvdz0hIXRlLmZvbGxvdyxxLmRvdD0hIXRlLmRvdCxx''@;'; put 'put ''Lm1hcms9ISF0ZS5tYXJrLHEubm9kaXI9ISF0ZS5ub2RpcixxLm5vZGlyJiYocS5tYXJrPSEwKSxxLnN5bmM9ISF0ZS5zeW5jLHEubm91bmlxdWU9ISF0ZS5ub3VuaXF1ZSxxLm5vbnVsbD0hIXRlLm5vbnVsbCxxLm5vc29ydD0hIXRlLm5vc29ydCxxLm5vY2FzZT0hIXRlLm5vY2FzZSxxLnN0''@;'; put 'put ''YXQ9ISF0ZS5zdGF0LHEubm9wcm9jZXNzPSEhdGUubm9wcm9jZXNzLHEuYWJzb2x1dGU9ISF0ZS5hYnNvbHV0ZSxxLmZzPXRlLmZzfHxJLHEubWF4TGVuZ3RoPXRlLm1heExlbmd0aHx8MS8wLHEuY2FjaGU9dGUuY2FjaGV8fE9iamVjdC5jcmVhdGUobnVsbCkscS5zdGF0Q2FjaGU9dGUuc3Rh''@;'; put 'put ''dENhY2hlfHxPYmplY3QuY3JlYXRlKG51bGwpLHEuc3ltbGlua3M9dGUuc3ltbGlua3N8fE9iamVjdC5jcmVhdGUobnVsbCksKHNlPXEpLmlnbm9yZT10ZS5pZ25vcmV8fFtdLEFycmF5LmlzQXJyYXkoc2UuaWdub3JlKXx8KHNlLmlnbm9yZT1bc2UuaWdub3JlXSksc2UuaWdub3JlLmxlbmd0''@;'; put 'put ''aCYmKHNlLmlnbm9yZT1zZS5pZ25vcmUubWFwKFkpKSxxLmNoYW5nZWRDd2Q9ITE7dmFyIG9lPXouY3dkKCk7Syh0ZSwiY3dkIik/KHEuY3dkPWsucmVzb2x2ZSh0ZS5jd2QpLHEuY2hhbmdlZEN3ZD1xLmN3ZCE9PW9lKTpxLmN3ZD1vZSxxLnJvb3Q9dGUucm9vdHx8ay5yZXNvbHZlKHEuY3dk''@;'; put 'put ''LCIvIikscS5yb290PWsucmVzb2x2ZShxLnJvb3QpLCJ3aW4zMiI9PT16LnBsYXRmb3JtJiYocS5yb290PXEucm9vdC5yZXBsYWNlKC9cXC9nLCIvIikpLHEuY3dkQWJzPWoocS5jd2QpP3EuY3dkOlgocSxxLmN3ZCksIndpbjMyIj09PXoucGxhdGZvcm0mJihxLmN3ZEFicz1xLmN3ZEFicy5y''@;'; put 'put ''ZXBsYWNlKC9cXC9nLCIvIikpLHEubm9tb3VudD0hIXRlLm5vbW91bnQsdGUubm9uZWdhdGU9ITAsdGUubm9jb21tZW50PSEwLHRlLmFsbG93V2luZG93c0VzY2FwZT0hMSxxLm1pbmltYXRjaD1uZXcgVihlZSx0ZSkscS5vcHRpb25zPXEubWluaW1hdGNoLm9wdGlvbnN9LE8ub3duUHJvcD1L''@;'; put 'put ''LE8ubWFrZUFicz1YLE8uZmluaXNoPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9cS5ub3VuaXF1ZSx0ZT1lZT9bXTpPYmplY3QuY3JlYXRlKG51bGwpLG9lPTAsc2U9cS5tYXRjaGVzLmxlbmd0aDtvZTxzZTtvZSsrKXt2YXIgaGU9cS5tYXRjaGVzW29lXTtpZihoZSYmMCE9PU9iamVjdC5rZXlz''@;'; put 'put ''KGhlKS5sZW5ndGgpe3ZhciB1ZT1PYmplY3Qua2V5cyhoZSk7ZWU/dGUucHVzaC5hcHBseSh0ZSx1ZSk6dWUuZm9yRWFjaChmdW5jdGlvbihHKXt0ZVtHXT0hMH0pfWVsc2UgaWYocS5ub251bGwpe3ZhciBjZT1xLm1pbmltYXRjaC5nbG9iU2V0W29lXTtlZT90ZS5wdXNoKGNlKTp0ZVtjZV09''@;'; put 'put ''ITB9fWlmKGVlfHwodGU9T2JqZWN0LmtleXModGUpKSxxLm5vc29ydHx8KHRlPXRlLnNvcnQoQikpLHEubWFyayl7Zm9yKG9lPTA7b2U8dGUubGVuZ3RoO29lKyspdGVbb2VdPXEuX21hcmsodGVbb2VdKTtxLm5vZGlyJiYodGU9dGUuZmlsdGVyKGZ1bmN0aW9uKEcpe3ZhciBiPSEvXC8kLy50''@;'; put 'put ''ZXN0KEcpLEQ9cS5jYWNoZVtHXXx8cS5jYWNoZVtYKHEsRyldO3JldHVybiBiJiZEJiYoYj0iRElSIiE9PUQmJiFBcnJheS5pc0FycmF5KEQpKSxifSkpfXEuaWdub3JlLmxlbmd0aCYmKHRlPXRlLmZpbHRlcihmdW5jdGlvbihHKXtyZXR1cm4hVShxLEcpfSkpLHEuZm91bmQ9dGV9LE8ubWFy''@;'; put 'put ''az1mdW5jdGlvbihxLGVlKXt2YXIgdGU9WChxLGVlKSxvZT1xLmNhY2hlW3RlXSxzZT1lZTtpZihvZSl7dmFyIGhlPSJESVIiPT09b2V8fEFycmF5LmlzQXJyYXkob2UpLHVlPSIvIj09PWVlLnNsaWNlKC0xKTtpZihoZSYmIXVlP3NlKz0iLyI6IWhlJiZ1ZSYmKHNlPXNlLnNsaWNlKDAsLTEp''@;'; put 'put ''KSxzZSE9PWVlKXt2YXIgY2U9WChxLHNlKTtxLnN0YXRDYWNoZVtjZV09cS5zdGF0Q2FjaGVbdGVdLHEuY2FjaGVbY2VdPXEuY2FjaGVbdGVdfX1yZXR1cm4gc2V9LE8uaXNJZ25vcmVkPVUsTy5jaGlsZHJlbklnbm9yZWQ9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuISFxLmlnbm9yZS5sZW5ndGgm''@;'; put 'put ''JnEuaWdub3JlLnNvbWUoZnVuY3Rpb24odGUpe3JldHVybiEoIXRlLmdtYXRjaGVyfHwhdGUuZ21hdGNoZXIubWF0Y2goZWUpKX0pfTt2YXIgST1SKDM3MTApLGs9UigyNTIwKSxFPVIoMTE3MSksaj1SKDQwOTUpLFY9RS5NaW5pbWF0Y2g7ZnVuY3Rpb24gQihxLGVlKXtyZXR1cm4gcS5sb2Nh''@;'; put 'put ''bGVDb21wYXJlKGVlLCJlbiIpfWZ1bmN0aW9uIFkocSl7dmFyIGVlPW51bGw7aWYoIi8qKiI9PT1xLnNsaWNlKC0zKSl7dmFyIHRlPXEucmVwbGFjZSgvKFwvXCpcKikrJC8sIiIpO2VlPW5ldyBWKHRlLHtkb3Q6ITB9KX1yZXR1cm57bWF0Y2hlcjpuZXcgVihxLHtkb3Q6ITB9KSxnbWF0Y2hl''@;'; put 'put ''cjplZX19ZnVuY3Rpb24gWChxLGVlKXt2YXIgdGU9ZWU7cmV0dXJuIHRlPSIvIj09PWVlLmNoYXJBdCgwKT9rLmpvaW4ocS5yb290LGVlKTpqKGVlKXx8IiI9PT1lZT9lZTpxLmNoYW5nZWRDd2Q/ay5yZXNvbHZlKHEuY3dkLGVlKTprLnJlc29sdmUoZWUpLCJ3aW4zMiI9PT16LnBsYXRmb3Jt''@;'; put 'put ''JiYodGU9dGUucmVwbGFjZSgvXFwvZywiLyIpKSx0ZX1mdW5jdGlvbiBVKHEsZWUpe3JldHVybiEhcS5pZ25vcmUubGVuZ3RoJiZxLmlnbm9yZS5zb21lKGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUubWF0Y2hlci5tYXRjaChlZSl8fCEoIXRlLmdtYXRjaGVyfHwhdGUuZ21hdGNoZXIubWF0Y2go''@;'; put 'put ''ZWUpKX0pfX0sMjg4NDooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCk7TS5leHBvcnRzPXVlO3ZhciBJPVIoNzMzNCksaz1SKDExNzEpLEU9Uig1NzE3KSxqPVIoNzE4NykuRXZlbnRFbWl0dGVyLFY9UigyNTIwKSxCPVIoOTI4MiksWT1SKDQwOTUpLFg9Uig0NzUxKSxVPVIoNjc3''@;'; put 'put ''MikscT1VLnNldG9wdHMsZWU9VS5vd25Qcm9wLHRlPVIoNzg0NCksb2U9KFIoOTUzOSksVS5jaGlsZHJlbklnbm9yZWQpLHNlPVUuaXNJZ25vcmVkLGhlPVIoNzc4KTtmdW5jdGlvbiB1ZShiLEQsSCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEQmJihIPUQsRD17fSksRHx8KEQ9e30pLEQuc3lu''@;'; put 'put ''Yyl7aWYoSCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2IiKTtyZXR1cm4gWChiLEQpfXJldHVybiBuZXcgRyhiLEQsSCl9dWUuc3luYz1YO3ZhciBjZT11ZS5HbG9iU3luYz1YLkdsb2JTeW5jO2Z1bmN0aW9uIEcoYixELEgpe2lmKCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBEJiYoSD1ELEQ9bnVsbCksRCYmRC5zeW5jKXtpZihIKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHByb3ZpZGVkIHRvIHN5bmMgZ2xvYiIpO3JldHVybiBuZXcgY2UoYixEKX1pZighKHRoaXMgaW5zdGFuY2VvZiBHKSlyZXR1cm4gbmV3IEcoYixELEgpO3EodGhp''@;'; put 'put ''cyxiLEQpLHRoaXMuX2RpZFJlYWxQYXRoPSExO3ZhciBOPXRoaXMubWluaW1hdGNoLnNldC5sZW5ndGg7dGhpcy5tYXRjaGVzPW5ldyBBcnJheShOKSwiZnVuY3Rpb24iPT10eXBlb2YgSCYmKEg9aGUoSCksdGhpcy5vbigiZXJyb3IiLEgpLHRoaXMub24oImVuZCIsZnVuY3Rpb24ocCl7SChu''@;'; put 'put ''dWxsLHApfSkpO3ZhciBnPXRoaXM7aWYodGhpcy5fcHJvY2Vzc2luZz0wLHRoaXMuX2VtaXRRdWV1ZT1bXSx0aGlzLl9wcm9jZXNzUXVldWU9W10sdGhpcy5wYXVzZWQ9ITEsdGhpcy5ub3Byb2Nlc3MpcmV0dXJuIHRoaXM7aWYoMD09PU4pcmV0dXJuIHYoKTtmb3IodmFyIEM9ITAsUz0wO1M8''@;'; put 'put ''TjtTKyspdGhpcy5fcHJvY2Vzcyh0aGlzLm1pbmltYXRjaC5zZXRbU10sUywhMSx2KTtmdW5jdGlvbiB2KCl7LS1nLl9wcm9jZXNzaW5nLGcuX3Byb2Nlc3Npbmc8PTAmJihDP3oubmV4dFRpY2soZnVuY3Rpb24oKXtnLl9maW5pc2goKX0pOmcuX2ZpbmlzaCgpKX1DPSExfXVlLmdsb2I9dWUs''@;'; put 'put ''dWUuaGFzTWFnaWM9ZnVuY3Rpb24oYixEKXt2YXIgSD1mdW5jdGlvbihDLFMpe2lmKG51bGw9PT1TfHwib2JqZWN0IiE9dHlwZW9mIFMpcmV0dXJuIEM7Zm9yKHZhciB2PU9iamVjdC5rZXlzKFMpLHA9di5sZW5ndGg7cC0tOylDW3ZbcF1dPVNbdltwXV07cmV0dXJuIEN9KHt9LEQpO0gubm9w''@;'; put 'put ''cm9jZXNzPSEwO3ZhciBOPW5ldyBHKGIsSCkubWluaW1hdGNoLnNldDtpZighYilyZXR1cm4hMTtpZihOLmxlbmd0aD4xKXJldHVybiEwO2Zvcih2YXIgZz0wO2c8TlswXS5sZW5ndGg7ZysrKWlmKCJzdHJpbmciIT10eXBlb2YgTlswXVtnXSlyZXR1cm4hMDtyZXR1cm4hMX0sdWUuR2xvYj1H''@;'; put 'put ''LEUoRyxqKSxHLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7aWYoQih0aGlzIGluc3RhbmNlb2YgRyksIXRoaXMuYWJvcnRlZCl7aWYodGhpcy5yZWFscGF0aCYmIXRoaXMuX2RpZFJlYWxwYXRoKXJldHVybiB0aGlzLl9yZWFscGF0aCgpO1UuZmluaXNoKHRoaXMpLHRoaXMuZW1pdCgi''@;'; put 'put ''ZW5kIix0aGlzLmZvdW5kKX19LEcucHJvdG90eXBlLl9yZWFscGF0aD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kaWRSZWFscGF0aCl7dGhpcy5fZGlkUmVhbHBhdGg9ITA7dmFyIGI9dGhpcy5tYXRjaGVzLmxlbmd0aDtpZigwPT09YilyZXR1cm4gdGhpcy5fZmluaXNoKCk7Zm9yKHZhciBEPXRo''@;'; put 'put ''aXMsSD0wO0g8dGhpcy5tYXRjaGVzLmxlbmd0aDtIKyspdGhpcy5fcmVhbHBhdGhTZXQoSCxOKX1mdW5jdGlvbiBOKCl7MD09LS1iJiZELl9maW5pc2goKX19LEcucHJvdG90eXBlLl9yZWFscGF0aFNldD1mdW5jdGlvbihiLEQpe3ZhciBIPXRoaXMubWF0Y2hlc1tiXTtpZighSClyZXR1cm4g''@;'; put 'put ''RCgpO3ZhciBOPU9iamVjdC5rZXlzKEgpLGc9dGhpcyxDPU4ubGVuZ3RoO2lmKDA9PT1DKXJldHVybiBEKCk7dmFyIFM9dGhpcy5tYXRjaGVzW2JdPU9iamVjdC5jcmVhdGUobnVsbCk7Ti5mb3JFYWNoKGZ1bmN0aW9uKHYscCl7dj1nLl9tYWtlQWJzKHYpLEkucmVhbHBhdGgodixnLnJlYWxw''@;'; put 'put ''YXRoQ2FjaGUsZnVuY3Rpb24odyxKKXt3PyJzdGF0Ij09PXcuc3lzY2FsbD9TW3ZdPSEwOmcuZW1pdCgiZXJyb3IiLHcpOlNbSl09ITAsMD09LS1DJiYoZy5tYXRjaGVzW2JdPVMsRCgpKX0pfSl9LEcucHJvdG90eXBlLl9tYXJrPWZ1bmN0aW9uKGIpe3JldHVybiBVLm1hcmsodGhpcyxiKX0s''@;'; put 'put ''Ry5wcm90b3R5cGUuX21ha2VBYnM9ZnVuY3Rpb24oYil7cmV0dXJuIFUubWFrZUFicyh0aGlzLGIpfSxHLnByb3RvdHlwZS5hYm9ydD1mdW5jdGlvbigpe3RoaXMuYWJvcnRlZD0hMCx0aGlzLmVtaXQoImFib3J0Iil9LEcucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZWR8''@;'; put 'put ''fCh0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXQoInBhdXNlIikpfSxHLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtpZih0aGlzLnBhdXNlZCl7aWYodGhpcy5lbWl0KCJyZXN1bWUiKSx0aGlzLnBhdXNlZD0hMSx0aGlzLl9lbWl0UXVldWUubGVuZ3RoKXt2YXIgYj10aGlzLl9lbWl0UXVl''@;'; put 'put ''dWUuc2xpY2UoMCk7dGhpcy5fZW1pdFF1ZXVlLmxlbmd0aD0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgSD1iW0RdO3RoaXMuX2VtaXRNYXRjaChIWzBdLEhbMV0pfX1pZih0aGlzLl9wcm9jZXNzUXVldWUubGVuZ3RoKXt2YXIgTj10aGlzLl9wcm9jZXNzUXVldWUuc2xpY2Uo''@;'; put 'put ''MCk7Zm9yKHRoaXMuX3Byb2Nlc3NRdWV1ZS5sZW5ndGg9MCxEPTA7RDxOLmxlbmd0aDtEKyspe3ZhciBnPU5bRF07dGhpcy5fcHJvY2Vzc2luZy0tLHRoaXMuX3Byb2Nlc3MoZ1swXSxnWzFdLGdbMl0sZ1szXSl9fX19LEcucHJvdG90eXBlLl9wcm9jZXNzPWZ1bmN0aW9uKGIsRCxILE4pe2lm''@;'; put 'put ''KEIodGhpcyBpbnN0YW5jZW9mIEcpLEIoImZ1bmN0aW9uIj09dHlwZW9mIE4pLCF0aGlzLmFib3J0ZWQpaWYodGhpcy5fcHJvY2Vzc2luZysrLHRoaXMucGF1c2VkKXRoaXMuX3Byb2Nlc3NRdWV1ZS5wdXNoKFtiLEQsSCxOXSk7ZWxzZXtmb3IodmFyIGcsQz0wOyJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''YltDXTspQysrO3N3aXRjaChDKXtjYXNlIGIubGVuZ3RoOnJldHVybiB2b2lkIHRoaXMuX3Byb2Nlc3NTaW1wbGUoYi5qb2luKCIvIiksRCxOKTtjYXNlIDA6Zz1udWxsO2JyZWFrO2RlZmF1bHQ6Zz1iLnNsaWNlKDAsQykuam9pbigiLyIpfXZhciBTLHY9Yi5zbGljZShDKTtudWxsPT09Zz9T''@;'; put 'put ''PSIuIjooKFkoZyl8fFkoYi5tYXAoZnVuY3Rpb24odyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB3P3c6IlsqXSJ9KS5qb2luKCIvIikpKSYmKGcmJlkoZyl8fChnPSIvIitnKSksUz1nKTt2YXIgcD10aGlzLl9tYWtlQWJzKFMpO2lmKG9lKHRoaXMsUykpcmV0dXJuIE4oKTt2WzBdPT09ay5H''@;'; put 'put ''TE9CU1RBUj90aGlzLl9wcm9jZXNzR2xvYlN0YXIoZyxTLHAsdixELEgsTik6dGhpcy5fcHJvY2Vzc1JlYWRkaXIoZyxTLHAsdixELEgsTil9fSxHLnByb3RvdHlwZS5fcHJvY2Vzc1JlYWRkaXI9ZnVuY3Rpb24oYixELEgsTixnLEMsUyl7dmFyIHY9dGhpczt0aGlzLl9yZWFkZGlyKEgsQyxm''@;'; put 'put ''dW5jdGlvbihwLHcpe3JldHVybiB2Ll9wcm9jZXNzUmVhZGRpcjIoYixELEgsTixnLEMsdyxTKX0pfSxHLnByb3RvdHlwZS5fcHJvY2Vzc1JlYWRkaXIyPWZ1bmN0aW9uKGIsRCxILE4sZyxDLFMsdil7aWYoIVMpcmV0dXJuIHYoKTtmb3IodmFyIHA9TlswXSx3PSEhdGhpcy5taW5pbWF0Y2gu''@;'; put 'put ''bmVnYXRlLG5lPXRoaXMuZG90fHwiLiI9PT1wLl9nbG9iLmNoYXJBdCgwKSxkZT1bXSxmZT0wO2ZlPFMubGVuZ3RoO2ZlKyspKCIuIiE9PShMZT1TW2ZlXSkuY2hhckF0KDApfHxuZSkmJih3JiYhYj8hTGUubWF0Y2gocCk6TGUubWF0Y2gocCkpJiZkZS5wdXNoKExlKTt2YXIgeGU9ZGUubGVu''@;'; put 'put ''Z3RoO2lmKDA9PT14ZSlyZXR1cm4gdigpO2lmKDE9PT1OLmxlbmd0aCYmIXRoaXMubWFyayYmIXRoaXMuc3RhdCl7Zm9yKHRoaXMubWF0Y2hlc1tnXXx8KHRoaXMubWF0Y2hlc1tnXT1PYmplY3QuY3JlYXRlKG51bGwpKSxmZT0wO2ZlPHhlO2ZlKyspe3ZhciBMZT1kZVtmZV07YiYmKExlPSIv''@;'; put 'put ''IiE9PWI/YisiLyIrTGU6YitMZSksIi8iIT09TGUuY2hhckF0KDApfHx0aGlzLm5vbW91bnR8fChMZT1WLmpvaW4odGhpcy5yb290LExlKSksdGhpcy5fZW1pdE1hdGNoKGcsTGUpfXJldHVybiB2KCl9Zm9yKE4uc2hpZnQoKSxmZT0wO2ZlPHhlO2ZlKyspTGU9ZGVbZmVdLGImJihMZT0iLyIh''@;'; put 'put ''PT1iP2IrIi8iK0xlOmIrTGUpLHRoaXMuX3Byb2Nlc3MoW0xlXS5jb25jYXQoTiksZyxDLHYpO3YoKX0sRy5wcm90b3R5cGUuX2VtaXRNYXRjaD1mdW5jdGlvbihiLEQpe2lmKCF0aGlzLmFib3J0ZWQmJiFzZSh0aGlzLEQpKWlmKHRoaXMucGF1c2VkKXRoaXMuX2VtaXRRdWV1ZS5wdXNoKFti''@;'; put 'put ''LERdKTtlbHNle3ZhciBIPVkoRCk/RDp0aGlzLl9tYWtlQWJzKEQpO2lmKHRoaXMubWFyayYmKEQ9dGhpcy5fbWFyayhEKSksdGhpcy5hYnNvbHV0ZSYmKEQ9SCksIXRoaXMubWF0Y2hlc1tiXVtEXSl7aWYodGhpcy5ub2Rpcil7dmFyIE49dGhpcy5jYWNoZVtIXTtpZigiRElSIj09PU58fEFy''@;'; put 'put ''cmF5LmlzQXJyYXkoTikpcmV0dXJufXRoaXMubWF0Y2hlc1tiXVtEXT0hMDt2YXIgZz10aGlzLnN0YXRDYWNoZVtIXTtnJiZ0aGlzLmVtaXQoInN0YXQiLEQsZyksdGhpcy5lbWl0KCJtYXRjaCIsRCl9fX0sRy5wcm90b3R5cGUuX3JlYWRkaXJJbkdsb2JTdGFyPWZ1bmN0aW9uKGIsRCl7aWYo''@;'; put 'put ''IXRoaXMuYWJvcnRlZCl7aWYodGhpcy5mb2xsb3cpcmV0dXJuIHRoaXMuX3JlYWRkaXIoYiwhMSxEKTt2YXIgSD10aGlzLE49dGUoImxzdGF0XDAiK2IsZnVuY3Rpb24oZyxDKXtpZihnJiYiRU5PRU5UIj09PWcuY29kZSlyZXR1cm4gRCgpO3ZhciBTPUMmJkMuaXNTeW1ib2xpY0xpbmsoKTtI''@;'; put 'put ''LnN5bWxpbmtzW2JdPVMsU3x8IUN8fEMuaXNEaXJlY3RvcnkoKT9ILl9yZWFkZGlyKGIsITEsRCk6KEguY2FjaGVbYl09IkZJTEUiLEQoKSl9KTtOJiZILmZzLmxzdGF0KGIsTil9fSxHLnByb3RvdHlwZS5fcmVhZGRpcj1mdW5jdGlvbihiLEQsSCl7aWYoIXRoaXMuYWJvcnRlZCYmKEg9dGUo''@;'; put 'put ''InJlYWRkaXJcMCIrYisiXDAiK0QsSCkpKXtpZihEJiYhZWUodGhpcy5zeW1saW5rcyxiKSlyZXR1cm4gdGhpcy5fcmVhZGRpckluR2xvYlN0YXIoYixIKTtpZihlZSh0aGlzLmNhY2hlLGIpKXt2YXIgTj10aGlzLmNhY2hlW2JdO2lmKCFOfHwiRklMRSI9PT1OKXJldHVybiBIKCk7aWYoQXJy''@;'; put 'put ''YXkuaXNBcnJheShOKSlyZXR1cm4gSChudWxsLE4pfXRoaXMuZnMucmVhZGRpcihiLChnPXRoaXMsQz1iLFM9SCxmdW5jdGlvbih2LHApe3Y/Zy5fcmVhZGRpckVycm9yKEMsdixTKTpnLl9yZWFkZGlyRW50cmllcyhDLHAsUyl9KSl9dmFyIGcsQyxTfSxHLnByb3RvdHlwZS5fcmVhZGRpckVu''@;'; put 'put ''dHJpZXM9ZnVuY3Rpb24oYixELEgpe2lmKCF0aGlzLmFib3J0ZWQpe2lmKCF0aGlzLm1hcmsmJiF0aGlzLnN0YXQpZm9yKHZhciBOPTA7TjxELmxlbmd0aDtOKyspe3ZhciBnPURbTl07dGhpcy5jYWNoZVtnPSIvIj09PWI/YitnOmIrIi8iK2ddPSEwfXJldHVybiB0aGlzLmNhY2hlW2JdPUQs''@;'; put 'put ''SChudWxsLEQpfX0sRy5wcm90b3R5cGUuX3JlYWRkaXJFcnJvcj1mdW5jdGlvbihiLEQsSCl7aWYoIXRoaXMuYWJvcnRlZCl7c3dpdGNoKEQuY29kZSl7Y2FzZSJFTk9UU1VQIjpjYXNlIkVOT1RESVIiOnZhciBOPXRoaXMuX21ha2VBYnMoYik7aWYodGhpcy5jYWNoZVtOXT0iRklMRSIsTj09''@;'; put 'put ''PXRoaXMuY3dkQWJzKXt2YXIgZz1uZXcgRXJyb3IoRC5jb2RlKyIgaW52YWxpZCBjd2QgIit0aGlzLmN3ZCk7Zy5wYXRoPXRoaXMuY3dkLGcuY29kZT1ELmNvZGUsdGhpcy5lbWl0KCJlcnJvciIsZyksdGhpcy5hYm9ydCgpfWJyZWFrO2Nhc2UiRU5PRU5UIjpjYXNlIkVMT09QIjpjYXNlIkVO''@;'; put 'put ''QU1FVE9PTE9ORyI6Y2FzZSJVTktOT1dOIjp0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMoYildPSExO2JyZWFrO2RlZmF1bHQ6dGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKGIpXT0hMSx0aGlzLnN0cmljdCYmKHRoaXMuZW1pdCgiZXJyb3IiLEQpLHRoaXMuYWJvcnQoKSksdGhpcy5zaWxlbnR8''@;'; put 'put ''fEsuZXJyb3IoImdsb2IgZXJyb3IiLEQpfXJldHVybiBIKCl9fSxHLnByb3RvdHlwZS5fcHJvY2Vzc0dsb2JTdGFyPWZ1bmN0aW9uKGIsRCxILE4sZyxDLFMpe3ZhciB2PXRoaXM7dGhpcy5fcmVhZGRpcihILEMsZnVuY3Rpb24ocCx3KXt2Ll9wcm9jZXNzR2xvYlN0YXIyKGIsRCxILE4sZyxD''@;'; put 'put ''LHcsUyl9KX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NHbG9iU3RhcjI9ZnVuY3Rpb24oYixELEgsTixnLEMsUyx2KXtpZighUylyZXR1cm4gdigpO3ZhciBwPU4uc2xpY2UoMSksdz1iP1tiXTpbXSxKPXcuY29uY2F0KHApO3RoaXMuX3Byb2Nlc3MoSixnLCExLHYpO3ZhciBkZT1TLmxlbmd0aDtp''@;'; put 'put ''Zih0aGlzLnN5bWxpbmtzW0hdJiZDKXJldHVybiB2KCk7Zm9yKHZhciBmZT0wO2ZlPGRlO2ZlKyspaWYoIi4iIT09U1tmZV0uY2hhckF0KDApfHx0aGlzLmRvdCl7dmFyIHhlPXcuY29uY2F0KFNbZmVdLHApO3RoaXMuX3Byb2Nlc3MoeGUsZywhMCx2KTt2YXIgTGU9dy5jb25jYXQoU1tmZV0s''@;'; put 'put ''Tik7dGhpcy5fcHJvY2VzcyhMZSxnLCEwLHYpfXYoKX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NTaW1wbGU9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXM7dGhpcy5fc3RhdChiLGZ1bmN0aW9uKGcsQyl7Ti5fcHJvY2Vzc1NpbXBsZTIoYixELGcsQyxIKX0pfSxHLnByb3RvdHlwZS5fcHJvY2Vz''@;'; put 'put ''c1NpbXBsZTI9ZnVuY3Rpb24oYixELEgsTixnKXtpZih0aGlzLm1hdGNoZXNbRF18fCh0aGlzLm1hdGNoZXNbRF09T2JqZWN0LmNyZWF0ZShudWxsKSksIU4pcmV0dXJuIGcoKTtpZihiJiZZKGIpJiYhdGhpcy5ub21vdW50KXt2YXIgQz0vW1wvXFxdJC8udGVzdChiKTsiLyI9PT1iLmNoYXJB''@;'; put 'put ''dCgwKT9iPVYuam9pbih0aGlzLnJvb3QsYik6KGI9Vi5yZXNvbHZlKHRoaXMucm9vdCxiKSxDJiYoYis9Ii8iKSl9IndpbjMyIj09PXoucGxhdGZvcm0mJihiPWIucmVwbGFjZSgvXFwvZywiLyIpKSx0aGlzLl9lbWl0TWF0Y2goRCxiKSxnKCl9LEcucHJvdG90eXBlLl9zdGF0PWZ1bmN0aW9u''@;'; put 'put ''KGIsRCl7dmFyIEg9dGhpcy5fbWFrZUFicyhiKSxOPSIvIj09PWIuc2xpY2UoLTEpO2lmKGIubGVuZ3RoPnRoaXMubWF4TGVuZ3RoKXJldHVybiBEKCk7aWYoIXRoaXMuc3RhdCYmZWUodGhpcy5jYWNoZSxIKSl7dmFyIGc9dGhpcy5jYWNoZVtIXTtpZihBcnJheS5pc0FycmF5KGcpJiYoZz0i''@;'; put 'put ''RElSIiksIU58fCJESVIiPT09ZylyZXR1cm4gRChudWxsLGcpO2lmKE4mJiJGSUxFIj09PWcpcmV0dXJuIEQoKX12YXIgQz10aGlzLnN0YXRDYWNoZVtIXTtpZih2b2lkIDAhPT1DKXtpZighMT09PUMpcmV0dXJuIEQobnVsbCxDKTt2YXIgUz1DLmlzRGlyZWN0b3J5KCk/IkRJUiI6IkZJTEUi''@;'; put 'put ''O3JldHVybiBOJiYiRklMRSI9PT1TP0QoKTpEKG51bGwsUyxDKX12YXIgdj10aGlzLHA9dGUoInN0YXRcMCIrSCxmdW5jdGlvbih3LEope2lmKEomJkouaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gdi5mcy5zdGF0KEgsZnVuY3Rpb24obmUsZGUpe25lP3YuX3N0YXQyKGIsSCxudWxsLEosRCk6''@;'; put 'put ''di5fc3RhdDIoYixILG5lLGRlLEQpfSk7di5fc3RhdDIoYixILHcsSixEKX0pO3AmJnYuZnMubHN0YXQoSCxwKX0sRy5wcm90b3R5cGUuX3N0YXQyPWZ1bmN0aW9uKGIsRCxILE4sZyl7aWYoSCYmKCJFTk9FTlQiPT09SC5jb2RlfHwiRU5PVERJUiI9PT1ILmNvZGUpKXJldHVybiB0aGlzLnN0''@;'; put 'put ''YXRDYWNoZVtEXT0hMSxnKCk7dmFyIEM9Ii8iPT09Yi5zbGljZSgtMSk7aWYodGhpcy5zdGF0Q2FjaGVbRF09TiwiLyI9PT1ELnNsaWNlKC0xKSYmTiYmIU4uaXNEaXJlY3RvcnkoKSlyZXR1cm4gZyhudWxsLCExLE4pO3ZhciBTPSEwO3JldHVybiBOJiYoUz1OLmlzRGlyZWN0b3J5KCk/IkRJ''@;'; put 'put ''UiI6IkZJTEUiKSx0aGlzLmNhY2hlW0RdPXRoaXMuY2FjaGVbRF18fFMsQyYmIkZJTEUiPT09Uz9nKCk6ZyhudWxsLFMsTil9fSw0NzUxOihNLE8sUik9Pnt2YXIgej1SKDUxMDgpLEs9Uig0MTU1KTtNLmV4cG9ydHM9ZWUsZWUuR2xvYlN5bmM9dGU7dmFyIEk9Uig3MzM0KSxrPVIoMTE3MSks''@;'; put 'put ''RT0oUigyODg0KSxSKDk1MzkpLFIoMjUyMCkpLGo9Uig5MjgyKSxWPVIoNDA5NSksQj1SKDY3NzIpLFk9Qi5zZXRvcHRzLFg9Qi5vd25Qcm9wLFU9Qi5jaGlsZHJlbklnbm9yZWQscT1CLmlzSWdub3JlZDtmdW5jdGlvbiBlZShvZSxzZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHNlfHwzPT09''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2JcblNlZTogaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzE2NyIpO3JldHVybiBuZXcgdGUob2Usc2UpLmZvdW5kfWZ1bmN0aW9uIHRlKG9l''@;'; put 'put ''LHNlKXtpZighb2UpdGhyb3cgbmV3IEVycm9yKCJtdXN0IHByb3ZpZGUgcGF0dGVybiIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzZXx8Mz09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgcHJvdmlkZWQgdG8gc3luYyBnbG9iXG5TZWU6IGh0dHBzOi8v''@;'; put 'put ''Z2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1nbG9iL2lzc3Vlcy8xNjciKTtpZighKHRoaXMgaW5zdGFuY2VvZiB0ZSkpcmV0dXJuIG5ldyB0ZShvZSxzZSk7aWYoWSh0aGlzLG9lLHNlKSx0aGlzLm5vcHJvY2VzcylyZXR1cm4gdGhpczt2YXIgaGU9dGhpcy5taW5pbWF0Y2guc2V0Lmxlbmd0aDt0''@;'; put 'put ''aGlzLm1hdGNoZXM9bmV3IEFycmF5KGhlKTtmb3IodmFyIHVlPTA7dWU8aGU7dWUrKyl0aGlzLl9wcm9jZXNzKHRoaXMubWluaW1hdGNoLnNldFt1ZV0sdWUsITEpO3RoaXMuX2ZpbmlzaCgpfXRlLnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7aWYoai5vayh0aGlzIGluc3RhbmNlb2Yg''@;'; put 'put ''dGUpLHRoaXMucmVhbHBhdGgpe3ZhciBvZT10aGlzO3RoaXMubWF0Y2hlcy5mb3JFYWNoKGZ1bmN0aW9uKHNlLGhlKXt2YXIgdWU9b2UubWF0Y2hlc1toZV09T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIGNlIGluIHNlKXRyeXtjZT1vZS5fbWFrZUFicyhjZSksdWVbSS5yZWFscGF0aFN5''@;'; put 'put ''bmMoY2Usb2UucmVhbHBhdGhDYWNoZSldPSEwfWNhdGNoKEcpe2lmKCJzdGF0IiE9PUcuc3lzY2FsbCl0aHJvdyBHO3VlW29lLl9tYWtlQWJzKGNlKV09ITB9fSl9Qi5maW5pc2godGhpcyl9LHRlLnByb3RvdHlwZS5fcHJvY2Vzcz1mdW5jdGlvbihvZSxzZSxoZSl7ai5vayh0aGlzIGluc3Rh''@;'; put 'put ''bmNlb2YgdGUpO2Zvcih2YXIgdWUsY2U9MDsic3RyaW5nIj09dHlwZW9mIG9lW2NlXTspY2UrKztzd2l0Y2goY2Upe2Nhc2Ugb2UubGVuZ3RoOnJldHVybiB2b2lkIHRoaXMuX3Byb2Nlc3NTaW1wbGUob2Uuam9pbigiLyIpLHNlKTtjYXNlIDA6dWU9bnVsbDticmVhaztkZWZhdWx0OnVlPW9l''@;'; put 'put ''LnNsaWNlKDAsY2UpLmpvaW4oIi8iKX12YXIgRyxiPW9lLnNsaWNlKGNlKTtudWxsPT09dWU/Rz0iLiI6KChWKHVlKXx8VihvZS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBIP0g6IlsqXSJ9KS5qb2luKCIvIikpKSYmKHVlJiZWKHVlKXx8KHVlPSIvIit1ZSkpLEc9''@;'; put 'put ''dWUpO3ZhciBEPXRoaXMuX21ha2VBYnMoRyk7VSh0aGlzLEcpfHwoYlswXT09PWsuR0xPQlNUQVI/dGhpcy5fcHJvY2Vzc0dsb2JTdGFyKHVlLEcsRCxiLHNlLGhlKTp0aGlzLl9wcm9jZXNzUmVhZGRpcih1ZSxHLEQsYixzZSxoZSkpfSx0ZS5wcm90b3R5cGUuX3Byb2Nlc3NSZWFkZGlyPWZ1''@;'; put 'put ''bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcpe3ZhciBiPXRoaXMuX3JlYWRkaXIoaGUsRyk7aWYoYil7Zm9yKHZhciBEPXVlWzBdLEg9ISF0aGlzLm1pbmltYXRjaC5uZWdhdGUsZz10aGlzLmRvdHx8Ii4iPT09RC5fZ2xvYi5jaGFyQXQoMCksQz1bXSxTPTA7UzxiLmxlbmd0aDtTKyspKCIuIiE9''@;'; put 'put ''PSh3PWJbU10pLmNoYXJBdCgwKXx8ZykmJihIJiYhb2U/IXcubWF0Y2goRCk6dy5tYXRjaChEKSkmJkMucHVzaCh3KTt2YXIgdj1DLmxlbmd0aDtpZigwIT09dilpZigxIT09dWUubGVuZ3RofHx0aGlzLm1hcmt8fHRoaXMuc3RhdClmb3IodWUuc2hpZnQoKSxTPTA7Uzx2O1MrKyl3PUNbU10s''@;'; put 'put ''dGhpcy5fcHJvY2Vzcygob2U/W29lLHddOlt3XSkuY29uY2F0KHVlKSxjZSxHKTtlbHNlIGZvcih0aGlzLm1hdGNoZXNbY2VdfHwodGhpcy5tYXRjaGVzW2NlXT1PYmplY3QuY3JlYXRlKG51bGwpKSxTPTA7Uzx2O1MrKyl7dmFyIHc9Q1tTXTtvZSYmKHc9Ii8iIT09b2Uuc2xpY2UoLTEpP29l''@;'; put 'put ''KyIvIit3Om9lK3cpLCIvIiE9PXcuY2hhckF0KDApfHx0aGlzLm5vbW91bnR8fCh3PUUuam9pbih0aGlzLnJvb3QsdykpLHRoaXMuX2VtaXRNYXRjaChjZSx3KX19fSx0ZS5wcm90b3R5cGUuX2VtaXRNYXRjaD1mdW5jdGlvbihvZSxzZSl7aWYoIXEodGhpcyxzZSkpe3ZhciBoZT10aGlzLl9t''@;'; put 'put ''YWtlQWJzKHNlKTtpZih0aGlzLm1hcmsmJihzZT10aGlzLl9tYXJrKHNlKSksdGhpcy5hYnNvbHV0ZSYmKHNlPWhlKSwhdGhpcy5tYXRjaGVzW29lXVtzZV0pe2lmKHRoaXMubm9kaXIpe3ZhciB1ZT10aGlzLmNhY2hlW2hlXTtpZigiRElSIj09PXVlfHxBcnJheS5pc0FycmF5KHVlKSlyZXR1''@;'; put 'put ''cm59dGhpcy5tYXRjaGVzW29lXVtzZV09ITAsdGhpcy5zdGF0JiZ0aGlzLl9zdGF0KHNlKX19fSx0ZS5wcm90b3R5cGUuX3JlYWRkaXJJbkdsb2JTdGFyPWZ1bmN0aW9uKG9lKXtpZih0aGlzLmZvbGxvdylyZXR1cm4gdGhpcy5fcmVhZGRpcihvZSwhMSk7dmFyIHNlLGhlO3RyeXtoZT10aGlz''@;'; put 'put ''LmZzLmxzdGF0U3luYyhvZSl9Y2F0Y2goY2Upe2lmKCJFTk9FTlQiPT09Y2UuY29kZSlyZXR1cm4gbnVsbH12YXIgdWU9aGUmJmhlLmlzU3ltYm9saWNMaW5rKCk7cmV0dXJuIHRoaXMuc3ltbGlua3Nbb2VdPXVlLHVlfHwhaGV8fGhlLmlzRGlyZWN0b3J5KCk/c2U9dGhpcy5fcmVhZGRpcihv''@;'; put 'put ''ZSwhMSk6dGhpcy5jYWNoZVtvZV09IkZJTEUiLHNlfSx0ZS5wcm90b3R5cGUuX3JlYWRkaXI9ZnVuY3Rpb24ob2Usc2Upe2lmKHNlJiYhWCh0aGlzLnN5bWxpbmtzLG9lKSlyZXR1cm4gdGhpcy5fcmVhZGRpckluR2xvYlN0YXIob2UpO2lmKFgodGhpcy5jYWNoZSxvZSkpe3ZhciBoZT10aGlz''@;'; put 'put ''LmNhY2hlW29lXTtpZighaGV8fCJGSUxFIj09PWhlKXJldHVybiBudWxsO2lmKEFycmF5LmlzQXJyYXkoaGUpKXJldHVybiBoZX10cnl7cmV0dXJuIHRoaXMuX3JlYWRkaXJFbnRyaWVzKG9lLHRoaXMuZnMucmVhZGRpclN5bmMob2UpKX1jYXRjaCh1ZSl7cmV0dXJuIHRoaXMuX3JlYWRkaXJF''@;'; put 'put ''cnJvcihvZSx1ZSksbnVsbH19LHRlLnByb3RvdHlwZS5fcmVhZGRpckVudHJpZXM9ZnVuY3Rpb24ob2Usc2Upe2lmKCF0aGlzLm1hcmsmJiF0aGlzLnN0YXQpZm9yKHZhciBoZT0wO2hlPHNlLmxlbmd0aDtoZSsrKXt2YXIgdWU9c2VbaGVdO3RoaXMuY2FjaGVbdWU9Ii8iPT09b2U/b2UrdWU6''@;'; put 'put ''b2UrIi8iK3VlXT0hMH1yZXR1cm4gdGhpcy5jYWNoZVtvZV09c2Usc2V9LHRlLnByb3RvdHlwZS5fcmVhZGRpckVycm9yPWZ1bmN0aW9uKG9lLHNlKXtzd2l0Y2goc2UuY29kZSl7Y2FzZSJFTk9UU1VQIjpjYXNlIkVOT1RESVIiOnZhciBoZT10aGlzLl9tYWtlQWJzKG9lKTtpZih0aGlzLmNh''@;'; put 'put ''Y2hlW2hlXT0iRklMRSIsaGU9PT10aGlzLmN3ZEFicyl7dmFyIHVlPW5ldyBFcnJvcihzZS5jb2RlKyIgaW52YWxpZCBjd2QgIit0aGlzLmN3ZCk7dGhyb3cgdWUucGF0aD10aGlzLmN3ZCx1ZS5jb2RlPXNlLmNvZGUsdWV9YnJlYWs7Y2FzZSJFTk9FTlQiOmNhc2UiRUxPT1AiOmNhc2UiRU5B''@;'; put 'put ''TUVUT09MT05HIjpjYXNlIlVOS05PV04iOnRoaXMuY2FjaGVbdGhpcy5fbWFrZUFicyhvZSldPSExO2JyZWFrO2RlZmF1bHQ6aWYodGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKG9lKV09ITEsdGhpcy5zdHJpY3QpdGhyb3cgc2U7dGhpcy5zaWxlbnR8fHouZXJyb3IoImdsb2IgZXJyb3IiLHNl''@;'; put 'put ''KX19LHRlLnByb3RvdHlwZS5fcHJvY2Vzc0dsb2JTdGFyPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcpe3ZhciBiPXRoaXMuX3JlYWRkaXIoaGUsRyk7aWYoYil7dmFyIEQ9dWUuc2xpY2UoMSksSD1vZT9bb2VdOltdLE49SC5jb25jYXQoRCk7dGhpcy5fcHJvY2VzcyhOLGNlLCExKTt2YXIg''@;'; put 'put ''Zz1iLmxlbmd0aDtpZighdGhpcy5zeW1saW5rc1toZV18fCFHKWZvcih2YXIgQz0wO0M8ZztDKyspaWYoIi4iIT09YltDXS5jaGFyQXQoMCl8fHRoaXMuZG90KXt2YXIgUz1ILmNvbmNhdChiW0NdLEQpO3RoaXMuX3Byb2Nlc3MoUyxjZSwhMCk7dmFyIHY9SC5jb25jYXQoYltDXSx1ZSk7dGhp''@;'; put 'put ''cy5fcHJvY2Vzcyh2LGNlLCEwKX19fSx0ZS5wcm90b3R5cGUuX3Byb2Nlc3NTaW1wbGU9ZnVuY3Rpb24ob2Usc2Upe3ZhciBoZT10aGlzLl9zdGF0KG9lKTtpZih0aGlzLm1hdGNoZXNbc2VdfHwodGhpcy5tYXRjaGVzW3NlXT1PYmplY3QuY3JlYXRlKG51bGwpKSxoZSl7aWYob2UmJlYob2Up''@;'; put 'put ''JiYhdGhpcy5ub21vdW50KXt2YXIgdWU9L1tcL1xcXSQvLnRlc3Qob2UpOyIvIj09PW9lLmNoYXJBdCgwKT9vZT1FLmpvaW4odGhpcy5yb290LG9lKToob2U9RS5yZXNvbHZlKHRoaXMucm9vdCxvZSksdWUmJihvZSs9Ii8iKSl9IndpbjMyIj09PUsucGxhdGZvcm0mJihvZT1vZS5yZXBsYWNl''@;'; put 'put ''KC9cXC9nLCIvIikpLHRoaXMuX2VtaXRNYXRjaChzZSxvZSl9fSx0ZS5wcm90b3R5cGUuX3N0YXQ9ZnVuY3Rpb24ob2Upe3ZhciBzZT10aGlzLl9tYWtlQWJzKG9lKSxoZT0iLyI9PT1vZS5zbGljZSgtMSk7aWYob2UubGVuZ3RoPnRoaXMubWF4TGVuZ3RoKXJldHVybiExO2lmKCF0aGlzLnN0''@;'; put 'put ''YXQmJlgodGhpcy5jYWNoZSxzZSkpe3ZhciB1ZT10aGlzLmNhY2hlW3NlXTtpZihBcnJheS5pc0FycmF5KHVlKSYmKHVlPSJESVIiKSwhaGV8fCJESVIiPT09dWUpcmV0dXJuIHVlO2lmKGhlJiYiRklMRSI9PT11ZSlyZXR1cm4hMX12YXIgY2U9dGhpcy5zdGF0Q2FjaGVbc2VdO2lmKCFjZSl7''@;'; put 'put ''dmFyIEc7dHJ5e0c9dGhpcy5mcy5sc3RhdFN5bmMoc2UpfWNhdGNoKGIpe2lmKGImJigiRU5PRU5UIj09PWIuY29kZXx8IkVOT1RESVIiPT09Yi5jb2RlKSlyZXR1cm4gdGhpcy5zdGF0Q2FjaGVbc2VdPSExLCExfWlmKEcmJkcuaXNTeW1ib2xpY0xpbmsoKSl0cnl7Y2U9dGhpcy5mcy5zdGF0''@;'; put 'put ''U3luYyhzZSl9Y2F0Y2h7Y2U9R31lbHNlIGNlPUd9cmV0dXJuIHRoaXMuc3RhdENhY2hlW3NlXT1jZSx1ZT0hMCxjZSYmKHVlPWNlLmlzRGlyZWN0b3J5KCk/IkRJUiI6IkZJTEUiKSx0aGlzLmNhY2hlW3NlXT10aGlzLmNhY2hlW3NlXXx8dWUsKCFoZXx8IkZJTEUiIT09dWUpJiZ1ZX0sdGUu''@;'; put 'put ''cHJvdG90eXBlLl9tYXJrPWZ1bmN0aW9uKG9lKXtyZXR1cm4gQi5tYXJrKHRoaXMsb2UpfSx0ZS5wcm90b3R5cGUuX21ha2VBYnM9ZnVuY3Rpb24ob2Upe3JldHVybiBCLm1ha2VBYnModGhpcyxvZSl9fSw3Mjk2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyMTApKCIlT2JqZWN0''@;'; put 'put ''LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUiLCEwKTtpZih6KXRyeXt6KFtdLCJsZW5ndGgiKX1jYXRjaHt6PW51bGx9TS5leHBvcnRzPXp9LDY0NTg6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oUil7aWYobnVsbD09PVJ8fCJvYmplY3QiIT10eXBlb2YgUilyZXR1cm4g''@;'; put 'put ''UjtpZihSIGluc3RhbmNlb2YgT2JqZWN0KXZhciB6PXtfX3Byb3RvX186TyhSKX07ZWxzZSB6PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFIpLmZvckVhY2goZnVuY3Rpb24oSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHosSyxPYmplY3Qu''@;'; put 'put ''Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFIsSykpfSksen07dmFyIE89T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihSKXtyZXR1cm4gUi5fX3Byb3RvX199fSw3NzooTSxPLFIpPT57dmFyIHosSyxJPVIoNDE1NSksaz1SKDUxMDgpLEU9Uig1NDQzKSxqPVIoMjE2MSksVj1SKDg1''@;'; put 'put ''MjApLEI9Uig2NDU4KSxZPVIoOTUzOSk7ZnVuY3Rpb24gWCh1ZSxjZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLHose2dldDpmdW5jdGlvbigpe3JldHVybiBjZX19KX0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj8oej1TeW1ib2wu''@;'; put 'put ''Zm9yKCJncmFjZWZ1bC1mcy5xdWV1ZSIpLEs9U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucHJldmlvdXMiKSk6KHo9Il9fX2dyYWNlZnVsLWZzLnF1ZXVlIixLPSJfX19ncmFjZWZ1bC1mcy5wcmV2aW91cyIpO3ZhciBVLHE9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIHRlKHVlKXtqKHVlKSx1ZS5n''@;'; put 'put ''cmFjZWZ1bGlmeT10ZSx1ZS5jcmVhdGVSZWFkU3RyZWFtPWZ1bmN0aW9uKGZlLHhlKXtyZXR1cm4gbmV3IHVlLlJlYWRTdHJlYW0oZmUseGUpfSx1ZS5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbihmZSx4ZSl7cmV0dXJuIG5ldyB1ZS5Xcml0ZVN0cmVhbShmZSx4ZSl9O3ZhciBjZT11ZS5y''@;'; put 'put ''ZWFkRmlsZTt1ZS5yZWFkRmlsZT1mdW5jdGlvbihmZSx4ZSxMZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHhlJiYoTGU9eGUseGU9bnVsbCksZnVuY3Rpb24gRmUoT2UsQmUsV2UsS2Upe3JldHVybiBjZShPZSxCZSxmdW5jdGlvbihZZSl7IVllfHwiRU1GSUxFIiE9PVllLmNvZGUmJiJF''@;'; put 'put ''TkZJTEUiIT09WWUuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgV2UmJldlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbRmUsW09lLEJlLFdlXSxZZSxLZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsTGUpfTt2YXIgRz11ZS53cml0ZUZpbGU7dWUud3JpdGVGaWxlPWZ1bmN0''@;'; put 'put ''aW9uKGZlLHhlLExlLEZlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTGUmJihGZT1MZSxMZT1udWxsKSxmdW5jdGlvbiBPZShCZSxXZSxLZSxZZSxKZSl7cmV0dXJuIEcoQmUsV2UsS2UsZnVuY3Rpb24obHQpeyFsdHx8IkVNRklMRSIhPT1sdC5jb2RlJiYiRU5GSUxFIiE9PWx0LmNvZGU/''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFllJiZZZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b2UoW09lLFtCZSxXZSxLZSxZZV0sbHQsSmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGZlLHhlLExlLEZlKX07dmFyIGI9dWUuYXBwZW5kRmlsZTtiJiYodWUuYXBwZW5kRmlsZT1mdW5jdGlvbihm''@;'; put 'put ''ZSx4ZSxMZSxGZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIExlJiYoRmU9TGUsTGU9bnVsbCksZnVuY3Rpb24gT2UoQmUsV2UsS2UsWWUsSmUpe3JldHVybiBiKEJlLFdlLEtlLGZ1bmN0aW9uKGx0KXshbHR8fCJFTUZJTEUiIT09bHQuY29kZSYmIkVORklMRSIhPT1sdC5jb2RlPyJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBZZSYmWWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOm9lKFtPZSxbQmUsV2UsS2UsWWVdLGx0LEplfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShmZSx4ZSxMZSxGZSl9KTt2YXIgRD11ZS5jb3B5RmlsZTtEJiYodWUuY29weUZpbGU9ZnVuY3Rpb24oZmUseGUsTGUs''@;'; put 'put ''RmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMZSYmKEZlPUxlLExlPTApLGZ1bmN0aW9uIE9lKEJlLFdlLEtlLFllLEplKXtyZXR1cm4gRChCZSxXZSxLZSxmdW5jdGlvbihsdCl7IWx0fHwiRU1GSUxFIiE9PWx0LmNvZGUmJiJFTkZJTEUiIT09bHQuY29kZT8iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgWWUmJlllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbT2UsW0JlLFdlLEtlLFllXSxsdCxKZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsTGUsRmUpfSk7dmFyIEg9dWUucmVhZGRpcjt1ZS5yZWFkZGlyPWZ1bmN0aW9uKGZlLHhlLExlKXsiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgeGUmJihMZT14ZSx4ZT1udWxsKTt2YXIgRmU9Ti50ZXN0KEkudmVyc2lvbik/ZnVuY3Rpb24oQmUsV2UsS2UsWWUpe3JldHVybiBIKEJlLE9lKEJlLFdlLEtlLFllKSl9OmZ1bmN0aW9uKEJlLFdlLEtlLFllKXtyZXR1cm4gSChCZSxXZSxPZShCZSxXZSxLZSxZZSkpfTtyZXR1cm4gRmUo''@;'; put 'put ''ZmUseGUsTGUpO2Z1bmN0aW9uIE9lKEJlLFdlLEtlLFllKXtyZXR1cm4gZnVuY3Rpb24oSmUsbHQpeyFKZXx8IkVNRklMRSIhPT1KZS5jb2RlJiYiRU5GSUxFIiE9PUplLmNvZGU/KGx0JiZsdC5zb3J0JiZsdC5zb3J0KCksImZ1bmN0aW9uIj09dHlwZW9mIEtlJiZLZS5jYWxsKHRoaXMsSmUs''@;'; put 'put ''bHQpKTpvZShbRmUsW0JlLFdlLEtlXSxKZSxZZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9fX07dmFyIE49L152WzAtNV1cLi87aWYoInYwLjgiPT09SS52ZXJzaW9uLnN1YnN0cigwLDQpKXt2YXIgZz1WKHVlKTt3PWcuUmVhZFN0cmVhbSxKPWcuV3JpdGVTdHJlYW19dmFyIEM9dWUuUmVh''@;'; put 'put ''ZFN0cmVhbTtDJiYody5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShDLnByb3RvdHlwZSksdy5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3ZhciBmZT10aGlzO2RlKGZlLnBhdGgsZmUuZmxhZ3MsZmUubW9kZSxmdW5jdGlvbih4ZSxMZSl7eGU/KGZlLmF1dG9DbG9zZSYmZmUuZGVzdHJveSgp''@;'; put 'put ''LGZlLmVtaXQoImVycm9yIix4ZSkpOihmZS5mZD1MZSxmZS5lbWl0KCJvcGVuIixMZSksZmUucmVhZCgpKX0pfSk7dmFyIFM9dWUuV3JpdGVTdHJlYW07UyYmKEoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLEoucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt2YXIgZmU9''@;'; put 'put ''dGhpcztkZShmZS5wYXRoLGZlLmZsYWdzLGZlLm1vZGUsZnVuY3Rpb24oeGUsTGUpe3hlPyhmZS5kZXN0cm95KCksZmUuZW1pdCgiZXJyb3IiLHhlKSk6KGZlLmZkPUxlLGZlLmVtaXQoIm9wZW4iLExlKSl9KX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSwiUmVhZFN0cmVhbSIse2dldDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB3fSxzZXQ6ZnVuY3Rpb24oZmUpe3c9ZmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLCJXcml0ZVN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiBKfSxzZXQ6ZnVuY3Rpb24oZmUpe0o9ZmV9LGVu''@;'; put 'put ''dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIHY9dztPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsIkZpbGVSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9LHNldDpmdW5jdGlvbihmZSl7dj1mZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIg''@;'; put 'put ''cD1KO2Z1bmN0aW9uIHcoZmUseGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygdz8oQy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6dy5hcHBseShPYmplY3QuY3JlYXRlKHcucHJvdG90eXBlKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEooZmUseGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2Yg''@;'; put 'put ''Sj8oUy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6Si5hcHBseShPYmplY3QuY3JlYXRlKEoucHJvdG90eXBlKSxhcmd1bWVudHMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSwiRmlsZVdyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHB9LHNldDpmdW5jdGlvbihmZSl7''@;'; put 'put ''cD1mZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgbmU9dWUub3BlbjtmdW5jdGlvbiBkZShmZSx4ZSxMZSxGZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIExlJiYoRmU9TGUsTGU9bnVsbCksZnVuY3Rpb24gT2UoQmUsV2UsS2UsWWUsSmUpe3JldHVybiBuZShCZSxX''@;'; put 'put ''ZSxLZSxmdW5jdGlvbihsdCxQZSl7IWx0fHwiRU1GSUxFIiE9PWx0LmNvZGUmJiJFTkZJTEUiIT09bHQuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgWWUmJlllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbT2UsW0JlLFdlLEtlLFllXSxsdCxKZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9''@;'; put 'put ''KX0oZmUseGUsTGUsRmUpfXJldHVybiB1ZS5vcGVuPWRlLHVlfWZ1bmN0aW9uIG9lKHVlKXtxKCJFTlFVRVVFIix1ZVswXS5uYW1lLHVlWzFdKSxFW3pdLnB1c2godWUpLGhlKCl9ZnVuY3Rpb24gc2UoKXtmb3IodmFyIHVlPURhdGUubm93KCksY2U9MDtjZTxFW3pdLmxlbmd0aDsrK2NlKUVb''@;'; put 'put ''el1bY2VdLmxlbmd0aD4yJiYoRVt6XVtjZV1bM109dWUsRVt6XVtjZV1bNF09dWUpO2hlKCl9ZnVuY3Rpb24gaGUoKXtpZihjbGVhclRpbWVvdXQoVSksVT12b2lkIDAsMCE9PUVbel0ubGVuZ3RoKXt2YXIgdWU9RVt6XS5zaGlmdCgpLGNlPXVlWzBdLEc9dWVbMV0sYj11ZVsyXSxEPXVlWzNd''@;'; put 'put ''LEg9dWVbNF07aWYodm9pZCAwPT09RClxKCJSRVRSWSIsY2UubmFtZSxHKSxjZS5hcHBseShudWxsLEcpO2Vsc2UgaWYoRGF0ZS5ub3coKS1EPj02ZTQpe3EoIlRJTUVPVVQiLGNlLm5hbWUsRyk7dmFyIE49Ry5wb3AoKTsiZnVuY3Rpb24iPT10eXBlb2YgTiYmTi5jYWxsKG51bGwsYil9ZWxz''@;'; put 'put ''ZXt2YXIgZz1EYXRlLm5vdygpLUgsQz1NYXRoLm1heChILUQsMSk7Zz49TWF0aC5taW4oMS4yKkMsMTAwKT8ocSgiUkVUUlkiLGNlLm5hbWUsRyksY2UuYXBwbHkobnVsbCxHLmNvbmNhdChbRF0pKSk6RVt6XS5wdXNoKHVlKX12b2lkIDA9PT1VJiYoVT1zZXRUaW1lb3V0KGhlLDApKX19WS5k''@;'; put 'put ''ZWJ1Z2xvZz9xPVkuZGVidWdsb2coImdmczQiKTovXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmKHE9ZnVuY3Rpb24oKXt2YXIgdWU9WS5mb3JtYXQuYXBwbHkoWSxhcmd1bWVudHMpO3VlPSJHRlM0OiAiK3VlLnNwbGl0KC9cbi8pLmpvaW4oIlxuR0ZTNDogIiksay5l''@;'; put 'put ''cnJvcih1ZSl9KSxFW3pdfHwoWChFLFIuZ1t6XXx8W10pLEUuY2xvc2U9ZnVuY3Rpb24odWUpe2Z1bmN0aW9uIGNlKEcsYil7cmV0dXJuIHVlLmNhbGwoRSxHLGZ1bmN0aW9uKEQpe0R8fHNlKCksImZ1bmN0aW9uIj09dHlwZW9mIGImJmIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9cmV0dXJu''@;'; put 'put ''IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZSxLLHt2YWx1ZTp1ZX0pLGNlfShFLmNsb3NlKSxFLmNsb3NlU3luYz1mdW5jdGlvbih1ZSl7ZnVuY3Rpb24gY2UoRyl7dWUuYXBwbHkoRSxhcmd1bWVudHMpLHNlKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZSxLLHt2YWx1ZTp1ZX0p''@;'; put 'put ''LGNlfShFLmNsb3NlU3luYyksL1xiZ2ZzNFxiL2kudGVzdChJLmVudi5OT0RFX0RFQlVHfHwiIikmJkkub24oImV4aXQiLGZ1bmN0aW9uKCl7cShFW3pdKSxSKDkyODIpLmVxdWFsKEVbel0ubGVuZ3RoLDApfSkpLFIuZ1t6XXx8WChSLmcsRVt6XSksTS5leHBvcnRzPXRlKEIoRSkpLEkuZW52''@;'; put 'put ''LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIJiYhRS5fX3BhdGNoZWQmJihNLmV4cG9ydHM9dGUoRSksRS5fX3BhdGNoZWQ9ITApfSw4NTIwOihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9UigyODMwKS5TdHJlYW07TS5leHBvcnRzPWZ1bmN0aW9uKEkpe3JldHVybntSZWFkU3RyZWFt''@;'; put 'put ''OmZ1bmN0aW9uIGsoRSxqKXtpZighKHRoaXMgaW5zdGFuY2VvZiBrKSlyZXR1cm4gbmV3IGsoRSxqKTtLLmNhbGwodGhpcyk7dmFyIFY9dGhpczt0aGlzLnBhdGg9RSx0aGlzLmZkPW51bGwsdGhpcy5yZWFkYWJsZT0hMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmZsYWdzPSJyIix0aGlzLm1vZGU9''@;'; put 'put ''NDM4LHRoaXMuYnVmZmVyU2l6ZT02NTUzNixqPWp8fHt9O2Zvcih2YXIgQj1PYmplY3Qua2V5cyhqKSxZPTAsWD1CLmxlbmd0aDtZPFg7WSsrKXt2YXIgVT1CW1ldO3RoaXNbVV09altVXX1pZih0aGlzLmVuY29kaW5nJiZ0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpLHZvaWQgMCE9''@;'; put 'put ''PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih2b2lkIDA9PT10aGlzLmVuZCl0aGlzLmVuZD0xLzA7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuZW5kKXRocm93IFR5cGVF''@;'; put 'put ''cnJvcigiZW5kIG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PnRoaXMuZW5kKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA8PSBlbmQiKTt0aGlzLnBvcz10aGlzLnN0YXJ0fW51bGw9PT10aGlzLmZkP0kub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUs''@;'; put 'put ''ZnVuY3Rpb24ocSxlZSl7aWYocSlyZXR1cm4gVi5lbWl0KCJlcnJvciIscSksdm9pZChWLnJlYWRhYmxlPSExKTtWLmZkPWVlLFYuZW1pdCgib3BlbiIsZWUpLFYuX3JlYWQoKX0pOnoubmV4dFRpY2soZnVuY3Rpb24oKXtWLl9yZWFkKCl9KX0sV3JpdGVTdHJlYW06ZnVuY3Rpb24gayhFLGop''@;'; put 'put ''e2lmKCEodGhpcyBpbnN0YW5jZW9mIGspKXJldHVybiBuZXcgayhFLGopO0suY2FsbCh0aGlzKSx0aGlzLnBhdGg9RSx0aGlzLmZkPW51bGwsdGhpcy53cml0YWJsZT0hMCx0aGlzLmZsYWdzPSJ3Iix0aGlzLmVuY29kaW5nPSJiaW5hcnkiLHRoaXMubW9kZT00MzgsdGhpcy5ieXRlc1dyaXR0''@;'; put 'put ''ZW49MCxqPWp8fHt9O2Zvcih2YXIgVj1PYmplY3Qua2V5cyhqKSxCPTAsWT1WLmxlbmd0aDtCPFk7QisrKXt2YXIgWD1WW0JdO3RoaXNbWF09altYXX1pZih2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBt''@;'; put 'put ''dXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydDwwKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA+PSB6ZXJvIik7dGhpcy5wb3M9dGhpcy5zdGFydH10aGlzLmJ1c3k9ITEsdGhpcy5fcXVldWU9W10sbnVsbD09PXRoaXMuZmQmJih0aGlzLl9vcGVuPUkub3Blbix0aGlzLl9x''@;'; put 'put ''dWV1ZS5wdXNoKFt0aGlzLl9vcGVuLHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSx2b2lkIDBdKSx0aGlzLmZsdXNoKCkpfX19fSwyMTYxOihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9UigzMjA4KSxJPXouY3dkLGs9bnVsbCxFPXouZW52LkdSQUNFRlVMX0ZTX1BMQVRGT1JNfHx6''@;'; put 'put ''LnBsYXRmb3JtO3ouY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIGt8fChrPUkuY2FsbCh6KSksa307dHJ5e3ouY3dkKCl9Y2F0Y2h7fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiB6LmNoZGlyKXt2YXIgaj16LmNoZGlyO3ouY2hkaXI9ZnVuY3Rpb24oVil7az1udWxsLGouY2FsbCh6LFYpfSxPYmplY3Qu''@;'; put 'put ''c2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZih6LmNoZGlyLGopfU0uZXhwb3J0cz1mdW5jdGlvbihWKXt2YXIgc2Usb2U7ZnVuY3Rpb24gQihzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihoZSx1ZSxjZSl7cmV0dXJuIHNlLmNhbGwoVixoZSx1ZSxmdW5jdGlvbihHKXt0ZShH''@;'; put 'put ''KSYmKEc9bnVsbCksY2UmJmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBZKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlKXt0cnl7cmV0dXJuIHNlLmNhbGwoVixoZSx1ZSl9Y2F0Y2goY2Upe2lmKCF0ZShjZSkpdGhyb3cgY2V9fX1mdW5jdGlvbiBYKHNlKXtyZXR1''@;'; put 'put ''cm4gc2UmJmZ1bmN0aW9uKGhlLHVlLGNlLEcpe3JldHVybiBzZS5jYWxsKFYsaGUsdWUsY2UsZnVuY3Rpb24oYil7dGUoYikmJihiPW51bGwpLEcmJkcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFUoc2Upe3JldHVybiBzZSYmZnVuY3Rpb24oaGUsdWUsY2Upe3RyeXtyZXR1''@;'; put 'put ''cm4gc2UuY2FsbChWLGhlLHVlLGNlKX1jYXRjaChHKXtpZighdGUoRykpdGhyb3cgR319fWZ1bmN0aW9uIHEoc2Upe3JldHVybiBzZSYmZnVuY3Rpb24oaGUsdWUsY2Upe2Z1bmN0aW9uIEcoYixEKXtEJiYoRC51aWQ8MCYmKEQudWlkKz00Mjk0OTY3Mjk2KSxELmdpZDwwJiYoRC5naWQrPTQy''@;'; put 'put ''OTQ5NjcyOTYpKSxjZSYmY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB1ZSYmKGNlPXVlLHVlPW51bGwpLHVlP3NlLmNhbGwoVixoZSx1ZSxHKTpzZS5jYWxsKFYsaGUsRyl9fWZ1bmN0aW9uIGVlKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVl''@;'; put 'put ''KXt2YXIgY2U9dWU/c2UuY2FsbChWLGhlLHVlKTpzZS5jYWxsKFYsaGUpO3JldHVybiBjZSYmKGNlLnVpZDwwJiYoY2UudWlkKz00Mjk0OTY3Mjk2KSxjZS5naWQ8MCYmKGNlLmdpZCs9NDI5NDk2NzI5NikpLGNlfX1mdW5jdGlvbiB0ZShzZSl7cmV0dXJuIXNlfHwiRU5PU1lTIj09PXNlLmNv''@;'; put 'put ''ZGV8fCEoei5nZXR1aWQmJjA9PT16LmdldHVpZCgpfHwiRUlOVkFMIiE9PXNlLmNvZGUmJiJFUEVSTSIhPT1zZS5jb2RlKX1LLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmei52ZXJzaW9uLm1hdGNoKC9edjBcLjZcLlswLTJdfF52MFwuNVwuLykmJigoc2U9VikubGNobW9kPWZ1bmN0''@;'; put 'put ''aW9uKGhlLHVlLGNlKXtzZS5vcGVuKGhlLEsuT19XUk9OTFl8Sy5PX1NZTUxJTkssdWUsZnVuY3Rpb24oRyxiKXtHP2NlJiZjZShHKTpzZS5mY2htb2QoYix1ZSxmdW5jdGlvbihEKXtzZS5jbG9zZShiLGZ1bmN0aW9uKEgpe2NlJiZjZShEfHxIKX0pfSl9KX0sc2UubGNobW9kU3luYz1mdW5j''@;'; put 'put ''dGlvbihoZSx1ZSl7dmFyIGNlLEc9c2Uub3BlblN5bmMoaGUsSy5PX1dST05MWXxLLk9fU1lNTElOSyx1ZSksYj0hMDt0cnl7Y2U9c2UuZmNobW9kU3luYyhHLHVlKSxiPSExfWZpbmFsbHl7aWYoYil0cnl7c2UuY2xvc2VTeW5jKEcpfWNhdGNoe31lbHNlIHNlLmNsb3NlU3luYyhHKX1yZXR1''@;'; put 'put ''cm4gY2V9KSxWLmx1dGltZXN8fGZ1bmN0aW9uKHNlKXtLLmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmc2UuZnV0aW1lcz8oc2UubHV0aW1lcz1mdW5jdGlvbihoZSx1ZSxjZSxHKXtzZS5vcGVuKGhlLEsuT19TWU1MSU5LLGZ1bmN0aW9uKGIsRCl7Yj9HJiZHKGIpOnNlLmZ1dGltZXMo''@;'; put 'put ''RCx1ZSxjZSxmdW5jdGlvbihIKXtzZS5jbG9zZShELGZ1bmN0aW9uKE4pe0cmJkcoSHx8Til9KX0pfSl9LHNlLmx1dGltZXNTeW5jPWZ1bmN0aW9uKGhlLHVlLGNlKXt2YXIgRyxiPXNlLm9wZW5TeW5jKGhlLEsuT19TWU1MSU5LKSxEPSEwO3RyeXtHPXNlLmZ1dGltZXNTeW5jKGIsdWUsY2Up''@;'; put 'put ''LEQ9ITF9ZmluYWxseXtpZihEKXRyeXtzZS5jbG9zZVN5bmMoYil9Y2F0Y2h7fWVsc2Ugc2UuY2xvc2VTeW5jKGIpfXJldHVybiBHfSk6c2UuZnV0aW1lcyYmKHNlLmx1dGltZXM9ZnVuY3Rpb24oaGUsdWUsY2UsRyl7RyYmei5uZXh0VGljayhHKX0sc2UubHV0aW1lc1N5bmM9ZnVuY3Rpb24o''@;'; put 'put ''KXt9KX0oViksVi5jaG93bj1YKFYuY2hvd24pLFYuZmNob3duPVgoVi5mY2hvd24pLFYubGNob3duPVgoVi5sY2hvd24pLFYuY2htb2Q9QihWLmNobW9kKSxWLmZjaG1vZD1CKFYuZmNobW9kKSxWLmxjaG1vZD1CKFYubGNobW9kKSxWLmNob3duU3luYz1VKFYuY2hvd25TeW5jKSxWLmZjaG93''@;'; put 'put ''blN5bmM9VShWLmZjaG93blN5bmMpLFYubGNob3duU3luYz1VKFYubGNob3duU3luYyksVi5jaG1vZFN5bmM9WShWLmNobW9kU3luYyksVi5mY2htb2RTeW5jPVkoVi5mY2htb2RTeW5jKSxWLmxjaG1vZFN5bmM9WShWLmxjaG1vZFN5bmMpLFYuc3RhdD1xKFYuc3RhdCksVi5mc3RhdD1xKFYu''@;'; put 'put ''ZnN0YXQpLFYubHN0YXQ9cShWLmxzdGF0KSxWLnN0YXRTeW5jPWVlKFYuc3RhdFN5bmMpLFYuZnN0YXRTeW5jPWVlKFYuZnN0YXRTeW5jKSxWLmxzdGF0U3luYz1lZShWLmxzdGF0U3luYyksVi5jaG1vZCYmIVYubGNobW9kJiYoVi5sY2htb2Q9ZnVuY3Rpb24oc2UsaGUsdWUpe3VlJiZ6Lm5l''@;'; put 'put ''eHRUaWNrKHVlKX0sVi5sY2htb2RTeW5jPWZ1bmN0aW9uKCl7fSksVi5jaG93biYmIVYubGNob3duJiYoVi5sY2hvd249ZnVuY3Rpb24oc2UsaGUsdWUsY2Upe2NlJiZ6Lm5leHRUaWNrKGNlKX0sVi5sY2hvd25TeW5jPWZ1bmN0aW9uKCl7fSksIndpbjMyIj09PUUmJihWLnJlbmFtZT0iZnVu''@;'; put 'put ''Y3Rpb24iIT10eXBlb2YgVi5yZW5hbWU/Vi5yZW5hbWU6ZnVuY3Rpb24oc2Upe2Z1bmN0aW9uIGhlKHVlLGNlLEcpe3ZhciBiPURhdGUubm93KCksRD0wO3NlKHVlLGNlLGZ1bmN0aW9uIEgoTil7aWYoTiYmKCJFQUNDRVMiPT09Ti5jb2RlfHwiRVBFUk0iPT09Ti5jb2RlKSYmRGF0ZS5ub3co''@;'; put 'put ''KS1iPDZlNClyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe1Yuc3RhdChjZSxmdW5jdGlvbihnLEMpe2cmJiJFTk9FTlQiPT09Zy5jb2RlP3NlKHVlLGNlLEgpOkcoTil9KX0sRCksdm9pZChEPDEwMCYmKEQrPTEwKSk7RyYmRyhOKX0pfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Ym''@;'; put 'put ''Jk9iamVjdC5zZXRQcm90b3R5cGVPZihoZSxzZSksaGV9KFYucmVuYW1lKSksVi5yZWFkPSJmdW5jdGlvbiIhPXR5cGVvZiBWLnJlYWQ/Vi5yZWFkOmZ1bmN0aW9uKHNlKXtmdW5jdGlvbiBoZSh1ZSxjZSxHLGIsRCxIKXt2YXIgTjtpZihIJiYiZnVuY3Rpb24iPT10eXBlb2YgSCl7dmFyIGc9''@;'; put 'put ''MDtOPWZ1bmN0aW9uKEMsUyx2KXtpZihDJiYiRUFHQUlOIj09PUMuY29kZSYmZzwxMClyZXR1cm4gZysrLHNlLmNhbGwoVix1ZSxjZSxHLGIsRCxOKTtILmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIHNlLmNhbGwoVix1ZSxjZSxHLGIsRCxOKX1yZXR1cm4gT2JqZWN0LnNldFByb3Rv''@;'; put 'put ''dHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoaGUsc2UpLGhlfShWLnJlYWQpLFYucmVhZFN5bmM9ImZ1bmN0aW9uIiE9dHlwZW9mIFYucmVhZFN5bmM/Vi5yZWFkU3luYzoob2U9Vi5yZWFkU3luYyxmdW5jdGlvbihzZSxoZSx1ZSxjZSxHKXtmb3IodmFyIGI9MDs7KXRyeXtyZXR1cm4g''@;'; put 'put ''b2UuY2FsbChWLHNlLGhlLHVlLGNlLEcpfWNhdGNoKEQpe2lmKCJFQUdBSU4iPT09RC5jb2RlJiZiPDEwKXtiKys7Y29udGludWV9dGhyb3cgRH19KX19LDEwNDQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDIxMCkoIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIiwhMCksSz1mdW5j''@;'; put 'put ''dGlvbigpe2lmKHopdHJ5e3JldHVybiB6KHt9LCJhIix7dmFsdWU6MX0pLCEwfWNhdGNoe3JldHVybiExfXJldHVybiExfTtLLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7aWYoIUsoKSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIDEhPT16KFtdLCJsZW5ndGgiLHt2YWx1ZTox''@;'; put 'put ''fSkubGVuZ3RofWNhdGNoe3JldHVybiEwfX0sTS5leHBvcnRzPUt9LDE0MDU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLEs9Uig1NDE5KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeiYmImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiB6KCJmb28iKSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImJhciIpJiZLKCl9fSw1NDE5Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0''@;'; put 'put ''aW9uIiE9dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpcmV0dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IpcmV0dXJuITA7dmFyIE89e30sUj1TeW1ib2woInRlc3QiKSx6PU9iamVjdChSKTtpZigic3RyaW5nIj09dHlwZW9mIFJ8fCJbb2JqZWN0''@;'; put 'put ''IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFIpfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh6KSlyZXR1cm4hMTtmb3IoUiBpbiBPW1JdPTQyLE8pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVj''@;'; put 'put ''dC5rZXlzJiYwIT09T2JqZWN0LmtleXMoTykubGVuZ3RofHwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJjAhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKS5sZW5ndGgpcmV0dXJuITE7dmFyIEs9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9s''@;'; put 'put ''cyhPKTtpZigxIT09Sy5sZW5ndGh8fEtbMF0hPT1SfHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKE8sUikpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ipe3ZhciBJPU9iamVjdC5nZXRPd25Q''@;'; put 'put ''cm9wZXJ0eURlc2NyaXB0b3IoTyxSKTtpZig0MiE9PUkudmFsdWV8fCEwIT09SS5lbnVtZXJhYmxlKXJldHVybiExfXJldHVybiEwfX0sNjQxMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTQxOSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHooKSYmISFTeW1ib2wudG9T''@;'; put 'put ''dHJpbmdUYWd9fSw3NjQyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig4NjEyKTtNLmV4cG9ydHM9ei5jYWxsKEZ1bmN0aW9uLmNhbGwsT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSl9LDMzNDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk1MDkpLkJ1ZmZl''@;'; put 'put ''cixLPVIoODQ3MykuVHJhbnNmb3JtO2Z1bmN0aW9uIEkoayl7Sy5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPXouYWxsb2NVbnNhZmUoayksdGhpcy5fYmxvY2tTaXplPWssdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2ZpbmFsaXplZD0hMX1SKDU3MTcp''@;'; put 'put ''KEksSyksSS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihrLEUsail7dmFyIFY9bnVsbDt0cnl7dGhpcy51cGRhdGUoayxFKX1jYXRjaChCKXtWPUJ9aihWKX0sSS5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKGspe3ZhciBFPW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgp''@;'; put 'put ''KX1jYXRjaChqKXtFPWp9ayhFKX0sSS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGssRSl7aWYoZnVuY3Rpb24oVSxxKXtpZighei5pc0J1ZmZlcihVKSYmInN0cmluZyIhPXR5cGVvZiBVKXRocm93IG5ldyBUeXBlRXJyb3IoIkRhdGEgbXVzdCBiZSBhIHN0cmluZyBvciBhIGJ1ZmZlciIp''@;'; put 'put ''fShrKSx0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt6LmlzQnVmZmVyKGspfHwoaz16LmZyb20oayxFKSk7Zm9yKHZhciBqPXRoaXMuX2Jsb2NrLFY9MDt0aGlzLl9ibG9ja09mZnNldCtrLmxlbmd0aC1WPj10aGlzLl9ibG9ja1NpemU7''@;'; put 'put ''KXtmb3IodmFyIEI9dGhpcy5fYmxvY2tPZmZzZXQ7Qjx0aGlzLl9ibG9ja1NpemU7KWpbQisrXT1rW1YrK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO1Y8ay5sZW5ndGg7KWpbdGhpcy5fYmxvY2tPZmZzZXQrK109a1tWKytdO2Zvcih2YXIgWT0wLFg9OCprLmxl''@;'; put 'put ''bmd0aDtYPjA7KytZKXRoaXMuX2xlbmd0aFtZXSs9WCwoWD10aGlzLl9sZW5ndGhbWV0vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW1ldLT00Mjk0OTY3Mjk2KlgpO3JldHVybiB0aGlzfSxJLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBk''@;'; put 'put ''YXRlIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxJLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oayl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7dGhpcy5fZmluYWxpemVkPSEwO3ZhciBFPXRoaXMuX2RpZ2VzdCgpO3ZvaWQgMCE9''@;'; put 'put ''PWsmJihFPUUudG9TdHJpbmcoaykpLHRoaXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIGo9MDtqPDQ7KytqKXRoaXMuX2xlbmd0aFtqXT0wO3JldHVybiBFfSxJLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfZGlnZXN0''@;'; put 'put ''IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxNLmV4cG9ydHM9SX0sMzcxNTooTSxPLFIpPT57dmFyIHo9Tzt6LnV0aWxzPVIoNjQzNiksei5jb21tb249Uig1NzcyKSx6LnNoYT1SKDkwNDEpLHoucmlwZW1kPVIoMjk0OSksei5obWFjPVIoMjM0NCksei5zaGExPXouc2hhLnNoYTEsei5zaGEyNTY9''@;'; put 'put ''ei5zaGEuc2hhMjU2LHouc2hhMjI0PXouc2hhLnNoYTIyNCx6LnNoYTM4ND16LnNoYS5zaGEzODQsei5zaGE1MTI9ei5zaGEuc2hhNTEyLHoucmlwZW1kMTYwPXoucmlwZW1kLnJpcGVtZDE2MH0sNTc3MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDk3NDYpO2Z1''@;'; put 'put ''bmN0aW9uIEkoKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5o''@;'; put 'put ''bWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj0iYmlnIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfU8uQmxvY2tIYXNoPUksSS5wcm90b3R5cGUudXBk''@;'; put 'put ''YXRlPWZ1bmN0aW9uKGssRSl7aWYoaz16LnRvQXJyYXkoayxFKSx0aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZy5jb25jYXQoayk6ayx0aGlzLnBlbmRpbmdUb3RhbCs9ay5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4KXt2YXIgaj0oaz10aGlz''@;'; put 'put ''LnBlbmRpbmcpLmxlbmd0aCV0aGlzLl9kZWx0YTg7dGhpcy5wZW5kaW5nPWsuc2xpY2Uoay5sZW5ndGgtaixrLmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5ndGgmJih0aGlzLnBlbmRpbmc9bnVsbCksaz16LmpvaW4zMihrLDAsay5sZW5ndGgtaix0aGlzLmVuZGlhbik7Zm9yKHZhciBW''@;'; put 'put ''PTA7VjxrLmxlbmd0aDtWKz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZShrLFYsVit0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sSS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSksSyhudWxsPT09dGhpcy5wZW5kaW5nKSx0''@;'; put 'put ''aGlzLl9kaWdlc3Qoayl9LEkucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLnBlbmRpbmdUb3RhbCxFPXRoaXMuX2RlbHRhOCxqPUUtKGsrdGhpcy5wYWRMZW5ndGgpJUUsVj1uZXcgQXJyYXkoait0aGlzLnBhZExlbmd0aCk7VlswXT0xMjg7Zm9yKHZhciBCPTE7QjxqO0Ir''@;'; put 'put ''KylWW0JdPTA7aWYoazw8PTMsImJpZyI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBZPTg7WTx0aGlzLnBhZExlbmd0aDtZKyspVltCKytdPTA7VltCKytdPTAsVltCKytdPTAsVltCKytdPTAsVltCKytdPTAsVltCKytdPWs+Pj4yNCYyNTUsVltCKytdPWs+Pj4xNiYyNTUsVltCKytdPWs+Pj44''@;'; put 'put ''JjI1NSxWW0IrK109MjU1Jmt9ZWxzZSBmb3IoVltCKytdPTI1NSZrLFZbQisrXT1rPj4+OCYyNTUsVltCKytdPWs+Pj4xNiYyNTUsVltCKytdPWs+Pj4yNCYyNTUsVltCKytdPTAsVltCKytdPTAsVltCKytdPTAsVltCKytdPTAsWT04O1k8dGhpcy5wYWRMZW5ndGg7WSsrKVZbQisrXT0wO3Jl''@;'; put 'put ''dHVybiBWfX0sMjM0NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDk3NDYpO2Z1bmN0aW9uIEkoayxFLGope2lmKCEodGhpcyBpbnN0YW5jZW9mIEkpKXJldHVybiBuZXcgSShrLEUsaik7dGhpcy5IYXNoPWssdGhpcy5ibG9ja1NpemU9ay5ibG9ja1NpemUvOCx0''@;'; put 'put ''aGlzLm91dFNpemU9ay5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KHoudG9BcnJheShFLGopKX1NLmV4cG9ydHM9SSxJLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihrKXtrLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKGs9KG5ldyB0aGlzLkhh''@;'; put 'put ''c2gpLnVwZGF0ZShrKS5kaWdlc3QoKSksSyhrLmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgRT1rLmxlbmd0aDtFPHRoaXMuYmxvY2tTaXplO0UrKylrLnB1c2goMCk7Zm9yKEU9MDtFPGsubGVuZ3RoO0UrKylrW0VdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCku''@;'; put 'put ''dXBkYXRlKGspLEU9MDtFPGsubGVuZ3RoO0UrKylrW0VdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKGspfSxJLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUoayxFKSx0aGlzfSxJLnByb3RvdHlwZS5kaWdlc3Q9''@;'; put 'put ''ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KGspfX0sMjk0OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDU3NzIpLEk9ei5yb3RsMzIsaz16LnN1bTMyLEU9ei5zdW0zMl8z''@;'; put 'put ''LGo9ei5zdW0zMl80LFY9Sy5CbG9ja0hhc2g7ZnVuY3Rpb24gQigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQjtWLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5lbmRpYW49''@;'; put 'put ''ImxpdHRsZSJ9ZnVuY3Rpb24gWShzZSxoZSx1ZSxjZSl7cmV0dXJuIHNlPD0xNT9oZV51ZV5jZTpzZTw9MzE/aGUmdWV8fmhlJmNlOnNlPD00Nz8oaGV8fnVlKV5jZTpzZTw9NjM/aGUmY2V8dWUmfmNlOmhlXih1ZXx+Y2UpfWZ1bmN0aW9uIFgoc2Upe3JldHVybiBzZTw9MTU/MDpzZTw9MzE/''@;'; put 'put ''MTUxODUwMDI0OTpzZTw9NDc/MTg1OTc3NTM5MzpzZTw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4fWZ1bmN0aW9uIFUoc2Upe3JldHVybiBzZTw9MTU/MTM1MjgyOTkyNjpzZTw9MzE/MTU0ODYwMzY4NDpzZTw9NDc/MTgzNjA3MjY5MTpzZTw9NjM/MjA1Mzk5NDIxNzowfXouaW5oZXJpdHMo''@;'; put 'put ''QixWKSxPLnJpcGVtZDE2MD1CLEIuYmxvY2tTaXplPTUxMixCLm91dFNpemU9MTYwLEIuaG1hY1N0cmVuZ3RoPTE5MixCLnBhZExlbmd0aD02NCxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHNlLGhlKXtmb3IodmFyIHVlPXRoaXMuaFswXSxjZT10aGlzLmhbMV0sRz10aGlzLmhbMl0s''@;'; put 'put ''Yj10aGlzLmhbM10sRD10aGlzLmhbNF0sSD11ZSxOPWNlLGc9RyxDPWIsUz1ELHY9MDt2PDgwO3YrKyl7dmFyIHA9ayhJKGoodWUsWSh2LGNlLEcsYiksc2VbcVt2XStoZV0sWCh2KSksdGVbdl0pLEQpO3VlPUQsRD1iLGI9SShHLDEwKSxHPWNlLGNlPXAscD1rKEkoaihILFkoNzktdixOLGcs''@;'; put 'put ''Qyksc2VbZWVbdl0raGVdLFUodikpLG9lW3ZdKSxTKSxIPVMsUz1DLEM9SShnLDEwKSxnPU4sTj1wfXA9RSh0aGlzLmhbMV0sRyxDKSx0aGlzLmhbMV09RSh0aGlzLmhbMl0sYixTKSx0aGlzLmhbMl09RSh0aGlzLmhbM10sRCxIKSx0aGlzLmhbM109RSh0aGlzLmhbNF0sdWUsTiksdGhpcy5o''@;'; put 'put ''WzRdPUUodGhpcy5oWzBdLGNlLGcpLHRoaXMuaFswXT1wfSxCLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHNlKXtyZXR1cm4iaGV4Ij09PXNlP3oudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOnouc3BsaXQzMih0aGlzLmgsImxpdHRsZSIpfTt2YXIgcT1bMCwxLDIsMyw0LDUsNiw3LDgs''@;'; put 'put ''OSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2''@;'; put 'put ''LDE1LDEzXSxlZT1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwx''@;'; put 'put ''MiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSx0ZT1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEs''@;'; put 'put ''MTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sb2U9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3''@;'; put 'put ''LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSw5MDQxOihNLE8sUik9PnsidXNlIHN0cmljdCI7Ty5zaGExPVIoNDc2MSksTy5z''@;'; put 'put ''aGEyMjQ9Uig3OTkpLE8uc2hhMjU2PVIoOTM0NCksTy5zaGEzODQ9Uig3NzIpLE8uc2hhNTEyPVIoNTkwMCl9LDQ3NjE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1NzcyKSxJPVIoNzAzOCksaz16LnJvdGwzMixFPXouc3VtMzIsaj16LnN1bTMyXzUsVj1JLmZ0''@;'; put 'put ''XzEsQj1LLkJsb2NrSGFzaCxZPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBYKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWCkpcmV0dXJuIG5ldyBYO0IuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgz''@;'; put 'put ''MTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX16LmluaGVyaXRzKFgsQiksTS5leHBvcnRzPVgsWC5ibG9ja1NpemU9NTEyLFgub3V0U2l6ZT0xNjAsWC5obWFjU3RyZW5ndGg9ODAsWC5wYWRMZW5ndGg9NjQsWC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlv''@;'; put 'put ''bihVLHEpe2Zvcih2YXIgZWU9dGhpcy5XLHRlPTA7dGU8MTY7dGUrKyllZVt0ZV09VVtxK3RlXTtmb3IoO3RlPGVlLmxlbmd0aDt0ZSsrKWVlW3RlXT1rKGVlW3RlLTNdXmVlW3RlLThdXmVlW3RlLTE0XV5lZVt0ZS0xNl0sMSk7dmFyIG9lPXRoaXMuaFswXSxzZT10aGlzLmhbMV0saGU9dGhp''@;'; put 'put ''cy5oWzJdLHVlPXRoaXMuaFszXSxjZT10aGlzLmhbNF07Zm9yKHRlPTA7dGU8ZWUubGVuZ3RoO3RlKyspe3ZhciBHPX5+KHRlLzIwKSxiPWooayhvZSw1KSxWKEcsc2UsaGUsdWUpLGNlLGVlW3RlXSxZW0ddKTtjZT11ZSx1ZT1oZSxoZT1rKHNlLDMwKSxzZT1vZSxvZT1ifXRoaXMuaFswXT1F''@;'; put 'put ''KHRoaXMuaFswXSxvZSksdGhpcy5oWzFdPUUodGhpcy5oWzFdLHNlKSx0aGlzLmhbMl09RSh0aGlzLmhbMl0saGUpLHRoaXMuaFszXT1FKHRoaXMuaFszXSx1ZSksdGhpcy5oWzRdPUUodGhpcy5oWzRdLGNlKX0sWC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihVKXtyZXR1cm4iaGV4Ij09''@;'; put 'put ''PVU/ei50b0hleDMyKHRoaXMuaCwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3OTk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig5MzQ0KTtmdW5jdGlvbiBJKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJO0suY2FsbCh0aGlz''@;'; put 'put ''KSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdfXouaW5oZXJpdHMoSSxLKSxNLmV4cG9ydHM9SSxJLmJsb2NrU2l6ZT01MTIsSS5vdXRTaXplPTIyNCxJLmhtYWNTdHJl''@;'; put 'put ''bmd0aD0xOTIsSS5wYWRMZW5ndGg9NjQsSS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihrKXtyZXR1cm4iaGV4Ij09PWs/ei50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTp6LnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0sOTM0NDooTSxPLFIpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDU3NzIpLEk9Uig3MDM4KSxrPVIoOTc0NiksRT16LnN1bTMyLGo9ei5zdW0zMl80LFY9ei5zdW0zMl81LEI9SS5jaDMyLFk9SS5tYWozMixYPUkuczBfMjU2LFU9SS5zMV8yNTYscT1JLmcwXzI1NixlZT1JLmcxXzI1Nix0ZT1LLkJsb2NrSGFzaCxv''@;'; put 'put ''ZT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMs''@;'; put 'put ''MzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEz''@;'; put 'put ''OTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUy''@;'; put 'put ''ODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3''@;'; put 'put ''NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtmdW5jdGlvbiBzZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHNlKSlyZXR1cm4gbmV3IHNlO3RlLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYw''@;'; put 'put ''MDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPW9lLHRoaXMuVz1uZXcgQXJyYXkoNjQpfXouaW5oZXJpdHMoc2UsdGUpLE0uZXhwb3J0cz1zZSxzZS5ibG9ja1NpemU9NTEyLHNlLm91dFNpemU9MjU2LHNlLmhtYWNTdHJlbmd0aD0xOTIsc2UucGFkTGVuZ3RoPTY0LHNlLnBy''@;'; put 'put ''b3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGhlLHVlKXtmb3IodmFyIGNlPXRoaXMuVyxHPTA7RzwxNjtHKyspY2VbR109aGVbdWUrR107Zm9yKDtHPGNlLmxlbmd0aDtHKyspY2VbR109aihlZShjZVtHLTJdKSxjZVtHLTddLHEoY2VbRy0xNV0pLGNlW0ctMTZdKTt2YXIgYj10aGlzLmhbMF0s''@;'; put 'put ''RD10aGlzLmhbMV0sSD10aGlzLmhbMl0sTj10aGlzLmhbM10sZz10aGlzLmhbNF0sQz10aGlzLmhbNV0sUz10aGlzLmhbNl0sdj10aGlzLmhbN107Zm9yKGsodGhpcy5rLmxlbmd0aD09PWNlLmxlbmd0aCksRz0wO0c8Y2UubGVuZ3RoO0crKyl7dmFyIHA9Vih2LFUoZyksQihnLEMsUyksdGhp''@;'; put 'put ''cy5rW0ddLGNlW0ddKSx3PUUoWChiKSxZKGIsRCxIKSk7dj1TLFM9QyxDPWcsZz1FKE4scCksTj1ILEg9RCxEPWIsYj1FKHAsdyl9dGhpcy5oWzBdPUUodGhpcy5oWzBdLGIpLHRoaXMuaFsxXT1FKHRoaXMuaFsxXSxEKSx0aGlzLmhbMl09RSh0aGlzLmhbMl0sSCksdGhpcy5oWzNdPUUodGhp''@;'; put 'put ''cy5oWzNdLE4pLHRoaXMuaFs0XT1FKHRoaXMuaFs0XSxnKSx0aGlzLmhbNV09RSh0aGlzLmhbNV0sQyksdGhpcy5oWzZdPUUodGhpcy5oWzZdLFMpLHRoaXMuaFs3XT1FKHRoaXMuaFs3XSx2KX0sc2UucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oaGUpe3JldHVybiJoZXgiPT09aGU/ei50''@;'; put 'put ''b0hleDMyKHRoaXMuaCwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3NzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1OTAwKTtmdW5jdGlvbiBJKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJO0suY2FsbCh0aGlzKSx0aGlz''@;'; put 'put ''Lmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEz''@;'; put 'put ''LDMyMDQwNzU0MjhdfXouaW5oZXJpdHMoSSxLKSxNLmV4cG9ydHM9SSxJLmJsb2NrU2l6ZT0xMDI0LEkub3V0U2l6ZT0zODQsSS5obWFjU3RyZW5ndGg9MTkyLEkucGFkTGVuZ3RoPTEyOCxJLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGspe3JldHVybiJoZXgiPT09az96LnRvSGV4MzIo''@;'; put 'put ''dGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTp6LnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDU5MDA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1NzcyKSxJPVIoOTc0Niksaz16LnJvdHI2NF9oaSxFPXoucm90cjY0X2xvLGo9ei5zaHI2NF9o''@;'; put 'put ''aSxWPXouc2hyNjRfbG8sQj16LnN1bTY0LFk9ei5zdW02NF9oaSxYPXouc3VtNjRfbG8sVT16LnN1bTY0XzRfaGkscT16LnN1bTY0XzRfbG8sZWU9ei5zdW02NF81X2hpLHRlPXouc3VtNjRfNV9sbyxvZT1LLkJsb2NrSGFzaCxzZT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEs''@;'; put 'put ''NjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMx''@;'; put 'put ''MDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYx''@;'; put 'put ''MzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgy''@;'; put 'put ''LDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2''@;'; put 'put ''MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3''@;'; put 'put ''NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMz''@;'; put 'put ''NDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0''@;'; put 'put ''Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkz''@;'; put 'put ''NTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1''@;'; put 'put ''NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3''@;'; put 'put ''MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGhlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaGUpKXJldHVybiBuZXcgaGU7b2UuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkw''@;'; put 'put ''NDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1zZSx0aGlzLlc9bmV3IEFycmF5KDE2MCl9ZnVuY3Rpb24g''@;'; put 'put ''dWUodyxKLG5lLGRlLGZlKXt2YXIgeGU9dyZuZV5+dyZmZTtyZXR1cm4geGU8MCYmKHhlKz00Mjk0OTY3Mjk2KSx4ZX1mdW5jdGlvbiBjZSh3LEosbmUsZGUsZmUseGUpe3ZhciBMZT1KJmRlXn5KJnhlO3JldHVybiBMZTwwJiYoTGUrPTQyOTQ5NjcyOTYpLExlfWZ1bmN0aW9uIEcodyxKLG5l''@;'; put 'put ''LGRlLGZlKXt2YXIgeGU9dyZuZV53JmZlXm5lJmZlO3JldHVybiB4ZTwwJiYoeGUrPTQyOTQ5NjcyOTYpLHhlfWZ1bmN0aW9uIGIodyxKLG5lLGRlLGZlLHhlKXt2YXIgTGU9SiZkZV5KJnhlXmRlJnhlO3JldHVybiBMZTwwJiYoTGUrPTQyOTQ5NjcyOTYpLExlfWZ1bmN0aW9uIEQodyxKKXt2''@;'; put 'put ''YXIgbmU9ayh3LEosMjgpXmsoSix3LDIpXmsoSix3LDcpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIEgodyxKKXt2YXIgbmU9RSh3LEosMjgpXkUoSix3LDIpXkUoSix3LDcpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIE4odyxK''@;'; put 'put ''KXt2YXIgbmU9ayh3LEosMTQpXmsodyxKLDE4KV5rKEosdyw5KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBnKHcsSil7dmFyIG5lPUUodyxKLDE0KV5FKHcsSiwxOCleRShKLHcsOSk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24g''@;'; put 'put ''Qyh3LEope3ZhciBuZT1rKHcsSiwxKV5rKHcsSiw4KV5qKHcsSiw3KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBTKHcsSil7dmFyIG5lPUUodyxKLDEpXkUodyxKLDgpXlYodyxKLDcpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9u''@;'; put 'put ''IHYodyxKKXt2YXIgbmU9ayh3LEosMTkpXmsoSix3LDI5KV5qKHcsSiw2KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBwKHcsSil7dmFyIG5lPUUodyxKLDE5KV5FKEosdywyOSleVih3LEosNik7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ei5p''@;'; put 'put ''bmhlcml0cyhoZSxvZSksTS5leHBvcnRzPWhlLGhlLmJsb2NrU2l6ZT0xMDI0LGhlLm91dFNpemU9NTEyLGhlLmhtYWNTdHJlbmd0aD0xOTIsaGUucGFkTGVuZ3RoPTEyOCxoZS5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbih3LEope2Zvcih2YXIgbmU9dGhpcy5XLGRlPTA7ZGU8''@;'; put 'put ''MzI7ZGUrKyluZVtkZV09d1tKK2RlXTtmb3IoO2RlPG5lLmxlbmd0aDtkZSs9Mil7dmFyIGZlPXYobmVbZGUtNF0sbmVbZGUtM10pLHhlPXAobmVbZGUtNF0sbmVbZGUtM10pLExlPW5lW2RlLTE0XSxGZT1uZVtkZS0xM10sT2U9QyhuZVtkZS0zMF0sbmVbZGUtMjldKSxCZT1TKG5lW2RlLTMw''@;'; put 'put ''XSxuZVtkZS0yOV0pLFdlPW5lW2RlLTMyXSxLZT1uZVtkZS0zMV07bmVbZGVdPVUoZmUseGUsTGUsRmUsT2UsQmUsV2UsS2UpLG5lW2RlKzFdPXEoZmUseGUsTGUsRmUsT2UsQmUsV2UsS2UpfX0saGUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odyxKKXt0aGlzLl9wcmVwYXJlQmxvY2so''@;'; put 'put ''dyxKKTt2YXIgbmU9dGhpcy5XLGRlPXRoaXMuaFswXSxmZT10aGlzLmhbMV0seGU9dGhpcy5oWzJdLExlPXRoaXMuaFszXSxGZT10aGlzLmhbNF0sT2U9dGhpcy5oWzVdLEJlPXRoaXMuaFs2XSxXZT10aGlzLmhbN10sS2U9dGhpcy5oWzhdLFllPXRoaXMuaFs5XSxKZT10aGlzLmhbMTBdLGx0''@;'; put 'put ''PXRoaXMuaFsxMV0sUGU9dGhpcy5oWzEyXSxiZT10aGlzLmhbMTNdLEFlPXRoaXMuaFsxNF0sVGU9dGhpcy5oWzE1XTtJKHRoaXMuay5sZW5ndGg9PT1uZS5sZW5ndGgpO2Zvcih2YXIgcWU9MDtxZTxuZS5sZW5ndGg7cWUrPTIpe3ZhciBYZT1BZSxVZT1UZSxodD1OKEtlLFllKSxNZT1nKEtl''@;'; put 'put ''LFllKSxEZT11ZShLZSwwLEplLDAsUGUpLHplPWNlKDAsWWUsMCxsdCwwLGJlKSxpdD10aGlzLmtbcWVdLHV0PXRoaXMua1txZSsxXSxNdD1uZVtxZV0sSHQ9bmVbcWUrMV0sUHQ9ZWUoWGUsVWUsaHQsTWUsRGUsemUsaXQsdXQsTXQsSHQpLG9uPXRlKFhlLFVlLGh0LE1lLERlLHplLGl0LHV0''@;'; put 'put ''LE10LEh0KTtYZT1EKGRlLGZlKSxVZT1IKGRlLGZlKSxodD1HKGRlLDAseGUsMCxGZSksTWU9YigwLGZlLDAsTGUsMCxPZSk7dmFyIENuPVkoWGUsVWUsaHQsTWUpLFV0PVgoWGUsVWUsaHQsTWUpO0FlPVBlLFRlPWJlLFBlPUplLGJlPWx0LEplPUtlLGx0PVllLEtlPVkoQmUsV2UsUHQsb24p''@;'; put 'put ''LFllPVgoV2UsV2UsUHQsb24pLEJlPUZlLFdlPU9lLEZlPXhlLE9lPUxlLHhlPWRlLExlPWZlLGRlPVkoUHQsb24sQ24sVXQpLGZlPVgoUHQsb24sQ24sVXQpfUIodGhpcy5oLDAsZGUsZmUpLEIodGhpcy5oLDIseGUsTGUpLEIodGhpcy5oLDQsRmUsT2UpLEIodGhpcy5oLDYsQmUsV2UpLEIo''@;'; put 'put ''dGhpcy5oLDgsS2UsWWUpLEIodGhpcy5oLDEwLEplLGx0KSxCKHRoaXMuaCwxMixQZSxiZSksQih0aGlzLmgsMTQsQWUsVGUpfSxoZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/ei50b0hleDMyKHRoaXMuaCwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaCwi''@;'; put 'put ''YmlnIil9fSw3MDM4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KS5yb3RyMzI7ZnVuY3Rpb24gSyhFLGosVil7cmV0dXJuIEUmal5+RSZWfWZ1bmN0aW9uIEkoRSxqLFYpe3JldHVybiBFJmpeRSZWXmomVn1mdW5jdGlvbiBrKEUsaixWKXtyZXR1cm4gRV5qXlZ9Ty5mdF8x''@;'; put 'put ''PWZ1bmN0aW9uKEUsaixWLEIpe3JldHVybiAwPT09RT9LKGosVixCKToxPT09RXx8Mz09PUU/ayhqLFYsQik6Mj09PUU/SShqLFYsQik6dm9pZCAwfSxPLmNoMzI9SyxPLm1hajMyPUksTy5wMzI9ayxPLnMwXzI1Nj1mdW5jdGlvbihFKXtyZXR1cm4geihFLDIpXnooRSwxMyleeihFLDIyKX0s''@;'; put 'put ''Ty5zMV8yNTY9ZnVuY3Rpb24oRSl7cmV0dXJuIHooRSw2KV56KEUsMTEpXnooRSwyNSl9LE8uZzBfMjU2PWZ1bmN0aW9uKEUpe3JldHVybiB6KEUsNyleeihFLDE4KV5FPj4+M30sTy5nMV8yNTY9ZnVuY3Rpb24oRSl7cmV0dXJuIHooRSwxNyleeihFLDE5KV5FPj4+MTB9fSw2NDM2OihNLE8s''@;'; put 'put ''Uik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NzQ2KSxLPVIoNTcxNyk7ZnVuY3Rpb24gSShWLEIpe3JldHVybiA1NTI5Nj09KDY0NTEyJlYuY2hhckNvZGVBdChCKSkmJiEoQjwwfHxCKzE+PVYubGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZWLmNoYXJDb2RlQXQoQisxKSl9ZnVuY3Rpb24gayhW''@;'; put 'put ''KXtyZXR1cm4oVj4+PjI0fFY+Pj44JjY1MjgwfFY8PDgmMTY3MTE2ODB8KDI1NSZWKTw8MjQpPj4+MH1mdW5jdGlvbiBFKFYpe3JldHVybiAxPT09Vi5sZW5ndGg/IjAiK1Y6Vn1mdW5jdGlvbiBqKFYpe3JldHVybiA3PT09Vi5sZW5ndGg/IjAiK1Y6Nj09PVYubGVuZ3RoPyIwMCIrVjo1PT09''@;'; put 'put ''Vi5sZW5ndGg/IjAwMCIrVjo0PT09Vi5sZW5ndGg/IjAwMDAiK1Y6Mz09PVYubGVuZ3RoPyIwMDAwMCIrVjoyPT09Vi5sZW5ndGg/IjAwMDAwMCIrVjoxPT09Vi5sZW5ndGg/IjAwMDAwMDAiK1Y6Vn1PLmluaGVyaXRzPUssTy50b0FycmF5PWZ1bmN0aW9uKFYsQil7aWYoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShWKSlyZXR1cm4gVi5zbGljZSgpO2lmKCFWKXJldHVybltdO3ZhciBZPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgVilpZihCKXtpZigiaGV4Ij09PUIpZm9yKChWPVYucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoVj0iMCIrViksVT0wO1U8Vi5sZW5ndGg7VSs9''@;'; put 'put ''MilZLnB1c2gocGFyc2VJbnQoVltVXStWW1UrMV0sMTYpKX1lbHNlIGZvcih2YXIgWD0wLFU9MDtVPFYubGVuZ3RoO1UrKyl7dmFyIHE9Vi5jaGFyQ29kZUF0KFUpO3E8MTI4P1lbWCsrXT1xOnE8MjA0OD8oWVtYKytdPXE+PjZ8MTkyLFlbWCsrXT02MyZxfDEyOCk6SShWLFUpPyhxPTY1NTM2''@;'; put 'put ''KygoMTAyMyZxKTw8MTApKygxMDIzJlYuY2hhckNvZGVBdCgrK1UpKSxZW1grK109cT4+MTh8MjQwLFlbWCsrXT1xPj4xMiY2M3wxMjgsWVtYKytdPXE+PjYmNjN8MTI4LFlbWCsrXT02MyZxfDEyOCk6KFlbWCsrXT1xPj4xMnwyMjQsWVtYKytdPXE+PjYmNjN8MTI4LFlbWCsrXT02MyZxfDEy''@;'; put 'put ''OCl9ZWxzZSBmb3IoVT0wO1U8Vi5sZW5ndGg7VSsrKVlbVV09MHxWW1VdO3JldHVybiBZfSxPLnRvSGV4PWZ1bmN0aW9uKFYpe2Zvcih2YXIgQj0iIixZPTA7WTxWLmxlbmd0aDtZKyspQis9RShWW1ldLnRvU3RyaW5nKDE2KSk7cmV0dXJuIEJ9LE8uaHRvbmw9ayxPLnRvSGV4MzI9ZnVuY3Rp''@;'; put 'put ''b24oVixCKXtmb3IodmFyIFk9IiIsWD0wO1g8Vi5sZW5ndGg7WCsrKXt2YXIgVT1WW1hdOyJsaXR0bGUiPT09QiYmKFU9ayhVKSksWSs9aihVLnRvU3RyaW5nKDE2KSl9cmV0dXJuIFl9LE8uemVybzI9RSxPLnplcm84PWosTy5qb2luMzI9ZnVuY3Rpb24oVixCLFksWCl7dmFyIFU9WS1CO3oo''@;'; put 'put ''VSU0PT0wKTtmb3IodmFyIHE9bmV3IEFycmF5KFUvNCksZWU9MCx0ZT1CO2VlPHEubGVuZ3RoO2VlKyssdGUrPTQpcVtlZV09KCJiaWciPT09WD9WW3RlXTw8MjR8Vlt0ZSsxXTw8MTZ8Vlt0ZSsyXTw8OHxWW3RlKzNdOlZbdGUrM108PDI0fFZbdGUrMl08PDE2fFZbdGUrMV08PDh8Vlt0ZV0p''@;'; put 'put ''Pj4+MDtyZXR1cm4gcX0sTy5zcGxpdDMyPWZ1bmN0aW9uKFYsQil7Zm9yKHZhciBZPW5ldyBBcnJheSg0KlYubGVuZ3RoKSxYPTAsVT0wO1g8Vi5sZW5ndGg7WCsrLFUrPTQpe3ZhciBxPVZbWF07ImJpZyI9PT1CPyhZW1VdPXE+Pj4yNCxZW1UrMV09cT4+PjE2JjI1NSxZW1UrMl09cT4+Pjgm''@;'; put 'put ''MjU1LFlbVSszXT0yNTUmcSk6KFlbVSszXT1xPj4+MjQsWVtVKzJdPXE+Pj4xNiYyNTUsWVtVKzFdPXE+Pj44JjI1NSxZW1VdPTI1NSZxKX1yZXR1cm4gWX0sTy5yb3RyMzI9ZnVuY3Rpb24oVixCKXtyZXR1cm4gVj4+PkJ8Vjw8MzItQn0sTy5yb3RsMzI9ZnVuY3Rpb24oVixCKXtyZXR1cm4g''@;'; put 'put ''Vjw8QnxWPj4+MzItQn0sTy5zdW0zMj1mdW5jdGlvbihWLEIpe3JldHVybiBWK0I+Pj4wfSxPLnN1bTMyXzM9ZnVuY3Rpb24oVixCLFkpe3JldHVybiBWK0IrWT4+PjB9LE8uc3VtMzJfND1mdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gVitCK1krWD4+PjB9LE8uc3VtMzJfNT1mdW5jdGlvbihW''@;'; put 'put ''LEIsWSxYLFUpe3JldHVybiBWK0IrWStYK1U+Pj4wfSxPLnN1bTY0PWZ1bmN0aW9uKFYsQixZLFgpe3ZhciBxPVgrVltCKzFdPj4+MDtWW0JdPShxPFg/MTowKStZK1ZbQl0+Pj4wLFZbQisxXT1xfSxPLnN1bTY0X2hpPWZ1bmN0aW9uKFYsQixZLFgpe3JldHVybihCK1g+Pj4wPEI/MTowKStW''@;'; put 'put ''K1k+Pj4wfSxPLnN1bTY0X2xvPWZ1bmN0aW9uKFYsQixZLFgpe3JldHVybiBCK1g+Pj4wfSxPLnN1bTY0XzRfaGk9ZnVuY3Rpb24oVixCLFksWCxVLHEsZWUsdGUpe3ZhciBvZT0wLHNlPUI7cmV0dXJuIG9lKz0oc2U9c2UrWD4+PjApPEI/MTowLG9lKz0oc2U9c2UrcT4+PjApPHE/MTowLFYr''@;'; put 'put ''WStVK2VlKyhvZSs9KHNlPXNlK3RlPj4+MCk8dGU/MTowKT4+PjB9LE8uc3VtNjRfNF9sbz1mdW5jdGlvbihWLEIsWSxYLFUscSxlZSx0ZSl7cmV0dXJuIEIrWCtxK3RlPj4+MH0sTy5zdW02NF81X2hpPWZ1bmN0aW9uKFYsQixZLFgsVSxxLGVlLHRlLG9lLHNlKXt2YXIgaGU9MCx1ZT1CO3Jl''@;'; put 'put ''dHVybiBoZSs9KHVlPXVlK1g+Pj4wKTxCPzE6MCxoZSs9KHVlPXVlK3E+Pj4wKTxxPzE6MCxoZSs9KHVlPXVlK3RlPj4+MCk8dGU/MTowLFYrWStVK2VlK29lKyhoZSs9KHVlPXVlK3NlPj4+MCk8c2U/MTowKT4+PjB9LE8uc3VtNjRfNV9sbz1mdW5jdGlvbihWLEIsWSxYLFUscSxlZSx0ZSxv''@;'; put 'put ''ZSxzZSl7cmV0dXJuIEIrWCtxK3RlK3NlPj4+MH0sTy5yb3RyNjRfaGk9ZnVuY3Rpb24oVixCLFkpe3JldHVybihCPDwzMi1ZfFY+Pj5ZKT4+PjB9LE8ucm90cjY0X2xvPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4oVjw8MzItWXxCPj4+WSk+Pj4wfSxPLnNocjY0X2hpPWZ1bmN0aW9uKFYsQixZ''@;'; put 'put ''KXtyZXR1cm4gVj4+Pll9LE8uc2hyNjRfbG89ZnVuY3Rpb24oVixCLFkpe3JldHVybihWPDwzMi1ZfEI+Pj5ZKT4+PjB9fSwyMTU2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzE1KSxLPVIoNDUwNCksST1SKDk3NDYpO2Z1bmN0aW9uIGsoRSl7aWYoISh0aGlzIGluc3RhbmNl''@;'; put 'put ''b2YgaykpcmV0dXJuIG5ldyBrKEUpO3RoaXMuaGFzaD1FLmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhRS5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT1FLm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVk''@;'; put 'put ''PW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBqPUsudG9BcnJheShFLmVudHJvcHksRS5lbnRyb3B5RW5jfHwiaGV4IiksVj1LLnRvQXJyYXkoRS5ub25jZSxFLm5vbmNlRW5jfHwiaGV4IiksQj1LLnRvQXJyYXkoRS5wZXJzLEUucGVy''@;'; put 'put ''c0VuY3x8ImhleCIpO0koai5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoaixWLEIpfU0uZXhwb3J0cz1rLGsucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEUsaixW''@;'; put 'put ''KXt2YXIgQj1FLmNvbmNhdChqKS5jb25jYXQoVik7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgWT0wO1k8dGhpcy5WLmxlbmd0aDtZKyspdGhpcy5LW1ldPTAsdGhpcy5WW1ldPTE7dGhpcy5fdXBkYXRlKEIp''@;'; put 'put ''LHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxrLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgei5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxrLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEUpe3ZhciBqPXRoaXMuX2ht''@;'; put 'put ''YWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTtFJiYoaj1qLnVwZGF0ZShFKSksdGhpcy5LPWouZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxFJiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51''@;'; put 'put ''cGRhdGUoRSkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LGsucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihFLGosVixCKXsic3RyaW5nIiE9dHlwZW9mIGomJihCPVYsVj1qLGo9bnVsbCksRT1LLnRvQXJyYXkoRSxqKSxWPUsudG9BcnJh''@;'; put 'put ''eShWLEIpLEkoRS5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShFLmNvbmNhdChWfHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxrLnByb3RvdHlwZS5nZW5lcmF0ZT1m''@;'; put 'put ''dW5jdGlvbihFLGosVixCKXtpZih0aGlzLl9yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgaiYmKEI9VixWPWosaj1udWxsKSxWJiYoVj1LLnRvQXJyYXkoVixCfHwiaGV4IiksdGhpcy5fdXBk''@;'; put 'put ''YXRlKFYpKTtmb3IodmFyIFk9W107WS5sZW5ndGg8RTspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxZPVkuY29uY2F0KHRoaXMuVik7dmFyIFg9WS5zbGljZSgwLEUpO3JldHVybiB0aGlzLl91cGRhdGUoViksdGhpcy5fcmVzZWVkKyssSy5lbmNvZGUoWCxq''@;'; put 'put ''KX19LDY0NTooTSxPKT0+e08ucmVhZD1mdW5jdGlvbihSLHosSyxJLGspe3ZhciBFLGosVj04KmstSS0xLEI9KDE8PFYpLTEsWT1CPj4xLFg9LTcsVT1LP2stMTowLHE9Sz8tMToxLGVlPVJbeitVXTtmb3IoVSs9cSxFPWVlJigxPDwtWCktMSxlZT4+PS1YLFgrPVY7WD4wO0U9MjU2KkUrUlt6''@;'; put 'put ''K1VdLFUrPXEsWC09OCk7Zm9yKGo9RSYoMTw8LVgpLTEsRT4+PS1YLFgrPUk7WD4wO2o9MjU2KmorUlt6K1VdLFUrPXEsWC09OCk7aWYoMD09PUUpRT0xLVk7ZWxzZXtpZihFPT09QilyZXR1cm4gaj9OYU46MS8wKihlZT8tMToxKTtqKz1NYXRoLnBvdygyLEkpLEUtPVl9cmV0dXJuKGVlPy0x''@;'; put 'put ''OjEpKmoqTWF0aC5wb3coMixFLUkpfSxPLndyaXRlPWZ1bmN0aW9uKFIseixLLEksayxFKXt2YXIgaixWLEIsWT04KkUtay0xLFg9KDE8PFkpLTEsVT1YPj4xLHE9MjM9PT1rP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxlZT1JPzA6RS0xLHRlPUk/MTotMSxvZT16PDB8fDA9''@;'; put 'put ''PT16JiYxL3o8MD8xOjA7Zm9yKHo9TWF0aC5hYnMoeiksaXNOYU4oeil8fHo9PT0xLzA/KFY9aXNOYU4oeik/MTowLGo9WCk6KGo9TWF0aC5mbG9vcihNYXRoLmxvZyh6KS9NYXRoLkxOMikseiooQj1NYXRoLnBvdygyLC1qKSk8MSYmKGotLSxCKj0yKSwoeis9aitVPj0xP3EvQjpxKk1hdGgu''@;'; put 'put ''cG93KDIsMS1VKSkqQj49MiYmKGorKyxCLz0yKSxqK1U+PVg/KFY9MCxqPVgpOmorVT49MT8oVj0oeipCLTEpKk1hdGgucG93KDIsayksais9VSk6KFY9eipNYXRoLnBvdygyLFUtMSkqTWF0aC5wb3coMixrKSxqPTApKTtrPj04O1JbSytlZV09MjU1JlYsZWUrPXRlLFYvPTI1NixrLT04KTtm''@;'; put 'put ''b3Ioaj1qPDxrfFYsWSs9aztZPjA7UltLK2VlXT0yNTUmaixlZSs9dGUsai89MjU2LFktPTgpO1JbSytlZS10ZV18PTEyOCpvZX19LDc4NDQ6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDI0NzkpLEk9T2JqZWN0LmNyZWF0ZShudWxsKSxrPVIoNzc4KTtNLmV4cG9ydHM9SyhmdW5jdGlv''@;'; put 'put ''bihFLGope3JldHVybiBJW0VdPyhJW0VdLnB1c2goaiksbnVsbCk6KElbRV09W2pdLFY9RSxrKGZ1bmN0aW9uIEIoKXt2YXIgWT1JW1ZdLFg9WS5sZW5ndGgsVT1mdW5jdGlvbihlZSl7Zm9yKHZhciB0ZT1lZS5sZW5ndGgsb2U9W10sc2U9MDtzZTx0ZTtzZSsrKW9lW3NlXT1lZVtzZV07cmV0''@;'; put 'put ''dXJuIG9lfShhcmd1bWVudHMpO3RyeXtmb3IodmFyIHE9MDtxPFg7cSsrKVlbcV0uYXBwbHkobnVsbCxVKX1maW5hbGx5e1kubGVuZ3RoPlg/KFkuc3BsaWNlKDAsWCksei5uZXh0VGljayhmdW5jdGlvbigpe0IuYXBwbHkobnVsbCxVKX0pKTpkZWxldGUgSVtWXX19KSk7dmFyIFZ9KX0sNTcx''@;'; put 'put ''NzpNPT57TS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE8sUil7UiYmKE8uc3VwZXJfPVIsTy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOk8sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITB9fSkpfTpmdW5jdGlvbihPLFIpe2lmKFIpe08uc3VwZXJfPVI7dmFyIHo9ZnVuY3Rpb24oKXt9O3oucHJvdG90eXBlPVIucHJvdG90eXBlLE8ucHJvdG90eXBlPW5ldyB6LE8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU99fX0sMjU4NDooTSxPLFIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciB6PVIoNjQxMCkoKSxLPVIoMTkyNCkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxJPWZ1bmN0aW9uKGope3JldHVybiEoeiYmaiYmIm9iamVjdCI9PXR5cGVvZiBqJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gaikmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT09SyhqKX0saz1m''@;'; put 'put ''dW5jdGlvbihqKXtyZXR1cm4hIUkoail8fG51bGwhPT1qJiYib2JqZWN0Ij09dHlwZW9mIGomJiJudW1iZXIiPT10eXBlb2Ygai5sZW5ndGgmJmoubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iIT09SyhqKSYmIltvYmplY3QgRnVuY3Rpb25dIj09PUsoai5jYWxsZWUpfSxFPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIEkoYXJndW1lbnRzKX0oKTtJLmlzTGVnYWN5QXJndW1lbnRzPWssTS5leHBvcnRzPUU/STprfSw1MzIwOk09PnsidXNlIHN0cmljdCI7dmFyIE8sUix6PUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxLPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxl''@;'; put 'put ''Y3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEsmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e089T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyBSfX0pLFI9e30sSyhmdW5jdGlv''@;'; put 'put ''bigpe3Rocm93IDQyfSxudWxsLE8pfWNhdGNoKFUpe1UhPT1SJiYoSz1udWxsKX1lbHNlIEs9bnVsbDt2YXIgST0vXlxzKmNsYXNzXGIvLGs9ZnVuY3Rpb24oVSl7dHJ5e3ZhciBxPXouY2FsbChVKTtyZXR1cm4gSS50ZXN0KHEpfWNhdGNoe3JldHVybiExfX0sRT1mdW5jdGlvbihVKXt0cnl7''@;'; put 'put ''cmV0dXJuIWsoVSkmJih6LmNhbGwoVSksITApfWNhdGNoe3JldHVybiExfX0saj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcsQj0hKDAgaW5bLF0pLFk9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIFg9ZG9jdW1lbnQuYWxsO2ouY2FsbChYKT09PWouY2FsbChkb2N1bWVudC5hbGwpJiYoWT1mdW5jdGlvbihVKXtpZigoQnx8IVUpJiYodm9pZCAwPT09VXx8Im9iamVjdCI9PXR5cGVvZiBVKSl0cnl7dmFyIHE9ai5jYWxsKFUpO3JldHVybigi''@;'; put 'put ''W29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0iPT09cXx8IltvYmplY3QgSFRNTCBkb2N1bWVudC5hbGwgY2xhc3NdIj09PXF8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT1xfHwiW29iamVjdCBPYmplY3RdIj09PXEpJiZudWxsPT1VKCIiKX1jYXRjaHt9cmV0dXJuITF9KX1NLmV4cG9y''@;'; put 'put ''dHM9Sz9mdW5jdGlvbihVKXtpZihZKFUpKXJldHVybiEwO2lmKCFVfHwiZnVuY3Rpb24iIT10eXBlb2YgVSYmIm9iamVjdCIhPXR5cGVvZiBVKXJldHVybiExO3RyeXtLKFUsbnVsbCxPKX1jYXRjaChxKXtpZihxIT09UilyZXR1cm4hMX1yZXR1cm4hayhVKSYmRShVKX06ZnVuY3Rpb24oVSl7''@;'; put 'put ''aWYoWShVKSlyZXR1cm4hMDtpZighVXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFUmJiJvYmplY3QiIT10eXBlb2YgVSlyZXR1cm4hMTtpZihWKXJldHVybiBFKFUpO2lmKGsoVSkpcmV0dXJuITE7dmFyIHE9ai5jYWxsKFUpO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PXEmJiJbb2JqZWN0''@;'; put 'put ''IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1xJiYhL15cW29iamVjdCBIVE1MLy50ZXN0KHEpKSYmRShVKX19LDg2NjI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsST1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsaz0vXlxzKig/OmZ1''@;'; put 'put ''bmN0aW9uKT9cKi8sRT1SKDY0MTApKCksaj1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7TS5leHBvcnRzPWZ1bmN0aW9uKFYpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBWKXJldHVybiExO2lmKGsudGVzdChJLmNhbGwoVikpKXJldHVybiEwO2lmKCFFKXJldHVybiJbb2JqZWN0IEdlbmVyYXRvckZ1''@;'; put 'put ''bmN0aW9uXSI9PT1LLmNhbGwoVik7aWYoIWopcmV0dXJuITE7aWYodm9pZCAwPT09eil7dmFyIEI9ZnVuY3Rpb24oKXtpZighRSlyZXR1cm4hMTt0cnl7cmV0dXJuIEZ1bmN0aW9uKCJyZXR1cm4gZnVuY3Rpb24qKCkge30iKSgpfWNhdGNoe319KCk7ej0hIUImJmooQil9cmV0dXJuIGooVik9''@;'; put 'put ''PT16fX0sODYxMTpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4gTyE9T319LDM2MDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTU1OSksSz1SKDQyODkpLEk9Uig4NjExKSxrPVIoOTQxNSksRT1SKDMxOTQpLGo9eihrKCksTnVtYmVyKTtLKGos''@;'; put 'put ''e2dldFBvbHlmaWxsOmssaW1wbGVtZW50YXRpb246SSxzaGltOkV9KSxNLmV4cG9ydHM9an0sOTQxNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODYxMSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiYmTnVtYmVyLmlzTmFOKE5hTikmJiFOdW1iZXIu''@;'; put 'put ''aXNOYU4oImEiKT9OdW1iZXIuaXNOYU46en19LDMxOTQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQyODkpLEs9Uig5NDE1KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgST1LKCk7cmV0dXJuIHooTnVtYmVyLHtpc05hTjpJfSx7aXNOYU46ZnVuY3Rpb24oKXtyZXR1cm4gTnVt''@;'; put 'put ''YmVyLmlzTmFOIT09SX19KSxJfX0sNTY5MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDAyOSksSz1SKDMwODMpLEk9UigxOTI0KSxrPUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxFPVIoNjQxMCkoKSxqPVIoNzI5NiksVj10eXBlb2YgZ2xvYmFsVGhpcz4idSI/Ui5n''@;'; put 'put ''Omdsb2JhbFRoaXMsQj1LKCksWT1JKCJBcnJheS5wcm90b3R5cGUuaW5kZXhPZiIsITApfHxmdW5jdGlvbihlZSx0ZSl7Zm9yKHZhciBvZT0wO29lPGVlLmxlbmd0aDtvZSs9MSlpZihlZVtvZV09PT10ZSlyZXR1cm4gb2U7cmV0dXJuLTF9LFg9SSgiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIp''@;'; put 'put ''LFU9e30scT1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7RSYmaiYmcSYmeihCLGZ1bmN0aW9uKGVlKXt2YXIgdGU9bmV3IFZbZWVdO2lmKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB0ZSl7dmFyIG9lPXEodGUpLHNlPWoob2UsU3ltYm9sLnRvU3RyaW5nVGFnKTtpZighc2Upe3ZhciBoZT1xKG9lKTtz''@;'; put 'put ''ZT1qKGhlLFN5bWJvbC50b1N0cmluZ1RhZyl9VVtlZV09c2UuZ2V0fX0pLE0uZXhwb3J0cz1mdW5jdGlvbihlZSl7aWYoIWVlfHwib2JqZWN0IiE9dHlwZW9mIGVlKXJldHVybiExO2lmKCFFfHwhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBlZSkpe3ZhciB0ZT1YKGsoZWUpLDgsLTEpO3JldHVy''@;'; put 'put ''biBZKEIsdGUpPi0xfXJldHVybiEhaiYmKG9lPWVlLHNlPSExLHooVSxmdW5jdGlvbihoZSx1ZSl7aWYoIXNlKXRyeXtzZT1oZS5jYWxsKG9lKT09PXVlfWNhdGNoe319KSxzZSk7dmFyIG9lLHNlfX0sNjgxMzooTSxPLFIpPT57bGV0IHo7dHJ5e3o9Uig3Nyl9Y2F0Y2h7ej1SKDQxMjkpfWNv''@;'; put 'put ''bnN0IEs9Uig4OTgxKSx7c3RyaW5naWZ5Okksc3RyaXBCb206a309Uig2NzgwKSxFPXtyZWFkRmlsZTpLLmZyb21Qcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGo9YWUoZnVuY3Rpb24qKFYsQj17fSl7InN0cmluZyI9PXR5cGVvZiBCJiYoQj17ZW5jb2Rpbmc6Qn0pO2NvbnN0IFk9Qi5mc3x8eixY''@;'; put 'put ''PSEoInRocm93cyJpbiBCKXx8Qi50aHJvd3M7bGV0IFUscT15aWVsZCBLLmZyb21DYWxsYmFjayhZLnJlYWRGaWxlKShWLEIpO3E9ayhxKTt0cnl7VT1KU09OLnBhcnNlKHEsQj9CLnJldml2ZXI6bnVsbCl9Y2F0Y2goZWUpe2lmKFgpdGhyb3cgZWUubWVzc2FnZT1gJHtWfTogJHtlZS5tZXNz''@;'; put 'put ''YWdlfWAsZWU7cmV0dXJuIG51bGx9cmV0dXJuIFV9KTtyZXR1cm4gZnVuY3Rpb24oVil7cmV0dXJuIGouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkscmVhZEZpbGVTeW5jOmZ1bmN0aW9uKGosVj17fSl7InN0cmluZyI9PXR5cGVvZiBWJiYoVj17ZW5jb2Rpbmc6Vn0pO2NvbnN0IEI9Vi5m''@;'; put 'put ''c3x8eixZPSEoInRocm93cyJpbiBWKXx8Vi50aHJvd3M7dHJ5e2xldCBYPUIucmVhZEZpbGVTeW5jKGosVik7cmV0dXJuIFg9ayhYKSxKU09OLnBhcnNlKFgsVi5yZXZpdmVyKX1jYXRjaChYKXtpZihZKXRocm93IFgubWVzc2FnZT1gJHtqfTogJHtYLm1lc3NhZ2V9YCxYO3JldHVybiBudWxs''@;'; put 'put ''fX0sd3JpdGVGaWxlOksuZnJvbVByb21pc2UoZnVuY3Rpb24oKXt2YXIgaj1hZShmdW5jdGlvbiooVixCLFk9e30pe2NvbnN0IFg9WS5mc3x8eixVPUkoQixZKTt5aWVsZCBLLmZyb21DYWxsYmFjayhYLndyaXRlRmlsZSkoVixVLFkpfSk7cmV0dXJuIGZ1bmN0aW9uKFYsQil7cmV0dXJuIGou''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksd3JpdGVGaWxlU3luYzpmdW5jdGlvbihqLFYsQj17fSl7Y29uc3QgWT1CLmZzfHx6LFg9SShWLEIpO3JldHVybiBZLndyaXRlRmlsZVN5bmMoaixYLEIpfX07TS5leHBvcnRzPUV9LDY3ODA6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVy''@;'; put 'put ''O00uZXhwb3J0cz17c3RyaW5naWZ5OmZ1bmN0aW9uKEsse0VPTDpJPSJcbiIsZmluYWxFT0w6az0hMCxyZXBsYWNlcjpFPW51bGwsc3BhY2VzOmp9PXt9KXtjb25zdCBWPWs/SToiIjtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoSyxFLGopLnJlcGxhY2UoL1xuL2csSSkrVn0sc3RyaXBCb206ZnVu''@;'; put 'put ''Y3Rpb24oSyl7cmV0dXJuIHouaXNCdWZmZXIoSykmJihLPUsudG9TdHJpbmcoInV0ZjgiKSksSy5yZXBsYWNlKC9eXHVGRUZGLywiIil9fX0sNjI0NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooail7dGhpcy5tZXNzYWdlPWp9Ui5yKE8pLFIuZChPLHtJbnZhbGlkVG9rZW5F''@;'; put 'put ''cnJvcjooKT0+ayxkZWZhdWx0OigpPT5FfSksKHoucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZENoYXJhY3RlckVycm9yIjt2YXIgSz10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmF0b2ImJndpbmRvdy5hdG9iLmJpbmQod2luZG93KXx8ZnVuY3Rpb24oail7dmFyIFY9U3Ry''@;'; put 'put ''aW5nKGopLnJlcGxhY2UoLz0rJC8sIiIpO2lmKFYubGVuZ3RoJTQ9PTEpdGhyb3cgbmV3IHooIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIik7Zm9yKHZhciBCLFksWD0wLFU9MCxxPSIiO1k9Vi5jaGFyQXQoVSsrKTt+''@;'; put 'put ''WSYmKEI9WCU0PzY0KkIrWTpZLFgrKyU0KT9xKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZCPj4oLTIqWCY2KSk6MClZPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIuaW5kZXhPZihZKTtyZXR1cm4gcX07ZnVuY3Rp''@;'; put 'put ''b24gayhqKXt0aGlzLm1lc3NhZ2U9an0oay5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkVG9rZW5FcnJvciI7Y29uc3QgRT1mdW5jdGlvbihqLFYpe2lmKCJzdHJpbmciIT10eXBlb2Ygail0aHJvdyBuZXcgaygiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQiKTt2YXIgQj0hMD09''@;'; put 'put ''PShWPVZ8fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBJKGope3ZhciBWPWoucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKFYubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztjYXNlIDI6Vis9Ij09IjticmVhaztjYXNlIDM6Vis9''@;'; put 'put ''Ij0iO2JyZWFrO2RlZmF1bHQ6dGhyb3ciSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoSyhWKS5yZXBsYWNlKC8oLikvZyxmdW5jdGlvbihZLFgpe3ZhciBVPVguY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTty''@;'; put 'put ''ZXR1cm4gVS5sZW5ndGg8MiYmKFU9IjAiK1UpLCIlIitVfSkpfWNhdGNoe3JldHVybiBLKFYpfX0oai5zcGxpdCgiLiIpW0JdKSl9Y2F0Y2goWSl7dGhyb3cgbmV3IGsoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiAiK1kubWVzc2FnZSl9fX0sMjMxODooTSxPLFIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciB6PVIoNTcxNyksSz1SKDMzNDkpLEk9Uig5NTA5KS5CdWZmZXIsaz1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIEUoKXtLLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVu''@;'; put 'put ''Y3Rpb24gaihVLHEpe3JldHVybiBVPDxxfFU+Pj4zMi1xfWZ1bmN0aW9uIFYoVSxxLGVlLHRlLG9lLHNlLGhlKXtyZXR1cm4gaihVKyhxJmVlfH5xJnRlKStvZStzZXwwLGhlKStxfDB9ZnVuY3Rpb24gQihVLHEsZWUsdGUsb2Usc2UsaGUpe3JldHVybiBqKFUrKHEmdGV8ZWUmfnRlKStvZStz''@;'; put 'put ''ZXwwLGhlKStxfDB9ZnVuY3Rpb24gWShVLHEsZWUsdGUsb2Usc2UsaGUpe3JldHVybiBqKFUrKHFeZWVedGUpK29lK3NlfDAsaGUpK3F8MH1mdW5jdGlvbiBYKFUscSxlZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIGooVSsoZWVeKHF8fnRlKSkrb2Urc2V8MCxoZSkrcXwwfXooRSxLKSxFLnByb3Rv''@;'; put 'put ''dHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBVPWsscT0wO3E8MTY7KytxKVVbcV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpxKTt2YXIgZWU9dGhpcy5fYSx0ZT10aGlzLl9iLG9lPXRoaXMuX2Msc2U9dGhpcy5fZDtlZT1WKGVlLHRlLG9lLHNlLFVbMF0sMzYxNDA5MDM2MCw3''@;'; put 'put ''KSxzZT1WKHNlLGVlLHRlLG9lLFVbMV0sMzkwNTQwMjcxMCwxMiksb2U9VihvZSxzZSxlZSx0ZSxVWzJdLDYwNjEwNTgxOSwxNyksdGU9Vih0ZSxvZSxzZSxlZSxVWzNdLDMyNTA0NDE5NjYsMjIpLGVlPVYoZWUsdGUsb2Usc2UsVVs0XSw0MTE4NTQ4Mzk5LDcpLHNlPVYoc2UsZWUsdGUsb2Us''@;'; put 'put ''VVs1XSwxMjAwMDgwNDI2LDEyKSxvZT1WKG9lLHNlLGVlLHRlLFVbNl0sMjgyMTczNTk1NSwxNyksdGU9Vih0ZSxvZSxzZSxlZSxVWzddLDQyNDkyNjEzMTMsMjIpLGVlPVYoZWUsdGUsb2Usc2UsVVs4XSwxNzcwMDM1NDE2LDcpLHNlPVYoc2UsZWUsdGUsb2UsVVs5XSwyMzM2NTUyODc5LDEy''@;'; put 'put ''KSxvZT1WKG9lLHNlLGVlLHRlLFVbMTBdLDQyOTQ5MjUyMzMsMTcpLHRlPVYodGUsb2Usc2UsZWUsVVsxMV0sMjMwNDU2MzEzNCwyMiksZWU9VihlZSx0ZSxvZSxzZSxVWzEyXSwxODA0NjAzNjgyLDcpLHNlPVYoc2UsZWUsdGUsb2UsVVsxM10sNDI1NDYyNjE5NSwxMiksb2U9VihvZSxzZSxl''@;'; put 'put ''ZSx0ZSxVWzE0XSwyNzkyOTY1MDA2LDE3KSxlZT1CKGVlLHRlPVYodGUsb2Usc2UsZWUsVVsxNV0sMTIzNjUzNTMyOSwyMiksb2Usc2UsVVsxXSw0MTI5MTcwNzg2LDUpLHNlPUIoc2UsZWUsdGUsb2UsVVs2XSwzMjI1NDY1NjY0LDkpLG9lPUIob2Usc2UsZWUsdGUsVVsxMV0sNjQzNzE3NzEz''@;'; put 'put ''LDE0KSx0ZT1CKHRlLG9lLHNlLGVlLFVbMF0sMzkyMTA2OTk5NCwyMCksZWU9QihlZSx0ZSxvZSxzZSxVWzVdLDM1OTM0MDg2MDUsNSksc2U9QihzZSxlZSx0ZSxvZSxVWzEwXSwzODAxNjA4Myw5KSxvZT1CKG9lLHNlLGVlLHRlLFVbMTVdLDM2MzQ0ODg5NjEsMTQpLHRlPUIodGUsb2Usc2Us''@;'; put 'put ''ZWUsVVs0XSwzODg5NDI5NDQ4LDIwKSxlZT1CKGVlLHRlLG9lLHNlLFVbOV0sNTY4NDQ2NDM4LDUpLHNlPUIoc2UsZWUsdGUsb2UsVVsxNF0sMzI3NTE2MzYwNiw5KSxvZT1CKG9lLHNlLGVlLHRlLFVbM10sNDEwNzYwMzMzNSwxNCksdGU9Qih0ZSxvZSxzZSxlZSxVWzhdLDExNjM1MzE1MDEs''@;'; put 'put ''MjApLGVlPUIoZWUsdGUsb2Usc2UsVVsxM10sMjg1MDI4NTgyOSw1KSxzZT1CKHNlLGVlLHRlLG9lLFVbMl0sNDI0MzU2MzUxMiw5KSxvZT1CKG9lLHNlLGVlLHRlLFVbN10sMTczNTMyODQ3MywxNCksZWU9WShlZSx0ZT1CKHRlLG9lLHNlLGVlLFVbMTJdLDIzNjgzNTk1NjIsMjApLG9lLHNl''@;'; put 'put ''LFVbNV0sNDI5NDU4ODczOCw0KSxzZT1ZKHNlLGVlLHRlLG9lLFVbOF0sMjI3MjM5MjgzMywxMSksb2U9WShvZSxzZSxlZSx0ZSxVWzExXSwxODM5MDMwNTYyLDE2KSx0ZT1ZKHRlLG9lLHNlLGVlLFVbMTRdLDQyNTk2NTc3NDAsMjMpLGVlPVkoZWUsdGUsb2Usc2UsVVsxXSwyNzYzOTc1MjM2''@;'; put 'put ''LDQpLHNlPVkoc2UsZWUsdGUsb2UsVVs0XSwxMjcyODkzMzUzLDExKSxvZT1ZKG9lLHNlLGVlLHRlLFVbN10sNDEzOTQ2OTY2NCwxNiksdGU9WSh0ZSxvZSxzZSxlZSxVWzEwXSwzMjAwMjM2NjU2LDIzKSxlZT1ZKGVlLHRlLG9lLHNlLFVbMTNdLDY4MTI3OTE3NCw0KSxzZT1ZKHNlLGVlLHRl''@;'; put 'put ''LG9lLFVbMF0sMzkzNjQzMDA3NCwxMSksb2U9WShvZSxzZSxlZSx0ZSxVWzNdLDM1NzI0NDUzMTcsMTYpLHRlPVkodGUsb2Usc2UsZWUsVVs2XSw3NjAyOTE4OSwyMyksZWU9WShlZSx0ZSxvZSxzZSxVWzldLDM2NTQ2MDI4MDksNCksc2U9WShzZSxlZSx0ZSxvZSxVWzEyXSwzODczMTUxNDYx''@;'; put 'put ''LDExKSxvZT1ZKG9lLHNlLGVlLHRlLFVbMTVdLDUzMDc0MjUyMCwxNiksZWU9WChlZSx0ZT1ZKHRlLG9lLHNlLGVlLFVbMl0sMzI5OTYyODY0NSwyMyksb2Usc2UsVVswXSw0MDk2MzM2NDUyLDYpLHNlPVgoc2UsZWUsdGUsb2UsVVs3XSwxMTI2ODkxNDE1LDEwKSxvZT1YKG9lLHNlLGVlLHRl''@;'; put 'put ''LFVbMTRdLDI4Nzg2MTIzOTEsMTUpLHRlPVgodGUsb2Usc2UsZWUsVVs1XSw0MjM3NTMzMjQxLDIxKSxlZT1YKGVlLHRlLG9lLHNlLFVbMTJdLDE3MDA0ODU1NzEsNiksc2U9WChzZSxlZSx0ZSxvZSxVWzNdLDIzOTk5ODA2OTAsMTApLG9lPVgob2Usc2UsZWUsdGUsVVsxMF0sNDI5MzkxNTc3''@;'; put 'put ''MywxNSksdGU9WCh0ZSxvZSxzZSxlZSxVWzFdLDIyNDAwNDQ0OTcsMjEpLGVlPVgoZWUsdGUsb2Usc2UsVVs4XSwxODczMzEzMzU5LDYpLHNlPVgoc2UsZWUsdGUsb2UsVVsxNV0sNDI2NDM1NTU1MiwxMCksb2U9WChvZSxzZSxlZSx0ZSxVWzZdLDI3MzQ3Njg5MTYsMTUpLHRlPVgodGUsb2Us''@;'; put 'put ''c2UsZWUsVVsxM10sMTMwOTE1MTY0OSwyMSksZWU9WChlZSx0ZSxvZSxzZSxVWzRdLDQxNDk0NDQyMjYsNiksc2U9WChzZSxlZSx0ZSxvZSxVWzExXSwzMTc0NzU2OTE3LDEwKSxvZT1YKG9lLHNlLGVlLHRlLFVbMl0sNzE4Nzg3MjU5LDE1KSx0ZT1YKHRlLG9lLHNlLGVlLFVbOV0sMzk1MTQ4''@;'; put 'put ''MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK2VlfDAsdGhpcy5fYj10aGlzLl9iK3RlfDAsdGhpcy5fYz10aGlzLl9jK29lfDAsdGhpcy5fZD10aGlzLl9kK3NlfDB9LEUucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhp''@;'; put 'put ''cy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0''@;'; put 'put ''aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgVT1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gVS53cml0ZUludDMyTEUodGhpcy5fYSwwKSxVLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLFUu''@;'; put 'put ''d3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksVS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksVX0sTS5leHBvcnRzPUV9LDMwNDc6KE0sTyxSKT0+e3ZhciB6PVIoNjI0MCksSz1SKDk5MzEpO2Z1bmN0aW9uIEkoayl7dGhpcy5yYW5kPWt8fG5ldyBLLlJhbmR9TS5leHBvcnRzPUksSS5jcmVhdGU9''@;'; put 'put ''ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBJKGspfSxJLnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9uKGspe3ZhciBFPWsuYml0TGVuZ3RoKCksaj1NYXRoLmNlaWwoRS84KTtkb3t2YXIgVj1uZXcgeih0aGlzLnJhbmQuZ2VuZXJhdGUoaikpfXdoaWxlKFYuY21wKGspPj0wKTtyZXR1cm4g''@;'; put 'put ''Vn0sSS5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5jdGlvbihrLEUpe3ZhciBqPUUuc3ViKGspO3JldHVybiBrLmFkZCh0aGlzLl9yYW5kYmVsb3coaikpfSxJLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKGssRSxqKXt2YXIgVj1rLmJpdExlbmd0aCgpLEI9ei5tb250KGspLFk9bmV3IHooMSku''@;'; put 'put ''dG9SZWQoQik7RXx8KEU9TWF0aC5tYXgoMSxWLzQ4fDApKTtmb3IodmFyIFg9ay5zdWJuKDEpLFU9MDshWC50ZXN0bihVKTtVKyspO2Zvcih2YXIgcT1rLnNocm4oVSksZWU9WC50b1JlZChCKTtFPjA7RS0tKXt2YXIgdGU9dGhpcy5fcmFuZHJhbmdlKG5ldyB6KDIpLFgpO2omJmoodGUpO3Zh''@;'; put 'put ''ciBvZT10ZS50b1JlZChCKS5yZWRQb3cocSk7aWYoMCE9PW9lLmNtcChZKSYmMCE9PW9lLmNtcChlZSkpe2Zvcih2YXIgc2U9MTtzZTxVO3NlKyspe2lmKDA9PT0ob2U9b2UucmVkU3FyKCkpLmNtcChZKSlyZXR1cm4hMTtpZigwPT09b2UuY21wKGVlKSlicmVha31pZihzZT09PVUpcmV0dXJu''@;'; put 'put ''ITF9fXJldHVybiEwfSxJLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKGssRSl7dmFyIGo9ay5iaXRMZW5ndGgoKSxWPXoubW9udChrKSxCPW5ldyB6KDEpLnRvUmVkKFYpO0V8fChFPU1hdGgubWF4KDEsai80OHwwKSk7Zm9yKHZhciBZPWsuc3VibigxKSxYPTA7IVkudGVzdG4oWCk7''@;'; put 'put ''WCsrKTtmb3IodmFyIFU9ay5zaHJuKFgpLHE9WS50b1JlZChWKTtFPjA7RS0tKXt2YXIgZWU9dGhpcy5fcmFuZHJhbmdlKG5ldyB6KDIpLFkpLHRlPWsuZ2NkKGVlKTtpZigwIT09dGUuY21wbigxKSlyZXR1cm4gdGU7dmFyIG9lPWVlLnRvUmVkKFYpLnJlZFBvdyhVKTtpZigwIT09b2UuY21w''@;'; put 'put ''KEIpJiYwIT09b2UuY21wKHEpKXtmb3IodmFyIHNlPTE7c2U8WDtzZSsrKXtpZigwPT09KG9lPW9lLnJlZFNxcigpKS5jbXAoQikpcmV0dXJuIG9lLmZyb21SZWQoKS5zdWJuKDEpLmdjZChrKTtpZigwPT09b2UuY21wKHEpKWJyZWFrfWlmKHNlPT09WClyZXR1cm4ob2U9b2UucmVkU3FyKCkp''@;'; put 'put ''LmZyb21SZWQoKS5zdWJuKDEpLmdjZChrKX19cmV0dXJuITF9fSw2MjQwOmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtn''@;'; put 'put ''LnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1u''@;'; put 'put ''dWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNp''@;'; put 'put ''emU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDY2MTkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEw''@;'; put 'put ''Mj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2Rl''@;'; put 'put ''QXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRT''@;'; put 'put ''aXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJl''@;'; put 'put ''cGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90''@;'; put 'put ''b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2''@;'; put 'put ''NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3Rv''@;'; put 'put ''dHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3''@;'; put 'put ''IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYp''@;'; put 'put ''PDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEom''@;'; put 'put ''NjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiks''@;'; put 'put ''dGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9Njcx''@;'; put 'put ''MDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jk''@;'; put 'put ''c1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcu''@;'; put 'put ''bGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4''@;'; put 'put ''ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9u''@;'; put 'put ''KGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5j''@;'; put 'put ''bG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3Ry''@;'; put 'put ''aXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09''@;'; put 'put ''dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAw''@;'; put 'put ''MCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgy''@;'; put 'put ''ODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2''@;'; put 'put ''NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVu''@;'; put 'put ''Z3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2''@;'; put 'put ''MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxM''@;'; put 'put ''ZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9''@;'; put 'put ''MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0y''@;'; put 'put ''Nix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5j''@;'; put 'put ''bG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVD''@;'; put 'put ''IT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0''@;'; put 'put ''aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMg''@;'; put 'put ''Yml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxD''@;'; put 'put ''KX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJi''@;'; put 'put ''eXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7''@;'; put 'put ''SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJu''@;'; put 'put ''IGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQs''@;'; put 'put ''Qz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYo''@;'; put 'put ''Uys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnBy''@;'; put 'put ''b3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5''@;'; put 'put ''cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5w''@;'; put 'put ''cm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5l''@;'; put 'put ''Zz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5s''@;'; put 'put ''ZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRo''@;'; put 'put ''aXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhp''@;'; put 'put ''cy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5w''@;'; put 'put ''cm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgp''@;'; put 'put ''Lml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jk''@;'; put 'put ''c1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVn''@;'; put 'put ''YXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5f''@;'; put 'put ''ZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3Ru''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3Ro''@;'; put 'put ''aXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1Yihn''@;'; put 'put ''KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2''@;'; put 'put ''PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYz''@;'; put 'put ''JihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3Jl''@;'; put 'put ''dHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5u''@;'; put 'put ''ZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRo''@;'; put 'put ''aXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2Lndv''@;'; put 'put ''cmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3Ro''@;'; put 'put ''O0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlz''@;'; put 'put ''dWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxCZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsSmU9''@;'; put 'put ''S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLGl0PTB8Sls3XSx1dD04MTkxJml0LE10PWl0Pj4+''@;'; put 'put ''MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLE5uPTB8bmVbMV0sZnQ9ODE5MSZObixmbj1Obj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEz''@;'; put 'put ''LF90PTB8bmVbM10sTnQ9ODE5MSZfdCx2bj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLExuPTB8bmVbNl0senQ9ODE5MSZMbix5bj1Mbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEz''@;'; put 'put ''LE9uPTB8bmVbOF0sJHQ9ODE5MSZPbixGbj1Pbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGgu''@;'; put 'put ''aW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEJlLGVuKSxwPShwPU1hdGguaW11bChCZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3''@;'; put 'put ''PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+''@;'; put 'put ''Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKEJlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11bChXZSxm''@;'; put 'put ''dCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4x''@;'; put 'put ''Myl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUsZnQpfDAsdz13K01hdGguaW11bChKZSxmbil8MCx2PXYrTWF0aC5pbXVsKEJlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDAp''@;'; put 'put ''fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx2bil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx2bil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11''@;'; put 'put ''bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0KXwwLHY9ditNYXRoLmltdWwoQmUsTnQpfDAscD0ocD1wK01hdGguaW11bChCZSx2bil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2Usdm4pfDA7dmFyIEty''@;'; put 'put ''PShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1N''@;'; put 'put ''YXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZu''@;'; put 'put ''KXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHZuKXwwKStNYXRoLmltdWwoSmUsTnQpfDAs''@;'; put 'put ''dz13K01hdGguaW11bChKZSx2bil8MCx2PXYrTWF0aC5pbXVsKEJlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0o''@;'; put 'put ''cD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGgu''@;'; put 'put ''aW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''VGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSx2bil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsdm4pfDAsdj12K01hdGguaW11bChZZSxJdCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChKZSxKdCl8MCx2PXYrTWF0aC5pbXVsKEJlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3Zh''@;'; put 'put ''ciBGcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3MTA4ODYz''@;'; put 'put ''LHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6''@;'; put 'put ''ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSx2bil8MCkrTWF0aC5pbXVsKHFlLE50''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwocWUsdm4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQp''@;'; put 'put ''fDApK01hdGguaW11bChKZSxwdCl8MCx3PXcrTWF0aC5pbXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoQmUsenQpfDAscD0ocD1wK01hdGguaW11bChCZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChM''@;'; put 'put ''ZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9''@;'; put 'put ''TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUs''@;'; put 'put ''d3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHZuKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCx2bil8''@;'; put 'put ''MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9''@;'; put 'put ''dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVsKEJlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsQm4pfDApK01h''@;'; put 'put ''dGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxGbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxG''@;'; put 'put ''bil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0''@;'; put 'put ''LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAs''@;'; put 'put ''cD0ocD1wK01hdGguaW11bChEZSx2bil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsdm4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxKdCl8MCx2PXYr''@;'; put 'put ''TWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRo''@;'; put 'put ''LmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKEJlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsRm4pfDApK01hdGguaW11''@;'; put 'put ''bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkr''@;'; put 'put ''KHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXww''@;'; put 'put ''KStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsdm4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LHZuKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChEZSxKdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''YmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxGbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKEJlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''QmUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAs''@;'; put 'put ''dz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCx2bil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sdm4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxKdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBl''@;'; put 'put ''LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsRm4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKEplLGxu''@;'; put 'put ''KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChKZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCx2bikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibix2biksdj12K01h''@;'; put 'put ''dGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5p''@;'; put 'put ''bXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''aHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygo''@;'; put 'put ''ODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxK''@;'; put 'put ''dCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtN''@;'; put 'put ''YXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11''@;'; put 'put ''bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChx''@;'; put 'put ''ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9''@;'; put 'put ''ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01h''@;'; put 'put ''dGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLEZuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01h''@;'; put 'put ''dGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChi''@;'; put 'put ''bix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsRm4p''@;'; put 'put ''fDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11''@;'; put 'put ''bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKFB0LEZuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixGbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9''@;'; put 'put ''dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsRm4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sRm4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwo''@;'; put 'put ''UHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVs''@;'; put 'put ''KFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14''@;'; put 'put ''cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1GcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihk''@;'; put 'put ''ZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhp''@;'; put 'put ''cy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5s''@;'; put 'put ''ZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgw''@;'; put 'put ''fHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9''@;'; put 'put ''cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7''@;'; put 'put ''djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5w''@;'; put 'put ''cm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIg''@;'; put 'put ''Sj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIEJlPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtl''@;'; put 'put ''PVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxKZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1CZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09QmUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoSmU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUs''@;'; put 'put ''TGU9SmUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZigh''@;'; put 'put ''KFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2''@;'; put 'put ''Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIg''@;'; put 'put ''cD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5l''@;'; put 'put ''dyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYp''@;'; put 'put ''LG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRz''@;'; put 'put ''LEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgQmU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4''@;'; put 'put ''ZVtPZV0sbmVbT2VdPUJlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0''@;'; put 'put ''aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlv''@;'; put 'put ''bihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxu''@;'; put 'put ''PWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1w''@;'; put 'put ''Pj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgo''@;'; put 'put ''KSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxT''@;'; put 'put ''PVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIg''@;'; put 'put ''QyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYo''@;'; put 'put ''dGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAo''@;'; put 'put ''KX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2''@;'; put 'put ''YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13''@;'; put 'put ''fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3Ro''@;'; put 'put ''LTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53''@;'; put 'put ''b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90''@;'; put 'put ''b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6''@;'; put 'put ''KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8''@;'; put 'put ''Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53''@;'; put 'put ''b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1h''@;'; put 'put ''dGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5n''@;'; put 'put ''dGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUu''@;'; put 'put ''X2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2''@;'; put 'put ''KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgt''@;'; put 'put ''MT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIg''@;'; put 'put ''Uyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1D''@;'; put 'put ''KXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEom''@;'; put 'put ''JihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxM''@;'; put 'put ''ZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNo''@;'; put 'put ''cm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRo''@;'; put 'put ''aXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZt''@;'; put 'put ''b2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5p''@;'; put 'put ''c3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVs''@;'; put 'put ''bCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlw''@;'; put 'put ''ZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3''@;'; put 'put ''PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3Yt''@;'; put 'put ''LSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndv''@;'; put 'put ''cmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIg''@;'; put 'put ''Qz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25l''@;'; put 'put ''O2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYu''@;'; put 'put ''aWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRk''@;'; put 'put ''KGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9p''@;'; put 'put ''bnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4w''@;'; put 'put ''JiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRz''@;'; put 'put ''WzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1D''@;'; put 'put ''LmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5l''@;'; put 'put ''Z2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMp''@;'; put 'put ''O2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNF''@;'; put 'put ''dmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5''@;'; put 'put ''cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhp''@;'; put 'put ''cy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''MT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMu''@;'; put 'put ''bGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7''@;'; put 'put ''aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5j''@;'; put 'put ''dGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9''@;'; put 'put ''LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09''@;'; put 'put ''dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBu''@;'; put 'put ''KGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1''@;'; put 'put ''Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRo''@;'; put 'put ''aXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5''@;'; put 'put ''MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3''@;'; put 'put ''IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1m''@;'; put 'put ''dW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7''@;'; put 'put ''dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5i''@;'; put 'put ''aXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5t''@;'; put 'put ''aW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJu''@;'; put 'put ''IGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13''@;'; put 'put ''aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0''@;'; put 'put ''PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5s''@;'; put 'put ''ZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0''@;'; put 'put ''aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhd''@;'; put 'put ''PTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVu''@;'; put 'put ''Z3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRz''@;'; put 'put ''W1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlm''@;'; put 'put ''KCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0ko''@;'; put 'put ''MD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnky''@;'; put 'put ''KGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5t''@;'; put 'put ''KT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rp''@;'; put 'put ''b24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3Rv''@;'; put 'put ''dHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3Fy''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMu''@;'; put 'put ''bS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0ko''@;'; put 'put ''IXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTsp''@;'; put 'put ''ZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLEJlPTA7MCE9PU9lLmNtcCh3KTtCZSsrKU9lPU9lLnJlZFNxcigp''@;'; put 'put ''O0koQmU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtQmUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1CZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAo''@;'; put 'put ''dGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21w''@;'; put 'put ''bigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7''@;'; put 'put ''Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9''@;'; put 'put ''PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRG''@;'; put 'put ''cm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0''@;'; put 'put ''KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jk''@;'; put 'put ''c1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9''@;'; put 'put ''cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVs''@;'; put 'put ''KEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1w''@;'; put 'put ''LmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sOTc0NjpNPT57ZnVuY3Rpb24g''@;'; put 'put ''TyhSLHope2lmKCFSKXRocm93IG5ldyBFcnJvcih6fHwiQXNzZXJ0aW9uIGZhaWxlZCIpfU0uZXhwb3J0cz1PLE8uZXF1YWw9ZnVuY3Rpb24oUix6LEspe2lmKFIhPXopdGhyb3cgbmV3IEVycm9yKEt8fCJBc3NlcnRpb24gZmFpbGVkOiAiK1IrIiAhPSAiK3opfX0sNDUwNDooTSxPKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgUj1PO2Z1bmN0aW9uIHooSSl7cmV0dXJuIDE9PT1JLmxlbmd0aD8iMCIrSTpJfWZ1bmN0aW9uIEsoSSl7Zm9yKHZhciBrPSIiLEU9MDtFPEkubGVuZ3RoO0UrKylrKz16KElbRV0udG9TdHJpbmcoMTYpKTtyZXR1cm4ga31SLnRvQXJyYXk9ZnVuY3Rpb24oSSxrKXtp''@;'; put 'put ''ZihBcnJheS5pc0FycmF5KEkpKXJldHVybiBJLnNsaWNlKCk7aWYoIUkpcmV0dXJuW107dmFyIEU9W107aWYoInN0cmluZyIhPXR5cGVvZiBJKXtmb3IodmFyIGo9MDtqPEkubGVuZ3RoO2orKylFW2pdPTB8SVtqXTtyZXR1cm4gRX1pZigiaGV4Ij09PWspZm9yKChJPUkucmVwbGFjZSgvW15h''@;'; put 'put ''LXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoST0iMCIrSSksaj0wO2o8SS5sZW5ndGg7ais9MilFLnB1c2gocGFyc2VJbnQoSVtqXStJW2orMV0sMTYpKTtlbHNlIGZvcihqPTA7ajxJLmxlbmd0aDtqKyspe3ZhciBWPUkuY2hhckNvZGVBdChqKSxCPVY+PjgsWT0yNTUmVjtCP0UucHVz''@;'; put 'put ''aChCLFkpOkUucHVzaChZKX1yZXR1cm4gRX0sUi56ZXJvMj16LFIudG9IZXg9SyxSLmVuY29kZT1mdW5jdGlvbihJLGspe3JldHVybiJoZXgiPT09az9LKEkpOkl9fSwxMTcxOihNLE8sUik9Pnt2YXIgej1SKDUxMDgpO00uZXhwb3J0cz1lZSxlZS5NaW5pbWF0Y2g9dGU7dmFyIEs9ZnVuY3Rp''@;'; put 'put ''b24oKXt0cnl7cmV0dXJuIFIoMjUyMCl9Y2F0Y2h7fX0oKXx8e3NlcDoiLyJ9O2VlLnNlcD1LLnNlcDt2YXIgST1lZS5HTE9CU1RBUj10ZS5HTE9CU1RBUj17fSxrPVIoMzY0NCksRT17IiEiOntvcGVuOiIoPzooPyEoPzoiLGNsb3NlOiIpKVteL10qPykifSwiPyI6e29wZW46Iig/OiIsY2xv''@;'; put 'put ''c2U6Iik/In0sIisiOntvcGVuOiIoPzoiLGNsb3NlOiIpKyJ9LCIqIjp7b3BlbjoiKD86IixjbG9zZToiKSoifSwiQCI6e29wZW46Iig/OiIsY2xvc2U6IikifX0saj0iW14vXSIsVj1qKyIqPyIsWD0iKCkuKnt9Kz9bXV4kXFwhIi5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKHVlLGNlKXty''@;'; put 'put ''ZXR1cm4gdWVbY2VdPSEwLHVlfSx7fSksVT0vXC8rLztmdW5jdGlvbiBxKHVlLGNlKXtjZT1jZXx8e307dmFyIEc9e307cmV0dXJuIE9iamVjdC5rZXlzKHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe0dbYl09dWVbYl19KSxPYmplY3Qua2V5cyhjZSkuZm9yRWFjaChmdW5jdGlvbihiKXtHW2Jd''@;'; put 'put ''PWNlW2JdfSksR31mdW5jdGlvbiBlZSh1ZSxjZSxHKXtyZXR1cm4gc2UoY2UpLEd8fChHPXt9KSwhKCFHLm5vY29tbWVudCYmIiMiPT09Y2UuY2hhckF0KDApKSYmbmV3IHRlKGNlLEcpLm1hdGNoKHVlKX1mdW5jdGlvbiB0ZSh1ZSxjZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdGUpKXJldHVy''@;'; put 'put ''biBuZXcgdGUodWUsY2UpO3NlKHVlKSxjZXx8KGNlPXt9KSx1ZT11ZS50cmltKCksY2UuYWxsb3dXaW5kb3dzRXNjYXBlfHwiLyI9PT1LLnNlcHx8KHVlPXVlLnNwbGl0KEsuc2VwKS5qb2luKCIvIikpLHRoaXMub3B0aW9ucz1jZSx0aGlzLnNldD1bXSx0aGlzLnBhdHRlcm49dWUsdGhpcy5y''@;'; put 'put ''ZWdleHA9bnVsbCx0aGlzLm5lZ2F0ZT0hMSx0aGlzLmNvbW1lbnQ9ITEsdGhpcy5lbXB0eT0hMSx0aGlzLnBhcnRpYWw9ISFjZS5wYXJ0aWFsLHRoaXMubWFrZSgpfWZ1bmN0aW9uIG9lKHVlLGNlKXtyZXR1cm4gY2V8fChjZT10aGlzIGluc3RhbmNlb2YgdGU/dGhpcy5vcHRpb25zOnt9KSxz''@;'; put 'put ''ZSh1ZT12b2lkIDA9PT11ZT90aGlzLnBhdHRlcm46dWUpLGNlLm5vYnJhY2V8fCEvXHsoPzooPyFceykuKSpcfS8udGVzdCh1ZSk/W3VlXTprKHVlKX1lZS5maWx0ZXI9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBjZT1jZXx8e30sZnVuY3Rpb24oRyxiLEQpe3JldHVybiBlZShHLHVlLGNlKX19''@;'; put 'put ''LGVlLmRlZmF1bHRzPWZ1bmN0aW9uKHVlKXtpZighdWV8fCJvYmplY3QiIT10eXBlb2YgdWV8fCFPYmplY3Qua2V5cyh1ZSkubGVuZ3RoKXJldHVybiBlZTt2YXIgY2U9ZWUsRz1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIGNlKGIsRCxxKHVlLEgpKX07cmV0dXJuKEcuTWluaW1hdGNoPWZ1bmN0''@;'; put 'put ''aW9uKGIsRCl7cmV0dXJuIG5ldyBjZS5NaW5pbWF0Y2goYixxKHVlLEQpKX0pLmRlZmF1bHRzPWZ1bmN0aW9uKGIpe3JldHVybiBjZS5kZWZhdWx0cyhxKHVlLGIpKS5NaW5pbWF0Y2h9LEcuZmlsdGVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGNlLmZpbHRlcihiLHEodWUsRCkpfSxHLmRlZmF1''@;'; put 'put ''bHRzPWZ1bmN0aW9uKGIpe3JldHVybiBjZS5kZWZhdWx0cyhxKHVlLGIpKX0sRy5tYWtlUmU9ZnVuY3Rpb24oYixEKXtyZXR1cm4gY2UubWFrZVJlKGIscSh1ZSxEKSl9LEcuYnJhY2VFeHBhbmQ9ZnVuY3Rpb24oYixEKXtyZXR1cm4gY2UuYnJhY2VFeHBhbmQoYixxKHVlLEQpKX0sRy5tYXRj''@;'; put 'put ''aD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIGNlLm1hdGNoKGIsRCxxKHVlLEgpKX0sR30sdGUuZGVmYXVsdHM9ZnVuY3Rpb24odWUpe3JldHVybiBlZS5kZWZhdWx0cyh1ZSkuTWluaW1hdGNofSx0ZS5wcm90b3R5cGUuZGVidWc9ZnVuY3Rpb24oKXt9LHRlLnByb3RvdHlwZS5tYWtlPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIHVlPXRoaXMucGF0dGVybixjZT10aGlzLm9wdGlvbnM7aWYoY2Uubm9jb21tZW50fHwiIyIhPT11ZS5jaGFyQXQoMCkpaWYodWUpe3RoaXMucGFyc2VOZWdhdGUoKTt2YXIgRz10aGlzLmdsb2JTZXQ9dGhpcy5icmFjZUV4cGFuZCgpO2NlLmRlYnVnJiYodGhpcy5kZWJ1Zz1m''@;'; put 'put ''dW5jdGlvbigpe3ouZXJyb3IuYXBwbHkoeixhcmd1bWVudHMpfSksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sRyksRz10aGlzLmdsb2JQYXJ0cz1HLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5zcGxpdChVKX0pLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLEcpLEc9Ry5tYXAoZnVuY3Rpb24o''@;'; put 'put ''YixELEgpe3JldHVybiBiLm1hcCh0aGlzLnBhcnNlLHRoaXMpfSx0aGlzKSx0aGlzLmRlYnVnKHRoaXMucGF0dGVybixHKSxHPUcuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybi0xPT09Yi5pbmRleE9mKCExKX0pLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLEcpLHRoaXMuc2V0PUd9ZWxzZSB0''@;'; put 'put ''aGlzLmVtcHR5PSEwO2Vsc2UgdGhpcy5jb21tZW50PSEwfSx0ZS5wcm90b3R5cGUucGFyc2VOZWdhdGU9ZnVuY3Rpb24oKXt2YXIgdWU9dGhpcy5wYXR0ZXJuLGNlPSExLGI9MDtpZighdGhpcy5vcHRpb25zLm5vbmVnYXRlKXtmb3IodmFyIEQ9MCxIPXVlLmxlbmd0aDtEPEgmJiIhIj09PXVl''@;'; put 'put ''LmNoYXJBdChEKTtEKyspY2U9IWNlLGIrKztiJiYodGhpcy5wYXR0ZXJuPXVlLnN1YnN0cihiKSksdGhpcy5uZWdhdGU9Y2V9fSxlZS5icmFjZUV4cGFuZD1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIG9lKHVlLGNlKX0sdGUucHJvdG90eXBlLmJyYWNlRXhwYW5kPW9lO3ZhciBzZT1mdW5jdGlv''@;'; put 'put ''bih1ZSl7aWYoInN0cmluZyIhPXR5cGVvZiB1ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHBhdHRlcm4iKTtpZih1ZS5sZW5ndGg+NjU1MzYpdGhyb3cgbmV3IFR5cGVFcnJvcigicGF0dGVybiBpcyB0b28gbG9uZyIpfTt0ZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odWUsY2Up''@;'; put 'put ''e3NlKHVlKTt2YXIgRz10aGlzLm9wdGlvbnM7aWYoIioqIj09PXVlKXtpZighRy5ub2dsb2JzdGFyKXJldHVybiBJO3VlPSIqIn1pZigiIj09PXVlKXJldHVybiIiO3ZhciBiLEQ9IiIsSD0hIUcubm9jYXNlLE49ITEsZz1bXSxDPVtdLFM9ITEsdj0tMSxwPS0xLHc9Ii4iPT09dWUuY2hhckF0''@;'; put 'put ''KDApPyIiOkcuZG90PyIoPyEoPzpefFxcLylcXC57MSwyfSg/OiR8XFwvKSkiOiIoPyFcXC4pIixKPXRoaXM7ZnVuY3Rpb24gbmUoKXtpZihiKXtzd2l0Y2goYil7Y2FzZSIqIjpEKz1WLEg9ITA7YnJlYWs7Y2FzZSI/IjpEKz1qLEg9ITA7YnJlYWs7ZGVmYXVsdDpEKz0iXFwiK2J9Si5kZWJ1''@;'; put 'put ''ZygiY2xlYXJTdGF0ZUNoYXIgJWogJWoiLGIsRCksYj0hMX19Zm9yKHZhciBkZSxmZT0wLHhlPXVlLmxlbmd0aDtmZTx4ZSYmKGRlPXVlLmNoYXJBdChmZSkpO2ZlKyspaWYodGhpcy5kZWJ1ZygiJXNcdCVzICVzICVqIix1ZSxmZSxELGRlKSxOJiZYW2RlXSlEKz0iXFwiK2RlLE49ITE7ZWxz''@;'; put 'put ''ZSBzd2l0Y2goZGUpe2Nhc2UiLyI6cmV0dXJuITE7Y2FzZSJcXCI6bmUoKSxOPSEwO2NvbnRpbnVlO2Nhc2UiPyI6Y2FzZSIqIjpjYXNlIisiOmNhc2UiQCI6Y2FzZSIhIjppZih0aGlzLmRlYnVnKCIlc1x0JXMgJXMgJWogPC0tIHN0YXRlQ2hhciIsdWUsZmUsRCxkZSksUyl7dGhpcy5kZWJ1''@;'; put 'put ''ZygiICBpbiBjbGFzcyIpLCIhIj09PWRlJiZmZT09PXArMSYmKGRlPSJeIiksRCs9ZGU7Y29udGludWV9Si5kZWJ1ZygiY2FsbCBjbGVhclN0YXRlQ2hhciAlaiIsYiksbmUoKSxiPWRlLEcubm9leHQmJm5lKCk7Y29udGludWU7Y2FzZSIoIjppZihTKXtEKz0iKCI7Y29udGludWV9aWYoIWIp''@;'; put 'put ''e0QrPSJcXCgiO2NvbnRpbnVlfWcucHVzaCh7dHlwZTpiLHN0YXJ0OmZlLTEscmVTdGFydDpELmxlbmd0aCxvcGVuOkVbYl0ub3BlbixjbG9zZTpFW2JdLmNsb3NlfSksdGhpcy5kZWJ1ZygicGxUeXBlICVqICVqIixiLEQrPSIhIj09PWI/Iig/Oig/ISg/OiI6Iig/OiIpLGI9ITE7Y29udGlu''@;'; put 'put ''dWU7Y2FzZSIpIjppZihTfHwhZy5sZW5ndGgpe0QrPSJcXCkiO2NvbnRpbnVlfW5lKCksSD0hMDt2YXIgTGU9Zy5wb3AoKTtEKz1MZS5jbG9zZSwiISI9PT1MZS50eXBlJiZDLnB1c2goTGUpLExlLnJlRW5kPUQubGVuZ3RoO2NvbnRpbnVlO2Nhc2UifCI6aWYoU3x8IWcubGVuZ3RofHxOKXtE''@;'; put 'put ''Kz0iXFx8IixOPSExO2NvbnRpbnVlfW5lKCksRCs9InwiO2NvbnRpbnVlO2Nhc2UiWyI6aWYobmUoKSxTKXtEKz0iXFwiK2RlO2NvbnRpbnVlfVM9ITAscD1mZSx2PUQubGVuZ3RoLEQrPWRlO2NvbnRpbnVlO2Nhc2UiXSI6aWYoZmU9PT1wKzF8fCFTKXtEKz0iXFwiK2RlLE49ITE7Y29udGlu''@;'; put 'put ''dWV9dmFyIEZlPXVlLnN1YnN0cmluZyhwKzEsZmUpO3RyeXtSZWdFeHAoIlsiK0ZlKyJdIil9Y2F0Y2h7dmFyIE9lPXRoaXMucGFyc2UoRmUsaGUpO0Q9RC5zdWJzdHIoMCx2KSsiXFxbIitPZVswXSsiXFxdIixIPUh8fE9lWzFdLFM9ITE7Y29udGludWV9SD0hMCxTPSExLEQrPWRlO2NvbnRp''@;'; put 'put ''bnVlO2RlZmF1bHQ6bmUoKSxOP049ITE6IVhbZGVdfHwiXiI9PT1kZSYmU3x8KEQrPSJcXCIpLEQrPWRlfWZvcihTJiYoRmU9dWUuc3Vic3RyKHArMSksT2U9dGhpcy5wYXJzZShGZSxoZSksRD1ELnN1YnN0cigwLHYpKyJcXFsiK09lWzBdLEg9SHx8T2VbMV0pLExlPWcucG9wKCk7TGU7TGU9''@;'; put 'put ''Zy5wb3AoKSl7dmFyIEJlPUQuc2xpY2UoTGUucmVTdGFydCtMZS5vcGVuLmxlbmd0aCk7dGhpcy5kZWJ1Zygic2V0dGluZyB0YWlsIixELExlKSxCZT1CZS5yZXBsYWNlKC8oKD86XFx7Mn0pezAsNjR9KShcXD8pXHwvZyxmdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIHplfHwoemU9IlxcIiks''@;'; put 'put ''RGUrRGUremUrInwifSksdGhpcy5kZWJ1ZygidGFpbD0lalxuICAgJXMiLEJlLEJlLExlLEQpO3ZhciBXZT0iKiI9PT1MZS50eXBlP1Y6Ij8iPT09TGUudHlwZT9qOiJcXCIrTGUudHlwZTtIPSEwLEQ9RC5zbGljZSgwLExlLnJlU3RhcnQpK1dlKyJcXCgiK0JlfW5lKCksTiYmKEQrPSJcXFxc''@;'; put 'put ''Iik7dmFyIEtlPSExO3N3aXRjaChELmNoYXJBdCgwKSl7Y2FzZSJbIjpjYXNlIi4iOmNhc2UiKCI6S2U9ITB9Zm9yKHZhciBZZT1DLmxlbmd0aC0xO1llPi0xO1llLS0pe3ZhciBKZT1DW1llXSxsdD1ELnNsaWNlKDAsSmUucmVTdGFydCksUGU9RC5zbGljZShKZS5yZVN0YXJ0LEplLnJlRW5k''@;'; put 'put ''LTgpLGJlPUQuc2xpY2UoSmUucmVFbmQtOCxKZS5yZUVuZCksQWU9RC5zbGljZShKZS5yZUVuZCk7YmUrPUFlO3ZhciBUZT1sdC5zcGxpdCgiKCIpLmxlbmd0aC0xLHFlPUFlO2ZvcihmZT0wO2ZlPFRlO2ZlKyspcWU9cWUucmVwbGFjZSgvXClbKyo/XT8vLCIiKTt2YXIgWGU9IiI7IiI9PT0o''@;'; put 'put ''QWU9cWUpJiZjZSE9PWhlJiYoWGU9IiQiKSxEPWx0K1BlK0FlK1hlK2JlfWlmKCIiIT09RCYmSCYmKEQ9Iig/PS4pIitEKSxLZSYmKEQ9dytEKSxjZT09PWhlKXJldHVybltELEhdO2lmKCFIKXJldHVybiB1ZS5yZXBsYWNlKC9cXCguKS9nLCIkMSIpO3ZhciBVZT1HLm5vY2FzZT8iaSI6IiI7''@;'; put 'put ''dHJ5e3ZhciBodD1uZXcgUmVnRXhwKCJeIitEKyIkIixVZSl9Y2F0Y2h7cmV0dXJuIG5ldyBSZWdFeHAoIiQuIil9cmV0dXJuIGh0Ll9nbG9iPXVlLGh0Ll9zcmM9RCxodH07dmFyIGhlPXt9O2VlLm1ha2VSZT1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIG5ldyB0ZSh1ZSxjZXx8e30pLm1ha2VS''@;'; put 'put ''ZSgpfSx0ZS5wcm90b3R5cGUubWFrZVJlPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWdleHB8fCExPT09dGhpcy5yZWdleHApcmV0dXJuIHRoaXMucmVnZXhwO3ZhciB1ZT10aGlzLnNldDtpZighdWUubGVuZ3RoKXJldHVybiB0aGlzLnJlZ2V4cD0hMSx0aGlzLnJlZ2V4cDt2YXIgY2U9dGhpcy5v''@;'; put 'put ''cHRpb25zLEc9Y2Uubm9nbG9ic3Rhcj9WOmNlLmRvdD8iKD86KD8hKD86XFwvfF4pKD86XFwuezEsMn0pKCR8XFwvKSkuKSo/IjoiKD86KD8hKD86XFwvfF4pXFwuKS4pKj8iLGI9Y2Uubm9jYXNlPyJpIjoiIixEPXVlLm1hcChmdW5jdGlvbihIKXtyZXR1cm4gSC5tYXAoZnVuY3Rpb24oTil7''@;'; put 'put ''cmV0dXJuIE49PT1JP0c6InN0cmluZyI9PXR5cGVvZiBOP04ucmVwbGFjZSgvWy1bXF17fSgpKis/LixcXF4kfCNcc10vZywiXFwkJiIpOk4uX3NyY30pLmpvaW4oIlxcLyIpfSkuam9pbigifCIpO0Q9Il4oPzoiK0QrIikkIix0aGlzLm5lZ2F0ZSYmKEQ9Il4oPyEiK0QrIikuKiQiKTt0cnl7''@;'; put 'put ''dGhpcy5yZWdleHA9bmV3IFJlZ0V4cChELGIpfWNhdGNoe3RoaXMucmVnZXhwPSExfXJldHVybiB0aGlzLnJlZ2V4cH0sZWUubWF0Y2g9ZnVuY3Rpb24odWUsY2UsRyl7dmFyIGI9bmV3IHRlKGNlLEc9R3x8e30pO3JldHVybiB1ZT11ZS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIGIubWF0''@;'; put 'put ''Y2goRCl9KSxiLm9wdGlvbnMubm9udWxsJiYhdWUubGVuZ3RoJiZ1ZS5wdXNoKGNlKSx1ZX0sdGUucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHVlLGNlKXtpZih2b2lkIDA9PT1jZSYmKGNlPXRoaXMucGFydGlhbCksdGhpcy5kZWJ1ZygibWF0Y2giLHVlLHRoaXMucGF0dGVybiksdGhpcy5j''@;'; put 'put ''b21tZW50KXJldHVybiExO2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI9PT11ZTtpZigiLyI9PT11ZSYmY2UpcmV0dXJuITA7dmFyIEc9dGhpcy5vcHRpb25zOyIvIiE9PUsuc2VwJiYodWU9dWUuc3BsaXQoSy5zZXApLmpvaW4oIi8iKSksdWU9dWUuc3BsaXQoVSksdGhpcy5kZWJ1Zyh0aGlzLnBh''@;'; put 'put ''dHRlcm4sInNwbGl0Iix1ZSk7dmFyIGIsRCxIPXRoaXMuc2V0O2Zvcih0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwic2V0IixIKSxEPXVlLmxlbmd0aC0xO0Q+PTAmJiEoYj11ZVtEXSk7RC0tKTtmb3IoRD0wO0Q8SC5sZW5ndGg7RCsrKXt2YXIgTj1IW0RdLGc9dWU7aWYoRy5tYXRjaEJhc2Um''@;'; put 'put ''JjE9PT1OLmxlbmd0aCYmKGc9W2JdKSx0aGlzLm1hdGNoT25lKGcsTixjZSkpcmV0dXJuISFHLmZsaXBOZWdhdGV8fCF0aGlzLm5lZ2F0ZX1yZXR1cm4hRy5mbGlwTmVnYXRlJiZ0aGlzLm5lZ2F0ZX0sdGUucHJvdG90eXBlLm1hdGNoT25lPWZ1bmN0aW9uKHVlLGNlLEcpe3ZhciBiPXRoaXMu''@;'; put 'put ''b3B0aW9uczt0aGlzLmRlYnVnKCJtYXRjaE9uZSIse3RoaXM6dGhpcyxmaWxlOnVlLHBhdHRlcm46Y2V9KSx0aGlzLmRlYnVnKCJtYXRjaE9uZSIsdWUubGVuZ3RoLGNlLmxlbmd0aCk7Zm9yKHZhciBEPTAsSD0wLE49dWUubGVuZ3RoLGc9Y2UubGVuZ3RoO0Q8TiYmSDxnO0QrKyxIKyspe3Ro''@;'; put 'put ''aXMuZGVidWcoIm1hdGNoT25lIGxvb3AiKTt2YXIgQyxTPWNlW0hdLHY9dWVbRF07aWYodGhpcy5kZWJ1ZyhjZSxTLHYpLCExPT09UylyZXR1cm4hMTtpZihTPT09SSl7dGhpcy5kZWJ1ZygiR0xPQlNUQVIiLFtjZSxTLHZdKTt2YXIgcD1ELHc9SCsxO2lmKHc9PT1nKXtmb3IodGhpcy5kZWJ1''@;'; put 'put ''ZygiKiogYXQgdGhlIGVuZCIpO0Q8TjtEKyspaWYoIi4iPT09dWVbRF18fCIuLiI9PT11ZVtEXXx8IWIuZG90JiYiLiI9PT11ZVtEXS5jaGFyQXQoMCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKDtwPE47KXt2YXIgSj11ZVtwXTtpZih0aGlzLmRlYnVnKCJcbmdsb2JzdGFyIHdoaWxlIix1ZSxw''@;'; put 'put ''LGNlLHcsSiksdGhpcy5tYXRjaE9uZSh1ZS5zbGljZShwKSxjZS5zbGljZSh3KSxHKSlyZXR1cm4gdGhpcy5kZWJ1ZygiZ2xvYnN0YXIgZm91bmQgbWF0Y2ghIixwLE4sSiksITA7aWYoIi4iPT09Snx8Ii4uIj09PUp8fCFiLmRvdCYmIi4iPT09Si5jaGFyQXQoMCkpe3RoaXMuZGVidWcoImRv''@;'; put 'put ''dCBkZXRlY3RlZCEiLHVlLHAsY2Usdyk7YnJlYWt9dGhpcy5kZWJ1ZygiZ2xvYnN0YXIgc3dhbGxvdyBhIHNlZ21lbnQsIGFuZCBjb250aW51ZSIpLHArK31yZXR1cm4hKCFHfHwodGhpcy5kZWJ1ZygiXG4+Pj4gbm8gbWF0Y2gsIHBhcnRpYWw/Iix1ZSxwLGNlLHcpLHAhPT1OKSl9aWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBTP3RoaXMuZGVidWcoInN0cmluZyBtYXRjaCIsUyx2LEM9dj09PVMpOihDPXYubWF0Y2goUyksdGhpcy5kZWJ1ZygicGF0dGVybiBtYXRjaCIsUyx2LEMpKSwhQylyZXR1cm4hMX1pZihEPT09TiYmSD09PWcpcmV0dXJuITA7aWYoRD09PU4pcmV0dXJuIEc7aWYoSD09''@;'; put 'put ''PWcpcmV0dXJuIEQ9PT1OLTEmJiIiPT09dWVbRF07dGhyb3cgbmV3IEVycm9yKCJ3dGY/Iil9fSw0MjQ0Ok09PnsidXNlIHN0cmljdCI7dmFyIE89ZnVuY3Rpb24oUil7cmV0dXJuIFIhPVJ9O00uZXhwb3J0cz1mdW5jdGlvbihSLHope3JldHVybiAwPT09UiYmMD09PXo/MS9SPT0xL3o6Uj09''@;'; put 'put ''PXp8fCEoIU8oUil8fCFPKHopKX19LDYwOTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI4OSksSz1SKDU1NTkpLEk9Uig0MjQ0KSxrPVIoNTYyNCksRT1SKDIyODEpLGo9SyhrKCksT2JqZWN0KTt6KGose2dldFBvbHlmaWxsOmssaW1wbGVtZW50YXRpb246SSxzaGltOkV9KSxN''@;'; put 'put ''LmV4cG9ydHM9an0sNTYyNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI0NCk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6en19LDIyODE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU2MjQp''@;'; put 'put ''LEs9Uig0Mjg5KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgST16KCk7cmV0dXJuIEsoT2JqZWN0LHtpczpJfSx7aXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzIT09SX19KSxJfX0sODk4NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6O2lmKCFPYmplY3Qua2V5cyl7dmFyIEs9''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxJPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaz1SKDE0MTQpLEU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxqPSFFLmNhbGwoe3RvU3RyaW5nOm51bGx9LCJ0b1N0cmluZyIpLFY9RS5jYWxsKGZ1bmN0aW9u''@;'; put 'put ''KCl7fSwicHJvdG90eXBlIiksQj1bInRvU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLFk9ZnVuY3Rpb24ocSl7dmFyIGVlPXEuY29uc3RydWN0b3I7''@;'; put 'put ''cmV0dXJuIGVlJiZlZS5wcm90b3R5cGU9PT1xfSxYPXskYXBwbGljYXRpb25DYWNoZTohMCwkY29uc29sZTohMCwkZXh0ZXJuYWw6ITAsJGZyYW1lOiEwLCRmcmFtZUVsZW1lbnQ6ITAsJGZyYW1lczohMCwkaW5uZXJIZWlnaHQ6ITAsJGlubmVyV2lkdGg6ITAsJG9ubW96ZnVsbHNjcmVlbmNo''@;'; put 'put ''YW5nZTohMCwkb25tb3pmdWxsc2NyZWVuZXJyb3I6ITAsJG91dGVySGVpZ2h0OiEwLCRvdXRlcldpZHRoOiEwLCRwYWdlWE9mZnNldDohMCwkcGFnZVlPZmZzZXQ6ITAsJHBhcmVudDohMCwkc2Nyb2xsTGVmdDohMCwkc2Nyb2xsVG9wOiEwLCRzY3JvbGxYOiEwLCRzY3JvbGxZOiEwLCRzZWxm''@;'; put 'put ''OiEwLCR3ZWJraXRJbmRleGVkREI6ITAsJHdlYmtpdFN0b3JhZ2VJbmZvOiEwLCR3aW5kb3c6ITB9LFU9ZnVuY3Rpb24oKXtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtmb3IodmFyIHEgaW4gd2luZG93KXRyeXtpZighWFsiJCIrcV0mJksuY2FsbCh3aW5kb3cscSkmJm51bGwhPT13''@;'; put 'put ''aW5kb3dbcV0mJiJvYmplY3QiPT10eXBlb2Ygd2luZG93W3FdKXRyeXtZKHdpbmRvd1txXSl9Y2F0Y2h7cmV0dXJuITB9fWNhdGNoe3JldHVybiEwfXJldHVybiExfSgpO3o9ZnVuY3Rpb24ocSl7dmFyIGVlPW51bGwhPT1xJiYib2JqZWN0Ij09dHlwZW9mIHEsdGU9IltvYmplY3QgRnVuY3Rp''@;'; put 'put ''b25dIj09PUkuY2FsbChxKSxvZT1rKHEpLHNlPWVlJiYiW29iamVjdCBTdHJpbmddIj09PUkuY2FsbChxKSxoZT1bXTtpZighZWUmJiF0ZSYmIW9lKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgdWU9ViYmdGU7aWYoc2UmJnEu''@;'; put 'put ''bGVuZ3RoPjAmJiFLLmNhbGwocSwwKSlmb3IodmFyIGNlPTA7Y2U8cS5sZW5ndGg7KytjZSloZS5wdXNoKFN0cmluZyhjZSkpO2lmKG9lJiZxLmxlbmd0aD4wKWZvcih2YXIgRz0wO0c8cS5sZW5ndGg7KytHKWhlLnB1c2goU3RyaW5nKEcpKTtlbHNlIGZvcih2YXIgYiBpbiBxKXVlJiYicHJv''@;'; put 'put ''dG90eXBlIj09PWJ8fCFLLmNhbGwocSxiKXx8aGUucHVzaChTdHJpbmcoYikpO2lmKGopZm9yKHZhciBEPWZ1bmN0aW9uKE4pe2lmKHR5cGVvZiB3aW5kb3c+InUifHwhVSlyZXR1cm4gWShOKTt0cnl7cmV0dXJuIFkoTil9Y2F0Y2h7cmV0dXJuITF9fShxKSxIPTA7SDxCLmxlbmd0aDsrK0gp''@;'; put 'put ''RCYmImNvbnN0cnVjdG9yIj09PUJbSF18fCFLLmNhbGwocSxCW0hdKXx8aGUucHVzaChCW0hdKTtyZXR1cm4gaGV9fU0uZXhwb3J0cz16fSwyMjE1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9QXJyYXkucHJvdG90eXBlLnNsaWNlLEs9UigxNDE0KSxJPU9iamVjdC5rZXlzLGs9ST9m''@;'; put 'put ''dW5jdGlvbihqKXtyZXR1cm4gSShqKX06Uig4OTg3KSxFPU9iamVjdC5rZXlzO2suc2hpbT1mdW5jdGlvbigpe2lmKE9iamVjdC5rZXlzKXt2YXIgaj1mdW5jdGlvbigpe3ZhciBWPU9iamVjdC5rZXlzKGFyZ3VtZW50cyk7cmV0dXJuIFYmJlYubGVuZ3RoPT09YXJndW1lbnRzLmxlbmd0aH0o''@;'; put 'put ''MSwyKTtqfHwoT2JqZWN0LmtleXM9ZnVuY3Rpb24oVil7cmV0dXJuIEsoVik/RSh6LmNhbGwoVikpOkUoVil9KX1lbHNlIE9iamVjdC5rZXlzPWs7cmV0dXJuIE9iamVjdC5rZXlzfHxrfSxNLmV4cG9ydHM9a30sMTQxNDpNPT57InVzZSBzdHJpY3QiO3ZhciBPPU9iamVjdC5wcm90b3R5cGUu''@;'; put 'put ''dG9TdHJpbmc7TS5leHBvcnRzPWZ1bmN0aW9uKFIpe3ZhciB6PU8uY2FsbChSKSxLPSJbb2JqZWN0IEFyZ3VtZW50c10iPT09ejtyZXR1cm4gS3x8KEs9IltvYmplY3QgQXJyYXldIiE9PXomJm51bGwhPT1SJiYib2JqZWN0Ij09dHlwZW9mIFImJiJudW1iZXIiPT10eXBlb2YgUi5sZW5ndGgm''@;'; put 'put ''JlIubGVuZ3RoPj0wJiYiW29iamVjdCBGdW5jdGlvbl0iPT09Ty5jYWxsKFIuY2FsbGVlKSksS319LDc3ODooTSxPLFIpPT57dmFyIHo9UigyNDc5KTtmdW5jdGlvbiBLKGspe3ZhciBFPWZ1bmN0aW9uKCl7cmV0dXJuIEUuY2FsbGVkP0UudmFsdWU6KEUuY2FsbGVkPSEwLEUudmFsdWU9ay5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cykpfTtyZXR1cm4gRS5jYWxsZWQ9ITEsRX1mdW5jdGlvbiBJKGspe3ZhciBFPWZ1bmN0aW9uKCl7aWYoRS5jYWxsZWQpdGhyb3cgbmV3IEVycm9yKEUub25jZUVycm9yKTtyZXR1cm4gRS5jYWxsZWQ9ITAsRS52YWx1ZT1rLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX07cmV0dXJuIEUub25jZUVycm9yPShrLm5hbWV8fCJGdW5jdGlvbiB3cmFwcGVkIHdpdGggYG9uY2VgIikrIiBzaG91bGRuJ3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIixFLmNhbGxlZD0hMSxFfU0uZXhwb3J0cz16KEspLE0uZXhwb3J0cy5zdHJpY3Q9eihJKSxLLnByb3RvPUsoZnVu''@;'; put 'put ''Y3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCJvbmNlIix7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzKX0sY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwib25jZVN0cmljdCIse3Zh''@;'; put 'put ''bHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9LDc0MzU6KE0sTyk9PntPLmVuZGlhbm5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4iTEUifSxPLmhvc3RuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBsb2NhdGlvbjwidSI/bG9jYXRpb24uaG9zdG5h''@;'; put 'put ''bWU6IiJ9LE8ubG9hZGF2Zz1mdW5jdGlvbigpe3JldHVybltdfSxPLnVwdGltZT1mdW5jdGlvbigpe3JldHVybiAwfSxPLmZyZWVtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sTy50b3RhbG1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxPLmNw''@;'; put 'put ''dXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sTy50eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIkJyb3dzZXIifSxPLnJlbGVhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvcjwidSI/bmF2aWdhdG9yLmFwcFZlcnNpb246IiJ9LE8ubmV0d29ya0ludGVyZmFjZXM9Ty5nZXROZXR3b3Jr''@;'; put 'put ''SW50ZXJmYWNlcz1mdW5jdGlvbigpe3JldHVybnt9fSxPLmFyY2g9ZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdCJ9LE8ucGxhdGZvcm09ZnVuY3Rpb24oKXtyZXR1cm4iYnJvd3NlciJ9LE8udG1wZGlyPU8udG1wRGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi90bXAifSxPLkVPTD0iXG4iLE8u''@;'; put 'put ''aG9tZWRpcj1mdW5jdGlvbigpe3JldHVybiIvIn19LDI4MTg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk4MDkpO08uY2VydGlmaWNhdGU9UigxOTM0KTt2YXIgSz16LmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVy''@;'; put 'put ''c2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXko''@;'; put 'put ''ImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtPLlJTQVByaXZhdGVLZXk9Szt2YXIgST16LmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJt''@;'; put 'put ''b2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCkpfSk7Ty5SU0FQdWJsaWNLZXk9STt2YXIgaz16LmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShFKSx0aGlz''@;'; put 'put ''LmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pO08uUHVibGljS2V5PWs7dmFyIEU9ei5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoIm5vbmUiKS5udWxs''@;'; put 'put ''XygpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCkpLm9wdGlvbmFsKCkpfSksaj16LmRlZmlu''@;'; put 'put ''ZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEUpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO08uUHJpdmF0ZUtleT1qO3ZhciBWPXou''@;'; put 'put ''ZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgp''@;'; put 'put ''Lm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgp''@;'; put 'put ''LHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO08uRW5jcnlwdGVkUHJpdmF0ZUtleT1WO3ZhciBCPXouZGVmaW5lKCJEU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJz''@;'; put 'put ''aW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9KTtPLkRTQVByaXZhdGVLZXk9QixPLkRTQXBhcmFtPXouZGVmaW5l''@;'; put 'put ''KCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIFk9ei5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFt''@;'; put 'put ''ZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZShYKSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtPLkVDUHJpdmF0ZUtleT1ZO3ZhciBYPXouZGVmaW5lKCJFQ1BhcmFtZXRlcnMiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uo''@;'; put 'put ''e25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KTtPLnNpZ25hdHVyZT16LmRlZmluZSgic2lnbmF0dXJlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9KX0sMTkzNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6''@;'; put 'put ''PVIoOTgwOSksSz16LmRlZmluZSgiVGltZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksST16LmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRo''@;'; put 'put ''aXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgidmFsdWUiKS5hbnkoKSl9KSxrPXouZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0''@;'; put 'put ''aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCkpfSksRT16LmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShrKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIp''@;'; put 'put ''LmJpdHN0cigpKX0pLGo9ei5kZWZpbmUoIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihJKX0pLFY9ei5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2Yoail9KSxCPXouZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMu''@;'; put 'put ''Y2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShWKX0pfSksWT16LmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShLKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UoSykpfSksWD16LmRlZmluZSgiRXh0ZW5zaW9u''@;'; put 'put ''IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxVPXouZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0''@;'; put 'put ''aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoayksdGhpcy5rZXkoImlzc3VlciIpLnVzZShCKSx0aGlzLmtleSgidmFsaWRp''@;'; put 'put ''dHkiKS51c2UoWSksdGhpcy5rZXkoInN1YmplY3QiKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKEUpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIp''@;'; put 'put ''LmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihYKS5vcHRpb25hbCgpKX0pLHE9ei5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlm''@;'; put 'put ''aWNhdGUiKS51c2UoVSksdGhpcy5rZXkoInNpZ25hdHVyZUFsZ29yaXRobSIpLnVzZShrKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTtNLmV4cG9ydHM9cX0sNzYzMTooTSxPLFIpPT57dmFyIHo9L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86''@;'; put 'put ''IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20sSz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20sST0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklD''@;'; put 'put ''QVRFKS0tLS0tKFswLTlBLXpcblxyKy89XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxrPVIoMzA0OCksRT1SKDQ2OTYpLGo9Uig5NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKFYsQil7dmFyIFksWD1WLnRvU3RyaW5nKCksVT1YLm1hdGNoKHopO2lmKFUpe3ZhciBxPSJhZXMiK1VbMV0s''@;'; put 'put ''ZWU9ai5mcm9tKFVbMl0sImhleCIpLHRlPWouZnJvbShVWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iiksb2U9ayhCLGVlLnNsaWNlKDAsOCkscGFyc2VJbnQoVVsxXSwxMCkpLmtleSxzZT1bXSxoZT1FLmNyZWF0ZURlY2lwaGVyaXYocSxvZSxlZSk7c2UucHVzaChoZS51cGRh''@;'; put 'put ''dGUodGUpKSxzZS5wdXNoKGhlLmZpbmFsKCkpLFk9ai5jb25jYXQoc2UpfWVsc2V7dmFyIHVlPVgubWF0Y2goSSk7WT1qLmZyb20odWVbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOlgubWF0Y2goSylbMV0sZGF0YTpZfX19LDk4MDooTSxPLFIpPT57dmFy''@;'; put 'put ''IHo9UigyODE4KSxLPVIoMjU2MiksST1SKDc2MzEpLGs9Uig0Njk2KSxFPVIoNTYzMiksaj1SKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBWKEIpe3ZhciBZOyJvYmplY3QiIT10eXBlb2YgQnx8ai5pc0J1ZmZlcihCKXx8KFk9Qi5wYXNzcGhyYXNlLEI9Qi5rZXkpLCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''QiYmKEI9ai5mcm9tKEIpKTt2YXIgWCxVLG9lLHNlLGhlLHVlLGNlLEcsYixELEgsTixnLHE9SShCLFkpLGVlPXEudGFnLHRlPXEuZGF0YTtzd2l0Y2goZWUpe2Nhc2UiQ0VSVElGSUNBVEUiOlU9ei5jZXJ0aWZpY2F0ZS5kZWNvZGUodGUsImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQ''@;'; put 'put ''dWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFV8fChVPXouUHVibGljS2V5LmRlY29kZSh0ZSwiZGVyIikpLFg9VS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIHouUlNBUHVibGljS2V5LmRlY29kZShV''@;'; put 'put ''LnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJuIFUuc3ViamVjdFByaXZhdGVLZXk9VS5zdWJqZWN0UHVibGljS2V5LHt0eXBlOiJlYyIsZGF0YTpVfTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gVS5hbGdvcml0aG0ucGFy''@;'; put 'put ''YW1zLnB1Yl9rZXk9ei5EU0FwYXJhbS5kZWNvZGUoVS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpLHt0eXBlOiJkc2EiLGRhdGE6VS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitYKX1jYXNlIkVOQ1JZUFRFRCBQUklWQVRF''@;'; put 'put ''IEtFWSI6c2U9WSxoZT0ob2U9dGU9ei5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIikpLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCx1ZT1wYXJzZUludChvZS5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTAp''@;'; put 'put ''LGNlPUtbb2UuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbigiLiIpXSxHPW9lLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixiPW9lLnN1YmplY3RQcml2YXRlS2V5LEQ9cGFyc2VJbnQoY2Uuc3BsaXQoIi0iKVsxXSwxMCkvOCxIPUUucGJrZGYyU3luYyhzZSxoZSx1ZSxE''@;'; put 'put ''LCJzaGExIiksTj1rLmNyZWF0ZURlY2lwaGVyaXYoY2UsSCxHKSwoZz1bXSkucHVzaChOLnVwZGF0ZShiKSksZy5wdXNoKE4uZmluYWwoKSksdGU9ai5jb25jYXQoZyk7Y2FzZSJQUklWQVRFIEtFWSI6c3dpdGNoKFg9KFU9ei5Qcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIikpLmFsZ29yaXRo''@;'; put 'put ''bS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gei5SU0FQcml2YXRlS2V5LmRlY29kZShVLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6VS5hbGdvcml0aG0uY3VydmUscHJp''@;'; put 'put ''dmF0ZUtleTp6LkVDUHJpdmF0ZUtleS5kZWNvZGUoVS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFUuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT16LkRTQXBhcmFtLmRlY29kZShVLnN1YmplY3RQcml2YXRlS2V5''@;'; put 'put ''LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6VS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitYKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gei5SU0FQdWJsaWNLZXkuZGVjb2RlKHRlLCJkZXIiKTtjYXNlIlJTQSBQUklW''@;'; put 'put ''QVRFIEtFWSI6cmV0dXJuIHouUlNBUHJpdmF0ZUtleS5kZWNvZGUodGUsImRlciIpO2Nhc2UiRFNBIFBSSVZBVEUgS0VZIjpyZXR1cm57dHlwZToiZHNhIixwYXJhbXM6ei5EU0FQcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIil9O2Nhc2UiRUMgUFJJVkFURSBLRVkiOnJldHVybntjdXJ2ZToo''@;'; put 'put ''dGU9ei5FQ1ByaXZhdGVLZXkuZGVjb2RlKHRlLCJkZXIiKSkucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OnRlLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrZWUpfX1NLmV4cG9ydHM9VixWLnNpZ25hdHVyZT16LnNpZ25hdHVyZX0s''@;'; put 'put ''NDA5NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7ZnVuY3Rpb24gSyhrKXtyZXR1cm4iLyI9PT1rLmNoYXJBdCgwKX1mdW5jdGlvbiBJKGspe3ZhciBFPS9eKFthLXpBLVpdOnxbXFxcL117Mn1bXlxcXC9dK1tcXFwvXStbXlxcXC9dKyk/KFtcXFwvXSk/KFtcc1xTXSo/''@;'; put 'put ''KSQvLmV4ZWMoayksaj1FWzFdfHwiIixWPSEoIWp8fCI6Ij09PWouY2hhckF0KDEpKTtyZXR1cm4hKCFFWzJdJiYhVil9TS5leHBvcnRzPSJ3aW4zMiI9PT16LnBsYXRmb3JtP0k6SyxNLmV4cG9ydHMucG9zaXg9SyxNLmV4cG9ydHMud2luMzI9SX0sMTcyNTpNPT57TS5leHBvcnRzPSJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE8sUil7Ty5zdXBlcl89UixPLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6TyxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZnVuY3Rp''@;'; put 'put ''b24oTyxSKXtPLnN1cGVyXz1SO3ZhciB6PWZ1bmN0aW9uKCl7fTt6LnByb3RvdHlwZT1SLnByb3RvdHlwZSxPLnByb3RvdHlwZT1uZXcgeixPLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1PfX0sMjk3NDpNPT57TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiBPJiYib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IE8mJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLnJlYWRVSW50OH19LDgwNTk6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9LyVbc2RqJV0vZztPLmZvcm1hdD1mdW5jdGlvbihTKXtp''@;'; put 'put ''Zighc2UoUykpe2Zvcih2YXIgdj1bXSxwPTA7cDxhcmd1bWVudHMubGVuZ3RoO3ArKyl2LnB1c2goaihhcmd1bWVudHNbcF0pKTtyZXR1cm4gdi5qb2luKCIgIil9cD0xO2Zvcih2YXIgdz1hcmd1bWVudHMsSj13Lmxlbmd0aCxuZT1TdHJpbmcoUykucmVwbGFjZShJLGZ1bmN0aW9uKGZlKXtp''@;'; put 'put ''ZigiJSUiPT09ZmUpcmV0dXJuIiUiO2lmKHA+PUopcmV0dXJuIGZlO3N3aXRjaChmZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyh3W3ArK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIod1twKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHdbcCsrXSl9Y2F0Y2h7cmV0''@;'; put 'put ''dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIGZlfX0pLGRlPXdbcF07cDxKO2RlPXdbKytwXSl0ZShkZSl8fCFjZShkZSk/bmUrPSIgIitkZTpuZSs9IiAiK2ooZGUpO3JldHVybiBuZX0sTy5kZXByZWNhdGU9ZnVuY3Rpb24oUyx2KXtpZihoZShSLmcucHJvY2VzcykpcmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIE8uZGVwcmVjYXRlKFMsdikuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtpZighMD09PXoubm9EZXByZWNhdGlvbilyZXR1cm4gUzt2YXIgcD0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighcCl7aWYoei50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcih2KTt6''@;'; put 'put ''LnRyYWNlRGVwcmVjYXRpb24/Sy50cmFjZSh2KTpLLmVycm9yKHYpLHA9ITB9cmV0dXJuIFMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIGssRT17fTtmdW5jdGlvbiBqKFMsdil7dmFyIHA9e3NlZW46W10sc3R5bGl6ZTpCfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKHAuZGVw''@;'; put 'put ''dGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYocC5jb2xvcnM9YXJndW1lbnRzWzNdKSxlZSh2KT9wLnNob3dIaWRkZW49djp2JiZPLl9leHRlbmQocCx2KSxoZShwLnNob3dIaWRkZW4pJiYocC5zaG93SGlkZGVuPSExKSxoZShwLmRlcHRoKSYmKHAuZGVwdGg9MiksaGUo''@;'; put 'put ''cC5jb2xvcnMpJiYocC5jb2xvcnM9ITEpLGhlKHAuY3VzdG9tSW5zcGVjdCkmJihwLmN1c3RvbUluc3BlY3Q9ITApLHAuY29sb3JzJiYocC5zdHlsaXplPVYpLFkocCxTLHAuZGVwdGgpfWZ1bmN0aW9uIFYoUyx2KXt2YXIgcD1qLnN0eWxlc1t2XTtyZXR1cm4gcD8iXHgxYlsiK2ouY29sb3Jz''@;'; put 'put ''W3BdWzBdKyJtIitTKyJceDFiWyIrai5jb2xvcnNbcF1bMV0rIm0iOlN9ZnVuY3Rpb24gQihTLHYpe3JldHVybiBTfWZ1bmN0aW9uIFkoUyx2LHApe2lmKFMuY3VzdG9tSW5zcGVjdCYmdiYmRCh2Lmluc3BlY3QpJiZ2Lmluc3BlY3QhPT1PLmluc3BlY3QmJighdi5jb25zdHJ1Y3Rvcnx8di5j''@;'; put 'put ''b25zdHJ1Y3Rvci5wcm90b3R5cGUhPT12KSl7dmFyIHc9di5pbnNwZWN0KHAsUyk7cmV0dXJuIHNlKHcpfHwodz1ZKFMsdyxwKSksd312YXIgSj1mdW5jdGlvbihCZSxXZSl7aWYoaGUoV2UpKXJldHVybiBCZS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihzZShXZSkpe3Zh''@;'; put 'put ''ciBLZT0iJyIrSlNPTi5zdHJpbmdpZnkoV2UpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIEJlLnN0eWxpemUoS2UsInN0cmluZyIpfXJldHVybiBvZShXZSk/QmUuc3R5bGl6ZSgiIitXZSwibnVtYmVyIik6''@;'; put 'put ''ZWUoV2UpP0JlLnN0eWxpemUoIiIrV2UsImJvb2xlYW4iKTp0ZShXZSk/QmUuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9KFMsdik7aWYoSilyZXR1cm4gSjt2YXIgV2UsbmU9T2JqZWN0LmtleXModiksZGU9KFdlPXt9LG5lLmZvckVhY2goZnVuY3Rpb24oS2UsWWUpe1dlW0tlXT0h''@;'; put 'put ''MH0pLFdlKTtpZihTLnNob3dIaWRkZW4mJihuZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2KSksYih2KSYmKG5lLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8bmUuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIFgodik7aWYoMD09PW5lLmxlbmd0aCl7aWYoRCh2KSlyZXR1''@;'; put 'put ''cm4gUy5zdHlsaXplKCJbRnVuY3Rpb24iKyh2Lm5hbWU/IjogIit2Lm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKHVlKHYpKXJldHVybiBTLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLCJyZWdleHAiKTtpZihHKHYpKXJldHVybiBTLnN0eWxpemUoRGF0ZS5w''@;'; put 'put ''cm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSwiZGF0ZSIpO2lmKGIodikpcmV0dXJuIFgodil9dmFyIHhlLExlPSIiLEZlPSExLE9lPVsieyIsIn0iXTtyZXR1cm4gcSh2KSYmKEZlPSEwLE9lPVsiWyIsIl0iXSksRCh2KSYmKExlPSIgW0Z1bmN0aW9uIisodi5uYW1lPyI6ICIrdi5uYW1lOiIi''@;'; put 'put ''KSsiXSIpLHVlKHYpJiYoTGU9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSksRyh2KSYmKExlPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHYpKSxiKHYpJiYoTGU9IiAiK1godikpLDAhPT1uZS5sZW5ndGh8fEZlJiYwIT12Lmxlbmd0aD9wPDA/dWUo''@;'; put 'put ''dik/Uy5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSwicmVnZXhwIik6Uy5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooUy5zZWVuLnB1c2godikseGU9RmU/ZnVuY3Rpb24oQmUsV2UsS2UsWWUsSmUpe2Zvcih2YXIgbHQ9W10sUGU9MCxiZT1XZS5sZW5n''@;'; put 'put ''dGg7UGU8YmU7KytQZSlDKFdlLFN0cmluZyhQZSkpP2x0LnB1c2goVShCZSxXZSxLZSxZZSxTdHJpbmcoUGUpLCEwKSk6bHQucHVzaCgiIik7cmV0dXJuIEplLmZvckVhY2goZnVuY3Rpb24oQWUpe0FlLm1hdGNoKC9eXGQrJC8pfHxsdC5wdXNoKFUoQmUsV2UsS2UsWWUsQWUsITApKX0pLGx0''@;'; put 'put ''fShTLHYscCxkZSxuZSk6bmUubWFwKGZ1bmN0aW9uKEJlKXtyZXR1cm4gVShTLHYscCxkZSxCZSxGZSl9KSxTLnNlZW4ucG9wKCksZnVuY3Rpb24oQmUsV2UsS2Upe3JldHVybiBCZS5yZWR1Y2UoZnVuY3Rpb24oSmUsbHQpe3JldHVybiBsdC5pbmRleE9mKCJcbiIpLEplK2x0LnJlcGxhY2Uo''@;'; put 'put ''L1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MD9LZVswXSsoIiI9PT1XZT8iIjpXZSsiXG4gIikrIiAiK0JlLmpvaW4oIixcbiAgIikrIiAiK0tlWzFdOktlWzBdK1dlKyIgIitCZS5qb2luKCIsICIpKyIgIitLZVsxXX0oeGUsTGUsT2UpKTpPZVswXStMZStPZVsxXX1mdW5j''@;'; put 'put ''dGlvbiBYKFMpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTKSsiXSJ9ZnVuY3Rpb24gVShTLHYscCx3LEosbmUpe3ZhciBkZSxmZSx4ZTtpZigoeGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2LEopfHx7dmFsdWU6dltKXX0pLmdldD9mZT1TLnN0''@;'; put 'put ''eWxpemUoeGUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTp4ZS5zZXQmJihmZT1TLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxDKHcsSil8fChkZT0iWyIrSisiXSIpLGZlfHwoUy5zZWVuLmluZGV4T2YoeGUudmFsdWUpPDA/KGZlPXRlKHApP1ko''@;'; put 'put ''Uyx4ZS52YWx1ZSxudWxsKTpZKFMseGUudmFsdWUscC0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKGZlPW5lP2ZlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihMZSl7cmV0dXJuIiAgIitMZX0pLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrZmUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKExl''@;'; put 'put ''KXtyZXR1cm4iICAgIitMZX0pLmpvaW4oIlxuIikpOmZlPVMuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksaGUoZGUpKXtpZihuZSYmSi5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gZmU7KGRlPUpTT04uc3RyaW5naWZ5KCIiK0opKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8w''@;'; put 'put ''LTldKikiJC8pPyhkZT1kZS5zdWJzdHIoMSxkZS5sZW5ndGgtMiksZGU9Uy5zdHlsaXplKGRlLCJuYW1lIikpOihkZT1kZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksZGU9Uy5zdHlsaXplKGRlLCJzdHJpbmciKSl9cmV0''@;'; put 'put ''dXJuIGRlKyI6ICIrZmV9ZnVuY3Rpb24gcShTKXtyZXR1cm4gQXJyYXkuaXNBcnJheShTKX1mdW5jdGlvbiBlZShTKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBTfWZ1bmN0aW9uIHRlKFMpe3JldHVybiBudWxsPT09U31mdW5jdGlvbiBvZShTKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFN9''@;'; put 'put ''ZnVuY3Rpb24gc2UoUyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTfWZ1bmN0aW9uIGhlKFMpe3JldHVybiB2b2lkIDA9PT1TfWZ1bmN0aW9uIHVlKFMpe3JldHVybiBjZShTKSYmIltvYmplY3QgUmVnRXhwXSI9PT1IKFMpfWZ1bmN0aW9uIGNlKFMpe3JldHVybiJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''UyYmbnVsbCE9PVN9ZnVuY3Rpb24gRyhTKXtyZXR1cm4gY2UoUykmJiJbb2JqZWN0IERhdGVdIj09PUgoUyl9ZnVuY3Rpb24gYihTKXtyZXR1cm4gY2UoUykmJigiW29iamVjdCBFcnJvcl0iPT09SChTKXx8UyBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBEKFMpe3JldHVybiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBTfWZ1bmN0aW9uIEgoUyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTKX1mdW5jdGlvbiBOKFMpe3JldHVybiBTPDEwPyIwIitTLnRvU3RyaW5nKDEwKTpTLnRvU3RyaW5nKDEwKX1PLmRlYnVnbG9nPWZ1bmN0aW9uKFMpe2lmKGhlKGspJiYoaz16''@;'; put 'put ''LmVudi5OT0RFX0RFQlVHfHwiIiksUz1TLnRvVXBwZXJDYXNlKCksIUVbU10paWYobmV3IFJlZ0V4cCgiXFxiIitTKyJcXGIiLCJpIikudGVzdChrKSl7dmFyIHY9ei5waWQ7RVtTXT1mdW5jdGlvbigpe3ZhciBwPU8uZm9ybWF0LmFwcGx5KE8sYXJndW1lbnRzKTtLLmVycm9yKCIlcyAlZDog''@;'; put 'put ''JXMiLFMsdixwKX19ZWxzZSBFW1NdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gRVtTXX0sTy5pbnNwZWN0PWosai5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAs''@;'; put 'put ''MzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LGouc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51''@;'; put 'put ''bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sTy5pc0FycmF5PXEsTy5pc0Jvb2xlYW49ZWUsTy5pc051bGw9dGUsTy5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihTKXtyZXR1cm4gbnVsbD09U30sTy5pc051bWJlcj1vZSxPLmlzU3RyaW5n''@;'; put 'put ''PXNlLE8uaXNTeW1ib2w9ZnVuY3Rpb24oUyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBTfSxPLmlzVW5kZWZpbmVkPWhlLE8uaXNSZWdFeHA9dWUsTy5pc09iamVjdD1jZSxPLmlzRGF0ZT1HLE8uaXNFcnJvcj1iLE8uaXNGdW5jdGlvbj1ELE8uaXNQcmltaXRpdmU9ZnVuY3Rpb24oUyl7cmV0''@;'; put 'put ''dXJuIG51bGw9PT1TfHwiYm9vbGVhbiI9PXR5cGVvZiBTfHwibnVtYmVyIj09dHlwZW9mIFN8fCJzdHJpbmciPT10eXBlb2YgU3x8InN5bWJvbCI9PXR5cGVvZiBTfHx2b2lkIDA9PT1TfSxPLmlzQnVmZmVyPVIoMjk3NCk7dmFyIGc9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJK''@;'; put 'put ''dW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBDKFMsdil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLHYpfU8ubG9nPWZ1bmN0aW9uKCl7dmFyIFMsdjtLLmxvZygiJXMgLSAlcyIsKHY9W04oKFM9bmV3IERhdGUp''@;'; put 'put ''LmdldEhvdXJzKCkpLE4oUy5nZXRNaW51dGVzKCkpLE4oUy5nZXRTZWNvbmRzKCkpXS5qb2luKCI6IiksW1MuZ2V0RGF0ZSgpLGdbUy5nZXRNb250aCgpXSx2XS5qb2luKCIgIikpLE8uZm9ybWF0LmFwcGx5KE8sYXJndW1lbnRzKSl9LE8uaW5oZXJpdHM9UigxNzI1KSxPLl9leHRlbmQ9ZnVu''@;'; put 'put ''Y3Rpb24oUyx2KXtpZighdnx8IWNlKHYpKXJldHVybiBTO2Zvcih2YXIgcD1PYmplY3Qua2V5cyh2KSx3PXAubGVuZ3RoO3ctLTspU1twW3ddXT12W3Bbd11dO3JldHVybiBTfX0sMjUyMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz0id2luMzIiPT09ei5wbGF0Zm9y''@;'; put 'put ''bSxJPVIoODA1OSk7ZnVuY3Rpb24gayhvZSxzZSl7Zm9yKHZhciBoZT1bXSx1ZT0wO3VlPG9lLmxlbmd0aDt1ZSsrKXt2YXIgY2U9b2VbdWVdO2NlJiYiLiIhPT1jZSYmKCIuLiI9PT1jZT9oZS5sZW5ndGgmJiIuLiIhPT1oZVtoZS5sZW5ndGgtMV0/aGUucG9wKCk6c2UmJmhlLnB1c2goIi4u''@;'; put 'put ''Iik6aGUucHVzaChjZSkpfXJldHVybiBoZX1mdW5jdGlvbiBFKG9lKXtmb3IodmFyIHNlPW9lLmxlbmd0aC0xLGhlPTA7aGU8PXNlJiYhb2VbaGVdO2hlKyspO2Zvcih2YXIgdWU9c2U7dWU+PTAmJiFvZVt1ZV07dWUtLSk7cmV0dXJuIDA9PT1oZSYmdWU9PT1zZT9vZTpoZT51ZT9bXTpvZS5z''@;'; put 'put ''bGljZShoZSx1ZSsxKX12YXIgaj0vXihbYS16QS1aXTp8W1xcXC9dezJ9W15cXFwvXStbXFxcL10rW15cXFwvXSspPyhbXFxcL10pPyhbXHNcU10qPykkLyxWPS9eKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXFxcL10rP3wpKFwuW14uXC9cXF0qfCkpKD86W1xcXC9dKikkLyxCPXt9O2Z1bmN0''@;'; put 'put ''aW9uIFkob2Upe3ZhciBzZT1qLmV4ZWMob2UpLGhlPShzZVsxXXx8IiIpKyhzZVsyXXx8IiIpLGNlPVYuZXhlYyhzZVszXXx8IiIpO3JldHVybltoZSxjZVsxXSxjZVsyXSxjZVszXV19ZnVuY3Rpb24gWChvZSl7dmFyIHNlPWouZXhlYyhvZSksaGU9c2VbMV18fCIiLHVlPSEhaGUmJiI6IiE9''@;'; put 'put ''PWhlWzFdO3JldHVybntkZXZpY2U6aGUsaXNVbmM6dWUsaXNBYnNvbHV0ZTp1ZXx8ISFzZVsyXSx0YWlsOnNlWzNdfX1mdW5jdGlvbiBVKG9lKXtyZXR1cm4iXFxcXCIrb2UucmVwbGFjZSgvXltcXFwvXSsvLCIiKS5yZXBsYWNlKC9bXFxcL10rL2csIlxcIil9Qi5yZXNvbHZlPWZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciBvZT0iIixzZT0iIixoZT0hMSx1ZT1hcmd1bWVudHMubGVuZ3RoLTE7dWU+PS0xO3VlLS0pe3ZhciBjZTtpZih1ZT49MD9jZT1hcmd1bWVudHNbdWVdOm9lPyhjZT16LmVudlsiPSIrb2VdKSYmY2Uuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKT09PW9lLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkrIlxcInx8KGNlPW9lKyJcXCIpOmNlPXouY3dkKCksIUkuaXNTdHJpbmcoY2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoY2Upe3ZhciBHPVgoY2UpLGI9Ry5kZXZpY2UsRD1HLmlzVW5jLEg9Ry5pc0Fic29s''@;'; put 'put ''dXRlLE49Ry50YWlsO2lmKCghYnx8IW9lfHxiLnRvTG93ZXJDYXNlKCk9PT1vZS50b0xvd2VyQ2FzZSgpKSYmKG9lfHwob2U9YiksaGV8fChzZT1OKyJcXCIrc2UsaGU9SCksb2UmJmhlKSlicmVha319cmV0dXJuIEQmJihvZT1VKG9lKSksb2UrKGhlPyJcXCI6IiIpKyhzZT1rKHNlLnNwbGl0''@;'; put 'put ''KC9bXFxcL10rLyksIWhlKS5qb2luKCJcXCIpKXx8Ii4ifSxCLm5vcm1hbGl6ZT1mdW5jdGlvbihvZSl7dmFyIHNlPVgob2UpLGhlPXNlLmRldmljZSx1ZT1zZS5pc1VuYyxjZT1zZS5pc0Fic29sdXRlLEc9c2UudGFpbCxiPS9bXFxcL10kLy50ZXN0KEcpO3JldHVybihHPWsoRy5zcGxpdCgv''@;'; put 'put ''W1xcXC9dKy8pLCFjZSkuam9pbigiXFwiKSl8fGNlfHwoRz0iLiIpLEcmJmImJihHKz0iXFwiKSx1ZSYmKGhlPVUoaGUpKSxoZSsoY2U/IlxcIjoiIikrR30sQi5pc0Fic29sdXRlPWZ1bmN0aW9uKG9lKXtyZXR1cm4gWChvZSkuaXNBYnNvbHV0ZX0sQi5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciBvZT1bXSxzZT0wO3NlPGFyZ3VtZW50cy5sZW5ndGg7c2UrKyl7dmFyIGhlPWFyZ3VtZW50c1tzZV07aWYoIUkuaXNTdHJpbmcoaGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7aGUmJm9lLnB1c2goaGUpfXZhciB1ZT1v''@;'; put 'put ''ZS5qb2luKCJcXCIpO3JldHVybi9eW1xcXC9dezJ9W15cXFwvXS8udGVzdChvZVswXSl8fCh1ZT11ZS5yZXBsYWNlKC9eW1xcXC9dezIsfS8sIlxcIikpLEIubm9ybWFsaXplKHVlKX0sQi5yZWxhdGl2ZT1mdW5jdGlvbihvZSxzZSl7b2U9Qi5yZXNvbHZlKG9lKSxzZT1CLnJlc29sdmUoc2Up''@;'; put 'put ''O2Zvcih2YXIgaGU9b2UudG9Mb3dlckNhc2UoKSx1ZT1zZS50b0xvd2VyQ2FzZSgpLGNlPUUoc2Uuc3BsaXQoIlxcIikpLEc9RShoZS5zcGxpdCgiXFwiKSksYj1FKHVlLnNwbGl0KCJcXCIpKSxEPU1hdGgubWluKEcubGVuZ3RoLGIubGVuZ3RoKSxIPUQsTj0wO048RDtOKyspaWYoR1tOXSE9''@;'; put 'put ''PWJbTl0pe0g9TjticmVha31pZigwPT1IKXJldHVybiBzZTt2YXIgZz1bXTtmb3IoTj1IO048Ry5sZW5ndGg7TisrKWcucHVzaCgiLi4iKTtyZXR1cm4oZz1nLmNvbmNhdChjZS5zbGljZShIKSkpLmpvaW4oIlxcIil9LEIuX21ha2VMb25nPWZ1bmN0aW9uKG9lKXtpZighSS5pc1N0cmluZyhv''@;'; put 'put ''ZSkpcmV0dXJuIG9lO2lmKCFvZSlyZXR1cm4iIjt2YXIgc2U9Qi5yZXNvbHZlKG9lKTtyZXR1cm4vXlthLXpBLVpdXDpcXC8udGVzdChzZSk/IlxcXFw/XFwiK3NlOi9eXFxcXFtePy5dLy50ZXN0KHNlKT8iXFxcXD9cXFVOQ1xcIitzZS5zdWJzdHJpbmcoMik6b2V9LEIuZGlybmFtZT1mdW5j''@;'; put 'put ''dGlvbihvZSl7dmFyIHNlPVkob2UpLGhlPXNlWzBdLHVlPXNlWzFdO3JldHVybiBoZXx8dWU/KHVlJiYodWU9dWUuc3Vic3RyKDAsdWUubGVuZ3RoLTEpKSxoZSt1ZSk6Ii4ifSxCLmJhc2VuYW1lPWZ1bmN0aW9uKG9lLHNlKXt2YXIgaGU9WShvZSlbMl07cmV0dXJuIHNlJiZoZS5zdWJzdHIo''@;'; put 'put ''LTEqc2UubGVuZ3RoKT09PXNlJiYoaGU9aGUuc3Vic3RyKDAsaGUubGVuZ3RoLXNlLmxlbmd0aCkpLGhlfSxCLmV4dG5hbWU9ZnVuY3Rpb24ob2Upe3JldHVybiBZKG9lKVszXX0sQi5mb3JtYXQ9ZnVuY3Rpb24ob2Upe2lmKCFJLmlzT2JqZWN0KG9lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQ''@;'; put 'put ''YXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2Ygb2UpO2lmKCFJLmlzU3RyaW5nKG9lLnJvb3R8fCIiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90ICIrdHlw''@;'; put 'put ''ZW9mIG9lLnJvb3QpO3ZhciBoZT1vZS5kaXIsdWU9b2UuYmFzZXx8IiI7cmV0dXJuIGhlP2hlW2hlLmxlbmd0aC0xXT09PUIuc2VwP2hlK3VlOmhlK0Iuc2VwK3VlOnVlfSxCLnBhcnNlPWZ1bmN0aW9uKG9lKXtpZighSS5pc1N0cmluZyhvZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1l''@;'; put 'put ''dGVyICdwYXRoU3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2Ygb2UpO3ZhciBzZT1ZKG9lKTtpZighc2V8fDQhPT1zZS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK29lKyInIik7cmV0dXJue3Jvb3Q6c2VbMF0sZGlyOnNlWzBdK3NlWzFd''@;'; put 'put ''LnNsaWNlKDAsLTEpLGJhc2U6c2VbMl0sZXh0OnNlWzNdLG5hbWU6c2VbMl0uc2xpY2UoMCxzZVsyXS5sZW5ndGgtc2VbM10ubGVuZ3RoKX19LEIuc2VwPSJcXCIsQi5kZWxpbWl0ZXI9IjsiO3ZhciBxPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8''@;'; put 'put ''KSkoPzpbXC9dKikkLyxlZT17fTtmdW5jdGlvbiB0ZShvZSl7cmV0dXJuIHEuZXhlYyhvZSkuc2xpY2UoMSl9ZWUucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgb2U9IiIsc2U9ITEsaGU9YXJndW1lbnRzLmxlbmd0aC0xO2hlPj0tMSYmIXNlO2hlLS0pe3ZhciB1ZT1oZT49MD9hcmd1bWVu''@;'; put 'put ''dHNbaGVdOnouY3dkKCk7aWYoIUkuaXNTdHJpbmcodWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7dWUmJihvZT11ZSsiLyIrb2Usc2U9Ii8iPT09dWVbMF0pfXJldHVybihzZT8iLyI6IiIpKyhvZT1rKG9lLnNwbGl0''@;'; put 'put ''KCIvIiksIXNlKS5qb2luKCIvIikpfHwiLiJ9LGVlLm5vcm1hbGl6ZT1mdW5jdGlvbihvZSl7dmFyIHNlPWVlLmlzQWJzb2x1dGUob2UpLGhlPW9lJiYiLyI9PT1vZVtvZS5sZW5ndGgtMV07cmV0dXJuKG9lPWsob2Uuc3BsaXQoIi8iKSwhc2UpLmpvaW4oIi8iKSl8fHNlfHwob2U9Ii4iKSxv''@;'; put 'put ''ZSYmaGUmJihvZSs9Ii8iKSwoc2U/Ii8iOiIiKStvZX0sZWUuaXNBYnNvbHV0ZT1mdW5jdGlvbihvZSl7cmV0dXJuIi8iPT09b2UuY2hhckF0KDApfSxlZS5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBvZT0iIixzZT0wO3NlPGFyZ3VtZW50cy5sZW5ndGg7c2UrKyl7dmFyIGhlPWFyZ3VtZW50''@;'; put 'put ''c1tzZV07aWYoIUkuaXNTdHJpbmcoaGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7aGUmJihvZSs9b2U/Ii8iK2hlOmhlKX1yZXR1cm4gZWUubm9ybWFsaXplKG9lKX0sZWUucmVsYXRpdmU9ZnVuY3Rpb24ob2Usc2Upe29l''@;'; put 'put ''PWVlLnJlc29sdmUob2UpLnN1YnN0cigxKSxzZT1lZS5yZXNvbHZlKHNlKS5zdWJzdHIoMSk7Zm9yKHZhciBoZT1FKG9lLnNwbGl0KCIvIikpLHVlPUUoc2Uuc3BsaXQoIi8iKSksY2U9TWF0aC5taW4oaGUubGVuZ3RoLHVlLmxlbmd0aCksRz1jZSxiPTA7YjxjZTtiKyspaWYoaGVbYl0hPT11''@;'; put 'put ''ZVtiXSl7Rz1iO2JyZWFrfXZhciBEPVtdO2ZvcihiPUc7YjxoZS5sZW5ndGg7YisrKUQucHVzaCgiLi4iKTtyZXR1cm4oRD1ELmNvbmNhdCh1ZS5zbGljZShHKSkpLmpvaW4oIi8iKX0sZWUuX21ha2VMb25nPWZ1bmN0aW9uKG9lKXtyZXR1cm4gb2V9LGVlLmRpcm5hbWU9ZnVuY3Rpb24ob2Up''@;'; put 'put ''e3ZhciBzZT10ZShvZSksaGU9c2VbMF0sdWU9c2VbMV07cmV0dXJuIGhlfHx1ZT8odWUmJih1ZT11ZS5zdWJzdHIoMCx1ZS5sZW5ndGgtMSkpLGhlK3VlKToiLiJ9LGVlLmJhc2VuYW1lPWZ1bmN0aW9uKG9lLHNlKXt2YXIgaGU9dGUob2UpWzJdO3JldHVybiBzZSYmaGUuc3Vic3RyKC0xKnNl''@;'; put 'put ''Lmxlbmd0aCk9PT1zZSYmKGhlPWhlLnN1YnN0cigwLGhlLmxlbmd0aC1zZS5sZW5ndGgpKSxoZX0sZWUuZXh0bmFtZT1mdW5jdGlvbihvZSl7cmV0dXJuIHRlKG9lKVszXX0sZWUuZm9ybWF0PWZ1bmN0aW9uKG9lKXtpZighSS5pc09iamVjdChvZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFy''@;'; put 'put ''YW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIG9lKTtpZighSS5pc1N0cmluZyhvZS5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVv''@;'; put 'put ''ZiBvZS5yb290KTtyZXR1cm4ob2UuZGlyP29lLmRpcitlZS5zZXA6IiIpKyhvZS5iYXNlfHwiIil9LGVlLnBhcnNlPWZ1bmN0aW9uKG9lKXtpZighSS5pc1N0cmluZyhvZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoU3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3Qg''@;'; put 'put ''Iit0eXBlb2Ygb2UpO3ZhciBzZT10ZShvZSk7aWYoIXNlfHw0IT09c2UubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0aCAnIitvZSsiJyIpO3JldHVybiBzZVsxXT1zZVsxXXx8IiIsc2VbMl09c2VbMl18fCIiLHNlWzNdPXNlWzNdfHwiIix7cm9vdDpzZVswXSxkaXI6''@;'; put 'put ''c2VbMF0rc2VbMV0uc2xpY2UoMCwtMSksYmFzZTpzZVsyXSxleHQ6c2VbM10sbmFtZTpzZVsyXS5zbGljZSgwLHNlWzJdLmxlbmd0aC1zZVszXS5sZW5ndGgpfX0sZWUuc2VwPSIvIixlZS5kZWxpbWl0ZXI9IjoiLE0uZXhwb3J0cz1LP0I6ZWUsTS5leHBvcnRzLnBvc2l4PWVlLE0uZXhwb3J0''@;'; put 'put ''cy53aW4zMj1CfSw1NjMyOihNLE8sUik9PntPLnBia2RmMj1SKDg2MzgpLE8ucGJrZGYyU3luYz1SKDEyNTcpfSw4NjM4OihNLE8sUik9Pnt2YXIgeixLLEk9Uig5NTA5KS5CdWZmZXIsaz1SKDczNTcpLEU9UigyMzY4KSxqPVIoMTI1NyksVj1SKDc3NzcpLEI9Ui5nLmNyeXB0byYmUi5nLmNy''@;'; put 'put ''eXB0by5zdWJ0bGUsWT17c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQiLCJzaGEtNTEyIjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEy''@;'; put 'put ''In0sWD1bXTtmdW5jdGlvbiBVKCl7cmV0dXJuIEt8fChLPVIuZy5wcm9jZXNzJiZSLmcucHJvY2Vzcy5uZXh0VGljaz9SLmcucHJvY2Vzcy5uZXh0VGljazpSLmcucXVldWVNaWNyb3Rhc2s/Ui5nLnF1ZXVlTWljcm90YXNrOlIuZy5zZXRJbW1lZGlhdGU/Ui5nLnNldEltbWVkaWF0ZTpSLmcu''@;'; put 'put ''c2V0VGltZW91dCl9ZnVuY3Rpb24gcShlZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIEIuaW1wb3J0S2V5KCJyYXciLGVlLHtuYW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbih1ZSl7cmV0dXJuIEIuZGVyaXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OnRlLGl0''@;'; put 'put ''ZXJhdGlvbnM6b2UsaGFzaDp7bmFtZTpoZX19LHVlLHNlPDwzKX0pLnRoZW4oZnVuY3Rpb24odWUpe3JldHVybiBJLmZyb20odWUpfSl9TS5leHBvcnRzPWZ1bmN0aW9uKGVlLHRlLG9lLHNlLGhlLHVlKXsiZnVuY3Rpb24iPT10eXBlb2YgaGUmJih1ZT1oZSxoZT12b2lkIDApO3ZhciBHLGIs''@;'; put 'put ''Y2U9WVsoaGU9aGV8fCJzaGExIikudG9Mb3dlckNhc2UoKV07aWYoY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLmcuUHJvbWlzZSl7aWYoayhvZSxzZSksZWU9VihlZSxFLCJQYXNzd29yZCIpLHRlPVYodGUsRSwiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiB1ZSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Ik5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpO0c9ZnVuY3Rpb24oRyl7aWYoUi5nLnByb2Nlc3MmJiFSLmcucHJvY2Vzcy5icm93c2VyfHwhQnx8IUIuaW1wb3J0S2V5fHwhQi5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9PVhbR10pcmV0''@;'; put 'put ''dXJuIFhbR107dmFyIGI9cSh6PXp8fEkuYWxsb2MoOCkseiwxMCwxMjgsRykudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiBYW0ddPWIsYn0oY2UpLnRoZW4oZnVuY3Rpb24oRyl7cmV0dXJuIEc/cShlZSx0ZSxvZSxzZSxjZSk6''@;'; put 'put ''aihlZSx0ZSxvZSxzZSxoZSl9KSxiPXVlLEcudGhlbihmdW5jdGlvbihEKXtVKCkoZnVuY3Rpb24oKXtiKG51bGwsRCl9KX0sZnVuY3Rpb24oRCl7VSgpKGZ1bmN0aW9uKCl7YihEKX0pfSl9ZWxzZSBVKCkoZnVuY3Rpb24oKXt2YXIgRzt0cnl7Rz1qKGVlLHRlLG9lLHNlLGhlKX1jYXRjaChi''@;'; put 'put ''KXtyZXR1cm4gdWUoYil9dWUobnVsbCxHKX0pfX0sMjM2ODooTSxPLFIpPT57dmFyIHosSz1SKDQxNTUpO3o9Ui5nLnByb2Nlc3MmJlIuZy5wcm9jZXNzLmJyb3dzZXI/InV0Zi04IjpSLmcucHJvY2VzcyYmUi5nLnByb2Nlc3MudmVyc2lvbj9wYXJzZUludChLLnZlcnNpb24uc3BsaXQoIi4i''@;'; put 'put ''KVswXS5zbGljZSgxKSwxMCk+PTY/InV0Zi04IjoiYmluYXJ5IjoidXRmLTgiLE0uZXhwb3J0cz16fSw3MzU3Ok09Pnt2YXIgTz1NYXRoLnBvdygyLDMwKS0xO00uZXhwb3J0cz1mdW5jdGlvbihSLHope2lmKCJudW1iZXIiIT10eXBlb2YgUil0aHJvdyBuZXcgVHlwZUVycm9yKCJJdGVyYXRp''@;'; put 'put ''b25zIG5vdCBhIG51bWJlciIpO2lmKFI8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQgaXRlcmF0aW9ucyIpO2lmKCJudW1iZXIiIT10eXBlb2Ygeil0aHJvdyBuZXcgVHlwZUVycm9yKCJLZXkgbGVuZ3RoIG5vdCBhIG51bWJlciIpO2lmKHo8MHx8ej5PfHx6IT16KXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkJhZCBrZXkgbGVuZ3RoIil9fSwxMjU3OihNLE8sUik9Pnt2YXIgej1SKDgwMjgpLEs9Uig5Nzg1KSxJPVIoOTA3Miksaz1SKDk1MDkpLkJ1ZmZlcixFPVIoNzM1Nyksaj1SKDIzNjgpLFY9Uig3Nzc3KSxCPWsuYWxsb2MoMTI4KSxZPXttZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgs''@;'; put 'put ''c2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gWChVLHEsZWUpe3ZhciBHLHRlPSJybWQxNjAiPT09KEc9VSl8fCJyaXBlbWQxNjAiPT09Rz9mdW5jdGlvbiBEKEgpe3JldHVybihuZXcgSykudXBkYXRlKEgpLmRpZ2VzdCgpfToi''@;'; put 'put ''bWQ1Ij09PUc/ejpmdW5jdGlvbiBiKEgpe3JldHVybiBJKEcpLnVwZGF0ZShIKS5kaWdlc3QoKX0sb2U9InNoYTUxMiI9PT1VfHwic2hhMzg0Ij09PVU/MTI4OjY0O3EubGVuZ3RoPm9lP3E9dGUocSk6cS5sZW5ndGg8b2UmJihxPWsuY29uY2F0KFtxLEJdLG9lKSk7Zm9yKHZhciBzZT1rLmFs''@;'; put 'put ''bG9jVW5zYWZlKG9lK1lbVV0pLGhlPWsuYWxsb2NVbnNhZmUob2UrWVtVXSksdWU9MDt1ZTxvZTt1ZSsrKXNlW3VlXT01NF5xW3VlXSxoZVt1ZV09OTJecVt1ZV07dmFyIGNlPWsuYWxsb2NVbnNhZmUob2UrZWUrNCk7c2UuY29weShjZSwwLDAsb2UpLHRoaXMuaXBhZDE9Y2UsdGhpcy5pcGFk''@;'; put 'put ''Mj1zZSx0aGlzLm9wYWQ9aGUsdGhpcy5hbGc9VSx0aGlzLmJsb2Nrc2l6ZT1vZSx0aGlzLmhhc2g9dGUsdGhpcy5zaXplPVlbVV19WC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKFUscSl7cmV0dXJuIFUuY29weShxLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2gocSkuY29weSh0aGlzLm9wYWQs''@;'; put 'put ''dGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSxNLmV4cG9ydHM9ZnVuY3Rpb24oVSxxLGVlLHRlLG9lKXtFKGVlLHRlKTt2YXIgc2U9bmV3IFgob2U9b2V8fCJzaGExIixVPVYoVSxqLCJQYXNzd29yZCIpLChxPVYocSxqLCJTYWx0IikpLmxlbmd0aCksaGU9ay5hbGxvY1Vu''@;'; put 'put ''c2FmZSh0ZSksdWU9ay5hbGxvY1Vuc2FmZShxLmxlbmd0aCs0KTtxLmNvcHkodWUsMCwwLHEubGVuZ3RoKTtmb3IodmFyIGNlPTAsRz1ZW29lXSxiPU1hdGguY2VpbCh0ZS9HKSxEPTE7RDw9YjtEKyspe3VlLndyaXRlVUludDMyQkUoRCxxLmxlbmd0aCk7Zm9yKHZhciBIPXNlLnJ1bih1ZSxz''@;'; put 'put ''ZS5pcGFkMSksTj1ILGc9MTtnPGVlO2crKyl7Tj1zZS5ydW4oTixzZS5pcGFkMik7Zm9yKHZhciBDPTA7QzxHO0MrKylIW0NdXj1OW0NdfUguY29weShoZSxjZSksY2UrPUd9cmV0dXJuIGhlfX0sNzc3NzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KEssSSxrKXtpZih6LmlzQnVmZmVyKEspKXJldHVybiBLO2lmKCJzdHJpbmciPT10eXBlb2YgSylyZXR1cm4gei5mcm9tKEssSSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KEspKXJldHVybiB6LmZyb20oSy5idWZmZXIpO3Rocm93IG5ldyBUeXBlRXJyb3IoaysiIG11c3QgYmUgYSBzdHJpbmcs''@;'; put 'put ''IGEgQnVmZmVyLCBhIHR5cGVkIGFycmF5IG9yIGEgRGF0YVZpZXciKX19LDQxNTU6TT0+e3ZhciBPLFIsej1NLmV4cG9ydHM9e307ZnVuY3Rpb24gSygpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIEkoKXt0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGsoZWUpe2lmKE89PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGVlLDApO2lmKChPPT09S3x8IU8pJiZzZXRUaW1lb3V0KXJldHVybiBPPXNldFRpbWVvdXQsc2V0VGltZW91dChlZSwwKTt0cnl7''@;'; put 'put ''cmV0dXJuIE8oZWUsMCl9Y2F0Y2h7dHJ5e3JldHVybiBPLmNhbGwobnVsbCxlZSwwKX1jYXRjaHtyZXR1cm4gTy5jYWxsKHRoaXMsZWUsMCl9fX0hZnVuY3Rpb24oKXt0cnl7Tz0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Okt9Y2F0Y2h7Tz1LfXRyeXtSPSJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Okl9Y2F0Y2h7Uj1JfX0oKTt2YXIgRSxqPVtdLFY9ITEsQj0tMTtmdW5jdGlvbiBZKCl7ViYmRSYmKFY9ITEsRS5sZW5ndGg/aj1FLmNvbmNhdChqKTpCPS0xLGoubGVuZ3RoJiZYKCkpfWZ1bmN0aW9uIFgoKXtpZighVil7''@;'; put 'put ''dmFyIGVlPWsoWSk7Vj0hMDtmb3IodmFyIHRlPWoubGVuZ3RoO3RlOyl7Zm9yKEU9aixqPVtdOysrQjx0ZTspRSYmRVtCXS5ydW4oKTtCPS0xLHRlPWoubGVuZ3RofUU9bnVsbCxWPSExLGZ1bmN0aW9uKG9lKXtpZihSPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQob2UpO2lm''@;'; put 'put ''KChSPT09SXx8IVIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIFI9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChvZSk7dHJ5e3JldHVybiBSKG9lKX1jYXRjaHt0cnl7cmV0dXJuIFIuY2FsbChudWxsLG9lKX1jYXRjaHtyZXR1cm4gUi5jYWxsKHRoaXMsb2UpfX19KGVlKX19ZnVuY3Rpb24gVShl''@;'; put 'put ''ZSx0ZSl7dGhpcy5mdW49ZWUsdGhpcy5hcnJheT10ZX1mdW5jdGlvbiBxKCl7fXoubmV4dFRpY2s9ZnVuY3Rpb24oZWUpe3ZhciB0ZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBvZT0xO29lPGFyZ3VtZW50cy5sZW5ndGg7b2Ur''@;'; put 'put ''Kyl0ZVtvZS0xXT1hcmd1bWVudHNbb2VdO2oucHVzaChuZXcgVShlZSx0ZSkpLDEhPT1qLmxlbmd0aHx8Vnx8ayhYKX0sVS5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sei50aXRsZT0iYnJvd3NlciIsei5icm93c2VyPSEwLHouZW52''@;'; put 'put ''PXt9LHouYXJndj1bXSx6LnZlcnNpb249IiIsei52ZXJzaW9ucz17fSx6Lm9uPXEsei5hZGRMaXN0ZW5lcj1xLHoub25jZT1xLHoub2ZmPXEsei5yZW1vdmVMaXN0ZW5lcj1xLHoucmVtb3ZlQWxsTGlzdGVuZXJzPXEsei5lbWl0PXEsei5wcmVwZW5kTGlzdGVuZXI9cSx6LnByZXBlbmRPbmNl''@;'; put 'put ''TGlzdGVuZXI9cSx6Lmxpc3RlbmVycz1mdW5jdGlvbihlZSl7cmV0dXJuW119LHouYmluZGluZz1mdW5jdGlvbihlZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSx6LmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sei5jaGRpcj1mdW5jdGlv''@;'; put 'put ''bihlZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sei51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sNjI0NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzY4OSksSz17fTtLLnJ1bGVzPVIoMzcwNCkubWFwKGZ1bmN0aW9uKEkp''@;'; put 'put ''e3JldHVybntydWxlOkksc3VmZml4OkkucmVwbGFjZSgvXihcKlwufFwhKS8sIiIpLHB1bnlTdWZmaXg6LTEsd2lsZGNhcmQ6IioiPT09SS5jaGFyQXQoMCksZXhjZXB0aW9uOiIhIj09PUkuY2hhckF0KDApfX0pLEsuZW5kc1dpdGg9ZnVuY3Rpb24oSSxrKXtyZXR1cm4tMSE9PUkuaW5kZXhP''@;'; put 'put ''ZihrLEkubGVuZ3RoLWsubGVuZ3RoKX0sSy5maW5kUnVsZT1mdW5jdGlvbihJKXt2YXIgaz16LnRvQVNDSUkoSSk7cmV0dXJuIEsucnVsZXMucmVkdWNlKGZ1bmN0aW9uKEUsail7cmV0dXJuLTE9PT1qLnB1bnlTdWZmaXgmJihqLnB1bnlTdWZmaXg9ei50b0FTQ0lJKGouc3VmZml4KSksSy5l''@;'; put 'put ''bmRzV2l0aChrLCIuIitqLnB1bnlTdWZmaXgpfHxrPT09ai5wdW55U3VmZml4P2o6RX0sbnVsbCl9LE8uZXJyb3JDb2Rlcz17RE9NQUlOX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgdG9vIHNob3J0LiIsRE9NQUlOX1RPT19MT05HOiJEb21haW4gbmFtZSB0b28gbG9uZy4gSXQgc2hvdWxkIGJl''@;'; put 'put ''IG5vIG1vcmUgdGhhbiAyNTUgY2hhcnMuIixMQUJFTF9TVEFSVFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IHN0YXJ0IHdpdGggYSBkYXNoLiIsTEFCRUxfRU5EU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3QgZW5kIHdpdGggYSBkYXNoLiIsTEFC''@;'; put 'put ''RUxfVE9PX0xPTkc6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBtb3N0IDYzIGNoYXJzIGxvbmcuIixMQUJFTF9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBsZWFzdCAxIGNoYXJhY3RlciBsb25nLiIsTEFCRUxfSU5WQUxJRF9DSEFSUzoiRG9tYWlu''@;'; put 'put ''IG5hbWUgbGFiZWwgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBkYXNoZXMuIn0sSy52YWxpZGF0ZT1mdW5jdGlvbihJKXt2YXIgaz16LnRvQVNDSUkoSSk7aWYoay5sZW5ndGg8MSlyZXR1cm4iRE9NQUlOX1RPT19TSE9SVCI7aWYoay5sZW5ndGg+MjU1KXJl''@;'; put 'put ''dHVybiJET01BSU5fVE9PX0xPTkciO2Zvcih2YXIgRSxqPWsuc3BsaXQoIi4iKSxWPTA7VjxqLmxlbmd0aDsrK1Ype2lmKCEoRT1qW1ZdKS5sZW5ndGgpcmV0dXJuIkxBQkVMX1RPT19TSE9SVCI7aWYoRS5sZW5ndGg+NjMpcmV0dXJuIkxBQkVMX1RPT19MT05HIjtpZigiLSI9PT1FLmNoYXJB''@;'; put 'put ''dCgwKSlyZXR1cm4iTEFCRUxfU1RBUlRTX1dJVEhfREFTSCI7aWYoIi0iPT09RS5jaGFyQXQoRS5sZW5ndGgtMSkpcmV0dXJuIkxBQkVMX0VORFNfV0lUSF9EQVNIIjtpZighL15bYS16MC05XC1dKyQvLnRlc3QoRSkpcmV0dXJuIkxBQkVMX0lOVkFMSURfQ0hBUlMifX0sTy5wYXJzZT1mdW5j''@;'; put 'put ''dGlvbihJKXtpZigic3RyaW5nIiE9dHlwZW9mIEkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRG9tYWluIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgaz1JLnNsaWNlKDApLnRvTG93ZXJDYXNlKCk7Ii4iPT09ay5jaGFyQXQoay5sZW5ndGgtMSkmJihrPWsuc2xpY2UoMCxrLmxlbmd0aC0x''@;'; put 'put ''KSk7dmFyIEU9Sy52YWxpZGF0ZShrKTtpZihFKXJldHVybntpbnB1dDpJLGVycm9yOnttZXNzYWdlOk8uZXJyb3JDb2Rlc1tFXSxjb2RlOkV9fTt2YXIgaj17aW5wdXQ6SSx0bGQ6bnVsbCxzbGQ6bnVsbCxkb21haW46bnVsbCxzdWJkb21haW46bnVsbCxsaXN0ZWQ6ITF9LFY9ay5zcGxpdCgi''@;'; put 'put ''LiIpO2lmKCJsb2NhbCI9PT1WW1YubGVuZ3RoLTFdKXJldHVybiBqO3ZhciBCPWZ1bmN0aW9uKCl7cmV0dXJuL3huLS0vLnRlc3QoaykmJihqLmRvbWFpbiYmKGouZG9tYWluPXoudG9BU0NJSShqLmRvbWFpbikpLGouc3ViZG9tYWluJiYoai5zdWJkb21haW49ei50b0FTQ0lJKGouc3ViZG9t''@;'; put 'put ''YWluKSkpLGp9LFk9Sy5maW5kUnVsZShrKTtpZighWSlyZXR1cm4gVi5sZW5ndGg8Mj9qOihqLnRsZD1WLnBvcCgpLGouc2xkPVYucG9wKCksai5kb21haW49W2ouc2xkLGoudGxkXS5qb2luKCIuIiksVi5sZW5ndGgmJihqLnN1YmRvbWFpbj1WLnBvcCgpKSxCKCkpO2oubGlzdGVkPSEwO3Zh''@;'; put 'put ''ciBYPVkuc3VmZml4LnNwbGl0KCIuIiksVT1WLnNsaWNlKDAsVi5sZW5ndGgtWC5sZW5ndGgpO3JldHVybiBZLmV4Y2VwdGlvbiYmVS5wdXNoKFguc2hpZnQoKSksai50bGQ9WC5qb2luKCIuIiksVS5sZW5ndGg/KFkud2lsZGNhcmQmJihYLnVuc2hpZnQoVS5wb3AoKSksai50bGQ9WC5qb2lu''@;'; put 'put ''KCIuIikpLFUubGVuZ3RoJiYoai5zbGQ9VS5wb3AoKSxqLmRvbWFpbj1bai5zbGQsai50bGRdLmpvaW4oIi4iKSxVLmxlbmd0aCYmKGouc3ViZG9tYWluPVUuam9pbigiLiIpKSksQigpKTpCKCl9LE8uZ2V0PWZ1bmN0aW9uKEkpe3JldHVybiBJJiZPLnBhcnNlKEkpLmRvbWFpbnx8bnVsbH0s''@;'; put 'put ''Ty5pc1ZhbGlkPWZ1bmN0aW9uKEkpe3ZhciBrPU8ucGFyc2UoSSk7cmV0dXJuISghay5kb21haW58fCFrLmxpc3RlZCl9fSw3OTAwOihNLE8sUik9PntPLnB1YmxpY0VuY3J5cHQ9Uig2NTU5KSxPLnByaXZhdGVEZWNyeXB0PVIoNjEzOCksTy5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbih6LEsp''@;'; put 'put ''e3JldHVybiBPLnB1YmxpY0VuY3J5cHQoeixLLCEwKX0sTy5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKHosSyl7cmV0dXJuIE8ucHJpdmF0ZURlY3J5cHQoeixLLCEwKX19LDkxOTk6KE0sTyxSKT0+e3ZhciB6PVIoMzQ4MiksSz1SKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBJKGspe3ZhciBFPUsu''@;'; put 'put ''YWxsb2NVbnNhZmUoNCk7cmV0dXJuIEUud3JpdGVVSW50MzJCRShrLDApLEV9TS5leHBvcnRzPWZ1bmN0aW9uKGssRSl7Zm9yKHZhciBqLFY9Sy5hbGxvYygwKSxCPTA7Vi5sZW5ndGg8RTspaj1JKEIrKyksVj1LLmNvbmNhdChbVix6KCJzaGExIikudXBkYXRlKGspLnVwZGF0ZShqKS5kaWdl''@;'; put 'put ''c3QoKV0pO3JldHVybiBWLnNsaWNlKDAsRSl9fSwyMTQ0OmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1D''@;'; put 'put ''O3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMu''@;'; put 'put ''bGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5''@;'; put 'put ''e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDcxMDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMt''@;'; put 'put ''NDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7''@;'; put 'put ''cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJh''@;'; put 'put ''eS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0''@;'; put 'put ''dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xz''@;'; put 'put ''Ky9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1DP3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2lu''@;'; put 'put ''aXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2''@;'; put 'put ''M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5p''@;'; put 'put ''dEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRo''@;'; put 'put ''aXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4''@;'; put 'put ''ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMs''@;'; put 'put ''dGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jk''@;'; put 'put ''cz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3''@;'; put 'put ''Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9''@;'; put 'put ''cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMs''@;'; put 'put ''Sj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVkoZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2Zvcihk''@;'; put 'put ''ZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29y''@;'; put 'put ''ZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jk''@;'; put 'put ''c1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2''@;'; put 'put ''NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4''@;'; put 'put ''MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVu''@;'; put 'put ''Z3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jkc1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1N''@;'; put 'put ''YXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhl''@;'; put 'put ''fXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMu''@;'; put 'put ''bGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkpLnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZv''@;'; put 'put ''cigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zv''@;'; put 'put ''cih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIw''@;'; put 'put ''IitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEw''@;'; put 'put ''ODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90''@;'; put 'put ''b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5''@;'; put 'put ''IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUu''@;'; put 'put ''YW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1lbHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnBy''@;'; put 'put ''b3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxD''@;'; put 'put ''Pj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+''@;'; put 'put ''PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56''@;'; put 'put ''ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxl''@;'; put 'put ''bmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUu''@;'; put 'put ''ZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRo''@;'; put 'put ''aXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRp''@;'; put 'put ''dmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tT''@;'; put 'put ''XT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUu''@;'; put 'put ''YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcp''@;'; put 'put ''OmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndv''@;'; put 'put ''cmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5u''@;'; put 'put ''ZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMp''@;'; put 'put ''LFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNb''@;'; put 'put ''U118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5l''@;'; put 'put ''Z2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcs''@;'; put 'put ''dj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMu''@;'; put 'put ''d29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlz''@;'; put 'put ''fSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0w''@;'; put 'put ''O3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcp''@;'; put 'put ''O2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3''@;'; put 'put ''KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlz''@;'; put 'put ''LndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3Zh''@;'; put 'put ''ciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRlPVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxCZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsSmU9S2U+Pj4xMyxs''@;'; put 'put ''dD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLGl0PTB8Sls3XSx1dD04MTkxJml0LE10PWl0Pj4+MTMsSHQ9MHxK''@;'; put 'put ''WzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLE5uPTB8bmVbMV0sZnQ9ODE5MSZObixmbj1Obj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVb''@;'; put 'put ''M10sTnQ9ODE5MSZfdCx2bj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLExuPTB8bmVbNl0senQ9ODE5MSZMbix5bj1Mbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLE9uPTB8bmVb''@;'; put 'put ''OF0sJHQ9ODE5MSZPbixGbj1Pbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwk''@;'; put 'put ''bikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRuKSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEJlLGVuKSxwPShwPU1hdGguaW11bChCZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11''@;'; put 'put ''bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxn''@;'; put 'put ''aSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkrTWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKEJlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcr''@;'; put 'put ''TWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhy''@;'; put 'put ''Pj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''ZnQpfDAsdz13K01hdGguaW11bChKZSxmbil8MCx2PXYrTWF0aC5pbXVsKEJlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5''@;'; put 'put ''MSYocD0ocD1wK01hdGguaW11bChMZSx2bil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx2bil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikp''@;'; put 'put ''K01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoWWUsWHQpfDApK01hdGguaW11bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0KXwwLHY9ditNYXRoLmltdWwoQmUsTnQpfDAscD0ocD1wK01hdGguaW11bChCZSx2bil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2Usdm4pfDA7dmFyIEtyPShmZSsodj12''@;'; put 'put ''K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwo''@;'; put 'put ''VWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditN''@;'; put 'put ''YXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHZuKXwwKStNYXRoLmltdWwoSmUsTnQpfDAsdz13K01hdGgu''@;'; put 'put ''aW11bChKZSx2bil8MCx2PXYrTWF0aC5pbXVsKEJlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxl''@;'; put 'put ''bil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDAp''@;'; put 'put ''K01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmltdWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSx2bil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsdm4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChKZSxKdCl8MCx2PXYrTWF0aC5pbXVsKEJlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBGcj0oZmUr''@;'; put 'put ''KHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3MTA4ODYzLHY9TWF0aC5p''@;'; put 'put ''bXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2''@;'; put 'put ''PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSx2bil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytN''@;'; put 'put ''YXRoLmltdWwocWUsdm4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGgu''@;'; put 'put ''aW11bChKZSxwdCl8MCx3PXcrTWF0aC5pbXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoQmUsenQpfDAscD0ocD1wK01hdGguaW11bChCZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVs''@;'; put 'put ''KFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmltdWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHZuKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCx2bil8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChxZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVsKEJlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsQm4pfDApK01hdGguaW11bChX''@;'; put 'put ''ZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxGbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxGbil8MCkrKHA+''@;'; put 'put ''Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxwPShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStN''@;'; put 'put ''YXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVsKHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChEZSx2bil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUsdm4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxKdCl8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUs''@;'; put 'put ''eW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXwwKStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKEJlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoQmUsRm4pfDApK01hdGguaW11bChXZSwkdCl8''@;'; put 'put ''MCx3PXcrTWF0aC5pbXVsKFdlLEZuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8''@;'; put 'put ''MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsdm4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LHZuKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChEZSxKdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAsdj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAs''@;'; put 'put ''dj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEZuKXwwKStNYXRoLmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxGbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKEJlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQmUsam4pfDAp''@;'; put 'put ''K01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4pfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmlt''@;'; put 'put ''dWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCx2bil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sdm4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEp0KXwwKStNYXRoLmltdWwoTXQs''@;'; put 'put ''SXQpfDAsdz13K01hdGguaW11bChNdCxKdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01hdGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoUGUsRm4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5pbXVsKGJlLEZuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKEplLGxuKXwwKSk8PDEz''@;'; put 'put ''KXwwO2ZlPSgodz13K01hdGguaW11bChKZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCx2bikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibix2biksdj12K01hdGguaW11bChQ''@;'; put 'put ''dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsdz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0''@;'; put 'put ''KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkrTWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAs''@;'; put 'put ''dz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRm4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEZuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0o''@;'; put 'put ''cD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxKdCkpK01hdGgu''@;'; put 'put ''aW11bChibixJdCl8MCx3PU1hdGguaW11bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''dXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKFVlLEZuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01hdGguaW11bChodCxGbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkp''@;'; put 'put ''PDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChN''@;'; put 'put ''dCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRm4pfDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLEZuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChV''@;'; put 'put ''ZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3''@;'; put 'put ''PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsRm4pfDApK01hdGgu''@;'; put 'put ''aW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LEZuKXwwO3ZhciBQaT0oZmUrKHY9ditNYXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8''@;'; put 'put ''MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEZu''@;'; put 'put ''KXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixGbil8MDt2YXIgTG89KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmlt''@;'; put 'put ''dWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsRm4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sRm4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDAp''@;'; put 'put ''fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8''@;'; put 'put ''MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkpPDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1V''@;'; put 'put ''aSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1GcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1hbyxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUs''@;'; put 'put ''Uy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAoZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgr''@;'; put 'put ''Zy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9y''@;'; put 'put ''KHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0wO2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNb''@;'; put 'put ''ZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtlPUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAh''@;'; put 'put ''PT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9lKHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylD''@;'; put 'put ''W3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUu''@;'; put 'put ''cGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pdPUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtK''@;'; put 'put ''PDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIEJlPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2Ur''@;'; put 'put ''Sl0sWWU9dlt4ZStPZStKXSxKZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09lXT1CZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09QmUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoSmU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9SmUpfX0s''@;'; put 'put ''c2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1heChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZv''@;'; put 'put ''cih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFdPXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBw''@;'; put 'put ''PTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2dbdl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3''@;'; put 'put ''PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMpLHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShn''@;'; put 'put ''KSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBB''@;'; put 'put ''cnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3Ro''@;'; put 'put ''LGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZlLHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgQmU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVb''@;'; put 'put ''T2VdPUJlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShuZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0''@;'; put 'put ''aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIg''@;'; put 'put ''Qz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9u''@;'; put 'put ''KGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhp''@;'; put 'put ''cy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtu''@;'; put 'put ''ZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0mMTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkp''@;'; put 'put ''O2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAuc3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYs''@;'; put 'put ''dj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtmb3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jk''@;'; put 'put ''c1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90''@;'; put 'put ''b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2''@;'; put 'put ''LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13''@;'; put 'put ''KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5ndGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAm''@;'; put 'put ''JigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndvcmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0w''@;'; put 'put ''LHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hs''@;'; put 'put ''bihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1h''@;'; put 'put ''c2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZT''@;'; put 'put ''KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53''@;'; put 'put ''b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9''@;'; put 'put ''Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtDKyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRo''@;'; put 'put ''aXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMu''@;'; put 'put ''aWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMu''@;'; put 'put ''d29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3Vi''@;'; put 'put ''bXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcx''@;'; put 'put ''MDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9''@;'; put 'put ''MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMu''@;'; put 'put ''Y2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcg''@;'; put 'put ''RShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRz''@;'; put 'put ''W25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9''@;'; put 'put ''PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSksdi5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2Rp''@;'; put 'put ''djpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCku''@;'; put 'put ''ZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWco''@;'; put 'put ''KSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7''@;'; put 'put ''ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3''@;'; put 'put ''IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2Qo''@;'; put 'put ''ZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3Vu''@;'; put 'put ''ZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSlyZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1w''@;'; put 'put ''JiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYuaWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMr''@;'; put 'put ''KDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYv''@;'; put 'put ''Z3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9''@;'; put 'put ''Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIg''@;'; put 'put ''ZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxMZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSks''@;'; put 'put ''cC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlz''@;'; put 'put ''dWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5j''@;'; put 'put ''dGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4o''@;'; put 'put ''MSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYm''@;'; put 'put ''ZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/''@;'; put 'put ''cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAs''@;'; put 'put ''Uy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7''@;'; put 'put ''dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5pc3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249''@;'; put 'put ''ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8yNix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7''@;'; put 'put ''dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3ddPUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMu''@;'; put 'put ''bGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEp''@;'; put 'put ''Qz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtp''@;'; put 'put ''Zih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYo''@;'; put 'put ''Qz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAo''@;'; put 'put ''Zyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnBy''@;'; put 'put ''b3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29u''@;'; put 'put ''dGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlz''@;'; put 'put ''LnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQo''@;'; put 'put ''dGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlz''@;'; put 'put ''LnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlz''@;'; put 'put ''dWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlz''@;'; put 'put ''LnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5''@;'; put 'put ''MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnBy''@;'; put 'put ''b3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVz''@;'; put 'put ''aGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBH''@;'; put 'put ''KCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5f''@;'; put 'put ''cHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgo''@;'; put 'put ''KSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMu''@;'; put 'put ''cmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9''@;'; put 'put ''bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRo''@;'; put 'put ''aXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9u''@;'; put 'put ''KGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSks''@;'; put 'put ''cD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3Zh''@;'; put 'put ''ciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jk''@;'; put 'put ''c1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYo''@;'; put 'put ''Zy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhHLHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9''@;'; put 'put ''NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09''@;'; put 'put ''PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVn''@;'; put 'put ''YXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9k''@;'; put 'put ''KHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFy''@;'; put 'put ''IFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5p''@;'; put 'put ''c3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0''@;'; put 'put ''aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVs''@;'; put 'put ''PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5pbXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigz''@;'; put 'put ''KTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJv''@;'; put 'put ''KCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFk''@;'; put 'put ''ZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEpLml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLEJlPTA7MCE9PU9lLmNtcCh3KTtCZSsrKU9lPU9lLnJlZFNxcigpO0koQmU8RmUp''@;'; put 'put ''O3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtQmUtMSkpO3hlPXhlLnJlZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1CZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTty''@;'; put 'put ''ZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVnKCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1''@;'; put 'put ''cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1u''@;'; put 'put ''ZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09''@;'; put 'put ''ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJv''@;'; put 'put ''dG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcu''@;'; put 'put ''bGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRo''@;'; put 'put ''aXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5t''@;'; put 'put ''YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhp''@;'; put 'put ''cy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sNjEzODooTSxPLFIpPT57dmFyIHo9Uig5ODAp''@;'; put 'put ''LEs9Uig5MTk5KSxJPVIoNzg1OSksaz1SKDIxNDQpLEU9UigzNjYzKSxqPVIoMzQ4MiksVj1SKDQ4MTgpLEI9Uig5NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKFksWCxVKXt2YXIgcTtxPVkucGFkZGluZz9ZLnBhZGRpbmc6VT8xOjQ7dmFyIGVlLHRlPXooWSksb2U9dGUubW9kdWx1''@;'; put 'put ''cy5ieXRlTGVuZ3RoKCk7aWYoWC5sZW5ndGg+b2V8fG5ldyBrKFgpLmNtcCh0ZS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtlZT1VP1YobmV3IGsoWCksdGUpOkUoWCx0ZSk7dmFyIHNlPUIuYWxsb2Mob2UtZWUubGVuZ3RoKTtpZihlZT1CLmNvbmNh''@;'; put 'put ''dChbc2UsZWVdLG9lKSw0PT09cSlyZXR1cm4gZnVuY3Rpb24oaGUsdWUpe3ZhciBjZT1oZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxHPWooInNoYTEiKS51cGRhdGUoQi5hbGxvYygwKSkuZGlnZXN0KCksYj1HLmxlbmd0aDtpZigwIT09dWVbMF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9u''@;'; put 'put ''IGVycm9yIik7dmFyIEQ9dWUuc2xpY2UoMSxiKzEpLEg9dWUuc2xpY2UoYisxKSxOPUkoRCxLKEgsYikpLGc9SShILEsoTixjZS1iLTEpKTtpZihmdW5jdGlvbihTLHYpe1M9Qi5mcm9tKFMpLHY9Qi5mcm9tKHYpO3ZhciBwPTAsdz1TLmxlbmd0aDtTLmxlbmd0aCE9PXYubGVuZ3RoJiYocCsr''@;'; put 'put ''LHc9TWF0aC5taW4oUy5sZW5ndGgsdi5sZW5ndGgpKTtmb3IodmFyIEo9LTE7KytKPHc7KXArPVNbSl1edltKXTtyZXR1cm4gcH0oRyxnLnNsaWNlKDAsYikpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgQz1iOzA9PT1nW0NdOylDKys7aWYoMSE9PWdbQysr''@;'; put 'put ''XSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gZy5zbGljZShDKX0odGUsZWUpO2lmKDE9PT1xKXJldHVybiBmdW5jdGlvbihoZSx1ZSxjZSl7Zm9yKHZhciBHPXVlLnNsaWNlKDAsMiksYj0yLEQ9MDswIT09dWVbYisrXTspaWYoYj49dWUubGVuZ3RoKXtEKys7''@;'; put 'put ''YnJlYWt9dmFyIEg9dWUuc2xpY2UoMixiLTEpO2lmKCgiMDAwMiIhPT1HLnRvU3RyaW5nKCJoZXgiKSYmIWNlfHwiMDAwMSIhPT1HLnRvU3RyaW5nKCJoZXgiKSYmY2UpJiZEKyssSC5sZW5ndGg8OCYmRCsrLEQpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIHVl''@;'; put 'put ''LnNsaWNlKGIpfSgwLGVlLFUpO2lmKDM9PT1xKXJldHVybiBlZTt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sNjU1OTooTSxPLFIpPT57dmFyIHo9Uig5ODApLEs9UigxNzk4KSxJPVIoMzQ4Miksaz1SKDkxOTkpLEU9Uig3ODU5KSxqPVIoMjE0NCksVj1SKDQ4MTgpLEI9''@;'; put 'put ''UigzNjYzKSxZPVIoOTUwOSkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihYLFUscSl7dmFyIGVlO2VlPVgucGFkZGluZz9YLnBhZGRpbmc6cT8xOjQ7dmFyIHRlLG9lPXooWCk7aWYoND09PWVlKXRlPWZ1bmN0aW9uKHNlLGhlKXt2YXIgdWU9c2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksY2U9''@;'; put 'put ''aGUubGVuZ3RoLEc9SSgic2hhMSIpLnVwZGF0ZShZLmFsbG9jKDApKS5kaWdlc3QoKSxiPUcubGVuZ3RoLEQ9MipiO2lmKGNlPnVlLUQtMil0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTt2YXIgSD1ZLmFsbG9jKHVlLWNlLUQtMiksTj11ZS1iLTEsZz1LKGIpLEM9RShZLmNv''@;'; put 'put ''bmNhdChbRyxILFkuYWxsb2MoMSwxKSxoZV0sTiksayhnLE4pKSxTPUUoZyxrKEMsYikpO3JldHVybiBuZXcgaihZLmNvbmNhdChbWS5hbGxvYygxKSxTLENdLHVlKSl9KG9lLFUpO2Vsc2UgaWYoMT09PWVlKXRlPWZ1bmN0aW9uKHNlLGhlLHVlKXt2YXIgY2UsRz1oZS5sZW5ndGgsYj1zZS5t''@;'; put 'put ''b2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihHPmItMTEpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7cmV0dXJuIGNlPXVlP1kuYWxsb2MoYi1HLTMsMjU1KTpmdW5jdGlvbihEKXtmb3IodmFyIEgsTj1ZLmFsbG9jVW5zYWZlKEQpLGc9MCxDPUsoMipEKSxTPTA7ZzxEOylTPT09''@;'; put 'put ''Qy5sZW5ndGgmJihDPUsoMipEKSxTPTApLChIPUNbUysrXSkmJihOW2crK109SCk7cmV0dXJuIE59KGItRy0zKSxuZXcgaihZLmNvbmNhdChbWS5mcm9tKFswLHVlPzE6Ml0pLGNlLFkuYWxsb2MoMSksaGVdLGIpKX0ob2UsVSxxKTtlbHNle2lmKDMhPT1lZSl0aHJvdyBuZXcgRXJyb3IoInVu''@;'; put 'put ''a25vd24gcGFkZGluZyIpO2lmKCh0ZT1uZXcgaihVKSkuY21wKG9lLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGF0YSB0b28gbG9uZyBmb3IgbW9kdWx1cyIpfXJldHVybiBxP0IodGUsb2UpOlYodGUsb2UpfX0sNDgxODooTSxPLFIpPT57dmFyIHo9UigyMTQ0KSxLPVIoOTUwOSku''@;'; put 'put ''QnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihJLGspe3JldHVybiBLLmZyb20oSS50b1JlZCh6Lm1vbnQoay5tb2R1bHVzKSkucmVkUG93KG5ldyB6KGsucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDc4NTk6TT0+e00uZXhwb3J0cz1mdW5jdGlvbihPLFIpe2Zvcih2''@;'; put 'put ''YXIgej1PLmxlbmd0aCxLPS0xOysrSzx6OylPW0tdXj1SW0tdO3JldHVybiBPfX0sMzY4OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO1IucihPKSxSLmQoTyx7ZGVjb2RlOigpPT5vZSxkZWZhdWx0OigpPT5jZSxlbmNvZGU6KCk9PnNlLHRvQVNDSUk6KCk9PnVlLHRvVW5pY29kZTooKT0+aGUs''@;'; put 'put ''dWNzMmRlY29kZTooKT0+VSx1Y3MyZW5jb2RlOigpPT5xfSk7Y29uc3Qgej0yMTQ3NDgzNjQ3LEs9MzYsST0vXnhuLS0vLGs9L1teXDAtXHg3Rl0vLEU9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLGo9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMg''@;'; put 'put ''dG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LFY9TWF0aC5mbG9vcixCPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gWShHKXt0aHJvdyBuZXcg''@;'; put 'put ''UmFuZ2VFcnJvcihqW0ddKX1mdW5jdGlvbiBYKEcsYil7Y29uc3QgRD1HLnNwbGl0KCJAIik7bGV0IEg9IiI7cmV0dXJuIEQubGVuZ3RoPjEmJihIPURbMF0rIkAiLEc9RFsxXSksSCtmdW5jdGlvbihnLEMpe2NvbnN0IFM9W107bGV0IHY9Zy5sZW5ndGg7Zm9yKDt2LS07KVNbdl09QyhnW3Zd''@;'; put 'put ''KTtyZXR1cm4gU30oKEc9Ry5yZXBsYWNlKEUsIi4iKSkuc3BsaXQoIi4iKSxiKS5qb2luKCIuIil9ZnVuY3Rpb24gVShHKXtjb25zdCBiPVtdO2xldCBEPTA7Y29uc3QgSD1HLmxlbmd0aDtmb3IoO0Q8SDspe2NvbnN0IE49Ry5jaGFyQ29kZUF0KEQrKyk7aWYoTj49NTUyOTYmJk48PTU2MzE5''@;'; put 'put ''JiZEPEgpe2NvbnN0IGc9Ry5jaGFyQ29kZUF0KEQrKyk7NTYzMjA9PSg2NDUxMiZnKT9iLnB1c2goKCgxMDIzJk4pPDwxMCkrKDEwMjMmZykrNjU1MzYpOihiLnB1c2goTiksRC0tKX1lbHNlIGIucHVzaChOKX1yZXR1cm4gYn1jb25zdCBxPUc9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkcp''@;'; put 'put ''LGVlPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEcrMjIrNzUqKEc8MjYpLSgoMCE9Yik8PDUpfSx0ZT1mdW5jdGlvbihHLGIsRCl7bGV0IEg9MDtmb3IoRz1EP1YoRy83MDApOkc+PjEsRys9VihHL2IpO0c+NDU1O0grPUspRz1WKEcvMzUpO3JldHVybiBWKEgrMzYqRy8oRyszOCkpfSxvZT1mdW5j''@;'; put 'put ''dGlvbihHKXtjb25zdCBiPVtdLEQ9Ry5sZW5ndGg7bGV0IEg9MCxOPTEyOCxnPTcyLEM9Ry5sYXN0SW5kZXhPZigiLSIpO0M8MCYmKEM9MCk7Zm9yKGxldCB2PTA7djxDOysrdilHLmNoYXJDb2RlQXQodik+PTEyOCYmWSgibm90LWJhc2ljIiksYi5wdXNoKEcuY2hhckNvZGVBdCh2KSk7Zm9y''@;'; put 'put ''KGxldCB2PUM+MD9DKzE6MDt2PEQ7KXtjb25zdCBwPUg7Zm9yKGxldCBKPTEsbmU9Szs7bmUrPUspe3Y+PUQmJlkoImludmFsaWQtaW5wdXQiKTtjb25zdCBkZT0oUz1HLmNoYXJDb2RlQXQodisrKSk+PTQ4JiZTPDU4P1MtNDgrMjY6Uz49NjUmJlM8OTE/Uy02NTpTPj05NyYmUzwxMjM/Uy05''@;'; put 'put ''NzpLO2RlPj1LJiZZKCJpbnZhbGlkLWlucHV0IiksZGU+Vigoei1IKS9KKSYmWSgib3ZlcmZsb3ciKSxIKz1kZSpKO2NvbnN0IGZlPW5lPD1nPzE6bmU+PWcrMjY/MjY6bmUtZztpZihkZTxmZSlicmVhaztjb25zdCB4ZT1LLWZlO0o+Vih6L3hlKSYmWSgib3ZlcmZsb3ciKSxKKj14ZX1jb25z''@;'; put 'put ''dCB3PWIubGVuZ3RoKzE7Zz10ZShILXAsdywwPT1wKSxWKEgvdyk+ei1OJiZZKCJvdmVyZmxvdyIpLE4rPVYoSC93KSxIJT13LGIuc3BsaWNlKEgrKywwLE4pfXZhciBTO3JldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5iKX0sc2U9ZnVuY3Rpb24oRyl7Y29uc3QgYj1bXSxEPShHPVUo''@;'; put 'put ''RykpLmxlbmd0aDtsZXQgSD0xMjgsTj0wLGc9NzI7Zm9yKGNvbnN0IHYgb2YgRyl2PDEyOCYmYi5wdXNoKEIodikpO2NvbnN0IEM9Yi5sZW5ndGg7bGV0IFM9Qztmb3IoQyYmYi5wdXNoKCItIik7UzxEOyl7bGV0IHY9ejtmb3IoY29uc3QgdyBvZiBHKXc+PUgmJnc8diYmKHY9dyk7Y29uc3Qg''@;'; put 'put ''cD1TKzE7di1IPlYoKHotTikvcCkmJlkoIm92ZXJmbG93IiksTis9KHYtSCkqcCxIPXY7Zm9yKGNvbnN0IHcgb2YgRylpZih3PEgmJisrTj56JiZZKCJvdmVyZmxvdyIpLHc9PT1IKXtsZXQgSj1OO2ZvcihsZXQgbmU9Szs7bmUrPUspe2NvbnN0IGRlPW5lPD1nPzE6bmU+PWcrMjY/MjY6bmUt''@;'; put 'put ''ZztpZihKPGRlKWJyZWFrO2NvbnN0IGZlPUotZGUseGU9Sy1kZTtiLnB1c2goQihlZShkZStmZSV4ZSwwKSkpLEo9VihmZS94ZSl9Yi5wdXNoKEIoZWUoSiwwKSkpLGc9dGUoTixwLFM9PT1DKSxOPTAsKytTfSsrTiwrK0h9cmV0dXJuIGIuam9pbigiIil9LGhlPWZ1bmN0aW9uKEcpe3JldHVy''@;'; put 'put ''biBYKEcsZnVuY3Rpb24oYil7cmV0dXJuIEkudGVzdChiKT9vZShiLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOmJ9KX0sdWU9ZnVuY3Rpb24oRyl7cmV0dXJuIFgoRyxmdW5jdGlvbihiKXtyZXR1cm4gay50ZXN0KGIpPyJ4bi0tIitzZShiKTpifSl9LGNlPXt2ZXJzaW9uOiIyLjEuMCIsdWNz''@;'; put 'put ''Mjp7ZGVjb2RlOlUsZW5jb2RlOnF9LGRlY29kZTpvZSxlbmNvZGU6c2UsdG9BU0NJSTp1ZSx0b1VuaWNvZGU6aGV9fSw3MTI5OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geihJKXt0cnl7cmV0dXJuIGRlY29kZVVS''@;'; put 'put ''SUNvbXBvbmVudChJLnJlcGxhY2UoL1wrL2csIiAiKSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEsoSSl7dHJ5e3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoSSl9Y2F0Y2h7cmV0dXJuIG51bGx9fU8uc3RyaW5naWZ5PWZ1bmN0aW9uKEksayl7az1rfHwiIjt2YXIgRSxqLFY9W107''@;'; put 'put ''Zm9yKGogaW4ic3RyaW5nIiE9dHlwZW9mIGsmJihrPSI/IiksSSlpZihSLmNhbGwoSSxqKSl7aWYoKEU9SVtqXSl8fG51bGwhPUUmJiFpc05hTihFKXx8KEU9IiIpLGo9SyhqKSxFPUsoRSksbnVsbD09PWp8fG51bGw9PT1FKWNvbnRpbnVlO1YucHVzaChqKyI9IitFKX1yZXR1cm4gVi5sZW5n''@;'; put 'put ''dGg/aytWLmpvaW4oIiYiKToiIn0sTy5wYXJzZT1mdW5jdGlvbihJKXtmb3IodmFyIGssRT0vKFtePT8jJl0rKT0/KFteJl0qKS9nLGo9e307az1FLmV4ZWMoSSk7KXt2YXIgVj16KGtbMV0pLEI9eihrWzJdKTtudWxsPT09Vnx8bnVsbD09PUJ8fFYgaW4ganx8KGpbVl09Qil9cmV0dXJuIGp9''@;'; put 'put ''fSwxNzk4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPTY1NTM2LGs9Uig5NTA5KS5CdWZmZXIsRT1SLmcuY3J5cHRvfHxSLmcubXNDcnlwdG87TS5leHBvcnRzPUUmJkUuZ2V0UmFuZG9tVmFsdWVzP2Z1bmN0aW9uKGosVil7aWYoaj40Mjk0OTY3Mjk1KXRocm93IG5l''@;'; put 'put ''dyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIEI9ay5hbGxvY1Vuc2FmZShqKTtpZihqPjApaWYoaj5LKWZvcih2YXIgWT0wO1k8ajtZKz1LKUUuZ2V0UmFuZG9tVmFsdWVzKEIuc2xpY2UoWSxZK0spKTtlbHNlIEUuZ2V0UmFuZG9tVmFsdWVzKEIp''@;'; put 'put ''O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBWP3oubmV4dFRpY2soZnVuY3Rpb24oKXtWKG51bGwsQil9KTpCfTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBD''@;'; put 'put ''aHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX19LDc5NjM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsoKXt0aHJvdyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0''@;'; put 'put ''aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgST1SKDk1MDkpLGs9UigxNzk4KSxFPUkuQnVmZmVyLGo9SS5rTWF4TGVuZ3RoLFY9Ui5nLmNyeXB0b3x8Ui5nLm1zQ3J5cHRvLEI9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiBZ''@;'; put 'put ''KHEsZWUpe2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cSE9cSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKHE+Qnx8cTwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYocT5qfHxxPmVlKXRocm93IG5ldyBS''@;'; put 'put ''YW5nZUVycm9yKCJvZmZzZXQgb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gWChxLGVlLHRlKXtpZigibnVtYmVyIiE9dHlwZW9mIHF8fHEhPXEpdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYocT5CfHxxPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBt''@;'; put 'put ''dXN0IGJlIGEgdWludDMyIik7aWYocStlZT50ZXx8cT5qKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gVShxLGVlLHRlLG9lKXtpZih6LmJyb3dzZXIpe3ZhciBoZT1uZXcgVWludDhBcnJheShxLmJ1ZmZlcixlZSx0ZSk7cmV0dXJuIFYuZ2V0UmFu''@;'; put 'put ''ZG9tVmFsdWVzKGhlKSxvZT92b2lkIHoubmV4dFRpY2soZnVuY3Rpb24oKXtvZShudWxsLHEpfSk6cX1pZighb2UpcmV0dXJuIGsodGUpLmNvcHkocSxlZSkscTtrKHRlLGZ1bmN0aW9uKHVlLGNlKXtpZih1ZSlyZXR1cm4gb2UodWUpO2NlLmNvcHkocSxlZSksb2UobnVsbCxxKX0pfVYmJlYu''@;'; put 'put ''Z2V0UmFuZG9tVmFsdWVzfHwhei5icm93c2VyPyhPLnJhbmRvbUZpbGw9ZnVuY3Rpb24ocSxlZSx0ZSxvZSl7aWYoIShFLmlzQnVmZmVyKHEpfHxxIGluc3RhbmNlb2YgUi5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIg''@;'; put 'put ''b3IgVWludDhBcnJheScpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlZSlvZT1lZSxlZT0wLHRlPXEubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHRlKW9lPXRlLHRlPXEubGVuZ3RoLWVlO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIG9lKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''JyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIFkoZWUscS5sZW5ndGgpLFgodGUsZWUscS5sZW5ndGgpLFUocSxlZSx0ZSxvZSl9LE8ucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24ocSxlZSx0ZSl7aWYodm9pZCAwPT09ZWUmJihlZT0wKSwhKEUuaXNCdWZmZXIocSl8''@;'; put 'put ''fHEgaW5zdGFuY2VvZiBSLmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIFkoZWUscS5sZW5ndGgpLHZvaWQgMD09PXRlJiYodGU9cS5sZW5ndGgtZWUpLFgodGUsZWUscS5sZW5n''@;'; put 'put ''dGgpLFUocSxlZSx0ZSl9KTooTy5yYW5kb21GaWxsPUssTy5yYW5kb21GaWxsU3luYz1LKX0sNDI4MTpNPT57InVzZSBzdHJpY3QiO3ZhciBPPXt9O2Z1bmN0aW9uIFIoSyxJLGspe2t8fChrPUVycm9yKTt2YXIgRT1mdW5jdGlvbihqKXt2YXIgVixCO2Z1bmN0aW9uIFkoWCxVLHEpe3JldHVy''@;'; put 'put ''biBqLmNhbGwodGhpcywic3RyaW5nIj09dHlwZW9mIEk/STpJKFgsVSxxKSl8fHRoaXN9cmV0dXJuIEI9aiwoVj1ZKS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCLnByb3RvdHlwZSksVi5wcm90b3R5cGUuY29uc3RydWN0b3I9VixWLl9fcHJvdG9fXz1CLFl9KGspO0UucHJvdG90eXBlLm5h''@;'; put 'put ''bWU9ay5uYW1lLEUucHJvdG90eXBlLmNvZGU9SyxPW0tdPUV9ZnVuY3Rpb24geihLLEkpe2lmKEFycmF5LmlzQXJyYXkoSykpe3ZhciBrPUsubGVuZ3RoO3JldHVybiBLPUsubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBTdHJpbmcoRSl9KSxrPjI/Im9uZSBvZiAiLmNvbmNhdChJLCIgIikuY29u''@;'; put 'put ''Y2F0KEsuc2xpY2UoMCxrLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrS1trLTFdOjI9PT1rPyJvbmUgb2YgIi5jb25jYXQoSSwiICIpLmNvbmNhdChLWzBdLCIgb3IgIikuY29uY2F0KEtbMV0pOiJvZiAiLmNvbmNhdChJLCIgIikuY29uY2F0KEtbMF0pfXJldHVybiJvZiAiLmNvbmNhdChJLCIg''@;'; put 'put ''IikuY29uY2F0KFN0cmluZyhLKSl9UigiRVJSX0lOVkFMSURfT1BUX1ZBTFVFIixmdW5jdGlvbihLLEkpe3JldHVybidUaGUgdmFsdWUgIicrSSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrSysnIid9LFR5cGVFcnJvciksUigiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKEss''@;'; put 'put ''SSxrKXt2YXIgRSxCLFgscTtpZigic3RyaW5nIj09dHlwZW9mIEkmJiJub3QgIj09PUkuc3Vic3RyKDAsNCk/KEU9Im11c3Qgbm90IGJlIixJPUkucmVwbGFjZSgvXm5vdCAvLCIiKSk6RT0ibXVzdCBiZSIsWD1LLCh2b2lkIDA9PT1xfHxxPlgubGVuZ3RoKSYmKHE9WC5sZW5ndGgpLCIgYXJn''@;'; put 'put ''dW1lbnQiPT09WC5zdWJzdHJpbmcocS05LHEpKUI9IlRoZSAiLmNvbmNhdChLLCIgIikuY29uY2F0KEUsIiAiKS5jb25jYXQoeihJLCJ0eXBlIikpO2Vsc2V7dmFyIFk9ZnVuY3Rpb24oWCxVLHEpe3JldHVybiJudW1iZXIiIT10eXBlb2YgcSYmKHE9MCksIShxKzE+WC5sZW5ndGgpJiYtMSE9''@;'; put 'put ''PVguaW5kZXhPZigiLiIscSl9KEspPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtCPSdUaGUgIicuY29uY2F0KEssJyIgJykuY29uY2F0KFksIiAiKS5jb25jYXQoRSwiICIpLmNvbmNhdCh6KEksInR5cGUiKSl9cmV0dXJuIEIrIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2Ygayl9LFR5''@;'; put 'put ''cGVFcnJvciksUigiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksUigiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKEspe3JldHVybiJUaGUgIitLKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxSKCJFUlJfU1RS''@;'; put 'put ''RUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLFIoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihLKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitLKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxSKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxs''@;'; put 'put ''YmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxSKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLFIoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksUigiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1h''@;'; put 'put ''eSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLFIoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihLKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitLfSxUeXBlRXJyb3IpLFIoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJz''@;'; put 'put ''dHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLE0uZXhwb3J0cy5xPU99LDY3NTM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKFUpe3ZhciBxPVtdO2Zvcih2YXIgZWUgaW4gVSlxLnB1c2goZWUpO3JldHVybiBxfTtN''@;'; put 'put ''LmV4cG9ydHM9Qjt2YXIgST1SKDk0ODEpLGs9Uig0MjI5KTtSKDU3MTcpKEIsSSk7Zm9yKHZhciBFPUsoay5wcm90b3R5cGUpLGo9MDtqPEUubGVuZ3RoO2orKyl7dmFyIFY9RVtqXTtCLnByb3RvdHlwZVtWXXx8KEIucHJvdG90eXBlW1ZdPWsucHJvdG90eXBlW1ZdKX1mdW5jdGlvbiBCKFUp''@;'; put 'put ''e2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQihVKTtJLmNhbGwodGhpcyxVKSxrLmNhbGwodGhpcyxVKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsVSYmKCExPT09VS5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09VS53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9''@;'; put 'put ''ITEpLCExPT09VS5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIixZKSkpfWZ1bmN0aW9uIFkoKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHx6Lm5leHRUaWNrKFgsdGhpcyl9ZnVuY3Rpb24gWChVKXtVLmVuZCgpfU9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVCdWZm''@;'; put 'put ''ZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdl''@;'; put 'put ''dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZv''@;'; put 'put ''aWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKFUpe3ZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUm''@;'; put 'put ''Jih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1VLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPVUpfX0pfSwyNzI1OihNLE8sUik9PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUs7dmFyIHo9Uig0NjA1KTtmdW5jdGlvbiBLKEkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEspKXJl''@;'; put 'put ''dHVybiBuZXcgSyhJKTt6LmNhbGwodGhpcyxJKX1SKDU3MTcpKEsseiksSy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihJLGssRSl7RShudWxsLEkpfX0sOTQ4MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig0MTU1KTtNLmV4cG9ydHM9SCxILlJlYWRhYmxlU3RhdGU9''@;'; put 'put ''RCxSKDcxODcpO3ZhciBWLEk9ZnVuY3Rpb24oV2UsS2Upe3JldHVybiBXZS5saXN0ZW5lcnMoS2UpLmxlbmd0aH0saz1SKDI1MDMpLEU9Uig4NzY0KS5CdWZmZXIsaj0odm9pZCAwIT09Ui5nP1IuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVp''@;'; put 'put ''bnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxCPVIoNDYxNik7Vj1CJiZCLmRlYnVnbG9nP0IuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgWSxYLFUscT1SKDczMjcpLGVlPVIoMTE5NSksdGU9UigyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLG9lPVIoNDI4MSkucSxzZT1vZS5FUlJf''@;'; put 'put ''SU5WQUxJRF9BUkdfVFlQRSxoZT1vZS5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLHVlPW9lLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGNlPW9lLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7Uig1NzE3KShILGspO3ZhciBHPWVlLmVycm9yT3JEZXN0cm95LGI9WyJl''@;'; put 'put ''cnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gRChXZSxLZSxZZSl7ej16fHxSKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIFllJiYoWWU9S2UgaW5zdGFuY2VvZiB6KSx0aGlzLm9iamVjdE1vZGU9ISEoV2U9V2V8fHt9KS5vYmplY3RNb2RlLFllJiYo''@;'; put 'put ''dGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFXZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz10ZSh0aGlzLFdlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLFllKSx0aGlzLmJ1ZmZlcj1uZXcgcSx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0''@;'; put 'put ''aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9''@;'; put 'put ''ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1XZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIVdlLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPVdlLmRlZmF1bHRFbmNvZGlu''@;'; put 'put ''Z3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLFdlLmVuY29kaW5nJiYoWXx8KFk9UigyNTUzKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IFkoV2UuZW5jb2RpbmcpLHRoaXMu''@;'; put 'put ''ZW5jb2Rpbmc9V2UuZW5jb2RpbmcpfWZ1bmN0aW9uIEgoV2Upe2lmKHo9enx8Uig2NzUzKSwhKHRoaXMgaW5zdGFuY2VvZiBIKSlyZXR1cm4gbmV3IEgoV2UpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IEQoV2UsdGhpcyx0aGlzIGluc3RhbmNlb2YgeiksdGhpcy5yZWFkYWJsZT0hMCxXZSYm''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiBXZS5yZWFkJiYodGhpcy5fcmVhZD1XZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgV2UuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9V2UuZGVzdHJveSkpLGsuY2FsbCh0aGlzKX1mdW5jdGlvbiBOKFdlLEtlLFllLEplLGx0KXtWKCJyZWFkYWJsZUFkZENo''@;'; put 'put ''dW5rIixLZSk7dmFyIFBlLEFlLFRlLHFlLFhlLGJlPVdlLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1LZSliZS5yZWFkaW5nPSExLGZ1bmN0aW9uKEFlLFRlKXtpZihWKCJvbkVvZkNodW5rIiksIVRlLmVuZGVkKXtpZihUZS5kZWNvZGVyKXt2YXIgcWU9VGUuZGVjb2Rlci5lbmQoKTtxZSYm''@;'; put 'put ''cWUubGVuZ3RoJiYoVGUuYnVmZmVyLnB1c2gocWUpLFRlLmxlbmd0aCs9VGUub2JqZWN0TW9kZT8xOnFlLmxlbmd0aCl9VGUuZW5kZWQ9ITAsVGUuc3luYz92KEFlKTooVGUubmVlZFJlYWRhYmxlPSExLFRlLmVtaXR0ZWRSZWFkYWJsZXx8KFRlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwKEFlKSkp''@;'; put 'put ''fX0oV2UsYmUpO2Vsc2UgaWYobHR8fChBZT1iZSxFLmlzQnVmZmVyKFhlPVRlPUtlKXx8WGUgaW5zdGFuY2VvZiBqfHwic3RyaW5nIj09dHlwZW9mIFRlfHx2b2lkIDA9PT1UZXx8QWUub2JqZWN0TW9kZXx8KHFlPW5ldyBzZSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJh''@;'; put 'put ''eSJdLFRlKSksUGU9cWUpLFBlKUcoV2UsUGUpO2Vsc2UgaWYoYmUub2JqZWN0TW9kZXx8S2UmJktlLmxlbmd0aD4wKWlmKCJzdHJpbmciPT10eXBlb2YgS2V8fGJlLm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihLZSk9PT1FLnByb3RvdHlwZXx8KEtlPWZ1bmN0aW9uKEFlKXty''@;'; put 'put ''ZXR1cm4gRS5mcm9tKEFlKX0oS2UpKSxKZSliZS5lbmRFbWl0dGVkP0coV2UsbmV3IGNlKTpnKFdlLGJlLEtlLCEwKTtlbHNlIGlmKGJlLmVuZGVkKUcoV2UsbmV3IGhlKTtlbHNle2lmKGJlLmRlc3Ryb3llZClyZXR1cm4hMTtiZS5yZWFkaW5nPSExLGJlLmRlY29kZXImJiFZZT8oS2U9YmUu''@;'; put 'put ''ZGVjb2Rlci53cml0ZShLZSksYmUub2JqZWN0TW9kZXx8MCE9PUtlLmxlbmd0aD9nKFdlLGJlLEtlLCExKTp3KFdlLGJlKSk6ZyhXZSxiZSxLZSwhMSl9ZWxzZSBKZXx8KGJlLnJlYWRpbmc9ITEsdyhXZSxiZSkpO3JldHVybiFiZS5lbmRlZCYmKGJlLmxlbmd0aDxiZS5oaWdoV2F0ZXJNYXJr''@;'; put 'put ''fHwwPT09YmUubGVuZ3RoKX1mdW5jdGlvbiBnKFdlLEtlLFllLEplKXtLZS5mbG93aW5nJiYwPT09S2UubGVuZ3RoJiYhS2Uuc3luYz8oS2UuYXdhaXREcmFpbj0wLFdlLmVtaXQoImRhdGEiLFllKSk6KEtlLmxlbmd0aCs9S2Uub2JqZWN0TW9kZT8xOlllLmxlbmd0aCxKZT9LZS5idWZmZXIu''@;'; put 'put ''dW5zaGlmdChZZSk6S2UuYnVmZmVyLnB1c2goWWUpLEtlLm5lZWRSZWFkYWJsZSYmdihXZSkpLHcoV2UsS2UpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihXZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPVdlKX19KSxILnByb3RvdHlwZS5kZXN0cm95PWVlLmRlc3Ryb3ksSC5wcm90b3R5cGUuX3Vu''@;'; put 'put ''ZGVzdHJveT1lZS51bmRlc3Ryb3ksSC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oV2UsS2Upe0tlKFdlKX0sSC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihXZSxLZSl7dmFyIFllLEplPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEplLm9iamVjdE1vZGU/WWU9ITA6InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBXZSYmKChLZT1LZXx8SmUuZGVmYXVsdEVuY29kaW5nKSE9PUplLmVuY29kaW5nJiYoV2U9RS5mcm9tKFdlLEtlKSxLZT0iIiksWWU9ITApLE4odGhpcyxXZSxLZSwhMSxZZSl9LEgucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oV2Upe3JldHVybiBOKHRoaXMsV2UsbnVsbCwh''@;'; put 'put ''MCwhMSl9LEgucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LEgucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKFdlKXtZfHwoWT1SKDI1NTMpLlN0cmluZ0RlY29kZXIpO3ZhciBLZT1uZXcgWShXZSk7dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPUtlLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgWWU9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxKZT0iIjtudWxsIT09WWU7KUplKz1LZS53cml0''@;'; put 'put ''ZShZZS5kYXRhKSxZZT1ZZS5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09SmUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goSmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPUplLmxlbmd0aCx0aGlzfTt2YXIgQz0xMDczNzQx''@;'; put 'put ''ODI0O2Z1bmN0aW9uIFMoV2UsS2Upe3JldHVybiBXZTw9MHx8MD09PUtlLmxlbmd0aCYmS2UuZW5kZWQ/MDpLZS5vYmplY3RNb2RlPzE6V2UhPVdlP0tlLmZsb3dpbmcmJktlLmxlbmd0aD9LZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpLZS5sZW5ndGg6KFdlPktlLmhpZ2hXYXRlck1hcmsm''@;'; put 'put ''JihLZS5oaWdoV2F0ZXJNYXJrPSgoWWU9V2UpPj1DP1llPUM6KFllLS0sWWV8PVllPj4+MSxZZXw9WWU+Pj4yLFllfD1ZZT4+PjQsWWV8PVllPj4+OCxZZXw9WWU+Pj4xNixZZSsrKSxZZSkpLFdlPD1LZS5sZW5ndGg/V2U6S2UuZW5kZWQ/S2UubGVuZ3RoOihLZS5uZWVkUmVhZGFibGU9ITAs''@;'; put 'put ''MCkpO3ZhciBZZX1mdW5jdGlvbiB2KFdlKXt2YXIgS2U9V2UuX3JlYWRhYmxlU3RhdGU7VigiZW1pdFJlYWRhYmxlIixLZS5uZWVkUmVhZGFibGUsS2UuZW1pdHRlZFJlYWRhYmxlKSxLZS5uZWVkUmVhZGFibGU9ITEsS2UuZW1pdHRlZFJlYWRhYmxlfHwoVigiZW1pdFJlYWRhYmxlIixLZS5m''@;'; put 'put ''bG93aW5nKSxLZS5lbWl0dGVkUmVhZGFibGU9ITAsSy5uZXh0VGljayhwLFdlKSl9ZnVuY3Rpb24gcChXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0YXRlO1YoImVtaXRSZWFkYWJsZV8iLEtlLmRlc3Ryb3llZCxLZS5sZW5ndGgsS2UuZW5kZWQpLEtlLmRlc3Ryb3llZHx8IUtlLmxlbmd0aCYm''@;'; put 'put ''IUtlLmVuZGVkfHwoV2UuZW1pdCgicmVhZGFibGUiKSxLZS5lbWl0dGVkUmVhZGFibGU9ITEpLEtlLm5lZWRSZWFkYWJsZT0hS2UuZmxvd2luZyYmIUtlLmVuZGVkJiZLZS5sZW5ndGg8PUtlLmhpZ2hXYXRlck1hcmsseGUoV2UpfWZ1bmN0aW9uIHcoV2UsS2Upe0tlLnJlYWRpbmdNb3JlfHwo''@;'; put 'put ''S2UucmVhZGluZ01vcmU9ITAsSy5uZXh0VGljayhKLFdlLEtlKSl9ZnVuY3Rpb24gSihXZSxLZSl7Zm9yKDshS2UucmVhZGluZyYmIUtlLmVuZGVkJiYoS2UubGVuZ3RoPEtlLmhpZ2hXYXRlck1hcmt8fEtlLmZsb3dpbmcmJjA9PT1LZS5sZW5ndGgpOyl7dmFyIFllPUtlLmxlbmd0aDtpZihW''@;'; put 'put ''KCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLFdlLnJlYWQoMCksWWU9PT1LZS5sZW5ndGgpYnJlYWt9S2UucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gbmUoV2Upe3ZhciBLZT1XZS5fcmVhZGFibGVTdGF0ZTtLZS5yZWFkYWJsZUxpc3RlbmluZz1XZS5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIp''@;'; put 'put ''PjAsS2UucmVzdW1lU2NoZWR1bGVkJiYhS2UucGF1c2VkP0tlLmZsb3dpbmc9ITA6V2UubGlzdGVuZXJDb3VudCgiZGF0YSIpPjAmJldlLnJlc3VtZSgpfWZ1bmN0aW9uIGRlKFdlKXtWKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxXZS5yZWFkKDApfWZ1bmN0aW9uIGZlKFdlLEtlKXtW''@;'; put 'put ''KCJyZXN1bWUiLEtlLnJlYWRpbmcpLEtlLnJlYWRpbmd8fFdlLnJlYWQoMCksS2UucmVzdW1lU2NoZWR1bGVkPSExLFdlLmVtaXQoInJlc3VtZSIpLHhlKFdlKSxLZS5mbG93aW5nJiYhS2UucmVhZGluZyYmV2UucmVhZCgwKX1mdW5jdGlvbiB4ZShXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlO2ZvcihWKCJmbG93IixLZS5mbG93aW5nKTtLZS5mbG93aW5nJiZudWxsIT09V2UucmVhZCgpOyk7fWZ1bmN0aW9uIExlKFdlLEtlKXtyZXR1cm4gMD09PUtlLmxlbmd0aD9udWxsOihLZS5vYmplY3RNb2RlP1llPUtlLmJ1ZmZlci5zaGlmdCgpOiFXZXx8V2U+PUtlLmxlbmd0aD8oWWU9''@;'; put 'put ''S2UuZGVjb2Rlcj9LZS5idWZmZXIuam9pbigiIik6MT09PUtlLmJ1ZmZlci5sZW5ndGg/S2UuYnVmZmVyLmZpcnN0KCk6S2UuYnVmZmVyLmNvbmNhdChLZS5sZW5ndGgpLEtlLmJ1ZmZlci5jbGVhcigpKTpZZT1LZS5idWZmZXIuY29uc3VtZShXZSxLZS5kZWNvZGVyKSxZZSk7dmFyIFllfWZ1''@;'; put 'put ''bmN0aW9uIEZlKFdlKXt2YXIgS2U9V2UuX3JlYWRhYmxlU3RhdGU7VigiZW5kUmVhZGFibGUiLEtlLmVuZEVtaXR0ZWQpLEtlLmVuZEVtaXR0ZWR8fChLZS5lbmRlZD0hMCxLLm5leHRUaWNrKE9lLEtlLFdlKSl9ZnVuY3Rpb24gT2UoV2UsS2Upe2lmKFYoImVuZFJlYWRhYmxlTlQiLFdlLmVu''@;'; put 'put ''ZEVtaXR0ZWQsV2UubGVuZ3RoKSwhV2UuZW5kRW1pdHRlZCYmMD09PVdlLmxlbmd0aCYmKFdlLmVuZEVtaXR0ZWQ9ITAsS2UucmVhZGFibGU9ITEsS2UuZW1pdCgiZW5kIiksV2UuYXV0b0Rlc3Ryb3kpKXt2YXIgWWU9S2UuX3dyaXRhYmxlU3RhdGU7KCFZZXx8WWUuYXV0b0Rlc3Ryb3kmJlll''@;'; put 'put ''LmZpbmlzaGVkKSYmS2UuZGVzdHJveSgpfX1mdW5jdGlvbiBCZShXZSxLZSl7Zm9yKHZhciBZZT0wLEplPVdlLmxlbmd0aDtZZTxKZTtZZSsrKWlmKFdlW1llXT09PUtlKXJldHVybiBZZTtyZXR1cm4tMX1ILnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKFdlKXtWKCJyZWFkIixXZSksV2U9cGFy''@;'; put 'put ''c2VJbnQoV2UsMTApO3ZhciBLZT10aGlzLl9yZWFkYWJsZVN0YXRlLFllPVdlO2lmKDAhPT1XZSYmKEtlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PVdlJiZLZS5uZWVkUmVhZGFibGUmJigoMCE9PUtlLmhpZ2hXYXRlck1hcms/S2UubGVuZ3RoPj1LZS5oaWdoV2F0ZXJNYXJrOktlLmxlbmd0''@;'; put 'put ''aD4wKXx8S2UuZW5kZWQpKXJldHVybiBWKCJyZWFkOiBlbWl0UmVhZGFibGUiLEtlLmxlbmd0aCxLZS5lbmRlZCksMD09PUtlLmxlbmd0aCYmS2UuZW5kZWQ/RmUodGhpcyk6dih0aGlzKSxudWxsO2lmKDA9PT0oV2U9UyhXZSxLZSkpJiZLZS5lbmRlZClyZXR1cm4gMD09PUtlLmxlbmd0aCYm''@;'; put 'put ''RmUodGhpcyksbnVsbDt2YXIgSmUsbHQ9S2UubmVlZFJlYWRhYmxlO3JldHVybiBWKCJuZWVkIHJlYWRhYmxlIixsdCksKDA9PT1LZS5sZW5ndGh8fEtlLmxlbmd0aC1XZTxLZS5oaWdoV2F0ZXJNYXJrKSYmVigibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGx0PSEwKSxLZS5lbmRlZHx8''@;'; put 'put ''S2UucmVhZGluZz9WKCJyZWFkaW5nIG9yIGVuZGVkIixsdD0hMSk6bHQmJihWKCJkbyByZWFkIiksS2UucmVhZGluZz0hMCxLZS5zeW5jPSEwLDA9PT1LZS5sZW5ndGgmJihLZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoS2UuaGlnaFdhdGVyTWFyayksS2Uuc3luYz0hMSxLZS5yZWFk''@;'; put 'put ''aW5nfHwoV2U9UyhZZSxLZSkpKSxudWxsPT09KEplPVdlPjA/TGUoV2UsS2UpOm51bGwpPyhLZS5uZWVkUmVhZGFibGU9S2UubGVuZ3RoPD1LZS5oaWdoV2F0ZXJNYXJrLFdlPTApOihLZS5sZW5ndGgtPVdlLEtlLmF3YWl0RHJhaW49MCksMD09PUtlLmxlbmd0aCYmKEtlLmVuZGVkfHwoS2Uu''@;'; put 'put ''bmVlZFJlYWRhYmxlPSEwKSxZZSE9PVdlJiZLZS5lbmRlZCYmRmUodGhpcykpLG51bGwhPT1KZSYmdGhpcy5lbWl0KCJkYXRhIixKZSksSmV9LEgucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKFdlKXtHKHRoaXMsbmV3IHVlKCJfcmVhZCgpIikpfSxILnByb3RvdHlwZS5waXBlPWZ1bmN0aW9u''@;'; put 'put ''KFdlLEtlKXt2YXIgWWU9dGhpcyxKZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChKZS5waXBlc0NvdW50KXtjYXNlIDA6SmUucGlwZXM9V2U7YnJlYWs7Y2FzZSAxOkplLnBpcGVzPVtKZS5waXBlcyxXZV07YnJlYWs7ZGVmYXVsdDpKZS5waXBlcy5wdXNoKFdlKX1KZS5waXBlc0NvdW50''@;'; put 'put ''Kz0xLFYoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsSmUucGlwZXNDb3VudCxLZSk7dmFyIGx0PUtlJiYhMT09PUtlLmVuZHx8V2U9PT1LLnN0ZG91dHx8V2U9PT1LLnN0ZGVycj9NZTpiZTtmdW5jdGlvbiBiZSgpe1YoIm9uZW5kIiksV2UuZW5kKCl9SmUuZW5kRW1pdHRlZD9LLm5leHRUaWNr''@;'; put 'put ''KGx0KTpZZS5vbmNlKCJlbmQiLGx0KSxXZS5vbigidW5waXBlIixmdW5jdGlvbiBQZShEZSx6ZSl7Vigib251bnBpcGUiKSxEZT09PVllJiZ6ZSYmITE9PT16ZS5oYXNVbnBpcGVkJiYoemUuaGFzVW5waXBlZD0hMCxWKCJjbGVhbnVwIiksV2UucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVZSks''@;'; put 'put ''V2UucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaHQpLFdlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsQWUpLFdlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsWGUpLFdlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLFBlKSxZZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixiZSksWWUucmVtb3ZlTGlzdGVu''@;'; put 'put ''ZXIoImVuZCIsTWUpLFllLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixxZSksVGU9ITAsIUplLmF3YWl0RHJhaW58fFdlLl93cml0YWJsZVN0YXRlJiYhV2UuX3dyaXRhYmxlU3RhdGUubmVlZERyYWlufHxBZSgpKX0pO3ZhciBEZSxBZT0oRGU9WWUsZnVuY3Rpb24oKXt2YXIgemU9RGUuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGU7VigicGlwZU9uRHJhaW4iLHplLmF3YWl0RHJhaW4pLHplLmF3YWl0RHJhaW4mJnplLmF3YWl0RHJhaW4tLSwwPT09emUuYXdhaXREcmFpbiYmSShEZSwiZGF0YSIpJiYoemUuZmxvd2luZz0hMCx4ZShEZSkpfSk7V2Uub24oImRyYWluIixBZSk7dmFyIFRlPSExO2Z1bmN0aW9u''@;'; put 'put ''IHFlKERlKXtWKCJvbmRhdGEiKTt2YXIgemU9V2Uud3JpdGUoRGUpO1YoImRlc3Qud3JpdGUiLHplKSwhMT09PXplJiYoKDE9PT1KZS5waXBlc0NvdW50JiZKZS5waXBlcz09PVdlfHxKZS5waXBlc0NvdW50PjEmJi0xIT09QmUoSmUucGlwZXMsV2UpKSYmIVRlJiYoVigiZmFsc2Ugd3JpdGUg''@;'; put 'put ''cmVzcG9uc2UsIHBhdXNlIixKZS5hd2FpdERyYWluKSxKZS5hd2FpdERyYWluKyspLFllLnBhdXNlKCkpfWZ1bmN0aW9uIFhlKERlKXtWKCJvbmVycm9yIixEZSksTWUoKSxXZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFhlKSwwPT09SShXZSwiZXJyb3IiKSYmRyhXZSxEZSl9ZnVuY3Rpb24g''@;'; put 'put ''VWUoKXtXZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixodCksTWUoKX1mdW5jdGlvbiBodCgpe1YoIm9uZmluaXNoIiksV2UucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVZSksTWUoKX1mdW5jdGlvbiBNZSgpe1YoInVucGlwZSIpLFllLnVucGlwZShXZSl9cmV0dXJuIFllLm9uKCJkYXRhIixx''@;'; put 'put ''ZSksZnVuY3Rpb24oRGUsemUsaXQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBEZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIERlLnByZXBlbmRMaXN0ZW5lcih6ZSxpdCk7RGUuX2V2ZW50cyYmRGUuX2V2ZW50c1t6ZV0/QXJyYXkuaXNBcnJheShEZS5fZXZlbnRzW3plXSk/RGUuX2V2ZW50c1t6''@;'; put 'put ''ZV0udW5zaGlmdChpdCk6RGUuX2V2ZW50c1t6ZV09W2l0LERlLl9ldmVudHNbemVdXTpEZS5vbih6ZSxpdCl9KFdlLCJlcnJvciIsWGUpLFdlLm9uY2UoImNsb3NlIixVZSksV2Uub25jZSgiZmluaXNoIixodCksV2UuZW1pdCgicGlwZSIsWWUpLEplLmZsb3dpbmd8fChWKCJwaXBlIHJlc3Vt''@;'; put 'put ''ZSIpLFllLnJlc3VtZSgpKSxXZX0sSC5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKFdlKXt2YXIgS2U9dGhpcy5fcmVhZGFibGVTdGF0ZSxZZT17aGFzVW5waXBlZDohMX07aWYoMD09PUtlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PUtlLnBpcGVzQ291bnQpcmV0dXJuIFdlJiZX''@;'; put 'put ''ZSE9PUtlLnBpcGVzfHwoV2V8fChXZT1LZS5waXBlcyksS2UucGlwZXM9bnVsbCxLZS5waXBlc0NvdW50PTAsS2UuZmxvd2luZz0hMSxXZSYmV2UuZW1pdCgidW5waXBlIix0aGlzLFllKSksdGhpcztpZighV2Upe3ZhciBKZT1LZS5waXBlcyxsdD1LZS5waXBlc0NvdW50O0tlLnBpcGVzPW51''@;'; put 'put ''bGwsS2UucGlwZXNDb3VudD0wLEtlLmZsb3dpbmc9ITE7Zm9yKHZhciBQZT0wO1BlPGx0O1BlKyspSmVbUGVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBiZT1CZShLZS5waXBlcyxXZSk7cmV0dXJuLTE9PT1iZXx8KEtlLnBpcGVzLnNwbGlj''@;'; put 'put ''ZShiZSwxKSxLZS5waXBlc0NvdW50LT0xLDE9PT1LZS5waXBlc0NvdW50JiYoS2UucGlwZXM9S2UucGlwZXNbMF0pLFdlLmVtaXQoInVucGlwZSIsdGhpcyxZZSkpLHRoaXN9LEgucHJvdG90eXBlLmFkZExpc3RlbmVyPUgucHJvdG90eXBlLm9uPWZ1bmN0aW9uKFdlLEtlKXt2YXIgWWU9ay5w''@;'; put 'put ''cm90b3R5cGUub24uY2FsbCh0aGlzLFdlLEtlKSxKZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PVdlPyhKZS5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCwhMSE9PUplLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJs''@;'; put 'put ''ZSI9PT1XZSYmKEplLmVuZEVtaXR0ZWR8fEplLnJlYWRhYmxlTGlzdGVuaW5nfHwoSmUucmVhZGFibGVMaXN0ZW5pbmc9SmUubmVlZFJlYWRhYmxlPSEwLEplLmZsb3dpbmc9ITEsSmUuZW1pdHRlZFJlYWRhYmxlPSExLFYoIm9uIHJlYWRhYmxlIixKZS5sZW5ndGgsSmUucmVhZGluZyksSmUu''@;'; put 'put ''bGVuZ3RoP3YodGhpcyk6SmUucmVhZGluZ3x8Sy5uZXh0VGljayhkZSx0aGlzKSkpLFllfSxILnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihXZSxLZSl7dmFyIFllPWsucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxXZSxLZSk7cmV0dXJuInJlYWRhYmxlIj09''@;'; put 'put ''PVdlJiZLLm5leHRUaWNrKG5lLHRoaXMpLFllfSxILnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oV2Upe3ZhciBLZT1rLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiJyZWFkYWJsZSIhPT1XZSYmdm9pZCAwIT09''@;'; put 'put ''V2V8fEsubmV4dFRpY2sobmUsdGhpcyksS2V9LEgucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBZZSxXZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBXZS5mbG93aW5nfHwoVigicmVzdW1lIiksV2UuZmxvd2luZz0hV2UucmVhZGFibGVMaXN0ZW5pbmcsKFllPVdlKS5yZXN1''@;'; put 'put ''bWVTY2hlZHVsZWR8fChZZS5yZXN1bWVTY2hlZHVsZWQ9ITAsSy5uZXh0VGljayhmZSx0aGlzLFllKSkpLFdlLnBhdXNlZD0hMSx0aGlzfSxILnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBWKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxv''@;'; put 'put ''d2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihWKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LEgucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24o''@;'; put 'put ''V2Upe3ZhciBLZT10aGlzLFllPXRoaXMuX3JlYWRhYmxlU3RhdGUsSmU9ITE7Zm9yKHZhciBsdCBpbiBXZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKFYoIndyYXBwZWQgZW5kIiksWWUuZGVjb2RlciYmIVllLmVuZGVkKXt2YXIgYmU9WWUuZGVjb2Rlci5lbmQoKTtiZSYmYmUubGVuZ3RoJiZL''@;'; put 'put ''ZS5wdXNoKGJlKX1LZS5wdXNoKG51bGwpfSksV2Uub24oImRhdGEiLGZ1bmN0aW9uKGJlKXtWKCJ3cmFwcGVkIGRhdGEiKSxZZS5kZWNvZGVyJiYoYmU9WWUuZGVjb2Rlci53cml0ZShiZSkpLFllLm9iamVjdE1vZGUmJm51bGw9PWJlfHwoWWUub2JqZWN0TW9kZXx8YmUmJmJlLmxlbmd0aCkm''@;'; put 'put ''JihLZS5wdXNoKGJlKXx8KEplPSEwLFdlLnBhdXNlKCkpKX0pLFdlKXZvaWQgMD09PXRoaXNbbHRdJiYiZnVuY3Rpb24iPT10eXBlb2YgV2VbbHRdJiYodGhpc1tsdF09ZnVuY3Rpb24oYmUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXZVtiZV0uYXBwbHkoV2UsYXJndW1lbnRzKX19KGx0''@;'; put 'put ''KSk7Zm9yKHZhciBQZT0wO1BlPGIubGVuZ3RoO1BlKyspV2Uub24oYltQZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxiW1BlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKGJlKXtWKCJ3cmFwcGVkIF9yZWFkIixiZSksSmUmJihKZT0hMSxXZS5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBTeW1ib2wmJihILnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09WCYmKFg9Uig1ODUwKSksWCh0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7''@;'; put 'put ''ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInJlYWRhYmxlRmxvd2luZyIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30s''@;'; put 'put ''c2V0OmZ1bmN0aW9uKFdlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPVdlKX19KSxILl9mcm9tTGlzdD1MZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInJlYWRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEguZnJvbT1mdW5jdGlvbihXZSxLZSl7cmV0dXJuIHZvaWQgMD09PVUmJihVPVIoNTE2NykpLFUoSCxXZSxLZSl9KX0sNDYwNTooTSxPLFIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O00uZXhwb3J0cz1CO3ZhciB6PVIoNDI4MSkucSxLPXouRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsST16LkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxrPXouRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyxFPXouRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLGo9Uig2NzUz''@;'; put 'put ''KTtmdW5jdGlvbiBWKFUscSl7dmFyIGVlPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2VlLnRyYW5zZm9ybWluZz0hMTt2YXIgdGU9ZWUud3JpdGVjYjtpZihudWxsPT09dGUpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBJKTtlZS53cml0ZWNodW5rPW51bGwsZWUud3JpdGVjYj1udWxsLG51''@;'; put 'put ''bGwhPXEmJnRoaXMucHVzaChxKSx0ZShVKTt2YXIgb2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtvZS5yZWFkaW5nPSExLChvZS5uZWVkUmVhZGFibGV8fG9lLmxlbmd0aDxvZS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChvZS5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBCKFUpe2lmKCEodGhp''@;'; put 'put ''cyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQihVKTtqLmNhbGwodGhpcyxVKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Vi5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVl''@;'; put 'put ''bmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsVSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBVLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1VLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIFUu''@;'; put 'put ''Zmx1c2gmJih0aGlzLl9mbHVzaD1VLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIixZKX1mdW5jdGlvbiBZKCl7dmFyIFU9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkP1godGhpcyxudWxsLG51bGwpOnRoaXMuX2Zs''@;'; put 'put ''dXNoKGZ1bmN0aW9uKHEsZWUpe1goVSxxLGVlKX0pfWZ1bmN0aW9uIFgoVSxxLGVlKXtpZihxKXJldHVybiBVLmVtaXQoImVycm9yIixxKTtpZihudWxsIT1lZSYmVS5wdXNoKGVlKSxVLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRTtpZihVLl90cmFuc2Zvcm1TdGF0ZS50cmFu''@;'; put 'put ''c2Zvcm1pbmcpdGhyb3cgbmV3IGs7cmV0dXJuIFUucHVzaChudWxsKX1SKDU3MTcpKEIsaiksQi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihVLHEpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLGoucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLFUscSl9LEIu''@;'; put 'put ''cHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oVSxxLGVlKXtlZShuZXcgSygiX3RyYW5zZm9ybSgpIikpfSxCLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oVSxxLGVlKXt2YXIgdGU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYodGUud3JpdGVjYj1lZSx0ZS53cml0ZWNodW5rPVUsdGUu''@;'; put 'put ''d3JpdGVlbmNvZGluZz1xLCF0ZS50cmFuc2Zvcm1pbmcpe3ZhciBvZT10aGlzLl9yZWFkYWJsZVN0YXRlOyh0ZS5uZWVkVHJhbnNmb3JtfHxvZS5uZWVkUmVhZGFibGV8fG9lLmxlbmd0aDxvZS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChvZS5oaWdoV2F0ZXJNYXJrKX19LEIucHJvdG90''@;'; put 'put ''eXBlLl9yZWFkPWZ1bmN0aW9uKFUpe3ZhciBxPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1xLndyaXRlY2h1bmt8fHEudHJhbnNmb3JtaW5nP3EubmVlZFRyYW5zZm9ybT0hMDoocS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKHEud3JpdGVjaHVuayxxLndyaXRlZW5jb2Rp''@;'; put 'put ''bmcscS5hZnRlclRyYW5zZm9ybSkpfSxCLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihVLHEpe2oucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxVLGZ1bmN0aW9uKGVlKXtxKGVlKX0pfX0sNDIyOTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig0MTU1KTtmdW5jdGlv''@;'; put 'put ''biBJKHcpe3ZhciBKPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKG5lLGRlLGZlKXt2YXIgeGU9bmUuZW50cnk7Zm9yKG5lLmVudHJ5PW51bGw7eGU7KXt2YXIgTGU9eGUuY2FsbGJhY2s7ZGUucGVuZGluZ2NiLS0s''@;'; put 'put ''TGUodm9pZCAwKSx4ZT14ZS5uZXh0fWRlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PW5lfShKLHcpfX1NLmV4cG9ydHM9SCxILldyaXRhYmxlU3RhdGU9RDt2YXIgQixrPXtkZXByZWNhdGU6Uig0OTI3KX0sRT1SKDI1MDMpLGo9Uig4NzY0KS5CdWZmZXIsVj0odm9pZCAwIT09Ui5nP1IuZzp0''@;'; put 'put ''eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxZPVIoMTE5NSksWD1SKDI0NTcpLmdldEhpZ2hXYXRlck1hcmssVT1SKDQyODEpLnEscT1VLkVSUl9JTlZBTElEX0FSR19UWVBFLGVlPVUuRVJSX01FVEhPRF9O''@;'; put 'put ''T1RfSU1QTEVNRU5URUQsdGU9VS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssb2U9VS5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLHNlPVUuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsaGU9VS5FUlJfU1RSRUFNX05VTExfVkFMVUVTLHVlPVUuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsY2U9VS5FUlJf''@;'; put 'put ''VU5LTk9XTl9FTkNPRElORyxHPVkuZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gYigpe31mdW5jdGlvbiBEKHcsSixuZSl7ej16fHxSKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIG5lJiYobmU9SiBpbnN0YW5jZW9mIHopLHRoaXMub2JqZWN0TW9kZT0hISh3PXd8fHt9KS5vYmplY3RNb2RlLG5l''@;'; put 'put ''JiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF3LndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPVgodGhpcyx3LCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLG5lKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5n''@;'; put 'put ''PSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PXcuZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dy5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3Jp''@;'; put 'put ''dGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKGZlKXshZnVuY3Rpb24oeGUsTGUpe3ZhciBLZSxGZT14ZS5fd3JpdGFibGVTdGF0ZSxPZT1GZS5zeW5jLEJlPUZlLndyaXRlY2I7aWYoImZ1bmN0''@;'; put 'put ''aW9uIiE9dHlwZW9mIEJlKXRocm93IG5ldyB0ZTtpZigoS2U9RmUpLndyaXRpbmc9ITEsS2Uud3JpdGVjYj1udWxsLEtlLmxlbmd0aC09S2Uud3JpdGVsZW4sS2Uud3JpdGVsZW49MCxMZSkhZnVuY3Rpb24oS2UsWWUsSmUsbHQsUGUpey0tWWUucGVuZGluZ2NiLEplPyhLLm5leHRUaWNrKFBl''@;'; put 'put ''LGx0KSxLLm5leHRUaWNrKHAsS2UsWWUpLEtlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxHKEtlLGx0KSk6KFBlKGx0KSxLZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRyhLZSxsdCkscChLZSxZZSkpfSh4ZSxGZSxPZSxMZSxCZSk7ZWxzZXt2YXIgV2U9UyhGZSl8''@;'; put 'put ''fHhlLmRlc3Ryb3llZDtXZXx8RmUuY29ya2VkfHxGZS5idWZmZXJQcm9jZXNzaW5nfHwhRmUuYnVmZmVyZWRSZXF1ZXN0fHxDKHhlLEZlKSxPZT9LLm5leHRUaWNrKGcseGUsRmUsV2UsQmUpOmcoeGUsRmUsV2UsQmUpfX0oSixmZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49''@;'; put 'put ''MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PXcuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9''@;'; put 'put ''ISF3LmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgSSh0aGlzKX1mdW5jdGlvbiBIKHcpe3ZhciBKPXRoaXMgaW5zdGFuY2VvZih6PXp8fFIoNjc1MykpO2lmKCFKJiYhQi5jYWxsKEgsdGhpcykpcmV0dXJuIG5ldyBI''@;'; put 'put ''KHcpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IEQodyx0aGlzLEopLHRoaXMud3JpdGFibGU9ITAsdyYmKCJmdW5jdGlvbiI9PXR5cGVvZiB3LndyaXRlJiYodGhpcy5fd3JpdGU9dy53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIHcud3JpdGV2JiYodGhpcy5fd3JpdGV2PXcud3JpdGV2KSwi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2Ygdy5kZXN0cm95JiYodGhpcy5fZGVzdHJveT13LmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiB3LmZpbmFsJiYodGhpcy5fZmluYWw9dy5maW5hbCkpLEUuY2FsbCh0aGlzKX1mdW5jdGlvbiBOKHcsSixuZSxkZSxmZSx4ZSxMZSl7Si53cml0ZWxlbj1kZSxK''@;'; put 'put ''LndyaXRlY2I9TGUsSi53cml0aW5nPSEwLEouc3luYz0hMCxKLmRlc3Ryb3llZD9KLm9ud3JpdGUobmV3IHNlKCJ3cml0ZSIpKTpuZT93Ll93cml0ZXYoZmUsSi5vbndyaXRlKTp3Ll93cml0ZShmZSx4ZSxKLm9ud3JpdGUpLEouc3luYz0hMX1mdW5jdGlvbiBnKHcsSixuZSxkZSl7dmFyIGZl''@;'; put 'put ''LHhlO25lfHwoZmU9dywwPT09KHhlPUopLmxlbmd0aCYmeGUubmVlZERyYWluJiYoeGUubmVlZERyYWluPSExLGZlLmVtaXQoImRyYWluIikpKSxKLnBlbmRpbmdjYi0tLGRlKCkscCh3LEopfWZ1bmN0aW9uIEModyxKKXtKLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIG5lPUouYnVmZmVyZWRS''@;'; put 'put ''ZXF1ZXN0O2lmKHcuX3dyaXRldiYmbmUmJm5lLm5leHQpe3ZhciBmZT1uZXcgQXJyYXkoSi5idWZmZXJlZFJlcXVlc3RDb3VudCkseGU9Si5jb3JrZWRSZXF1ZXN0c0ZyZWU7eGUuZW50cnk9bmU7Zm9yKHZhciBMZT0wLEZlPSEwO25lOylmZVtMZV09bmUsbmUuaXNCdWZ8fChGZT0hMSksbmU9''@;'; put 'put ''bmUubmV4dCxMZSs9MTtmZS5hbGxCdWZmZXJzPUZlLE4odyxKLCEwLEoubGVuZ3RoLGZlLCIiLHhlLmZpbmlzaCksSi5wZW5kaW5nY2IrKyxKLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx4ZS5uZXh0PyhKLmNvcmtlZFJlcXVlc3RzRnJlZT14ZS5uZXh0LHhlLm5leHQ9bnVsbCk6Si5jb3Jr''@;'; put 'put ''ZWRSZXF1ZXN0c0ZyZWU9bmV3IEkoSiksSi5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtuZTspe3ZhciBPZT1uZS5jaHVuaztpZihOKHcsSiwhMSxKLm9iamVjdE1vZGU/MTpPZS5sZW5ndGgsT2UsbmUuZW5jb2RpbmcsbmUuY2FsbGJhY2spLG5lPW5lLm5leHQsSi5idWZmZXJl''@;'; put 'put ''ZFJlcXVlc3RDb3VudC0tLEoud3JpdGluZylicmVha31udWxsPT09bmUmJihKLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9Si5idWZmZXJlZFJlcXVlc3Q9bmUsSi5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIFModyl7cmV0dXJuIHcuZW5kaW5nJiYwPT09dy5sZW5ndGgmJm51bGw9''@;'; put 'put ''PT13LmJ1ZmZlcmVkUmVxdWVzdCYmIXcuZmluaXNoZWQmJiF3LndyaXRpbmd9ZnVuY3Rpb24gdih3LEope3cuX2ZpbmFsKGZ1bmN0aW9uKG5lKXtKLnBlbmRpbmdjYi0tLG5lJiZHKHcsbmUpLEoucHJlZmluaXNoZWQ9ITAsdy5lbWl0KCJwcmVmaW5pc2giKSxwKHcsSil9KX1mdW5jdGlvbiBw''@;'; put 'put ''KHcsSil7dmFyIGZlLHhlLG5lPVMoSik7aWYobmUmJihmZT13LCh4ZT1KKS5wcmVmaW5pc2hlZHx8eGUuZmluYWxDYWxsZWR8fCgiZnVuY3Rpb24iIT10eXBlb2YgZmUuX2ZpbmFsfHx4ZS5kZXN0cm95ZWQ/KHhlLnByZWZpbmlzaGVkPSEwLGZlLmVtaXQoInByZWZpbmlzaCIpKTooeGUucGVu''@;'; put 'put ''ZGluZ2NiKysseGUuZmluYWxDYWxsZWQ9ITAsSy5uZXh0VGljayh2LGZlLHhlKSkpLDA9PT1KLnBlbmRpbmdjYiYmKEouZmluaXNoZWQ9ITAsdy5lbWl0KCJmaW5pc2giKSxKLmF1dG9EZXN0cm95KSkpe3ZhciBkZT13Ll9yZWFkYWJsZVN0YXRlOyghZGV8fGRlLmF1dG9EZXN0cm95JiZkZS5l''@;'; put 'put ''bmRFbWl0dGVkKSYmdy5kZXN0cm95KCl9cmV0dXJuIG5lfVIoNTcxNykoSCxFKSxELnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHc9dGhpcy5idWZmZXJlZFJlcXVlc3QsSj1bXTt3OylKLnB1c2godyksdz13Lm5leHQ7cmV0dXJuIEp9LGZ1bmN0aW9uKCl7dHJ5e09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShELnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OmsuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0''@;'; put 'put ''ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KEI9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5o''@;'; put 'put ''YXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEgsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbih3KXtyZXR1cm4hIUIuY2FsbCh0aGlzLHcpfHx0aGlzPT09SCYmdyYmdy5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIER9fSkpOkI9ZnVuY3Rpb24odyl7cmV0dXJu''@;'; put 'put ''IHcgaW5zdGFuY2VvZiB0aGlzfSxILnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7Ryh0aGlzLG5ldyBvZSl9LEgucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHcsSixuZSl7dmFyIGRlLEZlLE9lLEJlLGZlPXRoaXMuX3dyaXRhYmxlU3RhdGUseGU9ITEsTGU9IWZlLm9iamVjdE1vZGUmJihq''@;'; put 'put ''LmlzQnVmZmVyKGRlPXcpfHxkZSBpbnN0YW5jZW9mIFYpO3JldHVybiBMZSYmIWouaXNCdWZmZXIodykmJih3PWouZnJvbSh3KSksImZ1bmN0aW9uIj09dHlwZW9mIEomJihuZT1KLEo9bnVsbCksTGU/Sj0iYnVmZmVyIjpKfHwoSj1mZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiBuZSYmKG5lPWIpLGZlLmVuZGluZz8oRmU9dGhpcyxPZT1uZSxCZT1uZXcgdWUsRyhGZSxCZSksSy5uZXh0VGljayhPZSxCZSkpOihMZXx8ZnVuY3Rpb24oRmUsT2UsQmUsV2Upe3ZhciBLZTtyZXR1cm4gbnVsbD09PUJlP0tlPW5ldyBoZToic3RyaW5nIj09dHlwZW9mIEJlfHxPZS5v''@;'; put 'put ''YmplY3RNb2RlfHwoS2U9bmV3IHEoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLEJlKSksIUtlfHwoRyhGZSxLZSksSy5uZXh0VGljayhXZSxLZSksITEpfSh0aGlzLGZlLHcsbmUpKSYmKGZlLnBlbmRpbmdjYisrLHhlPWZ1bmN0aW9uKEZlLE9lLEJlLFdlLEtlLFllKXtpZighQmUpe3Zh''@;'; put 'put ''ciBKZT0oVGU9V2UsKEFlPU9lKS5vYmplY3RNb2RlfHwhMT09PUFlLmRlY29kZVN0cmluZ3N8fCJzdHJpbmciIT10eXBlb2YgVGV8fChUZT1qLmZyb20oVGUsS2UpKSxUZSk7V2UhPT1KZSYmKEJlPSEwLEtlPSJidWZmZXIiLFdlPUplKX12YXIgQWUsVGUsbHQ9T2Uub2JqZWN0TW9kZT8xOldl''@;'; put 'put ''Lmxlbmd0aDtPZS5sZW5ndGgrPWx0O3ZhciBQZT1PZS5sZW5ndGg8T2UuaGlnaFdhdGVyTWFyaztpZihQZXx8KE9lLm5lZWREcmFpbj0hMCksT2Uud3JpdGluZ3x8T2UuY29ya2VkKXt2YXIgYmU9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdDtPZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpX''@;'; put 'put ''ZSxlbmNvZGluZzpLZSxpc0J1ZjpCZSxjYWxsYmFjazpZZSxuZXh0Om51bGx9LGJlP2JlLm5leHQ9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdDpPZS5idWZmZXJlZFJlcXVlc3Q9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdCxPZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIE4oRmUsT2UsITEs''@;'; put 'put ''bHQsV2UsS2UsWWUpO3JldHVybiBQZX0odGhpcyxmZSxMZSx3LEosbmUpKSx4ZX0sSC5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEgucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3dyaXRhYmxlU3RhdGU7dy5j''@;'; put 'put ''b3JrZWQmJih3LmNvcmtlZC0tLHcud3JpdGluZ3x8dy5jb3JrZWR8fHcuYnVmZmVyUHJvY2Vzc2luZ3x8IXcuYnVmZmVyZWRSZXF1ZXN0fHxDKHRoaXMsdykpfSxILnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odyl7aWYoInN0cmluZyI9PXR5cGVvZiB3JiYodz13LnRv''@;'; put 'put ''TG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKHcrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgY2Uodyk7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXcsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksSC5wcm90b3R5cGUu''@;'; put 'put ''X3dyaXRlPWZ1bmN0aW9uKHcsSixuZSl7bmUobmV3IGVlKCJfd3JpdGUoKSIpKX0sSC5wcm90b3R5cGUuX3dyaXRldj1udWxsLEgucHJvdG90eXBlLmVuZD1mdW5jdGlvbih3LEosbmUpe3ZhciB4ZSxMZSxkZT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB3''@;'; put 'put ''PyhuZT13LHc9bnVsbCxKPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBKJiYobmU9SixKPW51bGwpLG51bGwhPXcmJnRoaXMud3JpdGUodyxKKSxkZS5jb3JrZWQmJihkZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxkZS5lbmRpbmd8fChMZT1uZSwoeGU9ZGUpLmVuZGluZz0hMCxwKHRoaXMs''@;'; put 'put ''eGUpLExlJiYoeGUuZmluaXNoZWQ/Sy5uZXh0VGljayhMZSk6dGhpcy5vbmNlKCJmaW5pc2giLExlKSkseGUuZW5kZWQ9ITAsdGhpcy53cml0YWJsZT0hMSksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih3KXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dyl9fSksSC5wcm90b3R5cGUuZGVzdHJveT1ZLmRlc3Ryb3ksSC5wcm90b3R5cGUuX3VuZGVzdHJveT1ZLnVuZGVzdHJv''@;'; put 'put ''eSxILnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih3LEope0oodyl9fSw1ODUwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1SKDQxNTUpO2Z1bmN0aW9uIEkoaGUsdWUsY2Upe3JldHVybih1ZT0ic3ltYm9sIj09dHlwZW9mKGI9ZnVuY3Rpb24oRCxIKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIER8fG51bGw9PT1EKXJldHVybiBEO3ZhciBOPURbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1OKXt2YXIgZz1OLmNhbGwoRCwic3RyaW5nIik7aWYoIm9iamVjdCIhPXR5cGVvZiBnKXJldHVybiBnO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVz''@;'; put 'put ''dCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhEKX0odWUpKT9iOlN0cmluZyhiKSlpbiBoZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoaGUsdWUse3ZhbHVlOmNlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6aGVbdWVdPWNlLGhl''@;'; put 'put ''O3ZhciBifXZhciBrPVIoODYxMCksRT1TeW1ib2woImxhc3RSZXNvbHZlIiksaj1TeW1ib2woImxhc3RSZWplY3QiKSxWPVN5bWJvbCgiZXJyb3IiKSxCPVN5bWJvbCgiZW5kZWQiKSxZPVN5bWJvbCgibGFzdFByb21pc2UiKSxYPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLFU9U3ltYm9sKCJz''@;'; put 'put ''dHJlYW0iKTtmdW5jdGlvbiBxKGhlLHVlKXtyZXR1cm57dmFsdWU6aGUsZG9uZTp1ZX19ZnVuY3Rpb24gZWUoaGUpe3ZhciB1ZT1oZVtFXTtpZihudWxsIT09dWUpe3ZhciBjZT1oZVtVXS5yZWFkKCk7bnVsbCE9PWNlJiYoaGVbWV09bnVsbCxoZVtFXT1udWxsLGhlW2pdPW51bGwsdWUocShj''@;'; put 'put ''ZSwhMSkpKX19ZnVuY3Rpb24gdGUoaGUpe0submV4dFRpY2soZWUsaGUpfXZhciBvZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24oKXt9KSxzZT1PYmplY3Quc2V0UHJvdG90eXBlT2YoKEkoej17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW1VdfSxuZXh0OmZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IGhlPXRoaXMsdWU9dGhpc1tWXTtpZihudWxsIT09dWUpcmV0dXJuIFByb21pc2UucmVqZWN0KHVlKTtpZih0aGlzW0JdKXJldHVybiBQcm9taXNlLnJlc29sdmUocSh2b2lkIDAsITApKTtpZih0aGlzW1VdLmRlc3Ryb3llZClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oRCxIKXtLLm5l''@;'; put 'put ''eHRUaWNrKGZ1bmN0aW9uKCl7aGVbVl0/SChoZVtWXSk6RChxKHZvaWQgMCwhMCkpfSl9KTt2YXIgY2UsRCxILEc9dGhpc1tZXTtpZihHKWNlPW5ldyBQcm9taXNlKChEPUcsSD10aGlzLGZ1bmN0aW9uKE4sZyl7RC50aGVuKGZ1bmN0aW9uKCl7SFtCXT9OKHEodm9pZCAwLCEwKSk6SFtYXShO''@;'; put 'put ''LGcpfSxnKX0pKTtlbHNle3ZhciBiPXRoaXNbVV0ucmVhZCgpO2lmKG51bGwhPT1iKXJldHVybiBQcm9taXNlLnJlc29sdmUocShiLCExKSk7Y2U9bmV3IFByb21pc2UodGhpc1tYXSl9cmV0dXJuIHRoaXNbWV09Y2UsY2V9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzfSksSSh6LCJyZXR1cm4iLGZ1bmN0aW9uKCl7dmFyIGhlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHVlLGNlKXtoZVtVXS5kZXN0cm95KG51bGwsZnVuY3Rpb24oRyl7Rz9jZShHKTp1ZShxKHZvaWQgMCwhMCkpfSl9KX0pLHopLG9lKTtNLmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24oaGUpe3ZhciB1ZSxjZT1PYmplY3QuY3JlYXRlKHNlLChJKHVlPXt9LFUse3ZhbHVlOmhlLHdyaXRhYmxlOiEwfSksSSh1ZSxFLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksSSh1ZSxqLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksSSh1ZSxWLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEw''@;'; put 'put ''fSksSSh1ZSxCLHt2YWx1ZTpoZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksSSh1ZSxYLHt2YWx1ZTpmdW5jdGlvbihHLGIpe3ZhciBEPWNlW1VdLnJlYWQoKTtEPyhjZVtZXT1udWxsLGNlW0VdPW51bGwsY2Vbal09bnVsbCxHKHEoRCwhMSkpKTooY2VbRV09Ryxj''@;'; put 'put ''ZVtqXT1iKX0sd3JpdGFibGU6ITB9KSx1ZSkpO3JldHVybiBjZVtZXT1udWxsLGsoaGUsZnVuY3Rpb24oRyl7aWYoRyYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PUcuY29kZSl7dmFyIGI9Y2Vbal07cmV0dXJuIG51bGwhPT1iJiYoY2VbWV09bnVsbCxjZVtFXT1udWxsLGNlW2pd''@;'; put 'put ''PW51bGwsYihHKSksdm9pZChjZVtWXT1HKX12YXIgRD1jZVtFXTtudWxsIT09RCYmKGNlW1ldPW51bGwsY2VbRV09bnVsbCxjZVtqXT1udWxsLEQocSh2b2lkIDAsITApKSksY2VbQl09ITB9KSxoZS5vbigicmVhZGFibGUiLHRlLmJpbmQobnVsbCxjZSkpLGNlfX0sNzMyNzooTSxPLFIpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooWSxYKXt2YXIgVT1PYmplY3Qua2V5cyhZKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKFkpO1gmJihxPXEuZmlsdGVyKGZ1bmN0aW9uKGVlKXtyZXR1cm4gT2JqZWN0Lmdl''@;'; put 'put ''dE93blByb3BlcnR5RGVzY3JpcHRvcihZLGVlKS5lbnVtZXJhYmxlfSkpLFUucHVzaC5hcHBseShVLHEpfXJldHVybiBVfWZ1bmN0aW9uIEsoWSl7Zm9yKHZhciBYPTE7WDxhcmd1bWVudHMubGVuZ3RoO1grKyl7dmFyIFU9bnVsbCE9YXJndW1lbnRzW1hdP2FyZ3VtZW50c1tYXTp7fTtYJTI/''@;'; put 'put ''eihPYmplY3QoVSksITApLmZvckVhY2goZnVuY3Rpb24ocSl7SShZLHEsVVtxXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhZLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKFUpKTp6KE9iamVjdChVKSkuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihxKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxxLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVSxxKSl9KX1yZXR1cm4gWX1mdW5jdGlvbiBJKFksWCxVKXtyZXR1cm4oWD1FKFgpKWluIFk/T2JqZWN0LmRlZmluZVByb3BlcnR5KFksWCx7dmFsdWU6VSxlbnVt''@;'; put 'put ''ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOllbWF09VSxZfWZ1bmN0aW9uIEUoWSl7dmFyIFg9ZnVuY3Rpb24oVSxxKXtpZigib2JqZWN0IiE9dHlwZW9mIFV8fG51bGw9PT1VKXJldHVybiBVO3ZhciBlZT1VW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09''@;'; put 'put ''ZWUpe3ZhciB0ZT1lZS5jYWxsKFUsInN0cmluZyIpO2lmKCJvYmplY3QiIT10eXBlb2YgdGUpcmV0dXJuIHRlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuIFN0cmluZyhVKX0oWSk7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBYP1g6U3RyaW5nKFgpfXZhciBqPVIoODc2NCkuQnVmZmVyLFY9UigyMzYxKS5pbnNwZWN0LEI9ViYmVi5jdXN0b218fCJpbnNwZWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBZKCl7KGZ1bmN0aW9uKGVlLHRlKXtpZighKGVlIGluc3RhbmNlb2YgdGUpKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxZKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXZhciBYLFU7cmV0dXJuIFg9WSwoVT1be2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3Zh''@;'; put 'put ''ciB0ZT17ZGF0YTplZSxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9dGU6dGhpcy5oZWFkPXRlLHRoaXMudGFpbD10ZSwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciB0ZT17ZGF0YTplZSxuZXh0OnRoaXMuaGVhZH07''@;'; put 'put ''MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPXRlKSx0aGlzLmhlYWQ9dGUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGVlPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3Ro''@;'; put 'put ''P3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZWV9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMu''@;'; put 'put ''bGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgdGU9dGhpcy5oZWFkLG9lPSIiK3RlLmRhdGE7dGU9dGUubmV4dDspb2UrPWVlK3RlLmRhdGE7cmV0dXJuIG9lfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBqLmFsbG9jKDApO2Zvcih2''@;'; put 'put ''YXIgaGU9ai5hbGxvY1Vuc2FmZShlZT4+PjApLHVlPXRoaXMuaGVhZCxjZT0wO3VlOylqLnByb3RvdHlwZS5jb3B5LmNhbGwodWUuZGF0YSxoZSxjZSksY2UrPXVlLmRhdGEubGVuZ3RoLHVlPXVlLm5leHQ7cmV0dXJuIGhlfX0se2tleToiY29uc3VtZSIsdmFsdWU6ZnVuY3Rpb24oZWUsdGUp''@;'; put 'put ''e3ZhciBvZTtyZXR1cm4gZWU8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhvZT10aGlzLmhlYWQuZGF0YS5zbGljZSgwLGVlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlZSkpOm9lPWVlPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTp0ZT90aGlzLl9n''@;'; put 'put ''ZXRTdHJpbmcoZWUpOnRoaXMuX2dldEJ1ZmZlcihlZSksb2V9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIHRlPXRoaXMuaGVhZCxvZT0xLHNlPXRlLmRhdGE7Zm9y''@;'; put 'put ''KGVlLT1zZS5sZW5ndGg7dGU9dGUubmV4dDspe3ZhciBoZT10ZS5kYXRhLHVlPWVlPmhlLmxlbmd0aD9oZS5sZW5ndGg6ZWU7aWYoc2UrPXVlPT09aGUubGVuZ3RoP2hlOmhlLnNsaWNlKDAsZWUpLDA9PShlZS09dWUpKXt1ZT09PWhlLmxlbmd0aD8oKytvZSx0aGlzLmhlYWQ9dGUubmV4dD90''@;'; put 'put ''ZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXRlLHRlLmRhdGE9aGUuc2xpY2UodWUpKTticmVha30rK29lfXJldHVybiB0aGlzLmxlbmd0aC09b2Usc2V9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIHRlPWouYWxsb2NVbnNhZmUoZWUpLG9lPXRo''@;'; put 'put ''aXMuaGVhZCxzZT0xO2ZvcihvZS5kYXRhLmNvcHkodGUpLGVlLT1vZS5kYXRhLmxlbmd0aDtvZT1vZS5uZXh0Oyl7dmFyIGhlPW9lLmRhdGEsdWU9ZWU+aGUubGVuZ3RoP2hlLmxlbmd0aDplZTtpZihoZS5jb3B5KHRlLHRlLmxlbmd0aC1lZSwwLHVlKSwwPT0oZWUtPXVlKSl7dWU9PT1oZS5s''@;'; put 'put ''ZW5ndGg/KCsrc2UsdGhpcy5oZWFkPW9lLm5leHQ/b2UubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1vZSxvZS5kYXRhPWhlLnNsaWNlKHVlKSk7YnJlYWt9KytzZX1yZXR1cm4gdGhpcy5sZW5ndGgtPXNlLHRlfX0se2tleTpCLHZhbHVlOmZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4g''@;'; put 'put ''Vih0aGlzLEsoSyh7fSx0ZSkse30se2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSkmJmZ1bmN0aW9uIGsoWSxYKXtmb3IodmFyIFU9MDtVPFgubGVuZ3RoO1UrKyl7dmFyIHE9WFtVXTtxLmVudW1lcmFibGU9cS5lbnVtZXJhYmxlfHwhMSxxLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUi''@;'; put 'put ''aW4gcSYmKHEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLEUocS5rZXkpLHEpfX0oWC5wcm90b3R5cGUsVSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksWX0oKX0sMTE5NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6''@;'; put 'put ''PVIoNDE1NSk7ZnVuY3Rpb24gSyhFLGope2soRSxqKSxJKEUpfWZ1bmN0aW9uIEkoRSl7RS5fd3JpdGFibGVTdGF0ZSYmIUUuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxFLl9yZWFkYWJsZVN0YXRlJiYhRS5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fEUuZW1pdCgiY2xvc2UiKX1mdW5j''@;'; put 'put ''dGlvbiBrKEUsail7RS5lbWl0KCJlcnJvciIsail9TS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uKEUsail7dmFyIFY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRh''@;'; put 'put ''YmxlU3RhdGUuZGVzdHJveWVkPyhqP2ooRSk6RSYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx6Lm5leHRUaWNrKGssdGhpcyxFKSk6ei5uZXh0VGljayhrLHRoaXMsRSkp''@;'; put 'put ''LHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShFfHxudWxsLGZ1bmN0aW9uKFgpeyFqJiZYP1YuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGU/Vi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/ei5uZXh0VGljayhJLFYpOihWLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx6Lm5leHRUaWNrKEssVixYKSk6ei5uZXh0VGljayhLLFYsWCk6aj8oei5uZXh0VGljayhJLFYpLGooWCkpOnoubmV4dFRpY2so''@;'; put 'put ''SSxWKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVk''@;'; put 'put ''PSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uKEUsail7dmFyIFY9RS5fcmVhZGFibGVTdGF0ZSxCPUUu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGU7ViYmVi5hdXRvRGVzdHJveXx8QiYmQi5hdXRvRGVzdHJveT9FLmRlc3Ryb3koaik6RS5lbWl0KCJlcnJvciIsail9fX0sODYxMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI4MSkucS5FUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTtmdW5jdGlvbiBL''@;'; put 'put ''KCl7fU0uZXhwb3J0cz1mdW5jdGlvbiBJKGssRSxqKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRSlyZXR1cm4gSShrLG51bGwsRSk7dmFyIGhlLHVlO0V8fChFPXt9KSxoZT1qfHxLLHVlPSExLGo9ZnVuY3Rpb24oKXtpZighdWUpe3VlPSEwO2Zvcih2YXIgY2U9YXJndW1lbnRzLmxlbmd0aCxH''@;'; put 'put ''PW5ldyBBcnJheShjZSksYj0wO2I8Y2U7YisrKUdbYl09YXJndW1lbnRzW2JdO2hlLmFwcGx5KHRoaXMsRyl9fTt2YXIgVj1FLnJlYWRhYmxlfHwhMSE9PUUucmVhZGFibGUmJmsucmVhZGFibGUsQj1FLndyaXRhYmxlfHwhMSE9PUUud3JpdGFibGUmJmsud3JpdGFibGUsWT1mdW5jdGlvbigp''@;'; put 'put ''e2sud3JpdGFibGV8fFUoKX0sWD1rLl93cml0YWJsZVN0YXRlJiZrLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLFU9ZnVuY3Rpb24oKXtCPSExLFg9ITAsVnx8ai5jYWxsKGspfSxxPWsuX3JlYWRhYmxlU3RhdGUmJmsuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxlZT1mdW5jdGlvbigpe1Y9''@;'; put 'put ''ITEscT0hMCxCfHxqLmNhbGwoayl9LHRlPWZ1bmN0aW9uKGhlKXtqLmNhbGwoayxoZSl9LG9lPWZ1bmN0aW9uKCl7dmFyIGhlO3JldHVybiBWJiYhcT8oay5fcmVhZGFibGVTdGF0ZSYmay5fcmVhZGFibGVTdGF0ZS5lbmRlZHx8KGhlPW5ldyB6KSxqLmNhbGwoayxoZSkpOkImJiFYPyhrLl93''@;'; put 'put ''cml0YWJsZVN0YXRlJiZrLl93cml0YWJsZVN0YXRlLmVuZGVkfHwoaGU9bmV3IHopLGouY2FsbChrLGhlKSk6dm9pZCAwfSxzZT1mdW5jdGlvbigpe2sucmVxLm9uKCJmaW5pc2giLFUpfTtyZXR1cm4gZnVuY3Rpb24oaGUpe3JldHVybiBoZS5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBoZS5hYm9ydH0oayk/KGsub24oImNvbXBsZXRlIixVKSxrLm9uKCJhYm9ydCIsb2UpLGsucmVxP3NlKCk6ay5vbigicmVxdWVzdCIsc2UpKTpCJiYhay5fd3JpdGFibGVTdGF0ZSYmKGsub24oImVuZCIsWSksay5vbigiY2xvc2UiLFkpKSxrLm9uKCJlbmQiLGVlKSxrLm9uKCJmaW5pc2gi''@;'; put 'put ''LFUpLCExIT09RS5lcnJvciYmay5vbigiZXJyb3IiLHRlKSxrLm9uKCJjbG9zZSIsb2UpLGZ1bmN0aW9uKCl7ay5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLFUpLGsucmVtb3ZlTGlzdGVuZXIoImFib3J0IixvZSksay5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsc2UpLGsucmVxJiZrLnJl''@;'; put 'put ''cS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVKSxrLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFkpLGsucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixZKSxrLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFUpLGsucmVtb3ZlTGlzdGVuZXIoImVuZCIsZWUpLGsucmVtb3ZlTGlzdGVuZXIoImVycm9yIix0''@;'; put 'put ''ZSksay5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLG9lKX19fSw1MTY3Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sOTk0NjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6''@;'; put 'put ''LEs9Uig0MjgxKS5xLEk9Sy5FUlJfTUlTU0lOR19BUkdTLGs9Sy5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBFKEIpe2lmKEIpdGhyb3cgQn1mdW5jdGlvbiBqKEIpe0IoKX1mdW5jdGlvbiBWKEIsWSl7cmV0dXJuIEIucGlwZShZKX1NLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IEI9YXJndW1lbnRzLmxlbmd0aCxZPW5ldyBBcnJheShCKSxYPTA7WDxCO1grKylZW1hdPWFyZ3VtZW50c1tYXTt2YXIgVSx0ZSxxPSh0ZT1ZKS5sZW5ndGg/ImZ1bmN0aW9uIiE9dHlwZW9mIHRlW3RlLmxlbmd0aC0xXT9FOnRlLnBvcCgpOkU7aWYoQXJyYXkuaXNBcnJheShZWzBdKSYmKFk9''@;'; put 'put ''WVswXSksWS5sZW5ndGg8Mil0aHJvdyBuZXcgSSgic3RyZWFtcyIpO3ZhciBlZT1ZLm1hcChmdW5jdGlvbih0ZSxvZSl7dmFyIHNlPW9lPFkubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGhlLHVlLGNlLEcpe3ZhciBILE47SD1HLE49ITEsRz1mdW5jdGlvbigpe058fChOPSEwLEguYXBwbHko''@;'; put 'put ''dm9pZCAwLGFyZ3VtZW50cykpfTt2YXIgYj0hMTtoZS5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7Yj0hMH0pLHZvaWQgMD09PXomJih6PVIoODYxMCkpLHooaGUse3JlYWRhYmxlOnVlLHdyaXRhYmxlOmNlfSxmdW5jdGlvbihIKXtpZihIKXJldHVybiBHKEgpO2I9ITAsRygpfSk7dmFyIEQ9ITE7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKEgpe2lmKCFiJiYhRClyZXR1cm4gRD0hMCxmdW5jdGlvbihOKXtyZXR1cm4gTi5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBOLmFib3J0fShoZSk/aGUuYWJvcnQoKToiZnVuY3Rpb24iPT10eXBlb2YgaGUuZGVzdHJveT9oZS5kZXN0cm95KCk6dm9pZCBH''@;'; put 'put ''KEh8fG5ldyBrKCJwaXBlIikpfX0odGUsc2Usb2U+MCxmdW5jdGlvbihoZSl7VXx8KFU9aGUpLGhlJiZlZS5mb3JFYWNoKGopLHNlfHwoZWUuZm9yRWFjaChqKSxxKFUpKX0pfSk7cmV0dXJuIFkucmVkdWNlKFYpfX0sMjQ1NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI4MSku''@;'; put 'put ''cS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7TS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uKEssSSxrLEUpe3ZhciBWLGo9bnVsbCE9KFY9SSkuaGlnaFdhdGVyTWFyaz9WLmhpZ2hXYXRlck1hcms6RT9WW2tdOm51bGw7aWYobnVsbCE9ail7aWYoIWlzRmluaXRlKGopfHxNYXRo''@;'; put 'put ''LmZsb29yKGopIT09anx8ajwwKXRocm93IG5ldyB6KEU/azoiaGlnaFdhdGVyTWFyayIsaik7cmV0dXJuIE1hdGguZmxvb3Ioail9cmV0dXJuIEsub2JqZWN0TW9kZT8xNjoxNjM4NH19fSwyNTAzOihNLE8sUik9PntNLmV4cG9ydHM9Uig3MTg3KS5FdmVudEVtaXR0ZXJ9LDg0NzM6KE0sTyxS''@;'; put 'put ''KT0+eyhPPU0uZXhwb3J0cz1SKDk0ODEpKS5TdHJlYW09TyxPLlJlYWRhYmxlPU8sTy5Xcml0YWJsZT1SKDQyMjkpLE8uRHVwbGV4PVIoNjc1MyksTy5UcmFuc2Zvcm09Uig0NjA1KSxPLlBhc3NUaHJvdWdoPVIoMjcyNSksTy5maW5pc2hlZD1SKDg2MTApLE8ucGlwZWxpbmU9Uig5OTQ2KX0s''@;'; put 'put ''NzQxODpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPLFIpe2lmKFI9Ui5zcGxpdCgiOiIpWzBdLCEoTz0rTykpcmV0dXJuITE7c3dpdGNoKFIpe2Nhc2UiaHR0cCI6Y2FzZSJ3cyI6cmV0dXJuIDgwIT09TztjYXNlImh0dHBzIjpjYXNlIndzcyI6cmV0dXJuIDQ0MyE9PU87''@;'; put 'put ''Y2FzZSJmdHAiOnJldHVybiAyMSE9PU87Y2FzZSJnb3BoZXIiOnJldHVybiA3MCE9PU87Y2FzZSJmaWxlIjpyZXR1cm4hMX1yZXR1cm4gMCE9PU99fSw5ODQ6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSk7Y29uc3QgSz1SKDkyODIpLEk9UigyNTIwKSxrPVIoNzIxNyk7bGV0IEU7dHJ5e0U9Uigy''@;'; put 'put ''ODg0KX1jYXRjaHt9Y29uc3Qgaj17bm9zb3J0OiEwLHNpbGVudDohMH07bGV0IFY9MDtjb25zdCBCPSJ3aW4zMiI9PT16LnBsYXRmb3JtLFk9Y2U9PntpZihbInVubGluayIsImNobW9kIiwic3RhdCIsImxzdGF0Iiwicm1kaXIiLCJyZWFkZGlyIl0uZm9yRWFjaChHPT57Y2VbR109Y2VbR118''@;'; put 'put ''fGtbR10sY2VbRys9IlN5bmMiXT1jZVtHXXx8a1tHXX0pLGNlLm1heEJ1c3lUcmllcz1jZS5tYXhCdXN5VHJpZXN8fDMsY2UuZW1maWxlV2FpdD1jZS5lbWZpbGVXYWl0fHwxZTMsITE9PT1jZS5nbG9iJiYoY2UuZGlzYWJsZUdsb2I9ITApLCEwIT09Y2UuZGlzYWJsZUdsb2ImJnZvaWQgMD09''@;'; put 'put ''PUUpdGhyb3cgRXJyb3IoImdsb2IgZGVwZW5kZW5jeSBub3QgZm91bmQsIHNldCBgb3B0aW9ucy5kaXNhYmxlR2xvYiA9IHRydWVgIGlmIGludGVudGlvbmFsIik7Y2UuZGlzYWJsZUdsb2I9Y2UuZGlzYWJsZUdsb2J8fCExLGNlLmdsb2I9Y2UuZ2xvYnx8an0sWD0oY2UsRyxiKT0+eyJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBHJiYoYj1HLEc9e30pLEsoY2UsInJpbXJhZjogbWlzc2luZyBwYXRoIiksSy5lcXVhbCh0eXBlb2YgY2UsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmciKSxLLmVxdWFsKHR5cGVvZiBiLCJmdW5jdGlvbiIsInJpbXJhZjogY2FsbGJhY2sg''@;'; put 'put ''ZnVuY3Rpb24gcmVxdWlyZWQiKSxLKEcsInJpbXJhZjogaW52YWxpZCBvcHRpb25zIGFyZ3VtZW50IHByb3ZpZGVkIiksSy5lcXVhbCh0eXBlb2YgRywib2JqZWN0IiwicmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QiKSxZKEcpO2xldCBEPTAsSD1udWxsLE49MDtjb25zdCBnPShD''@;'; put 'put ''LFMpPT5DP2IoQyk6KE49Uy5sZW5ndGgsMD09PU4/YigpOnZvaWQgUy5mb3JFYWNoKHY9Pntjb25zdCBwPXc9PntpZih3KXtpZigoIkVCVVNZIj09PXcuY29kZXx8IkVOT1RFTVBUWSI9PT13LmNvZGV8fCJFUEVSTSI9PT13LmNvZGUpJiZEPEcubWF4QnVzeVRyaWVzKXJldHVybiBEKyssc2V0''@;'; put 'put ''VGltZW91dCgoKT0+VSh2LEcscCksMTAwKkQpO2lmKCJFTUZJTEUiPT09dy5jb2RlJiZWPEcuZW1maWxlV2FpdClyZXR1cm4gc2V0VGltZW91dCgoKT0+VSh2LEcscCksVisrKTsiRU5PRU5UIj09PXcuY29kZSYmKHc9bnVsbCl9Vj0wLEg9SHx8dywwPT0tLU4mJmIoSCl9O1UodixHLHApfSkp''@;'; put 'put ''O2lmKEcuZGlzYWJsZUdsb2J8fCFFLmhhc01hZ2ljKGNlKSlyZXR1cm4gZyhudWxsLFtjZV0pO0cubHN0YXQoY2UsKEMsUyk9PntpZighQylyZXR1cm4gZyhudWxsLFtjZV0pO0UoY2UsRy5nbG9iLGcpfSl9LFU9KGNlLEcsYik9PntLKGNlKSxLKEcpLEsoImZ1bmN0aW9uIj09dHlwZW9mIGIp''@;'; put 'put ''LEcubHN0YXQoY2UsKEQsSCk9PkQmJiJFTk9FTlQiPT09RC5jb2RlP2IobnVsbCk6KEQmJiJFUEVSTSI9PT1ELmNvZGUmJkImJnEoY2UsRyxELGIpLEgmJkguaXNEaXJlY3RvcnkoKT90ZShjZSxHLEQsYik6dm9pZCBHLnVubGluayhjZSxOPT57aWYoTil7aWYoIkVOT0VOVCI9PT1OLmNvZGUp''@;'; put 'put ''cmV0dXJuIGIobnVsbCk7aWYoIkVQRVJNIj09PU4uY29kZSlyZXR1cm4gQj9xKGNlLEcsTixiKTp0ZShjZSxHLE4sYik7aWYoIkVJU0RJUiI9PT1OLmNvZGUpcmV0dXJuIHRlKGNlLEcsTixiKX1yZXR1cm4gYihOKX0pKSl9LHE9KGNlLEcsYixEKT0+e0soY2UpLEsoRyksSygiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgRCksRy5jaG1vZChjZSw0MzgsSD0+e0g/RCgiRU5PRU5UIj09PUguY29kZT9udWxsOmIpOkcuc3RhdChjZSwoTixnKT0+e04/RCgiRU5PRU5UIj09PU4uY29kZT9udWxsOmIpOmcuaXNEaXJlY3RvcnkoKT90ZShjZSxHLGIsRCk6Ry51bmxpbmsoY2UsRCl9KX0pfSxlZT0oY2Us''@;'; put 'put ''RyxiKT0+e0soY2UpLEsoRyk7dHJ5e0cuY2htb2RTeW5jKGNlLDQzOCl9Y2F0Y2goSCl7aWYoIkVOT0VOVCI9PT1ILmNvZGUpcmV0dXJuO3Rocm93IGJ9bGV0IEQ7dHJ5e0Q9Ry5zdGF0U3luYyhjZSl9Y2F0Y2goSCl7aWYoIkVOT0VOVCI9PT1ILmNvZGUpcmV0dXJuO3Rocm93IGJ9RC5pc0Rp''@;'; put 'put ''cmVjdG9yeSgpP2hlKGNlLEcsYik6Ry51bmxpbmtTeW5jKGNlKX0sdGU9KGNlLEcsYixEKT0+e0soY2UpLEsoRyksSygiZnVuY3Rpb24iPT10eXBlb2YgRCksRy5ybWRpcihjZSxIPT57IUh8fCJFTk9URU1QVFkiIT09SC5jb2RlJiYiRUVYSVNUIiE9PUguY29kZSYmIkVQRVJNIiE9PUguY29k''@;'; put 'put ''ZT9EKEgmJiJFTk9URElSIj09PUguY29kZT9iOkgpOm9lKGNlLEcsRCl9KX0sb2U9KGNlLEcsYik9PntLKGNlKSxLKEcpLEsoImZ1bmN0aW9uIj09dHlwZW9mIGIpLEcucmVhZGRpcihjZSwoRCxIKT0+e2lmKEQpcmV0dXJuIGIoRCk7bGV0IE4sZz1ILmxlbmd0aDtpZigwPT09ZylyZXR1cm4g''@;'; put 'put ''Ry5ybWRpcihjZSxiKTtILmZvckVhY2goQz0+e1goSS5qb2luKGNlLEMpLEcsUz0+e2lmKCFOKXJldHVybiBTP2IoTj1TKTp2b2lkKDA9PS0tZyYmRy5ybWRpcihjZSxiKSl9KX0pfSl9LHNlPShjZSxHKT0+e2xldCBiO2lmKFkoRz1HfHx7fSksSyhjZSwicmltcmFmOiBtaXNzaW5nIHBhdGgi''@;'; put 'put ''KSxLLmVxdWFsKHR5cGVvZiBjZSwic3RyaW5nIiwicmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZyIpLEsoRywicmltcmFmOiBtaXNzaW5nIG9wdGlvbnMiKSxLLmVxdWFsKHR5cGVvZiBHLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCIpLEcuZGlzYWJs''@;'; put 'put ''ZUdsb2J8fCFFLmhhc01hZ2ljKGNlKSliPVtjZV07ZWxzZSB0cnl7Ry5sc3RhdFN5bmMoY2UpLGI9W2NlXX1jYXRjaHtiPUUuc3luYyhjZSxHLmdsb2IpfWlmKGIubGVuZ3RoKWZvcihsZXQgRD0wO0Q8Yi5sZW5ndGg7RCsrKXtjb25zdCBIPWJbRF07bGV0IE47dHJ5e049Ry5sc3RhdFN5bmMo''@;'; put 'put ''SCl9Y2F0Y2goZyl7aWYoIkVOT0VOVCI9PT1nLmNvZGUpcmV0dXJuOyJFUEVSTSI9PT1nLmNvZGUmJkImJmVlKEgsRyxnKX10cnl7TiYmTi5pc0RpcmVjdG9yeSgpP2hlKEgsRyxudWxsKTpHLnVubGlua1N5bmMoSCl9Y2F0Y2goZyl7aWYoIkVOT0VOVCI9PT1nLmNvZGUpcmV0dXJuO2lmKCJF''@;'; put 'put ''UEVSTSI9PT1nLmNvZGUpcmV0dXJuIEI/ZWUoSCxHLGcpOmhlKEgsRyxnKTtpZigiRUlTRElSIiE9PWcuY29kZSl0aHJvdyBnO2hlKEgsRyxnKX19fSxoZT0oY2UsRyxiKT0+e0soY2UpLEsoRyk7dHJ5e0cucm1kaXJTeW5jKGNlKX1jYXRjaChEKXtpZigiRU5PRU5UIj09PUQuY29kZSlyZXR1''@;'; put 'put ''cm47aWYoIkVOT1RESVIiPT09RC5jb2RlKXRocm93IGI7IkVOT1RFTVBUWSIhPT1ELmNvZGUmJiJFRVhJU1QiIT09RC5jb2RlJiYiRVBFUk0iIT09RC5jb2RlfHx1ZShjZSxHKX19LHVlPShjZSxHKT0+e0soY2UpLEsoRyksRy5yZWFkZGlyU3luYyhjZSkuZm9yRWFjaChIPT5zZShJLmpvaW4o''@;'; put 'put ''Y2UsSCksRykpO2NvbnN0IGI9Qj8xMDA6MTtsZXQgRD0wO2Zvcig7Oyl7bGV0IEg9ITA7dHJ5e2NvbnN0IE49Ry5ybWRpclN5bmMoY2UsRyk7cmV0dXJuIEg9ITEsTn1maW5hbGx5e2lmKCsrRDxiJiZIKWNvbnRpbnVlfX19O00uZXhwb3J0cz1YLFguc3luYz1zZX0sOTc4NTooTSxPLFIpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9Uig1NzE3KSxJPVIoMzM0OSksaz1uZXcgQXJyYXkoMTYpLEU9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4''@;'; put 'put ''LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10saj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUs''@;'; put 'put ''OCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxWPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYs''@;'; put 'put ''Nyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2''@;'; put 'put ''XSxCPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgs''@;'; put 'put ''OCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSxZPVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLFg9WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQyMTcsMF07ZnVuY3Rpb24gVSgpe0kuY2FsbCh0aGlz''@;'; put 'put ''LDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9ZnVuY3Rpb24gcSh1ZSxjZSl7cmV0dXJuIHVlPDxjZXx1ZT4+PjMyLWNlfWZ1bmN0aW9uIGVlKHVlLGNlLEcsYixE''@;'; put 'put ''LEgsTixnKXtyZXR1cm4gcSh1ZSsoY2VeR15iKStIK058MCxnKStEfDB9ZnVuY3Rpb24gdGUodWUsY2UsRyxiLEQsSCxOLGcpe3JldHVybiBxKHVlKyhjZSZHfH5jZSZiKStIK058MCxnKStEfDB9ZnVuY3Rpb24gb2UodWUsY2UsRyxiLEQsSCxOLGcpe3JldHVybiBxKHVlKygoY2V8fkcpXmIp''@;'; put 'put ''K0grTnwwLGcpK0R8MH1mdW5jdGlvbiBzZSh1ZSxjZSxHLGIsRCxILE4sZyl7cmV0dXJuIHEodWUrKGNlJmJ8RyZ+YikrSCtOfDAsZykrRHwwfWZ1bmN0aW9uIGhlKHVlLGNlLEcsYixELEgsTixnKXtyZXR1cm4gcSh1ZSsoY2VeKEd8fmIpKStIK058MCxnKStEfDB9SyhVLEkpLFUucHJvdG90''@;'; put 'put ''eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIHVlPWssY2U9MDtjZTwxNjsrK2NlKXVlW2NlXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KmNlKTtmb3IodmFyIEc9MHx0aGlzLl9hLGI9MHx0aGlzLl9iLEQ9MHx0aGlzLl9jLEg9MHx0aGlzLl9kLE49MHx0aGlzLl9lLGc9MHx0aGlz''@;'; put 'put ''Ll9hLEM9MHx0aGlzLl9iLFM9MHx0aGlzLl9jLHY9MHx0aGlzLl9kLHA9MHx0aGlzLl9lLHc9MDt3PDgwO3crPTEpe3ZhciBKLG5lO3c8MTY/KEo9ZWUoRyxiLEQsSCxOLHVlW0Vbd11dLFlbMF0sVlt3XSksbmU9aGUoZyxDLFMsdixwLHVlW2pbd11dLFhbMF0sQlt3XSkpOnc8MzI/KEo9dGUo''@;'; put 'put ''RyxiLEQsSCxOLHVlW0Vbd11dLFlbMV0sVlt3XSksbmU9c2UoZyxDLFMsdixwLHVlW2pbd11dLFhbMV0sQlt3XSkpOnc8NDg/KEo9b2UoRyxiLEQsSCxOLHVlW0Vbd11dLFlbMl0sVlt3XSksbmU9b2UoZyxDLFMsdixwLHVlW2pbd11dLFhbMl0sQlt3XSkpOnc8NjQ/KEo9c2UoRyxiLEQsSCxO''@;'; put 'put ''LHVlW0Vbd11dLFlbM10sVlt3XSksbmU9dGUoZyxDLFMsdixwLHVlW2pbd11dLFhbM10sQlt3XSkpOihKPWhlKEcsYixELEgsTix1ZVtFW3ddXSxZWzRdLFZbd10pLG5lPWVlKGcsQyxTLHYscCx1ZVtqW3ddXSxYWzRdLEJbd10pKSxHPU4sTj1ILEg9cShELDEwKSxEPWIsYj1KLGc9cCxwPXYs''@;'; put 'put ''dj1xKFMsMTApLFM9QyxDPW5lfXZhciBkZT10aGlzLl9iK0QrdnwwO3RoaXMuX2I9dGhpcy5fYytIK3B8MCx0aGlzLl9jPXRoaXMuX2QrTitnfDAsdGhpcy5fZD10aGlzLl9lK0crQ3wwLHRoaXMuX2U9dGhpcy5fYStiK1N8MCx0aGlzLl9hPWRlfSxVLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0''@;'; put 'put ''aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhp''@;'; put 'put ''cy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIHVlPXouYWxsb2M/ei5hbGxvYygyMCk6bmV3IHooMjApO3Jl''@;'; put 'put ''dHVybiB1ZS53cml0ZUludDMyTEUodGhpcy5fYSwwKSx1ZS53cml0ZUludDMyTEUodGhpcy5fYiw0KSx1ZS53cml0ZUludDMyTEUodGhpcy5fYyw4KSx1ZS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksdWUud3JpdGVJbnQzMkxFKHRoaXMuX2UsMTYpLHVlfSxNLmV4cG9ydHM9VX0sOTUwOToo''@;'; put 'put ''TSxPLFIpPT57dmFyIHo9Uig4NzY0KSxLPXouQnVmZmVyO2Z1bmN0aW9uIEkoRSxqKXtmb3IodmFyIFYgaW4gRSlqW1ZdPUVbVl19ZnVuY3Rpb24gayhFLGosVil7cmV0dXJuIEsoRSxqLFYpfUsuZnJvbSYmSy5hbGxvYyYmSy5hbGxvY1Vuc2FmZSYmSy5hbGxvY1Vuc2FmZVNsb3c/TS5leHBv''@;'; put 'put ''cnRzPXo6KEkoeixPKSxPLkJ1ZmZlcj1rKSxrLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEsucHJvdG90eXBlKSxJKEssayksay5mcm9tPWZ1bmN0aW9uKEUsaixWKXtpZigibnVtYmVyIj09dHlwZW9mIEUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1i''@;'; put 'put ''ZXIiKTtyZXR1cm4gSyhFLGosVil9LGsuYWxsb2M9ZnVuY3Rpb24oRSxqLFYpe2lmKCJudW1iZXIiIT10eXBlb2YgRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIEI9SyhFKTtyZXR1cm4gdm9pZCAwIT09aj8ic3RyaW5nIj09dHlwZW9mIFY/''@;'; put 'put ''Qi5maWxsKGosVik6Qi5maWxsKGopOkIuZmlsbCgwKSxCfSxrLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEUpe2lmKCJudW1iZXIiIT10eXBlb2YgRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEsoRSl9LGsuYWxsb2NVbnNhZmVTbG93PWZ1''@;'; put 'put ''bmN0aW9uKEUpe2lmKCJudW1iZXIiIT10eXBlb2YgRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHouU2xvd0J1ZmZlcihFKX19LDIzOTk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVIoNDE1NSksST1SKDg3NjQpLGs9SS5C''@;'; put 'put ''dWZmZXIsRT17fTtmb3IoeiBpbiBJKUkuaGFzT3duUHJvcGVydHkoeikmJiJTbG93QnVmZmVyIiE9PXomJiJCdWZmZXIiIT09eiYmKEVbel09SVt6XSk7dmFyIGo9RS5CdWZmZXI9e307Zm9yKHogaW4gaylrLmhhc093blByb3BlcnR5KHopJiYiYWxsb2NVbnNhZmUiIT09eiYmImFsbG9jVW5z''@;'; put 'put ''YWZlU2xvdyIhPT16JiYoalt6XT1rW3pdKTtpZihFLkJ1ZmZlci5wcm90b3R5cGU9ay5wcm90b3R5cGUsai5mcm9tJiZqLmZyb20hPT1VaW50OEFycmF5LmZyb218fChqLmZyb209ZnVuY3Rpb24oVixCLFkpe2lmKCJudW1iZXIiPT10eXBlb2YgVil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUg''@;'; put 'put ''InZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBWKTtpZihWJiZ2b2lkIDA9PT1WLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1''@;'; put 'put ''ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBWKTtyZXR1cm4gayhWLEIsWSl9KSxqLmFsbG9jfHwoai5hbGxvYz1mdW5jdGlvbihWLEIsWSl7aWYoIm51bWJlciIhPXR5cGVvZiBWKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoJ1RoZSAic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBWKTtpZihWPDB8fFY+PTIxNDc0ODM2NDgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytWKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSIn''@;'; put 'put ''KTt2YXIgWD1rKFYpO3JldHVybiBCJiYwIT09Qi5sZW5ndGg/InN0cmluZyI9PXR5cGVvZiBZP1guZmlsbChCLFkpOlguZmlsbChCKTpYLmZpbGwoMCksWH0pLCFFLmtTdHJpbmdNYXhMZW5ndGgpdHJ5e0Uua1N0cmluZ01heExlbmd0aD1LLmJpbmRpbmcoImJ1ZmZlciIpLmtTdHJpbmdNYXhM''@;'; put 'put ''ZW5ndGh9Y2F0Y2h7fUUuY29uc3RhbnRzfHwoRS5jb25zdGFudHM9e01BWF9MRU5HVEg6RS5rTWF4TGVuZ3RofSxFLmtTdHJpbmdNYXhMZW5ndGgmJihFLmNvbnN0YW50cy5NQVhfU1RSSU5HX0xFTkdUSD1FLmtTdHJpbmdNYXhMZW5ndGgpKSxNLmV4cG9ydHM9RX0sNDE4OTooTSxPLFIpPT57''@;'; put 'put ''dmFyIHo9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSyhJLGspe3RoaXMuX2Jsb2NrPXouYWxsb2MoSSksdGhpcy5fZmluYWxTaXplPWssdGhpcy5fYmxvY2tTaXplPUksdGhpcy5fbGVuPTB9Sy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEksayl7InN0cmluZyI9PXR5cGVvZiBJJiYoST16''@;'; put 'put ''LmZyb20oSSxrPWt8fCJ1dGY4IikpO2Zvcih2YXIgRT10aGlzLl9ibG9jayxqPXRoaXMuX2Jsb2NrU2l6ZSxWPUkubGVuZ3RoLEI9dGhpcy5fbGVuLFk9MDtZPFY7KXtmb3IodmFyIFg9QiVqLFU9TWF0aC5taW4oVi1ZLGotWCkscT0wO3E8VTtxKyspRVtYK3FdPUlbWStxXTtZKz1VLChCKz1V''@;'; put 'put ''KSVqPT0wJiZ0aGlzLl91cGRhdGUoRSl9cmV0dXJuIHRoaXMuX2xlbis9Vix0aGlzfSxLLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oSSl7dmFyIGs9dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1trXT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLGsrMSksaz49dGhpcy5f''@;'; put 'put ''ZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgRT04KnRoaXMuX2xlbjtpZihFPD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoRSx0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgaj0oNDI5NDk2NzI5NSZF''@;'; put 'put ''KT4+PjA7dGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSgoRS1qKS80Mjk0OTY3Mjk2LHRoaXMuX2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKGosdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayk7dmFyIEI9dGhpcy5faGFzaCgpO3JldHVy''@;'; put 'put ''biBJP0IudG9TdHJpbmcoSSk6Qn0sSy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzIil9LE0uZXhwb3J0cz1LfSw5MDcyOihNLE8sUik9Pnt2YXIgej1NLmV4cG9ydHM9ZnVuY3Rpb24o''@;'; put 'put ''Syl7Sz1LLnRvTG93ZXJDYXNlKCk7dmFyIEk9eltLXTtpZighSSl0aHJvdyBuZXcgRXJyb3IoSysiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKSIpO3JldHVybiBuZXcgSX07ei5zaGE9Uig0NDQ4KSx6LnNoYTE9Uig4MzM2KSx6LnNoYTIyND1SKDg0MzIpLHou''@;'; put 'put ''c2hhMjU2PVIoNzQ5OSksei5zaGEzODQ9UigxNjg2KSx6LnNoYTUxMj1SKDc4MTYpfSw0NDQ4OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig0MTg5KSxJPVIoOTUwOSkuQnVmZmVyLGs9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxFPW5ldyBBcnJh''@;'; put 'put ''eSg4MCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxLLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gVihZKXtyZXR1cm4gWTw8MzB8WT4+PjJ9ZnVuY3Rpb24gQihZLFgsVSxxKXtyZXR1cm4gMD09PVk/WCZVfH5YJnE6Mj09PVk/WCZVfFgmcXxVJnE6WF5VXnF9eihqLEsp''@;'; put 'put ''LGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''WSl7Zm9yKHZhciBYLFU9dGhpcy5fdyxxPTB8dGhpcy5fYSxlZT0wfHRoaXMuX2IsdGU9MHx0aGlzLl9jLG9lPTB8dGhpcy5fZCxzZT0wfHRoaXMuX2UsaGU9MDtoZTwxNjsrK2hlKVVbaGVdPVkucmVhZEludDMyQkUoNCpoZSk7Zm9yKDtoZTw4MDsrK2hlKVVbaGVdPVVbaGUtM11eVVtoZS04''@;'; put 'put ''XV5VW2hlLTE0XV5VW2hlLTE2XTtmb3IodmFyIHVlPTA7dWU8ODA7Kyt1ZSl7dmFyIGNlPX5+KHVlLzIwKSxHPTB8KChYPXEpPDw1fFg+Pj4yNykrQihjZSxlZSx0ZSxvZSkrc2UrVVt1ZV0ra1tjZV07c2U9b2Usb2U9dGUsdGU9VihlZSksZWU9cSxxPUd9dGhpcy5fYT1xK3RoaXMuX2F8MCx0''@;'; put 'put ''aGlzLl9iPWVlK3RoaXMuX2J8MCx0aGlzLl9jPXRlK3RoaXMuX2N8MCx0aGlzLl9kPW9lK3RoaXMuX2R8MCx0aGlzLl9lPXNlK3RoaXMuX2V8MH0sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgWT1JLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gWS53cml0ZUludDMyQkUoMHx0aGlz''@;'; put 'put ''Ll9hLDApLFkud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxZLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksWS53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxZLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLFl9LE0uZXhwb3J0cz1qfSw4MzM2OihNLE8sUik9Pnt2YXIgej1SKDU3MTcp''@;'; put 'put ''LEs9Uig0MTg5KSxJPVIoOTUwOSkuQnVmZmVyLGs9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxFPW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxLLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gVihYKXtyZXR1''@;'; put 'put ''cm4gWDw8NXxYPj4+Mjd9ZnVuY3Rpb24gQihYKXtyZXR1cm4gWDw8MzB8WD4+PjJ9ZnVuY3Rpb24gWShYLFUscSxlZSl7cmV0dXJuIDA9PT1YP1UmcXx+VSZlZToyPT09WD9VJnF8VSZlZXxxJmVlOlVecV5lZX16KGosSyksai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihYKXtmb3IodmFyIFUscT10aGlzLl93LGVlPTB8dGhpcy5fYSx0ZT0w''@;'; put 'put ''fHRoaXMuX2Isb2U9MHx0aGlzLl9jLHNlPTB8dGhpcy5fZCxoZT0wfHRoaXMuX2UsdWU9MDt1ZTwxNjsrK3VlKXFbdWVdPVgucmVhZEludDMyQkUoNCp1ZSk7Zm9yKDt1ZTw4MDsrK3VlKXFbdWVdPShVPXFbdWUtM11ecVt1ZS04XV5xW3VlLTE0XV5xW3VlLTE2XSk8PDF8VT4+PjMxO2Zvcih2''@;'; put 'put ''YXIgY2U9MDtjZTw4MDsrK2NlKXt2YXIgRz1+fihjZS8yMCksYj1WKGVlKStZKEcsdGUsb2Usc2UpK2hlK3FbY2VdK2tbR118MDtoZT1zZSxzZT1vZSxvZT1CKHRlKSx0ZT1lZSxlZT1ifXRoaXMuX2E9ZWUrdGhpcy5fYXwwLHRoaXMuX2I9dGUrdGhpcy5fYnwwLHRoaXMuX2M9b2UrdGhpcy5f''@;'; put 'put ''Y3wwLHRoaXMuX2Q9c2UrdGhpcy5fZHwwLHRoaXMuX2U9aGUrdGhpcy5fZXwwfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBYPUkuYWxsb2NVbnNhZmUoMjApO3JldHVybiBYLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksWC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLFgu''@;'; put 'put ''d3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxYLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLFgud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksWH0sTS5leHBvcnRzPWp9LDg0MzI6KE0sTyxSKT0+e3ZhciB6PVIoNTcxNyksSz1SKDc0OTkpLEk9Uig0MTg5KSxrPVIoOTUwOSkuQnVmZmVy''@;'; put 'put ''LEU9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBqKCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEkuY2FsbCh0aGlzLDY0LDU2KX16KGosSyksai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5''@;'; put 'put ''OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBWPWsuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBW''@;'; put 'put ''LndyaXRlSW50MzJCRSh0aGlzLl9hLDApLFYud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksVi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxWLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxWLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxWLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxWLndyaXRl''@;'; put 'put ''SW50MzJCRSh0aGlzLl9nLDI0KSxWfSxNLmV4cG9ydHM9an0sNzQ5OTooTSxPLFIpPT57dmFyIHo9Uig1NzE3KSxLPVIoNDE4OSksST1SKDk1MDkpLkJ1ZmZlcixrPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2''@;'; put 'put ''MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIy''@;'; put 'put ''LDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4''@;'; put 'put ''NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3''@;'; put 'put ''MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLEU9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBqKCl7dGhpcy5pbml0KCks''@;'; put 'put ''dGhpcy5fdz1FLEsuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBWKHEsZWUsdGUpe3JldHVybiB0ZV5xJihlZV50ZSl9ZnVuY3Rpb24gQihxLGVlLHRlKXtyZXR1cm4gcSZlZXx0ZSYocXxlZSl9ZnVuY3Rpb24gWShxKXtyZXR1cm4ocT4+PjJ8cTw8MzApXihxPj4+MTN8cTw8MTkpXihxPj4+''@;'; put 'put ''MjJ8cTw8MTApfWZ1bmN0aW9uIFgocSl7cmV0dXJuKHE+Pj42fHE8PDI2KV4ocT4+PjExfHE8PDIxKV4ocT4+PjI1fHE8PDcpfWZ1bmN0aW9uIFUocSl7cmV0dXJuKHE+Pj43fHE8PDI1KV4ocT4+PjE4fHE8PDE0KV5xPj4+M316KGosSyksai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9hPTE3NzkwMzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sai5w''@;'; put 'put ''cm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihxKXtmb3IodmFyIGVlLHRlPXRoaXMuX3csb2U9MHx0aGlzLl9hLHNlPTB8dGhpcy5fYixoZT0wfHRoaXMuX2MsdWU9MHx0aGlzLl9kLGNlPTB8dGhpcy5fZSxHPTB8dGhpcy5fZixiPTB8dGhpcy5fZyxEPTB8dGhpcy5faCxIPTA7SDwxNjsrK0gp''@;'; put 'put ''dGVbSF09cS5yZWFkSW50MzJCRSg0KkgpO2Zvcig7SDw2NDsrK0gpdGVbSF09MHwoKChlZT10ZVtILTJdKT4+PjE3fGVlPDwxNSleKGVlPj4+MTl8ZWU8PDEzKV5lZT4+PjEwKSt0ZVtILTddK1UodGVbSC0xNV0pK3RlW0gtMTZdO2Zvcih2YXIgTj0wO048NjQ7KytOKXt2YXIgZz1EK1goY2Up''@;'; put 'put ''K1YoY2UsRyxiKStrW05dK3RlW05dfDAsQz1ZKG9lKStCKG9lLHNlLGhlKXwwO0Q9YixiPUcsRz1jZSxjZT11ZStnfDAsdWU9aGUsaGU9c2Usc2U9b2Usb2U9ZytDfDB9dGhpcy5fYT1vZSt0aGlzLl9hfDAsdGhpcy5fYj1zZSt0aGlzLl9ifDAsdGhpcy5fYz1oZSt0aGlzLl9jfDAsdGhpcy5f''@;'; put 'put ''ZD11ZSt0aGlzLl9kfDAsdGhpcy5fZT1jZSt0aGlzLl9lfDAsdGhpcy5fZj1HK3RoaXMuX2Z8MCx0aGlzLl9nPWIrdGhpcy5fZ3wwLHRoaXMuX2g9RCt0aGlzLl9ofDB9LGoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHE9SS5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIHEud3JpdGVJ''@;'; put 'put ''bnQzMkJFKHRoaXMuX2EsMCkscS53cml0ZUludDMyQkUodGhpcy5fYiw0KSxxLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLHEud3JpdGVJbnQzMkJF''@;'; put 'put ''KHRoaXMuX2csMjQpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLHF9LE0uZXhwb3J0cz1qfSwxNjg2OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig3ODE2KSxJPVIoNDE4OSksaz1SKDk1MDkpLkJ1ZmZlcixFPW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIGooKXt0aGlzLmluaXQoKSx0''@;'; put 'put ''aGlzLl93PUUsSS5jYWxsKHRoaXMsMTI4LDExMil9eihqLEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0''@;'; put 'put ''MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0''@;'; put 'put ''aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBWPWsuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIEIoWSxYLFUpe1Yud3JpdGVJbnQzMkJFKFksVSksVi53cml0ZUlu''@;'; put 'put ''dDMyQkUoWCxVKzQpfXJldHVybiBCKHRoaXMuX2FoLHRoaXMuX2FsLDApLEIodGhpcy5fYmgsdGhpcy5fYmwsOCksQih0aGlzLl9jaCx0aGlzLl9jbCwxNiksQih0aGlzLl9kaCx0aGlzLl9kbCwyNCksQih0aGlzLl9laCx0aGlzLl9lbCwzMiksQih0aGlzLl9maCx0aGlzLl9mbCw0MCksVn0s''@;'; put 'put ''TS5leHBvcnRzPWp9LDc4MTY6KE0sTyxSKT0+e3ZhciB6PVIoNTcxNyksSz1SKDQxODkpLEk9Uig5NTA5KS5CdWZmZXIsaz1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3''@;'; put 'put ''MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5''@;'; put 'put ''NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAw''@;'; put 'put ''NzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAz''@;'; put 'put ''MTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1''@;'; put 'put ''LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAs''@;'; put 'put ''MzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2''@;'; put 'put ''MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5''@;'; put 'put ''MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3Mjcx''@;'; put 'put ''LDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5''@;'; put 'put ''NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLEU9bmV3IEFycmF5KDE2MCk7ZnVu''@;'; put 'put ''Y3Rpb24gaigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxLLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBWKHNlLGhlLHVlKXtyZXR1cm4gdWVec2UmKGhlXnVlKX1mdW5jdGlvbiBCKHNlLGhlLHVlKXtyZXR1cm4gc2UmaGV8dWUmKHNlfGhlKX1mdW5jdGlvbiBZKHNlLGhlKXtyZXR1cm4o''@;'; put 'put ''c2U+Pj4yOHxoZTw8NCleKGhlPj4+MnxzZTw8MzApXihoZT4+Pjd8c2U8PDI1KX1mdW5jdGlvbiBYKHNlLGhlKXtyZXR1cm4oc2U+Pj4xNHxoZTw8MTgpXihzZT4+PjE4fGhlPDwxNCleKGhlPj4+OXxzZTw8MjMpfWZ1bmN0aW9uIFUoc2UsaGUpe3JldHVybihzZT4+PjF8aGU8PDMxKV4oc2U+''@;'; put 'put ''Pj44fGhlPDwyNClec2U+Pj43fWZ1bmN0aW9uIHEoc2UsaGUpe3JldHVybihzZT4+PjF8aGU8PDMxKV4oc2U+Pj44fGhlPDwyNCleKHNlPj4+N3xoZTw8MjUpfWZ1bmN0aW9uIGVlKHNlLGhlKXtyZXR1cm4oc2U+Pj4xOXxoZTw8MTMpXihoZT4+PjI5fHNlPDwzKV5zZT4+PjZ9ZnVuY3Rpb24g''@;'; put 'put ''dGUoc2UsaGUpe3JldHVybihzZT4+PjE5fGhlPDwxMyleKGhlPj4+Mjl8c2U8PDMpXihzZT4+PjZ8aGU8PDI2KX1mdW5jdGlvbiBvZShzZSxoZSl7cmV0dXJuIHNlPj4+MDxoZT4+PjA/MTowfXooaixLKSxqLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3Nzkw''@;'; put 'put ''MzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAs''@;'; put 'put ''dGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sai5wcm90b3R5cGUuX3VwZGF0ZT1m''@;'; put 'put ''dW5jdGlvbihzZSl7Zm9yKHZhciBoZT10aGlzLl93LHVlPTB8dGhpcy5fYWgsY2U9MHx0aGlzLl9iaCxHPTB8dGhpcy5fY2gsYj0wfHRoaXMuX2RoLEQ9MHx0aGlzLl9laCxIPTB8dGhpcy5fZmgsTj0wfHRoaXMuX2doLGc9MHx0aGlzLl9oaCxDPTB8dGhpcy5fYWwsUz0wfHRoaXMuX2JsLHY9''@;'; put 'put ''MHx0aGlzLl9jbCxwPTB8dGhpcy5fZGwsdz0wfHRoaXMuX2VsLEo9MHx0aGlzLl9mbCxuZT0wfHRoaXMuX2dsLGRlPTB8dGhpcy5faGwsZmU9MDtmZTwzMjtmZSs9MiloZVtmZV09c2UucmVhZEludDMyQkUoNCpmZSksaGVbZmUrMV09c2UucmVhZEludDMyQkUoNCpmZSs0KTtmb3IoO2ZlPDE2''@;'; put 'put ''MDtmZSs9Mil7dmFyIHhlPWhlW2ZlLTMwXSxMZT1oZVtmZS0zMCsxXSxGZT1VKHhlLExlKSxPZT1xKExlLHhlKSxCZT1lZSh4ZT1oZVtmZS00XSxMZT1oZVtmZS00KzFdKSxXZT10ZShMZSx4ZSksSmU9aGVbZmUtMzJdLGx0PWhlW2ZlLTMyKzFdLFBlPU9lK2hlW2ZlLTE0KzFdfDAsYmU9RmUr''@;'; put 'put ''aGVbZmUtMTRdK29lKFBlLE9lKXwwO2JlPShiZT1iZStCZStvZShQZT1QZStXZXwwLFdlKXwwKStKZStvZShQZT1QZStsdHwwLGx0KXwwLGhlW2ZlXT1iZSxoZVtmZSsxXT1QZX1mb3IodmFyIEFlPTA7QWU8MTYwO0FlKz0yKXtiZT1oZVtBZV0sUGU9aGVbQWUrMV07dmFyIFRlPUIodWUsY2Us''@;'; put 'put ''RykscWU9QihDLFMsdiksWGU9WSh1ZSxDKSxVZT1ZKEMsdWUpLGh0PVgoRCx3KSxNZT1YKHcsRCksRGU9a1tBZV0semU9a1tBZSsxXSxpdD1WKEQsSCxOKSx1dD1WKHcsSixuZSksTXQ9ZGUrTWV8MCxIdD1nK2h0K29lKE10LGRlKXwwO0h0PShIdD0oSHQ9SHQraXQrb2UoTXQ9TXQrdXR8MCx1''@;'; put 'put ''dCl8MCkrRGUrb2UoTXQ9TXQremV8MCx6ZSl8MCkrYmUrb2UoTXQ9TXQrUGV8MCxQZSl8MDt2YXIgUHQ9VWUrcWV8MCxvbj1YZStUZStvZShQdCxVZSl8MDtnPU4sZGU9bmUsTj1ILG5lPUosSD1ELEo9dyxEPWIrSHQrb2Uodz1wK010fDAscCl8MCxiPUcscD12LEc9Y2Usdj1TLGNlPXVlLFM9''@;'; put 'put ''Qyx1ZT1IdCtvbitvZShDPU10K1B0fDAsTXQpfDB9dGhpcy5fYWw9dGhpcy5fYWwrQ3wwLHRoaXMuX2JsPXRoaXMuX2JsK1N8MCx0aGlzLl9jbD10aGlzLl9jbCt2fDAsdGhpcy5fZGw9dGhpcy5fZGwrcHwwLHRoaXMuX2VsPXRoaXMuX2VsK3d8MCx0aGlzLl9mbD10aGlzLl9mbCtKfDAsdGhp''@;'; put 'put ''cy5fZ2w9dGhpcy5fZ2wrbmV8MCx0aGlzLl9obD10aGlzLl9obCtkZXwwLHRoaXMuX2FoPXRoaXMuX2FoK3VlK29lKHRoaXMuX2FsLEMpfDAsdGhpcy5fYmg9dGhpcy5fYmgrY2Urb2UodGhpcy5fYmwsUyl8MCx0aGlzLl9jaD10aGlzLl9jaCtHK29lKHRoaXMuX2NsLHYpfDAsdGhpcy5fZGg9''@;'; put 'put ''dGhpcy5fZGgrYitvZSh0aGlzLl9kbCxwKXwwLHRoaXMuX2VoPXRoaXMuX2VoK0Qrb2UodGhpcy5fZWwsdyl8MCx0aGlzLl9maD10aGlzLl9maCtIK29lKHRoaXMuX2ZsLEopfDAsdGhpcy5fZ2g9dGhpcy5fZ2grTitvZSh0aGlzLl9nbCxuZSl8MCx0aGlzLl9oaD10aGlzLl9oaCtnK29lKHRo''@;'; put 'put ''aXMuX2hsLGRlKXwwfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBzZT1JLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBoZSh1ZSxjZSxHKXtzZS53cml0ZUludDMyQkUodWUsRyksc2Uud3JpdGVJbnQzMkJFKGNlLEcrNCl9cmV0dXJuIGhlKHRoaXMuX2FoLHRoaXMuX2FsLDAp''@;'; put 'put ''LGhlKHRoaXMuX2JoLHRoaXMuX2JsLDgpLGhlKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxoZSh0aGlzLl9kaCx0aGlzLl9kbCwyNCksaGUodGhpcy5fZWgsdGhpcy5fZWwsMzIpLGhlKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxoZSh0aGlzLl9naCx0aGlzLl9nbCw0OCksaGUodGhpcy5faGgsdGhp''@;'; put 'put ''cy5faGwsNTYpLHNlfSxNLmV4cG9ydHM9an0sMjgzMDooTSxPLFIpPT57TS5leHBvcnRzPUs7dmFyIHo9Uig3MTg3KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gSygpe3ouY2FsbCh0aGlzKX1SKDU3MTcpKEsseiksSy5SZWFkYWJsZT1SKDk0ODEpLEsuV3JpdGFibGU9Uig0MjI5KSxLLkR1cGxl''@;'; put 'put ''eD1SKDY3NTMpLEsuVHJhbnNmb3JtPVIoNDYwNSksSy5QYXNzVGhyb3VnaD1SKDI3MjUpLEsuZmluaXNoZWQ9Uig4NjEwKSxLLnBpcGVsaW5lPVIoOTk0NiksSy5TdHJlYW09SyxLLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEksayl7dmFyIEU9dGhpcztmdW5jdGlvbiBqKGVlKXtJLndyaXRh''@;'; put 'put ''YmxlJiYhMT09PUkud3JpdGUoZWUpJiZFLnBhdXNlJiZFLnBhdXNlKCl9ZnVuY3Rpb24gVigpe0UucmVhZGFibGUmJkUucmVzdW1lJiZFLnJlc3VtZSgpfUUub24oImRhdGEiLGopLEkub24oImRyYWluIixWKSxJLl9pc1N0ZGlvfHxrJiYhMT09PWsuZW5kfHwoRS5vbigiZW5kIixZKSxFLm9u''@;'; put 'put ''KCJjbG9zZSIsWCkpO3ZhciBCPSExO2Z1bmN0aW9uIFkoKXtCfHwoQj0hMCxJLmVuZCgpKX1mdW5jdGlvbiBYKCl7Qnx8KEI9ITAsImZ1bmN0aW9uIj09dHlwZW9mIEkuZGVzdHJveSYmSS5kZXN0cm95KCkpfWZ1bmN0aW9uIFUoZWUpe2lmKHEoKSwwPT09ei5saXN0ZW5lckNvdW50KHRoaXMs''@;'; put 'put ''ImVycm9yIikpdGhyb3cgZWV9ZnVuY3Rpb24gcSgpe0UucmVtb3ZlTGlzdGVuZXIoImRhdGEiLGopLEkucmVtb3ZlTGlzdGVuZXIoImRyYWluIixWKSxFLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFkpLEUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixYKSxFLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIs''@;'; put 'put ''VSksSS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFUpLEUucmVtb3ZlTGlzdGVuZXIoImVuZCIscSksRS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHEpLEkucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixxKX1yZXR1cm4gRS5vbigiZXJyb3IiLFUpLEkub24oImVycm9yIixVKSxFLm9uKCJlbmQiLHEp''@;'; put 'put ''LEUub24oImNsb3NlIixxKSxJLm9uKCJjbG9zZSIscSksSS5lbWl0KCJwaXBlIixFKSxJfX0sMjU1MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9ei5pc0VuY29kaW5nfHxmdW5jdGlvbihxKXtzd2l0Y2goKHE9IiIrcSkmJnEudG9Mb3dlckNhc2UoKSl7''@;'; put 'put ''Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5j''@;'; put 'put ''dGlvbiBJKHEpe3ZhciBlZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbih0ZSl7dmFyIG9lPWZ1bmN0aW9uKHNlKXtpZighc2UpcmV0dXJuInV0ZjgiO2Zvcih2YXIgaGU7Oylzd2l0Y2goc2Upe2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2Fz''@;'; put 'put ''ZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBzZTtkZWZhdWx0OmlmKGhlKXJldHVybjtzZT0o''@;'; put 'put ''IiIrc2UpLnRvTG93ZXJDYXNlKCksaGU9ITB9fSh0ZSk7aWYoInN0cmluZyIhPXR5cGVvZiBvZSYmKHouaXNFbmNvZGluZz09PUt8fCFLKHRlKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3RlKTtyZXR1cm4gb2V8fHRlfShxKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0''@;'; put 'put ''ZjE2bGUiOnRoaXMudGV4dD1qLHRoaXMuZW5kPVYsZWU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9RSxlZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Qix0aGlzLmVuZD1ZLGVlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1YLHZvaWQodGhpcy5l''@;'; put 'put ''bmQ9VSl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj16LmFsbG9jVW5zYWZlKGVlKX1mdW5jdGlvbiBrKHEpe3JldHVybiBxPD0xMjc/MDpxPj41PT02PzI6cT4+ND09MTQ/MzpxPj4zPT0zMD80OnE+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gRShxKXt2YXIg''@;'; put 'put ''ZWU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCx0ZT1mdW5jdGlvbihvZSxzZSxoZSl7aWYoMTI4IT0oMTkyJnNlWzBdKSlyZXR1cm4gb2UubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihvZS5sYXN0TmVlZD4xJiZzZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnNlWzFdKSlyZXR1cm4gb2Uu''@;'; put 'put ''bGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihvZS5sYXN0TmVlZD4yJiZzZS5sZW5ndGg+MiYmMTI4IT0oMTkyJnNlWzJdKSlyZXR1cm4gb2UubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMscSk7cmV0dXJuIHZvaWQgMCE9PXRlP3RlOnRoaXMubGFzdE5lZWQ8PXEubGVuZ3RoPyhxLmNvcHkodGhp''@;'; put 'put ''cy5sYXN0Q2hhcixlZSwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KHEuY29weSh0aGlzLmxhc3RDaGFyLGVlLDAscS5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09cS5sZW5ndGgpKX1mdW5jdGlvbiBq''@;'; put 'put ''KHEsZWUpe2lmKChxLmxlbmd0aC1lZSklMj09MCl7dmFyIHRlPXEudG9TdHJpbmcoInV0ZjE2bGUiLGVlKTtpZih0ZSl7dmFyIG9lPXRlLmNoYXJDb2RlQXQodGUubGVuZ3RoLTEpO2lmKG9lPj01NTI5NiYmb2U8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9''@;'; put 'put ''NCx0aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1xW3EubGVuZ3RoLTFdLHRlLnNsaWNlKDAsLTEpfXJldHVybiB0ZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTFdLHEudG9T''@;'; put 'put ''dHJpbmcoInV0ZjE2bGUiLGVlLHEubGVuZ3RoLTEpfWZ1bmN0aW9uIFYocSl7dmFyIGVlPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZWUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3RO''@;'; put 'put ''ZWVkKTplZX1mdW5jdGlvbiBCKHEsZWUpe3ZhciB0ZT0ocS5sZW5ndGgtZWUpJTM7cmV0dXJuIDA9PT10ZT9xLnRvU3RyaW5nKCJiYXNlNjQiLGVlKToodGhpcy5sYXN0TmVlZD0zLXRlLHRoaXMubGFzdFRvdGFsPTMsMT09PXRlP3RoaXMubGFzdENoYXJbMF09cVtxLmxlbmd0aC0xXToodGhp''@;'; put 'put ''cy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09cVtxLmxlbmd0aC0xXSkscS50b1N0cmluZygiYmFzZTY0IixlZSxxLmxlbmd0aC10ZSkpfWZ1bmN0aW9uIFkocSl7dmFyIGVlPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5l''@;'; put 'put ''ZWQ/ZWUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6ZWV9ZnVuY3Rpb24gWChxKXtyZXR1cm4gcS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBVKHEpe3JldHVybiBxJiZxLmxlbmd0aD90aGlzLndyaXRlKHEpOiIifU8uU3RyaW5n''@;'; put 'put ''RGVjb2Rlcj1JLEkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2lmKDA9PT1xLmxlbmd0aClyZXR1cm4iIjt2YXIgZWUsdGU7aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KGVlPXRoaXMuZmlsbExhc3QocSkpKXJldHVybiIiO3RlPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVl''@;'; put 'put ''ZD0wfWVsc2UgdGU9MDtyZXR1cm4gdGU8cS5sZW5ndGg/ZWU/ZWUrdGhpcy50ZXh0KHEsdGUpOnRoaXMudGV4dChxLHRlKTplZXx8IiJ9LEkucHJvdG90eXBlLmVuZD1mdW5jdGlvbihxKXt2YXIgZWU9cSYmcS5sZW5ndGg/dGhpcy53cml0ZShxKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9l''@;'; put 'put ''ZSsiXHVmZmZkIjplZX0sSS5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihxLGVlKXt2YXIgdGU9ZnVuY3Rpb24oc2UsaGUsdWUpe3ZhciBjZT1oZS5sZW5ndGgtMTtpZihjZTx1ZSlyZXR1cm4gMDt2YXIgRz1rKGhlW2NlXSk7cmV0dXJuIEc+PTA/KEc+MCYmKHNlLmxhc3ROZWVkPUctMSksRyk6''@;'; put 'put ''LS1jZTx1ZXx8LTI9PT1HPzA6KEc9ayhoZVtjZV0pKT49MD8oRz4wJiYoc2UubGFzdE5lZWQ9Ry0yKSxHKTotLWNlPHVlfHwtMj09PUc/MDooRz1rKGhlW2NlXSkpPj0wPyhHPjAmJigyPT09Rz9HPTA6c2UubGFzdE5lZWQ9Ry0zKSxHKTowfSh0aGlzLHEsZWUpO2lmKCF0aGlzLmxhc3ROZWVk''@;'; put 'put ''KXJldHVybiBxLnRvU3RyaW5nKCJ1dGY4IixlZSk7dGhpcy5sYXN0VG90YWw9dGU7dmFyIG9lPXEubGVuZ3RoLSh0ZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gcS5jb3B5KHRoaXMubGFzdENoYXIsMCxvZSkscS50b1N0cmluZygidXRmOCIsZWUsb2UpfSxJLnByb3RvdHlwZS5maWxsTGFzdD1m''@;'; put 'put ''dW5jdGlvbihxKXtpZih0aGlzLmxhc3ROZWVkPD1xLmxlbmd0aClyZXR1cm4gcS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFs''@;'; put 'put ''KTtxLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAscS5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPXEubGVuZ3RofX0sNzg1NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9UigzNjg5KSxLPVIoNDU2NCksST1SKDc1Miksaz1SKDIyMjQpLnks''@;'; put 'put ''RT1SKDU3NjEpLm0saj1SKDg5NzEpLlUsVj1SKDc2NTIpLEI9Uig0NTYpLHtmcm9tQ2FsbGJhY2s6WX09Uig3MDQxKSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpYfT1SKDEyNjkpLFU9L15bXHgyMVx4MjMtXHgyQlx4MkQtXHgzQVx4M0MtXHg1Qlx4NUQtXHg3RV0rJC8scT0vW1x4MDAtXHgx''@;'; put 'put ''Rl0vLGVlPVsiXG4iLCJcciIsIlwwIl0sdGU9L1tceDIwLVx4M0FceDNDLVx4N0VdKy8sb2U9L1tceDA5XHgyMC1ceDJGXHgzQi1ceDQwXHg1Qi1ceDYwXHg3Qi1ceDdFXS8sc2U9e2phbjowLGZlYjoxLG1hcjoyLGFwcjozLG1heTo0LGp1bjo1LGp1bDo2LGF1Zzo3LHNlcDo4LG9jdDo5LG5v''@;'; put 'put ''djoxMCxkZWM6MTF9LGhlPTIxNDc0ODM2NDdlMyx1ZT0nSW52YWxpZCBzYW1lU2l0ZUNvbnRleHQgb3B0aW9uIGZvciBnZXRDb29raWVzKCk7IGV4cGVjdGVkIG9uZSBvZiAic3RyaWN0IiwgImxheCIsIG9yICJub25lIic7ZnVuY3Rpb24gY2UoSmUpe1YudmFsaWRhdGUoVi5pc05vbkVtcHR5''@;'; put 'put ''U3RyaW5nKEplKSxKZSk7Y29uc3QgbHQ9U3RyaW5nKEplKS50b0xvd2VyQ2FzZSgpO3JldHVybiJub25lIj09PWx0fHwibGF4Ij09PWx0fHwic3RyaWN0Ij09PWx0P2x0Om51bGx9Y29uc3QgRz1PYmplY3QuZnJlZXplKHtTSUxFTlQ6InNpbGVudCIsU1RSSUNUOiJzdHJpY3QiLERJU0FCTEVE''@;'; put 'put ''OiJ1bnNhZmUtZGlzYWJsZWQifSksYj0vKD86Xig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9JCl8KD86Xig/Oig/OlthLWZcZF17MSw0fTopezd9KD86W2EtZlxkXXsxLDR9fDopfCg/Olth''@;'; put 'put ''LWZcZF17MSw0fTopezZ9KD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs1fSg/OjooPzoyNVswLTVdfDJbMC00XVxkfDFc''@;'; put 'put ''ZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDJ9fDopfCg/OlthLWZcZF17MSw0fTopezR9KD86KD86OlthLWZcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTld''@;'; put 'put ''XGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDN9fDopfCg/OlthLWZcZF17MSw0fTopezN9KD86KD86OlthLWZcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86''@;'; put 'put ''XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezJ9KD86KD86OlthLWZcZF17MSw0fSl7MCwzfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVsw''@;'; put 'put ''LTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDV9fDopfCg/OlthLWZcZF17MSw0fTopezF9KD86KD86OlthLWZcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00''@;'; put 'put ''XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDZ9fDopfCg/OjooPzooPzo6W2EtZlxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9''@;'; put 'put ''fCg/OjpbYS1mXGRdezEsNH0pezEsN318OikpKSQpLyxEPSJcblxcWz8oPzpcbig/OlthLWZBLUZcXGRdezEsNH06KXs3fSg/OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCko''@;'; put 'put ''PzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fDpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18Mlsw''@;'; put 'put ''LTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsMn18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpc''@;'; put 'put ''XC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDN9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezN9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxb''@;'; put 'put ''MS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18Mlsw''@;'; put 'put ''LTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNX18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw0''@;'; put 'put ''fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDZ9fDopfFxuKD86Oig/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDV9Oig/''@;'; put 'put ''OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsN318OikpXG4pKD86JVswLTlhLXpBLVpdezEsfSk/XFxdP1xuIi5yZXBsYWNlKC9c''@;'; put 'put ''cypcL1wvLiokL2dtLCIiKS5yZXBsYWNlKC9cbi9nLCIiKS50cmltKCksSD1uZXcgUmVnRXhwKGBeJHtEfSRgKTtmdW5jdGlvbiBOKEplLGx0LFBlLGJlKXtsZXQgQWU9MDtmb3IoO0FlPEplLmxlbmd0aDspe2NvbnN0IFRlPUplLmNoYXJDb2RlQXQoQWUpO2lmKFRlPD00N3x8VGU+PTU4KWJy''@;'; put 'put ''ZWFrO0FlKyt9cmV0dXJuIEFlPGx0fHxBZT5QZT9udWxsOmJlfHxBZT09SmUubGVuZ3RoP3BhcnNlSW50KEplLnN1YnN0cigwLEFlKSwxMCk6bnVsbH1mdW5jdGlvbiBnKEplKXtjb25zdCBsdD1KZS5zcGxpdCgiOiIpLFBlPVswLDAsMF07aWYoMyE9PWx0Lmxlbmd0aClyZXR1cm4gbnVsbDtm''@;'; put 'put ''b3IobGV0IGJlPTA7YmU8MztiZSsrKXtjb25zdCBUZT1OKGx0W2JlXSwxLDIsMj09YmUpO2lmKG51bGw9PT1UZSlyZXR1cm4gbnVsbDtQZVtiZV09VGV9cmV0dXJuIFBlfWZ1bmN0aW9uIEMoSmUpe0plPVN0cmluZyhKZSkuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKTtjb25zdCBsdD1zZVtK''@;'; put 'put ''ZV07cmV0dXJuIGx0Pj0wP2x0Om51bGx9ZnVuY3Rpb24gUyhKZSl7aWYoIUplKXJldHVybjtjb25zdCBsdD1KZS5zcGxpdChvZSk7aWYoIWx0KXJldHVybjtsZXQgUGU9bnVsbCxiZT1udWxsLEFlPW51bGwsVGU9bnVsbCxxZT1udWxsLFhlPW51bGw7Zm9yKGxldCBVZT0wO1VlPGx0Lmxlbmd0''@;'; put 'put ''aDtVZSsrKXtjb25zdCBodD1sdFtVZV0udHJpbSgpO2lmKCFodC5sZW5ndGgpY29udGludWU7bGV0IE1lO251bGw9PT1BZSYmKE1lPWcoaHQpLE1lKT8oUGU9TWVbMF0sYmU9TWVbMV0sQWU9TWVbMl0pOm51bGwhPT1UZXx8KE1lPU4oaHQsMSwyLCEwKSxudWxsPT09TWUpP251bGwhPT1xZXx8''@;'; put 'put ''KE1lPUMoaHQpLG51bGw9PT1NZSk/bnVsbD09PVhlJiYoTWU9TihodCwyLDQsITApLG51bGwhPT1NZSYmKFhlPU1lLFhlPj03MCYmWGU8PTk5P1hlKz0xOTAwOlhlPj0wJiZYZTw9NjkmJihYZSs9MmUzKSkpOnFlPU1lOlRlPU1lfXJldHVybiBudWxsPT09VGV8fG51bGw9PT1xZXx8bnVsbD09''@;'; put 'put ''PVhlfHxudWxsPT09QWV8fFRlPDF8fFRlPjMxfHxYZTwxNjAxfHxQZT4yM3x8YmU+NTl8fEFlPjU5P3ZvaWQgMDpuZXcgRGF0ZShEYXRlLlVUQyhYZSxxZSxUZSxQZSxiZSxBZSkpfWZ1bmN0aW9uIHYoSmUpe3JldHVybiBWLnZhbGlkYXRlKFYuaXNEYXRlKEplKSxKZSksSmUudG9VVENTdHJp''@;'; put 'put ''bmcoKX1mdW5jdGlvbiBwKEplKXtyZXR1cm4gbnVsbD09SmU/bnVsbDooSmU9SmUudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpLEgudGVzdChKZSkmJihKZT1KZS5yZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpKSx6JiYvW15cdTAwMDEtXHUwMDdmXS8udGVzdChKZSkmJihKZT16LnRv''@;'; put 'put ''QVNDSUkoSmUpKSxKZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiB3KEplLGx0LFBlKXtpZihudWxsPT1KZXx8bnVsbD09bHQpcmV0dXJuIG51bGw7aWYoITEhPT1QZSYmKEplPXAoSmUpLGx0PXAobHQpKSxKZT09bHQpcmV0dXJuITA7Y29uc3QgYmU9SmUubGFzdEluZGV4T2YobHQpO3JldHVy''@;'; put 'put ''biEoYmU8PTB8fEplLmxlbmd0aCE9PWx0Lmxlbmd0aCtiZXx8Ii4iIT09SmUuc3Vic3RyKGJlLTEsMSl8fGIudGVzdChKZSkpfWZ1bmN0aW9uIEooSmUpe2lmKCFKZXx8Ii8iIT09SmUuc3Vic3RyKDAsMSkpcmV0dXJuIi8iO2lmKCIvIj09PUplKXJldHVybiBKZTtjb25zdCBsdD1KZS5sYXN0''@;'; put 'put ''SW5kZXhPZigiLyIpO3JldHVybiAwPT09bHQ/Ii8iOkplLnNsaWNlKDAsbHQpfWZ1bmN0aW9uIGRlKEplLGx0KXtpZihsdCYmIm9iamVjdCI9PXR5cGVvZiBsdHx8KGx0PXt9KSxWLmlzRW1wdHlTdHJpbmcoSmUpfHwhVi5pc1N0cmluZyhKZSkpcmV0dXJuIG51bGw7Y29uc3QgUGU9KEplPUpl''@;'; put 'put ''LnRyaW0oKSkuaW5kZXhPZigiOyIpLGJlPWZ1bmN0aW9uIG5lKEplLGx0KXtKZT1mdW5jdGlvbihxZSl7aWYoVi5pc0VtcHR5U3RyaW5nKHFlKSlyZXR1cm4gcWU7Zm9yKGxldCBYZT0wO1hlPGVlLmxlbmd0aDtYZSsrKXtjb25zdCBVZT1xZS5pbmRleE9mKGVlW1hlXSk7LTEhPT1VZSYmKHFl''@;'; put 'put ''PXFlLnN1YnN0cigwLFVlKSl9cmV0dXJuIHFlfShKZSksVi52YWxpZGF0ZShWLmlzU3RyaW5nKEplKSxKZSk7bGV0IFBlLGJlLEFlPUplLmluZGV4T2YoIj0iKTtpZihsdCkwPT09QWUmJihBZT0oSmU9SmUuc3Vic3RyKDEpKS5pbmRleE9mKCI9IikpO2Vsc2UgaWYoQWU8PTApcmV0dXJuO2lm''@;'; put 'put ''KEFlPD0wPyhQZT0iIixiZT1KZS50cmltKCkpOihQZT1KZS5zdWJzdHIoMCxBZSkudHJpbSgpLGJlPUplLnN1YnN0cihBZSsxKS50cmltKCkpLHEudGVzdChQZSl8fHEudGVzdChiZSkpcmV0dXJuO2NvbnN0IFRlPW5ldyBCZTtyZXR1cm4gVGUua2V5PVBlLFRlLnZhbHVlPWJlLFRlfSgtMT09''@;'; put 'put ''PVBlP0plOkplLnN1YnN0cigwLFBlKSwhIWx0Lmxvb3NlKTtpZighYmUpcmV0dXJuO2lmKC0xPT09UGUpcmV0dXJuIGJlO2NvbnN0IEFlPUplLnNsaWNlKFBlKzEpLnRyaW0oKTtpZigwPT09QWUubGVuZ3RoKXJldHVybiBiZTtjb25zdCBUZT1BZS5zcGxpdCgiOyIpO2Zvcig7VGUubGVuZ3Ro''@;'; put 'put ''Oyl7Y29uc3QgcWU9VGUuc2hpZnQoKS50cmltKCk7aWYoMD09PXFlLmxlbmd0aCljb250aW51ZTtjb25zdCBYZT1xZS5pbmRleE9mKCI9Iik7bGV0IFVlLGh0O3N3aXRjaCgtMT09PVhlPyhVZT1xZSxodD1udWxsKTooVWU9cWUuc3Vic3RyKDAsWGUpLGh0PXFlLnN1YnN0cihYZSsxKSksVWU9''@;'; put 'put ''VWUudHJpbSgpLnRvTG93ZXJDYXNlKCksaHQmJihodD1odC50cmltKCkpLFVlKXtjYXNlImV4cGlyZXMiOmlmKGh0KXtjb25zdCBNZT1TKGh0KTtNZSYmKGJlLmV4cGlyZXM9TWUpfWJyZWFrO2Nhc2UibWF4LWFnZSI6aWYoaHQmJi9eLT9bMC05XSskLy50ZXN0KGh0KSl7Y29uc3QgTWU9cGFy''@;'; put 'put ''c2VJbnQoaHQsMTApO2JlLnNldE1heEFnZShNZSl9YnJlYWs7Y2FzZSJkb21haW4iOmlmKGh0KXtjb25zdCBNZT1odC50cmltKCkucmVwbGFjZSgvXlwuLywiIik7TWUmJihiZS5kb21haW49TWUudG9Mb3dlckNhc2UoKSl9YnJlYWs7Y2FzZSJwYXRoIjpiZS5wYXRoPWh0JiYiLyI9PT1odFsw''@;'; put 'put ''XT9odDpudWxsO2JyZWFrO2Nhc2Uic2VjdXJlIjpiZS5zZWN1cmU9ITA7YnJlYWs7Y2FzZSJodHRwb25seSI6YmUuaHR0cE9ubHk9ITA7YnJlYWs7Y2FzZSJzYW1lc2l0ZSI6c3dpdGNoKGh0P2h0LnRvTG93ZXJDYXNlKCk6IiIpe2Nhc2Uic3RyaWN0IjpiZS5zYW1lU2l0ZT0ic3RyaWN0Ijti''@;'; put 'put ''cmVhaztjYXNlImxheCI6YmUuc2FtZVNpdGU9ImxheCI7YnJlYWs7Y2FzZSJub25lIjpiZS5zYW1lU2l0ZT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDpiZS5zYW1lU2l0ZT12b2lkIDB9YnJlYWs7ZGVmYXVsdDpiZS5leHRlbnNpb25zPWJlLmV4dGVuc2lvbnN8fFtdLGJlLmV4dGVuc2lvbnMucHVz''@;'; put 'put ''aChxZSl9fXJldHVybiBiZX1mdW5jdGlvbiBmZShKZSl7bGV0IGx0O3RyeXtsdD1KU09OLnBhcnNlKEplKX1jYXRjaChQZSl7cmV0dXJuIFBlfXJldHVybiBsdH1mdW5jdGlvbiB4ZShKZSl7aWYoIUplfHxWLmlzRW1wdHlTdHJpbmcoSmUpKXJldHVybiBudWxsO2xldCBsdDtpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIEplKXtpZihsdD1mZShKZSksbHQgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbnVsbH1lbHNlIGx0PUplO2NvbnN0IFBlPW5ldyBCZTtmb3IobGV0IGJlPTA7YmU8QmUuc2VyaWFsaXphYmxlUHJvcGVydGllcy5sZW5ndGg7YmUrKyl7Y29uc3QgQWU9QmUuc2VyaWFsaXphYmxl''@;'; put 'put ''UHJvcGVydGllc1tiZV07dm9pZCAwIT09bHRbQWVdJiZsdFtBZV0hPT1PZVtBZV0mJihQZVtBZV09ImV4cGlyZXMiPT09QWV8fCJjcmVhdGlvbiI9PT1BZXx8Imxhc3RBY2Nlc3NlZCI9PT1BZT9udWxsPT09bHRbQWVdP251bGw6IkluZmluaXR5Ij09bHRbQWVdPyJJbmZpbml0eSI6bmV3IERh''@;'; put 'put ''dGUobHRbQWVdKTpsdFtBZV0pfXJldHVybiBQZX1mdW5jdGlvbiBMZShKZSxsdCl7Vi52YWxpZGF0ZShWLmlzT2JqZWN0KEplKSxKZSksVi52YWxpZGF0ZShWLmlzT2JqZWN0KGx0KSxsdCk7bGV0IFBlPTA7cmV0dXJuIFBlPShsdC5wYXRoP2x0LnBhdGgubGVuZ3RoOjApLShKZS5wYXRoP0pl''@;'; put 'put ''LnBhdGgubGVuZ3RoOjApLDAhPT1QZXx8KFBlPShKZS5jcmVhdGlvbj9KZS5jcmVhdGlvbi5nZXRUaW1lKCk6aGUpLShsdC5jcmVhdGlvbj9sdC5jcmVhdGlvbi5nZXRUaW1lKCk6aGUpLDAhPT1QZXx8KFBlPUplLmNyZWF0aW9uSW5kZXgtbHQuY3JlYXRpb25JbmRleCkpLFBlfWZ1bmN0aW9u''@;'; put 'put ''IEZlKEplKXtpZihKZSBpbnN0YW5jZW9mIE9iamVjdClyZXR1cm4gSmU7dHJ5e0plPWRlY29kZVVSSShKZSl9Y2F0Y2h7fXJldHVybiBLKEplKX1jb25zdCBPZT17a2V5OiIiLHZhbHVlOiIiLGV4cGlyZXM6IkluZmluaXR5IixtYXhBZ2U6bnVsbCxkb21haW46bnVsbCxwYXRoOm51bGwsc2Vj''@;'; put 'put ''dXJlOiExLGh0dHBPbmx5OiExLGV4dGVuc2lvbnM6bnVsbCxob3N0T25seTpudWxsLHBhdGhJc0RlZmF1bHQ6bnVsbCxjcmVhdGlvbjpudWxsLGxhc3RBY2Nlc3NlZDpudWxsLHNhbWVTaXRlOnZvaWQgMH07Y2xhc3MgQmV7Y29uc3RydWN0b3IobHQ9e30pe2NvbnN0IFBlPVgoKTtQZSYmKHRo''@;'; put 'put ''aXNbUGVdPXRoaXMuaW5zcGVjdCksT2JqZWN0LmFzc2lnbih0aGlzLE9lLGx0KSx0aGlzLmNyZWF0aW9uPXRoaXMuY3JlYXRpb258fG5ldyBEYXRlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjcmVhdGlvbkluZGV4Iix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFi''@;'; put 'put ''bGU6ITAsdmFsdWU6KytCZS5jb29raWVzQ3JlYXRlZH0pfWluc3BlY3QoKXtjb25zdCBsdD1EYXRlLm5vdygpLFBlPW51bGwhPXRoaXMuaG9zdE9ubHk/dGhpcy5ob3N0T25seToiPyIsYmU9dGhpcy5jcmVhdGlvbj9sdC10aGlzLmNyZWF0aW9uLmdldFRpbWUoKSsibXMiOiI/IixBZT10aGlz''@;'; put 'put ''Lmxhc3RBY2Nlc3NlZD9sdC10aGlzLmxhc3RBY2Nlc3NlZC5nZXRUaW1lKCkrIm1zIjoiPyI7cmV0dXJuYENvb2tpZT0iJHt0aGlzLnRvU3RyaW5nKCl9OyBob3N0T25seT0ke1BlfTsgYUFnZT0ke0FlfTsgY0FnZT0ke2JlfSJgfXRvSlNPTigpe2NvbnN0IGx0PXt9O2Zvcihjb25zdCBQZSBv''@;'; put 'put ''ZiBCZS5zZXJpYWxpemFibGVQcm9wZXJ0aWVzKXRoaXNbUGVdIT09T2VbUGVdJiYoImV4cGlyZXMiPT09UGV8fCJjcmVhdGlvbiI9PT1QZXx8Imxhc3RBY2Nlc3NlZCI9PT1QZT9sdFtQZV09bnVsbD09PXRoaXNbUGVdP251bGw6IkluZmluaXR5Ij09dGhpc1tQZV0/IkluZmluaXR5Ijp0aGlz''@;'; put 'put ''W1BlXS50b0lTT1N0cmluZygpOiJtYXhBZ2UiPT09UGU/bnVsbCE9PXRoaXNbUGVdJiYobHRbUGVdPXRoaXNbUGVdPT0xLzB8fHRoaXNbUGVdPT0tMS8wP3RoaXNbUGVdLnRvU3RyaW5nKCk6dGhpc1tQZV0pOnRoaXNbUGVdIT09T2VbUGVdJiYobHRbUGVdPXRoaXNbUGVdKSk7cmV0dXJuIGx0''@;'; put 'put ''fWNsb25lKCl7cmV0dXJuIHhlKHRoaXMudG9KU09OKCkpfXZhbGlkYXRlKCl7aWYoIVUudGVzdCh0aGlzLnZhbHVlKXx8ISh0aGlzLmV4cGlyZXM9PTEvMHx8dGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZXx8Uyh0aGlzLmV4cGlyZXMpKXx8bnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4''@;'; put 'put ''QWdlPD0wfHxudWxsIT10aGlzLnBhdGgmJiF0ZS50ZXN0KHRoaXMucGF0aCkpcmV0dXJuITE7Y29uc3QgbHQ9dGhpcy5jZG9tYWluKCk7cmV0dXJuIShsdCYmKGx0Lm1hdGNoKC9cLiQvKXx8bnVsbD09SS5nZXRQdWJsaWNTdWZmaXgobHQpKSl9c2V0RXhwaXJlcyhsdCl7dGhpcy5leHBpcmVz''@;'; put 'put ''PWx0IGluc3RhbmNlb2YgRGF0ZT9sdDpTKGx0KXx8IkluZmluaXR5In1zZXRNYXhBZ2UobHQpe3RoaXMubWF4QWdlPWx0PT09MS8wfHxsdD09PS0xLzA/bHQudG9TdHJpbmcoKTpsdH1jb29raWVTdHJpbmcoKXtsZXQgbHQ9dGhpcy52YWx1ZTtyZXR1cm4gbnVsbD09bHQmJihsdD0iIiksIiI9''@;'; put 'put ''PT10aGlzLmtleT9sdDpgJHt0aGlzLmtleX09JHtsdH1gfXRvU3RyaW5nKCl7bGV0IGx0PXRoaXMuY29va2llU3RyaW5nKCk7aWYodGhpcy5leHBpcmVzIT0xLzAmJih0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlP2x0Kz1gOyBFeHBpcmVzPSR7dih0aGlzLmV4cGlyZXMpfWA6bHQrPWA7''@;'; put 'put ''IEV4cGlyZXM9JHt0aGlzLmV4cGlyZXN9YCksbnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlIT0xLzAmJihsdCs9YDsgTWF4LUFnZT0ke3RoaXMubWF4QWdlfWApLHRoaXMuZG9tYWluJiYhdGhpcy5ob3N0T25seSYmKGx0Kz1gOyBEb21haW49JHt0aGlzLmRvbWFpbn1gKSx0aGlzLnBh''@;'; put 'put ''dGgmJihsdCs9YDsgUGF0aD0ke3RoaXMucGF0aH1gKSx0aGlzLnNlY3VyZSYmKGx0Kz0iOyBTZWN1cmUiKSx0aGlzLmh0dHBPbmx5JiYobHQrPSI7IEh0dHBPbmx5IiksdGhpcy5zYW1lU2l0ZSYmIm5vbmUiIT09dGhpcy5zYW1lU2l0ZSl7Y29uc3QgUGU9QmUuc2FtZVNpdGVDYW5vbmljYWxb''@;'; put 'put ''dGhpcy5zYW1lU2l0ZS50b0xvd2VyQ2FzZSgpXTtsdCs9YDsgU2FtZVNpdGU9JHtQZXx8dGhpcy5zYW1lU2l0ZX1gfXJldHVybiB0aGlzLmV4dGVuc2lvbnMmJnRoaXMuZXh0ZW5zaW9ucy5mb3JFYWNoKFBlPT57bHQrPWA7ICR7UGV9YH0pLGx0fVRUTChsdCl7aWYobnVsbCE9dGhpcy5tYXhB''@;'; put 'put ''Z2UpcmV0dXJuIHRoaXMubWF4QWdlPD0wPzA6MWUzKnRoaXMubWF4QWdlO2xldCBQZT10aGlzLmV4cGlyZXM7cmV0dXJuIFBlIT0xLzA/KFBlIGluc3RhbmNlb2YgRGF0ZXx8KFBlPVMoUGUpfHwxLzApLFBlPT0xLzA/MS8wOlBlLmdldFRpbWUoKS0obHR8fERhdGUubm93KCkpKToxLzB9ZXhw''@;'; put 'put ''aXJ5VGltZShsdCl7aWYobnVsbCE9dGhpcy5tYXhBZ2Upe2NvbnN0IGJlPXRoaXMubWF4QWdlPD0wPy0xLzA6MWUzKnRoaXMubWF4QWdlO3JldHVybihsdHx8dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUpLmdldFRpbWUoKStiZX1yZXR1cm4gdGhpcy5leHBpcmVzPT0xLzA/MS8wOnRoaXMuZXhw''@;'; put 'put ''aXJlcy5nZXRUaW1lKCl9ZXhwaXJ5RGF0ZShsdCl7Y29uc3QgUGU9dGhpcy5leHBpcnlUaW1lKGx0KTtyZXR1cm4gUGU9PTEvMD9uZXcgRGF0ZShoZSk6UGU9PS0xLzA/bmV3IERhdGUoMCk6bmV3IERhdGUoUGUpfWlzUGVyc2lzdGVudCgpe3JldHVybiBudWxsIT10aGlzLm1heEFnZXx8dGhp''@;'; put 'put ''cy5leHBpcmVzIT0xLzB9Y2Fub25pY2FsaXplZERvbWFpbigpe3JldHVybiBudWxsPT10aGlzLmRvbWFpbj9udWxsOnAodGhpcy5kb21haW4pfWNkb21haW4oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWxpemVkRG9tYWluKCl9fWZ1bmN0aW9uIFdlKEplKXtpZihudWxsIT1KZSl7Y29uc3QgbHQ9''@;'; put 'put ''SmUudG9Mb3dlckNhc2UoKTtzd2l0Y2gobHQpe2Nhc2UgRy5TVFJJQ1Q6Y2FzZSBHLlNJTEVOVDpjYXNlIEcuRElTQUJMRUQ6cmV0dXJuIGx0fX1yZXR1cm4gRy5TSUxFTlR9QmUuY29va2llc0NyZWF0ZWQ9MCxCZS5wYXJzZT1kZSxCZS5mcm9tSlNPTj14ZSxCZS5zZXJpYWxpemFibGVQcm9w''@;'; put 'put ''ZXJ0aWVzPU9iamVjdC5rZXlzKE9lKSxCZS5zYW1lU2l0ZUxldmVsPXtzdHJpY3Q6MyxsYXg6Mixub25lOjF9LEJlLnNhbWVTaXRlQ2Fub25pY2FsPXtzdHJpY3Q6IlN0cmljdCIsbGF4OiJMYXgifTtjbGFzcyBLZXtjb25zdHJ1Y3RvcihsdCxQZT17cmVqZWN0UHVibGljU3VmZml4ZXM6ITB9''@;'; put 'put ''KXsiYm9vbGVhbiI9PXR5cGVvZiBQZSYmKFBlPXtyZWplY3RQdWJsaWNTdWZmaXhlczpQZX0pLFYudmFsaWRhdGUoVi5pc09iamVjdChQZSksUGUpLHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXM9UGUucmVqZWN0UHVibGljU3VmZml4ZXMsdGhpcy5lbmFibGVMb29zZU1vZGU9ISFQZS5sb29z''@;'; put 'put ''ZU1vZGUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW49ImJvb2xlYW4iIT10eXBlb2YgUGUuYWxsb3dTcGVjaWFsVXNlRG9tYWlufHxQZS5hbGxvd1NwZWNpYWxVc2VEb21haW4sdGhpcy5zdG9yZT1sdHx8bmV3IEUsdGhpcy5wcmVmaXhTZWN1cml0eT1XZShQZS5wcmVmaXhTZWN1cml0eSks''@;'; put 'put ''dGhpcy5fY2xvbmVTeW5jPVllKCJjbG9uZSIpLHRoaXMuX2ltcG9ydENvb2tpZXNTeW5jPVllKCJfaW1wb3J0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llc1N5bmM9WWUoImdldENvb2tpZXMiKSx0aGlzLmdldENvb2tpZVN0cmluZ1N5bmM9WWUoImdldENvb2tpZVN0cmluZyIpLHRoaXMuZ2V0''@;'; put 'put ''U2V0Q29va2llU3RyaW5nc1N5bmM9WWUoImdldFNldENvb2tpZVN0cmluZ3MiKSx0aGlzLnJlbW92ZUFsbENvb2tpZXNTeW5jPVllKCJyZW1vdmVBbGxDb29raWVzIiksdGhpcy5zZXRDb29raWVTeW5jPVllKCJzZXRDb29raWUiKSx0aGlzLnNlcmlhbGl6ZVN5bmM9WWUoInNlcmlhbGl6ZSIp''@;'; put 'put ''fXNldENvb2tpZShsdCxQZSxiZSxBZSl7bGV0IFRlO2lmKFYudmFsaWRhdGUoVi5pc05vbkVtcHR5U3RyaW5nKFBlKSxBZSxiZSksVi5pc0Z1bmN0aW9uKFBlKSlyZXR1cm4oQWU9UGUpKG5ldyBFcnJvcigiTm8gVVJMIHdhcyBzcGVjaWZpZWQiKSk7Y29uc3QgcWU9RmUoUGUpO2lmKFYuaXNG''@;'; put 'put ''dW5jdGlvbihiZSkmJihBZT1iZSxiZT17fSksVi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oQWUpLEFlKSwhVi5pc05vbkVtcHR5U3RyaW5nKGx0KSYmIVYuaXNPYmplY3QobHQpJiZsdCBpbnN0YW5jZW9mIFN0cmluZyYmMD09bHQubGVuZ3RoKXJldHVybiBBZShudWxsKTtjb25zdCBYZT1wKHFl''@;'; put 'put ''Lmhvc3RuYW1lKSxVZT1iZS5sb29zZXx8dGhpcy5lbmFibGVMb29zZU1vZGU7bGV0IGh0PW51bGw7aWYoYmUuc2FtZVNpdGVDb250ZXh0JiYoaHQ9Y2UoYmUuc2FtZVNpdGVDb250ZXh0KSwhaHQpKXJldHVybiBBZShuZXcgRXJyb3IodWUpKTtpZigic3RyaW5nIj09dHlwZW9mIGx0fHxsdCBp''@;'; put 'put ''bnN0YW5jZW9mIFN0cmluZyl7aWYoIShsdD1CZS5wYXJzZShsdCx7bG9vc2U6VWV9KSkpcmV0dXJuIFRlPW5ldyBFcnJvcigiQ29va2llIGZhaWxlZCB0byBwYXJzZSIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpfWVsc2UgaWYoIShsdCBpbnN0YW5jZW9mIEJlKSlyZXR1cm4gVGU9bmV3''@;'; put 'put ''IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBzZXRDb29raWUgbXVzdCBiZSBhIENvb2tpZSBvYmplY3Qgb3Igc3RyaW5nIiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7Y29uc3QgTWU9YmUubm93fHxuZXcgRGF0ZTtpZih0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzJiZsdC5kb21haW4m''@;'; put 'put ''Jm51bGw9PUkuZ2V0UHVibGljU3VmZml4KGx0LmNkb21haW4oKSx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLGlnbm9yZUVycm9yOmJlLmlnbm9yZUVycm9yfSkmJiFILnRlc3QobHQuZG9tYWluKSlyZXR1cm4gVGU9bmV3IEVycm9yKCJDb29raWUg''@;'; put 'put ''aGFzIGRvbWFpbiBzZXQgdG8gYSBwdWJsaWMgc3VmZml4IiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7aWYobHQuZG9tYWluKXtpZighdyhYZSxsdC5jZG9tYWluKCksITEpKXJldHVybiBUZT1uZXcgRXJyb3IoYENvb2tpZSBub3QgaW4gdGhpcyBob3N0J3MgZG9tYWluLiBDb29raWU6''@;'; put 'put ''JHtsdC5jZG9tYWluKCl9IFJlcXVlc3Q6JHtYZX1gKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOlRlKTtudWxsPT1sdC5ob3N0T25seSYmKGx0Lmhvc3RPbmx5PSExKX1lbHNlIGx0Lmhvc3RPbmx5PSEwLGx0LmRvbWFpbj1YZTtpZihsdC5wYXRoJiYiLyI9PT1sdC5wYXRoWzBdfHwobHQucGF0''@;'; put 'put ''aD1KKHFlLnBhdGhuYW1lKSxsdC5wYXRoSXNEZWZhdWx0PSEwKSwhMT09PWJlLmh0dHAmJmx0Lmh0dHBPbmx5KXJldHVybiBUZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpO2lmKCJu''@;'; put 'put ''b25lIiE9PWx0LnNhbWVTaXRlJiZ2b2lkIDAhPT1sdC5zYW1lU2l0ZSYmaHQmJiJub25lIj09PWh0KXJldHVybiBUZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBTYW1lU2l0ZSBidXQgdGhpcyBpcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7Y29u''@;'; put 'put ''c3QgRGU9dGhpcy5wcmVmaXhTZWN1cml0eT09PUcuU0lMRU5UO2lmKHRoaXMucHJlZml4U2VjdXJpdHkhPT1HLkRJU0FCTEVEKXtsZXQgaXQsdXQ9ITE7aWYoVi52YWxpZGF0ZShWLmlzT2JqZWN0KE10PWx0KSxNdCksIU10LmtleS5zdGFydHNXaXRoKCJfX1NlY3VyZS0iKXx8TXQuc2VjdXJl''@;'; put 'put ''P2Z1bmN0aW9uKE10KXtyZXR1cm4gVi52YWxpZGF0ZShWLmlzT2JqZWN0KE10KSksIU10LmtleS5zdGFydHNXaXRoKCJfX0hvc3QtIil8fE10LnNlY3VyZSYmTXQuaG9zdE9ubHkmJm51bGwhPU10LnBhdGgmJiIvIj09PU10LnBhdGh9KGx0KXx8KHV0PSEwLGl0PSJDb29raWUgaGFzIF9fSG9z''@;'; put 'put ''dCBwcmVmaXggYnV0IGVpdGhlciBTZWN1cmUgb3IgSG9zdE9ubHkgYXR0cmlidXRlIGlzIG5vdCBzZXQgb3IgUGF0aCBpcyBub3QgJy8nIik6KHV0PSEwLGl0PSJDb29raWUgaGFzIF9fU2VjdXJlIHByZWZpeCBidXQgU2VjdXJlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0IiksdXQpcmV0dXJuIEFl''@;'; put 'put ''KGJlLmlnbm9yZUVycm9yfHxEZT9udWxsOm5ldyBFcnJvcihpdCkpfXZhciBNdDtjb25zdCB6ZT10aGlzLnN0b3JlO3plLnVwZGF0ZUNvb2tpZXx8KHplLnVwZGF0ZUNvb2tpZT1mdW5jdGlvbihpdCx1dCxNdCl7dGhpcy5wdXRDb29raWUodXQsTXQpfSksemUuZmluZENvb2tpZShsdC5kb21h''@;'; put 'put ''aW4sbHQucGF0aCxsdC5rZXksZnVuY3Rpb24oaXQsdXQpe2lmKGl0KXJldHVybiBBZShpdCk7Y29uc3QgTXQ9ZnVuY3Rpb24oSHQpe2lmKEh0KXJldHVybiBBZShIdCk7QWUobnVsbCxsdCl9O2lmKHV0KXtpZighMT09PWJlLmh0dHAmJnV0Lmh0dHBPbmx5KXJldHVybiBpdD1uZXcgRXJyb3Io''@;'; put 'put ''Im9sZCBDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOml0KTtsdC5jcmVhdGlvbj11dC5jcmVhdGlvbixsdC5jcmVhdGlvbkluZGV4PXV0LmNyZWF0aW9uSW5kZXgsbHQubGFzdEFjY2Vzc2VkPU1lLHplLnVwZGF0''@;'; put 'put ''ZUNvb2tpZSh1dCxsdCxNdCl9ZWxzZSBsdC5jcmVhdGlvbj1sdC5sYXN0QWNjZXNzZWQ9TWUsemUucHV0Q29va2llKGx0LE10KX0pfWdldENvb2tpZXMobHQsUGUsYmUpe1YudmFsaWRhdGUoVi5pc05vbkVtcHR5U3RyaW5nKGx0KSxiZSxsdCk7Y29uc3QgQWU9RmUobHQpO1YuaXNGdW5jdGlv''@;'; put 'put ''bihQZSkmJihiZT1QZSxQZT17fSksVi52YWxpZGF0ZShWLmlzT2JqZWN0KFBlKSxiZSxQZSksVi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oYmUpLGJlKTtjb25zdCBUZT1wKEFlLmhvc3RuYW1lKSxxZT1BZS5wYXRobmFtZXx8Ii8iO2xldCBYZT1QZS5zZWN1cmU7bnVsbCE9WGV8fCFBZS5wcm90''@;'; put 'put ''b2NvbHx8Imh0dHBzOiIhPUFlLnByb3RvY29sJiYid3NzOiIhPUFlLnByb3RvY29sfHwoWGU9ITApO2xldCBVZT0wO2lmKFBlLnNhbWVTaXRlQ29udGV4dCl7Y29uc3QgTXQ9Y2UoUGUuc2FtZVNpdGVDb250ZXh0KTtpZihVZT1CZS5zYW1lU2l0ZUxldmVsW010XSwhVWUpcmV0dXJuIGJlKG5l''@;'; put 'put ''dyBFcnJvcih1ZSkpfWxldCBodD1QZS5odHRwO251bGw9PWh0JiYoaHQ9ITApO2NvbnN0IE1lPVBlLm5vd3x8RGF0ZS5ub3coKSxEZT0hMSE9PVBlLmV4cGlyZSx6ZT0hIVBlLmFsbFBhdGhzLGl0PXRoaXMuc3RvcmU7ZnVuY3Rpb24gdXQoTXQpe2lmKE10Lmhvc3RPbmx5KXtpZihNdC5kb21h''@;'; put 'put ''aW4hPVRlKXJldHVybiExfWVsc2UgaWYoIXcoVGUsTXQuZG9tYWluLCExKSlyZXR1cm4hMTtyZXR1cm4hKCF6ZSYmIWoocWUsTXQucGF0aCl8fE10LnNlY3VyZSYmIVhlfHxNdC5odHRwT25seSYmIWh0fHxVZSYmQmUuc2FtZVNpdGVMZXZlbFtNdC5zYW1lU2l0ZXx8Im5vbmUiXT5VZXx8RGUm''@;'; put 'put ''Jk10LmV4cGlyeVRpbWUoKTw9TWUmJihpdC5yZW1vdmVDb29raWUoTXQuZG9tYWluLE10LnBhdGgsTXQua2V5LCgpPT57fSksMSkpfWl0LmZpbmRDb29raWVzKFRlLHplP251bGw6cWUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4sKE10LEh0KT0+e2lmKE10KXJldHVybiBiZShNdCk7SHQ9''@;'; put 'put ''SHQuZmlsdGVyKHV0KSwhMSE9PVBlLnNvcnQmJihIdD1IdC5zb3J0KExlKSk7Y29uc3QgUHQ9bmV3IERhdGU7Zm9yKGNvbnN0IG9uIG9mIEh0KW9uLmxhc3RBY2Nlc3NlZD1QdDtiZShudWxsLEh0KX0pfWdldENvb2tpZVN0cmluZyguLi5sdCl7Y29uc3QgUGU9bHQucG9wKCk7Vi52YWxpZGF0''@;'; put 'put ''ZShWLmlzRnVuY3Rpb24oUGUpLFBlKSxsdC5wdXNoKGZ1bmN0aW9uKGJlLEFlKXtiZT9QZShiZSk6UGUobnVsbCxBZS5zb3J0KExlKS5tYXAoVGU9PlRlLmNvb2tpZVN0cmluZygpKS5qb2luKCI7ICIpKX0pLHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLGx0KX1nZXRTZXRDb29raWVTdHJp''@;'; put 'put ''bmdzKC4uLmx0KXtjb25zdCBQZT1sdC5wb3AoKTtWLnZhbGlkYXRlKFYuaXNGdW5jdGlvbihQZSksUGUpLGx0LnB1c2goZnVuY3Rpb24oYmUsQWUpe2JlP1BlKGJlKTpQZShudWxsLEFlLm1hcChUZT0+VGUudG9TdHJpbmcoKSkpfSksdGhpcy5nZXRDb29raWVzLmFwcGx5KHRoaXMsbHQpfXNl''@;'; put 'put ''cmlhbGl6ZShsdCl7Vi52YWxpZGF0ZShWLmlzRnVuY3Rpb24obHQpLGx0KTtsZXQgUGU9dGhpcy5zdG9yZS5jb25zdHJ1Y3Rvci5uYW1lO1YuaXNPYmplY3QoUGUpJiYoUGU9bnVsbCk7Y29uc3QgYmU9e3ZlcnNpb246YHRvdWdoLWNvb2tpZUAke0J9YCxzdG9yZVR5cGU6UGUscmVqZWN0UHVi''@;'; put 'put ''bGljU3VmZml4ZXM6ISF0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGVuYWJsZUxvb3NlTW9kZTohIXRoaXMuZW5hYmxlTG9vc2VNb2RlLGFsbG93U3BlY2lhbFVzZURvbWFpbjohIXRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLHByZWZpeFNlY3VyaXR5OldlKHRoaXMucHJlZml4U2VjdXJp''@;'; put 'put ''dHkpLGNvb2tpZXM6W119O2lmKCF0aGlzLnN0b3JlLmdldEFsbENvb2tpZXN8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnN0b3JlLmdldEFsbENvb2tpZXMpcmV0dXJuIGx0KG5ldyBFcnJvcigic3RvcmUgZG9lcyBub3Qgc3VwcG9ydCBnZXRBbGxDb29raWVzIGFuZCBjYW5ub3QgYmUgc2Vy''@;'; put 'put ''aWFsaXplZCIpKTt0aGlzLnN0b3JlLmdldEFsbENvb2tpZXMoKEFlLFRlKT0+QWU/bHQoQWUpOihiZS5jb29raWVzPVRlLm1hcChxZT0+KGRlbGV0ZShxZT1xZSBpbnN0YW5jZW9mIEJlP3FlLnRvSlNPTigpOnFlKS5jcmVhdGlvbkluZGV4LHFlKSksbHQobnVsbCxiZSkpKX10b0pTT04oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5zZXJpYWxpemVTeW5jKCl9X2ltcG9ydENvb2tpZXMobHQsUGUpe2xldCBiZT1sdC5jb29raWVzO2lmKCFiZXx8IUFycmF5LmlzQXJyYXkoYmUpKXJldHVybiBQZShuZXcgRXJyb3IoInNlcmlhbGl6ZWQgamFyIGhhcyBubyBjb29raWVzIGFycmF5IikpO2JlPWJlLnNsaWNl''@;'; put 'put ''KCk7Y29uc3QgQWU9VGU9PntpZihUZSlyZXR1cm4gUGUoVGUpO2lmKCFiZS5sZW5ndGgpcmV0dXJuIFBlKFRlLHRoaXMpO2xldCBxZTt0cnl7cWU9eGUoYmUuc2hpZnQoKSl9Y2F0Y2goWGUpe3JldHVybiBQZShYZSl9aWYobnVsbD09PXFlKXJldHVybiBBZShudWxsKTt0aGlzLnN0b3JlLnB1''@;'; put 'put ''dENvb2tpZShxZSxBZSl9O0FlKCl9Y2xvbmUobHQsUGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYoUGU9bHQsbHQ9bnVsbCksdGhpcy5zZXJpYWxpemUoKGJlLEFlKT0+e2lmKGJlKXJldHVybiBQZShiZSk7S2UuZGVzZXJpYWxpemUoQWUsbHQsUGUpfSl9Y2xvbmVTeW5jKGx0KXtpZigwPT09''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKCk7aWYoIWx0LnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIGNsb25lIGRlc3RpbmF0aW9uIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiB0''@;'; put 'put ''aGlzLl9jbG9uZVN5bmMobHQpfXJlbW92ZUFsbENvb2tpZXMobHQpe1YudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKGx0KSxsdCk7Y29uc3QgUGU9dGhpcy5zdG9yZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUGUucmVtb3ZlQWxsQ29va2llcyYmUGUucmVtb3ZlQWxsQ29va2llcyE9PWsucHJvdG90''@;'; put 'put ''eXBlLnJlbW92ZUFsbENvb2tpZXMpcmV0dXJuIFBlLnJlbW92ZUFsbENvb2tpZXMobHQpO1BlLmdldEFsbENvb2tpZXMoKGJlLEFlKT0+e2lmKGJlKXJldHVybiBsdChiZSk7aWYoMD09PUFlLmxlbmd0aClyZXR1cm4gbHQobnVsbCk7bGV0IFRlPTA7Y29uc3QgcWU9W107ZnVuY3Rpb24gWGUo''@;'; put 'put ''VWUpe2lmKFVlJiZxZS5wdXNoKFVlKSxUZSsrLFRlPT09QWUubGVuZ3RoKXJldHVybiBsdChxZS5sZW5ndGg/cWVbMF06bnVsbCl9QWUuZm9yRWFjaChVZT0+e1BlLnJlbW92ZUNvb2tpZShVZS5kb21haW4sVWUucGF0aCxVZS5rZXksWGUpfSl9KX1zdGF0aWMgZGVzZXJpYWxpemUobHQsUGUs''@;'; put 'put ''YmUpe2xldCBBZTtpZigzIT09YXJndW1lbnRzLmxlbmd0aCYmKGJlPVBlLFBlPW51bGwpLFYudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKGJlKSxiZSksInN0cmluZyI9PXR5cGVvZiBsdCl7aWYoQWU9ZmUobHQpLEFlIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIGJlKEFlKX1lbHNlIEFlPWx0O2Nv''@;'; put 'put ''bnN0IFRlPW5ldyBLZShQZSx7cmVqZWN0UHVibGljU3VmZml4ZXM6QWUucmVqZWN0UHVibGljU3VmZml4ZXMsbG9vc2VNb2RlOkFlLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46QWUuYWxsb3dTcGVjaWFsVXNlRG9tYWluLHByZWZpeFNlY3VyaXR5OkFlLnByZWZpeFNl''@;'; put 'put ''Y3VyaXR5fSk7VGUuX2ltcG9ydENvb2tpZXMoQWUscWU9PntpZihxZSlyZXR1cm4gYmUocWUpO2JlKG51bGwsVGUpfSl9c3RhdGljIGRlc2VyaWFsaXplU3luYyhsdCxQZSl7Y29uc3QgYmU9InN0cmluZyI9PXR5cGVvZiBsdD9KU09OLnBhcnNlKGx0KTpsdCxBZT1uZXcgS2UoUGUse3JlamVj''@;'; put 'put ''dFB1YmxpY1N1ZmZpeGVzOmJlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpiZS5lbmFibGVMb29zZU1vZGV9KTtpZighQWUuc3RvcmUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGlu''@;'; put 'put ''c3RlYWQuIik7cmV0dXJuIEFlLl9pbXBvcnRDb29raWVzU3luYyhiZSksQWV9fWZ1bmN0aW9uIFllKEplKXtyZXR1cm4gZnVuY3Rpb24oLi4ubHQpe2lmKCF0aGlzLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsg''@;'; put 'put ''dXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO2xldCBQZSxiZTtpZih0aGlzW0plXSguLi5sdCwoQWUsVGUpPT57UGU9QWUsYmU9VGV9KSxQZSl0aHJvdyBQZTtyZXR1cm4gYmV9fUtlLmZyb21KU09OPUtlLmRlc2VyaWFsaXplU3luYyxbIl9pbXBvcnRDb29raWVzIiwiY2xvbmUiLCJnZXRDb29r''@;'; put 'put ''aWVzIiwiZ2V0Q29va2llU3RyaW5nIiwiZ2V0U2V0Q29va2llU3RyaW5ncyIsInJlbW92ZUFsbENvb2tpZXMiLCJzZXJpYWxpemUiLCJzZXRDb29raWUiXS5mb3JFYWNoKEplPT57S2UucHJvdG90eXBlW0plXT1ZKEtlLnByb3RvdHlwZVtKZV0pfSksS2UuZGVzZXJpYWxpemU9WShLZS5kZXNl''@;'; put 'put ''cmlhbGl6ZSksTy52ZXJzaW9uPUIsTy5Db29raWVKYXI9S2UsTy5Db29raWU9QmUsTy5TdG9yZT1rLE8uTWVtb3J5Q29va2llU3RvcmU9RSxPLnBhcnNlRGF0ZT1TLE8uZm9ybWF0RGF0ZT12LE8ucGFyc2U9ZGUsTy5mcm9tSlNPTj14ZSxPLmRvbWFpbk1hdGNoPXcsTy5kZWZhdWx0UGF0aD1K''@;'; put 'put ''LE8ucGF0aE1hdGNoPWosTy5nZXRQdWJsaWNTdWZmaXg9SS5nZXRQdWJsaWNTdWZmaXgsTy5jb29raWVDb21wYXJlPUxlLE8ucGVybXV0ZURvbWFpbj1SKDczMjQpLnBlcm11dGVEb21haW4sTy5wZXJtdXRlUGF0aD1mdW5jdGlvbihKZSl7aWYoVi52YWxpZGF0ZShWLmlzU3RyaW5nKEplKSks''@;'; put 'put ''Ii8iPT09SmUpcmV0dXJuWyIvIl07Y29uc3QgbHQ9W0plXTtmb3IoO0plLmxlbmd0aD4xOyl7Y29uc3QgUGU9SmUubGFzdEluZGV4T2YoIi8iKTtpZigwPT09UGUpYnJlYWs7SmU9SmUuc3Vic3RyKDAsUGUpLGx0LnB1c2goSmUpfXJldHVybiBsdC5wdXNoKCIvIiksbHR9LE8uY2Fub25pY2Fs''@;'; put 'put ''RG9tYWluPXAsTy5QcmVmaXhTZWN1cml0eUVudW09RyxPLlBhcmFtZXRlckVycm9yPVYuUGFyYW1ldGVyRXJyb3J9LDU3NjE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtmcm9tQ2FsbGJhY2s6en09Uig3MDQxKSxLPVIoMjIyNCkueSxJPVIoNzMyNCkucGVybXV0ZURvbWFpbixrPVIo''@;'; put 'put ''ODk3MSkuVSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpFLGdldFV0aWxJbnNwZWN0Omp9PVIoMTI2OSk7Y2xhc3MgViBleHRlbmRzIEt7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc3luY2hyb25vdXM9ITAsdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBYPUUoKTtYJiYo''@;'; put 'put ''dGhpc1tYXT10aGlzLmluc3BlY3QpfWluc3BlY3QoKXtyZXR1cm5geyBpZHg6ICR7aihCKSh0aGlzLmlkeCwhMSwyKX0gfWB9ZmluZENvb2tpZShYLFUscSxlZSl7cmV0dXJuIGVlKG51bGwsdGhpcy5pZHhbWF0mJnRoaXMuaWR4W1hdW1VdP3RoaXMuaWR4W1hdW1VdW3FdfHxudWxsOnZvaWQg''@;'; put 'put ''MCl9ZmluZENvb2tpZXMoWCxVLHEsZWUpe2NvbnN0IHRlPVtdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBxJiYoZWU9cSxxPSEwKSwhWClyZXR1cm4gZWUobnVsbCxbXSk7bGV0IG9lO29lPVU/ZnVuY3Rpb24odWUpe09iamVjdC5rZXlzKHVlKS5mb3JFYWNoKGNlPT57aWYoayhVLGNlKSl7Y29u''@;'; put 'put ''c3QgRz11ZVtjZV07Zm9yKGNvbnN0IGIgaW4gRyl0ZS5wdXNoKEdbYl0pfX0pfTpmdW5jdGlvbih1ZSl7Zm9yKGNvbnN0IGNlIGluIHVlKXtjb25zdCBHPXVlW2NlXTtmb3IoY29uc3QgYiBpbiBHKXRlLnB1c2goR1tiXSl9fTtjb25zdCBzZT1JKFgscSl8fFtYXSxoZT10aGlzLmlkeDtzZS5m''@;'; put 'put ''b3JFYWNoKHVlPT57Y29uc3QgY2U9aGVbdWVdO2NlJiZvZShjZSl9KSxlZShudWxsLHRlKX1wdXRDb29raWUoWCxVKXt0aGlzLmlkeFtYLmRvbWFpbl18fCh0aGlzLmlkeFtYLmRvbWFpbl09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbWC5kb21haW5dW1gucGF0aF18fCh0aGlzLmlk''@;'; put 'put ''eFtYLmRvbWFpbl1bWC5wYXRoXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtYLmRvbWFpbl1bWC5wYXRoXVtYLmtleV09WCxVKG51bGwpfXVwZGF0ZUNvb2tpZShYLFUscSl7dGhpcy5wdXRDb29raWUoVSxxKX1yZW1vdmVDb29raWUoWCxVLHEsZWUpe3RoaXMuaWR4W1hdJiZ0aGlz''@;'; put 'put ''LmlkeFtYXVtVXSYmdGhpcy5pZHhbWF1bVV1bcV0mJmRlbGV0ZSB0aGlzLmlkeFtYXVtVXVtxXSxlZShudWxsKX1yZW1vdmVDb29raWVzKFgsVSxxKXtyZXR1cm4gdGhpcy5pZHhbWF0mJihVP2RlbGV0ZSB0aGlzLmlkeFtYXVtVXTpkZWxldGUgdGhpcy5pZHhbWF0pLHEobnVsbCl9cmVtb3Zl''@;'; put 'put ''QWxsQ29va2llcyhYKXtyZXR1cm4gdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKSxYKG51bGwpfWdldEFsbENvb2tpZXMoWCl7Y29uc3QgVT1bXSxxPXRoaXMuaWR4O09iamVjdC5rZXlzKHEpLmZvckVhY2goZWU9PntPYmplY3Qua2V5cyhxW2VlXSkuZm9yRWFjaCh0ZT0+e09iamVjdC5r''@;'; put 'put ''ZXlzKHFbZWVdW3RlXSkuZm9yRWFjaChvZT0+e251bGwhPT1vZSYmVS5wdXNoKHFbZWVdW3RlXVtvZV0pfSl9KX0pLFUuc29ydCgoZWUsdGUpPT4oZWUuY3JlYXRpb25JbmRleHx8MCktKHRlLmNyZWF0aW9uSW5kZXh8fDApKSxYKG51bGwsVSl9fWZ1bmN0aW9uIEIoWSl7Y29uc3QgWD1PYmpl''@;'; put 'put ''Y3Qua2V5cyhZKTtpZigwPT09WC5sZW5ndGgpcmV0dXJuIltPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7fSI7bGV0IFU9IltPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG4iO3JldHVybiBPYmplY3Qua2V5cyhZKS5mb3JFYWNoKChxLGVlKT0+e1UrPWZ1bmN0aW9uKHRlLG9lKXtsZXQgaGU9''@;'; put 'put ''YCAgJyR7dGV9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKG9lKS5mb3JFYWNoKCh1ZSxjZSxHKT0+e2hlKz1mdW5jdGlvbihiLEQpe2NvbnN0IEg9IiAgICAiO2xldCBOPWAke0h9JyR7Yn0nOiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xu''@;'; put 'put ''YDtyZXR1cm4gT2JqZWN0LmtleXMoRCkuZm9yRWFjaCgoZyxDLFMpPT57Tis9YCAgICAgICR7Z306ICR7RFtnXS5pbnNwZWN0KCl9YCxDPFMubGVuZ3RoLTEmJihOKz0iLCIpLE4rPSJcbiJ9KSxOKz1gJHtIfX1gLE59KHVlLG9lW3VlXSksY2U8Ry5sZW5ndGgtMSYmKGhlKz0iLCIpLGhlKz0i''@;'; put 'put ''XG4ifSksaGUrPSIgIH0iLGhlfShxLFlbcV0pLGVlPFgubGVuZ3RoLTEmJihVKz0iLCIpLFUrPSJcbiJ9KSxVKz0ifSIsVX1bImZpbmRDb29raWUiLCJmaW5kQ29va2llcyIsInB1dENvb2tpZSIsInVwZGF0ZUNvb2tpZSIsInJlbW92ZUNvb2tpZSIsInJlbW92ZUNvb2tpZXMiLCJyZW1vdmVB''@;'; put 'put ''bGxDb29raWVzIiwiZ2V0QWxsQ29va2llcyJdLmZvckVhY2goWT0+e1YucHJvdG90eXBlW1ldPXooVi5wcm90b3R5cGVbWV0pfSksTy5tPVZ9LDg5NzE6KE0sTyk9PnsidXNlIHN0cmljdCI7Ty5VPWZ1bmN0aW9uKFIseil7cmV0dXJuIHo9PT1SfHwwPT09Ui5pbmRleE9mKHopJiYoIi8iPT09''@;'; put 'put ''ei5zdWJzdHIoLTEpfHwiLyI9PT1SLnN1YnN0cih6Lmxlbmd0aCwxKSl9fSw3MzI0OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc1Mik7Ty5wZXJtdXRlRG9tYWluPWZ1bmN0aW9uKEssSSl7Y29uc3Qgaz16LmdldFB1YmxpY1N1ZmZpeChLLHthbGxvd1NwZWNpYWxVc2VEb21h''@;'; put 'put ''aW46SX0pO2lmKCFrKXJldHVybiBudWxsO2lmKGs9PUspcmV0dXJuW0tdOyIuIj09Sy5zbGljZSgtMSkmJihLPUsuc2xpY2UoMCwtMSkpO2NvbnN0IEU9Sy5zbGljZSgwLC0oay5sZW5ndGgrMSkpLnNwbGl0KCIuIikucmV2ZXJzZSgpO2xldCBqPWs7Y29uc3QgVj1bal07Zm9yKDtFLmxlbmd0''@;'; put 'put ''aDspaj1gJHtFLnNoaWZ0KCl9LiR7an1gLFYucHVzaChqKTtyZXR1cm4gVn19LDc1MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig2MjQ0KSxLPVsibG9jYWwiLCJleGFtcGxlIiwiaW52YWxpZCIsImxvY2FsaG9zdCIsInRlc3QiXSxJPVsibG9jYWxob3N0IiwiaW52YWxpZCJd''@;'; put 'put ''O08uZ2V0UHVibGljU3VmZml4PWZ1bmN0aW9uKGssRT17fSl7Y29uc3Qgaj1rLnNwbGl0KCIuIiksVj1qW2oubGVuZ3RoLTFdLFk9ISFFLmlnbm9yZUVycm9yO2lmKEUuYWxsb3dTcGVjaWFsVXNlRG9tYWluJiZLLmluY2x1ZGVzKFYpKXtpZihqLmxlbmd0aD4xKXJldHVybmAke2pbai5sZW5n''@;'; put 'put ''dGgtMl19LiR7Vn1gO2lmKEkuaW5jbHVkZXMoVikpcmV0dXJuYCR7Vn1gfWlmKCFZJiZLLmluY2x1ZGVzKFYpKXRocm93IG5ldyBFcnJvcihgQ29va2llIGhhcyBkb21haW4gc2V0IHRvIHRoZSBwdWJsaWMgc3VmZml4ICIke1Z9IiB3aGljaCBpcyBhIHNwZWNpYWwgdXNlIGRvbWFpbi4gVG8g''@;'; put 'put ''YWxsb3cgdGhpcywgY29uZmlndXJlIHlvdXIgQ29va2llSmFyIHdpdGgge2FsbG93U3BlY2lhbFVzZURvbWFpbjp0cnVlLCByZWplY3RQdWJsaWNTdWZmaXhlczogZmFsc2V9LmApO3JldHVybiB6LmdldChrKX19LDIyMjQ6KE0sTyk9PnsidXNlIHN0cmljdCI7Ty55PWNsYXNze2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7dGhpcy5zeW5jaHJvbm91cz0hMX1maW5kQ29va2llKFIseixLLEkpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1maW5kQ29va2llcyhSLHosSyxJKXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIp''@;'; put 'put ''fXB1dENvb2tpZShSLHope3Rocm93IG5ldyBFcnJvcigicHV0Q29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXVwZGF0ZUNvb2tpZShSLHosSyl7dGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llKFIseixLLEkpe3Rocm93IG5l''@;'; put 'put ''dyBFcnJvcigicmVtb3ZlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tpZXMoUix6LEspe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVBbGxDb29raWVzKFIpe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQWxsQ29v''@;'; put 'put ''a2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1nZXRBbGxDb29raWVzKFIpe3Rocm93IG5ldyBFcnJvcigiZ2V0QWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQgKHRoZXJlZm9yZSBqYXIgY2Fubm90IGJlIHNlcmlhbGl6ZWQpIil9fX0sMTI2OTooTSxPLFIpPT57ZnVuY3Rpb24geigpe3Ry''@;'; put 'put ''eXtyZXR1cm4gUig5NTM5KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSygpe3JldHVybiBTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpfU8uZ2V0VXRpbEluc3BlY3Q9ZnVuY3Rpb24oSSxrPXt9KXtjb25zdCBFPShrLnJlcXVpcmVVdGlsfHx6KSgpO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihqLFYsQil7cmV0dXJuIEU/RS5pbnNwZWN0KGosVixCKTpJKGopfX0sTy5nZXRDdXN0b21JbnNwZWN0U3ltYm9sPWZ1bmN0aW9uKEk9e30pe3JldHVybihJLmxvb2t1cEN1c3RvbUluc3BlY3RTeW1ib2x8fEspKCl8fGZ1bmN0aW9uKGspe2NvbnN0IEU9KGsucmVxdWlyZVV0''@;'; put 'put ''aWx8fHopKCk7cmV0dXJuIEU/RS5pbnNwZWN0LmN1c3RvbTpudWxsfShJKX19LDc2NTI6KE0sTyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUihrKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yga31mdW5jdGlvbiB6KGspe3JldHVybiJzdHJpbmciPT10eXBlb2Yga3x8ayBpbnN0YW5jZW9m''@;'; put 'put ''IFN0cmluZ31mdW5jdGlvbiBLKGspe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09dG9TdHJpbmcuY2FsbChrKX1jbGFzcyBJIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoLi4uRSl7c3VwZXIoLi4uRSl9fU8uUGFyYW1ldGVyRXJyb3I9SSxPLmlzRnVuY3Rpb249UixPLmlzTm9uRW1wdHlT''@;'; put 'put ''dHJpbmc9ZnVuY3Rpb24oayl7cmV0dXJuIHooaykmJiIiIT09a30sTy5pc0RhdGU9ZnVuY3Rpb24oayl7cmV0dXJuIGZ1bmN0aW9uKEUsail7dHJ5e3JldHVybiBFIGluc3RhbmNlb2Ygan1jYXRjaHtyZXR1cm4hMX19KGssRGF0ZSkmJiJudW1iZXIiPT10eXBlb2YoRT1rLmdldFRpbWUoKSkm''@;'; put 'put ''JkUlMT09MDt2YXIgRX0sTy5pc0VtcHR5U3RyaW5nPWZ1bmN0aW9uKGspe3JldHVybiIiPT09a3x8ayBpbnN0YW5jZW9mIFN0cmluZyYmIiI9PT1rLnRvU3RyaW5nKCl9LE8uaXNTdHJpbmc9eixPLmlzT2JqZWN0PUssTy52YWxpZGF0ZT1mdW5jdGlvbihrLEUsail7aWYoUihFKXx8KGo9RSxF''@;'; put 'put ''PW51bGwpLEsoail8fChqPXtFcnJvcjoiRmFpbGVkIENoZWNrIn0pLCFrKXtpZighRSl0aHJvdyBuZXcgSShqKTtFKG5ldyBJKGopKX19fSw0NTY6TT0+e00uZXhwb3J0cz0iNC4xLjMifSw3MDQxOihNLE8pPT57InVzZSBzdHJpY3QiO08uZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKFIpe3JldHVy''@;'; put 'put ''biBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKCh6LEspPT57YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGhdPShJLGspPT57aWYoSSlyZXR1cm4gSyhJ''@;'; put 'put ''KTt6KGspfSxhcmd1bWVudHMubGVuZ3RoKyssUi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIm5hbWUiLHt2YWx1ZTpSLm5hbWV9KX0sTy5mcm9tUHJvbWlzZT1mdW5jdGlvbihSKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9u''@;'; put 'put ''KCl7Y29uc3Qgej1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeilyZXR1cm4gUi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLGFyZ3VtZW50cy5sZW5ndGgtLSxSLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKS50aGVuKEs9PnoobnVsbCxLKSx6KX0sIm5hbWUiLHt2YWx1ZTpSLm5hbWV9KX19LDY3MjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIHo9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oVil7''@;'; put 'put ''Zm9yKHZhciBCLFk9MSxYPWFyZ3VtZW50cy5sZW5ndGg7WTxYO1krKylmb3IodmFyIFUgaW4gQj1hcmd1bWVudHNbWV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsVSkmJihWW1VdPUJbVV0pO3JldHVybiBWfSx6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sSz10aGlz''@;'; put 'put ''JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVixCLFksWCl7cmV0dXJuIG5ldyhZfHwoWT1Qcm9taXNlKSkoZnVuY3Rpb24oVSxxKXtmdW5jdGlvbiBlZShzZSl7dHJ5e29lKFgubmV4dChzZSkpfWNhdGNoKGhlKXtxKGhlKX19ZnVuY3Rpb24gdGUoc2Upe3RyeXtvZShYLnRocm93KHNlKSl9''@;'; put 'put ''Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiBvZShzZSl7dmFyIGhlO3NlLmRvbmU/VShzZS52YWx1ZSk6KGhlPXNlLnZhbHVlLGhlIGluc3RhbmNlb2YgWT9oZTpuZXcgWShmdW5jdGlvbih1ZSl7dWUoaGUpfSkpLnRoZW4oZWUsdGUpfW9lKChYPVguYXBwbHkoVixCfHxbXSkpLm5leHQoKSl9''@;'; put 'put ''KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihWLEIpe3ZhciBZLFgsVSxxLGVlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlVbMF0pdGhyb3cgVVsxXTtyZXR1cm4gVVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBxPXtuZXh0OnRlKDApLHRocm93OnRlKDEp''@;'; put 'put ''LHJldHVybjp0ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscTtmdW5jdGlvbiB0ZShvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtyZXR1cm4gZnVuY3Rpb24oaGUpe2lmKFkpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZWU7KXRyeXtpZihZPTEsWCYmKFU9MiZoZVswXT9YLnJldHVybjpoZVswXT9YLnRocm93fHwoKFU9WC5yZXR1cm4pJiZVLmNhbGwoWCksMCk6WC5uZXh0KSYmIShVPVUuY2FsbChYLGhlWzFdKSkuZG9uZSlyZXR1''@;'; put 'put ''cm4gVTtzd2l0Y2goWD0wLFUmJihoZT1bMiZoZVswXSxVLnZhbHVlXSksaGVbMF0pe2Nhc2UgMDpjYXNlIDE6VT1oZTticmVhaztjYXNlIDQ6cmV0dXJuIGVlLmxhYmVsKysse3ZhbHVlOmhlWzFdLGRvbmU6ITF9O2Nhc2UgNTplZS5sYWJlbCsrLFg9aGVbMV0saGU9WzBdO2NvbnRpbnVlO2Nh''@;'; put 'put ''c2UgNzpoZT1lZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFU9KFU9ZWUudHJ5cykubGVuZ3RoPjAmJlVbVS5sZW5ndGgtMV0pfHw2IT09aGVbMF0mJjIhPT1oZVswXSkpe2VlPTA7Y29udGludWV9aWYoMz09PWhlWzBdJiYoIVV8fGhlWzFdPlVbMF0m''@;'; put 'put ''JmhlWzFdPFVbM10pKXtlZS5sYWJlbD1oZVsxXTticmVha31pZig2PT09aGVbMF0mJmVlLmxhYmVsPFVbMV0pe2VlLmxhYmVsPVVbMV0sVT1oZTticmVha31pZihVJiZlZS5sYWJlbDxVWzJdKXtlZS5sYWJlbD1VWzJdLGVlLm9wcy5wdXNoKGhlKTticmVha31VWzJdJiZlZS5vcHMucG9wKCks''@;'; put 'put ''ZWUudHJ5cy5wb3AoKTtjb250aW51ZX1oZT1CLmNhbGwoVixlZSl9Y2F0Y2godWUpe2hlPVs2LHVlXSxYPTB9ZmluYWxseXtZPVU9MH1pZig1JmhlWzBdKXRocm93IGhlWzFdO3JldHVybnt2YWx1ZTpoZVswXT9oZVsxXTp2b2lkIDAsZG9uZTohMH19KFtvZSxzZV0pfX19O09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkNvbnRleHRNYW5hZ2VyPXZvaWQgMDt2YXIgaz1SKDU5MjgpLEU9Uig5Nzc4KSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gVihCLFkpe3RoaXMuc2VydmVyVXJsPUIsdGhpcy5yZXF1ZXN0Q2xpZW50PVksdGhpcy5kZWZhdWx0''@;'; put 'put ''Q29tcHV0ZUNvbnRleHRzPVsiQ0FTIEZvcm1hdHMgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJEYXRhIE1pbmluZyBjb21wdXRlIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsIlNBUyBNb2Rl''@;'; put 'put ''bCBNYW5hZ2VyIGNvbXB1dGUgY29udGV4dCIsIlNBUyBTdHVkaW8gY29tcHV0ZSBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBjb21wdXRlIGNvbnRleHQiXSx0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzPVsiQ0FTIEZvcm1hdHMgc2VydmljZSBsYXVuY2hlciBjb250ZXh0''@;'; put 'put ''IiwiRGF0YSBNaW5pbmcgbGF1bmNoZXIgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkpvYiBGbG93IEV4ZWN1dGlvbiBsYXVuY2hlciBjb250ZXh0IiwiU0FTIEpvYiBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBNb2RlbCBNYW5hZ2VyIGxh''@;'; put 'put ''dW5jaGVyIGNvbnRleHQiLCJTQVMgU3R1ZGlvIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGxhdW5jaGVyIGNvbnRleHQiXSxCJiYoMCxrLmlzVXJsKShCKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJnZXREZWZhdWx0Q29tcHV0''@;'; put 'put ''ZUNvbnRleHRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0c30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsImdldERlZmF1bHRMYXVuY2hlckNvbnRleHRzIix7Z2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksVi5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKEIpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBZ''@;'; put 'put ''O3JldHVybiBJKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiKSxCKS5jYXRjaChmdW5jdGlvbihVKXt0aHJv''@;'; put 'put ''dygwLEUucHJlZml4TWVzc2FnZSkoVSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHRzLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsKChZPVguc2VudCgpLnJlc3VsdCkmJlkuaXRlbXM/WS5pdGVtczpbXSkubWFwKGZ1bmN0aW9uKFUpe3JldHVybntjcmVhdGVkQnk6VS5jcmVh''@;'; put 'put ''dGVkQnksaWQ6VS5pZCxuYW1lOlUubmFtZSx2ZXJzaW9uOlUudmVyc2lvbixhdHRyaWJ1dGVzOnt9fX0pXX19KX0pfSxWLnByb3RvdHlwZS5nZXRMYXVuY2hlckNvbnRleHRzPWZ1bmN0aW9uKEIpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBZO3JldHVybiBJ''@;'; put 'put ''KHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2xhdW5jaGVyL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksQikuY2F0Y2goZnVuY3Rpb24oVSl7dGhyb3coMCxFLnBy''@;'; put 'put ''ZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdoaWxlIGdldHRpbmcgbGF1bmNoZXIgY29udGV4dHMuICIpfSldO2Nhc2UgMTpyZXR1cm5bMiwoKFk9WC5zZW50KCkucmVzdWx0KSYmWS5pdGVtcz9ZLml0ZW1zOltdKS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJue2NyZWF0ZWRCeTpVLmNyZWF0ZWRCeSxp''@;'; put 'put ''ZDpVLmlkLG5hbWU6VS5uYW1lLHZlcnNpb246VS52ZXJzaW9uLGF0dHJpYnV0ZXM6e319fSldfX0pfSl9LFYucHJvdG90eXBlLmNyZWF0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEIsWSxYLFUscSxlZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG9l''@;'; put 'put ''LHNlLGhlLHVlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoQiksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJDb21wdXRlIGNvbnRleHQg''@;'; put 'put ''JyIuY29uY2F0KEIsIicgYWxyZWFkeSBleGlzdHMuIikpLFs0LHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRzKHEpXTtjYXNlIDE6aWYoY2Uuc2VudCgpLmZpbmQoZnVuY3Rpb24oRyl7cmV0dXJuIEcubmFtZT09PUJ9KSl0aHJvdyBuZXcgRXJyb3IoIkNvbXB1dGUgY29udGV4dCAnIi5jb25jYXQo''@;'; put 'put ''QiwiJyBhbHJlYWR5IGV4aXN0cy4iKSk7cmV0dXJuIFk/dGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cy5pbmNsdWRlcyhZKT9bMyw0XTpbNCx0aGlzLmdldExhdW5jaGVyQ29udGV4dHMocSldOlszLDRdO2Nhc2UgMjpyZXR1cm4gY2Uuc2VudCgpLmZpbmQoZnVuY3Rpb24oRyl7cmV0dXJu''@;'; put 'put ''IEcubmFtZT09PVl9KT9bMyw0XToodGU9IlRoZSBsYXVuY2hlciBjb250ZXh0IGZvciAiLmNvbmNhdChZKSxbNCx0aGlzLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChZLHRlLCJkaXJlY3QiLHEpLmNhdGNoKGZ1bmN0aW9uKEcpe3Rocm93IG5ldyBFcnJvcigiRXJyb3Igd2hpbGUgY3JlYXRpbmcg''@;'; put 'put ''bGF1bmNoZXIgY29udGV4dC4gIi5jb25jYXQoRykpfSldKTtjYXNlIDM6aWYoIShvZT1jZS5zZW50KCkpfHwhb2UubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuIik7WT1vZS5uYW1lLGNlLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBz''@;'; put 'put ''ZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxxJiYoc2UuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KHEpKSxoZT17cmV1c2VTZXJ2ZXJQcm9jZXNzZXM6ITB9LFgmJihoZT16KHooe30saGUpLHtydW5TZXJ2ZXJBczpYfSkpLHVlPXtuYW1lOkIsbGF1bmNoQ29u''@;'; put 'put ''dGV4dDp7Y29udGV4dE5hbWU6WXx8IiJ9LGF0dHJpYnV0ZXM6aGV9LGVlJiZlZS5sZW5ndGg/dWUuYXV0aG9yaXplZFVzZXJzPWVlOnVlLmF1dGhvcml6ZUFsbEF1dGhlbnRpY2F0ZWRVc2Vycz0hMCxVJiYodWUuZW52aXJvbm1lbnQ9e2F1dG9FeGVjTGluZXM6VX0pLFs0LHRoaXMucmVxdWVz''@;'; put 'put ''dENsaWVudC5wb3N0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMiKSx1ZSxxKS5jYXRjaChmdW5jdGlvbihHKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoRywiRXJyb3Igd2hpbGUgY3JlYXRpbmcgY29tcHV0ZSBjb250ZXh0LiAiKX0pXTtjYXNlIDU6cmV0''@;'; put 'put ''dXJuWzIsY2Uuc2VudCgpLnJlc3VsdF19fSl9KX0sVi5wcm90b3R5cGUuY3JlYXRlTGF1bmNoZXJDb250ZXh0PWZ1bmN0aW9uKEIsWSxYLFUpe3JldHVybiB2b2lkIDA9PT1YJiYoWD0iZGlyZWN0IiksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZTtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLGZ1bmN0aW9uKHRlKXtzd2l0Y2godGUubGFiZWwpe2Nhc2UgMDppZighQil0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cywiTGF1bmNoZXIgY29u''@;'; put 'put ''dGV4dCAnIi5jb25jYXQoQiwiJyBhbHJlYWR5IGV4aXN0cy4iKSksWzQsdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKFUpXTtjYXNlIDE6aWYodGUuc2VudCgpLmZpbmQoZnVuY3Rpb24ob2Upe3JldHVybiBvZS5uYW1lPT09Qn0pKXRocm93IG5ldyBFcnJvcigiTGF1bmNoZXIgY29udGV4dCAn''@;'; put 'put ''Ii5jb25jYXQoQiwiJyBhbHJlYWR5IGV4aXN0cy4iKSk7cmV0dXJuIHE9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sVSYmKHEuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KFUpKSxlZT17bmFtZTpCLGRlc2NyaXB0aW9uOlksbGF1bmNoVHlwZTpYfSxbNCx0aGlz''@;'; put 'put ''LnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9sYXVuY2hlci9jb250ZXh0cyIpLGVlLFUpLmNhdGNoKGZ1bmN0aW9uKG9lKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkob2UsIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICIpfSld''@;'; put 'put ''O2Nhc2UgMjpyZXR1cm5bMix0ZS5zZW50KCkucmVzdWx0XX19KX0pfSxWLnByb3RvdHlwZS5lZGl0Q29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oQixZLFgpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBVLHEsZWUsdGU7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihv''@;'; put 'put ''ZSl7c3dpdGNoKG9lLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMudmFsaWRhdGVDb250ZXh0TmFtZShCKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoQix0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkVkaXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dl''@;'; put 'put ''ZC4iLCEwKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKEIsWCldO2Nhc2UgMTpyZXR1cm4oVT1vZS5zZW50KCkpP1szLDNdOls0LHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKFkuaWQsWCldO2Nhc2UgMjpVPW9lLnNlbnQoKSxvZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bNCx0''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KFUuaWQpLFgpLmNhdGNoKGZ1bmN0aW9uKHNlKXt0aHJvdyBzZSYmNDA0PT09c2Uuc3RhdHVzP25ldyBFcnJvcigiVGhlIGNvbnRleHQgJyIuY29uY2F0KEIs''@;'; put 'put ''Iicgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci4iKSk6c2V9KV07Y2FzZSA0OnJldHVybiBxPW9lLnNlbnQoKSx0ZT1xLmV0YWcsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dCgiL2NvbXB1dGUvY29udGV4dHMvIi5jb25jYXQoKGVlPXEucmVzdWx0KS5pZCkseih6KHooe30sZWUpLFkp''@;'; put 'put ''LHthdHRyaWJ1dGVzOnooeih7fSxlZS5hdHRyaWJ1dGVzKSxZLmF0dHJpYnV0ZXMpfSksWCx7IklmLU1hdGNoIjp0ZX0pXTtjYXNlIDU6cmV0dXJuWzIsb2Uuc2VudCgpXX19KX0pfSxWLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZT1mdW5jdGlvbihCLFkpe3JldHVybiBLKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBYO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwnL2NvbXB1dGUvY29udGV4dHM/ZmlsdGVy''@;'; put 'put ''PWVxKG5hbWUsICInKS5jb25jYXQoQiwnIiknKSxZKS5jYXRjaChmdW5jdGlvbihxKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkocSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgbmFtZS4gIil9KV07Y2FzZSAxOmlmKCEoWD1VLnNlbnQoKS5yZXN1bHQpfHwhWC5p''@;'; put 'put ''dGVtc3x8IVguaXRlbXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIGNvbnRleHQgJyIuY29uY2F0KEIsIicgd2FzIG5vdCBmb3VuZCBhdCAnIikuY29uY2F0KHRoaXMuc2VydmVyVXJsLCInLiIpKTtyZXR1cm5bMixYLml0ZW1zWzBdXX19KX0pfSxWLnByb3RvdHlwZS5nZXRDb21wdXRl''@;'; put 'put ''Q29udGV4dEJ5SWQ9ZnVuY3Rpb24oQixZKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2''@;'; put 'put ''ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdChCKSxZKS5jYXRjaChmdW5jdGlvbihVKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoVSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgaWQuICIpfSldO2Nhc2UgMTpyZXR1cm5bMixYLnNlbnQoKS5yZXN1''@;'; put 'put ''bHRdfX0pfSl9LFYucHJvdG90eXBlLmdldEV4ZWN1dGFibGVDb250ZXh0cz1mdW5jdGlvbihCLFkpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBYLFUscSxlZSx0ZSxvZSxzZSx1ZSxjZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVs''@;'; put 'put ''KXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksWT8uYWNjZXNzX3Rva2VuKS5jYXRjaChmdW5jdGlvbihiKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoYiwiRXJy''@;'; put 'put ''b3Igd2hpbGUgZmV0Y2hpbmcgY29tcHV0ZSBjb250ZXh0cy4iKX0pXTtjYXNlIDE6WD1HLnNlbnQoKS5yZXN1bHQscT1bXSxlZT0oVT1YLml0ZW1zfHxbXSkubWFwKGZ1bmN0aW9uKGIpe3ZhciBEPVsiJXB1dCAmPXN5c3VzZXJpZDsiXTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQigidGVz''@;'; put 'put ''dC0iLmNvbmNhdChiLm5hbWUpLEQsYi5uYW1lLFksbnVsbCwhMSwhMCwhMCkuY2F0Y2goZnVuY3Rpb24oSCl7cmV0dXJuIEh9KX19KSx0ZT1bXSxvZT0wLHNlPWVlLEcubGFiZWw9MjtjYXNlIDI6cmV0dXJuIG9lPHNlLmxlbmd0aD8oY2U9KHVlPXRlKS5wdXNoLFs0LCgwLHNlW29lXSkoKV0p''@;'; put 'put ''OlszLDVdO2Nhc2UgMzpjZS5hcHBseSh1ZSxbRy5zZW50KCldKSxHLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBvZSsrLFszLDJdO2Nhc2UgNTpyZXR1cm4gdGUuZm9yRWFjaChmdW5jdGlvbihiLEQpe2lmKGImJmIubG9nKXRyeXt2YXIgTj0iIixnPWIubG9nLnNwbGl0KCJcbiIpLmZpbmQoZnVu''@;'; put 'put ''Y3Rpb24oQyl7cmV0dXJuIEMuc3RhcnRzV2l0aCgiU1lTVVNFUklEPSIpfSk7ZyYmKE49Zy5yZXBsYWNlKCJTWVNVU0VSSUQ9IiwiIikscS5wdXNoKHtjcmVhdGVkQnk6VVtEXS5jcmVhdGVkQnksaWQ6VVtEXS5pZCxuYW1lOlVbRF0ubmFtZSx2ZXJzaW9uOlVbRF0udmVyc2lvbixhdHRyaWJ1''@;'; put 'put ''dGVzOntzeXNVc2VySWQ6Tn19KSl9Y2F0Y2goQyl7dGhyb3cgQ319KSxbMixxXX19KX0pfSxWLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihCLFkpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBYLFU7cmV0dXJuIEkodGhpcyxmdW5j''@;'; put 'put ''dGlvbihxKXtzd2l0Y2gocS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoQiksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJEZWxldGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBh''@;'; put 'put ''bGxvd2VkLiIsITApLFg9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sWSYmKFguQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KFkpKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKEIsWSldO2Nhc2UgMTpyZXR1cm4gVT1xLnNlbnQoKSxbNCx0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQuZGVsZXRlKCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KFUuaWQpLFkpXTtjYXNlIDI6cmV0dXJuWzIscS5zZW50KCldfX0pfSl9LFYucHJvdG90eXBlLnZhbGlkYXRlQ29udGV4dE5hbWU9ZnVuY3Rpb24oQil7aWYoIUIp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIil9LFYucHJvdG90eXBlLmlzRGVmYXVsdENvbnRleHQ9ZnVuY3Rpb24oQixZLFgsVSl7aWYodm9pZCAwPT09WSYmKFk9dGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzKSx2b2lkIDA9PT1YJiYoWD0iIiksdm9pZCAw''@;'; put 'put ''PT09VSYmKFU9ITEpLFkuaW5jbHVkZXMoQikpdGhyb3cgbmV3IEVycm9yKCIiLmNvbmNhdChYKS5jb25jYXQoVT8iXG5EZWZhdWx0IGNvbnRleHRzOiIrWS5tYXAoZnVuY3Rpb24ocSxlZSl7cmV0dXJuIlxuIi5jb25jYXQoZWUrMSwiLiAiKS5jb25jYXQocSl9KToiIikpfSxWfSgpO08uQ29u''@;'; put 'put ''dGV4dE1hbmFnZXI9an0sODMwNjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihYLFUscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24odGUsb2Upe2Z1bmN0aW9uIHNlKGNlKXt0cnl7dWUoZWUu''@;'; put 'put ''bmV4dChjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiBoZShjZSl7dHJ5e3VlKGVlLnRocm93KGNlKSl9Y2F0Y2goRyl7b2UoRyl9fWZ1bmN0aW9uIHVlKGNlKXt2YXIgRztjZS5kb25lP3RlKGNlLnZhbHVlKTooRz1jZS52YWx1ZSxHIGluc3RhbmNlb2YgcT9HOm5ldyBxKGZ1bmN0aW9u''@;'; put 'put ''KGIpe2IoRyl9KSkudGhlbihzZSxoZSl9dWUoKGVlPWVlLmFwcGx5KFgsVXx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWCxVKXt2YXIgcSxlZSx0ZSxvZSxzZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZ0ZVswXSl0aHJvdyB0ZVsx''@;'; put 'put ''XTtyZXR1cm4gdGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gb2U9e25leHQ6aGUoMCksdGhyb3c6aGUoMSkscmV0dXJuOmhlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYob2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksb2U7ZnVuY3Rpb24g''@;'; put 'put ''aGUodWUpe3JldHVybiBmdW5jdGlvbihjZSl7cmV0dXJuIGZ1bmN0aW9uKEcpe2lmKHEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7c2U7KXRyeXtpZihxPTEsZWUmJih0ZT0yJkdbMF0/ZWUucmV0dXJuOkdbMF0/ZWUudGhyb3d8''@;'; put 'put ''fCgodGU9ZWUucmV0dXJuKSYmdGUuY2FsbChlZSksMCk6ZWUubmV4dCkmJiEodGU9dGUuY2FsbChlZSxHWzFdKSkuZG9uZSlyZXR1cm4gdGU7c3dpdGNoKGVlPTAsdGUmJihHPVsyJkdbMF0sdGUudmFsdWVdKSxHWzBdKXtjYXNlIDA6Y2FzZSAxOnRlPUc7YnJlYWs7Y2FzZSA0OnJldHVybiBz''@;'; put 'put ''ZS5sYWJlbCsrLHt2YWx1ZTpHWzFdLGRvbmU6ITF9O2Nhc2UgNTpzZS5sYWJlbCsrLGVlPUdbMV0sRz1bMF07Y29udGludWU7Y2FzZSA3Okc9c2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKCh0ZT0odGU9c2UudHJ5cykubGVuZ3RoPjAmJnRlW3RlLmxl''@;'; put 'put ''bmd0aC0xXSl8fDYhPT1HWzBdJiYyIT09R1swXSkpe3NlPTA7Y29udGludWV9aWYoMz09PUdbMF0mJighdGV8fEdbMV0+dGVbMF0mJkdbMV08dGVbM10pKXtzZS5sYWJlbD1HWzFdO2JyZWFrfWlmKDY9PT1HWzBdJiZzZS5sYWJlbDx0ZVsxXSl7c2UubGFiZWw9dGVbMV0sdGU9RzticmVha31p''@;'; put 'put ''Zih0ZSYmc2UubGFiZWw8dGVbMl0pe3NlLmxhYmVsPXRlWzJdLHNlLm9wcy5wdXNoKEcpO2JyZWFrfXRlWzJdJiZzZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZX1HPVUuY2FsbChYLHNlKX1jYXRjaChiKXtHPVs2LGJdLGVlPTB9ZmluYWxseXtxPXRlPTB9aWYoNSZHWzBdKXRo''@;'; put 'put ''cm93IEdbMV07cmV0dXJue3ZhbHVlOkdbMF0/R1sxXTp2b2lkIDAsZG9uZTohMH19KFt1ZSxjZV0pfX19LEk9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihYLFUscSl7aWYocXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBlZSx0ZT0wLG9lPVUubGVuZ3RoO3RlPG9l''@;'; put 'put ''O3RlKyspIWVlJiZ0ZSBpbiBVfHwoZWV8fChlZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChVLDAsdGUpKSxlZVt0ZV09VVt0ZV0pO3JldHVybiBYLmNvbmNhdChlZXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoVSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSksTy5TQVM5QXBpQ2xpZW50PXZvaWQgMDt2YXIgaz1SKDc3NTcpLEU9Uig2MjMwKSxqPVIoNzk1KSxWPVIoNTkyOCksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIFgoVSxxLGVlKXt0aGlzLnNlcnZlclVybD1VLHRoaXMuam9ic1BhdGg9cSxVJiYoMCxWLmlzVXJsKShVKSx0''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQ9bmV3IGouU2FzOVJlcXVlc3RDbGllbnQoVSxlZSl9cmV0dXJuIFgucHJvdG90eXBlLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmx9fSxYLnByb3RvdHlwZS5zZXRDb25maWc9ZnVuY3Rpb24oVSl7VSYmKHRoaXMu''@;'; put 'put ''c2VydmVyVXJsPVUpfSxYLnByb3RvdHlwZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKFUscSxlZSl7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG9lLHNlLGhlLHVlLGNlLEc7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2Fz''@;'; put 'put ''ZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5sb2dpbihxLGVlLHRoaXMuam9ic1BhdGgpXTtjYXNlIDE6cmV0dXJuIGIuc2VudCgpLHRlPVsiZGF0YSBfbnVsbF87IiwiZmlsZSBfd2Vib3V0OyIsInB1dCAnRXhlY3V0ZWQgc2FzanMgcnVuJzsiLCJydW47Il0sb2U9WShJKEkoW10s''@;'; put 'put ''VSwhMCksdGUsITApLmpvaW4oIlxuIikpLHNlPSIvVXNlciBGb2xkZXJzLyIuY29uY2F0KHEsIi9NeSBGb2xkZXIvc2FzanMvcnVubmVyIiksaGU9Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrb2UuZ2V0Qm91bmRhcnkoKSx1ZT1vZS5nZXRMZW5ndGhTeW5jKCksY2U9eyJjYWNo''@;'; put 'put ''ZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjpoZSwiQ29udGVudC1MZW5ndGgiOnVlLENvbm5lY3Rpb246ImtlZXAtYWxpdmUifSxHPSIiLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNhdCgiX3Byb2dyYW09IitzZSsiJl9kZWJ1Zz1sb2ci''@;'; put 'put ''KSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdChHLG9lLHZvaWQgMCxoZSxjZSldO2Nhc2UgMjpyZXR1cm5bMixiLnNlbnQoKS5yZXN1bHRdfX0pfSl9LFh9KCk7Ty5TQVM5QXBpQ2xpZW50PUI7dmFyIFk9ZnVuY3Rpb24oWCl7dmFyIFU9bmV3IEUscT0ic2FzanMtZXhlY3V0ZS1zYXM5LSIu''@;'; put 'put ''Y29uY2F0KCgwLGsuZ2VuZXJhdGVUaW1lc3RhbXApKCIiKSwiLnNhcyIpO3JldHVybiBVLmFwcGVuZChxLFgse2ZpbGVuYW1lOnEsY29udGVudFR5cGU6InRleHQvcGxhaW4ifSksVX19LDk4MjE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJ''@;'; put 'put ''PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihjZSxHLGIsRCl7cmV0dXJuIG5ldyhifHwoYj1Qcm9taXNlKSkoZnVuY3Rpb24oSCxOKXtmdW5jdGlvbiBnKHYpe3RyeXtTKEQubmV4dCh2KSl9Y2F0Y2gocCl7TihwKX19ZnVuY3Rpb24gQyh2KXt0cnl7UyhELnRocm93KHYpKX1jYXRj''@;'; put 'put ''aChwKXtOKHApfX1mdW5jdGlvbiBTKHYpe3ZhciBwO3YuZG9uZT9IKHYudmFsdWUpOihwPXYudmFsdWUscCBpbnN0YW5jZW9mIGI/cDpuZXcgYihmdW5jdGlvbih3KXt3KHApfSkpLnRoZW4oZyxDKX1TKChEPUQuYXBwbHkoY2UsR3x8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dl''@;'; put 'put ''bmVyYXRvcnx8ZnVuY3Rpb24oY2UsRyl7dmFyIGIsRCxILE4sZz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZIWzBdKXRocm93IEhbMV07cmV0dXJuIEhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gTj17bmV4dDpDKDApLHRocm93OkMoMSkscmV0dXJuOkMoMil9LCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBTeW1ib2wmJihOW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLE47ZnVuY3Rpb24gQyhTKXtyZXR1cm4gZnVuY3Rpb24odil7cmV0dXJuIGZ1bmN0aW9uKHApe2lmKGIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkg''@;'; put 'put ''ZXhlY3V0aW5nLiIpO2Zvcig7ZzspdHJ5e2lmKGI9MSxEJiYoSD0yJnBbMF0/RC5yZXR1cm46cFswXT9ELnRocm93fHwoKEg9RC5yZXR1cm4pJiZILmNhbGwoRCksMCk6RC5uZXh0KSYmIShIPUguY2FsbChELHBbMV0pKS5kb25lKXJldHVybiBIO3N3aXRjaChEPTAsSCYmKHA9WzImcFswXSxI''@;'; put 'put ''LnZhbHVlXSkscFswXSl7Y2FzZSAwOmNhc2UgMTpIPXA7YnJlYWs7Y2FzZSA0OnJldHVybiBnLmxhYmVsKysse3ZhbHVlOnBbMV0sZG9uZTohMX07Y2FzZSA1OmcubGFiZWwrKyxEPXBbMV0scD1bMF07Y29udGludWU7Y2FzZSA3OnA9Zy5vcHMucG9wKCksZy50cnlzLnBvcCgpO2NvbnRpbnVl''@;'; put 'put ''O2RlZmF1bHQ6aWYoISgoSD0oSD1nLnRyeXMpLmxlbmd0aD4wJiZIW0gubGVuZ3RoLTFdKXx8NiE9PXBbMF0mJjIhPT1wWzBdKSl7Zz0wO2NvbnRpbnVlfWlmKDM9PT1wWzBdJiYoIUh8fHBbMV0+SFswXSYmcFsxXTxIWzNdKSl7Zy5sYWJlbD1wWzFdO2JyZWFrfWlmKDY9PT1wWzBdJiZnLmxh''@;'; put 'put ''YmVsPEhbMV0pe2cubGFiZWw9SFsxXSxIPXA7YnJlYWt9aWYoSCYmZy5sYWJlbDxIWzJdKXtnLmxhYmVsPUhbMl0sZy5vcHMucHVzaChwKTticmVha31IWzJdJiZnLm9wcy5wb3AoKSxnLnRyeXMucG9wKCk7Y29udGludWV9cD1HLmNhbGwoY2UsZyl9Y2F0Y2godyl7cD1bNix3XSxEPTB9Zmlu''@;'; put 'put ''YWxseXtiPUg9MH1pZig1JnBbMF0pdGhyb3cgcFsxXTtyZXR1cm57dmFsdWU6cFswXT9wWzFdOnZvaWQgMCxkb25lOiEwfX0oW1Msdl0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBU1ZpeWFBcGlDbGllbnQ9dm9pZCAwO3ZhciBFPVIo''@;'; put 'put ''NTkyOCksaj1SKDYyMzApLFY9UigxMzk1KSxCPVIoNjkwMyksWT1SKDY3MiksWD1SKDkwOTcpLFU9Uig5Nzc4KSxxPVIoMTM0MyksZWU9Uig3MDQpLHRlPVIoNjQ5Niksb2U9UigxNjIyKSxzZT1SKDM1NjkpLGhlPVIoMzY2KSx1ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGNlKEcsYixELEgpe3Ro''@;'; put 'put ''aXMuc2VydmVyVXJsPUcsdGhpcy5yb290Rm9sZGVyTmFtZT1iLHRoaXMuY29udGV4dE5hbWU9RCx0aGlzLnJlcXVlc3RDbGllbnQ9SCx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnNlc3Npb25NYW5hZ2VyPW5ldyBCLlNlc3Npb25NYW5hZ2VyKHRoaXMuc2VydmVyVXJsLHRoaXMuY29udGV4dE5hbWUs''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLmNvbnRleHRNYW5hZ2VyPW5ldyBZLkNvbnRleHRNYW5hZ2VyKHRoaXMuc2VydmVyVXJsLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5mb2xkZXJNYXA9bmV3IE1hcCxHJiYoMCxFLmlzVXJsKShHKX1yZXR1cm4gY2UucHJvdG90eXBlLmFwcGVuZFJl''@;'; put 'put ''cXVlc3Q9ZnVuY3Rpb24oRyxiLEQpe3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KEcsYixEKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLnByb3RvdHlwZSwiZGVidWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWd9LHNldDpmdW5jdGlvbihHKXt0aGlzLl9k''@;'; put 'put ''ZWJ1Zz1HLHRoaXMuc2Vzc2lvbk1hbmFnZXImJih0aGlzLnNlc3Npb25NYW5hZ2VyLmRlYnVnPUcpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGNlLnByb3RvdHlwZS5nZXRKb2JzSW5Gb2xkZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIGI7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiBiPSgwLEUuaXNSZWxhdGl2ZVBhdGgpKEcpPyIiLmNvbmNhdCh0aGlzLnJvb3RGb2xkZXJOYW1lLCIvIikuY29uY2F0KEcpOkcsdGhpcy5mb2xkZXJNYXAuZ2V0KGIpP1sy''@;'; put 'put ''LHRoaXMuZm9sZGVyTWFwLmdldChiKV06WzQsdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChiKV07Y2FzZSAxOnJldHVybiBELnNlbnQoKSxbMix0aGlzLmZvbGRlck1hcC5nZXQoYildfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57c2VydmVyVXJsOnRoaXMu''@;'; put 'put ''c2VydmVyVXJsLHJvb3RGb2xkZXJOYW1lOnRoaXMucm9vdEZvbGRlck5hbWV9fSxjZS5wcm90b3R5cGUuc2V0Q29uZmlnPWZ1bmN0aW9uKEcsYil7RyYmKHRoaXMuc2VydmVyVXJsPUcpLGImJih0aGlzLnJvb3RGb2xkZXJOYW1lPWIpfSxjZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRz''@;'; put 'put ''PWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0cyhHKV07Y2FzZSAxOnJldHVy''@;'; put 'put ''blsyLGIuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9LGNlLnByb3RvdHlwZS5nZXRMYXVuY2hlckNvbnRleHRzPWZ1bmN0aW9u''@;'; put 'put ''KEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldExhdW5jaGVyQ29udGV4dHMoRyldO2Nhc2UgMTpyZXR1cm5bMixiLnNl''@;'; put 'put ''bnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldEV4ZWN1dGFibGVDb250ZXh0cz1mdW5jdGlvbihHKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIGI9dGhp''@;'; put 'put ''cy5leGVjdXRlU2NyaXB0LmJpbmQodGhpcyksWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRFeGVjdXRhYmxlQ29udGV4dHMoYixHKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlU2Vzc2lvbj1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELEgsTjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQ9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYiYmKEQuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0''@;'; put 'put ''KGIpKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIsYildO2Nhc2UgMTppZihIPWcuc2VudCgpLnJlc3VsdCwhKE49SC5pdGVtcyYmSC5pdGVtcy5sZW5ndGg/SC5pdGVtcy5maW5kKGZ1bmN0aW9uKEMpe3JldHVybiBDLm5hbWU9PT1H''@;'; put 'put ''fSk6bnVsbCkpdGhyb3cgbmV3IEVycm9yKCJFeGVjdXRpb24gY29udGV4dCAiLmNvbmNhdChHLCIgbm90IGZvdW5kLiIpKTtyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiL2NvbXB1dGUvY29udGV4dHMvIi5jb25jYXQoTi5pZCwiL3Nlc3Npb25zIikse30sYildO2Nhc2UgMjpy''@;'; put 'put ''ZXR1cm5bMixnLnNlbnQoKS5yZXN1bHRdfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihHLGIsRCxILE4sZyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihDKXtzd2l0Y2goQy5sYWJl''@;'; put 'put ''bCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuY3JlYXRlQ29tcHV0ZUNvbnRleHQoRyxiLEQsSCxOLGcpXTtjYXNlIDE6cmV0dXJuWzIsQy5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVMYXVuY2hlckNvbnRleHQ9ZnVuY3Rpb24oRyxiLEQsSCl7cmV0dXJu''@;'; put 'put ''IHZvaWQgMD09PUQmJihEPSJkaXJlY3QiKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChHLGIsRCxI''@;'; put 'put ''KV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZWRpdENvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtj''@;'; put 'put ''YXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5lZGl0Q29tcHV0ZUNvbnRleHQoRyxiLEQpXTtjYXNlIDE6cmV0dXJuWzIsSC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmRlbGV0ZUNvbXB1dGVDb250ZXh0KEcsYildO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBl''@;'; put 'put ''LmV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24oRyxiLEQsSCxOLGcsQyxTLHYscCx3KXtyZXR1cm4gdm9pZCAwPT09TiYmKE49bnVsbCksdm9pZCAwPT09ZyYmKGc9ITEpLHZvaWQgMD09PUMmJihDPSExKSx2b2lkIDA9PT1TJiYoUz0hMCksdm9pZCAwPT09cCYmKHA9ITEpLEkodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihKKXtyZXR1cm5bMiwoMCxvZS5leGVjdXRlT25Db21wdXRlQXBpKSh0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXNzaW9uTWFuYWdlcix0aGlzLnJvb3RGb2xkZXJOYW1lLEcsYixELEgsTixnLEMsUyx2LHAsdyldfSl9''@;'; put 'put ''KX0sY2UucHJvdG90eXBlLmdldEZvbGRlcj1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvZm9s''@;'; put 'put ''ZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9Ii5jb25jYXQoRyksYikudGhlbihmdW5jdGlvbihIKXtyZXR1cm4gSC5yZXN1bHR9KV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbihHLGIsRCxILE4pe3JldHVybiBJKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihTKXtzd2l0Y2goUy5sYWJlbCl7Y2FzZSAwOmlmKCFEJiYhSCl0aHJvdyBuZXcgRXJyb3IoIlBhdGggb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiBI''@;'; put 'put ''fHwhRD9bMywyXTpbNCx0aGlzLmdldEZvbGRlclVyaShELE4pXTtjYXNlIDE6SD1TLnNlbnQoKSxTLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBnPXtBY2NlcHQ6ImFwcGxpY2F0aW9uL3ZuZC5zYXMuZmlsZStqc29uIiwiQ29udGVudC1EaXNwb3NpdGlvbiI6J2ZpbGVuYW1lPSInLmNvbmNhdChH''@;'; put 'put ''LCciOycpfSwoQz1uZXcgaikuYXBwZW5kKCJmaWxlIixiLEcpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIvZmlsZXMvZmlsZXM/cGFyZW50Rm9sZGVyVXJpPSIuY29uY2F0KEgsIiZ0eXBlRGVmTmFtZT1maWxlI3Jhd1VwbG9hZCIpLEMsTiwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91''@;'; put 'put ''bmRhcnk9IitDLl9ib3VuZGFyeSxnKV07Y2FzZSAzOnJldHVyblsyLFMuc2VudCgpLnJlc3VsdF19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZUZvbGRlcj1mdW5jdGlvbihHLGIsRCxILE4pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEMsUyx2LHc7cmV0''@;'; put 'put ''dXJuIGsodGhpcyxmdW5jdGlvbihKKXtzd2l0Y2goSi5sYWJlbCl7Y2FzZSAwOmlmKGc9ei5sb2dnZXJ8fEssIWImJiFEKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7cmV0dXJuIER8fCFiP1szLDZdOls0LHRoaXMuZ2V0''@;'; put 'put ''Rm9sZGVyVXJpKGIsSCldO2Nhc2UgMTppZihEPUouc2VudCgpKXJldHVyblszLDNdO2lmKGcuaW5mbygiUGFyZW50IGZvbGRlciBhdCBwYXRoICciLmNvbmNhdChiLCInIGlzIG5vdCBwcmVzZW50LiIpKSxDPWIuc3Vic3RyaW5nKDAsYi5sYXN0SW5kZXhPZigiLyIpKSxTPSIiLmNvbmNhdChi''@;'; put 'put ''LnNwbGl0KCIvIikucG9wKCkpLCIiPT09Qyl0aHJvdyBuZXcgVi5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcihiLHRoaXMuc2VydmVyVXJsLEgpO3JldHVybiBnLmluZm8oIkNyZWF0aW5nIHBhcmVudCBmb2xkZXI6XG4nIi5jb25jYXQoUywiJyBpbiAnIikuY29uY2F0KEMsIiciKSksWzQsdGhp''@;'; put 'put ''cy5jcmVhdGVGb2xkZXIoUyxDLHZvaWQgMCxIKV07Y2FzZSAyOnJldHVybiB2PUouc2VudCgpLGcuaW5mbygiUGFyZW50IGZvbGRlciAnIi5jb25jYXQoUywiJyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC4iKSksRD0iL2ZvbGRlcnMvZm9sZGVycy8iLmNvbmNhdCh2LmlkKSxbMyw2''@;'; put 'put ''XTtjYXNlIDM6cmV0dXJuIE4/WzQsdGhpcy5nZXRGb2xkZXJVcmkoYisiLyIrRyxIKV06WzMsNl07Y2FzZSA0OnJldHVybiBKLnNlbnQoKT9bNCx0aGlzLmRlbGV0ZUZvbGRlcihiKyIvIitHLEgpXTpbMyw2XTtjYXNlIDU6Si5zZW50KCksSi5sYWJlbD02O2Nhc2UgNjpyZXR1cm5bNCx0aGlz''@;'; put 'put ''LnJlcXVlc3RDbGllbnQucG9zdCgiL2ZvbGRlcnMvZm9sZGVycz9wYXJlbnRGb2xkZXJVcmk9Ii5jb25jYXQoRCkse25hbWU6Ryx0eXBlOiJmb2xkZXIifSxIKS5jYXRjaChmdW5jdGlvbihuZSl7dmFyIGRlPW5lLm1lc3NhZ2UsZmU9bmUucmVzcG9uc2U7aWYoZGUmJmZlJiZmZS5kYXRhJiZm''@;'; put 'put ''ZS5kYXRhLm1lc3NhZ2Upe3ZhciB4ZT1mZS5zdGF0dXMsTGU9W2RlLGZlLmRhdGEubWVzc2FnZV0ubWFwKGZ1bmN0aW9uKEZlKXtyZXR1cm4vXC4kLy50ZXN0KEZlKT9GZToiIi5jb25jYXQoRmUsIi4iKX0pO3Rocm93IE58fDQwOSE9PXhlfHxMZS5wdXNoKCdUbyBvdmVycmlkZSwgcGxlYXNl''@;'; put 'put ''IHNldCAiaXNGb3JjZWQiIHRvICJ0cnVlIi4nKSxMZS5qb2luKCIgIil9dGhyb3cgbmV9KV07Y2FzZSA3OnJldHVybiB3PUouc2VudCgpLnJlc3VsdCxbNCx0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKCIiLmNvbmNhdChiLCIvIikuY29uY2F0KEcpLEgpXTtjYXNlIDg6cmV0dXJuIEouc2VudCgp''@;'; put 'put ''LFsyLHddfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVKb2JEZWZpbml0aW9uPWZ1bmN0aW9uKEcsYixELEgsTil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOmlmKCFEJiYhSCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlBhdGggdG8gb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiBIfHwhRD9bMywyXTpbNCx0aGlzLmdldEZvbGRlclVyaShELE4pXTtjYXNlIDE6SD1nLnNlbnQoKSxnLmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LHRoaXMucmVx''@;'; put 'put ''dWVzdENsaWVudC5wb3N0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2pvYkRlZmluaXRpb25zL2RlZmluaXRpb25zP3BhcmVudEZvbGRlclVyaT0iKS5jb25jYXQoSCkse25hbWU6RyxwYXJhbWV0ZXJzOlt7bmFtZToiX2FkZGplc2JlZ2luZW5kbWFjcm9zIix0eXBlOiJDSEFSQUNURVIi''@;'; put 'put ''LGRlZmF1bHRWYWx1ZToiZmFsc2UifV0sdHlwZToiQ29tcHV0ZSIsY29kZTpifSxOKV07Y2FzZSAzOnJldHVyblsyLGcuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0QXV0aENvZGU9ZnVuY3Rpb24oRyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIs''@;'; put 'put ''RD10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYj0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9TQVNMb2dvbi9vYXV0aC9hdXRob3JpemU/Y2xpZW50X2lkPSIpLmNvbmNhdChHLCImcmVzcG9uc2VfdHlwZT1jb2RlIiksWzQs''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LmdldChiLHZvaWQgMCwidGV4dC9wbGFpbiIpLnRoZW4oZnVuY3Rpb24oTil7cmV0dXJuIE4ucmVzdWx0fSkudGhlbihmdW5jdGlvbihOKXtyZXR1cm4gSShELHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDLFMsdjtyZXR1cm4gayh0aGlzLGZ1bmN0''@;'; put 'put ''aW9uKHApe3N3aXRjaChwLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGc9IiIsKDAsWC5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoTik/WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmF1dGhvcml6ZShOKV06WzMsMl07Y2FzZSAxOnJldHVybiBDPXAuc2VudCgpLFM9Qy5zcGxpdCgiPGJvZHk+IilbMV0u''@;'; put 'put ''c3BsaXQoIjwvYm9keT4iKVswXSwodj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPVMsWzIsZz12LnF1ZXJ5U2VsZWN0b3IoIi5pbmZvYm94IGg0IikuaW5uZXJUZXh0XTtjYXNlIDI6cmV0dXJuIFM9Ti5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4i''@;'; put 'put ''KVswXSwodj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPVMsdiYmKGc9di5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCksWzIsZ119fSl9KX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KV07Y2FzZSAxOnJldHVyblsyLEguc2Vu''@;'; put 'put ''dCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0QWNjZXNzVG9rZW49ZnVuY3Rpb24oRyxiLEQpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7cmV0dXJuWzIsKDAsc2UuZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhKSh0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQsRyxiLEQpXX0pfSl9LGNlLnByb3RvdHlwZS5yZWZyZXNoVG9rZW5zPWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3JldHVyblsyLCgwLGhlLnJlZnJlc2hUb2tlbnNGb3JW''@;'; put 'put ''aXlhKSh0aGlzLnJlcXVlc3RDbGllbnQsRyxiLEQpXX0pfSl9LGNlLnByb3RvdHlwZS5kZWxldGVDbGllbnQ9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxIO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwp''@;'; put 'put ''e2Nhc2UgMDpyZXR1cm4gRD10aGlzLnNlcnZlclVybCsiL29hdXRoL2NsaWVudHMvIi5jb25jYXQoRyksSD17fSxiJiYoSC5BdXRob3JpemF0aW9uPSJCZWFyZXIgIi5jb25jYXQoYikpLFs0LHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoRCxiKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgp''@;'; put 'put ''LnJlc3VsdF19fSl9KX0sY2UucHJvdG90eXBlLmV4ZWN1dGVDb21wdXRlSm9iPWZ1bmN0aW9uKEcsYixELEgsTixnLEMsUyx2LHApe3JldHVybiB2b2lkIDA9PT1nJiYoZz0hMCksdm9pZCAwPT09QyYmKEM9ITEpLHZvaWQgMD09PXYmJih2PSExKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbigpe3ZhciB3LEosbmUsZGUsZmUseGUsTGUsRmUsT2UsQmUsV2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihLZSl7c3dpdGNoKEtlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHc9KE58fHt9KS5hY2Nlc3NfdG9rZW4sTj9bNCwoMCxlZS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxO''@;'; put 'put ''KV06WzMsMl07Y2FzZSAxOnc9S2Uuc2VudCgpLmFjY2Vzc190b2tlbixLZS5sYWJlbD0yO2Nhc2UgMjppZigoMCxFLmlzUmVsYXRpdmVQYXRoKShHKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNw''@;'; put 'put ''ZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lIik7cmV0dXJuIEo9Ry5zcGxpdCgiLyIpLG5lPUoucG9wKCksZGU9Si5qb2luKCIvIiksZmU9KDAsRS5pc1JlbGF0aXZlUGF0aCkoRyk/IiIuY29uY2F0KHRoaXMucm9vdEZvbGRlck5hbWUsIi8iKS5jb25jYXQoZGUpOmRlLFs0LHRoaXMucG9w''@;'; put 'put ''dWxhdGVGb2xkZXJNYXAoZmUsdykuY2F0Y2goZnVuY3Rpb24oWWUpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKShZZSwiRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmb2xkZXIgbWFwLiAiKX0pXTtjYXNlIDM6aWYoS2Uuc2VudCgpLCEoeGU9dGhpcy5mb2xkZXJNYXAuZ2V0KGZlKSkpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJUaGUgZm9sZGVyICciLmNvbmNhdChmZSwiJyB3YXMgbm90IGZvdW5kIG9uICciKS5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIiciKSk7aWYoIShMZT14ZT8uZmluZChmdW5jdGlvbihZZSl7cmV0dXJuIFllLm5hbWU9PT1uZX0pKSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMg''@;'; put 'put ''bm90IGZvdW5kLiIpO2lmKEZlPUxlPy5jb2RlKXJldHVyblszLDVdO2lmKCEoT2U9TGU/LmxpbmtzLmZpbmQoZnVuY3Rpb24oWWUpe3JldHVybiJnZXRSZXNvdXJjZSI9PT1ZZS5yZWx9KSkpdGhyb3cgbmV3IEVycm9yKCJVUkkgb2Ygam9iIGRlZmluaXRpb24gd2FzIG5vdCBmb3VuZC4iKTty''@;'; put 'put ''ZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KE9lLmhyZWYpLHcpLmNhdGNoKGZ1bmN0aW9uKFllKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoWWUsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iIGRlZmluaXRpb24uICIpfSld''@;'; put 'put ''O2Nhc2UgNDpCZT1LZS5zZW50KCkucmVzdWx0LExlLmNvZGU9RmU9QmUuY29kZSxLZS5sYWJlbD01O2Nhc2UgNTpyZXR1cm4gRmV8fChGZT0iIiksV2U9RmUucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnNwbGl0KCJcbiIpLFs0LHRoaXMuZXhlY3V0ZVNjcmlwdChHLFdlLGIsTixILEQsQyxnLFMs''@;'; put 'put ''dixwKV07Y2FzZSA2OnJldHVyblsyLEtlLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmV4ZWN1dGVKb2I9ZnVuY3Rpb24oRyxiLEQsSCxOKXt2YXIgZyxDLFM7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHYscCx3LEosbmUsZGUsZmUseGUsTGUsRmUsT2Us''@;'; put 'put ''QmUsV2UsS2UsWWUsSmUsbHQsUGUsYmUsQWUsVGU7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihxZSl7c3dpdGNoKHFlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHY9KE58fHt9KS5hY2Nlc3NfdG9rZW4sTj9bNCwoMCxlZS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxOKV06WzMsMl07Y2Fz''@;'; put 'put ''ZSAxOnY9cWUuc2VudCgpLmFjY2Vzc190b2tlbixxZS5sYWJlbD0yO2Nhc2UgMjppZigoMCxFLmlzUmVsYXRpdmVQYXRoKShHKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSBy''@;'; put 'put ''b290IGZvbGRlciBuYW1lLiIpO3JldHVybiBwPUcuc3BsaXQoIi8iKSx3PXAucG9wKCksSj1wLmpvaW4oIi8iKSxuZT0oMCxFLmlzUmVsYXRpdmVQYXRoKShHKT8iIi5jb25jYXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNvbmNhdChKKTpKLFs0LHRoaXMucG9wdWxhdGVGb2xkZXJNYXAo''@;'; put 'put ''bmUsdildO2Nhc2UgMzppZihxZS5zZW50KCksIShkZT10aGlzLmZvbGRlck1hcC5nZXQobmUpKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBmb2xkZXIgJyIuY29uY2F0KG5lLCInIHdhcyBub3QgZm91bmQgb24gJyIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiJy4iKSk7cmV0dXJuIGZlPWRlPy5m''@;'; put 'put ''aW5kKGZ1bmN0aW9uKFhlKXtyZXR1cm4gWGUubmFtZT09PXd9KSx4ZT1bXSxIJiZPYmplY3Qua2V5cyhIKS5sZW5ndGg/WzQsdGhpcy51cGxvYWRUYWJsZXMoSCx2KV06WzMsNV07Y2FzZSA0OnhlPXFlLnNlbnQoKSxxZS5sYWJlbD01O2Nhc2UgNTppZighZmUpdGhyb3cgbmV3IEVycm9yKCJK''@;'; put 'put ''b2Igd2FzIG5vdCBmb3VuZC4iKTtyZXR1cm4gTGU9bnVsbD09PShnPWZlPy5saW5rcy5maW5kKGZ1bmN0aW9uKFhlKXtyZXR1cm4iZ2V0UmVzb3VyY2UiPT09WGUucmVsfSkpfHx2b2lkIDA9PT1nP3ZvaWQgMDpnLmhyZWYsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhp''@;'; put 'put ''cy5zZXJ2ZXJVcmwpLmNvbmNhdChMZSksdildO2Nhc2UgNjpyZXR1cm4gRmU9cWUuc2VudCgpLnJlc3VsdCxPZT17X2NvbnRleHROYW1lOmIsX3Byb2dyYW06IiIuY29uY2F0KG5lLCIvIikuY29uY2F0KHcpLF93ZWJpbl9maWxlX2NvdW50OnhlLmxlbmd0aCxfT01JVEpTT05MSVNUSU5HOiEw''@;'; put 'put ''LF9PTUlUSlNPTkxPRzohMCxfT01JVFNFU1NJT05SRVNVTFRTOiEwLF9PTUlUVEVYVExJU1RJTkc6ITAsX09NSVRURVhUTE9HOiEwfSxEJiYoT2UuX09NSVRURVhUTE9HPSJmYWxzZSIsT2UuX09NSVRTRVNTSU9OUkVTVUxUUz0iZmFsc2UiLE9lLl9ERUJVRz0xMzEpLHhlLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oWGUsVWUpe09lWyJfd2ViaW5fZmlsZXVyaSIuY29uY2F0KFVlKzEpXT0iL2ZpbGVzL2ZpbGVzLyIuY29uY2F0KFhlLmZpbGUuaWQpLE9lWyJfd2ViaW5fbmFtZSIuY29uY2F0KFVlKzEpXT1YZS50YWJsZU5hbWV9KSxCZT17bmFtZToiZXhlYy0iLmNvbmNhdCh3KSxkZXNjcmlwdGlv''@;'; put 'put ''bjoiUG93ZXJlZCBieSBTQVNqcyIsam9iRGVmaW5pdGlvbjpGZSxhcmd1bWVudHM6T2V9LFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2pvYkV4ZWN1dGlvbi9qb2JzP19hY3Rpb249d2FpdCIpLEJlLHYpXTtjYXNlIDc6cmV0dXJuIFdlPXFl''@;'; put 'put ''LnNlbnQoKS5yZXN1bHQsWzQsdGhpcy5wb2xsSm9iU3RhdGUoV2UsTikuY2F0Y2goZnVuY3Rpb24oWGUpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKShYZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pXTtjYXNlIDg6cmV0dXJuIEtlPXFlLnNlbnQoKSxbNCx0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2pvYkV4ZWN1dGlvbi9qb2JzLyIpLmNvbmNhdChXZS5pZCksdildO2Nhc2UgOTpyZXR1cm4gWWU9cWUuc2VudCgpLnJlc3VsdCxQZT1ZZS5yZXN1bHRzWyJfd2Vib3V0Lmpzb24iXSxiZT1ZZS5saW5rcy5maW5kKGZ1''@;'; put 'put ''bmN0aW9uKFhlKXtyZXR1cm4ibG9nIj09PVhlLnJlbH0pLFBlP1s0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoUGUsIi9jb250ZW50IiksdiwidGV4dC9wbGFpbiIpXTpbMywxMV07Y2FzZSAxMDpKZT1xZS5zZW50KCkscWUubGFiZWw9''@;'; put 'put ''MTE7Y2FzZSAxMTpyZXR1cm4gRCYmYmU/WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChiZS5ocmVmLCIvY29udGVudCIpLHYpLnRoZW4oZnVuY3Rpb24oWGUpe3JldHVybiBYZS5yZXN1bHQuaXRlbXMubWFwKGZ1bmN0aW9uKFVlKXty''@;'; put 'put ''ZXR1cm4gVWUubGluZX0pLmpvaW4oIlxuIil9KV06WzMsMTNdO2Nhc2UgMTI6bHQ9cWUuc2VudCgpLHFlLmxhYmVsPTEzO2Nhc2UgMTM6aWYoImZhaWxlZCI9PT1LZSl0aHJvdyBuZXcgVi5Kb2JFeGVjdXRpb25FcnJvcihudWxsPT09KEM9WWUuZXJyb3IpfHx2b2lkIDA9PT1DP3ZvaWQgMDpD''@;'; put 'put ''LmVycm9yQ29kZSxudWxsPT09KFM9WWUuZXJyb3IpfHx2b2lkIDA9PT1TP3ZvaWQgMDpTLm1lc3NhZ2UsbHQpO3JldHVybiBBZT17cmVzdWx0OkplPy5yZXN1bHQsbG9nOmx0fSwoVGU9WWUuZXJyb3IpJiYoQWUuZXJyb3I9VGUpLFsyLEFlXX19KX0pfSxjZS5wcm90b3R5cGUucG9wdWxhdGVG''@;'; put 'put ''b2xkZXJNYXA9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxOLGc7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihTKXtzd2l0Y2goUy5sYWJlbCl7Y2FzZSAwOnJldHVybiBEPSgwLEUuaXNSZWxhdGl2ZVBhdGgpKEcpPyIiLmNvbmNhdCh0''@;'; put 'put ''aGlzLnJvb3RGb2xkZXJOYW1lLCIvIikuY29uY2F0KEcpOkcsdGhpcy5mb2xkZXJNYXAuZ2V0KEQpP1syXTpbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCgiL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIrRCksYikuY2F0Y2goZnVuY3Rpb24odil7dGhyb3coMCxVLnBy''@;'; put 'put ''ZWZpeE1lc3NhZ2UpKHYsIkVycm9yIHdoaWxlIGdldHRpbmcgZm9sZGVyLiAiKX0pXTtjYXNlIDE6aWYoIShOPVMuc2VudCgpLnJlc3VsdCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGF0aCAiLmNvbmNhdChELCIgZG9lcyBub3QgZXhpc3Qgb24gIikuY29uY2F0KHRoaXMuc2VydmVyVXJsKSk7''@;'; put 'put ''cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2ZvbGRlcnMvZm9sZGVycy8iLmNvbmNhdChOLmlkLCIvbWVtYmVycz9saW1pdD0iKS5jb25jYXQoTi5tZW1iZXJDb3VudDw1MDA/NTAwOk4ubWVtYmVyQ291bnQpLGIpLmNhdGNoKGZ1bmN0aW9uKHYpe3Rocm93KDAsVS5wcmVmaXhN''@;'; put 'put ''ZXNzYWdlKSh2LCJFcnJvciB3aGlsZSBnZXR0aW5nIG1lbWJlcnMuICIpfSldO2Nhc2UgMjpyZXR1cm4gZz1TLnNlbnQoKS5yZXN1bHQsdGhpcy5mb2xkZXJNYXAuc2V0KEQsZy5pdGVtcyksWzJdfX0pfSl9LGNlLnByb3RvdHlwZS5wb2xsSm9iU3RhdGU9ZnVuY3Rpb24oRyxiLEQpe3JldHVy''@;'; put 'put ''biBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7cmV0dXJuWzIsKDAscS5wb2xsSm9iU3RhdGUpKHRoaXMucmVxdWVzdENsaWVudCxHLHRoaXMuZGVidWcsYixEKV19KX0pfSxjZS5wcm90b3R5cGUudXBsb2FkVGFibGVzPWZ1bmN0aW9u''@;'; put 'put ''KEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtyZXR1cm5bMiwoMCx0ZS51cGxvYWRUYWJsZXMpKHRoaXMucmVxdWVzdENsaWVudCxHLGIpXX0pfSl9LGNlLnByb3RvdHlwZS5nZXRGb2xkZXJEZXRhaWxzPWZ1bmN0''@;'; put 'put ''aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQsSDtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQ9KDAsRS5pc1VyaSkoRyk/RzoiL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIuY29u''@;'; put 'put ''Y2F0KEcpLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoRCksYikuY2F0Y2goZnVuY3Rpb24oZyl7aWYoZyBpbnN0YW5jZW9mIFYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBnO3JldHVybntyZXN1bHQ6bnVsbH19KV07Y2FzZSAxOnJl''@;'; put 'put ''dHVybihIPU4uc2VudCgpLnJlc3VsdCk/WzIsSF06WzIsdm9pZCAwXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Rm9sZGVyVXJpPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQ7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2go''@;'; put 'put ''SC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhHLGIpXTtjYXNlIDE6cmV0dXJuKEQ9SC5zZW50KCkpP1syLCIvZm9sZGVycy9mb2xkZXJzLyIuY29uY2F0KEQuaWQpXTpbMix2b2lkIDBdfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRSZWN5Y2xlQmluVXJpPWZ1''@;'; put 'put ''bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29u''@;'; put 'put ''Y2F0KCIvZm9sZGVycy9mb2xkZXJzL0BteVJlY3ljbGVCaW4iKSxHKS5jYXRjaChmdW5jdGlvbihIKXtpZihIIGluc3RhbmNlb2YgVi5DZXJ0aWZpY2F0ZUVycm9yKXRocm93IEg7cmV0dXJue3Jlc3VsdDpudWxsfX0pXTtjYXNlIDE6cmV0dXJuKGI9RC5zZW50KCkucmVzdWx0KT9bMiwiL2Zv''@;'; put 'put ''bGRlcnMvZm9sZGVycy8iLmNvbmNhdChiLmlkKV06WzIsdm9pZCAwXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWU9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3''@;'; put 'put ''aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShHLGIpXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5SWQ9ZnVuY3Rpb24oRyxiKXtyZXR1''@;'; put 'put ''cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5SWQoRyxiKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgp''@;'; put 'put ''XX19KX0pfSxjZS5wcm90b3R5cGUubGlzdEZvbGRlcj1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIHZvaWQgMD09PUQmJihEPTIwKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBILE4sZztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6''@;'; put 'put ''cmV0dXJuKDAsRS5pc1VyaSkoRyk/KE49RyxbMywzXSk6WzMsMV07Y2FzZSAxOnJldHVybls0LHRoaXMuZ2V0Rm9sZGVyVXJpKEcsYildO2Nhc2UgMjpOPUMuc2VudCgpLEMubGFiZWw9MztjYXNlIDM6cmV0dXJuIEg9TixbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlz''@;'; put 'put ''LnNlcnZlclVybCkuY29uY2F0KEgsIi9tZW1iZXJzP2xpbWl0PSIpLmNvbmNhdChEKSxiKV07Y2FzZSA0OnJldHVybihnPUMuc2VudCgpLnJlc3VsdCkmJmcuaXRlbXM/WzIsZy5pdGVtcy5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIFMubmFtZX0pXTpbMixbXV19fSl9KX0sY2UucHJvdG90eXBl''@;'; put 'put ''Lm1vdmVGb2xkZXI9ZnVuY3Rpb24oRyxiLEQsSCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE4sZyxDLFMsdixwO3JldHVybiBrKHRoaXMsZnVuY3Rpb24odyl7c3dpdGNoKHcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gTj1HLnNwbGl0KCIvIikucG9wKCksWzQs''@;'; put 'put ''dGhpcy5nZXRGb2xkZXJEZXRhaWxzKGIsSCldO2Nhc2UgMTpyZXR1cm4gdy5zZW50KCk/RD1OOigoZz1iLnNwbGl0KCIvIikpLnNwbGljZShnLmxlbmd0aC0xLDEpLGI9Zy5qb2luKCIvIikpLFs0LHRoaXMuZ2V0Rm9sZGVyVXJpKEcsSCldO2Nhc2UgMjpyZXR1cm4gQz13LnNlbnQoKSxbNCx0''@;'; put 'put ''aGlzLmdldEZvbGRlclVyaShiLEgpXTtjYXNlIDM6cmV0dXJuIFM9dy5zZW50KCksQz8odj1DPy5zcGxpdCgiLyIpLnBvcCgpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wYXRjaCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChDKSx7aWQ6dixuYW1lOkQscGFyZW50Rm9sZGVyVXJp''@;'; put 'put ''OlN9LEgpLmNhdGNoKGZ1bmN0aW9uKEope3Rocm93IEouY29kZSYmIkVOT1RGT1VORCI9PT1KLmNvZGU/e2JvZHk6e21lc3NhZ2U6IkZvbGRlciAnIi5jb25jYXQoRy5zcGxpdCgiLyIpLnBvcCgpLCInIHdhcyBub3QgZm91bmQuIil9fTpKfSldKTpbMix2b2lkIDBdO2Nhc2UgNDpyZXR1cm4o''@;'; put 'put ''cD13LnNlbnQoKS5yZXN1bHQpP1syLHBdOlsyLHZvaWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmRlbGV0ZUZvbGRlcj1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELEgsTixnO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNo''@;'; put 'put ''KFMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmdldFJlY3ljbGVCaW5VcmkoYildO2Nhc2UgMTpyZXR1cm4gRD1TLnNlbnQoKSxIPUcuc3BsaXQoIi8iKS5wb3AoKXx8IiIsZz0oTj1uZXcgRGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCkrIiAiK04udG9Mb2NhbGVUaW1lU3RyaW5nKCks''@;'; put 'put ''WzQsdGhpcy5tb3ZlRm9sZGVyKEcsRCxIKyIgIitnLGIpXTtjYXNlIDI6cmV0dXJuWzIsUy5zZW50KCldfX0pfSl9LGNlfSgpO08uU0FTVml5YUFwaUNsaWVudD11ZX0sNTk1NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHo9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oaGUpe2Zvcih2YXIgdWUsY2U9MSxHPWFyZ3VtZW50cy5sZW5ndGg7Y2U8RztjZSsrKWZvcih2YXIgYiBpbiB1ZT1hcmd1bWVudHNbY2VdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1ZSxiKSYmKGhlW2Jd''@;'; put 'put ''PXVlW2JdKTtyZXR1cm4gaGV9LHouYXBwbHkodGhpcyxhcmd1bWVudHMpfSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihoZSx1ZSxjZSxHKXtyZXR1cm4gbmV3KGNlfHwoY2U9UHJvbWlzZSkpKGZ1bmN0aW9uKGIsRCl7ZnVuY3Rpb24gSChDKXt0cnl7ZyhHLm5leHQoQykpfWNh''@;'; put 'put ''dGNoKFMpe0QoUyl9fWZ1bmN0aW9uIE4oQyl7dHJ5e2coRy50aHJvdyhDKSl9Y2F0Y2goUyl7RChTKX19ZnVuY3Rpb24gZyhDKXt2YXIgUztDLmRvbmU/YihDLnZhbHVlKTooUz1DLnZhbHVlLFMgaW5zdGFuY2VvZiBjZT9TOm5ldyBjZShmdW5jdGlvbih2KXt2KFMpfSkpLnRoZW4oSCxOKX1n''@;'; put 'put ''KChHPUcuYXBwbHkoaGUsdWV8fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGhlLHVlKXt2YXIgY2UsRyxiLEQsSD17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZiWzBdKXRocm93IGJbMV07cmV0dXJuIGJbMV19LHRyeXM6W10sb3BzOltd''@;'; put 'put ''fTtyZXR1cm4gRD17bmV4dDpOKDApLHRocm93Ok4oMSkscmV0dXJuOk4oMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihEW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEQ7ZnVuY3Rpb24gTihnKXtyZXR1cm4gZnVuY3Rpb24oQyl7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKFMpe2lmKGNlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0g7KXRyeXtpZihjZT0xLEcmJihiPTImU1swXT9HLnJldHVybjpTWzBdP0cudGhyb3d8fCgoYj1HLnJldHVybikmJmIuY2FsbChHKSwwKTpHLm5leHQpJiYhKGI9''@;'; put 'put ''Yi5jYWxsKEcsU1sxXSkpLmRvbmUpcmV0dXJuIGI7c3dpdGNoKEc9MCxiJiYoUz1bMiZTWzBdLGIudmFsdWVdKSxTWzBdKXtjYXNlIDA6Y2FzZSAxOmI9UzticmVhaztjYXNlIDQ6cmV0dXJuIEgubGFiZWwrKyx7dmFsdWU6U1sxXSxkb25lOiExfTtjYXNlIDU6SC5sYWJlbCsrLEc9U1sxXSxT''@;'; put 'put ''PVswXTtjb250aW51ZTtjYXNlIDc6Uz1ILm9wcy5wb3AoKSxILnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChiPShiPUgudHJ5cykubGVuZ3RoPjAmJmJbYi5sZW5ndGgtMV0pfHw2IT09U1swXSYmMiE9PVNbMF0pKXtIPTA7Y29udGludWV9aWYoMz09PVNbMF0mJighYnx8U1sx''@;'; put 'put ''XT5iWzBdJiZTWzFdPGJbM10pKXtILmxhYmVsPVNbMV07YnJlYWt9aWYoNj09PVNbMF0mJkgubGFiZWw8YlsxXSl7SC5sYWJlbD1iWzFdLGI9UzticmVha31pZihiJiZILmxhYmVsPGJbMl0pe0gubGFiZWw9YlsyXSxILm9wcy5wdXNoKFMpO2JyZWFrfWJbMl0mJkgub3BzLnBvcCgpLEgudHJ5''@;'; put 'put ''cy5wb3AoKTtjb250aW51ZX1TPXVlLmNhbGwoaGUsSCl9Y2F0Y2godil7Uz1bNix2XSxHPTB9ZmluYWxseXtjZT1iPTB9aWYoNSZTWzBdKXRocm93IFNbMV07cmV0dXJue3ZhbHVlOlNbMF0/U1sxXTp2b2lkIDAsZG9uZTohMH19KFtnLENdKX19fSxrPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJh''@;'; put 'put ''eXx8ZnVuY3Rpb24oaGUsdWUsY2Upe2lmKGNlfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIEcsYj0wLEQ9dWUubGVuZ3RoO2I8RDtiKyspIUcmJmIgaW4gdWV8fChHfHwoRz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh1ZSwwLGIpKSxHW2JdPXVlW2JdKTtyZXR1cm4gaGUuY29u''@;'; put 'put ''Y2F0KEd8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHVlKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRT1SKDU5MjgpLGo9UigxMjMwKSxWPVIoOTgyMSksQj1SKDgzMDYpLFk9UigzNDY3KSxYPVIoMTUyNyksVT1SKDM5MDApLHE9''@;'; put 'put ''Uig0NTg4KSxlZT1SKDM2MDIpLHRlPVIoODIxNyksb2U9e3NlcnZlclVybDoiIixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAvZXhlY3V0ZSIscGF0aFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRh''@;'; put 'put ''cHAiLHNlcnZlclR5cGU6VS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZGVidWc6ITEsY29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsdXNlQ29tcHV0ZUFwaTpudWxsLGxvZ2luTWVjaGFuaXNtOmouTG9naW5NZWNoYW5pc20uRGVmYXVsdH0sc2U9ZnVuY3Rpb24o''@;'; put 'put ''KXtmdW5jdGlvbiBoZSh1ZSl7dmFyIGNlPXRoaXM7dGhpcy5zYXNqc0NvbmZpZz1uZXcgai5TQVNqc0NvbmZpZyx0aGlzLmpvYnNQYXRoPSIiLHRoaXMuc2FzVml5YUFwaUNsaWVudD1udWxsLHRoaXMuc2FzOUFwaUNsaWVudD1udWxsLHRoaXMuc2FzSlNBcGlDbGllbnQ9bnVsbCx0aGlzLmZp''@;'; put 'put ''bGVVcGxvYWRlcj1udWxsLHRoaXMuYXV0aE1hbmFnZXI9bnVsbCx0aGlzLnJlcXVlc3RDbGllbnQ9bnVsbCx0aGlzLndlYkpvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmplc0pvYkV4ZWN1dG9yPW51''@;'; put 'put ''bGwsdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bnVsbCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiBLKGNlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyxiLEQsSCxOO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2Ug''@;'; put 'put ''MDpyZXR1cm5bNCxudWxsPT09KEc9dGhpcy53ZWJKb2JFeGVjdXRvcil8fHZvaWQgMD09PUc/dm9pZCAwOkcucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgMTpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShiPXRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Yj92b2lk''@;'; put 'put ''IDA6Yi5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKV07Y2FzZSAyOnJldHVybiBnLnNlbnQoKSxbNCxudWxsPT09KEQ9dGhpcy5qZXNKb2JFeGVjdXRvcil8fHZvaWQgMD09PUQ/dm9pZCAwOkQucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgMzpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09''@;'; put 'put ''PShIPXRoaXMuZmlsZVVwbG9hZGVyKXx8dm9pZCAwPT09SD92b2lkIDA6SC5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKV07Y2FzZSA0OnJldHVybiBnLnNlbnQoKSxbNCxudWxsPT09KE49dGhpcy5zYXNqc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Tj92b2lkIDA6Ti5yZXNlbmRXYWl0aW5nUmVx''@;'; put 'put ''dWVzdHMoKV07Y2FzZSA1OnJldHVybiBnLnNlbnQoKSxbMl19fSl9KX0sdGhpcy5zZXRWZXJib3NlTW9kZT1mdW5jdGlvbihHKXt2YXIgYjtudWxsPT09KGI9Y2UucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWJ8fGIuc2V0VmVyYm9zZU1vZGUoRyl9LHRoaXMuc2FzanNDb25maWc9eih6KHt9''@;'; put 'put ''LG9lKSx1ZSksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX1yZXR1cm4gaGUucHJvdG90eXBlLmdldENzcmZUb2tlbj1mdW5jdGlvbih1ZSl7dmFyIGNlO3JldHVybiB2b2lkIDA9PT11ZSYmKHVlPSJnZW5lcmFsIiksbnVsbD09PShjZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1j''@;'; put 'put ''ZT92b2lkIDA6Y2UuZ2V0Q3NyZlRva2VuKHVlKX0saGUucHJvdG90eXBlLmV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24odWUpe3ZhciBjZSxHLGI9dWUubGluZXNPZkNvZGUsRD11ZS5maWxlTmFtZSxIPXVlLmNvbnRleHROYW1lLE49dWUucnVuVGltZSxnPXVlLmF1dGhDb25maWcsQz11ZS5hdXRo''@;'; put 'put ''Q29uZmlnU2FzOSxTPXVlLmRlYnVnO3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24odil7c3dpdGNoKHYubGFiZWwpe2Nhc2UgMDppZih0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbVS5TZXJ2ZXJUeXBl''@;'; put 'put ''LlNhczksVS5TZXJ2ZXJUeXBlLlNhc2pzLFUuU2VydmVyVHlwZS5TYXNWaXlhXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhczkpcmV0dXJuWzMsMl07aWYoIUMpdGhyb3cgbmV3IEVycm9yKCJBdXRoIGNvbmZpZyBmb3Igc2FzOSBpcyBub3QgcHJvdmlk''@;'; put 'put ''ZWQiKTtyZXR1cm5bNCxudWxsPT09KGNlPXRoaXMuc2FzOUFwaUNsaWVudCl8fHZvaWQgMD09PWNlP3ZvaWQgMDpjZS5leGVjdXRlU2NyaXB0KGIsQy51c2VyTmFtZSxDLnBhc3N3b3JkKV07Y2FzZSAxOmNhc2UgMzpjYXNlIDU6cmV0dXJuWzIsdi5zZW50KCldO2Nhc2UgMjpyZXR1cm4gdGhp''@;'; put 'put ''cy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDRdOls0LG51bGw9PT0oRz10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09Rz92b2lkIDA6Ry5leGVjdXRlU2NyaXB0KGIuam9pbigiXG4iKSxOLGcpXTtjYXNlIDQ6aWYodGhpcy5zYXNqc0NvbmZp''@;'; put 'put ''Zy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpcmV0dXJuWzMsNl07aWYoIShIPUh8fHRoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91''@;'; put 'put ''ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7aWYoIUQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIG5hbWUgaXMgcmVxdWlyZWQgaW4gY2FzZSBvZiBTQVMgVklZQS4gUGxlYXNlIHByb3ZpZGUgYSBgZmlsZU5hbWVgLiIpO3JldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5leGVjdXRl''@;'; put 'put ''U2NyaXB0KEQsYixILGcsbnVsbCxTfHx0aGlzLnNhc2pzQ29uZmlnLmRlYnVnKV07Y2FzZSA2OnJldHVyblsyXX19KX0pfSxoZS5wcm90b3R5cGUuZXhlY3V0ZUpvYj1mdW5jdGlvbih1ZSxjZSxHKXt2YXIgYjtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''SSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtVLlNlcnZlclR5cGUuU2FzanNdKSxbNCxudWxsPT09KGI9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PWI/dm9pZCAwOmIu''@;'; put 'put ''ZXhlY3V0ZUpvYih1ZSxjZSxHKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtz''@;'; put 'put ''d2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRzKHVlKV07Y2FzZSAxOnJldHVyblsyLGNl''@;'; put 'put ''LnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldExhdW5jaGVyQ29udGV4dHM9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlz''@;'; put 'put ''TWV0aG9kU3VwcG9ydGVkKCJnZXRMYXVuY2hlckNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0TGF1bmNoZXJDb250ZXh0cyh1ZSldO2Nhc2UgMTpyZXR1cm5bMixjZS5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXREZWZh''@;'; put 'put ''dWx0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldERlZmF1bHRDb21wdXRlQ29udGV4dHMiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl9LGhl''@;'; put 'put ''LnByb3RvdHlwZS5nZXRFeGVjdXRhYmxlQ29udGV4dHM9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVk''@;'; put 'put ''KCJnZXRFeGVjdXRhYmxlQ29udGV4dHMiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRFeGVjdXRhYmxlQ29udGV4dHModWUpXTtjYXNlIDE6cmV0dXJuWzIsY2Uuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRlQ29tcHV0ZUNvbnRl''@;'; put 'put ''eHQ9ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVDb21wdXRlQ29udGV4''@;'; put 'put ''dCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUNvbXB1dGVDb250ZXh0KHVlLGNlLEcsYixELEgpXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVMYXVuY2hlckNvbnRleHQ9ZnVuY3Rpb24o''@;'; put 'put ''dWUsY2UsRyxiKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUxhdW5jaGVyQ29udGV4dCIsW1UuU2VydmVyVHlw''@;'; put 'put ''ZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUxhdW5jaGVyQ29udGV4dCh1ZSxjZSxHLGIpXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5lZGl0Q29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24odWUsY2UsRyl7cmV0dXJuIEsodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJlZGl0Q29tcHV0ZUNvbnRleHQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5''@;'; put 'put ''YUFwaUNsaWVudC5lZGl0Q29tcHV0ZUNvbnRleHQodWUsY2UsRyldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmRlbGV0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250ZXh0IixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ29tcHV0ZUNvbnRl''@;'; put 'put ''eHQodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZT1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0''@;'; put 'put ''Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5TmFtZSIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlOYW1lKHVlLGNlKV07Y2FzZSAxOnJl''@;'; put 'put ''dHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0''@;'; put 'put ''dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlJZCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlJZCh1ZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUu''@;'; put 'put ''cHJvdG90eXBlLmNyZWF0ZVNlc3Npb249ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRl''@;'; put 'put ''U2Vzc2lvbiIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNlc3Npb24odWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVGb2xkZXI9ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCl7cmV0''@;'; put 'put ''dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiBEP1s0LEQuY3JlYXRlRm9sZGVyKHVlLGNlLEcsYixIKV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixOLnNlbnQoKV07''@;'; put 'put ''Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGb2xkZXIodWUsY2UsRyxiLEgpXX19KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbih1ZSxjZSxHLGIsRCxIKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''SSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEg/WzQsSC5jcmVhdGVGaWxlKHVlLGNlLEcsYixEKV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixOLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVG''@;'; put 'put ''aWxlKHVlLGNlLEcsYixEKV19fSl9KX0saGUucHJvdG90eXBlLmdldEZvbGRlcj1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlz''@;'; put 'put ''TWV0aG9kU3VwcG9ydGVkKCJnZXRGb2xkZXIiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRGb2xkZXIodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5kZWxldGVGb2xkZXI9ZnVuY3Rpb24odWUs''@;'; put 'put ''Y2Upe3ZhciBHO3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlRm9sZGVyIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFd''@;'; put 'put ''KSxbNCxudWxsPT09KEc9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Rz92b2lkIDA6Ry5kZWxldGVGb2xkZXIodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5saXN0Rm9sZGVyPWZ1bmN0aW9uKHVlLGNlLEcpe3ZhciBiO3JldHVy''@;'; put 'put ''biBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibGlzdEZvbGRlciIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsbnVsbD09PShiPXRo''@;'; put 'put ''aXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PWI/dm9pZCAwOmIubGlzdEZvbGRlcih1ZSxjZSxHKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUubW92ZUZvbGRlcj1mdW5jdGlvbih1ZSxjZSxHLGIpe3ZhciBEO3JldHVybiBLKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibW92ZUZvbGRlciIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsbnVsbD09PShEPXRoaXMuc2FzVml5YUFwaUNs''@;'; put 'put ''aWVudCl8fHZvaWQgMD09PUQ/dm9pZCAwOkQubW92ZUZvbGRlcih1ZSxjZSxHLGIpXTtjYXNlIDE6cmV0dXJuWzIsSC5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVKb2JEZWZpbml0aW9uPWZ1bmN0aW9uKHVlLGNlLEcsYixELEgpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlSm9iRGVmaW5pdGlvbiIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksSD9bNCxILmNyZWF0ZUpvYkRlZmluaXRpb24o''@;'; put 'put ''dWUsY2UsRyxiLEQpXTpbMywyXTtjYXNlIDE6Y2FzZSAzOnJldHVyblsyLE4uc2VudCgpXTtjYXNlIDI6cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUpvYkRlZmluaXRpb24odWUsY2UsRyxiLEQpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0QXV0aENvZGU9ZnVuY3Rpb24o''@;'; put 'put ''dWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBdXRoQ29kZSIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQs''@;'; put 'put ''dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEF1dGhDb2RlKHVlKV07Y2FzZSAxOnJldHVyblsyLGNlLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKHVlLGNlLEcpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJ''@;'; put 'put ''KHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QWNjZXNzVG9rZW4iLFtVLlNlcnZlclR5cGUuU2FzVml5YSxVLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUhPT1VLlNl''@;'; put 'put ''cnZlclR5cGUuU2FzanM/WzMsMl06WzQsdGhpcy5zYXNKU0FwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbih1ZSxHKV07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixiLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbih1ZSxjZSxHKV19fSl9''@;'; put 'put ''KX0saGUucHJvdG90eXBlLnJlZnJlc2hUb2tlbnM9ZnVuY3Rpb24odWUsY2UsRyl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVk''@;'; put 'put ''KCJyZWZyZXNoVG9rZW5zIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsVS5TZXJ2ZXJUeXBlLlNhc2pzXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMuc2FzSlNBcGlDbGllbnQucmVmcmVzaFRva2VucyhHKV07Y2FzZSAxOmNh''@;'; put 'put ''c2UgMzpyZXR1cm5bMixiLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5yZWZyZXNoVG9rZW5zKHVlLGNlLEcpXX19KX0pfSxoZS5wcm90b3R5cGUuZGVsZXRlQ2xpZW50PWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNsaWVudCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNsaWVudCh1''@;'; put 'put ''ZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldFNhc2pzQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2FzanNDb25maWd9LGhlLnByb3RvdHlwZS5nZXRVc2VyTmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLnVz''@;'; put 'put ''ZXJOYW1lfSxoZS5wcm90b3R5cGUuc2V0U0FTanNDb25maWc9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oY2Upe3JldHVybiB0aGlzLnNhc2pzQ29uZmlnPXooeih7fSx0aGlzLnNhc2pzQ29uZmlnKSx1''@;'; put 'put ''ZSksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKSxbMl19KX0pfSxoZS5wcm90b3R5cGUuc2V0RGVidWdTdGF0ZT1mdW5jdGlvbih1ZSl7dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zz11ZSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVidWc9dWUpfSxoZS5w''@;'; put 'put ''cm90b3R5cGUuY2hlY2tTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbih1ZSl7cmV0dXJuWzIsdGhpcy5hdXRoTWFuYWdlci5jaGVja1Nlc3Npb24oKV19KX0pfSxoZS5wcm90b3R5cGUubG9nSW49''@;'; put 'put ''ZnVuY3Rpb24odWUsY2UsRyxiKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9e30pLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihEKXtpZih0aGlzLnNhc2pzQ29uZmlnLmxvZ2luTWVjaGFuaXNtPT09ai5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0''@;'; put 'put ''KXtpZighdWV8fCFjZSl0aHJvdyBuZXcgRXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2luIG1lY2hhbmlzbS4iKTtyZXR1cm5bMix0aGlzLmF1dGhNYW5hZ2VyLmxvZ0luKHVlLGNlKV19aWYodHlwZW9mIHdpbmRv''@;'; put 'put ''dz4idSIpdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVkaXJlY3RlZCBsb2dpbiBtZWNoYW5pc20gaXMgb25seSBhdmFpbGFibGUgZm9yIHVzZSBpbiB0aGUgYnJvd3Nlci4iKTtyZXR1cm5bMix0aGlzLmF1dGhNYW5hZ2VyLnJlZGlyZWN0ZWRMb2dJbihiKV19KX0pfSxoZS5wcm90b3R5cGUubG9n''@;'; put 'put ''T3V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIubG9nT3V0KCl9LGhlLnByb3RvdHlwZS51cGxvYWRGaWxlPWZ1bmN0aW9uKHVlLGNlLEcsYixEKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9e30pLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhp''@;'; put 'put ''cyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiBiPXooeih7fSx0aGlzLnNhc2pzQ29uZmlnKSxiKSxbNCx0aGlzLmZpbGVVcGxvYWRlci5leGVjdXRlKHVlLHtmaWxlczpjZSxwYXJhbXM6R30sYixEKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSxo''@;'; put 'put ''ZS5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbih1ZSxjZSxHLGIsRCxIKXtyZXR1cm4gdm9pZCAwPT09RyYmKEc9e30pLHZvaWQgMD09PUgmJihIPVtdKSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFi''@;'; put 'put ''ZWwpe2Nhc2UgMDpyZXR1cm4gRz16KHooe30sdGhpcy5zYXNqc0NvbmZpZyksRyksKE49KDAsRS52YWxpZGF0ZUlucHV0KShjZSkpLnN0YXR1cz9HLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzanM/WzMsMl06WzQsdGhpcy5zYXNqc0pvYkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyxi''@;'; put 'put ''LEQsSCldOlszLDEyXTtjYXNlIDE6Y2FzZSAzOmNhc2UgNTpjYXNlIDg6Y2FzZSAxMDpyZXR1cm5bMixnLnNlbnQoKV07Y2FzZSAyOnJldHVybiBHLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzVml5YXx8bnVsbD09Ry51c2VDb21wdXRlQXBpP1szLDddOkcudXNlQ29tcHV0ZUFwaT9b''@;'; put 'put ''NCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvci5leGVjdXRlKHVlLGNlLEcsYixEKV06WzMsNF07Y2FzZSA0OnJldHVybiBHLmNvbnRleHROYW1lfHwoRz16KHooe30sRykse2NvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQifSkpLFs0LHRoaXMuamVzSm9iRXhl''@;'; put 'put ''Y3V0b3IuZXhlY3V0ZSh1ZSxjZSxHLGIsRCxIKV07Y2FzZSA2OnJldHVyblszLDExXTtjYXNlIDc6cmV0dXJuIEcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXM5JiZHLnVzZXJuYW1lJiZHLnBhc3N3b3JkP1s0LHRoaXMuc2FzOUpvYkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyldOlsz''@;'; put 'put ''LDldO2Nhc2UgOTpyZXR1cm5bNCx0aGlzLndlYkpvYkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyxiLEQsSCldO2Nhc2UgMTE6cmV0dXJuWzMsMTNdO2Nhc2UgMTI6cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IGouRXJyb3JSZXNwb25zZShOLm1zZykpXTtjYXNlIDEzOnJldHVyblsyXX19''@;'; put 'put ''KX0pfSxoZS5wcm90b3R5cGUuZGVwbG95U2VydmljZVBhY2s9ZnVuY3Rpb24odWUsY2UsRyxiLEQpe3JldHVybiB2b2lkIDA9PT1EJiYoRD0hMSksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSCxOO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwp''@;'; put 'put ''e2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVwbG95U2VydmljZVBhY2siLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLEg9bnVsbCxHfHxjZT8oR3x8KEc9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpLGNlfHwoY2U9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpLHRo''@;'; put 'put ''aXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXNWaXlhPyhIPW5ldyBWLlNBU1ZpeWFBcGlDbGllbnQoRyxjZSx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCkpLmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWc6dGhpcy5z''@;'; put 'put ''YXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhczkmJihIPW5ldyBCLlNBUzlBcGlDbGllbnQoRyx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSk6KE49bnVsbCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzVml5YT9OPXRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb25maWcoKTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOSYmKE49dGhpcy5zYXM5QXBpQ2xpZW50LmdldENvbmZpZygpKSxHPU4uc2VydmVyVXJsLGNlPU4ucm9vdEZvbGRlck5h''@;'; put 'put ''bWUpLHVlLm1lbWJlcnNbMF0ubWVtYmVycyYmdWUubWVtYmVyc1swXS5tZW1iZXJzLnNvcnQoZnVuY3Rpb24oUyl7cmV0dXJuImZvbGRlciI9PT1TLnR5cGU/LTE6MX0pLFs0LHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKGNlLHVlLm1lbWJlcnMsYixILEQpXTtjYXNlIDE6cmV0dXJu''@;'; put 'put ''IEMuc2VudCgpLFsyXX19KX0pfSxoZS5wcm90b3R5cGUuc3RhcnRDb21wdXRlSm9iPWZ1bmN0aW9uKHVlLGNlLEcsYixELEgsTixnLEMpe3ZhciBTLHYscCx3O3JldHVybiB2b2lkIDA9PT1HJiYoRz17fSksdm9pZCAwPT09TiYmKE49ITEpLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihKKXtpZihHPXooeih7fSx0aGlzLnNhc2pzQ29uZmlnKSxHKSx0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJzdGFydENvbXB1dGVKb2IiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLCFHLmNvbnRleHROYW1lKXRocm93IG5ldyBFcnJvcigiQ29udGV4''@;'; put 'put ''dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7cmV0dXJuIEM/KG51bGw9PT0oUz10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1TfHxTLnNldFZlcmJvc2VNb2RlKEMpLG51bGw9PT0o''@;'; put 'put ''dj10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT12fHx2LmVuYWJsZVZlcmJvc2VNb2RlKCkpOiExPT09QyYmKG51bGw9PT0ocD10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1wfHxwLmRpc2FibGVWZXJib3NlTW9kZSgpKSxbMixudWxsPT09KHc9dGhpcy5zYXNWaXlhQXBpQ2xp''@;'; put 'put ''ZW50KXx8dm9pZCAwPT09dz92b2lkIDA6dy5leGVjdXRlQ29tcHV0ZUpvYih1ZSxHLmNvbnRleHROYW1lLEcuZGVidWcsY2UsYiwhIUQsITEsSCxOLGcpXX0pfSl9LGhlLnByb3RvdHlwZS5mZXRjaExvZ0ZpbGVDb250ZW50PWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh1ZSxjZSkudGhlbihmdW5jdGlvbihiKXtpZighYilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGouRXJyb3JSZXNw''@;'; put 'put ''b25zZSgiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgbG9nLiBSZXNwb25zZSB3YXMgbm90IHByb3ZpZGVkLiIpKTt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGIucmVzdWx0KX1jYXRjaChEKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGouRXJyb3JSZXNwb25zZSgiRXJyb3Igd2hpbGUgZmV0''@;'; put 'put ''Y2hpbmcgbG9nLiBUaGUgcmVzdWx0IGlzIG5vdCB2YWxpZC4iLEQpKX19KV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0U2FzUmVxdWVzdHM9ZnVuY3Rpb24oKXtyZXR1cm4gayhbXSx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0UmVxdWVzdHMoKSwhMCku''@;'; put 'put ''c29ydChFLmNvbXBhcmVUaW1lc3RhbXBzKX0saGUucHJvdG90eXBlLmNsZWFyU2FzUmVxdWVzdHM9ZnVuY3Rpb24oKXt0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJSZXF1ZXN0cygpfSxoZS5wcm90b3R5cGUuc2V0dXBDb25maWd1cmF0aW9uPWZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5z''@;'; put 'put ''YXNqc0NvbmZpZy5zZXJ2ZXJVcmx8fCIiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7dmFyIHVlPSIiLmNvbmNhdChsb2NhdGlvbi5wcm90b2NvbCwiLy8iKS5jb25jYXQobG9jYXRpb24uaG9zdG5hbWUpO2xvY2F0aW9uLnBvcnQmJih1ZT0i''@;'; put 'put ''Ii5jb25jYXQodWUsIjoiKS5jb25jYXQobG9jYXRpb24ucG9ydCkpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPXVlfWVsc2UgdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9IiI7Ii8iPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwuc2xpY2UoLTEpJiYodGhpcy5zYXNqc0NvbmZp''@;'; put 'put ''Zy5zZXJ2ZXJVcmw9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwuc2xpY2UoMCwtMSkpLHRoaXMucmVxdWVzdENsaWVudD90aGlzLnJlcXVlc3RDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpOnRo''@;'; put 'put ''aXMucmVxdWVzdENsaWVudD1uZXcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc2pzP2VlLlNhc2pzUmVxdWVzdENsaWVudDpxLlJlcXVlc3RDbGllbnQpKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9w''@;'; put 'put ''dGlvbnMsdGhpcy5zYXNqc0NvbmZpZy5yZXF1ZXN0SGlzdG9yeUxpbWl0LHRoaXMuc2FzanNDb25maWcudmVyYm9zZSksdGhpcy5qb2JzUGF0aD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzVml5YT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVNWaXlhOnRo''@;'; put 'put ''aXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXM5P3RoaXMuc2FzanNDb25maWcucGF0aFNBUzk6dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTSlMsdGhpcy5hdXRoTWFuYWdlcj1uZXcgWC5BdXRoTWFuYWdlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlz''@;'; put 'put ''LnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzVml5YSYmKHRoaXMuc2FzVml5YUFwaUNsaWVudD90aGlzLnNhc1ZpeWFBcGlDbGll''@;'; put 'put ''bnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuYXBwTG9jKTp0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bmV3IFYuU0FTVml5YUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyx0aGlz''@;'; put 'put ''LnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXM5JiYodGhpcy5zYXM5QXBpQ2xpZW50''@;'; put 'put ''P3RoaXMuc2FzOUFwaUNsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpOnRoaXMuc2FzOUFwaUNsaWVudD1uZXcgQi5TQVM5QXBpQ2xpZW50KHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50''@;'; put 'put ''T3B0aW9ucykpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXNqcyYmKHRoaXMuc2FzSlNBcGlDbGllbnR8fCh0aGlzLnNhc0pTQXBpQ2xpZW50PW5ldyBZLlNBU2pzQXBpQ2xpZW50KHRoaXMucmVxdWVzdENsaWVudCkpKSx0aGlzLmZpbGVVcGxvYWRlcj1u''@;'; put 'put ''ZXcgdGUuRmlsZVVwbG9hZGVyKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgdGUuV2ViSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZp''@;'; put 'put ''Zy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2FzVml5YUFwaUNsaWVudCksdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW5ldyB0ZS5TYXNqc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVy''@;'; put 'put ''VXJsLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLnNhczlKb2JFeGVjdXRvcj1uZXcgdGUuU2FzOUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENs''@;'; put 'put ''aWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1uZXcgdGUuQ29tcHV0ZUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCksdGhpcy5qZXNKb2JFeGVjdXRvcj1uZXcg''@;'; put 'put ''dGUuSmVzSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KX0saGUucHJvdG90eXBlLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcz1mdW5jdGlvbih1ZSxjZSxHLGIsRCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIEg9dGhpcztyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsRS5hc3luY0ZvckVhY2gpKGNlLGZ1bmN0aW9uKGcpe3JldHVybiBLKEgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24o''@;'; put 'put ''Qyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpzd2l0Y2goZy50eXBlKXtjYXNlImZvbGRlciI6cmV0dXJuWzMsMV07Y2FzZSJmaWxlIjpyZXR1cm5bMywzXTtjYXNlInNlcnZpY2UiOnJldHVyblszLDVdfXJldHVyblszLDddO2Nhc2UgMTpyZXR1cm5bNCx0aGlzLmNyZWF0ZUZvbGRlcihnLm5h''@;'; put 'put ''bWUsdWUsdm9pZCAwLEcsYixEKV07Y2FzZSAyOnJldHVybiBDLnNlbnQoKSxbMyw4XTtjYXNlIDM6cmV0dXJuWzQsdGhpcy5jcmVhdGVGaWxlKGcubmFtZSxnLmNvZGUsdWUsdm9pZCAwLEcsYildO2Nhc2UgNDpyZXR1cm4gQy5zZW50KCksWzMsOF07Y2FzZSA1OnJldHVybls0LHRoaXMuY3Jl''@;'; put 'put ''YXRlSm9iRGVmaW5pdGlvbihnLm5hbWUsZy5jb2RlLHVlLHZvaWQgMCxHLGIpXTtjYXNlIDY6cmV0dXJuIEMuc2VudCgpLFszLDhdO2Nhc2UgNzp0aHJvdyBuZXcgRXJyb3IoIlVuaWRlbnRpZmllZCBtZW1iZXIgJyIuY29uY2F0KGcubmFtZSwiJyBwcm92aWRlZC4iKSk7Y2FzZSA4OnJldHVy''@;'; put 'put ''biJmb2xkZXIiPT09Zy50eXBlJiZnLm1lbWJlcnMmJmcubWVtYmVycy5sZW5ndGg/WzQsdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoIiIuY29uY2F0KHVlLCIvIikuY29uY2F0KGcubmFtZSksZy5tZW1iZXJzLEcsYixEKV06WzMsMTBdO2Nhc2UgOTpDLnNlbnQoKSxDLmxhYmVsPTEw''@;'; put 'put ''O2Nhc2UgMTA6cmV0dXJuWzJdfX0pfSl9KV07Y2FzZSAxOnJldHVybiBOLnNlbnQoKSxbMl19fSl9KX0saGUucHJvdG90eXBlLmlzTWV0aG9kU3VwcG9ydGVkPWZ1bmN0aW9uKHVlLGNlKXtpZighdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlfHwhY2UuaW5jbHVkZXModGhpcy5zYXNqc0Nv''@;'; put 'put ''bmZpZy5zZXJ2ZXJUeXBlKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAnIi5jb25jYXQodWUsIicgaXMgb25seSBzdXBwb3J0ZWQgb24gIikuY29uY2F0KGNlLmpvaW4oIiwgIiksIiBzZXJ2ZXJzLiIpKX0saGUucHJvdG90eXBlLmVuYWJsZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKHVlLGNlKXt2''@;'; put 'put ''YXIgRztudWxsPT09KEc9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09R3x8Ry5lbmFibGVWZXJib3NlTW9kZSh1ZSxjZSl9LGhlLnByb3RvdHlwZS5kaXNhYmxlVmVyYm9zZU1vZGU9ZnVuY3Rpb24oKXt2YXIgdWU7bnVsbD09PSh1ZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9''@;'; put 'put ''PT11ZXx8dWUuZGlzYWJsZVZlcmJvc2VNb2RlKCl9LGhlfSgpO08uZGVmYXVsdD1zZX0sMzQ2NzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIHo9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oVSl7Zm9yKHZh''@;'; put 'put ''ciBxLGVlPTEsdGU9YXJndW1lbnRzLmxlbmd0aDtlZTx0ZTtlZSsrKWZvcih2YXIgb2UgaW4gcT1hcmd1bWVudHNbZWVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxLG9lKSYmKFVbb2VdPXFbb2VdKTtyZXR1cm4gVX0sei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEs9''@;'; put 'put ''dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFUscSxlZSx0ZSl7cmV0dXJuIG5ldyhlZXx8KGVlPVByb21pc2UpKShmdW5jdGlvbihvZSxzZSl7ZnVuY3Rpb24gaGUoRyl7dHJ5e2NlKHRlLm5leHQoRykpfWNhdGNoKGIpe3NlKGIpfX1mdW5jdGlvbiB1ZShHKXt0cnl7Y2UodGUudGhy''@;'; put 'put ''b3coRykpfWNhdGNoKGIpe3NlKGIpfX1mdW5jdGlvbiBjZShHKXt2YXIgYjtHLmRvbmU/b2UoRy52YWx1ZSk6KGI9Ry52YWx1ZSxiIGluc3RhbmNlb2YgZWU/YjpuZXcgZWUoZnVuY3Rpb24oRCl7RChiKX0pKS50aGVuKGhlLHVlKX1jZSgodGU9dGUuYXBwbHkoVSxxfHxbXSkpLm5leHQoKSl9''@;'; put 'put ''KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihVLHEpe3ZhciBlZSx0ZSxvZSxzZSxoZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZvZVswXSl0aHJvdyBvZVsxXTtyZXR1cm4gb2VbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gc2U9e25leHQ6dWUoMCksdGhy''@;'; put 'put ''b3c6dWUoMSkscmV0dXJuOnVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoc2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksc2U7ZnVuY3Rpb24gdWUoY2Upe3JldHVybiBmdW5jdGlvbihHKXtyZXR1cm4gZnVuY3Rpb24oYil7aWYoZWUpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7aGU7KXRyeXtpZihlZT0xLHRlJiYob2U9MiZiWzBdP3RlLnJldHVybjpiWzBdP3RlLnRocm93fHwoKG9lPXRlLnJldHVybikmJm9lLmNhbGwodGUpLDApOnRlLm5leHQpJiYhKG9lPW9lLmNhbGwo''@;'; put 'put ''dGUsYlsxXSkpLmRvbmUpcmV0dXJuIG9lO3N3aXRjaCh0ZT0wLG9lJiYoYj1bMiZiWzBdLG9lLnZhbHVlXSksYlswXSl7Y2FzZSAwOmNhc2UgMTpvZT1iO2JyZWFrO2Nhc2UgNDpyZXR1cm4gaGUubGFiZWwrKyx7dmFsdWU6YlsxXSxkb25lOiExfTtjYXNlIDU6aGUubGFiZWwrKyx0ZT1iWzFd''@;'; put 'put ''LGI9WzBdO2NvbnRpbnVlO2Nhc2UgNzpiPWhlLm9wcy5wb3AoKSxoZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgob2U9KG9lPWhlLnRyeXMpLmxlbmd0aD4wJiZvZVtvZS5sZW5ndGgtMV0pfHw2IT09YlswXSYmMiE9PWJbMF0pKXtoZT0wO2NvbnRpbnVlfWlmKDM9PT1iWzBd''@;'; put 'put ''JiYoIW9lfHxiWzFdPm9lWzBdJiZiWzFdPG9lWzNdKSl7aGUubGFiZWw9YlsxXTticmVha31pZig2PT09YlswXSYmaGUubGFiZWw8b2VbMV0pe2hlLmxhYmVsPW9lWzFdLG9lPWI7YnJlYWt9aWYob2UmJmhlLmxhYmVsPG9lWzJdKXtoZS5sYWJlbD1vZVsyXSxoZS5vcHMucHVzaChiKTticmVh''@;'; put 'put ''a31vZVsyXSYmaGUub3BzLnBvcCgpLGhlLnRyeXMucG9wKCk7Y29udGludWV9Yj1xLmNhbGwoVSxoZSl9Y2F0Y2goRCl7Yj1bNixEXSx0ZT0wfWZpbmFsbHl7ZWU9b2U9MH1pZig1JmJbMF0pdGhyb3cgYlsxXTtyZXR1cm57dmFsdWU6YlswXT9iWzFdOnZvaWQgMCxkb25lOiEwfX0oW2NlLEdd''@;'; put 'put ''KX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVNqc0FwaUNsaWVudD12b2lkIDA7dmFyIGs9Uig2MjMwKSxFPVIoMzkwMCksaj1SKDk3NzgpLFY9Uig1NyksQj1SKDI0OSksWT1SKDcwNCksWD1mdW5jdGlvbigpe2Z1bmN0aW9uIFUocSl7''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50PXF9cmV0dXJuIFUucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdD1mdW5jdGlvbihxKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGVlKXtzd2l0Y2goZWUubGFiZWwpe2Nhc2Ug''@;'; put 'put ''MDpyZXR1cm4gcT9bNCwoMCxZLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LHEsRS5TZXJ2ZXJUeXBlLlNhc2pzKV06WzMsMl07Y2FzZSAxOnJldHVyblsyLGVlLnNlbnQoKS5hY2Nlc3NfdG9rZW5dO2Nhc2UgMjpyZXR1cm5bMl19fSl9KX0sVS5wcm90b3R5cGUuZGVwbG95PWZ1bmN0''@;'; put 'put ''aW9uKHEsZWUsdGUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBvZSxzZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdCh0ZSldO2Nhc2UgMTpy''@;'; put 'put ''ZXR1cm4gb2U9aGUuc2VudCgpLHEuYXBwTG9jPXEuYXBwTG9jfHxlZSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95IixxLG9lLHZvaWQgMCx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KV07Y2FzZSAyOnJldHVybiBz''@;'; put 'put ''ZT1oZS5zZW50KCkucmVzdWx0LFsyLFByb21pc2UucmVzb2x2ZShzZSldfX0pfSl9LFUucHJvdG90eXBlLmRlcGxveVppcEZpbGU9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG9lLHNlLGhlLHVlLGNlO3JldHVybiBJKHRoaXMs''@;'; put 'put ''ZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGU9UigyOTc1KS5jcmVhdGVSZWFkU3RyZWFtLFs0LHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KGVlKV07Y2FzZSAxOnJldHVybiBvZT1HLnNlbnQoKSxbNCx0ZShxKV07Y2FzZSAyOnJldHVybiBzZT1HLnNl''@;'; put 'put ''bnQoKSwoaGU9bmV3IGspLmFwcGVuZCgiZmlsZSIsc2UpLHVlPSJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLmNvbmNhdChoZS5nZXRCb3VuZGFyeSgpKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95L3VwbG9hZCIsaGUsb2UsdWUse30s''@;'; put 'put ''e21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJvZHlMZW5ndGg6MS8wfSldO2Nhc2UgMzpyZXR1cm4gY2U9Ry5zZW50KCkucmVzdWx0LFsyLFByb21pc2UucmVzb2x2ZShjZSldfX0pfSl9LFUucHJvdG90eXBlLmV4ZWN1dGVKb2I9ZnVuY3Rpb24ocSxlZSx0ZSl7cmV0dXJuIEsodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLHNlLGhlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24odWUpe3N3aXRjaCh1ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBvZT10ZT90ZS5hY2Nlc3NfdG9rZW46dm9pZCAwLHNlPXEuX3Byb2dyYW0uc3RhcnRzV2l0aCgiLyIpP3EuX3Byb2dyYW06IiIu''@;'; put 'put ''Y29uY2F0KGVlLCIvIikuY29uY2F0KHEuX3Byb2dyYW0pLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9zdHAvZXhlY3V0ZSIseih6KHtfZGVidWc6MTMxfSxxKSx7X3Byb2dyYW06c2V9KSxvZSldO2Nhc2UgMTpyZXR1cm5bMix7cmVzdWx0OihoZT11ZS5zZW50KCkpLnJl''@;'; put 'put ''c3VsdCxsb2c6aGUubG9nfV19fSl9KX0sVS5wcm90b3R5cGUuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbihxLGVlLHRlKXtyZXR1cm4gdm9pZCAwPT09ZWUmJihlZT0ic2FzIiksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2Usc2U7cmV0dXJuIEkodGhpcyxmdW5jdGlvbiho''@;'; put 'put ''ZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QodGUpXTtjYXNlIDE6cmV0dXJuIG9lPWhlLnNlbnQoKSxzZT17bG9nOiIifSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvY29kZS9leGVjdXRlIix7Y29k''@;'; put 'put ''ZTpxLHJ1blRpbWU6ZWV9LG9lKS50aGVuKGZ1bmN0aW9uKHVlKXt2YXIgRz11ZS5wcmludE91dHB1dCxiPXVlLnJlc3VsdDtzZS5sb2c9dWUubG9nLEcmJihzZS5wcmludE91dHB1dD1HKSxiJiYoc2Uud2Vib3V0PWIpfSkuY2F0Y2goZnVuY3Rpb24odWUpe3Rocm93KDAsai5wcmVmaXhNZXNz''@;'; put 'put ''YWdlKSh1ZSwiRXJyb3Igd2hpbGUgc2VuZGluZyBQT1NUIHJlcXVlc3QgdG8gZXhlY3V0ZSBjb2RlLiAiKX0pXTtjYXNlIDI6cmV0dXJuIGhlLnNlbnQoKSxbMixzZV19fSl9KX0sVS5wcm90b3R5cGUuZ2V0QWNjZXNzVG9rZW49ZnVuY3Rpb24ocSxlZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbih0ZSl7cmV0dXJuWzIsKDAsVi5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQscSxlZSldfSl9KX0sVS5wcm90b3R5cGUucmVmcmVzaFRva2Vucz1mdW5jdGlvbihxKXtyZXR1cm4gSyh0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGVlKXtyZXR1cm5bMiwoMCxCLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LHEpXX0pfSl9LFV9KCk7Ty5TQVNqc0FwaUNsaWVudD1YfSw2OTAzOmZ1bmN0aW9uKE0sTyxSKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWCxVLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLG9lKXtmdW5jdGlvbiBzZShjZSl7dHJ5e3VlKGVlLm5leHQoY2UpKX1jYXRjaChH''@;'; put 'put ''KXtvZShHKX19ZnVuY3Rpb24gaGUoY2Upe3RyeXt1ZShlZS50aHJvdyhjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiB1ZShjZSl7dmFyIEc7Y2UuZG9uZT90ZShjZS52YWx1ZSk6KEc9Y2UudmFsdWUsRyBpbnN0YW5jZW9mIHE/RzpuZXcgcShmdW5jdGlvbihiKXtiKEcpfSkpLnRoZW4o''@;'; put 'put ''c2UsaGUpfXVlKChlZT1lZS5hcHBseShYLFV8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFgsVSl7dmFyIHEsZWUsdGUsb2Usc2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJuIHRlWzFdfSx0''@;'; put 'put ''cnlzOltdLG9wczpbXX07cmV0dXJuIG9lPXtuZXh0OmhlKDApLHRocm93OmhlKDEpLHJldHVybjpoZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKG9lW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG9lO2Z1bmN0aW9uIGhlKHVlKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oY2Upe3JldHVybiBmdW5jdGlvbihHKXtpZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3NlOyl0cnl7aWYocT0xLGVlJiYodGU9MiZHWzBdP2VlLnJldHVybjpHWzBdP2VlLnRocm93fHwoKHRlPWVlLnJldHVybikm''@;'; put 'put ''JnRlLmNhbGwoZWUpLDApOmVlLm5leHQpJiYhKHRlPXRlLmNhbGwoZWUsR1sxXSkpLmRvbmUpcmV0dXJuIHRlO3N3aXRjaChlZT0wLHRlJiYoRz1bMiZHWzBdLHRlLnZhbHVlXSksR1swXSl7Y2FzZSAwOmNhc2UgMTp0ZT1HO2JyZWFrO2Nhc2UgNDpyZXR1cm4gc2UubGFiZWwrKyx7dmFsdWU6''@;'; put 'put ''R1sxXSxkb25lOiExfTtjYXNlIDU6c2UubGFiZWwrKyxlZT1HWzFdLEc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpHPXNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgodGU9KHRlPXNlLnRyeXMpLmxlbmd0aD4wJiZ0ZVt0ZS5sZW5ndGgtMV0pfHw2IT09R1sw''@;'; put 'put ''XSYmMiE9PUdbMF0pKXtzZT0wO2NvbnRpbnVlfWlmKDM9PT1HWzBdJiYoIXRlfHxHWzFdPnRlWzBdJiZHWzFdPHRlWzNdKSl7c2UubGFiZWw9R1sxXTticmVha31pZig2PT09R1swXSYmc2UubGFiZWw8dGVbMV0pe3NlLmxhYmVsPXRlWzFdLHRlPUc7YnJlYWt9aWYodGUmJnNlLmxhYmVsPHRl''@;'; put 'put ''WzJdKXtzZS5sYWJlbD10ZVsyXSxzZS5vcHMucHVzaChHKTticmVha310ZVsyXSYmc2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWV9Rz1VLmNhbGwoWCxzZSl9Y2F0Y2goYil7Rz1bNixiXSxlZT0wfWZpbmFsbHl7cT10ZT0wfWlmKDUmR1swXSl0aHJvdyBHWzFdO3JldHVybnt2''@;'; put 'put ''YWx1ZTpHWzBdP0dbMV06dm9pZCAwLGRvbmU6ITB9fShbdWUsY2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TZXNzaW9uTWFuYWdlcj12b2lkIDA7dmFyIEU9UigxMjMwKSxqPVIoMTM5NSksVj1SKDU5MjgpLEI9Uig5Nzc4KSxZPWZ1''@;'; put 'put ''bmN0aW9uKCl7ZnVuY3Rpb24gWChVLHEsZWUpe3RoaXMuc2VydmVyVXJsPVUsdGhpcy5jb250ZXh0TmFtZT1xLHRoaXMucmVxdWVzdENsaWVudD1lZSx0aGlzLmxvZ2dlZEVycm9ycz1bXSx0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcj0iRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0''@;'; put 'put ''YXRlIGxpbmsuICIsdGhpcy5zZXNzaW9ucz1bXSx0aGlzLmN1cnJlbnRDb250ZXh0PW51bGwsdGhpcy5zZXR0aW5nQ29udGV4dD0hMSx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGU9e3ByaW50ZWQ6ITEsc3RhdGU6RS5TZXNzaW9uU3RhdGUuTm9TdGF0ZX0sVSYmKDAs''@;'; put 'put ''Vi5pc1VybCkoVSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwiZGVidWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWd9LHNldDpmdW5jdGlvbihVKXt0aGlzLl9kZWJ1Zz1VfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFgucHJv''@;'; put 'put ''dG90eXBlLmlzU2Vzc2lvblZhbGlkPWZ1bmN0aW9uKFUpe2lmKCFVKXJldHVybiExO3ZhciBxPSgobmV3IERhdGUpLmdldFRpbWUoKS1uZXcgRGF0ZShVLmNyZWF0aW9uVGltZVN0YW1wKS5nZXRUaW1lKCkpLzFlMztyZXR1cm4hKCFVLmF0dHJpYnV0ZXN8fHE+PVUuYXR0cmlidXRlcy5zZXNz''@;'; put 'put ''aW9uSW5hY3RpdmVUaW1lb3V0KX0sWC5wcm90b3R5cGUucmVtb3ZlU2Vzc2lvbkZyb21Qb29sPWZ1bmN0aW9uKFUpe3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuaWQhPT1VLmlkfSl9LFgucHJvdG90eXBlLnJlbW92ZUV4cGlyZWRTZXNz''@;'; put 'put ''aW9ucz1mdW5jdGlvbigpe3ZhciBVPXRoaXM7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4gVS5pc1Nlc3Npb25WYWxpZChxKX0pfSxYLnByb3RvdHlwZS50aHJvd0Vycm9ycz1mdW5jdGlvbihVLHEpe3Rocm93IHE/KDAsQi5wcmVmaXhNZXNz''@;'; put 'put ''YWdlKShuZXcgRXJyb3IoVS5qb2luKCIuICIpKSxxKTpuZXcgRXJyb3IoVS5tYXAoZnVuY3Rpb24oZWUpe3JldHVybiBlZS5tZXNzYWdlP2VlLm1lc3NhZ2U6ZWV9KS5qb2luKCIuICIpKX0sWC5wcm90b3R5cGUuZ2V0U2Vzc2lvbj1mdW5jdGlvbihVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZSx0ZSxvZSxzZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBxPVtdLGVlPSExLHRlPWZ1bmN0aW9uKCl7cS5sZW5ndGgmJiFlZSYmKGVlPSEwLHNlLnRocm93RXJyb3JzKHEpKX0s''@;'; put 'put ''dGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKSx0aGlzLnNlc3Npb25zLmxlbmd0aD8odGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2wob2U9dGhpcy5zZXNzaW9uc1swXSksdGhpcy5jcmVhdGVTZXNzaW9ucyhVKS5jYXRjaChmdW5jdGlvbih1ZSl7cS5wdXNoKHVlKX0pLHRoaXMuY3JlYXRl''@;'; put 'put ''QW5kV2FpdEZvclNlc3Npb24oVSkuY2F0Y2goZnVuY3Rpb24odWUpe3EucHVzaCh1ZSl9KSx0ZSgpLFsyLG9lXSk6WzMsMV07Y2FzZSAxOnJldHVybiB0aGlzLmNyZWF0ZVNlc3Npb25zKFUpLmNhdGNoKGZ1bmN0aW9uKHVlKXtxLnB1c2godWUpfSksWzQsdGhpcy5jcmVhdGVBbmRXYWl0Rm9y''@;'; put 'put ''U2Vzc2lvbihVKS5jYXRjaChmdW5jdGlvbih1ZSl7cS5wdXNoKHVlKX0pXTtjYXNlIDI6cmV0dXJuIGhlLnNlbnQoKSx0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpLG9lPXRoaXMuc2Vzc2lvbnMucG9wKCksdGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2wob2UpLHRlKCksWzIsb2VdfX0p''@;'; put 'put ''fSl9LFgucHJvdG90eXBlLmdldEVycm9yTWVzc2FnZT1mdW5jdGlvbihVLHEsZWUpe3JldHVybiIiLmNvbmNhdChlZSwiIHJlcXVlc3QgdG8gIikuY29uY2F0KHEsIiBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiKS5jb25jYXQoVS5yZXNwb25zZS5zdGF0dXN8fCJ1bmtub3duIiwiLiAiKStV''@;'; put 'put ''LnJlc3BvbnNlLmRhdGEubWVzc2FnZXx8IiJ9LFgucHJvdG90eXBlLmNsZWFyU2Vzc2lvbj1mdW5jdGlvbihVLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlZSx0ZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24ob2Upe3N3aXRjaChvZS5sYWJlbCl7''@;'; put 'put ''Y2FzZSAwOnJldHVybiBlZT0iL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQoVSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShlZSxxKS50aGVuKGZ1bmN0aW9uKCl7dGUuc2Vzc2lvbnM9dGUuc2Vzc2lvbnMuZmlsdGVyKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuaWQhPT1VfSl9KS5j''@;'; put 'put ''YXRjaChmdW5jdGlvbihzZSl7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKHRlLmdldEVycm9yTWVzc2FnZShzZSxlZSwiREVMRVRFIiksIkVycm9yIHdoaWxlIGRlbGV0aW5nIHNlc3Npb24uICIpfSldO2Nhc2UgMTpyZXR1cm5bMixvZS5zZW50KCldfX0pfSl9LFgucHJvdG90eXBlLmNyZWF0''@;'; put 'put ''ZVNlc3Npb25zPWZ1bmN0aW9uKFUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih0ZSl7c3dpdGNoKHRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE9W10sdGhpcy5zZXNzaW9ucy5sZW5ndGg/WzMsMl06''@;'; put 'put ''WzQsKDAsVi5hc3luY0ZvckVhY2gpKG5ldyBBcnJheSgxKSxmdW5jdGlvbigpe3JldHVybiBJKGVlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JT''@;'; put 'put ''ZXNzaW9uKFUpLmNhdGNoKGZ1bmN0aW9uKHNlKXtxLnB1c2goc2UpfSldO2Nhc2UgMTpyZXR1cm4gb2Uuc2VudCgpLFsyXX19KX0pfSldO2Nhc2UgMTp0ZS5zZW50KCksdGUubGFiZWw9MjtjYXNlIDI6cmV0dXJuIHEubGVuZ3RoJiZ0aGlzLnRocm93RXJyb3JzKHEsIkVycm9yIHdoaWxlIGNy''@;'; put 'put ''ZWF0aW5nIHNlc3Npb24uICIpLFsyXX19KX0pfSxYLnByb3RvdHlwZS53YWl0Rm9yQ3VycmVudENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24ocSl7cmV0dXJuWzIsbmV3IFBy''@;'; put 'put ''b21pc2UoZnVuY3Rpb24oZWUpe3ZhciB0ZT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe1UuY3VycmVudENvbnRleHQmJihVLnNldHRpbmdDb250ZXh0PSExLGNsZWFySW50ZXJ2YWwodGUpLGVlKCkpfSwxMDApfSldfSl9KX0sWC5wcm90b3R5cGUuY3JlYXRlQW5kV2FpdEZvclNlc3Npb249ZnVu''@;'; put 'put ''Y3Rpb24oVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsdGUsb2Usc2UsaGU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHVlKXtzd2l0Y2godWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5jdXJyZW50Q29udGV4dD9bMyw0XTp0aGlzLnNl''@;'; put 'put ''dHRpbmdDb250ZXh0P1szLDJdOls0LHRoaXMuc2V0Q3VycmVudENvbnRleHQoVSldO2Nhc2UgMTpyZXR1cm4gdWUuc2VudCgpLFszLDRdO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLndhaXRGb3JDdXJyZW50Q29udGV4dCgpXTtjYXNlIDM6dWUuc2VudCgpLHVlLmxhYmVsPTQ7Y2FzZSA0OnJldHVy''@;'; put 'put ''biBxPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KHRoaXMuY3VycmVudENvbnRleHQuaWQsIi9zZXNzaW9ucyIpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHEse30sVSkuY2F0Y2goZnVuY3Rpb24oY2Upe3Rocm93KDAsQi5wcmVmaXhN''@;'; put 'put ''ZXNzYWdlKShoZS5nZXRFcnJvck1lc3NhZ2UoY2UscSwiUE9TVCIpLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pXTtjYXNlIDU6aWYoZWU9dWUuc2VudCgpLCh0ZT1lZS5yZXN1bHQpLmV0YWc9b2U9ZWUuZXRhZywhKHNlPXRlLmxpbmtzLmZpbmQoZnVuY3Rpb24oY2Upe3Jl''@;'; put 'put ''dHVybiJzdGF0ZSI9PT1jZS5yZWx9KSkpdGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I7cmV0dXJuIHRlLnN0YXRlVXJsPXNlLmhyZWYsWzQsdGhpcy53YWl0Rm9yU2Vzc2lvbih0ZSxvZSxVKV07Y2FzZSA2OnJldHVybiB1ZS5zZW50KCksdGhpcy5zZXNzaW9ucy5wdXNoKHRlKSxb''@;'; put 'put ''Mix0ZV19fSl9KX0sWC5wcm90b3R5cGUuc2V0Q3VycmVudENvbnRleHQ9ZnVuY3Rpb24oVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsb2Usc2U9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpy''@;'; put 'put ''ZXR1cm4gdGhpcy5jdXJyZW50Q29udGV4dD9bMywyXToocT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksdGhpcy5zZXR0aW5nQ29udGV4dD0hMCxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHEsVSkuY2F0Y2goZnVuY3Rpb24odWUp''@;'; put 'put ''e3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShzZS5nZXRFcnJvck1lc3NhZ2UodWUscSwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgbGlzdCBvZiBjb250ZXh0cy4gIil9KV0pO2Nhc2UgMTppZihlZT1oZS5zZW50KCkucmVzdWx0LCEob2U9KGVlJiZlZS5pdGVtcyYmZWUuaXRlbXMubGVu''@;'; put 'put ''Z3RoP2VlLml0ZW1zOltdKS5maW5kKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUubmFtZT09PXNlLmNvbnRleHROYW1lfSkpKXRocm93IG5ldyBFcnJvcigiVGhlIGNvbnRleHQgJyIuY29uY2F0KHRoaXMuY29udGV4dE5hbWUsIicgd2FzIG5vdCBmb3VuZCBvbiB0aGUgc2VydmVyICIpLmNvbmNh''@;'; put 'put ''dCh0aGlzLnNlcnZlclVybCwiLiIpKTt0aGlzLmN1cnJlbnRDb250ZXh0PW9lLFByb21pc2UucmVzb2x2ZSgpLGhlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyXX19KX0pfSxYLnByb3RvdHlwZS53YWl0Rm9yU2Vzc2lvbj1mdW5jdGlvbihVLHEsZWUpe3ZhciB0ZTtyZXR1cm4gSSh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2Usc2UsaGUsdWUsY2UsYixEO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gc2U9VS5zdGF0ZVVybCxoZT16LmxvZ2dlcnx8Sywob2U9VS5zdGF0ZSkhPT1FLlNlc3Npb25TdGF0ZS5QZW5k''@;'; put 'put ''aW5nJiZvZSE9PUUuU2Vzc2lvblN0YXRlLlJ1bm5pbmcmJm9lIT09RS5TZXNzaW9uU3RhdGUuTm9TdGF0ZT9bMyw2XTpzZT8odGhpcy5kZWJ1ZyYmIXRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkJiYoaGUuaW5mbygiUG9sbGluZzogIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwrc2Up''@;'; put 'put ''KSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMCksdWU9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoc2UsIj93YWl0PTMwIiksWzQsdGhpcy5nZXRTZXNzaW9uU3RhdGUodWUscSxlZSkuY2F0Y2goZnVuY3Rpb24oTil7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2Up''@;'; put 'put ''KE4sIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHNlc3Npb24uICIpfSldKTpbMyw0XTtjYXNlIDE6cmV0dXJuIGNlPUguc2VudCgpLGI9Y2UucmVzcG9uc2VTdGF0dXMsb2U9Y2UucmVzdWx0LnRyaW0oKSx0aGlzLmRlYnVnJiZ0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGUhPT1vZSYm''@;'; put 'put ''KGhlLmluZm8oIkN1cnJlbnQgc2Vzc2lvbiBzdGF0ZSBpcyAnIi5jb25jYXQob2UsIiciKSksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlPW9lLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSExKSxvZT9bMywzXTooRD1uZXcgai5Ob1Nlc3Npb25TdGF0ZUVycm9yKGIs''@;'; put 'put ''dGhpcy5zZXJ2ZXJVcmwrc2UsbnVsbD09PSh0ZT1VLmxpbmtzLmZpbmQoZnVuY3Rpb24oTil7cmV0dXJuImxvZyI9PT1OLnJlbH0pKXx8dm9pZCAwPT09dGU/dm9pZCAwOnRlLmhyZWYpLHRoaXMubG9nZ2VkRXJyb3JzLmZpbmQoZnVuY3Rpb24oTil7cmV0dXJuIE4uc2VydmVyUmVzcG9uc2VT''@;'; put 'put ''dGF0dXM9PT1ELnNlcnZlclJlc3BvbnNlU3RhdHVzfSl8fCh0aGlzLmxvZ2dlZEVycm9ycy5wdXNoKEQpLGhlLmluZm8oRC5tZXNzYWdlKSksWzQsdGhpcy53YWl0Rm9yU2Vzc2lvbihVLHEsZWUpXSk7Y2FzZSAyOnJldHVyblsyLEguc2VudCgpXTtjYXNlIDM6Y2FzZSA2OnJldHVybiB0aGlz''@;'; put 'put ''LmxvZ2dlZEVycm9ycz1bXSxbMixvZV07Y2FzZSA0OnRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yO2Nhc2UgNTpyZXR1cm5bMyw3XTtjYXNlIDc6cmV0dXJuWzJdfX0pfSl9LFgucHJvdG90eXBlLmdldFNlc3Npb25TdGF0ZT1mdW5jdGlvbihVLHEsZWUpe3JldHVybiBJKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0ZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24ob2Upe3N3aXRjaChvZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoVSxlZSwidGV4dC9wbGFpbiIseyJJZi1Ob25lLU1hdGNoIjpxfSkudGhlbihm''@;'; put 'put ''dW5jdGlvbihzZSl7cmV0dXJue3Jlc3VsdDpzZS5yZXN1bHQscmVzcG9uc2VTdGF0dXM6c2Uuc3RhdHVzfX0pLmNhdGNoKGZ1bmN0aW9uKHNlKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkodGUuZ2V0RXJyb3JNZXNzYWdlKHNlLFUsIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Np''@;'; put 'put ''b24gc3RhdGUuICIpfSldO2Nhc2UgMTpyZXR1cm5bMixvZS5zZW50KCldfX0pfSl9LFgucHJvdG90eXBlLmdldFZhcmlhYmxlPWZ1bmN0aW9uKFUscSxlZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLG9lPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlv''@;'; put 'put ''bihzZSl7c3dpdGNoKHNlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvc2Vzc2lvbnMvIikuY29uY2F0KFUsIi92YXJpYWJsZXMvIikuY29uY2F0KHEpLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQodGUsZWUpLmNhdGNoKGZ1bmN0''@;'; put 'put ''aW9uKGhlKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkob2UuZ2V0RXJyb3JNZXNzYWdlKGhlLHRlLCJHRVQiKSwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc2Vzc2lvbiB2YXJpYWJsZSAnIi5jb25jYXQocSwiJy4gIikpfSldO2Nhc2UgMTpyZXR1cm5bMixzZS5zZW50KCldfX0pfSl9LFh9KCk7''@;'; put 'put ''Ty5TZXNzaW9uTWFuYWdlcj1ZfSwxNjIyOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHRlKXtmb3IodmFyIG9lLHNlPTEs''@;'; put 'put ''aGU9YXJndW1lbnRzLmxlbmd0aDtzZTxoZTtzZSsrKWZvcih2YXIgdWUgaW4gb2U9YXJndW1lbnRzW3NlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2UsdWUpJiYodGVbdWVdPW9lW3VlXSk7cmV0dXJuIHRlfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlz''@;'; put 'put ''JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odGUsb2Usc2UsaGUpe3JldHVybiBuZXcoc2V8fChzZT1Qcm9taXNlKSkoZnVuY3Rpb24odWUsY2Upe2Z1bmN0aW9uIEcoSCl7dHJ5e0QoaGUubmV4dChIKSl9Y2F0Y2goTil7Y2UoTil9fWZ1bmN0aW9uIGIoSCl7dHJ5e0QoaGUudGhyb3coSCkp''@;'; put 'put ''fWNhdGNoKE4pe2NlKE4pfX1mdW5jdGlvbiBEKEgpe3ZhciBOO0guZG9uZT91ZShILnZhbHVlKTooTj1ILnZhbHVlLE4gaW5zdGFuY2VvZiBzZT9OOm5ldyBzZShmdW5jdGlvbihnKXtnKE4pfSkpLnRoZW4oRyxiKX1EKChoZT1oZS5hcHBseSh0ZSxvZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhp''@;'; put 'put ''cyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24odGUsb2Upe3ZhciBzZSxoZSx1ZSxjZSxHPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnVlWzBdKXRocm93IHVlWzFdO3JldHVybiB1ZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBjZT17bmV4dDpiKDApLHRocm93OmIoMSks''@;'; put 'put ''cmV0dXJuOmIoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihjZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjZTtmdW5jdGlvbiBiKEQpe3JldHVybiBmdW5jdGlvbihIKXtyZXR1cm4gZnVuY3Rpb24oTil7aWYoc2UpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7RzspdHJ5e2lmKHNlPTEsaGUmJih1ZT0yJk5bMF0/aGUucmV0dXJuOk5bMF0/aGUudGhyb3d8fCgodWU9aGUucmV0dXJuKSYmdWUuY2FsbChoZSksMCk6aGUubmV4dCkmJiEodWU9dWUuY2FsbChoZSxOWzFdKSkuZG9u''@;'; put 'put ''ZSlyZXR1cm4gdWU7c3dpdGNoKGhlPTAsdWUmJihOPVsyJk5bMF0sdWUudmFsdWVdKSxOWzBdKXtjYXNlIDA6Y2FzZSAxOnVlPU47YnJlYWs7Y2FzZSA0OnJldHVybiBHLmxhYmVsKysse3ZhbHVlOk5bMV0sZG9uZTohMX07Y2FzZSA1OkcubGFiZWwrKyxoZT1OWzFdLE49WzBdO2NvbnRpbnVl''@;'; put 'put ''O2Nhc2UgNzpOPUcub3BzLnBvcCgpLEcudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHVlPSh1ZT1HLnRyeXMpLmxlbmd0aD4wJiZ1ZVt1ZS5sZW5ndGgtMV0pfHw2IT09TlswXSYmMiE9PU5bMF0pKXtHPTA7Y29udGludWV9aWYoMz09PU5bMF0mJighdWV8fE5bMV0+dWVbMF0m''@;'; put 'put ''Jk5bMV08dWVbM10pKXtHLmxhYmVsPU5bMV07YnJlYWt9aWYoNj09PU5bMF0mJkcubGFiZWw8dWVbMV0pe0cubGFiZWw9dWVbMV0sdWU9TjticmVha31pZih1ZSYmRy5sYWJlbDx1ZVsyXSl7Ry5sYWJlbD11ZVsyXSxHLm9wcy5wdXNoKE4pO2JyZWFrfXVlWzJdJiZHLm9wcy5wb3AoKSxHLnRy''@;'; put 'put ''eXMucG9wKCk7Y29udGludWV9Tj1vZS5jYWxsKHRlLEcpfWNhdGNoKGcpe049WzYsZ10saGU9MH1maW5hbGx5e3NlPXVlPTB9aWYoNSZOWzBdKXRocm93IE5bMV07cmV0dXJue3ZhbHVlOk5bMF0/TlsxXTp2b2lkIDAsZG9uZTohMH19KFtELEhdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''TywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5leGVjdXRlT25Db21wdXRlQXBpPXZvaWQgMDt2YXIgaj1SKDc3NTcpLFY9Uig5Nzc4KSxCPVIoMzYwNyksWT1SKDcwNCksWD1SKDU5MjgpLFU9Uig3MTQpLHE9UigxMzQzKSxlZT1SKDY0OTYpO08uZXhlY3V0ZU9uQ29tcHV0ZUFwaT1mdW5j''@;'; put 'put ''dGlvbiB0ZShvZSxzZSxoZSx1ZSxjZSxHLGIsRCxILE4sZyxDLFMsdil7dmFyIHAsdztyZXR1cm4gdm9pZCAwPT09RCYmKEQ9bnVsbCksdm9pZCAwPT09SCYmKEg9ITEpLHZvaWQgMD09PU4mJihOPSExKSx2b2lkIDA9PT1nJiYoZz0hMCksdm9pZCAwPT09UyYmKFM9ITEpLGsodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEosbmUsZGUsZmUseGUsTGUsRmUsT2UsQmUsV2UsS2UsWWUsSmUsbHQsUGUsYmUsQWUsVGUscWUsWGUsVWUsaHQsTWU9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKERlKXtzd2l0Y2goRGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gSj0oYnx8e30p''@;'; put 'put ''LmFjY2Vzc190b2tlbixiP1s0LCgwLFkuZ2V0VG9rZW5zKShvZSxiKV06WzMsMl07Y2FzZSAxOko9RGUuc2VudCgpLmFjY2Vzc190b2tlbixEZS5sYWJlbD0yO2Nhc2UgMjpuZT16LmxvZ2dlcnx8SyxEZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gRGUudHJ5cy5wdXNoKFszLDE5LCwyMF0pLGRl''@;'; put 'put ''PXZvaWQgMCxbNCxzZS5nZXRTZXNzaW9uKEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbi4gIil9KV07Y2FzZSA0OnJldHVybiBmZT1EZS5zZW50KCksZGU9ZmUuaWQsUz9bNCxzZS5nZXRWYXJpYWJs''@;'; put 'put ''ZShkZSwiU1lTSk9CSUQiLEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiB2YXJpYWJsZS4gIil9KV06WzMsNl07Y2FzZSA1Oih4ZT1EZS5zZW50KCkucmVzdWx0KSYmeGUudmFsdWUmJihMZT1oZT91''@;'; put 'put ''ZS5zcGxpdChoZSkuam9pbigiIikucmVwbGFjZSgvXlwvLywiIik6dWUsKHoubG9nZ2VyfHxLKS5pbmZvKCJUcmlnZ2VyaW5nICciLmNvbmNhdChMZSwiJyB3aXRoIFBJRCAiKS5jb25jYXQoeGUudmFsdWUsIiBhdCAiKS5jb25jYXQoKDAsai50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTKSgp''@;'; put 'put ''KSkpLERlLmxhYmVsPTY7Y2FzZSA2OnJldHVybiBGZT12b2lkIDAsKDAsWC5pc1JlbGF0aXZlUGF0aCkodWUpP0ZlPSJleGVjLSIuY29uY2F0KHVlLmluY2x1ZGVzKCIvIik/dWUuc3BsaXQoIi8iKVsxXTp1ZSk6KE9lPXVlLnNwbGl0KCIvIiksRmU9T2UucG9wKCkpLEJlPXtTWVNfSkVTX0pP''@;'; put 'put ''Ql9VUkk6IiIsX3Byb2dyYW06KDAsWC5pc1JlbGF0aXZlUGF0aCkodWUpP2hlKyIvIit1ZTp1ZX0sdiYmKEJlPUkoSSh7fSxCZSksdikpLEgmJihCZT1JKEkoe30sQmUpLHtfREVCVUc6MTMxfSkpLFdlPVtdLEQ/SlNPTi5zdHJpbmdpZnkoRCkuaW5jbHVkZXMoIjsiKT9bNCwoMCxlZS51cGxv''@;'; put 'put ''YWRUYWJsZXMpKG9lLEQsSikuY2F0Y2goZnVuY3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIHRhYmxlcy4gIil9KV06WzMsOF06WzMsOV07Y2FzZSA3OnJldHVybiBXZT1EZS5zZW50KCksQmUuX3dlYmluX2ZpbGVfY291bnQ9V2Uu''@;'; put 'put ''bGVuZ3RoLFdlLmZvckVhY2goZnVuY3Rpb24oemUsaXQpe0JlWyJfd2ViaW5fZmlsZXVyaSIuY29uY2F0KGl0KzEpXT0iL2ZpbGVzL2ZpbGVzLyIuY29uY2F0KHplLmZpbGUuaWQpLEJlWyJfd2ViaW5fbmFtZSIuY29uY2F0KGl0KzEpXT16ZS50YWJsZU5hbWV9KSxbMyw5XTtjYXNlIDg6QmU9''@;'; put 'put ''SShJKHt9LEJlKSwoMCxVLmZvcm1hdERhdGFGb3JSZXF1ZXN0KShEKSksRGUubGFiZWw9OTtjYXNlIDk6cmV0dXJuIEtlPXtuYW1lOkZlfHwiRGVmYXVsdCBKb2IgTmFtZSIsZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGNvZGU6Y2UsdmFyaWFibGVzOkJlLHZlcnNpb246Mn0sWzQs''@;'; put 'put ''b2UucG9zdCgiL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQoZGUsIi9qb2JzIiksS2UsSikuY2F0Y2goZnVuY3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgcG9zdGluZyBqb2IuICIpfSldO2Nhc2UgMTA6cmV0dXJuIFllPURlLnNlbnQoKSxKZT1Z''@;'; put 'put ''ZS5yZXN1bHQsZz8oSCYmKG5lLmluZm8oIkpvYiBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yICciLmNvbmNhdChGZSwiJy4iKSksbmUuaW5mbygiWW91IGNhbiBtb25pdG9yIHRoZSBqb2IgcHJvZ3Jlc3MgYXQgJyIuY29uY2F0KG9lLmdldEJhc2VVcmwoKSkuY29uY2F0KEplLmxpbmtzLmZpbmQo''@;'; put 'put ''ZnVuY3Rpb24oemUpe3JldHVybiJzdGF0ZSI9PT16ZS5yZWx9KS5ocmVmLCInLiIpKSksWzQsKDAscS5wb2xsSm9iU3RhdGUpKG9lLEplLEgsYixDLHtzZXNzaW9uOmZlLHNlc3Npb25NYW5hZ2VyOnNlfSkuY2F0Y2goZnVuY3Rpb24oemUpe3JldHVybiBrKE1lLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgaXQsdXQsTXQsSHQsUHQsb247cmV0dXJuIEUodGhpcyxmdW5jdGlvbihDbil7c3dpdGNoKENuLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGl0PW51bGw9PT0oUHQ9emU/LnJlc3BvbnNlKXx8dm9pZCAwPT09UHQ/dm9pZCAwOlB0LmRhdGEsdXQ9L2Vycj1bMC05XSosLy5leGVj''@;'; put 'put ''KGl0KSwiNTExMyIhPT0obnVsbD09PShvbj11dD8uWzBdKXx8dm9pZCAwPT09b24/dm9pZCAwOm9uLnNsaWNlKDQsLTEpKT9bMywyXTooTXQ9SmUubGlua3MuZmluZChmdW5jdGlvbihVdCl7cmV0dXJuInVwIj09PVV0LnJlbH0pLmhyZWYrIi9sb2ciLEh0PXplLFs0LCgwLFguZmV0Y2hMb2dC''@;'; put 'put ''eUNodW5rcykob2UsSixNdCwxZTYpXSk7Y2FzZSAxOkh0LmxvZz1Dbi5zZW50KCksQ24ubGFiZWw9MjtjYXNlIDI6dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfX0pfSl9KV0pOlsyLGZlXTtjYXNlIDExOnJldHVybiBsdD1E''@;'; put 'put ''ZS5zZW50KCksYj9bNCwoMCxZLmdldFRva2Vucykob2UsYildOlszLDEzXTtjYXNlIDEyOko9RGUuc2VudCgpLmFjY2Vzc190b2tlbixEZS5sYWJlbD0xMztjYXNlIDEzOnJldHVybls0LG9lLmdldCgiL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQoZGUsIi9qb2JzLyIpLmNvbmNhdChKZS5p''@;'; put 'put ''ZCksSikuY2F0Y2goZnVuY3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IuICIpfSldO2Nhc2UgMTQ6cmV0dXJuIFBlPURlLnNlbnQoKS5yZXN1bHQsYmU9dm9pZCAwLEFlPSIiLFRlPVBlLmxpbmtzLmZpbmQoZnVuY3Rpb24oemUp''@;'; put 'put ''e3JldHVybiJsb2ciPT09emUucmVsfSksSCYmVGU/KHFlPSIiLmNvbmNhdChUZS5ocmVmLCIvY29udGVudCIpLFhlPW51bGwhPT0odz1udWxsPT09KHA9UGUubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PXA/dm9pZCAwOnAubGluZUNvdW50KSYmdm9pZCAwIT09dz93OjFlNixbNCwoMCxYLmZl''@;'; put 'put ''dGNoTG9nQnlDaHVua3MpKG9lLEoscWUsWGUpXSk6WzMsMTZdO2Nhc2UgMTU6QWU9RGUuc2VudCgpLERlLmxhYmVsPTE2O2Nhc2UgMTY6aWYobHQ9PT1xLkpvYlN0YXRlLkZhaWxlZHx8bHQ9PT1xLkpvYlN0YXRlLkVycm9yKXRocm93IG5ldyBCLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcihQ''@;'; put 'put ''ZSxBZSk7cmV0dXJuIE4/KFVlPSIvY29tcHV0ZS9zZXNzaW9ucy8iLmNvbmNhdChkZSwiL2ZpbGVyZWZzL193ZWJvdXQvY29udGVudCIpLFs0LG9lLmdldChVZSxKLCJ0ZXh0L3BsYWluIikuY2F0Y2goZnVuY3Rpb24oemUpe3JldHVybiBrKE1lLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgaXQsdXQsTXQsSHQ7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihQdCl7c3dpdGNoKFB0LmxhYmVsKXtjYXNlIDA6cmV0dXJuIHplIGluc3RhbmNlb2YgQi5Ob3RGb3VuZEVycm9yJiZUZT8oaXQ9IiIuY29uY2F0KFRlLmhyZWYsIi9jb250ZW50IiksdXQ9bnVsbCE9PShIdD1udWxsPT09KE10''@;'; put 'put ''PVBlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1NdD92b2lkIDA6TXQubGluZUNvdW50KSYmdm9pZCAwIT09SHQ/SHQ6MWU2LFs0LCgwLFguZmV0Y2hMb2dCeUNodW5rcykob2UsSixpdCx1dCldKTpbMywyXTtjYXNlIDE6cmV0dXJuIEFlPVB0LnNlbnQoKSxbMixQcm9taXNlLnJlamVjdCh7''@;'; put 'put ''c3RhdHVzOjUwMCxsb2c6QWV9KV07Y2FzZSAyOnJldHVyblsyLHtyZXN1bHQ6SlNPTi5zdHJpbmdpZnkoemUpfV19fSl9KX0pXSk6WzIse2pvYjpQZSxsb2c6QWV9XTtjYXNlIDE3OnJldHVybiBiZT1EZS5zZW50KCksWzQsc2UuY2xlYXJTZXNzaW9uKGRlLEopLmNhdGNoKGZ1bmN0aW9uKHpl''@;'; put 'put ''KXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIGNsZWFyaW5nIHNlc3Npb24uICIpfSldO2Nhc2UgMTg6cmV0dXJuIERlLnNlbnQoKSxbMix7cmVzdWx0OmJlPy5yZXN1bHQsbG9nOkFlfV07Y2FzZSAxOTppZig0MDQ9PT0oaHQ9RGUuc2VudCgpKS5zdGF0dXMpcmV0''@;'; put 'put ''dXJuWzIsdGUob2Usc2UsaGUsdWUsY2UsRyxiLEQsSCwhMSwhMCldO3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKShodCwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHNjcmlwdC4gIik7Y2FzZSAyMDpyZXR1cm5bMl19fSl9KX19LDc0NTg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ej1SKDQxNTUpLEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShvZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0''@;'; put 'put ''ZShZLnRocm93KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFyIHNlO29lLmRvbmU/WChvZS52YWx1ZSk6KHNlPW9lLnZhbHVlLHNlIGluc3RhbmNlb2YgQj9zZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkpLnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8''@;'; put 'put ''fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEIsWSxYLFUscT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBdKXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgw''@;'; put 'put ''KSx0aHJvdzplZSgxKSxyZXR1cm46ZWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihVW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFU7ZnVuY3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihCPTEsWSYmKFg9MiZzZVswXT9ZLnJldHVybjpzZVswXT9ZLnRocm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSksMCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFd''@;'; put 'put ''KSkuZG9uZSlyZXR1cm4gWDtzd2l0Y2goWT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6WD1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtj''@;'; put 'put ''b250aW51ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWD0oWD1xLnRyeXMpLmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFd''@;'; put 'put ''PlhbMF0mJnNlWzFdPFhbM10pKXtxLmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxYWzFdKXtxLmxhYmVsPVhbMV0sWD1zZTticmVha31pZihYJiZxLmxhYmVsPFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNoKHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxx''@;'; put 'put ''LnRyeXMucG9wKCk7Y29udGludWV9c2U9Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2LGhlXSxZPTB9ZmluYWxseXtCPVg9MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxvZV0pfX19O09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEZpbGVTdHJlYW09dm9pZCAwO3ZhciBrPVIoMjk3NSksRT1SKDc3NTcpO08uZ2V0RmlsZVN0cmVhbT1mdW5jdGlvbihqLFYpe3JldHVybiBLKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEIsWSxYLFUs''@;'; put 'put ''cTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGVlKXtzd2l0Y2goZWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gQj1SKDI5NzUpLmNyZWF0ZVdyaXRlU3RyZWFtLFk9Vnx8ei5jd2QoKSxbNCwoMCxrLmlzRm9sZGVyKShZKV07Y2FzZSAxOnJldHVybiBlZS5zZW50KCk/KFg9IiIuY29uY2F0KGoubmFt''@;'; put 'put ''ZXx8ImpvYiIsIi0iKS5jb25jYXQoKDAsRS5nZW5lcmF0ZVRpbWVzdGFtcCkoKSwiLmxvZyIpLFU9UigyNTIwKSxxPVUuam9pbihWfHx6LmN3ZCgpLFgpLFs0LEIocSldKTpbMywzXTtjYXNlIDI6Y2FzZSA0OnJldHVyblsyLGVlLnNlbnQoKV07Y2FzZSAzOnJldHVybls0LEIoWSldfX0pfSl9''@;'; put 'put ''fSwxMzQzOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKG9lKXtmb3IodmFyIHNlLGhlPTEsdWU9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aDtoZTx1ZTtoZSsrKWZvcih2YXIgY2UgaW4gc2U9YXJndW1lbnRzW2hlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2UsY2UpJiYob2VbY2VdPXNlW2NlXSk7cmV0dXJuIG9lfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8''@;'; put 'put ''ZnVuY3Rpb24ob2Usc2UsaGUsdWUpe3JldHVybiBuZXcoaGV8fChoZT1Qcm9taXNlKSkoZnVuY3Rpb24oY2UsRyl7ZnVuY3Rpb24gYihOKXt0cnl7SCh1ZS5uZXh0KE4pKX1jYXRjaChnKXtHKGcpfX1mdW5jdGlvbiBEKE4pe3RyeXtIKHVlLnRocm93KE4pKX1jYXRjaChnKXtHKGcpfX1mdW5j''@;'; put 'put ''dGlvbiBIKE4pe3ZhciBnO04uZG9uZT9jZShOLnZhbHVlKTooZz1OLnZhbHVlLGcgaW5zdGFuY2VvZiBoZT9nOm5ldyBoZShmdW5jdGlvbihDKXtDKGcpfSkpLnRoZW4oYixEKX1IKCh1ZT11ZS5hcHBseShvZSxzZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8''@;'; put 'put ''ZnVuY3Rpb24ob2Usc2Upe3ZhciBoZSx1ZSxjZSxHLGI9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJuIGNlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEc9e25leHQ6RCgwKSx0aHJvdzpEKDEpLHJldHVybjpEKDIpfSwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgU3ltYm9sJiYoR1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxHO2Z1bmN0aW9uIEQoSCl7cmV0dXJuIGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihnKXtpZihoZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBl''@;'; put 'put ''eGVjdXRpbmcuIik7Zm9yKDtiOyl0cnl7aWYoaGU9MSx1ZSYmKGNlPTImZ1swXT91ZS5yZXR1cm46Z1swXT91ZS50aHJvd3x8KChjZT11ZS5yZXR1cm4pJiZjZS5jYWxsKHVlKSwwKTp1ZS5uZXh0KSYmIShjZT1jZS5jYWxsKHVlLGdbMV0pKS5kb25lKXJldHVybiBjZTtzd2l0Y2godWU9MCxj''@;'; put 'put ''ZSYmKGc9WzImZ1swXSxjZS52YWx1ZV0pLGdbMF0pe2Nhc2UgMDpjYXNlIDE6Y2U9ZzticmVhaztjYXNlIDQ6cmV0dXJuIGIubGFiZWwrKyx7dmFsdWU6Z1sxXSxkb25lOiExfTtjYXNlIDU6Yi5sYWJlbCsrLHVlPWdbMV0sZz1bMF07Y29udGludWU7Y2FzZSA3Omc9Yi5vcHMucG9wKCksYi50''@;'; put 'put ''cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoY2U9KGNlPWIudHJ5cykubGVuZ3RoPjAmJmNlW2NlLmxlbmd0aC0xXSl8fDYhPT1nWzBdJiYyIT09Z1swXSkpe2I9MDtjb250aW51ZX1pZigzPT09Z1swXSYmKCFjZXx8Z1sxXT5jZVswXSYmZ1sxXTxjZVszXSkpe2IubGFiZWw9Z1sx''@;'; put 'put ''XTticmVha31pZig2PT09Z1swXSYmYi5sYWJlbDxjZVsxXSl7Yi5sYWJlbD1jZVsxXSxjZT1nO2JyZWFrfWlmKGNlJiZiLmxhYmVsPGNlWzJdKXtiLmxhYmVsPWNlWzJdLGIub3BzLnB1c2goZyk7YnJlYWt9Y2VbMl0mJmIub3BzLnBvcCgpLGIudHJ5cy5wb3AoKTtjb250aW51ZX1nPXNlLmNh''@;'; put 'put ''bGwob2UsYil9Y2F0Y2goQyl7Zz1bNixDXSx1ZT0wfWZpbmFsbHl7aGU9Y2U9MH1pZig1JmdbMF0pdGhyb3cgZ1sxXTtyZXR1cm57dmFsdWU6Z1swXT9nWzFdOnZvaWQgMCxkb25lOiEwfX0oW0gsTl0pfX19LGo9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihvZSxzZSxoZSl7''@;'; put 'put ''aWYoaGV8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgdWUsY2U9MCxHPXNlLmxlbmd0aDtjZTxHO2NlKyspIXVlJiZjZSBpbiBzZXx8KHVlfHwodWU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc2UsMCxjZSkpLHVlW2NlXT1zZVtjZV0pO3JldHVybiBvZS5jb25jYXQodWV8fEFy''@;'; put 'put ''cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHNlKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmRvUG9sbD1PLnBvbGxKb2JTdGF0ZT1PLkpvYlN0YXRlPXZvaWQgMDt2YXIgVixvZSxCPVIoNzA0KSxZPVIoMTM5NSksWD1SKDEyMzApLFU9Uig1''@;'; put 'put ''OTI4KTsob2U9Vj1PLkpvYlN0YXRlfHwoTy5Kb2JTdGF0ZT17fSkpLkNvbXBsZXRlZD0iY29tcGxldGVkIixvZS5SdW5uaW5nPSJydW5uaW5nIixvZS5QZW5kaW5nPSJwZW5kaW5nIixvZS5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLG9lLk5vU3RhdGU9IiIsb2UuRmFpbGVkPSJmYWlsZWQi''@;'; put 'put ''LG9lLkVycm9yPSJlcnJvciIsTy5wb2xsSm9iU3RhdGU9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2UsRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsRCxILE4sZyxDLFMsdixwLHcsSjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKG5lKXtzd2l0Y2gobmUubGFi''@;'; put 'put ''ZWwpe2Nhc2UgMDppZihiPXoubG9nZ2VyfHxLLEQ9Y2U/LnN0cmVhbUxvZ3x8ITEsSD1be21heFBvbGxDb3VudDoyMDAscG9sbEludGVydmFsOjMwMH0se21heFBvbGxDb3VudDozMDAscG9sbEludGVydmFsOjNlM30se21heFBvbGxDb3VudDo1MDAscG9sbEludGVydmFsOjNlNH0se21heFBv''@;'; put 'put ''bGxDb3VudDozNDAwLHBvbGxJbnRlcnZhbDo2ZTR9XSx2b2lkIDAhPT1jZT8oTj1bY2VdLHZvaWQgMCE9PShnPWNlLnBvbGxTdHJhdGVneSk/KHRlKGcpLGc9Zy5zb3J0KGZ1bmN0aW9uKGRlLGZlKXtyZXR1cm4gZGUubWF4UG9sbENvdW50LWZlLm1heFBvbGxDb3VudH0pLE49aihqKFtdLE4s''@;'; put 'put ''ITApLGcsITApKTpOPWooaihbXSxOLCEwKSxILCEwKSk6Tj1ILEM9Ti5zcGxpY2UoMCwxKVswXSxjZT1JKEkoe30sQyksY2V8fHt9KSwhKFM9c2UubGlua3MuZmluZChmdW5jdGlvbihkZSl7cmV0dXJuInN0YXRlIj09PWRlLnJlbH0pKSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBzdGF0ZSBsaW5r''@;'; put 'put ''IHdhcyBub3QgZm91bmQuIik7cmV0dXJuWzQscShvZSxzZSxWLk5vU3RhdGUsaGUsdWUpLmNhdGNoKGZ1bmN0aW9uKGRlKXtyZXR1cm4gYi5lcnJvcigiRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gIi5jb25jYXQoUy5ocmVmLCIuIFN0YXJ0aW5nIHBvbGwsIGFzc3VtaW5nIGpvYiB0''@;'; put 'put ''byBiZSBydW5uaW5nLiIpLGRlKSxWLlVuYXZhaWxhYmxlfSldO2Nhc2UgMTpyZXR1cm4gdj1uZS5zZW50KCkscD0wLHY9PT1WLkNvbXBsZXRlZD9bMixQcm9taXNlLnJlc29sdmUodildOkQmJigwLFUuaXNOb2RlKSgpP1s0LCgwLFIoNzQ1OCkuZ2V0RmlsZVN0cmVhbSkoc2UsY2UubG9nRm9s''@;'; put 'put ''ZGVyUGF0aCldOlszLDNdO2Nhc2UgMjp3PW5lLnNlbnQoKSxuZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bNCwoMCxPLmRvUG9sbCkob2Usc2UsdixoZSxwLGNlLHVlLEQsdyxHKV07Y2FzZSA0OmlmKEo9bmUuc2VudCgpLHA9Si5wb2xsQ291bnQsIWVlKHY9Si5zdGF0ZSl8fHA+PWNlLm1heFBv''@;'; put 'put ''bGxDb3VudCYmIU4ubGVuZ3RoKXJldHVyblsyLHZdO25lLmxhYmVsPTU7Y2FzZSA1OnJldHVybiBOLmxlbmd0aCYmZWUodik/KEM9Ti5zcGxpY2UoMCwxKVswXSxjZSYmKEMubG9nRm9sZGVyUGF0aD1jZS5sb2dGb2xkZXJQYXRoKSxbNCwoMCxPLmRvUG9sbCkob2Usc2UsdixoZSxwLEMsdWUs''@;'; put 'put ''RCx3LEcpXSk6WzMsN107Y2FzZSA2OnJldHVybiBKPW5lLnNlbnQoKSx2PUouc3RhdGUscD1KLnBvbGxDb3VudCxbMyw1XTtjYXNlIDc6cmV0dXJuIHcmJncuZW5kKCksWzIsdl19fSl9KX07dmFyIHE9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2Upe3JldHVybiBrKHZvaWQgMCx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKCl7dmFyIEcsYjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIEc9c2UubGlua3MuZmluZChmdW5jdGlvbihIKXtyZXR1cm4ic3RhdGUiPT09SC5yZWx9KSxlZShoZSk/KGI9dm9pZCAwLGNlP1s0LCgwLEIuZ2V0VG9r''@;'; put 'put ''ZW5zKShvZSxjZSldOlszLDJdKTpbMyw0XTtjYXNlIDE6Yj1ELnNlbnQoKSxELmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LG9lLmdldCgiIi5jb25jYXQoRy5ocmVmLCI/X2FjdGlvbj13YWl0JndhaXQ9MzAwIiksYj8uYWNjZXNzX3Rva2VuLCJ0ZXh0L3BsYWluIix7fSx1ZSkuY2F0Y2goZnVu''@;'; put 'put ''Y3Rpb24oSCl7dGhyb3cgbmV3IFkuSm9iU3RhdGVQb2xsRXJyb3Ioc2UuaWQsSCl9KV07Y2FzZSAzOnJldHVyblsyLEQuc2VudCgpLnJlc3VsdC50cmltKCldO2Nhc2UgNDpyZXR1cm5bMixoZV19fSl9KX0sZWU9ZnVuY3Rpb24ob2Upe3JldHVybiBvZT09PVYuUnVubmluZ3x8b2U9PT1WLk5v''@;'; put 'put ''U3RhdGV8fG9lPT09Vi5QZW5kaW5nfHxvZT09PVYuVW5hdmFpbGFibGV9O08uZG9Qb2xsPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcsYixELEgsTil7cmV0dXJuIGsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDLFMsdixwLHcsSixuZSxkZSxmZSx4ZTtyZXR1cm4g''@;'; put 'put ''RSh0aGlzLGZ1bmN0aW9uKExlKXtzd2l0Y2goTGUubGFiZWwpe2Nhc2UgMDpnPUcubWF4UG9sbENvdW50LEM9Ry5wb2xsSW50ZXJ2YWwsUz16LmxvZ2dlcnx8Syx2PXNlLmxpbmtzLmZpbmQoZnVuY3Rpb24oRmUpe3JldHVybiJzdGF0ZSI9PT1GZS5yZWx9KSxwPTAsdz1oZSxKPVYuTm9TdGF0''@;'; put 'put ''ZSxuZT0wLGRlPWZ1bmN0aW9uKCl7dmFyIEZlLE9lLEtlLFllLEplLGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTWUpe3N3aXRjaChNZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBOJiZjZSYmY2UlMTA9PTAmJmI/KEtlPShGZT1OLnNlc3Npb24pLmlk''@;'; put 'put ''LEplPXNlLmlkLFs0LChPZT1OLnNlc3Npb25NYW5hZ2VyKS5nZXRTZXNzaW9uU3RhdGUoRmUuc3RhdGVVcmwsRmUuZXRhZyxZZT1iLmFjY2Vzc190b2tlbikuY2F0Y2goZnVuY3Rpb24oRGUpe3Rocm93IG5ldyBZLkpvYlN0YXRlUG9sbEVycm9yKEplLERlKX0pXSk6WzMsMl07Y2FzZSAxOmlm''@;'; put 'put ''KGx0PU1lLnNlbnQoKSxiZT1sdC5yZXNwb25zZVN0YXR1cywhKEFlPWZ1bmN0aW9uKERlKXtyZXR1cm5bWC5TZXNzaW9uU3RhdGUuUnVubmluZyxYLlNlc3Npb25TdGF0ZS5JZGxlXS5pbmNsdWRlcyhEZSl9KShQZT1sdC5yZXN1bHQpfHwyMDAhPT1iZSl0aHJvdyBPZS5jbGVhclNlc3Npb24o''@;'; put 'put ''S2UsWWUpLFRlPUFlKFBlKT8iU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgbm90IDIwMC4gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgIi5jb25jYXQoYmUsIi4iKToiU2Vzc2lvbiBzdGF0ZSBvZiB0aGUgam9iIGlzIG5vdCAncnVubmluZycgb3IgJ2lkbGUnLiBTZXNzaW9uIHN0YXRl''@;'; put 'put ''IGlzICciLmNvbmNhdChQZSwiJyIpLG5ldyBZLkpvYlN0YXRlUG9sbEVycm9yKEplLG5ldyBFcnJvcihUZSkpO01lLmxhYmVsPTI7Y2FzZSAyOnJldHVybls0LHEob2Usc2Usdyx1ZSxiKS5jYXRjaChmdW5jdGlvbihEZSl7aWYocCsrLGNlPj1nfHxwPj01KXRocm93IERlO3JldHVybiBTLmVy''@;'; put 'put ''cm9yKCJFcnJvciBmZXRjaGluZyBqb2Igc3RhdGUgZnJvbSAiLmNvbmNhdCh2LmhyZWYsIi4gUmVzdW1pbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuIiksRGUpLFYuVW5hdmFpbGFibGV9KV07Y2FzZSAzOnJldHVybiB3PU1lLnNlbnQoKSxjZSsrLHFlPXNlLmxpbmtzLmZp''@;'; put 'put ''bmQoZnVuY3Rpb24oRGUpe3JldHVybiJzZWxmIj09PURlLnJlbH0pLmhyZWYsRD9bNCxvZS5nZXQocWUsYj8uYWNjZXNzX3Rva2VuKV06WzMsN107Y2FzZSA0OnJldHVybiBYZT1NZS5zZW50KCkucmVzdWx0LFVlPW51bGwhPT0oeGU9bnVsbD09PShmZT1YZS5sb2dTdGF0aXN0aWNzKXx8dm9p''@;'; put 'put ''ZCAwPT09ZmU/dm9pZCAwOmZlLmxpbmVDb3VudCkmJnZvaWQgMCE9PXhlP3hlOjFlNiwoaHQ9KCgwLFUuaXNOb2RlKSgpP1IoMjA4MCk6e3NhdmVMb2c6bnVsbH0pLnNhdmVMb2cpP1s0LGh0KHNlLG9lLG5lLFVlLEgsYj8uYWNjZXNzX3Rva2VuKV06WzMsNl07Y2FzZSA1Ok1lLnNlbnQoKSxN''@;'; put 'put ''ZS5sYWJlbD02O2Nhc2UgNjpuZSs9VWUsTWUubGFiZWw9NztjYXNlIDc6cmV0dXJuIHVlJiZKIT09dyYmKFMuaW5mbygiUG9sbGluZzogIi5jb25jYXQob2UuZ2V0QmFzZVVybCgpK3FlLCIvc3RhdGUiKSksUy5pbmZvKCJDdXJyZW50IGpvYiBzdGF0ZTogIi5jb25jYXQodykpLEo9dyksdyE9''@;'; put 'put ''PVYuVW5hdmFpbGFibGUmJnA+MCYmKHA9MCksdz09PVYuQ29tcGxldGVkP1szLDldOls0LCgwLFUuZGVsYXkpKEMpXTtjYXNlIDg6TWUuc2VudCgpLE1lLmxhYmVsPTk7Y2FzZSA5OnJldHVyblsyXX19KX0sTGUubGFiZWw9MTtjYXNlIDE6cmV0dXJuIGVlKHcpJiZjZTw9Zz9bNSxkZSgpXTpb''@;'; put 'put ''MywzXTtjYXNlIDI6cmV0dXJuIExlLnNlbnQoKSxbMywxXTtjYXNlIDM6cmV0dXJuWzIse3N0YXRlOncscG9sbENvdW50OmNlfV19fSl9KX07dmFyIHRlPWZ1bmN0aW9uKG9lKXt2YXIgc2U9ZnVuY3Rpb24oaGUsdWUpe3Rocm93IG5ldyBFcnJvcigiUG9sbCBzdHJhdGVnaWVzIGFyZSBub3Qg''@;'; put 'put ''dmFsaWQuIi5jb25jYXQoaGU/IiAiLmNvbmNhdChoZSk6IiIpLmNvbmNhdCh1ZT8iIEludmFsaWQgcG9sbCBzdHJhdGVneTogXG4iLmNvbmNhdChKU09OLnN0cmluZ2lmeSh1ZSxudWxsLDIpKToiIikpfTtvZS5mb3JFYWNoKGZ1bmN0aW9uKGhlLHVlKXt2YXIgY2U9aGUubWF4UG9sbENvdW50''@;'; put 'put ''LEc9aGUucG9sbEludGVydmFsO2NlPDE/c2UoIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLGhlKTowIT09dWU/Y2U8PW9lW3VlLTFdLm1heFBvbGxDb3VudCYmc2UoIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gJ21heFBvbGxDb3VudCcg''@;'; put 'put ''aW4gcHJldmlvdXMgcG9sbCBzdHJhdGVneS4iLGhlKTpHPDEmJnNlKCIncG9sbEludGVydmFsJyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuIixoZSl9KX19LDIwODA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19h''@;'; put 'put ''d2FpdGVyfHxmdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihVLHEpe2Z1bmN0aW9uIGVlKHNlKXt0cnl7b2UoWC5uZXh0KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiB0ZShzZSl7dHJ5e29lKFgudGhyb3coc2UpKX1jYXRjaChoZSl7''@;'; put 'put ''cShoZSl9fWZ1bmN0aW9uIG9lKHNlKXt2YXIgaGU7c2UuZG9uZT9VKHNlLnZhbHVlKTooaGU9c2UudmFsdWUsaGUgaW5zdGFuY2VvZiBZP2hlOm5ldyBZKGZ1bmN0aW9uKHVlKXt1ZShoZSl9KSkudGhlbihlZSx0ZSl9b2UoKFg9WC5hcHBseShWLEJ8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMm''@;'; put 'put ''JnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFYsQil7dmFyIFksWCxVLHEsZWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVVswXSl0aHJvdyBVWzFdO3JldHVybiBVWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHE9e25leHQ6dGUoMCksdGhyb3c6dGUoMSkscmV0dXJuOnRl''@;'; put 'put ''KDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxxO2Z1bmN0aW9uIHRlKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe3JldHVybiBmdW5jdGlvbihoZSl7aWYoWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5l''@;'; put 'put ''cmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtlZTspdHJ5e2lmKFk9MSxYJiYoVT0yJmhlWzBdP1gucmV0dXJuOmhlWzBdP1gudGhyb3d8fCgoVT1YLnJldHVybikmJlUuY2FsbChYKSwwKTpYLm5leHQpJiYhKFU9VS5jYWxsKFgsaGVbMV0pKS5kb25lKXJldHVybiBVO3N3aXRj''@;'; put 'put ''aChYPTAsVSYmKGhlPVsyJmhlWzBdLFUudmFsdWVdKSxoZVswXSl7Y2FzZSAwOmNhc2UgMTpVPWhlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZWUubGFiZWwrKyx7dmFsdWU6aGVbMV0sZG9uZTohMX07Y2FzZSA1OmVlLmxhYmVsKyssWD1oZVsxXSxoZT1bMF07Y29udGludWU7Y2FzZSA3OmhlPWVl''@;'; put 'put ''Lm9wcy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVT0oVT1lZS50cnlzKS5sZW5ndGg+MCYmVVtVLmxlbmd0aC0xXSl8fDYhPT1oZVswXSYmMiE9PWhlWzBdKSl7ZWU9MDtjb250aW51ZX1pZigzPT09aGVbMF0mJighVXx8aGVbMV0+VVswXSYmaGVbMV08VVsz''@;'; put 'put ''XSkpe2VlLmxhYmVsPWhlWzFdO2JyZWFrfWlmKDY9PT1oZVswXSYmZWUubGFiZWw8VVsxXSl7ZWUubGFiZWw9VVsxXSxVPWhlO2JyZWFrfWlmKFUmJmVlLmxhYmVsPFVbMl0pe2VlLmxhYmVsPVVbMl0sZWUub3BzLnB1c2goaGUpO2JyZWFrfVVbMl0mJmVlLm9wcy5wb3AoKSxlZS50cnlzLnBv''@;'; put 'put ''cCgpO2NvbnRpbnVlfWhlPUIuY2FsbChWLGVlKX1jYXRjaCh1ZSl7aGU9WzYsdWVdLFg9MH1maW5hbGx5e1k9VT0wfWlmKDUmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJue3ZhbHVlOmhlWzBdP2hlWzFdOnZvaWQgMCxkb25lOiEwfX0oW29lLHNlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uc2F2ZUxvZz12b2lkIDA7dmFyIEU9Uig1OTI4KSxqPVIoNjEzMSk7Ty5zYXZlTG9nPWZ1bmN0aW9uKFYsQixZLFgsVSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZWUsdGUsb2U7cmV0dXJuIGsodGhp''@;'; put 'put ''cyxmdW5jdGlvbihzZSl7c3dpdGNoKHNlLmxhYmVsKXtjYXNlIDA6aWYoIXEpdGhyb3cgbmV3IEVycm9yKCJMb2dzIGZvciBqb2IgIi5jb25jYXQoVi5pZCwiIGNhbm5vdCBiZSBmZXRjaGVkIHdpdGhvdXQgYSB2YWxpZCBhY2Nlc3MgdG9rZW4uIikpO2lmKCFVKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''TG9ncyBmb3Igam9iICIuY29uY2F0KFYuaWQsIiBjYW5ub3QgYmUgd3JpdHRlbiB3aXRob3V0IGEgdmFsaWQgd3JpdGUgc3RyZWFtLiIpKTtpZihlZT16LmxvZ2dlcnx8SywhKHRlPVYubGlua3MuZmluZChmdW5jdGlvbihoZSl7cmV0dXJuImxvZyI9PT1oZS5yZWx9KSkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJMb2cgVVJMIGZvciBqb2IgIi5jb25jYXQoVi5pZCwiIHdhcyBub3QgZm91bmQuIikpO3JldHVybls0LCgwLEUuZmV0Y2hMb2cpKEIscSwiIi5jb25jYXQodGUuaHJlZiwiL2NvbnRlbnQiKSxZLFgpXTtjYXNlIDE6cmV0dXJuIG9lPXNlLnNlbnQoKSxlZS5pbmZvKCJXcml0aW5nIGxv''@;'; put 'put ''Z3MgdG8gIi5jb25jYXQoVS5wYXRoKSksWzQsKDAsai53cml0ZVN0cmVhbSkoVSxvZXx8IiIpXTtjYXNlIDI6cmV0dXJuIHNlLnNlbnQoKSxbMl19fSl9KX19LDY0OTY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSxq''@;'; put 'put ''LFYsQil7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSkoZnVuY3Rpb24oWSxYKXtmdW5jdGlvbiBVKHRlKXt0cnl7ZWUoQi5uZXh0KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlvbiBxKHRlKXt0cnl7ZWUoQi50aHJvdyh0ZSkpfWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gZWUodGUp''@;'; put 'put ''e3ZhciBvZTt0ZS5kb25lP1kodGUudmFsdWUpOihvZT10ZS52YWx1ZSxvZSBpbnN0YW5jZW9mIFY/b2U6bmV3IFYoZnVuY3Rpb24oc2Upe3NlKG9lKX0pKS50aGVuKFUscSl9ZWUoKEI9Qi5hcHBseShFLGp8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0''@;'; put 'put ''aW9uKEUsail7dmFyIFYsQixZLFgsVT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZZWzBdKXRocm93IFlbMV07cmV0dXJuIFlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWD17bmV4dDpxKDApLHRocm93OnEoMSkscmV0dXJuOnEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1i''@;'; put 'put ''b2wmJihYW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFg7ZnVuY3Rpb24gcShlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe2lmKFYpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIp''@;'; put 'put ''O2Zvcig7VTspdHJ5e2lmKFY9MSxCJiYoWT0yJm9lWzBdP0IucmV0dXJuOm9lWzBdP0IudGhyb3d8fCgoWT1CLnJldHVybikmJlkuY2FsbChCKSwwKTpCLm5leHQpJiYhKFk9WS5jYWxsKEIsb2VbMV0pKS5kb25lKXJldHVybiBZO3N3aXRjaChCPTAsWSYmKG9lPVsyJm9lWzBdLFkudmFsdWVd''@;'; put 'put ''KSxvZVswXSl7Y2FzZSAwOmNhc2UgMTpZPW9lO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVS5sYWJlbCsrLHt2YWx1ZTpvZVsxXSxkb25lOiExfTtjYXNlIDU6VS5sYWJlbCsrLEI9b2VbMV0sb2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpvZT1VLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWU7''@;'; put 'put ''ZGVmYXVsdDppZighKChZPShZPVUudHJ5cykubGVuZ3RoPjAmJllbWS5sZW5ndGgtMV0pfHw2IT09b2VbMF0mJjIhPT1vZVswXSkpe1U9MDtjb250aW51ZX1pZigzPT09b2VbMF0mJighWXx8b2VbMV0+WVswXSYmb2VbMV08WVszXSkpe1UubGFiZWw9b2VbMV07YnJlYWt9aWYoNj09PW9lWzBd''@;'; put 'put ''JiZVLmxhYmVsPFlbMV0pe1UubGFiZWw9WVsxXSxZPW9lO2JyZWFrfWlmKFkmJlUubGFiZWw8WVsyXSl7VS5sYWJlbD1ZWzJdLFUub3BzLnB1c2gob2UpO2JyZWFrfVlbMl0mJlUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZX1vZT1qLmNhbGwoRSxVKX1jYXRjaChzZSl7b2U9WzYs''@;'; put 'put ''c2VdLEI9MH1maW5hbGx5e1Y9WT0wfWlmKDUmb2VbMF0pdGhyb3cgb2VbMV07cmV0dXJue3ZhbHVlOm9lWzBdP29lWzFdOnZvaWQgMCxkb25lOiEwfX0oW2VlLHRlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udXBsb2FkVGFibGVzPXZv''@;'; put 'put ''aWQgMDt2YXIgST1SKDk3NzgpLGs9UigyNDAyKTtPLnVwbG9hZFRhYmxlcz1mdW5jdGlvbihFLGosVil7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEIsWSxYLFUscSxlZSx0ZTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFiZWwpe2Nh''@;'; put 'put ''c2UgMDpmb3IoWCBpbiBCPVtdLFk9W10sailZLnB1c2goWCk7VT0wLG9lLmxhYmVsPTE7Y2FzZSAxOmlmKCEoVTxZLmxlbmd0aCkpcmV0dXJuWzMsNF07aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PShlZT0oMCxrLmNvbnZlcnRUb0NTVikoaixxPVlbVV0pKSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7cmV0dXJuWzQsRS51cGxvYWRGaWxlKCIvZmlsZXMvZmlsZXMjcmF3VXBsb2FkIixlZSxWKS5jYXRjaChmdW5jdGlvbihzZSl7dGhyb3coMCxJLnByZWZpeE1lc3Nh''@;'; put 'put ''Z2UpKHNlLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgZmlsZS4gIil9KV07Y2FzZSAyOnRlPW9lLnNlbnQoKSxCLnB1c2goe3RhYmxlTmFtZTpxLGZpbGU6dGUucmVzdWx0fSksb2UubGFiZWw9MztjYXNlIDM6cmV0dXJuIFUrKyxbMywxXTtjYXNlIDQ6cmV0dXJuWzIsQl19fSl9KX19LDYxMzE6''@;'; put 'put ''ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEssSSxrLEUpe3JldHVybiBuZXcoa3x8KGs9UHJvbWlzZSkpKGZ1bmN0aW9uKGosVil7ZnVuY3Rpb24gQihVKXt0cnl7WChFLm5leHQoVSkpfWNhdGNoKHEpe1YocSl9fWZ1bmN0''@;'; put 'put ''aW9uIFkoVSl7dHJ5e1goRS50aHJvdyhVKSl9Y2F0Y2gocSl7VihxKX19ZnVuY3Rpb24gWChVKXt2YXIgcTtVLmRvbmU/aihVLnZhbHVlKToocT1VLnZhbHVlLHEgaW5zdGFuY2VvZiBrP3E6bmV3IGsoZnVuY3Rpb24oZWUpe2VlKHEpfSkpLnRoZW4oQixZKX1YKChFPUUuYXBwbHkoSyxJfHxb''@;'; put 'put ''XSkpLm5leHQoKSl9KX0sej10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihLLEkpe3ZhciBrLEUsaixWLEI9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmalswXSl0aHJvdyBqWzFdO3JldHVybiBqWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFY9e25leHQ6WSgwKSx0''@;'; put 'put ''aHJvdzpZKDEpLHJldHVybjpZKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxWO2Z1bmN0aW9uIFkoWCl7cmV0dXJuIGZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihxKXtpZihrKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0I7KXRyeXtpZihrPTEsRSYmKGo9MiZxWzBdP0UucmV0dXJuOnFbMF0/RS50aHJvd3x8KChqPUUucmV0dXJuKSYmai5jYWxsKEUpLDApOkUubmV4dCkmJiEoaj1qLmNhbGwoRSxxWzFdKSkuZG9uZSlyZXR1''@;'; put 'put ''cm4gajtzd2l0Y2goRT0wLGomJihxPVsyJnFbMF0sai52YWx1ZV0pLHFbMF0pe2Nhc2UgMDpjYXNlIDE6aj1xO2JyZWFrO2Nhc2UgNDpyZXR1cm4gQi5sYWJlbCsrLHt2YWx1ZTpxWzFdLGRvbmU6ITF9O2Nhc2UgNTpCLmxhYmVsKyssRT1xWzFdLHE9WzBdO2NvbnRpbnVlO2Nhc2UgNzpxPUIu''@;'; put 'put ''b3BzLnBvcCgpLEIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGo9KGo9Qi50cnlzKS5sZW5ndGg+MCYmaltqLmxlbmd0aC0xXSl8fDYhPT1xWzBdJiYyIT09cVswXSkpe0I9MDtjb250aW51ZX1pZigzPT09cVswXSYmKCFqfHxxWzFdPmpbMF0mJnFbMV08alszXSkpe0IubGFi''@;'; put 'put ''ZWw9cVsxXTticmVha31pZig2PT09cVswXSYmQi5sYWJlbDxqWzFdKXtCLmxhYmVsPWpbMV0saj1xO2JyZWFrfWlmKGomJkIubGFiZWw8alsyXSl7Qi5sYWJlbD1qWzJdLEIub3BzLnB1c2gocSk7YnJlYWt9alsyXSYmQi5vcHMucG9wKCksQi50cnlzLnBvcCgpO2NvbnRpbnVlfXE9SS5jYWxs''@;'; put 'put ''KEssQil9Y2F0Y2goZWUpe3E9WzYsZWVdLEU9MH1maW5hbGx5e2s9aj0wfWlmKDUmcVswXSl0aHJvdyBxWzFdO3JldHVybnt2YWx1ZTpxWzBdP3FbMV06dm9pZCAwLGRvbmU6ITB9fShbWCxVXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8u''@;'; put 'put ''d3JpdGVTdHJlYW09dm9pZCAwLE8ud3JpdGVTdHJlYW09ZnVuY3Rpb24oSyxJKXtyZXR1cm4gUih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oayl7cmV0dXJuWzIsSy53cml0ZShJKyJcbiIsZnVuY3Rpb24oRSl7cmV0dXJuIEU/UHJvbWlz''@;'; put 'put ''ZS5yZWplY3QoRSk6UHJvbWlzZS5yZXNvbHZlKCl9KV19KX0pfX0sMjg1MTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCksSz1SKDQxNTUpLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG9lLHNlLGhlLHVlKXtyZXR1cm4gbmV3KGhlfHwoaGU9UHJv''@;'; put 'put ''bWlzZSkpKGZ1bmN0aW9uKGNlLEcpe2Z1bmN0aW9uIGIoTil7dHJ5e0godWUubmV4dChOKSl9Y2F0Y2goZyl7RyhnKX19ZnVuY3Rpb24gRChOKXt0cnl7SCh1ZS50aHJvdyhOKSl9Y2F0Y2goZyl7RyhnKX19ZnVuY3Rpb24gSChOKXt2YXIgZztOLmRvbmU/Y2UoTi52YWx1ZSk6KGc9Ti52YWx1''@;'; put 'put ''ZSxnIGluc3RhbmNlb2YgaGU/ZzpuZXcgaGUoZnVuY3Rpb24oQyl7QyhnKX0pKS50aGVuKGIsRCl9SCgodWU9dWUuYXBwbHkob2Usc2V8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKG9lLHNlKXt2YXIgaGUsdWUsY2UsRyxiPXtsYWJlbDowLHNl''@;'; put 'put ''bnQ6ZnVuY3Rpb24oKXtpZigxJmNlWzBdKXRocm93IGNlWzFdO3JldHVybiBjZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBHPXtuZXh0OkQoMCksdGhyb3c6RCgxKSxyZXR1cm46RCgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzfSksRztmdW5jdGlvbiBEKEgpe3JldHVybiBmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oZyl7aWYoaGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YjspdHJ5e2lmKGhlPTEsdWUmJihjZT0yJmdb''@;'; put 'put ''MF0/dWUucmV0dXJuOmdbMF0/dWUudGhyb3d8fCgoY2U9dWUucmV0dXJuKSYmY2UuY2FsbCh1ZSksMCk6dWUubmV4dCkmJiEoY2U9Y2UuY2FsbCh1ZSxnWzFdKSkuZG9uZSlyZXR1cm4gY2U7c3dpdGNoKHVlPTAsY2UmJihnPVsyJmdbMF0sY2UudmFsdWVdKSxnWzBdKXtjYXNlIDA6Y2FzZSAx''@;'; put 'put ''OmNlPWc7YnJlYWs7Y2FzZSA0OnJldHVybiBiLmxhYmVsKysse3ZhbHVlOmdbMV0sZG9uZTohMX07Y2FzZSA1OmIubGFiZWwrKyx1ZT1nWzFdLGc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpnPWIub3BzLnBvcCgpLGIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGNlPShjZT1iLnRy''@;'; put 'put ''eXMpLmxlbmd0aD4wJiZjZVtjZS5sZW5ndGgtMV0pfHw2IT09Z1swXSYmMiE9PWdbMF0pKXtiPTA7Y29udGludWV9aWYoMz09PWdbMF0mJighY2V8fGdbMV0+Y2VbMF0mJmdbMV08Y2VbM10pKXtiLmxhYmVsPWdbMV07YnJlYWt9aWYoNj09PWdbMF0mJmIubGFiZWw8Y2VbMV0pe2IubGFiZWw9''@;'; put 'put ''Y2VbMV0sY2U9ZzticmVha31pZihjZSYmYi5sYWJlbDxjZVsyXSl7Yi5sYWJlbD1jZVsyXSxiLm9wcy5wdXNoKGcpO2JyZWFrfWNlWzJdJiZiLm9wcy5wb3AoKSxiLnRyeXMucG9wKCk7Y29udGludWV9Zz1zZS5jYWxsKG9lLGIpfWNhdGNoKEMpe2c9WzYsQ10sdWU9MH1maW5hbGx5e2hlPWNl''@;'; put 'put ''PTB9aWYoNSZnWzBdKXRocm93IGdbMV07cmV0dXJue3ZhbHVlOmdbMF0/Z1sxXTp2b2lkIDAsZG9uZTohMH19KFtILE5dKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5BdXRoTWFuYWdlcj12b2lkIDA7dmFyIEU9UigzOTAwKSxqPVIoMTM5''@;'; put 'put ''NSksVj1SKDU5MjgpLEI9UigxMTcwKSxZPVIoNTQxOCksWD1SKDQ1ODIpLFU9Uig2NTQ3KSxxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gb2Uoc2UsaGUsdWUsY2Upe3ZhciBHPXRoaXM7dGhpcy5zZXJ2ZXJVcmw9c2UsdGhpcy5zZXJ2ZXJUeXBlPWhlLHRoaXMucmVxdWVzdENsaWVudD11ZSx0aGlz''@;'; put 'put ''LmxvZ2luQ2FsbGJhY2s9Y2UsdGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD0iL1NBU0xvZ29uIix0aGlzLmV4dHJhY3RVc2VyTmFtZT1mdW5jdGlvbihiKXtzd2l0Y2goRy5zZXJ2ZXJUeXBlKXtjYXNlIEUuU2VydmVyVHlwZS5T''@;'; put 'put ''YXNWaXlhOnJldHVybiBiPy5pZDtjYXNlIEUuU2VydmVyVHlwZS5TYXM5OnJldHVybiIiO2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBiPy51c2VybmFtZTtkZWZhdWx0OnJldHVybiB6LmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0''@;'; put 'put ''aW9uIiksIiJ9fSx0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWU9ZnVuY3Rpb24oYil7c3dpdGNoKEcuc2VydmVyVHlwZSl7Y2FzZSBFLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gYj8ubmFtZTtjYXNlIEUuU2VydmVyVHlwZS5TYXM5OnJldHVybigwLEIuZXh0cmFjdFVzZXJMb25nTmFtZVNh''@;'; put 'put ''czkpKGIpO2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiBiPy5kaXNwbGF5TmFtZTtkZWZhdWx0OnJldHVybiB6LmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLnNldExvZ2luVXJsPWZ1bmN0aW9uKGIpe3Zh''@;'; put 'put ''ciBEPWJbMV0ucmVwbGFjZSgvXD8uKi8sIiIpO2lmKCIvIj09PURbMF0pe0Q9RC5zdWJzdHIoMSk7dmFyIEg9Ry5zZXJ2ZXJVcmw/IiIuY29uY2F0KEcuc2VydmVyVXJsLCIvIikuY29uY2F0KEQpOiIiLmNvbmNhdChEKTtHLmxvZ2luVXJsPUcuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5T''@;'; put 'put ''YXNWaXlhP0g6SC5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKX19LHRoaXMubG9naW5Vcmw9Ii9TQVNMb2dvbi9sb2dpbiIsdGhpcy5sb2dvdXRVcmw9dGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNMb2dvbi9sb2dvdXQ/Ijp0''@;'; put 'put ''aGlzLnNlcnZlclR5cGU9PT1FLlNlcnZlclR5cGUuU2FzVml5YT8iL1NBU0xvZ29uL2xvZ291dC5kbz8iOiIvU0FTTG9nb24vbG9nb3V0In1yZXR1cm4gb2UucHJvdG90eXBlLnJlZGlyZWN0ZWRMb2dJbj1mdW5jdGlvbihzZSl7dmFyIGhlPXNlLm9uTG9nZ2VkT3V0O3JldHVybiBJKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxHLGIsRCxILE4sZyxDLFM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih2KXtzd2l0Y2godi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtjYXNlIDE6cmV0dXJuIHVlPXYuc2VudCgpLEc9dWUudXNlck5h''@;'; put 'put ''bWUsYj11ZS51c2VyTG9uZ05hbWUsdWUuaXNMb2dnZWRJbj8oKEsubG9nZ2VyfHx6KS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLFs0LHRoaXMubG9naW5DYWxsYmFjaygpXSk6WzMsM107Y2FzZSAyOnJldHVybiB2LnNl''@;'; put 'put ''bnQoKSxbMix7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTpHLHVzZXJMb25nTmFtZTpifV07Y2FzZSAzOnJldHVybls0LCgwLFkub3BlbldlYlBhZ2UpKHRoaXMucmVkaXJlY3RlZExvZ2luVXJsLCJTQVNMb2dvbiIse3dpZHRoOjUwMCxoZWlnaHQ6NjAwfSxoZSldO2Nhc2UgNDpyZXR1cm4oRD12''@;'; put 'put ''LnNlbnQoKSk/dGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/WzMsNl06WzQsKDAsVS52ZXJpZnlTYXNWaXlhTG9naW4pKEQpXTpbMix7aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9XTtjYXNlIDU6cmV0dXJuIE49di5zZW50KCksWzMsOF07''@;'; put 'put ''Y2FzZSA2OnJldHVybls0LCgwLFgudmVyaWZ5U2FzOUxvZ2luKShEKV07Y2FzZSA3Ok49di5zZW50KCksdi5sYWJlbD04O2Nhc2UgODpyZXR1cm4gSD1OLmlzTG9nZ2VkSW4sRC5jbG9zZSgpLEg/dGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhczk/WzMsMTBdOls0LHRoaXMucGVy''@;'; put 'put ''Zm9ybUNBU1NlY3VyaXR5Q2hlY2soKV06WzMsMTNdO2Nhc2UgOTp2LnNlbnQoKSx2LmxhYmVsPTEwO2Nhc2UgMTA6cmV0dXJuWzQsdGhpcy5mZXRjaFVzZXJOYW1lKCldO2Nhc2UgMTE6cmV0dXJuIGc9di5zZW50KCksQz1nLnVzZXJOYW1lLFM9Zy51c2VyTG9uZ05hbWUsWzQsdGhpcy5sb2dp''@;'; put 'put ''bkNhbGxiYWNrKCldO2Nhc2UgMTI6cmV0dXJuIHYuc2VudCgpLFsyLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOkMsdXNlckxvbmdOYW1lOlN9XTtjYXNlIDEzOnJldHVyblsyLHtpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn1dfX0pfSl9LG9lLnByb3RvdHlwZS5s''@;'; put 'put ''b2dJbj1mdW5jdGlvbihzZSxoZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHVlLGNlLGIsRCxILE4sZyxDO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdWU9e19zZXJ2aWNlOiJkZWZhdWx0Iix1c2Vy''@;'; put 'put ''bmFtZTpzZSxwYXNzd29yZDpoZX0sdGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIixbNCx0aGlzLmNoZWNrU2Vzc2lvbigpXTtjYXNlIDE6cmV0dXJuIGNlPVMuc2VudCgpLGI9Y2UubG9naW5Gb3JtLEQ9Y2UudXNlckxvbmdOYW1lLGNlLmlzTG9nZ2VkSW4/KChLLmxvZ2dl''@;'; put 'put ''cnx8eikubG9nKCJsb2dpbiB3YXMgbm90IGF0dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSxbNCx0aGlzLmxvZ2luQ2FsbGJhY2soKV0pOlszLDNdO2Nhc2UgMjpyZXR1cm4gUy5zZW50KCksdGhpcy51c2VyTmFtZT11ZS51c2VybmFtZSx0aGlzLnVzZXJMb25n''@;'; put 'put ''TmFtZT1ELFsyLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfV07Y2FzZSAzOnJldHVybls0LHRoaXMuc2VuZExvZ2luUmVxdWVzdChiLHVlKV07Y2FzZSA0OnJldHVybiBIPVMuc2VudCgpLChOPXRlKHRoaXMuc2Vy''@;'; put 'put ''dmVyVHlwZSxIKSk/WzMsOV06ZWUoSCk/WzQsdGhpcy5nZXRMb2dpbkZvcm0oSCldOlszLDddO2Nhc2UgNTpyZXR1cm4gZz1TLnNlbnQoKSxbNCx0aGlzLnNlbmRMb2dpblJlcXVlc3QoZyx1ZSldO2Nhc2UgNjpIPVMuc2VudCgpLFMubGFiZWw9NztjYXNlIDc6cmV0dXJuWzQsdGhpcy5jaGVj''@;'; put 'put ''a1Nlc3Npb24oKV07Y2FzZSA4OkM9Uy5zZW50KCksTj1DLmlzTG9nZ2VkSW4sdGhpcy51c2VyTG9uZ05hbWU9Qy51c2VyTG9uZ05hbWUsUy5sYWJlbD05O2Nhc2UgOTpyZXR1cm4gTj90aGlzLnNlcnZlclR5cGUhPT1FLlNlcnZlclR5cGUuU2FzOT9bMywxMV06WzQsdGhpcy5wZXJmb3JtQ0FT''@;'; put 'put ''U2VjdXJpdHlDaGVjaygpXTpbMywxMl07Y2FzZSAxMDpTLnNlbnQoKSxTLmxhYmVsPTExO2Nhc2UgMTE6dGhpcy5sb2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT11ZS51c2VybmFtZSxTLmxhYmVsPTEyO2Nhc2UgMTI6cmV0dXJuWzIse2lzTG9nZ2VkSW46Tix1c2VyTmFtZTp0aGlzLnVz''@;'; put 'put ''ZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX1dfX0pfSl9LG9lLnByb3RvdHlwZS5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGhl''@;'; put 'put ''KXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gc2U9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvU0FTU3RvcmVkUHJvY2Vzcy9qX3NwcmluZ19jYXNfc2VjdXJpdHlfY2hlY2siKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvU0FTTG9nb24vbG9naW4/c2VydmljZT0iLmNv''@;'; put 'put ''bmNhdChzZSksdm9pZCAwKS5jYXRjaChmdW5jdGlvbih1ZSl7aWYoISh1ZSBpbnN0YW5jZW9mIGouTm90Rm91bmRFcnJvcikpdGhyb3cgdWV9KV07Y2FzZSAxOnJldHVybiBoZS5zZW50KCksWzJdfX0pfSl9LG9lLnByb3RvdHlwZS5zZW5kTG9naW5SZXF1ZXN0PWZ1bmN0aW9uKHNlLGhlKXty''@;'; put 'put ''ZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyxiO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMucmVxdWVzdENsaWVu''@;'; put 'put ''dC5wb3N0KHRoaXMubG9naW5Vcmwse3VzZXJuYW1lOmhlLnVzZXJuYW1lLHBhc3N3b3JkOmhlLnBhc3N3b3JkfSx2b2lkIDApXTtjYXNlIDE6Y2FzZSAzOnJldHVyblsyLEQuc2VudCgpLnJlc3VsdF07Y2FzZSAyOmZvcihHIGluIHNlKWhlW0ddPXNlW0ddO3JldHVybiBiPSgwLFYuc2VyaWFs''@;'; put 'put ''aXplKShoZSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCxiLHZvaWQgMCwidGV4dC9wbGFpbiIseyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLEFjY2VwdDoiKi8qIn0pXX19KX0pfSxvZS5wcm90b3R5cGUuY2hlY2tT''@;'; put 'put ''ZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlLGhlLHVlLGNlLEc7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtjYXNlIDE6cmV0''@;'; put 'put ''dXJuIHNlPWIuc2VudCgpLHVlPXNlLnVzZXJOYW1lLGNlPXNlLnVzZXJMb25nTmFtZSxHPW51bGwsKGhlPXNlLmlzTG9nZ2VkSW4pP1szLDRdOls0LHRoaXMubG9nT3V0KCldO2Nhc2UgMjpyZXR1cm4gYi5zZW50KCksWzQsdGhpcy5nZXROZXdMb2dpbkZvcm0oKV07Y2FzZSAzOkc9Yi5zZW50''@;'; put 'put ''KCksYi5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMixQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46aGUsdXNlck5hbWU6dWUsdXNlckxvbmdOYW1lOmNlLGxvZ2luRm9ybTpHfSldfX0pfSl9LG9lLnByb3RvdHlwZS5nZXROZXdMb2dpbkZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgc2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXNqcz9bMix0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvIix2b2lkIDApLnRo''@;'; put 'put ''ZW4oZnVuY3Rpb24odWUpe3ZhciBjZSxiPW51bGw9PT0oY2U9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHVlLnJlc3VsdCkpfHx2b2lkIDA9PT1jZT92''@;'; put 'put ''b2lkIDA6Y2VbMV07YiYmKGRvY3VtZW50LmNvb2tpZT1iKX0pXTpbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9naW5VcmwucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIiksdm9pZCAwLCJ0ZXh0L3BsYWluIildO2Nhc2UgMTpyZXR1cm4gc2U9''@;'; put 'put ''aGUuc2VudCgpLnJlc3VsdCxbNCx0aGlzLmdldExvZ2luRm9ybShzZSldO2Nhc2UgMjpyZXR1cm5bMixoZS5zZW50KCldfX0pfSl9LG9lLnByb3RvdHlwZS5mZXRjaFVzZXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlLGhlLHVl''@;'; put 'put ''O3JldHVybiBrKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBzZT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsdGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9pZGVudGl0aWVzL3VzZXJzL0BjdXJyZW50VXNlciI6dGhpcy5z''@;'; put 'put ''ZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNTdG9yZWRQcm9jZXNzIjoiL1NBU2pzQXBpL3Nlc3Npb24iKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHNlLHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKGZ1bmN0aW9uKEcpe3JldHVybntyZXN1bHQ6ImF1dGhFcnIifX0p''@;'; put 'put ''XTtjYXNlIDE6cmV0dXJuIGhlPWNlLnNlbnQoKS5yZXN1bHQsKHVlPSJhdXRoRXJyIiE9PWhlKT9bMywzXTpbNCx0aGlzLmxvZ091dCgpXTtjYXNlIDI6cmV0dXJuIGNlLnNlbnQoKSxbMix7aXNMb2dnZWRJbjp1ZSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9XTtjYXNlIDM6cmV0dXJu''@;'; put 'put ''WzIse2lzTG9nZ2VkSW46dWUsdXNlck5hbWU6dGhpcy5leHRyYWN0VXNlck5hbWUoaGUpLHVzZXJMb25nTmFtZTp0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWUoaGUpfV19fSl9KX0sb2UucHJvdG90eXBlLmdldExvZ2luRm9ybT1mdW5jdGlvbihzZSl7dmFyIGhlPS88Zm9ybS4rYWN0aW9uPSIo''@;'; put 'put ''LiooTG9nb258bG9naW4pW14iXSopLio+Ly5leGVjKHNlKSx1ZT17fTtpZihoZSYmaGUubGVuZ3RoKXt0aGlzLnNldExvZ2luVXJsKGhlKTt2YXIgY2U9KHNlPXNlLnJlcGxhY2UoLzxpbnB1dC9nLCJcbjxpbnB1dCIpKS5tYXRjaCgvPGlucHV0LioiaGlkZGVuIltePl0qPi9nKTtjZSYmY2Uu''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihHKXt2YXIgYj1HLm1hdGNoKC9uYW1lPSIoW14iXSopIlxzdmFsdWU9IihbXiJdKikvKTtiJiZiLmxlbmd0aCYmKHVlW2JbMV1dPWJbMl0pfSl9cmV0dXJuIE9iamVjdC5rZXlzKHVlKS5sZW5ndGg/dWU6bnVsbH0sb2UucHJvdG90eXBlLmxvZ091dD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oc2Upe3JldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJDc3JmVG9rZW5zKCksWzIsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ291dFVybCx2b2lkIDApLnRo''@;'; put 'put ''ZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pXX0pfSl9LG9lfSgpO08uQXV0aE1hbmFnZXI9cTt2YXIgZWU9ZnVuY3Rpb24ob2Upe3JldHVybi9BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0aGUgc3lzdGVtIHdhcyB2ZXJpZnlpbmcgeW91ciBjcmVkZW50aWFscy4gUGxlYXNlIGVudGVyIHlvdXIg''@;'; put 'put ''Y3JlZGVudGlhbHMgYWdhaW4uL2dtLnRlc3Qob2UpfSx0ZT1mdW5jdGlvbihvZSxzZSl7cmV0dXJuIG9lPT09RS5TZXJ2ZXJUeXBlLlNhc2pzP3NlPy5sb2dnZWRpbjovWW91IGhhdmUgc2lnbmVkIGluL2dtLnRlc3Qoc2UpfX0sNTc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oWCxVKXtmdW5jdGlvbiBxKG9lKXt0cnl7dGUoWS5uZXh0KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiBlZShvZSl7dHJ5e3RlKFkudGhyb3co''@;'; put 'put ''b2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIHRlKG9lKXt2YXIgc2U7b2UuZG9uZT9YKG9lLnZhbHVlKTooc2U9b2UudmFsdWUsc2UgaW5zdGFuY2VvZiBCP3NlOm5ldyBCKGZ1bmN0aW9uKGhlKXtoZShzZSl9KSkudGhlbihxLGVlKX10ZSgoWT1ZLmFwcGx5KGosVnx8W10pKS5uZXh0''@;'; put 'put ''KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgQixZLFgsVSxxPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlhbMF0pdGhyb3cgWFsxXTtyZXR1cm4gWFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0OmVlKDApLHRocm93OmVl''@;'; put 'put ''KDEpLHJldHVybjplZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVTtmdW5jdGlvbiBlZSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lmKEIpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKEI9MSxZJiYoWD0yJnNlWzBdP1kucmV0dXJuOnNlWzBdP1kudGhyb3d8fCgoWD1ZLnJldHVybikmJlguY2FsbChZKSwwKTpZLm5leHQpJiYhKFg9WC5jYWxsKFksc2VbMV0pKS5kb25lKXJl''@;'; put 'put ''dHVybiBYO3N3aXRjaChZPTAsWCYmKHNlPVsyJnNlWzBdLFgudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2UgMTpYPXNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFk9c2VbMV0sc2U9WzBdO2NvbnRpbnVlO2Nh''@;'; put 'put ''c2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChYPShYPXEudHJ5cykubGVuZ3RoPjAmJlhbWC5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighWHx8c2VbMV0+WFswXSYmc2Vb''@;'; put 'put ''MV08WFszXSkpe3EubGFiZWw9c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFhbMV0pe3EubGFiZWw9WFsxXSxYPXNlO2JyZWFrfWlmKFgmJnEubGFiZWw8WFsyXSl7cS5sYWJlbD1YWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVhbMl0mJnEub3BzLnBvcCgpLHEudHJ5cy5wb3Ao''@;'; put 'put ''KTtjb250aW51ZX1zZT1WLmNhbGwoaixxKX1jYXRjaChoZSl7c2U9WzYsaGVdLFk9MH1maW5hbGx5e0I9WD0wfWlmKDUmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG9lXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8s''@;'; put 'put ''Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz12b2lkIDA7dmFyIEk9Uig5Nzc4KSxrPVIoOTAxNyksRT1SKDM5MDApO08uZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz1mdW5jdGlvbihqLFYsQil7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIFg7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihVKXtzd2l0Y2goVS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGoucG9zdCgiL1NBU2pzQXBpL2F1dGgvdG9rZW4iLFg9e2NsaWVudElkOlYsY29kZTpCfSx2b2lkIDApLnRoZW4oZnVuY3Rpb24ocSl7dmFyIGVlPXEucmVzdWx0O3Jl''@;'; put 'put ''dHVybnthY2Nlc3NfdG9rZW46ZWUuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjplZS5yZWZyZXNoVG9rZW59fSkuY2F0Y2goZnVuY3Rpb24ocSl7dGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKHEsKDAsay5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2VzcyB0b2tl''@;'; put 'put ''biIsImdldEFjY2Vzc1Rva2VuRm9yU2FzanMiLEUuU2VydmVyVHlwZS5TYXNqcywiL1NBU2pzQXBpL2F1dGgvdG9rZW4iLFgsVikpfSldO2Nhc2UgMTpyZXR1cm5bMixVLnNlbnQoKV19fSl9KX19LDM1Njk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg3NjQpLkJ1ZmZl''@;'; put 'put ''cixLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gbmV3KFh8fChYPVByb21pc2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiB0ZShoZSl7dHJ5e3NlKFUubmV4dChoZSkpfWNhdGNoKHVlKXtlZSh1ZSl9fWZ1bmN0aW9uIG9lKGhlKXt0cnl7c2UoVS50''@;'; put 'put ''aHJvdyhoZSkpfWNhdGNoKHVlKXtlZSh1ZSl9fWZ1bmN0aW9uIHNlKGhlKXt2YXIgdWU7aGUuZG9uZT9xKGhlLnZhbHVlKToodWU9aGUudmFsdWUsdWUgaW5zdGFuY2VvZiBYP3VlOm5ldyBYKGZ1bmN0aW9uKGNlKXtjZSh1ZSl9KSkudGhlbih0ZSxvZSl9c2UoKFU9VS5hcHBseShCLFl8fFtd''@;'; put 'put ''KSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEIsWSl7dmFyIFgsVSxxLGVlLHRlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnFbMF0pdGhyb3cgcVsxXTtyZXR1cm4gcVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBlZT17bmV4dDpvZSgw''@;'; put 'put ''KSx0aHJvdzpvZSgxKSxyZXR1cm46b2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihlZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxlZTtmdW5jdGlvbiBvZShzZSl7cmV0dXJuIGZ1bmN0aW9uKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe2lmKFgp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7dGU7KXRyeXtpZihYPTEsVSYmKHE9MiZ1ZVswXT9VLnJldHVybjp1ZVswXT9VLnRocm93fHwoKHE9VS5yZXR1cm4pJiZxLmNhbGwoVSksMCk6VS5uZXh0KSYmIShxPXEuY2FsbChVLHVl''@;'; put 'put ''WzFdKSkuZG9uZSlyZXR1cm4gcTtzd2l0Y2goVT0wLHEmJih1ZT1bMiZ1ZVswXSxxLnZhbHVlXSksdWVbMF0pe2Nhc2UgMDpjYXNlIDE6cT11ZTticmVhaztjYXNlIDQ6cmV0dXJuIHRlLmxhYmVsKysse3ZhbHVlOnVlWzFdLGRvbmU6ITF9O2Nhc2UgNTp0ZS5sYWJlbCsrLFU9dWVbMV0sdWU9''@;'; put 'put ''WzBdO2NvbnRpbnVlO2Nhc2UgNzp1ZT10ZS5vcHMucG9wKCksdGUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHE9KHE9dGUudHJ5cykubGVuZ3RoPjAmJnFbcS5sZW5ndGgtMV0pfHw2IT09dWVbMF0mJjIhPT11ZVswXSkpe3RlPTA7Y29udGludWV9aWYoMz09PXVlWzBdJiYo''@;'; put 'put ''IXF8fHVlWzFdPnFbMF0mJnVlWzFdPHFbM10pKXt0ZS5sYWJlbD11ZVsxXTticmVha31pZig2PT09dWVbMF0mJnRlLmxhYmVsPHFbMV0pe3RlLmxhYmVsPXFbMV0scT11ZTticmVha31pZihxJiZ0ZS5sYWJlbDxxWzJdKXt0ZS5sYWJlbD1xWzJdLHRlLm9wcy5wdXNoKHVlKTticmVha31xWzJd''@;'; put 'put ''JiZ0ZS5vcHMucG9wKCksdGUudHJ5cy5wb3AoKTtjb250aW51ZX11ZT1ZLmNhbGwoQix0ZSl9Y2F0Y2goY2Upe3VlPVs2LGNlXSxVPTB9ZmluYWxseXtYPXE9MH1pZig1JnVlWzBdKXRocm93IHVlWzFdO3JldHVybnt2YWx1ZTp1ZVswXT91ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtzZSxoZV0p''@;'; put 'put ''fX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEFjY2Vzc1Rva2VuRm9yVml5YT12b2lkIDA7dmFyIGs9UigzOTAwKSxFPVIoOTc3OCksaj1SKDEzOTUpLFY9Uig5MDE3KTtPLmdldEFjY2Vzc1Rva2VuRm9yVml5YT1mdW5jdGlvbihCLFks''@;'; put 'put ''WCxVKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZSx0ZSxvZSxzZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT12b2lkIDA9PT16P2J0b2EoWSsiOiIrWCk6ei5mcm9tKFkrIjoiK1gpLnRv''@;'; put 'put ''U3RyaW5nKCJiYXNlNjQiKSxlZT0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIix0ZT17QXV0aG9yaXphdGlvbjoiQmFzaWMgIitxLEFjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9LG9lPW5ldyBVUkxTZWFyY2hQYXJhbXMoe2dyYW50X3R5cGU6ImF1dGhvcml6YXRpb25fY29kZSIsY29kZTpVfSks''@;'; put 'put ''c2U9bmV3IFVSTFNlYXJjaFBhcmFtcyhvZSksWzQsQi5wb3N0KGVlLHNlLHZvaWQgMCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIix0ZSkudGhlbihmdW5jdGlvbih1ZSl7cmV0dXJuIHVlLnJlc3VsdH0pLmNhdGNoKGZ1bmN0aW9uKHVlKXt0aHJvdyB1ZSBpbnN0YW5jZW9m''@;'; put 'put ''IGouQ2VydGlmaWNhdGVFcnJvcj91ZTooMCxFLnByZWZpeE1lc3NhZ2UpKHVlLCgwLFYuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclZpeWEiLGsuU2VydmVyVHlwZS5TYXNWaXlhLGVlLG9lLHRlLFksWCkpfSld''@;'; put 'put ''O2Nhc2UgMTpyZXR1cm5bMixoZS5zZW50KCldfX0pfSl9fSw5MDE3OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhSZXNwb25zZT1PLmdldFRva2VuUmVxdWVz''@;'; put 'put ''dEVycm9yUHJlZml4PXZvaWQgMDt2YXIgej1SKDM5MDApLEs9ZnVuY3Rpb24oSSl7cmV0dXJuIlJlc3BvbnNlIGZyb20gIi5jb25jYXQoST09PXouU2VydmVyVHlwZS5TYXNWaXlhPyJWaXlhIjoiU2FzanMiLCIgaXMgYmVsb3cuIil9O08uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9ZnVu''@;'; put 'put ''Y3Rpb24oSSxrLEUsaixWLEIsWSxYKXt2YXIgVT1mdW5jdGlvbihlZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGVlLG51bGwsMil9LHE9WyJFcnJvciB3aGlsZSAiLmNvbmNhdChJLCIgZnJvbSAiKS5jb25jYXQoaiksIlRocm93biBieSB0aGUgQHNhc2pzL2FkYXB0ZXIgIi5jb25jYXQoaywi''@;'; put 'put ''IGZ1bmN0aW9uLiIpXTtyZXR1cm4gViYmKHEucHVzaCgiUGF5bG9hZDoiKSxxLnB1c2goVShWKSkpLEImJihxLnB1c2goIkhlYWRlcnM6IikscS5wdXNoKFUoQikpKSxZJiZxLnB1c2goIkNsaWVudElkOiAiLmNvbmNhdChZKSksWCYmcS5wdXNoKCJDbGllbnRTZWNyZXQ6ICIuY29uY2F0KFgp''@;'; put 'put ''KSxxLnB1c2goIiIpLHEucHVzaCgiIi5jb25jYXQoSyhFKSkpLHEucHVzaCgiIikscS5qb2luKCJcbiIpfSxPLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gSS5zcGxpdCgiIi5jb25jYXQoSyhrKSwiXG4iKSkucG9wKCl9fSw3MDQ6ZnVu''@;'; put 'put ''Y3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihlZSx0ZSl7ZnVuY3Rpb24gb2UodWUpe3RyeXtoZShxLm5leHQo''@;'; put 'put ''dWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBzZSh1ZSl7dHJ5e2hlKHEudGhyb3codWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBoZSh1ZSl7dmFyIGNlO3VlLmRvbmU/ZWUodWUudmFsdWUpOihjZT11ZS52YWx1ZSxjZSBpbnN0YW5jZW9mIFU/Y2U6bmV3IFUoZnVuY3Rp''@;'; put 'put ''b24oRyl7RyhjZSl9KSkudGhlbihvZSxzZSl9aGUoKHE9cS5hcHBseShZLFh8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFksWCl7dmFyIFUscSxlZSx0ZSxvZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZlZVswXSl0aHJvdyBlZVsx''@;'; put 'put ''XTtyZXR1cm4gZWVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdGU9e25leHQ6c2UoMCksdGhyb3c6c2UoMSkscmV0dXJuOnNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdGU7ZnVuY3Rpb24g''@;'; put 'put ''c2UoaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtpZihVKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO29lOyl0cnl7aWYoVT0xLHEmJihlZT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhyb3d8''@;'; put 'put ''fCgoZWU9cS5yZXR1cm4pJiZlZS5jYWxsKHEpLDApOnEubmV4dCkmJiEoZWU9ZWUuY2FsbChxLGNlWzFdKSkuZG9uZSlyZXR1cm4gZWU7c3dpdGNoKHE9MCxlZSYmKGNlPVsyJmNlWzBdLGVlLnZhbHVlXSksY2VbMF0pe2Nhc2UgMDpjYXNlIDE6ZWU9Y2U7YnJlYWs7Y2FzZSA0OnJldHVybiBv''@;'; put 'put ''ZS5sYWJlbCsrLHt2YWx1ZTpjZVsxXSxkb25lOiExfTtjYXNlIDU6b2UubGFiZWwrKyxxPWNlWzFdLGNlPVswXTtjb250aW51ZTtjYXNlIDc6Y2U9b2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChlZT0oZWU9b2UudHJ5cykubGVuZ3RoPjAmJmVlW2Vl''@;'; put 'put ''Lmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9PWNlWzBdKSl7b2U9MDtjb250aW51ZX1pZigzPT09Y2VbMF0mJighZWV8fGNlWzFdPmVlWzBdJiZjZVsxXTxlZVszXSkpe29lLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVswXSYmb2UubGFiZWw8ZWVbMV0pe29lLmxhYmVsPWVlWzFdLGVl''@;'; put 'put ''PWNlO2JyZWFrfWlmKGVlJiZvZS5sYWJlbDxlZVsyXSl7b2UubGFiZWw9ZWVbMl0sb2Uub3BzLnB1c2goY2UpO2JyZWFrfWVlWzJdJiZvZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZX1jZT1YLmNhbGwoWSxvZSl9Y2F0Y2goRyl7Y2U9WzYsR10scT0wfWZpbmFsbHl7VT1lZT0w''@;'; put 'put ''fWlmKDUmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJue3ZhbHVlOmNlWzBdP2NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW2hlLHVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0VG9rZW5zPXZvaWQgMDt2YXIgRT1SKDY3OTkpLGo9Uigz''@;'; put 'put ''OTAwKSxWPVIoMzY2KSxCPVIoMjQ5KTtPLmdldFRva2Vucz1mdW5jdGlvbihZLFgsVSl7cmV0dXJuIHZvaWQgMD09PVUmJihVPWouU2VydmVyVHlwZS5TYXNWaXlhKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlLHRlLG9lLHNlLHVlLGNlO3JldHVybiBrKHRoaXMs''@;'; put 'put ''ZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDppZihxPXoubG9nZ2VyfHxLLHRlPVgucmVmcmVzaF90b2tlbixvZT1YLmNsaWVudCxzZT1YLnNlY3JldCwhKDAsRS5pc0FjY2Vzc1Rva2VuRXhwaXJpbmcpKGVlPVguYWNjZXNzX3Rva2VuKSYmISgwLEUuaXNSZWZyZXNoVG9rZW5F''@;'; put 'put ''eHBpcmluZykodGUpKXJldHVyblszLDVdO2lmKCgwLEUuaGFzVG9rZW5FeHBpcmVkKSh0ZSkpdGhyb3cgcS5lcnJvcigiVW5hYmxlIHRvIG9idGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQuIiksbmV3IEVycm9yKCJVbmFibGUgdG8gb2J0YWlu''@;'; put 'put ''IG5ldyBhY2Nlc3MgdG9rZW4uIFlvdXIgcmVmcmVzaCB0b2tlbiBoYXMgZXhwaXJlZC4iKTtyZXR1cm4gcS5pbmZvKCJSZWZyZXNoaW5nIGFjY2VzcyBhbmQgcmVmcmVzaCB0b2tlbnMuIiksVSE9PWouU2VydmVyVHlwZS5TYXNWaXlhP1szLDJdOls0LCgwLFYucmVmcmVzaFRva2Vuc0ZvclZp''@;'; put 'put ''eWEpKFksb2Usc2UsdGUpXTtjYXNlIDE6cmV0dXJuIGNlPUcuc2VudCgpLFszLDRdO2Nhc2UgMjpyZXR1cm5bNCwoMCxCLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykoWSx0ZSldO2Nhc2UgMzpjZT1HLnNlbnQoKSxHLmxhYmVsPTQ7Y2FzZSA0OmVlPSh1ZT1jZSkuYWNjZXNzX3Rva2VuLHRlPXVl''@;'; put 'put ''LnJlZnJlc2hfdG9rZW4sRy5sYWJlbD01O2Nhc2UgNTpyZXR1cm5bMix7YWNjZXNzX3Rva2VuOmVlLHJlZnJlc2hfdG9rZW46dGUsY2xpZW50Om9lLHNlY3JldDpzZX1dfX0pfSl9fSwxNTI3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJp''@;'; put 'put ''bmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxlKXx8KFY9e2Vu''@;'; put 'put ''dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaixWKX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3Io''@;'; put 'put ''dmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMjg1MSksTyksSyhSKDkwOTcpLE8pLEsoUig5MTY2KSxP''@;'; put 'put ''KX0sOTA5NzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD12b2lkIDAsTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD1mdW5jdGlvbihSKXtyZXR1cm4vPGZvcm0uK2Fj''@;'; put 'put ''dGlvbj0iKC4qTG9nb25cL29hdXRoXC9hdXRob3JpemVbXiJdKikuKj4vZ20udGVzdChSKX19LDkxNjY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNMb2dJblJlcXVpcmVkPXZvaWQgMCxPLmlzTG9nSW5S''@;'; put 'put ''ZXF1aXJlZD1mdW5jdGlvbihSKXtyZXR1cm4vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29uKXwobG9naW4pW14iXSopLio+L2dtLnRlc3QoUil9fSw1NDE4OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEUsaixWLEIpe3Jl''@;'; put 'put ''dHVybiBuZXcoVnx8KFY9UHJvbWlzZSkpKGZ1bmN0aW9uKFksWCl7ZnVuY3Rpb24gVSh0ZSl7dHJ5e2VlKEIubmV4dCh0ZSkpfWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gcSh0ZSl7dHJ5e2VlKEIudGhyb3codGUpKX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIGVlKHRlKXt2YXIgb2U7''@;'; put 'put ''dGUuZG9uZT9ZKHRlLnZhbHVlKToob2U9dGUudmFsdWUsb2UgaW5zdGFuY2VvZiBWP29lOm5ldyBWKGZ1bmN0aW9uKHNlKXtzZShvZSl9KSkudGhlbihVLHEpfWVlKChCPUIuYXBwbHkoRSxqfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihFLGop''@;'; put 'put ''e3ZhciBWLEIsWSxYLFU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWVswXSl0aHJvdyBZWzFdO3JldHVybiBZWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFg9e25leHQ6cSgwKSx0aHJvdzpxKDEpLHJldHVybjpxKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWFtT''@;'; put 'put ''eW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxYO2Z1bmN0aW9uIHEoZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtpZihWKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1U7''@;'; put 'put ''KXRyeXtpZihWPTEsQiYmKFk9MiZvZVswXT9CLnJldHVybjpvZVswXT9CLnRocm93fHwoKFk9Qi5yZXR1cm4pJiZZLmNhbGwoQiksMCk6Qi5uZXh0KSYmIShZPVkuY2FsbChCLG9lWzFdKSkuZG9uZSlyZXR1cm4gWTtzd2l0Y2goQj0wLFkmJihvZT1bMiZvZVswXSxZLnZhbHVlXSksb2VbMF0p''@;'; put 'put ''e2Nhc2UgMDpjYXNlIDE6WT1vZTticmVhaztjYXNlIDQ6cmV0dXJuIFUubGFiZWwrKyx7dmFsdWU6b2VbMV0sZG9uZTohMX07Y2FzZSA1OlUubGFiZWwrKyxCPW9lWzFdLG9lPVswXTtjb250aW51ZTtjYXNlIDc6b2U9VS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6''@;'; put 'put ''aWYoISgoWT0oWT1VLnRyeXMpLmxlbmd0aD4wJiZZW1kubGVuZ3RoLTFdKXx8NiE9PW9lWzBdJiYyIT09b2VbMF0pKXtVPTA7Y29udGludWV9aWYoMz09PW9lWzBdJiYoIVl8fG9lWzFdPllbMF0mJm9lWzFdPFlbM10pKXtVLmxhYmVsPW9lWzFdO2JyZWFrfWlmKDY9PT1vZVswXSYmVS5sYWJl''@;'; put 'put ''bDxZWzFdKXtVLmxhYmVsPVlbMV0sWT1vZTticmVha31pZihZJiZVLmxhYmVsPFlbMl0pe1UubGFiZWw9WVsyXSxVLm9wcy5wdXNoKG9lKTticmVha31ZWzJdJiZVLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWV9b2U9ai5jYWxsKEUsVSl9Y2F0Y2goc2Upe29lPVs2LHNlXSxCPTB9''@;'; put 'put ''ZmluYWxseXtWPVk9MH1pZig1Jm9lWzBdKXRocm93IG9lWzFdO3JldHVybnt2YWx1ZTpvZVswXT9vZVsxXTp2b2lkIDAsZG9uZTohMH19KFtlZSx0ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm9wZW5XZWJQYWdlPXZvaWQgMDt2YXIg''@;'; put 'put ''ST1SKDEyMTApLGs9e3dpZHRoOjUwMCxoZWlnaHQ6NjAwfTtPLm9wZW5XZWJQYWdlPWZ1bmN0aW9uKEUsaixWLEIpe3JldHVybiB2b2lkIDA9PT1qJiYoaj0iIiksdm9pZCAwPT09ViYmKFY9aykseih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWSxYLFUscSxlZTtyZXR1cm4g''@;'; put 'put ''Syh0aGlzLGZ1bmN0aW9uKHRlKXtzd2l0Y2godGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gWT1WLndpZHRoLFg9Vi5oZWlnaHQsVT1zY3JlZW4ud2lkdGgvMi1ZLzIscT1zY3JlZW4uaGVpZ2h0LzItWC8yLChlZT13aW5kb3cub3BlbihFLGosInRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9''@;'; put 'put ''MCx3aWR0aD0iLmNvbmNhdChZLCIsaGVpZ2h0PSIpLmNvbmNhdChYLCIsbGVmdD0iKS5jb25jYXQoVSwiLHRvcD0iKS5jb25jYXQocSkpKT9bMywyXTpbNCwoQj8/SS5vcGVuTG9naW5Qcm9tcHQpKCldO2Nhc2UgMTpyZXR1cm5bMix0ZS5zZW50KCk/d2luZG93Lm9wZW4oRSxqLCJ0b29sYmFy''@;'; put 'put ''PTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9Ii5jb25jYXQoWSwiLGhlaWdodD0iKS5jb25jYXQoWCwiLGxlZnQ9IikuY29uY2F0KFUsIix0b3A9IikuY29uY2F0KHEpKTpudWxsXTtjYXNlIDI6cmV0dXJuWzIsZWVdfX0pfSl9fSwyNDk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oWCxVKXtmdW5jdGlvbiBxKG9lKXt0cnl7dGUoWS5uZXh0KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiBlZShvZSl7dHJ5e3RlKFku''@;'; put 'put ''dGhyb3cob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIHRlKG9lKXt2YXIgc2U7b2UuZG9uZT9YKG9lLnZhbHVlKTooc2U9b2UudmFsdWUsc2UgaW5zdGFuY2VvZiBCP3NlOm5ldyBCKGZ1bmN0aW9uKGhlKXtoZShzZSl9KSkudGhlbihxLGVlKX10ZSgoWT1ZLmFwcGx5KGosVnx8W10p''@;'; put 'put ''KS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgQixZLFgsVSxxPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlhbMF0pdGhyb3cgWFsxXTtyZXR1cm4gWFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0OmVlKDApLHRo''@;'; put 'put ''cm93OmVlKDEpLHJldHVybjplZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVTtmdW5jdGlvbiBlZSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lmKEIpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKEI9MSxZJiYoWD0yJnNlWzBdP1kucmV0dXJuOnNlWzBdP1kudGhyb3d8fCgoWD1ZLnJldHVybikmJlguY2FsbChZKSwwKTpZLm5leHQpJiYhKFg9WC5jYWxsKFksc2VbMV0pKS5k''@;'; put 'put ''b25lKXJldHVybiBYO3N3aXRjaChZPTAsWCYmKHNlPVsyJnNlWzBdLFgudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2UgMTpYPXNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFk9c2VbMV0sc2U9WzBdO2NvbnRp''@;'; put 'put ''bnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChYPShYPXEudHJ5cykubGVuZ3RoPjAmJlhbWC5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighWHx8c2VbMV0+WFsw''@;'; put 'put ''XSYmc2VbMV08WFszXSkpe3EubGFiZWw9c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFhbMV0pe3EubGFiZWw9WFsxXSxYPXNlO2JyZWFrfWlmKFgmJnEubGFiZWw8WFsyXSl7cS5sYWJlbD1YWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVhbMl0mJnEub3BzLnBvcCgpLHEudHJ5''@;'; put 'put ''cy5wb3AoKTtjb250aW51ZX1zZT1WLmNhbGwoaixxKX1jYXRjaChoZSl7c2U9WzYsaGVdLFk9MH1maW5hbGx5e0I9WD0wfWlmKDUmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG9lXSl9fX07T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucmVmcmVzaFRva2Vuc0ZvclNhc2pzPXZvaWQgMDt2YXIgST1SKDk3NzgpLGs9Uig5MDE3KSxFPVIoMzkwMCk7Ty5yZWZyZXNoVG9rZW5zRm9yU2FzanM9ZnVuY3Rpb24oaixWKXtyZXR1cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsai5wb3N0KCIvU0FTanNBcGkvYXV0aC9yZWZyZXNoIix2b2lkIDAsdm9pZCAwLHZvaWQgMCx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIrVn0pLnRoZW4oZnVuY3Rpb24oVSl7''@;'; put 'put ''dmFyIHE9VS5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjpxLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46cS5yZWZyZXNoVG9rZW59fSkuY2F0Y2goZnVuY3Rpb24oVSl7dGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKFUsKDAsay5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJl''@;'; put 'put ''c2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclNhc2pzIixFLlNlcnZlclR5cGUuU2FzanMsIi9TQVNqc0FwaS9hdXRoL3JlZnJlc2giKSl9KV07Y2FzZSAxOnJldHVyblsyLFguc2VudCgpXX19KX0pfX0sMzY2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0''@;'; put 'put ''KS5CdWZmZXIsSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24oZWUsdGUpe2Z1bmN0aW9uIG9lKHVlKXt0cnl7aGUocS5uZXh0KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gc2UodWUpe3Ry''@;'; put 'put ''eXtoZShxLnRocm93KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gaGUodWUpe3ZhciBjZTt1ZS5kb25lP2VlKHVlLnZhbHVlKTooY2U9dWUudmFsdWUsY2UgaW5zdGFuY2VvZiBVP2NlOm5ldyBVKGZ1bmN0aW9uKEcpe0coY2UpfSkpLnRoZW4ob2Usc2UpfWhlKChxPXEuYXBwbHko''@;'; put 'put ''WSxYfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihZLFgpe3ZhciBVLHEsZWUsdGUsb2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmZWVbMF0pdGhyb3cgZWVbMV07cmV0dXJuIGVlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHRl''@;'; put 'put ''PXtuZXh0OnNlKDApLHRocm93OnNlKDEpLHJldHVybjpzZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1bmN0aW9uIHNlKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe3JldHVybiBmdW5jdGlv''@;'; put 'put ''bihjZSl7aWYoVSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtvZTspdHJ5e2lmKFU9MSxxJiYoZWU9MiZjZVswXT9xLnJldHVybjpjZVswXT9xLnRocm93fHwoKGVlPXEucmV0dXJuKSYmZWUuY2FsbChxKSwwKTpxLm5leHQpJiYh''@;'; put 'put ''KGVlPWVlLmNhbGwocSxjZVsxXSkpLmRvbmUpcmV0dXJuIGVlO3N3aXRjaChxPTAsZWUmJihjZT1bMiZjZVswXSxlZS52YWx1ZV0pLGNlWzBdKXtjYXNlIDA6Y2FzZSAxOmVlPWNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gb2UubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1Om9l''@;'; put 'put ''LmxhYmVsKysscT1jZVsxXSxjZT1bMF07Y29udGludWU7Y2FzZSA3OmNlPW9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoZWU9KGVlPW9lLnRyeXMpLmxlbmd0aD4wJiZlZVtlZS5sZW5ndGgtMV0pfHw2IT09Y2VbMF0mJjIhPT1jZVswXSkpe29lPTA7''@;'; put 'put ''Y29udGludWV9aWYoMz09PWNlWzBdJiYoIWVlfHxjZVsxXT5lZVswXSYmY2VbMV08ZWVbM10pKXtvZS5sYWJlbD1jZVsxXTticmVha31pZig2PT09Y2VbMF0mJm9lLmxhYmVsPGVlWzFdKXtvZS5sYWJlbD1lZVsxXSxlZT1jZTticmVha31pZihlZSYmb2UubGFiZWw8ZWVbMl0pe29lLmxhYmVs''@;'; put 'put ''PWVlWzJdLG9lLm9wcy5wdXNoKGNlKTticmVha31lZVsyXSYmb2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWV9Y2U9WC5jYWxsKFksb2UpfWNhdGNoKEcpe2NlPVs2LEddLHE9MH1maW5hbGx5e1U9ZWU9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVsw''@;'; put 'put ''XT9jZVsxXTp2b2lkIDAsZG9uZTohMH19KFtoZSx1ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnJlZnJlc2hUb2tlbnNGb3JWaXlhPXZvaWQgMDt2YXIgaz1SKDM5MDApLEU9Uig5Nzc4KSxqPVIoNjIzMCksVj1SKDU5MjgpLEI9Uig5''@;'; put 'put ''MDE3KTtPLnJlZnJlc2hUb2tlbnNGb3JWaXlhPWZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlZSx0ZSxvZSxzZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDppZighKDAsVi5pc05v''@;'; put 'put ''ZGUpKCkpdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgJ3JlZnJlc2hUb2tlbnNGb3JWaXlhJyBjYW4gb25seSBiZSB1c2VkIGJ5IE5vZGUuIik7cmV0dXJuIGVlPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLHRlPXZvaWQgMD09PXo/YnRvYShYKyI6IitVKTp6LmZyb20oWCsiOiIrVSkudG9TdHJp''@;'; put 'put ''bmcoImJhc2U2NCIpLG9lPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiK3RlfSwoc2U9bmV3IGopLmFwcGVuZCgiZ3JhbnRfdHlwZSIsInJlZnJlc2hfdG9rZW4iKSxzZS5hcHBlbmQoInJlZnJlc2hfdG9rZW4iLHEpLFs0LFkucG9zdChlZSxzZSx2b2lkIDAsIm11bHRpcGFydC9mb3JtLWRhdGE7''@;'; put 'put ''IGJvdW5kYXJ5PSIrc2UuX2JvdW5kYXJ5LG9lKS50aGVuKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUucmVzdWx0fSkuY2F0Y2goZnVuY3Rpb24odWUpe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKSh1ZSwoMCxCLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMi''@;'; put 'put ''LCJyZWZyZXNoVG9rZW5zRm9yVml5YSIsay5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZWUsc2Usb2UsWCxVKSl9KV07Y2FzZSAxOnJldHVyblsyLGhlLnNlbnQoKV19fSl9KX19LDQ1ODI6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rp''@;'; put 'put ''b24oayxFLGosVil7cmV0dXJuIG5ldyhqfHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oQixZKXtmdW5jdGlvbiBYKGVlKXt0cnl7cShWLm5leHQoZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIFUoZWUpe3RyeXtxKFYudGhyb3coZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIHEo''@;'; put 'put ''ZWUpe3ZhciB0ZTtlZS5kb25lP0IoZWUudmFsdWUpOih0ZT1lZS52YWx1ZSx0ZSBpbnN0YW5jZW9mIGo/dGU6bmV3IGooZnVuY3Rpb24ob2Upe29lKHRlKX0pKS50aGVuKFgsVSl9cSgoVj1WLmFwcGx5KGssRXx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVu''@;'; put 'put ''Y3Rpb24oayxFKXt2YXIgaixWLEIsWSxYPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkJbMF0pdGhyb3cgQlsxXTtyZXR1cm4gQlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBZPXtuZXh0OlUoMCksdGhyb3c6VSgxKSxyZXR1cm46VSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5''@;'; put 'put ''bWJvbCYmKFlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWTtmdW5jdGlvbiBVKHEpe3JldHVybiBmdW5jdGlvbihlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtpZihqKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4i''@;'; put 'put ''KTtmb3IoO1g7KXRyeXtpZihqPTEsViYmKEI9MiZ0ZVswXT9WLnJldHVybjp0ZVswXT9WLnRocm93fHwoKEI9Vi5yZXR1cm4pJiZCLmNhbGwoViksMCk6Vi5uZXh0KSYmIShCPUIuY2FsbChWLHRlWzFdKSkuZG9uZSlyZXR1cm4gQjtzd2l0Y2goVj0wLEImJih0ZT1bMiZ0ZVswXSxCLnZhbHVl''@;'; put 'put ''XSksdGVbMF0pe2Nhc2UgMDpjYXNlIDE6Qj10ZTticmVhaztjYXNlIDQ6cmV0dXJuIFgubGFiZWwrKyx7dmFsdWU6dGVbMV0sZG9uZTohMX07Y2FzZSA1OlgubGFiZWwrKyxWPXRlWzFdLHRlPVswXTtjb250aW51ZTtjYXNlIDc6dGU9WC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRpbnVl''@;'; put 'put ''O2RlZmF1bHQ6aWYoISgoQj0oQj1YLnRyeXMpLmxlbmd0aD4wJiZCW0IubGVuZ3RoLTFdKXx8NiE9PXRlWzBdJiYyIT09dGVbMF0pKXtYPTA7Y29udGludWV9aWYoMz09PXRlWzBdJiYoIUJ8fHRlWzFdPkJbMF0mJnRlWzFdPEJbM10pKXtYLmxhYmVsPXRlWzFdO2JyZWFrfWlmKDY9PT10ZVsw''@;'; put 'put ''XSYmWC5sYWJlbDxCWzFdKXtYLmxhYmVsPUJbMV0sQj10ZTticmVha31pZihCJiZYLmxhYmVsPEJbMl0pe1gubGFiZWw9QlsyXSxYLm9wcy5wdXNoKHRlKTticmVha31CWzJdJiZYLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWV9dGU9RS5jYWxsKGssWCl9Y2F0Y2gob2Upe3RlPVs2''@;'; put 'put ''LG9lXSxWPTB9ZmluYWxseXtqPUI9MH1pZig1JnRlWzBdKXRocm93IHRlWzFdO3JldHVybnt2YWx1ZTp0ZVswXT90ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtxLGVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udmVyaWZ5U2FzOUxvZ2lu''@;'; put 'put ''PXZvaWQgMDt2YXIgST1SKDU5MjgpO08udmVyaWZ5U2FzOUxvZ2luPWZ1bmN0aW9uKGspe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBFLGosVjtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKEIpe3N3aXRjaChCLmxhYmVsKXtjYXNlIDA6RT0hMSxqPW5ldyBEYXRl''@;'; put 'put ''LFY9MCxCLmxhYmVsPTE7Y2FzZSAxOnJldHVybls0LCgwLEkuZGVsYXkpKDFlMyldO2Nhc2UgMjppZihCLnNlbnQoKSxrLmNsb3NlZClyZXR1cm5bMyw0XTtFPWsud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIikmJmsud2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJU''@;'; put 'put ''ZXh0LmluY2x1ZGVzKCJZb3UgaGF2ZSBzaWduZWQgaW4uIiksVj0oKG5ldyBEYXRlKS52YWx1ZU9mKCktai52YWx1ZU9mKCkpLzFlMyxCLmxhYmVsPTM7Y2FzZSAzOmlmKCFFJiZWPDMwMClyZXR1cm5bMywxXTtCLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyLHtpc0xvZ2dlZEluOkV9XX19KX0p''@;'; put 'put ''fX0sNjU0NzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihrLEUsaixWKXtyZXR1cm4gbmV3KGp8fChqPVByb21pc2UpKShmdW5jdGlvbihCLFkpe2Z1bmN0aW9uIFgoZWUpe3RyeXtxKFYubmV4dChlZSkpfWNhdGNoKHRl''@;'; put 'put ''KXtZKHRlKX19ZnVuY3Rpb24gVShlZSl7dHJ5e3EoVi50aHJvdyhlZSkpfWNhdGNoKHRlKXtZKHRlKX19ZnVuY3Rpb24gcShlZSl7dmFyIHRlO2VlLmRvbmU/QihlZS52YWx1ZSk6KHRlPWVlLnZhbHVlLHRlIGluc3RhbmNlb2Ygaj90ZTpuZXcgaihmdW5jdGlvbihvZSl7b2UodGUpfSkpLnRo''@;'; put 'put ''ZW4oWCxVKX1xKChWPVYuYXBwbHkoayxFfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihrLEUpe3ZhciBqLFYsQixZLFg9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmQlswXSl0aHJvdyBCWzFdO3JldHVybiBCWzFdfSx0cnlzOltdLG9w''@;'; put 'put ''czpbXX07cmV0dXJuIFk9e25leHQ6VSgwKSx0aHJvdzpVKDEpLHJldHVybjpVKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxZO2Z1bmN0aW9uIFUocSl7cmV0dXJuIGZ1bmN0aW9uKGVlKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24odGUpe2lmKGopdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7WDspdHJ5e2lmKGo9MSxWJiYoQj0yJnRlWzBdP1YucmV0dXJuOnRlWzBdP1YudGhyb3d8fCgoQj1WLnJldHVybikmJkIuY2FsbChWKSwwKTpWLm5leHQp''@;'; put 'put ''JiYhKEI9Qi5jYWxsKFYsdGVbMV0pKS5kb25lKXJldHVybiBCO3N3aXRjaChWPTAsQiYmKHRlPVsyJnRlWzBdLEIudmFsdWVdKSx0ZVswXSl7Y2FzZSAwOmNhc2UgMTpCPXRlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gWC5sYWJlbCsrLHt2YWx1ZTp0ZVsxXSxkb25lOiExfTtjYXNlIDU6WC5sYWJl''@;'; put 'put ''bCsrLFY9dGVbMV0sdGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp0ZT1YLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChCPShCPVgudHJ5cykubGVuZ3RoPjAmJkJbQi5sZW5ndGgtMV0pfHw2IT09dGVbMF0mJjIhPT10ZVswXSkpe1g9MDtjb250aW51ZX1pZigz''@;'; put 'put ''PT09dGVbMF0mJighQnx8dGVbMV0+QlswXSYmdGVbMV08QlszXSkpe1gubGFiZWw9dGVbMV07YnJlYWt9aWYoNj09PXRlWzBdJiZYLmxhYmVsPEJbMV0pe1gubGFiZWw9QlsxXSxCPXRlO2JyZWFrfWlmKEImJlgubGFiZWw8QlsyXSl7WC5sYWJlbD1CWzJdLFgub3BzLnB1c2godGUpO2JyZWFr''@;'; put 'put ''fUJbMl0mJlgub3BzLnBvcCgpLFgudHJ5cy5wb3AoKTtjb250aW51ZX10ZT1FLmNhbGwoayxYKX1jYXRjaChvZSl7dGU9WzYsb2VdLFY9MH1maW5hbGx5e2o9Qj0wfWlmKDUmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJue3ZhbHVlOnRlWzBdP3RlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3EsZWVd''@;'; put 'put ''KX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc0xvZ2dlZEluU0FTVklZQT1PLnZlcmlmeVNhc1ZpeWFMb2dpbj12b2lkIDA7dmFyIEk9Uig1OTI4KTtPLnZlcmlmeVNhc1ZpeWFMb2dpbj1mdW5jdGlvbihrKXt2YXIgRSxqO3JldHVybiB6''@;'; put 'put ''KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBWLEIsWSxYO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDpWPSExLEI9bmV3IERhdGUsWT0wLFUubGFiZWw9MTtjYXNlIDE6cmV0dXJuWzQsKDAsSS5kZWxheSkoMWUzKV07Y2FzZSAyOmlm''@;'; put 'put ''KFUuc2VudCgpLGsuY2xvc2VkKXJldHVyblszLDRdO1Y9KDAsTy5pc0xvZ2dlZEluU0FTVklZQSkoKSxZPSgobmV3IERhdGUpLnZhbHVlT2YoKS1CLnZhbHVlT2YoKSkvMWUzLFUubGFiZWw9MztjYXNlIDM6aWYoIVYmJlk8MzAwKXJldHVyblszLDFdO1UubGFiZWw9NDtjYXNlIDQ6WD0hMSxC''@;'; put 'put ''PW5ldyBEYXRlLFUubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzQsKDAsSS5kZWxheSkoMWUzKV07Y2FzZSA2OmlmKFUuc2VudCgpLGsuY2xvc2VkKXJldHVyblszLDhdO1g9ay53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKXx8KG51bGw9PT0oaj1udWxsPT09KEU9ay53''@;'; put 'put ''aW5kb3cuZG9jdW1lbnQuYm9keSl8fHZvaWQgMD09PUU/dm9pZCAwOkUuaW5uZXJUZXh0KXx8dm9pZCAwPT09aj92b2lkIDA6ai5pbmNsdWRlcygiWW91IGhhdmUgc2lnbmVkIGluLiIpKSxZPSgobmV3IERhdGUpLnZhbHVlT2YoKS1CLnZhbHVlT2YoKSkvMWUzLFUubGFiZWw9NztjYXNlIDc6''@;'; put 'put ''aWYoIVgmJlk8MzAwKXJldHVyblszLDVdO1UubGFiZWw9ODtjYXNlIDg6cmV0dXJuWzIse2lzTG9nZ2VkSW46ViYmWH1dfX0pfSl9LE8uaXNMb2dnZWRJblNBU1ZJWUE9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJDdXJyZW50LVVzZXIiKSYmZG9jdW1lbnQu''@;'; put 'put ''Y29va2llLmluY2x1ZGVzKCJ1c2VySWQiKX19LDQwMzc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPXZvaWQgMDt2YXIgej1SKDI0MDIpLEs9Uig1OTI4KTtPLmdl''@;'; put 'put ''bmVyYXRlRmlsZVVwbG9hZEZvcm09ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gaylpZihBcnJheS5pc0FycmF5KGtbRV0pKXt2YXIgaj1FLFY9KDAsei5jb252ZXJ0VG9DU1YpKGssRSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVYpdGhyb3cgbmV3IEVycm9yKCJUaGUg''@;'; put 'put ''bWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKCgwLEsuaXNOb2RlKSgpKUkuYXBwZW5kKGosVix7ZmlsZW5hbWU6IiIuY29uY2F0KGosIi5jc3YiKSxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pO2Vsc2V7dmFyIEI9''@;'; put 'put ''bmV3IEJsb2IoW1ZdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7SS5hcHBlbmQoaixCLCIiLmNvbmNhdChqLCIuY3N2IikpfX1yZXR1cm4gSX19LDIxNzA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5n''@;'; put 'put ''ZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT12b2lkIDA7dmFyIHo9UigyNDAyKSxLPVIoNDc5OSk7Ty5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT1mdW5jdGlvbihJLGspe3ZhciBFPVtdLGo9e30sVj0wO2Zvcih2YXIgQiBpbiBrKXtWKyssKDAsei5pc0Zvcm1hdHNUYWJsZSkoQil8fEUucHVzaChC''@;'; put 'put ''KTt2YXIgWT0oMCx6LmNvbnZlcnRUb0NTVikoayxCKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09WSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7WS5sZW5ndGg+MTZlMz8o''@;'; put 'put ''MCxLLnNwbGl0Q2h1bmtzKShZKS5tYXAoZnVuY3Rpb24oWCl7SS5hcHBlbmQoInNhc2pzIi5jb25jYXQoViwiZGF0YSIpLFgpfSk6alsic2FzanMiLmNvbmNhdChWLCJkYXRhIildPVl9cmV0dXJuIGouc2FzanNfdGFibGVzPUUuam9pbigiICIpLHtmb3JtRGF0YTpJLHJlcXVlc3RQYXJhbXM6''@;'; put 'put ''an19fSwzNjA3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGssRSxqLFYpe3ZvaWQgMD09PVYmJihWPWopO3ZhciBCPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRSxq''@;'; put 'put ''KTtCJiYhKCJnZXQiaW4gQj8hRS5fX2VzTW9kdWxlOkIud3JpdGFibGV8fEIuY29uZmlndXJhYmxlKXx8KEI9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVbal19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssVixCKX06ZnVuY3Rpb24oayxFLGosVil7dm9pZCAwPT09''@;'; put 'put ''ViYmKFY9aiksa1tWXT1FW2pdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oayxFKXtmb3IodmFyIGogaW4gaykiZGVmYXVsdCI9PT1qfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxqKXx8eihFLGssail9O09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgST1SKDU5NTYpO0soUigxMjMwKSxPKSxLKFIoMTM5NSksTyksSyhSKDk4MjEpLE8pLEsoUig4MzA2KSxPKSxLKFIoMzQ2NyksTyksSyhSKDM2MDIpLE8pLE8uZGVmYXVsdD1JLmRlZmF1bHR9LDE1NzA6ZnVuY3Rpb24oTSxPLFIpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihCLFkpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihYLFUpe1guX19wcm90b19fPVV9fHxmdW5jdGlvbihYLFUp''@;'; put 'put ''e2Zvcih2YXIgcSBpbiBVKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLHEpJiYoWFtxXT1VW3FdKX0pKEIsWSl9LGZ1bmN0aW9uKEIsWSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFkmJm51bGwhPT1ZKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFs''@;'; put 'put ''dWUgIitTdHJpbmcoWSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gWCgpe3RoaXMuY29uc3RydWN0b3I9Qn16KEIsWSksQi5wcm90b3R5cGU9bnVsbD09PVk/T2JqZWN0LmNyZWF0ZShZKTooWC5wcm90b3R5cGU9WS5wcm90b3R5cGUsbmV3IFgpfSksST10aGlz''@;'; put 'put ''JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQixZLFgsVSl7cmV0dXJuIG5ldyhYfHwoWD1Qcm9taXNlKSkoZnVuY3Rpb24ocSxlZSl7ZnVuY3Rpb24gdGUoaGUpe3RyeXtzZShVLm5leHQoaGUpKX1jYXRjaCh1ZSl7ZWUodWUpfX1mdW5jdGlvbiBvZShoZSl7dHJ5e3NlKFUudGhyb3coaGUp''@;'; put 'put ''KX1jYXRjaCh1ZSl7ZWUodWUpfX1mdW5jdGlvbiBzZShoZSl7dmFyIHVlO2hlLmRvbmU/cShoZS52YWx1ZSk6KHVlPWhlLnZhbHVlLHVlIGluc3RhbmNlb2YgWD91ZTpuZXcgWChmdW5jdGlvbihjZSl7Y2UodWUpfSkpLnRoZW4odGUsb2UpfXNlKChVPVUuYXBwbHkoQixZfHxbXSkpLm5leHQo''@;'; put 'put ''KSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihCLFkpe3ZhciBYLFUscSxlZSx0ZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZxWzBdKXRocm93IHFbMV07cmV0dXJuIHFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gZWU9e25leHQ6b2UoMCksdGhyb3c6''@;'; put 'put ''b2UoMSkscmV0dXJuOm9lKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoZWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksZWU7ZnVuY3Rpb24gb2Uoc2Upe3JldHVybiBmdW5jdGlvbihoZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtpZihYKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3RlOyl0cnl7aWYoWD0xLFUmJihxPTImdWVbMF0/VS5yZXR1cm46dWVbMF0/VS50aHJvd3x8KChxPVUucmV0dXJuKSYmcS5jYWxsKFUpLDApOlUubmV4dCkmJiEocT1xLmNhbGwoVSx1ZVsxXSkpLmRv''@;'; put 'put ''bmUpcmV0dXJuIHE7c3dpdGNoKFU9MCxxJiYodWU9WzImdWVbMF0scS52YWx1ZV0pLHVlWzBdKXtjYXNlIDA6Y2FzZSAxOnE9dWU7YnJlYWs7Y2FzZSA0OnJldHVybiB0ZS5sYWJlbCsrLHt2YWx1ZTp1ZVsxXSxkb25lOiExfTtjYXNlIDU6dGUubGFiZWwrKyxVPXVlWzFdLHVlPVswXTtjb250''@;'; put 'put ''aW51ZTtjYXNlIDc6dWU9dGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChxPShxPXRlLnRyeXMpLmxlbmd0aD4wJiZxW3EubGVuZ3RoLTFdKXx8NiE9PXVlWzBdJiYyIT09dWVbMF0pKXt0ZT0wO2NvbnRpbnVlfWlmKDM9PT11ZVswXSYmKCFxfHx1ZVsx''@;'; put 'put ''XT5xWzBdJiZ1ZVsxXTxxWzNdKSl7dGUubGFiZWw9dWVbMV07YnJlYWt9aWYoNj09PXVlWzBdJiZ0ZS5sYWJlbDxxWzFdKXt0ZS5sYWJlbD1xWzFdLHE9dWU7YnJlYWt9aWYocSYmdGUubGFiZWw8cVsyXSl7dGUubGFiZWw9cVsyXSx0ZS5vcHMucHVzaCh1ZSk7YnJlYWt9cVsyXSYmdGUub3Bz''@;'; put 'put ''LnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWV9dWU9WS5jYWxsKEIsdGUpfWNhdGNoKGNlKXt1ZT1bNixjZV0sVT0wfWZpbmFsbHl7WD1xPTB9aWYoNSZ1ZVswXSl0aHJvdyB1ZVsxXTtyZXR1cm57dmFsdWU6dWVbMF0/dWVbMV06dm9pZCAwLGRvbmU6ITB9fShbc2UsaGVdKX19fTtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Db21wdXRlSm9iRXhlY3V0b3I9dm9pZCAwO3ZhciBFPVIoMzkwMCksaj1SKDEzOTUpLFY9ZnVuY3Rpb24oQil7ZnVuY3Rpb24gWShYLFUpe3ZhciBxPUIuY2FsbCh0aGlzLFgsRS5TZXJ2ZXJUeXBlLlNhc1Zp''@;'; put 'put ''eWEpfHx0aGlzO3JldHVybiBxLnNhc1ZpeWFBcGlDbGllbnQ9VSxxfXJldHVybiBLKFksQiksWS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihYLFUscSxlZSx0ZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLGhlPXRoaXM7cmV0dXJuIGsodGhpcyxm''@;'; put 'put ''dW5jdGlvbih1ZSl7cmV0dXJuIG9lPWVlfHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oY2UsRyl7dmFyIGI7bnVsbD09PShiPWhlLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1ifHxiLmV4ZWN1dGVDb21wdXRlSm9iKFgs''@;'; put 'put ''cS5jb250ZXh0TmFtZSxxLmRlYnVnLFUsdGUsITAsITApLnRoZW4oZnVuY3Rpb24oRCl7aGUuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KEQsWCxxLmRlYnVnKSxjZShELnJlc3VsdCl9KS5jYXRjaChmdW5jdGlvbihEKXtyZXR1cm4gSShoZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIEg9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQgaW5zdGFuY2VvZiBqLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KEQsWCxxLmRlYnVnKSxHKG5l''@;'; put 'put ''dyBqLkVycm9yUmVzcG9uc2UoRD8ubWVzc2FnZSxEKSkpLEQgaW5zdGFuY2VvZiBqLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBILmV4ZWN1dGUoWCxVLHEsZWUpLnRoZW4oZnVuY3Rpb24oZyl7Y2UoZyl9LGZ1bmN0aW9u''@;'; put 'put ''KGcpe0coZyl9KX0pLFs0LG9lKCldKTpbMywyXTtjYXNlIDE6cmV0dXJuIE4uc2VudCgpLFszLDNdO2Nhc2UgMjpHKG5ldyBqLkVycm9yUmVzcG9uc2UoRD8ubWVzc2FnZSxEKSksTi5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMl19fSl9KX0pfSldfSl9KX0sWX0oUig2MTE4KS5CYXNlSm9iRXhl''@;'; put 'put ''Y3V0b3IpO08uQ29tcHV0ZUpvYkV4ZWN1dG9yPVZ9LDM0OTE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihZLFgpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5j''@;'; put 'put ''ZW9mIEFycmF5JiZmdW5jdGlvbihVLHEpe1UuX19wcm90b19fPXF9fHxmdW5jdGlvbihVLHEpe2Zvcih2YXIgZWUgaW4gcSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocSxlZSkmJihVW2VlXT1xW2VlXSl9KShZLFgpfSxmdW5jdGlvbihZLFgpe2lmKCJmdW5jdGlvbiIh''@;'; put 'put ''PXR5cGVvZiBYJiZudWxsIT09WCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKFgpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIFUoKXt0aGlzLmNvbnN0cnVjdG9yPVl9eihZLFgpLFkucHJvdG90eXBlPW51bGw9PT1Y''@;'; put 'put ''P09iamVjdC5jcmVhdGUoWCk6KFUucHJvdG90eXBlPVgucHJvdG90eXBlLG5ldyBVKX0pLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKGVlLHRlKXtmdW5jdGlvbiBvZSh1ZSl7dHJ5e2hlKHEubmV4''@;'; put 'put ''dCh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIHNlKHVlKXt0cnl7aGUocS50aHJvdyh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIGhlKHVlKXt2YXIgY2U7dWUuZG9uZT9lZSh1ZS52YWx1ZSk6KGNlPXVlLnZhbHVlLGNlIGluc3RhbmNlb2YgVT9jZTpuZXcgVShmdW5j''@;'; put 'put ''dGlvbihHKXtHKGNlKX0pKS50aGVuKG9lLHNlKX1oZSgocT1xLmFwcGx5KFksWHx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWSxYKXt2YXIgVSxxLGVlLHRlLG9lPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmVlWzBdKXRocm93IGVl''@;'; put 'put ''WzFdO3JldHVybiBlZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiB0ZT17bmV4dDpzZSgwKSx0aHJvdzpzZSgxKSxyZXR1cm46c2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih0ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0ZTtmdW5jdGlv''@;'; put 'put ''biBzZShoZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe2lmKFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7b2U7KXRyeXtpZihVPTEscSYmKGVlPTImY2VbMF0/cS5yZXR1cm46Y2VbMF0/cS50aHJv''@;'; put 'put ''d3x8KChlZT1xLnJldHVybikmJmVlLmNhbGwocSksMCk6cS5uZXh0KSYmIShlZT1lZS5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiBlZTtzd2l0Y2gocT0wLGVlJiYoY2U9WzImY2VbMF0sZWUudmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTplZT1jZTticmVhaztjYXNlIDQ6cmV0dXJu''@;'; put 'put ''IG9lLmxhYmVsKysse3ZhbHVlOmNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpvZS5sYWJlbCsrLHE9Y2VbMV0sY2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjZT1vZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGVlPShlZT1vZS50cnlzKS5sZW5ndGg+MCYmZWVb''@;'; put 'put ''ZWUubGVuZ3RoLTFdKXx8NiE9PWNlWzBdJiYyIT09Y2VbMF0pKXtvZT0wO2NvbnRpbnVlfWlmKDM9PT1jZVswXSYmKCFlZXx8Y2VbMV0+ZWVbMF0mJmNlWzFdPGVlWzNdKSl7b2UubGFiZWw9Y2VbMV07YnJlYWt9aWYoNj09PWNlWzBdJiZvZS5sYWJlbDxlZVsxXSl7b2UubGFiZWw9ZWVbMV0s''@;'; put 'put ''ZWU9Y2U7YnJlYWt9aWYoZWUmJm9lLmxhYmVsPGVlWzJdKXtvZS5sYWJlbD1lZVsyXSxvZS5vcHMucHVzaChjZSk7YnJlYWt9ZWVbMl0mJm9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVguY2FsbChZLG9lKX1jYXRjaChHKXtjZT1bNixHXSxxPTB9ZmluYWxseXtVPWVl''@;'; put 'put ''PTB9aWYoNSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm57dmFsdWU6Y2VbMF0/Y2VbMV06dm9pZCAwLGRvbmU6ITB9fShbaGUsdWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5GaWxlVXBsb2FkZXI9dm9pZCAwO3ZhciBFPVIoNTkyOCks''@;'; put 'put ''aj1SKDEzOTUpLFY9UigzOTAwKSxCPWZ1bmN0aW9uKFkpe2Z1bmN0aW9uIFgoVSxxLGVlLHRlKXt2YXIgb2U9WS5jYWxsKHRoaXMsVSxxKXx8dGhpcztyZXR1cm4gb2Uuam9ic1BhdGg9ZWUsb2UucmVxdWVzdENsaWVudD10ZSxvZX1yZXR1cm4gSyhYLFkpLFgucHJvdG90eXBlLmV4ZWN1dGU9''@;'; put 'put ''ZnVuY3Rpb24oVSxxLGVlLHRlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2Usc2UsaGUsdWUsY2UsRyxiLEQsSCxOLGcsQyxTLHA9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHcpe2lmKG9lPXEuZmlsZXMsc2U9cS5wYXJhbXMsaGU9dGV8fGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSwhb2U/Lmxlbmd0aCl0aHJvdyBuZXcgai5FcnJvclJlc3BvbnNlKCJBdCBsZWFzdCBvbmUgZmlsZSBtdXN0IGJlIHByb3ZpZGVkLiIpO2lmKCFVfHwiIj09PVUpdGhyb3cgbmV3IGouRXJyb3JSZXNwb25zZSgic2FzSm9iIG11c3QgYmUg''@;'; put 'put ''cHJvdmlkZWQuIik7Zm9yKGNlIGluIHVlPSIiLHNlKXNlLmhhc093blByb3BlcnR5KGNlKSYmKHVlKz0iJiIuY29uY2F0KGNlLCI9IikuY29uY2F0KHNlW2NlXSkpO2ZvcihHPWVlLmFwcExvYz9lZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStVLnJlcGxhY2UoL15cLy8sIiIpOlUsYj0i''@;'; put 'put ''Ii5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5jb25jYXQoIl9wcm9ncmFtPSIrRykuY29uY2F0KHVlKSxEPW5ldyBGb3JtRGF0YSxIPTAsTj1vZTtIPE4ubGVuZ3RoO0grKylELmFwcGVuZCgiZmlsZSIsKGc9TltIXSkuZmlsZSxnLmZpbGVOYW1lKTtyZXR1cm4oQz10aGlzLnJlcXVlc3RD''@;'; put 'put ''bGllbnQuZ2V0Q3NyZlRva2VuKCJmaWxlIikpJiZELmFwcGVuZCgiX2NzcmYiLEMudmFsdWUpLGVlLmRlYnVnJiZELmFwcGVuZCgiX2RlYnVnIiwiMTMxIiksZWUuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXNWaXlhJiZlZS5jb250ZXh0TmFtZSYmRC5hcHBlbmQoIl9jb250ZXh0bmFt''@;'; put 'put ''ZSIsZWUuY29udGV4dE5hbWUpLFM9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9LFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEosbmUpe3AucmVxdWVzdENsaWVudC5wb3N0KGIsRCx2b2lkIDAsImFwcGxpY2F0aW9u''@;'; put 'put ''L2pzb24iLFMpLnRoZW4oZnVuY3Rpb24oZGUpe3JldHVybiBJKHAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBmZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHhlKXtzd2l0Y2goeGUubGFiZWwpe2Nhc2UgMDppZih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChkZSxVLGVl''@;'; put 'put ''LmRlYnVnKSxmZT1kZS5yZXN1bHQsIWVlLmRlYnVnKXJldHVyblszLDZdO3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuWzMsMV07Y2FzZSBWLlNlcnZlclR5cGUuU2FzOTpyZXR1cm5bMywzXTtjYXNlIFYuU2VydmVyVHlwZS5TYXNqczpy''@;'; put 'put ''ZXR1cm5bMyw0XX1yZXR1cm5bMyw1XTtjYXNlIDE6cmV0dXJuWzQsKDAsRS5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShkZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LGVlLnNlcnZlclVybCldO2Nhc2UgMjpyZXR1cm4gZmU9eGUuc2VudCgpLFszLDVdO2Nhc2UgMzpyZXR1cm4gZmU9''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBkZS5yZXN1bHQ/KDAsRS5wYXJzZVdlYm91dFJlc3BvbnNlKShkZS5yZXN1bHQsYik6ZGUucmVzdWx0LFszLDVdO2Nhc2UgNDpyZXR1cm4gZmU9InN0cmluZyI9PXR5cGVvZiBkZS5yZXN1bHQ/KDAsRS5nZXRWYWxpZEpzb24pKGRlLnJlc3VsdCk6ZGUucmVzdWx0''@;'; put 'put ''LFszLDVdO2Nhc2UgNTpyZXR1cm5bMyw3XTtjYXNlIDY6ZmU9InN0cmluZyI9PXR5cGVvZiBkZS5yZXN1bHQ/KDAsRS5nZXRWYWxpZEpzb24pKGRlLnJlc3VsdCk6ZGUucmVzdWx0LHhlLmxhYmVsPTc7Y2FzZSA3OnJldHVybiBKKGZlKSxbMl19fSl9KX0pLmNhdGNoKGZ1bmN0aW9uKGRlKXty''@;'; put 'put ''ZXR1cm4gSShwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZmU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHhlKXtzd2l0Y2goeGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZGUgaW5zdGFuY2VvZiBqLkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVu''@;'; put 'put ''ZFJlcXVlc3QoZGUsVSxlZS5kZWJ1ZyksbmUobmV3IGouRXJyb3JSZXNwb25zZShkZT8ubWVzc2FnZSxkZSkpKSxkZSBpbnN0YW5jZW9mIGouTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIGZlLmV4ZWN1dGUoVSxxLGVlLHRl''@;'; put 'put ''KS50aGVuKGZ1bmN0aW9uKExlKXtKKExlKX0sZnVuY3Rpb24oTGUpe25lKExlKX0pfSksWzQsaGUoKV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4geGUuc2VudCgpLFszLDNdO2Nhc2UgMjpuZShuZXcgai5FcnJvclJlc3BvbnNlKCJGaWxlIHVwbG9hZCByZXF1ZXN0IGZhaWxlZC4iLGRlKSkseGUu''@;'; put 'put ''bGFiZWw9MztjYXNlIDM6cmV0dXJuWzJdfX0pfSl9KX0pXX0pfSl9LFh9KFIoNjExOCkuQmFzZUpvYkV4ZWN1dG9yKTtPLkZpbGVVcGxvYWRlcj1CfSw0NDQ2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oWCxV''@;'; put 'put ''KXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ocSxlZSl7cS5fX3Byb3RvX189ZWV9fHxmdW5jdGlvbihxLGVlKXtmb3IodmFyIHRlIGluIGVlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs''@;'; put 'put ''bChlZSx0ZSkmJihxW3RlXT1lZVt0ZV0pfSkoWCxVKX0sZnVuY3Rpb24oWCxVKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgVSYmbnVsbCE9PVUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhVKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwi''@;'; put 'put ''KTtmdW5jdGlvbiBxKCl7dGhpcy5jb25zdHJ1Y3Rvcj1YfXooWCxVKSxYLnByb3RvdHlwZT1udWxsPT09VT9PYmplY3QuY3JlYXRlKFUpOihxLnByb3RvdHlwZT1VLnByb3RvdHlwZSxuZXcgcSl9KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihYLFUscSxlZSl7cmV0dXJuIG5l''@;'; put 'put ''dyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24odGUsb2Upe2Z1bmN0aW9uIHNlKGNlKXt0cnl7dWUoZWUubmV4dChjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiBoZShjZSl7dHJ5e3VlKGVlLnRocm93KGNlKSl9Y2F0Y2goRyl7b2UoRyl9fWZ1bmN0aW9uIHVlKGNlKXt2YXIgRztjZS5k''@;'; put 'put ''b25lP3RlKGNlLnZhbHVlKTooRz1jZS52YWx1ZSxHIGluc3RhbmNlb2YgcT9HOm5ldyBxKGZ1bmN0aW9uKGIpe2IoRyl9KSkudGhlbihzZSxoZSl9dWUoKGVlPWVlLmFwcGx5KFgsVXx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWCxVKXt2YXIg''@;'; put 'put ''cSxlZSx0ZSxvZSxzZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm4gdGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gb2U9e25leHQ6aGUoMCksdGhyb3c6aGUoMSkscmV0dXJuOmhlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s''@;'; put 'put ''JiYob2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksb2U7ZnVuY3Rpb24gaGUodWUpe3JldHVybiBmdW5jdGlvbihjZSl7cmV0dXJuIGZ1bmN0aW9uKEcpe2lmKHEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIp''@;'; put 'put ''O2Zvcig7c2U7KXRyeXtpZihxPTEsZWUmJih0ZT0yJkdbMF0/ZWUucmV0dXJuOkdbMF0/ZWUudGhyb3d8fCgodGU9ZWUucmV0dXJuKSYmdGUuY2FsbChlZSksMCk6ZWUubmV4dCkmJiEodGU9dGUuY2FsbChlZSxHWzFdKSkuZG9uZSlyZXR1cm4gdGU7c3dpdGNoKGVlPTAsdGUmJihHPVsyJkdb''@;'; put 'put ''MF0sdGUudmFsdWVdKSxHWzBdKXtjYXNlIDA6Y2FzZSAxOnRlPUc7YnJlYWs7Y2FzZSA0OnJldHVybiBzZS5sYWJlbCsrLHt2YWx1ZTpHWzFdLGRvbmU6ITF9O2Nhc2UgNTpzZS5sYWJlbCsrLGVlPUdbMV0sRz1bMF07Y29udGludWU7Y2FzZSA3Okc9c2Uub3BzLnBvcCgpLHNlLnRyeXMucG9w''@;'; put 'put ''KCk7Y29udGludWU7ZGVmYXVsdDppZighKCh0ZT0odGU9c2UudHJ5cykubGVuZ3RoPjAmJnRlW3RlLmxlbmd0aC0xXSl8fDYhPT1HWzBdJiYyIT09R1swXSkpe3NlPTA7Y29udGludWV9aWYoMz09PUdbMF0mJighdGV8fEdbMV0+dGVbMF0mJkdbMV08dGVbM10pKXtzZS5sYWJlbD1HWzFdO2Jy''@;'; put 'put ''ZWFrfWlmKDY9PT1HWzBdJiZzZS5sYWJlbDx0ZVsxXSl7c2UubGFiZWw9dGVbMV0sdGU9RzticmVha31pZih0ZSYmc2UubGFiZWw8dGVbMl0pe3NlLmxhYmVsPXRlWzJdLHNlLm9wcy5wdXNoKEcpO2JyZWFrfXRlWzJdJiZzZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZX1HPVUu''@;'; put 'put ''Y2FsbChYLHNlKX1jYXRjaChiKXtHPVs2LGJdLGVlPTB9ZmluYWxseXtxPXRlPTB9aWYoNSZHWzBdKXRocm93IEdbMV07cmV0dXJue3ZhbHVlOkdbMF0/R1sxXTp2b2lkIDAsZG9uZTohMH19KFt1ZSxjZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6''@;'; put 'put ''ITB9KSxPLkplc0pvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgRT1SKDM5MDApLGo9UigxMzk1KSxWPVIoNjExOCksQj1SKDU5MjgpLFk9ZnVuY3Rpb24oWCl7ZnVuY3Rpb24gVShxLGVlKXt2YXIgdGU9WC5jYWxsKHRoaXMscSxFLlNlcnZlclR5cGUuU2FzVml5YSl8fHRoaXM7cmV0dXJuIHRlLnNh''@;'; put 'put ''c1ZpeWFBcGlDbGllbnQ9ZWUsdGV9cmV0dXJuIEsoVSxYKSxVLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKHEsZWUsdGUsb2Usc2UsaGUpe3JldHVybiB2b2lkIDA9PT1oZSYmKGhlPVtdKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxHPXRoaXM7cmV0dXJuIGso''@;'; put 'put ''dGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gdWU9b2V8fGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihELEgpe3ZhciBOO251bGw9PT0oTj1HLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1OfHxOLmV4ZWN1dGVKb2IocSx0ZS5j''@;'; put 'put ''b250ZXh0TmFtZSx0ZS5kZWJ1ZyxlZSxzZSkudGhlbihmdW5jdGlvbihnKXtHLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChnLHEsdGUuZGVidWcpO3ZhciBDPSgwLEIuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKGcsaGUpO0QoQyl9KS5jYXRjaChmdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gSShHLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQz10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZyBpbnN0YW5jZW9mIGouSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5k''@;'; put 'put ''UmVxdWVzdChnLHEsdGUuZGVidWcpLEgobmV3IGouRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKSksZyBpbnN0YW5jZW9mIGouTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIEMuZXhlY3V0ZShxLGVlLHRlLG9lLHNlLGhl''@;'; put 'put ''KS50aGVuKGZ1bmN0aW9uKHYpe0Qodil9LGZ1bmN0aW9uKHYpe0godil9KX0pLFs0LHVlKCldKTpbMywyXTtjYXNlIDE6cmV0dXJuIFMuc2VudCgpLFszLDNdO2Nhc2UgMjpIKG5ldyBqLkVycm9yUmVzcG9uc2UoZz8ubWVzc2FnZSxnKSksUy5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMl19fSl9''@;'; put 'put ''KX0pfSldfSl9KX0sVX0oVi5CYXNlSm9iRXhlY3V0b3IpO08uSmVzSm9iRXhlY3V0b3I9WX0sNjExODpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihFLGosVixCKXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5j''@;'; put 'put ''dGlvbihZLFgpe2Z1bmN0aW9uIFUodGUpe3RyeXtlZShCLm5leHQodGUpKX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIHEodGUpe3RyeXtlZShCLnRocm93KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlvbiBlZSh0ZSl7dmFyIG9lO3RlLmRvbmU/WSh0ZS52YWx1ZSk6KG9lPXRlLnZh''@;'; put 'put ''bHVlLG9lIGluc3RhbmNlb2YgVj9vZTpuZXcgVihmdW5jdGlvbihzZSl7c2Uob2UpfSkpLnRoZW4oVSxxKX1lZSgoQj1CLmFwcGx5KEUsanx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRSxqKXt2YXIgVixCLFksWCxVPXtsYWJlbDowLHNlbnQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtpZigxJllbMF0pdGhyb3cgWVsxXTtyZXR1cm4gWVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBYPXtuZXh0OnEoMCksdGhyb3c6cSgxKSxyZXR1cm46cSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzfSksWDtmdW5jdGlvbiBxKGVlKXtyZXR1cm4gZnVuY3Rpb24odGUpe3JldHVybiBmdW5jdGlvbihvZSl7aWYoVil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtVOyl0cnl7aWYoVj0xLEImJihZPTImb2VbMF0/Qi5y''@;'; put 'put ''ZXR1cm46b2VbMF0/Qi50aHJvd3x8KChZPUIucmV0dXJuKSYmWS5jYWxsKEIpLDApOkIubmV4dCkmJiEoWT1ZLmNhbGwoQixvZVsxXSkpLmRvbmUpcmV0dXJuIFk7c3dpdGNoKEI9MCxZJiYob2U9WzImb2VbMF0sWS52YWx1ZV0pLG9lWzBdKXtjYXNlIDA6Y2FzZSAxOlk9b2U7YnJlYWs7Y2Fz''@;'; put 'put ''ZSA0OnJldHVybiBVLmxhYmVsKysse3ZhbHVlOm9lWzFdLGRvbmU6ITF9O2Nhc2UgNTpVLmxhYmVsKyssQj1vZVsxXSxvZT1bMF07Y29udGludWU7Y2FzZSA3Om9lPVUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFk9KFk9VS50cnlzKS5sZW5ndGg+MCYm''@;'; put 'put ''WVtZLmxlbmd0aC0xXSl8fDYhPT1vZVswXSYmMiE9PW9lWzBdKSl7VT0wO2NvbnRpbnVlfWlmKDM9PT1vZVswXSYmKCFZfHxvZVsxXT5ZWzBdJiZvZVsxXTxZWzNdKSl7VS5sYWJlbD1vZVsxXTticmVha31pZig2PT09b2VbMF0mJlUubGFiZWw8WVsxXSl7VS5sYWJlbD1ZWzFdLFk9b2U7YnJl''@;'; put 'put ''YWt9aWYoWSYmVS5sYWJlbDxZWzJdKXtVLmxhYmVsPVlbMl0sVS5vcHMucHVzaChvZSk7YnJlYWt9WVsyXSYmVS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlfW9lPWouY2FsbChFLFUpfWNhdGNoKHNlKXtvZT1bNixzZV0sQj0wfWZpbmFsbHl7Vj1ZPTB9aWYoNSZvZVswXSl0aHJv''@;'; put 'put ''dyBvZVsxXTtyZXR1cm57dmFsdWU6b2VbMF0/b2VbMV06dm9pZCAwLGRvbmU6ITB9fShbZWUsdGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5CYXNlSm9iRXhlY3V0b3I9dm9pZCAwO3ZhciBJPVIoNTkyOCksaz1mdW5jdGlvbigpe2Z1''@;'; put 'put ''bmN0aW9uIEUoaixWKXt2YXIgQj10aGlzO3RoaXMuc2VydmVyVXJsPWosdGhpcy5zZXJ2ZXJUeXBlPVYsdGhpcy53YWl0aW5nUmVxdWVzdHM9W10sdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHM9ZnVuY3Rpb24oKXtyZXR1cm4geihCLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWT10''@;'; put 'put ''aGlzO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxJLmFzeW5jRm9yRWFjaCkodGhpcy53YWl0aW5nUmVxdWVzdHMsZnVuY3Rpb24oVSl7cmV0dXJuIHooWSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyxm''@;'; put 'put ''dW5jdGlvbihxKXtzd2l0Y2gocS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LFUoKV07Y2FzZSAxOnJldHVybiBxLnNlbnQoKSxbMl19fSl9KX0pXTtjYXNlIDE6cmV0dXJuIFguc2VudCgpLHRoaXMud2FpdGluZ1JlcXVlc3RzPVtdLFsyXX19KX0pfX1yZXR1cm4gRS5wcm90b3R5cGUuYXBwZW5k''@;'; put 'put ''V2FpdGluZ1JlcXVlc3Q9ZnVuY3Rpb24oail7dGhpcy53YWl0aW5nUmVxdWVzdHMucHVzaChqKX0sRS5wcm90b3R5cGUuZ2V0UmVxdWVzdFBhcmFtcz1mdW5jdGlvbihqKXt2YXIgVj17fTtyZXR1cm4gai5kZWJ1ZyYmKFYuX29taXR0ZXh0bG9nPSJmYWxzZSIsVi5fb21pdHNlc3Npb25yZXN1''@;'; put 'put ''bHRzPSJmYWxzZSIsVi5fZGVidWc9MTMxKSxWfSxFfSgpO08uQmFzZUpvYkV4ZWN1dG9yPWt9LDI2OTM6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihlZSx0ZSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlw''@;'; put 'put ''ZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKG9lLHNlKXtvZS5fX3Byb3RvX189c2V9fHxmdW5jdGlvbihvZSxzZSl7Zm9yKHZhciBoZSBpbiBzZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2UsaGUpJiYob2VbaGVdPXNlW2hlXSl9''@;'; put 'put ''KShlZSx0ZSl9LGZ1bmN0aW9uKGVlLHRlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGUmJm51bGwhPT10ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHRlKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvZSgpe3Ro''@;'; put 'put ''aXMuY29uc3RydWN0b3I9ZWV9eihlZSx0ZSksZWUucHJvdG90eXBlPW51bGw9PT10ZT9PYmplY3QuY3JlYXRlKHRlKToob2UucHJvdG90eXBlPXRlLnByb3RvdHlwZSxuZXcgb2UpfSksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1''@;'; put 'put ''bmN0aW9uKGVlKXtmb3IodmFyIHRlLG9lPTEsc2U9YXJndW1lbnRzLmxlbmd0aDtvZTxzZTtvZSsrKWZvcih2YXIgaGUgaW4gdGU9YXJndW1lbnRzW29lXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGUsaGUpJiYoZWVbaGVdPXRlW2hlXSk7cmV0dXJuIGVlfSxJLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZWUsdGUsb2Usc2Upe3JldHVybiBuZXcob2V8fChvZT1Qcm9taXNlKSkoZnVuY3Rpb24oaGUsdWUpe2Z1bmN0aW9uIGNlKEQpe3RyeXtiKHNlLm5leHQoRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5j''@;'; put 'put ''dGlvbiBHKEQpe3RyeXtiKHNlLnRocm93KEQpKX1jYXRjaChIKXt1ZShIKX19ZnVuY3Rpb24gYihEKXt2YXIgSDtELmRvbmU/aGUoRC52YWx1ZSk6KEg9RC52YWx1ZSxIIGluc3RhbmNlb2Ygb2U/SDpuZXcgb2UoZnVuY3Rpb24oTil7TihIKX0pKS50aGVuKGNlLEcpfWIoKHNlPXNlLmFwcGx5''@;'; put 'put ''KGVlLHRlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihlZSx0ZSl7dmFyIG9lLHNlLGhlLHVlLGNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmhlWzBdKXRocm93IGhlWzFdO3JldHVybiBoZVsxXX0sdHJ5czpbXSxvcHM6W119O3Jl''@;'; put 'put ''dHVybiB1ZT17bmV4dDpHKDApLHRocm93OkcoMSkscmV0dXJuOkcoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih1ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx1ZTtmdW5jdGlvbiBHKGIpe3JldHVybiBmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oSCl7aWYob2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7Y2U7KXRyeXtpZihvZT0xLHNlJiYoaGU9MiZIWzBdP3NlLnJldHVybjpIWzBdP3NlLnRocm93fHwoKGhlPXNlLnJldHVybikmJmhlLmNhbGwoc2UpLDApOnNlLm5l''@;'; put 'put ''eHQpJiYhKGhlPWhlLmNhbGwoc2UsSFsxXSkpLmRvbmUpcmV0dXJuIGhlO3N3aXRjaChzZT0wLGhlJiYoSD1bMiZIWzBdLGhlLnZhbHVlXSksSFswXSl7Y2FzZSAwOmNhc2UgMTpoZT1IO2JyZWFrO2Nhc2UgNDpyZXR1cm4gY2UubGFiZWwrKyx7dmFsdWU6SFsxXSxkb25lOiExfTtjYXNlIDU6''@;'; put 'put ''Y2UubGFiZWwrKyxzZT1IWzFdLEg9WzBdO2NvbnRpbnVlO2Nhc2UgNzpIPWNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaGU9KGhlPWNlLnRyeXMpLmxlbmd0aD4wJiZoZVtoZS5sZW5ndGgtMV0pfHw2IT09SFswXSYmMiE9PUhbMF0pKXtjZT0wO2Nv''@;'; put 'put ''bnRpbnVlfWlmKDM9PT1IWzBdJiYoIWhlfHxIWzFdPmhlWzBdJiZIWzFdPGhlWzNdKSl7Y2UubGFiZWw9SFsxXTticmVha31pZig2PT09SFswXSYmY2UubGFiZWw8aGVbMV0pe2NlLmxhYmVsPWhlWzFdLGhlPUg7YnJlYWt9aWYoaGUmJmNlLmxhYmVsPGhlWzJdKXtjZS5sYWJlbD1oZVsyXSxj''@;'; put 'put ''ZS5vcHMucHVzaChIKTticmVha31oZVsyXSYmY2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWV9SD10ZS5jYWxsKGVlLGNlKX1jYXRjaChOKXtIPVs2LE5dLHNlPTB9ZmluYWxseXtvZT1oZT0wfWlmKDUmSFswXSl0aHJvdyBIWzFdO3JldHVybnt2YWx1ZTpIWzBdP0hbMV06dm9p''@;'; put 'put ''ZCAwLGRvbmU6ITB9fShbYixEXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2FzOUpvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgaj1SKDYyMzApLFY9UigxMzk1KSxCPVIoNTkyOCksWT1SKDYxMTgpLFg9Uig3OTUpLFU9ZnVuY3Rpb24oZWUp''@;'; put 'put ''e2Z1bmN0aW9uIHRlKG9lLHNlLGhlLHVlLGNlKXt2YXIgRz1lZS5jYWxsKHRoaXMsb2Usc2UpfHx0aGlzO3JldHVybiBHLmpvYnNQYXRoPWhlLEcucmVxdWVzdENsaWVudD11ZSxHLnNhczlSZXF1ZXN0Q2xpZW50PW5ldyBYLlNhczlSZXF1ZXN0Q2xpZW50KG9lLGNlKSxHfXJldHVybiBLKHRl''@;'; put 'put ''LGVlKSx0ZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihvZSxzZSxoZSl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHVlLGNlLEcsYixELEgsTj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZih1ZT0o''@;'; put 'put ''MCxCLmlzUmVsYXRpdmVQYXRoKShvZSkmJmhlLmFwcExvYz9oZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStvZS5yZXBsYWNlKC9eXC8vLCIiKTpvZSxjZT0iIi5jb25jYXQoaGUuc2VydmVyVXJsKS5jb25jYXQodGhpcy5qb2JzUGF0aCwiPyIpLmNvbmNhdCgiX3Byb2dyYW09Iit1ZSks''@;'; put 'put ''Y2U9IiIuY29uY2F0KGNlKS5jb25jYXQoaGUudXNlcm5hbWUmJmhlLnBhc3N3b3JkPyImX3VzZXJuYW1lPSIraGUudXNlcm5hbWUrIiZfcGFzc3dvcmQ9IitoZS5wYXNzd29yZDoiIiksY2U9IiIuY29uY2F0KGNlKS5jb25jYXQoaGUuZGVidWc/IiZfZGVidWc9MTMxIjoiIiksRz1JKHt9LHRo''@;'; put 'put ''aXMuZ2V0UmVxdWVzdFBhcmFtcyhoZSkpLGI9bmV3IGosc2UpdHJ5e2I9cShiLHNlKX1jYXRjaChDKXtyZXR1cm5bMixQcm9taXNlLnJlamVjdChuZXcgVi5FcnJvclJlc3BvbnNlKEM/Lm1lc3NhZ2UsQykpXX1lbHNlIHNlPSIiO2ZvcihEIGluIEcpRy5oYXNPd25Qcm9wZXJ0eShEKSYmYi5h''@;'; put 'put ''cHBlbmQoRCxHW0RdKTtyZXR1cm5bNCx0aGlzLnNhczlSZXF1ZXN0Q2xpZW50LmxvZ2luKGhlLnVzZXJuYW1lLGhlLnBhc3N3b3JkLHRoaXMuam9ic1BhdGgpXTtjYXNlIDE6cmV0dXJuIGcuc2VudCgpLEg9c2UmJk9iamVjdC5rZXlzKHNlKS5sZW5ndGg/Im11bHRpcGFydC9mb3JtLWRhdGE7''@;'; put 'put ''IGJvdW5kYXJ5PSIrYi5fYm91bmRhcnk6InRleHQvcGxhaW4iLFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEMsUyl7cmV0dXJuIE4uc2FzOVJlcXVlc3RDbGllbnQucG9zdChjZSxiLHZvaWQgMCxILHtBY2NlcHQ6IiovKiIsQ29ubmVjdGlvbjoiS2VlcC1BbGl2ZSJ9KS50aGVuKGZ1bmN0aW9u''@;'; put 'put ''KHYpe04ucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHYsb2UsaGUuZGVidWcpLEModil9KS5jYXRjaChmdW5jdGlvbih2KXt2YXIgcD12O3YucmVzdWx0JiYiIiE9PXYucmVzdWx0P3A9di5yZXN1bHQ6di5tZXNzYWdlJiYocD12Lm1lc3NhZ2UpLE4ucmVxdWVzdENsaWVudC5hcHBlbmRS''@;'; put 'put ''ZXF1ZXN0KHAsb2UsaGUuZGVidWcpLFMobmV3IFYuRXJyb3JSZXNwb25zZSh2Py5tZXNzYWdlLHYpKX0pfSldfX0pfSl9LHRlLnByb3RvdHlwZS5nZXRSZXF1ZXN0UGFyYW1zPWZ1bmN0aW9uKG9lKXt2YXIgc2U9e307cmV0dXJuIG9lLmRlYnVnJiYoc2UuX2RlYnVnPTEzMSksc2V9LHRlfShZ''@;'; put 'put ''LkJhc2VKb2JFeGVjdXRvcik7Ty5TYXM5Sm9iRXhlY3V0b3I9VTt2YXIgcT1mdW5jdGlvbihlZSx0ZSl7Zm9yKHZhciBvZSBpbiB0ZSl7dmFyIHNlPW9lLGhlPSgwLEIuY29udmVydFRvQ1NWKSh0ZSxvZSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PWhlKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtlZS5hcHBlbmQoc2UsaGUse2ZpbGVuYW1lOiIiLmNvbmNhdChzZSwiLmNzdiIpLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9cmV0dXJuIGVlfX0sMTA2''@;'; put 'put ''NTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ob2Usc2Upe29lLl9f''@;'; put 'put ''cHJvdG9fXz1zZX18fGZ1bmN0aW9uKG9lLHNlKXtmb3IodmFyIGhlIGluIHNlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSxoZSkmJihvZVtoZV09c2VbaGVdKX0pKGVlLHRlKX0sZnVuY3Rpb24oZWUsdGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0ZSYmbnVsbCE9''@;'; put 'put ''PXRlKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodGUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG9lKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lZX16KGVlLHRlKSxlZS5wcm90b3R5cGU9bnVsbD09PXRlP09iamVjdC5j''@;'; put 'put ''cmVhdGUodGUpOihvZS5wcm90b3R5cGU9dGUucHJvdG90eXBlLG5ldyBvZSl9KSxJPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZWUpe2Zvcih2YXIgdGUsb2U9MSxzZT1hcmd1bWVudHMubGVuZ3RoO29lPHNlO29lKysp''@;'; put 'put ''Zm9yKHZhciBoZSBpbiB0ZT1hcmd1bWVudHNbb2VdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZSxoZSkmJihlZVtoZV09dGVbaGVdKTtyZXR1cm4gZWV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxrPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihlZSx0''@;'; put 'put ''ZSxvZSxzZSl7cmV0dXJuIG5ldyhvZXx8KG9lPVByb21pc2UpKShmdW5jdGlvbihoZSx1ZSl7ZnVuY3Rpb24gY2UoRCl7dHJ5e2Ioc2UubmV4dChEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIEcoRCl7dHJ5e2Ioc2UudGhyb3coRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBiKEQp''@;'; put 'put ''e3ZhciBIO0QuZG9uZT9oZShELnZhbHVlKTooSD1ELnZhbHVlLEggaW5zdGFuY2VvZiBvZT9IOm5ldyBvZShmdW5jdGlvbihOKXtOKEgpfSkpLnRoZW4oY2UsRyl9Yigoc2U9c2UuYXBwbHkoZWUsdGV8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9u''@;'; put 'put ''KGVlLHRlKXt2YXIgb2Usc2UsaGUsdWUsY2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJuIGhlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHVlPXtuZXh0OkcoMCksdGhyb3c6RygxKSxyZXR1cm46RygyKX0sImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIFN5bWJvbCYmKHVlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHVlO2Z1bmN0aW9uIEcoYil7cmV0dXJuIGZ1bmN0aW9uKEQpe3JldHVybiBmdW5jdGlvbihIKXtpZihvZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVj''@;'; put 'put ''dXRpbmcuIik7Zm9yKDtjZTspdHJ5e2lmKG9lPTEsc2UmJihoZT0yJkhbMF0/c2UucmV0dXJuOkhbMF0/c2UudGhyb3d8fCgoaGU9c2UucmV0dXJuKSYmaGUuY2FsbChzZSksMCk6c2UubmV4dCkmJiEoaGU9aGUuY2FsbChzZSxIWzFdKSkuZG9uZSlyZXR1cm4gaGU7c3dpdGNoKHNlPTAsaGUm''@;'; put 'put ''JihIPVsyJkhbMF0saGUudmFsdWVdKSxIWzBdKXtjYXNlIDA6Y2FzZSAxOmhlPUg7YnJlYWs7Y2FzZSA0OnJldHVybiBjZS5sYWJlbCsrLHt2YWx1ZTpIWzFdLGRvbmU6ITF9O2Nhc2UgNTpjZS5sYWJlbCsrLHNlPUhbMV0sSD1bMF07Y29udGludWU7Y2FzZSA3Okg9Y2Uub3BzLnBvcCgpLGNl''@;'; put 'put ''LnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChoZT0oaGU9Y2UudHJ5cykubGVuZ3RoPjAmJmhlW2hlLmxlbmd0aC0xXSl8fDYhPT1IWzBdJiYyIT09SFswXSkpe2NlPTA7Y29udGludWV9aWYoMz09PUhbMF0mJighaGV8fEhbMV0+aGVbMF0mJkhbMV08aGVbM10pKXtjZS5sYWJl''@;'; put 'put ''bD1IWzFdO2JyZWFrfWlmKDY9PT1IWzBdJiZjZS5sYWJlbDxoZVsxXSl7Y2UubGFiZWw9aGVbMV0saGU9SDticmVha31pZihoZSYmY2UubGFiZWw8aGVbMl0pe2NlLmxhYmVsPWhlWzJdLGNlLm9wcy5wdXNoKEgpO2JyZWFrfWhlWzJdJiZjZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250''@;'; put 'put ''aW51ZX1IPXRlLmNhbGwoZWUsY2UpfWNhdGNoKE4pe0g9WzYsTl0sc2U9MH1maW5hbGx5e29lPWhlPTB9aWYoNSZIWzBdKXRocm93IEhbMV07cmV0dXJue3ZhbHVlOkhbMF0/SFsxXTp2b2lkIDAsZG9uZTohMH19KFtiLERdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSksTy5TYXNqc0pvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgaj1SKDYyMzApLFY9UigzOTAwKSxCPVIoMTM5NSksWT1SKDQwMzcpLFg9Uig1OTI4KSxVPVIoNTkyOCkscT1mdW5jdGlvbihlZSl7ZnVuY3Rpb24gdGUob2Usc2UsaGUpe3ZhciB1ZT1lZS5jYWxsKHRoaXMsb2Us''@;'; put 'put ''Vi5TZXJ2ZXJUeXBlLlNhc2pzKXx8dGhpcztyZXR1cm4gdWUuam9ic1BhdGg9c2UsdWUucmVxdWVzdENsaWVudD1oZSx1ZX1yZXR1cm4gSyh0ZSxlZSksdGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2UsRyl7cmV0dXJuIHZvaWQgMD09PUcmJihHPVtdKSxrKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiLEQsSCxOLGcsQyxTLHA9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHcpe2lmKGI9dWUsRD0oMCxVLmlzUmVsYXRpdmVQYXRoKShvZSkmJmhlLmFwcExvYz9oZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStvZS5yZXBsYWNl''@;'; put 'put ''KC9eXC8vLCIiKTpvZSxIPSIiLmNvbmNhdChoZS5zZXJ2ZXJVcmwpLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNhdCgiX3Byb2dyYW09IitEKSxOPUkoe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKGhlKSksZz0oMCxYLmdldEZvcm1EYXRhKSgpLHNlKXRyeXtnPSgwLFkuZ2VuZXJh''@;'; put 'put ''dGVGaWxlVXBsb2FkRm9ybSkoZyxzZSl9Y2F0Y2goSil7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IEIuRXJyb3JSZXNwb25zZShKPy5tZXNzYWdlLEopKV19Zm9yKEMgaW4gTilOLmhhc093blByb3BlcnR5KEMpJiZnLmFwcGVuZChDLE5bQ10pO3JldHVybiBTPWcgaW5zdGFuY2VvZiBq''@;'; put 'put ''JiZ0eXBlb2YgRm9ybURhdGE+InUiPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLmNvbmNhdChnLmdldEJvdW5kYXJ5KCkpOnZvaWQgMCxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihKLG5lKXtwLnJlcXVlc3RDbGllbnQucG9zdChILGcsY2U/LmFjY2Vzc190b2tlbixTKS50aGVu''@;'; put 'put ''KGZ1bmN0aW9uKGRlKXtyZXR1cm4gayhwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZmUseGU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihMZSl7aWYoT2JqZWN0LmVudHJpZXMoZGUucmVzdWx0KS5sZW5ndGg8MSl0aHJvdyBuZXcgQi5Kb2JFeGVjdXRpb25FcnJvcigwLCJObyB3ZWJv''@;'; put 'put ''dXQgd2FzIHJldHVybmVkIGJ5IGpvYiAiLmNvbmNhdChELCIuICBQbGVhc2UgY2hlY2sgdGhlIFNBUyBsb2cgZm9yIG1vcmUgaW5mby4iKSxkZS5sb2cpO3JldHVybihmZT1kZS5yZXN1bHQpJiYic3RyaW5nIj09dHlwZW9mIGZlJiZmZS50cmltKCkmJihkZS5yZXN1bHQ9KDAsVS5nZXRWYWxp''@;'; put 'put ''ZEpzb24pKGZlKSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZGUsb2UsaGUuZGVidWcpLHhlPSgwLFUuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKGRlLEcpLEooeGUpLFsyXX0pfSl9KS5jYXRjaChmdW5jdGlvbihkZSl7cmV0dXJuIGsocCx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih4ZSl7c3dpdGNoKHhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGRlIGluc3RhbmNlb2YgQi5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGRlLG9lLGhlLmRlYnVn''@;'; put 'put ''KSxuZShuZXcgQi5FcnJvclJlc3BvbnNlKGRlPy5tZXNzYWdlLGRlKSkpLGRlIGluc3RhbmNlb2YgQi5Mb2dpblJlcXVpcmVkRXJyb3I/KHVlfHxuZShuZXcgQi5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3''@;'; put 'put ''aXRoIHZhbGlkIGNyZWRlbnRpYWxzLiIsZGUpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIGZlLmV4ZWN1dGUob2Usc2UsaGUsdWUsY2UsRykudGhlbihmdW5jdGlvbihMZSl7SihMZSl9LGZ1bmN0aW9uKExlKXtuZShMZSl9KX0pLGI/WzQsYigpXTpbMywy''@;'; put 'put ''XSk6WzMsM107Y2FzZSAxOnhlLnNlbnQoKSx4ZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw0XTtjYXNlIDM6bmUobmV3IEIuRXJyb3JSZXNwb25zZShkZT8ubWVzc2FnZSxkZSkpLHhlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSl9KV19KX0pfSx0ZX0oUig2MTE4KS5CYXNlSm9i''@;'; put 'put ''RXhlY3V0b3IpO08uU2FzanNKb2JFeGVjdXRvcj1xfSw2MDg0OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oZWUsdGUpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0''@;'; put 'put ''YW5jZW9mIEFycmF5JiZmdW5jdGlvbihvZSxzZSl7b2UuX19wcm90b19fPXNlfXx8ZnVuY3Rpb24ob2Usc2Upe2Zvcih2YXIgaGUgaW4gc2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlLGhlKSYmKG9lW2hlXT1zZVtoZV0pfSkoZWUsdGUpfSxmdW5jdGlvbihlZSx0''@;'; put 'put ''ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRlJiZudWxsIT09dGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0ZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gb2UoKXt0aGlzLmNvbnN0cnVjdG9yPWVlfXooZWUs''@;'; put 'put ''dGUpLGVlLnByb3RvdHlwZT1udWxsPT09dGU/T2JqZWN0LmNyZWF0ZSh0ZSk6KG9lLnByb3RvdHlwZT10ZS5wcm90b3R5cGUsbmV3IG9lKX0pLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlZSl7Zm9yKHZhciB0ZSxv''@;'; put 'put ''ZT0xLHNlPWFyZ3VtZW50cy5sZW5ndGg7b2U8c2U7b2UrKylmb3IodmFyIGhlIGluIHRlPWFyZ3VtZW50c1tvZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRlLGhlKSYmKGVlW2hlXT10ZVtoZV0pO3JldHVybiBlZX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9''@;'; put 'put ''dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGVlLHRlLG9lLHNlKXtyZXR1cm4gbmV3KG9lfHwob2U9UHJvbWlzZSkpKGZ1bmN0aW9uKGhlLHVlKXtmdW5jdGlvbiBjZShEKXt0cnl7YihzZS5uZXh0KEQpKX1jYXRjaChIKXt1ZShIKX19ZnVuY3Rpb24gRyhEKXt0cnl7YihzZS50aHJv''@;'; put 'put ''dyhEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIGIoRCl7dmFyIEg7RC5kb25lP2hlKEQudmFsdWUpOihIPUQudmFsdWUsSCBpbnN0YW5jZW9mIG9lP0g6bmV3IG9lKGZ1bmN0aW9uKE4pe04oSCl9KSkudGhlbihjZSxHKX1iKChzZT1zZS5hcHBseShlZSx0ZXx8W10pKS5uZXh0KCkpfSl9''@;'; put 'put ''LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZWUsdGUpe3ZhciBvZSxzZSxoZSx1ZSxjZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZoZVswXSl0aHJvdyBoZVsxXTtyZXR1cm4gaGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdWU9e25leHQ6RygwKSx0aHJv''@;'; put 'put ''dzpHKDEpLHJldHVybjpHKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdWU7ZnVuY3Rpb24gRyhiKXtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIGZ1bmN0aW9uKEgpe2lmKG9lKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2NlOyl0cnl7aWYob2U9MSxzZSYmKGhlPTImSFswXT9zZS5yZXR1cm46SFswXT9zZS50aHJvd3x8KChoZT1zZS5yZXR1cm4pJiZoZS5jYWxsKHNlKSwwKTpzZS5uZXh0KSYmIShoZT1oZS5jYWxsKHNlLEhb''@;'; put 'put ''MV0pKS5kb25lKXJldHVybiBoZTtzd2l0Y2goc2U9MCxoZSYmKEg9WzImSFswXSxoZS52YWx1ZV0pLEhbMF0pe2Nhc2UgMDpjYXNlIDE6aGU9SDticmVhaztjYXNlIDQ6cmV0dXJuIGNlLmxhYmVsKysse3ZhbHVlOkhbMV0sZG9uZTohMX07Y2FzZSA1OmNlLmxhYmVsKyssc2U9SFsxXSxIPVsw''@;'; put 'put ''XTtjb250aW51ZTtjYXNlIDc6SD1jZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGhlPShoZT1jZS50cnlzKS5sZW5ndGg+MCYmaGVbaGUubGVuZ3RoLTFdKXx8NiE9PUhbMF0mJjIhPT1IWzBdKSl7Y2U9MDtjb250aW51ZX1pZigzPT09SFswXSYmKCFo''@;'; put 'put ''ZXx8SFsxXT5oZVswXSYmSFsxXTxoZVszXSkpe2NlLmxhYmVsPUhbMV07YnJlYWt9aWYoNj09PUhbMF0mJmNlLmxhYmVsPGhlWzFdKXtjZS5sYWJlbD1oZVsxXSxoZT1IO2JyZWFrfWlmKGhlJiZjZS5sYWJlbDxoZVsyXSl7Y2UubGFiZWw9aGVbMl0sY2Uub3BzLnB1c2goSCk7YnJlYWt9aGVb''@;'; put 'put ''Ml0mJmNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2NvbnRpbnVlfUg9dGUuY2FsbChlZSxjZSl9Y2F0Y2goTil7SD1bNixOXSxzZT0wfWZpbmFsbHl7b2U9aGU9MH1pZig1JkhbMF0pdGhyb3cgSFsxXTtyZXR1cm57dmFsdWU6SFswXT9IWzFdOnZvaWQgMCxkb25lOiEwfX0oW2IsRF0pfX19''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLldlYkpvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgaj1SKDYyMzApLFY9UigzOTAwKSxCPVIoMTM5NSksWT1SKDQwMzcpLFg9UigyMTcwKSxVPVIoNTkyOCkscT1mdW5jdGlvbihlZSl7ZnVuY3Rpb24gdGUo''@;'; put 'put ''b2Usc2UsaGUsdWUsY2Upe3ZhciBHPWVlLmNhbGwodGhpcyxvZSxzZSl8fHRoaXM7cmV0dXJuIEcuam9ic1BhdGg9aGUsRy5yZXF1ZXN0Q2xpZW50PXVlLEcuc2FzVml5YUFwaUNsaWVudD1jZSxHfXJldHVybiBLKHRlLGVlKSx0ZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihvZSxzZSxo''@;'; put 'put ''ZSx1ZSxjZSxHKXtyZXR1cm4gdm9pZCAwPT09RyYmKEc9W10pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsRCxILE4sZyxDLFMsdixwLEosbmUsZGUseGU9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKExlKXtzd2l0Y2goTGUubGFiZWwpe2Nhc2UgMDppZihiPXVl''@;'; put 'put ''LEQ9KDAsVS5pc1JlbGF0aXZlUGF0aCkob2UpJiZoZS5hcHBMb2M/aGUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrb2UucmVwbGFjZSgvXlwvLywiIik6b2UsSD0iIi5jb25jYXQoaGUuc2VydmVyVXJsKS5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5jb25jYXQoIl9wcm9ncmFtPSIr''@;'; put 'put ''RCksaGUuc2VydmVyVHlwZSE9PVYuU2VydmVyVHlwZS5TYXNWaXlhKXJldHVyblszLDVdO049dm9pZCAwLExlLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBMZS50cnlzLnB1c2goWzEsMywsNF0pLFs0LHRoaXMuZ2V0Sm9iVXJpKG9lKV07Y2FzZSAyOnJldHVybiBOPUxlLnNlbnQoKSxbMyw0XTtj''@;'; put 'put ''YXNlIDM6cmV0dXJuIGc9TGUuc2VudCgpLFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEZlLE9lKXtyZXR1cm4gayh4ZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEJlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihXZSl7c3dpdGNoKFdlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGcg''@;'; put 'put ''aW5zdGFuY2VvZiBCLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBCZS5leGVjdXRlKG9lLHNlLGhlLHVlLGNlLEcpLnRoZW4oZnVuY3Rpb24oS2Upe0ZlKEtlKX0sZnVuY3Rpb24oS2Upe09lKEtlKX0pfSksYj9bNCxiKCld''@;'; put 'put ''OlszLDJdKTpbMywzXTtjYXNlIDE6V2Uuc2VudCgpLFdlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblszLDRdO2Nhc2UgMzpPZShuZXcgQi5FcnJvclJlc3BvbnNlKGc/Lm1lc3NhZ2UsZykpLFdlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSldO2Nhc2UgNDpIKz1OLmxlbmd0aD4wPyIm''@;'; put 'put ''X2pvYj0iK046IiIsTi5sZW5ndGg+MCYmKEg9KEgrPSImX2pvYj0iK04pLnJlcGxhY2UoIl9wcm9ncmFtPSIsIl9fcHJvZ3JhbT0iKSksSCs9aGUuY29udGV4dE5hbWUmJiEvXHMvLnRlc3QoaGUuY29udGV4dE5hbWUpPyImX2NvbnRleHRuYW1lPSIuY29uY2F0KGhlLmNvbnRleHROYW1lKToi''@;'; put 'put ''IixMZS5sYWJlbD01O2Nhc2UgNTppZihDPUkoe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKGhlKSksUz0oMCxVLmdldEZvcm1EYXRhKSgpLHNlKWlmKHY9SlNPTi5zdHJpbmdpZnkoc2UpLGhlLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzOXx8di5sZW5ndGg+NWU1fHx2LmluY2x1ZGVz''@;'; put 'put ''KCI7IikpdHJ5e1M9KDAsWS5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKShTLHNlKX1jYXRjaChGZSl7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IEIuRXJyb3JSZXNwb25zZShGZT8ubWVzc2FnZSxGZSkpXX1lbHNlIHRyeXtwPSgwLFguZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm0pKFMsc2Up''@;'; put 'put ''LEo9cC5yZXF1ZXN0UGFyYW1zLFM9cC5mb3JtRGF0YSxDPUkoSSh7fSxDKSxKKX1jYXRjaChGZSl7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IEIuRXJyb3JSZXNwb25zZShGZT8ubWVzc2FnZSxGZSkpXX1mb3IobmUgaW4gQylDLmhhc093blByb3BlcnR5KG5lKSYmUy5hcHBlbmQobmUs''@;'; put 'put ''Q1tuZV0pO3JldHVybiBkZT1TIGluc3RhbmNlb2YgaiYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij8ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Ii5jb25jYXQoUy5nZXRCb3VuZGFyeSgpKTp2b2lkIDAsWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oRmUsT2Upe3hlLnJlcXVlc3RDbGllbnQu''@;'; put 'put ''cG9zdChILFMsY2U/LmFjY2Vzc190b2tlbixkZSkudGhlbihmdW5jdGlvbihCZSl7cmV0dXJuIGsoeGUsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBXZSxLZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFllKXtzd2l0Y2goWWUubGFiZWwpe2Nhc2UgMDppZih0aGlzLnJlcXVlc3RDbGll''@;'; put 'put ''bnQuYXBwZW5kUmVxdWVzdChCZSxvZSxoZS5kZWJ1ZyksV2U9QmUucmVzdWx0LCFoZS5kZWJ1ZylyZXR1cm5bMyw0XTtzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIFYuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVyblszLDFdO2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuWzMsM119''@;'; put 'put ''cmV0dXJuWzMsNF07Y2FzZSAxOnJldHVybls0LCgwLFUucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZSkoQmUucmVzdWx0LHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNlcnZlclVybCldO2Nhc2UgMjpyZXR1cm4gV2U9WWUuc2VudCgpLFszLDRdO2Nhc2UgMzpyZXR1cm4gV2U9InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBCZS5yZXN1bHQ/KDAsVS5wYXJzZVdlYm91dFJlc3BvbnNlKShCZS5yZXN1bHQsSCk6QmUucmVzdWx0LFszLDRdO2Nhc2UgNDpyZXR1cm4gS2U9KDAsVS5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoe3Jlc3VsdDpXZSxsb2c6QmUubG9nfSxHKSxGZShLZSksWzJdfX0p''@;'; put 'put ''fSl9KS5jYXRjaChmdW5jdGlvbihCZSl7cmV0dXJuIGsoeGUsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBXZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oS2Upe3N3aXRjaChLZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBCZSBpbnN0YW5jZW9mIEIuSm9iRXhlY3V0aW9uRXJyb3Im''@;'; put 'put ''Jih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChCZSxvZSxoZS5kZWJ1ZyksT2UobmV3IEIuRXJyb3JSZXNwb25zZShCZT8ubWVzc2FnZSxCZSkpKSxCZSBpbnN0YW5jZW9mIEIuTG9naW5SZXF1aXJlZEVycm9yPyh1ZXx8T2UobmV3IEIuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBp''@;'; put 'put ''cyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLEJlKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBXZS5leGVjdXRlKG9lLHNlLGhlLHVlLGNlLEcpLnRoZW4oZnVuY3Rpb24o''@;'; put 'put ''WWUpe0ZlKFllKX0sZnVuY3Rpb24oWWUpe09lKFllKX0pfSksYj9bNCxiKCldOlszLDJdKTpbMywzXTtjYXNlIDE6S2Uuc2VudCgpLEtlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblszLDRdO2Nhc2UgMzpPZShuZXcgQi5FcnJvclJlc3BvbnNlKEJlPy5tZXNzYWdlLEJlKSksS2UubGFiZWw9NDtj''@;'; put 'put ''YXNlIDQ6cmV0dXJuWzJdfX0pfSl9KX0pXX19KX0pfSx0ZS5wcm90b3R5cGUuZ2V0Sm9iVXJpPWZ1bmN0aW9uKG9lKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgc2UsaGUsdWUsY2UsRyxiO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFi''@;'; put 'put ''ZWwpe2Nhc2UgMDppZighdGhpcy5zYXNWaXlhQXBpQ2xpZW50KXJldHVyblsyLCIiXTtpZihzZT0iIiwoMCxVLmlzUmVsYXRpdmVQYXRoKShvZSk/KGNlPW9lLnNwbGl0KCIvIiksaGU9Y2UubGVuZ3RoPjE/Y2VbMF06IiIsdWU9Y2UubGVuZ3RoPjE/Y2VbMV06IiIpOihjZT1vZS5zcGxpdCgi''@;'; put 'put ''LyIpLHVlPWNlLnBvcCgpfHwiIixoZT1jZS5qb2luKCIvIikpLCF1ZSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBuYW1lIGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Sm9ic0luRm9sZGVyKGhlKV07Y2FzZSAxOnJldHVybihH''@;'; put 'put ''PUQuc2VudCgpKSYmKGI9Ry5maW5kKGZ1bmN0aW9uKEgpe3JldHVybiBILm5hbWU9PT11ZSYmImpvYkRlZmluaXRpb24iPT09SC5jb250ZW50VHlwZX0pKSYmKHNlPWIudXJpKSxbMixzZV19fSl9KX0sdGV9KFIoNjExOCkuQmFzZUpvYkV4ZWN1dG9yKTtPLldlYkpvYkV4ZWN1dG9yPXF9LDgy''@;'; put 'put ''MTc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrLEUpO1YmJiEo''@;'; put 'put ''ImdldCJpbiBWPyFrLl9fZXNNb2R1bGU6Vi53cml0YWJsZXx8Vi5jb25maWd1cmFibGUpfHwoVj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1F''@;'; put 'put ''KSxJW2pdPWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEsoUigxNTcwKSxPKSxLKFIoMzQ5MSksTyksSyhSKDQ0NDYpLE8pLEsoUig2MTE4KSxPKSxLKFIoMjY5MyksTyksSyhSKDYwODQpLE8pLEsoUigxMDY1KSxPKX0sNDU4ODpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1S''@;'; put 'put ''KDUxMDgpLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih1ZSl7Zm9yKHZhciBjZSxHPTEsYj1hcmd1bWVudHMubGVuZ3RoO0c8YjtHKyspZm9yKHZhciBEIGluIGNlPWFyZ3VtZW50c1tHXSlPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoY2UsRCkmJih1ZVtEXT1jZVtEXSk7cmV0dXJuIHVlfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odWUsY2UsRyxiKXtyZXR1cm4gbmV3KEd8fChHPVByb21pc2UpKShmdW5jdGlvbihELEgpe2Z1''@;'; put 'put ''bmN0aW9uIE4oUyl7dHJ5e0MoYi5uZXh0KFMpKX1jYXRjaCh2KXtIKHYpfX1mdW5jdGlvbiBnKFMpe3RyeXtDKGIudGhyb3coUykpfWNhdGNoKHYpe0godil9fWZ1bmN0aW9uIEMoUyl7dmFyIHY7Uy5kb25lP0QoUy52YWx1ZSk6KHY9Uy52YWx1ZSx2IGluc3RhbmNlb2YgRz92Om5ldyBHKGZ1''@;'; put 'put ''bmN0aW9uKHApe3Aodil9KSkudGhlbihOLGcpfUMoKGI9Yi5hcHBseSh1ZSxjZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24odWUsY2Upe3ZhciBHLGIsRCxILE49e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmRFswXSl0aHJvdyBEWzFd''@;'; put 'put ''O3JldHVybiBEWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEg9e25leHQ6ZygwKSx0aHJvdzpnKDEpLHJldHVybjpnKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoSFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxIO2Z1bmN0aW9uIGcoQyl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKFMpe3JldHVybiBmdW5jdGlvbih2KXtpZihHKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO047KXRyeXtpZihHPTEsYiYmKEQ9MiZ2WzBdP2IucmV0dXJuOnZbMF0/Yi50aHJvd3x8KChEPWIucmV0dXJuKSYm''@;'; put 'put ''RC5jYWxsKGIpLDApOmIubmV4dCkmJiEoRD1ELmNhbGwoYix2WzFdKSkuZG9uZSlyZXR1cm4gRDtzd2l0Y2goYj0wLEQmJih2PVsyJnZbMF0sRC52YWx1ZV0pLHZbMF0pe2Nhc2UgMDpjYXNlIDE6RD12O2JyZWFrO2Nhc2UgNDpyZXR1cm4gTi5sYWJlbCsrLHt2YWx1ZTp2WzFdLGRvbmU6ITF9''@;'; put 'put ''O2Nhc2UgNTpOLmxhYmVsKyssYj12WzFdLHY9WzBdO2NvbnRpbnVlO2Nhc2UgNzp2PU4ub3BzLnBvcCgpLE4udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEQ9KEQ9Ti50cnlzKS5sZW5ndGg+MCYmRFtELmxlbmd0aC0xXSl8fDYhPT12WzBdJiYyIT09dlswXSkpe049MDtjb250''@;'; put 'put ''aW51ZX1pZigzPT09dlswXSYmKCFEfHx2WzFdPkRbMF0mJnZbMV08RFszXSkpe04ubGFiZWw9dlsxXTticmVha31pZig2PT09dlswXSYmTi5sYWJlbDxEWzFdKXtOLmxhYmVsPURbMV0sRD12O2JyZWFrfWlmKEQmJk4ubGFiZWw8RFsyXSl7Ti5sYWJlbD1EWzJdLE4ub3BzLnB1c2godik7YnJl''@;'; put 'put ''YWt9RFsyXSYmTi5vcHMucG9wKCksTi50cnlzLnBvcCgpO2NvbnRpbnVlfXY9Y2UuY2FsbCh1ZSxOKX1jYXRjaChwKXt2PVs2LHBdLGI9MH1maW5hbGx5e0c9RD0wfWlmKDUmdlswXSl0aHJvdyB2WzFdO3JldHVybnt2YWx1ZTp2WzBdP3ZbMV06dm9pZCAwLGRvbmU6ITB9fShbQyxTXSl9fX07''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udGhyb3dJZkVycm9yPU8uUmVxdWVzdENsaWVudD12b2lkIDA7dmFyIGo9Uig5NjY5KSxWPVIoODM3MyksQj1SKDE1MjcpLFk9UigxMzk1KSxYPVIoMjgxMyksVT1SKDk3NzgpLHE9Uig5NTI2KSxlZT1S''@;'; put 'put ''KDU5MjgpLHRlPVIoMTAwNSksb2U9Uig5NTM5KSxzZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHVlKGNlLEcsYixEKXt2YXIgSD10aGlzO3RoaXMuYmFzZVVybD1jZSx0aGlzLnJlcXVlc3RzPVtdLHRoaXMucmVxdWVzdHNMaW1pdD0xMCx0aGlzLnZlcmJvc2VNb2RlPSExLHRoaXMuY3NyZlRva2Vu''@;'; put 'put ''PXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmdldFJlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIEgucmVxdWVzdHN9LHRoaXMuY2xlYXJSZXF1ZXN0cz1mdW5jdGlvbigpe0gucmVxdWVzdHM9W119LHRoaXMuYXV0aG9yaXplPWZ1bmN0aW9uKE4pe3JldHVybiBrKEgsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbigpe3ZhciBnLEMsUyx2LHAsdyxKLG5lLGRlLGZlLHhlLExlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRmUpe3N3aXRjaChGZS5sYWJlbCl7Y2FzZSAwOmZvcihDPXt9LFM9Ti5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSwodj1kb2N1bWVudC5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPVMscD12LnF1ZXJ5U2VsZWN0b3IoIiNhcHBsaWNhdGlvbl9hdXRob3JpemF0aW9uIiksZz1wP3RoaXMuYmFzZVVybCtwLmdldEF0dHJpYnV0ZSgiYWN0aW9uIik6bnVsbCx3PXA/LnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0IiksSj0wLG5l''@;'; put 'put ''PXc7SjxuZS5sZW5ndGg7SisrKSJ1c2VyX29hdXRoX2FwcHJvdmFsIj09PShkZT1uZVtKXSkubmFtZSYmKGRlLnZhbHVlPSJ0cnVlIiksQ1tkZS5uYW1lXT1kZS52YWx1ZTtmb3IoTGUgaW4oZmU9T2JqZWN0LmtleXMoQykuZmluZChmdW5jdGlvbihPZSl7cmV0dXJuIE9lPy50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpLmluY2x1ZGVzKCJjc3JmIil9KSkmJih0aGlzLmNzcmZUb2tlbi52YWx1ZT1DW2ZlXSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lPXRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWV8fCJ4LWNzcmYtdG9rZW4iKSx4ZT1uZXcgRm9ybURhdGEsQylDLmhhc093blByb3BlcnR5KExlKSYmeGUu''@;'; put 'put ''YXBwZW5kKExlLENbTGVdKTtpZighZyl0aHJvdyBuZXcgRXJyb3IoIkF1dGggRm9ybSBVUkwgaXMgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuWzQsdGhpcy5odHRwQ2xpZW50LnBvc3QoZyx4ZSx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6IiovKiIsIkNvbnRlbnQt''@;'; put 'put ''VHlwZSI6InRleHQvcGxhaW4ifX0pLnRoZW4oZnVuY3Rpb24oT2Upe3JldHVybiBPZS5kYXRhfSkuY2F0Y2goZnVuY3Rpb24oT2Upeyh6LmxvZ2dlcnx8SykuZXJyb3IoT2UpfSldO2Nhc2UgMTpyZXR1cm5bMixGZS5zZW50KCldfX0pfSl9LHRoaXMucHJldHRpZnlTdHJpbmc9ZnVuY3Rpb24o''@;'; put 'put ''Til7cmV0dXJuKDAsb2UuaW5zcGVjdCkoTix7Y29sb3JzOiJibGVhY2hlZCIhPT1ILnZlcmJvc2VNb2RlfSl9LHRoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHk9ZnVuY3Rpb24oTil7aWYoIU4pcmV0dXJuIiI7dmFyIGc7aWYoInN0cmluZyI9PXR5cGVvZiBOKXRyeXtnPUpTT04ucGFyc2UoTil9''@;'; put 'put ''Y2F0Y2h7Zz1OfWVsc2UgZz1OO3ZhciBDPUgucHJldHRpZnlTdHJpbmcoZykuc3BsaXQoIlxuIik7cmV0dXJuIEMubGVuZ3RoPjUxJiYoQy5zcGxpY2UoNTApLEMucHVzaCgiLi4uIikpLEMuam9pbigiXG4iKX0sdGhpcy5kZWZhdWx0SW50ZXJjZXB0aW9uQ2FsbEJhY2s9ZnVuY3Rpb24oTil7''@;'; put 'put ''dmFyIGcsQz0iTm90IHByb3ZpZGVkIixTPXtfaGVhZGVyOiIiLmNvbmNhdChDLCJcbiIpLHJlczp7cmF3SGVhZGVyczpbQ119fSx2PU47aWYoai5kZWZhdWx0LmlzQXhpb3NFcnJvcihOKSl7dmFyIHA9Ti5yZXNwb25zZSx3PU4ucmVxdWVzdCxKPU4uY29uZmlnO2lmKHApdj1wO2Vsc2V7aWYo''@;'; put 'put ''dyl7dmFyIG5lPXcuX2hlYWRlcixkZT13Ll9jdXJyZW50UmVxdWVzdDtuZT9TLl9oZWFkZXI9bmU6ZGUmJmRlLl9oZWFkZXImJihTLl9oZWFkZXI9ZGUuX2hlYWRlcik7dmFyIGZlPXcucmVzO2ZlJiZmZS5yYXdIZWFkZXJzJiYoUy5yZXMucmF3SGVhZGVycz1mZS5yYXdIZWFkZXJzKX12PXtz''@;'; put 'put ''dGF0dXM6QyxyZXF1ZXN0OlMsY29uZmlnOkp8fHtkYXRhOkN9LGRhdGE6Q319fXZhciB4ZT12LnN0YXR1cyxPZT12LmRhdGEsQmU9di5jb25maWcuZGF0YSxXZT12LnJlcXVlc3R8fFMsS2U9V2UuX2hlYWRlcixZZT1XZS5yZXMucmF3SGVhZGVycy5yZWR1Y2UoZnVuY3Rpb24obHQsUGUsYmUp''@;'; put 'put ''e3JldHVybiBsdCsoYmUlMj09MD8iIi5jb25jYXQoMD09PWJlPyIiOiJcbiIpLmNvbmNhdChQZSk6IjogIi5jb25jYXQoUGUpKX0sIiIpLEplPUgucGFyc2VJbnRlcmNlcHRlZEJvZHkoT2UpO3JldHVybiBudWxsPT09KGc9ei5sb2dnZXIpfHx2b2lkIDA9PT1nfHxnLmluZm8oIkhUVFAgUmVx''@;'; put 'put ''dWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuIi5jb25jYXQoS2UpLmNvbmNhdChILnBhcnNlSW50ZXJjZXB0ZWRCb2R5KEJlKSwiXG5cbkhUVFAgUmVzcG9uc2UgQ29kZTogIikuY29uY2F0KEgucHJldHRpZnlTdHJpbmcoeGUpLCJcblxuSFRUUCBSZXNwb25zZSAoZmlyc3QgNTAgbGluZXMpOlxu''@;'; put 'put ''IikuY29uY2F0KFllKS5jb25jYXQoSmU/IlxuXG4iLmNvbmNhdChKZSk6IiIsIlxuIikpLE59LHRoaXMuc2V0VmVyYm9zZU1vZGU9ZnVuY3Rpb24oTil7SC52ZXJib3NlTW9kZT1OLEgudmVyYm9zZU1vZGU/SC5lbmFibGVWZXJib3NlTW9kZSgpOkguZGlzYWJsZVZlcmJvc2VNb2RlKCl9LHRo''@;'; put 'put ''aXMuZW5hYmxlVmVyYm9zZU1vZGU9ZnVuY3Rpb24oTixnKXt2b2lkIDA9PT1OJiYoTj1ILmRlZmF1bHRJbnRlcmNlcHRpb25DYWxsQmFjayksdm9pZCAwPT09ZyYmKGc9SC5kZWZhdWx0SW50ZXJjZXB0aW9uQ2FsbEJhY2spLEguaHR0cEludGVyY2VwdG9yPUguaHR0cENsaWVudC5pbnRlcmNl''@;'; put 'put ''cHRvcnMucmVzcG9uc2UudXNlKE4sZyl9LHRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKCl7SC5odHRwSW50ZXJjZXB0b3ImJkguaHR0cENsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZWplY3QoSC5odHRwSW50ZXJjZXB0b3IpfSx0aGlzLmdldEhlYWRlcnM9ZnVuY3Rpb24o''@;'; put 'put ''TixnKXt2YXIgQz17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PWcmJihDWyJDb250ZW50LVR5cGUiXT1nKSxDLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1nPyJhcHBsaWNhdGlvbi9qc29uIjoiKi8qIixOJiYoQy5BdXRob3JpemF0aW9uPSJCZWFy''@;'; put 'put ''ZXIgIi5jb25jYXQoTikpLEguY3NyZlRva2VuLmhlYWRlck5hbWUmJkguY3NyZlRva2VuLnZhbHVlJiYoQ1tILmNzcmZUb2tlbi5oZWFkZXJOYW1lXT1ILmNzcmZUb2tlbi52YWx1ZSksQ30sdGhpcy5wYXJzZUFuZFNldEZpbGVVcGxvYWRDc3JmVG9rZW49ZnVuY3Rpb24oTil7dmFyIGc9SC5w''@;'; put 'put ''YXJzZUNzcmZUb2tlbihOKTtnJiYoSC5maWxlVXBsb2FkQ3NyZlRva2VuPWcpfSx0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuPWZ1bmN0aW9uKE4pe3ZhciBnPUgucGFyc2VDc3JmVG9rZW4oTik7ZyYmKEguY3NyZlRva2VuPWcpfSx0aGlzLnBhcnNlQ3NyZlRva2VuPWZ1bmN0aW9uKE4pe3Zh''@;'; put 'put ''ciBnLEM9bnVsbD09PShnPU4uaGVhZGVyc1sieC1jc3JmLWhlYWRlciJdKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy50b0xvd2VyQ2FzZSgpO2lmKEMpcmV0dXJue2hlYWRlck5hbWU6Qyx2YWx1ZTpOLmhlYWRlcnNbQ118fCIifX0sdGhpcy5oYW5kbGVFcnJvcj1mdW5jdGlvbihOLGcsQyl7cmV0''@;'; put 'put ''dXJuIHZvaWQgMD09PUMmJihDPSExKSxrKEgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBTLHY7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihwKXtzd2l0Y2gocC5sYWJlbCl7Y2FzZSAwOnJldHVybiBTPU4ucmVzcG9uc2UsTiBpbnN0YW5jZW9mIFkuQXV0aG9yaXplRXJyb3I/WzQsdGhp''@;'; put 'put ''cy5odHRwQ2xpZW50LmdldChOLmNvbmZpcm1Vcmwse3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4iLEFjY2VwdDoiKi8qIn19KS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgZ2V0''@;'; put 'put ''dGluZyBlcnJvciBjb25maXJtVXJsLiAiKX0pXTpbMyw1XTtjYXNlIDE6cmV0dXJuIHY9cC5zZW50KCksKDAsQi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkodj8uZGF0YSk/WzQsdGhpcy5hdXRob3JpemUodi5kYXRhKS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2Fn''@;'; put 'put ''ZSkodywiRXJyb3Igd2hpbGUgYXV0aG9yaXppbmcgcmVxdWVzdC4gIil9KV06WzMsM107Y2FzZSAyOnAuc2VudCgpLHAubGFiZWw9MztjYXNlIDM6cmV0dXJuWzQsZygpLmNhdGNoKGZ1bmN0aW9uKHcpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh3LCJFcnJvciB3aGlsZSBleGVjdXRpbmcg''@;'; put 'put ''Y2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSldO2Nhc2UgNDpyZXR1cm5bMixwLnNlbnQoKV07Y2FzZSA1OmlmKE4gaW5zdGFuY2VvZiBZLkxvZ2luUmVxdWlyZWRFcnJvcil0aHJvdyB0aGlzLmNsZWFyQ3NyZlRva2VucygpLE47cmV0dXJuIE4gaW5zdGFuY2VvZiB0ZS5JbnZhbGlkU0FT''@;'; put 'put ''anNDc3JmRXJyb3I/WzQsdGhpcy5odHRwQ2xpZW50LmdldCgiLyIse3dpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24odyl7dmFyIEosbmU9bnVsbD09PShKPS88c2NyaXB0PmRvY3VtZW50LmNvb2tpZSA9ICcoWFNSRi1UT0tFTj0uKjsgTWF4LUFnZT04NjQwMDsgU2FtZVNpdGU9''@;'; put 'put ''U3RyaWN0OyBQYXRoPVwvOyknPFwvc2NyaXB0Pi8uZXhlYyh3LmRhdGEpKXx8dm9pZCAwPT09Sj92b2lkIDA6SlsxXTtuZSYmKGRvY3VtZW50LmNvb2tpZT1uZSl9KS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgcmUtZmV0Y2hpbmcg''@;'; put 'put ''Q1NSRiB0b2tlbi4iKX0pXTpbMyw4XTtjYXNlIDY6cmV0dXJuIHAuc2VudCgpLFs0LGcoKS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pXTtjYXNlIDc6cmV0dXJu''@;'; put 'put ''WzIscC5zZW50KCldO2Nhc2UgODpyZXR1cm4gNDAzIT09Uz8uc3RhdHVzJiY0NDkhPT1TPy5zdGF0dXM/WzMsMTFdOih0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuKFMpLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWUmJnRoaXMuY3NyZlRva2VuLnZhbHVlP1s0LGcoKS5jYXRjaChmdW5jdGlv''@;'; put 'put ''bih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pXTpbMywxMF0pO2Nhc2UgOTpyZXR1cm5bMixwLnNlbnQoKV07Y2FzZSAxMDp0aHJvdyBOO2Nhc2UgMTE6aWYoNDA0PT09Uz8uc3RhdHVzKXRo''@;'; put 'put ''cm93IG5ldyBZLk5vdEZvdW5kRXJyb3IoUy5jb25maWcudXJsKTtpZig1MDI9PT1TPy5zdGF0dXMpe2lmKEMpdGhyb3cgbmV3IFkuSW50ZXJuYWxTZXJ2ZXJFcnJvcjtyZXR1cm5bMl19cC5sYWJlbD0xMjtjYXNlIDEyOnRocm93IE4uaXNBeGlvc0Vycm9yJiYiVU5BQkxFX1RPX1ZFUklGWV9M''@;'; put 'put ''RUFGX1NJR05BVFVSRSI9PT1OLmNvZGU/bmV3IFkuQ2VydGlmaWNhdGVFcnJvcihOLm1lc3NhZ2UpOk4ubWVzc2FnZT9OOigwLFUucHJlZml4TWVzc2FnZSkoTiwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpfX0pfSl9LHRoaXMuY3JlYXRlSHR0cENsaWVudChjZSxHKSxiJiYodGhp''@;'; put 'put ''cy5yZXF1ZXN0c0xpbWl0PWIpLEQmJih0aGlzLnNldFZlcmJvc2VNb2RlKEQpLHRoaXMuZW5hYmxlVmVyYm9zZU1vZGUoKSl9cmV0dXJuIHVlLnByb3RvdHlwZS5zZXRDb25maWc9ZnVuY3Rpb24oY2UsRyl7dGhpcy5jcmVhdGVIdHRwQ2xpZW50KGNlLEcpfSx1ZS5wcm90b3R5cGUuc2F2ZUxv''@;'; put 'put ''Y2FsU3RvcmFnZVRva2VuPWZ1bmN0aW9uKGNlLEcpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsY2UpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLEcpfSx1ZS5wcm90b3R5cGUuZ2V0Q3NyZlRva2VuPWZ1bmN0aW9uKGNlKXtyZXR1cm4gdm9pZCAwPT09''@;'; put 'put ''Y2UmJihjZT0iZ2VuZXJhbCIpLCJmaWxlIj09PWNlP3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbjp0aGlzLmNzcmZUb2tlbn0sdWUucHJvdG90eXBlLmNsZWFyQ3NyZlRva2Vucz1mdW5jdGlvbigpe3RoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmZpbGVVcGxv''@;'; put 'put ''YWRDc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9fSx1ZS5wcm90b3R5cGUuY2xlYXJMb2NhbFN0b3JhZ2VUb2tlbnM9ZnVuY3Rpb24oKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLCIiKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIiwiIil9''@;'; put 'put ''LHVlLnByb3RvdHlwZS5nZXRCYXNlVXJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5iYXNlVVJMfHwiIn0sdWUucHJvdG90eXBlLmFwcGVuZFJlcXVlc3Q9ZnVuY3Rpb24oY2UsRyxiKXt2YXIgRD0iIixIPSIiLE49bnVsbDtiJiYoY2U/LmxvZz8oRD0oMCxl''@;'; put 'put ''ZS5wYXJzZVNvdXJjZUNvZGUpKGNlLmxvZyksSD0oMCxlZS5wYXJzZUdlbmVyYXRlZENvZGUpKGNlLmxvZyksTj1jZT8ucmVzdWx0P2NlLnJlc3VsdC5XT1JLOmNlLmxvZyk6Y2U/LnJlc3VsdCYmKCJzdHJpbmciPT10eXBlb2YgY2UucmVzdWx0JiYoRD0oMCxlZS5wYXJzZVNvdXJjZUNvZGUp''@;'; put 'put ''KGNlLnJlc3VsdCksSD0oMCxlZS5wYXJzZUdlbmVyYXRlZENvZGUpKGNlLnJlc3VsdCkpLE49Y2UucmVzdWx0LldPUkspKTt2YXIgZz0ic3RyaW5nIj09dHlwZW9mIGNlPy5yZXN1bHQ/Y2U/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShjZT8ucmVzdWx0LG51bGwsMik7dGhpcy5yZXF1ZXN0cy5w''@;'; put 'put ''dXNoKHtsb2dGaWxlOmNlPy5sb2d8fGd8fGNlLHNlcnZpY2VMaW5rOkcsdGltZXN0YW1wOm5ldyBEYXRlLHNvdXJjZUNvZGU6RCxnZW5lcmF0ZWRDb2RlOkgsU0FTV09SSzpOfSksdGhpcy5yZXF1ZXN0cy5sZW5ndGg+dGhpcy5yZXF1ZXN0c0xpbWl0JiZ0aGlzLnJlcXVlc3RzLnNwbGljZSgw''@;'; put 'put ''LDEpfSx1ZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGNlLEcsYixELEgpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PUQmJihEPXt9KSx2b2lkIDA9PT1IJiYoSD0hMSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTixnLEM9''@;'; put 'put ''dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFMpe3JldHVybiBOPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoRyxiKSksRCksZz17aGVhZGVyczpOLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1iPyJ0ZXh0IjoianNvbiIsd2l0aENyZWRlbnRpYWxzOiEwfSwidGV4dC9wbGFpbiI9PT1i''@;'; put 'put ''JiYoZy50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLFsyLHRoaXMuaHR0cENsaWVudC5nZXQoY2UsZykudGhlbihmdW5jdGlvbih2KXtyZXR1cm4oMCxPLnRocm93SWZFcnJvcikodiksQy5wYXJzZVJlc3BvbnNlKHYpfSkuY2F0Y2goZnVuY3Rpb24odil7cmV0dXJuIGsoQyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKCl7dmFyIHA9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHcpe3N3aXRjaCh3LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcih2LGZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2V0KGNlLEcsYixEKS5jYXRjaChmdW5jdGlvbihKKXt0aHJvdygwLFUu''@;'; put 'put ''cHJlZml4TWVzc2FnZSkoSiwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGhhbmRsZSBlcnJvciBjYWxsYmFjay4gIil9KX0sSCldO2Nhc2UgMTpyZXR1cm5bMix3LnNlbnQoKV19fSl9KX0pXX0pfSl9LHVlLnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKGNlLEcsYixELEgsTil7cmV0dXJuIHZvaWQg''@;'; put 'put ''MD09PUQmJihEPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09SCYmKEg9e30pLHZvaWQgMD09PU4mJihOPXt9KSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEM9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFMpe3JldHVybiBnPUkoSSh7fSx0aGlzLmdldEhl''@;'; put 'put ''YWRlcnMoYixEKSksSCksWzIsdGhpcy5odHRwQ2xpZW50LnBvc3QoY2UsRyxJKHtoZWFkZXJzOmcsd2l0aENyZWRlbnRpYWxzOiEwfSxOKSkudGhlbihmdW5jdGlvbih2KXtyZXR1cm4oMCxPLnRocm93SWZFcnJvcikodiksQy5wYXJzZVJlc3BvbnNlKHYpfSkuY2F0Y2goZnVuY3Rpb24odil7''@;'; put 'put ''cmV0dXJuIGsoQyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHA9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHcpe3N3aXRjaCh3LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcih2LGZ1bmN0aW9uKCl7cmV0dXJuIHAucG9zdChjZSxHLGIsRCxIKX0pXTtj''@;'; put 'put ''YXNlIDE6cmV0dXJuWzIsdy5zZW50KCldfX0pfSl9KV19KX0pfSx1ZS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKGNlLEcsYixEKXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9e30pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIEg9SShJKHt9LHRoaXMuZ2V0SGVhZGVycyhiLCJhcHBsaWNhdGlvbi9qc29uIikpLEQpLFsyLHRoaXMuaHR0cENsaWVudC5wdXQoY2UsRyx7aGVhZGVyczpILHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24oQyl7cmV0dXJuKDAsTy50aHJvd0lmRXJyb3Ip''@;'; put 'put ''KEMpLE4ucGFyc2VSZXNwb25zZShDKX0pLmNhdGNoKGZ1bmN0aW9uKEMpe3JldHVybiBrKE4sdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBTPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih2KXtzd2l0Y2godi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3Io''@;'; put 'put ''QyxmdW5jdGlvbigpe3JldHVybiBTLnB1dChjZSxHLGIsRCl9KV07Y2FzZSAxOnJldHVyblsyLHYuc2VudCgpXX19KX0pfSldfSl9KX0sdWUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihjZSxHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYixEPXRoaXM7''@;'; put 'put ''cmV0dXJuIEUodGhpcyxmdW5jdGlvbihIKXtyZXR1cm4gYj10aGlzLmdldEhlYWRlcnMoRywiYXBwbGljYXRpb24vanNvbiIpLFsyLHRoaXMuaHR0cENsaWVudC5kZWxldGUoY2Use2hlYWRlcnM6Yix3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKE4pe3JldHVybigwLE8udGhy''@;'; put 'put ''b3dJZkVycm9yKShOKSxELnBhcnNlUmVzcG9uc2UoTil9KS5jYXRjaChmdW5jdGlvbihOKXtyZXR1cm4gayhELHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmhh''@;'; put 'put ''bmRsZUVycm9yKE4sZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWxldGUoY2UsRyl9KV07Y2FzZSAxOnJldHVyblsyLEMuc2VudCgpXX19KX0pfSldfSl9KX0sdWUucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKGNlLEcsYil7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSxrKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbigpe3ZhciBELEg9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4pe3JldHVybiBEPXRoaXMuZ2V0SGVhZGVycyhiLCJhcHBsaWNhdGlvbi9qc29uIiksWzIsdGhpcy5odHRwQ2xpZW50LnBhdGNoKGNlLEcse2hlYWRlcnM6RCx3aXRoQ3JlZGVudGlhbHM6ITB9KS50''@;'; put 'put ''aGVuKGZ1bmN0aW9uKGcpe3JldHVybigwLE8udGhyb3dJZkVycm9yKShnKSxILnBhcnNlUmVzcG9uc2UoZyl9KS5jYXRjaChmdW5jdGlvbihnKXtyZXR1cm4gayhILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMu''@;'; put 'put ''bGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmhhbmRsZUVycm9yKGcsZnVuY3Rpb24oKXtyZXR1cm4gQy5wYXRjaChjZSxHLGIpfSldO2Nhc2UgMTpyZXR1cm5bMixTLnNlbnQoKV19fSl9KX0pXX0pfSl9LHVlLnByb3RvdHlwZS51cGxvYWRGaWxlPWZ1bmN0aW9uKGNlLEcsYil7dmFyIEQ7''@;'; put 'put ''cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTixnO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwpe2Nhc2UgMDpIPXRoaXMuZ2V0SGVhZGVycyhiLCJhcHBsaWNhdGlvbi9qc29uIiksIShudWxsPT09KEQ9dGhpcy5maWxlVXBsb2Fk''@;'; put 'put ''Q3NyZlRva2VuKXx8dm9pZCAwPT09RCkmJkQudmFsdWUmJihIW3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4udmFsdWUpLEMubGFiZWw9MTtjYXNlIDE6cmV0dXJuIEMudHJ5cy5wdXNoKFsxLDMsLDRdKSxbNCx0aGlzLmh0dHBD''@;'; put 'put ''bGllbnQucG9zdChjZSxHLHtoZWFkZXJzOkgsdHJhbnNmb3JtUmVxdWVzdDpmdW5jdGlvbihTKXtyZXR1cm4gU319KV07Y2FzZSAyOnJldHVyblsyLHtyZXN1bHQ6KGc9Qy5zZW50KCkpLmRhdGEsZXRhZzpnLmhlYWRlcnMuZXRhZ31dO2Nhc2UgMzppZihOPUMuc2VudCgpLDQwMz09PShudWxs''@;'; put 'put ''PT0oZz1OLnJlc3BvbnNlKT92b2lkIDA6Zy5zdGF0dXMpfHw0NDk9PT1nPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuKGcpLHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbilyZXR1cm5bMix0aGlzLnVwbG9hZEZpbGUoY2UsRyxiKV07dGhyb3cgTn10aHJv''@;'; put 'put ''dyBOO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0sdWUucHJvdG90eXBlLnBhcnNlUmVzcG9uc2U9ZnVuY3Rpb24oY2Upe3ZhciBHLGI9Y2U/LmhlYWRlcnM/Y2UuaGVhZGVycy5ldGFnOiIiLEQ9ITE7dHJ5e0c9InN0cmluZyI9PXR5cGVvZiBjZS5kYXRhP0pTT04ucGFyc2UoY2UuZGF0YSk6Y2Uu''@;'; put 'put ''ZGF0YX1jYXRjaHt0cnl7Rz1KU09OLnBhcnNlKCgwLFgucGFyc2VXZWJvdXRSZXNwb25zZSkoY2UuZGF0YSkpfWNhdGNoe0c9Y2UuZGF0YX1EPSEwfXZhciBIPXtyZXN1bHQ6RyxldGFnOmIsc3RhdHVzOmNlLnN0YXR1c307cmV0dXJuIEQmJihILmxvZz1jZS5kYXRhKSxIfSx1ZS5wcm90b3R5''@;'; put 'put ''cGUuY3JlYXRlSHR0cENsaWVudD1mdW5jdGlvbihjZSxHKXt2YXIgYj1HP25ldyBWLkFnZW50KEcpOnZvaWQgMDt0aGlzLmh0dHBDbGllbnQ9KDAsZWUuY3JlYXRlQXhpb3NJbnN0YW5jZSkoY2UsYiksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLnZhbGlkYXRlU3RhdHVzPWZ1bmN0aW9uKEQp''@;'; put 'put ''e3JldHVybiBEPj0yMDAmJkQ8PTQwMX19LHVlfSgpO08uUmVxdWVzdENsaWVudD1zZSxPLnRocm93SWZFcnJvcj1mdW5jdGlvbih1ZSl7dmFyIGNlLEcsYixELEgsTixnO3N3aXRjaCh1ZS5zdGF0dXMpe2Nhc2UgNDAwOmlmKCJvYmplY3QiPT10eXBlb2YgdWUuZGF0YSYmImludmFsaWRfZ3Jh''@;'; put 'put ''bnQiPT09dWUuZGF0YS5lcnJvcil0aHJvdyBuZXcgWS5Mb2dpblJlcXVpcmVkRXJyb3IodWUuZGF0YSk7aWYoInN0cmluZyI9PXR5cGVvZiB1ZS5kYXRhJiYiaW52YWxpZCBjc3JmIHRva2VuISI9PT11ZS5kYXRhLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IHRlLkludmFsaWRTQVNqc0NzcmZF''@;'; put 'put ''cnJvcjticmVhaztjYXNlIDQwMTp0aHJvdyJvYmplY3QiPT10eXBlb2YgdWUuZGF0YT9uZXcgWS5Mb2dpblJlcXVpcmVkRXJyb3IodWUuZGF0YSk6bmV3IFkuTG9naW5SZXF1aXJlZEVycm9yfWlmKG51bGwhPT0oRz1udWxsPT09KGNlPXVlLmRhdGEpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2Uu''@;'; put 'put ''ZW50aXR5SUQpJiZ2b2lkIDAhPT1HJiZHLmluY2x1ZGVzKCJsb2dpbiIpKXRocm93IG5ldyBZLkxvZ2luUmVxdWlyZWRFcnJvcjtpZigic3RyaW5nIj09dHlwZW9mIHVlLmRhdGEmJigwLEIuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHVlLmRhdGEpKXRocm93IG5ldyBZLkF1dGhvcml6ZUVy''@;'; put 'put ''cm9yKCJBdXRob3JpemF0aW9uIHJlcXVpcmVkIix1ZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZigic3RyaW5nIj09dHlwZW9mIHVlLmRhdGEmJigwLEIuaXNMb2dJblJlcXVpcmVkKSh1ZS5kYXRhKSYmKG51bGw9PT0oRD1udWxsPT09KGI9dWUuY29uZmlnKXx8dm9pZCAwPT09Yj92b2lkIDA6''@;'; put 'put ''Yi51cmwpfHx2b2lkIDA9PT1EfHwhRC5pbmNsdWRlcygiL1NBU0xvZ29uL2xvZ2luIikpKXRocm93IG5ldyBZLkxvZ2luUmVxdWlyZWRFcnJvcjtpZihudWxsIT09KEg9dWUuZGF0YSkmJnZvaWQgMCE9PUgmJkguYXV0aF9yZXF1ZXN0KXRocm93IG5ldyBZLkF1dGhvcml6ZUVycm9yKHVlLmRh''@;'; put 'put ''dGEubWVzc2FnZSx1ZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZihudWxsIT09KGc9bnVsbD09PShOPXVlLmNvbmZpZyl8fHZvaWQgMD09PU4/dm9pZCAwOk4udXJsKSYmdm9pZCAwIT09ZyYmZy5pbmNsdWRlcygic2FzQXV0aEVycm9yIikpdGhyb3cgbmV3IHEuU0FTOUF1dGhFcnJvcjt2YXIg''@;'; put 'put ''Uz1oZSh1ZS5kYXRhKTtpZihTKXRocm93IFN9O3ZhciBoZT1mdW5jdGlvbih1ZSl7aWYoIXVlKXJldHVybiBudWxsO3RyeXt2YXIgY2U9SlNPTi5wYXJzZSh1ZT8ucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7aWYoY2UuZXJyb3JDb2RlJiZjZS5tZXNzYWdlKXJldHVybiBuZXcgWS5Kb2JFeGVj''@;'; put 'put ''dXRpb25FcnJvcihjZS5lcnJvckNvZGUsY2UubWVzc2FnZSx1ZT8ucmVwbGFjZSgvW1xuXHJdL2csIiAiKSl9Y2F0Y2h7fXRyeXtpZih1ZT8uaW5jbHVkZXMoJ3siZXJyb3JDb2RlJykmJihOPXVlLnNwbGl0KCd7ImVycm9yQ29kZScpKS5sZW5ndGg+MSl7dmFyIEc9J3siZXJyb3JDb2RlJytO''@;'; put 'put ''WzFdLnNwbGl0KCcifScpWzBdKycifScsYj1KU09OLnBhcnNlKEcucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7cmV0dXJuIG5ldyBZLkpvYkV4ZWN1dGlvbkVycm9yKGIuZXJyb3JDb2RlLGIubWVzc2FnZSx1ZT8ucmVwbGFjZSgvW1xuXHJdL2csIlxuIikpfX1jYXRjaHt9dHJ5e2lmKHVlPy5t''@;'; put 'put ''YXRjaCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSkmJihOPXVlLnNwbGl0KC9zdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6IC9pKSkubGVuZ3RoPjEpe3ZhciBEPU5bMV0uc3BsaXQoIjxpPiIpWzFdLnNwbGl0KCI8L2k+IilbMF0sSD1ELmVuZHNXaXRoKCJydW5uZXIiKT8iU0FTSlMg''@;'; put 'put ''cnVubmVyIG5vdCBmb3VuZC4gSGVyZSdzIHRoZSBsaW5rIChodHRwczovL2NsaS5zYXNqcy5pby9hdXRoLyNzYXNqcy1ydW5uZXIpIHRvIHRoZSBTQVMgY29kZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIFNBU2pzIHJ1bm5lciI6IlN0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogIi5jb25jYXQoRCk7''@;'; put 'put ''cmV0dXJuIG5ldyBZLkpvYkV4ZWN1dGlvbkVycm9yKDUwMCxILCIiKX19Y2F0Y2h7fXRyeXt2YXIgTjtpZighdWU/Lm1hdGNoKC8+PndlYm91dEJFR0lOPDwvKSYmdWU/Lm1hdGNoKC9TdG9yZWQgUHJvY2VzcyBFcnJvci9pKSYmdWU/Lm1hdGNoKC9UaGlzIHJlcXVlc3QgY29tcGxldGVkIHdp''@;'; put 'put ''dGggZXJyb3JzLi9pKSYmKE49dWUuc3BsaXQoIjxoMj5TQVMgTG9nPC9oMj4iKSkubGVuZ3RoPjEpe3ZhciBnPU5bMV0uc3BsaXQoIjxwcmU+IilbMV0uc3BsaXQoIjwvcHJlPiIpWzBdO3JldHVybiBuZXcgWS5Kb2JFeGVjdXRpb25FcnJvcig1MDAsSD0iVGhpcyByZXF1ZXN0IGNvbXBsZXRl''@;'; put 'put ''ZCB3aXRoIGVycm9ycy4iLGcpfX1jYXRjaHt9cmV0dXJuIG51bGx9fSw3OTU6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihxLGVlKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186''@;'; put 'put ''W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odGUsb2Upe3RlLl9fcHJvdG9fXz1vZX18fGZ1bmN0aW9uKHRlLG9lKXtmb3IodmFyIHNlIGluIG9lKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvZSxzZSkmJih0ZVtzZV09b2Vbc2VdKX0pKHEsZWUpfSxmdW5jdGlv''@;'; put 'put ''bihxLGVlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZWUmJm51bGwhPT1lZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGVlKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiB0ZSgpe3RoaXMuY29uc3RydWN0b3I9cX16''@;'; put 'put ''KHEsZWUpLHEucHJvdG90eXBlPW51bGw9PT1lZT9PYmplY3QuY3JlYXRlKGVlKToodGUucHJvdG90eXBlPWVlLnByb3RvdHlwZSxuZXcgdGUpfSksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHEpe2Zvcih2YXIgZWUs''@;'; put 'put ''dGU9MSxvZT1hcmd1bWVudHMubGVuZ3RoO3RlPG9lO3RlKyspZm9yKHZhciBzZSBpbiBlZT1hcmd1bWVudHNbdGVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZSxzZSkmJihxW3NlXT1lZVtzZV0pO3JldHVybiBxfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10''@;'; put 'put ''aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ocSxlZSx0ZSxvZSl7cmV0dXJuIG5ldyh0ZXx8KHRlPVByb21pc2UpKShmdW5jdGlvbihzZSxoZSl7ZnVuY3Rpb24gdWUoYil7dHJ5e0cob2UubmV4dChiKSl9Y2F0Y2goRCl7aGUoRCl9fWZ1bmN0aW9uIGNlKGIpe3RyeXtHKG9lLnRocm93''@;'; put 'put ''KGIpKX1jYXRjaChEKXtoZShEKX19ZnVuY3Rpb24gRyhiKXt2YXIgRDtiLmRvbmU/c2UoYi52YWx1ZSk6KEQ9Yi52YWx1ZSxEIGluc3RhbmNlb2YgdGU/RDpuZXcgdGUoZnVuY3Rpb24oSCl7SChEKX0pKS50aGVuKHVlLGNlKX1HKChvZT1vZS5hcHBseShxLGVlfHxbXSkpLm5leHQoKSl9KX0s''@;'; put 'put ''RT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihxLGVlKXt2YXIgdGUsb2Usc2UsaGUsdWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJuIHNlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGhlPXtuZXh0OmNlKDApLHRocm93''@;'; put 'put ''OmNlKDEpLHJldHVybjpjZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGhlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGhlO2Z1bmN0aW9uIGNlKEcpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZnVuY3Rpb24oRCl7aWYodGUpdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7dWU7KXRyeXtpZih0ZT0xLG9lJiYoc2U9MiZEWzBdP29lLnJldHVybjpEWzBdP29lLnRocm93fHwoKHNlPW9lLnJldHVybikmJnNlLmNhbGwob2UpLDApOm9lLm5leHQpJiYhKHNlPXNlLmNhbGwob2Us''@;'; put 'put ''RFsxXSkpLmRvbmUpcmV0dXJuIHNlO3N3aXRjaChvZT0wLHNlJiYoRD1bMiZEWzBdLHNlLnZhbHVlXSksRFswXSl7Y2FzZSAwOmNhc2UgMTpzZT1EO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdWUubGFiZWwrKyx7dmFsdWU6RFsxXSxkb25lOiExfTtjYXNlIDU6dWUubGFiZWwrKyxvZT1EWzFdLEQ9''@;'; put 'put ''WzBdO2NvbnRpbnVlO2Nhc2UgNzpEPXVlLm9wcy5wb3AoKSx1ZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoc2U9KHNlPXVlLnRyeXMpLmxlbmd0aD4wJiZzZVtzZS5sZW5ndGgtMV0pfHw2IT09RFswXSYmMiE9PURbMF0pKXt1ZT0wO2NvbnRpbnVlfWlmKDM9PT1EWzBdJiYo''@;'; put 'put ''IXNlfHxEWzFdPnNlWzBdJiZEWzFdPHNlWzNdKSl7dWUubGFiZWw9RFsxXTticmVha31pZig2PT09RFswXSYmdWUubGFiZWw8c2VbMV0pe3VlLmxhYmVsPXNlWzFdLHNlPUQ7YnJlYWt9aWYoc2UmJnVlLmxhYmVsPHNlWzJdKXt1ZS5sYWJlbD1zZVsyXSx1ZS5vcHMucHVzaChEKTticmVha31z''@;'; put 'put ''ZVsyXSYmdWUub3BzLnBvcCgpLHVlLnRyeXMucG9wKCk7Y29udGludWV9RD1lZS5jYWxsKHEsdWUpfWNhdGNoKEgpe0Q9WzYsSF0sb2U9MH1maW5hbGx5e3RlPXNlPTB9aWYoNSZEWzBdKXRocm93IERbMV07cmV0dXJue3ZhbHVlOkRbMF0/RFsxXTp2b2lkIDAsZG9uZTohMH19KFtHLGJdKX19''@;'; put 'put ''fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TYXM5UmVxdWVzdENsaWVudD12b2lkIDA7dmFyIGo9Uig4MjI0KSxWPVIoNzg1NyksQj1SKDk3NzgpLFk9Uig0NTg4KSxYPVIoMTM5NSksVT1mdW5jdGlvbihxKXtmdW5jdGlvbiBlZSh0ZSxvZSl7''@;'; put 'put ''dmFyIHNlPXEuY2FsbCh0aGlzLHRlLG9lKXx8dGhpcztyZXR1cm4gc2UuaHR0cENsaWVudC5kZWZhdWx0cy5tYXhSZWRpcmVjdHM9MCxzZS5odHRwQ2xpZW50LmRlZmF1bHRzLnZhbGlkYXRlU3RhdHVzPWZ1bmN0aW9uKGhlKXtyZXR1cm4gaGU+PTIwMCYmaGU8MzAzfSxqLmRlZmF1bHQmJigo''@;'; put 'put ''MCxqLmRlZmF1bHQpKHNlLmh0dHBDbGllbnQpLHNlLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyPW5ldyBWLkNvb2tpZUphciksc2V9cmV0dXJuIEsoZWUscSksZWUucHJvdG90eXBlLmxvZ2luPWZ1bmN0aW9uKHRlLG9lLHNlKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgaGU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih1ZSl7c3dpdGNoKHVlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGhlPSIvVXNlciBGb2xkZXJzLyIuY29uY2F0KHRlLCIvTXkgRm9sZGVyL3Nhc2pzL3J1bm5lciIpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXI/KHRoaXMuaHR0cENs''@;'; put 'put ''aWVudC5kZWZhdWx0cy5qYXIucmVtb3ZlQWxsQ29va2llcygpLFs0LHRoaXMuZ2V0KCIiLmNvbmNhdChzZSwiP19wcm9ncmFtPSIpLmNvbmNhdChoZSwiJl91c2VybmFtZT0iKS5jb25jYXQodGUsIiZfcGFzc3dvcmQ9IikuY29uY2F0KG9lKSx2b2lkIDAsInRleHQvcGxhaW4iKV0pOlszLDJd''@;'; put 'put ''O2Nhc2UgMTp1ZS5zZW50KCksdWUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzJdfX0pfSl9LGVlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odGUsb2Usc2UsaGUsdWUpe3JldHVybiB2b2lkIDA9PT1zZSYmKHNlPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09aGUmJihoZT17fSksdm9pZCAw''@;'; put 'put ''PT09dWUmJih1ZT0hMSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgY2UsRyxiPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEKXtyZXR1cm4gY2U9SShJKHt9LHRoaXMuZ2V0SGVhZGVycyhvZSxzZSkpLGhlKSxHPXtoZWFkZXJzOmNlLHJlc3BvbnNlVHlwZToidGV4''@;'; put 'put ''dC9wbGFpbiI9PT1zZT8idGV4dCI6Impzb24iLHdpdGhDcmVkZW50aWFsczohMH0sInRleHQvcGxhaW4iPT09c2UmJihHLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCksWzIsdGhpcy5odHRwQ2xpZW50LmdldCh0ZSxHKS50aGVuKGZ1bmN0aW9uKEgpe3JldHVybiAzMDI9PT1ILnN0YXR1cz9i''@;'; put 'put ''LmdldChILmhlYWRlcnMubG9jYXRpb24sb2Usc2UpOigoMCxZLnRocm93SWZFcnJvcikoSCksYi5wYXJzZVJlc3BvbnNlKEgpKX0pLmNhdGNoKGZ1bmN0aW9uKEgpe3JldHVybiBrKGIsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihn''@;'; put 'put ''KXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOmlmKEggaW5zdGFuY2VvZiBYLkpvYkV4ZWN1dGlvbkVycm9yKXRocm93IEg7cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihILGZ1bmN0aW9uKCl7cmV0dXJuIE4uZ2V0KHRlLG9lLHNlLGhlKS5jYXRjaChmdW5jdGlvbihDKXt0aHJvdygwLEIucHJl''@;'; put 'put ''Zml4TWVzc2FnZSkoQywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGhhbmRsZSBlcnJvciBjYWxsYmFjay4gIil9KX0sdWUpLmNhdGNoKGZ1bmN0aW9uKEMpe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShDLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIil9KV07Y2FzZSAxOnJldHVyblsy''@;'; put 'put ''LGcuc2VudCgpXX19KX0pfSldfSl9KX0sZWUucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24odGUsb2Usc2UsaGUsdWUpe3JldHVybiB2b2lkIDA9PT1oZSYmKGhlPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09dWUmJih1ZT17fSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgY2UsRz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIGNlPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoc2UsaGUpKSx1ZSksWzIsdGhpcy5odHRwQ2xpZW50LnBvc3QodGUsb2Use2hlYWRlcnM6Y2Usd2l0aENyZWRlbnRpYWxzOiEwfSkudGhlbihmdW5jdGlvbihEKXty''@;'; put 'put ''ZXR1cm4gayhHLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIDMwMiE9PUQuc3RhdHVzP1szLDJdOls0LHRoaXMuZ2V0KEQuaGVhZGVycy5sb2NhdGlvbix2b2lkIDAsaGUsdWUpXTtjYXNlIDE6''@;'; put 'put ''cmV0dXJuWzIsSC5zZW50KCldO2Nhc2UgMjpyZXR1cm4oMCxZLnRocm93SWZFcnJvcikoRCksWzIsdGhpcy5wYXJzZVJlc3BvbnNlKEQpXX19KX0pfSkuY2F0Y2goZnVuY3Rpb24oRCl7cmV0dXJuIGsoRyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gRSh0aGlz''@;'; put 'put ''LGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihELGZ1bmN0aW9uKCl7cmV0dXJuIEgucG9zdCh0ZSxvZSxzZSxoZSx1ZSl9KV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSldfSl9KX0sZWV9KFkuUmVxdWVzdENsaWVu''@;'; put 'put ''dCk7Ty5TYXM5UmVxdWVzdENsaWVudD1VfSwzNjAyOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oayxFKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBB''@;'; put 'put ''cnJheSYmZnVuY3Rpb24oaixWKXtqLl9fcHJvdG9fXz1WfXx8ZnVuY3Rpb24oaixWKXtmb3IodmFyIEIgaW4gVilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVixCKSYmKGpbQl09VltCXSl9KShrLEUpfSxmdW5jdGlvbihrLEUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBF''@;'; put 'put ''JiZudWxsIT09RSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKEUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIGooKXt0aGlzLmNvbnN0cnVjdG9yPWt9eihrLEUpLGsucHJvdG90eXBlPW51bGw9PT1FP09iamVjdC5j''@;'; put 'put ''cmVhdGUoRSk6KGoucHJvdG90eXBlPUUucHJvdG90eXBlLG5ldyBqKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBU0pTX0xPR1NfU0VQQVJBVE9SPU8uU2FzanNSZXF1ZXN0Q2xpZW50PXZvaWQgMDt2YXIgST1mdW5jdGlvbihrKXtmdW5j''@;'; put 'put ''dGlvbiBFKCl7dmFyIGo9bnVsbCE9PWsmJmsuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBqLmdldEhlYWRlcnM9ZnVuY3Rpb24oVixCKXt2YXIgWSxYPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09QiYmKFhbIkNvbnRlbnQtVHlwZSJd''@;'; put 'put ''PUIpLFguQWNjZXB0PSJhcHBsaWNhdGlvbi9qc29uIj09PUI/QjoiKi8qIixWfHx0eXBlb2Ygd2luZG93PiJ1Inx8KFY9bnVsbCE9PShZPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhY2Nlc3NUb2tlbiIpKSYmdm9pZCAwIT09WT9ZOnZvaWQgMCksViYmKFguQXV0aG9yaXphdGlvbj0iQmVhcmVy''@;'; put 'put ''ICIuY29uY2F0KFYpKSxYfSxqfXJldHVybiBLKEUsayksRS5wcm90b3R5cGUucGFyc2VSZXNwb25zZT1mdW5jdGlvbihqKXt2YXIgVixCLFksWD1qPy5oZWFkZXJzP2ouaGVhZGVycy5ldGFnOiIiLFU9e307dHJ5e1U9InN0cmluZyI9PXR5cGVvZiBqLmRhdGE/SlNPTi5wYXJzZShqLmRhdGEp''@;'; put 'put ''OmouZGF0YX1jYXRjaHtpZihqLmRhdGEuaW5jbHVkZXMoTy5TQVNKU19MT0dTX1NFUEFSQVRPUikpe3ZhciBxPWouZGF0YSxlZT1xLnNwbGl0KE8uU0FTSlNfTE9HU19TRVBBUkFUT1IpO3ZvaWQgMCE9PShWPWVlLnNwbGljZSgwLDEpWzBdKSYmKFU9Vik7dmFyIHRlPWVlLnNwbGljZSgwLGVl''@;'; put 'put ''Lmxlbmd0aC0xKSxvZT1uZXcgUmVnRXhwKCIiLmNvbmNhdChPLlNBU0pTX0xPR1NfU0VQQVJBVE9SLCIkIikpLHNlPWVlWzBdO3NlJiYob2UudGVzdChxKT90ZS5sZW5ndGg+MSYmdGUucHVzaChzZSk6WT1zZSksQj10ZS5qb2luKE8uU0FTSlNfTE9HU19TRVBBUkFUT1IpfWVsc2UgVT1qLmRh''@;'; put 'put ''dGF9dmFyIGhlPXtyZXN1bHQ6VSxsb2c6Qnx8IiIsZXRhZzpYLHN0YXR1czpqLnN0YXR1c307cmV0dXJuIFkmJihoZS5wcmludE91dHB1dD1ZKSxoZX0sRX0oUig0NTg4KS5SZXF1ZXN0Q2xpZW50KTtPLlNhc2pzUmVxdWVzdENsaWVudD1JLE8uU0FTSlNfTE9HU19TRVBBUkFUT1I9IlNBU0pT''@;'; put 'put ''X0xPR1NfU0VQQVJBVE9SXzE2M2VlMTdiNmZmMjRmMDI4OTI4OTcyZDgwYTI2Nzg0In0sNDcwOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDY2NjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDYxNzc6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1NzY2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJf''@;'; put 'put ''X2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDk3NTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDIxNTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSl9LDQ3ODI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0MTY4OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUx''@;'; put 'put ''NjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM4NDA6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzMTUzOihNLE8pPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTQyODooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU4NDE6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IFIsSztPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Mb2dpbk1lY2hhbmlzbT1PLlNBU2pzQ29uZmlnPXZvaWQgMCxPLlNBU2pzQ29uZmlnPWZ1bmN0aW9uKCl7dGhpcy5zZXJ2ZXJVcmw9IiIsdGhpcy5wYXRoU0FTSlM9IiIsdGhpcy5wYXRoU0FT''@;'; put 'put ''OT0iIix0aGlzLnBhdGhTQVNWaXlhPSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuc2VydmVyVHlwZT1udWxsLHRoaXMuZGVidWc9ITAsdGhpcy52ZXJib3NlPSEwLHRoaXMuY29udGV4dE5hbWU9IiIsdGhpcy51c2VDb21wdXRlQXBpPW51bGwsdGhpcy5sb2dpbk1lY2hhbmlzbT1SLkRlZmF1bHQs''@;'; put 'put ''dGhpcy5yZXF1ZXN0SGlzdG9yeUxpbWl0PTEwfSwoSz1SPU8uTG9naW5NZWNoYW5pc218fChPLkxvZ2luTWVjaGFuaXNtPXt9KSkuRGVmYXVsdD0iRGVmYXVsdCIsSy5SZWRpcmVjdGVkPSJSZWRpcmVjdGVkIn0sNjAzODooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TZXNzaW9uU3RhdGU9dm9pZCAwLChSPU8uU2Vzc2lvblN0YXRlfHwoTy5TZXNzaW9uU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsUi5SdW5uaW5nPSJydW5uaW5nIixSLlBlbmRpbmc9InBlbmRpbmciLFIuSWRs''@;'; put 'put ''ZT0iaWRsZSIsUi5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLFIuTm9TdGF0ZT0iIixSLkZhaWxlZD0iZmFpbGVkIixSLkVycm9yPSJlcnJvciJ9LDk0OTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NjUw''@;'; put 'put ''OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTI0OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0''@;'; put 'put ''LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSko''@;'; put 'put ''SSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1''@;'; put 'put ''Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5BdXRob3JpemVFcnJvcj12b2lkIDA7dmFyIEs9''@;'; put 'put ''ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFLGope3ZhciBWPUkuY2FsbCh0aGlzLEUpfHx0aGlzO3JldHVybiBWLm1lc3NhZ2U9RSxWLmNvbmZpcm1Vcmw9aixWLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoVixrLnByb3RvdHlwZSksVn1yZXR1cm4geihrLEkp''@;'; put 'put ''LGt9KEVycm9yKTtPLkF1dGhvcml6ZUVycm9yPUt9LDk0NjU6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2Vv''@;'; put 'put ''ZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVv''@;'; put 'put ''ZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVj''@;'; put 'put ''dC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkNlcnRpZmljYXRlRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSl7dmFyIGo9SS5jYWxs''@;'; put 'put ''KHRoaXMsIiIuY29uY2F0KEUsIlxuUGxlYXNlIHZpc2l0IHRoZSBsaW5rIGJlbG93IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoaXMgaXNzdWU6XG4tICIpLmNvbmNhdCgiaHR0cHM6Ly9naXRodWIuY29tL3Nhc2pzL2NsaS9pc3N1ZXMvMTE4MSNpc3N1ZWNvbW1lbnQtMTA5MDYzODU4''@;'; put 'put ''NCIsIlxuIikpfHx0aGlzO3JldHVybiBqLm5hbWU9IkNlcnRpZmljYXRlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihqLGsucHJvdG90eXBlKSxqfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uQ2VydGlmaWNhdGVFcnJvcj1LfSw1MjY3OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBW''@;'; put 'put ''IGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmlu''@;'; put 'put ''ZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSxqKXt2YXIgVj1JLmNhbGwodGhpcywiRXJyb3I6IEpvYiBleGVjdXRpb24gZmFpbGVkIil8fHRoaXM7cmV0dXJuIFYu''@;'; put 'put ''am9iPUUsVi5sb2c9aixWLm5hbWU9IkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFYsay5wcm90b3R5cGUpLFZ9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9S30sOTIzMjooTSxPKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5FcnJvclJlc3BvbnNlPXZvaWQgMCxPLkVycm9yUmVzcG9uc2U9ZnVuY3Rpb24oeixLLEkpe3ZhciBrPUs7aWYoIm9iamVjdCIhPXR5cGVvZiBLKXRyeXtrPUpTT04ucGFyc2UoSyl9Y2F0Y2h7ST1L''@;'; put 'put ''LGs9IiJ9dGhpcy5lcnJvcj17bWVzc2FnZTp6LGRldGFpbHM6ayxyYXc6SX19fSw1MTA5OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90''@;'; put 'put ''b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlw''@;'; put 'put ''ZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5JbnRlcm5hbFNlcnZlckVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlv''@;'; put 'put ''biBrKCl7dmFyIEU9SS5jYWxsKHRoaXMsIkVycm9yOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuIil8fHRoaXM7cmV0dXJuIEUubmFtZT0iSW50ZXJuYWxTZXJ2ZXJFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5J''@;'; put 'put ''bnRlcm5hbFNlcnZlckVycm9yPUt9LDU1MTg6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYm''@;'; put 'put ''ZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxs''@;'; put 'put ''IT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUo''@;'; put 'put ''ayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkludmFsaWRKc29uRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoKXt2YXIgRT1JLmNhbGwodGhpcywiRXJy''@;'; put 'put ''b3I6IGludmFsaWQgSnNvbiBzdHJpbmciKXx8dGhpcztyZXR1cm4gRS5uYW1lPSJJbnZhbGlkSnNvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoRSxrLnByb3RvdHlwZSksRX1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkludmFsaWRKc29uRXJyb3I9S30sMTAwNTpmdW5jdGlvbihN''@;'; put 'put ''LE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlv''@;'; put 'put ''bihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVu''@;'; put 'put ''ZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSW52YWxpZFNBU2pzQ3NyZkVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKCl7dmFyIEU9dGhpcztyZXR1cm4oRT1JLmNhbGwodGhpcywiQXV0aCBlcnJvcjogIi5jb25jYXQo''@;'; put 'put ''IkludmFsaWQgQ1NSRiB0b2tlbiEiKSl8fHRoaXMpLm5hbWU9IkludmFsaWRTQVNqc0NzcmZFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5JbnZhbGlkU0FTanNDc3JmRXJyb3I9S30sODUzMTpmdW5jdGlvbihN''@;'; put 'put ''LE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlv''@;'; put 'put ''bihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVu''@;'; put 'put ''ZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSxqLFYpe3ZhciBCPUkuY2FsbCh0aGlzLCJFcnJvciBDb2RlICIuY29uY2F0KEUsIjogIikuY29uY2F0''@;'; put 'put ''KGopKXx8dGhpcztyZXR1cm4gQi5lcnJvckNvZGU9RSxCLmVycm9yTWVzc2FnZT1qLEIucmVzdWx0PVYsQi5uYW1lPSJKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEIsay5wcm90b3R5cGUpLEJ9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Kb2JFeGVjdXRpb25F''@;'; put 'put ''cnJvcj1LfSw5MDc5OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7''@;'; put 'put ''RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlw''@;'; put 'put ''ZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Kb2JTdGF0ZVBvbGxFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFLGope3ZhciBWPUkuY2FsbCh0aGlzLCJFcnJvciB3aGlsZSBw''@;'; put 'put ''b2xsaW5nIGpvYiBzdGF0ZSBmb3Igam9iICIuY29uY2F0KEUsIjogIikuY29uY2F0KGoubWVzc2FnZXx8aikpfHx0aGlzO3JldHVybiBWLm9yaWdpbmFsRXJyb3I9aixWLm5hbWU9IkpvYlN0YXRlUG9sbEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoVixrLnByb3RvdHlwZSksVn1yZXR1''@;'; put 'put ''cm4geihrLEkpLGt9KEVycm9yKTtPLkpvYlN0YXRlUG9sbEVycm9yPUt9LDMwOTY6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186''@;'; put 'put ''W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5j''@;'; put 'put ''dGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51''@;'; put 'put ''bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkpzb25QYXJzZUFycmF5RXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGso''@;'; put 'put ''KXt2YXIgRT1JLmNhbGwodGhpcywiQ2FuIG5vdCBwYXJzZSBhcnJheSBvYmplY3QgdG8ganNvbi4iKXx8dGhpcztyZXR1cm4gRS5uYW1lPSJKc29uUGFyc2VBcnJheUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoRSxrLnByb3RvdHlwZSksRX1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtP''@;'; put 'put ''Lkpzb25QYXJzZUFycmF5RXJyb3I9S30sNjc0MzpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5''@;'; put 'put ''JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51''@;'; put 'put ''bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0''@;'; put 'put ''ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uTG9naW5SZXF1aXJlZEVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUpe3ZhciBqPXRoaXMsVj1FP0pT''@;'; put 'put ''T04uc3RyaW5naWZ5KEUsbnVsbCwyKToiWW91IG11c3QgYmUgbG9nZ2VkIGluIHRvIGFjY2VzcyB0aGlzIHJlc291cmNlIjtyZXR1cm4oaj1JLmNhbGwodGhpcywiQXV0aCBlcnJvcjogIi5jb25jYXQoVikpfHx0aGlzKS5uYW1lPSJMb2dpblJlcXVpcmVkRXJyb3IiLE9iamVjdC5zZXRQcm90''@;'; put 'put ''b3R5cGVPZihqLGsucHJvdG90eXBlKSxqfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uTG9naW5SZXF1aXJlZEVycm9yPUt9LDc4NjQ6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmpl''@;'; put 'put ''Y3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9''@;'; put 'put ''KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0''@;'; put 'put ''cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLk5vU2Vzc2lvblN0YXRlRXJyb3I9dm9pZCAw''@;'; put 'put ''O3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSxqLFYpe3ZhciBCPUkuY2FsbCh0aGlzLCJDb3VsZCBub3QgZ2V0IHNlc3Npb24gc3RhdGUuIFNlcnZlciByZXNwb25kZWQgd2l0aCAiLmNvbmNhdChFLCIgd2hpbHN0IGNoZWNraW5nIHN0YXRlOiAiKS5jb25jYXQoaikpfHx0aGlzO3Jl''@;'; put 'put ''dHVybiBCLnNlcnZlclJlc3BvbnNlU3RhdHVzPUUsQi5zZXNzaW9uU3RhdGVVcmw9aixCLmxvZ1VybD1WLEIubmFtZT0iTm9TZXNzaW9uU3RhdHVzIixPYmplY3Quc2V0UHJvdG90eXBlT2YoQixrLnByb3RvdHlwZSksQn1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLk5vU2Vzc2lvblN0YXRl''@;'; put 'put ''RXJyb3I9S30sOTU3NzpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGop''@;'; put 'put ''e0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5''@;'; put 'put ''cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uTm90Rm91bmRFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFKXt2YXIgaj1JLmNhbGwodGhpcywiRXJyb3I6IFJlc291cmNlIGF0''@;'; put 'put ''ICIuY29uY2F0KEUsIiB3YXMgbm90IGZvdW5kIikpfHx0aGlzO3JldHVybiBqLnVybD1FLGoubmFtZT0iTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKGosay5wcm90b3R5cGUpLGp9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Ob3RGb3VuZEVycm9yPUt9LDkyNzk6ZnVu''@;'; put 'put ''Y3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihFLGope3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihWLEIpe1YuX19wcm90b19fPUJ9''@;'; put 'put ''fHxmdW5jdGlvbihWLEIpe2Zvcih2YXIgWSBpbiBCKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLFkpJiYoVltZXT1CW1ldKX0pKEUsail9LGZ1bmN0aW9uKEUsail7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGomJm51bGwhPT1qKXRocm93IG5ldyBUeXBlRXJyb3IoIkNs''@;'; put 'put ''YXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gVigpe3RoaXMuY29uc3RydWN0b3I9RX16KEUsaiksRS5wcm90b3R5cGU9bnVsbD09PWo/T2JqZWN0LmNyZWF0ZShqKTooVi5wcm90b3R5cGU9ai5wcm90b3R5cGUs''@;'; put 'put ''bmV3IFYpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uUm9vdEZvbGRlck5vdEZvdW5kRXJyb3I9dm9pZCAwO3ZhciBJPVIoNjc5OSksaz1mdW5jdGlvbihFKXtmdW5jdGlvbiBqKFYsQixZKXt2YXIgWD10aGlzLFU9IlJvb3QgZm9sZGVyICIu''@;'; put 'put ''Y29uY2F0KFYsIiB3YXMgbm90IGZvdW5kLiIpKyJcblBsZWFzZSBjaGVjayAiLmNvbmNhdChCLCIvU0FTRHJpdmUuIikrIlxuSWYgdGhlIGZvbGRlciBET0VTIGV4aXN0IHRoZW4gaXQgaXMgbGlrZWx5IGEgcGVybWlzc2lvbiBwcm9ibGVtLlxuIjtpZihZKXt2YXIgcT0oMCxJLmRlY29kZVRv''@;'; put 'put ''a2VuKShZKS5zY29wZTtVKz0iWW91ciBhY2Nlc3MgdG9rZW4gY29udGFpbnMgdGhlIGZvbGxvd2luZyBzY29wZXM6XG4iKyhxPXEubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4iKiAiK2VlfSkpLmpvaW4oIlxuIil9cmV0dXJuKFg9RS5jYWxsKHRoaXMsVSl8fHRoaXMpLm5hbWU9IlJvb3RGb2xk''@;'; put 'put ''ZXJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoWCxqLnByb3RvdHlwZSksWH1yZXR1cm4gSyhqLEUpLGp9KEVycm9yKTtPLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPWt9LDk1MjY6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0''@;'; put 'put ''ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0''@;'; put 'put ''b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxPLlNBUzlBdXRoRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoKXt2YXIgRT1JLmNhbGwodGhpcywiVGhlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlZCBjYW5ub3QgYmUgYXV0aGVudGljYXRlZC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzZXQgb2Yg''@;'; put 'put ''Y3JlZGVudGlhbHMuIil8fHRoaXM7cmV0dXJuIEUubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihFLGsucHJvdG90eXBlKSxFfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uU0FTOUF1dGhFcnJvcj1LfSw4ODc1OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBW''@;'; put 'put ''IGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmlu''@;'; put 'put ''ZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5XZWJvdXRSZXNwb25zZUVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUpe3ZhciBqPUkuY2FsbCh0aGlzLCJFcnJvcjogZXJyb3Igd2hpbGUgcGFyc2luZyByZXNwb25zZSBmcm9tICIuY29uY2F0KEUp''@;'; put 'put ''KXx8dGhpcztyZXR1cm4gai51cmw9RSxqLm5hbWU9IldlYm91dFJlc3BvbnNlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihqLGsucHJvdG90eXBlKSxqfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uV2Vib3V0UmVzcG9uc2VFcnJvcj1LfSwxMzk1OmZ1bmN0aW9uKE0sTyxSKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxl''@;'; put 'put ''OlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaixWKX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0''@;'; put 'put ''aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxL''@;'; put 'put ''KFIoMTI0KSxPKSxLKFIoOTQ2NSksTyksSyhSKDUyNjcpLE8pLEsoUig5MjMyKSxPKSxLKFIoNTEwOSksTyksSyhSKDU1MTgpLE8pLEsoUig4NTMxKSxPKSxLKFIoOTA3OSksTyksSyhSKDMwOTYpLE8pLEsoUig2NzQzKSxPKSxLKFIoNzg2NCksTyksSyhSKDk1NzcpLE8pLEsoUig5Mjc5KSxP''@;'; put 'put ''KSxLKFIoODg3NSksTyl9LDEyMzA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVz''@;'; put 'put ''Y3JpcHRvcihrLEUpO1YmJiEoImdldCJpbiBWPyFrLl9fZXNNb2R1bGU6Vi53cml0YWJsZXx8Vi5jb25maWd1cmFibGUpfHwoVj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxq''@;'; put 'put ''KXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEsoUig0NzApLE8pLEsoUig0NjY2KSxPKSxLKFIoNDk3NSksTyksSyhSKDU3NjYpLE8pLEsoUigyMTUpLE8pLEsoUig0NzgyKSxPKSxLKFIoNDE2OCksTyksSyhSKDg1MTYpLE8pLEsoUigzODQwKSxPKSxLKFIoNTg0MSks''@;'; put 'put ''TyksSyhSKDE0MjgpLE8pLEsoUig2MDM4KSxPKSxLKFIoOTQ5MyksTyksSyhSKDMxNTMpLE8pLEsoUig4NjUwKSxPKSxLKFIoNjE3NyksTyksSyhSKDEzOTUpLE8pfSwzMzAyOmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIFI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oSSl7Zm9yKHZhciBrLEU9MSxqPWFyZ3VtZW50cy5sZW5ndGg7RTxqO0UrKylmb3IodmFyIFYgaW4gaz1hcmd1bWVudHNbRV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssVikmJihJW1ZdPWtbVl0pO3JldHVy''@;'; put 'put ''biBJfSxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSSxrLEUsail7cmV0dXJuIG5ldyhFfHwoRT1Qcm9taXNlKSkoZnVuY3Rpb24oVixCKXtmdW5jdGlvbiBZKHEpe3RyeXtVKGoubmV4dChxKSl9Y2F0Y2goZWUpe0IoZWUpfX1mdW5j''@;'; put 'put ''dGlvbiBYKHEpe3RyeXtVKGoudGhyb3cocSkpfWNhdGNoKGVlKXtCKGVlKX19ZnVuY3Rpb24gVShxKXt2YXIgZWU7cS5kb25lP1YocS52YWx1ZSk6KGVlPXEudmFsdWUsZWUgaW5zdGFuY2VvZiBFP2VlOm5ldyBFKGZ1bmN0aW9uKHRlKXt0ZShlZSl9KSkudGhlbihZLFgpfVUoKGo9ai5hcHBs''@;'; put 'put ''eShJLGt8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEksayl7dmFyIEUsaixWLEIsWT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZWWzBdKXRocm93IFZbMV07cmV0dXJuIFZbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gQj17bmV4''@;'; put 'put ''dDpYKDApLHRocm93OlgoMSkscmV0dXJuOlgoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihCW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEI7ZnVuY3Rpb24gWChVKXtyZXR1cm4gZnVuY3Rpb24ocSl7cmV0dXJuIGZ1bmN0aW9uKGVlKXtpZihFKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1k7KXRyeXtpZihFPTEsaiYmKFY9MiZlZVswXT9qLnJldHVybjplZVswXT9qLnRocm93fHwoKFY9ai5yZXR1cm4pJiZWLmNhbGwoaiksMCk6ai5uZXh0KSYmIShWPVYuY2FsbChqLGVlWzFd''@;'; put 'put ''KSkuZG9uZSlyZXR1cm4gVjtzd2l0Y2goaj0wLFYmJihlZT1bMiZlZVswXSxWLnZhbHVlXSksZWVbMF0pe2Nhc2UgMDpjYXNlIDE6Vj1lZTticmVhaztjYXNlIDQ6cmV0dXJuIFkubGFiZWwrKyx7dmFsdWU6ZWVbMV0sZG9uZTohMX07Y2FzZSA1OlkubGFiZWwrKyxqPWVlWzFdLGVlPVswXTtj''@;'; put 'put ''b250aW51ZTtjYXNlIDc6ZWU9WS5vcHMucG9wKCksWS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVj0oVj1ZLnRyeXMpLmxlbmd0aD4wJiZWW1YubGVuZ3RoLTFdKXx8NiE9PWVlWzBdJiYyIT09ZWVbMF0pKXtZPTA7Y29udGludWV9aWYoMz09PWVlWzBdJiYoIVZ8fGVlWzFd''@;'; put 'put ''PlZbMF0mJmVlWzFdPFZbM10pKXtZLmxhYmVsPWVlWzFdO2JyZWFrfWlmKDY9PT1lZVswXSYmWS5sYWJlbDxWWzFdKXtZLmxhYmVsPVZbMV0sVj1lZTticmVha31pZihWJiZZLmxhYmVsPFZbMl0pe1kubGFiZWw9VlsyXSxZLm9wcy5wdXNoKGVlKTticmVha31WWzJdJiZZLm9wcy5wb3AoKSxZ''@;'; put 'put ''LnRyeXMucG9wKCk7Y29udGludWV9ZWU9ay5jYWxsKEksWSl9Y2F0Y2godGUpe2VlPVs2LHRlXSxqPTB9ZmluYWxseXtFPVY9MH1pZig1JmVlWzBdKXRocm93IGVlWzFdO3JldHVybnt2YWx1ZTplZVswXT9lZVsxXTp2b2lkIDAsZG9uZTohMH19KFtVLHFdKX19fTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz12b2lkIDAsTy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz1mdW5jdGlvbihJLGspe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBFLGo7''@;'; put 'put ''cmV0dXJuIEsodGhpcyxmdW5jdGlvbihWKXtyZXR1cm4gRT17fSxrPy5sZW5ndGg/KGo9ay5yZWR1Y2UoZnVuY3Rpb24oQixZKXtyZXR1cm4gQltZXT1JW1ldLEJ9LHt9KSxFPVIoe3Jlc3VsdDpJLnJlc3VsdH0saikpOkU9SS5yZXN1bHQsWzIsRV19KX0pfX0sNzkyMjpmdW5jdGlvbihNLE8p''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgUj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSyxJLGssRSl7cmV0dXJuIG5ldyhrfHwoaz1Qcm9taXNlKSkoZnVuY3Rpb24oaixWKXtmdW5jdGlvbiBCKFUpe3RyeXtYKEUubmV4dChVKSl9Y2F0Y2gocSl7VihxKX19ZnVuY3Rpb24gWShVKXt0cnl7''@;'; put 'put ''WChFLnRocm93KFUpKX1jYXRjaChxKXtWKHEpfX1mdW5jdGlvbiBYKFUpe3ZhciBxO1UuZG9uZT9qKFUudmFsdWUpOihxPVUudmFsdWUscSBpbnN0YW5jZW9mIGs/cTpuZXcgayhmdW5jdGlvbihlZSl7ZWUocSl9KSkudGhlbihCLFkpfVgoKEU9RS5hcHBseShLLEl8fFtdKSkubmV4dCgpKX0p''@;'; put 'put ''fSx6PXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEssSSl7dmFyIGssRSxqLFYsQj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZqWzBdKXRocm93IGpbMV07cmV0dXJuIGpbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVj17bmV4dDpZKDApLHRocm93OlkoMSkscmV0''@;'; put 'put ''dXJuOlkoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihWW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFY7ZnVuY3Rpb24gWShYKXtyZXR1cm4gZnVuY3Rpb24oVSl7cmV0dXJuIGZ1bmN0aW9uKHEpe2lmKGspdGhyb3cgbmV3IFR5cGVFcnJvcigiR2Vu''@;'; put 'put ''ZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7QjspdHJ5e2lmKGs9MSxFJiYoaj0yJnFbMF0/RS5yZXR1cm46cVswXT9FLnRocm93fHwoKGo9RS5yZXR1cm4pJiZqLmNhbGwoRSksMCk6RS5uZXh0KSYmIShqPWouY2FsbChFLHFbMV0pKS5kb25lKXJldHVybiBqO3N3aXRjaChF''@;'; put 'put ''PTAsaiYmKHE9WzImcVswXSxqLnZhbHVlXSkscVswXSl7Y2FzZSAwOmNhc2UgMTpqPXE7YnJlYWs7Y2FzZSA0OnJldHVybiBCLmxhYmVsKysse3ZhbHVlOnFbMV0sZG9uZTohMX07Y2FzZSA1OkIubGFiZWwrKyxFPXFbMV0scT1bMF07Y29udGludWU7Y2FzZSA3OnE9Qi5vcHMucG9wKCksQi50''@;'; put 'put ''cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaj0oaj1CLnRyeXMpLmxlbmd0aD4wJiZqW2oubGVuZ3RoLTFdKXx8NiE9PXFbMF0mJjIhPT1xWzBdKSl7Qj0wO2NvbnRpbnVlfWlmKDM9PT1xWzBdJiYoIWp8fHFbMV0+alswXSYmcVsxXTxqWzNdKSl7Qi5sYWJlbD1xWzFdO2JyZWFr''@;'; put 'put ''fWlmKDY9PT1xWzBdJiZCLmxhYmVsPGpbMV0pe0IubGFiZWw9alsxXSxqPXE7YnJlYWt9aWYoaiYmQi5sYWJlbDxqWzJdKXtCLmxhYmVsPWpbMl0sQi5vcHMucHVzaChxKTticmVha31qWzJdJiZCLm9wcy5wb3AoKSxCLnRyeXMucG9wKCk7Y29udGludWV9cT1JLmNhbGwoSyxCKX1jYXRjaChl''@;'; put 'put ''ZSl7cT1bNixlZV0sRT0wfWZpbmFsbHl7az1qPTB9aWYoNSZxWzBdKXRocm93IHFbMV07cmV0dXJue3ZhbHVlOnFbMF0/cVsxXTp2b2lkIDAsZG9uZTohMH19KFtYLFVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5hc3luY0ZvckVhY2g9''@;'; put 'put ''dm9pZCAwLE8uYXN5bmNGb3JFYWNoPWZ1bmN0aW9uKEssSSl7cmV0dXJuIFIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGs7cmV0dXJuIHoodGhpcyxmdW5jdGlvbihFKXtzd2l0Y2goRS5sYWJlbCl7Y2FzZSAwOms9MCxFLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBrPEsubGVu''@;'; put 'put ''Z3RoP1s0LEkoS1trXSxrLEspXTpbMyw0XTtjYXNlIDI6RS5zZW50KCksRS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gaysrLFszLDFdO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX19LDM3OTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2''@;'; put 'put ''YWx1ZTohMH0pLE8uY29tcGFyZVRpbWVzdGFtcHM9dm9pZCAwLE8uY29tcGFyZVRpbWVzdGFtcHM9ZnVuY3Rpb24oUix6KXtyZXR1cm4gei50aW1lc3RhbXAuZ2V0VGltZSgpLVIudGltZXN0YW1wLmdldFRpbWUoKX19LDI0MDI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUxMDgp''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzRm9ybWF0c1RhYmxlPU8uY29udmVydFRvQ1NWPXZvaWQgMDt2YXIgSz1SKDY0NjcpLEk9Uig5Nzc4KTtPLmNvbnZlcnRUb0NTVj1mdW5jdGlvbihFLGope3ZhciBWO2lmKCFFW2pdKXRocm93KDAs''@;'; put 'put ''SS5wcmVmaXhNZXNzYWdlKSgiTm8gdGFibGUgcHJvdmlkZWQgdG8gYmUgY29udmVydGVkIHRvIENTVi4iLCJFcnJvciB3aGlsZSBjb252ZXJ0aW5nIHRvIENTVi4gIik7dmFyIEI9RVtqXTtpZighQXJyYXkuaXNBcnJheShCKSlyZXR1cm4iIjt2YXIgWSxYPW51bGw9PT0oVj1FWyIkIi5jb25j''@;'; put 'put ''YXQoaildKXx8dm9pZCAwPT09Vj92b2lkIDA6Vi5mb3JtYXRzLFU9W10scT0hMTtYJiYoVT1PYmplY3Qua2V5cyhYKS5tYXAoZnVuY3Rpb24odGUpe3JldHVybiIiLmNvbmNhdCh0ZSwiOiIpLmNvbmNhdChYW3RlXSl9KSk7dmFyIGVlPU9iamVjdC5rZXlzKEJbMF0pO3JldHVybiBlZS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKHRlKXtpZighWHx8IU9iamVjdC5rZXlzKFgpLmluY2x1ZGVzKHRlKSl7dmFyIG9lPSExLHNlPSExO2lmKEIuZm9yRWFjaChmdW5jdGlvbihiKXtudWxsPT09Ylt0ZV18fCJudW1iZXIiPT10eXBlb2YgYlt0ZV0/b2U9ITA6InN0cmluZyI9PXR5cGVvZiBiW3RlXSYmKDAs''@;'; put 'put ''Sy5pc1NwZWNpYWxNaXNzaW5nKShiW3RlXSkmJihzZT0hMCl9KSxvZSYmc2UpVS5wdXNoKCIiLmNvbmNhdCh0ZSwiOmJlc3QuIikpLFh8fChYPXt9KSxYW3RlXT0iYmVzdC4iO2Vsc2V7dmFyIGhlPW51bGwsdWU9ITEsY2U9LTEsRz1CLm1hcChmdW5jdGlvbihiLEQpe2lmKGJbdGVdfHwiIj09''@;'; put 'put ''PWJbdGVdKXtoZT91ZXx8KGNlPSh1ZT0oIiI9PT1iW3RlXXx8InN0cmluZyI9PXR5cGVvZiBiW3RlXT8iY2hhcnMiOiJudW1iZXIiKSE9PWhlKT9EKzE6LTEpOmhlPSIiPT09Ylt0ZV18fCJzdHJpbmciPT10eXBlb2YgYlt0ZV0/ImNoYXJzIjoibnVtYmVyIjt2YXIgTj12b2lkIDA7cmV0dXJu''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBiW3RlXSYmKE49ayhiW3RlXSkpLE59fSkuc29ydChmdW5jdGlvbihiLEQpe3JldHVybiBELWJ9KVswXTtHJiZHPjMyNzY1JiYocT0hMCksdWUmJnouZXJyb3IoIlJvdyAoIi5jb25jYXQoY2UsIiksIENvbHVtbiAoIikuY29uY2F0KHRlLCIpIGhhcyBtaXhlZCB0''@;'; put 'put ''eXBlczogRVJST1IiKSksVS5wdXNoKCIiLmNvbmNhdCh0ZSwiOiIpLmNvbmNhdCgiY2hhcnMiPT09aGU/IiRjaGFyIjoiIikuY29uY2F0KEd8fCgiY2hhcnMiPT09aGU/IjEiOiJiZXN0IiksIi4iKSl9fX0pLFgmJihVPVUuc29ydChmdW5jdGlvbih0ZSxvZSl7cmV0dXJuIGVlLmluZGV4T2Yo''@;'; put 'put ''dGUucmVwbGFjZSgvOi4qLywiIikpLWVlLmluZGV4T2Yob2UucmVwbGFjZSgvOi4qLywiIikpfSkpLHE/IkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIjooWT1CLm1hcChmdW5jdGlvbih0ZSl7cmV0dXJuIE9iamVjdC5rZXlzKHRlKS5tYXAoZnVuY3Rpb24ob2Usc2Upe3ZhciBoZSx1ZT10''@;'; put 'put ''ZVtvZV07aWYoIm51bWJlciI9PXR5cGVvZiB1ZSlyZXR1cm4gdWU7aWYoaGU9bnVsbD09PXVlPyIiOnVlLFgmJiJiZXN0LiI9PT1YW29lXSl7aWYoaGUmJiEoMCxLLmlzU3BlY2lhbE1pc3NpbmcpKGhlKSl0aHJvdyBuZXcgRXJyb3IoIkEgU3BlY2lhbCBtaXNzaW5nIHZhbHVlIGNhbiBvbmx5''@;'; put 'put ''IGJlIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tICdBJyB0byAnWicsICdfJywgJy5bYS16XScsICcuXyciKTt2YXIgY2U9aGUuaW5jbHVkZXMoIi4iKT8iIjoiLiI7cmV0dXJuIiIuY29uY2F0KGNlKS5jb25jYXQoaGUudG9Mb3dlckNhc2UoKSl9cmV0dXJuIGhlPWhlLnJlcGxhY2UoLyIvZywn''@;'; put 'put ''IiInKSwoaGU9JyInLmNvbmNhdChoZSwnIicpKS5zdWJzdHJpbmcoMSxoZS5sZW5ndGgtMSkuc2VhcmNoKC8oXHR8XG58XHJ8LHxcJ3xcIikvZ20pPDAmJihoZT1oZS5zdWJzdHJpbmcoMSxoZS5sZW5ndGgtMSkpLCIiPT09KGhlPWhlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIikpJiZVW3NlXS5p''@;'; put 'put ''bmNsdWRlcygiYmVzdCIpJiYoaGU9Ii4iKSxoZX0pLmpvaW4oIiwiKX0pLFUuam9pbigiLCIpLnJlcGxhY2UoLywvZywiICIpKyJcclxuIitZLmpvaW4oIlxyXG4iKSl9LE8uaXNGb3JtYXRzVGFibGU9ZnVuY3Rpb24oRSl7cmV0dXJuL15cJC4qLy50ZXN0KEUpfTt2YXIgaz1mdW5jdGlvbihF''@;'; put 'put ''KXtmb3IodmFyIGo9RS5sZW5ndGgsVj1FLmxlbmd0aC0xO1Y+PTA7Vi0tKXt2YXIgQj1FLmNoYXJDb2RlQXQoVik7Qj4xMjcmJkI8PTIwNDc/aisrOkI+MjA0NyYmQjw9NjU1MzUmJihqKz0yKSxCPj01NjMyMCYmQjw9NTczNDMmJlYtLX1yZXR1cm4gan19LDYxMTY6KE0sTyxSKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jcmVhdGVBeGlvc0luc3RhbmNlPXZvaWQgMDt2YXIgej1SKDk2NjkpO08uY3JlYXRlQXhpb3NJbnN0YW5jZT1mdW5jdGlvbihLLEkpe3JldHVybiB6LmRlZmF1bHQuY3JlYXRlKHtiYXNl''@;'; put 'put ''VVJMOkssaHR0cHNBZ2VudDpJfSl9fSw5ODI1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmRlbGF5PXZvaWQgMCxPLmRlbGF5PWZ1bmN0aW9uKFIpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih6KXty''@;'; put 'put ''ZXR1cm4gc2V0VGltZW91dCh6LFIpfSl9fSw5OTA6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihqLFYsQixZKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihYLFUp''@;'; put 'put ''e2Z1bmN0aW9uIHEob2Upe3RyeXt0ZShZLm5leHQob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIGVlKG9lKXt0cnl7dGUoWS50aHJvdyhvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gdGUob2Upe3ZhciBzZTtvZS5kb25lP1gob2UudmFsdWUpOihzZT1vZS52YWx1ZSxzZSBp''@;'; put 'put ''bnN0YW5jZW9mIEI/c2U6bmV3IEIoZnVuY3Rpb24oaGUpe2hlKHNlKX0pKS50aGVuKHEsZWUpfXRlKChZPVkuYXBwbHkoaixWfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihqLFYpe3ZhciBCLFksWCxVLHE9e2xhYmVsOjAsc2VudDpmdW5jdGlv''@;'; put 'put ''bigpe2lmKDEmWFswXSl0aHJvdyBYWzFdO3JldHVybiBYWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6ZWUoMCksdGhyb3c6ZWUoMSkscmV0dXJuOmVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXN9KSxVO2Z1bmN0aW9uIGVlKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe3JldHVybiBmdW5jdGlvbihzZSl7aWYoQil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoQj0xLFkmJihYPTImc2VbMF0/WS5yZXR1''@;'; put 'put ''cm46c2VbMF0/WS50aHJvd3x8KChYPVkucmV0dXJuKSYmWC5jYWxsKFkpLDApOlkubmV4dCkmJiEoWD1YLmNhbGwoWSxzZVsxXSkpLmRvbmUpcmV0dXJuIFg7c3dpdGNoKFk9MCxYJiYoc2U9WzImc2VbMF0sWC52YWx1ZV0pLHNlWzBdKXtjYXNlIDA6Y2FzZSAxOlg9c2U7YnJlYWs7Y2FzZSA0''@;'; put 'put ''OnJldHVybiBxLmxhYmVsKysse3ZhbHVlOnNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssWT1zZVsxXSxzZT1bMF07Y29udGludWU7Y2FzZSA3OnNlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFg9KFg9cS50cnlzKS5sZW5ndGg+MCYmWFtY''@;'; put 'put ''Lmxlbmd0aC0xXSl8fDYhPT1zZVswXSYmMiE9PXNlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1zZVswXSYmKCFYfHxzZVsxXT5YWzBdJiZzZVsxXTxYWzNdKSl7cS5sYWJlbD1zZVsxXTticmVha31pZig2PT09c2VbMF0mJnEubGFiZWw8WFsxXSl7cS5sYWJlbD1YWzFdLFg9c2U7YnJlYWt9''@;'; put 'put ''aWYoWCYmcS5sYWJlbDxYWzJdKXtxLmxhYmVsPVhbMl0scS5vcHMucHVzaChzZSk7YnJlYWt9WFsyXSYmcS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlfXNlPVYuY2FsbChqLHEpfWNhdGNoKGhlKXtzZT1bNixoZV0sWT0wfWZpbmFsbHl7Qj1YPTB9aWYoNSZzZVswXSl0aHJvdyBz''@;'; put 'put ''ZVsxXTtyZXR1cm57dmFsdWU6c2VbMF0/c2VbMV06dm9pZCAwLGRvbmU6ITB9fShbdGUsb2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5mZXRjaExvZz1PLmZldGNoTG9nQnlDaHVua3M9dm9pZCAwO3ZhciBFPVIoOTc3OCk7Ty5mZXRj''@;'; put 'put ''aExvZ0J5Q2h1bmtzPWZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBJKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LCgwLE8uZmV0Y2hMb2cpKGosVixCLDAsWSldO2Nhc2UgMTpy''@;'; put 'put ''ZXR1cm5bMixYLnNlbnQoKV19fSl9KX0sTy5mZXRjaExvZz1mdW5jdGlvbihqLFYsQixZLFgpe3JldHVybiBJKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFUscSxlZSx0ZSxvZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHNlKXtzd2l0Y2goc2UubGFiZWwpe2Nhc2UgMDpV''@;'; put 'put ''PXoubG9nZ2VyfHxLLHE9IiIsZWU9WDwxZTQ/WDoxZTQsc2UubGFiZWw9MTtjYXNlIDE6cmV0dXJuIFUuaW5mbygiRmV0Y2hpbmcgbG9ncyBmcm9tIGxpbmUgbm86ICIuY29uY2F0KFkrMSwiIHRvICIpLmNvbmNhdChZK2VlLCIgb2YgIikuY29uY2F0KFgsIi4iKSksWzQsai5nZXQoIiIuY29u''@;'; put 'put ''Y2F0KEIsIj9zdGFydD0iKS5jb25jYXQoWSwiJmxpbWl0PSIpLmNvbmNhdChlZSksVikudGhlbihmdW5jdGlvbihoZSl7cmV0dXJuIGhlLnJlc3VsdH0pLmNhdGNoKGZ1bmN0aW9uKGhlKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkoaGUsIkVycm9yIHdoaWxlIGdldHRpbmcgbG9nLiAiKX0p''@;'; put 'put ''XTtjYXNlIDI6aWYoMD09PSh0ZT1zZS5zZW50KCkpLml0ZW1zLmxlbmd0aClyZXR1cm5bMyw0XTtvZT10ZS5pdGVtcy5tYXAoZnVuY3Rpb24oaGUpe3JldHVybiBoZS5saW5lfSkuam9pbigiXG4iKSxxKz1vZSxZKz1lZSxzZS5sYWJlbD0zO2Nhc2UgMzppZihZPFgpcmV0dXJuWzMsMV07c2Uu''@;'; put 'put ''bGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzIscV19fSl9KX19LDcxNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmZvcm1hdERhdGFGb3JSZXF1ZXN0PXZvaWQgMDt2YXIgej1SKDI0MDIpLEs9Uig0Nzk5KTtP''@;'; put 'put ''LmZvcm1hdERhdGFGb3JSZXF1ZXN0PWZ1bmN0aW9uKEkpe3ZhciBrPVtdLEU9MCxqPXt9O2Zvcih2YXIgViBpbiBJKWlmKCEoMCx6LmlzRm9ybWF0c1RhYmxlKShWKXx8IU9iamVjdC5rZXlzKEkpLmluY2x1ZGVzKFYucmVwbGFjZSgvXlwkLywiIikpKXtFKyssKDAsei5pc0Zvcm1hdHNUYWJs''@;'; put 'put ''ZSkoVil8fGsucHVzaChWKTt2YXIgQj0oMCx6LmNvbnZlcnRUb0NTVikoSSxWKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Qil0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7''@;'; put 'put ''aWYoQi5sZW5ndGg+MTZlMyl7dmFyIFk9KDAsSy5zcGxpdENodW5rcykoQik7alsic2FzanMiLmNvbmNhdChFLCJkYXRhMCIpXT1ZLmxlbmd0aCxZLmZvckVhY2goZnVuY3Rpb24oWCxVKXtqWyJzYXNqcyIuY29uY2F0KEUsImRhdGEiKS5jb25jYXQoVSsxKV09WH0pfWVsc2Ugalsic2FzanMi''@;'; put 'put ''LmNvbmNhdChFLCJkYXRhIildPUJ9cmV0dXJuIGouc2FzanNfdGFibGVzPWsuam9pbigiICIpLGp9fSw4NDU4OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0Rm9ybURhdGE9dm9pZCAwO3ZhciB6PVIo''@;'; put 'put ''NTkyOCksSz1SKDYyMzApO08uZ2V0Rm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4oMCx6LmlzTm9kZSkoKT9uZXcgSzpuZXcgRm9ybURhdGF9fSwxODg0OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0''@;'; put 'put ''VmFsaWRKc29uPXZvaWQgMDt2YXIgej1SKDEzOTUpO08uZ2V0VmFsaWRKc29uPWZ1bmN0aW9uKEspe3RyeXtpZihudWxsPT1LKXRocm93IG5ldyB6LkludmFsaWRKc29uRXJyb3I7aWYoQXJyYXkuaXNBcnJheShLKSl0aHJvdyBuZXcgei5Kc29uUGFyc2VBcnJheUVycm9yO3JldHVybiJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgSz9LOiIiPT09Sz97fTpKU09OLnBhcnNlKEspfWNhdGNoKEkpe3Rocm93IEkgaW5zdGFuY2VvZiB6Lkpzb25QYXJzZUFycmF5RXJyb3I/STpuZXcgei5JbnZhbGlkSnNvbkVycm9yfX19LDU5Mjg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0''@;'; put 'put ''aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrLEUpO1YmJiEoImdldCJpbiBWPyFrLl9fZXNNb2R1bGU6Vi53cml0YWJsZXx8Vi5jb25maWd1''@;'; put 'put ''cmFibGUpfHwoVj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5j''@;'; put 'put ''dGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEsoUigzMzAyKSxPKSxLKFIoNzkyMiks''@;'; put 'put ''TyksSyhSKDM3OTMpLE8pLEsoUigyNDAyKSxPKSxLKFIoNjExNiksTyksSyhSKDk4MjUpLE8pLEsoUig5OTApLE8pLEsoUigxODg0KSxPKSxLKFIoNDI0MyksTyksSyhSKDI1NyksTyksSyhSKDIpLE8pLEsoUigyNjE1KSxPKSxLKFIoMjkyMCksTyksSyhSKDI0MjIpLE8pLEsoUigzMSksTyks''@;'; put 'put ''SyhSKDY1MTUpLE8pLEsoUig2NDE2KSxPKSxLKFIoMjgxMyksTyksSyhSKDk4OTYpLE8pLEsoUig0Nzk5KSxPKSxLKFIoNDUxNiksTyksSyhSKDg0NTgpLE8pfSw0MjQzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01v''@;'; put 'put ''ZHVsZSIse3ZhbHVlOiEwfSksTy5pc05vZGU9dm9pZCAwLE8uaXNOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXomJm51bGwhPXoudmVyc2lvbnMmJm51bGwhPXoudmVyc2lvbnMubm9kZX19LDI1NzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc1JlbGF0aXZlUGF0aD12b2lkIDAsTy5pc1JlbGF0aXZlUGF0aD1mdW5jdGlvbihSKXtyZXR1cm4hIVImJiFSLnN0YXJ0c1dpdGgoIi8iKX19LDI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1''@;'; put 'put ''bGUiLHt2YWx1ZTohMH0pLE8uaXNVcmk9dm9pZCAwLE8uaXNVcmk9ZnVuY3Rpb24oUil7cmV0dXJuL15cL2ZvbGRlcnNcL2ZvbGRlcnNcLy8udGVzdChSKX19LDI2MTU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LE8uaXNVcmw9dm9pZCAwLE8uaXNVcmw9ZnVuY3Rpb24oUil7dHJ5e3ZhciB6PW5ldyBVUkwoUik7aWYoIVsiaHR0cDoiLCJodHRwczoiXS5pbmNsdWRlcyh6LnByb3RvY29sKSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMH19LDEyMTA6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIFIsVix6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihVLHEpe2Z1bmN0aW9uIGVlKHNlKXt0cnl7b2UoWC5uZXh0KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiB0ZShzZSl7dHJ5''@;'; put 'put ''e29lKFgudGhyb3coc2UpKX1jYXRjaChoZSl7cShoZSl9fWZ1bmN0aW9uIG9lKHNlKXt2YXIgaGU7c2UuZG9uZT9VKHNlLnZhbHVlKTooaGU9c2UudmFsdWUsaGUgaW5zdGFuY2VvZiBZP2hlOm5ldyBZKGZ1bmN0aW9uKHVlKXt1ZShoZSl9KSkudGhlbihlZSx0ZSl9b2UoKFg9WC5hcHBseShW''@;'; put 'put ''LEJ8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFYsQil7dmFyIFksWCxVLHEsZWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVVswXSl0aHJvdyBVWzFdO3JldHVybiBVWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHE9e25leHQ6''@;'; put 'put ''dGUoMCksdGhyb3c6dGUoMSkscmV0dXJuOnRlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxxO2Z1bmN0aW9uIHRlKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe3JldHVybiBmdW5jdGlvbihoZSl7aWYo''@;'; put 'put ''WSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtlZTspdHJ5e2lmKFk9MSxYJiYoVT0yJmhlWzBdP1gucmV0dXJuOmhlWzBdP1gudGhyb3d8fCgoVT1YLnJldHVybikmJlUuY2FsbChYKSwwKTpYLm5leHQpJiYhKFU9VS5jYWxsKFgs''@;'; put 'put ''aGVbMV0pKS5kb25lKXJldHVybiBVO3N3aXRjaChYPTAsVSYmKGhlPVsyJmhlWzBdLFUudmFsdWVdKSxoZVswXSl7Y2FzZSAwOmNhc2UgMTpVPWhlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZWUubGFiZWwrKyx7dmFsdWU6aGVbMV0sZG9uZTohMX07Y2FzZSA1OmVlLmxhYmVsKyssWD1oZVsxXSxo''@;'; put 'put ''ZT1bMF07Y29udGludWU7Y2FzZSA3OmhlPWVlLm9wcy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVT0oVT1lZS50cnlzKS5sZW5ndGg+MCYmVVtVLmxlbmd0aC0xXSl8fDYhPT1oZVswXSYmMiE9PWhlWzBdKSl7ZWU9MDtjb250aW51ZX1pZigzPT09aGVbMF0m''@;'; put 'put ''JighVXx8aGVbMV0+VVswXSYmaGVbMV08VVszXSkpe2VlLmxhYmVsPWhlWzFdO2JyZWFrfWlmKDY9PT1oZVswXSYmZWUubGFiZWw8VVsxXSl7ZWUubGFiZWw9VVsxXSxVPWhlO2JyZWFrfWlmKFUmJmVlLmxhYmVsPFVbMl0pe2VlLmxhYmVsPVVbMl0sZWUub3BzLnB1c2goaGUpO2JyZWFrfVVb''@;'; put 'put ''Ml0mJmVlLm9wcy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlfWhlPUIuY2FsbChWLGVlKX1jYXRjaCh1ZSl7aGU9WzYsdWVdLFg9MH1maW5hbGx5e1k9VT0wfWlmKDUmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJue3ZhbHVlOmhlWzBdP2hlWzFdOnZvaWQgMCxkb25lOiEwfX0oW29lLHNl''@;'; put 'put ''XSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ub3BlbkxvZ2luUHJvbXB0PXZvaWQgMCwoVj1SfHwoUj17fSkpLnN0eWxlcz0ic2FzanNBZGFwdGVyU3R5bGVzIixWLm92ZXJsYXk9InNhc2pzQWRhcHRlckxvZ2luUHJvbXB0QkciLFYuZGlh''@;'; put 'put ''bG9nPSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdCI7dmFyIEk9InNhc2pzLWFkYXB0ZXIiLGs9e3BvcFVwOiIiLmNvbmNhdChJLCJwb3BVcCIpLHBvcFVwQkc6IiIuY29uY2F0KEksInBvcFVwQkciKX07Ty5vcGVuTG9naW5Qcm9tcHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFByb21pc2UoZnVu''@;'; put 'put ''Y3Rpb24oVil7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQixZLFgsVSxxLGVlLHRlLG9lO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oc2Upe3JldHVybihCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIikpLmlkPVIuc3R5bGVzLEIuaW5uZXJUZXh0''@;'; put 'put ''PWosKFk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlkPVIub3ZlcmxheSxZLmNsYXNzTGlzdC5hZGQoay5wb3BVcEJHKSwoWD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaWQ9Ui5kaWFsb2csWC5jbGFzc0xpc3QuYWRkKGsucG9wVXApLChVPWRvY3VtZW50LmNyZWF0''@;'; put 'put ''ZUVsZW1lbnQoImgxIikpLmlubmVyVGV4dD0iU2Vzc2lvbiBFeHBpcmVkISIsWC5hcHBlbmRDaGlsZChVKSxxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLChlZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikpLmlubmVyVGV4dD0iWW91IG5lZWQgdG8gcmVsb2dpbiwgY2xp''@;'; put 'put ''Y2sgT0sgdG8gbG9naW4uIixxLmFwcGVuZENoaWxkKGVlKSxYLmFwcGVuZENoaWxkKHEpLCh0ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKSkuY2xhc3NMaXN0LmFkZCgiY2FuY2VsIiksdGUuaW5uZXJUZXh0PSJDYW5jZWwiLHRlLm9uY2xpY2s9ZnVuY3Rpb24oKXtFKCksVigh''@;'; put 'put ''MSl9LFguYXBwZW5kQ2hpbGQodGUpLChvZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKSkuY2xhc3NMaXN0LmFkZCgiY29uZmlybSIpLG9lLmlubmVyVGV4dD0iT2siLG9lLm9uY2xpY2s9ZnVuY3Rpb24oKXtFKCksVighMCl9LFguYXBwZW5kQ2hpbGQob2UpLGRvY3VtZW50LmJv''@;'; put 'put ''ZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChCKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFkpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoWCksWzJdfSl9KX0pfTt2YXIgRT1mdW5jdGlvbigpe09iamVjdC52YWx1ZXMoUikuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihWKXt2YXIgQixZPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFYpO251bGw9PT0oQj1ZPy5wYXJlbnROb2RlKXx8dm9pZCAwPT09Qnx8Qi5yZW1vdmVDaGlsZChZKX0pLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImF1dG8ifSxqPSJcbi4iLmNvbmNhdChrLnBvcFVw''@;'; put 'put ''QkcsIiAsXG4uIikuY29uY2F0KGsucG9wVXAsIiB7XG4gIHotaW5kZXg6IDEwMDAwO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVy''@;'; put 'put ''LWJveDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiA0MCU7XG4gIGxlZnQ6IDUwJTtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LWZhbWlseTogJ1BUIFNhbnMnLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZjtcbiAg''@;'; put 'put ''Ym9yZGVyLXN0eWxlOiBub25lO1xuICB6LWluZGV4OiA5OTk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBt''@;'; put 'put ''YXgtaGVpZ2h0OiAzMDBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiA+IGgxIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXpp''@;'; put 'put ''bmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDVweDtcbiAgbWluLWhlaWdodDogNDBweDtcbiAgZm9udC1zaXplOiAxLjJlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFy''@;'; put 'put ''ZW50O1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG4gIGJvcmRlci13aWR0aDogNXB4O1xuICBib3JkZXItY29sb3I6IGJsYWNrO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLTEwOHB4KTtcbiAgbWFyZ2luOiAw''@;'; put 'put ''O1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci13''@;'; put 'put ''aWR0aDogMXB4O1xuICBib3JkZXItY29sb3I6ICNjY2M7XG4gIGJvcmRlci1zdHlsZTogbm9uZSBub25lIHNvbGlkIG5vbmU7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgPiBkaXYgPiBzcGFuIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgYm94LXNp''@;'; put 'put ''emluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IDEwOHB4O1xuICB2ZXJ0aWNhbC1hbGln''@;'; put 'put ''bjogbWlkZGxlO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiAuY2FuY2VsIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiAuY29uZmlybSB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiID4g''@;'; put 'put ''YnV0dG9uIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMTBweDtcbiAgd2lkdGg6IDUwJTtcbiAgYm9yZGVyOiAxcHgg''@;'; put 'put ''bm9uZSAjY2NjO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgaGVpZ2h0OiA1MHB4O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDEsIDEsIDEsIDAuMik7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiA+IGJ1dHRvbjpob3ZlciB7''@;'; put 'put ''XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cbi4iKS5jb25jYXQoay5wb3BVcEJHLCIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1h''@;'; put 'put ''cmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgb3BhY2l0eTogMC45NTtcbiAgei1pbmRleDogNTA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudCgjMDM3OGNkLCAjMDEyMDM2KTtcbn1cbiIpfSwyOTIwOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm5lZWRzUmV0cnk9dm9pZCAwLE8ubmVlZHNSZXRyeT1mdW5jdGlvbihSKXtyZXR1cm4hIVImJihSLmluY2x1ZGVzKCciZXJyb3JDb2RlIjo0MDMnKSYmUi5pbmNsdWRlcygiX2NzcmYiKSYmUi5pbmNsdWRlcygiWC1DU1JGLVRPS0VO''@;'; put 'put ''Iil8fFIuaW5jbHVkZXMoJyJzdGF0dXMiOjQwMycpJiZSLmluY2x1ZGVzKCciZXJyb3IiOiJGb3JiaWRkZW4iJyl8fFIuaW5jbHVkZXMoJyJzdGF0dXMiOjQ0OScpJiZSLmluY2x1ZGVzKCJBdXRoZW50aWNhdGlvbiBzdWNjZXNzLCByZXRyeSBvcmlnaW5hbCByZXF1ZXN0IikpfX0sMjQyMjoo''@;'; put 'put ''TSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5wYXJzZUdlbmVyYXRlZENvZGU9dm9pZCAwLE8ucGFyc2VHZW5lcmF0ZWRDb2RlPWZ1bmN0aW9uKFIpe3JldHVybiBSLnNwbGl0KCJcbiIpLmZpbHRlcihmdW5jdGlv''@;'; put 'put ''bih6KXtyZXR1cm4gei50cmltKCkuc3RhcnRzV2l0aCgiTVBSSU5UIil9KS5qb2luKCJcclxuIil9fSwzMTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VTYXNWaXlhTG9n''@;'; put 'put ''PXZvaWQgMCxPLnBhcnNlU2FzVml5YUxvZz1mdW5jdGlvbihLKXt2YXIgSTt0cnl7ST1LLml0ZW1zP0suaXRlbXMubWFwKGZ1bmN0aW9uKGspe3JldHVybiBrLmxpbmV9KS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KEspfWNhdGNoKGspe3ouZXJyb3IoIkFuIGVycm9yIGhhcyBvY2N1cnJl''@;'; put 'put ''ZCB3aGlsZSBwYXJzaW5nIHRoZSBsb2cgcmVzcG9uc2UiLGspLEk9S31yZXR1cm4gSX19LDY1MTU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VTb3VyY2VDb2RlPXZvaWQgMCxPLnBhcnNlU291cmNl''@;'; put 'put ''Q29kZT1mdW5jdGlvbihSKXtyZXR1cm4gUi5zcGxpdCgiXG4iKS5maWx0ZXIoZnVuY3Rpb24oeil7cmV0dXJuIHoudHJpbSgpLnN1YnN0cmluZygwLDEwKS50cmltU3RhcnQoKS5tYXRjaCgvXlxkLyl9KS5qb2luKCJcclxuIil9fSw2NDE2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGssRSxqLFYpe3JldHVybiBuZXcoanx8KGo9UHJvbWlzZSkpKGZ1bmN0aW9uKEIsWSl7ZnVuY3Rpb24gWChlZSl7dHJ5e3EoVi5uZXh0KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlvbiBVKGVlKXt0cnl7cShWLnRocm93''@;'; put 'put ''KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlvbiBxKGVlKXt2YXIgdGU7ZWUuZG9uZT9CKGVlLnZhbHVlKToodGU9ZWUudmFsdWUsdGUgaW5zdGFuY2VvZiBqP3RlOm5ldyBqKGZ1bmN0aW9uKG9lKXtvZSh0ZSl9KSkudGhlbihYLFUpfXEoKFY9Vi5hcHBseShrLEV8fFtdKSkubmV4dCgp''@;'; put 'put ''KX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGssRSl7dmFyIGosVixCLFksWD17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZCWzBdKXRocm93IEJbMV07cmV0dXJuIEJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWT17bmV4dDpVKDApLHRocm93OlUoMSks''@;'; put 'put ''cmV0dXJuOlUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihZW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFk7ZnVuY3Rpb24gVShxKXtyZXR1cm4gZnVuY3Rpb24oZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7aWYoail0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtYOyl0cnl7aWYoaj0xLFYmJihCPTImdGVbMF0/Vi5yZXR1cm46dGVbMF0/Vi50aHJvd3x8KChCPVYucmV0dXJuKSYmQi5jYWxsKFYpLDApOlYubmV4dCkmJiEoQj1CLmNhbGwoVix0ZVsxXSkpLmRvbmUpcmV0dXJuIEI7''@;'; put 'put ''c3dpdGNoKFY9MCxCJiYodGU9WzImdGVbMF0sQi52YWx1ZV0pLHRlWzBdKXtjYXNlIDA6Y2FzZSAxOkI9dGU7YnJlYWs7Y2FzZSA0OnJldHVybiBYLmxhYmVsKysse3ZhbHVlOnRlWzFdLGRvbmU6ITF9O2Nhc2UgNTpYLmxhYmVsKyssVj10ZVsxXSx0ZT1bMF07Y29udGludWU7Y2FzZSA3OnRl''@;'; put 'put ''PVgub3BzLnBvcCgpLFgudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEI9KEI9WC50cnlzKS5sZW5ndGg+MCYmQltCLmxlbmd0aC0xXSl8fDYhPT10ZVswXSYmMiE9PXRlWzBdKSl7WD0wO2NvbnRpbnVlfWlmKDM9PT10ZVswXSYmKCFCfHx0ZVsxXT5CWzBdJiZ0ZVsxXTxCWzNd''@;'; put 'put ''KSl7WC5sYWJlbD10ZVsxXTticmVha31pZig2PT09dGVbMF0mJlgubGFiZWw8QlsxXSl7WC5sYWJlbD1CWzFdLEI9dGU7YnJlYWt9aWYoQiYmWC5sYWJlbDxCWzJdKXtYLmxhYmVsPUJbMl0sWC5vcHMucHVzaCh0ZSk7YnJlYWt9QlsyXSYmWC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRp''@;'; put 'put ''bnVlfXRlPUUuY2FsbChrLFgpfWNhdGNoKG9lKXt0ZT1bNixvZV0sVj0wfWZpbmFsbHl7aj1CPTB9aWYoNSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm57dmFsdWU6dGVbMF0/dGVbMV06dm9pZCAwLGRvbmU6ITB9fShbcSxlZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KSxPLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2U9dm9pZCAwO3ZhciBJPVIoNTkyOCk7Ty5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPWZ1bmN0aW9uKGssRSxqKXtyZXR1cm4geih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBWLEI7cmV0dXJu''@;'; put 'put ''IEsodGhpcyxmdW5jdGlvbihZKXtpZihWPWsuc3BsaXQoLzxpZnJhbWUgc3R5bGU9IndpZHRoOiA5OSU7IGhlaWdodDogNTAwcHgiIHNyYz0ifDxpZnJhbWUgc3R5bGU9IndpZHRoOiA5OSU7IGhlaWdodDogNTAwcHg7IGJhY2tncm91bmQtY29sb3I6Q2FudmFzOyIgc3JjPS8pWzFdLCEoQj1W''@;'; put 'put ''P1Yuc3BsaXQoLyI+PFwvaWZyYW1lPnw+PFwvaWZyYW1lPi8pWzBdOm51bGwpKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgd2Vib3V0IGZpbGUgVVJMLiIpO3JldHVyblsyLEUuZ2V0KGorQix2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKGZ1bmN0aW9uKFgpe3JldHVybigwLEku''@;'; put 'put ''Z2V0VmFsaWRKc29uKShYLnJlc3VsdCl9KV19KX0pfX0sMjgxMzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VXZWJvdXRSZXNwb25zZT12b2lkIDA7dmFyIEs9UigxMzk1''@;'; put 'put ''KTtPLnBhcnNlV2Vib3V0UmVzcG9uc2U9ZnVuY3Rpb24oSSxrKXt2YXIgRT0iIjtpZihJLmluY2x1ZGVzKCI+PndlYm91dEJFR0lOPDwiKSl0cnl7RT1JLnNwbGl0KCI+PndlYm91dEJFR0lOPDwiKVsxXS5zcGxpdCgiPj53ZWJvdXRFTkQ8PCIpWzBdfWNhdGNoKGope2lmKGspdGhyb3cgbmV3''@;'; put 'put ''IEsuV2Vib3V0UmVzcG9uc2VFcnJvcihrKTtFPSIiLHouZXJyb3Ioail9cmV0dXJuIEV9fSwxMTcwOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5PXZvaWQgMDt2YXIg''@;'; put 'put ''Uj1bIkxvZyBPZmYiXTtPLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5PWZ1bmN0aW9uKHope3ZhciBLPXo/Lm1hdGNoKC8idGl0bGUiOlxzPyIuKj8iLyksST1LPy5bMF0uc3BsaXQoIjoiKVsxXS50cmltKCksaz1JPy5pbmRleE9mKCIgIik7cmV0dXJuIEk/KFIubWFwKGZ1bmN0aW9uKEUpe3Zh''@;'; put 'put ''ciBqPUk/LmluZGV4T2YoRSl8fC0xO2o+LTEmJihrPWorRS5sZW5ndGgpfSksSS5zbGljZShrLC0xKS50cmltKCkpOiJ1bmtub3duIn19LDk4OTY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uc2VyaWFsaXpl''@;'; put 'put ''PXZvaWQgMCxPLnNlcmlhbGl6ZT1mdW5jdGlvbihSKXt2YXIgej1bXTtmb3IodmFyIEsgaW4gUilpZihSLmhhc093blByb3BlcnR5KEspKWlmKFJbS11pbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgST0wLGs9UltLXS5sZW5ndGg7STxrO0krKyl6LnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KEsp''@;'; put 'put ''KyI9IitlbmNvZGVVUklDb21wb25lbnQoUltLXVtJXSkpO2Vsc2Ugei5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChLKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KFJbS10pKTtyZXR1cm4gei5qb2luKCImIil9fSw0Nzk5OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnNwbGl0Q2h1bmtzPXZvaWQgMCxPLnNwbGl0Q2h1bmtzPWZ1bmN0aW9uKFIpe2Zvcih2YXIgej0xNmUzLEs9TWF0aC5jZWlsKFIubGVuZ3RoL3opLEk9bmV3IEFycmF5KEspLGs9MCxFPTA7azxLOysrayxFKz16KUlba109Ui5zdWJzdHIo''@;'; put 'put ''RSx6KTtyZXR1cm4gSX19LDQ1MTY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udmFsaWRhdGVJbnB1dD1PLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPU8uTU9SRV9JTkZPPXZvaWQgMCxPLk1PUkVfSU5GTz0i''@;'; put 'put ''Rm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9zYXNqcy5pby9zYXNqcy1hZGFwdGVyLyNyZXF1ZXN0LXJlc3BvbnNlIixPLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPSJQYXJhbWV0ZXIgZGF0YSBjb250YWlucyBpbnZhbGlkIHRhYmxlIHN0cnVjdHVyZS4gIi5jb25jYXQoTy5NT1JFX0lORk8p''@;'; put 'put ''LE8udmFsaWRhdGVJbnB1dD1mdW5jdGlvbih6KXtpZihudWxsPT09eilyZXR1cm57c3RhdHVzOiEwLG1zZzoiIn07aWYoIm9iamVjdCIhPT1SKHopKXJldHVybntzdGF0dXM6ITEsbXNnOk8uSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkV9O3ZhciBLPWZ1bmN0aW9uKFgpe3JldHVybiBYLm1hdGNo''@;'; put 'put ''KC9eXCQuKi8pJiZPYmplY3Qua2V5cyh6KS5pbmNsdWRlcyhYLnJlcGxhY2UoL15cJC8sIiIpKX07Zm9yKHZhciBJIGluIHope2lmKCFJLm1hdGNoKC9eW2EtekEtWl9dLykmJiFLKEkpKXJldHVybntzdGF0dXM6ITEsbXNnOiJGaXJzdCBsZXR0ZXIgb2YgdGFibGUgc2hvdWxkIGJlIGFscGhh''@;'; put 'put ''YmV0IG9yIHVuZGVyc2NvcmUuIn07aWYoIUkubWF0Y2goL15bYS16QS1aX11bYS16QS1aMC05X10qJC8pJiYhSyhJKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiVGFibGUgbmFtZSBzaG91bGQgYmUgYWxwaGFudW1lcmljLiJ9O2lmKEkubGVuZ3RoPjMyKXJldHVybntzdGF0dXM6ITEsbXNnOiJN''@;'; put 'put ''YXhpbXVtIGxlbmd0aCBmb3IgdGFibGUgbmFtZSBjb3VsZCBiZSAzMiBjaGFyYWN0ZXJzLiJ9O2lmKCJBcnJheSIhPT1SKHpbSV0pJiYhSyhJKSlyZXR1cm57c3RhdHVzOiExLG1zZzpPLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFfTtmb3IodmFyIGs9MCxFPXpbSV07azxFLmxlbmd0aDtrKysp''@;'; put 'put ''e3ZhciBqPUVba107aWYoIm9iamVjdCIhPT1SKGopKXJldHVybntzdGF0dXM6ITEsbXNnOiJUYWJsZSAiLmNvbmNhdChJLCIgY29udGFpbnMgaW52YWxpZCBzdHJ1Y3R1cmUuICIpLmNvbmNhdChPLk1PUkVfSU5GTyl9O2Zvcih2YXIgVj0wLEI9T2JqZWN0LmtleXMoaik7VjxCLmxlbmd0aDtW''@;'; put 'put ''Kyspe3ZhciBZPUJbVl07aWYodm9pZCAwPT09altZXSlyZXR1cm57c3RhdHVzOiExLG1zZzoiQSByb3cgaW4gdGFibGUgIi5jb25jYXQoSSwiIGNvbnRhaW5zIGludmFsaWQgdmFsdWUuIENhbid0IGFzc2lnbiB1bmRlZmluZWQgdG8gIikuY29uY2F0KFksIi4iKX19fX1yZXR1cm57c3RhdHVz''@;'; put 'put ''OiEwLG1zZzoiIn19O3ZhciBSPWZ1bmN0aW9uKHope3JldHVybiBBcnJheS5pc0FycmF5KHopPyJBcnJheSI6dHlwZW9mIHp9fSw4OTgxOihNLE8pPT57InVzZSBzdHJpY3QiO08uZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKFIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24o''@;'; put 'put ''Li4ueil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHpbei5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChLLEkpPT57Ui5jYWxsKHRoaXMsLi4ueiwoayxFKT0+bnVsbCE9az9JKGspOksoRSkpfSk7Ui5hcHBseSh0aGlzLHopfSwibmFtZSIse3ZhbHVlOlIubmFtZX0pfSxPLmZyb21Qcm9t''@;'; put 'put ''aXNlPWZ1bmN0aW9uKFIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4ueil7Y29uc3QgSz16W3oubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBLKXJldHVybiBSLmFwcGx5KHRoaXMseik7Ui5hcHBseSh0aGlzLHouc2xpY2UoMCwtMSkpLnRoZW4oST0+''@;'; put 'put ''SyhudWxsLEkpLEspfSwibmFtZSIse3ZhbHVlOlIubmFtZX0pfX0sNDU2NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNzQxOCksSz1SKDcxMjkpLEk9L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVm''@;'; put 'put ''Zl0rLyxrPS9bXG5cclx0XS9nLEU9L15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcL1wvLyxqPS86XGQrJC8sVj0vXihbYS16XVthLXowLTkuKy1dKjopPyhcL1wvKT8oW1xcL10rKT8oW1xTXHNdKikvaSxCPS9eW2EtekEtWl06LztmdW5jdGlvbiBZKHNlKXtyZXR1cm4oc2V8fCIiKS50b1N0''@;'; put 'put ''cmluZygpLnJlcGxhY2UoSSwiIil9dmFyIFg9W1siIyIsImhhc2giXSxbIj8iLCJxdWVyeSJdLGZ1bmN0aW9uKHNlLGhlKXtyZXR1cm4gZWUoaGUucHJvdG9jb2wpP3NlLnJlcGxhY2UoL1xcL2csIi8iKTpzZX0sWyIvIiwicGF0aG5hbWUiXSxbIkAiLCJhdXRoIiwxXSxbTmFOLCJob3N0Iix2''@;'; put 'put ''b2lkIDAsMSwxXSxbLzooXGQqKSQvLCJwb3J0Iix2b2lkIDAsMV0sW05hTiwiaG9zdG5hbWUiLHZvaWQgMCwxLDFdXSxVPXtoYXNoOjEscXVlcnk6MX07ZnVuY3Rpb24gcShzZSl7dmFyIGhlLHVlPSh0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09Ui5nP1IuZzp0eXBlb2Ygc2Vs''@;'; put 'put ''ZjwidSI/c2VsZjp7fSkubG9jYXRpb258fHt9LGNlPXt9LEc9dHlwZW9mKHNlPXNlfHx1ZSk7aWYoImJsb2I6Ij09PXNlLnByb3RvY29sKWNlPW5ldyBvZSh1bmVzY2FwZShzZS5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1HKWZvcihoZSBpbiBjZT1uZXcgb2Uoc2Use30pLFUp''@;'; put 'put ''ZGVsZXRlIGNlW2hlXTtlbHNlIGlmKCJvYmplY3QiPT09Ryl7Zm9yKGhlIGluIHNlKWhlIGluIFV8fChjZVtoZV09c2VbaGVdKTt2b2lkIDA9PT1jZS5zbGFzaGVzJiYoY2Uuc2xhc2hlcz1FLnRlc3Qoc2UuaHJlZikpfXJldHVybiBjZX1mdW5jdGlvbiBlZShzZSl7cmV0dXJuImZpbGU6Ij09''@;'; put 'put ''PXNlfHwiZnRwOiI9PT1zZXx8Imh0dHA6Ij09PXNlfHwiaHR0cHM6Ij09PXNlfHwid3M6Ij09PXNlfHwid3NzOiI9PT1zZX1mdW5jdGlvbiB0ZShzZSxoZSl7c2U9KHNlPVkoc2UpKS5yZXBsYWNlKGssIiIpLGhlPWhlfHx7fTt2YXIgdWUsY2U9Vi5leGVjKHNlKSxHPWNlWzFdP2NlWzFdLnRv''@;'; put 'put ''TG93ZXJDYXNlKCk6IiIsYj0hIWNlWzJdLEQ9ISFjZVszXSxIPTA7cmV0dXJuIGI/RD8odWU9Y2VbMl0rY2VbM10rY2VbNF0sSD1jZVsyXS5sZW5ndGgrY2VbM10ubGVuZ3RoKToodWU9Y2VbMl0rY2VbNF0sSD1jZVsyXS5sZW5ndGgpOkQ/KHVlPWNlWzNdK2NlWzRdLEg9Y2VbM10ubGVuZ3Ro''@;'; put 'put ''KTp1ZT1jZVs0XSwiZmlsZToiPT09Rz9IPj0yJiYodWU9dWUuc2xpY2UoMikpOmVlKEcpP3VlPWNlWzRdOkc/YiYmKHVlPXVlLnNsaWNlKDIpKTpIPj0yJiZlZShoZS5wcm90b2NvbCkmJih1ZT1jZVs0XSkse3Byb3RvY29sOkcsc2xhc2hlczpifHxlZShHKSxzbGFzaGVzQ291bnQ6SCxyZXN0''@;'; put 'put ''OnVlfX1mdW5jdGlvbiBvZShzZSxoZSx1ZSl7aWYoc2U9KHNlPVkoc2UpKS5yZXBsYWNlKGssIiIpLCEodGhpcyBpbnN0YW5jZW9mIG9lKSlyZXR1cm4gbmV3IG9lKHNlLGhlLHVlKTt2YXIgY2UsRyxiLEQsSCxOLGc9WC5zbGljZSgpLEM9dHlwZW9mIGhlLFM9dGhpcyx2PTA7Zm9yKCJvYmpl''@;'; put 'put ''Y3QiIT09QyYmInN0cmluZyIhPT1DJiYodWU9aGUsaGU9bnVsbCksdWUmJiJmdW5jdGlvbiIhPXR5cGVvZiB1ZSYmKHVlPUsucGFyc2UpLGNlPSEoRz10ZShzZXx8IiIsaGU9cShoZSkpKS5wcm90b2NvbCYmIUcuc2xhc2hlcyxTLnNsYXNoZXM9Ry5zbGFzaGVzfHxjZSYmaGUuc2xhc2hlcyxT''@;'; put 'put ''LnByb3RvY29sPUcucHJvdG9jb2x8fGhlLnByb3RvY29sfHwiIixzZT1HLnJlc3QsKCJmaWxlOiI9PT1HLnByb3RvY29sJiYoMiE9PUcuc2xhc2hlc0NvdW50fHxCLnRlc3Qoc2UpKXx8IUcuc2xhc2hlcyYmKEcucHJvdG9jb2x8fEcuc2xhc2hlc0NvdW50PDJ8fCFlZShTLnByb3RvY29sKSkp''@;'; put 'put ''JiYoZ1szXT1bLyguKikvLCJwYXRobmFtZSJdKTt2PGcubGVuZ3RoO3YrKykiZnVuY3Rpb24iIT10eXBlb2YoRD1nW3ZdKT8oTj1EWzFdLChiPURbMF0pIT1iP1NbTl09c2U6InN0cmluZyI9PXR5cGVvZiBiP34oSD0iQCI9PT1iP3NlLmxhc3RJbmRleE9mKGIpOnNlLmluZGV4T2YoYikpJiYo''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBEWzJdPyhTW05dPXNlLnNsaWNlKDAsSCksc2U9c2Uuc2xpY2UoSCtEWzJdKSk6KFNbTl09c2Uuc2xpY2UoSCksc2U9c2Uuc2xpY2UoMCxIKSkpOihIPWIuZXhlYyhzZSkpJiYoU1tOXT1IWzFdLHNlPXNlLnNsaWNlKDAsSC5pbmRleCkpLFNbTl09U1tOXXx8Y2Um''@;'; put 'put ''JkRbM10mJmhlW05dfHwiIixEWzRdJiYoU1tOXT1TW05dLnRvTG93ZXJDYXNlKCkpKTpzZT1EKHNlLFMpO3VlJiYoUy5xdWVyeT11ZShTLnF1ZXJ5KSksY2UmJmhlLnNsYXNoZXMmJiIvIiE9PVMucGF0aG5hbWUuY2hhckF0KDApJiYoIiIhPT1TLnBhdGhuYW1lfHwiIiE9PWhlLnBhdGhuYW1l''@;'; put 'put ''KSYmKFMucGF0aG5hbWU9ZnVuY3Rpb24ocCx3KXtpZigiIj09PXApcmV0dXJuIHc7Zm9yKHZhciBKPSh3fHwiLyIpLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuY29uY2F0KHAuc3BsaXQoIi8iKSksbmU9Si5sZW5ndGgsZGU9SltuZS0xXSxmZT0hMSx4ZT0wO25lLS07KSIuIj09PUpbbmVdP0ou''@;'; put 'put ''c3BsaWNlKG5lLDEpOiIuLiI9PT1KW25lXT8oSi5zcGxpY2UobmUsMSkseGUrKyk6eGUmJigwPT09bmUmJihmZT0hMCksSi5zcGxpY2UobmUsMSkseGUtLSk7cmV0dXJuIGZlJiZKLnVuc2hpZnQoIiIpLCIuIiE9PWRlJiYiLi4iIT09ZGV8fEoucHVzaCgiIiksSi5qb2luKCIvIil9KFMucGF0''@;'; put 'put ''aG5hbWUsaGUucGF0aG5hbWUpKSwiLyIhPT1TLnBhdGhuYW1lLmNoYXJBdCgwKSYmZWUoUy5wcm90b2NvbCkmJihTLnBhdGhuYW1lPSIvIitTLnBhdGhuYW1lKSx6KFMucG9ydCxTLnByb3RvY29sKXx8KFMuaG9zdD1TLmhvc3RuYW1lLFMucG9ydD0iIiksUy51c2VybmFtZT1TLnBhc3N3b3Jk''@;'; put 'put ''PSIiLFMuYXV0aCYmKH4oSD1TLmF1dGguaW5kZXhPZigiOiIpKT8oUy51c2VybmFtZT1TLmF1dGguc2xpY2UoMCxIKSxTLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoUy51c2VybmFtZSkpLFMucGFzc3dvcmQ9Uy5hdXRoLnNsaWNlKEgrMSksUy5wYXNz''@;'; put 'put ''d29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KFMucGFzc3dvcmQpKSk6Uy51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KFMuYXV0aCkpLFMuYXV0aD1TLnBhc3N3b3JkP1MudXNlcm5hbWUrIjoiK1MucGFzc3dvcmQ6Uy51c2Vy''@;'; put 'put ''bmFtZSksUy5vcmlnaW49ImZpbGU6IiE9PVMucHJvdG9jb2wmJmVlKFMucHJvdG9jb2wpJiZTLmhvc3Q/Uy5wcm90b2NvbCsiLy8iK1MuaG9zdDoibnVsbCIsUy5ocmVmPVMudG9TdHJpbmcoKX1vZS5wcm90b3R5cGU9e3NldDpmdW5jdGlvbihzZSxoZSx1ZSl7dmFyIGNlPXRoaXM7c3dpdGNo''@;'; put 'put ''KHNlKXtjYXNlInF1ZXJ5Ijoic3RyaW5nIj09dHlwZW9mIGhlJiZoZS5sZW5ndGgmJihoZT0odWV8fEsucGFyc2UpKGhlKSksY2Vbc2VdPWhlO2JyZWFrO2Nhc2UicG9ydCI6Y2Vbc2VdPWhlLHooaGUsY2UucHJvdG9jb2wpP2hlJiYoY2UuaG9zdD1jZS5ob3N0bmFtZSsiOiIraGUpOihjZS5o''@;'; put 'put ''b3N0PWNlLmhvc3RuYW1lLGNlW3NlXT0iIik7YnJlYWs7Y2FzZSJob3N0bmFtZSI6Y2Vbc2VdPWhlLGNlLnBvcnQmJihoZSs9IjoiK2NlLnBvcnQpLGNlLmhvc3Q9aGU7YnJlYWs7Y2FzZSJob3N0IjpjZVtzZV09aGUsai50ZXN0KGhlKT8oaGU9aGUuc3BsaXQoIjoiKSxjZS5wb3J0PWhlLnBv''@;'; put 'put ''cCgpLGNlLmhvc3RuYW1lPWhlLmpvaW4oIjoiKSk6KGNlLmhvc3RuYW1lPWhlLGNlLnBvcnQ9IiIpO2JyZWFrO2Nhc2UicHJvdG9jb2wiOmNlLnByb3RvY29sPWhlLnRvTG93ZXJDYXNlKCksY2Uuc2xhc2hlcz0hdWU7YnJlYWs7Y2FzZSJwYXRobmFtZSI6Y2FzZSJoYXNoIjppZihoZSl7dmFy''@;'; put 'put ''IEc9InBhdGhuYW1lIj09PXNlPyIvIjoiIyI7Y2Vbc2VdPWhlLmNoYXJBdCgwKSE9PUc/RytoZTpoZX1lbHNlIGNlW3NlXT1oZTticmVhaztjYXNlInVzZXJuYW1lIjpjYXNlInBhc3N3b3JkIjpjZVtzZV09ZW5jb2RlVVJJQ29tcG9uZW50KGhlKTticmVhaztjYXNlImF1dGgiOnZhciBiPWhl''@;'; put 'put ''LmluZGV4T2YoIjoiKTt+Yj8oY2UudXNlcm5hbWU9aGUuc2xpY2UoMCxiKSxjZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGNlLnVzZXJuYW1lKSksY2UucGFzc3dvcmQ9aGUuc2xpY2UoYisxKSxjZS5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQo''@;'; put 'put ''ZGVjb2RlVVJJQ29tcG9uZW50KGNlLnBhc3N3b3JkKSkpOmNlLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoaGUpKX1mb3IodmFyIEQ9MDtEPFgubGVuZ3RoO0QrKyl7dmFyIEg9WFtEXTtIWzRdJiYoY2VbSFsxXV09Y2VbSFsxXV0udG9Mb3dlckNhc2Uo''@;'; put 'put ''KSl9cmV0dXJuIGNlLmF1dGg9Y2UucGFzc3dvcmQ/Y2UudXNlcm5hbWUrIjoiK2NlLnBhc3N3b3JkOmNlLnVzZXJuYW1lLGNlLm9yaWdpbj0iZmlsZToiIT09Y2UucHJvdG9jb2wmJmVlKGNlLnByb3RvY29sKSYmY2UuaG9zdD9jZS5wcm90b2NvbCsiLy8iK2NlLmhvc3Q6Im51bGwiLGNlLmhy''@;'; put 'put ''ZWY9Y2UudG9TdHJpbmcoKSxjZX0sdG9TdHJpbmc6ZnVuY3Rpb24oc2Upe3NlJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2V8fChzZT1LLnN0cmluZ2lmeSk7dmFyIGhlLHVlPXRoaXMsY2U9dWUuaG9zdCxHPXVlLnByb3RvY29sO0cmJiI6IiE9PUcuY2hhckF0KEcubGVuZ3RoLTEpJiYoRys9Ijoi''@;'; put 'put ''KTt2YXIgYj1HKyh1ZS5wcm90b2NvbCYmdWUuc2xhc2hlc3x8ZWUodWUucHJvdG9jb2wpPyIvLyI6IiIpO3JldHVybiB1ZS51c2VybmFtZT8oYis9dWUudXNlcm5hbWUsdWUucGFzc3dvcmQmJihiKz0iOiIrdWUucGFzc3dvcmQpLGIrPSJAIik6dWUucGFzc3dvcmQ/KGIrPSI6Iit1ZS5wYXNz''@;'; put 'put ''d29yZCxiKz0iQCIpOiJmaWxlOiIhPT11ZS5wcm90b2NvbCYmZWUodWUucHJvdG9jb2wpJiYhY2UmJiIvIiE9PXVlLnBhdGhuYW1lJiYoYis9IkAiKSwoIjoiPT09Y2VbY2UubGVuZ3RoLTFdfHxqLnRlc3QodWUuaG9zdG5hbWUpJiYhdWUucG9ydCkmJihjZSs9IjoiKSxiKz1jZSt1ZS5wYXRo''@;'; put 'put ''bmFtZSwoaGU9Im9iamVjdCI9PXR5cGVvZiB1ZS5xdWVyeT9zZSh1ZS5xdWVyeSk6dWUucXVlcnkpJiYoYis9Ij8iIT09aGUuY2hhckF0KDApPyI/IitoZTpoZSksdWUuaGFzaCYmKGIrPXVlLmhhc2gpLGJ9fSxvZS5leHRyYWN0UHJvdG9jb2w9dGUsb2UubG9jYXRpb249cSxvZS50cmltTGVm''@;'; put 'put ''dD1ZLG9lLnFzPUssTS5leHBvcnRzPW9lfSw0OTI3OihNLE8sUik9Pnt2YXIgej1SKDUxMDgpO2Z1bmN0aW9uIEsoSSl7dHJ5e2lmKCFSLmcubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciBrPVIuZy5sb2NhbFN0b3JhZ2VbSV07cmV0dXJuIG51bGwhPWsmJiJ0cnVl''@;'; put 'put ''Ij09PVN0cmluZyhrKS50b0xvd2VyQ2FzZSgpfU0uZXhwb3J0cz1mdW5jdGlvbihJLGspe2lmKEsoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gSTt2YXIgRT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighRSl7aWYoSygidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihrKTtLKCJ0''@;'; put 'put ''cmFjZURlcHJlY2F0aW9uIik/ei50cmFjZShrKTp6Lndhcm4oayksRT0hMH1yZXR1cm4gSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sMzg0Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIE8mJiJvYmplY3QiPT10eXBlb2YgTyYmImZ1bmN0aW9uIj09dHlwZW9mIE8uY29weSYm''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIE8uZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIE8ucmVhZFVJbnQ4fX0sNTk1NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjU4NCksSz1SKDg2NjIpLEk9Uig2NDMwKSxrPVIoNTY5Mik7ZnVuY3Rpb24gRShKKXtyZXR1cm4gSi5jYWxsLmJpbmQo''@;'; put 'put ''Sil9dmFyIGo9dHlwZW9mIEJpZ0ludDwidSIsVj10eXBlb2YgU3ltYm9sPCJ1IixCPUUoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyksWT1FKE51bWJlci5wcm90b3R5cGUudmFsdWVPZiksWD1FKFN0cmluZy5wcm90b3R5cGUudmFsdWVPZiksVT1FKEJvb2xlYW4ucHJvdG90eXBlLnZhbHVl''@;'; put 'put ''T2YpO2lmKGopdmFyIHE9RShCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YpO2lmKFYpdmFyIGVlPUUoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtmdW5jdGlvbiB0ZShKLG5lKXtpZigib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7dHJ5e3JldHVybiBuZShKKSwhMH1jYXRjaHtyZXR1cm4h''@;'; put 'put ''MX19ZnVuY3Rpb24gb2UoSil7cmV0dXJuIltvYmplY3QgTWFwXSI9PT1CKEopfWZ1bmN0aW9uIHNlKEope3JldHVybiJbb2JqZWN0IFNldF0iPT09QihKKX1mdW5jdGlvbiBoZShKKXtyZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1CKEopfWZ1bmN0aW9uIHVlKEope3JldHVybiJbb2JqZWN0''@;'; put 'put ''IFdlYWtTZXRdIj09PUIoSil9ZnVuY3Rpb24gY2UoSil7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PUIoSil9ZnVuY3Rpb24gRyhKKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmKGNlLndvcmtpbmc/Y2UoSik6SiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKX1mdW5jdGlv''@;'; put 'put ''biBiKEope3JldHVybiJbb2JqZWN0IERhdGFWaWV3XSI9PT1CKEopfWZ1bmN0aW9uIEQoSil7cmV0dXJuIHR5cGVvZiBEYXRhVmlldzwidSImJihiLndvcmtpbmc/YihKKTpKIGluc3RhbmNlb2YgRGF0YVZpZXcpfU8uaXNBcmd1bWVudHNPYmplY3Q9eixPLmlzR2VuZXJhdG9yRnVuY3Rpb249''@;'; put 'put ''SyxPLmlzVHlwZWRBcnJheT1rLE8uaXNQcm9taXNlPWZ1bmN0aW9uKEope3JldHVybiB0eXBlb2YgUHJvbWlzZTwidSImJkogaW5zdGFuY2VvZiBQcm9taXNlfHxudWxsIT09SiYmIm9iamVjdCI9PXR5cGVvZiBKJiYiZnVuY3Rpb24iPT10eXBlb2YgSi50aGVuJiYiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgSi5jYXRjaH0sTy5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhKKTprKEopfHxEKEopfSxPLmlzVWludDhBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iVWlu''@;'; put 'put ''dDhBcnJheSI9PT1JKEopfSxPLmlzVWludDhDbGFtcGVkQXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIlVpbnQ4Q2xhbXBlZEFycmF5Ij09PUkoSil9LE8uaXNVaW50MTZBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iVWludDE2QXJyYXkiPT09SShKKX0sTy5pc1VpbnQzMkFycmF5PWZ1bmN0aW9u''@;'; put 'put ''KEope3JldHVybiJVaW50MzJBcnJheSI9PT1JKEopfSxPLmlzSW50OEFycmF5PWZ1bmN0aW9uKEope3JldHVybiJJbnQ4QXJyYXkiPT09SShKKX0sTy5pc0ludDE2QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkludDE2QXJyYXkiPT09SShKKX0sTy5pc0ludDMyQXJyYXk9ZnVuY3Rpb24oSil7''@;'; put 'put ''cmV0dXJuIkludDMyQXJyYXkiPT09SShKKX0sTy5pc0Zsb2F0MzJBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iRmxvYXQzMkFycmF5Ij09PUkoSil9LE8uaXNGbG9hdDY0QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkZsb2F0NjRBcnJheSI9PT1JKEopfSxPLmlzQmlnSW50NjRBcnJheT1mdW5j''@;'; put 'put ''dGlvbihKKXtyZXR1cm4iQmlnSW50NjRBcnJheSI9PT1JKEopfSxPLmlzQmlnVWludDY0QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkJpZ1VpbnQ2NEFycmF5Ij09PUkoSil9LG9lLndvcmtpbmc9dHlwZW9mIE1hcDwidSImJm9lKG5ldyBNYXApLE8uaXNNYXA9ZnVuY3Rpb24oSil7cmV0dXJu''@;'; put 'put ''IHR5cGVvZiBNYXA8InUiJiYob2Uud29ya2luZz9vZShKKTpKIGluc3RhbmNlb2YgTWFwKX0sc2Uud29ya2luZz10eXBlb2YgU2V0PCJ1IiYmc2UobmV3IFNldCksTy5pc1NldD1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIFNldDwidSImJihzZS53b3JraW5nP3NlKEopOkogaW5zdGFuY2Vv''@;'; put 'put ''ZiBTZXQpfSxoZS53b3JraW5nPXR5cGVvZiBXZWFrTWFwPCJ1IiYmaGUobmV3IFdlYWtNYXApLE8uaXNXZWFrTWFwPWZ1bmN0aW9uKEope3JldHVybiB0eXBlb2YgV2Vha01hcDwidSImJihoZS53b3JraW5nP2hlKEopOkogaW5zdGFuY2VvZiBXZWFrTWFwKX0sdWUud29ya2luZz10eXBlb2Yg''@;'; put 'put ''V2Vha1NldDwidSImJnVlKG5ldyBXZWFrU2V0KSxPLmlzV2Vha1NldD1mdW5jdGlvbihKKXtyZXR1cm4gdWUoSil9LGNlLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmY2UobmV3IEFycmF5QnVmZmVyKSxPLmlzQXJyYXlCdWZmZXI9RyxiLndvcmtpbmc9dHlwZW9mIEFycmF5QnVm''@;'; put 'put ''ZmVyPCJ1IiYmdHlwZW9mIERhdGFWaWV3PCJ1IiYmYihuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLDAsMSkpLE8uaXNEYXRhVmlldz1EO3ZhciBIPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/U2hhcmVkQXJyYXlCdWZmZXI6dm9pZCAwO2Z1bmN0aW9uIE4oSil7cmV0dXJu''@;'; put 'put ''IltvYmplY3QgU2hhcmVkQXJyYXlCdWZmZXJdIj09PUIoSil9ZnVuY3Rpb24gZyhKKXtyZXR1cm4gdm9pZCAwIT09SCYmKHZvaWQgMD09PU4ud29ya2luZyYmKE4ud29ya2luZz1OKG5ldyBIKSksTi53b3JraW5nP04oSik6SiBpbnN0YW5jZW9mIEgpfWZ1bmN0aW9uIEMoSil7cmV0dXJuIHRl''@;'; put 'put ''KEosWSl9ZnVuY3Rpb24gUyhKKXtyZXR1cm4gdGUoSixYKX1mdW5jdGlvbiB2KEope3JldHVybiB0ZShKLFUpfWZ1bmN0aW9uIHAoSil7cmV0dXJuIGomJnRlKEoscSl9ZnVuY3Rpb24gdyhKKXtyZXR1cm4gViYmdGUoSixlZSl9Ty5pc1NoYXJlZEFycmF5QnVmZmVyPWcsTy5pc0FzeW5jRnVu''@;'; put 'put ''Y3Rpb249ZnVuY3Rpb24oSil7cmV0dXJuIltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT09QihKKX0sTy5pc01hcEl0ZXJhdG9yPWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IE1hcCBJdGVyYXRvcl0iPT09QihKKX0sTy5pc1NldEl0ZXJhdG9yPWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0''@;'; put 'put ''IFNldCBJdGVyYXRvcl0iPT09QihKKX0sTy5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbihKKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIj09PUIoSil9LE8uaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5Lk1vZHVs''@;'; put 'put ''ZV0iPT09QihKKX0sTy5pc051bWJlck9iamVjdD1DLE8uaXNTdHJpbmdPYmplY3Q9UyxPLmlzQm9vbGVhbk9iamVjdD12LE8uaXNCaWdJbnRPYmplY3Q9cCxPLmlzU3ltYm9sT2JqZWN0PXcsTy5pc0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uKEope3JldHVybiBDKEopfHxTKEopfHx2KEopfHxw''@;'; put 'put ''KEopfHx3KEopfSxPLmlzQW55QXJyYXlCdWZmZXI9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmKEcoSil8fGcoSikpfSxbImlzUHJveHkiLCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKEope09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShPLEose2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoSisiIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdXNlcmxhbmQiKX19KX0pfSw5NTM5OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPU9iamVjdC5nZXRPd25Qcm9w''@;'; put 'put ''ZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlvbihKKXtmb3IodmFyIG5lPU9iamVjdC5rZXlzKEopLGRlPXt9LGZlPTA7ZmU8bmUubGVuZ3RoO2ZlKyspZGVbbmVbZmVdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEosbmVbZmVdKTtyZXR1cm4gZGV9LGs9LyVbc2RqJV0vZztPLmZv''@;'; put 'put ''cm1hdD1mdW5jdGlvbihKKXtpZighdWUoSikpe2Zvcih2YXIgbmU9W10sZGU9MDtkZTxhcmd1bWVudHMubGVuZ3RoO2RlKyspbmUucHVzaChCKGFyZ3VtZW50c1tkZV0pKTtyZXR1cm4gbmUuam9pbigiICIpfWRlPTE7Zm9yKHZhciBmZT1hcmd1bWVudHMseGU9ZmUubGVuZ3RoLExlPVN0cmlu''@;'; put 'put ''ZyhKKS5yZXBsYWNlKGssZnVuY3Rpb24oT2Upe2lmKCIlJSI9PT1PZSlyZXR1cm4iJSI7aWYoZGU+PXhlKXJldHVybiBPZTtzd2l0Y2goT2Upe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcoZmVbZGUrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIoZmVbZGUrK10pO2Nhc2UiJWoiOnRyeXtyZXR1''@;'; put 'put ''cm4gSlNPTi5zdHJpbmdpZnkoZmVbZGUrK10pfWNhdGNoe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBPZX19KSxGZT1mZVtkZV07ZGU8eGU7RmU9ZmVbKytkZV0pc2UoRmUpfHwhYihGZSk/TGUrPSIgIitGZTpMZSs9IiAiK0IoRmUpO3JldHVybiBMZX0sTy5kZXByZWNhdGU9''@;'; put 'put ''ZnVuY3Rpb24oSixuZSl7aWYodm9pZCAwIT09eiYmITA9PT16Lm5vRGVwcmVjYXRpb24pcmV0dXJuIEo7aWYodm9pZCAwPT09eilyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTy5kZXByZWNhdGUoSixuZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgZGU9ITE7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7aWYoIWRlKXtpZih6LnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG5lKTt6LnRyYWNlRGVwcmVjYXRpb24/Sy50cmFjZShuZSk6Sy5lcnJvcihuZSksZGU9ITB9cmV0dXJuIEouYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIEU9e30saj0vXiQvO2lmKHouZW52Lk5PREVf''@;'; put 'put ''REVCVUcpe3ZhciBWPXouZW52Lk5PREVfREVCVUc7Vj1WLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrPy5dL2csIlxcJCYiKS5yZXBsYWNlKC9cKi9nLCIuKiIpLnJlcGxhY2UoLywvZywiJHxeIikudG9VcHBlckNhc2UoKSxqPW5ldyBSZWdFeHAoIl4iK1YrIiQiLCJpIil9ZnVuY3Rpb24gQihK''@;'; put 'put ''LG5lKXt2YXIgZGU9e3NlZW46W10sc3R5bGl6ZTpYfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKGRlLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKGRlLmNvbG9ycz1hcmd1bWVudHNbM10pLG9lKG5lKT9kZS5zaG93SGlkZGVuPW5lOm5lJiZPLl9leHRl''@;'; put 'put ''bmQoZGUsbmUpLGNlKGRlLnNob3dIaWRkZW4pJiYoZGUuc2hvd0hpZGRlbj0hMSksY2UoZGUuZGVwdGgpJiYoZGUuZGVwdGg9MiksY2UoZGUuY29sb3JzKSYmKGRlLmNvbG9ycz0hMSksY2UoZGUuY3VzdG9tSW5zcGVjdCkmJihkZS5jdXN0b21JbnNwZWN0PSEwKSxkZS5jb2xvcnMmJihkZS5z''@;'; put 'put ''dHlsaXplPVkpLFUoZGUsSixkZS5kZXB0aCl9ZnVuY3Rpb24gWShKLG5lKXt2YXIgZGU9Qi5zdHlsZXNbbmVdO3JldHVybiBkZT8iXHgxYlsiK0IuY29sb3JzW2RlXVswXSsibSIrSisiXHgxYlsiK0IuY29sb3JzW2RlXVsxXSsibSI6Sn1mdW5jdGlvbiBYKEosbmUpe3JldHVybiBKfWZ1bmN0''@;'; put 'put ''aW9uIFUoSixuZSxkZSl7aWYoSi5jdXN0b21JbnNwZWN0JiZuZSYmTihuZS5pbnNwZWN0KSYmbmUuaW5zcGVjdCE9PU8uaW5zcGVjdCYmKCFuZS5jb25zdHJ1Y3Rvcnx8bmUuY29uc3RydWN0b3IucHJvdG90eXBlIT09bmUpKXt2YXIgZmU9bmUuaW5zcGVjdChkZSxKKTtyZXR1cm4gdWUoZmUp''@;'; put 'put ''fHwoZmU9VShKLGZlLGRlKSksZmV9dmFyIHhlPWZ1bmN0aW9uKEplLGx0KXtpZihjZShsdCkpcmV0dXJuIEplLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKHVlKGx0KSl7dmFyIFBlPSInIitKU09OLnN0cmluZ2lmeShsdCkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFj''@;'; put 'put ''ZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gSmUuc3R5bGl6ZShQZSwic3RyaW5nIil9cmV0dXJuIGhlKGx0KT9KZS5zdHlsaXplKCIiK2x0LCJudW1iZXIiKTpvZShsdCk/SmUuc3R5bGl6ZSgiIitsdCwiYm9vbGVhbiIpOnNlKGx0KT9KZS5zdHlsaXplKCJu''@;'; put 'put ''dWxsIiwibnVsbCIpOnZvaWQgMH0oSixuZSk7aWYoeGUpcmV0dXJuIHhlO3ZhciBsdCxMZT1PYmplY3Qua2V5cyhuZSksRmU9KGx0PXt9LExlLmZvckVhY2goZnVuY3Rpb24oUGUsYmUpe2x0W1BlXT0hMH0pLGx0KTtpZihKLnNob3dIaWRkZW4mJihMZT1PYmplY3QuZ2V0T3duUHJvcGVydHlO''@;'; put 'put ''YW1lcyhuZSkpLEgobmUpJiYoTGUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxMZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gcShuZSk7aWYoMD09PUxlLmxlbmd0aCl7aWYoTihuZSkpcmV0dXJuIEouc3R5bGl6ZSgiW0Z1bmN0aW9uIisobmUubmFtZT8iOiAiK25lLm5hbWU6''@;'; put 'put ''IiIpKyJdIiwic3BlY2lhbCIpO2lmKEcobmUpKXJldHVybiBKLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSwicmVnZXhwIik7aWYoRChuZSkpcmV0dXJuIEouc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSwiZGF0ZSIpO2lmKEgobmUp''@;'; put 'put ''KXJldHVybiBxKG5lKX12YXIgQmUsV2U9IiIsS2U9ITEsWWU9WyJ7IiwifSJdO3JldHVybiB0ZShuZSkmJihLZT0hMCxZZT1bIlsiLCJdIl0pLE4obmUpJiYoV2U9IiBbRnVuY3Rpb24iKyhuZS5uYW1lPyI6ICIrbmUubmFtZToiIikrIl0iKSxHKG5lKSYmKFdlPSIgIitSZWdFeHAucHJvdG90''@;'; put 'put ''eXBlLnRvU3RyaW5nLmNhbGwobmUpKSxEKG5lKSYmKFdlPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKG5lKSksSChuZSkmJihXZT0iICIrcShuZSkpLDAhPT1MZS5sZW5ndGh8fEtlJiYwIT1uZS5sZW5ndGg/ZGU8MD9HKG5lKT9KLnN0eWxpemUoUmVnRXhwLnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZy5jYWxsKG5lKSwicmVnZXhwIik6Si5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooSi5zZWVuLnB1c2gobmUpLEJlPUtlP2Z1bmN0aW9uKEplLGx0LFBlLGJlLEFlKXtmb3IodmFyIFRlPVtdLHFlPTAsWGU9bHQubGVuZ3RoO3FlPFhlOysrcWUpdihsdCxTdHJpbmco''@;'; put 'put ''cWUpKT9UZS5wdXNoKGVlKEplLGx0LFBlLGJlLFN0cmluZyhxZSksITApKTpUZS5wdXNoKCIiKTtyZXR1cm4gQWUuZm9yRWFjaChmdW5jdGlvbihVZSl7VWUubWF0Y2goL15cZCskLyl8fFRlLnB1c2goZWUoSmUsbHQsUGUsYmUsVWUsITApKX0pLFRlfShKLG5lLGRlLEZlLExlKTpMZS5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oSmUpe3JldHVybiBlZShKLG5lLGRlLEZlLEplLEtlKX0pLEouc2Vlbi5wb3AoKSxmdW5jdGlvbihKZSxsdCxQZSl7cmV0dXJuIEplLnJlZHVjZShmdW5jdGlvbihBZSxUZSl7cmV0dXJuIFRlLmluZGV4T2YoIlxuIiksQWUrVGUucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywi''@;'; put 'put ''IikubGVuZ3RoKzF9LDApPjYwP1BlWzBdKygiIj09PWx0PyIiOmx0KyJcbiAiKSsiICIrSmUuam9pbigiLFxuICAiKSsiICIrUGVbMV06UGVbMF0rbHQrIiAiK0plLmpvaW4oIiwgIikrIiAiK1BlWzFdfShCZSxXZSxZZSkpOlllWzBdK1dlK1llWzFdfWZ1bmN0aW9uIHEoSil7cmV0dXJuIlsi''@;'; put 'put ''K0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEopKyJdIn1mdW5jdGlvbiBlZShKLG5lLGRlLGZlLHhlLExlKXt2YXIgRmUsT2UsQmU7aWYoKEJlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmUseGUpfHx7dmFsdWU6bmVbeGVdfSkuZ2V0P09lPUouc3R5bGl6ZShCZS5z''@;'; put 'put ''ZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOkJlLnNldCYmKE9lPUouc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLHYoZmUseGUpfHwoRmU9IlsiK3hlKyJdIiksT2V8fChKLnNlZW4uaW5kZXhPZihCZS52YWx1ZSk8MD8oT2U9c2UoZGUpP1UoSixCZS52''@;'; put 'put ''YWx1ZSxudWxsKTpVKEosQmUudmFsdWUsZGUtMSkpLmluZGV4T2YoIlxuIik+LTEmJihPZT1MZT9PZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oV2Upe3JldHVybiIgICIrV2V9KS5qb2luKCJcbiIpLnNsaWNlKDIpOiJcbiIrT2Uuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKFdlKXtyZXR1''@;'; put 'put ''cm4iICAgIitXZX0pLmpvaW4oIlxuIikpOk9lPUouc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksY2UoRmUpKXtpZihMZSYmeGUubWF0Y2goL15cZCskLykpcmV0dXJuIE9lOyhGZT1KU09OLnN0cmluZ2lmeSgiIit4ZSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0q''@;'; put 'put ''KSIkLyk/KEZlPUZlLnNsaWNlKDEsLTEpLEZlPUouc3R5bGl6ZShGZSwibmFtZSIpKTooRmU9RmUucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLEZlPUouc3R5bGl6ZShGZSwic3RyaW5nIikpfXJldHVybiBGZSsiOiAiK09l''@;'; put 'put ''fWZ1bmN0aW9uIHRlKEope3JldHVybiBBcnJheS5pc0FycmF5KEopfWZ1bmN0aW9uIG9lKEope3JldHVybiJib29sZWFuIj09dHlwZW9mIEp9ZnVuY3Rpb24gc2UoSil7cmV0dXJuIG51bGw9PT1KfWZ1bmN0aW9uIGhlKEope3JldHVybiJudW1iZXIiPT10eXBlb2YgSn1mdW5jdGlvbiB1ZShK''@;'; put 'put ''KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEp9ZnVuY3Rpb24gY2UoSil7cmV0dXJuIHZvaWQgMD09PUp9ZnVuY3Rpb24gRyhKKXtyZXR1cm4gYihKKSYmIltvYmplY3QgUmVnRXhwXSI9PT1nKEopfWZ1bmN0aW9uIGIoSil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBKJiZudWxsIT09Sn1mdW5j''@;'; put 'put ''dGlvbiBEKEope3JldHVybiBiKEopJiYiW29iamVjdCBEYXRlXSI9PT1nKEopfWZ1bmN0aW9uIEgoSil7cmV0dXJuIGIoSikmJigiW29iamVjdCBFcnJvcl0iPT09ZyhKKXx8SiBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBOKEope3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBKfWZ1bmN0''@;'; put 'put ''aW9uIGcoSil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChKKX1mdW5jdGlvbiBDKEope3JldHVybiBKPDEwPyIwIitKLnRvU3RyaW5nKDEwKTpKLnRvU3RyaW5nKDEwKX1PLmRlYnVnbG9nPWZ1bmN0aW9uKEope2lmKEo9Si50b1VwcGVyQ2FzZSgpLCFFW0pdKWlmKGou''@;'; put 'put ''dGVzdChKKSl7dmFyIG5lPXoucGlkO0VbSl09ZnVuY3Rpb24oKXt2YXIgZGU9Ty5mb3JtYXQuYXBwbHkoTyxhcmd1bWVudHMpO0suZXJyb3IoIiVzICVkOiAlcyIsSixuZSxkZSl9fWVsc2UgRVtKXT1mdW5jdGlvbigpe307cmV0dXJuIEVbSl19LE8uaW5zcGVjdD1CLEIuY29sb3JzPXtib2xk''@;'; put 'put ''OlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHll''@;'; put 'put ''bGxvdzpbMzMsMzldfSxCLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LE8udHlwZXM9Uig1OTU1KSxPLmlz''@;'; put 'put ''QXJyYXk9dGUsTy5pc0Jvb2xlYW49b2UsTy5pc051bGw9c2UsTy5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihKKXtyZXR1cm4gbnVsbD09Sn0sTy5pc051bWJlcj1oZSxPLmlzU3RyaW5nPXVlLE8uaXNTeW1ib2w9ZnVuY3Rpb24oSil7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBKfSxPLmlz''@;'; put 'put ''VW5kZWZpbmVkPWNlLE8uaXNSZWdFeHA9RyxPLnR5cGVzLmlzUmVnRXhwPUcsTy5pc09iamVjdD1iLE8uaXNEYXRlPUQsTy50eXBlcy5pc0RhdGU9RCxPLmlzRXJyb3I9SCxPLnR5cGVzLmlzTmF0aXZlRXJyb3I9SCxPLmlzRnVuY3Rpb249TixPLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKEope3Jl''@;'; put 'put ''dHVybiBudWxsPT09Snx8ImJvb2xlYW4iPT10eXBlb2YgSnx8Im51bWJlciI9PXR5cGVvZiBKfHwic3RyaW5nIj09dHlwZW9mIEp8fCJzeW1ib2wiPT10eXBlb2YgSnx8dm9pZCAwPT09Sn0sTy5pc0J1ZmZlcj1SKDM4NCk7dmFyIFM9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJK''@;'; put 'put ''dW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiB2KEosbmUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSixuZSl9Ty5sb2c9ZnVuY3Rpb24oKXt2YXIgSixuZTtLLmxvZygiJXMgLSAlcyIsKG5lPVtDKChKPW5ldyBE''@;'; put 'put ''YXRlKS5nZXRIb3VycygpKSxDKEouZ2V0TWludXRlcygpKSxDKEouZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpLFtKLmdldERhdGUoKSxTW0ouZ2V0TW9udGgoKV0sbmVdLmpvaW4oIiAiKSksTy5mb3JtYXQuYXBwbHkoTyxhcmd1bWVudHMpKX0sTy5pbmhlcml0cz1SKDU3MTcpLE8uX2V4dGVu''@;'; put 'put ''ZD1mdW5jdGlvbihKLG5lKXtpZighbmV8fCFiKG5lKSlyZXR1cm4gSjtmb3IodmFyIGRlPU9iamVjdC5rZXlzKG5lKSxmZT1kZS5sZW5ndGg7ZmUtLTspSltkZVtmZV1dPW5lW2RlW2ZlXV07cmV0dXJuIEp9O3ZhciBwPXR5cGVvZiBTeW1ib2w8InUiP1N5bWJvbCgidXRpbC5wcm9taXNpZnku''@;'; put 'put ''Y3VzdG9tIik6dm9pZCAwO2Z1bmN0aW9uIHcoSixuZSl7aWYoIUope3ZhciBkZT1uZXcgRXJyb3IoIlByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZSIpO2RlLnJlYXNvbj1KLEo9ZGV9cmV0dXJuIG5lKEopfU8ucHJvbWlzaWZ5PWZ1bmN0aW9uKEope2lmKCJmdW5jdGlv''@;'; put 'put ''biIhPXR5cGVvZiBKKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2lmKHAmJkpbcF0pe3ZhciBuZTtpZigiZnVuY3Rpb24iIT10eXBlb2YobmU9SltwXSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ1dGls''@;'; put 'put ''LnByb21pc2lmeS5jdXN0b20iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobmUscCx7dmFsdWU6bmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxuZX1mdW5jdGlvbiBuZSgpe2Zvcih2''@;'; put 'put ''YXIgZGUsZmUseGU9bmV3IFByb21pc2UoZnVuY3Rpb24oT2UsQmUpe2RlPU9lLGZlPUJlfSksTGU9W10sRmU9MDtGZTxhcmd1bWVudHMubGVuZ3RoO0ZlKyspTGUucHVzaChhcmd1bWVudHNbRmVdKTtMZS5wdXNoKGZ1bmN0aW9uKE9lLEJlKXtPZT9mZShPZSk6ZGUoQmUpfSk7dHJ5e0ouYXBw''@;'; put 'put ''bHkodGhpcyxMZSl9Y2F0Y2goT2Upe2ZlKE9lKX1yZXR1cm4geGV9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZSxPYmplY3QuZ2V0UHJvdG90eXBlT2YoSikpLHAmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSxwLHt2YWx1ZTpuZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5lLEkoSikpfSxPLnByb21pc2lmeS5jdXN0b209cCxPLmNhbGxiYWNraWZ5PWZ1bmN0aW9uKEope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBKKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2Z1bmN0aW9uIG5lKCl7Zm9yKHZhciBkZT1bXSxmZT0wO2ZlPGFyZ3VtZW50cy5sZW5ndGg7ZmUrKylkZS5wdXNoKGFyZ3VtZW50c1tmZV0pO3ZhciB4ZT1kZS5wb3AoKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeGUpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiVGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uIik7dmFyIExlPXRoaXMsRmU9ZnVuY3Rpb24oKXtyZXR1cm4geGUuYXBwbHkoTGUsYXJndW1lbnRzKX07Si5hcHBseSh0aGlzLGRlKS50aGVuKGZ1bmN0aW9uKE9lKXt6Lm5leHRUaWNrKEZlLmJpbmQobnVs''@;'; put 'put ''bCxudWxsLE9lKSl9LGZ1bmN0aW9uKE9lKXt6Lm5leHRUaWNrKHcuYmluZChudWxsLE9lLEZlKSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG5lLE9iamVjdC5nZXRQcm90b3R5cGVPZihKKSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobmUsSShKKSksbmV9fSw0ODE6KE0sTyxS''@;'; put 'put ''KT0+eyFmdW5jdGlvbih6KXsidXNlIHN0cmljdCI7ei5leHBvcnRzLmlzX3VyaT1JLHouZXhwb3J0cy5pc19odHRwX3VyaT1rLHouZXhwb3J0cy5pc19odHRwc191cmk9RSx6LmV4cG9ydHMuaXNfd2ViX3VyaT1qLHouZXhwb3J0cy5pc1VyaT1JLHouZXhwb3J0cy5pc0h0dHBVcmk9ayx6LmV4''@;'; put 'put ''cG9ydHMuaXNIdHRwc1VyaT1FLHouZXhwb3J0cy5pc1dlYlVyaT1qO3ZhciBLPWZ1bmN0aW9uKFYpe3JldHVybiBWLm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBJKFYpe2lmKFYm''@;'; put 'put ''JiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoVikmJiEvJVteMC05YS1mXS9pLnRlc3QoVikmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChWKSl7dmFyIEIsWSxYLFUscSxlZT0iIix0ZT0iIjtpZihlZT0o''@;'; put 'put ''Qj1LKFYpKVsxXSxZPUJbMl0sWD1CWzNdLFU9Qls0XSxxPUJbNV0sZWUmJmVlLmxlbmd0aCYmWC5sZW5ndGg+PTApe2lmKFkmJlkubGVuZ3RoKXtpZigwIT09WC5sZW5ndGgmJiEvXlwvLy50ZXN0KFgpKXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVzdChYKSlyZXR1cm47aWYoL15bYS16XVth''@;'; put 'put ''LXowLTlcK1wtXC5dKiQvLnRlc3QoZWUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIHRlKz1lZSsiOiIsWSYmWS5sZW5ndGgmJih0ZSs9Ii8vIitZKSx0ZSs9WCxVJiZVLmxlbmd0aCYmKHRlKz0iPyIrVSkscSYmcS5sZW5ndGgmJih0ZSs9IiMiK3EpLHRlfX19ZnVuY3Rpb24gayhWLEIpe2lmKEko''@;'; put 'put ''Vikpe3ZhciBZLFgsVSxxLGVlPSIiLHRlPSIiLG9lPSIiLHNlPSIiO2lmKGVlPShZPUsoVikpWzFdLHRlPVlbMl0sWD1ZWzNdLFU9WVs0XSxxPVlbNV0sZWUpe2lmKEIpe2lmKCJodHRwcyIhPWVlLnRvTG93ZXJDYXNlKCkpcmV0dXJufWVsc2UgaWYoImh0dHAiIT1lZS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''KXJldHVybjtpZih0ZSlyZXR1cm4vOihcZCspJC8udGVzdCh0ZSkmJihvZT10ZS5tYXRjaCgvOihcZCspJC8pWzBdLHRlPXRlLnJlcGxhY2UoLzpcZCskLywiIikpLHNlKz1lZSsiOiIsc2UrPSIvLyIrdGUsb2UmJihzZSs9b2UpLHNlKz1YLFUmJlUubGVuZ3RoJiYoc2UrPSI/IitVKSxxJiZx''@;'; put 'put ''Lmxlbmd0aCYmKHNlKz0iIyIrcSksc2V9fX1mdW5jdGlvbiBFKFYpe3JldHVybiBrKFYsITApfWZ1bmN0aW9uIGooVil7cmV0dXJuIGsoVil8fEUoVil9fShNPVIubm1kKE0pKX0sNjQzMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDAyOSksSz1SKDMwODMpLEk9UigxOTI0KSxr''@;'; put 'put ''PVIoNzI5NiksRT1JKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksaj1SKDY0MTApKCksVj10eXBlb2YgZ2xvYmFsVGhpcz4idSI/Ui5nOmdsb2JhbFRoaXMsQj1LKCksWT1JKCJTdHJpbmcucHJvdG90eXBlLnNsaWNlIiksWD17fSxVPU9iamVjdC5nZXRQcm90b3R5cGVPZjtqJiZrJiZV''@;'; put 'put ''JiZ6KEIsZnVuY3Rpb24oZWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBWW2VlXSl7dmFyIHRlPW5ldyBWW2VlXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gdGUpe3ZhciBvZT1VKHRlKSxzZT1rKG9lLFN5bWJvbC50b1N0cmluZ1RhZyk7aWYoIXNlKXt2YXIgaGU9VShvZSk7c2U9ayhoZSxT''@;'; put 'put ''eW1ib2wudG9TdHJpbmdUYWcpfVhbZWVdPXNlLmdldH19fSk7dmFyIHE9Uig1NjkyKTtNLmV4cG9ydHM9ZnVuY3Rpb24oZWUpe3JldHVybiEhcShlZSkmJihqJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWU/KHRlPWVlLG9lPSExLHooWCxmdW5jdGlvbihzZSxoZSl7aWYoIW9lKXRyeXt2YXIg''@;'; put 'put ''dWU9c2UuY2FsbCh0ZSk7dWU9PT1oZSYmKG9lPXVlKX1jYXRjaHt9fSksb2UpOlkoRShlZSksOCwtMSkpO3ZhciB0ZSxvZX19LDI0Nzk6TT0+e00uZXhwb3J0cz1mdW5jdGlvbiBPKFIseil7aWYoUiYmeilyZXR1cm4gTyhSKSh6KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgUil0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJuZWVkIHdyYXBwZXIgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmtleXMoUikuZm9yRWFjaChmdW5jdGlvbihJKXtLW0ldPVJbSV19KSxLO2Z1bmN0aW9uIEsoKXtmb3IodmFyIEk9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGs9MDtrPEkubGVuZ3RoO2srKylJW2td''@;'; put 'put ''PWFyZ3VtZW50c1trXTt2YXIgRT1SLmFwcGx5KHRoaXMsSSksaj1JW0kubGVuZ3RoLTFdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFJiZFIT09aiYmT2JqZWN0LmtleXMoaikuZm9yRWFjaChmdW5jdGlvbihWKXtFW1ZdPWpbVl19KSxFfX19LDk1MDooKT0+e30sNjYwMTooKT0+e30sOTIx''@;'; put 'put ''NDooKT0+e30sODYyMzooKT0+e30sNzc0ODooKT0+e30sNTU2ODooKT0+e30sMjUzNTooKT0+e30sMzcxMDooKT0+e30sNTQ0MzooKT0+e30sNDEyOTooKT0+e30sNjYxOTooKT0+e30sNzEwODooKT0+e30sMjM2MTooKT0+e30sNDYxNjooKT0+e30sNzIxNzooKT0+e30sODM3MzooKT0+e30s''@;'; put 'put ''MzA4MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVsiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJJbnQ4QXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5Iiwi''@;'; put 'put ''VWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5Il0sSz10eXBlb2YgZ2xvYmFsVGhpcz4idSI/Ui5nOmdsb2JhbFRoaXM7TS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBJPVtdLGs9MDtrPHoubGVuZ3RoO2srKykiZnVuY3Rpb24iPT10eXBlb2YgS1t6W2tdXSYmKElbSS5sZW5ndGhd''@;'; put 'put ''PXpba10pO3JldHVybiBJfX0sNDk0NjpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6eyJjaXBoZXIiOiJB''@;'; put 'put ''RVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4''@;'; put 'put ''LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJt''@;'; put 'put ''b2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJs''@;'; put 'put ''b2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTIt''@;'; put 'put ''Y2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiOCI6eyJj''@;'; put 'put ''aXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjgiOnsiY2lwaGVy''@;'; put 'put ''IjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7ImNpcGhlciI6IkFF''@;'; put 'put ''UyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtl''@;'; put 'put ''eSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJp''@;'; put 'put ''diI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1v''@;'; put 'put ''ZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTIsIm1vZGUiOiJHQ00i''@;'; put 'put ''LCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRo''@;'; put 'put ''In19Jyl9LDUyMDc6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIy''@;'; put 'put ''NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0''@;'; put 'put ''ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNo''@;'; put 'put ''Ijoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRo''@;'; put 'put ''UlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4''@;'; put 'put ''MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2''@;'; put 'put ''Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2Rz''@;'; put 'put ''YSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9''@;'; put 'put ''LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIi''@;'; put 'put ''fSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJE''@;'; put 'put ''U0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJp''@;'; put 'put ''cGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0''@;'; put 'put ''MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3''@;'; put 'put ''MGQwMjA1MDUwMDA0MTAifX0nKX0sMTMwODpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7IjEuMy4xMzIuMC4xMCI6InNlY3AyNTZrMSIsIjEuMy4xMzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEwMDQ1LjMuMS4xIjoicDE5MiIsIjEuMi44NDAuMTAwNDUuMy4xLjci''@;'; put 'put ''OiJwMjU2IiwiMS4zLjEzMi4wLjM0IjoicDM4NCIsIjEuMy4xMzIuMC4zNSI6InA1MjEifScpfSwzMjA4Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ3siT19SRE9OTFkiOjAsIk9fV1JPTkxZIjoxLCJPX1JEV1IiOjIsIlNfSUZNVCI6NjE0NDAsIlNfSUZSRUciOjMy''@;'; put 'put ''NzY4LCJTX0lGRElSIjoxNjM4NCwiU19JRkNIUiI6ODE5MiwiU19JRkJMSyI6MjQ1NzYsIlNfSUZJRk8iOjQwOTYsIlNfSUZMTksiOjQwOTYwLCJTX0lGU09DSyI6NDkxNTIsIk9fQ1JFQVQiOjUxMiwiT19FWENMIjoyMDQ4LCJPX05PQ1RUWSI6MTMxMDcyLCJPX1RSVU5DIjoxMDI0LCJPX0FQ''@;'; put 'put ''UEVORCI6OCwiT19ESVJFQ1RPUlkiOjEwNDg1NzYsIk9fTk9GT0xMT1ciOjI1NiwiT19TWU5DIjoxMjgsIk9fU1lNTElOSyI6MjA5NzE1MiwiT19OT05CTE9DSyI6NCwiU19JUldYVSI6NDQ4LCJTX0lSVVNSIjoyNTYsIlNfSVdVU1IiOjEyOCwiU19JWFVTUiI6NjQsIlNfSVJXWEciOjU2LCJT''@;'; put 'put ''X0lSR1JQIjozMiwiU19JV0dSUCI6MTYsIlNfSVhHUlAiOjgsIlNfSVJXWE8iOjcsIlNfSVJPVEgiOjQsIlNfSVdPVEgiOjIsIlNfSVhPVEgiOjEsIkUyQklHIjo3LCJFQUNDRVMiOjEzLCJFQUREUklOVVNFIjo0OCwiRUFERFJOT1RBVkFJTCI6NDksIkVBRk5PU1VQUE9SVCI6NDcsIkVBR0FJ''@;'; put 'put ''TiI6MzUsIkVBTFJFQURZIjozNywiRUJBREYiOjksIkVCQURNU0ciOjk0LCJFQlVTWSI6MTYsIkVDQU5DRUxFRCI6ODksIkVDSElMRCI6MTAsIkVDT05OQUJPUlRFRCI6NTMsIkVDT05OUkVGVVNFRCI6NjEsIkVDT05OUkVTRVQiOjU0LCJFREVBRExLIjoxMSwiRURFU1RBRERSUkVRIjozOSwi''@;'; put 'put ''RURPTSI6MzMsIkVEUVVPVCI6NjksIkVFWElTVCI6MTcsIkVGQVVMVCI6MTQsIkVGQklHIjoyNywiRUhPU1RVTlJFQUNIIjo2NSwiRUlEUk0iOjkwLCJFSUxTRVEiOjkyLCJFSU5QUk9HUkVTUyI6MzYsIkVJTlRSIjo0LCJFSU5WQUwiOjIyLCJFSU8iOjUsIkVJU0NPTk4iOjU2LCJFSVNESVIi''@;'; put 'put ''OjIxLCJFTE9PUCI6NjIsIkVNRklMRSI6MjQsIkVNTElOSyI6MzEsIkVNU0dTSVpFIjo0MCwiRU1VTFRJSE9QIjo5NSwiRU5BTUVUT09MT05HIjo2MywiRU5FVERPV04iOjUwLCJFTkVUUkVTRVQiOjUyLCJFTkVUVU5SRUFDSCI6NTEsIkVORklMRSI6MjMsIkVOT0JVRlMiOjU1LCJFTk9EQVRB''@;'; put 'put ''Ijo5NiwiRU5PREVWIjoxOSwiRU5PRU5UIjoyLCJFTk9FWEVDIjo4LCJFTk9MQ0siOjc3LCJFTk9MSU5LIjo5NywiRU5PTUVNIjoxMiwiRU5PTVNHIjo5MSwiRU5PUFJPVE9PUFQiOjQyLCJFTk9TUEMiOjI4LCJFTk9TUiI6OTgsIkVOT1NUUiI6OTksIkVOT1NZUyI6NzgsIkVOT1RDT05OIjo1''@;'; put 'put ''NywiRU5PVERJUiI6MjAsIkVOT1RFTVBUWSI6NjYsIkVOT1RTT0NLIjozOCwiRU5PVFNVUCI6NDUsIkVOT1RUWSI6MjUsIkVOWElPIjo2LCJFT1BOT1RTVVBQIjoxMDIsIkVPVkVSRkxPVyI6ODQsIkVQRVJNIjoxLCJFUElQRSI6MzIsIkVQUk9UTyI6MTAwLCJFUFJPVE9OT1NVUFBPUlQiOjQz''@;'; put 'put ''LCJFUFJPVE9UWVBFIjo0MSwiRVJBTkdFIjozNCwiRVJPRlMiOjMwLCJFU1BJUEUiOjI5LCJFU1JDSCI6MywiRVNUQUxFIjo3MCwiRVRJTUUiOjEwMSwiRVRJTUVET1VUIjo2MCwiRVRYVEJTWSI6MjYsIkVXT1VMREJMT0NLIjozNSwiRVhERVYiOjE4LCJTSUdIVVAiOjEsIlNJR0lOVCI6Miwi''@;'; put 'put ''U0lHUVVJVCI6MywiU0lHSUxMIjo0LCJTSUdUUkFQIjo1LCJTSUdBQlJUIjo2LCJTSUdJT1QiOjYsIlNJR0JVUyI6MTAsIlNJR0ZQRSI6OCwiU0lHS0lMTCI6OSwiU0lHVVNSMSI6MzAsIlNJR1NFR1YiOjExLCJTSUdVU1IyIjozMSwiU0lHUElQRSI6MTMsIlNJR0FMUk0iOjE0LCJTSUdURVJN''@;'; put 'put ''IjoxNSwiU0lHQ0hMRCI6MjAsIlNJR0NPTlQiOjE5LCJTSUdTVE9QIjoxNywiU0lHVFNUUCI6MTgsIlNJR1RUSU4iOjIxLCJTSUdUVE9VIjoyMiwiU0lHVVJHIjoxNiwiU0lHWENQVSI6MjQsIlNJR1hGU1oiOjI1LCJTSUdWVEFMUk0iOjI2LCJTSUdQUk9GIjoyNywiU0lHV0lOQ0giOjI4LCJT''@;'; put 'put ''SUdJTyI6MjMsIlNJR1NZUyI6MTIsIlNTTF9PUF9BTEwiOjIxNDc0ODY3MTksIlNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04iOjI2MjE0NCwiU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSI6NDE5NDMwNCwiU1NMX09QX0NJU0NPX0FOWUNPTk5FQ1QiOjMy''@;'; put 'put ''NzY4LCJTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFIjo4MTkyLCJTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUciOjIxNDc0ODM2NDgsIlNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMiOjIwNDgsIlNTTF9PUF9FUEhFTUVSQUxfUlNBIjowLCJTU0xfT1BfTEVHQUNZX1NFUlZFUl9D''@;'; put 'put ''T05ORUNUIjo0LCJTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIiOjMyLCJTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHIjoxLCJTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORyI6MCwiU1NMX09QX05FVFNDQVBFX0NBX0ROX0JVRyI6NTM2ODcwOTEyLCJTU0xfT1BfTkVU''@;'; put 'put ''U0NBUEVfQ0hBTExFTkdFX0JVRyI6MiwiU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUciOjEwNzM3NDE4MjQsIlNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRyI6OCwiU1NMX09QX05PX0NPTVBSRVNTSU9OIjoxMzEwNzIsIlNTTF9PUF9OT19RVUVS''@;'; put 'put ''WV9NVFUiOjQwOTYsIlNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiI6NjU1MzYsIlNTTF9PUF9OT19TU0x2MiI6MTY3NzcyMTYsIlNTTF9PUF9OT19TU0x2MyI6MzM1NTQ0MzIsIlNTTF9PUF9OT19USUNLRVQiOjE2Mzg0LCJTU0xfT1BfTk9fVExTdjEiOjY3''@;'; put 'put ''MTA4ODY0LCJTU0xfT1BfTk9fVExTdjFfMSI6MjY4NDM1NDU2LCJTU0xfT1BfTk9fVExTdjFfMiI6MTM0MjE3NzI4LCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMSI6MCwiU1NMX09QX1BLQ1MxX0NIRUNLXzIiOjAsIlNTTF9PUF9TSU5HTEVfREhfVVNFIjoxMDQ4NTc2LCJTU0xfT1BfU0lOR0xFX0VD''@;'; put 'put ''REhfVVNFIjo1MjQyODgsIlNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUciOjEyOCwiU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRyI6MCwiU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVRyI6NTEyLCJTU0xfT1BfVExTX0Q1X0JVRyI6MjU2LCJTU0xfT1BfVExTX1JP''@;'; put 'put ''TExCQUNLX0JVRyI6ODM4ODYwOCwiRU5HSU5FX01FVEhPRF9EU0EiOjIsIkVOR0lORV9NRVRIT0RfREgiOjQsIkVOR0lORV9NRVRIT0RfUkFORCI6OCwiRU5HSU5FX01FVEhPRF9FQ0RIIjoxNiwiRU5HSU5FX01FVEhPRF9FQ0RTQSI6MzIsIkVOR0lORV9NRVRIT0RfQ0lQSEVSUyI6NjQsIkVO''@;'; put 'put ''R0lORV9NRVRIT0RfRElHRVNUUyI6MTI4LCJFTkdJTkVfTUVUSE9EX1NUT1JFIjoyNTYsIkVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUyI6NTEyLCJFTkdJTkVfTUVUSE9EX1BLRVlfQVNOMV9NRVRIUyI6MTAyNCwiRU5HSU5FX01FVEhPRF9BTEwiOjY1NTM1LCJFTkdJTkVfTUVUSE9EX05PTkUi''@;'; put 'put ''OjAsIkRIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUUiOjIsIkRIX0NIRUNLX1BfTk9UX1BSSU1FIjoxLCJESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SIjo0LCJESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SIjo4LCJOUE5fRU5BQkxFRCI6MSwiUlNBX1BLQ1MxX1BBRERJTkciOjEsIlJTQV9T''@;'; put 'put ''U0xWMjNfUEFERElORyI6MiwiUlNBX05PX1BBRERJTkciOjMsIlJTQV9QS0NTMV9PQUVQX1BBRERJTkciOjQsIlJTQV9YOTMxX1BBRERJTkciOjUsIlJTQV9QS0NTMV9QU1NfUEFERElORyI6NiwiUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEIjoyLCJQT0lOVF9DT05WRVJTSU9OX1VOQ09N''@;'; put 'put ''UFJFU1NFRCI6NCwiUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQiOjYsIkZfT0siOjAsIlJfT0siOjQsIldfT0siOjIsIlhfT0siOjEsIlVWX1VEUF9SRVVTRUFERFIiOjR9Jyl9LDk3OTk6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIs''@;'; put 'put ''InByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVl''@;'; put 'put ''N2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRl''@;'; put 'put ''Zjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1v''@;'; put 'put ''ZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1''@;'; put 'put ''MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2''@;'; put 'put ''MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAy''@;'; put 'put ''NGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3''@;'; put 'put ''YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNl''@;'; put 'put ''M2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJl''@;'; put 'put ''OWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2''@;'; put 'put ''OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRh''@;'; put 'put ''ZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJi''@;'; put 'put ''MTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIx''@;'; put 'put ''NjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2Yjdl''@;'; put 'put ''ZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0''@;'; put 'put ''NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJk''@;'; put 'put ''ZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVk''@;'; put 'put ''NmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4''@;'; put 'put ''ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVm''@;'; put 'put ''MTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4''@;'; put 'put ''MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5''@;'; put 'put ''N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFk''@;'; put 'put ''MmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2''@;'; put 'put ''OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5''@;'; put 'put ''MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2''@;'; put 'put ''NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5''@;'; put 'put ''ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2''@;'; put 'put ''YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2Mjhi''@;'; put 'put ''ODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5''@;'; put 'put ''ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMy''@;'; put 'put ''OTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUw''@;'; put 'put ''NDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5''@;'; put 'put ''NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYy''@;'; put 'put ''ODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRj''@;'; put 'put ''YjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4''@;'; put 'put ''Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4''@;'; put 'put ''MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5''@;'; put 'put ''MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0''@;'; put 'put ''MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUx''@;'; put 'put ''ZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5''@;'; put 'put ''ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fScpfSw4NTk3Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPXtpODoiNi41LjQifX0sMjU2MjpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIs''@;'; put 'put ''IjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0''@;'; put 'put ''MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4x''@;'; put 'put ''MDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn0nKX0sMzcwNDpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCdbImFjIiwiY29t''@;'; put 'put ''LmFjIiwiZWR1LmFjIiwiZ292LmFjIiwibmV0LmFjIiwibWlsLmFjIiwib3JnLmFjIiwiYWQiLCJub20uYWQiLCJhZSIsImNvLmFlIiwibmV0LmFlIiwib3JnLmFlIiwic2NoLmFlIiwiYWMuYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJhZXJvIiwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJv''@;'; put 'put ''IiwiYWNjaWRlbnQtcHJldmVudGlvbi5hZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21lLmFlcm8iLCJhZ2VudHMuYWVybyIsImFpcmNyYWZ0LmFlcm8iLCJhaXJsaW5lLmFlcm8iLCJhaXJwb3J0LmFlcm8iLCJhaXItc3VydmVpbGxhbmNlLmFlcm8iLCJh''@;'; put 'put ''aXJ0cmFmZmljLmFlcm8iLCJhaXItdHJhZmZpYy1jb250cm9sLmFlcm8iLCJhbWJ1bGFuY2UuYWVybyIsImFtdXNlbWVudC5hZXJvIiwiYXNzb2NpYXRpb24uYWVybyIsImF1dGhvci5hZXJvIiwiYmFsbG9vbmluZy5hZXJvIiwiYnJva2VyLmFlcm8iLCJjYWEuYWVybyIsImNhcmdvLmFlcm8i''@;'; put 'put ''LCJjYXRlcmluZy5hZXJvIiwiY2VydGlmaWNhdGlvbi5hZXJvIiwiY2hhbXBpb25zaGlwLmFlcm8iLCJjaGFydGVyLmFlcm8iLCJjaXZpbGF2aWF0aW9uLmFlcm8iLCJjbHViLmFlcm8iLCJjb25mZXJlbmNlLmFlcm8iLCJjb25zdWx0YW50LmFlcm8iLCJjb25zdWx0aW5nLmFlcm8iLCJjb250''@;'; put 'put ''cm9sLmFlcm8iLCJjb3VuY2lsLmFlcm8iLCJjcmV3LmFlcm8iLCJkZXNpZ24uYWVybyIsImRnY2EuYWVybyIsImVkdWNhdG9yLmFlcm8iLCJlbWVyZ2VuY3kuYWVybyIsImVuZ2luZS5hZXJvIiwiZW5naW5lZXIuYWVybyIsImVudGVydGFpbm1lbnQuYWVybyIsImVxdWlwbWVudC5hZXJvIiwi''@;'; put 'put ''ZXhjaGFuZ2UuYWVybyIsImV4cHJlc3MuYWVybyIsImZlZGVyYXRpb24uYWVybyIsImZsaWdodC5hZXJvIiwiZnVlbC5hZXJvIiwiZ2xpZGluZy5hZXJvIiwiZ292ZXJubWVudC5hZXJvIiwiZ3JvdW5kaGFuZGxpbmcuYWVybyIsImdyb3VwLmFlcm8iLCJoYW5nZ2xpZGluZy5hZXJvIiwiaG9t''@;'; put 'put ''ZWJ1aWx0LmFlcm8iLCJpbnN1cmFuY2UuYWVybyIsImpvdXJuYWwuYWVybyIsImpvdXJuYWxpc3QuYWVybyIsImxlYXNpbmcuYWVybyIsImxvZ2lzdGljcy5hZXJvIiwibWFnYXppbmUuYWVybyIsIm1haW50ZW5hbmNlLmFlcm8iLCJtZWRpYS5hZXJvIiwibWljcm9saWdodC5hZXJvIiwibW9k''@;'; put 'put ''ZWxsaW5nLmFlcm8iLCJuYXZpZ2F0aW9uLmFlcm8iLCJwYXJhY2h1dGluZy5hZXJvIiwicGFyYWdsaWRpbmcuYWVybyIsInBhc3Nlbmdlci1hc3NvY2lhdGlvbi5hZXJvIiwicGlsb3QuYWVybyIsInByZXNzLmFlcm8iLCJwcm9kdWN0aW9uLmFlcm8iLCJyZWNyZWF0aW9uLmFlcm8iLCJyZXBi''@;'; put 'put ''b2R5LmFlcm8iLCJyZXMuYWVybyIsInJlc2VhcmNoLmFlcm8iLCJyb3RvcmNyYWZ0LmFlcm8iLCJzYWZldHkuYWVybyIsInNjaWVudGlzdC5hZXJvIiwic2VydmljZXMuYWVybyIsInNob3cuYWVybyIsInNreWRpdmluZy5hZXJvIiwic29mdHdhcmUuYWVybyIsInN0dWRlbnQuYWVybyIsInRy''@;'; put 'put ''YWRlci5hZXJvIiwidHJhZGluZy5hZXJvIiwidHJhaW5lci5hZXJvIiwidW5pb24uYWVybyIsIndvcmtpbmdncm91cC5hZXJvIiwid29ya3MuYWVybyIsImFmIiwiZ292LmFmIiwiY29tLmFmIiwib3JnLmFmIiwibmV0LmFmIiwiZWR1LmFmIiwiYWciLCJjb20uYWciLCJvcmcuYWciLCJuZXQu''@;'; put 'put ''YWciLCJjby5hZyIsIm5vbS5hZyIsImFpIiwib2ZmLmFpIiwiY29tLmFpIiwibmV0LmFpIiwib3JnLmFpIiwiYWwiLCJjb20uYWwiLCJlZHUuYWwiLCJnb3YuYWwiLCJtaWwuYWwiLCJuZXQuYWwiLCJvcmcuYWwiLCJhbSIsImNvLmFtIiwiY29tLmFtIiwiY29tbXVuZS5hbSIsIm5ldC5hbSIs''@;'; put 'put ''Im9yZy5hbSIsImFvIiwiZWQuYW8iLCJndi5hbyIsIm9nLmFvIiwiY28uYW8iLCJwYi5hbyIsIml0LmFvIiwiYXEiLCJhciIsImJldC5hciIsImNvbS5hciIsImNvb3AuYXIiLCJlZHUuYXIiLCJnb2IuYXIiLCJnb3YuYXIiLCJpbnQuYXIiLCJtaWwuYXIiLCJtdXNpY2EuYXIiLCJtdXR1YWwu''@;'; put 'put ''YXIiLCJuZXQuYXIiLCJvcmcuYXIiLCJzZW5hc2EuYXIiLCJ0dXIuYXIiLCJhcnBhIiwiZTE2NC5hcnBhIiwiaW4tYWRkci5hcnBhIiwiaXA2LmFycGEiLCJpcmlzLmFycGEiLCJ1cmkuYXJwYSIsInVybi5hcnBhIiwiYXMiLCJnb3YuYXMiLCJhc2lhIiwiYXQiLCJhYy5hdCIsImNvLmF0Iiwi''@;'; put 'put ''Z3YuYXQiLCJvci5hdCIsInN0aC5hYy5hdCIsImF1IiwiY29tLmF1IiwibmV0LmF1Iiwib3JnLmF1IiwiZWR1LmF1IiwiZ292LmF1IiwiYXNuLmF1IiwiaWQuYXUiLCJpbmZvLmF1IiwiY29uZi5hdSIsIm96LmF1IiwiYWN0LmF1IiwibnN3LmF1IiwibnQuYXUiLCJxbGQuYXUiLCJzYS5hdSIs''@;'; put 'put ''InRhcy5hdSIsInZpYy5hdSIsIndhLmF1IiwiYWN0LmVkdS5hdSIsImNhdGhvbGljLmVkdS5hdSIsIm5zdy5lZHUuYXUiLCJudC5lZHUuYXUiLCJxbGQuZWR1LmF1Iiwic2EuZWR1LmF1IiwidGFzLmVkdS5hdSIsInZpYy5lZHUuYXUiLCJ3YS5lZHUuYXUiLCJxbGQuZ292LmF1Iiwic2EuZ292''@;'; put 'put ''LmF1IiwidGFzLmdvdi5hdSIsInZpYy5nb3YuYXUiLCJ3YS5nb3YuYXUiLCJzY2hvb2xzLm5zdy5lZHUuYXUiLCJhdyIsImNvbS5hdyIsImF4IiwiYXoiLCJjb20uYXoiLCJuZXQuYXoiLCJpbnQuYXoiLCJnb3YuYXoiLCJvcmcuYXoiLCJlZHUuYXoiLCJpbmZvLmF6IiwicHAuYXoiLCJtaWwu''@;'; put 'put ''YXoiLCJuYW1lLmF6IiwicHJvLmF6IiwiYml6LmF6IiwiYmEiLCJjb20uYmEiLCJlZHUuYmEiLCJnb3YuYmEiLCJtaWwuYmEiLCJuZXQuYmEiLCJvcmcuYmEiLCJiYiIsImJpei5iYiIsImNvLmJiIiwiY29tLmJiIiwiZWR1LmJiIiwiZ292LmJiIiwiaW5mby5iYiIsIm5ldC5iYiIsIm9yZy5i''@;'; put 'put ''YiIsInN0b3JlLmJiIiwidHYuYmIiLCIqLmJkIiwiYmUiLCJhYy5iZSIsImJmIiwiZ292LmJmIiwiYmciLCJhLmJnIiwiYi5iZyIsImMuYmciLCJkLmJnIiwiZS5iZyIsImYuYmciLCJnLmJnIiwiaC5iZyIsImkuYmciLCJqLmJnIiwiay5iZyIsImwuYmciLCJtLmJnIiwibi5iZyIsIm8uYmci''@;'; put 'put ''LCJwLmJnIiwicS5iZyIsInIuYmciLCJzLmJnIiwidC5iZyIsInUuYmciLCJ2LmJnIiwidy5iZyIsInguYmciLCJ5LmJnIiwiei5iZyIsIjAuYmciLCIxLmJnIiwiMi5iZyIsIjMuYmciLCI0LmJnIiwiNS5iZyIsIjYuYmciLCI3LmJnIiwiOC5iZyIsIjkuYmciLCJiaCIsImNvbS5iaCIsImVk''@;'; put 'put ''dS5iaCIsIm5ldC5iaCIsIm9yZy5iaCIsImdvdi5iaCIsImJpIiwiY28uYmkiLCJjb20uYmkiLCJlZHUuYmkiLCJvci5iaSIsIm9yZy5iaSIsImJpeiIsImJqIiwiYXNzby5iaiIsImJhcnJlYXUuYmoiLCJnb3V2LmJqIiwiYm0iLCJjb20uYm0iLCJlZHUuYm0iLCJnb3YuYm0iLCJuZXQuYm0i''@;'; put 'put ''LCJvcmcuYm0iLCJibiIsImNvbS5ibiIsImVkdS5ibiIsImdvdi5ibiIsIm5ldC5ibiIsIm9yZy5ibiIsImJvIiwiY29tLmJvIiwiZWR1LmJvIiwiZ29iLmJvIiwiaW50LmJvIiwib3JnLmJvIiwibmV0LmJvIiwibWlsLmJvIiwidHYuYm8iLCJ3ZWIuYm8iLCJhY2FkZW1pYS5ibyIsImFncm8u''@;'; put 'put ''Ym8iLCJhcnRlLmJvIiwiYmxvZy5ibyIsImJvbGl2aWEuYm8iLCJjaWVuY2lhLmJvIiwiY29vcGVyYXRpdmEuYm8iLCJkZW1vY3JhY2lhLmJvIiwiZGVwb3J0ZS5ibyIsImVjb2xvZ2lhLmJvIiwiZWNvbm9taWEuYm8iLCJlbXByZXNhLmJvIiwiaW5kaWdlbmEuYm8iLCJpbmR1c3RyaWEuYm8i''@;'; put 'put ''LCJpbmZvLmJvIiwibWVkaWNpbmEuYm8iLCJtb3ZpbWllbnRvLmJvIiwibXVzaWNhLmJvIiwibmF0dXJhbC5ibyIsIm5vbWJyZS5ibyIsIm5vdGljaWFzLmJvIiwicGF0cmlhLmJvIiwicG9saXRpY2EuYm8iLCJwcm9mZXNpb25hbC5ibyIsInBsdXJpbmFjaW9uYWwuYm8iLCJwdWVibG8uYm8i''@;'; put 'put ''LCJyZXZpc3RhLmJvIiwic2FsdWQuYm8iLCJ0ZWNub2xvZ2lhLmJvIiwidGtzYXQuYm8iLCJ0cmFuc3BvcnRlLmJvIiwid2lraS5ibyIsImJyIiwiOWd1YWN1LmJyIiwiYWJjLmJyIiwiYWRtLmJyIiwiYWR2LmJyIiwiYWdyLmJyIiwiYWp1LmJyIiwiYW0uYnIiLCJhbmFuaS5iciIsImFwYXJl''@;'; put 'put ''Y2lkYS5iciIsImFwcC5iciIsImFycS5iciIsImFydC5iciIsImF0by5iciIsImIuYnIiLCJiYXJ1ZXJpLmJyIiwiYmVsZW0uYnIiLCJiaHouYnIiLCJiaWIuYnIiLCJiaW8uYnIiLCJibG9nLmJyIiwiYm1kLmJyIiwiYm9hdmlzdGEuYnIiLCJic2IuYnIiLCJjYW1waW5hZ3JhbmRlLmJyIiwi''@;'; put 'put ''Y2FtcGluYXMuYnIiLCJjYXhpYXMuYnIiLCJjaW0uYnIiLCJjbmcuYnIiLCJjbnQuYnIiLCJjb20uYnIiLCJjb250YWdlbS5iciIsImNvb3AuYnIiLCJjb3ouYnIiLCJjcmkuYnIiLCJjdWlhYmEuYnIiLCJjdXJpdGliYS5iciIsImRlZi5iciIsImRlcy5iciIsImRldC5iciIsImRldi5iciIs''@;'; put 'put ''ImVjbi5iciIsImVjby5iciIsImVkdS5iciIsImVtcC5iciIsImVuZi5iciIsImVuZy5iciIsImVzcC5iciIsImV0Yy5iciIsImV0aS5iciIsImZhci5iciIsImZlaXJhLmJyIiwiZmxvZy5iciIsImZsb3JpcGEuYnIiLCJmbS5iciIsImZuZC5iciIsImZvcnRhbC5iciIsImZvdC5iciIsImZv''@;'; put 'put ''ei5iciIsImZzdC5iciIsImcxMi5iciIsImdlby5iciIsImdnZi5iciIsImdvaWFuaWEuYnIiLCJnb3YuYnIiLCJhYy5nb3YuYnIiLCJhbC5nb3YuYnIiLCJhbS5nb3YuYnIiLCJhcC5nb3YuYnIiLCJiYS5nb3YuYnIiLCJjZS5nb3YuYnIiLCJkZi5nb3YuYnIiLCJlcy5nb3YuYnIiLCJnby5n''@;'; put 'put ''b3YuYnIiLCJtYS5nb3YuYnIiLCJtZy5nb3YuYnIiLCJtcy5nb3YuYnIiLCJtdC5nb3YuYnIiLCJwYS5nb3YuYnIiLCJwYi5nb3YuYnIiLCJwZS5nb3YuYnIiLCJwaS5nb3YuYnIiLCJwci5nb3YuYnIiLCJyai5nb3YuYnIiLCJybi5nb3YuYnIiLCJyby5nb3YuYnIiLCJyci5nb3YuYnIiLCJy''@;'; put 'put ''cy5nb3YuYnIiLCJzYy5nb3YuYnIiLCJzZS5nb3YuYnIiLCJzcC5nb3YuYnIiLCJ0by5nb3YuYnIiLCJncnUuYnIiLCJpbWIuYnIiLCJpbmQuYnIiLCJpbmYuYnIiLCJqYWIuYnIiLCJqYW1wYS5iciIsImpkZi5iciIsImpvaW52aWxsZS5iciIsImpvci5iciIsImp1cy5iciIsImxlZy5iciIs''@;'; put 'put ''ImxlbC5iciIsImxvZy5iciIsImxvbmRyaW5hLmJyIiwibWFjYXBhLmJyIiwibWFjZWlvLmJyIiwibWFuYXVzLmJyIiwibWFyaW5nYS5iciIsIm1hdC5iciIsIm1lZC5iciIsIm1pbC5iciIsIm1vcmVuYS5iciIsIm1wLmJyIiwibXVzLmJyIiwibmF0YWwuYnIiLCJuZXQuYnIiLCJuaXRlcm9p''@;'; put 'put ''LmJyIiwiKi5ub20uYnIiLCJub3QuYnIiLCJudHIuYnIiLCJvZG8uYnIiLCJvbmcuYnIiLCJvcmcuYnIiLCJvc2FzY28uYnIiLCJwYWxtYXMuYnIiLCJwb2EuYnIiLCJwcGcuYnIiLCJwcm8uYnIiLCJwc2MuYnIiLCJwc2kuYnIiLCJwdmguYnIiLCJxc2wuYnIiLCJyYWRpby5iciIsInJlYy5i''@;'; put 'put ''ciIsInJlY2lmZS5iciIsInJlcC5iciIsInJpYmVpcmFvLmJyIiwicmlvLmJyIiwicmlvYnJhbmNvLmJyIiwicmlvcHJldG8uYnIiLCJzYWx2YWRvci5iciIsInNhbXBhLmJyIiwic2FudGFtYXJpYS5iciIsInNhbnRvYW5kcmUuYnIiLCJzYW9iZXJuYXJkby5iciIsInNhb2dvbmNhLmJyIiwi''@;'; put 'put ''c2VnLmJyIiwic2pjLmJyIiwic2xnLmJyIiwic2x6LmJyIiwic29yb2NhYmEuYnIiLCJzcnYuYnIiLCJ0YXhpLmJyIiwidGMuYnIiLCJ0ZWMuYnIiLCJ0ZW8uYnIiLCJ0aGUuYnIiLCJ0bXAuYnIiLCJ0cmQuYnIiLCJ0dXIuYnIiLCJ0di5iciIsInVkaS5iciIsInZldC5iciIsInZpeC5iciIs''@;'; put 'put ''InZsb2cuYnIiLCJ3aWtpLmJyIiwiemxnLmJyIiwiYnMiLCJjb20uYnMiLCJuZXQuYnMiLCJvcmcuYnMiLCJlZHUuYnMiLCJnb3YuYnMiLCJidCIsImNvbS5idCIsImVkdS5idCIsImdvdi5idCIsIm5ldC5idCIsIm9yZy5idCIsImJ2IiwiYnciLCJjby5idyIsIm9yZy5idyIsImJ5IiwiZ292''@;'; put 'put ''LmJ5IiwibWlsLmJ5IiwiY29tLmJ5Iiwib2YuYnkiLCJieiIsImNvbS5ieiIsIm5ldC5ieiIsIm9yZy5ieiIsImVkdS5ieiIsImdvdi5ieiIsImNhIiwiYWIuY2EiLCJiYy5jYSIsIm1iLmNhIiwibmIuY2EiLCJuZi5jYSIsIm5sLmNhIiwibnMuY2EiLCJudC5jYSIsIm51LmNhIiwib24uY2Ei''@;'; put 'put ''LCJwZS5jYSIsInFjLmNhIiwic2suY2EiLCJ5ay5jYSIsImdjLmNhIiwiY2F0IiwiY2MiLCJjZCIsImdvdi5jZCIsImNmIiwiY2ciLCJjaCIsImNpIiwib3JnLmNpIiwib3IuY2kiLCJjb20uY2kiLCJjby5jaSIsImVkdS5jaSIsImVkLmNpIiwiYWMuY2kiLCJuZXQuY2kiLCJnby5jaSIsImFz''@;'; put 'put ''c28uY2kiLCJhXHhlOXJvcG9ydC5jaSIsImludC5jaSIsInByZXNzZS5jaSIsIm1kLmNpIiwiZ291di5jaSIsIiouY2siLCIhd3d3LmNrIiwiY2wiLCJjby5jbCIsImdvYi5jbCIsImdvdi5jbCIsIm1pbC5jbCIsImNtIiwiY28uY20iLCJjb20uY20iLCJnb3YuY20iLCJuZXQuY20iLCJjbiIs''@;'; put 'put ''ImFjLmNuIiwiY29tLmNuIiwiZWR1LmNuIiwiZ292LmNuIiwibmV0LmNuIiwib3JnLmNuIiwibWlsLmNuIiwiXHU1MTZjXHU1M2Y4LmNuIiwiXHU3ZjUxXHU3ZWRjLmNuIiwiXHU3ZGIyXHU3ZDYxLmNuIiwiYWguY24iLCJiai5jbiIsImNxLmNuIiwiZmouY24iLCJnZC5jbiIsImdzLmNuIiwi''@;'; put 'put ''Z3ouY24iLCJneC5jbiIsImhhLmNuIiwiaGIuY24iLCJoZS5jbiIsImhpLmNuIiwiaGwuY24iLCJobi5jbiIsImpsLmNuIiwianMuY24iLCJqeC5jbiIsImxuLmNuIiwibm0uY24iLCJueC5jbiIsInFoLmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNu''@;'; put 'put ''IiwieGouY24iLCJ4ei5jbiIsInluLmNuIiwiemouY24iLCJoay5jbiIsIm1vLmNuIiwidHcuY24iLCJjbyIsImFydHMuY28iLCJjb20uY28iLCJlZHUuY28iLCJmaXJtLmNvIiwiZ292LmNvIiwiaW5mby5jbyIsImludC5jbyIsIm1pbC5jbyIsIm5ldC5jbyIsIm5vbS5jbyIsIm9yZy5jbyIs''@;'; put 'put ''InJlYy5jbyIsIndlYi5jbyIsImNvbSIsImNvb3AiLCJjciIsImFjLmNyIiwiY28uY3IiLCJlZC5jciIsImZpLmNyIiwiZ28uY3IiLCJvci5jciIsInNhLmNyIiwiY3UiLCJjb20uY3UiLCJlZHUuY3UiLCJvcmcuY3UiLCJuZXQuY3UiLCJnb3YuY3UiLCJpbmYuY3UiLCJjdiIsImNvbS5jdiIs''@;'; put 'put ''ImVkdS5jdiIsImludC5jdiIsIm5vbWUuY3YiLCJvcmcuY3YiLCJjdyIsImNvbS5jdyIsImVkdS5jdyIsIm5ldC5jdyIsIm9yZy5jdyIsImN4IiwiZ292LmN4IiwiY3kiLCJhYy5jeSIsImJpei5jeSIsImNvbS5jeSIsImVrbG9nZXMuY3kiLCJnb3YuY3kiLCJsdGQuY3kiLCJtaWwuY3kiLCJu''@;'; put 'put ''ZXQuY3kiLCJvcmcuY3kiLCJwcmVzcy5jeSIsInByby5jeSIsInRtLmN5IiwiY3oiLCJkZSIsImRqIiwiZGsiLCJkbSIsImNvbS5kbSIsIm5ldC5kbSIsIm9yZy5kbSIsImVkdS5kbSIsImdvdi5kbSIsImRvIiwiYXJ0LmRvIiwiY29tLmRvIiwiZWR1LmRvIiwiZ29iLmRvIiwiZ292LmRvIiwi''@;'; put 'put ''bWlsLmRvIiwibmV0LmRvIiwib3JnLmRvIiwic2xkLmRvIiwid2ViLmRvIiwiZHoiLCJhcnQuZHoiLCJhc3NvLmR6IiwiY29tLmR6IiwiZWR1LmR6IiwiZ292LmR6Iiwib3JnLmR6IiwibmV0LmR6IiwicG9sLmR6Iiwic29jLmR6IiwidG0uZHoiLCJlYyIsImNvbS5lYyIsImluZm8uZWMiLCJu''@;'; put 'put ''ZXQuZWMiLCJmaW4uZWMiLCJrMTIuZWMiLCJtZWQuZWMiLCJwcm8uZWMiLCJvcmcuZWMiLCJlZHUuZWMiLCJnb3YuZWMiLCJnb2IuZWMiLCJtaWwuZWMiLCJlZHUiLCJlZSIsImVkdS5lZSIsImdvdi5lZSIsInJpaWsuZWUiLCJsaWIuZWUiLCJtZWQuZWUiLCJjb20uZWUiLCJwcmkuZWUiLCJh''@;'; put 'put ''aXAuZWUiLCJvcmcuZWUiLCJmaWUuZWUiLCJlZyIsImNvbS5lZyIsImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsIm1pbC5lZyIsIm5hbWUuZWciLCJuZXQuZWciLCJvcmcuZWciLCJzY2kuZWciLCIqLmVyIiwiZXMiLCJjb20uZXMiLCJub20uZXMiLCJvcmcuZXMiLCJnb2IuZXMiLCJlZHUu''@;'; put 'put ''ZXMiLCJldCIsImNvbS5ldCIsImdvdi5ldCIsIm9yZy5ldCIsImVkdS5ldCIsImJpei5ldCIsIm5hbWUuZXQiLCJpbmZvLmV0IiwibmV0LmV0IiwiZXUiLCJmaSIsImFsYW5kLmZpIiwiZmoiLCJhYy5maiIsImJpei5maiIsImNvbS5maiIsImdvdi5maiIsImluZm8uZmoiLCJtaWwuZmoiLCJu''@;'; put 'put ''YW1lLmZqIiwibmV0LmZqIiwib3JnLmZqIiwicHJvLmZqIiwiKi5mayIsImNvbS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9yZy5mbSIsImZtIiwiZm8iLCJmciIsImFzc28uZnIiLCJjb20uZnIiLCJnb3V2LmZyIiwibm9tLmZyIiwicHJkLmZyIiwidG0uZnIiLCJhZXJvcG9ydC5mciIsImF2''@;'; put 'put ''b2NhdC5mciIsImF2b3Vlcy5mciIsImNjaS5mciIsImNoYW1iYWdyaS5mciIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy5mciIsImV4cGVydHMtY29tcHRhYmxlcy5mciIsImdlb21ldHJlLWV4cGVydC5mciIsImdyZXRhLmZyIiwiaHVpc3NpZXItanVzdGljZS5mciIsIm1lZGVjaW4uZnIiLCJu''@;'; put 'put ''b3RhaXJlcy5mciIsInBoYXJtYWNpZW4uZnIiLCJwb3J0LmZyIiwidmV0ZXJpbmFpcmUuZnIiLCJnYSIsImdiIiwiZWR1LmdkIiwiZ292LmdkIiwiZ2QiLCJnZSIsImNvbS5nZSIsImVkdS5nZSIsImdvdi5nZSIsIm9yZy5nZSIsIm1pbC5nZSIsIm5ldC5nZSIsInB2dC5nZSIsImdmIiwiZ2ci''@;'; put 'put ''LCJjby5nZyIsIm5ldC5nZyIsIm9yZy5nZyIsImdoIiwiY29tLmdoIiwiZWR1LmdoIiwiZ292LmdoIiwib3JnLmdoIiwibWlsLmdoIiwiZ2kiLCJjb20uZ2kiLCJsdGQuZ2kiLCJnb3YuZ2kiLCJtb2QuZ2kiLCJlZHUuZ2kiLCJvcmcuZ2kiLCJnbCIsImNvLmdsIiwiY29tLmdsIiwiZWR1Lmds''@;'; put 'put ''IiwibmV0LmdsIiwib3JnLmdsIiwiZ20iLCJnbiIsImFjLmduIiwiY29tLmduIiwiZWR1LmduIiwiZ292LmduIiwib3JnLmduIiwibmV0LmduIiwiZ292IiwiZ3AiLCJjb20uZ3AiLCJuZXQuZ3AiLCJtb2JpLmdwIiwiZWR1LmdwIiwib3JnLmdwIiwiYXNzby5ncCIsImdxIiwiZ3IiLCJjb20u''@;'; put 'put ''Z3IiLCJlZHUuZ3IiLCJuZXQuZ3IiLCJvcmcuZ3IiLCJnb3YuZ3IiLCJncyIsImd0IiwiY29tLmd0IiwiZWR1Lmd0IiwiZ29iLmd0IiwiaW5kLmd0IiwibWlsLmd0IiwibmV0Lmd0Iiwib3JnLmd0IiwiZ3UiLCJjb20uZ3UiLCJlZHUuZ3UiLCJnb3YuZ3UiLCJndWFtLmd1IiwiaW5mby5ndSIs''@;'; put 'put ''Im5ldC5ndSIsIm9yZy5ndSIsIndlYi5ndSIsImd3IiwiZ3kiLCJjby5neSIsImNvbS5neSIsImVkdS5neSIsImdvdi5neSIsIm5ldC5neSIsIm9yZy5neSIsImhrIiwiY29tLmhrIiwiZWR1LmhrIiwiZ292LmhrIiwiaWR2LmhrIiwibmV0LmhrIiwib3JnLmhrIiwiXHU1MTZjXHU1M2Y4Lmhr''@;'; put 'put ''IiwiXHU2NTU5XHU4MGIyLmhrIiwiXHU2NTRlXHU4MGIyLmhrIiwiXHU2NTNmXHU1ZTljLmhrIiwiXHU1MDBiXHU0ZWJhLmhrIiwiXHU0ZTJhXHVmZmZkXHVmZmZkLmhrIiwiXHU3Yjg3XHU0ZWJhLmhrIiwiXHU3ZGIyXHU3ZWRjLmhrIiwiXHU3ZjUxXHU3ZWRjLmhrIiwiXHU3ZWM0XHU3ZTU0''@;'; put 'put ''LmhrIiwiXHU3ZGIyXHU3ZDYxLmhrIiwiXHU3ZjUxXHU3ZDYxLmhrIiwiXHU3ZWM0XHU3ZWM3LmhrIiwiXHU3ZDQ0XHU3ZTU0LmhrIiwiXHU3ZDQ0XHU3ZWM3LmhrIiwiaG0iLCJobiIsImNvbS5obiIsImVkdS5obiIsIm9yZy5obiIsIm5ldC5obiIsIm1pbC5obiIsImdvYi5obiIsImhyIiwi''@;'; put 'put ''aXouaHIiLCJmcm9tLmhyIiwibmFtZS5ociIsImNvbS5ociIsImh0IiwiY29tLmh0Iiwic2hvcC5odCIsImZpcm0uaHQiLCJpbmZvLmh0IiwiYWR1bHQuaHQiLCJuZXQuaHQiLCJwcm8uaHQiLCJvcmcuaHQiLCJtZWQuaHQiLCJhcnQuaHQiLCJjb29wLmh0IiwicG9sLmh0IiwiYXNzby5odCIs''@;'; put 'put ''ImVkdS5odCIsInJlbC5odCIsImdvdXYuaHQiLCJwZXJzby5odCIsImh1IiwiY28uaHUiLCJpbmZvLmh1Iiwib3JnLmh1IiwicHJpdi5odSIsInNwb3J0Lmh1IiwidG0uaHUiLCIyMDAwLmh1IiwiYWdyYXIuaHUiLCJib2x0Lmh1IiwiY2FzaW5vLmh1IiwiY2l0eS5odSIsImVyb3RpY2EuaHUi''@;'; put 'put ''LCJlcm90aWthLmh1IiwiZmlsbS5odSIsImZvcnVtLmh1IiwiZ2FtZXMuaHUiLCJob3RlbC5odSIsImluZ2F0bGFuLmh1Iiwiam9nYXN6Lmh1Iiwia29ueXZlbG8uaHUiLCJsYWthcy5odSIsIm1lZGlhLmh1IiwibmV3cy5odSIsInJla2xhbS5odSIsInNleC5odSIsInNob3AuaHUiLCJzdWxp''@;'; put 'put ''Lmh1Iiwic3pleC5odSIsInRvenNkZS5odSIsInV0YXphcy5odSIsInZpZGVvLmh1IiwiaWQiLCJhYy5pZCIsImJpei5pZCIsImNvLmlkIiwiZGVzYS5pZCIsImdvLmlkIiwibWlsLmlkIiwibXkuaWQiLCJuZXQuaWQiLCJvci5pZCIsInBvbnBlcy5pZCIsInNjaC5pZCIsIndlYi5pZCIsImll''@;'; put 'put ''IiwiZ292LmllIiwiaWwiLCJhYy5pbCIsImNvLmlsIiwiZ292LmlsIiwiaWRmLmlsIiwiazEyLmlsIiwibXVuaS5pbCIsIm5ldC5pbCIsIm9yZy5pbCIsImltIiwiYWMuaW0iLCJjby5pbSIsImNvbS5pbSIsImx0ZC5jby5pbSIsIm5ldC5pbSIsIm9yZy5pbSIsInBsYy5jby5pbSIsInR0Lmlt''@;'; put 'put ''IiwidHYuaW0iLCJpbiIsImNvLmluIiwiZmlybS5pbiIsIm5ldC5pbiIsIm9yZy5pbiIsImdlbi5pbiIsImluZC5pbiIsIm5pYy5pbiIsImFjLmluIiwiZWR1LmluIiwicmVzLmluIiwiZ292LmluIiwibWlsLmluIiwiaW5mbyIsImludCIsImV1LmludCIsImlvIiwiY29tLmlvIiwiaXEiLCJn''@;'; put 'put ''b3YuaXEiLCJlZHUuaXEiLCJtaWwuaXEiLCJjb20uaXEiLCJvcmcuaXEiLCJuZXQuaXEiLCJpciIsImFjLmlyIiwiY28uaXIiLCJnb3YuaXIiLCJpZC5pciIsIm5ldC5pciIsIm9yZy5pciIsInNjaC5pciIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYyN1x1MDY0''@;'; put 'put ''YVx1MDYzMVx1MDYyN1x1MDY0Ni5pciIsImlzIiwibmV0LmlzIiwiY29tLmlzIiwiZWR1LmlzIiwiZ292LmlzIiwib3JnLmlzIiwiaW50LmlzIiwiaXQiLCJnb3YuaXQiLCJlZHUuaXQiLCJhYnIuaXQiLCJhYnJ1enpvLml0IiwiYW9zdGEtdmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJi''@;'; put 'put ''YXMuaXQiLCJiYXNpbGljYXRhLml0IiwiY2FsLml0IiwiY2FsYWJyaWEuaXQiLCJjYW0uaXQiLCJjYW1wYW5pYS5pdCIsImVtaWxpYS1yb21hZ25hLml0IiwiZW1pbGlhcm9tYWduYS5pdCIsImVtci5pdCIsImZyaXVsaS12LWdpdWxpYS5pdCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1''@;'; put 'put ''bGktdmVnaXVsaWEuaXQiLCJmcml1bGktdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGktdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaS12Z2l1bGlhLml0IiwiZnJpdWxpdi1naXVsaWEuaXQiLCJmcml1bGl2ZS1naXVsaWEuaXQiLCJmcml1bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEt''@;'; put 'put ''Z2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaXZnaXVsaWEuaXQiLCJmdmcuaXQiLCJsYXouaXQiLCJsYXppby5pdCIsImxpZy5pdCIsImxpZ3VyaWEuaXQiLCJsb20uaXQiLCJsb21iYXJkaWEuaXQiLCJsb21iYXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQi''@;'; put 'put ''LCJtYXJjaGUuaXQiLCJtb2wuaXQiLCJtb2xpc2UuaXQiLCJwaWVkbW9udC5pdCIsInBpZW1vbnRlLml0IiwicG1uLml0IiwicHVnLml0IiwicHVnbGlhLml0Iiwic2FyLml0Iiwic2FyZGVnbmEuaXQiLCJzYXJkaW5pYS5pdCIsInNpYy5pdCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0''@;'; put 'put ''YWEuaXQiLCJ0b3MuaXQiLCJ0b3NjYW5hLml0IiwidHJlbnRpbi1zdWQtdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW4tc3VkdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbi1zdWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGly''@;'; put 'put ''b2wuaXQiLCJ0cmVudGluby1hLWFkaWdlLml0IiwidHJlbnRpbm8tYWFkaWdlLml0IiwidHJlbnRpbm8tYWx0by1hZGlnZS5pdCIsInRyZW50aW5vLWFsdG9hZGlnZS5pdCIsInRyZW50aW5vLXMtdGlyb2wuaXQiLCJ0cmVudGluby1zdGlyb2wuaXQiLCJ0cmVudGluby1zdWQtdGlyb2wuaXQi''@;'; put 'put ''LCJ0cmVudGluby1zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluby1zdWR0aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbm8tc3VlZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vLml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJl''@;'; put 'put ''bnRpbm9hYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG9hZGlnZS5pdCIsInRyZW50aW5vcy10aXJvbC5pdCIsInRyZW50aW5vc3Rpcm9sLml0IiwidHJlbnRpbm9zdWQtdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3Vk''@;'; put 'put ''dGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZHRpcm9sLml0IiwidHJlbnRpbm9zdWVkLXRpcm9sLml0IiwidHJlbnRpbm9zdWVkdGlyb2wuaXQiLCJ0cmVudGluc3VkLXRpcm9sLml0IiwidHJlbnRpbnNceGZjZC10aXJvbC5pdCIsInRyZW50aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0''@;'; put 'put ''aXJvbC5pdCIsInRyZW50aW5zdWVkLXRpcm9sLml0IiwidHJlbnRpbnN1ZWR0aXJvbC5pdCIsInR1c2NhbnkuaXQiLCJ1bWIuaXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1hb3N0YS5pdCIsInZhbC1kYW9zdGEuaXQiLCJ2YWxkLWFvc3RhLml0IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEu''@;'; put 'put ''aXQiLCJ2YWxsZS1kLWFvc3RhLml0IiwidmFsbGUtZGFvc3RhLml0IiwidmFsbGVhb3N0YS5pdCIsInZhbGxlZC1hb3N0YS5pdCIsInZhbGxlZGFvc3RhLml0IiwidmFsbGVlLWFvc3RlLml0IiwidmFsbFx4ZTllLWFvc3RlLml0IiwidmFsbGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1h''@;'; put 'put ''b3N0ZS5pdCIsInZhbGxlZWFvc3RlLml0IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2YWxsZWVkYW9zdGUuaXQiLCJ2YWxsXHhlOWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5ldG8uaXQiLCJhZy5pdCIsImFncmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRy''@;'; put 'put ''aWEuaXQiLCJhbHRvLWFkaWdlLml0IiwiYWx0b2FkaWdlLml0IiwiYW4uaXQiLCJhbmNvbmEuaXQiLCJhbmRyaWEtYmFybGV0dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJhbmktYmFybGV0dGEuaXQiLCJhbmRyaWFiYXJsZXR0YXRyYW5pLml0IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFv''@;'; put 'put ''Lml0IiwiYW9zdGEuaXQiLCJhb3N0ZS5pdCIsImFwLml0IiwiYXEuaXQiLCJhcXVpbGEuaXQiLCJhci5pdCIsImFyZXp6by5pdCIsImFzY29saS1waWNlbm8uaXQiLCJhc2NvbGlwaWNlbm8uaXQiLCJhc3RpLml0IiwiYXQuaXQiLCJhdi5pdCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxz''@;'; put 'put ''YW4tc3VkdGlyb2wuaXQiLCJiYWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJiYWxzYW4tc3VlZHRpcm9sLml0IiwiYmFsc2FuLml0IiwiYmFyaS5pdCIsImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdCIsImJhcmxldHRhdHJhbmlhbmRyaWEuaXQiLCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0Iiwi''@;'; put 'put ''YmVyZ2Ftby5pdCIsImJnLml0IiwiYmkuaXQiLCJiaWVsbGEuaXQiLCJibC5pdCIsImJuLml0IiwiYm8uaXQiLCJib2xvZ25hLml0IiwiYm9semFuby1hbHRvYWRpZ2UuaXQiLCJib2x6YW5vLml0IiwiYm96ZW4tc3VkdGlyb2wuaXQiLCJib3plbi1zXHhmY2R0aXJvbC5pdCIsImJvemVuLXN1''@;'; put 'put ''ZWR0aXJvbC5pdCIsImJvemVuLml0IiwiYnIuaXQiLCJicmVzY2lhLml0IiwiYnJpbmRpc2kuaXQiLCJicy5pdCIsImJ0Lml0IiwiYnVsc2FuLXN1ZHRpcm9sLml0IiwiYnVsc2FuLXNceGZjZHRpcm9sLml0IiwiYnVsc2FuLXN1ZWR0aXJvbC5pdCIsImJ1bHNhbi5pdCIsImJ6Lml0IiwiY2Eu''@;'; put 'put ''aXQiLCJjYWdsaWFyaS5pdCIsImNhbHRhbmlzc2V0dGEuaXQiLCJjYW1waWRhbm8tbWVkaW8uaXQiLCJjYW1waWRhbm9tZWRpby5pdCIsImNhbXBvYmFzc28uaXQiLCJjYXJib25pYS1pZ2xlc2lhcy5pdCIsImNhcmJvbmlhaWdsZXNpYXMuaXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFy''@;'; put 'put ''YW1hc3NhLml0IiwiY2FzZXJ0YS5pdCIsImNhdGFuaWEuaXQiLCJjYXRhbnphcm8uaXQiLCJjYi5pdCIsImNlLml0IiwiY2VzZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZvcmxceGVjLml0IiwiY2VzZW5hZm9ybGkuaXQiLCJjZXNlbmFmb3JsXHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0Iiwi''@;'; put 'put ''Y2kuaXQiLCJjbC5pdCIsImNuLml0IiwiY28uaXQiLCJjb21vLml0IiwiY29zZW56YS5pdCIsImNyLml0IiwiY3JlbW9uYS5pdCIsImNyb3RvbmUuaXQiLCJjcy5pdCIsImN0Lml0IiwiY3VuZW8uaXQiLCJjei5pdCIsImRlbGwtb2dsaWFzdHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVu''@;'; put 'put ''Lml0IiwiZW5uYS5pdCIsImZjLml0IiwiZmUuaXQiLCJmZXJtby5pdCIsImZlcnJhcmEuaXQiLCJmZy5pdCIsImZpLml0IiwiZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0IiwiZm0uaXQiLCJmb2dnaWEuaXQiLCJmb3JsaS1jZXNlbmEuaXQiLCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNl''@;'; put 'put ''c2VuYS5pdCIsImZvcmxceGVjY2VzZW5hLml0IiwiZnIuaXQiLCJmcm9zaW5vbmUuaXQiLCJnZS5pdCIsImdlbm9hLml0IiwiZ2Vub3ZhLml0IiwiZ28uaXQiLCJnb3JpemlhLml0IiwiZ3IuaXQiLCJncm9zc2V0by5pdCIsImlnbGVzaWFzLWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25p''@;'; put 'put ''YS5pdCIsImltLml0IiwiaW1wZXJpYS5pdCIsImlzLml0IiwiaXNlcm5pYS5pdCIsImtyLml0IiwibGEtc3BlemlhLml0IiwibGFxdWlsYS5pdCIsImxhc3BlemlhLml0IiwibGF0aW5hLml0IiwibGMuaXQiLCJsZS5pdCIsImxlY2NlLml0IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8u''@;'; put 'put ''aXQiLCJsby5pdCIsImxvZGkuaXQiLCJsdC5pdCIsImx1Lml0IiwibHVjY2EuaXQiLCJtYWNlcmF0YS5pdCIsIm1hbnRvdmEuaXQiLCJtYXNzYS1jYXJyYXJhLml0IiwibWFzc2FjYXJyYXJhLml0IiwibWF0ZXJhLml0IiwibWIuaXQiLCJtYy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5v''@;'; put 'put ''Lml0IiwibWVkaW9jYW1waWRhbm8uaXQiLCJtZXNzaW5hLml0IiwibWkuaXQiLCJtaWxhbi5pdCIsIm1pbGFuby5pdCIsIm1uLml0IiwibW8uaXQiLCJtb2RlbmEuaXQiLCJtb256YS1icmlhbnphLml0IiwibW9uemEtZS1kZWxsYS1icmlhbnphLml0IiwibW9uemEuaXQiLCJtb256YWJyaWFu''@;'; put 'put ''emEuaXQiLCJtb256YWVicmlhbnphLml0IiwibW9uemFlZGVsbGFicmlhbnphLml0IiwibXMuaXQiLCJtdC5pdCIsIm5hLml0IiwibmFwbGVzLml0IiwibmFwb2xpLml0Iiwibm8uaXQiLCJub3ZhcmEuaXQiLCJudS5pdCIsIm51b3JvLml0Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJp''@;'; put 'put ''YS10ZW1waW8uaXQiLCJvbGJpYXRlbXBpby5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8uaXQiLCJvdC5pdCIsInBhLml0IiwicGFkb3ZhLml0IiwicGFkdWEuaXQiLCJwYWxlcm1vLml0IiwicGFybWEuaXQiLCJwYXZpYS5pdCIsInBjLml0IiwicGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJw''@;'; put 'put ''ZXNhcm8tdXJiaW5vLml0IiwicGVzYXJvdXJiaW5vLml0IiwicGVzY2FyYS5pdCIsInBnLml0IiwicGkuaXQiLCJwaWFjZW56YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lhLml0IiwicG4uaXQiLCJwby5pdCIsInBvcmRlbm9uZS5pdCIsInBvdGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0Iiwi''@;'; put 'put ''cHQuaXQiLCJwdS5pdCIsInB2Lml0IiwicHouaXQiLCJyYS5pdCIsInJhZ3VzYS5pdCIsInJhdmVubmEuaXQiLCJyYy5pdCIsInJlLml0IiwicmVnZ2lvLWNhbGFicmlhLml0IiwicmVnZ2lvLWVtaWxpYS5pdCIsInJlZ2dpb2NhbGFicmlhLml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQi''@;'; put 'put ''LCJyaS5pdCIsInJpZXRpLml0IiwicmltaW5pLml0Iiwicm0uaXQiLCJybi5pdCIsInJvLml0Iiwicm9tYS5pdCIsInJvbWUuaXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIsInNhbGVybm8uaXQiLCJzYXNzYXJpLml0Iiwic2F2b25hLml0Iiwic2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0''@;'; put 'put ''Iiwic28uaXQiLCJzb25kcmlvLml0Iiwic3AuaXQiLCJzci5pdCIsInNzLml0Iiwic3VlZHRpcm9sLml0Iiwic1x4ZmNkdGlyb2wuaXQiLCJzdi5pdCIsInRhLml0IiwidGFyYW50by5pdCIsInRlLml0IiwidGVtcGlvLW9sYmlhLml0IiwidGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0''@;'; put 'put ''ZXJuaS5pdCIsInRuLml0IiwidG8uaXQiLCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRyLml0IiwidHJhbmktYW5kcmlhLWJhcmxldHRhLml0IiwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0IiwidHJhbmlhbmRyaWFiYXJsZXR0YS5pdCIsInRyYW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5p''@;'; put 'put ''Lml0IiwidHJlbnRvLml0IiwidHJldmlzby5pdCIsInRyaWVzdGUuaXQiLCJ0cy5pdCIsInR1cmluLml0IiwidHYuaXQiLCJ1ZC5pdCIsInVkaW5lLml0IiwidXJiaW5vLXBlc2Fyby5pdCIsInVyYmlub3Blc2Fyby5pdCIsInZhLml0IiwidmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZl''@;'; put 'put ''Lml0IiwidmVuZXppYS5pdCIsInZlbmljZS5pdCIsInZlcmJhbmlhLml0IiwidmVyY2VsbGkuaXQiLCJ2ZXJvbmEuaXQiLCJ2aS5pdCIsInZpYm8tdmFsZW50aWEuaXQiLCJ2aWJvdmFsZW50aWEuaXQiLCJ2aWNlbnphLml0Iiwidml0ZXJiby5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIs''@;'; put 'put ''InZ2Lml0IiwiamUiLCJjby5qZSIsIm5ldC5qZSIsIm9yZy5qZSIsIiouam0iLCJqbyIsImNvbS5qbyIsIm9yZy5qbyIsIm5ldC5qbyIsImVkdS5qbyIsInNjaC5qbyIsImdvdi5qbyIsIm1pbC5qbyIsIm5hbWUuam8iLCJqb2JzIiwianAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJlZC5q''@;'; put 'put ''cCIsImdvLmpwIiwiZ3IuanAiLCJsZy5qcCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwiYW9tb3JpLmpwIiwiY2hpYmEuanAiLCJlaGltZS5qcCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIsImZ1a3VzaGltYS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhpcm9z''@;'; put 'put ''aGltYS5qcCIsImhva2thaWRvLmpwIiwiaHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0ZS5qcCIsImthZ2F3YS5qcCIsImthZ29zaGltYS5qcCIsImthbmFnYXdhLmpwIiwia29jaGkuanAiLCJrdW1hbW90by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5YWdp''@;'; put 'put ''LmpwIiwibWl5YXpha2kuanAiLCJuYWdhbm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpwIiwib2l0YS5qcCIsIm9rYXlhbWEuanAiLCJva2luYXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpwIiwic2FpdGFtYS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIsInNo''@;'; put 'put ''aXp1b2thLmpwIiwidG9jaGlnaS5qcCIsInRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRveWFtYS5qcCIsIndha2F5YW1hLmpwIiwieWFtYWdhdGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1hbmFzaGkuanAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTYxMWJcdTc3ZTUu''@;'; put 'put ''anAiLCJcdTYxMWJcdTVhOWIuanAiLCJcdTUxNzVcdTVlYWIuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTgzMjhcdTU3Y2UuanAiLCJcdTUzMTdcdTZkNzdcdTkwNTMuanAiLCJcdTUzNDNcdTg0NDkuanAiLCJcdTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1''@;'; put 'put ''NzdcdTkxY2UuanAiLCJcdTY1YjBcdTZmNWYuanAiLCJcdTk3NTJcdTY4ZWUuanAiLCJcdTk3NTlcdTVjYTEuanAiLCJcdTY3NzFcdTRlYWMuanAiLCJcdTc3ZjNcdTVkZGQuanAiLCJcdTU3ZmNcdTczODkuanAiLCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkwZmQuanAiLCJcdTRmNTBc''@;'; put 'put ''dThjYzAuanAiLCJcdTU5MjdcdTUyMDYuanAiLCJcdTU5MjdcdTk2MmEuanAiLCJcdTU5NDhcdTgyNmYuanAiLCJcdTViYWVcdTU3Y2UuanAiLCJcdTViYWVcdTVkMGUuanAiLCJcdTViY2NcdTVjNzEuanAiLCJcdTVjNzFcdTUzZTMuanAiLCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4''@;'; put 'put ''YTguanAiLCJcdTVjYTlcdTYyNGIuanAiLCJcdTVjOTBcdTk2MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVjZjZcdTY4MzkuanAiLCJcdTVlODNcdTVjZjYuanAiLCJcdTVmYjNcdTVjZjYuanAiLCJcdTZjOTZcdTdlMDQuanAiLCJcdTZlY2JcdThjYzAuanAiLCJcdTc5NWVcdTU5NDhc''@;'; put 'put ''dTVkZGQuanAiLCJcdTc5OGZcdTRlOTUuanAiLCJcdTc5OGZcdTVjYTEuanAiLCJcdTc5OGZcdTVjZjYuanAiLCJcdTc5Y2JcdTc1MzAuanAiLCJcdTdmYTRcdTk5YWMuanAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlhZDhcdTc3ZTUuanAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2ZcdTUx''@;'; put 'put ''NTBcdTVjZjYuanAiLCIqLmthd2FzYWtpLmpwIiwiKi5raXRha3l1c2h1LmpwIiwiKi5rb2JlLmpwIiwiKi5uYWdveWEuanAiLCIqLnNhcHBvcm8uanAiLCIqLnNlbmRhaS5qcCIsIioueW9rb2hhbWEuanAiLCIhY2l0eS5rYXdhc2FraS5qcCIsIiFjaXR5LmtpdGFreXVzaHUuanAiLCIhY2l0''@;'; put 'put ''eS5rb2JlLmpwIiwiIWNpdHkubmFnb3lhLmpwIiwiIWNpdHkuc2FwcG9yby5qcCIsIiFjaXR5LnNlbmRhaS5qcCIsIiFjaXR5Lnlva29oYW1hLmpwIiwiYWlzYWkuYWljaGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpvLmFpY2hpLmpwIiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWljaGku''@;'; put 'put ''anAiLCJjaGl0YS5haWNoaS5qcCIsImZ1c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFpY2hpLmpwIiwiaGF6dS5haWNoaS5qcCIsImhla2luYW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFpY2hpLmpwIiwiaWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2EuYWlj''@;'; put 'put ''aGkuanAiLCJpbnV5YW1hLmFpY2hpLmpwIiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJrYW5pZS5haWNoaS5qcCIsImthcml5YS5haWNoaS5qcCIsImthc3VnYWkuYWljaGkuanAiLCJraXJhLmFpY2hpLmpwIiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFpY2hp''@;'; put 'put ''LmpwIiwia29uYW4uYWljaGkuanAiLCJrb3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5haWNoaS5qcCIsIm5pc2hpby5haWNoaS5qcCIsIm5pc3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGkuanAiLCJvZ3VjaGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIsIm9r''@;'; put 'put ''YXpha2kuYWljaGkuanAiLCJvd2FyaWFzYWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFpY2hpLmpwIiwic2hpbnNoaXJvLmFpY2hpLmpwIiwic2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5haWNoaS5qcCIsInRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1hLmFp''@;'; put 'put ''Y2hpLmpwIiwidG9laS5haWNoaS5qcCIsInRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1lLmFpY2hpLmpwIiwidG95b2FrZS5haWNoaS5qcCIsInRveW9oYXNoaS5haWNoaS5qcCIsInRveW9rYXdhLmFpY2hpLmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3RhLmFp''@;'; put 'put ''Y2hpLmpwIiwidHN1c2hpbWEuYWljaGkuanAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRhaXNlbi5ha2l0YS5qcCIsImZ1amlzYXRvLmFraXRhLmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFjaGlyb2dhdGEuYWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJoaWdh''@;'; put 'put ''c2hpbmFydXNlLmFraXRhLmpwIiwiaG9uam8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0YS5qcCIsImthbWlrb2FuaS5ha2l0YS5qcCIsImthbWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5ha2l0YS5qcCIsImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5ha2l0''@;'; put 'put ''YS5qcCIsImtvc2FrYS5ha2l0YS5qcCIsImt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5lLmFraXRhLmpwIiwibW9yaXlvc2hpLmFraXRhLmpwIiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGlyby5ha2l0YS5qcCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRhLmpw''@;'; put 'put ''Iiwib2dhdGEuYWtpdGEuanAiLCJzZW1ib2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpvLmFraXRhLmpwIiwiYW9tb3JpLmFvbW9yaS5qcCIsImdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5vaGUuYW9tb3JpLmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhpcmFu''@;'; put 'put ''YWkuYW9tb3JpLmpwIiwiaGlyb3Nha2kuYW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hpLmFvbW9yaS5qcCIsIm1pc2F3YS5hb21vcmkuanAiLCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9tYXJpLmFvbW9yaS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJhc2Uu''@;'; put 'put ''YW9tb3JpLmpwIiwib3dhbmkuYW9tb3JpLmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmkuanAiLCJzaGljaGlub2hlLmFvbW9yaS5qcCIsInNoaW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21vcmkuanAiLCJ0b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21vcmku''@;'; put 'put ''anAiLCJ0c3VydXRhLmFvbW9yaS5qcCIsImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4uY2hpYmEuanAiLCJjaG9zZWkuY2hpYmEuanAiLCJjaG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJhLmpwIiwiZnVuYWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJhLmpw''@;'; put 'put ''IiwiaGFuYW1pZ2F3YS5jaGliYS5qcCIsImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJpY2hpbm9taXlhLmNoaWJhLmpwIiwiaW56YWkuY2hpYmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImthbWFnYXlhLmNoaWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJrYXNo''@;'; put 'put ''aXdhLmNoaWJhLmpwIiwia2F0b3JpLmNoaWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJhLmpwIiwia2lzYXJhenUuY2hpYmEuanAiLCJrb3pha2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGliYS5qcCIsImt5b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEuanAi''@;'; put 'put ''LCJtaWRvcmkuY2hpYmEuanAiLCJtaWhhbWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJhLmNoaWJhLmpwIiwibXV0c3V6YXdhLmNoaWJhLmpwIiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJleWFtYS5jaGliYS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5hcml0''@;'; put 'put ''YS5jaGliYS5qcCIsIm5vZGEuY2hpYmEuanAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGliYS5qcCIsIm9uanVrdS5jaGliYS5qcCIsIm90YWtpLmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAiLCJzYWt1cmEuY2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAiLCJz''@;'; put 'put ''aGlyYWtvLmNoaWJhLmpwIiwic2hpcm9pLmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNoaWJhLmpwIiwic29zYS5jaGliYS5qcCIsInRha28uY2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5qcCIsInRvZ2FuZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpwIiwi''@;'; put 'put ''dG9taXNhdG8uY2hpYmEuanAiLCJ1cmF5YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5by5jaGliYS5qcCIsInlva2FpY2hpYmEuY2hpYmEuanAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanAiLCJ5b3RzdWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUuanAi''@;'; put 'put ''LCJob25haS5laGltZS5qcCIsImlrYXRhLmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5qcCIsImthbWlqaW1hLmVoaW1lLmpwIiwia2lob2t1LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1lLmpwIiwibWFzYWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5qcCIs''@;'; put 'put ''Im1hdHN1eWFtYS5laGltZS5qcCIsIm5hbWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5laGltZS5qcCIsInNhaWpvLmVoaW1lLmpwIiwic2VpeW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5laGltZS5qcCIsInRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpwIiwi''@;'; put 'put ''dWNoaWtvLmVoaW1lLmpwIiwidXdhamltYS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVuLmZ1a3VpLmpwIiwiZWloZWlqaS5mdWt1aS5qcCIsImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVrdWkuanAiLCJrYXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVrdWku''@;'; put 'put ''anAiLCJtaW5hbWllY2hpemVuLmZ1a3VpLmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8uZnVrdWkuanAiLCJzYWJhZS5mdWt1aS5qcCIsInNha2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVrdWkuanAiLCJ0c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3VpLmpw''@;'; put 'put ''IiwiYXNoaXlhLmZ1a3Vva2EuanAiLCJidXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hpa3Voby5mdWt1b2thLmpwIiwiY2hpa3Vqby5mdWt1b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2thLmpwIiwiY2hpa3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9rYS5q''@;'; put 'put ''cCIsImRhemFpZnUuZnVrdW9rYS5qcCIsImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwiaGlnYXNoaS5mdWt1b2thLmpwIiwiaGlyb2thd2EuZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vva2EuanAiLCJpaXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1a3Vv''@;'; put 'put ''a2EuanAiLCJrYWhvLmZ1a3Vva2EuanAiLCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwia2F3YXJhLmZ1a3Vva2EuanAiLCJrZWlzZW4uZnVrdW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIsImt1cmF0ZS5mdWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAiLCJr''@;'; put 'put ''dXJ1bWUuZnVrdW9rYS5qcCIsIm1pbmFtaS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEuZnVrdW9rYS5qcCIsIm1peWF3YWthLmZ1a3Vva2EuanAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwibXVuYWthdGEuZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2EuanAi''@;'; put 'put ''LCJuYWthbWEuZnVrdW9rYS5qcCIsIm5pc2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3JpLmZ1a3Vva2EuanAiLCJva2FnYWtpLmZ1a3Vva2EuanAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tpLmZ1a3Vva2EuanAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5mdWt1''@;'; put 'put ''b2thLmpwIiwib25vam8uZnVrdW9rYS5qcCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwic2FzYWd1cmkuZnVrdW9rYS5qcCIsInNoaW5ndS5mdWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpwIiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5mdWt1''@;'; put 'put ''b2thLmpwIiwic3VlLmZ1a3Vva2EuanAiLCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpwIiwidGFrYXRhLmZ1a3Vva2EuanAiLCJ0b2hvLmZ1a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2EuanAiLCJ0c3Vpa2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2EuanAi''@;'; put 'put ''LCJ1bWkuZnVrdW9rYS5qcCIsInVzdWkuZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1b2thLmpwIiwieWFuYWdhd2EuZnVrdW9rYS5qcCIsInl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6dWJhbmdlLmZ1a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNoaW1h''@;'; put 'put ''LmpwIiwiYWl6dXdha2FtYXRzdS5mdWt1c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5mdWt1c2hpbWEuanAiLCJkYXRlLmZ1a3VzaGltYS5qcCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAiLCJmdXJ1ZG9uby5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNoaW1h''@;'; put 'put ''LmpwIiwiaGFuYXdhLmZ1a3VzaGltYS5qcCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGltYS5qcCIsImhpcm9uby5mdWt1c2hpbWEuanAiLCJpaXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2FzaGlyby5mdWt1c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEuanAi''@;'; put 'put ''LCJpd2FraS5mdWt1c2hpbWEuanAiLCJpenVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hpbWEuanAiLCJrYW5leWFtYS5mdWt1c2hpbWEuanAiLCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJraXRha2F0YS5mdWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVrdXNo''@;'; put 'put ''aW1hLmpwIiwia29vcmkuZnVrdXNoaW1hLmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3VzaGltYS5qcCIsIm1paGFydS5mdWt1c2hpbWEuanAiLCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5hbWllLmZ1a3VzaGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIsIm5p''@;'; put 'put ''c2hpYWl6dS5mdWt1c2hpbWEuanAiLCJuaXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIsIm9tb3RlZ28uZnVrdXNoaW1hLmpwIiwib25vLmZ1a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGltYS5qcCIsInNhbWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28uZnVr''@;'; put 'put ''dXNoaW1hLmpwIiwic2hpcmFrYXdhLmZ1a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVrdXNoaW1hLmpwIiwic3VrYWdhd2EuZnVrdXNoaW1hLmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAiLCJ0YW1ha2F3YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1c2hp''@;'; put 'put ''bWEuanAiLCJ0ZW5laS5mdWt1c2hpbWEuanAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGltYS5qcCIsInlhbWF0c3VyaS5mdWt1c2hpbWEuanAiLCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1Z2F3YS5mdWt1c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJlbmEu''@;'; put 'put ''Z2lmdS5qcCIsImdpZnUuZ2lmdS5qcCIsImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUuanAiLCJoYXNoaW1hLmdpZnUuanAiLCJoaWNoaXNvLmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJoaWdhc2hpc2hpcmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUuanAi''@;'; put 'put ''LCJpa2VkYS5naWZ1LmpwIiwia2FrYW1pZ2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5naWZ1LmpwIiwia2FzYW1hdHN1LmdpZnUuanAiLCJrYXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdpZnUuanAiLCJtaW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1LmpwIiwi''@;'; put 'put ''bWl0YWtlLmdpZnUuanAiLCJtaXp1bmFtaS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5naWZ1LmpwIiwib2dha2kuZ2lmdS5qcCIsInNha2Fob2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAiLCJzZWtpZ2FoYXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5qcCIs''@;'; put 'put ''InRhamltaS5naWZ1LmpwIiwidGFrYXlhbWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAiLCJ0b21pa2EuZ2lmdS5qcCIsIndhbm91Y2hpLmdpZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwieWFvdHN1LmdpZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2EuZ3Vu''@;'; put 'put ''bWEuanAiLCJjaGl5b2RhLmd1bm1hLmpwIiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5tYS5qcCIsImlzZXNha2kuZ3VubWEuanAiLCJpdGFrdXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEuanAiLCJrYW5yYS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5qcCIs''@;'; put 'put ''Imthd2FiYS5ndW5tYS5qcCIsImtpcnl1Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1bm1hLmpwIiwibWVpd2EuZ3VubWEuanAiLCJtaWRvcmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5tYS5qcCIsIm5hZ2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5ndW5t''@;'; put 'put ''YS5qcCIsIm5hbm1va3UuZ3VubWEuanAiLCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEuZ3VubWEuanAiLCJvdGEuZ3VubWEuanAiLCJzaGlidWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEuZ3VubWEuanAiLCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5tYS5q''@;'; put 'put ''cCIsInRha2FzYWtpLmd1bm1hLmpwIiwidGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRhdGViYXlhc2hpLmd1bm1hLmpwIiwidG9taW9rYS5ndW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5qcCIsInRzdW1hZ29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIsInlv''@;'; put 'put ''c2hpb2thLmd1bm1hLmpwIiwiYXNhbWluYW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0YWppbWEuaGlyb3NoaW1hLmpwIiwiZnVjaHUuaGlyb3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwIiwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGlnYXNo''@;'; put 'put ''aWhpcm9zaGltYS5oaXJvc2hpbWEuanAiLCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpwIiwia2FpdGEuaGlyb3NoaW1hLmpwIiwia3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5oaXJvc2hpbWEuanAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFyYS5o''@;'; put 'put ''aXJvc2hpbWEuanAiLCJtaXlvc2hpLmhpcm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGkuaGlyb3NoaW1hLmpwIiwib3Nha2lrYW1pamltYS5oaXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hpbWEuanAiLCJzYWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3NoaW1h''@;'; put 'put ''LmpwIiwic2VyYW5pc2hpLmhpcm9zaGltYS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGlyb3NoaW1hLmpwIiwidGFrZWhhcmEuaGlyb3NoaW1hLmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAiLCJhYmlyYS5ob2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJha2FiaXJhLmhva2thaWRvLmpwIiwiYWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5qcCIsImFzaGliZXRzdS5ob2trYWlkby5qcCIsImFzaG9yby5ob2trYWlkby5qcCIsImFzc2FidS5ob2trYWlkby5qcCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFpLmhv''@;'; put 'put ''a2thaWRvLmpwIiwiYmllaS5ob2trYWlkby5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlkby5qcCIsImJpcmF0b3JpLmhva2thaWRvLmpwIiwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJjaGl0b3NlLmhva2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIsImVi''@;'; put 'put ''ZXRzdS5ob2trYWlkby5qcCIsImVtYmV0c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1vLmhva2thaWRvLmpwIiwiZXNhbi5ob2trYWlkby5qcCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1a2FnYXdhLmhva2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRvLmpw''@;'; put 'put ''IiwiZnVyYW5vLmhva2thaWRvLmpwIiwiZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAiLCJoYWtvZGF0ZS5ob2trYWlkby5qcCIsImhhbWF0b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFrYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJoaWdhc2hpa2F3YS5ob2trYWlkby5qcCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5qcCIsImhva3V0by5ob2trYWlkby5qcCIsImhvbmJldHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFpLmhva2thaWRvLmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJpa2Vk''@;'; put 'put ''YS5ob2trYWlkby5qcCIsImltYWthbmUuaG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1pemF3YS5ob2trYWlkby5qcCIsIml3YW5haS5ob2trYWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJrYW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlob3Jv''@;'; put 'put ''Lmhva2thaWRvLmpwIiwia2FtaXN1bmFnYXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJrYXlhYmUuaG9ra2FpZG8uanAiLCJrZW1idWNoaS5ob2trYWlkby5qcCIsImtpa29uYWkuaG9ra2FpZG8uanAiLCJraW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGlyb3No''@;'; put 'put ''aW1hLmhva2thaWRvLmpwIiwia2l0YW1pLmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3NoaW1penUuaG9ra2FpZG8uanAiLCJrdW5uZXBwdS5ob2trYWlkby5qcCIsImt1cml5YW1hLmhva2thaWRvLmpwIiwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3VzaGly''@;'; put 'put ''by5ob2trYWlkby5qcCIsImt1dGNoYW4uaG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2UuaG9ra2FpZG8uanAiLCJtYXRzdW1hZS5ob2trYWlkby5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIsIm1pbmFtaWZ1cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhva2th''@;'; put 'put ''aWRvLmpwIiwibW9zZXVzaGkuaG9ra2FpZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2thaWRvLmpwIiwibmFpZS5ob2trYWlkby5qcCIsIm5ha2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNhdHN1bmFpLmhva2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2thaWRv''@;'; put 'put ''LmpwIiwibmFuYWUuaG9ra2FpZG8uanAiLCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpwIiwibmVtdXJvLmhva2thaWRvLmpwIiwibmlpa2FwcHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2thaWRvLmpwIiwibmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2Jvcmli''@;'; put 'put ''ZXRzdS5ob2trYWlkby5qcCIsIm51bWF0YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmlyYS5ob2trYWlkby5qcCIsIm9rZXRvLmhva2thaWRvLmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwib3RhcnUuaG9ra2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIsIm90''@;'; put 'put ''b2Z1a2UuaG9ra2FpZG8uanAiLCJvdG9pbmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pvcmEuaG9ra2FpZG8uanAiLCJwaXBwdS5ob2trYWlkby5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpwIiwicmVidW4uaG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2FpZG8u''@;'; put 'put ''anAiLCJyaXNoaXJpLmhva2thaWRvLmpwIiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2FpZG8uanAiLCJzYXJ1ZnV0c3UuaG9ra2FpZG8uanAiLCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNoYXJpLmhva2thaWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAiLCJz''@;'; put 'put ''aGliZXRzdS5ob2trYWlkby5qcCIsInNoaWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwic2hpbWFtYWtpLmhva2thaWRvLmpwIiwic2hpbWl6dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5ob2trYWlkby5qcCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIsInNo''@;'; put 'put ''aW50b2t1Lmhva2thaWRvLmpwIiwic2hpcmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIsInNoaXJpdWNoaS5ob2trYWlkby5qcCIsInNvYmV0c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5ob2trYWlkby5qcCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1Lmhv''@;'; put 'put ''a2thaWRvLmpwIiwidGFraWthd2EuaG9ra2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2FnYS5ob2trYWlkby5qcCIsInRvYmV0c3UuaG9ra2FpZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIsInRvbWFrb21haS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlkby5q''@;'; put 'put ''cCIsInRveWEuaG9ra2FpZG8uanAiLCJ0b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIsInRveW91cmEuaG9ra2FpZG8uanAiLCJ0c3ViZXRzdS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5ob2trYWlkby5qcCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1c3Uu''@;'; put 'put ''aG9ra2FpZG8uanAiLCJ1cnl1Lmhva2thaWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWkuaG9ra2FpZG8uanAiLCJ3YXNzYW11Lmhva2thaWRvLmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwieW9pY2hpLmhva2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFrYXNo''@;'; put 'put ''aS5oeW9nby5qcCIsImFrby5oeW9nby5qcCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIsImFzYWdvLmh5b2dvLmpwIiwiYXNoaXlhLmh5b2dvLmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1c2FraS5oeW9nby5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJpbWEu''@;'; put 'put ''aHlvZ28uanAiLCJoaW1lamkuaHlvZ28uanAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAiLCJpdGFtaS5oeW9nby5qcCIsImtha29nYXdhLmh5b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAiLCJrYW1pa2F3YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwia2Fz''@;'; put 'put ''dWdhLmh5b2dvLmpwIiwia2F3YW5pc2hpLmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5b2dvLmpwIiwibmlzaGlub21peWEuaHlvZ28uanAiLCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8uaHlvZ28uanAiLCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9nby5q''@;'; put 'put ''cCIsInNhc2F5YW1hLmh5b2dvLmpwIiwic2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNlbi5oeW9nby5qcCIsInNoaXNvLmh5b2dvLmpwIiwic3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5b2dvLmpwIiwidGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlvZ28u''@;'; put 'put ''anAiLCJ0YWthc2Fnby5oeW9nby5qcCIsInRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vuby5oeW9nby5qcCIsInRveW9va2EuaHlvZ28uanAiLCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5oeW9nby5qcCIsInlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28uanAi''@;'; put 'put ''LCJhbWkuaWJhcmFraS5qcCIsImFzYWhpLmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWkuaWJhcmFraS5qcCIsImRhaWdvLmliYXJha2kuanAiLCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhpdGFjaGkuaWJhcmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2kuanAi''@;'; put 'put ''LCJoaXRhY2hpb21peWEuaWJhcmFraS5qcCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFraS5qcCIsImluYS5pYmFyYWtpLmpwIiwiaW5hc2hpa2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJha2kuanAiLCJpd2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtpLmpw''@;'; put 'put ''Iiwia2FtaXN1LmliYXJha2kuanAiLCJrYXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImthc3VtaWdhdXJhLmliYXJha2kuanAiLCJrb2dhLmliYXJha2kuanAiLCJtaWhvLmliYXJha2kuanAiLCJtaXRvLmliYXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIsIm5h''@;'; put 'put ''a2EuaWJhcmFraS5qcCIsIm5hbWVnYXRhLmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJhcmFraS5qcCIsIm9taXRhbWEuaWJhcmFraS5qcCIsInJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2FrYWkuaWJhcmFraS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIsInNo''@;'; put 'put ''aW1vZGF0ZS5pYmFyYWtpLmpwIiwic2hpbW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAiLCJzb3dhLmliYXJha2kuanAiLCJzdWlmdS5pYmFyYWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5qcCIsInRhbWF0c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFyYWtp''@;'; put 'put ''LmpwIiwidG9tb2JlLmliYXJha2kuanAiLCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRzdWNoaXVyYS5pYmFyYWtpLmpwIiwidHN1a3ViYS5pYmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFraS5qcCIsInVzaGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFyYWtp''@;'; put 'put ''LmpwIiwieWFtYWdhdGEuaWJhcmFraS5qcCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwiYW5hbWl6dS5pc2hpa2F3YS5qcCIsImhha3VpLmlzaGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3YS5qcCIsImthZ2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWthd2Eu''@;'; put 'put ''anAiLCJrYW5hemF3YS5pc2hpa2F3YS5qcCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3YS5qcCIsIm5ha2Fub3RvLmlzaGlrYXdhLmpwIiwibmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlzaGlrYXdhLmpwIiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3RvLmlz''@;'; put 'put ''aGlrYXdhLmpwIiwic2hpa2EuaXNoaWthd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3YS5qcCIsInRzdXJ1Z2kuaXNoaWthd2EuanAiLCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamltYS5pc2hpa2F3YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNhd2Eu''@;'; put 'put ''aXdhdGUuanAiLCJoYW5hbWFraS5pd2F0ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5qcCIsImljaGlub2hlLml3YXRlLmpwIiwiaWNoaW5vc2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3YXRlLmpwIiwiaXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUuanAi''@;'; put 'put ''LCJrYW1haXNoaS5pd2F0ZS5qcCIsImthbmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3YWkuaXdhdGUuanAiLCJraXRha2FtaS5pd2F0ZS5qcCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUuaXdhdGUuanAiLCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5pd2F0''@;'; put 'put ''ZS5qcCIsIm1penVzYXdhLml3YXRlLmpwIiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5vZGEuaXdhdGUuanAiLCJvZnVuYXRvLml3YXRlLmpwIiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGkuaXdhdGUuanAiLCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hpd2Eu''@;'; put 'put ''aXdhdGUuanAiLCJzaGl6dWt1aXNoaS5pd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRlLmpwIiwidG9uby5pd2F0ZS5qcCIsInlhaGFiYS5pd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIsImF5YWdhd2Eua2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdhd2Eu''@;'; put 'put ''anAiLCJrYW5vbmppLmthZ2F3YS5qcCIsImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1hcnVnYW1lLmthZ2F3YS5qcCIsIm1pdG95by5rYWdhd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAiLCJzYW51a2kua2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAiLCJ0''@;'; put 'put ''YWthbWF0c3Uua2FnYXdhLmpwIiwidG9ub3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6dS5rYWdhd2EuanAiLCJ6ZW50c3VqaS5rYWdhd2EuanAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJhbWFtaS5rYWdvc2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAiLCJp''@;'; put 'put ''c2Eua2Fnb3NoaW1hLmpwIiwiaXNlbi5rYWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hpbWEua2Fnb3NoaW1hLmpwIiwia2Fub3lhLmthZ29zaGltYS5qcCIsImthd2FuYWJlLmthZ29zaGltYS5qcCIsImtpbmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fnb3No''@;'; put 'put ''aW1hLmpwIiwibWFrdXJhemFraS5rYWdvc2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1pdGFuZS5rYWdvc2hpbWEuanAiLCJuYWthdGFuZS5rYWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUua2Fnb3NoaW1hLmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEuanAi''@;'; put 'put ''LCJzb28ua2Fnb3NoaW1hLmpwIiwidGFydW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwiYWlrYXdhLmthbmFnYXdhLmpwIiwiYXRzdWdpLmthbmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2EuanAiLCJjaGlnYXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5hZ2F3''@;'; put 'put ''YS5qcCIsImZ1amlzYXdhLmthbmFnYXdhLmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdhLmpwIiwiaGlyYXRzdWthLmthbmFnYXdhLmpwIiwiaXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNlaS5rYW5hZ2F3YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwia2l5''@;'; put 'put ''b2thd2Eua2FuYWdhd2EuanAiLCJtYXRzdWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2EuanAiLCJtaXVyYS5rYW5hZ2F3YS5qcCIsIm5ha2FpLmthbmFnYXdhLmpwIiwibmlub21peWEua2FuYWdhd2EuanAiLCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2FuYWdh''@;'; put 'put ''d2EuanAiLCJvaXNvLmthbmFnYXdhLmpwIiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFnYXdhLmpwIiwidHN1a3VpLmthbmFnYXdhLmpwIiwieWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1hdG8ua2FuYWdhd2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIsInl1''@;'; put 'put ''Z2F3YXJhLmthbmFnYXdhLmpwIiwiemFtYS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtvY2hpLmpwIiwiZ2Vpc2VpLmtvY2hpLmpwIiwiaGlkYWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5vLmtvY2hpLmpwIiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hpLmpw''@;'; put 'put ''Iiwia2FtaS5rb2NoaS5qcCIsImtpdGFnYXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29jaGkuanAiLCJtb3RveWFtYS5rb2NoaS5qcCIsIm11cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2NoaS5qcCIsIm5ha2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2NoaS5q''@;'; put 'put ''cCIsIm5pc2hpdG9zYS5rb2NoaS5qcCIsIm5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2thd2Eua29jaGkuanAiLCJvdG95by5rb2NoaS5qcCIsIm90c3VraS5rb2NoaS5qcCIsInNha2F3YS5rb2NoaS5qcCIsInN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2NoaS5q''@;'; put 'put ''cCIsInRvc2Eua29jaGkuanAiLCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5rb2NoaS5qcCIsInVtYWppLmtvY2hpLmpwIiwieWFzdWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29jaGkuanAiLCJhbWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1hbW90''@;'; put 'put ''by5qcCIsImFzby5rdW1hbW90by5qcCIsImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIsImthbWlhbWFrdXNhLmt1bWFtb3RvLmpwIiwia2lrdWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3RvLmt1bWFtb3RvLmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1pZnVu''@;'; put 'put ''ZS5rdW1hbW90by5qcCIsIm1pbmFtYXRhLmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJuYWdhc3Uua3VtYW1vdG8uanAiLCJuaXNoaWhhcmEua3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90by5qcCIsIm96dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90by5q''@;'; put 'put ''cCIsInRha2Ftb3JpLmt1bWFtb3RvLmpwIiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFtYWdhLmt1bWFtb3RvLmpwIiwieWFtYXRvLmt1bWFtb3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90by5qcCIsImF5YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lvdG8u''@;'; put 'put ''anAiLCJoaWdhc2hpeWFtYS5reW90by5qcCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lvdG8uanAiLCJrYW1lb2thLmt5b3RvLmpwIiwia2Ftby5reW90by5qcCIsImtpdGEua3lvdG8uanAiLCJraXp1Lmt5b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJreW90''@;'; put 'put ''YW1iYS5reW90by5qcCIsImt5b3RhbmFiZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5reW90by5qcCIsIm1pbmFtaS5reW90by5qcCIsIm1pbmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1peWF6dS5reW90by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2tha3lv''@;'; put 'put ''Lmt5b3RvLmpwIiwibmFrYWd5by5reW90by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5qcCIsInNha3lvLmt5b3RvLmpwIiwic2Vpa2Eua3lvdG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1amkua3lvdG8uanAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1a2Eu''@;'; put 'put ''a3lvdG8uanAiLCJ5YW1hc2hpbmEua3lvdG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJpbmFiZS5taWUuanAiLCJpc2UubWllLmpwIiwia2FtZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUuanAiLCJraWhvLm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtpd2Eu''@;'; put 'put ''bWllLmpwIiwia29tb25vLm1pZS5qcCIsImt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWthLm1pZS5qcCIsIm1laXdhLm1pZS5qcCIsIm1paGFtYS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpwIiwibWlzdWdpLm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJhcmku''@;'; put 'put ''bWllLmpwIiwic2hpbWEubWllLmpwIiwic3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpwIiwidGFraS5taWUuanAiLCJ0YW1ha2kubWllLmpwIiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpwIiwidWRvbm8ubWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0YXJh''@;'; put 'put ''aS5taWUuanAiLCJ5b2trYWljaGkubWllLmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hpbWEubWl5YWdpLmpwIiwiaXNoaW5vbWFraS5taXlhZ2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIsImtha3VkYS5taXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImthd2Fz''@;'; put 'put ''YWtpLm1peWFnaS5qcCIsIm1hcnVtb3JpLm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1pc2FucmlrdS5taXlhZ2kuanAiLCJtaXNhdG8ubWl5YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIsIm5hdG9yaS5taXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIsIm9o''@;'; put 'put ''aXJhLm1peWFnaS5qcCIsIm9uYWdhd2EubWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2kuanAiLCJzZW1pbmUubWl5YWdpLmpwIiwic2hpYmF0YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1Lm1peWFnaS5qcCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dhbWEu''@;'; put 'put ''bWl5YWdpLmpwIiwic2hpcm9pc2hpLm1peWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2kuanAiLCJ0b21lLm1peWFnaS5qcCIsInRvbWl5YS5taXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpwIiwid2F0YXJpLm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5qcCIs''@;'; put 'put ''Inphby5taXlhZ2kuanAiLCJheWEubWl5YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlhemFraS5qcCIsImh5dWdhLm1peWF6YWtpLmpwIiwia2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdhbWluYW1pLm1peWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIsImtp''@;'; put 'put ''dGFnYXdhLm1peWF6YWtpLmpwIiwia2l0YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwia29iYXlhc2hpLm1peWF6YWtpLmpwIiwia3VuaXRvbWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1peWF6YWtpLmpwIiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtvbm9q''@;'; put 'put ''by5taXlhemFraS5qcCIsIm1peWF6YWtpLm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmljaGluYW4ubWl5YXpha2kuanAiLCJuaXNoaW1lcmEubWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6YWtpLmpwIiwic2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5YXph''@;'; put 'put ''a2kuanAiLCJzaGludG9taS5taXlhemFraS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5YXpha2kuanAiLCJ0YWthemFraS5taXlhemFraS5qcCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNoaS5uYWdhbm8uanAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFuLm5h''@;'; put 'put ''Z2Fuby5qcCIsImFva2kubmFnYW5vLmpwIiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJjaGlrdWhva3UubmFnYW5vLmpwIiwiY2hpa3VtYS5uYWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAiLCJmdWppbWkubmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIsImhh''@;'; put 'put ''cmEubmFnYW5vLmpwIiwiaGlyYXlhLm5hZ2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5qcCIsImlpeWFtYS5uYWdhbm8uanAiLCJpaXp1bmEubmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpwIiwiaWt1c2FrYS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwia2Fy''@;'; put 'put ''dWl6YXdhLm5hZ2Fuby5qcCIsImthd2FrYW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3VzaGltYS5uYWdhbm8uanAiLCJraXRhYWlraS5uYWdhbm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAiLCJrb21vcm8ubmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5qcCIs''@;'; put 'put ''Im1hdHN1bW90by5uYWdhbm8uanAiLCJtaWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1ha2kubmFnYW5vLmpwIiwibWluYW1pbWlub3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdhbm8uanAiLCJtaXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fuby5q''@;'; put 'put ''cCIsIm1vY2hpenVraS5uYWdhbm8uanAiLCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5hZ2lzby5uYWdhbm8uanAiLCJuYWthZ2F3YS5uYWdhbm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwibm96YXdhb25zZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpwIiwi''@;'; put 'put ''b2dhd2EubmFnYW5vLmpwIiwib2theWEubmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8uanAiLCJvb2t1d2EubmFnYW5vLmpwIiwib29zaGlrYS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8uanAiLCJvdGFyaS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAiLCJz''@;'; put 'put ''YWtha2kubmFnYW5vLmpwIiwic2FrdS5uYWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5hZ2Fuby5qcCIsInNoaW5hbm9tYWNoaS5uYWdhbm8uanAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJzdXdhLm5hZ2Fuby5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWthZ2ku''@;'; put 'put ''bmFnYW5vLmpwIiwidGFrYW1vcmkubmFnYW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5hZ2Fuby5qcCIsInRhdHN1bm8ubmFnYW5vLmpwIiwidG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3VyYS5uYWdhbm8uanAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFnYW5v''@;'; put 'put ''LmpwIiwid2FkYS5uYWdhbm8uanAiLCJ5YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIsInlhc2FrYS5uYWdhbm8uanAiLCJ5YXN1b2thLm5hZ2Fuby5qcCIsImNoaWppd2EubmFnYXNha2kuanAiLCJmdXRzdS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2kuanAi''@;'; put 'put ''LCJoYXNhbWkubmFnYXNha2kuanAiLCJoaXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2FoYXlhLm5hZ2FzYWtpLmpwIiwia2F3YXRhbmEubmFnYXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwIiwibWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2FraS5u''@;'; put 'put ''YWdhc2FraS5qcCIsIm9iYW1hLm5hZ2FzYWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2FraS5qcCIsInNhaWthaS5uYWdhc2FraS5qcCIsInNhc2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5hZ2FzYWtpLmpwIiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hpbmth''@;'; put 'put ''bWlnb3RvLm5hZ2FzYWtpLmpwIiwidG9naXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwidW56ZW4ubmFnYXNha2kuanAiLCJhbmRvLm5hcmEuanAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmkubmFyYS5qcCIsImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2FydWdh''@;'; put 'put ''Lm5hcmEuanAiLCJpa29tYS5uYXJhLmpwIiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAiLCJrYXNoaWJhLm5hcmEuanAiLCJrYXNoaWhhcmEubmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpwIiwia2F3YWkubmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJrYXdh''@;'; put 'put ''bmlzaGkubmFyYS5qcCIsImtvcnlvLm5hcmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAiLCJtaXlha2UubmFyYS5qcCIsIm5hcmEubmFyYS5qcCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamkubmFyYS5qcCIsIm91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAiLCJz''@;'; put 'put ''YWt1cmFpLm5hcmEuanAiLCJzYW5nby5uYXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1hLm5hcmEuanAiLCJzaGluam8ubmFyYS5qcCIsInNvbmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEuanAiLCJ0YXdhcmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEuanAi''@;'; put 'put ''LCJ0ZW5yaS5uYXJhLmpwIiwidWRhLm5hcmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFrYWRhLm5hcmEuanAiLCJ5YW1hem9lLm5hcmEuanAiLCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2EubmlpZ2F0YS5qcCIsImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWlnYXRh''@;'; put 'put ''LmpwIiwiaXRvaWdhd2EubmlpZ2F0YS5qcCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEuanAiLCJrYW1vLm5paWdhdGEuanAiLCJrYXJpd2EubmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5paWdhdGEuanAiLCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1pdHN1''@;'; put 'put ''a2UubmlpZ2F0YS5qcCIsIm11aWthLm5paWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlpZ2F0YS5qcCIsIm5hZ2Fva2EubmlpZ2F0YS5qcCIsIm5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlhLm5paWdhdGEuanAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlpZ2F0''@;'; put 'put ''YS5qcCIsInNhbmpvLm5paWdhdGEuanAiLCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJzZWtpa2F3YS5uaWlnYXRhLmpwIiwic2hpYmF0YS5uaWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEuanAiLCJ0YWluYWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRhLmpw''@;'; put 'put ''IiwidG9rYW1hY2hpLm5paWdhdGEuanAiLCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIsInVvbnVtYS5uaWlnYXRhLmpwIiwieWFoaWtvLm5paWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpwIiwieXV6YXdhLm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwiYnVu''@;'; put 'put ''Z29vbm8ub2l0YS5qcCIsImJ1bmdvdGFrYWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5qcCIsImhpbWVzaGltYS5vaXRhLmpwIiwiaGl0YS5vaXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIsImtva29ub2Uub2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlzYWtp''@;'; put 'put ''Lm9pdGEuanAiLCJrdXN1Lm9pdGEuanAiLCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9pdGEuanAiLCJ0c3VrdW1pLm9pdGEuanAiLCJ1c2Eub2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5dWZ1Lm9pdGEuanAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1Y2hp''@;'; put 'put ''Lm9rYXlhbWEuanAiLCJiaXplbi5va2F5YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5YW1hLmpwIiwia2FnYW1pbm8ub2theWFtYS5qcCIsImthc2Fva2Eub2theWFtYS5qcCIsImtpYmljaHVvLm9rYXlhbWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJrdXJh''@;'; put 'put ''c2hpa2kub2theWFtYS5qcCIsIm1hbml3YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9rYXlhbWEuanAiLCJuaWltaS5va2F5YW1hLmpwIiwibmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJva2F5YW1hLm9rYXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAiLCJz''@;'; put 'put ''ZXRvdWNoaS5va2F5YW1hLmpwIiwic2hpbmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9rYXlhbWEuanAiLCJ0YWthaGFzaGkub2theWFtYS5qcCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1eWFtYS5va2F5YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFrYWdl''@;'; put 'put ''Lm9rYXlhbWEuanAiLCJhZ3VuaS5va2luYXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5hd2EuanAiLCJndXNoaWthbWkub2tpbmF3YS5qcCIsImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2FzaGkub2tpbmF3YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhleWEu''@;'; put 'put ''b2tpbmF3YS5qcCIsImlzaGlnYWtpLm9raW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9raW5hd2EuanAiLCJpemVuYS5va2luYXdhLmpwIiwia2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tpbmF3YS5qcCIsImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5ha2Fn''@;'; put 'put ''dXN1a3Uub2tpbmF3YS5qcCIsImt1bWVqaW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWluYW1pZGFpdG8ub2tpbmF3YS5qcCIsIm1vdG9idS5va2luYXdhLmpwIiwibmFnby5va2luYXdhLmpwIiwibmFoYS5va2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdhLmpw''@;'; put 'put ''IiwibmFraWppbi5va2luYXdhLmpwIiwibmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwib2dpbWkub2tpbmF3YS5qcCIsIm9raW5hd2Eub2tpbmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIsInNoaW1vamkub2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2EuanAi''@;'; put 'put ''LCJ0YXJhbWEub2tpbmF3YS5qcCIsInRva2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpwIiwidG9uYWtpLm9raW5hd2EuanAiLCJ1cmFzb2Uub2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2EuanAiLCJ5YWVzZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdhLmpw''@;'; put 'put ''IiwieW9uYWJhcnUub2tpbmF3YS5qcCIsInlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIsImFiZW5vLm9zYWthLmpwIiwiY2hpaGF5YWFrYXNha2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpwIiwiZGFpdG8ub3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAiLCJo''@;'; put 'put ''YWJpa2luby5vc2FrYS5qcCIsImhhbm5hbi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2FzaGlzdW1peW9zaGkub3Nha2EuanAiLCJoaWdhc2hpeW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0YS5vc2FrYS5qcCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5vc2Fr''@;'; put 'put ''YS5qcCIsIml6dW1pLm9zYWthLmpwIiwiaXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwia2Fkb21hLm9zYWthLmpwIiwia2FpenVrYS5vc2FrYS5qcCIsImthbmFuLm9zYWthLmpwIiwia2FzaGl3YXJhLm9zYWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3YWNo''@;'; put 'put ''aW5hZ2Fuby5vc2FrYS5qcCIsImtpc2hpd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5vc2FrYS5qcCIsIm1hdHN1YmFyYS5vc2FrYS5qcCIsIm1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9zYWthLmpwIiwibWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9zYWth''@;'; put 'put ''LmpwIiwibmV5YWdhd2Eub3Nha2EuanAiLCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNheWFtYS5vc2FrYS5qcCIsInNha2FpLm9zYWthLmpwIiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFuLm9zYWthLmpwIiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdhdGUu''@;'; put 'put ''b3Nha2EuanAiLCJzaGltYW1vdG8ub3Nha2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAiLCJ0YWlzaGkub3Nha2EuanAiLCJ0YWppcmkub3Nha2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIsInRha2F0c3VraS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2FrYS5q''@;'; put 'put ''cCIsInRveW9uYWthLm9zYWthLmpwIiwidG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNhZ2EuanAiLCJhcml0YS5zYWdhLmpwIiwiZnVrdWRvbWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpwIiwiaGFtYXRhbWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJpbWFy''@;'; put 'put ''aS5zYWdhLmpwIiwia2FtaW1pbmUuc2FnYS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIsImthc2hpbWEuc2FnYS5qcCIsImtpdGFnYXRhLnNhZ2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwia2l5YW1hLnNhZ2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVyYWdp''@;'; put 'put ''LnNhZ2EuanAiLCJuaXNoaWFyaXRhLnNhZ2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3VjaGkuc2FnYS5qcCIsInNhZ2Euc2FnYS5qcCIsInNoaXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdhLmpwIiwidGFyYS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9zaGlu''@;'; put 'put ''b2dhcmkuc2FnYS5qcCIsImFyYWthd2Euc2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5zYWl0YW1hLmpwIiwiZnVqaW1pLnNhaXRhbWEuanAiLCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVrYXlhLnNhaXRhbWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFueXUu''@;'; put 'put ''c2FpdGFtYS5qcCIsImhhc3VkYS5zYWl0YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNhaXRhbWEuanAiLCJoaWRha2Euc2FpdGFtYS5qcCIsImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwIiwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8uc2Fp''@;'; put 'put ''dGFtYS5qcCIsImluYS5zYWl0YW1hLmpwIiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAiLCJrYW1paXp1bWkuc2FpdGFtYS5qcCIsImthbWlrYXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5zYWl0YW1hLmpwIiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fnb2Uu''@;'; put 'put ''c2FpdGFtYS5qcCIsImthd2FndWNoaS5zYWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2FpdGFtYS5qcCIsImtpdGFtb3RvLnNhaXRhbWEuanAiLCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtvdW5vc3Uuc2FpdGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1bWFn''@;'; put 'put ''YXlhLnNhaXRhbWEuanAiLCJtYXRzdWJ1c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0by5zYWl0YW1hLmpwIiwibWl5YXNoaXJvLnNhaXRhbWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAiLCJtb3JveWFtYS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFtYS5q''@;'; put 'put ''cCIsIm5hbWVnYXdhLnNhaXRhbWEuanAiLCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9nYXdhLnNhaXRhbWEuanAiLCJvZ29zZS5zYWl0YW1hLmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwib21peWEuc2FpdGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJyYW56''@;'; put 'put ''YW4uc2FpdGFtYS5qcCIsInJ5b2thbWkuc2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5zYWl0YW1hLmpwIiwic2F0dGUuc2FpdGFtYS5qcCIsInNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2kuc2FpdGFtYS5qcCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2thLnNh''@;'; put 'put ''aXRhbWEuanAiLCJzdWdpdG8uc2FpdGFtYS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEuanAiLCJ0b2tvcm96YXdhLnNhaXRhbWEuanAiLCJ0c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVyYXdhLnNhaXRhbWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlhc2hp''@;'; put 'put ''by5zYWl0YW1hLmpwIiwieW9rb3plLnNhaXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1hLmpwIiwieW9zaGlkYS5zYWl0YW1hLmpwIiwieW9zaGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1pLnNhaXRhbWEuanAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hpZ2Eu''@;'; put 'put ''anAiLCJoaWdhc2hpb21pLnNoaWdhLmpwIiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFuLnNoaWdhLmpwIiwia29zZWkuc2hpZ2EuanAiLCJrb3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGlnYS5qcCIsIm1haWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGlnYS5q''@;'; put 'put ''cCIsIm5hZ2FoYW1hLnNoaWdhLmpwIiwibmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJvbWloYWNoaW1hbi5zaGlnYS5qcCIsIm90c3Uuc2hpZ2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5dW9oLnNoaWdhLmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFrYXRz''@;'; put 'put ''dWtpLnNoaWdhLmpwIiwidG9yYWhpbWUuc2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2EuanAiLCJha2FnaS5zaGltYW5lLmpwIiwiYW1hLnNoaW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpwIiwiaGFtYWRhLnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hpbWFu''@;'; put 'put ''ZS5qcCIsImhpa2F3YS5zaGltYW5lLmpwIiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwia2FraW5va2kuc2hpbWFuZS5qcCIsIm1hc3VkYS5zaGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUuanAiLCJtaXNhdG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5zaGlt''@;'; put 'put ''YW5lLmpwIiwib2hkYS5zaGltYW5lLmpwIiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFuZS5qcCIsInNoaW1hbmUuc2hpbWFuZS5qcCIsInRhbWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5zaGltYW5lLmpwIiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5zaGlt''@;'; put 'put ''YW5lLmpwIiwieWFzdWdpLnNoaW1hbmUuanAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpwIiwiYXRhbWkuc2hpenVva2EuanAiLCJmdWppLnNoaXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9rYS5qcCIsImZ1amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5YS5z''@;'; put 'put ''aGl6dW9rYS5qcCIsImZ1a3Vyb2kuc2hpenVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5zaGl6dW9rYS5qcCIsImhhbWFtYXRzdS5zaGl6dW9rYS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2EuanAiLCJpdG8uc2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5qcCIs''@;'; put 'put ''Iml6dS5zaGl6dW9rYS5qcCIsIml6dW5va3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwia2FubmFtaS5zaGl6dW9rYS5qcCIsImthd2FuZWhvbi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6dW9rYS5qcCIsImtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWkuc2hp''@;'; put 'put ''enVva2EuanAiLCJtYWtpbm9oYXJhLnNoaXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1paXp1LnNoaXp1b2thLmpwIiwibWlzaGltYS5zaGl6dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9rYS5qcCIsIm5pc2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNoaXp1''@;'; put 'put ''b2thLmpwIiwib21hZXpha2kuc2hpenVva2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6dW9rYS5qcCIsInNoaW1vZGEuc2hpenVva2EuanAiLCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1c29uby5zaGl6dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwieW9z''@;'; put 'put ''aGlkYS5zaGl6dW9rYS5qcCIsImFzaGlrYWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRvY2hpZ2kuanAiLCJpY2hpa2FpLnRvY2hpZ2kuanAiLCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1pbm9rYXdhLnRvY2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIsImth''@;'; put 'put ''cmFzdXlhbWEudG9jaGlnaS5qcCIsImt1cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1pYnUudG9jaGlnaS5qcCIsIm1va2EudG9jaGlnaS5qcCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFzdS50b2NoaWdpLmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAiLCJu''@;'; put 'put ''aWtrby50b2NoaWdpLmpwIiwibmlzaGlrYXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50b2NoaWdpLmpwIiwib2h0YXdhcmEudG9jaGlnaS5qcCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1cmEudG9jaGlnaS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1vdHN1''@;'; put 'put ''a2UudG9jaGlnaS5qcCIsInNoaW95YS50b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGlnaS50b2NoaWdpLmpwIiwidHN1Z2EudG9jaGlnaS5qcCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1bm9taXlhLnRvY2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwiYWl6''@;'; put 'put ''dW1pLnRva3VzaGltYS5qcCIsImFuYW4udG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5vLnRva3VzaGltYS5qcCIsImthaW5hbi50b2t1c2hpbWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwIiwibWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1hLnRv''@;'; put 'put ''a3VzaGltYS5qcCIsIm1pbmFtaS50b2t1c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9rdXNoaW1hLmpwIiwibmFrYWdhd2EudG9rdXNoaW1hLmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIsInNhbmFnb2NoaS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9rdXNo''@;'; put 'put ''aW1hLmpwIiwidG9rdXNoaW1hLnRva3VzaGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9reW8uanAiLCJha2lydW5vLnRva3lvLmpwIiwiYWtpc2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEudG9reW8uanAiLCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRva3lv''@;'; put 'put ''LmpwIiwiY2hpeW9kYS50b2t5by5qcCIsImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2EudG9reW8uanAiLCJmdWNodS50b2t5by5qcCIsImZ1c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5by5qcCIsImhhY2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lvLmpw''@;'; put 'put ''IiwiaGlnYXNoaWt1cnVtZS50b2t5by5qcCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1hdG8udG9reW8uanAiLCJoaW5vLnRva3lvLmpwIiwiaGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEudG9reW8uanAiLCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRva3lv''@;'; put 'put ''LmpwIiwia2F0c3VzaGlrYS50b2t5by5qcCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2RhaXJhLnRva3lvLmpwIiwia29nYW5laS50b2t5by5qcCIsImtva3VidW5qaS50b2t5by5qcCIsImtvbWFlLnRva3lvLmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hpbWEu''@;'; put 'put ''dG9reW8uanAiLCJrdW5pdGFjaGkudG9reW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpwIiwibWluYXRvLnRva3lvLmpwIiwibWl0YWthLnRva3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwibXVzYXNoaW11cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRva3lv''@;'; put 'put ''LmpwIiwibmFrYW5vLnRva3lvLmpwIiwibmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1dGFtYS50b2t5by5qcCIsIm9tZS50b2t5by5qcCIsIm9zaGltYS50b2t5by5qcCIsIm90YS50b2t5by5qcCIsInNldGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5by5q''@;'; put 'put ''cCIsInNoaW5hZ2F3YS50b2t5by5qcCIsInNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJzdW1pZGEudG9reW8uanAiLCJ0YWNoaWthd2EudG9reW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRhbWEudG9reW8uanAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUudG90''@;'; put 'put ''dG9yaS5qcCIsImhpbm8udG90dG9yaS5qcCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAiLCJrb3RvdXJhLnRvdHRvcmkuanAiLCJtaXNhc2EudG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmkuanAiLCJuaWNoaW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8udG90''@;'; put 'put ''dG9yaS5qcCIsInRvdHRvcmkudG90dG9yaS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpwIiwieW9uYWdvLnRvdHRvcmkuanAiLCJhc2FoaS50b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAiLCJmdWt1bWl0c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFtYS5q''@;'; put 'put ''cCIsImhpbWkudG95YW1hLmpwIiwiaW1penUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRveWFtYS5qcCIsImthbWlpY2hpLnRveWFtYS5qcCIsImt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlpa2F3YS50b3lhbWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIsIm5h''@;'; put 'put ''bnRvLnRveWFtYS5qcCIsIm55dXplbi50b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEuanAiLCJ0YWthb2thLnRveWFtYS5qcCIsInRhdGV5YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1hLmpwIiwidG9uYW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEuanAi''@;'; put 'put ''LCJ1bmF6dWtpLnRveWFtYS5qcCIsInVvenUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndha2F5YW1hLmpwIiwiYXJpZGFnYXdhLndha2F5YW1hLmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhhc2hpbW90by53YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5qcCIs''@;'; put 'put ''Imhpcm9nYXdhLndha2F5YW1hLmpwIiwiaW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImthaW5hbi53YWtheWFtYS5qcCIsImthbWl0b25kYS53YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWtheWFtYS5qcCIsImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdhLndh''@;'; put 'put ''a2F5YW1hLmpwIiwia2l0YXlhbWEud2FrYXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFtYS5qcCIsImtvemFnYXdhLndha2F5YW1hLmpwIiwia3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNoaW1vdG8ud2FrYXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAiLCJt''@;'; put 'put ''aXNhdG8ud2FrYXlhbWEuanAiLCJuYWNoaWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpwIiwic2hpcmFoYW1hLndha2F5YW1hLmpwIiwidGFpamkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2FrYXlhbWEuanAiLCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNhLndh''@;'; put 'put ''a2F5YW1hLmpwIiwieXVyYS53YWtheWFtYS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdhdGEuanAiLCJoaWdhc2hpbmUueWFtYWdhdGEuanAiLCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1LnlhbWFnYXRhLmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIsImth''@;'; put 'put ''bmV5YW1hLnlhbWFnYXRhLmpwIiwia2F3YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcCIsIm1pa2F3YS55YW1hZ2F0YS5qcCIsIm11cmF5YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFtYWdhdGEuanAiLCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlvLnlh''@;'; put 'put ''bWFnYXRhLmpwIiwibmlzaGlrYXdhLnlhbWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFtYWdhdGEuanAiLCJvZ3VuaS55YW1hZ2F0YS5qcCIsIm9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hpZGEueWFtYWdhdGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNha2F0''@;'; put 'put ''YS55YW1hZ2F0YS5qcCIsInNha2VnYXdhLnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0YWthLnlhbWFnYXRhLmpwIiwic2hvbmFpLnlhbWFnYXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEuanAiLCJ0ZW5kby55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0YS5q''@;'; put 'put ''cCIsInRzdXJ1b2thLnlhbWFnYXRhLmpwIiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0YS5qcCIsInlvbmV6YXdhLnlhbWFnYXRhLmpwIiwieXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1hZ3VjaGkuanAiLCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55YW1h''@;'; put 'put ''Z3VjaGkuanAiLCJob2Z1LnlhbWFndWNoaS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1LnlhbWFndWNoaS5qcCIsIm1pdG91LnlhbWFndWNoaS5qcCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJvc2hpbWEueWFtYWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1Y2hp''@;'; put 'put ''LmpwIiwic2h1bmFuLnlhbWFndWNoaS5qcCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3VjaGkuanAiLCJ0b3lvdGEueWFtYWd1Y2hpLmpwIiwidWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1hZ3VjaGkuanAiLCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlhbWFu''@;'; put 'put ''YXNoaS5qcCIsImZ1ZWZ1a2kueWFtYW5hc2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2FndWNoaWtvLnlhbWFuYXNoaS5qcCIsImZ1aml5b3NoaWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdhLnlhbWFuYXNoaS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJpY2hp''@;'; put 'put ''a2F3YW1pc2F0by55YW1hbmFzaGkuanAiLCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJrb3NodS55YW1hbmFzaGkuanAiLCJrb3N1Z2UueWFtYW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFtYW5hc2hpLmpwIiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2FtaWNo''@;'; put 'put ''aS55YW1hbmFzaGkuanAiLCJuYW5idS55YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJhc2FraS55YW1hbmFzaGkuanAiLCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlhbWFuYXNoaS5qcCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93YS55''@;'; put 'put ''YW1hbmFzaGkuanAiLCJ0YWJheWFtYS55YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFyYS55YW1hbmFzaGkuanAiLCJ5YW1hbmFrYWtvLnlhbWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1hbmFzaGkuanAiLCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIsImlu''@;'; put 'put ''Zm8ua2UiLCJtZS5rZSIsIm1vYmkua2UiLCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsIm9yZy5rZyIsIm5ldC5rZyIsImNvbS5rZyIsImVkdS5rZyIsImdvdi5rZyIsIm1pbC5rZyIsIioua2giLCJraSIsImVkdS5raSIsImJpei5raSIsIm5ldC5raSIsIm9yZy5raSIsImdvdi5raSIs''@;'; put 'put ''ImluZm8ua2kiLCJjb20ua2kiLCJrbSIsIm9yZy5rbSIsIm5vbS5rbSIsImdvdi5rbSIsInByZC5rbSIsInRtLmttIiwiZWR1LmttIiwibWlsLmttIiwiYXNzLmttIiwiY29tLmttIiwiY29vcC5rbSIsImFzc28ua20iLCJwcmVzc2Uua20iLCJtZWRlY2luLmttIiwibm90YWlyZXMua20iLCJw''@;'; put 'put ''aGFybWFjaWVucy5rbSIsInZldGVyaW5haXJlLmttIiwiZ291di5rbSIsImtuIiwibmV0LmtuIiwib3JnLmtuIiwiZWR1LmtuIiwiZ292LmtuIiwia3AiLCJjb20ua3AiLCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3AiLCJyZXAua3AiLCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3IiLCJl''@;'; put 'put ''cy5rciIsImdvLmtyIiwiaHMua3IiLCJrZy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBlLmtyIiwicmUua3IiLCJzYy5rciIsImJ1c2FuLmtyIiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5rciIsImRhZWd1LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3IiLCJn''@;'; put 'put ''d2FuZ2p1LmtyIiwiZ3llb25nYnVrLmtyIiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmtyIiwiamVqdS5rciIsImplb25idWsua3IiLCJqZW9ubmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5rciIsImt3IiwiY29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292Lmt3''@;'; put 'put ''IiwiaW5kLmt3IiwibmV0Lmt3Iiwib3JnLmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcua3kiLCJreiIsIm9yZy5reiIsImVkdS5reiIsIm5ldC5reiIsImdvdi5reiIsIm1pbC5reiIsImNvbS5reiIsImxhIiwiaW50LmxhIiwibmV0LmxhIiwiaW5mby5sYSIsImVk''@;'; put 'put ''dS5sYSIsImdvdi5sYSIsInBlci5sYSIsImNvbS5sYSIsIm9yZy5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwiZ292LmxiIiwibmV0LmxiIiwib3JnLmxiIiwibGMiLCJjb20ubGMiLCJuZXQubGMiLCJjby5sYyIsIm9yZy5sYyIsImVkdS5sYyIsImdvdi5sYyIsImxpIiwibGsiLCJnb3Yu''@;'; put 'put ''bGsiLCJzY2gubGsiLCJuZXQubGsiLCJpbnQubGsiLCJjb20ubGsiLCJvcmcubGsiLCJlZHUubGsiLCJuZ28ubGsiLCJzb2MubGsiLCJ3ZWIubGsiLCJsdGQubGsiLCJhc3NuLmxrIiwiZ3JwLmxrIiwiaG90ZWwubGsiLCJhYy5sayIsImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292LmxyIiwi''@;'; put 'put ''b3JnLmxyIiwibmV0LmxyIiwibHMiLCJhYy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwiaW5mby5scyIsIm5ldC5scyIsIm9yZy5scyIsInNjLmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2IiwiY29tLmx2IiwiZWR1Lmx2IiwiZ292Lmx2Iiwib3JnLmx2IiwibWls''@;'; put 'put ''Lmx2IiwiaWQubHYiLCJuZXQubHYiLCJhc24ubHYiLCJjb25mLmx2IiwibHkiLCJjb20ubHkiLCJuZXQubHkiLCJnb3YubHkiLCJwbGMubHkiLCJlZHUubHkiLCJzY2gubHkiLCJtZWQubHkiLCJvcmcubHkiLCJpZC5seSIsIm1hIiwiY28ubWEiLCJuZXQubWEiLCJnb3YubWEiLCJvcmcubWEi''@;'; put 'put ''LCJhYy5tYSIsInByZXNzLm1hIiwibWMiLCJ0bS5tYyIsImFzc28ubWMiLCJtZCIsIm1lIiwiY28ubWUiLCJuZXQubWUiLCJvcmcubWUiLCJlZHUubWUiLCJhYy5tZSIsImdvdi5tZSIsIml0cy5tZSIsInByaXYubWUiLCJtZyIsIm9yZy5tZyIsIm5vbS5tZyIsImdvdi5tZyIsInByZC5tZyIs''@;'; put 'put ''InRtLm1nIiwiZWR1Lm1nIiwibWlsLm1nIiwiY29tLm1nIiwiY28ubWciLCJtaCIsIm1pbCIsIm1rIiwiY29tLm1rIiwib3JnLm1rIiwibmV0Lm1rIiwiZWR1Lm1rIiwiZ292Lm1rIiwiaW5mLm1rIiwibmFtZS5tayIsIm1sIiwiY29tLm1sIiwiZWR1Lm1sIiwiZ291di5tbCIsImdvdi5tbCIs''@;'; put 'put ''Im5ldC5tbCIsIm9yZy5tbCIsInByZXNzZS5tbCIsIioubW0iLCJtbiIsImdvdi5tbiIsImVkdS5tbiIsIm9yZy5tbiIsIm1vIiwiY29tLm1vIiwibmV0Lm1vIiwib3JnLm1vIiwiZWR1Lm1vIiwiZ292Lm1vIiwibW9iaSIsIm1wIiwibXEiLCJtciIsImdvdi5tciIsIm1zIiwiY29tLm1zIiwi''@;'; put 'put ''ZWR1Lm1zIiwiZ292Lm1zIiwibmV0Lm1zIiwib3JnLm1zIiwibXQiLCJjb20ubXQiLCJlZHUubXQiLCJuZXQubXQiLCJvcmcubXQiLCJtdSIsImNvbS5tdSIsIm5ldC5tdSIsIm9yZy5tdSIsImdvdi5tdSIsImFjLm11IiwiY28ubXUiLCJvci5tdSIsIm11c2V1bSIsImFjYWRlbXkubXVzZXVt''@;'; put 'put ''IiwiYWdyaWN1bHR1cmUubXVzZXVtIiwiYWlyLm11c2V1bSIsImFpcmd1YXJkLm11c2V1bSIsImFsYWJhbWEubXVzZXVtIiwiYWxhc2thLm11c2V1bSIsImFtYmVyLm11c2V1bSIsImFtYnVsYW5jZS5tdXNldW0iLCJhbWVyaWNhbi5tdXNldW0iLCJhbWVyaWNhbmEubXVzZXVtIiwiYW1lcmlj''@;'; put 'put ''YW5hbnRpcXVlcy5tdXNldW0iLCJhbWVyaWNhbmFydC5tdXNldW0iLCJhbXN0ZXJkYW0ubXVzZXVtIiwiYW5kLm11c2V1bSIsImFubmVmcmFuay5tdXNldW0iLCJhbnRocm8ubXVzZXVtIiwiYW50aHJvcG9sb2d5Lm11c2V1bSIsImFudGlxdWVzLm11c2V1bSIsImFxdWFyaXVtLm11c2V1bSIs''@;'; put 'put ''ImFyYm9yZXR1bS5tdXNldW0iLCJhcmNoYWVvbG9naWNhbC5tdXNldW0iLCJhcmNoYWVvbG9neS5tdXNldW0iLCJhcmNoaXRlY3R1cmUubXVzZXVtIiwiYXJ0Lm11c2V1bSIsImFydGFuZGRlc2lnbi5tdXNldW0iLCJhcnRjZW50ZXIubXVzZXVtIiwiYXJ0ZGVjby5tdXNldW0iLCJhcnRlZHVj''@;'; put 'put ''YXRpb24ubXVzZXVtIiwiYXJ0Z2FsbGVyeS5tdXNldW0iLCJhcnRzLm11c2V1bSIsImFydHNhbmRjcmFmdHMubXVzZXVtIiwiYXNtYXRhcnQubXVzZXVtIiwiYXNzYXNzaW5hdGlvbi5tdXNldW0iLCJhc3Npc2kubXVzZXVtIiwiYXNzb2NpYXRpb24ubXVzZXVtIiwiYXN0cm9ub215Lm11c2V1''@;'; put 'put ''bSIsImF0bGFudGEubXVzZXVtIiwiYXVzdGluLm11c2V1bSIsImF1c3RyYWxpYS5tdXNldW0iLCJhdXRvbW90aXZlLm11c2V1bSIsImF2aWF0aW9uLm11c2V1bSIsImF4aXMubXVzZXVtIiwiYmFkYWpvei5tdXNldW0iLCJiYWdoZGFkLm11c2V1bSIsImJhaG4ubXVzZXVtIiwiYmFsZS5tdXNl''@;'; put 'put ''dW0iLCJiYWx0aW1vcmUubXVzZXVtIiwiYmFyY2Vsb25hLm11c2V1bSIsImJhc2ViYWxsLm11c2V1bSIsImJhc2VsLm11c2V1bSIsImJhdGhzLm11c2V1bSIsImJhdWVybi5tdXNldW0iLCJiZWF1eGFydHMubXVzZXVtIiwiYmVlbGRlbmdlbHVpZC5tdXNldW0iLCJiZWxsZXZ1ZS5tdXNldW0i''@;'; put 'put ''LCJiZXJnYmF1Lm11c2V1bSIsImJlcmtlbGV5Lm11c2V1bSIsImJlcmxpbi5tdXNldW0iLCJiZXJuLm11c2V1bSIsImJpYmxlLm11c2V1bSIsImJpbGJhby5tdXNldW0iLCJiaWxsLm11c2V1bSIsImJpcmRhcnQubXVzZXVtIiwiYmlydGhwbGFjZS5tdXNldW0iLCJib25uLm11c2V1bSIsImJv''@;'; put 'put ''c3Rvbi5tdXNldW0iLCJib3RhbmljYWwubXVzZXVtIiwiYm90YW5pY2FsZ2FyZGVuLm11c2V1bSIsImJvdGFuaWNnYXJkZW4ubXVzZXVtIiwiYm90YW55Lm11c2V1bSIsImJyYW5keXdpbmV2YWxsZXkubXVzZXVtIiwiYnJhc2lsLm11c2V1bSIsImJyaXN0b2wubXVzZXVtIiwiYnJpdGlzaC5t''@;'; put 'put ''dXNldW0iLCJicml0aXNoY29sdW1iaWEubXVzZXVtIiwiYnJvYWRjYXN0Lm11c2V1bSIsImJydW5lbC5tdXNldW0iLCJicnVzc2VsLm11c2V1bSIsImJydXNzZWxzLm11c2V1bSIsImJydXhlbGxlcy5tdXNldW0iLCJidWlsZGluZy5tdXNldW0iLCJidXJnaG9mLm11c2V1bSIsImJ1cy5tdXNl''@;'; put 'put ''dW0iLCJidXNoZXkubXVzZXVtIiwiY2FkYXF1ZXMubXVzZXVtIiwiY2FsaWZvcm5pYS5tdXNldW0iLCJjYW1icmlkZ2UubXVzZXVtIiwiY2FuLm11c2V1bSIsImNhbmFkYS5tdXNldW0iLCJjYXBlYnJldG9uLm11c2V1bSIsImNhcnJpZXIubXVzZXVtIiwiY2FydG9vbmFydC5tdXNldW0iLCJj''@;'; put 'put ''YXNhZGVsYW1vbmVkYS5tdXNldW0iLCJjYXN0bGUubXVzZXVtIiwiY2FzdHJlcy5tdXNldW0iLCJjZWx0aWMubXVzZXVtIiwiY2VudGVyLm11c2V1bSIsImNoYXR0YW5vb2dhLm11c2V1bSIsImNoZWx0ZW5oYW0ubXVzZXVtIiwiY2hlc2FwZWFrZWJheS5tdXNldW0iLCJjaGljYWdvLm11c2V1''@;'; put 'put ''bSIsImNoaWxkcmVuLm11c2V1bSIsImNoaWxkcmVucy5tdXNldW0iLCJjaGlsZHJlbnNnYXJkZW4ubXVzZXVtIiwiY2hpcm9wcmFjdGljLm11c2V1bSIsImNob2NvbGF0ZS5tdXNldW0iLCJjaHJpc3RpYW5zYnVyZy5tdXNldW0iLCJjaW5jaW5uYXRpLm11c2V1bSIsImNpbmVtYS5tdXNldW0i''@;'; put 'put ''LCJjaXJjdXMubXVzZXVtIiwiY2l2aWxpc2F0aW9uLm11c2V1bSIsImNpdmlsaXphdGlvbi5tdXNldW0iLCJjaXZpbHdhci5tdXNldW0iLCJjbGludG9uLm11c2V1bSIsImNsb2NrLm11c2V1bSIsImNvYWwubXVzZXVtIiwiY29hc3RhbGRlZmVuY2UubXVzZXVtIiwiY29keS5tdXNldW0iLCJj''@;'; put 'put ''b2xkd2FyLm11c2V1bSIsImNvbGxlY3Rpb24ubXVzZXVtIiwiY29sb25pYWx3aWxsaWFtc2J1cmcubXVzZXVtIiwiY29sb3JhZG9wbGF0ZWF1Lm11c2V1bSIsImNvbHVtYmlhLm11c2V1bSIsImNvbHVtYnVzLm11c2V1bSIsImNvbW11bmljYXRpb24ubXVzZXVtIiwiY29tbXVuaWNhdGlvbnMu''@;'; put 'put ''bXVzZXVtIiwiY29tbXVuaXR5Lm11c2V1bSIsImNvbXB1dGVyLm11c2V1bSIsImNvbXB1dGVyaGlzdG9yeS5tdXNldW0iLCJjb211bmljYVx4ZTdceGY1ZXMubXVzZXVtIiwiY29udGVtcG9yYXJ5Lm11c2V1bSIsImNvbnRlbXBvcmFyeWFydC5tdXNldW0iLCJjb252ZW50Lm11c2V1bSIsImNv''@;'; put 'put ''cGVuaGFnZW4ubXVzZXVtIiwiY29ycG9yYXRpb24ubXVzZXVtIiwiY29ycmVpb3MtZS10ZWxlY29tdW5pY2FceGU3XHhmNWVzLm11c2V1bSIsImNvcnZldHRlLm11c2V1bSIsImNvc3R1bWUubXVzZXVtIiwiY291bnRyeWVzdGF0ZS5tdXNldW0iLCJjb3VudHkubXVzZXVtIiwiY3JhZnRzLm11''@;'; put 'put ''c2V1bSIsImNyYW5icm9vay5tdXNldW0iLCJjcmVhdGlvbi5tdXNldW0iLCJjdWx0dXJhbC5tdXNldW0iLCJjdWx0dXJhbGNlbnRlci5tdXNldW0iLCJjdWx0dXJlLm11c2V1bSIsImN5YmVyLm11c2V1bSIsImN5bXJ1Lm11c2V1bSIsImRhbGkubXVzZXVtIiwiZGFsbGFzLm11c2V1bSIsImRh''@;'; put 'put ''dGFiYXNlLm11c2V1bSIsImRkci5tdXNldW0iLCJkZWNvcmF0aXZlYXJ0cy5tdXNldW0iLCJkZWxhd2FyZS5tdXNldW0iLCJkZWxtZW5ob3JzdC5tdXNldW0iLCJkZW5tYXJrLm11c2V1bSIsImRlcG90Lm11c2V1bSIsImRlc2lnbi5tdXNldW0iLCJkZXRyb2l0Lm11c2V1bSIsImRpbm9zYXVy''@;'; put 'put ''Lm11c2V1bSIsImRpc2NvdmVyeS5tdXNldW0iLCJkb2xscy5tdXNldW0iLCJkb25vc3RpYS5tdXNldW0iLCJkdXJoYW0ubXVzZXVtIiwiZWFzdGFmcmljYS5tdXNldW0iLCJlYXN0Y29hc3QubXVzZXVtIiwiZWR1Y2F0aW9uLm11c2V1bSIsImVkdWNhdGlvbmFsLm11c2V1bSIsImVneXB0aWFu''@;'; put 'put ''Lm11c2V1bSIsImVpc2VuYmFobi5tdXNldW0iLCJlbGJ1cmcubXVzZXVtIiwiZWx2ZW5kcmVsbC5tdXNldW0iLCJlbWJyb2lkZXJ5Lm11c2V1bSIsImVuY3ljbG9wZWRpYy5tdXNldW0iLCJlbmdsYW5kLm11c2V1bSIsImVudG9tb2xvZ3kubXVzZXVtIiwiZW52aXJvbm1lbnQubXVzZXVtIiwi''@;'; put 'put ''ZW52aXJvbm1lbnRhbGNvbnNlcnZhdGlvbi5tdXNldW0iLCJlcGlsZXBzeS5tdXNldW0iLCJlc3NleC5tdXNldW0iLCJlc3RhdGUubXVzZXVtIiwiZXRobm9sb2d5Lm11c2V1bSIsImV4ZXRlci5tdXNldW0iLCJleGhpYml0aW9uLm11c2V1bSIsImZhbWlseS5tdXNldW0iLCJmYXJtLm11c2V1''@;'; put 'put ''bSIsImZhcm1lcXVpcG1lbnQubXVzZXVtIiwiZmFybWVycy5tdXNldW0iLCJmYXJtc3RlYWQubXVzZXVtIiwiZmllbGQubXVzZXVtIiwiZmlndWVyZXMubXVzZXVtIiwiZmlsYXRlbGlhLm11c2V1bSIsImZpbG0ubXVzZXVtIiwiZmluZWFydC5tdXNldW0iLCJmaW5lYXJ0cy5tdXNldW0iLCJm''@;'; put 'put ''aW5sYW5kLm11c2V1bSIsImZsYW5kZXJzLm11c2V1bSIsImZsb3JpZGEubXVzZXVtIiwiZm9yY2UubXVzZXVtIiwiZm9ydG1pc3NvdWxhLm11c2V1bSIsImZvcnR3b3J0aC5tdXNldW0iLCJmb3VuZGF0aW9uLm11c2V1bSIsImZyYW5jYWlzZS5tdXNldW0iLCJmcmFua2Z1cnQubXVzZXVtIiwi''@;'; put 'put ''ZnJhbnppc2thbmVyLm11c2V1bSIsImZyZWVtYXNvbnJ5Lm11c2V1bSIsImZyZWlidXJnLm11c2V1bSIsImZyaWJvdXJnLm11c2V1bSIsImZyb2cubXVzZXVtIiwiZnVuZGFjaW8ubXVzZXVtIiwiZnVybml0dXJlLm11c2V1bSIsImdhbGxlcnkubXVzZXVtIiwiZ2FyZGVuLm11c2V1bSIsImdh''@;'; put 'put ''dGV3YXkubXVzZXVtIiwiZ2VlbHZpbmNrLm11c2V1bSIsImdlbW9sb2dpY2FsLm11c2V1bSIsImdlb2xvZ3kubXVzZXVtIiwiZ2VvcmdpYS5tdXNldW0iLCJnaWVzc2VuLm11c2V1bSIsImdsYXMubXVzZXVtIiwiZ2xhc3MubXVzZXVtIiwiZ29yZ2UubXVzZXVtIiwiZ3JhbmRyYXBpZHMubXVz''@;'; put 'put ''ZXVtIiwiZ3Jhei5tdXNldW0iLCJndWVybnNleS5tdXNldW0iLCJoYWxsb2ZmYW1lLm11c2V1bSIsImhhbWJ1cmcubXVzZXVtIiwiaGFuZHNvbi5tdXNldW0iLCJoYXJ2ZXN0Y2VsZWJyYXRpb24ubXVzZXVtIiwiaGF3YWlpLm11c2V1bSIsImhlYWx0aC5tdXNldW0iLCJoZWltYXR1bmR1aHJl''@;'; put 'put ''bi5tdXNldW0iLCJoZWxsYXMubXVzZXVtIiwiaGVsc2lua2kubXVzZXVtIiwiaGVtYnlnZHNmb3JidW5kLm11c2V1bSIsImhlcml0YWdlLm11c2V1bSIsImhpc3RvaXJlLm11c2V1bSIsImhpc3RvcmljYWwubXVzZXVtIiwiaGlzdG9yaWNhbHNvY2lldHkubXVzZXVtIiwiaGlzdG9yaWNob3Vz''@;'; put 'put ''ZXMubXVzZXVtIiwiaGlzdG9yaXNjaC5tdXNldW0iLCJoaXN0b3Jpc2NoZXMubXVzZXVtIiwiaGlzdG9yeS5tdXNldW0iLCJoaXN0b3J5b2ZzY2llbmNlLm11c2V1bSIsImhvcm9sb2d5Lm11c2V1bSIsImhvdXNlLm11c2V1bSIsImh1bWFuaXRpZXMubXVzZXVtIiwiaWxsdXN0cmF0aW9uLm11''@;'; put 'put ''c2V1bSIsImltYWdlYW5kc291bmQubXVzZXVtIiwiaW5kaWFuLm11c2V1bSIsImluZGlhbmEubXVzZXVtIiwiaW5kaWFuYXBvbGlzLm11c2V1bSIsImluZGlhbm1hcmtldC5tdXNldW0iLCJpbnRlbGxpZ2VuY2UubXVzZXVtIiwiaW50ZXJhY3RpdmUubXVzZXVtIiwiaXJhcS5tdXNldW0iLCJp''@;'; put 'put ''cm9uLm11c2V1bSIsImlzbGVvZm1hbi5tdXNldW0iLCJqYW1pc29uLm11c2V1bSIsImplZmZlcnNvbi5tdXNldW0iLCJqZXJ1c2FsZW0ubXVzZXVtIiwiamV3ZWxyeS5tdXNldW0iLCJqZXdpc2gubXVzZXVtIiwiamV3aXNoYXJ0Lm11c2V1bSIsImpmay5tdXNldW0iLCJqb3VybmFsaXNtLm11''@;'; put 'put ''c2V1bSIsImp1ZGFpY2EubXVzZXVtIiwianVkeWdhcmxhbmQubXVzZXVtIiwianVlZGlzY2hlcy5tdXNldW0iLCJqdWlmLm11c2V1bSIsImthcmF0ZS5tdXNldW0iLCJrYXJpa2F0dXIubXVzZXVtIiwia2lkcy5tdXNldW0iLCJrb2ViZW5oYXZuLm11c2V1bSIsImtvZWxuLm11c2V1bSIsImt1''@;'; put 'put ''bnN0Lm11c2V1bSIsImt1bnN0c2FtbWx1bmcubXVzZXVtIiwia3Vuc3R1bmRkZXNpZ24ubXVzZXVtIiwibGFib3IubXVzZXVtIiwibGFib3VyLm11c2V1bSIsImxham9sbGEubXVzZXVtIiwibGFuY2FzaGlyZS5tdXNldW0iLCJsYW5kZXMubXVzZXVtIiwibGFucy5tdXNldW0iLCJsXHhlNG5z''@;'; put 'put ''Lm11c2V1bSIsImxhcnNzb24ubXVzZXVtIiwibGV3aXNtaWxsZXIubXVzZXVtIiwibGluY29sbi5tdXNldW0iLCJsaW56Lm11c2V1bSIsImxpdmluZy5tdXNldW0iLCJsaXZpbmdoaXN0b3J5Lm11c2V1bSIsImxvY2FsaGlzdG9yeS5tdXNldW0iLCJsb25kb24ubXVzZXVtIiwibG9zYW5nZWxl''@;'; put 'put ''cy5tdXNldW0iLCJsb3V2cmUubXVzZXVtIiwibG95YWxpc3QubXVzZXVtIiwibHVjZXJuZS5tdXNldW0iLCJsdXhlbWJvdXJnLm11c2V1bSIsImx1emVybi5tdXNldW0iLCJtYWQubXVzZXVtIiwibWFkcmlkLm11c2V1bSIsIm1hbGxvcmNhLm11c2V1bSIsIm1hbmNoZXN0ZXIubXVzZXVtIiwi''@;'; put 'put ''bWFuc2lvbi5tdXNldW0iLCJtYW5zaW9ucy5tdXNldW0iLCJtYW54Lm11c2V1bSIsIm1hcmJ1cmcubXVzZXVtIiwibWFyaXRpbWUubXVzZXVtIiwibWFyaXRpbW8ubXVzZXVtIiwibWFyeWxhbmQubXVzZXVtIiwibWFyeWxodXJzdC5tdXNldW0iLCJtZWRpYS5tdXNldW0iLCJtZWRpY2FsLm11''@;'; put 'put ''c2V1bSIsIm1lZGl6aW5oaXN0b3Jpc2NoZXMubXVzZXVtIiwibWVlcmVzLm11c2V1bSIsIm1lbW9yaWFsLm11c2V1bSIsIm1lc2F2ZXJkZS5tdXNldW0iLCJtaWNoaWdhbi5tdXNldW0iLCJtaWRhdGxhbnRpYy5tdXNldW0iLCJtaWxpdGFyeS5tdXNldW0iLCJtaWxsLm11c2V1bSIsIm1pbmVy''@;'; put 'put ''cy5tdXNldW0iLCJtaW5pbmcubXVzZXVtIiwibWlubmVzb3RhLm11c2V1bSIsIm1pc3NpbGUubXVzZXVtIiwibWlzc291bGEubXVzZXVtIiwibW9kZXJuLm11c2V1bSIsIm1vbWEubXVzZXVtIiwibW9uZXkubXVzZXVtIiwibW9ubW91dGgubXVzZXVtIiwibW9udGljZWxsby5tdXNldW0iLCJt''@;'; put 'put ''b250cmVhbC5tdXNldW0iLCJtb3Njb3cubXVzZXVtIiwibW90b3JjeWNsZS5tdXNldW0iLCJtdWVuY2hlbi5tdXNldW0iLCJtdWVuc3Rlci5tdXNldW0iLCJtdWxob3VzZS5tdXNldW0iLCJtdW5jaWUubXVzZXVtIiwibXVzZWV0Lm11c2V1bSIsIm11c2V1bWNlbnRlci5tdXNldW0iLCJtdXNl''@;'; put 'put ''dW12ZXJlbmlnaW5nLm11c2V1bSIsIm11c2ljLm11c2V1bSIsIm5hdGlvbmFsLm11c2V1bSIsIm5hdGlvbmFsZmlyZWFybXMubXVzZXVtIiwibmF0aW9uYWxoZXJpdGFnZS5tdXNldW0iLCJuYXRpdmVhbWVyaWNhbi5tdXNldW0iLCJuYXR1cmFsaGlzdG9yeS5tdXNldW0iLCJuYXR1cmFsaGlz''@;'; put 'put ''dG9yeW11c2V1bS5tdXNldW0iLCJuYXR1cmFsc2NpZW5jZXMubXVzZXVtIiwibmF0dXJlLm11c2V1bSIsIm5hdHVyaGlzdG9yaXNjaGVzLm11c2V1bSIsIm5hdHV1cndldGVuc2NoYXBwZW4ubXVzZXVtIiwibmF1bWJ1cmcubXVzZXVtIiwibmF2YWwubXVzZXVtIiwibmVicmFza2EubXVzZXVt''@;'; put 'put ''IiwibmV1ZXMubXVzZXVtIiwibmV3aGFtcHNoaXJlLm11c2V1bSIsIm5ld2plcnNleS5tdXNldW0iLCJuZXdtZXhpY28ubXVzZXVtIiwibmV3cG9ydC5tdXNldW0iLCJuZXdzcGFwZXIubXVzZXVtIiwibmV3eW9yay5tdXNldW0iLCJuaWVwY2UubXVzZXVtIiwibm9yZm9say5tdXNldW0iLCJu''@;'; put 'put ''b3J0aC5tdXNldW0iLCJucncubXVzZXVtIiwibnljLm11c2V1bSIsIm55bnkubXVzZXVtIiwib2NlYW5vZ3JhcGhpYy5tdXNldW0iLCJvY2Vhbm9ncmFwaGlxdWUubXVzZXVtIiwib21haGEubXVzZXVtIiwib25saW5lLm11c2V1bSIsIm9udGFyaW8ubXVzZXVtIiwib3BlbmFpci5tdXNldW0i''@;'; put 'put ''LCJvcmVnb24ubXVzZXVtIiwib3JlZ29udHJhaWwubXVzZXVtIiwib3RhZ28ubXVzZXVtIiwib3hmb3JkLm11c2V1bSIsInBhY2lmaWMubXVzZXVtIiwicGFkZXJib3JuLm11c2V1bSIsInBhbGFjZS5tdXNldW0iLCJwYWxlby5tdXNldW0iLCJwYWxtc3ByaW5ncy5tdXNldW0iLCJwYW5hbWEu''@;'; put 'put ''bXVzZXVtIiwicGFyaXMubXVzZXVtIiwicGFzYWRlbmEubXVzZXVtIiwicGhhcm1hY3kubXVzZXVtIiwicGhpbGFkZWxwaGlhLm11c2V1bSIsInBoaWxhZGVscGhpYWFyZWEubXVzZXVtIiwicGhpbGF0ZWx5Lm11c2V1bSIsInBob2VuaXgubXVzZXVtIiwicGhvdG9ncmFwaHkubXVzZXVtIiwi''@;'; put 'put ''cGlsb3RzLm11c2V1bSIsInBpdHRzYnVyZ2gubXVzZXVtIiwicGxhbmV0YXJpdW0ubXVzZXVtIiwicGxhbnRhdGlvbi5tdXNldW0iLCJwbGFudHMubXVzZXVtIiwicGxhemEubXVzZXVtIiwicG9ydGFsLm11c2V1bSIsInBvcnRsYW5kLm11c2V1bSIsInBvcnRsbGlnYXQubXVzZXVtIiwicG9z''@;'; put 'put ''dHMtYW5kLXRlbGVjb21tdW5pY2F0aW9ucy5tdXNldW0iLCJwcmVzZXJ2YXRpb24ubXVzZXVtIiwicHJlc2lkaW8ubXVzZXVtIiwicHJlc3MubXVzZXVtIiwicHJvamVjdC5tdXNldW0iLCJwdWJsaWMubXVzZXVtIiwicHVib2wubXVzZXVtIiwicXVlYmVjLm11c2V1bSIsInJhaWxyb2FkLm11''@;'; put 'put ''c2V1bSIsInJhaWx3YXkubXVzZXVtIiwicmVzZWFyY2gubXVzZXVtIiwicmVzaXN0YW5jZS5tdXNldW0iLCJyaW9kZWphbmVpcm8ubXVzZXVtIiwicm9jaGVzdGVyLm11c2V1bSIsInJvY2thcnQubXVzZXVtIiwicm9tYS5tdXNldW0iLCJydXNzaWEubXVzZXVtIiwic2FpbnRsb3Vpcy5tdXNl''@;'; put 'put ''dW0iLCJzYWxlbS5tdXNldW0iLCJzYWx2YWRvcmRhbGkubXVzZXVtIiwic2FsemJ1cmcubXVzZXVtIiwic2FuZGllZ28ubXVzZXVtIiwic2FuZnJhbmNpc2NvLm11c2V1bSIsInNhbnRhYmFyYmFyYS5tdXNldW0iLCJzYW50YWNydXoubXVzZXVtIiwic2FudGFmZS5tdXNldW0iLCJzYXNrYXRj''@;'; put 'put ''aGV3YW4ubXVzZXVtIiwic2F0eC5tdXNldW0iLCJzYXZhbm5haGdhLm11c2V1bSIsInNjaGxlc2lzY2hlcy5tdXNldW0iLCJzY2hvZW5icnVubi5tdXNldW0iLCJzY2hva29sYWRlbi5tdXNldW0iLCJzY2hvb2wubXVzZXVtIiwic2Nod2Vpei5tdXNldW0iLCJzY2llbmNlLm11c2V1bSIsInNj''@;'; put 'put ''aWVuY2VhbmRoaXN0b3J5Lm11c2V1bSIsInNjaWVuY2VhbmRpbmR1c3RyeS5tdXNldW0iLCJzY2llbmNlY2VudGVyLm11c2V1bSIsInNjaWVuY2VjZW50ZXJzLm11c2V1bSIsInNjaWVuY2UtZmljdGlvbi5tdXNldW0iLCJzY2llbmNlaGlzdG9yeS5tdXNldW0iLCJzY2llbmNlcy5tdXNldW0i''@;'; put 'put ''LCJzY2llbmNlc25hdHVyZWxsZXMubXVzZXVtIiwic2NvdGxhbmQubXVzZXVtIiwic2VhcG9ydC5tdXNldW0iLCJzZXR0bGVtZW50Lm11c2V1bSIsInNldHRsZXJzLm11c2V1bSIsInNoZWxsLm11c2V1bSIsInNoZXJicm9va2UubXVzZXVtIiwic2liZW5pay5tdXNldW0iLCJzaWxrLm11c2V1''@;'; put 'put ''bSIsInNraS5tdXNldW0iLCJza29sZS5tdXNldW0iLCJzb2NpZXR5Lm11c2V1bSIsInNvbG9nbmUubXVzZXVtIiwic291bmRhbmR2aXNpb24ubXVzZXVtIiwic291dGhjYXJvbGluYS5tdXNldW0iLCJzb3V0aHdlc3QubXVzZXVtIiwic3BhY2UubXVzZXVtIiwic3B5Lm11c2V1bSIsInNxdWFy''@;'; put 'put ''ZS5tdXNldW0iLCJzdGFkdC5tdXNldW0iLCJzdGFsYmFucy5tdXNldW0iLCJzdGFybmJlcmcubXVzZXVtIiwic3RhdGUubXVzZXVtIiwic3RhdGVvZmRlbGF3YXJlLm11c2V1bSIsInN0YXRpb24ubXVzZXVtIiwic3RlYW0ubXVzZXVtIiwic3RlaWVybWFyay5tdXNldW0iLCJzdGpvaG4ubXVz''@;'; put 'put ''ZXVtIiwic3RvY2tob2xtLm11c2V1bSIsInN0cGV0ZXJzYnVyZy5tdXNldW0iLCJzdHV0dGdhcnQubXVzZXVtIiwic3Vpc3NlLm11c2V1bSIsInN1cmdlb25zaGFsbC5tdXNldW0iLCJzdXJyZXkubXVzZXVtIiwic3ZpenplcmEubXVzZXVtIiwic3dlZGVuLm11c2V1bSIsInN5ZG5leS5tdXNl''@;'; put 'put ''dW0iLCJ0YW5rLm11c2V1bSIsInRjbS5tdXNldW0iLCJ0ZWNobm9sb2d5Lm11c2V1bSIsInRlbGVrb21tdW5pa2F0aW9uLm11c2V1bSIsInRlbGV2aXNpb24ubXVzZXVtIiwidGV4YXMubXVzZXVtIiwidGV4dGlsZS5tdXNldW0iLCJ0aGVhdGVyLm11c2V1bSIsInRpbWUubXVzZXVtIiwidGlt''@;'; put 'put ''ZWtlZXBpbmcubXVzZXVtIiwidG9wb2xvZ3kubXVzZXVtIiwidG9yaW5vLm11c2V1bSIsInRvdWNoLm11c2V1bSIsInRvd24ubXVzZXVtIiwidHJhbnNwb3J0Lm11c2V1bSIsInRyZWUubXVzZXVtIiwidHJvbGxleS5tdXNldW0iLCJ0cnVzdC5tdXNldW0iLCJ0cnVzdGVlLm11c2V1bSIsInVo''@;'; put 'put ''cmVuLm11c2V1bSIsInVsbS5tdXNldW0iLCJ1bmRlcnNlYS5tdXNldW0iLCJ1bml2ZXJzaXR5Lm11c2V1bSIsInVzYS5tdXNldW0iLCJ1c2FudGlxdWVzLm11c2V1bSIsInVzYXJ0cy5tdXNldW0iLCJ1c2NvdW50cnllc3RhdGUubXVzZXVtIiwidXNjdWx0dXJlLm11c2V1bSIsInVzZGVjb3Jh''@;'; put 'put ''dGl2ZWFydHMubXVzZXVtIiwidXNnYXJkZW4ubXVzZXVtIiwidXNoaXN0b3J5Lm11c2V1bSIsInVzaHVhaWEubXVzZXVtIiwidXNsaXZpbmdoaXN0b3J5Lm11c2V1bSIsInV0YWgubXVzZXVtIiwidXZpYy5tdXNldW0iLCJ2YWxsZXkubXVzZXVtIiwidmFudGFhLm11c2V1bSIsInZlcnNhaWxs''@;'; put 'put ''ZXMubXVzZXVtIiwidmlraW5nLm11c2V1bSIsInZpbGxhZ2UubXVzZXVtIiwidmlyZ2luaWEubXVzZXVtIiwidmlydHVhbC5tdXNldW0iLCJ2aXJ0dWVsLm11c2V1bSIsInZsYWFuZGVyZW4ubXVzZXVtIiwidm9sa2Vua3VuZGUubXVzZXVtIiwid2FsZXMubXVzZXVtIiwid2FsbG9uaWUubXVz''@;'; put 'put ''ZXVtIiwid2FyLm11c2V1bSIsIndhc2hpbmd0b25kYy5tdXNldW0iLCJ3YXRjaGFuZGNsb2NrLm11c2V1bSIsIndhdGNoLWFuZC1jbG9jay5tdXNldW0iLCJ3ZXN0ZXJuLm11c2V1bSIsIndlc3RmYWxlbi5tdXNldW0iLCJ3aGFsaW5nLm11c2V1bSIsIndpbGRsaWZlLm11c2V1bSIsIndpbGxp''@;'; put 'put ''YW1zYnVyZy5tdXNldW0iLCJ3aW5kbWlsbC5tdXNldW0iLCJ3b3Jrc2hvcC5tdXNldW0iLCJ5b3JrLm11c2V1bSIsInlvcmtzaGlyZS5tdXNldW0iLCJ5b3NlbWl0ZS5tdXNldW0iLCJ5b3V0aC5tdXNldW0iLCJ6b29sb2dpY2FsLm11c2V1bSIsInpvb2xvZ3kubXVzZXVtIiwiXHUwNWQ5XHUw''@;'; put 'put ''NWU4XHUwNWQ1XHUwNWU5XHUwNWRjXHUwNWQ5XHUwNWRkLm11c2V1bSIsIlx1MDQzOFx1MDQzYVx1MDQzZVx1MDQzYy5tdXNldW0iLCJtdiIsImFlcm8ubXYiLCJiaXoubXYiLCJjb20ubXYiLCJjb29wLm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIs''@;'; put 'put ''Im11c2V1bS5tdiIsIm5hbWUubXYiLCJuZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFjLm13IiwiYml6Lm13IiwiY28ubXciLCJjb20ubXciLCJjb29wLm13IiwiZWR1Lm13IiwiZ292Lm13IiwiaW50Lm13IiwibXVzZXVtLm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20u''@;'; put 'put ''bXgiLCJvcmcubXgiLCJnb2IubXgiLCJlZHUubXgiLCJuZXQubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5teSIsImdvdi5teSIsIm1pbC5teSIsIm5hbWUubXkiLCJuZXQubXkiLCJvcmcubXkiLCJteiIsImFjLm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoi''@;'; put 'put ''LCJtaWwubXoiLCJuZXQubXoiLCJvcmcubXoiLCJuYSIsImluZm8ubmEiLCJwcm8ubmEiLCJuYW1lLm5hIiwic2Nob29sLm5hIiwib3IubmEiLCJkci5uYSIsInVzLm5hIiwibXgubmEiLCJjYS5uYSIsImluLm5hIiwiY2MubmEiLCJ0di5uYSIsIndzLm5hIiwibW9iaS5uYSIsImNvLm5hIiwi''@;'; put 'put ''Y29tLm5hIiwib3JnLm5hIiwibmFtZSIsIm5jIiwiYXNzby5uYyIsIm5vbS5uYyIsIm5lIiwibmV0IiwibmYiLCJjb20ubmYiLCJuZXQubmYiLCJwZXIubmYiLCJyZWMubmYiLCJ3ZWIubmYiLCJhcnRzLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJvdGhlci5uZiIsInN0b3JlLm5mIiwibmci''@;'; put 'put ''LCJjb20ubmciLCJlZHUubmciLCJnb3YubmciLCJpLm5nIiwibWlsLm5nIiwibW9iaS5uZyIsIm5hbWUubmciLCJuZXQubmciLCJvcmcubmciLCJzY2gubmciLCJuaSIsImFjLm5pIiwiYml6Lm5pIiwiY28ubmkiLCJjb20ubmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmki''@;'; put 'put ''LCJpbnQubmkiLCJtaWwubmkiLCJuZXQubmkiLCJub20ubmkiLCJvcmcubmkiLCJ3ZWIubmkiLCJubCIsIm5vIiwiZmhzLm5vIiwidmdzLm5vIiwiZnlsa2VzYmlibC5ubyIsImZvbGtlYmlibC5ubyIsIm11c2V1bS5ubyIsImlkcmV0dC5ubyIsInByaXYubm8iLCJtaWwubm8iLCJzdGF0Lm5v''@;'; put 'put ''IiwiZGVwLm5vIiwia29tbXVuZS5ubyIsImhlcmFkLm5vIiwiYWEubm8iLCJhaC5ubyIsImJ1Lm5vIiwiZm0ubm8iLCJobC5ubyIsImhtLm5vIiwiamFuLW1heWVuLm5vIiwibXIubm8iLCJubC5ubyIsIm50Lm5vIiwib2Yubm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwi''@;'; put 'put ''c3Qubm8iLCJzdmFsYmFyZC5ubyIsInRtLm5vIiwidHIubm8iLCJ2YS5ubyIsInZmLm5vIiwiZ3MuYWEubm8iLCJncy5haC5ubyIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8iLCJncy5obC5ubyIsImdzLmhtLm5vIiwiZ3MuamFuLW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50''@;'; put 'put ''Lm5vIiwiZ3Mub2Yubm8iLCJncy5vbC5ubyIsImdzLm9zbG8ubm8iLCJncy5ybC5ubyIsImdzLnNmLm5vIiwiZ3Muc3Qubm8iLCJncy5zdmFsYmFyZC5ubyIsImdzLnRtLm5vIiwiZ3MudHIubm8iLCJncy52YS5ubyIsImdzLnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIs''@;'; put 'put ''ImFsZ2FyZC5ubyIsIlx4ZTVsZ1x4ZTVyZC5ubyIsImFybmEubm8iLCJicnVtdW5kZGFsLm5vIiwiYnJ5bmUubm8iLCJicm9ubm95c3VuZC5ubyIsImJyXHhmOG5uXHhmOHlzdW5kLm5vIiwiZHJvYmFrLm5vIiwiZHJceGY4YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxv''@;'; put 'put ''cm8ubm8iLCJmbG9yXHhmOC5ubyIsImZyZWRyaWtzdGFkLm5vIiwiaG9ra3N1bmQubm8iLCJob25lZm9zcy5ubyIsImhceGY4bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8iLCJqb3JwZWxhbmQubm8iLCJqXHhmOHJwZWxhbmQubm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0''@;'; put 'put ''YWRlbHZhLm5vIiwibGFuZ2V2YWcubm8iLCJsYW5nZXZceGU1Zy5ubyIsImxlaXJ2aWsubm8iLCJtam9uZGFsZW4ubm8iLCJtalx4ZjhuZGFsZW4ubm8iLCJtby1pLXJhbmEubm8iLCJtb3Nqb2VuLm5vIiwibW9zalx4Zjhlbi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwi''@;'; put 'put ''b3NveXJvLm5vIiwib3NceGY4eXJvLm5vIiwicmFob2x0Lm5vIiwiclx4ZTVob2x0Lm5vIiwic2FuZG5lc3Nqb2VuLm5vIiwic2FuZG5lc3NqXHhmOGVuLm5vIiwic2tlZHNtb2tvcnNldC5ubyIsInNsYXR0dW0ubm8iLCJzcGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5u''@;'; put 'put ''byIsInN0am9yZGFsc2hhbHNlbi5ubyIsInN0alx4ZjhyZGFsc2hhbHNlbi5ubyIsInRhbmFuZ2VyLm5vIiwidHJhbmJ5Lm5vIiwidm9zc2V2YW5nZW4ubm8iLCJhZmpvcmQubm8iLCJceGU1ZmpvcmQubm8iLCJhZ2RlbmVzLm5vIiwiYWwubm8iLCJceGU1bC5ubyIsImFsZXN1bmQubm8iLCJc''@;'; put 'put ''eGU1bGVzdW5kLm5vIiwiYWxzdGFoYXVnLm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4ZTEubm8iLCJhbGFoZWFkanUubm8iLCJceGUxbGFoZWFkanUubm8iLCJhbHZkYWwubm8iLCJhbWxpLm5vIiwiXHhlNW1saS5ubyIsImFtb3Qubm8iLCJceGU1bW90Lm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3ku''@;'; put 'put ''bm8iLCJhbmRceGY4eS5ubyIsImFuZGFzdW9sby5ubyIsImFyZGFsLm5vIiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwiYXJlbmRhbC5ubyIsIlx4ZTVzLm5vIiwiYXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5vIiwiYXNrZXIubm8iLCJhc2tpbS5ubyIsImFza3ZvbGwubm8iLCJhc2tveS5u''@;'; put 'put ''byIsImFza1x4Zjh5Lm5vIiwiYXNuZXMubm8iLCJceGU1c25lcy5ubyIsImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVyZS5ubyIsImF1cmxhbmQubm8iLCJhdXJza29nLWhvbGFuZC5ubyIsImF1cnNrb2ctaFx4ZjhsYW5kLm5vIiwiYXVzdGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwi''@;'; put 'put ''YXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5vIiwiYmFsZXN0cmFuZC5ubyIsImJhbGxhbmdlbi5ubyIsImJhbGF0Lm5vIiwiYlx4ZTFsXHhlMXQubm8iLCJiYWxzZmpvcmQubm8iLCJiYWhjY2F2dW90bmEubm8iLCJiXHhlMWhjY2F2dW90bmEubm8iLCJiYW1ibGUubm8iLCJiYXJkdS5ubyIsImJl''@;'; put 'put ''YXJkdS5ubyIsImJlaWFybi5ubyIsImJhamRkYXIubm8iLCJiXHhlMWpkZGFyLm5vIiwiYmFpZGFyLm5vIiwiYlx4ZTFpZFx4ZTFyLm5vIiwiYmVyZy5ubyIsImJlcmdlbi5ubyIsImJlcmxldmFnLm5vIiwiYmVybGV2XHhlNWcubm8iLCJiZWFyYWx2YWhraS5ubyIsImJlYXJhbHZceGUxaGtp''@;'; put 'put ''Lm5vIiwiYmluZGFsLm5vIiwiYmlya2VuZXMubm8iLCJiamFya295Lm5vIiwiYmphcmtceGY4eS5ubyIsImJqZXJrcmVpbS5ubyIsImJqdWduLm5vIiwiYm9kby5ubyIsImJvZFx4Zjgubm8iLCJiYWRhZGRqYS5ubyIsImJceGU1ZFx4ZTVkZGpceGU1Lm5vIiwiYnVkZWpqdS5ubyIsImJva24u''@;'; put 'put ''bm8iLCJicmVtYW5nZXIubm8iLCJicm9ubm95Lm5vIiwiYnJceGY4bm5ceGY4eS5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5ubyIsImJhcnVtLm5vIiwiYlx4ZTZydW0ubm8iLCJiby50ZWxlbWFyay5ubyIsImJceGY4LnRlbGVtYXJrLm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5ub3Jk''@;'; put 'put ''bGFuZC5ubyIsImJpZXZhdC5ubyIsImJpZXZceGUxdC5ubyIsImJvbWxvLm5vIiwiYlx4ZjhtbG8ubm8iLCJiYXRzZmpvcmQubm8iLCJiXHhlNXRzZmpvcmQubm8iLCJiYWhjYXZ1b3RuYS5ubyIsImJceGUxaGNhdnVvdG5hLm5vIiwiZG92cmUubm8iLCJkcmFtbWVuLm5vIiwiZHJhbmdlZGFs''@;'; put 'put ''Lm5vIiwiZHlyb3kubm8iLCJkeXJceGY4eS5ubyIsImRvbm5hLm5vIiwiZFx4ZjhubmEubm8iLCJlaWQubm8iLCJlaWRmam9yZC5ubyIsImVpZHNiZXJnLm5vIiwiZWlkc2tvZy5ubyIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1bS5ubyIsImVuZWJha2subm8iLCJlbmdl''@;'; put 'put ''cmRhbC5ubyIsImV0bmUubm8iLCJldG5lZGFsLm5vIiwiZXZlbmVzLm5vIiwiZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2MVx1MDE2MWkubm8iLCJldmplLW9nLWhvcm5uZXMubm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZnVvc3Nrby5ubyIsImZ1b2lza3Uubm8iLCJmZWRqZS5u''@;'; put 'put ''byIsImZldC5ubyIsImZpbm5veS5ubyIsImZpbm5ceGY4eS5ubyIsImZpdGphci5ubyIsImZqYWxlci5ubyIsImZqZWxsLm5vIiwiZmxha3N0YWQubm8iLCJmbGF0YW5nZXIubm8iLCJmbGVra2Vmam9yZC5ubyIsImZsZXNiZXJnLm5vIiwiZmxvcmEubm8iLCJmbGEubm8iLCJmbFx4ZTUubm8i''@;'; put 'put ''LCJmb2xsZGFsLm5vIiwiZm9yc2FuZC5ubyIsImZvc25lcy5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIsImZyb2xhbmQubm8iLCJmcm9zdGEubm8iLCJmcmFuYS5ubyIsImZyXHhlNm5hLm5vIiwiZnJveWEubm8iLCJmclx4Zjh5YS5ubyIsImZ1c2Eubm8iLCJmeXJlc2RhbC5ubyIsImZvcmRl''@;'; put 'put ''Lm5vIiwiZlx4ZjhyZGUubm8iLCJnYW12aWsubm8iLCJnYW5nYXZpaWthLm5vIiwiZ1x4ZTFcdTAxNGJnYXZpaWthLm5vIiwiZ2F1bGFyLm5vIiwiZ2F1c2RhbC5ubyIsImdpbGRlc2thbC5ubyIsImdpbGRlc2tceGU1bC5ubyIsImdpc2tlLm5vIiwiZ2plbW5lcy5ubyIsImdqZXJkcnVtLm5v''@;'; put 'put ''IiwiZ2plcnN0YWQubm8iLCJnamVzZGFsLm5vIiwiZ2pvdmlrLm5vIiwiZ2pceGY4dmlrLm5vIiwiZ2xvcHBlbi5ubyIsImdvbC5ubyIsImdyYW4ubm8iLCJncmFuZS5ubyIsImdyYW52aW4ubm8iLCJncmF0YW5nZW4ubm8iLCJncmltc3RhZC5ubyIsImdyb25nLm5vIiwia3JhYW5naGtlLm5v''@;'; put 'put ''Iiwia3JceGU1YW5naGtlLm5vIiwiZ3J1ZS5ubyIsImd1bGVuLm5vIiwiaGFkc2VsLm5vIiwiaGFsZGVuLm5vIiwiaGFsc2Eubm8iLCJoYW1hci5ubyIsImhhbWFyb3kubm8iLCJoYWJtZXIubm8iLCJoXHhlMWJtZXIubm8iLCJoYXBtaXIubm8iLCJoXHhlMXBtaXIubm8iLCJoYW1tZXJmZXN0''@;'; put 'put ''Lm5vIiwiaGFtbWFyZmVhc3RhLm5vIiwiaFx4ZTFtbVx4ZTFyZmVhc3RhLm5vIiwiaGFyYW0ubm8iLCJoYXJlaWQubm8iLCJoYXJzdGFkLm5vIiwiaGFzdmlrLm5vIiwiYWtub2x1b2t0YS5ubyIsIlx4ZTFrXHUwMTRib2x1b2t0YS5ubyIsImhhdHRmamVsbGRhbC5ubyIsImFhcmJvcnRlLm5v''@;'; put 'put ''IiwiaGF1Z2VzdW5kLm5vIiwiaGVtbmUubm8iLCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhlcm95Lm1vcmUtb2ctcm9tc2RhbC5ubyIsImhlclx4Zjh5Lm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsImhlcm95Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJoaXRyYS5u''@;'; put 'put ''byIsImhqYXJ0ZGFsLm5vIiwiaGplbG1lbGFuZC5ubyIsImhvYm9sLm5vIiwiaG9iXHhmOGwubm8iLCJob2Yubm8iLCJob2wubm8iLCJob2xlLm5vIiwiaG9sbWVzdHJhbmQubm8iLCJob2x0YWxlbi5ubyIsImhvbHRceGU1bGVuLm5vIiwiaG9ybmluZGFsLm5vIiwiaG9ydGVuLm5vIiwiaHVy''@;'; put 'put ''ZGFsLm5vIiwiaHVydW0ubm8iLCJodmFsZXIubm8iLCJoeWxsZXN0YWQubm8iLCJoYWdlYm9zdGFkLm5vIiwiaFx4ZTZnZWJvc3RhZC5ubyIsImhveWFuZ2VyLm5vIiwiaFx4Zjh5YW5nZXIubm8iLCJob3lsYW5kZXQubm8iLCJoXHhmOHlsYW5kZXQubm8iLCJoYS5ubyIsImhceGU1Lm5vIiwi''@;'; put 'put ''aWJlc3RhZC5ubyIsImluZGVyb3kubm8iLCJpbmRlclx4Zjh5Lm5vIiwiaXZlbGFuZC5ubyIsImpldm5ha2VyLm5vIiwiam9uZGFsLm5vIiwiam9sc3Rlci5ubyIsImpceGY4bHN0ZXIubm8iLCJrYXJhc2pvay5ubyIsImthcmFzam9oa2Eubm8iLCJrXHhlMXJceGUxXHUwMTYxam9oa2Eubm8i''@;'; put 'put ''LCJrYXJsc295Lm5vIiwiZ2Fsc2Eubm8iLCJnXHhlMWxzXHhlMS5ubyIsImthcm1veS5ubyIsImthcm1ceGY4eS5ubyIsImthdXRva2Vpbm8ubm8iLCJndW92ZGFnZWFpZG51Lm5vIiwia2xlcHAubm8iLCJrbGFidS5ubyIsImtsXHhlNmJ1Lm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5n''@;'; put 'put ''ZXIubm8iLCJrcmFnZXJvLm5vIiwia3JhZ2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIsImtyb2RzaGVyYWQubm8iLCJrclx4Zjhkc2hlcmFkLm5vIiwia3ZhbHN1bmQubm8iLCJyYWhra2VyYXZqdS5ubyIsInJceGUxaGtrZXJceGUxdmp1Lm5vIiwia3Zh''@;'; put 'put ''bS5ubyIsImt2aW5lc2RhbC5ubyIsImt2aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8iLCJrdml0c295Lm5vIiwia3ZpdHNceGY4eS5ubyIsImt2YWZqb3JkLm5vIiwia3ZceGU2ZmpvcmQubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwia3ZhbmFuZ2VuLm5vIiwia3ZceGU2bmFuZ2VuLm5vIiwi''@;'; put 'put ''bmF2dW90bmEubm8iLCJuXHhlMXZ1b3RuYS5ubyIsImthZmpvcmQubm8iLCJrXHhlNWZqb3JkLm5vIiwiZ2FpdnVvdG5hLm5vIiwiZ1x4ZTFpdnVvdG5hLm5vIiwibGFydmlrLm5vIiwibGF2YW5nZW4ubm8iLCJsYXZhZ2lzLm5vIiwibG9hYmF0Lm5vIiwibG9hYlx4ZTF0Lm5vIiwibGViZXNi''@;'; put 'put ''eS5ubyIsImRhdnZlc2lpZGEubm8iLCJsZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8iLCJsZWthLm5vIiwibGVrc3Zpay5ubyIsImxlbnZpay5ubyIsImxlYW5nYXZpaWthLm5vIiwibGVhXHUwMTRiZ2F2aWlrYS5ubyIsImxlc2phLm5vIiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGll''@;'; put 'put ''cm5lLm5vIiwibGlsbGVoYW1tZXIubm8iLCJsaWxsZXNhbmQubm8iLCJsaW5kZXNuZXMubm8iLCJsaW5kYXMubm8iLCJsaW5kXHhlNXMubm8iLCJsb20ubm8iLCJsb3BwYS5ubyIsImxhaHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImx1bmQubm8iLCJsdW5uZXIubm8iLCJsdXJveS5ubyIsImx1''@;'; put 'put ''clx4Zjh5Lm5vIiwibHVzdGVyLm5vIiwibHluZ2RhbC5ubyIsImx5bmdlbi5ubyIsIml2Z3Uubm8iLCJsYXJkYWwubm8iLCJsZXJkYWwubm8iLCJsXHhlNnJkYWwubm8iLCJsb2Rpbmdlbi5ubyIsImxceGY4ZGluZ2VuLm5vIiwibG9yZW5za29nLm5vIiwibFx4ZjhyZW5za29nLm5vIiwibG90''@;'; put 'put ''ZW4ubm8iLCJsXHhmOHRlbi5ubyIsIm1hbHZpay5ubyIsIm1hc295Lm5vIiwibVx4ZTVzXHhmOHkubm8iLCJtdW9zYXQubm8iLCJtdW9zXHhlMXQubm8iLCJtYW5kYWwubm8iLCJtYXJrZXIubm8iLCJtYXJuYXJkYWwubm8iLCJtYXNmam9yZGVuLm5vIiwibWVsYW5kLm5vIiwibWVsZGFsLm5v''@;'; put 'put ''IiwibWVsaHVzLm5vIiwibWVsb3kubm8iLCJtZWxceGY4eS5ubyIsIm1lcmFrZXIubm8iLCJtZXJceGU1a2VyLm5vIiwibW9hcmVrZS5ubyIsIm1vXHhlNXJla2Uubm8iLCJtaWRzdW5kLm5vIiwibWlkdHJlLWdhdWxkYWwubm8iLCJtb2RhbGVuLm5vIiwibW9kdW0ubm8iLCJtb2xkZS5ubyIs''@;'; put 'put ''Im1vc2tlbmVzLm5vIiwibW9zcy5ubyIsIm1vc3Zpay5ubyIsIm1hbHNlbHYubm8iLCJtXHhlNWxzZWx2Lm5vIiwibWFsYXR2dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3BtaS5ubyIsIm5hbWRhbHNlaWQubm8iLCJhZWpyaWUubm8iLCJuYW1zb3Mubm8iLCJuYW1zc2tvZ2FuLm5vIiwibmFhbWVz''@;'; put 'put ''amV2dWVtaWUubm8iLCJuXHhlNVx4ZTVtZXNqZXZ1ZW1pZS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsIm5hbm5lc3RhZC5ubyIsIm5hcnZpay5ubyIsIm5hcnZpaWthLm5vIiwibmF1c3RkYWwubm8iLCJuZWRyZS1laWtlci5ubyIsIm5lcy5ha2Vyc2h1cy5ubyIsIm5lcy5idXNrZXJ1ZC5ubyIs''@;'; put 'put ''Im5lc25hLm5vIiwibmVzb2RkZW4ubm8iLCJuZXNzZWJ5Lm5vIiwidW5qYXJnYS5ubyIsInVualx4ZTFyZ2Eubm8iLCJuZXNzZXQubm8iLCJuaXNzZWRhbC5ubyIsIm5pdHRlZGFsLm5vIiwibm9yZC1hdXJkYWwubm8iLCJub3JkLWZyb24ubm8iLCJub3JkLW9kYWwubm8iLCJub3JkZGFsLm5v''@;'; put 'put ''Iiwibm9yZGthcHAubm8iLCJkYXZ2ZW5qYXJnYS5ubyIsImRhdnZlbmpceGUxcmdhLm5vIiwibm9yZHJlLWxhbmQubm8iLCJub3JkcmVpc2Eubm8iLCJyYWlzYS5ubyIsInJceGUxaXNhLm5vIiwibm9yZS1vZy11dmRhbC5ubyIsIm5vdG9kZGVuLm5vIiwibmFyb3kubm8iLCJuXHhlNnJceGY4''@;'; put 'put ''eS5ubyIsIm5vdHRlcm95Lm5vIiwiblx4Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwib2tzbmVzLm5vIiwiXHhmOGtzbmVzLm5vIiwib3BwZGFsLm5vIiwib3BwZWdhcmQubm8iLCJvcHBlZ1x4ZTVyZC5ubyIsIm9ya2RhbC5ubyIsIm9ybGFuZC5ubyIsIlx4ZjhybGFuZC5ubyIsIm9yc2tv''@;'; put 'put ''Zy5ubyIsIlx4Zjhyc2tvZy5ubyIsIm9yc3RhLm5vIiwiXHhmOHJzdGEubm8iLCJvcy5oZWRtYXJrLm5vIiwib3MuaG9yZGFsYW5kLm5vIiwib3Nlbi5ubyIsIm9zdGVyb3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwib3N0cmUtdG90ZW4ubm8iLCJceGY4c3RyZS10b3Rlbi5ubyIsIm92ZXJoYWxs''@;'; put 'put ''YS5ubyIsIm92cmUtZWlrZXIubm8iLCJceGY4dnJlLWVpa2VyLm5vIiwib3llci5ubyIsIlx4Zjh5ZXIubm8iLCJveWdhcmRlbi5ubyIsIlx4Zjh5Z2FyZGVuLm5vIiwib3lzdHJlLXNsaWRyZS5ubyIsIlx4Zjh5c3RyZS1zbGlkcmUubm8iLCJwb3JzYW5nZXIubm8iLCJwb3JzYW5ndS5ubyIs''@;'; put 'put ''InBvcnNceGUxXHUwMTRiZ3Uubm8iLCJwb3JzZ3J1bm4ubm8iLCJyYWRveS5ubyIsInJhZFx4Zjh5Lm5vIiwicmFra2VzdGFkLm5vIiwicmFuYS5ubyIsInJ1b3ZhdC5ubyIsInJhbmRhYmVyZy5ubyIsInJhdW1hLm5vIiwicmVuZGFsZW4ubm8iLCJyZW5uZWJ1Lm5vIiwicmVubmVzb3kubm8i''@;'; put 'put ''LCJyZW5uZXNceGY4eS5ubyIsInJpbmRhbC5ubyIsInJpbmdlYnUubm8iLCJyaW5nZXJpa2Uubm8iLCJyaW5nc2FrZXIubm8iLCJyaXNzYS5ubyIsInJpc29yLm5vIiwicmlzXHhmOHIubm8iLCJyb2FuLm5vIiwicm9sbGFnLm5vIiwicnlnZ2Uubm8iLCJyYWxpbmdlbi5ubyIsInJceGU2bGlu''@;'; put 'put ''Z2VuLm5vIiwicm9kb3kubm8iLCJyXHhmOGRceGY4eS5ubyIsInJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mubm8iLCJyXHhmOHJvcy5ubyIsInJvc3Qubm8iLCJyXHhmOHN0Lm5vIiwicm95a2VuLm5vIiwiclx4Zjh5a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsu''@;'; put 'put ''bm8iLCJyYWRlLm5vIiwiclx4ZTVkZS5ubyIsInNhbGFuZ2VuLm5vIiwic2llbGxhay5ubyIsInNhbHRkYWwubm8iLCJzYWxhdC5ubyIsInNceGUxbFx4ZTF0Lm5vIiwic1x4ZTFsYXQubm8iLCJzYW1uYW5nZXIubm8iLCJzYW5kZS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tXHhmOHJl''@;'; put 'put ''LW9nLXJvbXNkYWwubm8iLCJzYW5kZS52ZXN0Zm9sZC5ubyIsInNhbmRlZmpvcmQubm8iLCJzYW5kbmVzLm5vIiwic2FuZG95Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2FycHNib3JnLm5vIiwic2F1ZGEubm8iLCJzYXVoZXJhZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJz''@;'; put 'put ''ZWxqb3JkLm5vIiwic2lnZGFsLm5vIiwic2lsamFuLm5vIiwic2lyZGFsLm5vIiwic2thdW4ubm8iLCJza2Vkc21vLm5vIiwic2tpLm5vIiwic2tpZW4ubm8iLCJza2lwdHZldC5ubyIsInNramVydm95Lm5vIiwic2tqZXJ2XHhmOHkubm8iLCJza2llcnZhLm5vIiwic2tpZXJ2XHhlMS5ubyIs''@;'; put 'put ''InNramFrLm5vIiwic2tqXHhlNWsubm8iLCJza29kamUubm8iLCJza2FubGFuZC5ubyIsInNrXHhlNW5sYW5kLm5vIiwic2thbml0Lm5vIiwic2tceGUxbml0Lm5vIiwic21vbGEubm8iLCJzbVx4ZjhsYS5ubyIsInNuaWxsZmpvcmQubm8iLCJzbmFzYS5ubyIsInNuXHhlNXNhLm5vIiwic25v''@;'; put 'put ''YXNhLm5vIiwic25hYXNlLm5vIiwic25ceGU1YXNlLm5vIiwic29nbmRhbC5ubyIsInNva25kYWwubm8iLCJzb2xhLm5vIiwic29sdW5kLm5vIiwic29uZ2RhbGVuLm5vIiwic29ydGxhbmQubm8iLCJzcHlkZWJlcmcubm8iLCJzdGFuZ2Uubm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5v''@;'; put 'put ''Iiwic3RlaW5ramVyLm5vIiwic3Rqb3JkYWwubm8iLCJzdGpceGY4cmRhbC5ubyIsInN0b2trZS5ubyIsInN0b3ItZWx2ZGFsLm5vIiwic3RvcmQubm8iLCJzdG9yZGFsLm5vIiwic3RvcmZqb3JkLm5vIiwib21hc3Z1b3RuYS5ubyIsInN0cmFuZC5ubyIsInN0cmFuZGEubm8iLCJzdHJ5bi5u''@;'; put 'put ''byIsInN1bGEubm8iLCJzdWxkYWwubm8iLCJzdW5kLm5vIiwic3VubmRhbC5ubyIsInN1cm5hZGFsLm5vIiwic3ZlaW8ubm8iLCJzdmVsdmlrLm5vIiwic3lra3lsdmVuLm5vIiwic29nbmUubm8iLCJzXHhmOGduZS5ubyIsInNvbW5hLm5vIiwic1x4ZjhtbmEubm8iLCJzb25kcmUtbGFuZC5u''@;'; put 'put ''byIsInNceGY4bmRyZS1sYW5kLm5vIiwic29yLWF1cmRhbC5ubyIsInNceGY4ci1hdXJkYWwubm8iLCJzb3ItZnJvbi5ubyIsInNceGY4ci1mcm9uLm5vIiwic29yLW9kYWwubm8iLCJzXHhmOHItb2RhbC5ubyIsInNvci12YXJhbmdlci5ubyIsInNceGY4ci12YXJhbmdlci5ubyIsIm1hdHRh''@;'; put 'put ''LXZhcmpqYXQubm8iLCJtXHhlMXR0YS12XHhlMXJqamF0Lm5vIiwic29yZm9sZC5ubyIsInNceGY4cmZvbGQubm8iLCJzb3JyZWlzYS5ubyIsInNceGY4cnJlaXNhLm5vIiwic29ydW0ubm8iLCJzXHhmOHJ1bS5ubyIsInRhbmEubm8iLCJkZWF0bnUubm8iLCJ0aW1lLm5vIiwidGluZ3ZvbGwu''@;'; put 'put ''bm8iLCJ0aW5uLm5vIiwidGplbGRzdW5kLm5vIiwiZGllbGRkYW51b3JyaS5ubyIsInRqb21lLm5vIiwidGpceGY4bWUubm8iLCJ0b2trZS5ubyIsInRvbGdhLm5vIiwidG9yc2tlbi5ubyIsInRyYW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb21zby5ubyIsInRyb21zXHhmOC5ubyIsInRy''@;'; put 'put ''b21zYS5ubyIsInJvbXNhLm5vIiwidHJvbmRoZWltLm5vIiwidHJvYW5kaW4ubm8iLCJ0cnlzaWwubm8iLCJ0cmFuYS5ubyIsInRyXHhlNm5hLm5vIiwidHJvZ3N0YWQubm8iLCJ0clx4Zjhnc3RhZC5ubyIsInR2ZWRlc3RyYW5kLm5vIiwidHlkYWwubm8iLCJ0eW5zZXQubm8iLCJ0eXNmam9y''@;'; put 'put ''ZC5ubyIsImRpdnRhc3Z1b2RuYS5ubyIsImRpdnR0YXN2dW90bmEubm8iLCJ0eXNuZXMubm8iLCJ0eXN2YXIubm8iLCJ0eXN2XHhlNnIubm8iLCJ0b25zYmVyZy5ubyIsInRceGY4bnNiZXJnLm5vIiwidWxsZW5zYWtlci5ubyIsInVsbGVuc3Zhbmcubm8iLCJ1bHZpay5ubyIsInV0c2lyYS5u''@;'; put 'put ''byIsInZhZHNvLm5vIiwidmFkc1x4Zjgubm8iLCJjYWhjZXN1b2xvLm5vIiwiXHUwMTBkXHhlMWhjZXN1b2xvLm5vIiwidmFrc2RhbC5ubyIsInZhbGxlLm5vIiwidmFuZy5ubyIsInZhbnlsdmVuLm5vIiwidmFyZG8ubm8iLCJ2YXJkXHhmOC5ubyIsInZhcmdnYXQubm8iLCJ2XHhlMXJnZ1x4''@;'; put 'put ''ZTF0Lm5vIiwidmVmc24ubm8iLCJ2YWFwc3RlLm5vIiwidmVnYS5ubyIsInZlZ2Fyc2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5ubyIsInZlbm5lc2xhLm5vIiwidmVyZGFsLm5vIiwidmVycmFuLm5vIiwidmVzdGJ5Lm5vIiwidmVzdG5lcy5ubyIsInZlc3RyZS1zbGlkcmUubm8iLCJ2ZXN0cmUt''@;'; put 'put ''dG90ZW4ubm8iLCJ2ZXN0dmFnb3kubm8iLCJ2ZXN0dlx4ZTVnXHhmOHkubm8iLCJ2ZXZlbHN0YWQubm8iLCJ2aWsubm8iLCJ2aWtuYS5ubyIsInZpbmRhZmpvcmQubm8iLCJ2b2xkYS5ubyIsInZvc3Mubm8iLCJ2YXJveS5ubyIsInZceGU2clx4Zjh5Lm5vIiwidmFnYW4ubm8iLCJ2XHhlNWdh''@;'; put 'put ''bi5ubyIsInZvYWdhdC5ubyIsInZhZ3NveS5ubyIsInZceGU1Z3NceGY4eS5ubyIsInZhZ2Eubm8iLCJ2XHhlNWdceGU1Lm5vIiwidmFsZXIub3N0Zm9sZC5ubyIsInZceGU1bGVyLlx4ZjhzdGZvbGQubm8iLCJ2YWxlci5oZWRtYXJrLm5vIiwidlx4ZTVsZXIuaGVkbWFyay5ubyIsIioubnAi''@;'; put 'put ''LCJuciIsImJpei5uciIsImluZm8ubnIiLCJnb3YubnIiLCJlZHUubnIiLCJvcmcubnIiLCJuZXQubnIiLCJjb20ubnIiLCJudSIsIm56IiwiYWMubnoiLCJjby5ueiIsImNyaS5ueiIsImdlZWsubnoiLCJnZW4ubnoiLCJnb3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIs''@;'; put 'put ''Im1hb3JpLm56IiwibWlsLm56IiwibVx1MDEwMW9yaS5ueiIsIm5ldC5ueiIsIm9yZy5ueiIsInBhcmxpYW1lbnQubnoiLCJzY2hvb2wubnoiLCJvbSIsImNvLm9tIiwiY29tLm9tIiwiZWR1Lm9tIiwiZ292Lm9tIiwibWVkLm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJv''@;'; put 'put ''Lm9tIiwib25pb24iLCJvcmciLCJwYSIsImFjLnBhIiwiZ29iLnBhIiwiY29tLnBhIiwib3JnLnBhIiwic2xkLnBhIiwiZWR1LnBhIiwibmV0LnBhIiwiaW5nLnBhIiwiYWJvLnBhIiwibWVkLnBhIiwibm9tLnBhIiwicGUiLCJlZHUucGUiLCJnb2IucGUiLCJub20ucGUiLCJtaWwucGUiLCJv''@;'; put 'put ''cmcucGUiLCJjb20ucGUiLCJuZXQucGUiLCJwZiIsImNvbS5wZiIsIm9yZy5wZiIsImVkdS5wZiIsIioucGciLCJwaCIsImNvbS5waCIsIm5ldC5waCIsIm9yZy5waCIsImdvdi5waCIsImVkdS5waCIsIm5nby5waCIsIm1pbC5waCIsImkucGgiLCJwayIsImNvbS5wayIsIm5ldC5wayIsImVk''@;'; put 'put ''dS5wayIsIm9yZy5wayIsImZhbS5wayIsImJpei5wayIsIndlYi5wayIsImdvdi5wayIsImdvYi5wayIsImdvay5wayIsImdvbi5wayIsImdvcC5wayIsImdvcy5wayIsImluZm8ucGsiLCJwbCIsImNvbS5wbCIsIm5ldC5wbCIsIm9yZy5wbCIsImFpZC5wbCIsImFncm8ucGwiLCJhdG0ucGwi''@;'; put 'put ''LCJhdXRvLnBsIiwiYml6LnBsIiwiZWR1LnBsIiwiZ21pbmEucGwiLCJnc20ucGwiLCJpbmZvLnBsIiwibWFpbC5wbCIsIm1pYXN0YS5wbCIsIm1lZGlhLnBsIiwibWlsLnBsIiwibmllcnVjaG9tb3NjaS5wbCIsIm5vbS5wbCIsInBjLnBsIiwicG93aWF0LnBsIiwicHJpdi5wbCIsInJlYWxl''@;'; put 'put ''c3RhdGUucGwiLCJyZWwucGwiLCJzZXgucGwiLCJzaG9wLnBsIiwic2tsZXAucGwiLCJzb3MucGwiLCJzemtvbGEucGwiLCJ0YXJnaS5wbCIsInRtLnBsIiwidG91cmlzbS5wbCIsInRyYXZlbC5wbCIsInR1cnlzdHlrYS5wbCIsImdvdi5wbCIsImFwLmdvdi5wbCIsImljLmdvdi5wbCIsImlz''@;'; put 'put ''Lmdvdi5wbCIsInVzLmdvdi5wbCIsImttcHNwLmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cHNwLmdvdi5wbCIsInBzcC5nb3YucGwiLCJ3c2tyLmdvdi5wbCIsImt3cC5nb3YucGwiLCJtdy5nb3YucGwiLCJ1Zy5nb3YucGwiLCJ1bS5nb3YucGwiLCJ1bWlnLmdvdi5wbCIsInVnaW0uZ292''@;'; put 'put ''LnBsIiwidXBvdy5nb3YucGwiLCJ1dy5nb3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwicGEuZ292LnBsIiwicG8uZ292LnBsIiwicHNzZS5nb3YucGwiLCJwdXAuZ292LnBsIiwicnpndy5nb3YucGwiLCJzYS5nb3YucGwiLCJzby5nb3YucGwiLCJzci5nb3YucGwiLCJ3c2EuZ292LnBsIiwi''@;'; put 'put ''c2tvLmdvdi5wbCIsInV6cy5nb3YucGwiLCJ3aWloLmdvdi5wbCIsIndpbmIuZ292LnBsIiwicGluYi5nb3YucGwiLCJ3aW9zLmdvdi5wbCIsIndpdGQuZ292LnBsIiwid3ptaXV3Lmdvdi5wbCIsInBpdy5nb3YucGwiLCJ3aXcuZ292LnBsIiwiZ3Jpdy5nb3YucGwiLCJ3aWYuZ292LnBsIiwi''@;'; put 'put ''b3VtLmdvdi5wbCIsInNkbi5nb3YucGwiLCJ6cC5nb3YucGwiLCJ1cHBvLmdvdi5wbCIsIm11cC5nb3YucGwiLCJ3dW96Lmdvdi5wbCIsImtvbnN1bGF0Lmdvdi5wbCIsIm9pcm0uZ292LnBsIiwiYXVndXN0b3cucGwiLCJiYWJpYS1nb3JhLnBsIiwiYmVkemluLnBsIiwiYmVza2lkeS5wbCIs''@;'; put 'put ''ImJpYWxvd2llemEucGwiLCJiaWFseXN0b2sucGwiLCJiaWVsYXdhLnBsIiwiYmllc3pjemFkeS5wbCIsImJvbGVzbGF3aWVjLnBsIiwiYnlkZ29zemN6LnBsIiwiYnl0b20ucGwiLCJjaWVzenluLnBsIiwiY3plbGFkei5wbCIsImN6ZXN0LnBsIiwiZGx1Z29sZWthLnBsIiwiZWxibGFnLnBs''@;'; put 'put ''IiwiZWxrLnBsIiwiZ2xvZ293LnBsIiwiZ25pZXpuby5wbCIsImdvcmxpY2UucGwiLCJncmFqZXdvLnBsIiwiaWxhd2EucGwiLCJqYXdvcnpuby5wbCIsImplbGVuaWEtZ29yYS5wbCIsImpnb3JhLnBsIiwia2FsaXN6LnBsIiwia2F6aW1pZXJ6LWRvbG55LnBsIiwia2FycGFjei5wbCIsImth''@;'; put 'put ''cnR1enkucGwiLCJrYXN6dWJ5LnBsIiwia2F0b3dpY2UucGwiLCJrZXBuby5wbCIsImtldHJ6eW4ucGwiLCJrbG9kemtvLnBsIiwia29iaWVyenljZS5wbCIsImtvbG9icnplZy5wbCIsImtvbmluLnBsIiwia29uc2tvd29sYS5wbCIsImt1dG5vLnBsIiwibGFweS5wbCIsImxlYm9yay5wbCIs''@;'; put 'put ''ImxlZ25pY2EucGwiLCJsZXphanNrLnBsIiwibGltYW5vd2EucGwiLCJsb216YS5wbCIsImxvd2ljei5wbCIsImx1YmluLnBsIiwibHVrb3cucGwiLCJtYWxib3JrLnBsIiwibWFsb3BvbHNrYS5wbCIsIm1hem93c3plLnBsIiwibWF6dXJ5LnBsIiwibWllbGVjLnBsIiwibWllbG5vLnBsIiwi''@;'; put 'put ''bXJhZ293by5wbCIsIm5ha2xvLnBsIiwibm93YXJ1ZGEucGwiLCJueXNhLnBsIiwib2xhd2EucGwiLCJvbGVja28ucGwiLCJvbGt1c3oucGwiLCJvbHN6dHluLnBsIiwib3BvY3puby5wbCIsIm9wb2xlLnBsIiwib3N0cm9kYS5wbCIsIm9zdHJvbGVrYS5wbCIsIm9zdHJvd2llYy5wbCIsIm9z''@;'; put 'put ''dHJvd3dsa3AucGwiLCJwaWxhLnBsIiwicGlzei5wbCIsInBvZGhhbGUucGwiLCJwb2RsYXNpZS5wbCIsInBvbGtvd2ljZS5wbCIsInBvbW9yemUucGwiLCJwb21vcnNraWUucGwiLCJwcm9jaG93aWNlLnBsIiwicHJ1c3prb3cucGwiLCJwcnpld29yc2sucGwiLCJwdWxhd3kucGwiLCJyYWRv''@;'; put 'put ''bS5wbCIsInJhd2EtbWF6LnBsIiwicnlibmlrLnBsIiwicnplc3pvdy5wbCIsInNhbm9rLnBsIiwic2VqbnkucGwiLCJzbGFzay5wbCIsInNsdXBzay5wbCIsInNvc25vd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInNrb2N6b3cucGwiLCJzdGFyYWNob3dpY2UucGwiLCJzdGFyZ2FyZC5w''@;'; put 'put ''bCIsInN1d2Fsa2kucGwiLCJzd2lkbmljYS5wbCIsInN3aWVib2R6aW4ucGwiLCJzd2lub3Vqc2NpZS5wbCIsInN6Y3plY2luLnBsIiwic3pjenl0bm8ucGwiLCJ0YXJub2JyemVnLnBsIiwidGdvcnkucGwiLCJ0dXJlay5wbCIsInR5Y2h5LnBsIiwidXN0a2EucGwiLCJ3YWxicnp5Y2gucGwi''@;'; put 'put ''LCJ3YXJtaWEucGwiLCJ3YXJzemF3YS5wbCIsIndhdy5wbCIsIndlZ3Jvdy5wbCIsIndpZWx1bi5wbCIsIndsb2NsLnBsIiwid2xvY2xhd2VrLnBsIiwid29kemlzbGF3LnBsIiwid29sb21pbi5wbCIsIndyb2NsYXcucGwiLCJ6YWNocG9tb3IucGwiLCJ6YWdhbi5wbCIsInphcm93LnBsIiwi''@;'; put 'put ''emdvcmEucGwiLCJ6Z29yemVsZWMucGwiLCJwbSIsInBuIiwiZ292LnBuIiwiY28ucG4iLCJvcmcucG4iLCJlZHUucG4iLCJuZXQucG4iLCJwb3N0IiwicHIiLCJjb20ucHIiLCJuZXQucHIiLCJvcmcucHIiLCJnb3YucHIiLCJlZHUucHIiLCJpc2xhLnByIiwicHJvLnByIiwiYml6LnByIiwi''@;'; put 'put ''aW5mby5wciIsIm5hbWUucHIiLCJlc3QucHIiLCJwcm9mLnByIiwiYWMucHIiLCJwcm8iLCJhYWEucHJvIiwiYWNhLnBybyIsImFjY3QucHJvIiwiYXZvY2F0LnBybyIsImJhci5wcm8iLCJjcGEucHJvIiwiZW5nLnBybyIsImp1ci5wcm8iLCJsYXcucHJvIiwibWVkLnBybyIsInJlY2h0LnBy''@;'; put 'put ''byIsInBzIiwiZWR1LnBzIiwiZ292LnBzIiwic2VjLnBzIiwicGxvLnBzIiwiY29tLnBzIiwib3JnLnBzIiwibmV0LnBzIiwicHQiLCJuZXQucHQiLCJnb3YucHQiLCJvcmcucHQiLCJlZHUucHQiLCJpbnQucHQiLCJwdWJsLnB0IiwiY29tLnB0Iiwibm9tZS5wdCIsInB3IiwiY28ucHciLCJu''@;'; put 'put ''ZS5wdyIsIm9yLnB3IiwiZWQucHciLCJnby5wdyIsImJlbGF1LnB3IiwicHkiLCJjb20ucHkiLCJjb29wLnB5IiwiZWR1LnB5IiwiZ292LnB5IiwibWlsLnB5IiwibmV0LnB5Iiwib3JnLnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1lLnFhIiwibmV0''@;'; put 'put ''LnFhIiwib3JnLnFhIiwic2NoLnFhIiwicmUiLCJhc3NvLnJlIiwiY29tLnJlIiwibm9tLnJlIiwicm8iLCJhcnRzLnJvIiwiY29tLnJvIiwiZmlybS5ybyIsImluZm8ucm8iLCJub20ucm8iLCJudC5ybyIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJy''@;'; put 'put ''cyIsImFjLnJzIiwiY28ucnMiLCJlZHUucnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1IiwicnciLCJhYy5ydyIsImNvLnJ3IiwiY29vcC5ydyIsImdvdi5ydyIsIm1pbC5ydyIsIm5ldC5ydyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwibmV0LnNhIiwib3JnLnNhIiwiZ292LnNh''@;'; put 'put ''IiwibWVkLnNhIiwicHViLnNhIiwiZWR1LnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUuc2IiLCJnb3Yuc2IiLCJuZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNvbS5zYyIsImdvdi5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsImVkdS5zYyIsInNkIiwiY29tLnNkIiwibmV0LnNkIiwib3Jn''@;'; put 'put ''LnNkIiwiZWR1LnNkIiwibWVkLnNkIiwidHYuc2QiLCJnb3Yuc2QiLCJpbmZvLnNkIiwic2UiLCJhLnNlIiwiYWMuc2UiLCJiLnNlIiwiYmQuc2UiLCJicmFuZC5zZSIsImMuc2UiLCJkLnNlIiwiZS5zZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIs''@;'; put 'put ''Imkuc2UiLCJrLnNlIiwia29tZm9yYi5zZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5zZSIsImwuc2UiLCJsYW5iaWIuc2UiLCJtLnNlIiwibi5zZSIsIm5hdHVyYnJ1a3NneW1uLnNlIiwiby5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2Ui''@;'; put 'put ''LCJyLnNlIiwicy5zZSIsInQuc2UiLCJ0bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2UiLCJ6LnNlIiwic2ciLCJjb20uc2ciLCJuZXQuc2ciLCJvcmcuc2ciLCJnb3Yuc2ciLCJlZHUuc2ciLCJwZXIuc2ciLCJzaCIsImNvbS5zaCIsIm5ldC5zaCIsImdvdi5zaCIsIm9yZy5zaCIs''@;'; put 'put ''Im1pbC5zaCIsInNpIiwic2oiLCJzayIsInNsIiwiY29tLnNsIiwibmV0LnNsIiwiZWR1LnNsIiwiZ292LnNsIiwib3JnLnNsIiwic20iLCJzbiIsImFydC5zbiIsImNvbS5zbiIsImVkdS5zbiIsImdvdXYuc24iLCJvcmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIs''@;'; put 'put ''ImVkdS5zbyIsImdvdi5zbyIsIm1lLnNvIiwibmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNvbS5zcyIsImVkdS5zcyIsImdvdi5zcyIsIm1lLnNzIiwibmV0LnNzIiwib3JnLnNzIiwic2NoLnNzIiwic3QiLCJjby5zdCIsImNvbS5zdCIsImNvbnN1bGFkby5zdCIsImVk''@;'; put 'put ''dS5zdCIsImVtYmFpeGFkYS5zdCIsIm1pbC5zdCIsIm5ldC5zdCIsIm9yZy5zdCIsInByaW5jaXBlLnN0Iiwic2FvdG9tZS5zdCIsInN0b3JlLnN0Iiwic3UiLCJzdiIsImNvbS5zdiIsImVkdS5zdiIsImdvYi5zdiIsIm9yZy5zdiIsInJlZC5zdiIsInN4IiwiZ292LnN4Iiwic3kiLCJlZHUu''@;'; put 'put ''c3kiLCJnb3Yuc3kiLCJuZXQuc3kiLCJtaWwuc3kiLCJjb20uc3kiLCJvcmcuc3kiLCJzeiIsImNvLnN6IiwiYWMuc3oiLCJvcmcuc3oiLCJ0YyIsInRkIiwidGVsIiwidGYiLCJ0ZyIsInRoIiwiYWMudGgiLCJjby50aCIsImdvLnRoIiwiaW4udGgiLCJtaS50aCIsIm5ldC50aCIsIm9yLnRo''@;'; put 'put ''IiwidGoiLCJhYy50aiIsImJpei50aiIsImNvLnRqIiwiY29tLnRqIiwiZWR1LnRqIiwiZ28udGoiLCJnb3YudGoiLCJpbnQudGoiLCJtaWwudGoiLCJuYW1lLnRqIiwibmV0LnRqIiwibmljLnRqIiwib3JnLnRqIiwidGVzdC50aiIsIndlYi50aiIsInRrIiwidGwiLCJnb3YudGwiLCJ0bSIs''@;'; put 'put ''ImNvbS50bSIsImNvLnRtIiwib3JnLnRtIiwibmV0LnRtIiwibm9tLnRtIiwiZ292LnRtIiwibWlsLnRtIiwiZWR1LnRtIiwidG4iLCJjb20udG4iLCJlbnMudG4iLCJmaW4udG4iLCJnb3YudG4iLCJpbmQudG4iLCJpbmZvLnRuIiwiaW50bC50biIsIm1pbmNvbS50biIsIm5hdC50biIsIm5l''@;'; put 'put ''dC50biIsIm9yZy50biIsInBlcnNvLnRuIiwidG91cmlzbS50biIsInRvIiwiY29tLnRvIiwiZ292LnRvIiwibmV0LnRvIiwib3JnLnRvIiwiZWR1LnRvIiwibWlsLnRvIiwidHIiLCJhdi50ciIsImJicy50ciIsImJlbC50ciIsImJpei50ciIsImNvbS50ciIsImRyLnRyIiwiZWR1LnRyIiwi''@;'; put 'put ''Z2VuLnRyIiwiZ292LnRyIiwiaW5mby50ciIsIm1pbC50ciIsImsxMi50ciIsImtlcC50ciIsIm5hbWUudHIiLCJuZXQudHIiLCJvcmcudHIiLCJwb2wudHIiLCJ0ZWwudHIiLCJ0c2sudHIiLCJ0di50ciIsIndlYi50ciIsIm5jLnRyIiwiZ292Lm5jLnRyIiwidHQiLCJjby50dCIsImNvbS50''@;'; put 'put ''dCIsIm9yZy50dCIsIm5ldC50dCIsImJpei50dCIsImluZm8udHQiLCJwcm8udHQiLCJpbnQudHQiLCJjb29wLnR0Iiwiam9icy50dCIsIm1vYmkudHQiLCJ0cmF2ZWwudHQiLCJtdXNldW0udHQiLCJhZXJvLnR0IiwibmFtZS50dCIsImdvdi50dCIsImVkdS50dCIsInR2IiwidHciLCJlZHUu''@;'; put 'put ''dHciLCJnb3YudHciLCJtaWwudHciLCJjb20udHciLCJuZXQudHciLCJvcmcudHciLCJpZHYudHciLCJnYW1lLnR3IiwiZWJpei50dyIsImNsdWIudHciLCJcdTdkYjJcdThkZWYudHciLCJcdTdkNDRcdTdlNTQudHciLCJcdTU1NDZcdTY5NmQudHciLCJ0eiIsImFjLnR6IiwiY28udHoiLCJn''@;'; put 'put ''by50eiIsImhvdGVsLnR6IiwiaW5mby50eiIsIm1lLnR6IiwibWlsLnR6IiwibW9iaS50eiIsIm5lLnR6Iiwib3IudHoiLCJzYy50eiIsInR2LnR6IiwidWEiLCJjb20udWEiLCJlZHUudWEiLCJnb3YudWEiLCJpbi51YSIsIm5ldC51YSIsIm9yZy51YSIsImNoZXJrYXNzeS51YSIsImNoZXJr''@;'; put 'put ''YXN5LnVhIiwiY2hlcm5pZ292LnVhIiwiY2hlcm5paGl2LnVhIiwiY2hlcm5pdnRzaS51YSIsImNoZXJub3Z0c3kudWEiLCJjay51YSIsImNuLnVhIiwiY3IudWEiLCJjcmltZWEudWEiLCJjdi51YSIsImRuLnVhIiwiZG5lcHJvcGV0cm92c2sudWEiLCJkbmlwcm9wZXRyb3Zzay51YSIsImRv''@;'; put 'put ''bmV0c2sudWEiLCJkcC51YSIsImlmLnVhIiwiaXZhbm8tZnJhbmtpdnNrLnVhIiwia2gudWEiLCJraGFya2l2LnVhIiwia2hhcmtvdi51YSIsImtoZXJzb24udWEiLCJraG1lbG5pdHNraXkudWEiLCJraG1lbG55dHNreWkudWEiLCJraWV2LnVhIiwia2lyb3ZvZ3JhZC51YSIsImttLnVhIiwi''@;'; put 'put ''a3IudWEiLCJrcnltLnVhIiwia3MudWEiLCJrdi51YSIsImt5aXYudWEiLCJsZy51YSIsImx0LnVhIiwibHVnYW5zay51YSIsImx1dHNrLnVhIiwibHYudWEiLCJsdml2LnVhIiwibWsudWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEiLCJvZGVzYS51YSIsIm9kZXNzYS51''@;'; put 'put ''YSIsInBsLnVhIiwicG9sdGF2YS51YSIsInJpdm5lLnVhIiwicm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3BvbC51YSIsInNldmFzdG9wb2wudWEiLCJzbS51YSIsInN1bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1emhnb3JvZC51YSIsInZpbm5pY2Eu''@;'; put 'put ''dWEiLCJ2aW5ueXRzaWEudWEiLCJ2bi51YSIsInZvbHluLnVhIiwieWFsdGEudWEiLCJ6YXBvcml6aHpoZS51YSIsInphcG9yaXpoemhpYS51YSIsInpoaXRvbWlyLnVhIiwiemh5dG9teXIudWEiLCJ6cC51YSIsInp0LnVhIiwidWciLCJjby51ZyIsIm9yLnVnIiwiYWMudWciLCJzYy51ZyIs''@;'; put 'put ''ImdvLnVnIiwibmUudWciLCJjb20udWciLCJvcmcudWciLCJ1ayIsImFjLnVrIiwiY28udWsiLCJnb3YudWsiLCJsdGQudWsiLCJtZS51ayIsIm5ldC51ayIsIm5ocy51ayIsIm9yZy51ayIsInBsYy51ayIsInBvbGljZS51ayIsIiouc2NoLnVrIiwidXMiLCJkbmkudXMiLCJmZWQudXMiLCJp''@;'; put 'put ''c2EudXMiLCJraWRzLnVzIiwibnNuLnVzIiwiYWsudXMiLCJhbC51cyIsImFyLnVzIiwiYXMudXMiLCJhei51cyIsImNhLnVzIiwiY28udXMiLCJjdC51cyIsImRjLnVzIiwiZGUudXMiLCJmbC51cyIsImdhLnVzIiwiZ3UudXMiLCJoaS51cyIsImlhLnVzIiwiaWQudXMiLCJpbC51cyIsImlu''@;'; put 'put ''LnVzIiwia3MudXMiLCJreS51cyIsImxhLnVzIiwibWEudXMiLCJtZC51cyIsIm1lLnVzIiwibWkudXMiLCJtbi51cyIsIm1vLnVzIiwibXMudXMiLCJtdC51cyIsIm5jLnVzIiwibmQudXMiLCJuZS51cyIsIm5oLnVzIiwibmoudXMiLCJubS51cyIsIm52LnVzIiwibnkudXMiLCJvaC51cyIs''@;'; put 'put ''Im9rLnVzIiwib3IudXMiLCJwYS51cyIsInByLnVzIiwicmkudXMiLCJzYy51cyIsInNkLnVzIiwidG4udXMiLCJ0eC51cyIsInV0LnVzIiwidmkudXMiLCJ2dC51cyIsInZhLnVzIiwid2EudXMiLCJ3aS51cyIsInd2LnVzIiwid3kudXMiLCJrMTIuYWsudXMiLCJrMTIuYWwudXMiLCJrMTIu''@;'; put 'put ''YXIudXMiLCJrMTIuYXMudXMiLCJrMTIuYXoudXMiLCJrMTIuY2EudXMiLCJrMTIuY28udXMiLCJrMTIuY3QudXMiLCJrMTIuZGMudXMiLCJrMTIuZGUudXMiLCJrMTIuZmwudXMiLCJrMTIuZ2EudXMiLCJrMTIuZ3UudXMiLCJrMTIuaWEudXMiLCJrMTIuaWQudXMiLCJrMTIuaWwudXMiLCJr''@;'; put 'put ''MTIuaW4udXMiLCJrMTIua3MudXMiLCJrMTIua3kudXMiLCJrMTIubGEudXMiLCJrMTIubWEudXMiLCJrMTIubWQudXMiLCJrMTIubWUudXMiLCJrMTIubWkudXMiLCJrMTIubW4udXMiLCJrMTIubW8udXMiLCJrMTIubXMudXMiLCJrMTIubXQudXMiLCJrMTIubmMudXMiLCJrMTIubmUudXMi''@;'; put 'put ''LCJrMTIubmgudXMiLCJrMTIubmoudXMiLCJrMTIubm0udXMiLCJrMTIubnYudXMiLCJrMTIubnkudXMiLCJrMTIub2gudXMiLCJrMTIub2sudXMiLCJrMTIub3IudXMiLCJrMTIucGEudXMiLCJrMTIucHIudXMiLCJrMTIuc2MudXMiLCJrMTIudG4udXMiLCJrMTIudHgudXMiLCJrMTIudXQu''@;'; put 'put ''dXMiLCJrMTIudmkudXMiLCJrMTIudnQudXMiLCJrMTIudmEudXMiLCJrMTIud2EudXMiLCJrMTIud2kudXMiLCJrMTIud3kudXMiLCJjYy5hay51cyIsImNjLmFsLnVzIiwiY2MuYXIudXMiLCJjYy5hcy51cyIsImNjLmF6LnVzIiwiY2MuY2EudXMiLCJjYy5jby51cyIsImNjLmN0LnVzIiwi''@;'; put 'put ''Y2MuZGMudXMiLCJjYy5kZS51cyIsImNjLmZsLnVzIiwiY2MuZ2EudXMiLCJjYy5ndS51cyIsImNjLmhpLnVzIiwiY2MuaWEudXMiLCJjYy5pZC51cyIsImNjLmlsLnVzIiwiY2MuaW4udXMiLCJjYy5rcy51cyIsImNjLmt5LnVzIiwiY2MubGEudXMiLCJjYy5tYS51cyIsImNjLm1kLnVzIiwi''@;'; put 'put ''Y2MubWUudXMiLCJjYy5taS51cyIsImNjLm1uLnVzIiwiY2MubW8udXMiLCJjYy5tcy51cyIsImNjLm10LnVzIiwiY2MubmMudXMiLCJjYy5uZC51cyIsImNjLm5lLnVzIiwiY2MubmgudXMiLCJjYy5uai51cyIsImNjLm5tLnVzIiwiY2MubnYudXMiLCJjYy5ueS51cyIsImNjLm9oLnVzIiwi''@;'; put 'put ''Y2Mub2sudXMiLCJjYy5vci51cyIsImNjLnBhLnVzIiwiY2MucHIudXMiLCJjYy5yaS51cyIsImNjLnNjLnVzIiwiY2Muc2QudXMiLCJjYy50bi51cyIsImNjLnR4LnVzIiwiY2MudXQudXMiLCJjYy52aS51cyIsImNjLnZ0LnVzIiwiY2MudmEudXMiLCJjYy53YS51cyIsImNjLndpLnVzIiwi''@;'; put 'put ''Y2Mud3YudXMiLCJjYy53eS51cyIsImxpYi5hay51cyIsImxpYi5hbC51cyIsImxpYi5hci51cyIsImxpYi5hcy51cyIsImxpYi5hei51cyIsImxpYi5jYS51cyIsImxpYi5jby51cyIsImxpYi5jdC51cyIsImxpYi5kYy51cyIsImxpYi5mbC51cyIsImxpYi5nYS51cyIsImxpYi5ndS51cyIs''@;'; put 'put ''ImxpYi5oaS51cyIsImxpYi5pYS51cyIsImxpYi5pZC51cyIsImxpYi5pbC51cyIsImxpYi5pbi51cyIsImxpYi5rcy51cyIsImxpYi5reS51cyIsImxpYi5sYS51cyIsImxpYi5tYS51cyIsImxpYi5tZC51cyIsImxpYi5tZS51cyIsImxpYi5taS51cyIsImxpYi5tbi51cyIsImxpYi5tby51''@;'; put 'put ''cyIsImxpYi5tcy51cyIsImxpYi5tdC51cyIsImxpYi5uYy51cyIsImxpYi5uZC51cyIsImxpYi5uZS51cyIsImxpYi5uaC51cyIsImxpYi5uai51cyIsImxpYi5ubS51cyIsImxpYi5udi51cyIsImxpYi5ueS51cyIsImxpYi5vaC51cyIsImxpYi5vay51cyIsImxpYi5vci51cyIsImxpYi5w''@;'; put 'put ''YS51cyIsImxpYi5wci51cyIsImxpYi5yaS51cyIsImxpYi5zYy51cyIsImxpYi5zZC51cyIsImxpYi50bi51cyIsImxpYi50eC51cyIsImxpYi51dC51cyIsImxpYi52aS51cyIsImxpYi52dC51cyIsImxpYi52YS51cyIsImxpYi53YS51cyIsImxpYi53aS51cyIsImxpYi53eS51cyIsInB2''@;'; put 'put ''dC5rMTIubWEudXMiLCJjaHRyLmsxMi5tYS51cyIsInBhcm9jaC5rMTIubWEudXMiLCJhbm4tYXJib3IubWkudXMiLCJjb2cubWkudXMiLCJkc3QubWkudXMiLCJlYXRvbi5taS51cyIsImdlbi5taS51cyIsIm11cy5taS51cyIsInRlYy5taS51cyIsIndhc2h0ZW5hdy5taS51cyIsInV5Iiwi''@;'; put 'put ''Y29tLnV5IiwiZWR1LnV5IiwiZ3ViLnV5IiwibWlsLnV5IiwibmV0LnV5Iiwib3JnLnV5IiwidXoiLCJjby51eiIsImNvbS51eiIsIm5ldC51eiIsIm9yZy51eiIsInZhIiwidmMiLCJjb20udmMiLCJuZXQudmMiLCJvcmcudmMiLCJnb3YudmMiLCJtaWwudmMiLCJlZHUudmMiLCJ2ZSIsImFy''@;'; put 'put ''dHMudmUiLCJiaWIudmUiLCJjby52ZSIsImNvbS52ZSIsImUxMi52ZSIsImVkdS52ZSIsImZpcm0udmUiLCJnb2IudmUiLCJnb3YudmUiLCJpbmZvLnZlIiwiaW50LnZlIiwibWlsLnZlIiwibmV0LnZlIiwibm9tLnZlIiwib3JnLnZlIiwicmFyLnZlIiwicmVjLnZlIiwic3RvcmUudmUiLCJ0''@;'; put 'put ''ZWMudmUiLCJ3ZWIudmUiLCJ2ZyIsInZpIiwiY28udmkiLCJjb20udmkiLCJrMTIudmkiLCJuZXQudmkiLCJvcmcudmkiLCJ2biIsImNvbS52biIsIm5ldC52biIsIm9yZy52biIsImVkdS52biIsImdvdi52biIsImludC52biIsImFjLnZuIiwiYml6LnZuIiwiaW5mby52biIsIm5hbWUudm4i''@;'; put 'put ''LCJwcm8udm4iLCJoZWFsdGgudm4iLCJ2dSIsImNvbS52dSIsImVkdS52dSIsIm5ldC52dSIsIm9yZy52dSIsIndmIiwid3MiLCJjb20ud3MiLCJuZXQud3MiLCJvcmcud3MiLCJnb3Yud3MiLCJlZHUud3MiLCJ5dCIsIlx1MDYyN1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyN1x1MDYyYSIsIlx1''@;'; put 'put ''MDU3MFx1MDU2MVx1MDU3NSIsIlx1MDlhY1x1MDliZVx1MDk4Mlx1MDliMlx1MDliZSIsIlx1MDQzMVx1MDQzMyIsIlx1MDYyN1x1MDY0NFx1MDYyOFx1MDYyZFx1MDYzMVx1MDY0YVx1MDY0NiIsIlx1MDQzMVx1MDQzNVx1MDQzYiIsIlx1NGUyZFx1NTZmZCIsIlx1NGUyZFx1NTcwYiIsIlx1''@;'; put 'put ''MDYyN1x1MDY0NFx1MDYyY1x1MDYzMlx1MDYyN1x1MDYyNlx1MDYzMSIsIlx1MDY0NVx1MDYzNVx1MDYzMSIsIlx1MDQzNVx1MDQ0ZSIsIlx1MDNiNVx1MDNjNSIsIlx1MDY0NVx1MDY0OFx1MDYzMVx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyNyIsIlx1MTBkMlx1MTBkNCIs''@;'; put 'put ''Ilx1MDNiNVx1MDNiYiIsIlx1OTk5OVx1NmUyZiIsIlx1NTE2Y1x1NTNmOC5cdTk5OTlcdTZlMmYiLCJcdTY1NTlcdTgwYjIuXHU5OTk5XHU2ZTJmIiwiXHU2NTNmXHU1ZTljLlx1OTk5OVx1NmUyZiIsIlx1NTAwYlx1NGViYS5cdTk5OTlcdTZlMmYiLCJcdTdkYjJcdTdkNjEuXHU5OTk5XHU2''@;'; put 'put ''ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5OVx1NmUyZiIsIlx1MGNhZFx1MGNiZVx1MGNiMFx1MGNhNCIsIlx1MGIyZFx1MGIzZVx1MGIzMFx1MGIyNCIsIlx1MDlhZFx1MDliZVx1MDlmMFx1MDlhNCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNFx1MDkyZVx1MDk0ZCIsIlx1MDkyZFx1MDkz''@;'; put 'put ''ZVx1MDkzMFx1MDk0Ylx1MDkyNCIsIlx1MDY4MFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGQyZFx1MGQzZVx1MGQzMFx1MGQyNFx1MGQwMiIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNCIsIlx1MDYyOFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MDYyOFx1MDZiZVx1MDYyN1x1MDYzMVx1MDYy''@;'; put 'put ''YSIsIlx1MGMyZFx1MGMzZVx1MGMzMFx1MGMyNFx1MGM0ZCIsIlx1MGFhZFx1MGFiZVx1MGFiMFx1MGFhNCIsIlx1MGEyZFx1MGEzZVx1MGEzMFx1MGEyNCIsIlx1MDlhZFx1MDliZVx1MDliMFx1MDlhNCIsIlx1MGI4N1x1MGJhOFx1MGJjZFx1MGJhNFx1MGJiZlx1MGJhZlx1MGJiZSIsIlx1''@;'; put 'put ''MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYzMVx1MDYyN1x1MDY0MiIsIlx1MDYyN1x1MDY0NFx1MDYyN1x1MDYzMVx1MDYyZlx1MDY0NiIsIlx1ZDU1Y1x1YWQ2ZCIsIlx1MDQ5Ylx1MDQzMFx1MDQzNyIs''@;'; put 'put ''Ilx1MGVhNVx1MGViMlx1MGVhNyIsIlx1MGRiZFx1MGQ4Mlx1MGQ5YVx1MGRjZiIsIlx1MGI4N1x1MGJiMlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJjOCIsIlx1MDYyN1x1MDY0NFx1MDY0NVx1MDYzYVx1MDYzMVx1MDYyOCIsIlx1MDQzY1x1MDQzYVx1MDQzNCIsIlx1MDQzY1x1MDQzZVx1MDQz''@;'; put 'put ''ZCIsIlx1NmZiM1x1OTU4MCIsIlx1NmZiM1x1OTVlOCIsIlx1MDY0NVx1MDY0NFx1MDY0YVx1MDYzM1x1MDY0YVx1MDYyNyIsIlx1MDYzOVx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDZhOVx1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDY0M1x1''@;'; put 'put ''MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY0MVx1MDY0NFx1MDYzM1x1MDYzN1x1MDY0YVx1MDY0NiIsIlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNl''@;'; put 'put ''XHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDNcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDMwXHUwNDNhLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0MFx1MDQ0NCIsIlx1MDY0Mlx1''@;'; put 'put ''MDYzN1x1MDYzMSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDZjMyIs''@;'; put 'put ''Ilx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDY0NyIsIlx1MDYzM1x1MDY0OFx1MDYyZlx1MDYyN1x1MDY0NiIsIlx1NjViMFx1NTJhMFx1NTc2MSIsIlx1MGI5YVx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJhYVx1MGJjZFx1MGJhYVx1MGJjMlx1MGJi''@;'; put 'put ''MFx1MGJjZCIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyOSIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyNyIsIlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyOFx1MGUzNlx1MGUwMVx1MGUyOVx1MGUzMi5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMThcdTBlMzhcdTBl''@;'; put 'put ''MjNcdTBlMDFcdTBlMzRcdTBlMDguXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTIzXHUwZTMxXHUwZTEwXHUwZTFhXHUwZTMyXHUwZTI1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxN1x1MGUyYlx1MGUzMlx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlNDBcdTBlMTlcdTBlNDdc''@;'; put 'put ''dTBlMTUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTJkXHUwZTA3XHUwZTA0XHUwZTRjXHUwZTAxXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MDYyYVx1MDY0OFx1MDY0Nlx1MDYzMyIsIlx1NTNmMFx1NzA2MyIsIlx1NTNmMFx1NmU3ZSIsIlx1ODFmYVx1NzA2MyIsIlx1MDQ0M1x1''@;'; put 'put ''MDQzYVx1MDQ0MCIsIlx1MDYyN1x1MDY0NFx1MDY0YVx1MDY0NVx1MDY0NiIsInh4eCIsInllIiwiY29tLnllIiwiZWR1LnllIiwiZ292LnllIiwibmV0LnllIiwibWlsLnllIiwib3JnLnllIiwiYWMuemEiLCJhZ3JpYy56YSIsImFsdC56YSIsImNvLnphIiwiZWR1LnphIiwiZ292LnphIiwi''@;'; put 'put ''Z3JvbmRhci56YSIsImxhdy56YSIsIm1pbC56YSIsIm5ldC56YSIsIm5nby56YSIsIm5pYy56YSIsIm5pcy56YSIsIm5vbS56YSIsIm9yZy56YSIsInNjaG9vbC56YSIsInRtLnphIiwid2ViLnphIiwiem0iLCJhYy56bSIsImJpei56bSIsImNvLnptIiwiY29tLnptIiwiZWR1LnptIiwiZ292''@;'; put 'put ''LnptIiwiaW5mby56bSIsIm1pbC56bSIsIm5ldC56bSIsIm9yZy56bSIsInNjaC56bSIsInp3IiwiYWMuenciLCJjby56dyIsImdvdi56dyIsIm1pbC56dyIsIm9yZy56dyIsImFhYSIsImFhcnAiLCJhYmFydGgiLCJhYmIiLCJhYmJvdHQiLCJhYmJ2aWUiLCJhYmMiLCJhYmxlIiwiYWJvZ2Fk''@;'; put 'put ''byIsImFidWRoYWJpIiwiYWNhZGVteSIsImFjY2VudHVyZSIsImFjY291bnRhbnQiLCJhY2NvdW50YW50cyIsImFjbyIsImFjdG9yIiwiYWRhYyIsImFkcyIsImFkdWx0IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJpY2EiLCJhZ2FraGFuIiwiYWdlbmN5IiwiYWlnIiwiYWlyYnVzIiwiYWly''@;'; put 'put ''Zm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwiYWxmYXJvbWVvIiwiYWxpYmFiYSIsImFsaXBheSIsImFsbGZpbmFueiIsImFsbHN0YXRlIiwiYWxseSIsImFsc2FjZSIsImFsc3RvbSIsImFtYXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJpY2FuZmFtaWx5IiwiYW1leCIsImFtZmFtIiwiYW1p''@;'; put 'put ''Y2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRpY3MiLCJhbmRyb2lkIiwiYW5xdWFuIiwiYW56IiwiYW9sIiwiYXBhcnRtZW50cyIsImFwcCIsImFwcGxlIiwiYXF1YXJlbGxlIiwiYXJhYiIsImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIsImFydGUiLCJhc2RhIiwiYXNzb2NpYXRlcyIsImF0''@;'; put 'put ''aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rpb24iLCJhdWRpIiwiYXVkaWJsZSIsImF1ZGlvIiwiYXVzcG9zdCIsImF1dGhvciIsImF1dG8iLCJhdXRvcyIsImF2aWFuY2EiLCJhd3MiLCJheGEiLCJhenVyZSIsImJhYnkiLCJiYWlkdSIsImJhbmFtZXgiLCJiYW5hbmFyZXB1YmxpYyIsImJhbmQi''@;'; put 'put ''LCJiYW5rIiwiYmFyIiwiYmFyY2Vsb25hIiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFyZ2FpbnMiLCJiYXNlYmFsbCIsImJhc2tldGJhbGwiLCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwiYmJ0IiwiYmJ2YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5Iiwi''@;'; put 'put ''YmVlciIsImJlbnRsZXkiLCJiZXJsaW4iLCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwiYmlkIiwiYmlrZSIsImJpbmciLCJiaW5nbyIsImJpbyIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJibG9ja2J1c3RlciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwiYm1z''@;'; put 'put ''IiwiYm13IiwiYm5wcGFyaWJhcyIsImJvYXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9vIiwiYm9vayIsImJvb2tpbmciLCJib3NjaCIsImJvc3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRpcXVlIiwiYm94IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJyb2Fk''@;'; put 'put ''d2F5IiwiYnJva2VyIiwiYnJvdGhlciIsImJydXNzZWxzIiwiYnVnYXR0aSIsImJ1aWxkIiwiYnVpbGRlcnMiLCJidXNpbmVzcyIsImJ1eSIsImJ1enoiLCJiemgiLCJjYWIiLCJjYWZlIiwiY2FsIiwiY2FsbCIsImNhbHZpbmtsZWluIiwiY2FtIiwiY2FtZXJhIiwiY2FtcCIsImNhbmNlcnJl''@;'; put 'put ''c2VhcmNoIiwiY2Fub24iLCJjYXBldG93biIsImNhcGl0YWwiLCJjYXBpdGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRzIiwiY2FyZSIsImNhcmVlciIsImNhcmVlcnMiLCJjYXJzIiwiY2FzYSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJjYXRob2xpYyIsImNiYSIs''@;'; put 'put ''ImNibiIsImNicmUiLCJjYnMiLCJjZW50ZXIiLCJjZW8iLCJjZXJuIiwiY2ZhIiwiY2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIsImNoYXJpdHkiLCJjaGFzZSIsImNoYXQiLCJjaGVhcCIsImNoaW50YWkiLCJjaHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIsImNpcmNsZSIs''@;'; put 'put ''ImNpc2NvIiwiY2l0YWRlbCIsImNpdGkiLCJjaXRpYyIsImNpdHkiLCJjaXR5ZWF0cyIsImNsYWltcyIsImNsZWFuaW5nIiwiY2xpY2siLCJjbGluaWMiLCJjbGluaXF1ZSIsImNsb3RoaW5nIiwiY2xvdWQiLCJjbHViIiwiY2x1Ym1lZCIsImNvYWNoIiwiY29kZXMiLCJjb2ZmZWUiLCJjb2xs''@;'; put 'put ''ZWdlIiwiY29sb2duZSIsImNvbWNhc3QiLCJjb21tYmFuayIsImNvbW11bml0eSIsImNvbXBhbnkiLCJjb21wYXJlIiwiY29tcHV0ZXIiLCJjb21zZWMiLCJjb25kb3MiLCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0aW5nIiwiY29udGFjdCIsImNvbnRyYWN0b3JzIiwiY29va2luZyIsImNvb2tp''@;'; put 'put ''bmdjaGFubmVsIiwiY29vbCIsImNvcnNpY2EiLCJjb3VudHJ5IiwiY291cG9uIiwiY291cG9ucyIsImNvdXJzZXMiLCJjcGEiLCJjcmVkaXQiLCJjcmVkaXRjYXJkIiwiY3JlZGl0dW5pb24iLCJjcmlja2V0IiwiY3Jvd24iLCJjcnMiLCJjcnVpc2UiLCJjcnVpc2VzIiwiY3Vpc2luZWxsYSIs''@;'; put 'put ''ImN5bXJ1IiwiY3lvdSIsImRhYnVyIiwiZGFkIiwiZGFuY2UiLCJkYXRhIiwiZGF0ZSIsImRhdGluZyIsImRhdHN1biIsImRheSIsImRjbGsiLCJkZHMiLCJkZWFsIiwiZGVhbGVyIiwiZGVhbHMiLCJkZWdyZWUiLCJkZWxpdmVyeSIsImRlbGwiLCJkZWxvaXR0ZSIsImRlbHRhIiwiZGVtb2Ny''@;'; put 'put ''YXQiLCJkZW50YWwiLCJkZW50aXN0IiwiZGVzaSIsImRlc2lnbiIsImRldiIsImRobCIsImRpYW1vbmRzIiwiZGlldCIsImRpZ2l0YWwiLCJkaXJlY3QiLCJkaXJlY3RvcnkiLCJkaXNjb3VudCIsImRpc2NvdmVyIiwiZGlzaCIsImRpeSIsImRucCIsImRvY3MiLCJkb2N0b3IiLCJkb2ciLCJk''@;'; put 'put ''b21haW5zIiwiZG90IiwiZG93bmxvYWQiLCJkcml2ZSIsImR0diIsImR1YmFpIiwiZHVubG9wIiwiZHVwb250IiwiZHVyYmFuIiwiZHZhZyIsImR2ciIsImVhcnRoIiwiZWF0IiwiZWNvIiwiZWRla2EiLCJlZHVjYXRpb24iLCJlbWFpbCIsImVtZXJjayIsImVuZXJneSIsImVuZ2luZWVyIiwi''@;'; put 'put ''ZW5naW5lZXJpbmciLCJlbnRlcnByaXNlcyIsImVwc29uIiwiZXF1aXBtZW50IiwiZXJpY3Nzb24iLCJlcm5pIiwiZXNxIiwiZXN0YXRlIiwiZXRpc2FsYXQiLCJldXJvdmlzaW9uIiwiZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVzcyIsImV4dHJh''@;'; put 'put ''c3BhY2UiLCJmYWdlIiwiZmFpbCIsImZhaXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5IiwiZmFuIiwiZmFucyIsImZhcm0iLCJmYXJtZXJzIiwiZmFzaGlvbiIsImZhc3QiLCJmZWRleCIsImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWF0IiwiZmlkZWxpdHkiLCJmaWRvIiwiZmls''@;'; put 'put ''bSIsImZpbmFsIiwiZmluYW5jZSIsImZpbmFuY2lhbCIsImZpcmUiLCJmaXJlc3RvbmUiLCJmaXJtZGFsZSIsImZpc2giLCJmaXNoaW5nIiwiZml0IiwiZml0bmVzcyIsImZsaWNrciIsImZsaWdodHMiLCJmbGlyIiwiZmxvcmlzdCIsImZsb3dlcnMiLCJmbHkiLCJmb28iLCJmb29kIiwiZm9v''@;'; put 'put ''ZG5ldHdvcmsiLCJmb290YmFsbCIsImZvcmQiLCJmb3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJmb3giLCJmcmVlIiwiZnJlc2VuaXVzIiwiZnJsIiwiZnJvZ2FucyIsImZyb250ZG9vciIsImZyb250aWVyIiwiZnRyIiwiZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJu''@;'; put 'put ''aXR1cmUiLCJmdXRib2wiLCJmeWkiLCJnYWwiLCJnYWxsZXJ5IiwiZ2FsbG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJnYXAiLCJnYXJkZW4iLCJnYXkiLCJnYml6IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdlbnRpbmciLCJnZW9yZ2UiLCJnZ2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMi''@;'; put 'put ''LCJnaXZpbmciLCJnbGFzcyIsImdsZSIsImdsb2JhbCIsImdsb2JvIiwiZ21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29kYWRkeSIsImdvbGQiLCJnb2xkcG9pbnQiLCJnb2xmIiwiZ29vIiwiZ29vZHllYXIiLCJnb29nIiwiZ29vZ2xlIiwiZ29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFw''@;'; put 'put ''aGljcyIsImdyYXRpcyIsImdyZWVuIiwiZ3JpcGUiLCJncm9jZXJ5IiwiZ3JvdXAiLCJndWFyZGlhbiIsImd1Y2NpIiwiZ3VnZSIsImd1aWRlIiwiZ3VpdGFycyIsImd1cnUiLCJoYWlyIiwiaGFtYnVyZyIsImhhbmdvdXQiLCJoYXVzIiwiaGJvIiwiaGRmYyIsImhkZmNiYW5rIiwiaGVhbHRo''@;'; put 'put ''IiwiaGVhbHRoY2FyZSIsImhlbHAiLCJoZWxzaW5raSIsImhlcmUiLCJoZXJtZXMiLCJoZ3R2IiwiaGlwaG9wIiwiaGlzYW1pdHN1IiwiaGl0YWNoaSIsImhpdiIsImhrdCIsImhvY2tleSIsImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBvdCIsImhvbWVnb29kcyIsImhvbWVzIiwiaG9t''@;'; put 'put ''ZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIsImhvc3BpdGFsIiwiaG9zdCIsImhvc3RpbmciLCJob3QiLCJob3RlbGVzIiwiaG90ZWxzIiwiaG90bWFpbCIsImhvdXNlIiwiaG93IiwiaHNiYyIsImh1Z2hlcyIsImh5YXR0IiwiaHl1bmRhaSIsImlibSIsImljYmMiLCJpY2UiLCJpY3UiLCJpZWVl''@;'; put 'put ''IiwiaWZtIiwiaWthbm8iLCJpbWFtYXQiLCJpbWRiIiwiaW1tbyIsImltbW9iaWxpZW4iLCJpbmMiLCJpbmR1c3RyaWVzIiwiaW5maW5pdGkiLCJpbmciLCJpbmsiLCJpbnN0aXR1dGUiLCJpbnN1cmFuY2UiLCJpbnN1cmUiLCJpbnRlcm5hdGlvbmFsIiwiaW50dWl0IiwiaW52ZXN0bWVudHMi''@;'; put 'put ''LCJpcGlyYW5nYSIsImlyaXNoIiwiaXNtYWlsaSIsImlzdCIsImlzdGFuYnVsIiwiaXRhdSIsIml0diIsImphZ3VhciIsImphdmEiLCJqY2IiLCJqZWVwIiwiamV0enQiLCJqZXdlbHJ5IiwiamlvIiwiamxsIiwiam1wIiwiam5qIiwiam9idXJnIiwiam90Iiwiam95IiwianBtb3JnYW4iLCJq''@;'; put 'put ''cHJzIiwianVlZ29zIiwianVuaXBlciIsImthdWZlbiIsImtkZGkiLCJrZXJyeWhvdGVscyIsImtlcnJ5bG9naXN0aWNzIiwia2Vycnlwcm9wZXJ0aWVzIiwia2ZoIiwia2lhIiwia2lkcyIsImtpbSIsImtpbmRlciIsImtpbmRsZSIsImtpdGNoZW4iLCJraXdpIiwia29lbG4iLCJrb21hdHN1''@;'; put 'put ''Iiwia29zaGVyIiwia3BtZyIsImtwbiIsImtyZCIsImtyZWQiLCJrdW9rZ3JvdXAiLCJreW90byIsImxhY2FpeGEiLCJsYW1ib3JnaGluaSIsImxhbWVyIiwibGFuY2FzdGVyIiwibGFuY2lhIiwibGFuZCIsImxhbmRyb3ZlciIsImxhbnhlc3MiLCJsYXNhbGxlIiwibGF0IiwibGF0aW5vIiwi''@;'; put 'put ''bGF0cm9iZSIsImxhdyIsImxhd3llciIsImxkcyIsImxlYXNlIiwibGVjbGVyYyIsImxlZnJhayIsImxlZ2FsIiwibGVnbyIsImxleHVzIiwibGdidCIsImxpZGwiLCJsaWZlIiwibGlmZWluc3VyYW5jZSIsImxpZmVzdHlsZSIsImxpZ2h0aW5nIiwibGlrZSIsImxpbGx5IiwibGltaXRlZCIs''@;'; put 'put ''ImxpbW8iLCJsaW5jb2xuIiwibGluZGUiLCJsaW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9hbiIsImxvYW5zIiwibG9ja2VyIiwibG9jdXMiLCJsb2Z0IiwibG9sIiwibG9uZG9uIiwibG90dGUiLCJsb3R0byIsImxvdmUiLCJscGwiLCJscGxmaW5hbmNpYWwi''@;'; put 'put ''LCJsdGQiLCJsdGRhIiwibHVuZGJlY2siLCJsdXhlIiwibHV4dXJ5IiwibWFjeXMiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29uIiwibWFrZXVwIiwibWFuIiwibWFuYWdlbWVudCIsIm1hbmdvIiwibWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1hcnJpb3R0IiwibWFyc2hh''@;'; put 'put ''bGxzIiwibWFzZXJhdGkiLCJtYXR0ZWwiLCJtYmEiLCJtY2tpbnNleSIsIm1lZCIsIm1lZGlhIiwibWVldCIsIm1lbGJvdXJuZSIsIm1lbWUiLCJtZW1vcmlhbCIsIm1lbiIsIm1lbnUiLCJtZXJja21zZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJtaXQiLCJtaXRzdWJp''@;'; put 'put ''c2hpIiwibWxiIiwibWxzIiwibW1hIiwibW9iaWxlIiwibW9kYSIsIm1vZSIsIm1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5IiwibW9uc3RlciIsIm1vcm1vbiIsIm1vcnRnYWdlIiwibW9zY293IiwibW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2QiLCJtdG4iLCJtdHIi''@;'; put 'put ''LCJtdXNpYyIsIm11dHVhbCIsIm5hYiIsIm5hZ295YSIsIm5hdHVyYSIsIm5hdnkiLCJuYmEiLCJuZWMiLCJuZXRiYW5rIiwibmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVzdGFyIiwibmV3IiwibmV3cyIsIm5leHQiLCJuZXh0ZGlyZWN0IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNv''@;'; put 'put ''IiwibmlrZSIsIm5pa29uIiwibmluamEiLCJuaXNzYW4iLCJuaXNzYXkiLCJub2tpYSIsIm5vcnRod2VzdGVybm11dHVhbCIsIm5vcnRvbiIsIm5vdyIsIm5vd3J1eiIsIm5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwib2JzZXJ2ZXIiLCJvZmZpY2UiLCJva2luYXdhIiwi''@;'; put 'put ''b2xheWFuIiwib2xheWFuZ3JvdXAiLCJvbGRuYXZ5Iiwib2xsbyIsIm9tZWdhIiwib25lIiwib25nIiwib25sIiwib25saW5lIiwib29vIiwib3BlbiIsIm9yYWNsZSIsIm9yYW5nZSIsIm9yZ2FuaWMiLCJvcmlnaW5zIiwib3Nha2EiLCJvdHN1a2EiLCJvdHQiLCJvdmgiLCJwYWdlIiwicGFu''@;'; put 'put ''YXNvbmljIiwicGFyaXMiLCJwYXJzIiwicGFydG5lcnMiLCJwYXJ0cyIsInBhcnR5IiwicGFzc2FnZW5zIiwicGF5IiwicGNjdyIsInBldCIsInBmaXplciIsInBoYXJtYWN5IiwicGhkIiwicGhpbGlwcyIsInBob25lIiwicGhvdG8iLCJwaG90b2dyYXBoeSIsInBob3RvcyIsInBoeXNpbyIs''@;'; put 'put ''InBpY3MiLCJwaWN0ZXQiLCJwaWN0dXJlcyIsInBpZCIsInBpbiIsInBpbmciLCJwaW5rIiwicGlvbmVlciIsInBpenphIiwicGxhY2UiLCJwbGF5IiwicGxheXN0YXRpb24iLCJwbHVtYmluZyIsInBsdXMiLCJwbmMiLCJwb2hsIiwicG9rZXIiLCJwb2xpdGllIiwicG9ybiIsInByYW1lcmlj''@;'; put 'put ''YSIsInByYXhpIiwicHJlc3MiLCJwcmltZSIsInByb2QiLCJwcm9kdWN0aW9ucyIsInByb2YiLCJwcm9ncmVzc2l2ZSIsInByb21vIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicHJvdGVjdGlvbiIsInBydSIsInBydWRlbnRpYWwiLCJwdWIiLCJwd2MiLCJxcG9uIiwicXVlYmVjIiwicXVl''@;'; put 'put ''c3QiLCJyYWNpbmciLCJyYWRpbyIsInJlYWQiLCJyZWFsZXN0YXRlIiwicmVhbHRvciIsInJlYWx0eSIsInJlY2lwZXMiLCJyZWQiLCJyZWRzdG9uZSIsInJlZHVtYnJlbGxhIiwicmVoYWIiLCJyZWlzZSIsInJlaXNlbiIsInJlaXQiLCJyZWxpYW5jZSIsInJlbiIsInJlbnQiLCJyZW50YWxz''@;'; put 'put ''IiwicmVwYWlyIiwicmVwb3J0IiwicmVwdWJsaWNhbiIsInJlc3QiLCJyZXN0YXVyYW50IiwicmV2aWV3IiwicmV2aWV3cyIsInJleHJvdGgiLCJyaWNoIiwicmljaGFyZGxpIiwicmljb2giLCJyaWwiLCJyaW8iLCJyaXAiLCJyb2NoZXIiLCJyb2NrcyIsInJvZGVvIiwicm9nZXJzIiwicm9v''@;'; put 'put ''bSIsInJzdnAiLCJydWdieSIsInJ1aHIiLCJydW4iLCJyd2UiLCJyeXVreXUiLCJzYWFybGFuZCIsInNhZmUiLCJzYWZldHkiLCJzYWt1cmEiLCJzYWxlIiwic2Fsb24iLCJzYW1zY2x1YiIsInNhbXN1bmciLCJzYW5kdmlrIiwic2FuZHZpa2Nvcm9tYW50Iiwic2Fub2ZpIiwic2FwIiwic2Fy''@;'; put 'put ''bCIsInNhcyIsInNhdmUiLCJzYXhvIiwic2JpIiwic2JzIiwic2NhIiwic2NiIiwic2NoYWVmZmxlciIsInNjaG1pZHQiLCJzY2hvbGFyc2hpcHMiLCJzY2hvb2wiLCJzY2h1bGUiLCJzY2h3YXJ6Iiwic2NpZW5jZSIsInNjb3QiLCJzZWFyY2giLCJzZWF0Iiwic2VjdXJlIiwic2VjdXJpdHki''@;'; put 'put ''LCJzZWVrIiwic2VsZWN0Iiwic2VuZXIiLCJzZXJ2aWNlcyIsInNlcyIsInNldmVuIiwic2V3Iiwic2V4Iiwic2V4eSIsInNmciIsInNoYW5ncmlsYSIsInNoYXJwIiwic2hhdyIsInNoZWxsIiwic2hpYSIsInNoaWtzaGEiLCJzaG9lcyIsInNob3AiLCJzaG9wcGluZyIsInNob3VqaSIsInNo''@;'; put 'put ''b3ciLCJzaG93dGltZSIsInNpbGsiLCJzaW5hIiwic2luZ2xlcyIsInNpdGUiLCJza2kiLCJza2luIiwic2t5Iiwic2t5cGUiLCJzbGluZyIsInNtYXJ0Iiwic21pbGUiLCJzbmNmIiwic29jY2VyIiwic29jaWFsIiwic29mdGJhbmsiLCJzb2Z0d2FyZSIsInNvaHUiLCJzb2xhciIsInNvbHV0''@;'; put 'put ''aW9ucyIsInNvbmciLCJzb255Iiwic295Iiwic3BhIiwic3BhY2UiLCJzcG9ydCIsInNwb3QiLCJzcmwiLCJzdGFkYSIsInN0YXBsZXMiLCJzdGFyIiwic3RhdGViYW5rIiwic3RhdGVmYXJtIiwic3RjIiwic3RjZ3JvdXAiLCJzdG9ja2hvbG0iLCJzdG9yYWdlIiwic3RvcmUiLCJzdHJlYW0i''@;'; put 'put ''LCJzdHVkaW8iLCJzdHVkeSIsInN0eWxlIiwic3Vja3MiLCJzdXBwbGllcyIsInN1cHBseSIsInN1cHBvcnQiLCJzdXJmIiwic3VyZ2VyeSIsInN1enVraSIsInN3YXRjaCIsInN3aXNzIiwic3lkbmV5Iiwic3lzdGVtcyIsInRhYiIsInRhaXBlaSIsInRhbGsiLCJ0YW9iYW8iLCJ0YXJnZXQi''@;'; put 'put ''LCJ0YXRhbW90b3JzIiwidGF0YXIiLCJ0YXR0b28iLCJ0YXgiLCJ0YXhpIiwidGNpIiwidGRrIiwidGVhbSIsInRlY2giLCJ0ZWNobm9sb2d5IiwidGVtYXNlayIsInRlbm5pcyIsInRldmEiLCJ0aGQiLCJ0aGVhdGVyIiwidGhlYXRyZSIsInRpYWEiLCJ0aWNrZXRzIiwidGllbmRhIiwidGlm''@;'; put 'put ''ZmFueSIsInRpcHMiLCJ0aXJlcyIsInRpcm9sIiwidGptYXh4IiwidGp4IiwidGttYXh4IiwidG1hbGwiLCJ0b2RheSIsInRva3lvIiwidG9vbHMiLCJ0b3AiLCJ0b3JheSIsInRvc2hpYmEiLCJ0b3RhbCIsInRvdXJzIiwidG93biIsInRveW90YSIsInRveXMiLCJ0cmFkZSIsInRyYWRpbmci''@;'; put 'put ''LCJ0cmFpbmluZyIsInRyYXZlbCIsInRyYXZlbGNoYW5uZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxlcnNpbnN1cmFuY2UiLCJ0cnVzdCIsInRydiIsInR1YmUiLCJ0dWkiLCJ0dW5lcyIsInR1c2h1IiwidHZzIiwidWJhbmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5IiwidW5vIiwidW9s''@;'; put 'put ''IiwidXBzIiwidmFjYXRpb25zIiwidmFuYSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIsInZlcmlzaWduIiwidmVyc2ljaGVydW5nIiwidmV0IiwidmlhamVzIiwidmlkZW8iLCJ2aWciLCJ2aWtpbmciLCJ2aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2aXNhIiwidmlzaW9u''@;'; put 'put ''Iiwidml2YSIsInZpdm8iLCJ2bGFhbmRlcmVuIiwidm9ka2EiLCJ2b2xrc3dhZ2VuIiwidm9sdm8iLCJ2b3RlIiwidm90aW5nIiwidm90byIsInZveWFnZSIsInZ1ZWxvcyIsIndhbGVzIiwid2FsbWFydCIsIndhbHRlciIsIndhbmciLCJ3YW5nZ291Iiwid2F0Y2giLCJ3YXRjaGVzIiwid2Vh''@;'; put 'put ''dGhlciIsIndlYXRoZXJjaGFubmVsIiwid2ViY2FtIiwid2ViZXIiLCJ3ZWJzaXRlIiwid2VkZGluZyIsIndlaWJvIiwid2VpciIsIndob3N3aG8iLCJ3aWVuIiwid2lraSIsIndpbGxpYW1oaWxsIiwid2luIiwid2luZG93cyIsIndpbmUiLCJ3aW5uZXJzIiwid21lIiwid29sdGVyc2tsdXdl''@;'; put 'put ''ciIsIndvb2RzaWRlIiwid29yayIsIndvcmtzIiwid29ybGQiLCJ3b3ciLCJ3dGMiLCJ3dGYiLCJ4Ym94IiwieGVyb3giLCJ4ZmluaXR5IiwieGlodWFuIiwieGluIiwiXHUwOTE1XHUwOTQ5XHUwOTJlIiwiXHUzMGJiXHUzMGZjXHUzMGViIiwiXHU0ZjViXHU1YzcxIiwiXHU2MTQ4XHU1NTg0''@;'; put 'put ''IiwiXHU5NmM2XHU1NmUyIiwiXHU1NzI4XHU3ZWJmIiwiXHU3MGI5XHU3NzBiIiwiXHUwZTA0XHUwZTJkXHUwZTIxIiwiXHU1MTZiXHU1MzY2IiwiXHUwNjQ1XHUwNjQ4XHUwNjQyXHUwNjM5IiwiXHU1MTZjXHU3NmNhIiwiXHU1MTZjXHU1M2Y4IiwiXHU5OTk5XHU2ODNjXHU5MWNjXHU2MmM5''@;'; put 'put ''IiwiXHU3ZjUxXHU3YWQ5IiwiXHU3OWZiXHU1MmE4IiwiXHU2MjExXHU3MjMxXHU0ZjYwIiwiXHUwNDNjXHUwNDNlXHUwNDQxXHUwNDNhXHUwNDMyXHUwNDMwIiwiXHUwNDNhXHUwNDMwXHUwNDQyXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhIiwiXHUwNDNlXHUwNDNkXHUwNDNiXHUwNDMwXHUw''@;'; put 'put ''NDM5XHUwNDNkIiwiXHUwNDQxXHUwNDMwXHUwNDM5XHUwNDQyIiwiXHU4MDU0XHU5MDFhIiwiXHUwNWU3XHUwNWQ1XHUwNWRkIiwiXHU2NWY2XHU1YzFhIiwiXHU1ZmFlXHU1MzVhIiwiXHU2ZGUxXHU5YTZjXHU5NTIxIiwiXHUzMGQ1XHUzMGExXHUzMGMzXHUzMGI3XHUzMGU3XHUzMGYzIiwi''@;'; put 'put ''XHUwNDNlXHUwNDQwXHUwNDMzIiwiXHUwOTI4XHUwOTQ3XHUwOTFmIiwiXHUzMGI5XHUzMGM4XHUzMGEyIiwiXHUzMGEyXHUzMGRlXHUzMGJlXHUzMGYzIiwiXHVjMGJjXHVjMTMxIiwiXHU1NTQ2XHU2ODA3IiwiXHU1NTQ2XHU1ZTk3IiwiXHU1NTQ2XHU1N2NlIiwiXHUwNDM0XHUwNDM1XHUw''@;'; put 'put ''NDQyXHUwNDM4IiwiXHUzMGRkXHUzMGE0XHUzMGYzXHUzMGM4IiwiXHU2NWIwXHU5NWZiIiwiXHU1YmI2XHU5NmZiIiwiXHUwNjQzXHUwNjQ4XHUwNjQ1IiwiXHU0ZTJkXHU2NTg3XHU3ZjUxIiwiXHU0ZTJkXHU0ZmUxIiwiXHU1YTMxXHU0ZTUwIiwiXHU4YzM3XHU2YjRjIiwiXHU5NmZiXHU4''@;'; put 'put ''YTBhXHU3NmM4XHU3OWQxIiwiXHU4ZDJkXHU3MjY5IiwiXHUzMGFmXHUzMGU5XHUzMGE2XHUzMGM5IiwiXHU5MDFhXHU4Y2E5IiwiXHU3ZjUxXHU1ZTk3IiwiXHUwOTM4XHUwOTAyXHUwOTE3XHUwOTIwXHUwOTI4IiwiXHU5OTEwXHU1Mzg1IiwiXHU3ZjUxXHU3ZWRjIiwiXHUwNDNhXHUwNDNl''@;'; put 'put ''XHUwNDNjIiwiXHU0ZTlhXHU5YTZjXHU5MDBhIiwiXHU4YmZhXHU1N2ZhXHU0ZTlhIiwiXHU5OGRmXHU1NGMxIiwiXHU5OGRlXHU1MjI5XHU2ZDY2IiwiXHU2MjRiXHU2NzNhIiwiXHUwNjI3XHUwNjMxXHUwNjI3XHUwNjQ1XHUwNjQzXHUwNjQ4IiwiXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ0''@;'; put 'put ''XHUwNjRhXHUwNjI3XHUwNjQ2IiwiXHUwNjI3XHUwNjJhXHUwNjM1XHUwNjI3XHUwNjQ0XHUwNjI3XHUwNjJhIiwiXHUwNjI4XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjI3XHUwNjI4XHUwNjQ4XHUwNjM4XHUwNjI4XHUwNjRhIiwiXHUwNjQzXHUwNjI3XHUwNjJiXHUwNjQ4XHUw''@;'; put 'put ''NjQ0XHUwNjRhXHUwNjQzIiwiXHUwNjQ3XHUwNjQ1XHUwNjMxXHUwNjI3XHUwNjQ3IiwiXHViMmY3XHVjZWY0IiwiXHU2NTNmXHU1ZTljIiwiXHUwNjM0XHUwNjI4XHUwNjQzXHUwNjI5IiwiXHUwNjI4XHUwNjRhXHUwNjJhXHUwNjQzIiwiXHUwNjM5XHUwNjMxXHUwNjI4IiwiXHU2NzNhXHU2''@;'; put 'put ''Nzg0IiwiXHU3ZWM0XHU3ZWM3XHU2NzNhXHU2Nzg0IiwiXHU1MDY1XHU1ZWI3IiwiXHU2MmRiXHU4MDU4IiwiXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHU1OTI3XHU2MmZmIiwiXHUzMDdmXHUzMDkzXHUzMDZhIiwiXHUzMGIwXHUzMGZjXHUzMGIwXHUzMGViIiwiXHU0ZTE2XHU3NTRjIiwiXHU2''@;'; put 'put ''NmY4XHU3YzRkIiwiXHU3ZjUxXHU1NzQwIiwiXHViMmY3XHViMTM3IiwiXHUzMGIzXHUzMGUwIiwiXHU1OTI5XHU0ZTNiXHU2NTU5IiwiXHU2ZTM4XHU2MjBmIiwidmVybVx4ZjZnZW5zYmVyYXRlciIsInZlcm1ceGY2Z2Vuc2JlcmF0dW5nIiwiXHU0ZjAxXHU0ZTFhIiwiXHU0ZmUxXHU2MDZm''@;'; put 'put ''IiwiXHU1NjA5XHU5MWNjXHU1OTI3XHU5MTUyXHU1ZTk3IiwiXHU1NjA5XHU5MWNjIiwiXHU1ZTdmXHU0ZTFjIiwiXHU2NTNmXHU1MmExIiwieHl6IiwieWFjaHRzIiwieWFob28iLCJ5YW1heHVuIiwieWFuZGV4IiwieW9kb2Jhc2hpIiwieW9nYSIsInlva29oYW1hIiwieW91IiwieW91dHVi''@;'; put 'put ''ZSIsInl1biIsInphcHBvcyIsInphcmEiLCJ6ZXJvIiwiemlwIiwiem9uZSIsInp1ZXJpY2giLCJjYy51YSIsImluZi51YSIsImx0ZC51YSIsIjYxMS50byIsImdyYXBob3gudXMiLCIqLmRldmNkbmFjY2Vzc28uY29tIiwiYWRvYmVhZW1jbG91ZC5jb20iLCIqLmRldi5hZG9iZWFlbWNsb3Vk''@;'; put 'put ''LmNvbSIsImhseC5saXZlIiwiYWRvYmVhZW1jbG91ZC5uZXQiLCJobHgucGFnZSIsImhseDMucGFnZSIsImJlZXAucGwiLCJhaXJraXRhcHBzLmNvbSIsImFpcmtpdGFwcHMtYXUuY29tIiwiYWlya2l0YXBwcy5ldSIsImFpdmVuY2xvdWQuY29tIiwiYmFyc3kuY2EiLCIqLmNvbXB1dGUuZXN0''@;'; put 'put ''YXRlIiwiKi5hbGNlcy5uZXR3b3JrIiwia2Fzc2VydmVyLmNvbSIsImFsdGVydmlzdGEub3JnIiwiYWx3YXlzZGF0YS5uZXQiLCJjbG91ZGZyb250Lm5ldCIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tIiwiKi5jb21wdXRlLTEuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tLmNuIiwidXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJjbi1ub3J0aC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJjbi1ub3J0aHdlc3QtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwiZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIs''@;'; put 'put ''ImFwLW5vcnRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMi5l''@;'; put 'put ''bGFzdGljYmVhbnN0YWxrLmNvbSIsImNhLWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdl''@;'; put 'put ''c3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInNhLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1''@;'; put 'put ''cy13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5hbWF6b25hd3MuY29tIiwiKi5lbGIuYW1hem9uYXdzLmNvbS5jbiIsImF3c2dsb2JhbGFjY2VsZXJhdG9yLmNvbSIsInMzLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1u''@;'; put 'put ''b3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtY2Et''@;'; put 'put ''Y2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLWZpcHMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5l''@;'; put 'put ''dS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVh''@;'; put 'put ''bHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUt''@;'; put 'put ''dXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMi5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy13ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInQzbDNwMHJ0Lm5ldCIsInRlbGUuYW11bmUub3JnIiwiYXBpZ2VlLmlvIiwic2lpaXRlcy5jb20iLCJhcHBzcGFjZWhvc3RlZC5jb20iLCJhcHBzcGFjZXVz''@;'; put 'put ''ZXJjb250ZW50LmNvbSIsImFwcHVkby5uZXQiLCJvbi1hcHRpYmxlLmNvbSIsInVzZXIuYXNlaW5ldC5uZS5qcCIsImd2LnZjIiwiZC5ndi52YyIsInVzZXIucGFydHkuZXVzIiwicGltaWVudGEub3JnIiwicG9pdnJvbi5vcmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVyLm9yZyIsIm15''@;'; put 'put ''YXN1c3Rvci5jb20iLCJjZG4ucHJvZC5hdGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIsIm15ZnJpdHoubmV0Iiwib25hdnN0YWNrLm5ldCIsIiouYXdkZXYuY2EiLCIqLmFkdmlzb3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImItZGF0YS5pbyIsImJhY2twbGFuZWFwcC5p''@;'; put 'put ''byIsImJhbGVuYS1kZXZpY2VzLmNvbSIsInJzLmJhIiwiKi5iYW56YWkuY2xvdWQiLCJhcHAuYmFuemFpY2xvdWQuaW8iLCIqLmJhY2t5YXJkcy5iYW56YWljbG91ZC5pbyIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJmYXNoaW9uc3RvcmUuanAiLCJoYW5kY3JhZnRl''@;'; put 'put ''ZC5qcCIsImthd2FpaXNob3AuanAiLCJzdXBlcnNhbGUuanAiLCJ0aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJiYXNlLnNob3AiLCIqLmJlZ2V0LmFwcCIsImJldGFpbmFib3guY29tIiwiYm5yLmxhIiwiYml0YnVja2V0LmlvIiwiYmxhY2tiYXVkY2RuLm5ldCIsIm9mLmplIiwiYmx1''@;'; put 'put ''ZWJpdGUuaW8iLCJib29tbGEubmV0IiwiYm91dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3LmNoIiwiYnBsYWNlZC5jb20iLCJicGxhY2VkLmRlIiwic3F1YXJlNy5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5uZXQiLCJzaG9wLmJyZW5kbHkucnMiLCJicm93c2Vyc2FmZXR5bWFy''@;'; put 'put ''ay5pbyIsInVrMC5iaWd2LmlvIiwiZGguYnl0ZW1hcmsuY28udWsiLCJ2bS5ieXRlbWFyay5jby51ayIsImNhZmpzLmNvbSIsIm15Y2QuZXUiLCJkcnIuYWMiLCJ1d3UuYWkiLCJjYXJyZC5jbyIsImNyZC5jbyIsImp1Lm1wIiwiYWUub3JnIiwiYnIuY29tIiwiY24uY29tIiwiY29tLmRlIiwi''@;'; put 'put ''Y29tLnNlIiwiZGUuY29tIiwiZXUuY29tIiwiZ2IubmV0IiwiaHUubmV0IiwianAubmV0IiwianBuLmNvbSIsIm1leC5jb20iLCJydS5jb20iLCJzYS5jb20iLCJzZS5uZXQiLCJ1ay5jb20iLCJ1ay5uZXQiLCJ1cy5jb20iLCJ6YS5ieiIsInphLmNvbSIsImFyLmNvbSIsImh1LmNvbSIsImty''@;'; put 'put ''LmNvbSIsIm5vLmNvbSIsInFjLmNvbSIsInV5LmNvbSIsImFmcmljYS5jb20iLCJnci5jb20iLCJpbi5uZXQiLCJ3ZWIuaW4iLCJ1cy5vcmciLCJjby5jb20iLCJhdXMuYmFza2V0YmFsbCIsIm56LmJhc2tldGJhbGwiLCJyYWRpby5hbSIsInJhZGlvLmZtIiwiYy5sYSIsImNlcnRtZ3Iub3Jn''@;'; put 'put ''IiwiY3gudWEiLCJkaXNjb3Vyc2UuZ3JvdXAiLCJkaXNjb3Vyc2UudGVhbSIsImNsZXZlcmFwcHMuaW8iLCJjbGVyay5hcHAiLCJjbGVya3N0YWdlLmFwcCIsIioubGNsLmRldiIsIioubGNsc3RhZ2UuZGV2IiwiKi5zdGcuZGV2IiwiKi5zdGdzdGFnZS5kZXYiLCJjbGlja3Jpc2luZy5uZXQi''@;'; put 'put ''LCJjNjYubWUiLCJjbG91ZDY2LndzIiwiY2xvdWQ2Ni56b25lIiwiamRldmNsb3VkLmNvbSIsIndwZGV2Y2xvdWQuY29tIiwiY2xvdWRhY2Nlc3MuaG9zdCIsImZyZWVzaXRlLmhvc3QiLCJjbG91ZGFjY2Vzcy5uZXQiLCJjbG91ZGNvbnRyb2xsZWQuY29tIiwiY2xvdWRjb250cm9sYXBwLmNv''@;'; put 'put ''bSIsIiouY2xvdWRlcmEuc2l0ZSIsInBhZ2VzLmRldiIsInRyeWNsb3VkZmxhcmUuY29tIiwid29ya2Vycy5kZXYiLCJ3bmV4dC5hcHAiLCJjby5jYSIsIioub3RhcC5jbyIsImNvLmN6IiwiYy5jZG43Ny5vcmciLCJjZG43Ny1zc2wubmV0Iiwici5jZG43Ny5uZXQiLCJyc2MuY2RuNzcub3Jn''@;'; put 'put ''Iiwic3NsLm9yaWdpbi5jZG43Ny1zZWN1cmUub3JnIiwiY2xvdWRucy5hc2lhIiwiY2xvdWRucy5iaXoiLCJjbG91ZG5zLmNsdWIiLCJjbG91ZG5zLmNjIiwiY2xvdWRucy5ldSIsImNsb3VkbnMuaW4iLCJjbG91ZG5zLmluZm8iLCJjbG91ZG5zLm9yZyIsImNsb3VkbnMucHJvIiwiY2xvdWRu''@;'; put 'put ''cy5wdyIsImNsb3VkbnMudXMiLCJjbnB5LmdkbiIsImNvZGViZXJnLnBhZ2UiLCJjby5ubCIsImNvLm5vIiwid2ViaG9zdGluZy5iZSIsImhvc3RpbmctY2x1c3Rlci5ubCIsImFjLnJ1IiwiZWR1LnJ1IiwiZ292LnJ1IiwiaW50LnJ1IiwibWlsLnJ1IiwidGVzdC5ydSIsImR5bi5jb3NpZG5z''@;'; put 'put ''LmRlIiwiZHluYW1pc2NoZXMtZG5zLmRlIiwiZG5zdXBkYXRlci5kZSIsImludGVybmV0LWRucy5kZSIsImwtby1nLWktbi5kZSIsImR5bmFtaWMtZG5zLmluZm8iLCJmZXN0ZS1pcC5uZXQiLCJrbngtc2VydmVyLm5ldCIsInN0YXRpYy1hY2Nlc3MubmV0IiwicmVhbG0uY3oiLCIqLmNyeXB0''@;'; put 'put ''b25vbWljLm5ldCIsImN1cGNha2UuaXMiLCJjdXJ2LmRldiIsIiouY3VzdG9tZXItb2NpLmNvbSIsIioub2NpLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcC5jdXN0b21lci1vY2kuY29tIiwiKi5vY3MuY3VzdG9tZXItb2NpLmNvbSIsImN5b24ubGluayIsImN5b24uc2l0ZSIsImZud2suc2l0''@;'; put 'put ''ZSIsImZvbGlvbmV0d29yay5zaXRlIiwicGxhdGZvcm0wLmFwcCIsImRhcGxpZS5tZSIsImxvY2FsaG9zdC5kYXBsaWUubWUiLCJkYXR0b2xvY2FsLmNvbSIsImRhdHRvcmVsYXkuY29tIiwiZGF0dG93ZWIuY29tIiwibXlkYXR0by5jb20iLCJkYXR0b2xvY2FsLm5ldCIsIm15ZGF0dG8ubmV0''@;'; put 'put ''IiwiYml6LmRrIiwiY28uZGsiLCJmaXJtLmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFwcG5vZGUuaW8iLCIqLmRhcHBzLmVhcnRoIiwiKi5ienouZGFwcHMuZWFydGgiLCJidWlsdHdpdGhkYXJrLmNvbSIsImRlbW8uZGF0YWRldGVjdC5jb20iLCJpbnN0YW5jZS5kYXRhZGV0''@;'; put 'put ''ZWN0LmNvbSIsImVkZ2VzdGFjay5tZSIsImRkbnM1LmNvbSIsImRlYmlhbi5uZXQiLCJkZW5vLmRldiIsImRlbm8tc3RhZ2luZy5kZXYiLCJkZWR5bi5pbyIsImRldGEuYXBwIiwiZGV0YS5kZXYiLCIqLnJzcy5teS5pZCIsIiouZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwi''@;'; put 'put ''ZGlzY29yZHNlei5jb20iLCJqb3ppLmJpeiIsImRuc2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRkbnMuY29tIiwic2hvcGFyZW5hLnBsIiwiZHJlYW1ob3N0ZXJzLmNvbSIsIm15ZHJvYm8uY29tIiwiZHJ1ZC5pbyIsImRydWQudXMiLCJkdWNrZG5zLm9yZyIsImJpcC5z''@;'; put 'put ''aCIsImJpdGJyaWRnZS5uZXQiLCJkeS5maSIsInR1bmsub3JnIiwiZHluZG5zLWF0LWhvbWUuY29tIiwiZHluZG5zLWF0LXdvcmsuY29tIiwiZHluZG5zLWJsb2cuY29tIiwiZHluZG5zLWZyZWUuY29tIiwiZHluZG5zLWhvbWUuY29tIiwiZHluZG5zLWlwLmNvbSIsImR5bmRucy1tYWlsLmNv''@;'; put 'put ''bSIsImR5bmRucy1vZmZpY2UuY29tIiwiZHluZG5zLXBpY3MuY29tIiwiZHluZG5zLXJlbW90ZS5jb20iLCJkeW5kbnMtc2VydmVyLmNvbSIsImR5bmRucy13ZWIuY29tIiwiZHluZG5zLXdpa2kuY29tIiwiZHluZG5zLXdvcmsuY29tIiwiZHluZG5zLmJpeiIsImR5bmRucy5pbmZvIiwiZHlu''@;'; put 'put ''ZG5zLm9yZyIsImR5bmRucy50diIsImF0LWJhbmQtY2FtcC5uZXQiLCJhdGguY3giLCJiYXJyZWwtb2Yta25vd2xlZGdlLmluZm8iLCJiYXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvIiwiYmV0dGVyLXRoYW4udHYiLCJibG9nZG5zLmNvbSIsImJsb2dkbnMubmV0IiwiYmxvZ2Rucy5vcmciLCJi''@;'; put 'put ''bG9nc2l0ZS5vcmciLCJib2xkbHlnb2luZ25vd2hlcmUub3JnIiwiYnJva2UtaXQubmV0IiwiYnV5c2hvdXNlcy5uZXQiLCJjZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNvbSIsImRuc2FsaWFzLm5ldCIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8uY29tIiwiZG5zZG9qby5uZXQiLCJkbnNkb2pv''@;'; put 'put ''Lm9yZyIsImRvZXMtaXQubmV0IiwiZG9lc250ZXhpc3QuY29tIiwiZG9lc250ZXhpc3Qub3JnIiwiZG9udGV4aXN0LmNvbSIsImRvbnRleGlzdC5uZXQiLCJkb250ZXhpc3Qub3JnIiwiZG9vbWRucy5jb20iLCJkb29tZG5zLm9yZyIsImR2cmRucy5vcmciLCJkeW4tby1zYXVyLmNvbSIsImR5''@;'; put 'put ''bmFsaWFzLmNvbSIsImR5bmFsaWFzLm5ldCIsImR5bmFsaWFzLm9yZyIsImR5bmF0aG9tZS5uZXQiLCJkeW5kbnMud3MiLCJlbmRvZmludGVybmV0Lm5ldCIsImVuZG9maW50ZXJuZXQub3JnIiwiZW5kb2Z0aGVpbnRlcm5ldC5vcmciLCJlc3QtYS1sYS1tYWlzb24uY29tIiwiZXN0LWEtbGEt''@;'; put 'put ''bWFzaW9uLmNvbSIsImVzdC1sZS1wYXRyb24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20iLCJmb3ItYmV0dGVyLmJpeiIsImZvci1tb3JlLmJpeiIsImZvci1vdXIuaW5mbyIsImZvci1zb21lLmJpeiIsImZvci10aGUuYml6IiwiZm9yZ290Lmhlci5uYW1lIiwiZm9yZ290Lmhpcy5uYW1l''@;'; put 'put ''IiwiZnJvbS1hay5jb20iLCJmcm9tLWFsLmNvbSIsImZyb20tYXIuY29tIiwiZnJvbS1hei5uZXQiLCJmcm9tLWNhLmNvbSIsImZyb20tY28ubmV0IiwiZnJvbS1jdC5jb20iLCJmcm9tLWRjLmNvbSIsImZyb20tZGUuY29tIiwiZnJvbS1mbC5jb20iLCJmcm9tLWdhLmNvbSIsImZyb20taGku''@;'; put 'put ''Y29tIiwiZnJvbS1pYS5jb20iLCJmcm9tLWlkLmNvbSIsImZyb20taWwuY29tIiwiZnJvbS1pbi5jb20iLCJmcm9tLWtzLmNvbSIsImZyb20ta3kuY29tIiwiZnJvbS1sYS5uZXQiLCJmcm9tLW1hLmNvbSIsImZyb20tbWQuY29tIiwiZnJvbS1tZS5vcmciLCJmcm9tLW1pLmNvbSIsImZyb20t''@;'; put 'put ''bW4uY29tIiwiZnJvbS1tby5jb20iLCJmcm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1uYy5jb20iLCJmcm9tLW5kLmNvbSIsImZyb20tbmUuY29tIiwiZnJvbS1uaC5jb20iLCJmcm9tLW5qLmNvbSIsImZyb20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9tLW55Lm5ldCIsImZy''@;'; put 'put ''b20tb2guY29tIiwiZnJvbS1vay5jb20iLCJmcm9tLW9yLmNvbSIsImZyb20tcGEuY29tIiwiZnJvbS1wci5jb20iLCJmcm9tLXJpLmNvbSIsImZyb20tc2MuY29tIiwiZnJvbS1zZC5jb20iLCJmcm9tLXRuLmNvbSIsImZyb20tdHguY29tIiwiZnJvbS11dC5jb20iLCJmcm9tLXZhLmNvbSIs''@;'; put 'put ''ImZyb20tdnQuY29tIiwiZnJvbS13YS5jb20iLCJmcm9tLXdpLmNvbSIsImZyb20td3YuY29tIiwiZnJvbS13eS5jb20iLCJmdHBhY2Nlc3MuY2MiLCJmdWV0dGVydGRhc25ldHouZGUiLCJnYW1lLWhvc3Qub3JnIiwiZ2FtZS1zZXJ2ZXIuY2MiLCJnZXRteWlwLmNvbSIsImdldHMtaXQubmV0''@;'; put 'put ''IiwiZ28uZHluZG5zLm9yZyIsImdvdGRucy5jb20iLCJnb3RkbnMub3JnIiwiZ3Jva3MtdGhlLmluZm8iLCJncm9rcy10aGlzLmluZm8iLCJoYW0tcmFkaW8tb3AubmV0IiwiaGVyZS1mb3ItbW9yZS5pbmZvIiwiaG9iYnktc2l0ZS5jb20iLCJob2JieS1zaXRlLm9yZyIsImhvbWUuZHluZG5z''@;'; put 'put ''Lm9yZyIsImhvbWVkbnMub3JnIiwiaG9tZWZ0cC5uZXQiLCJob21lZnRwLm9yZyIsImhvbWVpcC5uZXQiLCJob21lbGludXguY29tIiwiaG9tZWxpbnV4Lm5ldCIsImhvbWVsaW51eC5vcmciLCJob21ldW5peC5jb20iLCJob21ldW5peC5uZXQiLCJob21ldW5peC5vcmciLCJpYW1hbGxhbWEu''@;'; put 'put ''Y29tIiwiaW4tdGhlLWJhbmQubmV0IiwiaXMtYS1hbmFyY2hpc3QuY29tIiwiaXMtYS1ibG9nZ2VyLmNvbSIsImlzLWEtYm9va2tlZXBlci5jb20iLCJpcy1hLWJydWluc2Zhbi5vcmciLCJpcy1hLWJ1bGxzLWZhbi5jb20iLCJpcy1hLWNhbmRpZGF0ZS5vcmciLCJpcy1hLWNhdGVyZXIuY29t''@;'; put 'put ''IiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIsImlzLWEtY2hlZi5jb20iLCJpcy1hLWNoZWYubmV0IiwiaXMtYS1jaGVmLm9yZyIsImlzLWEtY29uc2VydmF0aXZlLmNvbSIsImlzLWEtY3BhLmNvbSIsImlzLWEtY3ViaWNsZS1zbGF2ZS5jb20iLCJpcy1hLWRlbW9jcmF0LmNvbSIsImlzLWEtZGVz''@;'; put 'put ''aWduZXIuY29tIiwiaXMtYS1kb2N0b3IuY29tIiwiaXMtYS1maW5hbmNpYWxhZHZpc29yLmNvbSIsImlzLWEtZ2Vlay5jb20iLCJpcy1hLWdlZWsubmV0IiwiaXMtYS1nZWVrLm9yZyIsImlzLWEtZ3JlZW4uY29tIiwiaXMtYS1ndXJ1LmNvbSIsImlzLWEtaGFyZC13b3JrZXIuY29tIiwiaXMt''@;'; put 'put ''YS1odW50ZXIuY29tIiwiaXMtYS1rbmlnaHQub3JnIiwiaXMtYS1sYW5kc2NhcGVyLmNvbSIsImlzLWEtbGF3eWVyLmNvbSIsImlzLWEtbGliZXJhbC5jb20iLCJpcy1hLWxpYmVydGFyaWFuLmNvbSIsImlzLWEtbGludXgtdXNlci5vcmciLCJpcy1hLWxsYW1hLmNvbSIsImlzLWEtbXVzaWNp''@;'; put 'put ''YW4uY29tIiwiaXMtYS1uYXNjYXJmYW4uY29tIiwiaXMtYS1udXJzZS5jb20iLCJpcy1hLXBhaW50ZXIuY29tIiwiaXMtYS1wYXRzZmFuLm9yZyIsImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbSIsImlzLWEtcGhvdG9ncmFwaGVyLmNvbSIsImlzLWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJs''@;'; put 'put ''aWNhbi5jb20iLCJpcy1hLXJvY2tzdGFyLmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIsImlzLWEtc294ZmFuLm9yZyIsImlzLWEtc3R1ZGVudC5jb20iLCJpcy1hLXRlYWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBpc3QuY29tIiwiaXMtYW4tYWNjb3VudGFudC5j''@;'; put 'put ''b20iLCJpcy1hbi1hY3Rvci5jb20iLCJpcy1hbi1hY3RyZXNzLmNvbSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1hbi1hcnRpc3QuY29tIiwiaXMtYW4tZW5naW5lZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtYnkudXMiLCJpcy1jZXJ0aWZpZWQuY29tIiwiaXMtZm91''@;'; put 'put ''bmQub3JnIiwiaXMtZ29uZS5jb20iLCJpcy1pbnRvLWFuaW1lLmNvbSIsImlzLWludG8tY2Fycy5jb20iLCJpcy1pbnRvLWNhcnRvb25zLmNvbSIsImlzLWludG8tZ2FtZXMuY29tIiwiaXMtbGVldC5jb20iLCJpcy1sb3N0Lm9yZyIsImlzLW5vdC1jZXJ0aWZpZWQuY29tIiwiaXMtc2F2ZWQu''@;'; put 'put ''b3JnIiwiaXMtc2xpY2suY29tIiwiaXMtdWJlcmxlZXQuY29tIiwiaXMtdmVyeS1iYWQub3JnIiwiaXMtdmVyeS1ldmlsLm9yZyIsImlzLXZlcnktZ29vZC5vcmciLCJpcy12ZXJ5LW5pY2Uub3JnIiwiaXMtdmVyeS1zd2VldC5vcmciLCJpcy13aXRoLXRoZWJhbmQuY29tIiwiaXNhLWdlZWsu''@;'; put 'put ''Y29tIiwiaXNhLWdlZWsubmV0IiwiaXNhLWdlZWsub3JnIiwiaXNhLWhvY2tleW51dC5jb20iLCJpc3NtYXJ0ZXJ0aGFueW91LmNvbSIsImlzdGVpbmdlZWsuZGUiLCJpc3RtZWluLmRlIiwia2lja3MtYXNzLm5ldCIsImtpY2tzLWFzcy5vcmciLCJrbm93c2l0YWxsLmluZm8iLCJsYW5kLTQt''@;'; put 'put ''c2FsZS51cyIsImxlYnRpbW5ldHouZGUiLCJsZWl0dW5nc2VuLmRlIiwibGlrZXMtcGllLmNvbSIsImxpa2VzY2FuZHkuY29tIiwibWVyc2VpbmUubnUiLCJtaW5lLm51IiwibWlzY29uZnVzZWQub3JnIiwibXlwZXRzLndzIiwibXlwaG90b3MuY2MiLCJuZWF0LXVybC5jb20iLCJvZmZpY2Ut''@;'; put 'put ''b24tdGhlLm5ldCIsIm9uLXRoZS13ZWIudHYiLCJwb2R6b25lLm5ldCIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmciLCJzYXZlcy10aGUtd2hhbGVzLmNvbSIsInNjcmFwcGVyLXNpdGUubmV0Iiwic2NyYXBwaW5nLmNjIiwic2VsZmlwLmJpeiIsInNlbGZpcC5jb20iLCJzZWxmaXAu''@;'; put 'put ''aW5mbyIsInNlbGZpcC5uZXQiLCJzZWxmaXAub3JnIiwic2VsbHMtZm9yLWxlc3MuY29tIiwic2VsbHMtZm9yLXUuY29tIiwic2VsbHMtaXQubmV0Iiwic2VsbHN5b3VyaG9tZS5vcmciLCJzZXJ2ZWJicy5jb20iLCJzZXJ2ZWJicy5uZXQiLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5uZXQi''@;'; put 'put ''LCJzZXJ2ZWZ0cC5vcmciLCJzZXJ2ZWdhbWUub3JnIiwic2hhY2tuZXQubnUiLCJzaW1wbGUtdXJsLmNvbSIsInNwYWNlLXRvLXJlbnQuY29tIiwic3R1ZmYtNC1zYWxlLm9yZyIsInN0dWZmLTQtc2FsZS51cyIsInRlYWNoZXMteW9nYS5jb20iLCJ0aHJ1aGVyZS5uZXQiLCJ0cmFldW10Z2Vy''@;'; put 'put ''YWRlLmRlIiwid2ViaG9wLmJpeiIsIndlYmhvcC5pbmZvIiwid2ViaG9wLm5ldCIsIndlYmhvcC5vcmciLCJ3b3JzZS10aGFuLnR2Iiwid3JpdGVzdGhpc2Jsb2cuY29tIiwiZGRuc3MuZGUiLCJkeW4uZGRuc3MuZGUiLCJkeW5kbnMuZGRuc3MuZGUiLCJkeW5kbnMxLmRlIiwiZHluLWlwMjQu''@;'; put 'put ''ZGUiLCJob21lLXdlYnNlcnZlci5kZSIsImR5bi5ob21lLXdlYnNlcnZlci5kZSIsIm15aG9tZS1zZXJ2ZXIuZGUiLCJkZG5zcy5vcmciLCJkZWZpbmltYS5uZXQiLCJkZWZpbmltYS5pbyIsIm9uZGlnaXRhbG9jZWFuLmFwcCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIsImJjaS5kbnN0''@;'; put 'put ''cmFjZS5wcm8iLCJkZG5zZnJlZS5jb20iLCJkZG5zZ2Vlay5jb20iLCJnaWl6ZS5jb20iLCJnbGVlemUuY29tIiwia296b3cuY29tIiwibG9zZXlvdXJpcC5jb20iLCJvb2d1eS5jb20iLCJ0aGV3b3JrcGMuY29tIiwiY2FzYWNhbS5uZXQiLCJkeW51Lm5ldCIsImFjY2Vzc2NhbS5vcmciLCJj''@;'; put 'put ''YW1kdnIub3JnIiwiZnJlZWRkbnMub3JnIiwibXl3aXJlLm9yZyIsIndlYnJlZGlyZWN0Lm9yZyIsIm15ZGRucy5yb2NrcyIsImJsb2dzaXRlLnh5eiIsImR5bnY2Lm5ldCIsImU0LmN6IiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0YWdlLm9ubGluZSIsImVsZW1lbnRvci5jbG91ZCIsImVsZW1l''@;'; put 'put ''bnRvci5jb29sIiwiZW4tcm9vdC5mciIsIm15dHVsZWFwLmNvbSIsInR1bGVhcC1wYXJ0bmVycy5jb20iLCJlbmNyLmFwcCIsImVuY29yZWFwaS5jb20iLCJvbnJlZC5vbmUiLCJzdGFnaW5nLm9ucmVkLm9uZSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5vcmciLCJhbC5ldS5vcmciLCJhc3Nv''@;'; put 'put ''LmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJnLmV1Lm9yZyIsImNhLmV1Lm9yZyIsImNkLmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNuLmV1Lm9yZyIsImN5LmV1Lm9yZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRrLmV1Lm9yZyIsImVkdS5ldS5vcmci''@;'; put 'put ''LCJlZS5ldS5vcmciLCJlcy5ldS5vcmciLCJmaS5ldS5vcmciLCJmci5ldS5vcmciLCJnci5ldS5vcmciLCJoci5ldS5vcmciLCJodS5ldS5vcmciLCJpZS5ldS5vcmciLCJpbC5ldS5vcmciLCJpbi5ldS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3JnIiwiaXQuZXUub3JnIiwianAuZXUu''@;'; put 'put ''b3JnIiwia3IuZXUub3JnIiwibHQuZXUub3JnIiwibHUuZXUub3JnIiwibHYuZXUub3JnIiwibWMuZXUub3JnIiwibWUuZXUub3JnIiwibWsuZXUub3JnIiwibXQuZXUub3JnIiwibXkuZXUub3JnIiwibmV0LmV1Lm9yZyIsIm5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1Lm9yZyIsIm56''@;'; put 'put ''LmV1Lm9yZyIsInBhcmlzLmV1Lm9yZyIsInBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInEtYS5ldS5vcmciLCJyby5ldS5vcmciLCJydS5ldS5vcmciLCJzZS5ldS5vcmciLCJzaS5ldS5vcmciLCJzay5ldS5vcmciLCJ0ci5ldS5vcmciLCJ1ay5ldS5vcmciLCJ1cy5ldS5vcmciLCJldXJvZGly''@;'; put 'put ''LnJ1IiwiZXUtMS5ldmVubm9kZS5jb20iLCJldS0yLmV2ZW5ub2RlLmNvbSIsImV1LTMuZXZlbm5vZGUuY29tIiwiZXUtNC5ldmVubm9kZS5jb20iLCJ1cy0xLmV2ZW5ub2RlLmNvbSIsInVzLTIuZXZlbm5vZGUuY29tIiwidXMtMy5ldmVubm9kZS5jb20iLCJ1cy00LmV2ZW5ub2RlLmNvbSIs''@;'; put 'put ''InR3bWFpbC5jYyIsInR3bWFpbC5uZXQiLCJ0d21haWwub3JnIiwibXltYWlsZXIuY29tLnR3IiwidXJsLnR3Iiwib25mYWJyaWNhLmNvbSIsImFwcHMuZmJzYnguY29tIiwicnUubmV0IiwiYWR5Z2V5YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIsImNvbS5ydSIsImRh''@;'; put 'put ''Z2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwia2FsbXlraWEucnUiLCJrdXN0YW5haS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlhLnJ1IiwibXNrLnJ1IiwibXl0aXMucnUiLCJuYWxjaGlrLnJ1Iiwibm92LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2a2F6LnJ1Iiwidmxh''@;'; put 'put ''ZGltaXIucnUiLCJhYmtoYXppYS5zdSIsImFkeWdleWEuc3UiLCJha3R5dWJpbnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJhcm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3UiLCJhemVyYmFpamFuLnN1IiwiYmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1IiwiYnVraGFyYS5z''@;'; put 'put ''dSIsImNoaW1rZW50LnN1IiwiZGFnZXN0YW4uc3UiLCJlYXN0LWthemFraHN0YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEuc3UiLCJncm96bnkuc3UiLCJpdmFub3ZvLnN1IiwiamFtYnlsLnN1Iiwia2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwia2FyYWdhbmRhLnN1''@;'; put 'put ''Iiwia2FyZWxpYS5zdSIsImtoYWthc3NpYS5zdSIsImtyYXNub2Rhci5zdSIsImt1cmdhbi5zdSIsImt1c3RhbmFpLnN1IiwibGVudWcuc3UiLCJtYW5neXNobGFrLnN1IiwibW9yZG92aWEuc3UiLCJtc2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZvaS5zdSIsIm5vcnRo''@;'; put 'put ''LWthemFraHN0YW4uc3UiLCJub3Yuc3UiLCJvYm5pbnNrLnN1IiwicGVuemEuc3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1Iiwic3BiLnN1IiwidGFzaGtlbnQuc3UiLCJ0ZXJtZXouc3UiLCJ0b2dsaWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3UiLCJ0dWxhLnN1Iiwi''@;'; put 'put ''dHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1IiwidmxhZGltaXIuc3UiLCJ2b2xvZ2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0IiwidS5jaGFubmVsc2R2ci5uZXQiLCJlZGdlY29tcHV0ZS5hcHAiLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZhc3RseWxiLm5ldCIsIm1hcC5mYXN0bHlsYi5uZXQi''@;'; put 'put ''LCJmcmVldGxzLmZhc3RseS5uZXQiLCJtYXAuZmFzdGx5Lm5ldCIsImEucHJvZC5mYXN0bHkubmV0IiwiZ2xvYmFsLnByb2QuZmFzdGx5Lm5ldCIsImEuc3NsLmZhc3RseS5uZXQiLCJiLnNzbC5mYXN0bHkubmV0IiwiZ2xvYmFsLnNzbC5mYXN0bHkubmV0IiwiZmFzdHZwcy1zZXJ2ZXIuY29t''@;'; put 'put ''IiwiZmFzdHZwcy5ob3N0IiwibXlmYXN0Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJmZWRvcmFpbmZyYWNsb3VkLm9yZyIsImZlZG9yYXBlb3BsZS5vcmciLCJjbG91ZC5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5z''@;'; put 'put ''dGcuZmVkb3JhcHJvamVjdC5vcmciLCJjb25uLnVrIiwiY29wcm8udWsiLCJob3NwLnVrIiwibXlkb2Jpc3MuY29tIiwiZmgtbXVlbnN0ZXIuaW8iLCJmaWxlZ2Vhci5tZSIsImZpbGVnZWFyLWF1Lm1lIiwiZmlsZWdlYXItZGUubWUiLCJmaWxlZ2Vhci1nYi5tZSIsImZpbGVnZWFyLWllLm1l''@;'; put 'put ''IiwiZmlsZWdlYXItanAubWUiLCJmaWxlZ2Vhci1zZy5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZpcmV3ZWIuYXBwIiwiZmxhcC5pZCIsIm9uZmxhc2hkcml2ZS5hcHAiLCJmbGRydi5jb20iLCJmbHkuZGV2IiwiZWRnZWFwcC5uZXQiLCJzaHcuaW8iLCJmbHlubmhvc3RpbmcubmV0IiwiZm9y''@;'; put 'put ''Z2VibG9ja3MuY29tIiwiaWQuZm9yZ2Vyb2NrLmlvIiwiZnJhbWVyLmFwcCIsImZyYW1lcmNhbnZhcy5jb20iLCIqLmZydXNreS5kZSIsInJhdnBhZ2UuY28uaWwiLCIwZS52YyIsImZyZWVib3gtb3MuY29tIiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJv''@;'; put 'put ''eC1vcy5mciIsImZyZWVib3hvcy5mciIsImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIndpZW4uZnVua2ZldWVyLmF0IiwiKi5mdXR1cmVjbXMuYXQiLCIqLmV4LmZ1dHVyZWNtcy5hdCIsIiouaW4uZnV0dXJlY21zLmF0IiwiZnV0dXJlaG9zdGluZy5hdCIsImZ1dHVyZW1haWxp''@;'; put 'put ''bmcuYXQiLCIqLmV4Lm9ydHNpbmZvLmF0IiwiKi5rdW5kZW4ub3J0c2luZm8uYXQiLCIqLnN0YXRpY3MuY2xvdWQiLCJpbmRlcGVuZGVudC1jb21taXNzaW9uLnVrIiwiaW5kZXBlbmRlbnQtaW5xdWVzdC51ayIsImluZGVwZW5kZW50LWlucXVpcnkudWsiLCJpbmRlcGVuZGVudC1wYW5lbC51''@;'; put 'put ''ayIsImluZGVwZW5kZW50LXJldmlldy51ayIsInB1YmxpYy1pbnF1aXJ5LnVrIiwicm95YWwtY29tbWlzc2lvbi51ayIsImNhbXBhaWduLmdvdi51ayIsInNlcnZpY2UuZ292LnVrIiwiYXBpLmdvdi51ayIsImdlaGlybi5uZS5qcCIsInVzZXJjb250ZW50LmpwIiwiZ2VudGFwcHMuY29tIiwi''@;'; put 'put ''Z2VudGxlbnRhcGlzLmNvbSIsImxhYi5tcyIsImNkbi1lZGdlcy5uZXQiLCJnaG9zdC5pbyIsImdzai5ieiIsImdpdGh1YnVzZXJjb250ZW50LmNvbSIsImdpdGh1YnByZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwiZ2l0bGFiLmlvIiwiZ2l0YXBwLnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5t''@;'; put 'put ''ZSIsIm5vZy5jb21tdW5pdHkiLCJjby5ybyIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwiYW5ncnkuanAiLCJiYWJ5Ymx1ZS5qcCIsImJhYnltaWxrLmpwIiwiYmFja2Ryb3AuanAiLCJiYW1iaW5hLmpwIiwiYml0dGVyLmpwIiwiYmx1c2guanAiLCJib28uanAiLCJib3kuanAiLCJib3lmcmll''@;'; put 'put ''bmQuanAiLCJidXQuanAiLCJjYW5keXBvcC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5qcCIsImNoZWFwLmpwIiwiY2hpY2FwcGEuanAiLCJjaGlsbG91dC5qcCIsImNoaXBzLmpwIiwiY2hvd2Rlci5qcCIsImNodS5qcCIsImNpYW8uanAiLCJjb2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJj''@;'; put 'put ''cmFua3kuanAiLCJjdXRlZ2lybC5qcCIsImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpwIiwiZGlnaWNrLmpwIiwiZWdvaXNtLmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5qcCIsImZsaWVyLmpwIiwiZmxvcHB5LmpwIiwiZm9vbC5qcCIsImZyZW5jaGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwi''@;'; put 'put ''Z2lybHkuanAiLCJnbG9vbXkuanAiLCJnb25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNjYS5qcCIsImhlYXZ5LmpwIiwiaGVyLmpwIiwiaGloby5qcCIsImhpcHB5LmpwIiwiaG9seS5qcCIsImh1bmdyeS5qcCIsImljdXJ1cy5qcCIsIml0aWdvLmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJh''@;'; put 'put ''cmEuanAiLCJraWxsLmpwIiwia2lsby5qcCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5qcCIsImxvbGlwb3BtYy5qcCIsImxvbGl0YXB1bmsuanAiLCJsb21vLmpwIiwibG92ZXBvcC5qcCIsImxvdmVzaWNrLmpwIiwibWFpbi5qcCIsIm1vZHMuanAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpw''@;'; put 'put ''IiwibW9vLmpwIiwibmFtYXN0ZS5qcCIsIm5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJub29yLmpwIiwib29wcy5qcCIsInBhcmFsbGVsLmpwIiwicGFyYXNpdGUuanAiLCJwZWNvcmkuanAiLCJwZWV3ZWUuanAiLCJwZW5uZS5qcCIsInBlcHBlci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5q''@;'; put 'put ''cCIsInBpbm9rby5qcCIsInB1bnl1LmpwIiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwicHlhLmpwIiwicmFpbmRyb3AuanAiLCJyZWFkeW1hZGUuanAiLCJzYWRpc3QuanAiLCJzY2hvb2xidXMuanAiLCJzZWNyZXQuanAiLCJzdGFiYS5qcCIsInN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3Vu''@;'; put 'put ''bnlkYXkuanAiLCJ0aGljay5qcCIsInRvbmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBlci5qcCIsInZlbHZldC5qcCIsInZlcnNlLmpwIiwidmVyc3VzLmpwIiwidml2aWFuLmpwIiwid2F0c29uLmpwIiwid2VibGlrZS5qcCIsIndoaXRlc25vdy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5u''@;'; put 'put ''ZXQiLCJjbG91ZGFwcHMuZGlnaXRhbCIsImxvbmRvbi5jbG91ZGFwcHMuZGlnaXRhbCIsInB5bW50LnVrIiwiaG9tZW9mZmljZS5nb3YudWsiLCJyby5pbSIsImdvaXAuZGUiLCJydW4uYXBwIiwiYS5ydW4uYXBwIiwid2ViLmFwcCIsIiouMGVtbS5jb20iLCJhcHBzcG90LmNvbSIsIiouci5h''@;'; put 'put ''cHBzcG90LmNvbSIsImNvZGVzcG90LmNvbSIsImdvb2dsZWFwaXMuY29tIiwiZ29vZ2xlY29kZS5jb20iLCJwYWdlc3BlZWRtb2JpbGl6ZXIuY29tIiwicHVibGlzaHByb3h5LmNvbSIsIndpdGhnb29nbGUuY29tIiwid2l0aHlvdXR1YmUuY29tIiwiKi5nYXRld2F5LmRldiIsImNsb3VkLmdv''@;'; put 'put ''b2ciLCJ0cmFuc2xhdGUuZ29vZyIsIioudXNlcmNvbnRlbnQuZ29vZyIsImNsb3VkZnVuY3Rpb25zLm5ldCIsImJsb2dzcG90LmFlIiwiYmxvZ3Nwb3QuYWwiLCJibG9nc3BvdC5hbSIsImJsb2dzcG90LmJhIiwiYmxvZ3Nwb3QuYmUiLCJibG9nc3BvdC5iZyIsImJsb2dzcG90LmJqIiwiYmxv''@;'; put 'put ''Z3Nwb3QuY2EiLCJibG9nc3BvdC5jZiIsImJsb2dzcG90LmNoIiwiYmxvZ3Nwb3QuY2wiLCJibG9nc3BvdC5jby5hdCIsImJsb2dzcG90LmNvLmlkIiwiYmxvZ3Nwb3QuY28uaWwiLCJibG9nc3BvdC5jby5rZSIsImJsb2dzcG90LmNvLm56IiwiYmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5j''@;'; put 'put ''by56YSIsImJsb2dzcG90LmNvbSIsImJsb2dzcG90LmNvbS5hciIsImJsb2dzcG90LmNvbS5hdSIsImJsb2dzcG90LmNvbS5iciIsImJsb2dzcG90LmNvbS5ieSIsImJsb2dzcG90LmNvbS5jbyIsImJsb2dzcG90LmNvbS5jeSIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90LmNvbS5lZyIs''@;'; put 'put ''ImJsb2dzcG90LmNvbS5lcyIsImJsb2dzcG90LmNvbS5tdCIsImJsb2dzcG90LmNvbS5uZyIsImJsb2dzcG90LmNvbS50ciIsImJsb2dzcG90LmNvbS51eSIsImJsb2dzcG90LmN2IiwiYmxvZ3Nwb3QuY3oiLCJibG9nc3BvdC5kZSIsImJsb2dzcG90LmRrIiwiYmxvZ3Nwb3QuZmkiLCJibG9n''@;'; put 'put ''c3BvdC5mciIsImJsb2dzcG90LmdyIiwiYmxvZ3Nwb3QuaGsiLCJibG9nc3BvdC5ociIsImJsb2dzcG90Lmh1IiwiYmxvZ3Nwb3QuaWUiLCJibG9nc3BvdC5pbiIsImJsb2dzcG90LmlzIiwiYmxvZ3Nwb3QuaXQiLCJibG9nc3BvdC5qcCIsImJsb2dzcG90LmtyIiwiYmxvZ3Nwb3QubGkiLCJi''@;'; put 'put ''bG9nc3BvdC5sdCIsImJsb2dzcG90Lmx1IiwiYmxvZ3Nwb3QubWQiLCJibG9nc3BvdC5tayIsImJsb2dzcG90Lm1yIiwiYmxvZ3Nwb3QubXgiLCJibG9nc3BvdC5teSIsImJsb2dzcG90Lm5sIiwiYmxvZ3Nwb3Qubm8iLCJibG9nc3BvdC5wZSIsImJsb2dzcG90LnB0IiwiYmxvZ3Nwb3QucWEi''@;'; put 'put ''LCJibG9nc3BvdC5yZSIsImJsb2dzcG90LnJvIiwiYmxvZ3Nwb3QucnMiLCJibG9nc3BvdC5ydSIsImJsb2dzcG90LnNlIiwiYmxvZ3Nwb3Quc2ciLCJibG9nc3BvdC5zaSIsImJsb2dzcG90LnNrIiwiYmxvZ3Nwb3Quc24iLCJibG9nc3BvdC50ZCIsImJsb2dzcG90LnR3IiwiYmxvZ3Nwb3Qu''@;'; put 'put ''dWciLCJibG9nc3BvdC52biIsImdvdXBpbGUuZnIiLCJnb3YubmwiLCJhd3NtcHBsLmNvbSIsImdceGZjbnN0aWdiZXN0ZWxsZW4uZGUiLCJnXHhmY25zdGlnbGllZmVybi5kZSIsImZpbi5jaSIsImZyZWUuaHIiLCJjYWEubGkiLCJ1YS5ycyIsImNvbmYuc2UiLCJocy56b25lIiwiaHMucnVu''@;'; put 'put ''IiwiaGFzaGJhbmcuc2giLCJoYXN1cmEuYXBwIiwiaGFzdXJhLWFwcC5pbyIsInBhZ2VzLml0LmhzLWhlaWxicm9ubi5kZSIsImhlcGZvcmdlLm9yZyIsImhlcm9rdWFwcC5jb20iLCJoZXJva3Vzc2wuY29tIiwicmF2ZW5kYi5jbG91ZCIsIm15cmF2ZW5kYi5jb20iLCJyYXZlbmRiLmNvbW11''@;'; put 'put ''bml0eSIsInJhdmVuZGIubWUiLCJkZXZlbG9wbWVudC5ydW4iLCJyYXZlbmRiLnJ1biIsImhvbWVza2xlcC5wbCIsInNlY2Fhcy5oayIsImhvcGxpeC5zaG9wIiwib3J4LmJpeiIsImJpei5nbCIsImNvbC5uZyIsImZpcm0ubmciLCJnZW4ubmciLCJsdGQubmciLCJuZ28ubmciLCJlZHUuc2Nv''@;'; put 'put ''dCIsInNjaC5zbyIsImhvc3R5aG9zdGluZy5pbyIsImhceGU0a2tpbmVuLmZpIiwiKi5tb29uc2NhbGUuaW8iLCJtb29uc2NhbGUubmV0IiwiaWtpLmZpIiwiaWJ4b3MuaXQiLCJpbGlhZGJveG9zLml0IiwiaW1wZXJ0cml4Y2RuLmNvbSIsImltcGVydHJpeC5jb20iLCJzbXVzaGNkbi5jb20i''@;'; put 'put ''LCJ3cGhvc3RlZG1haWwuY29tIiwid3BtdWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3QiLCJ3cG11ZGV2Lmhvc3QiLCJkeW4tYmVybGluLmRlIiwiaW4tYmVybGluLmRlIiwiaW4tYnJiLmRlIiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tZHNsLm5ldCIsImluLWRzbC5vcmciLCJpbi12''@;'; put 'put ''cG4uZGUiLCJpbi12cG4ubmV0IiwiaW4tdnBuLm9yZyIsImJpei5hdCIsImluZm8uYXQiLCJpbmZvLmN4IiwiYWMubGVnLmJyIiwiYWwubGVnLmJyIiwiYW0ubGVnLmJyIiwiYXAubGVnLmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJyIiwiZ28ubGVn''@;'; put 'put ''LmJyIiwibWEubGVnLmJyIiwibWcubGVnLmJyIiwibXMubGVnLmJyIiwibXQubGVnLmJyIiwicGEubGVnLmJyIiwicGIubGVnLmJyIiwicGUubGVnLmJyIiwicGkubGVnLmJyIiwicHIubGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVnLmJyIiwicnMu''@;'; put 'put ''bGVnLmJyIiwic2MubGVnLmJyIiwic2UubGVnLmJyIiwic3AubGVnLmJyIiwidG8ubGVnLmJyIiwicGl4b2xpbm8uY29tIiwibmE0dS5ydSIsImlvcHN5cy5zZSIsImlwaWZvbnkubmV0IiwiaXNlcnZzY2h1bGUuZGUiLCJtZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1''@;'; put 'put ''bHNlcnZlci5kZSIsInRlc3QtaXNlcnYuZGUiLCJpc2Vydi5kZXYiLCJpb2JiLm5ldCIsIm1lbC5jbG91ZGxldHMuY29tLmF1IiwiY2xvdWQuaW50ZXJob3N0c29sdXRpb25zLmJlIiwidXNlcnMuc2NhbGUudmlydHVhbGNsb3VkLmNvbS5iciIsIm15Y2xvdWQuYnkiLCJhbHAxLmFlLmZsb3cu''@;'; put 'put ''Y2giLCJhcHBlbmdpbmUuZmxvdy5jaCIsImVzLTEuYXhhcm5ldC5jbG91ZCIsImRpYWRlbS5jbG91ZCIsInZpcC5qZWxhc3RpYy5jbG91ZCIsImplbGUuY2xvdWQiLCJpdDEuZXVyLmFydWJhLmplbnYtYXJ1YmEuY2xvdWQiLCJpdDEuamVudi1hcnViYS5jbG91ZCIsImtlbGl3ZWIuY2xvdWQi''@;'; put 'put ''LCJjcy5rZWxpd2ViLmNsb3VkIiwib3hhLmNsb3VkIiwidG4ub3hhLmNsb3VkIiwidWsub3hhLmNsb3VkIiwicHJpbWV0ZWwuY2xvdWQiLCJ1ay5wcmltZXRlbC5jbG91ZCIsImNhLnJlY2xhaW0uY2xvdWQiLCJ1ay5yZWNsYWltLmNsb3VkIiwidXMucmVjbGFpbS5jbG91ZCIsImNoLnRyZW5k''@;'; put 'put ''aG9zdGluZy5jbG91ZCIsImRlLnRyZW5kaG9zdGluZy5jbG91ZCIsImplbGUuY2x1YiIsImFtc2NvbXB1dGUuY29tIiwiY2xpY2tldGNsb3VkLmNvbSIsImRvcGFhcy5jb20iLCJoaWRvcmEuY29tIiwicGFhcy5ob3N0ZWQtYnktcHJldmlkZXIuY29tIiwicmFnLWNsb3VkLmhvc3RldXIuY29t''@;'; put 'put ''IiwicmFnLWNsb3VkLWNoLmhvc3RldXIuY29tIiwiamNsb3VkLmlrLXNlcnZlci5jb20iLCJqY2xvdWQtdmVyLWpwYy5pay1zZXJ2ZXIuY29tIiwiZGVtby5qZWxhc3RpYy5jb20iLCJraWxhdGlyb24uY29tIiwicGFhcy5tYXNzaXZlZ3JpZC5jb20iLCJqZWQud2FmYWljbG91ZC5jb20iLCJs''@;'; put 'put ''b24ud2FmYWljbG91ZC5jb20iLCJyeWQud2FmYWljbG91ZC5jb20iLCJqLnNjYWxlZm9yY2UuY29tLmN5IiwiamVsYXN0aWMuZG9nYWRvLmV1IiwiZmkuY2xvdWRwbGF0Zm9ybS5maSIsImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9zdCIsIm1pcmNs''@;'; put 'put ''b3VkLmhvc3QiLCJwYWFzLmJlZWJ5dGUuaW8iLCJzZWtkMS5iZWVieXRlYXBwLmlvIiwiamVsZS5pbyIsImNsb3VkLWZyMS51bmlzcGFjZS5pbyIsImpjLm5lZW4uaXQiLCJjbG91ZC5qZWxhc3RpYy5vcGVuLnRpbS5pdCIsImpjbG91ZC5reiIsInVwYWFzLmthenRlbGVwb3J0Lmt6IiwiY2xv''@;'; put 'put ''dWRqaWZmeS5uZXQiLCJmcmExLWRlLmNsb3VkamlmZnkubmV0Iiwid2VzdDEtdXMuY2xvdWRqaWZmeS5uZXQiLCJqbHMtc3RvMS5lbGFzdHgubmV0IiwiamxzLXN0bzIuZWxhc3R4Lm5ldCIsImpscy1zdG8zLmVsYXN0eC5uZXQiLCJmYXN0c3RhY2tzLm5ldCIsImZyLTEucGFhcy5tYXNzaXZl''@;'; put 'put ''Z3JpZC5uZXQiLCJsb24tMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwiamVsYXN0aWMuc2F2''@;'; put 'put ''ZWluY2xvdWQubmV0Iiwibm9yZGVzdGUtaWRjLnNhdmVpbmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJqZWxhc3RpYy50c3VrYWVydS5uZXQiLCJzZHNjbG91ZC5wbCIsInVuaWNsb3VkLnBsIiwibWlyY2xvdWQucnUiLCJqZWxhc3RpYy5yZWdydWhvc3RpbmcucnUiLCJlbnNjYWxl''@;'; put 'put ''ZC5zZyIsImplbGUuc2l0ZSIsImplbGFzdGljLnRlYW0iLCJvcmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5jby51ayIsInBoeC5lbnNjYWxlZC51cyIsIm1pcmNsb3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5ydSIsIioubGFuZGluZy5teWppbm8ucnUiLCIqLnNw''@;'; put 'put ''ZWN0cnVtLm15amluby5ydSIsIioudnBzLm15amluby5ydSIsImpvdGVsdWx1LmNsb3VkIiwiKi50cml0b24uem9uZSIsIiouY25zLmpveWVudC5jb20iLCJqcy5vcmciLCJrYWFzLmdnIiwia2hwbGF5Lm5sIiwia3Rpc3RvcnkuY29tIiwia2Fwc2kuZmkiLCJrZXltYWNoaW5lLmRlIiwia2lu''@;'; put 'put ''Z2hvc3QubmV0IiwidW5pNS5uZXQiLCJrbmlnaHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIm95YS50byIsImt1bGV1dmVuLmNsb3VkIiwiZXpwcm94eS5rdWxldXZlbi5iZSIsImNvLmtyZCIsImVkdS5rcmQiLCJrcmVsbGlhbi5uZXQiLCJ3ZWJ0aGluZ3MuaW8iLCJnaXQtcmVw''@;'; put 'put ''b3MuZGUiLCJsY3ViZS1zZXJ2ZXIuZGUiLCJzdm4tcmVwb3MuZGUiLCJsZWFkcGFnZXMuY28iLCJscGFnZXMuY28iLCJscHVzZXJjb250ZW50LmNvbSIsImxlbHV4LnNpdGUiLCJjby5idXNpbmVzcyIsImNvLmVkdWNhdGlvbiIsImNvLmV2ZW50cyIsImNvLmZpbmFuY2lhbCIsImNvLm5ldHdv''@;'; put 'put ''cmsiLCJjby5wbGFjZSIsImNvLnRlY2hub2xvZ3kiLCJhcHAubG1wbS5jb20iLCJsaW5reWFyZC5jbG91ZCIsImxpbmt5YXJkLWNsb3VkLmNoIiwibWVtYmVycy5saW5vZGUuY29tIiwiKi5ub2RlYmFsYW5jZXIubGlub2RlLmNvbSIsIioubGlub2Rlb2JqZWN0cy5jb20iLCJpcC5saW5vZGV1''@;'; put 'put ''c2VyY29udGVudC5jb20iLCJ3ZS5icyIsIioudXNlci5sb2NhbGNlcnQuZGV2IiwibG9jYWx6b25lLnh5eiIsImxvZ2lubGluZS5hcHAiLCJsb2dpbmxpbmUuZGV2IiwibG9naW5saW5lLmlvIiwibG9naW5saW5lLnNlcnZpY2VzIiwibG9naW5saW5lLnNpdGUiLCJzZXJ2ZXJzLnJ1biIsImxv''@;'; put 'put ''aG11cy5tZSIsImtyYXNuaWsucGwiLCJsZWN6bmEucGwiLCJsdWJhcnRvdy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5wbCIsInN3aWRuaWsucGwiLCJnbHVnLm9yZy51ayIsImx1Zy5vcmcudWsiLCJsdWdzLm9yZy51ayIsImJhcnN5LmJnIiwiYmFyc3kuY28udWsiLCJiYXJzeW9ubGlu''@;'; put 'put ''ZS5jby51ayIsImJhcnN5Y2VudGVyLmNvbSIsImJhcnN5b25saW5lLmNvbSIsImJhcnN5LmNsdWIiLCJiYXJzeS5kZSIsImJhcnN5LmV1IiwiYmFyc3kuaW4iLCJiYXJzeS5pbmZvIiwiYmFyc3kuaW8iLCJiYXJzeS5tZSIsImJhcnN5Lm1lbnUiLCJiYXJzeS5tb2JpIiwiYmFyc3kubmV0Iiwi''@;'; put 'put ''YmFyc3kub25saW5lIiwiYmFyc3kub3JnIiwiYmFyc3kucHJvIiwiYmFyc3kucHViIiwiYmFyc3kucm8iLCJiYXJzeS5zaG9wIiwiYmFyc3kuc2l0ZSIsImJhcnN5LnN1cHBvcnQiLCJiYXJzeS51ayIsIioubWFnZW50b3NpdGUuY2xvdWQiLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3Jn''@;'; put 'put ''IiwiaGIuY2xkbWFpbC5ydSIsImNuLnZ1IiwibWF6ZXBsYXkuY29tIiwibWNwZS5tZSIsIm1jZGlyLm1lIiwibWNkaXIucnUiLCJtY3ByZS5ydSIsInZwcy5tY2Rpci5ydSIsIm1lZGlhdGVjaC5ieSIsIm1lZGlhdGVjaC5kZXYiLCJocmEuaGVhbHRoIiwibWluaXNlcnZlci5jb20iLCJtZW1z''@;'; put 'put ''ZXQubmV0IiwibWVzc2VybGkuYXBwIiwiKi5jbG91ZC5tZXRhY2VudHJ1bS5jeiIsImN1c3RvbS5tZXRhY2VudHJ1bS5jeiIsImZsdC5jbG91ZC5tdW5pLmN6IiwidXNyLmNsb3VkLm11bmkuY3oiLCJtZXRlb3JhcHAuY29tIiwiZXUubWV0ZW9yYXBwLmNvbSIsImNvLnBsIiwiKi5henVyZWNv''@;'; put 'put ''bnRhaW5lci5pbyIsImF6dXJld2Vic2l0ZXMubmV0IiwiYXp1cmUtbW9iaWxlLm5ldCIsImNsb3VkYXBwLm5ldCIsImF6dXJlc3RhdGljYXBwcy5uZXQiLCIxLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJjZW50cmFsdXMuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3Rhc2lhLmF6dXJlc3RhdGlj''@;'; put 'put ''YXBwcy5uZXQiLCJlYXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0ZXVyb3BlLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJjc3guY2MiLCJtaW50ZXJlLnNpdGUiLCJmb3J0ZS5pZCIsIm1vemlsbGEtaW90Lm9yZyIsImJtb2F0dGFj''@;'; put 'put ''aG1lbnRzLm9yZyIsIm5ldC5ydSIsIm9yZy5ydSIsInBwLnJ1IiwiaG9zdGVkcGkuY29tIiwiY3VzdG9tZXIubXl0aGljLWJlYXN0cy5jb20iLCJjYXJhY2FsLm15dGhpYy1iZWFzdHMuY29tIiwiZmVudGlnZXIubXl0aGljLWJlYXN0cy5jb20iLCJseW54Lm15dGhpYy1iZWFzdHMuY29tIiwi''@;'; put 'put ''b2NlbG90Lm15dGhpYy1iZWFzdHMuY29tIiwib25jaWxsYS5teXRoaWMtYmVhc3RzLmNvbSIsIm9uemEubXl0aGljLWJlYXN0cy5jb20iLCJzcGhpbngubXl0aGljLWJlYXN0cy5jb20iLCJ2cy5teXRoaWMtYmVhc3RzLmNvbSIsIngubXl0aGljLWJlYXN0cy5jb20iLCJ5YWxpLm15dGhpYy1i''@;'; put 'put ''ZWFzdHMuY29tIiwiY3VzdC5yZXRyb3NudWIuY28udWsiLCJ1aS5uYWJ1LmNhc2EiLCJwb255LmNsdWIiLCJvZi5mYXNoaW9uIiwiaW4ubG9uZG9uIiwib2YubG9uZG9uIiwiZnJvbS5tYXJrZXRpbmciLCJ3aXRoLm1hcmtldGluZyIsImZvci5tZW4iLCJyZXBhaXIubWVuIiwiYW5kLm1vbSIs''@;'; put 'put ''ImZvci5tb20iLCJmb3Iub25lIiwidW5kZXIub25lIiwiZm9yLnNhbGUiLCJ0aGF0LndpbiIsImZyb20ud29yayIsInRvLndvcmsiLCJjbG91ZC5ub3NwYW1wcm94eS5jb20iLCJuZXRsaWZ5LmFwcCIsIjR1LmNvbSIsIm5ncm9rLmlvIiwibmgtc2Vydi5jby51ayIsIm5mc2hvc3QuY29tIiwi''@;'; put 'put ''Ki5kZXZlbG9wZXIuYXBwIiwibm9vcC5hcHAiLCIqLm5vcnRoZmxhbmsuYXBwIiwiKi5idWlsZC5ydW4iLCIqLmNvZGUucnVuIiwiKi5kYXRhYmFzZS5ydW4iLCIqLm1pZ3JhdGlvbi5ydW4iLCJub3RpY2VhYmxlLm5ld3MiLCJkbnNraW5nLmNoIiwibXlwaS5jbyIsIm40dC5jbyIsIjAwMXd3''@;'; put 'put ''dy5jb20iLCJkZG5zbGl2ZS5jb20iLCJteWlwaG9zdC5jb20iLCJmb3J1bXouaW5mbyIsIjE2LWIuaXQiLCIzMi1iLml0IiwiNjQtYi5pdCIsInNvdW5kY2FzdC5tZSIsInRjcDQubWUiLCJkbnN1cC5uZXQiLCJoaWNhbS5uZXQiLCJub3ctZG5zLm5ldCIsIm93bmlwLm5ldCIsInZwbmRucy5u''@;'; put 'put ''ZXQiLCJkeW5zZXJ2Lm9yZyIsIm5vdy1kbnMub3JnIiwieDQ0My5wdyIsIm5vdy1kbnMudG9wIiwibnRkbGwudG9wIiwiZnJlZWRkbnMudXMiLCJjcmFmdGluZy54eXoiLCJ6YXB0by54eXoiLCJuc3VwZGF0ZS5pbmZvIiwibmVyZHBvbC5vdmgiLCJibG9nc3l0ZS5jb20iLCJicmFzaWxpYS5t''@;'; put 'put ''ZSIsImNhYmxlLW1vZGVtLm9yZyIsImNpc2NvZnJlYWsuY29tIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0b2ZyaWVzLm9yZyIsImRhbW5zZXJ2ZXIuY29tIiwiZGRucy5tZSIsImRpdGNoeW91cmlwLmNvbSIsImRuc2Zvci5tZSIsImRuc2lza2lua3kuY29tIiwiZHZyY2FtLmluZm8i''@;'; put 'put ''LCJkeW5ucy5jb20iLCJlYXRpbmctb3JnYW5pYy5uZXQiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ2Vla2dhbGF4eS5jb20iLCJnb2xmZmFuLnVzIiwiaGVhbHRoLWNhcmVyZWZvcm0uY29tIiwiaG9tZXNlY3VyaXR5bWFjLmNvbSIsImhvbWVzZWN1cml0eXBjLmNvbSIsImhvcHRvLm1lIiwiaWxv''@;'; put 'put ''dmVjb2xsZWdlLmluZm8iLCJsb2dpbnRvLm1lIiwibWxiZmFuLm9yZyIsIm1tYWZhbi5iaXoiLCJteWFjdGl2ZWRpcmVjdG9yeS5jb20iLCJteWRpc3NlbnQubmV0IiwibXllZmZlY3QubmV0IiwibXltZWRpYXBjLm5ldCIsIm15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEuY29tIiwibXlz''@;'; put 'put ''ZWN1cml0eWNhbWVyYS5uZXQiLCJteXNlY3VyaXR5Y2FtZXJhLm9yZyIsIm5ldC1mcmVha3MuY29tIiwibmZsZmFuLm9yZyIsIm5obGZhbi5uZXQiLCJuby1pcC5jYSIsIm5vLWlwLmNvLnVrIiwibm8taXAubmV0Iiwibm9pcC51cyIsIm9udGhld2lmaS5jb20iLCJwZ2FmYW4ubmV0IiwicG9p''@;'; put 'put ''bnQydGhpcy5jb20iLCJwb2ludHRvLnVzIiwicHJpdmF0aXplaGVhbHRoaW5zdXJhbmNlLm5ldCIsInF1aWNrc3l0ZXMuY29tIiwicmVhZC1ib29rcy5vcmciLCJzZWN1cml0eXRhY3RpY3MuY29tIiwic2VydmVleGNoYW5nZS5jb20iLCJzZXJ2ZWh1bW91ci5jb20iLCJzZXJ2ZXAycC5jb20i''@;'; put 'put ''LCJzZXJ2ZXNhcmNhc20uY29tIiwic3R1ZmZ0b3JlYWQuY29tIiwidWZjZmFuLm9yZyIsInVudXN1YWxwZXJzb24uY29tIiwid29ya2lzYm9yaW5nLmNvbSIsIjN1dGlsaXRpZXMuY29tIiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJkZG5za2luZy5jb20iLCJnb3RkbnMuY2giLCJob3B0''@;'; put 'put ''by5vcmciLCJteWZ0cC5iaXoiLCJteWZ0cC5vcmciLCJteXZuYy5jb20iLCJuby1pcC5iaXoiLCJuby1pcC5pbmZvIiwibm8taXAub3JnIiwibm9pcC5tZSIsInJlZGlyZWN0bWUubmV0Iiwic2VydmViZWVyLmNvbSIsInNlcnZlYmxvZy5uZXQiLCJzZXJ2ZWNvdW50ZXJzdHJpa2UuY29tIiwi''@;'; put 'put ''c2VydmVmdHAuY29tIiwic2VydmVnYW1lLmNvbSIsInNlcnZlaGFsZmxpZmUuY29tIiwic2VydmVodHRwLmNvbSIsInNlcnZlaXJjLmNvbSIsInNlcnZlbWluZWNyYWZ0Lm5ldCIsInNlcnZlbXAzLmNvbSIsInNlcnZlcGljcy5jb20iLCJzZXJ2ZXF1YWtlLmNvbSIsInN5dGVzLm5ldCIsIndl''@;'; put 'put ''YmhvcC5tZSIsInphcHRvLm9yZyIsInN0YWdlLm5vZGVhcnQuaW8iLCJwY2xvdWQuaG9zdCIsIm55Yy5tbiIsInN0YXRpYy5vYnNlcnZhYmxldXNlcmNvbnRlbnQuY29tIiwiY3lhLmdnIiwib21nLmxvbCIsImNsb3VkeWNsdXN0ZXIubmV0Iiwib21uaXdlLnNpdGUiLCJzZXJ2aWNlLm9uZSIs''@;'; put 'put ''Im5pZC5pbyIsIm9wZW5zb2NpYWwuc2l0ZSIsIm9wZW5jcmFmdC5ob3N0aW5nIiwib3JzaXRlcy5jb20iLCJvcGVyYXVuaXRlLmNvbSIsInRlY2gub3JhbmdlIiwiYXV0aGdlYXItc3RhZ2luZy5jb20iLCJhdXRoZ2VhcmFwcHMuY29tIiwic2t5Z2VhcmFwcC5jb20iLCJvdXRzeXN0ZW1zY2xv''@;'; put 'put ''dWQuY29tIiwiKi53ZWJwYWFzLm92aC5uZXQiLCIqLmhvc3Rpbmcub3ZoLm5ldCIsIm93bnByb3ZpZGVyLmNvbSIsIm93bi5wbSIsIioub3dvLmNvZGVzIiwib3gucnMiLCJveS5sYyIsInBnZm9nLmNvbSIsInBhZ2Vmcm9udGFwcC5jb20iLCJwYWdleGwuY29tIiwiKi5wYXl3aGlybC5jb20i''@;'; put 'put ''LCJiYXIwLm5ldCIsImJhcjEubmV0IiwiYmFyMi5uZXQiLCJyZHYudG8iLCJhcnQucGwiLCJnbGl3aWNlLnBsIiwia3Jha293LnBsIiwicG96bmFuLnBsIiwid3JvYy5wbCIsInpha29wYW5lLnBsIiwicGFudGhlb25zaXRlLmlvIiwiZ290cGFudGhlb24uY29tIiwibXlwZXAubGluayIsInBl''@;'; put 'put ''cnNwZWN0YS5jbG91ZCIsImxrMy5ydSIsIm9uLXdlYi5mciIsImJjLnBsYXRmb3JtLnNoIiwiZW50LnBsYXRmb3JtLnNoIiwiZXUucGxhdGZvcm0uc2giLCJ1cy5wbGF0Zm9ybS5zaCIsIioucGxhdGZvcm1zaC5zaXRlIiwiKi50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXIt''@;'; put 'put ''YXBwLmRldiIsInBsYXR0ZXJwLnVzIiwicGRucy5wYWdlIiwicGxlc2sucGFnZSIsInBsZXNrbnMuY29tIiwiZHluNTMuaW8iLCJvbnBvcnRlci5ydW4iLCJjby5ibiIsInBvc3RtYW4tZWNoby5jb20iLCJwc3Rtbi5pbyIsIm1vY2sucHN0bW4uaW8iLCJodHRwYmluLm9yZyIsInByZXF1YWxp''@;'; put 'put ''ZnltZS50b2RheSIsInhlbi5wcmdtci5jb20iLCJwcml2LmF0IiwicHJ2Y3kucGFnZSIsIiouZHdlYi5saW5rIiwicHJvdG9uZXQuaW8iLCJjaGlydXJnaWVucy1kZW50aXN0ZXMtZW4tZnJhbmNlLmZyIiwiYnllbi5zaXRlIiwicHVidGxzLm9yZyIsInB5dGhvbmFueXdoZXJlLmNvbSIsImV1''@;'; put 'put ''LnB5dGhvbmFueXdoZXJlLmNvbSIsInFvdG8uaW8iLCJxdWFsaWZpb2FwcC5jb20iLCJxYnVzZXIuY29tIiwiY2xvdWRzaXRlLmJ1aWxkZXJzIiwiaW5zdGFuY2VzLnNwYXduLmNjIiwiaW5zdGFudGNsb3VkLmNuIiwicmFzLnJ1IiwicWEyLmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIs''@;'; put 'put ''ImRldi1teXFuYXBjbG91ZC5jb20iLCJhbHBoYS1teXFuYXBjbG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCIqLnF1aXBlbGVtZW50cy5jb20iLCJ2YXBvci5jbG91ZCIsInZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6ZS5uZXQiLCJnLnZicnBsc2J4LmlvIiwiKi5v''@;'; put 'put ''bi1rM3MuaW8iLCIqLm9uLXJhbmNoZXIuY2xvdWQiLCIqLm9uLXJpby5pbyIsInJlYWR0aGVkb2NzLmlvIiwicmhjbG91ZC5jb20iLCJhcHAucmVuZGVyLmNvbSIsIm9ucmVuZGVyLmNvbSIsInJlcGwuY28iLCJpZC5yZXBsLmNvIiwicmVwbC5ydW4iLCJyZXNpbmRldmljZS5pbyIsImRldmlj''@;'; put 'put ''ZXMucmVzaW5zdGFnaW5nLmlvIiwiaHpjLmlvIiwid2VsbGJlaW5nem9uZS5ldSIsIndlbGxiZWluZ3pvbmUuY28udWsiLCJhZGltby5jby51ayIsIml0Y291bGRiZXdvci5zZSIsImdpdC1wYWdlcy5yaXQuZWR1Iiwicm9ja3kucGFnZSIsIlx1MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0''@;'; put 'put ''NDNcdTA0NDEiLCJcdTA0M2FcdTA0M2VcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUw''@;'; put 'put ''NDQzXHUwNDQxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzMFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2VcdTA0NDdcdTA0MzguXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUw''@;'; put 'put ''NDNmXHUwNDMxLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNcdTA0NDEiLCIqLmJ1aWxkZXIuY29kZS5jb20iLCIqLmRldi1idWlsZGVyLmNvZGUuY29tIiwiKi5zdGctYnVpbGRlci5jb2RlLmNvbSIsInNhbmRjYXRzLmlvIiwibG9nb2lwLmRlIiwibG9nb2lwLmNv''@;'; put 'put ''bSIsImZyLXBhci0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJmci1wYXItMi5iYXJlbWV0YWwuc2N3LmNsb3VkIiwibmwtYW1zLTEuYmFyZW1ldGFsLnNjdy5jbG91ZCIsImZuYy5mci1wYXIuc2N3LmNsb3VkIiwiZnVuY3Rpb25zLmZuYy5mci1wYXIuc2N3LmNsb3VkIiwiazhzLmZyLXBhci5z''@;'; put 'put ''Y3cuY2xvdWQiLCJub2Rlcy5rOHMuZnItcGFyLnNjdy5jbG91ZCIsInMzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLmZyLXBhci5zY3cuY2xvdWQiLCJ3aG0uZnItcGFyLnNjdy5jbG91ZCIsInByaXYuaW5zdGFuY2VzLnNjdy5jbG91ZCIsInB1Yi5pbnN0YW5jZXMuc2N3LmNsb3Vk''@;'; put 'put ''IiwiazhzLnNjdy5jbG91ZCIsIms4cy5ubC1hbXMuc2N3LmNsb3VkIiwibm9kZXMuazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJzMy5ubC1hbXMuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5ubC1hbXMuc2N3LmNsb3VkIiwid2htLm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMucGwtd2F3LnNjdy5jbG91''@;'; put 'put ''ZCIsIm5vZGVzLms4cy5wbC13YXcuc2N3LmNsb3VkIiwiczMucGwtd2F3LnNjdy5jbG91ZCIsInMzLXdlYnNpdGUucGwtd2F3LnNjdy5jbG91ZCIsInNjYWxlYm9vay5zY3cuY2xvdWQiLCJzbWFydGxhYmVsaW5nLnNjdy5jbG91ZCIsImRlZGlib3guZnIiLCJzY2hva29rZWtzLm5ldCIsImdv''@;'; put 'put ''di5zY290Iiwic2VydmljZS5nb3Yuc2NvdCIsInNjcnlzZWMuY29tIiwiZmlyZXdhbGwtZ2F0ZXdheS5jb20iLCJmaXJld2FsbC1nYXRld2F5LmRlIiwibXktZ2F0ZXdheS5kZSIsIm15LXJvdXRlci5kZSIsInNwZG5zLmRlIiwic3BkbnMuZXUiLCJmaXJld2FsbC1nYXRld2F5Lm5ldCIsIm15''@;'; put 'put ''LWZpcmV3YWxsLm9yZyIsIm15ZmlyZXdhbGwub3JnIiwic3BkbnMub3JnIiwic2VpZGF0Lm5ldCIsInNlbGxmeS5zdG9yZSIsInNlbnNlZXJpbmcubmV0IiwibWluaXNpdGUubXMiLCJtYWduZXQucGFnZSIsImJpei51YSIsImNvLnVhIiwicHAudWEiLCJzaGlmdGNyeXB0by5kZXYiLCJzaGlm''@;'; put 'put ''dGNyeXB0by5pbyIsInNoaWZ0ZWRpdC5pbyIsIm15c2hvcGJsb2Nrcy5jb20iLCJteXNob3BpZnkuY29tIiwic2hvcGl0c2l0ZS5jb20iLCJzaG9wd2FyZS5zdG9yZSIsIm1vLXNpZW1lbnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5jb20iLCJhcHBsaW56aS5jb20iLCJzaW5hYXBwLmNv''@;'; put 'put ''bSIsInZpcHNpbmFhcHAuY29tIiwic2l0ZWxlYWYubmV0IiwiYm91bnR5LWZ1bGwuY29tIiwiYWxwaGEuYm91bnR5LWZ1bGwuY29tIiwiYmV0YS5ib3VudHktZnVsbC5jb20iLCJzbWFsbC13ZWIub3JnIiwidnA0Lm1lIiwidHJ5LXNub3dwbG93LmNvbSIsInNyaHQuc2l0ZSIsInN0YWNraGVy''@;'; put 'put ''by1uZXR3b3JrLmNvbSIsIm11c2ljaWFuLmlvIiwibm92ZWNvcmUuc2l0ZSIsInN0YXRpYy5sYW5kIiwiZGV2LnN0YXRpYy5sYW5kIiwic2l0ZXMuc3RhdGljLmxhbmQiLCJzdG9yZWJhc2Uuc3RvcmUiLCJ2cHMtaG9zdC5uZXQiLCJhdGwuamVsYXN0aWMudnBzLWhvc3QubmV0IiwibmpzLmpl''@;'; put 'put ''bGFzdGljLnZwcy1ob3N0Lm5ldCIsInJpYy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20iLCJhcHBzLmxhaXIuaW8iLCIqLnN0b2xvcy5pbyIsInNwYWNla2l0LmlvIiwiY3VzdG9tZXIuc3BlZWRwYXJ0bmVyLmRlIiwibXlzcHJlYWRzaG9wLmF0IiwibXlz''@;'; put 'put ''cHJlYWRzaG9wLmNvbS5hdSIsIm15c3ByZWFkc2hvcC5iZSIsIm15c3ByZWFkc2hvcC5jYSIsIm15c3ByZWFkc2hvcC5jaCIsIm15c3ByZWFkc2hvcC5jb20iLCJteXNwcmVhZHNob3AuZGUiLCJteXNwcmVhZHNob3AuZGsiLCJteXNwcmVhZHNob3AuZXMiLCJteXNwcmVhZHNob3AuZmkiLCJt''@;'; put 'put ''eXNwcmVhZHNob3AuZnIiLCJteXNwcmVhZHNob3AuaWUiLCJteXNwcmVhZHNob3AuaXQiLCJteXNwcmVhZHNob3AubmV0IiwibXlzcHJlYWRzaG9wLm5sIiwibXlzcHJlYWRzaG9wLm5vIiwibXlzcHJlYWRzaG9wLnBsIiwibXlzcHJlYWRzaG9wLnNlIiwibXlzcHJlYWRzaG9wLmNvLnVrIiwi''@;'; put 'put ''YXBpLnN0ZGxpYi5jb20iLCJzdG9yai5mYXJtIiwidXR3ZW50ZS5pbyIsInNvYy5zcmNmLm5ldCIsInVzZXIuc3JjZi5uZXQiLCJ0ZW1wLWRucy5jb20iLCJzdXBhYmFzZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3UucGFiYS5zZSIsIiouczV5LmlvIiwiKi5zZW5zaW9z''@;'; put 'put ''aXRlLmNsb3VkIiwic3luY2xvdWQuaXQiLCJkc2Nsb3VkLmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFzLmNvbSIsImZhbWlseWRzLmNvbSIsImRpc2tzdGF0aW9uLm1lIiwiZHNjbG91ZC5tZSIsImkyMzQubWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3Vk''@;'; put 'put ''Lm1vYmkiLCJkc215bmFzLm5ldCIsImZhbWlseWRzLm5ldCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwidnBucGx1cy50byIsImRpcmVjdC5xdWlja2Nvbm5lY3QudG8iLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsImJldGEudGFpbHNjYWxlLm5ldCIsInRzLm5l''@;'; put 'put ''dCIsImdkYS5wbCIsImdkYW5zay5wbCIsImdkeW5pYS5wbCIsIm1lZC5wbCIsInNvcG90LnBsIiwic2l0ZS50Yi1ob3N0aW5nLmNvbSIsImVkdWdpdC5pbyIsInMzLnRlY2tpZHMub3JnIiwidGVsZWJpdC5hcHAiLCJ0ZWxlYml0LmlvIiwiKi50ZWxlYml0Lnh5eiIsImd3aWRkbGUuY28udWsi''@;'; put 'put ''LCIqLmZpcmVuZXQuY2giLCIqLnN2Yy5maXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0aGluZ2R1c3RkYXRhLmNvbSIsImN1c3QuZGV2LnRoaW5nZHVzdC5pbyIsImN1c3QuZGlzcmVjLnRoaW5nZHVzdC5pbyIsImN1c3QucHJvZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3RpbmcudGhpbmdk''@;'; put 'put ''dXN0LmlvIiwicmVzZXJ2ZC5kZXYudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kaXNyZWMudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInRpY2tldHMuaW8iLCJhcnZvLm5ldHdvcmsiLCJhemltdXRoLm5ldHdvcmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9q''@;'; put 'put ''ZWN0Lm5ldCIsInBhZ2VzLnRvcnByb2plY3QubmV0IiwiYmxveGNtcy5jb20iLCJ0b3dubmV3cy1zdGFnaW5nLmNvbSIsInRiaXRzLm1lIiwiMTJocC5hdCIsIjJpeC5hdCIsIjRsaW1hLmF0IiwibGltYS1jaXR5LmF0IiwiMTJocC5jaCIsIjJpeC5jaCIsIjRsaW1hLmNoIiwibGltYS1jaXR5''@;'; put 'put ''LmNoIiwidHJhZmZpY3BsZXguY2xvdWQiLCJkZS5jb29sIiwiMTJocC5kZSIsIjJpeC5kZSIsIjRsaW1hLmRlIiwibGltYS1jaXR5LmRlIiwiMTMzNy5waWN0dXJlcyIsImNsYW4ucmlwIiwibGltYS1jaXR5LnJvY2tzIiwid2Vic3BhY2Uucm9ja3MiLCJsaW1hLnpvbmUiLCIqLnRyYW5zdXJs''@;'; put 'put ''LmJlIiwiKi50cmFuc3VybC5ldSIsIioudHJhbnN1cmwubmwiLCJzaXRlLnRyYW5zaXAubWUiLCJ0dXhmYW1pbHkub3JnIiwiZGQtZG5zLmRlIiwiZGlza3N0YXRpb24uZXUiLCJkaXNrc3RhdGlvbi5vcmciLCJkcmF5LWRucy5kZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBu''@;'; put 'put ''LmRlIiwibWVpbi12aWdvci5kZSIsIm15LXZpZ29yLmRlIiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRpc2tzdGF0aW9uLmRlIiwic3lub2xvZ3ktZHMuZGUiLCJ0eXBlZHJlYW0uYXBwIiwicHJvLnR5cGVmb3JtLmNvbSIsInViZXIuc3BhY2UiLCIqLnViZXJzcGFjZS5k''@;'; put 'put ''ZSIsImhrLmNvbSIsImhrLm9yZyIsImx0ZC5oayIsImluYy5oayIsIm5hbWUucG0iLCJzY2gudGYiLCJiaXoud2YiLCJzY2gud2YiLCJvcmcueXQiLCJ2aXJ0dWFsdXNlci5kZSIsInZpcnR1YWwtdXNlci5kZSIsInVwbGkuaW8iLCJ1cm93bi5jbG91ZCIsImRuc3VwZGF0ZS5pbmZvIiwibGli''@;'; put 'put ''LmRlLnVzIiwiMjAzOC5pbyIsInZlcmNlbC5hcHAiLCJ2ZXJjZWwuZGV2Iiwibm93LnNoIiwicm91dGVyLm1hbmFnZW1lbnQiLCJ2LWluZm8uaW5mbyIsInZvb3Jsb3Blci5jbG91ZCIsIm5la28uYW0iLCJueWFhLmFtIiwiYmUuYXgiLCJjYXQuYXgiLCJlcy5heCIsImV1LmF4IiwiZ2cuYXgi''@;'; put 'put ''LCJtYy5heCIsInVzLmF4IiwieHkuYXgiLCJubC5jaSIsInh4LmdsIiwiYXBwLmdwIiwiYmxvZy5ndCIsImRlLmd0IiwidG8uZ3QiLCJiZS5neSIsImNjLmhuIiwiYmxvZy5rZyIsImlvLmtnIiwianAua2ciLCJ0di5rZyIsInVrLmtnIiwidXMua2ciLCJkZS5scyIsImF0Lm1kIiwiZGUubWQi''@;'; put 'put ''LCJqcC5tZCIsInRvLm1kIiwiaW5kaWUucG9ybiIsInZ4bC5zaCIsImNoLnRjIiwibWUudGMiLCJ3ZS50YyIsIm55YW4udG8iLCJhdC52ZyIsImJsb2cudnUiLCJkZXYudnUiLCJtZS52dSIsInYudWEiLCIqLnZ1bHRyb2JqZWN0cy5jb20iLCJ3YWZmbGVjZWxsLmNvbSIsIioud2ViaGFyZS5k''@;'; put 'put ''ZXYiLCJyZXNlcnZlLW9ubGluZS5uZXQiLCJyZXNlcnZlLW9ubGluZS5jb20iLCJib29rb25saW5lLmFwcCIsImhvdGVsd2l0aGZsaWdodC5jb20iLCJ3ZWRlcGxveS5pbyIsIndlZGVwbG95Lm1lIiwid2VkZXBsb3kuc2giLCJyZW1vdGV3ZC5jb20iLCJwYWdlcy53aWFyZHdlYi5jb20iLCJ3''@;'; put 'put ''bWZsYWJzLm9yZyIsInRvb2xmb3JnZS5vcmciLCJ3bWNsb3VkLm9yZyIsInBhbmVsLmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwibWVzc3dpdGhkbnMuY29tIiwid29sdGxhYi1kZW1vLmNvbSIsIm15Zm9ydW0uY29tbXVuaXR5IiwiY29tbXVuaXR5LXByby5kZSIsImRpc2t1c3Npb25zYmVyZWlj''@;'; put 'put ''aC5kZSIsImNvbW11bml0eS1wcm8ubmV0IiwibWVpbmZvcnVtLm5ldCIsImFmZmluaXR5bG90dGVyeS5vcmcudWsiLCJyYWZmbGVlbnRyeS5vcmcudWsiLCJ3ZWVrbHlsb3R0ZXJ5Lm9yZy51ayIsIndwZW5naW5lcG93ZXJlZC5jb20iLCJqcy53cGVuZ2luZXBvd2VyZWQuY29tIiwid2l4c2l0''@;'; put 'put ''ZS5jb20iLCJlZGl0b3J4LmlvIiwiaGFsZi5ob3N0IiwieG5iYXkuY29tIiwidTIueG5iYXkuY29tIiwidTItbG9jYWwueG5iYXkuY29tIiwiY2lzdHJvbi5ubCIsImRlbW9uLm5sIiwieHM0YWxsLnNwYWNlIiwieWFuZGV4Y2xvdWQubmV0Iiwic3RvcmFnZS55YW5kZXhjbG91ZC5uZXQiLCJ3''@;'; put 'put ''ZWJzaXRlLnlhbmRleGNsb3VkLm5ldCIsIm9mZmljaWFsLmFjYWRlbXkiLCJ5b2xhc2l0ZS5jb20iLCJ5Ym8uZmFpdGgiLCJ5b21iby5tZSIsImhvbWVsaW5rLm9uZSIsInliby5wYXJ0eSIsInliby5yZXZpZXciLCJ5Ym8uc2NpZW5jZSIsInliby50cmFkZSIsInluaC5mciIsIm5vaG9zdC5t''@;'; put 'put ''ZSIsIm5vaG8uc3QiLCJ6YS5uZXQiLCJ6YS5vcmciLCJic3MuZGVzaWduIiwiYmFzaWNzZXJ2ZXIuaW8iLCJ2aXJ0dWFsc2VydmVyLmlvIiwiZW50ZXJwcmlzZWNsb3VkLm51Il0nKX19LG09e307ZnVuY3Rpb24gbGUoTSl7dmFyIE89bVtNXTtpZih2b2lkIDAhPT1PKXJldHVybiBPLmV4cG9y''@;'; put 'put ''dHM7dmFyIFI9bVtNXT17aWQ6TSxsb2FkZWQ6ITEsZXhwb3J0czp7fX07cmV0dXJuIHhbTV0uY2FsbChSLmV4cG9ydHMsUixSLmV4cG9ydHMsbGUpLFIubG9hZGVkPSEwLFIuZXhwb3J0c31yZXR1cm4gbGUuZD0oTSxPKT0+e2Zvcih2YXIgUiBpbiBPKWxlLm8oTyxSKSYmIWxlLm8oTSxSKSYm''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KE0sUix7ZW51bWVyYWJsZTohMCxnZXQ6T1tSXX0pfSxsZS5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9''@;'; put 'put ''Y2F0Y2h7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbGUubz0oTSxPKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE0sTyksbGUucj1NPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KE0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbGUubm1kPU09PihNLnBhdGhzPVtdLE0uY2hpbGRyZW58fChNLmNoaWxkcmVuPVtdKSxNKSxsZSgzNjA3KX0pKCl9''@;'; put 'put ''LDEyMDcwOmZ1bmN0aW9uKGF0LEllLEYpeyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKFIpe3JldHVybiBSJiZSLl9fZXNNb2R1bGU/Ujp7ZGVmYXVsdDpSfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEllLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxJZS5pc1NwZWNpYWxNaXNzaW5nPUllLmNob2ljZVZhbGlkYXRvcj1JZS5jb25maXJtYXRpb25WYWxpZGF0b3I9SWUudXJsVmFsaWRhdG9yPXZvaWQgMDt2YXIgeD1hZShGKDc4NTMyKSk7SWUudXJsVmFsaWRhdG9yPWZ1bmN0aW9uKFIseil7cmV0dXJuISF4LmRlZmF1bHQuaXNI''@;'; put 'put ''dHRwVXJpKFIpfHwhIXguZGVmYXVsdC5pc0h0dHBzVXJpKFIpfHwiIj09PVJ8fHp9LEllLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1mdW5jdGlvbihSKXtyZXR1cm4hMD09PVJ8fCExPT09Un0sSWUuY2hvaWNlVmFsaWRhdG9yPWZ1bmN0aW9uKFIseixLKXtyZXR1cm4gUj4wJiZSPD16fHxLfSxJ''@;'; put 'put ''ZS5pc1NwZWNpYWxNaXNzaW5nPWZ1bmN0aW9uKFIpe3JldHVybigic3RyaW5nIiE9dHlwZW9mIFJ8fCFSLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoUil9fSw3Njc3MTooYXQsSWUpPT57InVzZSBzdHJpY3QiO3ZhciB4O0llLkQ9''@;'; put 'put ''dm9pZCAwLCh4PUllLkR8fChJZS5EPXt9KSkuU2FzVml5YT0iU0FTVklZQSIseC5TYXM5PSJTQVM5Iix4LlNhc2pzPSJTQVNKUyJ9LDUxNzE0OihhdCxJZSk9PnsidXNlIHN0cmljdCI7SWUuUj12b2lkIDAsSWUuUj1mdW5jdGlvbih4LG0sbGUpe2lmKHZvaWQgMD09PW0mJihtPTEpLHZvaWQg''@;'; put 'put ''MD09PWxlJiYobGU9MTA5OTUxMTYyNzc3NiksMD09PXgpcmV0dXJuIjAgQiI7eD14PmxlP2xlOng7dmFyIFI9bTwwPzA6bSx6PU1hdGguZmxvb3IoTWF0aC5sb2coeCkvTWF0aC5sb2coMTAyNCkpO3JldHVybih4L01hdGgucG93KDEwMjQseikpLnRvRml4ZWQoUikrIiAiK1siQiIsIktCIiwi''@;'; put 'put ''TUIiLCJHQiIsIlRCIl1bel19fSw4MDc4ODpmdW5jdGlvbihhdCl7dmFyIEllPXt2ZXJzaW9uOiIxLjE1LjAifTtJZVs0MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0''@;'; put 'put ''XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0''@;'; put 'put ''XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhi''@;'; put 'put ''Y1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1''@;'; put 'put ''MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNc''@;'; put 'put ''dTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsy''@;'; put 'put ''NTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbNjIwXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZc''@;'; put 'put ''ZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3''@;'; put 'put ''eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBcdTAxMDVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMDdceGM0XHUwMTA0XHUwMTE4XHUwMTE5XHUwMTQyXHhmNFx4ZjZcdTAxMDZceGZiXHhmOVx1MDE1YVx4ZDZceGRjXHhhMlx1MDE0MVx4YTVcdTAxNWJcdTAxOTJcdTAx''@;'; put 'put ''NzlcdTAxN2JceGYzXHhkM1x1MDE0NFx1MDE0M1x1MDE3YVx1MDE3Y1x4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJc''@;'; put 'put ''dTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1''@;'; put 'put ''MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUy''@;'; put 'put ''MjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzczN109''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7''@;'; put 'put ''PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUw''@;'; put 'put ''M2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2My''@;'; put 'put ''XHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUy''@;'; put 'put ''NTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2Fj''@;'; put 'put ''XHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBc''@;'; put 'put ''eGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbODUwXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0''@;'; put 'put ''XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFi''@;'; put 'put ''Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhl''@;'; put 'put ''MVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1''@;'; put 'put ''MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhm''@;'; put 'put ''NVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkm''@;'; put 'put ''Jih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgx''@;'; put 'put ''NVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHUw''@;'; put 'put ''MTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJcdTAxNTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAxMzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAx''@;'; put 'put ''MDVcdTAxN2RcdTAxN2VcdTAxMThcdTAxMTlceGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUy''@;'; put 'put ''Y1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEwMlx1MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1''@;'; put 'put ''ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAxNDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUwMTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhh''@;'; put 'put ''MCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg1N109ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4''@;'; put 'put ''MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNk''@;'; put 'put ''ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1''@;'; put 'put ''Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0''@;'; put 'put ''XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhk''@;'; put 'put ''NFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFy''@;'; put 'put ''Q29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbODYxXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJc''@;'; put 'put ''eDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlc''@;'; put 'put ''eGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBceGFj''@;'; put 'put ''XHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZc''@;'; put 'put ''dTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2Mw''@;'; put 'put ''XHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17''@;'; put 'put ''fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg2NV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xi''@;'; put 'put ''XHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9w''@;'; put 'put ''cXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhm''@;'; put 'put ''YVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJj''@;'; put 'put ''XHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUy''@;'; put 'put ''NTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFh''@;'; put 'put ''XHUyMDdmXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJc''@;'; put 'put ''MFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFS''@;'; put 'put ''U1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1''@;'; put 'put ''MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQz''@;'; put 'put ''ZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1''@;'; put 'put ''MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0''@;'; put 'put ''NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0w''@;'; put 'put ''OzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NzRdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5c''@;'; put 'put ''dlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1''@;'; put 'put ''dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRc''@;'; put 'put ''dTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBl''@;'; put 'put ''MzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJc''@;'; put 'put ''dTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2Rl''@;'; put 'put ''QXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4OTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNc''@;'; put 'put ''eDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDEwY1x4ZmNceGU5XHUw''@;'; put 'put ''MTBmXHhlNFx1MDEwZVx1MDE2NFx1MDEwZFx1MDExYlx1MDExYVx1MDEzOVx4Y2RcdTAxM2VcdTAxZWFceGM0XHhjMVx4YzlcdTAxN2VcdTAxN2RceGY0XHhmNlx4ZDNcdTAxNmZceGRhXHhmZFx4ZDZceGRjXHUwMTYwXHUwMTNkXHhkZFx1MDE1OFx1MDE2NVx4ZTFceGVkXHhmM1x4ZmFcdTAx''@;'; put 'put ''NDhcdTAxNDdcdTAxNmVceGQ0XHUwMTYxXHUwMTU5XHUwMTU1XHUwMTU0XHhiY1x4YTdceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUz''@;'; put 'put ''NFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1''@;'; put 'put ''MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhi''@;'; put 'put ''N1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbOTMyXT1mdW5jdGlvbigpe3ZhciBt''@;'; put 'put ''LEY9W10sYWU9e30seD1bXTtmb3IoeFswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2''@;'; put 'put ''Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNjFcdWZmNjJcdWZmNjNcdWZmNjRcdWZmNjVcdWZmNjZcdWZmNjdcdWZmNjhcdWZmNjlc''@;'; put 'put ''dWZmNmFcdWZmNmJcdWZmNmNcdWZmNmRcdWZmNmVcdWZmNmZcdWZmNzBcdWZmNzFcdWZmNzJcdWZmNzNcdWZmNzRcdWZmNzVcdWZmNzZcdWZmNzdcdWZmNzhcdWZmNzlcdWZmN2FcdWZmN2JcdWZmN2NcdWZmN2RcdWZmN2VcdWZmN2ZcdWZmODBcdWZmODFcdWZmODJcdWZmODNcdWZmODRcdWZm''@;'; put 'put ''ODVcdWZmODZcdWZmODdcdWZmODhcdWZmODlcdWZmOGFcdWZmOGJcdWZmOGNcdWZmOGRcdWZmOGVcdWZmOGZcdWZmOTBcdWZmOTFcdWZmOTJcdWZmOTNcdWZmOTRcdWZmOTVcdWZmOTZcdWZmOTdcdWZmOThcdWZmOTlcdWZmOWFcdWZmOWJcdWZmOWNcdWZmOWRcdWZmOWVcdWZmOWZcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFswXS5sZW5ndGg7KyttKTY1NTMzIT09eFswXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFswXVttXV09MCttLEZbMCttXT14WzBdW21dKTtmb3IoeFsxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdWZmMGNcdWZmMGVcdTMwZmJcdWZmMWFcdWZmMWJcdWZmMWZcdWZmMDFcdTMwOWJcdTMwOWNceGI0XHVmZjQwXHhhOFx1ZmYzZVx1ZmZlM1x1ZmYzZlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAw''@;'; put 'put ''NVx1MzAwNlx1MzAwN1x1MzBmY1x1MjAxNVx1MjAxMFx1ZmYwZlx1ZmYzY1x1ZmY1ZVx1MjIyNVx1ZmY1Y1x1MjAyNlx1MjAyNVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1ZmYwOFx1ZmYwOVx1MzAxNFx1MzAxNVx1ZmYzYlx1ZmYzZFx1ZmY1Ylx1ZmY1ZFx1MzAwOFx1MzAwOVx1MzAwYVx1''@;'; put 'put ''MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxMFx1MzAxMVx1ZmYwYlx1ZmYwZFx4YjFceGQ3XHVmZmZkXHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRc''@;'; put 'put ''dWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEz''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUy''@;'; put 'put ''MjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFh''@;'; put 'put ''XHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjVlZlx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLG09MDttIT14WzEyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMjldW21dXT0zMzAyNCttLEZbMzMwMjQrbV09eFsxMjldW21dKTtmb3IoeFsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZm''@;'; put 'put ''MTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRc''@;'; put 'put ''dWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZm''@;'; put 'put ''NGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNc''@;'; put 'put ''dTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMw''@;'; put 'put ''NjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNc''@;'; put 'put ''dTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMwXVttXV09MzMyODArbSxGWzMzMjgwK21dPXhbMTMwXVttXSk7Zm9yKHhbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUz''@;'; put 'put ''MGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQy''@;'; put 'put ''XHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHVmZmZkXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUz''@;'; put 'put ''MGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlh''@;'; put 'put ''XHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUw''@;'; put 'put ''M2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMV1bbV1dPTMzNTM2K20sRlszMzUzNittXT14WzEzMV1bbV0pO2Zvcih4WzEzMl09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1''@;'; put 'put ''MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1ZmZmZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1''@;'; put 'put ''MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUy''@;'; put 'put ''Y1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzJdW21dXT0zMzc5MittLEZbMzM3OTIrbV09eFsxMzJdW21dKTtmb3IoeFsxMzVd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZcdTI0NzBcdTI0NzFc''@;'; put 'put ''dTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMz''@;'; put 'put ''NGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVcdTMyYTZcdTMyYTdc''@;'; put 'put ''dTMyYThcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM1XVttXV09MzQ1NjArbSxGWzM0NTYwK21dPXhbMTM1XVtt''@;'; put 'put ''XSk7Zm9yKHhbMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTljXHU1NTE2XHU1YTAzXHU5''@;'; put 'put ''NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2''@;'; put 'put ''XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3''@;'; put 'put ''NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJk''@;'; put 'put ''XHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNl1bbV1dPTM0ODE2K20sRlszNDgx''@;'; put 'put ''NittXT14WzEzNl1bbV0pO2Zvcih4WzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY2Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2Fi''@;'; put 'put ''YVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1''@;'; put 'put ''NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4Nlx1ZmZmZFx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVm''@;'; put 'put ''Nlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkY1x1NjJiY1x1''@;'; put 'put ''NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMx''@;'; put 'put ''Nlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1''@;'; put 'put ''ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0''@;'; put 'put ''YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzddW21dXT0z''@;'; put 'put ''NTA3MittLEZbMzUwNzIrbV09eFsxMzddW21dKTtmb3IoeFsxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2''@;'; put 'put ''OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNc''@;'; put 'put ''dTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2ZcdTY4YjZcdTlj''@;'; put 'put ''MGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVc''@;'; put 'put ''dTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3''@;'; put 'put ''ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNc''@;'; put 'put ''dTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTVi''@;'; put 'put ''MDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFl''@;'; put 'put ''W3hbMTM4XVttXV09MzUzMjgrbSxGWzM1MzI4K21dPXhbMTM4XVttXSk7Zm9yKHhbMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3''@;'; put 'put ''ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2Fj''@;'; put 'put ''XHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxXHVmZmZkXHU2''@;'; put 'put ''NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVh''@;'; put 'put ''XHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3''@;'; put 'put ''MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0''@;'; put 'put ''XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5''@;'; put 'put ''OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzldW21dLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihhZVt4WzEzOV1bbV1dPTM1NTg0K20sRlszNTU4NCttXT14WzEzOV1bbV0pO2Zvcih4WzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1''@;'; put 'put ''OTY4OFx1N2M4Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3''@;'; put 'put ''NVx1NjE3Nlx1NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1''@;'; put 'put ''OWJlOFx1ZmZmZFx1NTI4N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFj''@;'; put 'put ''Y1x1NWVmYVx1NjFiMlx1NjFmOFx1NjJmM1x1NjM3Mlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1''@;'; put 'put ''NTNiM1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2Nj''@;'; put 'put ''YVx1ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1''@;'; put 'put ''OGI3N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1NTQxMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb''@;'; put 'put ''MTQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDBdW21dXT0zNTg0MCttLEZbMzU4NDArbV09eFsxNDBdW21dKTtmb3IoeFsxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2Rc''@;'; put 'put ''dTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZl''@;'; put 'put ''MmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2Zc''@;'; put 'put ''dTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZm''@;'; put 'put ''MDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBc''@;'; put 'put ''dTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZi''@;'; put 'put ''NzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNc''@;'; put 'put ''dTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlcdTUzMTlcdTUxOGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDFdLmxlbmd0aDsr''@;'; put 'put ''K20pNjU1MzMhPT14WzE0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQxXVttXV09MzYwOTYrbSxGWzM2MDk2K21dPXhbMTQxXVttXSk7Zm9yKHhbMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmRmXHU2MmY2XHU2NGFl''@;'; put 'put ''XHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4''@;'; put 'put ''Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVj''@;'; put 'put ''XHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyXHVmZmZkXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2''@;'; put 'put ''YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJi''@;'; put 'put ''XHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2''@;'; put 'put ''MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4''@;'; put 'put ''XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb''@;'; put 'put ''MTQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0Ml1bbV1dPTM2MzUyK20sRlszNjM1MittXT14WzE0Ml1bbV0pO2Zvcih4WzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI5''@;'; put 'put ''N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1''@;'; put 'put ''NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIx''@;'; put 'put ''Y1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmM1x1ZmZmZFx1NmU5Nlx1NmY2NFx1NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1''@;'; put 'put ''ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMx''@;'; put 'put ''YVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1''@;'; put 'put ''NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUx''@;'; put 'put ''ZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLG09MDttIT14WzE0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDNdW21dXT0zNjYwOCttLEZbMzY2MDgrbV09eFsxNDNdW21dKTtmb3IoeFsxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJc''@;'; put 'put ''dTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThh''@;'; put 'put ''MGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVc''@;'; put 'put ''dTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYy''@;'; put 'put ''MTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJc''@;'; put 'put ''dTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgy''@;'; put 'put ''MGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ0XVttXV09MzY4NjQrbSxGWzM2ODY0K21dPXhbMTQ0XVttXSk7Zm9yKHhbMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2Nl''@;'; put 'put ''XHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1''@;'; put 'put ''OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiXHVmZmZkXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDlj''@;'; put 'put ''XHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2''@;'; put 'put ''ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUz''@;'; put 'put ''XHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5''@;'; put 'put ''ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2Vh''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NV1bbV1dPTM3MTIwK20sRlszNzEyMCttXT14WzE0NV1bbV0pO2Zvcih4WzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVl''@;'; put 'put ''Nlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1''@;'; put 'put ''NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNFx1ZmZmZFx1OTAxMFx1NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1Njdm''@;'; put 'put ''MVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNVx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1''@;'; put 'put ''NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQy''@;'; put 'put ''NVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1''@;'; put 'put ''OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFl''@;'; put 'put ''Nlx1OGU0NFx1OTAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDZdW21dXT0zNzM3NittLEZbMzczNzYrbV09eFsxNDZdW21dKTtmb3IoeFsxNDddPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTky''@;'; put 'put ''NDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFc''@;'; put 'put ''dTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNcdWZmZmRcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYy''@;'; put 'put ''OTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZc''@;'; put 'put ''dTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcy''@;'; put 'put ''NzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2Yzdc''@;'; put 'put ''dTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2''@;'; put 'put ''NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ3XVttXV09Mzc2MzIrbSxGWzM3NjMyK21dPXhbMTQ3XVttXSk7Zm9yKHhb''@;'; put 'put ''MTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2''@;'; put 'put ''NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1''@;'; put 'put ''XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1XHVmZmZkXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4''@;'; put 'put ''NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3''@;'; put 'put ''XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1''@;'; put 'put ''ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUx''@;'; put 'put ''XHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1''@;'; put 'put ''YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OF1bbV1dPTM3ODg4K20sRlszNzg4OCttXT14WzE0''@;'; put 'put ''OF1bbV0pO2Zvcih4WzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1''@;'; put 'put ''Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2''@;'; put 'put ''Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3N1x1ZmZmZFx1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1''@;'; put 'put ''ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODkw''@;'; put 'put ''N1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1''@;'; put 'put ''NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEy''@;'; put 'put ''OVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1''@;'; put 'put ''NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDldW21dXT0zODE0NCttLEZb''@;'; put 'put ''MzgxNDQrbV09eFsxNDldW21dKTtmb3IoeFsxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFc''@;'; put 'put ''dTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2''@;'; put 'put ''MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJc''@;'; put 'put ''dTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZm''@;'; put 'put ''MmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThc''@;'; put 'put ''dTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0''@;'; put 'put ''OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRc''@;'; put 'put ''dTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUwXVtt''@;'; put 'put ''XV09Mzg0MDArbSxGWzM4NDAwK21dPXhbMTUwXVttXSk7Zm9yKHhbMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgy''@;'; put 'put ''XHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1''@;'; put 'put ''ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHVmZmZkXHU2YzgzXHU2ZDc0''@;'; put 'put ''XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3''@;'; put 'put ''NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVj''@;'; put 'put ''XHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3''@;'; put 'put ''NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2''@;'; put 'put ''XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTFdW21dLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihhZVt4WzE1MV1bbV1dPTM4NjU2K20sRlszODY1NittXT14WzE1MV1bbV0pO2Zvcih4WzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRl''@;'; put 'put ''Zlx1OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1''@;'; put 'put ''OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGVi''@;'; put 'put ''M1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1''@;'; put 'put ''NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAw''@;'; put 'put ''Nlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUyXVttXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoYWVbeFsxNTJdW21dXT0zODkxMittLEZbMzg5MTIrbV09eFsxNTJdW21dKTtmb3IoeFsxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUw''@;'; put 'put ''ZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVc''@;'; put 'put ''dTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUx''@;'; put 'put ''ZTlcdTUxZWRcdWZmZmRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRc''@;'; put 'put ''dTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUz''@;'; put 'put ''MTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVc''@;'; put 'put ''dTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0''@;'; put 'put ''NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YThcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTNdLmxlbmd0aDsrK20pNjU1MzMh''@;'; put 'put ''PT14WzE1M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUzXVttXV09MzkxNjgrbSxGWzM5MTY4K21dPXhbMTUzXVttXSk7Zm9yKHhbMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1''@;'; put 'put ''NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlm''@;'; put 'put ''XHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1''@;'; put 'put ''NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHVmZmZkXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQx''@;'; put 'put ''XHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1''@;'; put 'put ''NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5''@;'; put 'put ''XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1''@;'; put 'put ''OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU0XS5sZW5n''@;'; put 'put ''dGg7KyttKTY1NTMzIT09eFsxNTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1NF1bbV1dPTM5NDI0K20sRlszOTQyNCttXT14WzE1NF1bbV0pO2Zvcih4WzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk3OFx1NTk4MVx1''@;'; put 'put ''NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFj''@;'; put 'put ''Ylx1NWFjMlx1NWFiZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1''@;'; put 'put ''NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1NWI3YVx1NWI4MFx1ZmZmZFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMw''@;'; put 'put ''ZFx1NWMxM1x1NWMyMFx1NWMyMlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1M1x1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1''@;'; put 'put ''NWNjNVx1NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3''@;'; put 'put ''M1x1NWQ3Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1''@;'; put 'put ''NWUzN1x1NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt''@;'; put 'put ''IT14WzE1NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTVdW21dXT0zOTY4MCttLEZbMzk2ODArbV09eFsxNTVdW21dKTtmb3IoeFsxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVm''@;'; put 'put ''NDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJc''@;'; put 'put ''dTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYw''@;'; put 'put ''NGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZc''@;'; put 'put ''dTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYx''@;'; put 'put ''NDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlc''@;'; put 'put ''dTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZmZmRcdWZmZmRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxtPTA7bSE9eFsxNTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU2XVttXV09Mzk5MzYrbSxGWzM5OTM2K21dPXhbMTU2XVttXSk7Zm9yKHhbMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2''@;'; put 'put ''MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2''@;'; put 'put ''XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiXHVmZmZkXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2''@;'; put 'put ''NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFj''@;'; put 'put ''XHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2''@;'; put 'put ''NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2''@;'; put 'put ''XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1N11bbV1dPTQwMTkyK20sRls0MDE5MittXT14WzE1N11bbV0pO2Zvcih4WzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1''@;'; put 'put ''Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1Njdl''@;'; put 'put ''ZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0ZVx1ZmZmZFx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1''@;'; put 'put ''NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZFx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1Njhl''@;'; put 'put ''MFx1NjhlZlx1NjkyOFx1NjkyYVx1NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1''@;'; put 'put ''NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEw''@;'; put 'put ''NVx1NjliMVx1NmExZVx1NjllZFx1NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1''@;'; put 'put ''NmFhM1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNThdW21dXT00MDQ0OCttLEZbNDA0NDgrbV09eFsxNThdW21dKTtmb3IoeFsxNTldPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFc''@;'; put 'put ''dTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZi''@;'; put 'put ''YWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJc''@;'; put 'put ''dTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZk''@;'; put 'put ''MmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVc''@;'; put 'put ''dTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZl''@;'; put 'put ''ZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFc''@;'; put 'put ''dTZlZWZcdTZmMzJcdTZlY2NcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU5XVttXV09NDA3MDQrbSxGWzQwNzA0K21dPXhbMTU5XVttXSk7Zm9yKHhbMjI0XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2''@;'; put 'put ''XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3''@;'; put 'put ''MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkXHVmZmZkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYy''@;'; put 'put ''XHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3''@;'; put 'put ''MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUy''@;'; put 'put ''XHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3''@;'; put 'put ''M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDll''@;'; put 'put ''XHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0pO2Zv''@;'; put 'put ''cih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUx''@;'; put 'put ''NVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUyY1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1''@;'; put 'put ''NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1NzVmZlx1ZmZmZFx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYw''@;'; put 'put ''ZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MFx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1''@;'; put 'put ''NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1Nzcw''@;'; put 'put ''NFx1NzcyOVx1NzcyNFx1NzcxZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1''@;'; put 'put ''NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1Nzhj''@;'; put 'put ''Nlx1NzhjYlx1NzhkNFx1NzhiZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDArbV09''@;'; put 'put ''eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5''@;'; put 'put ''NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFc''@;'; put 'put ''dTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjBcdWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdh''@;'; put 'put ''YzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRc''@;'; put 'put ''dTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdi''@;'; put 'put ''YjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZc''@;'; put 'put ''dTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdj''@;'; put 'put ''ZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4NTYr''@;'; put 'put ''bSxGWzU3ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3''@;'; put 'put ''ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4''@;'; put 'put ''XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3XHVmZmZkXHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3''@;'; put 'put ''ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNh''@;'; put 'put ''XHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3''@;'; put 'put ''ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNi''@;'; put 'put ''XHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4''@;'; put 'put ''MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIy''@;'; put 'put ''N11bbV1dPTU4MTEyK20sRls1ODExMittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1''@;'; put 'put ''ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFk''@;'; put 'put ''YVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ZmZmZFx1ODI2Mlx1''@;'; put 'put ''ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJk''@;'; put 'put ''Y1x1ODMwOVx1ODJkOVx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1''@;'; put 'put ''ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQz''@;'; put 'put ''Y1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1''@;'; put 'put ''ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoYWVbeFsyMjhdW21dXT01ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFc''@;'; put 'put ''dTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2''@;'; put 'put ''MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNc''@;'; put 'put ''dWZmZmRcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3''@;'; put 'put ''NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZc''@;'; put 'put ''dTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4''@;'; put 'put ''N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNc''@;'; put 'put ''dTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOV1b''@;'; put 'put ''bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0''@;'; put 'put ''XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4''@;'; put 'put ''YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWVi''@;'; put 'put ''XHU4YWYzXHU4YWU3XHVmZmZkXHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4''@;'; put 'put ''YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1''@;'; put 'put ''XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4''@;'; put 'put ''Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRi''@;'; put 'put ''XHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7KyttKTY1''@;'; put 'put ''NTMzIT09eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1bbV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1''@;'; put 'put ''MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1''@;'; put 'put ''OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0''@;'; put 'put ''OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1Y1x1ZmZmZFx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1''@;'; put 'put ''OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OGZmOFx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4''@;'; put 'put ''MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1''@;'; put 'put ''OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0''@;'; put 'put ''NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMV0u''@;'; put 'put ''bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkxMzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTlcdTkz''@;'; put 'put ''MjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRc''@;'; put 'put ''dTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1''@;'; put 'put ''ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJc''@;'; put 'put ''dTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2''@;'; put 'put ''YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZc''@;'; put 'put ''dTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3''@;'; put 'put ''YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxt''@;'; put 'put ''PTA7bSE9eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQy''@;'; put 'put ''XHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5''@;'; put 'put ''YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHVmZmZkXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQx''@;'; put 'put ''XHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3XHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5''@;'; put 'put ''YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0''@;'; put 'put ''XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5''@;'; put 'put ''YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksbT0wO20hPXhbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRk''@;'; put 'put ''OVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1''@;'; put 'put ''OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZlx1ZmZmZFx1OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1''@;'; put 'put ''Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMFx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRm''@;'; put 'put ''OTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJc''@;'; put 'put ''dTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTVi''@;'; put 'put ''ZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdc''@;'; put 'put ''dTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5''@;'; put 'put ''MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdc''@;'; put 'put ''dTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcx''@;'; put 'put ''ZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM3XVttXV09NjA2NzIrbSxGWzYwNjcyK21dPXhbMjM3XVttXSk7Zm9yKHhbMjM4XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3''@;'; put 'put ''NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3''@;'; put 'put ''XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHVmZmZkXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4''@;'; put 'put ''YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEw''@;'; put 'put ''XHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5''@;'; put 'put ''MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJj''@;'; put 'put ''XHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVm''@;'; put 'put ''ZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOF1bbV1dPTYwOTI4K20sRls2MDkyOCttXT14WzIzOF1bbV0pO2Zvcih4WzI1MF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1''@;'; put 'put ''MjE2OFx1MjE2OVx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MjIzNVx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYz''@;'; put 'put ''OVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1ZmZmZFx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1''@;'; put 'put ''NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlh''@;'; put 'put ''NFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1''@;'; put 'put ''NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZh''@;'; put 'put ''MFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1''@;'; put 'put ''NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTBdW21dXT02NGUzK20sRls2NGUzK21dPXhbMjUwXVttXSk7''@;'; put 'put ''Zm9yKHhbMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3''@;'; put 'put ''MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYy''@;'; put 'put ''XHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3''@;'; put 'put ''YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1''@;'; put 'put ''XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5''@;'; put 'put ''MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZi''@;'; put 'put ''XHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5''@;'; put 'put ''ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MV1bbV1dPTY0MjU2K20sRls2NDI1Nitt''@;'; put 'put ''XT14WzI1MV1bbV0pO2Zvcih4WzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTJdW21dXT02NDUx''@;'; put 'put ''MittLEZbNjQ1MTIrbV09eFsyNTJdW21dKTtyZXR1cm57ZW5jOmFlLGRlYzpGfX0oKSxJZVs5MzZdPWZ1bmN0aW9uKCl7dmFyIG0sRj1bXSxhZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4''@;'; put 'put ''MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4''@;'; put 'put ''WzBdW21dXT0wK20sRlswK21dPXhbMF1bbV0pO2Zvcih4WzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUy''@;'; put 'put ''Nlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YVx1NGU2Ylx1''@;'; put 'put ''NGU2Y1x1NGU2ZFx1NGU2ZVx1NGU2Zlx1NGU3Mlx1NGU3NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4NVx1NGU4N1x1NGU4YVx1ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5''@;'; put 'put ''N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1''@;'; put 'put ''NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYwYlx1NGYwY1x1NGYxMlx1NGYxM1x1NGYxNFx1NGYxNVx1NGYx''@;'; put 'put ''Nlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1NGY0NVx1NGY0N1x1NGY0OFx1NGY0OVx1NGY0YVx1NGY0Ylx1''@;'; put 'put ''NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4''@;'; put 'put ''Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb''@;'; put 'put ''eFsxMjldW21dXT0zMzAyNCttLEZbMzMwMjQrbV09eFsxMjldW21dKTtmb3IoeFsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjBcdTRmYjFcdTRmYjJcdTRmYjNcdTRmYjRcdTRmYjZcdTRm''@;'; put 'put ''YjdcdTRmYjhcdTRmYjlcdTRmYmFcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZcdTRmYzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmZDJcdTRmZDNcdTRmZDRcdTRmZDVcdTRmZDZcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJcdTRmZTRc''@;'; put 'put ''dTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRmZmJcdTRmZmNcdTRmZmRcdTRmZmZcdTUwMDBcdTUwMDFcdTUwMDJcdTUwMDNcdTUwMDRcdTUwMDVcdTUwMDZcdTUwMDdcdTUwMDhcdTUwMDlcdTUwMGFcdWZmZmRcdTUw''@;'; put 'put ''MGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUwMTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJcdTUwMWRcdTUwMWVcdTUwMjBcdTUwMjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUwMmJcdTUwMmZcdTUwMzBcdTUwMzFcdTUwMzJcdTUwMzNcdTUwMzRcdTUwMzVcdTUwMzZcdTUwMzdcdTUwMzhcdTUwMzlc''@;'; put 'put ''dTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJcdTUwNGRcdTUwNTBcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTRcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWRcdTUwNWVcdTUwNWZcdTUwNjBcdTUw''@;'; put 'put ''NjFcdTUwNjJcdTUwNjNcdTUwNjRcdTUwNjZcdTUwNjdcdTUwNjhcdTUwNjlcdTUwNmFcdTUwNmJcdTUwNmRcdTUwNmVcdTUwNmZcdTUwNzBcdTUwNzFcdTUwNzJcdTUwNzNcdTUwNzRcdTUwNzVcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRc''@;'; put 'put ''dTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUwOGVcdTUwOGZcdTUwOTBcdTUwOTFcdTUwOTJcdTUwOTNcdTUwOTRcdTUwOTVcdTUwOTZcdTUwOTdcdTUwOThcdTUwOTlcdTUwOWFcdTUwOWJcdTUwOWNcdTUwOWRcdTUwOWVcdTUwOWZcdTUwYTBcdTUwYTFcdTUwYTJcdTUw''@;'; put 'put ''YTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUwYWRcdTUwYWVcdTUwYWZcdTUwYjBcdTUwYjFcdTUwYjNcdTUwYjRcdTUwYjVcdTUwYjZcdTUwYjdcdTUwYjhcdTUwYjlcdTUwYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMF1bbV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGFlW3hbMTMwXVttXV09MzMyODArbSxGWzMzMjgwK21dPXhbMTMwXVttXSk7Zm9yKHhbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGJkXHU1MGJlXHU1MGJmXHU1MGMwXHU1MGMxXHU1MGMyXHU1MGMzXHU1''@;'; put 'put ''MGM0XHU1MGM1XHU1MGM2XHU1MGM3XHU1MGM4XHU1MGM5XHU1MGNhXHU1MGNiXHU1MGNjXHU1MGNkXHU1MGNlXHU1MGQwXHU1MGQxXHU1MGQyXHU1MGQzXHU1MGQ0XHU1MGQ1XHU1MGQ3XHU1MGQ4XHU1MGQ5XHU1MGRiXHU1MGRjXHU1MGRkXHU1MGRlXHU1MGRmXHU1MGUwXHU1MGUxXHU1MGUy''@;'; put 'put ''XHU1MGUzXHU1MGU0XHU1MGU1XHU1MGU4XHU1MGU5XHU1MGVhXHU1MGViXHU1MGVmXHU1MGYwXHU1MGYxXHU1MGYyXHU1MGY0XHU1MGY2XHU1MGY3XHU1MGY4XHU1MGY5XHU1MGZhXHU1MGZjXHU1MGZkXHU1MGZlXHU1MGZmXHU1MTAwXHU1MTAxXHU1MTAyXHU1MTAzXHU1MTA0XHU1MTA1XHU1''@;'; put 'put ''MTA4XHVmZmZkXHU1MTA5XHU1MTBhXHU1MTBjXHU1MTBkXHU1MTBlXHU1MTBmXHU1MTEwXHU1MTExXHU1MTEzXHU1MTE0XHU1MTE1XHU1MTE2XHU1MTE3XHU1MTE4XHU1MTE5XHU1MTFhXHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1MTFmXHU1MTIwXHU1MTIyXHU1MTIzXHU1MTI0XHU1MTI1''@;'; put 'put ''XHU1MTI2XHU1MTI3XHU1MTI4XHU1MTI5XHU1MTJhXHU1MTJiXHU1MTJjXHU1MTJkXHU1MTJlXHU1MTJmXHU1MTMwXHU1MTMxXHU1MTMyXHU1MTMzXHU1MTM0XHU1MTM1XHU1MTM2XHU1MTM3XHU1MTM4XHU1MTM5XHU1MTNhXHU1MTNiXHU1MTNjXHU1MTNkXHU1MTNlXHU1MTQyXHU1MTQ3XHU1''@;'; put 'put ''MTRhXHU1MTRjXHU1MTRlXHU1MTRmXHU1MTUwXHU1MTUyXHU1MTUzXHU1MTU3XHU1MTU4XHU1MTU5XHU1MTViXHU1MTVkXHU1MTVlXHU1MTVmXHU1MTYwXHU1MTYxXHU1MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZhXHU1MTZmXHU1MTcyXHU1MTdhXHU1MTdlXHU1MTdmXHU1MTgz''@;'; put 'put ''XHU1MTg0XHU1MTg2XHU1MTg3XHU1MThhXHU1MThiXHU1MThlXHU1MThmXHU1MTkwXHU1MTkxXHU1MTkzXHU1MTk0XHU1MTk4XHU1MTlhXHU1MTlkXHU1MTllXHU1MTlmXHU1MWExXHU1MWEzXHU1MWE2XHU1MWE3XHU1MWE4XHU1MWE5XHU1MWFhXHU1MWFkXHU1MWFlXHU1MWI0XHU1MWI4XHU1''@;'; put 'put ''MWI5XHU1MWJhXHU1MWJlXHU1MWJmXHU1MWMxXHU1MWMyXHU1MWMzXHU1MWM1XHU1MWM4XHU1MWNhXHU1MWNkXHU1MWNlXHU1MWQwXHU1MWQyXHU1MWQzXHU1MWQ0XHU1MWQ1XHU1MWQ2XHU1MWQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsx''@;'; put 'put ''MzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMV1bbV1dPTMzNTM2K20sRlszMzUzNittXT14WzEzMV1bbV0pO2Zvcih4WzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1''@;'; put 'put ''NTFkZlx1NTFlMlx1NTFlM1x1NTFlNVx1NTFlNlx1NTFlN1x1NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIx''@;'; put 'put ''ZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0OVx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1''@;'; put 'put ''NTI1NVx1NTI1N1x1NTI1OFx1ZmZmZFx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1NTI3NFx1NTI3NVx1NTI3Nlx1NTI3N1x1NTI3OFx1NTI3''@;'; put 'put ''OVx1NTI3YVx1NTI3Ylx1NTI3Y1x1NTI3ZVx1NTI4MFx1NTI4M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5OVx1NTI5YVx1NTI5Y1x1''@;'; put 'put ''NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJj''@;'; put 'put ''ZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJkZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJlYVx1NTJlYlx1NTJlY1x1NTJlZFx1NTJlZVx1NTJlZlx1''@;'; put 'put ''NTJmMVx1NTJmMlx1NTJmM1x1NTJmNFx1NTJmNVx1NTJmNlx1NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMl0ubGVuZ3RoOysr''@;'; put 'put ''bSk2NTUzMyE9PXhbMTMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzJdW21dXT0zMzc5MittLEZbMzM3OTIrbV09eFsxMzJdW21dKTtmb3IoeFsxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMTFcdTUzMTJcdTUzMTNc''@;'; put 'put ''dTUzMTRcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUzMmZcdTUzMzBcdTUzMzFcdTUzMzJcdTUzMzNcdTUzMzRcdTUzMzVcdTUzMzZcdTUzMzdcdTUzMzhcdTUzM2NcdTUzM2RcdTUz''@;'; put 'put ''NDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUzNWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNc''@;'; put 'put ''dTUzODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGZcdWZmZmRcdTUzOTBcdTUzOTFcdTUzOTJcdTUzOTNcdTUzOTRcdTUzOTZcdTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWZcdTUzYjBcdTUz''@;'; put 'put ''YjFcdTUzYjJcdTUzYjNcdTUzYjRcdTUzYjVcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUzYzBcdTUzYzNcdTUzYzRcdTUzYzVcdTUzYzZcdTUzYzdcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVc''@;'; put 'put ''dTUzZTFcdTUzZTJcdTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZcdTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJcdTU0MTRcdTU0MThcdTU0MTlcdTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0''@;'; put 'put ''M2ZcdTU0NDFcdTU0NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0NWFcdTU0NWRcdTU0NWVcdTU0NWZcdTU0NjBcdTU0NjFcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjlcdTU0NmFcdTU0NmJcdTU0NmNcdTU0NmRcdTU0NmVcdTU0NmZc''@;'; put 'put ''dTU0NzBcdTU0NzRcdTU0NzlcdTU0N2FcdTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlcdTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNcdTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsx''@;'; put 'put ''MzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMzXVttXV09MzQwNDgrbSxGWzM0MDQ4K21dPXhbMTMzXVttXSk7Zm9yKHhbMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGEy''@;'; put 'put ''XHU1NGE1XHU1NGFlXHU1NGIwXHU1NGIyXHU1NGI1XHU1NGI2XHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJjXHU1NGJlXHU1NGMzXHU1NGM1XHU1NGNhXHU1NGNiXHU1NGQ2XHU1NGQ4XHU1NGRiXHU1NGUwXHU1NGUxXHU1NGUyXHU1NGUzXHU1NGU0XHU1NGViXHU1NGVjXHU1NGVmXHU1NGYwXHU1''@;'; put 'put ''NGYxXHU1NGY0XHU1NGY1XHU1NGY2XHU1NGY3XHU1NGY4XHU1NGY5XHU1NGZiXHU1NGZlXHU1NTAwXHU1NTAyXHU1NTAzXHU1NTA0XHU1NTA1XHU1NTA4XHU1NTBhXHU1NTBiXHU1NTBjXHU1NTBkXHU1NTBlXHU1NTEyXHU1NTEzXHU1NTE1XHU1NTE2XHU1NTE3XHU1NTE4XHU1NTE5XHU1NTFh''@;'; put 'put ''XHU1NTFjXHU1NTFkXHU1NTFlXHU1NTFmXHU1NTIxXHU1NTI1XHU1NTI2XHVmZmZkXHU1NTI4XHU1NTI5XHU1NTJiXHU1NTJkXHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2XHU1NTM4XHU1NTM5XHU1NTNhXHU1NTNiXHU1NTNkXHU1NTQwXHU1NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRiXHU1''@;'; put 'put ''NTRjXHU1NTRkXHU1NTRlXHU1NTRmXHU1NTUxXHU1NTUyXHU1NTUzXHU1NTU0XHU1NTU3XHU1NTU4XHU1NTU5XHU1NTVhXHU1NTViXHU1NTVkXHU1NTVlXHU1NTVmXHU1NTYwXHU1NTYyXHU1NTYzXHU1NTY4XHU1NTY5XHU1NTZiXHU1NTZmXHU1NTcwXHU1NTcxXHU1NTcyXHU1NTczXHU1NTc0''@;'; put 'put ''XHU1NTc5XHU1NTdhXHU1NTdkXHU1NTdmXHU1NTg1XHU1NTg2XHU1NThjXHU1NThkXHU1NThlXHU1NTkwXHU1NTkyXHU1NTkzXHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlhXHU1NTliXHU1NTllXHU1NWEwXHU1NWExXHU1NWEyXHU1NWEzXHU1NWE0XHU1NWE1XHU1NWE2XHU1NWE4XHU1NWE5XHU1''@;'; put 'put ''NWFhXHU1NWFiXHU1NWFjXHU1NWFkXHU1NWFlXHU1NWFmXHU1NWIwXHU1NWIyXHU1NWI0XHU1NWI2XHU1NWI4XHU1NWJhXHU1NWJjXHU1NWJmXHU1NWMwXHU1NWMxXHU1NWMyXHU1NWMzXHU1NWM2XHU1NWM3XHU1NWM4XHU1NWNhXHU1NWNiXHU1NWNlXHU1NWNmXHU1NWQwXHU1NWQ1XHU1NWQ3''@;'; put 'put ''XHU1NWQ4XHU1NWQ5XHU1NWRhXHU1NWRiXHU1NWRlXHU1NWUwXHU1NWUyXHU1NWU3XHU1NWU5XHU1NWVkXHU1NWVlXHU1NWYwXHU1NWYxXHU1NWY0XHU1NWY2XHU1NWY4XHU1NWY5XHU1NWZhXHU1NWZiXHU1NWZjXHU1NWZmXHU1NjAyXHU1NjAzXHU1NjA0XHU1NjA1XHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksbT0wO20hPXhbMTM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNF1bbV1dPTM0MzA0K20sRlszNDMwNCttXT14WzEzNF1bbV0pO2Zvcih4WzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYxNVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1''@;'; put 'put ''NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0Ylx1NTY0Zlx1NTY1MFx1NTY1MVx1NTY1Mlx1NTY1''@;'; put 'put ''M1x1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZFx1NTY1ZVx1NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZFx1''@;'; put 'put ''NTY3ZVx1NTY3Zlx1NTY4MFx1NTY4MVx1NTY4Mlx1NTY4M1x1NTY4NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5OVx1NTY5YVx1NTY5Ylx1NTY5Y1x1NTY5ZFx1NTY5''@;'; put 'put ''ZVx1NTY5Zlx1NTZhMFx1NTZhMVx1NTZhMlx1NTZhNFx1NTZhNVx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZhZVx1NTZiMFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZFx1''@;'; put 'put ''NTZiZVx1NTZiZlx1NTZjMFx1NTZjMVx1NTZjMlx1NTZjM1x1NTZjNFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZkNlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZl''@;'; put 'put ''NVx1NTZlNlx1NTZlN1x1NTZlOFx1NTZlOVx1NTZlYVx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1NTcwZFx1NTcwZVx1NTcwZlx1NTcxMFx1NTcxMVx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzVdW21dXT0zNDU2MCttLEZbMzQ1NjArbV09eFsxMzVdW21dKTtmb3IoeFsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3MTJcdTU3MTNcdTU3MTRcdTU3MTVcdTU3MTZcdTU3MTdcdTU3MThcdTU3MTlcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MWVcdTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzRcdTU3MzVc''@;'; put 'put ''dTU3MzZcdTU3MzdcdTU3MzhcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NGJcdTU3NTJcdTU3NTNcdTU3NTRcdTU3NTVcdTU3NTZcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3''@;'; put 'put ''NzBcdTU3NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODBcdWZmZmRcdTU3ODFcdTU3ODdcdTU3ODhcdTU3ODlcdTU3OGFcdTU3OGRcdTU3OGVcdTU3OGZcdTU3OTBcdTU3OTFcdTU3OTRcdTU3OTVcdTU3OTZcdTU3OTdcdTU3OThc''@;'; put 'put ''dTU3OTlcdTU3OWFcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3YjFcdTU3YjNcdTU3YjVcdTU3YjZcdTU3YjdcdTU3YjlcdTU3YmFcdTU3YmJcdTU3YmNcdTU3YmRcdTU3YmVcdTU3YmZcdTU3YzBcdTU3YzFcdTU3YzRcdTU3''@;'; put 'put ''YzVcdTU3YzZcdTU3YzdcdTU3YzhcdTU3YzlcdTU3Y2FcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTVcdTU3ZTZcdTU3ZTdcdTU3ZThcdTU3ZTlcdTU3ZWFcdTU3ZWJcdTU3ZWNcdTU3ZWVc''@;'; put 'put ''dTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhcdTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4''@;'; put 'put ''MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjVcdTU4MjZcdTU4MjdcdTU4MjhcdTU4MjlcdTU4MmJcdTU4MmNcdTU4MmRcdTU4MmVcdTU4MmZcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzZcdTU4MzdcdTU4MzhcdTU4MzlcdTU4M2FcdTU4M2Jc''@;'; put 'put ''dTU4M2NcdTU4M2RcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM2XVttXV09MzQ4MTYrbSxGWzM0ODE2K21dPXhbMTM2XVttXSk7Zm9yKHhbMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODNlXHU1ODNmXHU1ODQwXHU1ODQxXHU1ODQyXHU1ODQzXHU1ODQ1XHU1ODQ2XHU1ODQ3XHU1ODQ4XHU1ODQ5XHU1ODRhXHU1ODRiXHU1ODRlXHU1ODRmXHU1ODUwXHU1ODUyXHU1ODUzXHU1ODU1XHU1ODU2XHU1ODU3XHU1ODU5''@;'; put 'put ''XHU1ODVhXHU1ODViXHU1ODVjXHU1ODVkXHU1ODVmXHU1ODYwXHU1ODYxXHU1ODYyXHU1ODYzXHU1ODY0XHU1ODY2XHU1ODY3XHU1ODY4XHU1ODY5XHU1ODZhXHU1ODZkXHU1ODZlXHU1ODZmXHU1ODcwXHU1ODcxXHU1ODcyXHU1ODczXHU1ODc0XHU1ODc1XHU1ODc2XHU1ODc3XHU1ODc4XHU1''@;'; put 'put ''ODc5XHU1ODdhXHU1ODdiXHU1ODdjXHU1ODdkXHU1ODdmXHU1ODgyXHU1ODg0XHU1ODg2XHU1ODg3XHU1ODg4XHU1ODhhXHU1ODhiXHU1ODhjXHVmZmZkXHU1ODhkXHU1ODhlXHU1ODhmXHU1ODkwXHU1ODkxXHU1ODk0XHU1ODk1XHU1ODk2XHU1ODk3XHU1ODk4XHU1ODliXHU1ODljXHU1ODlk''@;'; put 'put ''XHU1OGEwXHU1OGExXHU1OGEyXHU1OGEzXHU1OGE0XHU1OGE1XHU1OGE2XHU1OGE3XHU1OGFhXHU1OGFiXHU1OGFjXHU1OGFkXHU1OGFlXHU1OGFmXHU1OGIwXHU1OGIxXHU1OGIyXHU1OGIzXHU1OGI0XHU1OGI1XHU1OGI2XHU1OGI3XHU1OGI4XHU1OGI5XHU1OGJhXHU1OGJiXHU1OGJkXHU1''@;'; put 'put ''OGJlXHU1OGJmXHU1OGMwXHU1OGMyXHU1OGMzXHU1OGM0XHU1OGM2XHU1OGM3XHU1OGM4XHU1OGM5XHU1OGNhXHU1OGNiXHU1OGNjXHU1OGNkXHU1OGNlXHU1OGNmXHU1OGQwXHU1OGQyXHU1OGQzXHU1OGQ0XHU1OGQ2XHU1OGQ3XHU1OGQ4XHU1OGQ5XHU1OGRhXHU1OGRiXHU1OGRjXHU1OGRk''@;'; put 'put ''XHU1OGRlXHU1OGRmXHU1OGUwXHU1OGUxXHU1OGUyXHU1OGUzXHU1OGU1XHU1OGU2XHU1OGU3XHU1OGU4XHU1OGU5XHU1OGVhXHU1OGVkXHU1OGVmXHU1OGYxXHU1OGYyXHU1OGY0XHU1OGY1XHU1OGY3XHU1OGY4XHU1OGZhXHU1OGZiXHU1OGZjXHU1OGZkXHU1OGZlXHU1OGZmXHU1OTAwXHU1''@;'; put 'put ''OTAxXHU1OTAzXHU1OTA1XHU1OTA2XHU1OTA4XHU1OTA5XHU1OTBhXHU1OTBiXHU1OTBjXHU1OTBlXHU1OTEwXHU1OTExXHU1OTEyXHU1OTEzXHU1OTE3XHU1OTE4XHU1OTFiXHU1OTFkXHU1OTFlXHU1OTIwXHU1OTIxXHU1OTIyXHU1OTIzXHU1OTI2XHU1OTI4XHU1OTJjXHU1OTMwXHU1OTMy''@;'; put 'put ''XHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzN11bbV1dPTM1MDcyK20sRlszNTA3MittXT14WzEzN11bbV0pO2Zvcih4WzEzOF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1Y1x1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2''@;'; put 'put ''MVx1NTk2M1x1NTk2NFx1NTk2Nlx1NTk2N1x1NTk2OFx1NTk2OVx1NTk2YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1''@;'; put 'put ''NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1NTliNFx1NTliNVx1NTliNlx1NTliN1x1NTli''@;'; put 'put ''OFx1NTliYVx1NTliY1x1NTliZFx1NTliZlx1NTljMFx1NTljMVx1NTljMlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlkZlx1NTllMFx1NTllMVx1NTllMlx1NTllNFx1''@;'; put 'put ''NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZFx1NTllZVx1NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEw''@;'; put 'put ''Zlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEyZlx1NWEzMFx1NWEzM1x1NWEzNVx1NWEzN1x1''@;'; put 'put ''NWEzOFx1NWEzOVx1NWEzYVx1NWEzYlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1NWE1NFx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1''@;'; put 'put ''OVx1NWE1Ylx1NWE1Y1x1NWE1ZFx1NWE1ZVx1NWE1Zlx1NWE2MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzhdW21dXT0zNTMyOCttLEZbMzUzMjgrbV09eFsxMzhdW21dKTtmb3IoeFsx''@;'; put 'put ''MzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNjFcdTVhNjNcdTVhNjRcdTVhNjVcdTVhNjZcdTVhNjhcdTVhNjlcdTVhNmJcdTVhNmNcdTVhNmRcdTVhNmVcdTVhNmZcdTVhNzBcdTVhNzFcdTVhNzJcdTVhNzNcdTVhNzhcdTVh''@;'; put 'put ''NzlcdTVhN2JcdTVhN2NcdTVhN2RcdTVhN2VcdTVhODBcdTVhODFcdTVhODJcdTVhODNcdTVhODRcdTVhODVcdTVhODZcdTVhODdcdTVhODhcdTVhODlcdTVhOGFcdTVhOGJcdTVhOGNcdTVhOGRcdTVhOGVcdTVhOGZcdTVhOTBcdTVhOTFcdTVhOTNcdTVhOTRcdTVhOTVcdTVhOTZcdTVhOTdc''@;'; put 'put ''dTVhOThcdTVhOTlcdTVhOWNcdTVhOWRcdTVhOWVcdTVhOWZcdTVhYTBcdTVhYTFcdTVhYTJcdTVhYTNcdTVhYTRcdTVhYTVcdTVhYTZcdTVhYTdcdTVhYThcdTVhYTlcdTVhYWJcdTVhYWNcdWZmZmRcdTVhYWRcdTVhYWVcdTVhYWZcdTVhYjBcdTVhYjFcdTVhYjRcdTVhYjZcdTVhYjdcdTVh''@;'; put 'put ''YjlcdTVhYmFcdTVhYmJcdTVhYmNcdTVhYmRcdTVhYmZcdTVhYzBcdTVhYzNcdTVhYzRcdTVhYzVcdTVhYzZcdTVhYzdcdTVhYzhcdTVhY2FcdTVhY2JcdTVhY2RcdTVhY2VcdTVhY2ZcdTVhZDBcdTVhZDFcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVc''@;'; put 'put ''dTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVcdTVhZTdcdTVhZThcdTVhZWFcdTVhZWNcdTVhZWRcdTVhZWVcdTVhZWZcdTVhZjBcdTVhZjJcdTVhZjNcdTVhZjRcdTVhZjVcdTVhZjZcdTVhZjdcdTVhZjhcdTVhZjlcdTVhZmFcdTVhZmJcdTVhZmNcdTVhZmRcdTVhZmVcdTVhZmZcdTViMDBcdTVi''@;'; put 'put ''MDFcdTViMDJcdTViMDNcdTViMDRcdTViMDVcdTViMDZcdTViMDdcdTViMDhcdTViMGFcdTViMGJcdTViMGNcdTViMGRcdTViMGVcdTViMGZcdTViMTBcdTViMTFcdTViMTJcdTViMTNcdTViMTRcdTViMTVcdTViMThcdTViMTlcdTViMWFcdTViMWJcdTViMWNcdTViMWRcdTViMWVcdTViMWZc''@;'; put 'put ''dTViMjBcdTViMjFcdTViMjJcdTViMjNcdTViMjRcdTViMjVcdTViMjZcdTViMjdcdTViMjhcdTViMjlcdTViMmFcdTViMmJcdTViMmNcdTViMmRcdTViMmVcdTViMmZcdTViMzBcdTViMzFcdTViMzNcdTViMzVcdTViMzZcdTViMzhcdTViMzlcdTViM2FcdTViM2JcdTViM2NcdTViM2RcdTVi''@;'; put 'put ''M2VcdTViM2ZcdTViNDFcdTViNDJcdTViNDNcdTViNDRcdTViNDVcdTViNDZcdTViNDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM5XVttXV09MzU1ODQrbSxGWzM1NTg0K21dPXhbMTM5''@;'; put 'put ''XVttXSk7Zm9yKHhbMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YjQ4XHU1YjQ5XHU1YjRhXHU1YjRiXHU1YjRjXHU1YjRkXHU1YjRlXHU1YjRmXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjYwXHU1YjYxXHU1YjY3XHU1YjY4XHU1''@;'; put 'put ''YjZiXHU1YjZkXHU1YjZlXHU1YjZmXHU1YjcyXHU1Yjc0XHU1Yjc2XHU1Yjc3XHU1Yjc4XHU1Yjc5XHU1YjdiXHU1YjdjXHU1YjdlXHU1YjdmXHU1YjgyXHU1Yjg2XHU1YjhhXHU1YjhkXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkyXHU1Yjk0XHU1Yjk2XHU1YjlmXHU1YmE3XHU1YmE4XHU1YmE5''@;'; put 'put ''XHU1YmFjXHU1YmFkXHU1YmFlXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJiXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmMzXHU1YmM4XHU1YmM5XHU1YmNhXHU1YmNiXHU1YmNkXHU1YmNlXHU1YmNmXHVmZmZkXHU1YmQxXHU1YmQ0XHU1YmQ1XHU1YmQ2XHU1YmQ3XHU1YmQ4XHU1''@;'; put 'put ''YmQ5XHU1YmRhXHU1YmRiXHU1YmRjXHU1YmUwXHU1YmUyXHU1YmUzXHU1YmU2XHU1YmU3XHU1YmU5XHU1YmVhXHU1YmViXHU1YmVjXHU1YmVkXHU1YmVmXHU1YmYxXHU1YmYyXHU1YmYzXHU1YmY0XHU1YmY1XHU1YmY2XHU1YmY3XHU1YmZkXHU1YmZlXHU1YzAwXHU1YzAyXHU1YzAzXHU1YzA1''@;'; put 'put ''XHU1YzA3XHU1YzA4XHU1YzBiXHU1YzBjXHU1YzBkXHU1YzBlXHU1YzEwXHU1YzEyXHU1YzEzXHU1YzE3XHU1YzE5XHU1YzFiXHU1YzFlXHU1YzFmXHU1YzIwXHU1YzIxXHU1YzIzXHU1YzI2XHU1YzI4XHU1YzI5XHU1YzJhXHU1YzJiXHU1YzJkXHU1YzJlXHU1YzJmXHU1YzMwXHU1YzMyXHU1''@;'; put 'put ''YzMzXHU1YzM1XHU1YzM2XHU1YzM3XHU1YzQzXHU1YzQ0XHU1YzQ2XHU1YzQ3XHU1YzRjXHU1YzRkXHU1YzUyXHU1YzUzXHU1YzU0XHU1YzU2XHU1YzU3XHU1YzU4XHU1YzVhXHU1YzViXHU1YzVjXHU1YzVkXHU1YzVmXHU1YzYyXHU1YzY0XHU1YzY3XHU1YzY4XHU1YzY5XHU1YzZhXHU1YzZi''@;'; put 'put ''XHU1YzZjXHU1YzZkXHU1YzcwXHU1YzcyXHU1YzczXHU1Yzc0XHU1Yzc1XHU1Yzc2XHU1Yzc3XHU1Yzc4XHU1YzdiXHU1YzdjXHU1YzdkXHU1YzdlXHU1YzgwXHU1YzgzXHU1Yzg0XHU1Yzg1XHU1Yzg2XHU1Yzg3XHU1Yzg5XHU1YzhhXHU1YzhiXHU1YzhlXHU1YzhmXHU1YzkyXHU1YzkzXHU1''@;'; put 'put ''Yzk1XHU1YzlkXHU1YzllXHU1YzlmXHU1Y2EwXHU1Y2ExXHU1Y2E0XHU1Y2E1XHU1Y2E2XHU1Y2E3XHU1Y2E4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MF1bbV1dPTM1ODQwK20sRlsz''@;'; put 'put ''NTg0MCttXT14WzE0MF1bbV0pO2Zvcih4WzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1''@;'; put 'put ''NWNjMlx1NWNjM1x1NWNjNVx1NWNjNlx1NWNjN1x1NWNjOFx1NWNjOVx1NWNjYVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNkZFx1NWNkZVx1NWNkZlx1NWNlMFx1NWNl''@;'; put 'put ''Mlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNmNVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNmOVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1NWQwMVx1NWQwNFx1NWQwNVx1NWQwOFx1''@;'; put 'put ''NWQwOVx1NWQwYVx1NWQwYlx1NWQwY1x1NWQwZFx1NWQwZlx1NWQxMFx1NWQxMVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQyOFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQy''@;'; put 'put ''Zlx1NWQzMFx1NWQzMVx1NWQzMlx1NWQzM1x1NWQzNVx1NWQzNlx1NWQzN1x1NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQzY1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1NWQ0ZVx1NWQ0Zlx1NWQ1MFx1NWQ1MVx1''@;'; put 'put ''NWQ1Mlx1NWQ1M1x1NWQ1NFx1NWQ1NVx1NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3''@;'; put 'put ''NVx1NWQ3Nlx1NWQ3N1x1NWQ3OFx1NWQ3OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1NWQ4ZVx1NWQ4Zlx1NWQ5MFx1NWQ5MVx1''@;'; put 'put ''NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDFdW21d''@;'; put 'put ''XT0zNjA5NittLEZbMzYwOTYrbV09eFsxNDFdW21dKTtmb3IoeFsxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkYTFcdTVkYTJcdTVkYTNcdTVkYTRcdTVkYTVcdTVkYTZcdTVkYTdcdTVkYThcdTVkYTlcdTVkYWFcdTVkYWJc''@;'; put 'put ''dTVkYWNcdTVkYWRcdTVkYWVcdTVkYWZcdTVkYjBcdTVkYjFcdTVkYjJcdTVkYjNcdTVkYjRcdTVkYjVcdTVkYjZcdTVkYjhcdTVkYjlcdTVkYmFcdTVkYmJcdTVkYmNcdTVkYmRcdTVkYmVcdTVkYmZcdTVkYzBcdTVkYzFcdTVkYzJcdTVkYzNcdTVkYzRcdTVkYzZcdTVkYzdcdTVkYzhcdTVk''@;'; put 'put ''YzlcdTVkY2FcdTVkY2JcdTVkY2NcdTVkY2VcdTVkY2ZcdTVkZDBcdTVkZDFcdTVkZDJcdTVkZDNcdTVkZDRcdTVkZDVcdTVkZDZcdTVkZDdcdTVkZDhcdTVkZDlcdTVkZGFcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWRcdWZmZmRcdTVkZjBcdTVkZjVc''@;'; put 'put ''dTVkZjZcdTVkZjhcdTVkZjlcdTVkZmFcdTVkZmJcdTVkZmNcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJcdTVlMTNcdTVlMTdcdTVlMWVcdTVlMWZcdTVlMjBcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjRcdTVlMjVcdTVlMjhcdTVl''@;'; put 'put ''MjlcdTVlMmFcdTVlMmJcdTVlMmNcdTVlMmZcdTVlMzBcdTVlMzJcdTVlMzNcdTVlMzRcdTVlMzVcdTVlMzZcdTVlMzlcdTVlM2FcdTVlM2VcdTVlM2ZcdTVlNDBcdTVlNDFcdTVlNDNcdTVlNDZcdTVlNDdcdTVlNDhcdTVlNDlcdTVlNGFcdTVlNGJcdTVlNGRcdTVlNGVcdTVlNGZcdTVlNTBc''@;'; put 'put ''dTVlNTFcdTVlNTJcdTVlNTNcdTVlNTZcdTVlNTdcdTVlNThcdTVlNTlcdTVlNWFcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjNcdTVlNjRcdTVlNjVcdTVlNjZcdTVlNjdcdTVlNjhcdTVlNjlcdTVlNmFcdTVlNmJcdTVlNmNcdTVlNmRcdTVlNmVcdTVlNmZcdTVlNzBcdTVlNzFcdTVl''@;'; put 'put ''NzVcdTVlNzdcdTVlNzlcdTVlN2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVlOGRcdTVlOGVcdTVlOTJcdTVlOThcdTVlOWJcdTVlOWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYThcdTVlYTlcdTVlYWFcdTVlYWJcdTVlYWNcdTVlYWVcdTVlYWZc''@;'; put 'put ''dTVlYjBcdTVlYjFcdTVlYjJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNcdTVlYmRcdTVlYmZcdTVlYzBcdTVlYzFcdTVlYzJcdTVlYzNcdTVlYzRcdTVlYzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Ml1bbV0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KGFlW3hbMTQyXVttXV09MzYzNTIrbSxGWzM2MzUyK21dPXhbMTQyXVttXSk7Zm9yKHhbMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWM2XHU1ZWM3XHU1ZWM4XHU1ZWNiXHU1ZWNjXHU1ZWNkXHU1ZWNlXHU1ZWNmXHU1ZWQw''@;'; put 'put ''XHU1ZWQ0XHU1ZWQ1XHU1ZWQ3XHU1ZWQ4XHU1ZWQ5XHU1ZWRhXHU1ZWRjXHU1ZWRkXHU1ZWRlXHU1ZWRmXHU1ZWUwXHU1ZWUxXHU1ZWUyXHU1ZWUzXHU1ZWU0XHU1ZWU1XHU1ZWU2XHU1ZWU3XHU1ZWU5XHU1ZWViXHU1ZWVjXHU1ZWVkXHU1ZWVlXHU1ZWVmXHU1ZWYwXHU1ZWYxXHU1ZWYyXHU1''@;'; put 'put ''ZWYzXHU1ZWY1XHU1ZWY4XHU1ZWY5XHU1ZWZiXHU1ZWZjXHU1ZWZkXHU1ZjA1XHU1ZjA2XHU1ZjA3XHU1ZjA5XHU1ZjBjXHU1ZjBkXHU1ZjBlXHU1ZjEwXHU1ZjEyXHU1ZjE0XHU1ZjE2XHU1ZjE5XHU1ZjFhXHU1ZjFjXHU1ZjFkXHU1ZjFlXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0XHVmZmZk''@;'; put 'put ''XHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjMyXHU1ZjMzXHU1ZjM0XHU1ZjM1XHU1ZjM2XHU1ZjM3XHU1ZjM4XHU1ZjNiXHU1ZjNkXHU1ZjNlXHU1ZjNmXHU1ZjQxXHU1ZjQyXHU1ZjQzXHU1ZjQ0XHU1ZjQ1XHU1ZjQ2XHU1ZjQ3XHU1ZjQ4XHU1ZjQ5XHU1ZjRhXHU1ZjRiXHU1''@;'; put 'put ''ZjRjXHU1ZjRkXHU1ZjRlXHU1ZjRmXHU1ZjUxXHU1ZjU0XHU1ZjU5XHU1ZjVhXHU1ZjViXHU1ZjVjXHU1ZjVlXHU1ZjVmXHU1ZjYwXHU1ZjYzXHU1ZjY1XHU1ZjY3XHU1ZjY4XHU1ZjZiXHU1ZjZlXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc2XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1Zjdl''@;'; put 'put ''XHU1ZjdmXHU1ZjgzXHU1Zjg2XHU1ZjhkXHU1ZjhlXHU1ZjhmXHU1ZjkxXHU1ZjkzXHU1Zjk0XHU1Zjk2XHU1ZjlhXHU1ZjliXHU1ZjlkXHU1ZjllXHU1ZjlmXHU1ZmEwXHU1ZmEyXHU1ZmEzXHU1ZmE0XHU1ZmE1XHU1ZmE2XHU1ZmE3XHU1ZmE5XHU1ZmFiXHU1ZmFjXHU1ZmFmXHU1ZmIwXHU1''@;'; put 'put ''ZmIxXHU1ZmIyXHU1ZmIzXHU1ZmI0XHU1ZmI2XHU1ZmI4XHU1ZmI5XHU1ZmJhXHU1ZmJiXHU1ZmJlXHU1ZmJmXHU1ZmMwXHU1ZmMxXHU1ZmMyXHU1ZmM3XHU1ZmM4XHU1ZmNhXHU1ZmNiXHU1ZmNlXHU1ZmQzXHU1ZmQ0XHU1ZmQ1XHU1ZmRhXHU1ZmRiXHU1ZmRjXHU1ZmRlXHU1ZmRmXHU1ZmUy''@;'; put 'put ''XHU1ZmUzXHU1ZmU1XHU1ZmU2XHU1ZmU4XHU1ZmU5XHU1ZmVjXHU1ZmVmXHU1ZmYwXHU1ZmYyXHU1ZmYzXHU1ZmY0XHU1ZmY2XHU1ZmY3XHU1ZmY5XHU1ZmZhXHU1ZmZjXHU2MDA3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDNdW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzE0M11bbV1dPTM2NjA4K20sRlszNjYwOCttXT14WzE0M11bbV0pO2Zvcih4WzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1NjAxMFx1NjAxMVx1NjAx''@;'; put 'put ''M1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAzNFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NFx1NjA0NVx1NjA0Nlx1''@;'; put 'put ''NjA0N1x1NjA0OFx1NjA0OVx1NjA0YVx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3NFx1NjA3NVx1NjA3N1x1NjA3''@;'; put 'put ''ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhN1x1NjBhOVx1''@;'; put 'put ''NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1NjBkMFx1NjBkMlx1NjBkM1x1NjBk''@;'; put 'put ''NFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMVx1NjBlMlx1NjBlM1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1NjEwYVx1''@;'; put 'put ''NjEwYlx1NjEwY1x1NjExMFx1NjExMVx1NjExMlx1NjExM1x1NjExNFx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1NjEyZlx1NjEzMFx1NjEzMVx1NjEz''@;'; put 'put ''Mlx1NjEzM1x1NjEzNFx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEzYVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEzZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NF0ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMTQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDRdW21dXT0zNjg2NCttLEZbMzY4NjQrbV09eFsxNDRdW21dKTtmb3IoeFsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYx''@;'; put 'put ''NGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYxNTRcdTYxNTZcdTYxNTdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNWJcdTYxNWNcdTYxNWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYxNjNcdTYxNjRcdTYxNjVcdTYxNjZcdTYxNjlcdTYxNmFcdTYxNmJcdTYxNmNcdTYxNmRcdTYxNmVcdTYxNmZcdTYxNzFc''@;'; put 'put ''dTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZcdTYxNzhcdTYxNzlcdTYxN2FcdTYxN2JcdTYxN2NcdTYxN2RcdTYxN2VcdTYxN2ZcdTYxODBcdTYxODFcdTYxODJcdTYxODNcdTYxODRcdTYxODVcdTYxODZcdTYxODdcdTYxODhcdTYxODlcdTYxOGFcdTYxOGNcdTYxOGRcdTYxOGZcdTYxOTBcdTYx''@;'; put 'put ''OTFcdTYxOTJcdTYxOTNcdTYxOTVcdWZmZmRcdTYxOTZcdTYxOTdcdTYxOThcdTYxOTlcdTYxOWFcdTYxOWJcdTYxOWNcdTYxOWVcdTYxOWZcdTYxYTBcdTYxYTFcdTYxYTJcdTYxYTNcdTYxYTRcdTYxYTVcdTYxYTZcdTYxYWFcdTYxYWJcdTYxYWRcdTYxYWVcdTYxYWZcdTYxYjBcdTYxYjFc''@;'; put 'put ''dTYxYjJcdTYxYjNcdTYxYjRcdTYxYjVcdTYxYjZcdTYxYjhcdTYxYjlcdTYxYmFcdTYxYmJcdTYxYmNcdTYxYmRcdTYxYmZcdTYxYzBcdTYxYzFcdTYxYzNcdTYxYzRcdTYxYzVcdTYxYzZcdTYxYzdcdTYxYzlcdTYxY2NcdTYxY2RcdTYxY2VcdTYxY2ZcdTYxZDBcdTYxZDNcdTYxZDVcdTYx''@;'; put 'put ''ZDZcdTYxZDdcdTYxZDhcdTYxZDlcdTYxZGFcdTYxZGJcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTBcdTYxZTFcdTYxZTJcdTYxZTNcdTYxZTRcdTYxZTVcdTYxZTdcdTYxZThcdTYxZTlcdTYxZWFcdTYxZWJcdTYxZWNcdTYxZWRcdTYxZWVcdTYxZWZcdTYxZjBcdTYxZjFcdTYxZjJc''@;'; put 'put ''dTYxZjNcdTYxZjRcdTYxZjZcdTYxZjdcdTYxZjhcdTYxZjlcdTYxZmFcdTYxZmJcdTYxZmNcdTYxZmRcdTYxZmVcdTYyMDBcdTYyMDFcdTYyMDJcdTYyMDNcdTYyMDRcdTYyMDVcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBcdTYyMjNcdTYy''@;'; put 'put ''MjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYyMzhcdTYyMzlcdTYyM2FcdTYyM2JcdTYyM2NcdTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDVdLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzE0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ1XVttXV09MzcxMjArbSxGWzM3MTIwK21dPXhbMTQ1XVttXSk7Zm9yKHhbMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjRmXHU2MjUwXHU2''@;'; put 'put ''MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2MjVhXHU2MjVjXHU2MjVkXHU2MjVlXHU2MjVmXHU2MjYwXHU2MjYxXHU2MjYyXHU2MjY0XHU2MjY1XHU2MjY4XHU2MjcxXHU2MjcyXHU2Mjc0XHU2Mjc1XHU2Mjc3XHU2Mjc4XHU2MjdhXHU2MjdiXHU2MjdkXHU2MjgxXHU2MjgyXHU2MjgzXHU2Mjg1''@;'; put 'put ''XHU2Mjg2XHU2Mjg3XHU2Mjg4XHU2MjhiXHU2MjhjXHU2MjhkXHU2MjhlXHU2MjhmXHU2MjkwXHU2Mjk0XHU2Mjk5XHU2MjljXHU2MjlkXHU2MjllXHU2MmEzXHU2MmE2XHU2MmE3XHU2MmE5XHU2MmFhXHU2MmFkXHU2MmFlXHU2MmFmXHU2MmIwXHU2MmIyXHU2MmIzXHU2MmI0XHU2MmI2XHU2''@;'; put 'put ''MmI3XHU2MmI4XHU2MmJhXHU2MmJlXHU2MmMwXHU2MmMxXHVmZmZkXHU2MmMzXHU2MmNiXHU2MmNmXHU2MmQxXHU2MmQ1XHU2MmRkXHU2MmRlXHU2MmUwXHU2MmUxXHU2MmU0XHU2MmVhXHU2MmViXHU2MmYwXHU2MmYyXHU2MmY1XHU2MmY4XHU2MmY5XHU2MmZhXHU2MmZiXHU2MzAwXHU2MzAz''@;'; put 'put ''XHU2MzA0XHU2MzA1XHU2MzA2XHU2MzBhXHU2MzBiXHU2MzBjXHU2MzBkXHU2MzBmXHU2MzEwXHU2MzEyXHU2MzEzXHU2MzE0XHU2MzE1XHU2MzE3XHU2MzE4XHU2MzE5XHU2MzFjXHU2MzI2XHU2MzI3XHU2MzI5XHU2MzJjXHU2MzJkXHU2MzJlXHU2MzMwXHU2MzMxXHU2MzMzXHU2MzM0XHU2''@;'; put 'put ''MzM1XHU2MzM2XHU2MzM3XHU2MzM4XHU2MzNiXHU2MzNjXHU2MzNlXHU2MzNmXHU2MzQwXHU2MzQxXHU2MzQ0XHU2MzQ3XHU2MzQ4XHU2MzRhXHU2MzUxXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU2XHU2MzU3XHU2MzU4XHU2MzU5XHU2MzVhXHU2MzViXHU2MzVjXHU2MzVkXHU2MzYwXHU2MzY0''@;'; put 'put ''XHU2MzY1XHU2MzY2XHU2MzY4XHU2MzZhXHU2MzZiXHU2MzZjXHU2MzZmXHU2MzcwXHU2MzcyXHU2MzczXHU2Mzc0XHU2Mzc1XHU2Mzc4XHU2Mzc5XHU2MzdjXHU2MzdkXHU2MzdlXHU2MzdmXHU2MzgxXHU2MzgzXHU2Mzg0XHU2Mzg1XHU2Mzg2XHU2MzhiXHU2MzhkXHU2MzkxXHU2MzkzXHU2''@;'; put 'put ''Mzk0XHU2Mzk1XHU2Mzk3XHU2Mzk5XHU2MzlhXHU2MzliXHU2MzljXHU2MzlkXHU2MzllXHU2MzlmXHU2M2ExXHU2M2E0XHU2M2E2XHU2M2FiXHU2M2FmXHU2M2IxXHU2M2IyXHU2M2I1XHU2M2I2XHU2M2I5XHU2M2JiXHU2M2JkXHU2M2JmXHU2M2MwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMTQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0Nl1bbV1dPTM3Mzc2K20sRlszNzM3NittXT14WzE0Nl1bbV0pO2Zvcih4WzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNlNlx1NjNlN1x1NjNlOFx1NjNl''@;'; put 'put ''Ylx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQxNVx1NjQxNlx1NjQxN1x1''@;'; put 'put ''NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZmZFx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQzOVx1NjQzYlx1NjQzY1x1NjQz''@;'; put 'put ''ZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1NjQ2M1x1NjQ2NFx1NjQ2NVx1''@;'; put 'put ''NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4OFx1NjQ4OVx1NjQ4YVx1NjQ4''@;'; put 'put ''Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRhMVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1NjRiMVx1NjRiMlx1''@;'; put 'put ''NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNlx1NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRkYVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzE0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDddW21dXT0zNzYzMittLEZbMzc2MzIrbV09eFsxNDddW21dKTtmb3IoeFsxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTY0ZGJcdTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTdcdTY0ZThcdTY0ZTlcdTY0ZWFcdTY0ZWJcdTY0ZWNcdTY0ZWRcdTY0ZWVcdTY0ZWZcdTY0ZjBcdTY0ZjFcdTY0ZjJcdTY0ZjNcdTY0ZjRcdTY0ZjVcdTY0ZjZcdTY0ZjdcdTY0''@;'; put 'put ''ZjhcdTY0ZjlcdTY0ZmFcdTY0ZmJcdTY0ZmNcdTY0ZmRcdTY0ZmVcdTY0ZmZcdTY1MDFcdTY1MDJcdTY1MDNcdTY1MDRcdTY1MDVcdTY1MDZcdTY1MDdcdTY1MDhcdTY1MGFcdTY1MGJcdTY1MGNcdTY1MGRcdTY1MGVcdTY1MGZcdTY1MTBcdTY1MTFcdTY1MTNcdTY1MTRcdTY1MTVcdTY1MTZc''@;'; put 'put ''dTY1MTdcdTY1MTlcdTY1MWFcdTY1MWJcdTY1MWNcdTY1MWRcdTY1MWVcdTY1MWZcdTY1MjBcdTY1MjFcdWZmZmRcdTY1MjJcdTY1MjNcdTY1MjRcdTY1MjZcdTY1MjdcdTY1MjhcdTY1MjlcdTY1MmFcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1''@;'; put 'put ''M2NcdTY1M2RcdTY1NDBcdTY1NDFcdTY1NDJcdTY1NDNcdTY1NDRcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRcdTY1NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1NTRcdTY1NTdcdTY1NThcdTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1Njhc''@;'; put 'put ''dTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzhcdTY1NzlcdTY1N2FcdTY1N2JcdTY1N2NcdTY1N2RcdTY1N2VcdTY1N2ZcdTY1ODBcdTY1ODFcdTY1ODJcdTY1ODNcdTY1ODRcdTY1ODVcdTY1ODZcdTY1ODhcdTY1ODlcdTY1OGFcdTY1''@;'; put 'put ''OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1YTBcdTY1YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1YWFcdTY1YWNcdTY1YWVcdTY1YjFcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YjVcdTY1YjZcdTY1YjdcdTY1YjhcdTY1YmFc''@;'; put 'put ''dTY1YmJcdTY1YmVcdTY1YmZcdTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFcdTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDhcdTY1ZDlcdTY1ZGFcdTY1ZGJcdTY1ZGNcdTY1ZGRcdTY1ZGVcdTY1ZGZcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1''@;'; put 'put ''ZWJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ4XVttXV09Mzc4ODgrbSxGWzM3ODg4K21dPXhbMTQ4XVttXSk7Zm9yKHhbMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NWYyXHU2NWYzXHU2NWY0XHU2NWY1XHU2NWY4XHU2NWY5XHU2NWZiXHU2NWZjXHU2NWZkXHU2NWZlXHU2NWZmXHU2NjAxXHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBiXHU2NjBkXHU2NjEwXHU2NjExXHU2NjEyXHU2NjE2XHU2''@;'; put 'put ''NjE3XHU2NjE4XHU2NjFhXHU2NjFiXHU2NjFjXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMyXHU2NjMzXHU2NjM3XHU2NjM4XHU2NjM5XHU2NjNhXHU2NjNiXHU2NjNkXHU2NjNmXHU2NjQwXHU2NjQy''@;'; put 'put ''XHU2NjQ0XHU2NjQ1XHU2NjQ2XHU2NjQ3XHU2NjQ4XHU2NjQ5XHU2NjRhXHU2NjRkXHU2NjRlXHU2NjUwXHU2NjUxXHU2NjU4XHVmZmZkXHU2NjU5XHU2NjViXHU2NjVjXHU2NjVkXHU2NjVlXHU2NjYwXHU2NjYyXHU2NjYzXHU2NjY1XHU2NjY3XHU2NjY5XHU2NjZhXHU2NjZiXHU2NjZjXHU2''@;'; put 'put ''NjZkXHU2NjcxXHU2NjcyXHU2NjczXHU2Njc1XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjdjXHU2NjdkXHU2NjdmXHU2NjgwXHU2NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2Njg4XHU2Njg5XHU2NjhhXHU2NjhiXHU2NjhkXHU2NjhlXHU2NjhmXHU2NjkwXHU2NjkyXHU2NjkzXHU2Njk0XHU2Njk1''@;'; put 'put ''XHU2Njk4XHU2Njk5XHU2NjlhXHU2NjliXHU2NjljXHU2NjllXHU2NjlmXHU2NmEwXHU2NmExXHU2NmEyXHU2NmEzXHU2NmE0XHU2NmE1XHU2NmE2XHU2NmE5XHU2NmFhXHU2NmFiXHU2NmFjXHU2NmFkXHU2NmFmXHU2NmIwXHU2NmIxXHU2NmIyXHU2NmIzXHU2NmI1XHU2NmI2XHU2NmI3XHU2''@;'; put 'put ''NmI4XHU2NmJhXHU2NmJiXHU2NmJjXHU2NmJkXHU2NmJmXHU2NmMwXHU2NmMxXHU2NmMyXHU2NmMzXHU2NmM0XHU2NmM1XHU2NmM2XHU2NmM3XHU2NmM4XHU2NmM5XHU2NmNhXHU2NmNiXHU2NmNjXHU2NmNkXHU2NmNlXHU2NmNmXHU2NmQwXHU2NmQxXHU2NmQyXHU2NmQzXHU2NmQ0XHU2NmQ1''@;'; put 'put ''XHU2NmQ2XHU2NmQ3XHU2NmQ4XHU2NmRhXHU2NmRlXHU2NmRmXHU2NmUwXHU2NmUxXHU2NmUyXHU2NmUzXHU2NmU0XHU2NmU1XHU2NmU3XHU2NmU4XHU2NmVhXHU2NmViXHU2NmVjXHU2NmVkXHU2NmVlXHU2NmVmXHU2NmYxXHU2NmY1XHU2NmY2XHU2NmY4XHU2NmZhXHU2NmZiXHU2NmZkXHU2''@;'; put 'put ''NzAxXHU2NzAyXHU2NzAzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OV1bbV1dPTM4MTQ0K20sRlszODE0NCttXT14WzE0OV1bbV0pO2Zvcih4WzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1NjcyMlx1NjcyM1x1NjcyNFx1''@;'; put 'put ''NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1N1x1Njc1OFx1Njc1''@;'; put 'put ''OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4YVx1''@;'; put 'put ''Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1NjdiY1x1NjdiZFx1Njdi''@;'; put 'put ''ZVx1NjdiZlx1NjdjMFx1NjdjMlx1NjdjNVx1NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1NjdjYVx1NjdjYlx1NjdjY1x1NjdjZFx1NjdjZVx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1NjdlYlx1NjdlZFx1''@;'; put 'put ''NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1NjdmN1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1NjdmY1x1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1NjgxY1x1NjgxZVx1Njgx''@;'; put 'put ''Zlx1NjgyMFx1NjgyMlx1NjgyM1x1NjgyNFx1NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1NjgyYlx1NjgyY1x1NjgyZFx1NjgyZVx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1Mlx1Njg1Nlx1''@;'; put 'put ''Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1Njg1Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTBdW21dXT0zODQwMCttLEZbMzg0MDArbV09eFsxNTBdW21dKTtmb3IoeFsxNTFdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4NWNcdTY4NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4NmNcdTY4NmRcdTY4NmVcdTY4NmZcdTY4NzBcdTY4NzFcdTY4NzJcdTY4NzNcdTY4NzVcdTY4NzhcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2Nc''@;'; put 'put ''dTY4N2RcdTY4N2VcdTY4N2ZcdTY4ODBcdTY4ODJcdTY4ODRcdTY4ODdcdTY4ODhcdTY4ODlcdTY4OGFcdTY4OGJcdTY4OGNcdTY4OGRcdTY4OGVcdTY4OTBcdTY4OTFcdTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZcdTY4OThcdTY4OTlcdTY4OWFcdTY4OWJcdTY4OWNcdTY4OWRcdTY4OWVcdTY4''@;'; put 'put ''OWZcdTY4YTBcdTY4YTFcdTY4YTNcdTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4YjJcdTY4YjRcdTY4YjZcdTY4YjdcdTY4YjhcdWZmZmRcdTY4YjlcdTY4YmFcdTY4YmJcdTY4YmNcdTY4YmRcdTY4YmVcdTY4YmZcdTY4YzFcdTY4YzNcdTY4YzRc''@;'; put 'put ''dTY4YzVcdTY4YzZcdTY4YzdcdTY4YzhcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGJcdTY4ZGNcdTY4ZGRcdTY4ZGVcdTY4ZGZcdTY4ZTFcdTY4ZTJcdTY4ZTRcdTY4ZTVcdTY4ZTZcdTY4ZTdcdTY4ZThcdTY4''@;'; put 'put ''ZTlcdTY4ZWFcdTY4ZWJcdTY4ZWNcdTY4ZWRcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4ZmZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDZcdTY5MDdcdTY5MDhcdTY5MDlcdTY5MGFcdTY5MGNcdTY5MGZcdTY5MTFc''@;'; put 'put ''dTY5MTNcdTY5MTRcdTY5MTVcdTY5MTZcdTY5MTdcdTY5MThcdTY5MTlcdTY5MWFcdTY5MWJcdTY5MWNcdTY5MWRcdTY5MWVcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjVcdTY5MjZcdTY5MjdcdTY5MjhcdTY5MjlcdTY5MmFcdTY5MmJcdTY5MmNcdTY5MmVcdTY5MmZcdTY5MzFcdTY5MzJcdTY5''@;'; put 'put ''MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDNcdTY5NDRcdTY5NDVcdTY5NDZcdTY5NDdcdTY5NDhcdTY5NDlcdTY5NGFcdTY5NGJcdTY5NGNcdTY5NGRcdTY5NGVcdTY5NGZcdTY5NTBcdTY5NTFcdTY5NTJcdTY5NTNc''@;'; put 'put ''dTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NWJcdTY5NWNcdTY5NWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUxXVttXV09Mzg2NTYrbSxGWzM4NjU2K21dPXhbMTUxXVttXSk7Zm9y''@;'; put 'put ''KHhbMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTYxXHU2OTYyXHU2OTY0XHU2OTY1XHU2OTY3XHU2OTY4XHU2OTY5XHU2OTZhXHU2OTZjXHU2OTZkXHU2OTZmXHU2OTcwXHU2OTcyXHU2OTczXHU2OTc0XHU2OTc1XHU2OTc2''@;'; put 'put ''XHU2OTdhXHU2OTdiXHU2OTdkXHU2OTdlXHU2OTdmXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThhXHU2OThiXHU2OThjXHU2OThlXHU2OThmXHU2OTkwXHU2OTkxXHU2OTkyXHU2OTkzXHU2OTk2XHU2OTk3XHU2OTk5XHU2OTlhXHU2OTlkXHU2OTllXHU2OTlmXHU2OWEwXHU2OWExXHU2OWEyXHU2''@;'; put 'put ''OWEzXHU2OWE0XHU2OWE1XHU2OWE2XHU2OWE5XHU2OWFhXHU2OWFjXHU2OWFlXHU2OWFmXHU2OWIwXHU2OWIyXHU2OWIzXHU2OWI1XHU2OWI2XHU2OWI4XHU2OWI5XHU2OWJhXHU2OWJjXHU2OWJkXHVmZmZkXHU2OWJlXHU2OWJmXHU2OWMwXHU2OWMyXHU2OWMzXHU2OWM0XHU2OWM1XHU2OWM2''@;'; put 'put ''XHU2OWM3XHU2OWM4XHU2OWM5XHU2OWNiXHU2OWNkXHU2OWNmXHU2OWQxXHU2OWQyXHU2OWQzXHU2OWQ1XHU2OWQ2XHU2OWQ3XHU2OWQ4XHU2OWQ5XHU2OWRhXHU2OWRjXHU2OWRkXHU2OWRlXHU2OWUxXHU2OWUyXHU2OWUzXHU2OWU0XHU2OWU1XHU2OWU2XHU2OWU3XHU2OWU4XHU2OWU5XHU2''@;'; put 'put ''OWVhXHU2OWViXHU2OWVjXHU2OWVlXHU2OWVmXHU2OWYwXHU2OWYxXHU2OWYzXHU2OWY0XHU2OWY1XHU2OWY2XHU2OWY3XHU2OWY4XHU2OWY5XHU2OWZhXHU2OWZiXHU2OWZjXHU2OWZlXHU2YTAwXHU2YTAxXHU2YTAyXHU2YTAzXHU2YTA0XHU2YTA1XHU2YTA2XHU2YTA3XHU2YTA4XHU2YTA5''@;'; put 'put ''XHU2YTBiXHU2YTBjXHU2YTBkXHU2YTBlXHU2YTBmXHU2YTEwXHU2YTExXHU2YTEyXHU2YTEzXHU2YTE0XHU2YTE1XHU2YTE2XHU2YTE5XHU2YTFhXHU2YTFiXHU2YTFjXHU2YTFkXHU2YTFlXHU2YTIwXHU2YTIyXHU2YTIzXHU2YTI0XHU2YTI1XHU2YTI2XHU2YTI3XHU2YTI5XHU2YTJiXHU2''@;'; put 'put ''YTJjXHU2YTJkXHU2YTJlXHU2YTMwXHU2YTMyXHU2YTMzXHU2YTM0XHU2YTM2XHU2YTM3XHU2YTM4XHU2YTM5XHU2YTNhXHU2YTNiXHU2YTNjXHU2YTNmXHU2YTQwXHU2YTQxXHU2YTQyXHU2YTQzXHU2YTQ1XHU2YTQ2XHU2YTQ4XHU2YTQ5XHU2YTRhXHU2YTRiXHU2YTRjXHU2YTRkXHU2YTRl''@;'; put 'put ''XHU2YTRmXHU2YTUxXHU2YTUyXHU2YTUzXHU2YTU0XHU2YTU1XHU2YTU2XHU2YTU3XHU2YTVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1Ml1bbV1dPTM4OTEyK20sRlszODkxMittXT14''@;'; put 'put ''WzE1Ml1bbV0pO2Zvcih4WzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2YVx1NmE2Ylx1NmE2''@;'; put 'put ''Y1x1NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3MFx1NmE3Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1NmE3N1x1NmE3OFx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1NmE4Ylx1NmE4Y1x1''@;'; put 'put ''NmE4ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1NmE5NFx1NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5YVx1NmE5Ylx1NmE5Y1x1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZFx1NmFhZVx1NmFh''@;'; put 'put ''Zlx1NmFiMFx1NmFiMVx1NmFiMlx1NmFiM1x1NmFiNFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1NmFiOVx1NmFiYVx1NmFiYlx1NmFiY1x1NmFiZFx1NmFiZVx1NmFiZlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1NmFjOVx1NmFjYVx1''@;'; put 'put ''NmFjYlx1NmFjY1x1NmFjZFx1NmFjZVx1NmFjZlx1NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFkNFx1NmFkNVx1NmFkNlx1NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFlNFx1NmFlNVx1NmFl''@;'; put 'put ''Nlx1NmFlN1x1NmFlOFx1NmFlOVx1NmFlYVx1NmFlYlx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1NmFmMFx1NmFmMVx1NmFmMlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFmNlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1NmIwMFx1NmIwMVx1''@;'; put 'put ''NmIwMlx1NmIwM1x1NmIwNFx1NmIwNVx1NmIwNlx1NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIwYlx1NmIwY1x1NmIwZFx1NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIxYlx1NmIxY1x1NmIx''@;'; put 'put ''ZFx1NmIxZVx1NmIxZlx1NmIyNVx1NmIyNlx1NmIyOFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1NmIyZFx1NmIyZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTNdW21dXT0zOTE2OCtt''@;'; put 'put ''LEZbMzkxNjgrbV09eFsxNTNdW21dKTtmb3IoeFsxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiMmZcdTZiMzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZi''@;'; put 'put ''NDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZiNDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGRcdTZiNGVcdTZiNGZcdTZiNTBcdTZiNTFcdTZiNTJcdTZiNTNcdTZiNTRcdTZiNTVcdTZiNTZcdTZiNTdcdTZiNThcdTZiNWFcdTZiNWJcdTZiNWNcdTZiNWRcdTZiNWVcdTZiNWZcdTZiNjBcdTZiNjFc''@;'; put 'put ''dTZiNjhcdTZiNjlcdTZiNmJcdTZiNmNcdTZiNmRcdTZiNmVcdTZiNmZcdTZiNzBcdTZiNzFcdTZiNzJcdTZiNzNcdTZiNzRcdTZiNzVcdTZiNzZcdTZiNzdcdTZiNzhcdTZiN2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODhcdWZmZmRcdTZiOGNcdTZiOGVcdTZiOGZcdTZi''@;'; put 'put ''OTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZiOTdcdTZiOThcdTZiOTlcdTZiOWNcdTZiOWRcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYTRcdTZiYTVcdTZiYTZcdTZiYTdcdTZiYThcdTZiYTlcdTZiYWJcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYWZcdTZiYjBcdTZiYjFcdTZiYjJc''@;'; put 'put ''dTZiYjZcdTZiYjhcdTZiYjlcdTZiYmFcdTZiYmJcdTZiYmNcdTZiYmRcdTZiYmVcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzZcdTZiYzdcdTZiYzhcdTZiYzlcdTZiY2FcdTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGNcdTZiZGRcdTZiZGVcdTZiZGZcdTZiZTBcdTZi''@;'; put 'put ''ZTJcdTZiZTNcdTZiZTRcdTZiZTVcdTZiZTZcdTZiZTdcdTZiZThcdTZiZTlcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRcdTZiZjZcdTZiZjdcdTZiZjhcdTZiZmFcdTZiZmJcdTZiZmNcdTZiZmVcdTZiZmZcdTZjMDBcdTZjMDFcdTZjMDJcdTZjMDNcdTZjMDRc''@;'; put 'put ''dTZjMDhcdTZjMDlcdTZjMGFcdTZjMGJcdTZjMGNcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZjMWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNcdTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZj''@;'; put 'put ''NDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZjNGJcdTZjNGNcdTZjNGRcdTZjNGVcdTZjNGZcdTZjNTFcdTZjNTJcdTZjNTNcdTZjNTZcdTZjNThcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU0''@;'; put 'put ''XVttXV09Mzk0MjQrbSxGWzM5NDI0K21dPXhbMTU0XVttXSk7Zm9yKHhbMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzU5XHU2YzVhXHU2YzYyXHU2YzYzXHU2YzY1XHU2YzY2XHU2YzY3XHU2YzZiXHU2YzZjXHU2YzZkXHU2''@;'; put 'put ''YzZlXHU2YzZmXHU2YzcxXHU2YzczXHU2Yzc1XHU2Yzc3XHU2Yzc4XHU2YzdhXHU2YzdiXHU2YzdjXHU2YzdmXHU2YzgwXHU2Yzg0XHU2Yzg3XHU2YzhhXHU2YzhiXHU2YzhkXHU2YzhlXHU2YzkxXHU2YzkyXHU2Yzk1XHU2Yzk2XHU2Yzk3XHU2Yzk4XHU2YzlhXHU2YzljXHU2YzlkXHU2Yzll''@;'; put 'put ''XHU2Y2EwXHU2Y2EyXHU2Y2E4XHU2Y2FjXHU2Y2FmXHU2Y2IwXHU2Y2I0XHU2Y2I1XHU2Y2I2XHU2Y2I3XHU2Y2JhXHU2Y2MwXHU2Y2MxXHU2Y2MyXHU2Y2MzXHU2Y2M2XHU2Y2M3XHU2Y2M4XHU2Y2NiXHU2Y2NkXHU2Y2NlXHU2Y2NmXHU2Y2QxXHU2Y2QyXHU2Y2Q4XHVmZmZkXHU2Y2Q5XHU2''@;'; put 'put ''Y2RhXHU2Y2RjXHU2Y2RkXHU2Y2RmXHU2Y2U0XHU2Y2U2XHU2Y2U3XHU2Y2U5XHU2Y2VjXHU2Y2VkXHU2Y2YyXHU2Y2Y0XHU2Y2Y5XHU2Y2ZmXHU2ZDAwXHU2ZDAyXHU2ZDAzXHU2ZDA1XHU2ZDA2XHU2ZDA4XHU2ZDA5XHU2ZDBhXHU2ZDBkXHU2ZDBmXHU2ZDEwXHU2ZDExXHU2ZDEzXHU2ZDE0''@;'; put 'put ''XHU2ZDE1XHU2ZDE2XHU2ZDE4XHU2ZDFjXHU2ZDFkXHU2ZDFmXHU2ZDIwXHU2ZDIxXHU2ZDIyXHU2ZDIzXHU2ZDI0XHU2ZDI2XHU2ZDI4XHU2ZDI5XHU2ZDJjXHU2ZDJkXHU2ZDJmXHU2ZDMwXHU2ZDM0XHU2ZDM2XHU2ZDM3XHU2ZDM4XHU2ZDNhXHU2ZDNmXHU2ZDQwXHU2ZDQyXHU2ZDQ0XHU2''@;'; put 'put ''ZDQ5XHU2ZDRjXHU2ZDUwXHU2ZDU1XHU2ZDU2XHU2ZDU3XHU2ZDU4XHU2ZDViXHU2ZDVkXHU2ZDVmXHU2ZDYxXHU2ZDYyXHU2ZDY0XHU2ZDY1XHU2ZDY3XHU2ZDY4XHU2ZDZiXHU2ZDZjXHU2ZDZkXHU2ZDcwXHU2ZDcxXHU2ZDcyXHU2ZDczXHU2ZDc1XHU2ZDc2XHU2ZDc5XHU2ZDdhXHU2ZDdi''@;'; put 'put ''XHU2ZDdkXHU2ZDdlXHU2ZDdmXHU2ZDgwXHU2ZDgxXHU2ZDgzXHU2ZDg0XHU2ZDg2XHU2ZDg3XHU2ZDhhXHU2ZDhiXHU2ZDhkXHU2ZDhmXHU2ZDkwXHU2ZDkyXHU2ZDk2XHU2ZDk3XHU2ZDk4XHU2ZDk5XHU2ZDlhXHU2ZDljXHU2ZGEyXHU2ZGE1XHU2ZGFjXHU2ZGFkXHU2ZGIwXHU2ZGIxXHU2''@;'; put 'put ''ZGIzXHU2ZGI0XHU2ZGI2XHU2ZGI3XHU2ZGI5XHU2ZGJhXHU2ZGJiXHU2ZGJjXHU2ZGJkXHU2ZGJlXHU2ZGMxXHU2ZGMyXHU2ZGMzXHU2ZGM4XHU2ZGM5XHU2ZGNhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTVdW21dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihhZVt4WzE1NV1bbV1dPTM5NjgwK20sRlszOTY4MCttXT14WzE1NV1bbV0pO2Zvcih4WzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRkNVx1''@;'; put 'put ''NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1NmUwMlx1NmUw''@;'; put 'put ''M1x1NmUwNFx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNVx1''@;'; put 'put ''ZmZmZFx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYlx1NmUzY1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1NmU0MVx1NmU0Mlx1NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1NmU1''@;'; put 'put ''YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MFx1NmU2MVx1NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2Nlx1NmU2N1x1NmU2OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3OFx1NmU3OVx1''@;'; put 'put ''NmU3YVx1NmU3Ylx1NmU3Y1x1NmU3ZFx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YVx1NmU4Ylx1NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1NmVh''@;'; put 'put ''MFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVjY1x1''@;'; put 'put ''NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU2XVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTZdW21dXT0zOTkzNittLEZbMzk5MzYrbV09eFsxNTZdW21dKTtmb3IoeFsxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZc''@;'; put 'put ''dTZlZjdcdTZlZjhcdTZlZmFcdTZlZmJcdTZlZmNcdTZlZmRcdTZlZmVcdTZlZmZcdTZmMDBcdTZmMDFcdTZmMDNcdTZmMDRcdTZmMDVcdTZmMDdcdTZmMDhcdTZmMGFcdTZmMGJcdTZmMGNcdTZmMGRcdTZmMGVcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTZcdTZmMTdcdTZmMThcdTZmMTlcdTZm''@;'; put 'put ''MWFcdTZmMWJcdTZmMWNcdTZmMWRcdTZmMWVcdTZmMWZcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZmMjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZmMzJcdTZmMzRcdTZmMzVcdTZmMzdcdTZmMzhcdTZmMzlcdTZmM2FcdTZmM2JcdTZmM2NcdTZmM2RcdTZmM2ZcdTZmNDBc''@;'; put 'put ''dTZmNDFcdTZmNDJcdWZmZmRcdTZmNDNcdTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGVcdTZmNGZcdTZmNTBcdTZmNTFcdTZmNTJcdTZmNTNcdTZmNTRcdTZmNTVcdTZmNTZcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZm''@;'; put 'put ''NjNcdTZmNjRcdTZmNjVcdTZmNjdcdTZmNjhcdTZmNjlcdTZmNmFcdTZmNmJcdTZmNmNcdTZmNmZcdTZmNzBcdTZmNzFcdTZmNzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZmNzlcdTZmN2JcdTZmN2RcdTZmN2VcdTZmN2ZcdTZmODBcdTZmODFcdTZmODJcdTZmODNcdTZmODVcdTZmODZcdTZmODdc''@;'; put 'put ''dTZmOGFcdTZmOGJcdTZmOGZcdTZmOTBcdTZmOTFcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTVcdTZmOTZcdTZmOTdcdTZmOThcdTZmOTlcdTZmOWFcdTZmOWJcdTZmOWRcdTZmOWVcdTZmOWZcdTZmYTBcdTZmYTJcdTZmYTNcdTZmYTRcdTZmYTVcdTZmYTZcdTZmYThcdTZmYTlcdTZmYWFcdTZm''@;'; put 'put ''YWJcdTZmYWNcdTZmYWRcdTZmYWVcdTZmYWZcdTZmYjBcdTZmYjFcdTZmYjJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZmYmFcdTZmYmJcdTZmYmNcdTZmYmRcdTZmYmVcdTZmYmZcdTZmYzFcdTZmYzNcdTZmYzRcdTZmYzVcdTZmYzZcdTZmYzdcdTZmYzhcdTZmY2FcdTZmY2JcdTZmY2Nc''@;'; put 'put ''dTZmY2RcdTZmY2VcdTZmY2ZcdTZmZDBcdTZmZDNcdTZmZDRcdTZmZDVcdTZmZDZcdTZmZDdcdTZmZDhcdTZmZDlcdTZmZGFcdTZmZGJcdTZmZGNcdTZmZGRcdTZmZGZcdTZmZTJcdTZmZTNcdTZmZTRcdTZmZTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTddLmxlbmd0aDsrK20pNjU1''@;'; put 'put ''MzMhPT14WzE1N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU3XVttXV09NDAxOTIrbSxGWzQwMTkyK21dPXhbMTU3XVttXSk7Zm9yKHhbMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmU2XHU2ZmU3XHU2ZmU4XHU2ZmU5''@;'; put 'put ''XHU2ZmVhXHU2ZmViXHU2ZmVjXHU2ZmVkXHU2ZmYwXHU2ZmYxXHU2ZmYyXHU2ZmYzXHU2ZmY0XHU2ZmY1XHU2ZmY2XHU2ZmY3XHU2ZmY4XHU2ZmY5XHU2ZmZhXHU2ZmZiXHU2ZmZjXHU2ZmZkXHU2ZmZlXHU2ZmZmXHU3MDAwXHU3MDAxXHU3MDAyXHU3MDAzXHU3MDA0XHU3MDA1XHU3MDA2XHU3''@;'; put 'put ''MDA3XHU3MDA4XHU3MDA5XHU3MDBhXHU3MDBiXHU3MDBjXHU3MDBkXHU3MDBlXHU3MDBmXHU3MDEwXHU3MDEyXHU3MDEzXHU3MDE0XHU3MDE1XHU3MDE2XHU3MDE3XHU3MDE4XHU3MDE5XHU3MDFjXHU3MDFkXHU3MDFlXHU3MDFmXHU3MDIwXHU3MDIxXHU3MDIyXHU3MDI0XHU3MDI1XHU3MDI2''@;'; put 'put ''XHU3MDI3XHU3MDI4XHU3MDI5XHU3MDJhXHVmZmZkXHU3MDJiXHU3MDJjXHU3MDJkXHU3MDJlXHU3MDJmXHU3MDMwXHU3MDMxXHU3MDMyXHU3MDMzXHU3MDM0XHU3MDM2XHU3MDM3XHU3MDM4XHU3MDNhXHU3MDNiXHU3MDNjXHU3MDNkXHU3MDNlXHU3MDNmXHU3MDQwXHU3MDQxXHU3MDQyXHU3''@;'; put 'put ''MDQzXHU3MDQ0XHU3MDQ1XHU3MDQ2XHU3MDQ3XHU3MDQ4XHU3MDQ5XHU3MDRhXHU3MDRiXHU3MDRkXHU3MDRlXHU3MDUwXHU3MDUxXHU3MDUyXHU3MDUzXHU3MDU0XHU3MDU1XHU3MDU2XHU3MDU3XHU3MDU4XHU3MDU5XHU3MDVhXHU3MDViXHU3MDVjXHU3MDVkXHU3MDVmXHU3MDYwXHU3MDYx''@;'; put 'put ''XHU3MDYyXHU3MDYzXHU3MDY0XHU3MDY1XHU3MDY2XHU3MDY3XHU3MDY4XHU3MDY5XHU3MDZhXHU3MDZlXHU3MDcxXHU3MDcyXHU3MDczXHU3MDc0XHU3MDc3XHU3MDc5XHU3MDdhXHU3MDdiXHU3MDdkXHU3MDgxXHU3MDgyXHU3MDgzXHU3MDg0XHU3MDg2XHU3MDg3XHU3MDg4XHU3MDhiXHU3''@;'; put 'put ''MDhjXHU3MDhkXHU3MDhmXHU3MDkwXHU3MDkxXHU3MDkzXHU3MDk3XHU3MDk4XHU3MDlhXHU3MDliXHU3MDllXHU3MDlmXHU3MGEwXHU3MGExXHU3MGEyXHU3MGEzXHU3MGE0XHU3MGE1XHU3MGE2XHU3MGE3XHU3MGE4XHU3MGE5XHU3MGFhXHU3MGIwXHU3MGIyXHU3MGI0XHU3MGI1XHU3MGI2''@;'; put 'put ''XHU3MGJhXHU3MGJlXHU3MGJmXHU3MGM0XHU3MGM1XHU3MGM2XHU3MGM3XHU3MGM5XHU3MGNiXHU3MGNjXHU3MGNkXHU3MGNlXHU3MGNmXHU3MGQwXHU3MGQxXHU3MGQyXHU3MGQzXHU3MGQ0XHU3MGQ1XHU3MGQ2XHU3MGQ3XHU3MGRhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU4XS5s''@;'; put 'put ''ZW5ndGg7KyttKTY1NTMzIT09eFsxNThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1OF1bbV1dPTQwNDQ4K20sRls0MDQ0OCttXT14WzE1OF1bbV0pO2Zvcih4WzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBkY1x1NzBk''@;'; put 'put ''ZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1NzBmMlx1NzBmM1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1NzEwNVx1''@;'; put 'put ''NzEwNlx1NzEwN1x1NzEwOFx1NzEwYlx1NzEwY1x1NzEwZFx1NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYlx1NzExY1x1NzExZFx1NzExZVx1NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEyYVx1NzEy''@;'; put 'put ''Ylx1NzEyY1x1NzEyZFx1NzEyZVx1NzEzMlx1NzEzM1x1NzEzNFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1NzEzOVx1NzEzYVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEzZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1''@;'; put 'put ''NzE0ZFx1NzE0Zlx1NzE1MFx1NzE1MVx1NzE1Mlx1NzE1M1x1NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1OFx1NzE1OVx1NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2Zlx1NzE3''@;'; put 'put ''MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1NzE4MFx1NzE4MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5M1x1''@;'; put 'put ''NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YVx1NzE5Ylx1NzE5Y1x1NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFhM1x1NzFhNFx1NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFi''@;'; put 'put ''OFx1NzFiYVx1NzFiYlx1NzFiY1x1NzFiZFx1NzFiZVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1NzFjNVx1NzFjNlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFjYVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQoIiIpLG09''@;'; put 'put ''MDttIT14WzE1OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTldW21dXT00MDcwNCttLEZbNDA3MDQrbV09eFsxNTldW21dKTtmb3IoeFsxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTcxZDZcdTcxZDdcdTcxZDhcdTcxZDlcdTcxZGFcdTcxZGJcdTcxZGNcdTcxZGRcdTcxZGVcdTcxZGZcdTcxZTFcdTcxZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcxZThcdTcxZTlcdTcxZWFcdTcxZWJcdTcxZWNcdTcxZWRcdTcxZWZcdTcxZjBcdTcxZjFcdTcxZjJcdTcxZjNcdTcxZjRc''@;'; put 'put ''dTcxZjVcdTcxZjZcdTcxZjdcdTcxZjhcdTcxZmFcdTcxZmJcdTcxZmNcdTcxZmRcdTcxZmVcdTcxZmZcdTcyMDBcdTcyMDFcdTcyMDJcdTcyMDNcdTcyMDRcdTcyMDVcdTcyMDdcdTcyMDhcdTcyMDlcdTcyMGFcdTcyMGJcdTcyMGNcdTcyMGRcdTcyMGVcdTcyMGZcdTcyMTBcdTcyMTFcdTcy''@;'; put 'put ''MTJcdTcyMTNcdTcyMTRcdTcyMTVcdTcyMTZcdTcyMTdcdTcyMThcdTcyMTlcdTcyMWFcdWZmZmRcdTcyMWJcdTcyMWNcdTcyMWVcdTcyMWZcdTcyMjBcdTcyMjFcdTcyMjJcdTcyMjNcdTcyMjRcdTcyMjVcdTcyMjZcdTcyMjdcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJc''@;'; put 'put ''dTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2VcdTcyNDBcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDRcdTcyNDVcdTcyNDZcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcy''@;'; put 'put ''NjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcyNmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcyNzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2RcdTcyODJcdTcyODNcdTcyODVcdTcyODZcdTcyODdcdTcyODhcdTcyODlcdTcyOGNcdTcyOGVc''@;'; put 'put ''dTcyOTBcdTcyOTFcdTcyOTNcdTcyOTRcdTcyOTVcdTcyOTZcdTcyOTdcdTcyOThcdTcyOTlcdTcyOWFcdTcyOWJcdTcyOWNcdTcyOWRcdTcyOWVcdTcyYTBcdTcyYTFcdTcyYTJcdTcyYTNcdTcyYTRcdTcyYTVcdTcyYTZcdTcyYTdcdTcyYThcdTcyYTlcdTcyYWFcdTcyYWJcdTcyYWVcdTcy''@;'; put 'put ''YjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcyYmFcdTcyYmJcdTcyYmNcdTcyYmRcdTcyYmVcdTcyYmZcdTcyYzBcdTcyYzVcdTcyYzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcyY2JcdTcyY2NcdTcyY2ZcdTcyZDFcdTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGJcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxtPTA7bSE9eFsxNjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYwXVttXV09NDA5NjArbSxGWzQwOTYwK21dPXhbMTYwXVttXSk7Zm9yKHhbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTRcdWZmNWVc''@;'; put 'put ''dTIwMTZcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIy''@;'; put 'put ''MmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUy''@;'; put 'put ''MDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxtPTA7bSE9eFsxNjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYxXVttXV09NDEyMTYrbSxGWzQxMjE2K21dPXhbMTYxXVttXSk7Zm9yKHhbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUy''@;'; put 'put ''NDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Ml1bbV1dPTQxNDcyK20sRls0MTQ3MittXT14WzE2Ml1bbV0pO2Zvcih4WzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYw''@;'; put 'put ''OVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1''@;'; put 'put ''ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0''@;'; put 'put ''MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1''@;'; put 'put ''ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjNdW21dXT00MTcyOCttLEZbNDE3MjgrbV09eFsxNjNdW21dKTtmb3IoeFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMw''@;'; put 'put ''NDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJc''@;'; put 'put ''dTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMw''@;'; put 'put ''N2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY0XVttXV09NDE5ODQrbSxGWzQxOTg0K21dPXhbMTY0XVttXSk7Zm9yKHhbMTY1XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUz''@;'; put 'put ''MGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMw''@;'; put 'put ''XHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUz''@;'; put 'put ''MGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NV1bbV1dPTQyMjQwK20sRls0MjI0MCttXT14WzE2NV1bbV0pO2Zv''@;'; put 'put ''cih4WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1''@;'; put 'put ''MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0NFx1ZmZmZFx1ZmZmZFx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMVx1ZmZmZFx1ZmUzM1x1ZmUz''@;'; put 'put ''NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjZdW21dXT00MjQ5NittLEZbNDI0OTYrbV09''@;'; put 'put ''eFsxNjZdW21dKTtmb3IoeFsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0''@;'; put 'put ''MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFc''@;'; put 'put ''dTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY3XVttXV09NDI3NTIr''@;'; put 'put ''bSxGWzQyNzUyK21dPXhbMTY3XVttXSk7Zm9yKHhbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUy''@;'; put 'put ''MTk5XHUyMjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYz''@;'; put 'put ''XHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZmXHUyNTcwXHUyNTcxXHUyNTcyXHUyNTczXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUy''@;'; put 'put ''NThiXHUyNThjXHUyNThkXHUyNThlXHUyNThmXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUw''@;'; put 'put ''MTQ4XHVmZmZkXHUwMjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5''@;'; put 'put ''XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OF1bbV1dPTQzMDA4K20sRls0MzAwOCtt''@;'; put 'put ''XT14WzE2OF1bbV0pO2Zvcih4WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1''@;'; put 'put ''MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNFx1ZmZmZFx1MjEyMVx1MzIzMVx1ZmZmZFx1MjAxMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OVx1ZmU0''@;'; put 'put ''YVx1ZmU0Ylx1ZmU0Y1x1ZmU0ZFx1ZmU0ZVx1ZmU0Zlx1ZmU1MFx1ZmU1MVx1ZmU1Mlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmU1OVx1ZmU1YVx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmZmZFx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1''@;'; put 'put ''ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMVx1MjUwMlx1MjUwM1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUwOFx1MjUwOVx1MjUwYVx1MjUwYlx1MjUwY1x1MjUwZFx1MjUwZVx1MjUwZlx1MjUxMFx1MjUxMVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1''@;'; put 'put ''MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1MjUxY1x1MjUxZFx1MjUxZVx1MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1MjUyNFx1MjUyNVx1MjUyNlx1MjUyN1x1MjUyOFx1MjUyOVx1MjUyYVx1MjUyYlx1MjUyY1x1MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUz''@;'; put 'put ''M1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUzN1x1MjUzOFx1MjUzOVx1MjUzYVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUzZlx1MjU0MFx1MjU0MVx1MjU0Mlx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjldW21dXT00MzI2''@;'; put 'put ''NCttLEZbNDMyNjQrbV09eFsxNjldW21dKTtmb3IoeFsxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZGNcdTcyZGRcdTcyZGZcdTcyZTJcdTcyZTNcdTcyZTRcdTcyZTVcdTcyZTZcdTcyZTdcdTcyZWFcdTcyZWJcdTcyZjVc''@;'; put 'put ''dTcyZjZcdTcyZjlcdTcyZmRcdTcyZmVcdTcyZmZcdTczMDBcdTczMDJcdTczMDRcdTczMDVcdTczMDZcdTczMDdcdTczMDhcdTczMDlcdTczMGJcdTczMGNcdTczMGRcdTczMGZcdTczMTBcdTczMTFcdTczMTJcdTczMTRcdTczMThcdTczMTlcdTczMWFcdTczMWZcdTczMjBcdTczMjNcdTcz''@;'; put 'put ''MjRcdTczMjZcdTczMjdcdTczMjhcdTczMmRcdTczMmZcdTczMzBcdTczMzJcdTczMzNcdTczMzVcdTczMzZcdTczM2FcdTczM2JcdTczM2NcdTczM2RcdTczNDBcdTczNDFcdTczNDJcdTczNDNcdTczNDRcdTczNDVcdTczNDZcdTczNDdcdTczNDhcdWZmZmRcdTczNDlcdTczNGFcdTczNGJc''@;'; put 'put ''dTczNGNcdTczNGVcdTczNGZcdTczNTFcdTczNTNcdTczNTRcdTczNTVcdTczNTZcdTczNThcdTczNTlcdTczNWFcdTczNWJcdTczNWNcdTczNWRcdTczNWVcdTczNWZcdTczNjFcdTczNjJcdTczNjNcdTczNjRcdTczNjVcdTczNjZcdTczNjdcdTczNjhcdTczNjlcdTczNmFcdTczNmJcdTcz''@;'; put 'put ''NmVcdTczNzBcdTczNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb''@;'; put 'put ''MTcwXVttXV09NDM1MjArbSxGWzQzNTIwK21dPXhbMTcwXVttXSk7Zm9yKHhbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3Mzdi''@;'; put 'put ''XHU3MzdjXHU3MzdkXHU3MzdmXHU3MzgwXHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3''@;'; put 'put ''M2ExXHU3M2EzXHU3M2E0XHU3M2E1XHU3M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2Ni''@;'; put 'put ''XHU3M2NjXHU3M2NlXHU3M2QyXHU3M2QzXHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3''@;'; put 'put ''M2YzXHU3M2Y0XHU3M2Y1XHU3M2Y2XHU3M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzFdW21dLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihhZVt4WzE3MV1bbV1dPTQzNzc2K20sRls0Mzc3NittXT14WzE3MV1bbV0pO2Zvcih4WzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzNmOFx1NzNmOVx1NzNmYVx1NzNmYlx1NzNmY1x1NzNmZFx1NzNmZVx1NzNm''@;'; put 'put ''Zlx1NzQwMFx1NzQwMVx1NzQwMlx1NzQwNFx1NzQwN1x1NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMVx1NzQxMlx1NzQxM1x1NzQxNFx1NzQxNVx1NzQxNlx1NzQxN1x1NzQxOFx1NzQxOVx1NzQxY1x1NzQxZFx1NzQxZVx1NzQxZlx1NzQyMFx1NzQyMVx1NzQyM1x1NzQyNFx1''@;'; put 'put ''NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1NzQzN1x1NzQzOFx1NzQzOVx1NzQzYVx1NzQzYlx1NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1NzQ0Mlx1NzQ0M1x1NzQ0NFx1NzQ0NVx1NzQ0Nlx1NzQ0N1x1NzQ0OFx1NzQ0OVx1NzQ0YVx1NzQ0Ylx1NzQ0Y1x1NzQ0''@;'; put 'put ''ZFx1ZmZmZFx1NzQ0ZVx1NzQ0Zlx1NzQ1MFx1NzQ1MVx1NzQ1Mlx1NzQ1M1x1NzQ1NFx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2MFx1NzQ2MVx1NzQ2Mlx1NzQ2M1x1NzQ2NFx1NzQ2NVx1NzQ2Nlx1NzQ2N1x1NzQ2OFx1NzQ2OVx1NzQ2YVx1NzQ2Ylx1NzQ2Y1x1NzQ2ZVx1NzQ2Zlx1NzQ3MVx1''@;'; put 'put ''NzQ3Mlx1NzQ3M1x1NzQ3NFx1NzQ3NVx1NzQ3OFx1NzQ3OVx1NzQ3YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcy''@;'; put 'put ''XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzJdW21dXT00NDAzMittLEZbNDQwMzIrbV09eFsxNzJdW21dKTtmb3IoeFsxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2JcdTc0N2NcdTc0N2RcdTc0N2ZcdTc0ODJcdTc0''@;'; put 'put ''ODRcdTc0ODVcdTc0ODZcdTc0ODhcdTc0ODlcdTc0OGFcdTc0OGNcdTc0OGRcdTc0OGZcdTc0OTFcdTc0OTJcdTc0OTNcdTc0OTRcdTc0OTVcdTc0OTZcdTc0OTdcdTc0OThcdTc0OTlcdTc0OWFcdTc0OWJcdTc0OWRcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTJcdTc0YTNcdTc0YTRcdTc0YTVc''@;'; put 'put ''dTc0YTZcdTc0YWFcdTc0YWJcdTc0YWNcdTc0YWRcdTc0YWVcdTc0YWZcdTc0YjBcdTc0YjFcdTc0YjJcdTc0YjNcdTc0YjRcdTc0YjVcdTc0YjZcdTc0YjdcdTc0YjhcdTc0YjlcdTc0YmJcdTc0YmNcdTc0YmRcdTc0YmVcdTc0YmZcdTc0YzBcdTc0YzFcdTc0YzJcdTc0YzNcdTc0YzRcdTc0''@;'; put 'put ''YzVcdTc0YzZcdTc0YzdcdWZmZmRcdTc0YzhcdTc0YzlcdTc0Y2FcdTc0Y2JcdTc0Y2NcdTc0Y2RcdTc0Y2VcdTc0Y2ZcdTc0ZDBcdTc0ZDFcdTc0ZDNcdTc0ZDRcdTc0ZDVcdTc0ZDZcdTc0ZDdcdTc0ZDhcdTc0ZDlcdTc0ZGFcdTc0ZGJcdTc0ZGRcdTc0ZGZcdTc0ZTFcdTc0ZTVcdTc0ZTdc''@;'; put 'put ''dTc0ZThcdTc0ZTlcdTc0ZWFcdTc0ZWJcdTc0ZWNcdTc0ZWRcdTc0ZjBcdTc0ZjFcdTc0ZjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzNdLmxlbmd0aDsrK20p''@;'; put 'put ''NjU1MzMhPT14WzE3M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTczXVttXV09NDQyODgrbSxGWzQ0Mjg4K21dPXhbMTczXVttXSk7Zm9yKHhbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3''@;'; put 'put ''NGY5XHU3NGZhXHU3NGZiXHU3NGZjXHU3NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XHU3NTA2XHU3NTA3XHU3NTA4XHU3NTA5XHU3NTBhXHU3NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFl''@;'; put 'put ''XHU3NTIwXHU3NTIxXHU3NTIyXHU3NTIzXHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3''@;'; put 'put ''NTUzXHU3NTU1XHU3NTU2XHU3NTU3XHU3NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVmXHU3NTYwXHU3NTYxXHU3NTYyXHU3NTYzXHU3NTY0XHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3''@;'; put 'put ''XHU3NTdhXHU3NTdiXHU3NTdjXHU3NTdkXHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc0''@;'; put 'put ''XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NF1bbV1dPTQ0NTQ0K20sRls0NDU0NCttXT14WzE3NF1bbV0pO2Zvcih4WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzU4OFx1''@;'; put 'put ''NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1NzVhMlx1NzVhNlx1NzVhN1x1NzVhOFx1NzVhOVx1NzVhYVx1NzVhZFx1NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNlx1NzVj''@;'; put 'put ''Ylx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVlZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1NzVmYVx1''@;'; put 'put ''NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYwNFx1NzYwNlx1NzYwN1x1ZmZmZFx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1NzYxM1x1NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1NzYyM1x1NzYyN1x1NzYyOFx1NzYy''@;'; put 'put ''Y1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LG09MDttIT14WzE3NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzVdW21dXT00NDgwMCttLEZbNDQ4MDArbV09eFsxNzVdW21dKTtmb3IoeFsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTc2NDVcdTc2NDZcdTc2NDdcdTc2NDhcdTc2NDlcdTc2NGFcdTc2NGJcdTc2NGVcdTc2NGZcdTc2NTBcdTc2NTFcdTc2NTJcdTc2NTNcdTc2NTVcdTc2NTdcdTc2NThcdTc2NTlcdTc2NWFcdTc2NWJcdTc2NWRcdTc2NWZcdTc2NjBcdTc2NjFcdTc2NjJcdTc2NjRcdTc2NjVcdTc2''@;'; put 'put ''NjZcdTc2NjdcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NmNcdTc2NmRcdTc2NmVcdTc2NzBcdTc2NzFcdTc2NzJcdTc2NzNcdTc2NzRcdTc2NzVcdTc2NzZcdTc2NzdcdTc2NzlcdTc2N2FcdTc2N2NcdTc2N2ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OGFcdTc2OGNcdTc2OGRc''@;'; put 'put ''dTc2OGZcdTc2OTBcdTc2OTJcdTc2OTRcdTc2OTVcdTc2OTdcdTc2OThcdTc2OWFcdTc2OWJcdWZmZmRcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWZcdTc2YTBcdTc2YTFcdTc2YTJcdTc2YTNcdTc2YTVcdTc2YTZcdTc2YTdcdTc2YThcdTc2YTlcdTc2YWFcdTc2YWJcdTc2YWNcdTc2YWRcdTc2''@;'; put 'put ''YWZcdTc2YjBcdTc2YjNcdTc2YjVcdTc2YjZcdTc2YjdcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YmJcdTc2YmNcdTc2YmRcdTc2YmVcdTc2YzBcdTc2YzFcdTc2YzNcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2Vc''@;'; put 'put ''dTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUz''@;'; put 'put ''ZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNc''@;'; put 'put ''dTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc2XVttXV09NDUwNTYrbSxGWzQ1MDU2K21dPXhbMTc2XVttXSk7Zm9yKHhbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwXHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3''@;'; put 'put ''NmVkXHU3NmYwXHU3NmYzXHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4''@;'; put 'put ''XHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiXHVmZmZkXHU3NzJjXHU3NzJlXHU3NzMwXHU3NzMxXHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3''@;'; put 'put ''NzQ2XHU3NzQ4XHU3NzQ5XHU3NzRhXHU3NzRiXHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzUzXHU3NzU0XHU3NzU1XHU3NzU2XHU3NzU3XHU3NzU4XHU3NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5''@;'; put 'put ''XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5''@;'; put 'put ''MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJj''@;'; put 'put ''XHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5''@;'; put 'put ''OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3N11bbV1dPTQ1MzEyK20sRls0NTMxMittXT14WzE3N11bbV0pO2Zvcih4WzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZFx1Nzc2ZVx1Nzc2Zlx1Nzc3MFx1Nzc3MVx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3NVx1Nzc3Nlx1Nzc3N1x1Nzc3OFx1Nzc3YVx1Nzc3Ylx1''@;'; put 'put ''Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1Nzc4Nlx1Nzc4N1x1Nzc4OFx1Nzc4OVx1Nzc4YVx1Nzc4Ylx1Nzc4Zlx1Nzc5MFx1Nzc5M1x1Nzc5NFx1Nzc5NVx1Nzc5Nlx1Nzc5N1x1Nzc5OFx1Nzc5OVx1Nzc5YVx1Nzc5Ylx1Nzc5Y1x1Nzc5ZFx1Nzc5ZVx1NzdhMVx1NzdhM1x1NzdhNFx1Nzdh''@;'; put 'put ''Nlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiMlx1NzdiNFx1NzdiNlx1NzdiN1x1NzdiOFx1NzdiOVx1NzdiYVx1ZmZmZFx1NzdiY1x1NzdiZVx1NzdjMFx1NzdjMVx1NzdjMlx1NzdjM1x1NzdjNFx1NzdjNVx1NzdjNlx1NzdjN1x1NzdjOFx1NzdjOVx1NzdjYVx1''@;'; put 'put ''NzdjYlx1NzdjY1x1NzdjZVx1NzdjZlx1NzdkMFx1NzdkMVx1NzdkMlx1NzdkM1x1NzdkNFx1NzdkNVx1NzdkNlx1NzdkOFx1NzdkOVx1NzdkYVx1NzdkZFx1NzdkZVx1NzdkZlx1NzdlMFx1NzdlMVx1NzdlNFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNl''@;'; put 'put ''Mlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1''@;'; put 'put ''Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1''@;'; put 'put ''Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1''@;'; put 'put ''OTYxMFx1OThhNFx1NjYwY1x1NzMxNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzhdW21dXT00NTU2OCttLEZbNDU1NjgrbV09eFsxNzhdW21dKTtmb3IoeFsxNzldPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZTZcdTc3ZThcdTc3ZWFcdTc3ZWZcdTc3ZjBcdTc3ZjFcdTc3ZjJcdTc3ZjRcdTc3ZjVcdTc3ZjdcdTc3ZjlcdTc3ZmFcdTc3ZmJcdTc3ZmNcdTc4MDNcdTc4MDRcdTc4MDVcdTc4MDZcdTc4MDdcdTc4MDhc''@;'; put 'put ''dTc4MGFcdTc4MGJcdTc4MGVcdTc4MGZcdTc4MTBcdTc4MTNcdTc4MTVcdTc4MTlcdTc4MWJcdTc4MWVcdTc4MjBcdTc4MjFcdTc4MjJcdTc4MjRcdTc4MjhcdTc4MmFcdTc4MmJcdTc4MmVcdTc4MmZcdTc4MzFcdTc4MzJcdTc4MzNcdTc4MzVcdTc4MzZcdTc4M2RcdTc4M2ZcdTc4NDFcdTc4''@;'; put 'put ''NDJcdTc4NDNcdTc4NDRcdTc4NDZcdTc4NDhcdTc4NDlcdTc4NGFcdTc4NGJcdTc4NGRcdTc4NGZcdTc4NTFcdTc4NTNcdTc4NTRcdTc4NThcdTc4NTlcdTc4NWFcdWZmZmRcdTc4NWJcdTc4NWNcdTc4NWVcdTc4NWZcdTc4NjBcdTc4NjFcdTc4NjJcdTc4NjNcdTc4NjRcdTc4NjVcdTc4NjZc''@;'; put 'put ''dTc4NjdcdTc4NjhcdTc4NjlcdTc4NmZcdTc4NzBcdTc4NzFcdTc4NzJcdTc4NzNcdTc4NzRcdTc4NzVcdTc4NzZcdTc4NzhcdTc4NzlcdTc4N2FcdTc4N2JcdTc4N2RcdTc4N2VcdTc4N2ZcdTc4ODBcdTc4ODFcdTc4ODJcdTc4ODNcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgw''@;'; put 'put ''YTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlc''@;'; put 'put ''dTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlm''@;'; put 'put ''N2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThc''@;'; put 'put ''dThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc5XVttXV09NDU4MjQrbSxGWzQ1ODI0K21dPXhbMTc5XVttXSk7Zm9yKHhbMTgw''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0''@;'; put 'put ''XHU3OGE2XHU3OGE4XHU3OGE5XHU3OGFhXHU3OGFiXHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3''@;'; put 'put ''OGNlXHU3OGNmXHU3OGQxXHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRiXHU3OGRjXHU3OGRkXHU3OGRlXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVl''@;'; put 'put ''XHU3OGVmXHU3OGYwXHU3OGYxXHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3OGZjXHU3OGZkXHU3OGZlXHU3OGZmXHU3OTAwXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2''@;'; put 'put ''NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFm''@;'; put 'put ''XHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3''@;'; put 'put ''YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEz''@;'; put 'put ''XHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MF1bbV1dPTQ2MDgwK20sRls0NjA4MCttXT14WzE4MF1b''@;'; put 'put ''bV0pO2Zvcih4WzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkwZFx1NzkwZVx1NzkwZlx1NzkxMFx1NzkxMVx1NzkxMlx1NzkxNFx1NzkxNVx1NzkxNlx1NzkxN1x1NzkxOFx1NzkxOVx1NzkxYVx1NzkxYlx1NzkxY1x1Nzkx''@;'; put 'put ''ZFx1NzkxZlx1NzkyMFx1NzkyMVx1NzkyMlx1NzkyM1x1NzkyNVx1NzkyNlx1NzkyN1x1NzkyOFx1NzkyOVx1NzkyYVx1NzkyYlx1NzkyY1x1NzkyZFx1NzkyZVx1NzkyZlx1NzkzMFx1NzkzMVx1NzkzMlx1NzkzM1x1NzkzNVx1NzkzNlx1NzkzN1x1NzkzOFx1NzkzOVx1NzkzZFx1NzkzZlx1''@;'; put 'put ''Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YVx1Nzk0Ylx1Nzk0Y1x1Nzk0ZFx1Nzk0ZVx1Nzk0Zlx1Nzk1MFx1Nzk1MVx1Nzk1Mlx1Nzk1NFx1Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2M1x1ZmZmZFx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2''@;'; put 'put ''ZVx1Nzk3MFx1Nzk3MVx1Nzk3Mlx1Nzk3M1x1Nzk3NFx1Nzk3NVx1Nzk3Nlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1Nzk3ZFx1Nzk3ZVx1Nzk3Zlx1Nzk4Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1''@;'; put 'put ''ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIz''@;'; put 'put ''MFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1''@;'; put 'put ''ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4''@;'; put 'put ''OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODFdW21dXT00NjMzNittLEZbNDYz''@;'; put 'put ''MzYrbV09eFsxODFdW21dKTtmb3IoeFsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTNcdTc5OTRcdTc5OTVcdTc5OTZcdTc5OTdcdTc5OThcdTc5OTlcdTc5OWJcdTc5OWNcdTc5OWRcdTc5OWVcdTc5OWZcdTc5YTBcdTc5''@;'; put 'put ''YTFcdTc5YTJcdTc5YTNcdTc5YTRcdTc5YTVcdTc5YTZcdTc5YThcdTc5YTlcdTc5YWFcdTc5YWJcdTc5YWNcdTc5YWRcdTc5YWVcdTc5YWZcdTc5YjBcdTc5YjFcdTc5YjJcdTc5YjRcdTc5YjVcdTc5YjZcdTc5YjdcdTc5YjhcdTc5YmNcdTc5YmZcdTc5YzJcdTc5YzRcdTc5YzVcdTc5Yzdc''@;'; put 'put ''dTc5YzhcdTc5Y2FcdTc5Y2NcdTc5Y2VcdTc5Y2ZcdTc5ZDBcdTc5ZDNcdTc5ZDRcdTc5ZDZcdTc5ZDdcdTc5ZDlcdTc5ZGFcdTc5ZGJcdTc5ZGNcdTc5ZGRcdTc5ZGVcdTc5ZTBcdTc5ZTFcdTc5ZTJcdTc5ZTVcdTc5ZThcdTc5ZWFcdWZmZmRcdTc5ZWNcdTc5ZWVcdTc5ZjFcdTc5ZjJcdTc5''@;'; put 'put ''ZjNcdTc5ZjRcdTc5ZjVcdTc5ZjZcdTc5ZjdcdTc5ZjlcdTc5ZmFcdTc5ZmNcdTc5ZmVcdTc5ZmZcdTdhMDFcdTdhMDRcdTdhMDVcdTdhMDdcdTdhMDhcdTdhMDlcdTdhMGFcdTdhMGNcdTdhMGZcdTdhMTBcdTdhMTFcdTdhMTJcdTdhMTNcdTdhMTVcdTdhMTZcdTdhMThcdTdhMTlcdTdhMWJc''@;'; put 'put ''dTdhMWNcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1''@;'; put 'put ''ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0Mjhc''@;'; put 'put ''dThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUz''@;'; put 'put ''ODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgyXVttXV09''@;'; put 'put ''NDY1OTIrbSxGWzQ2NTkyK21dPXhbMTgyXVttXSk7Zm9yKHhbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3''@;'; put 'put ''YTJiXHU3YTJjXHU3YTJkXHU3YTJlXHU3YTJmXHU3YTMwXHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwXHU3YTQxXHU3YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRl''@;'; put 'put ''XHU3YTRmXHU3YTUwXHU3YTUyXHU3YTUzXHU3YTU0XHU3YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVhXHU3YTViXHU3YTVjXHU3YTVkXHU3YTVlXHU3YTVmXHU3YTYwXHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3''@;'; put 'put ''YTZiXHU3YTZjXHU3YTZkXHU3YTZlXHU3YTZmXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTli''@;'; put 'put ''XHU3YTllXHU3YWExXHU3YWEyXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5''@;'; put 'put ''OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5''@;'; put 'put ''XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0''@;'; put 'put ''ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODNdW21dLmNoYXJDb2RlQXQoMCkmJihh''@;'; put 'put ''ZVt4WzE4M11bbV1dPTQ2ODQ4K20sRls0Njg0OCttXT14WzE4M11bbV0pO2Zvcih4WzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FhM1x1N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1N2FhYlx1N2FhZVx1N2FhZlx1N2FiMFx1''@;'; put 'put ''N2FiMVx1N2FiMlx1N2FiNFx1N2FiNVx1N2FiNlx1N2FiN1x1N2FiOFx1N2FiOVx1N2FiYVx1N2FiYlx1N2FiY1x1N2FiZFx1N2FiZVx1N2FjMFx1N2FjMVx1N2FjMlx1N2FjM1x1N2FjNFx1N2FjNVx1N2FjNlx1N2FjN1x1N2FjOFx1N2FjOVx1N2FjYVx1N2FjY1x1N2FjZFx1N2FjZVx1N2Fj''@;'; put 'put ''Zlx1N2FkMFx1N2FkMVx1N2FkMlx1N2FkM1x1N2FkNFx1N2FkNVx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2FlN1x1N2FlOFx1N2FlOVx1N2FlYVx1N2FlYlx1N2FlY1x1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1N2FmM1x1ZmZmZFx1''@;'; put 'put ''N2FmNFx1N2FmNVx1N2FmNlx1N2FmN1x1N2FmOFx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2IwMlx1N2IwNVx1N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2Iy''@;'; put 'put ''MVx1N2IyMlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1''@;'; put 'put ''OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2''@;'; put 'put ''Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1''@;'; put 'put ''NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg0XVttXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoYWVbeFsxODRdW21dXT00NzEwNCttLEZbNDcxMDQrbV09eFsxODRdW21dKTtmb3IoeFsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMmZcdTdiMzBcdTdiMzJcdTdiMzRcdTdiMzVcdTdiMzZcdTdiMzdc''@;'; put 'put ''dTdiMzlcdTdiM2JcdTdiM2RcdTdiM2ZcdTdiNDBcdTdiNDFcdTdiNDJcdTdiNDNcdTdiNDRcdTdiNDZcdTdiNDhcdTdiNGFcdTdiNGRcdTdiNGVcdTdiNTNcdTdiNTVcdTdiNTdcdTdiNTlcdTdiNWNcdTdiNWVcdTdiNWZcdTdiNjFcdTdiNjNcdTdiNjRcdTdiNjVcdTdiNjZcdTdiNjdcdTdi''@;'; put 'put ''NjhcdTdiNjlcdTdiNmFcdTdiNmJcdTdiNmNcdTdiNmRcdTdiNmZcdTdiNzBcdTdiNzNcdTdiNzRcdTdiNzZcdTdiNzhcdTdiN2FcdTdiN2NcdTdiN2RcdTdiN2ZcdTdiODFcdTdiODJcdTdiODNcdTdiODRcdTdiODZcdTdiODdcdTdiODhcdTdiODlcdTdiOGFcdTdiOGJcdTdiOGNcdTdiOGVc''@;'; put 'put ''dTdiOGZcdWZmZmRcdTdiOTFcdTdiOTJcdTdiOTNcdTdiOTZcdTdiOThcdTdiOTlcdTdiOWFcdTdiOWJcdTdiOWVcdTdiOWZcdTdiYTBcdTdiYTNcdTdiYTRcdTdiYTVcdTdiYWVcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjNcdTdiYjVcdTdiYjZcdTdiYjdcdTdiYjlcdTdiYmFcdTdiYmJcdTdi''@;'; put 'put ''YmNcdTdiYmRcdTdiYmVcdTdiYmZcdTdiYzBcdTdiYzJcdTdiYzNcdTdiYzRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVc''@;'; put 'put ''dTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUy''@;'; put 'put ''NTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFc''@;'; put 'put ''dThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODVdLmxlbmd0aDsrK20pNjU1MzMhPT14''@;'; put 'put ''WzE4NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg1XVttXV09NDczNjArbSxGWzQ3MzYwK21dPXhbMTg1XVttXSk7Zm9yKHhbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNi''@;'; put 'put ''XHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQwXHU3YmQyXHU3YmQ0XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3''@;'; put 'put ''YmYzXHU3YmY0XHU3YmY1XHU3YmY2XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAwXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA1XHU3YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1''@;'; put 'put ''XHU3YzE3XHU3YzE4XHU3YzE5XHVmZmZkXHU3YzFhXHU3YzFiXHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3YzIxXHU3YzIyXHU3YzIzXHU3YzI0XHU3YzI1XHU3YzI4XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3''@;'; put 'put ''YzM1XHU3YzM2XHU3YzM3XHU3YzM5XHU3YzNhXHU3YzNiXHU3YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYw''@;'; put 'put ''XHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0''@;'; put 'put ''ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJh''@;'; put 'put ''XHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg2XS5sZW5ndGg7''@;'; put 'put ''KyttKTY1NTMzIT09eFsxODZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Nl1bbV1dPTQ3NjE2K20sRls0NzYxNittXT14WzE4Nl1bbV0pO2Zvcih4WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2M0M1x1N2M0NFx1N2M0''@;'; put 'put ''NVx1N2M0Nlx1N2M0N1x1N2M0OFx1N2M0OVx1N2M0YVx1N2M0Ylx1N2M0Y1x1N2M0ZVx1N2M0Zlx1N2M1MFx1N2M1MVx1N2M1Mlx1N2M1M1x1N2M1NFx1N2M1NVx1N2M1Nlx1N2M1N1x1N2M1OFx1N2M1OVx1N2M1YVx1N2M1Ylx1N2M1Y1x1N2M1ZFx1N2M1ZVx1N2M1Zlx1N2M2MFx1N2M2MVx1''@;'; put 'put ''N2M2Mlx1N2M2M1x1N2M2NFx1N2M2NVx1N2M2Nlx1N2M2N1x1N2M2OFx1N2M2OVx1N2M2YVx1N2M2Ylx1N2M2Y1x1N2M2ZFx1N2M2ZVx1N2M2Zlx1N2M3MFx1N2M3MVx1N2M3Mlx1N2M3NVx1N2M3Nlx1N2M3N1x1N2M3OFx1N2M3OVx1N2M3YVx1N2M3ZVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2M4''@;'; put 'put ''Mlx1N2M4M1x1N2M4NFx1N2M4NVx1N2M4Nlx1N2M4N1x1ZmZmZFx1N2M4OFx1N2M4YVx1N2M4Ylx1N2M4Y1x1N2M4ZFx1N2M4ZVx1N2M4Zlx1N2M5MFx1N2M5M1x1N2M5NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2NhMFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1''@;'; put 'put ''N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNFx1N2NiNVx1N2NiNlx1N2NiN1x1N2NiOFx1N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJk''@;'; put 'put ''ZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1''@;'; put 'put ''NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2''@;'; put 'put ''NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14''@;'; put 'put ''WzE4N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODddW21dXT00Nzg3MittLEZbNDc4NzIrbV09eFsxODddW21dKTtmb3IoeFsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdj''@;'; put 'put ''YmZcdTdjYzBcdTdjYzJcdTdjYzNcdTdjYzRcdTdjYzZcdTdjYzlcdTdjY2JcdTdjY2VcdTdjY2ZcdTdjZDBcdTdjZDFcdTdjZDJcdTdjZDNcdTdjZDRcdTdjZDhcdTdjZGFcdTdjZGJcdTdjZGRcdTdjZGVcdTdjZTFcdTdjZTJcdTdjZTNcdTdjZTRcdTdjZTVcdTdjZTZcdTdjZTdcdTdjZTlc''@;'; put 'put ''dTdjZWFcdTdjZWJcdTdjZWNcdTdjZWRcdTdjZWVcdTdjZjBcdTdjZjFcdTdjZjJcdTdjZjNcdTdjZjRcdTdjZjVcdTdjZjZcdTdjZjdcdTdjZjlcdTdjZmFcdTdjZmNcdTdjZmRcdTdjZmVcdTdjZmZcdTdkMDBcdTdkMDFcdTdkMDJcdTdkMDNcdTdkMDRcdTdkMDVcdTdkMDZcdTdkMDdcdTdk''@;'; put 'put ''MDhcdTdkMDlcdTdkMGJcdTdkMGNcdTdkMGRcdTdkMGVcdTdkMGZcdTdkMTBcdWZmZmRcdTdkMTFcdTdkMTJcdTdkMTNcdTdkMTRcdTdkMTVcdTdkMTZcdTdkMTdcdTdkMThcdTdkMTlcdTdkMWFcdTdkMWJcdTdkMWNcdTdkMWRcdTdkMWVcdTdkMWZcdTdkMjFcdTdkMjNcdTdkMjRcdTdkMjVc''@;'; put 'put ''dTdkMjZcdTdkMjhcdTdkMjlcdTdkMmFcdTdkMmNcdTdkMmRcdTdkMmVcdTdkMzBcdTdkMzFcdTdkMzJcdTdkMzNcdTdkMzRcdTdkMzVcdTdkMzZcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdj''@;'; put 'put ''NGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2Nc''@;'; put 'put ''dTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcx''@;'; put 'put ''NGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxtPTA7bSE9eFsxODhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg4XVttXV09NDgxMjgrbSxGWzQ4MTI4K21dPXhbMTg4XVttXSk7Zm9yKHhbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3ZDM5XHU3ZDNhXHU3ZDNiXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3ZDQwXHU3ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0XHU3ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUw''@;'; put 'put ''XHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0XHU3ZDU1XHU3ZDU2XHU3ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDViXHU3ZDVjXHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3ZDYwXHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3''@;'; put 'put ''ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3ZDcxXHU3ZDcyXHU3ZDczXHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3ZDc4XHU3ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdjXHU3ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4''@;'; put 'put ''XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhjXHU3ZDhkXHU3ZDhlXHU3ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkzXHU3ZDk0XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3ZDk4XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2''@;'; put 'put ''ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQy''@;'; put 'put ''XHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1''@;'; put 'put ''OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OV1bbV1dPTQ4Mzg0K20sRls0ODM4NCttXT14WzE4OV1bbV0pO2Zvcih4WzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Q5OVx1N2Q5YVx1N2Q5Ylx1N2Q5Y1x1N2Q5ZFx1N2Q5ZVx1N2Q5Zlx1N2RhMFx1N2RhMVx1N2RhMlx1N2RhM1x1N2RhNFx1N2RhNVx1N2RhN1x1N2RhOFx1N2RhOVx1N2RhYVx1N2RhYlx1N2RhY1x1N2RhZFx1N2RhZlx1N2RiMFx1N2RiMVx1N2Ri''@;'; put 'put ''Mlx1N2RiM1x1N2RiNFx1N2RiNVx1N2RiNlx1N2RiN1x1N2RiOFx1N2RiOVx1N2RiYVx1N2RiYlx1N2RiY1x1N2RiZFx1N2RiZVx1N2RiZlx1N2RjMFx1N2RjMVx1N2RjMlx1N2RjM1x1N2RjNFx1N2RjNVx1N2RjNlx1N2RjN1x1N2RjOFx1N2RjOVx1N2RjYVx1N2RjYlx1N2RjY1x1N2RjZFx1''@;'; put 'put ''N2RjZVx1N2RjZlx1N2RkMFx1N2RkMVx1N2RkMlx1N2RkM1x1N2RkNFx1N2RkNVx1N2RkNlx1N2RkN1x1N2RkOFx1N2RkOVx1ZmZmZFx1N2RkYVx1N2RkYlx1N2RkY1x1N2RkZFx1N2RkZVx1N2RkZlx1N2RlMFx1N2RlMVx1N2RlMlx1N2RlM1x1N2RlNFx1N2RlNVx1N2RlNlx1N2RlN1x1N2Rl''@;'; put 'put ''OFx1N2RlOVx1N2RlYVx1N2RlYlx1N2RlY1x1N2RlZFx1N2RlZVx1N2RlZlx1N2RmMFx1N2RmMVx1N2RmMlx1N2RmM1x1N2RmNFx1N2RmNVx1N2RmNlx1N2RmN1x1N2RmOFx1N2RmOVx1N2RmYVx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1''@;'; put 'put ''NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1''@;'; put 'put ''ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1''@;'; put 'put ''OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5''@;'; put 'put ''Ylx1NTQxYlx1NWNmYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTBdW21dXT00ODY0MCttLEZbNDg2NDArbV09eFsxOTBdW21dKTtmb3IoeFsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkZmJcdTdkZmNcdTdkZmRcdTdkZmVcdTdkZmZcdTdlMDBcdTdlMDFcdTdlMDJcdTdlMDNcdTdlMDRcdTdlMDVcdTdlMDZcdTdlMDdcdTdlMDhcdTdlMDlcdTdlMGFcdTdlMGJcdTdlMGNcdTdlMGRcdTdlMGVcdTdlMGZcdTdl''@;'; put 'put ''MTBcdTdlMTFcdTdlMTJcdTdlMTNcdTdlMTRcdTdlMTVcdTdlMTZcdTdlMTdcdTdlMThcdTdlMTlcdTdlMWFcdTdlMWJcdTdlMWNcdTdlMWRcdTdlMWVcdTdlMWZcdTdlMjBcdTdlMjFcdTdlMjJcdTdlMjNcdTdlMjRcdTdlMjVcdTdlMjZcdTdlMjdcdTdlMjhcdTdlMjlcdTdlMmFcdTdlMmJc''@;'; put 'put ''dTdlMmNcdTdlMmRcdTdlMmVcdTdlMmZcdTdlMzBcdTdlMzFcdTdlMzJcdTdlMzNcdTdlMzRcdTdlMzVcdTdlMzZcdTdlMzdcdTdlMzhcdTdlMzlcdWZmZmRcdTdlM2FcdTdlM2NcdTdlM2RcdTdlM2VcdTdlM2ZcdTdlNDBcdTdlNDJcdTdlNDNcdTdlNDRcdTdlNDVcdTdlNDZcdTdlNDhcdTdl''@;'; put 'put ''NDlcdTdlNGFcdTdlNGJcdTdlNGNcdTdlNGRcdTdlNGVcdTdlNGZcdTdlNTBcdTdlNTFcdTdlNTJcdTdlNTNcdTdlNTRcdTdlNTVcdTdlNTZcdTdlNTdcdTdlNThcdTdlNTlcdTdlNWFcdTdlNWJcdTdlNWNcdTdlNWRcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZc''@;'; put 'put ''dTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4''@;'; put 'put ''ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRc''@;'; put 'put ''dTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdh''@;'; put 'put ''YTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkxXVttXV09NDg4OTYrbSxGWzQ4ODk2K21dPXhbMTkxXVttXSk7Zm9yKHhbMTkyXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3ZTYxXHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3''@;'; put 'put ''ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3ZTc1XHU3ZTc2XHU3ZTc3XHU3ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdjXHU3ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThk''@;'; put 'put ''XHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkxXHU3ZTkyXHU3ZTkzXHU3ZTk0XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3ZTk5XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTllXHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3''@;'; put 'put ''ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3ZjNjXHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2XHU3ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2''@;'; put 'put ''XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2''@;'; put 'put ''MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIx''@;'; put 'put ''XHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1''@;'; put 'put ''MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Ml1bbV1dPTQ5MTUyK20sRls0OTE1MittXT14WzE5Ml1bbV0pO2Zvcih4''@;'; put 'put ''WzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1ZVx1N2Y2MFx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2N1x1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1''@;'; put 'put ''N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3Zlx1N2Y4MFx1N2Y4Mlx1N2Y4M1x1N2Y4NFx1N2Y4NVx1N2Y4Nlx1N2Y4N1x1N2Y4OFx1N2Y4OVx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5MVx1N2Y5Mlx1N2Y5M1x1N2Y5NVx1N2Y5''@;'; put 'put ''Nlx1N2Y5N1x1N2Y5OFx1N2Y5OVx1N2Y5Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOFx1N2ZhOVx1N2ZhYVx1N2ZhYlx1N2ZhY1x1N2ZhZFx1N2ZhZVx1N2ZiMVx1ZmZmZFx1N2ZiM1x1N2ZiNFx1N2ZiNVx1N2ZiNlx1N2ZiN1x1N2ZiYVx1N2ZiYlx1N2ZiZVx1''@;'; put 'put ''N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2ZjZlx1N2ZkMFx1N2ZkMVx1N2ZkMlx1N2ZkM1x1N2ZkNlx1N2ZkN1x1N2ZkOVx1N2ZkYVx1N2ZkYlx1N2ZkY1x1N2ZkZFx1N2ZkZVx1N2ZlMlx1N2ZlM1x1NzVlMlx1N2FjYlx1N2M5''@;'; put 'put ''Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1''@;'; put 'put ''OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBi''@;'; put 'put ''Ylx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1''@;'; put 'put ''NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTNdW21dXT00OTQwOCttLEZbNDk0MDgrbV09eFsx''@;'; put 'put ''OTNdW21dKTtmb3IoeFsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTRcdTdmZTdcdTdmZThcdTdmZWFcdTdmZWJcdTdmZWNcdTdmZWRcdTdmZWZcdTdmZjJcdTdmZjRcdTdmZjVcdTdmZjZcdTdmZjdcdTdmZjhcdTdmZjlc''@;'; put 'put ''dTdmZmFcdTdmZmRcdTdmZmVcdTdmZmZcdTgwMDJcdTgwMDdcdTgwMDhcdTgwMDlcdTgwMGFcdTgwMGVcdTgwMGZcdTgwMTFcdTgwMTNcdTgwMWFcdTgwMWJcdTgwMWRcdTgwMWVcdTgwMWZcdTgwMjFcdTgwMjNcdTgwMjRcdTgwMmJcdTgwMmNcdTgwMmRcdTgwMmVcdTgwMmZcdTgwMzBcdTgw''@;'; put 'put ''MzJcdTgwMzRcdTgwMzlcdTgwM2FcdTgwM2NcdTgwM2VcdTgwNDBcdTgwNDFcdTgwNDRcdTgwNDVcdTgwNDdcdTgwNDhcdTgwNDlcdTgwNGVcdTgwNGZcdTgwNTBcdTgwNTFcdTgwNTNcdTgwNTVcdTgwNTZcdTgwNTdcdWZmZmRcdTgwNTlcdTgwNWJcdTgwNWNcdTgwNWRcdTgwNWVcdTgwNWZc''@;'; put 'put ''dTgwNjBcdTgwNjFcdTgwNjJcdTgwNjNcdTgwNjRcdTgwNjVcdTgwNjZcdTgwNjdcdTgwNjhcdTgwNmJcdTgwNmNcdTgwNmRcdTgwNmVcdTgwNmZcdTgwNzBcdTgwNzJcdTgwNzNcdTgwNzRcdTgwNzVcdTgwNzZcdTgwNzdcdTgwNzhcdTgwNzlcdTgwN2FcdTgwN2JcdTgwN2NcdTgwN2RcdTk2''@;'; put 'put ''ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVc''@;'; put 'put ''dTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRl''@;'; put 'put ''ZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZc''@;'; put 'put ''dTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk0XVttXV09NDk2NjQrbSxG''@;'; put 'put ''WzQ5NjY0K21dPXhbMTk0XVttXSk7Zm9yKHhbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0''@;'; put 'put ''XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4''@;'; put 'put ''MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4MGUwXHU4MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5''@;'; put 'put ''XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmXHU4MTIwXHU4MTIxXHU4MTIyXHU4MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4''@;'; put 'put ''MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0''@;'; put 'put ''XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1''@;'; put 'put ''ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzEx''@;'; put 'put ''XHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NV1b''@;'; put 'put ''bV1dPTQ5OTIwK20sRls0OTkyMCttXT14WzE5NV1bbV0pO2Zvcih4WzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0MFx1ODE0MVx1ODE0Mlx1ODE0M1x1ODE0NFx1ODE0NVx1ODE0N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0''@;'; put 'put ''Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1Ylx1ODE1Y1x1ODE1ZFx1ODE1ZVx1ODE1Zlx1ODE2MVx1ODE2Mlx1ODE2M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3OFx1ODE4MVx1ODE4M1x1''@;'; put 'put ''ODE4NFx1ODE4NVx1ODE4Nlx1ODE4N1x1ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5Mlx1ODE5M1x1ODE5NFx1ODE5NVx1ODE5Nlx1ODE5N1x1ODE5OVx1ODE5YVx1ODE5ZVx1ODE5Zlx1ODFhMFx1ODFhMVx1ODFhMlx1ODFhNFx1ODFhNVx1ZmZmZFx1ODFhN1x1ODFh''@;'; put 'put ''OVx1ODFhYlx1ODFhY1x1ODFhZFx1ODFhZVx1ODFhZlx1ODFiMFx1ODFiMVx1ODFiMlx1ODFiNFx1ODFiNVx1ODFiNlx1ODFiN1x1ODFiOFx1ODFiOVx1ODFiY1x1ODFiZFx1ODFiZVx1ODFiZlx1ODFjNFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZFx1ODFjZVx1ODFjZlx1''@;'; put 'put ''ODFkMFx1ODFkMVx1ODFkMlx1ODFkM1x1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJj''@;'; put 'put ''ZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1''@;'; put 'put ''ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWEx''@;'; put 'put ''OFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk2XVttXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoYWVbeFsxOTZdW21dXT01MDE3NittLEZbNTAxNzYrbV09eFsxOTZdW21dKTtmb3IoeFsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxZDRcdTgxZDVcdTgxZDZcdTgxZDdcdTgxZDhcdTgxZDlcdTgxZGFcdTgxZGJcdTgx''@;'; put 'put ''ZGNcdTgxZGRcdTgxZGVcdTgxZGZcdTgxZTBcdTgxZTFcdTgxZTJcdTgxZTRcdTgxZTVcdTgxZTZcdTgxZThcdTgxZTlcdTgxZWJcdTgxZWVcdTgxZWZcdTgxZjBcdTgxZjFcdTgxZjJcdTgxZjVcdTgxZjZcdTgxZjdcdTgxZjhcdTgxZjlcdTgxZmFcdTgxZmRcdTgxZmZcdTgyMDNcdTgyMDdc''@;'; put 'put ''dTgyMDhcdTgyMDlcdTgyMGFcdTgyMGJcdTgyMGVcdTgyMGZcdTgyMTFcdTgyMTNcdTgyMTVcdTgyMTZcdTgyMTdcdTgyMThcdTgyMTlcdTgyMWFcdTgyMWRcdTgyMjBcdTgyMjRcdTgyMjVcdTgyMjZcdTgyMjdcdTgyMjlcdTgyMmVcdTgyMzJcdTgyM2FcdTgyM2NcdTgyM2RcdTgyM2ZcdWZm''@;'; put 'put ''ZmRcdTgyNDBcdTgyNDFcdTgyNDJcdTgyNDNcdTgyNDVcdTgyNDZcdTgyNDhcdTgyNGFcdTgyNGNcdTgyNGRcdTgyNGVcdTgyNTBcdTgyNTFcdTgyNTJcdTgyNTNcdTgyNTRcdTgyNTVcdTgyNTZcdTgyNTdcdTgyNTlcdTgyNWJcdTgyNWNcdTgyNWRcdTgyNWVcdTgyNjBcdTgyNjFcdTgyNjJc''@;'; put 'put ''dTgyNjNcdTgyNjRcdTgyNjVcdTgyNjZcdTgyNjdcdTgyNjlcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0''@;'; put 'put ''ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJc''@;'; put 'put ''dTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVm''@;'; put 'put ''NmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5N11bbV0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTk3XVttXV09NTA0MzIrbSxGWzUwNDMyK21dPXhbMTk3XVttXSk7Zm9yKHhbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4''@;'; put 'put ''Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2''@;'; put 'put ''XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4''@;'; put 'put ''MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4MmZjXHU4MmZkXHU4MmZlXHU4MmZmXHU4MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2''@;'; put 'put ''XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2''@;'; put 'put ''MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYx''@;'; put 'put ''XHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5''@;'; put 'put ''ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk4XS5sZW5ndGg7KyttKTY1NTMz''@;'; put 'put ''IT09eFsxOThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OF1bbV1dPTUwNjg4K20sRls1MDY4OCttXT14WzE5OF1bbV0pO2Zvcih4WzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1''@;'; put 'put ''ODM0NFx1ODM0NVx1ODM0OFx1ODM0YVx1ODM0Ylx1ODM0Y1x1ODM0ZFx1ODM0ZVx1ODM1M1x1ODM1NVx1ODM1Nlx1ODM1N1x1ODM1OFx1ODM1OVx1ODM1ZFx1ODM2Mlx1ODM3MFx1ODM3MVx1ODM3Mlx1ODM3M1x1ODM3NFx1ODM3NVx1ODM3Nlx1ODM3OVx1ODM3YVx1ODM3ZVx1ODM3Zlx1ODM4''@;'; put 'put ''MFx1ODM4MVx1ODM4Mlx1ODM4M1x1ODM4NFx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMVx1ODNhMlx1ODNhM1x1ODNhNFx1ODNhNVx1ODNhNlx1''@;'; put 'put ''ODNhN1x1ODNhY1x1ODNhZFx1ODNhZVx1ZmZmZFx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNkOVx1ODNkYVx1ODNk''@;'; put 'put ''Ylx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1''@;'; put 'put ''OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNl''@;'; put 'put ''ZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1''@;'; put 'put ''NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OV0ubGVu''@;'; put 'put ''Z3RoOysrbSk2NTUzMyE9PXhbMTk5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTldW21dXT01MDk0NCttLEZbNTA5NDQrbV09eFsxOTldW21dKTtmb3IoeFsyMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzZWVcdTgzZWZc''@;'; put 'put ''dTgzZjNcdTgzZjRcdTgzZjVcdTgzZjZcdTgzZjdcdTgzZmFcdTgzZmJcdTgzZmNcdTgzZmVcdTgzZmZcdTg0MDBcdTg0MDJcdTg0MDVcdTg0MDdcdTg0MDhcdTg0MDlcdTg0MGFcdTg0MTBcdTg0MTJcdTg0MTNcdTg0MTRcdTg0MTVcdTg0MTZcdTg0MTdcdTg0MTlcdTg0MWFcdTg0MWJcdTg0''@;'; put 'put ''MWVcdTg0MWZcdTg0MjBcdTg0MjFcdTg0MjJcdTg0MjNcdTg0MjlcdTg0MmFcdTg0MmJcdTg0MmNcdTg0MmRcdTg0MmVcdTg0MmZcdTg0MzBcdTg0MzJcdTg0MzNcdTg0MzRcdTg0MzVcdTg0MzZcdTg0MzdcdTg0MzlcdTg0M2FcdTg0M2JcdTg0M2VcdTg0M2ZcdTg0NDBcdTg0NDFcdTg0NDJc''@;'; put 'put ''dTg0NDNcdTg0NDRcdTg0NDVcdTg0NDdcdTg0NDhcdTg0NDlcdWZmZmRcdTg0NGFcdTg0NGJcdTg0NGNcdTg0NGRcdTg0NGVcdTg0NGZcdTg0NTBcdTg0NTJcdTg0NTNcdTg0NTRcdTg0NTVcdTg0NTZcdTg0NThcdTg0NWRcdTg0NWVcdTg0NWZcdTg0NjBcdTg0NjJcdTg0NjRcdTg0NjVcdTg0''@;'; put 'put ''NjZcdTg0NjdcdTg0NjhcdTg0NmFcdTg0NmVcdTg0NmZcdTg0NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N2JcdTg0N2NcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhc''@;'; put 'put ''dTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRl''@;'; put 'put ''YmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2Fc''@;'; put 'put ''dTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7''@;'; put 'put ''bSE9eFsyMDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAwXVttXV09NTEyMDArbSxGWzUxMjAwK21dPXhbMjAwXVttXSk7Zm9yKHhbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgwXHU4NDgxXHU4NDgzXHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmXHU4NDkwXHU4NDkxXHU4NDkyXHU4NDkzXHU4NDk0XHU4NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4''@;'; put 'put ''NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4NGE3XHU4NGE4XHU4NGE5XHU4NGFhXHU4NGFiXHU4NGFjXHU4NGFkXHU4NGFlXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4''@;'; put 'put ''XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1XHU4NGQ3XHVmZmZkXHU4NGQ4XHU4NGQ5XHU4NGRhXHU4NGRiXHU4NGRjXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4''@;'; put 'put ''NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4NGY2XHU4NGY3XHU4NGY4XHU4NGY5XHU4NGZhXHU4NGZiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVl''@;'; put 'put ''XHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3''@;'; put 'put ''ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0''@;'; put 'put ''XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksbT0wO20hPXhbMjAxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMV1bbV1dPTUxNDU2K20sRls1MTQ1NittXT14WzIwMV1bbV0pO2Zvcih4WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ODUwM1x1ODUwNFx1ODUwNVx1ODUwNlx1ODUwN1x1ODUwOFx1ODUwOVx1ODUwYVx1ODUwYlx1ODUwZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUxNVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1ODUyMlx1''@;'; put 'put ''ODUyM1x1ODUyNFx1ODUyNVx1ODUyNlx1ODUyN1x1ODUyOFx1ODUyOVx1ODUyYVx1ODUyZFx1ODUyZVx1ODUyZlx1ODUzMFx1ODUzMVx1ODUzMlx1ODUzM1x1ODUzNFx1ODUzNVx1ODUzNlx1ODUzZVx1ODUzZlx1ODU0MFx1ODU0MVx1ODU0Mlx1ODU0NFx1ODU0NVx1ODU0Nlx1ODU0N1x1ODU0''@;'; put 'put ''Ylx1ODU0Y1x1ODU0ZFx1ODU0ZVx1ODU0Zlx1ODU1MFx1ODU1MVx1ODU1Mlx1ODU1M1x1ODU1NFx1ODU1NVx1ZmZmZFx1ODU1N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1ODU1Zlx1ODU2MFx1ODU2MVx1ODU2Mlx1ODU2M1x1ODU2NVx1ODU2Nlx1ODU2N1x1ODU2OVx1ODU2YVx1''@;'; put 'put ''ODU2Ylx1ODU2Y1x1ODU2ZFx1ODU2ZVx1ODU2Zlx1ODU3MFx1ODU3MVx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJk''@;'; put 'put ''N1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1''@;'; put 'put ''NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4''@;'; put 'put ''YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1''@;'; put 'put ''NmYzMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDJdW21dXT01MTcxMittLEZbNTE3MTIrbV09eFsyMDJdW21dKTtmb3IoeFsyMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODJcdTg1ODNcdTg1ODZcdTg1ODhcdTg1ODlcdTg1OGFcdTg1OGJcdTg1OGNcdTg1OGRcdTg1OGVcdTg1OTBcdTg1OTFcdTg1OTJcdTg1OTNcdTg1OTRcdTg1OTVcdTg1OTZcdTg1OTdcdTg1OThcdTg1OTlcdTg1OWFcdTg1OWRcdTg1OWVc''@;'; put 'put ''dTg1OWZcdTg1YTBcdTg1YTFcdTg1YTJcdTg1YTNcdTg1YTVcdTg1YTZcdTg1YTdcdTg1YTlcdTg1YWJcdTg1YWNcdTg1YWRcdTg1YjFcdTg1YjJcdTg1YjNcdTg1YjRcdTg1YjVcdTg1YjZcdTg1YjhcdTg1YmFcdTg1YmJcdTg1YmNcdTg1YmRcdTg1YmVcdTg1YmZcdTg1YzBcdTg1YzJcdTg1''@;'; put 'put ''YzNcdTg1YzRcdTg1YzVcdTg1YzZcdTg1YzdcdTg1YzhcdTg1Y2FcdTg1Y2JcdTg1Y2NcdTg1Y2RcdTg1Y2VcdTg1ZDFcdTg1ZDJcdWZmZmRcdTg1ZDRcdTg1ZDZcdTg1ZDdcdTg1ZDhcdTg1ZDlcdTg1ZGFcdTg1ZGJcdTg1ZGRcdTg1ZGVcdTg1ZGZcdTg1ZTBcdTg1ZTFcdTg1ZTJcdTg1ZTNc''@;'; put 'put ''dTg1ZTVcdTg1ZTZcdTg1ZTdcdTg1ZThcdTg1ZWFcdTg1ZWJcdTg1ZWNcdTg1ZWRcdTg1ZWVcdTg1ZWZcdTg1ZjBcdTg1ZjFcdTg1ZjJcdTg1ZjNcdTg1ZjRcdTg1ZjVcdTg1ZjZcdTg1ZjdcdTg1ZjhcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYy''@;'; put 'put ''ZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJc''@;'; put 'put ''dTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgw''@;'; put 'put ''ODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZc''@;'; put 'put ''dTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAzXVttXV09NTE5NjgrbSxGWzUxOTY4K21dPXhbMjAzXVttXSk7Zm9yKHhbMjA0XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwXHU4NjAxXHU4NjAyXHU4NjAzXHU4NjA0XHU4NjA2XHU4NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEw''@;'; put 'put ''XHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3XHU4NjE4XHU4NjE5XHU4NjFhXHU4NjFiXHU4NjFjXHU4NjFkXHU4NjFlXHU4NjFmXHU4NjIwXHU4NjIxXHU4NjIyXHU4NjIzXHU4NjI0XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4''@;'; put 'put ''NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4NjM0XHU4NjM1XHU4NjM2XHU4NjM3XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwXHVmZmZkXHU4NjQxXHU4NjQyXHU4NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRj''@;'; put 'put ''XHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzXHU4NjY0XHU4NjY1XHU4NjY2XHU4NjY3XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2''@;'; put 'put ''MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJh''@;'; put 'put ''XHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1''@;'; put 'put ''MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0''@;'; put 'put ''XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNF1bbV1dPTUyMjI0K20sRls1MjIyNCttXT14WzIwNF1bbV0pO2Zvcih4WzIwNV09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3Mlx1ODY3M1x1ODY3NFx1ODY3NVx1ODY3Nlx1ODY3N1x1ODY3OFx1ODY4M1x1ODY4NFx1ODY4NVx1ODY4Nlx1ODY4N1x1ODY4OFx1ODY4OVx1ODY4ZVx1ODY4''@;'; put 'put ''Zlx1ODY5MFx1ODY5MVx1ODY5Mlx1ODY5NFx1ODY5Nlx1ODY5N1x1ODY5OFx1ODY5OVx1ODY5YVx1ODY5Ylx1ODY5ZVx1ODY5Zlx1ODZhMFx1ODZhMVx1ODZhMlx1ODZhNVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYlx1ODZiY1x1''@;'; put 'put ''ODZiZFx1ODZiZVx1ODZiZlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkY1x1ZmZmZFx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1ODZl''@;'; put 'put ''YVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcwMVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcwYlx1ODcwY1x1ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1''@;'; put 'put ''NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2''@;'; put 'put ''MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1''@;'; put 'put ''ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4''@;'; put 'put ''OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDVdW21dXT01MjQ4MCttLEZbNTI0ODArbV09eFsyMDVdW21dKTtm''@;'; put 'put ''b3IoeFsyMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3MTlcdTg3MWJcdTg3MWRcdTg3MWZcdTg3MjBcdTg3MjRcdTg3MjZcdTg3MjdcdTg3MjhcdTg3MmFcdTg3MmJcdTg3MmNcdTg3MmRcdTg3MmZcdTg3MzBcdTg3MzJcdTg3''@;'; put 'put ''MzNcdTg3MzVcdTg3MzZcdTg3MzhcdTg3MzlcdTg3M2FcdTg3M2NcdTg3M2RcdTg3NDBcdTg3NDFcdTg3NDJcdTg3NDNcdTg3NDRcdTg3NDVcdTg3NDZcdTg3NGFcdTg3NGJcdTg3NGRcdTg3NGZcdTg3NTBcdTg3NTFcdTg3NTJcdTg3NTRcdTg3NTVcdTg3NTZcdTg3NThcdTg3NWFcdTg3NWJc''@;'; put 'put ''dTg3NWNcdTg3NWRcdTg3NWVcdTg3NWZcdTg3NjFcdTg3NjJcdTg3NjZcdTg3NjdcdTg3NjhcdTg3NjlcdTg3NmFcdTg3NmJcdTg3NmNcdTg3NmRcdTg3NmZcdTg3NzFcdTg3NzJcdTg3NzNcdTg3NzVcdWZmZmRcdTg3NzdcdTg3NzhcdTg3NzlcdTg3N2FcdTg3N2ZcdTg3ODBcdTg3ODFcdTg3''@;'; put 'put ''ODRcdTg3ODZcdTg3ODdcdTg3ODlcdTg3OGFcdTg3OGNcdTg3OGVcdTg3OGZcdTg3OTBcdTg3OTFcdTg3OTJcdTg3OTRcdTg3OTVcdTg3OTZcdTg3OThcdTg3OTlcdTg3OWFcdTg3OWJcdTg3OWNcdTg3OWRcdTg3OWVcdTg3YTBcdTg3YTFcdTg3YTJcdTg3YTNcdTg3YTRcdTVkY2RcdTVmYWVc''@;'; put 'put ''dTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVj''@;'; put 'put ''MDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThc''@;'; put 'put ''dTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcx''@;'; put 'put ''OTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA2XVttXV09NTI3MzYrbSxGWzUyNzM2K21d''@;'; put 'put ''PXhbMjA2XVttXSk7Zm9yKHhbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4''@;'; put 'put ''N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxXHU4N2MyXHU4N2MzXHU4N2M0XHU4N2M1XHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjXHU4N2NkXHU4N2NlXHU4N2NmXHU4N2QwXHU4N2Q0XHU4N2Q1XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2Rm''@;'; put 'put ''XHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmXHU4N2YwXHU4N2YxXHU4N2YyXHU4N2YzXHU4N2Y0XHU4N2Y1XHU4N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4''@;'; put 'put ''ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4ODA1XHU4ODA2XHU4ODA3XHU4ODA4XHU4ODA5XHU4ODBiXHU4ODBjXHU4ODBkXHU4ODBlXHU4ODBmXHU4ODEwXHU4ODExXHU4ODEyXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIz''@;'; put 'put ''XHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5''@;'; put 'put ''NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJl''@;'; put 'put ''XHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4''@;'; put 'put ''YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwN11bbV1dPTUyOTky''@;'; put 'put ''K20sRls1Mjk5MittXT14WzIwN11bbV0pO2Zvcih4WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyNFx1ODgyNVx1ODgyNlx1ODgyN1x1ODgyOFx1ODgyOVx1ODgyYVx1ODgyYlx1ODgyY1x1ODgyZFx1ODgyZVx1ODgyZlx1''@;'; put 'put ''ODgzMFx1ODgzMVx1ODgzM1x1ODgzNFx1ODgzNVx1ODgzNlx1ODgzN1x1ODgzOFx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1ODg0MVx1ODg0Mlx1ODg0M1x1ODg0Nlx1ODg0N1x1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg0Zlx1ODg1MFx1ODg1MVx1ODg1Mlx1ODg1''@;'; put 'put ''M1x1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Ylx1ODg1Y1x1ODg1ZFx1ODg1ZVx1ODg1Zlx1ODg2MFx1ODg2Nlx1ODg2N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YVx1ZmZmZFx1ODg3Ylx1ODg3Y1x1ODg4MFx1''@;'; put 'put ''ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1ODg5N1x1ODg5OFx1ODg5OVx1ODg5YVx1ODg5Ylx1ODg5ZFx1ODg5ZVx1ODg5Zlx1ODhhMFx1ODhhMVx1ODhhM1x1ODhhNVx1ODhhNlx1ODhhN1x1ODhh''@;'; put 'put ''OFx1ODhhOVx1ODhhYVx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1''@;'; put 'put ''NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlk''@;'; put 'put ''M1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1''@;'; put 'put ''NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsy''@;'; put 'put ''MDhdW21dXT01MzI0OCttLEZbNTMyNDgrbV09eFsyMDhdW21dKTtmb3IoeFsyMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4YWNcdTg4YWVcdTg4YWZcdTg4YjBcdTg4YjJcdTg4YjNcdTg4YjRcdTg4YjVcdTg4YjZcdTg4Yjhc''@;'; put 'put ''dTg4YjlcdTg4YmFcdTg4YmJcdTg4YmRcdTg4YmVcdTg4YmZcdTg4YzBcdTg4YzNcdTg4YzRcdTg4YzdcdTg4YzhcdTg4Y2FcdTg4Y2JcdTg4Y2NcdTg4Y2RcdTg4Y2ZcdTg4ZDBcdTg4ZDFcdTg4ZDNcdTg4ZDZcdTg4ZDdcdTg4ZGFcdTg4ZGJcdTg4ZGNcdTg4ZGRcdTg4ZGVcdTg4ZTBcdTg4''@;'; put 'put ''ZTFcdTg4ZTZcdTg4ZTdcdTg4ZTlcdTg4ZWFcdTg4ZWJcdTg4ZWNcdTg4ZWRcdTg4ZWVcdTg4ZWZcdTg4ZjJcdTg4ZjVcdTg4ZjZcdTg4ZjdcdTg4ZmFcdTg4ZmJcdTg4ZmRcdTg4ZmZcdTg5MDBcdTg5MDFcdTg5MDNcdTg5MDRcdTg5MDVcdTg5MDZcdTg5MDdcdTg5MDhcdWZmZmRcdTg5MDlc''@;'; put 'put ''dTg5MGJcdTg5MGNcdTg5MGRcdTg5MGVcdTg5MGZcdTg5MTFcdTg5MTRcdTg5MTVcdTg5MTZcdTg5MTdcdTg5MThcdTg5MWNcdTg5MWRcdTg5MWVcdTg5MWZcdTg5MjBcdTg5MjJcdTg5MjNcdTg5MjRcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MjlcdTg5MmNcdTg5MmRcdTg5MmVcdTg5MmZcdTg5''@;'; put 'put ''MzFcdTg5MzJcdTg5MzNcdTg5MzVcdTg5MzdcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFc''@;'; put 'put ''dThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVl''@;'; put 'put ''ZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3Njhc''@;'; put 'put ''dTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOV1bbV0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKGFlW3hbMjA5XVttXV09NTM1MDQrbSxGWzUzNTA0K21dPXhbMjA5XVttXSk7Zm9yKHhbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNm''@;'; put 'put ''XHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4OTQ5XHU4OTRhXHU4OTRiXHU4OTRjXHU4OTRkXHU4OTRlXHU4OTRmXHU4OTUwXHU4OTUxXHU4OTUyXHU4OTUzXHU4OTU0XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4''@;'; put 'put ''OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTY0XHU4OTY1XHU4OTY3XHU4OTY4XHU4OTY5XHU4OTZhXHU4OTZiXHU4OTZjXHU4OTZkXHU4OTZlXHU4OTZmXHU4OTcwXHU4OTcxXHU4OTcyXHU4OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdj''@;'; put 'put ''XHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3XHU4OTg4XHU4OTg5XHU4OThhXHU4OThiXHU4OThjXHU4OThkXHU4OThlXHU4OThmXHU4OTkwXHU4OTkxXHU4OTkyXHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4''@;'; put 'put ''OTliXHU4OTljXHU4OTlkXHU4OTllXHU4OTlmXHU4OWEwXHU4OWExXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFh''@;'; put 'put ''XHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1''@;'; put 'put ''ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAy''@;'; put 'put ''XHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTBd''@;'; put 'put ''W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMF1bbV1dPTUzNzYwK20sRls1Mzc2MCttXT14WzIxMF1bbV0pO2Zvcih4WzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODlhMlx1ODlhM1x1ODlhNFx1ODlhNVx1ODlhNlx1ODlh''@;'; put 'put ''N1x1ODlhOFx1ODlhOVx1ODlhYVx1ODlhYlx1ODlhY1x1ODlhZFx1ODlhZVx1ODlhZlx1ODliMFx1ODliMVx1ODliMlx1ODliM1x1ODliNFx1ODliNVx1ODliNlx1ODliN1x1ODliOFx1ODliOVx1ODliYVx1ODliYlx1ODliY1x1ODliZFx1ODliZVx1ODliZlx1ODljMFx1ODljM1x1ODljZFx1''@;'; put 'put ''ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODllNFx1ODllN1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlmNFx1ODlmNVx1ODlmNlx1ODlmN1x1ODlm''@;'; put 'put ''OFx1ODlmOVx1ODlmYVx1ZmZmZFx1ODlmYlx1ODlmY1x1ODlmZFx1ODlmZVx1ODlmZlx1OGEwMVx1OGEwMlx1OGEwM1x1OGEwNFx1OGEwNVx1OGEwNlx1OGEwOFx1OGEwOVx1OGEwYVx1OGEwYlx1OGEwY1x1OGEwZFx1OGEwZVx1OGEwZlx1OGExMFx1OGExMVx1OGExMlx1OGExM1x1OGExNFx1''@;'; put 'put ''OGExNVx1OGExNlx1OGExN1x1OGExOFx1OGExOVx1OGExYVx1OGExYlx1OGExY1x1OGExZFx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYy''@;'; put 'put ''MFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1''@;'; put 'put ''OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZl''@;'; put 'put ''OFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMV0ubGVuZ3RoOysrbSk2''@;'; put 'put ''NTUzMyE9PXhbMjExXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTFdW21dXT01NDAxNittLEZbNTQwMTYrbV09eFsyMTFdW21dKTtmb3IoeFsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhMWVcdThhMWZcdThhMjBcdThh''@;'; put 'put ''MjFcdThhMjJcdThhMjNcdThhMjRcdThhMjVcdThhMjZcdThhMjdcdThhMjhcdThhMjlcdThhMmFcdThhMmJcdThhMmNcdThhMmRcdThhMmVcdThhMmZcdThhMzBcdThhMzFcdThhMzJcdThhMzNcdThhMzRcdThhMzVcdThhMzZcdThhMzdcdThhMzhcdThhMzlcdThhM2FcdThhM2JcdThhM2Nc''@;'; put 'put ''dThhM2RcdThhM2ZcdThhNDBcdThhNDFcdThhNDJcdThhNDNcdThhNDRcdThhNDVcdThhNDZcdThhNDdcdThhNDlcdThhNGFcdThhNGJcdThhNGNcdThhNGRcdThhNGVcdThhNGZcdThhNTBcdThhNTFcdThhNTJcdThhNTNcdThhNTRcdThhNTVcdThhNTZcdThhNTdcdThhNThcdThhNTlcdThh''@;'; put 'put ''NWFcdThhNWJcdThhNWNcdThhNWRcdThhNWVcdWZmZmRcdThhNWZcdThhNjBcdThhNjFcdThhNjJcdThhNjNcdThhNjRcdThhNjVcdThhNjZcdThhNjdcdThhNjhcdThhNjlcdThhNmFcdThhNmJcdThhNmNcdThhNmRcdThhNmVcdThhNmZcdThhNzBcdThhNzFcdThhNzJcdThhNzNcdThhNzRc''@;'; put 'put ''dThhNzVcdThhNzZcdThhNzdcdThhNzhcdThhN2FcdThhN2JcdThhN2NcdThhN2RcdThhN2VcdThhN2ZcdThhODBcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0''@;'; put 'put ''NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRc''@;'; put 'put ''dTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZm''@;'; put 'put ''YTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTJd''@;'; put 'put ''Lmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEyXVttXV09NTQyNzIrbSxGWzU0MjcyK21dPXhbMjEyXVttXSk7Zm9yKHhbMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4''@;'; put 'put ''YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4YThjXHU4YThkXHU4YThlXHU4YThmXHU4YTkwXHU4YTkxXHU4YTkyXHU4YTk0XHU4YTk1XHU4YTk2XHU4YTk3XHU4YTk4XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEw''@;'; put 'put ''XHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4XHU4YWE5XHU4YWFhXHU4YWFiXHU4YWFjXHU4YWFkXHU4YWFlXHU4YWFmXHU4YWIwXHU4YWIxXHU4YWIyXHU4YWIzXHU4YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4''@;'; put 'put ''YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4YWMzXHU4YWM0XHU4YWM1XHU4YWM2XHU4YWM3XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWNiXHU4YWNjXHU4YWNkXHU4YWNlXHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2''@;'; put 'put ''XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRhXHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRlXHU4YWRmXHU4YWUwXHU4YWUxXHU4YWUyXHU4YWUzXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1''@;'; put 'put ''YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEw''@;'; put 'put ''XHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3''@;'; put 'put ''NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''bT0wO20hPXhbMjEzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxM11bbV1dPTU0NTI4K20sRls1NDUyOCttXT14WzIxM11bbV0pO2Zvcih4WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OGFlNFx1OGFlNVx1OGFlNlx1OGFlN1x1OGFlOFx1OGFlOVx1OGFlYVx1OGFlYlx1OGFlY1x1OGFlZFx1OGFlZVx1OGFlZlx1OGFmMFx1OGFmMVx1OGFmMlx1OGFmM1x1OGFmNFx1OGFmNVx1OGFmNlx1OGFmN1x1OGFmOFx1OGFmOVx1OGFmYVx1OGFmYlx1OGFmY1x1OGFmZFx1OGFm''@;'; put 'put ''ZVx1OGFmZlx1OGIwMFx1OGIwMVx1OGIwMlx1OGIwM1x1OGIwNFx1OGIwNVx1OGIwNlx1OGIwOFx1OGIwOVx1OGIwYVx1OGIwYlx1OGIwY1x1OGIwZFx1OGIwZVx1OGIwZlx1OGIxMFx1OGIxMVx1OGIxMlx1OGIxM1x1OGIxNFx1OGIxNVx1OGIxNlx1OGIxN1x1OGIxOFx1OGIxOVx1OGIxYVx1''@;'; put 'put ''OGIxYlx1OGIxY1x1OGIxZFx1OGIxZVx1OGIxZlx1OGIyMFx1OGIyMVx1OGIyMlx1OGIyM1x1ZmZmZFx1OGIyNFx1OGIyNVx1OGIyN1x1OGIyOFx1OGIyOVx1OGIyYVx1OGIyYlx1OGIyY1x1OGIyZFx1OGIyZVx1OGIyZlx1OGIzMFx1OGIzMVx1OGIzMlx1OGIzM1x1OGIzNFx1OGIzNVx1OGIz''@;'; put 'put ''Nlx1OGIzN1x1OGIzOFx1OGIzOVx1OGIzYVx1OGIzYlx1OGIzY1x1OGIzZFx1OGIzZVx1OGIzZlx1OGI0MFx1OGI0MVx1OGI0Mlx1OGI0M1x1OGI0NFx1OGI0NVx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1''@;'; put 'put ''NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1Nzll''@;'; put 'put ''OVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1''@;'; put 'put ''NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MVx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTRdW21dXT01NDc4NCttLEZbNTQ3ODQrbV09eFsyMTRdW21dKTtmb3IoeFsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdThiNDZcdThiNDdcdThiNDhcdThiNDlcdThiNGFcdThiNGJcdThiNGNcdThiNGRcdThiNGVcdThiNGZcdThiNTBcdThiNTFcdThiNTJcdThiNTNcdThiNTRcdThiNTVcdThiNTZcdThiNTdcdThiNThcdThiNTlcdThiNWFcdThiNWJcdThiNWNcdThiNWRcdThi''@;'; put 'put ''NWVcdThiNWZcdThiNjBcdThiNjFcdThiNjJcdThiNjNcdThiNjRcdThiNjVcdThiNjdcdThiNjhcdThiNjlcdThiNmFcdThiNmJcdThiNmRcdThiNmVcdThiNmZcdThiNzBcdThiNzFcdThiNzJcdThiNzNcdThiNzRcdThiNzVcdThiNzZcdThiNzdcdThiNzhcdThiNzlcdThiN2FcdThiN2Jc''@;'; put 'put ''dThiN2NcdThiN2RcdThiN2VcdThiN2ZcdThiODBcdThiODFcdThiODJcdThiODNcdThiODRcdThiODVcdThiODZcdWZmZmRcdThiODdcdThiODhcdThiODlcdThiOGFcdThiOGJcdThiOGNcdThiOGRcdThiOGVcdThiOGZcdThiOTBcdThiOTFcdThiOTJcdThiOTNcdThiOTRcdThiOTVcdThi''@;'; put 'put ''OTZcdThiOTdcdThiOThcdThiOTlcdThiOWFcdThiOWJcdThiOWNcdThiOWRcdThiOWVcdThiOWZcdThiYWNcdThiYjFcdThiYmJcdThiYzdcdThiZDBcdThiZWFcdThjMDlcdThjMWVcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNc''@;'; put 'put ''dTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcw''@;'; put 'put ''N2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2Rc''@;'; put 'put ''dTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE1XVttXV09NTUwNDArbSxGWzU1MDQwK21dPXhbMjE1XVttXSk7Zm9yKHhbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4YzNiXHU4YzNjXHU4YzNkXHU4YzNlXHU4YzNmXHU4YzQwXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4''@;'; put 'put ''YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVkXHU4YzVlXHU4YzVmXHU4YzYwXHU4YzYzXHU4YzY0XHU4YzY1XHU4YzY2XHU4YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1''@;'; put 'put ''XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4YzdjXHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4YzgxXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4YzhiXHU4YzhkXHU4YzhlXHU4YzhmXHU4YzkwXHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4''@;'; put 'put ''YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2EyXHU4Y2EzXHU4Y2E0XHU4Y2E1XHU4Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5XHU4Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4''@;'; put 'put ''XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1''@;'; put 'put ''NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYx''@;'; put 'put ''XHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0''@;'; put 'put ''ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNl1bbV1dPTU1Mjk2K20sRls1NTI5NittXT14WzIxNl1bbV0pO2Zvcih4WzIxN109Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhZVx1OGNhZlx1OGNiMFx1OGNiMVx1OGNiMlx1OGNiM1x1OGNiNFx1OGNiNVx1OGNiNlx1OGNiN1x1OGNiOFx1OGNiOVx1OGNiYVx1OGNiYlx1OGNiY1x1OGNiZFx1OGNiZVx1OGNiZlx1OGNjMFx1OGNjMVx1''@;'; put 'put ''OGNjMlx1OGNjM1x1OGNjNFx1OGNjNVx1OGNjNlx1OGNjN1x1OGNjOFx1OGNjOVx1OGNjYVx1OGNjYlx1OGNjY1x1OGNjZFx1OGNjZVx1OGNjZlx1OGNkMFx1OGNkMVx1OGNkMlx1OGNkM1x1OGNkNFx1OGNkNVx1OGNkNlx1OGNkN1x1OGNkOFx1OGNkOVx1OGNkYVx1OGNkYlx1OGNkY1x1OGNk''@;'; put 'put ''ZFx1OGNkZVx1OGNkZlx1OGNlMFx1OGNlMVx1OGNlMlx1OGNlM1x1OGNlNFx1OGNlNVx1OGNlNlx1OGNlN1x1OGNlOFx1OGNlOVx1OGNlYVx1OGNlYlx1OGNlY1x1ZmZmZFx1OGNlZFx1OGNlZVx1OGNlZlx1OGNmMFx1OGNmMVx1OGNmMlx1OGNmM1x1OGNmNFx1OGNmNVx1OGNmNlx1OGNmN1x1''@;'; put 'put ''OGNmOFx1OGNmOVx1OGNmYVx1OGNmYlx1OGNmY1x1OGNmZFx1OGNmZVx1OGNmZlx1OGQwMFx1OGQwMVx1OGQwMlx1OGQwM1x1OGQwNFx1OGQwNVx1OGQwNlx1OGQwN1x1OGQwOFx1OGQwOVx1OGQwYVx1OGQwYlx1OGQwY1x1OGQwZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3''@;'; put 'put ''NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1''@;'; put 'put ''NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2''@;'; put 'put ''NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1''@;'; put 'put ''ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTddW21dXT01NTU1MittLEZbNTU1NTIrbV09eFsyMTddW21dKTtmb3IoeFsyMThd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMGVcdThkMGZcdThkMTBcdThkMTFcdThkMTJcdThkMTNcdThkMTRcdThkMTVcdThkMTZcdThkMTdcdThkMThcdThkMTlcdThkMWFcdThkMWJcdThkMWNcdThkMjBcdThkNTFcdThkNTJc''@;'; put 'put ''dThkNTdcdThkNWZcdThkNjVcdThkNjhcdThkNjlcdThkNmFcdThkNmNcdThkNmVcdThkNmZcdThkNzFcdThkNzJcdThkNzhcdThkNzlcdThkN2FcdThkN2JcdThkN2NcdThkN2RcdThkN2VcdThkN2ZcdThkODBcdThkODJcdThkODNcdThkODZcdThkODdcdThkODhcdThkODlcdThkOGNcdThk''@;'; put 'put ''OGRcdThkOGVcdThkOGZcdThkOTBcdThkOTJcdThkOTNcdThkOTVcdThkOTZcdThkOTdcdThkOThcdThkOTlcdThkOWFcdThkOWJcdThkOWNcdThkOWRcdThkOWVcdThkYTBcdThkYTFcdWZmZmRcdThkYTJcdThkYTRcdThkYTVcdThkYTZcdThkYTdcdThkYThcdThkYTlcdThkYWFcdThkYWJc''@;'; put 'put ''dThkYWNcdThkYWRcdThkYWVcdThkYWZcdThkYjBcdThkYjJcdThkYjZcdThkYjdcdThkYjlcdThkYmJcdThkYmRcdThkYzBcdThkYzFcdThkYzJcdThkYzVcdThkYzdcdThkYzhcdThkYzlcdThkY2FcdThkY2RcdThkZDBcdThkZDJcdThkZDNcdThkZDRcdTUxYzdcdTUxOTZcdTUxYTJcdTUx''@;'; put 'put ''YTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNc''@;'; put 'put ''dThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThj''@;'; put 'put ''MmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJc''@;'; put 'put ''dTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE4XVttXV09NTU4MDgrbSxGWzU1ODA4K21dPXhbMjE4XVtt''@;'; put 'put ''XSk7Zm9yKHhbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYy''@;'; put 'put ''XHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlXHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAzXHU4ZTA0XHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4''@;'; put 'put ''ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4ZTJkXHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZkXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRl''@;'; put 'put ''XHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVhXHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYxXHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5''@;'; put 'put ''MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEy''@;'; put 'put ''XHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1''@;'; put 'put ''NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1''@;'; put 'put ''XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOV1bbV1dPTU2MDY0K20sRls1NjA2''@;'; put 'put ''NCttXT14WzIxOV1bbV0pO2Zvcih4WzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU3M1x1OGU3NVx1OGU3N1x1OGU3OFx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU3ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4''@;'; put 'put ''Nlx1OGU4OFx1OGU4OVx1OGU4YVx1OGU4Ylx1OGU4Y1x1OGU4ZFx1OGU4ZVx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NVx1OGU5Nlx1OGU5N1x1OGU5OFx1OGU5OVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5Zlx1OGVhMFx1OGVhMVx1OGVhMlx1OGVhM1x1OGVhNFx1OGVhNVx1OGVhNlx1OGVhN1x1''@;'; put 'put ''OGVhOFx1OGVhOVx1OGVhYVx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViM1x1OGViNFx1OGViNVx1OGViNlx1OGViN1x1OGViOFx1OGViOVx1OGViYlx1OGViY1x1OGViZFx1OGViZVx1OGViZlx1OGVjMFx1OGVjMVx1OGVjMlx1ZmZmZFx1OGVjM1x1OGVjNFx1OGVjNVx1OGVjNlx1OGVj''@;'; put 'put ''N1x1OGVjOFx1OGVjOVx1OGVjYVx1OGVjYlx1OGVjY1x1OGVjZFx1OGVjZlx1OGVkMFx1OGVkMVx1OGVkMlx1OGVkM1x1OGVkNFx1OGVkNVx1OGVkNlx1OGVkN1x1OGVkOFx1OGVkOVx1OGVkYVx1OGVkYlx1OGVkY1x1OGVkZFx1OGVkZVx1OGVkZlx1OGVlMFx1OGVlMVx1OGVlMlx1OGVlM1x1''@;'; put 'put ''OGVlNFx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5''@;'; put 'put ''MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1''@;'; put 'put ''ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMy''@;'; put 'put ''Zlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjBdW21dXT01''@;'; put 'put ''NjMyMCttLEZbNTYzMjArbV09eFsyMjBdW21dKTtmb3IoeFsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZTVcdThlZTZcdThlZTdcdThlZThcdThlZTlcdThlZWFcdThlZWJcdThlZWNcdThlZWRcdThlZWVcdThlZWZcdThl''@;'; put 'put ''ZjBcdThlZjFcdThlZjJcdThlZjNcdThlZjRcdThlZjVcdThlZjZcdThlZjdcdThlZjhcdThlZjlcdThlZmFcdThlZmJcdThlZmNcdThlZmRcdThlZmVcdThlZmZcdThmMDBcdThmMDFcdThmMDJcdThmMDNcdThmMDRcdThmMDVcdThmMDZcdThmMDdcdThmMDhcdThmMDlcdThmMGFcdThmMGJc''@;'; put 'put ''dThmMGNcdThmMGRcdThmMGVcdThmMGZcdThmMTBcdThmMTFcdThmMTJcdThmMTNcdThmMTRcdThmMTVcdThmMTZcdThmMTdcdThmMThcdThmMTlcdThmMWFcdThmMWJcdThmMWNcdThmMWRcdThmMWVcdThmMWZcdThmMjBcdThmMjFcdThmMjJcdThmMjNcdWZmZmRcdThmMjRcdThmMjVcdThm''@;'; put 'put ''MjZcdThmMjdcdThmMjhcdThmMjlcdThmMmFcdThmMmJcdThmMmNcdThmMmRcdThmMmVcdThmMmZcdThmMzBcdThmMzFcdThmMzJcdThmMzNcdThmMzRcdThmMzVcdThmMzZcdThmMzdcdThmMzhcdThmMzlcdThmM2FcdThmM2JcdThmM2NcdThmM2RcdThmM2VcdThmM2ZcdThmNDBcdThmNDFc''@;'; put 'put ''dThmNDJcdThmNDNcdThmNDRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgz''@;'; put 'put ''YThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBc''@;'; put 'put ''dTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0''@;'; put 'put ''YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFl''@;'; put 'put ''W3hbMjIxXVttXV09NTY1NzYrbSxGWzU2NTc2K21dPXhbMjIxXVttXSk7Zm9yKHhbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4''@;'; put 'put ''ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3XHU4ZjU4XHU4ZjU5XHU4ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4ZjVlXHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4Zjky''@;'; put 'put ''XHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4''@;'; put 'put ''ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4''@;'; put 'put ''XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4''@;'; put 'put ''NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2Mjlm''@;'; put 'put ''XHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2''@;'; put 'put ''M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjJdW21dLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihhZVt4WzIyMl1bbV1dPTU2ODMyK20sRls1NjgzMittXT14WzIyMl1bbV0pO2Zvcih4WzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyN1x1OTAyOFx1''@;'; put 'put ''OTAyOVx1OTAyYVx1OTAyYlx1OTAyY1x1OTAzMFx1OTAzMVx1OTAzMlx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1OTA0M1x1OTA0NVx1OTA0Nlx1OTA0OFx1OTA0OVx1OTA0YVx1OTA0Ylx1OTA0Y1x1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1OTA1''@;'; put 'put ''OVx1OTA1YVx1OTA1Y1x1OTA1ZFx1OTA1ZVx1OTA1Zlx1OTA2MFx1OTA2MVx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2Zlx1OTA3MFx1OTA3MVx1OTA3Mlx1OTA3M1x1OTA3Nlx1OTA3N1x1OTA3OFx1OTA3OVx1OTA3YVx1OTA3Ylx1OTA3Y1x1OTA3ZVx1''@;'; put 'put ''OTA4MVx1ZmZmZFx1OTA4NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4Y1x1OTA4ZFx1OTA4ZVx1OTA4Zlx1OTA5MFx1OTA5Mlx1OTA5NFx1OTA5Nlx1OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBh''@;'; put 'put ''Ylx1OTBhZFx1OTBiMlx1OTBiN1x1OTBiY1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1''@;'; put 'put ''NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5''@;'; put 'put ''ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1''@;'; put 'put ''NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhb''@;'; put 'put ''MjIzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjNdW21dXT01NzA4OCttLEZbNTcwODgrbV09eFsyMjNdW21dKTtmb3IoeFsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYzJcdTkwYzNcdTkwYzZcdTkwYzhcdTkwYzlc''@;'; put 'put ''dTkwY2JcdTkwY2NcdTkwY2RcdTkwZDJcdTkwZDRcdTkwZDVcdTkwZDZcdTkwZDhcdTkwZDlcdTkwZGFcdTkwZGVcdTkwZGZcdTkwZTBcdTkwZTNcdTkwZTRcdTkwZTVcdTkwZTlcdTkwZWFcdTkwZWNcdTkwZWVcdTkwZjBcdTkwZjFcdTkwZjJcdTkwZjNcdTkwZjVcdTkwZjZcdTkwZjdcdTkw''@;'; put 'put ''ZjlcdTkwZmFcdTkwZmJcdTkwZmNcdTkwZmZcdTkxMDBcdTkxMDFcdTkxMDNcdTkxMDVcdTkxMDZcdTkxMDdcdTkxMDhcdTkxMDlcdTkxMGFcdTkxMGJcdTkxMGNcdTkxMGRcdTkxMGVcdTkxMGZcdTkxMTBcdTkxMTFcdTkxMTJcdTkxMTNcdTkxMTRcdTkxMTVcdTkxMTZcdTkxMTdcdTkxMThc''@;'; put 'put ''dTkxMWFcdTkxMWJcdTkxMWNcdWZmZmRcdTkxMWRcdTkxMWZcdTkxMjBcdTkxMjFcdTkxMjRcdTkxMjVcdTkxMjZcdTkxMjdcdTkxMjhcdTkxMjlcdTkxMmFcdTkxMmJcdTkxMmNcdTkxMmRcdTkxMmVcdTkxMzBcdTkxMzJcdTkxMzNcdTkxMzRcdTkxMzVcdTkxMzZcdTkxMzdcdTkxMzhcdTkx''@;'; put 'put ''M2FcdTkxM2JcdTkxM2NcdTkxM2RcdTkxM2VcdTkxM2ZcdTkxNDBcdTkxNDFcdTkxNDJcdTkxNDRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZc''@;'; put 'put ''dTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThm''@;'; put 'put ''OTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVc''@;'; put 'put ''dTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjRdLmxlbmd0aDsr''@;'; put 'put ''K20pNjU1MzMhPT14WzIyNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI0XVttXV09NTczNDQrbSxGWzU3MzQ0K21dPXhbMjI0XVttXSk7Zm9yKHhbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4''@;'; put 'put ''XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5''@;'; put 'put ''MThhXHU5MThlXHU5MThmXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5MTljXHU5MTlkXHU5MTllXHU5MTlmXHU5MWEwXHU5MWExXHU5MWE0XHU5MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIz''@;'; put 'put ''XHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJmXHU5MWMwXHU5MWMxXHU5MWMyXHU5MWMzXHU5MWM0XHU5MWM1XHU5MWM2XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5''@;'; put 'put ''MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5MWU0XHU5MWU1XHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1Yzlh''@;'; put 'put ''XHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1''@;'; put 'put ''ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1''@;'; put 'put ''XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb''@;'; put 'put ''MjI1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNV1bbV1dPTU3NjAwK20sRls1NzYwMCttXT14WzIyNV1bbV0pO2Zvcih4WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFl''@;'; put 'put ''Nlx1OTFlN1x1OTFlOFx1OTFlOVx1OTFlYVx1OTFlYlx1OTFlY1x1OTFlZFx1OTFlZVx1OTFlZlx1OTFmMFx1OTFmMVx1OTFmMlx1OTFmM1x1OTFmNFx1OTFmNVx1OTFmNlx1OTFmN1x1OTFmOFx1OTFmOVx1OTFmYVx1OTFmYlx1OTFmY1x1OTFmZFx1OTFmZVx1OTFmZlx1OTIwMFx1OTIwMVx1''@;'; put 'put ''OTIwMlx1OTIwM1x1OTIwNFx1OTIwNVx1OTIwNlx1OTIwN1x1OTIwOFx1OTIwOVx1OTIwYVx1OTIwYlx1OTIwY1x1OTIwZFx1OTIwZVx1OTIwZlx1OTIxMFx1OTIxMVx1OTIxMlx1OTIxM1x1OTIxNFx1OTIxNVx1OTIxNlx1OTIxN1x1OTIxOFx1OTIxOVx1OTIxYVx1OTIxYlx1OTIxY1x1OTIx''@;'; put 'put ''ZFx1OTIxZVx1OTIxZlx1OTIyMFx1OTIyMVx1OTIyMlx1OTIyM1x1OTIyNFx1ZmZmZFx1OTIyNVx1OTIyNlx1OTIyN1x1OTIyOFx1OTIyOVx1OTIyYVx1OTIyYlx1OTIyY1x1OTIyZFx1OTIyZVx1OTIyZlx1OTIzMFx1OTIzMVx1OTIzMlx1OTIzM1x1OTIzNFx1OTIzNVx1OTIzNlx1OTIzN1x1''@;'; put 'put ''OTIzOFx1OTIzOVx1OTIzYVx1OTIzYlx1OTIzY1x1OTIzZFx1OTIzZVx1OTIzZlx1OTI0MFx1OTI0MVx1OTI0Mlx1OTI0M1x1OTI0NFx1OTI0NVx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMz''@;'; put 'put ''MVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2N1x1OTk2OFx1OTk2OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1''@;'; put 'put ''OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZl''@;'; put 'put ''ZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLG09MDttIT14WzIyNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjZdW21dXT01Nzg1NittLEZbNTc4NTYrbV09eFsyMjZdW21dKTtmb3IoeFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTkyNDZcdTkyNDdcdTkyNDhcdTkyNDlcdTkyNGFcdTkyNGJcdTkyNGNcdTkyNGRcdTkyNGVcdTkyNGZcdTkyNTBcdTkyNTFcdTkyNTJcdTkyNTNcdTkyNTRcdTkyNTVcdTkyNTZcdTkyNTdcdTkyNThcdTkyNTlcdTkyNWFcdTkyNWJcdTkyNWNcdTkyNWRcdTkyNWVcdTkyNWZc''@;'; put 'put ''dTkyNjBcdTkyNjFcdTkyNjJcdTkyNjNcdTkyNjRcdTkyNjVcdTkyNjZcdTkyNjdcdTkyNjhcdTkyNjlcdTkyNmFcdTkyNmJcdTkyNmNcdTkyNmRcdTkyNmVcdTkyNmZcdTkyNzBcdTkyNzFcdTkyNzJcdTkyNzNcdTkyNzVcdTkyNzZcdTkyNzdcdTkyNzhcdTkyNzlcdTkyN2FcdTkyN2JcdTky''@;'; put 'put ''N2NcdTkyN2RcdTkyN2VcdTkyN2ZcdTkyODBcdTkyODFcdTkyODJcdTkyODNcdTkyODRcdTkyODVcdWZmZmRcdTkyODZcdTkyODdcdTkyODhcdTkyODlcdTkyOGFcdTkyOGJcdTkyOGNcdTkyOGRcdTkyOGZcdTkyOTBcdTkyOTFcdTkyOTJcdTkyOTNcdTkyOTRcdTkyOTVcdTkyOTZcdTkyOTdc''@;'; put 'put ''dTkyOThcdTkyOTlcdTkyOWFcdTkyOWJcdTkyOWNcdTkyOWRcdTkyOWVcdTkyOWZcdTkyYTBcdTkyYTFcdTkyYTJcdTkyYTNcdTkyYTRcdTkyYTVcdTkyYTZcdTkyYTdcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYw''@;'; put 'put ''YmJcdTYwYjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFc''@;'; put 'put ''dTk1ZjNcdTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZj''@;'; put 'put ''YTNcdTZjODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI3XVttXV09NTgxMTIrbSxGWzU4MTEyK21dPXhbMjI3XVttXSk7Zm9yKHhbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFmXHU5MmIwXHU5MmIxXHU5MmIyXHU5MmIzXHU5MmI0XHU5MmI1XHU5MmI2XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMw''@;'; put 'put ''XHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5MmNjXHU5MmNkXHU5MmNlXHU5MmNmXHU5MmQwXHU5MmQxXHU5MmQyXHU5MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5''@;'; put 'put ''MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3XHU5MmU4XHVmZmZkXHU5MmU5XHU5MmVhXHU5MmViXHU5MmVjXHU5MmVkXHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3''@;'; put 'put ''XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZiXHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5MzAyXHU5MzAzXHU5MzA0XHU5MzA1XHU5MzA2XHU5MzA3XHU5MzA4XHU5MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2''@;'; put 'put ''ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTEx''@;'; put 'put ''XHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2''@;'; put 'put ''ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2Zjdj''@;'; put 'put ''XHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOF1bbV1dPTU4MzY4K20sRls1ODM2OCttXT14WzIyOF1bbV0pO2Zvcih4WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYVx1OTMwYlx1OTMwY1x1OTMwZFx1OTMwZVx1OTMwZlx1OTMxMFx1OTMxMVx1OTMxMlx1OTMxM1x1OTMxNFx1OTMxNVx1OTMxNlx1OTMxN1x1OTMxOFx1OTMxOVx1OTMxYVx1OTMxYlx1OTMxY1x1OTMxZFx1OTMxZVx1OTMx''@;'; put 'put ''Zlx1OTMyMFx1OTMyMVx1OTMyMlx1OTMyM1x1OTMyNFx1OTMyNVx1OTMyNlx1OTMyN1x1OTMyOFx1OTMyOVx1OTMyYVx1OTMyYlx1OTMyY1x1OTMyZFx1OTMyZVx1OTMyZlx1OTMzMFx1OTMzMVx1OTMzMlx1OTMzM1x1OTMzNFx1OTMzNVx1OTMzNlx1OTMzN1x1OTMzOFx1OTMzOVx1OTMzYVx1''@;'; put 'put ''OTMzYlx1OTMzY1x1OTMzZFx1OTMzZlx1OTM0MFx1OTM0MVx1OTM0Mlx1OTM0M1x1OTM0NFx1OTM0NVx1OTM0Nlx1OTM0N1x1OTM0OFx1OTM0OVx1ZmZmZFx1OTM0YVx1OTM0Ylx1OTM0Y1x1OTM0ZFx1OTM0ZVx1OTM0Zlx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1M1x1OTM1NFx1OTM1NVx1OTM1''@;'; put 'put ''Nlx1OTM1N1x1OTM1OFx1OTM1OVx1OTM1YVx1OTM1Ylx1OTM1Y1x1OTM1ZFx1OTM1ZVx1OTM1Zlx1OTM2MFx1OTM2MVx1OTM2Mlx1OTM2M1x1OTM2NFx1OTM2NVx1OTM2Nlx1OTM2N1x1OTM2OFx1OTM2OVx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1''@;'; put 'put ''NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZk''@;'; put 'put ''NVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1''@;'; put 'put ''NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4''@;'; put 'put ''M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlhM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjldW21dXT01ODYyNCttLEZbNTg2MjQrbV09eFsyMjldW21dKTtmb3IoeFsyMzBdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzNmNcdTkzNmRcdTkzNmVcdTkzNmZcdTkzNzBcdTkzNzFcdTkzNzJcdTkzNzNcdTkzNzRcdTkzNzVcdTkzNzZcdTkzNzdcdTkzNzhcdTkzNzlcdTkzN2FcdTkzN2JcdTkzN2NcdTkzN2RcdTkzN2VcdTkz''@;'; put 'put ''N2ZcdTkzODBcdTkzODFcdTkzODJcdTkzODNcdTkzODRcdTkzODVcdTkzODZcdTkzODdcdTkzODhcdTkzODlcdTkzOGFcdTkzOGJcdTkzOGNcdTkzOGRcdTkzOGVcdTkzOTBcdTkzOTFcdTkzOTJcdTkzOTNcdTkzOTRcdTkzOTVcdTkzOTZcdTkzOTdcdTkzOThcdTkzOTlcdTkzOWFcdTkzOWJc''@;'; put 'put ''dTkzOWNcdTkzOWRcdTkzOWVcdTkzOWZcdTkzYTBcdTkzYTFcdTkzYTJcdTkzYTNcdTkzYTRcdTkzYTVcdTkzYTZcdTkzYTdcdTkzYThcdTkzYTlcdTkzYWFcdTkzYWJcdWZmZmRcdTkzYWNcdTkzYWRcdTkzYWVcdTkzYWZcdTkzYjBcdTkzYjFcdTkzYjJcdTkzYjNcdTkzYjRcdTkzYjVcdTkz''@;'; put 'put ''YjZcdTkzYjdcdTkzYjhcdTkzYjlcdTkzYmFcdTkzYmJcdTkzYmNcdTkzYmRcdTkzYmVcdTkzYmZcdTkzYzBcdTkzYzFcdTkzYzJcdTkzYzNcdTkzYzRcdTkzYzVcdTkzYzZcdTkzYzdcdTkzYzhcdTkzYzlcdTkzY2JcdTkzY2NcdTkzY2RcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRc''@;'; put 'put ''dTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVh''@;'; put 'put ''YWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNc''@;'; put 'put ''dTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlh''@;'; put 'put ''YTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMwXVttXV09NTg4ODArbSxGWzU4ODgwK21dPXhbMjMwXVttXSk7Zm9yKHhb''@;'; put 'put ''MjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2NlXHU5M2NmXHU5M2QwXHU5M2QxXHU5M2QyXHU5M2QzXHU5M2Q0XHU5M2Q1XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5''@;'; put 'put ''M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5M2ViXHU5M2VjXHU5M2VkXHU5M2VlXHU5M2VmXHU5M2YwXHU5M2YxXHU5M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2Zi''@;'; put 'put ''XHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2ZmXHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2XHU5NDA3XHU5NDA4XHU5NDA5XHU5NDBhXHU5NDBiXHU5NDBjXHU5NDBkXHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5''@;'; put 'put ''NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5NDIxXHU5NDIyXHU5NDIzXHU5NDI0XHU5NDI1XHU5NDI2XHU5NDI3XHU5NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJjXHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJl''@;'; put 'put ''XHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3''@;'; put 'put ''ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1''@;'; put 'put ''XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3''@;'; put 'put ''NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMV1bbV1dPTU5MTM2K20sRls1OTEzNittXT14WzIz''@;'; put 'put ''MV1bbV0pO2Zvcih4WzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQyZlx1OTQzMFx1OTQzMVx1OTQzMlx1OTQzM1x1OTQzNFx1OTQzNVx1OTQzNlx1OTQzN1x1OTQzOFx1OTQzOVx1OTQzYVx1OTQzYlx1OTQzY1x1OTQzZFx1''@;'; put 'put ''OTQzZlx1OTQ0MFx1OTQ0MVx1OTQ0Mlx1OTQ0M1x1OTQ0NFx1OTQ0NVx1OTQ0Nlx1OTQ0N1x1OTQ0OFx1OTQ0OVx1OTQ0YVx1OTQ0Ylx1OTQ0Y1x1OTQ0ZFx1OTQ0ZVx1OTQ0Zlx1OTQ1MFx1OTQ1MVx1OTQ1Mlx1OTQ1M1x1OTQ1NFx1OTQ1NVx1OTQ1Nlx1OTQ1N1x1OTQ1OFx1OTQ1OVx1OTQ1''@;'; put 'put ''YVx1OTQ1Ylx1OTQ1Y1x1OTQ1ZFx1OTQ1ZVx1OTQ1Zlx1OTQ2MFx1OTQ2MVx1OTQ2Mlx1OTQ2M1x1OTQ2NFx1OTQ2NVx1OTQ2Nlx1OTQ2N1x1OTQ2OFx1OTQ2OVx1OTQ2YVx1OTQ2Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1ZmZmZFx1OTQ3MFx1OTQ3MVx1OTQ3Mlx1OTQ3M1x1OTQ3NFx1OTQ3NVx1''@;'; put 'put ''OTQ3Nlx1OTQ3N1x1OTQ3OFx1OTQ3OVx1OTQ3YVx1OTQ3Ylx1OTQ3Y1x1OTQ3ZFx1OTQ3ZVx1OTQ3Zlx1OTQ4MFx1OTQ4MVx1OTQ4Mlx1OTQ4M1x1OTQ4NFx1OTQ5MVx1OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUyMFx1NzQx''@;'; put 'put ''Ylx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1''@;'; put 'put ''Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1Njdk''@;'; put 'put ''ZFx1NjgwMFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1''@;'; put 'put ''Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzJdW21dXT01OTM5MittLEZb''@;'; put 'put ''NTkzOTIrbV09eFsyMzJdW21dKTtmb3IoeFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1MjdcdTk1MzNcdTk1M2RcdTk1NDNcdTk1NDhcdTk1NGJcdTk1NTVcdTk1NWFcdTk1NjBcdTk1NmVcdTk1NzRcdTk1NzVcdTk1Nzdc''@;'; put 'put ''dTk1NzhcdTk1NzlcdTk1N2FcdTk1N2JcdTk1N2NcdTk1N2RcdTk1N2VcdTk1ODBcdTk1ODFcdTk1ODJcdTk1ODNcdTk1ODRcdTk1ODVcdTk1ODZcdTk1ODdcdTk1ODhcdTk1ODlcdTk1OGFcdTk1OGJcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OGZcdTk1OTBcdTk1OTFcdTk1OTJcdTk1OTNcdTk1''@;'; put 'put ''OTRcdTk1OTVcdTk1OTZcdTk1OTdcdTk1OThcdTk1OTlcdTk1OWFcdTk1OWJcdTk1OWNcdTk1OWRcdTk1OWVcdTk1OWZcdTk1YTBcdTk1YTFcdTk1YTJcdTk1YTNcdTk1YTRcdTk1YTVcdTk1YTZcdTk1YTdcdTk1YThcdTk1YTlcdTk1YWFcdWZmZmRcdTk1YWJcdTk1YWNcdTk1YWRcdTk1YWVc''@;'; put 'put ''dTk1YWZcdTk1YjBcdTk1YjFcdTk1YjJcdTk1YjNcdTk1YjRcdTk1YjVcdTk1YjZcdTk1YjdcdTk1YjhcdTk1YjlcdTk1YmFcdTk1YmJcdTk1YmNcdTk1YmRcdTk1YmVcdTk1YmZcdTk1YzBcdTk1YzFcdTk1YzJcdTk1YzNcdTk1YzRcdTk1YzVcdTk1YzZcdTk1YzdcdTk1YzhcdTk1YzlcdTk1''@;'; put 'put ''Y2FcdTk1Y2JcdTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5Nzlc''@;'; put 'put ''dTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZh''@;'; put 'put ''NzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNc''@;'; put 'put ''dThmNzVcdThmNzZcdThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMzXVtt''@;'; put 'put ''XV09NTk2NDgrbSxGWzU5NjQ4K21dPXhbMjMzXVttXSk7Zm9yKHhbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NWNjXHU5NWNkXHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2''@;'; put 'put ''XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRhXHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5NWUyXHU5NWUzXHU5NWU0XHU5NWU1XHU5NWU2XHU5NWU3XHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5''@;'; put 'put ''NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5''@;'; put 'put ''XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5NjZmXHU5NjcwXHU5NjcxXHU5NjczXHU5Njc4XHU5Njc5XHU5NjdhXHU5NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5NjdmXHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5''@;'; put 'put ''Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVl''@;'; put 'put ''XHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2''@;'; put 'put ''NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQx''@;'; put 'put ''XHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzRdW21dLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihhZVt4WzIzNF1bbV1dPTU5OTA0K20sRls1OTkwNCttXT14WzIzNF1bbV0pO2Zvcih4WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5YVx1OTY5''@;'; put 'put ''Ylx1OTY5ZFx1OTY5ZVx1OTY5Zlx1OTZhMFx1OTZhMVx1OTZhMlx1OTZhM1x1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOFx1OTZhOVx1OTZhYVx1OTZhYlx1OTZhY1x1OTZhZFx1OTZhZVx1OTZhZlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1''@;'; put 'put ''OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1OTZjYlx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNlx1OTZkN1x1OTZkOFx1OTZkOVx1OTZkYVx1OTZkYlx1OTZkY1x1OTZkZFx1OTZkZVx1OTZkZlx1OTZlMVx1OTZlMlx1OTZlM1x1OTZlNFx1OTZlNVx1OTZlNlx1OTZlN1x1OTZlYlx1ZmZm''@;'; put 'put ''ZFx1OTZlY1x1OTZlZFx1OTZlZVx1OTZmMFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1OTcxN1x1OTcxOFx1''@;'; put 'put ''OTcxOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcxZlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUz''@;'; put 'put ''NVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1''@;'; put 'put ''ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2''@;'; put 'put ''MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM1XVttXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoYWVbeFsyMzVdW21dXT02MDE2MCttLEZbNjAxNjArbV09eFsyMzVdW21dKTtmb3IoeFsyMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3MjFcdTk3MjJcdTk3MjNcdTk3MjRcdTk3MjVcdTk3MjZcdTk3''@;'; put 'put ''MjdcdTk3MjhcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MmVcdTk3MmZcdTk3MzFcdTk3MzNcdTk3MzRcdTk3MzVcdTk3MzZcdTk3MzdcdTk3M2FcdTk3M2JcdTk3M2NcdTk3M2RcdTk3M2ZcdTk3NDBcdTk3NDFcdTk3NDJcdTk3NDNcdTk3NDRcdTk3NDVcdTk3NDZcdTk3NDdcdTk3NDhcdTk3NDlc''@;'; put 'put ''dTk3NGFcdTk3NGJcdTk3NGNcdTk3NGRcdTk3NGVcdTk3NGZcdTk3NTBcdTk3NTFcdTk3NTRcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWNcdTk3NWRcdTk3NWZcdTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3NmFcdTk3NmJcdTk3NmNcdTk3NmRcdTk3NmVcdTk3NmZcdTk3''@;'; put 'put ''NzBcdTk3NzFcdWZmZmRcdTk3NzJcdTk3NzVcdTk3NzdcdTk3NzhcdTk3NzlcdTk3N2FcdTk3N2JcdTk3N2RcdTk3N2VcdTk3N2ZcdTk3ODBcdTk3ODFcdTk3ODJcdTk3ODNcdTk3ODRcdTk3ODZcdTk3ODdcdTk3ODhcdTk3ODlcdTk3OGFcdTk3OGNcdTk3OGVcdTk3OGZcdTk3OTBcdTk3OTNc''@;'; put 'put ''dTk3OTVcdTk3OTZcdTk3OTdcdTk3OTlcdTk3OWFcdTk3OWJcdTk3OWNcdTk3OWRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlm''@;'; put 'put ''NTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNc''@;'; put 'put ''dTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5''@;'; put 'put ''NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzZdLmxlbmd0aDsrK20pNjU1MzMh''@;'; put 'put ''PT14WzIzNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM2XVttXV09NjA0MTYrbSxGWzYwNDE2K21dPXhbMjM2XVttXSk7Zm9yKHhbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5''@;'; put 'put ''N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1XHU5N2I2XHU5N2I3XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JiXHU5N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2MwXHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0''@;'; put 'put ''XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2QwXHU5N2QxXHU5N2QyXHU5N2QzXHU5N2Q0XHU5N2Q1XHU5N2Q2XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5''@;'; put 'put ''N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVmZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5N2YyXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2Y5XHU5N2ZhXHU5N2ZiXHU5N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAwXHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0''@;'; put 'put ''XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4''@;'; put 'put ''MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3''@;'; put 'put ''XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5''@;'; put 'put ''ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM3XS5sZW5n''@;'; put 'put ''dGg7KyttKTY1NTMzIT09eFsyMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzN11bbV1dPTYwNjcyK20sRls2MDY3MittXT14WzIzN11bbV0pO2Zvcih4WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTgwZlx1OTgxMFx1''@;'; put 'put ''OTgxMVx1OTgxMlx1OTgxM1x1OTgxNFx1OTgxNVx1OTgxNlx1OTgxN1x1OTgxOFx1OTgxOVx1OTgxYVx1OTgxYlx1OTgxY1x1OTgxZFx1OTgxZVx1OTgxZlx1OTgyMFx1OTgyMVx1OTgyMlx1OTgyM1x1OTgyNFx1OTgyNVx1OTgyNlx1OTgyN1x1OTgyOFx1OTgyOVx1OTgyYVx1OTgyYlx1OTgy''@;'; put 'put ''Y1x1OTgyZFx1OTgyZVx1OTgyZlx1OTgzMFx1OTgzMVx1OTgzMlx1OTgzM1x1OTgzNFx1OTgzNVx1OTgzNlx1OTgzN1x1OTgzOFx1OTgzOVx1OTgzYVx1OTgzYlx1OTgzY1x1OTgzZFx1OTgzZVx1OTgzZlx1OTg0MFx1OTg0MVx1OTg0Mlx1OTg0M1x1OTg0NFx1OTg0NVx1OTg0Nlx1OTg0N1x1''@;'; put 'put ''OTg0OFx1OTg0OVx1OTg0YVx1OTg0Ylx1OTg0Y1x1OTg0ZFx1ZmZmZFx1OTg0ZVx1OTg0Zlx1OTg1MFx1OTg1MVx1OTg1Mlx1OTg1M1x1OTg1NFx1OTg1NVx1OTg1Nlx1OTg1N1x1OTg1OFx1OTg1OVx1OTg1YVx1OTg1Ylx1OTg1Y1x1OTg1ZFx1OTg1ZVx1OTg1Zlx1OTg2MFx1OTg2MVx1OTg2''@;'; put 'put ''Mlx1OTg2M1x1OTg2NFx1OTg2NVx1OTg2Nlx1OTg2N1x1OTg2OFx1OTg2OVx1OTg2YVx1OTg2Ylx1OTg2Y1x1OTg2ZFx1OTg2ZVx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1''@;'; put 'put ''NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4''@;'; put 'put ''Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOFx1''@;'; put 'put ''OTRjOVx1OTRjYVx1OTRjYlx1OTRjY1x1OTRjZFx1OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt''@;'; put 'put ''IT14WzIzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzhdW21dXT02MDkyOCttLEZbNjA5MjgrbV09eFsyMzhdW21dKTtmb3IoeFsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTk4NmZcdTk4NzBcdTk4NzFcdTk4NzJcdTk4NzNcdTk4NzRcdTk4OGJcdTk4OGVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4YTNcdTk4YThcdTk4YTlcdTk4YWFcdTk4YWJcdTk4YWNcdTk4YWRcdTk4YWVcdTk4YWZcdTk4YjBcdTk4YjFcdTk4YjJcdTk4YjNcdTk4YjRcdTk4YjVcdTk4YjZcdTk4''@;'; put 'put ''YjdcdTk4YjhcdTk4YjlcdTk4YmFcdTk4YmJcdTk4YmNcdTk4YmRcdTk4YmVcdTk4YmZcdTk4YzBcdTk4YzFcdTk4YzJcdTk4YzNcdTk4YzRcdTk4YzVcdTk4YzZcdTk4YzdcdTk4YzhcdTk4YzlcdTk4Y2FcdTk4Y2JcdTk4Y2NcdTk4Y2RcdTk4Y2ZcdTk4ZDBcdTk4ZDRcdTk4ZDZcdTk4ZDdc''@;'; put 'put ''dTk4ZGJcdTk4ZGNcdTk4ZGRcdTk4ZTBcdTk4ZTFcdTk4ZTJcdTk4ZTNcdTk4ZTRcdWZmZmRcdTk4ZTVcdTk4ZTZcdTk4ZTlcdTk4ZWFcdTk4ZWJcdTk4ZWNcdTk4ZWRcdTk4ZWVcdTk4ZWZcdTk4ZjBcdTk4ZjFcdTk4ZjJcdTk4ZjNcdTk4ZjRcdTk4ZjVcdTk4ZjZcdTk4ZjdcdTk4ZjhcdTk4''@;'; put 'put ''ZjlcdTk4ZmFcdTk4ZmJcdTk4ZmNcdTk4ZmRcdTk4ZmVcdTk4ZmZcdTk5MDBcdTk5MDFcdTk5MDJcdTk5MDNcdTk5MDRcdTk5MDVcdTk5MDZcdTk5MDdcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNc''@;'; put 'put ''dTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1''@;'; put 'put ''MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRc''@;'; put 'put ''dTk1NjVcdTk1NjZcdTk1NjdcdTk1NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxtPTA7bSE9eFsyMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM5XVttXV09NjExODQrbSxGWzYxMTg0K21dPXhbMjM5XVttXSk7Zm9yKHhbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEzXHU5OTE0XHU5OTE1XHU5OTE2XHU5OTE3XHU5OTE4XHU5OTE5XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFmXHU5OTIwXHU5OTIxXHU5OTIyXHU5''@;'; put 'put ''OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5OTMwXHU5OTMxXHU5OTMyXHU5OTMzXHU5OTM0XHU5OTM1XHU5OTM2XHU5OTM3XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTNkXHU5OTNlXHU5OTNm''@;'; put 'put ''XHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQzXHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRhXHU5OTRiXHU5OTRjXHU5OTRkXHU5OTRlXHU5OTRmXHU5OTUwXHU5OTUxXHU5OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4XHU5OTU5XHU5OTVhXHU5OTViXHU5''@;'; put 'put ''OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0''@;'; put 'put ''XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5''@;'; put 'put ''ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0''@;'; put 'put ''XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3''@;'; put 'put ''NjE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0MF1bbV1dPTYxNDQwK20sRls2MTQ0MCttXT14WzI0MF1bbV0pO2Zvcih4WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4Y1x1OTk4ZVx1OTk5YVx1OTk5Ylx1OTk5Y1x1OTk5ZFx1OTk5ZVx1OTk5Zlx1OTlhMFx1OTlhMVx1OTlhMlx1OTlhM1x1OTlhNFx1OTlhNlx1OTlhN1x1OTlhOVx1OTlhYVx1OTlhYlx1OTlhY1x1OTlhZFx1OTlhZVx1OTlhZlx1OTliMFx1''@;'; put 'put ''OTliMVx1OTliMlx1OTliM1x1OTliNFx1OTliNVx1OTliNlx1OTliN1x1OTliOFx1OTliOVx1OTliYVx1OTliYlx1OTliY1x1OTliZFx1OTliZVx1OTliZlx1OTljMFx1OTljMVx1OTljMlx1OTljM1x1OTljNFx1OTljNVx1OTljNlx1OTljN1x1OTljOFx1OTljOVx1OTljYVx1OTljYlx1OTlj''@;'; put 'put ''Y1x1OTljZFx1OTljZVx1OTljZlx1OTlkMFx1OTlkMVx1OTlkMlx1OTlkM1x1OTlkNFx1OTlkNVx1OTlkNlx1OTlkN1x1OTlkOFx1ZmZmZFx1OTlkOVx1OTlkYVx1OTlkYlx1OTlkY1x1OTlkZFx1OTlkZVx1OTlkZlx1OTllMFx1OTllMVx1OTllMlx1OTllM1x1OTllNFx1OTllNVx1OTllNlx1''@;'; put 'put ''OTllN1x1OTllOFx1OTllOVx1OTllYVx1OTllYlx1OTllY1x1OTllZFx1OTllZVx1OTllZlx1OTlmMFx1OTlmMVx1OTlmMlx1OTlmM1x1OTlmNFx1OTlmNVx1OTlmNlx1OTlmN1x1OTlmOFx1OTlmOVx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYz''@;'; put 'put ''NVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1''@;'; put 'put ''ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2''@;'; put 'put ''Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1''@;'; put 'put ''OTg3OFx1OTg4MFx1OTg4M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDFdW21dXT02MTY5NittLEZbNjE2OTYrbV09eFsyNDFdW21dKTtmb3IoeFsyNDJdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmFcdTk5ZmJcdTk5ZmNcdTk5ZmRcdTk5ZmVcdTk5ZmZcdTlhMDBcdTlhMDFcdTlhMDJcdTlhMDNcdTlhMDRcdTlhMDVcdTlhMDZcdTlhMDdcdTlhMDhcdTlhMDlcdTlhMGFcdTlhMGJcdTlhMGNcdTlhMGRcdTlhMGVc''@;'; put 'put ''dTlhMGZcdTlhMTBcdTlhMTFcdTlhMTJcdTlhMTNcdTlhMTRcdTlhMTVcdTlhMTZcdTlhMTdcdTlhMThcdTlhMTlcdTlhMWFcdTlhMWJcdTlhMWNcdTlhMWRcdTlhMWVcdTlhMWZcdTlhMjBcdTlhMjFcdTlhMjJcdTlhMjNcdTlhMjRcdTlhMjVcdTlhMjZcdTlhMjdcdTlhMjhcdTlhMjlcdTlh''@;'; put 'put ''MmFcdTlhMmJcdTlhMmNcdTlhMmRcdTlhMmVcdTlhMmZcdTlhMzBcdTlhMzFcdTlhMzJcdTlhMzNcdTlhMzRcdTlhMzVcdTlhMzZcdTlhMzdcdTlhMzhcdWZmZmRcdTlhMzlcdTlhM2FcdTlhM2JcdTlhM2NcdTlhM2RcdTlhM2VcdTlhM2ZcdTlhNDBcdTlhNDFcdTlhNDJcdTlhNDNcdTlhNDRc''@;'; put 'put ''dTlhNDVcdTlhNDZcdTlhNDdcdTlhNDhcdTlhNDlcdTlhNGFcdTlhNGJcdTlhNGNcdTlhNGRcdTlhNGVcdTlhNGZcdTlhNTBcdTlhNTFcdTlhNTJcdTlhNTNcdTlhNTRcdTlhNTVcdTlhNTZcdTlhNTdcdTlhNThcdTlhNTlcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4''@;'; put 'put ''OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVc''@;'; put 'put ''dTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3''@;'; put 'put ''MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlc''@;'; put 'put ''dTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQyXVttXV09NjE5NTIrbSxGWzYxOTUyK21dPXhbMjQyXVttXSk7Zm9yKHhbMjQzXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5YTVkXHU5YTVlXHU5YTVmXHU5YTYwXHU5YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5XHU5YTZhXHU5YTZiXHU5YTcy''@;'; put 'put ''XHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFjXHU5YWFkXHU5YWFlXHU5YWFmXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2XHU5''@;'; put 'put ''YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5YWRhXHU5YWRiXHU5YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5''@;'; put 'put ''XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwXHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4XHU5YWZhXHU5YWZjXHU5YWZkXHU5YWZlXHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAyXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4''@;'; put 'put ''Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0''@;'; put 'put ''XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3''@;'; put 'put ''YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2''@;'; put 'put ''XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0M11bbV1dPTYyMjA4K20sRls2MjIwOCttXT14WzI0M11bbV0pO2Zv''@;'; put 'put ''cih4WzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIwN1x1OWIwOVx1OWIwYVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIxMFx1OWIxMVx1OWIxMlx1OWIxNFx1OWIxNVx1OWIxNlx1OWIxN1x1OWIxOFx1OWIxOVx1OWIx''@;'; put 'put ''YVx1OWIxYlx1OWIxY1x1OWIxZFx1OWIxZVx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNFx1OWIyNVx1OWIyNlx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyYlx1OWIyY1x1OWIyZFx1OWIyZVx1OWIzMFx1OWIzMVx1OWIzM1x1OWIzNFx1OWIzNVx1OWIzNlx1OWIzN1x1OWIzOFx1OWIzOVx1''@;'; put 'put ''OWIzYVx1OWIzZFx1OWIzZVx1OWIzZlx1OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1M1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1OFx1OWI1OVx1OWI1YVx1ZmZmZFx1OWI1Ylx1OWI1Y1x1OWI1ZFx1OWI1ZVx1OWI1Zlx1OWI2MFx1OWI2MVx1OWI2''@;'; put 'put ''Mlx1OWI2M1x1OWI2NFx1OWI2NVx1OWI2Nlx1OWI2N1x1OWI2OFx1OWI2OVx1OWI2YVx1OWI2Ylx1OWI2Y1x1OWI2ZFx1OWI2ZVx1OWI2Zlx1OWI3MFx1OWI3MVx1OWI3Mlx1OWI3M1x1OWI3NFx1OWI3NVx1OWI3Nlx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3YVx1OWI3Ylx1N2MxZlx1N2MyYVx1''@;'; put 'put ''N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1''@;'; put 'put ''Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1''@;'; put 'put ''N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRi''@;'; put 'put ''MVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDRdW21dXT02MjQ2NCttLEZbNjI0NjQrbV09''@;'; put 'put ''eFsyNDRdW21dKTtmb3IoeFsyNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2NcdTliN2RcdTliN2VcdTliN2ZcdTliODBcdTliODFcdTliODJcdTliODNcdTliODRcdTliODVcdTliODZcdTliODdcdTliODhcdTliODlcdTli''@;'; put 'put ''OGFcdTliOGJcdTliOGNcdTliOGRcdTliOGVcdTliOGZcdTliOTBcdTliOTFcdTliOTJcdTliOTNcdTliOTRcdTliOTVcdTliOTZcdTliOTdcdTliOThcdTliOTlcdTliOWFcdTliOWJcdTliOWNcdTliOWRcdTliOWVcdTliOWZcdTliYTBcdTliYTFcdTliYTJcdTliYTNcdTliYTRcdTliYTVc''@;'; put 'put ''dTliYTZcdTliYTdcdTliYThcdTliYTlcdTliYWFcdTliYWJcdTliYWNcdTliYWRcdTliYWVcdTliYWZcdTliYjBcdTliYjFcdTliYjJcdTliYjNcdTliYjRcdTliYjVcdTliYjZcdTliYjdcdTliYjhcdTliYjlcdTliYmFcdWZmZmRcdTliYmJcdTliYmNcdTliYmRcdTliYmVcdTliYmZcdTli''@;'; put 'put ''YzBcdTliYzFcdTliYzJcdTliYzNcdTliYzRcdTliYzVcdTliYzZcdTliYzdcdTliYzhcdTliYzlcdTliY2FcdTliY2JcdTliY2NcdTliY2RcdTliY2VcdTliY2ZcdTliZDBcdTliZDFcdTliZDJcdTliZDNcdTliZDRcdTliZDVcdTliZDZcdTliZDdcdTliZDhcdTliZDlcdTliZGFcdTliZGJc''@;'; put 'put ''dTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThk''@;'; put 'put ''ZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRc''@;'; put 'put ''dThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThl''@;'; put 'put ''OWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ1XVttXV09NjI3MjAr''@;'; put 'put ''bSxGWzYyNzIwK21dPXhbMjQ1XVttXSk7Zm9yKHhbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YmRjXHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1XHU5YmU2XHU5YmU3XHU5''@;'; put 'put ''YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5YmY0XHU5YmY1XHU5YmY2XHU5YmY3XHU5YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZjXHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5YzAxXHU5YzAyXHU5YzAz''@;'; put 'put ''XHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBmXHU5YzEwXHU5YzExXHU5YzEyXHU5YzEzXHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFiXHU5YzFjXHU5YzFkXHU5''@;'; put 'put ''YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5YzJhXHU5YzJiXHU5YzJjXHU5YzJkXHU5YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMyXHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5YzM3XHU5YzM4XHU5YzM5''@;'; put 'put ''XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5''@;'; put 'put ''ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIz''@;'; put 'put ''XHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5''@;'; put 'put ''Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0''@;'; put 'put ''Nl1bbV1dPTYyOTc2K20sRls2Mjk3NittXT14WzI0Nl1bbV0pO2Zvcih4WzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWMzY1x1OWMzZFx1OWMzZVx1OWMzZlx1OWM0MFx1OWM0MVx1OWM0Mlx1OWM0M1x1OWM0NFx1OWM0NVx1''@;'; put 'put ''OWM0Nlx1OWM0N1x1OWM0OFx1OWM0OVx1OWM0YVx1OWM0Ylx1OWM0Y1x1OWM0ZFx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1MVx1OWM1Mlx1OWM1M1x1OWM1NFx1OWM1NVx1OWM1Nlx1OWM1N1x1OWM1OFx1OWM1OVx1OWM1YVx1OWM1Ylx1OWM1Y1x1OWM1ZFx1OWM1ZVx1OWM1Zlx1OWM2MFx1OWM2''@;'; put 'put ''MVx1OWM2Mlx1OWM2M1x1OWM2NFx1OWM2NVx1OWM2Nlx1OWM2N1x1OWM2OFx1OWM2OVx1OWM2YVx1OWM2Ylx1OWM2Y1x1OWM2ZFx1OWM2ZVx1OWM2Zlx1OWM3MFx1OWM3MVx1OWM3Mlx1OWM3M1x1OWM3NFx1OWM3NVx1OWM3Nlx1OWM3N1x1OWM3OFx1OWM3OVx1OWM3YVx1ZmZmZFx1OWM3Ylx1''@;'; put 'put ''OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4M1x1OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1OWNhY1x1OWNhZlx1OWNiOVx1OWNiZVx1OWNiZlx1OWNjMFx1OWNjMVx1OWNjMlx1OWNjOFx1OWNjOVx1OWNkMVx1OWNk''@;'; put 'put ''Mlx1OWNkYVx1OWNkYlx1OWNlMFx1OWNlMVx1OWNjY1x1OWNjZFx1OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1''@;'; put 'put ''OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1''@;'; put 'put ''NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1''@;'; put 'put ''OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ3XVttXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoYWVbeFsyNDddW21dXT02MzIzMittLEZbNjMyMzIrbV09eFsyNDddW21dKTtmb3IoeFsyNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljZTNcdTljZTRcdTljZTVcdTljZTZcdTljZTdcdTljZThcdTljZTlcdTljZWFc''@;'; put 'put ''dTljZWJcdTljZWNcdTljZWRcdTljZWVcdTljZWZcdTljZjBcdTljZjFcdTljZjJcdTljZjNcdTljZjRcdTljZjVcdTljZjZcdTljZjdcdTljZjhcdTljZjlcdTljZmFcdTljZmJcdTljZmNcdTljZmRcdTljZmVcdTljZmZcdTlkMDBcdTlkMDFcdTlkMDJcdTlkMDNcdTlkMDRcdTlkMDVcdTlk''@;'; put 'put ''MDZcdTlkMDdcdTlkMDhcdTlkMDlcdTlkMGFcdTlkMGJcdTlkMGNcdTlkMGRcdTlkMGVcdTlkMGZcdTlkMTBcdTlkMTFcdTlkMTJcdTlkMTNcdTlkMTRcdTlkMTVcdTlkMTZcdTlkMTdcdTlkMThcdTlkMTlcdTlkMWFcdTlkMWJcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMWZcdTlkMjBcdTlkMjFc''@;'; put 'put ''dWZmZmRcdTlkMjJcdTlkMjNcdTlkMjRcdTlkMjVcdTlkMjZcdTlkMjdcdTlkMjhcdTlkMjlcdTlkMmFcdTlkMmJcdTlkMmNcdTlkMmRcdTlkMmVcdTlkMmZcdTlkMzBcdTlkMzFcdTlkMzJcdTlkMzNcdTlkMzRcdTlkMzVcdTlkMzZcdTlkMzdcdTlkMzhcdTlkMzlcdTlkM2FcdTlkM2JcdTlk''@;'; put 'put ''M2NcdTlkM2RcdTlkM2VcdTlkM2ZcdTlkNDBcdTlkNDFcdTlkNDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0OF1b''@;'; put 'put ''bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ4XVttXV09NjM0ODgrbSxGWzYzNDg4K21dPXhbMjQ4XVttXSk7Zm9yKHhbMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2XHU5ZDQ3XHU5ZDQ4''@;'; put 'put ''XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRjXHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0XHU5ZDU1XHU5ZDU2XHU5ZDU3XHU5ZDU4XHU5ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVkXHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5ZDYyXHU5ZDYzXHU5''@;'; put 'put ''ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5ZDcwXHU5ZDcxXHU5ZDcyXHU5ZDczXHU5ZDc0XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdkXHU5ZDdlXHU5ZDdm''@;'; put 'put ''XHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgyXHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhhXHU5ZDhiXHU5ZDhjXHU5ZDhkXHU5ZDhlXHU5ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkzXHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZDk5XHU5''@;'; put 'put ''ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ5XS5sZW5ndGg7KyttKTY1''@;'; put 'put ''NTMzIT09eFsyNDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OV1bbV1dPTYzNzQ0K20sRls2Mzc0NCttXT14WzI0OV1bbV0pO2Zvcih4WzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhM1x1OWRhNFx1OWRhNVx1OWRh''@;'; put 'put ''Nlx1OWRhN1x1OWRhOFx1OWRhOVx1OWRhYVx1OWRhYlx1OWRhY1x1OWRhZFx1OWRhZVx1OWRhZlx1OWRiMFx1OWRiMVx1OWRiMlx1OWRiM1x1OWRiNFx1OWRiNVx1OWRiNlx1OWRiN1x1OWRiOFx1OWRiOVx1OWRiYVx1OWRiYlx1OWRiY1x1OWRiZFx1OWRiZVx1OWRiZlx1OWRjMFx1OWRjMVx1''@;'; put 'put ''OWRjMlx1OWRjM1x1OWRjNFx1OWRjNVx1OWRjNlx1OWRjN1x1OWRjOFx1OWRjOVx1OWRjYVx1OWRjYlx1OWRjY1x1OWRjZFx1OWRjZVx1OWRjZlx1OWRkMFx1OWRkMVx1OWRkMlx1OWRkM1x1OWRkNFx1OWRkNVx1OWRkNlx1OWRkN1x1OWRkOFx1OWRkOVx1OWRkYVx1OWRkYlx1OWRkY1x1OWRk''@;'; put 'put ''ZFx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlMVx1ZmZmZFx1OWRlMlx1OWRlM1x1OWRlNFx1OWRlNVx1OWRlNlx1OWRlN1x1OWRlOFx1OWRlOVx1OWRlYVx1OWRlYlx1OWRlY1x1OWRlZFx1OWRlZVx1OWRlZlx1OWRmMFx1OWRmMVx1OWRmMlx1OWRmM1x1OWRmNFx1OWRmNVx1OWRmNlx1OWRmN1x1''@;'; put 'put ''OWRmOFx1OWRmOVx1OWRmYVx1OWRmYlx1OWRmY1x1OWRmZFx1OWRmZVx1OWRmZlx1OWUwMFx1OWUwMVx1OWUwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1MF0u''@;'; put 'put ''bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTBdW21dXT02NGUzK20sRls2NGUzK21dPXhbMjUwXVttXSk7Zm9yKHhbMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZTAzXHU5ZTA0''@;'; put 'put ''XHU5ZTA1XHU5ZTA2XHU5ZTA3XHU5ZTA4XHU5ZTA5XHU5ZTBhXHU5ZTBiXHU5ZTBjXHU5ZTBkXHU5ZTBlXHU5ZTBmXHU5ZTEwXHU5ZTExXHU5ZTEyXHU5ZTEzXHU5ZTE0XHU5ZTE1XHU5ZTE2XHU5ZTE3XHU5ZTE4XHU5ZTE5XHU5ZTFhXHU5ZTFiXHU5ZTFjXHU5ZTFkXHU5ZTFlXHU5ZTI0XHU5''@;'; put 'put ''ZTI3XHU5ZTJlXHU5ZTMwXHU5ZTM0XHU5ZTNiXHU5ZTNjXHU5ZTQwXHU5ZTRkXHU5ZTUwXHU5ZTUyXHU5ZTUzXHU5ZTU0XHU5ZTU2XHU5ZTU5XHU5ZTVkXHU5ZTVmXHU5ZTYwXHU5ZTYxXHU5ZTYyXHU5ZTY1XHU5ZTZlXHU5ZTZmXHU5ZTcyXHU5ZTc0XHU5ZTc1XHU5ZTc2XHU5ZTc3XHU5ZTc4''@;'; put 'put ''XHU5ZTc5XHU5ZTdhXHU5ZTdiXHU5ZTdjXHU5ZTdkXHU5ZTgwXHVmZmZkXHU5ZTgxXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg2XHU5ZTg5XHU5ZThhXHU5ZThjXHU5ZThkXHU5ZThlXHU5ZThmXHU5ZTkwXHU5ZTkxXHU5ZTk0XHU5ZTk1XHU5ZTk2XHU5ZTk3XHU5ZTk4XHU5ZTk5XHU5ZTlhXHU5''@;'; put 'put ''ZTliXHU5ZTljXHU5ZTllXHU5ZWEwXHU5ZWExXHU5ZWEyXHU5ZWEzXHU5ZWE0XHU5ZWE1XHU5ZWE3XHU5ZWE4XHU5ZWE5XHU5ZWFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0w''@;'; put 'put ''O20hPXhbMjUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MV1bbV1dPTY0MjU2K20sRls2NDI1NittXT14WzI1MV1bbV0pO2Zvcih4WzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVhZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1OWViZlx1OWVjMFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1''@;'; put 'put ''OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmM1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1OWVmOFx1OWVm''@;'; put 'put ''YVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYwMVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYwOFx1OWYwOVx1OWYwYVx1OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYxZFx1OWYxZVx1''@;'; put 'put ''OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLG09MDttIT14WzI1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTJdW21dXT02NDUxMittLEZbNjQ1MTIrbV09eFsyNTJdW21dKTtmb3IoeFsyNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTlmMzJcdTlmMzNcdTlmMzRcdTlmMzVcdTlmMzZcdTlmMzhcdTlmM2FcdTlmM2NcdTlmM2ZcdTlmNDBcdTlmNDFcdTlmNDJcdTlmNDNcdTlmNDVcdTlmNDZcdTlmNDdcdTlmNDhcdTlmNDlcdTlmNGFcdTlmNGJcdTlmNGNcdTlmNGRcdTlmNGVcdTlmNGZcdTlmNTJc''@;'; put 'put ''dTlmNTNcdTlmNTRcdTlmNTVcdTlmNTZcdTlmNTdcdTlmNThcdTlmNTlcdTlmNWFcdTlmNWJcdTlmNWNcdTlmNWRcdTlmNWVcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjJcdTlmNjNcdTlmNjRcdTlmNjVcdTlmNjZcdTlmNjdcdTlmNjhcdTlmNjlcdTlmNmFcdTlmNmJcdTlmNmNcdTlmNmRcdTlm''@;'; put 'put ''NmVcdTlmNmZcdTlmNzBcdTlmNzFcdTlmNzJcdTlmNzNcdTlmNzRcdTlmNzVcdTlmNzZcdTlmNzdcdTlmNzhcdWZmZmRcdTlmNzlcdTlmN2FcdTlmN2JcdTlmN2NcdTlmN2RcdTlmN2VcdTlmODFcdTlmODJcdTlmOGRcdTlmOGVcdTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTNcdTlmOTRc''@;'; put 'put ''dTlmOTVcdTlmOTZcdTlmOTdcdTlmOThcdTlmOWNcdTlmOWRcdTlmOWVcdTlmYTFcdTlmYTJcdTlmYTNcdTlmYTRcdTlmYTVcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUzXVttXV09NjQ3NjgrbSxGWzY0NzY4K21dPXhbMjUzXVttXSk7Zm9yKHhbMjU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmYTBjXHVmYTBkXHVmYTBlXHVmYTBmXHVmYTExXHVmYTEzXHVmYTE0XHVmYTE4XHVmYTFmXHVmYTIwXHVmYTIxXHVmYTIzXHVmYTI0XHVmYTI3XHVmYTI4XHVmYTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjU0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1NF1bbV1dPTY1MDI0K20sRls2NTAyNCttXT14WzI1NF1bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLEll''@;'; put 'put ''Wzk0OV09ZnVuY3Rpb24oKXt2YXIgbSxGPVtdLGFlPXt9LHg9W107Zm9yKHhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAh''@;'; put 'put ''XCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMF1bbV1dPTArbSxGWzArbV09eFswXVttXSk7Zm9yKHhbMTI5XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiXHVhYzBjXHVhYzBkXHVhYzBlXHVhYzBmXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1XHVhYzI2XHVhYzI3XHVhYzI4XHVh''@;'; put 'put ''YzI5XHVhYzJhXHVhYzJiXHVhYzJlXHVhYzMyXHVhYzMzXHVhYzM0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNkXHVhYzNlXHVhYzNmXHVhYzQxXHVhYzQyXHVhYzQzXHVhYzQ0XHVhYzQ1XHVhYzQ2XHVhYzQ3''@;'; put 'put ''XHVhYzQ4XHVhYzQ5XHVhYzRhXHVhYzRjXHVhYzRlXHVhYzRmXHVhYzUwXHVhYzUxXHVhYzUyXHVhYzUzXHVhYzU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkXHVhYzVlXHVhYzVmXHVhYzYwXHVhYzYxXHVh''@;'; put 'put ''YzYyXHVhYzYzXHVhYzY0XHVhYzY1XHVhYzY2XHVhYzY3XHVhYzY4XHVhYzY5XHVhYzZhXHVhYzZiXHVhYzZjXHVhYzZkXHVhYzZlXHVhYzZmXHVhYzcyXHVhYzczXHVhYzc1XHVhYzc2XHVhYzc5XHVhYzdiXHVhYzdjXHVhYzdkXHVhYzdlXHVhYzdmXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhk''@;'; put 'put ''XHVhYzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVhYzk1XHVhYzk2XHVhYzk3XHVhYzk4XHVhYzk5XHVhYzlhXHVhYzliXHVhYzllXHVhY2EyXHVhY2EzXHVhY2E0XHVhY2E1XHVhY2E2XHVhY2E3XHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxXHVhY2IyXHVhY2IzXHVhY2I0XHVhY2I1XHVh''@;'; put 'put ''Y2I2XHVhY2I3XHVhY2JhXHVhY2JlXHVhY2JmXHVhY2MwXHVhY2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2NkXHVhY2NlXHVhY2NmXHVhY2QwXHVhY2QxXHVhY2QyXHVhY2QzXHVhY2Q0XHVhY2Q2XHVhY2Q4XHVhY2Q5XHVhY2RhXHVhY2RiXHVhY2Rj''@;'; put 'put ''XHVhY2RkXHVhY2RlXHVhY2RmXHVhY2UyXHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3XHVhY2Y4XHVhY2Y5XHVhY2ZhXHVhY2ZiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVhZDAyXHVhZDAzXHVhZDA1XHVhZDA3XHVhZDA4XHVhZDA5XHVh''@;'; put 'put ''ZDBhXHVhZDBiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEyOV1bbV1dPTMzMDI0K20sRlszMzAyNCttXT14WzEyOV1bbV0pO2Zvcih4WzEzMF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQxNFx1YWQxNVx1YWQxNlx1YWQxN1x1YWQxOVx1YWQxYVx1YWQxYlx1YWQxZFx1YWQxZVx1YWQxZlx1YWQyMVx1YWQyMlx1YWQyM1x1YWQyNFx1YWQyNVx1YWQyNlx1YWQyN1x1''@;'; put 'put ''YWQyOFx1YWQyYVx1YWQyYlx1YWQyZVx1YWQyZlx1YWQzMFx1YWQzMVx1YWQzMlx1YWQzM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQzNlx1YWQzN1x1YWQzOVx1YWQzYVx1YWQzYlx1YWQzZFx1YWQzZVx1YWQzZlx1YWQ0MFx1YWQ0MVx1YWQ0Mlx1YWQ0M1x1YWQ0''@;'; put 'put ''Nlx1YWQ0OFx1YWQ0YVx1YWQ0Ylx1YWQ0Y1x1YWQ0ZFx1YWQ0ZVx1YWQ0Zlx1YWQ1MVx1YWQ1Mlx1YWQ1M1x1YWQ1NVx1YWQ1Nlx1YWQ1N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWQ1OVx1YWQ1YVx1YWQ1Ylx1YWQ1Y1x1YWQ1ZFx1YWQ1ZVx1YWQ1Zlx1YWQ2MFx1''@;'; put 'put ''YWQ2Mlx1YWQ2NFx1YWQ2NVx1YWQ2Nlx1YWQ2N1x1YWQ2OFx1YWQ2OVx1YWQ2YVx1YWQ2Ylx1YWQ2ZVx1YWQ2Zlx1YWQ3MVx1YWQ3Mlx1YWQ3N1x1YWQ3OFx1YWQ3OVx1YWQ3YVx1YWQ3ZVx1YWQ4MFx1YWQ4M1x1YWQ4NFx1YWQ4NVx1YWQ4Nlx1YWQ4N1x1YWQ4YVx1YWQ4Ylx1YWQ4ZFx1YWQ4''@;'; put 'put ''ZVx1YWQ4Zlx1YWQ5MVx1YWQ5Mlx1YWQ5M1x1YWQ5NFx1YWQ5NVx1YWQ5Nlx1YWQ5N1x1YWQ5OFx1YWQ5OVx1YWQ5YVx1YWQ5Ylx1YWQ5ZVx1YWQ5Zlx1YWRhMFx1YWRhMVx1YWRhMlx1YWRhM1x1YWRhNVx1YWRhNlx1YWRhN1x1YWRhOFx1YWRhOVx1YWRhYVx1YWRhYlx1YWRhY1x1YWRhZFx1''@;'; put 'put ''YWRhZVx1YWRhZlx1YWRiMFx1YWRiMVx1YWRiMlx1YWRiM1x1YWRiNFx1YWRiNVx1YWRiNlx1YWRiOFx1YWRiOVx1YWRiYVx1YWRiYlx1YWRiY1x1YWRiZFx1YWRiZVx1YWRiZlx1YWRjMlx1YWRjM1x1YWRjNVx1YWRjNlx1YWRjN1x1YWRjOVx1YWRjYVx1YWRjYlx1YWRjY1x1YWRjZFx1YWRj''@;'; put 'put ''ZVx1YWRjZlx1YWRkMlx1YWRkNFx1YWRkNVx1YWRkNlx1YWRkN1x1YWRkOFx1YWRkOVx1YWRkYVx1YWRkYlx1YWRkZFx1YWRkZVx1YWRkZlx1YWRlMVx1YWRlMlx1YWRlM1x1YWRlNVx1YWRlNlx1YWRlN1x1YWRlOFx1YWRlOVx1YWRlYVx1YWRlYlx1YWRlY1x1YWRlZFx1YWRlZVx1YWRlZlx1''@;'; put 'put ''YWRmMFx1YWRmMVx1YWRmMlx1YWRmM1x1YWRmNFx1YWRmNVx1YWRmNlx1YWRmN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzBdW21dXT0zMzI4MCttLEZbMzMyODArbV09eFsxMzBdW21d''@;'; put 'put ''KTtmb3IoeFsxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVcdWFlMDJcdWFlMDNcdWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFlMGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBc''@;'; put 'put ''dWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVcdWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlMWRcdWFlMWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJcdWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFl''@;'; put 'put ''MjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFlMmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdc''@;'; put 'put ''dWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFcdWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNcdWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFl''@;'; put 'put ''NzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFlN2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFlODdcdWFlODhcdWFlODlcdWFlOGFcdWFlOGJcdWFlOGRcdWFlOGVcdWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFlOTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdc''@;'; put 'put ''dWFlOThcdWFlOTlcdWFlOWFcdWFlOWJcdWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNcdWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdcdWFlYThcdWFlYTlcdWFlYWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVcdWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFl''@;'; put 'put ''YjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFlYjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFlYzhcdWFlYzlcdWFlY2FcdWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFlZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFc''@;'; put 'put ''dWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZcdWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMxXVttXV09MzM1MzYrbSxGWzMzNTM2''@;'; put 'put ''K21dPXhbMTMxXVttXSk7Zm9yKHhbMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlXHVhZWVmXHVhZWYwXHVhZWYxXHVhZWYyXHVhZWYzXHVhZWY1XHVhZWY2''@;'; put 'put ''XHVhZWY3XHVhZWY5XHVhZWZhXHVhZWZiXHVhZWZkXHVhZWZlXHVhZWZmXHVhZjAwXHVhZjAxXHVhZjAyXHVhZjAzXHVhZjA0XHVhZjA1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExXHVh''@;'; put 'put ''ZjEyXHVhZjEzXHVhZjE0XHVhZjE1XHVhZjE2XHVhZjE3XHVhZjE4XHVhZjE5XHVhZjFhXHVhZjFiXHVhZjFjXHVhZjFkXHVhZjFlXHVhZjFmXHVhZjIwXHVhZjIxXHVhZjIyXHVhZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjI0XHVhZjI1XHVhZjI2XHVhZjI3''@;'; put 'put ''XHVhZjI4XHVhZjI5XHVhZjJhXHVhZjJiXHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1XHVhZjM2XHVhZjM3XHVhZjM4XHVhZjM5XHVhZjNhXHVhZjNiXHVhZjNlXHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhXHVhZjRiXHVhZjRjXHVhZjRkXHVhZjRlXHVhZjRmXHVh''@;'; put 'put ''ZjUxXHVhZjUyXHVhZjUzXHVhZjU0XHVhZjU1XHVhZjU2XHVhZjU3XHVhZjU4XHVhZjU5XHVhZjVhXHVhZjViXHVhZjVlXHVhZjVmXHVhZjYwXHVhZjYxXHVhZjYyXHVhZjYzXHVhZjY2XHVhZjY3XHVhZjY4XHVhZjY5XHVhZjZhXHVhZjZiXHVhZjZjXHVhZjZkXHVhZjZlXHVhZjZmXHVhZjcw''@;'; put 'put ''XHVhZjcxXHVhZjcyXHVhZjczXHVhZjc0XHVhZjc1XHVhZjc2XHVhZjc3XHVhZjc4XHVhZjdhXHVhZjdiXHVhZjdjXHVhZjdkXHVhZjdlXHVhZjdmXHVhZjgxXHVhZjgyXHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5XHVhZjhhXHVhZjhiXHVhZjhjXHVhZjhkXHVhZjhlXHVhZjhmXHVh''@;'; put 'put ''ZjkyXHVhZjkzXHVhZjk0XHVhZjk2XHVhZjk3XHVhZjk4XHVhZjk5XHVhZjlhXHVhZjliXHVhZjlkXHVhZjllXHVhZjlmXHVhZmEwXHVhZmExXHVhZmEyXHVhZmEzXHVhZmE0XHVhZmE1XHVhZmE2XHVhZmE3XHVhZmE4XHVhZmE5XHVhZmFhXHVhZmFiXHVhZmFjXHVhZmFkXHVhZmFlXHVhZmFm''@;'; put 'put ''XHVhZmIwXHVhZmIxXHVhZmIyXHVhZmIzXHVhZmI0XHVhZmI1XHVhZmI2XHVhZmI3XHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMl1bbV1dPTMz''@;'; put 'put ''NzkyK20sRlszMzc5MittXT14WzEzMl1bbV0pO2Zvcih4WzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWZiZlx1YWZjMVx1YWZjMlx1YWZjM1x1YWZjNFx1YWZjNVx1YWZjNlx1YWZjYVx1YWZjY1x1YWZjZlx1YWZk''@;'; put 'put ''MFx1YWZkMVx1YWZkMlx1YWZkM1x1YWZkNVx1YWZkNlx1YWZkN1x1YWZkOFx1YWZkOVx1YWZkYVx1YWZkYlx1YWZkZFx1YWZkZVx1YWZkZlx1YWZlMFx1YWZlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWZlMlx1YWZlM1x1YWZlNFx1YWZlNVx1YWZlNlx1YWZlN1x1''@;'; put 'put ''YWZlYVx1YWZlYlx1YWZlY1x1YWZlZFx1YWZlZVx1YWZlZlx1YWZmMlx1YWZmM1x1YWZmNVx1YWZmNlx1YWZmN1x1YWZmOVx1YWZmYVx1YWZmYlx1YWZmY1x1YWZmZFx1YWZmZVx1YWZmZlx1YjAwMlx1YjAwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjAwNVx1YjAw''@;'; put 'put ''Nlx1YjAwN1x1YjAwOFx1YjAwOVx1YjAwYVx1YjAwYlx1YjAwZFx1YjAwZVx1YjAwZlx1YjAxMVx1YjAxMlx1YjAxM1x1YjAxNVx1YjAxNlx1YjAxN1x1YjAxOFx1YjAxOVx1YjAxYVx1YjAxYlx1YjAxZVx1YjAxZlx1YjAyMFx1YjAyMVx1YjAyMlx1YjAyM1x1YjAyNFx1YjAyNVx1YjAyNlx1''@;'; put 'put ''YjAyN1x1YjAyOVx1YjAyYVx1YjAyYlx1YjAyY1x1YjAyZFx1YjAyZVx1YjAyZlx1YjAzMFx1YjAzMVx1YjAzMlx1YjAzM1x1YjAzNFx1YjAzNVx1YjAzNlx1YjAzN1x1YjAzOFx1YjAzOVx1YjAzYVx1YjAzYlx1YjAzY1x1YjAzZFx1YjAzZVx1YjAzZlx1YjA0MFx1YjA0MVx1YjA0Mlx1YjA0''@;'; put 'put ''M1x1YjA0Nlx1YjA0N1x1YjA0OVx1YjA0Ylx1YjA0ZFx1YjA0Zlx1YjA1MFx1YjA1MVx1YjA1Mlx1YjA1Nlx1YjA1OFx1YjA1YVx1YjA1Ylx1YjA1Y1x1YjA1ZVx1YjA1Zlx1YjA2MFx1YjA2MVx1YjA2Mlx1YjA2M1x1YjA2NFx1YjA2NVx1YjA2Nlx1YjA2N1x1YjA2OFx1YjA2OVx1YjA2YVx1''@;'; put 'put ''YjA2Ylx1YjA2Y1x1YjA2ZFx1YjA2ZVx1YjA2Zlx1YjA3MFx1YjA3MVx1YjA3Mlx1YjA3M1x1YjA3NFx1YjA3NVx1YjA3Nlx1YjA3N1x1YjA3OFx1YjA3OVx1YjA3YVx1YjA3Ylx1YjA3ZVx1YjA3Zlx1YjA4MVx1YjA4Mlx1YjA4M1x1YjA4NVx1YjA4Nlx1YjA4N1x1YjA4OFx1YjA4OVx1YjA4''@;'; put 'put ''YVx1YjA4Ylx1YjA4ZVx1YjA5MFx1YjA5Mlx1YjA5M1x1YjA5NFx1YjA5NVx1YjA5Nlx1YjA5N1x1YjA5Ylx1YjA5ZFx1YjA5ZVx1YjBhM1x1YjBhNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVb''@;'; put 'put ''eFsxMzNdW21dXT0zNDA0OCttLEZbMzQwNDgrbV09eFsxMzNdW21dKTtmb3IoeFsxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIw''@;'; put 'put ''YjlcdWIwYmFcdWIwYmJcdWIwYmRcdWIwYmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIwY2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIwY2ZcdWIwZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdc''@;'; put 'put ''dWIwZDlcdWIwZGFcdWIwZGJcdWIwZGNcdWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZcdWIwZTdcdWIwZThcdWIwZTlcdWIwZWFcdWIwZWJcdWIwZWNcdWIwZWRcdWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWIwZjFcdWIwZjJcdWIwZjNcdWIwZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIwZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIxMDBcdWIxMDFcdWIxMDJcdWIxMDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZc''@;'; put 'put ''dWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmRcdWIxMmVcdWIxMmZcdWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIxMzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIx''@;'; put 'put ''M2RcdWIxM2VcdWIxM2ZcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIxNGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIxNTNcdWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNc''@;'; put 'put ''dWIxNjRcdWIxNjVcdWIxNjZcdWIxNjdcdWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZcdWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNcdWIxNzRcdWIxNzVcdWIxNzZcdWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODNcdWIx''@;'; put 'put ''ODRcdWIxODVcdWIxODZcdWIxODdcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNF1bbV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGFlW3hbMTM0XVttXV09MzQzMDQrbSxGWzM0MzA0K21dPXhbMTM0XVttXSk7Zm9yKHhbMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMTllXHViMTlmXHViMWEwXHViMWExXHViMWEyXHViMWEzXHVi''@;'; put 'put ''MWE0XHViMWE1XHViMWE2XHViMWE3XHViMWE5XHViMWFhXHViMWFiXHViMWFjXHViMWFkXHViMWFlXHViMWFmXHViMWIwXHViMWIxXHViMWIyXHViMWIzXHViMWI0XHViMWI1XHViMWI2XHViMWI3XHViMWI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWI5XHViMWJh''@;'; put 'put ''XHViMWJiXHViMWJjXHViMWJkXHViMWJlXHViMWJmXHViMWMwXHViMWMxXHViMWMyXHViMWMzXHViMWM0XHViMWM1XHViMWM2XHViMWM3XHViMWM4XHViMWM5XHViMWNhXHViMWNiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHViMWQ2XHViMWQ3XHViMWQ4XHViMWQ5XHViMWRhXHViMWRiXHViMWRlXHViMWUwXHViMWUxXHViMWUyXHViMWUzXHViMWU0XHViMWU1XHViMWU2XHViMWU3XHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxXHViMWYyXHViMWYzXHViMWY0XHViMWY1''@;'; put 'put ''XHViMWY2XHViMWY3XHViMWY4XHViMWZhXHViMWZjXHViMWZlXHViMWZmXHViMjAwXHViMjAxXHViMjAyXHViMjAzXHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBkXHViMjBlXHViMjBmXHViMjEwXHViMjExXHViMjEyXHViMjEzXHViMjE2XHViMjE4XHViMjFhXHViMjFiXHViMjFjXHVi''@;'; put 'put ''MjFkXHViMjFlXHViMjFmXHViMjIxXHViMjIyXHViMjIzXHViMjI0XHViMjI1XHViMjI2XHViMjI3XHViMjI4XHViMjI5XHViMjJhXHViMjJiXHViMjJjXHViMjJkXHViMjJlXHViMjJmXHViMjMwXHViMjMxXHViMjMyXHViMjMzXHViMjM1XHViMjM2XHViMjM3XHViMjM4XHViMjM5XHViMjNh''@;'; put 'put ''XHViMjNiXHViMjNkXHViMjNlXHViMjNmXHViMjQwXHViMjQxXHViMjQyXHViMjQzXHViMjQ0XHViMjQ1XHViMjQ2XHViMjQ3XHViMjQ4XHViMjQ5XHViMjRhXHViMjRiXHViMjRjXHViMjRkXHViMjRlXHViMjRmXHViMjUwXHViMjUxXHViMjUyXHViMjUzXHViMjU0XHViMjU1XHViMjU2XHVi''@;'; put 'put ''MjU3XHViMjU5XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVmXHViMjYxXHViMjYyXHViMjYzXHViMjY0XHViMjY1XHViMjY2XHViMjY3XHViMjZhXHViMjZiXHViMjZjXHViMjZkXHViMjZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsx''@;'; put 'put ''MzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNV1bbV1dPTM0NTYwK20sRlszNDU2MCttXT14WzEzNV1bbV0pO2Zvcih4WzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjI2Zlx1YjI3MFx1YjI3MVx1YjI3Mlx1''@;'; put 'put ''YjI3M1x1YjI3Nlx1YjI3N1x1YjI3OFx1YjI3OVx1YjI3YVx1YjI3Ylx1YjI3ZFx1YjI3ZVx1YjI3Zlx1YjI4MFx1YjI4MVx1YjI4Mlx1YjI4M1x1YjI4Nlx1YjI4N1x1YjI4OFx1YjI4YVx1YjI4Ylx1YjI4Y1x1YjI4ZFx1YjI4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1YjI4Zlx1YjI5Mlx1YjI5M1x1YjI5NVx1YjI5Nlx1YjI5N1x1YjI5Ylx1YjI5Y1x1YjI5ZFx1YjI5ZVx1YjI5Zlx1YjJhMlx1YjJhNFx1YjJhN1x1YjJhOFx1YjJhOVx1YjJhYlx1YjJhZFx1YjJhZVx1YjJhZlx1YjJiMVx1YjJiMlx1YjJiM1x1YjJiNVx1YjJiNlx1YjJiN1x1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjJiOFx1YjJiOVx1YjJiYVx1YjJiYlx1YjJiY1x1YjJiZFx1YjJiZVx1YjJiZlx1YjJjMFx1YjJjMVx1YjJjMlx1YjJjM1x1YjJjNFx1YjJjNVx1YjJjNlx1YjJjN1x1YjJjYVx1YjJjYlx1YjJjZFx1YjJjZVx1YjJjZlx1YjJkMVx1YjJk''@;'; put 'put ''M1x1YjJkNFx1YjJkNVx1YjJkNlx1YjJkN1x1YjJkYVx1YjJkY1x1YjJkZVx1YjJkZlx1YjJlMFx1YjJlMVx1YjJlM1x1YjJlN1x1YjJlOVx1YjJlYVx1YjJmMFx1YjJmMVx1YjJmMlx1YjJmNlx1YjJmY1x1YjJmZFx1YjJmZVx1YjMwMlx1YjMwM1x1YjMwNVx1YjMwNlx1YjMwN1x1YjMwOVx1''@;'; put 'put ''YjMwYVx1YjMwYlx1YjMwY1x1YjMwZFx1YjMwZVx1YjMwZlx1YjMxMlx1YjMxNlx1YjMxN1x1YjMxOFx1YjMxOVx1YjMxYVx1YjMxYlx1YjMxZFx1YjMxZVx1YjMxZlx1YjMyMFx1YjMyMVx1YjMyMlx1YjMyM1x1YjMyNFx1YjMyNVx1YjMyNlx1YjMyN1x1YjMyOFx1YjMyOVx1YjMyYVx1YjMy''@;'; put 'put ''Ylx1YjMyY1x1YjMyZFx1YjMyZVx1YjMyZlx1YjMzMFx1YjMzMVx1YjMzMlx1YjMzM1x1YjMzNFx1YjMzNVx1YjMzNlx1YjMzN1x1YjMzOFx1YjMzOVx1YjMzYVx1YjMzYlx1YjMzY1x1YjMzZFx1YjMzZVx1YjMzZlx1YjM0MFx1YjM0MVx1YjM0Mlx1YjM0M1x1YjM0NFx1YjM0NVx1YjM0Nlx1''@;'; put 'put ''YjM0N1x1YjM0OFx1YjM0OVx1YjM0YVx1YjM0Ylx1YjM0Y1x1YjM0ZFx1YjM0ZVx1YjM0Zlx1YjM1MFx1YjM1MVx1YjM1Mlx1YjM1M1x1YjM1N1x1YjM1OVx1YjM1YVx1YjM1ZFx1YjM2MFx1YjM2MVx1YjM2Mlx1YjM2M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNl0ubGVuZ3RoOysr''@;'; put 'put ''bSk2NTUzMyE9PXhbMTM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzZdW21dXT0zNDgxNittLEZbMzQ4MTYrbV09eFsxMzZdW21dKTtmb3IoeFsxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzNjZcdWIzNjhc''@;'; put 'put ''dWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2JcdWIzN2NcdWIzN2RcdWIzN2VcdWIzN2ZcdWIzODJcdWIzODZcdWIzODdcdWIzODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIzOTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIzOWRcdWIzOWVcdWIzOWZcdWIzYTJcdWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIzYTdcdWIzYTlcdWIzYWFcdWIzYWJc''@;'; put 'put ''dWIzYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJcdWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZcdWIzYjdcdWIzYjhcdWIzYjlcdWIzYmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVcdWIzYmZcdWIzYzBcdWIzYzFcdWIz''@;'; put 'put ''YzJcdWIzYzNcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIzZWFcdWIzZWJcdWIzZWNcdWIzZWRc''@;'; put 'put ''dWIzZWVcdWIzZWZcdWIzZjBcdWIzZjFcdWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlcdWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVcdWIzZmZcdWI0MDBcdWI0MDFcdWI0MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZcdWI0MDdcdWI0MDhcdWI0MDlcdWI0''@;'; put 'put ''MGFcdWI0MGJcdWI0MGNcdWI0MGRcdWI0MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVcdWI0MWZcdWI0MjFcdWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0MjZcdWI0MjdcdWI0MmFcdWI0MmNc''@;'; put 'put ''dWI0MmRcdWI0MmVcdWI0MmZcdWI0MzBcdWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0MzlcdWI0M2FcdWI0M2JcdWI0M2NcdWI0M2RcdWI0M2VcdWI0M2ZcdWI0NDBcdWI0NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsx''@;'; put 'put ''MzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM3XVttXV09MzUwNzIrbSxGWzM1MDcyK21dPXhbMTM3XVttXSk7Zm9yKHhbMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHViNDQ1XHViNDQ2XHViNDQ3XHViNDQ4XHViNDQ5XHViNDRhXHViNDRiXHViNDRjXHViNDRkXHViNDRlXHViNDRmXHViNDUyXHViNDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5XHViNDVhXHViNDViXHViNDVjXHViNDVkXHViNDVlXHViNDVmXHViNDYyXHViNDY0XHViNDY2XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDY3XHViNDY4XHViNDY5XHViNDZhXHViNDZiXHViNDZkXHViNDZlXHViNDZmXHViNDcwXHViNDcxXHViNDcyXHViNDczXHViNDc0XHViNDc1XHViNDc2XHViNDc3XHViNDc4XHViNDc5XHViNDdhXHViNDdiXHViNDdjXHViNDdkXHViNDdl''@;'; put 'put ''XHViNDdmXHViNDgxXHViNDgyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDgzXHViNDg0XHViNDg1XHViNDg2XHViNDg3XHViNDg5XHViNDhhXHViNDhiXHViNDhjXHViNDhkXHViNDhlXHViNDhmXHViNDkwXHViNDkxXHViNDkyXHViNDkzXHViNDk0XHViNDk1XHVi''@;'; put 'put ''NDk2XHViNDk3XHViNDk4XHViNDk5XHViNDlhXHViNDliXHViNDljXHViNDllXHViNDlmXHViNGEwXHViNGExXHViNGEyXHViNGEzXHViNGE1XHViNGE2XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkXHViNGFlXHViNGFmXHViNGIwXHViNGIxXHViNGIyXHViNGIzXHViNGI0XHViNGI2''@;'; put 'put ''XHViNGI4XHViNGJhXHViNGJiXHViNGJjXHViNGJkXHViNGJlXHViNGJmXHViNGMxXHViNGMyXHViNGMzXHViNGM1XHViNGM2XHViNGM3XHViNGM5XHViNGNhXHViNGNiXHViNGNjXHViNGNkXHViNGNlXHViNGNmXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2XHViNGQ3XHViNGQ4XHVi''@;'; put 'put ''NGQ5XHViNGRhXHViNGRiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3XHViNGU4XHViNGU5XHViNGVhXHViNGViXHViNGVlXHViNGYwXHViNGYyXHViNGYzXHViNGY0XHViNGY1XHViNGY2XHViNGY3XHViNGY5XHViNGZhXHViNGZiXHViNGZjXHViNGZkXHViNGZlXHViNGZm''@;'; put 'put ''XHViNTAwXHViNTAxXHViNTAyXHViNTAzXHViNTA0XHViNTA1XHViNTA2XHViNTA3XHViNTA4XHViNTA5XHViNTBhXHViNTBiXHViNTBjXHViNTBkXHViNTBlXHViNTBmXHViNTEwXHViNTExXHViNTEyXHViNTEzXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksbT0wO20hPXhbMTM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzOF1bbV1dPTM1MzI4K20sRlszNTMyOCttXT14WzEzOF1bbV0pO2Zvcih4WzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1YjUxZVx1YjUxZlx1YjUyMFx1YjUyMVx1YjUyMlx1YjUyM1x1YjUyNlx1YjUyYlx1YjUyY1x1YjUyZFx1YjUyZVx1YjUyZlx1YjUzMlx1YjUzM1x1YjUzNVx1YjUzNlx1YjUzN1x1YjUzOVx1YjUzYVx1YjUzYlx1YjUzY1x1YjUzZFx1YjUzZVx1YjUzZlx1YjU0Mlx1''@;'; put 'put ''YjU0Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU0N1x1YjU0OFx1YjU0OVx1YjU0YVx1YjU0ZVx1YjU0Zlx1YjU1MVx1YjU1Mlx1YjU1M1x1YjU1NVx1YjU1Nlx1YjU1N1x1YjU1OFx1YjU1OVx1YjU1YVx1YjU1Ylx1YjU1ZVx1YjU2Mlx1YjU2M1x1YjU2NFx1YjU2''@;'; put 'put ''NVx1YjU2Nlx1YjU2N1x1YjU2OFx1YjU2OVx1YjU2YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjU2Ylx1YjU2Y1x1YjU2ZFx1YjU2ZVx1YjU2Zlx1YjU3MFx1YjU3MVx1YjU3Mlx1YjU3M1x1YjU3NFx1YjU3NVx1YjU3Nlx1YjU3N1x1YjU3OFx1YjU3OVx1YjU3YVx1''@;'; put 'put ''YjU3Ylx1YjU3Y1x1YjU3ZFx1YjU3ZVx1YjU3Zlx1YjU4MFx1YjU4MVx1YjU4Mlx1YjU4M1x1YjU4NFx1YjU4NVx1YjU4Nlx1YjU4N1x1YjU4OFx1YjU4OVx1YjU4YVx1YjU4Ylx1YjU4Y1x1YjU4ZFx1YjU4ZVx1YjU4Zlx1YjU5MFx1YjU5MVx1YjU5Mlx1YjU5M1x1YjU5NFx1YjU5NVx1YjU5''@;'; put 'put ''Nlx1YjU5N1x1YjU5OFx1YjU5OVx1YjU5YVx1YjU5Ylx1YjU5Y1x1YjU5ZFx1YjU5ZVx1YjU5Zlx1YjVhMlx1YjVhM1x1YjVhNVx1YjVhNlx1YjVhN1x1YjVhOVx1YjVhY1x1YjVhZFx1YjVhZVx1YjVhZlx1YjViMlx1YjViNlx1YjViN1x1YjViOFx1YjViOVx1YjViYVx1YjViZVx1YjViZlx1''@;'; put 'put ''YjVjMVx1YjVjMlx1YjVjM1x1YjVjNVx1YjVjNlx1YjVjN1x1YjVjOFx1YjVjOVx1YjVjYVx1YjVjYlx1YjVjZVx1YjVkMlx1YjVkM1x1YjVkNFx1YjVkNVx1YjVkNlx1YjVkN1x1YjVkOVx1YjVkYVx1YjVkYlx1YjVkY1x1YjVkZFx1YjVkZVx1YjVkZlx1YjVlMFx1YjVlMVx1YjVlMlx1YjVl''@;'; put 'put ''M1x1YjVlNFx1YjVlNVx1YjVlNlx1YjVlN1x1YjVlOFx1YjVlOVx1YjVlYVx1YjVlYlx1YjVlZFx1YjVlZVx1YjVlZlx1YjVmMFx1YjVmMVx1YjVmMlx1YjVmM1x1YjVmNFx1YjVmNVx1YjVmNlx1YjVmN1x1YjVmOFx1YjVmOVx1YjVmYVx1YjVmYlx1YjVmY1x1YjVmZFx1YjVmZVx1YjVmZlx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzldW21dXT0zNTU4NCttLEZbMzU1ODQrbV09eFsxMzldW21dKTtmb3IoeFsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2MGJcdWI2MGNcdWI2MGRcdWI2MGVcdWI2MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTlcdWI2MWFc''@;'; put 'put ''dWI2MWJcdWI2MWNcdWI2MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBcdWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRcdWI2MjZcdWI2MjdcdWI2MjhcdWI2MjlcdWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2MmZcdWI2MzBcdWI2MzFcdWI2''@;'; put 'put ''MzJcdWI2MzNcdWI2MzVcdWI2MzZcdWI2MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2M2RcdWI2M2VcdWI2M2ZcdWI2NDBcdWI2NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVcdWI2NDZcdWI2NDdcdWI2NDlc''@;'; put 'put ''dWI2NGFcdWI2NGJcdWI2NGNcdWI2NGRcdWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVcdWI2NTZcdWI2NTdcdWI2NThcdWI2NTlcdWI2NWFcdWI2NWJcdWI2NWNcdWI2NWRcdWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2NjJcdWI2NjNcdWI2NjVcdWI2''@;'; put 'put ''NjZcdWI2NjdcdWI2NjlcdWI2NmFcdWI2NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2NzdcdWI2NzhcdWI2NzlcdWI2N2FcdWI2N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2ZcdWI2ODBcdWI2ODFcdWI2ODJc''@;'; put 'put ''dWI2ODNcdWI2ODRcdWI2ODVcdWI2ODZcdWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVcdWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJcdWI2OTNcdWI2OTRcdWI2OTVcdWI2OTZcdWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2OWJcdWI2OWVcdWI2OWZcdWI2''@;'; put 'put ''YTFcdWI2YTJcdWI2YTNcdWI2YTVcdWI2YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2YjVcdWI2YjZcdWI2YjdcdWI2YjhcdWI2YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRcdWI2YmVcdWI2YmZcdWI2YzBc''@;'; put 'put ''dWI2YzFcdWI2YzJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQwXVttXV09MzU4NDArbSxGWzM1ODQwK21dPXhbMTQwXVttXSk7Zm9yKHhbMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmMzXHViNmM0XHViNmM1XHViNmM2XHViNmM3XHViNmM4XHViNmM5XHViNmNhXHViNmNiXHViNmNjXHViNmNkXHViNmNlXHViNmNmXHViNmQwXHViNmQxXHViNmQyXHViNmQzXHViNmQ1XHViNmQ2XHViNmQ3XHViNmQ4''@;'; put 'put ''XHViNmQ5XHViNmRhXHViNmRiXHViNmRjXHViNmRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmRlXHViNmRmXHViNmUwXHViNmUxXHViNmUyXHViNmUzXHViNmU0XHViNmU1XHViNmU2XHViNmU3XHViNmU4XHViNmU5XHViNmVhXHViNmViXHViNmVjXHViNmVkXHVi''@;'; put 'put ''NmVlXHViNmVmXHViNmYxXHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3XHViNmY5XHViNmZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmZiXHViNmZjXHViNmZkXHViNmZlXHViNmZmXHViNzAyXHViNzAzXHViNzA0XHViNzA2XHViNzA3XHViNzA4XHViNzA5''@;'; put 'put ''XHViNzBhXHViNzBiXHViNzBjXHViNzBkXHViNzBlXHViNzBmXHViNzEwXHViNzExXHViNzEyXHViNzEzXHViNzE0XHViNzE1XHViNzE2XHViNzE3XHViNzE4XHViNzE5XHViNzFhXHViNzFiXHViNzFjXHViNzFkXHViNzFlXHViNzFmXHViNzIwXHViNzIxXHViNzIyXHViNzIzXHViNzI0XHVi''@;'; put 'put ''NzI1XHViNzI2XHViNzI3XHViNzJhXHViNzJiXHViNzJkXHViNzJlXHViNzMxXHViNzMyXHViNzMzXHViNzM0XHViNzM1XHViNzM2XHViNzM3XHViNzNhXHViNzNjXHViNzNkXHViNzNlXHViNzNmXHViNzQwXHViNzQxXHViNzQyXHViNzQzXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRh''@;'; put 'put ''XHViNzRiXHViNzRkXHViNzRlXHViNzRmXHViNzUwXHViNzUxXHViNzUyXHViNzUzXHViNzU2XHViNzU3XHViNzU4XHViNzU5XHViNzVhXHViNzViXHViNzVjXHViNzVkXHViNzVlXHViNzVmXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHViNzY3XHViNzY5XHViNzZhXHViNzZiXHVi''@;'; put 'put ''NzZjXHViNzZkXHViNzZlXHViNzZmXHViNzcyXHViNzc0XHViNzc2XHViNzc3XHViNzc4XHViNzc5XHViNzdhXHViNzdiXHViNzdlXHViNzdmXHViNzgxXHViNzgyXHViNzgzXHViNzg1XHViNzg2XHViNzg3XHViNzg4XHViNzg5XHViNzhhXHViNzhiXHViNzhlXHViNzkzXHViNzk0XHViNzk1''@;'; put 'put ''XHViNzlhXHViNzliXHViNzlkXHViNzllXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MV1bbV1dPTM2MDk2K20sRlszNjA5NittXT14WzE0MV1bbV0pO2Zvcih4WzE0Ml09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjc5Zlx1YjdhMVx1YjdhMlx1YjdhM1x1YjdhNFx1YjdhNVx1YjdhNlx1YjdhN1x1YjdhYVx1YjdhZVx1YjdhZlx1YjdiMFx1YjdiMVx1YjdiMlx1YjdiM1x1YjdiNlx1YjdiN1x1YjdiOVx1Yjdi''@;'; put 'put ''YVx1YjdiYlx1YjdiY1x1YjdiZFx1YjdiZVx1YjdiZlx1YjdjMFx1YjdjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjdjMlx1YjdjM1x1YjdjNFx1YjdjNVx1YjdjNlx1YjdjOFx1YjdjYVx1YjdjYlx1YjdjY1x1YjdjZFx1YjdjZVx1YjdjZlx1YjdkMFx1YjdkMVx1''@;'; put 'put ''YjdkMlx1YjdkM1x1YjdkNFx1YjdkNVx1YjdkNlx1YjdkN1x1YjdkOFx1YjdkOVx1YjdkYVx1YjdkYlx1YjdkY1x1YjdkZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjdkZVx1YjdkZlx1YjdlMFx1YjdlMVx1YjdlMlx1YjdlM1x1YjdlNFx1YjdlNVx1YjdlNlx1Yjdl''@;'; put 'put ''N1x1YjdlOFx1YjdlOVx1YjdlYVx1YjdlYlx1YjdlZVx1YjdlZlx1YjdmMVx1YjdmMlx1YjdmM1x1YjdmNVx1YjdmNlx1YjdmN1x1YjdmOFx1YjdmOVx1YjdmYVx1YjdmYlx1YjdmZVx1YjgwMlx1YjgwM1x1YjgwNFx1YjgwNVx1YjgwNlx1YjgwYVx1YjgwYlx1YjgwZFx1YjgwZVx1YjgwZlx1''@;'; put 'put ''YjgxMVx1YjgxMlx1YjgxM1x1YjgxNFx1YjgxNVx1YjgxNlx1YjgxN1x1YjgxYVx1YjgxY1x1YjgxZVx1YjgxZlx1YjgyMFx1YjgyMVx1YjgyMlx1YjgyM1x1YjgyNlx1YjgyN1x1YjgyOVx1YjgyYVx1YjgyYlx1YjgyZFx1YjgyZVx1YjgyZlx1YjgzMFx1YjgzMVx1YjgzMlx1YjgzM1x1Yjgz''@;'; put 'put ''Nlx1YjgzYVx1YjgzYlx1YjgzY1x1YjgzZFx1YjgzZVx1YjgzZlx1Yjg0MVx1Yjg0Mlx1Yjg0M1x1Yjg0NVx1Yjg0Nlx1Yjg0N1x1Yjg0OFx1Yjg0OVx1Yjg0YVx1Yjg0Ylx1Yjg0Y1x1Yjg0ZFx1Yjg0ZVx1Yjg0Zlx1Yjg1MFx1Yjg1Mlx1Yjg1NFx1Yjg1NVx1Yjg1Nlx1Yjg1N1x1Yjg1OFx1''@;'; put 'put ''Yjg1OVx1Yjg1YVx1Yjg1Ylx1Yjg1ZVx1Yjg1Zlx1Yjg2MVx1Yjg2Mlx1Yjg2M1x1Yjg2NVx1Yjg2Nlx1Yjg2N1x1Yjg2OFx1Yjg2OVx1Yjg2YVx1Yjg2Ylx1Yjg2ZVx1Yjg3MFx1Yjg3Mlx1Yjg3M1x1Yjg3NFx1Yjg3NVx1Yjg3Nlx1Yjg3N1x1Yjg3OVx1Yjg3YVx1Yjg3Ylx1Yjg3ZFx1Yjg3''@;'; put 'put ''ZVx1Yjg3Zlx1Yjg4MFx1Yjg4MVx1Yjg4Mlx1Yjg4M1x1Yjg4NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDJdW21dXT0zNjM1MittLEZbMzYzNTIrbV09eFsxNDJdW21dKTtmb3IoeFsx''@;'; put 'put ''NDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVcdWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlcdWI4OGFcdWI4OGJcdWI4OGNcdWI4OGVcdWI4OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNcdWI4OTRcdWI4OTVcdWI4''@;'; put 'put ''OTZcdWI4OTdcdWI4OThcdWI4OTlcdWI4OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YTBcdWI4YTFcdWI4YTJcdWI4YTNcdWI4YTRcdWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4YWFcdWI4YWJcdWI4YWNc''@;'; put 'put ''dWI4YWRcdWI4YWVcdWI4YWZcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJcdWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZcdWI4YzdcdWI4YzhcdWI4''@;'; put 'put ''YzlcdWI4Y2FcdWI4Y2JcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4ZGNcdWI4ZGVcdWI4ZTBcdWI4ZTJcdWI4ZTNcdWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4ZWFcdWI4ZWJcdWI4ZWRc''@;'; put 'put ''dWI4ZWVcdWI4ZWZcdWI4ZjFcdWI4ZjJcdWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVcdWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJcdWI5MDNcdWI5MDVcdWI5MDZcdWI5MDdcdWI5MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNcdWI5MGRcdWI5MGVcdWI5''@;'; put 'put ''MGZcdWI5MTBcdWI5MTFcdWI5MTJcdWI5MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5MjFcdWI5MjJcdWI5MjNcdWI5MjRcdWI5MjVcdWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5MmFcdWI5MmJcdWI5MmNc''@;'; put 'put ''dWI5MmRcdWI5MmVcdWI5MmZcdWI5MzBcdWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5MzhcdWI5MzlcdWI5M2FcdWI5M2JcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlcdWI5NGFcdWI5NGJcdWI5''@;'; put 'put ''NGRcdWI5NGVcdWI5NTBcdWI5NTJcdWI5NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQzXVttXV09MzY2MDgrbSxGWzM2NjA4K21dPXhbMTQz''@;'; put 'put ''XVttXSk7Zm9yKHhbMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTVhXHViOTViXHViOTVkXHViOTVlXHViOTVmXHViOTYxXHViOTYyXHViOTYzXHViOTY0XHViOTY1XHViOTY2XHViOTY3XHViOTZhXHViOTZjXHVi''@;'; put 'put ''OTZlXHViOTZmXHViOTcwXHViOTcxXHViOTcyXHViOTczXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHViOTdkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTdlXHViOTdmXHViOTgwXHViOTgxXHViOTgyXHViOTgzXHViOTg2XHViOTg4XHViOThiXHViOThj''@;'; put 'put ''XHViOThmXHViOTkwXHViOTkxXHViOTkyXHViOTkzXHViOTk0XHViOTk1XHViOTk2XHViOTk3XHViOTk4XHViOTk5XHViOTlhXHViOTliXHViOTljXHViOTlkXHViOTllXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTlmXHViOWEwXHViOWExXHViOWEyXHViOWEzXHVi''@;'; put 'put ''OWE0XHViOWE1XHViOWE2XHViOWE3XHViOWE4XHViOWE5XHViOWFhXHViOWFiXHViOWFlXHViOWFmXHViOWIxXHViOWIyXHViOWIzXHViOWI1XHViOWI2XHViOWI3XHViOWI4XHViOWI5XHViOWJhXHViOWJiXHViOWJlXHViOWMwXHViOWMyXHViOWMzXHViOWM0XHViOWM1XHViOWM2XHViOWM3''@;'; put 'put ''XHViOWNhXHViOWNiXHViOWNkXHViOWQzXHViOWQ0XHViOWQ1XHViOWQ2XHViOWQ3XHViOWRhXHViOWRjXHViOWRmXHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkXHViOWVlXHViOWVmXHViOWYwXHViOWYxXHViOWYyXHViOWYzXHViOWY2XHViOWZiXHVi''@;'; put 'put ''OWZjXHViOWZkXHViOWZlXHViOWZmXHViYTAyXHViYTAzXHViYTA0XHViYTA1XHViYTA2XHViYTA3XHViYTA5XHViYTBhXHViYTBiXHViYTBjXHViYTBkXHViYTBlXHViYTBmXHViYTEwXHViYTExXHViYTEyXHViYTEzXHViYTE0XHViYTE2XHViYTE3XHViYTE4XHViYTE5XHViYTFhXHViYTFi''@;'; put 'put ''XHViYTFjXHViYTFkXHViYTFlXHViYTFmXHViYTIwXHViYTIxXHViYTIyXHViYTIzXHViYTI0XHViYTI1XHViYTI2XHViYTI3XHViYTI4XHViYTI5XHViYTJhXHViYTJiXHViYTJjXHViYTJkXHViYTJlXHViYTJmXHViYTMwXHViYTMxXHViYTMyXHViYTMzXHViYTM0XHViYTM1XHViYTM2XHVi''@;'; put 'put ''YTM3XHViYTNhXHViYTNiXHViYTNkXHViYTNlXHViYTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NF1bbV1dPTM2ODY0K20sRlsz''@;'; put 'put ''Njg2NCttXT14WzE0NF1bbV0pO2Zvcih4WzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE0N1x1YmE0YVx1YmE0Y1x1YmE0Zlx1YmE1MFx1YmE1MVx1YmE1Mlx1YmE1Nlx1YmE1N1x1YmE1OVx1YmE1YVx1YmE1Ylx1''@;'; put 'put ''YmE1ZFx1YmE1ZVx1YmE1Zlx1YmE2MFx1YmE2MVx1YmE2Mlx1YmE2M1x1YmE2Nlx1YmE2YVx1YmE2Ylx1YmE2Y1x1YmE2ZFx1YmE2ZVx1YmE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE3Mlx1YmE3M1x1YmE3NVx1YmE3Nlx1YmE3N1x1YmE3OVx1YmE3YVx1YmE3''@;'; put 'put ''Ylx1YmE3Y1x1YmE3ZFx1YmE3ZVx1YmE3Zlx1YmE4MFx1YmE4MVx1YmE4Mlx1YmE4Nlx1YmE4OFx1YmE4OVx1YmE4YVx1YmE4Ylx1YmE4ZFx1YmE4ZVx1YmE4Zlx1YmE5MFx1YmE5MVx1YmE5Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmE5M1x1YmE5NFx1YmE5NVx1''@;'; put 'put ''YmE5Nlx1YmE5N1x1YmE5OFx1YmE5OVx1YmE5YVx1YmE5Ylx1YmE5Y1x1YmE5ZFx1YmE5ZVx1YmE5Zlx1YmFhMFx1YmFhMVx1YmFhMlx1YmFhM1x1YmFhNFx1YmFhNVx1YmFhNlx1YmFhN1x1YmFhYVx1YmFhZFx1YmFhZVx1YmFhZlx1YmFiMVx1YmFiM1x1YmFiNFx1YmFiNVx1YmFiNlx1YmFi''@;'; put 'put ''N1x1YmFiYVx1YmFiY1x1YmFiZVx1YmFiZlx1YmFjMFx1YmFjMVx1YmFjMlx1YmFjM1x1YmFjNVx1YmFjNlx1YmFjN1x1YmFjOVx1YmFjYVx1YmFjYlx1YmFjY1x1YmFjZFx1YmFjZVx1YmFjZlx1YmFkMFx1YmFkMVx1YmFkMlx1YmFkM1x1YmFkNFx1YmFkNVx1YmFkNlx1YmFkN1x1YmFkYVx1''@;'; put 'put ''YmFkYlx1YmFkY1x1YmFkZFx1YmFkZVx1YmFkZlx1YmFlMFx1YmFlMVx1YmFlMlx1YmFlM1x1YmFlNFx1YmFlNVx1YmFlNlx1YmFlN1x1YmFlOFx1YmFlOVx1YmFlYVx1YmFlYlx1YmFlY1x1YmFlZFx1YmFlZVx1YmFlZlx1YmFmMFx1YmFmMVx1YmFmMlx1YmFmM1x1YmFmNFx1YmFmNVx1YmFm''@;'; put 'put ''Nlx1YmFmN1x1YmFmOFx1YmFmOVx1YmFmYVx1YmFmYlx1YmFmZFx1YmFmZVx1YmFmZlx1YmIwMVx1YmIwMlx1YmIwM1x1YmIwNVx1YmIwNlx1YmIwN1x1YmIwOFx1YmIwOVx1YmIwYVx1YmIwYlx1YmIwY1x1YmIwZVx1YmIxMFx1YmIxMlx1YmIxM1x1YmIxNFx1YmIxNVx1YmIxNlx1YmIxN1x1''@;'; put 'put ''YmIxOVx1YmIxYVx1YmIxYlx1YmIxZFx1YmIxZVx1YmIxZlx1YmIyMVx1YmIyMlx1YmIyM1x1YmIyNFx1YmIyNVx1YmIyNlx1YmIyN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDVdW21d''@;'; put 'put ''XT0zNzEyMCttLEZbMzcxMjArbV09eFsxNDVdW21dKTtmb3IoeFsxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiMjhcdWJiMmFcdWJiMmNcdWJiMmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFcdWJiMzJcdWJiMzNc''@;'; put 'put ''dWJiMzdcdWJiMzlcdWJiM2FcdWJiM2ZcdWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTlcdWJi''@;'; put 'put ''NWFcdWJiNWJcdWJiNWNcdWJiNWRcdWJiNWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJiNjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJiNmRcdWJiNmVcdWJiNmZcdWJiNzBcdWJiNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNzJc''@;'; put 'put ''dWJiNzNcdWJiNzRcdWJiNzVcdWJiNzZcdWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2VcdWJiN2ZcdWJiODBcdWJiODFcdWJiODJcdWJiODNcdWJiODRcdWJiODVcdWJiODZcdWJiODdcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJi''@;'; put 'put ''OTFcdWJiOTJcdWJiOTNcdWJiOTRcdWJiOTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJiOWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJiYTFcdWJiYTJcdWJiYTNcdWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRcdWJiYWVcdWJiYWZc''@;'; put 'put ''dWJiYjBcdWJiYjFcdWJiYjJcdWJiYjNcdWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRcdWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZcdWJiYzdcdWJiYzlcdWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJiY2VcdWJiY2ZcdWJi''@;'; put 'put ''ZDFcdWJiZDJcdWJiZDRcdWJiZDVcdWJiZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJiZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJiZTJcdWJiZTNcdWJiZTRcdWJiZTVcdWJiZTZcdWJiZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJcdWJiZWNcdWJiZWRc''@;'; put 'put ''dWJiZWVcdWJiZWZcdWJiZjBcdWJiZjFcdWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Nl1bbV0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KGFlW3hbMTQ2XVttXV09MzczNzYrbSxGWzM3Mzc2K21dPXhbMTQ2XVttXSk7Zm9yKHhbMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzAzXHViYzA0XHViYzA1XHViYzA2XHViYzA3XHViYzBhXHViYzBlXHViYzEw''@;'; put 'put ''XHViYzEyXHViYzEzXHViYzE5XHViYzFhXHViYzIwXHViYzIxXHViYzIyXHViYzIzXHViYzI2XHViYzI4XHViYzJhXHViYzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzM2XHViYzM3XHViYzM5XHVi''@;'; put 'put ''YzNhXHViYzNiXHViYzNjXHViYzNkXHViYzNlXHViYzNmXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRiXHViYzRlXHViYzRmXHViYzUxXHViYzUyXHViYzUzXHViYzU0XHViYzU1XHViYzU2XHViYzU3XHViYzU4XHViYzU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHViYzVhXHViYzViXHViYzVjXHViYzVlXHViYzVmXHViYzYwXHViYzYxXHViYzYyXHViYzYzXHViYzY0XHViYzY1XHViYzY2XHViYzY3XHViYzY4XHViYzY5XHViYzZhXHViYzZiXHViYzZjXHViYzZkXHViYzZlXHViYzZmXHViYzcwXHViYzcxXHViYzcyXHViYzczXHViYzc0XHVi''@;'; put 'put ''Yzc1XHViYzc2XHViYzc3XHViYzc4XHViYzc5XHViYzdhXHViYzdiXHViYzdjXHViYzdkXHViYzdlXHViYzdmXHViYzgwXHViYzgxXHViYzgyXHViYzgzXHViYzg2XHViYzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmXHViYzkwXHViYzkxXHViYzkyXHViYzkzXHViYzk2XHViYzk4XHViYzli''@;'; put 'put ''XHViYzljXHViYzlkXHViYzllXHViYzlmXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5XHViY2FhXHViY2FiXHViY2FjXHViY2FkXHViY2FlXHViY2FmXHViY2IyXHViY2I2XHViY2I3XHViY2I4XHViY2I5XHViY2JhXHViY2JiXHViY2JlXHViY2JmXHViY2MxXHViY2MyXHViY2MzXHVi''@;'; put 'put ''Y2M1XHViY2M2XHViY2M3XHViY2M4XHViY2M5XHViY2NhXHViY2NiXHViY2NjXHViY2NlXHViY2QyXHViY2QzXHViY2Q0XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkXHViY2RlXHViY2RmXHViY2UwXHViY2UxXHViY2UyXHViY2UzXHViY2U0XHViY2U1XHViY2U2XHViY2U3''@;'; put 'put ''XHViY2U4XHViY2U5XHViY2VhXHViY2ViXHViY2VjXHViY2VkXHViY2VlXHViY2VmXHViY2YwXHViY2YxXHViY2YyXHViY2YzXHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDddW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzE0N11bbV1dPTM3NjMyK20sRlszNzYzMittXT14WzE0N11bbV0pO2Zvcih4WzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmNmZVx1YmNmZlx1YmQwMFx1YmQwMVx1YmQwMlx1YmQw''@;'; put 'put ''M1x1YmQwNlx1YmQwOFx1YmQwYVx1YmQwYlx1YmQwY1x1YmQwZFx1YmQwZVx1YmQwZlx1YmQxMVx1YmQxMlx1YmQxM1x1YmQxNVx1YmQxNlx1YmQxN1x1YmQxOFx1YmQxOVx1YmQxYVx1YmQxYlx1YmQxY1x1YmQxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQxZVx1''@;'; put 'put ''YmQxZlx1YmQyMFx1YmQyMVx1YmQyMlx1YmQyM1x1YmQyNVx1YmQyNlx1YmQyN1x1YmQyOFx1YmQyOVx1YmQyYVx1YmQyYlx1YmQyZFx1YmQyZVx1YmQyZlx1YmQzMFx1YmQzMVx1YmQzMlx1YmQzM1x1YmQzNFx1YmQzNVx1YmQzNlx1YmQzN1x1YmQzOFx1YmQzOVx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmQzYVx1YmQzYlx1YmQzY1x1YmQzZFx1YmQzZVx1YmQzZlx1YmQ0MVx1YmQ0Mlx1YmQ0M1x1YmQ0NFx1YmQ0NVx1YmQ0Nlx1YmQ0N1x1YmQ0YVx1YmQ0Ylx1YmQ0ZFx1YmQ0ZVx1YmQ0Zlx1YmQ1MVx1YmQ1Mlx1YmQ1M1x1YmQ1NFx1YmQ1NVx1YmQ1Nlx1''@;'; put 'put ''YmQ1N1x1YmQ1YVx1YmQ1Ylx1YmQ1Y1x1YmQ1ZFx1YmQ1ZVx1YmQ1Zlx1YmQ2MFx1YmQ2MVx1YmQ2Mlx1YmQ2M1x1YmQ2NVx1YmQ2Nlx1YmQ2N1x1YmQ2OVx1YmQ2YVx1YmQ2Ylx1YmQ2Y1x1YmQ2ZFx1YmQ2ZVx1YmQ2Zlx1YmQ3MFx1YmQ3MVx1YmQ3Mlx1YmQ3M1x1YmQ3NFx1YmQ3NVx1YmQ3''@;'; put 'put ''Nlx1YmQ3N1x1YmQ3OFx1YmQ3OVx1YmQ3YVx1YmQ3Ylx1YmQ3Y1x1YmQ3ZFx1YmQ3ZVx1YmQ3Zlx1YmQ4Mlx1YmQ4M1x1YmQ4NVx1YmQ4Nlx1YmQ4Ylx1YmQ4Y1x1YmQ4ZFx1YmQ4ZVx1YmQ4Zlx1YmQ5Mlx1YmQ5NFx1YmQ5Nlx1YmQ5N1x1YmQ5OFx1YmQ5Ylx1YmQ5ZFx1YmQ5ZVx1YmQ5Zlx1''@;'; put 'put ''YmRhMFx1YmRhMVx1YmRhMlx1YmRhM1x1YmRhNVx1YmRhNlx1YmRhN1x1YmRhOFx1YmRhOVx1YmRhYVx1YmRhYlx1YmRhY1x1YmRhZFx1YmRhZVx1YmRhZlx1YmRiMVx1YmRiMlx1YmRiM1x1YmRiNFx1YmRiNVx1YmRiNlx1YmRiN1x1YmRiOVx1YmRiYVx1YmRiYlx1YmRiY1x1YmRiZFx1YmRi''@;'; put 'put ''ZVx1YmRiZlx1YmRjMFx1YmRjMVx1YmRjMlx1YmRjM1x1YmRjNFx1YmRjNVx1YmRjNlx1YmRjN1x1YmRjOFx1YmRjOVx1YmRjYVx1YmRjYlx1YmRjY1x1YmRjZFx1YmRjZVx1YmRjZlx1YmRkMFx1YmRkMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0OF0ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMTQ4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDhdW21dXT0zNzg4OCttLEZbMzc4ODgrbV09eFsxNDhdW21dKTtmb3IoeFsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNcdWJkZDZcdWJk''@;'; put 'put ''ZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJkZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJkZWFcdWJkZWJcdWJkZWNcdWJkZWRcdWJkZWVcdWJkZWZcdWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVcdWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDZcdWJlMDdcdWJlMDhcdWJlMDlcdWJlMGFcdWJlMGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTNcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJlMWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJlMjJcdWJlMjNcdWJlMjRcdWJlMjVcdWJlMjZcdWJlMjdcdWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJlMmNcdWJlMmRc''@;'; put 'put ''dWJlMmVcdWJlMmZcdWJlMzBcdWJlMzFcdWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlcdWJlM2FcdWJlM2JcdWJlM2NcdWJlM2RcdWJlM2VcdWJlM2ZcdWJlNDBcdWJlNDFcdWJlNDJcdWJlNDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJl''@;'; put 'put ''NGRcdWJlNGZcdWJlNTBcdWJlNTFcdWJlNTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmJcdWJlNmNcdWJlNmRcdWJlNmVcdWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJlNzhcdWJlNzlc''@;'; put 'put ''dWJlN2FcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFcdWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNcdWJlOTRcdWJlOTVcdWJlOTZcdWJlOTdcdWJlOWFcdWJlOWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZcdWJlYTBcdWJl''@;'; put 'put ''YTFcdWJlYTJcdWJlYTNcdWJlYTRcdWJlYTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJlYWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJlYjJcdWJlYjNcdWJlYjRcdWJlYjVcdWJlYjZcdWJlYjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDldLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzE0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ5XVttXV09MzgxNDQrbSxGWzM4MTQ0K21dPXhbMTQ5XVttXSk7Zm9yKHhbMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWI4XHVi''@;'; put 'put ''ZWI5XHViZWJhXHViZWJiXHViZWJjXHViZWJkXHViZWJlXHViZWJmXHViZWMwXHViZWMxXHViZWMyXHViZWMzXHViZWM0XHViZWM1XHViZWM2XHViZWM3XHViZWM4XHViZWM5XHViZWNhXHViZWNiXHViZWNjXHViZWNkXHViZWNlXHViZWNmXHViZWQyXHViZWQzXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHViZWQ1XHViZWQ2XHViZWQ5XHViZWRhXHViZWRiXHViZWRjXHViZWRkXHViZWRlXHViZWRmXHViZWUxXHViZWUyXHViZWU2XHViZWU3XHViZWU4XHViZWU5XHViZWVhXHViZWViXHViZWVkXHViZWVlXHViZWVmXHViZWYwXHViZWYxXHViZWYyXHViZWYzXHVi''@;'; put 'put ''ZWY0XHViZWY1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWY2XHViZWY3XHViZWY4XHViZWY5XHViZWZhXHViZWZiXHViZWZjXHViZWZkXHViZWZlXHViZWZmXHViZjAwXHViZjAyXHViZjAzXHViZjA0XHViZjA1XHViZjA2XHViZjA3XHViZjBhXHViZjBiXHViZjBj''@;'; put 'put ''XHViZjBkXHViZjBlXHViZjBmXHViZjEwXHViZjExXHViZjEyXHViZjEzXHViZjE0XHViZjE1XHViZjE2XHViZjE3XHViZjFhXHViZjFlXHViZjFmXHViZjIwXHViZjIxXHViZjIyXHViZjIzXHViZjI0XHViZjI1XHViZjI2XHViZjI3XHViZjI4XHViZjI5XHViZjJhXHViZjJiXHViZjJjXHVi''@;'; put 'put ''ZjJkXHViZjJlXHViZjJmXHViZjMwXHViZjMxXHViZjMyXHViZjMzXHViZjM0XHViZjM1XHViZjM2XHViZjM3XHViZjM4XHViZjM5XHViZjNhXHViZjNiXHViZjNjXHViZjNkXHViZjNlXHViZjNmXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5XHViZjRhXHViZjRiXHViZjRj''@;'; put 'put ''XHViZjRkXHViZjRlXHViZjRmXHViZjUyXHViZjUzXHViZjU0XHViZjU2XHViZjU3XHViZjU4XHViZjU5XHViZjVhXHViZjViXHViZjVjXHViZjVkXHViZjVlXHViZjVmXHViZjYwXHViZjYxXHViZjYyXHViZjYzXHViZjY0XHViZjY1XHViZjY2XHViZjY3XHViZjY4XHViZjY5XHViZjZhXHVi''@;'; put 'put ''ZjZiXHViZjZjXHViZjZkXHViZjZlXHViZjZmXHViZjcwXHViZjcxXHViZjcyXHViZjczXHViZjc0XHViZjc1XHViZjc2XHViZjc3XHViZjc4XHViZjc5XHViZjdhXHViZjdiXHViZjdjXHViZjdkXHViZjdlXHViZjdmXHViZjgwXHViZjgxXHViZjgyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMTUwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1MF1bbV1dPTM4NDAwK20sRlszODQwMCttXT14WzE1MF1bbV0pO2Zvcih4WzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1YmY4M1x1YmY4NFx1YmY4NVx1YmY4Nlx1YmY4N1x1YmY4OFx1YmY4OVx1YmY4YVx1YmY4Ylx1YmY4Y1x1YmY4ZFx1YmY4ZVx1YmY4Zlx1YmY5MFx1YmY5MVx1YmY5Mlx1YmY5M1x1YmY5NVx1YmY5Nlx1YmY5N1x1YmY5OFx1YmY5OVx1YmY5YVx1YmY5Ylx1YmY5Y1x1YmY5ZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmY5ZVx1YmY5Zlx1YmZhMFx1YmZhMVx1YmZhMlx1YmZhM1x1YmZhNFx1YmZhNVx1YmZhNlx1YmZhN1x1YmZhOFx1YmZhOVx1YmZhYVx1YmZhYlx1YmZhY1x1YmZhZFx1YmZhZVx1YmZhZlx1YmZiMVx1YmZiMlx1YmZiM1x1YmZiNFx1''@;'; put 'put ''YmZiNVx1YmZiNlx1YmZiN1x1YmZiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmZiOVx1YmZiYVx1YmZiYlx1YmZiY1x1YmZiZFx1YmZiZVx1YmZiZlx1YmZjMFx1YmZjMVx1YmZjMlx1YmZjM1x1YmZjNFx1YmZjNlx1YmZjN1x1YmZjOFx1YmZjOVx1YmZjYVx1YmZj''@;'; put 'put ''Ylx1YmZjZVx1YmZjZlx1YmZkMVx1YmZkMlx1YmZkM1x1YmZkNVx1YmZkNlx1YmZkN1x1YmZkOFx1YmZkOVx1YmZkYVx1YmZkYlx1YmZkZFx1YmZkZVx1YmZlMFx1YmZlMlx1YmZlM1x1YmZlNFx1YmZlNVx1YmZlNlx1YmZlN1x1YmZlOFx1YmZlOVx1YmZlYVx1YmZlYlx1YmZlY1x1YmZlZFx1''@;'; put 'put ''YmZlZVx1YmZlZlx1YmZmMFx1YmZmMVx1YmZmMlx1YmZmM1x1YmZmNFx1YmZmNVx1YmZmNlx1YmZmN1x1YmZmOFx1YmZmOVx1YmZmYVx1YmZmYlx1YmZmY1x1YmZmZFx1YmZmZVx1YmZmZlx1YzAwMFx1YzAwMVx1YzAwMlx1YzAwM1x1YzAwNFx1YzAwNVx1YzAwNlx1YzAwN1x1YzAwOFx1YzAw''@;'; put 'put ''OVx1YzAwYVx1YzAwYlx1YzAwY1x1YzAwZFx1YzAwZVx1YzAwZlx1YzAxMFx1YzAxMVx1YzAxMlx1YzAxM1x1YzAxNFx1YzAxNVx1YzAxNlx1YzAxN1x1YzAxOFx1YzAxOVx1YzAxYVx1YzAxYlx1YzAxY1x1YzAxZFx1YzAxZVx1YzAxZlx1YzAyMFx1YzAyMVx1YzAyMlx1YzAyM1x1YzAyNFx1''@;'; put 'put ''YzAyNVx1YzAyNlx1YzAyN1x1YzAyOFx1YzAyOVx1YzAyYVx1YzAyYlx1YzAyY1x1YzAyZFx1YzAyZVx1YzAyZlx1YzAzMFx1YzAzMVx1YzAzMlx1YzAzM1x1YzAzNFx1YzAzNVx1YzAzNlx1YzAzN1x1YzAzOFx1YzAzOVx1YzAzYVx1YzAzYlx1YzAzZFx1YzAzZVx1YzAzZlx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzE1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTFdW21dXT0zODY1NittLEZbMzg2NTYrbV09eFsxNTFdW21dKTtmb3IoeFsxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWMwNDBcdWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhcdWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNcdWMwNGRcdWMwNGVcdWMwNGZcdWMwNTBcdWMwNTJcdWMwNTNcdWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMwNTlcdWMw''@;'; put 'put ''NWFcdWMwNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMwNjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMwNjZcdWMwNjdcdWMwNmFcdWMwNmJcdWMwNmNcdWMwNmRcdWMwNmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJcdWMwNzNc''@;'; put 'put ''dWMwNzRcdWMwNzVcdWMwNzZcdWMwNzdcdWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwN2FcdWMwN2JcdWMwN2NcdWMwN2RcdWMwN2VcdWMwN2ZcdWMwODBcdWMwODFcdWMwODJcdWMwODNcdWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMwODhcdWMw''@;'; put 'put ''ODlcdWMwOGFcdWMwOGJcdWMwOGNcdWMwOGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMwOWRcdWMwOWVcdWMwOWZcdWMwYTJcdWMwYTRcdWMwYTZcdWMwYTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJcdWMwYWVc''@;'; put 'put ''dWMwYjFcdWMwYjJcdWMwYjdcdWMwYjhcdWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDFcdWMwZDJcdWMwZDNcdWMwZDRcdWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMwZGVcdWMw''@;'; put 'put ''ZGZcdWMwZTBcdWMwZTFcdWMwZTJcdWMwZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMwZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMwZjNcdWMwZjZcdWMwZjhcdWMwZmFcdWMwZmJcdWMwZmNcdWMwZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJcdWMxMDNc''@;'; put 'put ''dWMxMDVcdWMxMDZcdWMxMDdcdWMxMDlcdWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdcdWMxMThcdWMxMTlcdWMxMWFcdWMxMWJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMx''@;'; put 'put ''MmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUyXVttXV09Mzg5MTIrbSxGWzM4OTEyK21dPXhbMTUyXVttXSk7Zm9yKHhbMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNhXHVjMTNiXHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQxXHVjMTQyXHVjMTQzXHVjMTQ0XHVjMTQ1XHVjMTQ2XHVjMTQ3XHVjMTRhXHVjMTRlXHVjMTRmXHVjMTUwXHVjMTUxXHVj''@;'; put 'put ''MTUyXHVjMTUzXHVjMTU2XHVjMTU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTU5XHVjMTVhXHVjMTViXHVjMTVkXHVjMTVlXHVjMTVmXHVjMTYwXHVjMTYxXHVjMTYyXHVjMTYzXHVjMTY2XHVjMTZhXHVjMTZiXHVjMTZjXHVjMTZkXHVjMTZlXHVjMTZmXHVjMTcx''@;'; put 'put ''XHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVjMTc3XHVjMTc5XHVjMTdhXHVjMTdiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTdjXHVjMTdkXHVjMTdlXHVjMTdmXHVjMTgwXHVjMTgxXHVjMTgyXHVjMTgzXHVjMTg0XHVjMTg2XHVjMTg3XHVjMTg4XHVjMTg5XHVj''@;'; put 'put ''MThhXHVjMThiXHVjMThmXHVjMTkxXHVjMTkyXHVjMTkzXHVjMTk1XHVjMTk3XHVjMTk4XHVjMTk5XHVjMTlhXHVjMTliXHVjMTllXHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxXHVjMWIyXHVjMWIzXHVjMWI0''@;'; put 'put ''XHVjMWI1XHVjMWI2XHVjMWI3XHVjMWI4XHVjMWI5XHVjMWJhXHVjMWJiXHVjMWJjXHVjMWJlXHVjMWJmXHVjMWMwXHVjMWMxXHVjMWMyXHVjMWMzXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkXHVjMWNlXHVjMWNmXHVjMWQwXHVjMWQxXHVjMWQyXHVjMWQzXHVj''@;'; put 'put ''MWQ1XHVjMWQ2XHVjMWQ5XHVjMWRhXHVjMWRiXHVjMWRjXHVjMWRkXHVjMWRlXHVjMWRmXHVjMWUxXHVjMWUyXHVjMWUzXHVjMWU1XHVjMWU2XHVjMWU3XHVjMWU5XHVjMWVhXHVjMWViXHVjMWVjXHVjMWVkXHVjMWVlXHVjMWVmXHVjMWYyXHVjMWY0XHVjMWY1XHVjMWY2XHVjMWY3XHVjMWY4''@;'; put 'put ''XHVjMWY5XHVjMWZhXHVjMWZiXHVjMWZlXHVjMWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1XHVjMjA2XHVjMjA3XHVjMjA4XHVjMjA5XHVjMjBhXHVjMjBiXHVjMjBlXHVjMjEwXHVjMjEyXHVjMjEzXHVjMjE0XHVjMjE1XHVjMjE2XHVjMjE3XHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVj''@;'; put 'put ''MjIxXHVjMjIyXHVjMjIzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1M11bbV1dPTM5MTY4K20sRlszOTE2OCttXT14WzE1M11bbV0pO2Zvcih4WzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzIyNFx1YzIyNVx1YzIyNlx1YzIyN1x1YzIyYVx1YzIyY1x1YzIyZVx1YzIzMFx1YzIzM1x1YzIzNVx1YzIzNlx1YzIzN1x1YzIzOFx1YzIzOVx1YzIzYVx1YzIzYlx1YzIzY1x1YzIzZFx1YzIzZVx1YzIzZlx1''@;'; put 'put ''YzI0MFx1YzI0MVx1YzI0Mlx1YzI0M1x1YzI0NFx1YzI0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzI0Nlx1YzI0N1x1YzI0OVx1YzI0YVx1YzI0Ylx1YzI0Y1x1YzI0ZFx1YzI0ZVx1YzI0Zlx1YzI1Mlx1YzI1M1x1YzI1NVx1YzI1Nlx1YzI1N1x1YzI1OVx1YzI1''@;'; put 'put ''YVx1YzI1Ylx1YzI1Y1x1YzI1ZFx1YzI1ZVx1YzI1Zlx1YzI2MVx1YzI2Mlx1YzI2M1x1YzI2NFx1YzI2Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzI2N1x1YzI2OFx1YzI2OVx1YzI2YVx1YzI2Ylx1YzI2ZVx1YzI2Zlx1YzI3MVx1YzI3Mlx1YzI3M1x1YzI3NVx1''@;'; put 'put ''YzI3Nlx1YzI3N1x1YzI3OFx1YzI3OVx1YzI3YVx1YzI3Ylx1YzI3ZVx1YzI4MFx1YzI4Mlx1YzI4M1x1YzI4NFx1YzI4NVx1YzI4Nlx1YzI4N1x1YzI4YVx1YzI4Ylx1YzI4Y1x1YzI4ZFx1YzI4ZVx1YzI4Zlx1YzI5MVx1YzI5Mlx1YzI5M1x1YzI5NFx1YzI5NVx1YzI5Nlx1YzI5N1x1YzI5''@;'; put 'put ''OVx1YzI5YVx1YzI5Y1x1YzI5ZVx1YzI5Zlx1YzJhMFx1YzJhMVx1YzJhMlx1YzJhM1x1YzJhNlx1YzJhN1x1YzJhOVx1YzJhYVx1YzJhYlx1YzJhZVx1YzJhZlx1YzJiMFx1YzJiMVx1YzJiMlx1YzJiM1x1YzJiNlx1YzJiOFx1YzJiYVx1YzJiYlx1YzJiY1x1YzJiZFx1YzJiZVx1YzJiZlx1''@;'; put 'put ''YzJjMFx1YzJjMVx1YzJjMlx1YzJjM1x1YzJjNFx1YzJjNVx1YzJjNlx1YzJjN1x1YzJjOFx1YzJjOVx1YzJjYVx1YzJjYlx1YzJjY1x1YzJjZFx1YzJjZVx1YzJjZlx1YzJkMFx1YzJkMVx1YzJkMlx1YzJkM1x1YzJkNFx1YzJkNVx1YzJkNlx1YzJkN1x1YzJkOFx1YzJkOVx1YzJkYVx1YzJk''@;'; put 'put ''Ylx1YzJkZVx1YzJkZlx1YzJlMVx1YzJlMlx1YzJlNVx1YzJlNlx1YzJlN1x1YzJlOFx1YzJlOVx1YzJlYVx1YzJlZVx1YzJmMFx1YzJmMlx1YzJmM1x1YzJmNFx1YzJmNVx1YzJmN1x1YzJmYVx1YzJmZFx1YzJmZVx1YzJmZlx1YzMwMVx1YzMwMlx1YzMwM1x1YzMwNFx1YzMwNVx1YzMwNlx1''@;'; put 'put ''YzMwN1x1YzMwYVx1YzMwYlx1YzMwZVx1YzMwZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTRdW21dXT0zOTQyNCttLEZbMzk0MjQrbV09eFsxNTRdW21dKTtmb3IoeFsxNTVdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMzMWZcdWMzMjBcdWMzMjFcdWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMzMmFc''@;'; put 'put ''dWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVcdWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRcdWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhcdWMzMzlcdWMzM2FcdWMzM2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2ZcdWMz''@;'; put 'put ''NDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMzNDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMzNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMzNGZcdWMzNTBcdWMzNTFcdWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMzNTZc''@;'; put 'put ''dWMzNTdcdWMzNThcdWMzNTlcdWMzNWFcdWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJcdWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZcdWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMzNzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZcdWMz''@;'; put 'put ''NzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMzN2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMzOGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMzOTJcdWMzOTNcdWMzOTRcdWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMzOTlc''@;'; put 'put ''dWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRcdWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVcdWMzYTZcdWMzYTdcdWMzYThcdWMzYTlcdWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRcdWMzYWVcdWMzYWZcdWMzYjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRcdWMz''@;'; put 'put ''YjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMzYjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMzYzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMzYzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMzY2FcdWMzY2JcdWMzY2NcdWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMzZDFc''@;'; put 'put ''dWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVcdWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU1XVttXV09Mzk2ODArbSxGWzM5NjgwK21dPXhbMTU1XVttXSk7Zm9y''@;'; put 'put ''KHhbMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVjM2UzXHVjM2U0XHVjM2U1XHVjM2U2XHVjM2U3XHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlXHVjM2VmXHVjM2YwXHVjM2Yx''@;'; put 'put ''XHVjM2YyXHVjM2YzXHVjM2Y2XHVjM2Y3XHVjM2Y5XHVjM2ZhXHVjM2ZiXHVjM2ZjXHVjM2ZkXHVjM2ZlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2ZmXHVjNDAwXHVjNDAxXHVjNDAyXHVjNDAzXHVjNDA0XHVjNDA1XHVjNDA2XHVjNDA3XHVjNDA5XHVjNDBhXHVj''@;'; put 'put ''NDBiXHVjNDBjXHVjNDBkXHVjNDBlXHVjNDBmXHVjNDExXHVjNDEyXHVjNDEzXHVjNDE0XHVjNDE1XHVjNDE2XHVjNDE3XHVjNDE4XHVjNDE5XHVjNDFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNDFiXHVjNDFjXHVjNDFkXHVjNDFlXHVjNDFmXHVjNDIwXHVjNDIx''@;'; put 'put ''XHVjNDIyXHVjNDIzXHVjNDI1XHVjNDI2XHVjNDI3XHVjNDI4XHVjNDI5XHVjNDJhXHVjNDJiXHVjNDJkXHVjNDJlXHVjNDJmXHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1XHVjNDM2XHVjNDM3XHVjNDM4XHVjNDM5XHVjNDNhXHVjNDNiXHVjNDNlXHVjNDNmXHVjNDQwXHVjNDQxXHVjNDQyXHVj''@;'; put 'put ''NDQzXHVjNDQ0XHVjNDQ1XHVjNDQ2XHVjNDQ3XHVjNDQ5XHVjNDRhXHVjNDRiXHVjNDRjXHVjNDRkXHVjNDRlXHVjNDRmXHVjNDUwXHVjNDUxXHVjNDUyXHVjNDUzXHVjNDU0XHVjNDU1XHVjNDU2XHVjNDU3XHVjNDU4XHVjNDU5XHVjNDVhXHVjNDViXHVjNDVjXHVjNDVkXHVjNDVlXHVjNDVm''@;'; put 'put ''XHVjNDYwXHVjNDYxXHVjNDYyXHVjNDYzXHVjNDY2XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZkXHVjNDZlXHVjNDZmXHVjNDcwXHVjNDcxXHVjNDcyXHVjNDczXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhXHVjNDdiXHVjNDdjXHVjNDdkXHVjNDdlXHVjNDdmXHVjNDgxXHVjNDgyXHVj''@;'; put 'put ''NDgzXHVjNDg0XHVjNDg1XHVjNDg2XHVjNDg3XHVjNDg4XHVjNDg5XHVjNDhhXHVjNDhiXHVjNDhjXHVjNDhkXHVjNDhlXHVjNDhmXHVjNDkwXHVjNDkxXHVjNDkyXHVjNDkzXHVjNDk1XHVjNDk2XHVjNDk3XHVjNDk4XHVjNDk5XHVjNDlhXHVjNDliXHVjNDlkXHVjNDllXHVjNDlmXHVjNGEw''@;'; put 'put ''XHVjNGExXHVjNGEyXHVjNGEzXHVjNGE0XHVjNGE1XHVjNGE2XHVjNGE3XHVjNGE4XHVjNGE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1Nl1bbV1dPTM5OTM2K20sRlszOTkzNittXT14''@;'; put 'put ''WzE1Nl1bbV0pO2Zvcih4WzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRhYVx1YzRhYlx1YzRhY1x1YzRhZFx1YzRhZVx1YzRhZlx1YzRiMFx1YzRiMVx1YzRiMlx1YzRiM1x1YzRiNFx1YzRiNVx1YzRiNlx1YzRi''@;'; put 'put ''N1x1YzRiOVx1YzRiYVx1YzRiYlx1YzRiZFx1YzRiZVx1YzRiZlx1YzRjMFx1YzRjMVx1YzRjMlx1YzRjM1x1YzRjNFx1YzRjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRjNlx1YzRjN1x1YzRjOFx1YzRjOVx1YzRjYVx1YzRjYlx1YzRjY1x1YzRjZFx1YzRjZVx1''@;'; put 'put ''YzRjZlx1YzRkMFx1YzRkMVx1YzRkMlx1YzRkM1x1YzRkNFx1YzRkNVx1YzRkNlx1YzRkN1x1YzRkOFx1YzRkOVx1YzRkYVx1YzRkYlx1YzRkY1x1YzRkZFx1YzRkZVx1YzRkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzRlMFx1YzRlMVx1YzRlMlx1YzRlM1x1YzRl''@;'; put 'put ''NFx1YzRlNVx1YzRlNlx1YzRlN1x1YzRlOFx1YzRlYVx1YzRlYlx1YzRlY1x1YzRlZFx1YzRlZVx1YzRlZlx1YzRmMlx1YzRmM1x1YzRmNVx1YzRmNlx1YzRmN1x1YzRmOVx1YzRmYlx1YzRmY1x1YzRmZFx1YzRmZVx1YzUwMlx1YzUwM1x1YzUwNFx1YzUwNVx1YzUwNlx1YzUwN1x1YzUwOFx1''@;'; put 'put ''YzUwOVx1YzUwYVx1YzUwYlx1YzUwZFx1YzUwZVx1YzUwZlx1YzUxMVx1YzUxMlx1YzUxM1x1YzUxNVx1YzUxNlx1YzUxN1x1YzUxOFx1YzUxOVx1YzUxYVx1YzUxYlx1YzUxZFx1YzUxZVx1YzUxZlx1YzUyMFx1YzUyMVx1YzUyMlx1YzUyM1x1YzUyNFx1YzUyNVx1YzUyNlx1YzUyN1x1YzUy''@;'; put 'put ''YVx1YzUyYlx1YzUyZFx1YzUyZVx1YzUyZlx1YzUzMVx1YzUzMlx1YzUzM1x1YzUzNFx1YzUzNVx1YzUzNlx1YzUzN1x1YzUzYVx1YzUzY1x1YzUzZVx1YzUzZlx1YzU0MFx1YzU0MVx1YzU0Mlx1YzU0M1x1YzU0Nlx1YzU0N1x1YzU0Ylx1YzU0Zlx1YzU1MFx1YzU1MVx1YzU1Mlx1YzU1Nlx1''@;'; put 'put ''YzU1YVx1YzU1Ylx1YzU1Y1x1YzU1Zlx1YzU2Mlx1YzU2M1x1YzU2NVx1YzU2Nlx1YzU2N1x1YzU2OVx1YzU2YVx1YzU2Ylx1YzU2Y1x1YzU2ZFx1YzU2ZVx1YzU2Zlx1YzU3Mlx1YzU3Nlx1YzU3N1x1YzU3OFx1YzU3OVx1YzU3YVx1YzU3Ylx1YzU3ZVx1YzU3Zlx1YzU4MVx1YzU4Mlx1YzU4''@;'; put 'put ''M1x1YzU4NVx1YzU4Nlx1YzU4OFx1YzU4OVx1YzU4YVx1YzU4Ylx1YzU4ZVx1YzU5MFx1YzU5Mlx1YzU5M1x1YzU5NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTddW21dXT00MDE5Mitt''@;'; put 'put ''LEZbNDAxOTIrbV09eFsxNTddW21dKTtmb3IoeFsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1OWZcdWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1''@;'; put 'put ''YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1YWFcdWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1YjdcdWM1YmFcdWM1YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNc''@;'; put 'put ''dWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNcdWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1''@;'; put 'put ''ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFcdWM2MTJcdWM2MTNcdWM2MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFc''@;'; put 'put ''dWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBcdWM2MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2''@;'; put 'put ''NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2NGRcdWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVcdWM2NjZcdWM2NjdcdWM2NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRc''@;'; put 'put ''dWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNcdWM2NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNcdWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2OGFcdWM2OGNcdWM2OGVcdWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2''@;'; put 'put ''OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU4''@;'; put 'put ''XVttXV09NDA0NDgrbSxGWzQwNDQ4K21dPXhbMTU4XVttXSk7Zm9yKHhbMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmE4XHVjNmFhXHVjNmFiXHVjNmFjXHVjNmFkXHVjNmFlXHVjNmFmXHVjNmIyXHVjNmIzXHVj''@;'; put 'put ''NmI1XHVjNmI2XHVjNmI3XHVjNmJiXHVjNmJjXHVjNmJkXHVjNmJlXHVjNmJmXHVjNmMyXHVjNmM0XHVjNmM2XHVjNmM3XHVjNmM4XHVjNmM5XHVjNmNhXHVjNmNiXHVjNmNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1''@;'; put 'put ''XHVjNmQ2XHVjNmQ3XHVjNmQ4XHVjNmQ5XHVjNmRhXHVjNmRiXHVjNmRlXHVjNmRmXHVjNmUyXHVjNmUzXHVjNmU0XHVjNmU1XHVjNmU2XHVjNmU3XHVjNmVhXHVjNmViXHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVj''@;'; put 'put ''NmYzXHVjNmY0XHVjNmY1XHVjNmY2XHVjNmY3XHVjNmZhXHVjNmZiXHVjNmZjXHVjNmZlXHVjNmZmXHVjNzAwXHVjNzAxXHVjNzAyXHVjNzAzXHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkXHVjNzBlXHVjNzBmXHVjNzEwXHVjNzExXHVjNzEyXHVjNzEzXHVjNzE2XHVjNzE4''@;'; put 'put ''XHVjNzFhXHVjNzFiXHVjNzFjXHVjNzFkXHVjNzFlXHVjNzFmXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVjNzI3XHVjNzI5XHVjNzJhXHVjNzJiXHVjNzJjXHVjNzJkXHVjNzJlXHVjNzJmXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVj''@;'; put 'put ''NzQxXHVjNzQyXHVjNzQzXHVjNzQ1XHVjNzQ2XHVjNzQ3XHVjNzQ4XHVjNzQ5XHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVjNzVhXHVjNzViXHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxXHVjNzYyXHVjNzYzXHVjNzY0XHVjNzY1XHVjNzY2XHVjNzY3XHVjNzY5XHVjNzZhXHVjNzZjXHVjNzZk''@;'; put 'put ''XHVjNzZlXHVjNzZmXHVjNzcwXHVjNzcxXHVjNzcyXHVjNzczXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdmXHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliXHVjNzljXHVjNzlkXHVj''@;'; put 'put ''NzllXHVjNzlmXHVjN2EyXHVjN2E3XHVjN2E4XHVjN2E5XHVjN2FhXHVjN2FiXHVjN2FlXHVjN2FmXHVjN2IxXHVjN2IyXHVjN2IzXHVjN2I1XHVjN2I2XHVjN2I3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTldW21dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihhZVt4WzE1OV1bbV1dPTQwNzA0K20sRls0MDcwNCttXT14WzE1OV1bbV0pO2Zvcih4WzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdiOFx1YzdiOVx1YzdiYVx1YzdiYlx1YzdiZVx1YzdjMlx1YzdjM1x1''@;'; put 'put ''YzdjNFx1YzdjNVx1YzdjNlx1YzdjN1x1YzdjYVx1YzdjYlx1YzdjZFx1YzdjZlx1YzdkMVx1YzdkMlx1YzdkM1x1YzdkNFx1YzdkNVx1YzdkNlx1YzdkN1x1YzdkOVx1YzdkYVx1YzdkYlx1YzdkY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzdkZVx1YzdkZlx1Yzdl''@;'; put 'put ''MFx1YzdlMVx1YzdlMlx1YzdlM1x1YzdlNVx1YzdlNlx1YzdlN1x1YzdlOVx1YzdlYVx1YzdlYlx1YzdlZFx1YzdlZVx1YzdlZlx1YzdmMFx1YzdmMVx1YzdmMlx1YzdmM1x1YzdmNFx1YzdmNVx1YzdmNlx1YzdmN1x1YzdmOFx1YzdmOVx1YzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1YzdmYlx1YzdmY1x1YzdmZFx1YzdmZVx1YzdmZlx1YzgwMlx1YzgwM1x1YzgwNVx1YzgwNlx1YzgwN1x1YzgwOVx1YzgwYlx1YzgwY1x1YzgwZFx1YzgwZVx1YzgwZlx1YzgxMlx1YzgxNFx1YzgxN1x1YzgxOFx1YzgxOVx1YzgxYVx1YzgxYlx1YzgxZVx1YzgxZlx1Yzgy''@;'; put 'put ''MVx1YzgyMlx1YzgyM1x1YzgyNVx1YzgyNlx1YzgyN1x1YzgyOFx1YzgyOVx1YzgyYVx1YzgyYlx1YzgyZVx1YzgzMFx1YzgzMlx1YzgzM1x1YzgzNFx1YzgzNVx1YzgzNlx1YzgzN1x1YzgzOVx1YzgzYVx1YzgzYlx1YzgzZFx1YzgzZVx1YzgzZlx1Yzg0MVx1Yzg0Mlx1Yzg0M1x1Yzg0NFx1''@;'; put 'put ''Yzg0NVx1Yzg0Nlx1Yzg0N1x1Yzg0YVx1Yzg0Ylx1Yzg0ZVx1Yzg0Zlx1Yzg1MFx1Yzg1MVx1Yzg1Mlx1Yzg1M1x1Yzg1NVx1Yzg1Nlx1Yzg1N1x1Yzg1OFx1Yzg1OVx1Yzg1YVx1Yzg1Ylx1Yzg1Y1x1Yzg1ZFx1Yzg1ZVx1Yzg1Zlx1Yzg2MFx1Yzg2MVx1Yzg2Mlx1Yzg2M1x1Yzg2NFx1Yzg2''@;'; put 'put ''NVx1Yzg2Nlx1Yzg2N1x1Yzg2OFx1Yzg2OVx1Yzg2YVx1Yzg2Ylx1Yzg2Y1x1Yzg2ZFx1Yzg2ZVx1Yzg2Zlx1Yzg3Mlx1Yzg3M1x1Yzg3NVx1Yzg3Nlx1Yzg3N1x1Yzg3OVx1Yzg3Ylx1Yzg3Y1x1Yzg3ZFx1Yzg3ZVx1Yzg3Zlx1Yzg4Mlx1Yzg4NFx1Yzg4OFx1Yzg4OVx1Yzg4YVx1Yzg4ZVx1''@;'; put 'put ''Yzg4Zlx1Yzg5MFx1Yzg5MVx1Yzg5Mlx1Yzg5M1x1Yzg5NVx1Yzg5Nlx1Yzg5N1x1Yzg5OFx1Yzg5OVx1Yzg5YVx1Yzg5Ylx1Yzg5Y1x1Yzg5ZVx1YzhhMFx1YzhhMlx1YzhhM1x1YzhhNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYwXVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjBdW21dXT00MDk2MCttLEZbNDA5NjArbV09eFsxNjBdW21dKTtmb3IoeFsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFc''@;'; put 'put ''dWM4YWJcdWM4YWNcdWM4YWRcdWM4YWVcdWM4YWZcdWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZcdWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFcdWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4''@;'; put 'put ''YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4ZGVcdWM4ZGZcdWM4ZTJcdWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4ZTZcdWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRcdWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFcdWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4ZjdcdWM4ZjhcdWM4ZjlcdWM4ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5''@;'; put 'put ''MDFcdWM5MDJcdWM5MDNcdWM5MDdcdWM5MDhcdWM5MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhc''@;'; put 'put ''dTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1''@;'; put 'put ''XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2''@;'; put 'put ''Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYxXVttXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoYWVbeFsxNjFdW21dXT00MTIxNittLEZbNDEyMTYrbV09eFsxNjFdW21dKTtmb3IoeFsxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MTBcdWM5MTJcdWM5MTNcdWM5MTRcdWM5MTVcdWM5''@;'; put 'put ''MTZcdWM5MTdcdWM5MTlcdWM5MWFcdWM5MWJcdWM5MWNcdWM5MWRcdWM5MWVcdWM5MWZcdWM5MjBcdWM5MjFcdWM5MjJcdWM5MjNcdWM5MjRcdWM5MjVcdWM5MjZcdWM5MjdcdWM5MjhcdWM5MjlcdWM5MmFcdWM5MmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MmRc''@;'; put 'put ''dWM5MmVcdWM5MmZcdWM5MzBcdWM5MzFcdWM5MzJcdWM5MzNcdWM5MzVcdWM5MzZcdWM5MzdcdWM5MzhcdWM5MzlcdWM5M2FcdWM5M2JcdWM5M2NcdWM5M2RcdWM5M2VcdWM5M2ZcdWM5NDBcdWM5NDFcdWM5NDJcdWM5NDNcdWM5NDRcdWM5NDVcdWM5NDZcdWM5NDdcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NDhcdWM5NDlcdWM5NGFcdWM5NGJcdWM5NGNcdWM5NGRcdWM5NGVcdWM5NGZcdWM5NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5NTdcdWM5NTlcdWM5NWFcdWM5NWJcdWM5NWNcdWM5NWRcdWM5NWVcdWM5NWZcdWM5NjJcdWM5NjRcdWM5NjVcdWM5NjZc''@;'; put 'put ''dWM5NjdcdWM5NjhcdWM5NjlcdWM5NmFcdWM5NmJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNceGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUwMmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1''@;'; put 'put ''MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5OVx1MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYx''@;'; put 'put ''ZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVcdTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFcdTI2NmNcdTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdcdTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjJdW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzE2Ml1bbV1dPTQxNDcyK20sRls0MTQ3MittXT14WzE2Ml1bbV0pO2Zvcih4WzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk3MVx1Yzk3Mlx1Yzk3M1x1Yzk3NVx1Yzk3Nlx1Yzk3''@;'; put 'put ''N1x1Yzk3OFx1Yzk3OVx1Yzk3YVx1Yzk3Ylx1Yzk3ZFx1Yzk3ZVx1Yzk3Zlx1Yzk4MFx1Yzk4MVx1Yzk4Mlx1Yzk4M1x1Yzk4NFx1Yzk4NVx1Yzk4Nlx1Yzk4N1x1Yzk4YVx1Yzk4Ylx1Yzk4ZFx1Yzk4ZVx1Yzk4Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk5MVx1''@;'; put 'put ''Yzk5Mlx1Yzk5M1x1Yzk5NFx1Yzk5NVx1Yzk5Nlx1Yzk5N1x1Yzk5YVx1Yzk5Y1x1Yzk5ZVx1Yzk5Zlx1YzlhMFx1YzlhMVx1YzlhMlx1YzlhM1x1YzlhNFx1YzlhNVx1YzlhNlx1YzlhN1x1YzlhOFx1YzlhOVx1YzlhYVx1YzlhYlx1YzlhY1x1YzlhZFx1YzlhZVx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzlhZlx1YzliMFx1YzliMVx1YzliMlx1YzliM1x1YzliNFx1YzliNVx1YzliNlx1YzliN1x1YzliOFx1YzliOVx1YzliYVx1YzliYlx1YzliY1x1YzliZFx1YzliZVx1YzliZlx1YzljMlx1YzljM1x1YzljNVx1YzljNlx1YzljOVx1YzljYlx1YzljY1x1''@;'; put 'put ''YzljZFx1YzljZVx1YzljZlx1YzlkMlx1YzlkNFx1YzlkN1x1YzlkOFx1YzlkYlx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmYwNFx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYx''@;'; put 'put ''NFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1''@;'; put 'put ''ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmZlNlx1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0''@;'; put 'put ''Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2M10ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMTYzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjNdW21dXT00MTcyOCttLEZbNDE3MjgrbV09eFsxNjNdW21dKTtmb3IoeFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5''@;'; put 'put ''ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFcdWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNhMjBcdWNhMjFcdWNhMjJcdWNhMjNcdWNhMjRcdWNhMjVcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNhMmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNhMzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZcdWNhMzdcdWNhMzhcdWNhMzlcdWNhM2FcdWNhM2JcdWNhM2Nc''@;'; put 'put ''dWNhM2RcdWNhM2VcdWNhM2ZcdWNhNDBcdWNhNDFcdWNhNDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJcdTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZcdTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMxM2NcdTMxM2RcdTMxM2VcdTMxM2ZcdTMxNDBcdTMxNDFcdTMx''@;'; put 'put ''NDJcdTMxNDNcdTMxNDRcdTMxNDVcdTMxNDZcdTMxNDdcdTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMxNGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMxNTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdcdTMxNThcdTMxNTlcdTMxNWFcdTMxNWJcdTMxNWNcdTMxNWRc''@;'; put 'put ''dTMxNWVcdTMxNWZcdTMxNjBcdTMxNjFcdTMxNjJcdTMxNjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlcdTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRcdTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMxNzNcdTMxNzRcdTMxNzVcdTMxNzZcdTMxNzdcdTMxNzhcdTMx''@;'; put 'put ''NzlcdTMxN2FcdTMxN2JcdTMxN2NcdTMxN2RcdTMxN2VcdTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMxODVcdTMxODZcdTMxODdcdTMxODhcdTMxODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjRdLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzE2NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY0XVttXV09NDE5ODQrbSxGWzQxOTg0K21dPXhbMTY0XVttXSk7Zm9yKHhbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTQ3XHVj''@;'; put 'put ''YTQ4XHVjYTQ5XHVjYTRhXHVjYTRiXHVjYTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1XHVjYTU2XHVjYTU3XHVjYTU4XHVjYTU5XHVjYTVhXHVjYTViXHVjYTVlXHVjYTYyXHVjYTYzXHVjYTY0XHVjYTY1XHVjYTY2XHVjYTY3XHVjYTY5XHVjYTZhXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVjYTZiXHVjYTZjXHVjYTZkXHVjYTZlXHVjYTZmXHVjYTcwXHVjYTcxXHVjYTcyXHVjYTczXHVjYTc0XHVjYTc1XHVjYTc2XHVjYTc3XHVjYTc4XHVjYTc5XHVjYTdhXHVjYTdiXHVjYTdjXHVjYTdlXHVjYTdmXHVjYTgwXHVjYTgxXHVjYTgyXHVjYTgzXHVj''@;'; put 'put ''YTg1XHVjYTg2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTg3XHVjYTg4XHVjYTg5XHVjYThhXHVjYThiXHVjYThjXHVjYThkXHVjYThlXHVjYThmXHVjYTkwXHVjYTkxXHVjYTkyXHVjYTkzXHVjYTk0XHVjYTk1XHVjYTk2XHVjYTk3XHVjYTk5XHVjYTlhXHVjYTli''@;'; put 'put ''XHVjYTljXHVjYTlkXHVjYTllXHVjYTlmXHVjYWEwXHVjYWExXHVjYWEyXHVjYWEzXHVjYWE0XHVjYWE1XHVjYWE2XHVjYWE3XHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUy''@;'; put 'put ''MTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzli''@;'; put 'put ''XHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUw''@;'; put 'put ''M2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMTY1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NV1bbV1dPTQyMjQwK20sRls0MjI0MCttXT14WzE2NV1bbV0pO2Zvcih4WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1Y2FhOFx1Y2FhOVx1Y2FhYVx1Y2FhYlx1Y2FhY1x1Y2FhZFx1Y2FhZVx1Y2FhZlx1Y2FiMFx1Y2FiMVx1Y2FiMlx1Y2FiM1x1Y2FiNFx1Y2FiNVx1Y2FiNlx1Y2FiN1x1Y2FiOFx1Y2FiOVx1Y2FiYVx1Y2FiYlx1Y2FiZVx1Y2FiZlx1Y2FjMVx1Y2FjMlx1Y2FjM1x1Y2FjNVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FjNlx1Y2FjN1x1Y2FjOFx1Y2FjOVx1Y2FjYVx1Y2FjYlx1Y2FjZVx1Y2FkMFx1Y2FkMlx1Y2FkNFx1Y2FkNVx1Y2FkNlx1Y2FkN1x1Y2FkYVx1Y2FkYlx1Y2FkY1x1Y2FkZFx1Y2FkZVx1Y2FkZlx1Y2FlMVx1Y2FlMlx1Y2FlM1x1''@;'; put 'put ''Y2FlNFx1Y2FlNVx1Y2FlNlx1Y2FlN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2FlOFx1Y2FlOVx1Y2FlYVx1Y2FlYlx1Y2FlZFx1Y2FlZVx1Y2FlZlx1Y2FmMFx1Y2FmMVx1Y2FmMlx1Y2FmM1x1Y2FmNVx1Y2FmNlx1Y2FmN1x1Y2FmOFx1Y2FmOVx1Y2FmYVx1Y2Fm''@;'; put 'put ''Ylx1Y2FmY1x1Y2FmZFx1Y2FmZVx1Y2FmZlx1Y2IwMFx1Y2IwMVx1Y2IwMlx1Y2IwM1x1Y2IwNFx1Y2IwNVx1Y2IwNlx1Y2IwN1x1Y2IwOVx1Y2IwYVx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1''@;'; put 'put ''MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1MjUxMlx1MjUxMVx1MjUxYVx1MjUxOVx1MjUxNlx1MjUxNVx1MjUwZVx1MjUwZFx1MjUx''@;'; put 'put ''ZVx1MjUxZlx1MjUyMVx1MjUyMlx1MjUyNlx1MjUyN1x1MjUyOVx1MjUyYVx1MjUyZFx1MjUyZVx1MjUzMVx1MjUzMlx1MjUzNVx1MjUzNlx1MjUzOVx1MjUzYVx1MjUzZFx1MjUzZVx1MjU0MFx1MjU0MVx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzE2Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjZdW21dXT00MjQ5NittLEZbNDI0OTYrbV09eFsxNjZdW21dKTtmb3IoeFsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWNiMGJcdWNiMGNcdWNiMGRcdWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFcdWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJcdWNiMjNcdWNiMjRcdWNiMjVcdWNiMjZcdWNiMjdcdWNi''@;'; put 'put ''MjhcdWNiMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNiMmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNiMzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNiMzhcdWNiMzlcdWNiM2FcdWNiM2JcdWNiM2NcdWNiM2Rc''@;'; put 'put ''dWNiM2VcdWNiM2ZcdWNiNDBcdWNiNDJcdWNiNDNcdWNiNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJcdWNiNTNcdWNiNTRcdWNiNTVcdWNiNTZcdWNiNTdcdWNi''@;'; put 'put ''NWFcdWNiNWJcdWNiNWNcdWNiNWVcdWNiNWZcdWNiNjBcdWNiNjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNiNjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNiNmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTlc''@;'; put 'put ''dTMzOWFcdTMzOWJcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOWZcdTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJcdTMzYjNcdTMzYjRcdTMzYjVcdTMzYjZcdTMzYjdcdTMz''@;'; put 'put ''YjhcdTMzYjlcdTMzODBcdTMzODFcdTMzODJcdTMzODNcdTMzODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMzYmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMzOTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVc''@;'; put 'put ''dTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY3XVttXV09NDI3NTIrbSxGWzQyNzUyK21dPXhbMTY3XVttXSk7Zm9yKHhbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjZkXHVjYjZlXHVjYjZmXHVjYjcwXHVjYjcxXHVjYjcyXHVjYjczXHVjYjc0XHVjYjc1XHVjYjc2XHVjYjc3XHVjYjdhXHVjYjdiXHVjYjdjXHVjYjdkXHVjYjdlXHVjYjdmXHVjYjgwXHVjYjgxXHVjYjgyXHVjYjgzXHVjYjg0XHVj''@;'; put 'put ''Yjg1XHVjYjg2XHVjYjg3XHVjYjg4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjg5XHVjYjhhXHVjYjhiXHVjYjhjXHVjYjhkXHVjYjhlXHVjYjhmXHVjYjkwXHVjYjkxXHVjYjkyXHVjYjkzXHVjYjk0XHVjYjk1XHVjYjk2XHVjYjk3XHVjYjk4XHVjYjk5XHVjYjlh''@;'; put 'put ''XHVjYjliXHVjYjlkXHVjYjllXHVjYjlmXHVjYmEwXHVjYmExXHVjYmEyXHVjYmEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmE0XHVjYmE1XHVjYmE2XHVjYmE3XHVjYmE4XHVjYmE5XHVjYmFhXHVjYmFiXHVjYmFjXHVjYmFkXHVjYmFlXHVjYmFmXHVjYmIwXHVj''@;'; put 'put ''YmIxXHVjYmIyXHVjYmIzXHVjYmI0XHVjYmI1XHVjYmI2XHVjYmI3XHVjYmI5XHVjYmJhXHVjYmJiXHVjYmJjXHVjYmJkXHVjYmJlXHVjYmJmXHVjYmMwXHVjYmMxXHVjYmMyXHVjYmMzXHVjYmM0XHhjNlx4ZDBceGFhXHUwMTI2XHVmZmZkXHUwMTMyXHVmZmZkXHUwMTNmXHUwMTQxXHhkOFx1''@;'; put 'put ''MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRhXHVmZmZkXHUzMjYwXHUzMjYxXHUzMjYyXHUzMjYzXHUzMjY0XHUzMjY1XHUzMjY2XHUzMjY3XHUzMjY4XHUzMjY5XHUzMjZhXHUzMjZiXHUzMjZjXHUzMjZkXHUzMjZlXHUzMjZmXHUzMjcwXHUzMjcxXHUzMjcyXHUzMjczXHUzMjc0XHUzMjc1XHUz''@;'; put 'put ''Mjc2XHUzMjc3XHUzMjc4XHUzMjc5XHUzMjdhXHUzMjdiXHUyNGQwXHUyNGQxXHUyNGQyXHUyNGQzXHUyNGQ0XHUyNGQ1XHUyNGQ2XHUyNGQ3XHUyNGQ4XHUyNGQ5XHUyNGRhXHUyNGRiXHUyNGRjXHUyNGRkXHUyNGRlXHUyNGRmXHUyNGUwXHUyNGUxXHUyNGUyXHUyNGUzXHUyNGU0XHUyNGU1''@;'; put 'put ''XHUyNGU2XHUyNGU3XHUyNGU4XHUyNGU5XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OF1bbV1dPTQzMDA4K20sRls0MzAwOCttXT14WzE2OF1bbV0pO2Zvcih4WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JjNVx1Y2JjNlx1Y2JjN1x1Y2JjOFx1Y2JjOVx1Y2JjYVx1Y2JjYlx1Y2JjY1x1Y2JjZFx1Y2JjZVx1Y2JjZlx1Y2JkMFx1Y2JkMVx1Y2JkMlx1Y2JkM1x1Y2JkNVx1Y2JkNlx1Y2JkN1x1Y2JkOFx1Y2JkOVx1Y2JkYVx1Y2JkYlx1Y2JkY1x1''@;'; put 'put ''Y2JkZFx1Y2JkZVx1Y2JkZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JlMFx1Y2JlMVx1Y2JlMlx1Y2JlM1x1Y2JlNVx1Y2JlNlx1Y2JlOFx1Y2JlYVx1Y2JlYlx1Y2JlY1x1Y2JlZFx1Y2JlZVx1Y2JlZlx1Y2JmMFx1Y2JmMVx1Y2JmMlx1Y2JmM1x1Y2JmNFx1Y2Jm''@;'; put 'put ''NVx1Y2JmNlx1Y2JmN1x1Y2JmOFx1Y2JmOVx1Y2JmYVx1Y2JmYlx1Y2JmY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JmZFx1Y2JmZVx1Y2JmZlx1Y2MwMFx1Y2MwMVx1Y2MwMlx1Y2MwM1x1Y2MwNFx1Y2MwNVx1Y2MwNlx1Y2MwN1x1Y2MwOFx1Y2MwOVx1Y2MwYVx1''@;'; put 'put ''Y2MwYlx1Y2MwZVx1Y2MwZlx1Y2MxMVx1Y2MxMlx1Y2MxM1x1Y2MxNVx1Y2MxNlx1Y2MxN1x1Y2MxOFx1Y2MxOVx1Y2MxYVx1Y2MxYlx1Y2MxZVx1Y2MxZlx1Y2MyMFx1Y2MyM1x1Y2MyNFx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQwXHUwMTQyXHhmOFx1MDE1''@;'; put 'put ''M1x4ZGZceGZlXHUwMTY3XHUwMTRiXHUwMTQ5XHUzMjAwXHUzMjAxXHUzMjAyXHUzMjAzXHUzMjA0XHUzMjA1XHUzMjA2XHUzMjA3XHUzMjA4XHUzMjA5XHUzMjBhXHUzMjBiXHUzMjBjXHUzMjBkXHUzMjBlXHUzMjBmXHUzMjEwXHUzMjExXHUzMjEyXHUzMjEzXHUzMjE0XHUzMjE1XHUzMjE2''@;'; put 'put ''XHUzMjE3XHUzMjE4XHUzMjE5XHUzMjFhXHUzMjFiXHUyNDljXHUyNDlkXHUyNDllXHUyNDlmXHUyNGEwXHUyNGExXHUyNGEyXHUyNGEzXHUyNGE0XHUyNGE1XHUyNGE2XHUyNGE3XHUyNGE4XHUyNGE5XHUyNGFhXHUyNGFiXHUyNGFjXHUyNGFkXHUyNGFlXHUyNGFmXHUyNGIwXHUyNGIxXHUy''@;'; put 'put ''NGIyXHUyNGIzXHUyNGI0XHUyNGI1XHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHhiOVx4YjJceGIzXHUyMDc0XHUyMDdmXHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0XHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksbT0wO20hPXhbMTY5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OV1bbV1dPTQzMjY0K20sRls0MzI2NCttXT14WzE2OV1bbV0pO2Zvcih4WzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0M1x1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0''@;'; put 'put ''Ylx1Y2M0ZFx1Y2M0ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1Y2M2NVx1Y2M2N1x1Y2M2OVx1Y2M2YVx1''@;'; put 'put ''Y2M2Ylx1Y2M2Y1x1Y2M2ZFx1Y2M2ZVx1Y2M2Zlx1Y2M3MVx1Y2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3ZFx1Y2M3ZVx1Y2M3Zlx1Y2M4MFx1Y2M4MVx1Y2M4''@;'; put 'put ''Mlx1Y2M4M1x1Y2M4NFx1Y2M4NVx1Y2M4Nlx1Y2M4N1x1Y2M4OFx1Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1''@;'; put 'put ''MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2''@;'; put 'put ''Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1''@;'; put 'put ''MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzBdW21dXT00MzUyMCttLEZbNDM1MjArbV09eFsxNzBdW21dKTtmb3IoeFsxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJcdWNjOWRcdWNjOWVcdWNjOWZcdWNjYTFcdWNjYTJcdWNjYTNcdWNjYTRcdWNjYTVcdWNjYTZcdWNjYTdcdWNjYWFcdWNjYWVcdWNjYWZcdWNjYjBcdWNjYjFcdWNj''@;'; put 'put ''YjJcdWNjYjNcdWNjYjZcdWNjYjdcdWNjYjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjYmFcdWNjYmJcdWNjYmRcdWNjYmVcdWNjYmZcdWNjYzBcdWNjYzFcdWNjYzJcdWNjYzNcdWNjYzZcdWNjYzhcdWNjY2FcdWNjY2JcdWNjY2NcdWNjY2RcdWNjY2VcdWNjY2Zc''@;'; put 'put ''dWNjZDFcdWNjZDJcdWNjZDNcdWNjZDVcdWNjZDZcdWNjZDdcdWNjZDhcdWNjZDlcdWNjZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjZGJcdWNjZGNcdWNjZGRcdWNjZGVcdWNjZGZcdWNjZTBcdWNjZTFcdWNjZTJcdWNjZTNcdWNjZTVcdWNjZTZcdWNjZTdcdWNj''@;'; put 'put ''ZThcdWNjZTlcdWNjZWFcdWNjZWJcdWNjZWRcdWNjZWVcdWNjZWZcdWNjZjFcdWNjZjJcdWNjZjNcdWNjZjRcdWNjZjVcdWNjZjZcdWNjZjdcdWNjZjhcdWNjZjlcdWNjZmFcdWNjZmJcdWNjZmNcdWNjZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThc''@;'; put 'put ''dTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMw''@;'; put 'put ''YzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZc''@;'; put 'put ''dTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcxXVttXV09NDM3NzYrbSxGWzQzNzc2K21dPXhbMTcxXVttXSk7Zm9yKHhbMTcyXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2ZlXHVjY2ZmXHVjZDAwXHVjZDAyXHVjZDAzXHVjZDA0XHVjZDA1XHVjZDA2XHVjZDA3XHVjZDBhXHVjZDBiXHVjZDBkXHVjZDBlXHVjZDBmXHVjZDExXHVjZDEyXHVjZDEzXHVjZDE0XHVjZDE1XHVj''@;'; put 'put ''ZDE2XHVjZDE3XHVjZDFhXHVjZDFjXHVjZDFlXHVjZDFmXHVjZDIwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDIxXHVjZDIyXHVjZDIzXHVjZDI1XHVjZDI2XHVjZDI3XHVjZDI5XHVjZDJhXHVjZDJiXHVjZDJkXHVjZDJlXHVjZDJmXHVjZDMwXHVjZDMxXHVjZDMy''@;'; put 'put ''XHVjZDMzXHVjZDM0XHVjZDM1XHVjZDM2XHVjZDM3XHVjZDM4XHVjZDNhXHVjZDNiXHVjZDNjXHVjZDNkXHVjZDNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDNmXHVjZDQwXHVjZDQxXHVjZDQyXHVjZDQzXHVjZDQ0XHVjZDQ1XHVjZDQ2XHVjZDQ3XHVjZDQ4XHVj''@;'; put 'put ''ZDQ5XHVjZDRhXHVjZDRiXHVjZDRjXHVjZDRkXHVjZDRlXHVjZDRmXHVjZDUwXHVjZDUxXHVjZDUyXHVjZDUzXHVjZDU0XHVjZDU1XHVjZDU2XHVjZDU3XHVjZDU4XHVjZDU5XHVjZDVhXHVjZDViXHVjZDVkXHVjZDVlXHVjZDVmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1''@;'; put 'put ''XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNi''@;'; put 'put ''XHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Ml1bbV1dPTQ0MDMyK20sRls0NDAzMittXT14WzE3Ml1bbV0pO2Zvcih4WzE3M109''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3Mlx1Y2Q3M1x1Y2Q3NFx1Y2Q3NVx1Y2Q3Nlx1''@;'; put 'put ''Y2Q3N1x1Y2Q3OVx1Y2Q3YVx1Y2Q3Ylx1Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1Y2Q4YVx1Y2Q4Ylx1Y2Q4Y1x1Y2Q4ZFx1Y2Q4''@;'; put 'put ''ZVx1Y2Q4Zlx1Y2Q5MFx1Y2Q5MVx1Y2Q5Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1Y2RhOFx1Y2RhYVx1Y2RhYlx1''@;'; put 'put ''Y2RhY1x1Y2RhZFx1Y2RhZVx1Y2RhZlx1Y2RiMVx1Y2RiMlx1Y2RiM1x1Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1Y2RjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTczXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzNdW21dXT00NDI4OCttLEZbNDQyODgrbV09eFsxNzNdW21d''@;'; put 'put ''KTtmb3IoeFsxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYzZcdWNkYzdcdWNkYzhcdWNkYzlcdWNkY2FcdWNkY2JcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDFcdWNkZDJcdWNkZDNcdWNkZDRcdWNkZDVcdWNkZDZc''@;'; put 'put ''dWNkZDdcdWNkZDhcdWNkZDlcdWNkZGFcdWNkZGJcdWNkZGNcdWNkZGRcdWNkZGVcdWNkZGZcdWNkZTBcdWNkZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkZTJcdWNkZTNcdWNkZTRcdWNkZTVcdWNkZTZcdWNkZTdcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNk''@;'; put 'put ''ZWVcdWNkZWZcdWNkZjFcdWNkZjJcdWNkZjNcdWNkZjRcdWNkZjVcdWNkZjZcdWNkZjdcdWNkZmFcdWNkZmNcdWNkZmVcdWNkZmZcdWNlMDBcdWNlMDFcdWNlMDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFc''@;'; put 'put ''dWNlMGJcdWNlMGRcdWNlMGVcdWNlMGZcdWNlMTBcdWNlMTFcdWNlMTJcdWNlMTNcdWNlMTVcdWNlMTZcdWNlMTdcdWNlMThcdWNlMWFcdWNlMWJcdWNlMWNcdWNlMWRcdWNlMWVcdWNlMWZcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc0XVttXV09NDQ1NDQrbSxGWzQ0NTQ0''@;'; put 'put ''K21dPXhbMTc0XVttXSk7Zm9yKHhbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTJjXHVjZTJkXHVjZTJlXHVjZTJmXHVjZTMyXHVjZTM0XHVjZTM2XHVjZTM3XHVjZTM4XHVjZTM5XHVjZTNhXHVjZTNiXHVjZTNj''@;'; put 'put ''XHVjZTNkXHVjZTNlXHVjZTNmXHVjZTQwXHVjZTQxXHVjZTQyXHVjZTQzXHVjZTQ0XHVjZTQ1XHVjZTQ2XHVjZTQ3XHVjZTQ4XHVjZTQ5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTRhXHVjZTRiXHVjZTRjXHVjZTRkXHVjZTRlXHVjZTRmXHVjZTUwXHVjZTUxXHVj''@;'; put 'put ''ZTUyXHVjZTUzXHVjZTU0XHVjZTU1XHVjZTU2XHVjZTU3XHVjZTVhXHVjZTViXHVjZTVkXHVjZTVlXHVjZTYyXHVjZTYzXHVjZTY0XHVjZTY1XHVjZTY2XHVjZTY3XHVjZTZhXHVjZTZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTZlXHVjZTZmXHVjZTcwXHVjZTcx''@;'; put 'put ''XHVjZTcyXHVjZTczXHVjZTc2XHVjZTc3XHVjZTc5XHVjZTdhXHVjZTdiXHVjZTdkXHVjZTdlXHVjZTdmXHVjZTgwXHVjZTgxXHVjZTgyXHVjZTgzXHVjZTg2XHVjZTg4XHVjZThhXHVjZThiXHVjZThjXHVjZThkXHVjZThlXHVjZThmXHVjZTkyXHVjZTkzXHVjZTk1XHVjZTk2XHVjZTk3XHVj''@;'; put 'put ''ZTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NV1bbV1dPTQ0''@;'; put 'put ''ODAwK20sRls0NDgwMCttXT14WzE3NV1bbV0pO2Zvcih4WzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2VhMlx1Y2VhNlx1Y2VhN1x1Y2VhOFx1Y2Vh''@;'; put 'put ''OVx1Y2VhYVx1Y2VhYlx1Y2VhZVx1Y2VhZlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2ViN1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1Y2ViZFx1Y2ViZVx1Y2ViZlx1Y2VjMFx1''@;'; put 'put ''Y2VjMlx1Y2VjM1x1Y2VjNFx1Y2VjNVx1Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2VjOVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2VkNlx1Y2Vk''@;'; put 'put ''N1x1Y2VkOFx1Y2VkOVx1Y2VkYVx1Y2VkYlx1Y2VkY1x1Y2VkZFx1Y2VkZVx1Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2VlM1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1Y2VmNlx1Y2VmYVx1Y2VmYlx1Y2VmY1x1''@;'; put 'put ''Y2VmZFx1Y2VmZVx1Y2VmZlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMyMFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMy''@;'; put 'put ''Zlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1''@;'; put 'put ''YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNl''@;'; put 'put ''N1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb''@;'; put 'put ''eFsxNzZdW21dXT00NTA1NittLEZbNDUwNTYrbV09eFsxNzZdW21dKTtmb3IoeFsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDlcdWNmMGFcdWNmMGJcdWNm''@;'; put 'put ''MGNcdWNmMGRcdWNmMGVcdWNmMGZcdWNmMTJcdWNmMTRcdWNmMTZcdWNmMTdcdWNmMThcdWNmMTlcdWNmMWFcdWNmMWJcdWNmMWRcdWNmMWVcdWNmMWZcdWNmMjFcdWNmMjJcdWNmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMjVcdWNmMjZcdWNmMjdcdWNmMjhc''@;'; put 'put ''dWNmMjlcdWNmMmFcdWNmMmJcdWNmMmVcdWNmMzJcdWNmMzNcdWNmMzRcdWNmMzVcdWNmMzZcdWNmMzdcdWNmMzlcdWNmM2FcdWNmM2JcdWNmM2NcdWNmM2RcdWNmM2VcdWNmM2ZcdWNmNDBcdWNmNDFcdWNmNDJcdWNmNDNcdWNmNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWNmNDVcdWNmNDZcdWNmNDdcdWNmNDhcdWNmNDlcdWNmNGFcdWNmNGJcdWNmNGNcdWNmNGRcdWNmNGVcdWNmNGZcdWNmNTBcdWNmNTFcdWNmNTJcdWNmNTNcdWNmNTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWRcdWNmNWVcdWNmNWZcdWNmNjBcdWNmNjFcdWNmNjJcdWNmNjNc''@;'; put 'put ''dWNmNjZcdWNmNjhcdWNmNmFcdWNmNmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRcdWFkMzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFkNjFcdWFk''@;'; put 'put ''NjNcdWFkNmNcdWFkNmRcdWFkNzBcdWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJcdWFkODhcdWFkODlcdWFkOGNcdWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBcdWFkZDFc''@;'; put 'put ''dWFkZDNcdWFkZGNcdWFkZTBcdWFkZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBcdWFlMzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFlNGFcdWFl''@;'; put 'put ''NGNcdWFlNGRcdWFlNGVcdWFlNTBcdWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFlNzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3N11bbV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGFlW3hbMTc3XVttXV09NDUzMTIrbSxGWzQ1MzEyK21dPXhbMTc3XVttXSk7Zm9yKHhbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjZkXHVjZjZlXHVjZjZmXHVjZjcyXHVjZjczXHVjZjc1XHVj''@;'; put 'put ''Zjc2XHVjZjc3XHVjZjc5XHVjZjdhXHVjZjdiXHVjZjdjXHVjZjdkXHVjZjdlXHVjZjdmXHVjZjgxXHVjZjgyXHVjZjgzXHVjZjg0XHVjZjg2XHVjZjg3XHVjZjg4XHVjZjg5XHVjZjhhXHVjZjhiXHVjZjhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjhlXHVjZjhm''@;'; put 'put ''XHVjZjkwXHVjZjkxXHVjZjkyXHVjZjkzXHVjZjk0XHVjZjk1XHVjZjk2XHVjZjk3XHVjZjk4XHVjZjk5XHVjZjlhXHVjZjliXHVjZjljXHVjZjlkXHVjZjllXHVjZjlmXHVjZmEwXHVjZmEyXHVjZmEzXHVjZmE0XHVjZmE1XHVjZmE2XHVjZmE3XHVjZmE5XHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVjZmFhXHVjZmFiXHVjZmFjXHVjZmFkXHVjZmFlXHVjZmFmXHVjZmIxXHVjZmIyXHVjZmIzXHVjZmI0XHVjZmI1XHVjZmI2XHVjZmI3XHVjZmI4XHVjZmI5XHVjZmJhXHVjZmJiXHVjZmJjXHVjZmJkXHVjZmJlXHVjZmJmXHVjZmMwXHVjZmMxXHVjZmMyXHVjZmMz''@;'; put 'put ''XHVjZmM1XHVjZmM2XHVjZmM3XHVjZmM4XHVjZmM5XHVjZmNhXHVjZmNiXHVhZTc5XHVhZTdiXHVhZTdjXHVhZTdkXHVhZTg0XHVhZTg1XHVhZThjXHVhZWJjXHVhZWJkXHVhZWJlXHVhZWMwXHVhZWM0XHVhZWNjXHVhZWNkXHVhZWNmXHVhZWQwXHVhZWQxXHVhZWQ4XHVhZWQ5XHVhZWRjXHVh''@;'; put 'put ''ZWU4XHVhZWViXHVhZWVkXHVhZWY0XHVhZWY4XHVhZWZjXHVhZjA3XHVhZjA4XHVhZjBkXHVhZjEwXHVhZjJjXHVhZjJkXHVhZjMwXHVhZjMyXHVhZjM0XHVhZjNjXHVhZjNkXHVhZjNmXHVhZjQxXHVhZjQyXHVhZjQzXHVhZjQ4XHVhZjQ5XHVhZjUwXHVhZjVjXHVhZjVkXHVhZjY0XHVhZjY1''@;'; put 'put ''XHVhZjc5XHVhZjgwXHVhZjg0XHVhZjg4XHVhZjkwXHVhZjkxXHVhZjk1XHVhZjljXHVhZmI4XHVhZmI5XHVhZmJjXHVhZmMwXHVhZmM3XHVhZmM4XHVhZmM5XHVhZmNiXHVhZmNkXHVhZmNlXHVhZmQ0XHVhZmRjXHVhZmU4XHVhZmU5XHVhZmYwXHVhZmYxXHVhZmY0XHVhZmY4XHViMDAwXHVi''@;'; put 'put ''MDAxXHViMDA0XHViMDBjXHViMDEwXHViMDE0XHViMDFjXHViMDFkXHViMDI4XHViMDQ0XHViMDQ1XHViMDQ4XHViMDRhXHViMDRjXHViMDRlXHViMDUzXHViMDU0XHViMDU1XHViMDU3XHViMDU5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsx''@;'; put 'put ''NzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OF1bbV1dPTQ1NTY4K20sRls0NTU2OCttXT14WzE3OF1bbV0pO2Zvcih4WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZjY1x1Y2ZjZFx1Y2ZjZVx1Y2ZjZlx1''@;'; put 'put ''Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2ZkM1x1Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1Y2ZlZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2ZmOVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAwOFx1ZDAwOVx1ZDAwYVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1ZDAyMFx1ZDAyMVx1ZDAyMlx1ZDAy''@;'; put 'put ''M1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1ZDAyN1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAyYlx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1YjBhMVx1YjBhMlx1YjBhOFx1''@;'; put 'put ''YjBhOVx1YjBhYlx1YjBhY1x1YjBhZFx1YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEwY1x1YjEx''@;'; put 'put ''MFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1YjE1Y1x1''@;'; put 'put ''YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OV0ubGVuZ3RoOysr''@;'; put 'put ''bSk2NTUzMyE9PXhbMTc5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzldW21dXT00NTgyNCttLEZbNDU4MjQrbV09eFsxNzldW21dKTtmb3IoeFsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMmVcdWQwMmZc''@;'; put 'put ''dWQwMzBcdWQwMzFcdWQwMzJcdWQwMzNcdWQwMzZcdWQwMzdcdWQwMzlcdWQwM2FcdWQwM2JcdWQwM2RcdWQwM2VcdWQwM2ZcdWQwNDBcdWQwNDFcdWQwNDJcdWQwNDNcdWQwNDZcdWQwNDhcdWQwNGFcdWQwNGJcdWQwNGNcdWQwNGRcdWQwNGVcdWQwNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWQwNTFcdWQwNTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQwNTlcdWQwNWFcdWQwNWJcdWQwNWNcdWQwNWRcdWQwNWVcdWQwNWZcdWQwNjFcdWQwNjJcdWQwNjNcdWQwNjRcdWQwNjVcdWQwNjZcdWQwNjdcdWQwNjhcdWQwNjlcdWQwNmFcdWQwNmJcdWQwNmVc''@;'; put 'put ''dWQwNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNzFcdWQwNzJcdWQwNzNcdWQwNzVcdWQwNzZcdWQwNzdcdWQwNzhcdWQwNzlcdWQwN2FcdWQwN2JcdWQwN2VcdWQwN2ZcdWQwODBcdWQwODJcdWQwODNcdWQwODRcdWQwODVcdWQwODZcdWQwODdcdWQwODhcdWQw''@;'; put 'put ''ODlcdWQwOGFcdWQwOGJcdWQwOGNcdWQwOGRcdWQwOGVcdWQwOGZcdWQwOTBcdWQwOTFcdWQwOTJcdWQwOTNcdWQwOTRcdWIxZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIxZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdc''@;'; put 'put ''dWIyMTlcdWIyMjBcdWIyMzRcdWIyM2NcdWIyNThcdWIyNWNcdWIyNjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIyN2NcdWIyODRcdWIyODVcdWIyODlcdWIyOTBcdWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIy''@;'; put 'put ''YWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIyYzlcdWIyY2NcdWIyZDBcdWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRcdWIyZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIyZThcdWIyZWJcdWIyZWNcdWIyZWRcdWIyZWVcdWIyZWZcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjdcdWIyZjhcdWIyZjlc''@;'; put 'put ''dWIyZmFcdWIyZmJcdWIyZmZcdWIzMDBcdWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRcdWIzMTVcdWIzMWNcdWIzNTRcdWIzNTVcdWIzNTZcdWIzNThcdWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsx''@;'; put 'put ''ODBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgwXVttXV09NDYwODArbSxGWzQ2MDgwK21dPXhbMTgwXVttXSk7Zm9yKHhbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVkMDk1XHVkMDk2XHVkMDk3XHVkMDk4XHVkMDk5XHVkMDlhXHVkMDliXHVkMDljXHVkMDlkXHVkMDllXHVkMDlmXHVkMGEwXHVkMGExXHVkMGEyXHVkMGEzXHVkMGE2XHVkMGE3XHVkMGE5XHVkMGFhXHVkMGFiXHVkMGFkXHVkMGFlXHVkMGFmXHVkMGIwXHVkMGIxXHVkMGIyXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGIzXHVkMGI2XHVkMGI4XHVkMGJhXHVkMGJiXHVkMGJjXHVkMGJkXHVkMGJlXHVkMGJmXHVkMGMyXHVkMGMzXHVkMGM1XHVkMGM2XHVkMGM3XHVkMGNhXHVkMGNiXHVkMGNjXHVkMGNkXHVkMGNlXHVkMGNmXHVkMGQyXHVkMGQ2XHVkMGQ3''@;'; put 'put ''XHVkMGQ4XHVkMGQ5XHVkMGRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMGRiXHVkMGRlXHVkMGRmXHVkMGUxXHVkMGUyXHVkMGUzXHVkMGU1XHVkMGU2XHVkMGU3XHVkMGU4XHVkMGU5XHVkMGVhXHVkMGViXHVkMGVlXHVkMGYyXHVkMGYzXHVkMGY0XHVkMGY1XHVk''@;'; put 'put ''MGY2XHVkMGY3XHVkMGY5XHVkMGZhXHVkMGZiXHVkMGZjXHVkMGZkXHVkMGZlXHVkMGZmXHVkMTAwXHVkMTAxXHVkMTAyXHVkMTAzXHVkMTA0XHViMzY3XHViMzY5XHViMzZiXHViMzZlXHViMzcwXHViMzcxXHViMzc0XHViMzc4XHViMzgwXHViMzgxXHViMzgzXHViMzg0XHViMzg1XHViMzhj''@;'; put 'put ''XHViMzkwXHViMzk0XHViM2EwXHViM2ExXHViM2E4XHViM2FjXHViM2M0XHViM2M1XHViM2M4XHViM2NiXHViM2NjXHViM2NlXHViM2QwXHViM2Q0XHViM2Q1XHViM2Q3XHViM2Q5XHViM2RiXHViM2RkXHViM2UwXHViM2U0XHViM2U4XHViM2ZjXHViNDEwXHViNDE4XHViNDFjXHViNDIwXHVi''@;'; put 'put ''NDI4XHViNDI5XHViNDJiXHViNDM0XHViNDUwXHViNDUxXHViNDU0XHViNDU4XHViNDYwXHViNDYxXHViNDYzXHViNDY1XHViNDZjXHViNDgwXHViNDg4XHViNDlkXHViNGE0XHViNGE4XHViNGFjXHViNGI1XHViNGI3XHViNGI5XHViNGMwXHViNGM0XHViNGM4XHViNGQwXHViNGQ1XHViNGRj''@;'; put 'put ''XHViNGRkXHViNGUwXHViNGUzXHViNGU0XHViNGU2XHViNGVjXHViNGVkXHViNGVmXHViNGYxXHViNGY4XHViNTE0XHViNTE1XHViNTE4XHViNTFiXHViNTFjXHViNTI0XHViNTI1XHViNTI3XHViNTI4XHViNTI5XHViNTJhXHViNTMwXHViNTMxXHViNTM0XHViNTM4XHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksbT0wO20hPXhbMTgxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MV1bbV1dPTQ2MzM2K20sRls0NjMzNittXT14WzE4MV1bbV0pO2Zvcih4WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEwNlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEwZlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDExM1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1ZDExY1x1ZDExZFx1ZDExZVx1''@;'; put 'put ''ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEyMVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEzM1x1ZDEzNVx1ZDEzNlx1ZDEz''@;'; put 'put ''N1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEzZlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NVx1ZDE1Nlx1ZDE1N1x1''@;'; put 'put ''ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1YjU1''@;'; put 'put ''ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYxMFx1''@;'; put 'put ''YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1Yjcz''@;'; put 'put ''MFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5N1x1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODJdW21dXT00NjU5MittLEZbNDY1OTIrbV09eFsxODJdW21dKTtmb3IoeFsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxNmVcdWQxNmZcdWQxNzBcdWQxNzFcdWQxNzJcdWQxNzNcdWQxNzRcdWQxNzVcdWQxNzZcdWQxNzdcdWQxNzhcdWQxNzlcdWQxN2FcdWQxN2JcdWQxN2RcdWQxN2VcdWQxN2ZcdWQxODBcdWQxODFcdWQxODJcdWQxODNcdWQxODVcdWQxODZc''@;'; put 'put ''dWQxODdcdWQxODlcdWQxOGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxOGJcdWQxOGNcdWQxOGRcdWQxOGVcdWQxOGZcdWQxOTBcdWQxOTFcdWQxOTJcdWQxOTNcdWQxOTRcdWQxOTVcdWQxOTZcdWQxOTdcdWQxOThcdWQxOTlcdWQxOWFcdWQxOWJcdWQxOWNcdWQx''@;'; put 'put ''OWRcdWQxOWVcdWQxOWZcdWQxYTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxYTlcdWQxYWFcdWQxYWJcdWQxYWNcdWQxYWRcdWQxYWVcdWQxYWZcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJc''@;'; put 'put ''dWQxYmRcdWQxYmVcdWQxYmZcdWQxYzFcdWQxYzJcdWQxYzNcdWQxYzRcdWQxYzVcdWQxYzZcdWQxYzdcdWQxYzhcdWQxYzlcdWQxY2FcdWQxY2JcdWQxY2NcdWQxY2RcdWQxY2VcdWQxY2ZcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3''@;'; put 'put ''YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRc''@;'; put 'put ''dWI4MzVcdWI4MzdcdWI4MzhcdWI4MzlcdWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRcdWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFcdWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4''@;'; put 'put ''Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBc''@;'; put 'put ''dWI5NjhcdWI5NjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgzXVttXV09NDY4NDgrbSxGWzQ2ODQ4K21dPXhbMTgzXVttXSk7Zm9yKHhbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWQwXHVkMWQxXHVkMWQyXHVkMWQzXHVkMWQ0XHVkMWQ1XHVkMWQ2XHVkMWQ3XHVkMWQ5XHVkMWRhXHVkMWRiXHVkMWRjXHVkMWRkXHVkMWRlXHVkMWRmXHVkMWUwXHVkMWUxXHVkMWUyXHVkMWUzXHVkMWU0XHVkMWU1''@;'; put 'put ''XHVkMWU2XHVkMWU3XHVkMWU4XHVkMWU5XHVkMWVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWViXHVkMWVjXHVkMWVkXHVkMWVlXHVkMWVmXHVkMWYwXHVkMWYxXHVkMWYyXHVkMWYzXHVkMWY1XHVkMWY2XHVkMWY3XHVkMWY5XHVkMWZhXHVkMWZiXHVkMWZjXHVk''@;'; put 'put ''MWZkXHVkMWZlXHVkMWZmXHVkMjAwXHVkMjAxXHVkMjAyXHVkMjAzXHVkMjA0XHVkMjA1XHVkMjA2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjA4XHVkMjBhXHVkMjBiXHVkMjBjXHVkMjBkXHVkMjBlXHVkMjBmXHVkMjExXHVkMjEyXHVkMjEzXHVkMjE0XHVkMjE1''@;'; put 'put ''XHVkMjE2XHVkMjE3XHVkMjE4XHVkMjE5XHVkMjFhXHVkMjFiXHVkMjFjXHVkMjFkXHVkMjFlXHVkMjFmXHVkMjIwXHVkMjIxXHVkMjIyXHVkMjIzXHVkMjI0XHVkMjI1XHVkMjI2XHVkMjI3XHVkMjI4XHVkMjI5XHViOTZiXHViOTZkXHViOTc0XHViOTc1XHViOTc4XHViOTdjXHViOTg0XHVi''@;'; put 'put ''OTg1XHViOTg3XHViOTg5XHViOThhXHViOThkXHViOThlXHViOWFjXHViOWFkXHViOWIwXHViOWI0XHViOWJjXHViOWJkXHViOWJmXHViOWMxXHViOWM4XHViOWM5XHViOWNjXHViOWNlXHViOWNmXHViOWQwXHViOWQxXHViOWQyXHViOWQ4XHViOWQ5XHViOWRiXHViOWRkXHViOWRlXHViOWUx''@;'; put 'put ''XHViOWUzXHViOWU0XHViOWU1XHViOWU4XHViOWVjXHViOWY0XHViOWY1XHViOWY3XHViOWY4XHViOWY5XHViOWZhXHViYTAwXHViYTAxXHViYTA4XHViYTE1XHViYTM4XHViYTM5XHViYTNjXHViYTQwXHViYTQyXHViYTQ4XHViYTQ5XHViYTRiXHViYTRkXHViYTRlXHViYTUzXHViYTU0XHVi''@;'; put 'put ''YTU1XHViYTU4XHViYTVjXHViYTY0XHViYTY1XHViYTY3XHViYTY4XHViYTY5XHViYTcwXHViYTcxXHViYTc0XHViYTc4XHViYTgzXHViYTg0XHViYTg1XHViYTg3XHViYThjXHViYWE4XHViYWE5XHViYWFiXHViYWFjXHViYWIwXHViYWIyXHViYWI4XHViYWI5XHViYWJiXHViYWJkXHViYWM0''@;'; put 'put ''XHViYWM4XHViYWQ4XHViYWQ5XHViYWZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NF1bbV1dPTQ3MTA0K20sRls0NzEwNCttXT14WzE4NF1bbV0pO2Zvcih4WzE4NV09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1ZDI0Mlx1ZDI0M1x1ZDI0''@;'; put 'put ''NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1OFx1ZDI1OVx1ZDI1YVx1''@;'; put 'put ''ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1ZDI2MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1ZDI3MFx1ZDI3MVx1ZDI3''@;'; put 'put ''Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3Nlx1ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1''@;'; put 'put ''YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5''@;'; put 'put ''MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMxNVx1YmMxNlx1YmMxN1x1''@;'; put 'put ''YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1YmMxZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4''@;'; put 'put ''OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODVdW21dXT00NzM2MCttLEZbNDczNjArbV09eFsxODVdW21dKTtmb3IoeFsx''@;'; put 'put ''ODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyOGRcdWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNcdWQyOTRcdWQyOTZcdWQyOTdcdWQyOThcdWQyOTlcdWQyOWFcdWQyOWJcdWQyOWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQy''@;'; put 'put ''YTJcdWQyYTNcdWQyYTVcdWQyYTZcdWQyYTdcdWQyYThcdWQyYTlcdWQyYWFcdWQyYWJcdWQyYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyYWVcdWQyYWZcdWQyYjBcdWQyYjJcdWQyYjNcdWQyYjRcdWQyYjVcdWQyYjZcdWQyYjdcdWQyYmFcdWQyYmJcdWQyYmRc''@;'; put 'put ''dWQyYmVcdWQyYzFcdWQyYzNcdWQyYzRcdWQyYzVcdWQyYzZcdWQyYzdcdWQyY2FcdWQyY2NcdWQyY2RcdWQyY2VcdWQyY2ZcdWQyZDBcdWQyZDFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQy''@;'; put 'put ''ZGJcdWQyZGRcdWQyZGVcdWQyZGZcdWQyZTBcdWQyZTFcdWQyZTJcdWQyZTNcdWQyZTZcdWQyZTdcdWQyZThcdWQyZTlcdWQyZWFcdWQyZWJcdWQyZWNcdWQyZWRcdWQyZWVcdWQyZWZcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBc''@;'; put 'put ''dWJjYTFcdWJjYTRcdWJjYTdcdWJjYThcdWJjYjBcdWJjYjFcdWJjYjNcdWJjYjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBcdWJjYzRcdWJjY2RcdWJjY2ZcdWJjZDBcdWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJk''@;'; put 'put ''MDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJkMjRcdWJkMmNcdWJkNDBcdWJkNDhcdWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJkNTlcdWJkNjRcdWJkNjhcdWJkODBcdWJkODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFc''@;'; put 'put ''dWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhcdWJkZDRcdWJkZDVcdWJkZDhcdWJkZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhcdWJlMDBcdWJlMDNcdWJlMDVcdWJlMGNcdWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJl''@;'; put 'put ''NTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJlNWFcdWJlNWJcdWJlNjBcdWJlNjFcdWJlNjRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg2XVttXV09NDc2MTYrbSxGWzQ3NjE2K21dPXhbMTg2''@;'; put 'put ''XVttXSk7Zm9yKHhbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmZiXHVkMmZjXHVkMmZkXHVkMmZlXHVkMmZmXHVkMzAyXHVkMzA0XHVkMzA2XHVkMzA3XHVkMzA4XHVkMzA5XHVkMzBhXHVkMzBiXHVkMzBmXHVk''@;'; put 'put ''MzExXHVkMzEyXHVkMzEzXHVkMzE1XHVkMzE3XHVkMzE4XHVkMzE5XHVkMzFhXHVkMzFiXHVkMzFlXHVkMzIyXHVkMzIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzI0XHVkMzI2XHVkMzI3XHVkMzJhXHVkMzJiXHVkMzJkXHVkMzJlXHVkMzJmXHVkMzMxXHVkMzMy''@;'; put 'put ''XHVkMzMzXHVkMzM0XHVkMzM1XHVkMzM2XHVkMzM3XHVkMzNhXHVkMzNlXHVkMzNmXHVkMzQwXHVkMzQxXHVkMzQyXHVkMzQzXHVkMzQ2XHVkMzQ3XHVkMzQ4XHVkMzQ5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzRhXHVkMzRiXHVkMzRjXHVkMzRkXHVkMzRlXHVk''@;'; put 'put ''MzRmXHVkMzUwXHVkMzUxXHVkMzUyXHVkMzUzXHVkMzU0XHVkMzU1XHVkMzU2XHVkMzU3XHVkMzU4XHVkMzU5XHVkMzVhXHVkMzViXHVkMzVjXHVkMzVkXHVkMzVlXHVkMzVmXHVkMzYwXHVkMzYxXHVkMzYyXHVkMzYzXHVkMzY0XHVkMzY1XHVkMzY2XHVkMzY3XHVkMzY4XHVkMzY5XHViZTY4''@;'; put 'put ''XHViZTZhXHViZTcwXHViZTcxXHViZTczXHViZTc0XHViZTc1XHViZTdiXHViZTdjXHViZTdkXHViZTgwXHViZTg0XHViZThjXHViZThkXHViZThmXHViZTkwXHViZTkxXHViZTk4XHViZTk5XHViZWE4XHViZWQwXHViZWQxXHViZWQ0XHViZWQ3XHViZWQ4XHViZWUwXHViZWUzXHViZWU0XHVi''@;'; put 'put ''ZWU1XHViZWVjXHViZjAxXHViZjA4XHViZjA5XHViZjE4XHViZjE5XHViZjFiXHViZjFjXHViZjFkXHViZjQwXHViZjQxXHViZjQ0XHViZjQ4XHViZjUwXHViZjUxXHViZjU1XHViZjk0XHViZmIwXHViZmM1XHViZmNjXHViZmNkXHViZmQwXHViZmQ0XHViZmRjXHViZmRmXHViZmUxXHVjMDNj''@;'; put 'put ''XHVjMDUxXHVjMDU4XHVjMDVjXHVjMDYwXHVjMDY4XHVjMDY5XHVjMDkwXHVjMDkxXHVjMDk0XHVjMDk4XHVjMGEwXHVjMGExXHVjMGEzXHVjMGE1XHVjMGFjXHVjMGFkXHVjMGFmXHVjMGIwXHVjMGIzXHVjMGI0XHVjMGI1XHVjMGI2XHVjMGJjXHVjMGJkXHVjMGJmXHVjMGMwXHVjMGMxXHVj''@;'; put 'put ''MGM1XHVjMGM4XHVjMGM5XHVjMGNjXHVjMGQwXHVjMGQ4XHVjMGQ5XHVjMGRiXHVjMGRjXHVjMGRkXHVjMGU0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4N11bbV1dPTQ3ODcyK20sRls0''@;'; put 'put ''Nzg3MittXT14WzE4N11bbV0pO2Zvcih4WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1ZDM3NFx1ZDM3NVx1''@;'; put 'put ''ZDM3Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1ZDM3YVx1ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5Mlx1ZDM5M1x1ZDM5''@;'; put 'put ''NFx1ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1ZDNhMlx1ZDNhM1x1ZDNhNFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNhYVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1ZDNiMFx1ZDNiMVx1''@;'; put 'put ''ZDNiMlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNiZVx1ZDNiZlx1ZDNjMFx1ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNkM1x1ZDNkNFx1ZDNk''@;'; put 'put ''NVx1ZDNkNlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExY1x1YzExZFx1YzExZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1''@;'; put 'put ''YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5''@;'; put 'put ''NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1''@;'; put 'put ''YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODhdW21d''@;'; put 'put ''XT00ODEyOCttLEZbNDgxMjgrbV09eFsxODhdW21dKTtmb3IoeFsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZDdcdWQzZDlcdWQzZGFcdWQzZGJcdWQzZGNcdWQzZGRcdWQzZGVcdWQzZGZcdWQzZTBcdWQzZTJc''@;'; put 'put ''dWQzZTRcdWQzZTVcdWQzZTZcdWQzZTdcdWQzZThcdWQzZTlcdWQzZWFcdWQzZWJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQzZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0''@;'; put 'put ''MDBcdWQ0MDJcdWQ0MDNcdWQ0MDRcdWQ0MDVcdWQ0MDZcdWQ0MDdcdWQ0MDlcdWQ0MGFcdWQ0MGJcdWQ0MGNcdWQ0MGRcdWQ0MGVcdWQ0MGZcdWQ0MTBcdWQ0MTFcdWQ0MTJcdWQ0MTNcdWQ0MTRcdWQ0MTVcdWQ0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MTdc''@;'; put 'put ''dWQ0MThcdWQ0MTlcdWQ0MWFcdWQ0MWJcdWQ0MWNcdWQ0MWVcdWQ0MWZcdWQ0MjBcdWQ0MjFcdWQ0MjJcdWQ0MjNcdWQ0MjRcdWQ0MjVcdWQ0MjZcdWQ0MjdcdWQ0MjhcdWQ0MjlcdWQ0MmFcdWQ0MmJcdWQ0MmNcdWQ0MmRcdWQ0MmVcdWQ0MmZcdWQ0MzBcdWQ0MzFcdWQ0MzJcdWQ0MzNcdWQ0''@;'; put 'put ''MzRcdWQ0MzVcdWQ0MzZcdWQ0MzdcdWMyMmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMyNTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNcdWMyNmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJc''@;'; put 'put ''dWMyOWRcdWMyYTRcdWMyYTVcdWMyYThcdWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNcdWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMyZWJcdWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMz''@;'; put 'put ''MDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMzMTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMzMjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNcdWMzNzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlc''@;'; put 'put ''dWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJcdWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhcdWM0MTBcdWM0MjRcdWM0MmNcdWM0MzBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OV1bbV0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KGFlW3hbMTg5XVttXV09NDgzODQrbSxGWzQ4Mzg0K21dPXhbMTg5XVttXSk7Zm9yKHhbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDM4XHVkNDM5XHVkNDNhXHVkNDNiXHVkNDNjXHVkNDNkXHVkNDNlXHVkNDNm''@;'; put 'put ''XHVkNDQxXHVkNDQyXHVkNDQzXHVkNDQ1XHVkNDQ2XHVkNDQ3XHVkNDQ4XHVkNDQ5XHVkNDRhXHVkNDRiXHVkNDRjXHVkNDRkXHVkNDRlXHVkNDRmXHVkNDUwXHVkNDUxXHVkNDUyXHVkNDUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDU0XHVkNDU1XHVkNDU2XHVk''@;'; put 'put ''NDU3XHVkNDU4XHVkNDU5XHVkNDVhXHVkNDViXHVkNDVkXHVkNDVlXHVkNDVmXHVkNDYxXHVkNDYyXHVkNDYzXHVkNDY1XHVkNDY2XHVkNDY3XHVkNDY4XHVkNDY5XHVkNDZhXHVkNDZiXHVkNDZjXHVkNDZlXHVkNDcwXHVkNDcxXHVkNDcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVkNDczXHVkNDc0XHVkNDc1XHVkNDc2XHVkNDc3XHVkNDdhXHVkNDdiXHVkNDdkXHVkNDdlXHVkNDgxXHVkNDgzXHVkNDg0XHVkNDg1XHVkNDg2XHVkNDg3XHVkNDhhXHVkNDhjXHVkNDhlXHVkNDhmXHVkNDkwXHVkNDkxXHVkNDkyXHVkNDkzXHVkNDk1XHVkNDk2XHVkNDk3XHVk''@;'; put 'put ''NDk4XHVkNDk5XHVkNDlhXHVkNDliXHVkNDljXHVkNDlkXHVjNDM0XHVjNDNjXHVjNDNkXHVjNDQ4XHVjNDY0XHVjNDY1XHVjNDY4XHVjNDZjXHVjNDc0XHVjNDc1XHVjNDc5XHVjNDgwXHVjNDk0XHVjNDljXHVjNGI4XHVjNGJjXHVjNGU5XHVjNGYwXHVjNGYxXHVjNGY0XHVjNGY4XHVjNGZh''@;'; put 'put ''XHVjNGZmXHVjNTAwXHVjNTAxXHVjNTBjXHVjNTEwXHVjNTE0XHVjNTFjXHVjNTI4XHVjNTI5XHVjNTJjXHVjNTMwXHVjNTM4XHVjNTM5XHVjNTNiXHVjNTNkXHVjNTQ0XHVjNTQ1XHVjNTQ4XHVjNTQ5XHVjNTRhXHVjNTRjXHVjNTRkXHVjNTRlXHVjNTUzXHVjNTU0XHVjNTU1XHVjNTU3XHVj''@;'; put 'put ''NTU4XHVjNTU5XHVjNTVkXHVjNTVlXHVjNTYwXHVjNTYxXHVjNTY0XHVjNTY4XHVjNTcwXHVjNTcxXHVjNTczXHVjNTc0XHVjNTc1XHVjNTdjXHVjNTdkXHVjNTgwXHVjNTg0XHVjNTg3XHVjNThjXHVjNThkXHVjNThmXHVjNTkxXHVjNTk1XHVjNTk3XHVjNTk4XHVjNTljXHVjNWEwXHVjNWE5''@;'; put 'put ''XHVjNWI0XHVjNWI1XHVjNWI4XHVjNWI5XHVjNWJiXHVjNWJjXHVjNWJkXHVjNWJlXHVjNWM0XHVjNWM1XHVjNWM2XHVjNWM3XHVjNWM4XHVjNWM5XHVjNWNhXHVjNWNjXHVjNWNlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTBdW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzE5MF1bbV1dPTQ4NjQwK20sRls0ODY0MCttXT14WzE5MF1bbV0pO2Zvcih4WzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1ZDRhMlx1ZDRh''@;'; put 'put ''M1x1ZDRhNFx1ZDRhNVx1ZDRhNlx1ZDRhN1x1ZDRhOFx1ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRhZVx1ZDRhZlx1ZDRiMFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRiNFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRiOVx1''@;'; put 'put ''ZDRiYVx1ZDRiYlx1ZDRiY1x1ZDRiZFx1ZDRiZVx1ZDRiZlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1ZDRjNFx1ZDRjNVx1ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRkNlx1ZDRkN1x1ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRkZFx1ZDRkZVx1ZDRlMFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRlNFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMVx1ZDRmMlx1''@;'; put 'put ''ZDRmM1x1ZDRmNFx1ZDRmNVx1ZDRmNlx1ZDRmN1x1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1YzVmZlx1YzYw''@;'; put 'put ''MFx1YzYwMVx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1YzY0NFx1''@;'; put 'put ''YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZhN1x1YzZh''@;'; put 'put ''OVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MV0ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMTkxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTFdW21dXT00ODg5NittLEZbNDg4OTYrbV09eFsxOTFdW21dKTtmb3IoeFsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZmVcdWQ0ZmZcdWQ1MDBcdWQ1''@;'; put 'put ''MDFcdWQ1MDJcdWQ1MDNcdWQ1MDVcdWQ1MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGRcdWQ1MGVcdWQ1MGZcdWQ1MTBcdWQ1MTFcdWQ1MTJcdWQ1MTNcdWQ1MTZcdWQ1MThcdWQ1MTlcdWQ1MWFcdWQ1MWJcdWQ1MWNcdWQ1MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWQ1MWVcdWQ1MWZcdWQ1MjBcdWQ1MjFcdWQ1MjJcdWQ1MjNcdWQ1MjRcdWQ1MjVcdWQ1MjZcdWQ1MjdcdWQ1MjhcdWQ1MjlcdWQ1MmFcdWQ1MmJcdWQ1MmNcdWQ1MmRcdWQ1MmVcdWQ1MmZcdWQ1MzBcdWQ1MzFcdWQ1MzJcdWQ1MzNcdWQ1MzRcdWQ1MzVcdWQ1MzZcdWQ1MzdcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MzhcdWQ1MzlcdWQ1M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDVcdWQ1NDZcdWQ1NDdcdWQ1NDhcdWQ1NDlcdWQ1NGFcdWQ1NGJcdWQ1NGVcdWQ1NTBcdWQ1NTJcdWQ1NTNcdWQ1NTRcdWQ1NTVc''@;'; put 'put ''dWQ1NTZcdWQ1NTdcdWQ1NWFcdWQ1NWJcdWQ1NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRcdWM3MDRcdWM3MDVcdWM3MDhcdWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3''@;'; put 'put ''MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVcdWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3NGRcdWM3NGZcdWM3NTFcdWM3NTJcdWM3NTNcdWM3NTRcdWM3NTVcdWM3NTZcdWM3NTdcdWM3NThcdWM3NWNcdWM3NjBcdWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVc''@;'; put 'put ''dWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZcdWM3OTdcdWM3OThcdWM3OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3''@;'; put 'put ''YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3ZWNcdWM4MDBcdWM4MDFcdWM4MDRcdWM4MDhcdWM4MGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTJdLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzE5Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkyXVttXV09NDkxNTIrbSxGWzQ5MTUyK21dPXhbMTkyXVttXSk7Zm9yKHhbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTY0XHVk''@;'; put 'put ''NTY2XHVkNTY3XHVkNTZhXHVkNTZjXHVkNTZlXHVkNTZmXHVkNTcwXHVkNTcxXHVkNTcyXHVkNTczXHVkNTc2XHVkNTc3XHVkNTc5XHVkNTdhXHVkNTdiXHVkNTdkXHVkNTdlXHVkNTdmXHVkNTgwXHVkNTgxXHVkNTgyXHVkNTgzXHVkNTg2XHVkNThhXHVkNThiXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVkNThjXHVkNThkXHVkNThlXHVkNThmXHVkNTkxXHVkNTkyXHVkNTkzXHVkNTk0XHVkNTk1XHVkNTk2XHVkNTk3XHVkNTk4XHVkNTk5XHVkNTlhXHVkNTliXHVkNTljXHVkNTlkXHVkNTllXHVkNTlmXHVkNWEwXHVkNWExXHVkNWEyXHVkNWEzXHVkNWE0XHVk''@;'; put 'put ''NWE2XHVkNWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWE4XHVkNWE5XHVkNWFhXHVkNWFiXHVkNWFjXHVkNWFkXHVkNWFlXHVkNWFmXHVkNWIwXHVkNWIxXHVkNWIyXHVkNWIzXHVkNWI0XHVkNWI1XHVkNWI2XHVkNWI3XHVkNWI4XHVkNWI5XHVkNWJhXHVkNWJi''@;'; put 'put ''XHVkNWJjXHVkNWJkXHVkNWJlXHVkNWJmXHVkNWMwXHVkNWMxXHVkNWMyXHVkNWMzXHVkNWM0XHVkNWM1XHVkNWM2XHVkNWM3XHVjODEwXHVjODExXHVjODEzXHVjODE1XHVjODE2XHVjODFjXHVjODFkXHVjODIwXHVjODI0XHVjODJjXHVjODJkXHVjODJmXHVjODMxXHVjODM4XHVjODNjXHVj''@;'; put 'put ''ODQwXHVjODQ4XHVjODQ5XHVjODRjXHVjODRkXHVjODU0XHVjODcwXHVjODcxXHVjODc0XHVjODc4XHVjODdhXHVjODgwXHVjODgxXHVjODgzXHVjODg1XHVjODg2XHVjODg3XHVjODhiXHVjODhjXHVjODhkXHVjODk0XHVjODlkXHVjODlmXHVjOGExXHVjOGE4XHVjOGJjXHVjOGJkXHVjOGM0''@;'; put 'put ''XHVjOGM4XHVjOGNjXHVjOGQ0XHVjOGQ1XHVjOGQ3XHVjOGQ5XHVjOGUwXHVjOGUxXHVjOGU0XHVjOGY1XHVjOGZjXHVjOGZkXHVjOTAwXHVjOTA0XHVjOTA1XHVjOTA2XHVjOTBjXHVjOTBkXHVjOTBmXHVjOTExXHVjOTE4XHVjOTJjXHVjOTM0XHVjOTUwXHVjOTUxXHVjOTU0XHVjOTU4XHVj''@;'; put 'put ''OTYwXHVjOTYxXHVjOTYzXHVjOTZjXHVjOTcwXHVjOTc0XHVjOTdjXHVjOTg4XHVjOTg5XHVjOThjXHVjOTkwXHVjOTk4XHVjOTk5XHVjOTliXHVjOTlkXHVjOWMwXHVjOWMxXHVjOWM0XHVjOWM3XHVjOWM4XHVjOWNhXHVjOWQwXHVjOWQxXHVjOWQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMTkzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5M11bbV1dPTQ5NDA4K20sRls0OTQwOCttXT14WzE5M11bbV0pO2Zvcih4WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVkNlx1ZDVkN1x1ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVlZlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1ZDVmNlx1ZDVmOFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVmZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1ZDYwY1x1''@;'; put 'put ''ZDYwZFx1ZDYwZVx1ZDYwZlx1ZDYxMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYxNlx1ZDYxN1x1ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYyOVx1ZDYy''@;'; put 'put ''YVx1ZDYyYlx1ZDYyY1x1ZDYyZVx1ZDYyZlx1ZDYzMFx1ZDYzMVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1ZDYzNlx1ZDYzN1x1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1''@;'; put 'put ''YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2Fi''@;'; put 'put ''Y1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1''@;'; put 'put ''Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzE5NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTRdW21dXT00OTY2NCttLEZbNDk2NjQrbV09eFsxOTRdW21dKTtmb3IoeFsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWQ2M2RcdWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdcdWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZcdWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWRcdWQ2NWVcdWQ2NWZcdWQ2''@;'; put 'put ''NjBcdWQ2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2NjJcdWQ2NjNcdWQ2NjRcdWQ2NjVcdWQ2NjZcdWQ2NjhcdWQ2NmFcdWQ2NmJcdWQ2NmNcdWQ2NmRcdWQ2NmVcdWQ2NmZcdWQ2NzJcdWQ2NzNcdWQ2NzVcdWQ2NzZcdWQ2NzdcdWQ2NzhcdWQ2NzlcdWQ2N2Fc''@;'; put 'put ''dWQ2N2JcdWQ2N2NcdWQ2N2RcdWQ2N2VcdWQ2N2ZcdWQ2ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODZcdWQ2ODdcdWQ2ODhcdWQ2ODlcdWQ2OGFcdWQ2OGJcdWQ2OGVcdWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTVcdWQ2''@;'; put 'put ''OTZcdWQ2OTdcdWQ2OThcdWQ2OTlcdWQ2OWFcdWQ2OWJcdWQ2OWNcdWQ2OWVcdWQ2YTBcdWQ2YTJcdWQ2YTNcdWQ2YTRcdWQ2YTVcdWQ2YTZcdWQ2YTdcdWQ2YTlcdWQ2YWFcdWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThc''@;'; put 'put ''dWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZcdWNjNjhcdWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNjYThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNjYjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNj''@;'; put 'put ''ZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNkMDlcdWNkMGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRcdWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBcdWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNc''@;'; put 'put ''dWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlcdWNkYjBcdWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNkZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNlMDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNl''@;'; put 'put ''MzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk1XVttXV09NDk5MjArbSxGWzQ5OTIwK21dPXhbMTk1XVttXSk7Zm9yKHhbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmFiXHVkNmFkXHVkNmFlXHVkNmFmXHVkNmIxXHVkNmIyXHVkNmIzXHVkNmI0XHVkNmI1XHVkNmI2XHVkNmI3XHVkNmI4XHVkNmJhXHVkNmJjXHVkNmJkXHVkNmJlXHVkNmJmXHVkNmMwXHVkNmMxXHVkNmMyXHVkNmMzXHVkNmM2XHVk''@;'; put 'put ''NmM3XHVkNmM5XHVkNmNhXHVkNmNiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmNkXHVkNmNlXHVkNmNmXHVkNmQwXHVkNmQyXHVkNmQzXHVkNmQ1XHVkNmQ2XHVkNmQ4XHVkNmRhXHVkNmRiXHVkNmRjXHVkNmRkXHVkNmRlXHVkNmRmXHVkNmUxXHVkNmUyXHVkNmUz''@;'; put 'put ''XHVkNmU1XHVkNmU2XHVkNmU3XHVkNmU5XHVkNmVhXHVkNmViXHVkNmVjXHVkNmVkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNmVlXHVkNmVmXHVkNmYxXHVkNmYyXHVkNmYzXHVkNmY0XHVkNmY2XHVkNmY3XHVkNmY4XHVkNmY5XHVkNmZhXHVkNmZiXHVkNmZlXHVk''@;'; put 'put ''NmZmXHVkNzAxXHVkNzAyXHVkNzAzXHVkNzA1XHVkNzA2XHVkNzA3XHVkNzA4XHVkNzA5XHVkNzBhXHVkNzBiXHVkNzBjXHVkNzBkXHVkNzBlXHVkNzBmXHVkNzEwXHVkNzEyXHVkNzEzXHVkNzE0XHVjZTU4XHVjZTU5XHVjZTVjXHVjZTVmXHVjZTYwXHVjZTYxXHVjZTY4XHVjZTY5XHVjZTZi''@;'; put 'put ''XHVjZTZkXHVjZTc0XHVjZTc1XHVjZTc4XHVjZTdjXHVjZTg0XHVjZTg1XHVjZTg3XHVjZTg5XHVjZTkwXHVjZTkxXHVjZTk0XHVjZTk4XHVjZWEwXHVjZWExXHVjZWEzXHVjZWE0XHVjZWE1XHVjZWFjXHVjZWFkXHVjZWMxXHVjZWU0XHVjZWU1XHVjZWU4XHVjZWViXHVjZWVjXHVjZWY0XHVj''@;'; put 'put ''ZWY1XHVjZWY3XHVjZWY4XHVjZWY5XHVjZjAwXHVjZjAxXHVjZjA0XHVjZjA4XHVjZjEwXHVjZjExXHVjZjEzXHVjZjE1XHVjZjFjXHVjZjIwXHVjZjI0XHVjZjJjXHVjZjJkXHVjZjJmXHVjZjMwXHVjZjMxXHVjZjM4XHVjZjU0XHVjZjU1XHVjZjU4XHVjZjVjXHVjZjY0XHVjZjY1XHVjZjY3''@;'; put 'put ''XHVjZjY5XHVjZjcwXHVjZjcxXHVjZjc0XHVjZjc4XHVjZjgwXHVjZjg1XHVjZjhjXHVjZmExXHVjZmE4XHVjZmIwXHVjZmM0XHVjZmUwXHVjZmUxXHVjZmU0XHVjZmU4XHVjZmYwXHVjZmYxXHVjZmYzXHVjZmY1XHVjZmZjXHVkMDAwXHVkMDA0XHVkMDExXHVkMDE4XHVkMDJkXHVkMDM0XHVk''@;'; put 'put ''MDM1XHVkMDM4XHVkMDNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Nl1bbV1dPTUwMTc2K20sRls1MDE3NittXT14WzE5Nl1bbV0pO2Zvcih4WzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDczMFx1''@;'; put 'put ''ZDczMVx1ZDczMlx1ZDczM1x1ZDczNlx1ZDczN1x1ZDczOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1ZDc0''@;'; put 'put ''ZFx1ZDc0ZVx1ZDc0Zlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YVx1ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1''@;'; put 'put ''ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NVx1ZDc3Nlx1ZDc3N1x1ZDc3OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1ZDA1''@;'; put 'put ''OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBkY1x1''@;'; put 'put ''ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1ZDE2''@;'; put 'put ''MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIzY1x1''@;'; put 'put ''ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTddW21dXT01MDQzMittLEZbNTA0MzIrbV09eFsxOTddW21dKTtmb3IoeFsxOThdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3OGRcdWQ3OGVcdWQ3OGZcdWQ3OTFcdWQ3OTJcdWQ3OTNcdWQ3OTRcdWQ3OTVcdWQ3OTZcdWQ3OTdcdWQ3OWFcdWQ3OWNcdWQ3OWVcdWQ3OWZcdWQ3YTBcdWQ3YTFcdWQ3YTJcdWQ3YTNc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQy''@;'; put 'put ''ODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQyYTBcdWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQyYmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBc''@;'; put 'put ''dWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRcdWQzMGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZcdWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQz''@;'; put 'put ''N2RcdWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQzOGZcdWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQzYThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNc''@;'; put 'put ''dWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRcdWQzZmZcdWQ0MDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk4XVttXV09NTA2ODgrbSxGWzUwNjg4K21dPXhbMTk4XVttXSk7Zm9y''@;'; put 'put ''KHhbMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDA4XHVkNDFkXHVk''@;'; put 'put ''NDQwXHVkNDQ0XHVkNDVjXHVkNDYwXHVkNDY0XHVkNDZkXHVkNDZmXHVkNDc4XHVkNDc5XHVkNDdjXHVkNDdmXHVkNDgwXHVkNDgyXHVkNDg4XHVkNDg5XHVkNDhiXHVkNDhkXHVkNDk0XHVkNGE5XHVkNGNjXHVkNGQwXHVkNGQ0XHVkNGRjXHVkNGRmXHVkNGU4XHVkNGVjXHVkNGYwXHVkNGY4''@;'; put 'put ''XHVkNGZiXHVkNGZkXHVkNTA0XHVkNTA4XHVkNTBjXHVkNTE0XHVkNTE1XHVkNTE3XHVkNTNjXHVkNTNkXHVkNTQwXHVkNTQ0XHVkNTRjXHVkNTRkXHVkNTRmXHVkNTUxXHVkNTU4XHVkNTU5XHVkNTVjXHVkNTYwXHVkNTY1XHVkNTY4XHVkNTY5XHVkNTZiXHVkNTZkXHVkNTc0XHVkNTc1XHVk''@;'; put 'put ''NTc4XHVkNTdjXHVkNTg0XHVkNTg1XHVkNTg3XHVkNTg4XHVkNTg5XHVkNTkwXHVkNWE1XHVkNWM4XHVkNWM5XHVkNWNjXHVkNWQwXHVkNWQyXHVkNWQ4XHVkNWQ5XHVkNWRiXHVkNWRkXHVkNWU0XHVkNWU1XHVkNWU4XHVkNWVjXHVkNWY0XHVkNWY1XHVkNWY3XHVkNWY5XHVkNjAwXHVkNjAx''@;'; put 'put ''XHVkNjA0XHVkNjA4XHVkNjEwXHVkNjExXHVkNjEzXHVkNjE0XHVkNjE1XHVkNjFjXHVkNjIwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OV1bbV1dPTUwOTQ0K20sRls1MDk0NCttXT14''@;'; put 'put ''WzE5OV1bbV0pO2Zvcih4WzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5''@;'; put 'put ''ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1''@;'; put 'put ''ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3''@;'; put 'put ''NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDBdW21dXT01MTIwMCtt''@;'; put 'put ''LEZbNTEyMDArbV09eFsyMDBdW21dKTtmb3IoeFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTViYjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdhM2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThjYzhcdThk''@;'; put 'put ''Y2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2ZcdTZmOTdc''@;'; put 'put ''dTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYxYmVcdTYy''@;'; put 'put ''MjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJcdTlmOTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAy''@;'; put 'put ''XVttXV09NTE3MTIrbSxGWzUxNzEyK21dPXhbMjAyXVttXSk7Zm9yKHhbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzIzXHU1Y2FjXHU3NTMyXHU4MGRiXHU5MjQwXHU5NTk4XHU1MjViXHU1ODA4XHU1OWRjXHU1Y2ExXHU1ZDE3XHU1ZWI3XHU1ZjNhXHU1ZjRhXHU2MTc3XHU2YzVmXHU3NTdhXHU3NTg2XHU3Y2UwXHU3ZDczXHU3ZGIxXHU3ZjhjXHU4MTU0XHU4''@;'; put 'put ''MjIxXHU4NTkxXHU4OTQxXHU4YjFiXHU5MmZjXHU5NjRkXHU5YzQ3XHU0ZWNiXHU0ZWY3XHU1MDBiXHU1MWYxXHU1ODRmXHU2MTM3XHU2MTNlXHU2MTY4XHU2NTM5XHU2OWVhXHU2ZjExXHU3NWE1XHU3Njg2XHU3NmQ2XHU3Yjg3XHU4MmE1XHU4NGNiXHVmOTAwXHU5M2E3XHU5NThiXHU1NTgw''@;'; put 'put ''XHU1YmEyXHU1NzUxXHVmOTAxXHU3Y2IzXHU3ZmI5XHU5MWI1XHU1MDI4XHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MzZlXHU2NGRhXHU2NGU3XHU2ZTIwXHU3MGFjXHU3OTViXHU4ZGRkXHU4ZTFlXHVmOTAyXHU5MDdkXHU5MjQ1XHU5MmY4XHU0ZTdlXHU0ZWY2XHU1MDY1XHU1ZGZlXHU1''@;'; put 'put ''ZWZhXHU2MTA2XHU2OTU3XHU4MTcxXHU4NjU0XHU4ZTQ3XHU5Mzc1XHU5YTJiXHU0ZTVlXHU1MDkxXHU2NzcwXHU2ODQwXHU1MTA5XHU1MjhkXHU1MjkyXHU2YWEyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDNdW21dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihhZVt4WzIwM11bbV1dPTUxOTY4K20sRls1MTk2OCttXT14WzIwM11bbV0pO2Zvcih4WzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1''@;'; put 'put ''N2U2ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4''@;'; put 'put ''M1x1NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1''@;'; put 'put ''OGI2Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA0XVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDRdW21dXT01MjIyNCttLEZbNTIyMjQrbV09eFsyMDRdW21dKTtmb3IoeFsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4Y2VcdTdhM2RcdTdjZmJcdTdlNmJcdTdlN2NcdThhMDhcdThhYTFcdThjM2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFc''@;'; put 'put ''dTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNcdTc2OTBcdTc3N2VcdTdhM2ZcdTdmOTRcdTgwMDNcdTgwYTFcdTgxOGZcdTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5''@;'; put 'put ''MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlkNjBcdTU2ZjBcdTU3NjRcdTVkMTFcdTY2MDZcdTY4YjFcdTY4Y2RcdTZlZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJc''@;'; put 'put ''dTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNcdThjYTJcdTk3OGZcdTRlMzJcdTViZTFcdTYyMDhcdTY3OWNcdTc0ZGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDVdLmxlbmd0aDsrK20pNjU1''@;'; put 'put ''MzMhPT14WzIwNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA1XVttXV09NTI0ODArbSxGWzUyNDgwK21dPXhbMjA1XVttXSk7Zm9yKHhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWQxXHU4M2QzXHU4YTg3XHU4YWIyXHU4ZGU4XHU5MDRlXHU5MzRiXHU5ODQ2XHU1ZWQzXHU2OWU4XHU4NWZmXHU5MGVkXHVmOTA1XHU1MWEwXHU1Yjk4XHU1YmVjXHU2MTYz''@;'; put 'put ''XHU2OGZhXHU2YjNlXHU3MDRjXHU3NDJmXHU3NGQ4XHU3YmExXHU3ZjUwXHU4M2M1XHU4OWMwXHU4Y2FiXHU5NWRjXHU5OTI4XHU1MjJlXHU2MDVkXHU2MmVjXHU5MDAyXHU0ZjhhXHU1MTQ5XHU1MzIxXHU1OGQ5XHU1ZWUzXHU2NmUwXHU2ZDM4XHU3MDlhXHU3MmMyXHU3M2Q2XHU3YjUwXHU4''@;'; put 'put ''MGYxXHU5NDViXHU1MzY2XHU2MzliXHU3ZjZiXHU0ZTU2XHU1MDgwXHU1ODRhXHU1OGRlXHU2MDJhXHU2MTI3XHU2MmQwXHU2OWQwXHU5YjQxXHU1YjhmXHU3ZDE4XHU4MGIxXHU4ZjVmXHU0ZWE0XHU1MGQxXHU1NGFjXHU1NWFjXHU1YjBjXHU1ZGEwXHU1ZGU3XHU2NTJhXHU2NTRlXHU2ODIx''@;'; put 'put ''XHU2YTRiXHU3MmUxXHU3NjhlXHU3N2VmXHU3ZDVlXHU3ZmY5XHU4MWEwXHU4NTRlXHU4NmRmXHU4ZjAzXHU4ZjRlXHU5MGNhXHU5OTAzXHU5YTU1XHU5YmFiXHU0ZTE4XHU0ZTQ1XHU0ZTVkXHU0ZWM3XHU0ZmYxXHU1MTc3XHU1MmZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA2XS5s''@;'; put 'put ''ZW5ndGg7KyttKTY1NTMzIT09eFsyMDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNl1bbV1dPTUyNzM2K20sRls1MjczNittXT14WzIwNl1bbV0pO2Zvcih4WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1Njdl''@;'; put 'put ''OVx1NjljYlx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1''@;'; put 'put ''OTlkMlx1OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAy''@;'; put 'put ''Nlx1NTIzOFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLG09''@;'; put 'put ''MDttIT14WzIwN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDddW21dXT01Mjk5MittLEZbNTI5OTIrbV09eFsyMDddW21dKTtmb3IoeFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliM2NcdWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0''@;'; put 'put ''NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUxNGJcdTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2Vc''@;'; put 'put ''dTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVcdTc0MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdk''@;'; put 'put ''MWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3ZmFcdTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTNcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxtPTA7bSE9eFsyMDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA4XVttXV09NTMyNDgrbSxGWzUzMjQ4K21dPXhbMjA4XVttXSk7Zm9yKHhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzFlXHU2NzFmXHU2NzVlXHU2OGNiXHU2OGM0XHU2YTVmXHU2YjNhXHU2YzIzXHU2YzdkXHU2YzgyXHU2''@;'; put 'put ''ZGM3XHU3Mzk4XHU3NDI2XHU3NDJhXHU3NDgyXHU3NGEzXHU3NTc4XHU3NTdmXHU3ODgxXHU3OGVmXHU3OTQxXHU3OTQ3XHU3OTQ4XHU3OTdhXHU3Yjk1XHU3ZDAwXHU3ZGJhXHU3Zjg4XHU4MDA2XHU4MDJkXHU4MDhjXHU4YTE4XHU4YjRmXHU4YzQ4XHU4ZDc3XHU5MzIxXHU5MzI0XHU5OGUy''@;'; put 'put ''XHU5OTUxXHU5YTBlXHU5YTBmXHU5YTY1XHU5ZTkyXHU3ZGNhXHU0Zjc2XHU1NDA5XHU2MmVlXHU2ODU0XHU5MWQxXHU1NWFiXHU1MTNhXHVmOTBiXHVmOTBjXHU1YTFjXHU2MWU2XHVmOTBkXHU2MmNmXHU2MmZmXHVmOTBlXHVmOTBmXHVmOTEwXHVmOTExXHVmOTEyXHVmOTEzXHU5MGEzXHVm''@;'; put 'put ''OTE0XHVmOTE1XHVmOTE2XHVmOTE3XHVmOTE4XHU4YWZlXHVmOTE5XHVmOTFhXHVmOTFiXHVmOTFjXHU2Njk2XHVmOTFkXHU3MTU2XHVmOTFlXHVmOTFmXHU5NmUzXHVmOTIwXHU2MzRmXHU2MzdhXHU1MzU3XHVmOTIxXHU2NzhmXHU2OTYwXHU2ZTczXHVmOTIyXHU3NTM3XHVmOTIzXHVmOTI0''@;'; put 'put ''XHVmOTI1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOV1bbV1dPTUzNTA0K20sRls1MzUwNCttXT14WzIwOV1bbV0pO2Zvcih4WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1''@;'; put 'put ''ZjkyYVx1ZjkyYlx1ZjkyY1x1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1Zjkz''@;'; put 'put ''Mlx1NzQ1OVx1ZjkzM1x1ZjkzNFx1ZjkzNVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1ZjkzOVx1ZjkzYVx1ZjkzYlx1ZjkzY1x1ZjkzZFx1ZjkzZVx1ZjkzZlx1Zjk0MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1''@;'; put 'put ''ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMz''@;'; put 'put ''Zlx1NmViYVx1NTkxYVx1ODMzNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTBdW21dXT01Mzc2MCttLEZbNTM3NjArbV09eFsyMTBdW21dKTtmb3IoeFsyMTFdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4Yzdc''@;'; put 'put ''dTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJcdTkzNWJcdTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZm''@;'; put 'put ''YjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkwNWRcdTU1MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVc''@;'; put 'put ''dTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJcdTViODVcdTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVm''@;'; put 'put ''OTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjExXVttXV09NTQwMTYrbSxGWzU0MDE2K21dPXhbMjExXVttXSk7Zm9yKHhbMjEyXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OGY5XHU2YWMyXHU2ZGQ4XHU2ZTIx''@;'; put 'put ''XHU2ZWQ0XHU2ZmU0XHU3MWZlXHU3NmRjXHU3Nzc5XHU3OWIxXHU3YTNiXHU4NDA0XHU4OWE5XHU4Y2VkXHU4ZGYzXHU4ZTQ4XHU5MDAzXHU5MDE0XHU5MDUzXHU5MGZkXHU5MzRkXHU5Njc2XHU5N2RjXHU2YmQyXHU3MDA2XHU3MjU4XHU3MmEyXHU3MzY4XHU3NzYzXHU3OWJmXHU3YmU0XHU3''@;'; put 'put ''ZTliXHU4YjgwXHU1OGE5XHU2MGM3XHU2NTY2XHU2NWZkXHU2NmJlXHU2YzhjXHU3MTFlXHU3MWM5XHU4YzVhXHU5ODEzXHU0ZTZkXHU3YTgxXHU0ZWRkXHU1MWFjXHU1MWNkXHU1MmQ1XHU1NDBjXHU2MWE3XHU2NzcxXHU2ODUwXHU2OGRmXHU2ZDFlXHU2ZjdjXHU3NWJjXHU3N2IzXHU3YWU1''@;'; put 'put ''XHU4MGY0XHU4NDYzXHU5Mjg1XHU1MTVjXHU2NTk3XHU2NzVjXHU2NzkzXHU3NWQ4XHU3YWM3XHU4MzczXHVmOTVhXHU4YzQ2XHU5MDE3XHU5ODJkXHU1YzZmXHU4MWMwXHU4MjlhXHU5MDQxXHU5MDZmXHU5MjBkXHU1Zjk3XHU1ZDlkXHU2YTU5XHU3MWM4XHU3NjdiXHU3YjQ5XHU4NWU0XHU4''@;'; put 'put ''YjA0XHU5MTI3XHU5YTMwXHU1NTg3XHU2MWY2XHVmOTViXHU3NjY5XHU3Zjg1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMl1bbV1dPTU0MjcyK20sRls1NDI3MittXT14WzIxMl1bbV0p''@;'; put 'put ''O2Zvcih4WzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdi''@;'; put 'put ''YVx1ODhmOFx1OTA4Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1''@;'; put 'put ''N2M0M1x1N2U5Y1x1ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4''@;'; put 'put ''MVx1NmExMVx1N2NhZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1''@;'; put 'put ''NjZjNlx1NmI3N1x1NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTNdW21dXT01NDUyOCttLEZbNTQ1Mjgr''@;'; put 'put ''bV09eFsyMTNdW21dKTtmb3IoeFsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTcxNDlcdTc0ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZcdTkwMjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNc''@;'; put 'put ''dTczYjJcdTdiMmRcdTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTkyMzRcdTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkxYjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2''@;'; put 'put ''NWNcdThkZWZcdThmMDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVcdTc4OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFc''@;'; put 'put ''dThjZjRcdTk2ZjdcdTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1OTlcdTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE0XVttXV09NTQ3''@;'; put 'put ''ODQrbSxGWzU0Nzg0K21dPXhbMjE0XVttXSk7Zm9yKHhbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU5MDdjXHU5YjI3XHU5ZjhkXHU1OGQ4XHU1YTQxXHU1YzYyXHU2YTEzXHU2ZGRhXHU2ZjBmXHU3NjNiXHU3ZDJmXHU3ZTM3XHU4NTFlXHU4OTM4XHU5M2U0XHU5NjRiXHU1Mjg5XHU2NWQyXHU2N2YzXHU2OWI0XHU2ZDQxXHU2ZTljXHU3MDBmXHU3NDA5XHU3NDYw''@;'; put 'put ''XHU3NTU5XHU3NjI0XHU3ODZiXHU4YjJjXHU5ODVlXHU1MTZkXHU2MjJlXHU5Njc4XHU0Zjk2XHU1MDJiXHU1ZDE5XHU2ZGVhXHU3ZGI4XHU4ZjJhXHU1ZjhiXHU2MTQ0XHU2ODE3XHVmOTYxXHU5Njg2XHU1MmQyXHU4MDhiXHU1MWRjXHU1MWNjXHU2OTVlXHU3YTFjXHU3ZGJlXHU4M2YxXHU5''@;'; put 'put ''Njc1XHU0ZmRhXHU1MjI5XHU1Mzk4XHU1NDBmXHU1NTBlXHU1YzY1XHU2MGE3XHU2NzRlXHU2OGE4XHU2ZDZjXHU3MjgxXHU3MmY4XHU3NDA2XHU3NDgzXHVmOTYyXHU3NWUyXHU3YzZjXHU3Zjc5XHU3ZmI4XHU4Mzg5XHU4OGNmXHU4OGUxXHU5MWNjXHU5MWQwXHU5NmUyXHU5YmM5XHU1NDFk''@;'; put 'put ''XHU2ZjdlXHU3MWQwXHU3NDk4XHU4NWZhXHU4ZWFhXHU5NmEzXHU5YzU3XHU5ZTlmXHU2Nzk3XHU2ZGNiXHU3NDMzXHU4MWU4XHU5NzE2XHU3ODJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4''@;'; put 'put ''WzIxNV1bbV1dPTU1MDQwK20sRls1NTA0MCttXT14WzIxNV1bbV0pO2Zvcih4WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2''@;'; put 'put ''Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1''@;'; put 'put ''ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZm''@;'; put 'put ''Mlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE2XVttXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoYWVbeFsyMTZdW21dXT01NTI5NittLEZbNTUyOTYrbV09eFsyMTZdW21dKTtmb3IoeFsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRcdTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5''@;'; put 'put ''YzZcdTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcyNjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlc''@;'; put 'put ''dTZiN2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdcdTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdcdTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZi''@;'; put 'put ''Y2JcdTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0M2JcdTU1NGZcdTY1ODdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIx''@;'; put 'put ''N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE3XVttXV09NTU1NTIrbSxGWzU1NTUyK21dPXhbMjE3XVttXSk7Zm9yKHhbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Yzc2XHU3ZDBhXHU3ZDBiXHU4MDVlXHU4NjhhXHU5NTgwXHU5NmVmXHU1MmZmXHU2Yzk1XHU3MjY5XHU1NDczXHU1YTlhXHU1YzNlXHU1ZDRiXHU1ZjRjXHU1ZmFlXHU2NzJhXHU2OGI2XHU2''@;'; put 'put ''OTYzXHU2ZTNjXHU2ZTQ0XHU3NzA5XHU3YzczXHU3ZjhlXHU4NTg3XHU4YjBlXHU4ZmY3XHU5NzYxXHU5ZWY0XHU1Y2I3XHU2MGI2XHU2MTBkXHU2MWFiXHU2NTRmXHU2NWZiXHU2NWZjXHU2YzExXHU2Y2VmXHU3MzlmXHU3M2M5XHU3ZGUxXHU5NTk0XHU1YmM2XHU4NzFjXHU4YjEwXHU1MjVk''@;'; put 'put ''XHU1MzVhXHU2MmNkXHU2NDBmXHU2NGIyXHU2NzM0XHU2YTM4XHU2Y2NhXHU3M2MwXHU3NDllXHU3Yjk0XHU3Yzk1XHU3ZTFiXHU4MThhXHU4MjM2XHU4NTg0XHU4ZmViXHU5NmY5XHU5OWMxXHU0ZjM0XHU1MzRhXHU1M2NkXHU1M2RiXHU2MmNjXHU2NDJjXHU2NTAwXHU2NTkxXHU2OWMzXHU2''@;'; put 'put ''Y2VlXHU2ZjU4XHU3M2VkXHU3NTU0XHU3NjIyXHU3NmU0XHU3NmZjXHU3OGQwXHU3OGZiXHU3OTJjXHU3ZDQ2XHU4MjJjXHU4N2UwXHU4ZmQ0XHU5ODEyXHU5OGVmXHU1MmMzXHU2MmQ0XHU2NGE1XHU2ZTI0XHU2ZjUxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE4XS5sZW5ndGg7Kytt''@;'; put 'put ''KTY1NTMzIT09eFsyMThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOF1bbV1dPTU1ODA4K20sRls1NTgwOCttXT14WzIxOF1bbV0pO2Zvcih4WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1''@;'; put 'put ''NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzEx''@;'; put 'put ''OVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1''@;'; put 'put ''OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIx''@;'; put 'put ''OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTldW21dXT01NjA2NCttLEZbNTYwNjQrbV09eFsyMTldW21dKTtmb3IoeFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4YTdcdTg2MTdcdTk1ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThiOGFcdThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlc''@;'; put 'put ''dTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThmMjdcdTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFcdTViZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTcz''@;'; put 'put ''ZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgzMmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThmM2JcdTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlc''@;'; put 'put ''dTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRlZDhcdTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZcdTU0OTBcdTU3ZTBcdTU5MmJcdTVhNjZcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxtPTA7bSE9eFsyMjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIwXVttXV09NTYzMjArbSxGWzU2MzIwK21dPXhbMjIwXVttXSk7Zm9yKHhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YjVhXHU1Yjc1XHU1YmNjXHU1ZTljXHVmOTY2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2ZDZlXHU2ZWE1XHU3MjM2XHU3YjI2''@;'; put 'put ''XHU3YzNmXHU3ZjM2XHU4MTUwXHU4MTUxXHU4MTlhXHU4MjQwXHU4Mjk5XHU4M2E5XHU4YTAzXHU4Y2EwXHU4Y2U2XHU4Y2ZiXHU4ZDc0XHU4ZGJhXHU5MGU4XHU5MWRjXHU5NjFjXHU5NjQ0XHU5OWQ5XHU5Y2U3XHU1MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OGIzXHU1OTU0XHU1OTZlXHU1''@;'; put 'put ''ZmZmXHU2MWE0XHU2MjZlXHU2NjEwXHU2YzdlXHU3MTFhXHU3NmM2XHU3Yzg5XHU3Y2RlXHU3ZDFiXHU4MmFjXHU4Y2MxXHU5NmYwXHVmOTY3XHU0ZjViXHU1ZjE3XHU1ZjdmXHU2MmMyXHU1ZDI5XHU2NzBiXHU2OGRhXHU3ODdjXHU3ZTQzXHU5ZDZjXHU0ZTE1XHU1MDk5XHU1MzE1XHU1MzJh''@;'; put 'put ''XHU1MzUxXHU1OTgzXHU1YTYyXHU1ZTg3XHU2MGIyXHU2MThhXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OWE3XHU2YmQ0XHU2YmQ2XHU2YmQ3XHU2YmQ4XHU2Y2I4XHVmOTY4XHU3NDM1XHU3NWZhXHU3ODEyXHU3ODkxXHU3OWQ1XHU3OWQ4XHU3YzgzXHU3ZGNiXHU3ZmUxXHU4MGE1XHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMV1bbV1dPTU2NTc2K20sRls1NjU3NittXT14WzIyMV1bbV0pO2Zvcih4WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1''@;'; put 'put ''ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1''@;'; put 'put ''NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAw''@;'; put 'put ''OVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1''@;'; put 'put ''NjcxNFx1Zjk2YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjJdW21dXT01NjgzMittLEZbNTY4MzIrbV09eFsyMjJdW21dKTtmb3IoeFsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1''@;'; put 'put ''OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRlMDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdcdTgyOWZcdTg1MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFc''@;'; put 'put ''dTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFcdTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcyYzBcdTc2ZjhcdTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThj''@;'; put 'put ''ZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdiMTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZcdTVlYjZcdTVmOTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVc''@;'; put 'put ''dTdiNmVcdTdkNmVcdTdkZDZcdTdmNzJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIzXVttXV09NTcwODgrbSxGWzU3MDg4K21dPXhbMjIzXVttXSk7Zm9yKHhbMjI0XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MGU1XHU4MjEyXHU4NWFmXHU4OTdmXHU4YTkzXHU5''@;'; put 'put ''MDFkXHU5MmU0XHU5ZWNkXHU5ZjIwXHU1OTE1XHU1OTZkXHU1ZTJkXHU2MGRjXHU2NjE0XHU2NjczXHU2NzkwXHU2YzUwXHU2ZGM1XHU2ZjVmXHU3N2YzXHU3OGE5XHU4NGM2XHU5MWNiXHU5MzJiXHU0ZWQ5XHU1MGNhXHU1MTQ4XHU1NTg0XHU1YjBiXHU1YmEzXHU2MjQ3XHU2NTdlXHU2NWNi''@;'; put 'put ''XHU2ZTMyXHU3MTdkXHU3NDAxXHU3NDQ0XHU3NDg3XHU3NGJmXHU3NjZjXHU3OWFhXHU3ZGRhXHU3ZTU1XHU3ZmE4XHU4MTdhXHU4MWIzXHU4MjM5XHU4NjFhXHU4N2VjXHU4YTc1XHU4ZGUzXHU5MDc4XHU5MjkxXHU5NDI1XHU5OTRkXHU5YmFlXHU1MzY4XHU1YzUxXHU2OTU0XHU2Y2M0XHU2''@;'; put 'put ''ZDI5XHU2ZTJiXHU4MjBjXHU4NTliXHU4OTNiXHU4YTJkXHU4YWFhXHU5NmVhXHU5ZjY3XHU1MjYxXHU2NmI5XHU2YmIyXHU3ZTk2XHU4N2ZlXHU4ZDBkXHU5NTgzXHU5NjVkXHU2NTFkXHU2ZDg5XHU3MWVlXHVmOTZlXHU1N2NlXHU1OWQzXHU1YmFjXHU2MDI3XHU2MGZhXHU2MjEwXHU2NjFm''@;'; put 'put ''XHU2NjVmXHU3MzI5XHU3M2Y5XHU3NmRiXHU3NzAxXHU3YjZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0pO2Zvcih4WzIy''@;'; put 'put ''NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1''@;'; put 'put ''OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBh''@;'; put 'put ''NFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1''@;'; put 'put ''OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZk''@;'; put 'put ''YVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDArbV09eFsyMjVd''@;'; put 'put ''W21dKTtmb3IoeFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMGRc''@;'; put 'put ''dTYyNGJcdTYzODhcdTY0MWNcdTY1MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZkMTlcdTZmMzFcdTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0''@;'; put 'put ''OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNcdTkxNmNcdTkyOTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFc''@;'; put 'put ''dTcxOWZcdTc0MjFcdTc0YjlcdTgwODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYwNDJcdTY1ZWNcdTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThh''@;'; put 'put ''YzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVcdTVkMDdcdTVkMjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4NTYrbSxGWzU3''@;'; put 'put ''ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU1ZDY5XHU3NDVmXHU4MTlkXHU4NzY4XHU2ZmQ1XHU2MmZlXHU3ZmQyXHU4OTM2XHU4OTcyXHU0ZTFlXHU0ZTU4XHU1MGU3XHU1MmRkXHU1MzQ3XHU2MjdmXHU2NjA3XHU3ZTY5XHU4ODA1XHU5NjVlXHU0ZjhkXHU1MzE5XHU1NjM2XHU1OWNiXHU1YWE0XHU1YzM4XHU1YzRlXHU1''@;'; put 'put ''YzRkXHU1ZTAyXHU1ZjExXHU2MDQzXHU2NWJkXHU2NjJmXHU2NjQyXHU2N2JlXHU2N2Y0XHU3MzFjXHU3N2UyXHU3OTNhXHU3ZmM1XHU4NDk0XHU4NGNkXHU4OTk2XHU4YTY2XHU4YTY5XHU4YWUxXHU4YzU1XHU4YzdhXHU1N2Y0XHU1YmQ0XHU1ZjBmXHU2MDZmXHU2MmVkXHU2OTBkXHU2Yjk2''@;'; put 'put ''XHU2ZTVjXHU3MTg0XHU3YmQyXHU4NzU1XHU4YjU4XHU4ZWZlXHU5OGRmXHU5OGZlXHU0ZjM4XHU0ZjgxXHU0ZmUxXHU1NDdiXHU1YTIwXHU1YmI4XHU2MTNjXHU2NWIwXHU2NjY4XHU3MWZjXHU3NTMzXHU3OTVlXHU3ZDMzXHU4MTRlXHU4MWUzXHU4Mzk4XHU4NWFhXHU4NWNlXHU4NzAzXHU4''@;'; put 'put ''YTBhXHU4ZWFiXHU4ZjliXHVmOTcxXHU4ZmM1XHU1OTMxXHU1YmE0XHU1YmU2XHU2MDg5XHU1YmU5XHU1YzBiXHU1ZmMzXHU2YzgxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyN11bbV1d''@;'; put 'put ''PTU4MTEyK20sRls1ODExMittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3Mlx1NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1''@;'; put 'put ''OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1''@;'; put 'put ''NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1''@;'; put 'put ''NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''YWVbeFsyMjhdW21dXT01ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRcdTgyZTVcdTg0NmZcdTg0YmJc''@;'; put 'put ''dTg1ZTVcdThlOGRcdWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdmOGFcdWY5N2NcdTg5NDRcdWY5''@;'; put 'put ''N2RcdThiOTNcdTkxYzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlcdThhMDBcdThhZmFcdTViN2Nc''@;'; put 'put ''dTg2MTZcdTRmZmFcdTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOV1bbV0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKGFlW3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOTgzXHU2YjVmXHU2YzVkXHVmOTg0XHU3NGI1XHU3OTE2XHVmOTg1XHU4MjA3XHU4MjQ1XHU4MzM5XHU4ZjNmXHU4ZjVkXHVmOTg2XHU5OTE4XHVmOTg3XHVmOTg4XHVmOTg5XHU0ZWE2XHVmOThhXHU1N2Rm''@;'; put 'put ''XHU1Zjc5XHU2NjEzXHVmOThiXHVmOThjXHU3NWFiXHU3ZTc5XHU4YjZmXHVmOThkXHU5MDA2XHU5YTViXHU1NmE1XHU1ODI3XHU1OWY4XHU1YTFmXHU1YmI0XHVmOThlXHU1ZWY2XHVmOThmXHVmOTkwXHU2MzUwXHU2MzNiXHVmOTkxXHU2OTNkXHU2Yzg3XHU2Y2JmXHU2ZDhlXHU2ZDkzXHU2''@;'; put 'put ''ZGY1XHU2ZjE0XHVmOTkyXHU3MGRmXHU3MTM2XHU3MTU5XHVmOTkzXHU3MWMzXHU3MWQ1XHVmOTk0XHU3ODRmXHU3ODZmXHVmOTk1XHU3Yjc1XHU3ZGUzXHVmOTk2XHU3ZTJmXHVmOTk3XHU4ODRkXHU4ZWRmXHVmOTk4XHVmOTk5XHVmOTlhXHU5MjViXHVmOTliXHU5Y2Y2XHVmOTljXHVmOTlk''@;'; put 'put ''XHVmOTllXHU2MDg1XHU2ZDg1XHVmOTlmXHU3MWIxXHVmOWEwXHVmOWExXHU5NWIxXHU1M2FkXHVmOWEyXHVmOWEzXHVmOWE0XHU2N2QzXHVmOWE1XHU3MDhlXHU3MTMwXHU3NDMwXHU4Mjc2XHU4MmQyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09''@;'; put 'put ''eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1bbV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4''@;'; put 'put ''ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1''@;'; put 'put ''OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5''@;'; put 'put ''NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMV0ubGVuZ3Ro''@;'; put 'put ''OysrbSk2NTUzMyE9PXhbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkxMzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThhYTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTczNDRcdTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2''@;'; put 'put ''MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFcdTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlcdTViOGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNc''@;'; put 'put ''dTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTczOGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5MTZcdTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5''@;'; put 'put ''YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNcdWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRcdWY5YzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9''@;'; put 'put ''eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTg4XHU3YWFmXHU3ZTQ3XHU3ZTVlXHU4MDAwXHU4MTcwXHVmOWMyXHU4N2VmXHU4OTgxXHU4YjIwXHU5MDU5XHVmOWMzXHU5MDgwXHU5''@;'; put 'put ''OTUyXHU2MTdlXHU2YjMyXHU2ZDc0XHU3ZTFmXHU4OTI1XHU4ZmIxXHU0ZmQxXHU1MGFkXHU1MTk3XHU1MmM3XHU1N2M3XHU1ODg5XHU1YmI5XHU1ZWI4XHU2MTQyXHU2OTk1XHU2ZDhjXHU2ZTY3XHU2ZWI2XHU3MTk0XHU3NDYyXHU3NTI4XHU3NTJjXHU4MDczXHU4MzM4XHU4NGM5XHU4ZTBh''@;'; put 'put ''XHU5Mzk0XHU5M2RlXHVmOWM0XHU0ZThlXHU0ZjUxXHU1MDc2XHU1MTJhXHU1M2M4XHU1M2NiXHU1M2YzXHU1Yjg3XHU1YmQzXHU1YzI0XHU2MTFhXHU2MTgyXHU2NWY0XHU3MjViXHU3Mzk3XHU3NDQwXHU3NmMyXHU3OTUwXHU3OTkxXHU3OWI5XHU3ZDA2XHU3ZmJkXHU4MjhiXHU4NWQ1XHU4''@;'; put 'put ''NjVlXHU4ZmMyXHU5MDQ3XHU5MGY1XHU5MWVhXHU5Njg1XHU5NmU4XHU5NmU5XHU1MmQ2XHU1ZjY3XHU2NWVkXHU2NjMxXHU2ODJmXHU3MTVjXHU3YTM2XHU5MGMxXHU5ODBhXHU0ZTkxXHVmOWM1XHU2YTUyXHU2YjllXHU2ZjkwXHU3MTg5XHU4MDE4XHU4MmI4XHU4NTUzXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksbT0wO20hPXhbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1''@;'; put 'put ''NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1''@;'; put 'put ''ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1''@;'; put 'put ''NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1Zjlj''@;'; put 'put ''Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2Vc''@;'; put 'put ''dWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkwM2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVcdWY5ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVj''@;'; put 'put ''MzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlcdWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcwMWNcdTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlc''@;'; put 'put ''dTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgxYmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBcdTViOWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3''@;'; put 'put ''ZmJcdTg4NjNcdThhYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM1XVttXV09NjAxNjArbSxGWzYwMTYwK21dPXhbMjM1XVttXSk7Zm9yKHhbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjcwXHU5MWFiXHU0ZThjXHU0ZWU1XHU0ZjBhXHVmOWRkXHVmOWRl''@;'; put 'put ''XHU1OTM3XHU1OWU4XHVmOWRmXHU1ZGYyXHU1ZjFiXHU1ZjViXHU2MDIxXHVmOWUwXHVmOWUxXHVmOWUyXHVmOWUzXHU3MjNlXHU3M2U1XHVmOWU0XHU3NTcwXHU3NWNkXHVmOWU1XHU3OWZiXHVmOWU2XHU4MDBjXHU4MDMzXHU4MDg0XHU4MmUxXHU4MzUxXHVmOWU3XHVmOWU4XHU4Y2JkXHU4''@;'; put 'put ''Y2IzXHU5MDg3XHVmOWU5XHVmOWVhXHU5OGY0XHU5OTBjXHVmOWViXHVmOWVjXHU3MDM3XHU3NmNhXHU3ZmNhXHU3ZmNjXHU3ZmZjXHU4YjFhXHU0ZWJhXHU0ZWMxXHU1MjAzXHU1MzcwXHVmOWVkXHU1NGJkXHU1NmUwXHU1OWZiXHU1YmM1XHU1ZjE1XHU1ZmNkXHU2ZTZlXHVmOWVlXHVmOWVm''@;'; put 'put ''XHU3ZDZhXHU4MzM1XHVmOWYwXHU4NjkzXHU4YThkXHVmOWYxXHU5NzZkXHU5Nzc3XHVmOWYyXHVmOWYzXHU0ZTAwXHU0ZjVhXHU0ZjdlXHU1OGY5XHU2NWU1XHU2ZWEyXHU5MDM4XHU5M2IwXHU5OWI5XHU0ZWZiXHU1OGVjXHU1OThhXHU1OWQ5XHU2MDQxXHVmOWY0XHVmOWY1XHU3YTE0XHVm''@;'; put 'put ''OWY2XHU4MzRmXHU4Y2MzXHU1MTY1XHU1MzQ0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNl1bbV1dPTYwNDE2K20sRls2MDQxNittXT14WzIzNl1bbV0pO2Zvcih4WzIzN109Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2''@;'; put 'put ''OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1''@;'; put 'put ''OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVk''@;'; put 'put ''N1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1''@;'; put 'put ''ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1OTU3N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2NzIrbV09eFsyMzddW21dKTtmb3Io''@;'; put 'put ''eFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OWNcdTUxOGRcdTU0''@;'; put 'put ''YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdlMjFcdTg4YzFcdThjYTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVc''@;'; put 'put ''dTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdcdTgzZjlcdTg0NTdcdTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZlZjRcdTcy''@;'; put 'put ''YzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThjY2FcdThkNjRcdThkZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBc''@;'; put 'put ''dTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09NjA5MjgrbSxGWzYwOTI4K21dPXhb''@;'; put 'put ''MjM4XVttXSk7Zm9yKHhbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3''@;'; put 'put ''MTRlXHU3NDIwXHU3NTMwXHU3NTM4XHU3NTUxXHU3NjcyXHU3YjRjXHU3YjhiXHU3YmFkXHU3YmM2XHU3ZThmXHU4YTZlXHU4ZjNlXHU4ZjQ5XHU5MjNmXHU5MjkzXHU5MzIyXHU5NDJiXHU5NmZiXHU5ODVhXHU5ODZiXHU5OTFlXHU1MjA3XHU2MjJhXHU2Mjk4XHU2ZDU5XHU3NjY0XHU3YWNh''@;'; put 'put ''XHU3YmMwXHU3ZDc2XHU1MzYwXHU1Y2JlXHU1ZTk3XHU2ZjM4XHU3MGI5XHU3Yzk4XHU5NzExXHU5YjhlXHU5ZWRlXHU2M2E1XHU2NDdhXHU4Nzc2XHU0ZTAxXHU0ZTk1XHU0ZWFkXHU1MDVjXHU1MDc1XHU1NDQ4XHU1OWMzXHU1YjlhXHU1ZTQwXHU1ZWFkXHU1ZWY3XHU1ZjgxXHU2MGM1XHU2''@;'; put 'put ''MzNhXHU2NTNmXHU2NTc0XHU2NWNjXHU2Njc2XHU2Njc4XHU2N2ZlXHU2OTY4XHU2YTg5XHU2YjYzXHU2YzQwXHU2ZGMwXHU2ZGU4XHU2ZTFmXHU2ZTVlXHU3MDFlXHU3MGExXHU3MzhlXHU3M2ZkXHU3NTNhXHU3NzViXHU3ODg3XHU3OThlXHU3YTBiXHU3YTdkXHU3Y2JlXHU3ZDhlXHU4MjQ3''@;'; put 'put ''XHU4YTAyXHU4YWVhXHU4YzllXHU5MTJkXHU5MTRhXHU5MWQ4XHU5MjY2XHU5MmNjXHU5MzIwXHU5NzA2XHU5NzU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOV1bbV1dPTYxMTg0K20s''@;'; put 'put ''Rls2MTE4NCttXT14WzIzOV1bbV0pO2Zvcih4WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0''@;'; put 'put ''YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1''@;'; put 'put ''N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMx''@;'; put 'put ''ZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDBd''@;'; put 'put ''W21dXT02MTQ0MCttLEZbNjE0NDArbV09eFsyNDBdW21dKTtmb3IoeFsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVcdTVlZGFcdTY2''@;'; put 'put ''NWRcdTY3MzFcdTY3ZjFcdTY4MmFcdTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5ZDBcdTdhZjlc''@;'; put 'put ''dTdjYTVcdTRmY2FcdTUxMDFcdTUxYzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2RcdTZhZGJcdTY5''@;'; put 'put ''NmJcdTZjNDFcdTg0N2FcdTU4OWVcdTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlcdThkMDhcdTRlNGJcdTUzZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MV1bbV0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKGFlW3hbMjQxXVttXV09NjE2OTYrbSxGWzYxNjk2K21dPXhbMjQxXVttXSk7Zm9yKHhbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NzMwXHU1NzQwXHU1ZmQ3XHU2MzAxXHU2MzA3XHU2NDZmXHU2NTJmXHU2NWU4XHU2NjdhXHU2NzlkXHU2N2IzXHU2YjYyXHU2YzYwXHU2YzlhXHU2ZjJjXHU3N2U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3ZDE5XHU4''@;'; put 'put ''MGEyXHU4MTAyXHU4MWYzXHU4MjlkXHU4MmI3XHU4NzE4XHU4YThjXHVmOWZjXHU4ZDA0XHU4ZGJlXHU5MDcyXHU3NmY0XHU3YTE5XHU3YTM3XHU3ZTU0XHU4MDc3XHU1NTA3XHU1NWQ0XHU1ODc1XHU2MzJmXHU2NDIyXHU2NjQ5XHU2NjRiXHU2ODZkXHU2OTliXHU2Yjg0XHU2ZDI1XHU2ZWIx''@;'; put 'put ''XHU3M2NkXHU3NDY4XHU3NGExXHU3NTViXHU3NWI5XHU3NmUxXHU3NzFlXHU3NzhiXHU3OWU2XHU3ZTA5XHU3ZTFkXHU4MWZiXHU4NTJmXHU4ODk3XHU4YTNhXHU4Y2QxXHU4ZWViXHU4ZmIwXHU5MDMyXHU5M2FkXHU5NjYzXHU5NjczXHU5NzA3XHU0Zjg0XHU1M2YxXHU1OWVhXHU1YWM5XHU1''@;'; put 'put ''ZTE5XHU2ODRlXHU3NGM2XHU3NWJlXHU3OWU5XHU3YTkyXHU4MWEzXHU4NmVkXHU4Y2VhXHU4ZGNjXHU4ZmVkXHU2NTlmXHU2NzE1XHVmOWZkXHU1N2Y3XHU2ZjU3XHU3ZGRkXHU4ZjJmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDJdW21d''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Ml1bbV1dPTYxOTUyK20sRls2MTk1MittXT14WzI0Ml1bbV0pO2Zvcih4WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1''@;'; put 'put ''OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2Qy''@;'; put 'put ''ZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1''@;'; put 'put ''N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0M10ubGVuZ3RoOysrbSk2NTUz''@;'; put 'put ''MyE9PXhbMjQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDNdW21dXT02MjIwOCttLEZbNjIyMDgrbV09eFsyNDNdW21dKTtmb3IoeFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWNcdTUxYzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2FcdTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVcdTZlY2NcdTc2MjBcdTgxMGFc''@;'; put 'put ''dThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1ODZcdTVmYjlcdTY0YTRcdTZm''@;'; put 'put ''ODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThhNzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJcdTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJcdTVlZjNcdTY2NzRcdTZkZjhc''@;'; put 'put ''dTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYyODRcdTYyZGJcdTY4YTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDRdLmxl''@;'; put 'put ''bmd0aDsrK20pNjU1MzMhPT14WzI0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ0XVttXV09NjI0NjQrbSxGWzYyNDY0K21dPXhbMjQ0XVttXSk7Zm9yKHhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTEyXHU2OTVhXHU2YTM1XHU3MDkyXHU3MTI2XHU3ODVkXHU3OTAxXHU3OTBlXHU3OWQyXHU3YTBkXHU4MDk2XHU4Mjc4XHU4MmQ1XHU4MzQ5XHU4NTQ5''@;'; put 'put ''XHU4YzgyXHU4ZDg1XHU5MTYyXHU5MThiXHU5MWFlXHU0ZmMzXHU1NmQxXHU3MWVkXHU3N2Q3XHU4NzAwXHU4OWY4XHU1YmY4XHU1ZmQ2XHU2NzUxXHU5MGE4XHU1M2UyXHU1ODVhXHU1YmY1XHU2MGE0XHU2MTgxXHU2NDYwXHU3ZTNkXHU4MDcwXHU4NTI1XHU5MjgzXHU2NGFlXHU1MGFjXHU1''@;'; put 'put ''ZDE0XHU2NzAwXHU1ODljXHU2MmJkXHU2M2E4XHU2OTBlXHU2OTc4XHU2YTFlXHU2ZTZiXHU3NmJhXHU3OWNiXHU4MmJiXHU4NDI5XHU4YWNmXHU4ZGE4XHU4ZmZkXHU5MTEyXHU5MTRiXHU5MTljXHU5MzEwXHU5MzE4XHU5MzlhXHU5NmRiXHU5YTM2XHU5YzBkXHU0ZTExXHU3NTVjXHU3OTVk''@;'; put 'put ''XHU3YWZhXHU3YjUxXHU3YmM5XHU3ZTJlXHU4NGM0XHU4ZTU5XHU4ZTc0XHU4ZWY4XHU5MDEwXHU2NjI1XHU2OTNmXHU3NDQzXHU1MWZhXHU2NzJlXHU5ZWRjXHU1MTQ1XHU1ZmUwXHU2Yzk2XHU4N2YyXHU4ODVkXHU4ODc3XHU2MGI0XHU4MWI1XHU4NDAzXHVmZmZkIi5zcGxpdCgiIiksbT0w''@;'; put 'put ''O20hPXhbMjQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NV1bbV1dPTYyNzIwK20sRls2MjcyMCttXT14WzI0NV1bbV0pO2Zvcih4WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4''@;'; put 'put ''OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1''@;'; put 'put ''ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUz''@;'; put 'put ''ZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLG09MDttIT14WzI0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDZdW21dXT02Mjk3NittLEZbNjI5NzYrbV09eFsyNDZdW21dKTtmb3IoeFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0MzhcdTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThh''@;'; put 'put ''OTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZhMDNcdTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFcdTYwMjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBc''@;'; put 'put ''dTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVcdTc1ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4MDZcdTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkw''@;'; put 'put ''MGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZkM2VcdTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdcdTgyYWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZc''@;'; put 'put ''dTkyMTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ3XVttXV09NjMyMzIrbSxGWzYzMjMyK21dPXhbMjQ3XVttXSk7Zm9yKHhbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjJhXHU1MTZiXHU1M2VkXHU2MzRjXHU0ZjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2''@;'; put 'put ''YzliXHU2ZDdmXHU3MjRjXHU3MmZkXHU3YTE3XHU4OTg3XHU4YzlkXHU1ZjZkXHU2ZjhlXHU3MGY5XHU4MWE4XHU2MTBlXHU0ZmJmXHU1MDRmXHU2MjQxXHU3MjQ3XHU3YmM3XHU3ZGU4XHU3ZmU5XHU5MDRkXHU5N2FkXHU5YTE5XHU4Y2I2XHU1NzZhXHU1ZTczXHU2N2IwXHU4NDBkXHU4YTU1''@;'; put 'put ''XHU1NDIwXHU1YjE2XHU1ZTYzXHU1ZWUyXHU1ZjBhXHU2NTgzXHU4MGJhXHU4NTNkXHU5NTg5XHU5NjViXHU0ZjQ4XHU1MzA1XHU1MzBkXHU1MzBmXHU1NDg2XHU1NGZhXHU1NzAzXHU1ZTAzXHU2MDE2XHU2MjliXHU2MmIxXHU2MzU1XHVmYTA2XHU2Y2UxXHU2ZDY2XHU3NWIxXHU3ODMyXHU4''@;'; put 'put ''MGRlXHU4MTJmXHU4MmRlXHU4NDYxXHU4NGIyXHU4ODhkXHU4OTEyXHU5MDBiXHU5MmVhXHU5OGZkXHU5YjkxXHU1ZTQ1XHU2NmI0XHU2NmRkXHU3MDExXHU3MjA2XHVmYTA3XHU0ZmY1XHU1MjdkXHU1ZjZhXHU2MTUzXHU2NzUzXHU2YTE5XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4Yzc5''@;'; put 'put ''XHU5OGM3XHU5OGM0XHU5YTQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OF1bbV1dPTYzNDg4K20sRls2MzQ4OCttXT14WzI0OF1bbV0pO2Zvcih4WzI0OV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1''@;'; put 'put ''OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1''@;'; put 'put ''NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1''@;'; put 'put ''NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0''@;'; put 'put ''MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDldW21dXT02Mzc0NCttLEZbNjM3NDQrbV09eFsyNDldW21dKTtmb3IoeFsyNTBdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVc''@;'; put 'put ''dTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5ZTNcdThhNzJcdThhZTdcdTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTcz''@;'; put 'put ''ZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZcdTczN2JcdThlZDJcdTZiNDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJc''@;'; put 'put ''dTczODRcdTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThjZTJcdTkyNDlcdTk4NmZcdTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgx''@;'; put 'put ''MDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFcdTU3OGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUwXVttXV09NjRlMyttLEZbNjRlMyttXT14WzI1MF1bbV0pO2Zv''@;'; put 'put ''cih4WzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWY2Mlx1NmNjMlx1''@;'; put 'put ''NmVjZVx1NzAwNVx1NzA1MFx1NzBhZlx1NzE5Mlx1NzNlOVx1NzQ2OVx1ODM0YVx1ODdhMlx1ODg2MVx1OTAwOFx1OTBhMlx1OTNhM1x1OTlhOFx1NTE2ZVx1NWY1N1x1NjBlMFx1NjE2N1x1NjZiM1x1ODU1OVx1OGU0YVx1OTFhZlx1OTc4Ylx1NGU0ZVx1NGU5Mlx1NTQ3Y1x1NThkNVx1NThm''@;'; put 'put ''YVx1NTk3ZFx1NWNiNVx1NWYyN1x1NjIzNlx1NjI0OFx1NjYwYVx1NjY2N1x1NmJlYlx1NmQ2OVx1NmRjZlx1NmU1Nlx1NmVmOFx1NmY5NFx1NmZlMFx1NmZlOVx1NzA1ZFx1NzJkMFx1NzQyNVx1NzQ1YVx1NzRlMFx1NzY5M1x1Nzk1Y1x1N2NjYVx1N2UxZVx1ODBlMVx1ODJhNlx1ODQ2Ylx1''@;'; put 'put ''ODRiZlx1ODY0ZVx1ODY1Zlx1ODc3NFx1OGI3N1x1OGM2YVx1OTNhY1x1OTgwMFx1OTg2NVx1NjBkMVx1NjIxNlx1OTE3N1x1NWE1YVx1NjYwZlx1NmRmN1x1NmUzZVx1NzQzZlx1OWI0Mlx1NWZmZFx1NjBkYVx1N2IwZlx1NTRjNFx1NWYxOFx1NmM1ZVx1NmNkM1x1NmQyYVx1NzBkOFx1N2Qw''@;'; put 'put ''NVx1ODY3OVx1OGEwY1x1OWQzYlx1NTMxNlx1NTQ4Y1x1NWIwNVx1NmEzYVx1NzA2Ylx1NzU3NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTFdW21dXT02NDI1NittLEZbNjQyNTYrbV09''@;'; put 'put ''eFsyNTFdW21dKTtmb3IoeFsyNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdk''@;'; put 'put ''MDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdc''@;'; put 'put ''dTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTVi''@;'; put 'put ''OTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZkYzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUyXVttXV09NjQ1MTIr''@;'; put 'put ''bSxGWzY0NTEyK21dPXhbMjUyXVttXSk7Zm9yKHhbMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1ZTNmXHU1ZjhjXHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4''@;'; put 'put ''YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5XHU3MTQ3XHU4YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2''@;'; put 'put ''XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2YjNkXHU2YjQ2XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1''@;'; put 'put ''ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1''@;'; put 'put ''M11bbV1dPTY0NzY4K20sRls2NDc2OCttXT14WzI1M11bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLEllWzk1MF09ZnVuY3Rpb24oKXt2YXIgbSxGPVtdLGFlPXt9LHg9W107Zm9yKHhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgx''@;'; put 'put ''MFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMF1bbV0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKGFlW3hbMF1bbV1dPTArbSxGWzArbV09eFswXVttXSk7Zm9yKHhbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAx''@;'; put 'put ''XHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAx''@;'; put 'put ''NFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2''@;'; put 'put ''MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVm''@;'; put 'put ''ZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQw''@;'; put 'put ''XHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4''@;'; put 'put ''WzE2MV1bbV1dPTQxMjE2K20sRls0MTIxNittXT14WzE2MV1bbV0pO2Zvcih4WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYy''@;'; put 'put ''MFx1MjEwM1x1MjEwOVx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4ZVx1MzM4Zlx1MzNjNFx4YjBcdTUxNTlcdTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdcdTc0ZTlcdTdjY2VcdTI1ODFcdTI1ODJcdTI1ODNcdTI1''@;'; put 'put ''ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODhcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1NzJcdTI1NzNcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThc''@;'; put 'put ''dWZmMTlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTUzNDFcdTUzNDRcdTUzNDVcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZm''@;'; put 'put ''MjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZc''@;'; put 'put ''dWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Ml1bbV0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKGFlW3hbMTYyXVttXV09NDE0NzIrbSxGWzQxNDcyK21dPXhbMTYyXVttXSk7Zm9yKHhbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0''@;'; put 'put ''XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUw''@;'; put 'put ''M2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBm''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0''@;'; put 'put ''XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHUwMmQ5XHUwMmM5XHUwMmNhXHUwMmM3XHUwMmNiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjNd''@;'; put 'put ''W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2M11bbV1dPTQxNzI4K20sRls0MTcyOCttXT14WzE2M11bbV0pO2Zvcih4WzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1''@;'; put 'put ''ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1''@;'; put 'put ''NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYw''@;'; put 'put ''Ylx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1NGUxMFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVj''@;'; put 'put ''N1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1''@;'; put 'put ''NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZm''@;'; put 'put ''MFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NF0ubGVuZ3RoOysrbSk2''@;'; put 'put ''NTUzMyE9PXhbMTY0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjRdW21dXT00MTk4NCttLEZbNDE5ODQrbV09eFsxNjRdW21dKTtmb3IoeFsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTZcdTRlMTVcdTRlMTRcdTRl''@;'; put 'put ''MThcdTRlM2JcdTRlNGRcdTRlNGZcdTRlNGVcdTRlZTVcdTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdcdTRlZTNcdTRlZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUxNDRcdTUxODlcdTUxOGFcdTUxYWNcdTUxZjlcdTUxZmFcdTUxZjhcdTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZc''@;'; put 'put ''dTUzMTdcdTUzMWRcdTRlZGZcdTUzNGFcdTUzNDlcdTUzNjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUzZWZcdTUzZTRcdTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlcdTUzZThcdTUzZmNcdTUzZjhcdTUzZjVcdTUzZWJcdTUzZTZcdTUzZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUz''@;'; put 'put ''ZWRcdTUzZmJcdTU2ZGJcdTU2ZGFcdTU5MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5MmVcdTU5MzFcdTU5NzRcdTU5NzZcdTViNTVcdTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVlMDNcdTVlNzNcdTVlN2NcdTVmMDFcdTVmMThcdTVm''@;'; put 'put ''MTdcdTVmYzVcdTYyMGFcdTYyNTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3MmNcdTY3MmFcdTY3MmJcdTY3MmRcdTZiNjNcdTZiY2RcdTZjMTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZcdTczODRcdTczODlcdTc0ZGNcdTc0ZTZcdTc1MThc''@;'; put 'put ''dTc1MWZcdTc1MjhcdTc1MjlcdTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVcdTc2YmZcdTc2ZWVcdTc3ZGJcdTc3ZTJcdTc3ZjNcdTc5M2FcdTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRlNTNcdTRlNjlcdTRlOTlcdTRlYTRcdTRlYTZcdTRl''@;'; put 'put ''YTVcdTRlZmZcdTRmMDlcdTRmMTlcdTRmMGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRlZjJcdTRlZjZcdTRlZmJcdTRlZjBcdTRlZjNcdTRlZmRcdTRmMDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjVd''@;'; put 'put ''Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY1XVttXV09NDIyNDArbSxGWzQyMjQwK21dPXhbMTY1XVttXSk7Zm9yKHhbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MTcxXHU1''@;'; put 'put ''MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1MjEyXHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIwXHU1MzcwXHU1MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1NDBhXHU1NDEwXHU1NDAxXHU1NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4XHU1NDAzXHU1NDBlXHU1NDA2XHU1NDEy''@;'; put 'put ''XHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMzXHU1NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1OTE5XHU1OTFhXHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4XHU1OTgzXHU1OTdkXHU1OTc5XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5XHU1''@;'; put 'put ''YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1ZTA2XHU1ZTc2XHU1ZTc0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjBmXHU1ZjFiXHU1ZmQ5XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2''@;'; put 'put ''NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2NzA5XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1XHU2YjIxXHU2YjY0XHU2YjdiXHU2YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRlXHU3MDcwXHU3MjVmXHU3MjVkXHU3Njdl''@;'; put 'put ''XHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2XHU3ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4MDBjXHU4MDEyXHU4MDMzXHU4MDdmXHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUzXHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4''@;'; put 'put ''ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0ZTMyXHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3XHU0ZjU3XHU0ZjVlXHU0ZjM0XHU0ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2XHU0ZjYzXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''bT0wO20hPXhbMTY2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Nl1bbV1dPTQyNDk2K20sRls0MjQ5NittXT14WzE2Nl1bbV0pO2Zvcih4WzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3''@;'; put 'put ''NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1''@;'; put 'put ''NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1''@;'; put 'put ''NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4''@;'; put 'put ''N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1''@;'; put 'put ''NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLG09MDttIT14WzE2N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjddW21dXT00Mjc1MittLEZbNDI3NTIrbV09eFsxNjddW21dKTtmb3IoeFsxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTY3NTNcdTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZjODFcdTZjODhcdTZjODlcdTZjODVcdTZjOWJcdTZjNmFcdTZjN2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJcdTZjN2RcdTZjODNcdTZjNzJcdTZjN2VcdTZj''@;'; put 'put ''NzRcdTZjODZcdTZjNzZcdTZjOGRcdTZjOTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhcdTcyNjJcdTcyNjFcdTcyNjBcdTcyYzRcdTcyYzJcdTczOTZcdTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3ZTNcdTc5YzFcdTc5YzBcdTc5YmZcdTdhNzZc''@;'; put 'put ''dTdjZmJcdTdmNTVcdTgwOTZcdTgwOTNcdTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgyOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThjMzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRc''@;'; put 'put ''dThkNzBcdThkYjNcdThlYWJcdThlY2FcdThmOWJcdThmYjBcdThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFcdTkwYTJcdTkwYWFcdTkwYTZcdTkwYTNcdTkxNDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFcdTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRl''@;'; put 'put ''OGJcdTRlOWJcdTRlOWVcdTRlYWJcdTRlYWNcdTRmNmZcdTRmOWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRmOGJcdTRmODZcdTRmODNcdTRmNzBcdTRmNzVcdTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRmOTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVc''@;'; put 'put ''dTUxNjlcdTUxNzdcdTUxNzZcdTUxNzhcdTUxYmRcdTUxZmRcdTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVcdTUyMzZcdTUyNDFcdTUyYmVcdTUyYmJcdTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0''@;'; put 'put ''NzNcdTU0NzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY4XVttXV09NDMwMDgrbSxGWzQzMDA4K21dPXhbMTY4XVttXSk7Zm9yKHhbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdiXHU1NDc3XHU1NDg0XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkwXHU1NDcxXHU1NDc2XHU1NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1NDhiXHU1NDdkXHU1NDhlXHU1NmZhXHU1NzgzXHU1''@;'; put 'put ''Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1OTQ4XHU1OTQ0XHU1OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1OWI5XHU1OWFlXHU1OWQxXHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNiXHU1OWQzXHU1OWNhXHU1OWFmXHU1OWIzXHU1OWQy''@;'; put 'put ''XHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYzXHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1YjliXHU1YzFhXHU1YzQ4XHU1YzQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzQ2XHU1Y2I3XHU1Y2ExXHU1Y2I4XHU1Y2E5XHU1Y2FiXHU1Y2IxXHU1Y2Iz''@;'; put 'put ''XHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1XHU1ZTk2XHU1ZWY2XHU1ZjI2XHU1ZjI3XHU1ZjI5XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1ZmZkXHU1ZmY1XHU1ZmZmXHU2MDBmXHU2MDE0XHU2''@;'; put 'put ''MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2MjE1XHU2MjNmXHU2MjNlXHU2MjQwXHU2MjdmXHU2MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQyXHU2MmRiXHU2MmFiXHU2MmQzXHU2MmQ0XHU2MmNi''@;'; put 'put ''XHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJjXHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIxXHU2MmQ4XHU2MmQ2XHU2MmQ3XHU2MmM2XHU2MmFjXHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2NjEzXHU2NjBjXHU2NjA2XHU2NjAyXHU2NjBlXHU2''@;'; put 'put ''NjAwXHU2NjBmXHU2NjE1XHU2NjBhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OV1bbV1dPTQzMjY0K20sRls0MzI2NCttXT14WzE2OV1bbV0pO2Zvcih4WzE3MF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1''@;'; put 'put ''Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNi''@;'; put 'put ''OVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIy''@;'; put 'put ''Y1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1''@;'; put 'put ''Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJh''@;'; put 'put ''ZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1''@;'; put 'put ''OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzBdW21dXT00MzUyMCttLEZbNDM1MjArbV09eFsxNzBdW21dKTtmb3IoeFsxNzFd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NDJcdTk2YjlcdTk2ZThcdTk3NTJcdTk3NWVcdTRlOWZcdTRlYWRcdTRlYWVcdTRmZTFcdTRmYjVcdTRmYWZcdTRmYmZcdTRmZTBcdTRmZDFcdTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZc''@;'; put 'put ''dTRmZDhcdTRmZGZcdTRmY2FcdTRmZDdcdTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdcdTUxNTdcdTUxOTJcdTUxOTFcdTUxYTBcdTUyNGVcdTUyNDNcdTUyNGFcdTUyNGRcdTUyNGNcdTUyNGJcdTUyNDdcdTUyYzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUz''@;'; put 'put ''MGRcdTUzNTdcdTUzN2JcdTUzOWFcdTUzZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0YjNcdTU0YzdcdTU0YzJcdTU0YmRcdTU0YWFcdTU0YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzRcdTU0YzhcdTU0YWZcdTU0''@;'; put 'put ''YWJcdTU0YjFcdTU0YmJcdTU0YTlcdTU0YTdcdTU0YmZcdTU2ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5NGZcdTU5NGVcdTU5NTBcdTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNcdTU5ZThcdTVhMDNcdTU5ZTVcdTU5ZWFc''@;'; put 'put ''dTU5ZGFcdTU5ZTZcdTVhMDFcdTU5ZmJcdTViNjlcdTViYTNcdTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVcdTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlcdTVjZDJcdTVkZjdcdTVlMWRcdTVlMjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVlYTZcdTVlZmFcdTVmMDhcdTVmMmRcdTVm''@;'; put 'put ''NjVcdTVmODhcdTVmODVcdTVmOGFcdTVmOGJcdTVmODdcdTVmOGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYwMGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYwNjhcdTYwNjJcdTYwNDZcdTYwNDNcdTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRcdTYyNDFcdTYyZGNcdTYzMTZcdTYzMDlc''@;'; put 'put ''dTYyZmNcdTYyZWRcdTYzMDFcdTYyZWVcdTYyZmRcdTYzMDdcdTYyZjFcdTYyZjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcxXVttXV09NDM3NzYrbSxGWzQzNzc2K21dPXhbMTcxXVtt''@;'; put 'put ''XSk7Zm9yKHhbMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmVmXHU2MmVjXHU2MmZlXHU2MmY0XHU2MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJkXHU2NjIwXHU2NjI3XHU2NjJm''@;'; put 'put ''XHU2NjFmXHU2NjI4XHU2NjMxXHU2NjI0XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0XHU2N2QwXHU2N2VjXHU2N2I2XHU2N2FmXHU2N2Y1XHU2N2U5XHU2N2VmXHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2N2YzXHU2N2IwXHU2N2Q5XHU2''@;'; put 'put ''N2UyXHU2N2RkXHU2N2QyXHU2YjZhXHU2YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2YzFmXHU2Y2M5XHU2ZDBiXHU2ZDMyXHU2ZDJhXHU2ZDQxXHU2ZDI1XHU2ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDNiXHU2''@;'; put 'put ''ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2Y2Y1XHU2ZDM5XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBlXHU2ZDJiXHU3MGFiXHU3MGJhXHU3MGIzXHU3MGFjXHU3MGFmXHU3MGFkXHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZmXHU3Mjc0XHU3MmU5XHU3MmUw''@;'; put 'put ''XHU3MmUxXHU3M2I3XHU3M2NhXHU3M2JiXHU3M2IyXHU3M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3NTRjXHU3NTRlXHU3NTRiXHU3NWFiXHU3NWE0XHU3NWE1XHU3NWEyXHU3NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3NmM2XHU3NmMzXHU3NmM1XHU3''@;'; put 'put ''NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3NzBiXHU3NmZlXHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBjXHU3ODBkXHU3OTQ2XHU3OTQ5XHU3OTQ4XHU3OTQ3XHU3OWI5XHU3OWJhXHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZmXHU3YWZkXHU3YzdkXHU3ZDAy''@;'; put 'put ''XHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3XHU3ZDA0XHU3ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Ml1bbV1dPTQ0MDMyK20sRls0NDAz''@;'; put 'put ''MittXT14WzE3Ml1bbV0pO2Zvcih4WzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBk''@;'; put 'put ''ZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1''@;'; put 'put ''ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5''@;'; put 'put ''OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1''@;'; put 'put ''NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUz''@;'; put 'put ''N1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRlYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTczXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzNdW21dXT00''@;'; put 'put ''NDI4OCttLEZbNDQyODgrbV09eFsxNzNdW21dKTtmb3IoeFsxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0ZTZcdTU1MjdcdTU1MDdcdTU0ZmRcdTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJcdTU3ZDRcdTU3Y2JcdTU3YzNcdTU4''@;'; put 'put ''MDlcdTU5MGZcdTU5NTdcdTU5NThcdTU5NWFcdTVhMTFcdTVhMThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5ZWNcdTVhMjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVhMGNcdTVhMDlcdTViNmJcdTVjNThcdTViYjBcdTViYjNcdTViYjZcdTViYjRcdTViYWVcdTViYjVcdTViYjlcdTViYjhc''@;'; put 'put ''dTVjMDRcdTVjNTFcdTVjNTVcdTVjNTBcdTVjZWRcdTVjZmRcdTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZcdTVkMDFcdTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJcdTVlYWJcdTVlYWRcdTVlYTdcdTVmMzFcdTVmOTJcdTVmOTFcdTVmOTBcdTYwNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTYwNjNcdTYwNjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYwODRcdTYwOWZcdTYwOWFcdTYwOGRcdTYwOTRcdTYwOGNcdTYwODVcdTYwOTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2VcdTYzMmZcdTYzNTVcdTYzNDJcdTYz''@;'; put 'put ''NDZcdTYzNGZcdTYzNDlcdTYzM2FcdTYzNTBcdTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNcdTY1NDhcdTY1NDlcdTY1OTlcdTY1YzFcdTY1YzVcdTY2NDJcdTY2NDlcdTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2ZjhcdTY3MTRcdTY3MTVcdTY3MTdc''@;'; put 'put ''dTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZcdTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4MTdcdTY4NGNcdTY4NTFcdTY4M2RcdTY3ZjRcdTY4NTBcdTY4NDBcdTY4M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZiOGFcdTZiODlcdTZiYjdcdTZj''@;'; put 'put ''MjNcdTZjMjdcdTZjMjhcdTZjMjZcdTZjMjRcdTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZcdTZkNzhcdTZkNzdcdTZkNTlcdTZkOTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFl''@;'; put 'put ''W3hbMTc0XVttXV09NDQ1NDQrbSxGWzQ0NTQ0K21dPXhbMTc0XVttXSk7Zm9yKHhbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZjXHU2ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhjXHU2ZDhhXHU2ZDc5XHU2''@;'; put 'put ''ZDg1XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3MGQ4XHU3MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3Mzg2XHU3M2VkXHU3NDA5XHU3M2VlXHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3NTVjXHU3NTVhXHU3NTU5''@;'; put 'put ''XHU3NWJlXHU3NWM1XHU3NWM3XHU3NWIyXHU3NWIzXHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIwXHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5XHU3NzFmXHU3NzIwXHU3NzI4XHU3N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0XHU3ODM3XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFmXHU3ODMyXHU3OTU1XHU3OTUwXHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVlXHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2XHU3OWU5XHU3OWQ4XHU3YTg0XHU3''@;'; put 'put ''YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3Yzg5XHU3ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3ZDIwXHU3ZDIyXHU3ZDE0XHU3ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4MDA2XHU4MDE4XHU4MDE1XHU4MDE5''@;'; put 'put ''XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYxXHU4MTAyXHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0XHU4MTA2XHU4MGY4XHU4MGYzXHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZjXHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4XHU4MjJjXHU4MmJiXHU4MzJiXHU4''@;'; put 'put ''MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4MzUwXHU4MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4MzMyXHU4MzM5XHU4MzM2XHU4MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4MzQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzVdW21dLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihhZVt4WzE3NV1bbV1dPTQ0ODAwK20sRls0NDgwMCttXT14WzE3NV1bbV0pO2Zvcih4WzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1''@;'; put 'put ''ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVk''@;'; put 'put ''NFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZmOFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1''@;'; put 'put ''OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1''@;'; put 'put ''NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMz''@;'; put 'put ''ZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1''@;'; put 'put ''NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb''@;'; put 'put ''MTc2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzZdW21dXT00NTA1NittLEZbNDUwNTYrbV09eFsxNzZdW21dKTtmb3IoeFsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhM2NcdTVhNjJcdTVhNWFcdTVhNDZcdTVhNGFc''@;'; put 'put ''dTViNzBcdTViYzdcdTViYzVcdTViYzRcdTViYzJcdTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBcdTVjNWNcdTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVcdTVkMWJcdTVkMTZcdTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVkMjdcdTVkMTdcdTVkZTJcdTVl''@;'; put 'put ''MzhcdTVlMzZcdTVlMzNcdTVlMzdcdTVlYjdcdTVlYjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVmNTdcdTVmNmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVmOTlcdTVmOWVcdTVmOThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlcdTYwYTBcdTYwYThcdTYwY2Jc''@;'; put 'put ''dTYwYjRcdTYwZTZcdTYwYmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwYzVcdTYwYmJcdTYwYjVcdTYwZGNcdTYwYmNcdTYwZDhcdTYwZDVcdTYwYzZcdTYwZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhcdTYzYTBcdTYzYTdcdTYzNzJc''@;'; put 'put ''dTYzOTZcdTYzYTJcdTYzYTVcdTYzNzdcdTYzNjdcdTYzOThcdTYzYWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJcdTYzNmJcdTYzYThcdTYzODRcdTYzODhcdTYzOTlcdTYzYTFcdTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYzNjhcdTYzN2FcdTY1NWRcdTY1''@;'; put 'put ''NTZcdTY1NTFcdTY1NTlcdTY1NTdcdTU1NWZcdTY1NGZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2VcdTY2NWRcdTY2NWFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJcdTY4ODFcdTY4YWZcdTY4YTJc''@;'; put 'put ''dTY4OTNcdTY4YjVcdTY4N2ZcdTY4NzZcdTY4YjFcdTY4YTdcdTY4OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OWRcdTY4YThcdTY4OWZcdTY4YTFcdTY4ODJcdTZiMzJcdTZiYmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzddLmxlbmd0aDsr''@;'; put 'put ''K20pNjU1MzMhPT14WzE3N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc3XVttXV09NDUzMTIrbSxGWzQ1MzEyK21dPXhbMTc3XVttXSk7Zm9yKHhbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmViXHU2YmVjXHU2YzJi''@;'; put 'put ''XHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2ZTA1XHU2ZGM3XHU2ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFlXHU2ZGRlXHU2ZGY5XHU2ZGI4XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQyXHU2ZTFhXHU2ZGI1XHU2ZGRhXHU2ZGViXHU2''@;'; put 'put ''ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2XHU3MGY5XHU3MTA5XHU3MTBhXHU3MGZkXHU3MGVmXHU3MjNkXHU3MjdkXHU3MjgxXHU3MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3MzE5XHU3Mzg3XHU3NDA1XHU3NDBhXHU3NDAz''@;'; put 'put ''XHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUwXHU3NGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGY3XHU3NTFjXHU3NTIyXHU3NTY1XHU3NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3NWNhXHU3NWNkXHU3NjhlXHU3NmQ0XHU3NmQy''@;'; put 'put ''XHU3NmRiXHU3NzM3XHU3NzNlXHU3NzNjXHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4XHU3OTZkXHU3OWZiXHU3YTkyXHU3YTk1XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFlXHU3YjJlXHU3YzkyXHU3Yzk3XHU3Yzk1XHU3''@;'; put 'put ''ZDQ2XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3ZDMyXHU3ZDMxXHU3ZjNkXHU3ZjllXHU3ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4MTJmXHU4MTE2XHU4MTIzXHU4MTJiXHU4MTI5''@;'; put 'put ''XHU4MTMwXHU4MTI0XHU4MjAyXHU4MjM1XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2EyXHU4Mzk2XHU4M2JkXHU4M2FiXHU4MzkyXHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4MzdjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb''@;'; put 'put ''MTc4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OF1bbV1dPTQ1NTY4K20sRls0NTU2OCttXT14WzE3OF1bbV0pO2Zvcih4WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4''@;'; put 'put ''Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1''@;'; put 'put ''OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAx''@;'; put 'put ''NVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3''@;'; put 'put ''NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1''@;'; put 'put ''NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTVi''@;'; put 'put ''M1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLG09MDttIT14WzE3OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzldW21dXT00NTgyNCttLEZbNDU4MjQrbV09eFsxNzldW21dKTtmb3IoeFsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTVhNzdcdTVhOWFcdTVhN2ZcdTVhOTJcdTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTViZDNcdTViZDBcdTVjMGFcdTVjMGJcdTVjMzFcdTVkNGNcdTVkNTBcdTVkMzRcdTVkNDdcdTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVlNDNcdTVlN2VcdTVlY2Fc''@;'; put 'put ''dTVlYzFcdTVlYzJcdTVlYzRcdTVmM2NcdTVmNmRcdTVmYTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZcdTYwZTBcdTYxMWNcdTYxMjNcdTYwZmFcdTYxMTVcdTYwZjBcdTYwZmJcdTYwZjRcdTYxNjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYy''@;'; put 'put ''MWZcdTYyNDlcdTYzYTNcdTYzOGNcdTYzY2ZcdTYzYzBcdTYzZTlcdTYzYzlcdTYzYzZcdTYzY2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzZDJcdTYzZTNcdTYzZDBcdTYzZTFcdTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRcdTYzZWFcdTYzZGJcdTY0''@;'; put 'put ''NTJcdTYzZGFcdTYzZjlcdTY1NWVcdTY1NjZcdTY1NjJcdTY1NjNcdTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2N2FcdTY2N2VcdTY2NzdcdTY2ZmVcdTY2ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4ZTBcdTY4ZDhcdTY4ZDdc''@;'; put 'put ''dTY5MDVcdTY4ZGZcdTY4ZjVcdTY4ZWVcdTY4ZTdcdTY4ZjlcdTY4ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRcdTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFcdTY5NmVcdTY4ZmJcdTZiM2VcdTZiM2FcdTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZcdTZjMmVcdTZjMmZcdTZj''@;'; put 'put ''MmNcdTZlMmZcdTZlMzhcdTZlNTRcdTZlMjFcdTZlMzJcdTZlNjdcdTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZlNWJcdTZlNThcdTZlMjRcdTZlNTZcdTZlNmVcdTZlMmRcdTZlMjZcdTZlNmZcdTZlMzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZlMWRcdTZlM2VcdTZlY2Jc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgwXVttXV09NDYwODArbSxGWzQ2MDgwK21dPXhbMTgwXVttXSk7Zm9yKHhbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcyXHU2ZTY5XHU2ZTVmXHU3MTE5XHU3MTFhXHU3MTI2XHU3MTMwXHU3MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3MzI5XHU3NDNh''@;'; put 'put ''XHU3NDJhXHU3NDMzXHU3NDIyXHU3NDI1XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3NDI2XHU3NDI4XHU3NTI1XHU3NTI2XHU3NTZiXHU3NTZhXHU3NWUyXHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3NjkzXHU3NmI0XHU3''@;'; put 'put ''NmRjXHU3NzRmXHU3N2VkXHU3ODVkXHU3ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1XHU3YTAwXHU3YTk4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTk3XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUwXHU3YjUyXHU3''@;'; put 'put ''YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3YjUxXHU3YzlmXHU3Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3ZDZlXHU3ZDcyXHU3ZDYxXHU3ZDY2XHU3ZDYyXHU3ZDcwXHU3ZDczXHU1NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4MTU0XHU4MTRi''@;'; put 'put ''XHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2XHU4MTNlXHU4MTRjXHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAzXHU4M2Y4XHU4NDBkXHU4M2UwXHU4M2M1XHU4NDBiXHU4M2MxXHU4M2VmXHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2NjXHU4M2ZkXHU4''@;'; put 'put ''M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4NDA0XHU4M2RjXHU4NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4NmVkXHU4NmQ0XHU4NmRiXHU4NmU0XHU4NmQwXHU4NmRlXHU4ODU3XHU4OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4YTU1XHU4YTVl''@;'; put 'put ''XHU4YTNjXHU4YTQxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MV1bbV1dPTQ2MzM2K20sRls0NjMzNittXT14WzE4MV1bbV0pO2Zvcih4WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNi''@;'; put 'put ''OFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1''@;'; put 'put ''OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1''@;'; put 'put ''OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4''@;'; put 'put ''Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1''@;'; put 'put ''NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFj''@;'; put 'put ''OVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODJdW21dXT00NjU5MittLEZbNDY1OTIrbV09eFsxODJdW21dKTtmb3IoeFsxODNdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjNcdTVhYzJcdTVhYjJcdTVkNjlcdTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlcdTVlYzhcdTVmMTJcdTVmNTlcdTVmYWNcdTVmYWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYwZjNcdTYxMWJcdTYw''@;'; put 'put ''ZjlcdTYxMDFcdTYxMDhcdTYxNGVcdTYxNGNcdTYxNDRcdTYxNGRcdTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZcdTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M2VcdTY0MWVcdTY0MmFcdTY0MmRcdTY0M2RcdTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRcdTY0MzZcdTY0MTZc''@;'; put 'put ''dTY0MTdcdTY0MDZcdTY1NmNcdTY1OWZcdTY1YjBcdTY2OTdcdTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThcdTY2OGRcdTY3MDNcdTY5OTRcdTY5NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NWFcdTY5NzdcdTY5NjBcdTY5NTRcdTY5NzVc''@;'; put 'put ''dTY5MzBcdTY5ODJcdTY5NGFcdTY5NjhcdTY5NmJcdTY5NWVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNcdTY5NWJcdTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZcdTZiZDNcdTZiZmRcdTZlYTJcdTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRcdTZlYzdcdTZlYzVcdTZl''@;'; put 'put ''YTVcdTZlOThcdTZlYmNcdTZlYmFcdTZlYWJcdTZlZDFcdTZlOTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZlYTdcdTZlYjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcxNjRcdTcxNDlcdTcxNjdcdTcxNWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcxNDZcdTcxNjhcdTcxNTZc''@;'; put 'put ''dTcyM2FcdTcyNTJcdTczMzdcdTczNDVcdTczM2ZcdTczM2VcdTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVcdTc0NDFcdTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNcdTc1NzZcdTc1NzhcdTc2MDBcdTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZcdTc1ZjRcdTc1ZjNcdTc2''@;'; put 'put ''ZGVcdTc2ZGZcdTc3NWJcdTc3NmJcdTc3NjZcdTc3NWVcdTc3NjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgzXVttXV09NDY4NDgrbSxGWzQ2ODQ4K21dPXhbMTgzXVttXSk7Zm9yKHhb''@;'; put 'put ''MTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzc5XHU3NzZhXHU3NzZjXHU3NzVjXHU3NzY1XHU3NzY4XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIwXHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3ODkzXHU3''@;'; put 'put ''ODdmXHU3OTdhXHU3OTdmXHU3OTgxXHU4NDJjXHU3OWJkXHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3YTlmXHU3YWEwXHU3Yjc3XHU3YmMwXHU3YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhmXHU3ZDVi''@;'; put 'put ''XHU3ZjZlXHU3ZjY5XHU3ZjZhXHU3ZjcyXHU3ZmE5XHU3ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcxXHU4MTcwXHU4MTc4XHU4MTY1XHU4MTZlXHU4MTczXHU4MTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTc5XHU4MTdhXHU4MTY2''@;'; put 'put ''XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3XHU4NDNkXHU4NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4NDQ5XHU4NDZjXHU4NDViXHU4NDNjXHU4NDM1XHU4NDYxXHU4NDYzXHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4NzA4XHU4NzA3XHU4NzAwXHU4''@;'; put 'put ''NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4NzA2XHU4NzBhXHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5XHU4OGRjXHU4OGQ4XHU4OGRkXHU4OGUxXHU4OGNhXHU4OGQ1XHU4OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcwXHU4YTg3XHU4YTdjXHU4YTYz''@;'; put 'put ''XHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZkXHU4YTYyXHU4YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4YTNlXHU4YTY4XHU4YzYyXHU4YzhhXHU4Yzg5XHU4Y2NhXHU4Y2M3XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4ZGU4XHU4ZGVmXHU4ZGYzXHU4''@;'; put 'put ''ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4ZWIyXHU4ZjAzXHU4ZjA5XHU4ZWZlXHU4ZjBhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NF1bbV1dPTQ3MTA0K20sRls0NzEwNCttXT14WzE4''@;'; put 'put ''NF1bbV0pO2Zvcih4WzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1''@;'; put 'put ''OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5''@;'; put 'put ''NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OThm''@;'; put 'put ''ZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBkNlx1NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1''@;'; put 'put ''NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1NTYwOFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThm''@;'; put 'put ''ZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJkZVx1NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1''@;'; put 'put ''NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODVdW21dXT00NzM2MCttLEZb''@;'; put 'put ''NDczNjArbV09eFsxODVdW21dKTtmb3IoeFsxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxM2ZcdTYxNGJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0ODdcdTY0NThcdTY0NTRc''@;'; put 'put ''dTY0YTRcdTY0NzhcdTY0NWZcdTY0N2FcdTY0NTFcdTY0NjdcdTY0MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1ZDdcdTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRcdTY5OWNcdTY5YThcdTY5OTVcdTY5YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5YjdcdTY5YmJcdTY5YWJcdTY5''@;'; put 'put ''YjRcdTY5ZDBcdTY5Y2RcdTY5YWRcdTY5Y2NcdTY5YTZcdTY5YzNcdTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNcdTZmMTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZmMjlcdTZmM2VcdTZmMjBcdTZmMmNcdTZmMGZcdTZmMDJcdTZmMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTZlZmZcdTZlZWZcdTZmMDZcdTZmMzFcdTZmMzhcdTZmMzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZmODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZlZjJcdTZlY2NcdTZlZjdcdTcxOTRcdTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcyOTJcdTcyOTZc''@;'; put 'put ''dTczNDRcdTczNTBcdTc0NjRcdTc0NjNcdTc0NmFcdTc0NzBcdTc0NmRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJcdTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNcdTc3ODRcdTc3N2RcdTc3N2ZcdTc3NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNcdTc5OGVcdTc5''@;'; put 'put ''OGZcdTc5OGRcdTdhMmVcdTdhMzFcdTdhYWFcdTdhYTlcdTdhZWRcdTdhZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdiOTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdiYjhcdTdiODdcdTdiODRcdTdjYjlcdTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdkYmVcdTdkYTBc''@;'; put 'put ''dTdkY2FcdTdkYjRcdTdkYjJcdTdkYjFcdTdkYmFcdTdkYTJcdTdkYmZcdTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdcdTdkYWNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg2XVtt''@;'; put 'put ''XV09NDc2MTYrbSxGWzQ3NjE2K21dPXhbMTg2XVttXSk7Zm9yKHhbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjcwXHU3ZmUwXHU3ZmUxXHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3XHU4MTUwXHU4MTgwXHU4MThmXHU4MTg4''@;'; put 'put ''XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJmXHU4NGM2XHU4NGM0XHU4NDk5XHU4NDllXHU4NGIyXHU4NDljXHU4NGNiXHU4NGI4XHU4NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4NGQxXHU4NGNhXHU4NzNmXHU4NzFjXHU4''@;'; put 'put ''NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4OGY5XHU4OGY4XHU4OGZkXHU4OGU4XHU4OTFhXHU4OGVmXHU4YWE2XHU4YThjXHU4YTllXHU4YWEzXHU4YThkXHU4YWExXHU4YTkzXHU4YWE0XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4YzhkXHU4YzhjXHU4Y2QzXHU4Y2QxXHU4Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1XHU4ZjEzXHU4ZmEzXHU5MDYwXHU5MDU4''@;'; put 'put ''XHU5MDVjXHU5MDYzXHU5MDU5XHU5MDVlXHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4XHU5MTc3XHU5MTc0XHU5Mjc4XHU5MjgwXHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5MjdjXHU5MjkxXHU5NWExXHU5NWE4XHU5''@;'; put 'put ''NWE5XHU5NWEzXHU5NWE1XHU5NWE0XHU5Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5N2Y2XHU5ODE3XHU5ODE4XHU5OGFmXHU5OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIwXHU5YWU2XHU5YjQxXHU5YjQyXHU5Y2Y0''@;'; put 'put ''XHU5Y2Y2XHU5Y2YzXHU5ZWJjXHU5ZjNiXHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4XHU1MTA5XHU1MTA1XHU1MWRjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODddW21dLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihhZVt4WzE4N11bbV1dPTQ3ODcyK20sRls0Nzg3MittXT14WzE4N11bbV0pO2Zvcih4WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYz''@;'; put 'put ''Ylx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1''@;'; put 'put ''NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4Mlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRi''@;'; put 'put ''MFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1''@;'; put 'put ''NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2''@;'; put 'put ''NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4Ylx1NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg4XVttXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoYWVbeFsxODhdW21dXT00ODEyOCttLEZbNDgxMjgrbV09eFsxODhdW21dKTtmb3IoeFsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2MWZcdTc2''@;'; put 'put ''MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2OWFcdTc2YmFcdTc2ZTRcdTc3OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdhM2ZcdTdhM2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZcdTdhYWVc''@;'; put 'put ''dTdiYWRcdTdiYjFcdTdiYzRcdTdiYjRcdTdiYzZcdTdiYzdcdTdiYzFcdTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRcdTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNcdTdkZGRcdTdkZThcdTdkZTNcdTdkZGFcdTdkZGVcdTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdmNzVcdTdm''@;'; put 'put ''NzdcdTdmYWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNcdTgxOWRcdTgxYTBcdTgxOWFcdTgxOThcdTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVcdTg1MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1MTRcdTg0''@;'; put 'put ''ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3ODJcdTg3NzRcdTg3NzZcdTg3NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNcdTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdcdThhYzRcdThhOTVc''@;'; put 'put ''dThhY2JcdThhZjhcdThhYjJcdThhYzlcdThhYzJcdThhYmZcdThhYjBcdThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJcdThjNGNcdThjNGVcdThjNmNcdThjZTBcdThjZGVcdThjZTZcdThjZTRcdThjZWNcdThjZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThjZTFcdThkNmRcdThk''@;'; put 'put ''OWZcdThkYTNcdThlMmJcdThlMTBcdThlMWRcdThlMjJcdThlMGZcdThlMjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThmMWRcdThmMWJcdThmMWZcdThmMjlcdThmMjZcdThmMmFcdThmMWNcdThmMWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODldLmxlbmd0aDsrK20pNjU1MzMh''@;'; put 'put ''PT14WzE4OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg5XVttXV09NDgzODQrbSxGWzQ4Mzg0K21dPXhbMTg5XVttXSk7Zm9yKHhbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5''@;'; put 'put ''MDZkXHU5MDc3XHU5MTMwXHU5MTJkXHU5MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5MmM1XHU5MmJiXHU5MmI3XHU5MmVhXHU5MmFjXHU5MmU0XHU5MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3''@;'; put 'put ''XHU5NzA5XHU5NzYwXHU5NzhkXHU5NzhiXHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBhXHU5OTEzXHU5OTEyXHU5OTE4XHU5OWRkXHU5OWQwXHU5OWRmXHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5''@;'; put 'put ''Yjc3XHU5YjZmXHU5ZDA2XHU5ZDA5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDAzXHU5ZWE5XHU5ZWJlXHU5ZWNlXHU1OGE4XHU5ZjUyXHU1MTEyXHU1MTE4XHU1MTE0XHU1MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1''@;'; put 'put ''NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1NjY0XHU1Njc4XHU1NjZhXHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1NjYyXHU1Njc2XHU1OGMxXHU1OGJlXHU1OGM3XHU1OGM1XHU1OTZlXHU1YjFkXHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5''@;'; put 'put ''XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJlXHU2MWNhXHU2MWM4XHU2MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJjXHU2NGRhXHU2NGM0XHU2NGM3XHU2NGMyXHU2NGNkXHU2NGJmXHU2NGQyXHU2NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2''@;'; put 'put ''NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2YTU5XHU2YTZiXHU2YTU4XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2YTQ3XHU2YTM1XHU2YTVmXHU2YTQ4XHU2YjU5XHU2Yjc3XHU2YzA1XHU2ZmMyXHU2ZmIxXHU2ZmExXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkwXS5sZW5n''@;'; put 'put ''dGg7KyttKTY1NTMzIT09eFsxOTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MF1bbV1dPTQ4NjQwK20sRls0ODY0MCttXT14WzE5MF1bbV0pO2Zvcih4WzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjM1x1NmZhNFx1''@;'; put 'put ''NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRl''@;'; put 'put ''Mlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1''@;'; put 'put ''N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2UxMVx1N2UwOFx1N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1''@;'; put 'put ''ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlh''@;'; put 'put ''YVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1''@;'; put 'put ''OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt''@;'; put 'put ''IT14WzE5MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTFdW21dXT00ODg5NittLEZbNDg4OTYrbV09eFsxOTFdW21dKTtmb3IoeFsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkzMmVcdTkzMTlcdTk1YmJcdTk2YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVcdTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNcdTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3OThcdTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4MzlcdTk4''@;'; put 'put ''MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5MWJcdTk5MjFcdTk5MWFcdTk5ZWRcdTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlhZmJcdTlhZWRcdTliMjhcdTliOTFcdTlkMTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJcdTlkMWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUxMWZc''@;'; put 'put ''dTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVcdTU2ODBcdTU2OTBcdTU2ODVcdTU2ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2OGZcdTU4ZDVcdTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBcdTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhcdTVkYmNcdTVkYmFc''@;'; put 'put ''dTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNcdTVmYmRcdTYxYzlcdTYxYzJcdTYxYzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYyMzRcdTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBcdTY0ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2ZDZcdTZhODBcdTZh''@;'; put 'put ''OTRcdTZhODRcdTZhYTJcdTZhOWNcdTZhZGJcdTZhYTNcdTZhN2VcdTZhOTdcdTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVcdTZiZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZmZGZcdTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJcdTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlcdTZmZDVcdTZmZWVc''@;'; put 'put ''dTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVcdTcxZTZcdTcxZTVcdTcxZWRcdTcxZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcyNDZcdTczNzBcdTczNzJcdTc0YTlcdTc0YjBcdTc0YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3YWNcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxtPTA7bSE9eFsxOTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkyXVttXV09NDkxNTIrbSxGWzQ5MTUyK21dPXhbMTkyXVttXSk7Zm9yKHhbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU3N2E3XHU3N2FkXHU3N2VmXHU3OGY3XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFhXHU3YTU3XHU3YWJmXHU3YzA3XHU3YzBkXHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3''@;'; put 'put ''ZTJlXHU3ZTNlXHU3ZTQ2XHU3ZTM3XHU3ZTMyXHU3ZTQzXHU3ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3ZTM5XHU3ZTQ4XHU3ZTM1XHU3ZTNmXHU3ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcxXHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJh''@;'; put 'put ''XHU4MWMyXHU4MWMwXHU4MWJmXHU4MWJkXHU4MWM5XHU4MWJlXHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4NWE4XHU4NThhXHU4NjY3''@;'; put 'put ''XHU4N2MwXHU4N2QxXHU4N2IzXHU4N2QyXHU4N2M2XHU4N2FiXHU4N2JiXHU4N2JhXHU4N2M4XHU4N2NiXHU4OTNiXHU4OTM2XHU4OTQ0XHU4OTM4XHU4OTNkXHU4OWFjXHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEwXHU4YzQxXHU4YzNmXHU4''@;'; put 'put ''YzczXHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4Y2Y4XHU4Y2ZiXHU4ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4ZTRhXHU4ZjQ0XHU4ZjNlXHU4ZjQyXHU4ZjQ1XHU4ZjNmXHU5MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5MTljXHU5MzRkXHU5Mzgy''@;'; put 'put ''XHU5MzI4XHU5Mzc1XHU5MzRhXHU5MzY1XHU5MzRiXHU5MzE4XHU5MzdlXHU5MzZjXHU5MzViXHU5MzcwXHU5MzVhXHU5MzU0XHU5NWNhXHU5NWNiXHU5NWNjXHU5NWM4XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2XHU5OGI2XHU5OTM1XHU5''@;'; put 'put ''YTAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5M11bbV1dPTQ5NDA4K20sRls0OTQwOCttXT14WzE5M11bbV0pO2Zvcih4WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1''@;'; put 'put ''NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAx''@;'; put 'put ''MVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2''@;'; put 'put ''Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1''@;'; put 'put ''ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0''@;'; put 'put ''OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1''@;'; put 'put ''OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTRdW21dXT00OTY2NCttLEZbNDk2NjQrbV09eFsxOTRdW21dKTtmb3IoeFsxOTVdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YWRcdTk3ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlhYzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVcdTliNGRcdTliY2Fc''@;'; put 'put ''dTliYzlcdTliZmRcdTliYzhcdTliYzBcdTlkNTFcdTlkNWRcdTlkNjBcdTllZTBcdTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVcdTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVcdTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZcdTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2ZGRcdTZhZTVcdTZh''@;'; put 'put ''ZGRcdTZhZGFcdTZhZDNcdTcwMWJcdTcwMWZcdTcwMjhcdTcwMWFcdTcwMWRcdTcwMTVcdTcwMThcdTcyMDZcdTcyMGRcdTcyNThcdTcyYTJcdTczNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2''@;'; put 'put ''NWZcdTc2NjFcdTc3YzdcdTc5MTlcdTc5YjFcdTdhNmJcdTdhNjlcdTdjM2VcdTdjM2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdjNDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdlNjlcdTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdmYjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVc''@;'; put 'put ''dTg1ZTRcdTg1ZTVcdTg1ZjdcdTg3ZmJcdTg4MDVcdTg4MGRcdTg3ZjlcdTg3ZmVcdTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVcdThiNDFcdThiNWNcdThiNThcdThiNDlcdThiNWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlcdThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThl''@;'; put 'put ''NmNcdThlN2FcdThlNzRcdThmNTRcdThmNGVcdThmYWRcdTkwOGFcdTkwOGJcdTkxYjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkzZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkzZGRcdTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkzZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFc''@;'; put 'put ''dTk3MjdcdTk3NjFcdTk3ZGNcdTk3ZmJcdTk4NWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk1XVttXV09NDk5MjArbSxGWzQ5OTIwK21dPXhbMTk1XVttXSk7Zm9yKHhbMTk2XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODU4XHU5ODViXHU5OGJjXHU5OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5XHU5YjBkXHU5YmU4XHU5YmU3XHU5YmQ2XHU5YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5ZDZhXHU5ZDZjXHU5ZTkyXHU5ZTk3''@;'; put 'put ''XHU5ZTkzXHU5ZWI0XHU1MmY4XHU1NmE4XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1YjdkXHU1YmY2XHU1ZGM5XHU2MWY4XHU2MWZhXHU2NTE4XHU2NTE0XHU2NTE5XHU2NmU2XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMwXHU3MDMyXHU3MjEwXHU3MzdiXHU3''@;'; put 'put ''NGNmXHU3NjYyXHU3NjY1XHU3OTI2XHU3OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRkXHU3Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdkXHU3ZTdjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTgyXHU3ZjRjXHU4MDAwXHU4MWRhXHU4''@;'; put 'put ''MjY2XHU4NWZiXHU4NWY5XHU4NjExXHU4NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4OWJhXHU4OWY4XHU4YjcwXHU4YjZjXHU4YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4ZTg1XHU4ZTgyXHU5MWI0XHU5MWNi''@;'; put 'put ''XHU5NDE4XHU5NDAzXHU5M2ZkXHU5NWUxXHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3XHU5YTM1XHU5YzEzXHU5YzBkXHU5ZTc5XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4XHU1NmMxXHU1NmMwXHU1NmMyXHU1''@;'; put 'put ''OTE0XHU1YzZjXHU1ZGNkXHU2MWZjXHU2MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2YmIyXHU3MDRjXHU3MjFiXHU3MmE3XHU3NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4NjE3XHU4NjJkXHU4NjFhXHU4ODIz''@;'; put 'put ''XHU4ODIyXHU4ODIxXHU4ODFmXHU4OTZhXHU4OTZjXHU4OWJkXHU4Yjc0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Nl1bbV1dPTUwMTc2K20sRls1MDE3NittXT14WzE5Nl1bbV0pO2Zv''@;'; put 'put ''cih4WzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVl''@;'; put 'put ''Mlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1''@;'; put 'put ''NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4YVx1NzY2ZVx1NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2MFx1''@;'; put 'put ''N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0''@;'; put 'put ''OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1''@;'; put 'put ''ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3''@;'; put 'put ''MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTddW21dXT01MDQzMittLEZbNTA0MzIrbV09''@;'; put 'put ''eFsxOTddW21dKTtmb3IoeFsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOTZcdTgyNzdcdThkMWJcdTkxYzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlk''@;'; put 'put ''ZjlcdTlkZmFcdTllN2NcdTllN2RcdTlmMDdcdTlmNzdcdTlmNzJcdTVlZjNcdTZiMTZcdTcwNjNcdTdjNmNcdTdjNmVcdTg4M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0NzJcdTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNcdTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3Yzlc''@;'; put 'put ''dTlhNjJcdTlhNjVcdTdlOWNcdThiOWNcdThlYWFcdTkxYzVcdTk0N2RcdTk0N2VcdTk0N2NcdTljNzdcdTljNzhcdTllZjdcdThjNTRcdTk0N2ZcdTllMWFcdTcyMjhcdTlhNmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk4XVttXV09NTA2ODgr''@;'; put 'put ''bSxGWzUwNjg4K21dPXhbMTk4XVttXSk7Zm9yKHhbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTQyXHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThkXHU1NmQ3XHVmYTBjXHU1YzZlXHU1''@;'; put 'put ''ZjczXHU0ZTBmXHU1MTg3XHU0ZTBlXHU0ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0ZTNjXHU0ZWU4XHU0ZWRjXHU0ZWU5''@;'; put 'put ''XHU0ZWUxXHU0ZWRkXHU0ZWRhXHU1MjBjXHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0XHU1YzEyXHU1YzNiXHU1Yzc0XHU1YzczXHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU2YzM2XHU2YzQzXHU2YzNmXHU2YzNiXHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFlXHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0''@;'; put 'put ''ZWY0XHU0ZjEyXHU1MWIxXHU1MjEzXHU1MjA5XHU1MjEwXHU1MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1''@;'; put 'put ''XHU1YzdjXHU1YzdhXHU1YzdiXHU1YzdlXHU1ZGRmXHU1ZTc1XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2''@;'; put 'put ''NzM4XHU2NzNiXHU2NzNhXHU2NzNmXHU2NzNjXHU2NzMzXHU2YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2YzU0XHU2YzRiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIw''@;'; put 'put ''MV1bbV1dPTUxNDU2K20sRls1MTQ1NittXT14WzIwMV1bbV0pO2Zvcih4WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1''@;'; put 'put ''ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1''@;'; put 'put ''OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1''@;'; put 'put ''NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYx''@;'; put 'put ''ZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1''@;'; put 'put ''NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAyXVttXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoYWVbeFsyMDJdW21dXT01MTcxMittLEZbNTE3MTIrbV09eFsyMDJdW21dKTtmb3IoeFsyMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTlcdTY3NTVcdTY3NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3NWFcdTY3NGJc''@;'; put 'put ''dTZiZDBcdTZjMTlcdTZjMWFcdTZjNzhcdTZjNjdcdTZjNmJcdTZjODRcdTZjOGJcdTZjOGZcdTZjNzFcdTZjNmZcdTZjNjlcdTZjOWFcdTZjNmRcdTZjODdcdTZjOTVcdTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2JcdTZjOGVcdTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZcdTcyYmRcdTcy''@;'; put 'put ''YzNcdTcyYzZcdTcyYzFcdTcyYmFcdTcyYzVcdTczOTVcdTczOTdcdTczOTNcdTczOTRcdTczOTJcdTc1M2FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOWNcdTgyOTBcdTgyOGZcdTgyODVcdTgyOGVcdTgyOTFcdTgyOTNc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGFcdTgyODNcdTgyODRcdThjNzhcdThmYzlcdThmYmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkwOWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2MmRcdTRlMzNcdTRmOThcdTRmN2NcdTRmODVcdTRmN2Rc''@;'; put 'put ''dTRmODBcdTRmODdcdTRmNzZcdTRmNzRcdTRmODlcdTRmODRcdTRmNzdcdTRmNGNcdTRmOTdcdTRmNmFcdTRmOWFcdTRmNzlcdTRmODFcdTRmNzhcdTRmOTBcdTRmOWNcdTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJcdTRmNmVcdTUxOWVcdTUxYmNcdTUxYmVcdTUyMzVcdTUy''@;'; put 'put ''MzJcdTUyMzNcdTUyNDZcdTUyMzFcdTUyYmNcdTUzMGFcdTUzMGJcdTUzM2NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N2ZcdTU0ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0NjZcdTU0OGRcdTU0NmZcdTU0NjFcdTU0NjBcdTU0OThc''@;'; put 'put ''dTU0NjNcdTU0NjdcdTU0NjRcdTU2ZjdcdTU2ZjlcdTU3NmZcdTU3NzJcdTU3NmRcdTU3NmJcdTU3NzFcdTU3NzBcdTU3NzZcdTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNcdTU3NzRcdTU3NjJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwM11b''@;'; put 'put ''bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAzXVttXV09NTE5NjgrbSxGWzUxOTY4K21dPXhbMjAzXVttXSk7Zm9yKHhbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJh''@;'; put 'put ''XHU1OWNmXHU1OWNlXHU1OWIyXHU1OWNjXHU1OWMxXHU1OWI2XHU1OWJjXHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMwXHU1OWM4XHU1OWI0XHU1OWM3XHU1YjYyXHU1YjY1XHU1YjkzXHU1Yjk1XHU1YzQ0XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1''@;'; put 'put ''Y2FjXHU1YzlmXHU1Y2EzXHU1Y2FkXHU1Y2EyXHU1Y2FhXHU1Y2E3XHU1YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1ZTE3XHU1ZTE0XHU1ZTE5XHU1ZjI4XHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjU0XHU1ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5''@;'; put 'put ''XHU2MDMyXHU2MDBiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDM0XHU2MDBhXHU2MDE3XHU2MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2MDIyXHU2MDBkXHU2MDEwXHU2MDJlXHU2MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2MDFjXHU2MjE0XHU2MjNkXHU2MmFk''@;'; put 'put ''XHU2MmI0XHU2MmQxXHU2MmJlXHU2MmFhXHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2MmIwXHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJiXHU2NjA5XHU2NWZjXHU2NjA0XHU2NjEyXHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBiXHU2NjBkXHU2NjA1XHU2NWZkXHU2''@;'; put 'put ''NjExXHU2NjEwXHU2NmY2XHU2NzBhXHU2Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2XHU2Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2NzdhXHU2NzlmXHU2NzkxXHU2Nzk5XHU2NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2Nzc5XHU2Nzk0XHU2YjI1XHU2Yjgw''@;'; put 'put ''XHU2YjdlXHU2YmRlXHU2YzFkXHU2YzkzXHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2Y2U3XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2JhXHU2Y2MzXHU2Y2M2XHU2Y2VkXHU2Y2YyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA0XS5sZW5ndGg7KyttKTY1''@;'; put 'put ''NTMzIT09eFsyMDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNF1bbV1dPTUyMjI0K20sRls1MjIyNCttXT14WzIwNF1bbV0pO2Zvcih4WzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4''@;'; put 'put ''YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1''@;'; put 'put ''NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1Nzdm''@;'; put 'put ''OFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIy''@;'; put 'put ''MFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1''@;'; put 'put ''OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZi''@;'; put 'put ''M1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNV0u''@;'; put 'put ''bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDVdW21dXT01MjQ4MCttLEZbNTI0ODArbV09eFsyMDVdW21dKTtmb3IoeFsyMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzNcdTgz''@;'; put 'put ''MGRcdTU0YjdcdTU0YWVcdTU0ZDZcdTU0YjZcdTU0YzVcdTU0YzZcdTU0YTBcdTU0NzBcdTU0YmNcdTU0YTJcdTU0YmVcdTU0NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3OWVcdTU3OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJcdTU3OTRcdTU3OThcdTU3OGZcdTU3OTlcdTU3YTVc''@;'; put 'put ''dTU3OWFcdTU3OTVcdTU4ZjRcdTU5MGRcdTU5NTNcdTU5ZTFcdTU5ZGVcdTU5ZWVcdTVhMDBcdTU5ZjFcdTU5ZGRcdTU5ZmFcdTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRcdTU5ZjJcdTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRcdTViYThcdTVj''@;'; put 'put ''NGNcdTVjZDBcdTVjZDhcdTVjY2NcdTVjZDdcdTVjY2JcdTVjZGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjZGVcdTVjZGFcdTVjYzlcdTVjYzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVjY2ZcdTVjYzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVk''@;'; put 'put ''ZjlcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjBcdTVlMjRcdTVlYjBcdTVlYTRcdTVlYTJcdTVlOWJcdTVlYTNcdTVlYTVcdTVmMDdcdTVmMmVcdTVmNTZcdTVmODZcdTYwMzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVcdTYwNTNcdTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBc''@;'; put 'put ''dTYwNDJcdTYwNWZcdTYwMjRcdTYwNDRcdTYwNThcdTYwNjZcdTYwNmVcdTYyNDJcdTYyNDNcdTYyY2ZcdTYzMGRcdTYzMGJcdTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJcdTYyZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYzMDBcdTYzMTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYy''@;'; put 'put ''ZjBcdTY1NDFcdTY1NDNcdTY1YWFcdTY1YmZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MWNcdTY2MjZcdTY2MjJcdTY2MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2MzRcdTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFcdTY3ZjJcdTY3YzhcdTY3YmFcdWZmZmQiLnNwbGl0KCIiKSxt''@;'; put 'put ''PTA7bSE9eFsyMDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA2XVttXV09NTI3MzYrbSxGWzUyNzM2K21dPXhbMjA2XVttXSk7Zm9yKHhbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU2N2RjXHU2N2JiXHU2N2Y4XHU2N2Q4XHU2N2MwXHU2N2I3XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2RmXHU2N2I1XHU2N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2N2VlXHU2N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2XHU2N2VkXHU2N2Nj''@;'; put 'put ''XHU2N2FlXHU2N2U2XHU2N2RiXHU2N2ZhXHU2N2M5XHU2N2NhXHU2N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2YjgyXHU2Yjg0XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUwXHU2YzIwXHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2ZDBhXHU2Y2RhXHU2''@;'; put 'put ''ZDMzXHU2ZDA0XHU2ZDE5XHU2ZDNhXHU2ZDFhXHU2ZDExXHU2ZDAwXHU2ZDFkXHU2ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDAxXHU2ZDE4XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2''@;'; put 'put ''ZDEwXHU3MGI3XHU3MDlmXHU3MGJlXHU3MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQxXHU3MjQ5XHU3MjRhXHU3MjZjXHU3MjcwXHU3MjczXHU3MjZlXHU3MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2My''@;'; put 'put ''XHU3M2M4XHU3M2M1XHU3M2I5XHU3M2I2XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3M2MzXHU3M2M2XHU3M2I4XHU3M2NiXHU3NGVjXHU3NGVlXHU3NTJlXHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3''@;'; put 'put ''NzBhXHU3NmY3XHU3NmZiXHU3NmZhXHU3N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEwXHU3ODBmXHU3ODBlXHU3ODA5XHU3ODAzXHU3ODEzXHU3OTRhXHU3OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksbT0wO20hPXhbMjA3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwN11bbV1dPTUyOTkyK20sRls1Mjk5MittXT14WzIwN11bbV0pO2Zvcih4WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBl''@;'; put 'put ''MFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1''@;'; put 'put ''ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1''@;'; put 'put ''ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0''@;'; put 'put ''YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1''@;'; put 'put ''NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUw''@;'; put 'put ''NVx1NTRmMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDhdW21dXT01MzI0OCttLEZbNTMyNDgrbV09eFsyMDhdW21dKTtmb3IoeFsyMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGFcdTU0ZmJcdTU0ZjdcdTU0ZjhcdTU0ZTBcdTU1MGVcdTU1MDNcdTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2NcdTU4MzJcdTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNcdTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3''@;'; put 'put ''ZDBcdTU3YjlcdTU3YzFcdTU5MGVcdTU5NGFcdTVhMTlcdTVhMTZcdTVhMmRcdTVhMmVcdTVhMTVcdTVhMGZcdTVhMTdcdTVhMGFcdTVhMWVcdTVhMzNcdTViNmNcdTViYTdcdTViYWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVjZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBc''@;'; put 'put ''dTVjZjlcdTVlMjlcdTVlMjhcdTVlYThcdTVlYWVcdTVlYWFcdTVlYWNcdTVmMzNcdTVmMzBcdTVmNjdcdTYwNWRcdTYwNWFcdTYwNjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNDFcdTYwYTJcdTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNc''@;'; put 'put ''dTYwOTVcdTYwOWJcdTYwOTdcdTYwODdcdTYwOWNcdTYwOGVcdTYyMTlcdTYyNDZcdTYyZjJcdTYzMTBcdTYzNTZcdTYzMmNcdTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYzMjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYz''@;'; put 'put ''MmRcdTYzNDdcdTYzMzNcdTYzNWFcdTYzNTFcdTYzMzhcdTYzNTdcdTYzNDBcdTYzNDhcdTY1NGFcdTY1NDZcdTY1YzZcdTY1YzNcdTY1YzRcdTY1YzJcdTY2NGFcdTY2NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZcdTY4MWFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJc''@;'; put 'put ''dTY4NGZcdTY4MTZcdTY4MzFcdTY4MWNcdTY4MzVcdTY4MmJcdTY4MmRcdTY4MmZcdTY4NGVcdTY4NDRcdTY4MzRcdTY4MWRcdTY4MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZiMmNcdTZiMmZcdTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgw''@;'; put 'put ''ODJcdTZiODhcdTZiZTZcdTZiZTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA5XVttXV09NTM1MDQrbSxGWzUzNTA0K21dPXhbMjA5XVttXSk7Zm9yKHhbMjEwXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2XHU2ZDBkXHU2ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2ZDhkXHU2ZGVmXHU2ZDdmXHU2''@;'; put 'put ''ZDg2XHU2ZDVlXHU2ZDY3XHU2ZDYwXHU2ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2ZDE2XHU2ZDgzXHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQxXHU3MGRkXHU3MGNiXHU3ZjM5''@;'; put 'put ''XHU3MGUyXHU3MGQ3XHU3MGQyXHU3MGRlXHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNlXHU3MGUxXHU3MjQyXHU3Mjc4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZl''@;'; put 'put ''XHU3MmY2XHU3MmYzXHU3MmZiXHU3MzAxXHU3M2QzXHU3M2Q5XHU3M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0XHU3M2RkXHU3M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3''@;'; put 'put ''NTVmXHU3NWIwXHU3NWMxXHU3NWJiXHU3NWM0XHU3NWMwXHU3NWJmXHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3NzIzXHU3NzExXHU3NzE1XHU3NzE5XHU3NzFhXHU3NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJm''@;'; put 'put ''XHU3ODI4XHU3ODJlXHU3ODJiXHU3ODIxXHU3ODI5XHU3ODMzXHU3ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVjXHU3OTUzXHU3OTUyXHU3OTUxXHU3OWViXHU3OWVjXHU3OWUwXHU3OWVlXHU3OWVkXHU3OWVhXHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3''@;'; put 'put ''YThiXHU3YThjXHU3YThhXHU3YTg3XHU3YWQ4XHU3YjEwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMF1bbV1dPTUzNzYwK20sRls1Mzc2MCttXT14WzIxMF1bbV0pO2Zvcih4WzIxMV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1''@;'; put 'put ''N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEw''@;'; put 'put ''MVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMy''@;'; put 'put ''YVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1''@;'; put 'put ''ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3''@;'; put 'put ''NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1''@;'; put 'put ''OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjExXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTFdW21dXT01NDAxNittLEZbNTQwMTYrbV09eFsyMTFdW21d''@;'; put 'put ''KTtmb3IoeFsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkxZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZcdTliMmZcdTRlN2ZcdTUwNzBcdTUwNmFcdTUwNjFcdTUwNWVc''@;'; put 'put ''dTUwNjBcdTUwNTNcdTUwNGJcdTUwNWRcdTUwNzJcdTUwNDhcdTUwNGRcdTUwNDFcdTUwNWJcdTUwNGFcdTUwNjJcdTUwMTVcdTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUwNzNcdTUwNTdcdTUwNTFcdTUxZDBcdTUyNmJcdTUyNmRcdTUy''@;'; put 'put ''NmNcdTUyNmVcdTUyZDZcdTUyZDNcdTUzMmRcdTUzOWNcdTU1NzVcdTU1NzZcdTU1M2NcdTU1NGRcdTU1NTBcdTU1MzRcdTU1MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGNcdTU1''@;'; put 'put ''MzJcdTU1NjVcdTU1NGVcdTU1MzlcdTU1NDhcdTU1MmRcdTU1M2JcdTU1NDBcdTU1NGJcdTU3MGFcdTU3MDdcdTU3ZmJcdTU4MTRcdTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNcdTU3Y2ZcdTU4MDdcdTU3ZWVcdTU3ZTNc''@;'; put 'put ''dTU3ZjJcdTU3ZTVcdTU3ZWNcdTU3ZTFcdTU4MGVcdTU3ZmNcdTU4MTBcdTU3ZTdcdTU4MDFcdTU4MGNcdTU3ZjFcdTU3ZTlcdTU3ZjBcdTU4MGRcdTU4MDRcdTU5NWNcdTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVhNmRcdTVhNTBcdTVhNWZcdTVhNjVcdTVh''@;'; put 'put ''NmNcdTVhNTNcdTVhNjRcdTVhNTdcdTVhNDNcdTVhNWRcdTVhNTJcdTVhNDRcdTVhNWJcdTVhNDhcdTVhOGVcdTVhM2VcdTVhNGRcdTVhMzlcdTVhNGNcdTVhNzBcdTVhNjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVcdTViYzFcdTViYzBcdTVjNTlcdTVkMWVc''@;'; put 'put ''dTVkMGJcdTVkMWRcdTVkMWFcdTVkMjBcdTVkMGNcdTVkMjhcdTVkMGRcdTVkMjZcdTVkMjVcdTVkMGZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEyXVttXV09NTQyNzIrbSxGWzU0Mjcy''@;'; put 'put ''K21dPXhbMjEyXVttXSk7Zm9yKHhbMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZDMwXHU1ZDEyXHU1ZDIzXHU1ZDFmXHU1ZDJlXHU1ZTNlXHU1ZTM0XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4''@;'; put 'put ''XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2MDhhXHU2MDkwXHU2MDg2XHU2MGJlXHU2MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNmXHU2MGU0XHU2MGQ5XHU2MGRkXHU2MGM4XHU2MGIxXHU2MGRiXHU2MGI3XHU2MGNhXHU2MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2''@;'; put 'put ''MzgyXHU2MzdkXHU2M2JkXHU2MzllXHU2M2FkXHU2MzlkXHU2Mzk3XHU2M2FiXHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2MzZlXHU2M2FmXHU2Mzc1XHU2MzljXHU2MzZkXHU2M2FlXHU2MzdjXHU2M2E0XHU2MzNiXHU2MzlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU2Mzc4XHU2Mzg1XHU2MzgxXHU2MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2ODc5XHU2ODg3XHU2ODkwXHU2ODljXHU2ODZkXHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2XHU2ODZmXHU2OGEzXHU2OGFj''@;'; put 'put ''XHU2OGE5XHU2ODc1XHU2ODc0XHU2OGIyXHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgwXHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2XHU2ODhiXHU2OGEwXHU2ODg5XHU2OGE0XHU2ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2ODhhXHU2ODdkXHU2YjM2XHU2''@;'; put 'put ''YjMzXHU2YjM3XHU2YjM4XHU2YjkxXHU2YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2ZGUyXHU2ZGI3XHU2ZGY2XHU2ZGQ0XHU2ZTAwXHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2XHU2ZGJlXHU2ZGU1XHU2ZGRj''@;'; put 'put ''XHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2ZGNhXHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxM11bbV1dPTU0''@;'; put 'put ''NTI4K20sRls1NDUyOCttXT14WzIxM11bbV0pO2Zvcih4WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzEx''@;'; put 'put ''N1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1''@;'; put 'put ''NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1Nzgy''@;'; put 'put ''Nlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1''@;'; put 'put ''N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2Qy''@;'; put 'put ''OFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb''@;'; put 'put ''eFsyMTRdW21dXT01NDc4NCttLEZbNTQ3ODQrbV09eFsyMTRdW21dKTtmb3IoeFsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgxMWJcdTgx''@;'; put 'put ''MmRcdTgxMWZcdTgxMmNcdTgxMWVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgxMjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgyM2FcdTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzYTNcdTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgzOGZcdTgzODFcdTgzOTVcdTgzOTlc''@;'; put 'put ''dTgzNzVcdTgzOTRcdTgzYTlcdTgzN2RcdTgzODNcdTgzOGNcdTgzOWRcdTgzOWJcdTgzYWFcdTgzOGJcdTgzN2VcdTgzYTVcdTgzYWZcdTgzODhcdTgzOTdcdTgzYjBcdTgzN2ZcdTgzYTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZcdTg2YmZcdTg2YjdcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2YzJcdTg2YzFcdTg2YzVcdTg2YmFcdTg2YjBcdTg2YzhcdTg2YjlcdTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRcdTg2YmJcdTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJcdTg4ODlcdTg4OTVcdTg4YThcdTg4YTJcdTg4YWFcdTg4''@;'; put 'put ''OWFcdTg4OTFcdTg4YTFcdTg4OWZcdTg4OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4OTdcdTg4YTRcdTg4YWNcdTg4OGNcdTg4OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5ZDlcdTg5ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThjMzlcdThjM2JcdThjNWNcdThjNWRcdThjN2RcdThjYTVc''@;'; put 'put ''dThkN2RcdThkN2JcdThkNzlcdThkYmNcdThkYzJcdThkYjlcdThkYmZcdThkYzFcdThlZDhcdThlZGVcdThlZGRcdThlZGNcdThlZDdcdThlZTBcdThlZTFcdTkwMjRcdTkwMGJcdTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZcdTkwZWFcdTkwZjBcdTkwZjRcdTkwZjJcdTkwZjNcdTkw''@;'; put 'put ''ZDRcdTkwZWJcdTkwZWNcdTkwZTlcdTkxNTZcdTkxNThcdTkxNWFcdTkxNTNcdTkxNTVcdTkxZWNcdTkxZjRcdTkxZjFcdTkxZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkxZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNV1bbV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGFlW3hbMjE1XVttXV09NTUwNDArbSxGWzU1MDQwK21dPXhbMjE1XVttXSk7Zm9yKHhbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2XHU5NTg4XHU5''@;'; put 'put ''NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5NjZmXHU5NmJmXHU5NzZhXHU5ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1MDk1XHU1MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1MDgzXHU1MDhjXHU1MDhlXHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1MWQ0XHU1MzEy''@;'; put 'put ''XHU1MzExXHU1M2E0XHU1M2E3XHU1NTkxXHU1NWE4XHU1NWE1XHU1NWFkXHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkzXHU1NTg4XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEzXHU1NTkyXHU1NWE0XHU1NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBjXHU1ODI5XHU1''@;'; put 'put ''ODM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIzXHU1ODI4XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1ODFjXHU1ODFiXHU1ODMzXHU1ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1''@;'; put 'put ''YWFmXHU1YTk0XHU1YTlmXHU1YTdhXHU1YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1YTk1XHU1YWFlXHU1YTM3XHU1YTg0XHU1YThhXHU1YTk3XHU1YTgzXHU1YThiXHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVh''@;'; put 'put ''XHU1YmNkXHU1YmNiXHU1YmQ0XHU1YmQxXHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZiXHU1ZDQxXHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1ZDUxXHU1ZDRlXHU1ZDU1XHU1ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1''@;'; put 'put ''ZDM4XHU1ZDNjXHU1ZDMyXHU1ZDM2XHU1ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1ZmFiXHU2MGM5XHU2MGI5XHU2MGNjXHU2MGUyXHU2MGNlXHU2MGM0XHU2MTE0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsy''@;'; put 'put ''MTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNl1bbV1dPTU1Mjk2K20sRls1NTI5NittXT14WzIxNl1bbV0pO2Zvcih4WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1''@;'; put 'put ''NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNlOFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNm''@;'; put 'put ''Mlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1''@;'; put 'put ''NjVhZVx1NjVkMFx1NjVkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1''@;'; put 'put ''NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1Njhj''@;'; put 'put ''OFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1''@;'; put 'put ''NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1NmUyZVx1NmU1ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxN10ubGVuZ3RoOysr''@;'; put 'put ''bSk2NTUzMyE9PXhbMjE3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTddW21dXT01NTU1MittLEZbNTU1NTIrbV09eFsyMTddW21dKTtmb3IoeFsyMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlNjhcdTZlNWNcdTZlNjFc''@;'; put 'put ''dTZlMzFcdTZlMjhcdTZlNjBcdTZlNzFcdTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZlNTNcdTZlNjVcdTZlMjdcdTZlNzhcdTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlcdTZlNTJcdTZlNjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcwZmJcdTcxMmVcdTcxMzFcdTcx''@;'; put 'put ''MjNcdTcxMjVcdTcxMjJcdTcxMzJcdTcxMWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJcdTcyNWFcdTcyODhcdTcyODlcdTcyODZcdTcyODVcdTcyOGJcdTczMTJcdTczMGJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZcdTczMjNcdTczMzVcdTczMGNc''@;'; put 'put ''dTc0MmVcdTc0MmNcdTc0MzBcdTc0MmJcdTc0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWFcdTc0MjFcdTc0MmRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0ZmJcdTc1MmZcdTc1NmZcdTc1NmNcdTc1ZTdcdTc1ZGFc''@;'; put 'put ''dTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1ZGZcdTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJcdTc2ZGFcdTc3NDZcdTc3NDdcdTc3NDRcdTc3NGRcdTc3NDVcdTc3NGFcdTc3NGVcdTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NWNcdTc4NmRcdTc4NzFcdTc4NmFcdTc4''@;'; put 'put ''NmVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJcdTc5NzBcdTdhMDJcdTdhMGFcdTdhMDNcdTdhMGNcdTdhMDRcdTdhOTlcdTdhZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdiNGNcdTdiNGVcdTdiNDBcdTdiNThcdTdiNDVcdTdjYTJc''@;'; put 'put ''dTdjOWVcdTdjYThcdTdjYTFcdTdkNThcdTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZcdTdkNjdcdTdkNmFcdTdkNGZcdTdkNmRcdTdkNWNcdTdkNmJcdTdkNTJcdTdkNTRcdTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2ZcdTdmNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsy''@;'; put 'put ''MThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE4XVttXV09NTU4MDgrbSxGWzU1ODA4K21dPXhbMjE4XVttXSk7Zm9yKHhbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjY2''@;'; put 'put ''XHU3ZmEyXHU3ZmEwXHU3ZmExXHU3ZmQ3XHU4MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUyXHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRkXHU4MTNhXHU4MWU2XHU4MWVlXHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNkXHU4MjNmXHU4Mjc1XHU4''@;'; put 'put ''MzNiXHU4M2NmXHU4M2Y5XHU4NDIzXHU4M2MwXHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4M2JmXHU4NDAxXHU4M2RkXHU4M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4M2Q2XHU4M2Y1XHU4M2M5''@;'; put 'put ''XHU4NDA5XHU4NDBmXHU4M2RlXHU4NDExXHU4NDA2XHU4M2MyXHU4M2YzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2Q1XHU4M2ZhXHU4M2M3XHU4M2QxXHU4M2VhXHU4NDEzXHU4M2MzXHU4M2VjXHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFi''@;'; put 'put ''XHU4M2RiXHU4M2ZlXHU4NmQ4XHU4NmUyXHU4NmU2XHU4NmQzXHU4NmUzXHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRjXHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4XHU4NmQxXHU4ODQ4XHU4ODU2XHU4ODU1XHU4OGJhXHU4OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4''@;'; put 'put ''OGJjXHU4OGI3XHU4OGJkXHU4OGIyXHU4OTAxXHU4OGM5XHU4OTk1XHU4OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4YTQwXHU4YTU3XHU4YTU4XHU4YTQ0XHU4YTQ1XHU4YTUyXHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVm''@;'; put 'put ''XHU4YzgxXHU4YzgwXHU4Y2JhXHU4Y2JlXHU4Y2IwXHU4Y2I5XHU4Y2I1XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQzXHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRjXHU4ZGNmXHU4ZGQ1XHU4ZGQ5XHU4ZGM4XHU4ZGQ3XHU4ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksbT0wO20hPXhbMjE5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOV1bbV1dPTU2MDY0K20sRls1NjA2NCttXT14WzIxOV1bbV0pO2Zvcih4WzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1''@;'; put 'put ''OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIx''@;'; put 'put ''N1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgw''@;'; put 'put ''N1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1''@;'; put 'put ''NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2''@;'; put 'put ''OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNlx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjBdW21dXT01NjMyMCttLEZbNTYzMjArbV09eFsyMjBdW21dKTtmb3IoeFsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZcdTVhY2RcdTVhYjlcdTVhOTBcdTViZDZcdTViZDhcdTViZDlcdTVjMWZcdTVjMzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVkNmNcdTVkNWVcdTVkNjhcdTVkNjdcdTVkNjJcdTVkZjBc''@;'; put 'put ''dTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRcdTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVlY2JcdTVlYzdcdTVmNDBcdTVmYWZcdTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFcdTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZcdTYxMmZcdTYxNGZcdTYxMjlcdTYxNDBcdTYyMjBcdTkx''@;'; put 'put ''NjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYzYzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJcdTY0MDlcdTY0MjBcdTY0MjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0MjNcdTY0''@;'; put 'put ''MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0MGJcdTYzZTdcdTY0MWJcdTY0MmVcdTY0MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2OGJcdTY2OGFcdTY2OTlc''@;'; put 'put ''dTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZcdTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFcdTY5M2ZcdTY5NDVcdTY5NmFcdTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlcdTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBcdTY5NzhcdTY5MzRcdTY5''@;'; put 'put ''NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5M2JcdTY5NGJcdTY5MzdcdTY5NWNcdTY5NGZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZiNDFcdTZiOWJcdWZhMGRc''@;'; put 'put ''dTZiZmJcdTZiZmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIxXVttXV09NTY1NzYrbSxGWzU2NTc2K21dPXhbMjIxXVttXSk7Zm9yKHhbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YmY5XHU2YmY3XHU2YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2ZTk0XHU2ZWEwXHU2ZWIxXHU2ZWI5XHU2ZWM2XHU2ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIw''@;'; put 'put ''XHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIyXHU2ZWJlXHU2ZWMzXHU2ZWRjXHU2ZWQ4XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThkXHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIzXHU2ZWQwXHU2ZWNhXHU2ZTk3XHU2ZWFlXHU2ZWEzXHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3''@;'; put 'put ''MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3MTZhXHU3MTYxXHU3MTQyXHU3MTU4XHU3MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3MTUwXHU3MTUzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTQ0XHU3MTRkXHU3MTVhXHU3MjRmXHU3MjhkXHU3MjhjXHU3MjkxXHU3''@;'; put 'put ''MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3MzNiXHU3MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3NDUyXHU3NDUxXHU3NDU3XHU3NDQwXHU3NDRmXHU3NDUwXHU3NDRlXHU3NDQyXHU3NDQ2XHU3NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3NGZlXHU3NGZkXHU3NTFk''@;'; put 'put ''XHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVmXHU3NjBmXHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEwXHU3NWZiXHU3NWY2XHU3NWVkXHU3NWY1XHU3NWZkXHU3Njk5XHU3NmI1XHU3NmRkXHU3NzU1XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2XHU3NzVhXHU3NzY5XHU3''@;'; put 'put ''NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3N2UwXHU3ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3ODg2XHU3OGExXHU3ODgzXHU3ODc5XHU3ODk5XHU3ODgwXHU3ODk2XHU3ODdiXHU3OTdjXHU3OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3YTE4XHU3YTE5XHU3YTEy''@;'; put 'put ''XHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMl1bbV1dPTU2ODMyK20sRls1NjgzMittXT14WzIyMl1bbV0pO2Zvcih4WzIyM109Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2''@;'; put 'put ''M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1''@;'; put 'put ''N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1''@;'; put 'put ''ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQz''@;'; put 'put ''NFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1''@;'; put 'put ''ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhj''@;'; put 'put ''Y1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjNdW21dXT01NzA4OCttLEZbNTcwODgrbV09eFsyMjNdW21dKTtmb3IoeFsy''@;'; put 'put ''MjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTFcdTg5ZTBcdTg5ZTJcdTg5ZGNcdTg5ZTZcdThhNzZcdThhODZcdThhN2ZcdThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThhODFcdThhNzRcdThh''@;'; put 'put ''N2FcdThjM2NcdThjNGJcdThjNGFcdThjNjVcdThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVcdThjY2NcdThkNjhcdThkNjlcdThkOTFcdThkOGNcdThkOGVcdThkOGZcdThkOGRcdThkOTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFcdThkZWVcdThkZDBc''@;'; put 'put ''dThkZTlcdThkZTNcdThkZTJcdThkZTdcdThkZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThmMDFcdThmMDBcdThmMDVcdThmMDdcdThmMDhcdThmMDJcdThmMGJcdTkwNTJcdTkwM2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNDRcdTkwNDlcdTkwM2Rc''@;'; put 'put ''dTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFcdTkxMTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkxNmZcdTkyNDhcdTkyNTJcdTkyMzBcdTkyM2FcdTkyNjZcdTkyMzNcdTkyNjVcdTkyNWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTkyNmRcdTkyNmNcdTkyNGZcdTkyNjBcdTkyNjdcdTky''@;'; put 'put ''NmZcdTkyMzZcdTkyNjFcdTkyNzBcdTkyMzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVcdTkyNTNcdTkyNGNcdTkyNTZcdTkyMzJcdTk1OWZcdTk1OWNcdTk1OWVcdTk1OWJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2VcdTk2ZmFcdTk2ZmRcdTk2ZjhcdTk2ZjVcdTk3NzNc''@;'; put 'put ''dTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZcdTk4MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5YWZcdTk5YjJcdTk5YjBcdTk5YjVcdTlhYWRcdTlhYWJcdTliNWJcdTljZWFcdTljZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUwZDRcdTUwZDdcdTUwZThcdTUwZjNcdTUwZGJcdTUw''@;'; put 'put ''ZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUwZWNcdTUwZjBcdTUwZWZcdTUwZTNcdTUwZTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI0XVttXV09NTczNDQrbSxGWzU3MzQ0K21dPXhbMjI0''@;'; put 'put ''XVttXSk7Zm9yKHhbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1NjAxXHU1''@;'; put 'put ''NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1NjA0XHU1NWZmXHU1NWY5XHU1ODg5XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2XHU1ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZlXHU1OTZi''@;'; put 'put ''XHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1XHU1YWVhXHU1YWRhXHU1YWVkXHU1YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1YWRiXHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmUz''@;'; put 'put ''XHU1YzYzXHU1ZDgyXHU1ZDgwXHU1ZDdkXHU1ZDg2XHU1ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1ZDdlXHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdmXHU1ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1''@;'; put 'put ''ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZmXHU1ZmI2XHU2MTJjXHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUyXHU2MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2MTc0XHU2MTU0XHU2MTdhXHU2MTViXHU2MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJi''@;'; put 'put ''XHU2NDJiXHU2NDRkXHU2NDViXHU2NDVkXHU2NDc0XHU2NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2NGE2XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVjXHU2NDRiXHU2NDUzXHU2NDYwXHU2NDUwXHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2''@;'; put 'put ''NTczXHU2NWEwXHU2NmExXHU2NmEwXHU2NjlmXHU2NzA1XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNV1bbV1dPTU3NjAwK20sRls1''@;'; put 'put ''NzYwMCttXT14WzIyNV1bbV0pO2Zvcih4WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1''@;'; put 'put ''NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJh''@;'; put 'put ''MFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVlZFx1NmYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1''@;'; put 'put ''NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUw''@;'; put 'put ''Mlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1''@;'; put 'put ''Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjZdW21d''@;'; put 'put ''XT01Nzg1NittLEZbNTc4NTYrbV09eFsyMjZdW21dKTtmb3IoeFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdhMjZcdTdhYThc''@;'; put 'put ''dTdhYWJcdTdhYWNcdTdhZWVcdTdiODhcdTdiOWNcdTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZcdTdiOGRcdTdiOGNcdTdiOWJcdTdiOGVcdTdiODVcdTdiOThcdTUyODRcdTdiOTlcdTdiYTRcdTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJcdTdkYTNcdTdk''@;'; put 'put ''YWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdkOWRcdTdkY2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdkY2NcdTdkYWZcdTdkYjlcdTdkOTZcdTdkYmNcdTdkOWZcdTdkYTZcdTdkYWVcdTdkYTlcdTdkYTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGVcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMjRcdTgwNWRcdTgwNWNcdTgxODlcdTgxODZcdTgxODNcdTgxODdcdTgxOGRcdTgxOGNcdTgxOGJcdTgyMTVcdTg0OTdcdTg0YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNcdTg0YWVcdTg0YWJcdTg0YjlcdTg0YjRcdTg0YzFc''@;'; put 'put ''dTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFcdTg0ZDBcdTg0OWRcdTg0YTdcdTg0YmJcdTg0YTJcdTg0OTRcdTg0YzdcdTg0Y2NcdTg0OWJcdTg0YTlcdTg0YWZcdTg0YThcdTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBcdTg0OTFcdTg2''@;'; put 'put ''NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NmJcdTg3NDBcdTg3MmVcdTg3MWVcdTg3MjFcdTg3MTlcdTg3MWJcdTg3NDNcdTg3MmNcdTg3NDFcdTg3M2VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3Mjdc''@;'; put 'put ''dTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBcdTg3MTFcdTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4ZjJcdTg4ZmFcdTg4ZmVcdTg4ZWVcdTg4ZmNcdTg4ZjZcdTg4ZmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyN11bbV0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KGFlW3hbMjI3XVttXV09NTgxMTIrbSxGWzU4MTEyK21dPXhbMjI3XVttXSk7Zm9yKHhbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGYwXHU4OGVjXHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTllXHU4OWU5XHU4OWVi''@;'; put 'put ''XHU4OWU4XHU4YWFiXHU4YTk5XHU4YThiXHU4YTkyXHU4YThmXHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2NmXHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAyXHU4ZGZmXHU4ZTBkXHU4ZGZkXHU4ZTBhXHU4ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4ZTAwXHU4ZTA0XHU4''@;'; put 'put ''ZjEwXHU4ZjExXHU4ZjBlXHU4ZjBkXHU5MTIzXHU5MTFjXHU5MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5MTc5XHU5MTczXHU5MmE1XHU5MmE0XHU5Mjc2XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFhXHU5MjhkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE2XHU5MjlhXHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmExXHU5MjhhXHU5Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3''@;'; put 'put ''XHU5MmE5XHU5MjlkXHU5MjhiXHU5MjJkXHU5NjllXHU5NmExXHU5NmZmXHU5NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5NzgzXHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5ODE2XHU5OGFkXHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5''@;'; put 'put ''OTljXHU5OWMzXHU5OWI5XHU5OWJiXHU5OWJhXHU5OWMyXHU5OWJkXHU5OWM3XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZmXHU1MTAzXHU1MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZl''@;'; put 'put ''XHU1MTBiXHU1MTBjXHU1MGZkXHU1MTBhXHU1MjhiXHU1MjhjXHU1MmYxXHU1MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2XHU1NjU4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjhdW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzIyOF1bbV1dPTU4MzY4K20sRls1ODM2OCttXT14WzIyOF1bbV0pO2Zvcih4WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYz''@;'; put 'put ''OFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1''@;'; put 'put ''NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFh''@;'; put 'put ''Mlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4''@;'; put 'put ''Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1''@;'; put 'put ''NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1Njlm''@;'; put 'put ''Nlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOV0ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMjI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjldW21dXT01ODYyNCttLEZbNTg2MjQrbV09eFsyMjldW21dKTtmb3IoeFsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmOGRcdTZmODlcdTZmOGNcdTZmNjJcdTZm''@;'; put 'put ''NGZcdTZmODVcdTZmNWFcdTZmOTZcdTZmNzZcdTZmNmNcdTZmODJcdTZmNTVcdTZmNzJcdTZmNTJcdTZmNTBcdTZmNTdcdTZmOTRcdTZmOTNcdTZmNWRcdTZmMDBcdTZmNjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJcdTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNcdTZmNzdc''@;'; put 'put ''dTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZcdTcxOWJcdTcxYjBcdTcxYTBcdTcxOWFcdTcxYTlcdTcxYjVcdTcxOWRcdTcxYTVcdTcxOWVcdTcxYTRcdTcxYTFcdTcxYWFcdTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTczNTJcdTczNWVcdTczNWZcdTczNjBcdTczNWRcdTcz''@;'; put 'put ''NWJcdTczNjFcdTczNWFcdTczNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNjJcdTc0ODdcdTc0ODlcdTc0OGFcdTc0ODZcdTc0ODFcdTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2MTlcdTc2''@;'; put 'put ''MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2MjhcdTc2MWJcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRcdTc3OGZcdTc3ODlcdTc3ODhcdTc4Y2RcdTc4YmJcdTc4Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFcdTc5YTBc''@;'; put 'put ''dTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZcdTdhMzlcdTdhYjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdiYmVcdTdiYWNcdTdiY2VcdTdiYWZcdTdiYjlcdTdiY2FcdTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdkZTFcdTdl''@;'; put 'put ''MDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdkZjFcdTdkZjBcdTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBcdTdmYWRcdTdmZWRcdTdmZWJcdTdmZWFcdTdmZWNcdTdmZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzBdLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzIzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMwXVttXV09NTg4ODArbSxGWzU4ODgwK21dPXhbMjMwXVttXSk7Zm9yKHhbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTllXHU4MTk1XHU4''@;'; put 'put ''MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4MjRmXHU4MjUzXHU4MjUyXHU4MjUwXHU4MjRlXHU4MjUxXHU4NTI0XHU4NTNiXHU4NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4NTA5XHU4NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4NTFjXHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0''@;'; put 'put ''XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3XHU4NGViXHU4NGYzXHU4NGZjXHU4NTEyXHU4NGVhXHU4NGU5XHU4NTE2XHU4NGZlXHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAyXHU4NGZkXHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2XHU4NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4''@;'; put 'put ''NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4NTJmXHU4NjYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzU2XHU4NzYzXHU4NzY0XHU4Nzc3XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzViXHU4NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4NzVlXHU4NzZkXHU4''@;'; put 'put ''NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4NzVkXHU4NzZmXHU4NzZjXHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4NzdiXHU4Nzc1XHU4NzYyXHU4NzY3XHU4NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4OTBiXHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2XHU4OTE2XHU4OTEx''@;'; put 'put ''XHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0XHU4OWEzXHU4OWVkXHU4OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQzXHU4YWQxXHU4YWQ0XHU4YWQ1XHU4YWJiXHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4XHU4YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4YzNlXHU4YzRkXHU4''@;'; put 'put ''YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4Y2U4XHU4Y2RhXHU4Y2RkXHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4ZTIwXHU4ZTIzXHU4ZTI1XHU4ZTI0XHU4ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4ZTE5XHU4ZTI2XHU4ZTI3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMjMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMV1bbV1dPTU5MTM2K20sRls1OTEzNittXT14WzIzMV1bbV0pO2Zvcih4WzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4''@;'; put 'put ''NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1''@;'; put 'put ''OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1''@;'; put 'put ''OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlk''@;'; put 'put ''M1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1''@;'; put 'put ''OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzIzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzJdW21dXT01OTM5MittLEZbNTkzOTIrbV09eFsyMzJdW21dKTtmb3IoeFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NmRcdTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJcdTU4YzhcdTU4YmRcdTU4YzlcdTU4YmZcdTU4YmFcdTU4YzJcdTU4YmNcdTU4YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZcdTVi''@;'; put 'put ''MjhcdTViMWFcdTViMjBcdTViMWVcdTViZWZcdTVkYWNcdTVkYjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVkYWVcdTVkYWFcdTVkYThcdTVkYjJcdTVkYWRcdTVkYWZcdTVkYjRcdTVlNjdcdTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVmNGJc''@;'; put 'put ''dTVmYmNcdTYxOWRcdTYxYThcdTYxOTZcdTYxYzVcdTYxYjRcdTYxYzZcdTYxYzFcdTYxY2NcdTYxYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxYmZcdTYxYjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0YzNc''@;'; put 'put ''dTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNcdTY1N2ZcdTY1N2NcdTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2FcdTY2Y2JcdTY2Y2ZcdTY2YmRcdTY2YmJcdTY2YmFcdTY2Y2NcdTY3MjNcdTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJcdTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRcdTZh''@;'; put 'put ''NzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZhNWFcdTZhM2JcdTZhM2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZhNGZcdTZhNTRcdTZhNmZcdTZhNjlcdTZhNjBcdTZhM2NcdTZhNWVcdTZhNTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZiNTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZiYWFc''@;'; put 'put ''dTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRcdTZjMDNcdTZjMDZcdTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNcdTZmY2VcdTZmYzhcdTZmNWVcdTZmYzRcdTZmYmRcdTZmOWVcdTZmY2FcdTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFcdTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZcdTZm''@;'; put 'put ''YjhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMzXVttXV09NTk2NDgrbSxGWzU5NjQ4K21dPXhbMjMzXVttXSk7Zm9yKHhbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmEyXHU2ZmM5XHU2ZmFiXHU2ZmNkXHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1XHU3MWMyXHU3MWJmXHU3MWI4XHU3MWQ2XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2XHU3''@;'; put 'put ''MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3MzY5XHU3MzY2XHU3MzY3XHU3MzZjXHU3MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3NDlhXHU3NGEwXHU3NDk0XHU3NDkyXHU3NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJkXHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3NjMy''@;'; put 'put ''XHU3NjMwXHU3NmJiXHU3NmU2XHU3NzlhXHU3NzlkXHU3N2ExXHU3NzljXHU3NzliXHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Nzk3XHU3OGRkXHU3OGU5XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUx''@;'; put 'put ''XHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUwXHU3OWE0XHU3YTQ0XHU3YTQ4XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIxXHU3YWI3XHU3YmRlXHU3YmUzXHU3YmU3XHU3YmRkXHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3''@;'; put 'put ''YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3Y2Q3XHU3Y2QwXHU3Y2QxXHU3ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3ZTIwXHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3ZTE1XHU3ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3Zjdi''@;'; put 'put ''XHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVmXHU4MDJhXHU4MDI5XHU4MDZjXHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1XHU4MWFiXHU4MWIwXHU4MWFjXHU4MWI0XHU4MWIyXHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4''@;'; put 'put ''NTUzXHU4NTYxXHU4NTU4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNF1bbV1dPTU5OTA0K20sRls1OTkwNCttXT14WzIzNF1bbV0pO2Zvcih4WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1''@;'; put 'put ''ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkx''@;'; put 'put ''ZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlMlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFl''@;'; put 'put ''NFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1''@;'; put 'put ''OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMx''@;'; put 'put ''ZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1''@;'; put 'put ''OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzVdW21dXT02MDE2MCttLEZbNjAxNjArbV09eFsyMzVdW21dKTtmb3IoeFsyMzZdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGJcdTkyZmVcdTkzMDlcdTkzMDBcdTkyZmJcdTkzMTZcdTk1YmNcdTk1Y2RcdTk1YmVcdTk1YjlcdTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJc''@;'; put 'put ''dTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3ZjBcdTk3ZjhcdTk4MzVcdTk4MmZcdTk4MzJcdTk5MjRcdTk5MWZcdTk5MjdcdTk5MjlcdTk5OWVcdTk5ZWVcdTk5ZWNcdTk5ZTVcdTk5ZTRcdTk5ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlh''@;'; put 'put ''ZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTliMzNcdTliODBcdTliODVcdTliODdcdTliN2NcdTliN2VcdTliN2JcdTliODJcdTliOTNcdTliOTJcdTliOTBcdTliN2FcdTliOTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlk''@;'; put 'put ''MjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlkMWRcdTlkMThcdTlkMjJcdTlkMTBcdTlkMTlcdTlkMWZcdTllODhcdTllODZcdTllODdcdTllYWVcdTllYWRcdTllZDVcdTllZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNc''@;'; put 'put ''dTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N2VcdTU2ODJcdTU2N2ZcdTU2ODFcdTU4ZDZcdTU4ZDRcdTU4Y2ZcdTU4ZDJcdTViMmRcdTViMjVcdTViMzJcdTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2JcdTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVl''@;'; put 'put ''NmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYxYjVcdTYxYmNcdTYxZTdcdTYxZTBcdTYxZTVcdTYxZTRcdTYxZThcdTYxZGVcdTY0ZWZcdTY0ZTlcdTY0ZTNcdTY0ZWJcdTY0ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZhOGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlc''@;'; put 'put ''dTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVcdTZhODdcdTZhOTNcdTZhOGVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM2XVttXV09NjA0MTYrbSxGWzYwNDE2K21dPXhbMjM2XVttXSk7Zm9y''@;'; put 'put ''KHhbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk1XHU2YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2YTdmXHU2YWE2XHU2YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2ZmE5XHU2ZmY0''@;'; put 'put ''XHU2ZmQ0XHU2ZmUzXHU2ZmRjXHU2ZmVkXHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUxXHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0XHU3MWYwXHU3MWUyXHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFhXHU3NGFkXHU3''@;'; put 'put ''NGIxXHU3NGE1XHU3NGFmXHU3NTEwXHU3NTExXHU3NTEyXHU3NTBmXHU3NTg0XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3N2IyXHU3N2I3XHU3N2I2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2I0XHU3N2IxXHU3''@;'; put 'put ''N2E4XHU3N2YwXHU3OGYzXHU3OGZkXHU3OTAyXHU3OGZiXHU3OGZjXHU3OGYyXHU3OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3YWMxXHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZm''@;'; put 'put ''XHU3YmZiXHU3YzBlXHU3YmY0XHU3YzBiXHU3YmYzXHU3YzAyXHU3YzA5XHU3YzAzXHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBhXHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4XHU3ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3''@;'; put 'put ''ZTI5XHU3ZTRjXHU3ZTMwXHU3ZTNiXHU3ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1XHU3ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4MjViXHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThm''@;'; put 'put ''XHU4NWE3XHU4NTk1XHU4NWEwXHU4NThiXHU4NWEzXHU4NTdiXHU4NWE0XHU4NTlhXHU4NTllXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzN11bbV1dPTYwNjcyK20sRls2MDY3MittXT14''@;'; put 'put ''WzIzN11bbV0pO2Zvcih4WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVh''@;'; put 'put ''Mlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1''@;'; put 'put ''ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1''@;'; put 'put ''M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1''@;'; put 'put ''OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTVi''@;'; put 'put ''N1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzhdW21dXT02MDkyOCtt''@;'; put 'put ''LEZbNjA5MjgrbV09eFsyMzhdW21dKTtmb3IoeFsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3OWVcdTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5''@;'; put 'put ''MmJcdTk5MmNcdTk5MmFcdTk5MzNcdTk5MzJcdTk5MmZcdTk5MmRcdTk5MzFcdTk5MzBcdTk5OThcdTk5YTNcdTk5YTFcdTlhMDJcdTk5ZmFcdTk5ZjRcdTk5ZjdcdTk5ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlhMDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFc''@;'; put 'put ''dTlhZmNcdTliNDhcdTliOWFcdTliYThcdTliOWVcdTliOWJcdTliYTZcdTliYTFcdTliYTVcdTliYTRcdTliODZcdTliYTJcdTliYTBcdTliYWZcdTlkMzNcdTlkNDFcdTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTlkNDVcdTlkNDJcdTlkNDNcdTlkM2VcdTlkMzdcdTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFcdTllODlcdTllOGRcdTllYjBcdTllYzhcdTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2''@;'; put 'put ''OThcdTU2OWNcdTU2OTdcdTU2OWFcdTU2OWRcdTU2OTlcdTU5NzBcdTViM2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVlNmVcdTYxZDhcdTYxZGZcdTYxZWRcdTYxZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFc''@;'; put 'put ''dTY1MDNcdTY0ZmNcdTY1OTRcdTY1ZGJcdTY2ZGFcdTY2ZGJcdTY2ZDhcdTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZcdTZhYmFcdTZhYjZcdTZhYjdcdTZhYzdcdTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcw''@;'; put 'put ''MGVcdTZmZmZcdTcwMDBcdTZmZmJcdTcwMjZcdTZmZmNcdTZmZjdcdTcwMGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcxZmRcdTczNzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM5''@;'; put 'put ''XVttXV09NjExODQrbSxGWzYxMTg0K21dPXhbMjM5XVttXSk7Zm9yKHhbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3NGJlXHU3NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3''@;'; put 'put ''NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3NmJkXHU3NmVjXHU3N2MyXHU3N2JhXHU3OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3OTA5XHU3OTEwXHU3OTEyXHU3OTExXHU3OWFkXHU3OWFjXHU3YTVmXHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFm''@;'; put 'put ''XHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVjXHU3ZTUwXHU3ZTU2XHU3ZTYzXHU3ZTU4XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYwXHU3ZTU3XHU3ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3ZmY4XHU4MDc1XHU4MWQxXHU4MWQyXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMyXHU4NWIzXHU4NWI1XHU4NWJkXHU4NWM3XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4NWM1XHU4NWIxXHU4NWI2XHU4NWQyXHU4NjI0XHU4NWI4XHU4''@;'; put 'put ''NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4N2U0XHU4N2Q0XHU4N2RjXHU4N2QzXHU4N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5XHU4ODAxXHU4N2Y0XHU4N2U4XHU4N2RkXHU4OTUzXHU4OTRi''@;'; put 'put ''XHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUwXHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1XHU4YjQ3XHU4YjJmXHU4YjNjXHU4YjNlXHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4YjJlXHU4YjI0XHU4YjNiXHU4YjNkXHU4YjNhXHU4YzQyXHU4''@;'; put 'put ''Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4ZTU2XHU4ZTVlXHU4ZTY1XHU4ZTY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDBdW21dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihhZVt4WzI0MF1bbV1dPTYxNDQwK20sRls2MTQ0MCttXT14WzI0MF1bbV0pO2Zvcih4WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1''@;'; put 'put ''OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4''@;'; put 'put ''ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1''@;'; put 'put ''OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0''@;'; put 'put ''Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1''@;'; put 'put ''NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQxXVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDFdW21dXT02MTY5NittLEZbNjE2OTYrbV09eFsyNDFdW21dKTtmb3IoeFsyNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlc''@;'; put 'put ''dTY1MGNcdTY1MGVcdTY1ODRcdTY1ZGVcdTY1ZGRcdTY2ZGVcdTZhZTdcdTZhZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2JcdTZhZGZcdTZhZGNcdTZhZDBcdTZhZWJcdTZhY2ZcdTZhY2RcdTZhZGVcdTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcw''@;'; put 'put ''MjFcdTcwMjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMWNcdTcwMmFcdTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcyMDVcdTcyYTVcdTcyYTZcdTcyYTRcdTcyYTNcdTcyYTFcdTc0Y2JcdTc0YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFc''@;'; put 'put ''dTc5MWRcdTc5MWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MjFcdTc5MWNcdTc5MTdcdTc5MWVcdTc5YjBcdTdhNjdcdTdhNjhcdTdjMzNcdTdjM2NcdTdjMzlcdTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZcdTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdc''@;'; put 'put ''dTdlNmZcdTdlN2FcdTdlNzJcdTdlNzRcdTdlNjhcdTdmNGJcdTdmNGFcdTdmODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVcdTgwNzhcdTgxZDdcdTgxZDVcdTgyNjRcdTgyNjFcdTgyNjNcdTg1ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1''@;'; put 'put ''ZjJcdTg1ZjhcdTg1ZDhcdTg1ZGZcdTg1ZTNcdTg1ZGNcdTg1ZDFcdTg1ZjBcdTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4MDBcdTg3ZmFcdTg4MDNcdTg3ZjZcdTg3ZjdcdTg4MDlcdTg4MGNcdTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZcdTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFc''@;'; put 'put ''dTg5NWJcdTg5NTdcdTg5NjFcdTg5NWNcdTg5NThcdTg5NWRcdTg5NTlcdTg5ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBcdThiNDhcdThiNGFcdThiNDBcdThiNTNcdThiNTZcdThiNTRcdThiNGJcdThiNTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDJdLmxlbmd0aDsrK20pNjU1''@;'; put 'put ''MzMhPT14WzI0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQyXVttXV09NjE5NTIrbSxGWzYxOTUyK21dPXhbMjQyXVttXSk7Zm9yKHhbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3''@;'; put 'put ''XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4YzlhXHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFjXHU4ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZkXHU4ZTc4XHU4ZTczXHU4ZTZhXHU4ZTZmXHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUzXHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5''@;'; put 'put ''MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5M2VjXHU5M2NjXHU5M2Q5XHU5M2E5XHU5M2U2XHU5M2NhXHU5M2Q0XHU5M2VlXHU5M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5''@;'; put 'put ''XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2IzXHU5N2I3XHU5N2I2XHU5N2RkXHU5N2RlXHU5N2RmXHU5ODVjXHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQz''@;'; put 'put ''XHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1XHU5YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5YTIyXHU5YTIwXHU5YTI3XHU5YTIzXHU5YTFlXHU5YTFjXHU5YTE0XHU5YWMyXHU5YjBiXHU5YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmViXHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5''@;'; put 'put ''YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5YmVjXHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1XHU5YmUxXHU5YmRhXHU5ZDc3XHU5ZDgxXHU5ZDhhXHU5ZDg0XHU5ZDg4XHU5ZDcxXHU5ZDgwXHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5''@;'; put 'put ''XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgyXHU5ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMwXHU5ZWZjXHU5ZjJkXHU5ZjQwXHU5ZjQxXHU5ZjRkXHU5ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQzXS5s''@;'; put 'put ''ZW5ndGg7KyttKTY1NTMzIT09eFsyNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0M11bbV1dPTYyMjA4K20sRls2MjIwOCttXT14WzI0M11bbV0pO2Zvcih4WzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTZiNVx1NTZi''@;'; put 'put ''M1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1''@;'; put 'put ''NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1Nzdm''@;'; put 'put ''Mlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4''@;'; put 'put ''MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1''@;'; put 'put ''ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFi''@;'; put 'put ''M1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNmZlx1ZmZmZCIuc3BsaXQoIiIpLG09''@;'; put 'put ''MDttIT14WzI0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDRdW21dXT02MjQ2NCttLEZbNjI0NjQrbV09eFsyNDRdW21dKTtmb3IoeFsyNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTkzZmNcdTk0MGNcdTkzZjZcdTk0MTFcdTk0MDZcdTk1ZGVcdTk1ZTBcdTk1ZGZcdTk3MmVcdTk3MmZcdTk3YjlcdTk3YmJcdTk3ZmRcdTk3ZmVcdTk4NjBcdTk4NjJcdTk4NjNcdTk4NWZcdTk4YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJc''@;'; put 'put ''dTlhMzRcdTlhMzFcdTlhMmNcdTlhMmFcdTlhMzZcdTlhMjlcdTlhMmVcdTlhMzhcdTlhMmRcdTlhYzdcdTlhY2FcdTlhYzZcdTliMTBcdTliMTJcdTliMTFcdTljMGJcdTljMDhcdTliZjdcdTljMDVcdTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTlj''@;'; put 'put ''MDlcdTlkOWZcdTlkOTlcdTlkYTRcdTlkOWRcdTlkOTJcdTlkOThcdTlkOTBcdTlkOWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTBcdTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlkYThcdTlkOWVcdTlkYTNcdTlkYmZcdTlk''@;'; put 'put ''YTlcdTlkOTZcdTlkYTZcdTlkYTdcdTllOTlcdTllOWJcdTllOWFcdTllZTVcdTllZTRcdTllZTdcdTllZTZcdTlmMzBcdTlmMmVcdTlmNWJcdTlmNjBcdTlmNWVcdTlmNWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNcdTU2YmRcdTU2YmVcdTViNDhcdTViNDdc''@;'; put 'put ''dTVkY2JcdTVkY2ZcdTVlZjFcdTYxZmRcdTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNcdTZhZjhcdTZiMDBcdTcwNDNcdTcwNDRcdTcwNGFcdTcwNDhcdTcwNDlcdTcwNDVcdTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdj''@;'; put 'put ''NTRcdTdjNTNcdTdjZjJcdTdlOGFcdTdlODdcdTdlODhcdTdlOGJcdTdlODZcdTdlOGRcdTdmNGRcdTdmYmJcdTgwMzBcdTgxZGRcdTg2MThcdTg2MmFcdTg2MjZcdTg2MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MWVcdTg2MjVcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxtPTA7bSE9eFsyNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ1XVttXV09NjI3MjArbSxGWzYyNzIwK21dPXhbMjQ1XVttXSk7Zm9yKHhbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU4ODI5XHU4ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4ODJiXHU4ODRhXHU4OTZkXHU4OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4Yjc5XHU4Yjc4XHU4YjQ1XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFmXHU4ZThlXHU4ZThjXHU4ZjVlXHU4ZjVi''@;'; put 'put ''XHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5MTQ1XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5XHU5NDNkXHU5NDNjXHU5NDMwXHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJjXHU5NDQwXHU5NDMxXHU5NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5N2JmXHU5N2UxXHU5ODY0XHU5OGM5XHU5''@;'; put 'put ''OGM2XHU5OGMwXHU5OTU4XHU5OTU2XHU5YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5YTQxXHU5YTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2XHU5YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5''@;'; put 'put ''YzFjXHU5YzJjXHU5YzIzXHU5YzI4XHU5YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5ZGI2XHU5ZGJjXHU5ZGMxXHU5ZGM3XHU5ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5ZGM4XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIz''@;'; put 'put ''XHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5ZTljXHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFiXHU5ZjE4XHU5ZjFhXHU5ZjMxXHU5ZjRlXHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1XHU1ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2''@;'; put 'put ''NTI2XHU2NTIyXHU2YjBiXHU2YjA4XHU2YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3MDU3XHU3MDUyXHU3MjFlXHU3MjFmXHU3MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3YTcxXHU3YzU3XHU3YzVjXHU3YzU5XHU3YzVi''@;'; put 'put ''XHU3YzVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Nl1bbV1dPTYyOTc2K20sRls2Mjk3NittXT14WzI0Nl1bbV0pO2Zvcih4WzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3''@;'; put 'put ''ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1''@;'; put 'put ''OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1''@;'; put 'put ''OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRm''@;'; put 'put ''NVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1''@;'; put 'put ''NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3''@;'; put 'put ''Nlx1ODk3NFx1ODk3M1x1ODlmZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDddW21dXT02MzIzMittLEZbNjMyMzIrbV09eFsyNDddW21dKTtmb3IoeFsyNDhdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOGNcdThiOGVcdThiOGJcdThiODhcdThjNDVcdThkMTlcdThlOThcdThmNjRcdThmNjNcdTkxYmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTli''@;'; put 'put ''MWVcdTliMWZcdTliMjBcdTljNTJcdTljNThcdTljNTBcdTljNGFcdTljNGRcdTljNGJcdTljNTVcdTljNTlcdTljNGNcdTljNGVcdTlkZmJcdTlkZjdcdTlkZWZcdTlkZTNcdTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZcdTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNc''@;'; put 'put ''dTlkZjRcdTlkZjNcdTlkZThcdTlkZWRcdTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlmMDZcdTlmMWNcdTlmMzhcdTlmMzdcdTlmMzZcdTlmNDNcdTlmNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2Rc''@;'; put 'put ''dTViNGVcdTVjNmRcdTY1MmRcdTY2ZWRcdTY2ZWVcdTZiMTNcdTcwNWZcdTcwNjFcdTcwNWRcdTcwNjBcdTcyMjNcdTc0ZGJcdTc0ZTVcdTc3ZDVcdTc5MzhcdTc5YjdcdTc5YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThi''@;'; put 'put ''OTVcdThlOWVcdThlOWZcdThlYTBcdThlOWRcdTkxYmVcdTkxYmRcdTkxYzJcdTk0NmJcdTk0NjhcdTk0NjlcdTk2ZTVcdTk3NDZcdTk3NDNcdTk3NDdcdTk3YzdcdTk3ZTVcdTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVc''@;'; put 'put ''dTllMDdcdTllMDNcdTllMDZcdTllMDVcdTllMDBcdTllMDFcdTllMDlcdTlkZmZcdTlkZmRcdTllMDRcdTllYTBcdTlmMWVcdTlmNDZcdTlmNzRcdTlmNzVcdTlmNzZcdTU2ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3''@;'; put 'put ''ZDlcdTc5MzlcdTdjNjlcdTdjNmJcdTdjZjZcdTdlOWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ4XVttXV09NjM0ODgrbSxGWzYzNDg4K21dPXhbMjQ4XVttXSk7Zm9yKHhbMjQ5XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTk4XHU3ZTliXHU3ZTk5XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4OTc5XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZmXHU4Yjk4XHU4Yjk5XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5''@;'; put 'put ''NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZlXHU5YzZkXHU5ZTBiXHU5ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5ZTExXHU5ZWExXHU5ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5ZjdiXHU5ZjdhXHU5Zjc5XHU1NzFlXHU3MDY2XHU3YzZm''@;'; put 'put ''XHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMzXHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5Yzc0XHU5YzczXHU5YzcxXHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2XHU5ZjBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZmE0XHU3MDY4XHU3MDY1XHU3Y2Y3''@;'; put 'put ''XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNmXHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5ODczXHU5ODc0XHU5OGNjXHU5OTYxXHU5OWFiXHU5YTY0XHU5YTY2XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3XHU2YjFlXHU3MjI3XHU4NjRjXHU4ZWE4XHU5NDgyXHU5''@;'; put 'put ''NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgzXHU5Yzc5XHU5ZWI3XHU3Njc1XHU5YTZiXHU5YzdhXHU5ZTFkXHU3MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3ODgxXHU5MmI5XHU4OGNmXHU1OGJiXHU2MDUyXHU3Y2E3''@;'; put 'put ''XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUyNTVkXHUyNTUyXHUyNTY0XHUyNTU1XHUyNTVlXHUyNTZhXHUyNTYxXHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2XHUyNTVmXHUyNTZiXHUyNTYyXHUyNTU5XHUyNTY4XHUy''@;'; put 'put ''NTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTkzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OV1bbV1dPTYzNzQ0K20sRls2Mzc0NCttXT14WzI0OV1bbV0p''@;'; put 'put ''O3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLEllWzEyNTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgx''@;'; put 'put ''ZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAz''@;'; put 'put ''MFx1MDE2MFx1MjAzOVx1MDE1YVx1MDE2NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0''@;'; put 'put ''XHhhNlx4YTdceGE4XHhhOVx1MDE1ZVx4YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4Yzdc''@;'; put 'put ''dTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBk''@;'; put 'put ''XHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQo''@;'; put 'put ''bSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjUxXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgx''@;'; put 'put ''NFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MDJcdTA0MDNcdTIwMWFc''@;'; put 'put ''dTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNcdTA0''@;'; put 'put ''NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0NTVc''@;'; put 'put ''dTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0''@;'; put 'put ''MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVc''@;'; put 'put ''dTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVj''@;'; put 'put ''OmFlfX0oKSxJZVsxMjUyXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkq''@;'; put 'put ''KywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAx''@;'; put 'put ''NTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJc''@;'; put 'put ''eGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4''@;'; put 'put ''ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhm''@;'; put 'put ''ZVx4ZmYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjUzXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNc''@;'; put 'put ''eDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5f''@;'; put 'put ''YGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIw''@;'; put 'put ''MjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZc''@;'; put 'put ''eGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAz''@;'; put 'put ''YTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVc''@;'; put 'put ''dTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0''@;'; put 'put ''KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjU0XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4''@;'; put 'put ''MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIw''@;'; put 'put ''MjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhh''@;'; put 'put ''MVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNh''@;'; put 'put ''XHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFc''@;'; put 'put ''eGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVj''@;'; put 'put ''OmFlfX0oKSxJZVsxMjU1XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkq''@;'; put 'put ''KywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhh''@;'; put 'put ''Ylx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHVmZmZkXHUwNWJiXHUwNWJjXHUwNWJk''@;'; put 'put ''XHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUw''@;'; put 'put ''NWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1''@;'; put 'put ''NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTI1Nl09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBm''@;'; put 'put ''XHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdm''@;'; put 'put ''XHUyMGFjXHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwNjc5XHUyMDM5XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUy''@;'; put 'put ''MDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYwY1x4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHUwNmJlXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1''@;'; put 'put ''MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2Fc''@;'; put 'put ''dTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhlMlx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx4ZTdceGU4XHhlOVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZi''@;'; put 'put ''XHhmY1x1MjAwZVx1MjAwZlx1MDZkMiIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBG''@;'; put 'put ''PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5P''@;'; put 'put ''UFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUy''@;'; put 'put ''MDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4''@;'; put 'put ''YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhk''@;'; put 'put ''NVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYz''@;'; put 'put ''XHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6''@;'; put 'put ''eCxkZWM6YWV9fSgpLEllWzEyNThdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQl''@;'; put 'put ''JicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAz''@;'; put 'put ''OVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFh''@;'; put 'put ''XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUw''@;'; put 'put ''MzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4''@;'; put 'put ''ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxZTRdPWZ1bmN0''@;'; put 'put ''aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9A''@;'; put 'put ''QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4''@;'; put 'put ''ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhh''@;'; put 'put ''YVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1''@;'; put 'put ''MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJk''@;'; put 'put ''ZFx1MDJkYlx1MDJjNyIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAx''@;'; put 'put ''XHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZX''@;'; put 'put ''WFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhh''@;'; put 'put ''Nlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlh''@;'; put 'put ''XHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlc''@;'; put 'put ''dTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAz''@;'; put 'put ''YzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTty''@;'; put 'put ''ZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMDAwN109ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFl''@;'; put 'put ''XHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5''@;'; put 'put ''XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZc''@;'; put 'put ''dTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAyXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1''@;'; put 'put ''MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBc''@;'; put 'put ''dTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0''@;'; put 'put ''NGNcdTA0NGRcdTA0NGVceGE0IixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTAwMDhdPWZ1bmN0aW9uKCl7dmFyIG0sRj1bXSxh''@;'; put 'put ''ZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9''@;'; put 'put ''Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4ZGJcdWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZc''@;'; put 'put ''dWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFcdWY4ZWJcdWY4ZWNcdWY4ZWRcdWY4ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJcdWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZcdWY4ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRc''@;'; put 'put ''dWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSxtPTA7bSE9eFswXS5sZW5ndGg7KyttKTY1NTMzIT09eFswXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFswXVttXV09MCttLEZbMCttXT14WzBdW21dKTtmb3IoeFsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdTMwZmJcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE1XHVmZjVlXHVm''@;'; put 'put ''ZmZkXHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJh''@;'; put 'put ''XHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAz''@;'; put 'put ''Mlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksbT0wO20hPXhbMTYxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2MV1bbV1dPTQxMjE2K20sRls0MTIxNittXT14WzE2MV1bbV0pO2Zvcih4WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3''@;'; put 'put ''Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjJdW21dXT00MTQ3MittLEZbNDE0NzIrbV09eFsxNjJdW21dKTtmb3IoeFsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlc''@;'; put 'put ''dWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZm''@;'; put 'put ''MjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBc''@;'; put 'put ''dWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZm''@;'; put 'put ''NWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYzXVttXV09NDE3MjgrbSxGWzQxNzI4K21dPXhbMTYzXVttXSk7Zm9yKHhbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3''@;'; put 'put ''XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUz''@;'; put 'put ''MDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdl''@;'; put 'put ''XHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NF1bbV1dPTQxOTg0K20sRls0MTk4NCttXT14WzE2NF1bbV0pO2Zvcih4WzE2NV09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBh''@;'; put 'put ''NVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1''@;'; put 'put ''MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBk''@;'; put 'put ''Y1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjVdW21dXT00MjI0MCttLEZbNDIyNDArbV09eFsxNjVdW21dKTtmb3Io''@;'; put 'put ''eFsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAz''@;'; put 'put ''OTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY2XVttXV09NDI0OTYrbSxGWzQyNDk2K21dPXhb''@;'; put 'put ''MTY2XVttXSk7Zm9yKHhbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUw''@;'; put 'put ''NDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJh''@;'; put 'put ''XHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUw''@;'; put 'put ''NDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2N11bbV1dPTQyNzUyK20s''@;'; put 'put ''Rls0Mjc1MittXT14WzE2N11bbV0pO2Zvcih4WzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1''@;'; put 'put ''MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjhdW21dXT00MzAwOCttLEZbNDMwMDgrbV09''@;'; put 'put ''eFsxNjhdW21dKTtmb3IoeFsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1''@;'; put 'put ''MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNc''@;'; put 'put ''dTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY5XVttXV09NDMyNjQr''@;'; put 'put ''bSxGWzQzMjY0K21dPXhbMTY5XVttXSk7Zm9yKHhbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2''@;'; put 'put ''NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYy''@;'; put 'put ''XHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2''@;'; put 'put ''OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3''@;'; put 'put ''Nl1bbV1dPTQ1MDU2K20sRls0NTA1NittXT14WzE3Nl1bbV0pO2Zvcih4WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1''@;'; put 'put ''NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4''@;'; put 'put ''N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1''@;'; put 'put ''NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc3XVttXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoYWVbeFsxNzddW21dXT00NTMxMittLEZbNDUzMTIrbV09eFsxNzddW21dKTtmb3IoeFsxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNc''@;'; put 'put ''dTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYw''@;'; put 'put ''ZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZc''@;'; put 'put ''dTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OF1b''@;'; put 'put ''bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc4XVttXV09NDU1NjgrbSxGWzQ1NTY4K21dPXhbMTc4XVttXSk7Zm9yKHhbMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1''@;'; put 'put ''XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4''@;'; put 'put ''YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZj''@;'; put 'put ''XHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc5XS5sZW5ndGg7KyttKTY1''@;'; put 'put ''NTMzIT09eFsxNzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OV1bbV1dPTQ1ODI0K20sRls0NTgyNCttXT14WzE3OV1bbV0pO2Zvcih4WzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2''@;'; put 'put ''Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1''@;'; put 'put ''OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1Nzhj''@;'; put 'put ''Ylx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MF0u''@;'; put 'put ''bGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODBdW21dXT00NjA4MCttLEZbNDYwODArbV09eFsxODBdW21dKTtmb3IoeFsxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVm''@;'; put 'put ''MzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNc''@;'; put 'put ''dTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3''@;'; put 'put ''YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxt''@;'; put 'put ''PTA7bSE9eFsxODFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgxXVttXV09NDYzMzYrbSxGWzQ2MzM2K21dPXhbMTgxXVttXSk7Zm9yKHhbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4''@;'; put 'put ''NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2''@;'; put 'put ''XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2''@;'; put 'put ''NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksbT0wO20hPXhbMTgyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Ml1bbV1dPTQ2NTkyK20sRls0NjU5MittXT14WzE4Ml1bbV0pO2Zvcih4WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1''@;'; put 'put ''NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNm''@;'; put 'put ''Mlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1''@;'; put 'put ''NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZk''@;'; put 'put ''OFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODNdW21dXT00Njg0OCttLEZbNDY4NDgrbV09eFsxODNdW21dKTtmb3IoeFsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVc''@;'; put 'put ''dTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1''@;'; put 'put ''MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhc''@;'; put 'put ''dTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgw''@;'; put 'put ''MTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg0XVttXV09NDcxMDQrbSxGWzQ3MTA0K21dPXhbMTg0XVttXSk7Zm9yKHhbMTg1XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1Mjlm''@;'; put 'put ''XHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1''@;'; put 'put ''YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2''@;'; put 'put ''XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5''@;'; put 'put ''MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NV1bbV1dPTQ3MzYwK20sRls0NzM2MCttXT14WzE4NV1bbV0pO2Zvcih4WzE4Nl09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMy''@;'; put 'put ''Nlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1''@;'; put 'put ''OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVk''@;'; put 'put ''NVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1''@;'; put 'put ''NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODZdW21dXT00NzYxNittLEZbNDc2MTYrbV09eFsxODZdW21d''@;'; put 'put ''KTtmb3IoeFsxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2''@;'; put 'put ''NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRc''@;'; put 'put ''dTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZi''@;'; put 'put ''YzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRc''@;'; put 'put ''dThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg3XVttXV09NDc4NzIrbSxGWzQ3ODcy''@;'; put 'put ''K21dPXhbMTg3XVttXSk7Zm9yKHhbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRm''@;'; put 'put ''XHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3''@;'; put 'put ''NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3Yjgw''@;'; put 'put ''XHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OF1bbV1dPTQ4''@;'; put 'put ''MTI4K20sRls0ODEyOCttXT14WzE4OF1bbV0pO2Zvcih4WzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEy''@;'; put 'put ''Nlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1''@;'; put 'put ''NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFk''@;'; put 'put ''MVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb''@;'; put 'put ''eFsxODldW21dXT00ODM4NCttLEZbNDgzODQrbV09eFsxODldW21dKTtmb3IoeFsxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1''@;'; put 'put ''YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRc''@;'; put 'put ''dTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdl''@;'; put 'put ''ZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MF1bbV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGFlW3hbMTkwXVttXV09NDg2NDArbSxGWzQ4NjQwK21dPXhbMTkwXVttXSk7Zm9yKHhbMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1''@;'; put 'put ''ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQz''@;'; put 'put ''XHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1''@;'; put 'put ''ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsx''@;'; put 'put ''OTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MV1bbV1dPTQ4ODk2K20sRls0ODg5NittXT14WzE5MV1bbV0pO2Zvcih4WzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1''@;'; put 'put ''ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2''@;'; put 'put ''Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1''@;'; put 'put ''NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Ml0ubGVuZ3RoOysr''@;'; put 'put ''bSk2NTUzMyE9PXhbMTkyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTJdW21dXT00OTE1MittLEZbNDkxNTIrbV09eFsxOTJdW21dKTtmb3IoeFsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZc''@;'; put 'put ''dTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0''@;'; put 'put ''ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFc''@;'; put 'put ''dTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsx''@;'; put 'put ''OTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkzXVttXV09NDk0MDgrbSxGWzQ5NDA4K21dPXhbMTkzXVttXSk7Zm9yKHhbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkw''@;'; put 'put ''XHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3''@;'; put 'put ''Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFi''@;'; put 'put ''XHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksbT0wO20hPXhbMTk0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NF1bbV1dPTQ5NjY0K20sRls0OTY2NCttXT14WzE5NF1bbV0pO2Zvcih4WzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1Nzdk''@;'; put 'put ''Ylx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1''@;'; put 'put ''ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJj''@;'; put 'put ''OVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTVdW21dXT00OTkyMCttLEZbNDk5MjArbV09eFsxOTVdW21dKTtmb3IoeFsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgz''@;'; put 'put ''YWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBc''@;'; put 'put ''dTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVj''@;'; put 'put ''M2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVc''@;'; put 'put ''dTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk2XVttXV09NTAxNzYrbSxGWzUwMTc2K21dPXhbMTk2XVttXSk7Zm9yKHhbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2''@;'; put 'put ''ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2''@;'; put 'put ''XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4''@;'; put 'put ''MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5''@;'; put 'put ''XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5N11bbV1dPTUwNDMyK20sRls1MDQzMittXT14WzE5N11bbV0pO2Zvcih4WzE5OF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1''@;'; put 'put ''NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0''@;'; put 'put ''Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1''@;'; put 'put ''NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMx''@;'; put 'put ''NFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOThdW21dXT01MDY4OCttLEZbNTA2ODgrbV09eFsxOThdW21dKTtmb3IoeFsx''@;'; put 'put ''OTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVc''@;'; put 'put ''dTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVm''@;'; put 'put ''M2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRc''@;'; put 'put ''dTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZj''@;'; put 'put ''YzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk5XVttXV09NTA5NDQrbSxGWzUwOTQ0K21dPXhbMTk5''@;'; put 'put ''XVttXSk7Zm9yKHhbMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2Q2''@;'; put 'put ''XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1''@;'; put 'put ''MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5''@;'; put 'put ''XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4''@;'; put 'put ''MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMF1bbV1dPTUxMjAwK20sRls1''@;'; put 'put ''MTIwMCttXT14WzIwMF1bbV0pO2Zvcih4WzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1''@;'; put 'put ''ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4''@;'; put 'put ''ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1''@;'; put 'put ''NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDFdW21d''@;'; put 'put ''XT01MTQ1NittLEZbNTE0NTYrbV09eFsyMDFdW21dKTtmb3IoeFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJc''@;'; put 'put ''dTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThi''@;'; put 'put ''ZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlc''@;'; put 'put ''dTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMl1bbV0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KGFlW3hbMjAyXVttXV09NTE3MTIrbSxGWzUxNzEyK21dPXhbMjAyXVttXSk7Zm9yKHhbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1''@;'; put 'put ''XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4''@;'; put 'put ''MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3''@;'; put 'put ''XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDNdW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzIwM11bbV1dPTUxOTY4K20sRls1MTk2OCttXT14WzIwM11bbV0pO2Zvcih4WzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4''@;'; put 'put ''MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1''@;'; put 'put ''N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0''@;'; put 'put ''OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNF0ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMjA0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDRdW21dXT01MjIyNCttLEZbNTIyMjQrbV09eFsyMDRdW21dKTtmb3IoeFsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdi''@;'; put 'put ''NTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZc''@;'; put 'put ''dTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcw''@;'; put 'put ''ZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDVdLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzIwNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA1XVttXV09NTI0ODArbSxGWzUyNDgwK21dPXhbMjA1XVttXSk7Zm9yKHhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0''@;'; put 'put ''ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUx''@;'; put 'put ''XHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1''@;'; put 'put ''MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMjA2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNl1bbV1dPTUyNzM2K20sRls1MjczNittXT14WzIwNl1bbV0pO2Zvcih4WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1''@;'; put 'put ''ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVk''@;'; put 'put ''OVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1''@;'; put 'put ''ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzIwN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDddW21dXT01Mjk5MittLEZbNTI5OTIrbV09eFsyMDddW21dKTtmb3IoeFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVc''@;'; put 'put ''dTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2''@;'; put 'put ''MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhc''@;'; put 'put ''dTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTcz''@;'; put 'put ''ODRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA4XVttXV09NTMyNDgrbSxGWzUzMjQ4K21dPXhbMjA4XVttXSk7Zm9yKHhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVh''@;'; put 'put ''XHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5''@;'; put 'put ''NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1''@;'; put 'put ''XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4''@;'; put 'put ''MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOV1bbV1dPTUzNTA0K20sRls1MzUwNCttXT14WzIwOV1bbV0pO2Zvcih4WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRh''@;'; put 'put ''Y1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1''@;'; put 'put ''OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4''@;'; put 'put ''NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1''@;'; put 'put ''NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTBdW21dXT01Mzc2MCttLEZbNTM3NjArbV09eFsyMTBdW21dKTtmb3IoeFsyMTFdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTll''@;'; put 'put ''NzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhc''@;'; put 'put ''dTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5''@;'; put 'put ''ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJc''@;'; put 'put ''dTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjExXVttXV09NTQwMTYrbSxGWzU0MDE2K21dPXhbMjExXVttXSk7Zm9y''@;'; put 'put ''KHhbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDc0XHU1YmQzXHU4''@;'; put 'put ''OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMz''@;'; put 'put ''XHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1''@;'; put 'put ''NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBl''@;'; put 'put ''XHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMl1bbV1dPTU0MjcyK20sRls1NDI3MittXT14''@;'; put 'put ''WzIxMl1bbV0pO2Zvcih4WzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2''@;'; put 'put ''MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1''@;'; put 'put ''ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYz''@;'; put 'put ''NVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTNdW21dXT01NDUyOCtt''@;'; put 'put ''LEZbNTQ1MjgrbV09eFsyMTNdW21dKTtmb3IoeFsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThk''@;'; put 'put ''YmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhc''@;'; put 'put ''dTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdh''@;'; put 'put ''ZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE0''@;'; put 'put ''XVttXV09NTQ3ODQrbSxGWzU0Nzg0K21dPXhbMjE0XVttXSk7Zm9yKHhbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4''@;'; put 'put ''ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUw''@;'; put 'put ''XHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3''@;'; put 'put ''ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTVdW21dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihhZVt4WzIxNV1bbV1dPTU1MDQwK20sRls1NTA0MCttXT14WzIxNV1bbV0pO2Zvcih4WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1''@;'; put 'put ''NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMy''@;'; put 'put ''ZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1''@;'; put 'put ''NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE2XVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTZdW21dXT01NTI5NittLEZbNTUyOTYrbV09eFsyMTZdW21dKTtmb3IoeFsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFc''@;'; put 'put ''dTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUw''@;'; put 'put ''YTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdc''@;'; put 'put ''dTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTddLmxlbmd0aDsrK20pNjU1''@;'; put 'put ''MzMhPT14WzIxN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE3XVttXV09NTU1NTIrbSxGWzU1NTUyK21dPXhbMjE3XVttXSk7Zm9yKHhbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQy''@;'; put 'put ''XHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4''@;'; put 'put ''YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNj''@;'; put 'put ''XHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE4XS5s''@;'; put 'put ''ZW5ndGg7KyttKTY1NTMzIT09eFsyMThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOF1bbV1dPTU1ODA4K20sRls1NTgwOCttXT14WzIxOF1bbV0pO2Zvcih4WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBl''@;'; put 'put ''Ylx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1''@;'; put 'put ''OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3''@;'; put 'put ''Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLG09''@;'; put 'put ''MDttIT14WzIxOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTldW21dXT01NjA2NCttLEZbNTYwNjQrbV09eFsyMTldW21dKTtmb3IoeFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4''@;'; put 'put ''ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2Jc''@;'; put 'put ''dTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgz''@;'; put 'put ''MTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxtPTA7bSE9eFsyMjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIwXVttXV09NTYzMjArbSxGWzU2MzIwK21dPXhbMjIwXVttXSk7Zm9yKHhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4''@;'; put 'put ''M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFj''@;'; put 'put ''XHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4''@;'; put 'put ''NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFm''@;'; put 'put ''XHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMV1bbV1dPTU2NTc2K20sRls1NjU3NittXT14WzIyMV1bbV0pO2Zvcih4WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1''@;'; put 'put ''ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYw''@;'; put 'put ''OFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1''@;'; put 'put ''NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1''@;'; put 'put ''ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjJdW21dXT01NjgzMittLEZbNTY4MzIrbV09eFsyMjJdW21dKTtmb3IoeFsyMjNdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBc''@;'; put 'put ''dTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0''@;'; put 'put ''NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJc''@;'; put 'put ''dTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1''@;'; put 'put ''NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIzXVttXV09NTcwODgrbSxGWzU3MDg4K21dPXhbMjIzXVttXSk7Zm9yKHhbMjI0XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2''@;'; put 'put ''XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1''@;'; put 'put ''NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3''@;'; put 'put ''XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1''@;'; put 'put ''NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0p''@;'; put 'put ''O2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWUzN1x1NWU0''@;'; put 'put ''NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1''@;'; put 'put ''NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3''@;'; put 'put ''M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1''@;'; put 'put ''NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDAr''@;'; put 'put ''bV09eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNc''@;'; put 'put ''dTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVl''@;'; put 'put ''YmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJc''@;'; put 'put ''dTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4''@;'; put 'put ''NTYrbSxGWzU3ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBl''@;'; put 'put ''XHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5''@;'; put 'put ''NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2Fk''@;'; put 'put ''XHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4''@;'; put 'put ''WzIyN11bbV1dPTU4MTEyK20sRls1ODExMittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1''@;'; put 'put ''ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1''@;'; put 'put ''NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYx''@;'; put 'put ''NVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoYWVbeFsyMjhdW21dXT01ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTVi''@;'; put 'put ''OTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRc''@;'; put 'put ''dTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVj''@;'; put 'put ''NTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIy''@;'; put 'put ''OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1''@;'; put 'put ''YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2''@;'; put 'put ''XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5''@;'; put 'put ''YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7Kytt''@;'; put 'put ''KTY1NTMzIT09eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1bbV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1''@;'; put 'put ''N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2Yy''@;'; put 'put ''M1x1N2YyNFx1N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1''@;'; put 'put ''NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIz''@;'; put 'put ''MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkxMzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFc''@;'; put 'put ''dTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3''@;'; put 'put ''OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJc''@;'; put 'put ''dTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVk''@;'; put 'put ''XHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2''@;'; put 'put ''OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2Yjgy''@;'; put 'put ''XHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIx''@;'; put 'put ''Zlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1''@;'; put 'put ''NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0''@;'; put 'put ''Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1''@;'; put 'put ''NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZi''@;'; put 'put ''ZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFc''@;'; put 'put ''dTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgx''@;'; put 'put ''MTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFc''@;'; put 'put ''dTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM1XVttXV09NjAxNjArbSxGWzYwMTYwK21dPXhbMjM1XVttXSk7Zm9yKHhbMjM2XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2''@;'; put 'put ''YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlk''@;'; put 'put ''XHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3''@;'; put 'put ''MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1''@;'; put 'put ''XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNl1bbV1dPTYwNDE2K20sRls2MDQxNittXT14WzIzNl1bbV0pO2Zvcih4WzIz''@;'; put 'put ''N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzY1x1NjA1ZFx1NjA1YVx1''@;'; put 'put ''NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1Nzgx''@;'; put 'put ''Y1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1''@;'; put 'put ''NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1Nzcy''@;'; put 'put ''Nlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2NzIrbV09eFsyMzdd''@;'; put 'put ''W21dKTtmb3IoeFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NjJc''@;'; put 'put ''dTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdm''@;'; put 'put ''NzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNc''@;'; put 'put ''dTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0''@;'; put 'put ''ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09NjA5MjgrbSxGWzYw''@;'; put 'put ''OTI4K21dPXhbMjM4XVttXSk7Zm9yKHhbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5''@;'; put 'put ''NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRm''@;'; put 'put ''XHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3''@;'; put 'put ''N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOV1bbV1d''@;'; put 'put ''PTYxMTg0K20sRls2MTE4NCttXT14WzIzOV1bbV0pO2Zvcih4WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1''@;'; put 'put ''OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2''@;'; put 'put ''YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1''@;'; put 'put ''NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQwXVttXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''YWVbeFsyNDBdW21dXT02MTQ0MCttLEZbNjE0NDArbV09eFsyNDBdW21dKTtmb3IoeFsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhc''@;'; put 'put ''dTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5''@;'; put 'put ''MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVc''@;'; put 'put ''dTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MV1bbV0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKGFlW3hbMjQxXVttXV09NjE2OTYrbSxGWzYxNjk2K21dPXhbMjQxXVttXSk7Zm9yKHhbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4Njdj''@;'; put 'put ''XHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4''@;'; put 'put ''NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4Nzgy''@;'; put 'put ''XHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQyXS5sZW5ndGg7KyttKTY1NTMzIT09''@;'; put 'put ''eFsyNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Ml1bbV1dPTYxOTUyK20sRls2MTk1MittXT14WzI0Ml1bbV0pO2Zvcih4WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdk''@;'; put 'put ''Ylx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1''@;'; put 'put ''N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5''@;'; put 'put ''ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0M10ubGVuZ3Ro''@;'; put 'put ''OysrbSk2NTUzMyE9PXhbMjQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDNdW21dXT02MjIwOCttLEZbNjIyMDgrbV09eFsyNDNdW21dKTtmb3IoeFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgy''@;'; put 'put ''MmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJc''@;'; put 'put ''dTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdm''@;'; put 'put ''ZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9''@;'; put 'put ''eFsyNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ0XVttXV09NjI0NjQrbSxGWzYyNDY0K21dPXhbMjQ0XVttXSk7Zm9yKHhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5''@;'; put 'put ''MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNl''@;'; put 'put ''XHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4''@;'; put 'put ''ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksbT0wO20hPXhbMjQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NV1bbV1dPTYyNzIwK20sRls2MjcyMCttXT14WzI0NV1bbV0pO2Zvcih4WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1''@;'; put 'put ''OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJh''@;'; put 'put ''ZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1''@;'; put 'put ''OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNj''@;'; put 'put ''Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDZdW21dXT02Mjk3NittLEZbNjI5NzYrbV09eFsyNDZdW21dKTtmb3IoeFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdc''@;'; put 'put ''dTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlh''@;'; put 'put ''Y2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNc''@;'; put 'put ''dTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlm''@;'; put 'put ''M2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ3XVttXV09NjMyMzIrbSxGWzYzMjMyK21dPXhbMjQ3XVttXSk7cmV0dXJue2VuYzphZSxkZWM6Rn19KCksSWVbMTAw''@;'; put 'put ''MjldPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3''@;'; put 'put ''ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2Fc''@;'; put 'put ''dTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAx''@;'; put 'put ''MmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1''@;'; put 'put ''MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1''@;'; put 'put ''MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3IixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0p''@;'; put 'put ''JiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTAwNzldPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0''@;'; put 'put ''XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQx''@;'; put 'put ''XHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThc''@;'; put 'put ''dTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAx''@;'; put 'put ''NTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZm''@;'; put 'put ''ZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0''@;'; put 'put ''KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEwMDgxXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgx''@;'; put 'put ''ZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhl''@;'; put 'put ''N1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIy''@;'; put 'put ''NjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRc''@;'; put 'put ''dTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDExZVx1MDExZlx1MDEzMFx1MDEzMVx1MDE1ZVx1MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZm''@;'; put 'put ''ZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6''@;'; put 'put ''YWV9fSgpLEllWzI4NTkxXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkq''@;'; put 'put ''KywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDky''@;'; put 'put ''XHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJc''@;'; put 'put ''eGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4''@;'; put 'put ''ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5j''@;'; put 'put ''aGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLGF0LmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1IiYmKGF0LmV4cG9ydHM9SWUpLGZ1bmN0aW9uKEYsYWUpeyJ1c2Ugc3RyaWN0IjtpZih0eXBlb2YgSWU+InUiKXt2''@;'; put 'put ''YXIgeD1JZTthdC5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSI/YXQuZXhwb3J0cz1hZSh4KTpGLmNwdGFibGU9YWUoeCl9ZWxzZSBJZT1hZShJZSl9KHRoaXMsZnVuY3Rpb24oRil7InVzZSBzdHJpY3QiO3ZhciBhZT17MTIwMDoidXRmMTZsZSIsMTIwMToidXRm''@;'; put 'put ''MTZiZSIsMTJlMzoidXRmMzJsZSIsMTIwMDE6InV0ZjMyYmUiLDE2OTY5OiJ1dGY2NGxlIiwyMDEyNzoiYXNjaWkiLDY1ZTM6InV0ZjciLDY1MDAxOiJ1dGY4In0seD1bODc0LDEyNTAsMTI1MSwxMjUyLDEyNTMsMTI1NCwxMjU1LDEyNTYsMWU0XSxtPVs5MzIsOTM2LDk0OSw5NTBdLGxlPVs2''@;'; put 'put ''NTAwMV0sTT17fSxPPXt9LFI9e30sej17fSxLPWZ1bmN0aW9uKFMpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFMpfSxJPWZ1bmN0aW9uKFMpe3JldHVybiBTLmNoYXJDb2RlQXQoMCl9LGs9dHlwZW9mIEJ1ZmZlcjwidSIsRT1mdW5jdGlvbigpe307aWYoayl7dmFyIGo9IUJ1ZmZlci5m''@;'; put 'put ''cm9tO2lmKCFqKXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe2o9ITB9RT1qP2Z1bmN0aW9uKEMsUyl7cmV0dXJuIFM/bmV3IEJ1ZmZlcihDLFMpOm5ldyBCdWZmZXIoQyl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxs''@;'; put 'put ''b2NVbnNhZmU9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBCdWZmZXIoQyl9KTt2YXIgVj0xMDI0LEI9QnVmZmVyLmFsbG9jVW5zYWZlKFYpLFg9ZnVuY3Rpb24oUyl7dmFyIHY9ZnVuY3Rpb24oUyl7Zm9yKHZhciB2PUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NTUzNikscD0wO3A8NjU1MzY7KytwKXZb''@;'; put 'put ''cF09MDtmb3IodmFyIHc9T2JqZWN0LmtleXMoUyksSj13Lmxlbmd0aCxuZT0wLGRlPXdbbmVdO25lPEo7KytuZSkoZGU9d1tuZV0pJiYodltkZS5jaGFyQ29kZUF0KDApXT1TW2RlXSk7cmV0dXJuIHZ9KEZbU10uZW5jKTtyZXR1cm4gZnVuY3Rpb24odyxKKXt2YXIgZGUsbmU9dy5sZW5ndGgs''@;'; put 'put ''ZmU9MCx4ZT0wLExlPTAsRmU9MDtpZigic3RyaW5nIj09dHlwZW9mIHcpZm9yKGRlPUJ1ZmZlci5hbGxvY1Vuc2FmZShuZSksZmU9MDtmZTxuZTsrK2ZlKWRlW2ZlXT12W3cuY2hhckNvZGVBdChmZSldO2Vsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKHcpKXtmb3IoZGU9QnVmZmVyLmFsbG9jVW5z''@;'; put 'put ''YWZlKDIqbmUpLHhlPTAsZmU9MDtmZTxuZTsrK2ZlKShMZT13W2ZlXSk8MTI4P2RlW3hlKytdPXZbTGVdOkxlPDIyND8oZGVbeGUrK109dlsoKDMxJkxlKTw8NikrKDYzJndbZmUrMV0pXSwrK2ZlKTpMZTwyNDA/KGRlW3hlKytdPXZbKCgxNSZMZSk8PDEyKSsoKDYzJndbZmUrMV0pPDw2KSso''@;'; put 'put ''NjMmd1tmZSsyXSldLGZlKz0yKTooRmU9KCg3JkxlKTw8MTgpKygoNjMmd1tmZSsxXSk8PDEyKSsoKDYzJndbZmUrMl0pPDw2KSsoNjMmd1tmZSszXSksZmUrPTMsRmU8NjU1MzY/ZGVbeGUrK109dltGZV06KGRlW3hlKytdPXZbNTUyOTYrKChGZS09NjU1MzYpPj4xMCYxMDIzKV0sZGVbeGUr''@;'; put 'put ''K109dls1NjMyMCsoMTAyMyZGZSldKSk7ZGU9ZGUuc2xpY2UoMCx4ZSl9ZWxzZSBmb3IoZGU9QnVmZmVyLmFsbG9jVW5zYWZlKG5lKSxmZT0wO2ZlPG5lOysrZmUpZGVbZmVdPXZbd1tmZV0uY2hhckNvZGVBdCgwKV07cmV0dXJuIEomJiJidWYiIT09Sj8iYXJyIiE9PUo/ZGUudG9TdHJpbmco''@;'; put 'put ''ImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoZGUpOmRlfX0sVT1mdW5jdGlvbihTKXt2YXIgdj1GW1NdLmRlYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLHc9MCxKPSIiO2Zvcih3PTA7dzx2Lmxlbmd0aDsrK3cpaWYoSj12W3ddKXt2YXIgbmU9Si5jaGFyQ29kZUF0KDApO3BbMip3XT0y''@;'; put 'put ''NTUmbmUscFsyKncrMV09bmU+Pjh9cmV0dXJuIGZ1bmN0aW9uKGZlKXt2YXIgeGU9ZmUubGVuZ3RoLExlPTAsRmU9MDtpZigyKnhlPlYmJihWPTIqeGUsQj1CdWZmZXIuYWxsb2NVbnNhZmUoVikpLEJ1ZmZlci5pc0J1ZmZlcihmZSkpZm9yKExlPTA7TGU8eGU7TGUrKylCWzIqTGVdPXBbRmU9''@;'; put 'put ''MipmZVtMZV1dLEJbMipMZSsxXT1wW0ZlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBmZSlmb3IoTGU9MDtMZTx4ZTtMZSsrKUZlPTIqZmUuY2hhckNvZGVBdChMZSksQlsyKkxlXT1wW0ZlXSxCWzIqTGUrMV09cFtGZSsxXTtlbHNlIGZvcihMZT0wO0xlPHhlO0xlKyspQlsyKkxlXT1w''@;'; put 'put ''W0ZlPTIqZmVbTGVdXSxCWzIqTGUrMV09cFtGZSsxXTtyZXR1cm4gQi5zbGljZSgwLDIqeGUpLnRvU3RyaW5nKCJ1Y3MyIil9fSxxPWZ1bmN0aW9uKFMpe2Zvcih2YXIgdj1GW1NdLmVuYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLHc9MDt3PDEzMTA3MjsrK3cpcFt3XT0wO2Zvcih2''@;'; put 'put ''YXIgSj1PYmplY3Qua2V5cyh2KSxuZT0wLGRlPUpbbmVdO25lPEoubGVuZ3RoOysrbmUpaWYoZGU9SltuZV0pe3ZhciBmZT1kZS5jaGFyQ29kZUF0KDApO3BbMipmZV09MjU1JnZbZGVdLHBbMipmZSsxXT12W2RlXT4+OH1yZXR1cm4gZnVuY3Rpb24oTGUsRmUpe3ZhciBPZT1MZS5sZW5ndGgs''@;'; put 'put ''QmU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqT2UpLFdlPTAsS2U9MCxZZT0wLEplPTAsbHQ9MDtpZigic3RyaW5nIj09dHlwZW9mIExlKXtmb3IoV2U9SmU9MDtXZTxPZTsrK1dlKUtlPTIqTGUuY2hhckNvZGVBdChXZSksQmVbSmUrK109cFtLZSsxXXx8cFtLZV0scFtLZSsxXT4wJiYoQmVbSmUr''@;'; put 'put ''K109cFtLZV0pO0JlPUJlLnNsaWNlKDAsSmUpfWVsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKExlKSl7Zm9yKFdlPUplPTA7V2U8T2U7KytXZSkobHQ9TGVbV2VdKTwxMjg/S2U9bHQ6bHQ8MjI0PyhLZT0oKDMxJmx0KTw8NikrKDYzJkxlW1dlKzFdKSwrK1dlKTpsdDwyNDA/KEtlPSgoMTUmbHQp''@;'; put 'put ''PDwxMikrKCg2MyZMZVtXZSsxXSk8PDYpKyg2MyZMZVtXZSsyXSksV2UrPTIpOihLZT0oKDcmbHQpPDwxOCkrKCg2MyZMZVtXZSsxXSk8PDEyKSsoKDYzJkxlW1dlKzJdKTw8NikrKDYzJkxlW1dlKzNdKSxXZSs9MyksS2U8NjU1MzY/KEJlW0plKytdPXBbMSsoS2UqPTIpXXx8cFtLZV0scFtL''@;'; put 'put ''ZSsxXT4wJiYoQmVbSmUrK109cFtLZV0pKTooQmVbSmUrK109cFsxKyhLZT0yKig1NTI5NisoKFllPUtlLTY1NTM2KT4+MTAmMTAyMykpKV18fHBbS2VdLHBbS2UrMV0+MCYmKEJlW0plKytdPXBbS2VdKSxCZVtKZSsrXT1wWzErKEtlPTIqKDU2MzIwKygxMDIzJlllKSkpXXx8cFtLZV0scFtL''@;'; put 'put ''ZSsxXT4wJiYoQmVbSmUrK109cFtLZV0pKTtCZT1CZS5zbGljZSgwLEplKX1lbHNlIGZvcihXZT1KZT0wO1dlPE9lO1dlKyspS2U9MipMZVtXZV0uY2hhckNvZGVBdCgwKSxCZVtKZSsrXT1wW0tlKzFdfHxwW0tlXSxwW0tlKzFdPjAmJihCZVtKZSsrXT1wW0tlXSk7cmV0dXJuIEZlJiYiYnVm''@;'; put 'put ''IiE9PUZlPyJhcnIiIT09RmU/QmUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoQmUpOkJlfX0sZWU9ZnVuY3Rpb24oUyl7dmFyIEosdj1GW1NdLmRlYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLHc9MCxuZT0wLGRlPTAsZmU9MDtmb3IoZmU9MDtmZTw2NTUzNjsrK2Zl''@;'; put 'put ''KXBbMipmZV09MjU1LHBbMipmZSsxXT0yNTM7Zm9yKHc9MDt3PHYubGVuZ3RoOysrdykoSj12W3ddKSYmKG5lPUouY2hhckNvZGVBdCgwKSxwW2RlPTIqd109MjU1Jm5lLHBbZGUrMV09bmU+PjgpO3JldHVybiBmdW5jdGlvbihMZSl7dmFyIEZlPUxlLmxlbmd0aCxPZT1CdWZmZXIuYWxsb2NV''@;'; put 'put ''bnNhZmUoMipGZSksQmU9MCxXZT0wLEtlPTA7aWYoQnVmZmVyLmlzQnVmZmVyKExlKSlmb3IoQmU9MDtCZTxGZTtCZSsrKTI1NT09PXBbV2U9MipMZVtCZV1dJiYyNTM9PT1wW1dlKzFdJiYoV2U9MiooKExlW0JlXTw8OCkrTGVbQmUrMV0pLCsrQmUpLE9lW0tlKytdPXBbV2VdLE9lW0tlKytd''@;'; put 'put ''PXBbV2UrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIExlKWZvcihCZT0wO0JlPEZlO0JlKyspV2U9MipMZS5jaGFyQ29kZUF0KEJlKSwyNTU9PT1wW1dlXSYmMjUzPT09cFtXZSsxXSYmKFdlPTIqKChMZS5jaGFyQ29kZUF0KEJlKTw8OCkrTGUuY2hhckNvZGVBdChCZSsxKSksKytCZSks''@;'; put 'put ''T2VbS2UrK109cFtXZV0sT2VbS2UrK109cFtXZSsxXTtlbHNlIGZvcihCZT0wO0JlPEZlO0JlKyspMjU1PT09cFtXZT0yKkxlW0JlXV0mJjI1Mz09PXBbV2UrMV0mJihXZT0yKigoTGVbQmVdPDw4KStMZVtCZSsxXSksKytCZSksT2VbS2UrK109cFtXZV0sT2VbS2UrK109cFtXZSsxXTtyZXR1''@;'; put 'put ''cm4gT2Uuc2xpY2UoMCxLZSkudG9TdHJpbmcoInVjczIiKX19O01bNjUwMDFdPWZ1bmN0aW9uIEMoUyl7aWYoInN0cmluZyI9PXR5cGVvZiBTKXJldHVybiBDKFMuc3BsaXQoIiIpLm1hcChJKSk7dmFyIHY9Uy5sZW5ndGgscD0wLHc9MDs0KnY+ViYmKFY9NCp2LEI9QnVmZmVyLmFsbG9jVW5z''@;'; put 'put ''YWZlKFYpKTt2YXIgSj0wO3Y+PTMmJjIzOT09U1swXSYmMTg3PT1TWzFdJiYxOTE9PVNbMl0mJihKPTMpO2Zvcih2YXIgbmU9MSxkZT0wLGZlPTA7Sjx2O0orPW5lKW5lPTEsKGZlPVNbSl0pPDEyOD9wPWZlOmZlPDIyND8ocD02NCooMzEmZmUpKyg2MyZTW0orMV0pLG5lPTIpOmZlPDI0MD8o''@;'; put 'put ''cD0oKDE1JmZlKTw8MTIpKzY0Kig2MyZTW0orMV0pKyg2MyZTW0orMl0pLG5lPTMpOihwPTI2MjE0NCooNyZmZSkrKCg2MyZTW0orMV0pPDwxMikrNjQqKDYzJlNbSisyXSkrKDYzJlNbSiszXSksbmU9NCkscDw2NTUzNj8oQltkZSsrXT0yNTUmcCxCW2RlKytdPXA+PjgpOih3PTU1Mjk2Kygo''@;'; put 'put ''cC09NjU1MzYpPj4xMCYxMDIzKSxwPTU2MzIwKygxMDIzJnApLEJbZGUrK109MjU1JncsQltkZSsrXT13Pj4+OCxCW2RlKytdPTI1NSZwLEJbZGUrK109cD4+PjgmMjU1KTtyZXR1cm4gQi5zbGljZSgwLGRlKS50b1N0cmluZygidWNzMiIpfSxPWzY1MDAxXT1mdW5jdGlvbihTLHYpe2lmKGsm''@;'; put 'put ''JkJ1ZmZlci5pc0J1ZmZlcihTKSlyZXR1cm4gdiYmImJ1ZiIhPT12PyJhcnIiIT09dj9TLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKFMpOlM7dmFyIHA9Uy5sZW5ndGgsdz0wLEo9MCxuZT0wLGRlPSJzdHJpbmciPT10eXBlb2YgUzs0KnA+ViYmKFY9NCpwLEI9QnVmZmVyLmFs''@;'; put 'put ''bG9jVW5zYWZlKFYpKTtmb3IodmFyIGZlPTA7ZmU8cDsrK2ZlKSh3PWRlP1MuY2hhckNvZGVBdChmZSk6U1tmZV0uY2hhckNvZGVBdCgwKSk8PTEyNz9CW25lKytdPXc6dzw9MjA0Nz8oQltuZSsrXT0xOTIrKHc+PjYpLEJbbmUrK109MTI4Kyg2MyZ3KSk6dz49NTUyOTYmJnc8PTU3MzQzPyh3''@;'; put 'put ''LT01NTI5NiwrK2ZlLEo9KGRlP1MuY2hhckNvZGVBdChmZSk6U1tmZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKHc8PDEwKSxCW25lKytdPTI0MCsoSj4+PjE4JjcpLEJbbmUrK109MTQ0KyhKPj4+MTImNjMpLEJbbmUrK109MTI4KyhKPj4+NiY2MyksQltuZSsrXT0xMjgrKDYzJkopKTooQltu''@;'; put 'put ''ZSsrXT0yMjQrKHc+PjEyKSxCW25lKytdPTEyOCsodz4+NiY2MyksQltuZSsrXT0xMjgrKDYzJncpKTtyZXR1cm4gdiYmImJ1ZiIhPT12PyJhcnIiIT09dj9CLnNsaWNlKDAsbmUpLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKEIsMCxuZSk6Qi5zbGljZSgwLG5lKX19dmFyIHRl''@;'; put 'put ''PWZ1bmN0aW9uKCl7aWYoayl7aWYoUlt4WzBdXSlyZXR1cm47dmFyIFM9MCx2PTA7Zm9yKFM9MDtTPHgubGVuZ3RoOysrUylGW3Y9eFtTXV0mJihSW3ZdPVUodikselt2XT1YKHYpKTtmb3IoUz0wO1M8bS5sZW5ndGg7KytTKUZbdj1tW1NdXSYmKFJbdl09ZWUodikselt2XT1xKHYpKTtmb3Io''@;'; put 'put ''Uz0wO1M8bGUubGVuZ3RoOysrUylNW3Y9bGVbU11dJiYoUlt2XT1NW3ZdKSxPW3ZdJiYoelt2XT1PW3ZdKX19LG9lPWZ1bmN0aW9uKEMsUyl7cmV0dXJuIiJ9LHNlPWZ1bmN0aW9uKFMpe2RlbGV0ZSBSW1NdLGRlbGV0ZSB6W1NdfSx1ZT17ZW5jYWNoZTp0ZSxkZWNhY2hlOmZ1bmN0aW9uKCl7''@;'; put 'put ''aWYoayl7aWYoIVJbeFswXV0pcmV0dXJuO3guZm9yRWFjaChzZSksbS5mb3JFYWNoKHNlKSxsZS5mb3JFYWNoKHNlKX1iPW9lLEQ9MH0sc2Jjczp4LGRiY3M6bX07dGUoKTt2YXIgY2U9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2''@;'; put 'put ''Nzg5Ky8iLGI9b2UsRD0wO3JldHVybiBGLnV0aWxzPXtkZWNvZGU6ZnVuY3Rpb24gQyhTLHYpe3ZhciBwO2lmKHA9UltTXSlyZXR1cm4gcCh2KTtpZigic3RyaW5nIj09dHlwZW9mIHYpcmV0dXJuIEMoUyx2LnNwbGl0KCIiKS5tYXAoSSkpO3ZhciBCZSx3PXYubGVuZ3RoLEo9bmV3IEFycmF5''@;'; put 'put ''KHcpLG5lPSIiLGRlPTAsZmU9MCx4ZT0xLExlPTAsRmU9MCxPZT1GW1NdLFdlPSIiO2lmKE9lJiYoQmU9T2UuZGVjKSlmb3IoZmU9MDtmZTx3O2ZlKz14ZSl7aWYoeGU9MiwobmU9QmVbKHZbZmVdPDw4KSt2W2ZlKzFdXSl8fCh4ZT0xLG5lPUJlW3ZbZmVdXSksIW5lKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVW5yZWNvZ25pemVkIGNvZGU6ICIrdltmZV0rIiAiK3ZbZmUreGUtMV0rIiAiK2ZlKyIgIit4ZSsiICIrQmVbdltmZV1dKTtKW0xlKytdPW5lfWVsc2V7aWYoIShXZT1hZVtTXSkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIrUyk7c3dpdGNoKFdlKXtjYXNlInV0Zjgi''@;'; put 'put ''OmZvcih3Pj0zJiYyMzk9PXZbMF0mJjE4Nz09dlsxXSYmMTkxPT12WzJdJiYoZmU9Myk7ZmU8dztmZSs9eGUpeGU9MSx2W2ZlXTwxMjg/ZGU9dltmZV06dltmZV08MjI0PyhkZT02NCooMzEmdltmZV0pKyg2MyZ2W2ZlKzFdKSx4ZT0yKTp2W2ZlXTwyNDA/KGRlPSgoMTUmdltmZV0pPDwxMikr''@;'; put 'put ''NjQqKDYzJnZbZmUrMV0pKyg2MyZ2W2ZlKzJdKSx4ZT0zKTooZGU9MjYyMTQ0Kig3JnZbZmVdKSsoKDYzJnZbZmUrMV0pPDwxMikrNjQqKDYzJnZbZmUrMl0pKyg2MyZ2W2ZlKzNdKSx4ZT00KSxkZTw2NTUzNnx8KEZlPTU1Mjk2KygoZGUtPTY1NTM2KT4+MTAmMTAyMyksZGU9NTYzMjArKDEw''@;'; put 'put ''MjMmZGUpLEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShGZSkpLEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShkZSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoayYmQnVmZmVyLmlzQnVmZmVyKHYpKXJldHVybiB2LnRvU3RyaW5nKFdlKTtmb3IoZmU9MDtmZTx3O2ZlKyspSltmZV09U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZSh2W2ZlXSk7TGU9dzticmVhaztjYXNlInV0ZjE2bGUiOmlmKHc+PTImJjI1NT09dlswXSYmMjU0PT12WzFdJiYoZmU9MiksayYmQnVmZmVyLmlzQnVmZmVyKHYpKXJldHVybiB2LnRvU3RyaW5nKFdlKTtmb3IoeGU9MjtmZSsxPHc7ZmUrPXhlKUpbTGUrK109U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZSgodltmZSsxXTw8OCkrdltmZV0pO2JyZWFrO2Nhc2UidXRmMTZiZSI6Zm9yKHc+PTImJjI1ND09dlswXSYmMjU1PT12WzFdJiYoZmU9MikseGU9MjtmZSsxPHc7ZmUrPXhlKUpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgodltmZV08PDgpK3ZbZmUrMV0pO2Jy''@;'; put 'put ''ZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKHc+PTQmJjI1NT09dlswXSYmMjU0PT12WzFdJiYwPT09dlsyXSYmMD09PXZbM10mJihmZT00KSx4ZT00O2ZlPHc7ZmUrPXhlKShkZT0odltmZSszXTw8MjQpKyh2W2ZlKzJdPDwxNikrKHZbZmUrMV08PDgpK3ZbZmVdKT42NTUzNT8oZGUtPTY1NTM2LEpb''@;'; put 'put ''TGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoZGU+PjEwJjEwMjMpKSxKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmZGUpKSk6SltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGRlKTticmVhaztjYXNlInV0ZjMyYmUiOmZvcih3Pj00JiYyNTU9PXZbM10m''@;'; put 'put ''JjI1ND09dlsyXSYmMD09PXZbMV0mJjA9PT12WzBdJiYoZmU9NCkseGU9NDtmZTx3O2ZlKz14ZSkoZGU9KHZbZmVdPDwyNCkrKHZbZmUrMV08PDE2KSsodltmZSsyXTw8OCkrdltmZSszXSk+NjU1MzU/KGRlLT02NTUzNixKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGRlPj4x''@;'; put 'put ''MCYxMDIzKSksSltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmRlKSkpOkpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShkZSk7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3Iodz49NCYmNDM9PXZbMF0mJjQ3PT12WzFdJiYxMTg9PXZbMl0mJih3Pj01JiY1Nj09dlszXSYmNDU9''@;'; put 'put ''PXZbNF0/ZmU9NTooNTY9PXZbM118fDU3PT12WzNdfHw0Mz09dlszXXx8NDc9PXZbM10pJiYoZmU9NCkpO2ZlPHc7ZmUrPXhlKWlmKDQzPT09dltmZV0paWYoeGU9MSw0NSE9PXZbZmUrMV0pe2Zvcig7U3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlK3hlXSkubWF0Y2goL1tBLVphLXowLTkrXC9d''@;'; put 'put ''Lyk7KXhlKys7dmFyIEtlPTA7NDU9PT12W2ZlK3hlXSYmKCsreGUsS2U9MSk7Zm9yKHZhciBZZT1bXSxKZT0iIixBZT0wLFRlPTAscWU9MCxYZT0wLFVlPTE7VWU8eGUtS2UmJihBZT1jZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUodltmZStVZSsrXSkpLFRlPWNlLmluZGV4T2YoU3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZSh2W2ZlK1VlKytdKSksWWUucHVzaChBZTw8MnxUZT4+NCksLTEhPT0ocWU9Y2UuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKHZbZmUrVWUrK10pKSkmJihZZS5wdXNoKCgxNSZUZSk8PDR8cWU+PjIpLC0xIT09KFhlPWNlLmluZGV4T2YoU3RyaW5nLmZyb21D''@;'; put 'put ''aGFyQ29kZSh2W2ZlK1VlKytdKSkpKSk7KVhlPDY0JiZZZS5wdXNoKCgzJnFlKTw8NnxYZSk7Zm9yKEplPUMoMTIwMSxZZSksVWU9MDtVZTxKZS5sZW5ndGg7KytVZSlKW0xlKytdPUplLmNoYXJBdChVZSl9ZWxzZSB4ZT0yLEpbTGUrK109IisiO2Vsc2UgeGU9MSxKW0xlKytdPVN0cmluZy5m''@;'; put 'put ''cm9tQ2hhckNvZGUodltmZV0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitTKyIgIithZVtTXSl9fXJldHVybiBKLnNsaWNlKDAsTGUpLmpvaW4oIiIpfSxlbmNvZGU6ZnVuY3Rpb24gQyhTLHYscCl7aWYoUz09PUQmJmIpcmV0dXJuIGIodixw''@;'; put 'put ''KTtpZih6W1NdKXJldHVybihiPXpbRD1TXSkodixwKTtrJiZCdWZmZXIuaXNCdWZmZXIodikmJih2PXYudG9TdHJpbmcoInV0ZjgiKSk7dmFyIEZlLHc9di5sZW5ndGgsSj1rP0J1ZmZlci5hbGxvY1Vuc2FmZSg0KncpOltdLG5lPTAsZGU9MCxmZT0wLHhlPTAsTGU9RltTXSxPZT0iIixCZT0i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIHY7aWYoTGUmJihGZT1MZS5lbmMpKWZvcihkZT0wO2RlPHc7KytkZSwrK2ZlKShuZT1GZVtCZT92LmNoYXJBdChkZSk6dltkZV1dKT4yNTU/KEpbZmVdPW5lPj44LEpbKytmZV09MjU1Jm5lKTpKW2ZlXT0yNTUmbmU7ZWxzZXtpZighKE9lPWFlW1NdKSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVucmVjb2duaXplZCBDUDogIitTKTtzd2l0Y2goT2Upe2Nhc2UidXRmOCI6aWYoayYmQmUpe2ZlPShKPUUodixPZSkpLmxlbmd0aDticmVha31mb3IoZGU9MDtkZTx3OysrZGUsKytmZSkobmU9QmU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKTw9MTI3''@;'; put 'put ''P0pbZmVdPW5lOm5lPD0yMDQ3PyhKW2ZlXT0xOTIrKG5lPj42KSxKWysrZmVdPTEyOCsoNjMmbmUpKTpuZT49NTUyOTYmJm5lPD01NzM0Mz8obmUtPTU1Mjk2LHhlPShCZT92LmNoYXJDb2RlQXQoKytkZSk6dlsrK2RlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsobmU8PDEwKSxKW2ZlXT0yNDAr''@;'; put 'put ''KHhlPj4+MTgmNyksSlsrK2ZlXT0xNDQrKHhlPj4+MTImNjMpLEpbKytmZV09MTI4Kyh4ZT4+PjYmNjMpLEpbKytmZV09MTI4Kyg2MyZ4ZSkpOihKW2ZlXT0yMjQrKG5lPj4xMiksSlsrK2ZlXT0xMjgrKG5lPj42JjYzKSxKWysrZmVdPTEyOCsoNjMmbmUpKTticmVhaztjYXNlImFzY2lpIjpp''@;'; put 'put ''ZihrJiYic3RyaW5nIj09dHlwZW9mIHYpe2ZlPShKPUUodixPZSkpLmxlbmd0aDticmVha31mb3IoZGU9MDtkZTx3OysrZGUsKytmZSl7aWYoISgobmU9QmU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKTw9MTI3KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBhc2NpaSAiK25l''@;'; put 'put ''KTtKW2ZlXT1uZX1icmVhaztjYXNlInV0ZjE2bGUiOmlmKGsmJiJzdHJpbmciPT10eXBlb2Ygdil7ZmU9KEo9RSh2LE9lKSkubGVuZ3RoO2JyZWFrfWZvcihkZT0wO2RlPHc7KytkZSluZT1CZT92LmNoYXJDb2RlQXQoZGUpOnZbZGVdLmNoYXJDb2RlQXQoMCksSltmZSsrXT0yNTUmbmUsSltm''@;'; put 'put ''ZSsrXT1uZT4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihkZT0wO2RlPHc7KytkZSluZT1CZT92LmNoYXJDb2RlQXQoZGUpOnZbZGVdLmNoYXJDb2RlQXQoMCksSltmZSsrXT1uZT4+OCxKW2ZlKytdPTI1NSZuZTticmVhaztjYXNlInV0ZjMybGUiOmZvcihkZT0wO2RlPHc7KytkZSkobmU9''@;'; put 'put ''QmU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJm5lPD01NzM0MyYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyh2WysrZGVdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxKW2ZlKytdPTI1NSZuZSxKW2ZlKytdPTI1NSYobmU+Pj04KSxKW2ZlKytdPTI1NSYo''@;'; put 'put ''bmU+Pj04KSxKW2ZlKytdPTI1NSYobmU+Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihkZT0wO2RlPHc7KytkZSkobmU9QmU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJm5lPD01NzM0MyYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyh2WysrZGVd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCktNTYzMjApKSxKW2ZlKzNdPTI1NSZuZSxKW2ZlKzJdPTI1NSYobmU+Pj04KSxKW2ZlKzFdPTI1NSYobmU+Pj04KSxKW2ZlXT0yNTUmKG5lPj49OCksZmUrPTQ7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3IoZGU9MDtkZTx3O2RlKyspe3ZhciBXZT1CZT92LmNoYXJBdChkZSk6''@;'; put 'put ''dltkZV0uY2hhckF0KDApO2lmKCIrIiE9PVdlKWlmKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScoKSwtLi86PyIuaW5kZXhPZihXZSk+LTEpSltmZSsrXT1XZS5jaGFyQ29kZUF0KDApO2Vsc2V7dmFyIEtlPUMoMTIwMSxX''@;'; put 'put ''ZSk7SltmZSsrXT00MyxKW2ZlKytdPWNlLmNoYXJDb2RlQXQoS2VbMF0+PjIpLEpbZmUrK109Y2UuY2hhckNvZGVBdCgoKDMmS2VbMF0pPDw0KSsoKEtlWzFdfHwwKT4+NCkpLEpbZmUrK109Y2UuY2hhckNvZGVBdCgoKDE1JktlWzFdKTw8MikrKChLZVsyXXx8MCk+PjYpKSxKW2ZlKytdPTQ1''@;'; put 'put ''fWVsc2UgSltmZSsrXT00MyxKW2ZlKytdPTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitTKyIgIithZVtTXSl9fXJldHVybiBKPUouc2xpY2UoMCxmZSksaz9wJiYiYnVmIiE9PXA/ImFyciIhPT1wP0oudG9TdHJpbmcoImJpbmFyeSIpOltd''@;'; put 'put ''LnNsaWNlLmNhbGwoSik6Sjoic3RyIj09cD9KLm1hcChLKS5qb2luKCIiKTpKfSxoYXNjcDpmdW5jdGlvbihTKXtyZXR1cm4hKCFGW1NdJiYhYWVbU10pfSxtYWdpYzphZSxjYWNoZTp1ZX0sRn0pfSw3NTQ0NjooYXQsSWUpPT57dmFyIEYsYWUseDshZnVuY3Rpb24obSl7aWYodHlwZW9mIERP''@;'; put 'put ''X05PVF9FWFBPUlRfSlNaSVA+InUiKWF0LmV4cG9ydHM9bSgpO2Vsc2UgaWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKUpTWmlwU3luYz1tKCksYWU9W10sdm9pZCAwIT09KHg9ImZ1bmN0aW9uIj09dHlwZW9mKEY9bSk/Ri5hcHBseShJZSxhZSk6RikmJihhdC5leHBvcnRzPXgp''@;'; put 'put ''O2Vsc2V7dmFyIGxlO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9sZT1nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP2xlPXdpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9sZT1nbG9iYWw6dHlwZW9mICQ8InUiJiYkLmdsb2JhbD9sZT0kLmdsb2JhbDp0eXBlb2Ygc2VsZjwidSImJihsZT1zZWxm''@;'; put 'put ''KSxsZS5KU1ppcFN5bmM9bSgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gTyhSLHosSyl7ZnVuY3Rpb24gSShqLFYpe2lmKCF6W2pdKXtpZighUltqXSl7aWYoaylyZXR1cm4gayhqLCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitqKyInIil9dmFyIFk9''@;'; put 'put ''eltqXT17ZXhwb3J0czp7fX07UltqXVswXS5jYWxsKFkuZXhwb3J0cyxmdW5jdGlvbihYKXtyZXR1cm4gSShSW2pdWzFdW1hdfHxYKX0sWSxZLmV4cG9ydHMsTyxSLHosSyl9cmV0dXJuIHpbal0uZXhwb3J0c31mb3IodmFyIGs9dm9pZCAwLEU9MDtFPEsubGVuZ3RoO0UrKylJKEtbRV0pO3Jl''@;'; put 'put ''dHVybiBJfSh7MTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO3ouZW5jb2RlPWZ1bmN0aW9uKEksayl7Zm9yKHZhciBqLFYsQixZLFgsVSxxLEU9IiIs''@;'; put 'put ''ZWU9MDtlZTxJLmxlbmd0aDspWT0oaj1JLmNoYXJDb2RlQXQoZWUrKykpPj4yLFg9KDMmaik8PDR8KFY9SS5jaGFyQ29kZUF0KGVlKyspKT4+NCxVPSgxNSZWKTw8MnwoQj1JLmNoYXJDb2RlQXQoZWUrKykpPj42LHE9NjMmQixpc05hTihWKT9VPXE9NjQ6aXNOYU4oQikmJihxPTY0KSxFPUUr''@;'; put 'put ''Sy5jaGFyQXQoWSkrSy5jaGFyQXQoWCkrSy5jaGFyQXQoVSkrSy5jaGFyQXQocSk7cmV0dXJuIEV9LHouZGVjb2RlPWZ1bmN0aW9uKEksayl7dmFyIFYsQixZLFgsVSxxLEU9IiIsZWU9MDtmb3IoST1JLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTtlZTxJLmxlbmd0aDspWT1L''@;'; put 'put ''LmluZGV4T2YoSS5jaGFyQXQoZWUrKykpLFY9KDE1JihYPUsuaW5kZXhPZihJLmNoYXJBdChlZSsrKSkpKTw8NHwoVT1LLmluZGV4T2YoSS5jaGFyQXQoZWUrKykpKT4+MixCPSgzJlUpPDw2fChxPUsuaW5kZXhPZihJLmNoYXJBdChlZSsrKSkpLEUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWTw8''@;'; put 'put ''MnxYPj40KSw2NCE9VSYmKEUrPVN0cmluZy5mcm9tQ2hhckNvZGUoVikpLDY0IT1xJiYoRSs9U3RyaW5nLmZyb21DaGFyQ29kZShCKSk7cmV0dXJuIEV9fSx7fV0sMjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBLKCl7dGhpcy5jb21wcmVzc2VkU2l6ZT0wLHRoaXMu''@;'; put 'put ''dW5jb21wcmVzc2VkU2l6ZT0wLHRoaXMuY3JjMzI9MCx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPW51bGwsdGhpcy5jb21wcmVzc2VkQ29udGVudD1udWxsfUsucHJvdG90eXBlPXtnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldENvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIG51bGx9fSxSLmV4cG9ydHM9S30se31dLDM6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7ei5TVE9SRT17bWFnaWM6IlwwXDAiLGNvbXByZXNzOmZ1bmN0aW9uKEspe3JldHVybiBLfSx1bmNvbXByZXNzOmZ1bmN0aW9uKEspe3JldHVybiBLfSxjb21wcmVzc0lucHV0''@;'; put 'put ''VHlwZTpudWxsLHVuY29tcHJlc3NJbnB1dFR5cGU6bnVsbH0sei5ERUZMQVRFPU8oIi4vZmxhdGUiKX0seyIuL2ZsYXRlIjo4fV0sNDpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3V0aWxzIiksST1bMCwxOTk2OTU5ODk0LDM5OTM5MTk3ODgsMjU2NzUyNDc5NCwx''@;'; put 'put ''MjQ2MzQxMzcsMTg4NjA1NzYxNSwzOTE1NjIxNjg1LDI2NTczOTIwMzUsMjQ5MjY4Mjc0LDIwNDQ1MDgzMjQsMzc3MjExNTIzMCwyNTQ3MTc3ODY0LDE2Mjk0MTk5NSwyMTI1NTYxMDIxLDM4ODc2MDcwNDcsMjQyODQ0NDA0OSw0OTg1MzY1NDgsMTc4OTkyNzY2Niw0MDg5MDE2NjQ4LDIyMjcw''@;'; put 'put ''NjEyMTQsNDUwNTQ4ODYxLDE4NDMyNTg2MDMsNDEwNzU4MDc1MywyMjExNjc3NjM5LDMyNTg4Mzk5MCwxNjg0Nzc3MTUyLDQyNTExMjIwNDIsMjMyMTkyNjYzNiwzMzU2MzM0ODcsMTY2MTM2NTQ2NSw0MTk1MzAyNzU1LDIzNjYxMTUzMTcsOTk3MDczMDk2LDEyODE5NTM4ODYsMzU3OTg1NTMz''@;'; put 'put ''MiwyNzI0Njg4MjQyLDEwMDY4ODgxNDUsMTI1ODYwNzY4NywzNTI0MTAxNjI5LDI3Njg5NDI0NDMsOTAxMDk3NzIyLDExMTkwMDA2ODQsMzY4NjUxNzIwNiwyODk4MDY1NzI4LDg1MzA0NDQ1MSwxMTcyMjY2MTAxLDM3MDUwMTU3NTksMjg4MjYxNjY2NSw2NTE3Njc5ODAsMTM3MzUwMzU0Niwz''@;'; put 'put ''MzY5NTU0MzA0LDMyMTgxMDQ1OTgsNTY1NTA3MjUzLDE0NTQ2MjE3MzEsMzQ4NTExMTcwNSwzMDk5NDM2MzAzLDY3MTI2Njk3NCwxNTk0MTk4MDI0LDMzMjI3MzA5MzAsMjk3MDM0NzgxMiw3OTU4MzU1MjcsMTQ4MzIzMDIyNSwzMjQ0MzY3Mjc1LDMwNjAxNDk1NjUsMTk5NDE0NjE5MiwzMTE1''@;'; put 'put ''ODUzNCwyNTYzOTA3NzcyLDQwMjM3MTc5MzAsMTkwNzQ1OTQ2NSwxMTI2MzcyMTUsMjY4MDE1MzI1MywzOTA0NDI3MDU5LDIwMTM3NzYyOTAsMjUxNzIyMDM2LDI1MTcyMTUzNzQsMzc3NTgzMDA0MCwyMTM3NjU2NzYzLDE0MTM3NjgxMywyNDM5Mjc3NzE5LDM4NjUyNzEyOTcsMTgwMjE5NTQ0''@;'; put 'put ''NCw0NzY4NjQ4NjYsMjIzODAwMTM2OCw0MDY2NTA4ODc4LDE4MTIzNzA5MjUsNDUzMDkyNzMxLDIxODE2MjUwMjUsNDExMTQ1MTIyMywxNzA2MDg4OTAyLDMxNDA0MjcwNCwyMzQ0NTMyMjAyLDQyNDAwMTc1MzIsMTY1ODY1ODI3MSwzNjY2MTk5NzcsMjM2MjY3MDMyMyw0MjI0OTk0NDA1LDEz''@;'; put 'put ''MDM1MzU5NjAsOTg0OTYxNDg2LDI3NDcwMDcwOTIsMzU2OTAzNzUzOCwxMjU2MTcwODE3LDEwMzc2MDQzMTEsMjc2NTIxMDczMywzNTU0MDc5OTk1LDExMzEwMTQ1MDYsODc5Njc5OTk2LDI5MDkyNDM0NjIsMzY2Mzc3MTg1NiwxMTQxMTI0NDY3LDg1NTg0MjI3NywyODUyODAxNjMxLDM3MDg2''@;'; put 'put ''NDg2NDksMTM0MjUzMzk0OCw2NTQ0NTkzMDYsMzE4ODM5NjA0OCwzMzczMDE1MTc0LDE0NjY0Nzk5MDksNTQ0MTc5NjM1LDMxMTA1MjM5MTMsMzQ2MjUyMjAxNSwxNTkxNjcxMDU0LDcwMjEzODc3NiwyOTY2NDYwNDUwLDMzNTI3OTk0MTIsMTUwNDkxODgwNyw3ODM1NTE4NzMsMzA4MjY0MDQ0''@;'; put 'put ''MywzMjMzNDQyOTg5LDM5ODgyOTIzODQsMjU5NjI1NDY0Niw2MjMxNzA2OCwxOTU3ODEwODQyLDM5Mzk4NDU5NDUsMjY0NzgxNjExMSw4MTQ3MDk5NywxOTQzODAzNTIzLDM4MTQ5MTg5MzAsMjQ4OTU5NjgwNCwyMjUyNzQ0MzAsMjA1Mzc5MDM3NiwzODI2MTc1NzU1LDI0NjY5MDYwMTMsMTY3''@;'; put 'put ''ODE2NzQzLDIwOTc2NTEzNzcsNDAyNzU1MjU4MCwyMjY1NDkwMzg2LDUwMzQ0NDA3MiwxNzYyMDUwODE0LDQxNTA0MTcyNDUsMjE1NDEyOTM1NSw0MjY1MjIyMjUsMTg1MjUwNzg3OSw0Mjc1MzEzNTI2LDIzMTIzMTc5MjAsMjgyNzUzNjI2LDE3NDI1NTU4NTIsNDE4OTcwODE0MywyMzk0ODc3''@;'; put 'put ''OTQ1LDM5NzkxNzc2MywxNjIyMTgzNjM3LDM2MDQzOTA4ODgsMjcxNDg2NjU1OCw5NTM3Mjk3MzIsMTM0MDA3NjYyNiwzNTE4NzE5OTg1LDI3OTczNjA5OTksMTA2ODgyODM4MSwxMjE5NjM4ODU5LDM2MjQ3NDE4NTAsMjkzNjY3NTE0OCw5MDYxODU0NjIsMTA5MDgxMjUxMiwzNzQ3NjcyMDAz''@;'; put 'put ''LDI4MjUzNzk2NjksODI5MzI5MTM1LDExODEzMzUxNjEsMzQxMjE3NzgwNCwzMTYwODM0ODQyLDYyODA4NTQwOCwxMzgyNjA1MzY2LDM0MjMzNjkxMDksMzEzODA3ODQ2Nyw1NzA1NjIyMzMsMTQyNjQwMDgxNSwzMzE3MzE2NTQyLDI5OTg3MzM2MDgsNzMzMjM5OTU0LDE1NTUyNjE5NTYsMzI2''@;'; put 'put ''ODkzNTU5MSwzMDUwMzYwNjI1LDc1MjQ1OTQwMywxNTQxMzIwMjIxLDI2MDcwNzE5MjAsMzk2NTk3MzAzMCwxOTY5OTIyOTcyLDQwNzM1NDk4LDI2MTc4MzcyMjUsMzk0MzU3NzE1MSwxOTEzMDg3ODc3LDgzOTA4MzcxLDI1MTIzNDE2MzQsMzgwMzc0MDY5MiwyMDc1MjA4NjIyLDIxMzI2MTEx''@;'; put 'put ''MiwyNDYzMjcyNjAzLDM4NTU5OTAyODUsMjA5NDg1NDA3MSwxOTg5NTg4ODEsMjI2MjAyOTAxMiw0MDU3MjYwNjEwLDE3NTkzNTk5OTIsNTM0NDE0MTkwLDIxNzY3MTg1NDEsNDEzOTMyOTExNSwxODczODM2MDAxLDQxNDY2NDU2NywyMjgyMjQ4OTM0LDQyNzkyMDAzNjgsMTcxMTY4NDU1NCwy''@;'; put 'put ''ODUyODExMTYsMjQwNTgwMTcyNyw0MTY3MjE2NzQ1LDE2MzQ0Njc3OTUsMzc2MjI5NzAxLDI2ODUwNjc4OTYsMzYwODAwNzQwNiwxMzA4OTE4NjEyLDk1NjU0MzkzOCwyODA4NTU1MTA1LDM0OTU5NTgyNjMsMTIzMTYzNjMwMSwxMDQ3NDI3MDM1LDI5MzI5NTk4MTgsMzY1NDcwMzgzNiwxMDg4''@;'; put 'put ''MzU5MjcwLDkzNjkxOGUzLDI4NDc3MTQ4OTksMzczNjgzNzgyOSwxMjAyOTAwODYzLDgxNzIzMzg5NywzMTgzMzQyMTA4LDM0MDEyMzcxMzAsMTQwNDI3NzU1Miw2MTU4MTgxNTAsMzEzNDIwNzQ5MywzNDUzNDIxMjAzLDE0MjM4NTc0NDksNjAxNDUwNDMxLDMwMDk4Mzc2MTQsMzI5NDcxMDQ1''@;'; put 'put ''NiwxNTY3MTAzNzQ2LDcxMTkyODcyNCwzMDIwNjY4NDcxLDMyNzIzODAwNjUsMTUxMDMzNDIzNSw3NTUxNjcxMTddO1IuZXhwb3J0cz1mdW5jdGlvbihFLGope2lmKHR5cGVvZiBFPiJ1Inx8IUUubGVuZ3RoKXJldHVybiAwO3ZhciBWPSJzdHJpbmciIT09Sy5nZXRUeXBlT2YoRSk7dHlwZW9m''@;'; put 'put ''IGo+InUiJiYoaj0wKTt2YXIgWD0wO2pePS0xO2Zvcih2YXIgVT0wLHE9RS5sZW5ndGg7VTxxO1UrKylYPVY/RVtVXTpFLmNoYXJDb2RlQXQoVSksaj1qPj4+OF5JWzI1NSYoal5YKV07cmV0dXJuLTFean19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBLPU8oIi4vdXRpbHMiKTtmdW5jdGlvbiBJKGspe3RoaXMuZGF0YT1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5pbmRleD0wfUkucHJvdG90eXBlPXtjaGVja09mZnNldDpmdW5jdGlvbihrKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCtrKX0sY2hlY2tJbmRleDpmdW5jdGlvbihr''@;'; put 'put ''KXtpZih0aGlzLmxlbmd0aDxrfHxrPDApdGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNrZWQgaW5kZXggPSAiK2srIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihrKXt0aGlzLmNoZWNr''@;'; put 'put ''SW5kZXgoayksdGhpcy5pbmRleD1rfSxza2lwOmZ1bmN0aW9uKGspe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCtrKX0sYnl0ZUF0OmZ1bmN0aW9uKGspe30scmVhZEludDpmdW5jdGlvbihrKXt2YXIgaixFPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQoayksaj10aGlzLmluZGV4K2stMTtqPj10''@;'; put 'put ''aGlzLmluZGV4O2otLSlFPShFPDw4KSt0aGlzLmJ5dGVBdChqKTtyZXR1cm4gdGhpcy5pbmRleCs9ayxFfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKGspe3JldHVybiBLLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMucmVhZERhdGEoaykpfSxyZWFkRGF0YTpmdW5jdGlvbihrKXt9LGxhc3RJbmRl''@;'; put 'put ''eE9mU2lnbmF0dXJlOmZ1bmN0aW9uKGspe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgaz10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKDE5ODArKGs+PjI1JjEyNyksKGs+PjIxJjE1KS0xLGs+PjE2JjMxLGs+PjExJjMxLGs+PjUmNjMsKDMxJmspPDwxKX19LFIuZXhwb3J0cz1J''@;'; put 'put ''fSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt6LmJhc2U2ND0hMSx6LmJpbmFyeT0hMSx6LmRpcj0hMSx6LmNyZWF0ZUZvbGRlcnM9ITEsei5kYXRlPW51bGwsei5jb21wcmVzc2lvbj1udWxsLHouY29tbWVudD1udWxsfSx7fV0sNzpbZnVuY3Rpb24o''@;'; put 'put ''TyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3V0aWxzIik7ei5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKEkpe3JldHVybiBLLnN0cmluZzJiaW5hcnkoSSl9LHouc3RyaW5nMlVpbnQ4QXJyYXk9ZnVuY3Rpb24oSSl7cmV0dXJuIEsudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEkpfSx6''@;'; put 'put ''LnVpbnQ4QXJyYXkyU3RyaW5nPWZ1bmN0aW9uKEkpe3JldHVybiBLLnRyYW5zZm9ybVRvKCJzdHJpbmciLEkpfSx6LnN0cmluZzJCbG9iPWZ1bmN0aW9uKEkpe3ZhciBrPUsudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixJKTtyZXR1cm4gSy5hcnJheUJ1ZmZlcjJCbG9iKGspfSx6LmFycmF5''@;'; put 'put ''QnVmZmVyMkJsb2I9ZnVuY3Rpb24oSSl7cmV0dXJuIEsuYXJyYXlCdWZmZXIyQmxvYihJKX0sei50cmFuc2Zvcm1Ubz1mdW5jdGlvbihJLGspe3JldHVybiBLLnRyYW5zZm9ybVRvKEksayl9LHouZ2V0VHlwZU9mPWZ1bmN0aW9uKEkpe3JldHVybiBLLmdldFR5cGVPZihJKX0sei5jaGVja1N1''@;'; put 'put ''cHBvcnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEsuY2hlY2tTdXBwb3J0KEkpfSx6Lk1BWF9WQUxVRV8xNkJJVFM9Sy5NQVhfVkFMVUVfMTZCSVRTLHouTUFYX1ZBTFVFXzMyQklUUz1LLk1BWF9WQUxVRV8zMkJJVFMsei5wcmV0dHk9ZnVuY3Rpb24oSSl7cmV0dXJuIEsucHJldHR5KEkpfSx6LmZp''@;'; put 'put ''bmRDb21wcmVzc2lvbj1mdW5jdGlvbihJKXtyZXR1cm4gSy5maW5kQ29tcHJlc3Npb24oSSl9LHouaXNSZWdFeHA9ZnVuY3Rpb24oSSl7cmV0dXJuIEsuaXNSZWdFeHAoSSl9fSx7Ii4vdXRpbHMiOjIxfV0sODpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10eXBlb2YgVWlu''@;'; put 'put ''dDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBVaW50MzJBcnJheTwidSIsST1PKCJwYWtvIik7ei51bmNvbXByZXNzSW5wdXRUeXBlPUs/InVpbnQ4YXJyYXkiOiJhcnJheSIsei5jb21wcmVzc0lucHV0VHlwZT1LPyJ1aW50OGFycmF5IjoiYXJyYXkiLHoubWFn''@;'; put 'put ''aWM9IlxiXDAiLHouY29tcHJlc3M9ZnVuY3Rpb24oayl7cmV0dXJuIEkuZGVmbGF0ZVJhdyhrKX0sei51bmNvbXByZXNzPWZ1bmN0aW9uKGspe3JldHVybiBJLmluZmxhdGVSYXcoayl9fSx7cGFrbzoyNH1dLDk6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9iYXNl''@;'; put 'put ''NjQiKTtmdW5jdGlvbiBJKGssRSl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJKGssRSk7dGhpcy5maWxlcz17fSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9IiIsayYmdGhpcy5sb2FkKGssRSksdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBqPW5ldyBJO2Zvcih2''@;'; put 'put ''YXIgViBpbiB0aGlzKSJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzW1ZdJiYoaltWXT10aGlzW1ZdKTtyZXR1cm4gan19KEkucHJvdG90eXBlPU8oIi4vb2JqZWN0IikpLmxvYWQ9TygiLi9sb2FkIiksSS5zdXBwb3J0PU8oIi4vc3VwcG9ydCIpLEkuZGVmYXVsdHM9TygiLi9kZWZhdWx0cyIpLEku''@;'; put 'put ''dXRpbHM9TygiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiKSxJLmJhc2U2ND17ZW5jb2RlOmZ1bmN0aW9uKGspe3JldHVybiBLLmVuY29kZShrKX0sZGVjb2RlOmZ1bmN0aW9uKGspe3JldHVybiBLLmRlY29kZShrKX19LEkuY29tcHJlc3Npb25zPU8oIi4vY29tcHJlc3Npb25zIiksUi5leHBv''@;'; put 'put ''cnRzPUl9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3Npb25zIjozLCIuL2RlZmF1bHRzIjo2LCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyI6NywiLi9sb2FkIjoxMCwiLi9vYmplY3QiOjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9''@;'; put 'put ''TygiLi9iYXNlNjQiKSxJPU8oIi4vemlwRW50cmllcyIpO1IuZXhwb3J0cz1mdW5jdGlvbihrLEUpe3ZhciBqLFYsQixZO2ZvcigoRT1FfHx7fSkuYmFzZTY0JiYoaz1LLmRlY29kZShrKSksaj0oVj1uZXcgSShrLEUpKS5maWxlcyxCPTA7QjxqLmxlbmd0aDtCKyspdGhpcy5maWxlKChZPWpb''@;'; put 'put ''Ql0pLmZpbGVOYW1lLFkuZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6WS5kYXRlLGRpcjpZLmRpcixjb21tZW50OlkuZmlsZUNvbW1lbnQubGVuZ3RoP1kuZmlsZUNvbW1lbnQ6bnVsbCxjcmVhdGVGb2xkZXJzOkUuY3JlYXRlRm9sZGVyc30p''@;'; put 'put ''O3JldHVybiBWLnppcENvbW1lbnQubGVuZ3RoJiYodGhpcy5jb21tZW50PVYuemlwQ29tbWVudCksdGhpc319LHsiLi9iYXNlNjQiOjEsIi4vemlwRW50cmllcyI6MjJ9XSwxMTpbZnVuY3Rpb24oTyxSLHopeyhmdW5jdGlvbihLKXsidXNlIHN0cmljdCI7dmFyIEk9ZnVuY3Rpb24oKXt9O2lm''@;'; put 'put ''KHR5cGVvZiBLPCJ1Iil7dmFyIGs9IUsuZnJvbTtpZighayl0cnl7Sy5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7az0hMH1JPWs/ZnVuY3Rpb24oRSxqKXtyZXR1cm4gaj9uZXcgSyhFLGopOm5ldyBLKEUpfTpLLmZyb20uYmluZChLKSxLLmFsbG9jfHwoSy5hbGxvYz1mdW5jdGlvbihFKXty''@;'; put 'put ''ZXR1cm4gbmV3IEsoRSl9KX1SLmV4cG9ydHM9ZnVuY3Rpb24oRSxqKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEU/Sy5hbGxvYyhFKTpJKEUsail9LFIuZXhwb3J0cy50ZXN0PWZ1bmN0aW9uKEUpe3JldHVybiBLLmlzQnVmZmVyKEUpfX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9C''@;'; put 'put ''dWZmZXI6dm9pZCAwKX0se31dLDEyOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vdWludDhBcnJheVJlYWRlciIpO2Z1bmN0aW9uIEkoayl7dGhpcy5kYXRhPWssdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KEkucHJvdG90eXBlPW5l''@;'; put 'put ''dyBLKS5yZWFkRGF0YT1mdW5jdGlvbihrKXt0aGlzLmNoZWNrT2Zmc2V0KGspO3ZhciBFPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrayk7cmV0dXJuIHRoaXMuaW5kZXgrPWssRX0sUi5leHBvcnRzPUl9LHsiLi91aW50OEFycmF5UmVhZGVyIjoxOH1dLDEzOltmdW5j''@;'; put 'put ''dGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vc3VwcG9ydCIpLEk9TygiLi91dGlscyIpLGs9TygiLi9jcmMzMiIpLEU9TygiLi9zaWduYXR1cmUiKSxqPU8oIi4vZGVmYXVsdHMiKSxWPU8oIi4vYmFzZTY0IiksQj1PKCIuL2NvbXByZXNzaW9ucyIpLFk9TygiLi9jb21wcmVz''@;'; put 'put ''c2VkT2JqZWN0IiksWD1PKCIuL25vZGVCdWZmZXIiKSxVPU8oIi4vdXRmOCIpLHE9TygiLi9zdHJpbmdXcml0ZXIiKSxlZT1PKCIuL3VpbnQ4QXJyYXlXcml0ZXIiKSx0ZT1mdW5jdGlvbihTKXtpZihTLl9kYXRhIGluc3RhbmNlb2YgWSYmKFMuX2RhdGE9Uy5fZGF0YS5nZXRDb250ZW50KCks''@;'; put 'put ''Uy5vcHRpb25zLmJpbmFyeT0hMCxTLm9wdGlvbnMuYmFzZTY0PSExLCJ1aW50OGFycmF5Ij09PUkuZ2V0VHlwZU9mKFMuX2RhdGEpKSl7dmFyIHY9Uy5fZGF0YTtTLl9kYXRhPW5ldyBVaW50OEFycmF5KHYubGVuZ3RoKSwwIT09di5sZW5ndGgmJlMuX2RhdGEuc2V0KHYsMCl9cmV0dXJuIFMu''@;'; put 'put ''X2RhdGF9LG9lPWZ1bmN0aW9uKFMpe3ZhciB2PXRlKFMpO3JldHVybiJzdHJpbmciPT09SS5nZXRUeXBlT2Yodik/IVMub3B0aW9ucy5iaW5hcnkmJksubm9kZWJ1ZmZlcj9YKHYsInV0Zi04Iik6Uy5hc0JpbmFyeSgpOnZ9LHNlPWZ1bmN0aW9uKFMpe3ZhciB2PXRlKHRoaXMpO3JldHVybiBu''@;'; put 'put ''dWxsPT09dnx8dHlwZW9mIHY+InUiPyIiOih0aGlzLm9wdGlvbnMuYmFzZTY0JiYodj1WLmRlY29kZSh2KSksdj1TJiZ0aGlzLm9wdGlvbnMuYmluYXJ5P0MudXRmOGRlY29kZSh2KTpJLnRyYW5zZm9ybVRvKCJzdHJpbmciLHYpLCFTJiYhdGhpcy5vcHRpb25zLmJpbmFyeSYmKHY9SS50cmFu''@;'; put 'put ''c2Zvcm1Ubygic3RyaW5nIixDLnV0ZjhlbmNvZGUodikpKSx2KX0saGU9ZnVuY3Rpb24oUyx2LHApe3RoaXMubmFtZT1TLHRoaXMuZGlyPXAuZGlyLHRoaXMuZGF0ZT1wLmRhdGUsdGhpcy5jb21tZW50PXAuY29tbWVudCx0aGlzLl9kYXRhPXYsdGhpcy5vcHRpb25zPXAsdGhpcy5faW5pdGlh''@;'; put 'put ''bE1ldGFkYXRhPXtkaXI6cC5kaXIsZGF0ZTpwLmRhdGV9fTtoZS5wcm90b3R5cGU9e2FzVGV4dDpmdW5jdGlvbigpe3JldHVybiBzZS5jYWxsKHRoaXMsITApfSxhc0JpbmFyeTpmdW5jdGlvbigpe3JldHVybiBzZS5jYWxsKHRoaXMsITEpfSxhc05vZGVCdWZmZXI6ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Uz1vZSh0aGlzKTtyZXR1cm4gSS50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsUyl9LGFzVWludDhBcnJheTpmdW5jdGlvbigpe3ZhciBTPW9lKHRoaXMpO3JldHVybiBJLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixTKX0sYXNBcnJheUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFz''@;'; put 'put ''VWludDhBcnJheSgpLmJ1ZmZlcn19O3ZhciB1ZT1mdW5jdGlvbihTLHYpe3ZhciB3LHA9IiI7Zm9yKHc9MDt3PHY7dysrKXArPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JlMpLFM+Pj49ODtyZXR1cm4gcH0sY2U9ZnVuY3Rpb24oKXt2YXIgdixwLFM9e307Zm9yKHY9MDt2PGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg7disrKWZvcihwIGluIGFyZ3VtZW50c1t2XSlhcmd1bWVudHNbdl0uaGFzT3duUHJvcGVydHkocCkmJnR5cGVvZiBTW3BdPiJ1IiYmKFNbcF09YXJndW1lbnRzW3ZdW3BdKTtyZXR1cm4gU30sYj1mdW5jdGlvbihTLHYscCl7dmFyIEosdz1JLmdldFR5cGVPZih2KTtpZihwPWZ1bmN0''@;'; put 'put ''aW9uKFMpe3JldHVybiEwPT09KFM9U3x8e30pLmJhc2U2NCYmbnVsbD09Uy5iaW5hcnkmJihTLmJpbmFyeT0hMCksKFM9Y2UoUyxqKSkuZGF0ZT1TLmRhdGV8fG5ldyBEYXRlLG51bGwhPT1TLmNvbXByZXNzaW9uJiYoUy5jb21wcmVzc2lvbj1TLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCkp''@;'; put 'put ''LFN9KHApLHAuY3JlYXRlRm9sZGVycyYmKEo9RChTKSkmJkguY2FsbCh0aGlzLEosITApLHAuZGlyfHxudWxsPT09dnx8dHlwZW9mIHY+InUiKXAuYmFzZTY0PSExLHAuYmluYXJ5PSExLHY9bnVsbDtlbHNlIGlmKCJzdHJpbmciPT09dylwLmJpbmFyeSYmIXAuYmFzZTY0JiYhMCE9PXAub3B0''@;'; put 'put ''aW1pemVkQmluYXJ5U3RyaW5nJiYodj1JLnN0cmluZzJiaW5hcnkodikpO2Vsc2V7aWYocC5iYXNlNjQ9ITEscC5iaW5hcnk9ITAsISh3fHx2IGluc3RhbmNlb2YgWSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBvZiAnIitTKyInIGlzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCAhIik7''@;'; put 'put ''ImFycmF5YnVmZmVyIj09PXcmJih2PUkudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLHYpKX12YXIgbmU9bmV3IGhlKFMsdixwKTtyZXR1cm4gdGhpcy5maWxlc1tTXT1uZSxuZX0sRD1mdW5jdGlvbihTKXsiLyI9PVMuc2xpY2UoLTEpJiYoUz1TLnN1YnN0cmluZygwLFMubGVuZ3RoLTEpKTt2''@;'; put 'put ''YXIgdj1TLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIHY+MD9TLnN1YnN0cmluZygwLHYpOiIifSxIPWZ1bmN0aW9uKFMsdil7cmV0dXJuIi8iIT1TLnNsaWNlKC0xKSYmKFMrPSIvIiksdj10eXBlb2YgdjwidSImJnYsdGhpcy5maWxlc1tTXXx8Yi5jYWxsKHRoaXMsUyxudWxsLHtkaXI6ITAs''@;'; put 'put ''Y3JlYXRlRm9sZGVyczp2fSksdGhpcy5maWxlc1tTXX0sTj1mdW5jdGlvbihTLHYpe3ZhciB3LHA9bmV3IFk7cmV0dXJuIFMuX2RhdGEgaW5zdGFuY2VvZiBZPyhwLnVuY29tcHJlc3NlZFNpemU9Uy5fZGF0YS51bmNvbXByZXNzZWRTaXplLHAuY3JjMzI9Uy5fZGF0YS5jcmMzMiwwPT09cC51''@;'; put 'put ''bmNvbXByZXNzZWRTaXplfHxTLmRpcj8odj1CLlNUT1JFLHAuY29tcHJlc3NlZENvbnRlbnQ9IiIscC5jcmMzMj0wKTpTLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kPT09di5tYWdpYz9wLmNvbXByZXNzZWRDb250ZW50PVMuX2RhdGEuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKToodz1TLl9kYXRh''@;'; put 'put ''LmdldENvbnRlbnQoKSxwLmNvbXByZXNzZWRDb250ZW50PXYuY29tcHJlc3MoSS50cmFuc2Zvcm1Ubyh2LmNvbXByZXNzSW5wdXRUeXBlLHcpKSkpOigoISh3PW9lKFMpKXx8MD09PXcubGVuZ3RofHxTLmRpcikmJih2PUIuU1RPUkUsdz0iIikscC51bmNvbXByZXNzZWRTaXplPXcubGVuZ3Ro''@;'; put 'put ''LHAuY3JjMzI9ayh3KSxwLmNvbXByZXNzZWRDb250ZW50PXYuY29tcHJlc3MoSS50cmFuc2Zvcm1Ubyh2LmNvbXByZXNzSW5wdXRUeXBlLHcpKSkscC5jb21wcmVzc2VkU2l6ZT1wLmNvbXByZXNzZWRDb250ZW50Lmxlbmd0aCxwLmNvbXByZXNzaW9uTWV0aG9kPXYubWFnaWMscH0sZz1mdW5j''@;'; put 'put ''dGlvbihTLHYscCx3KXt2YXIgT2UsQmUsSmUsbHQsbmU9SS50cmFuc2Zvcm1Ubygic3RyaW5nIixVLnV0ZjhlbmNvZGUodi5uYW1lKSksZGU9di5jb21tZW50fHwiIixmZT1JLnRyYW5zZm9ybVRvKCJzdHJpbmciLFUudXRmOGVuY29kZShkZSkpLHhlPW5lLmxlbmd0aCE9PXYubmFtZS5sZW5n''@;'; put 'put ''dGgsTGU9ZmUubGVuZ3RoIT09ZGUubGVuZ3RoLEZlPXYub3B0aW9ucyxXZT0iIixLZT0iIixZZT0iIjtKZT12Ll9pbml0aWFsTWV0YWRhdGEuZGlyIT09di5kaXI/di5kaXI6RmUuZGlyLE9lPShsdD12Ll9pbml0aWFsTWV0YWRhdGEuZGF0ZSE9PXYuZGF0ZT92LmRhdGU6RmUuZGF0ZSkuZ2V0''@;'; put 'put ''SG91cnMoKSxPZTw8PTYsT2V8PWx0LmdldE1pbnV0ZXMoKSxPZTw8PTUsT2V8PWx0LmdldFNlY29uZHMoKS8yLEJlPWx0LmdldEZ1bGxZZWFyKCktMTk4MCxCZTw8PTQsQmV8PWx0LmdldE1vbnRoKCkrMSxCZTw8PTUsQmV8PWx0LmdldERhdGUoKSx4ZSYmKEtlPXVlKDEsMSkrdWUoayhuZSks''@;'; put 'put ''NCkrbmUsV2UrPSJ1cCIrdWUoS2UubGVuZ3RoLDIpK0tlKSxMZSYmKFllPXVlKDEsMSkrdWUodGhpcy5jcmMzMihmZSksNCkrZmUsV2UrPSJ1YyIrdWUoWWUubGVuZ3RoLDIpK1llKTt2YXIgUGU9IiI7cmV0dXJuIFBlKz0iXG5cMCIsUGUrPXhlfHxMZT8iXDBcYiI6IlwwXDAiLFBlKz1wLmNv''@;'; put 'put ''bXByZXNzaW9uTWV0aG9kLFBlKz11ZShPZSwyKSxQZSs9dWUoQmUsMiksUGUrPXVlKHAuY3JjMzIsNCksUGUrPXVlKHAuY29tcHJlc3NlZFNpemUsNCksUGUrPXVlKHAudW5jb21wcmVzc2VkU2l6ZSw0KSxQZSs9dWUobmUubGVuZ3RoLDIpLFBlKz11ZShXZS5sZW5ndGgsMikse2ZpbGVSZWNv''@;'; put 'put ''cmQ6RS5MT0NBTF9GSUxFX0hFQURFUitQZStuZStXZSxkaXJSZWNvcmQ6RS5DRU5UUkFMX0ZJTEVfSEVBREVSKyJceDE0XDAiK1BlK3VlKGZlLmxlbmd0aCwyKSsiXDBcMFwwXDAiKyghMD09PUplPyJceDEwXDBcMFwwIjoiXDBcMFwwXDAiKSt1ZSh3LDQpK25lK1dlK2ZlLGNvbXByZXNzZWRP''@;'; put 'put ''YmplY3Q6cH19LEM9e2xvYWQ6ZnVuY3Rpb24oUyx2KXt0aHJvdyBuZXcgRXJyb3IoIkxvYWQgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLiBJcyB0aGUgZmlsZSBqc3ppcC1sb2FkLmpzIGluY2x1ZGVkID8iKX0sZmlsdGVyOmZ1bmN0aW9uKFMpe3ZhciBwLHcsSixuZSx2PVtdO2ZvcihwIGluIHRo''@;'; put 'put ''aXMuZmlsZXMpdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShwKSYmKG5lPW5ldyBoZSgoSj10aGlzLmZpbGVzW3BdKS5uYW1lLEouX2RhdGEsY2UoSi5vcHRpb25zKSksdz1wLnNsaWNlKHRoaXMucm9vdC5sZW5ndGgscC5sZW5ndGgpLHAuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRo''@;'; put 'put ''aXMucm9vdCYmUyh3LG5lKSYmdi5wdXNoKG5lKSk7cmV0dXJuIHZ9LGZpbGU6ZnVuY3Rpb24oUyx2LHApe2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihJLmlzUmVnRXhwKFMpKXt2YXIgdz1TO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihKLG5lKXtyZXR1cm4hbmUuZGlyJiZ3LnRl''@;'; put 'put ''c3QoSil9KX1yZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oSixuZSl7cmV0dXJuIW5lLmRpciYmSj09PVN9KVswXXx8bnVsbH1yZXR1cm4gYi5jYWxsKHRoaXMsUz10aGlzLnJvb3QrUyx2LHApLHRoaXN9LGZvbGRlcjpmdW5jdGlvbihTKXtpZighUylyZXR1cm4gdGhpcztpZihJLmlzUmVn''@;'; put 'put ''RXhwKFMpKXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihKLG5lKXtyZXR1cm4gbmUuZGlyJiZTLnRlc3QoSil9KTt2YXIgcD1ILmNhbGwodGhpcyx0aGlzLnJvb3QrUyksdz10aGlzLmNsb25lKCk7cmV0dXJuIHcucm9vdD1wLm5hbWUsd30scmVtb3ZlOmZ1bmN0aW9uKFMpe3ZhciB2PXRo''@;'; put 'put ''aXMuZmlsZXNbUz10aGlzLnJvb3QrU107aWYodnx8KCIvIiE9Uy5zbGljZSgtMSkmJihTKz0iLyIpLHY9dGhpcy5maWxlc1tTXSksdiYmIXYuZGlyKWRlbGV0ZSB0aGlzLmZpbGVzW1NdO2Vsc2UgZm9yKHZhciBwPXRoaXMuZmlsdGVyKGZ1bmN0aW9uKEosbmUpe3JldHVybiBuZS5uYW1lLnNs''@;'; put 'put ''aWNlKDAsUy5sZW5ndGgpPT09U30pLHc9MDt3PHAubGVuZ3RoO3crKylkZWxldGUgdGhpcy5maWxlc1twW3ddLm5hbWVdO3JldHVybiB0aGlzfSxnZW5lcmF0ZTpmdW5jdGlvbihTKXtTPWNlKFN8fHt9LHtiYXNlNjQ6ITAsY29tcHJlc3Npb246IlNUT1JFIix0eXBlOiJiYXNlNjQiLGNvbW1l''@;'; put 'put ''bnQ6bnVsbH0pLEkuY2hlY2tTdXBwb3J0KFMudHlwZSk7dmFyIEosbmUsV2Usdj1bXSxwPTAsdz0wLGRlPUkudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy51dGY4ZW5jb2RlKFMuY29tbWVudHx8dGhpcy5jb21tZW50fHwiIikpO2Zvcih2YXIgZmUgaW4gdGhpcy5maWxlcylpZih0aGlzLmZp''@;'; put 'put ''bGVzLmhhc093blByb3BlcnR5KGZlKSl7dmFyIHhlPXRoaXMuZmlsZXNbZmVdLExlPXhlLm9wdGlvbnMuY29tcHJlc3Npb258fFMuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSxGZT1CW0xlXTtpZighRmUpdGhyb3cgbmV3IEVycm9yKExlKyIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24g''@;'; put 'put ''bWV0aG9kICEiKTt2YXIgT2U9Ti5jYWxsKHRoaXMseGUsRmUpLEJlPWcuY2FsbCh0aGlzLGZlLHhlLE9lLHApO3ArPUJlLmZpbGVSZWNvcmQubGVuZ3RoK09lLmNvbXByZXNzZWRTaXplLHcrPUJlLmRpclJlY29yZC5sZW5ndGgsdi5wdXNoKEJlKX1XZT1FLkNFTlRSQUxfRElSRUNUT1JZX0VO''@;'; put 'put ''RCsiXDBcMFwwXDAiK3VlKHYubGVuZ3RoLDIpK3VlKHYubGVuZ3RoLDIpK3VlKHcsNCkrdWUocCw0KSt1ZShkZS5sZW5ndGgsMikrZGU7dmFyIEtlPVMudHlwZS50b0xvd2VyQ2FzZSgpO2ZvcihKPSJ1aW50OGFycmF5Ij09PUtlfHwiYXJyYXlidWZmZXIiPT09S2V8fCJibG9iIj09PUtlfHwi''@;'; put 'put ''bm9kZWJ1ZmZlciI9PT1LZT9uZXcgZWUocCt3K1dlLmxlbmd0aCk6bmV3IHEocCt3K1dlLmxlbmd0aCksbmU9MDtuZTx2Lmxlbmd0aDtuZSsrKUouYXBwZW5kKHZbbmVdLmZpbGVSZWNvcmQpLEouYXBwZW5kKHZbbmVdLmNvbXByZXNzZWRPYmplY3QuY29tcHJlc3NlZENvbnRlbnQpO2Zvcihu''@;'; put 'put ''ZT0wO25lPHYubGVuZ3RoO25lKyspSi5hcHBlbmQodltuZV0uZGlyUmVjb3JkKTtKLmFwcGVuZChXZSk7dmFyIFllPUouZmluYWxpemUoKTtzd2l0Y2goUy50eXBlLnRvTG93ZXJDYXNlKCkpe2Nhc2UidWludDhhcnJheSI6Y2FzZSJhcnJheWJ1ZmZlciI6Y2FzZSJub2RlYnVmZmVyIjpyZXR1''@;'; put 'put ''cm4gSS50cmFuc2Zvcm1UbyhTLnR5cGUudG9Mb3dlckNhc2UoKSxZZSk7Y2FzZSJibG9iIjpyZXR1cm4gSS5hcnJheUJ1ZmZlcjJCbG9iKEkudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixZZSkpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUy5iYXNlNjQ/Vi5lbmNvZGUoWWUpOlllO2RlZmF1bHQ6''@;'; put 'put ''cmV0dXJuIFllfX0sY3JjMzI6ZnVuY3Rpb24oUyx2KXtyZXR1cm4gayhTLHYpfSx1dGY4ZW5jb2RlOmZ1bmN0aW9uKFMpe3JldHVybiBJLnRyYW5zZm9ybVRvKCJzdHJpbmciLFUudXRmOGVuY29kZShTKSl9LHV0ZjhkZWNvZGU6ZnVuY3Rpb24oUyl7cmV0dXJuIFUudXRmOGRlY29kZShTKX19''@;'; put 'put ''O1IuZXhwb3J0cz1DfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL2RlZmF1bHRzIjo2LCIuL25vZGVCdWZmZXIiOjExLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nV3JpdGVyIjoxNiwiLi9zdXBwb3J0Ijox''@;'; put 'put ''NywiLi91aW50OEFycmF5V3JpdGVyIjoxOSwiLi91dGY4IjoyMCwiLi91dGlscyI6MjF9XSwxNDpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt6LkxPQ0FMX0ZJTEVfSEVBREVSPSJQS1x4MDNceDA0Iix6LkNFTlRSQUxfRklMRV9IRUFERVI9IlBLXHgwMVx4MDIiLHouQ0VOVFJBTF9E''@;'; put 'put ''SVJFQ1RPUllfRU5EPSJQS1x4MDVceDA2Iix6LlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLXHgwNlx4MDciLHouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDZceDA2Iix6LkRBVEFfREVTQ1JJUFRPUj0iUEtceDA3XGIifSx7fV0sMTU6W2Z1bmN0aW9uKE8s''@;'; put 'put ''Uix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9kYXRhUmVhZGVyIiksST1PKCIuL3V0aWxzIik7ZnVuY3Rpb24gayhFLGope3RoaXMuZGF0YT1FLGp8fCh0aGlzLmRhdGE9SS5zdHJpbmcyYmluYXJ5KHRoaXMuZGF0YSkpLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRl''@;'; put 'put ''eD0wfShrLnByb3RvdHlwZT1uZXcgSykuYnl0ZUF0PWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmRhdGEuY2hhckNvZGVBdChFKX0say5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihFKX0say5wcm90b3R5cGUu''@;'; put 'put ''cmVhZERhdGE9ZnVuY3Rpb24oRSl7dGhpcy5jaGVja09mZnNldChFKTt2YXIgaj10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0UpO3JldHVybiB0aGlzLmluZGV4Kz1FLGp9LFIuZXhwb3J0cz1rfSx7Ii4vZGF0YVJlYWRlciI6NSwiLi91dGlscyI6MjF9XSwxNjpbZnVu''@;'; put 'put ''Y3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3V0aWxzIiksST1mdW5jdGlvbigpe3RoaXMuZGF0YT1bXX07SS5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihrKXtrPUsudHJhbnNmb3JtVG8oInN0cmluZyIsayksdGhpcy5kYXRhLnB1c2goayl9LGZpbmFsaXplOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5qb2luKCIiKX19LFIuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sMTc6W2Z1bmN0aW9uKE8sUix6KXsoZnVuY3Rpb24oSyl7InVzZSBzdHJpY3QiO2lmKHouYmFzZTY0PSEwLHouYXJyYXk9ITAsei5zdHJpbmc9ITAsei5hcnJheWJ1ZmZlcj10eXBl''@;'; put 'put ''b2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSIsei5ub2RlYnVmZmVyPXR5cGVvZiBLPCJ1Iix6LnVpbnQ4YXJyYXk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpei5ibG9iPSExO2Vsc2V7dmFyIEk9bmV3IEFycmF5QnVmZmVyKDAp''@;'; put 'put ''O3RyeXt6LmJsb2I9MD09PW5ldyBCbG9iKFtJXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2h7dHJ5e3ZhciBFPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVp''@;'; put 'put ''bGRlcik7RS5hcHBlbmQoSSksei5ibG9iPTA9PT1FLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpLnNpemV9Y2F0Y2h7ei5ibG9iPSExfX19fSkuY2FsbCh0aGlzLHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTg6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEs9TygiLi9kYXRhUmVhZGVyIik7ZnVuY3Rpb24gSShrKXtrJiYodGhpcy5kYXRhPWssdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTApfShJLnByb3RvdHlwZT1uZXcgSykuYnl0ZUF0PWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLmRhdGFba119LEkucHJvdG90''@;'; put 'put ''eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKGspe2Zvcih2YXIgRT1rLmNoYXJDb2RlQXQoMCksaj1rLmNoYXJDb2RlQXQoMSksVj1rLmNoYXJDb2RlQXQoMiksQj1rLmNoYXJDb2RlQXQoMyksWT10aGlzLmxlbmd0aC00O1k+PTA7LS1ZKWlmKHRoaXMuZGF0YVtZXT09PUUmJnRo''@;'; put 'put ''aXMuZGF0YVtZKzFdPT09aiYmdGhpcy5kYXRhW1krMl09PT1WJiZ0aGlzLmRhdGFbWSszXT09PUIpcmV0dXJuIFk7cmV0dXJuLTF9LEkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGspe2lmKHRoaXMuY2hlY2tPZmZzZXQoayksMD09PWspcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3Zh''@;'; put 'put ''ciBFPXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrayk7cmV0dXJuIHRoaXMuaW5kZXgrPWssRX0sUi5leHBvcnRzPUl9LHsiLi9kYXRhUmVhZGVyIjo1fV0sMTk6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91dGlscyIpLEk9ZnVuY3Rp''@;'; put 'put ''b24oayl7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KGspLHRoaXMuaW5kZXg9MH07SS5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihrKXswIT09ay5sZW5ndGgmJihrPUsudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGspLHRoaXMuZGF0YS5zZXQoayx0aGlzLmluZGV4KSx0aGlzLmluZGV4''@;'; put 'put ''Kz1rLmxlbmd0aCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LFIuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sMjA6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Zm9yKHZhciBLPU8oIi4vdXRpbHMiKSxJPU8oIi4vc3VwcG9ydCIpLGs9TygiLi9ub2Rl''@;'; put 'put ''QnVmZmVyIiksRT1uZXcgQXJyYXkoMjU2KSxqPTA7ajwyNTY7aisrKUVbal09aj49MjUyPzY6aj49MjQ4PzU6aj49MjQwPzQ6aj49MjI0PzM6aj49MTkyPzI6MTtFWzI1NF09RVsyNTRdPTE7dmFyIEI9ZnVuY3Rpb24oWCxVKXt2YXIgcTtmb3IoKFU9VXx8WC5sZW5ndGgpPlgubGVuZ3RoJiYo''@;'; put 'put ''VT1YLmxlbmd0aCkscT1VLTE7cT49MCYmMTI4PT0oMTkyJlhbcV0pOylxLS07cmV0dXJuIHE8MHx8MD09PXE/VTpxK0VbWFtxXV0+VT9xOlV9LFk9ZnVuY3Rpb24oWCl7dmFyIHEsZWUsdGUsb2Usc2U9WC5sZW5ndGgsaGU9bmV3IEFycmF5KDIqc2UpO2ZvcihlZT0wLHE9MDtxPHNlOylpZigo''@;'; put 'put ''dGU9WFtxKytdKTwxMjgpaGVbZWUrK109dGU7ZWxzZSBpZigob2U9RVt0ZV0pPjQpaGVbZWUrK109NjU1MzMscSs9b2UtMTtlbHNle2Zvcih0ZSY9Mj09PW9lPzMxOjM9PT1vZT8xNTo3O29lPjEmJnE8c2U7KXRlPXRlPDw2fDYzJlhbcSsrXSxvZS0tO29lPjE/aGVbZWUrK109NjU1MzM6dGU8''@;'; put 'put ''NjU1MzY/aGVbZWUrK109dGU6KGhlW2VlKytdPTU1Mjk2fCh0ZS09NjU1MzYpPj4xMCYxMDIzLGhlW2VlKytdPTU2MzIwfDEwMjMmdGUpfXJldHVybiBoZS5sZW5ndGghPT1lZSYmKGhlLnN1YmFycmF5P2hlPWhlLnN1YmFycmF5KDAsZWUpOmhlLmxlbmd0aD1lZSksSy5hcHBseUZyb21DaGFy''@;'; put 'put ''Q29kZShoZSl9O3oudXRmOGVuY29kZT1mdW5jdGlvbihVKXtyZXR1cm4gSS5ub2RlYnVmZmVyP2soVSwidXRmLTgiKTpmdW5jdGlvbihYKXt2YXIgVSxxLGVlLHRlLG9lLHNlPVgubGVuZ3RoLGhlPTA7Zm9yKHRlPTA7dGU8c2U7dGUrKyk1NTI5Nj09KDY0NTEyJihxPVguY2hhckNvZGVBdCh0''@;'; put 'put ''ZSkpKSYmdGUrMTxzZSYmNTYzMjA9PSg2NDUxMiYoZWU9WC5jaGFyQ29kZUF0KHRlKzEpKSkmJihxPTY1NTM2KyhxLTU1Mjk2PDwxMCkrKGVlLTU2MzIwKSx0ZSsrKSxoZSs9cTwxMjg/MTpxPDIwNDg/MjpxPDY1NTM2PzM6NDtmb3IoVT1JLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoaGUp''@;'; put 'put ''Om5ldyBBcnJheShoZSksb2U9MCx0ZT0wO29lPGhlO3RlKyspNTUyOTY9PSg2NDUxMiYocT1YLmNoYXJDb2RlQXQodGUpKSkmJnRlKzE8c2UmJjU2MzIwPT0oNjQ1MTImKGVlPVguY2hhckNvZGVBdCh0ZSsxKSkpJiYocT02NTUzNisocS01NTI5Njw8MTApKyhlZS01NjMyMCksdGUrKykscTwx''@;'; put 'put ''Mjg/VVtvZSsrXT1xOnE8MjA0OD8oVVtvZSsrXT0xOTJ8cT4+PjYsVVtvZSsrXT0xMjh8NjMmcSk6cTw2NTUzNj8oVVtvZSsrXT0yMjR8cT4+PjEyLFVbb2UrK109MTI4fHE+Pj42JjYzLFVbb2UrK109MTI4fDYzJnEpOihVW29lKytdPTI0MHxxPj4+MTgsVVtvZSsrXT0xMjh8cT4+PjEyJjYz''@;'; put 'put ''LFVbb2UrK109MTI4fHE+Pj42JjYzLFVbb2UrK109MTI4fDYzJnEpO3JldHVybiBVfShVKX0sei51dGY4ZGVjb2RlPWZ1bmN0aW9uKFUpe2lmKEkubm9kZWJ1ZmZlcilyZXR1cm4gSy50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsVSkudG9TdHJpbmcoInV0Zi04Iik7Zm9yKHZhciBxPVtdLGVl''@;'; put 'put ''PTAsdGU9KFU9Sy50cmFuc2Zvcm1UbyhJLnVpbnQ4YXJyYXk/InVpbnQ4YXJyYXkiOiJhcnJheSIsVSkpLmxlbmd0aDtlZTx0ZTspe3ZhciBzZT1CKFUsTWF0aC5taW4oZWUrNjU1MzYsdGUpKTtxLnB1c2goWShJLnVpbnQ4YXJyYXk/VS5zdWJhcnJheShlZSxzZSk6VS5zbGljZShlZSxzZSkp''@;'; put 'put ''KSxlZT1zZX1yZXR1cm4gcS5qb2luKCIiKX19LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6MjF9XSwyMTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3N1cHBvcnQiKSxJPU8oIi4vY29tcHJlc3Npb25zIiksaz1PKCIuL25vZGVC''@;'; put 'put ''dWZmZXIiKTtmdW5jdGlvbiBFKFgpe3JldHVybiBYfWZ1bmN0aW9uIGooWCxVKXtmb3IodmFyIHE9MDtxPFgubGVuZ3RoOysrcSlVW3FdPTI1NSZYLmNoYXJDb2RlQXQocSk7cmV0dXJuIFV9ZnVuY3Rpb24gVihYKXt2YXIgVT02NTUzNixxPVtdLGVlPVgubGVuZ3RoLHRlPXouZ2V0VHlwZU9m''@;'; put 'put ''KFgpLG9lPTAsc2U9ITA7dHJ5e3N3aXRjaCh0ZSl7Y2FzZSJ1aW50OGFycmF5IjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMCkpO2JyZWFrO2Nhc2Uibm9kZWJ1ZmZlciI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGsoMCkpfX1jYXRjaHtz''@;'; put 'put ''ZT0hMX1pZighc2Upe2Zvcih2YXIgaGU9IiIsdWU9MDt1ZTxYLmxlbmd0aDt1ZSsrKWhlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFhbdWVdKTtyZXR1cm4gaGV9Zm9yKDtvZTxlZSYmVT4xOyl0cnl7cS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwiYXJyYXkiPT09dGV8fCJu''@;'; put 'put ''b2RlYnVmZmVyIj09PXRlP1guc2xpY2Uob2UsTWF0aC5taW4ob2UrVSxlZSkpOlguc3ViYXJyYXkob2UsTWF0aC5taW4ob2UrVSxlZSkpKSksb2UrPVV9Y2F0Y2h7VT1NYXRoLmZsb29yKFUvMil9cmV0dXJuIHEuam9pbigiIil9ZnVuY3Rpb24gQihYLFUpe2Zvcih2YXIgcT0wO3E8WC5sZW5n''@;'; put 'put ''dGg7cSsrKVVbcV09WFtxXTtyZXR1cm4gVX16LnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oWCl7Zm9yKHZhciBVPSIiLHE9MDtxPFgubGVuZ3RoO3ErKylVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZYLmNoYXJDb2RlQXQocSkpO3JldHVybiBVfSx6LmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rp''@;'; put 'put ''b24oWCl7ei5jaGVja1N1cHBvcnQoImJsb2IiKTt0cnl7cmV0dXJuIG5ldyBCbG9iKFtYXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pfWNhdGNoe3RyeXt2YXIgcT1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRl''@;'; put 'put ''cnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO3JldHVybiBxLmFwcGVuZChYKSxxLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQnVnIDogY2FuJ3QgY29uc3RydWN0IHRoZSBCbG9iLiIpfX19LHouYXBwbHlGcm9tQ2hhckNvZGU9Vjt2YXIgWT17fTtZ''@;'; put 'put ''LnN0cmluZz17c3RyaW5nOkUsYXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIGooWCxuZXcgQXJyYXkoWC5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIFkuc3RyaW5nLnVpbnQ4YXJyYXkoWCkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBqKFgs''@;'; put 'put ''bmV3IFVpbnQ4QXJyYXkoWC5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gaihYLGsoWC5sZW5ndGgpKX19LFkuYXJyYXk9e3N0cmluZzpWLGFycmF5OkUsYXJyYXlidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFgpLmJ1ZmZlcn0sdWludDhh''@;'; put 'put ''cnJheTpmdW5jdGlvbihYKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWCl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIGsoWCl9fSxZLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oWCl7cmV0dXJuIFYobmV3IFVpbnQ4QXJyYXkoWCkpfSxhcnJheTpmdW5jdGlvbihYKXtyZXR1''@;'; put 'put ''cm4gQihuZXcgVWludDhBcnJheShYKSxuZXcgQXJyYXkoWC5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOkUsdWludDhhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWCl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIGsobmV3IFVpbnQ4QXJyYXkoWCkpfX0s''@;'; put 'put ''WS51aW50OGFycmF5PXtzdHJpbmc6VixhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gQihYLG5ldyBBcnJheShYLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gWC5idWZmZXJ9LHVpbnQ4YXJyYXk6RSxub2RlYnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBrKFgpfX0s''@;'; put 'put ''WS5ub2RlYnVmZmVyPXtzdHJpbmc6VixhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gQihYLG5ldyBBcnJheShYLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gWS5ub2RlYnVmZmVyLnVpbnQ4YXJyYXkoWCkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFgpe3Jl''@;'; put 'put ''dHVybiBCKFgsbmV3IFVpbnQ4QXJyYXkoWC5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpFfSx6LnRyYW5zZm9ybVRvPWZ1bmN0aW9uKFgsVSl7aWYoVXx8KFU9IiIpLCFYKXJldHVybiBVO3ouY2hlY2tTdXBwb3J0KFgpO3ZhciBxPXouZ2V0VHlwZU9mKFUpO3JldHVybiBZW3FdW1hdKFUpfSx6Lmdl''@;'; put 'put ''dFR5cGVPZj1mdW5jdGlvbihYKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFg/InN0cmluZyI6IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChYKT8iYXJyYXkiOksubm9kZWJ1ZmZlciYmay50ZXN0KFgpPyJub2RlYnVmZmVyIjpLLnVpbnQ4YXJyYXkm''@;'; put 'put ''JlggaW5zdGFuY2VvZiBVaW50OEFycmF5PyJ1aW50OGFycmF5IjpLLmFycmF5YnVmZmVyJiZYIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ImFycmF5YnVmZmVyIjp2b2lkIDB9LHouY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKFgpe2lmKCFLW1gudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KFgrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciIpfSx6Lk1BWF9WQUxVRV8xNkJJVFM9NjU1MzUsei5NQVhfVkFMVUVfMzJCSVRTPS0xLHoucHJldHR5PWZ1bmN0aW9uKFgpe3ZhciBxLGVlLFU9IiI7Zm9yKGVlPTA7ZWU8KFh8fCIiKS5sZW5ndGg7ZWUrKylVKz0iXFx4Iiso''@;'; put 'put ''KHE9WC5jaGFyQ29kZUF0KGVlKSk8MTY/IjAiOiIiKStxLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBVfSx6LmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihYKXtmb3IodmFyIFUgaW4gSSlpZihJLmhhc093blByb3BlcnR5KFUpJiZJW1VdLm1hZ2ljPT09WClyZXR1cm4gSVtV''@;'; put 'put ''XTtyZXR1cm4gbnVsbH0sei5pc1JlZ0V4cD1mdW5jdGlvbihYKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChYKX19LHsiLi9jb21wcmVzc2lvbnMiOjMsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTd9XSwyMjpbZnVuY3Rp''@;'; put 'put ''b24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3N0cmluZ1JlYWRlciIpLEk9TygiLi9ub2RlQnVmZmVyUmVhZGVyIiksaz1PKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKSxFPU8oIi4vdXRpbHMiKSxqPU8oIi4vc2lnbmF0dXJlIiksVj1PKCIuL3ppcEVudHJ5IiksQj1PKCIuL3N1cHBv''@;'; put 'put ''cnQiKSxZPU8oIi4vb2JqZWN0Iik7ZnVuY3Rpb24gWChVLHEpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1xLFUmJnRoaXMubG9hZChVKX1YLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oVSl7dmFyIHE9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTtpZihxIT09''@;'; put 'put ''VSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnIDogdW5leHBlY3RlZCBzaWduYXR1cmUgKCIrRS5wcmV0dHkocSkrIiwgZXhwZWN0ZWQgIitFLnByZXR0eShVKSsiKSIpfSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5y''@;'; put 'put ''ZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJ''@;'; put 'put ''bnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuemlwQ29tbWVudD10aGlzLnJlYWRl''@;'; put 'put ''ci5yZWFkU3RyaW5nKHRoaXMuemlwQ29tbWVudExlbmd0aCksdGhpcy56aXBDb21tZW50PVkudXRmOGRlY29kZSh0aGlzLnppcENvbW1lbnQpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJ''@;'; put 'put ''bnQoOCksdGhpcy52ZXJzaW9uTWFkZUJ5PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlz''@;'; put 'put ''LnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0''@;'; put 'put ''aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307Zm9yKHZhciBlZSx0ZSxvZSxVPXRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0OzA8VTspZWU9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0ZT10aGlzLnJlYWRl''@;'; put 'put ''ci5yZWFkSW50KDQpLG9lPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcodGUpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVtlZV09e2lkOmVlLGxlbmd0aDp0ZSx2YWx1ZTpvZX19LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2''@;'; put 'put ''NENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza3NDb3VudD4xKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiTXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rpb24oKXt2YXIgVSxxO2ZvcihVPTA7VTx0aGlzLmZpbGVzLmxlbmd0aDtVKyspdGhpcy5yZWFkZXIuc2V0SW5kZXgoKHE9dGhpcy5maWxlc1tVXSkubG9jYWxIZWFk''@;'; put 'put ''ZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWduYXR1cmUoai5MT0NBTF9GSUxFX0hFQURFUikscS5yZWFkTG9jYWxQYXJ0KHRoaXMucmVhZGVyKSxxLmhhbmRsZVVURjgoKX0scmVhZENlbnRyYWxEaXI6ZnVuY3Rpb24oKXt2YXIgVTtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFs''@;'; put 'put ''RGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpPT09ai5DRU5UUkFMX0ZJTEVfSEVBREVSOykoVT1uZXcgVih7emlwNjQ6dGhpcy56aXA2NH0sdGhpcy5sb2FkT3B0aW9ucykpLnJlYWRDZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKFUpfSxyZWFkRW5k''@;'; put 'put ''T2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFyIFU9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoai5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO2lmKC0xPT09VSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIp''@;'; put 'put ''O2lmKHRoaXMucmVhZGVyLnNldEluZGV4KFUpLHRoaXMuY2hlY2tTaWduYXR1cmUoai5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09RS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0''@;'; put 'put ''YXJ0PT09RS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PUUuTUFYX1ZBTFVFXzMyQklU''@;'; put 'put ''U3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09RS5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLC0xPT09KFU9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoai5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0''@;'; put 'put ''ZWQgemlwIDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTt0aGlzLnJlYWRlci5zZXRJbmRleChVKSx0aGlzLmNoZWNrU2lnbmF0dXJlKGouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVu''@;'; put 'put ''ZE9mQ2VudHJhbExvY2F0b3IoKSx0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpLHRoaXMuY2hlY2tTaWduYXR1cmUoai5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwo''@;'; put 'put ''KX19LHByZXBhcmVSZWFkZXI6ZnVuY3Rpb24oVSl7dmFyIHE9RS5nZXRUeXBlT2YoVSk7dGhpcy5yZWFkZXI9InN0cmluZyIhPT1xfHxCLnVpbnQ4YXJyYXk/Im5vZGVidWZmZXIiPT09cT9uZXcgSShVKTpuZXcgayhFLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixVKSk6bmV3IEsoVSx0aGlz''@;'; put 'put ''LmxvYWRPcHRpb25zLm9wdGltaXplZEJpbmFyeVN0cmluZyl9LGxvYWQ6ZnVuY3Rpb24oVSl7dGhpcy5wcmVwYXJlUmVhZGVyKFUpLHRoaXMucmVhZEVuZE9mQ2VudHJhbCgpLHRoaXMucmVhZENlbnRyYWxEaXIoKSx0aGlzLnJlYWRMb2NhbEZpbGVzKCl9fSxSLmV4cG9ydHM9WH0seyIuL25v''@;'; put 'put ''ZGVCdWZmZXJSZWFkZXIiOjEyLCIuL29iamVjdCI6MTMsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4LCIuL3V0aWxzIjoyMSwiLi96aXBFbnRyeSI6MjN9XSwyMzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgSz1PKCIuL3N0cmluZ1JlYWRlciIpLEk9TygiLi91dGlscyIpLGs9TygiLi9jb21wcmVzc2VkT2JqZWN0IiksRT1PKCIuL29iamVjdCIpO2Z1bmN0aW9uIGooVixCKXt0aGlzLm9wdGlvbnM9Vix0aGlzLmxvYWRPcHRpb25zPUJ9ai5wcm90b3R5cGU9e2lzRW5jcnlwdGVk''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMuYml0RmxhZyl9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4gMjA0OD09KDIwNDgmdGhpcy5iaXRGbGFnKX0scHJlcGFyZUNvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKFYsQixZKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgWD1WLmluZGV4''@;'; put 'put ''O1Yuc2V0SW5kZXgoQik7dmFyIFU9Vi5yZWFkRGF0YShZKTtyZXR1cm4gVi5zZXRJbmRleChYKSxVfX0scHJlcGFyZUNvbnRlbnQ6ZnVuY3Rpb24oVixCLFksWCxVKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcT1JLnRyYW5zZm9ybVRvKFgudW5jb21wcmVzc0lucHV0VHlwZSx0aGlzLmdldENv''@;'; put 'put ''bXByZXNzZWRDb250ZW50KCkpLGVlPVgudW5jb21wcmVzcyhxKTtpZihlZS5sZW5ndGghPT1VKXRocm93IG5ldyBFcnJvcigiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaCIpO3JldHVybiBlZX19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oVil7dmFyIEIsWTtpZihWLnNr''@;'; put 'put ''aXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vi5yZWFkSW50KDIpLFk9Vi5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9Vi5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLFYuc2tpcChZKSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkJ1ZyBvciBjb3JydXB0ZWQgemlwIDogZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKG51bGw9PT0oQj1JLmZp''@;'; put 'put ''bmRDb21wcmVzc2lvbih0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gIitJLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtp''@;'; put 'put ''Zih0aGlzLmRlY29tcHJlc3NlZD1uZXcgayx0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMu''@;'; put 'put ''Y3JjMzIsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3Npb25NZXRob2Q9dGhpcy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChWLFYuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxC''@;'; put 'put ''KSx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50PXRoaXMucHJlcGFyZUNvbnRlbnQoVixWLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsQix0aGlzLnVuY29tcHJlc3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPUkudHJhbnNmb3Jt''@;'; put 'put ''VG8oInN0cmluZyIsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudCgpKSxFLmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9PXRoaXMuY3JjMzIpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihWKXtp''@;'; put 'put ''Zih0aGlzLnZlcnNpb25NYWRlQnk9Vi5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD1WLnJlYWRJbnQoMiksdGhpcy5iaXRGbGFnPVYucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPVYucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9Vi5yZWFkRGF0ZSgpLHRoaXMuY3Jj''@;'; put 'put ''MzI9Vi5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9Vi5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1WLnJlYWRJbnQoNCksdGhpcy5maWxlTmFtZUxlbmd0aD1WLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1WLnJlYWRJbnQoMiksdGhpcy5maWxlQ29t''@;'; put 'put ''bWVudExlbmd0aD1WLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9Vi5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1WLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPVYucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVYu''@;'; put 'put ''cmVhZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5maWxlTmFtZT1WLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoViksdGhpcy5wYXJzZVpJ''@;'; put 'put ''UDY0RXh0cmFGaWVsZChWKSx0aGlzLmZpbGVDb21tZW50PVYucmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSx0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbihWKXtpZih0aGlzLmV4dHJhRmll''@;'; put 'put ''bGRzWzFdKXt2YXIgQj1uZXcgSyh0aGlzLmV4dHJhRmllbGRzWzFdLnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1JLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9Qi5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09SS5NQVhfVkFMVUVfMzJC''@;'; put 'put ''SVRTJiYodGhpcy5jb21wcmVzc2VkU2l6ZT1CLnJlYWRJbnQoOCkpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1JLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PUIucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1JLk1BWF9WQUxVRV8zMkJJVFMm''@;'; put 'put ''Jih0aGlzLmRpc2tOdW1iZXJTdGFydD1CLnJlYWRJbnQoNCkpfX0scmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKFYpe3ZhciBZLFgsVSxCPVYuaW5kZXg7Zm9yKHRoaXMuZXh0cmFGaWVsZHM9dGhpcy5leHRyYUZpZWxkc3x8e307Vi5pbmRleDxCK3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7KVk9''@;'; put 'put ''Vi5yZWFkSW50KDIpLFg9Vi5yZWFkSW50KDIpLFU9Vi5yZWFkU3RyaW5nKFgpLHRoaXMuZXh0cmFGaWVsZHNbWV09e2lkOlksbGVuZ3RoOlgsdmFsdWU6VX19LGhhbmRsZVVURjg6ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lPUUudXRmOGRlY29kZSh0aGlzLmZp''@;'; put 'put ''bGVOYW1lKSx0aGlzLmZpbGVDb21tZW50PUUudXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciBWPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO251bGwhPT1WJiYodGhpcy5maWxlTmFtZT1WKTt2YXIgQj10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1l''@;'; put 'put ''bnQoKTtudWxsIT09QiYmKHRoaXMuZmlsZUNvbW1lbnQ9Qil9fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoVil7dmFyIEI9bmV3IEsoVi52YWx1ZSk7cmV0dXJuIDEhPT1CLnJlYWRJbnQoMSl8fEUuY3JjMzIo''@;'; put 'put ''dGhpcy5maWxlTmFtZSkhPT1CLnJlYWRJbnQoNCk/bnVsbDpFLnV0ZjhkZWNvZGUoQi5yZWFkU3RyaW5nKFYubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBWPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKFYpe3Zh''@;'; put 'put ''ciBCPW5ldyBLKFYudmFsdWUpO3JldHVybiAxIT09Qi5yZWFkSW50KDEpfHxFLmNyYzMyKHRoaXMuZmlsZUNvbW1lbnQpIT09Qi5yZWFkSW50KDQpP251bGw6RS51dGY4ZGVjb2RlKEIucmVhZFN0cmluZyhWLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxSLmV4cG9ydHM9an0seyIuL2NvbXBy''@;'; put 'put ''ZXNzZWRPYmplY3QiOjIsIi4vb2JqZWN0IjoxMywiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3V0aWxzIjoyMX1dLDI0OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBqPXt9OygwLE8oIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikoaixPKCIuL2xpYi9kZWZsYXRlIiksTygi''@;'; put 'put ''Li9saWIvaW5mbGF0ZSIpLE8oIi4vbGliL3psaWIvY29uc3RhbnRzIikpLFIuZXhwb3J0cz1qfSx7Ii4vbGliL2RlZmxhdGUiOjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwiLi9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKE8sUix6''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi96bGliL2RlZmxhdGUuanMiKSxJPU8oIi4vdXRpbHMvY29tbW9uIiksaz1PKCIuL3V0aWxzL3N0cmluZ3MiKSxFPU8oIi4vemxpYi9tZXNzYWdlcyIpLGo9TygiLi96bGliL3pzdHJlYW0iKSx0ZT1mdW5jdGlvbih1ZSl7dGhpcy5vcHRpb25zPUku''@;'; put 'put ''YXNzaWduKHtsZXZlbDotMSxtZXRob2Q6OCxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OjAsdG86IiJ9LHVlfHx7fSk7dmFyIGNlPXRoaXMub3B0aW9ucztjZS5yYXcmJmNlLndpbmRvd0JpdHM+MD9jZS53aW5kb3dCaXRzPS1jZS53aW5kb3dCaXRz''@;'; put 'put ''OmNlLmd6aXAmJmNlLndpbmRvd0JpdHM+MCYmY2Uud2luZG93Qml0czwxNiYmKGNlLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBqLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgRz1LLmRl''@;'; put 'put ''ZmxhdGVJbml0Mih0aGlzLnN0cm0sY2UubGV2ZWwsY2UubWV0aG9kLGNlLndpbmRvd0JpdHMsY2UubWVtTGV2ZWwsY2Uuc3RyYXRlZ3kpO2lmKDAhPT1HKXRocm93IG5ldyBFcnJvcihFW0ddKTtjZS5oZWFkZXImJksuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sY2UuaGVhZGVyKX07ZnVu''@;'; put 'put ''Y3Rpb24gb2UodWUsY2Upe3ZhciBHPW5ldyB0ZShjZSk7aWYoRy5wdXNoKHVlLCEwKSxHLmVycil0aHJvdyBHLm1zZztyZXR1cm4gRy5yZXN1bHR9dGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odWUsY2Upe3ZhciBELEgsRz10aGlzLnN0cm0sYj10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lm''@;'; put 'put ''KHRoaXMuZW5kZWQpcmV0dXJuITE7SD1jZT09PX5+Y2U/Y2U6ITA9PT1jZT80OjAsRy5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIHVlP2suc3RyaW5nMmJ1Zih1ZSk6dWUsRy5uZXh0X2luPTAsRy5hdmFpbF9pbj1HLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09Ry5hdmFpbF9vdXQmJihHLm91dHB1''@;'; put 'put ''dD1uZXcgSS5CdWY4KGIpLEcubmV4dF9vdXQ9MCxHLmF2YWlsX291dD1iKSwxIT09KEQ9Sy5kZWZsYXRlKEcsSCkpJiYwIT09RClyZXR1cm4gdGhpcy5vbkVuZChEKSx0aGlzLmVuZGVkPSEwLCExOygwPT09Ry5hdmFpbF9vdXR8fDA9PT1HLmF2YWlsX2luJiY0PT09SCkmJnRoaXMub25EYXRh''@;'; put 'put ''KCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP2suYnVmMmJpbnN0cmluZyhJLnNocmlua0J1ZihHLm91dHB1dCxHLm5leHRfb3V0KSk6SS5zaHJpbmtCdWYoRy5vdXRwdXQsRy5uZXh0X291dCkpfXdoaWxlKChHLmF2YWlsX2luPjB8fDA9PT1HLmF2YWlsX291dCkmJjEhPT1EKTtyZXR1cm4g''@;'; put 'put ''NCE9PUh8fChEPUsuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoRCksdGhpcy5lbmRlZD0hMCwwPT09RCl9LHRlLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24odWUpe3RoaXMuY2h1bmtzLnB1c2godWUpfSx0ZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odWUpezA9PT11ZSYm''@;'; put 'put ''KHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOkkuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXVlLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LHouRGVmbGF0ZT10ZSx6LmRlZmxhdGU9''@;'; put 'put ''b2Usei5kZWZsYXRlUmF3PWZ1bmN0aW9uIHNlKHVlLGNlKXtyZXR1cm4oY2U9Y2V8fHt9KS5yYXc9ITAsb2UodWUsY2UpfSx6Lmd6aXA9ZnVuY3Rpb24gaGUodWUsY2Upe3JldHVybihjZT1jZXx8e30pLmd6aXA9ITAsb2UodWUsY2UpfX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMv''@;'; put 'put ''c3RyaW5ncyI6MjgsIi4vemxpYi9kZWZsYXRlLmpzIjozMiwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjY6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi96bGliL2luZmxhdGUuanMiKSxJPU8oIi4vdXRpbHMvY29tbW9uIiksaz1P''@;'; put 'put ''KCIuL3V0aWxzL3N0cmluZ3MiKSxFPU8oIi4vemxpYi9jb25zdGFudHMiKSxqPU8oIi4vemxpYi9tZXNzYWdlcyIpLFY9TygiLi96bGliL3pzdHJlYW0iKSxCPU8oIi4vemxpYi9nemhlYWRlciIpLFk9ZnVuY3Rpb24ocSl7dGhpcy5vcHRpb25zPUkuYXNzaWduKHtjaHVua1NpemU6MTYzODQs''@;'; put 'put ''d2luZG93Qml0czowLHRvOiIifSxxfHx7fSk7dmFyIGVlPXRoaXMub3B0aW9ucztlZS5yYXcmJmVlLndpbmRvd0JpdHM+PTAmJmVlLndpbmRvd0JpdHM8MTYmJihlZS53aW5kb3dCaXRzPS1lZS53aW5kb3dCaXRzLDA9PT1lZS53aW5kb3dCaXRzJiYoZWUud2luZG93Qml0cz0tMTUpKSxlZS53''@;'; put 'put ''aW5kb3dCaXRzPj0wJiZlZS53aW5kb3dCaXRzPDE2JiYhKHEmJnEud2luZG93Qml0cykmJihlZS53aW5kb3dCaXRzKz0zMiksZWUud2luZG93Qml0cz4xNSYmZWUud2luZG93Qml0czw0OCYmKDE1JmVlLndpbmRvd0JpdHN8fChlZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5t''@;'; put 'put ''c2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFYsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciB0ZT1LLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sZWUud2luZG93Qml0cyk7aWYodGUhPT1FLlpfT0spdGhyb3cgbmV3IEVycm9yKGpbdGVdKTt0aGlzLmhl''@;'; put 'put ''YWRlcj1uZXcgQixLLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07ZnVuY3Rpb24gWChxLGVlKXt2YXIgdGU9bmV3IFkoZWUpO2lmKHRlLnB1c2gocSwhMCksdGUuZXJyKXRocm93IHRlLm1zZztyZXR1cm4gdGUucmVzdWx0fVkucHJvdG90eXBlLnB1c2g9ZnVuY3Rp''@;'; put 'put ''b24ocSxlZSl7dmFyIHNlLGhlLHVlLGNlLEcsdGU9dGhpcy5zdHJtLG9lPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtoZT1lZT09PX5+ZWU/ZWU6ITA9PT1lZT9FLlpfRklOSVNIOkUuWl9OT19GTFVTSCx0ZS5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIHE/''@;'; put 'put ''ay5iaW5zdHJpbmcyYnVmKHEpOnEsdGUubmV4dF9pbj0wLHRlLmF2YWlsX2luPXRlLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09dGUuYXZhaWxfb3V0JiYodGUub3V0cHV0PW5ldyBJLkJ1Zjgob2UpLHRlLm5leHRfb3V0PTAsdGUuYXZhaWxfb3V0PW9lKSwoc2U9Sy5pbmZsYXRlKHRlLEUuWl9O''@;'; put 'put ''T19GTFVTSCkpIT09RS5aX1NUUkVBTV9FTkQmJnNlIT09RS5aX09LKXJldHVybiB0aGlzLm9uRW5kKHNlKSx0aGlzLmVuZGVkPSEwLCExO3RlLm5leHRfb3V0JiYoMD09PXRlLmF2YWlsX291dHx8c2U9PT1FLlpfU1RSRUFNX0VORHx8MD09PXRlLmF2YWlsX2luJiZoZT09PUUuWl9GSU5JU0gp''@;'; put 'put ''JiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/KHVlPWsudXRmOGJvcmRlcih0ZS5vdXRwdXQsdGUubmV4dF9vdXQpLGNlPXRlLm5leHRfb3V0LXVlLEc9ay5idWYyc3RyaW5nKHRlLm91dHB1dCx1ZSksdGUubmV4dF9vdXQ9Y2UsdGUuYXZhaWxfb3V0PW9lLWNlLGNlJiZJLmFycmF5U2V0''@;'; put 'put ''KHRlLm91dHB1dCx0ZS5vdXRwdXQsdWUsY2UsMCksdGhpcy5vbkRhdGEoRykpOnRoaXMub25EYXRhKEkuc2hyaW5rQnVmKHRlLm91dHB1dCx0ZS5uZXh0X291dCkpKX13aGlsZSh0ZS5hdmFpbF9pbj4wJiZzZSE9PUUuWl9TVFJFQU1fRU5EKTtyZXR1cm4gc2U9PT1FLlpfU1RSRUFNX0VORCYm''@;'; put 'put ''KGhlPUUuWl9GSU5JU0gpLGhlIT09RS5aX0ZJTklTSHx8KHNlPUsuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoc2UpLHRoaXMuZW5kZWQ9ITAsc2U9PT1FLlpfT0spfSxZLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24ocSl7dGhpcy5jaHVua3MucHVzaChxKX0sWS5wcm90b3R5''@;'; put 'put ''cGUub25FbmQ9ZnVuY3Rpb24ocSl7cT09PUUuWl9PSyYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOkkuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXEsdGhpcy5tc2c9dGhpcy5z''@;'; put 'put ''dHJtLm1zZ30sei5JbmZsYXRlPVksei5pbmZsYXRlPVgsei5pbmZsYXRlUmF3PWZ1bmN0aW9uIFUocSxlZSl7cmV0dXJuKGVlPWVlfHx7fSkucmF3PSEwLFgocSxlZSl9LHoudW5nemlwPVh9LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvY29uc3Rh''@;'; put 'put ''bnRzIjozMCwiLi96bGliL2d6aGVhZGVyIjozMywiLi96bGliL2luZmxhdGUuanMiOjM1LCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBV''@;'; put 'put ''aW50MTZBcnJheTwidSImJnR5cGVvZiBJbnQzMkFycmF5PCJ1Ijt6LmFzc2lnbj1mdW5jdGlvbihFKXtmb3IodmFyIGo9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2oubGVuZ3RoOyl7dmFyIFY9ai5zaGlmdCgpO2lmKFYpe2lmKCJvYmplY3QiIT10eXBlb2YgVil0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKFYrIm11c3QgYmUgbm9uLW9iamVjdCIpO2Zvcih2YXIgQiBpbiBWKVYuaGFzT3duUHJvcGVydHkoQikmJihFW0JdPVZbQl0pfX1yZXR1cm4gRX0sei5zaHJpbmtCdWY9ZnVuY3Rpb24oRSxqKXtyZXR1cm4gRS5sZW5ndGg9PT1qP0U6RS5zdWJhcnJheT9FLnN1''@;'; put 'put ''YmFycmF5KDAsaik6KEUubGVuZ3RoPWosRSl9O3ZhciBJPXthcnJheVNldDpmdW5jdGlvbihFLGosVixCLFkpe2lmKGouc3ViYXJyYXkmJkUuc3ViYXJyYXkpRS5zZXQoai5zdWJhcnJheShWLFYrQiksWSk7ZWxzZSBmb3IodmFyIFg9MDtYPEI7WCsrKUVbWStYXT1qW1YrWF19LGZsYXR0ZW5D''@;'; put 'put ''aHVua3M6ZnVuY3Rpb24oRSl7dmFyIGosVixCLFksWCxVO2ZvcihCPTAsaj0wLFY9RS5sZW5ndGg7ajxWO2orKylCKz1FW2pdLmxlbmd0aDtmb3IoVT1uZXcgVWludDhBcnJheShCKSxZPTAsaj0wLFY9RS5sZW5ndGg7ajxWO2orKylVLnNldChYPUVbal0sWSksWSs9WC5sZW5ndGg7cmV0dXJu''@;'; put 'put ''IFV9fSxrPXthcnJheVNldDpmdW5jdGlvbihFLGosVixCLFkpe2Zvcih2YXIgWD0wO1g8QjtYKyspRVtZK1hdPWpbVitYXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihFKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sRSl9fTt6LnNldFR5cGVkPWZ1bmN0aW9uKEUpe0U/KHouQnVmOD1VaW50''@;'; put 'put ''OEFycmF5LHouQnVmMTY9VWludDE2QXJyYXksei5CdWYzMj1JbnQzMkFycmF5LHouYXNzaWduKHosSSkpOih6LkJ1Zjg9QXJyYXksei5CdWYxNj1BcnJheSx6LkJ1ZjMyPUFycmF5LHouYXNzaWduKHosaykpfSx6LnNldFR5cGVkKEspfSx7fV0sMjg6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEs9TygiLi9jb21tb24iKSxJPSEwLGs9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoe0k9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7az0hMX1mb3IodmFyIEU9bmV3''@;'; put 'put ''IEsuQnVmOCgyNTYpLGo9MDtqPDI1NjtqKyspRVtqXT1qPj0yNTI/NjpqPj0yNDg/NTpqPj0yNDA/NDpqPj0yMjQ/MzpqPj0xOTI/MjoxO2Z1bmN0aW9uIFYoQixZKXtpZihZPDY1NTM3JiYoQi5zdWJhcnJheSYma3x8IUIuc3ViYXJyYXkmJkkpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''LmFwcGx5KG51bGwsSy5zaHJpbmtCdWYoQixZKSk7Zm9yKHZhciBYPSIiLFU9MDtVPFk7VSsrKVgrPVN0cmluZy5mcm9tQ2hhckNvZGUoQltVXSk7cmV0dXJuIFh9RVsyNTRdPUVbMjU0XT0xLHouc3RyaW5nMmJ1Zj1mdW5jdGlvbihCKXt2YXIgWSxYLFUscSxlZSx0ZT1CLmxlbmd0aCxvZT0w''@;'; put 'put ''O2ZvcihxPTA7cTx0ZTtxKyspNTUyOTY9PSg2NDUxMiYoWD1CLmNoYXJDb2RlQXQocSkpKSYmcSsxPHRlJiY1NjMyMD09KDY0NTEyJihVPUIuY2hhckNvZGVBdChxKzEpKSkmJihYPTY1NTM2KyhYLTU1Mjk2PDwxMCkrKFUtNTYzMjApLHErKyksb2UrPVg8MTI4PzE6WDwyMDQ4PzI6WDw2NTUz''@;'; put 'put ''Nj8zOjQ7Zm9yKFk9bmV3IEsuQnVmOChvZSksZWU9MCxxPTA7ZWU8b2U7cSsrKTU1Mjk2PT0oNjQ1MTImKFg9Qi5jaGFyQ29kZUF0KHEpKSkmJnErMTx0ZSYmNTYzMjA9PSg2NDUxMiYoVT1CLmNoYXJDb2RlQXQocSsxKSkpJiYoWD02NTUzNisoWC01NTI5Njw8MTApKyhVLTU2MzIwKSxxKysp''@;'; put 'put ''LFg8MTI4P1lbZWUrK109WDpYPDIwNDg/KFlbZWUrK109MTkyfFg+Pj42LFlbZWUrK109MTI4fDYzJlgpOlg8NjU1MzY/KFlbZWUrK109MjI0fFg+Pj4xMixZW2VlKytdPTEyOHxYPj4+NiY2MyxZW2VlKytdPTEyOHw2MyZYKTooWVtlZSsrXT0yNDB8WD4+PjE4LFlbZWUrK109MTI4fFg+Pj4x''@;'; put 'put ''MiY2MyxZW2VlKytdPTEyOHxYPj4+NiY2MyxZW2VlKytdPTEyOHw2MyZYKTtyZXR1cm4gWX0sei5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKEIpe3JldHVybiBWKEIsQi5sZW5ndGgpfSx6LmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oQil7Zm9yKHZhciBZPW5ldyBLLkJ1ZjgoQi5sZW5ndGgpLFg9''@;'; put 'put ''MCxVPVkubGVuZ3RoO1g8VTtYKyspWVtYXT1CLmNoYXJDb2RlQXQoWCk7cmV0dXJuIFl9LHouYnVmMnN0cmluZz1mdW5jdGlvbihCLFkpe3ZhciBYLFUscSxlZSx0ZT1ZfHxCLmxlbmd0aCxvZT1uZXcgQXJyYXkoMip0ZSk7Zm9yKFU9MCxYPTA7WDx0ZTspaWYoKHE9QltYKytdKTwxMjgpb2Vb''@;'; put 'put ''VSsrXT1xO2Vsc2UgaWYoKGVlPUVbcV0pPjQpb2VbVSsrXT02NTUzMyxYKz1lZS0xO2Vsc2V7Zm9yKHEmPTI9PT1lZT8zMTozPT09ZWU/MTU6NztlZT4xJiZYPHRlOylxPXE8PDZ8NjMmQltYKytdLGVlLS07ZWU+MT9vZVtVKytdPTY1NTMzOnE8NjU1MzY/b2VbVSsrXT1xOihvZVtVKytdPTU1''@;'; put 'put ''Mjk2fChxLT02NTUzNik+PjEwJjEwMjMsb2VbVSsrXT01NjMyMHwxMDIzJnEpfXJldHVybiBWKG9lLFUpfSx6LnV0Zjhib3JkZXI9ZnVuY3Rpb24oQixZKXt2YXIgWDtmb3IoKFk9WXx8Qi5sZW5ndGgpPkIubGVuZ3RoJiYoWT1CLmxlbmd0aCksWD1ZLTE7WD49MCYmMTI4PT0oMTkyJkJbWF0p''@;'; put 'put ''OylYLS07cmV0dXJuIFg8MHx8MD09PVg/WTpYK0VbQltYXV0+WT9YOll9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO1IuZXhwb3J0cz1mdW5jdGlvbiBLKEksayxFLGope2Zvcih2YXIgVj02NTUzNSZJfDAsQj1JPj4+MTYmNjU1MzV8MCxZPTA7''@;'; put 'put ''MCE9PUU7KXtFLT1ZPUU+MmUzPzJlMzpFO2Rve0I9QisoVj1WK2tbaisrXXwwKXwwfXdoaWxlKC0tWSk7ViU9NjU1MjEsQiU9NjU1MjF9cmV0dXJuIFZ8Qjw8MTZ8MH19LHt9XSwzMDpbZnVuY3Rpb24oTyxSLHope1IuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpf''@;'; put 'put ''U1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBS''@;'; put 'put ''RVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktO''@;'; put 'put ''T1dOOjIsWl9ERUZMQVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBJPWZ1bmN0aW9uIEsoKXtmb3IodmFyIEUsaj1bXSxWPTA7VjwyNTY7VisrKXtFPVY7Zm9yKHZhciBCPTA7Qjw4O0IrKylFPTEmRT8zOTg4MjkyMzg0XkU+Pj4xOkU+Pj4xO2pbVl09''@;'; put 'put ''RX1yZXR1cm4gan0oKTtSLmV4cG9ydHM9ZnVuY3Rpb24gayhFLGosVixCKXt2YXIgWT1JLFg9QitWO0VePS0xO2Zvcih2YXIgVT1CO1U8WDtVKyspRT1FPj4+OF5ZWzI1NSYoRV5qW1VdKV07cmV0dXJuLTFeRX19LHt9XSwzMjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1P''@;'; put 'put ''KCIuLi91dGlscy9jb21tb24iKSxJPU8oIi4vdHJlZXMiKSxrPU8oIi4vYWRsZXIzMiIpLEU9TygiLi9jcmMzMiIpLGo9TygiLi9tZXNzYWdlcyIpLFY9MCxxPTAsdGU9LTIsSD0yLE49OCx3PTI4NixKPTMwLG5lPTE5LGRlPTIqdysxLGZlPTE1LHhlPTMsTGU9MjU4LEZlPUxlK3hlKzEsQmU9''@;'; put 'put ''NDIsbHQ9MTEzO2Z1bmN0aW9uIFVlKHJ0LEl0KXtyZXR1cm4gcnQubXNnPWpbSXRdLEl0fWZ1bmN0aW9uIGh0KHJ0KXtyZXR1cm4ocnQ8PDEpLShydD40Pzk6MCl9ZnVuY3Rpb24gTWUocnQpe2Zvcih2YXIgSXQ9cnQubGVuZ3RoOy0tSXQ+PTA7KXJ0W0l0XT0wfWZ1bmN0aW9uIERlKHJ0KXt2''@;'; put 'put ''YXIgSXQ9cnQuc3RhdGUsSnQ9SXQucGVuZGluZztKdD5ydC5hdmFpbF9vdXQmJihKdD1ydC5hdmFpbF9vdXQpLDAhPT1KdCYmKEsuYXJyYXlTZXQocnQub3V0cHV0LEl0LnBlbmRpbmdfYnVmLEl0LnBlbmRpbmdfb3V0LEp0LHJ0Lm5leHRfb3V0KSxydC5uZXh0X291dCs9SnQsSXQucGVuZGlu''@;'; put 'put ''Z19vdXQrPUp0LHJ0LnRvdGFsX291dCs9SnQscnQuYXZhaWxfb3V0LT1KdCxJdC5wZW5kaW5nLT1KdCwwPT09SXQucGVuZGluZyYmKEl0LnBlbmRpbmdfb3V0PTApKX1mdW5jdGlvbiB6ZShydCxJdCl7SS5fdHJfZmx1c2hfYmxvY2socnQscnQuYmxvY2tfc3RhcnQ+PTA/cnQuYmxvY2tfc3Rh''@;'; put 'put ''cnQ6LTEscnQuc3Ryc3RhcnQtcnQuYmxvY2tfc3RhcnQsSXQpLHJ0LmJsb2NrX3N0YXJ0PXJ0LnN0cnN0YXJ0LERlKHJ0LnN0cm0pfWZ1bmN0aW9uIGl0KHJ0LEl0KXtydC5wZW5kaW5nX2J1ZltydC5wZW5kaW5nKytdPUl0fWZ1bmN0aW9uIHV0KHJ0LEl0KXtydC5wZW5kaW5nX2J1ZltydC5w''@;'; put 'put ''ZW5kaW5nKytdPUl0Pj4+OCYyNTUscnQucGVuZGluZ19idWZbcnQucGVuZGluZysrXT0yNTUmSXR9ZnVuY3Rpb24gTXQocnQsSXQsSnQsRHQpe3ZhciBwdD1ydC5hdmFpbF9pbjtyZXR1cm4gcHQ+RHQmJihwdD1EdCksMD09PXB0PzA6KHJ0LmF2YWlsX2luLT1wdCxLLmFycmF5U2V0KEl0LHJ0''@;'; put 'put ''LmlucHV0LHJ0Lm5leHRfaW4scHQsSnQpLDE9PT1ydC5zdGF0ZS53cmFwP3J0LmFkbGVyPWsocnQuYWRsZXIsSXQscHQsSnQpOjI9PT1ydC5zdGF0ZS53cmFwJiYocnQuYWRsZXI9RShydC5hZGxlcixJdCxwdCxKdCkpLHJ0Lm5leHRfaW4rPXB0LHJ0LnRvdGFsX2luKz1wdCxwdCl9ZnVuY3Rp''@;'; put 'put ''b24gSHQocnQsSXQpe3ZhciBwdCxZdCxKdD1ydC5tYXhfY2hhaW5fbGVuZ3RoLER0PXJ0LnN0cnN0YXJ0LExuPXJ0LnByZXZfbGVuZ3RoLHp0PXJ0Lm5pY2VfbWF0Y2gseW49cnQuc3Ryc3RhcnQ+cnQud19zaXplLUZlP3J0LnN0cnN0YXJ0LShydC53X3NpemUtRmUpOjAseG49cnQud2luZG93''@;'; put 'put ''LHNuPXJ0LndfbWFzayxCbj1ydC5wcmV2LE9uPXJ0LnN0cnN0YXJ0K0xlLCR0PXhuW0R0K0xuLTFdLEZuPXhuW0R0K0xuXTtydC5wcmV2X2xlbmd0aD49cnQuZ29vZF9tYXRjaCYmKEp0Pj49MiksenQ+cnQubG9va2FoZWFkJiYoenQ9cnQubG9va2FoZWFkKTtkb3tpZih4blsocHQ9SXQpK0xu''@;'; put 'put ''XT09PUZuJiZ4bltwdCtMbi0xXT09PSR0JiZ4bltwdF09PT14bltEdF0mJnhuWysrcHRdPT09eG5bRHQrMV0pe0R0Kz0yLHB0Kys7ZG97fXdoaWxlKHhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytw''@;'; put 'put ''dF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJnhuWysrRHRdPT09eG5bKytwdF0mJkR0PE9uKTtpZihZdD1MZS0oT24tRHQpLER0PU9uLUxlLFl0PkxuKXtpZihydC5tYXRjaF9zdGFydD1JdCxMbj1ZdCxZdD49enQpYnJl''@;'; put 'put ''YWs7JHQ9eG5bRHQrTG4tMV0sRm49eG5bRHQrTG5dfX19d2hpbGUoKEl0PUJuW0l0JnNuXSk+eW4mJjAhPS0tSnQpO3JldHVybiBMbjw9cnQubG9va2FoZWFkP0xuOnJ0Lmxvb2thaGVhZH1mdW5jdGlvbiBQdChydCl7dmFyIEp0LER0LHB0LFl0LExuLEl0PXJ0Lndfc2l6ZTtkb3tpZihZdD1y''@;'; put 'put ''dC53aW5kb3dfc2l6ZS1ydC5sb29rYWhlYWQtcnQuc3Ryc3RhcnQscnQuc3Ryc3RhcnQ+PUl0KyhJdC1GZSkpe0suYXJyYXlTZXQocnQud2luZG93LHJ0LndpbmRvdyxJdCxJdCwwKSxydC5tYXRjaF9zdGFydC09SXQscnQuc3Ryc3RhcnQtPUl0LHJ0LmJsb2NrX3N0YXJ0LT1JdCxKdD1EdD1y''@;'; put 'put ''dC5oYXNoX3NpemU7ZG97cHQ9cnQuaGVhZFstLUp0XSxydC5oZWFkW0p0XT1wdD49SXQ/cHQtSXQ6MH13aGlsZSgtLUR0KTtKdD1EdD1JdDtkb3twdD1ydC5wcmV2Wy0tSnRdLHJ0LnByZXZbSnRdPXB0Pj1JdD9wdC1JdDowfXdoaWxlKC0tRHQpO1l0Kz1JdH1pZigwPT09cnQuc3RybS5hdmFp''@;'; put 'put ''bF9pbilicmVhaztpZihEdD1NdChydC5zdHJtLHJ0LndpbmRvdyxydC5zdHJzdGFydCtydC5sb29rYWhlYWQsWXQpLHJ0Lmxvb2thaGVhZCs9RHQscnQubG9va2FoZWFkK3J0Lmluc2VydD49eGUpZm9yKHJ0Lmluc19oPXJ0LndpbmRvd1tMbj1ydC5zdHJzdGFydC1ydC5pbnNlcnRdLHJ0Lmlu''@;'; put 'put ''c19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbTG4rMV0pJnJ0Lmhhc2hfbWFzaztydC5pbnNlcnQmJihydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W0xuK3hlLTFdKSZydC5oYXNoX21hc2sscnQucHJldltMbiZydC53X21hc2tdPXJ0Lmhl''@;'; put 'put ''YWRbcnQuaW5zX2hdLHJ0LmhlYWRbcnQuaW5zX2hdPUxuLExuKysscnQuaW5zZXJ0LS0sIShydC5sb29rYWhlYWQrcnQuaW5zZXJ0PHhlKSk7KTt9d2hpbGUocnQubG9va2FoZWFkPEZlJiYwIT09cnQuc3RybS5hdmFpbF9pbil9ZnVuY3Rpb24gQ24ocnQsSXQpe2Zvcih2YXIgSnQsRHQ7Oyl7''@;'; put 'put ''aWYocnQubG9va2FoZWFkPEZlKXtpZihQdChydCkscnQubG9va2FoZWFkPEZlJiZJdD09PVYpcmV0dXJuIDE7aWYoMD09PXJ0Lmxvb2thaGVhZClicmVha31pZihKdD0wLHJ0Lmxvb2thaGVhZD49eGUmJihydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0''@;'; put 'put ''cnN0YXJ0K3hlLTFdKSZydC5oYXNoX21hc2ssSnQ9cnQucHJldltydC5zdHJzdGFydCZydC53X21hc2tdPXJ0LmhlYWRbcnQuaW5zX2hdLHJ0LmhlYWRbcnQuaW5zX2hdPXJ0LnN0cnN0YXJ0KSwwIT09SnQmJnJ0LnN0cnN0YXJ0LUp0PD1ydC53X3NpemUtRmUmJihydC5tYXRjaF9sZW5ndGg9''@;'; put 'put ''SHQocnQsSnQpKSxydC5tYXRjaF9sZW5ndGg+PXhlKWlmKER0PUkuX3RyX3RhbGx5KHJ0LHJ0LnN0cnN0YXJ0LXJ0Lm1hdGNoX3N0YXJ0LHJ0Lm1hdGNoX2xlbmd0aC14ZSkscnQubG9va2FoZWFkLT1ydC5tYXRjaF9sZW5ndGgscnQubWF0Y2hfbGVuZ3RoPD1ydC5tYXhfbGF6eV9tYXRjaCYm''@;'; put 'put ''cnQubG9va2FoZWFkPj14ZSl7cnQubWF0Y2hfbGVuZ3RoLS07ZG97cnQuc3Ryc3RhcnQrKyxydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0cnN0YXJ0K3hlLTFdKSZydC5oYXNoX21hc2ssSnQ9cnQucHJldltydC5zdHJzdGFydCZydC53X21hc2tdPXJ0''@;'; put 'put ''LmhlYWRbcnQuaW5zX2hdLHJ0LmhlYWRbcnQuaW5zX2hdPXJ0LnN0cnN0YXJ0fXdoaWxlKDAhPS0tcnQubWF0Y2hfbGVuZ3RoKTtydC5zdHJzdGFydCsrfWVsc2UgcnQuc3Ryc3RhcnQrPXJ0Lm1hdGNoX2xlbmd0aCxydC5tYXRjaF9sZW5ndGg9MCxydC5pbnNfaD1ydC53aW5kb3dbcnQuc3Ry''@;'; put 'put ''c3RhcnRdLHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbcnQuc3Ryc3RhcnQrMV0pJnJ0Lmhhc2hfbWFzaztlbHNlIER0PUkuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0XSkscnQubG9va2FoZWFkLS0scnQuc3Ryc3RhcnQrKztpZihEdCYm''@;'; put 'put ''KHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9cnQuc3Ryc3RhcnQ8eGUtMT9ydC5zdHJzdGFydDp4ZS0xLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOnJ0Lmxhc3RfbGl0JiYoemUocnQsITEpLDA9''@;'; put 'put ''PT1ydC5zdHJtLmF2YWlsX291dCk/MToyfWZ1bmN0aW9uIFV0KHJ0LEl0KXtmb3IodmFyIEp0LER0LHB0Ozspe2lmKHJ0Lmxvb2thaGVhZDxGZSl7aWYoUHQocnQpLHJ0Lmxvb2thaGVhZDxGZSYmSXQ9PT1WKXJldHVybiAxO2lmKDA9PT1ydC5sb29rYWhlYWQpYnJlYWt9aWYoSnQ9MCxydC5s''@;'; put 'put ''b29rYWhlYWQ+PXhlJiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJzdGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLEp0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5z''@;'; put 'put ''dHJzdGFydCkscnQucHJldl9sZW5ndGg9cnQubWF0Y2hfbGVuZ3RoLHJ0LnByZXZfbWF0Y2g9cnQubWF0Y2hfc3RhcnQscnQubWF0Y2hfbGVuZ3RoPXhlLTEsMCE9PUp0JiZydC5wcmV2X2xlbmd0aDxydC5tYXhfbGF6eV9tYXRjaCYmcnQuc3Ryc3RhcnQtSnQ8PXJ0Lndfc2l6ZS1GZSYmKHJ0''@;'; put 'put ''Lm1hdGNoX2xlbmd0aD1IdChydCxKdCkscnQubWF0Y2hfbGVuZ3RoPD01JiYoMT09PXJ0LnN0cmF0ZWd5fHxydC5tYXRjaF9sZW5ndGg9PT14ZSYmcnQuc3Ryc3RhcnQtcnQubWF0Y2hfc3RhcnQ+NDA5NikmJihydC5tYXRjaF9sZW5ndGg9eGUtMSkpLHJ0LnByZXZfbGVuZ3RoPj14ZSYmcnQu''@;'; put 'put ''bWF0Y2hfbGVuZ3RoPD1ydC5wcmV2X2xlbmd0aCl7cHQ9cnQuc3Ryc3RhcnQrcnQubG9va2FoZWFkLXhlLER0PUkuX3RyX3RhbGx5KHJ0LHJ0LnN0cnN0YXJ0LTEtcnQucHJldl9tYXRjaCxydC5wcmV2X2xlbmd0aC14ZSkscnQubG9va2FoZWFkLT1ydC5wcmV2X2xlbmd0aC0xLHJ0LnByZXZf''@;'; put 'put ''bGVuZ3RoLT0yO2RveysrcnQuc3Ryc3RhcnQ8PXB0JiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJzdGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLEp0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5oZWFkW3J0Lmluc19oXSxydC5o''@;'; put 'put ''ZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFydCl9d2hpbGUoMCE9LS1ydC5wcmV2X2xlbmd0aCk7aWYocnQubWF0Y2hfYXZhaWxhYmxlPTAscnQubWF0Y2hfbGVuZ3RoPXhlLTEscnQuc3Ryc3RhcnQrKyxEdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfWVsc2Ug''@;'; put 'put ''aWYocnQubWF0Y2hfYXZhaWxhYmxlKXtpZigoRHQ9SS5fdHJfdGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnQtMV0pKSYmemUocnQsITEpLHJ0LnN0cnN0YXJ0KysscnQubG9va2FoZWFkLS0sMD09PXJ0LnN0cm0uYXZhaWxfb3V0KXJldHVybiAxfWVsc2UgcnQubWF0Y2hfYXZhaWxh''@;'; put 'put ''YmxlPTEscnQuc3Ryc3RhcnQrKyxydC5sb29rYWhlYWQtLX1yZXR1cm4gcnQubWF0Y2hfYXZhaWxhYmxlJiYoRHQ9SS5fdHJfdGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnQtMV0pLHJ0Lm1hdGNoX2F2YWlsYWJsZT0wKSxydC5pbnNlcnQ9cnQuc3Ryc3RhcnQ8eGUtMT9ydC5zdHJz''@;'; put 'put ''dGFydDp4ZS0xLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOnJ0Lmxhc3RfbGl0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCk/MToyfXZhciAkbixlbj1mdW5jdGlvbihydCxJdCxKdCxEdCxwdCl7dGhpcy5nb29kX2xlbmd0aD1ydCx0aGlz''@;'; put 'put ''Lm1heF9sYXp5PUl0LHRoaXMubmljZV9sZW5ndGg9SnQsdGhpcy5tYXhfY2hhaW49RHQsdGhpcy5mdW5jPXB0fTtmdW5jdGlvbiBmdCgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGlu''@;'; put 'put ''Z19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMubWV0aG9kPU4sdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53''@;'; put 'put ''aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhhc2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0''@;'; put 'put ''aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1hdGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2''@;'; put 'put ''ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5keW5fbHRyZWU9bmV3IEsuQnVmMTYoMipkZSksdGhpcy5keW5fZHRyZWU9bmV3IEsuQnVmMTYoMiooMipKKzEpKSx0aGlzLmJsX3RyZWU9bmV3IEsuQnVmMTYoMiooMipuZSsxKSks''@;'; put 'put ''TWUodGhpcy5keW5fbHRyZWUpLE1lKHRoaXMuZHluX2R0cmVlKSxNZSh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBLLkJ1ZjE2KGZlKzEpLHRoaXMuaGVhcD1uZXcgSy5CdWYxNigyKncr''@;'; put 'put ''MSksTWUodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IEsuQnVmMTYoMip3KzEpLE1lKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9s''@;'; put 'put ''ZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIGZuKHJ0KXt2YXIgSXQ7cmV0dXJuIHJ0JiZydC5zdGF0ZT8ocnQudG90YWxfaW49cnQudG90YWxfb3V0PTAscnQuZGF0YV90eXBl''@;'; put 'put ''PUgsKEl0PXJ0LnN0YXRlKS5wZW5kaW5nPTAsSXQucGVuZGluZ19vdXQ9MCxJdC53cmFwPDAmJihJdC53cmFwPS1JdC53cmFwKSxJdC5zdGF0dXM9SXQud3JhcD9CZTpsdCxydC5hZGxlcj0yPT09SXQud3JhcD8wOjEsSXQubGFzdF9mbHVzaD1WLEkuX3RyX2luaXQoSXQpLHEpOlVlKHJ0LHRl''@;'; put 'put ''KX1mdW5jdGlvbiBobihydCl7dmFyIEl0PWZuKHJ0KTtyZXR1cm4gSXQ9PT1xJiZmdW5jdGlvbiBObihydCl7cnQud2luZG93X3NpemU9MipydC53X3NpemUsTWUocnQuaGVhZCkscnQubWF4X2xhenlfbWF0Y2g9JG5bcnQubGV2ZWxdLm1heF9sYXp5LHJ0Lmdvb2RfbWF0Y2g9JG5bcnQubGV2''@;'; put 'put ''ZWxdLmdvb2RfbGVuZ3RoLHJ0Lm5pY2VfbWF0Y2g9JG5bcnQubGV2ZWxdLm5pY2VfbGVuZ3RoLHJ0Lm1heF9jaGFpbl9sZW5ndGg9JG5bcnQubGV2ZWxdLm1heF9jaGFpbixydC5zdHJzdGFydD0wLHJ0LmJsb2NrX3N0YXJ0PTAscnQubG9va2FoZWFkPTAscnQuaW5zZXJ0PTAscnQubWF0Y2hf''@;'; put 'put ''bGVuZ3RoPXJ0LnByZXZfbGVuZ3RoPXhlLTEscnQubWF0Y2hfYXZhaWxhYmxlPTAscnQuaW5zX2g9MH0ocnQuc3RhdGUpLEl0fWZ1bmN0aW9uIFh0KHJ0LEl0LEp0LER0LHB0LFl0KXtpZighcnQpcmV0dXJuIHRlO3ZhciBMbj0xO2lmKC0xPT09SXQmJihJdD02KSxEdDwwPyhMbj0wLER0PS1E''@;'; put 'put ''dCk6RHQ+MTUmJihMbj0yLER0LT0xNikscHQ8MXx8cHQ+OXx8SnQhPT1OfHxEdDw4fHxEdD4xNXx8SXQ8MHx8SXQ+OXx8WXQ8MHx8WXQ+NClyZXR1cm4gVWUocnQsdGUpOzg9PT1EdCYmKER0PTkpO3ZhciB6dD1uZXcgZnQ7cmV0dXJuIHJ0LnN0YXRlPXp0LHp0LnN0cm09cnQsenQud3JhcD1M''@;'; put 'put ''bix6dC5nemhlYWQ9bnVsbCx6dC53X2JpdHM9RHQsenQud19zaXplPTE8PHp0LndfYml0cyx6dC53X21hc2s9enQud19zaXplLTEsenQuaGFzaF9iaXRzPXB0KzcsenQuaGFzaF9zaXplPTE8PHp0Lmhhc2hfYml0cyx6dC5oYXNoX21hc2s9enQuaGFzaF9zaXplLTEsenQuaGFzaF9zaGlmdD1+''@;'; put 'put ''figoenQuaGFzaF9iaXRzK3hlLTEpL3hlKSx6dC53aW5kb3c9bmV3IEsuQnVmOCgyKnp0Lndfc2l6ZSksenQuaGVhZD1uZXcgSy5CdWYxNih6dC5oYXNoX3NpemUpLHp0LnByZXY9bmV3IEsuQnVmMTYoenQud19zaXplKSx6dC5saXRfYnVmc2l6ZT0xPDxwdCs2LHp0LnBlbmRpbmdfYnVmX3Np''@;'; put 'put ''emU9NCp6dC5saXRfYnVmc2l6ZSx6dC5wZW5kaW5nX2J1Zj1uZXcgSy5CdWY4KHp0LnBlbmRpbmdfYnVmX3NpemUpLHp0LmRfYnVmPXp0LmxpdF9idWZzaXplPj4xLHp0LmxfYnVmPTMqenQubGl0X2J1ZnNpemUsenQubGV2ZWw9SXQsenQuc3RyYXRlZ3k9WXQsenQubWV0aG9kPUp0LGhuKHJ0''@;'; put 'put ''KX0kbj1bbmV3IGVuKDAsMCwwLDAsZnVuY3Rpb24gb24ocnQsSXQpe3ZhciBKdD02NTUzNTtmb3IoSnQ+cnQucGVuZGluZ19idWZfc2l6ZS01JiYoSnQ9cnQucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihydC5sb29rYWhlYWQ8PTEpe2lmKFB0KHJ0KSwwPT09cnQubG9va2FoZWFkJiZJdD09''@;'; put 'put ''PVYpcmV0dXJuIDE7aWYoMD09PXJ0Lmxvb2thaGVhZClicmVha31ydC5zdHJzdGFydCs9cnQubG9va2FoZWFkLHJ0Lmxvb2thaGVhZD0wO3ZhciBEdD1ydC5ibG9ja19zdGFydCtKdDtpZigoMD09PXJ0LnN0cnN0YXJ0fHxydC5zdHJzdGFydD49RHQpJiYocnQubG9va2FoZWFkPXJ0LnN0cnN0''@;'; put 'put ''YXJ0LUR0LHJ0LnN0cnN0YXJ0PUR0LHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpfHxydC5zdHJzdGFydC1ydC5ibG9ja19zdGFydD49cnQud19zaXplLUZlJiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHJ0Lmluc2VydD0wLDQ9PT1J''@;'; put 'put ''dD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOihydC5zdHJzdGFydD5ydC5ibG9ja19zdGFydCYmemUocnQsITEpLDEpfSksbmV3IGVuKDQsNCw4LDQsQ24pLG5ldyBlbig0LDUsMTYsOCxDbiksbmV3IGVuKDQsNiwzMiwzMixDbiksbmV3IGVuKDQsNCwxNiwxNixVdCks''@;'; put 'put ''bmV3IGVuKDgsMTYsMzIsMzIsVXQpLG5ldyBlbig4LDE2LDEyOCwxMjgsVXQpLG5ldyBlbig4LDMyLDEyOCwyNTYsVXQpLG5ldyBlbigzMiwxMjgsMjU4LDEwMjQsVXQpLG5ldyBlbigzMiwyNTgsMjU4LDQwOTYsVXQpXSx6LmRlZmxhdGVJbml0PWZ1bmN0aW9uIF90KHJ0LEl0KXtyZXR1cm4g''@;'; put 'put ''WHQocnQsSXQsTiwxNSw4LDApfSx6LmRlZmxhdGVJbml0Mj1YdCx6LmRlZmxhdGVSZXNldD1obix6LmRlZmxhdGVSZXNldEtlZXA9Zm4sei5kZWZsYXRlU2V0SGVhZGVyPWZ1bmN0aW9uIHd0KHJ0LEl0KXtyZXR1cm4gcnQmJnJ0LnN0YXRlJiYyPT09cnQuc3RhdGUud3JhcD8ocnQuc3RhdGUu''@;'; put 'put ''Z3poZWFkPUl0LHEpOnRlfSx6LmRlZmxhdGU9ZnVuY3Rpb24gTnQocnQsSXQpe3ZhciBKdCxEdCxwdCxZdDtpZighcnR8fCFydC5zdGF0ZXx8SXQ+NXx8SXQ8MClyZXR1cm4gcnQ/VWUocnQsdGUpOnRlO2lmKER0PXJ0LnN0YXRlLCFydC5vdXRwdXR8fCFydC5pbnB1dCYmMCE9PXJ0LmF2YWls''@;'; put 'put ''X2lufHw2NjY9PT1EdC5zdGF0dXMmJjQhPT1JdClyZXR1cm4gVWUocnQsMD09PXJ0LmF2YWlsX291dD8tNTp0ZSk7aWYoRHQuc3RybT1ydCxKdD1EdC5sYXN0X2ZsdXNoLER0Lmxhc3RfZmx1c2g9SXQsRHQuc3RhdHVzPT09QmUpaWYoMj09PUR0LndyYXApcnQuYWRsZXI9MCxpdChEdCwzMSks''@;'; put 'put ''aXQoRHQsMTM5KSxpdChEdCw4KSxEdC5nemhlYWQ/KGl0KER0LChEdC5nemhlYWQudGV4dD8xOjApKyhEdC5nemhlYWQuaGNyYz8yOjApKyhEdC5nemhlYWQuZXh0cmE/NDowKSsoRHQuZ3poZWFkLm5hbWU/ODowKSsoRHQuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLGl0KER0LDI1NSZEdC5nemhl''@;'; put 'put ''YWQudGltZSksaXQoRHQsRHQuZ3poZWFkLnRpbWU+PjgmMjU1KSxpdChEdCxEdC5nemhlYWQudGltZT4+MTYmMjU1KSxpdChEdCxEdC5nemhlYWQudGltZT4+MjQmMjU1KSxpdChEdCw5PT09RHQubGV2ZWw/MjpEdC5zdHJhdGVneT49Mnx8RHQubGV2ZWw8Mj80OjApLGl0KER0LDI1NSZEdC5n''@;'; put 'put ''emhlYWQub3MpLER0Lmd6aGVhZC5leHRyYSYmRHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGl0KER0LDI1NSZEdC5nemhlYWQuZXh0cmEubGVuZ3RoKSxpdChEdCxEdC5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLER0Lmd6aGVhZC5oY3JjJiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5w''@;'; put 'put ''ZW5kaW5nX2J1ZixEdC5wZW5kaW5nLDApKSxEdC5nemluZGV4PTAsRHQuc3RhdHVzPTY5KTooaXQoRHQsMCksaXQoRHQsMCksaXQoRHQsMCksaXQoRHQsMCksaXQoRHQsMCksaXQoRHQsOT09PUR0LmxldmVsPzI6RHQuc3RyYXRlZ3k+PTJ8fER0LmxldmVsPDI/NDowKSxpdChEdCwzKSxEdC5z''@;'; put 'put ''dGF0dXM9bHQpO2Vsc2V7dmFyIExuPU4rKER0LndfYml0cy04PDw0KTw8ODtMbnw9KER0LnN0cmF0ZWd5Pj0yfHxEdC5sZXZlbDwyPzA6RHQubGV2ZWw8Nj8xOjY9PT1EdC5sZXZlbD8yOjMpPDw2LDAhPT1EdC5zdHJzdGFydCYmKExufD0zMiksTG4rPTMxLUxuJTMxLER0LnN0YXR1cz1sdCx1''@;'; put 'put ''dChEdCxMbiksMCE9PUR0LnN0cnN0YXJ0JiYodXQoRHQscnQuYWRsZXI+Pj4xNiksdXQoRHQsNjU1MzUmcnQuYWRsZXIpKSxydC5hZGxlcj0xfWlmKDY5PT09RHQuc3RhdHVzKWlmKER0Lmd6aGVhZC5leHRyYSl7Zm9yKHB0PUR0LnBlbmRpbmc7RHQuZ3ppbmRleDwoNjU1MzUmRHQuZ3poZWFk''@;'; put 'put ''LmV4dHJhLmxlbmd0aCkmJihEdC5wZW5kaW5nIT09RHQucGVuZGluZ19idWZfc2l6ZXx8KER0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksRGUocnQpLHB0PUR0LnBlbmRpbmcsRHQucGVu''@;'; put 'put ''ZGluZyE9PUR0LnBlbmRpbmdfYnVmX3NpemUpKTspaXQoRHQsMjU1JkR0Lmd6aGVhZC5leHRyYVtEdC5nemluZGV4XSksRHQuZ3ppbmRleCsrO0R0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0''@;'; put 'put ''KSksRHQuZ3ppbmRleD09PUR0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihEdC5nemluZGV4PTAsRHQuc3RhdHVzPTczKX1lbHNlIER0LnN0YXR1cz03MztpZig3Mz09PUR0LnN0YXR1cylpZihEdC5nemhlYWQubmFtZSl7cHQ9RHQucGVuZGluZztkb3tpZihEdC5wZW5kaW5nPT09RHQucGVuZGlu''@;'; put 'put ''Z19idWZfc2l6ZSYmKER0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksRGUocnQpLHB0PUR0LnBlbmRpbmcsRHQucGVuZGluZz09PUR0LnBlbmRpbmdfYnVmX3NpemUpKXtZdD0xO2JyZWFr''@;'; put 'put ''fVl0PUR0Lmd6aW5kZXg8RHQuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZEdC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KER0Lmd6aW5kZXgrKyk6MCxpdChEdCxZdCl9d2hpbGUoMCE9PVl0KTtEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVu''@;'; put 'put ''ZGluZ19idWYsRHQucGVuZGluZy1wdCxwdCkpLDA9PT1ZdCYmKER0Lmd6aW5kZXg9MCxEdC5zdGF0dXM9OTEpfWVsc2UgRHQuc3RhdHVzPTkxO2lmKDkxPT09RHQuc3RhdHVzKWlmKER0Lmd6aGVhZC5jb21tZW50KXtwdD1EdC5wZW5kaW5nO2Rve2lmKER0LnBlbmRpbmc9PT1EdC5wZW5kaW5n''@;'; put 'put ''X2J1Zl9zaXplJiYoRHQuZ3poZWFkLmhjcmMmJkR0LnBlbmRpbmc+cHQmJihydC5hZGxlcj1FKHJ0LmFkbGVyLER0LnBlbmRpbmdfYnVmLER0LnBlbmRpbmctcHQscHQpKSxEZShydCkscHQ9RHQucGVuZGluZyxEdC5wZW5kaW5nPT09RHQucGVuZGluZ19idWZfc2l6ZSkpe1l0PTE7YnJlYWt9''@;'; put 'put ''WXQ9RHQuZ3ppbmRleDxEdC5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JkR0Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoRHQuZ3ppbmRleCsrKTowLGl0KER0LFl0KX13aGlsZSgwIT09WXQpO0R0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixE''@;'; put 'put ''dC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksMD09PVl0JiYoRHQuc3RhdHVzPTEwMyl9ZWxzZSBEdC5zdGF0dXM9MTAzO2lmKDEwMz09PUR0LnN0YXR1cyYmKER0Lmd6aGVhZC5oY3JjPyhEdC5wZW5kaW5nKzI+RHQucGVuZGluZ19idWZfc2l6ZSYmRGUocnQpLER0LnBlbmRpbmcr''@;'; put 'put ''Mjw9RHQucGVuZGluZ19idWZfc2l6ZSYmKGl0KER0LDI1NSZydC5hZGxlciksaXQoRHQscnQuYWRsZXI+PjgmMjU1KSxydC5hZGxlcj0wLER0LnN0YXR1cz1sdCkpOkR0LnN0YXR1cz1sdCksMCE9PUR0LnBlbmRpbmcpe2lmKERlKHJ0KSwwPT09cnQuYXZhaWxfb3V0KXJldHVybiBEdC5sYXN0''@;'; put 'put ''X2ZsdXNoPS0xLHF9ZWxzZSBpZigwPT09cnQuYXZhaWxfaW4mJmh0KEl0KTw9aHQoSnQpJiY0IT09SXQpcmV0dXJuIFVlKHJ0LC01KTtpZig2NjY9PT1EdC5zdGF0dXMmJjAhPT1ydC5hdmFpbF9pbilyZXR1cm4gVWUocnQsLTUpO2lmKDAhPT1ydC5hdmFpbF9pbnx8MCE9PUR0Lmxvb2thaGVh''@;'; put 'put ''ZHx8SXQhPT1WJiY2NjYhPT1EdC5zdGF0dXMpe3ZhciB5bj0yPT09RHQuc3RyYXRlZ3k/ZnVuY3Rpb24gV24ocnQsSXQpe2Zvcih2YXIgSnQ7Oyl7aWYoMD09PXJ0Lmxvb2thaGVhZCYmKFB0KHJ0KSwwPT09cnQubG9va2FoZWFkKSl7aWYoSXQ9PT1WKXJldHVybiAxO2JyZWFrfWlmKHJ0Lm1h''@;'; put 'put ''dGNoX2xlbmd0aD0wLEp0PUkuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0XSkscnQubG9va2FoZWFkLS0scnQuc3Ryc3RhcnQrKyxKdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9MCw0PT09SXQ/KHplKHJ0''@;'; put 'put ''LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpPzE6Mn0oRHQsSXQpOjM9PT1EdC5zdHJhdGVneT9mdW5jdGlvbiBibihydCxJdCl7Zm9yKHZhciBKdCxEdCxwdCxZdCxMbj1ydC53aW5kb3c7Oyl7aWYo''@;'; put 'put ''cnQubG9va2FoZWFkPD1MZSl7aWYoUHQocnQpLHJ0Lmxvb2thaGVhZDw9TGUmJkl0PT09VilyZXR1cm4gMTtpZigwPT09cnQubG9va2FoZWFkKWJyZWFrfWlmKHJ0Lm1hdGNoX2xlbmd0aD0wLHJ0Lmxvb2thaGVhZD49eGUmJnJ0LnN0cnN0YXJ0PjAmJihEdD1MbltwdD1ydC5zdHJzdGFydC0x''@;'; put 'put ''XSk9PT1MblsrK3B0XSYmRHQ9PT1MblsrK3B0XSYmRHQ9PT1MblsrK3B0XSl7WXQ9cnQuc3Ryc3RhcnQrTGU7ZG97fXdoaWxlKER0PT09TG5bKytwdF0mJkR0PT09TG5bKytwdF0mJkR0PT09TG5bKytwdF0mJkR0PT09TG5bKytwdF0mJkR0PT09TG5bKytwdF0mJkR0PT09TG5bKytwdF0mJkR0''@;'; put 'put ''PT09TG5bKytwdF0mJkR0PT09TG5bKytwdF0mJnB0PFl0KTtydC5tYXRjaF9sZW5ndGg9TGUtKFl0LXB0KSxydC5tYXRjaF9sZW5ndGg+cnQubG9va2FoZWFkJiYocnQubWF0Y2hfbGVuZ3RoPXJ0Lmxvb2thaGVhZCl9aWYocnQubWF0Y2hfbGVuZ3RoPj14ZT8oSnQ9SS5fdHJfdGFsbHkocnQs''@;'; put 'put ''MSxydC5tYXRjaF9sZW5ndGgteGUpLHJ0Lmxvb2thaGVhZC09cnQubWF0Y2hfbGVuZ3RoLHJ0LnN0cnN0YXJ0Kz1ydC5tYXRjaF9sZW5ndGgscnQubWF0Y2hfbGVuZ3RoPTApOihKdD1JLl90cl90YWxseShydCwwLHJ0LndpbmRvd1tydC5zdHJzdGFydF0pLHJ0Lmxvb2thaGVhZC0tLHJ0LnN0''@;'; put 'put ''cnN0YXJ0KyspLEp0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHJ0Lmluc2VydD0wLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOnJ0Lmxhc3RfbGl0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291''@;'; put 'put ''dCk/MToyfShEdCxJdCk6JG5bRHQubGV2ZWxdLmZ1bmMoRHQsSXQpO2lmKCgzPT09eW58fDQ9PT15bikmJihEdC5zdGF0dXM9NjY2KSwxPT09eW58fDM9PT15bilyZXR1cm4gMD09PXJ0LmF2YWlsX291dCYmKER0Lmxhc3RfZmx1c2g9LTEpLHE7aWYoMj09PXluJiYoMT09PUl0P0kuX3RyX2Fs''@;'; put 'put ''aWduKER0KTo1IT09SXQmJihJLl90cl9zdG9yZWRfYmxvY2soRHQsMCwwLCExKSwzPT09SXQmJihNZShEdC5oZWFkKSwwPT09RHQubG9va2FoZWFkJiYoRHQuc3Ryc3RhcnQ9MCxEdC5ibG9ja19zdGFydD0wLER0Lmluc2VydD0wKSkpLERlKHJ0KSwwPT09cnQuYXZhaWxfb3V0KSlyZXR1cm4g''@;'; put 'put ''RHQubGFzdF9mbHVzaD0tMSxxfXJldHVybiA0IT09SXQ/cTpEdC53cmFwPD0wPzE6KDI9PT1EdC53cmFwPyhpdChEdCwyNTUmcnQuYWRsZXIpLGl0KER0LHJ0LmFkbGVyPj44JjI1NSksaXQoRHQscnQuYWRsZXI+PjE2JjI1NSksaXQoRHQscnQuYWRsZXI+PjI0JjI1NSksaXQoRHQsMjU1JnJ0''@;'; put 'put ''LnRvdGFsX2luKSxpdChEdCxydC50b3RhbF9pbj4+OCYyNTUpLGl0KER0LHJ0LnRvdGFsX2luPj4xNiYyNTUpLGl0KER0LHJ0LnRvdGFsX2luPj4yNCYyNTUpKToodXQoRHQscnQuYWRsZXI+Pj4xNiksdXQoRHQsNjU1MzUmcnQuYWRsZXIpKSxEZShydCksRHQud3JhcD4wJiYoRHQud3JhcD0t''@;'; put 'put ''RHQud3JhcCksMCE9PUR0LnBlbmRpbmc/cToxKX0sei5kZWZsYXRlRW5kPWZ1bmN0aW9uIHZuKHJ0KXt2YXIgSXQ7cmV0dXJuIHJ0JiZydC5zdGF0ZT8oSXQ9cnQuc3RhdGUuc3RhdHVzKSE9PUJlJiY2OSE9PUl0JiY3MyE9PUl0JiY5MSE9PUl0JiYxMDMhPT1JdCYmSXQhPT1sdCYmNjY2IT09''@;'; put 'put ''SXQ/VWUocnQsdGUpOihydC5zdGF0ZT1udWxsLEl0PT09bHQ/VWUocnQsLTMpOnEpOnRlfSx6LmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9tZXNzYWdl''@;'; put 'put ''cyI6MzcsIi4vdHJlZXMiOjM4fV0sMzM6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Ui5leHBvcnRzPWZ1bmN0aW9uIEsoKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5h''@;'; put 'put ''bWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSwzNDpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0IjtSLmV4cG9ydHM9ZnVuY3Rpb24oRSxqKXt2YXIgVixCLFksWCxVLHEsZWUsdGUsb2Usc2UsaGUsdWUsY2UsRyxiLEQsSCxOLGcsQyxTLHYs''@;'; put 'put ''cCx3LEo7dz1FLmlucHV0LFk9KEI9RS5uZXh0X2luKSsoRS5hdmFpbF9pbi01KSxKPUUub3V0cHV0LFU9KFg9RS5uZXh0X291dCktKGotRS5hdmFpbF9vdXQpLHE9WCsoRS5hdmFpbF9vdXQtMjU3KSxlZT0oVj1FLnN0YXRlKS5kbWF4LHRlPVYud3NpemUsb2U9Vi53aGF2ZSxzZT1WLnduZXh0''@;'; put 'put ''LGhlPVYud2luZG93LHVlPVYuaG9sZCxjZT1WLmJpdHMsRz1WLmxlbmNvZGUsYj1WLmRpc3Rjb2RlLEQ9KDE8PFYubGVuYml0cyktMSxIPSgxPDxWLmRpc3RiaXRzKS0xO2U6ZG97Y2U8MTUmJih1ZSs9d1tCKytdPDxjZSx1ZSs9d1tCKytdPDwoY2UrPTgpLGNlKz04KSxOPUdbdWUmRF07dDpm''@;'; put 'put ''b3IoOzspe2lmKHVlPj4+PWc9Tj4+PjI0LGNlLT1nLDA9PShnPU4+Pj4xNiYyNTUpKUpbWCsrXT02NTUzNSZOO2Vsc2V7aWYoISgxNiZnKSl7aWYoNjQmZyl7aWYoMzImZyl7Vi5tb2RlPTEyO2JyZWFrIGV9RS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsVi5tb2RlPTMwO2Jy''@;'; put 'put ''ZWFrIGV9Tj1HWyg2NTUzNSZOKSsodWUmKDE8PGcpLTEpXTtjb250aW51ZSB0fWZvcihDPTY1NTM1Jk4sKGcmPTE1KSYmKGNlPGcmJih1ZSs9d1tCKytdPDxjZSxjZSs9OCksQys9dWUmKDE8PGcpLTEsdWU+Pj49ZyxjZS09ZyksY2U8MTUmJih1ZSs9d1tCKytdPDxjZSx1ZSs9d1tCKytdPDwo''@;'; put 'put ''Y2UrPTgpLGNlKz04KSxOPWJbdWUmSF07Oyl7aWYodWU+Pj49Zz1OPj4+MjQsY2UtPWcsMTYmKGc9Tj4+PjE2JjI1NSkpe2lmKFM9NjU1MzUmTixjZTwoZyY9MTUpJiYodWUrPXdbQisrXTw8Y2UsKGNlKz04KTxnJiYodWUrPXdbQisrXTw8Y2UsY2UrPTgpKSwoUys9dWUmKDE8PGcpLTEpPmVl''@;'; put 'put ''KXtFLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFYubW9kZT0zMDticmVhayBlfWlmKHVlPj4+PWcsY2UtPWcsUz4oZz1YLVUpKXtpZigoZz1TLWcpPm9lJiZWLnNhbmUpe0UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVi5tb2RlPTMwO2JyZWFrIGV9''@;'; put 'put ''aWYodj0wLHA9aGUsMD09PXNlKXtpZih2Kz10ZS1nLGc8Qyl7Qy09Zztkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO3Y9WC1TLHA9Sn19ZWxzZSBpZihzZTxnKXtpZih2Kz10ZStzZS1nLChnLT1zZSk8Qyl7Qy09Zztkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO2lmKHY9MCxzZTxD''@;'; put 'put ''KXtDLT1nPXNlO2Rve0pbWCsrXT1oZVt2KytdfXdoaWxlKC0tZyk7dj1YLVMscD1KfX19ZWxzZSBpZih2Kz1zZS1nLGc8Qyl7Qy09Zztkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO3Y9WC1TLHA9Sn1mb3IoO0M+MjspSltYKytdPXBbdisrXSxKW1grK109cFt2KytdLEpbWCsrXT1wW3Yr''@;'; put 'put ''K10sQy09MztDJiYoSltYKytdPXBbdisrXSxDPjEmJihKW1grK109cFt2KytdKSl9ZWxzZXt2PVgtUztkb3tKW1grK109Slt2KytdLEpbWCsrXT1KW3YrK10sSltYKytdPUpbdisrXSxDLT0zfXdoaWxlKEM+Mik7QyYmKEpbWCsrXT1KW3YrK10sQz4xJiYoSltYKytdPUpbdisrXSkpfWJyZWFr''@;'; put 'put ''fWlmKDY0Jmcpe0UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLFYubW9kZT0zMDticmVhayBlfU49YlsoNjU1MzUmTikrKHVlJigxPDxnKS0xKV19fWJyZWFrfX13aGlsZShCPFkmJlg8cSk7dWUmPSgxPDwoY2UtPShDPWNlPj4zKTw8MykpLTEsRS5uZXh0X2luPUItPUMsRS5uZXh0X291''@;'; put 'put ''dD1YLEUuYXZhaWxfaW49QjxZP1ktQis1OjUtKEItWSksRS5hdmFpbF9vdXQ9WDxxP3EtWCsyNTc6MjU3LShYLXEpLFYuaG9sZD11ZSxWLmJpdHM9Y2V9fSx7fV0sMzU6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi4vdXRpbHMvY29tbW9uIiksST1PKCIuL2FkbGVy''@;'; put 'put ''MzIiKSxrPU8oIi4vY3JjMzIiKSxFPU8oIi4vaW5mZmFzdCIpLGo9TygiLi9pbmZ0cmVlcyIpLGVlPTAsc2U9LTIsYj0xLE1lPTg1MixEZT01OTI7ZnVuY3Rpb24gdXQod3Qpe3JldHVybih3dD4+PjI0JjI1NSkrKHd0Pj4+OCY2NTI4MCkrKCg2NTI4MCZ3dCk8PDgpKygoMjU1Jnd0KTw8MjQp''@;'; put 'put ''fWZ1bmN0aW9uIE10KCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlz''@;'; put 'put ''LndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0''@;'; put 'put ''Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBLLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBLLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlz''@;'; put 'put ''LnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIEh0KHd0KXt2YXIgWHQ7cmV0dXJuIHd0JiZ3dC5zdGF0ZT8od3QudG90YWxfaW49d3QudG90YWxfb3V0PShYdD13dC5zdGF0ZSkudG90YWw9MCx3dC5tc2c9IiIsWHQud3JhcCYmKHd0LmFkbGVyPTEmWHQud3JhcCksWHQu''@;'; put 'put ''bW9kZT1iLFh0Lmxhc3Q9MCxYdC5oYXZlZGljdD0wLFh0LmRtYXg9MzI3NjgsWHQuaGVhZD1udWxsLFh0LmhvbGQ9MCxYdC5iaXRzPTAsWHQubGVuY29kZT1YdC5sZW5keW49bmV3IEsuQnVmMzIoTWUpLFh0LmRpc3Rjb2RlPVh0LmRpc3RkeW49bmV3IEsuQnVmMzIoRGUpLFh0LnNhbmU9MSxY''@;'; put 'put ''dC5iYWNrPS0xLGVlKTpzZX1mdW5jdGlvbiBQdCh3dCl7dmFyIFh0O3JldHVybiB3dCYmd3Quc3RhdGU/KChYdD13dC5zdGF0ZSkud3NpemU9MCxYdC53aGF2ZT0wLFh0LnduZXh0PTAsSHQod3QpKTpzZX1mdW5jdGlvbiBvbih3dCxYdCl7dmFyIF90LE50O3JldHVybiF3dHx8IXd0LnN0YXRl''@;'; put 'put ''fHwoTnQ9d3Quc3RhdGUsWHQ8MD8oX3Q9MCxYdD0tWHQpOihfdD0xKyhYdD4+NCksWHQ8NDgmJihYdCY9MTUpKSxYdCYmKFh0PDh8fFh0PjE1KSk/c2U6KG51bGwhPT1OdC53aW5kb3cmJk50LndiaXRzIT09WHQmJihOdC53aW5kb3c9bnVsbCksTnQud3JhcD1fdCxOdC53Yml0cz1YdCxQdCh3''@;'; put 'put ''dCkpfWZ1bmN0aW9uIENuKHd0LFh0KXt2YXIgX3QsTnQ7cmV0dXJuIHd0PyhOdD1uZXcgTXQsd3Quc3RhdGU9TnQsTnQud2luZG93PW51bGwsKF90PW9uKHd0LFh0KSkhPT1lZSYmKHd0LnN0YXRlPW51bGwpLF90KTpzZX12YXIgV24sZW4sYm49ITA7ZnVuY3Rpb24gJG4od3Qpe2lmKGJuKXt2''@;'; put 'put ''YXIgWHQ7Zm9yKFduPW5ldyBLLkJ1ZjMyKDUxMiksZW49bmV3IEsuQnVmMzIoMzIpLFh0PTA7WHQ8MTQ0Oyl3dC5sZW5zW1h0KytdPTg7Zm9yKDtYdDwyNTY7KXd0LmxlbnNbWHQrK109OTtmb3IoO1h0PDI4MDspd3QubGVuc1tYdCsrXT03O2Zvcig7WHQ8Mjg4Oyl3dC5sZW5zW1h0KytdPTg7''@;'; put 'put ''Zm9yKGooMSx3dC5sZW5zLDAsMjg4LFduLDAsd3Qud29yayx7Yml0czo5fSksWHQ9MDtYdDwzMjspd3QubGVuc1tYdCsrXT01O2ooMix3dC5sZW5zLDAsMzIsZW4sMCx3dC53b3JrLHtiaXRzOjV9KSxibj0hMX13dC5sZW5jb2RlPVduLHd0LmxlbmJpdHM9OSx3dC5kaXN0Y29kZT1lbix3dC5k''@;'; put 'put ''aXN0Yml0cz01fXouaW5mbGF0ZVJlc2V0PVB0LHouaW5mbGF0ZVJlc2V0Mj1vbix6LmluZmxhdGVSZXNldEtlZXA9SHQsei5pbmZsYXRlSW5pdD1mdW5jdGlvbiBVdCh3dCl7cmV0dXJuIENuKHd0LDE1KX0sei5pbmZsYXRlSW5pdDI9Q24sei5pbmZsYXRlPWZ1bmN0aW9uIGZ0KHd0LFh0KXt2''@;'; put 'put ''YXIgX3QsTnQsdm4scnQsSXQsSnQsRHQscHQsWXQsTG4senQseW4seG4sc24sT24sJHQsRm4sbmksbG4sam4scXIsZ2ksVWksS3IsQm49MCx4cj1uZXcgSy5CdWY4KDQpLG5vPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighd3R8fCF3dC5zdGF0''@;'; put 'put ''ZXx8IXd0Lm91dHB1dHx8IXd0LmlucHV0JiYwIT09d3QuYXZhaWxfaW4pcmV0dXJuIHNlOzEyPT09KF90PXd0LnN0YXRlKS5tb2RlJiYoX3QubW9kZT0xMyksSXQ9d3QubmV4dF9vdXQsdm49d3Qub3V0cHV0LHJ0PXd0Lm5leHRfaW4sTnQ9d3QuaW5wdXQscHQ9X3QuaG9sZCxZdD1fdC5iaXRz''@;'; put 'put ''LExuPUp0PXd0LmF2YWlsX2luLHp0PUR0PXd0LmF2YWlsX291dCxnaT1lZTtlOmZvcig7Oylzd2l0Y2goX3QubW9kZSl7Y2FzZSBiOmlmKDA9PT1fdC53cmFwKXtfdC5tb2RlPTEzO2JyZWFrfWZvcig7WXQ8MTY7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQr''@;'; put 'put ''PTh9aWYoMiZfdC53cmFwJiYzNTYxNT09PXB0KXtfdC5jaGVjaz0wLHhyWzBdPTI1NSZwdCx4clsxXT1wdD4+PjgmMjU1LF90LmNoZWNrPWsoX3QuY2hlY2sseHIsMiwwKSxwdD0wLFl0PTAsX3QubW9kZT0yO2JyZWFrfWlmKF90LmZsYWdzPTAsX3QuaGVhZCYmKF90LmhlYWQuZG9uZT0hMSks''@;'; put 'put ''ISgxJl90LndyYXApfHwoKCgyNTUmcHQpPDw4KSsocHQ+PjgpKSUzMSl7d3QubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixfdC5tb2RlPTMwO2JyZWFrfWlmKDghPSgxNSZwdCkpe3d0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLF90Lm1vZGU9MzA7YnJlYWt9aWYoWXQt''@;'; put 'put ''PTQscXI9OCsoMTUmKHB0Pj4+PTQpKSwwPT09X3Qud2JpdHMpX3Qud2JpdHM9cXI7ZWxzZSBpZihxcj5fdC53Yml0cyl7d3QubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixfdC5tb2RlPTMwO2JyZWFrfV90LmRtYXg9MTw8cXIsd3QuYWRsZXI9X3QuY2hlY2s9MSxfdC5tb2RlPTUxMiZwdD8x''@;'; put 'put ''MDoxMixwdD0wLFl0PTA7YnJlYWs7Y2FzZSAyOmZvcig7WXQ8MTY7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYoX3QuZmxhZ3M9cHQsOCE9KDI1NSZfdC5mbGFncykpe3d0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLF90Lm1vZGU9''@;'; put 'put ''MzA7YnJlYWt9aWYoNTczNDQmX3QuZmxhZ3Mpe3d0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixfdC5tb2RlPTMwO2JyZWFrfV90LmhlYWQmJihfdC5oZWFkLnRleHQ9cHQ+PjgmMSksNTEyJl90LmZsYWdzJiYoeHJbMF09MjU1JnB0LHhyWzFdPXB0Pj4+OCYyNTUsX3QuY2hlY2s9''@;'; put 'put ''ayhfdC5jaGVjayx4ciwyLDApKSxwdD0wLFl0PTAsX3QubW9kZT0zO2Nhc2UgMzpmb3IoO1l0PDMyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90LmhlYWQmJihfdC5oZWFkLnRpbWU9cHQpLDUxMiZfdC5mbGFncyYmKHhyWzBdPTI1NSZwdCx4clsx''@;'; put 'put ''XT1wdD4+PjgmMjU1LHhyWzJdPXB0Pj4+MTYmMjU1LHhyWzNdPXB0Pj4+MjQmMjU1LF90LmNoZWNrPWsoX3QuY2hlY2sseHIsNCwwKSkscHQ9MCxZdD0wLF90Lm1vZGU9NDtjYXNlIDQ6Zm9yKDtZdDwxNjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1f''@;'; put 'put ''dC5oZWFkJiYoX3QuaGVhZC54ZmxhZ3M9MjU1JnB0LF90LmhlYWQub3M9cHQ+PjgpLDUxMiZfdC5mbGFncyYmKHhyWzBdPTI1NSZwdCx4clsxXT1wdD4+PjgmMjU1LF90LmNoZWNrPWsoX3QuY2hlY2sseHIsMiwwKSkscHQ9MCxZdD0wLF90Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZfdC5mbGFn''@;'; put 'put ''cyl7Zm9yKDtZdDwxNjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5sZW5ndGg9cHQsX3QuaGVhZCYmKF90LmhlYWQuZXh0cmFfbGVuPXB0KSw1MTImX3QuZmxhZ3MmJih4clswXT0yNTUmcHQseHJbMV09cHQ+Pj44JjI1NSxfdC5jaGVjaz1rKF90''@;'; put 'put ''LmNoZWNrLHhyLDIsMCkpLHB0PTAsWXQ9MH1lbHNlIF90LmhlYWQmJihfdC5oZWFkLmV4dHJhPW51bGwpO190Lm1vZGU9NjtjYXNlIDY6aWYoMTAyNCZfdC5mbGFncyYmKCh5bj1fdC5sZW5ndGgpPkp0JiYoeW49SnQpLHluJiYoX3QuaGVhZCYmKHFyPV90LmhlYWQuZXh0cmFfbGVuLV90Lmxl''@;'; put 'put ''bmd0aCxfdC5oZWFkLmV4dHJhfHwoX3QuaGVhZC5leHRyYT1uZXcgQXJyYXkoX3QuaGVhZC5leHRyYV9sZW4pKSxLLmFycmF5U2V0KF90LmhlYWQuZXh0cmEsTnQscnQseW4scXIpKSw1MTImX3QuZmxhZ3MmJihfdC5jaGVjaz1rKF90LmNoZWNrLE50LHluLHJ0KSksSnQtPXluLHJ0Kz15bixf''@;'; put 'put ''dC5sZW5ndGgtPXluKSxfdC5sZW5ndGgpKWJyZWFrIGU7X3QubGVuZ3RoPTAsX3QubW9kZT03O2Nhc2UgNzppZigyMDQ4Jl90LmZsYWdzKXtpZigwPT09SnQpYnJlYWsgZTt5bj0wO2Rve3FyPU50W3J0K3luKytdLF90LmhlYWQmJnFyJiZfdC5sZW5ndGg8NjU1MzYmJihfdC5oZWFkLm5hbWUr''@;'; put 'put ''PVN0cmluZy5mcm9tQ2hhckNvZGUocXIpKX13aGlsZShxciYmeW48SnQpO2lmKDUxMiZfdC5mbGFncyYmKF90LmNoZWNrPWsoX3QuY2hlY2ssTnQseW4scnQpKSxKdC09eW4scnQrPXluLHFyKWJyZWFrIGV9ZWxzZSBfdC5oZWFkJiYoX3QuaGVhZC5uYW1lPW51bGwpO190Lmxlbmd0aD0wLF90''@;'; put 'put ''Lm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZfdC5mbGFncyl7aWYoMD09PUp0KWJyZWFrIGU7eW49MDtkb3txcj1OdFtydCt5bisrXSxfdC5oZWFkJiZxciYmX3QubGVuZ3RoPDY1NTM2JiYoX3QuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHFyKSl9d2hpbGUocXImJnluPEp0KTtp''@;'; put 'put ''Zig1MTImX3QuZmxhZ3MmJihfdC5jaGVjaz1rKF90LmNoZWNrLE50LHluLHJ0KSksSnQtPXluLHJ0Kz15bixxcilicmVhayBlfWVsc2UgX3QuaGVhZCYmKF90LmhlYWQuY29tbWVudD1udWxsKTtfdC5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZfdC5mbGFncyl7Zm9yKDtZdDwxNjspe2lmKDA9PT1K''@;'; put 'put ''dClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZihwdCE9PSg2NTUzNSZfdC5jaGVjaykpe3d0Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsX3QubW9kZT0zMDticmVha31wdD0wLFl0PTB9X3QuaGVhZCYmKF90LmhlYWQuaGNyYz1fdC5mbGFncz4+OSYxLF90LmhlYWQu''@;'; put 'put ''ZG9uZT0hMCksd3QuYWRsZXI9X3QuY2hlY2s9MCxfdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTA6Zm9yKDtZdDwzMjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH13dC5hZGxlcj1fdC5jaGVjaz11dChwdCkscHQ9MCxZdD0wLF90Lm1vZGU9MTE7Y2FzZSAx''@;'; put 'put ''MTppZigwPT09X3QuaGF2ZWRpY3QpcmV0dXJuIHd0Lm5leHRfb3V0PUl0LHd0LmF2YWlsX291dD1EdCx3dC5uZXh0X2luPXJ0LHd0LmF2YWlsX2luPUp0LF90LmhvbGQ9cHQsX3QuYml0cz1ZdCwyO3d0LmFkbGVyPV90LmNoZWNrPTEsX3QubW9kZT0xMjtjYXNlIDEyOmlmKDU9PT1YdHx8Nj09''@;'; put 'put ''PVh0KWJyZWFrIGU7Y2FzZSAxMzppZihfdC5sYXN0KXtwdD4+Pj03Jll0LFl0LT03Jll0LF90Lm1vZGU9Mjc7YnJlYWt9Zm9yKDtZdDwzOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fXN3aXRjaChfdC5sYXN0PTEmcHQsWXQtPTEsMyYocHQ+Pj49MSkp''@;'; put 'put ''e2Nhc2UgMDpfdC5tb2RlPTE0O2JyZWFrO2Nhc2UgMTppZigkbihfdCksX3QubW9kZT0yMCw2PT09WHQpe3B0Pj4+PTIsWXQtPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6X3QubW9kZT0xNzticmVhaztjYXNlIDM6d3QubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLF90Lm1vZGU9MzB9cHQ+Pj49''@;'; put 'put ''MixZdC09MjticmVhaztjYXNlIDE0OmZvcihwdD4+Pj03Jll0LFl0LT03Jll0O1l0PDMyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKCg2NTUzNSZwdCkhPShwdD4+PjE2XjY1NTM1KSl7d3QubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5n''@;'; put 'put ''dGhzIixfdC5tb2RlPTMwO2JyZWFrfWlmKF90Lmxlbmd0aD02NTUzNSZwdCxwdD0wLFl0PTAsX3QubW9kZT0xNSw2PT09WHQpYnJlYWsgZTtjYXNlIDE1Ol90Lm1vZGU9MTY7Y2FzZSAxNjppZih5bj1fdC5sZW5ndGgpe2lmKHluPkp0JiYoeW49SnQpLHluPkR0JiYoeW49RHQpLDA9PT15bili''@;'; put 'put ''cmVhayBlO0suYXJyYXlTZXQodm4sTnQscnQseW4sSXQpLEp0LT15bixydCs9eW4sRHQtPXluLEl0Kz15bixfdC5sZW5ndGgtPXluO2JyZWFrfV90Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO1l0PDE0Oyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04''@;'; put 'put ''fWlmKF90Lm5sZW49MjU3KygzMSZwdCksWXQtPTUsX3QubmRpc3Q9MSsoMzEmKHB0Pj4+PTUpKSxZdC09NSxfdC5uY29kZT00KygxNSYocHQ+Pj49NSkpLHB0Pj4+PTQsWXQtPTQsX3Qubmxlbj4yODZ8fF90Lm5kaXN0PjMwKXt3dC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBz''@;'; put 'put ''eW1ib2xzIixfdC5tb2RlPTMwO2JyZWFrfV90LmhhdmU9MCxfdC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtfdC5oYXZlPF90Lm5jb2RlOyl7Zm9yKDtZdDwzOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90LmxlbnNbbm9bX3QuaGF2ZSsrXV09NyZwdCxw''@;'; put 'put ''dD4+Pj0zLFl0LT0zfWZvcig7X3QuaGF2ZTwxOTspX3QubGVuc1tub1tfdC5oYXZlKytdXT0wO2lmKF90LmxlbmNvZGU9X3QubGVuZHluLF90LmxlbmJpdHM9NyxnaT1qKDAsX3QubGVucywwLDE5LF90LmxlbmNvZGUsMCxfdC53b3JrLFVpPXtiaXRzOl90LmxlbmJpdHN9KSxfdC5sZW5iaXRz''@;'; put 'put ''PVVpLmJpdHMsZ2kpe3d0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfV90LmhhdmU9MCxfdC5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtfdC5oYXZlPF90Lm5sZW4rX3QubmRpc3Q7KXtmb3IoOyR0PShCbj1fdC5sZW5jb2RlW3B0JigxPDxfdC5sZW5iaXRz''@;'; put 'put ''KS0xXSk+Pj4xNiYyNTUsRm49NjU1MzUmQm4sISgoT249Qm4+Pj4yNCk8PVl0KTspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZihGbjwxNilwdD4+Pj1PbixZdC09T24sX3QubGVuc1tfdC5oYXZlKytdPUZuO2Vsc2V7aWYoMTY9PT1Gbil7Zm9yKEty''@;'; put 'put ''PU9uKzI7WXQ8S3I7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYocHQ+Pj49T24sWXQtPU9uLDA9PT1fdC5oYXZlKXt3dC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLF90Lm1vZGU9MzA7YnJlYWt9cXI9X3QubGVuc1tfdC5oYXZlLTFd''@;'; put 'put ''LHluPTMrKDMmcHQpLHB0Pj4+PTIsWXQtPTJ9ZWxzZSBpZigxNz09PUZuKXtmb3IoS3I9T24rMztZdDxLcjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1ZdC09T24scXI9MCx5bj0zKyg3JihwdD4+Pj1PbikpLHB0Pj4+PTMsWXQtPTN9ZWxzZXtmb3Io''@;'; put 'put ''S3I9T24rNztZdDxLcjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1ZdC09T24scXI9MCx5bj0xMSsoMTI3JihwdD4+Pj1PbikpLHB0Pj4+PTcsWXQtPTd9aWYoX3QuaGF2ZSt5bj5fdC5ubGVuK190Lm5kaXN0KXt3dC5tc2c9ImludmFsaWQgYml0IGxl''@;'; put 'put ''bmd0aCByZXBlYXQiLF90Lm1vZGU9MzA7YnJlYWt9Zm9yKDt5bi0tOylfdC5sZW5zW190LmhhdmUrK109cXJ9fWlmKDMwPT09X3QubW9kZSlicmVhaztpZigwPT09X3QubGVuc1syNTZdKXt3dC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsX3QubW9kZT0zMDti''@;'; put 'put ''cmVha31pZihfdC5sZW5iaXRzPTksZ2k9aigxLF90LmxlbnMsMCxfdC5ubGVuLF90LmxlbmNvZGUsMCxfdC53b3JrLFVpPXtiaXRzOl90LmxlbmJpdHN9KSxfdC5sZW5iaXRzPVVpLmJpdHMsZ2kpe3d0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixfdC5tb2RlPTMwO2JyZWFr''@;'; put 'put ''fWlmKF90LmRpc3RiaXRzPTYsX3QuZGlzdGNvZGU9X3QuZGlzdGR5bixnaT1qKDIsX3QubGVucyxfdC5ubGVuLF90Lm5kaXN0LF90LmRpc3Rjb2RlLDAsX3Qud29yayxVaT17Yml0czpfdC5kaXN0Yml0c30pLF90LmRpc3RiaXRzPVVpLmJpdHMsZ2kpe3d0Lm1zZz0iaW52YWxpZCBkaXN0YW5j''@;'; put 'put ''ZXMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfWlmKF90Lm1vZGU9MjAsNj09PVh0KWJyZWFrIGU7Y2FzZSAyMDpfdC5tb2RlPTIxO2Nhc2UgMjE6aWYoSnQ+PTYmJkR0Pj0yNTgpe3d0Lm5leHRfb3V0PUl0LHd0LmF2YWlsX291dD1EdCx3dC5uZXh0X2luPXJ0LHd0LmF2YWlsX2luPUp0LF90Lmhv''@;'; put 'put ''bGQ9cHQsX3QuYml0cz1ZdCxFKHd0LHp0KSxJdD13dC5uZXh0X291dCx2bj13dC5vdXRwdXQsRHQ9d3QuYXZhaWxfb3V0LHJ0PXd0Lm5leHRfaW4sTnQ9d3QuaW5wdXQsSnQ9d3QuYXZhaWxfaW4scHQ9X3QuaG9sZCxZdD1fdC5iaXRzLDEyPT09X3QubW9kZSYmKF90LmJhY2s9LTEpO2JyZWFr''@;'; put 'put ''fWZvcihfdC5iYWNrPTA7JHQ9KEJuPV90LmxlbmNvZGVbcHQmKDE8PF90LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxGbj02NTUzNSZCbiwhKChPbj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKCR0JiYhKDI0MCYkdCkpe2Zv''@;'; put 'put ''cihuaT1Pbixsbj0kdCxqbj1GbjskdD0oQm49X3QubGVuY29kZVtqbisoKHB0JigxPDxuaStsbiktMSk+Pm5pKV0pPj4+MTYmMjU1LEZuPTY1NTM1JkJuLCEobmkrKE9uPUJuPj4+MjQpPD1ZdCk7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9cHQ+Pj49''@;'; put 'put ''bmksWXQtPW5pLF90LmJhY2srPW5pfWlmKHB0Pj4+PU9uLFl0LT1PbixfdC5iYWNrKz1PbixfdC5sZW5ndGg9Rm4sMD09PSR0KXtfdC5tb2RlPTI2O2JyZWFrfWlmKDMyJiR0KXtfdC5iYWNrPS0xLF90Lm1vZGU9MTI7YnJlYWt9aWYoNjQmJHQpe3d0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xl''@;'; put 'put ''bmd0aCBjb2RlIixfdC5tb2RlPTMwO2JyZWFrfV90LmV4dHJhPTE1JiR0LF90Lm1vZGU9MjI7Y2FzZSAyMjppZihfdC5leHRyYSl7Zm9yKEtyPV90LmV4dHJhO1l0PEtyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90Lmxlbmd0aCs9cHQmKDE8PF90''@;'; put 'put ''LmV4dHJhKS0xLHB0Pj4+PV90LmV4dHJhLFl0LT1fdC5leHRyYSxfdC5iYWNrKz1fdC5leHRyYX1fdC53YXM9X3QubGVuZ3RoLF90Lm1vZGU9MjM7Y2FzZSAyMzpmb3IoOyR0PShCbj1fdC5kaXN0Y29kZVtwdCYoMTw8X3QuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxGbj02NTUzNSZCbiwhKChP''@;'; put 'put ''bj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKCEoMjQwJiR0KSl7Zm9yKG5pPU9uLGxuPSR0LGpuPUZuOyR0PShCbj1fdC5kaXN0Y29kZVtqbisoKHB0JigxPDxuaStsbiktMSk+Pm5pKV0pPj4+MTYmMjU1LEZuPTY1NTM1''@;'; put 'put ''JkJuLCEobmkrKE9uPUJuPj4+MjQpPD1ZdCk7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9cHQ+Pj49bmksWXQtPW5pLF90LmJhY2srPW5pfWlmKHB0Pj4+PU9uLFl0LT1PbixfdC5iYWNrKz1Pbiw2NCYkdCl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNl''@;'; put 'put ''IGNvZGUiLF90Lm1vZGU9MzA7YnJlYWt9X3Qub2Zmc2V0PUZuLF90LmV4dHJhPTE1JiR0LF90Lm1vZGU9MjQ7Y2FzZSAyNDppZihfdC5leHRyYSl7Zm9yKEtyPV90LmV4dHJhO1l0PEtyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90Lm9mZnNldCs9''@;'; put 'put ''cHQmKDE8PF90LmV4dHJhKS0xLHB0Pj4+PV90LmV4dHJhLFl0LT1fdC5leHRyYSxfdC5iYWNrKz1fdC5leHRyYX1pZihfdC5vZmZzZXQ+X3QuZG1heCl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsX3QubW9kZT0zMDticmVha31fdC5tb2RlPTI1O2Nhc2UgMjU6aWYo''@;'; put 'put ''MD09PUR0KWJyZWFrIGU7aWYoX3Qub2Zmc2V0Pih5bj16dC1EdCkpe2lmKCh5bj1fdC5vZmZzZXQteW4pPl90LndoYXZlJiZfdC5zYW5lKXt3dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixfdC5tb2RlPTMwO2JyZWFrfXhuPXluPl90LnduZXh0P190LndzaXplLSh5bi09''@;'; put 'put ''X3Qud25leHQpOl90LnduZXh0LXluLHluPl90Lmxlbmd0aCYmKHluPV90Lmxlbmd0aCksc249X3Qud2luZG93fWVsc2Ugc249dm4seG49SXQtX3Qub2Zmc2V0LHluPV90Lmxlbmd0aDt5bj5EdCYmKHluPUR0KSxEdC09eW4sX3QubGVuZ3RoLT15bjtkb3t2bltJdCsrXT1zblt4bisrXX13aGls''@;'; put 'put ''ZSgtLXluKTswPT09X3QubGVuZ3RoJiYoX3QubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09RHQpYnJlYWsgZTt2bltJdCsrXT1fdC5sZW5ndGgsRHQtLSxfdC5tb2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYoX3Qud3JhcCl7Zm9yKDtZdDwzMjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0s''@;'; put 'put ''cHR8PU50W3J0KytdPDxZdCxZdCs9OH1pZih3dC50b3RhbF9vdXQrPXp0LT1EdCxfdC50b3RhbCs9enQsenQmJih3dC5hZGxlcj1fdC5jaGVjaz1fdC5mbGFncz9rKF90LmNoZWNrLHZuLHp0LEl0LXp0KTpJKF90LmNoZWNrLHZuLHp0LEl0LXp0KSksenQ9RHQsKF90LmZsYWdzP3B0OnV0KHB0''@;'; put 'put ''KSkhPT1fdC5jaGVjayl7d3QubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsX3QubW9kZT0zMDticmVha31wdD0wLFl0PTB9X3QubW9kZT0yODtjYXNlIDI4OmlmKF90LndyYXAmJl90LmZsYWdzKXtmb3IoO1l0PDMyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0''@;'; put 'put ''LFl0Kz04fWlmKHB0IT09KDQyOTQ5NjcyOTUmX3QudG90YWwpKXt3dC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLF90Lm1vZGU9MzA7YnJlYWt9cHQ9MCxZdD0wfV90Lm1vZGU9Mjk7Y2FzZSAyOTpnaT0xO2JyZWFrIGU7Y2FzZSAzMDpnaT0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJu''@;'; put 'put ''LTQ7ZGVmYXVsdDpyZXR1cm4gc2V9cmV0dXJuIHd0Lm5leHRfb3V0PUl0LHd0LmF2YWlsX291dD1EdCx3dC5uZXh0X2luPXJ0LHd0LmF2YWlsX2luPUp0LF90LmhvbGQ9cHQsX3QuYml0cz1ZdCwoX3Qud3NpemV8fHp0IT09d3QuYXZhaWxfb3V0JiZfdC5tb2RlPDMwJiYoX3QubW9kZTwyN3x8''@;'; put 'put ''NCE9PVh0KSkmJmZ1bmN0aW9uIE5uKHd0LFh0LF90LE50KXt2YXIgdm4scnQ9d3Quc3RhdGU7cmV0dXJuIG51bGw9PT1ydC53aW5kb3cmJihydC53c2l6ZT0xPDxydC53Yml0cyxydC53bmV4dD0wLHJ0LndoYXZlPTAscnQud2luZG93PW5ldyBLLkJ1ZjgocnQud3NpemUpKSxOdD49cnQud3Np''@;'; put 'put ''emU/KEsuYXJyYXlTZXQocnQud2luZG93LFh0LF90LXJ0LndzaXplLHJ0LndzaXplLDApLHJ0LnduZXh0PTAscnQud2hhdmU9cnQud3NpemUpOigodm49cnQud3NpemUtcnQud25leHQpPk50JiYodm49TnQpLEsuYXJyYXlTZXQocnQud2luZG93LFh0LF90LU50LHZuLHJ0LnduZXh0KSwoTnQt''@;'; put 'put ''PXZuKT8oSy5hcnJheVNldChydC53aW5kb3csWHQsX3QtTnQsTnQsMCkscnQud25leHQ9TnQscnQud2hhdmU9cnQud3NpemUpOihydC53bmV4dCs9dm4scnQud25leHQ9PT1ydC53c2l6ZSYmKHJ0LnduZXh0PTApLHJ0LndoYXZlPHJ0LndzaXplJiYocnQud2hhdmUrPXZuKSkpLDB9KHd0LHd0''@;'; put 'put ''Lm91dHB1dCx3dC5uZXh0X291dCx6dC13dC5hdmFpbF9vdXQpPyhfdC5tb2RlPTMxLC00KTooenQtPXd0LmF2YWlsX291dCx3dC50b3RhbF9pbis9TG4tPXd0LmF2YWlsX2luLHd0LnRvdGFsX291dCs9enQsX3QudG90YWwrPXp0LF90LndyYXAmJnp0JiYod3QuYWRsZXI9X3QuY2hlY2s9X3Qu''@;'; put 'put ''ZmxhZ3M/ayhfdC5jaGVjayx2bix6dCx3dC5uZXh0X291dC16dCk6SShfdC5jaGVjayx2bix6dCx3dC5uZXh0X291dC16dCkpLHd0LmRhdGFfdHlwZT1fdC5iaXRzKyhfdC5sYXN0PzY0OjApKygxMj09PV90Lm1vZGU/MTI4OjApKygyMD09PV90Lm1vZGV8fDE1PT09X3QubW9kZT8yNTY6MCks''@;'; put 'put ''KDA9PT1MbiYmMD09PXp0fHw0PT09WHQpJiZnaT09PWVlJiYoZ2k9LTUpLGdpKX0sei5pbmZsYXRlRW5kPWZ1bmN0aW9uIGZuKHd0KXtpZighd3R8fCF3dC5zdGF0ZSlyZXR1cm4gc2U7dmFyIFh0PXd0LnN0YXRlO3JldHVybiBYdC53aW5kb3cmJihYdC53aW5kb3c9bnVsbCksd3Quc3RhdGU9''@;'; put 'put ''bnVsbCxlZX0sei5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uIGhuKHd0LFh0KXt2YXIgX3Q7cmV0dXJuIHd0JiZ3dC5zdGF0ZSYmMiYoX3Q9d3Quc3RhdGUpLndyYXA/KF90LmhlYWQ9WHQsWHQuZG9uZT0hMSxlZSk6c2V9LHouaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2Rl''@;'; put 'put ''Y2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL2luZmZhc3QiOjM0LCIuL2luZnRyZWVzIjozNn1dLDM2OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4uL3V0aWxzL2NvbW1vbiIpLFk9WzMsNCw1''@;'; put 'put ''LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxYPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwy''@;'; put 'put ''MSwyMSwyMSwxNiw3Miw3OF0sVT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0scT1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgs''@;'; put 'put ''MTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO1IuZXhwb3J0cz1mdW5jdGlvbih0ZSxvZSxzZSxoZSx1ZSxjZSxHLGIpe3ZhciBkZSxmZSx4ZSxMZSxGZSxXZSxQZSxiZSxBZSxEPWIuYml0cyxIPTAsTj0wLGc9''@;'; put 'put ''MCxDPTAsUz0wLHY9MCxwPTAsdz0wLEo9MCxuZT0wLE9lPW51bGwsQmU9MCxLZT1uZXcgSy5CdWYxNigxNiksWWU9bmV3IEsuQnVmMTYoMTYpLEplPW51bGwsbHQ9MDtmb3IoSD0wO0g8PTE1O0grKylLZVtIXT0wO2ZvcihOPTA7TjxoZTtOKyspS2Vbb2Vbc2UrTl1dKys7Zm9yKFM9RCxDPTE1''@;'; put 'put ''O0M+PTEmJjA9PT1LZVtDXTtDLS0pO2lmKFM+QyYmKFM9QyksMD09PUMpcmV0dXJuIHVlW2NlKytdPTIwOTcxNTIwLHVlW2NlKytdPTIwOTcxNTIwLGIuYml0cz0xLDA7Zm9yKGc9MTtnPEMmJjA9PT1LZVtnXTtnKyspO2ZvcihTPGcmJihTPWcpLHc9MSxIPTE7SDw9MTU7SCsrKWlmKHc8PD0x''@;'; put 'put ''LCh3LT1LZVtIXSk8MClyZXR1cm4tMTtpZih3PjAmJigwPT09dGV8fDEhPT1DKSlyZXR1cm4tMTtmb3IoWWVbMV09MCxIPTE7SDwxNTtIKyspWWVbSCsxXT1ZZVtIXStLZVtIXTtmb3IoTj0wO048aGU7TisrKTAhPT1vZVtzZStOXSYmKEdbWWVbb2Vbc2UrTl1dKytdPU4pO2lmKDA9PT10ZT8o''@;'; put 'put ''T2U9SmU9RyxXZT0xOSk6MT09PXRlPyhPZT1ZLEJlLT0yNTcsSmU9WCxsdC09MjU3LFdlPTI1Nik6KE9lPVUsSmU9cSxXZT0tMSksbmU9MCxOPTAsSD1nLEZlPWNlLHY9UyxwPTAseGU9LTEsTGU9KEo9MTw8UyktMSwxPT09dGUmJko+ODUyfHwyPT09dGUmJko+NTkyKXJldHVybiAxO2Zvcig7''@;'; put 'put ''Oyl7UGU9SC1wLEdbTl08V2U/KGJlPTAsQWU9R1tOXSk6R1tOXT5XZT8oYmU9SmVbbHQrR1tOXV0sQWU9T2VbQmUrR1tOXV0pOihiZT05NixBZT0wKSxkZT0xPDxILXAsZz1mZT0xPDx2O2Rve3VlW0ZlKyhuZT4+cCkrKGZlLT1kZSldPVBlPDwyNHxiZTw8MTZ8QWV8MH13aGlsZSgwIT09ZmUp''@;'; put 'put ''O2ZvcihkZT0xPDxILTE7bmUmZGU7KWRlPj49MTtpZigwIT09ZGU/KG5lJj1kZS0xLG5lKz1kZSk6bmU9MCxOKyssMD09LS1LZVtIXSl7aWYoSD09PUMpYnJlYWs7SD1vZVtzZStHW05dXX1pZihIPlMmJihuZSZMZSkhPT14ZSl7Zm9yKDA9PT1wJiYocD1TKSxGZSs9Zyx3PTE8PCh2PUgtcCk7''@;'; put 'put ''ditwPEMmJiEoKHctPUtlW3YrcF0pPD0wKTspdisrLHc8PD0xO2lmKEorPTE8PHYsMT09PXRlJiZKPjg1Mnx8Mj09PXRlJiZKPjU5MilyZXR1cm4gMTt1ZVt4ZT1uZSZMZV09Uzw8MjR8djw8MTZ8RmUtY2V8MH19cmV0dXJuIDAhPT1uZSYmKHVlW0ZlK25lXT1ILXA8PDI0fDY0PDwxNnwwKSxi''@;'; put 'put ''LmJpdHM9UywwfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Ui5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJk''@;'; put 'put ''YXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuLi91dGlscy9jb21tb24iKTtmdW5jdGlvbiBWKGZ0''@;'; put 'put ''KXtmb3IodmFyIGZuPWZ0Lmxlbmd0aDstLWZuPj0wOylmdFtmbl09MH12YXIgY2U9MTUsRz0xNixDPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLFM9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDks''@;'; put 'put ''MTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLHY9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLHA9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLEo9bmV3IEFycmF5KDU3Nik7VihKKTt2YXIgbmU9bmV3IEFycmF5KDYwKTtWKG5l''@;'; put 'put ''KTt2YXIgZGU9bmV3IEFycmF5KDUxMik7VihkZSk7dmFyIGZlPW5ldyBBcnJheSgyNTYpO1YoZmUpO3ZhciB4ZT1uZXcgQXJyYXkoMjkpO1YoeGUpO3ZhciBMZT1uZXcgQXJyYXkoMzApO1YoTGUpO3ZhciBPZSxCZSxXZSxGZT1mdW5jdGlvbihmdCxmbixobix3dCxYdCl7dGhpcy5zdGF0aWNf''@;'; put 'put ''dHJlZT1mdCx0aGlzLmV4dHJhX2JpdHM9Zm4sdGhpcy5leHRyYV9iYXNlPWhuLHRoaXMuZWxlbXM9d3QsdGhpcy5tYXhfbGVuZ3RoPVh0LHRoaXMuaGFzX3N0cmVlPWZ0JiZmdC5sZW5ndGh9LEtlPWZ1bmN0aW9uKGZ0LGZuKXt0aGlzLmR5bl90cmVlPWZ0LHRoaXMubWF4X2NvZGU9MCx0aGlz''@;'; put 'put ''LnN0YXRfZGVzYz1mbn07ZnVuY3Rpb24gWWUoZnQpe3JldHVybiBmdDwyNTY/ZGVbZnRdOmRlWzI1NisoZnQ+Pj43KV19ZnVuY3Rpb24gSmUoZnQsZm4pe2Z0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109MjU1JmZuLGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109Zm4+Pj44JjI1NX1m''@;'; put 'put ''dW5jdGlvbiBsdChmdCxmbixobil7ZnQuYmlfdmFsaWQ+Ry1obj8oZnQuYmlfYnVmfD1mbjw8ZnQuYmlfdmFsaWQmNjU1MzUsSmUoZnQsZnQuYmlfYnVmKSxmdC5iaV9idWY9Zm4+PkctZnQuYmlfdmFsaWQsZnQuYmlfdmFsaWQrPWhuLUcpOihmdC5iaV9idWZ8PWZuPDxmdC5iaV92YWxpZCY2''@;'; put 'put ''NTUzNSxmdC5iaV92YWxpZCs9aG4pfWZ1bmN0aW9uIFBlKGZ0LGZuLGhuKXtsdChmdCxoblsyKmZuXSxoblsyKmZuKzFdKX1mdW5jdGlvbiBiZShmdCxmbil7dmFyIGhuPTA7ZG97aG58PTEmZnQsZnQ+Pj49MSxobjw8PTF9d2hpbGUoLS1mbj4wKTtyZXR1cm4gaG4+Pj4xfWZ1bmN0aW9uIHFl''@;'; put 'put ''KGZ0LGZuLGhuKXt2YXIgX3QsTnQsd3Q9bmV3IEFycmF5KGNlKzEpLFh0PTA7Zm9yKF90PTE7X3Q8PWNlO190Kyspd3RbX3RdPVh0PVh0K2huW190LTFdPDwxO2ZvcihOdD0wO050PD1mbjtOdCsrKXt2YXIgdm49ZnRbMipOdCsxXTswIT09dm4mJihmdFsyKk50XT1iZSh3dFt2bl0rKyx2bikp''@;'; put 'put ''fX1mdW5jdGlvbiBVZShmdCl7dmFyIGZuO2Zvcihmbj0wO2ZuPDI4NjtmbisrKWZ0LmR5bl9sdHJlZVsyKmZuXT0wO2Zvcihmbj0wO2ZuPDMwO2ZuKyspZnQuZHluX2R0cmVlWzIqZm5dPTA7Zm9yKGZuPTA7Zm48MTk7Zm4rKylmdC5ibF90cmVlWzIqZm5dPTA7ZnQuZHluX2x0cmVlWzUxMl09''@;'; put 'put ''MSxmdC5vcHRfbGVuPWZ0LnN0YXRpY19sZW49MCxmdC5sYXN0X2xpdD1mdC5tYXRjaGVzPTB9ZnVuY3Rpb24gaHQoZnQpe2Z0LmJpX3ZhbGlkPjg/SmUoZnQsZnQuYmlfYnVmKTpmdC5iaV92YWxpZD4wJiYoZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT1mdC5iaV9idWYpLGZ0LmJpX2J1''@;'; put 'put ''Zj0wLGZ0LmJpX3ZhbGlkPTB9ZnVuY3Rpb24gRGUoZnQsZm4saG4sd3Qpe3ZhciBYdD0yKmZuLF90PTIqaG47cmV0dXJuIGZ0W1h0XTxmdFtfdF18fGZ0W1h0XT09PWZ0W190XSYmd3RbZm5dPD13dFtobl19ZnVuY3Rpb24gemUoZnQsZm4saG4pe2Zvcih2YXIgd3Q9ZnQuaGVhcFtobl0sWHQ9''@;'; put 'put ''aG48PDE7WHQ8PWZ0LmhlYXBfbGVuJiYoWHQ8ZnQuaGVhcF9sZW4mJkRlKGZuLGZ0LmhlYXBbWHQrMV0sZnQuaGVhcFtYdF0sZnQuZGVwdGgpJiZYdCsrLCFEZShmbix3dCxmdC5oZWFwW1h0XSxmdC5kZXB0aCkpOylmdC5oZWFwW2huXT1mdC5oZWFwW1h0XSxobj1YdCxYdDw8PTE7ZnQuaGVh''@;'; put 'put ''cFtobl09d3R9ZnVuY3Rpb24gaXQoZnQsZm4saG4pe3ZhciB3dCxYdCxOdCx2bixfdD0wO2lmKDAhPT1mdC5sYXN0X2xpdClkb3t3dD1mdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKl90XTw8OHxmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKl90KzFdLFh0PWZ0LnBlbmRpbmdfYnVmW2Z0Lmxf''@;'; put 'put ''YnVmK190XSxfdCsrLDA9PT13dD9QZShmdCxYdCxmbik6KFBlKGZ0LChOdD1mZVtYdF0pKzI1NisxLGZuKSwwIT09KHZuPUNbTnRdKSYmbHQoZnQsWHQtPXhlW050XSx2biksUGUoZnQsTnQ9WWUoLS13dCksaG4pLDAhPT0odm49U1tOdF0pJiZsdChmdCx3dC09TGVbTnRdLHZuKSl9d2hpbGUo''@;'; put 'put ''X3Q8ZnQubGFzdF9saXQpO1BlKGZ0LDI1Nixmbil9ZnVuY3Rpb24gdXQoZnQsZm4pe3ZhciBOdCx2bixJdCxobj1mbi5keW5fdHJlZSx3dD1mbi5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsWHQ9Zm4uc3RhdF9kZXNjLmhhc19zdHJlZSxfdD1mbi5zdGF0X2Rlc2MuZWxlbXMscnQ9LTE7Zm9yKGZ0''@;'; put 'put ''LmhlYXBfbGVuPTAsZnQuaGVhcF9tYXg9NTczLE50PTA7TnQ8X3Q7TnQrKykwIT09aG5bMipOdF0/KGZ0LmhlYXBbKytmdC5oZWFwX2xlbl09cnQ9TnQsZnQuZGVwdGhbTnRdPTApOmhuWzIqTnQrMV09MDtmb3IoO2Z0LmhlYXBfbGVuPDI7KWhuWzIqKEl0PWZ0LmhlYXBbKytmdC5oZWFwX2xl''@;'; put 'put ''bl09cnQ8Mj8rK3J0OjApXT0xLGZ0LmRlcHRoW0l0XT0wLGZ0Lm9wdF9sZW4tLSxYdCYmKGZ0LnN0YXRpY19sZW4tPXd0WzIqSXQrMV0pO2Zvcihmbi5tYXhfY29kZT1ydCxOdD1mdC5oZWFwX2xlbj4+MTtOdD49MTtOdC0tKXplKGZ0LGhuLE50KTtJdD1fdDtkb3tOdD1mdC5oZWFwWzFdLGZ0''@;'; put 'put ''LmhlYXBbMV09ZnQuaGVhcFtmdC5oZWFwX2xlbi0tXSx6ZShmdCxobiwxKSx2bj1mdC5oZWFwWzFdLGZ0LmhlYXBbLS1mdC5oZWFwX21heF09TnQsZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT12bixoblsyKkl0XT1oblsyKk50XStoblsyKnZuXSxmdC5kZXB0aFtJdF09KGZ0LmRlcHRoW050XT49''@;'; put 'put ''ZnQuZGVwdGhbdm5dP2Z0LmRlcHRoW050XTpmdC5kZXB0aFt2bl0pKzEsaG5bMipOdCsxXT1oblsyKnZuKzFdPUl0LGZ0LmhlYXBbMV09SXQrKyx6ZShmdCxobiwxKX13aGlsZShmdC5oZWFwX2xlbj49Mik7ZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1mdC5oZWFwWzFdLGZ1bmN0aW9uIFRlKGZ0''@;'; put 'put ''LGZuKXt2YXIgSXQsSnQsRHQscHQsWXQsTG4saG49Zm4uZHluX3RyZWUsd3Q9Zm4ubWF4X2NvZGUsWHQ9Zm4uc3RhdF9kZXNjLnN0YXRpY190cmVlLF90PWZuLnN0YXRfZGVzYy5oYXNfc3RyZWUsTnQ9Zm4uc3RhdF9kZXNjLmV4dHJhX2JpdHMsdm49Zm4uc3RhdF9kZXNjLmV4dHJhX2Jhc2Us''@;'; put 'put ''cnQ9Zm4uc3RhdF9kZXNjLm1heF9sZW5ndGgsenQ9MDtmb3IocHQ9MDtwdDw9Y2U7cHQrKylmdC5ibF9jb3VudFtwdF09MDtmb3IoaG5bMipmdC5oZWFwW2Z0LmhlYXBfbWF4XSsxXT0wLEl0PWZ0LmhlYXBfbWF4KzE7SXQ8NTczO0l0KyspKHB0PWhuWzIqaG5bMiooSnQ9ZnQuaGVhcFtJdF0p''@;'; put 'put ''KzFdKzFdKzEpPnJ0JiYocHQ9cnQsenQrKyksaG5bMipKdCsxXT1wdCwhKEp0Pnd0KSYmKGZ0LmJsX2NvdW50W3B0XSsrLFl0PTAsSnQ+PXZuJiYoWXQ9TnRbSnQtdm5dKSxmdC5vcHRfbGVuKz0oTG49aG5bMipKdF0pKihwdCtZdCksX3QmJihmdC5zdGF0aWNfbGVuKz1MbiooWHRbMipKdCsx''@;'; put 'put ''XStZdCkpKTtpZigwIT09enQpe2Rve2ZvcihwdD1ydC0xOzA9PT1mdC5ibF9jb3VudFtwdF07KXB0LS07ZnQuYmxfY291bnRbcHRdLS0sZnQuYmxfY291bnRbcHQrMV0rPTIsZnQuYmxfY291bnRbcnRdLS0senQtPTJ9d2hpbGUoenQ+MCk7Zm9yKHB0PXJ0OzAhPT1wdDtwdC0tKWZvcihKdD1m''@;'; put 'put ''dC5ibF9jb3VudFtwdF07MCE9PUp0OykhKChEdD1mdC5oZWFwWy0tSXRdKT53dCkmJihoblsyKkR0KzFdIT09cHQmJihmdC5vcHRfbGVuKz0ocHQtaG5bMipEdCsxXSkqaG5bMipEdF0saG5bMipEdCsxXT1wdCksSnQtLSl9fShmdCxmbikscWUoaG4scnQsZnQuYmxfY291bnQpfWZ1bmN0aW9u''@;'; put 'put ''IE10KGZ0LGZuLGhuKXt2YXIgd3QsX3QsWHQ9LTEsTnQ9Zm5bMV0sdm49MCxydD03LEl0PTQ7Zm9yKDA9PT1OdCYmKHJ0PTEzOCxJdD0zKSxmblsyKihobisxKSsxXT02NTUzNSx3dD0wO3d0PD1objt3dCsrKV90PU50LE50PWZuWzIqKHd0KzEpKzFdLCEoKyt2bjxydCYmX3Q9PT1OdCkmJih2''@;'; put 'put ''bjxJdD9mdC5ibF90cmVlWzIqX3RdKz12bjowIT09X3Q/KF90IT09WHQmJmZ0LmJsX3RyZWVbMipfdF0rKyxmdC5ibF90cmVlWzMyXSsrKTp2bjw9MTA/ZnQuYmxfdHJlZVszNF0rKzpmdC5ibF90cmVlWzM2XSsrLHZuPTAsWHQ9X3QsMD09PU50PyhydD0xMzgsSXQ9Myk6X3Q9PT1OdD8ocnQ9''@;'; put 'put ''NixJdD0zKToocnQ9NyxJdD00KSl9ZnVuY3Rpb24gSHQoZnQsZm4saG4pe3ZhciB3dCxfdCxYdD0tMSxOdD1mblsxXSx2bj0wLHJ0PTcsSXQ9NDtmb3IoMD09PU50JiYocnQ9MTM4LEl0PTMpLHd0PTA7d3Q8PWhuO3d0KyspaWYoX3Q9TnQsTnQ9Zm5bMiood3QrMSkrMV0sISgrK3ZuPHJ0JiZf''@;'; put 'put ''dD09PU50KSl7aWYodm48SXQpZG97UGUoZnQsX3QsZnQuYmxfdHJlZSl9d2hpbGUoMCE9LS12bik7ZWxzZSAwIT09X3Q/KF90IT09WHQmJihQZShmdCxfdCxmdC5ibF90cmVlKSx2bi0tKSxQZShmdCwxNixmdC5ibF90cmVlKSxsdChmdCx2bi0zLDIpKTp2bjw9MTA/KFBlKGZ0LDE3LGZ0LmJs''@;'; put 'put ''X3RyZWUpLGx0KGZ0LHZuLTMsMykpOihQZShmdCwxOCxmdC5ibF90cmVlKSxsdChmdCx2bi0xMSw3KSk7dm49MCxYdD1fdCwwPT09TnQ/KHJ0PTEzOCxJdD0zKTpfdD09PU50PyhydD02LEl0PTMpOihydD03LEl0PTQpfX12YXIgVXQ9ITE7ZnVuY3Rpb24gV24oZnQsZm4saG4sd3Qpe2x0KGZ0''@;'; put 'put ''LDArKHd0PzE6MCksMyksZnVuY3Rpb24gTWUoZnQsZm4saG4sd3Qpe2h0KGZ0KSx3dCYmKEplKGZ0LGhuKSxKZShmdCx+aG4pKSxLLmFycmF5U2V0KGZ0LnBlbmRpbmdfYnVmLGZ0LndpbmRvdyxmbixobixmdC5wZW5kaW5nKSxmdC5wZW5kaW5nKz1obn0oZnQsZm4saG4sITApfXouX3RyX2lu''@;'; put 'put ''aXQ9ZnVuY3Rpb24gYm4oZnQpe1V0fHwoZnVuY3Rpb24gWGUoKXt2YXIgZnQsZm4saG4sd3QsWHQsX3Q9bmV3IEFycmF5KGNlKzEpO2Zvcihobj0wLHd0PTA7d3Q8Mjg7d3QrKylmb3IoeGVbd3RdPWhuLGZ0PTA7ZnQ8MTw8Q1t3dF07ZnQrKylmZVtobisrXT13dDtmb3IoZmVbaG4tMV09d3Qs''@;'; put 'put ''WHQ9MCx3dD0wO3d0PDE2O3d0KyspZm9yKExlW3d0XT1YdCxmdD0wO2Z0PDE8PFNbd3RdO2Z0KyspZGVbWHQrK109d3Q7Zm9yKFh0Pj49Nzt3dDwzMDt3dCsrKWZvcihMZVt3dF09WHQ8PDcsZnQ9MDtmdDwxPDxTW3d0XS03O2Z0KyspZGVbMjU2K1h0KytdPXd0O2Zvcihmbj0wO2ZuPD1jZTtm''@;'; put 'put ''bisrKV90W2ZuXT0wO2ZvcihmdD0wO2Z0PD0xNDM7KUpbMipmdCsxXT04LGZ0KyssX3RbOF0rKztmb3IoO2Z0PD0yNTU7KUpbMipmdCsxXT05LGZ0KyssX3RbOV0rKztmb3IoO2Z0PD0yNzk7KUpbMipmdCsxXT03LGZ0KyssX3RbN10rKztmb3IoO2Z0PD0yODc7KUpbMipmdCsxXT04LGZ0Kyss''@;'; put 'put ''X3RbOF0rKztmb3IocWUoSiwyODcsX3QpLGZ0PTA7ZnQ8MzA7ZnQrKyluZVsyKmZ0KzFdPTUsbmVbMipmdF09YmUoZnQsNSk7T2U9bmV3IEZlKEosQywyNTcsMjg2LGNlKSxCZT1uZXcgRmUobmUsUywwLDMwLGNlKSxXZT1uZXcgRmUobmV3IEFycmF5KDApLHYsMCwxOSw3KX0oKSxVdD0hMCks''@;'; put 'put ''ZnQubF9kZXNjPW5ldyBLZShmdC5keW5fbHRyZWUsT2UpLGZ0LmRfZGVzYz1uZXcgS2UoZnQuZHluX2R0cmVlLEJlKSxmdC5ibF9kZXNjPW5ldyBLZShmdC5ibF90cmVlLFdlKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wLFVlKGZ0KX0sei5fdHJfc3RvcmVkX2Jsb2NrPVduLHouX3RyX2Zs''@;'; put 'put ''dXNoX2Jsb2NrPWZ1bmN0aW9uICRuKGZ0LGZuLGhuLHd0KXt2YXIgWHQsX3QsTnQ9MDtmdC5sZXZlbD4wPygyPT09ZnQuc3RybS5kYXRhX3R5cGUmJihmdC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbiBDbihmdCl7dmFyIGhuLGZuPTQwOTM2MjQ0NDc7Zm9yKGhuPTA7aG48PTMxO2huKyssZm4+''@;'; put 'put ''Pj49MSlpZigxJmZuJiYwIT09ZnQuZHluX2x0cmVlWzIqaG5dKXJldHVybiAwO2lmKDAhPT1mdC5keW5fbHRyZWVbMThdfHwwIT09ZnQuZHluX2x0cmVlWzIwXXx8MCE9PWZ0LmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKGhuPTMyO2huPDI1NjtobisrKWlmKDAhPT1mdC5keW5fbHRyZWVb''@;'; put 'put ''Mipobl0pcmV0dXJuIDE7cmV0dXJuIDB9KGZ0KSksdXQoZnQsZnQubF9kZXNjKSx1dChmdCxmdC5kX2Rlc2MpLE50PWZ1bmN0aW9uIFB0KGZ0KXt2YXIgZm47Zm9yKE10KGZ0LGZ0LmR5bl9sdHJlZSxmdC5sX2Rlc2MubWF4X2NvZGUpLE10KGZ0LGZ0LmR5bl9kdHJlZSxmdC5kX2Rlc2MubWF4''@;'; put 'put ''X2NvZGUpLHV0KGZ0LGZ0LmJsX2Rlc2MpLGZuPTE4O2ZuPj0zJiYwPT09ZnQuYmxfdHJlZVsyKnBbZm5dKzFdO2ZuLS0pO3JldHVybiBmdC5vcHRfbGVuKz0zKihmbisxKSs1KzUrNCxmbn0oZnQpLChfdD1mdC5zdGF0aWNfbGVuKzMrNz4+PjMpPD0oWHQ9ZnQub3B0X2xlbiszKzc+Pj4zKSYm''@;'; put 'put ''KFh0PV90KSk6WHQ9X3Q9aG4rNSxobis0PD1YdCYmLTEhPT1mbj9XbihmdCxmbixobix3dCk6ND09PWZ0LnN0cmF0ZWd5fHxfdD09PVh0PyhsdChmdCwyKyh3dD8xOjApLDMpLGl0KGZ0LEosbmUpKToobHQoZnQsNCsod3Q/MTowKSwzKSxmdW5jdGlvbiBvbihmdCxmbixobix3dCl7dmFyIFh0''@;'; put 'put ''O2ZvcihsdChmdCxmbi0yNTcsNSksbHQoZnQsaG4tMSw1KSxsdChmdCx3dC00LDQpLFh0PTA7WHQ8d3Q7WHQrKylsdChmdCxmdC5ibF90cmVlWzIqcFtYdF0rMV0sMyk7SHQoZnQsZnQuZHluX2x0cmVlLGZuLTEpLEh0KGZ0LGZ0LmR5bl9kdHJlZSxobi0xKX0oZnQsZnQubF9kZXNjLm1heF9j''@;'; put 'put ''b2RlKzEsZnQuZF9kZXNjLm1heF9jb2RlKzEsTnQrMSksaXQoZnQsZnQuZHluX2x0cmVlLGZ0LmR5bl9kdHJlZSkpLFVlKGZ0KSx3dCYmaHQoZnQpfSx6Ll90cl90YWxseT1mdW5jdGlvbiBObihmdCxmbixobil7cmV0dXJuIGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXRd''@;'; put 'put ''PWZuPj4+OCYyNTUsZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipmdC5sYXN0X2xpdCsxXT0yNTUmZm4sZnQucGVuZGluZ19idWZbZnQubF9idWYrZnQubGFzdF9saXRdPTI1NSZobixmdC5sYXN0X2xpdCsrLDA9PT1mbj9mdC5keW5fbHRyZWVbMipobl0rKzooZnQubWF0Y2hlcysrLGZuLS0s''@;'; put 'put ''ZnQuZHluX2x0cmVlWzIqKGZlW2huXSsyNTYrMSldKyssZnQuZHluX2R0cmVlWzIqWWUoZm4pXSsrKSxmdC5sYXN0X2xpdD09PWZ0LmxpdF9idWZzaXplLTF9LHouX3RyX2FsaWduPWZ1bmN0aW9uIGVuKGZ0KXtsdChmdCwyLDMpLFBlKGZ0LDI1NixKKSxmdW5jdGlvbiBBZShmdCl7MTY9PT1m''@;'; put 'put ''dC5iaV92YWxpZD8oSmUoZnQsZnQuYmlfYnVmKSxmdC5iaV9idWY9MCxmdC5iaV92YWxpZD0wKTpmdC5iaV92YWxpZD49OCYmKGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109MjU1JmZ0LmJpX2J1ZixmdC5iaV9idWY+Pj04LGZ0LmJpX3ZhbGlkLT04KX0oZnQpfX0seyIuLi91dGlscy9j''@;'; put 'put ''b21tb24iOjI3fV0sMzk6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Ui5leHBvcnRzPWZ1bmN0aW9uIEsoKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0''@;'; put 'put ''aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0se31dfSx7fSxbOV0pKDkpfSl9LDgzNDE3OihhdCxJZSxGKT0+eyFmdW5jdGlvbiB4KE0pe00udmVyc2lvbj0iMS4yMDIxMTEy''@;'; put 'put ''Mi4xIjt2YXIgTz0xMjAwLFI9MTI1Mjt0eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0YWJsZT1GKDgwNzg4KTp0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5jcHRhYmxlPUYoODA3ODgpKSk7Zm9yKHZhciB6PVs4NzQsOTMyLDkzNiw5NDksOTUwLDFl''@;'; put 'put ''NF0sSz0wO0s8PTg7KytLKXoucHVzaCgxMjUwK0spO3ZhciBJPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0OjkzNiwxMzY6OTUwLDE2MToxMjUzLDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1LDE3ODoxMjU2LDE4NjoxMjU3LDIw''@;'; put 'put ''NDoxMjUxLDIyMjo4NzQsMjM4OjEyNTAsMjU1OjEyNTIsNjk6Njk2OX0saz1mdW5jdGlvbih5KXstMSE9ei5pbmRleE9mKHkpJiYoUj1JWzBdPXkpfSxqPWZ1bmN0aW9uKHkpe089eSxrKHkpfTtmdW5jdGlvbiBWKCl7aigxMjAwKSxmdW5jdGlvbiBFKCl7aygxMjUyKX0oKX1mdW5jdGlvbiBC''@;'; put 'put ''KHkpe2Zvcih2YXIgUD1bXSxMPTAsUT15Lmxlbmd0aDtMPFE7KytMKVBbTF09eS5jaGFyQ29kZUF0KEwpO3JldHVybiBQfXZhciBVPWZ1bmN0aW9uKHkpe3ZhciBQPXkuY2hhckNvZGVBdCgwKSxMPXkuY2hhckNvZGVBdCgxKTtyZXR1cm4gMjU1PT1QJiYyNTQ9PUw/ZnVuY3Rpb24gWSh5KXtm''@;'; put 'put ''b3IodmFyIFA9W10sTD0wO0w8eS5sZW5ndGg+PjE7KytMKVBbTF09U3RyaW5nLmZyb21DaGFyQ29kZSh5LmNoYXJDb2RlQXQoMipMKSsoeS5jaGFyQ29kZUF0KDIqTCsxKTw8OCkpO3JldHVybiBQLmpvaW4oIiIpfSh5LnNsaWNlKDIpKToyNTQ9PVAmJjI1NT09TD9mdW5jdGlvbiBYKHkpe2Zv''@;'; put 'put ''cih2YXIgUD1bXSxMPTA7TDx5Lmxlbmd0aD4+MTsrK0wpUFtMXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHkuY2hhckNvZGVBdCgyKkwrMSkrKHkuY2hhckNvZGVBdCgyKkwpPDw4KSk7cmV0dXJuIFAuam9pbigiIil9KHkuc2xpY2UoMikpOjY1Mjc5PT1QP3kuc2xpY2UoMSk6eX0scT1mdW5jdGlv''@;'; put 'put ''bihQKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShQKX0sZWU9ZnVuY3Rpb24oUCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoUCl9O3R5cGVvZiBjcHRhYmxlPCJ1IiYmKGo9ZnVuY3Rpb24oeSl7Tz15LGsoeSl9LFU9ZnVuY3Rpb24oeSl7cmV0dXJuIDI1NT09PXkuY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmMjU0PT09eS5jaGFyQ29kZUF0KDEpP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsQih5LnNsaWNlKDIpKSk6eX0scT1mdW5jdGlvbihQKXtyZXR1cm4gMTIwMD09PU8/U3RyaW5nLmZyb21DaGFyQ29kZShQKTpjcHRhYmxlLnV0aWxzLmRlY29kZShPLFsyNTUmUCxQPj44XSlbMF19''@;'; put 'put ''LGVlPWZ1bmN0aW9uKFApe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZShSLFtQXSlbMF19KTt2YXIgUCx0ZT1udWxsLHNlPShQPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIse2VuY29kZTpmdW5jdGlvbihMKXtm''@;'; put 'put ''b3IodmFyIFE9IiIscmU9MCxwZT0wLF9lPTAsdmU9MCxTZT0wLEhlPTAsVmU9MCxHZT0wO0dlPEwubGVuZ3RoOyl2ZT0ocmU9TC5jaGFyQ29kZUF0KEdlKyspKT4+MixTZT0oMyZyZSk8PDR8KHBlPUwuY2hhckNvZGVBdChHZSsrKSk+PjQsSGU9KDE1JnBlKTw8MnwoX2U9TC5jaGFyQ29kZUF0''@;'; put 'put ''KEdlKyspKT4+NixWZT02MyZfZSxpc05hTihwZSk/SGU9VmU9NjQ6aXNOYU4oX2UpJiYoVmU9NjQpLFErPVAuY2hhckF0KHZlKStQLmNoYXJBdChTZSkrUC5jaGFyQXQoSGUpK1AuY2hhckF0KFZlKTtyZXR1cm4gUX0sZGVjb2RlOmZ1bmN0aW9uKFEpe3ZhciByZT0iIixTZT0wLEhlPTAsVmU9''@;'; put 'put ''MCxHZT0wO1E9US5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIG50PTA7bnQ8US5sZW5ndGg7KVNlPVAuaW5kZXhPZihRLmNoYXJBdChudCsrKSksSGU9UC5pbmRleE9mKFEuY2hhckF0KG50KyspKSxyZSs9U3RyaW5nLmZyb21DaGFyQ29kZShTZTw8MnxIZT4+NCksNjQhPT0o''@;'; put 'put ''VmU9UC5pbmRleE9mKFEuY2hhckF0KG50KyspKSkmJihyZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmSGUpPDw0fFZlPj4yKSksNjQhPT0oR2U9UC5pbmRleE9mKFEuY2hhckF0KG50KyspKSkmJihyZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMyZWZSk8PDZ8R2UpKTtyZXR1cm4gcmV9fSks''@;'; put 'put ''aGU9dHlwZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lvbnMubm9kZSx1ZT1mdW5jdGlvbigpe307aWYodHlwZW9mIEJ1ZmZlcjwidSIpe3ZhciBjZT0hQnVmZmVyLmZyb207aWYoIWNlKXRyeXtC''@;'; put 'put ''dWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe2NlPSEwfXVlPWNlP2Z1bmN0aW9uKHksUCl7cmV0dXJuIFA/bmV3IEJ1ZmZlcih5LFApOm5ldyBCdWZmZXIoeSl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2N8fChCdWZmZXIuYWxsb2M9ZnVuY3Rpb24oeSl7cmV0''@;'; put 'put ''dXJuIG5ldyBCdWZmZXIoeSl9KSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oeSl7cmV0dXJuIG5ldyBCdWZmZXIoeSl9KX1mdW5jdGlvbiBHKHkpe3JldHVybiBoZT9CdWZmZXIuYWxsb2MoeSk6bmV3IEFycmF5KHkpfWZ1bmN0aW9uIGIoeSl7cmV0''@;'; put 'put ''dXJuIGhlP0J1ZmZlci5hbGxvY1Vuc2FmZSh5KTpuZXcgQXJyYXkoeSl9dmFyIEQ9ZnVuY3Rpb24oUCl7cmV0dXJuIGhlP3VlKFAsImJpbmFyeSIpOlAuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihMKXtyZXR1cm4gMjU1JkwuY2hhckNvZGVBdCgwKX0pfTtmdW5jdGlvbiBIKHkpe2lmKHR5cGVv''@;'; put 'put ''ZiBBcnJheUJ1ZmZlcj4idSIpcmV0dXJuIEQoeSk7Zm9yKHZhciBQPW5ldyBBcnJheUJ1ZmZlcih5Lmxlbmd0aCksTD1uZXcgVWludDhBcnJheShQKSxRPTA7USE9eS5sZW5ndGg7KytRKUxbUV09MjU1JnkuY2hhckNvZGVBdChRKTtyZXR1cm4gUH1mdW5jdGlvbiBOKHkpe2lmKEFycmF5Lmlz''@;'; put 'put ''QXJyYXkoeSkpcmV0dXJuIHkubWFwKGZ1bmN0aW9uKFEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFEpfSkuam9pbigiIik7Zm9yKHZhciBQPVtdLEw9MDtMPHkubGVuZ3RoOysrTClQW0xdPVN0cmluZy5mcm9tQ2hhckNvZGUoeVtMXSk7cmV0dXJuIFAuam9pbigiIil9ZnVuY3Rpb24g''@;'; put 'put ''Qyh5KXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtpZih5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIEMobmV3IFVpbnQ4QXJyYXkoeSkpO2Zvcih2YXIgUD1uZXcgQXJyYXkoeS5sZW5ndGgpLEw9MDtMPHkubGVuZ3RoOysr''@;'; put 'put ''TClQW0xdPXlbTF07cmV0dXJuIFB9dmFyIFM9ZnVuY3Rpb24oeSl7dmFyIFA9W107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihMKXtBcnJheS5pc0FycmF5KEwpP1A9UC5jb25jYXQoTCk6KHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmTCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHR5cGVvZiBB''@;'; put 'put ''cnJheUJ1ZmZlcjwidSImJkwgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikmJihQPVAuY29uY2F0KEMoTCkpKX0pLFB9LHY9L1x1MDAwMC9nLHA9L1tcdTAwMDEtXHUwMDA2XS9nLHc9e30sSj1mdW5jdGlvbihQKXtmdW5jdGlvbiBMKEt0KXtmb3IodmFyIGduPSIiLFJuPUt0Lmxlbmd0aC0xO1Ju''@;'; put 'put ''Pj0wOylnbis9S3QuY2hhckF0KFJuLS0pO3JldHVybiBnbn1mdW5jdGlvbiBRKEt0LGduKXtmb3IodmFyIFJuPSIiO1JuLmxlbmd0aDxnbjspUm4rPUt0O3JldHVybiBSbn1mdW5jdGlvbiByZShLdCxnbil7dmFyIFJuPSIiK0t0O3JldHVybiBSbi5sZW5ndGg+PWduP1JuOlEoIjAiLGduLVJu''@;'; put 'put ''Lmxlbmd0aCkrUm59ZnVuY3Rpb24gcGUoS3QsZ24pe3ZhciBSbj0iIitLdDtyZXR1cm4gUm4ubGVuZ3RoPj1nbj9SbjpRKCIgIixnbi1Sbi5sZW5ndGgpK1JufWZ1bmN0aW9uIF9lKEt0LGduKXt2YXIgUm49IiIrS3Q7cmV0dXJuIFJuLmxlbmd0aD49Z24/Um46Um4rUSgiICIsZ24tUm4ubGVu''@;'; put 'put ''Z3RoKX1QLnZlcnNpb249IjEuMjAyMTA3MjYuMSI7dmFyIEhlPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIFZlKEt0LGduKXtyZXR1cm4gS3Q+SGV8fEt0PC1IZT9mdW5jdGlvbiB2ZShLdCxnbil7dmFyIFJuPSIiK01hdGgucm91bmQoS3QpO3JldHVybiBSbi5sZW5ndGg+PWduP1JuOlEoIjAi''@;'; put 'put ''LGduLVJuLmxlbmd0aCkrUm59KEt0LGduKTpmdW5jdGlvbiBTZShLdCxnbil7dmFyIFJuPSIiK0t0O3JldHVybiBSbi5sZW5ndGg+PWduP1JuOlEoIjAiLGduLVJuLmxlbmd0aCkrUm59KE1hdGgucm91bmQoS3QpLGduKX1mdW5jdGlvbiBHZShLdCxnbil7cmV0dXJuIEt0Lmxlbmd0aD49Nyso''@;'; put 'put ''Z249Z258fDApJiYxMDM9PSgzMnxLdC5jaGFyQ29kZUF0KGduKSkmJjEwMT09KDMyfEt0LmNoYXJDb2RlQXQoZ24rMSkpJiYxMTA9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzIpKSYmMTAxPT0oMzJ8S3QuY2hhckNvZGVBdChnbiszKSkmJjExND09KDMyfEt0LmNoYXJDb2RlQXQoZ24rNCkpJiY5''@;'; put 'put ''Nz09KDMyfEt0LmNoYXJDb2RlQXQoZ24rNSkpJiYxMDg9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzYpKX1mdW5jdGlvbiBudChLdCl7Zm9yKHZhciBnbj1bXSxSbj1PYmplY3Qua2V5cyhLdCksV3I9MDtXciE9PVJuLmxlbmd0aDsrK1dyKWduW0t0W1JuW1dyXV1dPVJuW1dyXTtyZXR1cm4gZ259''@;'; put 'put ''dmFyIGR0PVtbIlN1biIsIlN1bmRheSJdLFsiTW9uIiwiTW9uZGF5Il0sWyJUdWUiLCJUdWVzZGF5Il0sWyJXZWQiLCJXZWRuZXNkYXkiXSxbIlRodSIsIlRodXJzZGF5Il0sWyJGcmkiLCJGcmlkYXkiXSxbIlNhdCIsIlNhdHVyZGF5Il1dLEN0PVtbIkoiLCJKYW4iLCJKYW51YXJ5Il0sWyJG''@;'; put 'put ''IiwiRmViIiwiRmVicnVhcnkiXSxbIk0iLCJNYXIiLCJNYXJjaCJdLFsiQSIsIkFwciIsIkFwcmlsIl0sWyJNIiwiTWF5IiwiTWF5Il0sWyJKIiwiSnVuIiwiSnVuZSJdLFsiSiIsIkp1bCIsIkp1bHkiXSxbIkEiLCJBdWciLCJBdWd1c3QiXSxbIlMiLCJTZXAiLCJTZXB0ZW1iZXIiXSxbIk8i''@;'; put 'put ''LCJPY3QiLCJPY3RvYmVyIl0sWyJOIiwiTm92IiwiTm92ZW1iZXIiXSxbIkQiLCJEZWMiLCJEZWNlbWJlciJdXTtmdW5jdGlvbiBjdChLdCl7S3RbMF09IkdlbmVyYWwiLEt0WzFdPSIwIixLdFsyXT0iMC4wMCIsS3RbM109IiMsIyMwIixLdFs0XT0iIywjIzAuMDAiLEt0WzldPSIwJSIsS3Rb''@;'; put 'put ''MTBdPSIwLjAwJSIsS3RbMTFdPSIwLjAwRSswMCIsS3RbMTJdPSIjID8vPyIsS3RbMTNdPSIjID8/Lz8/IixLdFsxNF09Im0vZC95eSIsS3RbMTVdPSJkLW1tbS15eSIsS3RbMTZdPSJkLW1tbSIsS3RbMTddPSJtbW0teXkiLEt0WzE4XT0iaDptbSBBTS9QTSIsS3RbMTldPSJoOm1tOnNzIEFN''@;'; put 'put ''L1BNIixLdFsyMF09Img6bW0iLEt0WzIxXT0iaDptbTpzcyIsS3RbMjJdPSJtL2QveXkgaDptbSIsS3RbMzddPSIjLCMjMCA7KCMsIyMwKSIsS3RbMzhdPSIjLCMjMCA7W1JlZF0oIywjIzApIixLdFszOV09IiMsIyMwLjAwOygjLCMjMC4wMCkiLEt0WzQwXT0iIywjIzAuMDA7W1JlZF0oIywj''@;'; put 'put ''IzAuMDApIixLdFs0NV09Im1tOnNzIixLdFs0Nl09IltoXTptbTpzcyIsS3RbNDddPSJtbXNzLjAiLEt0WzQ4XT0iIyMwLjBFKzAiLEt0WzQ5XT0iQCIsS3RbNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsU24oS3QpfXZh''@;'; put 'put ''ciBidD17fTtjdChidCk7dmFyIEZ0PVtdLEV0PTA7Zm9yKEV0PTU7RXQ8PTg7KytFdClGdFtFdF09MzIrRXQ7Zm9yKEV0PTIzO0V0PD0yNjsrK0V0KUZ0W0V0XT0wO2ZvcihFdD0yNztFdDw9MzE7KytFdClGdFtFdF09MTQ7Zm9yKEV0PTUwO0V0PD01ODsrK0V0KUZ0W0V0XT0xNDtmb3IoRXQ9''@;'; put 'put ''NTk7RXQ8PTYyOysrRXQpRnRbRXRdPUV0LTU4O2ZvcihFdD02NztFdDw9Njg7KytFdClGdFtFdF09RXQtNTg7Zm9yKEV0PTcyO0V0PD03NTsrK0V0KUZ0W0V0XT1FdC01ODtmb3IoRXQ9Njc7RXQ8PTY4OysrRXQpRnRbRXRdPUV0LTU3O2ZvcihFdD03NjtFdDw9Nzg7KytFdClGdFtFdF09RXQt''@;'; put 'put ''NTY7Zm9yKEV0PTc5O0V0PD04MTsrK0V0KUZ0W0V0XT1FdC0zNDt2YXIgVHQ9W107ZnVuY3Rpb24gWnQoS3QsZ24sUm4pe2Zvcih2YXIgV3I9S3Q8MD8tMToxLFhuPUt0KldyLGVpPTAsaXI9MSxyaT0wLG1vPTEsaWk9MCx6aT0wLEpyPU1hdGguZmxvb3IoWG4pO2lpPGduJiYocmk9KEpyPU1h''@;'; put 'put ''dGguZmxvb3IoWG4pKSppcitlaSx6aT1KcippaSttbywhKFhuLUpyPDVlLTgpKTspWG49MS8oWG4tSnIpLGVpPWlyLGlyPXJpLG1vPWlpLGlpPXppO2lmKHppPmduJiYoaWk+Z24/KHppPW1vLHJpPWVpKTooemk9aWkscmk9aXIpKSwhUm4pcmV0dXJuWzAsV3IqcmksemldO3ZhciB3cz1NYXRo''@;'; put 'put ''LmZsb29yKFdyKnJpL3ppKTtyZXR1cm5bd3MsV3Iqcmktd3MqemksemldfWZ1bmN0aW9uIHBuKEt0LGduLFJuKXtpZihLdD4yOTU4NDY1fHxLdDwwKXJldHVybiBudWxsO3ZhciBXcj0wfEt0LFhuPU1hdGguZmxvb3IoODY0MDAqKEt0LVdyKSksZWk9MCxpcj1bXSxyaT17RDpXcixUOlhuLHU6''@;'; put 'put ''ODY0MDAqKEt0LVdyKS1Ybix5OjAsbTowLGQ6MCxIOjAsTTowLFM6MCxxOjB9O2lmKE1hdGguYWJzKHJpLnUpPDFlLTYmJihyaS51PTApLGduJiZnbi5kYXRlMTkwNCYmKFdyKz0xNDYyKSxyaS51Pi45OTk5JiYocmkudT0wLDg2NDAwPT0rK1huJiYocmkuVD1Ybj0wLCsrV3IsKytyaS5EKSks''@;'; put 'put ''NjA9PT1Xcilpcj1Sbj9bMTMxNywxMCwyOV06WzE5MDAsMiwyOV0sZWk9MztlbHNlIGlmKDA9PT1Xcilpcj1Sbj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLGVpPTY7ZWxzZXtXcj42MCYmLS1Xcjt2YXIgbW89bmV3IERhdGUoMTkwMCwwLDEpO21vLnNldERhdGUobW8uZ2V0RGF0ZSgpK1dyLTEp''@;'; put 'put ''LGlyPVttby5nZXRGdWxsWWVhcigpLG1vLmdldE1vbnRoKCkrMSxtby5nZXREYXRlKCldLGVpPW1vLmdldERheSgpLFdyPDYwJiYoZWk9KGVpKzYpJTcpLFJuJiYoZWk9ZnVuY3Rpb24gX28oS3QsZ24pe2duWzBdLT01ODE7dmFyIFJuPUt0LmdldERheSgpO3JldHVybiBLdDw2MCYmKFJuPShS''@;'; put 'put ''bis2KSU3KSxSbn0obW8saXIpKX1yZXR1cm4gcmkueT1pclswXSxyaS5tPWlyWzFdLHJpLmQ9aXJbMl0scmkuUz1YbiU2MCxYbj1NYXRoLmZsb29yKFhuLzYwKSxyaS5NPVhuJTYwLFhuPU1hdGguZmxvb3IoWG4vNjApLHJpLkg9WG4scmkucT1laSxyaX1UdFs1XT1UdFs2M109JyIkIiMsIyMw''@;'; put 'put ''Xyk7XFwoIiQiIywjIzBcXCknLFR0WzZdPVR0WzY0XT0nIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyxUdFs3XT1UdFs2NV09JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLFR0WzhdPVR0WzY2XT0nIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxU''@;'; put 'put ''dFs0MV09J18oKiAjLCMjMF8pO18oKiBcXCgjLCMjMFxcKTtfKCogIi0iXyk7XyhAXyknLFR0WzQyXT0nXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsVHRbNDNdPSdfKCogIywjIzAuMDBfKTtfKCogXFwoIywjIzAuMDBcXCk7XygqICItIj8/''@;'; put 'put ''Xyk7XyhAXyknLFR0WzQ0XT0nXygiJCIqICMsIyMwLjAwXyk7XygiJCIqIFxcKCMsIyMwLjAwXFwpO18oIiQiKiAiLSI/P18pO18oQF8pJyxQLnBhcnNlX2RhdGVfY29kZT1wbjt2YXIgS249bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksdW49S24uZ2V0VGltZSgpLHFuPW5ldyBEYXRlKDE5''@;'; put 'put ''MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiB6bihLdCxnbil7dmFyIFJuPUt0LmdldFRpbWUoKTtyZXR1cm4gZ24/Um4tPTEyNjIzMDRlNTpLdD49cW4mJihSbis9ODY0ZTUpLChSbi0odW4rNmU0KihLdC5nZXRUaW1lem9uZU9mZnNldCgpLUtuLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9''@;'; put 'put ''dmFyIEFuPSIiLGVyPXsiZW4tdXMiOnt5OiJ5IixkOiJkIiwiLCI6IiwiLCIuIjoiLiIsZGF0ZToiXy8ifSwiZGUtZGUiOnt5OiJqIixkOiJ0IiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy4ifSwiaXQtaXQiOnt5OiJ5IixkOiJkIiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy8ifX0sdHI9ZXJb''@;'; put 'put ''QW4udG9Mb3dlckNhc2UoKV18fGVyWyJlbi11cyJdLFpuPW50KHRyKSxOcj0iJCIsb2k9IiIsUXI9IiwiLHVyPSIuIixUbj0iLyI7ZnVuY3Rpb24gU24oS3Qpe3N3aXRjaCgoQW58fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpLdFsyN109IlskLTQwNF1lL20vZCIsS3RbMjhdPSdb''@;'; put 'put ''JC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFsyOV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMwXT0nbSIvImQiLyJ5eScsS3RbMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMyXT0naGgiXHU2NjQyIm1tIlx1NTIw''@;'; put 'put ''NiInLEt0WzMzXT0naGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiIn''@;'; put 'put ''LEt0WzM2XT0iWyQtNDA0XWUvbS9kIixLdFs1MF09IlskLTQwNF1lL20vZCIsS3RbNTFdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1Ml09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzUzXT0nXHU0ZTBhXHU1MzQ4''@;'; put 'put ''L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzU0XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxLdFs1Nl09J1x1NGUwYVx1NTM0''@;'; put 'put ''OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFs1N109IlskLTQwNF1lL20vZCIsS3RbNThdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlInpoLWNuIjpLdFsyN109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3Rb''@;'; put 'put ''MjhdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzI5XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMF09J20iLSJkIi0ieXknLEt0WzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMl09J2giXHU2NWY2Im1tIlx1NTIwNiInLEt0WzMzXT0naCJcdTY1ZjYibW0iXHU1''@;'; put 'put ''MjA2InNzIlx1NzlkMiInLEt0WzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxLdFszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM2XT0neXl5eSJcdTVlNzQibSJcdTY3MDgi''@;'; put 'put ''JyxLdFs1MF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTFdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1M109J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTRdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU1XT0nXHU0ZTBhXHU1''@;'; put 'put ''MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxLdFs1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzU3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1OF09J20iXHU2NzA4ImQiXHU2NWU1Iic7YnJl''@;'; put 'put ''YWs7Y2FzZSJqYS1qcCI6S3RbMjddPSdbJC00MTFdZ2UiLiJtIi4iZCcsS3RbMjhdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFsyOV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMwXT0nbSIvImQiLyJ5eScsS3RbMzFdPSd5''@;'; put 'put ''eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMyXT0naCJcdTY2NDIibW0iXHU1MjA2IicsS3RbMzNdPSdoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbMzRdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzM1XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszNl09''@;'; put 'put ''J1skLTQxMV1nZSIuIm0iLiJkJyxLdFs1MF09J1skLTQxMV1nZSIuIm0iLiJkJyxLdFs1MV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1M109J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTRdPSdbJC00''@;'; put 'put ''MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1NV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTZdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU3XT0nWyQtNDExXWdlIi4ibSIuImQnLEt0WzU4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1''@;'; put 'put ''Iic7YnJlYWs7Y2FzZSJrby1rciI6S3RbMjddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxLdFsyOF09Im1tLWRkIixLdFsyOV09Im1tLWRkIixLdFszMF09Im1tLWRkLXl5IixLdFszMV09J3l5eXkiXHViMTQ0IiBtbSJcdWM2ZDQiIGRkIlx1Yzc3YyInLEt0WzMyXT0n''@;'; put 'put ''aCJcdWMyZGMiIG1tIlx1YmQ4NCInLEt0WzMzXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCIgc3MiXHVjZDA4IicsS3RbMzRdPSJ5eXl5LW1tLWRkIixLdFszNV09Inl5eXktbW0tZGQiLEt0WzM2XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsS3RbNTBdPSd5eXl5Ilx1NWU3''@;'; put 'put ''NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxLdFs1MV09Im1tLWRkIixLdFs1Ml09Inl5eXktbW0tZGQiLEt0WzUzXT0ieXl5eS1tbS1kZCIsS3RbNTRdPSJtbS1kZCIsS3RbNTVdPSJ5eXl5LW1tLWRkIixLdFs1Nl09Inl5eXktbW0tZGQiLEt0WzU3XT0neXl5eSJcdTVlNzQiIG1tIlx1Njcw''@;'; put 'put ''OCIgZGQiXHU2NWU1IicsS3RbNThdPSJtbS1kZCI7YnJlYWs7Y2FzZSJ0aC10aCI6S3RbNTldPScidCIwJyxLdFs2MF09JyJ0IjAuMDAnLEt0WzYxXT0nInQiIywjIzAnLEt0WzYyXT0nInQiIywjIzAuMDAnLEt0WzY3XT0idDAlIixLdFs2OF09InQwLjAwJSIsS3RbNjldPSJ0IyA/Lz8iLEt0''@;'; put 'put ''WzcwXT0idCMgPz8vPz8iLEt0WzcxXT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiJyxLdFs3Ml09J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsS3RbNzNdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQnLEt0Wzc0XT0n''@;'; put 'put ''XHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxLdFs3NV09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOScsS3RbNzZdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0Wzc3XT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiIFx1''@;'; put 'put ''MGUwYSI6Ilx1MGUxOVx1MGUxOScsS3RbNzhdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0Wzc5XT0nW1x1MGUwYV1cdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0WzgwXT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3LjAnLEt0WzgxXT0iZC9tL2JiIn19UC5fZ2Vu''@;'; put 'put ''ZXJhbF9pbnQ9ZnVuY3Rpb24gQ2koS3Qpe3JldHVybiBLdC50b1N0cmluZygxMCl9O3ZhciBCcj1mdW5jdGlvbigpe3ZhciBnbj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKykkLztmdW5jdGlvbiBSbihpaSl7cmV0dXJuLTE9PWlpLmluZGV4T2YoIi4iKT9paTppaS5yZXBsYWNlKGduLCIkMSIp''@;'; put 'put ''fXZhciBXcj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLyxYbj0vKEVbKy1dKShcZCkkLztyZXR1cm4gZnVuY3Rpb24oemkpe3ZhciBKcj1mdW5jdGlvbiBtbyhpaSl7dmFyIEpyLHppPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMoaWkpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIEpy''@;'; put 'put ''PXppPj0tNCYmemk8PS0xP2lpLnRvUHJlY2lzaW9uKDEwK3ppKTpNYXRoLmFicyh6aSk8PTk/ZnVuY3Rpb24gaXIoaWkpe3ZhciB6aT1paTwwPzEyOjExLEpyPVJuKGlpLnRvRml4ZWQoMTIpKTtyZXR1cm4gSnIubGVuZ3RoPD16aXx8KEpyPWlpLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD16''@;'; put 'put ''aT9KcjppaS50b0V4cG9uZW50aWFsKDUpfShpaSk6MTA9PT16aT9paS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gcmkoaWkpe3ZhciB6aT1SbihpaS50b0ZpeGVkKDExKSk7cmV0dXJuIHppLmxlbmd0aD4oaWk8MD8xMjoxMSl8fCIwIj09PXppfHwiLTAiPT09emk/aWkudG9Q''@;'; put 'put ''cmVjaXNpb24oNik6eml9KGlpKSxSbihmdW5jdGlvbiBlaShpaSl7cmV0dXJuLTE9PWlpLmluZGV4T2YoIkUiKT9paTppaS5yZXBsYWNlKFdyLCIkMUUiKS5yZXBsYWNlKFhuLCIkMTAkMiIpfShKci50b1VwcGVyQ2FzZSgpKSl9KHppKTtyZXR1cm4iLCI9PT1RciYmIi4iPT09dXI/SnI6SnIu''@;'; put 'put ''cmVwbGFjZSgvWywuXS9nLGZ1bmN0aW9uKHdzKXtyZXR1cm4iLCI9PXdzP1FyOnVyfSl9fSgpO2Z1bmN0aW9uIGppKEt0LGduKXtzd2l0Y2godHlwZW9mIEt0KXtjYXNlInN0cmluZyI6cmV0dXJuIEt0O2Nhc2UiYm9vbGVhbiI6cmV0dXJuIEt0PyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVy''@;'; put 'put ''IjpyZXR1cm4oMHxLdCk9PT1LdD9LdC50b1N0cmluZygxMCk6QnIoS3QpO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4iIjtjYXNlIm9iamVjdCI6aWYobnVsbD09S3QpcmV0dXJuIiI7aWYoS3QgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBudSgxNCx6bihLdCxnbiYmZ24uZGF0ZTE5MDQpLGduKX10''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGluIEdlbmVyYWwgZm9ybWF0OiAiK0t0KX1QLl9nZW5lcmFsX251bT1CcixQLl9nZW5lcmFsPWppO3ZhciBEaT0iXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5Ii5zcGxp''@;'; put 'put ''dCgiIik7ZnVuY3Rpb24gWW8oS3QsZ24sUm4sV3Ipe3ZhciBtbyxYbj0iIixlaT0wLGlyPTAscmk9Um4ueSxpaT0wO3N3aXRjaChLdCl7Y2FzZSA5ODpyaT1Sbi55KzU0MztjYXNlIDEyMTpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPXJpJTEwMCxpaT0yO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6bW89cmklMWU0LGlpPTR9YnJlYWs7Y2FzZSAxMDk6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Sbi5tLGlpPWduLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIEN0W1JuLm0tMV1bMV07Y2FzZSA1OnJldHVybiBDdFtSbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIEN0''@;'; put 'put ''W1JuLm0tMV1bMl19YnJlYWs7Y2FzZSAxMDA6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Sbi5kLGlpPWduLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIGR0W1JuLnFdWzBdO2RlZmF1bHQ6cmV0dXJuIGR0W1JuLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaChnbi5s''@;'; put 'put ''ZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89MSsoUm4uSCsxMSklMTIsaWk9Z24ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK2dufWJyZWFrO2Nhc2UgNzI6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Sbi5ILGlpPWduLmxlbmd0aDticmVh''@;'; put 'put ''aztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitnbn1icmVhaztjYXNlIDc3OnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89Um4uTSxpaT1nbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgbWludXRlIGZvcm1hdDogIitnbn1icmVhaztjYXNlIDExNTpp''@;'; put 'put ''ZigicyIhPWduJiYic3MiIT1nbiYmIi4wIiE9Z24mJiIuMDAiIT1nbiYmIi4wMDAiIT1nbil0aHJvdyJiYWQgc2Vjb25kIGZvcm1hdDogIitnbjtyZXR1cm4gMCE9PVJuLnV8fCJzIiE9Z24mJiJzcyIhPWduPyhpcj1Xcj49Mj8zPT09V3I/MWUzOjEwMDoxPT09V3I/MTA6MSwoZWk9TWF0aC5y''@;'; put 'put ''b3VuZChpciooUm4uUytSbi51KSkpPj02MCppciYmKGVpPTApLCJzIj09PWduPzA9PT1laT8iMCI6IiIrZWkvaXI6KFhuPXJlKGVpLDIrV3IpLCJzcyI9PT1nbj9Ybi5zdWJzdHIoMCwyKToiLiIrWG4uc3Vic3RyKDIsZ24ubGVuZ3RoLTEpKSk6cmUoUm4uUyxnbi5sZW5ndGgpO2Nhc2UgOTA6''@;'; put 'put ''c3dpdGNoKGduKXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjYXNlIltcdTBlMGFdIjpjYXNlIltcdTBlMGFcdTBlMGFdIjptbz0yNCpSbi5EK1JuLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Y2FzZSJbXHUwZTE5XSI6Y2FzZSJbXHUwZTE5XHUwZTE5XSI6bW89NjAqKDI0KlJuLkQrUm4u''@;'; put 'put ''SCkrUm4uTTticmVhaztjYXNlIltzXSI6Y2FzZSJbc3NdIjpjYXNlIltcdTBlMTddIjpjYXNlIltcdTBlMTdcdTBlMTddIjptbz02MCooNjAqKDI0KlJuLkQrUm4uSCkrUm4uTSkrTWF0aC5yb3VuZChSbi5TK1JuLnUpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFic3RpbWUgZm9ybWF0OiAi''@;'; put 'put ''K2dufWlpPTM9PT1nbi5sZW5ndGg/MToyO2JyZWFrO2Nhc2UgMTAxOm1vPXJpLGlpPTE7YnJlYWs7Y2FzZSAzNjIzOm1vPVJuLmQsaWk9Z24ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNDpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPVJuLm0saWk9Z24ubGVuZ3RoO2JyZWFrO2Nh''@;'; put 'put ''c2UgMzpyZXR1cm4gQ3RbUm4ubS0xXVsxXTtjYXNlIDU6cmV0dXJuIEN0W1JuLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gQ3RbUm4ubS0xXVsyXX1icmVhaztjYXNlIDM2MTE6c3dpdGNoKHJpPVJuLnkrNTQzLGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1yaSUxMDAsaWk9MjticmVhaztk''@;'; put 'put ''ZWZhdWx0Om1vPXJpJTFlNCxpaT00fWJyZWFrO2Nhc2UgMzU5NDptbz1Sbi5ILGlpPWduLmxlbmd0aDticmVhaztjYXNlIDM2MDk6bW89Um4uTSxpaT1nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA3Om1vPVJuLlMsaWk9Z24ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3cgS3QudG9TdHJpbmco''@;'; put 'put ''MTYpfXZhciB6aT1paT4wP3JlKG1vLGlpKToiIjtyZXR1cm4oOTA9PUt0P2duLmNoYXJDb2RlQXQoMSk8MzU4NDpLdDwzNTg0KT96aTp6aS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKEpyKXtyZXR1cm4gRGlbK0pyXX0pfWZ1bmN0aW9uIGxvKEt0KXtpZihLdC5sZW5ndGg8PTMpcmV0dXJu''@;'; put 'put ''IEt0O2Zvcih2YXIgUm49S3QubGVuZ3RoJTMsV3I9S3Quc3Vic3RyKDAsUm4pO1JuIT1LdC5sZW5ndGg7Um4rPTMpV3IrPShXci5sZW5ndGg+MD8iLCI6IiIpK0t0LnN1YnN0cihSbiwzKTtyZXR1cm4gV3J9dmFyIEFvPWZ1bmN0aW9uKCl7dmFyIGduPS8lL2c7ZnVuY3Rpb24gWG4oYW4sVnQp''@;'; put 'put ''e3ZhciBXdCxkbj1hbi5pbmRleE9mKCJFIiktYW4uaW5kZXhPZigiLiIpLTE7aWYoYW4ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVZ0KXJldHVybiIwLjBFKzAiO2lmKFZ0PDApcmV0dXJuIi0iK1huKGFuLC1WdCk7dmFyIERuPWFuLmluZGV4T2YoIi4iKTstMT09PURuJiYoRG49YW4u''@;'; put 'put ''aW5kZXhPZigiRSIpKTt2YXIgbnI9TWF0aC5mbG9vcihNYXRoLmxvZyhWdCkqTWF0aC5MT0cxMEUpJURuO2lmKG5yPDAmJihucis9RG4pLC0xPT09KFd0PShWdC9NYXRoLnBvdygxMCxucikpLnRvUHJlY2lzaW9uKGRuKzErKERuK25yKSVEbikpLmluZGV4T2YoImUiKSl7dmFyIGJyPU1hdGgu''@;'; put 'put ''Zmxvb3IoTWF0aC5sb2coVnQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1XdC5pbmRleE9mKCIuIik/V3Q9V3QuY2hhckF0KDApKyIuIitXdC5zdWJzdHIoMSkrIkUrIisoYnItV3QubGVuZ3RoK25yKTpXdCs9IkUrIisoYnItbnIpOyIwLiI9PT1XdC5zdWJzdHIoMCwyKTspV3Q9KFd0PVd0LmNo''@;'; put 'put ''YXJBdCgwKStXdC5zdWJzdHIoMixEbikrIi4iK1d0LnN1YnN0cigyK0RuKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO1d0PVd0LnJlcGxhY2UoL1wrLS8sIi0iKX1XdD1XdC5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0''@;'; put 'put ''aW9uKGpyLElyLHhpLGxpKXtyZXR1cm4gSXIreGkrbGkuc3Vic3RyKDAsKERuK25yKSVEbikrIi4iK2xpLnN1YnN0cihucikrIkUifSl9ZWxzZSBXdD1WdC50b0V4cG9uZW50aWFsKGRuKTtyZXR1cm4gYW4ubWF0Y2goL0VcKzAwJC8pJiZXdC5tYXRjaCgvZVsrLV1cZCQvKSYmKFd0PVd0LnN1''@;'; put 'put ''YnN0cigwLFd0Lmxlbmd0aC0xKSsiMCIrV3QuY2hhckF0KFd0Lmxlbmd0aC0xKSksYW4ubWF0Y2goL0VcLS8pJiZXdC5tYXRjaCgvZVwrLykmJihXdD1XdC5yZXBsYWNlKC9lXCsvLCJlIikpLFd0LnJlcGxhY2UoImUiLCJFIil9dmFyIGVpPS8jIChcPyspKCA/KVwvKCA/KShcZCspLyxtbz0v''@;'; put 'put ''XiMqMCpcLihbMCNdKykvLGlpPS9cKS4qWzAjXS8semk9L1woIyMjXCkgIyMjXFw/LSMjIyMvO2Z1bmN0aW9uIEpyKGFuKXtmb3IodmFyIFd0LFZ0PSIiLGRuPTA7ZG4hPWFuLmxlbmd0aDsrK2RuKXN3aXRjaChXdD1hbi5jaGFyQ29kZUF0KGRuKSl7Y2FzZSAzNTpicmVhaztjYXNlIDYzOlZ0''@;'; put 'put ''Kz0iICI7YnJlYWs7Y2FzZSA0ODpWdCs9IjAiO2JyZWFrO2RlZmF1bHQ6VnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoV3QpfXJldHVybiBWdH1mdW5jdGlvbiB3cyhhbixWdCl7dmFyIFd0PU1hdGgucG93KDEwLFZ0KTtyZXR1cm4iIitNYXRoLnJvdW5kKGFuKld0KS9XdH1mdW5jdGlvbiB2cyhh''@;'; put 'put ''bixWdCl7aWYoVnQ+MTEpcmV0dXJuIHZzKGFuLDExKSpNYXRoLnBvdygxMCxWdC0xMSk7dmFyIFd0PWFuLU1hdGguZmxvb3IoYW4pLGRuPU1hdGgucG93KDEwLFZ0KTtyZXR1cm4gVnQ8KCIiK01hdGgucm91bmQoV3QqZG4pKS5sZW5ndGg/MDpNYXRoLnJvdW5kKFd0KmRuKX1mdW5jdGlvbiBo''@;'; put 'put ''YShhbixWdCxXdCl7aWYoNDA9PT1hbi5jaGFyQ29kZUF0KDApJiYhVnQubWF0Y2goaWkpKXt2YXIgZG49VnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIFd0Pj0wP2hhKCJuIixkbixXdCk6IigiK2hhKCJuIixkbiwtV3QpKyIp''@;'; put 'put ''In1pZig0ND09PVZ0LmNoYXJDb2RlQXQoVnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBXcihhbixWdCxXdCl7Zm9yKHZhciBkbj1WdC5sZW5ndGgtMTs0ND09PVZ0LmNoYXJDb2RlQXQoZG4tMSk7KS0tZG47cmV0dXJuIEFvKGFuLFZ0LnN1YnN0cigwLGRuKSxXdC9NYXRoLnBvdygxMCwz''@;'; put 'put ''KihWdC5sZW5ndGgtZG4pKSl9KGFuLFZ0LFd0KTtpZigtMSE9PVZ0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gUm4oYW4sVnQsV3Qpe3ZhciBkbj1WdC5yZXBsYWNlKGduLCIiKSxEbj1WdC5sZW5ndGgtZG4ubGVuZ3RoO3JldHVybiBBbyhhbixkbixXdCpNYXRoLnBvdygxMCwyKkRu''@;'; put 'put ''KSkrUSgiJSIsRG4pfShhbixWdCxXdCk7aWYoLTEhPT1WdC5pbmRleE9mKCJFIikpcmV0dXJuIFhuKFZ0LFd0KTtpZigzNj09PVZ0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK2hhKGFuLFZ0LnN1YnN0cigiICI9PVZ0LmNoYXJBdCgxKT8yOjEpLFd0KTt2YXIgRG4sbnIsYnIsanIsSXI9TWF0''@;'; put 'put ''aC5hYnMoV3QpLHhpPVd0PDA/Ii0iOiIiO2lmKFZ0Lm1hdGNoKC9eMDArJC8pKXJldHVybiB4aStWZShJcixWdC5sZW5ndGgpO2lmKFZ0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIjAiPT09KERuPVZlKFd0LDApKSYmKERuPSIiKSxEbi5sZW5ndGg+VnQubGVuZ3RoP0RuOkpyKFZ0LnN1YnN0''@;'; put 'put ''cigwLFZ0Lmxlbmd0aC1Ebi5sZW5ndGgpKStEbjtpZihucj1WdC5tYXRjaChlaSkpcmV0dXJuIGZ1bmN0aW9uIGlyKGFuLFZ0LFd0KXt2YXIgZG49cGFyc2VJbnQoYW5bNF0sMTApLERuPU1hdGgucm91bmQoVnQqZG4pLG5yPU1hdGguZmxvb3IoRG4vZG4pLGJyPURuLW5yKmRuLGpyPWRuO3Jl''@;'; put 'put ''dHVybiBXdCsoMD09PW5yPyIiOiIiK25yKSsiICIrKDA9PT1icj9RKCIgIixhblsxXS5sZW5ndGgrMSthbls0XS5sZW5ndGgpOnBlKGJyLGFuWzFdLmxlbmd0aCkrYW5bMl0rIi8iK2FuWzNdK3JlKGpyLGFuWzRdLmxlbmd0aCkpfShucixJcix4aSk7aWYoVnQubWF0Y2goL14jKzArJC8pKXJl''@;'; put 'put ''dHVybiB4aStWZShJcixWdC5sZW5ndGgtVnQuaW5kZXhPZigiMCIpKTtpZihucj1WdC5tYXRjaChtbykpcmV0dXJuIERuPXdzKFd0LG5yWzFdLmxlbmd0aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrSnIobnJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitKcihuclsxXSkpLnJlcGxhY2Uo''@;'; put 'put ''L1wuKFxkKikkLyxmdW5jdGlvbihVbyx0aSl7cmV0dXJuIi4iK3RpK1EoIjAiLEpyKG5yWzFdKS5sZW5ndGgtdGkubGVuZ3RoKX0pLC0xIT09VnQuaW5kZXhPZigiMC4iKT9EbjpEbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFZ0PVZ0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksbnI9VnQu''@;'; put 'put ''bWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiB4aSt3cyhJcixuclsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLG5yWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYobnI9VnQubWF0Y2go''@;'; put 'put ''L14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIHhpK2xvKFZlKElyLDApKTtpZihucj1WdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gV3Q8MD8iLSIraGEoYW4sVnQsLVd0KTpsbygiIisoTWF0aC5mbG9vcihXdCkrZnVuY3Rpb24gbWwoYW4sVnQpe3JldHVybiBWdDwoIiIr''@;'; put 'put ''TWF0aC5yb3VuZCgoYW4tTWF0aC5mbG9vcihhbikpKk1hdGgucG93KDEwLFZ0KSkpLmxlbmd0aD8xOjB9KFd0LG5yWzFdLmxlbmd0aCkpKSsiLiIrcmUodnMoV3QsbnJbMV0ubGVuZ3RoKSxuclsxXS5sZW5ndGgpO2lmKG5yPVZ0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBoYShhbixWdC5y''@;'; put 'put ''ZXBsYWNlKC9eIywjKiwvLCIiKSxXdCk7aWYobnI9VnQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIERuPUwoaGEoYW4sVnQucmVwbGFjZSgvW1xcLV0vZywiIiksV3QpKSxicj0wLEwoTChWdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0''@;'; put 'put ''aW9uKFVvKXtyZXR1cm4gYnI8RG4ubGVuZ3RoP0RuLmNoYXJBdChicisrKToiMCI9PT1Vbz8iMCI6IiJ9KSk7aWYoVnQubWF0Y2goemkpKXJldHVybiIoIisoRG49aGEoYW4sIiMjIyMjIyMjIyMiLFd0KSkuc3Vic3RyKDAsMykrIikgIitEbi5zdWJzdHIoMywzKSsiLSIrRG4uc3Vic3RyKDYp''@;'; put 'put ''O3ZhciBsaT0iIjtpZihucj1WdC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIGJyPU1hdGgubWluKG5yWzRdLmxlbmd0aCw3KSxqcj1adChJcixNYXRoLnBvdygxMCxiciktMSwhMSksRG49IiIreGksIiAiPT0obGk9QW8oIm4iLG5yWzFdLGpyWzFdKSkuY2hh''@;'; put 'put ''ckF0KGxpLmxlbmd0aC0xKSYmKGxpPWxpLnN1YnN0cigwLGxpLmxlbmd0aC0xKSsiMCIpLERuKz1saStuclsyXSsiLyIrbnJbM10sKGxpPV9lKGpyWzJdLGJyKSkubGVuZ3RoPG5yWzRdLmxlbmd0aCYmKGxpPUpyKG5yWzRdLnN1YnN0cihucls0XS5sZW5ndGgtbGkubGVuZ3RoKSkrbGkpLERu''@;'; put 'put ''Kz1saTtpZihucj1WdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gYnI9TWF0aC5taW4oTWF0aC5tYXgobnJbMV0ubGVuZ3RoLG5yWzRdLmxlbmd0aCksNykseGkrKChqcj1adChJcixNYXRoLnBvdygxMCxiciktMSwhMCkpWzBdfHwoanJbMV0/IiI6IjAi''@;'; put 'put ''KSkrIiAiKyhqclsxXT9wZShqclsxXSxicikrbnJbMl0rIi8iK25yWzNdK19lKGpyWzJdLGJyKTpRKCIgIiwyKmJyKzErbnJbMl0ubGVuZ3RoK25yWzNdLmxlbmd0aCkpO2lmKG5yPVZ0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBEbj1WZShXdCwwKSxWdC5sZW5ndGg8PURuLmxlbmd0aD9E''@;'; put 'put ''bjpKcihWdC5zdWJzdHIoMCxWdC5sZW5ndGgtRG4ubGVuZ3RoKSkrRG47aWYobnI9VnQubWF0Y2goL14oWyMwP10rKVwuKFsjMF0rKSQvKSl7RG49IiIrV3QudG9GaXhlZChNYXRoLm1pbihuclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLGJyPURuLmluZGV4T2Yo''@;'; put 'put ''Ii4iKTt2YXIgQ289VnQuaW5kZXhPZigiLiIpLWJyLHBvPVZ0Lmxlbmd0aC1Ebi5sZW5ndGgtQ287cmV0dXJuIEpyKFZ0LnN1YnN0cigwLENvKStEbitWdC5zdWJzdHIoVnQubGVuZ3RoLXBvKSl9aWYobnI9VnQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBicj12cyhXdCxu''@;'; put 'put ''clsxXS5sZW5ndGgpLFd0PDA/Ii0iK2hhKGFuLFZ0LC1XdCk6bG8oZnVuY3Rpb24gamwoYW4pe3JldHVybiBhbjwyMTQ3NDgzNjQ3JiZhbj4tMjE0NzQ4MzY0OD8iIisoYW4+PTA/MHxhbjphbi0xfDApOiIiK01hdGguZmxvb3IoYW4pfShXdCkpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYi''@;'; put 'put ''KS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oVW8pe3JldHVybiIwMCwiKyhVby5sZW5ndGg8Mz9yZSgwLDMtVW8ubGVuZ3RoKToiIikrVW99KSsiLiIrcmUoYnIsbnJbMV0ubGVuZ3RoKTtzd2l0Y2goVnQpe2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIGhhKGFuLCIjLCMjMC4wMCIsV3QpO2Nh''@;'; put 'put ''c2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBWaT1sbyhWZShJciwwKSk7cmV0dXJuIjAiIT09Vmk/eGkrVmk6IiI7Y2FzZSIjIyMsIyMjLjAwIjpyZXR1cm4gaGEoYW4sIiMjIywjIzAuMDAiLFd0KS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJl''@;'; put 'put ''dHVybiBoYShhbiwiIywjIzAuMDAiLFd0KS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1Z0KyJ8Iil9ZnVuY3Rpb24gcm4oYW4sVnQpe3ZhciBXdCxkbj1hbi5pbmRleE9mKCJFIiktYW4uaW5kZXhPZigiLiIpLTE7aWYoYW4ubWF0''@;'; put 'put ''Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVZ0KXJldHVybiIwLjBFKzAiO2lmKFZ0PDApcmV0dXJuIi0iK3JuKGFuLC1WdCk7dmFyIERuPWFuLmluZGV4T2YoIi4iKTstMT09PURuJiYoRG49YW4uaW5kZXhPZigiRSIpKTt2YXIgbnI9TWF0aC5mbG9vcihNYXRoLmxvZyhWdCkqTWF0aC5MT0cx''@;'; put 'put ''MEUpJURuO2lmKG5yPDAmJihucis9RG4pLCEoV3Q9KFZ0L01hdGgucG93KDEwLG5yKSkudG9QcmVjaXNpb24oZG4rMSsoRG4rbnIpJURuKSkubWF0Y2goL1tFZV0vKSl7dmFyIGJyPU1hdGguZmxvb3IoTWF0aC5sb2coVnQpKk1hdGguTE9HMTBFKTstMT09PVd0LmluZGV4T2YoIi4iKT9XdD1X''@;'; put 'put ''dC5jaGFyQXQoMCkrIi4iK1d0LnN1YnN0cigxKSsiRSsiKyhici1XdC5sZW5ndGgrbnIpOld0Kz0iRSsiKyhici1uciksV3Q9V3QucmVwbGFjZSgvXCstLywiLSIpfVd0PVd0LnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oanIsSXIseGksbGkpe3JldHVybiBJ''@;'; put 'put ''cit4aStsaS5zdWJzdHIoMCwoRG4rbnIpJURuKSsiLiIrbGkuc3Vic3RyKG5yKSsiRSJ9KX1lbHNlIFd0PVZ0LnRvRXhwb25lbnRpYWwoZG4pO3JldHVybiBhbi5tYXRjaCgvRVwrMDAkLykmJld0Lm1hdGNoKC9lWystXVxkJC8pJiYoV3Q9V3Quc3Vic3RyKDAsV3QubGVuZ3RoLTEpKyIwIitX''@;'; put 'put ''dC5jaGFyQXQoV3QubGVuZ3RoLTEpKSxhbi5tYXRjaCgvRVwtLykmJld0Lm1hdGNoKC9lXCsvKSYmKFd0PVd0LnJlcGxhY2UoL2VcKy8sImUiKSksV3QucmVwbGFjZSgiZSIsIkUiKX1mdW5jdGlvbiBfbihhbixWdCxXdCl7aWYoNDA9PT1hbi5jaGFyQ29kZUF0KDApJiYhVnQubWF0Y2goaWkp''@;'; put 'put ''KXt2YXIgZG49VnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIFd0Pj0wP19uKCJuIixkbixXdCk6IigiK19uKCJuIixkbiwtV3QpKyIpIn1pZig0ND09PVZ0LmNoYXJDb2RlQXQoVnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlv''@;'; put 'put ''biB5ZihhbixWdCxXdCl7Zm9yKHZhciBkbj1WdC5sZW5ndGgtMTs0ND09PVZ0LmNoYXJDb2RlQXQoZG4tMSk7KS0tZG47cmV0dXJuIEFvKGFuLFZ0LnN1YnN0cigwLGRuKSxXdC9NYXRoLnBvdygxMCwzKihWdC5sZW5ndGgtZG4pKSl9KGFuLFZ0LFd0KTtpZigtMSE9PVZ0LmluZGV4T2YoIiUi''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gb3AoYW4sVnQsV3Qpe3ZhciBkbj1WdC5yZXBsYWNlKGduLCIiKSxEbj1WdC5sZW5ndGgtZG4ubGVuZ3RoO3JldHVybiBBbyhhbixkbixXdCpNYXRoLnBvdygxMCwyKkRuKSkrUSgiJSIsRG4pfShhbixWdCxXdCk7aWYoLTEhPT1WdC5pbmRleE9mKCJFIikpcmV0''@;'; put 'put ''dXJuIHJuKFZ0LFd0KTtpZigzNj09PVZ0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK19uKGFuLFZ0LnN1YnN0cigiICI9PVZ0LmNoYXJBdCgxKT8yOjEpLFd0KTt2YXIgRG4sbnIsYnIsanIsSXI9TWF0aC5hYnMoV3QpLHhpPVd0PDA/Ii0iOiIiO2lmKFZ0Lm1hdGNoKC9eMDArJC8pKXJldHVy''@;'; put 'put ''biB4aStyZShJcixWdC5sZW5ndGgpO2lmKFZ0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIERuPSIiK1d0LDA9PT1XdCYmKERuPSIiKSxEbi5sZW5ndGg+VnQubGVuZ3RoP0RuOkpyKFZ0LnN1YnN0cigwLFZ0Lmxlbmd0aC1Ebi5sZW5ndGgpKStEbjtpZihucj1WdC5tYXRjaChlaSkpcmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIHJpKGFuLFZ0LFd0KXtyZXR1cm4gV3QrKDA9PT1WdD8iIjoiIitWdCkrUSgiICIsYW5bMV0ubGVuZ3RoKzIrYW5bNF0ubGVuZ3RoKX0obnIsSXIseGkpO2lmKFZ0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4geGkrcmUoSXIsVnQubGVuZ3RoLVZ0LmluZGV4T2YoIjAiKSk7aWYo''@;'; put 'put ''bnI9VnQubWF0Y2gobW8pKXJldHVybiBEbj0oRG49KCIiK1d0KS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitKcihuclsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK0pyKG5yWzFdKSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihVbyx0aSl7cmV0dXJuIi4iK3RpK1EoIjAiLEpyKG5y''@;'; put 'put ''WzFdKS5sZW5ndGgtdGkubGVuZ3RoKX0pLC0xIT09VnQuaW5kZXhPZigiMC4iKT9EbjpEbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFZ0PVZ0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksbnI9VnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiB4aSsoIiIrSXIpLnJlcGxhY2UoL1wu''@;'; put 'put ''KFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLG5yWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYobnI9VnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIHhpK2xvKCIiK0lyKTtpZihucj1WdC5tYXRjaCgvXiMsIyMw''@;'; put 'put ''XC4oWyMwXSowKSQvKSlyZXR1cm4gV3Q8MD8iLSIrX24oYW4sVnQsLVd0KTpsbygiIitXdCkrIi4iK1EoIjAiLG5yWzFdLmxlbmd0aCk7aWYobnI9VnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIF9uKGFuLFZ0LnJlcGxhY2UoL14jLCMqLC8sIiIpLFd0KTtpZihucj1WdC5tYXRjaCgvXihb''@;'; put 'put ''MCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gRG49TChfbihhbixWdC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxXdCkpLGJyPTAsTChMKFZ0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVW8pe3JldHVybiBicjxEbi5sZW5ndGg/RG4uY2hhckF0KGJyKysp''@;'; put 'put ''OiIwIj09PVVvPyIwIjoiIn0pKTtpZihWdC5tYXRjaCh6aSkpcmV0dXJuIigiKyhEbj1fbihhbiwiIyMjIyMjIyMjIyIsV3QpKS5zdWJzdHIoMCwzKSsiKSAiK0RuLnN1YnN0cigzLDMpKyItIitEbi5zdWJzdHIoNik7dmFyIGxpPSIiO2lmKG5yPVZ0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8o''@;'; put 'put ''ID8pKFsjMD9dKykvKSlyZXR1cm4gYnI9TWF0aC5taW4obnJbNF0ubGVuZ3RoLDcpLGpyPVp0KElyLE1hdGgucG93KDEwLGJyKS0xLCExKSxEbj0iIit4aSwiICI9PShsaT1BbygibiIsbnJbMV0sanJbMV0pKS5jaGFyQXQobGkubGVuZ3RoLTEpJiYobGk9bGkuc3Vic3RyKDAsbGkubGVuZ3Ro''@;'; put 'put ''LTEpKyIwIiksRG4rPWxpK25yWzJdKyIvIituclszXSwobGk9X2UoanJbMl0sYnIpKS5sZW5ndGg8bnJbNF0ubGVuZ3RoJiYobGk9SnIobnJbNF0uc3Vic3RyKG5yWzRdLmxlbmd0aC1saS5sZW5ndGgpKStsaSksRG4rPWxpO2lmKG5yPVZ0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPyko''@;'; put 'put ''WyMwP10rKS8pKXJldHVybiBicj1NYXRoLm1pbihNYXRoLm1heChuclsxXS5sZW5ndGgsbnJbNF0ubGVuZ3RoKSw3KSx4aSsoKGpyPVp0KElyLE1hdGgucG93KDEwLGJyKS0xLCEwKSlbMF18fChqclsxXT8iIjoiMCIpKSsiICIrKGpyWzFdP3BlKGpyWzFdLGJyKStuclsyXSsiLyIrbnJbM10r''@;'; put 'put ''X2UoanJbMl0sYnIpOlEoIiAiLDIqYnIrMStuclsyXS5sZW5ndGgrbnJbM10ubGVuZ3RoKSk7aWYobnI9VnQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIFZ0Lmxlbmd0aDw9KERuPSIiK1d0KS5sZW5ndGg/RG46SnIoVnQuc3Vic3RyKDAsVnQubGVuZ3RoLURuLmxlbmd0aCkpK0RuO2lmKG5y''@;'; put 'put ''PVZ0Lm1hdGNoKC9eKFsjMF0rKVwuKFsjMF0rKSQvKSl7RG49IiIrV3QudG9GaXhlZChNYXRoLm1pbihuclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLGJyPURuLmluZGV4T2YoIi4iKTt2YXIgQ289VnQuaW5kZXhPZigiLiIpLWJyLHBvPVZ0Lmxlbmd0aC1Ebi5s''@;'; put 'put ''ZW5ndGgtQ287cmV0dXJuIEpyKFZ0LnN1YnN0cigwLENvKStEbitWdC5zdWJzdHIoVnQubGVuZ3RoLXBvKSl9aWYobnI9VnQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBXdDwwPyItIitfbihhbixWdCwtV3QpOmxvKCIiK1d0KS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQm''@;'; put 'put ''IikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKFVvKXtyZXR1cm4iMDAsIisoVW8ubGVuZ3RoPDM/cmUoMCwzLVVvLmxlbmd0aCk6IiIpK1VvfSkrIi4iK3JlKDAsbnJbMV0ubGVuZ3RoKTt2YXIgVmk9bG8oIiIrSXIpO3N3aXRjaChWdCl7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2Fz''@;'; put 'put ''ZSIjLCMjIyI6cmV0dXJuIjAiIT09Vmk/eGkrVmk6IiI7Y2FzZSIjLCMwMCI6cmV0dXJuIjAwIiE9PShWaT1yZShWaSwyKSk/eGkrVmk6IiI7ZGVmYXVsdDppZihWdC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIF9uKGFuLFZ0LnNsaWNlKDAsVnQubGFzdEluZGV4T2YoIi4iKSksV3QpK0py''@;'; put 'put ''KFZ0LnNsaWNlKFZ0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitWdCsifCIpfXJldHVybiBmdW5jdGlvbihWdCxXdCxkbil7cmV0dXJuIjAsMCI9PVd0JiYoV3Q9IiMsIzAwIiksKDB8ZG4pPT09ZG4/X24oVnQsV3QsZG4pOmhhKFZ0''@;'; put 'put ''LFd0LGRuKX19KCk7ZnVuY3Rpb24geG8oS3Qpe2Zvcih2YXIgZ249W10sUm49ITEsV3I9MCxYbj0wO1dyPEt0Lmxlbmd0aDsrK1dyKXN3aXRjaChLdC5jaGFyQ29kZUF0KFdyKSl7Y2FzZSAzNDpSbj0hUm47YnJlYWs7Y2FzZSA5NTpjYXNlIDQyOmNhc2UgOTI6KytXcjticmVhaztjYXNlIDU5''@;'; put 'put ''OmduW2duLmxlbmd0aF09S3Quc3Vic3RyKFhuLFdyLVhuKSxYbj1XcisxfWlmKGduW2duLmxlbmd0aF09S3Quc3Vic3RyKFhuKSwhMD09PVJuKXRocm93IG5ldyBFcnJvcigiRm9ybWF0IHwiK0t0KyJ8IHVudGVybWluYXRlZCBzdHJpbmcgIik7cmV0dXJuIGdufVAuX3NwbGl0PXhvO3ZhciBo''@;'; put 'put ''aT0vXFtbSGhNbVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gdGEoS3Qpe2Zvcih2YXIgZ249MCxSbj0iIixXcj0iIjtnbjxLdC5sZW5ndGg7KXN3aXRjaChSbj1LdC5jaGFyQXQoZ24pKXtjYXNlIkciOkdlKEt0LGduKSYmKGduKz02KSxnbisrO2JyZWFrO2Nhc2UnIic6Zm9y''@;'; put 'put ''KDszNCE9PUt0LmNoYXJDb2RlQXQoKytnbikmJmduPEt0Lmxlbmd0aDspOysrZ247YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpnbis9MjticmVhaztjYXNlIkAiOisrZ247YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PUt0LmNoYXJBdChnbisxKXx8IjIiPT09S3QuY2hhckF0KGduKzEp''@;'; put 'put ''KXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PUt0''@;'; put 'put ''LnN1YnN0cihnbiwzKS50b1VwcGVyQ2FzZSgpfHwiQU0vUE0iPT09S3Quc3Vic3RyKGduLDUpLnRvVXBwZXJDYXNlKCl8fCJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PUt0LnN1YnN0cihnbiw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrZ247YnJlYWs7Y2FzZSJbIjpmb3IoV3I9''@;'; put 'put ''Um47Il0iIT09S3QuY2hhckF0KGduKyspJiZnbjxLdC5sZW5ndGg7KVdyKz1LdC5jaGFyQXQoZ24pO2lmKFdyLm1hdGNoKGhpKSlyZXR1cm4hMDticmVhaztjYXNlIi4iOmNhc2UiMCI6Y2FzZSIjIjpmb3IoO2duPEt0Lmxlbmd0aCYmKCIwIz8uLEUrLSUiLmluZGV4T2YoUm49S3QuY2hhckF0''@;'; put 'put ''KCsrZ24pKT4tMXx8IlxcIj09Um4mJiItIj09S3QuY2hhckF0KGduKzEpJiYiMCMiLmluZGV4T2YoS3QuY2hhckF0KGduKzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7S3QuY2hhckF0KCsrZ24pPT09Um47KTticmVhaztjYXNlIioiOisrZ24sKCIgIj09S3QuY2hhckF0KGduKXx8Iioi''@;'; put 'put ''PT1LdC5jaGFyQXQoZ24pKSYmKytnbjticmVhaztjYXNlIigiOmNhc2UiKSI6KytnbjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoO2duPEt0Lmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4''@;'; put 'put ''T2YoS3QuY2hhckF0KCsrZ24pKT4tMTspO2JyZWFrO2RlZmF1bHQ6Kytnbn1yZXR1cm4hMX1mdW5jdGlvbiBNbihLdCxnbixSbixXcil7Zm9yKHZhciBpaSx6aSxKcixYbj1bXSxlaT0iIixpcj0wLHJpPSIiLG1vPSJ0Iix3cz0iSCI7aXI8S3QubGVuZ3RoOylzd2l0Y2gocmk9S3QuY2hhckF0''@;'; put 'put ''KGlyKSl7Y2FzZSJHIjppZighR2UoS3QsaXIpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK3JpKyIgaW4gIitLdCk7WG5bWG4ubGVuZ3RoXT17dDoiRyIsdjoiR2VuZXJhbCJ9LGlyKz03O2JyZWFrO2Nhc2UnIic6Zm9yKGVpPSIiOzM0IT09KEpyPUt0LmNoYXJD''@;'; put 'put ''b2RlQXQoKytpcikpJiZpcjxLdC5sZW5ndGg7KWVpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEpyKTtYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OmVpfSwrK2lyO2JyZWFrO2Nhc2UiXFwiOnZhciB2cz1LdC5jaGFyQXQoKytpcik7WG5bWG4ubGVuZ3RoXT17dDoiKCI9PT12c3x8IikiPT09dnM/dnM6''@;'; put 'put ''InQiLHY6dnN9LCsraXI7YnJlYWs7Y2FzZSJfIjpYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OiIgIn0saXIrPTI7YnJlYWs7Y2FzZSJAIjpYbltYbi5sZW5ndGhdPXt0OiJUIix2OmdufSwrK2lyO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1LdC5jaGFyQXQoaXIrMSl8fCIyIj09PUt0''@;'; put 'put ''LmNoYXJBdChpcisxKSl7aWYobnVsbD09aWkmJm51bGw9PShpaT1wbihnbixSbiwiMiI9PT1LdC5jaGFyQXQoaXIrMSkpKSlyZXR1cm4iIjtYbltYbi5sZW5ndGhdPXt0OiJYIix2Okt0LnN1YnN0cihpciwyKX0sbW89cmksaXIrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2Fz''@;'; put 'put ''ZSJIIjpjYXNlIlMiOmNhc2UiRSI6cmk9cmkudG9Mb3dlckNhc2UoKTtjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2UiXHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2Fz''@;'; put 'put ''ZSJcdTBlMTciOmlmKGduPDB8fG51bGw9PWlpJiZudWxsPT0oaWk9cG4oZ24sUm4pKSlyZXR1cm4iIjtmb3IoZWk9cmk7KytpcjxLdC5sZW5ndGgmJkt0LmNoYXJBdChpcikudG9Mb3dlckNhc2UoKT09PXJpOyllaSs9cmk7Im0iPT09cmkmJiJoIj09PW1vLnRvTG93ZXJDYXNlKCkmJihyaT0i''@;'; put 'put ''TSIpLCJoIj09PXJpJiYocmk9d3MpLFhuW1huLmxlbmd0aF09e3Q6cmksdjplaX0sbW89cmk7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjp2YXIgamw9e3Q6cmksdjpyaX07aWYobnVsbD09aWkmJihpaT1wbihnbixSbikpLCJBL1AiPT09S3Quc3Vic3RyKGlyLDMpLnRvVXBw''@;'; put 'put ''ZXJDYXNlKCk/KG51bGwhPWlpJiYoamwudj1paS5IPj0xMj8iUCI6IkEiKSxqbC50PSJUIix3cz0iaCIsaXIrPTMpOiJBTS9QTSI9PT1LdC5zdWJzdHIoaXIsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9aWkmJihqbC52PWlpLkg+PTEyPyJQTSI6IkFNIiksamwudD0iVCIsaXIrPTUsd3M9Imgi''@;'; put 'put ''KToiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1LdC5zdWJzdHIoaXIsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9aWkmJihqbC52PWlpLkg+PTEyPyJcdTRlMGJcdTUzNDgiOiJcdTRlMGFcdTUzNDgiKSxqbC50PSJUIixpcis9NSx3cz0iaCIpOihqbC50PSJ0IiwrK2lyKSxudWxsPT1p''@;'; put 'put ''aSYmIlQiPT09amwudClyZXR1cm4iIjtYbltYbi5sZW5ndGhdPWpsLG1vPXJpO2JyZWFrO2Nhc2UiWyI6Zm9yKGVpPXJpOyJdIiE9PUt0LmNoYXJBdChpcisrKSYmaXI8S3QubGVuZ3RoOyllaSs9S3QuY2hhckF0KGlyKTtpZigiXSIhPT1laS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVk''@;'; put 'put ''ICJbIiBibG9jazogfCcrZWkrInwiO2lmKGVpLm1hdGNoKGhpKSl7aWYobnVsbD09aWkmJm51bGw9PShpaT1wbihnbixSbikpKXJldHVybiIiO1huW1huLmxlbmd0aF09e3Q6IloiLHY6ZWkudG9Mb3dlckNhc2UoKX0sbW89ZWkuY2hhckF0KDEpfWVsc2UgZWkuaW5kZXhPZigiJCIpPi0xJiYo''@;'; put 'put ''ZWk9KGVpLm1hdGNoKC9cJChbXi1cW1xdXSopLyl8fFtdKVsxXXx8IiQiLHRhKEt0KXx8KFhuW1huLmxlbmd0aF09e3Q6InQiLHY6ZWl9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1paSl7Zm9yKGVpPXJpOysraXI8S3QubGVuZ3RoJiYiMCI9PT0ocmk9S3QuY2hhckF0KGlyKSk7KWVpKz1y''@;'; put 'put ''aTtYbltYbi5sZW5ndGhdPXt0OiJzIix2OmVpfTticmVha31jYXNlIjAiOmNhc2UiIyI6Zm9yKGVpPXJpOysraXI8S3QubGVuZ3RoJiYiMCM/LixFKy0lIi5pbmRleE9mKHJpPUt0LmNoYXJBdChpcikpPi0xOyllaSs9cmk7WG5bWG4ubGVuZ3RoXT17dDoibiIsdjplaX07YnJlYWs7Y2FzZSI/''@;'; put 'put ''Ijpmb3IoZWk9cmk7S3QuY2hhckF0KCsraXIpPT09cmk7KWVpKz1yaTtYbltYbi5sZW5ndGhdPXt0OnJpLHY6ZWl9LG1vPXJpO2JyZWFrO2Nhc2UiKiI6KytpciwoIiAiPT1LdC5jaGFyQXQoaXIpfHwiKiI9PUt0LmNoYXJBdChpcikpJiYrK2lyO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjpYbltY''@;'; put 'put ''bi5sZW5ndGhdPXt0OjE9PT1Xcj8idCI6cmksdjpyaX0sKytpcjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoZWk9cmk7aXI8S3QubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihLdC5j''@;'; put 'put ''aGFyQXQoKytpcikpPi0xOyllaSs9S3QuY2hhckF0KGlyKTtYbltYbi5sZW5ndGhdPXt0OiJEIix2OmVpfTticmVhaztjYXNlIiAiOlhuW1huLmxlbmd0aF09e3Q6cmksdjpyaX0sKytpcjticmVhaztjYXNlIiQiOlhuW1huLmxlbmd0aF09e3Q6InQiLHY6TnJ9LCsraXI7YnJlYWs7Y2FzZSIv''@;'; put 'put ''IjpYbltYbi5sZW5ndGhdPVhuLmxlbmd0aD4wJiZ0YShYbltYbi5sZW5ndGgtMV0udik/e3Q6InQiLHY6VG59Ont0OiJ0Iix2OiIvIn0sKytpcjticmVhaztkZWZhdWx0OmlmKC0xPT09IiwkLSsvKCk6IV4mJ357fTw+PVx1MjBhY2FjZmlqa2xvcHFydHV2d3h6UCIuaW5kZXhPZihyaSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrcmkrIiBpbiAiK0t0KTtYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OnJpfSwrK2lyfXZhciBvcCxoYT0wLHlmPTA7Zm9yKGlyPVhuLmxlbmd0aC0xLG1vPSJ0Ijtpcj49MDstLWlyKXN3aXRjaChYbltpcl0udCl7Y2FzZSJoIjpj''@;'; put 'put ''YXNlIkgiOlhuW2lyXS50PXdzLG1vPSJoIixoYTwxJiYoaGE9MSk7YnJlYWs7Y2FzZSJzIjoob3A9WG5baXJdLnYubWF0Y2goL1wuMCskLykpJiYoeWY9TWF0aC5tYXgoeWYsb3BbMF0ubGVuZ3RoLTEpKSxoYTwzJiYoaGE9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjptbz1Y''@;'; put 'put ''bltpcl0udDticmVhaztjYXNlIm0iOiJzIj09PW1vJiYoWG5baXJdLnQ9Ik0iLGhhPDImJihoYT0yKSk7YnJlYWs7Y2FzZSJYIjpicmVhaztjYXNlIloiOmhhPDEmJlhuW2lyXS52Lm1hdGNoKC9bSGhdLykmJihoYT0xKSxoYTwyJiZYbltpcl0udi5tYXRjaCgvW01tXS8pJiYoaGE9MiksaGE8''@;'; put 'put ''MyYmWG5baXJdLnYubWF0Y2goL1tTc10vKSYmKGhhPTMpfXN3aXRjaChoYSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTppaS51Pj0uNSYmKGlpLnU9MCwrK2lpLlMpLGlpLlM+PTYwJiYoaWkuUz0wLCsraWkuTSksaWkuTT49NjAmJihpaS5NPTAsKytpaS5IKTticmVhaztjYXNlIDI6aWkudT49LjUm''@;'; put 'put ''JihpaS51PTAsKytpaS5TKSxpaS5TPj02MCYmKGlpLlM9MCwrK2lpLk0pfXZhciBfbixybj0iIjtmb3IoaXI9MDtpcjxYbi5sZW5ndGg7Kytpcilzd2l0Y2goWG5baXJdLnQpe2Nhc2UidCI6Y2FzZSJUIjpjYXNlIiAiOmNhc2UiRCI6YnJlYWs7Y2FzZSJYIjpYbltpcl0udj0iIixYbltpcl0u''@;'; put 'put ''dD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUw''@;'; put 'put ''ZTE3IjpYbltpcl0udj1ZbyhYbltpcl0udC5jaGFyQ29kZUF0KDApLFhuW2lyXS52LGlpLHlmKSxYbltpcl0udD0idCI7YnJlYWs7Y2FzZSJuIjpjYXNlIj8iOmZvcihfbj1pcisxO251bGwhPVhuW19uXSYmKCI/Ij09PShyaT1Ybltfbl0udCl8fCJEIj09PXJpfHwoIiAiPT09cml8fCJ0Ij09''@;'; put 'put ''PXJpKSYmbnVsbCE9WG5bX24rMV0mJigiPyI9PT1YbltfbisxXS50fHwidCI9PT1YbltfbisxXS50JiYiLyI9PT1YbltfbisxXS52KXx8IigiPT09WG5baXJdLnQmJigiICI9PT1yaXx8Im4iPT09cml8fCIpIj09PXJpKXx8InQiPT09cmkmJigiLyI9PT1Ybltfbl0udnx8IiAiPT09WG5bX25d''@;'; put 'put ''LnYmJm51bGwhPVhuW19uKzFdJiYiPyI9PVhuW19uKzFdLnQpKTspWG5baXJdLnYrPVhuW19uXS52LFhuW19uXT17djoiIix0OiI7In0sKytfbjtybis9WG5baXJdLnYsaXI9X24tMTticmVhaztjYXNlIkciOlhuW2lyXS50PSJ0IixYbltpcl0udj1qaShnbixSbil9dmFyIFZ0LFd0LGFuPSIi''@;'; put 'put ''O2lmKHJuLmxlbmd0aD4wKXs0MD09cm4uY2hhckNvZGVBdCgwKT8oVnQ9Z248MCYmNDU9PT1ybi5jaGFyQ29kZUF0KDApPy1nbjpnbixXdD1BbygibiIscm4sVnQpKTooV3Q9QW8oIm4iLHJuLFZ0PWduPDAmJldyPjE/LWduOmduKSxWdDwwJiZYblswXSYmInQiPT1YblswXS50JiYoV3Q9V3Qu''@;'; put 'put ''c3Vic3RyKDEpLFhuWzBdLnY9Ii0iK1huWzBdLnYpKSxfbj0oV3Q9V3QucmVwbGFjZSgvWyxcLl0vZyxmdW5jdGlvbihicil7cmV0dXJuIi4iPT1icj91cjpRcn0pKS5sZW5ndGgtMTt2YXIgZG49WG4ubGVuZ3RoO2Zvcihpcj0wO2lyPFhuLmxlbmd0aDsrK2lyKWlmKG51bGwhPVhuW2lyXSYm''@;'; put 'put ''InQiIT1Ybltpcl0udCYmWG5baXJdLnYuaW5kZXhPZigiLiIpPi0xKXtkbj1pcjticmVha312YXIgRG49WG4ubGVuZ3RoO2lmKGRuPT09WG4ubGVuZ3RoJiYtMT09PVd0LmluZGV4T2YoIkUiKSl7Zm9yKGlyPVhuLmxlbmd0aC0xO2lyPj0wOy0taXIpbnVsbD09WG5baXJdfHwtMT09PSJuPyIu''@;'; put 'put ''aW5kZXhPZihYbltpcl0udCl8fChfbj49WG5baXJdLnYubGVuZ3RoLTE/WG5baXJdLnY9V3Quc3Vic3RyKDErKF9uLT1Ybltpcl0udi5sZW5ndGgpLFhuW2lyXS52Lmxlbmd0aCk6X248MD9Ybltpcl0udj0iIjooWG5baXJdLnY9V3Quc3Vic3RyKDAsX24rMSksX249LTEpLFhuW2lyXS50PSJ0''@;'; put 'put ''IixEbj1pcik7X24+PTAmJkRuPFhuLmxlbmd0aCYmKFhuW0RuXS52PVd0LnN1YnN0cigwLF9uKzEpK1huW0RuXS52KX1lbHNlIGlmKGRuIT09WG4ubGVuZ3RoJiYtMT09PVd0LmluZGV4T2YoIkUiKSl7Zm9yKF9uPVd0LmluZGV4T2YodXIpLTEsaXI9ZG47aXI+PTA7LS1pcilpZihudWxsIT1Y''@;'; put 'put ''bltpcl0mJi0xIT09Im4/Ii5pbmRleE9mKFhuW2lyXS50KSl7Zm9yKHppPVhuW2lyXS52LmluZGV4T2YoIi4iKT4tMSYmaXI9PT1kbj9Ybltpcl0udi5pbmRleE9mKCIuIiktMTpYbltpcl0udi5sZW5ndGgtMSxhbj1Ybltpcl0udi5zdWJzdHIoemkrMSk7emk+PTA7LS16aSlfbj49MCYmKCIw''@;'; put 'put ''Ij09PVhuW2lyXS52LmNoYXJBdCh6aSl8fCIjIj09PVhuW2lyXS52LmNoYXJBdCh6aSkpJiYoYW49V3QuY2hhckF0KF9uLS0pK2FuKTtYbltpcl0udj1hbixYbltpcl0udD0idCIsRG49aXJ9Zm9yKF9uPj0wJiZEbjxYbi5sZW5ndGgmJihYbltEbl0udj1XdC5zdWJzdHIoMCxfbisxKStYbltE''@;'; put 'put ''bl0udiksX249V3QuaW5kZXhPZih1cikrMSxpcj1kbjtpcjxYbi5sZW5ndGg7KytpcilpZihudWxsIT1Ybltpcl0mJigtMSE9PSJuPygiLmluZGV4T2YoWG5baXJdLnQpfHxpcj09PWRuKSl7Zm9yKHppPVhuW2lyXS52LmluZGV4T2YodXIpPi0xJiZpcj09PWRuP1huW2lyXS52LmluZGV4T2Yo''@;'; put 'put ''dXIpKzE6MCxhbj1Ybltpcl0udi5zdWJzdHIoMCx6aSk7emk8WG5baXJdLnYubGVuZ3RoOysremkpX248V3QubGVuZ3RoJiYoYW4rPVd0LmNoYXJBdChfbisrKSk7WG5baXJdLnY9YW4sWG5baXJdLnQ9InQiLERuPWlyfX19Zm9yKGlyPTA7aXI8WG4ubGVuZ3RoOysraXIpbnVsbCE9WG5baXJd''@;'; put 'put ''JiYibj8iLmluZGV4T2YoWG5baXJdLnQpPi0xJiYoWG5baXJdLnY9QW8oWG5baXJdLnQsWG5baXJdLnYsVnQ9V3I+MSYmZ248MCYmaXI+MCYmIi0iPT09WG5baXItMV0udj8tZ246Z24pLnJlcGxhY2UoL1wuL2csdXIpLnJlcGxhY2UoLywvLFFyKSxYbltpcl0udD0idCIpO3ZhciBucj0iIjtm''@;'; put 'put ''b3IoaXI9MDtpciE9PVhuLmxlbmd0aDsrK2lyKW51bGwhPVhuW2lyXSYmKG5yKz1Ybltpcl0udik7cmV0dXJuIG5yfVAuaXNfZGF0ZT10YSxQLl9ldmFsPU1uO3ZhciB5cz0vXFtbPTw+XS8sRWw9L1xbKD18Pls9XT98PFs+PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIHNsKEt0''@;'; put 'put ''LGduKXtpZihudWxsPT1nbilyZXR1cm4hMTt2YXIgUm49cGFyc2VGbG9hdChnblsyXSk7c3dpdGNoKGduWzFdKXtjYXNlIj0iOmlmKEt0PT1SbilyZXR1cm4hMDticmVhaztjYXNlIj4iOmlmKEt0PlJuKXJldHVybiEwO2JyZWFrO2Nhc2UiPCI6aWYoS3Q8Um4pcmV0dXJuITA7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8PiI6aWYoS3QhPVJuKXJldHVybiEwO2JyZWFrO2Nhc2UiPj0iOmlmKEt0Pj1SbilyZXR1cm4hMDticmVhaztjYXNlIjw9IjppZihLdDw9Um4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gbnUoS3QsZ24sUm4pe251bGw9PVJuJiYoUm49e30pO3ZhciBXcj0iIjtzd2l0Y2godHlwZW9m''@;'; put 'put ''IEt0KXtjYXNlInN0cmluZyI6V3I9Im0vZC95eSI9PUt0JiZSbi5kYXRlTkY/Um4uZGF0ZU5GOkt0O2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oV3I9MTQ9PUt0JiZSbi5kYXRlTkY/Um4uZGF0ZU5GOihudWxsIT1Sbi50YWJsZT9Sbi50YWJsZTpidClbS3RdKSYmKFdyPVJuLnRhYmxlJiZS''@;'; put 'put ''bi50YWJsZVtGdFtLdF1dfHxidFtGdFtLdF1dKSxudWxsPT1XciYmKFdyPVR0W0t0XXx8IkdlbmVyYWwiKX1pZihHZShXciwwKSlyZXR1cm4gamkoZ24sUm4pO2duIGluc3RhbmNlb2YgRGF0ZSYmKGduPXpuKGduLFJuLmRhdGUxOTA0KSk7dmFyIFhuPWZ1bmN0aW9uIGdsKEt0LGduKXt2YXIg''@;'; put 'put ''Um49eG8oS3QpLFdyPVJuLmxlbmd0aCxYbj1SbltXci0xXS5pbmRleE9mKCJAIik7aWYoV3I8NCYmWG4+LTEmJi0tV3IsUm4ubGVuZ3RoPjQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZmluZCByaWdodCBmb3JtYXQgZm9yIHwiK1JuLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBl''@;'; put 'put ''b2YgZ24pcmV0dXJuWzQsND09PVJuLmxlbmd0aHx8WG4+LTE/Um5bUm4ubGVuZ3RoLTFdOiJAIl07c3dpdGNoKFJuLmxlbmd0aCl7Y2FzZSAxOlJuPVhuPi0xP1siR2VuZXJhbCIsIkdlbmVyYWwiLCJHZW5lcmFsIixSblswXV06W1JuWzBdLFJuWzBdLFJuWzBdLCJAIl07YnJlYWs7Y2FzZSAy''@;'; put 'put ''OlJuPVhuPi0xP1tSblswXSxSblswXSxSblswXSxSblsxXV06W1JuWzBdLFJuWzFdLFJuWzBdLCJAIl07YnJlYWs7Y2FzZSAzOlJuPVhuPi0xP1tSblswXSxSblsxXSxSblswXSxSblsyXV06W1JuWzBdLFJuWzFdLFJuWzJdLCJAIl19dmFyIGVpPWduPjA/Um5bMF06Z248MD9SblsxXTpSblsy''@;'; put 'put ''XTtpZigtMT09PVJuWzBdLmluZGV4T2YoIlsiKSYmLTE9PT1SblsxXS5pbmRleE9mKCJbIikpcmV0dXJuW1dyLGVpXTtpZihudWxsIT1SblswXS5tYXRjaCh5cyl8fG51bGwhPVJuWzFdLm1hdGNoKHlzKSl7dmFyIGlyPVJuWzBdLm1hdGNoKEVsKSxyaT1SblsxXS5tYXRjaChFbCk7cmV0dXJu''@;'; put 'put ''IHNsKGduLGlyKT9bV3IsUm5bMF1dOnNsKGduLHJpKT9bV3IsUm5bMV1dOltXcixSbltudWxsIT1pciYmbnVsbCE9cmk/MjoxXV19cmV0dXJuW1dyLGVpXX0oV3IsZ24pO2lmKEdlKFhuWzFdKSlyZXR1cm4gamkoZ24sUm4pO2lmKCEwPT09Z24pZ249IlRSVUUiO2Vsc2UgaWYoITE9PT1nbiln''@;'; put 'put ''bj0iRkFMU0UiO2Vsc2UgaWYoIiI9PT1nbnx8bnVsbD09Z24pcmV0dXJuIiI7cmV0dXJuIE1uKFhuWzFdLGduLFJuLFhuWzBdKX1mdW5jdGlvbiB0bChLdCxnbil7aWYoIm51bWJlciIhPXR5cGVvZiBnbil7Z249K2dufHwtMTtmb3IodmFyIFJuPTA7Um48MzkyOysrUm4paWYobnVsbCE9YnRb''@;'; put 'put ''Um5dKXtpZihidFtSbl09PUt0KXtnbj1SbjticmVha319ZWxzZSBnbjwwJiYoZ249Um4pO2duPDAmJihnbj0zOTEpfXJldHVybiBidFtnbl09S3QsZ259UC5sb2FkPXRsLFAuX3RhYmxlPWJ0LFAuZ2V0X3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGJ0fSxQLmxvYWRfdGFibGU9ZnVuY3Rpb24o''@;'; put 'put ''Z24pe2Zvcih2YXIgUm49MDszOTIhPVJuOysrUm4pdm9pZCAwIT09Z25bUm5dJiZ0bChnbltSbl0sUm4pfSxQLmluaXRfdGFibGU9Y3QsUC5mb3JtYXQ9bnUsUC5nZXRsb2NhbGU9ZnVuY3Rpb24gdnIoKXtyZXR1cm4gQW58fCJlbi1VUyJ9LFAuc2V0bG9jYWxlPWZ1bmN0aW9uIHJyKEt0KXtp''@;'; put 'put ''ZihmdW5jdGlvbiBwcihLdCl7dmFyIGduPTA7c3dpdGNoKChBbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOmNhc2UiemgtY24iOmNhc2UiamEtanAiOmNhc2Uia28ta3IiOmZvcihnbj0yNztnbjw9MzY7KytnbilkZWxldGUgS3RbZ25dO2Zvcihnbj01MDtnbjw9NTg7Kytnbilk''@;'; put 'put ''ZWxldGUgS3RbZ25dO2JyZWFrO2Nhc2UidGgtdGgiOmZvcihnbj01OTtnbjw9NjI7KytnbilkZWxldGUgS3RbZ25dO2Zvcihnbj02Nztnbjw9ODE7KytnbilkZWxldGUgS3RbZ25dfX0oYnQpLEFuPUt0LFNuKGJ0KSx0eXBlb2YgSW50bDwidSIpe3ZhciBnbj1JbnRsLkRhdGVUaW1lRm9ybWF0''@;'; put 'put ''KEt0KTtpZihnbi5mb3JtYXRUb1BhcnRzKXtmb3IodmFyIFJuPWduLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUsMCwwLDApKSxXcj0wO1dyPDc7KytXcilkdFtXcl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7d2Vla2RheToibG9uZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBE''@;'; put 'put ''YXRlKDIwMjAsMCw1K1dyLDAsMCwwKSlbMF0udmFsdWUsZHRbV3JdWzBdPUludGwuRGF0ZVRpbWVGb3JtYXQoS3Qse3dlZWtkYXk6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUrV3IsMCwwLDApKVswXS52YWx1ZTtmb3IodmFyIFhuPTA7WG48MTI7KytYbilDdFtY''@;'; put 'put ''bl1bMl09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7bW9udGg6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLFhuLDIsMCwwLDApKVswXS52YWx1ZSxDdFtYbl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7bW9udGg6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERh''@;'; put 'put ''dGUoMjAyMCxYbiwyLDAsMCwwKSlbMF0udmFsdWUsQ3RbWG5dWzBdPUN0W1huXVsxXS5zbGljZSgwLDEpO2Zvcih2YXIgZWk9IiIsaXI9MDtpcjxSbi5sZW5ndGg7Kytpcil7dmFyIHJpPVJuW2lyXS52YWx1ZTtzd2l0Y2goUm5baXJdLnR5cGUpe2Nhc2UieWVhciI6ZWkrPTI9PXJpLmxlbmd0''@;'; put 'put ''aD8ieXkiOiJ5eXl5IjticmVhaztjYXNlIm1vbnRoIjplaSs9IjEiPT1yaT8ibSI6IjAxIj09cmk/Im1tIjpyaT09Q3RbMF1bMV0/Im1tbSI6cmk9PUN0WzBdWzJdPyJtbW1tIjpyaT09Q3RbMF1bMF0/Im1tbW1tIjoibW0iO2JyZWFrO2Nhc2UiZGF5IjplaSs9IjUiPT1yaT8iZCI6IjA1Ij09''@;'; put 'put ''cmk/ImRkIjpyaT09ZHRbMF1bMF0/ImRkZCI6cmk9PWR0WzBdWzFdPyJkZGRkIjoiZGQiO2JyZWFrO2Nhc2UibGl0ZXJhbCI6ZWkrPXJpLnJlcGxhY2UoLy4vZywiXFwkJiIpLDE9PXJpLmxlbmd0aCYmKFRuPXJpKX19KEt0Lm1hdGNoKC9lbi9pKSYmS3QubWF0Y2goL3VzL2kpfHwhS3QpJiYo''@;'; put 'put ''ZWk9Im0vZC95eSIpLGJ0WzE0XT1laX1lbHNlImphLWpwIj09S3QudG9Mb3dlckNhc2UoKSYmKGJ0WzE0XT0ieXl5eVxcL21cXC9kIik7dmFyIG1vPUludGwuTnVtYmVyRm9ybWF0KEt0LHt9KS5mb3JtYXQoMTIzNDU2Ny44OSk7bW8mJihRcj0obW8ubWF0Y2goLzEoLiopMi8pfHxbXSlbMV0s''@;'; put 'put ''dXI9KG1vLm1hdGNoKC83KC4qKTgvKXx8W10pWzFdKX1lcltLdC50b0xvd2VyQ2FzZSgpXXx8KGVyW0t0LnRvTG93ZXJDYXNlKCldPXsiLiI6dXIsIiwiOlFyfSksWm49bnQodHI9ZXJbS3QudG9Mb3dlckNhc2UoKV18fGVyWyJlbi11cyJdKX0sUC5ub3JtYWxpemU9ZnVuY3Rpb24gTXMoS3Qp''@;'; put 'put ''e2Zvcih2YXIgZ249MCxSbj0wLFdyPSIiLFhuPSIiLGVpPSIiLGlyPXRyLnl8fCJ5IixyaT1pci50b1VwcGVyQ2FzZSgpLG1vPXRyLmR8fCJkIixpaT1tby50b1VwcGVyQ2FzZSgpLHppPXRyWyIuIl0sSnI9dHJbIiwiXSx3cz0iMCM/RSstJSIrdHJbIiwiXSt6aTtnbjxLdC5sZW5ndGg7KXN3''@;'; put 'put ''aXRjaChXcj1LdC5jaGFyQXQoZ24pKXtjYXNlIkciOmduKyssZWkrPVdyO2JyZWFrO2Nhc2UnIic6Zm9yKGVpKz1XcjszNCE9PShSbj1LdC5jaGFyQ29kZUF0KCsrZ24pKSYmZ248S3QubGVuZ3RoOyllaSs9U3RyaW5nLmZyb21DaGFyQ29kZShSbik7ZWkrPSciJywrK2duO2JyZWFrO2Nhc2Ui''@;'; put 'put ''XFwiOmNhc2UiXyI6ZWkrPUt0LnNsaWNlKGduLGduKzIpLGduKz0yO2JyZWFrO2Nhc2UiQCI6ZWkrPVdyLCsrZ247YnJlYWs7Y2FzZSJCIjpjYXNlImIiOisrZ24sZWkrPVdyO2JyZWFrO2Nhc2UgaXI6Y2FzZSByaTpjYXNlIG1vOmNhc2UgaWk6ZWkrPVpuW1dyLnRvTG93ZXJDYXNlKCldLCsr''@;'; put 'put ''Z247YnJlYWs7Y2FzZSJNIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJBIjpjYXNlImEiOmVpKz1XciwrK2duO2JyZWFrO2Nhc2UiWyI6Zm9yKFhuPVdyOyJdIiE9PUt0LmNoYXJBdChnbisrKSYmZ248S3QubGVu''@;'; put 'put ''Z3RoOylYbis9S3QuY2hhckF0KGduKTtlaSs9WG47YnJlYWs7Y2FzZSBKcjplaSs9JyInK1dyKyciJywrK2duO2JyZWFrO2Nhc2Ugemk6aWYoIShnbjxLdC5sZW5ndGgmJih3cy5pbmRleE9mKFdyPUt0LmNoYXJBdCgrK2duKSk+LTF8fCJcXCI9PVdyJiYiLSI9PUt0LmNoYXJBdChnbisxKSYm''@;'; put 'put ''IjAjIi5pbmRleE9mKEt0LmNoYXJBdChnbisyKSk+LTEpKSl7ZWkrPSciJyt6aSsnIic7YnJlYWt9V3I9emksLS1nbjtjYXNlIjAiOmNhc2UiIyI6Zm9yKGVpKz1abltXci50b0xvd2VyQ2FzZSgpXXx8V3I7Z248S3QubGVuZ3RoJiYod3MuaW5kZXhPZihXcj1LdC5jaGFyQXQoKytnbikpPi0x''@;'; put 'put ''fHwiXFwiPT1XciYmIi0iPT1LdC5jaGFyQXQoZ24rMSkmJiIwIyIuaW5kZXhPZihLdC5jaGFyQXQoZ24rMikpPi0xKTspZWkrPVpuW1dyLnRvTG93ZXJDYXNlKCldfHxXcjticmVhaztjYXNlIj8iOmZvcihlaSs9V3I7S3QuY2hhckF0KCsrZ24pPT09V3I7KWVpKz1XcjticmVhaztjYXNlIioi''@;'; put 'put ''OmVpKz1XciwrK2duLCgiICI9PUt0LmNoYXJBdChnbil8fCIqIj09S3QuY2hhckF0KGduKSkmJihlaSs9S3QuY2hhckF0KGduKSwrK2duKTticmVhaztjYXNlIigiOmNhc2UiKSI6ZWkrPVdyLCsrZ247YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2Ui''@;'; put 'put ''NiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKGVpKz1XcjtnbjxLdC5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKEt0LmNoYXJBdCgrK2duKSk+LTE7KWVpKz1LdC5jaGFyQXQoZ24pO2JyZWFrO2RlZmF1bHQ6ZWkrPVdyLCsrZ259cmV0dXJuIGVpfSxQLmdldGN1cnJlbmN5PWZ1''@;'; put 'put ''bmN0aW9uIGtpKCl7cmV0dXJuIG9pfHwiVVNEIn0sUC5zZXRjdXJyZW5jeT1mdW5jdGlvbiBMaShLdCl7b2k9S3QsTnI9dHlwZW9mIEludGw8InUiP0ludGwuTnVtYmVyRm9ybWF0KEFuLHtzdHlsZToiY3VycmVuY3kiLGN1cnJlbmN5RGlzcGxheToic3ltYm9sIixjdXJyZW5jeTpLdH0pLmZv''@;'; put 'put ''cm1hdCgwKS5yZXBsYWNlKC9bMFwuXCxcc10vZywiIik6IiQifX07Sih3KTt2YXIgT2UsbmU9eyJHZW5lcmFsIE51bWJlciI6IkdlbmVyYWwiLCJHZW5lcmFsIERhdGUiOncuX3RhYmxlWzIyXSwiTG9uZyBEYXRlIjoiZGRkZCwgbW1tbSBkZCwgeXl5eSIsIk1lZGl1bSBEYXRlIjp3Ll90YWJs''@;'; put 'put ''ZVsxNV0sIlNob3J0IERhdGUiOncuX3RhYmxlWzE0XSwiTG9uZyBUaW1lIjp3Ll90YWJsZVsxOV0sIk1lZGl1bSBUaW1lIjp3Ll90YWJsZVsxOF0sIlNob3J0IFRpbWUiOncuX3RhYmxlWzIwXSxDdXJyZW5jeTonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxGaXhlZDp3''@;'; put 'put ''Ll90YWJsZVsyXSxTdGFuZGFyZDp3Ll90YWJsZVs0XSxQZXJjZW50OncuX3RhYmxlWzEwXSxTY2llbnRpZmljOncuX3RhYmxlWzExXSwiWWVzL05vIjonIlllcyI7IlllcyI7Ik5vIjtAJywiVHJ1ZS9GYWxzZSI6JyJUcnVlIjsiVHJ1ZSI7IkZhbHNlIjtAJywiT24vT2ZmIjonIlllcyI7Illl''@;'; put 'put ''cyI7Ik5vIjtAJ30sZGU9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2Vu''@;'; put 'put ''ZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2Qv''@;'; put 'put ''eXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtfKCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQi''@;'; put 'put ''KiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9kL3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToi''@;'; put 'put ''MCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRd''@;'; put 'put ''XFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5''@;'; put 'put ''OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LGZlPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2c7IWZ1bmN0aW9uKHkpe3kudmVyc2lvbj0iMS4yLjAiO3ZhciBMPWZ1bmN0aW9uIFAoKXtmb3IodmFyIHZlPTAsU2U9bmV3IEFycmF5KDI1NiksSGU9MDsyNTYh''@;'; put 'put ''PUhlOysrSGUpU2VbSGVdPXZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPUhlKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+''@;'; put 'put ''MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MTtyZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KFNlKTpTZX0o''@;'; put 'put ''KTt5LnRhYmxlPUwseS5ic3RyPWZ1bmN0aW9uIFEodmUsU2Upe2Zvcih2YXIgSGU9LTFeU2UsVmU9dmUubGVuZ3RoLTEsR2U9MDtHZTxWZTspSGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVedmUuY2hhckNvZGVBdChHZSsrKSldKT4+PjheTFsyNTUmKEhlXnZlLmNoYXJDb2RlQXQoR2UrKykpXTty''@;'; put 'put ''ZXR1cm4gR2U9PT1WZSYmKEhlPUhlPj4+OF5MWzI1NSYoSGVedmUuY2hhckNvZGVBdChHZSkpXSksLTFeSGV9LHkuYnVmPWZ1bmN0aW9uIHJlKHZlLFNlKXtpZih2ZS5sZW5ndGg+MWU0KXJldHVybiBmdW5jdGlvbiBwZSh2ZSxTZSl7Zm9yKHZhciBIZT0tMV5TZSxWZT12ZS5sZW5ndGgtNyxH''@;'; put 'put ''ZT0wO0dlPFZlOylIZT0oSGU9KEhlPShIZT0oSGU9KEhlPShIZT0oSGU9SGU+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZl''@;'; put 'put ''W0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV07Zm9yKDtHZTxWZSs3OylIZT1IZT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV07cmV0dXJuLTFeSGV9KHZlLFNlKTtmb3IodmFyIEhlPS0x''@;'; put 'put ''XlNlLFZlPXZlLmxlbmd0aC0zLEdlPTA7R2U8VmU7KUhlPShIZT0oSGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXTtmb3IoO0dlPFZlKzM7''@;'; put 'put ''KUhlPUhlPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXTtyZXR1cm4tMV5IZX0seS5zdHI9ZnVuY3Rpb24gX2UodmUsU2Upe2Zvcih2YXIgbnQsZHQsSGU9LTFeU2UsVmU9MCxHZT12ZS5sZW5ndGg7VmU8R2U7KShudD12ZS5jaGFyQ29kZUF0KFZlKyspKTwxMjg/SGU9SGU+Pj44XkxbMjU1JihI''@;'; put 'put ''ZV5udCldOm50PDIwNDg/SGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVeKDE5MnxudD4+NiYzMSkpXSk+Pj44XkxbMjU1JihIZV4oMTI4fDYzJm50KSldOm50Pj01NTI5NiYmbnQ8NTczNDQ/KG50PTY0KygxMDIzJm50KSxkdD0xMDIzJnZlLmNoYXJDb2RlQXQoVmUrKyksSGU9KEhlPShIZT0oSGU9''@;'; put 'put ''SGU+Pj44XkxbMjU1JihIZV4oMjQwfG50Pj44JjcpKV0pPj4+OF5MWzI1NSYoSGVeKDEyOHxudD4+MiY2MykpXSk+Pj44XkxbMjU1JihIZV4oMTI4fGR0Pj42JjE1fCgzJm50KTw8NCkpXSk+Pj44XkxbMjU1JihIZV4oMTI4fDYzJmR0KSldKTpIZT0oSGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVe''@;'; put 'put ''KDIyNHxudD4+MTImMTUpKV0pPj4+OF5MWzI1NSYoSGVeKDEyOHxudD4+NiY2MykpXSk+Pj44XkxbMjU1JihIZV4oMTI4fDYzJm50KSldO3JldHVybi0xXkhlfX0oT2U9e30pO3ZhciBXZSxCZT1mdW5jdGlvbigpe3ZhciBTZSxQPXt9O2Z1bmN0aW9uIFEocm4pe2lmKCIvIj09cm4uY2hhckF0''@;'; put 'put ''KHJuLmxlbmd0aC0xKSlyZXR1cm4tMT09PXJuLnNsaWNlKDAsLTEpLmluZGV4T2YoIi8iKT9ybjpRKHJuLnNsaWNlKDAsLTEpKTt2YXIgX249cm4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PV9uP3JuOnJuLnNsaWNlKDAsX24rMSl9ZnVuY3Rpb24gcmUocm4pe2lmKCIvIj09cm4uY2hh''@;'; put 'put ''ckF0KHJuLmxlbmd0aC0xKSlyZXR1cm4gcmUocm4uc2xpY2UoMCwtMSkpO3ZhciBfbj1ybi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09X24/cm46cm4uc2xpY2UoX24rMSl9ZnVuY3Rpb24gcGUocm4sX24peyJzdHJpbmciPT10eXBlb2YgX24mJihfbj1uZXcgRGF0ZShfbikpO3ZhciBh''@;'; put 'put ''bj1fbi5nZXRIb3VycygpO2FuPShhbj1hbjw8Nnxfbi5nZXRNaW51dGVzKCkpPDw1fF9uLmdldFNlY29uZHMoKT4+PjEscm4ud3JpdGVfc2hpZnQoMixhbik7dmFyIFZ0PV9uLmdldEZ1bGxZZWFyKCktMTk4MDtWdD0oVnQ9VnQ8PDR8X24uZ2V0TW9udGgoKSsxKTw8NXxfbi5nZXREYXRlKCks''@;'; put 'put ''cm4ud3JpdGVfc2hpZnQoMixWdCl9ZnVuY3Rpb24gdmUocm4pe29sKHJuLDApO2Zvcih2YXIgX249e30sYW49MDtybi5sPD1ybi5sZW5ndGgtNDspe3ZhciBWdD1ybi5yZWFkX3NoaWZ0KDIpLFd0PXJuLnJlYWRfc2hpZnQoMiksZG49cm4ubCtXdCxEbj17fTsyMTU4OT09PVZ0JiYoMSYoYW49''@;'; put 'put ''cm4ucmVhZF9zaGlmdCgxKSkmJihEbi5tdGltZT1ybi5yZWFkX3NoaWZ0KDQpKSxXdD41JiYoMiZhbiYmKERuLmF0aW1lPXJuLnJlYWRfc2hpZnQoNCkpLDQmYW4mJihEbi5jdGltZT1ybi5yZWFkX3NoaWZ0KDQpKSksRG4ubXRpbWUmJihEbi5tdD1uZXcgRGF0ZSgxZTMqRG4ubXRpbWUpKSks''@;'; put 'put ''cm4ubD1kbixfbltWdF09RG59cmV0dXJuIF9ufWZ1bmN0aW9uIEhlKCl7cmV0dXJuIFNlfHwoU2U9Rig3ODc3MykpfWZ1bmN0aW9uIFZlKHJuLF9uKXtpZig4MD09cm5bMF0mJjc1PT1yblsxXSlyZXR1cm4gSnIocm4sX24pO2lmKHJuLmxlbmd0aDw1MTIpdGhyb3cgbmV3IEVycm9yKCJDRkIg''@;'; put 'put ''ZmlsZSBzaXplICIrcm4ubGVuZ3RoKyIgPCA1MTIiKTt2YXIgYW4sV3QsZG4sRG4sbnIsYnIsVnQ9NTEyLGpyPVtdLElyPXJuLnNsaWNlKDAsNTEyKTtvbChJciwwKTt2YXIgeGk9ZnVuY3Rpb24gR2Uocm4pe2lmKDgwPT1ybltybi5sXSYmNzU9PXJuW3JuLmwrMV0pcmV0dXJuWzAsMF07cm4u''@;'; put 'put ''Y2hrKE5yLCJIZWFkZXIgU2lnbmF0dXJlOiAiKSxybi5sKz0xNjt2YXIgX249cm4ucmVhZF9zaGlmdCgyLCJ1Iik7cmV0dXJuW3JuLnJlYWRfc2hpZnQoMiwidSIpLF9uXX0oSXIpO3N3aXRjaChhbj14aVswXSl7Y2FzZSAzOlZ0PTUxMjticmVhaztjYXNlIDQ6VnQ9NDA5NjticmVhaztjYXNl''@;'; put 'put ''IDA6aWYoMD09eGlbMV0pcmV0dXJuIEpyKHJuLF9uKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiTWFqb3IgVmVyc2lvbjogRXhwZWN0ZWQgMyBvciA0IHNhdyAiK2FuKX01MTIhPT1WdCYmb2woSXI9cm4uc2xpY2UoMCxWdCksMjgpO3ZhciBsaT1ybi5zbGljZSgwLFZ0KTshZnVuY3Rpb24g''@;'; put 'put ''bnQocm4sX24pe3ZhciBhbjtzd2l0Y2gocm4ubCs9Mixhbj1ybi5yZWFkX3NoaWZ0KDIpKXtjYXNlIDk6aWYoMyE9X24pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgc2F3ICIrYW4pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9X24pdGhyb3cgbmV3IEVycm9yKCJTZWN0''@;'; put 'put ''b3IgU2hpZnQ6IEV4cGVjdGVkIDEyIHNhdyAiK2FuKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IG9yIDEyIHNhdyAiK2FuKX1ybi5jaGsoIjA2MDAiLCJNaW5pIFNlY3RvciBTaGlmdDogIikscm4uY2hrKCIwMDAwMDAwMDAwMDAiLCJS''@;'; put 'put ''ZXNlcnZlZDogIil9KElyLGFuKTt2YXIgQ289SXIucmVhZF9zaGlmdCg0LCJpIik7aWYoMz09PWFuJiYwIT09Q28pdGhyb3cgbmV3IEVycm9yKCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK0NvKTtJci5sKz00LERuPUlyLnJlYWRfc2hpZnQoNCwiaSIpLElyLmwrPTQs''@;'; put 'put ''SXIuY2hrKCIwMDEwMDAwMCIsIk1pbmkgU3RyZWFtIEN1dG9mZiBTaXplOiAiKSxucj1Jci5yZWFkX3NoaWZ0KDQsImkiKSxXdD1Jci5yZWFkX3NoaWZ0KDQsImkiKSxicj1Jci5yZWFkX3NoaWZ0KDQsImkiKSxkbj1Jci5yZWFkX3NoaWZ0KDQsImkiKTtmb3IodmFyIHBvPS0xLFZpPTA7Vmk8''@;'; put 'put ''MTA5JiYhKChwbz1Jci5yZWFkX3NoaWZ0KDQsImkiKSk8MCk7KytWaSlqcltWaV09cG87dmFyIFVvPWZ1bmN0aW9uIGR0KHJuLF9uKXtmb3IodmFyIGFuPU1hdGguY2VpbChybi5sZW5ndGgvX24pLTEsVnQ9W10sV3Q9MTtXdDxhbjsrK1d0KVZ0W1d0LTFdPXJuLnNsaWNlKFd0Kl9uLChXdCsx''@;'; put 'put ''KSpfbik7cmV0dXJuIFZ0W2FuLTFdPXJuLnNsaWNlKGFuKl9uKSxWdH0ocm4sVnQpO2J0KGJyLGRuLFVvLFZ0LGpyKTt2YXIgdGk9ZnVuY3Rpb24gRXQocm4sX24sYW4sVnQpe3ZhciBXdD1ybi5sZW5ndGgsZG49W10sRG49W10sbnI9W10sYnI9W10sanI9VnQtMSxJcj0wLHhpPTAsbGk9MCxD''@;'; put 'put ''bz0wO2ZvcihJcj0wO0lyPFd0OysrSXIpaWYobnI9W10sKGxpPUlyK19uKT49V3QmJihsaS09V3QpLCFEbltsaV0pe2JyPVtdO3ZhciBwbz1bXTtmb3IoeGk9bGk7eGk+PTA7KXtwb1t4aV09ITAsRG5beGldPSEwLG5yW25yLmxlbmd0aF09eGksYnIucHVzaChyblt4aV0pO3ZhciBWaT1hbltN''@;'; put 'put ''YXRoLmZsb29yKDQqeGkvVnQpXTtpZihWdDw0KyhDbz00KnhpJmpyKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK3hpKyIgNCAiK1Z0KTtpZighcm5bVmldfHxwb1t4aT1vcyhybltWaV0sQ28pXSlicmVha31kbltsaV09e25vZGVzOm5yLGRhdGE6U2EoW2JyXSl9''@;'; put 'put ''fXJldHVybiBkbn0oVW8sRG4sanIsVnQpO3RpW0RuXS5uYW1lPSIhRGlyZWN0b3J5IixXdD4wJiZuciE9PVpuJiYodGlbbnJdLm5hbWU9IiFNaW5pRkFUIiksdGlbanJbMF1dLm5hbWU9IiFGQVQiLHRpLmZhdF9hZGRycz1qcix0aS5zc3o9VnQ7dmFyIGxjPVtdLE51PVtdLFY2PVtdOyhmdW5j''@;'; put 'put ''dGlvbiBUdChybixfbixhbixWdCxXdCxkbixEbixucil7Zm9yKHZhciBDbyxicj0wLGpyPVZ0Lmxlbmd0aD8yOjAsSXI9X25bcm5dLmRhdGEseGk9MCxsaT0wO3hpPElyLmxlbmd0aDt4aSs9MTI4KXt2YXIgcG89SXIuc2xpY2UoeGkseGkrMTI4KTtvbChwbyw2NCksbGk9cG8ucmVhZF9zaGlm''@;'; put 'put ''dCgyKSxDbz1FdShwbywwLGxpLWpyKSxWdC5wdXNoKENvKTt2YXIgVmk9e25hbWU6Q28sdHlwZTpwby5yZWFkX3NoaWZ0KDEpLGNvbG9yOnBvLnJlYWRfc2hpZnQoMSksTDpwby5yZWFkX3NoaWZ0KDQsImkiKSxSOnBvLnJlYWRfc2hpZnQoNCwiaSIpLEM6cG8ucmVhZF9zaGlmdCg0LCJpIiks''@;'; put 'put ''Y2xzaWQ6cG8ucmVhZF9zaGlmdCgxNiksc3RhdGU6cG8ucmVhZF9zaGlmdCg0LCJpIiksc3RhcnQ6MCxzaXplOjB9OzAhPT1wby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikrcG8ucmVhZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpJiYoVmkuY3Q9WnQocG8scG8ubC04KSksMCE9''@;'; put 'put ''PXBvLnJlYWRfc2hpZnQoMikrcG8ucmVhZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikmJihWaS5tdD1adChwbyxwby5sLTgpKSxWaS5zdGFydD1wby5yZWFkX3NoaWZ0KDQsImkiKSxWaS5zaXplPXBvLnJlYWRfc2hpZnQoNCwiaSIpLFZpLnNpemU8MCYmVmku''@;'; put 'put ''c3RhcnQ8MCYmKFZpLnNpemU9VmkudHlwZT0wLFZpLnN0YXJ0PVpuLFZpLm5hbWU9IiIpLDU9PT1WaS50eXBlPyhicj1WaS5zdGFydCxXdD4wJiZiciE9PVpuJiYoX25bYnJdLm5hbWU9IiFTdHJlYW1EYXRhIikpOlZpLnNpemU+PTQwOTY/KFZpLnN0b3JhZ2U9ImZhdCIsdm9pZCAwPT09X25b''@;'; put 'put ''Vmkuc3RhcnRdJiYoX25bVmkuc3RhcnRdPUZ0KGFuLFZpLnN0YXJ0LF9uLmZhdF9hZGRycyxfbi5zc3opKSxfbltWaS5zdGFydF0ubmFtZT1WaS5uYW1lLFZpLmNvbnRlbnQ9X25bVmkuc3RhcnRdLmRhdGEuc2xpY2UoMCxWaS5zaXplKSk6KFZpLnN0b3JhZ2U9Im1pbmlmYXQiLFZpLnNpemU8''@;'; put 'put ''MD9WaS5zaXplPTA6YnIhPT1abiYmVmkuc3RhcnQhPT1abiYmX25bYnJdJiYoVmkuY29udGVudD1jdChWaSxfblticl0uZGF0YSwoX25bbnJdfHx7fSkuZGF0YSkpKSxWaS5jb250ZW50JiZvbChWaS5jb250ZW50LDApLGRuW0NvXT1WaSxEbi5wdXNoKFZpKX19KShEbix0aSxVbyxsYyxXdCx7''@;'; put 'put ''fSxOdSxuciksZnVuY3Rpb24gQ3Qocm4sX24sYW4pe2Zvcih2YXIgVnQ9MCxXdD0wLGRuPTAsRG49MCxucj0wLGJyPWFuLmxlbmd0aCxqcj1bXSxJcj1bXTtWdDxicjsrK1Z0KWpyW1Z0XT1JcltWdF09VnQsX25bVnRdPWFuW1Z0XTtmb3IoO25yPElyLmxlbmd0aDsrK25yKVd0PXJuW1Z0PUly''@;'; put 'put ''W25yXV0uTCxkbj1ybltWdF0uUixEbj1ybltWdF0uQyxqcltWdF09PT1WdCYmKC0xIT09V3QmJmpyW1d0XSE9PVd0JiYoanJbVnRdPWpyW1d0XSksLTEhPT1kbiYmanJbZG5dIT09ZG4mJihqcltWdF09anJbZG5dKSksLTEhPT1EbiYmKGpyW0RuXT1WdCksLTEhPT1XdCYmVnQhPWpyW1Z0XSYm''@;'; put 'put ''KGpyW1d0XT1qcltWdF0sSXIubGFzdEluZGV4T2YoV3QpPG5yJiZJci5wdXNoKFd0KSksLTEhPT1kbiYmVnQhPWpyW1Z0XSYmKGpyW2RuXT1qcltWdF0sSXIubGFzdEluZGV4T2YoZG4pPG5yJiZJci5wdXNoKGRuKSk7Zm9yKFZ0PTE7VnQ8YnI7KytWdClqcltWdF09PT1WdCYmKC0xIT09ZG4m''@;'; put 'put ''JmpyW2RuXSE9PWRuP2pyW1Z0XT1qcltkbl06LTEhPT1XdCYmanJbV3RdIT09V3QmJihqcltWdF09anJbV3RdKSk7Zm9yKFZ0PTE7VnQ8YnI7KytWdClpZigwIT09cm5bVnRdLnR5cGUpe2lmKChucj1WdCkhPWpyW25yXSlkb3tfbltWdF09X25bbnI9anJbbnJdXSsiLyIrX25bVnRdfXdoaWxl''@;'; put 'put ''KDAhPT1uciYmLTEhPT1qcltucl0mJm5yIT1qcltucl0pO2pyW1Z0XT0tMX1mb3IoX25bMF0rPSIvIixWdD0xO1Z0PGJyOysrVnQpMiE9PXJuW1Z0XS50eXBlJiYoX25bVnRdKz0iLyIpfShOdSxWNixsYyksbGMuc2hpZnQoKTt2YXIgd2Y9e0ZpbGVJbmRleDpOdSxGdWxsUGF0aHM6VjZ9O3Jl''@;'; put 'put ''dHVybiBfbiYmX24ucmF3JiYod2YucmF3PXtoZWFkZXI6bGksc2VjdG9yczpVb30pLHdmfWZ1bmN0aW9uIGN0KHJuLF9uLGFuKXtmb3IodmFyIFd0PXJuLnNpemUsZG49W10sRG49cm4uc3RhcnQ7YW4mJld0PjAmJkRuPj0wOylkbi5wdXNoKF9uLnNsaWNlKERuKnRyLERuKnRyK3RyKSksV3Qt''@;'; put 'put ''PXRyLERuPW9zKGFuLDQqRG4pO3JldHVybiAwPT09ZG4ubGVuZ3RoP2ZyKDApOlMoZG4pLnNsaWNlKDAscm4uc2l6ZSl9ZnVuY3Rpb24gYnQocm4sX24sYW4sVnQsV3Qpe3ZhciBkbj1abjtpZihybj09PVpuKXtpZigwIT09X24pdGhyb3cgbmV3IEVycm9yKCJESUZBVCBjaGFpbiBzaG9ydGVy''@;'; put 'put ''IHRoYW4gZXhwZWN0ZWQiKX1lbHNlIGlmKC0xIT09cm4pe3ZhciBEbj1hbltybl0sbnI9KFZ0Pj4+MiktMTtpZighRG4pcmV0dXJuO2Zvcih2YXIgYnI9MDticjxuciYmKGRuPW9zKERuLDQqYnIpKSE9PVpuOysrYnIpV3QucHVzaChkbik7YnQob3MoRG4sVnQtNCksX24tMSxhbixWdCxXdCl9''@;'; put 'put ''fWZ1bmN0aW9uIEZ0KHJuLF9uLGFuLFZ0LFd0KXt2YXIgZG49W10sRG49W107V3R8fChXdD1bXSk7dmFyIG5yPVZ0LTEsYnI9MCxqcj0wO2Zvcihicj1fbjticj49MDspe1d0W2JyXT0hMCxkbltkbi5sZW5ndGhdPWJyLERuLnB1c2gocm5bYnJdKTt2YXIgSXI9YW5bTWF0aC5mbG9vcig0KmJy''@;'; put 'put ''L1Z0KV07aWYoVnQ8NCsoanI9NCpiciZucikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIiticisiIDQgIitWdCk7aWYoIXJuW0lyXSlicmVhazticj1vcyhybltJcl0sanIpfXJldHVybntub2RlczpkbixkYXRhOlNhKFtEbl0pfX1mdW5jdGlvbiBadChybixfbil7''@;'; put 'put ''cmV0dXJuIG5ldyBEYXRlKDFlMyooeWkocm4sX24rNCkvMWU3Kk1hdGgucG93KDIsMzIpK3lpKHJuLF9uKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiB1bihybixfbil7dmFyIGFuPV9ufHx7fSxWdD1hbi5yb290fHwiUm9vdCBFbnRyeSI7aWYocm4uRnVsbFBhdGhzfHwocm4uRnVsbFBh''@;'; put 'put ''dGhzPVtdKSxybi5GaWxlSW5kZXh8fChybi5GaWxlSW5kZXg9W10pLHJuLkZ1bGxQYXRocy5sZW5ndGghPT1ybi5GaWxlSW5kZXgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaW5jb25zaXN0ZW50IENGQiBzdHJ1Y3R1cmUiKTswPT09cm4uRnVsbFBhdGhzLmxlbmd0aCYmKHJuLkZ1bGxQYXRo''@;'; put 'put ''c1swXT1WdCsiLyIscm4uRmlsZUluZGV4WzBdPXtuYW1lOlZ0LHR5cGU6NX0pLGFuLkNMU0lEJiYocm4uRmlsZUluZGV4WzBdLmNsc2lkPWFuLkNMU0lEKSxmdW5jdGlvbiBxbihybil7dmFyIF9uPSJceDAxU2gzM3RKNSI7aWYoIUJlLmZpbmQocm4sIi8iK19uKSl7dmFyIGFuPWZyKDQpO2Fu''@;'; put 'put ''WzBdPTU1LGFuWzFdPWFuWzNdPTUwLGFuWzJdPTU0LHJuLkZpbGVJbmRleC5wdXNoKHtuYW1lOl9uLHR5cGU6Mixjb250ZW50OmFuLHNpemU6NCxMOjY5LFI6NjksQzo2OX0pLHJuLkZ1bGxQYXRocy5wdXNoKHJuLkZ1bGxQYXRoc1swXStfbiksem4ocm4pfX0ocm4pfWZ1bmN0aW9uIHpuKHJu''@;'; put 'put ''LF9uKXt1bihybik7Zm9yKHZhciBhbj0hMSxWdD0hMSxXdD1ybi5GdWxsUGF0aHMubGVuZ3RoLTE7V3Q+PTA7LS1XdCl7dmFyIGRuPXJuLkZpbGVJbmRleFtXdF07c3dpdGNoKGRuLnR5cGUpe2Nhc2UgMDpWdD9hbj0hMDoocm4uRmlsZUluZGV4LnBvcCgpLHJuLkZ1bGxQYXRocy5wb3AoKSk7''@;'; put 'put ''YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6VnQ9ITAsaXNOYU4oZG4uUipkbi5MKmRuLkMpJiYoYW49ITApLGRuLlI+LTEmJmRuLkw+LTEmJmRuLlI9PWRuLkwmJihhbj0hMCk7YnJlYWs7ZGVmYXVsdDphbj0hMH19aWYoYW58fF9uKXt2YXIgRG49bmV3IERhdGUoMTk4NywxLDE5KSxucj0w''@;'; put 'put ''LGJyPVtdO2ZvcihXdD0wO1d0PHJuLkZ1bGxQYXRocy5sZW5ndGg7KytXdCkwIT09cm4uRmlsZUluZGV4W1d0XS50eXBlJiZici5wdXNoKFtybi5GdWxsUGF0aHNbV3RdLHJuLkZpbGVJbmRleFtXdF1dKTtmb3IoV3Q9MDtXdDxici5sZW5ndGg7KytXdCl7dmFyIGpyPVEoYnJbV3RdWzBdKTtm''@;'; put 'put ''b3IoVnQ9ITEsbnI9MDtucjxici5sZW5ndGg7Kytucilicltucl1bMF09PT1qciYmKFZ0PSEwKTtWdHx8YnIucHVzaChbanIse25hbWU6cmUoanIpLnJlcGxhY2UoIi8iLCIiKSx0eXBlOjEsY2xzaWQ6a2ksY3Q6RG4sbXQ6RG4sY29udGVudDpudWxsfV0pfWZvcihici5zb3J0KGZ1bmN0aW9u''@;'; put 'put ''KGxpLENvKXtyZXR1cm4gZnVuY3Rpb24gTChybixfbil7Zm9yKHZhciBhbj1ybi5zcGxpdCgiLyIpLFZ0PV9uLnNwbGl0KCIvIiksV3Q9MCxkbj0wLERuPU1hdGgubWluKGFuLmxlbmd0aCxWdC5sZW5ndGgpO1d0PERuOysrV3Qpe2lmKGRuPWFuW1d0XS5sZW5ndGgtVnRbV3RdLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4gZG47aWYoYW5bV3RdIT1WdFtXdF0pcmV0dXJuIGFuW1d0XTxWdFtXdF0/LTE6MX1yZXR1cm4gYW4ubGVuZ3RoLVZ0Lmxlbmd0aH0obGlbMF0sQ29bMF0pfSkscm4uRnVsbFBhdGhzPVtdLHJuLkZpbGVJbmRleD1bXSxXdD0wO1d0PGJyLmxlbmd0aDsrK1d0KXJuLkZ1bGxQYXRoc1tX''@;'; put 'put ''dF09YnJbV3RdWzBdLHJuLkZpbGVJbmRleFtXdF09YnJbV3RdWzFdO2ZvcihXdD0wO1d0PGJyLmxlbmd0aDsrK1d0KXt2YXIgSXI9cm4uRmlsZUluZGV4W1d0XSx4aT1ybi5GdWxsUGF0aHNbV3RdO2lmKElyLm5hbWU9cmUoeGkpLnJlcGxhY2UoIi8iLCIiKSxJci5MPUlyLlI9SXIuQz0tKEly''@;'; put 'put ''LmNvbG9yPTEpLElyLnNpemU9SXIuY29udGVudD9Jci5jb250ZW50Lmxlbmd0aDowLElyLnN0YXJ0PTAsSXIuY2xzaWQ9SXIuY2xzaWR8fGtpLDA9PT1XdClJci5DPWJyLmxlbmd0aD4xPzE6LTEsSXIuc2l6ZT0wLElyLnR5cGU9NTtlbHNlIGlmKCIvIj09eGkuc2xpY2UoLTEpKXtmb3IobnI9''@;'; put 'put ''V3QrMTtucjxici5sZW5ndGgmJlEocm4uRnVsbFBhdGhzW25yXSkhPXhpOysrbnIpO2ZvcihJci5DPW5yPj1ici5sZW5ndGg/LTE6bnIsbnI9V3QrMTtucjxici5sZW5ndGgmJlEocm4uRnVsbFBhdGhzW25yXSkhPVEoeGkpOysrbnIpO0lyLlI9bnI+PWJyLmxlbmd0aD8tMTpucixJci50eXBl''@;'; put 'put ''PTF9ZWxzZSBRKHJuLkZ1bGxQYXRoc1tXdCsxXXx8IiIpPT1RKHhpKSYmKElyLlI9V3QrMSksSXIudHlwZT0yfX19ZnVuY3Rpb24gQW4ocm4sX24pe3ZhciBhbj1fbnx8e307aWYoem4ocm4pLCJ6aXAiPT1hbi5maWxlVHlwZSlyZXR1cm4gZnVuY3Rpb24gdnMocm4sX24pe3ZhciBhbj1fbnx8''@;'; put 'put ''e30sVnQ9W10sV3Q9W10sZG49ZnIoMSksRG49YW4uY29tcHJlc3Npb24/ODowLG5yPTAsanI9MCxJcj0wLHhpPTAsbGk9MCxDbz1ybi5GdWxsUGF0aHNbMF0scG89Q28sVmk9cm4uRmlsZUluZGV4WzBdLFVvPVtdLHRpPTA7Zm9yKGpyPTE7anI8cm4uRnVsbFBhdGhzLmxlbmd0aDsrK2pyKWlm''@;'; put 'put ''KHBvPXJuLkZ1bGxQYXRoc1tqcl0uc2xpY2UoQ28ubGVuZ3RoKSwoVmk9cm4uRmlsZUluZGV4W2pyXSkuc2l6ZSYmVmkuY29udGVudCYmIlx4MDFTaDMzdEo1IiE9cG8pe3ZhciB6bD14aSxsYz1mcihwby5sZW5ndGgpO2ZvcihJcj0wO0lyPHBvLmxlbmd0aDsrK0lyKWxjLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsMTI3JnBvLmNoYXJDb2RlQXQoSXIpKTtsYz1sYy5zbGljZSgwLGxjLmwpLFVvW2xpXT1PZS5idWYoVmkuY29udGVudCwwKTt2YXIgTnU9VmkuY29udGVudDs4PT1EbiYmKE51PXByKE51KSksKGRuPWZyKDMwKSkud3JpdGVfc2hpZnQoNCw2NzMyNDc1MiksZG4ud3JpdGVfc2hpZnQoMiwy''@;'; put 'put ''MCksZG4ud3JpdGVfc2hpZnQoMixuciksZG4ud3JpdGVfc2hpZnQoMixEbiksVmkubXQ/cGUoZG4sVmkubXQpOmRuLndyaXRlX3NoaWZ0KDQsMCksZG4ud3JpdGVfc2hpZnQoLTQsOCZucj8wOlVvW2xpXSksZG4ud3JpdGVfc2hpZnQoNCw4Jm5yPzA6TnUubGVuZ3RoKSxkbi53cml0ZV9zaGlm''@;'; put 'put ''dCg0LDgmbnI/MDpWaS5jb250ZW50Lmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoMixsYy5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDIsMCkseGkrPWRuLmxlbmd0aCxWdC5wdXNoKGRuKSx4aSs9bGMubGVuZ3RoLFZ0LnB1c2gobGMpLHhpKz1OdS5sZW5ndGgsVnQucHVzaChOdSksOCZuciYmKChk''@;'; put 'put ''bj1mcigxMikpLndyaXRlX3NoaWZ0KC00LFVvW2xpXSksZG4ud3JpdGVfc2hpZnQoNCxOdS5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDQsVmkuY29udGVudC5sZW5ndGgpLHhpKz1kbi5sLFZ0LnB1c2goZG4pKSwoZG49ZnIoNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSxkbi53cml0ZV9z''@;'; put 'put ''aGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsMjApLGRuLndyaXRlX3NoaWZ0KDIsbnIpLGRuLndyaXRlX3NoaWZ0KDIsRG4pLGRuLndyaXRlX3NoaWZ0KDQsMCksZG4ud3JpdGVfc2hpZnQoLTQsVW9bbGldKSxkbi53cml0ZV9zaGlmdCg0LE51Lmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoNCxW''@;'; put 'put ''aS5jb250ZW50Lmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoMixsYy5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoNCwwKSxkbi53cml0ZV9zaGlmdCg0LHps''@;'; put 'put ''KSx0aSs9ZG4ubCxXdC5wdXNoKGRuKSx0aSs9bGMubGVuZ3RoLFd0LnB1c2gobGMpLCsrbGl9cmV0dXJuKGRuPWZyKDIyKSkud3JpdGVfc2hpZnQoNCwxMDEwMTAyNTYpLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLGxpKSxkbi53cml0''@;'; put 'put ''ZV9zaGlmdCgyLGxpKSxkbi53cml0ZV9zaGlmdCg0LHRpKSxkbi53cml0ZV9zaGlmdCg0LHhpKSxkbi53cml0ZV9zaGlmdCgyLDApLFMoW1MoVnQpLFMoV3QpLGRuXSl9KHJuLGFuKTt2YXIgVnQ9ZnVuY3Rpb24oQ28pe2Zvcih2YXIgcG89MCxWaT0wLFVvPTA7VW88Q28uRmlsZUluZGV4Lmxl''@;'; put 'put ''bmd0aDsrK1VvKXt2YXIgdGk9Q28uRmlsZUluZGV4W1VvXTtpZih0aS5jb250ZW50KXt2YXIgemw9dGkuY29udGVudC5sZW5ndGg7emw+MCYmKHpsPDQwOTY/cG8rPXpsKzYzPj42OlZpKz16bCs1MTE+PjkpfX1mb3IodmFyIGxjPUNvLkZ1bGxQYXRocy5sZW5ndGgrMz4+MixWNj1wbysxMjc+''@;'; put 'put ''Pjcsd2Y9KHBvKzc+PjMpK1ZpK2xjK1Y2LHFkPXdmKzEyNz4+NyxfXz1xZDw9MTA5PzA6TWF0aC5jZWlsKChxZC0xMDkpLzEyNyk7d2YrcWQrX18rMTI3Pj43PnFkOylfXz0rK3FkPD0xMDk/MDpNYXRoLmNlaWwoKHFkLTEwOSkvMTI3KTt2YXIgUTE9WzEsX18scWQsVjYsbGMsVmkscG8sMF07''@;'; put 'put ''cmV0dXJuIENvLkZpbGVJbmRleFswXS5zaXplPXBvPDw2LFExWzddPShDby5GaWxlSW5kZXhbMF0uc3RhcnQ9UTFbMF0rUTFbMV0rUTFbMl0rUTFbM10rUTFbNF0rUTFbNV0pKyhRMVs2XSs3Pj4zKSxRMX0ocm4pLFd0PWZyKFZ0WzddPDw5KSxkbj0wLERuPTA7Zm9yKGRuPTA7ZG48ODsrK2Ru''@;'; put 'put ''KVd0LndyaXRlX3NoaWZ0KDEsb2lbZG5dKTtmb3IoZG49MDtkbjw4OysrZG4pV3Qud3JpdGVfc2hpZnQoMiwwKTtmb3IoV3Qud3JpdGVfc2hpZnQoMiw2MiksV3Qud3JpdGVfc2hpZnQoMiwzKSxXdC53cml0ZV9zaGlmdCgyLDY1NTM0KSxXdC53cml0ZV9zaGlmdCgyLDkpLFd0LndyaXRlX3No''@;'; put 'put ''aWZ0KDIsNiksZG49MDtkbjwzOysrZG4pV3Qud3JpdGVfc2hpZnQoMiwwKTtmb3IoV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53cml0ZV9zaGlmdCg0LFZ0WzJdKSxXdC53cml0ZV9zaGlmdCg0LFZ0WzBdK1Z0WzFdK1Z0WzJdK1Z0WzNdLTEpLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVf''@;'; put 'put ''c2hpZnQoNCw0MDk2KSxXdC53cml0ZV9zaGlmdCg0LFZ0WzNdP1Z0WzBdK1Z0WzFdK1Z0WzJdLTE6Wm4pLFd0LndyaXRlX3NoaWZ0KDQsVnRbM10pLFd0LndyaXRlX3NoaWZ0KC00LFZ0WzFdP1Z0WzBdLTE6Wm4pLFd0LndyaXRlX3NoaWZ0KDQsVnRbMV0pLGRuPTA7ZG48MTA5OysrZG4pV3Qu''@;'; put 'put ''d3JpdGVfc2hpZnQoLTQsZG48VnRbMl0/VnRbMV0rZG46LTEpO2lmKFZ0WzFdKWZvcihEbj0wO0RuPFZ0WzFdOysrRG4pe2Zvcig7ZG48MjM2KzEyNypEbjsrK2RuKVd0LndyaXRlX3NoaWZ0KC00LGRuPFZ0WzJdP1Z0WzFdK2RuOi0xKTtXdC53cml0ZV9zaGlmdCgtNCxEbj09PVZ0WzFdLTE/''@;'; put 'put ''Wm46RG4rMSl9dmFyIG5yPWZ1bmN0aW9uKENvKXtmb3IoRG4rPUNvO2RuPERuLTE7KytkbilXdC53cml0ZV9zaGlmdCgtNCxkbisxKTtDbyYmKCsrZG4sV3Qud3JpdGVfc2hpZnQoLTQsWm4pKX07Zm9yKERuPWRuPTAsRG4rPVZ0WzFdO2RuPERuOysrZG4pV3Qud3JpdGVfc2hpZnQoLTQsTGku''@;'; put 'put ''RElGU0VDVCk7Zm9yKERuKz1WdFsyXTtkbjxEbjsrK2RuKVd0LndyaXRlX3NoaWZ0KC00LExpLkZBVFNFQ1QpO25yKFZ0WzNdKSxucihWdFs0XSk7Zm9yKHZhciBicj0wLGpyPTAsSXI9cm4uRmlsZUluZGV4WzBdO2JyPHJuLkZpbGVJbmRleC5sZW5ndGg7KyticikoSXI9cm4uRmlsZUluZGV4''@;'; put 'put ''W2JyXSkuY29udGVudCYmISgoanI9SXIuY29udGVudC5sZW5ndGgpPDQwOTYpJiYoSXIuc3RhcnQ9RG4sbnIoanIrNTExPj45KSk7Zm9yKG5yKFZ0WzZdKzc+PjMpOzUxMSZXdC5sOylXdC53cml0ZV9zaGlmdCgtNCxMaS5FTkRPRkNIQUlOKTtmb3IoRG49ZG49MCxicj0wO2JyPHJuLkZpbGVJ''@;'; put 'put ''bmRleC5sZW5ndGg7KyticikoSXI9cm4uRmlsZUluZGV4W2JyXSkuY29udGVudCYmKGpyPUlyLmNvbnRlbnQubGVuZ3RoKSYmIShqcj49NDA5NikmJihJci5zdGFydD1Ebixucihqcis2Mz4+NikpO2Zvcig7NTExJld0Lmw7KVd0LndyaXRlX3NoaWZ0KC00LExpLkVORE9GQ0hBSU4pO2Zvcihk''@;'; put 'put ''bj0wO2RuPFZ0WzRdPDwyOysrZG4pe3ZhciB4aT1ybi5GdWxsUGF0aHNbZG5dO2lmKHhpJiYwIT09eGkubGVuZ3RoKXtJcj1ybi5GaWxlSW5kZXhbZG5dLDA9PT1kbiYmKElyLnN0YXJ0PUlyLnNpemU/SXIuc3RhcnQtMTpabik7dmFyIGxpPTA9PT1kbiYmYW4ucm9vdHx8SXIubmFtZTtpZihq''@;'; put 'put ''cj0yKihsaS5sZW5ndGgrMSksV3Qud3JpdGVfc2hpZnQoNjQsbGksInV0ZjE2bGUiKSxXdC53cml0ZV9zaGlmdCgyLGpyKSxXdC53cml0ZV9zaGlmdCgxLElyLnR5cGUpLFd0LndyaXRlX3NoaWZ0KDEsSXIuY29sb3IpLFd0LndyaXRlX3NoaWZ0KC00LElyLkwpLFd0LndyaXRlX3NoaWZ0KC00''@;'; put 'put ''LElyLlIpLFd0LndyaXRlX3NoaWZ0KC00LElyLkMpLElyLmNsc2lkKVd0LndyaXRlX3NoaWZ0KDE2LElyLmNsc2lkLCJoZXgiKTtlbHNlIGZvcihicj0wO2JyPDQ7KyticilXdC53cml0ZV9zaGlmdCg0LDApO1d0LndyaXRlX3NoaWZ0KDQsSXIuc3RhdGV8fDApLFd0LndyaXRlX3NoaWZ0KDQs''@;'; put 'put ''MCksV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53cml0ZV9zaGlmdCg0LDApLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCxJci5zdGFydCksV3Qud3JpdGVfc2hpZnQoNCxJci5zaXplKSxXdC53cml0ZV9zaGlmdCg0LDApfWVsc2V7Zm9yKGJyPTA7YnI8MTc7KyticilXdC53''@;'; put 'put ''cml0ZV9zaGlmdCg0LDApO2Zvcihicj0wO2JyPDM7KyticilXdC53cml0ZV9zaGlmdCg0LC0xKTtmb3IoYnI9MDticjwxMjsrK2JyKVd0LndyaXRlX3NoaWZ0KDQsMCl9fWZvcihkbj0xO2RuPHJuLkZpbGVJbmRleC5sZW5ndGg7KytkbilpZigoSXI9cm4uRmlsZUluZGV4W2RuXSkuc2l6ZT49''@;'; put 'put ''NDA5Nil7Zm9yKFd0Lmw9SXIuc3RhcnQrMTw8OSxicj0wO2JyPElyLnNpemU7KyticilXdC53cml0ZV9zaGlmdCgxLElyLmNvbnRlbnRbYnJdKTtmb3IoOzUxMSZicjsrK2JyKVd0LndyaXRlX3NoaWZ0KDEsMCl9Zm9yKGRuPTE7ZG48cm4uRmlsZUluZGV4Lmxlbmd0aDsrK2RuKWlmKChJcj1y''@;'; put 'put ''bi5GaWxlSW5kZXhbZG5dKS5zaXplPjAmJklyLnNpemU8NDA5Nil7Zm9yKGJyPTA7YnI8SXIuc2l6ZTsrK2JyKVd0LndyaXRlX3NoaWZ0KDEsSXIuY29udGVudFticl0pO2Zvcig7NjMmYnI7KyticilXdC53cml0ZV9zaGlmdCgxLDApfWZvcig7V3QubDxXdC5sZW5ndGg7KVd0LndyaXRlX3No''@;'; put 'put ''aWZ0KDEsMCk7cmV0dXJuIFd0fVAudmVyc2lvbj0iMS4xLjQiO3ZhciB2cix0cj02NCxabj0tMixOcj0iZDBjZjExZTBhMWIxMWFlMSIsb2k9WzIwOCwyMDcsMTcsMjI0LDE2MSwxNzcsMjYsMjI1XSxraT0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLExpPXtNQVhSRUdTRUNU''@;'; put 'put ''Oi02LERJRlNFQ1Q6LTQsRkFUU0VDVDotMyxFTkRPRkNIQUlOOlpuLEZSRUVTRUNUOi0xLEhFQURFUl9TSUdOQVRVUkU6TnIsSEVBREVSX01JTk9SX1ZFUlNJT046IjNlMDAiLE1BWFJFR1NJRDotNixOT1NUUkVBTTotMSxIRUFERVJfQ0xTSUQ6a2ksRW50cnlUeXBlczpbInVua25vd24iLCJz''@;'; put 'put ''dG9yYWdlIiwic3RyZWFtIiwibG9ja2J5dGVzIiwicHJvcGVydHkiLCJyb290Il19O2Z1bmN0aW9uIHVyKHJuKXtmb3IodmFyIF9uPW5ldyBBcnJheShybi5sZW5ndGgpLGFuPTA7YW48cm4ubGVuZ3RoOysrYW4pX25bYW5dPVN0cmluZy5mcm9tQ2hhckNvZGUocm5bYW5dKTtyZXR1cm4gX24u''@;'; put 'put ''am9pbigiIil9ZnVuY3Rpb24gcHIocm4pe3JldHVybiB2cj92ci5kZWZsYXRlUmF3U3luYyhybik6Z2wocm4pfWZvcih2YXIgcm4sX24sQ2k9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLEJyPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5''@;'; put 'put ''LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSxqaT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1''@;'; put 'put ''LDI0NTc3XSxEaT10eXBlb2YgVWludDhBcnJheTwidSIsWW89RGk/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxsbz0wO2xvPDI1NjsrK2xvKVlvW2xvXT0odm9pZCAwLDI1NSYoKF9uPTEzOTUzNiYoKHJuPWxvKTw8MXxybjw8MTEpfDU1ODE0NCYocm48PDV8cm48PDE1KSk+PjE2fF9uPj44fF9u''@;'; put 'put ''KSk7ZnVuY3Rpb24gQW8ocm4sX24pe3ZhciBhbj1Zb1syNTUmcm5dO3JldHVybiBfbjw9OD9hbj4+PjgtX246KGFuPWFuPDw4fFlvW3JuPj44JjI1NV0sX248PTE2P2FuPj4+MTYtX246KGFuPWFuPDw4fFlvW3JuPj4xNiYyNTVdKT4+PjI0LV9uKX1mdW5jdGlvbiB4byhybixfbil7dmFyIGFu''@;'; put 'put ''PTcmX24sVnQ9X24+Pj4zO3JldHVybihybltWdF18KGFuPD02PzA6cm5bVnQrMV08PDgpKT4+PmFuJjN9ZnVuY3Rpb24gaGkocm4sX24pe3ZhciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4ocm5bVnRdfChhbjw9NT8wOnJuW1Z0KzFdPDw4KSk+Pj5hbiY3fWZ1bmN0aW9uIE1uKHJuLF9uKXt2''@;'; put 'put ''YXIgYW49NyZfbixWdD1fbj4+PjM7cmV0dXJuKHJuW1Z0XXwoYW48PTM/MDpybltWdCsxXTw8OCkpPj4+YW4mMzF9ZnVuY3Rpb24gTXMocm4sX24pe3ZhciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4ocm5bVnRdfChhbjw9MT8wOnJuW1Z0KzFdPDw4KSk+Pj5hbiYxMjd9ZnVuY3Rpb24geXMo''@;'; put 'put ''cm4sX24sYW4pe3ZhciBWdD03Jl9uLFd0PV9uPj4+MyxEbj1ybltXdF0+Pj5WdDtyZXR1cm4gYW48OC1WdHx8KERufD1ybltXdCsxXTw8OC1WdCxhbjwxNi1WdCl8fChEbnw9cm5bV3QrMl08PDE2LVZ0LGFuPDI0LVZ0KXx8KERufD1ybltXdCszXTw8MjQtVnQpLERuJigxPDxhbiktMX1mdW5j''@;'; put 'put ''dGlvbiBFbChybixfbil7dmFyIGFuPXJuLmxlbmd0aCxWdD0yKmFuPl9uPzIqYW46X24rNSxXdD0wO2lmKGFuPj1fbilyZXR1cm4gcm47aWYoaGUpe3ZhciBkbj1iKFZ0KTtpZihybi5jb3B5KXJuLmNvcHkoZG4pO2Vsc2UgZm9yKDtXdDxybi5sZW5ndGg7KytXdClkbltXdF09cm5bV3RdO3Jl''@;'; put 'put ''dHVybiBkbn1pZihEaSl7dmFyIERuPW5ldyBVaW50OEFycmF5KFZ0KTtpZihEbi5zZXQpRG4uc2V0KHJuKTtlbHNlIGZvcig7V3Q8cm4ubGVuZ3RoOysrV3QpRG5bV3RdPXJuW1d0XTtyZXR1cm4gRG59cmV0dXJuIHJuLmxlbmd0aD1WdCxybn1mdW5jdGlvbiBzbChybil7Zm9yKHZhciBfbj1u''@;'; put 'put ''ZXcgQXJyYXkocm4pLGFuPTA7YW48cm47Kythbilfblthbl09MDtyZXR1cm4gX259dmFyIGdsPWZ1bmN0aW9uKF9uKXt2YXIgYW49ZnIoNTArTWF0aC5mbG9vcigxLjEqX24ubGVuZ3RoKSksVnQ9ZnVuY3Rpb24oYW4sVnQpe2Zvcih2YXIgV3Q9MDtXdDxhbi5sZW5ndGg7KXt2YXIgZG49TWF0''@;'; put 'put ''aC5taW4oNjU1MzUsYW4ubGVuZ3RoLVd0KTtmb3IoVnQud3JpdGVfc2hpZnQoMSwrKFd0K2RuPT1hbi5sZW5ndGgpKSxWdC53cml0ZV9zaGlmdCgyLGRuKSxWdC53cml0ZV9zaGlmdCgyLDY1NTM1Jn5kbik7ZG4tLSA+MDspVnRbVnQubCsrXT1hbltXdCsrXX1yZXR1cm4gVnQubH0oX24sYW4p''@;'; put 'put ''O3JldHVybiBhbi5zbGljZSgwLFZ0KX07ZnVuY3Rpb24gbnUocm4sX24sYW4pe3ZhciBWdD0xLFd0PTAsZG49MCxEbj0wLG5yPTAsYnI9cm4ubGVuZ3RoLGpyPURpP25ldyBVaW50MTZBcnJheSgzMik6c2woMzIpO2Zvcihkbj0wO2RuPDMyOysrZG4panJbZG5dPTA7Zm9yKGRuPWJyO2RuPGFu''@;'; put 'put ''OysrZG4pcm5bZG5dPTA7YnI9cm4ubGVuZ3RoO3ZhciBJcj1EaT9uZXcgVWludDE2QXJyYXkoYnIpOnNsKGJyKTtmb3IoZG49MDtkbjxicjsrK2RuKWpyW1d0PXJuW2RuXV0rKyxWdDxXdCYmKFZ0PVd0KSxJcltkbl09MDtmb3IoanJbMF09MCxkbj0xO2RuPD1WdDsrK2RuKWpyW2RuKzE2XT1u''@;'; put 'put ''cj1ucitqcltkbi0xXTw8MTtmb3IoZG49MDtkbjxicjsrK2RuKTAhPShucj1ybltkbl0pJiYoSXJbZG5dPWpyW25yKzE2XSsrKTt2YXIgeGk9MDtmb3IoZG49MDtkbjxicjsrK2RuKWlmKDAhPSh4aT1ybltkbl0pKWZvcihucj1BbyhJcltkbl0sVnQpPj5WdC14aSxEbj0oMTw8VnQrNC14aSkt''@;'; put 'put ''MTtEbj49MDstLURuKV9uW25yfERuPDx4aV09MTUmeGl8ZG48PDQ7cmV0dXJuIFZ0fXZhciB0bD1EaT9uZXcgVWludDE2QXJyYXkoNTEyKTpzbCg1MTIpLEt0PURpP25ldyBVaW50MTZBcnJheSgzMik6c2woMzIpO2lmKCFEaSl7Zm9yKHZhciBnbj0wO2duPDUxMjsrK2duKXRsW2duXT0wO2Zv''@;'; put 'put ''cihnbj0wO2duPDMyOysrZ24pS3RbZ25dPTB9IWZ1bmN0aW9uKCl7Zm9yKHZhciBybj1bXSxfbj0wO19uPDMyO19uKyspcm4ucHVzaCg1KTtudShybixLdCwzMik7dmFyIGFuPVtdO2Zvcihfbj0wO19uPD0xNDM7X24rKylhbi5wdXNoKDgpO2Zvcig7X248PTI1NTtfbisrKWFuLnB1c2goOSk7''@;'; put 'put ''Zm9yKDtfbjw9Mjc5O19uKyspYW4ucHVzaCg3KTtmb3IoO19uPD0yODc7X24rKylhbi5wdXNoKDgpO251KGFuLHRsLDI4OCl9KCk7dmFyIFJuPURpP25ldyBVaW50MTZBcnJheSgzMjc2OCk6c2woMzI3NjgpLFdyPURpP25ldyBVaW50MTZBcnJheSgzMjc2OCk6c2woMzI3NjgpLFhuPURpP25l''@;'; put 'put ''dyBVaW50MTZBcnJheSgxMjgpOnNsKDEyOCksZWk9MSxpcj0xO2Z1bmN0aW9uIHJpKHJuLF9uKXt2YXIgYW49TW4ocm4sX24pKzI1NyxWdD1Nbihybixfbis9NSkrMSxXdD1mdW5jdGlvbiB0YShybixfbil7dmFyIGFuPTcmX24sVnQ9X24+Pj4zO3JldHVybihybltWdF18KGFuPD00PzA6cm5b''@;'; put 'put ''VnQrMV08PDgpKT4+PmFuJjE1fShybixfbis9NSkrNDtfbis9NDtmb3IodmFyIGRuPTAsRG49RGk/bmV3IFVpbnQ4QXJyYXkoMTkpOnNsKDE5KSxucj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sYnI9MSxqcj1EaT9uZXcgVWludDhBcnJheSg4KTpzbCg4KSxJcj1E''@;'; put 'put ''aT9uZXcgVWludDhBcnJheSg4KTpzbCg4KSx4aT1Ebi5sZW5ndGgsbGk9MDtsaTxXdDsrK2xpKURuW0NpW2xpXV09ZG49aGkocm4sX24pLGJyPGRuJiYoYnI9ZG4pLGpyW2RuXSsrLF9uKz0zO3ZhciBDbz0wO2ZvcihqclswXT0wLGxpPTE7bGk8PWJyOysrbGkpSXJbbGldPUNvPUNvK2pyW2xp''@;'; put 'put ''LTFdPDwxO2ZvcihsaT0wO2xpPHhpOysrbGkpMCE9KENvPURuW2xpXSkmJihucltsaV09SXJbQ29dKyspO3ZhciBwbz0wO2ZvcihsaT0wO2xpPHhpOysrbGkpaWYoMCE9KHBvPURuW2xpXSkpe0NvPVlvW25yW2xpXV0+PjgtcG87Zm9yKHZhciBWaT0oMTw8Ny1wbyktMTtWaT49MDstLVZpKVhu''@;'; put 'put ''W0NvfFZpPDxwb109NyZwb3xsaTw8M312YXIgVW89W107Zm9yKGJyPTE7VW8ubGVuZ3RoPGFuK1Z0Oylzd2l0Y2goQ289WG5bTXMocm4sX24pXSxfbis9NyZDbyxDbz4+Pj0zKXtjYXNlIDE2OmZvcihkbj0zK3hvKHJuLF9uKSxfbis9MixDbz1Vb1tVby5sZW5ndGgtMV07ZG4tLSA+MDspVW8u''@;'; put 'put ''cHVzaChDbyk7YnJlYWs7Y2FzZSAxNzpmb3IoZG49MytoaShybixfbiksX24rPTM7ZG4tLSA+MDspVW8ucHVzaCgwKTticmVhaztjYXNlIDE4OmZvcihkbj0xMStNcyhybixfbiksX24rPTc7ZG4tLSA+MDspVW8ucHVzaCgwKTticmVhaztkZWZhdWx0OlVvLnB1c2goQ28pLGJyPENvJiYoYnI9''@;'; put 'put ''Q28pfXZhciB0aT1Vby5zbGljZSgwLGFuKSx6bD1Vby5zbGljZShhbik7Zm9yKGxpPWFuO2xpPDI4NjsrK2xpKXRpW2xpXT0wO2ZvcihsaT1WdDtsaTwzMDsrK2xpKXpsW2xpXT0wO3JldHVybiBlaT1udSh0aSxSbiwyODYpLGlyPW51KHpsLFdyLDMwKSxfbn1mdW5jdGlvbiBpaShybixfbil7''@;'; put 'put ''dmFyIFZ0PWZ1bmN0aW9uIG1vKHJuLF9uKXtpZigzPT1yblswXSYmISgzJnJuWzFdKSlyZXR1cm5bRyhfbiksMl07Zm9yKHZhciBhbj0wLFZ0PTAsV3Q9Yihfbnx8MTw8MTgpLGRuPTAsRG49V3QubGVuZ3RoPj4+MCxucj0wLGJyPTA7ISgxJlZ0KTspaWYoVnQ9aGkocm4sYW4pLGFuKz0zLFZ0''@;'; put 'put ''Pj4+MSlmb3IoVnQ+Pj4xPT0xPyhucj05LGJyPTUpOihhbj1yaShybixhbiksbnI9ZWksYnI9aXIpLCFfbiYmRG48ZG4rMzI3NjcmJihEbj0oV3Q9RWwoV3QsZG4rMzI3NjcpKS5sZW5ndGgpOzspe3ZhciBJcj15cyhybixhbixucikseGk9VnQ+Pj4xPT0xP3RsW0lyXTpSbltJcl07aWYoYW4r''@;'; put 'put ''PTE1JnhpLCh4aT4+Pj00KT4+PjgmMjU1KXtpZigyNTY9PXhpKWJyZWFrO3ZhciBsaT0oeGktPTI1Nyk8OD8wOnhpLTQ+PjI7bGk+NSYmKGxpPTApO3ZhciBDbz1kbitCclt4aV07bGk+MCYmKENvKz15cyhybixhbixsaSksYW4rPWxpKSxJcj15cyhybixhbixiciksYW4rPTE1Jih4aT1WdD4+''@;'; put 'put ''PjE9PTE/S3RbSXJdOldyW0lyXSk7dmFyIHBvPSh4aT4+Pj00KTw0PzA6eGktMj4+MSxWaT1qaVt4aV07Zm9yKHBvPjAmJihWaSs9eXMocm4sYW4scG8pLGFuKz1wbyksIV9uJiZEbjxDbyYmKERuPShXdD1FbChXdCxDbykpLmxlbmd0aCk7ZG48Q287KVd0W2RuXT1XdFtkbi1WaV0sKytkbn1l''@;'; put 'put ''bHNlIFd0W2RuKytdPXhpfWVsc2V7NyZhbiYmKGFuKz04LSg3JmFuKSk7dmFyIGpyPXJuW2FuPj4+M118cm5bMSsoYW4+Pj4zKV08PDg7aWYoYW4rPTMyLCFfbiYmRG48ZG4ranImJihEbj0oV3Q9RWwoV3QsZG4ranIpKS5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBybi5jb3B5KXJuLmNv''@;'; put 'put ''cHkoV3QsZG4sYW4+Pj4zLChhbj4+PjMpK2pyKSxkbis9anIsYW4rPTgqanI7ZWxzZSBmb3IoO2pyLS0gPjA7KVd0W2RuKytdPXJuW2FuPj4+M10sYW4rPTh9cmV0dXJuW19uP1d0Old0LnNsaWNlKDAsZG4pLGFuKzc+Pj4zXX0ocm4uc2xpY2Uocm4ubHx8MCksX24pO3JldHVybiBybi5sKz1W''@;'; put 'put ''dFsxXSxWdFswXX1mdW5jdGlvbiB6aShybixfbil7aWYoIXJuKXRocm93IG5ldyBFcnJvcihfbik7dHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLmVycm9yKF9uKX1mdW5jdGlvbiBKcihybixfbil7dmFyIGFuPXJuO29sKGFuLDApO3ZhciBkbj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpb''@;'; put 'put ''XX07dW4oZG4se3Jvb3Q6X24ucm9vdH0pO2Zvcih2YXIgRG49YW4ubGVuZ3RoLTQ7KDgwIT1hbltEbl18fDc1IT1hbltEbisxXXx8NSE9YW5bRG4rMl18fDYhPWFuW0RuKzNdKSYmRG4+PTA7KS0tRG47YW4ubD1Ebis0LGFuLmwrPTQ7dmFyIG5yPWFuLnJlYWRfc2hpZnQoMik7YW4ubCs9Njt2''@;'; put 'put ''YXIgYnI9YW4ucmVhZF9zaGlmdCg0KTtmb3IoYW4ubD1icixEbj0wO0RuPG5yOysrRG4pe2FuLmwrPTIwO3ZhciBqcj1hbi5yZWFkX3NoaWZ0KDQpLElyPWFuLnJlYWRfc2hpZnQoNCkseGk9YW4ucmVhZF9zaGlmdCgyKSxsaT1hbi5yZWFkX3NoaWZ0KDIpLENvPWFuLnJlYWRfc2hpZnQoMik7''@;'; put 'put ''YW4ubCs9ODt2YXIgcG89YW4ucmVhZF9zaGlmdCg0KSxWaT12ZShhbi5zbGljZShhbi5sK3hpLGFuLmwreGkrbGkpKTthbi5sKz14aStsaStDbzt2YXIgVW89YW4ubDthbi5sPXBvKzQsd3MoYW4sanIsSXIsZG4sVmkpLGFuLmw9VW99cmV0dXJuIGRufWZ1bmN0aW9uIHdzKHJuLF9uLGFuLFZ0''@;'; put 'put ''LFd0KXtybi5sKz0yO3ZhciBkbj1ybi5yZWFkX3NoaWZ0KDIpLERuPXJuLnJlYWRfc2hpZnQoMiksbnI9ZnVuY3Rpb24gX2Uocm4pe3ZhciBfbj02NTUzNSZybi5yZWFkX3NoaWZ0KDIpLGFuPTY1NTM1JnJuLnJlYWRfc2hpZnQoMiksVnQ9bmV3IERhdGUsV3Q9MzEmYW4sZG49MTUmKGFuPj4+''@;'; put 'put ''PTUpO2FuPj4+PTQsVnQuc2V0TWlsbGlzZWNvbmRzKDApLFZ0LnNldEZ1bGxZZWFyKGFuKzE5ODApLFZ0LnNldE1vbnRoKGRuLTEpLFZ0LnNldERhdGUoV3QpO3ZhciBEbj0zMSZfbixucj02MyYoX24+Pj49NSk7cmV0dXJuIFZ0LnNldEhvdXJzKF9uPj4+PTYpLFZ0LnNldE1pbnV0ZXMobnIp''@;'; put 'put ''LFZ0LnNldFNlY29uZHMoRG48PDEpLFZ0fShybik7aWYoODI1NyZkbil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7Zm9yKHZhciBicj1ybi5yZWFkX3NoaWZ0KDQpLGpyPXJuLnJlYWRfc2hpZnQoNCksSXI9cm4ucmVhZF9zaGlmdCg0KSx4aT1ybi5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLGxpPXJuLnJlYWRfc2hpZnQoMiksQ289IiIscG89MDtwbzx4aTsrK3BvKUNvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJuW3JuLmwrK10pO2lmKGxpKXt2YXIgVmk9dmUocm4uc2xpY2Uocm4ubCxybi5sK2xpKSk7KFZpWzIxNTg5XXx8e30pLm10JiYobnI9VmlbMjE1ODldLm10''@;'; put 'put ''KSwoKFd0fHx7fSlbMjE1ODldfHx7fSkubXQmJihucj1XdFsyMTU4OV0ubXQpfXJuLmwrPWxpO3ZhciBVbz1ybi5zbGljZShybi5sLHJuLmwranIpO3N3aXRjaChEbil7Y2FzZSA4OlVvPWZ1bmN0aW9uIFNuKHJuLF9uKXtpZighdnIpcmV0dXJuIGlpKHJuLF9uKTt2YXIgVnQ9bmV3KDAsdnIu''@;'; put 'put ''SW5mbGF0ZVJhdyksV3Q9VnQuX3Byb2Nlc3NDaHVuayhybi5zbGljZShybi5sKSxWdC5fZmluaXNoRmx1c2hGbGFnKTtyZXR1cm4gcm4ubCs9VnQuYnl0ZXNSZWFkLFd0fShybixJcik7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAg''@;'; put 'put ''Q29tcHJlc3Npb24gbWV0aG9kICIrRG4pfXZhciB0aT0hMTs4JmRuJiYoMTM0Njk1NzYwPT0oYnI9cm4ucmVhZF9zaGlmdCg0KSkmJihicj1ybi5yZWFkX3NoaWZ0KDQpLHRpPSEwKSxqcj1ybi5yZWFkX3NoaWZ0KDQpLElyPXJuLnJlYWRfc2hpZnQoNCkpLGpyIT1fbiYmemkodGksIkJhZCBj''@;'; put 'put ''b21wcmVzc2VkIHNpemU6ICIrX24rIiAhPSAiK2pyKSxJciE9YW4mJnppKHRpLCJCYWQgdW5jb21wcmVzc2VkIHNpemU6ICIrYW4rIiAhPSAiK0lyKTt2YXIgemw9T2UuYnVmKFVvLDApO2JyPj4wIT16bD4+MCYmemkodGksIkJhZCBDUkMzMiBjaGVja3N1bTogIiticisiICE9ICIremwpLGps''@;'; put 'put ''KFZ0LENvLFVvLHt1bnNhZmU6ITAsbXQ6bnJ9KX1mdW5jdGlvbiBqbChybixfbixhbixWdCl7dmFyIFd0PVZ0JiZWdC51bnNhZmU7V3R8fHVuKHJuKTt2YXIgZG49IVd0JiZCZS5maW5kKHJuLF9uKTtpZighZG4pe3ZhciBEbj1ybi5GdWxsUGF0aHNbMF07X24uc2xpY2UoMCxEbi5sZW5ndGgp''@;'; put 'put ''PT1Ebj9Ebj1fbjooIi8iIT1Ebi5zbGljZSgtMSkmJihEbis9Ii8iKSxEbj0oRG4rX24pLnJlcGxhY2UoIi8vIiwiLyIpKSxkbj17bmFtZTpyZShfbiksdHlwZToyfSxybi5GaWxlSW5kZXgucHVzaChkbikscm4uRnVsbFBhdGhzLnB1c2goRG4pLFd0fHxCZS51dGlscy5jZmJfZ2Mocm4pfXJl''@;'; put 'put ''dHVybiBkbi5jb250ZW50PWFuLGRuLnNpemU9YW4/YW4ubGVuZ3RoOjAsVnQmJihWdC5DTFNJRCYmKGRuLmNsc2lkPVZ0LkNMU0lEKSxWdC5tdCYmKGRuLm10PVZ0Lm10KSxWdC5jdCYmKGRuLmN0PVZ0LmN0KSksZG59cmV0dXJuIFAuZmluZD1mdW5jdGlvbiBlcihybixfbil7dmFyIGFuPXJu''@;'; put 'put ''LkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oYnIpe3JldHVybiBici50b1VwcGVyQ2FzZSgpfSksVnQ9YW4ubWFwKGZ1bmN0aW9uKGJyKXt2YXIganI9YnIuc3BsaXQoIi8iKTtyZXR1cm4ganJbanIubGVuZ3RoLSgiLyI9PWJyLnNsaWNlKC0xKT8yOjEpXX0pLFd0PSExOzQ3PT09X24uY2hhckNv''@;'; put 'put ''ZGVBdCgwKT8oV3Q9ITAsX249YW5bMF0uc2xpY2UoMCwtMSkrX24pOld0PS0xIT09X24uaW5kZXhPZigiLyIpO3ZhciBkbj1fbi50b1VwcGVyQ2FzZSgpLERuPSEwPT09V3Q/YW4uaW5kZXhPZihkbik6VnQuaW5kZXhPZihkbik7aWYoLTEhPT1EbilyZXR1cm4gcm4uRmlsZUluZGV4W0RuXTt2''@;'; put 'put ''YXIgbnI9IWRuLm1hdGNoKHApO2Zvcihkbj1kbi5yZXBsYWNlKHYsIiIpLG5yJiYoZG49ZG4ucmVwbGFjZShwLCIhIikpLERuPTA7RG48YW4ubGVuZ3RoOysrRG4paWYoKG5yP2FuW0RuXS5yZXBsYWNlKHAsIiEiKTphbltEbl0pLnJlcGxhY2UodiwiIik9PWRufHwobnI/VnRbRG5dLnJlcGxh''@;'; put 'put ''Y2UocCwiISIpOlZ0W0RuXSkucmVwbGFjZSh2LCIiKT09ZG4pcmV0dXJuIHJuLkZpbGVJbmRleFtEbl07cmV0dXJuIG51bGx9LFAucmVhZD1mdW5jdGlvbiBLbihybixfbil7c3dpdGNoKF9uJiZfbi50eXBlfHwiYmFzZTY0Iil7Y2FzZSJmaWxlIjpyZXR1cm4gZnVuY3Rpb24gcG4ocm4sX24p''@;'; put 'put ''e3JldHVybiBIZSgpLFZlKFNlLnJlYWRGaWxlU3luYyhybiksX24pfShybixfbik7Y2FzZSJiYXNlNjQiOnJldHVybiBWZShEKHNlLmRlY29kZShybikpLF9uKTtjYXNlImJpbmFyeSI6cmV0dXJuIFZlKEQocm4pLF9uKX1yZXR1cm4gVmUocm4sX24pfSxQLnBhcnNlPVZlLFAud3JpdGU9ZnVu''@;'; put 'put ''Y3Rpb24gVG4ocm4sX24pe3ZhciBhbj1Bbihybixfbik7c3dpdGNoKF9uJiZfbi50eXBlKXtjYXNlImZpbGUiOnJldHVybiBIZSgpLFNlLndyaXRlRmlsZVN5bmMoX24uZmlsZW5hbWUsYW4pLGFuO2Nhc2UiYmluYXJ5IjpyZXR1cm4gdXIoYW4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gc2UuZW5j''@;'; put 'put ''b2RlKHVyKGFuKSl9cmV0dXJuIGFufSxQLndyaXRlRmlsZT1mdW5jdGlvbiBRcihybixfbixhbil7SGUoKTt2YXIgVnQ9QW4ocm4sYW4pO1NlLndyaXRlRmlsZVN5bmMoX24sVnQpfSxQLnV0aWxzPXtjZmJfbmV3OmZ1bmN0aW9uIG1sKHJuKXt2YXIgX249e307cmV0dXJuIHVuKF9uLHJuKSxf''@;'; put 'put ''bn0sY2ZiX2FkZDpqbCxjZmJfZGVsOmZ1bmN0aW9uIGhhKHJuLF9uKXt1bihybik7dmFyIGFuPUJlLmZpbmQocm4sX24pO2lmKGFuKWZvcih2YXIgVnQ9MDtWdDxybi5GaWxlSW5kZXgubGVuZ3RoOysrVnQpaWYocm4uRmlsZUluZGV4W1Z0XT09YW4pcmV0dXJuIHJuLkZpbGVJbmRleC5zcGxp''@;'; put 'put ''Y2UoVnQsMSkscm4uRnVsbFBhdGhzLnNwbGljZShWdCwxKSwhMDtyZXR1cm4hMX0sY2ZiX21vdjpmdW5jdGlvbiB5Zihybixfbixhbil7dW4ocm4pO3ZhciBWdD1CZS5maW5kKHJuLF9uKTtpZihWdClmb3IodmFyIFd0PTA7V3Q8cm4uRmlsZUluZGV4Lmxlbmd0aDsrK1d0KWlmKHJuLkZpbGVJ''@;'; put 'put ''bmRleFtXdF09PVZ0KXJldHVybiBybi5GaWxlSW5kZXhbV3RdLm5hbWU9cmUoYW4pLHJuLkZ1bGxQYXRoc1tXdF09YW4sITA7cmV0dXJuITF9LGNmYl9nYzpmdW5jdGlvbiBvcChybil7em4ocm4sITApfSxSZWFkU2hpZnQ6SGEsQ2hlY2tGaWVsZDpCaCxwcmVwX2Jsb2I6b2wsYmNvbmNhdDpT''@;'; put 'put ''LHVzZV96bGliOmZ1bmN0aW9uIHJyKHJuKXt0cnl7dmFyIGFuPW5ldygwLHJuLkluZmxhdGVSYXcpO2lmKGFuLl9wcm9jZXNzQ2h1bmsobmV3IFVpbnQ4QXJyYXkoWzMsMF0pLGFuLl9maW5pc2hGbHVzaEZsYWcpLCFhbi5ieXRlc1JlYWQpdGhyb3cgbmV3IEVycm9yKCJ6bGliIGRvZXMgbm90''@;'; put 'put ''IGV4cG9zZSBieXRlc1JlYWQiKTt2cj1ybn1jYXRjaChWdCl7Y29uc29sZS5lcnJvcigiY2Fubm90IHVzZSBuYXRpdmUgemxpYjogIisoVnQubWVzc2FnZXx8VnQpKX19LF9kZWZsYXRlUmF3OmdsLF9pbmZsYXRlUmF3OmlpLGNvbnN0czpMaX0sUH0oKTt0cnl7V2U9Rig3ODc3Myl9Y2F0Y2h7''@;'; put 'put ''fWZ1bmN0aW9uIEtlKHkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgeT9IKHkpOkFycmF5LmlzQXJyYXkoeSk/ZnVuY3Rpb24gZyh5KXtpZih0eXBlb2YgVWludDhBcnJheT4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO3JldHVybiBuZXcgVWludDhBcnJheSh5KX0oeSk6eX1m''@;'; put 'put ''dW5jdGlvbiBZZSh5LFAsTCl7aWYodHlwZW9mIFdlPCJ1IiYmV2Uud3JpdGVGaWxlU3luYylyZXR1cm4gTD9XZS53cml0ZUZpbGVTeW5jKHksUCxMKTpXZS53cml0ZUZpbGVTeW5jKHksUCk7dmFyIFE9InV0ZjgiPT1MP0xvKFApOlA7aWYodHlwZW9mIElFX1NhdmVGaWxlPCJ1IilyZXR1cm4g''@;'; put 'put ''SUVfU2F2ZUZpbGUoUSx5KTtpZih0eXBlb2YgQmxvYjwidSIpe3ZhciByZT1uZXcgQmxvYihbS2UoUSldLHt0eXBlOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0ifSk7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5tc1NhdmVCbG9iKXJldHVybiBuYXZpZ2F0b3IubXNTYXZl''@;'; put 'put ''QmxvYihyZSx5KTtpZih0eXBlb2Ygc2F2ZUFzPCJ1IilyZXR1cm4gc2F2ZUFzKHJlLHkpO2lmKHR5cGVvZiBVUkw8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZVUkwuY3JlYXRlT2JqZWN0VVJMKXt2YXIgcGU9VVJMLmNyZWF0ZU9iamVjdFVSTChy''@;'; put 'put ''ZSk7aWYoIm9iamVjdCI9PXR5cGVvZiBjaHJvbWUmJiJmdW5jdGlvbiI9PXR5cGVvZihjaHJvbWUuZG93bmxvYWRzfHx7fSkuZG93bmxvYWQpcmV0dXJuIFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VP''@;'; put 'put ''YmplY3RVUkwocGUpfSw2ZTQpLGNocm9tZS5kb3dubG9hZHMuZG93bmxvYWQoe3VybDpwZSxmaWxlbmFtZTp5LHNhdmVBczohMH0pO3ZhciBfZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aWYobnVsbCE9X2UuZG93bmxvYWQpcmV0dXJuIF9lLmRvd25sb2FkPXksX2UuaHJlZj1wZSxk''@;'; put 'put ''b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKF9lKSxfZS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoX2UpLFVSTC5yZXZva2VPYmplY3RVUkwmJnR5cGVvZiBzZXRUaW1lb3V0PCJ1IiYmc2V0VGltZW91dChmdW5jdGlvbigpe1VSTC5yZXZva2VPYmplY3RVUkwocGUpfSw2ZTQp''@;'; put 'put ''LHBlfX1pZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciB2ZT1GaWxlKHkpO3JldHVybiB2ZS5vcGVuKCJ3IiksdmUuZW5jb2Rpbmc9ImJpbmFyeSIsQXJyYXkuaXNBcnJheShQKSYmKFA9TihQKSksdmUud3JpdGUoUCksdmUuY2xvc2Uo''@;'; put 'put ''KSxQfWNhdGNoKFNlKXtpZighU2UubWVzc2FnZXx8IVNlLm1lc3NhZ2UubWF0Y2goL29uc3RydWN0LykpdGhyb3cgU2V9dGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2F2ZSBmaWxlICIreSl9ZnVuY3Rpb24gbHQoeSl7Zm9yKHZhciBQPU9iamVjdC5rZXlzKHkpLEw9W10sUT0wO1E8UC5sZW5n''@;'; put 'put ''dGg7KytRKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LFBbUV0pJiZMLnB1c2goUFtRXSk7cmV0dXJuIEx9ZnVuY3Rpb24gUGUoeSxQKXtmb3IodmFyIEw9W10sUT1sdCh5KSxyZT0wO3JlIT09US5sZW5ndGg7KytyZSludWxsPT1MW3lbUVtyZV1dW1BdXSYmKExbeVtR''@;'; put 'put ''W3JlXV1bUF1dPVFbcmVdKTtyZXR1cm4gTH1mdW5jdGlvbiBiZSh5KXtmb3IodmFyIFA9W10sTD1sdCh5KSxRPTA7USE9PUwubGVuZ3RoOysrUSlQW3lbTFtRXV1dPUxbUV07cmV0dXJuIFB9ZnVuY3Rpb24gQWUoeSl7Zm9yKHZhciBQPVtdLEw9bHQoeSksUT0wO1EhPT1MLmxlbmd0aDsrK1Ep''@;'; put 'put ''UFt5W0xbUV1dXT1wYXJzZUludChMW1FdLDEwKTtyZXR1cm4gUH12YXIgVWUsaHQscWU9bmV3IERhdGUoMTg5OSwxMSwzMCwwLDAsMCksWGU9MDtmdW5jdGlvbiBNZSgpe1hlPXFlLmdldFRpbWUoKSs2ZTQqKChuZXcgRGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKS1xZS5nZXRUaW1lem9uZU9m''@;'; put 'put ''ZnNldCgpKSxVZT1mdW5jdGlvbihQLEwpe3ZhciBRPVAuZ2V0VGltZSgpO3JldHVybiBMJiYoUS09MTI2MzE2OGU1KSwoUS1YZSkvODY0ZTV9LGh0PWZ1bmN0aW9uKFApe3ZhciBMPW5ldyBEYXRlO3JldHVybiBMLnNldFRpbWUoMjQqUCo2MCo2MCoxZTMrWGUpLEx9fWZ1bmN0aW9uIGl0KHkp''@;'; put 'put ''e3ZhciBQPTAsTD0wLFE9ITEscmU9eS5tYXRjaCgvUChbMC05XC5dK1kpPyhbMC05XC5dK00pPyhbMC05XC5dK0QpP1QoWzAtOVwuXStIKT8oWzAtOVwuXStNKT8oWzAtOVwuXStTKT8vKTtpZighcmUpdGhyb3cgbmV3IEVycm9yKCJ8Iit5KyJ8IGlzIG5vdCBhbiBJU084NjAxIER1cmF0aW9u''@;'; put 'put ''Iik7Zm9yKHZhciBwZT0xO3BlIT1yZS5sZW5ndGg7KytwZSlpZihyZVtwZV0pe3N3aXRjaChMPTEscGU+MyYmKFE9ITApLHJlW3BlXS5zbGljZShyZVtwZV0ubGVuZ3RoLTEpKXtjYXNlIlkiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiAiK3JlW3Bl''@;'; put 'put ''XS5zbGljZShyZVtwZV0ubGVuZ3RoLTEpKTtjYXNlIkQiOkwqPTI0O2Nhc2UiSCI6TCo9NjA7Y2FzZSJNIjppZighUSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogTSIpO0wqPTYwfVArPUwqcGFyc2VJbnQocmVbcGVdLDEwKX1yZXR1cm4gUH1NZSgp''@;'; put 'put ''O3ZhciB1dD1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIik7aXNOYU4odXQuZ2V0RnVsbFllYXIoKSkmJih1dD1uZXcgRGF0ZSgiMi8xOS8xNyIpKTt2YXIgTXQ9MjAxNz09dXQuZ2V0RnVsbFllYXIoKTtmdW5jdGlvbiBIdCh5LFApe3ZhciBMPW5ldyBEYXRlKHkpO2lmKE10''@;'; put 'put ''KXJldHVybiBQPjA/TC5zZXRUaW1lKEwuZ2V0VGltZSgpKzYwKkwuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpOlA8MCYmTC5zZXRUaW1lKEwuZ2V0VGltZSgpLTYwKkwuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpLEw7aWYoeSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIHk7aWYoMTkxNz09dXQu''@;'; put 'put ''Z2V0RnVsbFllYXIoKSYmIWlzTmFOKEwuZ2V0RnVsbFllYXIoKSkpe3ZhciBRPUwuZ2V0RnVsbFllYXIoKTtyZXR1cm4geS5pbmRleE9mKCIiK1EpPi0xfHxMLnNldEZ1bGxZZWFyKEwuZ2V0RnVsbFllYXIoKSsxMDApLEx9dmFyIHJlPXkubWF0Y2goL1xkKy9nKXx8WyIyMDE3IiwiMiIsIjE5''@;'; put 'put ''IiwiMCIsIjAiLCIwIl0scGU9bmV3IERhdGUoK3JlWzBdLCtyZVsxXS0xLCtyZVsyXSwrcmVbM118fDAsK3JlWzRdfHwwLCtyZVs1XXx8MCk7cmV0dXJuIHkuaW5kZXhPZigiWiIpPi0xJiYocGU9bmV3IERhdGUocGUuZ2V0VGltZSgpLTYwKnBlLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSks''@;'; put 'put ''cGV9ZnVuY3Rpb24gUHQoeSl7Zm9yKHZhciBQPSIiLEw9MDtMIT15Lmxlbmd0aDsrK0wpUCs9U3RyaW5nLmZyb21DaGFyQ29kZSh5W0xdKTtyZXR1cm4gUH1mdW5jdGlvbiBvbih5KXtpZigib2JqZWN0IiE9dHlwZW9mIHl8fG51bGw9PXkpcmV0dXJuIHk7aWYoeSBpbnN0YW5jZW9mIERhdGUp''@;'; put 'put ''cmV0dXJuIG5ldyBEYXRlKHkuZ2V0VGltZSgpKTtpZihBcnJheS5pc0FycmF5KHkpKXJldHVybiBmdW5jdGlvbiBDbih5KXtmb3IodmFyIFA9W10sTD0wO0w8eS5sZW5ndGg7KytMKXt2YXIgUT15W0xdOyJvYmplY3QiPT10eXBlb2YgUT9QW0xdPW9uKFEpOm51bGwhPVEmJihQW0xdPVEpfXJl''@;'; put 'put ''dHVybiBQfSh5KTt2YXIgUD17fTtmb3IodmFyIEwgaW4geSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeSxMKSYmKFBbTF09b24oeVtMXSkpO3JldHVybiBQfWZ1bmN0aW9uIFV0KHksUCl7aWYoIm9iamVjdCIhPXR5cGVvZiBQfHxudWxsPT1QKXJldHVybiB5O2Zvcih2''@;'; put 'put ''YXIgTCBpbiBQKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEwpJiYoeVtMXT1vbihQW0xdKSk7cmV0dXJuIHl9ZnVuY3Rpb24gYm4oeSxQKXtmb3IodmFyIEw9IiI7TC5sZW5ndGg8UDspTCs9eTtyZXR1cm4gTH1mdW5jdGlvbiBXbih5KXt2YXIgUD1OdW1iZXIoeSk7''@;'; put 'put ''aWYoIWlzTmFOKFApKXJldHVybiBpc0Zpbml0ZShQKT9QOk5hTjtpZighL1xkLy50ZXN0KHkpKXJldHVybiBQO3ZhciBMPTEsUT15LnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZywiJDEkMiIpLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBMKj0x''@;'; put 'put ''MDAsIiJ9KTtyZXR1cm4gaXNOYU4oUD1OdW1iZXIoUSkpJiYoUT1RLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKHJlLHBlKXtyZXR1cm4gTD0tTCxwZX0pLGlzTmFOKFA9TnVtYmVyKFEpKSk/UDpQL0x9ZnVuY3Rpb24gZW4oeSl7dmFyIFA9bmV3IERhdGUoeSksTD1uZXcgRGF0ZShO''@;'; put 'put ''YU4pLFE9UC5nZXRZZWFyKCkscmU9UC5nZXRNb250aCgpLHBlPVAuZ2V0RGF0ZSgpO3JldHVybiBpc05hTihwZSl8fFE8MHx8UT44MDk5P0w6KHJlPjB8fHBlPjEpJiYxMDEhPVF8fHkudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0''@;'; put 'put ''fG5vdnxkZWMvKT9QOnkubWF0Y2goL1teLTAtOTosXC9cXF0vKT9MOlB9ZnVuY3Rpb24gJG4oeSxQKXtpZihQJiZQLnJhdylyZXR1cm57dDoicyIsdjp5fTtpZigheSlyZXR1cm57dDoieiJ9O2lmKCJUUlVFIj09PXkpcmV0dXJue3Q6ImIiLHY6ITB9O2lmKCJGQUxTRSI9PT15KXJldHVybnt0''@;'; put 'put ''OiJiIix2OiExfTt2YXIgTD0iIixRPU51bWJlcih5KTtpZihpc0Zpbml0ZShRKSlyZXR1cm57dDoibiIsdjpRfTtpZihpc05hTihRKSYmL1xkLy50ZXN0KHkpKXt2YXIgcmU9MSxwZT15LnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZyxmdW5jdGlvbihudCxkdCxDdCl7cmV0dXJuIEx8fChMPSIj''@;'; put 'put ''LCMjMCIpLGR0K0N0fSkucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1wuXGQqLyxmdW5jdGlvbihudCl7THx8KEw9IjAiKSxMKz0iLiI7Zm9yKHZhciBkdD0yO2R0PD1udC5sZW5ndGg7KytkdClMKz0iMCI7cmV0dXJuIG50fSkucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''cmUqPTEwMCxMfHwoTD0iMCIpLEwrPSIlIiwiIn0pO2lmKCFpc05hTihRPU51bWJlcihwZSkpKXJldHVybnt0OiJuIix2OlEvcmUsejpMfTtpZihwZT1wZS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihudCxkdCl7cmV0dXJuIHJlPS1yZSxkdH0pLCFpc05hTihRPU51bWJlcihwZSkp''@;'; put 'put ''KXJldHVybnt0OiJuIix2OlEvcmUsejooTHx8IjAiKSsiXyk7KCIrKEx8fCIwIikrIik7QCJ9fWU6aWYoIVB8fCFQLnJhd0RhdGVzKXt2YXIgX2U9UCYmUC5jZWxsRGF0ZXMsdmU9bmV3IERhdGUoeSksSGU9dmUuZ2V0WWVhcigpLFZlPXZlLmdldE1vbnRoKCksR2U9dmUuZ2V0RGF0ZSgpO2lm''@;'; put 'put ''KGlzTmFOKEdlKXx8SGU8MHx8SGU+ODA5OSlicmVhayBlO2lmKChWZT4wfHxHZT4xKSYmMTAxIT1IZSlyZXR1cm57dDpfZT8iZCI6Im4iLHY6X2U/dmU6VWUodmUpLHo6UC5kYXRlTkZ8fHcuX3RhYmxlWzE0XX07aWYoeS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9qYW58ZmVifG1hcnxhcHJ8bWF5''@;'; put 'put ''fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8pKXJldHVybnt0Ol9lPyJkIjoibiIsdjpfZT92ZTpVZSh2ZSksejpQLmRhdGVORnx8dy5fdGFibGVbMTRdfTtpZih5Lm1hdGNoKC9bXi0wLTk6LFwvXFxdLykpYnJlYWsgZTtyZXR1cm4gdmV9cmV0dXJue3Q6InMiLHY6eX19dmFyIHp0LE5u''@;'; put 'put ''PTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/YikvaSkubGVuZ3RoO2Z1bmN0aW9uIGhuKHkpe3JldHVybiBudWxsIT15JiYheX1mdW5jdGlvbiB3dCh5KXtyZXR1cm4geS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt5LnNsaWNlKDEpfWZ1bmN0aW9uIFh0KHkpe3JldHVybiB5P3kuZGF0YT9VKHku''@;'; put 'put ''ZGF0YSk6eS5hc05vZGVCdWZmZXImJmhlP1UoeS5hc05vZGVCdWZmZXIoKS50b1N0cmluZygiYmluYXJ5IikpOnkuYXNCaW5hcnk/VSh5LmFzQmluYXJ5KCkpOnkuX2RhdGEmJnkuX2RhdGEuZ2V0Q29udGVudD9VKFB0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHkuX2RhdGEuZ2V0Q29u''@;'; put 'put ''dGVudCgpLDApKSk6eS5jb250ZW50JiZ5LnR5cGU/VShQdCh5LmNvbnRlbnQpKTpudWxsOm51bGx9ZnVuY3Rpb24gX3QoeSl7aWYoIXkpcmV0dXJuIG51bGw7aWYoeS5kYXRhKXJldHVybiBCKHkuZGF0YSk7aWYoeS5hc05vZGVCdWZmZXImJmhlKXJldHVybiB5LmFzTm9kZUJ1ZmZlcigpO2lm''@;'; put 'put ''KHkuX2RhdGEmJnkuX2RhdGEuZ2V0Q29udGVudCl7dmFyIFA9eS5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBQP0IoUCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUCl9cmV0dXJuIHkuY29udGVudCYmeS50eXBlP3kuY29udGVudDpudWxsfWZ1bmN0aW9u''@;'; put 'put ''IHZuKHksUCl7Zm9yKHZhciBMPXkuRnVsbFBhdGhzfHxsdCh5LmZpbGVzKSxRPVAudG9Mb3dlckNhc2UoKSxyZT1RLnJlcGxhY2UoL1wvL2csIlxcIikscGU9MDtwZTxMLmxlbmd0aDsrK3BlKXt2YXIgX2U9TFtwZV0udG9Mb3dlckNhc2UoKTtpZihRPT1fZXx8cmU9PV9lKXJldHVybiB5LmZp''@;'; put 'put ''bGVzW0xbcGVdXX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBydCh5LFApe3ZhciBMPXZuKHksUCk7aWYobnVsbD09TCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGZpbGUgIitQKyIgaW4gemlwIik7cmV0dXJuIEx9ZnVuY3Rpb24gSXQoeSxQLEwpe2lmKCFMKXJldHVybiBmdW5jdGlvbiBO''@;'; put 'put ''dCh5KXtyZXR1cm4geSYmIi5iaW4iPT09eS5uYW1lLnNsaWNlKC00KT9fdCh5KTpYdCh5KX0ocnQoeSxQKSk7aWYoIVApcmV0dXJuIG51bGw7dHJ5e3JldHVybiBJdCh5LFApfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBKdCh5LFAsTCl7aWYoIUwpcmV0dXJuIFh0KHJ0KHksUCkpO2lm''@;'; put 'put ''KCFQKXJldHVybiBudWxsO3RyeXtyZXR1cm4gSnQoeSxQKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gRHQoeSxQLEwpe2lmKCFMKXJldHVybiBfdChydCh5LFApKTtpZighUClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIER0KHksUCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFl0''@;'; put 'put ''KHksUCxMKXt5LkZ1bGxQYXRocz9CZS51dGlscy5jZmJfYWRkKHksUCxMKTp5LmZpbGUoUCxMKX1mdW5jdGlvbiB5bigpe3JldHVybiB6dD9uZXcgenQ6QmUudXRpbHMuY2ZiX25ldygpfWZ1bmN0aW9uIHhuKHksUCl7dmFyIEw7aWYoenQpc3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOkw9''@;'; put 'put ''bmV3IHp0KHkse2Jhc2U2NDohMH0pO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlImFycmF5IjpMPW5ldyB6dCh5LHtiYXNlNjQ6ITF9KTticmVhaztjYXNlImJ1ZmZlciI6TD1uZXcgenQoeSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUC50eXBl''@;'; put 'put ''KX1lbHNlIHN3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0IjpMPUJlLnJlYWQoeSx7dHlwZToiYmFzZTY0In0pO2JyZWFrO2Nhc2UiYmluYXJ5IjpMPUJlLnJlYWQoeSx7dHlwZToiYmluYXJ5In0pO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpMPUJlLnJlYWQoeSx7dHlwZToiYnVm''@;'; put 'put ''ZmVyIn0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9cmV0dXJuIEx9ZnVuY3Rpb24gc24oeSxQKXtpZigiLyI9PXkuY2hhckF0KDApKXJldHVybiB5LnNsaWNlKDEpO3ZhciBMPVAuc3BsaXQoIi8iKTsiLyIhPVAuc2xpY2UoLTEp''@;'; put 'put ''JiZMLnBvcCgpO2Zvcih2YXIgUT15LnNwbGl0KCIvIik7MCE9PVEubGVuZ3RoOyl7dmFyIHJlPVEuc2hpZnQoKTsiLi4iPT09cmU/TC5wb3AoKToiLiIhPT1yZSYmTC5wdXNoKHJlKX1yZXR1cm4gTC5qb2luKCIvIil9dHlwZW9mIEpTWmlwU3luYzwidSImJih6dD1KU1ppcFN5bmMpLGF0LmV4''@;'; put 'put ''cG9ydHMmJnR5cGVvZiB6dD4idSImJih6dD1GKDc1NDQ2KSk7dmFyIEJuPSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+XHJcbicsT249Lyg/OlteIlxzPz5cL10rKVxzKj1ccyooKD86IikoPzpbXiJdKj8pKD86Iil8KD86JykoPzpbXidd''@;'; put 'put ''Kj8pKD86Jyl8KD86W14nIj5cc10rKSkvZywkdD0vPFtcL1w/XT9bYS16QS1aMC05Ol8tXSsoPzpccytbXiJccz8+XC9dK1xzKj1ccyooPzoiW14iXSoifCdbXiddKid8W14nIj5ccz1dKykpKlxzP1tcL1w/XT8+L2c7Qm4ubWF0Y2goJHQpfHwoJHQ9LzxbXj5dKj4vZyk7dmFyIEZuPS88XHcq''@;'; put 'put ''Oi8sbmk9LzwoXC8/KVx3KzovO2Z1bmN0aW9uIGxuKHksUCxMKXtmb3IodmFyIFE9e30scmU9MCxwZT0wO3JlIT09eS5sZW5ndGgmJjMyIT09KHBlPXkuY2hhckNvZGVBdChyZSkpJiYxMCE9PXBlJiYxMyE9PXBlOysrcmUpO2lmKFB8fChRWzBdPXkuc2xpY2UoMCxyZSkpLHJlPT09eS5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIFE7dmFyIF9lPXkubWF0Y2goT24pLHZlPTAsU2U9IiIsSGU9MCxWZT0iIixHZT0iIixudD0xO2lmKF9lKWZvcihIZT0wO0hlIT1fZS5sZW5ndGg7KytIZSl7Zm9yKEdlPV9lW0hlXSxwZT0wO3BlIT1HZS5sZW5ndGgmJjYxIT09R2UuY2hhckNvZGVBdChwZSk7KytwZSk7Zm9y''@;'; put 'put ''KFZlPUdlLnNsaWNlKDAscGUpLnRyaW0oKTszMj09R2UuY2hhckNvZGVBdChwZSsxKTspKytwZTtmb3IobnQ9MzQ9PShyZT1HZS5jaGFyQ29kZUF0KHBlKzEpKXx8Mzk9PXJlPzE6MCxTZT1HZS5zbGljZShwZSsxK250LEdlLmxlbmd0aC1udCksdmU9MDt2ZSE9VmUubGVuZ3RoJiY1OCE9PVZl''@;'; put 'put ''LmNoYXJDb2RlQXQodmUpOysrdmUpO2lmKHZlPT09VmUubGVuZ3RoKVZlLmluZGV4T2YoIl8iKT4wJiYoVmU9VmUuc2xpY2UoMCxWZS5pbmRleE9mKCJfIikpKSxRW1ZlXT1TZSxMfHwoUVtWZS50b0xvd2VyQ2FzZSgpXT1TZSk7ZWxzZXt2YXIgZHQ9KDU9PT12ZSYmInhtbG5zIj09PVZlLnNs''@;'; put 'put ''aWNlKDAsNSk/InhtbG5zIjoiIikrVmUuc2xpY2UodmUrMSk7aWYoUVtkdF0mJiJleHQiPT1WZS5zbGljZSh2ZS0zLHZlKSljb250aW51ZTtRW2R0XT1TZSxMfHwoUVtkdC50b0xvd2VyQ2FzZSgpXT1TZSl9fXJldHVybiBRfWZ1bmN0aW9uIGpuKHkpe3JldHVybiB5LnJlcGxhY2UobmksIjwk''@;'; put 'put ''MSIpfXZhciBxcj17IiZxdW90OyI6JyInLCImYXBvczsiOiInIiwiJmd0OyI6Ij4iLCImbHQ7IjoiPCIsIiZhbXA7IjoiJiJ9LGdpPWJlKHFyKSx4cj1mdW5jdGlvbigpe3ZhciB5PS8mKD86cXVvdHxhcG9zfGd0fGx0fGFtcHwjeD8oW1xkYS1mQS1GXSspKTsvZ2ksUD0vX3goW1xkYS1mQS1G''@;'; put 'put ''XXs0fSlfL2dpO3JldHVybiBmdW5jdGlvbiBMKFEpe3ZhciByZT1RKyIiLHBlPXJlLmluZGV4T2YoIjwhW0NEQVRBWyIpO2lmKC0xPT1wZSlyZXR1cm4gcmUucmVwbGFjZSh5LGZ1bmN0aW9uKHZlLFNlKXtyZXR1cm4gcXJbdmVdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KFNlLHZl''@;'; put 'put ''LmluZGV4T2YoIngiKT4tMT8xNjoxMCkpfHx2ZX0pLnJlcGxhY2UoUCxmdW5jdGlvbih2ZSxTZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoU2UsMTYpKX0pO3ZhciBfZT1yZS5pbmRleE9mKCJdXT4iKTtyZXR1cm4gTChyZS5zbGljZSgwLHBlKSkrcmUuc2xpY2UocGUr''@;'; put 'put ''OSxfZSkrTChyZS5zbGljZShfZSszKSl9fSgpLFVpPS9bJjw+JyJdL2csS3I9L1tcdTAwMDAtXHUwMDA4XHUwMDBiLVx1MDAxZl0vZyxubz0vX3hbMC05YS1mQS1GXXs0fV8vZztmdW5jdGlvbiBGcih5KXtyZXR1cm4oeSsiIikucmVwbGFjZShubywiX3gwMDVGJCYiKS5yZXBsYWNlKFVpLGZ1''@;'; put 'put ''bmN0aW9uKEwpe3JldHVybiBnaVtMXX0pLnJlcGxhY2UoS3IsZnVuY3Rpb24oTCl7cmV0dXJuIl94IisoIjAwMCIrTC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyJfIn0pfWZ1bmN0aW9uIHFpKHkpe3JldHVybiBGcih5KS5yZXBsYWNlKC9cbi9nLCJfeDAwMGFfIil9''@;'; put 'put ''ZnVuY3Rpb24gSmkoeSl7cmV0dXJuIEZyKHkpLnJlcGxhY2UoLyAvZywiX3gwMDIwXyIpfXZhciBhbz0vW1x1MDAwMC1cdTAwMWZdL2c7ZnVuY3Rpb24gcm8oeSl7cmV0dXJuKHkrIiIpLnJlcGxhY2UoVWksZnVuY3Rpb24oTCl7cmV0dXJuIGdpW0xdfSkucmVwbGFjZSgvXG4vZywiPGJyLz4i''@;'; put 'put ''KS5yZXBsYWNlKGFvLGZ1bmN0aW9uKEwpe3JldHVybiImI3giKygiMDAwIitMLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIjsifSl9ZnVuY3Rpb24gaW8oeSl7cmV0dXJuKHkrIiIpLnJlcGxhY2UoVWksZnVuY3Rpb24oTCl7cmV0dXJuIGdpW0xdfSkucmVwbGFjZShh''@;'; put 'put ''byxmdW5jdGlvbihMKXtyZXR1cm4iJiN4IitMLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIjsifSl9dmFyIEdpPWZ1bmN0aW9uKCl7dmFyIHk9LyYjKFxkKyk7L2c7ZnVuY3Rpb24gUChMLFEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KFEs''@;'; put 'put ''MTApKX1yZXR1cm4gZnVuY3Rpb24oUSl7cmV0dXJuIFEucmVwbGFjZSh5LFApfX0oKSxobz1mdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC8oXHJcbnxbXHJcbl0pL2csIiYjMTA7Iil9O2Z1bmN0aW9uIHlyKHkpe3N3aXRjaCh5KXtjYXNlIDE6Y2FzZSEwOmNhc2UiMSI6Y2FzZSJ0cnVl''@;'; put 'put ''IjpjYXNlIlRSVUUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fXZhciBQaT1mdW5jdGlvbihQKXtmb3IodmFyIEw9IiIsUT0wLHJlPTAscGU9MCxfZT0wLHZlPTAsU2U9MDtRPFAubGVuZ3RoOykocmU9UC5jaGFyQ29kZUF0KFErKykpPDEyOD9MKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJl''@;'; put 'put ''KToocGU9UC5jaGFyQ29kZUF0KFErKykscmU+MTkxJiZyZTwyMjQ/KHZlPSgzMSZyZSk8PDYsdmV8PTYzJnBlLEwrPVN0cmluZy5mcm9tQ2hhckNvZGUodmUpKTooX2U9UC5jaGFyQ29kZUF0KFErKykscmU8MjQwP0wrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JnJlKTw8MTJ8KDYzJnBlKTw8''@;'; put 'put ''Nnw2MyZfZSk6KFNlPSgoNyZyZSk8PDE4fCg2MyZwZSk8PDEyfCg2MyZfZSk8PDZ8NjMmKHZlPVAuY2hhckNvZGVBdChRKyspKSktNjU1MzYsTCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoU2U+Pj4xMCYxMDIzKSksTCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZTZSkp''@;'; put 'put ''KSkpO3JldHVybiBMfSxMbz1mdW5jdGlvbih5KXtmb3IodmFyIFA9W10sTD0wLFE9MCxyZT0wO0w8eS5sZW5ndGg7KXN3aXRjaChRPXkuY2hhckNvZGVBdChMKyspLCEwKXtjYXNlIFE8MTI4OlAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFEpKTticmVhaztjYXNlIFE8MjA0ODpQLnB1c2go''@;'; put 'put ''U3RyaW5nLmZyb21DaGFyQ29kZSgxOTIrKFE+PjYpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZRKSkpO2JyZWFrO2Nhc2UgUT49NTUyOTYmJlE8NTczNDQ6US09NTUyOTYscmU9eS5jaGFyQ29kZUF0KEwrKyktNTYzMjArKFE8PDEwKSxQLnB1c2goU3RyaW5nLmZyb21D''@;'; put 'put ''aGFyQ29kZSgyNDArKHJlPj4xOCY3KSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsocmU+PjEyJjYzKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsocmU+PjYmNjMpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZyZSkpKTticmVhaztkZWZh''@;'; put 'put ''dWx0OlAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoUT4+MTIpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhRPj42JjYzKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmUSkpKX1yZXR1cm4gUC5qb2luKCIiKX07aWYoaGUpe3ZhciBocz1mdW5j''@;'; put 'put ''dGlvbihQKXt2YXIgUSxyZSxTZSxMPUJ1ZmZlci5hbGxvYygyKlAubGVuZ3RoKSxwZT0xLF9lPTAsdmU9MDtmb3IocmU9MDtyZTxQLmxlbmd0aDtyZSs9cGUpcGU9MSwoU2U9UC5jaGFyQ29kZUF0KHJlKSk8MTI4P1E9U2U6U2U8MjI0PyhRPTY0KigzMSZTZSkrKDYzJlAuY2hhckNvZGVBdChy''@;'; put 'put ''ZSsxKSkscGU9Mik6U2U8MjQwPyhRPTQwOTYqKDE1JlNlKSs2NCooNjMmUC5jaGFyQ29kZUF0KHJlKzEpKSsoNjMmUC5jaGFyQ29kZUF0KHJlKzIpKSxwZT0zKToocGU9NCxRPTI2MjE0NCooNyZTZSkrNDA5NiooNjMmUC5jaGFyQ29kZUF0KHJlKzEpKSs2NCooNjMmUC5jaGFyQ29kZUF0KHJl''@;'; put 'put ''KzIpKSsoNjMmUC5jaGFyQ29kZUF0KHJlKzMpKSx2ZT01NTI5NisoKFEtPTY1NTM2KT4+PjEwJjEwMjMpLFE9NTYzMjArKDEwMjMmUSkpLDAhPT12ZSYmKExbX2UrK109MjU1JnZlLExbX2UrK109dmU+Pj44LHZlPTApLExbX2UrK109USUyNTYsTFtfZSsrXT1RPj4+ODtyZXR1cm4gTC5zbGlj''@;'; put 'put ''ZSgwLF9lKS50b1N0cmluZygidWNzMiIpfSxycz0iZm9vIGJhciBiYXpceGUyXHg5OFx4ODNceGYwXHg5Zlx4OGRceGEzIjtQaShycyk9PWhzKHJzKSYmKFBpPWhzKTt2YXIgTGM9ZnVuY3Rpb24oUCl7cmV0dXJuIHVlKFAsImJpbmFyeSIpLnRvU3RyaW5nKCJ1dGY4Iil9O1BpKHJzKT09TGMo''@;'; put 'put ''cnMpJiYoUGk9TGMpLExvPWZ1bmN0aW9uKHkpe3JldHVybiB1ZSh5LCJ1dGY4IikudG9TdHJpbmcoImJpbmFyeSIpfX12YXIgeSx1bD0oeT17fSxmdW5jdGlvbihMLFEpe3ZhciByZT1MKyJ8IisoUXx8IiIpO3JldHVybiB5W3JlXT95W3JlXTp5W3JlXT1uZXcgUmVnRXhwKCI8KD86XFx3Kzop''@;'; put 'put ''PyIrTCsnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytMKyI+IixRfHwiIil9KSxSYz1mdW5jdGlvbigpe3ZhciB5PVtbIm5ic3AiLCIgIl0sWyJtaWRkb3QiLCJceGI3Il0sWyJxdW90IiwnIiddLFsiYXBvcyIsIiciXSxbImd0''@;'; put 'put ''IiwiPiJdLFsibHQiLCI8Il0sWyJhbXAiLCImIl1dLm1hcChmdW5jdGlvbihQKXtyZXR1cm5bbmV3IFJlZ0V4cCgiJiIrUFswXSsiOyIsImlnIiksUFsxXV19KTtyZXR1cm4gZnVuY3Rpb24oTCl7Zm9yKHZhciBRPUwucmVwbGFjZSgvXltcdFxuXHIgXSsvLCIiKS5yZXBsYWNlKC9bXHRcblxy''@;'; put 'put ''IF0rJC8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoLzxccypbYkJdW3JSXVxzKlwvPz4vZywiXG4iKS5yZXBsYWNlKC88W14+XSo+L2csIiIpLHJlPTA7cmU8eS5sZW5ndGg7KytyZSlRPVEucmVwbGFjZSh5W3JlXVswXSx5W3JlXVsxXSk7cmV0dXJuIFF9fSgpLE4w''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIHk9e307cmV0dXJuIGZ1bmN0aW9uKEwpe3JldHVybiB2b2lkIDAhPT15W0xdP3lbTF06eVtMXT1uZXcgUmVnRXhwKCI8KD86dnQ6KT8iK0wrIj4oW1xcc1xcU10qPyk8Lyg/OnZ0Oik/IitMKyI+IiwiZyIpfX0oKSxzMz0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyxr''@;'; put 'put ''Mj0vPCg/OnZ0OikoW14+XSopPihbXHNcU10qKTwvO2Z1bmN0aW9uIGUwKHksUCl7dmFyIEw9bG4oeSksUT15Lm1hdGNoKE4wKEwuYmFzZVR5cGUpKXx8W10scmU9W107aWYoUS5sZW5ndGghPUwuc2l6ZSl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHZlY3RvciBsZW5n''@;'; put 'put ''dGggIitRLmxlbmd0aCsiICE9ICIrTC5zaXplKTtyZXR1cm4gcmV9cmV0dXJuIFEuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIF9lPXBlLnJlcGxhY2UoczMsIiIpLm1hdGNoKGsyKTtfZSYmcmUucHVzaCh7djpQaShfZVsyXSksdDpfZVsxXX0pfSkscmV9dmFyIHh1PS8oXlxzfFxzJHxcbikv''@;'; put 'put ''O2Z1bmN0aW9uIGZzKHksUCl7cmV0dXJuIjwiK3krKFAubWF0Y2goeHUpPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUCsiPC8iK3krIj4ifWZ1bmN0aW9uIFBhKHkpe3JldHVybiBsdCh5KS5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuIiAiK1ArJz0iJyt5W1BdKyciJ30pLmpvaW4o''@;'; put 'put ''IiIpfWZ1bmN0aW9uIFNyKHksUCxMKXtyZXR1cm4iPCIreSsobnVsbCE9TD9QYShMKToiIikrKG51bGwhPVA/KFAubWF0Y2goeHUpPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUCsiPC8iK3k6Ii8iKSsiPiJ9ZnVuY3Rpb24gUGgoeSxQKXt0cnl7cmV0dXJuIHkudG9JU09TdHJp''@;'; put 'put ''bmcoKS5yZXBsYWNlKC9cLlxkKi8sIiIpfWNhdGNoKEwpe2lmKFApdGhyb3cgTH1yZXR1cm4iIn12YXIgQXIsX2MsaXM9e2RjOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsZGN0ZXJtczoiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIsZGNtaXR5cGU6Imh0dHA6Ly9wdXJs''@;'; put 'put ''Lm9yZy9kYy9kY21pdHlwZS8iLG14OiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9tYWMvZXhjZWwvMjAwOC9tYWluIixyOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIixzanM6Imh0dHA6Ly9z''@;'; put 'put ''Y2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvc2hlZXRqcy9jb3JlLXByb3BlcnRpZXMiLHZ0OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9kb2NQcm9wc1ZUeXBlcyIseHNpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAx''@;'; put 'put ''L1hNTFNjaGVtYS1pbnN0YW5jZSIseHNkOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsbWFpbjpbImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0''@;'; put 'put ''bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvMiJdfSxXaT17bzoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIix4''@;'; put 'put ''OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCIsc3M6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNwcmVhZHNoZWV0IixkdDoidXVpZDpDMkY0MTAxMC02NUIzLTExZDEtQTI5Ri0wMEFBMDBDMTQ4ODIiLG12OiJodHRwOi8vbWFjVm1sU2NoZW1hVXJp''@;'; put 'put ''Iix2OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIsaHRtbDoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9LFNhPWZ1bmN0aW9uKHkpe2Zvcih2YXIgUD1bXSxRPTA7UTx5WzBdLmxlbmd0aDsrK1EpaWYoeVswXVtRXSlmb3IodmFyIHJlPTAscGU9eVswXVtRXS5sZW5n''@;'; put 'put ''dGg7cmU8cGU7cmUrPTEwMjQwKVAucHVzaC5hcHBseShQLHlbMF1bUV0uc2xpY2UocmUscmUrMTAyNDApKTtyZXR1cm4gUH0sRmg9U2EsRXU9ZnVuY3Rpb24oeSxQLEwpe2Zvcih2YXIgUT1bXSxyZT1QO3JlPEw7cmUrPTIpUS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoWW4oeSxyZSkpKTty''@;'; put 'put ''ZXR1cm4gUS5qb2luKCIiKS5yZXBsYWNlKHYsIiIpfSxBcz1FdSxuMD1mdW5jdGlvbih5LFAsTCl7Zm9yKHZhciBRPVtdLHJlPVA7cmU8UCtMOysrcmUpUS5wdXNoKCgiMCIreVtyZV0udG9TdHJpbmcoMTYpKS5zbGljZSgtMikpO3JldHVybiBRLmpvaW4oIiIpfSxxYT1uMCx2Yz1mdW5jdGlv''@;'; put 'put ''bih5LFAsTCl7Zm9yKHZhciBRPVtdLHJlPVA7cmU8TDtyZSsrKVEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFFpKHkscmUpKSk7cmV0dXJuIFEuam9pbigiIil9LEhoPXZjLElzPWZ1bmN0aW9uKHksUCl7dmFyIEw9eWkoeSxQKTtyZXR1cm4gTD4wP3ZjKHksUCs0LFArNCtMLTEpOiIifSxi''@;'; put 'put ''bz1JcyxyMD1mdW5jdGlvbih5LFApe3ZhciBMPXlpKHksUCk7cmV0dXJuIEw+MD92Yyh5LFArNCxQKzQrTC0xKToiIn0sVDI9cjAsRDI9ZnVuY3Rpb24oeSxQKXt2YXIgTD0yKnlpKHksUCk7cmV0dXJuIEw+MD92Yyh5LFArNCxQKzQrTC0xKToiIn0sbDM9RDI7QXI9X2M9ZnVuY3Rpb24oUCxM''@;'; put 'put ''KXt2YXIgUT15aShQLEwpO3JldHVybiBRPjA/RXUoUCxMKzQsTCs0K1EpOiIifTt2YXIgbzAsSTIsa289ZnVuY3Rpb24oeSxQKXt2YXIgTD15aSh5LFApO3JldHVybiBMPjA/dmMoeSxQKzQsUCs0K0wpOiIifSxDcz1rbztvMD1JMj1mdW5jdGlvbih5LFApe3JldHVybiBmdW5jdGlvbiAkYSh5''@;'; put 'put ''LFApe2Zvcih2YXIgTD0xLTIqKHlbUCs3XT4+PjcpLFE9KCgxMjcmeVtQKzddKTw8NCkrKHlbUCs2XT4+PjQmMTUpLHJlPTE1JnlbUCs2XSxwZT01O3BlPj0wOy0tcGUpcmU9MjU2KnJlK3lbUCtwZV07cmV0dXJuIDIwNDc9PVE/MD09cmU/TCooMS8wKTpOYU46KDA9PVE/UT0tMTAyMjooUS09''@;'; put 'put ''MTAyMyxyZSs9TWF0aC5wb3coMiw1MikpLEwqTWF0aC5wb3coMixRLTUyKSpyZSl9KHksUCl9O3ZhciBOaD1mdW5jdGlvbihQKXtyZXR1cm4gQXJyYXkuaXNBcnJheShQKX07aGUmJihFdT1mdW5jdGlvbih5LFAsTCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih5KT95LnRvU3RyaW5nKCJ1dGYx''@;'; put 'put ''NmxlIixQLEwpLnJlcGxhY2UodiwiIik6QXMoeSxQLEwpfSxuMD1mdW5jdGlvbih5LFAsTCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih5KT95LnRvU3RyaW5nKCJoZXgiLFAsUCtMKTpxYSh5LFAsTCl9LElzPWZ1bmN0aW9uKFAsTCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gYm8o''@;'; put 'put ''UCxMKTt2YXIgUT1QLnJlYWRVSW50MzJMRShMKTtyZXR1cm4gUT4wP1AudG9TdHJpbmcoInV0ZjgiLEwrNCxMKzQrUS0xKToiIn0scjA9ZnVuY3Rpb24oUCxMKXtpZighQnVmZmVyLmlzQnVmZmVyKFApKXJldHVybiBUMihQLEwpO3ZhciBRPVAucmVhZFVJbnQzMkxFKEwpO3JldHVybiBRPjA/''@;'; put 'put ''UC50b1N0cmluZygidXRmOCIsTCs0LEwrNCtRLTEpOiIifSxEMj1mdW5jdGlvbihQLEwpe2lmKCFCdWZmZXIuaXNCdWZmZXIoUCkpcmV0dXJuIGwzKFAsTCk7dmFyIFE9MipQLnJlYWRVSW50MzJMRShMKTtyZXR1cm4gUC50b1N0cmluZygidXRmMTZsZSIsTCs0LEwrNCtRLTEpfSxBcj1mdW5j''@;'; put 'put ''dGlvbihQLEwpe2lmKCFCdWZmZXIuaXNCdWZmZXIoUCkpcmV0dXJuIF9jKFAsTCk7dmFyIFE9UC5yZWFkVUludDMyTEUoTCk7cmV0dXJuIFAudG9TdHJpbmcoInV0ZjE2bGUiLEwrNCxMKzQrUSl9LGtvPWZ1bmN0aW9uKFAsTCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gQ3MoUCxM''@;'; put 'put ''KTt2YXIgUT1QLnJlYWRVSW50MzJMRShMKTtyZXR1cm4gUC50b1N0cmluZygidXRmOCIsTCs0LEwrNCtRKX0sdmM9ZnVuY3Rpb24oUCxMLFEpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUCk/UC50b1N0cmluZygidXRmOCIsTCxRKTpIaChQLEwsUSl9LFNhPWZ1bmN0aW9uKHkpe3JldHVybiB5''@;'; put 'put ''WzBdLmxlbmd0aD4wJiZCdWZmZXIuaXNCdWZmZXIoeVswXVswXSk/QnVmZmVyLmNvbmNhdCh5WzBdKTpGaCh5KX0sUz1mdW5jdGlvbih5KXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHlbMF0pP0J1ZmZlci5jb25jYXQoeSk6W10uY29uY2F0LmFwcGx5KFtdLHkpfSxvMD1mdW5jdGlvbihQLEwp''@;'; put 'put ''e3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUCk/UC5yZWFkRG91YmxlTEUoTCk6STIoUCxMKX0sTmg9ZnVuY3Rpb24oUCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihQKXx8QXJyYXkuaXNBcnJheShQKX0pLHR5cGVvZiBjcHRhYmxlPCJ1IiYmKEV1PWZ1bmN0aW9uKHksUCxMKXtyZXR1cm4gY3B0''@;'; put 'put ''YWJsZS51dGlscy5kZWNvZGUoMTIwMCx5LnNsaWNlKFAsTCkpLnJlcGxhY2UodiwiIil9LHZjPWZ1bmN0aW9uKHksUCxMKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEseS5zbGljZShQLEwpKX0sSXM9ZnVuY3Rpb24oeSxQKXt2YXIgTD15aSh5LFApO3JldHVybiBMPjA/Y3B0''@;'; put 'put ''YWJsZS51dGlscy5kZWNvZGUoUix5LnNsaWNlKFArNCxQKzQrTC0xKSk6IiJ9LHIwPWZ1bmN0aW9uKHksUCl7dmFyIEw9eWkoeSxQKTtyZXR1cm4gTD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKE8seS5zbGljZShQKzQsUCs0K0wtMSkpOiIifSxEMj1mdW5jdGlvbih5LFApe3ZhciBMPTIqeWko''@;'; put 'put ''eSxQKTtyZXR1cm4gTD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAseS5zbGljZShQKzQsUCs0K0wtMSkpOiIifSxBcj1mdW5jdGlvbih5LFApe3ZhciBMPXlpKHksUCk7cmV0dXJuIEw+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLHkuc2xpY2UoUCs0LFArNCtMKSk6IiJ9LGtvPWZ1''@;'; put 'put ''bmN0aW9uKHksUCl7dmFyIEw9eWkoeSxQKTtyZXR1cm4gTD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLHkuc2xpY2UoUCs0LFArNCtMKSk6IiJ9KTt2YXIgUWk9ZnVuY3Rpb24oeSxQKXtyZXR1cm4geVtQXX0sWW49ZnVuY3Rpb24oeSxQKXtyZXR1cm4gMjU2KnlbUCsxXSt5W1BdfSxi''@;'; put 'put ''aT1mdW5jdGlvbih5LFApe3ZhciBMPTI1Nip5W1ArMV0reVtQXTtyZXR1cm4gTDwzMjc2OD9MOi0xKig2NTUzNS1MKzEpfSx5aT1mdW5jdGlvbih5LFApe3JldHVybiB5W1ArM10qKDE8PDI0KSsoeVtQKzJdPDwxNikrKHlbUCsxXTw8OCkreVtQXX0sb3M9ZnVuY3Rpb24oeSxQKXtyZXR1cm4g''@;'; put 'put ''eVtQKzNdPDwyNHx5W1ArMl08PDE2fHlbUCsxXTw8OHx5W1BdfSxGYT1mdW5jdGlvbih5LFApe3JldHVybiB5W1BdPDwyNHx5W1ArMV08PDE2fHlbUCsyXTw8OHx5W1ArM119O2Z1bmN0aW9uIEhhKHksUCl7dmFyIFEscmUsX2UsdmUsU2UsSGUsTD0iIixwZT1bXTtzd2l0Y2goUCl7Y2FzZSJk''@;'; put 'put ''YmNzIjppZihIZT10aGlzLmwsaGUmJkJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlMPXRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKnkpLnRvU3RyaW5nKCJ1dGYxNmxlIik7ZWxzZSBmb3IoU2U9MDtTZTx5OysrU2UpTCs9U3RyaW5nLmZyb21DaGFyQ29kZShZbih0aGlzLEhlKSksSGUrPTI7eSo9''@;'; put 'put ''MjticmVhaztjYXNlInV0ZjgiOkw9dmModGhpcyx0aGlzLmwsdGhpcy5sK3kpO2JyZWFrO2Nhc2UidXRmMTZsZSI6TD1FdSh0aGlzLHRoaXMubCx0aGlzLmwrKHkqPTIpKTticmVhaztjYXNlIndzdHIiOmlmKCEodHlwZW9mIGNwdGFibGU8InUiKSlyZXR1cm4gSGEuY2FsbCh0aGlzLHksImRi''@;'; put 'put ''Y3MiKTtMPWNwdGFibGUudXRpbHMuZGVjb2RlKE8sdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqeSkpLHkqPTI7YnJlYWs7Y2FzZSJscHN0ci1hbnNpIjpMPUlzKHRoaXMsdGhpcy5sKSx5PTQreWkodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBzdHItY3AiOkw9cjAodGhpcyx0aGlzLmwp''@;'; put 'put ''LHk9NCt5aSh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHdzdHIiOkw9RDIodGhpcyx0aGlzLmwpLHk9NCsyKnlpKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwcDQiOnk9NCt5aSh0aGlzLHRoaXMubCksTD1Bcih0aGlzLHRoaXMubCksMiZ5JiYoeSs9Mik7YnJlYWs7Y2FzZSI4bHBwNCI6''@;'; put 'put ''eT00K3lpKHRoaXMsdGhpcy5sKSxMPWtvKHRoaXMsdGhpcy5sKSwzJnkmJih5Kz00LSgzJnkpKTticmVhaztjYXNlImNzdHIiOmZvcih5PTAsTD0iIjswIT09KF9lPVFpKHRoaXMsdGhpcy5sK3krKykpOylwZS5wdXNoKHEoX2UpKTtMPXBlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiX3dzdHIiOmZv''@;'; put 'put ''cih5PTAsTD0iIjswIT09KF9lPVluKHRoaXMsdGhpcy5sK3kpKTspcGUucHVzaChxKF9lKSkseSs9Mjt5Kz0yLEw9cGUuam9pbigiIik7YnJlYWs7Y2FzZSJkYmNzLWNvbnQiOmZvcihMPSIiLEhlPXRoaXMubCxTZT0wO1NlPHk7KytTZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5p''@;'; put 'put ''bmRleE9mKEhlKSlyZXR1cm4gX2U9UWkodGhpcyxIZSksdGhpcy5sPUhlKzEsdmU9SGEuY2FsbCh0aGlzLHktU2UsX2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpLHBlLmpvaW4oIiIpK3ZlO3BlLnB1c2gocShZbih0aGlzLEhlKSkpLEhlKz0yfUw9cGUuam9pbigiIikseSo9MjticmVhaztj''@;'; put 'put ''YXNlImNwc3RyIjppZih0eXBlb2YgY3B0YWJsZTwidSIpe0w9Y3B0YWJsZS51dGlscy5kZWNvZGUoTyx0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwreSkpO2JyZWFrfWNhc2Uic2Jjcy1jb250Ijpmb3IoTD0iIixIZT10aGlzLmwsU2U9MDtTZSE9eTsrK1NlKXtpZih0aGlzLmxlbnMmJi0xIT09''@;'; put 'put ''dGhpcy5sZW5zLmluZGV4T2YoSGUpKXJldHVybiBfZT1RaSh0aGlzLEhlKSx0aGlzLmw9SGUrMSx2ZT1IYS5jYWxsKHRoaXMseS1TZSxfZT8iZGJjcy1jb250Ijoic2Jjcy1jb250IikscGUuam9pbigiIikrdmU7cGUucHVzaChxKFFpKHRoaXMsSGUpKSksSGUrPTF9TD1wZS5qb2luKCIiKTti''@;'; put 'put ''cmVhaztkZWZhdWx0OnN3aXRjaCh5KXtjYXNlIDE6cmV0dXJuIFE9UWkodGhpcyx0aGlzLmwpLHRoaXMubCsrLFE7Y2FzZSAyOnJldHVybiBRPSgiaSI9PT1QP2JpOlluKSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLFE7Y2FzZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT1QJiYxMjgmdGhpc1t0aGlz''@;'; put 'put ''LmwrM10/KHJlPXlpKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQscmUpOihRPSh5PjA/b3M6RmEpKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQsUSk7Y2FzZSA4OmNhc2UtODppZigiZiI9PT1QKXJldHVybiByZT04PT15P28wKHRoaXMsdGhpcy5sKTpvMChbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlz''@;'; put 'put ''LmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxyZTt5PTg7Y2FzZSAxNjpMPW4wKHRoaXMsdGhpcy5sLHkpfX1yZXR1cm4gdGhpcy5sKz15LEx9''@;'; put 'put ''dmFyICRvPWZ1bmN0aW9uKHksUCxMKXt5W0xdPTI1NSZQLHlbTCsxXT1QPj4+OCYyNTUseVtMKzJdPVA+Pj4xNiYyNTUseVtMKzNdPVA+Pj4yNCYyNTV9LFYwPWZ1bmN0aW9uKHksUCxMKXt5W0xdPTI1NSZQLHlbTCsxXT1QPj44JjI1NSx5W0wrMl09UD4+MTYmMjU1LHlbTCszXT1QPj4yNCYy''@;'; put 'put ''NTV9LERhPWZ1bmN0aW9uKHksUCxMKXt5W0xdPTI1NSZQLHlbTCsxXT1QPj4+OCYyNTV9O2Z1bmN0aW9uIFZoKHksUCxMKXt2YXIgUT0wLHJlPTA7aWYoImRiY3MiPT09TCl7Zm9yKHJlPTA7cmUhPVAubGVuZ3RoOysrcmUpRGEodGhpcyxQLmNoYXJDb2RlQXQocmUpLHRoaXMubCsyKnJlKTtR''@;'; put 'put ''PTIqUC5sZW5ndGh9ZWxzZSBpZigic2JjcyI9PT1MKXtpZih0eXBlb2YgY3B0YWJsZTwidSImJjg3ND09Uilmb3IocmU9MDtyZSE9UC5sZW5ndGg7KytyZSl7dmFyIHBlPWNwdGFibGUudXRpbHMuZW5jb2RlKFIsUC5jaGFyQXQocmUpKTt0aGlzW3RoaXMubCtyZV09cGVbMF19ZWxzZSBmb3Io''@;'; put 'put ''UD1QLnJlcGxhY2UoL1teXHgwMC1ceDdGXS9nLCJfIikscmU9MDtyZSE9UC5sZW5ndGg7KytyZSl0aGlzW3RoaXMubCtyZV09MjU1JlAuY2hhckNvZGVBdChyZSk7UT1QLmxlbmd0aH1lbHNle2lmKCJoZXgiPT09TCl7Zm9yKDtyZTx5OysrcmUpdGhpc1t0aGlzLmwrK109cGFyc2VJbnQoUC5z''@;'; put 'put ''bGljZSgyKnJlLDIqcmUrMiksMTYpfHwwO3JldHVybiB0aGlzfWlmKCJ1dGYxNmxlIj09PUwpe3ZhciBfZT1NYXRoLm1pbih0aGlzLmwreSx0aGlzLmxlbmd0aCk7Zm9yKHJlPTA7cmU8TWF0aC5taW4oUC5sZW5ndGgseSk7KytyZSl7dmFyIHZlPVAuY2hhckNvZGVBdChyZSk7dGhpc1t0aGlz''@;'; put 'put ''LmwrK109MjU1JnZlLHRoaXNbdGhpcy5sKytdPXZlPj44fWZvcig7dGhpcy5sPF9lOyl0aGlzW3RoaXMubCsrXT0wO3JldHVybiB0aGlzfXN3aXRjaCh5KXtjYXNlIDE6UT0xLHRoaXNbdGhpcy5sXT0yNTUmUDticmVhaztjYXNlIDI6UT0yLHRoaXNbdGhpcy5sXT0yNTUmUCx0aGlzW3RoaXMu''@;'; put 'put ''bCsxXT0yNTUmKFA+Pj49OCk7YnJlYWs7Y2FzZSAzOlE9Myx0aGlzW3RoaXMubF09MjU1JlAsdGhpc1t0aGlzLmwrMV09MjU1JihQPj4+PTgpLHRoaXNbdGhpcy5sKzJdPTI1NSYoUD4+Pj04KTticmVhaztjYXNlIDQ6UT00LCRvKHRoaXMsUCx0aGlzLmwpO2JyZWFrO2Nhc2UgODppZihRPTgs''@;'; put 'put ''ImYiPT09TCl7IWZ1bmN0aW9uIHQwKHksUCxMKXt2YXIgUT0oUDwwfHwxL1A9PS0xLzA/MTowKTw8NyxyZT0wLHBlPTAsX2U9UT8tUDpQO2lzRmluaXRlKF9lKT8wPT1fZT9yZT1wZT0wOihyZT1NYXRoLmZsb29yKE1hdGgubG9nKF9lKS9NYXRoLkxOMikscGU9X2UqTWF0aC5wb3coMiw1Mi1y''@;'; put 'put ''ZSkscmU8PS0xMDIzJiYoIWlzRmluaXRlKHBlKXx8cGU8TWF0aC5wb3coMiw1MikpP3JlPS0xMDIyOihwZS09TWF0aC5wb3coMiw1MikscmUrPTEwMjMpKToocmU9MjA0NyxwZT1pc05hTihQKT8yNjk4NTowKTtmb3IodmFyIHZlPTA7dmU8PTU7Kyt2ZSxwZS89MjU2KXlbTCt2ZV09MjU1JnBl''@;'; put 'put ''O3lbTCs2XT0oMTUmcmUpPDw0fDE1JnBlLHlbTCs3XT1yZT4+NHxRfSh0aGlzLFAsdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nhc2UtNDpRPTQsVjAodGhpcyxQLHRoaXMubCl9fXJldHVybiB0aGlzLmwrPVEsdGhpc31mdW5jdGlvbiBCaCh5LFApe3ZhciBMPW4wKHRoaXMsdGhpcy5s''@;'; put 'put ''LHkubGVuZ3RoPj4xKTtpZihMIT09eSl0aHJvdyBuZXcgRXJyb3IoUCsiRXhwZWN0ZWQgIit5KyIgc2F3ICIrTCk7dGhpcy5sKz15Lmxlbmd0aD4+MX1mdW5jdGlvbiBvbCh5LFApe3kubD1QLHkucmVhZF9zaGlmdD1IYSx5LmNoaz1CaCx5LndyaXRlX3NoaWZ0PVZofWZ1bmN0aW9uIGJjKHks''@;'; put 'put ''UCl7eS5sKz1QfWZ1bmN0aW9uIGZyKHkpe3ZhciBQPUcoeSk7cmV0dXJuIG9sKFAsMCksUH1mdW5jdGlvbiBIbyh5LFAsTCl7aWYoeSl7dmFyIFEscmUscGU7b2woeSx5Lmx8fDApO2Zvcih2YXIgX2U9eS5sZW5ndGgsdmU9MCxTZT0wO3kubDxfZTspezEyOCYodmU9eS5yZWFkX3NoaWZ0KDEp''@;'; put 'put ''KSYmKHZlPSgxMjcmdmUpKygoMTI3JnkucmVhZF9zaGlmdCgxKSk8PDcpKTt2YXIgSGU9bWZbdmVdfHxtZls2NTUzNV07Zm9yKHBlPTEyNyYoUT15LnJlYWRfc2hpZnQoMSkpLHJlPTE7cmU8NCYmMTI4JlE7KytyZSlwZSs9KDEyNyYoUT15LnJlYWRfc2hpZnQoMSkpKTw8NypyZTtTZT15Lmwr''@;'; put 'put ''cGU7dmFyIFZlPShIZS5mfHxiYykoeSxwZSxMKTtpZih5Lmw9U2UsUChWZSxIZS5uLHZlKSlyZXR1cm59fX1mdW5jdGlvbiB5Yygpe3ZhciB5PVtdLFA9aGU/MjU2OjIwNDgsTD1mdW5jdGlvbihIZSl7dmFyIFZlPWZyKEhlKTtyZXR1cm4gb2woVmUsMCksVmV9LFE9TChQKSxyZT1mdW5jdGlv''@;'; put 'put ''bigpe1EmJihRLmxlbmd0aD5RLmwmJigoUT1RLnNsaWNlKDAsUS5sKSkubD1RLmxlbmd0aCksUS5sZW5ndGg+MCYmeS5wdXNoKFEpLFE9bnVsbCl9LHBlPWZ1bmN0aW9uKEhlKXtyZXR1cm4gUSYmSGU8US5sZW5ndGgtUS5sP1E6KHJlKCksUT1MKE1hdGgubWF4KEhlKzEsUCkpKX07cmV0dXJu''@;'; put 'put ''e25leHQ6cGUscHVzaDpmdW5jdGlvbihIZSl7cmUoKSxudWxsPT0oUT1IZSkubCYmKFEubD1RLmxlbmd0aCkscGUoUCl9LGVuZDpmdW5jdGlvbigpe3JldHVybiByZSgpLFNhKFt5XSl9LF9idWZzOnl9fWZ1bmN0aW9uIGNpKHksUCxMLFEpe3ZhciBwZSxyZT0rYjVbUF07aWYoIWlzTmFOKHJl''@;'; put 'put ''KSl7UXx8KFE9bWZbcmVdLnB8fChMfHxbXSkubGVuZ3RofHwwKSxwZT0xKyhyZT49MTI4PzE6MCkrMSxRPj0xMjgmJisrcGUsUT49MTYzODQmJisrcGUsUT49MjA5NzE1MiYmKytwZTt2YXIgX2U9eS5uZXh0KHBlKTtyZTw9MTI3P19lLndyaXRlX3NoaWZ0KDEscmUpOihfZS53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDEyOCsoMTI3JnJlKSksX2Uud3JpdGVfc2hpZnQoMSxyZT4+NykpO2Zvcih2YXIgdmU9MDs0IT12ZTsrK3ZlKXtpZighKFE+PTEyOCkpe19lLndyaXRlX3NoaWZ0KDEsUSk7YnJlYWt9X2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZRKSksUT4+PTd9UT4wJiZOaChMKSYmeS5wdXNoKEwp''@;'; put 'put ''fX1mdW5jdGlvbiBsdSh5LFAsTCl7dmFyIFE9b24oeSk7aWYoUC5zPyhRLmNSZWwmJihRLmMrPVAucy5jKSxRLnJSZWwmJihRLnIrPVAucy5yKSk6KFEuY1JlbCYmKFEuYys9UC5jKSxRLnJSZWwmJihRLnIrPVAucikpLCFMfHxMLmJpZmY8MTIpe2Zvcig7US5jPj0yNTY7KVEuYy09MjU2O2Zv''@;'; put 'put ''cig7US5yPj02NTUzNjspUS5yLT02NTUzNn1yZXR1cm4gUX1mdW5jdGlvbiBkcih5LFAsTCl7dmFyIFE9b24oeSk7cmV0dXJuIFEucz1sdShRLnMsUC5zLEwpLFEuZT1sdShRLmUsUC5zLEwpLFF9ZnVuY3Rpb24gTDIoeSxQKXtpZih5LmNSZWwmJnkuYzwwKWZvcih5PW9uKHkpO3kuYzwwOyl5''@;'; put 'put ''LmMrPVA+OD8xNjM4NDoyNTY7aWYoeS5yUmVsJiZ5LnI8MClmb3IoeT1vbih5KTt5LnI8MDspeS5yKz1QPjg/MTA0ODU3NjpQPjU/NjU1MzY6MTYzODQ7aWYoeS5jUmVsJiZ5LmM+PShQPjg/MTYzODQ6MjU2KSlmb3IoeT1vbih5KTt5LmM+PShQPjg/MTYzODQ6MjU2KTspeS5jLT1QPjg/MTYz''@;'; put 'put ''ODQ6MjU2O2lmKHkuclJlbCYmeS5yPj0xMDQ4NTc2KWZvcih5PW9uKHkpO3kucj49MTA0ODU3NjspeS5yLT0xMDQ4NTc2O3ZhciBMPWRpKHkpO3JldHVybiF5LmNSZWwmJm51bGwhPXkuY1JlbCYmKEw9ZnVuY3Rpb24gcTcoeSl7cmV0dXJuIHkucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9''@;'; put 'put ''KEwpKSwheS5yUmVsJiZudWxsIT15LnJSZWwmJihMPWZ1bmN0aW9uIG5tKHkpe3JldHVybiB5LnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShMKSksTH1mdW5jdGlvbiBtaSh5LFApe3JldHVybiAwIT15LnMucnx8eS5zLnJSZWx8fHkuZS5yIT0oUC5iaWZmPj0xMj8xMDQ4''@;'; put 'put ''NTc1OlAuYmlmZj49OD82NTUzNjoxNjM4NCl8fHkuZS5yUmVsPzAhPXkucy5jfHx5LnMuY1JlbHx8eS5lLmMhPShQLmJpZmY+PTEyPzE2MzgzOjI1NSl8fHkuZS5jUmVsP0wyKHkucyxQLmJpZmYpKyI6IitMMih5LmUsUC5iaWZmKTooeS5zLnJSZWw/IiI6IiQiKStIcyh5LnMucikrIjoiKyh5''@;'; put 'put ''LmUuclJlbD8iIjoiJCIpK0hzKHkuZS5yKTooeS5zLmNSZWw/IiI6IiQiKStOcyh5LnMuYykrIjoiKyh5LmUuY1JlbD8iIjoiJCIpK05zKHkuZS5jKX12YXIgeGQ9e307ZnVuY3Rpb24gQjAoeSl7cmV0dXJuIHBhcnNlSW50KGZ1bmN0aW9uIGMzKHkpe3JldHVybiB5LnJlcGxhY2UoL1wkKFxk''@;'; put 'put ''KykkLywiJDEiKX0oeSksMTApLTF9ZnVuY3Rpb24gSHMoeSl7cmV0dXJuIiIrKHkrMSl9ZnVuY3Rpb24gamgoeSl7Zm9yKHZhciBQPWZ1bmN0aW9uIG5zKHkpe3JldHVybiB5LnJlcGxhY2UoL15cJChbQS1aXSkvLCIkMSIpfSh5KSxMPTAsUT0wO1EhPT1QLmxlbmd0aDsrK1EpTD0yNipMK1Au''@;'; put 'put ''Y2hhckNvZGVBdChRKS02NDtyZXR1cm4gTC0xfWZ1bmN0aW9uIE5zKHkpe2lmKHk8MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY29sdW1uICIreSk7dmFyIFA9IiI7Zm9yKCsreTt5O3k9TWF0aC5mbG9vcigoeS0xKS8yNikpUD1TdHJpbmcuZnJvbUNoYXJDb2RlKCh5LTEpJTI2KzY1KStQ''@;'; put 'put ''O3JldHVybiBQfWZ1bmN0aW9uIHNzKHkpe2Zvcih2YXIgUD0wLEw9MCxRPTA7UTx5Lmxlbmd0aDsrK1Epe3ZhciByZT15LmNoYXJDb2RlQXQoUSk7cmU+PTQ4JiZyZTw9NTc/UD0xMCpQKyhyZS00OCk6cmU+PTY1JiZyZTw9OTAmJihMPTI2KkwrKHJlLTY0KSl9cmV0dXJue2M6TC0xLHI6UC0x''@;'; put 'put ''fX1mdW5jdGlvbiBkaSh5KXtmb3IodmFyIFA9eS5jKzEsTD0iIjtQO1A9KFAtMSkvMjZ8MClMPVN0cmluZy5mcm9tQ2hhckNvZGUoKFAtMSklMjYrNjUpK0w7cmV0dXJuIEwrKHkucisxKX1mdW5jdGlvbiBXcyh5KXt2YXIgUD15LmluZGV4T2YoIjoiKTtyZXR1cm4tMT09UD97czpzcyh5KSxl''@;'; put 'put ''OnNzKHkpfTp7czpzcyh5LnNsaWNlKDAsUCkpLGU6c3MoeS5zbGljZShQKzEpKX19ZnVuY3Rpb24gT28oeSxQKXtyZXR1cm4gdHlwZW9mIFA+InUifHwibnVtYmVyIj09dHlwZW9mIFA/T28oeS5zLHkuZSk6KCJzdHJpbmciIT10eXBlb2YgeSYmKHk9ZGkoeSkpLCJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''UCYmKFA9ZGkoUCkpLHk9PVA/eTp5KyI6IitQKX1mdW5jdGlvbiBPaSh5KXt2YXIgUD1KU09OLnBhcnNlKCd7InMiOnsiYyI6MCwiciI6MH0sImUiOnsiYyI6MCwiciI6MH19JyksTD0wLFE9MCxyZT0wLHBlPXkubGVuZ3RoO2ZvcihMPTA7UTxwZSYmISgocmU9eS5jaGFyQ29kZUF0KFEpLTY0''@;'; put 'put ''KTwxfHxyZT4yNik7KytRKUw9MjYqTCtyZTtmb3IoUC5zLmM9LS1MLEw9MDtRPHBlJiYhKChyZT15LmNoYXJDb2RlQXQoUSktNDgpPDB8fHJlPjkpOysrUSlMPTEwKkwrcmU7aWYoUC5zLnI9LS1MLFE9PT1wZXx8NTg9PT15LmNoYXJDb2RlQXQoKytRKSlyZXR1cm4gUC5lLmM9UC5zLmMsUC5l''@;'; put 'put ''LnI9UC5zLnIsUDtmb3IoTD0wO1EhPXBlJiYhKChyZT15LmNoYXJDb2RlQXQoUSktNjQpPDF8fHJlPjI2KTsrK1EpTD0yNipMK3JlO2ZvcihQLmUuYz0tLUwsTD0wO1EhPXBlJiYhKChyZT15LmNoYXJDb2RlQXQoUSktNDgpPDB8fHJlPjkpOysrUSlMPTEwKkwrcmU7cmV0dXJuIFAuZS5yPS0t''@;'; put 'put ''TCxQfWZ1bmN0aW9uIHJtKHksUCl7dmFyIEw9ImQiPT15LnQmJlAgaW5zdGFuY2VvZiBEYXRlO2lmKG51bGwhPXkueil0cnl7cmV0dXJuIHkudz13LmZvcm1hdCh5LnosTD9VZShQKTpQKX1jYXRjaHt9dHJ5e3JldHVybiB5Lnc9dy5mb3JtYXQoKHkuWEZ8fHt9KS5udW1GbXRJZHx8KEw/MTQ6''@;'; put 'put ''MCksTD9VZShQKTpQKX1jYXRjaHtyZXR1cm4iIitQfX1mdW5jdGlvbiBjdSh5LFAsTCl7cmV0dXJuIG51bGw9PXl8fG51bGw9PXkudHx8InoiPT15LnQ/IiI6dm9pZCAwIT09eS53P3kudzooImQiPT15LnQmJiF5LnomJkwmJkwuZGF0ZU5GJiYoeS56PUwuZGF0ZU5GKSwiZSI9PXkudD9Rb1t5''@;'; put 'put ''LnZdfHx5LnY6cm0oeSxudWxsPT1QP3kudjpQKSl9ZnVuY3Rpb24gRWQoeSxQKXt2YXIgTD1QJiZQLnNoZWV0P1Auc2hlZXQ6IlNoZWV0MSIsUT17fTtyZXR1cm4gUVtMXT15LHtTaGVldE5hbWVzOltMXSxTaGVldHM6UX19ZnVuY3Rpb24gczAoeSxQLEwpe3ZhciBRPUx8fHt9LHJlPXk/QXJy''@;'; put 'put ''YXkuaXNBcnJheSh5KTpRLmRlbnNlO251bGwhPXRlJiZudWxsPT1yZSYmKHJlPXRlKTt2YXIgcGU9eXx8KHJlP1tdOnt9KSxfZT0wLHZlPTA7aWYocGUmJm51bGwhPVEub3JpZ2luKXtpZigibnVtYmVyIj09dHlwZW9mIFEub3JpZ2luKV9lPVEub3JpZ2luO2Vsc2V7dmFyIFNlPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgUS5vcmlnaW4/c3MoUS5vcmlnaW4pOlEub3JpZ2luO19lPVNlLnIsdmU9U2UuY31wZVsiIXJlZiJdfHwocGVbIiFyZWYiXT0iQTE6QTEiKX12YXIgSGU9e3M6e2M6MWU3LHI6MWU3fSxlOntjOjAscjowfX07aWYocGVbIiFyZWYiXSl7dmFyIFZlPU9pKHBlWyIhcmVmIl0pO0hl''@;'; put 'put ''LnMuYz1WZS5zLmMsSGUucy5yPVZlLnMucixIZS5lLmM9TWF0aC5tYXgoSGUuZS5jLFZlLmUuYyksSGUuZS5yPU1hdGgubWF4KEhlLmUucixWZS5lLnIpLC0xPT1fZSYmKEhlLmUucj1fZT1WZS5lLnIrMSl9Zm9yKHZhciBHZT0wO0dlIT1QLmxlbmd0aDsrK0dlKWlmKFBbR2VdKXtpZighQXJy''@;'; put 'put ''YXkuaXNBcnJheShQW0dlXSkpdGhyb3cgbmV3IEVycm9yKCJhb2FfdG9fc2hlZXQgZXhwZWN0cyBhbiBhcnJheSBvZiBhcnJheXMiKTtmb3IodmFyIG50PTA7bnQhPVBbR2VdLmxlbmd0aDsrK250KWlmKCEodHlwZW9mIFBbR2VdW250XT4idSIpKXt2YXIgZHQ9e3Y6UFtHZV1bbnRdfSxDdD1f''@;'; put 'put ''ZStHZSxjdD12ZStudDtpZihIZS5zLnI+Q3QmJihIZS5zLnI9Q3QpLEhlLnMuYz5jdCYmKEhlLnMuYz1jdCksSGUuZS5yPEN0JiYoSGUuZS5yPUN0KSxIZS5lLmM8Y3QmJihIZS5lLmM9Y3QpLCFQW0dlXVtudF18fCJvYmplY3QiIT10eXBlb2YgUFtHZV1bbnRdfHxBcnJheS5pc0FycmF5KFBb''@;'; put 'put ''R2VdW250XSl8fFBbR2VdW250XWluc3RhbmNlb2YgRGF0ZSlpZihBcnJheS5pc0FycmF5KGR0LnYpJiYoZHQuZj1QW0dlXVtudF1bMV0sZHQudj1kdC52WzBdKSxudWxsPT09ZHQudilpZihkdC5mKWR0LnQ9Im4iO2Vsc2UgaWYoUS5udWxsRXJyb3IpZHQudD0iZSIsZHQudj0wO2Vsc2V7aWYo''@;'; put 'put ''IVEuc2hlZXRTdHVicyljb250aW51ZTtkdC50PSJ6In1lbHNlIm51bWJlciI9PXR5cGVvZiBkdC52P2R0LnQ9Im4iOiJib29sZWFuIj09dHlwZW9mIGR0LnY/ZHQudD0iYiI6ZHQudiBpbnN0YW5jZW9mIERhdGU/KGR0Lno9US5kYXRlTkZ8fHcuX3RhYmxlWzE0XSxRLmNlbGxEYXRlcz8oZHQu''@;'; put 'put ''dD0iZCIsZHQudz13LmZvcm1hdChkdC56LFVlKGR0LnYpKSk6KGR0LnQ9Im4iLGR0LnY9VWUoZHQudiksZHQudz13LmZvcm1hdChkdC56LGR0LnYpKSk6ZHQudD0icyI7ZWxzZSBkdD1QW0dlXVtudF07aWYoZHQmJmR0LmgpdHJ5e2R0LlI9RnUuaHRtbF90b19ycyhkdC5oKSxkdC52PSIiO2Zv''@;'; put 'put ''cih2YXIgYnQ9MDtidDxkdC5SLmxlbmd0aDsrK2J0KWR0LnYrPWR0LlJbYnRdLnZ8fCIifWNhdGNoe31pZihyZSlwZVtDdF18fChwZVtDdF09W10pLHBlW0N0XVtjdF0mJnBlW0N0XVtjdF0ucyYmKGR0LnM9cGVbQ3RdW2N0XS5zKSxwZVtDdF1bY3RdJiZwZVtDdF1bY3RdLnomJihkdC56PXBl''@;'; put 'put ''W0N0XVtjdF0ueikscGVbQ3RdW2N0XT1kdDtlbHNle3ZhciBGdD1kaSh7YzpjdCxyOkN0fSk7cGVbRnRdJiZwZVtGdF0ucyYmKGR0LnM9cGVbRnRdLnMpLHBlW0Z0XSYmcGVbRnRdLnomJihkdC56PXBlW0Z0XS56KSxwZVtGdF09ZHR9fX1yZXR1cm4gSGUucy5jPDFlNyYmKHBlWyIhcmVmIl09''@;'; put 'put ''T28oSGUpKSxwZX1mdW5jdGlvbiBrMSh5LFApe3JldHVybiBzMChudWxsLHksUCl9ZnVuY3Rpb24ga3UoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoNCkpLFAud3JpdGVfc2hpZnQoNCx5KSxQfWZ1bmN0aW9uIHdjKHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PVA/IiI6eS5yZWFk''@;'; put 'put ''X3NoaWZ0KFAsImRiY3MiKX1mdW5jdGlvbiBuYyh5LFApe3ZhciBMPSExO3JldHVybiBudWxsPT1QJiYoTD0hMCxQPWZyKDQrMip5Lmxlbmd0aCkpLFAud3JpdGVfc2hpZnQoNCx5Lmxlbmd0aCkseS5sZW5ndGg+MCYmUC53cml0ZV9zaGlmdCgwLHksImRiY3MiKSxMP1Auc2xpY2UoMCxQLmwp''@;'; put 'put ''OlB9ZnVuY3Rpb24gb20oeSl7cmV0dXJue2ljaDp5LnJlYWRfc2hpZnQoMiksaWZudDp5LnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIGNhKHksUCl7dmFyIEw9eS5sLFE9eS5yZWFkX3NoaWZ0KDEpLHJlPXdjKHkpLHBlPVtdLF9lPXt0OnJlLGg6cmV9O2lmKDEmUSl7Zm9yKHZhciB2ZT15LnJl''@;'; put 'put ''YWRfc2hpZnQoNCksU2U9MDtTZSE9dmU7KytTZSlwZS5wdXNoKG9tKHkpKTtfZS5yPXBlfWVsc2UgX2Uucj1be2ljaDowLGlmbnQ6MH1dO3JldHVybiB5Lmw9TCtQLF9lfSFmdW5jdGlvbih5LFApe3ZhciBMO2lmKHR5cGVvZiBjcnlwdG9Ccm93c2VyaWZ5PCJ1IilMPWNyeXB0b0Jyb3dzZXJp''@;'; put 'put ''Znk7ZWxzZSBpZih0eXBlb2YgUDwidSIpTD1QO2Vsc2UgdHJ5e0w9Rig3NzkwMyl9Y2F0Y2h7TD1udWxsfXkucmM0PWZ1bmN0aW9uKFEscmUpe3ZhciBwZT1uZXcgQXJyYXkoMjU2KSxfZT0wLHZlPTAsU2U9MCxIZT0wO2Zvcih2ZT0wOzI1NiE9dmU7Kyt2ZSlwZVt2ZV09dmU7Zm9yKHZlPTA7''@;'; put 'put ''MjU2IT12ZTsrK3ZlKVNlPVNlK3BlW3ZlXStRW3ZlJVEubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NSxIZT1wZVt2ZV0scGVbdmVdPXBlW1NlXSxwZVtTZV09SGU7dmU9U2U9MDt2YXIgVmU9RyhyZS5sZW5ndGgpO2ZvcihfZT0wO19lIT1yZS5sZW5ndGg7KytfZSlIZT1wZVt2ZT12ZSsxJjI1''@;'; put 'put ''NV0scGVbdmVdPXBlW1NlPShTZStwZVt2ZV0pJTI1Nl0scGVbU2VdPUhlLFZlW19lXT1yZVtfZV1ecGVbcGVbdmVdK3BlW1NlXSYyNTVdO3JldHVybiBWZX0seS5tZDU9ZnVuY3Rpb24oUSl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjcnlwdG8iKTtyZXR1cm4gTC5jcmVh''@;'; put 'put ''dGVIYXNoKCJtZDUiKS51cGRhdGUoQnVmZmVyLmZyb20oUSkpLmRpZ2VzdCgiaGV4Iil9fSh4ZCx0eXBlb2YgY3J5cHRvPCJ1Ij9jcnlwdG86dm9pZCAwKTt2YXIgSzc9Y2E7ZnVuY3Rpb24gdXUoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiBMKz15''@;'; put 'put ''LnJlYWRfc2hpZnQoMSk8PDE2LHkubCsrLHtjOlAsaVN0eWxlUmVmOkx9fWZ1bmN0aW9uIEZpKHksUCl7cmV0dXJuIG51bGw9PVAmJihQPWZyKDgpKSxQLndyaXRlX3NoaWZ0KC00LHkuYyksUC53cml0ZV9zaGlmdCgzLHkuaVN0eWxlUmVmfHx5LnMpLFAud3JpdGVfc2hpZnQoMSwwKSxQfWZ1''@;'; put 'put ''bmN0aW9uIGEwKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gUCs9eS5yZWFkX3NoaWZ0KDEpPDwxNix5LmwrKyx7YzotMSxpU3R5bGVSZWY6UH19ZnVuY3Rpb24gS2MoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9ZnIoNCkpLFAud3JpdGVfc2hpZnQoMyx5LmlTdHlsZVJlZnx8eS5z''@;'; put 'put ''KSxQLndyaXRlX3NoaWZ0KDEsMCksUH12YXIgemg9d2Msc209bmM7ZnVuY3Rpb24gQXUoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09UHx8NDI5NDk2NzI5NT09PVA/IiI6eS5yZWFkX3NoaWZ0KFAsImRiY3MiKX1mdW5jdGlvbiBBZCh5LFApe3ZhciBMPSExO3JldHVybiBu''@;'; put 'put ''dWxsPT1QJiYoTD0hMCxQPWZyKDEyNykpLFAud3JpdGVfc2hpZnQoNCx5Lmxlbmd0aD4wP3kubGVuZ3RoOjQyOTQ5NjcyOTUpLHkubGVuZ3RoPjAmJlAud3JpdGVfc2hpZnQoMCx5LCJkYmNzIiksTD9QLnNsaWNlKDAsUC5sKTpQfXZhciBkdT13YyxUMT1BdSxPYz1BZDtmdW5jdGlvbiBYYyh5''@;'; put 'put ''KXt2YXIgUD15LnNsaWNlKHkubCx5LmwrNCksTD0xJlBbMF0sUT0yJlBbMF07eS5sKz00LFBbMF0mPTI1Mjt2YXIgcmU9MD09PVE/bzAoWzAsMCwwLDAsUFswXSxQWzFdLFBbMl0sUFszXV0sMCk6b3MoUCwwKT4+MjtyZXR1cm4gTD9yZS8xMDA6cmV9ZnVuY3Rpb24gU3MoeSxQKXtudWxsPT1Q''@;'; put 'put ''JiYoUD1mcig0KSk7dmFyIEw9MCxRPTAscmU9MTAwKnk7aWYoeT09KDB8eSkmJnk+PS0oMTw8MjkpJiZ5PDE8PDI5P1E9MTpyZT09KDB8cmUpJiZyZT49LSgxPDwyOSkmJnJlPDE8PDI5JiYoUT0xLEw9MSksIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBSa051bWJlciAiK3kpO1Au''@;'; put 'put ''d3JpdGVfc2hpZnQoLTQsKChMP3JlOnkpPDwyKSsoTCsyKSl9ZnVuY3Rpb24gVGQoeSl7dmFyIFA9e3M6e30sZTp7fX07cmV0dXJuIFAucy5yPXkucmVhZF9zaGlmdCg0KSxQLmUucj15LnJlYWRfc2hpZnQoNCksUC5zLmM9eS5yZWFkX3NoaWZ0KDQpLFAuZS5jPXkucmVhZF9zaGlmdCg0KSxQ''@;'; put 'put ''fXZhciBKYz1UZCxEMT1mdW5jdGlvbiBVaCh5LFApe3JldHVybiBQfHwoUD1mcigxNikpLFAud3JpdGVfc2hpZnQoNCx5LnMuciksUC53cml0ZV9zaGlmdCg0LHkuZS5yKSxQLndyaXRlX3NoaWZ0KDQseS5zLmMpLFAud3JpdGVfc2hpZnQoNCx5LmUuYyksUH07ZnVuY3Rpb24gbDAoeSl7Zm9y''@;'; put 'put ''KHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPVtdLFE9MDtRPFA7KytRKXt2YXIgcmU9SmMoeSk7TC5wdXNoKE9vKHJlKSl9cmV0dXJuIEwuam9pbigiLCIpfWZ1bmN0aW9uIG1hKHkpe2lmKHkubGVuZ3RoLXkubDw4KXRocm93IlhMUyBYbnVtIEJ1ZmZlciB1bmRlcmZsb3ciO3JldHVybiB5LnJl''@;'; put 'put ''YWRfc2hpZnQoOCwiZiIpfWZ1bmN0aW9uIFBjKHksUCl7cmV0dXJuKFB8fGZyKDgpKS53cml0ZV9zaGlmdCg4LHksImYiKX1mdW5jdGlvbiBEZCh5KXt2YXIgUD17fSxRPXkucmVhZF9zaGlmdCgxKT4+PjEscmU9eS5yZWFkX3NoaWZ0KDEpLHBlPXkucmVhZF9zaGlmdCgyLCJpIiksX2U9eS5y''@;'; put 'put ''ZWFkX3NoaWZ0KDEpLHZlPXkucmVhZF9zaGlmdCgxKSxTZT15LnJlYWRfc2hpZnQoMSk7c3dpdGNoKHkubCsrLFEpe2Nhc2UgMDpQLmF1dG89MTticmVhaztjYXNlIDE6UC5pbmRleD1yZTt2YXIgSGU9Q3JbcmVdO0hlJiYoUC5yZ2I9ejEoSGUpKTticmVhaztjYXNlIDI6UC5yZ2I9ejEoW19l''@;'; put 'put ''LHZlLFNlXSk7YnJlYWs7Y2FzZSAzOlAudGhlbWU9cmV9cmV0dXJuIDAhPXBlJiYoUC50aW50PXBlPjA/cGUvMzI3Njc6cGUvMzI3NjgpLFB9ZnVuY3Rpb24gUjIoeSxQKXtpZihQfHwoUD1mcig4KSksIXl8fHkuYXV0bylyZXR1cm4gUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQo''@;'; put 'put ''NCwwKSxQO251bGwhPXkuaW5kZXg/KFAud3JpdGVfc2hpZnQoMSwyKSxQLndyaXRlX3NoaWZ0KDEseS5pbmRleCkpOm51bGwhPXkudGhlbWU/KFAud3JpdGVfc2hpZnQoMSw2KSxQLndyaXRlX3NoaWZ0KDEseS50aGVtZSkpOihQLndyaXRlX3NoaWZ0KDEsNSksUC53cml0ZV9zaGlmdCgxLDAp''@;'; put 'put ''KTt2YXIgTD15LnRpbnR8fDA7aWYoTD4wP0wqPTMyNzY3Okw8MCYmKEwqPTMyNzY4KSxQLndyaXRlX3NoaWZ0KDIsTCkseS5yZ2ImJm51bGw9PXkudGhlbWUpe3ZhciBRPXkucmdifHwiRkZGRkZGIjsibnVtYmVyIj09dHlwZW9mIFEmJihRPSgiMDAwMDAwIitRLnRvU3RyaW5nKDE2KSkuc2xp''@;'; put 'put ''Y2UoLTYpKSxQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoUS5zbGljZSgwLDIpLDE2KSksUC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KFEuc2xpY2UoMiw0KSwxNikpLFAud3JpdGVfc2hpZnQoMSxwYXJzZUludChRLnNsaWNlKDQsNiksMTYpKSxQLndyaXRlX3NoaWZ0KDEsMjU1KX1lbHNlIFAu''@;'; put 'put ''d3JpdGVfc2hpZnQoMiwwKSxQLndyaXRlX3NoaWZ0KDEsMCksUC53cml0ZV9zaGlmdCgxLDApO3JldHVybiBQfWZ1bmN0aW9uIGY0KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4geS5sKysse2ZCb2xkOjEmUCxmSXRhbGljOjImUCxmVW5kZXJsaW5lOjQmUCxmU3RyaWtlb3V0Ojgm''@;'; put 'put ''UCxmT3V0bGluZToxNiZQLGZTaGFkb3c6MzImUCxmQ29uZGVuc2U6NjQmUCxmRXh0ZW5kOjEyOCZQfX1mdW5jdGlvbiBwNCh5LFApe3ZhciBRPXkucmVhZF9zaGlmdCg0KTtzd2l0Y2goUSl7Y2FzZSAwOnJldHVybiIiO2Nhc2UgNDI5NDk2NzI5NTpjYXNlIDQyOTQ5NjcyOTQ6cmV0dXJuezI6''@;'; put 'put ''IkJJVE1BUCIsMzoiTUVUQUZJTEVQSUNUIiw4OiJESUIiLDE0OiJFTkhNRVRBRklMRSJ9W3kucmVhZF9zaGlmdCg0KV18fCIifWlmKFE+NDAwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ2xpcGJvYXJkOiAiK1EudG9TdHJpbmcoMTYpKTtyZXR1cm4geS5sLT00LHkucmVhZF9zaGlm''@;'; put 'put ''dCgwLDE9PVA/Imxwc3RyIjoibHB3c3RyIil9dmFyIHUzPTIsTWE9MyxGYz0xMixhbT04MSxlOT1bODAsYW1dLF80PXsxOntuOiJDb2RlUGFnZSIsdDp1M30sMjp7bjoiQ2F0ZWdvcnkiLHQ6ODB9LDM6e246IlByZXNlbnRhdGlvbkZvcm1hdCIsdDo4MH0sNDp7bjoiQnl0ZUNvdW50Iix0Ok1h''@;'; put 'put ''fSw1OntuOiJMaW5lQ291bnQiLHQ6TWF9LDY6e246IlBhcmFncmFwaENvdW50Iix0Ok1hfSw3OntuOiJTbGlkZUNvdW50Iix0Ok1hfSw4OntuOiJOb3RlQ291bnQiLHQ6TWF9LDk6e246IkhpZGRlbkNvdW50Iix0Ok1hfSwxMDp7bjoiTXVsdGltZWRpYUNsaXBDb3VudCIsdDpNYX0sMTE6e246''@;'; put 'put ''IlNjYWxlQ3JvcCIsdDoxMX0sMTI6e246IkhlYWRpbmdQYWlycyIsdDo0MDk2fEZjfSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIsdDo0MTI2fSwxNDp7bjoiTWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2OntuOiJMaW5rc1VwVG9EYXRlIix0OjExfSwxNzp7bjoiQ2hhcmFj''@;'; put 'put ''dGVyQ291bnQiLHQ6TWF9LDE5OntuOiJTaGFyZWREb2MiLHQ6MTF9LDIyOntuOiJIeXBlcmxpbmtzQ2hhbmdlZCIsdDoxMX0sMjM6e246IkFwcFZlcnNpb24iLHQ6TWEscDoidmVyc2lvbiJ9LDI0OntuOiJEaWdTaWciLHQ6NjV9LDI2OntuOiJDb250ZW50VHlwZSIsdDo4MH0sMjc6e246IkNv''@;'; put 'put ''bnRlbnRTdGF0dXMiLHQ6ODB9LDI4OntuOiJMYW5ndWFnZSIsdDo4MH0sMjk6e246IlZlcnNpb24iLHQ6ODB9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSx3cj17MTp7bjoiQ29kZVBhZ2Ui''@;'; put 'put ''LHQ6dTN9LDI6e246IlRpdGxlIix0OjgwfSwzOntuOiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246IktleXdvcmRzIix0OjgwfSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9LDg6e246Ikxhc3RBdXRob3IiLHQ6ODB9LDk6e246IlJl''@;'; put 'put ''dk51bWJlciIsdDo4MH0sMTA6e246IkVkaXRUaW1lIix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJDcmVhdGVkRGF0ZSIsdDo2NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3VudCIsdDpNYX0sMTU6e246IldvcmRDb3VudCIsdDpNYX0s''@;'; put 'put ''MTY6e246IkNoYXJDb3VudCIsdDpNYX0sMTc6e246IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0OjgwfSwxOTp7bjoiRG9jU2VjdXJpdHkiLHQ6TWF9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5''@;'; put 'put ''fSwxOTE5MDU0NDM0Ont9fSxiND1QZShfNCwibiIpLHk0PVBlKHdyLCJuIiksbG09ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJSVSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1''@;'; put 'put ''OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1''@;'; put 'put ''NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LHZpPVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXki''@;'; put 'put ''LCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdy''@;'; put 'put ''aWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiB3NCh5KXtyZXR1cm4geS5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuW1A+PjE2JjI1NSxQPj44JjI1NSwyNTUmUF19KX12YXIgaDM9dzQoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYw''@;'; put 'put ''LDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2''@;'; put 'put ''ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0''@;'; put 'put ''NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDAsMTY3NzcyMTUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pLENy''@;'; put 'put ''PW9uKGgzKSxOYT13NChbMTI2MzIyNTYsOTg2ODk1MCw4NDIxNTA0LDY3MTA4ODYsMzM1NTQ0MywxNjcxMTY4MCwzMjc2OCwxMzM2OTQ5NywxMjgsMzM5NDU2MCwyNjM2NywxMDAyNzIxMiwxMDA1MzE3MSwxMjgsMzI3NjgsODM4ODYwOCwzMjg5Niw4Mzg4NzM2LDg0MjEzNzYsMTM2MzE0ODgs''@;'; put 'put ''MTQ1Mzk5OTQsMTMwNjg4NTAsMTM5MjQzNTIsOTk2NzQ5Niw5MTc1MjY3LDkxOTUwMDgsMzY4MzUzNywxMDY5MjU4LDg4ODA4OTksNzQ5NDY0LDI4OTM0NzYsMTE3NDU3MzAsMzc1MDIwMSwxNTU1OTUwMywxODM3OTQxLDEyMDg0MzU5LDc2MzIyNTAsNzM2MzMyOCw5NTE0NTg4LDgyODg2MTcs''@;'; put 'put ''MzAzNjgxNCwxMTE4NDgxMF0pLFFvPXswOiIjTlVMTCEiLDc6IiNESVYvMCEiLDE1OiIjVkFMVUUhIiwyMzoiI1JFRiEiLDI5OiIjTkFNRT8iLDM2OiIjTlVNISIsNDI6IiNOL0EiLDQzOiIjR0VUVElOR19EQVRBIiwyNTU6IiNXVEY/In0sS2E9QWUoUW8pLFJsPXsiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1hY3Jvc2hlZXQiOiJUT0RP''@;'; put 'put ''IiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbCI6ImNvcmVwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5jdXN0b20tcHJvcGVydGllcyt4bWwiOiJjdXN0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZXh0ZW5kZWQtcHJvcGVydGllcyt4bWwiOiJleHRwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5jdXN0b21YbWxQcm9wZXJ0aWVzK3htbCI6ImN1c3RvbXhtbHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUi''@;'; put 'put ''OiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sIjoi''@;'; put 'put ''Y2hhcnRvYmpzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGNvbG9yc3R5bGUreG1sIjoiY2hhcnRjb2xvcnMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0c3R5bGUreG1sIjoiY2hhcnRzdHlsZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0ZXgr''@;'; put 'put ''eG1sIjoiY2hhcnRleHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRp''@;'; put 'put ''b24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNldHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIs''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVj''@;'; put 'put ''dGlvbnMreG1sIjoiY29ubnMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIjoibGlua3MiLCJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldE1ldGFkYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmlu''@;'; put 'put ''aXRpb24iOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3ht''@;'; put 'put ''bCI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnF1ZXJ5VGFibGUiOiJUT0RPIiwiYXBw''@;'; put 'put ''bGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnlUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnVzZXJOYW1lcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25IZWFkZXJz''@;'; put 'put ''IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5yZXZpc2lvbkxvZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkhlYWRlcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uTG9nK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VyTmFtZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC50YWJsZVNpbmdsZUNlbGxzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlU2luZ2xlQ2VsbHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIiOiJUT0RPIiwi''@;'; put 'put ''YXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs''@;'; put 'put ''LndzU29ydE1hcCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3Blbnht''@;'; put 'put ''bGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwi''@;'; put 'put ''YXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29u''@;'; put 'put ''dHJvbHByb3BlcnRpZXMreG1sIjoiY3RybHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiOiJkYXRhbW9kZWxzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlN1cnZleSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmcreG1sIjoiZHJhd2luZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1Db2xvcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbURhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUxheW91dCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtU3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sIjoicmVscyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5vbGVPYmplY3QiOiJUT0RP''@;'; put 'put ''IiwiaW1hZ2UvcG5nIjoiVE9ETyIsc2hlZXQ6ImpzIn0sSWQ9ZnVuY3Rpb24oKXt2YXIgeT17d29ya2Jvb2tzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCIseGxzbToiYXBwbGljYXRpb24v''@;'; put 'put ''dm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiIseGxhbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCIs''@;'; put 'put ''eGx0eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWwifSxzdHJzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRT''@;'; put 'put ''dHJpbmdzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3MifSxjb21tZW50czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIix4bHNiOiJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQubXMtZXhjZWwuY29tbWVudHMifSxzaGVldHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53b3Jrc2hlZXQifSxjaGFydHM6''@;'; put 'put ''e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldCJ9LGRpYWxvZ3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmRpYWxvZ3NoZWV0In0sbWFjcm9zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCt4bWwiLHhsc2I6ImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0In0sdGFibGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSJ9LHBpdm90czp7''@;'; put 'put ''eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIn0scGl2b3RjYWNoZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIn0scGl2b3RyZWNvcmRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZv''@;'; put 'put ''cm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyJ9LGNvbm5zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1l''@;'; put 'put ''bnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyJ9LGxpbmtzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsr''@;'; put 'put ''eG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIn0sc3R5bGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhj''@;'; put 'put ''ZWwuc3R5bGVzIn19O3JldHVybiBsdCh5KS5mb3JFYWNoKGZ1bmN0aW9uKFApe1sieGxzbSIsInhsYW0iXS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3lbUF1bTF18fCh5W1BdW0xdPXlbUF0ueGxzeCl9KX0pLGx0KHkpLmZvckVhY2goZnVuY3Rpb24oUCl7bHQoeVtQXSkuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihMKXtSbFt5W1BdW0xdXT1QfSl9KSx5fSgpLEhjPWZ1bmN0aW9uIFRlKHkpe2Zvcih2YXIgUD1bXSxMPWx0KHkpLFE9MDtRIT09TC5sZW5ndGg7KytRKW51bGw9PVBbeVtMW1FdXV0mJihQW3lbTFtRXV1dPVtdKSxQW3lbTFtRXV1dLnB1c2goTFtRXSk7cmV0dXJuIFB9KFJsKTtpcy5DVD0i''@;'; put 'put ''aHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIjt2YXIgZjM9U3IoIlR5cGVzIixudWxsLHt4bWxuczppcy5DVCwieG1sbnM6eHNkIjppcy54c2QsInhtbG5zOnhzaSI6aXMueHNpfSksdDk9W1sieG1sIiwiYXBwbGljYXRpb24veG1s''@;'; put 'put ''Il0sWyJiaW4iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIl0sWyJ2bWwiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyJdLFsiZGF0YSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2RlbCtkYXRhIl0sWyJibXAiLCJpbWFnZS9ibXAiXSxbInBuZyIsImltYWdlL3BuZyJdLFsiZ2lmIiwiaW1hZ2UvZ2lmIl0sWyJlbWYiLCJpbWFnZS94LWVtZiJdLFsid21mIiwiaW1hZ2UveC13bWYiXSxbImpwZyIsImltYWdlL2pwZWciXSxb''@;'; put 'put ''ImpwZWciLCJpbWFnZS9qcGVnIl0sWyJ0aWYiLCJpbWFnZS90aWZmIl0sWyJ0aWZmIiwiaW1hZ2UvdGlmZiJdLFsicGRmIiwiYXBwbGljYXRpb24vcGRmIl0sWyJyZWxzIixIYy5yZWxzWzBdXV0ubWFwKGZ1bmN0aW9uKHkpe3JldHVybiBTcigiRGVmYXVsdCIsbnVsbCx7RXh0ZW5zaW9uOnlb''@;'; put 'put ''MF0sQ29udGVudFR5cGU6eVsxXX0pfSksSGk9e1dCOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixTSEVFVDoiaHR0cDovL3NoZWV0anMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURv''@;'; put 'put ''Y3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsSExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaHlwZXJsaW5rIixWTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y''@;'; put 'put ''Zy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdm1sRHJhd2luZyIsWFBBVEg6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rUGF0aCIsWE1JU1M6Imh0dHA6Ly9zY2hlbWFzLm1p''@;'; put 'put ''Y3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bEV4dGVybmFsTGlua1BhdGgveGxQYXRoTWlzc2luZyIsWExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rIixDWE1M''@;'; put 'put ''OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbCIsQ1hNTFA6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1s''@;'; put 'put ''UHJvcHMiLFZCQToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3ZiYVByb2plY3QifTtmdW5jdGlvbiBCaSh5KXt2YXIgUD15Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIHkuc2xpY2UoMCxQKzEpKyJfcmVscy8iK3kuc2xpY2UoUCsxKSsi''@;'; put 'put ''LnJlbHMifWZ1bmN0aW9uIERvKHksUCl7dmFyIEw9eyIhaWQiOnt9fTtpZigheSlyZXR1cm4gTDsiLyIhPT1QLmNoYXJBdCgwKSYmKFA9Ii8iK1ApO3ZhciBRPXt9O3JldHVybih5Lm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBwZT1sbihyZSk7aWYoIjxSZWxhdGlv''@;'; put 'put ''bnNoaXAiPT09cGVbMF0pe3ZhciBfZT17fTtfZS5UeXBlPXBlLlR5cGUsX2UuVGFyZ2V0PXBlLlRhcmdldCxfZS5JZD1wZS5JZCxfZS5UYXJnZXRNb2RlPXBlLlRhcmdldE1vZGU7dmFyIHZlPSJFeHRlcm5hbCI9PT1wZS5UYXJnZXRNb2RlP3BlLlRhcmdldDpzbihwZS5UYXJnZXQsUCk7TFt2''@;'; put 'put ''ZV09X2UsUVtwZS5JZF09X2V9fSksTFsiIWlkIl09USxMfWlzLlJFTFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyI7dmFyIHVhPVNyKCJSZWxhdGlvbnNoaXBzIixudWxsLHt4bWxuczppcy5SRUxTfSk7ZnVuY3Rpb24gWGEo''@;'; put 'put ''eSl7dmFyIFA9W0JuLHVhXTtyZXR1cm4gbHQoeVsiIWlkIl0pLmZvckVhY2goZnVuY3Rpb24oTCl7UFtQLmxlbmd0aF09U3IoIlJlbGF0aW9uc2hpcCIsbnVsbCx5WyIhaWQiXVtMXSl9KSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvUmVsYXRpb25zaGlwcz4iLFBbMV09UFsxXS5yZXBs''@;'; put 'put ''YWNlKCIvPiIsIj4iKSksUC5qb2luKCIiKX12YXIgSTE9W0hpLkhMSU5LLEhpLlhQQVRILEhpLlhNSVNTXTtmdW5jdGlvbiB6byh5LFAsTCxRLHJlLHBlKXtpZihyZXx8KHJlPXt9KSx5WyIhaWQiXXx8KHlbIiFpZCJdPXt9KSxQPDApZm9yKFA9MTt5WyIhaWQiXVsicklkIitQXTsrK1ApO2lm''@;'; put 'put ''KHJlLklkPSJySWQiK1AscmUuVHlwZT1RLHJlLlRhcmdldD1MLHBlP3JlLlRhcmdldE1vZGU9cGU6STEuaW5kZXhPZihyZS5UeXBlKT4tMSYmKHJlLlRhcmdldE1vZGU9IkV4dGVybmFsIikseVsiIWlkIl1bcmUuSWRdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJld3JpdGUgcklkICIrUCk7''@;'; put 'put ''cmV0dXJuIHlbIiFpZCJdW3JlLklkXT1yZSx5WygiLyIrcmUuVGFyZ2V0KS5yZXBsYWNlKCIvLyIsIi8iKV09cmUsUH12YXIgVHU9ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiO2Z1bmN0aW9uIEwxKHksUCxMKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlw''@;'; put 'put ''dGlvbiByZGY6YWJvdXQ9IicreSsnIj5cbicsJyAgICA8cmRmOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvJysoTHx8Im9kZiIpKyIjIitQKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX1m''@;'; put 'put ''dW5jdGlvbiBWbyh5LFApe3JldHVyblsnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJyt5KyciPlxuJywnICAgIDxuczA6aGFzUGFydCB4bWxuczpuczA9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS9wa2cjIiByZGY6cmVzb3VyY2U9IicrUCsn''@;'; put 'put ''Ii8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9dmFyIFM0PWZ1bmN0aW9uKCl7dmFyIHk9JzxvZmZpY2U6ZG9jdW1lbnQtbWV0YSB4bWxuczpvZmZpY2U9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIgeG1sbnM6bWV0YT0i''@;'; put 'put ''dXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgb2ZmaWNlOnZlcnNpb249IjEuMiI+PG9mZmljZTpt''@;'; put 'put ''ZXRhPjxtZXRhOmdlbmVyYXRvcj5TaGVldEpTICcrTS52ZXJzaW9uKyI8L21ldGE6Z2VuZXJhdG9yPjwvb2ZmaWNlOm1ldGE+PC9vZmZpY2U6ZG9jdW1lbnQtbWV0YT4iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB5fX0oKSxPbD1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpj''@;'; put 'put ''b250ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lv''@;'; put 'put ''biIsIlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJU''@;'; put 'put ''aXRsZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXTtpcy5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L21ldGFkYXRhL2Nv''@;'; put 'put ''cmUtcHJvcGVydGllcyIsSGkuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyI7dmFyIEphPWZ1bmN0aW9uKCl7Zm9yKHZhciB5PW5ldyBBcnJheShPbC5sZW5ndGgp''@;'; put 'put ''LFA9MDtQPE9sLmxlbmd0aDsrK1Ape3ZhciBMPU9sW1BdLFE9Iig/OiIrTFswXS5zbGljZSgwLExbMF0uaW5kZXhPZigiOiIpKSsiOikiK0xbMF0uc2xpY2UoTFswXS5pbmRleE9mKCI6IikrMSk7eVtQXT1uZXcgUmVnRXhwKCI8IitRKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrUSsiPiIpfXJl''@;'; put 'put ''dHVybiB5fSgpO2Z1bmN0aW9uIE8yKHkpe3ZhciBQPXt9O3k9UGkoeSk7Zm9yKHZhciBMPTA7TDxPbC5sZW5ndGg7KytMKXt2YXIgUT1PbFtMXSxyZT15Lm1hdGNoKEphW0xdKTtudWxsIT1yZSYmcmUubGVuZ3RoPjAmJihQW1FbMV1dPXhyKHJlWzFdKSksImRhdGUiPT09UVsyXSYmUFtRWzFd''@;'; put 'put ''XSYmKFBbUVsxXV09SHQoUFtRWzFdXSkpfXJldHVybiBQfXZhciBQMj1TcigiY3A6Y29yZVByb3BlcnRpZXMiLG51bGwseyJ4bWxuczpjcCI6aXMuQ09SRV9QUk9QUywieG1sbnM6ZGMiOmlzLmRjLCJ4bWxuczpkY3Rlcm1zIjppcy5kY3Rlcm1zLCJ4bWxuczpkY21pdHlwZSI6aXMuZGNtaXR5''@;'; put 'put ''cGUsInhtbG5zOnhzaSI6aXMueHNpfSk7ZnVuY3Rpb24gaHUoeSxQLEwsUSxyZSl7bnVsbCE9cmVbeV18fG51bGw9PVB8fCIiPT09UHx8KHJlW3ldPVAsUD1GcihQKSxRW1EubGVuZ3RoXT1MP1NyKHksUCxMKTpmcyh5LFApKX12YXIgUjE9W1siQXBwbGljYXRpb24iLCJBcHBsaWNhdGlvbiIs''@;'; put 'put ''InN0cmluZyJdLFsiQXBwVmVyc2lvbiIsIkFwcFZlcnNpb24iLCJzdHJpbmciXSxbIkNvbXBhbnkiLCJDb21wYW55Iiwic3RyaW5nIl0sWyJEb2NTZWN1cml0eSIsIkRvY1NlY3VyaXR5Iiwic3RyaW5nIl0sWyJNYW5hZ2VyIiwiTWFuYWdlciIsInN0cmluZyJdLFsiSHlwZXJsaW5rc0NoYW5n''@;'; put 'put ''ZWQiLCJIeXBlcmxpbmtzQ2hhbmdlZCIsImJvb2wiXSxbIlNoYXJlZERvYyIsIlNoYXJlZERvYyIsImJvb2wiXSxbIkxpbmtzVXBUb0RhdGUiLCJMaW5rc1VwVG9EYXRlIiwiYm9vbCJdLFsiU2NhbGVDcm9wIiwiU2NhbGVDcm9wIiwiYm9vbCJdLFsiSGVhZGluZ1BhaXJzIiwiSGVhZGluZ1Bh''@;'; put 'put ''aXJzIiwicmF3Il0sWyJUaXRsZXNPZlBhcnRzIiwiVGl0bGVzT2ZQYXJ0cyIsInJhdyJdXTtmdW5jdGlvbiB1MCh5LFAsTCxRKXt2YXIgcmU9W107aWYoInN0cmluZyI9PXR5cGVvZiB5KXJlPWUwKHksUSk7ZWxzZSBmb3IodmFyIHBlPTA7cGU8eS5sZW5ndGg7KytwZSlyZT1yZS5jb25jYXQo''@;'; put 'put ''eVtwZV0ubWFwKGZ1bmN0aW9uKFZlKXtyZXR1cm57djpWZX19KSk7dmFyIF9lPSJzdHJpbmciPT10eXBlb2YgUD9lMChQLFEpLm1hcChmdW5jdGlvbihWZSl7cmV0dXJuIFZlLnZ9KTpQLHZlPTAsU2U9MDtpZihfZS5sZW5ndGg+MClmb3IodmFyIEhlPTA7SGUhPT1yZS5sZW5ndGg7SGUrPTIp''@;'; put 'put ''e3N3aXRjaChTZT0rcmVbSGUrMV0udixyZVtIZV0udil7Y2FzZSJXb3Jrc2hlZXRzIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Y2FzZSJcdTA0MWJcdTA0MzhcdTA0NDFcdTA0NDJcdTA0NGIiOmNhc2UiXHUwNjIzXHUwNjQ4XHUwNjMxXHUwNjI3XHUwNjQyIFx1MDYyN1x1MDY0NFx1MDYz''@;'; put 'put ''OVx1MDY0NVx1MDY0NCI6Y2FzZSJcdTMwZWZcdTMwZmNcdTMwYWZcdTMwYjdcdTMwZmNcdTMwYzgiOmNhc2UiXHUwNWQyXHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVlMlx1MDVkMVx1MDVkNVx1MDVkM1x1MDVkNCI6Y2FzZSJBcmJlaXRzYmxceGU0dHRlciI6Y2Fz''@;'; put 'put ''ZSJceGM3YWxcdTAxMzFcdTAxNWZtYSBTYXlmYWxhclx1MDEzMSI6Y2FzZSJGZXVpbGxlcyBkZSBjYWxjdWwiOmNhc2UiRm9nbGkgZGkgbGF2b3JvIjpjYXNlIkZvbGhhcyBkZSBjXHhlMWxjdWxvIjpjYXNlIlBsYW5pbGhhcyI6Y2FzZSJSZWduZWFyayI6Y2FzZSJIb2phcyBkZSBjXHhlMWxj''@;'; put 'put ''dWxvIjpjYXNlIldlcmtibGFkZW4iOkwuV29ya3NoZWV0cz1TZSxMLlNoZWV0TmFtZXM9X2Uuc2xpY2UodmUsdmUrU2UpO2JyZWFrO2Nhc2UiTmFtZWQgUmFuZ2VzIjpjYXNlIlJhbmdvcyBjb24gbm9tYnJlIjpjYXNlIlx1NTQwZFx1NTI0ZFx1NGVkOFx1MzA0ZFx1NGUwMFx1ODlhNyI6Y2Fz''@;'; put 'put ''ZSJCZW5hbm50ZSBCZXJlaWNoZSI6Y2FzZSJOYXZuZ2l2bmUgb21yXHhlNWRlciI6TC5OYW1lZFJhbmdlcz1TZSxMLkRlZmluZWROYW1lcz1fZS5zbGljZSh2ZSx2ZStTZSk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjpMLkNoYXJ0c2hlZXRzPVNlLEwuQ2hhcnROYW1lcz1f''@;'; put 'put ''ZS5zbGljZSh2ZSx2ZStTZSl9dmUrPVNlfX1pcy5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLEhpLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m''@;'; put 'put ''ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlbmRlZC1wcm9wZXJ0aWVzIjt2YXIgZzM9U3IoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOmlzLkVYVF9QUk9QUywieG1sbnM6dnQiOmlzLnZ0fSk7aXMuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMu''@;'; put 'put ''b3JnL29mZmljZURvY3VtZW50LzIwMDYvY3VzdG9tLXByb3BlcnRpZXMiLEhpLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tLXByb3BlcnRpZXMiO3ZhciBrdz0vPFtePl0rPltePF0q''@;'; put 'put ''L2csdW09U3IoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOmlzLkNVU1RfUFJPUFMsInhtbG5zOnZ0Ijppcy52dH0pO3ZhciBGMj17VGl0bGU6IlRpdGxlIixTdWJqZWN0OiJTdWJqZWN0IixBdXRob3I6IkF1dGhvciIsS2V5d29yZHM6IktleXdvcmRzIixDb21tZW50czoiRGVzY3JpcHRpb24i''@;'; put 'put ''LExhc3RBdXRob3I6Ikxhc3RBdXRob3IiLFJldk51bWJlcjoiUmV2aXNpb24iLEFwcGxpY2F0aW9uOiJBcHBOYW1lIixMYXN0UHJpbnRlZDoiTGFzdFByaW50ZWQiLENyZWF0ZWREYXRlOiJDcmVhdGVkIixNb2RpZmllZERhdGU6Ikxhc3RTYXZlZCIsQ2F0ZWdvcnk6IkNhdGVnb3J5IixNYW5h''@;'; put 'put ''Z2VyOiJNYW5hZ2VyIixDb21wYW55OiJDb21wYW55IixBcHBWZXJzaW9uOiJWZXJzaW9uIixDb250ZW50U3RhdHVzOiJDb250ZW50U3RhdHVzIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixMYW5ndWFnZToiTGFuZ3VhZ2UifSxIMj1iZShGMik7ZnVuY3Rpb24gUmQoeSxQLEwpe3lbUD1IMltQ''@;'; put 'put ''XXx8UF09TH1mdW5jdGlvbiBDYyh5KXt2YXIgUD15LnJlYWRfc2hpZnQoNCksTD15LnJlYWRfc2hpZnQoNCk7cmV0dXJuIG5ldyBEYXRlKDFlMyooTC8xZTcqTWF0aC5wb3coMiwzMikrUC8xZTctMTE2NDQ0NzM2MDApKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuMDAwLywiIil9ZnVuY3Rp''@;'; put 'put ''b24gT2QoeSxQLEwpe3ZhciBRPXkubCxyZT15LnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihMKWZvcig7eS5sLVEmMzspKyt5Lmw7cmV0dXJuIHJlfWZ1bmN0aW9uIFAxKHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoMCwibHB3c3RyIik7cmV0dXJuIEwmJih5LmwrPTQtKFEubGVuZ3Ro''@;'; put 'put ''KzEmMykmMyksUX1mdW5jdGlvbiBxaCh5LFAsTCl7cmV0dXJuIDMxPT09UD9QMSh5KTpPZCh5LDAsTCl9ZnVuY3Rpb24gUWMoeSxQLEwpe3JldHVybiBxaCh5LFAsITE9PT1MPzA6NCl9ZnVuY3Rpb24gbzkoeSl7dmFyIFA9eS5sLEw9RTQoeSxhbSk7cmV0dXJuIDA9PXlbeS5sXSYmMD09eVt5''@;'; put 'put ''LmwrMV0mJnkubC1QJjImJih5LmwrPTIpLFtMLEU0KHksTWEpXX1mdW5jdGlvbiBkbSh5LFApe2Zvcih2YXIgTD15LnJlYWRfc2hpZnQoNCksUT17fSxyZT0wO3JlIT1MOysrcmUpe3ZhciBwZT15LnJlYWRfc2hpZnQoNCksX2U9eS5yZWFkX3NoaWZ0KDQpO1FbcGVdPXkucmVhZF9zaGlmdChf''@;'; put 'put ''ZSwxMjAwPT09UD8idXRmMTZsZSI6InV0ZjgiKS5yZXBsYWNlKHYsIiIpLnJlcGxhY2UocCwiISIpLDEyMDA9PT1QJiZfZSUyJiYoeS5sKz0yKX1yZXR1cm4gMyZ5LmwmJih5Lmw9eS5sPj4zPDwyKSxRfWZ1bmN0aW9uIGhtKHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KSxMPXkuc2xpY2UoeS5s''@;'; put 'put ''LHkubCtQKTtyZXR1cm4geS5sKz1QLCgzJlApPjAmJih5LmwrPTQtKDMmUCkmMyksTH1mdW5jdGlvbiBFNCh5LFAsTCl7dmFyIHJlLFE9eS5yZWFkX3NoaWZ0KDIpLHBlPUx8fHt9O2lmKHkubCs9MixQIT09RmMmJlEhPT1QJiYtMT09PWU5LmluZGV4T2YoUCkmJig0MTI2IT0oNjU1MzQmUCl8''@;'; put 'put ''fDQxMjYhPSg2NTUzNCZRKSkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0eXBlICIrUCsiIHNhdyAiK1EpO3N3aXRjaChQPT09RmM/UTpQKXtjYXNlIDI6cmV0dXJuIHJlPXkucmVhZF9zaGlmdCgyLCJpIikscGUucmF3fHwoeS5sKz0yKSxyZTtjYXNlIDM6cmV0dXJuIHkucmVhZF9zaGlm''@;'; put 'put ''dCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4gMCE9PXkucmVhZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiB5LnJlYWRfc2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gT2QoeSwwLDQpLnJlcGxhY2UodiwiIik7Y2FzZSAzMTpyZXR1cm4gUDEoeSk7Y2FzZSA2NDpyZXR1cm4gQ2MoeSk7Y2FzZSA2NTpy''@;'; put 'put ''ZXR1cm4gaG0oeSk7Y2FzZSA3MTpyZXR1cm4gZnVuY3Rpb24gVHcoeSl7dmFyIFA9e307cmV0dXJuIFAuU2l6ZT15LnJlYWRfc2hpZnQoNCkseS5sKz1QLlNpemUrMy0oUC5TaXplLTEpJTQsUH0oeSk7Y2FzZSA4MDpyZXR1cm4gUWMoeSxRLCFwZS5yYXcpLnJlcGxhY2UodiwiIik7Y2FzZSA4''@;'; put 'put ''MTpyZXR1cm4gZnVuY3Rpb24geDQoeSxQKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIlZ0VW5hbGlnbmVkU3RyaW5nIG11c3QgaGF2ZSBwb3NpdGl2ZSBsZW5ndGgiKTtyZXR1cm4gcWgoeSxQLDApfSh5LFEpLnJlcGxhY2UodiwiIik7Y2FzZSA0MTA4OnJldHVybiBmdW5jdGlvbiBzOSh5KXtm''@;'; put 'put ''b3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9W10sUT0wO1E8UC8yOysrUSlMLnB1c2gobzkoeSkpO3JldHVybiBMfSh5KTtjYXNlIDQxMjY6Y2FzZSA0MTI3OnJldHVybiA0MTI3PT1RP2Z1bmN0aW9uIHI5KHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksTD1bXSxRPTA7USE9UDsrK1Ep''@;'; put 'put ''e3ZhciByZT15Lmw7TFtRXT15LnJlYWRfc2hpZnQoMCwibHB3c3RyIikucmVwbGFjZSh2LCIiKSx5LmwtcmUmMiYmKHkubCs9Mil9cmV0dXJuIEx9KHkpOmZ1bmN0aW9uIGk5KHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksTD1bXSxRPTA7USE9UDsrK1EpTFtRXT15LnJlYWRfc2hpZnQo''@;'; put 'put ''MCwibHBzdHItY3AiKS5yZXBsYWNlKHYsIiIpO3JldHVybiBMfSh5KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrUCsiICIrUSl9fWZ1bmN0aW9uIGE5KHksUCl7dmFyIEw9ZnIoNCksUT1mcig0KTtzd2l0Y2goTC53cml0''@;'; put 'put ''ZV9zaGlmdCg0LDgwPT15PzMxOnkpLHkpe2Nhc2UgMzpRLndyaXRlX3NoaWZ0KC00LFApO2JyZWFrO2Nhc2UgNTooUT1mcig4KSkud3JpdGVfc2hpZnQoOCxQLCJmIik7YnJlYWs7Y2FzZSAxMTpRLndyaXRlX3NoaWZ0KDQsUD8xOjApO2JyZWFrO2Nhc2UgNjQ6UT1mdW5jdGlvbiBpYyh5KXt2''@;'; put 'put ''YXIgTD0oInN0cmluZyI9PXR5cGVvZiB5P25ldyBEYXRlKERhdGUucGFyc2UoeSkpOnkpLmdldFRpbWUoKS8xZTMrMTE2NDQ0NzM2MDAsUT1MJU1hdGgucG93KDIsMzIpLHJlPShMLVEpL01hdGgucG93KDIsMzIpO3JlKj0xZTc7dmFyIHBlPShRKj0xZTcpL01hdGgucG93KDIsMzIpfDA7cGU+''@;'; put 'put ''MCYmKFElPU1hdGgucG93KDIsMzIpLHJlKz1wZSk7dmFyIF9lPWZyKDgpO3JldHVybiBfZS53cml0ZV9zaGlmdCg0LFEpLF9lLndyaXRlX3NoaWZ0KDQscmUpLF9lfShQKTticmVhaztjYXNlIDMxOmNhc2UgODA6Zm9yKChRPWZyKDQrMiooUC5sZW5ndGgrMSkrKFAubGVuZ3RoJTI/MDoyKSkp''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsUC5sZW5ndGgrMSksUS53cml0ZV9zaGlmdCgwLFAsImRiY3MiKTtRLmwhPVEubGVuZ3RoOylRLndyaXRlX3NoaWZ0KDEsMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK3krIiAiK1Ap''@;'; put 'put ''fXJldHVybiBTKFtMLFFdKX1mdW5jdGlvbiBGMSh5LFApe3ZhciBMPXkubCxRPXkucmVhZF9zaGlmdCg0KSxyZT15LnJlYWRfc2hpZnQoNCkscGU9W10sX2U9MCx2ZT0wLFNlPS0xLEhlPXt9O2ZvcihfZT0wO19lIT1yZTsrK19lKXt2YXIgVmU9eS5yZWFkX3NoaWZ0KDQpLEdlPXkucmVhZF9z''@;'; put 'put ''aGlmdCg0KTtwZVtfZV09W1ZlLEdlK0xdfXBlLnNvcnQoZnVuY3Rpb24oRXQsVHQpe3JldHVybiBFdFsxXS1UdFsxXX0pO3ZhciBudD17fTtmb3IoX2U9MDtfZSE9cmU7KytfZSl7aWYoeS5sIT09cGVbX2VdWzFdKXt2YXIgZHQ9ITA7aWYoX2U+MCYmUClzd2l0Y2goUFtwZVtfZS0xXVswXV0u''@;'; put 'put ''dCl7Y2FzZSAyOnkubCsyPT09cGVbX2VdWzFdJiYoeS5sKz0yLGR0PSExKTticmVhaztjYXNlIDgwOmNhc2UgNDEwODp5Lmw8PXBlW19lXVsxXSYmKHkubD1wZVtfZV1bMV0sZHQ9ITEpfWlmKCghUHx8MD09X2UpJiZ5Lmw8PXBlW19lXVsxXSYmKGR0PSExLHkubD1wZVtfZV1bMV0pLGR0KXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiUmVhZCBFcnJvcjogRXhwZWN0ZWQgYWRkcmVzcyAiK3BlW19lXVsxXSsiIGF0ICIreS5sKyIgOiIrX2UpfWlmKFApe3ZhciBDdD1QW3BlW19lXVswXV07aWYobnRbQ3Qubl09RTQoeSxDdC50LHtyYXc6ITB9KSwidmVyc2lvbiI9PT1DdC5wJiYobnRbQ3Qubl09U3Ry''@;'; put 'put ''aW5nKG50W0N0Lm5dPj4xNikrIi4iKygiMDAwMCIrU3RyaW5nKDY1NTM1Jm50W0N0Lm5dKSkuc2xpY2UoLTQpKSwiQ29kZVBhZ2UiPT1DdC5uKXN3aXRjaChudFtDdC5uXSl7Y2FzZSAwOm50W0N0Lm5dPTEyNTI7Y2FzZSA4NzQ6Y2FzZSA5MzI6Y2FzZSA5MzY6Y2FzZSA5NDk6Y2FzZSA5NTA6''@;'; put 'put ''Y2FzZSAxMjUwOmNhc2UgMTI1MTpjYXNlIDEyNTM6Y2FzZSAxMjU0OmNhc2UgMTI1NTpjYXNlIDEyNTY6Y2FzZSAxMjU3OmNhc2UgMTI1ODpjYXNlIDFlNDpjYXNlIDEyMDA6Y2FzZSAxMjAxOmNhc2UgMTI1MjpjYXNlIDY1ZTM6Y2FzZS01MzY6Y2FzZSA2NTAwMTpjYXNlLTUzNTpqKHZlPW50''@;'; put 'put ''W0N0Lm5dPj4+MCY2NTUzNSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK250W0N0Lm5dKX19ZWxzZSBpZigxPT09cGVbX2VdWzBdKXtpZih2ZT1udC5Db2RlUGFnZT1FNCh5LHUzKSxqKHZlKSwtMSE9PVNlKXt2YXIgY3Q9eS5sO3kubD1w''@;'; put 'put ''ZVtTZV1bMV0sSGU9ZG0oeSx2ZSkseS5sPWN0fX1lbHNlIGlmKDA9PT1wZVtfZV1bMF0pe2lmKDA9PT12ZSl7U2U9X2UseS5sPXBlW19lKzFdWzFdO2NvbnRpbnVlfUhlPWRtKHksdmUpfWVsc2V7dmFyIEZ0LGJ0PUhlW3BlW19lXVswXV07c3dpdGNoKHlbeS5sXSl7Y2FzZSA2NTp5LmwrPTQs''@;'; put 'put ''RnQ9aG0oeSk7YnJlYWs7Y2FzZSAzMDpjYXNlIDMxOnkubCs9NCxGdD1RYyh5LHlbeS5sLTRdKS5yZXBsYWNlKC9cdTAwMDArJC8sIiIpO2JyZWFrO2Nhc2UgMzp5LmwrPTQsRnQ9eS5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OnkubCs9NCxGdD15LnJlYWRfc2hpZnQoNCk7YnJl''@;'; put 'put ''YWs7Y2FzZSA1OnkubCs9NCxGdD15LnJlYWRfc2hpZnQoOCwiZiIpO2JyZWFrO2Nhc2UgMTE6eS5sKz00LEZ0PVNvKHksNCk7YnJlYWs7Y2FzZSA2NDp5LmwrPTQsRnQ9SHQoQ2MoeSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnBhcnNlZCB2YWx1ZTogIit5W3kubF0pfW50''@;'; put 'put ''W2J0XT1GdH19cmV0dXJuIHkubD1MK1EsbnR9dmFyIGZtPVsiQ29kZVBhZ2UiLCJUaHVtYm5haWwiLCJfUElEX0xJTktCQVNFIiwiX1BJRF9ITElOS1MiLCJTeXN0ZW1JZGVudGlmaWVyIiwiRk1USUQiXS5jb25jYXQoWyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyIsIk5hbWVkUmFuZ2VzIiwi''@;'; put 'put ''RGVmaW5lZE5hbWVzIiwiQ2hhcnRzaGVldHMiLCJDaGFydE5hbWVzIl0pO2Z1bmN0aW9uIER3KHkpe3N3aXRjaCh0eXBlb2YgeSl7Y2FzZSJib29sZWFuIjpyZXR1cm4gMTE7Y2FzZSJudW1iZXIiOnJldHVybigwfHkpPT15PzM6NTtjYXNlInN0cmluZyI6cmV0dXJuIDMxO2Nhc2Uib2JqZWN0''@;'; put 'put ''IjppZih5IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gNjR9cmV0dXJuLTF9ZnVuY3Rpb24gbDkoeSxQLEwpe3ZhciBRPWZyKDgpLHJlPVtdLHBlPVtdLF9lPTgsdmU9MCxTZT1mcig4KSxIZT1mcig4KTtpZihTZS53cml0ZV9zaGlmdCg0LDIpLFNlLndyaXRlX3NoaWZ0KDQsMTIwMCksSGUud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCwxKSxwZS5wdXNoKFNlKSxyZS5wdXNoKEhlKSxfZSs9OCtTZS5sZW5ndGgsIVApeyhIZT1mcig4KSkud3JpdGVfc2hpZnQoNCwwKSxyZS51bnNoaWZ0KEhlKTt2YXIgVmU9W2ZyKDQpXTtmb3IoVmVbMF0ud3JpdGVfc2hpZnQoNCx5Lmxlbmd0aCksdmU9MDt2ZTx5Lmxlbmd0''@;'; put 'put ''aDsrK3ZlKXt2YXIgR2U9eVt2ZV1bMF07Zm9yKChTZT1mcig4KzIqKEdlLmxlbmd0aCsxKSsoR2UubGVuZ3RoJTI/MDoyKSkpLndyaXRlX3NoaWZ0KDQsdmUrMiksU2Uud3JpdGVfc2hpZnQoNCxHZS5sZW5ndGgrMSksU2Uud3JpdGVfc2hpZnQoMCxHZSwiZGJjcyIpO1NlLmwhPVNlLmxlbmd0''@;'; put 'put ''aDspU2Uud3JpdGVfc2hpZnQoMSwwKTtWZS5wdXNoKFNlKX1TZT1TKFZlKSxwZS51bnNoaWZ0KFNlKSxfZSs9OCtTZS5sZW5ndGh9Zm9yKHZlPTA7dmU8eS5sZW5ndGg7Kyt2ZSlpZigoIVB8fFBbeVt2ZV1bMF1dKSYmIShmbS5pbmRleE9mKHlbdmVdWzBdKT4tMSkmJm51bGwhPXlbdmVdWzFd''@;'; put 'put ''KXt2YXIgbnQ9eVt2ZV1bMV0sZHQ9MDtpZihQKXt2YXIgQ3Q9TFtkdD0rUFt5W3ZlXVswXV1dO2lmKCJ2ZXJzaW9uIj09Q3QucCYmInN0cmluZyI9PXR5cGVvZiBudCl7dmFyIGN0PW50LnNwbGl0KCIuIik7bnQ9KCtjdFswXTw8MTYpKygrY3RbMV18fDApfVNlPWE5KEN0LnQsbnQpfWVsc2V7''@;'; put 'put ''dmFyIGJ0PUR3KG50KTstMT09YnQmJihidD0zMSxudD1TdHJpbmcobnQpKSxTZT1hOShidCxudCl9cGUucHVzaChTZSksKEhlPWZyKDgpKS53cml0ZV9zaGlmdCg0LFA/ZHQ6Mit2ZSkscmUucHVzaChIZSksX2UrPTgrU2UubGVuZ3RofXZhciBGdD04KihwZS5sZW5ndGgrMSk7Zm9yKHZlPTA7''@;'; put 'put ''dmU8cGUubGVuZ3RoOysrdmUpcmVbdmVdLndyaXRlX3NoaWZ0KDQsRnQpLEZ0Kz1wZVt2ZV0ubGVuZ3RoO3JldHVybiBRLndyaXRlX3NoaWZ0KDQsX2UpLFEud3JpdGVfc2hpZnQoNCxwZS5sZW5ndGgpLFMoW1FdLmNvbmNhdChyZSkuY29uY2F0KHBlKSl9ZnVuY3Rpb24gYzkoeSxQLEwpe3Zh''@;'; put 'put ''ciBRPXkuY29udGVudDtpZighUSlyZXR1cm57fTtvbChRLDApO3ZhciByZSxwZSxfZSx2ZSxTZT0wO1EuY2hrKCJmZWZmIiwiQnl0ZSBPcmRlcjogIiksUS5yZWFkX3NoaWZ0KDIpO3ZhciBIZT1RLnJlYWRfc2hpZnQoNCksVmU9US5yZWFkX3NoaWZ0KDE2KTtpZihWZSE9PUJlLnV0aWxzLmNv''@;'; put 'put ''bnN0cy5IRUFERVJfQ0xTSUQmJlZlIT09TCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBQcm9wZXJ0eVNldCBDTFNJRCAiK1ZlKTtpZigxIT09KHJlPVEucmVhZF9zaGlmdCg0KSkmJjIhPT1yZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAjU2V0czogIityZSk7aWYocGU9US5yZWFkX3No''@;'; put 'put ''aWZ0KDE2KSx2ZT1RLnJlYWRfc2hpZnQoNCksMT09PXJlJiZ2ZSE9PVEubCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaDogIit2ZSsiICE9PSAiK1EubCk7Mj09PXJlJiYoX2U9US5yZWFkX3NoaWZ0KDE2KSxTZT1RLnJlYWRfc2hpZnQoNCkpO3ZhciBDdCxHZT1GMShRLFApLG50''@;'; put 'put ''PXtTeXN0ZW1JZGVudGlmaWVyOkhlfTtmb3IodmFyIGR0IGluIEdlKW50W2R0XT1HZVtkdF07aWYobnQuRk1USUQ9cGUsMT09PXJlKXJldHVybiBudDtpZihTZS1RLmw9PTImJihRLmwrPTIpLFEubCE9PVNlKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrUS5sKyIgIT09''@;'; put 'put ''ICIrU2UpO3RyeXtDdD1GMShRLG51bGwpfWNhdGNoe31mb3IoZHQgaW4gQ3QpbnRbZHRdPUN0W2R0XTtyZXR1cm4gbnQuRk1USUQ9W3BlLF9lXSxudH1mdW5jdGlvbiB3aSh5LFAsTCxRLHJlLHBlKXt2YXIgX2U9ZnIocmU/Njg6NDgpLHZlPVtfZV07X2Uud3JpdGVfc2hpZnQoMiw2NTUzNCks''@;'; put 'put ''X2Uud3JpdGVfc2hpZnQoMiwwKSxfZS53cml0ZV9zaGlmdCg0LDg0MjQxMjU5OSksX2Uud3JpdGVfc2hpZnQoMTYsQmUudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCwiaGV4IiksX2Uud3JpdGVfc2hpZnQoNCxyZT8yOjEpLF9lLndyaXRlX3NoaWZ0KDE2LFAsImhleCIpLF9lLndyaXRlX3No''@;'; put 'put ''aWZ0KDQscmU/Njg6NDgpO3ZhciBTZT1sOSh5LEwsUSk7aWYodmUucHVzaChTZSkscmUpe3ZhciBIZT1sOShyZSxudWxsLG51bGwpO19lLndyaXRlX3NoaWZ0KDE2LHBlLCJoZXgiKSxfZS53cml0ZV9zaGlmdCg0LDY4K1NlLmxlbmd0aCksdmUucHVzaChIZSl9cmV0dXJuIFModmUpfWZ1bmN0''@;'; put 'put ''aW9uIFBkKHksUCl7cmV0dXJuIHkucmVhZF9zaGlmdChQKSxudWxsfWZ1bmN0aW9uIFNvKHksUCl7cmV0dXJuIDE9PT15LnJlYWRfc2hpZnQoUCl9ZnVuY3Rpb24gUGwoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoMikpLFAud3JpdGVfc2hpZnQoMiwrISF5KSxQfWZ1bmN0aW9uIGhsKHkpe3JldHVy''@;'; put 'put ''biB5LnJlYWRfc2hpZnQoMiwidSIpfWZ1bmN0aW9uIGZ1KHksUCl7cmV0dXJuIFB8fChQPWZyKDIpKSxQLndyaXRlX3NoaWZ0KDIseSksUH1mdW5jdGlvbiBIMSh5LFApe3JldHVybiBmdW5jdGlvbiBrNCh5LFAsTCl7Zm9yKHZhciBRPVtdLHJlPXkubCtQO3kubDxyZTspUS5wdXNoKEwoeSxy''@;'; put 'put ''ZS15LmwpKTtpZihyZSE9PXkubCl0aHJvdyBuZXcgRXJyb3IoIlNsdXJwIGVycm9yIik7cmV0dXJuIFF9KHksUCxobCl9ZnVuY3Rpb24gdTkoeSxQLEwpe3JldHVybiBMfHwoTD1mcigyKSksTC53cml0ZV9zaGlmdCgxLCJlIj09UD8reTorISF5KSxMLndyaXRlX3NoaWZ0KDEsImUiPT1QPzE6''@;'; put 'put ''MCksTH1mdW5jdGlvbiBGZCh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KEwmJkwuYmlmZj49MTI/MjoxKSxyZT0ic2Jjcy1jb250IixwZT1PO0wmJkwuYmlmZj49OCYmKE89MTIwMCksTCYmOCE9TC5iaWZmPzEyPT1MLmJpZmYmJihyZT0id3N0ciIpOnkucmVhZF9zaGlmdCgxKSYmKHJlPSJk''@;'; put 'put ''YmNzLWNvbnQiKSxMLmJpZmY+PTImJkwuYmlmZjw9NSYmKHJlPSJjcHN0ciIpO3ZhciB2ZT1RP3kucmVhZF9zaGlmdChRLHJlKToiIjtyZXR1cm4gTz1wZSx2ZX1mdW5jdGlvbiBnbSh5KXt2YXIgUD1PO089MTIwMDt2YXIgU2UsTD15LnJlYWRfc2hpZnQoMiksUT15LnJlYWRfc2hpZnQoMSks''@;'; put 'put ''cmU9NCZRLHBlPTgmUSxfZT0xKygxJlEpLHZlPTAsSGU9e307cGUmJih2ZT15LnJlYWRfc2hpZnQoMikpLHJlJiYoU2U9eS5yZWFkX3NoaWZ0KDQpKTt2YXIgR2U9MD09PUw/IiI6eS5yZWFkX3NoaWZ0KEwsMj09X2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpO2lmKHBlKWZvcihIZS5fUj1b''@;'; put 'put ''XTt2ZS0tID4wOylIZS5fUi5wdXNoKHtpZHg6eS5yZWFkX3NoaWZ0KDIpLGlmbnQ6eS5yZWFkX3NoaWZ0KDIpfSk7cmV0dXJuIHJlJiYoeS5sKz1TZSksSGUudD1HZSxwZXx8KEhlLnI9Ijx0PiIrSGUudCsiPC90PiIpLE89UCxIZX1mdW5jdGlvbiBqMCh5LFApe3ZhciBMPXkuUiYmeS5SLmxl''@;'; put 'put ''bmd0aHx8eS5yO3kuciYmKHkuUj1EbSh5LnIpKTt2YXIgUT0iIixyZT0wO0w/eS5SLmZvckVhY2goZnVuY3Rpb24oQ3Qpe3JlKyssUSs9Q3Qudnx8IiJ9KTooUT15LnR8fCIiLHJlPTEpO3ZhciBwZT1mcigzKyhyZT4xPzI6MCkpO3BlLndyaXRlX3NoaWZ0KDIsUS5sZW5ndGgpLHBlLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsMXwocmU+MT84OjApKSxyZT4xJiZwZS53cml0ZV9zaGlmdCgyLHJlKTt2YXIgX2U9ZnIoMipRLmxlbmd0aCk7X2Uud3JpdGVfc2hpZnQoMipRLmxlbmd0aCxRLCJ1dGYxNmxlIik7dmFyIHZlPVtwZSxfZV07aWYoTCl7dmFyIFNlPWZyKDQqeS5SLmxlbmd0aCksSGU9MDt2ZS5w''@;'; put 'put ''dXNoKFNlKTtmb3IodmFyIFZlPTA7VmU8eS5SLmxlbmd0aDsrK1ZlKXt2YXIgR2U9eS5SW1ZlXTtTZS53cml0ZV9zaGlmdCgyLEhlKSxIZSs9KEdlLnZ8fCIiKS5sZW5ndGg7dmFyIG50PUdlLnM/Z3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpHZS5zfSxQKTowLGR0''@;'; put 'put ''PVAuY2VsbFhmc1tudF0uZm9udElkO1NlLndyaXRlX3NoaWZ0KDIsZHQ8ND9kdDpkdCsxKX19cmV0dXJuIFModmUpfWZ1bmN0aW9uIEhkKHksUCxMKXtpZihMKXtpZihMLmJpZmY+PTImJkwuYmlmZjw9NSlyZXR1cm4geS5yZWFkX3NoaWZ0KFAsImNwc3RyIik7aWYoTC5iaWZmPj0xMilyZXR1''@;'; put 'put ''cm4geS5yZWFkX3NoaWZ0KFAsImRiY3MtY29udCIpfXZhciByZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHkucmVhZF9zaGlmdChQLDA9PT1yZT8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gTjIoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdChMJiYyPT1MLmJpZmY/MToyKTty''@;'; put 'put ''ZXR1cm4gMD09PVE/KHkubCsrLCIiKTpIZCh5LFEsTCl9ZnVuY3Rpb24gVjIoeSxQLEwpe2lmKEwuYmlmZj41KXJldHVybiBOMih5LDAsTCk7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09UT8oeS5sKyssIiIpOnkucmVhZF9zaGlmdChRLEwuYmlmZjw9NHx8IXkubGVucz8iY3Bz''@;'; put 'put ''dHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiBtbSh5LFAsTCl7cmV0dXJuIEx8fChMPWZyKDMrMip5Lmxlbmd0aCkpLEwud3JpdGVfc2hpZnQoMix5Lmxlbmd0aCksTC53cml0ZV9zaGlmdCgxLDEpLEwud3JpdGVfc2hpZnQoMzEseSwidXRmMTZsZSIpLEx9ZnVuY3Rpb24gQTQoeSl7dmFyIFA9''@;'; put 'put ''eS5yZWFkX3NoaWZ0KDQpO3JldHVybiBQPjA/eS5yZWFkX3NoaWZ0KFAsInV0ZjE2bGUiKS5yZXBsYWNlKHYsIiIpOiIifWZ1bmN0aW9uIF8zKHksUCl7UHx8KFA9ZnIoNisyKnkubGVuZ3RoKSksUC53cml0ZV9zaGlmdCg0LDEreS5sZW5ndGgpO2Zvcih2YXIgTD0wO0w8eS5sZW5ndGg7KytM''@;'; put 'put ''KVAud3JpdGVfc2hpZnQoMix5LmNoYXJDb2RlQXQoTCkpO3JldHVybiBQLndyaXRlX3NoaWZ0KDIsMCksUH1mdW5jdGlvbiBiMyh5KXt2YXIgUD1mcig1MTIpLEw9MCxRPXkuVGFyZ2V0OyJmaWxlOi8vIj09US5zbGljZSgwLDcpJiYoUT1RLnNsaWNlKDcpKTt2YXIgcmU9US5pbmRleE9mKCIj''@;'; put 'put ''IikscGU9cmU+LTE/MzE6MjM7c3dpdGNoKFEuY2hhckF0KDApKXtjYXNlIiMiOnBlPTI4O2JyZWFrO2Nhc2UiLiI6cGUmPS0zfVAud3JpdGVfc2hpZnQoNCwyKSxQLndyaXRlX3NoaWZ0KDQscGUpO3ZhciBfZT1bOCw2ODE1ODI3LDY2MTkyMzcsNDg0OTc4MCw4M107Zm9yKEw9MDtMPF9lLmxl''@;'; put 'put ''bmd0aDsrK0wpUC53cml0ZV9zaGlmdCg0LF9lW0xdKTtpZigyOD09cGUpXzMoUT1RLnNsaWNlKDEpLFApO2Vsc2UgaWYoMiZwZSl7Zm9yKF9lPSJlMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxMPTA7TDxfZS5sZW5ndGg7KytMKVAu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSxwYXJzZUludChfZVtMXSwxNikpO3ZhciB2ZT1yZT4tMT9RLnNsaWNlKDAscmUpOlE7Zm9yKFAud3JpdGVfc2hpZnQoNCwyKih2ZS5sZW5ndGgrMSkpLEw9MDtMPHZlLmxlbmd0aDsrK0wpUC53cml0ZV9zaGlmdCgyLHZlLmNoYXJDb2RlQXQoTCkpO1Aud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiwwKSw4JnBlJiZfMyhyZT4tMT9RLnNsaWNlKHJlKzEpOiIiLFApfWVsc2V7Zm9yKF9lPSIwMyAwMyAwMCAwMCAwMCAwMCAwMCAwMCBjMCAwMCAwMCAwMCAwMCAwMCAwMCA0NiIuc3BsaXQoIiAiKSxMPTA7TDxfZS5sZW5ndGg7KytMKVAud3JpdGVfc2hpZnQoMSxwYXJzZUludChfZVtM''@;'; put 'put ''XSwxNikpO2Zvcih2YXIgU2U9MDsiLi4vIj09US5zbGljZSgzKlNlLDMqU2UrMyl8fCIuLlxcIj09US5zbGljZSgzKlNlLDMqU2UrMyk7KSsrU2U7Zm9yKFAud3JpdGVfc2hpZnQoMixTZSksUC53cml0ZV9zaGlmdCg0LFEubGVuZ3RoLTMqU2UrMSksTD0wO0w8US5sZW5ndGgtMypTZTsrK0wp''@;'; put 'put ''UC53cml0ZV9zaGlmdCgxLDI1NSZRLmNoYXJDb2RlQXQoTCszKlNlKSk7Zm9yKFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDIsNjU1MzUpLFAud3JpdGVfc2hpZnQoMiw1NzAwNSksTD0wO0w8NjsrK0wpUC53cml0ZV9zaGlmdCg0LDApfXJldHVybiBQLnNsaWNlKDAsUC5sKX1m''@;'; put 'put ''dW5jdGlvbiB2bSh5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpLHkucmVhZF9zaGlmdCgxKSx5LnJlYWRfc2hpZnQoMSkseS5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiBkOSh5LFApe3ZhciBMPXZtKHkpO3JldHVybiBMWzNdPTAsTH1mdW5jdGlvbiBMdSh5KXtyZXR1cm57cjp5LnJlYWRfc2hp''@;'; put 'put ''ZnQoMiksYzp5LnJlYWRfc2hpZnQoMiksaXhmZTp5LnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIHowKHksUCxMLFEpe3JldHVybiBRfHwoUT1mcig2KSksUS53cml0ZV9zaGlmdCgyLHkpLFEud3JpdGVfc2hpZnQoMixQKSxRLndyaXRlX3NoaWZ0KDIsTHx8MCksUX1mdW5jdGlvbiBmOSh5LFAs''@;'; put 'put ''TCl7dmFyIFE9TC5iaWZmPjg/NDoyO3JldHVyblt5LnJlYWRfc2hpZnQoUSkseS5yZWFkX3NoaWZ0KFEsImkiKSx5LnJlYWRfc2hpZnQoUSwiaSIpXX1mdW5jdGlvbiBwOSh5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDIpLFhjKHkpXX1mdW5jdGlvbiBLaCh5KXt2YXIgUD15LnJlYWRfc2hpZnQo''@;'; put 'put ''MiksTD15LnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6eS5yZWFkX3NoaWZ0KDIpLHI6UH0sZTp7Yzp5LnJlYWRfc2hpZnQoMikscjpMfX19ZnVuY3Rpb24gVTAoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoOCkpLFAud3JpdGVfc2hpZnQoMix5LnMuciksUC53cml0ZV9zaGlmdCgyLHkuZS5yKSxQ''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIseS5zLmMpLFAud3JpdGVfc2hpZnQoMix5LmUuYyksUH1mdW5jdGlvbiBfbSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6eS5yZWFkX3NoaWZ0KDEpLHI6UH0sZTp7Yzp5LnJlYWRfc2hpZnQoMSkscjpMfX19dmFy''@;'; put 'put ''IHZhPV9tO2Z1bmN0aW9uIFQ0KHkpe3kubCs9NDt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMiksUT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIHkubCs9MTIsW0wsUCxRXX1mdW5jdGlvbiBGbCh5KXt5LmwrPTIseS5sKz15LnJlYWRfc2hpZnQoMil9dmFyIGJtPXswOkZs''@;'; put 'put ''LDQ6RmwsNTpGbCw2OkZsLDc6ZnVuY3Rpb24gdjkoeSl7cmV0dXJuIHkubCs9NCx5LmNmPXkucmVhZF9zaGlmdCgyKSx7fX0sODpGbCw5OkZsLDEwOkZsLDExOkZsLDEyOkZsLDEzOmZ1bmN0aW9uIG05KHkpe3ZhciBQPXt9O3JldHVybiB5LmwrPTQseS5sKz0xNixQLmZTaGFyZWROb3RlPXku''@;'; put 'put ''cmVhZF9zaGlmdCgyKSx5LmwrPTQsUH0sMTQ6RmwsMTU6RmwsMTY6RmwsMTc6RmwsMTg6RmwsMTk6RmwsMjA6RmwsMjE6VDR9O2Z1bmN0aW9uIFJ1KHksUCl7dmFyIEw9e0JJRkZWZXI6MCxkdDowfTtzd2l0Y2goTC5CSUZGVmVyPXkucmVhZF9zaGlmdCgyKSwoUC09Mik+PTImJihMLmR0PXku''@;'; put 'put ''cmVhZF9zaGlmdCgyKSx5LmwtPTIpLEwuQklGRlZlcil7Y2FzZSAxNTM2OmNhc2UgMTI4MDpjYXNlIDEwMjQ6Y2FzZSA3Njg6Y2FzZSA1MTI6Y2FzZSAyOmNhc2UgNzpicmVhaztkZWZhdWx0OmlmKFA+Nil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgQklGRiBWZXIgIitMLkJJRkZWZXIp''@;'; put 'put ''fXJldHVybiB5LnJlYWRfc2hpZnQoUCksTH1mdW5jdGlvbiBENCh5LFAsTCl7dmFyIFE9MTUzNixyZT0xNjtzd2l0Y2goTC5ib29rVHlwZSl7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmJyZWFrO2Nhc2UiYmlmZjUiOlE9MTI4MCxyZT04O2JyZWFrO2Nhc2UiYmlmZjQiOlE9NCxyZT02O2JyZWFr''@;'; put 'put ''O2Nhc2UiYmlmZjMiOlE9MyxyZT02O2JyZWFrO2Nhc2UiYmlmZjIiOlE9MixyZT00O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBCSUZGIHZlcnNpb24iKX12YXIgcGU9ZnIocmUpO3JldHVybiBwZS53cml0ZV9zaGlmdCgyLFEpLHBlLndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''UCkscmU+NCYmcGUud3JpdGVfc2hpZnQoMiwyOTI4MikscmU+NiYmcGUud3JpdGVfc2hpZnQoMiwxOTk3KSxyZT44JiYocGUud3JpdGVfc2hpZnQoMiw0OTE2MSkscGUud3JpdGVfc2hpZnQoMiwxKSxwZS53cml0ZV9zaGlmdCgyLDE3OTgpLHBlLndyaXRlX3NoaWZ0KDIsMCkpLHBlfWZ1bmN0''@;'; put 'put ''aW9uIFkwKHksUCl7dmFyIEw9IVB8fFAuYmlmZj49OD8yOjEsUT1mcig4K0wqeS5uYW1lLmxlbmd0aCk7US53cml0ZV9zaGlmdCg0LHkucG9zKSxRLndyaXRlX3NoaWZ0KDEseS5oc3x8MCksUS53cml0ZV9zaGlmdCgxLHkuZHQpLFEud3JpdGVfc2hpZnQoMSx5Lm5hbWUubGVuZ3RoKSxQLmJp''@;'; put 'put ''ZmY+PTgmJlEud3JpdGVfc2hpZnQoMSwxKSxRLndyaXRlX3NoaWZ0KEwqeS5uYW1lLmxlbmd0aCx5Lm5hbWUsUC5iaWZmPDg/InNiY3MiOiJ1dGYxNmxlIik7dmFyIHJlPVEuc2xpY2UoMCxRLmwpO3JldHVybiByZS5sPVEubCxyZX1mdW5jdGlvbiBEcih5KXtyZXR1cm4geS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLEpjKHkpfWZ1bmN0aW9uIGVzKHkpe3JldHVybiB5LnJlYWRfc2hpZnQoNCksbDAoeSl9ZnVuY3Rpb24gb2MoeSxQLEwpe3JldHVybiB5LnJlYWRfc2hpZnQoNCksaVMoeSwwLEwpfWZ1bmN0aW9uIFcwKHksUCxMKXt2YXIgUT0wO0wmJjI9PUwuYmlmZnx8KFE9eS5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''KTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiBMJiYyPT1MLmJpZmYmJihRPTEtKHJlPj4xNSkscmUmPTMyNzY3KSxbe1Vuc3luY2VkOjEmUSxEeVplcm86KDImUSk+PjEsRXhBc2M6KDQmUSk+PjIsRXhEc2M6KDgmUSk+PjN9LHJlXX1mdW5jdGlvbiBYcih5LFAsTCxRKXt2YXIgcmU9''@;'; put 'put ''TCYmNT09TC5iaWZmO1F8fChRPWZyKHJlPzMrUC5sZW5ndGg6NSsyKlAubGVuZ3RoKSksUS53cml0ZV9zaGlmdCgyLHkpLFEud3JpdGVfc2hpZnQocmU/MToyLFAubGVuZ3RoKSxyZXx8US53cml0ZV9zaGlmdCgxLDEpLFEud3JpdGVfc2hpZnQoKHJlPzE6MikqUC5sZW5ndGgsUCxyZT8ic2Jj''@;'; put 'put ''cyI6InV0ZjE2bGUiKTt2YXIgcGU9US5sZW5ndGg+US5sP1Euc2xpY2UoMCxRLmwpOlE7cmV0dXJuIG51bGw9PXBlLmwmJihwZS5sPXBlLmxlbmd0aCkscGV9dmFyIFRzPVYyO2Z1bmN0aW9uIEJ0KHksUCxMKXt2YXIgUT15LmwrUCxyZT04IT1MLmJpZmYmJkwuYmlmZj8yOjQscGU9eS5yZWFk''@;'; put 'put ''X3NoaWZ0KHJlKSxfZT15LnJlYWRfc2hpZnQocmUpLHZlPXkucmVhZF9zaGlmdCgyKSxTZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIHkubD1RLHtzOntyOnBlLGM6dmV9LGU6e3I6X2UsYzpTZX19fWZ1bmN0aW9uIENtKHksUCxMLFEpe3ZhciBwZT0hTHx8IUwuYmlmZnx8OD09TC5iaWZmO1F8''@;'; put 'put ''fChRPWZyKEwmJjU9PUwuYmlmZj8xNjoyMCkpLFEud3JpdGVfc2hpZnQoMixwZSYmTC5jZWxsU3R5bGVzJiZ5LmZvbnRJZCYmKHkuZm9udElkPDQ/eS5mb250SWQ6eS5mb250SWQrMSl8fDApO3ZhciBfZT0xO3kucHJvdGVjdGlvbiYmKHkucHJvdGVjdGlvbi5lZGl0YWJsZSYmKF9lJj0tMiks''@;'; put 'put ''eS5wcm90ZWN0aW9uLmhpZGRlbiYmKF9lfD0yKSkseS5zdHlsZT8oUS53cml0ZV9zaGlmdCgyLHkubnVtRm10SWR8fDApLFEud3JpdGVfc2hpZnQoMiw2NTUyNHxfZSkpOihRLndyaXRlX3NoaWZ0KDIseS5udW1GbXRJZHx8MCksUS53cml0ZV9zaGlmdCgyLFA8PDR8X2UpKTt2YXIgdmU9eS5h''@;'; put 'put ''bGlnbm1lbnR8fHt9O2lmKHBlKXt2YXIgU2U9MCxIZT0wO1dtLmluZGV4T2YodmUuaG9yaXpvbnRhbCk+LTEmJihTZXw9V20uaW5kZXhPZih2ZS5ob3Jpem9udGFsKSksdmUud3JhcFRleHQmJihTZXw9OCksQjQuaW5kZXhPZih2ZS52ZXJ0aWNhbCk+LTE/U2V8PUI0LmluZGV4T2YodmUudmVy''@;'; put 'put ''dGljYWwpPDw0Om51bGw9PXZlLnZlcnRpY2FsJiYoU2V8PTMyKSxRLndyaXRlX3NoaWZ0KDEsU2UpLFEud3JpdGVfc2hpZnQoMSwwKSx2ZS5zaHJpbmtUb0ZpdCYmKEhlfD0xNiksUS53cml0ZV9zaGlmdCgyLEhlKTt2YXIgVmU9bnVsbDtudWxsIT15LmJvcmRlcklkJiYoVmU9TC5Cb3JkZXJz''@;'; put 'put ''JiZMLkJvcmRlcnNbeS5ib3JkZXJJZHx8MF18fHt9KTt2YXIgR2U9MCxudD0wLGR0PTA7VmUmJihudWxsIT1WZS5sZWZ0JiZWZS5sZWZ0LnN0eWxlJiYoR2V8PShkdD1XMi5pbmRleE9mKFZlLmxlZnQuc3R5bGUpKT4tMT9kdDowKSxudWxsIT1WZS5yaWdodCYmVmUucmlnaHQuc3R5bGUmJihH''@;'; put 'put ''ZXw9KChkdD1XMi5pbmRleE9mKFZlLnJpZ2h0LnN0eWxlKSk+LTE/ZHQ6MCk8PDQpLG51bGwhPVZlLnRvcCYmVmUudG9wLnN0eWxlJiYobnR8PShkdD1XMi5pbmRleE9mKFZlLnRvcC5zdHlsZSkpPi0xP2R0OjApLG51bGwhPVZlLmJvdHRvbSYmVmUuYm90dG9tLnN0eWxlJiYobnR8PSgoZHQ9''@;'; put 'put ''VzIuaW5kZXhPZihWZS5ib3R0b20uc3R5bGUpKT4tMT9kdDowKTw8NCkpLFEud3JpdGVfc2hpZnQoMSxHZSksUS53cml0ZV9zaGlmdCgxLG50KSxRLndyaXRlX3NoaWZ0KDIsMCksUS53cml0ZV9zaGlmdCgyLDApLFEud3JpdGVfc2hpZnQoMSwwKTt2YXIgQ3Q9MCxjdD1MLkZpbGxzJiZMLkZp''@;'; put 'put ''bGxzW3kuZmlsbElkfHwwXXx8e307KGN0LmZnQ29sb3J8fGN0LmJnQ29sb3IpJiYoQ3R8PTQpLFEud3JpdGVfc2hpZnQoMSxDdCk7dmFyIGJ0PTA7YnR8PUgzKGN0LmZnQ29sb3IsNjUpLGJ0fD1IMyhjdC5iZ0NvbG9yLDY1KTw8NyxRLndyaXRlX3NoaWZ0KDIsYnQpfWVsc2UgUS53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDApLFEud3JpdGVfc2hpZnQoNCwwKSxRLndyaXRlX3NoaWZ0KDIsMCk7cmV0dXJuIFF9ZnVuY3Rpb24gTmMoeSxQLEwpe3ZhciBRPUx1KHkpOygyPT1MLmJpZmZ8fDk9PVApJiYrK3kubDt2YXIgcmU9ZnVuY3Rpb24gcG0oeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiAx''@;'; put 'put ''PT09eS5yZWFkX3NoaWZ0KDEpP1A6MT09PVB9KHkpO3JldHVybiBRLnZhbD1yZSxRLnQ9ITA9PT1yZXx8ITE9PT1yZT8iYiI6ImUiLFF9dmFyIFYxPWZ1bmN0aW9uIHkzKHksUCxMKXtyZXR1cm4gMD09PVA/IiI6VjIoeSwwLEwpfTtmdW5jdGlvbiBiOSh5LFAsTCl7dmFyIHJlLFE9eS5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLHBlPXtmQnVpbHRJbjoxJlEsZldhbnRBZHZpc2U6UT4+PjEmMSxmV2FudFBpY3Q6UT4+PjImMSxmT2xlOlE+Pj4zJjEsZk9sZUxpbms6UT4+PjQmMSxjZjpRPj4+NSYxMDIzLGZJY29uOlE+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1MLnNiY2NoJiYocmU9ZnVuY3Rpb24gTHco''@;'; put 'put ''eSxQLEwpe3kubCs9NDt2YXIgUT15LmwrKFAtPTQpLHJlPUZkKHksMCxMKSxwZT15LnJlYWRfc2hpZnQoMik7aWYocGUhPT0oUS09eS5sKSl0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBBZGRpblVkZjogcGFkZGluZyA9ICIrUSsiICE9ICIrcGUpO3JldHVybiB5LmwrPXBlLHJlfSh5LFAt''@;'; put 'put ''MixMKSkscGUuYm9keT1yZXx8eS5yZWFkX3NoaWZ0KFAtMiksInN0cmluZyI9PXR5cGVvZiByZSYmKHBlLk5hbWU9cmUpLHBlfXZhciBLVD1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEiLCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hsbm0uRXh0cmFjdCIsIl94bG5t''@;'; put 'put ''LkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVyaWEiLCJfeGxubS5QcmludF9BcmVhIiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hsbm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJfeGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRlIiwiX3hsbm0uU2hlZXRfVGl0''@;'; put 'put ''bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiXTtmdW5jdGlvbiBOdyh5LFAsTCl7dmFyIFE9eS5sK1AscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9zaGlmdCgxKSxfZT15LnJlYWRfc2hpZnQoMSksdmU9eS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpLFNlPTA7KCFMfHxMLmJp''@;'; put 'put ''ZmY+PTUpJiYoNSE9TC5iaWZmJiYoeS5sKz0yKSxTZT15LnJlYWRfc2hpZnQoMiksNT09TC5iaWZmJiYoeS5sKz0yKSx5LmwrPTQpO3ZhciBIZT1IZCh5LF9lLEwpOzMyJnJlJiYoSGU9S1RbSGUuY2hhckNvZGVBdCgwKV0pO3ZhciBWZT1RLXkubDtMJiYyPT1MLmJpZmYmJi0tVmU7dmFyIEdl''@;'; put 'put ''PVEhPXkubCYmMCE9PXZlJiZWZT4wP2Z1bmN0aW9uIGQ2KHksUCxMLFEpe3ZhciBfZSxyZT15LmwrUCxwZT1uNSh5LFEsTCk7cmV0dXJuIHJlIT09eS5sJiYoX2U9ajMoeSxyZS15LmwscGUsTCkpLFtwZSxfZV19KHksVmUsTCx2ZSk6W107cmV0dXJue2NoS2V5OnBlLE5hbWU6SGUsaXRhYjpT''@;'; put 'put ''ZSxyZ2NlOkdlfX1mdW5jdGlvbiBTbSh5LFAsTCl7aWYoTC5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIHk5KHksUCxMKXszPT15W3kubCsxXSYmeVt5LmxdKys7dmFyIFE9RmQoeSwwLEwpO3JldHVybiAzPT1RLmNoYXJDb2RlQXQoMCk/US5zbGljZSgxKTpRfSh5LDAsTCk7Zm9yKHZhciBRPVtd''@;'; put 'put ''LHJlPXkubCtQLHBlPXkucmVhZF9zaGlmdChMLmJpZmY+OD80OjIpOzAhPXBlLS07KVEucHVzaChmOSh5LDAsTCkpO2lmKHkubCE9cmUpdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIreS5sKyIgIT0gIityZSk7cmV0dXJuIFF9ZnVuY3Rpb24gQncoeSxQLEwpe3ZhciBRPXZh''@;'; put 'put ''KHksNik7c3dpdGNoKEwuYmlmZil7Y2FzZSAyOnkubCsrLFAtPTc7YnJlYWs7Y2FzZSAzOmNhc2UgNDp5LmwrPTIsUC09ODticmVhaztkZWZhdWx0OnkubCs9NixQLT0xMn1yZXR1cm5bUSxodih5LFAsTCldfXZhciBNbT1bXTtmdW5jdGlvbiBYaCh5KXt2YXIgUD1mcigyNCksTD1zcyh5WzBd''@;'; put 'put ''KTtQLndyaXRlX3NoaWZ0KDIsTC5yKSxQLndyaXRlX3NoaWZ0KDIsTC5yKSxQLndyaXRlX3NoaWZ0KDIsTC5jKSxQLndyaXRlX3NoaWZ0KDIsTC5jKTtmb3IodmFyIFE9ImQwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLHJlPTA7cmU8''@;'; put 'put ''MTY7KytyZSlQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoUVtyZV0sMTYpKTtyZXR1cm4gUyhbUCxiMyh5WzFdKV0pfWZ1bmN0aW9uIFFUKHkpe3ZhciBQPXlbMV0uVG9vbHRpcCxMPWZyKDEwKzIqKFAubGVuZ3RoKzEpKTtMLndyaXRlX3NoaWZ0KDIsMjA0OCk7dmFyIFE9c3MoeVswXSk7TC53''@;'; put 'put ''cml0ZV9zaGlmdCgyLFEuciksTC53cml0ZV9zaGlmdCgyLFEuciksTC53cml0ZV9zaGlmdCgyLFEuYyksTC53cml0ZV9zaGlmdCgyLFEuYyk7Zm9yKHZhciByZT0wO3JlPFAubGVuZ3RoOysrcmUpTC53cml0ZV9zaGlmdCgyLFAuY2hhckNvZGVBdChyZSkpO3JldHVybiBMLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsMCksTH1mdW5jdGlvbiBWZCh5LFAsTCl7aWYoIUwuY2VsbFN0eWxlcylyZXR1cm4gYmMoeSxQKTt2YXIgUT1MJiZMLmJpZmY+PTEyPzQ6MixyZT15LnJlYWRfc2hpZnQoUSkscGU9eS5yZWFkX3NoaWZ0KFEpLF9lPXkucmVhZF9zaGlmdChRKSx2ZT15LnJlYWRfc2hpZnQoUSksU2U9eS5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpOzI9PVEmJih5LmwrPTIpO3ZhciBIZT17czpyZSxlOnBlLHc6X2UsaXhmZTp2ZSxmbGFnczpTZX07cmV0dXJuKEwuYmlmZj49NXx8IUwuYmlmZikmJihIZS5sZXZlbD1TZT4+OCY3KSxIZX1NbVs4XT1mdW5jdGlvbih5LFApe3ZhciBMPXkubCtQO3kubCs9MTA7dmFyIFE9''@;'; put 'put ''eS5yZWFkX3NoaWZ0KDIpO3kubCs9NCx5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTQ7dmFyIHJlPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4geS5sKz1yZSx5Lmw9TCx7Zm10OlF9fTt2YXIgJHc9THUscXc9SDEsaUQ9TjI7dmFyIEIyPWZ1bmN0aW9uKCl7dmFyIHk9ezE6NDM3LDI6ODUwLDM6''@;'; put 'put ''MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIw''@;'; put 'put ''MDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjcsODo4NjUsOTo0MzcsMTA6ODUwLDExOjQzNywxMzo0MzcsMTQ6ODUwLDE1OjQzNywxNjo4NTAsMTc6NDM3LDE4Ojg1MCwxOTo5MzIsMjA6ODUwLDIxOjQzNywyMjo4NTAsMjM6ODY1LDI0OjQzNywyNTo0MzcsMjY6ODUw''@;'; put 'put ''LDI3OjQzNywyODo4NjMsMjk6ODUwLDMxOjg1MiwzNDo4NTIsMzU6ODUyLDM2Ojg2MCwzNzo4NTAsMzg6ODY2LDU1Ojg1MCw2NDo4NTIsNzc6OTM2LDc4Ojk0OSw3OTo5NTAsODA6ODc0LDg3OjEyNTIsODg6MTI1Miw4OToxMjUyLDEwODo4NjMsMTM0OjczNywxMzU6ODUyLDEzNjo4NTcsMjA0''@;'; put 'put ''OjEyNTcsMjU1OjE2OTY5fSxQPWJlKHsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6''@;'; put 'put ''MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3fSk7ZnVuY3Rpb24gcmUoU2UsSGUpe3ZhciBWZT1IZXx8e307cmV0dXJuIFZlLmRhdGVORnx8KFZlLmRhdGVORj0ieXl5eW1tZGQiKSxrMShmdW5jdGlv''@;'; put 'put ''biBRKFNlLEhlKXt2YXIgVmU9W10sR2U9RygxKTtzd2l0Y2goSGUudHlwZSl7Y2FzZSJiYXNlNjQiOkdlPUQoc2UuZGVjb2RlKFNlKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOkdlPUQoU2UpO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpHZT1TZX1vbChHZSwwKTt2YXIgbnQ9R2UucmVh''@;'; put 'put ''ZF9zaGlmdCgxKSxkdD0hISgxMzYmbnQpLEN0PSExLGN0PSExO3N3aXRjaChudCl7Y2FzZSAyOmNhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpjYXNlIDI0NTpicmVhaztjYXNlIDQ4OmNhc2UgNDk6Q3Q9ITAsZHQ9ITA7YnJlYWs7Y2FzZSAxNDA6Y3Q9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBWZXJzaW9uOiAiK250LnRvU3RyaW5nKDE2KSl9dmFyIGJ0PTAsRnQ9NTIxOzI9PW50JiYoYnQ9R2UucmVhZF9zaGlmdCgyKSksR2UubCs9MywyIT1udCYmKGJ0PUdlLnJlYWRfc2hpZnQoNCkpLGJ0PjEwNDg1NzYmJihidD0xZTYpLDIhPW50JiYo''@;'; put 'put ''RnQ9R2UucmVhZF9zaGlmdCgyKSk7dmFyIEV0PUdlLnJlYWRfc2hpZnQoMiksVHQ9SGUuY29kZXBhZ2V8fDEyNTI7MiE9bnQmJihHZS5sKz0xNixHZS5yZWFkX3NoaWZ0KDEpLDAhPT1HZVtHZS5sXSYmKFR0PXlbR2VbR2UubF1dKSxHZS5sKz0xLEdlLmwrPTIpLGN0JiYoR2UubCs9MzYpO2Zv''@;'; put 'put ''cih2YXIgWnQ9W10scG49e30sS249TWF0aC5taW4oR2UubGVuZ3RoLDI9PW50PzUyMTpGdC0xMC0oQ3Q/MjY0OjApKSx1bj1jdD8zMjoxMTtHZS5sPEtuJiYxMyE9R2VbR2UubF07KXN3aXRjaChwbj17fSxwbi5uYW1lPWNwdGFibGUudXRpbHMuZGVjb2RlKFR0LEdlLnNsaWNlKEdlLmwsR2Uu''@;'; put 'put ''bCt1bikpLnJlcGxhY2UoL1tcdTAwMDBcclxuXS4qJC9nLCIiKSxHZS5sKz11bixwbi50eXBlPVN0cmluZy5mcm9tQ2hhckNvZGUoR2UucmVhZF9zaGlmdCgxKSksMiE9bnQmJiFjdCYmKHBuLm9mZnNldD1HZS5yZWFkX3NoaWZ0KDQpKSxwbi5sZW49R2UucmVhZF9zaGlmdCgxKSwyPT1udCYm''@;'; put 'put ''KHBuLm9mZnNldD1HZS5yZWFkX3NoaWZ0KDIpKSxwbi5kZWM9R2UucmVhZF9zaGlmdCgxKSxwbi5uYW1lLmxlbmd0aCYmWnQucHVzaChwbiksMiE9bnQmJihHZS5sKz1jdD8xMzoxNCkscG4udHlwZSl7Y2FzZSJCIjooIUN0fHw4IT1wbi5sZW4pJiZIZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lw''@;'; put 'put ''cGluZyAiK3BuLm5hbWUrIjoiK3BuLnR5cGUpO2JyZWFrO2Nhc2UiRyI6Y2FzZSJQIjpIZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAiK3BuLm5hbWUrIjoiK3BuLnR5cGUpO2JyZWFrO2Nhc2UiKyI6Y2FzZSIwIjpjYXNlIkAiOmNhc2UiQyI6Y2FzZSJEIjpjYXNlIkYiOmNhc2UiSSI6''@;'; put 'put ''Y2FzZSJMIjpjYXNlIk0iOmNhc2UiTiI6Y2FzZSJPIjpjYXNlIlQiOmNhc2UiWSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gRmllbGQgVHlwZTogIitwbi50eXBlKX1pZigxMyE9PUdlW0dlLmxdJiYoR2UubD1GdC0xKSwxMyE9PUdlLnJlYWRfc2hpZnQoMSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJEQkYgVGVybWluYXRvciBub3QgZm91bmQgIitHZS5sKyIgIitHZVtHZS5sXSk7R2UubD1GdDt2YXIgcW49MCx6bj0wO2ZvcihWZVswXT1bXSx6bj0wO3puIT1adC5sZW5ndGg7Kyt6bilWZVswXVt6bl09WnRbem5dLm5hbWU7Zm9yKDtidC0tID4wOylpZig0MiE9PUdl''@;'; put 'put ''W0dlLmxdKWZvcigrK0dlLmwsVmVbKytxbl09W10sem49MCx6bj0wO3puIT1adC5sZW5ndGg7Kyt6bil7dmFyIEFuPUdlLnNsaWNlKEdlLmwsR2UubCtadFt6bl0ubGVuKTtHZS5sKz1adFt6bl0ubGVuLG9sKEFuLDApO3ZhciBlcj1jcHRhYmxlLnV0aWxzLmRlY29kZShUdCxBbik7c3dpdGNo''@;'; put 'put ''KFp0W3puXS50eXBlKXtjYXNlIkMiOmVyLnRyaW0oKS5sZW5ndGgmJihWZVtxbl1bem5dPWVyLnJlcGxhY2UoL1xzKyQvLCIiKSk7YnJlYWs7Y2FzZSJEIjpWZVtxbl1bem5dPTg9PT1lci5sZW5ndGg/bmV3IERhdGUoK2VyLnNsaWNlKDAsNCksK2VyLnNsaWNlKDQsNiktMSwrZXIuc2xpY2Uo''@;'; put 'put ''Niw4KSk6ZXI7YnJlYWs7Y2FzZSJGIjpWZVtxbl1bem5dPXBhcnNlRmxvYXQoZXIudHJpbSgpKTticmVhaztjYXNlIisiOmNhc2UiSSI6VmVbcW5dW3puXT1jdD8yMTQ3NDgzNjQ4XkFuLnJlYWRfc2hpZnQoLTQsImkiKTpBbi5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIkwiOnN3aXRj''@;'; put 'put ''aChlci50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOlZlW3FuXVt6bl09ITA7YnJlYWs7Y2FzZSJOIjpjYXNlIkYiOlZlW3FuXVt6bl09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8''@;'; put 'put ''IitlcisifCIpfWJyZWFrO2Nhc2UiTSI6aWYoIWR0KXRocm93IG5ldyBFcnJvcigiREJGIFVuZXhwZWN0ZWQgTUVNTyBmb3IgdHlwZSAiK250LnRvU3RyaW5nKDE2KSk7VmVbcW5dW3puXT0iIyNNRU1PIyMiKyhjdD9wYXJzZUludChlci50cmltKCksMTApOkFuLnJlYWRfc2hpZnQoNCkpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiTiI6KGVyPWVyLnJlcGxhY2UoL1x1MDAwMC9nLCIiKS50cmltKCkpJiYiLiIhPWVyJiYoVmVbcW5dW3puXT0rZXJ8fDApO2JyZWFrO2Nhc2UiQCI6VmVbcW5dW3puXT1uZXcgRGF0ZShBbi5yZWFkX3NoaWZ0KC04LCJmIiktNjIxMzU2ODMyZTUpO2JyZWFrO2Nhc2UiVCI6VmVb''@;'; put 'put ''cW5dW3puXT1uZXcgRGF0ZSg4NjRlNSooQW4ucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStBbi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIlkiOlZlW3FuXVt6bl09QW4ucmVhZF9zaGlmdCg0LCJpIikvMWU0O2JyZWFrO2Nhc2UiTyI6VmVbcW5dW3puXT0tQW4ucmVhZF9zaGlmdCgtOCwiZiIp''@;'; put 'put ''O2JyZWFrO2Nhc2UiQiI6aWYoQ3QmJjg9PVp0W3puXS5sZW4pe1ZlW3FuXVt6bl09QW4ucmVhZF9zaGlmdCg4LCJmIik7YnJlYWt9Y2FzZSJHIjpjYXNlIlAiOkFuLmwrPVp0W3puXS5sZW47YnJlYWs7Y2FzZSIwIjppZigiX051bGxGbGFncyI9PT1adFt6bl0ubmFtZSlicmVhaztkZWZhdWx0''@;'; put 'put ''OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK1p0W3puXS50eXBlKX19ZWxzZSBHZS5sKz1FdDtpZigyIT1udCYmR2UubDxHZS5sZW5ndGgmJjI2IT1HZVtHZS5sKytdKXRocm93IG5ldyBFcnJvcigiREJGIEVPRiBNYXJrZXIgbWlzc2luZyAiKyhHZS5sLTEp''@;'; put 'put ''KyIgb2YgIitHZS5sZW5ndGgrIiAiK0dlW0dlLmwtMV0udG9TdHJpbmcoMTYpKTtyZXR1cm4gSGUmJkhlLnNoZWV0Um93cyYmKFZlPVZlLnNsaWNlKDAsSGUuc2hlZXRSb3dzKSksVmV9KFNlLFZlKSxWZSl9dmFyIF9lPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dmVy''@;'; put 'put ''c2lvbnM6WzIsMyw0OCw0OSwxMzEsMTM5LDE0MCwyNDVdLHRvX3dvcmtib29rOmZ1bmN0aW9uIHBlKFNlLEhlKXt0cnl7cmV0dXJuIEVkKHJlKFNlLEhlKSxIZSl9Y2F0Y2goVmUpe2lmKEhlJiZIZS5XVEYpdGhyb3cgVmV9cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9fc2hl''@;'; put 'put ''ZXQ6cmUsZnJvbV9zaGVldDpmdW5jdGlvbiB2ZShTZSxIZSl7dmFyIFZlPUhlfHx7fTtpZigrVmUuY29kZXBhZ2U+PTAmJmooK1ZlLmNvZGVwYWdlKSwic3RyaW5nIj09VmUudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBEQkYgdG8gSlMgc3RyaW5nIik7dmFyIEdlPXljKCks''@;'; put 'put ''bnQ9SDYoU2Use2hlYWRlcjoxLHJhdzohMCxjZWxsRGF0ZXM6ITB9KSxkdD1udFswXSxDdD1udC5zbGljZSgxKSxjdD0wLGJ0PTAsRnQ9MCxFdD0xO2ZvcihjdD0wO2N0PGR0Lmxlbmd0aDsrK2N0KWlmKG51bGwhPWN0KXtpZigrK0Z0LCJudW1iZXIiPT10eXBlb2YgZHRbY3RdJiYoZHRbY3Rd''@;'; put 'put ''PWR0W2N0XS50b1N0cmluZygxMCkpLCJzdHJpbmciIT10eXBlb2YgZHRbY3RdKXRocm93IG5ldyBFcnJvcigiREJGIEludmFsaWQgY29sdW1uIG5hbWUgIitkdFtjdF0rIiB8Iit0eXBlb2YgZHRbY3RdKyJ8Iik7aWYoZHQuaW5kZXhPZihkdFtjdF0pIT09Y3QpZm9yKGJ0PTA7YnQ8MTAyNDsr''@;'; put 'put ''K2J0KWlmKC0xPT1kdC5pbmRleE9mKGR0W2N0XSsiXyIrYnQpKXtkdFtjdF0rPSJfIitidDticmVha319dmFyIFR0PU9pKFNlWyIhcmVmIl0pLFp0PVtdO2ZvcihjdD0wO2N0PD1UdC5lLmMtVHQucy5jOysrY3Qpe3ZhciBwbj1bXTtmb3IoYnQ9MDtidDxDdC5sZW5ndGg7KytidCludWxsIT1D''@;'; put 'put ''dFtidF1bY3RdJiZwbi5wdXNoKEN0W2J0XVtjdF0pO2lmKDAhPXBuLmxlbmd0aCYmbnVsbCE9ZHRbY3RdKXt2YXIgS249IiIsdW49IiI7Zm9yKGJ0PTA7YnQ8cG4ubGVuZ3RoOysrYnQpe3N3aXRjaCh0eXBlb2YgcG5bYnRdKXtjYXNlIm51bWJlciI6dW49IkIiO2JyZWFrO2Nhc2Uic3RyaW5n''@;'; put 'put ''IjpkZWZhdWx0OnVuPSJDIjticmVhaztjYXNlImJvb2xlYW4iOnVuPSJMIjticmVhaztjYXNlIm9iamVjdCI6dW49cG5bYnRdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9aWYoIkMiPT0oS249S24mJktuIT11bj8iQyI6dW4pKWJyZWFrfUV0Kz1fZVtLbl18fDAsWnRbY3RdPUtufWVsc2UgWnRb''@;'; put 'put ''Y3RdPSI/In12YXIgcW49R2UubmV4dCgzMik7Zm9yKHFuLndyaXRlX3NoaWZ0KDQsMzE4OTAyNTc2KSxxbi53cml0ZV9zaGlmdCg0LEN0Lmxlbmd0aCkscW4ud3JpdGVfc2hpZnQoMiwyOTYrMzIqRnQpLHFuLndyaXRlX3NoaWZ0KDIsRXQpLGN0PTA7Y3Q8NDsrK2N0KXFuLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMCk7Zm9yKHFuLndyaXRlX3NoaWZ0KDQsMHwoK1BbUl18fDMpPDw4KSxjdD0wLGJ0PTA7Y3Q8ZHQubGVuZ3RoOysrY3QpaWYobnVsbCE9ZHRbY3RdKXt2YXIgem49R2UubmV4dCgzMiksQW49KGR0W2N0XS5zbGljZSgtMTApKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwx''@;'; put 'put ''MSk7em4ud3JpdGVfc2hpZnQoMSxBbiwic2JjcyIpLHpuLndyaXRlX3NoaWZ0KDEsIj8iPT1adFtjdF0/IkMiOlp0W2N0XSwic2JjcyIpLHpuLndyaXRlX3NoaWZ0KDQsYnQpLHpuLndyaXRlX3NoaWZ0KDEsX2VbWnRbY3RdXXx8MCksem4ud3JpdGVfc2hpZnQoMSwwKSx6bi53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDIpLHpuLndyaXRlX3NoaWZ0KDQsMCksem4ud3JpdGVfc2hpZnQoMSwwKSx6bi53cml0ZV9zaGlmdCg0LDApLHpuLndyaXRlX3NoaWZ0KDQsMCksYnQrPV9lW1p0W2N0XV18fDB9dmFyIGVyPUdlLm5leHQoMjY0KTtmb3IoZXIud3JpdGVfc2hpZnQoNCwxMyksY3Q9MDtjdDw2NTsrK2N0''@;'; put 'put ''KWVyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKGN0PTA7Y3Q8Q3QubGVuZ3RoOysrY3Qpe3ZhciB0cj1HZS5uZXh0KEV0KTtmb3IodHIud3JpdGVfc2hpZnQoMSwwKSxidD0wO2J0PGR0Lmxlbmd0aDsrK2J0KWlmKG51bGwhPWR0W2J0XSlzd2l0Y2goWnRbYnRdKXtjYXNlIkwiOnRyLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsbnVsbD09Q3RbY3RdW2J0XT82MzpDdFtjdF1bYnRdPzg0OjcwKTticmVhaztjYXNlIkIiOnRyLndyaXRlX3NoaWZ0KDgsQ3RbY3RdW2J0XXx8MCwiZiIpO2JyZWFrO2Nhc2UiRCI6Q3RbY3RdW2J0XT8odHIud3JpdGVfc2hpZnQoNCwoIjAwMDAiK0N0W2N0XVtidF0uZ2V0RnVsbFll''@;'; put 'put ''YXIoKSkuc2xpY2UoLTQpLCJzYmNzIiksdHIud3JpdGVfc2hpZnQoMiwoIjAwIisoQ3RbY3RdW2J0XS5nZXRNb250aCgpKzEpKS5zbGljZSgtMiksInNiY3MiKSx0ci53cml0ZV9zaGlmdCgyLCgiMDAiK0N0W2N0XVtidF0uZ2V0RGF0ZSgpKS5zbGljZSgtMiksInNiY3MiKSk6dHIud3JpdGVf''@;'; put 'put ''c2hpZnQoOCwiMDAwMDAwMDAiLCJzYmNzIik7YnJlYWs7Y2FzZSJDIjp2YXIgWm49U3RyaW5nKEN0W2N0XVtidF18fCIiKTtmb3IodHIud3JpdGVfc2hpZnQoMSxabiwic2JjcyIpLEZ0PTA7RnQ8MjUwLVpuLmxlbmd0aDsrK0Z0KXRyLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1cm4gR2UubmV4''@;'; put 'put ''dCgxKS53cml0ZV9zaGlmdCgxLDI2KSxHZS5lbmQoKX19fSgpLHg5PWZ1bmN0aW9uKCl7dmFyIHk9e0FBOiJceGMwIixCQToiXHhjMSIsQ0E6Ilx4YzIiLERBOjE5NSxIQToiXHhjNCIsSkE6MTk3LEFFOiJceGM4IixCRToiXHhjOSIsQ0U6Ilx4Y2EiLEhFOiJceGNiIixBSToiXHhjYyIsQkk6''@;'; put 'put ''Ilx4Y2QiLENJOiJceGNlIixISToiXHhjZiIsQU86Ilx4ZDIiLEJPOiJceGQzIixDTzoiXHhkNCIsRE86MjEzLEhPOiJceGQ2IixBVToiXHhkOSIsQlU6Ilx4ZGEiLENVOiJceGRiIixIVToiXHhkYyIsQWE6Ilx4ZTAiLEJhOiJceGUxIixDYToiXHhlMiIsRGE6MjI3LEhhOiJceGU0IixKYToy''@;'; put 'put ''MjksQWU6Ilx4ZTgiLEJlOiJceGU5IixDZToiXHhlYSIsSGU6Ilx4ZWIiLEFpOiJceGVjIixCaToiXHhlZCIsQ2k6Ilx4ZWUiLEhpOiJceGVmIixBbzoiXHhmMiIsQm86Ilx4ZjMiLENvOiJceGY0IixEbzoyNDUsSG86Ilx4ZjYiLEF1OiJceGY5IixCdToiXHhmYSIsQ3U6Ilx4ZmIiLEh1OiJc''@;'; put 'put ''eGZjIixLQzoiXHhjNyIsS2M6Ilx4ZTciLHE6Ilx4ZTYiLHo6Ilx1MDE1MyIsYToiXHhjNiIsajoiXHUwMTUyIixETjoyMDksRG46MjQxLEh5OjI1NSxTOjE2OSxjOjE3MCxSOjE3NCwiQiAiOjE4MCwwOjE3NiwxOjE3NywyOjE3OCwzOjE3OSw1OjE4MSw2OjE4Miw3OjE4MyxROjE4NSxrOjE4''@;'; put 'put ''NixiOjIwOCxpOjIxNixsOjIyMixzOjI0MCx5OjI0OCwiISI6MTYxLCciJzoxNjIsIiMiOjE2MywiKCI6MTY0LCIlIjoxNjUsIiciOjE2NywiSCAiOjE2OCwiKyI6MTcxLCI7IjoxODcsIjwiOjE4OCwiPSI6MTg5LCI+IjoxOTAsIj8iOjE5MSwieyI6MjIzfSxQPW5ldyBSZWdFeHAoIlx4MWJO''@;'; put 'put ''KCIrbHQoeSkuam9pbigifCIpLnJlcGxhY2UoL1x8XHxcfC8sInxcXHx8IikucmVwbGFjZSgvKFs/KCkrXSkvZywiXFwkMSIpKyJ8XFx8KSIsImdtIiksTD1mdW5jdGlvbihudCxkdCl7dmFyIEN0PXlbZHRdO3JldHVybiJudW1iZXIiPT10eXBlb2YgQ3Q/ZWUoQ3QpOkN0fSxRPWZ1bmN0aW9u''@;'; put 'put ''KG50LGR0LEN0KXt2YXIgY3Q9ZHQuY2hhckNvZGVBdCgwKS0zMjw8NHxDdC5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09Y3Q/bnQ6ZWUoY3QpfTtmdW5jdGlvbiBwZShudCxkdCl7dmFyIGVyLEN0PW50LnNwbGl0KC9bXG5ccl0rLyksY3Q9LTEsYnQ9LTEsRnQ9MCxFdD0wLFR0PVtdLFp0''@;'; put 'put ''PVtdLHBuPW51bGwsS249e30sdW49W10scW49W10sem49W10sQW49MDtmb3IoK2R0LmNvZGVwYWdlPj0wJiZqKCtkdC5jb2RlcGFnZSk7RnQhPT1DdC5sZW5ndGg7KytGdCl7QW49MDt2YXIgb2ksdHI9Q3RbRnRdLnRyaW0oKS5yZXBsYWNlKC9ceDFCKFtceDIwLVx4MkZdKShbXHgzMC1ceDNG''@;'; put 'put ''XSkvZyxRKS5yZXBsYWNlKFAsTCksWm49dHIucmVwbGFjZSgvOzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihDaSl7cmV0dXJuIENpLnJlcGxhY2UoL1x1MDAwMC9nLCI7Iil9KTtpZih0ci5sZW5ndGg+MClzd2l0Y2goWm5bMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpj''@;'; put 'put ''YXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoiUCI9PVpuWzFdLmNoYXJBdCgwKSYmWnQucHVzaCh0ci5zbGljZSgzKS5yZXBsYWNlKC87Oy9nLCI7IikpO2JyZWFrO2Nhc2UiQyI6dmFyIGtpPSExLExpPSExLFFyPSExLHVyPSExLFRuPS0xLHZyPS0xO2ZvcihFdD0xO0V0PFpuLmxlbmd0''@;'; put 'put ''aDsrK0V0KXN3aXRjaChabltFdF0uY2hhckF0KDApKXtjYXNlIkEiOmNhc2UiRyI6YnJlYWs7Y2FzZSJYIjpidD1wYXJzZUludChabltFdF0uc2xpY2UoMSkpLTEsTGk9ITA7YnJlYWs7Y2FzZSJZIjpmb3IoY3Q9cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xLExpfHwoYnQ9MCksZXI9VHQu''@;'; put 'put ''bGVuZ3RoO2VyPD1jdDsrK2VyKVR0W2VyXT1bXTticmVhaztjYXNlIksiOiciJz09PShvaT1abltFdF0uc2xpY2UoMSkpLmNoYXJBdCgwKT9vaT1vaS5zbGljZSgxLG9pLmxlbmd0aC0xKToiVFJVRSI9PT1vaT9vaT0hMDoiRkFMU0UiPT09b2k/b2k9ITE6aXNOYU4oV24ob2kpKT9pc05hTihl''@;'; put 'put ''bihvaSkuZ2V0RGF0ZSgpKXx8KG9pPUh0KG9pKSk6KG9pPVduKG9pKSxudWxsIT09cG4mJncuaXNfZGF0ZShwbikmJihvaT1odChvaSkpKSx0eXBlb2YgY3B0YWJsZTwidSImJiJzdHJpbmciPT10eXBlb2Ygb2kmJiJzdHJpbmciIT0oZHR8fHt9KS50eXBlJiYoZHR8fHt9KS5jb2RlcGFnZSYm''@;'; put 'put ''KG9pPWNwdGFibGUudXRpbHMuZGVjb2RlKGR0LmNvZGVwYWdlLG9pKSksa2k9ITA7YnJlYWs7Y2FzZSJFIjp1cj0hMDt2YXIgcnI9YWYoWm5bRXRdLnNsaWNlKDEpLHtyOmN0LGM6YnR9KTtUdFtjdF1bYnRdPVtUdFtjdF1bYnRdLHJyXTticmVhaztjYXNlIlMiOlFyPSEwLFR0W2N0XVtidF09''@;'; put 'put ''W1R0W2N0XVtidF0sIlM1UyJdO2JyZWFrO2Nhc2UiUiI6VG49cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6dnI9cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xO2JyZWFrO2RlZmF1bHQ6aWYoZHQmJmR0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJl''@;'; put 'put ''Y29yZCAiK3RyKX1pZihraSYmKFR0W2N0XVtidF0mJjI9PVR0W2N0XVtidF0ubGVuZ3RoP1R0W2N0XVtidF1bMF09b2k6VHRbY3RdW2J0XT1vaSxwbj1udWxsKSxRcil7aWYodXIpdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7''@;'; put 'put ''dmFyIFNuPVRuPi0xJiZUdFtUbl1bdnJdO2lmKCFTbnx8IVNuWzFdKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgZmluZCBiYXNlIik7VHRbY3RdW2J0XVsxXT1CQyhTblsxXSx7cjpjdC1UbixjOmJ0LXZyfSl9YnJlYWs7Y2FzZSJGIjp2YXIgcHI9MDtmb3Io''@;'; put 'put ''RXQ9MTtFdDxabi5sZW5ndGg7KytFdClzd2l0Y2goWm5bRXRdLmNoYXJBdCgwKSl7Y2FzZSJYIjpidD1wYXJzZUludChabltFdF0uc2xpY2UoMSkpLTEsKytwcjticmVhaztjYXNlIlkiOmZvcihjdD1wYXJzZUludChabltFdF0uc2xpY2UoMSkpLTEsZXI9VHQubGVuZ3RoO2VyPD1jdDsrK2Vy''@;'; put 'put ''KVR0W2VyXT1bXTticmVhaztjYXNlIk0iOkFuPXBhcnNlSW50KFpuW0V0XS5zbGljZSgxKSkvMjA7YnJlYWs7Y2FzZSJGIjpjYXNlIkciOmNhc2UiUyI6Y2FzZSJEIjpjYXNlIk4iOmJyZWFrO2Nhc2UiUCI6cG49WnRbcGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKV07YnJlYWs7Y2FzZSJXIjpm''@;'; put 'put ''b3Ioem49Wm5bRXRdLnNsaWNlKDEpLnNwbGl0KCIgIiksZXI9cGFyc2VJbnQoem5bMF0sMTApO2VyPD1wYXJzZUludCh6blsxXSwxMCk7KytlcilBbj1wYXJzZUludCh6blsyXSwxMCkscW5bZXItMV09MD09PUFuP3toaWRkZW46ITB9Ont3Y2g6QW59LHB1KHFuW2VyLTFdKTticmVhaztjYXNl''@;'; put 'put ''IkMiOnFuW2J0PXBhcnNlSW50KFpuW0V0XS5zbGljZSgxKSktMV18fChxbltidF09e30pO2JyZWFrO2Nhc2UiUiI6dW5bY3Q9cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xXXx8KHVuW2N0XT17fSksQW4+MD8odW5bY3RdLmhwdD1Bbix1bltjdF0uaHB4PVUxKEFuKSk6MD09PUFuJiYodW5b''@;'; put 'put ''Y3RdLmhpZGRlbj0hMCk7YnJlYWs7ZGVmYXVsdDppZihkdCYmZHQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrdHIpfXByPDEmJihwbj1udWxsKTticmVhaztkZWZhdWx0OmlmKGR0JiZkdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIit0cil9''@;'; put 'put ''fXJldHVybiB1bi5sZW5ndGg+MCYmKEtuWyIhcm93cyJdPXVuKSxxbi5sZW5ndGg+MCYmKEtuWyIhY29scyJdPXFuKSxkdCYmZHQuc2hlZXRSb3dzJiYoVHQ9VHQuc2xpY2UoMCxkdC5zaGVldFJvd3MpKSxbVHQsS25dfWZ1bmN0aW9uIF9lKG50LGR0KXt2YXIgQ3Q9ZnVuY3Rpb24gcmUobnQs''@;'; put 'put ''ZHQpe3N3aXRjaChkdC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHBlKHNlLmRlY29kZShudCksZHQpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gcGUobnQsZHQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gcGUobnQudG9TdHJpbmcoImJpbmFyeSIpLGR0KTtjYXNlImFycmF5IjpyZXR1cm4gcGUoUHQo''@;'; put 'put ''bnQpLGR0KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrZHQudHlwZSl9KG50LGR0KSxidD1DdFsxXSxGdD1rMShDdFswXSxkdCk7cmV0dXJuIGx0KGJ0KS5mb3JFYWNoKGZ1bmN0aW9uKEV0KXtGdFtFdF09YnRbRXRdfSksRnR9ZnVuY3Rpb24gU2UobnQsZHQsQ3QsY3Qp''@;'; put 'put ''e3ZhciBidD0iQztZIisoQ3QrMSkrIjtYIisoY3QrMSkrIjtLIjtzd2l0Y2gobnQudCl7Y2FzZSJuIjpidCs9bnQudnx8MCxudC5mJiYhbnQuRiYmKGJ0Kz0iO0UiK3E5KG50LmYse3I6Q3QsYzpjdH0pKTticmVhaztjYXNlImIiOmJ0Kz1udC52PyJUUlVFIjoiRkFMU0UiO2JyZWFrO2Nhc2Ui''@;'; put 'put ''ZSI6YnQrPW50Lnd8fG50LnY7YnJlYWs7Y2FzZSJkIjpidCs9JyInKyhudC53fHxudC52KSsnIic7YnJlYWs7Y2FzZSJzIjpidCs9JyInK250LnYucmVwbGFjZSgvIi9nLCIiKSsnIid9cmV0dXJuIGJ0fXJldHVybiB5WyJ8Il09MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiB2ZShudCxkdCl7''@;'; put 'put ''cmV0dXJuIEVkKF9lKG50LGR0KSxkdCl9LHRvX3NoZWV0Ol9lLGZyb21fc2hlZXQ6ZnVuY3Rpb24gR2UobnQsZHQpe3ZhciBGdCxDdD1bIklEO1BTaGVldEpTO047RSJdLGN0PVtdLGJ0PU9pKG50WyIhcmVmIl0pLEV0PUFycmF5LmlzQXJyYXkobnQpLFR0PSJcclxuIjtDdC5wdXNoKCJQO1BH''@;'; put 'put ''ZW5lcmFsIiksQ3QucHVzaCgiRjtQMDtERzBHODtNMjU1IiksbnRbIiFjb2xzIl0mJmZ1bmN0aW9uIEhlKG50LGR0KXtkdC5mb3JFYWNoKGZ1bmN0aW9uKEN0LGN0KXt2YXIgYnQ9IkY7VyIrKGN0KzEpKyIgIisoY3QrMSkrIiAiO0N0LmhpZGRlbj9idCs9IjAiOigibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IEN0LndpZHRoJiYhQ3Qud3B4JiYoQ3Qud3B4PU1jKEN0LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiBDdC53cHgmJiFDdC53Y2gmJihDdC53Y2g9dGYoQ3Qud3B4KSksIm51bWJlciI9PXR5cGVvZiBDdC53Y2gmJihidCs9TWF0aC5yb3VuZChDdC53Y2gpKSksIiAiIT1idC5jaGFyQXQoYnQu''@;'; put 'put ''bGVuZ3RoLTEpJiZudC5wdXNoKGJ0KX0pfShDdCxudFsiIWNvbHMiXSksbnRbIiFyb3dzIl0mJmZ1bmN0aW9uIFZlKG50LGR0KXtkdC5mb3JFYWNoKGZ1bmN0aW9uKEN0LGN0KXt2YXIgYnQ9IkY7IjtDdC5oaWRkZW4/YnQrPSJNMDsiOkN0LmhwdD9idCs9Ik0iKzIwKkN0LmhwdCsiOyI6Q3Qu''@;'; put 'put ''aHB4JiYoYnQrPSJNIisyMCpqMihDdC5ocHgpKyI7IiksYnQubGVuZ3RoPjImJm50LnB1c2goYnQrIlIiKyhjdCsxKSl9KX0oQ3QsbnRbIiFyb3dzIl0pLEN0LnB1c2goIkI7WSIrKGJ0LmUuci1idC5zLnIrMSkrIjtYIisoYnQuZS5jLWJ0LnMuYysxKSsiO0QiK1tidC5zLmMsYnQucy5yLGJ0''@;'; put 'put ''LmUuYyxidC5lLnJdLmpvaW4oIiAiKSk7Zm9yKHZhciBadD1idC5zLnI7WnQ8PWJ0LmUucjsrK1p0KWZvcih2YXIgcG49YnQucy5jO3BuPD1idC5lLmM7Kytwbil7dmFyIEtuPWRpKHtyOlp0LGM6cG59KTsoRnQ9RXQ/KG50W1p0XXx8W10pW3BuXTpudFtLbl0pJiYobnVsbCE9RnQudnx8RnQu''@;'; put 'put ''ZiYmIUZ0LkYpJiZjdC5wdXNoKFNlKEZ0LDAsWnQscG4pKX1yZXR1cm4gQ3Quam9pbihUdCkrVHQrY3Quam9pbihUdCkrVHQrIkUiK1R0fX19KCksTTM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQKHBlLF9lKXtmb3IodmFyIHZlPXBlLnNwbGl0KCJcbiIpLFNlPS0xLEhlPS0xLFZlPTAsR2U9W107''@;'; put 'put ''VmUhPT12ZS5sZW5ndGg7KytWZSlpZigiQk9UIiE9PXZlW1ZlXS50cmltKCkpe2lmKCEoU2U8MCkpe2Zvcih2YXIgbnQ9dmVbVmVdLnRyaW0oKS5zcGxpdCgiLCIpLGR0PW50WzBdLEN0PW50WzFdLGN0PXZlWysrVmVdfHwiIjsxJihjdC5tYXRjaCgvWyJdL2cpfHxbXSkubGVuZ3RoJiZWZTx2''@;'; put 'put ''ZS5sZW5ndGgtMTspY3QrPSJcbiIrdmVbKytWZV07c3dpdGNoKGN0PWN0LnRyaW0oKSwrZHQpe2Nhc2UtMTppZigiQk9UIj09PWN0KXtHZVsrK1NlXT1bXSxIZT0wO2NvbnRpbnVlfWlmKCJFT0QiIT09Y3QpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFu''@;'; put 'put ''ZCAiK2N0KTticmVhaztjYXNlIDA6R2VbU2VdW0hlXT0iVFJVRSI9PT1jdHx8IkZBTFNFIiE9PWN0JiYoaXNOYU4oV24oQ3QpKT9pc05hTihlbihDdCkuZ2V0RGF0ZSgpKT9DdDpIdChDdCk6V24oQ3QpKSwrK0hlO2JyZWFrO2Nhc2UgMTooY3Q9KGN0PWN0LnNsaWNlKDEsY3QubGVuZ3RoLTEp''@;'; put 'put ''KS5yZXBsYWNlKC8iIi9nLCciJykpJiZjdC5tYXRjaCgvXj0iLioiJC8pJiYoY3Q9Y3Quc2xpY2UoMiwtMSkpLEdlW1NlXVtIZSsrXT0iIiE9PWN0P2N0Om51bGx9aWYoIkVPRCI9PT1jdClicmVha319ZWxzZSBHZVsrK1NlXT1bXSxIZT0wO3JldHVybiBfZSYmX2Uuc2hlZXRSb3dzJiYoR2U9''@;'; put 'put ''R2Uuc2xpY2UoMCxfZS5zaGVldFJvd3MpKSxHZX1mdW5jdGlvbiBMKHBlLF9lKXtyZXR1cm4gazEoZnVuY3Rpb24geShwZSxfZSl7c3dpdGNoKF9lLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gUChzZS5kZWNvZGUocGUpLF9lKTtjYXNlImJpbmFyeSI6cmV0dXJuIFAocGUsX2UpO2Nhc2Ui''@;'; put 'put ''YnVmZmVyIjpyZXR1cm4gUChwZS50b1N0cmluZygiYmluYXJ5IiksX2UpO2Nhc2UiYXJyYXkiOnJldHVybiBQKFB0KHBlKSxfZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK19lLnR5cGUpfShwZSxfZSksX2UpfXZhciBwZSxfZTtyZXR1cm57dG9fd29ya2Jvb2s6ZnVu''@;'; put 'put ''Y3Rpb24gUShwZSxfZSl7cmV0dXJuIEVkKEwocGUsX2UpLF9lKX0sdG9fc2hlZXQ6TCxmcm9tX3NoZWV0OihwZT1mdW5jdGlvbihTZSxIZSxWZSxHZSxudCl7U2UucHVzaChIZSksU2UucHVzaChWZSsiLCIrR2UpLFNlLnB1c2goJyInK250LnJlcGxhY2UoLyIvZywnIiInKSsnIicpfSxfZT1m''@;'; put 'put ''dW5jdGlvbihTZSxIZSxWZSxHZSl7U2UucHVzaChIZSsiLCIrVmUpLFNlLnB1c2goMT09SGU/JyInK0dlLnJlcGxhY2UoLyIvZywnIiInKSsnIic6R2UpfSxmdW5jdGlvbihTZSl7dmFyIEdlLEhlPVtdLFZlPU9pKFNlWyIhcmVmIl0pLG50PUFycmF5LmlzQXJyYXkoU2UpO3BlKEhlLCJUQUJM''@;'; put 'put ''RSIsMCwxLCJzaGVldGpzIikscGUoSGUsIlZFQ1RPUlMiLDAsVmUuZS5yLVZlLnMucisxLCIiKSxwZShIZSwiVFVQTEVTIiwwLFZlLmUuYy1WZS5zLmMrMSwiIikscGUoSGUsIkRBVEEiLDAsMCwiIik7Zm9yKHZhciBkdD1WZS5zLnI7ZHQ8PVZlLmUucjsrK2R0KXtfZShIZSwtMSwwLCJCT1Qi''@;'; put 'put ''KTtmb3IodmFyIEN0PVZlLnMuYztDdDw9VmUuZS5jOysrQ3Qpe3ZhciBjdD1kaSh7cjpkdCxjOkN0fSk7aWYoR2U9bnQ/KFNlW2R0XXx8W10pW0N0XTpTZVtjdF0pc3dpdGNoKEdlLnQpe2Nhc2UibiI6dmFyIGJ0PUdlLnc7IWJ0JiZudWxsIT1HZS52JiYoYnQ9R2UudiksbnVsbD09YnQ/X2Uo''@;'; put 'put ''SGUsMSwwLEdlLmYmJiFHZS5GPyI9IitHZS5mOiIiKTpfZShIZSwwLGJ0LCJWIik7YnJlYWs7Y2FzZSJiIjpfZShIZSwwLEdlLnY/MTowLEdlLnY/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UicyI6X2UoSGUsMSwwLGlzTmFOKEdlLnYpP0dlLnY6Jz0iJytHZS52KyciJyk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJkIjpHZS53fHwoR2Uudz13LmZvcm1hdChHZS56fHx3Ll90YWJsZVsxNF0sVWUoSHQoR2UudikpKSksX2UoSGUsMCxHZS53LCJWIik7YnJlYWs7ZGVmYXVsdDpfZShIZSwxLDAsIiIpfWVsc2UgX2UoSGUsMSwwLCIiKX19cmV0dXJuIF9lKEhlLC0xLDAsIkVPRCIpLEhlLmpvaW4oIlxyXG4i''@;'; put 'put ''KX0pfX0oKSxPND1mdW5jdGlvbigpe2Z1bmN0aW9uIHkoR2Upe3JldHVybiBHZS5yZXBsYWNlKC9cXGIvZywiXFwiKS5yZXBsYWNlKC9cXGMvZywiOiIpLnJlcGxhY2UoL1xcbi9nLCJcbiIpfWZ1bmN0aW9uIFAoR2Upe3JldHVybiBHZS5yZXBsYWNlKC9cXC9nLCJcXGIiKS5yZXBsYWNlKC86''@;'; put 'put ''L2csIlxcYyIpLnJlcGxhY2UoL1xuL2csIlxcbiIpfWZ1bmN0aW9uIFEoR2UsbnQpe3JldHVybiBrMShmdW5jdGlvbiBMKEdlLG50KXtmb3IodmFyIGR0PUdlLnNwbGl0KCJcbiIpLEN0PS0xLGN0PS0xLGJ0PTAsRnQ9W107YnQhPT1kdC5sZW5ndGg7KytidCl7dmFyIEV0PWR0W2J0XS50cmlt''@;'; put 'put ''KCkuc3BsaXQoIjoiKTtpZigiY2VsbCI9PT1FdFswXSl7dmFyIFR0PXNzKEV0WzFdKTtpZihGdC5sZW5ndGg8PVR0LnIpZm9yKEN0PUZ0Lmxlbmd0aDtDdDw9VHQucjsrK0N0KUZ0W0N0XXx8KEZ0W0N0XT1bXSk7c3dpdGNoKEN0PVR0LnIsY3Q9VHQuYyxFdFsyXSl7Y2FzZSJ0IjpGdFtDdF1b''@;'; put 'put ''Y3RdPXkoRXRbM10pO2JyZWFrO2Nhc2UidiI6RnRbQ3RdW2N0XT0rRXRbM107YnJlYWs7Y2FzZSJ2dGYiOnZhciBadD1FdFtFdC5sZW5ndGgtMV07Y2FzZSJ2dGMiOkZ0W0N0XVtjdF09Im5sIj09PUV0WzNdPyEhK0V0WzRdOitFdFs0XSwidnRmIj09RXRbMl0mJihGdFtDdF1bY3RdPVtGdFtD''@;'; put 'put ''dF1bY3RdLFp0XSl9fX1yZXR1cm4gbnQmJm50LnNoZWV0Um93cyYmKEZ0PUZ0LnNsaWNlKDAsbnQuc2hlZXRSb3dzKSksRnR9KEdlLG50KSxudCl9dmFyIHBlPVsic29jaWFsY2FsYzp2ZXJzaW9uOjEuNSIsIk1JTUUtVmVyc2lvbjogMS4wIiwiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4''@;'; put 'put ''ZWQ7IGJvdW5kYXJ5PVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIl0uam9pbigiXG4iKSxfZT1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIsdmU9WyIj''@;'; put 'put ''IFNvY2lhbENhbGMgU3ByZWFkc2hlZXQgQ29udHJvbCBTYXZlIiwicGFydDpzaGVldCJdLmpvaW4oIlxuIiksU2U9Ii0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUtLSI7ZnVuY3Rpb24gSGUoR2Upe2lmKCFHZXx8IUdlWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciBDdCxudD1b''@;'; put 'put ''XSxkdD1bXSxjdD0iIixidD1XcyhHZVsiIXJlZiJdKSxGdD1BcnJheS5pc0FycmF5KEdlKSxFdD1idC5zLnI7RXQ8PWJ0LmUucjsrK0V0KWZvcih2YXIgVHQ9YnQucy5jO1R0PD1idC5lLmM7KytUdClpZihjdD1kaSh7cjpFdCxjOlR0fSksKEN0PUZ0PyhHZVtFdF18fFtdKVtUdF06R2VbY3Rd''@;'; put 'put ''KSYmbnVsbCE9Q3QudiYmInoiIT09Q3QudCl7c3dpdGNoKGR0PVsiY2VsbCIsY3QsInQiXSxDdC50KXtjYXNlInMiOmNhc2Uic3RyIjpkdC5wdXNoKFAoQ3QudikpO2JyZWFrO2Nhc2UibiI6Q3QuZj8oZHRbMl09InZ0ZiIsZHRbM109Im4iLGR0WzRdPUN0LnYsZHRbNV09UChDdC5mKSk6KGR0''@;'; put 'put ''WzJdPSJ2IixkdFszXT1DdC52KTticmVhaztjYXNlImIiOmR0WzJdPSJ2dCIrKEN0LmY/ImYiOiJjIiksZHRbM109Im5sIixkdFs0XT1DdC52PyIxIjoiMCIsZHRbNV09UChDdC5mfHwoQ3Qudj8iVFJVRSI6IkZBTFNFIikpO2JyZWFrO2Nhc2UiZCI6dmFyIFp0PVVlKEh0KEN0LnYpKTtkdFsy''@;'; put 'put ''XT0idnRjIixkdFszXT0ibmQiLGR0WzRdPSIiK1p0LGR0WzVdPUN0Lnd8fHcuZm9ybWF0KEN0Lnp8fHcuX3RhYmxlWzE0XSxadCk7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX1udC5wdXNoKGR0LmpvaW4oIjoiKSl9cmV0dXJuIG50LnB1c2goInNoZWV0OmM6IisoYnQuZS5jLWJ0LnMuYysxKSsi''@;'; put 'put ''OnI6IisoYnQuZS5yLWJ0LnMucisxKSsiOnR2ZjoxIiksbnQucHVzaCgidmFsdWVmb3JtYXQ6MTp0ZXh0LXdpa2kiKSxudC5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiByZShHZSxudCl7cmV0dXJuIEVkKFEoR2UsbnQpLG50KX0sdG9fc2hlZXQ6USxmcm9tX3NoZWV0''@;'; put 'put ''OmZ1bmN0aW9uIFZlKEdlKXtyZXR1cm5bcGUsX2UsdmUsX2UsSGUoR2UpLFNlXS5qb2luKCJcbiIpfX19KCksQjE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KFZlLEdlLG50LGR0LEN0KXtDdC5yYXc/R2VbbnRdW2R0XT1WZToiIj09PVZlfHwoR2VbbnRdW2R0XT0kbihWZSxDdCk/JG4oVmUsQ3Qp''@;'; put 'put ''LnY6VmUpfXZhciBMPXs0NDoiLCIsOToiXHQiLDU5OiI7In0sUT17NDQ6Myw5OjIsNTk6MX07ZnVuY3Rpb24gcmUoVmUpe2Zvcih2YXIgR2U9e30sbnQ9ITEsZHQ9MCxDdD0wO2R0PFZlLmxlbmd0aDsrK2R0KTM0PT0oQ3Q9VmUuY2hhckNvZGVBdChkdCkpP250PSFudDohbnQmJkN0IGluIEwm''@;'; put 'put ''JihHZVtDdF09KEdlW0N0XXx8MCkrMSk7Zm9yKGR0IGluIEN0PVtdLEdlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHZSxkdCkmJkN0LnB1c2goW0dlW2R0XSxkdF0pO2lmKCFDdC5sZW5ndGgpZm9yKGR0IGluIEdlPVEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eS5jYWxsKEdlLGR0KSYmQ3QucHVzaChbR2VbZHRdLGR0XSk7cmV0dXJuIEN0LnNvcnQoZnVuY3Rpb24oY3QsYnQpe3JldHVybiBjdFswXS1idFswXXx8UVtjdFsxXV0tUVtidFsxXV19KSxMW0N0LnBvcCgpWzFdXX1mdW5jdGlvbiBfZShWZSxHZSl7cmV0dXJuIUdlfHwhR2UuUFJOfHwi''@;'; put 'put ''c2VwPSI9PVZlLnNsaWNlKDAsNCl8fFZlLmluZGV4T2YoIlx0Iik+PTB8fFZlLmluZGV4T2YoIiwiKT49MHx8VmUuaW5kZXhPZigiOyIpPj0wP2Z1bmN0aW9uIHBlKFZlLEdlKXt2YXIgbnQ9R2V8fHt9LGR0PSIiO251bGwhPXRlJiZudWxsPT1udC5kZW5zZSYmKG50LmRlbnNlPXRlKTt2YXIg''@;'; put 'put ''Q3Q9bnQuZGVuc2U/W106e30sY3Q9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTsic2VwPSI9PVZlLnNsaWNlKDAsNCk/MTM9PVZlLmNoYXJDb2RlQXQoNSkmJjEwPT1WZS5jaGFyQ29kZUF0KDYpPyhkdD1WZS5jaGFyQXQoNCksVmU9VmUuc2xpY2UoNykpOjEzPT1WZS5jaGFyQ29kZUF0KDUp''@;'; put 'put ''fHwxMD09VmUuY2hhckNvZGVBdCg1KT8oZHQ9VmUuY2hhckF0KDQpLFZlPVZlLnNsaWNlKDYpKTpkdD1yZShWZS5zbGljZSgwLDEwMjQpKTpkdD1yZShWZS5zbGljZSgwLDEwMjQpKTt2YXIgYnQ9MCxGdD0wLEV0PTAsVHQ9MCxadD0wLHBuPWR0LmNoYXJDb2RlQXQoMCksS249ITEsdW49MCxx''@;'; put 'put ''bj1WZS5jaGFyQ29kZUF0KDApO1ZlPVZlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIik7dmFyIHpuPW51bGwhPW50LmRhdGVORj9mdW5jdGlvbiB4ZSh5KXt2YXIgUD0ibnVtYmVyIj09dHlwZW9mIHk/dy5fdGFibGVbeV06eTtyZXR1cm4gUD1QLnJlcGxhY2UoZmUsIihcXGQrKSIpLG5ldyBSZWdF''@;'; put 'put ''eHAoIl4iK1ArIiQiKX0obnQuZGF0ZU5GKTpudWxsO2Z1bmN0aW9uIEFuKCl7dmFyIGVyPVZlLnNsaWNlKFR0LFp0KSx0cj17fTtpZignIic9PWVyLmNoYXJBdCgwKSYmJyInPT1lci5jaGFyQXQoZXIubGVuZ3RoLTEpJiYoZXI9ZXIuc2xpY2UoMSwtMSkucmVwbGFjZSgvIiIvZywnIicpKSww''@;'; put 'put ''PT09ZXIubGVuZ3RoKXRyLnQ9InoiO2Vsc2UgaWYobnQucmF3KXRyLnQ9InMiLHRyLnY9ZXI7ZWxzZSBpZigwPT09ZXIudHJpbSgpLmxlbmd0aCl0ci50PSJzIix0ci52PWVyO2Vsc2UgaWYoNjE9PWVyLmNoYXJDb2RlQXQoMCkpMzQ9PWVyLmNoYXJDb2RlQXQoMSkmJjM0PT1lci5jaGFyQ29k''@;'; put 'put ''ZUF0KGVyLmxlbmd0aC0xKT8odHIudD0icyIsdHIudj1lci5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIEs5KHkpe3JldHVybiAxIT15Lmxlbmd0aH0oZXIpPyh0ci50PSJuIix0ci5mPWVyLnNsaWNlKDEpKToodHIudD0icyIsdHIudj1lcik7ZWxzZSBpZigiVFJV''@;'; put 'put ''RSI9PWVyKXRyLnQ9ImIiLHRyLnY9ITA7ZWxzZSBpZigiRkFMU0UiPT1lcil0ci50PSJiIix0ci52PSExO2Vsc2UgaWYoaXNOYU4oRXQ9V24oZXIpKSlpZighaXNOYU4oZW4oZXIpLmdldERhdGUoKSl8fHpuJiZlci5tYXRjaCh6bikpe3RyLno9bnQuZGF0ZU5GfHx3Ll90YWJsZVsxNF07dmFy''@;'; put 'put ''IFpuPTA7em4mJmVyLm1hdGNoKHpuKSYmKGVyPWZ1bmN0aW9uIExlKHksUCxMKXt2YXIgUT0tMSxyZT0tMSxwZT0tMSxfZT0tMSx2ZT0tMSxTZT0tMTsoUC5tYXRjaChmZSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEdlLG50KXt2YXIgZHQ9cGFyc2VJbnQoTFtudCsxXSwxMCk7c3dpdGNoKEdl''@;'; put 'put ''LnRvTG93ZXJDYXNlKCkuY2hhckF0KDApKXtjYXNlInkiOlE9ZHQ7YnJlYWs7Y2FzZSJkIjpwZT1kdDticmVhaztjYXNlImgiOl9lPWR0O2JyZWFrO2Nhc2UicyI6U2U9ZHQ7YnJlYWs7Y2FzZSJtIjpfZT49MD92ZT1kdDpyZT1kdH19KSxTZT49MCYmLTE9PXZlJiZyZT49MCYmKHZlPXJlLHJl''@;'; put 'put ''PS0xKTt2YXIgSGU9KCIiKyhRPj0wP1E6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyItIisoIjAwIisocmU+PTE/cmU6MSkpLnNsaWNlKC0yKSsiLSIrKCIwMCIrKHBlPj0xP3BlOjEpKS5zbGljZSgtMik7Nz09SGUubGVuZ3RoJiYoSGU9IjAiK0hlKSw4PT1IZS5sZW5n''@;'; put 'put ''dGgmJihIZT0iMjAiK0hlKTt2YXIgVmU9KCIwMCIrKF9lPj0wP19lOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyh2ZT49MD92ZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoU2U+PTA/U2U6MCkpLnNsaWNlKC0yKTtyZXR1cm4tMT09X2UmJi0xPT12ZSYmLTE9PVNlP0hlOi0xPT1RJiYtMT09''@;'; put 'put ''cmUmJi0xPT1wZT9WZTpIZSsiVCIrVmV9KDAsbnQuZGF0ZU5GLGVyLm1hdGNoKHpuKXx8W10pLFpuPTEpLG50LmNlbGxEYXRlcz8odHIudD0iZCIsdHIudj1IdChlcixabikpOih0ci50PSJuIix0ci52PVVlKEh0KGVyLFpuKSkpLCExIT09bnQuY2VsbFRleHQmJih0ci53PXcuZm9ybWF0KHRy''@;'; put 'put ''LnosdHIudiBpbnN0YW5jZW9mIERhdGU/VWUodHIudik6dHIudikpLG50LmNlbGxORnx8ZGVsZXRlIHRyLnp9ZWxzZSB0ci50PSJzIix0ci52PWVyO2Vsc2UgdHIudD0ibiIsITEhPT1udC5jZWxsVGV4dCYmKHRyLnc9ZXIpLHRyLnY9RXQ7aWYoInoiPT10ci50fHwobnQuZGVuc2U/KEN0W2J0''@;'; put 'put ''XXx8KEN0W2J0XT1bXSksQ3RbYnRdW0Z0XT10cik6Q3RbZGkoe2M6RnQscjpidH0pXT10cikscW49VmUuY2hhckNvZGVBdChUdD1adCsxKSxjdC5lLmM8RnQmJihjdC5lLmM9RnQpLGN0LmUucjxidCYmKGN0LmUucj1idCksdW49PXBuKSsrRnQ7ZWxzZSBpZihGdD0wLCsrYnQsbnQuc2hlZXRS''@;'; put 'put ''b3dzJiZudC5zaGVldFJvd3M8PWJ0KXJldHVybiEwfWU6Zm9yKDtadDxWZS5sZW5ndGg7KytadClzd2l0Y2godW49VmUuY2hhckNvZGVBdChadCkpe2Nhc2UgMzQ6MzQ9PT1xbiYmKEtuPSFLbik7YnJlYWs7Y2FzZSBwbjpjYXNlIDEwOmNhc2UgMTM6aWYoIUtuJiZBbigpKWJyZWFrIGV9cmV0''@;'; put 'put ''dXJuIFp0LVR0PjAmJkFuKCksQ3RbIiFyZWYiXT1PbyhjdCksQ3R9KFZlLEdlKTprMShmdW5jdGlvbiBQKFZlLEdlKXt2YXIgbnQ9R2V8fHt9LGR0PVtdO2lmKCFWZXx8MD09PVZlLmxlbmd0aClyZXR1cm4gZHQ7Zm9yKHZhciBDdD1WZS5zcGxpdCgvW1xyXG5dLyksY3Q9Q3QubGVuZ3RoLTE7''@;'; put 'put ''Y3Q+PTAmJjA9PT1DdFtjdF0ubGVuZ3RoOyktLWN0O2Zvcih2YXIgYnQ9MTAsRnQ9MCxFdD0wO0V0PD1jdDsrK0V0KS0xPT0oRnQ9Q3RbRXRdLmluZGV4T2YoIiAiKSk/RnQ9Q3RbRXRdLmxlbmd0aDpGdCsrLGJ0PU1hdGgubWF4KGJ0LEZ0KTtmb3IoRXQ9MDtFdDw9Y3Q7KytFdCl7ZHRbRXRd''@;'; put 'put ''PVtdO3ZhciBUdD0wO2Zvcih5KEN0W0V0XS5zbGljZSgwLGJ0KS50cmltKCksZHQsRXQsVHQsbnQpLFR0PTE7VHQ8PShDdFtFdF0ubGVuZ3RoLWJ0KS8xMCsxOysrVHQpeShDdFtFdF0uc2xpY2UoYnQrMTAqKFR0LTEpLGJ0KzEwKlR0KS50cmltKCksZHQsRXQsVHQsbnQpfXJldHVybiBudC5z''@;'; put 'put ''aGVldFJvd3MmJihkdD1kdC5zbGljZSgwLG50LnNoZWV0Um93cykpLGR0fShWZSxHZSksR2UpfWZ1bmN0aW9uIHZlKFZlLEdlKXt2YXIgbnQ9IiIsZHQ9InN0cmluZyI9PUdlLnR5cGU/WzAsMCwwLDBdOmhfKFZlLEdlKTtzd2l0Y2goR2UudHlwZSl7Y2FzZSJiYXNlNjQiOm50PXNlLmRlY29k''@;'; put 'put ''ZShWZSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjpudD1WZTticmVhaztjYXNlImJ1ZmZlciI6bnQ9NjUwMDE9PUdlLmNvZGVwYWdlP1ZlLnRvU3RyaW5nKCJ1dGY4Iik6R2UuY29kZXBhZ2UmJnR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZShHZS5jb2Rl''@;'; put 'put ''cGFnZSxWZSk6VmUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOm50PVB0KFZlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitHZS50eXBlKX1yZXR1cm4gMjM5PT1kdFswXSYmMTg3PT1kdFsxXSYmMTkxPT1kdFsyXT9udD1Q''@;'; put 'put ''aShudC5zbGljZSgzKSk6ImJpbmFyeSI9PUdlLnR5cGUmJnR5cGVvZiBjcHRhYmxlPCJ1IiYmR2UuY29kZXBhZ2UmJihudD1jcHRhYmxlLnV0aWxzLmRlY29kZShHZS5jb2RlcGFnZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgyODU5MSxudCkpKSwic29jaWFsY2FsYzp2ZXJzaW9uOiI9PW50LnNs''@;'; put 'put ''aWNlKDAsMTkpP080LnRvX3NoZWV0KCJzdHJpbmciPT1HZS50eXBlP250OlBpKG50KSxHZSk6X2UobnQsR2UpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBTZShWZSxHZSl7cmV0dXJuIEVkKHZlKFZlLEdlKSxHZSl9LHRvX3NoZWV0OnZlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gSGUoVmUp''@;'; put 'put ''e2Zvcih2YXIgZHQsR2U9W10sbnQ9T2koVmVbIiFyZWYiXSksQ3Q9QXJyYXkuaXNBcnJheShWZSksY3Q9bnQucy5yO2N0PD1udC5lLnI7KytjdCl7Zm9yKHZhciBidD1bXSxGdD1udC5zLmM7RnQ8PW50LmUuYzsrK0Z0KXt2YXIgRXQ9ZGkoe3I6Y3QsYzpGdH0pO2lmKChkdD1DdD8oVmVbY3Rd''@;'; put 'put ''fHxbXSlbRnRdOlZlW0V0XSkmJm51bGwhPWR0LnYpe2Zvcih2YXIgVHQ9KGR0Lnd8fChjdShkdCksZHQudyl8fCIiKS5zbGljZSgwLDEwKTtUdC5sZW5ndGg8MTA7KVR0Kz0iICI7YnQucHVzaChUdCsoMD09PUZ0PyIgIjoiIikpfWVsc2UgYnQucHVzaCgiICAgICAgICAgICIpfUdlLnB1c2go''@;'; put 'put ''YnQuam9pbigiIikpfXJldHVybiBHZS5qb2luKCJcbiIpfX19KCksVG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KFRuLHZyLHJyKXtpZihUbil7b2woVG4sVG4ubHx8MCk7Zm9yKHZhciBTbj1yci5FbnVtfHxRcjtUbi5sPFRuLmxlbmd0aDspe3ZhciBwcj1Ubi5yZWFkX3NoaWZ0KDIpLENpPVNu''@;'; put 'put ''W3ByXXx8U25bNjU1MzVdLEJyPVRuLnJlYWRfc2hpZnQoMiksamk9VG4ubCtCcixfbz1DaS5mJiZDaS5mKFRuLEJyLHJyKTtpZihUbi5sPWppLHZyKF9vLENpLHByKSlyZXR1cm59fX1mdW5jdGlvbiBMKFRuLHZyKXtpZighVG4pcmV0dXJuIFRuO3ZhciBycj12cnx8e307bnVsbCE9dGUmJm51''@;'; put 'put ''bGw9PXJyLmRlbnNlJiYocnIuZGVuc2U9dGUpO3ZhciBTbj1yci5kZW5zZT9bXTp7fSxwcj0iU2hlZXQxIixDaT0wLEJyPXt9LGppPVtwcl0sX289W10sRGk9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxZbz1yci5zaGVldFJvd3N8fDA7aWYoMj09VG5bMl0pcnIuRW51bT1Rcix5KFRuLGZ1''@;'; put 'put ''bmN0aW9uKGhpLHRhLE1uKXtzd2l0Y2goTW4pe2Nhc2UgMDpyci52ZXJzPWhpLGhpPj00MDk2JiYocnIucXBybz0hMCk7YnJlYWs7Y2FzZSA2OkRpPWhpO2JyZWFrO2Nhc2UgMTU6Y2FzZSA1MTpyci5xcHJvfHwoaGlbMV0udj1oaVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2Fz''@;'; put 'put ''ZSAxNjoxND09TW4mJjExMj09KDExMiZoaVsyXSkmJigxNSZoaVsyXSk+MSYmKDE1JmhpWzJdKTwxNSYmKGhpWzFdLno9cnIuZGF0ZU5GfHx3Ll90YWJsZVsxNF0scnIuY2VsbERhdGVzJiYoaGlbMV0udD0iZCIsaGlbMV0udj1odChoaVsxXS52KSkpO3ZhciBNcz1yci5kZW5zZT8oU25baGlb''@;'; put 'put ''MF0ucl18fFtdKVtoaVswXS5jXTpTbltkaShoaVswXSldO2lmKE1zKXtNcy50PWhpWzFdLnQsTXMudj1oaVsxXS52LG51bGwhPWhpWzFdLnomJihNcy56PWhpWzFdLnopLG51bGwhPWhpWzFdLmYmJihNcy5mPWhpWzFdLmYpO2JyZWFrfXJyLmRlbnNlPyhTbltoaVswXS5yXXx8KFNuW2hpWzBd''@;'; put 'put ''LnJdPVtdKSxTbltoaVswXS5yXVtoaVswXS5jXT1oaVsxXSk6U25bZGkoaGlbMF0pXT1oaVsxXX19LHJyKTtlbHNle2lmKDI2IT1UblsyXSYmMTQhPVRuWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK1RuWzJdKTtyci5FbnVtPXVyLDE0PT1UblsyXSYmKHJy''@;'; put 'put ''LnFwcm89ITAsVG4ubD0wKSx5KFRuLGZ1bmN0aW9uKGhpLHRhLE1uKXtzd2l0Y2goTW4pe2Nhc2UgMjI6aGlbMV0udj1oaVsxXS52LnNsaWNlKDEpO2Nhc2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMzc6Y2FzZSAzOTpjYXNlIDQwOmlmKGhpWzNdPkNpJiYoU25bIiFyZWYiXT1PbyhEaSks''@;'; put 'put ''QnJbcHJdPVNuLFNuPXJyLmRlbnNlP1tdOnt9LERpPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0samkucHVzaChwcj0iU2hlZXQiKygoQ2k9aGlbM10pKzEpKSksWW8+MCYmaGlbMF0ucj49WW8pYnJlYWs7cnIuZGVuc2U/KFNuW2hpWzBdLnJdfHwoU25baGlbMF0ucl09W10pLFNuW2hpWzBd''@;'; put 'put ''LnJdW2hpWzBdLmNdPWhpWzFdKTpTbltkaShoaVswXSldPWhpWzFdLERpLmUuYzxoaVswXS5jJiYoRGkuZS5jPWhpWzBdLmMpLERpLmUucjxoaVswXS5yJiYoRGkuZS5yPWhpWzBdLnIpO2JyZWFrO2Nhc2UgMjc6aGlbMTRlM10mJihfb1toaVsxNGUzXVswXV09aGlbMTRlM11bMV0pfX0scnIp''@;'; put 'put ''fWlmKFNuWyIhcmVmIl09T28oRGkpLEJyW3ByXT1TbiwhX28ubGVuZ3RoKXJldHVybntTaGVldE5hbWVzOmppLFNoZWV0czpCcn07Zm9yKHZhciBsbz17fSxBbz1bXSx4bz0wO3hvPF9vLmxlbmd0aDsrK3hvKUJyW2ppW3hvXV0mJihBby5wdXNoKF9vW3hvXSksbG9bX29beG9dXT1CcltqaVt4''@;'; put 'put ''b11dKTtyZXR1cm57U2hlZXROYW1lczpBbyxTaGVldHM6bG99fWZ1bmN0aW9uIEhlKFRuLHZyLHJyKXt2YXIgU249W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gcnIucXBybyYmMjA3NjghPXJyLnZlcnM/KFNuWzBdLmM9VG4ucmVhZF9zaGlmdCgxKSxUbi5sKyssU25bMF0ucj1U''@;'; put 'put ''bi5yZWFkX3NoaWZ0KDIpLFRuLmwrPTIpOihTblsyXT1Ubi5yZWFkX3NoaWZ0KDEpLFNuWzBdLmM9VG4ucmVhZF9zaGlmdCgyKSxTblswXS5yPVRuLnJlYWRfc2hpZnQoMikpLFNufWZ1bmN0aW9uIFZlKFRuLHZyLHJyKXt2YXIgU249VG4ubCt2cixwcj1IZShUbiwwLHJyKTtpZihwclsxXS50''@;'; put 'put ''PSJzIiwyMDc2OD09cnIudmVycyl7VG4ubCsrO3ZhciBDaT1Ubi5yZWFkX3NoaWZ0KDEpO3JldHVybiBwclsxXS52PVRuLnJlYWRfc2hpZnQoQ2ksInV0ZjgiKSxwcn1yZXR1cm4gcnIucXBybyYmVG4ubCsrLHByWzFdLnY9VG4ucmVhZF9zaGlmdChTbi1Ubi5sLCJjc3RyIikscHJ9ZnVuY3Rp''@;'; put 'put ''b24gR2UoVG4sdnIscnIpe3ZhciBTbj1mcig3K3JyLmxlbmd0aCk7U24ud3JpdGVfc2hpZnQoMSwyNTUpLFNuLndyaXRlX3NoaWZ0KDIsdnIpLFNuLndyaXRlX3NoaWZ0KDIsVG4pLFNuLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgcHI9MDtwcjxTbi5sZW5ndGg7Kytwcil7dmFyIENpPXJy''@;'; put 'put ''LmNoYXJDb2RlQXQocHIpO1NuLndyaXRlX3NoaWZ0KDEsQ2k+PTEyOD85NTpDaSl9cmV0dXJuIFNuLndyaXRlX3NoaWZ0KDEsMCksU259ZnVuY3Rpb24gZHQoVG4sdnIscnIpe3ZhciBTbj1mcig3KTtyZXR1cm4gU24ud3JpdGVfc2hpZnQoMSwyNTUpLFNuLndyaXRlX3NoaWZ0KDIsdnIpLFNu''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsVG4pLFNuLndyaXRlX3NoaWZ0KDIscnIsImkiKSxTbn1mdW5jdGlvbiBjdChUbix2cixycil7dmFyIFNuPWZyKDEzKTtyZXR1cm4gU24ud3JpdGVfc2hpZnQoMSwyNTUpLFNuLndyaXRlX3NoaWZ0KDIsdnIpLFNuLndyaXRlX3NoaWZ0KDIsVG4pLFNuLndyaXRlX3No''@;'; put 'put ''aWZ0KDgscnIsImYiKSxTbn1mdW5jdGlvbiBGdChUbix2cixycil7dmFyIFNuPTMyNzY4JnZyO3JldHVybiB2cj0oU24/VG46MCkrKCh2ciY9LTMyNzY5KT49ODE5Mj92ci0xNjM4NDp2ciksKFNuPyIiOiIkIikrKHJyP05zKHZyKTpIcyh2cikpfXZhciBUdD17NTE6WyJGQUxTRSIsMF0sNTI6''@;'; put 'put ''WyJUUlVFIiwwXSw3MDpbIkxFTiIsMV0sODA6WyJTVU0iLDY5XSw4MTpbIkFWRVJBR0VBIiw2OV0sODI6WyJDT1VOVEEiLDY5XSw4MzpbIk1JTkEiLDY5XSw4NDpbIk1BWEEiLDY5XSwxMTE6WyJUIiwxXX0sWnQ9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIrIiwiLSIsIioiLCIvIiwi''@;'; put 'put ''XiIsIj0iLCI8PiIsIjw9IiwiPj0iLCI8IiwiPiIsIiIsIiIsIiIsIiIsIiYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXTtmdW5jdGlvbiBLbihUbil7dmFyIHZyPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIHZyWzBdLnI9VG4ucmVhZF9zaGlmdCgyKSx2clszXT1UbltUbi5sKytd''@;'; put 'put ''LHZyWzBdLmM9VG5bVG4ubCsrXSx2cn1mdW5jdGlvbiBxbihUbix2cixycixTbil7dmFyIHByPWZyKDYrU24ubGVuZ3RoKTtwci53cml0ZV9zaGlmdCgyLFRuKSxwci53cml0ZV9zaGlmdCgxLHJyKSxwci53cml0ZV9zaGlmdCgxLHZyKSxwci53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIENp''@;'; put 'put ''PTA7Q2k8U24ubGVuZ3RoOysrQ2kpe3ZhciBCcj1Tbi5jaGFyQ29kZUF0KENpKTtwci53cml0ZV9zaGlmdCgxLEJyPj0xMjg/OTU6QnIpfXJldHVybiBwci53cml0ZV9zaGlmdCgxLDApLHByfWZ1bmN0aW9uIEFuKFRuLHZyKXt2YXIgcnI9S24oVG4pLFNuPVRuLnJlYWRfc2hpZnQoNCkscHI9''@;'; put 'put ''VG4ucmVhZF9zaGlmdCg0KSxDaT1Ubi5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1DaSlyZXR1cm4gMD09PVNuJiYzMjIxMjI1NDcyPT09cHI/KHJyWzFdLnQ9ImUiLHJyWzFdLnY9MTUpOjA9PT1TbiYmMzQ4OTY2MDkyOD09PXByPyhyclsxXS50PSJlIixyclsxXS52PTQyKTpyclsxXS52PTAs''@;'; put 'put ''cnI7dmFyIEJyPTMyNzY4JkNpO3JldHVybiBDaT0oMzI3NjcmQ2kpLTE2NDQ2LHJyWzFdLnY9KDEtMipCcikqKHByKk1hdGgucG93KDIsQ2krMzIpK1NuKk1hdGgucG93KDIsQ2kpKSxycn1mdW5jdGlvbiBlcihUbix2cixycixTbil7dmFyIHByPWZyKDE0KTtpZihwci53cml0ZV9zaGlmdCgy''@;'; put 'put ''LFRuKSxwci53cml0ZV9zaGlmdCgxLHJyKSxwci53cml0ZV9zaGlmdCgxLHZyKSwwPT1TbilyZXR1cm4gcHIud3JpdGVfc2hpZnQoNCwwKSxwci53cml0ZV9zaGlmdCg0LDApLHByLndyaXRlX3NoaWZ0KDIsNjU1MzUpLHByO3ZhciBDaT0wLEJyPTAsX289MDtyZXR1cm4gU248MCYmKENpPTEs''@;'; put 'put ''U249LVNuKSxCcj0wfE1hdGgubG9nMihTbiksMjE0NzQ4MzY0OCYoX289KFNuLz1NYXRoLnBvdygyLEJyLTMxKSk+Pj4wKXx8KCsrQnIsX289KFNuLz0yKT4+PjApLFNuLT1fbyxfb3w9MjE0NzQ4MzY0OCxfbz4+Pj0wLFNuKj1NYXRoLnBvdygyLDMyKSxwci53cml0ZV9zaGlmdCg0LFNuPj4+''@;'; put 'put ''MCkscHIud3JpdGVfc2hpZnQoNCxfbykscHIud3JpdGVfc2hpZnQoMixCcis9MTYzODMrKENpPzMyNzY4OjApKSxwcn1mdW5jdGlvbiBOcihUbix2cil7dmFyIHJyPUtuKFRuKSxTbj1Ubi5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gcnJbMV0udj1Tbixycn1mdW5jdGlvbiBMaShUbix2cil7''@;'; put 'put ''dmFyIHJyPWZyKDUrVG4ubGVuZ3RoKTtyci53cml0ZV9zaGlmdCgyLDE0ZTMpLHJyLndyaXRlX3NoaWZ0KDIsdnIpO2Zvcih2YXIgU249MDtTbjxUbi5sZW5ndGg7KytTbil7dmFyIHByPVRuLmNoYXJDb2RlQXQoU24pO3JyW3JyLmwrK109cHI+MTI3Pzk1OnByfXJldHVybiBycltyci5sKytd''@;'; put 'put ''PTAscnJ9dmFyIFFyPXswOntuOiJCT0YiLGY6aGx9LDE6e246IkVPRiJ9LDI6e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gdmUoVG4pe3ZhciB2cj17czp7YzowLHI6MH0sZTp7YzowLHI6''@;'; put 'put ''MH19O3JldHVybiB2ci5zLmM9VG4ucmVhZF9zaGlmdCgyKSx2ci5zLnI9VG4ucmVhZF9zaGlmdCgyKSx2ci5lLmM9VG4ucmVhZF9zaGlmdCgyKSx2ci5lLnI9VG4ucmVhZF9zaGlmdCgyKSw2NTUzNT09dnIucy5jJiYodnIucy5jPXZyLmUuYz12ci5zLnI9dnIuZS5yPTApLHZyfX0sNzp7bjoi''@;'; put 'put ''V0lORE9XMSJ9LDg6e246IkNPTFcxIn0sOTp7bjoiV0lOVFdPIn0sMTA6e246IkNPTFcyIn0sMTE6e246Ik5BTUUifSwxMjp7bjoiQkxBTksifSwxMzp7bjoiSU5URUdFUiIsZjpmdW5jdGlvbiBudChUbix2cixycil7dmFyIFNuPUhlKFRuLDAscnIpO3JldHVybiBTblsxXS52PVRuLnJlYWRf''@;'; put 'put ''c2hpZnQoMiwiaSIpLFNufX0sMTQ6e246Ik5VTUJFUiIsZjpmdW5jdGlvbiBDdChUbix2cixycil7dmFyIFNuPUhlKFRuLDAscnIpO3JldHVybiBTblsxXS52PVRuLnJlYWRfc2hpZnQoOCwiZiIpLFNufX0sMTU6e246IkxBQkVMIixmOlZlfSwxNjp7bjoiRk9STVVMQSIsZjpmdW5jdGlvbiBi''@;'; put 'put ''dChUbix2cixycil7dmFyIFNuPVRuLmwrdnIscHI9SGUoVG4sMCxycik7aWYocHJbMV0udj1Ubi5yZWFkX3NoaWZ0KDgsImYiKSxyci5xcHJvKVRuLmw9U247ZWxzZXt2YXIgQ2k9VG4ucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gcG4oVG4sdnIpe29sKFRuLDApO2Zvcih2YXIgcnI9W10sU249''@;'; put 'put ''MCxwcj0iIixDaT0iIjtUbi5sPFRuLmxlbmd0aDspe3ZhciBCcj1UbltUbi5sKytdO3N3aXRjaChCcil7Y2FzZSAwOnJyLnB1c2goVG4ucmVhZF9zaGlmdCg4LCJmIikpO2JyZWFrO2Nhc2UgMTpDaT1GdCh2clswXS5jLFRuLnJlYWRfc2hpZnQoMiksITApLHByPUZ0KHZyWzBdLnIsVG4ucmVh''@;'; put 'put ''ZF9zaGlmdCgyKSwhMSkscnIucHVzaChDaStwcik7YnJlYWs7Y2FzZSAyOnZhciBqaT1GdCh2clswXS5jLFRuLnJlYWRfc2hpZnQoMiksITApLF9vPUZ0KHZyWzBdLnIsVG4ucmVhZF9zaGlmdCgyKSwhMSk7Q2k9RnQodnJbMF0uYyxUbi5yZWFkX3NoaWZ0KDIpLCEwKSxwcj1GdCh2clswXS5y''@;'; put 'put ''LFRuLnJlYWRfc2hpZnQoMiksITEpLHJyLnB1c2goamkrX28rIjoiK0NpK3ByKTticmVhaztjYXNlIDM6aWYoVG4ubDxUbi5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVuZCIpO2JyZWFrO2Nhc2UgNDpyci5wdXNoKCIoIityci5wb3Ao''@;'; put 'put ''KSsiKSIpO2JyZWFrO2Nhc2UgNTpyci5wdXNoKFRuLnJlYWRfc2hpZnQoMikpO2JyZWFrO2Nhc2UgNjpmb3IodmFyIERpPSIiO0JyPVRuW1RuLmwrK107KURpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEJyKTtyci5wdXNoKCciJytEaS5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNl''@;'; put 'put ''IDg6cnIucHVzaCgiLSIrcnIucG9wKCkpO2JyZWFrO2Nhc2UgMjM6cnIucHVzaCgiKyIrcnIucG9wKCkpO2JyZWFrO2Nhc2UgMjI6cnIucHVzaCgiTk9UKCIrcnIucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6dmFyIFlvPXJyLnBvcCgpLGxvPXJyLnBvcCgpO3JyLnB1c2goWyJB''@;'; put 'put ''TkQiLCJPUiJdW0JyLTIwXSsiKCIrbG8rIiwiK1lvKyIpIik7YnJlYWs7ZGVmYXVsdDppZihCcjwzMiYmWnRbQnJdKVlvPXJyLnBvcCgpLGxvPXJyLnBvcCgpLHJyLnB1c2gobG8rWnRbQnJdK1lvKTtlbHNle2lmKCFUdFtCcl0pcmV0dXJuIEJyPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZh''@;'; put 'put ''bGlkIG9wY29kZSAiK0JyLnRvU3RyaW5nKDE2KSk6QnI8PTI0P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBvcCAiK0JyLnRvU3RyaW5nKDE2KSk6QnI8PTMwP2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK0JyLnRvU3RyaW5nKDE2KSk6QnI8PTExNT9jb25zb2xl''@;'; put 'put ''LmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrQnIudG9TdHJpbmcoMTYpKTpjb25zb2xlLmVycm9yKCJXSzEgdW5yZWNvZ25pemVkIG9wY29kZSAiK0JyLnRvU3RyaW5nKDE2KSk7aWYoNjk9PShTbj1UdFtCcl1bMV0pJiYoU249VG5bVG4ubCsrXSksU24+cnIubGVu''@;'; put 'put ''Z3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSAweCIrQnIudG9TdHJpbmcoMTYpKyI6fCIrcnIuam9pbigifCIpKyJ8Iik7dmFyIEFvPXJyLnNsaWNlKC1Tbik7cnIubGVuZ3RoLT1Tbixyci5wdXNoKFR0W0JyXVswXSsiKCIrQW8uam9pbigiLCIp''@;'; put 'put ''KyIpIil9fX0xPT1yci5sZW5ndGg/dnJbMV0uZj0iIityclswXTpjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgfCIrcnIuam9pbigifCIpKyJ8Iil9KShUbi5zbGljZShUbi5sLFRuLmwrQ2kpLHByKSxUbi5sKz1DaX1yZXR1cm4gcHJ9fSwyNDp7bjoiVEFCTEUifSwyNTp7''@;'; put 'put ''bjoiT1JBTkdFIn0sMjY6e246IlBSQU5HRSJ9LDI3OntuOiJTUkFOR0UifSwyODp7bjoiRlJBTkdFIn0sMjk6e246IktSQU5HRTEifSwzMjp7bjoiSFJBTkdFIn0sMzU6e246IktSQU5HRTIifSwzNjp7bjoiUFJPVEVDIn0sMzc6e246IkZPT1RFUiJ9LDM4OntuOiJIRUFERVIifSwzOTp7bjoi''@;'; put 'put ''U0VUVVAifSw0MDp7bjoiTUFSR0lOUyJ9LDQxOntuOiJMQUJFTEZNVCJ9LDQyOntuOiJUSVRMRVMifSw0Mzp7bjoiU0hFRVRKUyJ9LDQ1OntuOiJHUkFQSCJ9LDQ2OntuOiJOR1JBUEgifSw0Nzp7bjoiQ0FMQ0NPVU5UIn0sNDg6e246IlVORk9STUFUVEVEIn0sNDk6e246IkNVUlNPUlcxMiJ9''@;'; put 'put ''LDUwOntuOiJXSU5ET1cifSw1MTp7bjoiU1RSSU5HIixmOlZlfSw1NTp7bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdS''@;'; put 'put ''QVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0sNjg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VT''@;'; put 'put ''Pz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9LDEwNTp7bjoiTVJBTkdFUz8/In0sNjU1MzU6e246IiJ9fSx1cj17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hF''@;'; put 'put ''RVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xVTU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VB''@;'; put 'put ''TCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlOIn0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2''@;'; put 'put ''IixmOmZ1bmN0aW9uIHVuKFRuLHZyKXt2YXIgcnI9S24oVG4pO3JldHVybiByclsxXS50PSJzIixyclsxXS52PVRuLnJlYWRfc2hpZnQodnItNCwiY3N0ciIpLHJyfX0sMjM6e246Ik5VTUJFUjE3IixmOkFufSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gem4oVG4sdnIpe3ZhciBycj1L''@;'; put 'put ''bihUbik7cnJbMV0udj1Ubi5yZWFkX3NoaWZ0KDIpO3ZhciBTbj1yclsxXS52Pj4xO2lmKDEmcnJbMV0udilzd2l0Y2goNyZTbil7Y2FzZSAwOlNuPTVlMyooU24+PjMpO2JyZWFrO2Nhc2UgMTpTbj01MDAqKFNuPj4zKTticmVhaztjYXNlIDI6U249KFNuPj4zKS8yMDticmVhaztjYXNlIDM6''@;'; put 'put ''U249KFNuPj4zKS8yMDA7YnJlYWs7Y2FzZSA0OlNuPShTbj4+MykvMmUzO2JyZWFrO2Nhc2UgNTpTbj0oU24+PjMpLzJlNDticmVhaztjYXNlIDY6U249KFNuPj4zKS8xNjticmVhaztjYXNlIDc6U249KFNuPj4zKS82NH1yZXR1cm4gcnJbMV0udj1Tbixycn19LDI1OntuOiJGT1JNVUxBMTki''@;'; put 'put ''LGY6ZnVuY3Rpb24gdHIoVG4sdnIpe3ZhciBycj1BbihUbik7cmV0dXJuIFRuLmwrPXZyLTE0LHJyfX0sMjY6e246IkZPUk1VTEExQSJ9LDI3OntuOiJYRk9STUFUIixmOmZ1bmN0aW9uIGtpKFRuLHZyKXtmb3IodmFyIHJyPXt9LFNuPVRuLmwrdnI7VG4ubDxTbjspe3ZhciBwcj1Ubi5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpO2lmKDE0ZTM9PXByKXtmb3IocnJbcHJdPVswLCIiXSxycltwcl1bMF09VG4ucmVhZF9zaGlmdCgyKTtUbltUbi5sXTspcnJbcHJdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFRuW1RuLmxdKSxUbi5sKys7VG4ubCsrfX1yZXR1cm4gcnJ9fSwyODp7bjoiRFRMQUJFTE1JU0Mi''@;'; put 'put ''fSwyOTp7bjoiRFRMQUJFTENFTEwifSwzMDp7bjoiR1JBUEhXSU5ET1cifSwzMTp7bjoiQ1BBIn0sMzI6e246IkxQTEFVVE8ifSwzMzp7bjoiUVVFUlkifSwzNDp7bjoiSElEREVOU0hFRVQifSwzNTp7bjoiPz8ifSwzNzp7bjoiTlVNQkVSMjUiLGY6ZnVuY3Rpb24gWm4oVG4sdnIpe3ZhciBy''@;'; put 'put ''cj1LbihUbiksU249VG4ucmVhZF9zaGlmdCg0KTtyZXR1cm4gcnJbMV0udj1Tbj4+Nixycn19LDM4OntuOiI/PyJ9LDM5OntuOiJOVU1CRVIyNyIsZjpOcn0sNDA6e246IkZPUk1VTEEyOCIsZjpmdW5jdGlvbiBvaShUbix2cil7dmFyIHJyPU5yKFRuKTtyZXR1cm4gVG4ubCs9dnItMTAscnJ9''@;'; put 'put ''fSwxNDI6e246Ij8/In0sMTQ3OntuOiI/PyJ9LDE1MDp7bjoiPz8ifSwxNTE6e246Ij8/In0sMTUyOntuOiI/PyJ9LDE1Mzp7bjoiPz8ifSwxNTQ6e246Ij8/In0sMTU1OntuOiI/PyJ9LDE1Njp7bjoiPz8ifSwxNjM6e246Ij8/In0sMTc0OntuOiI/PyJ9LDE3NTp7bjoiPz8ifSwxNzY6e246''@;'; put 'put ''Ij8/In0sMTc3OntuOiI/PyJ9LDE4NDp7bjoiPz8ifSwxODU6e246Ij8/In0sMTg2OntuOiI/PyJ9LDE4Nzp7bjoiPz8ifSwxODg6e246Ij8/In0sMTk1OntuOiI/PyJ9LDIwMTp7bjoiPz8ifSwyMDU6e246Ij8/In0sMjA2OntuOiI/PyJ9LDIwNzp7bjoiPz8ifSwyMDg6e246Ij8/In0sMjU2''@;'; put 'put ''OntuOiI/PyJ9LDI1OTp7bjoiPz8ifSwyNjA6e246Ij8/In0sMjYxOntuOiI/PyJ9LDI2Mjp7bjoiPz8ifSwyNjM6e246Ij8/In0sMjY1OntuOiI/PyJ9LDI2Njp7bjoiPz8ifSwyNjc6e246Ij8/In0sMjY4OntuOiI/PyJ9LDI3MDp7bjoiPz8ifSwyNzE6e246Ij8/In0sMzg0OntuOiI/PyJ9''@;'; put 'put ''LDM4OTp7bjoiPz8ifSwzOTA6e246Ij8/In0sMzkzOntuOiI/PyJ9LDM5Njp7bjoiPz8ifSw1MTI6e246Ij8/In0sNTE0OntuOiI/PyJ9LDUxMzp7bjoiPz8ifSw1MTY6e246Ij8/In0sNTE3OntuOiI/PyJ9LDY0MDp7bjoiPz8ifSw2NDE6e246Ij8/In0sNjQyOntuOiI/PyJ9LDY0Mzp7bjoi''@;'; put 'put ''Pz8ifSw2NDQ6e246Ij8/In0sNjQ1OntuOiI/PyJ9LDY0Njp7bjoiPz8ifSw2NDc6e246Ij8/In0sNjQ4OntuOiI/PyJ9LDY1ODp7bjoiPz8ifSw2NTk6e246Ij8/In0sNjYwOntuOiI/PyJ9LDY2MTp7bjoiPz8ifSw2NjI6e246Ij8/In0sNjY1OntuOiI/PyJ9LDY2Njp7bjoiPz8ifSw3Njg6''@;'; put 'put ''e246Ij8/In0sNzcyOntuOiI/PyJ9LDE2MDA6e246Ij8/In0sMTYwMjp7bjoiPz8ifSwxNzkzOntuOiI/PyJ9LDE3OTQ6e246Ij8/In0sMTc5NTp7bjoiPz8ifSwxNzk2OntuOiI/PyJ9LDE5MjA6e246Ij8/In0sMjA0ODp7bjoiPz8ifSwyMDQ5OntuOiI/PyJ9LDIwNTI6e246Ij8/In0sMjY4''@;'; put 'put ''ODp7bjoiPz8ifSwxMDk5ODp7bjoiPz8ifSwxMjg0OTp7bjoiPz8ifSwyODIzMzp7bjoiPz8ifSwyODQ4NDp7bjoiPz8ifSw2NTUzNTp7bjoiIn19O3JldHVybntzaGVldF90b193azE6ZnVuY3Rpb24gUShUbix2cil7dmFyIHJyPXZyfHx7fTtpZigrcnIuY29kZXBhZ2U+PTAmJmooK3JyLmNv''@;'; put 'put ''ZGVwYWdlKSwic3RyaW5nIj09cnIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzEgdG8gSlMgc3RyaW5nIik7dmFyIFNuPXljKCkscHI9T2koVG5bIiFyZWYiXSksQ2k9QXJyYXkuaXNBcnJheShUbiksQnI9W107U2koU24sMCxmdW5jdGlvbiBwZShUbil7dmFyIHZyPWZy''@;'; put 'put ''KDIpO3JldHVybiB2ci53cml0ZV9zaGlmdCgyLFRuKSx2cn0oMTAzMCkpLFNpKFNuLDYsZnVuY3Rpb24gU2UoVG4pe3ZhciB2cj1mcig4KTtyZXR1cm4gdnIud3JpdGVfc2hpZnQoMixUbi5zLmMpLHZyLndyaXRlX3NoaWZ0KDIsVG4ucy5yKSx2ci53cml0ZV9zaGlmdCgyLFRuLmUuYyksdnIu''@;'; put 'put ''d3JpdGVfc2hpZnQoMixUbi5lLnIpLHZyfShwcikpO2Zvcih2YXIgamk9cHIucy5yO2ppPD1wci5lLnI7KytqaSlmb3IodmFyIF9vPUhzKGppKSxEaT1wci5zLmM7RGk8PXByLmUuYzsrK0RpKXtqaT09PXByLnMuciYmKEJyW0RpXT1OcyhEaSkpO3ZhciBsbz1DaT8oVG5bamldfHxbXSlbRGld''@;'; put 'put ''OlRuW0JyW0RpXStfb107bG8mJiJ6IiE9bG8udCYmKCJuIj09bG8udD8oMHxsby52KT09bG8udiYmbG8udj49LTMyNzY4JiZsby52PD0zMjc2Nz9TaShTbiwxMyxkdChqaSxEaSxsby52KSk6U2koU24sMTQsY3QoamksRGksbG8udikpOlNpKFNuLDE1LEdlKGppLERpLGN1KGxvKS5zbGljZSgw''@;'; put 'put ''LDIzOSkpKSl9cmV0dXJuIFNpKFNuLDEpLFNuLmVuZCgpfSxib29rX3RvX3drMzpmdW5jdGlvbiByZShUbix2cil7dmFyIHJyPXZyfHx7fTtpZigrcnIuY29kZXBhZ2U+PTAmJmooK3JyLmNvZGVwYWdlKSwic3RyaW5nIj09cnIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBX''@;'; put 'put ''SzMgdG8gSlMgc3RyaW5nIik7dmFyIFNuPXljKCk7U2koU24sMCxmdW5jdGlvbiBfZShUbil7dmFyIHZyPWZyKDI2KTt2ci53cml0ZV9zaGlmdCgyLDQwOTYpLHZyLndyaXRlX3NoaWZ0KDIsNCksdnIud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIHJyPTAsU249MCxwcj0wLENpPTA7Q2k8VG4u''@;'; put 'put ''U2hlZXROYW1lcy5sZW5ndGg7KytDaSl7dmFyIGppPVRuLlNoZWV0c1tUbi5TaGVldE5hbWVzW0NpXV07aWYoamkmJmppWyIhcmVmIl0peysrcHI7dmFyIF9vPVdzKGppWyIhcmVmIl0pO3JyPF9vLmUuciYmKHJyPV9vLmUuciksU248X28uZS5jJiYoU249X28uZS5jKX19cmV0dXJuIHZyLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIscnIpLHZyLndyaXRlX3NoaWZ0KDEscHIpLHZyLndyaXRlX3NoaWZ0KDEsU24pLHZyLndyaXRlX3NoaWZ0KDIsMCksdnIud3JpdGVfc2hpZnQoMiwwKSx2ci53cml0ZV9zaGlmdCgxLDEpLHZyLndyaXRlX3NoaWZ0KDEsMiksdnIud3JpdGVfc2hpZnQoNCwwKSx2ci53cml0''@;'; put 'put ''ZV9zaGlmdCg0LDApLHZyfShUbikpO2Zvcih2YXIgcHI9MCxDaT0wO3ByPFRuLlNoZWV0TmFtZXMubGVuZ3RoOysrcHIpKFRuLlNoZWV0c1tUbi5TaGVldE5hbWVzW3ByXV18fHt9KVsiIXJlZiJdJiZTaShTbiwyNyxMaShUbi5TaGVldE5hbWVzW3ByXSxDaSsrKSk7dmFyIEJyPTA7Zm9yKHBy''@;'; put 'put ''PTA7cHI8VG4uU2hlZXROYW1lcy5sZW5ndGg7Kytwcil7dmFyIGppPVRuLlNoZWV0c1tUbi5TaGVldE5hbWVzW3ByXV07aWYoamkmJmppWyIhcmVmIl0pe2Zvcih2YXIgX289T2koamlbIiFyZWYiXSksRGk9QXJyYXkuaXNBcnJheShqaSksWW89W10sbG89X28ucy5yO2xvPD1fby5lLnI7Kyts''@;'; put 'put ''bylmb3IodmFyIEFvPUhzKGxvKSx4bz1fby5zLmM7eG88PV9vLmUuYzsrK3hvKXtsbz09PV9vLnMuciYmKFlvW3hvXT1Ocyh4bykpO3ZhciB0YT1EaT8oamlbbG9dfHxbXSlbeG9dOmppW1lvW3hvXStBb107dGEmJiJ6IiE9dGEudCYmKCJuIj09dGEudD9TaShTbiwyMyxlcihsbyx4byxCcix0''@;'; put 'put ''YS52KSk6U2koU24sMjIscW4obG8seG8sQnIsY3UodGEpLnNsaWNlKDAsMjM5KSkpKX0rK0JyfX1yZXR1cm4gU2koU24sMSksU24uZW5kKCl9LHRvX3dvcmtib29rOmZ1bmN0aW9uIFAoVG4sdnIpe3N3aXRjaCh2ci50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIEwoRChzZS5kZWNvZGUoVG4p''@;'; put 'put ''KSx2cik7Y2FzZSJiaW5hcnkiOnJldHVybiBMKEQoVG4pLHZyKTtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cmV0dXJuIEwoVG4sdnIpfXRocm93IlVuc3VwcG9ydGVkIHR5cGUgIit2ci50eXBlfX19KCksRG09ZnVuY3Rpb24oKXt2YXIgeT11bCgidCIpLFA9dWwoInJQciIpO2Z1bmN0aW9u''@;'; put 'put ''IEwocGUpe3ZhciBfZT1wZS5tYXRjaCh5KTtpZighX2UpcmV0dXJue3Q6InMiLHY6IiJ9O3ZhciB2ZT17dDoicyIsdjp4cihfZVsxXSl9LFNlPXBlLm1hdGNoKFApO3JldHVybiBTZSYmKHZlLnM9ZnVuY3Rpb24gWHcoeSl7dmFyIFA9e30sTD15Lm1hdGNoKCR0KSxRPTAscmU9ITE7aWYoTClm''@;'; put 'put ''b3IoO1EhPUwubGVuZ3RoOysrUSl7dmFyIHBlPWxuKExbUV0pO3N3aXRjaChwZVswXS5yZXBsYWNlKC9cdyo6L2csIiIpKXtjYXNlIjxjb25kZW5zZSI6Y2FzZSI8ZXh0ZW5kIjpicmVhaztjYXNlIjxzaGFkb3ciOmlmKCFwZS52YWwpYnJlYWs7Y2FzZSI8c2hhZG93PiI6Y2FzZSI8c2hhZG93''@;'; put 'put ''Lz4iOlAuc2hhZG93PTE7YnJlYWs7Y2FzZSI8L3NoYWRvdz4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09cGUudmFsKWJyZWFrO1AuY3A9SVtwYXJzZUludChwZS52YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZighcGUudmFsKWJyZWFrO2Nhc2UiPG91dGxpbmU+IjpjYXNl''@;'; put 'put ''IjxvdXRsaW5lLz4iOlAub3V0bGluZT0xO2JyZWFrO2Nhc2UiPC9vdXRsaW5lPiI6YnJlYWs7Y2FzZSI8ckZvbnQiOlAubmFtZT1wZS52YWw7YnJlYWs7Y2FzZSI8c3oiOlAuc3o9cGUudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIXBlLnZhbClicmVhaztjYXNlIjxzdHJpa2U+IjpjYXNl''@;'; put 'put ''IjxzdHJpa2UvPiI6UC5zdHJpa2U9MTticmVhaztjYXNlIjwvc3RyaWtlPiI6YnJlYWs7Y2FzZSI8dSI6aWYoIXBlLnZhbClicmVhaztzd2l0Y2gocGUudmFsKXtjYXNlImRvdWJsZSI6UC51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOlAudW5kZXJsaW5lPTMzO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6UC51bmRlcmxpbmU9MzR9Y2FzZSI8dT4iOmNhc2UiPHUvPiI6UC51bmRlcmxpbmV8fChQLnVuZGVybGluZT0xKTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09cGUudmFsKWJyZWFrO2Nhc2UiPGI+IjpjYXNlIjxiLz4i''@;'; put 'put ''OlAuYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6aWYoIjAiPT1wZS52YWwpYnJlYWs7Y2FzZSI8aT4iOmNhc2UiPGkvPiI6UC5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpwZS5yZ2ImJihQLmNvbG9yPXtyZ2I6OD09cGUucmdiLmxl''@;'; put 'put ''bmd0aD9wZS5yZ2Iuc2xpY2UoMiw4KTooIjAwMDAwMCIrcGUucmdiKS5zbGljZSgtNil9KTticmVhaztjYXNlIjxmYW1pbHkiOlAuZmFtaWx5PXBlLnZhbDticmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHBlLnZhbHx8Im5vbmUiKSYmKFAudmFsaWduPXBlLnZhbC5yZXBsYWNlKCJz''@;'; put 'put ''Y3JpcHQiLCIiKSk7YnJlYWs7Y2FzZSI8c2NoZW1lIjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOnJlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpyZT0hMTticmVhaztkZWZhdWx0OmlmKDQ3IT09cGVbMF0uY2hhckNvZGVBdCgx''@;'; put 'put ''KSYmIXJlKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICIrcGVbMF0pfX1yZXR1cm4gUH0oU2VbMV0pKSx2ZX12YXIgUT0vPCg/Olx3KzopP3I+L2cscmU9LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24oX2Upe3JldHVybiBfZS5yZXBsYWNlKFEsIiIp''@;'; put 'put ''LnNwbGl0KHJlKS5tYXAoTCkuZmlsdGVyKGZ1bmN0aW9uKHZlKXtyZXR1cm4gdmUudn0pfX0oKSxqMT17MToic2luZ2xlIiwyOiJkb3VibGUiLDMzOiJzaW5nbGUtYWNjb3VudGluZyIsMzQ6ImRvdWJsZS1hY2NvdW50aW5nIn0sRTk9ZnVuY3Rpb24oKXt2YXIgUD0vKFxyXG58XG4pL2c7ZnVu''@;'; put 'put ''Y3Rpb24gUShyZSl7dmFyIHBlPVtbXSxyZS52LFtdXTtyZXR1cm4gcmUudj8ocmUucyYmZnVuY3Rpb24gTChyZSxwZSxfZSl7dmFyIHZlPVtdO3JlLnVuZGVybGluZSYmdmUucHVzaCgidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IikscmUudW5kZXJsaW5lPjEmJnZlLnB1c2goInRleHQt''@;'; put 'put ''dW5kZXJsaW5lLXN0eWxlOiIrajFbcmUudW5kZXJsaW5lXSsiOyIpLHJlLnN6JiZ2ZS5wdXNoKCJmb250LXNpemU6IityZS5zeisicHQ7IikscmUub3V0bGluZSYmdmUucHVzaCgidGV4dC1lZmZlY3Q6IG91dGxpbmU7IikscmUuc2hhZG93JiZ2ZS5wdXNoKCJ0ZXh0LXNoYWRvdzogYXV0bzsi''@;'; put 'put ''KSxyZS5jb2xvciYmcmUuY29sb3IucmdiJiZ2ZS5wdXNoKCJjb2xvcjogIyIrT3UocmUuY29sb3IucmdiKSsiOyIpLHBlLnB1c2goJzxzcGFuIHN0eWxlPSInK3ZlLmpvaW4oIiIpKyciPicpLHJlLmJvbGQmJihwZS5wdXNoKCI8Yj4iKSxfZS5wdXNoKCI8L2I+IikpLHJlLml0YWxpYyYmKHBl''@;'; put 'put ''LnB1c2goIjxpPiIpLF9lLnB1c2goIjwvaT4iKSkscmUuc3RyaWtlJiYocGUucHVzaCgiPHM+IiksX2UucHVzaCgiPC9zPiIpKTt2YXIgU2U9cmUudmFsaWdufHwiIjsic3VwZXJzY3JpcHQiPT1TZXx8InN1cGVyIj09U2U/U2U9InN1cCI6InN1YnNjcmlwdCI9PVNlJiYoU2U9InN1YiIpLCIi''@;'; put 'put ''IT1TZSYmKHBlLnB1c2goIjwiK1NlKyI+IiksX2UucHVzaCgiPC8iK1NlKyI+IikpLF9lLnB1c2goIjwvc3Bhbj4iKX0ocmUucyxwZVswXSxwZVsyXSkscGVbMF0uam9pbigiIikrcGVbMV0ucmVwbGFjZShQLCI8YnIvPiIpK3BlWzJdLmpvaW4oIiIpKToiIn1yZXR1cm4gZnVuY3Rpb24ocGUp''@;'; put 'put ''e3JldHVybiBwZS5tYXAoUSkuam9pbigiIil9fSgpO2Z1bmN0aW9uIEpoKHkpe3JldHVybiB5Lm1hcChmdW5jdGlvbihMKXtyZXR1cm4gZnVuY3Rpb24gSW0oeSl7dmFyIFA9IiIsTD1bXTtyZXR1cm4geS5zJiYoeS5zLmJvbGQmJkwucHVzaCgiPGIvPiIpLHkucy5pdGFsaWMmJkwucHVzaCgi''@;'; put 'put ''PGkvPiIpLHkucy5zdHJpa2UmJkwucHVzaCgiPHN0cmlrZS8+IikseS5zLnVuZGVybGluZSYmTC5wdXNoKCc8dSB2YWw9IicrKGptW3kucy51bmRlcmxpbmVdfHwic2luZ2xlIikrJyIvPicpLHkucy5jb2xvciYmTC5wdXNoKFVkKHkucy5jb2xvcikpLHkucy5zeiYmTC5wdXNoKCc8c3ogdmFs''@;'; put 'put ''PSInK3kucy5zeisnIi8+JykseS5zLm5hbWUmJkwucHVzaCgnPHJGb250IHZhbD0iJyt5LnMubmFtZSsnIi8+JyksKCJzdXBlciI9PXkucy52YWxpZ258fCJzdWIiPT15LnMudmFsaWduKSYmTC5wdXNoKCc8dmVydEFsaWduIHZhbD0iJyt5LnMudmFsaWduKydzY3JpcHQiLz4nKSksTC5sZW5n''@;'; put 'put ''dGgmJihQKz0iPHJQcj4iK0wuam9pbigiIikrIjwvclByPiIpLCI8cj4iKyhQKz1TcigidCIsRnIoeS52KSxudWxsKSkrIjwvcj4ifShMKX0pLmpvaW4oIiIpfXZhciBKdz0vPCg/Olx3KzopP3RbXj5dKj4oW148XSopPFwvKD86XHcrOik/dD4vZyxrOT0vPCg/Olx3KzopP3JcYltePl0qPi8s''@;'; put 'put ''QTk9LzwoPzpcdys6KT9yUGguKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3JQaD4vZztmdW5jdGlvbiBUOSh5LFApe3ZhciBMPSFQfHxQLmNlbGxIVE1MLFE9e307cmV0dXJuIHk/KHkubWF0Y2goL15ccyo8KD86XHcrOik/dFtePl0qPi8pPyhRLnQ9eHIoUGkoeS5zbGljZSh5LmluZGV4T2Yo''@;'; put 'put ''Ij4iKSsxKS5zcGxpdCgvPFwvKD86XHcrOik/dD4vKVswXXx8IiIpKSxRLnI9UGkoeSksTCYmKFEuaD1ybyhRLnQpKSk6eS5tYXRjaChrOSkmJihRLnI9UGkoeSksUS50PXhyKFBpKCh5LnJlcGxhY2UoQTksIiIpLm1hdGNoKEp3KXx8W10pLmpvaW4oIiIpLnJlcGxhY2UoJHQsIiIpKSksUS5S''@;'; put 'put ''PURtKFEuciksTCYmKFEuaD1FOShRLlIpKSksUSk6e3Q6IiJ9fXZhciBRdz0vPCg/Olx3KzopP3NzdChbXj5dKik+KFtcc1xTXSopPFwvKD86XHcrOik/c3N0Pi8sZUM9LzwoPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vZyx0Qz0vPFwvKD86XHcrOik/KD86c2l8c3N0SXRlbSk+LztIaS5TU1Q9''@;'; put 'put ''Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc2hhcmVkU3RyaW5ncyI7dmFyIGxEPS9eXHN8XHMkfFtcdFxuXHJdLztmdW5jdGlvbiBMbSh5LFApe2lmKCFQLmJvb2tTU1QpcmV0dXJuIiI7dmFyIEw9W0JuXTtMW0wu''@;'; put 'put ''bGVuZ3RoXT1Tcigic3N0IixudWxsLHt4bWxuczppcy5tYWluWzBdLGNvdW50OnkuQ291bnQsdW5pcXVlQ291bnQ6eS5VbmlxdWV9KTtmb3IodmFyIFE9MDtRIT15Lmxlbmd0aDsrK1EpaWYobnVsbCE9eVtRXSl7dmFyIHJlPXlbUV0scGU9IjxzaT4iO3JlLnI/cGUrPXJlLnI6KHBlKz0iPHQi''@;'; put 'put ''LHJlLnR8fChyZS50PSIiKSxyZS50Lm1hdGNoKGxEKSYmKHBlKz0nIHhtbDpzcGFjZT0icHJlc2VydmUiJykscGUrPSI+IitGcihyZS50KSsiPC90PiIpLExbTC5sZW5ndGhdPXBlKz0iPC9zaT4ifXJldHVybiBMLmxlbmd0aD4yJiYoTFtMLmxlbmd0aF09Ijwvc3N0PiIsTFsxXT1MWzFdLnJl''@;'; put 'put ''cGxhY2UoIi8+IiwiPiIpKSxMLmpvaW4oIiIpfXZhciBpQz1mdW5jdGlvbiBBMSh5LFAsTCl7dmFyIFE9MTMrNCp5LnQubGVuZ3RoLHJlPXkuUiYmeS5SLmxlbmd0aHx8eS5yO3kuciYmKHkuUj1EbSh5LnIpKSxyZSYmKFErPTQrNCp5LlIubGVuZ3RoKTt2YXIgcGU9ITE7aWYobnVsbD09TCYm''@;'; put 'put ''KHBlPSEwLEw9ZnIoUSkpLEwud3JpdGVfc2hpZnQoMSxyZT8xOjApLG5jKHkudCxMKSxyZSl7TC53cml0ZV9zaGlmdCg0LHkuUi5sZW5ndGgpO2Zvcih2YXIgX2U9MCx2ZT0wO3ZlPHkuUi5sZW5ndGg7Kyt2ZSl7dmFyIFNlPXkuUlt2ZV07TC53cml0ZV9zaGlmdCgyLF9lKSxfZSs9KFNlLnZ8''@;'; put 'put ''fCIiKS5sZW5ndGg7dmFyIEhlPVNlLnM/Z3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpTZS5zfSxQKTowO0wud3JpdGVfc2hpZnQoMixQLmNlbGxYZnNbSGVdLmZvbnRJZCl9fXJldHVybiBwZT9MLnNsaWNlKDAsTC5sKTpMfTtmdW5jdGlvbiB4Myh5LFApe3ZhciBM''@;'; put 'put ''PXljKCk7Y2koTCwiQnJ0QmVnaW5Tc3QiLGZ1bmN0aW9uIHJDKHksUCl7cmV0dXJuIFB8fChQPWZyKDgpKSxQLndyaXRlX3NoaWZ0KDQseS5Db3VudCksUC53cml0ZV9zaGlmdCg0LHkuVW5pcXVlKSxQfSh5KSk7Zm9yKHZhciBRPTA7UTx5Lmxlbmd0aDsrK1EpY2koTCwiQnJ0U1NUSXRlbSIs''@;'; put 'put ''aUMoeVtRXSxQKSk7cmV0dXJuIGNpKEwsIkJydEVuZFNzdCIpLEwuZW5kKCl9ZnVuY3Rpb24geGEoeSl7aWYodHlwZW9mIGNwdGFibGU8InUiKXJldHVybiBjcHRhYmxlLnV0aWxzLmVuY29kZShSLHkpO2Zvcih2YXIgUD1bXSxMPXkuc3BsaXQoIiIpLFE9MDtRPEwubGVuZ3RoOysrUSlQW1Fd''@;'; put 'put ''PUxbUV0uY2hhckNvZGVBdCgwKTtyZXR1cm4gUH1mdW5jdGlvbiBHMCh5LFApe3ZhciBMPXt9O3JldHVybiBMLk1ham9yPXkucmVhZF9zaGlmdCgyKSxMLk1pbm9yPXkucmVhZF9zaGlmdCgyKSxQPj00JiYoeS5sKz1QLTQpLEx9ZnVuY3Rpb24gb0MoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlm''@;'; put 'put ''dCg0KSxMPXkubCtQLTQsUT17fSxyZT15LnJlYWRfc2hpZnQoNCkscGU9W107cmUtLSA+MDspcGUucHVzaCh7dDp5LnJlYWRfc2hpZnQoNCksdjp5LnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoUS5uYW1lPXkucmVhZF9zaGlmdCgwLCJscHA0IiksUS5jb21wcz1wZSx5LmwhPUwpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJCYWQgRGF0YVNwYWNlTWFwRW50cnk6ICIreS5sKyIgIT0gIitMKTtyZXR1cm4gUX1mdW5jdGlvbiBEOSh5LFApe3ZhciBMPXkubCtQLFE9e307US5GbGFncz02MyZ5LnJlYWRfc2hpZnQoNCkseS5sKz00LFEuQWxnSUQ9eS5yZWFkX3NoaWZ0KDQpO3ZhciByZT0hMTtzd2l0''@;'; put 'put ''Y2goUS5BbGdJRCl7Y2FzZSAyNjEyNjpjYXNlIDI2MTI3OmNhc2UgMjYxMjg6cmU9MzY9PVEuRmxhZ3M7YnJlYWs7Y2FzZSAyNjYyNTpyZT00PT0oNTImUS5GbGFncyk7YnJlYWs7Y2FzZSAwOnJlPTE2PT1RLkZsYWdzfHw0PT1RLkZsYWdzfHwzNj09US5GbGFnczticmVhaztkZWZhdWx0OnRo''@;'; put 'put ''cm93IlVucmVjb2duaXplZCBlbmNyeXB0aW9uIGFsZ29yaXRobTogIitRLkFsZ0lEfWlmKCFyZSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gRmxhZ3MvQWxnSUQgbWlzbWF0Y2giKTtyZXR1cm4gUS5BbGdJREhhc2g9eS5yZWFkX3NoaWZ0KDQpLFEuS2V5U2l6ZT15LnJlYWRfc2hpZnQo''@;'; put 'put ''NCksUS5Qcm92aWRlclR5cGU9eS5yZWFkX3NoaWZ0KDQpLHkubCs9OCxRLkNTUE5hbWU9eS5yZWFkX3NoaWZ0KEwteS5sPj4xLCJ1dGYxNmxlIikseS5sPUwsUX1mdW5jdGlvbiBSbSh5LFApe3ZhciBMPXt9LFE9eS5sK1A7cmV0dXJuIHkubCs9NCxMLlNhbHQ9eS5zbGljZSh5LmwseS5sKzE2''@;'; put 'put ''KSx5LmwrPTE2LEwuVmVyaWZpZXI9eS5zbGljZSh5LmwseS5sKzE2KSx5LmwrPTE2LHkucmVhZF9zaGlmdCg0KSxMLlZlcmlmaWVySGFzaD15LnNsaWNlKHkubCxRKSx5Lmw9USxMfWZ1bmN0aW9uIGdaKHkpe2lmKDM2IT0oNjMmeS5yZWFkX3NoaWZ0KDQpKSl0aHJvdyBuZXcgRXJyb3IoIkVu''@;'; put 'put ''Y3J5cHRpb25JbmZvIG1pc21hdGNoIik7dmFyIEw9eS5yZWFkX3NoaWZ0KDQpO3JldHVybnt0OiJTdGQiLGg6RDkoeSxMKSx2OlJtKHkseS5sZW5ndGgteS5sKX19ZnVuY3Rpb24gaEQoKXt0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkOiBFQ01BLTM3NiBFeHRl''@;'; put 'put ''bnNpYmxlIil9ZnVuY3Rpb24gbVooeSl7dmFyIFA9WyJzYWx0U2l6ZSIsImJsb2NrU2l6ZSIsImtleUJpdHMiLCJoYXNoU2l6ZSIsImNpcGhlckFsZ29yaXRobSIsImNpcGhlckNoYWluaW5nIiwiaGFzaEFsZ29yaXRobSIsInNhbHRWYWx1ZSJdO3kubCs9NDt2YXIgTD15LnJlYWRfc2hpZnQo''@;'; put 'put ''eS5sZW5ndGgteS5sLCJ1dGY4IiksUT17fTtyZXR1cm4gTC5yZXBsYWNlKCR0LGZ1bmN0aW9uKHBlKXt2YXIgX2U9bG4ocGUpO3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+Ijpj''@;'; put 'put ''YXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6UC5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtRW3ZlXT1fZVt2ZV19KTticmVhaztjYXNlIjxkYXRhSW50ZWdyaXR5IjpRLmVuY3J5cHRlZEhtYWNLZXk9X2UuZW5jcnlwdGVkSG1hY0tleSxRLmVuY3J5cHRlZEhtYWNWYWx1''@;'; put 'put ''ZT1fZS5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOlEuZW5jcz1bXTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOlEudXJpPV9lLnVyaTticmVhaztjYXNlIjxlbmNyeXB0ZWRLZXkiOlEuZW5jcy5wdXNoKF9lKTti''@;'; put 'put ''cmVhaztkZWZhdWx0OnRocm93IF9lWzBdfX0pLFF9ZnVuY3Rpb24gc0MoeSl7dmFyIEwscGUsUD0wLFE9eGEoeSkscmU9US5sZW5ndGgrMTtmb3IoKEw9RyhyZSkpWzBdPVEubGVuZ3RoLHBlPTE7cGUhPXJlOysrcGUpTFtwZV09UVtwZS0xXTtmb3IocGU9cmUtMTtwZT49MDstLXBlKVA9KCgx''@;'; put 'put ''NjM4NCZQPzE6MCl8UDw8MSYzMjc2NyleTFtwZV07cmV0dXJuIDUyODExXlB9dmFyIGZEPWZ1bmN0aW9uKCl7dmFyIHk9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwxMjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sUD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIs''@;'; put 'put ''MTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10sTD1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUsNjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2''@;'; put 'put ''MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcwLDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0''@;'; put 'put ''LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYs''@;'; put 'put ''MzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIwLDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0scmU9ZnVu''@;'; put 'put ''Y3Rpb24oX2UsdmUpe3JldHVybiBmdW5jdGlvbihfZSl7cmV0dXJuIDI1NSYoX2U+PjF8X2U8PDcpfShfZV52ZSl9O3JldHVybiBmdW5jdGlvbih2ZSl7Zm9yKHZhciBTZT14YSh2ZSksSGU9ZnVuY3Rpb24oX2Upe2Zvcih2YXIgdmU9UFtfZS5sZW5ndGgtMV0sU2U9MTA0LEhlPV9lLmxlbmd0''@;'; put 'put ''aC0xO0hlPj0wOy0tSGUpZm9yKHZhciBWZT1fZVtIZV0sR2U9MDs3IT1HZTsrK0dlKTY0JlZlJiYodmVePUxbU2VdKSxWZSo9MiwtLVNlO3JldHVybiB2ZX0oU2UpLFZlPVNlLmxlbmd0aCxHZT1HKDE2KSxudD0wOzE2IT1udDsrK250KUdlW250XT0wO3ZhciBjdDtmb3IoMT09KDEmVmUpJiYo''@;'; put 'put ''R2VbVmVdPXJlKHlbMF0sSGU+PjgpLEdlWy0tVmVdPXJlKFNlW1NlLmxlbmd0aC0xXSwyNTUmSGUpKTtWZT4wOylHZVstLVZlXT1yZShTZVtWZV0sSGU+PjgpLEdlWy0tVmVdPXJlKFNlW1ZlXSwyNTUmSGUpO2ZvcihWZT0xNSxjdD0xNS1TZS5sZW5ndGg7Y3Q+MDspR2VbVmVdPXJlKHlbY3Rd''@;'; put 'put ''LEhlPj44KSwtLWN0LEdlWy0tVmVdPXJlKFNlW1ZlXSwyNTUmSGUpLC0tVmUsLS1jdDtyZXR1cm4gR2V9fSgpO3ZhciBPbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHkocmUscGUpe3N3aXRjaChwZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIFAoc2UuZGVjb2RlKHJlKSxwZSk7Y2FzZSJiaW5h''@;'; put 'put ''cnkiOnJldHVybiBQKHJlLHBlKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFAocmUudG9TdHJpbmcoImJpbmFyeSIpLHBlKTtjYXNlImFycmF5IjpyZXR1cm4gUChQdChyZSkscGUpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitwZS50eXBlKX1mdW5jdGlvbiBQKHJlLHBlKXt2''@;'; put 'put ''YXIgdmU9KHBlfHx7fSkuZGVuc2U/W106e307aWYoIXJlLm1hdGNoKC9cXHRyb3dkLykpdGhyb3cgbmV3IEVycm9yKCJSVEYgbWlzc2luZyB0YWJsZSIpO3JldHVybiB2ZVsiIXJlZiJdPU9vKHtzOntjOjAscjowfSxlOntjOjAscjowfX0pLHZlfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlv''@;'; put 'put ''biBMKHJlLHBlKXtyZXR1cm4gRWQoeShyZSxwZSkscGUpfSx0b19zaGVldDp5LGZyb21fc2hlZXQ6ZnVuY3Rpb24gUShyZSl7Zm9yKHZhciB2ZSxwZT1bIntcXHJ0ZjFcXGFuc2kiXSxfZT1PaShyZVsiIXJlZiJdKSxTZT1BcnJheS5pc0FycmF5KHJlKSxIZT1fZS5zLnI7SGU8PV9lLmUucjsr''@;'; put 'put ''K0hlKXtwZS5wdXNoKCJcXHRyb3dkXFx0cmF1dG9maXQxIik7Zm9yKHZhciBWZT1fZS5zLmM7VmU8PV9lLmUuYzsrK1ZlKXBlLnB1c2goIlxcY2VsbHgiKyhWZSsxKSk7Zm9yKHBlLnB1c2goIlxccGFyZFxcaW50YmwiKSxWZT1fZS5zLmM7VmU8PV9lLmUuYzsrK1ZlKXt2YXIgR2U9ZGkoe3I6''@;'; put 'put ''SGUsYzpWZX0pOyh2ZT1TZT8ocmVbSGVdfHxbXSlbVmVdOnJlW0dlXSkmJihudWxsIT12ZS52fHx2ZS5mJiYhdmUuRikmJihwZS5wdXNoKCIgIisodmUud3x8KGN1KHZlKSx2ZS53KSkpLHBlLnB1c2goIlxcY2VsbCIpKX1wZS5wdXNoKCJcXHBhcmRcXGludGJsXFxyb3ciKX1yZXR1cm4gcGUu''@;'; put 'put ''am9pbigiIikrIn0ifX19KCk7ZnVuY3Rpb24gZWYoeSl7dmFyIFA9eS5zbGljZSgiIyI9PT15WzBdPzE6MCkuc2xpY2UoMCw2KTtyZXR1cm5bcGFyc2VJbnQoUC5zbGljZSgwLDIpLDE2KSxwYXJzZUludChQLnNsaWNlKDIsNCksMTYpLHBhcnNlSW50KFAuc2xpY2UoNCw2KSwxNildfWZ1bmN0''@;'; put 'put ''aW9uIHoxKHkpe2Zvcih2YXIgUD0wLEw9MTszIT1QOysrUClMPTI1NipMKyh5W1BdPjI1NT8yNTU6eVtQXTwwPzA6eVtQXSk7cmV0dXJuIEwudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gJDAoeSxQKXtpZihudWxsPT15KXJldHVybiBudWxsIT1QO2lmKG51''@;'; put 'put ''bGw9PVApcmV0dXJuITA7aWYoMT09eS5hdXRvJiYxPT1QLmF1dG8pcmV0dXJuITE7aWYoISF5LmF1dG8hPSEhUC5hdXRvfHxudWxsPT15LnRoZW1lIT0obnVsbD09UC50aGVtZSkpcmV0dXJuITA7aWYobnVsbCE9eS50aGVtZSlyZXR1cm4geS50aGVtZSE9UC50aGVtZXx8eS50aW50IT1QLnRp''@;'; put 'put ''bnQ7aWYobnVsbD09eS5yZ2ImJm51bGw9PVAucmdiKXJldHVybiExO3ZhciBMPXkucmdiOyJudW1iZXIiPT10eXBlb2YgTCYmKEw9TC50b1N0cmluZygxNikpLEw9TC5zbGljZSgtNik7dmFyIFE9UC5yZ2I7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBRJiYoUT1RLnRvU3RyaW5nKDE2KSksUT1R''@;'; put 'put ''LnNsaWNlKC02KSxMLnRvTG93ZXJDYXNlKCkhPVEudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBQbSh5LFApe3JldHVybiBudWxsPT15P251bGwhPVA6bnVsbD09UD9udWxsIT15Onkuc3R5bGUhPVAuc3R5bGV8fCQwKHkuY29sb3IsUC5jb2xvcil9ZnVuY3Rpb24gQmQoeSxQKXtpZigwPT09UCly''@;'; put 'put ''ZXR1cm4geTt2YXIgTD1mdW5jdGlvbiBwMCh5KXt2YXIgUD15WzBdLzI1NSxMPXlbMV0vMjU1LFE9eVsyXS8yNTUscmU9TWF0aC5tYXgoUCxMLFEpLHBlPU1hdGgubWluKFAsTCxRKSxfZT1yZS1wZTtpZigwPT09X2UpcmV0dXJuWzAsMCxQXTt2YXIgU2UsdmU9MCxIZT1yZStwZTtzd2l0Y2go''@;'; put 'put ''U2U9X2UvKEhlPjE/Mi1IZTpIZSkscmUpe2Nhc2UgUDp2ZT0oKEwtUSkvX2UrNiklNjticmVhaztjYXNlIEw6dmU9KFEtUCkvX2UrMjticmVhaztjYXNlIFE6dmU9KFAtTCkvX2UrNH1yZXR1cm5bdmUvNixTZSxIZS8yXX0oZWYoeSkpO3JldHVybiBMWzJdPVA8MD9MWzJdKigxK1ApOjEtKDEt''@;'; put 'put ''TFsyXSkqKDEtUCksejEoZnVuY3Rpb24gRjQoeSl7dmFyIFNlLEw9eVsxXSxRPXlbMl0scmU9MipMKihRPC41P1E6MS1RKSxwZT1RLXJlLzIsX2U9W3BlLHBlLHBlXSx2ZT02KnlbMF07aWYoMCE9PUwpc3dpdGNoKDB8dmUpe2Nhc2UgMDpjYXNlIDY6U2U9cmUqdmUsX2VbMF0rPXJlLF9lWzFd''@;'; put 'put ''Kz1TZTticmVhaztjYXNlIDE6X2VbMF0rPVNlPXJlKigyLXZlKSxfZVsxXSs9cmU7YnJlYWs7Y2FzZSAyOlNlPXJlKih2ZS0yKSxfZVsxXSs9cmUsX2VbMl0rPVNlO2JyZWFrO2Nhc2UgMzpfZVsxXSs9U2U9cmUqKDQtdmUpLF9lWzJdKz1yZTticmVhaztjYXNlIDQ6U2U9cmUqKHZlLTQpLF9l''@;'; put 'put ''WzJdKz1yZSxfZVswXSs9U2U7YnJlYWs7Y2FzZSA1Ol9lWzJdKz1TZT1yZSooNi12ZSksX2VbMF0rPXJlfWZvcih2YXIgSGU9MDszIT1IZTsrK0hlKV9lW0hlXT1NYXRoLnJvdW5kKDI1NSpfZVtIZV0pO3JldHVybiBfZX0oTCkpfXZhciBhQz02LHBsPWFDO2Z1bmN0aW9uIE1jKHkpe3JldHVy''@;'; put 'put ''biBNYXRoLmZsb29yKCh5K01hdGgucm91bmQoMTI4L3BsKS8yNTYpKnBsKX1mdW5jdGlvbiB0Zih5KXtyZXR1cm4gTWF0aC5mbG9vcigoeS01KS9wbCoxMDArLjUpLzEwMH1mdW5jdGlvbiBqZCh5KXtyZXR1cm4gTWF0aC5yb3VuZCgoeSpwbCs1KS9wbCoyNTYpLzI1Nn1mdW5jdGlvbiBwdSh5''@;'; put 'put ''KXt5LmJlc3RGaXQmJmRlbGV0ZSB5LmJlc3RGaXQseS53aWR0aD8oeS53cHg9TWMoeS53aWR0aCkseS53Y2g9dGYoeS53cHgpLHkuTURXPXBsKTp5LndweD8oeS53Y2g9dGYoeS53cHgpLHkud2lkdGg9amQoeS53Y2gpLHkuTURXPXBsKToibnVtYmVyIj09dHlwZW9mIHkud2NoJiYoeS53aWR0''@;'; put 'put ''aD1qZCh5LndjaCkseS53cHg9TWMoeS53aWR0aCkseS5NRFc9cGwpLHkuY3VzdG9tV2lkdGgmJmRlbGV0ZSB5LmN1c3RvbVdpZHRofXZhciBJOT05NixuZj1JOTtmdW5jdGlvbiBqMih5KXtyZXR1cm4gNzIqeS9uZn1mdW5jdGlvbiBVMSh5KXtyZXR1cm4geSpuZi83Mn1mdW5jdGlvbiBGbSh5''@;'; put 'put ''KXtuZj15PXtvc3g6NzIsd2luOjk2LHdpbjEwMDo5Nix3aW4xMjU6MTIwLHdpbjE1MDoxNDR9W3ldfHx5fHxJOSxObT1nMFt5XX1mdW5jdGlvbiBJMyh5KXt5LmhweD95LmhwdD1qMih5LmhweCk6eS5ocHQmJih5LmhweD1VMSh5LmhwdCkpfXZhciBIND17Tm9uZToibm9uZSIsU29saWQ6InNv''@;'; put 'put ''bGlkIixHcmF5NTA6Im1lZGl1bUdyYXkiLEdyYXk3NToiZGFya0dyYXkiLEdyYXkyNToibGlnaHRHcmF5IixIb3J6U3RyaXBlOiJkYXJrSG9yaXpvbnRhbCIsVmVydFN0cmlwZToiZGFya1ZlcnRpY2FsIixSZXZlcnNlRGlhZ1N0cmlwZToiZGFya0Rvd24iLERpYWdTdHJpcGU6ImRhcmtVcCIs''@;'; put 'put ''RGlhZ0Nyb3NzOiJkYXJrR3JpZCIsVGhpY2tEaWFnQ3Jvc3M6ImRhcmtUcmVsbGlzIixUaGluSG9yelN0cmlwZToibGlnaHRIb3Jpem9udGFsIixUaGluVmVydFN0cmlwZToibGlnaHRWZXJ0aWNhbCIsVGhpblJldmVyc2VEaWFnU3RyaXBlOiJsaWdodERvd24iLFRoaW5Ib3J6Q3Jvc3M6Imxp''@;'; put 'put ''Z2h0R3JpZCJ9LF9EPWJlKEg0KSx6Mj17b3JhbmdlOjE2NzUzOTIwLGJsYWNrOjAsbmF2eToxMjgsYmx1ZToyNTUsZ3JlZW46MzI3NjgsdGVhbDozMjg5NixsaW1lOjY1MjgwLGFxdWE6NjU1MzUsc2lsdmVyOjEyNjMyMjU2LG1hcm9vbjo4Mzg4NjA4LHB1cnBsZTo4Mzg4NzM2LG9saXZlOjg0''@;'; put 'put ''MjEzNzYsZ3JheTo4NDIxNTA0LHJlZDoxNjcxMTY4MCxmdWNoc2lhOjE2NzExOTM1LHllbGxvdzoxNjc3Njk2MCx3aGl0ZToxNjc3NzIxNX07ZnVuY3Rpb24gTjQoeSxQKXtpZih5LnJlcGxhY2UoIiMiLCIiKS5tYXRjaCgvXlswLTlhLWZBLUZdezZ9JC8pKXJldHVybiBwYXJzZUludCh5LnJl''@;'; put 'put ''cGxhY2UoIiMiLCIiKSwxNik7aWYoejJbeV0pcmV0dXJuIHoyW3ldO3ZhciBMPXkubWF0Y2goL3JnYlwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccypcKS8pO2lmKEwpcmV0dXJuKCtMWzFdPDwxNikrKCtMWzJdPDw4KSsgK0xbM107aWYoTD15Lm1hdGNoKC9yZ2JhXChccyoo''@;'; put 'put ''XGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxzKihcZCopLykpcmV0dXJuIDAhPShMWzRdJiZMWzRdLmxlbmd0aD4wJiYrTFs0XXx8MCl8fCtMWzFdPjB8fCtMWzJdPjB8fCtMWzNdPjA/KCtMWzFdPDwxNikrKCtMWzJdPDw4KSsgK0xbM106UD8tMToxNjc3NzIxNTt0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVua25vd24gSFRNTCBjb2xvciAiK3kpfXZhciBnMD17fTtmdW5jdGlvbiBIbSh5KXt5PXl8fDk2O3ZhciBQPXtDYWxpYnJpOltdLEFyaWFsOltdLCJTcGFya2Fzc2UgUmciOltdLFx1NWI4Ylx1NGY1MzpbXSxcdTZlMzhcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWY6W10sIkNlbnR1cnkg''@;'; put 'put ''R290aGljIjpbXX07cmV0dXJuIFAuQ2FsaWJyaVsxMV09NyxQLkNhbGlicmlbMTJdPXs3Mjo2LDk2OjgsMTIwOjEwLDE0NDoxMn1beV18fDgsUC5DYWxpYnJpWzEzXT0xMCxQLkNhbGlicmlbMTRdPTExLFAuQ2FsaWJyaVsxNl09MTIsUC5DYWxpYnJpWzE4XT0xNCxQLkNhbGlicmlbMjBdPTE2''@;'; put 'put ''LFAuXHU1YjhiXHU0ZjUzWzExXT04LFAuXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmWzExXT04LFBbIlNwYXJrYXNzZSBSZyJdWzExXT03LFAuQXJpYWxbMTBdPTcsUFsiQ2VudHVyeSBHb3RoaWMiXVsxMl09OSxQfWcwWzcyXT1IbSg3MiksZzBbOTZdPUhtKDk2KSxnMFsxMjBdPUht''@;'; put 'put ''KDEyMCksZzBbMTQ0XT1IbSgxNDQpO3ZhciBObT1nMFs5Nl07ZnVuY3Rpb24gVm0oeSl7cmV0dXJuKE5tW3kubmFtZXx8eS5Gb250TmFtZV18fFtdKVt5LnN6fHx5LlNpemVdfWZ1bmN0aW9uIFoxKHkpe2lmKHkpe3ZhciBQPVZtKHkpO2lmKFApcmV0dXJuIHBsPVB9cmV0dXJuIHBsPTZ9ZnVu''@;'; put 'put ''Y3Rpb24gTDkoeSxQLEwpe3JldHVybiB6MShmdW5jdGlvbiBjQyh5LFAsTCl7cmV0dXJuW01hdGgucm91bmQoUFswXSpMK3lbMF0qKDEtTCkpLE1hdGgucm91bmQoUFsxXSpMK3lbMV0qKDEtTCkpLE1hdGgucm91bmQoUFsyXSpMK3lbMl0qKDEtTCkpXX0oZWYoIm51bWJlciI9PXR5cGVvZiB5''@;'; put 'put ''LnJnYj8oIjAwMDAwIit5LnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOnkucmdiKSxlZigibnVtYmVyIj09dHlwZW9mIFAucmdiPygiMDAwMDAiK1AudG9TdHJpbmcoMTYpKS5zbGljZSgtNik6UC5yZ2IpLEwpKX1mdW5jdGlvbiBCbSh5LFAsTCl7aWYoTClzd2l0Y2goK3kpe2Nhc2UgNjQ6eT02''@;'; put 'put ''NTticmVhaztjYXNlIDY1Onk9NjR9dmFyIFE9UCYmUFsreV18fENyWyt5XXx8TmFbK3ktMjAwXTtpZig4MT09K3kmJihRPUNyWzFdKSxRfHwoUT1DclsxXSksIVEpdGhyb3cgbmV3IEVycm9yKCJiYWQgSUNWIGluZGV4ICIreSk7cmV0dXJuIHoxKFEpfWZ1bmN0aW9uIFUyKHksUCxMKXt2YXIg''@;'; put 'put ''UT17fTtyZXR1cm4gbnVsbCE9eS5pbmRleGVkJiYoUS5pbmRleD1wYXJzZUludCh5LmluZGV4ZWQsMTApLFEucmdiPUJtKFEuaW5kZXgsUC5JbmRleGVkKSksbnVsbCE9eS50aGVtZSYmKFEudGhlbWU9cGFyc2VJbnQoeS50aGVtZSwxMCkpLG51bGwhPXkudGludCYmKFEudGludD1wYXJzZUZs''@;'; put 'put ''b2F0KHkudGludCkpLG51bGwhPXkucmdiJiYoUS5yZ2I9eS5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1RLnRoZW1lJiYhUS5yZ2ImJkwudGhlbWVFbGVtZW50cyYmKFEucmdiPUJkKEwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUS50aGVtZV0ucmdiLFEudGludHx8MCksUS5yYXdfcmdiPUwudGhl''@;'; put 'put ''bWVFbGVtZW50cy5jbHJTY2hlbWVbUS50aGVtZV0ucmdiKSxRfWZ1bmN0aW9uIEwzKHksUCxMLFEpe1AuQm9yZGVycz1bXTt2YXIgcmU9e30scGU9e30sX2U9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPWxuKHZlKTtzd2l0Y2goam4oU2VbMF0p''@;'; put 'put ''KXtjYXNlIjxib3JkZXJzIjpjYXNlIjxib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcnM+IjpjYXNlIjwvYm9yZGVyPiI6Y2FzZSI8bGVmdC8+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjwvdG9wPiI6Y2FzZSI8Ym90dG9tLz4i''@;'; put 'put ''OmNhc2UiPC9ib3R0b20+IjpjYXNlIjxkaWFnb25hbCI6Y2FzZSI8ZGlhZ29uYWw+IjpjYXNlIjxkaWFnb25hbC8+IjpjYXNlIjxob3Jpem9udGFsIjpjYXNlIjxob3Jpem9udGFsPiI6Y2FzZSI8aG9yaXpvbnRhbC8+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2''@;'; put 'put ''ZXJ0aWNhbC8+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNl''@;'; put 'put ''IjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6cmU9e30sU2UuZGlhZ29uYWxVcCYmKHJlLmRpYWdvbmFsVXA9eXIoU2UuZGlhZ29uYWxVcCkpLFNlLmRpYWdvbmFsRG93biYmKHJlLmRpYWdvbmFsRG93''@;'; put 'put ''bj15cihTZS5kaWFnb25hbERvd24pKSxQLkJvcmRlcnMucHVzaChyZSk7YnJlYWs7Y2FzZSI8bGVmdCI6Y2FzZSI8bGVmdD4iOnBlPXJlLmxlZnQ9e30sU2Uuc3R5bGUmJihwZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7Y2FzZSI8cmlnaHQiOmNhc2UiPHJpZ2h0PiI6cGU9cmUucmlnaHQ9e30s''@;'; put 'put ''U2Uuc3R5bGUmJihwZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7Y2FzZSI8dG9wIjpjYXNlIjx0b3A+IjpwZT1yZS50b3A9e30sU2Uuc3R5bGUmJihwZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpwZT1yZS5ib3R0b209e30sU2Uuc3R5bGUmJihw''@;'; put 'put ''ZS5zdHlsZT1TZS5zdHlsZSk7YnJlYWs7Y2FzZSI8L2RpYWdvbmFsPiI6cmUuZGlhZ29uYWw9cGUscGU9e307YnJlYWs7Y2FzZSI8L2hvcml6b250YWw+IjpyZS5ob3Jpem9udGFsPXBlLHBlPXt9O2JyZWFrO2Nhc2UiPC92ZXJ0aWNhbD4iOnJlLnZlcnRpY2FsPXBlLHBlPXt9O2JyZWFrO2Nh''@;'; put 'put ''c2UiPGNvbG9yIjpjYXNlIjxjb2xvcj4iOnBlLmNvbG9yfHwocGUuY29sb3I9e30pLFNlLmF1dG8mJihwZS5jb2xvci5hdXRvPXlyKFNlLmF1dG8pKSxudWxsIT1TZS5yZ2I/cGUuY29sb3IucmdiPVNlLnJnYi5zbGljZSgtNik6U2UuaW5kZXhlZD8ocGUuY29sb3IuaW5kZXg9cGFyc2VJbnQo''@;'; put 'put ''U2UuaW5kZXhlZCwxMCkscGUuY29sb3IucmdiPUJtKHBlLmNvbG9yLmluZGV4LFAuSW5kZXhlZCwhMSkpOlNlLnRoZW1lJiYocGUuY29sb3IudGhlbWU9cGFyc2VJbnQoU2UudGhlbWUsMTApLFNlLnRpbnQmJihwZS5jb2xvci50aW50PXBhcnNlRmxvYXQoU2UudGludCkpLFNlLnRoZW1lJiZM''@;'; put 'put ''LnRoZW1lRWxlbWVudHMmJkwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihwZS5jb2xvci5yZ2I9QmQoTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtwZS5jb2xvci50aGVtZV0ucmdiLHBlLmNvbG9yLnRpbnR8fDApKSksIVNlLmF1dG8mJm51bGw9PVNlLnJnYiYmIVNlLmluZGV4ZWQmJmRl''@;'; put 'put ''bGV0ZSBwZS5jb2xvcjticmVhaztjYXNlIjxleHQiOl9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpfZT0hMTticmVhaztkZWZhdWx0OmlmKFEmJlEuV1RGJiYhX2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitTZVswXSsiIGluIGJvcmRlcnMiKX19KX1mdW5jdGlvbiBSMyh5LFAp''@;'; put 'put ''e3ZhciBMPVsiPCIrUF07cmV0dXJuIHkmJnkuc3R5bGU/KEwucHVzaCgnIHN0eWxlPSInK3kuc3R5bGUrJyInKSx5LmNvbG9yPyhMLnB1c2goIj4iKSxMLnB1c2goVWQoeS5jb2xvciwhMCkpLEwuam9pbigiIikrIjwvIitQKyI+Iik6TC5qb2luKCIiKSsiLz4iKTpMWzBdKyIvPiJ9ZnVuY3Rp''@;'; put 'put ''b24gUjkoeSxQLEwsUSl7UC5GaWxscz1bXTt2YXIgcmU9e30scGU9e30sX2U9ITEsdmU9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihTZSl7dmFyIEhlPWxuKFNlKTtzd2l0Y2goam4oSGVbMF0pKXtjYXNlIjxmaWxscyI6Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmls''@;'; put 'put ''bHM+IjpjYXNlIjwvZmlsbD4iOmNhc2UiPC9ncmFkaWVudEZpbGw+IjpjYXNlIjxiZ0NvbG9yLz4iOmNhc2UiPC9iZ0NvbG9yPiI6Y2FzZSI8ZmdDb2xvci8+IjpjYXNlIjwvZmdDb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPHN0b3AvPiI6Y2FzZSI8ZXh0THN0''@;'; put 'put ''IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZmlsbD4iOmNhc2UiPGZpbGwiOmNhc2UiPGZpbGwvPiI6UC5GaWxscy5wdXNoKHJlPXt9KTticmVhaztjYXNlIjxncmFkaWVudEZpbGw+IjpyZS5zdG9wcz1bXTticmVhaztjYXNlIjxncmFkaWVudEZpbGwiOnJl''@;'; put 'put ''LnN0b3BzPVtdLEhlLmRlZ3JlZSYmKHJlLmFuZ2xlPStIZS5kZWdyZWUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsIjpjYXNlIjxwYXR0ZXJuRmlsbD4iOkhlLnBhdHRlcm5UeXBlJiYocmUucGF0dGVyblR5cGU9SGUucGF0dGVyblR5cGUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsLz4iOmNh''@;'; put 'put ''c2UiPC9wYXR0ZXJuRmlsbD4iOmlmKF9lKXRocm93IG5ldyBFcnJvcigiYmFkIHN0b3AiKTticmVhaztjYXNlIjxjb2xvciI6Y2FzZSI8YmdDb2xvciI6Y2FzZSI8ZmdDb2xvciI6dmFyIFZlPWpuKEhlWzBdKS5zbGljZSgxKTsiY29sb3IiIT1WZSYmIXJlW1ZlXSYmKHJlW1ZlXT17fSk7dmFy''@;'; put 'put ''IEdlPV9lP3BlOnJlW1ZlXTtudWxsIT1IZS5pbmRleGVkJiYoR2UuaW5kZXg9cGFyc2VJbnQoSGUuaW5kZXhlZCwxMCksR2UucmdiPUJtKEdlLmluZGV4LFAuSW5kZXhlZCkpLG51bGwhPUhlLnRoZW1lJiYoR2UudGhlbWU9cGFyc2VJbnQoSGUudGhlbWUsMTApKSxudWxsIT1IZS50aW50JiYo''@;'; put 'put ''R2UudGludD1wYXJzZUZsb2F0KEhlLnRpbnQpKSxudWxsIT1IZS5yZ2ImJihHZS5yZ2I9SGUucmdiLnNsaWNlKC02KSksbnVsbCE9SGUuYXV0byYmZGVsZXRlIHJlW1ZlXSxudWxsIT1HZS50aGVtZSYmIUdlLnJnYiYmTC50aGVtZUVsZW1lbnRzJiYoR2UucmdiPUJkKEwudGhlbWVFbGVtZW50''@;'; put 'put ''cy5jbHJTY2hlbWVbR2UudGhlbWVdLnJnYixHZS50aW50fHwwKSxRLldURiYmKEdlLnJhd19yZ2I9TC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtHZS50aGVtZV0ucmdiKSk7YnJlYWs7Y2FzZSI8c3RvcD4iOl9lPSEwLHBlPXt9O2JyZWFrO2Nhc2UiPHN0b3AiOl9lPSEwLHBlPXt9LG51bGwh''@;'; put 'put ''PUhlLnBvc2l0aW9uJiYocGUudj1wYXJzZUZsb2F0KEhlLnBvc2l0aW9uKSk7YnJlYWs7Y2FzZSI8L3N0b3A+IjpfZT0hMSxyZS5zdG9wcy5wdXNoKHBlKTticmVhaztjYXNlIjxleHQiOnZlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+Ijp2ZT0hMTticmVhaztkZWZhdWx0OmlmKFEmJlEuV1RGJiYh''@;'; put 'put ''dmUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitIZVswXSsiIGluIGZpbGxzIil9fSl9ZnVuY3Rpb24geUQoeSxQLEwsUSl7UC5Gb250cz1bXTt2YXIgcmU9e30scGU9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihfZSl7dmFyIHZlPWxuKF9lKTtzd2l0''@;'; put 'put ''Y2goam4odmVbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+IjpicmVhaztjYXNlIjxmb250IjpjYXNlIjxmb250PiI6aWYoIi8+IiE9X2Uuc2xpY2UoLTIpKWJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+IjpQLkZvbnRzLnB1c2gocmUpLHJlPXt9''@;'; put 'put ''O2JyZWFrO2Nhc2UiPG5hbWUiOnZlLnZhbCYmKHJlLm5hbWU9UGkodmUudmFsKSk7YnJlYWs7Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmJyZWFrO2Nhc2UiPGIiOnJlLmJvbGQ9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOmNhc2UiPGI+IjpyZS5ib2xkPTE7YnJl''@;'; put 'put ''YWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjpyZS5pdGFsaWM9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxpLz4iOmNhc2UiPGk+IjpyZS5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaCh2ZS52YWwpe2Nhc2Uibm9uZSI6cmUudW5kZXJs''@;'; put 'put ''aW5lPTA7YnJlYWs7Y2FzZSJzaW5nbGUiOnJlLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiZG91YmxlIjpyZS51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOnJlLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOnJlLnVuZGVybGluZT0zNH1i''@;'; put 'put ''cmVhaztjYXNlIjx1Lz4iOmNhc2UiPHU+IjpyZS51bmRlcmxpbmU9MTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0cmlrZSI6cmUuc3RyaWtlPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOnJlLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPG91dGxpbmUiOnJl''@;'; put 'put ''Lm91dGxpbmU9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxvdXRsaW5lLz4iOnJlLm91dGxpbmU9MTticmVhaztjYXNlIjxzaGFkb3ciOnJlLnNoYWRvdz12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPHNoYWRvdy8+IjpyZS5zaGFkb3c9MTticmVhaztjYXNlIjxjb25k''@;'; put 'put ''ZW5zZSI6cmUuY29uZGVuc2U9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpyZS5jb25kZW5zZT0xO2JyZWFrO2Nhc2UiPGV4dGVuZCI6cmUuZXh0ZW5kPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOnJlLmV4dGVuZD0xO2JyZWFr''@;'; put 'put ''O2Nhc2UiPHN6Ijp2ZS52YWwmJihyZS5zej0rdmUudmFsKTticmVhaztjYXNlIjxzei8+IjpjYXNlIjwvc3o+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHZlLnZhbHx8Im5vbmUiKSYmKHJlLnZhbGlnbj12ZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6YnJlYWs7Y2FzZSI8ZmFtaWx5Ijp2ZS52YWwmJihyZS5mYW1pbHk9cGFyc2VJbnQodmUudmFsLDEwKSk7YnJlYWs7Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjxzY2hlbWUiOnZlLnZhbCYmKHJlLnNj''@;'; put 'put ''aGVtZT12ZS52YWwpO2JyZWFrO2Nhc2UiPHNjaGVtZS8+IjpjYXNlIjwvc2NoZW1lPiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT12ZS52YWwpYnJlYWs7dmUuY29kZXBhZ2U9SVtwYXJzZUludCh2ZS52YWwsMTApXTticmVhaztjYXNlIjxjb2xvciI6cmUuY29sb3J8fChyZS5jb2xv''@;'; put 'put ''cj17fSksdmUuYXV0byYmKHJlLmNvbG9yLmF1dG89eXIodmUuYXV0bykpLHZlLnJnYj9yZS5jb2xvci5yZ2I9dmUucmdiLnNsaWNlKC02KTp2ZS5pbmRleGVkPyhyZS5jb2xvci5pbmRleD1wYXJzZUludCh2ZS5pbmRleGVkLDEwKSxyZS5jb2xvci5yZ2I9Qm0ocmUuY29sb3IuaW5kZXgsUC5J''@;'; put 'put ''bmRleGVkKSk6dmUudGhlbWUmJihyZS5jb2xvci50aGVtZT1wYXJzZUludCh2ZS50aGVtZSwxMCksdmUudGludCYmKHJlLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdCh2ZS50aW50KSksdmUudGhlbWUmJkwudGhlbWVFbGVtZW50cyYmTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKHJlLmNvbG9y''@;'; put 'put ''LnJnYj1CZChMLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW3JlLmNvbG9yLnRoZW1lXS5yZ2IscmUuY29sb3IudGludHx8MCkpKTticmVhaztjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpicmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpwZT0hMDticmVhaztjYXNlIjwvQWx0ZXJu''@;'; put 'put ''YXRlQ29udGVudD4iOnBlPSExO2JyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6cGU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoUSYmUS5XVEYmJiFwZSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''InVucmVjb2duaXplZCAiK3ZlWzBdKyIgaW4gZm9udHMiKX19KX12YXIgam09ezA6Im5vbmUiLDE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlQWNjb3VudGluZyIsMzQ6ImRvdWJsZUFjY291bnRpbmcifSx6ZD1bIm51bUZtdElkIiwiZmlsbElkIiwiZm9udElkIiwiYm9yZGVySWQi''@;'; put 'put ''LCJ4ZklkIl0sWjI9WyJhcHBseUFsaWdubWVudCIsImFwcGx5Qm9yZGVyIiwiYXBwbHlGaWxsIiwiYXBwbHlGb250IiwiYXBwbHlOdW1iZXJGb3JtYXQiLCJhcHBseVByb3RlY3Rpb24iLCJwaXZvdEJ1dHRvbiIsInF1b3RlUHJlZml4Il0seEQ9ZnVuY3Rpb24oKXt2YXIgeT0vPCg/Olx3Kzop''@;'; put 'put ''P2ZvbnQoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udD4vLFA9LzwoPzpcdys6KT9udW1GbXQoW14+XSopXC8+LyxMPS88KD86XHcrOik/ZmlsbChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxsPi8scmU9LzwoPzpcdys6KT9ib3JkZXIoW14+XSopPltcU1xzXSo/PFwvKD86''@;'; put 'put ''XHcrOik/Ym9yZGVyPi87cmV0dXJuIGZ1bmN0aW9uKHZlLFNlLEhlLFZlKXt2YXIgZHQsQ3QsR2U9e30sbnQ9e307cmV0dXJuKGR0PXZlLm1hdGNoKHkpKSYmKHlEKGR0LEdlLEhlLFZlKSwoR2UuRm9udHN8fFtdKVswXSYmVXQobnQsR2UuRm9udHNbMF0pKSwoZHQ9dmUubWF0Y2goUCkpJiYo''@;'; put 'put ''Q3Q9bG4oUGkoZHRbMF0pKSxudC56PUN0LmZvcm1hdENvZGU/eHIoQ3QuZm9ybWF0Q29kZSk6KFNlLk51bWJlckZtdHx8W10pWytDdC5udW1GbXRJZF18fCJHZW5lcmFsIiksKGR0PXZlLm1hdGNoKEwpKSYmKFI5KGR0LEdlLEhlLFZlKSwoR2UuRmlsbHN8fFtdKVswXSYmVXQobnQsR2UuRmls''@;'; put 'put ''bHNbMF0pKSwoZHQ9dmUubWF0Y2gocmUpKSYmKEwzKGR0LEdlLEhlLFZlKSwoR2UuQm9yZGVyc3x8W10pWzBdJiZVdChudCxHZS5Cb3JkZXJzWzBdKSksbnR9fSgpLE1aPS88KD86XHcrOik/ZHhmPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmPi9nLGtaPS88KD86XHcrOik/dGFibGVTdHlsZVxi''@;'; put 'put ''Lio/PltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZT4vZzt2YXIgWm09ZnVuY3Rpb24oKXt2YXIgUD0vPCg/Olx3KzopP251bUZtdHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/bnVtRm10cz4vLEw9LzwoPzpcdys6KT9jZWxsU3R5bGVYZnMoW14+XSopPltcU1xzXSo/PFwvKD86''@;'; put 'put ''XHcrOik/Y2VsbFN0eWxlWGZzPi8sUT0vPCg/Olx3KzopP2NlbGxTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlcz4vLHJlPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8scGU9LzwoPzpcdys6KT9maWxscyhb''@;'; put 'put ''Xj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxscz4vLF9lPS88KD86XHcrOik/Zm9udHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udHM+Lyx2ZT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vLFNlPS88KD86XHcrOik/aW5k''@;'; put 'put ''ZXhlZENvbG9ycyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9pbmRleGVkQ29sb3JzPi8sSGU9LzwoPzpcdys6KT90YWJsZVN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlcz4vLFZlPS88KD86XHcrOik/ZHhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6''@;'; put 'put ''KT9keGZzPi87cmV0dXJuIGZ1bmN0aW9uKG50LGR0LEN0KXt2YXIgYnQsY3Q9e307cmV0dXJuIG50PygoYnQ9KG50PW50LnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIikpLm1hdGNoKFNlKSkmJmZ1bmN0''@;'; put 'put ''aW9uIE85KHksUCxMKXtQLkluZGV4ZWR8fChQLkluZGV4ZWQ9W10pO3ZhciBRPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBwZT1sbihyZSk7c3dpdGNoKGpuKHBlWzBdKSl7Y2FzZSI8aW5kZXhlZENvbG9ycz4iOmNhc2UiPGluZGV4ZWRDb2xvcnMi''@;'; put 'put ''OmNhc2UiPGluZGV4ZWRDb2xvcnMvPiI6Y2FzZSI8L2luZGV4ZWRDb2xvcnM+IjpjYXNlIjwvcmdiQ29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxyZ2JDb2xvciI6ZGVsZXRlIHBlWzBdO3ZhciBfZT1wYXJzZUludChwZS5y''@;'; put 'put ''Z2Iuc2xpY2UoLTYpLDE2KTtQLkluZGV4ZWQucHVzaChbX2U+PjE2JjI1NSxfZT4+OCYyNTUsMjU1Jl9lXSk7YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25p''@;'; put 'put ''emVkICIrcGVbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2goUCkpJiZmdW5jdGlvbiBDRCh5LFAsTCl7UC5OdW1iZXJGbXQ9W107Zm9yKHZhciBRPWx0KHcuX3RhYmxlKSxyZT0wO3JlPFEubGVuZ3RoOysrcmUpUC5OdW1iZXJGbXRbUVtyZV1dPXcuX3Rh''@;'; put 'put ''YmxlW1FbcmVdXTt2YXIgcGU9eVswXS5tYXRjaCgkdCk7aWYocGUpZm9yKHJlPTA7cmU8cGUubGVuZ3RoOysrcmUpe3ZhciBfZT1sbihwZVtyZV0pO3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPG51bUZtdHMiOmNhc2UiPC9udW1GbXRzPiI6Y2FzZSI8bnVtRm10cy8+IjpjYXNlIjxudW1GbXRz''@;'; put 'put ''PiI6Y2FzZSI8L251bUZtdD4iOmJyZWFrO2Nhc2UiPG51bUZtdCI6dmFyIHZlPXhyKFBpKF9lLmZvcm1hdENvZGUpKSxTZT1wYXJzZUludChfZS5udW1GbXRJZCwxMCk7aWYoUC5OdW1iZXJGbXRbU2VdPXZlLFNlPjApe2lmKFNlPjM5Mil7Zm9yKFNlPTM5MjtTZT42MCYmbnVsbCE9UC5OdW1i''@;'; put 'put ''ZXJGbXRbU2VdOy0tU2UpO1AuTnVtYmVyRm10W1NlXT12ZX13LmxvYWQodmUsU2UpfWJyZWFrO2RlZmF1bHQ6aWYoTC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitfZVswXSsiIGluIG51bUZtdHMiKX19fShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKF9lKSkmJnlEKGJ0LGN0''@;'; put 'put ''LGR0LEN0KSwoYnQ9bnQubWF0Y2gocGUpKSYmUjkoYnQsY3QsZHQsQ3QpLChidD1udC5tYXRjaCh2ZSkpJiZMMyhidCxjdCxkdCxDdCksKGJ0PW50Lm1hdGNoKEwpKSYmZnVuY3Rpb24gZEMoeSxQLEwpe1AuQ2VsbFN0eWxlWGY9W107dmFyIFEscmU9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSku''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIF9lPWxuKHBlKSx2ZT0wO3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPGNlbGxTdHlsZVhmcyI6Y2FzZSI8Y2VsbFN0eWxlWGZzPiI6Y2FzZSI8Y2VsbFN0eWxlWGZzLz4iOmNhc2UiPC9jZWxsU3R5bGVYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxp''@;'; put 'put ''Z25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rpb24+IjpjYXNlIjxwcm90ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKFE9X2UpWzBdLHZlPTA7dmU8emQubGVuZ3RoOysrdmUp''@;'; put 'put ''UVt6ZFt2ZV1dJiYoUVt6ZFt2ZV1dPXBhcnNlSW50KFFbemRbdmVdXSwxMCkpO2Zvcih2ZT0wO3ZlPFoyLmxlbmd0aDsrK3ZlKVFbWjJbdmVdXSYmKFFbWjJbdmVdXT15cihRW1oyW3ZlXV0pKTtpZihQLk51bWJlckZtdCYmUS5udW1GbXRJZD4zOTIpZm9yKHZlPTM5Mjt2ZT42MDstLXZlKWlm''@;'; put 'put ''KFAuTnVtYmVyRm10W1EubnVtRm10SWRdPT1QLk51bWJlckZtdFt2ZV0pe1EubnVtRm10SWQ9dmU7YnJlYWt9UC5DZWxsU3R5bGVYZi5wdXNoKFEpO2JyZWFrO2Nhc2UiPGFsaWdubWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciBTZT17fTtfZS52ZXJ0aWNhbCYmKFNlLnZlcnRpY2FsPV9l''@;'; put 'put ''LnZlcnRpY2FsKSxfZS5ob3Jpem9udGFsJiYoU2UuaG9yaXpvbnRhbD1fZS5ob3Jpem9udGFsKSxudWxsIT1fZS50ZXh0Um90YXRpb24mJihTZS50ZXh0Um90YXRpb249X2UudGV4dFJvdGF0aW9uKSxfZS5pbmRlbnQmJihTZS5pbmRlbnQ9X2UuaW5kZW50KSxfZS53cmFwVGV4dCYmKFNlLndy''@;'; put 'put ''YXBUZXh0PV9lLndyYXBUZXh0KSxfZS5zaHJpbmtUb0ZpdCYmKFNlLnNocmlua1RvRml0PXlyKF9lLnNocmlua1RvRml0KSksUS5hbGlnbm1lbnQ9U2U7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6US5wcm90ZWN0aW9uPXt9LHlyKF9lLmhpZGRlbikmJihRLnByb3RlY3Rpb24uaGlkZGVuPSEw''@;'; put 'put ''KSxudWxsIT1fZS5sb2NrZWQmJihRLnByb3RlY3Rpb24uZWRpdGFibGU9IXlyKF9lLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPGV4dCI6cmU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYmJiFyZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXpl''@;'; put 'put ''ZCAiK19lWzBdKyIgaW4gY2VsbFN0eWxlWGZzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2goUSkpJiZmdW5jdGlvbiBTRCh5LFAsTCl7UC5DZWxsU3R5bGVYZnx8KFAuQ2VsbFN0eWxlWGY9W10pO3ZhciBRPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUp''@;'; put 'put ''e3ZhciBwZT1sbihyZSk7c3dpdGNoKGpuKHBlWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlcyI6Y2FzZSI8Y2VsbFN0eWxlcz4iOmNhc2UiPGNlbGxTdHlsZXMvPiI6Y2FzZSI8L2NlbGxTdHlsZXM+IjpjYXNlIjwveGY+IjpjYXNlIjwvY2VsbFN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRM''@;'; put 'put ''c3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Y2VsbFN0eWxlIjpjYXNlIjxjZWxsU3R5bGUvPiI6ZGVsZXRlIHBlWzBdO3ZhciBfZT0rcGUueGZJZDtpZihQLkNlbGxTdHlsZVhmW19lXSlQLkNlbGxTdHlsZVhmW19lXS5zdHlsZT1QaShwZS5uYW1lKTtlbHNlIGlmKCFwZS5idWls''@;'; put 'put ''dGluSWQpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBDZWxsU3R5bGUgIitfZSk7YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrcGVb''@;'; put 'put ''MF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2gocmUpKSYmZnVuY3Rpb24gdUMoeSxQLEwpe1AuQ2VsbFhmPVtdO3ZhciBRLHJlPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBfZT1sbihwZSksdmU9MDtzd2l0Y2go''@;'; put 'put ''am4oX2VbMF0pKXtjYXNlIjxjZWxsWGZzIjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNl''@;'; put 'put ''IjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoUT1fZSlbMF0sdmU9MDt2ZTx6ZC5sZW5ndGg7Kyt2ZSlRW3pkW3ZlXV0mJihRW3pkW3ZlXV09cGFyc2VJbnQoUVt6ZFt2ZV1dLDEwKSk7Zm9yKHZlPTA7dmU8WjIubGVuZ3Ro''@;'; put 'put ''OysrdmUpUVtaMlt2ZV1dJiYoUVtaMlt2ZV1dPXlyKFFbWjJbdmVdXSkpO2lmKFAuTnVtYmVyRm10JiZRLm51bUZtdElkPjM5Milmb3IodmU9MzkyO3ZlPjYwOy0tdmUpaWYoUC5OdW1iZXJGbXRbUS5udW1GbXRJZF09PVAuTnVtYmVyRm10W3ZlXSl7US5udW1GbXRJZD12ZTticmVha31QLkNl''@;'; put 'put ''bGxTdHlsZVhmJiZRLnhmSWQmJlAuQ2VsbFN0eWxlWGZbUS54ZklkXSYmUC5DZWxsU3R5bGVYZltRLnhmSWRdLnN0eWxlJiYoUS5zdHlsZT1QLkNlbGxTdHlsZVhmW1EueGZJZF0uc3R5bGUpLFAuQ2VsbFhmLnB1c2goUSk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQv''@;'; put 'put ''PiI6dmFyIFNlPXt9O19lLnZlcnRpY2FsJiYoU2UudmVydGljYWw9X2UudmVydGljYWwpLF9lLmhvcml6b250YWwmJihTZS5ob3Jpem9udGFsPV9lLmhvcml6b250YWwpLG51bGwhPV9lLnRleHRSb3RhdGlvbiYmKFNlLnRleHRSb3RhdGlvbj1fZS50ZXh0Um90YXRpb24pLF9lLmluZGVudCYm''@;'; put 'put ''KFNlLmluZGVudD1fZS5pbmRlbnQpLF9lLndyYXBUZXh0JiYoU2Uud3JhcFRleHQ9eXIoX2Uud3JhcFRleHQpKSxfZS5zaHJpbmtUb0ZpdCYmKFNlLnNocmlua1RvRml0PXlyKF9lLnNocmlua1RvRml0KSksUS5hbGlnbm1lbnQ9U2U7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6US5wcm90ZWN0''@;'; put 'put ''aW9uPXt9LHlyKF9lLmhpZGRlbikmJihRLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1fZS5sb2NrZWQmJihRLnByb3RlY3Rpb24uZWRpdGFibGU9IXlyKF9lLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6cmU9ITA7YnJlYWs7Y2FzZSI8L0Fs''@;'; put 'put ''dGVybmF0ZUNvbnRlbnQ+IjpjYXNlIjwvZXh0PiI6cmU9ITE7YnJlYWs7ZGVmYXVsdDppZihMJiZMLldURiYmIXJlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrX2VbMF0rIiBpbiBjZWxsWGZzIil9fSl9KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2goVmUpKSYmZnVuY3Rpb24gUDko''@;'; put 'put ''eSxQLEwsUSl7UC5EWEZ8fChQLkRYRj1bXSksKHlbMF0ubWF0Y2goTVopfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyZSl7UC5EWEYucHVzaCh4RChyZSxQLEwsUSkpfSl9KGJ0LGN0LGR0LEN0KSwoYnQ9bnQubWF0Y2goSGUpKSYmZnVuY3Rpb24gQVooeSxQLEwsUSl7UC5UYWJsZXx8KFAuVGFi''@;'; put 'put ''bGU9W10pLCh5WzBdLm1hdGNoKGtaKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe1AuVGFibGUucHVzaChmdW5jdGlvbiB4Wih5LFAsTCxRKXt2YXIgcmU9ITEscGU9e307cmV0dXJuKHkubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihfZSl7dmFyIHZlPWxuKF9lKTtzd2l0Y2go''@;'; put 'put ''am4odmVbMF0pKXtjYXNlIjx0YWJsZVN0eWxlPiI6Y2FzZSI8dGFibGVTdHlsZSI6cGUubmFtZT12ZS5uYW1lLnJlcGxhY2UoL14oVGFibGV8UGl2b3QpU3R5bGUvLCIiKSxwZS5yYXduYW1lPXZlLm5hbWUscGUucGl2b3Q9IXZlLnBpdm90fHx5cih2ZS5waXZvdCkscGUudGFibGU9IXZlLnRh''@;'; put 'put ''YmxlfHx5cih2ZS50YWJsZSk7YnJlYWs7Y2FzZSI8dGFibGVTdHlsZS8+IjpjYXNlIjwvdGFibGVTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHRhYmxlU3R5bGVFbGVtZW50IjppZih2ZS50eXBlJiZ2ZS5keGZJZCl7aWYo''@;'; put 'put ''IVAuRFhGfHwhUC5EWEZbK3ZlLmR4ZklkXSl0aHJvdyBuZXcgRXJyb3IoX2UrIiBjYW5ub3QgZmluZCBEWEYiKTtwZVt2ZS50eXBlXT1QLkRYRlsrdmUuZHhmSWRdfWJyZWFrO2Nhc2UiPGV4dCI6cmU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoUSYmUS5X''@;'; put 'put ''VEYmJiFyZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3ZlWzBdKyIgaW4gdGFibGVTdHlsZSIpfX0pLHBlfShyZSxQLDAsUSkpfSl9KGJ0LGN0LDAsQ3QpLChjdC5Gb250c3x8W10pWzBdJiZaMShjdC5Gb250c1swXSksY3QpOmN0fX0oKSxoQz1Tcigic3R5bGVTaGVldCIsbnVs''@;'; put 'put ''bCx7eG1sbnM6aXMubWFpblswXSwieG1sbnM6dnQiOmlzLnZ0fSk7ZnVuY3Rpb24gZkMoeSxQKXt2YXIgUSxMPVtCbixoQ107eS5TU0YmJm51bGwhPShRPWZ1bmN0aW9uIHptKHkpe3ZhciBQPVsiPG51bUZtdHM+Il07cmV0dXJuW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihMKXtmb3IodmFyIFE9TFswXTtRPD1MWzFdOysrUSludWxsIT15W1FdJiYoUFtQLmxlbmd0aF09U3IoIm51bUZtdCIsbnVsbCx7bnVtRm10SWQ6USxmb3JtYXRDb2RlOkZyKHlbUV0pfSkpfSksMT09PVAubGVuZ3RoPyIiOihQW1AubGVuZ3RoXT0iPC9udW1GbXRzPiIs''@;'; put 'put ''UFswXT1TcigibnVtRm10cyIsbnVsbCx7Y291bnQ6UC5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLFAuam9pbigiIikpfSh5LlNTRikpJiYoTFtMLmxlbmd0aF09USksTFtMLmxlbmd0aF09ZnVuY3Rpb24gd0QoeSl7dmFyIFA9W107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihMKXt2''@;'; put 'put ''YXIgUT1bIjxmb250PiJdO0wuYm9sZCYmUS5wdXNoKCI8Yi8+IiksTC5pdGFsaWMmJlEucHVzaCgiPGkvPiIpLEwuc3RyaWtlJiZRLnB1c2goIjxzdHJpa2UvPiIpLEwuc2hhZG93JiZRLnB1c2goIjxzaGFkb3cvPiIpLGptWytMLnVuZGVybGluZV0mJlEucHVzaCgnPHUgdmFsPSInK2ptWytM''@;'; put 'put ''LnVuZGVybGluZV0rJyIvPicpLEwuc3omJlEucHVzaCgnPHN6IHZhbD0iJytMLnN6KyciLz4nKSxMLmNvbG9yJiZRLnB1c2goVWQoTC5jb2xvciwhMCkpLEwubmFtZSYmUS5wdXNoKCc8bmFtZSB2YWw9IicrTC5uYW1lKyciLz4nKSxMLmZhbWlseSYmUS5wdXNoKCc8ZmFtaWx5IHZhbD0iJytM''@;'; put 'put ''LmZhbWlseSsnIi8+JyksTC5zY2hlbWUmJlEucHVzaCgnPHNjaGVtZSB2YWw9IicrTC5zY2hlbWUrJyIvPicpLEwudmFsaWduJiZRLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK0wudmFsaWduKygic3ViIj09TC52YWxpZ258fCJzdXBlciI9PUwudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+Jyks''@;'; put 'put ''UC5wdXNoKFEuam9pbigiIikrIjwvZm9udD4iKX0pLCc8Zm9udHMgY291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIpKyI8L2ZvbnRzPiJ9KCh5LlN0eWxlc3x8e30pLkZvbnRzfHxbXSksTFtMLmxlbmd0aF09ZnVuY3Rpb24gYkQoeSl7dmFyIFA9W107cmV0dXJuIHkuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihMKXt2YXIgUT1udWxsO2lmKEwuc3RvcHMmJkwuc3RvcHMubGVuZ3RoKXt2YXIgcmU9e307TC5hbmdsZSYmKHJlLmRlZ3JlZT1NYXRoLnJvdW5kKEwuYW5nbGUpKSxRPUwuc3RvcHMubWFwKGZ1bmN0aW9uKHBlKXtyZXR1cm4gU3IoInN0b3AiLFVkKHBlLCJjb2xvciIsITApLG51''@;'; put 'put ''bGwhPXBlLnY/e3Bvc2l0aW9uOnBlLnZ9Ont9KX0pLFAucHVzaCgiPGZpbGw+IitTcigiZ3JhZGllbnRGaWxsIixRLmpvaW4oIiIpLHJlKSsiPC9maWxsPiIpfWVsc2V7aWYoTC5mZ0NvbG9yKXtpZihRPShRfHwiIikrIjxmZ0NvbG9yICIsTC5mZ0NvbG9yLnRoZW1lKVErPSd0aGVtZT0iJytM''@;'; put 'put ''LmZnQ29sb3IudGhlbWUrJyInKyhMLmZnQ29sb3IudGludD8nIHRpbnQ9IicrTC5mZ0NvbG9yLnRpbnQrJyInOiIiKSsiLz4iO2Vsc2UgaWYobnVsbCE9TC5mZ0NvbG9yLmluZGV4JiZudWxsPT1MLmZnQ29sb3IucmdiKVErPSdpbmRleGVkPSInK0wuZmdDb2xvci5pbmRleCsnIi8+JztlbHNl''@;'; put 'put ''IGlmKEwuZmdDb2xvci5hdXRvKVErPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PUwuZmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29sb3IgIitsdChMLmZnQ29sb3IpLmpvaW4oInwiKSk7USs9J3JnYj0iRkYnK091KEwuZmdDb2xvci5yZ2IpKyciLz4nfSJzb2xpZCI9PUwu''@;'; put 'put ''cGF0dGVyblR5cGUmJiFMLmJnQ29sb3ImJihMLmJnQ29sb3I9e2luZGV4OjY0fSl9aWYoTC5iZ0NvbG9yKWlmKFE9KFF8fCIiKSsiPGJnQ29sb3IgIixMLmJnQ29sb3IudGhlbWUpUSs9J3RoZW1lPSInK0wuYmdDb2xvci50aGVtZSsnIi8+JztlbHNlIGlmKG51bGwhPUwuYmdDb2xvci5pbmRl''@;'; put 'put ''eCYmbnVsbD09TC5iZ0NvbG9yLnJnYilRKz0naW5kZXhlZD0iJytMLmJnQ29sb3IuaW5kZXgrJyIvPic7ZWxzZSBpZihMLmJnQ29sb3IuYXV0bylRKz0nYXV0bz0iMSIvPic7ZWxzZXtpZihudWxsPT1MLmJnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrbHQoTC5iZ0Nv''@;'; put 'put ''bG9yKS5qb2luKCJ8IikpO1ErPSdyZ2I9IkZGJytPdShMLmJnQ29sb3IucmdiKSsnIi8+J31QLnB1c2goIjxmaWxsPiIrU3IoInBhdHRlcm5GaWxsIixRLHtwYXR0ZXJuVHlwZTpMLnBhdHRlcm5UeXBlfSkrIjwvZmlsbD4iKX19KSwnPGZpbGxzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5q''@;'; put 'put ''b2luKCIiKSsiPC9maWxscz4ifSgoeS5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLExbTC5sZW5ndGhdPWZ1bmN0aW9uIHdaKHkpe3ZhciBQPVtdO3JldHVybiB5LmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIFE9W107US5wdXNoKFIzKEwubGVmdCwibGVmdCIpKSxRLnB1c2goUjMoTC5yaWdodCwi''@;'; put 'put ''cmlnaHQiKSksUS5wdXNoKFIzKEwudG9wLCJ0b3AiKSksUS5wdXNoKFIzKEwuYm90dG9tLCJib3R0b20iKSksUS5wdXNoKFIzKEwuZGlhZ29uYWwsImRpYWdvbmFsIikpLFAucHVzaCgiPGJvcmRlcj4iK1Euam9pbigiIikrIjwvYm9yZGVyPiIpfSksJzxib3JkZXJzIGNvdW50PSInK1AubGVu''@;'; put 'put ''Z3RoKyciPicrUC5qb2luKCIiKSsiPC9ib3JkZXJzPiJ9KCh5LlN0eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxMW0wubGVuZ3RoXT1mdW5jdGlvbiBTWih5KXt2YXIgUD1bJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIi8+J107aWYoeSlmb3IodmFy''@;'; put 'put ''IEw9MTtMPHkubGVuZ3RoOysrTClQLnB1c2goU3IoInhmIixudWxsLHtudW1GbXRJZDp5W0xdLm51bUZtdElkfHwwLGZvbnRJZDp5W0xdLmZvbnRJZHx8MCxmaWxsSWQ6eVtMXS5maWxsSWR8fDAsYm9yZGVySWQ6eVtMXS5ib3JkZXJJZHx8MH0pKTtyZXR1cm4nPGNlbGxTdHlsZVhmcyBjb3Vu''@;'; put 'put ''dD0iJytQLmxlbmd0aCsnIj4nK1Auam9pbigiIikrIjwvY2VsbFN0eWxlWGZzPiJ9KFAuY2VsbFN0eWxlWGZzKSwoUT1mdW5jdGlvbiBDWih5KXt2YXIgUD1bXTtyZXR1cm4gUFtQLmxlbmd0aF09U3IoImNlbGxYZnMiLG51bGwpLHkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUT1MLmFsaWdu''@;'; put 'put ''bWVudDtkZWxldGUgTC5hbGlnbm1lbnQ7dmFyIHJlPUwucHJvdGVjdGlvbjtkZWxldGUgTC5wcm90ZWN0aW9uO3ZhciBwZT1RP1NyKCJhbGlnbm1lbnQiLG51bGwsUSk6IiI7cGUrPXJlP1NyKCJwcm90ZWN0aW9uIixudWxsLHtoaWRkZW46cmUuaGlkZGVuPzE6MCxsb2NrZWQ6cmUuZWRpdGFi''@;'; put 'put ''bGU/MDoxfSk6IiIsUFtQLmxlbmd0aF09U3IoInhmIixwZXx8bnVsbCxMKSxRJiYoTC5hbGlnbm1lbnQ9USkscmUmJihMLnByb3RlY3Rpb249cmUpfSksUFtQLmxlbmd0aF09IjwvY2VsbFhmcz4iLDI9PT1QLmxlbmd0aD8iIjooUFswXT1TcigiY2VsbFhmcyIsbnVsbCx7Y291bnQ6UC5sZW5n''@;'; put 'put ''dGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLFAuam9pbigiIikpfShQLmNlbGxYZnMpKSYmKExbTC5sZW5ndGhdPVEpLExbTC5sZW5ndGhdPWZ1bmN0aW9uIE1EKHkpe3ZhciBQPVsnPGNlbGxTdHlsZSBuYW1lPSJOb3JtYWwiIHhmSWQ9IjAiIGJ1aWx0aW5JZD0iMCIvPiddO2lmKHkpZm9yKHZh''@;'; put 'put ''ciBMPTE7TDx5Lmxlbmd0aDsrK0wpUC5wdXNoKFNyKCJjZWxsU3R5bGUiLG51bGwse25hbWU6eVtMXS5uYW1lLHhmSWQ6TH0pKTtyZXR1cm4nPGNlbGxTdHlsZXMgY291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIpKyI8L2NlbGxTdHlsZXM+In0oUC5jZWxsU3R5bGVYZnMpLHkuU3R5''@;'; put 'put ''bGVzLkRYRnx8KHkuU3R5bGVzLkRYRj1bXSk7dmFyIHJlPWZ1bmN0aW9uIFRaKHksUCxMKXt2YXIgUT1bJzx0YWJsZVN0eWxlcyBjb3VudD0iJysoeXx8W10pLmxlbmd0aCsnIiBkZWZhdWx0VGFibGVTdHlsZT0iVGFibGVTdHlsZU1lZGl1bTkiIGRlZmF1bHRQaXZvdFN0eWxlPSJQaXZvdFN0''@;'; put 'put ''eWxlTWVkaXVtNCInXTtyZXR1cm4geSYmeS5sZW5ndGg/KFFbMF0rPSI+Iix5LmZvckVhY2goZnVuY3Rpb24ocmUpe1EucHVzaChmdW5jdGlvbiBFWih5LFAsTCl7dmFyIFE9W107WyJ3aG9sZVRhYmxlIiwiaGVhZGVyUm93IiwidG90YWxSb3ciLCJmaXJzdENvbHVtbiIsImxhc3RDb2x1bW4i''@;'; put 'put ''LCJmaXJzdFJvd1N0cmlwZSIsInNlY29uZFJvd1N0cmlwZSIsImZpcnN0Q29sdW1uU3RyaXBlIiwic2Vjb25kQ29sdW1uU3RyaXBlIiwiZmlyc3RIZWFkZXJDZWxsIiwibGFzdEhlYWRlckNlbGwiLCJmaXJzdFRvdGFsQ2VsbCIsImxhc3RUb3RhbENlbGwiLCJmaXJzdFN1YnRvdGFsQ29sdW1u''@;'; put 'put ''Iiwic2Vjb25kU3VidG90YWxDb2x1bW4iLCJ0aGlyZFN1YnRvdGFsQ29sdW1uIiwiZmlyc3RTdWJ0b3RhbFJvdyIsInNlY29uZFN1YnRvdGFsUm93IiwidGhpcmRTdWJ0b3RhbFJvdyIsImJsYW5rUm93IiwiZmlyc3RDb2x1bW5TdWJoZWFkaW5nIiwic2Vjb25kQ29sdW1uU3ViaGVhZGluZyIs''@;'; put 'put ''InRoaXJkQ29sdW1uU3ViaGVhZGluZyIsImZpcnN0Um93U3ViaGVhZGluZyIsInNlY29uZFJvd1N1YmhlYWRpbmciLCJ0aGlyZFJvd1N1YmhlYWRpbmciLCJwYWdlRmllbGRMYWJlbHMiLCJwYWdlRmllbGRWYWx1ZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtpZih5W3BlXSl7dmFyIF9lPUZv''@;'; put 'put ''KFAseVtwZV0pO1EucHVzaCgnPHRhYmxlU3R5bGVFbGVtZW50IGR4ZklkPSInK19lKyciIHR5cGU9IicrcGUrJyIvPicpfX0pO3ZhciByZT0nPHRhYmxlU3R5bGUgY291bnQ9IicrUS5sZW5ndGgrJyIgcGl2b3Q9IicrICshIXkucGl2b3QrJyIgbmFtZT0iJyt5Lm5hbWUrJyInO3JldHVybiBR''@;'; put 'put ''Lmxlbmd0aD9yZSsiPiIrUS5qb2luKCIiKSsiPC90YWJsZVN0eWxlPiI6cmUrIi8+In0ocmUsUCkpfSksUS5qb2luKCIiKSsiPC90YWJsZVN0eWxlcz4iKTpRWzBdKyIvPiJ9KCh5LlN0eWxlc3x8e30pLlRhYmxlfHxbXSx5LlN0eWxlcy5EWEYpO3JldHVybiBMW0wubGVuZ3RoXT1mdW5jdGlv''@;'; put 'put ''biBVbSh5LFApe2lmKCF5Lmxlbmd0aClyZXR1cm4nPGR4ZnMgY291bnQ9IjAiLz4nO3ZhciBMPVsnPGR4ZnMgY291bnQ9IicreS5sZW5ndGgrJyI+J107cmV0dXJuIHkuZm9yRWFjaChmdW5jdGlvbihRKXtMLnB1c2goZnVuY3Rpb24gRUQoeSxQKXt2YXIgTD17Ym9sZDoiYiIsaXRhbGljOiJp''@;'; put 'put ''Iix2YWxpZ246InZlcnRBbGlnbiJ9LFE9WyI8ZHhmPiJdLHJlPVtdLHBlPVtdLF9lPVtdLFNlPVtdO3JldHVybiBsdCh5KS5mb3JFYWNoKGZ1bmN0aW9uKFZlKXtzd2l0Y2goVmUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlInVuZGVybGluZSI6Y2FzZSJjb2xv''@;'; put 'put ''ciI6Y2FzZSJ2YWxpZ24iOmNhc2Uic3oiOmNhc2UibmFtZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjaGFyc2V0IjpjYXNlImZhbWlseSI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOmNhc2Uic2NoZW1lIjpyZS5wdXNoKFZlKTticmVhaztjYXNlImJnQ29sb3IiOmNh''@;'; put 'put ''c2UiZmdDb2xvciI6X2UucHVzaChWZSk7YnJlYWs7Y2FzZSJ6IjpwZS5wdXNoKFZlKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmNhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJkaWFnb25hbCI6Y2FzZSJ2ZXJ0aWNhbCI6Y2FzZSJob3Jpem9udGFsIjpTZS5wdXNoKFZlKTticmVh''@;'; put 'put ''aztjYXNlInBhdHRlcm5UeXBlIjpjYXNlImRpYWdvbmFsRG93biI6Y2FzZSJkaWFnb25hbFVwIjpjYXNlInN0b3BzIjpjYXNlImRlZ3JlZSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgIitWZSsiIGluIERYRiJ9fSkscmUubGVuZ3RoPjAmJihRLnB1c2goIjxmb250PiIpLHJl''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oVmUpe3N3aXRjaChWZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpRLnB1c2goIjwiKyhMW1ZlXXx8VmUpKycgdmFsPSInKyh5W1ZlXT8i''@;'; put 'put ''MSI6IjAiKSsnIi8+Jyk7YnJlYWs7Y2FzZSJjb2xvciI6US5wdXNoKFVkKHlbVmVdLFZlLCEwKSk7YnJlYWs7Y2FzZSJmYW1pbHkiOmNhc2UibmFtZSI6Y2FzZSJzeiI6Y2FzZSJzY2hlbWUiOlEucHVzaCgiPCIrKExbVmVdfHxWZSkrJyB2YWw9IicreVtWZV0rJyIvPicpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''dW5kZXJsaW5lIjpRLnB1c2goJzx1IHZhbD0iJytqbVt5W1ZlXXx8MF0rJyIvPicpO2JyZWFrO2Nhc2UidmFsaWduIjpRLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK3kudmFsaWduKygic3ViIj09eS52YWxpZ258fCJzdXBlciI9PXkudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+Jyk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK1ZlKyIgOiBmb250IERYRiJ9fSksUS5wdXNoKCI8L2ZvbnQ+IikpLHBlLmxlbmd0aD4wJiZRLnB1c2goJzxudW1GbXQgZm9ybWF0Q29kZT0iJytGcih5LnopKyciIG51bUZtdElkPSInK2Z1bmN0aW9uIFkzKHksUCl7aWYoIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiB5KXJldHVybiB5O3ZhciBMPVAucmV2c3NmW3k/PyJHZW5lcmFsIl0sUT02MDtpZihudWxsPT1MKWZvcig7UTwzOTI7KytRKWlmKG51bGw9PVAuc3NmW1FdKXJldHVybiB3LmxvYWQoeSxRKSxQLnNzZltRXT15LFAucmV2c3NmW3ldPVEsUTtyZXR1cm4gTH0oeS56LFApKyciLz4nKSxf''@;'; put 'put ''ZS5sZW5ndGg+MCYmKFEucHVzaCgiPGZpbGw+IiksUS5wdXNoKCI8cGF0dGVybkZpbGwiKyh5LnBhdHRlcm5UeXBlPycgcGF0dGVyblR5cGU9IicreS5wYXR0ZXJuVHlwZSsnIj4nOiI+IikpLF9lLmZvckVhY2goZnVuY3Rpb24oVmUpe3N3aXRjaChWZSl7Y2FzZSJwYXR0ZXJuVHlwZSI6YnJl''@;'; put 'put ''YWs7Y2FzZSJmZ0NvbG9yIjpjYXNlImJnQ29sb3IiOlEucHVzaChVZCh5W1ZlXSxWZSwhMCkpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitWZSsiIDogZmlsbCBEWEYifX0pLFEucHVzaCgiPC9wYXR0ZXJuRmlsbD4iKSxRLnB1c2goIjwvZmlsbD4iKSksU2UubGVuZ3RoPjA/''@;'; put 'put ''KFEucHVzaChbIjxib3JkZXIiLG51bGwhPXkuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyArISF5LmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9eS5kaWFnb25hbFVwPycgZGlhZ29uYWxVcD0iJysgKyEheS5kaWFnb25hbFVwKyciJzoiIiwiPiJdLmpvaW4oIiIpKSxTZS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKFZlKXtRLnB1c2goUjMoeVtWZV0sVmUpKX0pLFEucHVzaCgiPC9ib3JkZXI+IikpOihudWxsIT15LmRpYWdvbmFsRG93bnx8bnVsbCE9eS5kaWFnb25hbFVwKSYmUS5wdXNoKFsiPGJvcmRlciIsbnVsbCE9eS5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICsh''@;'; put 'put ''IXkuZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT15LmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISF5LmRpYWdvbmFsVXArJyInOiIiLCIvPiJdLmpvaW4oIiIpKSwxPT1RLmxlbmd0aD8iPGR4Zi8+IjpRLmpvaW4oIiIpKyI8L2R4Zj4ifShRLFApKX0pLEwuam9pbigiIikrIjwvZHhm''@;'; put 'put ''cz4ifSh5LlN0eWxlcy5EWEYsUCksTFtMLmxlbmd0aF09cmUsTC5sZW5ndGg+MiYmKExbTC5sZW5ndGhdPSI8L3N0eWxlU2hlZXQ+IixMWzFdPUxbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEwuam9pbigiIil9ZnVuY3Rpb24gTzMoeSxQLEwpe0x8fChMPWZyKDYrNCpQLmxlbmd0aCkpLEwud3Jp''@;'; put 'put ''dGVfc2hpZnQoMix5KSxuYyhQLEwpO3ZhciBRPUwubGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMO3JldHVybiBudWxsPT1MLmwmJihMLmw9TC5sZW5ndGgpLFF9ZnVuY3Rpb24gWW0oeSl7cmV0dXJue2NvbG9yOkRkKHkpLHBvczptYSh5KX19SGkuU1RZPSJodHRwOi8vc2NoZW1hcy5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlcyI7dmFyIFY0PVsibm9uZSIsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtV''@;'; put 'put ''cCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdLFkyPWJlKFY0KSxXbT1bImdlbmVyYWwiLCJsZWZ0Iiwi''@;'; put 'put ''Y2VudGVyIiwicmlnaHQiLCJmaWxsIiwianVzdGlmeSIsImNlbnRlckNvbnRpbnVvdXMiLCJkaXN0cmlidXRlZCJdLEI0PVsidG9wIiwiY2VudGVyIiwiYm90dG9tIiwianVzdGlmeSIsImRpc3RyaWJ1dGVkIl07ZnVuY3Rpb24gSDkoeSxQLEwpe0x8fChMPWZyKDE2KSksTC53cml0ZV9zaGlm''@;'; put 'put ''dCgyLFB8fDApLEwud3JpdGVfc2hpZnQoMix5Lm51bUZtdElkfHwwKSxMLndyaXRlX3NoaWZ0KDIseS5mb250SWR8fDApLEwud3JpdGVfc2hpZnQoMix5LmZpbGxJZHx8MCksTC53cml0ZV9zaGlmdCgyLHkuYm9yZGVySWR8fDApLEwud3JpdGVfc2hpZnQoMSx5LmFsaWdubWVudCYmeS5hbGln''@;'; put 'put ''bm1lbnQudGV4dFJvdGF0aW9ufHwwKSxMLndyaXRlX3NoaWZ0KDEseS5hbGlnbm1lbnQmJnkuYWxpZ25tZW50LmluZGVudHx8MCk7dmFyIFE9MCxyZT0wO2lmKHkuYWxpZ25tZW50KXtpZih5LmFsaWdubWVudC5ob3Jpem9udGFsKXt2YXIgcGU9V20uaW5kZXhPZih5LmFsaWdubWVudC5ob3Jp''@;'; put 'put ''em9udGFsKTtwZTwwJiYocGU9MCksUXw9cGV9aWYoeS5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBfZT1CNC5pbmRleE9mKHkuYWxpZ25tZW50LnZlcnRpY2FsKTtfZTwwJiYoX2U9MiksUXw9X2U8PDN9eS5hbGlnbm1lbnQud3JhcFRleHQmJihRfD02NCkseS5hbGlnbm1lbnQuc2hyaW5rVG9G''@;'; put 'put ''aXQmJihyZXw9MSl9cmV0dXJuIEwud3JpdGVfc2hpZnQoMSxRKSxMLndyaXRlX3NoaWZ0KDEscmUpLEwud3JpdGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDEsMCksTH12YXIgVzI9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwiZG91YmxlIiwi''@;'; put 'put ''aGFpciIsIm1lZGl1bURhc2hlZCIsImRhc2hEb3QiLCJtZWRpdW1EYXNoRG90IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlvbiBqNCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk7eS5sKz0xO3ZhciBMPURkKHkpO3JldHVybntzdHlsZTpX''@;'; put 'put ''MltQXSxjb2xvcjpMfX1mdW5jdGlvbiBQMyh5LFApe3JldHVybiBQfHwoUD1mcigxMCkpLHkmJnkuc3R5bGUmJiIiIT15LnN0eWxlJiYibm9uZSIhPXkuc3R5bGUmJi0xIT09VzIuaW5kZXhPZih5LnN0eWxlKT8oUC53cml0ZV9zaGlmdCgxLFcyLmluZGV4T2YoeS5zdHlsZSkpLFAud3JpdGVf''@;'; put 'put ''c2hpZnQoMSwwKSx5LmNvbG9yP1IyKHkuY29sb3IsUCk6KFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCkpKTooUC53cml0ZV9zaGlmdCgxLDApLFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApKSxQfWZ1bmN0aW9uIHR1''@;'; put 'put ''KHksUCl7cmV0dXJuIFB8fChQPWZyKDUyKSksUC53cml0ZV9zaGlmdCg0LHkueGZJZCksUC53cml0ZV9zaGlmdCgyLDEpLFAud3JpdGVfc2hpZnQoMSwreS5idWlsdGluSWQpLFAud3JpdGVfc2hpZnQoMSwwKSxBZCh5Lm5hbWV8fCIiLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQ''@;'; put 'put ''fWZ1bmN0aW9uIHo0KHksUCl7IVB8fCFQLnRoZW1lRWxlbWVudHN8fCFQLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxsIT15LnRoZW1lJiYoeS5yZ2I9QmQoUC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVt5LnRoZW1lXS5yZ2IseS50aW50fHwwKSl9ZnVuY3Rpb24gUEQoeSxQKXt2YXIg''@;'; put 'put ''TD15YygpO3JldHVybiBjaShMLCJCcnRCZWdpblN0eWxlU2hlZXQiKSxmdW5jdGlvbiBWYyh5LFApe2lmKFApe3ZhciBMPTA7W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihRKXtmb3IodmFyIHJlPVFbMF07cmU8PVFbMV07KytyZSludWxsIT1QW3Jl''@;'; put 'put ''XSYmKytMfSksMCE9TCYmKGNpKHksIkJydEJlZ2luRm10cyIsa3UoTCkpLFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oUSl7Zm9yKHZhciByZT1RWzBdO3JlPD1RWzFdOysrcmUpbnVsbCE9UFtyZV0mJmNpKHksIkJydEZtdCIsTzMocmUsUFtyZV0p''@;'; put 'put ''KX0pLGNpKHksIkJydEVuZEZtdHMiKSl9fShMLHkuU1NGKSxmdW5jdGlvbiBVNCh5LFApe3ZhciBMPVAubGVuZ3RoOzAhPUwmJihjaSh5LCJCcnRCZWdpbkZvbnRzIixrdShMKSksUC5mb3JFYWNoKGZ1bmN0aW9uKFEpe2NpKHksIkJydEZvbnQiLGZ1bmN0aW9uIG1DKHksUCl7UHx8KFA9ZnIo''@;'; put 'put ''MTUzKSksUC53cml0ZV9zaGlmdCgyLDIwKnkuc3opLGZ1bmN0aW9uIFloKHksUCl7UHx8KFA9ZnIoMikpLFAud3JpdGVfc2hpZnQoMSwoeS5pdGFsaWM/MjowKXwoeS5zdHJpa2U/ODowKXwoeS5vdXRsaW5lPzE2OjApfCh5LnNoYWRvdz8zMjowKXwoeS5jb25kZW5zZT82NDowKXwoeS5leHRl''@;'; put 'put ''bmQ/MTI4OjApKSxQLndyaXRlX3NoaWZ0KDEsMCl9KHksUCksUC53cml0ZV9zaGlmdCgyLHkuYm9sZD83MDA6NDAwKTt2YXIgTD0wOyJzdXBlciI9PXkudmFsaWduP0w9MToic3ViIj09eS52YWxpZ24mJihMPTIpLFAud3JpdGVfc2hpZnQoMixMKSxQLndyaXRlX3NoaWZ0KDEseS51bmRlcmxp''@;'; put 'put ''bmV8fDApLFAud3JpdGVfc2hpZnQoMSx5LmZhbWlseXx8MCksUC53cml0ZV9zaGlmdCgxLHkuY2hhcnNldHx8MCksUC53cml0ZV9zaGlmdCgxLDApLFIyKHkuY29sb3IsUCk7dmFyIFE9MDtyZXR1cm4ibWFqb3IiPT15LnNjaGVtZSYmKFE9MSksIm1pbm9yIj09eS5zY2hlbWUmJihRPTIpLFAu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSxRKSxuYyh5Lm5hbWUsUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KFEpKX0pLGNpKHksIkJydEVuZEZvbnRzIikpfShMLCh5LlN0eWxlc3x8e30pLkZvbnRzfHxbXSksZnVuY3Rpb24gdkMoeSxQKXt2YXIgTD1QLmxlbmd0aDswIT1MJiYoY2koeSwiQnJ0''@;'; put 'put ''QmVnaW5GaWxscyIsa3UoTCkpLFAuZm9yRWFjaChmdW5jdGlvbihRKXtjaSh5LCJCcnRGaWxsIixmdW5jdGlvbiBBRCh5LFApe1B8fChQPWZyKDg0KSk7dmFyIEw9WTJbeS5wYXR0ZXJuVHlwZV07bnVsbD09TCYmKEw9NDApLFAud3JpdGVfc2hpZnQoNCxMPStMKTt2YXIgUT0wO2lmKDQwIT1M''@;'; put 'put ''KWZvcihSMih5LmZnQ29sb3J8fHtpbmRleDo2NH0sUCksUjIoeS5iZ0NvbG9yfHx7aW5kZXg6NjV9LFApO1E8MTI7KytRKVAud3JpdGVfc2hpZnQoNCwwKTtlbHNle2Zvcig7UTw0OysrUSlQLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKDtRPDEyOysrUSlQLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJu''@;'; put 'put ''IFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfShRKSl9KSxjaSh5LCJCcnRFbmRGaWxscyIpKX0oTCwoeS5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGZ1bmN0aW9uIF9DKHksUCl7dmFyIEw9UC5sZW5ndGg7MCE9TCYmKGNpKHksIkJydEJlZ2luQm9yZGVycyIsa3UoTCkpLFAuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihRKXtjaSh5LCJCcnRCb3JkZXIiLGZ1bmN0aW9uIEREKHksUCl7cmV0dXJuIFB8fChQPWZyKDUxKSksUC53cml0ZV9zaGlmdCgxLDApLFAzKHkudG9wLFApLFAzKHkuYm90dG9tLFApLFAzKHkubGVmdCxQKSxQMyh5LnJpZ2h0LFApLFAzKG51bGwsUCksUC5sZW5ndGg+UC5s''@;'; put 'put ''P1Auc2xpY2UoMCxQLmwpOlB9KFEpKX0pLGNpKHksIkJydEVuZEJvcmRlcnMiKSl9KEwsKHkuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGZ1bmN0aW9uIElEKHksUCl7dmFyIEw9MTtpZihQJiYoTD1QLmxlbmd0aCksY2koeSwiQnJ0QmVnaW5DZWxsU3R5bGVYRnMiLGt1KEwpKSxjaSh5LCJC''@;'; put 'put ''cnRYRiIsSDkoe251bUZtdElkOjAsZm9udElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MH0sNjU1MzUpKSxQKWZvcih2YXIgUT0xO1E8UC5sZW5ndGg7KytRKWNpKHksIkJydFhGIixIOSh7bnVtRm10SWQ6UFtRXS5udW1GbXRJZHx8MCxmb250SWQ6UFtRXS5mb250SWR8fDAsZmlsbElkOlBbUV0u''@;'; put 'put ''ZmlsbElkfHwwLGJvcmRlcklkOlBbUV0uYm9yZGVySWR8fDB9LDY1NTM1KSk7Y2koeSwiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9KEwsUC5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIGJDKHksUCl7Y2koeSwiQnJ0QmVnaW5DZWxsWEZzIixrdShQLmxlbmd0aCkpLFAuZm9yRWFjaChmdW5jdGlvbihM''@;'; put 'put ''KXtjaSh5LCJCcnRYRiIsSDkoTCwwKSl9KSxjaSh5LCJCcnRFbmRDZWxsWEZzIil9KEwsUC5jZWxsWGZzKSxmdW5jdGlvbiBMRCh5LFApe3ZhciBMPTE7aWYoUCYmKEw9UC5sZW5ndGgpLGNpKHksIkJydEJlZ2luU3R5bGVzIixrdShMKSksY2koeSwiQnJ0U3R5bGUiLHR1KHt4ZklkOjAsYnVp''@;'; put 'put ''bHRpbklkOjAsbmFtZToiTm9ybWFsIn0pKSxQKWZvcih2YXIgUT0xO1E8UC5sZW5ndGg7KytRKWNpKHksIkJydFN0eWxlIix0dSh7eGZJZDpRLGJ1aWx0aW5JZDowLG5hbWU6UFtRXS5uYW1lfSkpO2NpKHksIkJydEVuZFN0eWxlcyIpfShMLFAuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiB5Qyh5''@;'; put 'put ''KXtjaSh5LCJCcnRCZWdpbkRYRnMiLGt1KDApKSxjaSh5LCJCcnRFbmREWEZzIil9KEwpLGZ1bmN0aW9uIFJEKHkpe2NpKHksIkJydEJlZ2luVGFibGVTdHlsZXMiLGZ1bmN0aW9uIE45KHksUCxMKXt2YXIgUT1mcigyMDUyKTtyZXR1cm4gUS53cml0ZV9zaGlmdCg0LHkpLEFkKFAsUSksQWQo''@;'; put 'put ''TCxRKSxRLmxlbmd0aD5RLmw/US5zbGljZSgwLFEubCk6UX0oMCwiVGFibGVTdHlsZU1lZGl1bTkiLCJQaXZvdFN0eWxlTWVkaXVtNCIpKSxjaSh5LCJCcnRFbmRUYWJsZVN0eWxlcyIpfShMKSxjaShMLCJCcnRFbmRTdHlsZVNoZWV0IiksTC5lbmQoKX1IaS5USEVNRT0iaHR0cDovL3NjaGVt''@;'; put 'put ''YXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSI7dmFyIEZEPVsiPC9hOmx0MT4iLCI8L2E6ZGsxPiIsIjwvYTpsdDI+IiwiPC9hOmRrMj4iLCI8L2E6YWNjZW50MT4iLCI8L2E6YWNjZW50Mj4iLCI8L2E6YWNjZW50Mz4iLCI8L2E6''@;'; put 'put ''YWNjZW50ND4iLCI8L2E6YWNjZW50NT4iLCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1bmN0aW9uIEI5KHksUCxMKXtQLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lPVtdO3ZhciBRPXt9Oyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''cmUpe3ZhciBwZT1sbihyZSk7c3dpdGNoKHBlWzBdKXtjYXNlIjxhOmNsclNjaGVtZSI6Y2FzZSI8L2E6Y2xyU2NoZW1lPiI6Y2FzZSI8L2E6c3JnYkNscj4iOmNhc2UiPC9hOnN5c0Nscj4iOmJyZWFrO2Nhc2UiPGE6c3JnYkNsciI6US5yZ2I9cGUudmFsO2JyZWFrO2Nhc2UiPGE6c3lzQ2xy''@;'; put 'put ''IjpRLnJnYj1wZS5sYXN0Q2xyO2JyZWFrO2Nhc2UiPGE6ZGsxPiI6Y2FzZSI8L2E6ZGsxPiI6Y2FzZSI8YTpsdDE+IjpjYXNlIjwvYTpsdDE+IjpjYXNlIjxhOmRrMj4iOmNhc2UiPC9hOmRrMj4iOmNhc2UiPGE6bHQyPiI6Y2FzZSI8L2E6bHQyPiI6Y2FzZSI8YTphY2NlbnQxPiI6Y2FzZSI8''@;'; put 'put ''L2E6YWNjZW50MT4iOmNhc2UiPGE6YWNjZW50Mj4iOmNhc2UiPC9hOmFjY2VudDI+IjpjYXNlIjxhOmFjY2VudDM+IjpjYXNlIjwvYTphY2NlbnQzPiI6Y2FzZSI8YTphY2NlbnQ0PiI6Y2FzZSI8L2E6YWNjZW50ND4iOmNhc2UiPGE6YWNjZW50NT4iOmNhc2UiPC9hOmFjY2VudDU+IjpjYXNl''@;'; put 'put ''IjxhOmFjY2VudDY+IjpjYXNlIjwvYTphY2NlbnQ2PiI6Y2FzZSI8YTpobGluaz4iOmNhc2UiPC9hOmhsaW5rPiI6Y2FzZSI8YTpmb2xIbGluaz4iOmNhc2UiPC9hOmZvbEhsaW5rPiI6Ii8iPT09cGVbMF0uY2hhckF0KDEpPyhQLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0ZELmluZGV4T2Yo''@;'; put 'put ''cGVbMF0pXT1RLFE9e30pOlEubmFtZT1wZVswXS5zbGljZSgzLHBlWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKEwmJkwuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiBjbHJTY2hlbWUiKX19KX1mdW5jdGlvbiBqOSgpe31mdW5jdGlvbiBIRCgp''@;'; put 'put ''e312YXIgWjQ9LzxhOmNsclNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Y2xyU2NoZW1lPi8sTkQ9LzxhOmZvbnRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZvbnRTY2hlbWU+LyxWRD0vPGE6Zm10U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmbXRTY2hlbWU+LyxDQz0vPGE6dGhlbWVF''@;'; put 'put ''bGVtZW50cyhbXj5dKik+W1xzXFNdKjxcL2E6dGhlbWVFbGVtZW50cz4vO2Z1bmN0aW9uIEdtKHksUCl7aWYoIXl8fDA9PT15Lmxlbmd0aClyZXR1cm4gR20ocmYoKSk7dmFyIEwsUT17fTtpZighKEw9eS5tYXRjaChDQykpKXRocm93IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91''@;'; put 'put ''bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gd0MoeSxQLEwpe3ZhciBRO1AudGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLFo0LEI5XSxbImZvbnRTY2hlbWUiLE5ELGo5XSxbImZtdFNjaGVtZSIsVkQsSERdXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtpZighKFE9eS5tYXRjaChy''@;'; put 'put ''ZVsxXSkpKXRocm93IG5ldyBFcnJvcihyZVswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7cmVbMl0oUSxQLEwpfSl9KExbMF0sUSxQKSxRLnJhdz15LFF9ZnVuY3Rpb24gcmYoeSxQKXtpZihQJiZQLnRoZW1lWExTWClyZXR1cm4gUC50aGVtZVhMU1g7aWYoeSYmInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiB5LnJhdylyZXR1cm4geS5yYXc7dmFyIEw9W0JuXTtyZXR1cm4gTFtMLmxlbmd0aF09JzxhOnRoZW1lIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIiBuYW1lPSJPZmZpY2UgVGhlbWUiPicsTFtMLmxlbmd0aF09''@;'; put 'put ''IjxhOnRoZW1lRWxlbWVudHM+IixMW0wubGVuZ3RoXT0nPGE6Y2xyU2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxMW0wubGVuZ3RoXT0nPGE6ZGsxPjxhOnN5c0NsciB2YWw9IndpbmRvd1RleHQiIGxhc3RDbHI9IjAwMDAwMCIvPjwvYTpkazE+JyxMW0wubGVuZ3RoXT0nPGE6bHQxPjxhOnN5c0Ns''@;'; put 'put ''ciB2YWw9IndpbmRvdyIgbGFzdENscj0iRkZGRkZGIi8+PC9hOmx0MT4nLExbTC5sZW5ndGhdPSc8YTpkazI+PGE6c3JnYkNsciB2YWw9IjFGNDk3RCIvPjwvYTpkazI+JyxMW0wubGVuZ3RoXT0nPGE6bHQyPjxhOnNyZ2JDbHIgdmFsPSJFRUVDRTEiLz48L2E6bHQyPicsTFtMLmxlbmd0aF09''@;'; put 'put ''JzxhOmFjY2VudDE+PGE6c3JnYkNsciB2YWw9IjRGODFCRCIvPjwvYTphY2NlbnQxPicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDI+PGE6c3JnYkNsciB2YWw9IkMwNTA0RCIvPjwvYTphY2NlbnQyPicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDM+PGE6c3JnYkNsciB2YWw9IjlCQkI1OSIvPjwv''@;'; put 'put ''YTphY2NlbnQzPicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDQ+PGE6c3JnYkNsciB2YWw9IjgwNjRBMiIvPjwvYTphY2NlbnQ0PicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDU+PGE6c3JnYkNsciB2YWw9IjRCQUNDNiIvPjwvYTphY2NlbnQ1PicsTFtMLmxlbmd0aF09JzxhOmFjY2VudDY+PGE6''@;'; put 'put ''c3JnYkNsciB2YWw9IkY3OTY0NiIvPjwvYTphY2NlbnQ2PicsTFtMLmxlbmd0aF09JzxhOmhsaW5rPjxhOnNyZ2JDbHIgdmFsPSIwMDAwRkYiLz48L2E6aGxpbms+JyxMW0wubGVuZ3RoXT0nPGE6Zm9sSGxpbms+PGE6c3JnYkNsciB2YWw9IjgwMDA4MCIvPjwvYTpmb2xIbGluaz4nLExbTC5s''@;'; put 'put ''ZW5ndGhdPSI8L2E6Y2xyU2NoZW1lPiIsTFtMLmxlbmd0aF09JzxhOmZvbnRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLExbTC5sZW5ndGhdPSI8YTptYWpvckZvbnQ+IixMW0wubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbWJyaWEiLz4nLExbTC5sZW5ndGhdPSc8YTplYSB0eXBlZmFj''@;'; put 'put ''ZT0iIi8+JyxMW0wubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJI''@;'; put 'put ''YW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBc''@;'; put 'put ''dTY2MGVcdTlhZDQiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9u''@;'; put 'put ''dCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLExbTC5sZW5ndGhdPSc8YTpm''@;'; put 'put ''b250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iTW9vbEJvcmFuIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsTFtMLmxlbmd0aF09''@;'; put 'put ''JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tl''@;'; put 'put ''ZSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNj''@;'; put 'put ''cmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsTFtMLmxlbmd0aF09JzxhOmZv''@;'; put 'put ''bnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxMW0wu''@;'; put 'put ''bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEg''@;'; put 'put ''UG90YSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlw''@;'; put 'put ''dD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLExbTC5sZW5ndGhdPSI8L2E6bWFqb3JGb250PiIsTFtMLmxlbmd0aF09IjxhOm1pbm9yRm9udD4iLExbTC5sZW5ndGhd''@;'; put 'put ''PSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FsaWJyaSIvPicsTFtMLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLExbTC5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMw''@;'; put 'put ''XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4n''@;'; put 'put ''LExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iQXJpYWwiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIg''@;'; put 'put ''dHlwZWZhY2U9IkFyaWFsIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmci''@;'; put 'put ''IHR5cGVmYWNlPSJWcmluZGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iRGF1blBlbmgiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0i''@;'; put 'put ''S25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlw''@;'; put 'put ''dD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29m''@;'; put 'put ''dCBIaW1hbGF5YSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5''@;'; put 'put ''cGVmYWNlPSJHYXV0YW1pIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNj''@;'; put 'put ''cmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsTFtMLmxlbmd0aF09Jzxh''@;'; put 'put ''OmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IkFyaWFsIi8+''@;'; put 'put ''JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxMW0wubGVuZ3RoXT0iPC9hOm1pbm9yRm9udD4iLExbTC5sZW5ndGhd''@;'; put 'put ''PSI8L2E6Zm9udFNjaGVtZT4iLExbTC5sZW5ndGhdPSc8YTpmbXRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLExbTC5sZW5ndGhdPSI8YTpmaWxsU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLExbTC5s''@;'; put 'put ''ZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsTFtMLmxlbmd0aF09IjxhOmdzTHN0PiIsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpz''@;'; put 'put ''Y2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMzUwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMzcwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9''@;'; put 'put ''IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxNTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09IjwvYTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2Nh''@;'; put 'put ''bGVkPSIxIi8+JyxMW0wubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsTFtMLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxMW0wubGVuZ3RoXT0iPGE6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGlu''@;'; put 'put ''dCB2YWw9IjEwMDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMTMwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48''@;'; put 'put ''YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09IjwvYTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIwIi8+JyxMW0wubGVuZ3RoXT0iPC9hOmdyYWRG''@;'; put 'put ''aWxsPiIsTFtMLmxlbmd0aF09IjwvYTpmaWxsU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPGE6bG5TdHlsZUxzdD4iLExbTC5sZW5ndGhdPSc8YTpsbiB3PSI5NTI1IiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIi''@;'; put 'put ''PjxhOnNoYWRlIHZhbD0iOTUwMDAiLz48YTpzYXRNb2QgdmFsPSIxMDUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLExbTC5sZW5ndGhdPSc8YTpsbiB3PSIyNTQwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249''@;'; put 'put ''ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsTFtMLmxlbmd0aF09JzxhOmxuIHc9IjM4MTAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZp''@;'; put 'put ''bGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxMW0wubGVuZ3RoXT0iPC9hOmxuU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5''@;'; put 'put ''bGU+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsTFtMLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjAwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM4MDAwIi8+''@;'; put 'put ''PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLExbTC5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsTFtMLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixMW0wubGVuZ3RoXT0nPGE6b3V0''@;'; put 'put ''ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicsTFtMLmxlbmd0aF09IjwvYTplZmZlY3RM''@;'; put 'put ''c3Q+IixMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsTFtMLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsTFtMLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLExbTC5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJv''@;'; put 'put ''dFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLExbTC5sZW5ndGhdPSc8YTpzY2VuZTNkPjxhOmNhbWVyYSBwcnN0PSJvcnRob2dy''@;'; put 'put ''YXBoaWNGcm9udCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjAiLz48L2E6Y2FtZXJhPjxhOmxpZ2h0UmlnIHJpZz0idGhyZWVQdCIgZGlyPSJ0Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMTIwMDAwMCIvPjwvYTpsaWdodFJpZz48L2E6c2NlbmUzZD4nLExbTC5sZW5ndGhd''@;'; put 'put ''PSc8YTpzcDNkPjxhOmJldmVsVCB3PSI2MzUwMCIgaD0iMjU0MDAiLz48L2E6c3AzZD4nLExbTC5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlTHN0PiIsTFtMLmxlbmd0aF09IjxhOmJnRmlsbFN0eWxlTHN0PiIsTFtMLmxlbmd0aF09Jzxh''@;'; put 'put ''OnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxMW0wubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLExbTC5sZW5ndGhdPSI8YTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9''@;'; put 'put ''InBoQ2xyIj48YTp0aW50IHZhbD0iNDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjQwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQ1MDAwIi8+PGE6c2hhZGUgdmFs''@;'; put 'put ''PSI5OTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIyMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjI1NTAwMCIvPjwvYTpz''@;'; put 'put ''Y2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09IjwvYTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iLTgwMDAwIiByPSI1MDAwMCIgYj0iMTgwMDAwIi8+PC9hOnBhdGg+JyxMW0wubGVuZ3RoXT0iPC9hOmdy''@;'; put 'put ''YWRGaWxsPiIsTFtMLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxMW0wubGVuZ3RoXT0iPGE6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjgwMDAwIi8+PGE6c2F0TW9kIHZhbD0i''@;'; put 'put ''MzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjMwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVu''@;'; put 'put ''Z3RoXT0iPC9hOmdzTHN0PiIsTFtMLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSI1MDAwMCIgcj0iNTAwMDAiIGI9IjUwMDAwIi8+PC9hOnBhdGg+JyxMW0wubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsTFtMLmxlbmd0aF09IjwvYTpi''@;'; put 'put ''Z0ZpbGxTdHlsZUxzdD4iLExbTC5sZW5ndGhdPSI8L2E6Zm10U2NoZW1lPiIsTFtMLmxlbmd0aF09IjwvYTp0aGVtZUVsZW1lbnRzPiIsTFtMLmxlbmd0aF09IjxhOm9iamVjdERlZmF1bHRzPiIsTFtMLmxlbmd0aF09IjxhOnNwRGVmPiIsTFtMLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQ''@;'; put 'put ''ci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMyI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjIiPjxhOnNj''@;'; put 'put ''aGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0ibHQxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsTFtMLmxlbmd0aF09IjwvYTpzcERlZj4iLExbTC5sZW5ndGhdPSI8YTpsbkRlZj4iLExbTC5sZW5n''@;'; put 'put ''dGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjAiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTpl''@;'; put 'put ''ZmZlY3RSZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9InR4MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLExbTC5sZW5ndGhdPSI8L2E6bG5EZWY+IixMW0wubGVuZ3Ro''@;'; put 'put ''XT0iPC9hOm9iamVjdERlZmF1bHRzPiIsTFtMLmxlbmd0aF09IjxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz4iLExbTC5sZW5ndGhdPSI8L2E6dGhlbWU+IixMLmpvaW4oIiIpfWZ1bmN0aW9uIGpEKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKS00LFE9W1BdO3N3aXRj''@;'; put 'put ''aChQKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOlFbMV09ZnVuY3Rpb24gejkoeSl7dmFyIFA9e307c3dpdGNoKFAueGNsclR5cGU9eS5yZWFkX3NoaWZ0KDIpLFAublRpbnRTaGFkZT15LnJlYWRfc2hpZnQoMiksUC54Y2xyVHlw''@;'; put 'put ''ZSl7Y2FzZSAwOmNhc2UgNDp5LmwrPTQ7YnJlYWs7Y2FzZSAxOlAueGNsclZhbHVlPWZ1bmN0aW9uIHFtKHksUCl7cmV0dXJuIGJjKHksUCl9KHksNCk7YnJlYWs7Y2FzZSAyOlAueGNsclZhbHVlPXZtKHkpO2JyZWFrO2Nhc2UgMzpQLnhjbHJWYWx1ZT1mdW5jdGlvbiBTQyh5KXtyZXR1cm4g''@;'; put 'put ''eS5yZWFkX3NoaWZ0KDQpfSh5KX1yZXR1cm4geS5sKz04LFB9KHkpO2JyZWFrO2Nhc2UgNjpRWzFdPWZ1bmN0aW9uIEJEKHksUCl7cmV0dXJuIGJjKHksUCl9KHksTCk7YnJlYWs7Y2FzZSAxNDpjYXNlIDE1OlFbMV09eS5yZWFkX3NoaWZ0KDE9PT1MPzE6Mik7YnJlYWs7ZGVmYXVsdDp0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBFeHRQcm9wIHR5cGU6ICIrUCsiICIrTCl9cmV0dXJuIFF9ZnVuY3Rpb24gVUQoeSxQKXtQLmZvckVhY2goZnVuY3Rpb24oTCl7c3dpdGNoKExbMF0pe2Nhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2Fz''@;'; put 'put ''ZSAxMTpjYXNlIDE0OmNhc2UgMTU6YnJlYWs7Y2FzZSAxMzp5LmZvbnQmJnkuZm9udC5jb2xvciYmQXJyYXkuaXNBcnJheShMWzFdLnhjbHJWYWx1ZSkmJih5LmZvbnQuY29sb3IucmdiPXoxKExbMV0ueGNsclZhbHVlKSl9fSl9ZnVuY3Rpb24gZGEoeSl7cmV0dXJuIHkvOTE0NDAwKm5mfWZ1''@;'; put 'put ''bmN0aW9uIE1DKHksUCl7dmFyIEw9e307aWYoeS5wb3MpTC54PWRhKHkucG9zLngpLEwueT1kYSh5LnBvcy55KTtlbHNle2lmKCF5LmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7TC5yPXkuZnJvbS5yfHwwLEwuYz15LmZyb20uY3x8MCx5LmZyb20uY09mZiYmKEwueD1kYSh5LmZyb20u''@;'; put 'put ''Y09mZikpLHkuZnJvbS5yT2ZmJiYoTC55PWRhKHkuZnJvbS5yT2ZmKSl9aWYoeS5leHQpTC53PWRhKHkuZXh0LngpLEwuaD1kYSh5LmV4dC55KTtlbHNle2lmKCF5LnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjtMLkM9eS50by5jLEwuUj15LnRvLnIseS50by5jT2ZmJiYoTC5YPWRhKHkudG8u''@;'; put 'put ''Y09mZikpLHkudG8uck9mZiYmKEwuWT1kYSh5LnRvLnJPZmYpKX1yZXR1cm4gTH1mdW5jdGlvbiBzZih5LFApe3ZhciBMPXt4Oi0xLHk6LTEsdzotMSxoOi0xfTtpZih5LnBvcylMLng9ZGEoeS5wb3MueCksTC55PWRhKHkucG9zLnkpO2Vsc2V7aWYoIXkuZnJvbSl0aHJvdyJiYWQgYW5jaG9y''@;'; put 'put ''IHN0YXJ0IjtMLng9WTEoUCx5LmZyb20uYywiQyIpK2RhKHkuZnJvbS5jT2ZmKSxMLnk9WTEoUCx5LmZyb20uciwiUiIpK2RhKHkuZnJvbS5yT2ZmKX1pZih5LmV4dClMLnc9ZGEoeS5leHQueCksTC5oPWRhKHkuZXh0LnkpO2Vsc2V7aWYoIXkudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO0wu''@;'; put 'put ''dz1ZMShQLHkudG8uYywiQyIpK2RhKHkudG8uY09mZiktTC54LEwuaD1ZMShQLHkudG8uciwiUiIpK2RhKHkudG8uck9mZiktTC55fXJldHVybiBMfWZ1bmN0aW9uIEttKHksUCl7dmFyIEw9e3I6LTEsYzotMSx4Oi0xLHk6LTEsUjotMSxDOi0xLFg6LTEsWTotMX07c3dpdGNoKHkudHlwZSl7''@;'; put 'put ''Y2FzZSJ0d29DZWxsQW5jaG9yIjpMLnI9eS5mcm9tLnIsTC55PWRhKHkuZnJvbS5yT2ZmKSxMLlI9eS50by5yLEwuWT1kYSh5LnRvLnJPZmYpLEwuYz15LmZyb20uYyxMLng9ZGEoeS5mcm9tLmNPZmYpLEwuQz15LnRvLmMsTC5YPWRhKHkudG8uY09mZik7YnJlYWs7Y2FzZSJvbmVDZWxsQW5j''@;'; put 'put ''aG9yIjpMLnI9eS5mcm9tLnIsTC55PWRhKHkuZnJvbS5yT2ZmKTt2YXIgUT1HMihQLEwucixMLnkrZGEoeS5leHQueSkpO0wuUj1RWzBdLEwuWT1RWzFdLEwuYz15LmZyb20uYyxMLng9ZGEoeS5mcm9tLmNPZmYpO3ZhciByZT1KbShQLEwuYyxMLngrZGEoeS5leHQueCkpO0wuQz1yZVswXSxM''@;'; put 'put ''Llg9cmVbMV07YnJlYWs7Y2FzZSJhYnNvbHV0ZUFuY2hvciI6dmFyIHBlPUcyKFAsMCxkYSh5LnBvcy55KSk7TC5yPXBlWzBdLEwueT1wZVsxXTt2YXIgX2U9RzIoUCxMLnIsTC55K2RhKHkuZXh0LnkpKTtMLlI9X2VbMF0sTC5ZPV9lWzFdO3ZhciB2ZT1HMihQLDAsZGEoeS5wb3MueCkpO0wu''@;'; put 'put ''Yz12ZVswXSxMLng9dmVbMV07dmFyIFNlPUcyKFAsTC5jLEwueCtkYSh5LmV4dC54KSk7TC5DPVNlWzBdLEwuWD1TZVsxXTticmVhaztkZWZhdWx0OnRocm93ImJhZCBhbmNob3IgdHlwZSAiK3kudHlwZX1yZXR1cm4gTH1mdW5jdGlvbiBYbSh5LFApe3ZhciBMPXkudHJpbSgpLnNwbGl0KC9c''@;'; put 'put ''cyosXHMqLyk7UFsiIXBvcyJdPXtjOitMWzBdLHg6K0xbMV0scjorTFsyXSx5OitMWzNdLEM6K0xbNF0sWDorTFs1XSxSOitMWzZdLFk6K0xbN119fWZ1bmN0aW9uIHhDKHksUCxMKXt2YXIgUT0tMTtpZihudWxsIT15LlJ8fG51bGwhPXkuQylRPTA7ZWxzZXtpZihudWxsPT15Lnh8fG51bGw9''@;'; put 'put ''PXkueXx8bnVsbD09eS53fHxudWxsPT15LmgpdGhyb3ciY2Fubm90IHBhcnNlIGFuY2hvciAiK0pTT04uc3RyaW5naWZ5KHkpO1E9MSsyKiEoeS5jfHx5LnIpfWlmKFEhPVApe3N3aXRjaChQKXtjYXNlIDA6Y2FzZSAxOmlmKDMhPVEpYnJlYWs7dmFyIHJlPUptKEwseS5jfHwwLHkueHx8MCk7''@;'; put 'put ''eS5jPXJlWzBdLHkueD1yZVsxXTt2YXIgcGU9RzIoTCx5LnJ8fDAseS55fHwwKTt5LnI9cGVbMF0seS55PXBlWzFdO2JyZWFrO2Nhc2UgMzppZigzPT1RKWJyZWFrO3ZhciBfZT15LmN8fDAsdmU9eS54fHwwO2RlbGV0ZSB5LmMsZGVsZXRlIHkueCx5Lng9KF9lP1k0KEwsX2UpOjApK3ZlO3Zh''@;'; put 'put ''ciBTZT15LnJ8fDAsSGU9eS55fHwwO2RlbGV0ZSB5LnIsZGVsZXRlIHkueSx5Lnk9KFNlP0YzKEwsU2UpOjApK0hlO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitQfXN3aXRjaChQKXtjYXNlIDA6aWYoMD09USlicmVhazt2YXIgVmU9Sm0o''@;'; put 'put ''TCx5LmN8fDAsKHkueHx8MCkreS53KTtkZWxldGUgeS53LHkuQz1WZVswXSx5Llg9VmVbMV07dmFyIEdlPUcyKEwseS5yfHwwLCh5Lnl8fDApK3kuaCk7ZGVsZXRlIHkuaCx5LlI9R2VbMF0seS5ZPUdlWzFdO2JyZWFrO2Nhc2UgMTpjYXNlIDM6aWYoMCE9USlicmVhazt2YXIgbnQ9eS5DfHww''@;'; put 'put ''LGR0PXkuWHx8MDtkZWxldGUgeS5DLGRlbGV0ZSB5LlgseS53PVk0KEwsbnQpK2R0LSh5LmM/WTQoTCx5LmMpOjApLSh5Lnh8fDApO3ZhciBDdD15LlJ8fDAsY3Q9eS5ZfHwwO2RlbGV0ZSB5LlIsZGVsZXRlIHkuWSx5Lmg9RjMoTCxDdCkrY3QtKHkucj9GMyhMLHkucik6MCktKHkueXx8MCk7''@;'; put 'put ''YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK1B9fX1mdW5jdGlvbiBFQyh5KXt2YXIgUD1beS5jfHwwLE1hdGgucm91bmQoeS54fHwwKSx5LnJ8fDAsTWF0aC5yb3VuZCh5Lnl8fDApXTtyZXR1cm4oUD1QLmNvbmNhdCh5LmgmJnkudz9bUFsw''@;'; put 'put ''XSxNYXRoLnJvdW5kKFBbMV0reS53KSxQWzJdLE1hdGgucm91bmQoUFszXSt5LmgpXTpbeS5DfHwwLE1hdGgucm91bmQoeS5YfHwwKSx5LlJ8fDAsTWF0aC5yb3VuZCh5Lll8fDApXSkpLmpvaW4oIiwgIil9ZnVuY3Rpb24gRjMoeSxQKXtpZigheSlyZXR1cm4gMDtmb3IodmFyIEw9MDstLVA+''@;'; put 'put ''PTA7KXt2YXIgUT0oKHlbIiFyb3dzIl18fFtdKVtQXXx8e30pLmhweDtudWxsPT1RJiYoUT0oKHlbIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1RJiYoUT0yNCksTCs9UX1yZXR1cm4gTH1mdW5jdGlvbiBZNCh5LFApe2lmKCF5KXJldHVybiAwO2Zvcih2YXIgTD0w''@;'; put 'put ''Oy0tUD49MDspe3ZhciBRPSgoeVsiIWNvbHMiXXx8W10pW1BdfHx7fSkud3B4O2lmKG51bGw9PVEmJihRPSgoeVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PVEpe3ZhciByZT17d2NoOjguNDN9O3B1KHJlKSx5WyIhY29scyJdJiYoeVsiIWNvbHMiXVtQXT1yZSks''@;'; put 'put ''UT1yZS53cHh9TCs9UX1yZXR1cm4gTH1mdW5jdGlvbiBZMSh5LFAsTCl7cmV0dXJuIkMiPT1MP1k0KHksUCk6RjMoeSxQKX1mdW5jdGlvbiBHMih5LFAsTCl7dmFyIFE9W1AsTF07aWYoIXkpcmV0dXJuIFE7Zm9yKDs7KXt2YXIgcmU9KHlbIiFyb3dzIl18fFtdKVtRWzBdXXx8e307aWYocmUu''@;'; put 'put ''aGlkZGVuKSsrUVswXTtlbHNle3ZhciBwZT1yZS5ocHg7aWYobnVsbD09cGUmJihwZT0oKHlbIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1wZSYmKHBlPVUxKDE1KSksUVsxXTxwZSlicmVhaztRWzBdKyssUVsxXS09cGV9fXJldHVybiBRfWZ1bmN0aW9uIEptKHks''@;'; put 'put ''UCxMKXt2YXIgUT1bUCxMXTtpZigheSlyZXR1cm4gUTtmb3IoOzspe3ZhciByZT0oeVsiIWNvbHMiXXx8W10pW1FbMF1dfHx7fTtpZihyZS5oaWRkZW58fDA9PT1yZS53cHgpKytRWzBdO2Vsc2V7dmFyIHBlPXJlLndweDtpZihudWxsPT1wZSYmKHBlPSgoeVsiIXNoZWV0Rm9ybWF0Il18fHt9''@;'; put 'put ''KS5jb2x8fHt9KS53cHgpLG51bGw9PXBlKXt2YXIgX2U9e3djaDo4LjQzfTtwdShfZSkseVsiIWNvbHMiXSYmKHlbIiFjb2xzIl1bUVswXV09X2UpLHBlPV9lLndweH1pZihRWzFdPHBlKWJyZWFrO1FbMF0rKyxRWzFdLT1wZX19cmV0dXJuIFF9ZnVuY3Rpb24gT3UoeSl7cmV0dXJuKCIwMDAw''@;'; put 'put ''MDAiKygibnVtYmVyIj09dHlwZW9mIHk/eS50b1N0cmluZygxNik6eSkpLnNsaWNlKC02KX1mdW5jdGlvbiBVZCh5LFAsTCl7dmFyIFE9InN0cmluZyI9PXR5cGVvZiBQPyEhTDohIVA7InN0cmluZyIhPXR5cGVvZiBQJiYoUD0iY29sb3IiKTt2YXIgcmU9IjwiK1ArIiAiO3JldHVybiB5LmF1''@;'; put 'put ''dG8/cmUrJ2F1dG89IjEiLz4nOnkuaW5kZXgmJm51bGw9PXkucmdiP3JlKydpbmRleGVkPSInK3kuaW5kZXgrJyIvPic6bnVsbCE9eS50aGVtZT9yZSsndGhlbWU9IicreS50aGVtZSsnIicrKHkudGludD8nIHRpbnQ9IicreS50aW50KyciJzoiIikrIi8+IjpudWxsIT15LnJnYj9yZSsncmdi''@;'; put 'put ''PSInKyhRPyJGRiI6IiIpK091KHkucmdiKSsnIi8+JzpyZSsiLz4ifWZ1bmN0aW9uIEgzKHksUCl7aWYoIXl8fG51bGw9PXkucmdiKXJldHVybiBQO2Zvcih2YXIgTD0oIjAwMDAwMCIreS5yZ2IudG9TdHJpbmcoMTYpKS5zbGljZSgtNiksUT1bTC5zbGljZSgwLDIpLEwuc2xpY2UoMiw0KSxM''@;'; put 'put ''LnNsaWNlKDQsNildLm1hcChmdW5jdGlvbihfZSl7cmV0dXJuIHBhcnNlSW50KF9lLDE2KX0pLHJlPTA7cmU8Q3IubGVuZ3RoOysrcmUpe3ZhciBwZT1DcltyZV07aWYocGVbMF09PVFbMF0mJnBlWzFdPT1RWzFdJiZwZVsyXT09UVsyXSlyZXR1cm4gcmV9cmV0dXJuIENyLmxlbmd0aDw2ND8o''@;'; put 'put ''Q3IucHVzaChbUVswXSxRWzFdLFFbMl1dKSxDci5sZW5ndGgtMSk6UH1mdW5jdGlvbiBXMSh5KXt2YXIgUD1bIiIsIiIsIiJdO2lmKCF5KXJldHVybltdO3ZhciBMPSIiLFE9eSYmeS5zP2Z1bmN0aW9uIFpEKHkpe3ZhciBQPVsiIiwiIl07aWYoIXkpcmV0dXJuIFA7aWYoeS5zeiYmKFBbMF0r''@;'; put 'put ''PSImIit5LnN6LFBbMV09IiYxMiIrUFsxXSkseS5uYW1lJiYoUFswXSs9JyYiJyt5Lm5hbWUrJyxSZWd1bGFyIicsUFsxXT0nJiItLFJlZ3VsYXIiJytQWzFdKSx5LmJvbGQmJihQWzBdKz0iJkIiLFBbMV09IiZCIitQWzFdKSx5LnVuZGVybGluZSl7dmFyIEw9Mj09eS51bmRlcmxpbmU/IiZF''@;'; put 'put ''IjoiJlUiO1BbMF0rPUwsUFsxXT1MK1BbMV19cmV0dXJuIHkuaXRhbGljJiYoUFswXSs9IiZJIixQWzFdPSImSSIrUFsxXSkseS5jb2xvciYmbnVsbCE9eS5jb2xvci5yZ2ImJihQWzBdKz0iJksiK091KHkuY29sb3IucmdiKSxQWzFdKz0iJkswMDAwMDAiKSx5LnN0cmlrZSYmKFBbMF0rPSIm''@;'; put 'put ''UyIsUFsxXT0iJlMiK1BbMV0pLCJzdXBlciI9PXkudmFsaWduJiYoUFswXSs9IiZYIixQWzFdPSImWCIrUFsxXSksInN1YiI9PXkudmFsaWduJiYoUFswXSs9IiZZIixQWzFdPSImWSIrUFsxXSksUH0oeS5zKTpbIiIsIiJdO3JldHVybiJzdHJpbmciPT10eXBlb2YgeT9beSx5LHldOm51bGwh''@;'; put 'put ''PXkuZmlyc3R8fG51bGwhPXkuZXZlbnx8bnVsbCE9eS5vZGQ/KG51bGwhPXkub2RkJiYoUFswXT1XMSh5Lm9kZClbMF0pLHZvaWQgMD09PXkuZmlyc3QmJlBbMF0mJihQWzFdPVBbMF0pLG51bGwhPXkuZmlyc3QmJihQWzFdPVcxKHkuZmlyc3QpWzBdKSxudWxsIT15LmV2ZW4mJihQWzJdPVcx''@;'; put 'put ''KHkuZXZlbilbMF0pLFApOnkubGVmdHx8eS5jZW50ZXJ8fHkucmlnaHQ/KHkubGVmdCYmKEwrPSImTCIrVzEoeS5sZWZ0KVswXSkseS5jZW50ZXImJihMKz0iJkMiK1cxKHkuY2VudGVyKVswXSkseS5yaWdodCYmKEwrPSImUiIrVzEoeS5yaWdodClbMF0pLFtMLEwsTF0pOm51bGwhPXkudj9b''@;'; put 'put ''TD1RWzBdK3kudi5yZXBsYWNlKC8mL2csIiYmIikrUVsxXSxMLExdOm51bGwhPXkudz9bTD1RWzBdK3kudytRWzFdLEwsTF06QXJyYXkuaXNBcnJheSh5LlIpPyh5LlIuZm9yRWFjaChmdW5jdGlvbihyZSl7TCs9VzEocmUpWzBdfSksW0wsTCxMXSk6W119dmFyIFFtPXsxOiJMZXR0ZXIiLDM6''@;'; put 'put ''IlRhYmxvaWQiLDU6IkxlZ2FsIiw3OiJFeGVjdXRpdmUiLDg6IkEzIiw5OiJBNCIsMTE6IkE1IiwxMjoiQjQiLDEzOiJCNSIsMTQ6IkZvbGlvIiwyMDoiRW52ZWxvcGUiLDM3OiJNb25hcmNoIiw3MDoiQTYifSxVOT1iZShRbSk7SGkuQ09OTj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb25uZWN0aW9ucyI7dmFyIHQ2PVNyKCJleHRlcm5hbExpbmsiLG51bGwse3htbG5zOmlzLm1haW5bMF19KTtIaS5JTUc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2''@;'; put 'put ''L3JlbGF0aW9uc2hpcHMvaW1hZ2UiLEhpLkRSQVc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZHJhd2luZyI7dmFyIFlEPXt0OiJ0b3AiLGN0cjoiY2VudGVyIixiOiJib3R0b20iLGp1c3Q6InRvcCIsZGlzdDoi''@;'; put 'put ''dG9wIn0sSUM9e2N0cjoiY2VudGVyIixkaXN0OiJjZW50ZXIiLGp1c3Q6ImNlbnRlciIsanVzdExvdzoiY2VudGVyIixsOiJsZWZ0IixyOiJyaWdodCIsdGhhaURpc3Q6ImNlbnRlciJ9O2Z1bmN0aW9uIExDKCl7dmFyIHk9W0JuXTtyZXR1cm4geS5wdXNoKCc8eGRyOndzRHIgeG1sbnM6eGRy''@;'; put 'put ''PSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvc3ByZWFkc2hlZXREcmF3aW5nIiB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIvPicpLHkuam9pbigiIil9ZnVuY3Rpb24gUkMoeSl7''@;'; put 'put ''dmFyIEwsUD15WyIhZGF0YSJdO3JldHVybiJiYXNlNjQiPT09eVsiIWRhdGF0eXBlIl0/KChMPVAubWF0Y2goL15kYXRhOi4qLC8pKSYmKFA9UC5zbGljZShMWzBdLmxlbmd0aCkpLHNlLmRlY29kZShQKSk6UH1IaS5UQUJMRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m''@;'; put 'put ''ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90YWJsZSI7dmFyIE4zPS88KD86XHcrOik/c2hhcGUoPzpbXlx3XVtePl0qKT8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3NoYXBlPi9nO2Z1bmN0aW9uIHFEKHksUCxMLFEpe3ZhciByZT1bMjE2MDAsMjE2MDBdLHBlPVsibTAsMGwwIixy''@;'; put 'put ''ZVsxXSxyZVswXSxyZVsxXSxyZVswXSwiMHhlIl0uam9pbigiLCIpLF9lPVtTcigieG1sIixudWxsLHsieG1sbnM6diI6V2kudiwieG1sbnM6byI6V2kubywieG1sbnM6eCI6V2kueCwieG1sbnM6bXYiOldpLm12fSkucmVwbGFjZSgvXC8+LywiPiIpLFNyKCJvOnNoYXBlbGF5b3V0IixTcigi''@;'; put 'put ''bzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCJ9KSx7InY6ZXh0IjoiZWRpdCJ9KV0sdmU9MTAyNCp5LFNlPUx8fFtdO1NlLmxlbmd0aD4wJiZfZS5wdXNoKFNyKCJ2OnNoYXBldHlwZSIsW1NyKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxTcigidjpwYXRoIixudWxs''@;'; put 'put ''LHtzaGFkb3dvazoiZiIsZXh0cnVzaW9ub2s6ImYiLHN0cm9rZW9rOiJmIixmaWxsb2s6ImYiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KSxTcigibzpsb2NrIixudWxsLHsidjpleHQiOiJlZGl0IixzaGFwZXR5cGU6InQifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDEiLGNvb3Jkc2l6''@;'; put 'put ''ZTpyZS5qb2luKCIsIiksIm86c3B0IjoyMDEscGF0aDpwZX0pKSxTZS5mb3JFYWNoKGZ1bmN0aW9uKFZlKXsrK3ZlLF9lPV9lLmNvbmNhdChmdW5jdGlvbiBQQyh5LFApe3ZhciBMPXtpZDoiX3gwMDAwX3MiK1AsdHlwZToiI194MDAwMF90MjAxIixzdHlsZToibXNvLXdyYXAtc3R5bGU6dGln''@;'; put 'put ''aHQifTsoIlJhZGlvIj09eVsiIXR5cGUiXXx8IkNoZWNrYm94Ij09eVsiIXR5cGUiXXx8Ikxpc3QiPT15WyIhdHlwZSJdfHwiRHJvcCI9PXlbIiF0eXBlIl0pJiYoTC5zdHJva2VkPSJmIiksIkxhYmVsIj09eVsiIXR5cGUiXSYmKEwuZmlsbGVkPSJmIik7dmFyIFE9IiI7eS50JiZPQ1t5WyIh''@;'; put 'put ''dHlwZSJdXSYmKFE9T0NbeVsiIXR5cGUiXV0ucmVwbGFjZSgvIyMjIy8sRnIoeS50KSkpO3ZhciByZT1bXTtyZXR1cm4geS5tYWNybyYmcmUucHVzaChmcygieDpGbWxhTWFjcm8iLHkubWFjcm8pKSx5LmxpbmsmJnJlLnB1c2goZnMoIng6Rm1sYUxpbmsiLHkubGluaykpLHkudmFsJiZyZS5w''@;'; put 'put ''dXNoKGZzKCJSYWRpbyI9PXlbIiF0eXBlIl18fCJDaGVja2JveCI9PXlbIiF0eXBlIl0/Ing6Q2hlY2tlZCI6Ing6VmFsIixTdHJpbmcoeS52YWwpKSkseS5yZWYmJnJlLnB1c2goZnMoIng6Rm1sYVJhbmdlIix5LnJlZikpLHkuc2VsJiYiTGlzdCI9PXlbIiF0eXBlIl0mJnJlLnB1c2goZnMo''@;'; put 'put ''Ing6U2VsVHlwZSIseS5zZWwpKSx5Lm1pbiYmcmUucHVzaChmcygieDpNaW4iLFN0cmluZyh5Lm1pbikpKSx5Lm1heCYmcmUucHVzaChmcygieDpNYXgiLFN0cmluZyh5Lm1heCkpKSx5LnN0ZXAmJnJlLnB1c2goZnMoIng6SW5jIixTdHJpbmcoeS5zdGVwKSkpLHkucGFnZSYmcmUucHVzaChm''@;'; put 'put ''cygieDpQYWdlIixTdHJpbmcoeS5wYWdlKSkpLFtdLmNvbmNhdChbIjx2OnNoYXBlIitQYShMKSsiPiJdKS5jb25jYXQoVzlbeVsiIXR5cGUiXV18fFtdKS5jb25jYXQoW1FdKS5jb25jYXQoWyc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9IicreVsiIXR5cGUiXSsnIj4nLGZzKCJ4OkFuY2hv''@;'; put 'put ''ciIsRUMoeVsiIXBvcyJdKSksZnMoIng6UHJpbnRPYmplY3QiLCJGYWxzZSIpXSkuY29uY2F0KHJlKS5jb25jYXQoTFpbeVsiIXR5cGUiXV18fFtdKS5jb25jYXQoWyI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShWZSx2ZSkpfSk7dmFyIEhlPVB8fFtdO3JldHVybiBIZS5sZW5n''@;'; put 'put ''dGg+MCYmX2UucHVzaChTcigidjpzaGFwZXR5cGUiLFtTcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksU3IoInY6cGF0aCIsbnVsbCx7Z3JhZGllbnRzaGFwZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNv''@;'; put 'put ''b3Jkc2l6ZTpyZS5qb2luKCIsIiksIm86c3B0IjoyMDIscGF0aDpwZX0pKSxIZS5mb3JFYWNoKGZ1bmN0aW9uKFZlKXsrK3ZlLF9lPV9lLmNvbmNhdChmdW5jdGlvbiBLNCh5LFAsTCl7dmFyIFE9c3MoeVswXSkscmU9eVsxXS5maWxsfHx7fTt5WzFdLnMmJihyZT17dHlwZTp5WzFdLnMucGF0''@;'; put 'put ''dGVyblR5cGV8fCJzb2xpZCJ9LHlbMV0ucy5mZ0NvbG9yJiYocmUuY29sb3IyPXJlLmNvbG9yMT0iIyIrT3UoeVsxXS5zLmZnQ29sb3IucmdiKSkseVsxXS5zLmJnQ29sb3ImJihyZS5jb2xvcjI9IiMiK091KHlbMV0ucy5iZ0NvbG9yLnJnYikpKTt2YXIgcGU9e2NvbG9yMjpyZS5jb2xvcjJ8''@;'; put 'put ''fCIjQkVGRjgyIix0eXBlOnJlLnR5cGV8fCJncmFkaWVudCJ9OyJncmFkaWVudCI9PXBlLnR5cGUmJihwZS5hbmdsZT0iLTE4MCIpO3ZhciBfZT0iZ3JhZGllbnQiPT1wZS50eXBlP1NyKCJvOmZpbGwiLG51bGwse3R5cGU6ImdyYWRpZW50VW5zY2FsZWQiLCJ2OmV4dCI6InZpZXcifSk6bnVs''@;'; put 'put ''bCx2ZT1TcigidjpmaWxsIixfZSxwZSksU2U9e307eVsxXS5zaGFkb3cmJih5WzFdLnNoYWRvdy5jb2xvciYmKFNlLmNvbG9yPXlbMV0uc2hhZG93LmNvbG9yKSx5WzFdLnNoYWRvdy5vbiYmKFNlLm9uPXlbMV0uc2hhZG93Lm9uKSksU2Uub2JzY3VyZWQ9InQiO3ZhciBIZT0hMCxWZT0hMCxH''@;'; put 'put ''ZT15WzFdWyIhcG9zIl0/b24oeVsxXVsiIXBvcyJdKTpudWxsO3JldHVybiBHZSYmKFZlPW51bGw9PUdlLlImJm51bGw9PUdlLkMmJm51bGw9PUdlLlgmJm51bGw9PUdlLlksSGU9IUdlLnImJiFHZS5jLHhDKEdlLDAsTCkpLFsiPHY6c2hhcGUiK1BhKHtpZDoiX3gwMDAwX3MiK1AsdHlwZToi''@;'; put 'put ''I194MDAwMF90MjAyIixzdHlsZToicG9zaXRpb246YWJzb2x1dGU7IG1hcmdpbi1sZWZ0OjgwcHQ7bWFyZ2luLXRvcDo1cHQ7d2lkdGg6MTA0cHQ7aGVpZ2h0OjY0cHQ7ei1pbmRleDoxMCIrKHlbMV0uaGlkZGVuPyI7dmlzaWJpbGl0eTpoaWRkZW4iOiIiKSxmaWxsY29sb3I6cmUuY29sb3Ix''@;'; put 'put ''fHwiI0VDRkFENCIsc3Ryb2tlY29sb3I6KHlbMV0uc3Ryb2tlfHx7fSkuY29sb3J8fCIjZWRlYWExIn0pKyI+Iix2ZSxTcigidjpzaGFkb3ciLG51bGwsU2UpLFNyKCJ2OnBhdGgiLG51bGwseyJvOmNvbm5lY3R0eXBlIjoibm9uZSJ9KSwnPHY6dGV4dGJveD48ZGl2IHN0eWxlPSJ0ZXh0LWFs''@;'; put 'put ''aWduOmxlZnQiPjwvZGl2Pjwvdjp0ZXh0Ym94PicsJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iTm90ZSI+JyxIZT8iPHg6TW92ZVdpdGhDZWxscy8+IjoiIixWZT8iPHg6U2l6ZVdpdGhDZWxscy8+IjoiIixmcygieDpBbmNob3IiLEdlP0VDKEdlKTp5WzFdLnJhd2FuY2hvcnx8W1EuYysx''@;'; put 'put ''LDAsUS5yKzEsMCxRLmMrMywyMCxRLnIrNSwyMF0uam9pbigiLCIpKSxmcygieDpBdXRvRmlsbCIsIkZhbHNlIiksZnMoIng6Um93IixTdHJpbmcoUS5yKSksZnMoIng6Q29sdW1uIixTdHJpbmcoUS5jKSkseVsxXS5oaWRkZW4/IiI6Ijx4OlZpc2libGUvPiIsIjwveDpDbGllbnREYXRhPiIs''@;'; put 'put ''IjwvdjpzaGFwZT4iXX0oVmUsdmUsUSkpfSksX2UucHVzaCgiPC94bWw+IiksX2Uuam9pbigiIil9dmFyIExaPXtCdXR0b246WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpUZXh0SEFsaWduPkNlbnRlcjwveDpUZXh0SEFsaWduPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVy''@;'; put 'put ''PC94OlRleHRWQWxpZ24+Il0sR0JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4Ok5vVGhyZWVELz4iXSxMYWJlbDpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5l''@;'; put 'put ''PiJdLFJhZGlvOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sQ2hlY2tib3g6WyI8''@;'; put 'put ''eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxEcm9wOlsiPHg6U2l6ZVdpdGhDZWxscy8+''@;'; put 'put ''IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpTZWxUeXBlPlNpbmdsZTwveDpTZWxUeXBlPiIsIjx4OkRyb3BTdHlsZT5Db21ibzwveDpEcm9wU3R5bGU+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6RHJvcExpbmVzPjQ8L3g6RHJv''@;'; put 'put ''cExpbmVzPiJdLExpc3Q6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OlZhbD4wPC94OlZhbD4iLCI8eDpNaW4+MDwveDpNaW4+IiwiPHg6TWF4PjU8L3g6TWF4''@;'; put 'put ''PiIsIjx4OkluYz4xPC94OkluYz4iLCI8eDpQYWdlPjQ8L3g6UGFnZT4iLCI8eDpEeD4xNTwveDpEeD4iXSxTY3JvbGw6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpIb3Jpei8+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU3BpbjpbIjx4OkR4PjE1PC94OkR4PiJdfSxPQz17QnV0dG9uOiI8djp0''@;'; put 'put ''ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGZvbnQgZmFjZT0nQ2FsaWJyaScgc2l6ZT0nMjQwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4i''@;'; put 'put ''LEdCb3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rp''@;'; put 'put ''dj48L3Y6dGV4dGJveD4iLFJhZGlvOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9J2F1dG8nPiMj''@;'; put 'put ''IyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixMYWJlbDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNv''@;'; put 'put ''bG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsQ2hlY2tib3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdy''@;'; put 'put ''YW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLHNoZWV0anM6ImRhZnVxIn0sVzk9e0J1dHRvbjpbJzx2OmZpbGwgY29sb3IyPSIjZjBmMGYwIFs2N10iIG86ZGV0ZWN0bW91c2VjbGljaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9''@;'; put 'put ''ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sR0JveDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sRHJvcDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGlzdDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0''@;'; put 'put ''ZXh0PSJ0Ii8+J10sU3BpbjpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU2Nyb2xsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMYWJlbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+''@;'; put 'put ''J10sUmFkaW86Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxDaGVja2JveDpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2Nr''@;'; put 'put ''IHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLHNoZWV0anM6W119O2Z1bmN0aW9uIG42KHksUCxMLFEpe3ZhciByZT17IiFpZCI6e319LHBlPVtTcigieG1sIixudWxsLHsieG1sbnM6diI6V2kudiwieG1sbnM6byI6V2kubywieG1sbnM6eCI6V2kueH0pLnJlcGxhY2UoL1wvPi8sIj4i''@;'; put 'put ''KSxTcigibzpzaGFwZWxheW91dCIsU3IoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQiLGRhdGE6MX0pLHsidjpleHQiOiJlZGl0In0pLCc8djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIgbzpwcmVmZXJyZWxhdGl2ZT0i''@;'; put 'put ''dCIgcGF0aD0ibUA0QDVsQDRAMTFAOUAxMUA5QDV4ZSIgZmlsbGVkPSJmIiBzdHJva2VkPSJmIj4nLCc8djpzdHJva2Ugam9pbnN0eWxlPSJtaXRlciIvPicsIjx2OmZvcm11bGFzPiIsJzx2OmYgZXFuPSJpZiBsaW5lRHJhd24gcGl4ZWxMaW5lV2lkdGggMCIvPicsJzx2OmYgZXFuPSJzdW0g''@;'; put 'put ''QDAgMSAwIi8+JywnPHY6ZiBlcW49InN1bSAwIDAgQDEiLz4nLCc8djpmIGVxbj0icHJvZCBAMiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDAg''@;'; put 'put ''MSIvPicsJzx2OmYgZXFuPSJwcm9kIEA2IDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0ic3VtIEA4IDIxNjAwIDAiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDEwIDIx''@;'; put 'put ''NjAwIDAiLz4nLCI8L3Y6Zm9ybXVsYXM+IiwnPHY6cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBncmFkaWVudHNoYXBlb2s9InQiIG86Y29ubmVjdHR5cGU9InJlY3QiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPicsIjwvdjpzaGFwZXR5cGU+Il0sX2U9MTtbImhl''@;'; put 'put ''YWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24odmUpe1FbdmVdJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24oU2Upe1FbdmVdW1NlXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtpZihBcnJheS5pc0FycmF5KFFb''@;'; put 'put ''dmVdW1NlXVtIZV0pKWZvcih2YXIgVmU9MDtWZTxRW3ZlXVtTZV1bSGVdLmxlbmd0aDsrK1ZlKWlmKFFbdmVdW1NlXVtIZV1bVmVdKXt2YXIgR2U9UVt2ZV1bU2VdW0hlXVtWZV07aWYoInJlbW90ZSI9PUdlWyIhZGF0YXR5cGUiXSl0aHJvdyJDYW5ub3QgdXNlIGxpbmtlZCBpbWFnZSBpbiBo''@;'; put 'put ''ZWFkZXIgb3IgZm9vdGVyIjtmb3IoO3ZuKHksInhsL21lZGlhL2ltYWdlIitfZSsiLmpwZyIpOykrK19lO3kuZmlsZSgieGwvbWVkaWEvaW1hZ2UiK19lKyIuanBnIixSQyhHZSkse2JpbmFyeTohMH0pLHpvKHJlLC0xLCIuLi9tZWRpYS9pbWFnZSIrX2UrIi5qcGciLEhpLklNRyk7dmFyIG50''@;'; put 'put ''PSJfeDAwMDBfcyIrKDEwMjUrR2UuX2NudCksZHQ9InBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowO3otaW5kZXg6IisoR2UuX2NudCsxKSsiOyI7ZHQrPSJ3aWR0aDoiK0dlWyIhcG9zIl0udysicHg7IixkdCs9ImhlaWdodDoiK0dlWyIhcG9zIl0uaCsicHg7''@;'; put 'put ''Ijt2YXIgQ3Q9SGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7Im9kZCIhPT1TZSYmKEN0Kz1TZS50b1VwcGVyQ2FzZSgpKSxRW3ZlXVtTZV1bSGVdLmxlbmd0aD4xJiYoQ3QrPVZlKSxwZS5wdXNoKFNyKCJ2OnNoYXBlIixbJzx2OmltYWdlZGF0''@;'; put 'put ''YSBvOnJlbGlkPSJySWQnKyhHZS5fY250KzEpKyciIG86dGl0bGU9InNoZWV0anMiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLmpvaW4oIiIpLHtpZDpDdCwibzpzcGlkIjpudCx0eXBlOiIjX3gwMDAwX3Q3NSIsc3R5bGU6ZHR9KSl9fSl9KX0pLHBlLnB1c2go''@;'; put 'put ''IjwveG1sPiIpLHkuZmlsZSgieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIrTCsiSEYudm1sIixwZS5qb2luKCIiKSkseS5maWxlKCJ4bC9kcmF3aW5ncy9fcmVscy92bWxEcmF3aW5nIitMKyJIRi52bWwucmVscyIsWGEocmUpKX1IaS5DTU5UPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NvbW1lbnRzIjt2YXIgSEM9U3IoImNvbW1lbnRzIixudWxsLHt4bWxuczppcy5tYWluWzBdfSk7ZnVuY3Rpb24gTkMoeSl7dmFyIFA9W0JuLEhDXSxMPVtdO3JldHVybiBQLnB1c2goIjxhdXRob3JzPiIpLHkuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihRKXtRWzFdLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBwZT1GcihyZS5hKTtMLmluZGV4T2YocGUpPi0xfHwoTC5wdXNoKHBlKSxQLnB1c2goIjxhdXRob3I+IitwZSsiPC9hdXRob3I+IikpfSl9KSxQLnB1c2goIjwvYXV0aG9ycz4iKSxQLnB1c2goIjxjb21tZW50TGlz''@;'; put 'put ''dD4iKSx5LmZvckVhY2goZnVuY3Rpb24oUSl7UVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtQLnB1c2goJzxjb21tZW50IHJlZj0iJytRWzBdKyciIGF1dGhvcklkPSInK0wuaW5kZXhPZihGcihyZS5hKSkrJyI+PHRleHQ+JyksUC5wdXNoKHJlLlI/SmgocmUuUik6ZnMoInQiLG51bGw9PXJl''@;'; put 'put ''LnQ/IiI6RnIocmUudCkpKSxQLnB1c2goIjwvdGV4dD48L2NvbW1lbnQ+Iil9KX0pLFAucHVzaCgiPC9jb21tZW50TGlzdD4iKSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvY29tbWVudHM+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9dmFyIFhEPXdjO2Z1''@;'; put 'put ''bmN0aW9uIGVJKHkpe3ZhciBQPXljKCksTD1bXTtyZXR1cm4gY2koUCwiQnJ0QmVnaW5Db21tZW50cyIpLGNpKFAsIkJydEJlZ2luQ29tbWVudEF1dGhvcnMiKSx5LmZvckVhY2goZnVuY3Rpb24oUSl7UVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtMLmluZGV4T2YocmUuYSk+LTF8fChMLnB1''@;'; put 'put ''c2gocmUuYS5zbGljZSgwLDU0KSksY2koUCwiQnJ0Q29tbWVudEF1dGhvciIsZnVuY3Rpb24gSkQoeSl7cmV0dXJuIG5jKHkuc2xpY2UoMCw1NCkpfShyZS5hKSkpfSl9KSxjaShQLCJCcnRFbmRDb21tZW50QXV0aG9ycyIpLGNpKFAsIkJydEJlZ2luQ29tbWVudExpc3QiKSx5LmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oUSl7UVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtyZS5pYXV0aG9yPUwuaW5kZXhPZihyZS5hKTt2YXIgcGU9e3M6c3MoUVswXSksZTpzcyhRWzBdKX07Y2koUCwiQnJ0QmVnaW5Db21tZW50IixmdW5jdGlvbiBLRCh5LFApe3JldHVybiBudWxsPT1QJiYoUD1mcigzNikpLFAu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCx5WzFdLmlhdXRob3IpLEQxKHlbMF0sUCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApLFB9KFtwZSxyZV0pKSxyZS50JiZyZS50Lmxlbmd0aD4wJiZjaShQLCJCcnRDb21tZW50''@;'; put 'put ''VGV4dCIsZnVuY3Rpb24gYXIoeSxQKXt2YXIgTD0hMTtyZXR1cm4gbnVsbD09UCYmKEw9ITAsUD1mcigyMys0KnkudC5sZW5ndGgpKSxQLndyaXRlX3NoaWZ0KDEsMSksbmMoeS50LFApLFAud3JpdGVfc2hpZnQoNCwxKSxmdW5jdGlvbiBrZCh5LFApe1B8fChQPWZyKDQpKSxQLndyaXRlX3No''@;'; put 'put ''aWZ0KDIseS5pY2h8fDApLFAud3JpdGVfc2hpZnQoMix5LmlmbnR8fDApfSh7aWNoOjAsaWZudDowfSxQKSxMP1Auc2xpY2UoMCxQLmwpOlB9KHJlKSksY2koUCwiQnJ0RW5kQ29tbWVudCIpLGRlbGV0ZSByZS5pYXV0aG9yfSl9KSxjaShQLCJCcnRFbmRDb21tZW50TGlzdCIpLGNpKFAsIkJy''@;'; put 'put ''dEVuZENvbW1lbnRzIiksUC5lbmQoKX12YXIgJDI9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsUlo9WyJ4bHNiIiwieGxzbSIsInhsYW0iLCJiaWZmOCIsInhsYSJdO0hpLkRTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQv''@;'; put 'put ''MjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0IixIaS5NUz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCI7dmFyIGFmPWZ1bmN0aW9uKCl7dmFyIHk9LyhefFteQS1aYS16X10pUihcWz8tP1xkK1xdfFsxLTld''@;'; put 'put ''XGQqfClDKFxbPy0/XGQrXF18WzEtOV1cZCp8KSg/IVtBLVphLXowLTlfXSkvZyxQPXtyOjAsYzowfTtmdW5jdGlvbiBMKFEscmUscGUsX2Upe3ZhciB2ZT0hMSxTZT0hMTswPT1wZS5sZW5ndGg/U2U9ITA6IlsiPT1wZS5jaGFyQXQoMCkmJihTZT0hMCxwZT1wZS5zbGljZSgxLC0xKSksMD09''@;'; put 'put ''X2UubGVuZ3RoP3ZlPSEwOiJbIj09X2UuY2hhckF0KDApJiYodmU9ITAsX2U9X2Uuc2xpY2UoMSwtMSkpO3ZhciBIZT1wZS5sZW5ndGg+MD8wfHBhcnNlSW50KHBlLDEwKTowLFZlPV9lLmxlbmd0aD4wPzB8cGFyc2VJbnQoX2UsMTApOjA7cmV0dXJuIHZlP1ZlKz1QLmM6LS1WZSxTZT9IZSs9''@;'; put 'put ''UC5yOi0tSGUscmUrKHZlPyIiOiIkIikrTnMoVmUpKyhTZT8iIjoiJCIpK0hzKEhlKX1yZXR1cm4gZnVuY3Rpb24ocmUscGUpe3JldHVybiBQPXBlLHJlLnJlcGxhY2UoeSxMKX19KCksJDk9LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0Et''@;'; put 'put ''Wl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2cscTk9ZnVuY3Rpb24oUCxMKXtyZXR1cm4gUC5yZXBsYWNlKCQ5LGZ1bmN0aW9u''@;'; put 'put ''KFEscmUscGUsX2UsdmUsU2Upe3ZhciBIZT1qaChfZSktKHBlPzA6TC5jKSxWZT1CMChTZSktKHZlPzA6TC5yKTtyZXR1cm4gcmUrIlIiKygwPT1WZT8iIjp2ZT9WZSsxOiJbIitWZSsiXSIpKyJDIisoMD09SGU/IiI6cGU/SGUrMToiWyIrSGUrIl0iKX0pfTtmdW5jdGlvbiBCQyh5LFApe3Jl''@;'; put 'put ''dHVybiB5LnJlcGxhY2UoJDksZnVuY3Rpb24oTCxRLHJlLHBlLF9lLHZlKXtyZXR1cm4gUSsoIiQiPT1yZT9yZStwZTpOcyhqaChwZSkrUC5jKSkrKCIkIj09X2U/X2UrdmU6SHMoQjAodmUpK1AucikpfSkucmVwbGFjZSgvKFxkKyk6KFxkKykvZyxmdW5jdGlvbihMLFEscmUpe3JldHVybiBI''@;'; put 'put ''cyhCMChRKStQLnIpKyI6IitIcyhCMChyZSkrUC5yKX0pfWZ1bmN0aW9uIG5JKHksUCxMKXt2YXIgcmU9V3MoUCkucyxwZT1zcyhMKTtyZXR1cm4gQkMoeSx7cjpwZS5yLXJlLnIsYzpwZS5jLXJlLmN9KX1mdW5jdGlvbiBHMSh5KXtyZXR1cm4geS5yZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1''@;'; put 'put ''bmN0aW9uIEJhKHkpe3kubCs9MX1mdW5jdGlvbiBaZCh5LFApe3ZhciBMPXkucmVhZF9zaGlmdCgxPT1QPzE6Mik7cmV0dXJuWzE2MzgzJkwsTD4+MTQmMSxMPj4xNSYxXX1mdW5jdGlvbiBYOSh5LFAsTCl7dmFyIFE9MjtpZihMKXtpZihMLmJpZmY+PTImJkwuYmlmZjw9NSlyZXR1cm4gSjko''@;'; put 'put ''eSk7MTI9PUwuYmlmZiYmKFE9NCl9dmFyIHJlPXkucmVhZF9zaGlmdChRKSxwZT15LnJlYWRfc2hpZnQoUSksX2U9WmQoeSwyKSx2ZT1aZCh5LDIpO3JldHVybntzOntyOnJlLGM6X2VbMF0sY1JlbDpfZVsxXSxyUmVsOl9lWzJdfSxlOntyOnBlLGM6dmVbMF0sY1JlbDp2ZVsxXSxyUmVsOnZl''@;'; put 'put ''WzJdfX19ZnVuY3Rpb24gSjkoeSl7dmFyIFA9WmQoeSwyKSxMPVpkKHksMiksUT15LnJlYWRfc2hpZnQoMSkscmU9eS5yZWFkX3NoaWZ0KDEpO3JldHVybntzOntyOlBbMF0sYzpRLGNSZWw6UFsxXSxyUmVsOlBbMl19LGU6e3I6TFswXSxjOnJlLGNSZWw6TFsxXSxyUmVsOkxbMl19fX1mdW5j''@;'; put 'put ''dGlvbiBySSh5LFAsTCl7aWYoTCYmTC5iaWZmPj0yJiZMLmJpZmY8PTUpcmV0dXJuIGZ1bmN0aW9uIFZaKHkpe3ZhciBQPVpkKHksMiksTD15LnJlYWRfc2hpZnQoMSk7cmV0dXJue3I6UFswXSxjOkwsY1JlbDpQWzFdLHJSZWw6UFsyXX19KHkpO3ZhciBRPXkucmVhZF9zaGlmdChMJiYxMj09''@;'; put 'put ''TC5iaWZmPzQ6MikscmU9WmQoeSwyKTtyZXR1cm57cjpRLGM6cmVbMF0sY1JlbDpyZVsxXSxyUmVsOnJlWzJdfX1mdW5jdGlvbiBROSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMik7cmV0dXJue3I6UCxjOjI1NSZMLGZRdW90ZWQ6ISEoMTYzODQmTCksY1JlbDpM''@;'; put 'put ''Pj4xNSxyUmVsOkw+PjE1fX1mdW5jdGlvbiBxMih5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpLHkucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gR0MoeSxQKXt2YXIgTD1beS5yZWFkX3NoaWZ0KDEpXTtpZigxMj09UClzd2l0Y2goTFswXSl7Y2FzZSAyOkxbMF09NDticmVhaztjYXNlIDQ6TFsw''@;'; put 'put ''XT0xNjticmVhaztjYXNlIDA6TFswXT0xO2JyZWFrO2Nhc2UgMTpMWzBdPTJ9c3dpdGNoKExbMF0pe2Nhc2UgNDpMWzFdPVNvKHksMSk/IlRSVUUiOiJGQUxTRSIsMTIhPVAmJih5LmwrPTcpO2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjpMWzFdPVFvW3lbeS5sXV0seS5sKz0xMj09UD80Ojg7YnJl''@;'; put 'put ''YWs7Y2FzZSAwOnkubCs9ODticmVhaztjYXNlIDE6TFsxXT1tYSh5KTticmVhaztjYXNlIDI6TFsxXT1WMih5LDAse2JpZmY6UD4wJiZQPDg/MjpQfSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBTZXJBcjogIitMWzBdKX1yZXR1cm4gTH1mdW5jdGlvbiBydih5LFAsTCl7''@;'; put 'put ''Zm9yKHZhciBRPXkucmVhZF9zaGlmdCgxMj09TC5iaWZmPzQ6MikscmU9W10scGU9MDtwZSE9UTsrK3BlKXJlLnB1c2goKDEyPT1MLmJpZmY/SmM6S2gpKHksOCkpO3JldHVybiByZX1mdW5jdGlvbiBnSSh5LFAsTCl7dmFyIFE9MCxyZT0wOzEyPT1MLmJpZmY/KFE9eS5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''LHJlPXkucmVhZF9zaGlmdCg0KSk6KHJlPTEreS5yZWFkX3NoaWZ0KDEpLFE9MSt5LnJlYWRfc2hpZnQoMikpLEwuYmlmZj49MiYmTC5iaWZmPDgmJigtLVEsMD09LS1yZSYmKHJlPTI1NikpO2Zvcih2YXIgcGU9MCxfZT1bXTtwZSE9USYmKF9lW3BlXT1bXSk7KytwZSlmb3IodmFyIHZlPTA7''@;'; put 'put ''dmUhPXJlOysrdmUpX2VbcGVdW3ZlXT1HQyh5LEwuYmlmZik7cmV0dXJuIF9lfWZ1bmN0aW9uIGU1KHksUCxMKXtyZXR1cm4geS5sKz0yLFtROSh5KV19ZnVuY3Rpb24gdDUoeSl7cmV0dXJuIHkubCs9NixbXX12YXIgbzY9ZTUsdkk9dDUsYXY9dDUsczY9ZTU7ZnVuY3Rpb24gcTAoeSl7cmV0''@;'; put 'put ''dXJuIHkubCs9MixbaGwoeSksMSZ5LnJlYWRfc2hpZnQoMildfXZhciBsdj1lNSxjdj1xMCxfST10NSxiST1lNSxKQz1lNSxCMz1bIkRhdGEiLCJBbGwiLCJIZWFkZXJzIiwiPz8iLCI/RGF0YTIiLCI/PyIsIj9EYXRhSGVhZGVycyIsIj8/IiwiVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0Rh''@;'; put 'put ''dGFUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/Q3VycmVudCJdLEdzPXsxOntuOiJQdGdFeHAiLGY6ZnVuY3Rpb24gVVooeSxQLEwpe3JldHVybiB5LmwrKyxMJiYxMj09TC5iaWZmP1t5LnJlYWRfc2hpZnQoNCwiaSIpLDBdOlt5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KEwmJjI9PUwu''@;'; put 'put ''YmlmZj8xOjIpXX19LDI6e246IlB0Z1RibCIsZjpiY30sMzp7bjoiUHRnQWRkIixmOkJhfSw0OntuOiJQdGdTdWIiLGY6QmF9LDU6e246IlB0Z011bCIsZjpCYX0sNjp7bjoiUHRnRGl2IixmOkJhfSw3OntuOiJQdGdQb3dlciIsZjpCYX0sODp7bjoiUHRnQ29uY2F0IixmOkJhfSw5OntuOiJQ''@;'; put 'put ''dGdMdCIsZjpCYX0sMTA6e246IlB0Z0xlIixmOkJhfSwxMTp7bjoiUHRnRXEiLGY6QmF9LDEyOntuOiJQdGdHZSIsZjpCYX0sMTM6e246IlB0Z0d0IixmOkJhfSwxNDp7bjoiUHRnTmUiLGY6QmF9LDE1OntuOiJQdGdJc2VjdCIsZjpCYX0sMTY6e246IlB0Z1VuaW9uIixmOkJhfSwxNzp7bjoi''@;'; put 'put ''UHRnUmFuZ2UiLGY6QmF9LDE4OntuOiJQdGdVcGx1cyIsZjpCYX0sMTk6e246IlB0Z1VtaW51cyIsZjpCYX0sMjA6e246IlB0Z1BlcmNlbnQiLGY6QmF9LDIxOntuOiJQdGdQYXJlbiIsZjpCYX0sMjI6e246IlB0Z01pc3NBcmciLGY6QmF9LDIzOntuOiJQdGdTdHIiLGY6ZnVuY3Rpb24gV0Mo''@;'; put 'put ''eSxQLEwpe3JldHVybiB5LmwrKyxGZCh5LDAsTCl9fSwyNjp7bjoiUHRnU2hlZXQiLGY6ZnVuY3Rpb24gQ0koeSxQLEwpe3JldHVybiB5LmwrPTUseS5sKz0yLHkubCs9Mj09TC5iaWZmPzE6NCxbIlBUR1NIRUVUIl19fSwyNzp7bjoiUHRnRW5kU2hlZXQiLGY6ZnVuY3Rpb24gdXYoeSxQLEwp''@;'; put 'put ''e3JldHVybiB5LmwrPTI9PUwuYmlmZj80OjUsWyJQVEdFTkRTSEVFVCJdfX0sMjg6e246IlB0Z0VyciIsZjpmdW5jdGlvbiBKNCh5KXtyZXR1cm4geS5sKyssUW9beS5yZWFkX3NoaWZ0KDEpXX19LDI5OntuOiJQdGdCb29sIixmOmZ1bmN0aW9uIFE0KHkpe3JldHVybiB5LmwrKywwIT09eS5y''@;'; put 'put ''ZWFkX3NoaWZ0KDEpfX0sMzA6e246IlB0Z0ludCIsZjpmdW5jdGlvbiBNaSh5KXtyZXR1cm4geS5sKysseS5yZWFkX3NoaWZ0KDIpfX0sMzE6e246IlB0Z051bSIsZjpmdW5jdGlvbiBZQyh5KXtyZXR1cm4geS5sKyssbWEoeSl9fSwzMjp7bjoiUHRnQXJyYXkiLGY6ZnVuY3Rpb24gYUkoeSxQ''@;'; put 'put ''LEwpe3ZhciBRPSg5NiZ5W3kubCsrXSk+PjU7cmV0dXJuIHkubCs9Mj09TC5iaWZmPzY6MTI9PUwuYmlmZj8xNDo3LFtRXX19LDMzOntuOiJQdGdGdW5jIixmOmZ1bmN0aW9uIGZJKHksUCxMKXt2YXIgUT0oOTYmeVt5LmxdKT4+NTt5LmwrPTE7dmFyIHJlPXkucmVhZF9zaGlmdChMJiZMLmJp''@;'; put 'put ''ZmY8PTM/MToyKTtyZXR1cm5bX3ZbcmVdLHZ2W3JlXSxRXX19LDM0OntuOiJQdGdGdW5jVmFyIixmOmZ1bmN0aW9uIHBJKHksUCxMKXt2YXIgUT15W3kubCsrXSxyZT15LnJlYWRfc2hpZnQoMSkscGU9TCYmTC5iaWZmPD0zP1s4OD09UT8tMTowLHkucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24g''@;'; put 'put ''WkMoeSl7cmV0dXJuW3lbeS5sKzFdPj43LDMyNzY3JnkucmVhZF9zaGlmdCgyKV19KHkpO3JldHVybltyZSwoMD09PXBlWzBdP3Z2OmtJKVtwZVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24gJEMoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCgxKT4+PjUmMyxwZT15LnJlYWRf''@;'; put 'put ''c2hpZnQoIUx8fEwuYmlmZj49OD80OjIpO3N3aXRjaChMLmJpZmYpe2Nhc2UgMjp5LmwrPTU7YnJlYWs7Y2FzZSAzOmNhc2UgNDp5LmwrPTg7YnJlYWs7Y2FzZSA1OnkubCs9MTJ9cmV0dXJuW1EsMCxwZV19fSwzNjp7bjoiUHRnUmVmIixmOmZ1bmN0aW9uIFVDKHksUCxMKXt2YXIgUT0oOTYm''@;'; put 'put ''eVt5LmxdKT4+NTtyZXR1cm4geS5sKz0xLFtRLHJJKHksMCxMKV19fSwzNzp7bjoiUHRnQXJlYSIsZjpmdW5jdGlvbiBqWih5LFAsTCl7cmV0dXJuWyg5NiZ5W3kubCsrXSk+PjUsWDkoeSwwLEwpXX19LDM4OntuOiJQdGdNZW1BcmVhIixmOmZ1bmN0aW9uIFpaKHksUCxMKXt2YXIgUT15LnJl''@;'; put 'put ''YWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIHkubCs9TCYmMj09TC5iaWZmPzM6NCxbUSx5LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MildfX0sMzk6e246IlB0Z01lbUVyciIsZjpiY30sNDA6e246IlB0Z01lbU5vTWVtIixmOmJjfSw0MTp7bjoiUHRnTWVtRnVuYyIsZjpmdW5jdGlvbiBv''@;'; put 'put ''dih5LFAsTCl7cmV0dXJuW3kucmVhZF9zaGlmdCgxKT4+PjUmMyx5LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MildfX0sNDI6e246IlB0Z1JlZkVyciIsZjpmdW5jdGlvbiBtSSh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiB5LmwrPTQsTC5iaWZmPDgmJnku''@;'; put 'put ''bC0tLDEyPT1MLmJpZmYmJih5LmwrPTIpLFtRXX19LDQzOntuOiJQdGdBcmVhRXJyIixmOmZ1bmN0aW9uIGlJKHksUCxMKXt2YXIgUT0oOTYmeVt5LmwrK10pPj41O3JldHVybiB5LmwrPUwmJkwuYmlmZj44PzEyOkwuYmlmZjw4PzY6OCxbUV19fSw0NDp7bjoiUHRnUmVmTiIsZjpmdW5jdGlv''@;'; put 'put ''biBkSSh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sXSk+PjU7eS5sKz0xO3ZhciByZT1mdW5jdGlvbiBldih5LFAsTCl7dmFyIFE9TCYmTC5iaWZmP0wuYmlmZjo4O2lmKFE+PTImJlE8PTUpcmV0dXJuIGZ1bmN0aW9uIEJaKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgx''@;'; put 'put ''KSxRPSgzMjc2OCZQKT4+MTUscmU9KDE2Mzg0JlApPj4xNDtyZXR1cm4gUCY9MTYzODMsMT09USYmUD49ODE5MiYmKFAtPTE2Mzg0KSwxPT1yZSYmTD49MTI4JiYoTC09MjU2KSx7cjpQLGM6TCxjUmVsOnJlLHJSZWw6UX19KHkpO3ZhciByZT15LnJlYWRfc2hpZnQoUT49MTI/NDoyKSxwZT15''@;'; put 'put ''LnJlYWRfc2hpZnQoMiksX2U9KDE2Mzg0JnBlKT4+MTQsdmU9KDMyNzY4JnBlKT4+MTU7aWYocGUmPTE2MzgzLDE9PXZlKWZvcig7cmU+NTI0Mjg3OylyZS09MTA0ODU3NjtpZigxPT1fZSlmb3IoO3BlPjgxOTE7KXBlLT0xNjM4NDtyZXR1cm57cjpyZSxjOnBlLGNSZWw6X2UsclJlbDp2ZX19''@;'; put 'put ''KHksMCxMKTtyZXR1cm5bUSxyZV19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gc0koeSxQLEwpe3ZhciBRPSg5NiZ5W3kubCsrXSk+PjUscmU9ZnVuY3Rpb24gTlooeSxQLEwpe2lmKEwuYmlmZjw4KXJldHVybiBKOSh5KTt2YXIgUT15LnJlYWRfc2hpZnQoMTI9PUwuYmlmZj80OjIp''@;'; put 'put ''LHJlPXkucmVhZF9zaGlmdCgxMj09TC5iaWZmPzQ6MikscGU9WmQoeSwyKSxfZT1aZCh5LDIpO3JldHVybntzOntyOlEsYzpwZVswXSxjUmVsOnBlWzFdLHJSZWw6cGVbMl19LGU6e3I6cmUsYzpfZVswXSxjUmVsOl9lWzFdLHJSZWw6X2VbMl19fX0oeSwwLEwpO3JldHVybltRLHJlXX19LDQ2''@;'; put 'put ''OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBhNih5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpPj4+NSYzLHkucmVhZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIFNJKHkpe3JldHVyblt5LnJlYWRfc2hpZnQoMSk+Pj41JjMseS5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''XX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBxQyh5LFAsTCl7cmV0dXJuIDU9PUwuYmlmZj9mdW5jdGlvbiBpdih5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk+Pj41JjMsTD15LnJlYWRfc2hpZnQoMiwiaSIpO3kubCs9ODt2YXIgUT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIHkubCs9''@;'; put 'put ''MTIsW1AsTCxRXX0oeSk6W3kucmVhZF9zaGlmdCgxKT4+PjUmMyx5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KDQpXX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBoSSh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sXSk+PjU7eS5sKz0xO3ZhciByZT15LnJlYWRfc2hpZnQoMik7cmV0''@;'; put 'put ''dXJuIEwmJjU9PUwuYmlmZiYmKHkubCs9MTIpLFtRLHJlLHJJKHksMCxMKV19fSw1OTp7bjoiUHRnQXJlYTNkIixmOmZ1bmN0aW9uIGpDKHksUCxMKXt2YXIgUT0oOTYmeVt5LmwrK10pPj41LHJlPXkucmVhZF9zaGlmdCgyLCJpIik7aWYoTCYmNT09PUwuYmlmZil5LmwrPTEyO3JldHVybltR''@;'; put 'put ''LHJlLFg5KHksMCxMKV19fSw2MDp7bjoiUHRnUmVmRXJyM2QiLGY6ZnVuY3Rpb24gc3YoeSxQLEwpe3ZhciBRPSg5NiZ5W3kubCsrXSk+PjUscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPTQ7aWYoTClzd2l0Y2goTC5iaWZmKXtjYXNlIDU6cGU9MTU7YnJlYWs7Y2FzZSAxMjpwZT02fXJldHVybiB5''@;'; put 'put ''LmwrPXBlLFtRLHJlXX19LDYxOntuOiJQdGdBcmVhRXJyM2QiLGY6ZnVuY3Rpb24gb0koeSxQLEwpe3ZhciBRPSg5NiZ5W3kubCsrXSk+PjUscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPTg7aWYoTClzd2l0Y2goTC5iaWZmKXtjYXNlIDU6eS5sKz0xMixwZT02O2JyZWFrO2Nhc2UgMTI6cGU9MTJ9''@;'; put 'put ''cmV0dXJuIHkubCs9cGUsW1EscmVdfX0sMjU1Ont9fSxNST17NjQ6MzIsOTY6MzIsNjU6MzMsOTc6MzMsNjY6MzQsOTg6MzQsNjc6MzUsOTk6MzUsNjg6MzYsMTAwOjM2LDY5OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQwLDEwNDo0MCw3Mzo0MSwxMDU6NDEsNzQ6''@;'; put 'put ''NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3Njo0NCwxMDg6NDQsNzc6NDUsMTA5OjQ1LDc4OjQ2LDExMDo0Niw3OTo0NywxMTE6NDcsODg6MzQsMTIwOjM0LDg5OjU3LDEyMTo1Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5Mzo2MSwxMjU6NjF9OyFmdW5jdGlvbigp''@;'; put 'put ''e2Zvcih2YXIgeSBpbiBNSSlHc1t5XT1Hc1tNSVt5XV19KCk7dmFyIGVTPXsxOntuOiJQdGdFbGZMZWwiLGY6cTB9LDI6e246IlB0Z0VsZlJ3IixmOmJJfSwzOntuOiJQdGdFbGZDb2wiLGY6bzZ9LDY6e246IlB0Z0VsZlJ3ViIsZjpKQ30sNzp7bjoiUHRnRWxmQ29sViIsZjpzNn0sMTA6e246''@;'; put 'put ''IlB0Z0VsZlJhZGljYWwiLGY6bHZ9LDExOntuOiJQdGdFbGZSYWRpY2FsUyIsZjpfSX0sMTM6e246IlB0Z0VsZkNvbFMiLGY6dkl9LDE1OntuOiJQdGdFbGZDb2xTViIsZjphdn0sMTY6e246IlB0Z0VsZlJhZGljYWxMZWwiLGY6Y3Z9LDI1OntuOiJQdGdMaXN0IixmOmZ1bmN0aW9uIHlJKHkp''@;'; put 'put ''e3kubCs9Mjt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMiksUT15LnJlYWRfc2hpZnQoNCkscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTpQLGNvbHR5cGU6MyZMLHJ0OkIzW0w+PjImMzFdLGlkeDpRLGM6cmUsQzpwZX19fSwy''@;'; put 'put ''OTp7bjoiUHRnU3hOYW1lIixmOmZ1bmN0aW9uIHdJKHkpe3JldHVybiB5LmwrPTIsW3kucmVhZF9zaGlmdCg0KV19fSwyNTU6e319LGw2PXswOntuOiJQdGdBdHRyTm9vcCIsZjpmdW5jdGlvbiBRQyh5KXtyZXR1cm4geS5sKz00LFswLDBdfX0sMTp7bjoiUHRnQXR0clNlbWkiLGY6ZnVuY3Rp''@;'; put 'put ''b24gVjMoeSxQLEwpe3ZhciBRPTI1NSZ5W3kubCsxXT8xOjA7cmV0dXJuIHkubCs9TCYmMj09TC5iaWZmPzM6NCxbUV19fSwyOntuOiJQdGdBdHRySWYiLGY6ZnVuY3Rpb24gdHYoeSxQLEwpe3ZhciBRPTI1NSZ5W3kubCsxXT8xOjA7cmV0dXJuIHkubCs9MixbUSx5LnJlYWRfc2hpZnQoTCYm''@;'; put 'put ''Mj09TC5iaWZmPzE6MildfX0sNDp7bjoiUHRnQXR0ckNob29zZSIsZjpmdW5jdGlvbiByNih5LFAsTCl7eS5sKz0yO2Zvcih2YXIgUT15LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MikscmU9W10scGU9MDtwZTw9UTsrK3BlKXJlLnB1c2goeS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8x''@;'; put 'put ''OjIpKTtyZXR1cm4gcmV9fSw4OntuOiJQdGdBdHRyR290byIsZjpmdW5jdGlvbiBsSSh5LFAsTCl7dmFyIFE9MjU1JnlbeS5sKzFdPzE6MDtyZXR1cm4geS5sKz0yLFtRLHkucmVhZF9zaGlmdChMJiYyPT1MLmJpZmY/MToyKV19fSwxNjp7bjoiUHRnQXR0clN1bSIsZjpmdW5jdGlvbiB6Wih5''@;'; put 'put ''LFAsTCl7eS5sKz1MJiYyPT1MLmJpZmY/Mzo0fX0sMzI6e246IlB0Z0F0dHJCYXhjZWwiLGY6ZnVuY3Rpb24gekMoeSl7dmFyIFA9MSZ5W3kubCsxXTtyZXR1cm4geS5sKz00LFtQLDFdfX0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiB1SSh5KXtyZXR1cm4geS5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLHEyKHkpfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gbnYoeSl7cmV0dXJuIHkucmVhZF9zaGlmdCgyKSxxMih5KX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gY0koeSl7dmFyIFA9MjU1JnlbeS5sKzFdPzE6MDtyZXR1cm4geS5sKz0yLFtQ''@;'; put 'put ''LHkucmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIGozKHksUCxMLFEscmUpe2lmKFEuYmlmZjw4KXJldHVybiBiYyh5LFApO2Zvcih2YXIgcGU9eS5sK1AsX2U9W10sdmU9MDt2ZSE9PUwubGVuZ3RoOysrdmUpc3dpdGNoKExbdmVdWzBdKXtjYXNlIlB0Z0FycmF5IjpMW3ZlXVsx''@;'; put 'put ''XT1nSSh5LDAsUSksX2UucHVzaChMW3ZlXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjpMW3ZlXVsyXT1ydih5LDAsUSksX2UucHVzaChMW3ZlXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOlEmJjEyPT1RLmJpZmYmJihMW3ZlXVsxXVsxXT15LnJlYWRfc2hpZnQoNCksX2UucHVzaChMW3Zl''@;'; put 'put ''XVsxXSkpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBvcnRlZCAiK0xbdmVdWzBdfXJldHVybiBQPXBlLXkubCwhcmUmJjAhPT1QJiZfZS5wdXNoKGJjKHksUCkpLF9lfWZ1bmN0''@;'; put 'put ''aW9uIG41KHksUCxMKXtmb3IodmFyIHJlLHBlLFE9eS5sK1AsX2U9W107USE9eS5sOylQPVEteS5sLHJlPUdzW3BlPXlbeS5sXV0sKDI0PT09cGV8fDI1PT09cGUpJiYocmU9KDI0PT09cGU/ZVM6bDYpW3lbeS5sKzFdXSkscmUmJnJlLmY/X2UucHVzaChbcmUubixyZS5mKHksUCxMKV0pOmJj''@;'; put 'put ''KHksUCk7cmV0dXJuIF9lfWZ1bmN0aW9uIFlaKHkpe2Zvcih2YXIgUD1bXSxMPTA7TDx5Lmxlbmd0aDsrK0wpe2Zvcih2YXIgUT15W0xdLHJlPVtdLHBlPTA7cGU8US5sZW5ndGg7KytwZSl7dmFyIF9lPVFbcGVdO3JlLnB1c2goX2U/Mj09PV9lWzBdPyciJytfZVsxXS5yZXBsYWNlKC8iL2cs''@;'; put 'put ''JyIiJykrJyInOl9lWzFdOiIiKX1QLnB1c2gocmUuam9pbigiLCIpKX1yZXR1cm4gUC5qb2luKCI7Iil9bDZbMzNdPWw2WzMyXTt2YXIgYzY9e1B0Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9IixQdGdHZToiPj0iLFB0Z0d0OiI+IixQdGdMZToiPD0iLFB0Z0x0''@;'; put 'put ''OiI8IixQdGdNdWw6IioiLFB0Z05lOiI8PiIsUHRnUG93ZXI6Il4iLFB0Z1N1YjoiLSJ9LHhJPW5ldyBSZWdFeHAoL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1MzBGRl0vKTtmdW5jdGlvbiB1Nih5LFAsTCl7aWYoIXkpcmV0dXJuIlNIMzNUSlNFUlIwIjtpZihMLmJpZmY+OCYmKCF5LlhU''@;'; put 'put ''SXx8IXkuWFRJW1BdKSlyZXR1cm4geS5TaGVldE5hbWVzW1BdO2lmKCF5LlhUSSlyZXR1cm4iU0gzM1RKU0VSUjYiO3ZhciBRPXkuWFRJW1BdO2lmKEwuYmlmZjw4KXJldHVybiBQPjFlNCYmKFAtPTY1NTM2KSxQPDAmJihQPS1QKSwwPT1QPyIiOnkuWFRJW1AtMV07aWYoIVEpcmV0dXJuIlNI''@;'; put 'put ''MzNUSlNFUlIxIjt2YXIgcmU9IiI7aWYoTC5iaWZmPjgpc3dpdGNoKHlbUVswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiByZT0tMT09UVsxXT8iI1JFRiI6eS5TaGVldE5hbWVzW1FbMV1dLFFbMV09PVFbMl0/cmU6cmUrIjoiK3kuU2hlZXROYW1lc1tRWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVs''@;'; put 'put ''bCE9TC5TSUQ/eS5TaGVldE5hbWVzW0wuU0lEXToiU0gzM1RKU1NBTUUiK3lbUVswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIreVtRWzBdXVswXX1zd2l0Y2goeVtRWzBdXVswXVswXSl7Y2FzZSAxMDI1OnJldHVybiByZT0tMT09UVsxXT8iI1JFRiI6eS5TaGVldE5hbWVzW1Fb''@;'; put 'put ''MV1dfHwiU0gzM1RKU0VSUjMiLFFbMV09PVFbMl0/cmU6cmUrIjoiK3kuU2hlZXROYW1lc1tRWzJdXTtjYXNlIDE0ODQ5OnJldHVybiB5W1FbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihwZSl7cmV0dXJuIHBlLk5hbWV9KS5qb2luKCI7OyIpO2RlZmF1bHQ6cmV0dXJuIHlbUVswXV1bMF1b''@;'; put 'put ''M10/KHJlPS0xPT1RWzFdPyIjUkVGIjp5W1FbMF1dWzBdWzNdW1FbMV1dfHwiU0gzM1RKU0VSUjQiLFFbMV09PVFbMl0/cmU6cmUrIjoiK3lbUVswXV1bMF1bM11bUVsyXV0pOiJTSDMzVEpTRVJSMiJ9fWZ1bmN0aW9uIGNmKHksUCxMKXtyZXR1cm4gZnVuY3Rpb24gZHYoeSxQKXtpZighKHl8''@;'; put 'put ''fFAmJlAuYmlmZjw9NSYmUC5iaWZmPj0yKSl0aHJvdyBuZXcgRXJyb3IoImVtcHR5IHNoZWV0IG5hbWUiKTtyZXR1cm4vI1JFRi8udGVzdCh5KT95OnhJLnRlc3QoeSk/IiciK3krIiciOnl9KHU2KHksUCxMKSxMKX1mdW5jdGlvbiB4bCh5LFAsTCxRLHJlLHBlKXt2YXIgSGUsVmUsR2UsQ3Qs''@;'; put 'put ''X2U9cmUmJnJlLmJpZmZ8fDgsdmU9cGUmJm51bGwhPVA/UDp7czp7YzowLHI6MH0sZTp7YzowLHI6MH19LFNlPVtdLG50PTAsZHQ9MCxjdD0iIjtpZigheVswXXx8IXlbMF1bMF0pcmV0dXJuIiI7Zm9yKHZhciBidD0tMSxGdD0iIixFdD0wLFR0PXlbMF0ubGVuZ3RoO0V0PFR0OysrRXQpe3Zh''@;'; put 'put ''ciBadD15WzBdW0V0XTtzd2l0Y2goWnRbMF0pe2Nhc2UiUHRnVW1pbnVzIjpTZS5wdXNoKCItIitTZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdVcGx1cyI6U2UucHVzaCgiKyIrU2UucG9wKCkpO2JyZWFrO2Nhc2UiUHRnUGVyY2VudCI6U2UucHVzaChTZS5wb3AoKSsiJSIpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''UHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2VyIjpjYXNlIlB0Z1N1YiI6aWYoSGU9U2UucG9wKCks''@;'; put 'put ''VmU9U2UucG9wKCksYnQ+PTApe3N3aXRjaCh5WzBdW2J0XVsxXVswXSl7Y2FzZSAwOkZ0PWJuKCIgIix5WzBdW2J0XVsxXVsxXSk7YnJlYWs7Y2FzZSAxOkZ0PWJuKCJcciIseVswXVtidF1bMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoRnQ9IiIscmUuV1RGKXRocm93IG5ldyBFcnJvcigiVW5l''@;'; put 'put ''eHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIreVswXVtidF1bMV1bMF0pfVZlKz1GdCxidD0tMX1TZS5wdXNoKFZlK2M2W1p0WzBdXStIZSk7YnJlYWs7Y2FzZSJQdGdJc2VjdCI6SGU9U2UucG9wKCksVmU9U2UucG9wKCksU2UucHVzaChWZSsiICIrSGUpO2JyZWFrO2Nhc2UiUHRnVW5pb24i''@;'; put 'put ''OkhlPVNlLnBvcCgpLFZlPVNlLnBvcCgpLFNlLnB1c2goVmUrIiwiK0hlKTticmVhaztjYXNlIlB0Z1JhbmdlIjpIZT1TZS5wb3AoKSxWZT1TZS5wb3AoKSxTZS5wdXNoKFZlKyI6IitIZSk7YnJlYWs7Y2FzZSJQdGdBdHRyQ2hvb3NlIjpjYXNlIlB0Z0F0dHJHb3RvIjpjYXNlIlB0Z0F0dHJJ''@;'; put 'put ''ZiI6Y2FzZSJQdGdBdHRySWZFcnJvciI6Y2FzZSJQdGdBdHRyQmF4Y2VsIjpjYXNlIlB0Z0F0dHJTZW1pIjpjYXNlIlB0Z01lbUFyZWEiOmNhc2UiUHRnVGJsIjpjYXNlIlB0Z01lbUVyciI6Y2FzZSJQdGdNZW1BcmVhTiI6Y2FzZSJQdGdNZW1Ob01lbU4iOmNhc2UiUHRnQXR0ck5vb3AiOmNh''@;'; put 'put ''c2UiUHRnU2hlZXQiOmNhc2UiUHRnRW5kU2hlZXQiOmNhc2UiUHRnTWVtRnVuYyI6Y2FzZSJQdGdNZW1Ob01lbSI6YnJlYWs7Y2FzZSJQdGdSZWYiOkdlPWx1KFp0WzFdWzFdLHZlLHJlKSxTZS5wdXNoKEwyKEdlLF9lKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpHZT1MP2x1KFp0WzFdWzFdLEws''@;'; put 'put ''cmUpOlp0WzFdWzFdLFNlLnB1c2goTDIoR2UsX2UpKTticmVhaztjYXNlIlB0Z1JlZjNkIjpudD1adFsxXVsxXSxHZT1sdShadFsxXVsyXSx2ZSxyZSksY3Q9Y2YoUSxudCxyZSksU2UucHVzaChjdCsiISIrTDIoR2UsX2UpKTticmVhaztjYXNlIlB0Z0Z1bmMiOmNhc2UiUHRnRnVuY1ZhciI6''@;'; put 'put ''dmFyIEtuPVp0WzFdWzBdLHVuPVp0WzFdWzFdO0tufHwoS249MCk7dmFyIHFuPTA9PShLbiY9MTI3KT9bXTpTZS5zbGljZSgtS24pO1NlLmxlbmd0aC09S24sIlVzZXIiPT09dW4mJih1bj1xbi5zaGlmdCgpKSxTZS5wdXNoKHVuKyIoIitxbi5qb2luKCIsIikrIikiKTticmVhaztjYXNlIlB0''@;'; put 'put ''Z0Jvb2wiOlNlLnB1c2goWnRbMV0/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z051bSI6U2UucHVzaChTdHJpbmcoWnRbMV0pKTticmVhaztjYXNlIlB0Z1N0ciI6U2UucHVzaCgnIicrWnRbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQ''@;'; put 'put ''dGdFcnIiOlNlLnB1c2goWnRbMV0pO2JyZWFrO2Nhc2UiUHRnQXJlYU4iOkN0PWRyKFp0WzFdWzFdLEw/e3M6TH06dmUscmUpLFNlLnB1c2gobWkoQ3QscmUpKTticmVhaztjYXNlIlB0Z0FyZWEiOkN0PWRyKFp0WzFdWzFdLHZlLHJlKSxTZS5wdXNoKG1pKEN0LHJlKSk7YnJlYWs7Y2FzZSJQ''@;'; put 'put ''dGdBcmVhM2QiOm50PVp0WzFdWzFdLEN0PWRyKFp0WzFdWzJdLHZlLHJlKSxjdD1jZihRLG50LHJlKSxTZS5wdXNoKGN0KyIhIittaShDdCxyZSkpO2JyZWFrO2Nhc2UiUHRnQXR0clN1bSI6U2UucHVzaCgiU1VNKCIrU2UucG9wKCkrIikiKTticmVhaztjYXNlIlB0Z05hbWUiOnZhciB6bj0o''@;'; put 'put ''US5uYW1lc3x8W10pWyhkdD1adFsxXVsyXSktMV18fChRWzBdfHxbXSlbZHRdLEFuPXpuP3puLk5hbWU6IlNIMzNUSlNOQU1FIitTdHJpbmcoZHQpO0FuIGluIG81JiYoQW49bzVbQW5dKSxTZS5wdXNoKEFuKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgdHIsZXI9WnRbMV1bMV07aWYoZHQ9''@;'; put 'put ''WnRbMV1bMl0sIShyZS5iaWZmPD01KSl7dmFyIFpuPSIiO2lmKDE0ODQ5PT0oKFFbZXJdfHxbXSlbMF18fFtdKVswXXx8KDEwMjU9PSgoUVtlcl18fFtdKVswXXx8W10pWzBdP1FbZXJdW2R0XSYmUVtlcl1bZHRdLml0YWI+MCYmKFpuPVEuU2hlZXROYW1lc1tRW2VyXVtkdF0uaXRhYi0xXSsi''@;'; put 'put ''ISIpOlpuPVEuU2hlZXROYW1lc1tkdC0xXSsiISIpLFFbZXJdJiZRW2VyXVtkdF0pWm4rPVFbZXJdW2R0XS5OYW1lO2Vsc2UgaWYoUVswXSYmUVswXVtkdF0pWm4rPVFbMF1bZHRdLk5hbWU7ZWxzZXt2YXIgb2k9KHU2KFEsZXIscmUpfHwiIikuc3BsaXQoIjs7Iik7b2lbZHQtMV0/Wm49b2lb''@;'; put 'put ''ZHQtMV06Wm4rPSJTSDMzVEpTRVJSWCJ9U2UucHVzaChabik7YnJlYWt9ZXI8MCYmKGVyPS1lciksUVtlcl0mJih0cj1RW2VyXVtkdF0pLHRyfHwodHI9e05hbWU6IlNIMzNUSlNFUlJZIn0pLFNlLnB1c2godHIuTmFtZSk7YnJlYWs7Y2FzZSJQdGdQYXJlbiI6dmFyIGtpPSIoIixMaT0iKSI7''@;'; put 'put ''aWYoYnQ+PTApe3N3aXRjaChGdD0iIix5WzBdW2J0XVsxXVswXSl7Y2FzZSAyOmtpPWJuKCIgIix5WzBdW2J0XVsxXVsxXSkra2k7YnJlYWs7Y2FzZSAzOmtpPWJuKCJcciIseVswXVtidF1bMV1bMV0pK2tpO2JyZWFrO2Nhc2UgNDpMaT1ibigiICIseVswXVtidF1bMV1bMV0pK0xpO2JyZWFr''@;'; put 'put ''O2Nhc2UgNTpMaT1ibigiXHIiLHlbMF1bYnRdWzFdWzFdKStMaTticmVhaztkZWZhdWx0OmlmKHJlLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK3lbMF1bYnRdWzFdWzBdKX1idD0tMX1TZS5wdXNoKGtpK1NlLnBvcCgpK0xpKTticmVhaztjYXNl''@;'; put 'put ''IlB0Z1JlZkVyciI6Y2FzZSJQdGdBcmVhRXJyIjpjYXNlIlB0Z0FyZWFFcnIzZCI6Y2FzZSJQdGdSZWZFcnIzZCI6U2UucHVzaCgiI1JFRiEiKTticmVhaztjYXNlIlB0Z0V4cCI6dmFyIHVyPXtjOkwuYyxyOkwucn07aWYoUS5zaGFyZWRmW2RpKEdlPXtjOlp0WzFdWzFdLHI6WnRbMV1bMF19''@;'; put 'put ''KV0pe3ZhciBUbj1RLnNoYXJlZGZbZGkoR2UpXTtTZS5wdXNoKHhsKFRuLHZlLHVyLFEscmUpKX1lbHNle3ZhciB2cj0hMTtmb3IoSGU9MDtIZSE9US5hcnJheWYubGVuZ3RoOysrSGUpaWYoIShHZS5jPChWZT1RLmFycmF5ZltIZV0pWzBdLnMuY3x8R2UuYz5WZVswXS5lLmN8fEdlLnI8VmVb''@;'; put 'put ''MF0ucy5yfHxHZS5yPlZlWzBdLmUucikpe1NlLnB1c2goeGwoVmVbMV0sdmUsdXIsUSxyZSkpLHZyPSEwO2JyZWFrfXZyfHxTZS5wdXNoKFp0WzFdKX1icmVhaztjYXNlIlB0Z0FycmF5IjpTZS5wdXNoKCJ7IitZWihadFsxXSkrIn0iKTticmVhaztjYXNlIlB0Z0F0dHJTcGFjZSI6Y2FzZSJQ''@;'; put 'put ''dGdBdHRyU3BhY2VTZW1pIjpidD1FdDticmVhaztjYXNlIlB0Z01pc3NBcmciOlNlLnB1c2goIiIpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6U2UucHVzaCgiVGFibGUiK1p0WzFdLmlkeCsiWyMiK1p0WzFdLnJ0KyJdIik7YnJlYWs7Y2FzZSJQdGdFbGZDb2wiOmNhc2UiUHRnRWxmQ29sUyI6Y2Fz''@;'; put 'put ''ZSJQdGdFbGZDb2xTViI6Y2FzZSJQdGdFbGZDb2xWIjpjYXNlIlB0Z0VsZkxlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsIjpjYXNlIlB0Z0VsZlJhZGljYWxMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmUnciOmNhc2UiUHRnRWxmUndWIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3Vw''@;'; put 'put ''cG9ydGVkIEVMRnMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEZvcm11bGEgVG9rZW46ICIrU3RyaW5nKFp0KSl9aWYoMyE9cmUuYmlmZiYmYnQ+PTAmJi0xPT1bIlB0Z0F0dHJTcGFjZSIsIlB0Z0F0dHJTcGFjZVNlbWkiLCJQdGdBdHRyR290byJdLmluZGV4T2Yo''@;'; put 'put ''eVswXVtFdF1bMF0pKXt2YXIgU249ITA7c3dpdGNoKChadD15WzBdW2J0XSlbMV1bMF0pe2Nhc2UgNDpTbj0hMTtjYXNlIDA6RnQ9Ym4oIiAiLFp0WzFdWzFdKTticmVhaztjYXNlIDU6U249ITE7Y2FzZSAxOkZ0PWJuKCJcciIsWnRbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoRnQ9IiIscmUu''@;'; put 'put ''V1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrWnRbMV1bMF0pfVNlLnB1c2goKFNuP0Z0OiIiKStTZS5wb3AoKSsoU24/IiI6RnQpKSxidD0tMX19aWYoU2UubGVuZ3RoPjEmJnJlLldURil0aHJvdyBuZXcgRXJyb3IoImJhZCBmb3JtdWxhIHN0YWNr''@;'; put 'put ''Iik7cmV0dXJuIFNlWzBdfWZ1bmN0aW9uIGh2KHksUCxMKXt2YXIgcGUsUT15LmwrUCxyZT0yPT1MLmJpZmY/MToyLF9lPXkucmVhZF9zaGlmdChyZSk7aWYoNjU1MzU9PV9lKXJldHVybltbXSxiYyh5LFAtMildO3ZhciB2ZT1uNSh5LF9lLEwpO3JldHVybiBQIT09X2UrcmUmJihwZT1qMyh5''@;'; put 'put ''LFAtX2UtcmUsdmUsTCkpLHkubD1RLFt2ZSxwZV19ZnVuY3Rpb24gaTUoeSxQLEwpe3ZhciByZSxRPXkubCtQLHBlPXkucmVhZF9zaGlmdCgyKSxfZT1uNSh5LHBlLEwpO3JldHVybiA2NTUzNT09cGU/W1tdLGJjKHksUC0yKV06KFAhPT1wZSsyJiYocmU9ajMoeSxRLXBlLTIsX2UsTCkpLFtf''@;'; put 'put ''ZSxyZV0pfWZ1bmN0aW9uIHozKHksUCxMKXt2YXIgUT15LmwrUCxyZT1MdSh5KTsyPT1MLmJpZmYmJisreS5sO3ZhciBwZT1mdW5jdGlvbiB0Uyh5KXt2YXIgUDtpZig2NTUzNSE9PVluKHkseS5sKzYpKXJldHVyblttYSh5KSwibiJdO3N3aXRjaCh5W3kubF0pe2Nhc2UgMDpyZXR1cm4geS5s''@;'; put 'put ''Kz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gUD0xPT09eVt5LmwrMl0seS5sKz04LFtQLCJiIl07Y2FzZSAyOnJldHVybiBQPXlbeS5sKzJdLHkubCs9OCxbUCwiZSJdO2Nhc2UgMzpyZXR1cm4geS5sKz04LFsiIiwicyJdfXJldHVybltdfSh5KSxfZT15LnJlYWRfc2hpZnQoMSk7''@;'; put 'put ''MiE9TC5iaWZmJiYoeS5yZWFkX3NoaWZ0KDEpLEwuYmlmZj49NSYmeS5yZWFkX3NoaWZ0KDQpKTt2YXIgdmU9ZnVuY3Rpb24gcjUoeSxQLEwpe3ZhciBwZSxRPXkubCtQLHJlPTI9PUwuYmlmZj8xOjIsX2U9eS5yZWFkX3NoaWZ0KHJlKTtpZig2NTUzNT09X2UpcmV0dXJuW1tdLGJjKHksUC0y''@;'; put 'put ''KV07dmFyIHZlPW41KHksX2UsTCk7cmV0dXJuIFAhPT1fZStyZSYmKHBlPWozKHksUC1fZS1yZSx2ZSxMKSkseS5sPVEsW3ZlLHBlXX0oeSxRLXkubCxMKTtyZXR1cm57Y2VsbDpyZSx2YWw6cGVbMF0sZm9ybXVsYTp2ZSxzaGFyZWQ6X2U+PjMmMSx0dDpwZVsxXX19ZnVuY3Rpb24gdWYoeSxQ''@;'; put 'put ''LEwpe3ZhciBRPXkucmVhZF9zaGlmdCg0KSxyZT1uNSh5LFEsTCkscGU9eS5yZWFkX3NoaWZ0KDQpO3JldHVybltyZSxwZT4wP2ozKHkscGUscmUsTCwhMCk6bnVsbF19dmFyIG5TPXVmLGg2PXVmLHJTPXVmLGlTPWZ1bmN0aW9uIHB2KHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9''@;'; put 'put ''eS5yZWFkX3NoaWZ0KDQpLHBlPW41KHksUSxMKTtyZXR1cm5bcGUscmU+MD9qMyh5LHJlLHBlLEwsITApOm51bGxdfSxvUz11ZixFST11ZjtmdW5jdGlvbiBndih5KXtpZigoMHx5KT09eSYmeTxNYXRoLnBvdygyLDE2KSYmeT49MCl7dmFyIFA9ZnIoMTEpO3JldHVybiBQLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMyksUC53cml0ZV9zaGlmdCgxLDMwKSxQLndyaXRlX3NoaWZ0KDIseSksUC53cml0ZV9zaGlmdCg0LDApLFB9dmFyIEw9ZnIoMTcpO3JldHVybiBMLndyaXRlX3NoaWZ0KDQsMTEpLEwud3JpdGVfc2hpZnQoMSwzMSksTC53cml0ZV9zaGlmdCg4LHkpLEwud3JpdGVfc2hpZnQoNCwwKSxM''@;'; put 'put ''fWZ1bmN0aW9uIHNTKHkpe3ZhciBQPWZyKDcpO1Aud3JpdGVfc2hpZnQoNCwzKzIqeS5sZW5ndGgpLFAud3JpdGVfc2hpZnQoMSwyMyksUC53cml0ZV9zaGlmdCgyLHkubGVuZ3RoKTt2YXIgTD1mcigyKnkubGVuZ3RoKTtMLndyaXRlX3NoaWZ0KDIqeS5sZW5ndGgseSwidXRmMTZsZSIpO3Zh''@;'; put 'put ''ciBRPWZyKDQpO3JldHVybiBRLndyaXRlX3NoaWZ0KDQsMCksUyhbUCxMLFFdKX1mdW5jdGlvbiBVMyh5KXtpZih5Lm1hdGNoKC9eIyhESVZcLzAhfEdFVFRJTkdfREFUQXxOXC9BfE5BTUVcP3xOVUxMIXxOVU0hfFJFRiF8VkFMVUUhKSQvKSlyZXR1cm4gZnVuY3Rpb24gR1ooeSl7dmFyIFA9''@;'; put 'put ''ZnIoMTApO3JldHVybiBQLndyaXRlX3NoaWZ0KDQsMiksUC53cml0ZV9zaGlmdCgxLDI4KSxQLndyaXRlX3NoaWZ0KDEseSksUC53cml0ZV9zaGlmdCg0LDApLFB9KCtLYVt5XSk7aWYoeS5tYXRjaCgvXlwkPyg/OltBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9''@;'; put 'put ''KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pJC8pKXJldHVybiBmdW5jdGlvbiBtdih5KXt2YXIgUD1zcyh5KSxMPWZyKDE1KTtyZXR1cm4gTC53cml0ZV9zaGlmdCg0LDcpLEwud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSwzNiksTC53cml0ZV9zaGlmdCg0LFAuciksTC53cml0ZV9zaGlmdCgyLFAuY3woIiQiPT15LmNoYXJBdCgwKT8wOjEpPDwxNHwoeS5tYXRjaCgvXCRcZC8pPzA6MSk8PDE1KSxMLndyaXRlX3NoaWZ0KDQsMCksTH0oeSk7aWYoeS5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIHNT''@;'; put 'put ''KHkpO3Rocm93IkZvcm11bGEgfCIreSsifCBub3Qgc3VwcG9ydGVkIGZvciBYTFNCIn12YXIga0k9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5U''@;'; put 'put ''Iiw5OiJQUklOVEVSLlNFVFVQIiwxMDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRM''@;'; put 'put ''RVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEu''@;'; put 'put ''RklORCIsMzU6IkVYVFJBQ1QiLDM2OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVS''@;'; put 'put ''Iiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwu''@;'; put 'put ''RE9XTiIsNjE6IkRFRklORS5OQU1FIiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExF''@;'; put 'put ''UlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJM''@;'; put 'put ''RUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRF''@;'; put 'put ''WFQiLDkwOiJFRElULlJFUEVBVCIsOTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklO''@;'; put 'put ''RC5QUkVWIiwxMDE6IkZPUk1VTEEuRklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNU''@;'; put 'put ''VVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VM''@;'; put 'put ''LkNPUFkiLDEyMToiU0hPVy5DTElQQk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJF''@;'; put 'put ''UExBQ0UiLDEzMToiU0VORC5LRVlTIiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJ''@;'; put 'put ''U0FCTEUuSU5QVVQiLDE0MjoiT1VUTElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklM''@;'; put 'put ''TC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpF''@;'; put 'put ''IiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIs''@;'; put 'put ''MTc1OiJTRU5ELlRPLkJBQ0siLDE4NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQ''@;'; put 'put ''RUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJV''@;'; put 'put ''UERBVEUuTElOSyIsMjAyOiJQUk9NT1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEy''@;'; put 'put ''OiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hP''@;'; put 'put ''Vy5UT09MQkFSIiwyMjI6IlBSSU5ULlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJ''@;'; put 'put ''TkUuUFJJTlQiLDI0MzoiRU5URVIuREFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJ''@;'; put 'put ''TlNFUlQuT0JKRUNUIiwyNjA6IldJTkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0Qu''@;'; put 'put ''U1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09S''@;'; put 'put ''S0JPT0suQ09QWSIsMjg0OiJXT1JLQk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lH''@;'; put 'put ''Ti5UTy5UT09MIiwyOTU6IkNPUFkuVE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQi''@;'; put 'put ''LDMwODoiU0NFTkFSSU8uRURJVCIsMzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6''@;'; put 'put ''IlBJVk9ULklURU0iLDMxNjoiUElWT1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoi''@;'; put 'put ''VkJBQWN0aXZhdGUiLDMyNToiT1BUSU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwz''@;'; put 'put ''NDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIu''@;'; put 'put ''QURWQU5DRUQiLDM3MzoiTUFJTC5BREQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJU''@;'; put 'put ''LlRJVExFIiwzODE6IkZPTlQuUFJPUEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5D''@;'; put 'put ''SEFSVC5BVVRPRk9STUFUIiwzOTE6IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJT''@;'; put 'put ''VUJUT1RBTC5DUkVBVEUiLDM5OToiU1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQx''@;'; put 'put ''NzoiV09SS0JPT0suUFJPVEVDVCIsNDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNF''@;'; put 'put ''Ui5OQVZJR0FURSIsNDMxOiJUUkFDRVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJP''@;'; put 'put ''UEVSVElFUyIsNDM4OiJFRElUQk9YLlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5Q''@;'; put 'put ''Uk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUu''@;'; put 'put ''TElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6''@;'; put 'put ''IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwu''@;'; put 'put ''RURJVC5NQUlMRVIiLDQ3MToiT04uU0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0Uu''@;'; put 'put ''QURESU4iLDQ4MDoiSU5TRVJUREFUQVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5''@;'; put 'put ''NToiVklFVy5ERUxFVEUiLDUwOToiU0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFS''@;'; put 'put ''RUEiLDUyMjoiQURELlBSSU5ULkFSRUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2''@;'; put 'put ''MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9''@;'; put 'put ''LHZ2PXswOiJDT1VOVCIsMToiSUYiLDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09T''@;'; put 'put ''IiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxV''@;'; put 'put ''RSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVT''@;'; put 'put ''VCIsNTA6IlRSRU5EIiw1MToiTE9HRVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIs''@;'; put 'put ''NjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYi''@;'; put 'put ''LDgxOiJBUkdVTUVOVCIsODI6IlNFQVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJB''@;'; put 'put ''Q1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIs''@;'; put 'put ''MTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoi''@;'; put 'put ''U1VCU1RJVFVURSIsMTIxOiJDT0RFIiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9T''@;'; put 'put ''RSIsMTM0OiJGU0laRSIsMTM1OiJGUkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZU''@;'; put 'put ''RVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1B''@;'; put 'put ''TkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6''@;'; put 'put ''IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4''@;'; put 'put ''MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwx''@;'; put 'put ''OTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIi''@;'; put 'put ''LDIwNToiRklOREIiLDIwNjoiU0VBUkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIs''@;'; put 'put ''MjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwy''@;'; put 'put ''MzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8i''@;'; put 'put ''LDI0MzoiVEVYVC5CT1giLDI0NDoiSU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNF''@;'; put 'put ''VC5UT09MQkFSIiwyNTc6IkVWQUxVQVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRP''@;'; put 'put ''T0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09N''@;'; put 'put ''QklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoi''@;'; put 'put ''Q0VJTElORyIsMjg5OiJIWVBHRU9NRElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIs''@;'; put 'put ''Mjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMx''@;'; put 'put ''MToiSU5URVJDRVBUIiwzMTI6IlBFQVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJa''@;'; put 'put ''VEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRF''@;'; put 'put ''TkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJD''@;'; put 'put ''T1VOVElGIiwzNDc6IkNPVU5UQkxBTksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1Njoi''@;'; put 'put ''U0FWRS5ESUFMT0ciLDM1NzoiVklFVy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIs''@;'; put 'put ''MzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJB''@;'; put 'put ''SFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4Njoi''@;'; put 'put ''SEVYMk9DVCIsMzg3OiJERUMyQklOIiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJ''@;'; put 'put ''TVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklN''@;'; put 'put ''UkVBTCIsNDExOiJDT01QTEVYIiw0MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJN''@;'; put 'put ''Uk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIs''@;'; put 'put ''NDM1OiJESVNDIiw0MzY6IlBSSUNFRElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJF''@;'; put 'put ''RkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENE''@;'; put 'put ''Iiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoi''@;'; put 'put ''Q09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJD''@;'; put 'put ''VUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LF92PXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEs''@;'; put 'put ''MjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAs''@;'; put 'put ''NzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEs''@;'; put 'put ''MTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2''@;'; put 'put ''OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEs''@;'; put 'put ''MjYxOjEsMjcxOjEsMjczOjQsMjc0OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4''@;'; put 'put ''OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEs''@;'; put 'put ''MzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAx''@;'; put 'put ''OjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIs''@;'; put 'put ''NDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH0sbzU9eyJfeGxmbi5BQ09UIjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMi''@;'; put 'put ''OiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdFSUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIsIl94bGZuLkJBU0UiOiJCQVNFIiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJ''@;'; put 'put ''U1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4uQklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJCSU5PTS5JTlYiLCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9S''@;'; put 'put ''IiwiX3hsZm4uQklUUlNISUZUIjoiQklUUlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJTElORy5NQVRIIiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1Qi''@;'; put 'put ''LCJfeGxmbi5DSElTUS5ESVNULlJUIjoiQ0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94bGZuLkNISVNRLklOVi5SVCI6IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJf''@;'; put 'put ''eGxmbi5DT05DQVQiOiJDT05DQVQiLCJfeGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5DT05GSURFTkNFLlQiOiJDT05GSURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMi''@;'; put 'put ''LCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5DU0MiOiJDU0MiLCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5F''@;'; put 'put ''Q01BLkNFSUxJTkciOiJFQ01BLkNFSUxJTkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNFIjoiRVJGQy5QUkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJ''@;'; put 'put ''U1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxmbi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94bGZuLkYuVEVTVCI6IkYuVEVTVCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxP''@;'; put 'put ''T1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuQ09ORklOVCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNF''@;'; put 'put ''QVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNULkxJTkVBUiI6IkZPUkVDQVNULkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FN''@;'; put 'put ''TUEuRElTVCI6IkdBTU1BLkRJU1QiLCJfeGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOLlBSRUNJU0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJP''@;'; put 'put ''UiI6IklGRVJST1IiLCJfeGxmbi5JRk5BIjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09TSCIsIl94bGZuLklNQ09UIjoiSU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIs''@;'; put 'put ''Il94bGZuLklNU0VDSCI6IklNU0VDSCIsIl94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZPUk1VTEEiOiJJU0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0i''@;'; put 'put ''LCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJMT0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFYSUZTIjoiTUFYSUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdM''@;'; put 'put ''IjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVOSVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNUIiwiX3hsZm4uTkVUV09SS0RBWVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoi''@;'; put 'put ''Tk9STS5ESVNUIiwiX3hsZm4uTk9STS5JTlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1QiLCJfeGxmbi5OT1JNLlMuSU5WIjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJ''@;'; put 'put ''T04iLCJfeGxmbi5QRVJDRU5USUxFLkVYQyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJDRU5USUxFLklOQyIsIl94bGZuLlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklO''@;'; put 'put ''QyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04uRElTVCI6IlBPSVNTT04uRElTVCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIs''@;'; put 'put ''Il94bGZuLlFVRVJZU1RSSU5HIjoiUVVFUllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJBTksuRVEiLCJfeGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQi''@;'; put 'put ''LCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMiLCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYuUCIsIl94bGZuLlNUREVWLlMiOiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoi''@;'; put 'put ''VC5ESVNUIiwiX3hsZm4uVC5ESVNULjJUIjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hsZm4uVC5JTlYiOiJULklOViIsIl94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRK''@;'; put 'put ''T0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVOSUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoiVkFSLlAiLCJfeGxmbi5WQVIuUyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJ''@;'; put 'put ''U1QiLCJfeGxmbi5XT1JLREFZLklOVEwiOiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1QiOiJaLlRFU1QifTtmdW5jdGlvbiBhUyh5KXtyZXR1cm4ib2Y6Ij09eS5zbGljZSgwLDMpJiYoeT15LnNsaWNlKDMpKSw2MT09eS5jaGFyQ29kZUF0KDApJiY2MT09''@;'; put 'put ''KHk9eS5zbGljZSgxKSkuY2hhckNvZGVBdCgwKSYmKHk9eS5zbGljZSgxKSksKHk9KHk9KHk9eS5yZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwuL2csIiIpKS5yZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKFAsTCl7cmV0dXJu''@;'; put 'put ''IEwucmVwbGFjZSgvXC4vZywiIil9KSkucmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7fl0vZywiLCIpLnJlcGxhY2UoL1x8L2csIjsiKX1mdW5jdGlvbiBsUyh5KXtyZXR1cm4oIm9mOj0iK3kucmVwbGFjZSgkOSwiJDFbLiQyJDMkNCQ1XSIpLnJlcGxh''@;'; put 'put ''Y2UoL1xdOlxbL2csIjoiKSkucmVwbGFjZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24gYnYoeSl7dmFyIFA9eS5zcGxpdCgiOiIpO3JldHVybltQWzBdLnNwbGl0KCIuIilbMF0sUFswXS5zcGxpdCgiLiIpWzFdKyhQLmxlbmd0aD4xPyI6IisoUFsxXS5zcGxpdCgiLiIp''@;'; put 'put ''WzFdfHxQWzFdLnNwbGl0KCIuIilbMF0pOiIiKV19ZnVuY3Rpb24gY1MoeSl7cmV0dXJuIHkucmVwbGFjZSgvXC4vLCIhIil9dmFyIGY2PXt9LFozPXt9O0hpLldTPVsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93''@;'; put 'put ''b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdO3ZhciBLMD10eXBlb2YgTWFwPCJ1IjtmdW5jdGlvbiB5dih5LFAsTCxRKXt2YXIgcmU9MCxwZT15Lmxlbmd0aDtpZihRKXtpZihLMD9RLmhhcyhQKTpP''@;'; put 'put ''YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUSxQKSlmb3IodmFyIF9lPUswP1EuZ2V0KFApOlFbUF07cmU8X2UubGVuZ3RoOysrcmUpaWYoeVtfZVtyZV1dLnQ9PT1QJiYoIXlbX2VbcmVdXS5yJiYhTHx8eVtfZVtyZV1dLnI9PUwpKXJldHVybiB5LkNvdW50KyssX2VbcmVd''@;'; put 'put ''fWVsc2UgZm9yKDtyZTxwZTsrK3JlKWlmKHlbcmVdLnQ9PT1QJiYoIXlbcmVdLnImJiFMfHx5W3JlXS5yPT1MKSlyZXR1cm4geS5Db3VudCsrLHJlO3JldHVybiB5W3BlXT17dDpQLHI6TH0seS5Db3VudCsrLHkuVW5pcXVlKyssUSYmKEswPyhRLmhhcyhQKXx8US5zZXQoUCxbXSksUS5nZXQo''@;'; put 'put ''UCkucHVzaChwZSkpOihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUSxQKXx8KFFbUF09W10pLFFbUF0ucHVzaChwZSkpKSxwZX1mdW5jdGlvbiBZZCh5LFApe3ZhciBMPXttaW46eSsxLG1heDp5KzF9LFE9cGw7aWYoIVApcmV0dXJuIFA7dmFyIHJlPS0xO3JldHVybiBQ''@;'; put 'put ''LmF1dG8mJihMLmJlc3RGaXQ9MSxQLmJlc3R3aWR0aCYmKHJlPVAuYmVzdHdpZHRoKSxkZWxldGUgUC5iZXN0d2lkdGgpLG51bGwhPVAud3B4P3JlPXRmKFAud3B4KTpudWxsIT1QLndjaD9yZT1QLndjaDpudWxsIT1QLndpZHRoJiYoTC5jdXN0b21XaWR0aD0xKSxyZT4tMT8oTC53aWR0aD1q''@;'; put 'put ''ZChyZSksTC5jdXN0b21XaWR0aD0xKTpudWxsIT1QLndpZHRoJiYoTC53aWR0aD1QLndpZHRoKSxQLmhpZGRlbiYmKEwuaGlkZGVuPSEwKSxMLmJlc3RGaXQmJmRlbGV0ZSBMLmN1c3RvbVdpZHRoLHBsPVEsbnVsbCE9UC5sZXZlbCYmKEwub3V0bGluZUxldmVsPUwubGV2ZWw9UC5sZXZlbCks''@;'; put 'put ''bnVsbCE9UC5zdHlsZSYmKEwuc3R5bGU9UC5zdHlsZSksTH1mdW5jdGlvbiBOaSh5LFAsTCl7dmFyIFE9V3MoeVsiIXJlZiJdKSxyZT0wLHBlPXlbIiFtZXJnZXMiXXx8W10sX2U9QXJyYXkuaXNBcnJheSh5KTtlOmZvcih2YXIgdmU9MDt2ZTw9US5lLnI7Kyt2ZSl7Zm9yKHZhciBTZT0wO1Nl''@;'; put 'put ''PHBlLmxlbmd0aDsrK1NlKWlmKHBlW1NlXS5zLnI8PXZlJiZ2ZTw9cGVbU2VdLmUuciYmcGVbU2VdLnMuYzw9TCYmTDw9cGVbU2VdLmUuYyljb250aW51ZSBlO3ZhciBIZT1fZT8oeVt2ZV18fFtdKVtMXTp5W2RpKHtyOnZlLGM6TH0pXTtpZihIZSl7dmFyIFZlPTE7aWYoSGUucyYmKFZlPVZt''@;'; put 'put ''KEhlLnMpL05tLkNhbGlicmlbMTJdfHwxKSxIZS53KXJlPU1hdGgubWF4KHJlLEhlLncubGVuZ3RoKlZlKTtlbHNlIHN3aXRjaChIZS50KXtjYXNlImIiOmNhc2UiZSI6cmU9TWF0aC5tYXgocmUsNSpWZSk7YnJlYWs7Y2FzZSJzIjpyZT1NYXRoLm1heChyZSxIZS52Lmxlbmd0aCpWZSoxLjJ8''@;'; put 'put ''MCk7YnJlYWs7Y2FzZSJuIjpybShIZSxIZS52KSxyZT1NYXRoLm1heChyZSxTdHJpbmcoSGUud3x8SGUudikubGVuZ3RoKlZlKTticmVhaztjYXNlImQiOnJlPU1hdGgubWF4KHJlLDgqVmUpfX19cmU8MSYmKHJlPTEpLFAuYmVzdHdpZHRoPXJlfWZ1bmN0aW9uIGRmKHksUCl7aWYoeSl7dmFy''@;'; put 'put ''IEw9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09UCYmKEw9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT15LmxlZnQmJih5LmxlZnQ9TFswXSksbnVsbD09eS5yaWdodCYmKHkucmlnaHQ9TFsxXSksbnVsbD09eS50b3AmJih5LnRvcD1MWzJdKSxudWxsPT15LmJvdHRvbSYmKHkuYm90dG9t''@;'; put 'put ''PUxbM10pLG51bGw9PXkuaGVhZGVyJiYoeS5oZWFkZXI9TFs0XSksbnVsbD09eS5mb290ZXImJih5LmZvb3Rlcj1MWzVdKX19ZnVuY3Rpb24gRm8oeSxQKXtmb3IodmFyIEw9bHQoUCksUT0wO1E8eS5sZW5ndGg7KytRKXt2YXIgcmU9ITAscGU9eVtRXTtpZihwZSYmTC5sZW5ndGg9PWx0KHBl''@;'; put 'put ''KS5sZW5ndGgmJihMLmZvckVhY2goZnVuY3Rpb24oX2Upe2lmKHJlKXtpZihudWxsPT09UFtfZV0hPShudWxsPT09cGVbX2VdKSlyZXR1cm4gdm9pZChyZT0hMSk7aWYoIm9iamVjdCI9PXR5cGVvZiBQW19lXSlpZihbImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5pbmRleE9mKF9lKT4t''@;'; put 'put ''MSl7aWYoJDAoUFtfZV0scGVbX2VdKSlyZXR1cm4gdm9pZChyZT0hMSl9ZWxzZXtpZighKFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uaW5kZXhPZihfZSk+LTEpKXJldHVybiB2b2lkKHJlPSExKTtpZihQbShQW19lXSxwZVtfZV0pKXJldHVybiB2b2lkKHJlPSExKX1pZihQW19l''@;'; put 'put ''XSE9cGVbX2VdKXJldHVybiB2b2lkKHJlPSExKX19KSxyZSkpcmV0dXJuIFF9cmV0dXJuIHlbeS5sZW5ndGhdPW9uKFApLHkubGVuZ3RoLTF9ZnVuY3Rpb24gZ3UoeSxQLEwsUSl7dmFyIHJlPVEucmV2c3NmW251bGwhPUwuej9MLno6IkdlbmVyYWwiXSxwZT02MCxfZT15Lmxlbmd0aDtpZihu''@;'; put 'put ''dWxsPT1yZSYmUS5zc2YpZm9yKDtwZTwzOTI7KytwZSlpZihudWxsPT1RLnNzZltwZV0pe3cubG9hZChMLnoscGUpLFEuc3NmW3BlXT1MLnosUS5yZXZzc2ZbTC56XT1yZT1wZTticmVha312YXIgdmU9MCxTZT0wLEhlPTAsVmU9MDtpZihRLmNlbGxTdHlsZXMpe2lmKEwucyl7aWYoUS5Gb250''@;'; put 'put ''cyl7TC5zLmNvbG9yfHwoTC5zLmNvbG9yPXt0aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIgR2U9KEwucy5ib2xkPzE6MCl8KEwucy5pdGFsaWM/MjowKXwoTC5zLnN0cmlrZT80OjApfChMLnMuc2hhZG93Pzg6MCk7dmU8US5Gb250cy5sZW5ndGg7Kyt2ZSl7dmFyIG50PVEuRm9udHNb''@;'; put 'put ''dmVdO2lmKG51bGw9PW50LmZvbnRoYXNoJiYobnQuZm9udGhhc2g9KG50LmJvbGQ/MTowKXwobnQuaXRhbGljPzI6MCl8KG50LnN0cmlrZT80OjApfChudC5zaGFkb3c/ODowKSksIShHZSE9bnQuZm9udGhhc2h8fCEhTC5zLmNvbG9yIT0hIW50LmNvbG9yfHxMLnMudmFsaWduIT1udC52YWxp''@;'; put 'put ''Z258fChMLnMuc3p8fG50LnN6KSYmKEwucy5zenx8MTIpIT0obnQuc3p8fDEyKXx8TC5zLm5hbWUmJkwucy5uYW1lIT1udC5uYW1lfHwoTC5zLnVuZGVybGluZXx8MCkhPShudC51bmRlcmxpbmV8fDApfHxMLnMuY29sb3ImJiQwKEwucy5jb2xvcixudC5jb2xvcikpKWJyZWFrfXZlPT1RLkZv''@;'; put 'put ''bnRzLmxlbmd0aCYmKFEuRm9udHMucHVzaCh7c3o6TC5zLnN6fHwxMixjb2xvcjpMLnMuY29sb3J8fHt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZTpMLnMubmFtZXx8IkNhbGlicmkiLGZhbWlseTpMLnMuZmFtaWx5fHwyLHNjaGVtZTpMLnMuc2NoZW1lLGJvbGQ6TC5zLmJvbGQsaXRhbGlj''@;'; put 'put ''Okwucy5pdGFsaWMsc3RyaWtlOkwucy5zdHJpa2Usc2hhZG93Okwucy5zaGFkb3csdmFsaWduOkwucy52YWxpZ24sdW5kZXJsaW5lOkwucy51bmRlcmxpbmV9KSwxPT1RLkZvbnRzLmxlbmd0aCYmWjEoUS5Gb250c1swXSkpfWlmKFEuRmlsbHMpe2Zvcig7U2U8US5GaWxscy5sZW5ndGg7KytT''@;'; put 'put ''ZSl7dmFyIGR0PVEuRmlsbHNbU2VdO2lmKCEhTC5zLnN0b3BzPT0hIWR0LnN0b3BzKXtpZihMLnMuc3RvcHMpe2lmKEwucy5hbmdsZSE9ZHQuYW5nbGUpY29udGludWU7dmFyIEN0PSEwO2lmKEwucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKEV0LFR0KXskMChFdCxkdC5zdG9wc1tUdF0pJiYo''@;'; put 'put ''Q3Q9ITEpLEV0LnYhPWR0LnN0b3BzW1R0XS52JiYoQ3Q9ITEpfSksIUN0KWNvbnRpbnVlfWVsc2V7aWYobnVsbD09TC5zLnBhdHRlcm5UeXBlJiZMLnMuZmdDb2xvciYmKEwucy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1MLnMucGF0dGVyblR5cGUpYnJlYWs7aWYoTC5zLnBhdHRlcm5U''@;'; put 'put ''eXBlIT1kdC5wYXR0ZXJuVHlwZXx8JDAoTC5zLmZnQ29sb3IsZHQuZmdDb2xvcil8fCQwKEwucy5iZ0NvbG9yLGR0LmJnQ29sb3IpKWNvbnRpbnVlfWJyZWFrfX1pZihTZT09US5GaWxscy5sZW5ndGgpe3ZhciBjdD17fTtMLnMuc3RvcHM/KG51bGwhPUwucy5hbmdsZSYmKGN0LmFuZ2xlPUwu''@;'; put 'put ''cy5hbmdsZSksY3Quc3RvcHM9W10sTC5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oRXQpe2N0LnN0b3BzLnB1c2gob24oRXQpKX0pKTpjdD17cGF0dGVyblR5cGU6TC5zLnBhdHRlcm5UeXBlLGZnQ29sb3I6TC5zLmZnQ29sb3IsYmdDb2xvcjpMLnMuYmdDb2xvcn0sUS5GaWxscy5wdXNoKGN0''@;'; put 'put ''KX19aWYoUS5Cb3JkZXJzKXtmb3IoO0hlPFEuQm9yZGVycy5sZW5ndGg7KytIZSl7dmFyIGJ0PVEuQm9yZGVyc1tIZV0sRnQ9InRvcCI7aWYoTC5zW0Z0XSl7aWYoIWJ0W0Z0XXx8TC5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHwkMChMLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29u''@;'; put 'put ''dGludWV9ZWxzZSBpZihudWxsIT1idFtGdF0pY29udGludWU7aWYoTC5zW0Z0PSJib3R0b20iXSl7aWYoIWJ0W0Z0XXx8TC5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHwkMChMLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtGdF0pY29udGlu''@;'; put 'put ''dWU7aWYoTC5zW0Z0PSJsZWZ0Il0pe2lmKCFidFtGdF18fEwuc1tGdF0uc3R5bGUhPWJ0W0Z0XS5zdHlsZXx8JDAoTC5zW0Z0XS5jb2xvcixidFtGdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbRnRdKWNvbnRpbnVlO2lmKEwuc1tGdD0icmlnaHQiXSl7aWYoIWJ0W0Z0XXx8''@;'; put 'put ''TC5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHwkMChMLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtGdF0pY29udGludWU7YnJlYWt9SGU9PVEuQm9yZGVycy5sZW5ndGgmJlEuQm9yZGVycy5wdXNoKHt0b3A6TC5zLnRvcCYmb24oTC5zLnRv''@;'; put 'put ''cCl8fHZvaWQgMCxib3R0b206TC5zLmJvdHRvbSYmb24oTC5zLmJvdHRvbSl8fHZvaWQgMCxsZWZ0Okwucy5sZWZ0JiZvbihMLnMubGVmdCl8fHZvaWQgMCxyaWdodDpMLnMucmlnaHQmJm9uKEwucy5yaWdodCl8fHZvaWQgMH0pfWlmKFAmJkwucy5zdHlsZSYmIk5vcm1hbCIhPT1MLnMuc3R5''@;'; put 'put ''bGUpe2ZvcihWZT0xO1ZlPFAubGVuZ3RoJiZQW1ZlXS5uYW1lIT1MLnMuc3R5bGU7KytWZSk7VmU9PVAubGVuZ3RoJiZQLnB1c2goe25hbWU6TC5zLnN0eWxlLG51bUZtdElkOnJlLGZvbnRJZDp2ZSxmaWxsSWQ6U2UsYm9yZGVySWQ6SGV9KX19Zm9yKHBlPTA7cGUhPV9lOysrcGUpaWYoeVtw''@;'; put 'put ''ZV0ubnVtRm10SWQ9PXJlJiZ5W3BlXS5mb250SWQ9PXZlJiZ5W3BlXS5maWxsSWQ9PVNlJiZ5W3BlXS5ib3JkZXJJZD09SGUmJnlbcGVdLnhmSWQ9PVZlKXtpZihMLnMmJkwucy5hbGlnbm1lbnQpe2lmKCF5W3BlXS5hbGlnbm1lbnQpY29udGludWU7aWYoTC5zLmFsaWdubWVudC5ob3Jpem9u''@;'; put 'put ''dGFsIT15W3BlXS5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8TC5zLmFsaWdubWVudC52ZXJ0aWNhbCE9eVtwZV0uYWxpZ25tZW50LnZlcnRpY2FsfHxMLnMuYWxpZ25tZW50LndyYXBUZXh0IT15W3BlXS5hbGlnbm1lbnQud3JhcFRleHR8fEwucy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQhPXlbcGVd''@;'; put 'put ''LmFsaWdubWVudC5zaHJpbmtUb0ZpdHx8TC5zLmFsaWdubWVudC50ZXh0Um90YXRpb24hPXlbcGVdLmFsaWdubWVudC50ZXh0Um90YXRpb258fEwucy5hbGlnbm1lbnQuaW5kZW50IT15W3BlXS5hbGlnbm1lbnQuaW5kZW50KWNvbnRpbnVlfWVsc2UgaWYoeVtwZV0uYWxpZ25tZW50KWNvbnRp''@;'; put 'put ''bnVlO2lmKEwucyl7aWYoISFMLnMuaGlkZGVuPT0oIXlbcGVdLnByb3RlY3Rpb258fCF5W3BlXS5wcm90ZWN0aW9uLmhpZGRlbil8fCEhTC5zLmVkaXRhYmxlPT0oIXlbcGVdLnByb3RlY3Rpb258fCF5W3BlXS5wcm90ZWN0aW9uLmVkaXRhYmxlKSljb250aW51ZX1lbHNlIGlmKHlbcGVdLnBy''@;'; put 'put ''b3RlY3Rpb24pY29udGludWU7cmV0dXJuIHBlfX1lbHNlIGZvcihwZT0wO3BlIT1fZTsrK3BlKWlmKHlbcGVdLm51bUZtdElkPT09cmUpcmV0dXJuIHBlO3JldHVybiB5W19lXT17bnVtRm10SWQ6cmUsZm9udElkOnZlLGZpbGxJZDpTZSxib3JkZXJJZDpIZSx4ZklkOlZlLGFwcGx5TnVtYmVy''@;'; put 'put ''Rm9ybWF0OjF9LHZlPjAmJih5W19lXS5hcHBseUZvbnQ9MSksU2U+MCYmKHlbX2VdLmFwcGx5RmlsbD0xKSxIZT4wJiYoeVtfZV0uYXBwbHlCb3JkZXI9MSksIVAmJkwucyYmTC5zLnN0eWxlJiYiTm9ybWFsIiE9TC5zLnN0eWxlJiYoeVtfZV0uc3R5bGU9TC5zLnN0eWxlKSxMLnMmJkwucy5h''@;'; put 'put ''bGlnbm1lbnQmJih5W19lXS5hbGlnbm1lbnQ9e30sWyJob3Jpem9udGFsIiwidmVydGljYWwiLCJ3cmFwVGV4dCIsInNocmlua1RvRml0IiwiaW5kZW50IiwidGV4dFJvdGF0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihFdCl7bnVsbCE9TC5zLmFsaWdubWVudFtFdF0mJih5W19lXS5hbGlnbm1l''@;'; put 'put ''bnRbRXRdPUwucy5hbGlnbm1lbnRbRXRdKX0pKSxMLnMmJkwucy5oaWRkZW4mJih5W19lXS5wcm90ZWN0aW9ufHwoeVtfZV0ucHJvdGVjdGlvbj17fSkseVtfZV0ucHJvdGVjdGlvbi5oaWRkZW49ITApLEwucyYmTC5zLmVkaXRhYmxlJiYoeVtfZV0ucHJvdGVjdGlvbnx8KHlbX2VdLnByb3Rl''@;'; put 'put ''Y3Rpb249e30pLHlbX2VdLnByb3RlY3Rpb24uZWRpdGFibGU9ITApLF9lfWZ1bmN0aW9uIHA2KHksUCxMLFEscmUscGUsX2UsdmUpeyJkIj09PXkudCYmInN0cmluZyI9PXR5cGVvZiB5LnYmJih5LnY9SHQoeS52KSk7dHJ5e3BlLmNlbGxORiYmKHkuej13Ll90YWJsZVtQXSl9Y2F0Y2goSGUp''@;'; put 'put ''e2lmKHBlLldURil0aHJvdyBIZX1pZigoIXBlfHwhMSE9PXBlLmNlbGxUZXh0KSYmInoiIT15LnQpdHJ5e2lmKG51bGw9PXcuX3RhYmxlW1BdJiZ3LmxvYWQoZGVbUF18fCJHZW5lcmFsIixQKSwiZSI9PT15LnQpeS53PXkud3x8UW9beS52XTtlbHNlIGlmKDA9PT1QKWlmKCJuIj09PXkudCl5''@;'; put 'put ''Lnc9KDB8eS52KT09PXkudj93Ll9nZW5lcmFsX2ludCh5LnYpOncuX2dlbmVyYWxfbnVtKHkudik7ZWxzZSBpZigiZCI9PT15LnQpe3ZhciBTZT1VZSh5LnYpO3kudz0oMHxTZSk9PT1TZT93Ll9nZW5lcmFsX2ludChTZSk6dy5fZ2VuZXJhbF9udW0oU2UpfWVsc2V7aWYodm9pZCAwPT09eS52''@;'; put 'put ''KXJldHVybiIiO3kudz13Ll9nZW5lcmFsKHkudixaMyl9ZWxzZSB5Lnc9dy5mb3JtYXQoUCwiZCI9PT15LnQ/VWUoeS52KTp5LnYsWjMpfWNhdGNoKEhlKXtpZihwZS5XVEYpdGhyb3cgSGV9aWYocGUuY2VsbFN0eWxlcyYmdmUpe2lmKHkucz17fSxudWxsIT1MJiZ2ZS5GaWxscyl0cnl7VXQo''@;'; put 'put ''eS5zLHZlLkZpbGxzW0xdKX1jYXRjaChIZSl7aWYocGUuV1RGKXRocm93IEhlfWlmKG51bGwhPVEmJnZlLkZvbnRzKXRyeXtVdCh5LnMsdmUuRm9udHNbUV0pfWNhdGNoKEhlKXtpZihwZS5XVEYpdGhyb3cgSGV9aWYobnVsbCE9cmUmJnZlLkJvcmRlcnMpdHJ5e1V0KHkucyx2ZS5Cb3JkZXJz''@;'; put 'put ''W3JlXSl9Y2F0Y2goSGUpe2lmKHBlLldURil0aHJvdyBIZX19fWZ1bmN0aW9uIHM1KHksUCxMKXtpZih5JiZ5WyIhcmVmIl0pe3ZhciBRPU9pKHlbIiFyZWYiXSk7aWYoUS5lLmM8US5zLmN8fFEuZS5yPFEucy5yKXRocm93IG5ldyBFcnJvcigiQmFkIHJhbmdlICgiK0wrIik6ICIreVsiIXJl''@;'; put 'put ''ZiJdKX19dmFyIHd2PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLGE1PS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sdVM9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20sJFo9LyIoXHcq''@;'; put 'put ''Olx3KikiLyxDdj0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLGhmPS88KD86XHc6KT9jb250cm9sXGJbXj5dKltcL10/Pi9nLGc2PS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxTdj0vPCg/Olx3Oik/cGFnZU1h''@;'; put 'put ''cmdpbnNbXj5dKlwvPi9nLE12PS88KD86XHc6KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sVEk9LzwoPzpcdzopP3NoZWV0UHJvdGVjdGlvblxiKD86W14+YS16XVtePl0qKT9cLz4vLERJPS88KD86XHc6KT9zaGVldFByW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzop''@;'; put 'put ''P3NoZWV0UHIpPi8sSUk9LzwoPzpcdzopP3NoZWV0Vmlld3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRWaWV3cyk+LyxkUz0vPCg/Olx3KzopP2RhdGFWYWxpZGF0aW9uc1tePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2RhdGFWYWxpZGF0aW9ucyk+''@;'; put 'put ''LyxtNj0vPCg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZ1xiW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nKT4vZyxmZj0vPCg/Olx3Oik/c2hlZXRGb3JtYXRQcltePl0qXC8+Lyx4dj0vPCg/Olx3KzopP3RhYmxlUGFydHMuKj8+''@;'; put 'put ''KFtcc1xTXSo/KTxcLyg/Olx3KzopP3RhYmxlUGFydHM+LyxXMz0vPCg/Olx3Oik/cGFnZVNldHVwW14+XSpcLz4vLFdkPS88KD86XHc6KT9yb3dCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/cm93QnJlYWtzKT4vLGhTPS88KD86XHc6KT9jb2xCcmVha3NbXj5dKig/''@;'; put 'put ''OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/Y29sQnJlYWtzKT4vLHFaPS88KD86XHc6KT9oZWFkZXJGb290ZXJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/aGVhZGVyRm9vdGVyKT4vLExJPS88KD86XHc6KT9wcmludE9wdGlvbnNcYltePlwvXSpcLz4vO3ZhciBmUz0vPCg/''@;'; put 'put ''Olx3Oik/dGFibGVQYXJ0XGJbXlwvPl0qW1wvXT8+L2c7ZnVuY3Rpb24gdjYoeSxQLEwsUSl7dmFyIHJlPWxuKHkpO0wuU2hlZXRzW1FdfHwoTC5TaGVldHNbUV09e30pLHJlLmNvZGVOYW1lJiYoTC5TaGVldHNbUV0uQ29kZU5hbWU9cmUuY29kZU5hbWUpfXZhciBfNj0vPCg/Olx3Oik/dGFi''@;'; put 'put ''Q29sb3JbXj5dKltcL10/Pi8sZ1M9LzwoPzpcdzopP3BhZ2VTZXRVcFByW14+XSpbXC9dPz4vLG1TPS88KD86XHc6KT9vdXRsaW5lUHJbXj5dKltcL10/Pi8sQ2U9e2Rpc3BsYXllZDoiYXNEaXNwbGF5ZWQiLGVuZDoiYXRFbmQiLG5vbmU6Im5vbmUifSxFdj1iZShDZSksUkk9e2Rpc3BsYXll''@;'; put 'put ''ZDoiZGlzcGxheWVkIixub25lOiJibGFuayIsZGFzaDoiZGFzaCIsIm4vYSI6Ik5BIn0sX1M9YmUoUkkpLHdTPS88KD86XHc6KT9icmtbXj5dKlwvPi9nLGt2PVsib2JqZWN0cyIsInNjZW5hcmlvcyIsInNlbGVjdExvY2tlZENlbGxzIiwic2VsZWN0VW5sb2NrZWRDZWxscyJdLEF2PVsiZm9y''@;'; put 'put ''bWF0Q29sdW1ucyIsImZvcm1hdFJvd3MiLCJmb3JtYXRDZWxscyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRSb3dzIiwiaW5zZXJ0SHlwZXJsaW5rcyIsImRlbGV0ZUNvbHVtbnMiLCJkZWxldGVSb3dzIiwic29ydCIsImF1dG9GaWx0ZXIiLCJwaXZvdFRhYmxlcyJdO2Z1bmN0aW9uIE1TKHkp''@;'; put 'put ''e3ZhciBQPXt9O3JldHVyblsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihMKXt5W0xdJiYoUFtMXT1wYXJzZUZsb2F0KHlbTF0pKX0pLFB9dmFyIHk2PXtDdXN0b206ImN1c3RvbSIsRGF0ZToiZGF0ZSIsVGltZToidGlt''@;'; put 'put ''ZSIsTGVuZ3RoOiJ0ZXh0TGVuZ3RoIixMaXN0OiJsaXN0IixEZWNpbWFsOiJkZWNpbWFsIixXaG9sZToid2hvbGUiLEFueToibm9uZSJ9LEVTPWJlKHk2KSwkMz17SU46ImJldHdlZW4iLE9UOiJub3RCZXR3ZWVuIixFUToiZXF1YWwiLE5FOiJub3RFcXVhbCIsR1Q6ImdyZWF0ZXJUaGFuIixM''@;'; put 'put ''VDoibGVzc1RoYW4iLEdFOiJncmVhdGVyVGhhbk9yRXF1YWwiLExFOiJsZXNzVGhhbk9yRXF1YWwifSxrUz1iZSgkMyk7ZnVuY3Rpb24gQVMoeSxQLEwpe3ZhciBRPVtdLHJlPXt9LHBlPSIiLF9lPSExLHZlPTAsU2U9MDtyZXR1cm4geS5yZXBsYWNlKCR0LGZ1bmN0aW9uKEhlLFZlKXt2YXIg''@;'; put 'put ''R2U9bG4oSGUpO3N3aXRjaChqbihHZVswXSkpe2Nhc2UiPGRhdGFWYWxpZGF0aW9ucyI6Y2FzZSI8ZGF0YVZhbGlkYXRpb25zPiI6Y2FzZSI8L2RhdGFWYWxpZGF0aW9ucz4iOmJyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uIjpyZT17dDpFU1tHZS50eXBlfHwibm9uZSJdLHJlZjoocGU9R2Uu''@;'; put 'put ''c3FyZWYpP3BlLmluZGV4T2YoIiAiKT4tMT9wZTpPaShwZSk6IiJ9LEdlLm9wZXJhdG9yJiYocmUub3A9a1NbR2Uub3BlcmF0b3JdKSxyZS5ibGFuaz0hIUdlLmFsbG93QmxhbmsmJnlyKEdlLmFsbG93QmxhbmspLCghR2Uuc2hvd0lucHV0TWVzc2FnZXx8IXlyKEdlLnNob3dJbnB1dE1lc3Nh''@;'; put 'put ''Z2UpKSYmKHJlLmlucHV0PSExKSxHZS5wcm9tcHRUaXRsZSYmKChyZS5pbnB1dHx8KHJlLmlucHV0PXt9KSkudGl0bGU9eHIoR2UucHJvbXB0VGl0bGUpKSxHZS5wcm9tcHQmJigocmUuaW5wdXR8fChyZS5pbnB1dD17fSkpLm1lc3NhZ2U9eHIoR2UucHJvbXB0KSksKCFHZS5zaG93RXJyb3JN''@;'; put 'put ''ZXNzYWdlfHwheXIoR2Uuc2hvd0Vycm9yTWVzc2FnZSkpJiYocmUuZXJyb3I9ITEpLEdlLmVycm9yVGl0bGUmJigocmUuZXJyb3J8fChyZS5lcnJvcj17fSkpLnRpdGxlPXhyKEdlLmVycm9yVGl0bGUpKSxHZS5lcnJvciYmKChyZS5lcnJvcnx8KHJlLmVycm9yPXt9KSkubWVzc2FnZT14cihH''@;'; put 'put ''ZS5lcnJvcikpLHJlLmVycm9yP3JlLmVycm9yLnN0eWxlPUdlLmVycm9yU3R5bGV8fCJzdG9wIjpHZS5lcnJvclN0eWxlJiYocmUuZXJyb3I9e3N0eWxlOkdlLmVycm9yU3R5bGV9KSxyZS50JiZRLnB1c2gocmUpO2JyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uLz4iOmNhc2UiPC9kYXRhVmFs''@;'; put 'put ''aWRhdGlvbj4iOmJyZWFrO2Nhc2UiPHNxcmVmPiI6U2U9VmUrSGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOnBlPXkuc2xpY2UoU2UsVmUpLHJlLnJlZj1wZT9wZS5pbmRleE9mKCIgIik+LTE/cGU6T2kocGUpOiIiO2JyZWFrO2Nhc2UiPGY+IjpjYXNlIjxmb3JtdWxhMSI6Y2FzZSI8''@;'; put 'put ''Zm9ybXVsYTE+IjpjYXNlIjxmb3JtdWxhMiI6Y2FzZSI8Zm9ybXVsYTI+Ijp2ZT1WZStIZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGExPiI6Y2FzZSI8L2Zvcm11bGEyPiI6aWYoTClicmVhaztjYXNlIjwvZj4iOnZhciBudD14cihQaSh5LnNsaWNlKHZlLFZlKSkpO3N3aXRjaChyZS50''@;'; put 'put ''KXtjYXNlIkxpc3QiOmlmKHJlLmx8fHJlLmYpYnJlYWs7aWYoMzQ9PW50LmNoYXJDb2RlQXQoMCkpe3JlLmw9bnQuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6bnVsbD09cmUuZiYmKHJlLmY9bnQpO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJEZWNpbWFsIjpjYXNl''@;'; put 'put ''Ikxlbmd0aCI6Y2FzZSJUaW1lIjpjYXNlIldob2xlIjpyZS5vcHx8KHJlLm9wPSJJTiIpLG51bGw9PXJlLnY/cmUudj1pc05hTigrbnQpP250OitudDoocmUubWluPXJlLnYscmUubWF4PWlzTmFOKCtudCk/bnQ6K250LGRlbGV0ZSByZS52KX1icmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4''@;'; put 'put ''dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOl9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpfZT0hMTticmVhaztkZWZhdWx0OmlmKFAmJlAuV1RGJiYhX2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitHZVswXSsiIGluIGRhdGEgdmFsaWRhdGlvbiIpfXJl''@;'; put 'put ''dHVybiBIZX0pLFF9dmFyIEx2PXtJTjoiY29udGFpbnNUZXh0IixPVDoibm90Q29udGFpbnNUZXh0IixTVDoiYmVnaW5zV2l0aCIsTkQ6ImVuZHNXaXRoIn0sVFM9YmUoTHYpLERTPXtMTToibGFzdE1vbnRoIixMUzoibGFzdDdEYXlzIixMVzoibGFzdFdlZWsiLE5NOiJuZXh0TW9udGgiLE5X''@;'; put 'put ''OiJuZXh0V2VlayIsVE06InRoaXNNb250aCIsVFc6InRoaXNXZWVrIixURDoidG9kYXkiLFRPOiJ0b21vcnJvdyIsWVM6Inllc3RlcmRheSJ9LFZJPWJlKERTKTtmdW5jdGlvbiB3Nih5KXt2YXIgUD17fTtyZXR1cm4gbnVsbCE9eS52YWwmJihpc05hTigreS52YWwpP1AuZj15LnZhbDpQLnY9''@;'; put 'put ''K3kudmFsKSxQLnQ9eS50eXBlLFB9ZnVuY3Rpb24gcGYoeSl7cmV0dXJuIFNyKCJjZnZvIixudWxsLHt0eXBlOnkudCx2YWw6bnVsbCE9eS52P3kudjpGcih5LmYpfSl9ZnVuY3Rpb24gQzYoeSxQLEwsUSl7dmFyIHJlPXc2KHkpO3JldHVybiByZS5jb2xvcj1VMihQLEwsUSkscmV9ZnVuY3Rp''@;'; put 'put ''b24gSVMoeSxQLEwsUSxyZSl7dmFyIHBlPSh5Lm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBmdW5jdGlvbiBCSSh5LFAsTCxRLHJlLHBlKXt2YXIgX2U9ITEsdmU9W10sU2U9e2Y6W119LEhlPTAsVmU9MCxHZT17Y2Z2b3M6W10sY29sb3JzOltdfSxudD17fSxk''@;'; put 'put ''dD0tMSxDdD0wLGN0PSIiO3JldHVybiB5LnJlcGxhY2UoJHQsZnVuY3Rpb24oYnQsRnQpe3ZhciBFdD1sbihidCk7c3dpdGNoKGpuKEV0WzBdKSl7Y2FzZSI8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIjpjYXNlIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiI6YnJlYWs7Y2FzZSI8Y2ZSdWxlIjpj''@;'; put 'put ''YXNlIjxjZlJ1bGU+IjppZihWZT1GdCxudD1FdCxTZT17cmVmOlAsZjpbXX0sIWJ0Lm1hdGNoKC9cLz4vKSlicmVhaztjYXNlIjwvY2ZSdWxlPiI6c3dpdGNoKG50LmR4ZklkJiZyZSYmcmUuRFhGJiYoU2Uucz1yZS5EWEZbK250LmR4ZklkXSksbnQudHlwZSl7Y2FzZSJkdXBsaWNhdGVWYWx1''@;'; put 'put ''ZXMiOlNlLnQ9ImR1cCI7YnJlYWs7Y2FzZSJ1bmlxdWVWYWx1ZXMiOlNlLnQ9InVuaXF1ZSI7YnJlYWs7Y2FzZSJjb250YWluc0JsYW5rcyI6U2UudD0iYmxhbmsiLFNlLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0JsYW5rcyI6U2UudD0iYmxhbmsiLFNlLnY9ITE7YnJlYWs7Y2FzZSJj''@;'; put 'put ''b250YWluc0Vycm9ycyI6U2UudD0iZXJyb3IiLFNlLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0Vycm9ycyI6U2UudD0iZXJyb3IiLFNlLnY9ITE7YnJlYWs7Y2FzZSJjZWxsSXMiOnN3aXRjaChudC5vcGVyYXRvcil7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnMiOmNh''@;'; put 'put ''c2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoU2UudD0idGV4dCIsU2Uub3A9VFNbbnQub3BlcmF0b3JdLG51bGw9PW50LnRleHQpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIitTZS5vcCsiIG1pc3NpbmcgdGV4dCIpO1NlLnY9bnQudGV4dCxTZS5mPVNlLmZbMF0sbnVs''@;'; put 'put ''bD09U2UuZiYmZGVsZXRlIFNlLmY7YnJlYWs7ZGVmYXVsdDpTZS50PSJ2YWwiLFNlLm9wPWtTW250Lm9wZXJhdG9yXSwxPT1TZS5mLmxlbmd0aD9pc05hTigrU2UuZlswXSk/U2UuZj1TZS5mWzBdOihTZS52PStTZS5mWzBdLGRlbGV0ZSBTZS5mKTooU2UubWluPWlzTmFOKCtTZS5mWzBdKT9T''@;'; put 'put ''ZS5mWzBdOitTZS5mWzBdLFNlLm1heD1pc05hTigrU2UuZlsxXSk/U2UuZlsxXTorU2UuZlsxXSxkZWxldGUgU2UuZil9YnJlYWs7Y2FzZSJleHByZXNzaW9uIjpTZS50PSJmb3JtdWxhIixTZS5mPVNlLmZbMF07YnJlYWs7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnNUZXh0''@;'; put 'put ''IjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKFNlLnQ9InRleHQiLFNlLm9wPVRTW250LnR5cGVdLG51bGw9PW50LnRleHQmJlNlLmYubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIitTZS5vcCsiIG1pc3NpbmcgdGV4dCIpO1NlLnY9bnVsbCE9bnQu''@;'; put 'put ''dGV4dD9udC50ZXh0OlNlLmZbMV0ubWF0Y2goLyIuKiIvKT9TZS5mWzFdLnNsaWNlKDEsLTEpOlNlLmZbMV0sU2UuZj1TZS5mWzBdLG51bGw9PVNlLmYmJmRlbGV0ZSBTZS5mO2JyZWFrO2Nhc2UiY29sb3JTY2FsZSI6aWYoU2UudD0ic2NhbGUiLCFTZS5jb2xvclNjYWxlKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigibWlzc2luZyBjb2xvclNjYWxlIik7U2UuY21pbj1DNigoR2U9U2UuY29sb3JTY2FsZSkuY2Z2b3NbMF0sR2UuY29sb3JzWzBdLHJlLFEpLDM9PUdlLmNmdm9zLmxlbmd0aCYmKFNlLmNtaWQ9QzYoR2UuY2Z2b3NbMV0sR2UuY29sb3JzWzFdLHJlLFEpKSxTZS5jbWF4PUM2KEdlLmNm''@;'; put 'put ''dm9zW0dlLmNmdm9zLmxlbmd0aC0xXSxHZS5jb2xvcnNbR2UuY2Z2b3MubGVuZ3RoLTFdLHJlLFEpO2JyZWFrO2Nhc2UiZGF0YUJhciI6aWYoU2UudD0iYmFyIiwhU2UuZGF0YUJhcil0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgZGF0YUJhciIpOyhHZT1TZS5kYXRhQmFyKS5jb2xvcnNbMF0m''@;'; put 'put ''JihTZS5jb2xvcj1VMihHZS5jb2xvcnNbMF0scmUsUSkpLFNlLmNtaW49dzYoR2UuY2Z2b3NbMF0pLFNlLmNtYXg9dzYoR2UuY2Z2b3NbMV0pO2JyZWFrO2Nhc2UiaWNvblNldCI6aWYoU2UudD0iaWNvbiIsIVNlLmljb25TZXQpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGljb25TZXQiKTtT''@;'; put 'put ''ZS50aHJlc2g9KEdlPVNlLmljb25TZXQpLmNmdm9zLm1hcChmdW5jdGlvbihUdCl7cmV0dXJuIHc2KFR0KX0pLFNlLnY9R2UudGFnJiZHZS50YWcuaWNvblNldHx8IjNUcmFmZmljTGlnaHRzMSIsU2UucmV2PXlyKEdlLnRhZy5yZXZlcnNlfHwiZmFsc2UiKSxTZS5wY3Q9eXIoR2UudGFnLnBl''@;'; put 'put ''cmNlbnR8fCJ0cnVlIiksU2UuaGlkZGVuPSF5cihHZS50YWcuc2hvd1ZhbHVlfHwidHJ1ZSIpO2JyZWFrO2Nhc2UidGltZVBlcmlvZCI6U2UudD0iZGF0ZSIsU2Uub3A9VklbbnQudGltZVBlcmlvZF07YnJlYWs7Y2FzZSJhYm92ZUF2ZXJhZ2UiOlNlLnQ9ImF2ZyIsU2Uub3A9IjAiPT1udC5h''@;'; put 'put ''Ym92ZUF2ZXJhZ2U/IkwiOiJHIixTZS5vcCs9bnQuc3RkRGV2P250LnN0ZERldjp5cihudC5lcXVhbEF2ZXJhZ2V8fCIwIik/IkUiOiJUIjticmVhaztjYXNlInRvcDEwIjpTZS50PSJyYW5rIixTZS5vcD0oeXIobnQuYm90dG9tfHwiMCIpPyJCIjoiVCIpKyh5cihudC5wZXJjZW50fHwiMCIp''@;'; put 'put ''PyJQIjoiViIpLFNlLnY9K250LnJhbms7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCBDRiBUeXBlICIrbnQudHlwZX1pZihkZWxldGUgU2UuY29sb3JTY2FsZSxkZWxldGUgU2UuZGF0YUJhcixkZWxldGUgU2UuaWNvblNldCwhU2UudCl0aHJvdyBjb25zb2xlLmxvZyh5LnNsaWNl''@;'; put 'put ''KFZlLEZ0K2J0Lmxlbmd0aCkpLCJiYWQgQ0YgcnVsZSI7bnVsbCE9U2UuZiYmIVNlLmYubGVuZ3RoJiZkZWxldGUgU2UuZixTZS5kZWx8fHZlLnB1c2goU2UpO2JyZWFrO2Nhc2UiPGZvcm11bGEiOmNhc2UiPGZvcm11bGE+IjpIZT1GdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGE+''@;'; put 'put ''IjpTZS5mLnB1c2goeHIoeS5zbGljZShIZSxGdCkpKTticmVhaztjYXNlIjxmIjpjYXNlIjxmPiI6SGU9RnQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mPiI6U2UuZi5wdXNoKHhyKHkuc2xpY2UoSGUsRnQpKSk7YnJlYWs7Y2FzZSI8c3FyZWY+IjpDdD1GdCtidC5sZW5ndGg7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8L3NxcmVmPiI6Y3Q9eS5zbGljZShDdCxGdCksUD1jdD9jdC5pbmRleE9mKCIgIik+LTE/Y3Q6T2koY3QpOiIiLFNlLnJlZj1QLHZlLmZvckVhY2goZnVuY3Rpb24oVHQpe1R0LnJlZj1QfSk7YnJlYWs7Y2FzZSI8Y29sb3JTY2FsZSI6Y2FzZSI8Y29sb3JTY2FsZT4iOmNhc2UiPGRhdGFC''@;'; put 'put ''YXIiOmNhc2UiPGRhdGFCYXI+IjpjYXNlIjxpY29uU2V0IjpjYXNlIjxpY29uU2V0PiI6R2U9e2Nmdm9zOltdLGNvbG9yczpbXSx0YWc6RXR9LEhlPUZ0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvY29sb3JTY2FsZT4iOlNlLmNvbG9yU2NhbGU9R2U7YnJlYWs7Y2FzZSI8L2RhdGFCYXI+IjpT''@;'; put 'put ''ZS5kYXRhQmFyPUdlO2JyZWFrO2Nhc2UiPC9pY29uU2V0PiI6U2UuaWNvblNldD1HZTticmVhaztjYXNlIjxjZnZvIjpjYXNlIjxjZnZvLz4iOkdlLmNmdm9zLnB1c2goRXQpO2JyZWFrO2Nhc2UiPC9jZnZvPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOkdlLmNvbG9ycy5wdXNoKEV0KTticmVhaztj''@;'; put 'put ''YXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOl9lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpfZT0hMTticmVhaztjYXNlIjxuZWdhdGl2ZUZpbGxDb2xvciI6Y2FzZSI8YXhpc0NvbG9yIjpjYXNlIjxib3Jk''@;'; put 'put ''ZXJDb2xvciI6Y2FzZSI8bmVnYXRpdmVCb3JkZXJDb2xvciI6Y2FzZSI8Y2ZJY29uIjpTZS5kZWw9ITA7YnJlYWs7Y2FzZSI8ZHhmPiI6X2U9ITAsZHQ9RnQ7YnJlYWs7Y2FzZSI8L2R4Zj4iOl9lPSExLFNlLnM9eEQoeS5zbGljZShkdCxGdCtidC5sZW5ndGgpLHJlLFEsTCk7YnJlYWs7ZGVm''@;'; put 'put ''YXVsdDppZihMJiZMLldURil7aWYocGUpYnJlYWs7aWYoIV9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrRXRbMF0rIiBpbiBjb25kZm10Iil9fXJldHVybiBidH0pLHZlfSh5LHBlLFAsTCxRLHJlKX12YXIgekk9LzwoPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/''@;'; put 'put ''XC8/Pi9nO2Z1bmN0aW9uIGM1KHksUCl7dmFyIEw9MCxRPTAscmU9MCxwZT0wO2lmKCFQfHwhUC5DZWxsWGYpcmV0dXJuIG51bGw7dmFyIF9lPVAuQ2VsbFhmW3ldO251bGwhPV9lJiYobnVsbCE9X2UubnVtRm10SWQmJihMPV9lLm51bUZtdElkKSxudWxsIT1fZS5maWxsSWQmJihRPV9lLmZp''@;'; put 'put ''bGxJZCksbnVsbCE9X2UuZm9udElkJiYocmU9X2UuZm9udElkKSxudWxsIT1fZS5ib3JkZXJJZCYmKHBlPV9lLmJvcmRlcklkKSk7dmFyIHZlPXt0OiJ6In07dHJ5e3A2KHZlLEwsUSxyZSxwZSx7V1RGOjEsY2VsbFN0eWxlczohMH0sMCxQKX1jYXRjaHt9cmV0dXJuIHZlLnN9ZnVuY3Rpb24g''@;'; put 'put ''VUkoeSxQLEwsUSl7aWYodm9pZCAwPT09eS52JiZ2b2lkIDA9PT15LmYmJm51bGw9PXkucyYmIXkuY3x8InoiPT09eS50JiYheS5jJiYhUS5zaGVldFN0dWJzKXJldHVybiIiO3ZhciByZT0iIixwZT15LnQsX2U9eS52O2lmKCJ6IiE9PXkudClzd2l0Y2goeS50KXtjYXNlImIiOnJlPXkudj8i''@;'; put 'put ''MSI6IjAiO2JyZWFrO2Nhc2UibiI6cmU9IiIreS52O2JyZWFrO2Nhc2UiZSI6cmU9UW9beS52XTticmVhaztjYXNlImQiOlEmJlEuY2VsbERhdGVzP3JlPUh0KHkudiwtMSkudG9JU09TdHJpbmcoKTooKHk9b24oeSkpLnQ9Im4iLHJlPSIiKyh5LnY9VWUoSHQoeS52KSkpKSx0eXBlb2YgeS56''@;'; put 'put ''PiJ1IiYmKHkuej13Ll90YWJsZVsxNF0pO2JyZWFrO2RlZmF1bHQ6cmU9eS52fXZhciB2ZT0ieiI9PXkudD8iIjpmcygidiIsRnIocmUpKSxTZT17cjpQfSxIZT1RP2d1KFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyx5LFEpOjA7c3dpdGNoKDAhPT1IZSYmKFNlLnM9SGUpLHkudCl7Y2FzZSJu''@;'; put 'put ''IjpjYXNlInoiOmJyZWFrO2Nhc2UiZCI6U2UudD0iZCI7YnJlYWs7Y2FzZSJiIjpTZS50PSJiIjticmVhaztjYXNlImUiOlNlLnQ9ImUiO2JyZWFrO2RlZmF1bHQ6aWYobnVsbD09eS52KXtkZWxldGUgeS50O2JyZWFrfWlmKFEmJlEuYm9va1NTVCl7dmU9ZnMoInYiLCIiK3l2KFEuU3RyaW5n''@;'; put 'put ''cyx5LnYseS5SP3kucj1KaCh5LlIpOm51bGwsUS5yZXZTdHJpbmdzKSksU2UudD0icyI7YnJlYWt9QXJyYXkuaXNBcnJheSh5LlIpPyh2ZT0iPGlzPiIrSmgoeS5SKSsiPC9pcz4iLFNlLnQ9ImlubGluZVN0ciIpOlNlLnQ9InN0ciJ9aWYoeS50IT1wZSYmKHkudD1wZSx5LnY9X2UpLHkuZil7''@;'; put 'put ''dmFyIFZlPXkuRiYmeS5GLnNsaWNlKDAsUC5sZW5ndGgpPT1QP3t0OiJhcnJheSIscmVmOnkuRn06bnVsbDt2ZT1TcigiZiIsRnIoeS5mKSxWZSkrKG51bGwhPXkudj92ZToiIil9cmV0dXJuIHkubCYmTFsiIWxpbmtzIl0ucHVzaChbUCx5LmxdKSx5LmMmJkxbIiFjb21tZW50cyJdLnB1c2go''@;'; put 'put ''W1AseS5jXSksU3IoImMiLHZlLFNlKX12YXIgWkk9ZnVuY3Rpb24oKXt2YXIgeT0vPCg/Olx3KzopP2NbIFwvPl0vLFA9LzxcLyg/Olx3KzopP3Jvdz4vLEw9L3I9WyInXShbXiInXSopWyInXS8sUT0vPCg/Olx3KzopP2lzPihbXFNcc10qPyk8XC8oPzpcdys6KT9pcz4vLHJlPS9yZWY9WyIn''@;'; put 'put ''XShbXiInXSopWyInXS8scGU9dWwoInYiKSxfZT11bCgiZiIpO3JldHVybiBmdW5jdGlvbihTZSxIZSxWZSxHZSxudCxkdCxDdCl7Zm9yKHZhciB1bixxbixlcix0cixRcixjdD0wLGJ0PSIiLEZ0PVtdLEV0PVtdLFR0PTAsWnQ9MCxwbj0wLEtuPSIiLHpuPTAsQW49MCxabj0wLE5yPTAsb2k9''@;'; put 'put ''MCxraT0wLExpPUFycmF5LmlzQXJyYXkoQ3QuQ2VsbFhmKSx1cj1bXSxUbj1bXSx2cj1BcnJheS5pc0FycmF5KFZlKSxycj1bXSxTbj17fSxwcj0hMSxDaT1TZS5zcGxpdChQKSxCcj0hIUdlLnNoZWV0U3R1YnMsamk9ISFHZS5jZWxsSFRNTCxfbz0hKCExPT09R2UuY2VsbFRleHQmJiFHZS5j''@;'; put 'put ''ZWxsTkYmJiFHZS5jZWxsU3R5bGVzKSxEaT0wLFlvPUNpLmxlbmd0aDtEaSE9WW87KytEaSl7dmFyIGxvPShidD1DaVtEaV0udHJpbSgpKS5sZW5ndGg7aWYoMCE9PWxvKXt2YXIgQW89MDtlOmZvcihjdD0wO2N0PGxvOysrY3Qpc3dpdGNoKGJ0W2N0XSl7Y2FzZSI+IjppZigiLyIhPWJ0W2N0''@;'; put 'put ''LTFdKXsrK2N0O2JyZWFrIGV9R2UuY2VsbFN0eWxlcyYmbnVsbCE9KHFuPWxuKGJ0LnNsaWNlKEFvLGN0KSwhMCkpLnImJnBhcnNlSW50KHFuLnIsMTApJiYoem49cGFyc2VJbnQocW4uciwxMCksU249e30scHI9ITEscW4uaHQmJihwcj0hMCxTbi5ocHQ9cGFyc2VGbG9hdChxbi5odCksU24u''@;'; put 'put ''aHB4PVUxKFNuLmhwdCkpLHFuLmR5RGVzY2VudCYmKHByPSEwLFNuLmR5RGVzY2VudD1xbi5keURlc2NlbnQpLCIxIj09cW4uaGlkZGVuJiYocHI9ITAsU24uaGlkZGVuPSEwKSxudWxsIT1xbi5vdXRsaW5lTGV2ZWwmJihwcj0hMCxTbi5sZXZlbD0rcW4ub3V0bGluZUxldmVsKSxxbi5zJiZD''@;'; put 'put ''dCYmQ3QuQ2VsbFhmJiYocHI9ITAsU24ucz1jNShxbi5zLEN0KSkscHImJihyclt6bi0xXT1TbikpO2JyZWFrO2Nhc2UiPCI6QW89Y3R9aWYoQW8+PWN0KWJyZWFrO2lmKHpuPW51bGwhPShxbj1sbihidC5zbGljZShBbyxjdCksITApKS5yP3BhcnNlSW50KHFuLnIsMTApOnpuKzEsQW49LTEs''@;'; put 'put ''IShHZS5zaGVldFJvd3MmJkdlLnNoZWV0Um93czx6bikpe0dlLm5vZGltfHwobnQucy5yPnpuLTEmJihudC5zLnI9em4tMSksbnQuZS5yPHpuLTEmJihudC5lLnI9em4tMSkpO3ZhciB4bz17dDoicm93Iixyb3c6W10sUjp6bi0xLGlkeDpIZX07R2UuY2VsbFN0eWxlcyYmKFNuPXt9LHByPSEx''@;'; put 'put ''LHFuLmh0JiYocHI9ITAsU24uaHB0PXBhcnNlRmxvYXQocW4uaHQpLFNuLmhweD1VMShTbi5ocHQpKSxxbi5keURlc2NlbnQmJihwcj0hMCxTbi5keURlc2NlbnQ9cW4uZHlEZXNjZW50KSwiMSI9PXFuLmhpZGRlbiYmKHByPSEwLFNuLmhpZGRlbj0hMCksbnVsbCE9cW4ub3V0bGluZUxldmVs''@;'; put 'put ''JiYocHI9ITAsU24ubGV2ZWw9K3FuLm91dGxpbmVMZXZlbCkscW4ucyYmKHByPSEwLFNuLnM9YzUocW4ucyxDdCkpLHByJiYoR2UuY2FsbGJhY2s/eG8ucHJvcHM9U246cnJbem4tMV09U24pKSxGdD1idC5zbGljZShjdCkuc3BsaXQoeSk7Zm9yKHZhciBoaT0wO2hpIT1GdC5sZW5ndGgmJiI8''@;'; put 'put ''Ij09RnRbaGldLnRyaW0oKS5jaGFyQXQoMCk7KytoaSk7Zm9yKEZ0PUZ0LnNsaWNlKGhpKSxjdD0wO2N0IT1GdC5sZW5ndGg7KytjdClpZigwIT09KGJ0PUZ0W2N0XS50cmltKCkpLmxlbmd0aCl7aWYoRXQ9YnQubWF0Y2goTCksVHQ9Y3QsWnQ9MCxwbj0wLGJ0PSI8YyAiKygiPCI9PWJ0LnNs''@;'; put 'put ''aWNlKDAsMSk/Ij4iOiIiKStidCxudWxsIT1FdCYmMj09PUV0Lmxlbmd0aCl7Zm9yKFR0PTAsS249RXRbMV0sWnQ9MDtadCE9S24ubGVuZ3RoJiYhKChwbj1Lbi5jaGFyQ29kZUF0KFp0KS02NCk8MXx8cG4+MjYpOysrWnQpVHQ9MjYqVHQrcG47QW49LS1UdH1lbHNlKytBbjtmb3IoWnQ9MDta''@;'; put 'put ''dCE9YnQubGVuZ3RoJiY2MiE9PWJ0LmNoYXJDb2RlQXQoWnQpOysrWnQpO2lmKCsrWnQsKHFuPWxuKGJ0LnNsaWNlKDAsWnQpLCEwKSkucnx8KHFuLnI9ZGkoe3I6em4tMSxjOkFufSkpLHVuPXt0OiIifSxudWxsIT0oRXQ9KEtuPWJ0LnNsaWNlKFp0KSkubWF0Y2gocGUpKSYmIiIhPT1FdFsx''@;'; put 'put ''XSYmKHVuLnY9eHIoRXRbMV0pKSxHZS5jZWxsRm9ybXVsYSl7aWYobnVsbCE9KEV0PUtuLm1hdGNoKF9lKSkmJiIiIT09RXRbMV0pe2lmKHVuLmY9eHIoUGkoRXRbMV0pKS5yZXBsYWNlKC9cclxuL2csIlxuIiksR2UueGxmbnx8KHVuLmY9RzEodW4uZikpLEV0WzBdLmluZGV4T2YoJ3Q9ImFy''@;'; put 'put ''cmF5IicpPi0xKXVuLkY9KEtuLm1hdGNoKHJlKXx8W10pWzFdLHVuLkYuaW5kZXhPZigiOiIpPi0xJiZ1ci5wdXNoKFtPaSh1bi5GKSx1bi5GXSk7ZWxzZSBpZihFdFswXS5pbmRleE9mKCd0PSJzaGFyZWQiJyk+LTEpe3RyPWxuKEV0WzBdKTt2YXIgdGE9eHIoUGkoRXRbMV0pKTtHZS54bGZu''@;'; put 'put ''fHwodGE9RzEodGEpKSxUbltwYXJzZUludCh0ci5zaSwxMCldPVt0cix0YSxxbi5yXX19ZWxzZShFdD1Lbi5tYXRjaCgvPGZbXj5dKlwvPi8pKSYmVG5bKHRyPWxuKEV0WzBdKSkuc2ldJiYodW4uZj1uSShUblt0ci5zaV1bMV0sVG5bdHIuc2ldWzJdLHFuLnIpKTt2YXIgTW49c3MocW4ucik7''@;'; put 'put ''Zm9yKFp0PTA7WnQ8dXIubGVuZ3RoOysrWnQpTW4ucj49dXJbWnRdWzBdLnMuciYmTW4ucjw9dXJbWnRdWzBdLmUuciYmTW4uYz49dXJbWnRdWzBdLnMuYyYmTW4uYzw9dXJbWnRdWzBdLmUuYyYmKHVuLkY9dXJbWnRdWzFdKX1pZihudWxsPT1xbi50JiZ2b2lkIDA9PT11bi52KWlmKHVuLmZ8''@;'; put 'put ''fHVuLkYpdW4udj0wLHVuLnQ9Im4iO2Vsc2V7aWYoIUJyKWNvbnRpbnVlO3VuLnQ9InoifWVsc2UgdW4udD1xbi50fHwibiI7c3dpdGNoKG50LnMuYz5BbiYmKG50LnMuYz1BbiksbnQuZS5jPEFuJiYobnQuZS5jPUFuKSx1bi50KXtjYXNlIm4iOmlmKCIiPT11bi52fHxudWxsPT11bi52KXtp''@;'; put 'put ''ZighQnIpY29udGludWU7dW4udD0ieiJ9ZWxzZSB1bi52PXBhcnNlRmxvYXQodW4udik7YnJlYWs7Y2FzZSJzIjppZih0eXBlb2YgdW4udj4idSIpe2lmKCFCciljb250aW51ZTt1bi50PSJ6In1lbHNlIGVyPWY2W3BhcnNlSW50KHVuLnYsMTApXSx1bi52PWVyLnQsdW4ucj1lci5yLGVyLlIm''@;'; put 'put ''Jih1bi5SPWVyLlIpLGppJiYodW4uaD1lci5oKTticmVhaztjYXNlInN0ciI6dW4udD0icyIsdW4udj1udWxsIT11bi52P1BpKHVuLnYpOiIiLGppJiYodW4uaD1ybyh1bi52KSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOkV0PUtuLm1hdGNoKFEpLHVuLnQ9InMiLG51bGwhPUV0JiYoZXI9VDko''@;'; put 'put ''RXRbMV0pKT8odW4udj1lci50LGVyLlImJih1bi5SPWVyLlIpLGppJiYodW4uaD1lci5oKSk6dW4udj0iIjticmVhaztjYXNlImIiOnVuLnY9eXIodW4udik7YnJlYWs7Y2FzZSJkIjpHZS5jZWxsRGF0ZXM/dW4udj1IdCh1bi52LDEpOih1bi52PVVlKEh0KHVuLnYsMSkpLHVuLnQ9Im4iKTti''@;'; put 'put ''cmVhaztjYXNlImUiOiExIT09R2UuY2VsbFRleHQmJih1bi53PXVuLnYpLHVuLnY9S2FbdW4udl19aWYoX28pe1puPU5yPW9pPWtpPTAsUXI9bnVsbCxMaSYmdm9pZCAwIT09cW4ucyYmbnVsbCE9KFFyPUN0LkNlbGxYZltxbi5zXSkmJihudWxsIT1Rci5udW1GbXRJZCYmKFpuPVFyLm51bUZt''@;'; put 'put ''dElkKSxHZS5jZWxsU3R5bGVzJiYobnVsbCE9UXIuZmlsbElkJiYoTnI9UXIuZmlsbElkKSxudWxsIT1Rci5mb250SWQmJihvaT1Rci5mb250SWQpLG51bGwhPVFyLmJvcmRlcklkJiYoa2k9UXIuYm9yZGVySWQpKSk7dHJ5e3A2KHVuLFpuLE5yLG9pLGtpLEdlLDAsQ3QpfWNhdGNoe31HZS5j''@;'; put 'put ''ZWxsU3R5bGVzJiZ1bi5zJiYoUXImJlFyLmFsaWdubWVudCYmKHVuLnMuYWxpZ25tZW50PW9uKFFyLmFsaWdubWVudCkpLFFyJiZRci5wcm90ZWN0aW9uJiYobnVsbCE9UXIucHJvdGVjdGlvbi5oaWRkZW4mJih1bi5zLmhpZGRlbj1Rci5wcm90ZWN0aW9uLmhpZGRlbiksbnVsbCE9UXIucHJv''@;'; put 'put ''dGVjdGlvbi5lZGl0YWJsZSYmKHVuLnMuZWRpdGFibGU9UXIucHJvdGVjdGlvbi5lZGl0YWJsZSkpLFFyJiZRci5zdHlsZSYmKHVuLnMuc3R5bGU9UXIuc3R5bGUpKSxHZS5jZWxsRGF0ZXMmJkxpJiYibiI9PXVuLnQmJncuaXNfZGF0ZSh3Ll90YWJsZVtabl0pJiYodW4udD0iZCIsdW4udj1o''@;'; put 'put ''dCh1bi52KSl9dmFyIE1zO0dlLm5vZGltJiYoTXM9c3MocW4uciksbnQucy5yPk1zLnImJihudC5zLnI9TXMuciksbnQuZS5yPE1zLnImJihudC5lLnI9TXMucikpLEdlLmNhbGxiYWNrPyhNcz1zcyhxbi5yKSx4by5yb3dbTXMuY109dW4pOnZyPyhWZVsoTXM9c3MocW4ucikpLnJdfHwoVmVb''@;'; put 'put ''TXMucl09W10pLFZlW01zLnJdW01zLmNdPXVuKTpWZVtxbi5yXT11bn1HZS5jYWxsYmFjayYmR2UuY2FsbGJhY2soeG8pfX19QnImJiFHZS5jYWxsYmFjayYmYzUoMCxDdCkscnIubGVuZ3RoPjAmJihWZVsiIXJvd3MiXT1ycil9fSgpLExTPVNyKCJ3b3Jrc2hlZXQiLG51bGwse3htbG5zOmlz''@;'; put 'put ''Lm1haW5bMF0sInhtbG5zOnIiOmlzLnIsInhtbG5zOngxNGFjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0''@;'; put 'put ''eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMifSk7ZnVuY3Rpb24gV0koeSxQLEwsUSl7dmFyIF9lLHJlPVtCbixMU10sdmU9IiIsU2U9TC5TaGVldHNbTC5TaGVldE5hbWVzW3ldXTtudWxsPT1TZSYmKFNlPXt9KTt2YXIgSGU9U2VbIiFyZWYiXXx8IkExIixWZT1PaShIZSk7aWYoVmUu''@;'; put 'put ''ZS5jPjE2MzgzfHxWZS5lLnI+MTA0ODU3NSl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiK0hlKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO1ZlLmUuYz1NYXRoLm1pbihWZS5lLmMsMTYzODMpLFZlLmUucj1NYXRoLm1pbihWZS5lLmMsMTA0ODU3NSks''@;'; put 'put ''SGU9T28oVmUpfVF8fChRPXt9KSxTZVsiIWNvbW1lbnRzIl09W107dmFyIEdlPVtdLG50PVNlWyIhcHJpbnQiXTtpZihmdW5jdGlvbiBabyh5LFAsTCxRLHJlKXt2YXIgcGU9ITEsX2U9e30sdmU9bnVsbDtpZigieGxzeCIhPT1RLmJvb2tUeXBlJiZQLnZiYXJhdyl7dmFyIFNlPVAuU2hlZXRO''@;'; put 'put ''YW1lc1tMXTt0cnl7UC5Xb3JrYm9vayYmKFNlPVAuV29ya2Jvb2suU2hlZXRzW0xdLkNvZGVOYW1lfHxTZSl9Y2F0Y2h7fXBlPSEwLF9lLmNvZGVOYW1lPUZyKFNlKX15JiZ5WyIhY29uZGZtdCJdJiYoX2UuZW5hYmxlRm9ybWF0Q29uZGl0aW9uc0NhbGN1bGF0aW9uPSIxIikseSYmeVsiIXRh''@;'; put 'put ''YmNvbG9yIl0mJih2ZT0odmV8fCIiKSsnPHRhYkNvbG9yIHJnYj0iRkYnK091KHlbIiF0YWJjb2xvciJdLnJnYikrJyIvPicpO3ZhciBIZT0hMSxWZT17fTtpZigoKCh5fHx7fSlbIiFwcmludCJdfHx7fSkucHJvcHN8fHt9KS5maXQmJihIZT0hMCxWZS5maXRUb1BhZ2U9MSksSGUmJih2ZT0o''@;'; put 'put ''dmV8fCIiKStTcigicGFnZVNldFVwUHIiLG51bGwsVmUpKSx5JiZ5WyIhb3V0bGluZSJdKXt2YXIgR2U9e3N1bW1hcnlCZWxvdzoxLHN1bW1hcnlSaWdodDoxfTt5WyIhb3V0bGluZSJdLmFib3ZlJiYoR2Uuc3VtbWFyeUJlbG93PTApLHlbIiFvdXRsaW5lIl0ubGVmdCYmKEdlLnN1bW1hcnlS''@;'; put 'put ''aWdodD0wKSx2ZT0odmV8fCIiKStTcigib3V0bGluZVByIixudWxsLEdlKX0hcGUmJiF2ZXx8KHJlW3JlLmxlbmd0aF09U3IoInNoZWV0UHIiLHZlLF9lKSl9KFNlLEwseSxQLHJlKSxyZVtyZS5sZW5ndGhdPVNyKCJkaW1lbnNpb24iLG51bGwse3JlZjpIZX0pLHJlW3JlLmxlbmd0aF09ZnVu''@;'; put 'put ''Y3Rpb24gUnYoeSxQLEwsUSl7dmFyIHJlPXt3b3JrYm9va1ZpZXdJZDoiMCJ9O2lmKCgoKFF8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSkubGVuZ3RoKXt2YXIgcGU9US5Xb3JrYm9vay5WaWV3cyxfZT1wZVtMXXx8cGVbMF07cmUucmlnaHRUb0xlZnQ9X2UuUlRMPyIxIjoiMCIsX2Uu''@;'; put 'put ''em9vbSYmKHJlLnpvb21TY2FsZT1fZS56b29tKSxudWxsIT1fZS5ncmlkJiYocmUuc2hvd0dyaWRMaW5lcz1fZS5ncmlkKSxfZS52aWV3JiYocmUudmlldz1fZS52aWV3KX1udWxsIT15WyIhZ3JpZGxpbmVzIl0mJihyZS5zaG93R3JpZExpbmVzPSEheVsiIWdyaWRsaW5lcyJdKTt2YXIgdmU9''@;'; put 'put ''IiIsU2U9e3I6MCxjOjB9O2lmKHlbIiFzZWwiXSl7aWYoIShTZT15WyIhc2VsIl0uY2VsbCkpe2lmKCF5WyIhc2VsIl0ucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO1NlPVdzKHlbIiFzZWwiXS5yYW5nZS5yZXBsYWNlKC9c''@;'; put 'put ''cy4qJC8sIiIpKS5zfSJzdHJpbmciPT10eXBlb2YgU2UmJihTZT1zcyhTZSkpfXZhciBWZT15WyIhZnJlZXplIl0/InN0cmluZyI9PXR5cGVvZiB5WyIhZnJlZXplIl0/c3MoeVsiIWZyZWV6ZSJdKTp5WyIhZnJlZXplIl06e2M6MCxyOjB9O2lmKHlbIiFmcmVlemUiXSl7dmFyIEdlPWRpKFZl''@;'; put 'put ''KSxudD17c3RhdGU6ImZyb3plbiIseFNwbGl0OlZlLmMseVNwbGl0OlZlLnIsdG9wTGVmdENlbGw6R2V9O3lbIiFzZWwiXSYmKG50LmFjdGl2ZVBhbmU9KFNlLnI+PVZlLnImJlZlLnI+MD8iYm90dG9tIjoidG9wIikrKFNlLmM+PVZlLmMmJlZlLmM+MD8iUmlnaHQiOiJMZWZ0IikpLHZlPVNy''@;'; put 'put ''KCJwYW5lIixudWxsLG50KX1pZih5WyIhc2VsIl0pe3ZhciBkdD17YWN0aXZlQ2VsbDoic3RyaW5nIj09dHlwZW9mIFNlP1NlOmRpKFNlKX07ZHQuc3FyZWY9eVsiIXNlbCJdLnJhbmdlP3lbIiFzZWwiXS5yYW5nZTpkdC5hY3RpdmVDZWxsKyI6IitkdC5hY3RpdmVDZWxsLHZlKz1Tcigic2Vs''@;'; put 'put ''ZWN0aW9uIixudWxsLGR0KSx5WyIhZnJlZXplIl0mJihWZS5jPjAmJihkdC5wYW5lPSJ0b3BSaWdodCIsdmUrPVNyKCJzZWxlY3Rpb24iLG51bGwsZHQpKSxWZS5yPjAmJihkdC5wYW5lPSJib3R0b21MZWZ0Iix2ZSs9U3IoInNlbGVjdGlvbiIsbnVsbCxkdCkpLFZlLmM+MCYmVmUucj4wJiYo''@;'; put 'put ''ZHQucGFuZT0iYm90dG9tUmlnaHQiLHZlKz1Tcigic2VsZWN0aW9uIixudWxsLGR0KSkpfXJldHVybiBTcigic2hlZXRWaWV3cyIsU3IoInNoZWV0VmlldyIsdmV8fG51bGwscmUpLHt9KX0oU2UsMCx5LEwpLFAuc2hlZXRGb3JtYXQpe3ZhciBkdD17ZGVmYXVsdFJvd0hlaWdodDpQLnNoZWV0''@;'; put 'put ''Rm9ybWF0LmRlZmF1bHRSb3dIZWlnaHR8fCIxNiIsYmFzZUNvbFdpZHRoOlAuc2hlZXRGb3JtYXQuYmFzZUNvbFdpZHRofHwiMTAifTtudWxsIT1QLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdyYmKGR0Lm91dGxpbmVMZXZlbFJvdz1QLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdyks''@;'; put 'put ''cmVbcmUubGVuZ3RoXT1Tcigic2hlZXRGb3JtYXRQciIsbnVsbCxkdCl9ZWxzZSBpZihTZVsiIXNoZWV0Rm9ybWF0Il0pe3ZhciBDdD17fSxjdD0hMTtTZVsiIXNoZWV0Rm9ybWF0Il0ucm93JiYoU2VbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQ/KGN0PSEwLEN0LmRlZmF1bHRSb3dIZWlnaHQ9''@;'; put 'put ''U2VbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQsQ3QuY3VzdG9tSGVpZ2h0PTEpOlNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4PyhjdD0hMCxDdC5kZWZhdWx0Um93SGVpZ2h0PWoyKFNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4KSxDdC5jdXN0b21IZWlnaHQ9MSk6KDA9PT1TZVsiIXNoZWV0''@;'; put 'put ''Rm9ybWF0Il0ucm93LmhwdHx8MD09PVNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4fHxTZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhpZGRlbikmJihjdD0hMCxDdC5kZWZhdWx0Um93SGVpZ2h0PUN0LmRlZmF1bHRSb3dIZWlnaHR8fDE2LEN0LmN1c3RvbUhlaWdodD0xLEN0Lnplcm9IZWlnaHQ9''@;'; put 'put ''MSksU2VbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCYmKEN0WyJ4MTRhYzpkeURlc2NlbnQiXT1TZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50KSksU2VbIiFzaGVldEZvcm1hdCJdLmNvbCYmKFNlWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NofHxwdShTZVsiIXNoZWV0Rm9ybWF0Il0uY29s''@;'; put 'put ''KSxDdC5kZWZhdWx0Q29sV2lkdGg9U2VbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2grNS9wbHx8MCxjdD0hMCksbnVsbD09Q3QuZGVmYXVsdFJvd0hlaWdodCYmKEN0LmRlZmF1bHRSb3dIZWlnaHQ9MTYpLG51bGw9PUN0LmRlZmF1bHRDb2xXaWR0aCYmKEN0LmRlZmF1bHRDb2xXaWR0aD0xMCks''@;'; put 'put ''Q3Qub3V0bGluZUxldmVsUm93PUN0Lm91dGxpbmVMZXZlbFJvd3x8NyxjdCYmKHJlW3JlLmxlbmd0aF09U3IoInNoZWV0Rm9ybWF0UHIiLG51bGwsQ3QpKX1udWxsIT1TZVsiIWNvbHMiXSYmU2VbIiFjb2xzIl0ubGVuZ3RoPjAmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIFR2KHksUCxMKXtm''@;'; put 'put ''b3IodmFyIHJlLFE9WyI8Y29scz4iXSxwZT0wO3BlIT1QLmxlbmd0aDsrK3BlKWlmKHJlPVBbcGVdKXtpZihyZS5hdXRvJiZOaSh5LHJlLHBlKSxyZS5zfHxyZS56KXt2YXIgX2U9e3Q6InoifTtudWxsIT1yZS5zJiYoX2Uucz1yZS5zKSxudWxsIT1yZS56JiYoX2Uuej1yZS56KSxyZS5zdHls''@;'; put 'put ''ZT1ndShMLmNlbGxYZnMsTC5jZWxsU3R5bGVYZnMsX2UsTCl9UVtRLmxlbmd0aF09U3IoImNvbCIsbnVsbCxZZChwZSxyZSkpfXJldHVybiBRW1EubGVuZ3RoXT0iPC9jb2xzPiIsUS5qb2luKCIiKX0oU2UsU2VbIiFjb2xzIl0sUCkpLHJlW19lPXJlLmxlbmd0aF09IjxzaGVldERhdGEvPiIs''@;'; put 'put ''U2VbIiFsaW5rcyJdPVtdLG51bGwhPVNlWyIhcmVmIl0mJih2ZT1mdW5jdGlvbiBZSSh5LFAsTCxRKXt2YXIgU2UsYnQscmU9W10scGU9W10sX2U9T2koeVsiIXJlZiJdKSx2ZT0iIixIZT0iIixWZT1bXSxHZT0wLG50PTAsZHQ9eVsiIXJvd3MiXSxDdD1BcnJheS5pc0FycmF5KHkpLGN0PXty''@;'; put 'put ''OkhlfSxGdD0tMTtmb3IobnQ9X2Uucy5jO250PD1fZS5lLmM7KytudClWZVtudF09TnMobnQpO2ZvcihHZT1fZS5zLnI7R2U8PV9lLmUucjsrK0dlKXtmb3IocGU9W10sSGU9SHMoR2UpLG50PV9lLnMuYztudDw9X2UuZS5jOysrbnQpe1NlPVZlW250XStIZTt2YXIgRXQ9Q3Q/KHlbR2VdfHxb''@;'; put 'put ''XSlbbnRdOnlbU2VdO3ZvaWQgMCE9PUV0JiZudWxsIT0odmU9VUkoRXQsU2UseSxQKSkmJnBlLnB1c2godmUpfShwZS5sZW5ndGg+MHx8ZHQmJmR0W0dlXSkmJihjdD17cjpIZX0sZHQmJmR0W0dlXSYmKChidD1kdFtHZV0pLmhpZGRlbiYmKGN0LmhpZGRlbj0xKSxGdD0tMSxidC5ocHg/RnQ9''@;'; put 'put ''ajIoYnQuaHB4KTpidC5ocHQmJihGdD1idC5ocHQpLEZ0Pi0xJiYoY3QuaHQ9RnQsY3QuY3VzdG9tSGVpZ2h0PTEpLGJ0LmxldmVsJiYoY3Qub3V0bGluZUxldmVsPWJ0LmxldmVsKSxidC5keURlc2NlbnQmJihjdFsieDE0YWM6ZHlEZXNjZW50Il09YnQuZHlEZXNjZW50KSxidC5zJiYoY3Qu''@;'; put 'put ''cz1ndShQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6InoiLHM6YnQuc30sUCksY3QuY3VzdG9tRm9ybWF0PTEpKSxyZVtyZS5sZW5ndGhdPVNyKCJyb3ciLHBlLmpvaW4oIiIpLGN0KSl9aWYoZHQpZm9yKDtHZTxkdC5sZW5ndGg7KytHZSlkdCYmZHRbR2VdJiYoY3Q9e3I6R2UrMX0sKGJ0''@;'; put 'put ''PWR0W0dlXSkuaGlkZGVuJiYoY3QuaGlkZGVuPTEpLEZ0PS0xLGJ0LmhweD9GdD1qMihidC5ocHgpOmJ0LmhwdCYmKEZ0PWJ0LmhwdCksRnQ+LTEmJihjdC5odD1GdCxjdC5jdXN0b21IZWlnaHQ9MSksYnQubGV2ZWwmJihjdC5vdXRsaW5lTGV2ZWw9YnQubGV2ZWwpLHJlW3JlLmxlbmd0aF09''@;'; put 'put ''U3IoInJvdyIsIiIsY3QpKTtyZXR1cm4gcmUuam9pbigiIil9KFNlLFApLHZlLmxlbmd0aD4wJiYocmVbcmUubGVuZ3RoXT12ZSkpLHJlLmxlbmd0aD5fZSsxJiYocmVbcmUubGVuZ3RoXT0iPC9zaGVldERhdGE+IixyZVtfZV09cmVbX2VdLnJlcGxhY2UoIi8+IiwiPiIpKSxTZVsiIXByb3Rl''@;'; put 'put ''Y3QiXSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gRWEoeSl7dmFyIFA9e3NoZWV0OjF9O3JldHVybiBrdi5mb3JFYWNoKGZ1bmN0aW9uKEwpe251bGwhPXlbTF0mJnlbTF0mJihQW0xdPSIxIil9KSxBdi5mb3JFYWNoKGZ1bmN0aW9uKEwpe251bGwhPXlbTF0mJiF5W0xdJiYoUFtMXT0iMCIp''@;'; put 'put ''fSkseS5wYXNzd29yZD9QLnBhc3N3b3JkPXNDKHkucGFzc3dvcmQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOnkuZW5jcnlwdGlvbiYmKFAuYWxnb3JpdGhtTmFtZT15LmVuY3J5cHRpb24uYWxnbyxQLmhhc2hWYWx1ZT15LmVuY3J5cHRpb24uaGFzaCxQLnNhbHRWYWx1ZT15LmVuY3J5''@;'; put 'put ''cHRpb24uc2FsdCxQLnNwaW5Db3VudD15LmVuY3J5cHRpb24uc3BpbiksU3IoInNoZWV0UHJvdGVjdGlvbiIsbnVsbCxQKX0oU2VbIiFwcm90ZWN0Il0pKSxudWxsIT1TZVsiIWF1dG9maWx0ZXIiXSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24geFMoeSxQLEwsUSl7dmFyIHJlPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgeS5yZWY/eS5yZWY6T28oeS5yZWYpO0wuV29ya2Jvb2t8fChMLldvcmtib29rPXtTaGVldHM6W119KSxMLldvcmtib29rLk5hbWVzfHwoTC5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIHBlPUwuV29ya2Jvb2suTmFtZXMsX2U9V3MocmUpO19lLnMucj09X2UuZS5yJiYoX2UuZS5y''@;'; put 'put ''PVdzKFBbIiFyZWYiXSkuZS5yLHJlPU9vKF9lKSk7Zm9yKHZhciB2ZT0wO3ZlPHBlLmxlbmd0aDsrK3ZlKXt2YXIgU2U9cGVbdmVdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1TZS5OYW1lJiZTZS5TaGVldD09USl7U2UuUmVmPSInIitMLlNoZWV0TmFtZXNbUV0rIichIityZTticmVh''@;'; put 'put ''a319cmV0dXJuIHZlPT1wZS5sZW5ndGgmJnBlLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6USxSZWY6IiciK0wuU2hlZXROYW1lc1tRXSsiJyEiK3JlfSksU3IoImF1dG9GaWx0ZXIiLG51bGwse3JlZjpyZX0pfShTZVsiIWF1dG9maWx0ZXIiXSxTZSxMLHkpKSxu''@;'; put 'put ''dWxsIT1TZVsiIW1lcmdlcyJdJiZTZVsiIW1lcmdlcyJdLmxlbmd0aD4wJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBKWih5KXtpZigwPT09eS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPSc8bWVyZ2VDZWxscyBjb3VudD0iJyt5Lmxlbmd0aCsnIj4nLEw9MDtMIT15Lmxlbmd0aDsrK0wp''@;'; put 'put ''UCs9JzxtZXJnZUNlbGwgcmVmPSInK09vKHlbTF0pKyciLz4nO3JldHVybiBQKyI8L21lcmdlQ2VsbHM+In0oU2VbIiFtZXJnZXMiXSkpLFNlWyIhY29uZGZtdCJdJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBqSSh5LFApe3JldHVybiB5Lm1hcChmdW5jdGlvbihMLFEpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbiBQdSh5LFAsTCl7dmFyIFE9eS5zP0ZvKEwuRFhGLHkucyk6LTEscmU9InN0cmluZyI9PXR5cGVvZiB5LnJlZj95LnJlZjpPbyh5LnJlZiksX2U9T2kocmUucmVwbGFjZSgvXHMuKiQvLCIiKSkucztfZS5yPDAmJihfZS5yPTApLF9lLmM8MCYmKF9lLmM9MCk7dmFyIHZlPSIiLFNlPXtw''@;'; put 'put ''cmlvcml0eTpQKzF9O3N3aXRjaChRPi0xJiYoU2UuZHhmSWQ9USkseS50KXtjYXNlInVuaXF1ZSI6U2UudHlwZT0idW5pcXVlVmFsdWVzIjticmVhaztjYXNlImR1cCI6U2UudHlwZT0iZHVwbGljYXRlVmFsdWVzIjticmVhaztjYXNlImJsYW5rIjpTZS50eXBlPSh5LnY/ImMiOiJub3RDIikr''@;'; put 'put ''Im9udGFpbnNCbGFua3MiLHZlPSI8Zm9ybXVsYT5MRU4oVFJJTSgiK2RpKF9lKSsiKSkiKyh5LnY/Ij0iOiImZ3Q7IikrIjA8L2Zvcm11bGE+IjticmVhaztjYXNlImVycm9yIjpTZS50eXBlPSh5LnY/ImMiOiJub3RDIikrIm9udGFpbnNFcnJvcnMiO2JyZWFrO2Nhc2UiZm9ybXVsYSI6U2Uu''@;'; put 'put ''dHlwZT0iZXhwcmVzc2lvbiIsdmU9U3IoImZvcm11bGEiLEZyKHkuZikse30pO2JyZWFrO2Nhc2UiZGF0ZSI6U2UudHlwZT0idGltZVBlcmlvZCIsU2UudGltZVBlcmlvZD1EU1t5Lm9wXTticmVhaztjYXNlInRleHQiOnN3aXRjaChTZS50eXBlPVNlLm9wZXJhdG9yPUx2W3kub3BdLFNlLnRl''@;'; put 'put ''eHQ9eS52LHkub3Ape2Nhc2UiSU4iOnZlPSc8Zm9ybXVsYT5OT1QoSVNFUlJPUihTRUFSQ0goIicrRnIoeS52KSsnIiwnK2RpKF9lKSsiKSkpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJPVCI6dmU9Jzxmb3JtdWxhPklTRVJST1IoU0VBUkNIKCInK0ZyKHkudikrJyIsJytkaShfZSkrIikpPC9m''@;'; put 'put ''b3JtdWxhPiI7YnJlYWs7Y2FzZSJTVCI6dmU9Ijxmb3JtdWxhPkxFRlQoIitkaShfZSkrJyxMRU4oIicrRnIoeS52KSsnIikpPSInK0ZyKHkudikrJyI8L2Zvcm11bGE+JzticmVhaztjYXNlIk5EIjp2ZT0iPGZvcm11bGE+UklHSFQoIitkaShfZSkrJyxMRU4oIicrRnIoeS52KSsnIikpPSIn''@;'; put 'put ''K0ZyKHkudikrJyI8L2Zvcm11bGE+J31icmVhaztjYXNlInZhbCI6U2UudHlwZT0iY2VsbElzIixTZS5vcGVyYXRvcj0kM1t5Lm9wXSx2ZT1udWxsIT15Lm1pbj9TcigiZm9ybXVsYSIsRnIoU3RyaW5nKHkubWluKSkse30pK1NyKCJmb3JtdWxhIixGcihTdHJpbmcoeS5tYXgpKSx7fSk6U3Io''@;'; put 'put ''ImZvcm11bGEiLEZyKG51bGwhPXkudj9TdHJpbmcoInN0cmluZyI9PXR5cGVvZiB5LnY/JyInK3kudi5yZXBsYWNlKC8iL2csJyIiJykrJyInOnkudik6eS5mKSx7fSk7YnJlYWs7Y2FzZSJhdmciOnN3aXRjaChTZS50eXBlPSJhYm92ZUF2ZXJhZ2UiLFNlLmFib3ZlQXZlcmFnZT0iTCI9PXku''@;'; put 'put ''b3AuY2hhckF0KDApPyIwIjoiMSIseS5vcC5jaGFyQXQoMSkpe2Nhc2UiVCI6U2UuZXF1YWxBdmVyYWdlPSIwIjticmVhaztjYXNlIkUiOlNlLmVxdWFsQXZlcmFnZT0iMSI7YnJlYWs7ZGVmYXVsdDpTZS5zdGREZXY9eS5vcC5jaGFyQXQoMSl9YnJlYWs7Y2FzZSJyYW5rIjpTZS50eXBlPSJ0''@;'; put 'put ''b3AxMCIsU2UuYm90dG9tPSJCIj09eS5vcC5jaGFyQXQoMCk/IjEiOiIwIixTZS5wZXJjZW50PSJQIj09eS5vcC5jaGFyQXQoMSk/IjEiOiIwIixTZS5yYW5rPXkudjticmVhaztjYXNlImljb24iOlNlLnR5cGU9Imljb25TZXQiO3ZhciBIZT17aWNvblNldDp5LnYscGVyY2VudDp5LnBjdD8i''@;'; put 'put ''dHJ1ZSI6ImZhbHNlIn07eS5yZXYmJihIZS5yZXZlcnNlPSJ0cnVlIikseS5oaWRkZW4mJihIZS5zaG93VmFsdWU9ImZhbHNlIiksdmU9U3IoImljb25TZXQiLHkudGhyZXNoLm1hcChwZikuam9pbigiIiksSGUpO2JyZWFrO2Nhc2Uic2NhbGUiOlNlLnR5cGU9ImNvbG9yU2NhbGUiLHZlKz1w''@;'; put 'put ''Zih5LmNtaW4pLHkuY21pZCYmKHZlKz1wZih5LmNtaWQpKSx2ZSs9cGYoeS5jbWF4KSx2ZSs9VWQoeS5jbWluLmNvbG9yKSx5LmNtaWQmJih2ZSs9VWQoeS5jbWlkLmNvbG9yKSksdmU9U3IoImNvbG9yU2NhbGUiLHZlKz1VZCh5LmNtYXguY29sb3IpLHt9KTticmVhaztjYXNlImJhciI6U2Uu''@;'; put 'put ''dHlwZT0iZGF0YUJhciIsdmUrPXBmKHkuY21pbiksdmUrPXBmKHkuY21heCksdmU9U3IoImRhdGFCYXIiLHZlKz1VZCh5LmNvbG9yKSx7fSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBjb25zb2xlLmxvZyh5KSwiQ0YgbWlzc2luZyB0eXBlICIreS50fXJldHVybic8Y29uZGl0aW9uYWxGb3JtYXR0''@;'; put 'put ''aW5nIHNxcmVmPSInK3JlKyciPicrU3IoImNmUnVsZSIsIiI9PXZlP251bGw6dmUsU2UpKyI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4ifShMLFEsUCl9KS5qb2luKCIiKX0oU2VbIiFjb25kZm10Il0sUCkpLFNlWyIhdmFsaWRhdGlvbnMiXSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gTkko''@;'; put 'put ''eSl7aWYoIXl8fDA9PXkubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUD1bXSxMPTAsUT0wO1E8eS5sZW5ndGg7KytRKXt2YXIgcmU9eVtRXSxwZT15NltyZS50XTtpZihyZS5yZWYmJigic3RyaW5nIiE9dHlwZW9mIHJlLnJlZnx8LTEhPXJlLnJlZi5pbmRleE9mKCIgIil8fChyZS5yZWY9T2ko''@;'; put 'put ''cmUucmVmKSxyZS5yZWYucyYmIShyZS5yZWYucy5jPDApKSkpeysrTDt2YXIgX2U9e3R5cGU6cGUsYWxsb3dCbGFuazorKDAhPXJlLmJsYW5rKSxzaG93SW5wdXRNZXNzYWdlOisoMCE9cmUuaW5wdXQpLHNob3dFcnJvck1lc3NhZ2U6KygwIT1yZS5lcnJvciksc3FyZWY6InN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiByZS5yZWY/cmUucmVmOk9vKHJlLnJlZil9O2lmKHJlLmlucHV0JiYocmUuaW5wdXQudGl0bGUmJihfZS5wcm9tcHRUaXRsZT1xaShyZS5pbnB1dC50aXRsZSkpLHJlLmlucHV0Lm1lc3NhZ2UmJihfZS5wcm9tcHQ9cWkocmUuaW5wdXQubWVzc2FnZSkpKSxyZS5lcnJvciYmKHJlLmVy''@;'; put 'put ''cm9yLnRpdGxlJiYoX2UuZXJyb3JUaXRsZT1xaShyZS5lcnJvci50aXRsZSkpLHJlLmVycm9yLm1lc3NhZ2UmJihfZS5lcnJvcj1xaShyZS5lcnJvci5tZXNzYWdlKSkscmUuZXJyb3Iuc3R5bGUmJihfZS5lcnJvclN0eWxlPXJlLmVycm9yLnN0eWxlKSksIXBlKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''QmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIrcmUudCk7dmFyIHZlPSIiO3N3aXRjaChyZS50KXtjYXNlIkFueSI6YnJlYWs7Y2FzZSJMaXN0IjpjYXNlIkN1c3RvbSI6aWYocmUubCl7aWYocmUubC5qb2luKCIsIikubGVuZ3RoPjI1MCl0aHJvdyBuZXcgRXJyb3IoIkRWIGxl''@;'; put 'put ''bmd0aCA+IDI1MCB0cmlnZ2VycyBjb3JydXB0aW9uIGVycm9ycyBpbiBFeGNlbC4gIFVzZSBhIGxvb2t1cCB0YWJsZSIpO3ZlPSc8Zm9ybXVsYTE+IicrRnIocmUubC5qb2luKCIsIikpKyciPC9mb3JtdWxhMT4nfWVsc2UgdmU9Ijxmb3JtdWxhMT4iK0ZyKHJlLmYpKyI8L2Zvcm11bGExPiI7''@;'; put 'put ''YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIlRpbWUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKCEkM1tyZS5vcF0pdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIityZS5vcCsiIGZvciAiK3JlLnQpO2lmKF9lLm9wZXJhdG9yPSQzW3Jl''@;'; put 'put ''Lm9wXSxudWxsIT1yZS52KXZlPSI8Zm9ybXVsYTE+IitGcihTdHJpbmcocmUudiBpbnN0YW5jZW9mIERhdGU/VWUocmUudik6cmUudikpKyI8L2Zvcm11bGExPiI7ZWxzZXtpZihudWxsPT1yZS5taW58fG51bGw9PXJlLm1heCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb246''@;'; put 'put ''IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK3JlLnQpO3ZlPSI8Zm9ybXVsYTE+IitGcihTdHJpbmcocmUubWluIGluc3RhbmNlb2YgRGF0ZT9VZShyZS5taW4pOnJlLm1pbikpKyI8L2Zvcm11bGExPjxmb3JtdWxhMj4iK0ZyKFN0cmluZyhyZS5tYXggaW5zdGFuY2Vv''@;'; put 'put ''ZiBEYXRlP1VlKHJlLm1heCk6cmUubWF4KSkrIjwvZm9ybXVsYTI+In19UC5wdXNoKFNyKCJkYXRhVmFsaWRhdGlvbiIsdmV8fG51bGwsX2UpKX19cmV0dXJuIEw+MD8nPGRhdGFWYWxpZGF0aW9ucyBjb3VudD0iJytMKyciPicrUC5qb2luKCIiKSsiPC9kYXRhVmFsaWRhdGlvbnM+IjoiIn0o''@;'; put 'put ''U2VbIiF2YWxpZGF0aW9ucyJdKSk7dmFyIEZ0LGJ0PS0xLEV0PS0xO2lmKFNlWyIhbGlua3MiXS5sZW5ndGg+MCYmKHJlW3JlLmxlbmd0aF09IjxoeXBlcmxpbmtzPiIsU2VbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24odW4pe3VuWzFdLlRhcmdldCYmKEZ0PXtyZWY6dW5bMF19LCIjIiE9''@;'; put 'put ''dW5bMV0uVGFyZ2V0LmNoYXJBdCgwKSYmKEV0PXpvKFEsLTEsRnIodW5bMV0uVGFyZ2V0KS5yZXBsYWNlKC8jLiokLywiIiksSGkuSExJTkspLEZ0WyJyOmlkIl09InJJZCIrRXQpLChidD11blsxXS5UYXJnZXQuaW5kZXhPZigiIyIpKT4tMSYmKEZ0LmxvY2F0aW9uPUZyKHVuWzFdLlRhcmdl''@;'; put 'put ''dC5zbGljZShidCsxKSkpLHVuWzFdLlRvb2x0aXAmJihGdC50b29sdGlwPUZyKHVuWzFdLlRvb2x0aXApKSxyZVtyZS5sZW5ndGhdPVNyKCJoeXBlcmxpbmsiLG51bGwsRnQpKX0pLHJlW3JlLmxlbmd0aF09IjwvaHlwZXJsaW5rcz4iKSxkZWxldGUgU2VbIiFsaW5rcyJdLG50KXt2YXIgVHQ9''@;'; put 'put ''ZnVuY3Rpb24geVMoeSl7aWYoeS5wcm9wcyl7dmFyIFA9e30sTD15LnByb3BzO3JldHVybiBMLmdyaWRsaW5lcyYmKFAuZ3JpZExpbmVzPVAuZ3JpZExpbmVzU2V0PTEpLEwuaGVhZGluZ3MmJihQLmhlYWRpbmdzPTEpLEwuY2VudGVyWCYmKFAuaG9yaXpvbnRhbENlbnRlcmVkPTEpLEwuY2Vu''@;'; put 'put ''dGVyWSYmKFAudmVydGljYWxDZW50ZXJlZD0xKSxTcigicHJpbnRPcHRpb25zIixudWxsLFApfXJldHVybiIifShudCk7VHQubGVuZ3RoJiYocmVbcmUubGVuZ3RoXT1UdCl9aWYoKG51bGwhPVNlWyIhbWFyZ2lucyJdfHxudCYmbnQubWFyZ2lucykmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9u''@;'; put 'put ''IGI2KHkpe3JldHVybiBkZih5KSxTcigicGFnZU1hcmdpbnMiLG51bGwseSl9KFNlWyIhbWFyZ2lucyJdfHxudC5tYXJnaW5zKSksbnQpe3ZhciBadD1mdW5jdGlvbiBPSSh5KXtpZih5LnByb3BzKXt2YXIgUD17fSxMPXkucHJvcHM7aWYoTC5vcmllbnRhdGlvbiYmKFAub3JpZW50YXRpb249''@;'; put 'put ''TC5vcmllbnRhdGlvbiksTC5zY2FsZSYmKFAuc2NhbGU9TC5zY2FsZSksTC5maXQmJihudWxsIT1MLmZpdC5oZWlnaHQmJihQLmZpdFRvSGVpZ2h0PUwuZml0LmhlaWdodCksbnVsbCE9TC5maXQud2lkdGgmJihQLmZpdFRvV2lkdGg9TC5maXQud2lkdGgpKSxMLmRwaSYmKFAuaG9yaXpvbnRh''@;'; put 'put ''bERwaT1QLnZlcnRpY2FsRHBpPUwuZHBpKSxudWxsIT1MLmZpcnN0JiYoUC5maXJzdFBhZ2VOdW1iZXI9TC5maXJzdCxQLnVzZUZpcnN0UGFnZU51bWJlcj0xKSxMLmJ3JiYoUC5ibGFja0FuZFdoaXRlPTEpLEwuZHJhZnQmJihQLmRyYWZ0PTEpLEwuY29tbWVudHMmJihQLmNlbGxDb21tZW50''@;'; put 'put ''cz1DZVtMLmNvbW1lbnRzXXx8Im5vbmUiKSxMLmVycm9ycyYmKFAuZXJyb3JzPVJJW0wuZXJyb3JzXXx8Im5vbmUiKSxMLnBhcGVyKXN3aXRjaCh0eXBlb2YgTC5wYXBlcil7Y2FzZSJudW1iZXIiOlAucGFwZXJTaXplPUwucGFwZXI7YnJlYWs7Y2FzZSJzdHJpbmciOlU5W0wucGFwZXJdP1Au''@;'; put 'put ''cGFwZXJTaXplPVU5W0wucGFwZXJdOitMLnBhcGVyJiYoUC5wYXBlclNpemU9K0wucGFwZXIpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZighTC5wYXBlci5oZWlnaHR8fCFMLnBhcGVyLndpZHRoKXRocm93IkN1c3RvbSBQYXBlciBTaXplIG11c3QgaW5jbHVkZSB3aWR0aCBhbmQgaGVpZ2h0ISI7''@;'; put 'put ''UC5wYXBlckhlaWdodD1MLnBhcGVyLmhlaWdodCxQLnBhcGVyV2lkdGg9TC5wYXBlci53aWR0aH1yZXR1cm5bMSwhMCwidHJ1ZSIsIm92ZXIiXS5pbmRleE9mKEwub3JkZXIpPi0xJiYoUC5wYWdlT3JkZXI9Im92ZXJUaGVuRG93biIpLFNyKCJwYWdlU2V0dXAiLG51bGwsUCl9cmV0dXJuIiJ9''@;'; put 'put ''KG50KTtadC5sZW5ndGgmJihyZVtyZS5sZW5ndGhdPVp0KSxadD1mdW5jdGlvbiBJdih5KXt2YXIgUD1bXSxMPSIiLFE9IiIscmU9IiIscGU9IiIsX2U9IiIsdmU9IiIsU2U9IiIsSGU9VzEoeS5oZWFkZXIpO0hlLmxlbmd0aCYmKFE9SGVbMF0sdmU9SGVbMV0scGU9SGVbMl0pO3ZhciBWZT1X''@;'; put 'put ''MSh5LmZvb3Rlcik7cmV0dXJuIFZlLmxlbmd0aCYmKHJlPVZlWzBdLFNlPVZlWzFdLF9lPVZlWzJdKSxRJiZQLnB1c2goIjxvZGRIZWFkZXI+IitGcihRKSsiPC9vZGRIZWFkZXI+IikscmUmJlAucHVzaCgiPG9kZEZvb3Rlcj4iK0ZyKHJlKSsiPC9vZGRGb290ZXI+IiksKF9lIT1yZXx8cGUh''@;'; put 'put ''PVEpJiYoTCs9JyBkaWZmZXJlbnRPZGRFdmVuPSIxIicsUC5wdXNoKCI8ZXZlbkhlYWRlcj4iK0ZyKHBlKSsiPC9ldmVuSGVhZGVyPiIpLFAucHVzaCgiPGV2ZW5Gb290ZXI+IitGcihfZSkrIjwvZXZlbkZvb3Rlcj4iKSksKFNlIT1yZXx8dmUhPVEpJiYoTCs9JyBkaWZmZXJlbnRGaXJzdD0i''@;'; put 'put ''MSInLFAucHVzaCgiPGZpcnN0SGVhZGVyPiIrRnIodmUpKyI8L2ZpcnN0SGVhZGVyPiIpLFAucHVzaCgiPGZpcnN0Rm9vdGVyPiIrRnIoU2UpKyI8L2ZpcnN0Rm9vdGVyPiIpKSxQLmxlbmd0aD8iPGhlYWRlckZvb3RlciIrTCsiPiIrUC5qb2luKCIiKSsiPC9oZWFkZXJGb290ZXI+IjoiIn0o''@;'; put 'put ''bnQpLFp0Lmxlbmd0aCYmKHJlW3JlLmxlbmd0aF09WnQpfWlmKChudWxsIT1TZVsiIXJvd0JyZWFrcyJdfHxudCYmbnQucm93QnJlYWtzKSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gRkkoeSl7aWYoMD09eS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPVsnPHJvd0JyZWFrcyBjb3VudD0i''@;'; put 'put ''Jyt5Lmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK3kubGVuZ3RoKyciPiddLEw9MDtMPHkubGVuZ3RoOysrTClQLnB1c2goJzxicmsgaWQ9IicreVtMXS5SKyciIG1hbj0iMSIvPicpO3JldHVybiBQLmpvaW4oIiIpKyI8L3Jvd0JyZWFrcz4ifShTZVsiIXJvd0JyZWFrcyJdfHxudC5y''@;'; put 'put ''b3dCcmVha3MpKSwobnVsbCE9U2VbIiFjb2xCcmVha3MiXXx8bnQmJm50LmNvbEJyZWFrcykmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIFFaKHkpe2lmKDA9PXkubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUD1bJzxjb2xCcmVha3MgY291bnQ9IicreS5sZW5ndGgrJyIgbWFudWFsQnJlYWtD''@;'; put 'put ''b3VudD0iJyt5Lmxlbmd0aCsnIj4nXSxMPTA7TDx5Lmxlbmd0aDsrK0wpUC5wdXNoKCc8YnJrIGlkPSInK3lbTF0uQysnIiBtYW49IjEiLz4nKTtyZXR1cm4gUC5qb2luKCIiKSsiPC9jb2xCcmVha3M+In0oU2VbIiFjb2xCcmVha3MiXXx8bnQuY29sQnJlYWtzKSksKCFQfHxQLmlnbm9yZUVD''@;'; put 'put ''fHxudWxsPT1QLmlnbm9yZUVDKSYmKHJlW3JlLmxlbmd0aF09ZnMoImlnbm9yZWRFcnJvcnMiLFNyKCJpZ25vcmVkRXJyb3IiLG51bGwse251bWJlclN0b3JlZEFzVGV4dDoxLHNxcmVmOkhlfSkpKSxTZVsiIWNoYXJ0cyJdJiZHZS5wdXNoLmFwcGx5KEdlLFNlWyIhY2hhcnRzIl0pLFNlWyIh''@;'; put 'put ''aW1hZ2VzIl0mJkdlLnB1c2guYXBwbHkoR2UsU2VbIiFpbWFnZXMiXSksU2VbIiFzaGFwZXMiXSYmR2UucHVzaC5hcHBseShHZSxTZVsiIXNoYXBlcyJdKSxHZS5sZW5ndGg+MCYmKEV0PXpvKFEsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyh5KzEpKyIueG1sIixIaS5EUkFXKSxyZVtyZS5s''@;'; put 'put ''ZW5ndGhdPVNyKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIrRXR9KSxTZVsiIWRyYXdpbmciXT1HZSksKFNlWyIhY29tbWVudHMiXS5sZW5ndGg+MHx8KFNlWyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wKSYmKEV0PXpvKFEsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyh5KzEp''@;'; put 'put ''KyIudm1sIixIaS5WTUwpLHJlW3JlLmxlbmd0aF09U3IoImxlZ2FjeURyYXdpbmciLG51bGwseyJyOmlkIjoicklkIitFdH0pLFNlWyIhbGVnYWN5Il09RXQpLFNlWyIhcHJpbnQiXSYmU2VbIiFwcmludCJdLmltYWdlcyl7dmFyIHBuPVNlWyIhcHJpbnQiXS5pbWFnZXMsS249MDtbImhlYWRl''@;'; put 'put ''ciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24odW4pe3BuW3VuXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKHFuKXtwblt1bl1bcW5dJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oem4pe2lmKEFycmF5LmlzQXJyYXkocG5b''@;'; put 'put ''dW5dW3FuXVt6bl0pKWZvcih2YXIgQW49MDtBbjxwblt1bl1bcW5dW3puXS5sZW5ndGg7KytBbilwblt1bl1bcW5dW3puXVtBbl0mJihwblt1bl1bcW5dW3puXVtBbl0uX2NudD1LbisrKX0pfSl9KSxLbj4wJiYoRXQ9em8oUSwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKHkrMSkrIkhG''@;'; put 'put ''LnZtbCIsSGkuVk1MKSxyZVtyZS5sZW5ndGhdPVNyKCJsZWdhY3lEcmF3aW5nSEYiLG51bGwseyJyOmlkIjoicklkIitFdH0pLFNlWyIhbGVnYWN5SEYiXT1FdCl9cmV0dXJuKFNlWyIhdGFibGVzIl18fFtdKS5sZW5ndGg+MCYmKHJlW3JlLmxlbmd0aF09Jzx0YWJsZVBhcnRzIGNvdW50PSIn''@;'; put 'put ''K1NlWyIhdGFibGVzIl0ubGVuZ3RoKyciPicsU2VbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKHVuLHFuKXtFdD16byhRLC0xLCIuLi90YWJsZXMvdGFibGUiKyh5KzEpKyJfIitxbisiLnhtbCIsSGkuVEFCTEUpLHJlW3JlLmxlbmd0aF09Jzx0YWJsZVBhcnQgcjppZD0icklkJytFdCsn''@;'; put 'put ''Ii8+J30pLHJlW3JlLmxlbmd0aF09IjwvdGFibGVQYXJ0cz4iKSxyZS5sZW5ndGg+MSYmKHJlW3JlLmxlbmd0aF09Ijwvd29ya3NoZWV0PiIscmVbMV09cmVbMV0ucmVwbGFjZSgiLz4iLCI+IikpLHJlLmpvaW4oIiIpfWZ1bmN0aW9uICRJKHksUCxMLFEpe3ZhciByZT1mdW5jdGlvbiBPdih5''@;'; put 'put ''LFAsTCl7dmFyIFE9ZnIoMTQ1KSxyZT0oTFsiIXJvd3MiXXx8W10pW3ldfHx7fTtRLndyaXRlX3NoaWZ0KDQseSksUS53cml0ZV9zaGlmdCg0LDApO3ZhciBwZT0zMjA7cmUuaHB4P3BlPTIwKmoyKHJlLmhweCk6cmUuaHB0JiYocGU9MjAqcmUuaHB0KSxRLndyaXRlX3NoaWZ0KDIscGUpLFEu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSwwKTt2YXIgX2U9MDtyZS5sZXZlbCYmKF9lfD1yZS5sZXZlbCkscmUuaGlkZGVuJiYoX2V8PTE2KSwocmUuaHB4fHxyZS5ocHQpJiYoX2V8PTMyKSxRLndyaXRlX3NoaWZ0KDEsX2UpLFEud3JpdGVfc2hpZnQoMSwwKTt2YXIgdmU9MCxTZT1RLmw7US5sKz00O2Zvcih2''@;'; put 'put ''YXIgSGU9e3I6eSxjOjB9LFZlPTA7VmU8MTY7KytWZSlpZighKFAucy5jPlZlKzE8PDEwfHxQLmUuYzxWZTw8MTApKXtmb3IodmFyIEdlPS0xLG50PS0xLGR0PVZlPDwxMDtkdDxWZSsxPDwxMDsrK2R0KUhlLmM9ZHQsKEFycmF5LmlzQXJyYXkoTCk/KExbSGUucl18fFtdKVtIZS5jXTpMW2Rp''@;'; put 'put ''KEhlKV0pJiYoR2U8MCYmKEdlPWR0KSxudD1kdCk7R2U8MHx8KCsrdmUsUS53cml0ZV9zaGlmdCg0LEdlKSxRLndyaXRlX3NoaWZ0KDQsbnQpKX12YXIgY3Q9US5sO3JldHVybiBRLmw9U2UsUS53cml0ZV9zaGlmdCg0LHZlKSxRLmw9Y3QsUS5sZW5ndGg+US5sP1Euc2xpY2UoMCxRLmwpOlF9''@;'; put 'put ''KFEsTCxQKTsocmUubGVuZ3RoPjE3fHwoUFsiIXJvd3MiXXx8W10pW1FdKSYmY2koeSwiQnJ0Um93SGRyIixyZSl9dmFyIHFJPUpjLEtJPUQxO2Z1bmN0aW9uIEJTKHkpe3JldHVyblthMCh5KSxtYSh5KSwibiJdfXZhciBsTD1KYyxaUz1EMSwkUz1bImxlZnQiLCJyaWdodCIsInRvcCIsImJv''@;'; put 'put ''dHRvbSIsImhlYWRlciIsImZvb3RlciJdLGVvPVsiQW55IiwiV2hvbGUiLCJEZWNpbWFsIiwiTGlzdCIsIkRhdGUiLCJUaW1lIiwiTGVuZ3RoIiwiQ3VzdG9tIl0sVnY9WyJJTiIsIk9UIiwiRVEiLCJORSIsIkdUIiwiTFQiLCJHRSIsIkxFIl07ZnVuY3Rpb24gd0woeSl7dmFyIFA9ZnIoNCks''@;'; put 'put ''TD1bUF0sUT1lby5pbmRleE9mKHkudCk7aWYoUTwwKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIreS50KTt2YXIgcGU9VnYuaW5kZXhPZih5Lm9wKTtzd2l0Y2goUSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDc6cGU9MDticmVhaztkZWZhdWx0Omlm''@;'; put 'put ''KC0xPT1wZSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK3kub3ArIiBmb3IgIit5LnQpfVAud3JpdGVfc2hpZnQoMSwwfFEpLFAud3JpdGVfc2hpZnQoMSwxKSxQLndyaXRlX3NoaWZ0KDEsMTJ8cGU8PDQpLFAud3JpdGVfc2hpZnQoMSwwKSxMLnB1c2goZnVu''@;'; put 'put ''Y3Rpb24gWmgoeSl7dmFyIFA9eS5zcGxpdCgvXHMqLFxzKi8pLEw9ZnIoNCk7TC53cml0ZV9zaGlmdCg0LFAubGVuZ3RoKTt2YXIgUT1bTF07cmV0dXJuIFAuZm9yRWFjaChmdW5jdGlvbihyZSl7US5wdXNoKEQxKE9pKHJlKSkpfSksUyhRKX0oInN0cmluZyI9PXR5cGVvZiB5LnJlZj95LnJl''@;'; put 'put ''ZjpPbyh5LnJlZikpKTt2YXIgX2U9ZnIoMTYpO19lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksX2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxfZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLF9lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksTC5wdXNoKF9lKTt2YXIgdmU9ZnIo''@;'; put 'put ''OCk7dmUud3JpdGVfc2hpZnQoNCwwKSx2ZS53cml0ZV9zaGlmdCg0LDApO3ZhciBTZT0xO3N3aXRjaCh5LnQpe2Nhc2UiQW55IjpMLnB1c2godmUpLEwucHVzaCh2ZSk7YnJlYWs7Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYobnVsbCE9eS52fHxudWxsIT15LmYp''@;'; put 'put ''TC5wdXNoKCJudW1iZXIiPT10eXBlb2YgeS52P2d2KHkudik6VTMobnVsbD09eS52P3kuZjp5LnYpKTtlbHNle2lmKG51bGw9PXkubWlufHxudWxsPT15Lm1heCl0aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAi''@;'; put 'put ''K3kudDtMLnB1c2goIm51bWJlciI9PXR5cGVvZiB5Lm1pbj9ndih5Lm1pbik6VTMoeS5taW4pKSxMLnB1c2goIm51bWJlciI9PXR5cGVvZiB5Lm1heD9ndih5Lm1heCk6VTMoeS5tYXgpKSxTZT0yfWJyZWFrO2Nhc2UiTGlzdCI6aWYobnVsbCE9eS5sKXtMLnB1c2goc1MoeS5sLmpvaW4oIiwi''@;'; put 'put ''KSkpO2JyZWFrfWNhc2UiQ3VzdG9tIjppZigibnVsbCIhPXkuZil7TC5wdXNoKFUzKHkuZikpO2JyZWFrfXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYGZgIisoIkxpc3QiPT15LnQ/IiBvciBgbGAiOiIiKSsiIHJlcXVpcmVkIGZvciBUeXBlICIreS50O2RlZmF1bHQ6dGhy''@;'; put 'put ''b3ciWExTQiBkb2VzIG5vdCBzdXBwb3J0IERhdGEgVmFsaWRhdGlvbiB0eXBlICIreS50fXJldHVybiAxPT1TZSYmTC5wdXNoKHZlKSxTKEwpfWZ1bmN0aW9uIFNMKHksUCxMLFEscmUscGUsX2Upe2lmKHZvaWQgMD09PVAudiYmbnVsbD09UC5zfHwieiI9PT1QLnQmJiFyZS5zaGVldFN0dWJz''@;'; put 'put ''KXJldHVybiExO3ZhciB2ZT0iIjtzd2l0Y2goUC50KXtjYXNlImIiOnZlPVAudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZCI6KFA9b24oUCkpLno9UC56fHx3Ll90YWJsZVsxNF0sUC52PVVlKEh0KFAudikpLFAudD0ibiI7YnJlYWs7Y2FzZSJuIjpjYXNlImUiOnZlPSIiK1AudjticmVhaztkZWZh''@;'; put 'put ''dWx0OnZlPVAudn12YXIgU2U9e3I6TCxjOlF9O3N3aXRjaChTZS5zPWd1KHJlLmNlbGxYZnMscmUuY2VsbFN0eWxlWGZzLFAscmUpLFAubCYmcGVbIiFsaW5rcyJdLnB1c2goW2RpKFNlKSxQLmxdKSxQLmMmJnBlWyIhY29tbWVudHMiXS5wdXNoKFtkaShTZSksUC5jXSksUC50KXtjYXNlInMi''@;'; put 'put ''OmNhc2Uic3RyIjppZihyZS5ib29rU1NUKXtpZih2ZT15dihyZS5TdHJpbmdzLFAudixQLlI/UC5yPUpoKFAuUik6bnVsbCxyZS5yZXZTdHJpbmdzKSxQLlIpZm9yKHZhciBIZT0wO0hlPFAuUi5sZW5ndGg7KytIZSlQLlJbSGVdLnMmJmd1KHJlLmNlbGxYZnMscmUuY2VsbFN0eWxlWGZzLHt0''@;'; put 'put ''OiJuIix2OjAsczpQLlJbSGVdLnN9LHJlKTtTZS50PSJzIixTZS52PXZlLF9lP2NpKHksIkJydFNob3J0SXNzdCIsZnVuY3Rpb24gdEwoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig4KSksS2MoUCxMKSxMLndyaXRlX3NoaWZ0KDQsUC52KSxMfSgwLFNlKSk6Y2koeSwiQnJ0Q2VsbElz''@;'; put 'put ''c3QiLGZ1bmN0aW9uIEh2KHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoMTIpKSxGaShQLEwpLEwud3JpdGVfc2hpZnQoNCxQLnYpLEx9KDAsU2UpKX1lbHNlIFNlLnQ9InN0ciIsX2U/Y2koeSwiQnJ0U2hvcnRTdCIsZnVuY3Rpb24gclkoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1m''@;'; put 'put ''cig4KzQqeS52Lmxlbmd0aCkpLEtjKFAsTCksbmMoeS52LEwpLEwubGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMfShQLFNlKSk6Y2koeSwiQnJ0Q2VsbFN0IixmdW5jdGlvbiB1NSh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDEyKzQqeS52Lmxlbmd0aCkpLEZpKFAsTCksbmMoeS52''@;'; put 'put ''LEwpLEwubGVuZ3RoPkwubD9MLnNsaWNlKDAsTC5sKTpMfShQLFNlKSk7cmV0dXJuITA7Y2FzZSJuIjpyZXR1cm4gUC52PT0oMHxQLnYpJiZQLnY+LTFlMyYmUC52PDFlMz9fZT9jaSh5LCJCcnRTaG9ydFJrIixmdW5jdGlvbiBvTCh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDgpKSxL''@;'; put 'put ''YyhQLEwpLFNzKHkudixMKSxMfShQLFNlKSk6Y2koeSwiQnJ0Q2VsbFJrIixmdW5jdGlvbiBuWSh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDEyKSksRmkoUCxMKSxTcyh5LnYsTCksTH0oUCxTZSkpOl9lP2NpKHksIkJydFNob3J0UmVhbCIsZnVuY3Rpb24gckwoeSxQLEwpe3JldHVy''@;'; put 'put ''biBudWxsPT1MJiYoTD1mcigxMikpLEtjKFAsTCksUGMoeS52LEwpLEx9KFAsU2UpKTpjaSh5LCJCcnRDZWxsUmVhbCIsZnVuY3Rpb24gTnYoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcigxNikpLEZpKFAsTCksUGMoeS52LEwpLEx9KFAsU2UpKSwhMDtjYXNlImIiOnJldHVybiBTZS50''@;'; put 'put ''PSJiIixfZT9jaSh5LCJCcnRTaG9ydEJvb2wiLGZ1bmN0aW9uIEZ2KHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoNSkpLEtjKFAsTCksTC53cml0ZV9zaGlmdCgxLHkudj8xOjApLEx9KFAsU2UpKTpjaSh5LCJCcnRDZWxsQm9vbCIsZnVuY3Rpb24gUFMoeSxQLEwpe3JldHVybiBudWxs''@;'; put 'put ''PT1MJiYoTD1mcig5KSksRmkoUCxMKSxMLndyaXRlX3NoaWZ0KDEseS52PzE6MCksTH0oUCxTZSkpLCEwO2Nhc2UiZSI6cmV0dXJuIFNlLnQ9ImUiLF9lP2NpKHksIkJydFNob3J0RXJyb3IiLGZ1bmN0aW9uIE5TKHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoOCkpLEtjKFAsTCksTC53''@;'; put 'put ''cml0ZV9zaGlmdCgxLHkudiksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMSwwKSxMfShQLFNlKSk6Y2koeSwiQnJ0Q2VsbEVycm9yIixmdW5jdGlvbiBGUyh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDkpKSxGaShQLEwpLEwud3JpdGVfc2hpZnQoMSx5LnYpLEx9KFAs''@;'; put 'put ''U2UpKSwhMH1yZXR1cm4gX2U/Y2koeSwiQnJ0U2hvcnRCbGFuayIsZnVuY3Rpb24gZUwoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig0KSksS2MoUCxMKX0oMCxTZSkpOmNpKHksIkJydENlbGxCbGFuayIsZnVuY3Rpb24gUUkoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig4KSks''@;'; put 'put ''RmkoUCxMKX0oMCxTZSkpLCEwfWZ1bmN0aW9uIEFMKHksUCxMLFEpe3ZhciByZT15YygpLHBlPUwuU2hlZXROYW1lc1t5XSxfZT1MLlNoZWV0c1twZV18fHt9LHZlPXBlO3RyeXtMJiZMLldvcmtib29rJiYodmU9TC5Xb3JrYm9vay5TaGVldHNbeV0uQ29kZU5hbWV8fHZlKX1jYXRjaHt9dmFy''@;'; put 'put ''IFNlPU9pKF9lWyIhcmVmIl18fCJBMSIpO2lmKFNlLmUuYz4xNjM4M3x8U2UuZS5yPjEwNDg1NzUpe2lmKFAuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoX2VbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7U2UuZS5jPU1hdGgubWlu''@;'; put 'put ''KFNlLmUuYywxNjM4MyksU2UuZS5yPU1hdGgubWluKFNlLmUuYywxMDQ4NTc1KX1yZXR1cm4gX2VbIiFsaW5rcyJdPVtdLF9lWyIhY29tbWVudHMiXT1bXSxjaShyZSwiQnJ0QmVnaW5TaGVldCIpLChMLnZiYXJhd3x8X2VbIiFvdXRsaW5lIl0pJiZjaShyZSwiQnJ0V3NQcm9wIixmdW5jdGlv''@;'; put 'put ''biAkMSh5LFAsTCl7bnVsbD09TCYmKEw9ZnIoODQrNCp5Lmxlbmd0aCkpO3ZhciBRPTE5MjtQJiYoUC5hYm92ZSYmKFEmPS02NSksUC5sZWZ0JiYoUSY9LTEyOSkpLEwud3JpdGVfc2hpZnQoMSxRKTtmb3IodmFyIHJlPTE7cmU8MzsrK3JlKUwud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gUjIo''@;'; put 'put ''e2F1dG86MX0sTCksTC53cml0ZV9zaGlmdCgtNCwtMSksTC53cml0ZV9zaGlmdCgtNCwtMSksc20oeSxMKSxMLnNsaWNlKDAsTC5sKX0odmUsX2VbIiFvdXRsaW5lIl0pKSxjaShyZSwiQnJ0V3NEaW0iLEtJKFNlKSksZnVuY3Rpb24gUVMoeSxQLEwpe2NpKHksIkJydEJlZ2luV3NWaWV3cyIp''@;'; put 'put ''LGNpKHksIkJydEJlZ2luV3NWaWV3IixmdW5jdGlvbiBtTCh5LFAsTCl7bnVsbD09TCYmKEw9ZnIoMzApKTt2YXIgUT05MjQ7cmV0dXJuKCgoUHx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJihRfD0zMiksaG4oeVsiIWdyaWRsaW5lcyJdKSYmKFEmPS01KSxobigoKChQfHx7fSkuVmll''@;'; put 'put ''d3N8fFtdKVswXXx8e30pLmdyaWQpJiYoUSY9LTUpLEwud3JpdGVfc2hpZnQoMixRKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCgxLDApLEwud3JpdGVfc2hpZnQoMiwwKSxM''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsMTAwKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDQsMCksTH0oUCxMKSksUFsiIWZyZWV6ZSJdJiZjaSh5LCJCcnRQYW5lIixmdW5jdGlvbiBHUyh5KXt2YXIgUD1zcyh5WyIhZnJl''@;'; put 'put ''ZXplIl0pLEw9ZnIoMjkpO3JldHVybiBMLndyaXRlX3NoaWZ0KDgsUC5jLCJmIiksTC53cml0ZV9zaGlmdCg4LFAuciwiZiIpLEwud3JpdGVfc2hpZnQoNCxQLnIpLEwud3JpdGVfc2hpZnQoNCxQLmMpLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDEsMyksTH0oUCkpLFBbIiFz''@;'; put 'put ''ZWwiXSYmY2koeSwiQnJ0U2VsIixmdW5jdGlvbiBkTCh5LFApe3ZhciBMPWZyKDM2KSxRPXkuY2VsbDtpZighUSl7aWYoIXkucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO1E9ZGkoV3MoeS5yYW5nZS5yZXBsYWNlKC9ccy4q''@;'; put 'put ''JC8sIiIpKS5zKX12YXIgcmU9InN0cmluZyI9PXR5cGVvZiBRP3NzKFEpOlE7aWYoUCl7dmFyIHBlPSJzdHJpbmciPT10eXBlb2YgUD9zcyhQKTpQO0wud3JpdGVfc2hpZnQoNCxyZS5yPj1wZS5yJiZyZS5jPj1wZS5jPzA6cmUucj49cGUuciYmcmUuYzxwZS5jPzI6cmUucjxwZS5yJiZyZS5j''@;'; put 'put ''Pj1wZS5jPzE6Myl9ZWxzZSBMLndyaXRlX3NoaWZ0KDQsMyk7cmV0dXJuIEwud3JpdGVfc2hpZnQoNCxyZS5yKSxMLndyaXRlX3NoaWZ0KDQscmUuYyksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwxKSxMLndyaXRlX3NoaWZ0KDQscmUuciksTC53cml0ZV9zaGlmdCg0LHJl''@;'; put 'put ''LnIpLEwud3JpdGVfc2hpZnQoNCxyZS5jKSxMLndyaXRlX3NoaWZ0KDQscmUuYyksTH0oUFsiIXNlbCJdLFBbIiFmcmVlemUiXSkpLGNpKHksIkJydEVuZFdzVmlldyIpLGNpKHksIkJydEVuZFdzVmlld3MiKX0ocmUsX2UsTC5Xb3JrYm9vayksZnVuY3Rpb24gS1MoeSxQKXshUHx8IVBbIiFj''@;'; put 'put ''b2xzIl18fChjaSh5LCJCcnRCZWdpbkNvbEluZm9zIiksUFsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKEwsUSl7TCYmY2koeSwiQnJ0Q29sSW5mbyIsZnVuY3Rpb24gaVkoeSxQLEwpe251bGw9PUwmJihMPWZyKDE4KSk7dmFyIFE9WWQoeSxQKTtMLndyaXRlX3NoaWZ0KC00LHkpLEwud3Jp''@;'; put 'put ''dGVfc2hpZnQoLTQseSksTC53cml0ZV9zaGlmdCg0LDI1NiooUS53aWR0aHx8MTApKSxMLndyaXRlX3NoaWZ0KDQsMCk7dmFyIHJlPTA7cmV0dXJuIFAuaGlkZGVuJiYocmV8PTEpLCJudW1iZXIiPT10eXBlb2YgUS53aWR0aCYmKHJlfD0yKSxQLmxldmVsJiYocmV8PVAubGV2ZWw8PDgpLEwu''@;'; put 'put ''d3JpdGVfc2hpZnQoMixyZSksTH0oUSxMKSl9KSxjaSh5LCJCcnRFbmRDb2xJbmZvcyIpKX0ocmUsX2UpLGZ1bmN0aW9uIE1MKHksUCxMLFEpe3ZhciByZT1PaShQWyIhcmVmIl18fCJBMSIpLF9lPSIiLHZlPVtdO2NpKHksIkJydEJlZ2luU2hlZXREYXRhIik7dmFyIFNlPUFycmF5LmlzQXJy''@;'; put 'put ''YXkoUCksSGU9cmUuZS5yO1BbIiFyb3dzIl0mJihIZT1NYXRoLm1heChyZS5lLnIsUFsiIXJvd3MiXS5sZW5ndGgtMSkpO2Zvcih2YXIgVmU9cmUucy5yO1ZlPD1IZTsrK1ZlKXtfZT1IcyhWZSksJEkoeSxQLHJlLFZlKTt2YXIgR2U9ITE7aWYoVmU8PXJlLmUucilmb3IodmFyIG50PXJlLnMu''@;'; put 'put ''YztudDw9cmUuZS5jOysrbnQpe1ZlPT09cmUucy5yJiYodmVbbnRdPU5zKG50KSk7dmFyIGR0PVNlPyhQW1ZlXXx8W10pW250XTpQW3ZlW250XStfZV07R2U9ISFkdCYmU0woeSxkdCxWZSxudCxRLFAsR2UpfX1jaSh5LCJCcnRFbmRTaGVldERhdGEiKX0ocmUsX2UsMCxQKSxmdW5jdGlvbiBr''@;'; put 'put ''Nih5LFApe1BbIiFwcm90ZWN0Il0mJmNpKHksIkJydFNoZWV0UHJvdGVjdGlvbiIsZnVuY3Rpb24gX0woeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9ZnIoNjYpKSxQLndyaXRlX3NoaWZ0KDIseS5wYXNzd29yZD9zQyh5LnBhc3N3b3JkKTowKSxQLndyaXRlX3NoaWZ0KDQsMSksW1sib2JqZWN0''@;'; put 'put ''cyIsITFdLFsic2NlbmFyaW9zIiwhMV0sWyJmb3JtYXRDZWxscyIsITBdLFsiZm9ybWF0Q29sdW1ucyIsITBdLFsiZm9ybWF0Um93cyIsITBdLFsiaW5zZXJ0Q29sdW1ucyIsITBdLFsiaW5zZXJ0Um93cyIsITBdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsITBdLFsiZGVsZXRlQ29sdW1ucyIsITBd''@;'; put 'put ''LFsiZGVsZXRlUm93cyIsITBdLFsic2VsZWN0TG9ja2VkQ2VsbHMiLCExXSxbInNvcnQiLCEwXSxbImF1dG9GaWx0ZXIiLCEwXSxbInBpdm90VGFibGVzIiwhMF0sWyJzZWxlY3RVbmxvY2tlZENlbGxzIiwhMV1dLmZvckVhY2goZnVuY3Rpb24oTCl7UC53cml0ZV9zaGlmdCg0LExbMV0/bnVs''@;'; put 'put ''bD09eVtMWzBdXXx8eVtMWzBdXT8wOjE6bnVsbCE9eVtMWzBdXSYmeVtMWzBdXT8wOjEpfSksUH0oUFsiIXByb3RlY3QiXSkpfShyZSxfZSksZnVuY3Rpb24gSlMoeSxQLEwsUSl7aWYoUFsiIWF1dG9maWx0ZXIiXSl7dmFyIHJlPVBbIiFhdXRvZmlsdGVyIl0scGU9InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiByZS5yZWY/cmUucmVmOk9vKHJlLnJlZik7TC5Xb3JrYm9va3x8KEwuV29ya2Jvb2s9e1NoZWV0czpbXX0pLEwuV29ya2Jvb2suTmFtZXN8fChMLldvcmtib29rLk5hbWVzPVtdKTt2YXIgX2U9TC5Xb3JrYm9vay5OYW1lcyx2ZT1XcyhwZSk7dmUucy5yPT12ZS5lLnImJih2ZS5lLnI9V3Mo''@;'; put 'put ''UFsiIXJlZiJdKS5lLnIscGU9T28odmUpKTtmb3IodmFyIFNlPTA7U2U8X2UubGVuZ3RoOysrU2Upe3ZhciBIZT1fZVtTZV07aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PUhlLk5hbWUmJkhlLlNoZWV0PT1RKXtIZS5SZWY9IiciK0wuU2hlZXROYW1lc1tRXSsiJyEiK3BlO2JyZWFrfX1T''@;'; put 'put ''ZT09X2UubGVuZ3RoJiZfZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OlEsUmVmOiInIitMLlNoZWV0TmFtZXNbUV0rIichIitwZX0pLGNpKHksIkJydEJlZ2luQUZpbHRlciIsRDEoT2kocGUpKSksY2koeSwiQnJ0RW5kQUZpbHRlciIpfX0ocmUsX2UsTCx5KSxm''@;'; put 'put ''dW5jdGlvbiB4TCh5LFApeyFQfHwhUFsiIW1lcmdlcyJdfHwoY2koeSwiQnJ0QmVnaW5NZXJnZUNlbGxzIixmdW5jdGlvbiBZUyh5LFApe3JldHVybiBudWxsPT1QJiYoUD1mcig0KSksUC53cml0ZV9zaGlmdCg0LHkpLFB9KFBbIiFtZXJnZXMiXS5sZW5ndGgpKSxQWyIhbWVyZ2VzIl0uZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihMKXtjaSh5LCJCcnRNZXJnZUNlbGwiLFpTKEwpKX0pLGNpKHksIkJydEVuZE1lcmdlQ2VsbHMiKSl9KHJlLF9lKSxmdW5jdGlvbiBrTCh5LFApe2lmKFApe2NpKHksIkJydEJlZ2luRFZhbHMiLGZ1bmN0aW9uIHFTKHksUCl7bnVsbD09UCYmKFA9ZnIoMTgpKSxQLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsMCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBMPTAsUT0wO1E8eS5sZW5ndGg7KytRKSgoeVtRXXx8e30pLnJlZnx8e30pLnMmJnlbUV0ucmVmLnMuYzwwfHwrK0w7cmV0dXJuIFAud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCxMKSxQfShQKSk7Zm9yKHZhciBMPTA7TDxQLmxlbmd0aDsrK0wpKChQW0xdfHx7fSkucmVmfHx7fSkucyYmUFtMXS5yZWYucy5jPDB8fGNpKHksIkJydERWYWwiLHdMKFBbTF0pKTtjaSh5LCJCcnRFbmREVmFscyIpfX0ocmUsX2VbIiF2YWxpZGF0aW9ucyJdKSxmdW5jdGlvbiBFTCh5''@;'; put 'put ''LFAsTCl7UFsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihRKXtpZihRWzFdLlRhcmdldCl7dmFyIHJlPXpvKEwsLTEsUVsxXS5UYXJnZXQucmVwbGFjZSgvIy4qJC8sIiIpLEhpLkhMSU5LKTtjaSh5LCJCcnRITGluayIsZnVuY3Rpb24gY0woeSxQKXt2YXIgTD1mcig1MCs0Kih5WzFdLlRh''@;'; put 'put ''cmdldC5sZW5ndGgrKHlbMV0uVG9vbHRpcHx8IiIpLmxlbmd0aCkpO0QxKHtzOnNzKHlbMF0pLGU6c3MoeVswXSl9LEwpLE9jKCJySWQiK1AsTCk7dmFyIFE9eVsxXS5UYXJnZXQuaW5kZXhPZigiIyIpO3JldHVybiBuYygoLTE9PVE/IiI6eVsxXS5UYXJnZXQuc2xpY2UoUSsxKSl8fCIiLEwp''@;'; put 'put ''LG5jKHlbMV0uVG9vbHRpcHx8IiIsTCksbmMoIiIsTCksTC5zbGljZSgwLEwubCl9KFEscmUpKX19KSxkZWxldGUgUFsiIWxpbmtzIl19KHJlLF9lLFEpLF9lWyIhbWFyZ2lucyJdJiZjaShyZSwiQnJ0TWFyZ2lucyIsZnVuY3Rpb24gcEwoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9ZnIoNDgp''@;'; put 'put ''KSxkZih5KSwkUy5mb3JFYWNoKGZ1bmN0aW9uKEwpe1BjKHlbTF0sUCl9KSxQfShfZVsiIW1hcmdpbnMiXSkpLCghUHx8UC5pZ25vcmVFQ3x8bnVsbD09UC5pZ25vcmVFQykmJmZ1bmN0aW9uIFhTKHksUCl7IVB8fCFQWyIhcmVmIl18fChjaSh5LCJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MiKSxj''@;'; put 'put ''aSh5LCJCcnRDZWxsSWdub3JlRUMiLGZ1bmN0aW9uIHZMKHkpe3ZhciBQPWZyKDI0KTtyZXR1cm4gUC53cml0ZV9zaGlmdCg0LDQpLFAud3JpdGVfc2hpZnQoNCwxKSxEMSh5LFApLFB9KE9pKFBbIiFyZWYiXSkpKSxjaSh5LCJCcnRFbmRDZWxsSWdub3JlRUNzIikpfShyZSxfZSksZnVuY3Rp''@;'; put 'put ''b24gb1koeSxQLEwsUSl7aWYoUFsiIWNvbW1lbnRzIl0ubGVuZ3RoPjApe3ZhciByZT16byhRLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoTCsxKSsiLnZtbCIsSGkuVk1MKTtjaSh5LCJCcnRMZWdhY3lEcmF3aW5nIixPYygicklkIityZSkpLFBbIiFsZWdhY3kiXT1yZX19KHJlLF9l''@;'; put 'put ''LHksUSksY2kocmUsIkJydEVuZFNoZWV0IikscmUuZW5kKCl9ZnVuY3Rpb24gQTYoeSl7dmFyIFEsUD1bXSxMPXkubWF0Y2goL148YzpudW1DYWNoZT4vKTsoeS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIg''@;'; put 'put ''X2U9cGUubWF0Y2goLzxjOnB0IGlkeD0iKFxkKj8pIj48Yzp2PiguKik8XC9jOnY+PFwvYzpwdD4vKTtfZSYmKFBbK19lWzFdXT1MPytfZVsyXTpfZVsyXSl9KTt2YXIgcmU9eHIoKHkubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5l''@;'; put 'put ''cmFsIl0pWzFdKTtyZXR1cm4oeS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7UT1wZS5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLFtQLHJlLFFdfUhpLkNIQVJUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9j''@;'; put 'put ''dW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0IixIaS5DSEFSVEVYPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDE0L3JlbGF0aW9uc2hpcHMvY2hhcnRFeCI7dmFyIGY1PS88KD86XHcrOik/Y2hhcnQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NoYXJ0Pi8sQmM9''@;'; put 'put ''LzwoPzpcdys6KT9wbG90QXJlYT4oW1xzXFNdKj8pPFwvKD86XHcrOik/cGxvdEFyZWE+LyxnZj0vPCg/Olx3KzopP2xlZ2VuZD4oW1xzXFNdKj8pPFwvKD86XHcrOik/bGVnZW5kPi8sVDY9LzwoPzpcdys6KT90aXRsZT4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGl0bGU+LztmdW5jdGlvbiBt''@;'; put 'put ''MCh5LFAsTCxRLHJlLHBlLF9lLHZlKXt2YXIgU2U9cGV8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCF5KXJldHVybiBwZTtfZSYmX2UuQW5jaG9yJiYoU2VbIiFwb3MiXT1zZihfZS5BbmNob3IsdmUpLFNlWyIhcG9zVHlwZSJdPV9lLkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLFNl''@;'; put 'put ''WyIhYWJzcG9zIl09c2YoX2UuQW5jaG9yLHZlKSxTZVsiIXJlbHBvcyJdPUttKF9lLkFuY2hvcix2ZSkpLFNlWyIhcGxvdCJdPVtdO3ZhciBIZT0iIixWZT0iIixHZT15Lm1hdGNoKGY1KTtHZT8oSGU9eS5zbGljZSgwLEdlLmluZGV4KSxWZT15LnNsaWNlKEdlLmluZGV4K0dlWzBdLmxlbmd0''@;'; put 'put ''aCkpOkhlPVZlPXk7dmFyIG50PVtdLGR0PUhlLm1hdGNoKC88YzpsYW5nLio/Pi8pfHx5Lm1hdGNoKC88YzpsYW5nLio/Pi8pfHxWZS5tYXRjaCgvPGM6bGFuZy4qPz4vKTtyZXR1cm4gZHQmJihTZVsiIWxhbmciXT0obG4oZHRbMF0pfHx7fSkudmFsfHwiZW4tVVMiKSxHZSYmKChudD1HZVsx''@;'; put 'put ''XS5tYXRjaChUNikpJiZmdW5jdGlvbiBxMSh5LFApe3ZhciBMPSIiO3kubWF0Y2goLzxjOnJpY2g+LykmJnkucmVwbGFjZSgvPGE6dD4oW1xzXFNdKj8pPFwvYTp0Pi9nLGZ1bmN0aW9uKFEscmUpe0wrPXJlfSksUFsiIXRpdGxlIl09THx8IkNoYXJ0IFRpdGxlIn0obnRbMV0sU2UpLGZ1bmN0''@;'; put 'put ''aW9uIEszKHksUCl7aWYoeSl7dmFyIEw9MCxRPTAscmU9IkEiLHBlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19O3kucmVwbGFjZShUcixmdW5jdGlvbihfZSx2ZSl7dmFyIFNlPXt0OnZlLGM6TCx3OjAsc2VyOltdfSxIZT1bXSxWZT0oX2UubWF0Y2goLzxjOnNlci8pfHxbXSkuaW5k''@;'; put 'put ''ZXgsR2U9VmU/X2Uuc2xpY2UoMCxWZSk6X2U7InNjYXR0ZXIiPT12ZSYmKEhlPV9lLm1hdGNoKC88YzpzY2F0dGVyU3R5bGUoW15cLz5dKilcLz4vbSkpJiZsbihIZVswXSksImJhciI9PXZlJiYoSGU9X2UubWF0Y2goLzxjOmJhckRpcihbXlwvPl0qKVwvPi9tKSkmJihTZS5iYXJEaXI9ImJh''@;'; put 'put ''ciI9PWxuKEhlWzBdKS52YWw/ImgiOiJ2IiksKEhlPUdlLm1hdGNoKC88Yzpncm91cGluZyhbXlwvPl0qKVwvPi9tKSkmJihTZS5ncm91cGluZz1sbihIZVswXSkudmFsfHwic3RhbmRhcmQiKSwoX2UubWF0Y2gocTMpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihkdCl7dmFyIEN0PVtdLGN0PXt9''@;'; put 'put ''LGJ0PVtdO2lmKGR0Lm1hdGNoKC88Yzp0eD4vKSl7dmFyIEZ0PUE2KChkdC5tYXRjaCgvPGM6dHg+KFtcc1xTXSo/KTxcL2M6dHg+Lyl8fFtdKVsxXXx8IiIpfHxbXTtGdFswXSYmRnRbMF1bMF0mJihjdC5uYW1lPUZ0WzBdWzBdKSxGdFsyXSYmKGN0Lm5hbWVyZWY9RnRbMl0pfVsieFZhbCIs''@;'; put 'put ''InlWYWwiLCJjYXQiLCJ2YWwiLCJidWJibGVTaXplIl0uZm9yRWFjaChmdW5jdGlvbihFdCl7dmFyIFp0LFR0PWR0Lm1hdGNoKG5ldyBSZWdFeHAoIjxjOiIrRXQrIj5bXFxzXFxTXSo/PFxcL2M6IitFdCsiPiIsImdtIikpO1R0JiYoKFR0WzBdLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9n''@;'; put 'put ''bSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBuKXtadD1wbi5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLChUdFswXS5tYXRjaCgvPGM6KD86XHcqKUNhY2hlPltcc1xTXSo/PFwvYzooPzpcdyopQ2FjaGU+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocG4pe3ZhciBLbj1BNihwbik7cGUucy5y''@;'; put 'put ''PXBlLnMuYz0wLHBlLmUuYz1MLHJlPU5zKEwpLEtuWzBdLmZvckVhY2goZnVuY3Rpb24odW4scW4pe1BbcmUrSHMocW4pXT17dDoibnVtYmVyIj09dHlwZW9mIHVuPyJuIjoicyIsdjp1bix6OktuWzFdfSxRPXFufSkscGUuZS5yPFEmJihwZS5lLnI9USksKytMLFNlLncrKyxDdC5wdXNoKEV0''@;'; put 'put ''KSwoS25bMl18fFp0KSYmYnQucHVzaChLblsyXXx8WnQpLCJ2YWwiPT1FdCYmKGN0Lno9S25bMV18fCJHZW5lcmFsIil9KSl9KSwoSGU9X2UubWF0Y2goLzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJihjdC5zbW9vdGg9bnVsbD09bG4oSGVbMF0pLnZhbHx8eXIobG4oSGVbMF0pLnZhbCkp''@;'; put 'put ''LGN0LmNvbHM9Q3QsY3QucmFuZ2VzPWJ0LFNlLnNlci5wdXNoKGN0KX0pLCJkb3VnaG51dCI9PXZlJiYoSGU9X2UubWF0Y2goLzxjOmhvbGVTaXplKFteXC8+XSopXC8+L20pKSYmKFNlLmhvbGU9KGxuKEhlWzBdKS52YWx8fDEwKS8xMDApLFBbIiFwbG90Il0ucHVzaChTZSl9KSxMPjAmJihQ''@;'; put 'put ''WyIhcmVmIl09T28ocGUpKX19KChHZVsxXS5tYXRjaChCYyl8fFtdKVsxXSxTZSksbnVsbCE9KG50PUdlWzFdLm1hdGNoKGdmKSkmJmZ1bmN0aW9uIFRMKHksUCl7dmFyIEw7UFsiIWxlZ2VuZCJdPXtwb3M6InIifSwoTD15Lm1hdGNoKC88YzpsZWdlbmRQb3MoW15cLz5dKilcLz4vbSkpJiYo''@;'; put 'put ''UFsiIWxlZ2VuZCJdLnBvcz1sbihMWzBdKS52YWx8fCJyIil9KG50WzBdLFNlKSksU2V9dmFyIFRyPS88YzooKD86YXJlYXxsaW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/KUNoYXJ0W14+XSo+KFtcc1xTXSo/KTxc''@;'; put 'put ''L2M6KD86YXJlYXxsaW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/Q2hhcnQ+L2dtLHEzPS88YzpzZXI+KFtcc1xTXSo/KTxcL2M6c2VyPi9nbTtIaS5DUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3Jn''@;'; put 'put ''L29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydHNoZWV0Ijt2YXIgWDM9U3IoImNoYXJ0c2hlZXQiLG51bGwse3htbG5zOmlzLm1haW5bMF0sInhtbG5zOnIiOmlzLnJ9KTtmdW5jdGlvbiBRMyh5LFAsTCxRKXt2YXIgcmU9W0JuLFgzXTtyZXR1cm4gcmUucHVzaCgiPHNo''@;'; put 'put ''ZWV0UHIvPiIpLHJlLnB1c2goJzxzaGVldFZpZXdzPjxzaGVldFZpZXcgem9vbVNjYWxlPSIxMDAiIHdvcmtib29rVmlld0lkPSIwIiB6b29tVG9GaXQ9IjEiLz48L3NoZWV0Vmlld3M+JykscmVbcmUubGVuZ3RoXT1TcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQxIn0pLHpvKFEsLTEs''@;'; put 'put ''Ii4uL2RyYXdpbmdzL2RyYXdpbmciKyh5KzEpKyIueG1sIixIaS5EUkFXKSxyZS5sZW5ndGg+MiYmKHJlW3JlLmxlbmd0aF09IjwvY2hhcnRzaGVldD4iLHJlWzFdPXJlWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxyZS5qb2luKCIiKX1mdW5jdGlvbiBucCgpe3ZhciB5PXljKCk7cmV0dXJuIGNp''@;'; put 'put ''KHksIkJydEJlZ2luU2hlZXQiKSxjaSh5LCJCcnRFbmRTaGVldCIpLHkuZW5kKCl9dmFyIEsyPVtbImFsbG93UmVmcmVzaFF1ZXJ5IiwhMSwiYm9vbCJdLFsiYXV0b0NvbXByZXNzUGljdHVyZXMiLCEwLCJib29sIl0sWyJiYWNrdXBGaWxlIiwhMSwiYm9vbCJdLFsiY2hlY2tDb21wYXRpYmls''@;'; put 'put ''aXR5IiwhMSwiYm9vbCJdLFsiQ29kZU5hbWUiLCIiXSxbImRhdGUxOTA0IiwhMSwiYm9vbCJdLFsiZGVmYXVsdFRoZW1lVmVyc2lvbiIsMCwiaW50Il0sWyJmaWx0ZXJQcml2YWN5IiwhMSwiYm9vbCJdLFsiaGlkZVBpdm90RmllbGRMaXN0IiwhMSwiYm9vbCJdLFsicHJvbXB0ZWRTb2x1dGlv''@;'; put 'put ''bnMiLCExLCJib29sIl0sWyJwdWJsaXNoSXRlbXMiLCExLCJib29sIl0sWyJyZWZyZXNoQWxsQ29ubmVjdGlvbnMiLCExLCJib29sIl0sWyJzYXZlRXh0ZXJuYWxMaW5rVmFsdWVzIiwhMCwiYm9vbCJdLFsic2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXMiLCEwLCJib29sIl0sWyJzaG93SW5r''@;'; put 'put ''QW5ub3RhdGlvbiIsITAsImJvb2wiXSxbInNob3dPYmplY3RzIiwiYWxsIl0sWyJzaG93UGl2b3RDaGFydEZpbHRlciIsITEsImJvb2wiXSxbInVwZGF0ZUxpbmtzIiwidXNlclNldCJdXSxlTT1bWyJhY3RpdmVUYWIiLDAsImludCJdLFsiYXV0b0ZpbHRlckRhdGVHcm91cGluZyIsITAsImJv''@;'; put 'put ''b2wiXSxbImZpcnN0U2hlZXQiLDAsImludCJdLFsibWluaW1pemVkIiwhMSwiYm9vbCJdLFsic2hvd0hvcml6b250YWxTY3JvbGwiLCEwLCJib29sIl0sWyJzaG93U2hlZXRUYWJzIiwhMCwiYm9vbCJdLFsic2hvd1ZlcnRpY2FsU2Nyb2xsIiwhMCwiYm9vbCJdLFsidGFiUmF0aW8iLDYwMCwi''@;'; put 'put ''aW50Il0sWyJ2aXNpYmlsaXR5IiwidmlzaWJsZSJdXSx0TT1bXSxuTT1bWyJjYWxjQ29tcGxldGVkIiwidHJ1ZSJdLFsiY2FsY01vZGUiLCJhdXRvIl0sWyJjYWxjT25TYXZlIiwidHJ1ZSJdLFsiY29uY3VycmVudENhbGMiLCJ0cnVlIl0sWyJmdWxsQ2FsY09uTG9hZCIsImZhbHNlIl0sWyJm''@;'; put 'put ''dWxsUHJlY2lzaW9uIiwidHJ1ZSJdLFsiaXRlcmF0ZSIsImZhbHNlIl0sWyJpdGVyYXRlQ291bnQiLCIxMDAiXSxbIml0ZXJhdGVEZWx0YSIsIjAuMDAxIl0sWyJyZWZNb2RlIiwiQTEiXV07ZnVuY3Rpb24gQnYoeSxQKXtmb3IodmFyIEw9MDtMIT15Lmxlbmd0aDsrK0wpZm9yKHZhciBRPXlb''@;'; put 'put ''TF0scmU9MDtyZSE9UC5sZW5ndGg7KytyZSl7dmFyIHBlPVBbcmVdO2lmKG51bGw9PVFbcGVbMF1dKVFbcGVbMF1dPXBlWzFdO2Vsc2Ugc3dpdGNoKHBlWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgUVtwZVswXV0mJihRW3BlWzBdXT15cihRW3BlWzBdXSkpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''aW50Ijoic3RyaW5nIj09dHlwZW9mIFFbcGVbMF1dJiYoUVtwZVswXV09cGFyc2VJbnQoUVtwZVswXV0sMTApKX19fWZ1bmN0aW9uIGp2KHksUCl7Zm9yKHZhciBMPTA7TCE9UC5sZW5ndGg7KytMKXt2YXIgUT1QW0xdO2lmKG51bGw9PXlbUVswXV0peVtRWzBdXT1RWzFdO2Vsc2Ugc3dpdGNo''@;'; put 'put ''KFFbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiB5W1FbMF1dJiYoeVtRWzBdXT15cih5W1FbMF1dKSk7YnJlYWs7Y2FzZSJpbnQiOiJzdHJpbmciPT10eXBlb2YgeVtRWzBdXSYmKHlbUVswXV09cGFyc2VJbnQoeVtRWzBdXSwxMCkpfX19ZnVuY3Rpb24genYoeSl7anYoeS5XQlBy''@;'; put 'put ''b3BzLEsyKSxqdih5LkNhbGNQcixuTSksQnYoeS5XQlZpZXcsZU0pLEJ2KHkuU2hlZXRzLHRNKSxaMy5kYXRlMTkwND15cih5LldCUHJvcHMuZGF0ZTE5MDQpfXZhciBpTT0iXVsqPy9cXCIuc3BsaXQoIiIpO2Z1bmN0aW9uIFV2KHksUCl7aWYoeS5sZW5ndGg+MzEpe2lmKFApcmV0dXJuITE7''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lcyBjYW5ub3QgZXhjZWVkIDMxIGNoYXJzIil9dmFyIEw9ITA7cmV0dXJuIGlNLmZvckVhY2goZnVuY3Rpb24oUSl7aWYoLTEhPXkuaW5kZXhPZihRKSl7aWYoIVApdGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lIGNhbm5vdCBjb250YWluIDog''@;'; put 'put ''XFwgLyA/ICogWyBdIik7TD0hMX19KSxMfXZhciBzWT0vPFx3Kzp3b3JrYm9vay8sbFk9U3IoIndvcmtib29rIixudWxsLHt4bWxuczppcy5tYWluWzBdLCJ4bWxuczpyIjppcy5yfSk7ZnVuY3Rpb24gUkwoeSxQKXt2YXIgTD1QfHx7fSxRPVtCbl07UVtRLmxlbmd0aF09bFk7dmFyIHJlPXku''@;'; put 'put ''V29ya2Jvb2smJih5Lldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoPjA7eS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5Nb2RpZnkmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBJTCh5KXt2YXIgUD17fTtyZXR1cm4geS53YXJuJiYoUC5yZWFkT25seVJlY29tbWVuZGVkPTEpLFAudXNlck5hbWU9eS51''@;'; put 'put ''c2VyfHwiU2hlZXQgSlMiLHkuZW5jcnlwdGlvbiYmKHkuZW5jcnlwdGlvbi5hbGdvJiYoUC5hbGdvcml0aG1OYW1lPXkuZW5jcnlwdGlvbi5hbGdvKSx5LmVuY3J5cHRpb24uaGFzaCYmKFAuaGFzaFZhbHVlPXkuZW5jcnlwdGlvbi5oYXNoKSx5LmVuY3J5cHRpb24uc2FsdCYmKFAuc2FsdFZh''@;'; put 'put ''bHVlPXkuZW5jcnlwdGlvbi5zYWx0KSx5LmVuY3J5cHRpb24uc3BpbiYmKFAuc3BpbkNvdW50PXkuZW5jcnlwdGlvbi5zcGluKSksU3IoImZpbGVTaGFyaW5nIixudWxsLFApfSh5Lldvcmtib29rLk1vZGlmeSkpO3ZhciBwZT17Y29kZU5hbWU6IlRoaXNXb3JrYm9vayJ9O3kuV29ya2Jvb2sm''@;'; put 'put ''JnkuV29ya2Jvb2suV0JQcm9wcyYmKEsyLmZvckVhY2goZnVuY3Rpb24oSGUpe251bGwhPXkuV29ya2Jvb2suV0JQcm9wc1tIZVswXV0mJnkuV29ya2Jvb2suV0JQcm9wc1tIZVswXV0hPUhlWzFdJiYocGVbSGVbMF1dPXkuV29ya2Jvb2suV0JQcm9wc1tIZVswXV0pfSkseS5Xb3JrYm9vay5X''@;'; put 'put ''QlByb3BzLkNvZGVOYW1lJiYocGUuY29kZU5hbWU9eS5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lLGRlbGV0ZSBwZS5Db2RlTmFtZSkpLFFbUS5sZW5ndGhdPVNyKCJ3b3JrYm9va1ByIixudWxsLHBlKSx5Lldvcmtib29rJiZ5Lldvcmtib29rLlByb3RlY3Rpb24mJihRW1EubGVuZ3RoXT1m''@;'; put 'put ''dW5jdGlvbiBMTCh5KXt2YXIgUD17fTtyZXR1cm4geS5sb2NrU3RydWN0dXJlJiYoUC5sb2NrU3RydWN0dXJlPTEpLHkubG9ja1dpbmRvd3MmJihQLmxvY2tXaW5kb3dzPTEpLHkuZW5jcnlwdGlvbiYmKHkuZW5jcnlwdGlvbi5hbGdvJiYoUC53b3JrYm9va0FsZ29yaXRobU5hbWU9eS5lbmNy''@;'; put 'put ''eXB0aW9uLmFsZ28pLHkuZW5jcnlwdGlvbi5oYXNoJiYoUC53b3JrYm9va0hhc2hWYWx1ZT15LmVuY3J5cHRpb24uaGFzaCkseS5lbmNyeXB0aW9uLnNhbHQmJihQLndvcmtib29rU2FsdFZhbHVlPXkuZW5jcnlwdGlvbi5zYWx0KSx5LmVuY3J5cHRpb24uc3BpbiYmKFAud29ya2Jvb2tTcGlu''@;'; put 'put ''Q291bnQ9eS5lbmNyeXB0aW9uLnNwaW4pKSxTcigid29ya2Jvb2tQcm90ZWN0aW9uIixudWxsLFApfSh5Lldvcmtib29rLlByb3RlY3Rpb24pKTt2YXIgX2U9eS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5TaGVldHN8fFtdLHZlPTA7aWYoX2UmJl9lWzBdJiZfZVswXS5IaWRkZW4pe2ZvcihRW1Eu''@;'; put 'put ''bGVuZ3RoXT0iPGJvb2tWaWV3cz4iLHZlPTA7dmUhPXkuU2hlZXROYW1lcy5sZW5ndGgmJl9lW3ZlXSYmX2VbdmVdLkhpZGRlbjsrK3ZlKTt2ZT09eS5TaGVldE5hbWVzLmxlbmd0aCYmKHZlPTApLFFbUS5sZW5ndGhdPSc8d29ya2Jvb2tWaWV3IGZpcnN0U2hlZXQ9IicrdmUrJyIgYWN0aXZl''@;'; put 'put ''VGFiPSInK3ZlKyciLz4nLFFbUS5sZW5ndGhdPSI8L2Jvb2tWaWV3cz4ifWZvcihRW1EubGVuZ3RoXT0iPHNoZWV0cz4iLHZlPTA7dmUhPXkuU2hlZXROYW1lcy5sZW5ndGg7Kyt2ZSl7dmFyIFNlPXtuYW1lOkZyKHkuU2hlZXROYW1lc1t2ZV0uc2xpY2UoMCwzMSkpfTtpZihTZS5zaGVldElk''@;'; put 'put ''PSIiKyh2ZSsxKSxTZVsicjppZCJdPSJySWQiKyh2ZSsxKSxfZVt2ZV0pc3dpdGNoKF9lW3ZlXS5IaWRkZW4pe2Nhc2UgMTpTZS5zdGF0ZT0iaGlkZGVuIjticmVhaztjYXNlIDI6U2Uuc3RhdGU9InZlcnlIaWRkZW4ifVFbUS5sZW5ndGhdPVNyKCJzaGVldCIsbnVsbCxTZSl9cmV0dXJuIFFb''@;'; put 'put ''US5sZW5ndGhdPSI8L3NoZWV0cz4iLHkuRXh0ZXJuYWxXQiYmeS5FeHRlcm5hbFdCLmxlbmd0aCYmKFFbUS5sZW5ndGhdPSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiIsKHkuRXh0ZXJuYWxXQnx8W10pLmZvckVhY2goZnVuY3Rpb24oSGUsVmUpe3ZhciBHZT16byhMLndicmVscywtMSwiZXh0ZXJu''@;'; put 'put ''YWxMaW5rcy9leHRlcm5hbExpbmsiKyhWZSsxKSsiLnhtbCIsSGkuWExJTkspO1FbUS5sZW5ndGhdPSc8ZXh0ZXJuYWxSZWZlcmVuY2UgcjppZD0icklkJytHZSsnIi8+J30pLFFbUS5sZW5ndGhdPSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iKSxyZSYmKFFbUS5sZW5ndGhdPSI8ZGVmaW5lZE5h''@;'; put 'put ''bWVzPiIseS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5OYW1lcyYmeS5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKEhlKXt2YXIgVmU9e25hbWU6SGUuTmFtZX07SGUuQ29tbWVudCYmKFZlLmNvbW1lbnQ9SGUuQ29tbWVudCksbnVsbCE9SGUuU2hlZXQmJihWZS5sb2NhbFNoZWV0SWQ9''@;'; put 'put ''IiIrSGUuU2hlZXQpLEhlLkhpZGRlbiYmKFZlLmhpZGRlbj0iMSIpLEhlLlJlZiYmKFFbUS5sZW5ndGhdPVNyKCJkZWZpbmVkTmFtZSIsRnIoSGUuUmVmKSxWZSkpfSksUVtRLmxlbmd0aF09IjwvZGVmaW5lZE5hbWVzPiIpLEwmJkwucGl2b3RzJiZMLnBpdm90cy5sZW5ndGg+MCYmKFEucHVz''@;'; put 'put ''aCgiPHBpdm90Q2FjaGVzPiIpLEwucGl2b3RzLmZvckVhY2goZnVuY3Rpb24oSGUsVmUpe1EucHVzaCgnPHBpdm90Q2FjaGUgY2FjaGVJZD0iJysoVmUrMSkrJyIgcjppZD0icklkJytIZVsyXSsnIi8+Jyl9KSxRLnB1c2goIjwvcGl2b3RDYWNoZXM+IikpLFEubGVuZ3RoPjImJihRW1EubGVu''@;'; put 'put ''Z3RoXT0iPC93b3JrYm9vaz4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2luKCIiKX1mdW5jdGlvbiBPTCh5LFApe3JldHVybiBQfHwoUD1mcigxMjcpKSxQLndyaXRlX3NoaWZ0KDQseS5IaWRkZW4pLFAud3JpdGVfc2hpZnQoNCx5LmlUYWJJRCksT2MoeS5zdHJSZWxJRCxQ''@;'; put 'put ''KSxuYyh5Lm5hbWUuc2xpY2UoMCwzMSksUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9ZnVuY3Rpb24gWXYoeSxQKXt2YXIgTD17fTtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLEwuQXJjaElEPXkucmVhZF9zaGlmdCg0KSx5LmwrPVAtOCxMfWZ1bmN0aW9uIEhMKHksUCl7dmFyIEw9''@;'; put 'put ''eWMoKTtyZXR1cm4gY2koTCwiQnJ0QmVnaW5Cb29rIiksY2koTCwiQnJ0RmlsZVZlcnNpb24iLGZ1bmN0aW9uIG9NKHksUCl7UHx8KFA9ZnIoMTI3KSk7Zm9yKHZhciBMPTA7NCE9TDsrK0wpUC53cml0ZV9zaGlmdCg0LDApO3JldHVybiBuYygiU2hlZXRKUyIsUCksbmMoTS52ZXJzaW9uLFAp''@;'; put 'put ''LG5jKE0udmVyc2lvbixQKSxuYygiNzI2MiIsUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KCkpLGNpKEwsIkJydFdiUHJvcCIsZnVuY3Rpb24gRkwoeSxQKXtQfHwoUD1mcig3MikpO3ZhciBMPTA7cmV0dXJuIHkmJnkuZmlsdGVyUHJpdmFjeSYmKEx8PTgpLFAud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCxMKSxQLndyaXRlX3NoaWZ0KDQsMCksc20oeSYmeS5Db2RlTmFtZXx8IlRoaXNXb3JrYm9vayIsUCksUC5zbGljZSgwLFAubCl9KHkuV29ya2Jvb2smJnkuV29ya2Jvb2suV0JQcm9wc3x8bnVsbCkpLGZ1bmN0aW9uIHNNKHksUCl7aWYoUC5Xb3JrYm9vayYmUC5Xb3JrYm9vay5TaGVl''@;'; put 'put ''dHMpe2Zvcih2YXIgTD1QLldvcmtib29rLlNoZWV0cyxRPTAscmU9LTEscGU9LTE7UTxMLmxlbmd0aDsrK1EpIUxbUV18fCFMW1FdLkhpZGRlbiYmLTE9PXJlP3JlPVE6MT09TFtRXS5IaWRkZW4mJi0xPT1wZSYmKHBlPVEpO3BlPnJlfHwoY2koeSwiQnJ0QmVnaW5Cb29rVmlld3MiKSxjaSh5''@;'; put 'put ''LCJCcnRCb29rVmlldyIsZnVuY3Rpb24gZzUoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoMjkpKSxQLndyaXRlX3NoaWZ0KC00LDApLFAud3JpdGVfc2hpZnQoLTQsNDYwKSxQLndyaXRlX3NoaWZ0KDQsMjg4MDApLFAud3JpdGVfc2hpZnQoNCwxNzYwMCksUC53cml0ZV9zaGlmdCg0LDUwMCksUC53''@;'; put 'put ''cml0ZV9zaGlmdCg0LHkpLFAud3JpdGVfc2hpZnQoNCx5KSxQLndyaXRlX3NoaWZ0KDEsMTIwKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH0ocmUpKSxjaSh5LCJCcnRFbmRCb29rVmlld3MiKSl9fShMLHkpLGZ1bmN0aW9uIEQ2KHksUCl7Y2koeSwiQnJ0QmVnaW5CdW5kbGVTaHMi''@;'; put 'put ''KTtmb3IodmFyIEw9MDtMIT1QLlNoZWV0TmFtZXMubGVuZ3RoOysrTCljaSh5LCJCcnRCdW5kbGVTaCIsT0woe0hpZGRlbjpQLldvcmtib29rJiZQLldvcmtib29rLlNoZWV0cyYmUC5Xb3JrYm9vay5TaGVldHNbTF0mJlAuV29ya2Jvb2suU2hlZXRzW0xdLkhpZGRlbnx8MCxpVGFiSUQ6TCsx''@;'; put 'put ''LHN0clJlbElEOiJySWQiKyhMKzEpLG5hbWU6UC5TaGVldE5hbWVzW0xdfSkpO2NpKHksIkJydEVuZEJ1bmRsZVNocyIpfShMLHkpLGNpKEwsIkJydEVuZEJvb2siKSxMLmVuZCgpfWZ1bmN0aW9uIFpMKHksUCxMLFEscmUpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9BTDpXSSkoeSxM''@;'; put 'put ''LFEscmUpfWZ1bmN0aW9uIGFNKHksUCxMLFEscmUpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9ucDpRMykoeSxMLFEscmUpfWZ1bmN0aW9uIFdMKHksUCxMKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/eDM6TG0pKHksTCl9ZnVuY3Rpb24gUWUoeSxQLEwpe3JldHVybigiLmJp''@;'; put 'put ''biI9PT1QLnNsaWNlKC00KT9lSTpOQykoeSxMKX12YXIgcXY9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZyxLdj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIG11KHksUCl7dmFyIEw9''@;'; put 'put ''eS5zcGxpdCgvXHMrLyksUT1bXTtpZihQfHwoUVswXT1MWzBdKSwxPT09TC5sZW5ndGgpcmV0dXJuIFE7dmFyIHBlLF9lLFNlLHJlPXkubWF0Y2gocXYpO2lmKHJlKWZvcihTZT0wO1NlIT1yZS5sZW5ndGg7KytTZSktMT09PShfZT0ocGU9cmVbU2VdLm1hdGNoKEt2KSlbMV0uaW5kZXhPZigi''@;'; put 'put ''OiIpKT9RW3BlWzFdXT1wZVsyXS5zbGljZSgxLHBlWzJdLmxlbmd0aC0xKTpRWyJ4bWxuczoiPT09cGVbMV0uc2xpY2UoMCw2KT8ieG1sbnMiK3BlWzFdLnNsaWNlKDYpOnBlWzFdLnNsaWNlKF9lKzEpXT1wZVsyXS5zbGljZSgxLHBlWzJdLmxlbmd0aC0xKTtyZXR1cm4gUX1mdW5jdGlvbiBs''@;'; put 'put ''TSh5KXt2YXIgTD17fTtpZigxPT09eS5zcGxpdCgvXHMrLykubGVuZ3RoKXJldHVybiBMO3ZhciByZSxwZSx2ZSxRPXkubWF0Y2gocXYpO2lmKFEpZm9yKHZlPTA7dmUhPVEubGVuZ3RoOysrdmUpLTE9PT0ocGU9KHJlPVFbdmVdLm1hdGNoKEt2KSlbMV0uaW5kZXhPZigiOiIpKT9MW3JlWzFd''@;'; put 'put ''XT1yZVsyXS5zbGljZSgxLHJlWzJdLmxlbmd0aC0xKTpMWyJ4bWxuczoiPT09cmVbMV0uc2xpY2UoMCw2KT8ieG1sbnMiK3JlWzFdLnNsaWNlKDYpOnJlWzFdLnNsaWNlKHBlKzEpXT1yZVsyXS5zbGljZSgxLHJlWzJdLmxlbmd0aC0xKTtyZXR1cm4gTH1mdW5jdGlvbiBHTCh5KXt2YXIgUD17''@;'; put 'put ''fTtpZih5LkRlZmF1bHRSb3dIZWlnaHQpe3ZhciBMPXtocHg6NCpwYXJzZUludCh5LkRlZmF1bHRSb3dIZWlnaHQpLzN9O0kzKEwpLFAucm93PUx9aWYoeS5EZWZhdWx0Q29sV2lkdGgpe3ZhciBRPXt3cHg6NCpwYXJzZUludCh5LkRlZmF1bHRDb2xXaWR0aCkvM307cHUoUSksUC5jb2w9UX1y''@;'; put 'put ''ZXR1cm4gUH1mdW5jdGlvbiBSZSh5LFAsTCxRKXt2YXIgcmU9UTtzd2l0Y2goKExbMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0rKSIvKXx8WyIiLCIiXSlbMV0pe2Nhc2UiYm9vbGVhbiI6cmU9eXIoUSk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOnJlPXBhcnNlSW50KFEsMTApO2JyZWFrO2Nh''@;'; put 'put ''c2UicjQiOmNhc2UiZmxvYXQiOnJlPXBhcnNlRmxvYXQoUSk7YnJlYWs7Y2FzZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6IjpyZT1IdChRKTticmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IitMWzBdKX15W3hyKFApXT1yZX12YXIgY009ezA6Ik5vbmUiLDE6IlNpbmdsZSIsMjoiRG91YmxlIiwzMzoiU2luZ2xlQWNjb3VudGluZyIsMzQ6IkRvdWJsZUFjY291bnRpbmcifSxtZT1BZShjTSk7ZnVuY3Rpb24geWUoeSxQLEwsUSl7aWYo''@;'; put 'put ''US5jZWxsU3R5bGVzKXtpZihMPUwucmVwbGFjZSgvXHMrL2csIiAiKSxQLkludGVyaW9yKXt2YXIgcmU9UC5JbnRlcmlvcjtyZS5QYXR0ZXJuJiYocmUucGF0dGVyblR5cGU9SDRbcmUuUGF0dGVybl18fHJlLlBhdHRlcm4pLHJlLkNvbG9yJiZyZS5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZd''@;'; put 'put ''Ki8pJiYocmUuZmdDb2xvcj17cmdiOnJlLkNvbG9yLnNsaWNlKDEpfSl9IWZ1bmN0aW9uIHVNKHkpe3kuQm9yZGVycyYmKHkuQm9yZGVycy5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBMPVAuUG9zaXRpb24udG9Mb3dlckNhc2UoKTt5W0xdPXtzdHlsZTpxdChQLkxpbmVTdHlsZSwrUC5XZWln''@;'; put 'put ''aHQpLGNvbG9yOntyZ2I6KFAuQ29sb3J8fCIjMDAwMDAwIikuc2xpY2UoMSl9fX0pLGRlbGV0ZSB5LkJvcmRlcnMpfShQKTt2YXIgX2UscGU9TC5tYXRjaCgvPCg/Olx3KzopP0ZvbnRcc1tePl0qPi8pO3BlJiYoeXIoKF9lPWxuKHBlWzBdKSkuQm9sZCkmJihQLkJvbGQ9ITApLHlyKF9lLkl0''@;'; put 'put ''YWxpYykmJihQLkl0YWxpYz0hMCkseXIoX2UuU3RyaWtlVGhyb3VnaCkmJihQLlN0cmlrZT0hMCksX2UuU2l6ZSYmKFAuU2l6ZT0rX2UuU2l6ZSksUC5Gb250TmFtZT1fZS5Gb250TmFtZT9fZS5Gb250TmFtZToiQXJpYWwiLF9lLlVuZGVybGluZSYmKFAuVW5kZXJsaW5lPW1lW19lLlVuZGVy''@;'; put 'put ''bGluZV0pLF9lLkNvbG9yJiYoUC5SR0I9X2UuQ29sb3Iuc2xpY2UoLTYpKSksUC5BbGlnbm1lbnQmJihQLmFsaWdubWVudD17fSxQLkFsaWdubWVudC5WZXJ0aWNhbCYmKFAuYWxpZ25tZW50LnZlcnRpY2FsPVAuQWxpZ25tZW50LlZlcnRpY2FsLnRvTG93ZXJDYXNlKCkpLFAuQWxpZ25tZW50''@;'; put 'put ''Lkhvcml6b250YWwmJihQLmFsaWdubWVudC5ob3Jpem9udGFsPVAuQWxpZ25tZW50Lkhvcml6b250YWwudG9Mb3dlckNhc2UoKSkseXIoUC5BbGlnbm1lbnQuV3JhcFRleHR8fCIwIik/UC5hbGlnbm1lbnQud3JhcFRleHQ9ITA6bnVsbD09UC5BbGlnbm1lbnQuV3JhcFRleHQmJmRlbGV0ZSBQ''@;'; put 'put ''LmFsaWdubWVudC53cmFwVGV4dCx5cihQLkFsaWdubWVudC5TaHJpbmtUb0ZpdHx8IjAiKSYmKFAuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSwrUC5BbGlnbm1lbnQuSW5kZW50JiYoUC5hbGlnbm1lbnQuaW5kZW50PStQLkFsaWdubWVudC5JbmRlbnR8fDApLCtQLkFsaWdubWVudC5Sb3Rh''@;'; put 'put ''dGUmJihQLmFsaWdubWVudC50ZXh0Um90YXRpb249K1AuQWxpZ25tZW50LlJvdGF0ZXx8MCkpfXlbUC5JRF09UCwoIkRlZmF1bHQiPT1QLklEfHwiTm9ybWFsIj09UC5OYW1lKSYmWjEoUCl9ZnVuY3Rpb24gcXQoeSxQKXtzd2l0Y2goeSl7Y2FzZSJOb25lIjpyZXR1cm4ibm9uZSI7Y2FzZSJE''@;'; put 'put ''YXNoIjpyZXR1cm4iZGFzaGVkIjtjYXNlIkRvdCI6cmV0dXJuImRvdHRlZCI7Y2FzZSJEYXNoRG90IjpyZXR1cm4iZGFzaERvdCI7Y2FzZSJEYXNoRG90RG90IjpyZXR1cm4iZGFzaERvdERvdCI7Y2FzZSJTbGFudERhc2hEb3QiOnJldHVybiJzbGFudERhc2hEb3QiO2Nhc2UiRG91YmxlIjpy''@;'; put 'put ''ZXR1cm4iZG91YmxlIjtjYXNlIkNvbnRpbnVvdXMiOnN3aXRjaCgrUHx8MCl7Y2FzZSAwOnJldHVybiJoYWlyIjtjYXNlIDE6cmV0dXJuInRoaW4iO2Nhc2UgMjpyZXR1cm4ibWVkaXVtIjtjYXNlIDM6cmV0dXJuInRoaWNrIn1yZXR1cm4idGhpbiJ9cmV0dXJuIHl9ZnVuY3Rpb24gZE0oeSxQ''@;'; put 'put ''LEwsUSxyZSxwZSxfZSx2ZSxTZSxIZSl7dmFyIFZlPSJHZW5lcmFsIixHZT1RLlN0eWxlSUQsbnQ9e307SGU9SGV8fHt9O3ZhciBkdD1bXSxDdD0wO2Zvcih2b2lkIDA9PT1HZSYmdmUmJihHZT12ZS5TdHlsZUlEKSx2b2lkIDA9PT1HZSYmX2UmJihHZT1fZS5TdHlsZUlEKTt2b2lkIDAhPT1w''@;'; put 'put ''ZVtHZV07KXt2YXIgY3Q9cGVbR2VdO2lmKCJHZW5lcmFsIj09VmUmJmN0Lm5mJiYoVmU9cGVbR2VdLm5mKSxjdC5JbnRlcmlvciYmZHQucHVzaChwZVtHZV0uSW50ZXJpb3IpLGN0LmFsaWdubWVudCYmKG50LmFsaWdubWVudHx8KG50LmFsaWdubWVudD1vbihjdC5hbGlnbm1lbnQpKSksbnVs''@;'; put 'put ''bD09bnQuYm9sZCYmY3QuQm9sZCYmKG50LmJvbGQ9ITApLG51bGw9PW50Lml0YWxpYyYmY3QuSXRhbGljJiYobnQuaXRhbGljPSEwKSxudWxsPT1udC5zdHJpa2UmJmN0LlN0cmlrZSYmKG50LnN0cmlrZT0hMCksbnVsbD09bnQuc3omJmN0LlNpemUmJihudC5zej1jdC5TaXplKSxudWxsPT1u''@;'; put 'put ''dC5uYW1lJiZjdC5Gb250TmFtZSYmKG50Lm5hbWU9Y3QuRm9udE5hbWUpLG51bGw9PW50LnVuZGVybGluZSYmY3QuVW5kZXJsaW5lJiYobnQudW5kZXJsaW5lPWN0LlVuZGVybGluZSksbnVsbD09bnQuY29sb3ImJmN0LlJHQiYmKG50LmNvbG9yPXtyZ2I6Y3QuUkdCfSksWyJ0b3AiLCJib3R0''@;'; put 'put ''b20iLCJsZWZ0IiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtudWxsPT1udFtUdF0mJmN0W1R0XSYmKG50W1R0XT1vbihjdFtUdF0pKX0pLCJEZWZhdWx0Ij09R2UpYnJlYWs7R2U9Y3QuUGFyZW50fHwiRGVmYXVsdCJ9bnQubmFtZXx8KG50Lm5hbWU9cGUuRGVmYXVsdCYmcGUuRGVm''@;'; put 'put ''YXVsdC5Gb250TmFtZXx8IkFyaWFsIiksbnQuc3p8fChudC5zej1wZS5EZWZhdWx0JiZwZS5EZWZhdWx0LlNpemV8fDEyKTt2YXIgYnQ9IiI7aWYoeXx8US5Gb3JtdWxhfHwiU3RyaW5nIj09TC5UeXBlfHwiTnVtYmVyIj09TC5UeXBlKXN3aXRjaChMLlR5cGUpe2Nhc2UiQm9vbGVhbiI6US50''@;'; put 'put ''PSJiIixRLnY9eXIoeSk7YnJlYWs7Y2FzZSJTdHJpbmciOlEudD0icyIsYnQ9R2koeHIoeSkpLFEudj15LmluZGV4T2YoIjwiKT4tMT94cihQfHx5KS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LHkuaW5kZXhPZigiPCIpPi0xJiYoUS5SPUZ1Lmh0bWxfdG9fcnMoeHIoeSkpKTticmVhaztj''@;'; put 'put ''YXNlIkRhdGVUaW1lIjoiWiIhPXkuc2xpY2UoLTEpJiYoeSs9IloiKSxRLnY9KEh0KHkpLW5ldyBEYXRlKERhdGUuVVRDKDE4OTksMTEsMzApKSkvODY0ZTUsUS52IT1RLnY/US52PXhyKHkpOlEudjw2MCYmKFEudj1RLnYtMSksKCFWZXx8IkdlbmVyYWwiPT1WZSkmJihWZT0ieXl5eS1tbS1k''@;'; put 'put ''ZCIpO2Nhc2UiTnVtYmVyIjp2b2lkIDA9PT1RLnYmJihRLnY9K3kpLFEudHx8KFEudD0ibiIpO2JyZWFrO2Nhc2UiRXJyb3IiOlEudD0iZSIsUS52PUthW3ldLCExIT09SGUuY2VsbFRleHQmJihRLnc9eSk7YnJlYWs7ZGVmYXVsdDoiIj09eSYmIiI9PVA/US50PSJ6IjooUS50PSJzIixidD1H''@;'; put 'put ''aSh4cih5KSksUS52PXkuaW5kZXhPZigiPCIpPi0xP3hyKFB8fHkpLnJlcGxhY2UoLzxbXl0qPz4vZywiIik6YnQseS5pbmRleE9mKCI8Iik+LTEmJihRLlI9RnUuaHRtbF90b19ycyh4cih5KSkpKX1lbHNlIFEudD0ieiIsZGVsZXRlIFEudjtpZihmdW5jdGlvbiBYdih5LFAsTCl7aWYoInoi''@;'; put 'put ''IT09eS50KXtpZighTHx8ITEhPT1MLmNlbGxUZXh0KXRyeXt5Lnc9ImUiPT09eS50P3kud3x8UW9beS52XToiR2VuZXJhbCI9PT1QPyJuIj09PXkudD8oMHx5LnYpPT09eS52P3cuX2dlbmVyYWxfaW50KHkudik6dy5fZ2VuZXJhbF9udW0oeS52KTp3Ll9nZW5lcmFsKHkudik6ZnVuY3Rpb24g''@;'; put 'put ''JGkoeSxQKXt2YXIgTD1uZVt5XXx8eHIoeSk7cmV0dXJuIkdlbmVyYWwiPT09TD93Ll9nZW5lcmFsKFApOncuZm9ybWF0KEwsUCl9KFB8fCJHZW5lcmFsIix5LnYpfWNhdGNoKHBlKXtpZihMLldURil0aHJvdyBwZX10cnl7dmFyIFE9bmVbUF18fFB8fCJHZW5lcmFsIjtpZihMLmNlbGxORiYm''@;'; put 'put ''KHkuej1RKSxMLmNlbGxEYXRlcyYmIm4iPT15LnQmJncuaXNfZGF0ZShRKSl7dmFyIHJlPXcucGFyc2VfZGF0ZV9jb2RlKHkudik7cmUmJih5LnQ9ImQiLHkudj1uZXcgRGF0ZShyZS55LHJlLm0tMSxyZS5kLHJlLkgscmUuTSxyZS5TLHJlLnUpKX19Y2F0Y2gocGUpe2lmKEwuV1RGKXRocm93''@;'; put 'put ''IHBlfX19KFEsVmUsSGUpLCExIT09SGUuY2VsbEZvcm11bGEpaWYoUS5Gb3JtdWxhKXt2YXIgRnQ9eHIoUS5Gb3JtdWxhKTs2MT09RnQuY2hhckNvZGVBdCgwKSYmKEZ0PUZ0LnNsaWNlKDEpKSxRLmY9YWYoRnQscmUpLGRlbGV0ZSBRLkZvcm11bGEsIlJDIj09US5BcnJheVJhbmdlP1EuRj1h''@;'; put 'put ''ZigiUkM6UkMiLHJlKTpRLkFycmF5UmFuZ2UmJihRLkY9YWYoUS5BcnJheVJhbmdlLHJlKSxTZS5wdXNoKFtPaShRLkYpLFEuRl0pKX1lbHNlIGZvcihDdD0wO0N0PFNlLmxlbmd0aDsrK0N0KXJlLnI+PVNlW0N0XVswXS5zLnImJnJlLnI8PVNlW0N0XVswXS5lLnImJnJlLmM+PVNlW0N0XVsw''@;'; put 'put ''XS5zLmMmJnJlLmM8PVNlW0N0XVswXS5lLmMmJihRLkY9U2VbQ3RdWzFdKTtpZihIZS5jZWxsU3R5bGVzJiYoZHQuZm9yRWFjaChmdW5jdGlvbihUdCl7IW50LnBhdHRlcm5UeXBlJiZUdC5wYXR0ZXJuVHlwZSYmKG50LnBhdHRlcm5UeXBlPVR0LnBhdHRlcm5UeXBlKSwhbnQuZmdDb2xvciYm''@;'; put 'put ''VHQuZmdDb2xvciYmKG50LmZnQ29sb3I9VHQuZmdDb2xvcil9KSxRLnM9bnQpLHZvaWQgMCE9PVEuU3R5bGVJRCYmKFEuaXhmZT1RLlN0eWxlSUQpLFEuUiYmUS5zKXt2YXIgRXQ9b24oUS5zKTtkZWxldGUgRXQuYm9sZCxkZWxldGUgRXQuaXRhbGljLGRlbGV0ZSBFdC51bmRlcmxpbmUsZGVs''@;'; put 'put ''ZXRlIEV0LnN0cmlrZSxRLlIuZm9yRWFjaChmdW5jdGlvbihUdCl7VHQucz1VdChvbihFdCksVHQucyl9KX19ZnVuY3Rpb24gJEwoeSl7eS50PXkudnx8IiIseS50PXkudC5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSx5LnY9eS53PXkuaXhmZT12b2lkIDB9ZnVu''@;'; put 'put ''Y3Rpb24gSnYoeSl7aWYoaGUmJkJ1ZmZlci5pc0J1ZmZlcih5KSlyZXR1cm4geS50b1N0cmluZygidXRmOCIpO2lmKCJzdHJpbmciPT10eXBlb2YgeSlyZXR1cm4geTtpZih0eXBlb2YgVWludDhBcnJheTwidSImJnkgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBQaShOKEMoeSkpKTt0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkJhZCBpbnB1dCBmb3JtYXQ6IGV4cGVjdGVkIEJ1ZmZlciBvciBzdHJpbmciKX12YXIgenI9LzwoXC8/KShbXlxzPz48IVwvOl0qOnwpKFteXHM/PD46XC9cW10rKSg/Oltccz86PFwvXVtePl0qKT8+L2dtO2Z1bmN0aW9uIFlyKHksUCl7dmFyIEw9UHx8e30sUT1V''@;'; put 'put ''KEp2KHkpKTsoImJpbmFyeSI9PUwudHlwZXx8ImFycmF5Ij09TC50eXBlfHwiYmFzZTY0Ij09TC50eXBlKSYmKFE9dHlwZW9mIGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLEIoUSkpOlBpKFEpKTt2YXIgcmU9US5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCkscGU9''@;'; put 'put ''ITE7aWYoKDEwMjMmcmUuaW5kZXhPZigiPiIpKT5NYXRoLm1pbigxMDIzJnJlLmluZGV4T2YoIiwiKSwxMDIzJnJlLmluZGV4T2YoIjsiKSkpe3ZhciBfZT1vbihMKTtyZXR1cm4gX2UudHlwZT0ic3RyaW5nIixCMS50b193b3JrYm9vayhRLF9lKX1pZigtMT09cmUuaW5kZXhPZigiPD94bWwi''@;'; put 'put ''KSYmWyJodG1sIiwidGFibGUiLCJoZWFkIiwibWV0YSIsInNjcmlwdCIsInN0eWxlIiwiZGl2Il0uZm9yRWFjaChmdW5jdGlvbihudSl7cmUuaW5kZXhPZigiPCIrbnUpPj0wJiYocGU9ITApfSkscGUpcmV0dXJuIEZ1LnRvX3dvcmtib29rKFEsTCk7dmFyIHZlLEhlLFNlPVtdO251bGwhPXRl''@;'; put 'put ''JiZudWxsPT1MLmRlbnNlJiYoTC5kZW5zZT10ZSk7dmFyIHVyLFZlPXt9LEdlPVtdLG50PUwuZGVuc2U/W106e30sZHQ9IiIsQ3Q9e30sY3Q9e30sYnQ9e30sRnQ9bXUoJzxEYXRhIHNzOlR5cGU9IlN0cmluZyI+JyksRXQ9MCxUdD0wLFp0PTAscG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAs''@;'; put 'put ''YzowfX0sS249e30sdW49e30scW49IiIsem49MCxBbj1bXSxlcj17fSx0cj17fSxabj0wLE5yPVtdLG9pPXt9LGtpPVtdLExpPXt9LFFyPVtdLFRuPSExLHZyPVtdLHJyPVtdLFNuPXt9LHByPTAsQ2k9MCxCcj17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfX0samk9e307enIubGFz''@;'; put 'put ''dEluZGV4PTAsUT1RLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKTtmb3IodmFyIF9vPSIiO3ZlPXpyLmV4ZWMoUSk7KXN3aXRjaCh2ZVszXT0oX289dmVbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEiPT1fbyl7aWYoIi8iPT09dmVbMV0pe2lmKChIZT1T''@;'; put 'put ''ZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UiLyIhPT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3RoLTIpJiZTZS5wdXNoKFt2ZVszXSwhMF0pO2JyZWFrfWlmKFNlW1NlLmxlbmd0aC0xXVsxXSlicmVhazsiLyI9PT12''@;'; put 'put ''ZVsxXT9kTShRLnNsaWNlKEV0LHZlLmluZGV4KSxxbixGdCwiY29tbWVudCI9PVNlW1NlLmxlbmd0aC0xXVswXT9MaTpjdCx7YzpUdCxyOlp0fSxLbixRcltUdF0sYnQsdnIsTCk6KHFuPSIiLEZ0PW11KHZlWzBdKSxFdD12ZS5pbmRleCt2ZVswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiY2VsbCI6''@;'; put 'put ''aWYoIi8iPT09dmVbMV18fCIvPiI9PT12ZVswXS5zbGljZSgtMikpe2lmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpe2lmKChjdD1sTSh2ZVswXSkpLkluZGV4JiYoVHQ9K2N0LkluZGV4LTEpLFR0PHBuLnMuYyYmKHBuLnMuYz1UdCksVHQ+cG4uZS5jJiYocG4uZS5jPVR0KSxraT1bXSwhTC5z''@;'; put 'put ''aGVldFN0dWJzKXsrK1R0O2JyZWFrfWRNKCIiLCIiLHt9LCJjb21tZW50Ij09U2VbU2UubGVuZ3RoLTFdWzBdP0xpOmN0LHtjOlR0LHI6WnR9LEtuLFFyW1R0XSxidCx2cixMKX1pZihraS5sZW5ndGg+MCYmKGN0LmM9a2kpLCghTC5zaGVldFJvd3N8fEwuc2hlZXRSb3dzPlp0KSYmKHZvaWQg''@;'; put 'put ''MCE9PWN0LnZ8fEwuc2hlZXRTdHVicykmJihMLmRlbnNlPyhudFtadF18fChudFtadF09W10pLG50W1p0XVtUdF09Y3QpOm50W05zKFR0KStIcyhadCldPWN0KSxjdC5IUmVmJiYoY3QubD17VGFyZ2V0OnhyKGN0LkhSZWYpfSxjdC5IUmVmU2NyZWVuVGlwJiYoY3QubC5Ub29sdGlwPWN0LkhS''@;'; put 'put ''ZWZTY3JlZW5UaXApLGRlbGV0ZSBjdC5IUmVmLGRlbGV0ZSBjdC5IUmVmU2NyZWVuVGlwKSwoY3QuTWVyZ2VBY3Jvc3N8fGN0Lk1lcmdlRG93bikmJihwcj1UdCsoMHxwYXJzZUludChjdC5NZXJnZUFjcm9zcywxMCkpLENpPVp0KygwfHBhcnNlSW50KGN0Lk1lcmdlRG93biwxMCkpLChwcj5U''@;'; put 'put ''dHx8Q2k+WnQpJiZBbi5wdXNoKHtzOntjOlR0LHI6WnR9LGU6e2M6cHIscjpDaX19KSksTC5zaGVldFN0dWJzKWlmKGN0Lk1lcmdlQWNyb3NzfHxjdC5NZXJnZURvd24pe2Zvcih2YXIgRGk9VHQ7RGk8PXByOysrRGkpZm9yKHZhciBZbz1adDtZbzw9Q2k7KytZbykoRGk+VHR8fFlvPlp0KSYm''@;'; put 'put ''KEwuZGVuc2U/KG50W1lvXXx8KG50W1lvXT1bXSksbnRbWW9dW0RpXT17dDoieiJ9KTpudFtOcyhEaSkrSHMoWW8pXT17dDoieiJ9KTtUdD1wcisxfWVsc2UrK1R0O2Vsc2UgY3QuTWVyZ2VBY3Jvc3M/VHQ9cHIrMTorK1R0fWVsc2UoY3Q9bE0odmVbMF0pKS5JbmRleCYmKFR0PStjdC5JbmRl''@;'; put 'put ''eC0xKSxUdDxwbi5zLmMmJihwbi5zLmM9VHQpLFR0PnBuLmUuYyYmKHBuLmUuYz1UdCksIi8+Ij09PXZlWzBdLnNsaWNlKC0yKSYmKytUdCxraT1bXTticmVhaztjYXNlInJvdyI6Ii8iPT09dmVbMV18fCIvPiI9PT12ZVswXS5zbGljZSgtMik/KFp0PHBuLnMuciYmKHBuLnMucj1adCksWnQ+''@;'; put 'put ''cG4uZS5yJiYocG4uZS5yPVp0KSwiLz4iPT09dmVbMF0uc2xpY2UoLTIpJiYoYnQ9bXUodmVbMF0pKS5JbmRleCYmKFp0PStidC5JbmRleC0xKSxUdD0wLCsrWnQpOigoYnQ9bXUodmVbMF0pKS5JbmRleCYmKFp0PStidC5JbmRleC0xKSxTbj17fSwoIjAiPT1idC5BdXRvRml0SGVpZ2h0fHxi''@;'; put 'put ''dC5IZWlnaHQpJiYoU24uaHB0PXBhcnNlRmxvYXQoYnQuSGVpZ2h0KSxTbi5ocHg9VTEoU24uaHB0KSxycltadF09U24pLCIxIj09YnQuSGlkZGVuJiYoU24uaGlkZGVuPSEwLHJyW1p0XT1TbikpO2JyZWFrO2Nhc2Uid29ya3NoZWV0IjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgp''@;'; put 'put ''KVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSk7R2UucHVzaChkdCkscG4ucy5yPD1wbi5lLnImJnBuLnMuYzw9cG4uZS5jJiYobnRbIiFyZWYiXT1PbyhwbiksTC5zaGVldFJvd3MmJkwuc2hlZXRSb3dzPD1wbi5lLnImJihudFsiIWZ1bGxy''@;'; put 'put ''ZWYiXT1udFsiIXJlZiJdLHBuLmUucj1MLnNoZWV0Um93cy0xLG50WyIhcmVmIl09T28ocG4pKSksQW4ubGVuZ3RoJiYobnRbIiFtZXJnZXMiXT1BbiksUXIubGVuZ3RoPjAmJihudFsiIWNvbHMiXT1RcikscnIubGVuZ3RoPjAmJihudFsiIXJvd3MiXT1yciksQ3QmJihudFsiIXNoZWV0Rm9y''@;'; put 'put ''bWF0Il09R0woQ3QpKSxWZVtkdF09bnR9ZWxzZSBwbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxadD1UdD0wLFNlLnB1c2goW3ZlWzNdLCExXSksSGU9bXUodmVbMF0pLGR0PXhyKEhlLk5hbWUpLG50PUwuZGVuc2U/W106e30sQW49W10sdnI9W10scnI9W10sQnIuU2hlZXRzLnB1''@;'; put 'put ''c2goamk9e25hbWU6ZHQsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSl9ZWxzZXtpZigiLz4iPT12ZVswXS5zbGljZSgtMikpYnJl''@;'; put 'put ''YWs7Q3Q9bXUodmVbMF0pLFNlLnB1c2goW3ZlWzNdLCExXSksUXI9W10sVG49ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09dmVbMV0/eWUoS24sdW4scW4sTCk6KHVuPW11KHZlWzBdKSxxbj0iIik7YnJlYWs7Y2FzZSJudW1iZXJmb3JtYXQiOnVuLm5mPXhyKG11KHZlWzBdKS5Gb3JtYXR8''@;'; put 'put ''fCJHZW5lcmFsIiksbmVbdW4ubmZdJiYodW4ubmY9bmVbdW4ubmZdKTtmb3IodmFyIGxvPTA7MzkyIT1sbyYmdy5fdGFibGVbbG9dIT11bi5uZjsrK2xvKTtpZigzOTI9PWxvKWZvcihsbz01NzszOTIhPWxvOysrbG8paWYobnVsbD09dy5fdGFibGVbbG9dKXt3LmxvYWQodW4ubmYsbG8pO2Jy''@;'; put 'put ''ZWFrfWJyZWFrO2Nhc2UiY29sdW1uIjppZigidGFibGUiIT09U2VbU2UubGVuZ3RoLTFdWzBdfHwiLyI9PT12ZVsxXSlicmVhaztpZigodXI9bXUodmVbMF0pKS5IaWRkZW4mJih1ci5oaWRkZW49ITAsZGVsZXRlIHVyLkhpZGRlbiksdXIuV2lkdGg/dXIud3B4PTQqcGFyc2VJbnQodXIuV2lk''@;'; put 'put ''dGgsMTApLzM6K3VyLkF1dG9GaXRXaWR0aCYmKHVyLmF1dG89MSksIVRuJiZ1ci53cHg+MTApe1RuPSEwLHBsPWFDO2Zvcih2YXIgQW89MDtBbzxRci5sZW5ndGg7KytBbylRcltBb10mJnB1KFFyW0FvXSl9VG4mJnB1KHVyKSxRclt1ci5JbmRleC0xfHxRci5sZW5ndGhdPXVyO2Zvcih2YXIg''@;'; put 'put ''eG89MDt4bzwrdXIuU3BhbjsrK3hvKVFyW1FyLmxlbmd0aF09b24odXIpO2JyZWFrO2Nhc2UibmFtZWRyYW5nZSI6aWYoIi8iPT09dmVbMV0pYnJlYWs7QnIuTmFtZXN8fChCci5OYW1lcz1bXSk7dmFyIGhpPWxuKHZlWzBdKSx0YT17TmFtZTpoaS5OYW1lLFJlZjphZihoaS5SZWZlcnNUby5z''@;'; put 'put ''bGljZSgxKSx7cjowLGM6MH0pfTtCci5TaGVldHMubGVuZ3RoPjAmJih0YS5TaGVldD1Cci5TaGVldHMubGVuZ3RoLTEpLEJyLk5hbWVzLnB1c2godGEpO2JyZWFrO2Nhc2UibmFtZWRjZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2Ui''@;'; put 'put ''aDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlInByb3RlY3Rpb24iOmNhc2UicGFyYWdyYXBocyI6Y2FzZSJuYW1lIjpicmVhaztjYXNlImFsaWdubWVudCI6aWYoIUwuY2VsbFN0eWxlc3x8Ii8iPT09dmVbMV0pYnJlYWs7dW4uQWxpZ25tZW50PW11KHZlWzBdKTticmVh''@;'; put 'put ''aztjYXNlImJvcmRlcnMiOiIvIiE9PXZlWzFdJiYodW4uQm9yZGVycz1bXSk7YnJlYWs7Y2FzZSJib3JkZXIiOmlmKCIvIj09PXZlWzFdKWJyZWFrO3VuLkJvcmRlcnN8fCh1bi5Cb3JkZXJzPVtdKSx1bi5Cb3JkZXJzLnB1c2gobXUodmVbMF0pKTticmVhaztjYXNlImZvbnQiOmlmKCIvPiI9''@;'; put 'put ''PT12ZVswXS5zbGljZSgtMikpe3FuKz12ZVswXTticmVha30iLyI9PT12ZVsxXT9xbis9US5zbGljZSh6bix2ZS5pbmRleCt2ZVswXS5sZW5ndGgpOnpuPXZlLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCFMLmNlbGxTdHlsZXN8fCIvIj09PXZlWzFdKWJyZWFrO3VuLkludGVyaW9y''@;'; put 'put ''PW11KHZlWzBdKTticmVhaztjYXNlImF1dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVkIjpjYXNlImtleXdvcmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2UiY29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6''@;'; put 'put ''Y2FzZSJsYXN0cHJpbnRlZCI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBlcmxpbmtiYXNlIjpjYXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJpZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlm''@;'; put 'put ''KCIvPiI9PT12ZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09dmVbMV0/UmQoZXIsX28sUS5zbGljZShabix2ZS5pbmRleCkpOlpuPXZlLmluZGV4K3ZlWzBdLmxlbmd0aDticmVhaztjYXNlInN0eWxlcyI6Y2FzZSJ3b3JrYm9vayI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlb''@;'; put 'put ''MF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UgU2UucHVzaChbdmVbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQg''@;'; put 'put ''c3RhdGU6ICIrSGUuam9pbigifCIpKTskTChMaSksa2kucHVzaChMaSl9ZWxzZSBTZS5wdXNoKFt2ZVszXSwhMV0pLExpPXthOihIZT1tdSh2ZVswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSl9ZWxzZSBpZigiLyIhPT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3RoLTIpKXt2YXIgTW49bXUodmVbMF0pO250WyIhYXV0b2ZpbHRlciJdPXtyZWY6YWYoTW4uUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxTZS5wdXNo''@;'; put 'put ''KFt2ZVszXSwhMF0pfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOmlmKG50WyIhdmFsaWRhdGlvbnMiXXx8KG50WyIhdmFsaWRhdGlvbnMiXT1bXSksIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2lu''@;'; put 'put ''KCJ8IikpfWVsc2UiLyIhPT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3RoLTIpJiZTZS5wdXNoKFt2ZVszXSwhMF0pLG9pPXt9O2JyZWFrO2Nhc2UicGl4ZWxzcGVyaW5jaCI6aWYoIi8iPT09dmVbMV0pe3ZhciBNcz0rUS5zbGljZShFdCx2ZS5pbmRleCk7KDcyPT1Nc3x8OTY9PU1zKSYmRm0o''@;'; put 'put ''TXMpfWVsc2UgRXQ9dmUuaW5kZXgrdmVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6Y2FzZSJkb2N1bWVudHByb3BlcnRpZXMiOmNhc2UiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOmNhc2UicGl2b3R0YWJsZSI6''@;'; put 'put ''Y2FzZSJwaXZvdGNhY2hlIjpjYXNlIm5hbWVzIjpjYXNlIm1hcGluZm8iOmNhc2UicGFnZWJyZWFrcyI6Y2FzZSJxdWVyeXRhYmxlIjpjYXNlInNvcnRpbmciOmNhc2Uic2NoZW1hIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6Y2FzZSJzbWFydHRhZ3R5cGUiOmNhc2Uic21hcnR0YWdz''@;'; put 'put ''IjpjYXNlImV4Y2Vsd29ya2Jvb2siOmNhc2Uid29ya2Jvb2tvcHRpb25zIjpjYXNlIndvcmtzaGVldG9wdGlvbnMiOmlmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKX1lbHNlIi8iIT09''@;'; put 'put ''dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSYmU2UucHVzaChbdmVbM10sITBdKTticmVhaztkZWZhdWx0OmlmKDA9PVNlLmxlbmd0aCYmImRvY3VtZW50Ij09dmVbM118fDA9PVNlLmxlbmd0aCYmInVvZiI9PXZlWzNdKXJldHVybiBzXyhRLEwpO3ZhciB5cz0hMDtzd2l0Y2goU2VbU2Uu''@;'; put 'put ''bGVuZ3RoLTFdWzBdKXtjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaCh2ZVszXSl7Y2FzZSJhbGxvd3BuZyI6Y2FzZSJyZW1vdmVwZXJzb25hbGluZm9ybWF0aW9uIjpjYXNlImRvd25sb2FkY29tcG9uZW50cyI6Y2FzZSJsb2NhdGlvbm9mY29tcG9uZW50cyI6Y2FzZSJjb2xv''@;'; put 'put ''cnMiOmNhc2UiY29sb3IiOmNhc2UiaW5kZXgiOmNhc2UicmdiIjpjYXNlInRhcmdldHNjcmVlbnNpemUiOmNhc2UicmVhZG9ubHlyZWNvbW1lbmRlZCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJ0b29sYmFyIjpj''@;'; put 'put ''YXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNoZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmti''@;'; put 'put ''b29rIjpzd2l0Y2godmVbM10pe2Nhc2UiZGF0ZTE5MDQiOkJyLldCUHJvcHMuZGF0ZTE5MDQ9ITA7YnJlYWs7Y2FzZSJ3aW5kb3doZWlnaHQiOmNhc2Uid2luZG93d2lkdGgiOmNhc2Uid2luZG93dG9weCI6Y2FzZSJ3aW5kb3d0b3B5IjpjYXNlInRhYnJhdGlvIjpjYXNlInByb3RlY3RzdHJ1''@;'; put 'put ''Y3R1cmUiOmNhc2UicHJvdGVjdHdpbmRvdyI6Y2FzZSJwcm90ZWN0d2luZG93cyI6Y2FzZSJhY3RpdmVzaGVldCI6Y2FzZSJkaXNwbGF5aW5rbm90ZXMiOmNhc2UiZmlyc3R2aXNpYmxlc2hlZXQiOmNhc2Uic3VwYm9vayI6Y2FzZSJzaGVldG5hbWUiOmNhc2Uic2hlZXRpbmRleCI6Y2FzZSJz''@;'; put 'put ''aGVldGluZGV4Zmlyc3QiOmNhc2Uic2hlZXRpbmRleGxhc3QiOmNhc2UiZGxsIjpjYXNlImFjY2VwdGxhYmVsc2luZm9ybXVsYXMiOmNhc2UiZG9ub3RzYXZlbGlua3ZhbHVlcyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UibWF4aXRlcmF0aW9ucyI6Y2FzZSJtYXhjaGFuZ2UiOmNhc2UicGF0aCI6''@;'; put 'put ''Y2FzZSJ4Y3QiOmNhc2UiY291bnQiOmNhc2Uic2VsZWN0ZWRzaGVldHMiOmNhc2UiY2FsY3VsYXRpb24iOmNhc2UidW5jYWxjZWQiOmNhc2Uic3RhcnR1cHByb21wdCI6Y2FzZSJjcm4iOmNhc2UiZXh0ZXJubmFtZSI6Y2FzZSJmb3JtdWxhIjpjYXNlImNvbGZpcnN0IjpjYXNlImNvbGxhc3Qi''@;'; put 'put ''OmNhc2Uid2FudGFkdmlzZSI6Y2FzZSJib29sZWFuIjpjYXNlImVycm9yIjpjYXNlInRleHQiOmNhc2Uib2xlIjpjYXNlIm5vYXV0b3JlY292ZXIiOmNhc2UicHVibGlzaG9iamVjdHMiOmNhc2UiZG9ub3RjYWxjdWxhdGViZWZvcmVzYXZlIjpjYXNlIm51bWJlciI6Y2FzZSJyZWZtb2RlcjFj''@;'; put 'put ''MSI6Y2FzZSJlbWJlZHNhdmVzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJ3b3JrYm9va29wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlIndv''@;'; put 'put ''cmtzaGVldG9wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09dmVbMF0uc2xpY2UoLTIpKWlmKCIvIj09PXZlWzFdKXN3aXRjaChRLnNsaWNlKFpuLHZlLmluZGV4KSl7Y2FzZSJTaGVldEhpZGRlbiI6amkuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlI''@;'; put 'put ''aWRkZW4iOmppLkhpZGRlbj0yfWVsc2UgWm49dmUuaW5kZXgrdmVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiaGVhZGVyIjpudFsiIW1hcmdpbnMiXXx8ZGYobnRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxudFsiIW1hcmdpbnMiXS5oZWFkZXI9bG4odmVbMF0pLk1hcmdpbjticmVhaztjYXNlImZv''@;'; put 'put ''b3RlciI6bnRbIiFtYXJnaW5zIl18fGRmKG50WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksbnRbIiFtYXJnaW5zIl0uZm9vdGVyPWxuKHZlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJwYWdlbWFyZ2lucyI6dmFyIEVsPWxuKHZlWzBdKTtudFsiIW1hcmdpbnMiXXx8ZGYobnRbIiFtYXJnaW5zIl09''@;'; put 'put ''e30sInhsbWwiKSxFbC5Ub3AmJihudFsiIW1hcmdpbnMiXS50b3A9RWwuVG9wKSxFbC5MZWZ0JiYobnRbIiFtYXJnaW5zIl0ubGVmdD1FbC5MZWZ0KSxFbC5SaWdodCYmKG50WyIhbWFyZ2lucyJdLnJpZ2h0PUVsLlJpZ2h0KSxFbC5Cb3R0b20mJihudFsiIW1hcmdpbnMiXS5ib3R0b209RWwu''@;'; put 'put ''Qm90dG9tKTticmVhaztjYXNlImRpc3BsYXlyaWdodHRvbGVmdCI6QnIuVmlld3N8fChCci5WaWV3cz1bXSksQnIuVmlld3NbMF18fChCci5WaWV3c1swXT17fSksQnIuVmlld3NbMF0uUlRMPSEwO2JyZWFrO2Nhc2UiZnJlZXplcGFuZXMiOmNhc2UiZnJvemVubm9zcGxpdCI6Y2FzZSJhY3Rp''@;'; put 'put ''dmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFuZSI6Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6''@;'; put 'put ''Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNlImVuYWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2Ui''@;'; put 'put ''dmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93dmlzaWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2Ui''@;'; put 'put ''cGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2FzZSJmaXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0Ijpj''@;'; put 'put ''YXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxsb3dpbnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxv''@;'; put 'put ''d3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXloZWFkaW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJy''@;'; put 'put ''ZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlvbiI6Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNv''@;'; put 'put ''bnRlbnRzIjpicmVhaztjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjppZigiLz4iIT09dmVbMF0uc2xpY2UoLTIpKWlmKCIvIj09dmVbMV0pe250WyIhZnJlZXplIl18fChudFsiIWZyZWV6ZSJdPSJBMSIpO3ZhciBzbD1zcyhudFsiIWZyZWV6ZSJdKTsic3BsaXRo''@;'; put 'put ''b3Jpem9udGFsIj09dmVbM10/c2wucj0rUS5zbGljZShabix2ZS5pbmRleCk6c2wuYz0rUS5zbGljZShabix2ZS5pbmRleCksbnRbIiFmcmVlemUiXT1kaShzbCl9ZWxzZSBabj12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOm50WyIhZ3Jp''@;'; put 'put ''ZGxpbmVzIl09ITE7YnJlYWs7Y2FzZSJub3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOm50WyIhb3V0bGluZSJdfHwobnRbIiFvdXRsaW5lIl09e30pLG50WyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjpudFsiIW91dGxpbmUiXXx8''@;'; put 'put ''KG50WyIhb3V0bGluZSJdPXt9KSxudFsiIW91dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaCh2ZVszXSl7Y2FzZSJpbW1lZGlhdGVpdGVtc29uZHJvcCI6Y2FzZSJzaG93cGFnZW11bHRpcGxl''@;'; put 'put ''aXRlbWxhYmVsIjpjYXNlImNvbXBhY3Ryb3dpbmRlbnQiOmNhc2UibG9jYXRpb24iOmNhc2UicGl2b3RmaWVsZCI6Y2FzZSJvcmllbnRhdGlvbiI6Y2FzZSJsYXlvdXRmb3JtIjpjYXNlImxheW91dHN1YnRvdGFsbG9jYXRpb24iOmNhc2UibGF5b3V0Y29tcGFjdHJvdyI6Y2FzZSJwb3NpdGlv''@;'; put 'put ''biI6Y2FzZSJwaXZvdGl0ZW0iOmNhc2UiZGF0YXR5cGUiOmNhc2UiZGF0YWZpZWxkIjpjYXNlInNvdXJjZW5hbWUiOmNhc2UicGFyZW50ZmllbGQiOmNhc2UicHRsaW5laXRlbXMiOmNhc2UicHRsaW5laXRlbSI6Y2FzZSJjb3VudG9mc2FtZWl0ZW1zIjpjYXNlIml0ZW0iOmNhc2UiaXRlbXR5''@;'; put 'put ''cGUiOmNhc2UicHRzb3VyY2UiOmNhc2UiY2FjaGVpbmRleCI6Y2FzZSJjb25zb2xpZGF0aW9ucmVmZXJlbmNlIjpjYXNlImZpbGVuYW1lIjpjYXNlInJlZmVyZW5jZSI6Y2FzZSJub2NvbHVtbmdyYW5kIjpjYXNlIm5vcm93Z3JhbmQiOmNhc2UiYmxhbmtsaW5lYWZ0ZXJpdGVtcyI6Y2FzZSJo''@;'; put 'put ''aWRkZW4iOmNhc2Uic3VidG90YWwiOmNhc2UiYmFzZWZpZWxkIjpjYXNlIm1hcGNoaWxkaXRlbXMiOmNhc2UiZnVuY3Rpb24iOmNhc2UicmVmcmVzaG9uZmlsZW9wZW4iOmNhc2UicHJpbnRzZXR0aXRsZXMiOmNhc2UibWVyZ2VsYWJlbHMiOmNhc2UiZGVmYXVsdHZlcnNpb24iOmNhc2UicmVm''@;'; put 'put ''cmVzaG5hbWUiOmNhc2UicmVmcmVzaGRhdGUiOmNhc2UicmVmcmVzaGRhdGVjb3B5IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6Y2FzZSJ2ZXJzaW9ubGFzdHVwZGF0ZSI6Y2FzZSJ2ZXJzaW9udXBkYXRlYWJsZW1pbiI6Y2FzZSJ2ZXJzaW9ucmVmcmVzaGFibGVtaW4iOmNhc2UiY2FsY3Vs''@;'; put 'put ''YXRpb24iOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJwYWdlYnJlYWtzIjpzd2l0Y2godmVbM10pe2Nhc2UiY29sYnJlYWtzIjpjYXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5k''@;'; put 'put ''IjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKHZlWzNdKXtjYXNlImF1dG9maWx0ZXJjb2x1bW4iOmNhc2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVyYW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVsdDp5cz0h''@;'; put 'put ''MX1icmVhaztjYXNlInF1ZXJ5dGFibGUiOnN3aXRjaCh2ZVszXSl7Y2FzZSJpZCI6Y2FzZSJhdXRvZm9ybWF0Zm9udCI6Y2FzZSJhdXRvZm9ybWF0cGF0dGVybiI6Y2FzZSJxdWVyeXNvdXJjZSI6Y2FzZSJxdWVyeXR5cGUiOmNhc2UiZW5hYmxlcmVkaXJlY3Rpb25zIjpjYXNlInJlZnJlc2hl''@;'; put 'put ''ZGlueGw5IjpjYXNlInVybHN0cmluZyI6Y2FzZSJodG1sdGFibGVzIjpjYXNlImNvbm5lY3Rpb24iOmNhc2UiY29tbWFuZHRleHQiOmNhc2UicmVmcmVzaGluZm8iOmNhc2Uibm90aXRsZXMiOmNhc2UibmV4dGlkIjpjYXNlImNvbHVtbmluZm8iOmNhc2Uib3ZlcndyaXRlY2VsbHMiOmNhc2Ui''@;'; put 'put ''ZG9ub3Rwcm9tcHRmb3JmaWxlIjpjYXNlInRleHR3aXphcmRzZXR0aW5ncyI6Y2FzZSJzb3VyY2UiOmNhc2UibnVtYmVyIjpjYXNlImRlY2ltYWwiOmNhc2UidGhvdXNhbmRzZXBhcmF0b3IiOmNhc2UidHJhaWxpbmdtaW51c251bWJlcnMiOmNhc2UiZm9ybWF0c2V0dGluZ3MiOmNhc2UiZmll''@;'; put 'put ''bGR0eXBlIjpjYXNlImRlbGltaXRlcnMiOmNhc2UidGFiIjpjYXNlImNvbW1hIjpjYXNlImF1dG9mb3JtYXRuYW1lIjpjYXNlInZlcnNpb25sYXN0ZWRpdCI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6c3dp''@;'; put 'put ''dGNoKHZlWzNdKXtjYXNlInJhbmdlIjpvaS5yZWY9dmU7YnJlYWs7Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJl''@;'; put 'put ''cnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZh''@;'; put 'put ''bHVlMiI6Y2FzZSJmb3JtYXQiOmNhc2UiY2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlInNvcnRpbmciOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2godmVbM10pe2Nhc2UicmFuZ2UiOmNhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4Ijpj''@;'; put 'put ''YXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiY2VsbHJhbmdlbGlzdCI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNh''@;'; put 'put ''c2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJt''@;'; put 'put ''YXBpbmZvIjpjYXNlInNjaGVtYSI6Y2FzZSJkYXRhIjpzd2l0Y2godmVbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxkIjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBl''@;'; put 'put ''IjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJpYnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlInNt''@;'; put 'put ''YXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1pZih5c3x8dmVbM10ubWF0Y2goLyFcW0NEQVRBLykpYnJlYWs7aWYoIVNlW1NlLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3ZlWzNdKyJ8IitTZS5qb2luKCJ8Iik7aWYoImN1c3RvbWRvY3VtZW50cHJvcGVydGll''@;'; put 'put ''cyI9PT1TZVtTZS5sZW5ndGgtMV1bMF0pe2lmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09dmVbMV0/UmUodHIsX28sTnIsUS5zbGljZShabix2ZS5pbmRleCkpOihOcj12ZSxabj12ZS5pbmRleCt2ZVswXS5sZW5ndGgpO2JyZWFrfWlmKEwuV1RGKXRocm93IlVucmVjb2du''@;'; put 'put ''aXplZCB0YWc6ICIrdmVbM10rInwiK1NlLmpvaW4oInwiKX12YXIgZ2w9e307cmV0dXJuIUwuYm9va1NoZWV0cyYmIUwuYm9va1Byb3BzJiYoZ2wuU2hlZXRzPVZlKSxnbC5TaGVldE5hbWVzPUdlLGdsLldvcmtib29rPUJyLGdsLlNTRj13LmdldF90YWJsZSgpLGdsLlByb3BzPWVyLGdsLkN1''@;'; put 'put ''c3Rwcm9wcz10cixnbC5TaGVldHMmJmdsLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihudSl7dmFyIHRsPWdsLlNoZWV0c1tudV07dGxbIiFtZXJnZXMiXSYmdGxbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKEt0KXsic3RyaW5nIj09dHlwZW9mIEt0JiYoS3Q9TS51dGlscy5kZWNv''@;'; put 'put ''ZGVfcmFuZ2UoS3QpKTt2YXIgZ249TS51dGlscy5lbmNvZGVfY2VsbChLdC5zKSxSbj1BcnJheS5pc0FycmF5KHRsKT8odGxbS3Qucy5yXXx8W10pW0t0LnMuY106dGxbZ25dO1JuJiZSbi5zJiYobnVsbCE9Um4ucy50b3AmJnFvLnNoZWV0X3NldF9yYW5nZV9zdHlsZSh0bCxLdCx7dG9wOlJu''@;'; put 'put ''LnMudG9wfSksbnVsbCE9Um4ucy5ib3R0b20mJnFvLnNoZWV0X3NldF9yYW5nZV9zdHlsZSh0bCxLdCx7Ym90dG9tOlJuLnMuYm90dG9tfSksbnVsbCE9Um4ucy5sZWZ0JiZxby5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUodGwsS3Qse2xlZnQ6Um4ucy5sZWZ0fSksbnVsbCE9Um4ucy5yaWdodCYm''@;'; put 'put ''cW8uc2hlZXRfc2V0X3JhbmdlX3N0eWxlKHRsLEt0LHtyaWdodDpSbi5zLnJpZ2h0fSkpfSl9KSxnbH1mdW5jdGlvbiBqYSh5LFApe3N3aXRjaChQNihQPVB8fHt9KSxQLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJhc2U2NCI6cmV0dXJuIFlyKHNlLmRlY29kZSh5KSxQKTtjYXNlImJpbmFyeSI6''@;'; put 'put ''Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6cmV0dXJuIFlyKHksUCk7Y2FzZSJhcnJheSI6cmV0dXJuIFlyKE4oeSksUCl9fWZ1bmN0aW9uIFZuKHkpe3JldHVybiBTcigiTmFtZWRSYW5nZSIsbnVsbCx7InNzOk5hbWUiOnkuTmFtZSwic3M6UmVmZXJzVG8iOiI9IitxOSh5LlJlZix7cjowLGM6''@;'; put 'put ''MH0pfSl9ZnVuY3Rpb24gcE0oeSxQLEwsUSxyZSxwZSxfZSl7aWYoIXl8fG51bGw9PXkudiYmbnVsbD09eS5mJiYhUS5zaGVldFN0dWJzKXJldHVybiIiO3ZhciB2ZT17fTtpZih5LmYmJih2ZVsic3M6Rm9ybXVsYSJdPSI9IitGcihxOSh5LmYsX2UpKSkseS5GJiZ5LkYuc2xpY2UoMCxQLmxl''@;'; put 'put ''bmd0aCk9PVApe3ZhciBTZT1zcyh5LkYuc2xpY2UoUC5sZW5ndGgrMSkpO3ZlWyJzczpBcnJheVJhbmdlIl09IlJDOlIiKyhTZS5yPT1fZS5yPyIiOiJbIisoU2Uuci1fZS5yKSsiXSIpKyJDIisoU2UuYz09X2UuYz8iIjoiWyIrKFNlLmMtX2UuYykrIl0iKX1pZih5LmwmJnkubC5UYXJnZXQm''@;'; put 'put ''Jih2ZVsic3M6SFJlZiJdPUZyKHkubC5UYXJnZXQpLHkubC5Ub29sdGlwJiYodmVbIng6SFJlZlNjcmVlblRpcCJdPUZyKHkubC5Ub29sdGlwKSkpLExbIiFtZXJnZXMiXSlmb3IodmFyIEhlPUxbIiFtZXJnZXMiXSxWZT0wO1ZlIT1IZS5sZW5ndGg7KytWZSlIZVtWZV0ucy5jIT1fZS5jfHxI''@;'; put 'put ''ZVtWZV0ucy5yIT1fZS5yfHwoSGVbVmVdLmUuYz5IZVtWZV0ucy5jJiYodmVbInNzOk1lcmdlQWNyb3NzIl09SGVbVmVdLmUuYy1IZVtWZV0ucy5jKSxIZVtWZV0uZS5yPkhlW1ZlXS5zLnImJih2ZVsic3M6TWVyZ2VEb3duIl09SGVbVmVdLmUuci1IZVtWZV0ucy5yKSk7dmFyIEdlPSIiLG50''@;'; put 'put ''PSIiO3N3aXRjaCh5LnQpe2Nhc2UieiI6aWYoIVEuc2hlZXRTdHVicylyZXR1cm4iIjticmVhaztjYXNlIm4iOkdlPSJOdW1iZXIiLG50PVN0cmluZyh5LnYpO2JyZWFrO2Nhc2UiYiI6R2U9IkJvb2xlYW4iLG50PXkudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZSI6R2U9IkVycm9yIixudD1Rb1t5''@;'; put 'put ''LnZdO2JyZWFrO2Nhc2UiZCI6R2U9IkRhdGVUaW1lIixudD1uZXcgRGF0ZSh5LnYpLnRvSVNPU3RyaW5nKCksbnVsbD09eS56JiYoeS56PXkuenx8dy5fdGFibGVbMTRdKTticmVhaztjYXNlInMiOkdlPSJTdHJpbmciLG50PWlvKHkudnx8IiIpfXZhciBkdD1ndShRLmNlbGxYZnMsbnVsbCx5''@;'; put 'put ''LFEpO3ZlWyJzczpTdHlsZUlEIl09InMiKygyMStkdCksdmVbInNzOkluZGV4Il09X2UuYysxO3ZhciBDdD1udWxsIT15LnY/bnQ6IiIsY3Q9InoiPT15LnQ/IiI6eS5SP2Z1bmN0aW9uIFhMKHkpe3JldHVybic8c3M6RGF0YSBzczpUeXBlPSJTdHJpbmciIHhtbG5zPSJodHRwOi8vd3d3Lncz''@;'; put 'put ''Lm9yZy9UUi9SRUMtaHRtbDQwIj4nK3kubWFwKGZ1bmN0aW9uKEwpe3ZhciBRPWlvKEwudik7cmV0dXJuIEwucyYmKEwucy5ib2xkJiYoUT0iPEI+IitRKyI8L0I+IiksTC5zLml0YWxpYyYmKFE9IjxJPiIrUSsiPC9JPiIpLEwucy5zdHJpa2UmJihRPSI8Uz4iK1ErIjwvUz4iKSxMLnMudW5k''@;'; put 'put ''ZXJsaW5lJiYoUT0iPFU+IitRKyI8L1U+IiksInN1cGVyIj09TC5zLnZhbGlnbiYmKFE9IjxTdXA+IitRKyI8L1N1cD4iKSwic3ViIj09TC5zLnZhbGlnbiYmKFE9IjxTdWI+IitRKyI8L1N1Yj4iKSwoTC5zLm5hbWV8fEwucy5zenx8TC5zLmNvbG9yJiZudWxsIT1MLnMuY29sb3IucmdiKSYm''@;'; put 'put ''KFE9WyI8Rm9udCIsTC5zLm5hbWU/JyBodG1sOkZhY2U9IicrTC5zLm5hbWUrJyInOiIiLEwucy5zej8nIGh0bWw6U2l6ZT0iJytMLnMuc3orJyInOiIiLEwucy5jb2xvcj8nIGh0bWw6Q29sb3I9IiMnKygiMDAwMDAwIisoIm51bWJlciI9PXR5cGVvZiBMLnMuY29sb3IucmdiP0wucy5jb2xv''@;'; put 'put ''ci5yZ2IudG9TdHJpbmcoMTYpOkwucy5jb2xvci5yZ2IpKS5zbGljZSgtNikrJyInOiIiLCI+IixRLCI8L0ZvbnQ+Il0uam9pbigiIikpKSxRfSkuam9pbigiIikrIjwvRGF0YT4ifSh5LlIpOic8RGF0YSBzczpUeXBlPSInK0dlKyciPicrQ3QrIjwvRGF0YT4iO3JldHVybih5LmN8fFtdKS5s''@;'; put 'put ''ZW5ndGg+MCYmKGN0Kz1mdW5jdGlvbiBRdih5KXtyZXR1cm4geS5tYXAoZnVuY3Rpb24oUCl7dmFyIFE9U3IoInNzOkRhdGEiLGhvKFAudHx8IiIpLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9KTtyZXR1cm4gU3IoIkNvbW1lbnQiLFEseyJzczpBdXRob3IiOlAu''@;'; put 'put ''YX0pfSkuam9pbigiIil9KHkuYykpLFNyKCJDZWxsIixjdCx2ZSl9ZnVuY3Rpb24gZ00oeSxQKXt2YXIgTD0nPFJvdyBzczpJbmRleD0iJysoeSsxKSsnIic7cmV0dXJuIFAmJihQLmhweCYmIVAuaHB0JiYoUC5ocHQ9ajIoUC5ocHgpKSxQLmhwdCYmKEwrPScgc3M6QXV0b0ZpdEhlaWdodD0i''@;'; put 'put ''MCIgc3M6SGVpZ2h0PSInK1AuaHB0KyciJyksUC5oaWRkZW4mJihMKz0nIHNzOkhpZGRlbj0iMSInKSksTCsiPiJ9ZnVuY3Rpb24gamUoeSxQLEwpe3ZhciBRPVtdLHBlPUwuU2hlZXRzW0wuU2hlZXROYW1lc1t5XV0sX2U9cGU/ZnVuY3Rpb24gZk0oeSxQLEwsUSl7aWYoIXl8fCEoKFF8fHt9''@;'; put 'put ''KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgcmU9US5Xb3JrYm9vay5OYW1lcyxwZT1bXSxfZT0wO19lPHJlLmxlbmd0aDsrK19lKXt2YXIgdmU9cmVbX2VdO3ZlLlNoZWV0PT1MJiYodmUuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8cGUucHVzaChWbih2ZSkpKX1yZXR1''@;'; put 'put ''cm4gcGUuam9pbigiIil9KHBlLDAseSxMKToiIjtyZXR1cm4gX2UubGVuZ3RoPjAmJlEucHVzaCgiPE5hbWVzPiIrX2UrIjwvTmFtZXM+IiksX2U9cGU/ZnVuY3Rpb24gbU0oeSxQLEwsUSl7aWYoIXlbIiFyZWYiXSlyZXR1cm4iIjt2YXIgcmU9T2koeVsiIXJlZiJdKSxwZT15WyIhbWVyZ2Vz''@;'; put 'put ''Il18fFtdLF9lPTAsdmU9W107eVsiIWNvbHMiXSYmeVsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKGJ0LEZ0KXtwdShidCk7dmFyIEV0PSEhYnQud2lkdGgsVHQ9WWQoRnQsYnQpLFp0PXsic3M6SW5kZXgiOkZ0KzF9O0V0JiYoWnRbInNzOldpZHRoIl09TWMoVHQud2lkdGgpKSxidC5oaWRk''@;'; put 'put ''ZW4mJihadFsic3M6SGlkZGVuIl09IjEiKSx2ZS5wdXNoKFNyKCJDb2x1bW4iLG51bGwsWnQpKX0pO2Zvcih2YXIgU2U9QXJyYXkuaXNBcnJheSh5KSxIZT1yZS5zLnI7SGU8PXJlLmUucjsrK0hlKXtmb3IodmFyIFZlPVtnTShIZSwoeVsiIXJvd3MiXXx8W10pW0hlXSldLEdlPXJlLnMuYztH''@;'; put 'put ''ZTw9cmUuZS5jOysrR2Upe3ZhciBudD0hMTtmb3IoX2U9MDtfZSE9cGUubGVuZ3RoOysrX2UpaWYoIShwZVtfZV0ucy5jPkdlfHxwZVtfZV0ucy5yPkhlfHxwZVtfZV0uZS5jPEdlfHxwZVtfZV0uZS5yPEhlKSl7KHBlW19lXS5zLmMhPUdlfHxwZVtfZV0ucy5yIT1IZSkmJihudD0hMCk7YnJl''@;'; put 'put ''YWt9aWYoIW50KXt2YXIgZHQ9e3I6SGUsYzpHZX0sQ3Q9ZGkoZHQpO1ZlLnB1c2gocE0oU2U/KHlbSGVdfHxbXSlbR2VdOnlbQ3RdLEN0LHksUCwwLDAsZHQpKX19VmUucHVzaCgiPC9Sb3c+IiksVmUubGVuZ3RoPjImJnZlLnB1c2goVmUuam9pbigiIikpfXJldHVybiB2ZS5qb2luKCIiKX0o''@;'; put 'put ''cGUsUCk6IiIsX2UubGVuZ3RoPjAmJlEucHVzaCgiPFRhYmxlPiIrX2UrIjwvVGFibGU+IiksUS5wdXNoKGZ1bmN0aW9uIHh0KHksUCxMLFEpe2lmKCF5KXJldHVybiIiO3ZhciByZT1bXTtpZih5WyIhbWFyZ2lucyJdJiYocmUucHVzaCgiPFBhZ2VTZXR1cD4iKSx5WyIhbWFyZ2lucyJdLmhl''@;'; put 'put ''YWRlciYmcmUucHVzaChTcigiSGVhZGVyIixudWxsLHsieDpNYXJnaW4iOnlbIiFtYXJnaW5zIl0uaGVhZGVyfSkpLHlbIiFtYXJnaW5zIl0uZm9vdGVyJiZyZS5wdXNoKFNyKCJGb290ZXIiLG51bGwseyJ4Ok1hcmdpbiI6eVsiIW1hcmdpbnMiXS5mb290ZXJ9KSkscmUucHVzaChTcigiUGFn''@;'; put 'put ''ZU1hcmdpbnMiLG51bGwseyJ4OkJvdHRvbSI6eVsiIW1hcmdpbnMiXS5ib3R0b218fCIwLjc1IiwieDpMZWZ0Ijp5WyIhbWFyZ2lucyJdLmxlZnR8fCIwLjciLCJ4OlJpZ2h0Ijp5WyIhbWFyZ2lucyJdLnJpZ2h0fHwiMC43IiwieDpUb3AiOnlbIiFtYXJnaW5zIl0udG9wfHwiMC43NSJ9KSks''@;'; put 'put ''cmUucHVzaCgiPC9QYWdlU2V0dXA+IikpLFEmJlEuV29ya2Jvb2smJlEuV29ya2Jvb2suU2hlZXRzJiZRLldvcmtib29rLlNoZWV0c1tMXSlpZihRLldvcmtib29rLlNoZWV0c1tMXS5IaWRkZW4pcmUucHVzaChTcigiVmlzaWJsZSIsMT09US5Xb3JrYm9vay5TaGVldHNbTF0uSGlkZGVuPyJT''@;'; put 'put ''aGVldEhpZGRlbiI6IlNoZWV0VmVyeUhpZGRlbiIse30pKTtlbHNle2Zvcih2YXIgcGU9MDtwZTxMJiYoIVEuV29ya2Jvb2suU2hlZXRzW3BlXXx8US5Xb3JrYm9vay5TaGVldHNbcGVdLkhpZGRlbik7KytwZSk7cGU9PUwmJnJlLnB1c2goIjxTZWxlY3RlZC8+Iil9aWYoKCgoKFF8fHt9KS5X''@;'; put 'put ''b3JrYm9va3x8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJnJlLnB1c2goIjxEaXNwbGF5UmlnaHRUb0xlZnQvPiIpLGhuKHlbIiFncmlkbGluZXMiXSkmJnJlLnB1c2goIjxEb05vdERpc3BsYXlHcmlkbGluZXMvPiIpLHlbIiFmcmVlemUiXSl7cmUucHVzaCgiPEZyZWV6ZVBhbmVzLz4i''@;'; put 'put ''KSxyZS5wdXNoKCI8RnJvemVuTm9TcGxpdC8+Iik7dmFyIF9lPXNzKHlbIiFmcmVlemUiXSk7X2Uucj4wJiYocmUucHVzaChmcygiU3BsaXRIb3Jpem9udGFsIiwiIitfZS5yKSkscmUucHVzaChmcygiVG9wUm93Qm90dG9tUGFuZSIsIiIrX2UucikpKSxfZS5jPjAmJihyZS5wdXNoKGZzKCJT''@;'; put 'put ''cGxpdFZlcnRpY2FsIiwiIitfZS5jKSkscmUucHVzaChmcygiTGVmdENvbHVtblJpZ2h0UGFuZSIsIiIrX2UuYykpKX1yZXR1cm4geVsiIXByb3RlY3QiXSYmKHJlLnB1c2goZnMoIlByb3RlY3RDb250ZW50cyIsIlRydWUiKSkseVsiIXByb3RlY3QiXS5vYmplY3RzJiZyZS5wdXNoKGZzKCJQ''@;'; put 'put ''cm90ZWN0T2JqZWN0cyIsIlRydWUiKSkseVsiIXByb3RlY3QiXS5zY2VuYXJpb3MmJnJlLnB1c2goZnMoIlByb3RlY3RTY2VuYXJpb3MiLCJUcnVlIikpLG51bGw9PXlbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHN8fHlbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHM/bnVsbCE9''@;'; put 'put ''eVsiIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiYheVsiIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiZyZS5wdXNoKGZzKCJFbmFibGVTZWxlY3Rpb24iLCJVbmxvY2tlZENlbGxzIikpOnJlLnB1c2goZnMoIkVuYWJsZVNlbGVjdGlvbiIsIk5vU2VsZWN0aW9uIikpLFtb''@;'; put 'put ''ImZvcm1hdENlbGxzIiwiQWxsb3dGb3JtYXRDZWxscyJdLFsiZm9ybWF0Q29sdW1ucyIsIkFsbG93U2l6ZUNvbHMiXSxbImZvcm1hdFJvd3MiLCJBbGxvd1NpemVSb3dzIl0sWyJpbnNlcnRDb2x1bW5zIiwiQWxsb3dJbnNlcnRDb2xzIl0sWyJpbnNlcnRSb3dzIiwiQWxsb3dJbnNlcnRSb3dz''@;'; put 'put ''Il0sWyJpbnNlcnRIeXBlcmxpbmtzIiwiQWxsb3dJbnNlcnRIeXBlcmxpbmtzIl0sWyJkZWxldGVDb2x1bW5zIiwiQWxsb3dEZWxldGVDb2xzIl0sWyJkZWxldGVSb3dzIiwiQWxsb3dEZWxldGVSb3dzIl0sWyJzb3J0IiwiQWxsb3dTb3J0Il0sWyJhdXRvRmlsdGVyIiwiQWxsb3dGaWx0ZXIi''@;'; put 'put ''XSxbInBpdm90VGFibGVzIiwiQWxsb3dVc2VQaXZvdFRhYmxlcyJdXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt5WyIhcHJvdGVjdCJdW3ZlWzBdXSYmcmUucHVzaCgiPCIrdmVbMV0rIi8+Iil9KSksMD09cmUubGVuZ3RoPyIiOlNyKCJXb3Jrc2hlZXRPcHRpb25zIixyZS5qb2luKCIiKSx7eG1s''@;'; put 'put ''bnM6V2kueH0pfShwZSwwLHksTCkpLFEuam9pbigiIil9ZnVuY3Rpb24gSkwoeSxQKXtQfHwoUD17fSkseS5TU0Z8fCh5LlNTRj13LmdldF90YWJsZSgpKSx5LlNTRiYmKEoodyksdy5sb2FkX3RhYmxlKHkuU1NGKSxQLnJldnNzZj1BZSh5LlNTRiksUC5yZXZzc2ZbeS5TU0ZbNjU1MzVdXT0w''@;'; put 'put ''LFAuc3NmPXkuU1NGLHkuU3R5bGVzPXtGb250czpQLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlAuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToi''@;'; put 'put ''Z3JheTEyNSJ9XSxCb3JkZXJzOlAuQm9yZGVycz1be31dfSxQLmNlbGxYZnM9W10sUC5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sZ3UoUC5jZWxsWGZzLG51bGwse30se3JldnNzZjp7R2VuZXJhbDowfX0pKTt2YXIgTD1bXTtMLnB1c2goZnVuY3Rpb24gaE0oeSxQKXt2YXIgTD1b''@;'; put 'put ''XTtyZXR1cm4geS5Qcm9wcyYmTC5wdXNoKGZ1bmN0aW9uIHJjKHksUCl7dmFyIEw9W107cmV0dXJuIGx0KEYyKS5tYXAoZnVuY3Rpb24oUSl7Zm9yKHZhciByZT0wO3JlPE9sLmxlbmd0aDsrK3JlKWlmKE9sW3JlXVsxXT09USlyZXR1cm4gT2xbcmVdO2ZvcihyZT0wO3JlPFIxLmxlbmd0aDsr''@;'; put 'put ''K3JlKWlmKFIxW3JlXVsxXT09USlyZXR1cm4gUjFbcmVdO3Rocm93IFF9KS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKG51bGwhPXlbUVsxXV0pe3ZhciByZT1QJiZQLlByb3BzJiZudWxsIT1QLlByb3BzW1FbMV1dP1AuUHJvcHNbUVsxXV06eVtRWzFdXTsiZGF0ZSI9PT1RWzJdJiYocmU9bmV3''@;'; put 'put ''IERhdGUocmUpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiWiIpKSwibnVtYmVyIj09dHlwZW9mIHJlP3JlPVN0cmluZyhyZSk6ITA9PT1yZXx8ITE9PT1yZT9yZT1yZT8iMSI6IjAiOnJlIGluc3RhbmNlb2YgRGF0ZSYmKHJlPW5ldyBEYXRlKHJlKS50b0lTT1N0cmluZygpLnJl''@;'; put 'put ''cGxhY2UoL1wuXGQqWi8sIiIpKSxMLnB1c2goZnMoRjJbUVsxXV18fFFbMV0scmUpKX19KSxTcigiRG9jdW1lbnRQcm9wZXJ0aWVzIixMLmpvaW4oIiIpLHt4bWxuczpXaS5vfSl9KHkuUHJvcHMsUCkpLHkuQ3VzdHByb3BzJiZMLnB1c2goZnVuY3Rpb24gQXcoeSxQKXt2YXIgTD1bIldvcmtz''@;'; put 'put ''aGVldHMiLCJTaGVldE5hbWVzIl0sUT0iQ3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzIixyZT1bXTtyZXR1cm4geSYmbHQoeSkuZm9yRWFjaChmdW5jdGlvbihwZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHkscGUpKXtmb3IodmFyIF9lPTA7X2U8T2wubGVuZ3Ro''@;'; put 'put ''OysrX2UpaWYocGU9PU9sW19lXVsxXSlyZXR1cm47Zm9yKF9lPTA7X2U8UjEubGVuZ3RoOysrX2UpaWYocGU9PVIxW19lXVsxXSlyZXR1cm47Zm9yKF9lPTA7X2U8TC5sZW5ndGg7KytfZSlpZihwZT09TFtfZV0pcmV0dXJuO3ZhciB2ZT15W3BlXSxTZT0ic3RyaW5nIjsibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIHZlPyhTZT0iZmxvYXQiLHZlPVN0cmluZyh2ZSkpOiEwPT09dmV8fCExPT09dmU/KFNlPSJib29sZWFuIix2ZT12ZT8iMSI6IjAiKTp2ZT1TdHJpbmcodmUpLHJlLnB1c2goU3IoSmkocGUpLHZlLHsiZHQ6ZHQiOlNlfSkpfX0pLFAmJmx0KFApLmZvckVhY2goZnVuY3Rpb24ocGUpe2lm''@;'; put 'put ''KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLHBlKSYmKCF5fHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHkscGUpKSl7dmFyIF9lPVBbcGVdLHZlPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgX2U/KHZlPSJmbG9hdCIsX2U9U3RyaW5nKF9l''@;'; put 'put ''KSk6ITA9PT1fZXx8ITE9PT1fZT8odmU9ImJvb2xlYW4iLF9lPV9lPyIxIjoiMCIpOl9lIGluc3RhbmNlb2YgRGF0ZT8odmU9ImRhdGVUaW1lLnR6IixfZT1fZS50b0lTT1N0cmluZygpKTpfZT1TdHJpbmcoX2UpLHJlLnB1c2goU3IoSmkocGUpLF9lLHsiZHQ6ZHQiOnZlfSkpfX0pLCI8IitR''@;'; put 'put ''KycgeG1sbnM9IicrV2kubysnIj4nK3JlLmpvaW4oIiIpKyI8LyIrUSsiPiJ9KHkuUHJvcHMseS5DdXN0cHJvcHMpKSxMLmpvaW4oIiIpfSh5LFApKSxMLnB1c2goIiIpLEwucHVzaCgiIiksTC5wdXNoKCIiKTtmb3IodmFyIFE9MDtRPHkuU2hlZXROYW1lcy5sZW5ndGg7KytRKUwucHVzaChT''@;'; put 'put ''cigiV29ya3NoZWV0IixqZShRLFAseSkseyJzczpOYW1lIjpGcih5LlNoZWV0TmFtZXNbUV0pfSkpO3JldHVybiBMWzJdPWZ1bmN0aW9uIEtMKHksUCl7dmFyIFE9W1snPFN0eWxlIHNzOklEPSJEZWZhdWx0IiBzczpOYW1lPSJOb3JtYWwiPicsJzxBbGlnbm1lbnQgc3M6VmVydGljYWw9IkJv''@;'; put 'put ''dHRvbSIvPicsIjxCb3JkZXJzLz4iLCc8Rm9udCBzczpGb250TmFtZT0iQ2FsaWJyaSIgeDpGYW1pbHk9IlN3aXNzIiBzczpTaXplPSIxMiIgc3M6Q29sb3I9IiMwMDAwMDAiLz4nLCI8SW50ZXJpb3IvPiIsIjxOdW1iZXJGb3JtYXQvPiIsIjxQcm90ZWN0aW9uLz4iLCI8L1N0eWxlPiJdLmpv''@;'; put 'put ''aW4oIiIpXTtyZXR1cm4gUC5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24ocmUscGUpe3ZhciBfZT1bXTtpZihyZS5hbGlnbm1lbnQpe3ZhciB2ZT17fTtyZS5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJih2ZVsic3M6U2hyaW5rVG9GaXQiXT0iMSIpLHJlLmFsaWdubWVudC53cmFwVGV4dCYmKHZl''@;'; put 'put ''WyJzczpXcmFwVGV4dCJdPSIxIikscmUuYWxpZ25tZW50LnZlcnRpY2FsJiYodmVbInNzOlZlcnRpY2FsIl09d3QocmUuYWxpZ25tZW50LnZlcnRpY2FsKSkscmUuYWxpZ25tZW50Lmhvcml6b250YWwmJih2ZVsic3M6SG9yaXpvbnRhbCJdPXd0KHJlLmFsaWdubWVudC5ob3Jpem9udGFsKSks''@;'; put 'put ''cmUuYWxpZ25tZW50LmluZGVudCYmKHZlWyJzczpJbmRlbnQiXT1yZS5hbGlnbm1lbnQuaW5kZW50KSxyZS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uJiYodmVbInNzOlJvdGF0ZSJdPXJlLmFsaWdubWVudC50ZXh0Um90YXRpb24pLF9lLnB1c2goU3IoIkFsaWdubWVudCIsbnVsbCx2ZSkpfWU6''@;'; put 'put ''aWYobnVsbCE9cmUuZm9udElkKXt2YXIgU2U9UC5Gb250c1tyZS5mb250SWRdO2lmKCFTZSlicmVhayBlO3ZhciBIZT17InNzOkZvbnROYW1lIjoiQ2FsaWJyaSIsInNzOlNpemUiOiIxMiJ9LFZlPSExO1NlLmJvbGQmJihWZT0hMCxIZVsic3M6Qm9sZCJdPSIxIiksU2UuaXRhbGljJiYoVmU9''@;'; put 'put ''ITAsSGVbInNzOkl0YWxpYyJdPSIxIiksU2Uuc3RyaWtlJiYoVmU9ITAsSGVbInNzOlN0cmlrZVRocm91Z2giXT0iMSIpLG51bGwhPVNlLnVuZGVybGluZSYmKFZlPSEwLEhlWyJzczpVbmRlcmxpbmUiXT1jTVtTZS51bmRlcmxpbmVdfHwoU2UudW5kZXJsaW5lPyJTaW5nbGUiOiJOb25lIikp''@;'; put 'put ''LG51bGwhPVNlLnN6JiYoVmU9ITAsSGVbInNzOlNpemUiXT1TZS5zeiksbnVsbCE9U2UubmFtZSYmKFZlPSEwLEhlWyJzczpGb250TmFtZSJdPVNlLm5hbWUpLFNlLmNvbG9yJiZudWxsIT1TZS5jb2xvci5yZ2ImJihWZT0hMCxIZVsic3M6Q29sb3IiXT0iIyIrKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''U2UuY29sb3IucmdiPyIwMDAwMDAiK1NlLmNvbG9yLnJnYi50b1N0cmluZygxNik6U2UuY29sb3IucmdiKS5zbGljZSgtNikpLFsic3ViIiwic3VwZXIiXS5pbmRleE9mKFNlLnZhbGlnbik+LTEmJihIZVsic3M6VmVydGljYWxBbGlnbiJdPXd0KFNlLnZhbGlnbikrInNjcmlwdCIpLFZlJiZf''@;'; put 'put ''ZS5wdXNoKFNyKCJGb250IixudWxsLEhlKSl9ZTppZihyZS5maWxsSWQ+MCl7dmFyIEdlPVAuRmlsbHNbcmUuZmlsbElkXTtpZighR2V8fCFHZS5mZ0NvbG9yfHxudWxsPT1HZS5mZ0NvbG9yLnJnYilicmVhayBlO19lLnB1c2goU3IoIkludGVyaW9yIixudWxsLHsic3M6UGF0dGVybiI6X0Rb''@;'; put 'put ''R2UucGF0dGVyblR5cGVdfHwiU29saWQiLCJzczpDb2xvciI6IiMiKygibnVtYmVyIj09dHlwZW9mIEdlLmZnQ29sb3IucmdiPyIwMCIrR2UuZmdDb2xvci5yZ2IudG9TdHJpbmcoMTYpOkdlLmZnQ29sb3IucmdiKS5zbGljZSgtNil9KSl9X2UucHVzaChTcigiTnVtYmVyRm9ybWF0IixudWxs''@;'; put 'put ''LHsic3M6Rm9ybWF0IjpGcih3Ll90YWJsZVtyZS5udW1GbXRJZF0pfSkpO3ZhciBudD17InNzOklEIjoicyIrKDIxK3BlKX07cmUuc3R5bGUmJihudFsic3M6TmFtZSJdPXJlLnN0eWxlKSxRLnB1c2goU3IoIlN0eWxlIixfZS5qb2luKCIiKSxudCkpfSksU3IoIlN0eWxlcyIsUS5qb2luKCIi''@;'; put 'put ''KSl9KDAsUCksTFszXT1mdW5jdGlvbiB2NSh5KXtpZighKCh5fHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIFA9eS5Xb3JrYm9vay5OYW1lcyxMPVtdLFE9MDtRPFAubGVuZ3RoOysrUSl7dmFyIHJlPVBbUV07bnVsbD09cmUuU2hlZXQmJihyZS5OYW1lLm1hdGNo''@;'; put 'put ''KC9eX3hsZm5cLi8pfHxMLnB1c2goVm4ocmUpKSl9cmV0dXJuIFNyKCJOYW1lcyIsTC5qb2luKCIiKSl9KHkpLEJuK1NyKCJXb3JrYm9vayIsTC5qb2luKCIiKSx7eG1sbnM6V2kuc3MsInhtbG5zOm8iOldpLm8sInhtbG5zOngiOldpLngsInhtbG5zOnNzIjpXaS5zcywieG1sbnM6ZHQiOldp''@;'; put 'put ''LmR0LCJ4bWxuczpodG1sIjpXaS5odG1sfSl9ZnVuY3Rpb24ga3IoeSxQLEwsUSl7dmFyIHJlPUwscGU9W10sX2U9UC5zbGljZShQLmwsUC5sK3JlKTtpZihRJiZRLmVuYyYmUS5lbmMuaW5zaXR1JiZfZS5sZW5ndGg+MClzd2l0Y2goeS5uKXtjYXNlIkJPRiI6Y2FzZSJGaWxlUGFzcyI6Y2Fz''@;'; put 'put ''ZSJGaWxlTG9jayI6Y2FzZSJJbnRlcmZhY2VIZHIiOmNhc2UiUlJESW5mbyI6Y2FzZSJSUkRIZWFkIjpjYXNlIlVzckV4Y2wiOmNhc2UiRU9GIjpRLmVuYy5pbnNpdHUodWUoe2xlbmd0aDpfZS5sZW5ndGh9KSwic2tpcCIpO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOlEuZW5jLmluc2l0dSh1''@;'; put 'put ''ZSh7bGVuZ3RoOjR9KSwic2tpcCIpLF9lPUJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKF9lLnNsaWNlKDAsNCkpLEJ1ZmZlci5mcm9tKFEuZW5jLmluc2l0dShfZS5zbGljZSg0KSkpXSk7YnJlYWs7ZGVmYXVsdDpfZT1RLmVuYy5pbnNpdHUoX2UpfUFycmF5LmlzQXJyYXkoUCkmJiFBcnJh''@;'; put 'put ''eS5pc0FycmF5KF9lKSYmKF9lPUFycmF5LmZyb20oX2UpKSxwZS5wdXNoKF9lKSxQLmwrPXJlO2Zvcih2YXIgdmU9WDBbWW4oUCxQLmwpXSxTZT0wO251bGwhPXZlJiYiQ29udGludWUiPT09dmUubi5zbGljZSgwLDgpOylyZT1ZbihQLFAubCsyKSxTZT1QLmwrNCxRJiZRLmVuYyYmUS5lbmMu''@;'; put 'put ''aW5zaXR1JiZRLmVuYy5pbnNpdHUodWUoe2xlbmd0aDo0fSksInNraXAiKSwiQ29udGludWVGcnQiPT12ZS5uP1NlKz00OiJDb250aW51ZUZydCI9PXZlLm4uc2xpY2UoMCwxMSkmJihTZSs9MTIsUSYmUS5lbmMmJlEuZW5jLmluc2l0dSYmUS5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6OH0pLCJz''@;'; put 'put ''a2lwIikpLF9lPVAuc2xpY2UoU2UsUC5sKzQrcmUpLFEmJlEuZW5jJiZRLmVuYy5pbnNpdHUmJl9lLmxlbmd0aD4wJiYoX2U9US5lbmMuaW5zaXR1KF9lKSkscGUucHVzaChfZSksUC5sKz00K3JlLHZlPVgwW1luKFAsUC5sKV07dmFyIEhlPVMocGUpO29sKEhlLDApO3ZhciBWZT0wO0hlLmxl''@;'; put 'put ''bnM9W107Zm9yKHZhciBHZT0wO0dlPHBlLmxlbmd0aDsrK0dlKUhlLmxlbnMucHVzaChWZSksVmUrPXBlW0dlXS5sZW5ndGg7aWYoSGUubGVuZ3RoPEwpdGhyb3ciWExTIFJlY29yZCAiKyh5JiZ5Lm58fCI/PyIpKyIgVHJ1bmNhdGVkOiAiK0hlLmxlbmd0aCsiIDwgIitMO3JldHVybiB5LmYo''@;'; put 'put ''SGUsSGUubGVuZ3RoLFEpfWZ1bmN0aW9uIHhjKHksUCxMKXtpZigieiIhPT15LnQmJnkuWEYpe3ZhciBRPTA7dHJ5e1E9eS56fHx5LlhGLm51bUZtdElkfHwwLFAuY2VsbE5GJiYoeS56PXcuX3RhYmxlW1FdKX1jYXRjaChwZSl7aWYoUC5XVEYpdGhyb3cgcGV9aWYoIVB8fCExIT09UC5jZWxs''@;'; put 'put ''VGV4dCl0cnl7eS53PSJlIj09PXkudD95Lnd8fFFvW3kudl06MD09PVF8fCJHZW5lcmFsIj09UT8ibiI9PT15LnQ/KDB8eS52KT09PXkudj93Ll9nZW5lcmFsX2ludCh5LnYpOncuX2dlbmVyYWxfbnVtKHkudik6dy5fZ2VuZXJhbCh5LnYpOncuZm9ybWF0KFEseS52LHtkYXRlMTkwNDohIUws''@;'; put 'put ''ZGF0ZU5GOlAmJlAuZGF0ZU5GfSl9Y2F0Y2gocGUpe2lmKFAuV1RGKXRocm93IHBlfWlmKFAuY2VsbERhdGVzJiZRJiYibiI9PXkudCYmdy5pc19kYXRlKHcuX3RhYmxlW1FdfHxTdHJpbmcoUSkpKXt2YXIgcmU9dy5wYXJzZV9kYXRlX2NvZGUoeS52KTtyZSYmKHkudD0iZCIseS52PW5ldyBE''@;'; put 'put ''YXRlKHJlLnkscmUubS0xLHJlLmQscmUuSCxyZS5NLHJlLlMscmUudSkpfX19ZnVuY3Rpb24gWDIoeSxQLEwpe3JldHVybnt2OnksaXhmZTpQLHQ6TH19dmFyIHZNPWZ1bmN0aW9uKHksUCxMKXtQWyIhb2JqZWN0cyJdPXl9LHJwPXtTSToiZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2Iz''@;'; put 'put ''ZDkiLERTSToiMDJkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUiLFVESToiMDVkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUifTtmdW5jdGlvbiBfNSh5LFApe3ZhciBMLFEscmUscGU7aWYoUHx8KFA9e30pLFA2KFApLFYoKSxQLmNvZGVwYWdlJiZrKFAuY29kZXBhZ2UpLHku''@;'; put 'put ''RnVsbFBhdGhzKXtpZihCZS5maW5kKHksIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO0w9QmUuZmluZCh5LCIhQ29tcE9iaiIpLFE9QmUuZmluZCh5LCIvV29ya2Jvb2siKXx8QmUuZmluZCh5LCIvQm9vayIpfWVsc2V7c3dpdGNo''@;'; put 'put ''KFAudHlwZSl7Y2FzZSJiYXNlNjQiOnk9RChzZS5kZWNvZGUoeSkpO2JyZWFrO2Nhc2UiYmluYXJ5Ijp5PUQoeSk7YnJlYWs7Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoeSl8fCh5PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHkpKX1vbCh5LDApLFE9''@;'; put 'put ''e2NvbnRlbnQ6eX19aWYoTCYmZnVuY3Rpb24gVGkoeSl7dmFyIFA9e30sTD15LmNvbnRlbnQ7aWYoTC5sPTI4LFAuQW5zaVVzZXJUeXBlPUwucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksUC5BbnNpQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIGc0KHkpe3JldHVybiBwNCh5LDEpfShMKSxM''@;'; put 'put ''Lmxlbmd0aC1MLmw8PTQpcmV0dXJuIFA7dmFyIFE9TC5yZWFkX3NoaWZ0KDQpO2lmKDA9PVF8fFE+NDB8fChMLmwtPTQsUC5SZXNlcnZlZDE9TC5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxMLmxlbmd0aC1MLmw8PTQpfHwxOTA3NTA1NjUyIT09KFE9TC5yZWFkX3NoaWZ0KDQpKXx8KFAu''@;'; put 'put ''VW5pY29kZUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBYNyh5KXtyZXR1cm4gcDQoeSwyKX0oTCksMD09KFE9TC5yZWFkX3NoaWZ0KDQpKXx8UT40MCkpcmV0dXJuIFA7TC5sLT00LFAuUmVzZXJ2ZWQyPUwucmVhZF9zaGlmdCgwLCJscHdzdHIiKX0oTCksUC5ib29rUHJvcHMmJiFQLmJvb2tT''@;'; put 'put ''aGVldHMpcmU9e307ZWxzZXt2YXIgX2U9aGU/ImJ1ZmZlciI6ImFycmF5IjtpZihRJiZRLmNvbnRlbnQpcmU9ZnVuY3Rpb24gX00oeSxQKXt2YXIgTD17b3B0czp7fX0sUT17fTtudWxsIT10ZSYmbnVsbD09UC5kZW5zZSYmKFAuZGVuc2U9dGUpO3ZhciBHZSxkdCxjdCxidCxUdCxadCxyZT1Q''@;'; put 'put ''LmRlbnNlP1tdOnt9LHBlPXt9LF9lPXt9LHZlPW51bGwsU2U9W10sSGU9IiIsVmU9e30sbnQ9IiIsRnQ9e30sRXQ9W10scG49W10sS249W10sdW49e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6W3t9XX0scW49e30sem49e0ZvbnRzOltdfSxBbj1mdW5jdGlvbihKcil7''@;'; put 'put ''cmV0dXJuIEpyPDg/Q3JbSnJdOkpyPDY0JiZLbltKci04XXx8Q3JbSnJdfSxlcj1mdW5jdGlvbihKcix3cyl7dmFyIG1sLHZzPUpyLlhGLmRhdGE7dnMmJih2cy5wYXR0ZXJuVHlwZXx8bnVsbCE9dnMuaWN2Rm9yZSkmJndzJiZ3cy5jZWxsU3R5bGVzJiYoSnIucz17fSxKci5zLnBhdHRlcm5U''@;'; put 'put ''eXBlPXZzLnBhdHRlcm5UeXBlLEpyLlhGLmZvbnQmJlV0KEpyLnMsSnIuWEYuZm9udCksdnMuZldyYXAmJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLndyYXBUZXh0PSEwKSx2cy5mU2hyaW5rVG9GaXQmJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17''@;'; put 'put ''fSkpLnNocmlua1RvRml0PSEwKSx2cy5oYWxpZ24mJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLmhvcml6b250YWw9dnMuaGFsaWduKSx2cy52YWxpZ24mJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLnZlcnRpY2FsPXZzLnZhbGlnbiksdnMu''@;'; put 'put ''Y0luZGVudCYmKChKci5zLmFsaWdubWVudHx8KEpyLnMuYWxpZ25tZW50PXt9KSkuaW5kZW50PXZzLmNJbmRlbnQpLDY0IT12cy5pY3ZGb3JlJiY2NSE9dnMuaWN2QmFjayYmKChtbD16MShBbih2cy5pY3ZGb3JlKSkpJiYoSnIucy5mZ0NvbG9yPXtyZ2I6bWx9KSwobWw9ejEoQW4odnMuaWN2''@;'; put 'put ''QmFjaykpKSYmKEpyLnMuYmdDb2xvcj17cmdiOm1sfSkpLFsiTGVmdCIsIlJpZ2h0IiwiVG9wIiwiQm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbihqbCl7dnNbImRnIitqbF0mJihKci5zW2psLnRvTG93ZXJDYXNlKCldPXtzdHlsZTpXMlt2c1siZGciK2psXV0sY29sb3I6e3JnYjp6MShBbih2''@;'; put 'put ''c1siaWN2IitqbF0pKX19KX0pKX0sdHI9ZnVuY3Rpb24oSnIsd3MsdnMpe2lmKCEoQ2k+MXx8dnMuc2hlZXRSb3dzJiZKci5yPj12cy5zaGVldFJvd3MpKXtpZih2cy5jZWxsU3R5bGVzJiZ3cy5YRiYmd3MuWEYuZGF0YSYmZXIod3MsdnMpLGRlbGV0ZSB3cy5peGZlLGRlbGV0ZSB3cy5YRixH''@;'; put 'put ''ZT1KcixudD1kaShKciksKCFfZXx8IV9lLnN8fCFfZS5lKSYmKF9lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0pLEpyLnI8X2Uucy5yJiYoX2Uucy5yPUpyLnIpLEpyLmM8X2Uucy5jJiYoX2Uucy5jPUpyLmMpLEpyLnIrMT5fZS5lLnImJihfZS5lLnI9SnIucisxKSxKci5jKzE+X2UuZS5j''@;'; put 'put ''JiYoX2UuZS5jPUpyLmMrMSksdnMuY2VsbEZvcm11bGEmJndzLmYpZm9yKHZhciBtbD0wO21sPEV0Lmxlbmd0aDsrK21sKWlmKCEoRXRbbWxdWzBdLnMuYz5Kci5jfHxFdFttbF1bMF0ucy5yPkpyLnJ8fEV0W21sXVswXS5lLmM8SnIuY3x8RXRbbWxdWzBdLmUucjxKci5yKSl7d3MuRj1PbyhF''@;'; put 'put ''dFttbF1bMF0pLChFdFttbF1bMF0ucy5jIT1Kci5jfHxFdFttbF1bMF0ucy5yIT1Kci5yKSYmZGVsZXRlIHdzLmYsd3MuZiYmKHdzLmY9IiIreGwoRXRbbWxdWzFdLF9lLEpyLFNuLFpuKSk7YnJlYWt9dnMuZGVuc2U/KHJlW0pyLnJdfHwocmVbSnIucl09W10pLHJlW0pyLnJdW0pyLmNdPXdz''@;'; put 'put ''KTpyZVtudF09d3N9fSxabj17ZW5jOiExLHNiY2NoOjAsc25hbWVzOltdLHNoYXJlZGY6RnQsYXJyYXlmOkV0LHJydGFiaWQ6W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIVAmJiEhUC5jZWxsU3R5bGVzLFdURjohIVAmJiEhUC53dGZ9''@;'; put 'put ''O1puLnBhc3N3b3JkPVAucGFzc3dvcmQ/UC5wYXNzd29yZDoiVmVsdmV0U3dlYXRzaG9wIjt2YXIgb2ksTnI9bnVsbCxraT1bXSxMaT1bXSxRcj1bXSx1cj1bXSxycj0hMSxTbj1bXTtTbi5TaGVldE5hbWVzPVpuLnNuYW1lcyxTbi5zaGFyZWRmPVpuLnNoYXJlZGYsU24uYXJyYXlmPVpuLmFy''@;'; put 'put ''cmF5ZixTbi5uYW1lcz1bXSxTbi5YVEk9W107dmFyIERpLHByPSIiLENpPTAsQnI9MCxqaT1bXSxfbz1bXTtabi5jb2RlcGFnZT0xMjAwLGooMTIwMCk7Zm9yKHZhciBZbz0hMTt5Lmw8eS5sZW5ndGgtMTspe3ZhciBsbz15LmwsQW89eS5yZWFkX3NoaWZ0KDIpO2lmKFpuJiZabi5lbmMmJlpu''@;'; put 'put ''LmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNpdHUodWUoWzAsMF0pLCJoZWFkZXItMCIpLDA9PT1BbyYmIkVPRiI9PT1wcilicmVhazt2YXIgeG89eS5sPT09eS5sZW5ndGg/MDp5LnJlYWRfc2hpZnQoMik7Wm4mJlpuLmVuYyYmWm4uZW5jLmluc2l0dSYmWm4uZW5jLmluc2l0dSh1ZShbMCwwXSks''@;'; put 'put ''Imxlbmd0aC0wIik7dmFyIGhpPVgwW0FvXTtpZihoaSYmaGkuZil7aWYoUC5ib29rU2hlZXRzJiYiQm91bmRTaGVldDgiPT09cHImJiJCb3VuZFNoZWV0OCIhPT1oaS5uKWJyZWFrO2lmKHByPWhpLm4sMj09PWhpLnJ8fDEyPT1oaS5yKXt2YXIgdGE9eS5yZWFkX3NoaWZ0KDIpO2lmKHhvLT0y''@;'; put 'put ''LFpuJiZabi5lbmMmJlpuLmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNpdHUodWUoWzAsMF0pKSwhWm4uZW5jJiZ0YSE9PUFvJiYoKDI1NSZ0YSk8PDh8dGE+PjgpIT09QW8pdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIit0YSsiIT0iK0FvKTsxMj09aGkuciYmKHkubCs9MTAseG8tPTEw''@;'; put 'put ''LFpuJiZabi5lbmMmJlpuLmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNpdHUodWUoWzAsMCwwLDAsMCwwLDAsMCwwLDBdKSkpfXZhciBNbj1rcihoaSx5LHhvLFpuKSxNcz1oaS5uO2lmKDA9PUNpJiYiQk9GIiE9TXMpY29udGludWU7c3dpdGNoKE1zKXtjYXNlIkRhdGUxOTA0IjpMLm9wdHMuRGF0''@;'; put 'put ''ZTE5MDQ9dW4uV0JQcm9wcy5kYXRlMTkwND1NbjticmVhaztjYXNlIldyaXRlUHJvdGVjdCI6TC5vcHRzLldyaXRlUHJvdGVjdD0hMDticmVhaztjYXNlIkZpbGVQYXNzIjppZihabi5lbmN8fCh5Lmw9MCxDaT0wKSxabi5lbmM9TW4sIVAucGFzc3dvcmQmJm51bGw9PU1uLnZhbGlkKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKTtpZihudWxsPT1Nbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gc2NoZW1lIHVuc3VwcG9ydGVkIik7aWYoIU1uLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJl''@;'; put 'put ''YWs7Y2FzZSJXcml0ZUFjY2VzcyI6Wm4ubGFzdHVzZXI9TW47YnJlYWs7Y2FzZSJGaWxlU2hhcmluZyI6Y2FzZSJUZW1wbGF0ZSI6Y2FzZSJCb29rQm9vbCI6Y2FzZSJVc2VzRUxGcyI6Y2FzZSJNVFJTZXR0aW5ncyI6Y2FzZSJVbmNhbGNlZCI6Y2FzZSJFeHRTU1QiOmNhc2UiQm9va0V4dCI6''@;'; put 'put ''Y2FzZSJSaWNoVGV4dFN0cmVhbSI6Y2FzZSJCa0hpbSI6Y2FzZSJJbmRleCI6Y2FzZSJQcm90NFJldiI6Y2FzZSJQcm90NFJldlBhc3MiOmJyZWFrO2Nhc2UiQ29kZVBhZ2UiOnZhciB5cz1OdW1iZXIoTW4pO3N3aXRjaCh5cyl7Y2FzZSAyMTAxMDp5cz0xMjAwO2JyZWFrO2Nhc2UgMzI3Njg6''@;'; put 'put ''eXM9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6eXM9MTI1Mn1qKFpuLmNvZGVwYWdlPXlzKSxZbz0hMDticmVhaztjYXNlIlJSVGFiSWQiOlpuLnJydGFiaWQ9TW47YnJlYWs7Y2FzZSJXaW5Qcm90ZWN0Ijpabi53aW5sb2NrZWQ9TW47YnJlYWs7Y2FzZSJSZWZyZXNoQWxsIjpjYXNlIkNhbGNDb3Vu''@;'; put 'put ''dCI6Y2FzZSJDYWxjRGVsdGEiOmNhc2UiQ2FsY0l0ZXIiOmNhc2UiQ2FsY01vZGUiOmNhc2UiQ2FsY1ByZWNpc2lvbiI6Y2FzZSJDYWxjU2F2ZVJlY2FsYyI6TC5vcHRzW01zXT1NbjticmVhaztjYXNlIkNhbGNSZWZNb2RlIjpabi5DYWxjUmVmTW9kZT1NbjticmVhaztjYXNlIkZvcmNlRnVs''@;'; put 'put ''bENhbGN1bGF0aW9uIjpMLm9wdHMuRnVsbENhbGM9TW47YnJlYWs7Y2FzZSJXc0Jvb2wiOk1uLmZEaWFsb2cmJihyZVsiIXR5cGUiXT0iZGlhbG9nIiksTW4uZkJlbG93fHwoKHJlWyIhb3V0bGluZSJdfHwocmVbIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksTW4uZlJpZ2h0fHwoKHJlWyIh''@;'; put 'put ''b3V0bGluZSJdfHwocmVbIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIlhGIjpNbi5mb250PXpuLkZvbnRzW01uLmlmbnQ8ND9Nbi5pZm50Ok1uLmlmbnQtMV0scG4ucHVzaChNbik7YnJlYWs7Y2FzZSJTdXBCb29rIjpTbi5wdXNoKFtNbl0pLFNuW1NuLmxlbmd0aC0xXS5Y''@;'; put 'put ''VEk9W107YnJlYWs7Y2FzZSJFeHRlcm5OYW1lIjpTbltTbi5sZW5ndGgtMV0ucHVzaChNbik7YnJlYWs7Y2FzZSJMYmwiOkRpPXtOYW1lOk1uLk5hbWUsUmVmOnhsKE1uLnJnY2UsX2UsbnVsbCxTbixabil9LE1uLml0YWI+MCYmKERpLlNoZWV0PU1uLml0YWItMSksU24ubmFtZXMucHVzaChE''@;'; put 'put ''aSksU25bMF18fChTblswXT1bXSxTblswXS5YVEk9W10pLFNuW1NuLmxlbmd0aC0xXS5wdXNoKE1uKSwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09TW4uTmFtZSYmTW4uaXRhYj4wJiZNbi5yZ2NlJiZNbi5yZ2NlWzBdJiZNbi5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09TW4ucmdjZVswXVsw''@;'; put 'put ''XVswXSYmKF9vW01uLml0YWItMV09e3JlZjpPbyhNbi5yZ2NlWzBdWzBdWzFdWzJdKX0pO2JyZWFrO2Nhc2UiRXh0ZXJuQ291bnQiOlpuLkV4dGVybkNvdW50PU1uO2JyZWFrO2Nhc2UiRXh0ZXJuU2hlZXQiOjA9PVNuLmxlbmd0aCYmKFNuWzBdPVtdLFNuWzBdLlhUST1bXSksU25bU24ubGVu''@;'; put 'put ''Z3RoLTFdLlhUST1TbltTbi5sZW5ndGgtMV0uWFRJLmNvbmNhdChNbiksU24uWFRJPVNuLlhUSS5jb25jYXQoTW4pO2JyZWFrO2Nhc2UiTmFtZUNtdCI6aWYoWm4uYmlmZjw4KWJyZWFrO251bGwhPURpJiYoRGkuQ29tbWVudD1NblsxXSk7YnJlYWs7Y2FzZSJQcm90ZWN0IjpyZVsiIXByb3Rl''@;'; put 'put ''Y3QiXT1NbjticmVhaztjYXNlIlBhc3N3b3JkIjowIT09TW4mJlpuLldURiYmY29uc29sZS5lcnJvcigiUGFzc3dvcmQgdmVyaWZpZXI6ICIrTW4pO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOnBlW01uLnBvc109TW4sWm4uc25hbWVzLnB1c2goTW4ubmFtZSk7YnJlYWs7Y2FzZSJFT0YiOmlm''@;'; put 'put ''KHJlWyIhZ3JpZGxpbmVzIl09IU5yfHxOci5ncmlkLE5yPW51bGwsLS1DaSlicmVhaztpZihfZS5lKXtpZihfZS5lLnI+MCYmX2UuZS5jPjApe2lmKF9lLmUuci0tLF9lLmUuYy0tLHJlWyIhcmVmIl09T28oX2UpLFAuc2hlZXRSb3dzJiZQLnNoZWV0Um93czw9X2UuZS5yKXt2YXIgRWw9X2Uu''@;'; put 'put ''ZS5yO19lLmUucj1QLnNoZWV0Um93cy0xLHJlWyIhZnVsbHJlZiJdPXJlWyIhcmVmIl0scmVbIiFyZWYiXT1PbyhfZSksX2UuZS5yPUVsfV9lLmUucisrLF9lLmUuYysrfWtpLmxlbmd0aD4wJiYocmVbIiFtZXJnZXMiXT1raSksTGkubGVuZ3RoPjAmJnZNKExpLHJlLHpuKSxRci5sZW5ndGg+''@;'; put 'put ''MCYmKHJlWyIhY29scyJdPVFyKSx1ci5sZW5ndGg+MCYmKHJlWyIhcm93cyJdPXVyKSx1bi5TaGVldHMucHVzaChxbil9IiI9PT1IZT9WZT1yZTpRW0hlXT1yZSxyZT1QLmRlbnNlP1tdOnt9O2JyZWFrO2Nhc2UiQk9GIjppZig4PT09Wm4uYmlmZiYmKFpuLmJpZmY9ezk6Miw1MjE6MywxMDMz''@;'; put 'put ''OjR9W0FvXXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W01uLkJJRkZWZXJdfHw4KSxabi5iaWZmZ3Vlc3M9MD09TW4uQklGRlZlciwwPT1Nbi5CSUZGVmVyJiY0MDk2PT1Nbi5kdCYmKFpuLmJpZmY9NSxZbz0hMCxqKFpuLmNvZGVwYWdlPTI4NTkxKSksOD09''@;'; put 'put ''Wm4uYmlmZiYmMD09TW4uQklGRlZlciYmMTY9PU1uLmR0JiYoWm4uYmlmZj0yKSxDaSsrKWJyZWFrO2lmKHJlPVAuZGVuc2U/W106e30sWm4uYmlmZjw4JiYhWW8mJihZbz0hMCxqKFpuLmNvZGVwYWdlPVAuY29kZXBhZ2V8fDEyNTIpKSxabi5iaWZmPDV8fDA9PU1uLkJJRkZWZXImJjQwOTY9''@;'; put 'put ''PU1uLmR0KXsiIj09PUhlJiYoSGU9IlNoZWV0MSIpLF9lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07dmFyIHNsPXtwb3M6eS5sLXhvLG5hbWU6SGV9O3BlW3NsLnBvc109c2wsWm4uc25hbWVzLnB1c2goSGUpfWVsc2UgSGU9KHBlW2xvXXx8e25hbWU6IiJ9KS5uYW1lOzMyPT1Nbi5kdCYm''@;'; put 'put ''KHJlWyIhdHlwZSJdPSJjaGFydCIpLDY0PT1Nbi5kdCYmKHJlWyIhdHlwZSJdPSJtYWNybyIpLGtpPVtdLExpPVtdLFpuLmFycmF5Zj1FdD1bXSxRcj1bXSx1cj1bXSxycj0hMSxxbj17SGlkZGVuOihwZVtsb118fHtoczowfSkuaHMsbmFtZTpIZX07YnJlYWs7Y2FzZSJOdW1iZXIiOmNhc2Ui''@;'; put 'put ''QklGRjJOVU0iOmNhc2UiQklGRjJJTlQiOiJjaGFydCI9PXJlWyIhdHlwZSJdJiYoUC5kZW5zZT8ocmVbTW4ucl18fFtdKVtNbi5jXTpyZVtkaSh7YzpNbi5jLHI6TW4ucn0pXSkmJisrTW4uYyxUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdfHx7fSx2Ok1uLnZhbCx0OiJuIn0sQnI+''@;'; put 'put ''MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLHhjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCk7YnJlYWs7Y2FzZSJCb29sRXJyIjpUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdLHY6TW4udmFsLHQ6TW4udH0sQnI+MCYmKFR0Lno9amlbVHQu''@;'; put 'put ''aXhmZT4+OCY2M10pLHhjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCk7YnJlYWs7Y2FzZSJSSyI6VHQ9e2l4ZmU6TW4uaXhmZSxYRjpwbltNbi5peGZlXSx2Ok1uLnJrbnVtLHQ6Im4ifSxCcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSkseGMoVHQs''@;'; put 'put ''UCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKTticmVhaztjYXNlIk11bFJrIjpmb3IodmFyIGdsPU1uLmM7Z2w8PU1uLkM7KytnbCl7dmFyIG51PU1uLnJrcmVjW2dsLU1uLmNdWzBdO1R0PXtpeGZlOm51LFhGOnBuW251XSx2Ok1uLnJrcmVjW2dsLU1uLmNdWzFd''@;'; put 'put ''LHQ6Im4ifSxCcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSkseGMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOmdsLHI6TW4ucn0sVHQsUCl9YnJlYWs7Y2FzZSJGb3JtdWxhIjppZigiU3RyaW5nIj09TW4udmFsKXt2ZT1NbjticmVha31pZigoVHQ9WDIoTW4udmFsLE1uLmNlbGwu''@;'; put 'put ''aXhmZSxNbi50dCkpLlhGPXBuW1R0Lml4ZmVdLFAuY2VsbEZvcm11bGEpe3ZhciB0bD1Nbi5mb3JtdWxhO2lmKHRsJiZ0bFswXSYmdGxbMF1bMF0mJiJQdGdFeHAiPT10bFswXVswXVswXSl7dmFyIEt0PXRsWzBdWzBdWzFdWzBdLGduPXRsWzBdWzBdWzFdWzFdLFJuPWRpKHtyOkt0LGM6Z259''@;'; put 'put ''KTtGdFtSbl0/VHQuZj0iIit4bChNbi5mb3JtdWxhLF9lLE1uLmNlbGwsU24sWm4pOlR0LkY9KChQLmRlbnNlPyhyZVtLdF18fFtdKVtnbl06cmVbUm5dKXx8e30pLkZ9ZWxzZSBUdC5mPSIiK3hsKE1uLmZvcm11bGEsX2UsTW4uY2VsbCxTbixabil9QnI+MCYmKFR0Lno9amlbVHQuaXhmZT4+''@;'; put 'put ''OCY2M10pLHhjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cihNbi5jZWxsLFR0LFApLHZlPU1uO2JyZWFrO2Nhc2UiU3RyaW5nIjppZighdmUpdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9ybXVsYSIpO3ZlLnZhbD1NbiwoVHQ9WDIoTW4sdmUuY2VsbC5peGZlLCJz''@;'; put 'put ''IikpLlhGPXBuW1R0Lml4ZmVdLFAuY2VsbEZvcm11bGEmJihUdC5mPSIiK3hsKHZlLmZvcm11bGEsX2UsdmUuY2VsbCxTbixabikpLEJyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSx4YyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIodmUuY2VsbCxUdCxQKSx2ZT1udWxsO2JyZWFrO2Nh''@;'; put 'put ''c2UiQXJyYXkiOkV0LnB1c2goTW4pO3ZhciBXcj1kaShNblswXS5zKTtpZihkdD1QLmRlbnNlPyhyZVtNblswXS5zLnJdfHxbXSlbTW5bMF0ucy5jXTpyZVtXcl0sUC5jZWxsRm9ybXVsYSYmZHQpe2lmKCF2ZXx8IVdyfHwhZHQpYnJlYWs7ZHQuZj0iIit4bChNblsxXSxfZSxNblswXSxTbixa''@;'; put 'put ''biksZHQuRj1PbyhNblswXSl9YnJlYWs7Y2FzZSJTaHJGbWxhIjppZighUC5jZWxsRm9ybXVsYSlicmVhaztpZihudCl7aWYoIXZlKWJyZWFrO0Z0W2RpKHZlLmNlbGwpXT1NblswXSwoKGR0PVAuZGVuc2U/KHJlW3ZlLmNlbGwucl18fFtdKVt2ZS5jZWxsLmNdOnJlW2RpKHZlLmNlbGwpXSl8''@;'; put 'put ''fHt9KS5mPSIiK3hsKE1uWzBdLF9lLEdlLFNuLFpuKX1icmVhaztjYXNlIkxhYmVsU3N0IjpUdD1YMihTZVtNbi5pc3N0XS50LE1uLml4ZmUsInMiKSxTZVtNbi5pc3N0XS5oJiYoVHQuaD1TZVtNbi5pc3N0XS5oKSxUdC5YRj1wbltUdC5peGZlXSxCcj4wJiYoVHQuej1qaVtUdC5peGZlPj44''@;'; put 'put ''JjYzXSkseGMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKSxTZVtNbi5pc3N0XS5SJiYoVHQuUj1TZVtNbi5pc3N0XS5SLm1hcChmdW5jdGlvbih6aSl7dmFyIEpyPW9uKHppKTtyZXR1cm4gemkucz09em4uRm9udHNbMF0mJihKci5zPVR0LnMpLEpyfSkp''@;'; put 'put ''O2JyZWFrO2Nhc2UiQmxhbmsiOlAuc2hlZXRTdHVicyYmKFR0PXtpeGZlOk1uLml4ZmUsWEY6cG5bTW4uaXhmZV0sdDoieiJ9LEJyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSx4YyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9LFR0LFApKTticmVhaztjYXNl''@;'; put 'put ''Ik11bEJsYW5rIjppZihQLnNoZWV0U3R1YnMpZm9yKHZhciBYbj1Nbi5jO1huPD1Nbi5DOysrWG4pe3ZhciBlaT1Nbi5peGZlW1huLU1uLmNdO1R0PXtpeGZlOmVpLFhGOnBuW2VpXSx0OiJ6In0sQnI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLHhjKFR0LFAsTC5vcHRzLkRhdGUxOTA0''@;'; put 'put ''KSx0cih7YzpYbixyOk1uLnJ9LFR0LFApfWJyZWFrO2Nhc2UiUlN0cmluZyI6Y2FzZSJMYWJlbCI6Y2FzZSJCSUZGMlNUUiI6KFR0PVgyKE1uLnZhbCxNbi5peGZlLCJzIikpLlhGPXBuW1R0Lml4ZmVdLEJyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSx4YyhUdCxQLEwub3B0cy5EYXRl''@;'; put 'put ''MTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9LFR0LFApO2JyZWFrO2Nhc2UiRGltZW5zaW9ucyI6MT09PUNpJiYoX2U9TW4pO2JyZWFrO2Nhc2UiU1NUIjooU2U9TW4pLmZvckVhY2goZnVuY3Rpb24oemkpe3ppLl9SPyh6aS5fUlswXSYmemkuX1JbMF0uaWR4PjAmJnppLl9SLnVuc2hpZnQoe2lk''@;'; put 'put ''eDowLGlmbnQ6MH0pLHppLlI9emkuX1IubWFwKGZ1bmN0aW9uKEpyLHdzKXtyZXR1cm57dDoicyIsdjp6aS50LnNsaWNlKEpyLmlkeCwoemkuX1Jbd3MrMV18fHt9KS5pZHgpLHM6em4uRm9udHNbSnIuaWZudDw0P0pyLmlmbnQ6SnIuaWZudC0xXX19KSxQLmNlbGxIVE1MJiYoemkuaD1FOSh6''@;'; put 'put ''aS5SKSkpOlAuY2VsbEhUTUwmJih6aS5oPXJvKHppLnQpKSxkZWxldGUgemkuX1J9KTticmVhaztjYXNlIkZvcm1hdCI6aWYoND09Wm4uYmlmZil7amlbQnIrK109TW5bMV07Zm9yKHZhciBpcj0wO2lyPEJyKzE2MyYmdy5fdGFibGVbaXJdIT1NblsxXTsrK2lyKTtpcj49MTYzJiZ3LmxvYWQo''@;'; put 'put ''TW5bMV0sQnIrMTYzKX1lbHNlIHcubG9hZChNblsxXSxNblswXSk7YnJlYWs7Y2FzZSJCSUZGMkZPUk1BVCI6amlbQnIrK109TW47Zm9yKHZhciByaT0wO3JpPEJyKzE2MyYmdy5fdGFibGVbcmldIT1NbjsrK3JpKTtyaT49MTYzJiZ3LmxvYWQoTW4sQnIrMTYzKTticmVhaztjYXNlIk1lcmdl''@;'; put 'put ''Q2VsbHMiOmtpPWtpLmNvbmNhdChNbik7YnJlYWs7Y2FzZSJPYmoiOkxpW01uLmNtb1swXV09Wm4ubGFzdG9iaj1NbjticmVhaztjYXNlIlR4TyI6Wm4ubGFzdG9iai5UeE89TW47YnJlYWs7Y2FzZSJJbURhdGEiOlpuLmxhc3RvYmouSW1EYXRhPU1uO2JyZWFrO2Nhc2UiSExpbmsiOmZvcihi''@;'; put 'put ''dD1NblswXS5zLnI7YnQ8PU1uWzBdLmUucjsrK2J0KWZvcihjdD1NblswXS5zLmM7Y3Q8PU1uWzBdLmUuYzsrK2N0KShkdD1QLmRlbnNlPyhyZVtidF18fFtdKVtjdF06cmVbZGkoe2M6Y3QscjpidH0pXSkmJihkdC5sPU1uWzFdKTticmVhaztjYXNlIkhMaW5rVG9vbHRpcCI6Zm9yKGJ0PU1u''@;'; put 'put ''WzBdLnMucjtidDw9TW5bMF0uZS5yOysrYnQpZm9yKGN0PU1uWzBdLnMuYztjdDw9TW5bMF0uZS5jOysrY3QpKGR0PVAuZGVuc2U/KHJlW2J0XXx8W10pW2N0XTpyZVtkaSh7YzpjdCxyOmJ0fSldKSYmZHQubCYmKGR0LmwuVG9vbHRpcD1NblsxXSk7YnJlYWs7Y2FzZSJOb3RlIjppZihabi5i''@;'; put 'put ''aWZmPD01JiZabi5iaWZmPj0yKWJyZWFrO2R0PVAuZGVuc2U/KHJlW01uWzBdLnJdfHxbXSlbTW5bMF0uY106cmVbZGkoTW5bMF0pXTt2YXIgbW89TGlbTW5bMl1dO2R0fHwoUC5kZW5zZT8ocmVbTW5bMF0ucl18fChyZVtNblswXS5yXT1bXSksZHQ9cmVbTW5bMF0ucl1bTW5bMF0uY109e3Q6''@;'; put 'put ''InoifSk6ZHQ9cmVbZGkoTW5bMF0pXT17dDoieiJ9LF9lLmUucj1NYXRoLm1heChfZS5lLnIsTW5bMF0uciksX2Uucy5yPU1hdGgubWluKF9lLnMucixNblswXS5yKSxfZS5lLmM9TWF0aC5tYXgoX2UuZS5jLE1uWzBdLmMpLF9lLnMuYz1NYXRoLm1pbihfZS5zLmMsTW5bMF0uYykpLGR0LmN8''@;'; put 'put ''fChkdC5jPVtdKSxkdC5jLnB1c2goe2E6TW5bMV0sdDptby5UeE8udH0pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKGhpLm4pe2Nhc2UiQ2xydENsaWVudCI6Y2FzZSJIZWFkZXIiOmNhc2UiRm9vdGVyIjpjYXNlIkhDZW50ZXIiOmNhc2UiVkNlbnRlciI6Y2FzZSJQbHMiOmNhc2UiR0NXIjpjYXNl''@;'; put 'put ''IkxIUmVjb3JkIjpjYXNlIkRCQ2VsbCI6Y2FzZSJFbnRFeFUyIjpjYXNlIlN4VmlldyI6Y2FzZSJTeHZkIjpjYXNlIlNYVkkiOmNhc2UiU1hWREV4IjpjYXNlIlN4SXZkIjpjYXNlIlNYU3RyaW5nIjpjYXNlIlN5bmMiOmNhc2UiQWRkaW4iOmNhc2UiU1hESSI6Y2FzZSJTWExJIjpjYXNlIlNY''@;'; put 'put ''RXgiOmNhc2UiUXNpU1hUYWciOmNhc2UiRmVhdCI6Y2FzZSJGZWF0SGRyIjpjYXNlIkZlYXRIZHIxMSI6Y2FzZSJGZWF0dXJlMTEiOmNhc2UiRmVhdHVyZTEyIjpjYXNlIkxpc3QxMiI6Y2FzZSJSZWNhbGNJZCI6Y2FzZSJEeEdDb2wiOmNhc2UiRmJpIjpjYXNlIkZiaTIiOmNhc2UiR2VsRnJh''@;'; put 'put ''bWUiOmNhc2UiWEZDUkMiOmNhc2UiU3R5bGUiOmNhc2UiU3R5bGVFeHQiOmNhc2UiU2NlbmFyaW9Qcm90ZWN0IjpjYXNlIk9ialByb3RlY3QiOmNhc2UiQ29uZEZtdDEyIjpjYXNlIlRhYmxlIjpjYXNlIlRhYmxlU3R5bGVzIjpjYXNlIlRhYmxlU3R5bGUiOmNhc2UiVGFibGVTdHlsZUVsZW1l''@;'; put 'put ''bnQiOmNhc2UiU1hTdHJlYW1JRCI6Y2FzZSJTWFZTIjpjYXNlIkRDb25SZWYiOmNhc2UiU1hBZGRsIjpjYXNlIkRDb25CaW4iOmNhc2UiRENvbk5hbWUiOmNhc2UiU1hQSSI6Y2FzZSJTeEZvcm1hdCI6Y2FzZSJTeFNlbGVjdCI6Y2FzZSJTeFJ1bGUiOmNhc2UiU3hGaWx0IjpjYXNlIlN4SXRt''@;'; put 'put ''IjpjYXNlIlN4RFhGIjpjYXNlIlNjZW5NYW4iOmNhc2UiRENvbiI6Y2FzZSJDZWxsV2F0Y2giOmNhc2UiUHJpbnRSb3dDb2wiOmNhc2UiUHJpbnRHcmlkIjpjYXNlIlByaW50U2l6ZSI6Y2FzZSJYQ1QiOmNhc2UiQ1JOIjpjYXNlIlNjbCI6Y2FzZSJTaGVldEV4dCI6Y2FzZSJTaGVldEV4dE9w''@;'; put 'put ''dGlvbmFsIjpjYXNlIk9iTm9NYWNyb3MiOmNhc2UiT2JQcm9qIjpjYXNlIkdVSURUeXBlTGliIjpjYXNlIldPcHQiOmNhc2UiUGhvbmV0aWNJbmZvIjpjYXNlIk9sZU9iamVjdFNpemUiOmNhc2UiRFhGIjpjYXNlIkRYRk4iOmNhc2UiRFhGTjEyIjpjYXNlIkRYRk4xMkxpc3QiOmNhc2UiRFhG''@;'; put 'put ''TjEyTm9DQiI6Y2FzZSJEdiI6Y2FzZSJEVmFsIjpjYXNlIkJSQUkiOmNhc2UiU2VyaWVzIjpjYXNlIlNlcmllc1RleHQiOmNhc2UiRENvbm4iOmNhc2UiRGJPclBhcmFtUXJ5IjpjYXNlIkRCUXVlcnlFeHQiOmNhc2UiT2xlRGJDb25uIjpjYXNlIkV4dFN0cmluZyI6Y2FzZSJJRm10UmVjb3Jk''@;'; put 'put ''IjpjYXNlIkNvbmRGbXQiOmNhc2UiQ0YiOmNhc2UiQ0YxMiI6Y2FzZSJDRkV4IjpjYXNlIkV4Y2VsOUZpbGUiOmNhc2UiVW5pdHMiOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIk1tcyI6Y2FzZSJJbnRlcmZhY2VFbmQiOmNhc2UiRFNGIjpjYXNlIkJ1aWx0SW5Gbkdyb3VwQ291bnQiOmNhc2Ui''@;'; put 'put ''V2luZG93MSI6Y2FzZSJIaWRlT2JqIjpjYXNlIkdyaWRTZXQiOmNhc2UiR3V0cyI6Y2FzZSJVc2VyQlZpZXciOmNhc2UiVXNlclNWaWV3QmVnaW4iOmNhc2UiVXNlclNWaWV3RW5kIjpjYXNlIkRlZkNvbFdpZHRoIjpjYXNlIkRlZmF1bHRSb3dIZWlnaHQiOmJyZWFrO2Nhc2UiWEZFeHQiOlVE''@;'; put 'put ''KHBuW01uLml4ZmVdLE1uLmV4dCk7YnJlYWs7Y2FzZSJDb2xJbmZvIjppZighWm4uY2VsbFN0eWxlcylicmVhaztmb3IoO01uLmU+PU1uLnM7KVFyW01uLmUtLV09e3dpZHRoOk1uLncvMjU2LGxldmVsOk1uLmxldmVsfHwwLGhpZGRlbjohISgxJk1uLmZsYWdzKX0scnJ8fChycj0hMCkscHUo''@;'; put 'put ''UXJbTW4uZSsxXSk7YnJlYWs7Y2FzZSJSb3ciOnZhciBpaT17fTtudWxsIT1Nbi5sZXZlbCYmKHVyW01uLnJdPWlpLGlpLmxldmVsPU1uLmxldmVsKSxNbi5oaWRkZW4mJih1cltNbi5yXT1paSxpaS5oaWRkZW49ITApLE1uLmhwdCYmKHVyW01uLnJdPWlpLGlpLmhwdD1Nbi5ocHQsaWkuaHB4''@;'; put 'put ''PVUxKE1uLmhwdCkpLE1uLml4ZmUmJih1cltNbi5yXT1paSxlcihUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdfHx7fSx2OjAsdDoibiJ9LFApLGlpLnM9VHQucyk7YnJlYWs7Y2FzZSJMZWZ0TWFyZ2luIjpjYXNlIlJpZ2h0TWFyZ2luIjpjYXNlIlRvcE1hcmdpbiI6Y2FzZSJCb3R0''@;'; put 'put ''b21NYXJnaW4iOnJlWyIhbWFyZ2lucyJdfHxkZihyZVsiIW1hcmdpbnMiXT17fSkscmVbIiFtYXJnaW5zIl1bTXMuc2xpY2UoMCwtNikudG9Mb3dlckNhc2UoKV09TW47YnJlYWs7Y2FzZSJTZWxlY3Rpb24iOnJlWyIhc2VsIl09TW47YnJlYWs7Y2FzZSJTZXR1cCI6cmVbIiFtYXJnaW5zIl18''@;'; put 'put ''fGRmKHJlWyIhbWFyZ2lucyJdPXt9KSxyZVsiIW1hcmdpbnMiXS5oZWFkZXI9TW4uaGVhZGVyLHJlWyIhbWFyZ2lucyJdLmZvb3Rlcj1Nbi5mb290ZXI7YnJlYWs7Y2FzZSJXaW5kb3cyIjpNbi5SVEwmJih1bi5WaWV3c1swXS5SVEw9ITApLE5yPU1uO2JyZWFrO2Nhc2UiQ291bnRyeSI6WnQ9''@;'; put 'put ''TW47YnJlYWs7Y2FzZSJGb250IjpNbi5pY3YmJkFuKE1uLmljdikmJihNbi5jb2xvcj17cmdiOnoxKEFuKE1uLmljdikpfSksZGVsZXRlIE1uLmljdiwwPT16bi5Gb250cy5sZW5ndGgmJloxKE1uKSx6bi5Gb250cy5wdXNoKE1uKTticmVhaztjYXNlIlBhbGV0dGUiOktuPU1uO2JyZWFrO2Nh''@;'; put 'put ''c2UiVGhlbWUiOm9pPU1uO2JyZWFrO2Nhc2UiQ29kZU5hbWUiOkhlP3FuLkNvZGVOYW1lPU1ufHxxbi5uYW1lOnVuLldCUHJvcHMuQ29kZU5hbWU9TW58fCJUaGlzV29ya2Jvb2siO2JyZWFrO2Nhc2UiUGFuZSI6KE5yfHx7fSkuZnJvemVuJiYocmVbIiFmcmVlemUiXT1kaSh7cjpNbi55fHww''@;'; put 'put ''LGM6TW4ueHx8MH0pKTticmVhaztkZWZhdWx0OnN3aXRjaChoaS5uKXtjYXNlIkRhdCI6Y2FzZSJCZWdpbiI6Y2FzZSJFbmQiOmNhc2UiU3RhcnRCbG9jayI6Y2FzZSJFbmRCbG9jayI6Y2FzZSJGcmFtZSI6Y2FzZSJBcmVhIjpjYXNlIkF4aXMiOmNhc2UiQXhpc0xpbmUiOmNhc2UiVGljayI6''@;'; put 'put ''Y2FzZSJBeGVzVXNlZCI6Y2FzZSJDcnRMYXlvdXQxMiI6Y2FzZSJDcnRMYXlvdXQxMkEiOmNhc2UiQ3J0TGluayI6Y2FzZSJDcnRMaW5lIjpjYXNlIkNydE1sRnJ0IjpjYXNlIkNydE1sRnJ0Q29udGludWUiOmNhc2UiTGluZUZvcm1hdCI6Y2FzZSJBcmVhRm9ybWF0IjpjYXNlIkNoYXJ0Ijpj''@;'; put 'put ''YXNlIkNoYXJ0M2QiOmNhc2UiQ2hhcnQzREJhclNoYXBlIjpjYXNlIkNoYXJ0Rm9ybWF0IjpjYXNlIkNoYXJ0RnJ0SW5mbyI6Y2FzZSJQbG90QXJlYSI6Y2FzZSJQbG90R3Jvd3RoIjpjYXNlIlNlcmllc0xpc3QiOmNhc2UiU2VyUGFyZW50IjpjYXNlIlNlckF1eFRyZW5kIjpjYXNlIkRhdGFG''@;'; put 'put ''b3JtYXQiOmNhc2UiU2VyVG9DcnQiOmNhc2UiRm9udFgiOmNhc2UiQ2F0U2VyUmFuZ2UiOmNhc2UiQXhjRXh0IjpjYXNlIlNlckZtdCI6Y2FzZSJTaHRQcm9wcyI6Y2FzZSJEZWZhdWx0VGV4dCI6Y2FzZSJUZXh0IjpjYXNlIkNhdExhYiI6Y2FzZSJEYXRhTGFiRXh0Q29udGVudHMiOmNhc2Ui''@;'; put 'put ''TGVnZW5kIjpjYXNlIkxlZ2VuZEV4Y2VwdGlvbiI6Y2FzZSJQaWUiOmNhc2UiU2NhdHRlciI6Y2FzZSJQaWVGb3JtYXQiOmNhc2UiTWFya2VyRm9ybWF0IjpjYXNlIlN0YXJ0T2JqZWN0IjpjYXNlIkVuZE9iamVjdCI6Y2FzZSJBbFJ1bnMiOmNhc2UiT2JqZWN0TGluayI6Y2FzZSJTSUluZGV4''@;'; put 'put ''IjpjYXNlIkF0dGFjaGVkTGFiZWwiOmNhc2UiWU11bHQiOmNhc2UiTGluZSI6Y2FzZSJCYXIiOmNhc2UiU3VyZiI6Y2FzZSJBeGlzUGFyZW50IjpjYXNlIlBvcyI6Y2FzZSJWYWx1ZVJhbmdlIjpjYXNlIlNYVmlld0V4OSI6Y2FzZSJTWFZpZXdMaW5rIjpjYXNlIlBpdm90Q2hhcnRCaXRzIjpj''@;'; put 'put ''YXNlIlNCYXNlUmVmIjpjYXNlIlRleHRQcm9wc1N0cmVhbSI6Y2FzZSJMbkV4dCI6Y2FzZSJNa3JFeHQiOmNhc2UiQ3J0Q29vcHQiOmNhc2UiUXNpIjpjYXNlIlFzaWYiOmNhc2UiUXNpciI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJUeHRRcnkiOmNhc2UiRmlsdGVyTW9kZSI6Y2FzZSJBdXRvRmls''@;'; put 'put ''dGVyIjpjYXNlIkF1dG9GaWx0ZXJJbmZvIjpjYXNlIkF1dG9GaWx0ZXIxMiI6Y2FzZSJEcm9wRG93bk9iaklkcyI6Y2FzZSJTb3J0IjpjYXNlIlNvcnREYXRhIjpjYXNlIlNoYXBlUHJvcHNTdHJlYW0iOmNhc2UiTXNvRHJhd2luZyI6Y2FzZSJNc29EcmF3aW5nR3JvdXAiOmNhc2UiTXNvRHJh''@;'; put 'put ''d2luZ1NlbGVjdGlvbiI6Y2FzZSJXZWJQdWIiOmNhc2UiQXV0b1dlYlB1YiI6Y2FzZSJIZWFkZXJGb290ZXIiOmNhc2UiSEZQaWN0dXJlIjpjYXNlIlBMViI6Y2FzZSJIb3Jpem9udGFsUGFnZUJyZWFrcyI6Y2FzZSJWZXJ0aWNhbFBhZ2VCcmVha3MiOmNhc2UiQmFja3VwIjpjYXNlIkNvbXBy''@;'; put 'put ''ZXNzUGljdHVyZXMiOmNhc2UiQ29tcGF0MTIiOmNhc2UiQ29udGludWUiOmNhc2UiQ29udGludWVGcnQxMiI6Y2FzZSJGcnRGb250TGlzdCI6Y2FzZSJGcnRXcmFwcGVyIjpicmVhaztkZWZhdWx0OnN3aXRjaChoaS5uKXtjYXNlIlRhYklkQ29uZiI6Y2FzZSJSYWRhciI6Y2FzZSJSYWRhckFy''@;'; put 'put ''ZWEiOmNhc2UiRHJvcEJhciI6Y2FzZSJJbnRsIjpjYXNlIkNvb3JkTGlzdCI6Y2FzZSJTZXJBdXhFcnJCYXIiOmNhc2UiQklGRjJGT05UQ0xSIjpjYXNlIkJJRkYyRk1UQ05UIjpjYXNlIkJJRkYyRk9OVFhUUkEiOmNhc2UiQklGRjJYRiI6Y2FzZSJCSUZGM1hGIjpjYXNlIkJJRkY0WEYiOmNh''@;'; put 'put ''c2UiQklGRjJYRklOREVYIjpjYXNlIkJJRkY0Rk1UQ05UIjpjYXNlIkJJRkYyUk9XIjpjYXNlIkJJRkYyV0lORE9XMiI6Y2FzZSJTQ0VOQVJJTyI6Y2FzZSJEQ29uQmluIjpjYXNlIlBpY0YiOmNhc2UiRGF0YUxhYkV4dCI6Y2FzZSJMZWwiOmNhc2UiQm9wUG9wIjpjYXNlIkJvcFBvcEN1c3Rv''@;'; put 'put ''bSI6Y2FzZSJSZWFsVGltZURhdGEiOmNhc2UiTmFtZSI6Y2FzZSJMSE5HcmFwaCI6Y2FzZSJGbkdyb3VwTmFtZSI6Y2FzZSJBZGRNZW51IjpjYXNlIkxQciI6Y2FzZSJMaXN0T2JqIjpjYXNlIkxpc3RGaWVsZCI6Y2FzZSJSUlNvcnQiOmNhc2UiQmlnTmFtZSI6Y2FzZSJUb29sYmFySGRyIjpj''@;'; put 'put ''YXNlIlRvb2xiYXJFbmQiOmNhc2UiRERFT2JqTmFtZSI6Y2FzZSJGUlRBcmNoSWQkIjpicmVhaztkZWZhdWx0OmlmKFAuV1RGKXRocm93IlVucmVjb2duaXplZCBSZWNvcmQgIitoaS5ufX19fX1lbHNlIHkubCs9eG8sWm4mJlpuLmVuYyYmWm4uZW5jLmluc2l0dSYmWm4uZW5jLmluc2l0dSh1''@;'; put 'put ''ZSh7bGVuZ3RoOnhvfSkpfXJldHVybiBMLlNoZWV0TmFtZXM9bHQocGUpLnNvcnQoZnVuY3Rpb24oemksSnIpe3JldHVybiBOdW1iZXIoemkpLU51bWJlcihKcil9KS5tYXAoZnVuY3Rpb24oemkpe3JldHVybiBwZVt6aV0ubmFtZX0pLFAuYm9va1NoZWV0c3x8KEwuU2hlZXRzPVEpLCFMLlNo''@;'; put 'put ''ZWV0TmFtZXMubGVuZ3RoJiZWZVsiIXJlZiJdPyhMLlNoZWV0TmFtZXMucHVzaCgiU2hlZXQxIiksTC5TaGVldHMmJihMLlNoZWV0cy5TaGVldDE9VmUpKTpMLlByZWFtYmxlPVZlLEwuU2hlZXRzJiZfby5mb3JFYWNoKGZ1bmN0aW9uKHppLEpyKXtMLlNoZWV0c1tMLlNoZWV0TmFtZXNbSnJd''@;'; put 'put ''XVsiIWF1dG9maWx0ZXIiXT16aX0pLEwuU3RyaW5ncz1TZSxMLlNTRj13LmdldF90YWJsZSgpLFpuLmVuYyYmKEwuRW5jcnlwdGlvbj1abi5lbmMpLG9pJiYoTC5UaGVtZXM9b2kpLEwuTWV0YWRhdGE9e30sdm9pZCAwIT09WnQmJihMLk1ldGFkYXRhLkNvdW50cnk9WnQpLFNuLm5hbWVzLmxl''@;'; put 'put ''bmd0aD4wJiYodW4uTmFtZXM9U24ubmFtZXMpLEwuV29ya2Jvb2s9dW4sTH0oUS5jb250ZW50LFApO2Vsc2UgaWYoKHBlPUJlLmZpbmQoeSwiUGVyZmVjdE9mZmljZV9NQUlOIikpJiZwZS5jb250ZW50KXJlPVRtLnRvX3dvcmtib29rKHBlLmNvbnRlbnQsKFAudHlwZT1fZSxQKSk7ZWxzZXtp''@;'; put 'put ''ZighKHBlPUJlLmZpbmQoeSwiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhcGUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIFdvcmtib29rIHN0cmVhbSIpO3JlPVRtLnRvX3dvcmtib29rKHBlLmNvbnRlbnQsKFAudHlwZT1fZSxQKSl9UC5ib29rVkJBJiZ5LkZ1bGxQYXRo''@;'; put 'put ''cyYmQmUuZmluZCh5LCIvX1ZCQV9QUk9KRUNUX0NVUi9WQkEvZGlyIikmJihyZS52YmFyYXc9ZnVuY3Rpb24gWDQoeSl7dmFyIFA9QmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4geS5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihMLFEpe2lmKCIvIiE9PUwuc2xpY2UoLTEp''@;'; put 'put ''JiZMLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciByZT1MLnJlcGxhY2UoL15bXlwvXSovLCJSIikucmVwbGFjZSgvXC9fVkJBX1BST0pFQ1RfQ1VSXHUwMDAwKi8sIiIpO0JlLnV0aWxzLmNmYl9hZGQoUCxyZSx5LkZpbGVJbmRleFtRXS5jb250ZW50KX19KSxCZS53cml0ZShQKX0o''@;'; put 'put ''eSkpfXZhciB2ZT17fTtyZXR1cm4geS5GdWxsUGF0aHMmJmZ1bmN0aW9uIGJNKHksUCxMKXt2YXIgUT1CZS5maW5kKHksIiFEb2N1bWVudFN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKFEmJlEuc2l6ZT4wKXRyeXt2YXIgcmU9YzkoUSxfNCxycC5EU0kpO2Zvcih2YXIgcGUgaW4gcmUpUFtwZV09''@;'; put 'put ''cmVbcGVdfWNhdGNoKEhlKXtpZihMLldURil0aHJvdyBIZX12YXIgX2U9QmUuZmluZCh5LCIhU3VtbWFyeUluZm9ybWF0aW9uIik7aWYoX2UmJl9lLnNpemU+MCl0cnl7dmFyIHZlPWM5KF9lLHdyLHJwLlNJKTtmb3IodmFyIFNlIGluIHZlKW51bGw9PVBbU2VdJiYoUFtTZV09dmVbU2VdKX1j''@;'; put 'put ''YXRjaChIZSl7aWYoTC5XVEYpdGhyb3cgSGV9UC5IZWFkaW5nUGFpcnMmJlAuVGl0bGVzT2ZQYXJ0cyYmKHUwKFAuSGVhZGluZ1BhaXJzLFAuVGl0bGVzT2ZQYXJ0cyxQLEwpLGRlbGV0ZSBQLkhlYWRpbmdQYWlycyxkZWxldGUgUC5UaXRsZXNPZlBhcnRzKX0oeSx2ZSxQKSxyZS5Qcm9wcz1y''@;'; put 'put ''ZS5DdXN0cHJvcHM9dmUsUC5ib29rRmlsZXMmJihyZS5jZmI9eSkscmV9dmFyIG1mPXswOntuOiJCcnRSb3dIZHIiLGY6ZnVuY3Rpb24gR0koeSxQKXt2YXIgTD17fSxRPXkubCtQO0wucj15LnJlYWRfc2hpZnQoNCkseS5sKz00O3ZhciByZT15LnJlYWRfc2hpZnQoMik7eS5sKz0xO3ZhciBw''@;'; put 'put ''ZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHkubD1RLDcmcGUmJihMLmxldmVsPTcmcGUpLDE2JnBlJiYoTC5oaWRkZW49ITApLDMyJnBlJiYoTC5ocHQ9cmUvMjApLEx9fSwxOntuOiJCcnRDZWxsQmxhbmsiLGY6ZnVuY3Rpb24gUHYoeSl7cmV0dXJuW3V1KHkpXX19LDI6e246IkJydENlbGxS''@;'; put 'put ''ayIsZjpmdW5jdGlvbiBpTCh5KXtyZXR1cm5bdXUoeSksWGMoeSksIm4iXX19LDM6e246IkJydENlbGxFcnJvciIsZjpmdW5jdGlvbiB0WSh5KXtyZXR1cm5bdXUoeSkseS5yZWFkX3NoaWZ0KDEpLCJlIl19fSw0OntuOiJCcnRDZWxsQm9vbCIsZjpmdW5jdGlvbiBPUyh5KXtyZXR1cm5bdXUo''@;'; put 'put ''eSkseS5yZWFkX3NoaWZ0KDEpLCJiIl19fSw1OntuOiJCcnRDZWxsUmVhbCIsZjpmdW5jdGlvbiBuTCh5KXtyZXR1cm5bdXUoeSksbWEoeSksIm4iXX19LDY6e246IkJydENlbGxTdCIsZjpmdW5jdGlvbiBNNih5KXtyZXR1cm5bdXUoeSksd2MoeSksInN0ciJdfX0sNzp7bjoiQnJ0Q2VsbElz''@;'; put 'put ''c3QiLGY6ZnVuY3Rpb24gVlMoeSl7cmV0dXJuW3V1KHkpLHkucmVhZF9zaGlmdCg0KSwicyJdfX0sODp7bjoiQnJ0Rm1sYVN0cmluZyIsZjpmdW5jdGlvbiBhTCh5LFAsTCl7dmFyIFE9eS5sK1AscmU9dXUoeSk7cmUucj1MWyIhcm93Il07dmFyIF9lPVtyZSx3Yyh5KSwic3RyIl07aWYoTC5j''@;'; put 'put ''ZWxsRm9ybXVsYSl7eS5sKz0yO3ZhciB2ZT1oNih5LFEteS5sLEwpO19lWzNdPXhsKHZlLG51bGwscmUsTC5zdXBib29rcyxMKX1lbHNlIHkubD1RO3JldHVybiBfZX19LDk6e246IkJydEZtbGFOdW0iLGY6ZnVuY3Rpb24gVVMoeSxQLEwpe3ZhciBRPXkubCtQLHJlPXV1KHkpO3JlLnI9TFsi''@;'; put 'put ''IXJvdyJdO3ZhciBfZT1bcmUsbWEoeSksIm4iXTtpZihMLmNlbGxGb3JtdWxhKXt5LmwrPTI7dmFyIHZlPWg2KHksUS15LmwsTCk7X2VbM109eGwodmUsbnVsbCxyZSxMLnN1cGJvb2tzLEwpfWVsc2UgeS5sPVE7cmV0dXJuIF9lfX0sMTA6e246IkJydEZtbGFCb29sIixmOmZ1bmN0aW9uIHNM''@;'; put 'put ''KHksUCxMKXt2YXIgUT15LmwrUCxyZT11dSh5KTtyZS5yPUxbIiFyb3ciXTt2YXIgX2U9W3JlLHkucmVhZF9zaGlmdCgxKSwiYiJdO2lmKEwuY2VsbEZvcm11bGEpe3kubCs9Mjt2YXIgdmU9aDYoeSxRLXkubCxMKTtfZVszXT14bCh2ZSxudWxsLHJlLEwuc3VwYm9va3MsTCl9ZWxzZSB5Lmw9''@;'; put 'put ''UTtyZXR1cm4gX2V9fSwxMTp7bjoiQnJ0Rm1sYUVycm9yIixmOmZ1bmN0aW9uIHpTKHksUCxMKXt2YXIgUT15LmwrUCxyZT11dSh5KTtyZS5yPUxbIiFyb3ciXTt2YXIgX2U9W3JlLHkucmVhZF9zaGlmdCgxKSwiZSJdO2lmKEwuY2VsbEZvcm11bGEpe3kubCs9Mjt2YXIgdmU9aDYoeSxRLXku''@;'; put 'put ''bCxMKTtfZVszXT14bCh2ZSxudWxsLHJlLEwuc3VwYm9va3MsTCl9ZWxzZSB5Lmw9UTtyZXR1cm4gX2V9fSwxMjp7bjoiQnJ0U2hvcnRCbGFuayIsZjpmdW5jdGlvbiBSUyh5KXtyZXR1cm5bYTAoeSldfX0sMTM6e246IkJydFNob3J0UmsiLGY6ZnVuY3Rpb24galMoeSl7cmV0dXJuW2EwKHkp''@;'; put 'put ''LFhjKHkpLCJuIl19fSwxNDp7bjoiQnJ0U2hvcnRFcnJvciIsZjpmdW5jdGlvbiBIUyh5KXtyZXR1cm5bYTAoeSkseS5yZWFkX3NoaWZ0KDEpLCJlIl19fSwxNTp7bjoiQnJ0U2hvcnRCb29sIixmOmZ1bmN0aW9uIFM2KHkpe3JldHVyblthMCh5KSx5LnJlYWRfc2hpZnQoMSksImIiXX19LDE2''@;'; put 'put ''OntuOiJCcnRTaG9ydFJlYWwiLGY6QlN9LDE3OntuOiJCcnRTaG9ydFN0IixmOmZ1bmN0aW9uIHg2KHkpe3JldHVyblthMCh5KSx3Yyh5KSwic3RyIl19fSwxODp7bjoiQnJ0U2hvcnRJc3N0IixmOmZ1bmN0aW9uIEdkKHkpe3JldHVyblthMCh5KSx5LnJlYWRfc2hpZnQoNCksInMiXX19LDE5''@;'; put 'put ''OntuOiJCcnRTU1RJdGVtIixmOmNhfSwyMDp7bjoiQnJ0UENESU1pc3NpbmcifSwyMTp7bjoiQnJ0UENESU51bWJlciJ9LDIyOntuOiJCcnRQQ0RJQm9vbGVhbiJ9LDIzOntuOiJCcnRQQ0RJRXJyb3IifSwyNDp7bjoiQnJ0UENESVN0cmluZyJ9LDI1OntuOiJCcnRQQ0RJRGF0ZXRpbWUifSwy''@;'; put 'put ''Njp7bjoiQnJ0UENESUluZGV4In0sMjc6e246IkJydFBDRElBTWlzc2luZyJ9LDI4OntuOiJCcnRQQ0RJQU51bWJlciJ9LDI5OntuOiJCcnRQQ0RJQUJvb2xlYW4ifSwzMDp7bjoiQnJ0UENESUFFcnJvciJ9LDMxOntuOiJCcnRQQ0RJQVN0cmluZyJ9LDMyOntuOiJCcnRQQ0RJQURhdGV0aW1l''@;'; put 'put ''In0sMzM6e246IkJydFBDUlJlY29yZCJ9LDM0OntuOiJCcnRQQ1JSZWNvcmREdCJ9LDM1OntuOiJCcnRGUlRCZWdpbiJ9LDM2OntuOiJCcnRGUlRFbmQifSwzNzp7bjoiQnJ0QUNCZWdpbiJ9LDM4OntuOiJCcnRBQ0VuZCJ9LDM5OntuOiJCcnROYW1lIixmOmZ1bmN0aW9uIHA1KHksUCxMKXt2''@;'; put 'put ''YXIgUT15LmwrUDt5LmwrPTQseS5sKz0xO3ZhciByZT15LnJlYWRfc2hpZnQoNCkscGU9ZHUoeSksX2U9b1MoeSwwLEwpLHZlPUF1KHkpO3kubD1RO3ZhciBTZT17TmFtZTpwZSxQdGc6X2V9O3JldHVybiByZTwyNjg0MzU0NTUmJihTZS5TaGVldD1yZSksdmUmJihTZS5Db21tZW50PXZlKSxT''@;'; put 'put ''ZX19LDQwOntuOiJCcnRJbmRleFJvd0Jsb2NrIn0sNDI6e246IkJydEluZGV4QmxvY2sifSw0Mzp7bjoiQnJ0Rm9udCIsZjpmdW5jdGlvbiBnQyh5LFAsTCl7dmFyIFE9e307US5zej15LnJlYWRfc2hpZnQoMikvMjA7dmFyIHJlPWY0KHkpO3N3aXRjaChyZS5mQm9sZCYmKFEuYm9sZD0xKSxy''@;'; put 'put ''ZS5mSXRhbGljJiYoUS5pdGFsaWM9MSkscmUuZlVuZGVybGluZSYmKFEudW5kZXJsaW5lPTEpLHJlLmZDb25kZW5zZSYmKFEuY29uZGVuc2U9MSkscmUuZkV4dGVuZCYmKFEuZXh0ZW5kPTEpLHJlLmZTaGFkb3cmJihRLnNoYWRvdz0xKSxyZS5mT3V0bGluZSYmKFEub3V0bGluZT0xKSxyZS5m''@;'; put 'put ''U3RyaWtlb3V0JiYoUS5zdHJpa2U9MSksNzAwPT09eS5yZWFkX3NoaWZ0KDIpJiYoUS5ib2xkPTEpLHkucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOlEudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOlEudmFsaWduPSJzdWIifXZhciBfZT15LnJlYWRfc2hpZnQoMSk7MCE9X2UmJihRLnVuZGVy''@;'; put 'put ''bGluZT1fZSk7dmFyIHZlPXkucmVhZF9zaGlmdCgxKTt2ZT4wJiYoUS5mYW1pbHk9dmUpO3ZhciBTZT15LnJlYWRfc2hpZnQoMSk7c3dpdGNoKFNlPjAmJihRLmNoYXJzZXQ9U2UpLHkubCsrLFEuY29sb3I9RGQoeSkseS5yZWFkX3NoaWZ0KDEpKXtjYXNlIDE6US5zY2hlbWU9Im1ham9yIjti''@;'; put 'put ''cmVhaztjYXNlIDI6US5zY2hlbWU9Im1pbm9yIn1yZXR1cm4gUS5uYW1lPXdjKHkpLFF9fSw0NDp7bjoiQnJ0Rm10IixmOmZ1bmN0aW9uIHBDKHksUCl7cmV0dXJuW3kucmVhZF9zaGlmdCgyKSx3Yyh5KV19fSw0NTp7bjoiQnJ0RmlsbCIsZjpmdW5jdGlvbiBrRCh5LFApe3ZhciBMPXkubCtQ''@;'; put 'put ''LFE9e30scmU9eS5yZWFkX3NoaWZ0KDQpO2lmKDQwIT1yZSl7US5wYXR0ZXJuVHlwZT1WNFtyZV07dmFyIHBlPURkKHkpOzY0IT1wZS5pbmRleCYmKFEuZmdDb2xvcj1wZSk7dmFyIF9lPURkKHkpOzY1IT1fZS5pbmRleCYmKFEuYmdDb2xvcj1fZSl9ZWxzZXt5LmwrPTE2LHkucmVhZF9zaGlm''@;'; put 'put ''dCg0KSxtYSh5KSxtYSh5KSxtYSh5KSxtYSh5KSxtYSh5KTtmb3IodmFyIHZlPXkucmVhZF9zaGlmdCg0KSxTZT1bXSxIZT0wO0hlPHZlOysrSGUpU2UucHVzaChZbSh5KSl9cmV0dXJuIHkubD1MLFF9fSw0Njp7bjoiQnJ0Qm9yZGVyIixmOmZ1bmN0aW9uIFREKHkpe3ZhciBQPXt9O3kucmVh''@;'; put 'put ''ZF9zaGlmdCgxKTt2YXIgTD1qNCh5KTsibm9uZSIhPUwuc3R5bGUmJihQLnRvcD1MKTt2YXIgUT1qNCh5KTsibm9uZSIhPVEuc3R5bGUmJihQLmJvdHRvbT1RKTt2YXIgcmU9ajQoeSk7Im5vbmUiIT1yZS5zdHlsZSYmKFAubGVmdD1yZSk7dmFyIHBlPWo0KHkpOyJub25lIiE9cGUuc3R5bGUm''@;'; put 'put ''JihQLnJpZ2h0PXBlKTt2YXIgX2U9ajQoeSk7cmV0dXJuIm5vbmUiIT1fZS5zdHlsZSYmKFAuZGlhZz1fZSksUH19LDQ3OntuOiJCcnRYRiIsZjpmdW5jdGlvbiBGOSh5LFApe3ZhciBMPXkubCtQLFE9e30scmU9eS5yZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9zaGlmdCgyKSxfZT15LnJlYWRf''@;'; put 'put ''c2hpZnQoMiksdmU9eS5yZWFkX3NoaWZ0KDIpLFNlPXkucmVhZF9zaGlmdCgyKSxIZT15LnJlYWRfc2hpZnQoMSk7eS5yZWFkX3NoaWZ0KDEpO3ZhciBWZT15LnJlYWRfc2hpZnQoMiksR2U9eS5yZWFkX3NoaWZ0KDEpO3kubD1MLFEueGZJZD1yZSxRLm51bUZtdElkPXBlLFEuZm9udElkPV9l''@;'; put 'put ''LFEuZmlsbElkPXZlLFEuYm9yZGVySWQ9U2UsMSZHZSYmMCE9US5udW1GbXRJZCYmKFEuYXBwbHlOdW1iZXJGb3JtYXQ9ITApLFEuYWxpZ25tZW50PXt9LEhlPjAmJihRLmFsaWdubWVudC50ZXh0Um90YXRpb249SGUpO3ZhciBudD0hMTtyZXR1cm4gNyZWZSYmKG50PSEwLFEuYWxpZ25tZW50''@;'; put 'put ''Lmhvcml6b250YWw9V21bNyZWZV0pLFEuYWxpZ25tZW50LnZlcnRpY2FsPUI0W1ZlPj4+MyY3XSxRLmFsaWdubWVudC52ZXJ0aWNhbCYmKG50PSEwKSxWZT4+PjYmMSYmKFEuYWxpZ25tZW50LndyYXBUZXh0PSEwKSxWZT4+PjgmMSYmKFEuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSxudHx8''@;'; put 'put ''ZGVsZXRlIFEuYWxpZ25tZW50LDQmR2UmJm50JiYoUS5hcHBseUFsaWdubWVudD0hMCksUX19LDQ4OntuOiJCcnRTdHlsZSJ9LDQ5OntuOiJCcnRDZWxsTWV0YSJ9LDUwOntuOiJCcnRWYWx1ZU1ldGEifSw1MTp7bjoiQnJ0TWRiIn0sNTI6e246IkJydEJlZ2luRm1kIn0sNTM6e246IkJydEVu''@;'; put 'put ''ZEZtZCJ9LDU0OntuOiJCcnRCZWdpbk1keCJ9LDU1OntuOiJCcnRFbmRNZHgifSw1Njp7bjoiQnJ0QmVnaW5NZHhUdXBsZSJ9LDU3OntuOiJCcnRFbmRNZHhUdXBsZSJ9LDU4OntuOiJCcnRNZHhNYnJJc3RyIn0sNTk6e246IkJydFN0ciJ9LDYwOntuOiJCcnRDb2xJbmZvIixmOlZkfSw2Mjp7''@;'; put 'put ''bjoiQnJ0Q2VsbFJTdHJpbmcifSw2Mzp7bjoiQnJ0Q2FsY0NoYWluSXRlbSQiLGY6ZnVuY3Rpb24gVzQoeSl7dmFyIFA9e307UC5pPXkucmVhZF9zaGlmdCg0KTt2YXIgTD17fTtMLnI9eS5yZWFkX3NoaWZ0KDQpLEwuYz15LnJlYWRfc2hpZnQoNCksUC5yPWRpKEwpO3ZhciBRPXkucmVhZF9z''@;'; put 'put ''aGlmdCgxKTtyZXR1cm4gMiZRJiYoUC5sPSIxIiksOCZRJiYoUC5hPSIxIiksUH19LDY0OntuOiJCcnREVmFsIixmOmZ1bmN0aW9uIEU2KHksUCxMKXt2YXIgUT15LmwrUCxyZT15LnJlYWRfc2hpZnQoNCkscGU9bDAoeSksX2U9QXUoeSksdmU9QXUoeSksU2U9QXUoeSksSGU9QXUoeSksVmU9''@;'; put 'put ''clMoeSxQLEwpLEdlPXkubDxRP3JTKHksUCxMKTpudWxsLG50PTE1JnJlLGR0PXt0OmVvW250XSxzcXJmeDpwZSxzOltfZSx2ZSxTZSxIZV19O3JldHVybiBWZSYmKGR0LmYxPVZlKSxHZSYmKGR0LmYyPUdlKSwwPT1udHx8Mz09bnR8fDc9PW50fHwoZHQub3A9VnZbcmU+PjIwJjE1XSksZHR9''@;'; put 'put ''fSw2NTp7bjoiQnJ0U3h2Y2VsbE51bSJ9LDY2OntuOiJCcnRTeHZjZWxsU3RyIn0sNjc6e246IkJydFN4dmNlbGxCb29sIn0sNjg6e246IkJydFN4dmNlbGxFcnIifSw2OTp7bjoiQnJ0U3h2Y2VsbERhdGUifSw3MDp7bjoiQnJ0U3h2Y2VsbE5pbCJ9LDEyODp7bjoiQnJ0RmlsZVZlcnNpb24i''@;'; put 'put ''fSwxMjk6e246IkJydEJlZ2luU2hlZXQifSwxMzA6e246IkJydEVuZFNoZWV0In0sMTMxOntuOiJCcnRCZWdpbkJvb2siLGY6YmMscDowfSwxMzI6e246IkJydEVuZEJvb2sifSwxMzM6e246IkJydEJlZ2luV3NWaWV3cyJ9LDEzNDp7bjoiQnJ0RW5kV3NWaWV3cyJ9LDEzNTp7bjoiQnJ0QmVn''@;'; put 'put ''aW5Cb29rVmlld3MifSwxMzY6e246IkJydEVuZEJvb2tWaWV3cyJ9LDEzNzp7bjoiQnJ0QmVnaW5Xc1ZpZXciLGY6ZnVuY3Rpb24gZ0woeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiB5LmwrPTI4LHtSVEw6MzImUCxncmlkOiEhKDQmUCl9fX0sMTM4OntuOiJCcnRFbmRXc1ZpZXci''@;'; put 'put ''fSwxMzk6e246IkJydEJlZ2luQ3NWaWV3cyJ9LDE0MDp7bjoiQnJ0RW5kQ3NWaWV3cyJ9LDE0MTp7bjoiQnJ0QmVnaW5Dc1ZpZXcifSwxNDI6e246IkJydEVuZENzVmlldyJ9LDE0Mzp7bjoiQnJ0QmVnaW5CdW5kbGVTaHMifSwxNDQ6e246IkJydEVuZEJ1bmRsZVNocyJ9LDE0NTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5TaGVldERhdGEifSwxNDY6e246IkJydEVuZFNoZWV0RGF0YSJ9LDE0Nzp7bjoiQnJ0V3NQcm9wIixmOmZ1bmN0aW9uIEpJKHksUCl7dmFyIEw9e30sUT15W3kubF07cmV0dXJuKyt5LmwsTC5hYm92ZT0hKDY0JlEpLEwubGVmdD0hKDEyOCZRKSx5LmwrPTE4LEwubmFtZT16aCh5LFAt''@;'; put 'put ''MTkpLEx9fSwxNDg6e246IkJydFdzRGltIixmOnFJLHA6MTZ9LDE1MTp7bjoiQnJ0UGFuZSIsZjpmdW5jdGlvbiBXUyh5LFApe3ZhciBMPXkubCtQO21hKHkpLG1hKHkpO3ZhciBRPXkucmVhZF9zaGlmdCg0LCJpIikscmU9eS5yZWFkX3NoaWZ0KDQsImkiKTtpZih5LnJlYWRfc2hpZnQoNCks''@;'; put 'put ''eS5yZWFkX3NoaWZ0KDEpLEwhPXkubCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBCcnRQYW5lOiAiK0wrIiAhPSAiK3kubCk7cmV0dXJuW2RpKHtyOlEsYzpyZX0pXX19LDE1Mjp7bjoiQnJ0U2VsIixmOmZ1bmN0aW9uIHVMKHksUCl7cmV0dXJuIHkucmVhZF9zaGlmdCg0KSx7Y2VsbDpkaSh7cjp5''@;'; put 'put ''LnJlYWRfc2hpZnQoNCksYzp5LnJlYWRfc2hpZnQoNCl9KX19fSwxNTM6e246IkJydFdiUHJvcCIsZjpmdW5jdGlvbiBQTCh5LFApe3ZhciBMPXt9LFE9eS5yZWFkX3NoaWZ0KDQpO0wuZGVmYXVsdFRoZW1lVmVyc2lvbj15LnJlYWRfc2hpZnQoNCk7dmFyIHJlPVA+OD93Yyh5KToiIjtyZXR1''@;'; put 'put ''cm4gcmUubGVuZ3RoPjAmJihMLkNvZGVOYW1lPXJlKSxMLmF1dG9Db21wcmVzc1BpY3R1cmVzPSEhKDY1NTM2JlEpLEwuYmFja3VwRmlsZT0hISg2NCZRKSxMLmNoZWNrQ29tcGF0aWJpbGl0eT0hISg0MDk2JlEpLEwuZGF0ZTE5MDQ9ISEoMSZRKSxMLmZpbHRlclByaXZhY3k9ISEoOCZRKSxM''@;'; put 'put ''LmhpZGVQaXZvdEZpZWxkTGlzdD0hISgxMDI0JlEpLEwucHJvbXB0ZWRTb2x1dGlvbnM9ISEoMTYmUSksTC5wdWJsaXNoSXRlbXM9ISEoMjA0OCZRKSxMLnJlZnJlc2hBbGxDb25uZWN0aW9ucz0hISgyNjIxNDQmUSksTC5zYXZlRXh0ZXJuYWxMaW5rVmFsdWVzPSEhKDEyOCZRKSxMLnNob3dC''@;'; put 'put ''b3JkZXJVbnNlbGVjdGVkVGFibGVzPSEhKDQmUSksTC5zaG93SW5rQW5ub3RhdGlvbj0hISgzMiZRKSxMLnNob3dPYmplY3RzPVsiYWxsIiwicGxhY2Vob2xkZXJzIiwibm9uZSJdW1E+PjEzJjNdLEwuc2hvd1Bpdm90Q2hhcnRGaWx0ZXI9ISEoMzI3NjgmUSksTC51cGRhdGVMaW5rcz1bInVz''@;'; put 'put ''ZXJTZXQiLCJuZXZlciIsImFsd2F5cyJdW1E+PjgmM10sTH19LDE1NDp7bjoiQnJ0V2JGYWN0b2lkIn0sMTU1OntuOiJCcnRGaWxlUmVjb3ZlciJ9LDE1Njp7bjoiQnJ0QnVuZGxlU2giLGY6ZnVuY3Rpb24gY1koeSxQKXt2YXIgTD17fTtyZXR1cm4gTC5IaWRkZW49eS5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''LEwuaVRhYklEPXkucmVhZF9zaGlmdCg0KSxMLnN0clJlbElEPVQxKHksUC04KSxMLm5hbWU9d2MoeSksTH19LDE1Nzp7bjoiQnJ0Q2FsY1Byb3AifSwxNTg6e246IkJydEJvb2tWaWV3In0sMTU5OntuOiJCcnRCZWdpblNzdCIsZjpmdW5jdGlvbiBRaCh5KXtyZXR1cm5beS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLHkucmVhZF9zaGlmdCg0KV19fSwxNjA6e246IkJydEVuZFNzdCJ9LDE2MTp7bjoiQnJ0QmVnaW5BRmlsdGVyIixmOkpjfSwxNjI6e246IkJydEVuZEFGaWx0ZXIifSwxNjM6e246IkJydEJlZ2luRmlsdGVyQ29sdW1uIn0sMTY0OntuOiJCcnRFbmRGaWx0ZXJDb2x1bW4ifSwxNjU6e246''@;'; put 'put ''IkJydEJlZ2luRmlsdGVycyJ9LDE2Njp7bjoiQnJ0RW5kRmlsdGVycyJ9LDE2Nzp7bjoiQnJ0RmlsdGVyIn0sMTY4OntuOiJCcnRDb2xvckZpbHRlciJ9LDE2OTp7bjoiQnJ0SWNvbkZpbHRlciJ9LDE3MDp7bjoiQnJ0VG9wMTBGaWx0ZXIifSwxNzE6e246IkJydER5bmFtaWNGaWx0ZXIifSwx''@;'; put 'put ''NzI6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVycyJ9LDE3Mzp7bjoiQnJ0RW5kQ3VzdG9tRmlsdGVycyJ9LDE3NDp7bjoiQnJ0Q3VzdG9tRmlsdGVyIn0sMTc1OntuOiJCcnRBRmlsdGVyRGF0ZUdyb3VwSXRlbSJ9LDE3Njp7bjoiQnJ0TWVyZ2VDZWxsIixmOmxMfSwxNzc6e246IkJydEJlZ2lu''@;'; put 'put ''TWVyZ2VDZWxscyJ9LDE3ODp7bjoiQnJ0RW5kTWVyZ2VDZWxscyJ9LDE3OTp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlRGVmIn0sMTgwOntuOiJCcnRFbmRQaXZvdENhY2hlRGVmIn0sMTgxOntuOiJCcnRCZWdpblBDREZpZWxkcyJ9LDE4Mjp7bjoiQnJ0RW5kUENERmllbGRzIn0sMTgzOntuOiJC''@;'; put 'put ''cnRCZWdpblBDREZpZWxkIn0sMTg0OntuOiJCcnRFbmRQQ0RGaWVsZCJ9LDE4NTp7bjoiQnJ0QmVnaW5QQ0RTb3VyY2UifSwxODY6e246IkJydEVuZFBDRFNvdXJjZSJ9LDE4Nzp7bjoiQnJ0QmVnaW5QQ0RTUmFuZ2UifSwxODg6e246IkJydEVuZFBDRFNSYW5nZSJ9LDE4OTp7bjoiQnJ0QmVn''@;'; put 'put ''aW5QQ0RGQXRibCJ9LDE5MDp7bjoiQnJ0RW5kUENERkF0YmwifSwxOTE6e246IkJydEJlZ2luUENESVJ1biJ9LDE5Mjp7bjoiQnJ0RW5kUENESVJ1biJ9LDE5Mzp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlUmVjb3JkcyJ9LDE5NDp7bjoiQnJ0RW5kUGl2b3RDYWNoZVJlY29yZHMifSwxOTU6e246''@;'; put 'put ''IkJydEJlZ2luUENESGllcmFyY2hpZXMifSwxOTY6e246IkJydEVuZFBDREhpZXJhcmNoaWVzIn0sMTk3OntuOiJCcnRCZWdpblBDREhpZXJhcmNoeSJ9LDE5ODp7bjoiQnJ0RW5kUENESGllcmFyY2h5In0sMTk5OntuOiJCcnRCZWdpblBDREhGaWVsZHNVc2FnZSJ9LDIwMDp7bjoiQnJ0RW5k''@;'; put 'put ''UENESEZpZWxkc1VzYWdlIn0sMjAxOntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb24ifSwyMDI6e246IkJydEVuZEV4dENvbm5lY3Rpb24ifSwyMDM6e246IkJydEJlZ2luRUNEYlByb3BzIn0sMjA0OntuOiJCcnRFbmRFQ0RiUHJvcHMifSwyMDU6e246IkJydEJlZ2luRUNPbGFwUHJvcHMifSwy''@;'; put 'put ''MDY6e246IkJydEVuZEVDT2xhcFByb3BzIn0sMjA3OntuOiJCcnRCZWdpblBDRFNDb25zb2wifSwyMDg6e246IkJydEVuZFBDRFNDb25zb2wifSwyMDk6e246IkJydEJlZ2luUENEU0NQYWdlcyJ9LDIxMDp7bjoiQnJ0RW5kUENEU0NQYWdlcyJ9LDIxMTp7bjoiQnJ0QmVnaW5QQ0RTQ1BhZ2Ui''@;'; put 'put ''fSwyMTI6e246IkJydEVuZFBDRFNDUGFnZSJ9LDIxMzp7bjoiQnJ0QmVnaW5QQ0RTQ1BJdGVtIn0sMjE0OntuOiJCcnRFbmRQQ0RTQ1BJdGVtIn0sMjE1OntuOiJCcnRCZWdpblBDRFNDU2V0cyJ9LDIxNjp7bjoiQnJ0RW5kUENEU0NTZXRzIn0sMjE3OntuOiJCcnRCZWdpblBDRFNDU2V0In0s''@;'; put 'put ''MjE4OntuOiJCcnRFbmRQQ0RTQ1NldCJ9LDIxOTp7bjoiQnJ0QmVnaW5QQ0RGR3JvdXAifSwyMjA6e246IkJydEVuZFBDREZHcm91cCJ9LDIyMTp7bjoiQnJ0QmVnaW5QQ0RGR0l0ZW1zIn0sMjIyOntuOiJCcnRFbmRQQ0RGR0l0ZW1zIn0sMjIzOntuOiJCcnRCZWdpblBDREZHUmFuZ2UifSwy''@;'; put 'put ''MjQ6e246IkJydEVuZFBDREZHUmFuZ2UifSwyMjU6e246IkJydEJlZ2luUENERkdEaXNjcmV0ZSJ9LDIyNjp7bjoiQnJ0RW5kUENERkdEaXNjcmV0ZSJ9LDIyNzp7bjoiQnJ0QmVnaW5QQ0RTRFR1cGxlQ2FjaGUifSwyMjg6e246IkJydEVuZFBDRFNEVHVwbGVDYWNoZSJ9LDIyOTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5QQ0RTRFRDRW50cmllcyJ9LDIzMDp7bjoiQnJ0RW5kUENEU0RUQ0VudHJpZXMifSwyMzE6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzIn0sMjMyOntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlcnMifSwyMzM6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXIifSwyMzQ6e246IkJydEVu''@;'; put 'put ''ZFBDRFNEVENFTWVtYmVyIn0sMjM1OntuOiJCcnRCZWdpblBDRFNEVENRdWVyaWVzIn0sMjM2OntuOiJCcnRFbmRQQ0RTRFRDUXVlcmllcyJ9LDIzNzp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcnkifSwyMzg6e246IkJydEVuZFBDRFNEVENRdWVyeSJ9LDIzOTp7bjoiQnJ0QmVnaW5QQ0RTRFRD''@;'; put 'put ''U2V0cyJ9LDI0MDp7bjoiQnJ0RW5kUENEU0RUQ1NldHMifSwyNDE6e246IkJydEJlZ2luUENEU0RUQ1NldCJ9LDI0Mjp7bjoiQnJ0RW5kUENEU0RUQ1NldCJ9LDI0Mzp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbXMifSwyNDQ6e246IkJydEVuZFBDRENhbGNJdGVtcyJ9LDI0NTp7bjoiQnJ0QmVn''@;'; put 'put ''aW5QQ0RDYWxjSXRlbSJ9LDI0Njp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW0ifSwyNDc6e246IkJydEJlZ2luUFJ1bGUifSwyNDg6e246IkJydEVuZFBSdWxlIn0sMjQ5OntuOiJCcnRCZWdpblBSRmlsdGVycyJ9LDI1MDp7bjoiQnJ0RW5kUFJGaWx0ZXJzIn0sMjUxOntuOiJCcnRCZWdpblBSRmls''@;'; put 'put ''dGVyIn0sMjUyOntuOiJCcnRFbmRQUkZpbHRlciJ9LDI1Mzp7bjoiQnJ0QmVnaW5QTmFtZXMifSwyNTQ6e246IkJydEVuZFBOYW1lcyJ9LDI1NTp7bjoiQnJ0QmVnaW5QTmFtZSJ9LDI1Njp7bjoiQnJ0RW5kUE5hbWUifSwyNTc6e246IkJydEJlZ2luUE5QYWlycyJ9LDI1ODp7bjoiQnJ0RW5k''@;'; put 'put ''UE5QYWlycyJ9LDI1OTp7bjoiQnJ0QmVnaW5QTlBhaXIifSwyNjA6e246IkJydEVuZFBOUGFpciJ9LDI2MTp7bjoiQnJ0QmVnaW5FQ1dlYlByb3BzIn0sMjYyOntuOiJCcnRFbmRFQ1dlYlByb3BzIn0sMjYzOntuOiJCcnRCZWdpbkVjV3BUYWJsZXMifSwyNjQ6e246IkJydEVuZEVDV1BUYWJs''@;'; put 'put ''ZXMifSwyNjU6e246IkJydEJlZ2luRUNQYXJhbXMifSwyNjY6e246IkJydEVuZEVDUGFyYW1zIn0sMjY3OntuOiJCcnRCZWdpbkVDUGFyYW0ifSwyNjg6e246IkJydEVuZEVDUGFyYW0ifSwyNjk6e246IkJydEJlZ2luUENES1BJcyJ9LDI3MDp7bjoiQnJ0RW5kUENES1BJcyJ9LDI3MTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5QQ0RLUEkifSwyNzI6e246IkJydEVuZFBDREtQSSJ9LDI3Mzp7bjoiQnJ0QmVnaW5EaW1zIn0sMjc0OntuOiJCcnRFbmREaW1zIn0sMjc1OntuOiJCcnRCZWdpbkRpbSJ9LDI3Njp7bjoiQnJ0RW5kRGltIn0sMjc3OntuOiJCcnRJbmRleFBhcnRFbmQifSwyNzg6e246IkJydEJl''@;'; put 'put ''Z2luU3R5bGVTaGVldCJ9LDI3OTp7bjoiQnJ0RW5kU3R5bGVTaGVldCJ9LDI4MDp7bjoiQnJ0QmVnaW5TWFZpZXcifSwyODE6e246IkJydEVuZFNYVkkifSwyODI6e246IkJydEJlZ2luU1hWSSJ9LDI4Mzp7bjoiQnJ0QmVnaW5TWFZJcyJ9LDI4NDp7bjoiQnJ0RW5kU1hWSXMifSwyODU6e246''@;'; put 'put ''IkJydEJlZ2luU1hWRCJ9LDI4Njp7bjoiQnJ0RW5kU1hWRCJ9LDI4Nzp7bjoiQnJ0QmVnaW5TWFZEcyJ9LDI4ODp7bjoiQnJ0RW5kU1hWRHMifSwyODk6e246IkJydEJlZ2luU1hQSSJ9LDI5MDp7bjoiQnJ0RW5kU1hQSSJ9LDI5MTp7bjoiQnJ0QmVnaW5TWFBJcyJ9LDI5Mjp7bjoiQnJ0RW5k''@;'; put 'put ''U1hQSXMifSwyOTM6e246IkJydEJlZ2luU1hESSJ9LDI5NDp7bjoiQnJ0RW5kU1hESSJ9LDI5NTp7bjoiQnJ0QmVnaW5TWERJcyJ9LDI5Njp7bjoiQnJ0RW5kU1hESXMifSwyOTc6e246IkJydEJlZ2luU1hMSSJ9LDI5ODp7bjoiQnJ0RW5kU1hMSSJ9LDI5OTp7bjoiQnJ0QmVnaW5TWExJUndz''@;'; put 'put ''In0sMzAwOntuOiJCcnRFbmRTWExJUndzIn0sMzAxOntuOiJCcnRCZWdpblNYTElDb2xzIn0sMzAyOntuOiJCcnRFbmRTWExJQ29scyJ9LDMwMzp7bjoiQnJ0QmVnaW5TWEZvcm1hdCJ9LDMwNDp7bjoiQnJ0RW5kU1hGb3JtYXQifSwzMDU6e246IkJydEJlZ2luU1hGb3JtYXRzIn0sMzA2Ontu''@;'; put 'put ''OiJCcnRFbmRTeEZvcm1hdHMifSwzMDc6e246IkJydEJlZ2luU3hTZWxlY3QifSwzMDg6e246IkJydEVuZFN4U2VsZWN0In0sMzA5OntuOiJCcnRCZWdpbklTWFZEUndzIn0sMzEwOntuOiJCcnRFbmRJU1hWRFJ3cyJ9LDMxMTp7bjoiQnJ0QmVnaW5JU1hWRENvbHMifSwzMTI6e246IkJydEVu''@;'; put 'put ''ZElTWFZEQ29scyJ9LDMxMzp7bjoiQnJ0RW5kU1hMb2NhdGlvbiJ9LDMxNDp7bjoiQnJ0QmVnaW5TWExvY2F0aW9uIn0sMzE1OntuOiJCcnRFbmRTWFZpZXcifSwzMTY6e246IkJydEJlZ2luU1hUSHMifSwzMTc6e246IkJydEVuZFNYVEhzIn0sMzE4OntuOiJCcnRCZWdpblNYVEgifSwzMTk6''@;'; put 'put ''e246IkJydEVuZFNYVEgifSwzMjA6e246IkJydEJlZ2luSVNYVEhSd3MifSwzMjE6e246IkJydEVuZElTWFRIUndzIn0sMzIyOntuOiJCcnRCZWdpbklTWFRIQ29scyJ9LDMyMzp7bjoiQnJ0RW5kSVNYVEhDb2xzIn0sMzI0OntuOiJCcnRCZWdpblNYVERNUFMifSwzMjU6e246IkJydEVuZFNY''@;'; put 'put ''VERNUHMifSwzMjY6e246IkJydEJlZ2luU1hURE1QIn0sMzI3OntuOiJCcnRFbmRTWFRETVAifSwzMjg6e246IkJydEJlZ2luU1hUSEl0ZW1zIn0sMzI5OntuOiJCcnRFbmRTWFRISXRlbXMifSwzMzA6e246IkJydEJlZ2luU1hUSEl0ZW0ifSwzMzE6e246IkJydEVuZFNYVEhJdGVtIn0sMzMy''@;'; put 'put ''OntuOiJCcnRCZWdpbk1ldGFkYXRhIn0sMzMzOntuOiJCcnRFbmRNZXRhZGF0YSJ9LDMzNDp7bjoiQnJ0QmVnaW5Fc21kdGluZm8ifSwzMzU6e246IkJydE1kdGluZm8ifSwzMzY6e246IkJydEVuZEVzbWR0aW5mbyJ9LDMzNzp7bjoiQnJ0QmVnaW5Fc21kYiJ9LDMzODp7bjoiQnJ0RW5kRXNt''@;'; put 'put ''ZGIifSwzMzk6e246IkJydEJlZ2luRXNmbWQifSwzNDA6e246IkJydEVuZEVzZm1kIn0sMzQxOntuOiJCcnRCZWdpblNpbmdsZUNlbGxzIn0sMzQyOntuOiJCcnRFbmRTaW5nbGVDZWxscyJ9LDM0Mzp7bjoiQnJ0QmVnaW5MaXN0In0sMzQ0OntuOiJCcnRFbmRMaXN0In0sMzQ1OntuOiJCcnRC''@;'; put 'put ''ZWdpbkxpc3RDb2xzIn0sMzQ2OntuOiJCcnRFbmRMaXN0Q29scyJ9LDM0Nzp7bjoiQnJ0QmVnaW5MaXN0Q29sIn0sMzQ4OntuOiJCcnRFbmRMaXN0Q29sIn0sMzQ5OntuOiJCcnRCZWdpbkxpc3RYbWxDUHIifSwzNTA6e246IkJydEVuZExpc3RYbWxDUHIifSwzNTE6e246IkJydExpc3RDQ0Zt''@;'; put 'put ''bGEifSwzNTI6e246IkJydExpc3RUckZtbGEifSwzNTM6e246IkJydEJlZ2luRXh0ZXJuYWxzIn0sMzU0OntuOiJCcnRFbmRFeHRlcm5hbHMifSwzNTU6e246IkJydFN1cEJvb2tTcmMiLGY6VDF9LDM1Nzp7bjoiQnJ0U3VwU2VsZiJ9LDM1ODp7bjoiQnJ0U3VwU2FtZSJ9LDM1OTp7bjoiQnJ0''@;'; put 'put ''U3VwVGFicyJ9LDM2MDp7bjoiQnJ0QmVnaW5TdXBCb29rIn0sMzYxOntuOiJCcnRQbGFjZWhvbGRlck5hbWUifSwzNjI6e246IkJydEV4dGVyblNoZWV0IixmOlNtfSwzNjM6e246IkJydEV4dGVyblRhYmxlU3RhcnQifSwzNjQ6e246IkJydEV4dGVyblRhYmxlRW5kIn0sMzY2OntuOiJCcnRF''@;'; put 'put ''eHRlcm5Sb3dIZHIifSwzNjc6e246IkJydEV4dGVybkNlbGxCbGFuayJ9LDM2ODp7bjoiQnJ0RXh0ZXJuQ2VsbFJlYWwifSwzNjk6e246IkJydEV4dGVybkNlbGxCb29sIn0sMzcwOntuOiJCcnRFeHRlcm5DZWxsRXJyb3IifSwzNzE6e246IkJydEV4dGVybkNlbGxTdHJpbmcifSwzNzI6e246''@;'; put 'put ''IkJydEJlZ2luRXNtZHgifSwzNzM6e246IkJydEVuZEVzbWR4In0sMzc0OntuOiJCcnRCZWdpbk1keFNldCJ9LDM3NTp7bjoiQnJ0RW5kTWR4U2V0In0sMzc2OntuOiJCcnRCZWdpbk1keE1iclByb3AifSwzNzc6e246IkJydEVuZE1keE1iclByb3AifSwzNzg6e246IkJydEJlZ2luTWR4S1BJ''@;'; put 'put ''In0sMzc5OntuOiJCcnRFbmRNZHhLUEkifSwzODA6e246IkJydEJlZ2luRXNzdHIifSwzODE6e246IkJydEVuZEVzc3RyIn0sMzgyOntuOiJCcnRCZWdpblBSRkl0ZW0ifSwzODM6e246IkJydEVuZFBSRkl0ZW0ifSwzODQ6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEcyJ9LDM4NTp7bjoiQnJ0''@;'; put 'put ''RW5kUGl2b3RDYWNoZUlEcyJ9LDM4Njp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSUQifSwzODc6e246IkJydEVuZFBpdm90Q2FjaGVJRCJ9LDM4ODp7bjoiQnJ0QmVnaW5JU1hWSXMifSwzODk6e246IkJydEVuZElTWFZJcyJ9LDM5MDp7bjoiQnJ0QmVnaW5Db2xJbmZvcyJ9LDM5MTp7bjoiQnJ0''@;'; put 'put ''RW5kQ29sSW5mb3MifSwzOTI6e246IkJydEJlZ2luUndCcmsifSwzOTM6e246IkJydEVuZFJ3QnJrIn0sMzk0OntuOiJCcnRCZWdpbkNvbEJyayJ9LDM5NTp7bjoiQnJ0RW5kQ29sQnJrIn0sMzk2OntuOiJCcnRCcmsifSwzOTc6e246IkJydFVzZXJCb29rVmlldyJ9LDM5ODp7bjoiQnJ0SW5m''@;'; put 'put ''byJ9LDM5OTp7bjoiQnJ0Q1VzciJ9LDQwMDp7bjoiQnJ0VXNyIn0sNDAxOntuOiJCcnRCZWdpblVzZXJzIn0sNDAzOntuOiJCcnRFT0YifSw0MDQ6e246IkJydFVDUiJ9LDQwNTp7bjoiQnJ0UlJJbnNEZWwifSw0MDY6e246IkJydFJSRW5kSW5zRGVsIn0sNDA3OntuOiJCcnRSUk1vdmUifSw0''@;'; put 'put ''MDg6e246IkJydFJSRW5kTW92ZSJ9LDQwOTp7bjoiQnJ0UlJDaGdDZWxsIn0sNDEwOntuOiJCcnRSUkVuZENoZ0NlbGwifSw0MTE6e246IkJydFJSSGVhZGVyIn0sNDEyOntuOiJCcnRSUlVzZXJWaWV3In0sNDEzOntuOiJCcnRSUlJlblNoZWV0In0sNDE0OntuOiJCcnRSUkluc2VydFNoIn0s''@;'; put 'put ''NDE1OntuOiJCcnRSUkRlZk5hbWUifSw0MTY6e246IkJydFJSTm90ZSJ9LDQxNzp7bjoiQnJ0UlJDb25mbGljdCJ9LDQxODp7bjoiQnJ0UlJUUVNJRiJ9LDQxOTp7bjoiQnJ0UlJGb3JtYXQifSw0MjA6e246IkJydFJSRW5kRm9ybWF0In0sNDIxOntuOiJCcnRSUkF1dG9GbXQifSw0MjI6e246''@;'; put 'put ''IkJydEJlZ2luVXNlclNoVmlld3MifSw0MjM6e246IkJydEJlZ2luVXNlclNoVmlldyJ9LDQyNDp7bjoiQnJ0RW5kVXNlclNoVmlldyJ9LDQyNTp7bjoiQnJ0RW5kVXNlclNoVmlld3MifSw0MjY6e246IkJydEFyckZtbGEiLGY6ZnVuY3Rpb24gaDUoeSxQLEwpe3ZhciBRPXkubCtQLHJlPVRk''@;'; put 'put ''KHkpLHBlPXkucmVhZF9zaGlmdCgxKSxfZT1bcmVdO2lmKF9lWzJdPXBlLEwuY2VsbEZvcm11bGEpe3ZhciB2ZT1uUyh5LFEteS5sLEwpO19lWzFdPXZlfWVsc2UgeS5sPVE7cmV0dXJuIF9lfX0sNDI3OntuOiJCcnRTaHJGbWxhIixmOmZ1bmN0aW9uIGhMKHksUCxMKXt2YXIgUT15LmwrUCxw''@;'; put 'put ''ZT1bSmMoeSwxNildO2lmKEwuY2VsbEZvcm11bGEpe3ZhciBfZT1FSSh5LFEteS5sLEwpO3BlWzFdPV9lLHkubD1RfWVsc2UgeS5sPVE7cmV0dXJuIHBlfX0sNDI4OntuOiJCcnRUYWJsZSJ9LDQyOTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9ucyJ9LDQzMDp7bjoiQnJ0RW5kRXh0Q29ubmVj''@;'; put 'put ''dGlvbnMifSw0MzE6e246IkJydEJlZ2luUENEQ2FsY01lbXMifSw0MzI6e246IkJydEVuZFBDRENhbGNNZW1zIn0sNDMzOntuOiJCcnRCZWdpblBDRENhbGNNZW0ifSw0MzQ6e246IkJydEVuZFBDRENhbGNNZW0ifSw0MzU6e246IkJydEJlZ2luUENESEdMZXZlbHMifSw0MzY6e246IkJydEVu''@;'; put 'put ''ZFBDREhHTGV2ZWxzIn0sNDM3OntuOiJCcnRCZWdpblBDREhHTGV2ZWwifSw0Mzg6e246IkJydEVuZFBDREhHTGV2ZWwifSw0Mzk6e246IkJydEJlZ2luUENESEdMR3JvdXBzIn0sNDQwOntuOiJCcnRFbmRQQ0RIR0xHcm91cHMifSw0NDE6e246IkJydEJlZ2luUENESEdMR3JvdXAifSw0NDI6''@;'; put 'put ''e246IkJydEVuZFBDREhHTEdyb3VwIn0sNDQzOntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXJzIn0sNDQ0OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVycyJ9LDQ0NTp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVyIn0sNDQ2OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVyIn0sNDQ3OntuOiJCcnRCZWdp''@;'; put 'put ''blFTSSJ9LDQ0ODp7bjoiQnJ0RW5kUVNJIn0sNDQ5OntuOiJCcnRCZWdpblFTSVIifSw0NTA6e246IkJydEVuZFFTSVIifSw0NTE6e246IkJydEJlZ2luRGVsZXRlZE5hbWVzIn0sNDUyOntuOiJCcnRFbmREZWxldGVkTmFtZXMifSw0NTM6e246IkJydEJlZ2luRGVsZXRlZE5hbWUifSw0NTQ6''@;'; put 'put ''e246IkJydEVuZERlbGV0ZWROYW1lIn0sNDU1OntuOiJCcnRCZWdpblFTSUZzIn0sNDU2OntuOiJCcnRFbmRRU0lGcyJ9LDQ1Nzp7bjoiQnJ0QmVnaW5RU0lGIn0sNDU4OntuOiJCcnRFbmRRU0lGIn0sNDU5OntuOiJCcnRCZWdpbkF1dG9Tb3J0U2NvcGUifSw0NjA6e246IkJydEVuZEF1dG9T''@;'; put 'put ''b3J0U2NvcGUifSw0NjE6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYyOntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjM6e246IkJydEJlZ2luQ0ZSdWxlIn0sNDY0OntuOiJCcnRFbmRDRlJ1bGUifSw0NjU6e246IkJydEJlZ2luSWNvblNldCJ9LDQ2''@;'; put 'put ''Njp7bjoiQnJ0RW5kSWNvblNldCJ9LDQ2Nzp7bjoiQnJ0QmVnaW5EYXRhYmFyIn0sNDY4OntuOiJCcnRFbmREYXRhYmFyIn0sNDY5OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUifSw0NzA6e246IkJydEVuZENvbG9yU2NhbGUifSw0NzE6e246IkJydENGVk8ifSw0NzI6e246IkJydEV4dGVyblZh''@;'; put 'put ''bHVlTWV0YSJ9LDQ3Mzp7bjoiQnJ0QmVnaW5Db2xvclBhbGV0dGUifSw0NzQ6e246IkJydEVuZENvbG9yUGFsZXR0ZSJ9LDQ3NTp7bjoiQnJ0SW5kZXhlZENvbG9yIn0sNDc2OntuOiJCcnRNYXJnaW5zIixmOmZ1bmN0aW9uIGZMKHkpe3ZhciBQPXt9O3JldHVybiAkUy5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKEwpe1BbTF09bWEoeSl9KSxQfX0sNDc3OntuOiJCcnRQcmludE9wdGlvbnMifSw0Nzg6e246IkJydFBhZ2VTZXR1cCJ9LDQ3OTp7bjoiQnJ0QmVnaW5IZWFkZXJGb290ZXIifSw0ODA6e246IkJydEVuZEhlYWRlckZvb3RlciJ9LDQ4MTp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdCJ9LDQ4''@;'; put 'put ''Mjp7bjoiQnJ0RW5kU1hDcnRGb3JtYXQifSw0ODM6e246IkJydEJlZ2luU1hDcnRGb3JtYXRzIn0sNDg0OntuOiJCcnRFbmRTWENydEZvcm1hdHMifSw0ODU6e246IkJydFdzRm10SW5mbyIsZjpmdW5jdGlvbiBYSSh5KXt2YXIgUD17fSxMPXt9LFE9e30scmU9eS5yZWFkX3NoaWZ0KDQpLHBl''@;'; put 'put ''PXkucmVhZF9zaGlmdCgyKTtRLndjaD1yZTw9NjU1MzY/cmUvMjU2OnBlO3ZhciBfZT15LnJlYWRfc2hpZnQoMik7TC5ocHQ9X2UvMjA7dmFyIHZlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gMiZ2ZSYmKEwuaGlkZGVuPSEwKSw0JnZlJiYoUC50b3B0aGljaz0hMCksOCZ2ZSYmKFAuYm90dGhp''@;'; put 'put ''Y2s9ITApLFAucm93b3V0bGluZT15LnJlYWRfc2hpZnQoMSksUC5jb2xvdXRsaW5lPXkucmVhZF9zaGlmdCgxKSxJMyhMKSxQLnJvdz1MLHB1KFEpLFAuY29sPVEsUH19LDQ4Njp7bjoiQnJ0QmVnaW5NZ3MifSw0ODc6e246IkJydEVuZE1HcyJ9LDQ4ODp7bjoiQnJ0QmVnaW5NR01hcHMifSw0''@;'; put 'put ''ODk6e246IkJydEVuZE1HTWFwcyJ9LDQ5MDp7bjoiQnJ0QmVnaW5NRyJ9LDQ5MTp7bjoiQnJ0RW5kTUcifSw0OTI6e246IkJydEJlZ2luTWFwIn0sNDkzOntuOiJCcnRFbmRNYXAifSw0OTQ6e246IkJydEhMaW5rIixmOmZ1bmN0aW9uIGQ1KHksUCl7dmFyIEw9eS5sK1AsUT1KYyh5LDE2KSxy''@;'; put 'put ''ZT1BdSh5KSxwZT13Yyh5KSxfZT13Yyh5KSx2ZT13Yyh5KTt5Lmw9TDt2YXIgU2U9e3JmeDpRLHJlbElkOnJlLGxvYzpwZSxkaXNwbGF5OnZlfTtyZXR1cm4gX2UmJihTZS5Ub29sdGlwPV9lKSxTZX19LDQ5NTp7bjoiQnJ0QmVnaW5EQ29uIn0sNDk2OntuOiJCcnRFbmREQ29uIn0sNDk3Ontu''@;'; put 'put ''OiJCcnRCZWdpbkRSZWZzIn0sNDk4OntuOiJCcnRFbmREUmVmcyJ9LDQ5OTp7bjoiQnJ0RFJlZiJ9LDUwMDp7bjoiQnJ0QmVnaW5TY2VuTWFuIn0sNTAxOntuOiJCcnRFbmRTY2VuTWFuIn0sNTAyOntuOiJCcnRCZWdpblNjdCJ9LDUwMzp7bjoiQnJ0RW5kU2N0In0sNTA0OntuOiJCcnRTbGMi''@;'; put 'put ''fSw1MDU6e246IkJydEJlZ2luRFhGcyJ9LDUwNjp7bjoiQnJ0RW5kRFhGcyJ9LDUwNzp7bjoiQnJ0RFhGIn0sNTA4OntuOiJCcnRCZWdpblRhYmxlU3R5bGVzIn0sNTA5OntuOiJCcnRFbmRUYWJsZVN0eWxlcyJ9LDUxMDp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlIn0sNTExOntuOiJCcnRFbmRU''@;'; put 'put ''YWJsZVN0eWxlIn0sNTEyOntuOiJCcnRUYWJsZVN0eWxlRWxlbWVudCJ9LDUxMzp7bjoiQnJ0VGFibGVTdHlsZUNsaWVudCJ9LDUxNDp7bjoiQnJ0QmVnaW5Wb2xEZXBzIn0sNTE1OntuOiJCcnRFbmRWb2xEZXBzIn0sNTE2OntuOiJCcnRCZWdpblZvbFR5cGUifSw1MTc6e246IkJydEVuZFZv''@;'; put 'put ''bFR5cGUifSw1MTg6e246IkJydEJlZ2luVm9sTWFpbiJ9LDUxOTp7bjoiQnJ0RW5kVm9sTWFpbiJ9LDUyMDp7bjoiQnJ0QmVnaW5Wb2xUb3BpYyJ9LDUyMTp7bjoiQnJ0RW5kVm9sVG9waWMifSw1MjI6e246IkJydFZvbFN1YnRvcGljIn0sNTIzOntuOiJCcnRWb2xSZWYifSw1MjQ6e246IkJy''@;'; put 'put ''dFZvbE51bSJ9LDUyNTp7bjoiQnJ0Vm9sRXJyIn0sNTI2OntuOiJCcnRWb2xTdHIifSw1Mjc6e246IkJydFZvbEJvb2wifSw1Mjg6e246IkJydEJlZ2luQ2FsY0NoYWluJCJ9LDUyOTp7bjoiQnJ0RW5kQ2FsY0NoYWluJCJ9LDUzMDp7bjoiQnJ0QmVnaW5Tb3J0U3RhdGUifSw1MzE6e246IkJy''@;'; put 'put ''dEVuZFNvcnRTdGF0ZSJ9LDUzMjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZCJ9LDUzMzp7bjoiQnJ0RW5kU29ydENvbmQifSw1MzQ6e246IkJydEJvb2tQcm90ZWN0aW9uIn0sNTM1OntuOiJCcnRTaGVldFByb3RlY3Rpb24ifSw1MzY6e246IkJydFJhbmdlUHJvdGVjdGlvbiJ9LDUzNzp7bjoiQnJ0''@;'; put 'put ''UGhvbmV0aWNJbmZvIn0sNTM4OntuOiJCcnRCZWdpbkVDVHh0V2l6In0sNTM5OntuOiJCcnRFbmRFQ1R4dFdpeiJ9LDU0MDp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdCJ9LDU0MTp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QifSw1NDI6e246IkJydEJlZ2luRUNUd0ZsZEluZm8ifSw1NDg6''@;'; put 'put ''e246IkJydEZpbGVTaGFyaW5nIn0sNTQ5OntuOiJCcnRPbGVTaXplIn0sNTUwOntuOiJCcnREcmF3aW5nIixmOlQxfSw1NTE6e246IkJydExlZ2FjeURyYXdpbmcifSw1NTI6e246IkJydExlZ2FjeURyYXdpbmdIRiJ9LDU1Mzp7bjoiQnJ0V2ViT3B0In0sNTU0OntuOiJCcnRCZWdpbldlYlB1''@;'; put 'put ''Ykl0ZW1zIn0sNTU1OntuOiJCcnRFbmRXZWJQdWJJdGVtcyJ9LDU1Njp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtIn0sNTU3OntuOiJCcnRFbmRXZWJQdWJJdGVtIn0sNTU4OntuOiJCcnRCZWdpblNYQ29uZEZtdCJ9LDU1OTp7bjoiQnJ0RW5kU1hDb25kRm10In0sNTYwOntuOiJCcnRCZWdpblNY''@;'; put 'put ''Q29uZEZtdHMifSw1NjE6e246IkJydEVuZFNYQ29uZEZtdHMifSw1NjI6e246IkJydEJrSGltIn0sNTY0OntuOiJCcnRDb2xvciJ9LDU2NTp7bjoiQnJ0QmVnaW5JbmRleGVkQ29sb3JzIn0sNTY2OntuOiJCcnRFbmRJbmRleGVkQ29sb3JzIn0sNTY5OntuOiJCcnRCZWdpbk1SVUNvbG9ycyJ9''@;'; put 'put ''LDU3MDp7bjoiQnJ0RW5kTVJVQ29sb3JzIn0sNTcyOntuOiJCcnRNUlVDb2xvciJ9LDU3Mzp7bjoiQnJ0QmVnaW5EVmFscyJ9LDU3NDp7bjoiQnJ0RW5kRFZhbHMifSw1Nzc6e246IkJydFN1cE5hbWVTdGFydCJ9LDU3ODp7bjoiQnJ0U3VwTmFtZVZhbHVlU3RhcnQifSw1Nzk6e246IkJydFN1''@;'; put 'put ''cE5hbWVWYWx1ZUVuZCJ9LDU4MDp7bjoiQnJ0U3VwTmFtZU51bSJ9LDU4MTp7bjoiQnJ0U3VwTmFtZUVyciJ9LDU4Mjp7bjoiQnJ0U3VwTmFtZVN0In0sNTgzOntuOiJCcnRTdXBOYW1lTmlsIn0sNTg0OntuOiJCcnRTdXBOYW1lQm9vbCJ9LDU4NTp7bjoiQnJ0U3VwTmFtZUZtbGEifSw1ODY6''@;'; put 'put ''e246IkJydFN1cE5hbWVCaXRzIn0sNTg3OntuOiJCcnRTdXBOYW1lRW5kIn0sNTg4OntuOiJCcnRFbmRTdXBCb29rIn0sNTg5OntuOiJCcnRDZWxsU21hcnRUYWdQcm9wZXJ0eSJ9LDU5MDp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWcifSw1OTE6e246IkJydEVuZENlbGxTbWFydFRhZyJ9LDU5''@;'; put 'put ''Mjp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWdzIn0sNTkzOntuOiJCcnRFbmRDZWxsU21hcnRUYWdzIn0sNTk0OntuOiJCcnRCZWdpblNtYXJ0VGFncyJ9LDU5NTp7bjoiQnJ0RW5kU21hcnRUYWdzIn0sNTk2OntuOiJCcnRTbWFydFRhZ1R5cGUifSw1OTc6e246IkJydEJlZ2luU21hcnRUYWdU''@;'; put 'put ''eXBlcyJ9LDU5ODp7bjoiQnJ0RW5kU21hcnRUYWdUeXBlcyJ9LDU5OTp7bjoiQnJ0QmVnaW5TWEZpbHRlcnMifSw2MDA6e246IkJydEVuZFNYRmlsdGVycyJ9LDYwMTp7bjoiQnJ0QmVnaW5TWEZJTFRFUiJ9LDYwMjp7bjoiQnJ0RW5kU1hGaWx0ZXIifSw2MDM6e246IkJydEJlZ2luRmlsbHMi''@;'; put 'put ''fSw2MDQ6e246IkJydEVuZEZpbGxzIn0sNjA1OntuOiJCcnRCZWdpbkNlbGxXYXRjaGVzIn0sNjA2OntuOiJCcnRFbmRDZWxsV2F0Y2hlcyJ9LDYwNzp7bjoiQnJ0Q2VsbFdhdGNoIn0sNjA4OntuOiJCcnRCZWdpbkNSRXJycyJ9LDYwOTp7bjoiQnJ0RW5kQ1JFcnJzIn0sNjEwOntuOiJCcnRD''@;'; put 'put ''cmFzaFJlY0VyciJ9LDYxMTp7bjoiQnJ0QmVnaW5Gb250cyJ9LDYxMjp7bjoiQnJ0RW5kRm9udHMifSw2MTM6e246IkJydEJlZ2luQm9yZGVycyJ9LDYxNDp7bjoiQnJ0RW5kQm9yZGVycyJ9LDYxNTp7bjoiQnJ0QmVnaW5GbXRzIn0sNjE2OntuOiJCcnRFbmRGbXRzIn0sNjE3OntuOiJCcnRC''@;'; put 'put ''ZWdpbkNlbGxYRnMifSw2MTg6e246IkJydEVuZENlbGxYRnMifSw2MTk6e246IkJydEJlZ2luU3R5bGVzIn0sNjIwOntuOiJCcnRFbmRTdHlsZXMifSw2MjU6e246IkJydEJpZ05hbWUifSw2MjY6e246IkJydEJlZ2luQ2VsbFN0eWxlWEZzIn0sNjI3OntuOiJCcnRFbmRDZWxsU3R5bGVYRnMi''@;'; put 'put ''fSw2Mjg6e246IkJydEJlZ2luQ29tbWVudHMifSw2Mjk6e246IkJydEVuZENvbW1lbnRzIn0sNjMwOntuOiJCcnRCZWdpbkNvbW1lbnRBdXRob3JzIn0sNjMxOntuOiJCcnRFbmRDb21tZW50QXV0aG9ycyJ9LDYzMjp7bjoiQnJ0Q29tbWVudEF1dGhvciIsZjpYRH0sNjMzOntuOiJCcnRCZWdp''@;'; put 'put ''bkNvbW1lbnRMaXN0In0sNjM0OntuOiJCcnRFbmRDb21tZW50TGlzdCJ9LDYzNTp7bjoiQnJ0QmVnaW5Db21tZW50IixmOmZ1bmN0aW9uIFZDKHkpe3ZhciBQPXt9O1AuaWF1dGhvcj15LnJlYWRfc2hpZnQoNCk7dmFyIEw9SmMoeSwxNik7cmV0dXJuIFAucmZ4PUwucyxQLnJlZj1kaShMLnMp''@;'; put 'put ''LHkubCs9MTYsUH19LDYzNjp7bjoiQnJ0RW5kQ29tbWVudCJ9LDYzNzp7bjoiQnJ0Q29tbWVudFRleHQiLGY6Szd9LDYzODp7bjoiQnJ0QmVnaW5PbGVPYmplY3RzIn0sNjM5OntuOiJCcnRPbGVPYmplY3QifSw2NDA6e246IkJydEVuZE9sZU9iamVjdHMifSw2NDE6e246IkJydEJlZ2luU3hy''@;'; put 'put ''dWxlcyJ9LDY0Mjp7bjoiQnJ0RW5kU3hSdWxlcyJ9LDY0Mzp7bjoiQnJ0QmVnaW5BY3RpdmVYQ29udHJvbHMifSw2NDQ6e246IkJydEFjdGl2ZVgifSw2NDU6e246IkJydEVuZEFjdGl2ZVhDb250cm9scyJ9LDY0Njp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNTb3J0QnkifSw2NDg6e246''@;'; put 'put ''IkJydEJlZ2luQ2VsbElnbm9yZUVDcyJ9LDY0OTp7bjoiQnJ0Q2VsbElnbm9yZUVDIn0sNjUwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzIn0sNjUxOntuOiJCcnRDc1Byb3AiLGY6ZnVuY3Rpb24gZXAoeSxQKXtyZXR1cm4geS5sKz0xMCx7bmFtZTp3Yyh5KX19fSw2NTI6e246IkJydENzUGFn''@;'; put 'put ''ZVNldHVwIn0sNjUzOntuOiJCcnRCZWdpblVzZXJDc1ZpZXdzIn0sNjU0OntuOiJCcnRFbmRVc2VyQ3NWaWV3cyJ9LDY1NTp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3In0sNjU2OntuOiJCcnRFbmRVc2VyQ3NWaWV3In0sNjU3OntuOiJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzIn0sNjU4OntuOiJC''@;'; put 'put ''cnRFbmRQQ0RTRkNJRW50cmllcyJ9LDY1OTp7bjoiQnJ0UENEU0ZDSUVudHJ5In0sNjYwOntuOiJCcnRCZWdpbkxpc3RQYXJ0cyJ9LDY2MTp7bjoiQnJ0TGlzdFBhcnQifSw2NjI6e246IkJydEVuZExpc3RQYXJ0cyJ9LDY2Mzp7bjoiQnJ0U2hlZXRDYWxjUHJvcCJ9LDY2NDp7bjoiQnJ0QmVn''@;'; put 'put ''aW5Gbkdyb3VwIn0sNjY1OntuOiJCcnRGbkdyb3VwIn0sNjY2OntuOiJCcnRFbmRGbkdyb3VwIn0sNjY3OntuOiJCcnRTdXBBZGRpbiJ9LDY2ODp7bjoiQnJ0U1hURE1QT3JkZXIifSw2Njk6e246IkJydENzUHJvdGVjdGlvbiJ9LDY3MTp7bjoiQnJ0QmVnaW5Xc1NvcnRNYXAifSw2NzI6e246''@;'; put 'put ''IkJydEVuZFdzU29ydE1hcCJ9LDY3Mzp7bjoiQnJ0QmVnaW5SUlNvcnQifSw2NzQ6e246IkJydEVuZFJSU29ydCJ9LDY3NTp7bjoiQnJ0UlJTb3J0SXRlbSJ9LDY3Njp7bjoiQnJ0RmlsZVNoYXJpbmdJc28ifSw2Nzc6e246IkJydEJvb2tQcm90ZWN0aW9uSXNvIn0sNjc4OntuOiJCcnRTaGVl''@;'; put 'put ''dFByb3RlY3Rpb25Jc28ifSw2Nzk6e246IkJydENzUHJvdGVjdGlvbklzbyJ9LDY4MDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvIn0sNjgxOntuOiJCcnREVmFsTGlzdCJ9LDEwMjQ6e246IkJydFJ3RGVzY2VudCJ9LDEwMjU6e246IkJydEtub3duRm9udHMifSwxMDI2OntuOiJCcnRCZWdp''@;'; put 'put ''blNYVHVwbGVTZXQifSwxMDI3OntuOiJCcnRFbmRTWFR1cGxlU2V0In0sMTAyODp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0SGVhZGVyIn0sMTAyOTp7bjoiQnJ0RW5kU1hUdXBsZVNldEhlYWRlciJ9LDEwMzA6e246IkJydFNYVHVwbGVTZXRIZWFkZXJJdGVtIn0sMTAzMTp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''WFR1cGxlU2V0RGF0YSJ9LDEwMzI6e246IkJydEVuZFNYVHVwbGVTZXREYXRhIn0sMTAzMzp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0Um93In0sMTAzNDp7bjoiQnJ0RW5kU1hUdXBsZVNldFJvdyJ9LDEwMzU6e246IkJydFNYVHVwbGVTZXRSb3dJdGVtIn0sMTAzNjp7bjoiQnJ0TmFtZUV4dCJ9''@;'; put 'put ''LDEwMzc6e246IkJydFBDREgxNCJ9LDEwMzg6e246IkJydEJlZ2luUENEQ2FsY01lbTE0In0sMTAzOTp7bjoiQnJ0RW5kUENEQ2FsY01lbTE0In0sMTA0MDp7bjoiQnJ0U1hUSDE0In0sMTA0MTp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cCJ9LDEwNDI6e246IkJydEVuZFNwYXJrbGluZUdy''@;'; put 'put ''b3VwIn0sMTA0Mzp7bjoiQnJ0U3BhcmtsaW5lIn0sMTA0NDp7bjoiQnJ0U1hESTE0In0sMTA0NTp7bjoiQnJ0V3NGbXRJbmZvRXgxNCJ9LDEwNDY6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ3OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEw''@;'; put 'put ''NDg6e246IkJydEJlZ2luQ0ZSdWxlMTQifSwxMDQ5OntuOiJCcnRFbmRDRlJ1bGUxNCJ9LDEwNTA6e246IkJydENGVk8xNCJ9LDEwNTE6e246IkJydEJlZ2luRGF0YWJhcjE0In0sMTA1Mjp7bjoiQnJ0QmVnaW5JY29uU2V0MTQifSwxMDUzOntuOiJCcnREVmFsMTQiLGY6ZnVuY3Rpb24gYkwo''@;'; put 'put ''eSxQLEwpe3ZhciBRPWZ1bmN0aW9uIEd0KHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9e307cmV0dXJuIDEmUSYmKHJlLnJlZnM9ZnVuY3Rpb24gVW4oeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPVtdO1AtLSA+MDspTC5wdXNoKERyKHkpKTtyZXR1cm4gTH0oeSkpLDIm''@;'; put 'put ''USYmKHJlLnNxcmVmcz1mdW5jdGlvbiB5byh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9W107UC0tID4wOylMLnB1c2goZXMoeSkpO3JldHVybiBMfSh5KSksNCZRJiYocmUuZm9ybXVsYXM9ZnVuY3Rpb24genMoeSxQLEwpe2Zvcih2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9W107''@;'; put 'put ''US0tID4wOylyZS5wdXNoKG9jKHksMCxMKSk7cmV0dXJuIHJlfSh5LDAsTCkpLDgmUSYmKHJlLnJlbElEPWZ1bmN0aW9uIGltKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gMD09PVA/IiI6eS5yZWFkX3NoaWZ0KFAsInV0ZjE2bGUiKX0oeSkpLHJlfSh5LDAsTCkscmU9eS5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLHBlPUF1KHkpLF9lPUF1KHkpLHZlPUF1KHkpLFNlPUF1KHkpLEhlPShRLmZvcm11bGFzfHxbXSlbMF0sVmU9KFEuZm9ybXVsYXN8fFtdKVsxXSxHZT0xNSZyZSxudD17dDplb1tHZV0sc3FyZng6US5zcXJlZnNbMF0sczpbcGUsX2UsdmUsU2VdfTtyZXR1cm4gSGUmJihudC5m''@;'; put 'put ''MT1IZSksVmUmJihudC5mMj1WZSksMD09R2V8fDM9PUdlfHw3PT1HZXx8KG50Lm9wPVZ2W3JlPj4yMCYxNV0pLG50fX0sMTA1NDp7bjoiQnJ0QmVnaW5EVmFsczE0In0sMTA1NTp7bjoiQnJ0Q29sb3IxNCJ9LDEwNTY6e246IkJydEJlZ2luU3BhcmtsaW5lcyJ9LDEwNTc6e246IkJydEVuZFNw''@;'; put 'put ''YXJrbGluZXMifSwxMDU4OntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwcyJ9LDEwNTk6e246IkJydEVuZFNwYXJrbGluZUdyb3VwcyJ9LDEwNjE6e246IkJydFNYVkQxNCJ9LDEwNjI6e246IkJydEJlZ2luU1hWaWV3MTQifSwxMDYzOntuOiJCcnRFbmRTWFZpZXcxNCJ9LDEwNjQ6e246IkJy''@;'; put 'put ''dEJlZ2luU1hWaWV3MTYifSwxMDY1OntuOiJCcnRFbmRTWFZpZXcxNiJ9LDEwNjY6e246IkJydEJlZ2luUENEMTQifSwxMDY3OntuOiJCcnRFbmRQQ0QxNCJ9LDEwNjg6e246IkJydEJlZ2luRXh0Q29ubjE0In0sMTA2OTp7bjoiQnJ0RW5kRXh0Q29ubjE0In0sMTA3MDp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''bGljZXJDYWNoZUlEcyJ9LDEwNzE6e246IkJydEVuZFNsaWNlckNhY2hlSURzIn0sMTA3Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEIn0sMTA3Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRCJ9LDEwNzU6e246IkJydEJlZ2luU2xpY2VyQ2FjaGUifSwxMDc2OntuOiJCcnRFbmRTbGljZXJD''@;'; put 'put ''YWNoZSJ9LDEwNzc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVEZWYifSwxMDc4OntuOiJCcnRFbmRTbGljZXJDYWNoZURlZiJ9LDEwNzk6e246IkJydEJlZ2luU2xpY2Vyc0V4In0sMTA4MDp7bjoiQnJ0RW5kU2xpY2Vyc0V4In0sMTA4MTp7bjoiQnJ0QmVnaW5TbGljZXJFeCJ9LDEwODI6e246''@;'; put 'put ''IkJydEVuZFNsaWNlckV4In0sMTA4Mzp7bjoiQnJ0QmVnaW5TbGljZXIifSwxMDg0OntuOiJCcnRFbmRTbGljZXIifSwxMDg1OntuOiJCcnRTbGljZXJDYWNoZVBpdm90VGFibGVzIn0sMTA4Njp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4Nzp7bjoiQnJ0RW5kU2xpY2Vy''@;'; put 'put ''Q2FjaGVPbGFwSW1wbCJ9LDEwODg6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA4OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA5MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTE6e246IkJydEVuZFNsaWNlckNhY2hlTGV2''@;'; put 'put ''ZWxEYXRhIn0sMTA5Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTQ6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5NTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5Njp7''@;'; put 'put ''bjoiQnJ0U2xpY2VyQ2FjaGVPbGFwSXRlbSJ9LDEwOTc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTA5ODp7bjoiQnJ0U2xpY2VyQ2FjaGVTZWxlY3Rpb24ifSwxMDk5OntuOiJCcnRFbmRTbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMTAwOntuOiJCcnRCZWdpblNsaWNl''@;'; put 'put ''ckNhY2hlTmF0aXZlIn0sMTEwMTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAyOntuOiJCcnRTbGljZXJDYWNoZU5hdGl2ZUl0ZW0ifSwxMTAzOntuOiJCcnRSYW5nZVByb3RlY3Rpb24xNCJ9LDExMDQ6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbzE0In0sMTEwNTp7bjoiQnJ0''@;'; put 'put ''Q2VsbElnbm9yZUVDMTQifSwxMTExOntuOiJCcnRMaXN0MTQifSwxMTEyOntuOiJCcnRDRkljb24ifSwxMTEzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNTp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''bGljZXJzIn0sMTExNjp7bjoiQnJ0RW5kU2xpY2VycyJ9LDExMTc6e246IkJydFdiUHJvcDE0In0sMTExODp7bjoiQnJ0QmVnaW5TWEVkaXQifSwxMTE5OntuOiJCcnRFbmRTWEVkaXQifSwxMTIwOntuOiJCcnRCZWdpblNYRWRpdHMifSwxMTIxOntuOiJCcnRFbmRTWEVkaXRzIn0sMTEyMjp7''@;'; put 'put ''bjoiQnJ0QmVnaW5TWENoYW5nZSJ9LDExMjM6e246IkJydEVuZFNYQ2hhbmdlIn0sMTEyNDp7bjoiQnJ0QmVnaW5TWENoYW5nZXMifSwxMTI1OntuOiJCcnRFbmRTWENoYW5nZXMifSwxMTI2OntuOiJCcnRTWFR1cGxlSXRlbXMifSwxMTI4OntuOiJCcnRCZWdpblNsaWNlclN0eWxlIn0sMTEy''@;'; put 'put ''OTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGUifSwxMTMwOntuOiJCcnRTbGljZXJTdHlsZUVsZW1lbnQifSwxMTMxOntuOiJCcnRCZWdpblN0eWxlU2hlZXRFeHQxNCJ9LDExMzI6e246IkJydEVuZFN0eWxlU2hlZXRFeHQxNCJ9LDExMzM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNo''@;'; put 'put ''ZUlEIn0sMTEzNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzc6e246IkJydEJlZ2luUENEQ2FsY01lbUV4dCJ9LDEx''@;'; put 'put ''Mzg6e246IkJydEVuZFBDRENhbGNNZW1FeHQifSwxMTM5OntuOiJCcnRCZWdpblBDRENhbGNNZW1zRXh0In0sMTE0MDp7bjoiQnJ0RW5kUENEQ2FsY01lbXNFeHQifSwxMTQxOntuOiJCcnRQQ0RGaWVsZDE0In0sMTE0Mjp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZXMifSwxMTQzOntuOiJCcnRF''@;'; put 'put ''bmRTbGljZXJTdHlsZXMifSwxMTQ0OntuOiJCcnRCZWdpblNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ1OntuOiJCcnRFbmRTbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0Njp7bjoiQnJ0Q0ZSdWxlRXh0In0sMTE0Nzp7bjoiQnJ0QmVnaW5TWENvbmRGbXQxNCJ9LDExNDg6e246IkJydEVuZFNY''@;'; put 'put ''Q29uZEZtdDE0In0sMTE0OTp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzMTQifSwxMTUwOntuOiJCcnRFbmRTWENvbmRGbXRzMTQifSwxMTUyOntuOiJCcnRCZWdpblNvcnRDb25kMTQifSwxMTUzOntuOiJCcnRFbmRTb3J0Q29uZDE0In0sMTE1NDp7bjoiQnJ0RW5kRFZhbHMxNCJ9LDExNTU6e246''@;'; put 'put ''IkJydEVuZEljb25TZXQxNCJ9LDExNTY6e246IkJydEVuZERhdGFiYXIxNCJ9LDExNTc6e246IkJydEJlZ2luQ29sb3JTY2FsZTE0In0sMTE1ODp7bjoiQnJ0RW5kQ29sb3JTY2FsZTE0In0sMTE1OTp7bjoiQnJ0QmVnaW5TeHJ1bGVzMTQifSwxMTYwOntuOiJCcnRFbmRTeHJ1bGVzMTQifSwx''@;'; put 'put ''MTYxOntuOiJCcnRCZWdpblBSdWxlMTQifSwxMTYyOntuOiJCcnRFbmRQUnVsZTE0In0sMTE2Mzp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMxNCJ9LDExNjQ6e246IkJydEVuZFBSRmlsdGVyczE0In0sMTE2NTp7bjoiQnJ0QmVnaW5QUkZpbHRlcjE0In0sMTE2Njp7bjoiQnJ0RW5kUFJGaWx0ZXIx''@;'; put 'put ''NCJ9LDExNjc6e246IkJydEJlZ2luUFJGSXRlbTE0In0sMTE2ODp7bjoiQnJ0RW5kUFJGSXRlbTE0In0sMTE2OTp7bjoiQnJ0QmVnaW5DZWxsSWdub3JlRUNzMTQifSwxMTcwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzMTQifSwxMTcxOntuOiJCcnREeGYxNCJ9LDExNzI6e246IkJydEJlZ2lu''@;'; put 'put ''RHhGMTRzIn0sMTE3Mzp7bjoiQnJ0RW5kRHhmMTRzIn0sMTE3Nzp7bjoiQnJ0RmlsdGVyMTQifSwxMTc4OntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMxNCJ9LDExODA6e246IkJydEN1c3RvbUZpbHRlcjE0In0sMTE4MTp7bjoiQnJ0SWNvbkZpbHRlcjE0In0sMTE4Mjp7bjoiQnJ0UGl2b3RD''@;'; put 'put ''YWNoZUNvbm5lY3Rpb25OYW1lIn0sMjA0ODp7bjoiQnJ0QmVnaW5EZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA0OTp7bjoiQnJ0RW5kRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNTA6e246IkJydERlY291cGxlZFBpdm90Q2FjaGVJRCJ9LDIwNTE6e246IkJydEJlZ2luUGl2b3RUYWJs''@;'; put 'put ''ZVJlZnMifSwyMDUyOntuOiJCcnRFbmRQaXZvdFRhYmxlUmVmcyJ9LDIwNTM6e246IkJydFBpdm90VGFibGVSZWYifSwyMDU0OntuOiJCcnRTbGljZXJDYWNoZUJvb2tQaXZvdFRhYmxlcyJ9LDIwNTU6e246IkJydEJlZ2luU3h2Y2VsbHMifSwyMDU2OntuOiJCcnRFbmRTeHZjZWxscyJ9LDIw''@;'; put 'put ''NTc6e246IkJydEJlZ2luU3hSb3cifSwyMDU4OntuOiJCcnRFbmRTeFJvdyJ9LDIwNjA6e246IkJydFBjZENhbGNNZW0xNSJ9LDIwNjc6e246IkJydFFzaTE1In0sMjA2ODp7bjoiQnJ0QmVnaW5XZWJFeHRlbnNpb25zIn0sMjA2OTp7bjoiQnJ0RW5kV2ViRXh0ZW5zaW9ucyJ9LDIwNzA6e246''@;'; put 'put ''IkJydFdlYkV4dGVuc2lvbiJ9LDIwNzE6e246IkJydEFic1BhdGgxNSJ9LDIwNzI6e246IkJydEJlZ2luUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDczOntuOiJCcnRFbmRQaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzU6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRHMifSwyMDc2OntuOiJC''@;'; put 'put ''cnRUYWJsZVNsaWNlckNhY2hlSUQifSwyMDc3OntuOiJCcnRCZWdpblRhYmxlU2xpY2VyQ2FjaGUifSwyMDc4OntuOiJCcnRFbmRUYWJsZVNsaWNlckNhY2hlIn0sMjA3OTp7bjoiQnJ0U3hGaWx0ZXIxNSJ9LDIwODA6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwy''@;'; put 'put ''MDgxOntuOiJCcnRFbmRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODI6e246IkJydFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSUQifSwyMDgzOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRHMifSwyMDg0OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSURzIn0sMjA4NTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5UaW1lbGluZUNhY2hlSUQifSwyMDg2OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSUQifSwyMDg3OntuOiJCcnRCZWdpblRpbWVsaW5lc0V4In0sMjA4ODp7bjoiQnJ0RW5kVGltZWxpbmVzRXgifSwyMDg5OntuOiJCcnRCZWdpblRpbWVsaW5lRXgifSwyMDkwOntuOiJCcnRFbmRUaW1l''@;'; put 'put ''bGluZUV4In0sMjA5MTp7bjoiQnJ0V29ya0Jvb2tQcjE1In0sMjA5Mjp7bjoiQnJ0UENESDE1In0sMjA5Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlIn0sMjA5NDp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZSJ9LDIwOTU6e246IkJydFRpbWVsaW5lU3R5bGVFbGVtZW50In0sMjA5Njp7bjoi''@;'; put 'put ''QnJ0QmVnaW5UaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTc6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5ODp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlcyJ9LDIwOTk6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzIn0sMjEwMDp7bjoiQnJ0QmVnaW5UaW1lbGlu''@;'; put 'put ''ZVN0eWxlRWxlbWVudHMifSwyMTAxOntuOiJCcnRFbmRUaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAyOntuOiJCcnREeGYxNSJ9LDIxMDM6e246IkJydEJlZ2luRHhmczE1In0sMjEwNDp7bjoiYnJ0RW5kRHhmczE1In0sMjEwNTp7bjoiQnJ0U2xpY2VyQ2FjaGVIaWRlSXRlbXNXaXRoTm9E''@;'; put 'put ''YXRhIn0sMjEwNjp7bjoiQnJ0QmVnaW5JdGVtVW5pcXVlTmFtZXMifSwyMTA3OntuOiJCcnRFbmRJdGVtVW5pcXVlTmFtZXMifSwyMTA4OntuOiJCcnRJdGVtVW5pcXVlTmFtZSJ9LDIxMDk6e246IkJydEJlZ2luRXh0Q29ubjE1In0sMjExMDp7bjoiQnJ0RW5kRXh0Q29ubjE1In0sMjExMTp7''@;'; put 'put ''bjoiQnJ0QmVnaW5PbGVkYlByMTUifSwyMTEyOntuOiJCcnRFbmRPbGVkYlByMTUifSwyMTEzOntuOiJCcnRCZWdpbkRhdGFGZWVkUHIxNSJ9LDIxMTQ6e246IkJydEVuZERhdGFGZWVkUHIxNSJ9LDIxMTU6e246IkJydFRleHRQcjE1In0sMjExNjp7bjoiQnJ0UmFuZ2VQcjE1In0sMjExNzp7''@;'; put 'put ''bjoiQnJ0RGJDb21tYW5kMTUifSwyMTE4OntuOiJCcnRCZWdpbkRiVGFibGVzMTUifSwyMTE5OntuOiJCcnRFbmREYlRhYmxlczE1In0sMjEyMDp7bjoiQnJ0RGJUYWJsZTE1In0sMjEyMTp7bjoiQnJ0QmVnaW5EYXRhTW9kZWwifSwyMTIyOntuOiJCcnRFbmREYXRhTW9kZWwifSwyMTIzOntu''@;'; put 'put ''OiJCcnRCZWdpbk1vZGVsVGFibGVzIn0sMjEyNDp7bjoiQnJ0RW5kTW9kZWxUYWJsZXMifSwyMTI1OntuOiJCcnRNb2RlbFRhYmxlIn0sMjEyNjp7bjoiQnJ0QmVnaW5Nb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI3OntuOiJCcnRFbmRNb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI4OntuOiJCcnRN''@;'; put 'put ''b2RlbFJlbGF0aW9uc2hpcCJ9LDIxMjk6e246IkJydEJlZ2luRUNUeHRXaXoxNSJ9LDIxMzA6e246IkJydEVuZEVDVHh0V2l6MTUifSwyMTMxOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0MTUifSwyMTMyOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdDE1In0sMjEzMzp7bjoiQnJ0QmVnaW5F''@;'; put 'put ''Q1RXRmxkSW5mbzE1In0sMjEzNDp7bjoiQnJ0RmllbGRMaXN0QWN0aXZlSXRlbSJ9LDIxMzU6e246IkJydFBpdm90Q2FjaGVJZFZlcnNpb24ifSwyMTM2OntuOiJCcnRTWERJMTUifSwyMTM3OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzg6e246IkJydEVuZE1vZGVsVGlt''@;'; put 'put ''ZUdyb3VwaW5ncyJ9LDIxMzk6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQwOntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZyJ9LDIxNDE6e246IkJydE1vZGVsVGltZUdyb3VwaW5nQ2FsY0NvbCJ9LDMwNzI6e246IkJydFVpZCJ9LDMwNzM6e246IkJydFJldmlzaW9uUHRy''@;'; put 'put ''In0sNTA5NTp7bjoiQnJ0QmVnaW5DYWxjRmVhdHVyZXMifSw1MDk2OntuOiJCcnRFbmRDYWxjRmVhdHVyZXMifSw1MDk3OntuOiJCcnRDYWxjRmVhdHVyZSJ9LDY1NTM1OntuOiIifX0sYjU9UGUobWYsIm4iKTtiNS5CcnRGUlRBcmNoSUQkPTE2O3ZhciBYMD17Njp7bjoiRm9ybXVsYSIsZjp6''@;'; put 'put ''M30sMTA6e246IkVPRiIsZjpQZH0sMTI6e246IkNhbGNDb3VudCIsZjpobH0sMTM6e246IkNhbGNNb2RlIixmOmhsfSwxNDp7bjoiQ2FsY1ByZWNpc2lvbiIsZjpTb30sMTU6e246IkNhbGNSZWZNb2RlIixmOlNvfSwxNjp7bjoiQ2FsY0RlbHRhIixmOm1hfSwxNzp7bjoiQ2FsY0l0ZXIiLGY6''@;'; put 'put ''U299LDE4OntuOiJQcm90ZWN0IixmOlNvfSwxOTp7bjoiUGFzc3dvcmQiLGY6aGx9LDIwOntuOiJIZWFkZXIiLGY6VjF9LDIxOntuOiJGb290ZXIiLGY6VjF9LDIzOntuOiJFeHRlcm5TaGVldCIsZjpTbX0sMjQ6e246IkxibCIsZjpOd30sMjU6e246IldpblByb3RlY3QiLGY6U299LDI2Ontu''@;'; put 'put ''OiJWZXJ0aWNhbFBhZ2VCcmVha3MifSwyNzp7bjoiSG9yaXpvbnRhbFBhZ2VCcmVha3MifSwyODp7bjoiTm90ZSIsZjpmdW5jdGlvbiB6dyh5LFAsTCl7cmV0dXJuIGZ1bmN0aW9uIEM5KHksUCxMKXtpZighKEwuYmlmZjw4KSl7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpLHJlPXkucmVhZF9zaGlm''@;'; put 'put ''dCgyKSxwZT15LnJlYWRfc2hpZnQoMiksX2U9eS5yZWFkX3NoaWZ0KDIpLHZlPVYyKHksMCxMKTtyZXR1cm4gTC5iaWZmPDgmJnkucmVhZF9zaGlmdCgxKSxbe3I6USxjOnJlfSx2ZSxfZSxwZV19fSh5LDAsTCl9fSwyOTp7bjoiU2VsZWN0aW9uIixmOmZ1bmN0aW9uIFMzKHksUCxMKXtyZXR1''@;'; put 'put ''cm4gTCYmTC5iaWZmPDU/KHkubCs9UCx7Y2VsbDp7cjowLGM6MH19KTooeS5yZWFkX3NoaWZ0KDEpLHtjZWxsOmRpKHtyOnkucmVhZF9zaGlmdCgyKSxjOnkucmVhZF9zaGlmdCgyKX0pfSl9fSwzNDp7bjoiRGF0ZTE5MDQiLGY6U299LDM1OntuOiJFeHRlcm5OYW1lIixmOmI5fSwzODp7bjoi''@;'; put 'put ''TGVmdE1hcmdpbiIsZjptYX0sMzk6e246IlJpZ2h0TWFyZ2luIixmOm1hfSw0MDp7bjoiVG9wTWFyZ2luIixmOm1hfSw0MTp7bjoiQm90dG9tTWFyZ2luIixmOm1hfSw0Mjp7bjoiUHJpbnRSb3dDb2wiLGY6U299LDQzOntuOiJQcmludEdyaWQiLGY6U299LDQ3OntuOiJGaWxlUGFzcyIsZjpm''@;'; put 'put ''dW5jdGlvbiBObCh5LFAsTCl7aWYoTC5lbmMpcmV0dXJuIEwuZW5jO3ZhciBRPXtUeXBlOkwuYmlmZj49OD95LnJlYWRfc2hpZnQoMik6MH07cmV0dXJuIFEuVHlwZT9mdW5jdGlvbiBnRCh5LFAsTCxRKXt2YXIgcmU9UXx8e307aWYocmUuSW5mbz15LnJlYWRfc2hpZnQoMikseS5sLT0yLDE9''@;'; put 'put ''PT1yZS5JbmZvKXtpZihyZS5EYXRhPWZ1bmN0aW9uIF9aKHkpe3ZhciBQPXt9LEw9UC5FbmNyeXB0aW9uVmVyc2lvbkluZm89RzAoeSw0KTtpZigxIT1MLk1ham9yfHwxIT1MLk1pbm9yKXRocm93InVucmVjb2duaXplZCB2ZXJzaW9uIGNvZGUgIitMLk1ham9yKyIgOiAiK0wuTWlub3I7cmV0''@;'; put 'put ''dXJuIFAuU2FsdD15LnJlYWRfc2hpZnQoMTYpLFAuRW5jcnlwdGVkVmVyaWZpZXI9eS5yZWFkX3NoaWZ0KDE2KSxQLkVuY3J5cHRlZFZlcmlmaWVySGFzaD15LnJlYWRfc2hpZnQoMTYpLFB9KHkpLEwucGFzc3dvcmQmJnR5cGVvZiBPNjwidSIpe3ZhciBwZT1PNihMLnBhc3N3b3JkLHJlLkRh''@;'; put 'put ''dGEuU2FsdCwiMDAwMDAwMDAiKSxfZT11ZShyZS5EYXRhLkVuY3J5cHRlZFZlcmlmaWVyK3JlLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXJIYXNoLCJoZXgiKSx2ZT14ZC5yYzQodWUocGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSxfZSk7US52YWxpZD14ZC5tZDUodmUuc2xpY2UoMCwxNikp''@;'; put 'put ''PT1CdWZmZXIuZnJvbSh2ZS5zbGljZSgxNikpLnRvU3RyaW5nKCJoZXgiKSxyZS5EYXRhLktleT1wZSxRLmluc2l0dT1mdW5jdGlvbiBvcih5LFApe3ZhciBMPW5ldyBBcnJheSgyNTYpLFE9MCxyZT0wLHBlPTAsX2U9MDtmdW5jdGlvbiB2ZShudCl7Zm9yKFE9MCxyZT0wLHBlPTAsX2U9MCxy''@;'; put 'put ''ZT0wOzI1NiE9cmU7KytyZSlMW3JlXT1yZTtmb3IocGU9MCxyZT0wOzI1NiE9cmU7KytyZSl7dHJ5e3BlPXBlK0xbcmVdK250W3JlJW50Lmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTV9Y2F0Y2goZHQpe3Rocm93IGNvbnNvbGUubG9nKHJlLG50W3JlJW50Lmxlbmd0aF0pLGR0fV9lPUxbcmVd''@;'; put 'put ''LExbcmVdPUxbcGVdLExbcGVdPV9lfXJlPXBlPTB9ZnVuY3Rpb24gU2UobnQpe3ZhciBkdD1HKG50Lmxlbmd0aCk7Zm9yKFE9MDtRIT1udC5sZW5ndGg7KytRKV9lPUxbcmU9cmUrMSYyNTVdLExbcmVdPUxbcGU9KHBlK0xbcmVdKSUyNTZdLExbcGVdPV9lLGR0W1FdPW50W1FdXkxbTFtyZV0r''@;'; put 'put ''TFtwZV0mMjU1XTtyZXR1cm4gQnVmZmVyLmZyb20oZHQpfXZhciBIZT15LktleSxWZT0wO3ZlKHVlKEhlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBHZT0wO3JldHVybiBmdW5jdGlvbihudCl7aWYoR2UrbnQubGVuZ3RoPDEwMjQpcmV0dXJuIEdlKz1udC5sZW5ndGgsU2UobnQp''@;'; put 'put ''O3ZhciBjdD0wLGJ0PXVlKG50LnNsaWNlKGN0LGN0KyhDdD0xMDI0LUdlKSkpO2N0Kz1DdCxHZT0wO3ZhciBGdD1TZShidCk7Zm9yKGN0PT1udC5sZW5ndGgmJigrK1ZlLEhlPU82KFAseS5TYWx0LFI2KFZlKSksdmUodWUoSGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2N0PG50Lmxl''@;'; put 'put ''bmd0aDspeysrVmUsSGU9TzYoUCx5LlNhbHQsUjYoVmUpKSx2ZShCdWZmZXIuZnJvbShIZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgQ3Q9TWF0aC5taW4oMTAyNCxudC5sZW5ndGgtY3QpO2J0PXVlKG50LnNsaWNlKGN0LGN0K0N0KSksY3QrPUN0LEdlPUN0LEZ0PUJ1ZmZlci5j''@;'; put 'put ''b25jYXQoW0Z0LFNlKGJ0KV0pfXJldHVybiBGdH19KHJlLkRhdGEsTC5wYXNzd29yZCl9fWVsc2UgaWYocmUuRGF0YT1mdW5jdGlvbiB2Wih5LFApe3ZhciBMPXt9LFE9TC5FbmNyeXB0aW9uVmVyc2lvbkluZm89RzAoeSw0KTtpZihQLT00LDIhPVEuTWlub3IpdGhyb3cgbmV3IEVycm9yKCJ1''@;'; put 'put ''bnJlY29nbml6ZWQgbWlub3IgdmVyc2lvbiBjb2RlOiAiK1EuTWlub3IpO2lmKFEuTWFqb3I+NHx8US5NYWpvcjwyKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24gY29kZTogIitRLk1ham9yKTtMLkZsYWdzPXkucmVhZF9zaGlmdCg0KSxQLT00O3ZhciByZT15''@;'; put 'put ''LnJlYWRfc2hpZnQoNCk7cmV0dXJuIFAtPTQsTC5FbmNyeXB0aW9uSGVhZGVyPUQ5KHkscmUpLEwuRW5jcnlwdGlvblZlcmlmaWVyPVJtKHksUC09cmUpLEx9KHksUCkscmUuRGF0YSYmcmUuRGF0YS5FbmNyeXB0aW9uSGVhZGVyJiYyNjYyNT09PXJlLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5B''@;'; put 'put ''bGdJRCYmTC5wYXNzd29yZCYmdHlwZW9mIG1yPCJ1Iil7dmFyIFNlPW1yKEwucGFzc3dvcmQscmUuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdC50b1N0cmluZygiaGV4IiksIjAwMDAwMDAwIiksSGU9cmUuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zOzU9PUhlfHxIZTxT''@;'; put 'put ''ZS5sZW5ndGgmJihTZT1TZS5zbGljZSgwLEhlKSk7dmFyIFZlPXVlKHJlLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVyLnRvU3RyaW5nKCJoZXgiKStyZS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5WZXJpZmllckhhc2gudG9TdHJpbmcoImhleCIpLCJoZXgiKSxHZT14ZC5yYzQo''@;'; put 'put ''U2UudG9TdHJpbmcoImJpbmFyeSIpLFZlKTtRLnZhbGlkPWVsKEdlLnNsaWNlKDAsSGUpLCJTSEExIikudG9TdHJpbmcoImhleCIpPT1HZS5zbGljZShIZSkudG9TdHJpbmcoImhleCIpLHJlLkRhdGEuS2V5PVNlLFEudmFsaWQmJihRLmluc2l0dT1mdW5jdGlvbiBqYyh5LFApe3ZhciBMPW5l''@;'; put 'put ''dyBBcnJheSgyNTYpLFE9MCxyZT0wLHBlPTAsX2U9MCx2ZT15LkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7ZnVuY3Rpb24gU2UoZHQpe2ZvcihkdD1CdWZmZXIuZnJvbShkdC5zbGljZSgwLHZlKSksUT0wLHJlPTAscGU9MCxfZT0wLHJlPTA7MjU2IT1yZTsrK3JlKUxbcmVdPXJlO2Zv''@;'; put 'put ''cihwZT0wLHJlPTA7MjU2IT1yZTsrK3JlKXt2YXIgQ3Q9ZHRbcmUlZHQubGVuZ3RoXTtwZT1wZStMW3JlXSsoInN0cmluZyI9PXR5cGVvZiBDdD9DdC5jaGFyQ29kZUF0KDApOkN0KSYyNTUsX2U9TFtyZV0sTFtyZV09TFtwZV0sTFtwZV09X2V9cmU9cGU9MH1mdW5jdGlvbiBIZShkdCl7dmFy''@;'; put 'put ''IEN0PUcoZHQubGVuZ3RoKTtmb3IoUT0wO1EhPWR0Lmxlbmd0aDsrK1EpX2U9TFtyZT1yZSsxJjI1NV0sTFtyZV09TFtwZT0ocGUrTFtyZV0pJTI1Nl0sTFtwZV09X2UsQ3RbUV09ZHRbUV1eTFtMW3JlXStMW3BlXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShDdCl9dmFyIFZlPXkuS2V5LEdl''@;'; put 'put ''PTA7U2UodWUoVmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIG50PTA7cmV0dXJuIGZ1bmN0aW9uKGR0KXtpZihudCtkdC5sZW5ndGg8MTAyNClyZXR1cm4gbnQrPWR0Lmxlbmd0aCxIZShkdCk7dmFyIGN0PTEwMjQtbnQsYnQ9MCxGdD1CdWZmZXIuZnJvbShkdC5zbGljZShidCxi''@;'; put 'put ''dCtjdCkpO2J0Kz1jdCxudD0wO3ZhciBFdD1IZShGdCk7Zm9yKGJ0PT1kdC5sZW5ndGgmJigrK0dlLFZlPW1yKFAseS5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxSNihHZSkpLFNlKEJ1ZmZlci5mcm9tKFZlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtidDxkdC5sZW5ndGg7KSsrR2Us''@;'; put 'put ''VmU9bXIoUCx5LkVuY3J5cHRpb25WZXJpZmllci5TYWx0LFI2KEdlKSksU2UoQnVmZmVyLmZyb20oVmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSksY3Q9TWF0aC5taW4oMTAyNCxkdC5sZW5ndGgtYnQpLEZ0PUJ1ZmZlci5mcm9tKGR0LnNsaWNlKGJ0LGJ0K2N0KSksYnQrPWN0LGN0PDEw''@;'; put 'put ''MjQmJihudD1jdCksRXQ9QnVmZmVyLmNvbmNhdChbRXQsSGUoRnQpXSk7cmV0dXJuIEV0fX0ocmUuRGF0YSxMLnBhc3N3b3JkKSl9cmV0dXJuIHJlfSh5LFAtMixMLFEpOmZ1bmN0aW9uIHBEKHksUCxMLFEpe3ZhciByZT17a2V5OmhsKHkpLHZlcmlmaWNhdGlvbkJ5dGVzOmhsKHkpfTtMLnBh''@;'; put 'put ''c3N3b3JkJiYocmUudmVyaWZpZXI9c0MoTC5wYXNzd29yZCkpLFEudmFsaWQ9cmUudmVyaWZpY2F0aW9uQnl0ZXM9PT1yZS52ZXJpZmllcixRLnZhbGlkJiYoUS5pbnNpdHU9ZnVuY3Rpb24oeSxQKXt2YXIgTD1QfHwwLFE9ZkQoeSk7cmV0dXJuIGZ1bmN0aW9uKHJlKXt2YXIgcGU9ZnVuY3Rp''@;'; put 'put ''b24oeSxQLEwsUSxyZSl7dmFyIHBlLF9lO2ZvcihyZXx8KHJlPVApLFF8fChRPWZEKCIiKSkscGU9MDtwZSE9UC5sZW5ndGg7KytwZSlfZT0yNTUmKChfZT1QW3BlXSk+PjV8X2U8PDMpLHJlW3BlXT1fZV49UVtMXSxMPUwrMSYxNTtyZXR1cm5bcmUsTCxRXX0oMCxyZSxMLFEpO3JldHVybiBM''@;'; put 'put ''PXBlWzFdLHBlWzBdfX0oTC5wYXNzd29yZCwwKSl9KHksMCxMLFEpLFF9fSw0OTp7bjoiRm9udCIsZjpmdW5jdGlvbiBPdyh5LFAsTCl7dmFyIFE9e3N6OnkucmVhZF9zaGlmdCgyKS8yMH0scmU9ZjQoeSk7cmUuZkJvbGQmJihRLmJvbGQ9MSkscmUuZkl0YWxpYyYmKFEuaXRhbGljPTEpLHJl''@;'; put 'put ''LmZVbmRlcmxpbmUmJihRLnVuZGVybGluZT0xKSxyZS5mQ29uZGVuc2UmJihRLmNvbmRlbnNlPTEpLHJlLmZFeHRlbmQmJihRLmV4dGVuZD0xKSxyZS5mU2hhZG93JiYoUS5zaGFkb3c9MSkscmUuZk91dGxpbmUmJihRLm91dGxpbmU9MSkscmUuZlN0cmlrZW91dCYmKFEuc3RyaWtlPTEpO3Zh''@;'; put 'put ''ciBwZT1MJiZMLmJpZmZ8fDg7aWYoMiE9cGUmJihRLmljdj15LnJlYWRfc2hpZnQoMiksMyE9cGUmJjQhPXBlKSl7c3dpdGNoKDcwMD09PXkucmVhZF9zaGlmdCgyKSYmKFEuYm9sZD0xKSx5LnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpRLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpRLnZh''@;'; put 'put ''bGlnbj0ic3ViIn12YXIgdmU9eS5yZWFkX3NoaWZ0KDEpOzAhPXZlJiYoUS51bmRlcmxpbmU9dmUpO3ZhciBTZT15LnJlYWRfc2hpZnQoMSk7U2U+MCYmKFEuZmFtaWx5PVNlKTt2YXIgSGU9eS5yZWFkX3NoaWZ0KDEpO0hlPjAmJihRLmNoYXJzZXQ9SGUpLHkubCs9MX1yZXR1cm4gUS5uYW1l''@;'; put 'put ''PUZkKHksMCxMKSxRfX0sNTE6e246IlByaW50U2l6ZSIsZjpobH0sNjA6e246IkNvbnRpbnVlIn0sNjE6e246IldpbmRvdzEiLGY6ZnVuY3Rpb24gUG8oeSl7cmV0dXJue1BvczpbeS5yZWFkX3NoaWZ0KDIpLHkucmVhZF9zaGlmdCgyKV0sRGltOlt5LnJlYWRfc2hpZnQoMikseS5yZWFkX3No''@;'; put 'put ''aWZ0KDIpXSxGbGFnczp5LnJlYWRfc2hpZnQoMiksQ3VyVGFiOnkucmVhZF9zaGlmdCgyKSxGaXJzdFRhYjp5LnJlYWRfc2hpZnQoMiksU2VsZWN0ZWQ6eS5yZWFkX3NoaWZ0KDIpLFRhYlJhdGlvOnkucmVhZF9zaGlmdCgyKX19fSw2NDp7bjoiQmFja3VwIixmOlNvfSw2NTp7bjoiUGFuZSIs''@;'; put 'put ''ZjpmdW5jdGlvbiBqVCh5LFAsTCl7aWYoTCYmTC5iaWZmPDUpcmV0dXJue307dmFyIFE9e307cmV0dXJuIFEueD15LnJlYWRfc2hpZnQoMiksUS55PXkucmVhZF9zaGlmdCgyKSxRLnJ3VG9wPXkucmVhZF9zaGlmdCgyKSxRLmNvbExlZnQ9eS5yZWFkX3NoaWZ0KDIpLFEucG5uQWNjdD15LnJl''@;'; put 'put ''YWRfc2hpZnQoMSkseS5yZWFkX3NoaWZ0KDEpLFF9fSw2Njp7bjoiQ29kZVBhZ2UiLGY6aGx9LDc3OntuOiJQbHMiLGY6YmN9LDgwOntuOiJEQ29uIn0sODE6e246IkRDb25SZWYifSw4Mjp7bjoiRENvbk5hbWUifSw4NTp7bjoiRGVmQ29sV2lkdGgiLGY6aGx9LDg5OntuOiJYQ1QifSw5MDp7''@;'; put 'put ''bjoiQ1JOIn0sOTE6e246IkZpbGVTaGFyaW5nIn0sOTI6e246IldyaXRlQWNjZXNzIixmOmZ1bmN0aW9uIHltKHksUCxMKXtpZihMLmVuYylyZXR1cm4geS5sKz1QLCIiO3ZhciBRPXkubCxyZT1WMih5LDAsTCk7cmV0dXJuIHkucmVhZF9zaGlmdChQK1EteS5sKSxyZX19LDkzOntuOiJPYmoi''@;'; put 'put ''LGY6ZnVuY3Rpb24gWXcoeSxQLEwpe2lmKEwmJkwuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBYVCh5LFAsTCl7eS5sKz00O3ZhciBRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMikscGU9eS5yZWFkX3NoaWZ0KDIpO3kubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTIs''@;'; put 'put ''eS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Njt2YXIgX2U9W107cmV0dXJuIF9lLnB1c2goKE1tW1FdfHxiYykoeSxQLT0zNixMKSkse2NtbzpbcmUsUSxwZV0sZnQ6X2V9fSh5LFAsTCk7dmFyIFE9VDQoeSkscmU9ZnVuY3Rpb24gWjAoeSxQLEwpe2Zvcih2YXIgUT15LmwrUCxy''@;'; put 'put ''ZT1bXTt5Lmw8UTspe3ZhciBwZT15LnJlYWRfc2hpZnQoMik7eS5sLT0yO3RyeXtyZVtwZV09Ym1bcGVdKHksUS15LmwpfWNhdGNoe3JldHVybiB5Lmw9USxyZX19cmV0dXJuIHkubCE9USYmKHkubD1RKSxyZX0oeSxQLTIyKTtyZXR1cm57Y21vOlEsZnQ6cmV9fX0sOTQ6e246IlVuY2FsY2Vk''@;'; put 'put ''In0sOTU6e246IkNhbGNTYXZlUmVjYWxjIixmOlNvfSw5Njp7bjoiVGVtcGxhdGUifSw5Nzp7bjoiSW50bCJ9LDk5OntuOiJPYmpQcm90ZWN0IixmOlNvfSwxMjU6e246IkNvbEluZm8iLGY6VmR9LDEyODp7bjoiR3V0cyIsZjpmdW5jdGlvbiBjWih5KXt5LmwrPTQ7dmFyIFA9W3kucmVhZF9z''@;'; put 'put ''aGlmdCgyKSx5LnJlYWRfc2hpZnQoMildO2lmKDAhPT1QWzBdJiZQWzBdLS0sMCE9PVBbMV0mJlBbMV0tLSxQWzBdPjd8fFBbMV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK1Auam9pbigifCIpKTtyZXR1cm4gUH19LDEyOTp7bjoiV3NCb29sIixmOmZ1bmN0aW9uIF9hKHks''@;'; put 'put ''UCxMKXt2YXIgUT1MJiY4PT1MLmJpZmZ8fDI9PVA/eS5yZWFkX3NoaWZ0KDIpOih5LmwrPVAsMCk7cmV0dXJue2ZEaWFsb2c6MTYmUSxmQmVsb3c6NjQmUSxmUmlnaHQ6MTI4JlF9fX0sMTMwOntuOiJHcmlkU2V0IixmOmhsfSwxMzE6e246IkhDZW50ZXIiLGY6U299LDEzMjp7bjoiVkNlbnRl''@;'; put 'put ''ciIsZjpTb30sMTMzOntuOiJCb3VuZFNoZWV0OCIsZjpmdW5jdGlvbiBJNCh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDQpLHJlPTMmeS5yZWFkX3NoaWZ0KDEpLHBlPXkucmVhZF9zaGlmdCgxKTtzd2l0Y2gocGUpe2Nhc2UgMDpwZT0iV29ya3NoZWV0IjticmVhaztjYXNlIDE6cGU9Ik1h''@;'; put 'put ''Y3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjpwZT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2OnBlPSJWQkFNb2R1bGUifXZhciBfZT1GZCh5LDAsTCk7cmV0dXJuIDA9PT1fZS5sZW5ndGgmJihfZT0iU2hlZXQxIikse3BvczpRLGhzOnJlLGR0OnBlLG5hbWU6X2V9fX0sMTM0OntuOiJXcml0ZVBy''@;'; put 'put ''b3RlY3QifSwxNDA6e246IkNvdW50cnkiLGY6ZnVuY3Rpb24gZUQoeSl7dmFyIEwsUD1bMCwwXTtyZXR1cm4gTD15LnJlYWRfc2hpZnQoMiksUFswXT1sbVtMXXx8TCxMPXkucmVhZF9zaGlmdCgyKSxQWzFdPWxtW0xdfHxMLFB9fSwxNDE6e246IkhpZGVPYmoiLGY6aGx9LDE0NDp7bjoiU29y''@;'; put 'put ''dCJ9LDE0Njp7bjoiUGFsZXR0ZSIsZjpmdW5jdGlvbiBXdyh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9W107UC0tID4wOylMLnB1c2goZDkoeSkpO3JldHVybiBMfX0sMTUxOntuOiJTeW5jIn0sMTUyOntuOiJMUHIifSwxNTM6e246IkR4R0NvbCJ9LDE1NDp7bjoiRm5Hcm91cE5h''@;'; put 'put ''bWUifSwxNTU6e246IkZpbHRlck1vZGUifSwxNTY6e246IkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGY6aGx9LDE1Nzp7bjoiQXV0b0ZpbHRlckluZm8ifSwxNTg6e246IkF1dG9GaWx0ZXIifSwxNjA6e246IlNjbCIsZjpxd30sMTYxOntuOiJTZXR1cCIsZjpmdW5jdGlvbiBFbSh5LFApe3ZhciBM''@;'; put 'put ''PXt9O3JldHVybiBQPDMyfHwoeS5sKz0xNixMLmhlYWRlcj1tYSh5KSxMLmZvb3Rlcj1tYSh5KSx5LmwrPTIpLEx9fSwxNzQ6e246IlNjZW5NYW4ifSwxNzU6e246IlNDRU5BUklPIn0sMTc2OntuOiJTeFZpZXcifSwxNzc6e246IlN4dmQifSwxNzg6e246IlNYVkkifSwxODA6e246IlN4SXZk''@;'; put 'put ''In0sMTgxOntuOiJTWExJIn0sMTgyOntuOiJTWFBJIn0sMTg0OntuOiJEb2NSb3V0ZSJ9LDE4NTp7bjoiUmVjaXBOYW1lIn0sMTg5OntuOiJNdWxSayIsZjpmdW5jdGlvbiBQdyh5LFApe2Zvcih2YXIgTD15LmwrUC0yLFE9eS5yZWFkX3NoaWZ0KDIpLHJlPXkucmVhZF9zaGlmdCgyKSxwZT1b''@;'; put 'put ''XTt5Lmw8TDspcGUucHVzaChwOSh5KSk7aWYoeS5sIT09TCl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIHJlYWQgZXJyb3IiKTt2YXIgX2U9eS5yZWFkX3NoaWZ0KDIpO2lmKHBlLmxlbmd0aCE9X2UtcmUrMSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybnty''@;'; put 'put ''OlEsYzpyZSxDOl9lLHJrcmVjOnBlfX19LDE5MDp7bjoiTXVsQmxhbmsiLGY6ZnVuY3Rpb24gTDQoeSxQKXtmb3IodmFyIEw9eS5sK1AtMixRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMikscGU9W107eS5sPEw7KXBlLnB1c2goeS5yZWFkX3NoaWZ0KDIpKTtpZih5LmwhPT1M''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciBfZT15LnJlYWRfc2hpZnQoMik7aWYocGUubGVuZ3RoIT1fZS1yZSsxKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgbGVuZ3RoIG1pc21hdGNoIik7cmV0dXJue3I6USxjOnJlLEM6X2UsaXhmZTpwZX19fSwxOTM6''@;'; put 'put ''e246Ik1tcyIsZjpQZH0sMTk3OntuOiJTWERJIn0sMTk4OntuOiJTWERCIn0sMTk5OntuOiJTWEZEQiJ9LDIwMDp7bjoiU1hEQkIifSwyMDE6e246IlNYTnVtIn0sMjAyOntuOiJTeEJvb2wiLGY6U299LDIwMzp7bjoiU3hFcnIifSwyMDQ6e246IlNYSW50In0sMjA1OntuOiJTWFN0cmluZyJ9''@;'; put 'put ''LDIwNjp7bjoiU1hEdHIifSwyMDc6e246IlN4TmlsIn0sMjA4OntuOiJTWFRibCJ9LDIwOTp7bjoiU1hUQlJHSUlUTSJ9LDIxMDp7bjoiU3hUYnBnIn0sMjExOntuOiJPYlByb2oifSwyMTM6e246IlNYU3RyZWFtSUQifSwyMTU6e246IkRCQ2VsbCJ9LDIxNjp7bjoiU1hSbmcifSwyMTc6e246''@;'; put 'put ''IlN4SXN4b3BlciJ9LDIxODp7bjoiQm9va0Jvb2wiLGY6aGx9LDIyMDp7bjoiRGJPclBhcmFtUXJ5In0sMjIxOntuOiJTY2VuYXJpb1Byb3RlY3QiLGY6U299LDIyMjp7bjoiT2xlT2JqZWN0U2l6ZSJ9LDIyNDp7bjoiWEYiLGY6ZnVuY3Rpb24gXzkoeSxQLEwpe3ZhciBRPXt9O3JldHVybiBR''@;'; put 'put ''LmlmbnQ9eS5yZWFkX3NoaWZ0KDIpLFEubnVtRm10SWQ9eS5yZWFkX3NoaWZ0KDIpLFEuZmxhZ3M9eS5yZWFkX3NoaWZ0KDIpLFEuZlN0eWxlPVEuZmxhZ3M+PjImMSxRLmRhdGE9ZnVuY3Rpb24gTjEoeSxQLEwsUSl7dmFyIHJlPXt9LHBlPXkucmVhZF9zaGlmdCg0KSxfZT15LnJlYWRfc2hp''@;'; put 'put ''ZnQoNCksdmU9eS5yZWFkX3NoaWZ0KDQpLFNlPXkucmVhZF9zaGlmdCgyKTtpZihyZS5wYXR0ZXJuVHlwZT12aVt2ZT4+MjZdLCFRLmNlbGxTdHlsZXMpcmV0dXJuIHJlO3ZhciBIZT03JnBlO3N3aXRjaChIZSl7Y2FzZSAxOnJlLmhhbGlnbj0ibGVmdCI7YnJlYWs7Y2FzZSAyOnJlLmhhbGln''@;'; put 'put ''bj0iY2VudGVyIjticmVhaztjYXNlIDM6cmUuaGFsaWduPSJyaWdodCJ9c3dpdGNoKHJlLmZXcmFwPXBlPj4zJjEsSGU9cGU+PjQmNyl7Y2FzZSAwOnJlLnZhbGlnbj0idG9wIjticmVhaztjYXNlIDE6cmUudmFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMjpyZS52YWxpZ249ImJvdHRvbSJ9''@;'; put 'put ''cmV0dXJuIHJlLmZKdXN0TGFzdD1wZT4+NyYxLHJlLnRyb3Q9cGU+PjgmMjU1LHJlLmNJbmRlbnQ9cGU+PjE2JjE1LHJlLmZTaHJpbmtUb0ZpdD1wZT4+MjAmMSxyZS5pUmVhZE9yZGVyPXBlPj4yMiYyLHJlLmZBdHJOdW09cGU+PjI2JjEscmUuZkF0ckZudD1wZT4+MjcmMSxyZS5mQXRyQWxj''@;'; put 'put ''PXBlPj4yOCYxLHJlLmZBdHJCZHI9cGU+PjI5JjEscmUuZkF0clBhdD1wZT4+MzAmMSxyZS5mQXRyUHJvdD1wZT4+MzEmMSxyZS5kZ0xlZnQ9MTUmX2UscmUuZGdSaWdodD1fZT4+NCYxNSxyZS5kZ1RvcD1fZT4+OCYxNSxyZS5kZ0JvdHRvbT1fZT4+MTImMTUscmUuaWN2TGVmdD1fZT4+MTYm''@;'; put 'put ''MTI3LHJlLmljdlJpZ2h0PV9lPj4yMyYxMjcscmUuZ3JiaXREaWFnPV9lPj4zMCYzLHJlLmljdlRvcD0xMjcmdmUscmUuaWN2Qm90dG9tPXZlPj43JjEyNyxyZS5pY3ZEaWFnPXZlPj4xNCYxMjcscmUuZGdEaWFnPXZlPj4yMSYxNSxyZS5pY3ZGb3JlPTEyNyZTZSxyZS5pY3ZCYWNrPVNlPj43''@;'; put 'put ''JjEyNyxyZS5mc3hCdXR0b249U2U+PjE0JjEscmV9KHksMCwwLEwpLFF9fSwyMjU6e246IkludGVyZmFjZUhkciIsZjpmdW5jdGlvbiBoMCh5LFApe3JldHVybiAwPT09UHx8eS5yZWFkX3NoaWZ0KDIpLDEyMDB9fSwyMjY6e246IkludGVyZmFjZUVuZCIsZjpQZH0sMjI3OntuOiJTWFZTIn0s''@;'; put 'put ''MjI5OntuOiJNZXJnZUNlbGxzIixmOmZ1bmN0aW9uIFV3KHksUCl7Zm9yKHZhciBMPVtdLFE9eS5yZWFkX3NoaWZ0KDIpO1EtLTspTC5wdXNoKEtoKHkpKTtyZXR1cm4gTH19LDIzMzp7bjoiQmtIaW0ifSwyMzU6e246Ik1zb0RyYXdpbmdHcm91cCJ9LDIzNjp7bjoiTXNvRHJhd2luZyJ9LDIz''@;'; put 'put ''Nzp7bjoiTXNvRHJhd2luZ1NlbGVjdGlvbiJ9LDIzOTp7bjoiUGhvbmV0aWNJbmZvIn0sMjQwOntuOiJTeFJ1bGUifSwyNDE6e246IlNYRXgifSwyNDI6e246IlN4RmlsdCJ9LDI0NDp7bjoiU3hEWEYifSwyNDU6e246IlN4SXRtIn0sMjQ2OntuOiJTeE5hbWUifSwyNDc6e246IlN4U2VsZWN0''@;'; put 'put ''In0sMjQ4OntuOiJTWFBhaXIifSwyNDk6e246IlN4Rm1sYSJ9LDI1MTp7bjoiU3hGb3JtYXQifSwyNTI6e246IlNTVCIsZjpmdW5jdGlvbiBIbCh5LFApe2Zvcih2YXIgTD15LmwrUCxRPXkucmVhZF9zaGlmdCg0KSxyZT15LnJlYWRfc2hpZnQoNCkscGU9W10sX2U9MDtfZSE9cmUmJnkubDxM''@;'; put 'put ''OysrX2UpcGUucHVzaChnbSh5KSk7cmV0dXJuIHBlLkNvdW50PVEscGUuVW5pcXVlPXJlLHBlfX0sMjUzOntuOiJMYWJlbFNzdCIsZjpmdW5jdGlvbiBVVCh5KXt2YXIgUD1MdSh5KTtyZXR1cm4gUC5pc3N0PXkucmVhZF9zaGlmdCg0KSxQfX0sMjU1OntuOiJFeHRTU1QiLGY6ZnVuY3Rpb24g''@;'; put 'put ''a2UoeSxQKXt2YXIgTD17fTtyZXR1cm4gTC5kc3N0PXkucmVhZF9zaGlmdCgyKSx5LmwrPVAtMixMfX0sMjU2OntuOiJTWFZERXgifSwyNTk6e246IlNYRm9ybXVsYSJ9LDI5MDp7bjoiU1hEQkV4In0sMzExOntuOiJSUkRJbnNEZWwifSwzMTI6e246IlJSREhlYWQifSwzMTU6e246IlJSRENo''@;'; put 'put ''Z0NlbGwifSwzMTc6e246IlJSVGFiSWQiLGY6SDF9LDMxODp7bjoiUlJEUmVuU2hlZXQifSwzMTk6e246IlJSU29ydCJ9LDMyMDp7bjoiUlJETW92ZSJ9LDMzMDp7bjoiUlJGb3JtYXQifSwzMzE6e246IlJSQXV0b0ZtdCJ9LDMzMzp7bjoiUlJJbnNlcnRTaCJ9LDMzNDp7bjoiUlJETW92ZUJl''@;'; put 'put ''Z2luIn0sMzM1OntuOiJSUkRNb3ZlRW5kIn0sMzM2OntuOiJSUkRJbnNEZWxCZWdpbiJ9LDMzNzp7bjoiUlJESW5zRGVsRW5kIn0sMzM4OntuOiJSUkRDb25mbGljdCJ9LDMzOTp7bjoiUlJERGVmTmFtZSJ9LDM0MDp7bjoiUlJEUnN0RXR4cCJ9LDM1MTp7bjoiTFJuZyJ9LDM1Mjp7bjoiVXNl''@;'; put 'put ''c0VMRnMiLGY6U299LDM1Mzp7bjoiRFNGIixmOlBkfSw0MDE6e246IkNVc3IifSw0MDI6e246IkNiVXNyIn0sNDAzOntuOiJVc3JJbmZvIn0sNDA0OntuOiJVc3JFeGNsIn0sNDA1OntuOiJGaWxlTG9jayJ9LDQwNjp7bjoiUlJESW5mbyJ9LDQwNzp7bjoiQkNVc3JzIn0sNDA4OntuOiJVc3JD''@;'; put 'put ''aGsifSw0MjU6e246IlVzZXJCVmlldyJ9LDQyNjp7bjoiVXNlclNWaWV3QmVnaW4ifSw0Mjc6e246IlVzZXJTVmlld0VuZCJ9LDQyODp7bjoiUlJEVXNlclZpZXcifSw0Mjk6e246IlFzaSJ9LDQzMDp7bjoiU3VwQm9vayIsZjpmdW5jdGlvbiBxVCh5LFAsTCl7dmFyIFE9eS5sK1AscmU9eS5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9zaGlmdCgyKTtpZihMLnNiY2NoPXBlLDEwMjU9PXBlfHwxNDg0OT09cGUpcmV0dXJuW3BlLHJlXTtpZihwZTwxfHxwZT4yNTUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogIitwZSk7Zm9yKHZhciBfZT1IZCh5LHBlKSx2''@;'; put 'put ''ZT1bXTtRPnkubDspdmUucHVzaChOMih5KSk7cmV0dXJuW3BlLHJlLF9lLHZlXX19LDQzMTp7bjoiUHJvdDRSZXYiLGY6U299LDQzMjp7bjoiQ29uZEZtdCJ9LDQzMzp7bjoiQ0YifSw0MzQ6e246IkRWYWwifSw0Mzc6e246IkRDb25CaW4ifSw0Mzg6e246IlR4TyIsZjpmdW5jdGlvbiBKVCh5''@;'; put 'put ''LFAsTCl7dmFyIFE9eS5sLHJlPSIiLHBlPS0xO3RyeXt5LmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoTC5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT95LmwrPTY6ZnVuY3Rpb24gRHUoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpO3kubCsrO3ZhciBMPXkucmVhZF9z''@;'; put 'put ''aGlmdCgyKTt5LmwrPTJ9KHkpO3ZhciBTZT15LnJlYWRfc2hpZnQoMik7eS5yZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9zaGlmdCgyKTt2YXIgVmU9eS5yZWFkX3NoaWZ0KDIpO3kubCs9VmU7Zm9yKHZhciBHZT0xO0dlPHkubGVucy5sZW5ndGgtMTsrK0dlKXtpZih5LmwtUSE9eS5sZW5zW0dl''@;'; put 'put ''XSl0aHJvdyBuZXcgRXJyb3IoIlR4TzogYmFkIGNvbnRpbnVlIHJlY29yZCIpO3ZhciBudD15W3kubF07aWYoKHJlKz1IZCh5LHkubGVuc1tHZSsxXS15LmxlbnNbR2VdLTEpKS5sZW5ndGg+PShudD9TZToyKlNlKSlicmVha31pZihyZS5sZW5ndGghPT1TZSYmcmUubGVuZ3RoIT09MipTZSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImNjaFRleHQ6ICIrU2UrIiAhPSAiK3JlLmxlbmd0aCk7cmV0dXJuIHkubD1RK1Ase3Q6cmUsaWZudDpwZX19Y2F0Y2h7cmV0dXJuIHkubD1RK1Ase3Q6cmUsaWZudDpwZX19fX0sNDM5OntuOiJSZWZyZXNoQWxsIixmOlNvfSw0NDA6e246IkhMaW5rIixmOmZ1bmN0''@;'; put 'put ''aW9uIGV1KHksUCl7dmFyIEw9S2goeSk7eS5sKz0xNjt2YXIgUT1mdW5jdGlvbiBJdSh5LFApe3ZhciBMPXkubCtQLFE9eS5yZWFkX3NoaWZ0KDQpO2lmKDIhPT1RKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHN0cmVhbVZlcnNpb246ICIrUSk7dmFyIHJlPXkucmVhZF9zaGlmdCgy''@;'; put 'put ''KTt5LmwrPTI7dmFyIHBlLF9lLHZlLFNlLFZlLEdlLEhlPSIiOzE2JnJlJiYocGU9QTQoeSkpLDEyOCZyZSYmKF9lPUE0KHkpKSwyNTc9PSgyNTcmcmUpJiYodmU9QTQoeSkpLDE9PSgyNTcmcmUpJiYoU2U9ZnVuY3Rpb24gdjMoeSxQKXt2YXIgTD15LnJlYWRfc2hpZnQoMTYpO3N3aXRjaChM''@;'; put 'put ''KXtjYXNlImUwYzllYTc5ZjliYWNlMTE4YzgyMDBhYTAwNGJhOTBiIjpyZXR1cm4gZnVuY3Rpb24gbTMoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9eS5sLFE9ITE7UD4yNCYmKHkubCs9UC0yNCwiNzk1ODgxZjQzYjFkN2Y0OGFmMmM4MjVkYzQ4NTI3NjMiPT09eS5yZWFkX3NoaWZ0KDE2''@;'; put 'put ''KSYmKFE9ITApLHkubD1MKTt2YXIgcmU9eS5yZWFkX3NoaWZ0KChRP1AtMjQ6UCk+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKHYsIiIpO3JldHVybiBRJiYoeS5sKz0yNCkscmV9KHkpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBmbCh5KXtm''@;'; put 'put ''b3IodmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9IiI7UC0tID4wOylMKz0iLi4vIjt2YXIgUT15LnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKHkubCs9Miw1NzAwNSE9eS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PXkucmVhZF9z''@;'; put 'put ''aGlmdCg0KSlyZXR1cm4gTCtRLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgcGU9eS5yZWFkX3NoaWZ0KDQpO2lmKDMhPXkucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO3JldHVybiBMK3kucmVhZF9zaGlmdChwZT4+MSwidXRmMTZsZSIpLnJlcGxhY2Uo''@;'; put 'put ''diwiIil9KHkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNb25pa2VyICIrTCl9fSh5KSksOCZyZSYmKEhlPUE0KHkpKSwzMiZyZSYmKFZlPXkucmVhZF9zaGlmdCgxNikpLDY0JnJlJiYoR2U9Q2MoeSkpLHkubD1MO3ZhciBudD1fZXx8dmV8fFNlfHwiIjtudCYmSGUm''@;'; put 'put ''JihudCs9IiMiK0hlKSxudHx8KG50PSIjIitIZSksMiZyZSYmIi8iPT1udC5jaGFyQXQoMCkmJiIvIiE9bnQuY2hhckF0KDEpJiYobnQ9ImZpbGU6Ly8iK250KTt2YXIgZHQ9e1RhcmdldDpudH07cmV0dXJuIFZlJiYoZHQuZ3VpZD1WZSksR2UmJihkdC50aW1lPUdlKSxwZSYmKGR0LlRvb2x0''@;'; put 'put ''aXA9cGUpLGR0fSh5LFAtMjQpO3JldHVybltMLFFdfX0sNDQxOntuOiJMZWwifSw0NDI6e246IkNvZGVOYW1lIixmOk4yfSw0NDM6e246IlNYRkRCVHlwZSJ9LDQ0NDp7bjoiUHJvdDRSZXZQYXNzIixmOmhsfSw0NDU6e246Ik9iTm9NYWNyb3MifSw0NDY6e246IkR2In0sNDQ4OntuOiJFeGNl''@;'; put 'put ''bDlGaWxlIixmOlBkfSw0NDk6e246IlJlY2FsY0lkIixmOmZ1bmN0aW9uIGYwKHkpe3JldHVybiB5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KDQpfSxyOjJ9LDQ1MDp7bjoiRW50RXhVMiIsZjpQZH0sNTEyOntuOiJEaW1lbnNpb25zIixmOkJ0fSw1MTM6e246IkJsYW5rIixmOiR3fSw1''@;'; put 'put ''MTU6e246Ik51bWJlciIsZjpmdW5jdGlvbiBIdyh5LFAsTCl7TC5iaWZmZ3Vlc3MmJjI9PUwuYmlmZiYmKEwuYmlmZj01KTt2YXIgUT1MdSh5KSxyZT1tYSh5KTtyZXR1cm4gUS52YWw9cmUsUX19LDUxNjp7bjoiTGFiZWwiLGY6ZnVuY3Rpb24gWVQoeSxQLEwpe0wuYmlmZmd1ZXNzJiYyPT1M''@;'; put 'put ''LmJpZmYmJihMLmJpZmY9NSk7dmFyIHJlPUx1KHkpOzI9PUwuYmlmZiYmeS5sKys7dmFyIHBlPU4yKHksMCxMKTtyZXR1cm4gcmUudmFsPXBlLHJlfX0sNTE3OntuOiJCb29sRXJyIixmOk5jfSw1MTk6e246IlN0cmluZyIsZjppRH0sNTIwOntuOiJSb3ciLGY6ZnVuY3Rpb24gJGUoeSl7dmFy''@;'; put 'put ''IFA9e307UC5yPXkucmVhZF9zaGlmdCgyKSxQLmM9eS5yZWFkX3NoaWZ0KDIpLFAuY250PXkucmVhZF9zaGlmdCgyKS1QLmM7dmFyIEw9eS5yZWFkX3NoaWZ0KDIpO3kubCs9NDt2YXIgUT15LnJlYWRfc2hpZnQoMSk7eS5sKz0xO3ZhciByZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIFAuaXhm''@;'; put 'put ''ZT00MDk1JnJlLDcmUSYmKFAubGV2ZWw9NyZRKSwzMiZRJiYoUC5oaWRkZW49ITApLDY0JlEmJihQLmhwdD1MLzIwKSxQfX0sNTIzOntuOiJJbmRleCJ9LDU0NTp7bjoiQXJyYXkiLGY6Qnd9LDU0OTp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpXMH0sNTY2OntuOiJUYWJsZSJ9LDU3NDp7bjoi''@;'; put 'put ''V2luZG93MiIsZjpmdW5jdGlvbiBsWih5LFAsTCl7aWYoTCYmTC5iaWZmPj0yJiZMLmJpZmY8NSlyZXR1cm57fTt2YXIgUT15LnJlYWRfc2hpZnQoMik7cmV0dXJue1JUTDo2NCZRLGdyaWQ6ISEoMiZRKSxmcm96ZW46ISEoOCZRKX19fSw2Mzg6e246IlJLIixmOmZ1bmN0aW9uIFNjKHkpe3Zh''@;'; put 'put ''ciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKSxRPXA5KHkpO3JldHVybntyOlAsYzpMLGl4ZmU6UVswXSxya251bTpRWzFdfX19LDY1OTp7bjoiU3R5bGUiLGY6ZnVuY3Rpb24gJFQoeSxQLEwpe3JldHVybiB5LmwrPVAse319fSwxMDQ4OntuOiJCaWdOYW1lIn0sMTA1NDp7''@;'; put 'put ''bjoiRm9ybWF0IixmOmZ1bmN0aW9uIEdUKHksUCxMKXtyZXR1cm5beS5yZWFkX3NoaWZ0KDIpLFYyKHksMCxMKV19fSwxMDg0OntuOiJDb250aW51ZUJpZ05hbWUifSwxMjEyOntuOiJTaHJGbWxhIixmOmZ1bmN0aW9uIHc5KHksUCxMKXt2YXIgUT1fbSh5KTt5LmwrKzt2YXIgcmU9eS5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpO3JldHVybltpNSh5LFAtPTgsTCkscmUsUV19fSwyMDQ4OntuOiJITGlua1Rvb2x0aXAiLGY6ZnVuY3Rpb24gUWEoeSxQKXt5LnJlYWRfc2hpZnQoMik7dmFyIEw9S2goeSksUT15LnJlYWRfc2hpZnQoKFAtMTApLzIsImRiY3MtY29udCIpO3JldHVybltMLFE9US5yZXBsYWNl''@;'; put 'put ''KHYsIiIpXX19LDIwNDk6e246IldlYlB1YiJ9LDIwNTA6e246IlFzaVNYVGFnIn0sMjA1MTp7bjoiREJRdWVyeUV4dCJ9LDIwNTI6e246IkV4dFN0cmluZyJ9LDIwNTM6e246IlR4dFFyeSJ9LDIwNTQ6e246IlFzaXIifSwyMDU1OntuOiJRc2lmIn0sMjA1Njp7bjoiUlJEVFFTSUYifSwyMDU3''@;'; put 'put ''OntuOiJCT0YiLGY6UnV9LDIwNTg6e246Ik9sZURiQ29ubiJ9LDIwNTk6e246IldPcHQifSwyMDYwOntuOiJTWFZpZXdFeCJ9LDIwNjE6e246IlNYVEgifSwyMDYyOntuOiJTWFBJRXgifSwyMDYzOntuOiJTWFZEVEV4In0sMjA2NDp7bjoiU1hWaWV3RXg5In0sMjA2Njp7bjoiQ29udGludWVG''@;'; put 'put ''cnQifSwyMDY3OntuOiJSZWFsVGltZURhdGEifSwyMTI4OntuOiJDaGFydEZydEluZm8ifSwyMTI5OntuOiJGcnRXcmFwcGVyIn0sMjEzMDp7bjoiU3RhcnRCbG9jayJ9LDIxMzE6e246IkVuZEJsb2NrIn0sMjEzMjp7bjoiU3RhcnRPYmplY3QifSwyMTMzOntuOiJFbmRPYmplY3QifSwyMTM0''@;'; put 'put ''OntuOiJDYXRMYWIifSwyMTM1OntuOiJZTXVsdCJ9LDIxMzY6e246IlNYVmlld0xpbmsifSwyMTM3OntuOiJQaXZvdENoYXJ0Qml0cyJ9LDIxMzg6e246IkZydEZvbnRMaXN0In0sMjE0Njp7bjoiU2hlZXRFeHQifSwyMTQ3OntuOiJCb29rRXh0IixyOjEyfSwyMTQ4OntuOiJTWEFkZGwifSwy''@;'; put 'put ''MTQ5OntuOiJDckVyciJ9LDIxNTA6e246IkhGUGljdHVyZSJ9LDIxNTE6e246IkZlYXRIZHIiLGY6UGR9LDIxNTI6e246IkZlYXQifSwyMTU0OntuOiJEYXRhTGFiRXh0In0sMjE1NTp7bjoiRGF0YUxhYkV4dENvbnRlbnRzIn0sMjE1Njp7bjoiQ2VsbFdhdGNoIn0sMjE2MTp7bjoiRmVhdEhk''@;'; put 'put ''cjExIn0sMjE2Mjp7bjoiRmVhdHVyZTExIn0sMjE2NDp7bjoiRHJvcERvd25PYmpJZHMifSwyMTY1OntuOiJDb250aW51ZUZydDExIn0sMjE2Njp7bjoiRENvbm4ifSwyMTY3OntuOiJMaXN0MTIifSwyMTY4OntuOiJGZWF0dXJlMTIifSwyMTY5OntuOiJDb25kRm10MTIifSwyMTcwOntuOiJD''@;'; put 'put ''RjEyIn0sMjE3MTp7bjoiQ0ZFeCJ9LDIxNzI6e246IlhGQ1JDIixmOmZ1bmN0aW9uIHhtKHkpe3kubCs9Mjt2YXIgUD17Y3hmczowLGNyYzowfTtyZXR1cm4gUC5jeGZzPXkucmVhZF9zaGlmdCgyKSxQLmNyYz15LnJlYWRfc2hpZnQoNCksUH0scjoxMn0sMjE3Mzp7bjoiWEZFeHQiLGY6ZnVu''@;'; put 'put ''Y3Rpb24gekQoeSxQKXt5LmwrPTI7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpO3kubCs9Mjtmb3IodmFyIHJlPXkucmVhZF9zaGlmdCgyKSxwZT1bXTtyZS0tID4wOylwZS5wdXNoKGpEKHkpKTtyZXR1cm57aXhmZTpRLGV4dDpwZX19LHI6MTJ9LDIxNzQ6e246IkF1dG9GaWx0ZXIxMiJ9LDIxNzU6''@;'; put 'put ''e246IkNvbnRpbnVlRnJ0MTIifSwyMTgwOntuOiJNRFRJbmZvIn0sMjE4MTp7bjoiTURYU3RyIn0sMjE4Mjp7bjoiTURYVHVwbGUifSwyMTgzOntuOiJNRFhTZXQifSwyMTg0OntuOiJNRFhQcm9wIn0sMjE4NTp7bjoiTURYS1BJIn0sMjE4Njp7bjoiTURCIn0sMjE4Nzp7bjoiUExWIn0sMjE4''@;'; put 'put ''ODp7bjoiQ29tcGF0MTIiLGY6U28scjoxMn0sMjE4OTp7bjoiRFhGIn0sMjE5MDp7bjoiVGFibGVTdHlsZXMiLHI6MTJ9LDIxOTE6e246IlRhYmxlU3R5bGUifSwyMTkyOntuOiJUYWJsZVN0eWxlRWxlbWVudCJ9LDIxOTQ6e246IlN0eWxlRXh0In0sMjE5NTp7bjoiTmFtZVB1Ymxpc2gifSwy''@;'; put 'put ''MTk2OntuOiJOYW1lQ210IixmOmZ1bmN0aW9uIFZ3KHksUCxMKXtpZighKEwuYmlmZjw4KSl7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpLHJlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm5bSGQoeSxRLEwpLEhkKHkscmUsTCldfXkubCs9UH0scjoxMn0sMjE5Nzp7bjoiU29ydERhdGEifSwyMTk4Ontu''@;'; put 'put ''OiJUaGVtZSIsZjpmdW5jdGlvbiAkbSh5LFAsTCl7dmFyIFE9eS5sK1A7aWYoMTI0MjI2IT09eS5yZWFkX3NoaWZ0KDQpKXtpZighTC5jZWxsU3R5bGVzKXJldHVybiB2b2lkKHkubD1RKTt2YXIgX2UscGU9eS5zbGljZSh5LmwpO3kubD1RO3RyeXtfZT14bihwZSx7dHlwZToiYXJyYXkifSl9''@;'; put 'put ''Y2F0Y2h7cmV0dXJufXZhciB2ZT1KdChfZSwidGhlbWUvdGhlbWUvdGhlbWUxLnhtbCIsITApO2lmKHZlKXJldHVybiBHbSh2ZSxMKX19LHI6MTJ9LDIxOTk6e246IkdVSURUeXBlTGliIn0sMjIwMDp7bjoiRm5HcnAxMiJ9LDIyMDE6e246Ik5hbWVGbkdycDEyIn0sMjIwMjp7bjoiTVRSU2V0''@;'; put 'put ''dGluZ3MiLGY6ZnVuY3Rpb24gancoeSl7cmV0dXJuWzAhPT15LnJlYWRfc2hpZnQoNCksMCE9PXkucmVhZF9zaGlmdCg0KSx5LnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntuOiJDb21wcmVzc1BpY3R1cmVzIixmOlBkfSwyMjA0OntuOiJIZWFkZXJGb290ZXIifSwyMjA1OntuOiJDcnRM''@;'; put 'put ''YXlvdXQxMiJ9LDIyMDY6e246IkNydE1sRnJ0In0sMjIwNzp7bjoiQ3J0TWxGcnRDb250aW51ZSJ9LDIyMTE6e246IkZvcmNlRnVsbENhbGN1bGF0aW9uIixmOmZ1bmN0aW9uIEx0KHkpe3ZhciBQPWZ1bmN0aW9uIGg5KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgy''@;'; put 'put ''KTtyZXR1cm4geS5sKz04LHt0eXBlOlAsZmxhZ3M6TH19KHkpO2lmKDIyMTEhPVAudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRnV0dXJlIFJlY29yZCAiK1AudHlwZSk7cmV0dXJuIDAhPT15LnJlYWRfc2hpZnQoNCl9fSwyMjEyOntuOiJTaGFwZVByb3BzU3RyZWFtIn0sMjIxMzp7''@;'; put 'put ''bjoiVGV4dFByb3BzU3RyZWFtIn0sMjIxNDp7bjoiUmljaFRleHRTdHJlYW0ifSwyMjE1OntuOiJDcnRMYXlvdXQxMkEifSw0MDk3OntuOiJVbml0cyJ9LDQwOTg6e246IkNoYXJ0In0sNDA5OTp7bjoiU2VyaWVzIn0sNDEwMjp7bjoiRGF0YUZvcm1hdCJ9LDQxMDM6e246IkxpbmVGb3JtYXQi''@;'; put 'put ''fSw0MTA1OntuOiJNYXJrZXJGb3JtYXQifSw0MTA2OntuOiJBcmVhRm9ybWF0In0sNDEwNzp7bjoiUGllRm9ybWF0In0sNDEwODp7bjoiQXR0YWNoZWRMYWJlbCJ9LDQxMDk6e246IlNlcmllc1RleHQifSw0MTE2OntuOiJDaGFydEZvcm1hdCJ9LDQxMTc6e246IkxlZ2VuZCJ9LDQxMTg6e246''@;'; put 'put ''IlNlcmllc0xpc3QifSw0MTE5OntuOiJCYXIifSw0MTIwOntuOiJMaW5lIn0sNDEyMTp7bjoiUGllIn0sNDEyMjp7bjoiQXJlYSJ9LDQxMjM6e246IlNjYXR0ZXIifSw0MTI0OntuOiJDcnRMaW5lIn0sNDEyNTp7bjoiQXhpcyJ9LDQxMjY6e246IlRpY2sifSw0MTI3OntuOiJWYWx1ZVJhbmdl''@;'; put 'put ''In0sNDEyODp7bjoiQ2F0U2VyUmFuZ2UifSw0MTI5OntuOiJBeGlzTGluZSJ9LDQxMzA6e246IkNydExpbmsifSw0MTMyOntuOiJEZWZhdWx0VGV4dCJ9LDQxMzM6e246IlRleHQifSw0MTM0OntuOiJGb250WCIsZjpobH0sNDEzNTp7bjoiT2JqZWN0TGluayJ9LDQxNDY6e246IkZyYW1lIn0s''@;'; put 'put ''NDE0Nzp7bjoiQmVnaW4ifSw0MTQ4OntuOiJFbmQifSw0MTQ5OntuOiJQbG90QXJlYSJ9LDQxNTQ6e246IkNoYXJ0M2QifSw0MTU2OntuOiJQaWNGIn0sNDE1Nzp7bjoiRHJvcEJhciJ9LDQxNTg6e246IlJhZGFyIn0sNDE1OTp7bjoiU3VyZiJ9LDQxNjA6e246IlJhZGFyQXJlYSJ9LDQxNjE6''@;'; put 'put ''e246IkF4aXNQYXJlbnQifSw0MTYzOntuOiJMZWdlbmRFeGNlcHRpb24ifSw0MTY0OntuOiJTaHRQcm9wcyIsZjpmdW5jdGlvbiBBbSh5LFAsTCl7dmFyIFE9e2FyZWE6ITF9O2lmKDUhPUwuYmlmZilyZXR1cm4geS5sKz1QLFE7dmFyIHJlPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4geS5sKz0z''@;'; put 'put ''LDE2JnJlJiYoUS5hcmVhPSEwKSxRfX0sNDE2NTp7bjoiU2VyVG9DcnQifSw0MTY2OntuOiJBeGVzVXNlZCJ9LDQxNjg6e246IlNCYXNlUmVmIn0sNDE3MDp7bjoiU2VyUGFyZW50In0sNDE3MTp7bjoiU2VyQXV4VHJlbmQifSw0MTc0OntuOiJJRm10UmVjb3JkIn0sNDE3NTp7bjoiUG9zIn0s''@;'; put 'put ''NDE3Njp7bjoiQWxSdW5zIn0sNDE3Nzp7bjoiQlJBSSJ9LDQxODc6e246IlNlckF1eEVyckJhciJ9LDQxODg6e246IkNscnRDbGllbnQiLGY6ZnVuY3Rpb24gbkQoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCgyKSxMPVtdO1AtLSA+MDspTC5wdXNoKGQ5KHkpKTtyZXR1cm4gTH19LDQxODk6''@;'; put 'put ''e246IlNlckZtdCJ9LDQxOTE6e246IkNoYXJ0M0RCYXJTaGFwZSJ9LDQxOTI6e246IkZiaSJ9LDQxOTM6e246IkJvcFBvcCJ9LDQxOTQ6e246IkF4Y0V4dCJ9LDQxOTU6e246IkRhdCJ9LDQxOTY6e246IlBsb3RHcm93dGgifSw0MTk3OntuOiJTSUluZGV4In0sNDE5ODp7bjoiR2VsRnJhbWUi''@;'; put 'put ''fSw0MTk5OntuOiJCb3BQb3BDdXN0b20ifSw0MjAwOntuOiJGYmkyIn0sMDp7bjoiRGltZW5zaW9ucyIsZjpCdH0sMTp7bjoiQklGRjJCTEFOSyJ9LDI6e246IkJJRkYySU5UIixmOmZ1bmN0aW9uIHNEKHkpe3ZhciBQPUx1KHkpOysreS5sO3ZhciBMPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4g''@;'; put 'put ''UC50PSJuIixQLnZhbD1MLFB9fSwzOntuOiJCSUZGMk5VTSIsZjpmdW5jdGlvbiBNOSh5KXt2YXIgUD1MdSh5KTsrK3kubDt2YXIgTD1tYSh5KTtyZXR1cm4gUC50PSJuIixQLnZhbD1MLFB9fSw0OntuOiJCSUZGMlNUUiIsZjpmdW5jdGlvbiB1Wih5LFAsTCl7TC5iaWZmZ3Vlc3MmJjU9PUwu''@;'; put 'put ''YmlmZiYmKEwuYmlmZj0yKTt2YXIgUT1MdSh5KTsrK3kubDt2YXIgcmU9VjIoeSwwLEwpO3JldHVybiBRLnQ9InN0ciIsUS52YWw9cmUsUX19LDU6e246IkJvb2xFcnIiLGY6TmN9LDc6e246IlN0cmluZyIsZjpmdW5jdGlvbiBoWih5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9''@;'; put 'put ''PT1QPyh5LmwrKywiIik6eS5yZWFkX3NoaWZ0KFAsInNiY3MtY29udCIpfX0sODp7bjoiQklGRjJST1cifSw5OntuOiJCT0YiLGY6UnV9LDExOntuOiJJbmRleCJ9LDIyOntuOiJFeHRlcm5Db3VudCIsZjpobH0sMzA6e246IkJJRkYyRk9STUFUIixmOlRzfSwzMTp7bjoiQklGRjJGTVRDTlQi''@;'; put 'put ''fSwzMjp7bjoiQklGRjJDT0xJTkZPIn0sMzM6e246IkFycmF5IixmOkJ3fSwzNjp7bjoiQ09MV0lEVEgifSwzNzp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpXMH0sNTA6e246IkJJRkYyRk9OVFhUUkEiLGY6ZnVuY3Rpb24gZlooeSxQKXt5LmwrPTYseS5sKz0yLHkubCs9MSx5LmwrPTMseS5s''@;'; put 'put ''Kz0xLHkubCs9UC0xM319LDYyOntuOiJCSUZGMldJTkRPVzIifSw1Mjp7bjoiRERFT2JqTmFtZSJ9LDY3OntuOiJCSUZGMlhGIn0sNjg6e246IkJJRkYyWEZJTkRFWCIsZjpobH0sNjk6e246IkJJRkYyRk9OVENMUiJ9LDg2OntuOiJCSUZGNEZNVENOVCJ9LDEyNjp7bjoiUksifSwxMjc6e246''@;'; put 'put ''IkltRGF0YSIsZjpmdW5jdGlvbiBvRCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMiksUT15LnJlYWRfc2hpZnQoNCkscmU9e2ZtdDpQLGVudjpMLGxlbjpRLGRhdGE6eS5zbGljZSh5LmwseS5sK1EpfTtyZXR1cm4geS5sKz1RLHJlfX0sMTM1OntuOiJBZGRpbiJ9''@;'; put 'put ''LDEzNjp7bjoiRWRnIn0sMTM3OntuOiJQdWIifSwxNDU6e246IlN1YiJ9LDE0ODp7bjoiTEhSZWNvcmQifSwxNDk6e246IkxITkdyYXBoIn0sMTUwOntuOiJTb3VuZCJ9LDE2OTp7bjoiQ29vcmRMaXN0In0sMTcxOntuOiJHQ1cifSwxODg6e246IlNockZtbGEifSwxOTE6e246IlRvb2xiYXJI''@;'; put 'put ''ZHIifSwxOTI6e246IlRvb2xiYXJFbmQifSwxOTQ6e246IkFkZE1lbnUifSwxOTU6e246IkRlbE1lbnUifSwyMTQ6e246IlJTdHJpbmciLGY6ZnVuY3Rpb24gS3coeSxQLEwpe3ZhciBRPXkubCtQLHJlPUx1KHkpLHBlPXkucmVhZF9zaGlmdCgyKSxfZT1IZCh5LHBlLEwpO3JldHVybiB5Lmw9''@;'; put 'put ''USxyZS50PSJzdHIiLHJlLnZhbD1fZSxyZX19LDIyMzp7bjoiVUREZXNjIn0sMjM0OntuOiJUYWJJZENvbmYifSwzNTQ6e246IlhMNU1vZGlmeSJ9LDQyMTp7bjoiRmlsZVNoYXJpbmcyIn0sNTE4OntuOiJGb3JtdWxhIixmOnozfSw1MjE6e246IkJPRiIsZjpSdX0sNTM2OntuOiJMYmwiLGY6''@;'; put 'put ''Tnd9LDU0Nzp7bjoiRXh0ZXJuTmFtZSIsZjpiOX0sNTYxOntuOiJGb250In0sNTc5OntuOiJCSUZGM1hGIn0sMTAzMDp7bjoiRm9ybXVsYSIsZjp6M30sMTAzMzp7bjoiQk9GIixmOlJ1fSwxMDkxOntuOiJCSUZGNFhGIn0sMjE1Nzp7bjoiRmVhdEluZm8ifSwyMTYzOntuOiJGZWF0SW5mbzEx''@;'; put 'put ''In0sMjE3Nzp7bjoiU1hBZGRsMTIifSwyMjQwOntuOiJBdXRvV2ViUHViIn0sMjI0MTp7bjoiTGlzdE9iaiJ9LDIyNDI6e246Ikxpc3RGaWVsZCJ9LDIyNDM6e246Ikxpc3REViJ9LDIyNDQ6e246Ikxpc3RDb25kRm10In0sMjI0NTp7bjoiTGlzdENGIn0sMjI0Njp7bjoiRk1RcnkifSwyMjQ3''@;'; put 'put ''OntuOiJGTVNRcnkifSwyMjQ4OntuOiJQTFYifSwyMjQ5OntuOiJMbkV4dCJ9LDIyNTA6e246Ik1rckV4dCJ9LDIyNTE6e246IkNydENvb3B0In0sMjI2Mjp7bjoiRlJUQXJjaElkJCIscjoxMn0sMjkyODI6e319LENNPVBlKFgwLCJuIik7ZnVuY3Rpb24gU2koeSxQLEwsUSl7dmFyIHJlPStQ''@;'; put 'put ''fHwrQ01bUF07aWYoIWlzTmFOKHJlKSl7dmFyIHBlPVF8fChMfHxbXSkubGVuZ3RofHwwLF9lPXkubmV4dCg0KTtfZS53cml0ZV9zaGlmdCgyLHJlKSxfZS53cml0ZV9zaGlmdCgyLHBlKSxwZT4wJiZOaChMKSYmeS5wdXNoKEwpfX1mdW5jdGlvbiBKMCh5LFAsTCl7cmV0dXJuIHl8fCh5PWZy''@;'; put 'put ''KDcpKSx5LndyaXRlX3NoaWZ0KDIsUCkseS53cml0ZV9zaGlmdCgyLEwpLHkud3JpdGVfc2hpZnQoMiwwKSx5LndyaXRlX3NoaWZ0KDEsMCkseX1mdW5jdGlvbiBuXyh5LFAsTCxRKXtpZihudWxsIT1QLnYpc3dpdGNoKFAudCl7Y2FzZSJkIjpjYXNlIm4iOnZhciByZT0iZCI9PVAudD9VZShI''@;'; put 'put ''dChQLnYpKTpQLnY7cmV0dXJuIHZvaWQocmU9PSgwfHJlKSYmcmU+PTAmJnJlPDY1NTM2P1NpKHksMixmdW5jdGlvbiBhRCh5LFAsTCl7dmFyIFE9ZnIoOSk7cmV0dXJuIEowKFEseSxQKSxRLndyaXRlX3NoaWZ0KDIsTCksUX0oTCxRLHJlKSk6U2koeSwzLGZ1bmN0aW9uIGRaKHksUCxMKXt2''@;'; put 'put ''YXIgUT1mcigxNSk7cmV0dXJuIEowKFEseSxQKSxRLndyaXRlX3NoaWZ0KDgsTCwiZiIpLFF9KEwsUSxyZSkpKTtjYXNlImIiOmNhc2UiZSI6cmV0dXJuIHZvaWQgU2koeSw1LGZ1bmN0aW9uIHRfKHksUCxMLFEpe3ZhciByZT1mcig5KTtyZXR1cm4gSjAocmUseSxQKSx1OShMLFF8fCJiIixy''@;'; put 'put ''ZSkscmV9KEwsUSxQLnYsUC50KSk7Y2FzZSJzIjpjYXNlInN0ciI6cmV0dXJuIHZvaWQgU2koeSw0LGZ1bmN0aW9uIFFMKHksUCxMKXt2YXIgUT1mcig4KzIqTC5sZW5ndGgpO3JldHVybiBKMChRLHksUCksUS53cml0ZV9zaGlmdCgxLEwubGVuZ3RoKSxRLndyaXRlX3NoaWZ0KEwubGVuZ3Ro''@;'; put 'put ''LEwsInNiY3MiKSxRLmw8US5sZW5ndGg/US5zbGljZSgwLFEubCk6UX0oTCxRLChQLnZ8fCIiKS5zbGljZSgwLDI1NSkpKX1TaSh5LDEsSjAobnVsbCxMLFEpKX1mdW5jdGlvbiByUih5LFAsTCxRLHJlKXt2YXIgcGU9MTYrZ3UocmUuY2VsbFhmcyxyZS5jZWxsU3R5bGVYZnMsUCxyZSk7aWYo''@;'; put 'put ''bnVsbCE9UC52fHxQLmJmKWlmKFAuYmYpU2koeSwiRm9ybXVsYSIsZnVuY3Rpb24gV1ooeSxQLEwsUSxyZSl7dmFyIHBlPXowKFAsTCxyZSksX2U9ZnVuY3Rpb24gZnYoeSl7aWYobnVsbD09eSl7dmFyIFA9ZnIoOCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoMSwzKSxQLndyaXRlX3NoaWZ0KDEs''@;'; put 'put ''MCksUC53cml0ZV9zaGlmdCgyLDApLFAud3JpdGVfc2hpZnQoMiwwKSxQLndyaXRlX3NoaWZ0KDIsNjU1MzUpLFB9cmV0dXJuIFBjKCJudW1iZXIiPT10eXBlb2YgeT95OjApfSh5LnYpLHZlPWZyKDYpO3ZlLndyaXRlX3NoaWZ0KDIsMzMpLHZlLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBI''@;'; put 'put ''ZT1mcih5LmJmLmxlbmd0aCksVmU9MDtWZTx5LmJmLmxlbmd0aDsrK1ZlKUhlW1ZlXT15LmJmW1ZlXTtyZXR1cm4gUyhbcGUsX2UsdmUsSGVdKX0oUCxMLFEsMCxwZSkpO2Vsc2Ugc3dpdGNoKFAudCl7Y2FzZSJkIjpjYXNlIm4iOlNpKHksIk51bWJlciIsZnVuY3Rpb24gQzMoeSxQLEwsUSl7''@;'; put 'put ''dmFyIHJlPWZyKDE0KTtyZXR1cm4gejAoeSxQLFEscmUpLFBjKEwscmUpLHJlfShMLFEsImQiPT1QLnQ/VWUoSHQoUC52KSk6UC52LHBlKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOlNpKHksNTE3LGZ1bmN0aW9uIE5kKHksUCxMLFEscmUscGUpe3ZhciBfZT1mcig4KTtyZXR1cm4gejAoeSxQ''@;'; put 'put ''LFEsX2UpLHU5KEwscGUsX2UpLF9lfShMLFEsUC52LHBlLDAsUC50KSk7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6aWYocmUuYm9va1NTVCl7dmFyIHZlPXl2KHJlLlN0cmluZ3MsUC52LFAuUj9QLnI9SmgoUC5SKTpudWxsLHJlLnJldlN0cmluZ3MpO2lmKFAuUilmb3IodmFyIFNlPTA7U2U8''@;'; put 'put ''UC5SLmxlbmd0aDsrK1NlKVAuUltTZV0ucyYmZ3UocmUuY2VsbFhmcyxyZS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlAuUltTZV0uc30scmUpO1NpKHksIkxhYmVsU3N0IixmdW5jdGlvbiBaVCh5LFAsTCxRKXt2YXIgcmU9ZnIoMTApO3JldHVybiB6MCh5LFAsUSxyZSkscmUud3JpdGVf''@;'; put 'put ''c2hpZnQoNCxMKSxyZX0oTCxRLHZlLHBlKSl9ZWxzZSBTaSh5LCJMYWJlbCIsZnVuY3Rpb24gV1QoeSxQLEwsUSxyZSl7dmFyIHBlPSFyZXx8OD09cmUuYmlmZixfZT1mcigrcGUrOCsoMStwZSkqTC5sZW5ndGgpO3JldHVybiB6MCh5LFAsUSxfZSksX2Uud3JpdGVfc2hpZnQoMixMLmxlbmd0''@;'; put 'put ''aCkscGUmJl9lLndyaXRlX3NoaWZ0KDEsMSksX2Uud3JpdGVfc2hpZnQoKDErcGUpKkwubGVuZ3RoLEwscGU/InV0ZjE2bGUiOiJzYmNzIiksX2V9KEwsUSwoUC52fHwiIikuc2xpY2UoMCwyNTUpLHBlLHJlKSk7YnJlYWs7ZGVmYXVsdDpTaSh5LCJCbGFuayIsejAoTCxRLHBlKSl9ZWxzZSBT''@;'; put 'put ''aSh5LCJCbGFuayIsejAoTCxRLHBlKSl9ZnVuY3Rpb24gaVIoeSxQLEwpe3ZhciBWZSxRPXljKCkscmU9TC5TaGVldE5hbWVzW3ldLHBlPUwuU2hlZXRzW3JlXXx8e30sX2U9KEx8fHt9KS5Xb3JrYm9va3x8e30sdmU9KF9lLlNoZWV0c3x8W10pW3ldfHx7fSxTZT1BcnJheS5pc0FycmF5KHBl''@;'; put 'put ''KSxIZT04PT1QLmJpZmYsR2U9IiIsbnQ9W10sZHQ9T2kocGVbIiFyZWYiXXx8IkExIiksQ3Q9SGU/NjU1MzY6MTYzODQ7aWYoZHQuZS5jPjI1NXx8ZHQuZS5yPj1DdCl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhwZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0''@;'; put 'put ''IGxpbWl0IEExOklWMTYzODQiKTtkdC5lLmM9TWF0aC5taW4oZHQuZS5jLDI1NSksZHQuZS5yPU1hdGgubWluKGR0LmUuYyxDdC0xKX1TaShRLDIwNTcsRDQoMCwxNixQKSksU2koUSwiQ2FsY01vZGUiLGZ1KDEpKSxTaShRLCJDYWxjQ291bnQiLGZ1KDEwMCkpLFNpKFEsIkNhbGNSZWZNb2Rl''@;'; put 'put ''IixQbCghMCkpLFNpKFEsIkNhbGNJdGVyIixQbCghMSkpLFNpKFEsIkNhbGNEZWx0YSIsUGMoLjAwMSkpLFNpKFEsIkNhbGNTYXZlUmVjYWxjIixQbCghMCkpLFNpKFEsIlByaW50Um93Q29sIixQbCghMSkpLFNpKFEsIlByaW50R3JpZCIsUGwoITEpKSxTaShRLCJHcmlkU2V0IixmdSgxKSks''@;'; put 'put ''U2koUSwiR3V0cyIsZnVuY3Rpb24gRncoeSl7dmFyIFA9ZnIoOCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDIseVswXT95WzBdKzE6MCksUC53cml0ZV9zaGlmdCgyLHlbMV0/eVsxXSsxOjApLFB9KFswLDBdKSksU2koUSwiSENlbnRlciIsUGwoITEpKSxTaShR''@;'; put 'put ''LCJWQ2VudGVyIixQbCghMSkpO3ZhciBjdD1wZVsiIXByaW50Il0mJnBlWyIhcHJpbnQiXS5tYXJnaW5zfHxwZVsiIW1hcmdpbnMiXTtjdCYmKG51bGwhPWN0LmxlZnQmJlNpKFEsIkxlZnRNYXJnaW4iLFBjKGN0LmxlZnQpKSxudWxsIT1jdC5yaWdodCYmU2koUSwiUmlnaHRNYXJnaW4iLFBj''@;'; put 'put ''KGN0LnJpZ2h0KSksbnVsbCE9Y3QudG9wJiZTaShRLCJUb3BNYXJnaW4iLFBjKGN0LnRvcCkpLG51bGwhPWN0LmJvdHRvbSYmU2koUSwiQm90dG9tTWFyZ2luIixQYyhjdC5ib3R0b20pKSwobnVsbCE9Y3QuaGVhZGVyfHxudWxsIT1jdC5mb290ZXIpJiZTaShRLCJTZXR1cCIsZnVuY3Rpb24g''@;'; put 'put ''a20oeSxQKXt2YXIgTD1mcigzNCksUT0hMSxyZT03MDtyZXR1cm4ibGFuZHNjYXBlIj09KFAucHJvcHN8fHt9KS5vcmllbnRhdGlvbiYmKFE9ITAscmUmPS02NyksUSYmKHJlJj0tNSksTC53cml0ZV9zaGlmdCgyLDEpLEwud3JpdGVfc2hpZnQoMiwxMDApLEwud3JpdGVfc2hpZnQoMiwwKSxM''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMSxyZSksTC53cml0ZV9zaGlmdCgxLDApLEwud3JpdGVfc2hpZnQoMiw2MDApLEwud3JpdGVfc2hpZnQoMiw2MDApLFBjKG51bGw9PXkuaGVhZGVyPy41OnkuaGVhZGVyLEwpLFBjKG51bGw9PXkuZm9v''@;'; put 'put ''dGVyPy41OnkuZm9vdGVyLEwpLEwud3JpdGVfc2hpZnQoMiwxKSxMfShjdCxwZVsiIXByaW50Il18fHt9KSkpLEhlJiZmdW5jdGlvbiBNTSh5LFAsTCl7aWYoUCl7dmFyIFE9MDtQLmZvckVhY2goZnVuY3Rpb24ocmUscGUpeysrUTw9MjU2JiZyZSYmKHJlLmF1dG8mJk5pKEwscmUscGUpLFNp''@;'; put 'put ''KHksIkNvbEluZm8iLGZ1bmN0aW9uIHJEKHksUCl7dmFyIEw9ZnIoMTIpO0wud3JpdGVfc2hpZnQoMixQKSxMLndyaXRlX3NoaWZ0KDIsUCksTC53cml0ZV9zaGlmdCgyLDI1Nip5LndpZHRoKSxMLndyaXRlX3NoaWZ0KDIsMCk7dmFyIFE9MDtyZXR1cm4geS5oaWRkZW4mJihRfD0xKSxMLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsUSksTC53cml0ZV9zaGlmdCgxLFE9eS5sZXZlbHx8MCksTC53cml0ZV9zaGlmdCgyLDApLEx9KFlkKHBlLHJlKSxwZSkpKX0pfX0oUSxwZVsiIWNvbHMiXSxwZSksU2koUSwiRGltZW5zaW9ucyIsZnVuY3Rpb24ganQoeSxQKXt2YXIgTD04IT1QLmJpZmYmJlAuYmlmZj8y''@;'; put 'put ''OjQsUT1mcigyKkwrNik7cmV0dXJuIFEud3JpdGVfc2hpZnQoTCx5LnMuciksUS53cml0ZV9zaGlmdChMLHkuZS5yKzEpLFEud3JpdGVfc2hpZnQoMix5LnMuYyksUS53cml0ZV9zaGlmdCgyLHkuZS5jKzEpLFEud3JpdGVfc2hpZnQoMiwwKSxRfShkdCxQKSksSGUmJihwZVsiIWxpbmtzIl09''@;'; put 'put ''W10pLHBlWyIhcm93cyJdJiZIZSYmcGVbIiFyb3dzIl0uZm9yRWFjaChmdW5jdGlvbihadCxwbil7Zm9yKHZhciBLbj1IcyhwbiksdW49MjU2LHFuPTAsem49WnQucz8xNitndShQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlp0LnN9LFApOjAsQW49ZHQucy5jO0FuPD1k''@;'; put 'put ''dC5lLmM7KytBbikoU2U/KHBlW3BuXXx8W10pW0FuXTpwZVtudFtBbl0rS25dKSYmKEFuPHVuJiYodW49QW4pLEFuPnFuJiYocW49QW4pKTtxbjx1biYmKHVuPXFuPTApLFNpKFEsIlJvdyIsZnVuY3Rpb24gbXQoeSxQLEwpe3ZhciBRPWZyKDE2KTtRLndyaXRlX3NoaWZ0KDIsUCksUS53cml0''@;'; put 'put ''ZV9zaGlmdCgyLExbMF0pLFEud3JpdGVfc2hpZnQoMixMWzFdKzEpLFEud3JpdGVfc2hpZnQoMiwyMCp5LmhwdHx8MjAqajIoeS5ocHgpfHwzMzApLFEud3JpdGVfc2hpZnQoNCwwKTt2YXIgcmU9MDtyZXR1cm4gcmV8PTB8eS5sZXZlbCx5LmhpZGRlbiYmKHJlfD0zMikscmV8PTY0LExbMl0m''@;'; put 'put ''JihyZXw9MTI4KSxRLndyaXRlX3NoaWZ0KDEscmUpLFEud3JpdGVfc2hpZnQoMSwxKSxRLndyaXRlX3NoaWZ0KDIsTFsyXXx8MCksUX0oWnQscG4sW3VuLHFuLHpuXSkpfSk7Zm9yKHZhciBidD1kdC5zLnI7YnQ8PWR0LmUucjsrK2J0KXtHZT1IcyhidCk7Zm9yKHZhciBGdD1kdC5zLmM7RnQ8''@;'; put 'put ''PWR0LmUuYzsrK0Z0KXtidD09PWR0LnMuciYmKG50W0Z0XT1OcyhGdCkpLFZlPW50W0Z0XStHZTt2YXIgRXQ9U2U/KHBlW2J0XXx8W10pW0Z0XTpwZVtWZV07RXQmJihyUihRLEV0LGJ0LEZ0LFApLEhlJiZFdC5sJiZwZVsiIWxpbmtzIl0ucHVzaChbVmUsRXQubF0pKX19dmFyIFR0PXZlLkNv''@;'; put 'put ''ZGVOYW1lfHx2ZS5uYW1lfHxyZTtyZXR1cm4oSGV8fDU9PVAuYmlmZiYmcGVbIiFmcmVlemUiXSkmJlNpKFEsIldpbmRvdzIiLGZ1bmN0aW9uIEJUKHksUCxMLFEpe3ZhciByZT1RJiZRLmJpZmZ8fDgscGU9ZnIoOD09cmU/MTg6MTApLF9lPTE3MTg7cmV0dXJuIEw+MCYmKF9lJj0tNTEzKSxo''@;'; put 'put ''bihQWyIhZ3JpZGxpbmVzIl0pJiYoX2UmPS0zKSxQWyIhZnJlZXplIl0mJihfZXw9OCkseSYmeS5SVEwmJihfZXw9NjQpLDU9PXJlJiYoX2U9NDQ2KSxwZS53cml0ZV9zaGlmdCgyLF9lKSw4PT1yZT8ocGUud3JpdGVfc2hpZnQoNCwwKSxwZS53cml0ZV9zaGlmdCg0LDY0KSxwZS53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCkpOihwZS53cml0ZV9zaGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCkpLHBlfSgoX2UuVmlld3N8fFtdKVswXSxwZSx5KSksKEhlfHw1PT1QLmJpZmYpJiZwZVsiIWZyZWV6ZSJdJiZTaShRLCJQYW5lIixmdW5jdGlvbiB6VCh5KXsic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIHkmJih5PXNzKHkpKTt2YXIgUD1mcigxMCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoMix5LmMpLFAud3JpdGVfc2hpZnQoMix5LnIpLFAud3JpdGVfc2hpZnQoMix5LnIpLFAud3JpdGVfc2hpZnQoMix5LmMpLFAud3JpdGVfc2hpZnQoMSwzKSxQLndyaXRlX3NoaWZ0KDEs''@;'; put 'put ''MCksUH0ocGVbIiFmcmVlemUiXSkpLEhlJiZwZVsiIXNlbCJdJiZTaShRLCJTZWxlY3Rpb24iLGZ1bmN0aW9uIFI0KHksUCl7dmFyIEw9ZnIoMTUpLFE9eS5jZWxsO2lmKCFRKXtpZigheS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJh''@;'; put 'put ''bmdlIik7UT1kaShXcyh5LnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciByZT0ic3RyaW5nIj09dHlwZW9mIFE/c3MoUSk6UTtpZihQKXt2YXIgcGU9InN0cmluZyI9PXR5cGVvZiBQP3NzKFApOlA7TC53cml0ZV9zaGlmdCgxLHJlLnI+PXBlLnImJnJlLmM+PXBlLmM/MDpyZS5y''@;'; put 'put ''Pj1wZS5yJiZyZS5jPHBlLmM/MjpyZS5yPHBlLnImJnJlLmM+PXBlLmM/MTozKX1lbHNlIEwud3JpdGVfc2hpZnQoMSwzKTtyZXR1cm4gTC53cml0ZV9zaGlmdCgyLHJlLnIpLEwud3JpdGVfc2hpZnQoMixyZS5jKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDEpLGZ1bmN0''@;'; put 'put ''aW9uIGc5KHksUCl7UHx8KFA9ZnIoNikpLFAud3JpdGVfc2hpZnQoMix5LnM/eS5zLnI6eS5yKSxQLndyaXRlX3NoaWZ0KDIseS5lP3kuZS5yOnkuciksUC53cml0ZV9zaGlmdCgxLHkucz95LnMuYzp5LmMpLFAud3JpdGVfc2hpZnQoMSx5LmU/eS5lLmM6eS5jKX0oe3M6cmUsZTpyZX0sTCks''@;'; put 'put ''TH0ocGVbIiFzZWwiXSxwZVsiIWZyZWV6ZSJdKSksSGUmJihwZVsiIW1lcmdlcyJdfHxbXSkubGVuZ3RoJiZTaShRLCJNZXJnZUNlbGxzIixmdW5jdGlvbiBadyh5KXt2YXIgUD1mcigyKzgqeS5sZW5ndGgpO1Aud3JpdGVfc2hpZnQoMix5Lmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx5Lmxlbmd0''@;'; put 'put ''aDsrK0wpVTAoeVtMXSxQKTtyZXR1cm4gUH0ocGVbIiFtZXJnZXMiXSkpLEhlJiZmdW5jdGlvbiBWbCh5LFApe2Zvcih2YXIgTD0wO0w8UFsiIWxpbmtzIl0ubGVuZ3RoOysrTCl7dmFyIFE9UFsiIWxpbmtzIl1bTF07U2koeSwiSExpbmsiLFhoKFEpKSxRWzFdLlRvb2x0aXAmJlNpKHksIkhM''@;'; put 'put ''aW5rVG9vbHRpcCIsUVQoUSkpfWRlbGV0ZSBQWyIhbGlua3MiXX0oUSxwZSksU2koUSwiQ29kZU5hbWUiLG1tKFR0KSksSGUmJmZ1bmN0aW9uIFNNKHksUCl7dmFyIEw9ZnIoMTkpO0wud3JpdGVfc2hpZnQoNCwyMTUxKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEwu''@;'; put 'put ''d3JpdGVfc2hpZnQoMiwzKSxMLndyaXRlX3NoaWZ0KDEsMSksTC53cml0ZV9zaGlmdCg0LDApLFNpKHksIkZlYXRIZHIiLEwpLChMPWZyKDM5KSkud3JpdGVfc2hpZnQoNCwyMTUyKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMiwzKSxMLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMiwxKSxMLndyaXRlX3NoaWZ0KDQsNCksTC53cml0ZV9zaGlmdCgyLDApLFUwKE9pKFBbIiFyZWYiXXx8IkExIiksTCksTC53cml0ZV9zaGlmdCg0LDQpLFNpKHksIkZlYXQiLEwpfShRLHBlKSxTaShRLCJF''@;'; put 'put ''T0YiKSxRLmVuZCgpfWZ1bmN0aW9uIHhNKHksUCxMKXt2YXIgUT15YygpLHJlPSh5fHx7fSkuV29ya2Jvb2t8fHt9LHBlPXJlLlNoZWV0c3x8W10sX2U9cmUuV0JQcm9wc3x8e30sdmU9OD09TC5iaWZmLFNlPTU9PUwuYmlmZjtTaShRLDIwNTcsRDQoMCw1LEwpKSwieGxhIj09TC5ib29rVHlw''@;'; put 'put ''ZSYmU2koUSwiQWRkaW4iKSxTaShRLCJJbnRlcmZhY2VIZHIiLHZlP2Z1KDEyMDApOm51bGwpLFNpKFEsIk1tcyIsZnVuY3Rpb24gSXcoeSxQKXtQfHwoUD1mcih5KSk7Zm9yKHZhciBMPTA7TDx5OysrTClQLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFB9KDIpKSxTZSYmU2koUSwiVG9vbGJh''@;'; put 'put ''ckhkciIpLFNlJiZTaShRLCJUb29sYmFyRW5kIiksU2koUSwiSW50ZXJmYWNlRW5kIiksU2koUSwiV3JpdGVBY2Nlc3MiLGZ1bmN0aW9uIHdtKHksUCl7dmFyIEw9IVB8fDg9PVAuYmlmZixRPWZyKEw/MTEyOjU0KTtmb3IoUS53cml0ZV9zaGlmdCg4PT1QLmJpZmY/MjoxLDcpLEwmJlEud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSwwKSxRLndyaXRlX3NoaWZ0KDQsODU5MDA3MDU5KSxRLndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwoTD8wOjUzNjg3MDkxMikpO1EubDxRLmxlbmd0aDspUS53cml0ZV9zaGlmdCgxLEw/MDozMik7cmV0dXJuIFF9KDAsTCkpLFNpKFEsIkNvZGVQYWdlIixmdSh2ZT8xMjAwOjEy''@;'; put 'put ''NTIpKSx2ZSYmU2koUSwiRFNGIixmdSgwKSksdmUmJlNpKFEsIkV4Y2VsOUZpbGUiKSxTaShRLCJSUlRhYklkIixmdW5jdGlvbiBTOSh5KXtmb3IodmFyIFA9ZnIoMip5KSxMPTA7TDx5OysrTClQLndyaXRlX3NoaWZ0KDIsTCsxKTtyZXR1cm4gUH0oeS5TaGVldE5hbWVzLmxlbmd0aCkpLHZl''@;'; put 'put ''JiZ5LnZiYXJhdyYmU2koUSwiT2JQcm9qIiksdmUmJnkudmJhcmF3JiZTaShRLCJDb2RlTmFtZSIsbW0oX2UuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siKSksU2koUSwiQnVpbHRJbkZuR3JvdXBDb3VudCIsZnUoMTcpKSxTaShRLCJXaW5Qcm90ZWN0IixQbCghMSkpLFNpKFEsIlByb3RlY3Qi''@;'; put 'put ''LFBsKCExKSksU2koUSwiUGFzc3dvcmQiLGZ1KDApKSx2ZSYmU2koUSwiUHJvdDRSZXYiLFBsKCExKSksdmUmJlNpKFEsIlByb3Q0UmV2UGFzcyIsZnUoMCkpLFNpKFEsIldpbmRvdzEiLGZ1bmN0aW9uIFJ3KCl7dmFyIHk9ZnIoMTgpO3JldHVybiB5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0''@;'; put 'put ''ZV9zaGlmdCgyLDApLHkud3JpdGVfc2hpZnQoMiwyOTI4MCkseS53cml0ZV9zaGlmdCgyLDE3NjAwKSx5LndyaXRlX3NoaWZ0KDIsNTYpLHkud3JpdGVfc2hpZnQoMiwwKSx5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0ZV9zaGlmdCgyLDEpLHkud3JpdGVfc2hpZnQoMiw1MDApLHl9KCkpLFNp''@;'; put 'put ''KFEsIkJhY2t1cCIsUGwoITEpKSxTaShRLCJIaWRlT2JqIixmdSgwKSksU2koUSwiRGF0ZTE5MDQiLFBsKCJ0cnVlIj09ZnVuY3Rpb24gck0oeSl7cmV0dXJuIHkuV29ya2Jvb2smJnkuV29ya2Jvb2suV0JQcm9wcyYmeXIoeS5Xb3JrYm9vay5XQlByb3BzLmRhdGUxOTA0KT8idHJ1ZSI6ImZh''@;'; put 'put ''bHNlIn0oeSkpKSxTaShRLCJDYWxjUHJlY2lzaW9uIixQbCghMCkpLHZlJiZTaShRLCJSZWZyZXNoQWxsIixQbCghMSkpLFNpKFEsIkJvb2tCb29sIixmdSgwKSksQ3I9dzQoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUs''@;'; put 'put ''MTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1XSksZnVuY3Rpb24gZVIoeSxQLEwpeygoKFB8fHt9KS5TdHlsZXN8fHt9KS5Gb250c3x8W3tzejoxMixjb2xvcjp7dGhlbWU6MX0sbmFtZToiQXJpYWwiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0pLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oUSl7U2koeSwiRm9udCIsZnVuY3Rpb24gdzMoeSxQKXt2YXIgTD15Lm5hbWV8fCJBcmlhbCIsUT1QJiY1PT1QLmJpZmYscGU9ZnIoUT8xNStMLmxlbmd0aDoxNisyKkwubGVuZ3RoKTtwZS53cml0ZV9zaGlmdCgyLDIwKih5LnN6fHwxMikpO3ZhciBfZT0wO3JldHVybiB5LmJv''@;'; put 'put ''bGQmJihfZXw9MSkseS5pdGFsaWMmJihfZXw9MikseS5zdHJpa2UmJihfZXw9OCkseS5zaGFkb3cmJihfZXw9MzIpLHBlLndyaXRlX3NoaWZ0KDEsX2UpLHBlLndyaXRlX3NoaWZ0KDEsMCkscGUud3JpdGVfc2hpZnQoMix5LmNvbG9yP0gzKHkuY29sb3IsNjQpOjY0KSxwZS53cml0ZV9zaGlm''@;'; put 'put ''dCgyLHkuYm9sZD83MDA6NDAwKSxwZS53cml0ZV9zaGlmdCgyLCJzdXBlciI9PXkudmFsaWduPzE6InN1YiI9PXkudmFsaWduPzI6MCkscGUud3JpdGVfc2hpZnQoMSx5LnVuZGVybGluZXx8MCkscGUud3JpdGVfc2hpZnQoMSxwZS5mYW1pbHl8fDApLHBlLndyaXRlX3NoaWZ0KDEscGUuY2hh''@;'; put 'put ''cnNldHx8MCkscGUud3JpdGVfc2hpZnQoMSwwKSxwZS53cml0ZV9zaGlmdCgxLEwubGVuZ3RoKSxRfHxwZS53cml0ZV9zaGlmdCgxLDEpLHBlLndyaXRlX3NoaWZ0KChRPzE6MikqTC5sZW5ndGgsTCxRPyJzYmNzIjoidXRmMTZsZSIpLHBlfShRLEwpKX0pfShRLHksTCksZnVuY3Rpb24gdFIo''@;'; put 'put ''eSxQLEwpe1AmJltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oUSl7Zm9yKHZhciByZT1RWzBdO3JlPD1RWzFdOysrcmUpbnVsbCE9UFtyZV0mJlNpKHksIkZvcm1hdCIsWHIocmUsUFtyZV0sTCkpfSl9KFEseS5TU0YsTCksZnVuY3Rpb24gblIoeSxQ''@;'; put 'put ''KXtmb3IodmFyIEw9MDtMPDE2OysrTClTaSh5LCJYRiIsQ20oe251bUZtdElkOjAsc3R5bGU6ITB9LDAsUCkpO1AuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKFEpe1NpKHksIlhGIixDbShRLDAsUCkpfSl9KFEsTCksU2koUSwiUGFsZXR0ZSIsZnVuY3Rpb24gR3coeSl7dmFyIFA9ZnIoMjI2''@;'; put 'put ''KTtQLndyaXRlX3NoaWZ0KDIsNTYpO2Zvcih2YXIgTD0wO0w8NTY7KytMKXt2YXIgUT15W0wrOF18fGgzW0wrOF07UC53cml0ZV9zaGlmdCgxLFFbMF0pLFAud3JpdGVfc2hpZnQoMSxRWzFdKSxQLndyaXRlX3NoaWZ0KDEsUVsyXSksUC53cml0ZV9zaGlmdCgxLDApfXJldHVybiBQfShDcikp''@;'; put 'put ''LENyPW9uKGgzKSx2ZSYmU2koUSwiVXNlc0VMRnMiLFBsKCExKSk7dmFyIFZlPVEuZW5kKCksR2U9eWMoKTt2ZSYmU2koR2UsIkNvdW50cnkiLGZ1bmN0aW9uIHREKHkpe3JldHVybiB5fHwoeT1mcig0KSkseS53cml0ZV9zaGlmdCgyLDEpLHkud3JpdGVfc2hpZnQoMiwxKSx5fSgpKSx2ZSYm''@;'; put 'put ''TC5TdHJpbmdzJiZmdW5jdGlvbiBlXyh5LFAsTCxRKXt2YXIgcmU9UXx8KEx8fFtdKS5sZW5ndGh8fDA7aWYocmU8PTgyMjQpcmV0dXJuIFNpKHksUCxMLHJlKTt2YXIgcGU9K1B8fCtDTVtQXTtpZighaXNOYU4ocGUpKXtmb3IodmFyIF9lPUwucGFydHN8fFtdLHZlPTAsU2U9MCxIZT0wO0hl''@;'; put 'put ''KyhfZVt2ZV18fDgyMjQpPD04MjI0OylIZSs9X2VbdmVdfHw4MjI0LHZlKys7dmFyIFZlPXkubmV4dCg0KTtmb3IoVmUud3JpdGVfc2hpZnQoMixwZSksVmUud3JpdGVfc2hpZnQoMixIZSkseS5wdXNoKEwuc2xpY2UoU2UsU2UrSGUpKSxTZSs9SGU7U2U8cmU7KXtmb3IoKFZlPXkubmV4dCg0''@;'; put 'put ''KSkud3JpdGVfc2hpZnQoMiw2MCksSGU9MDtIZSsoX2VbdmVdfHw4MjI0KTw9ODIyNDspSGUrPV9lW3ZlXXx8ODIyNCx2ZSsrO1ZlLndyaXRlX3NoaWZ0KDIsSGUpLHkucHVzaChMLnNsaWNlKFNlLFNlK0hlKSksU2UrPUhlfX19KEdlLCJTU1QiLGZ1bmN0aW9uIGJzKHksUCl7dmFyIEw9ZnIo''@;'; put 'put ''OCk7TC53cml0ZV9zaGlmdCg0LHkuQ291bnQpLEwud3JpdGVfc2hpZnQoNCx5LlVuaXF1ZSk7Zm9yKHZhciBRPVtdLHJlPTA7cmU8eS5sZW5ndGg7KytyZSlRW3JlXT1qMCh5W3JlXSxQKTt2YXIgcGU9UyhbTF0uY29uY2F0KFEpKTtyZXR1cm4gcGUucGFydHM9W0wubGVuZ3RoXS5jb25jYXQo''@;'; put 'put ''US5tYXAoZnVuY3Rpb24oX2Upe3JldHVybiBfZS5sZW5ndGh9KSkscGV9KEwuU3RyaW5ncyxMKSksU2koR2UsIkVPRiIpO3ZhciBudD1HZS5lbmQoKSxkdD15YygpLEN0PTAsY3Q9MDtmb3IoY3Q9MDtjdDx5LlNoZWV0TmFtZXMubGVuZ3RoOysrY3QpQ3QrPSh2ZT8xMjoxMSkrKHZlPzI6MSkq''@;'; put 'put ''eS5TaGVldE5hbWVzW2N0XS5sZW5ndGg7dmFyIGJ0PVZlLmxlbmd0aCtDdCtudC5sZW5ndGg7Zm9yKGN0PTA7Y3Q8eS5TaGVldE5hbWVzLmxlbmd0aDsrK2N0KVNpKGR0LCJCb3VuZFNoZWV0OCIsWTAoe3BvczpidCxoczoocGVbY3RdfHx7fSkuSGlkZGVufHwwLGR0OjAsbmFtZTp5LlNoZWV0''@;'; put 'put ''TmFtZXNbY3RdfSxMKSksYnQrPVBbY3RdLmxlbmd0aDt2YXIgRXQ9ZHQuZW5kKCk7aWYoQ3QhPUV0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkJTOCAiK0N0KyIgIT0gIitFdC5sZW5ndGgpO3ZhciBUdD1bXTtyZXR1cm4gVmUubGVuZ3RoJiZUdC5wdXNoKFZlKSxFdC5sZW5ndGgmJlR0LnB1''@;'; put 'put ''c2goRXQpLG50Lmxlbmd0aCYmVHQucHVzaChudCksU2EoW1R0XSl9ZnVuY3Rpb24gcl8oeSxQKXt2YXIgTD1QfHx7fTtzd2l0Y2goTC5iaWZmfHwyKXtjYXNlIDg6Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBvUih5LFApe3ZhciBMPVB8fHt9LFE9W107Rm0oUCYmUC5QUEl8fDk2KSx5JiYheS5T''@;'; put 'put ''U0YmJih5LlNTRj13LmdldF90YWJsZSgpKSx5JiZ5LlNTRiYmKEoodyksdy5sb2FkX3RhYmxlKHkuU1NGKSxMLnJldnNzZj1BZSh5LlNTRiksTC5yZXZzc2ZbeS5TU0ZbNjU1MzVdXT0wLEwuc3NmPXkuU1NGKSx5LlN0eWxlcz17Rm9udHM6TC5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZTox''@;'; put 'put ''LHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpMLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpMLkJvcmRlcnM9W3t9XSxEWEY6TC5EWEY9eS5TdHlsZXMmJnkuU3R5''@;'; put 'put ''bGVzLkRYRnx8W119LFoxKEwuRm9udHNbMF0pLEwuU3RyaW5ncz1bXSxMLlN0cmluZ3MuQ291bnQ9MCxMLlN0cmluZ3MuVW5pcXVlPTAsSzA/TC5yZXZTdHJpbmdzPW5ldyBNYXA6KEwucmV2U3RyaW5ncz17fSxMLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBMLnJldlN0cmluZ3MuZm9vKSxk''@;'; put 'put ''XyhMKSxMLmNlbGxYZnM9W10sTC5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sZ3UoTC5jZWxsWGZzLEwuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSx5LlByb3BzfHwoeS5Qcm9wcz17fSk7Zm9yKHZhciByZT0wO3JlPHkuU2hlZXROYW1lcy5sZW5ndGg7Kyty''@;'; put 'put ''ZSlRW1EubGVuZ3RoXT1pUihyZSxMLHkpO3JldHVybiBRLnVuc2hpZnQoeE0oeSxRLEwpKSxTYShbUV0pfSh5LFApO2Nhc2UgNDpjYXNlIDM6Y2FzZSAyOnJldHVybiBmdW5jdGlvbiBoWSh5LFApe3ZhciBMPVB8fHt9O251bGwhPXRlJiZudWxsPT1MLmRlbnNlJiYoTC5kZW5zZT10ZSk7Zm9y''@;'; put 'put ''KHZhciBRPXljKCkscmU9MCxwZT0wO3BlPHkuU2hlZXROYW1lcy5sZW5ndGg7KytwZSl5LlNoZWV0TmFtZXNbcGVdPT1MLnNoZWV0JiYocmU9cGUpO2lmKDA9PXJlJiZMLnNoZWV0JiZ5LlNoZWV0TmFtZXNbMF0hPUwuc2hlZXQpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIr''@;'; put 'put ''TC5zaGVldCk7cmV0dXJuIFNpKFEsND09TC5iaWZmPzEwMzM6Mz09TC5iaWZmPzUyMTo5LEQ0KDAsMTYsTCkpLGZ1bmN0aW9uIGRZKHksUCxMLFEpe3ZhciBfZSxyZT1BcnJheS5pc0FycmF5KFApLHBlPU9pKFBbIiFyZWYiXXx8IkExIiksdmU9IiIsU2U9W107aWYocGUuZS5jPjI1NXx8cGUu''@;'; put 'put ''ZS5yPjE2MzgzKXtpZihRLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKFBbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7cGUuZS5jPU1hdGgubWluKHBlLmUuYywyNTUpLHBlLmUucj1NYXRoLm1pbihwZS5lLmMsMTYzODMpLF9lPU9vKHBl''@;'; put 'put ''KX1mb3IodmFyIEhlPXBlLnMucjtIZTw9cGUuZS5yOysrSGUpe3ZlPUhzKEhlKTtmb3IodmFyIFZlPXBlLnMuYztWZTw9cGUuZS5jOysrVmUpe0hlPT09cGUucy5yJiYoU2VbVmVdPU5zKFZlKSksX2U9U2VbVmVdK3ZlO3ZhciBHZT1yZT8oUFtIZV18fFtdKVtWZV06UFtfZV07R2UmJm5fKHks''@;'; put 'put ''R2UsSGUsVmUpfX19KFEseS5TaGVldHNbeS5TaGVldE5hbWVzW3JlXV0sMCxMKSxTaShRLDEwKSxRLmVuZCgpfSh5LFApfXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIrTC5ib29rVHlwZSsiIGZvciBCSUZGIil9dmFyIEZ1PWZ1bmN0aW9uKCl7dmFyIHk9e2NlbnRlckNvbnRpbnVv''@;'; put 'put ''dXM6ImNlbnRlciIsanVzdGlmeToibGVmdCJ9O2Z1bmN0aW9uIEwoR2UsbnQpe3ZhciBkdD1udHx8e307bnVsbCE9dGUmJm51bGw9PWR0LmRlbnNlJiYoZHQuZGVuc2U9dGUpO3ZhciBDdD1kdC5kZW5zZT9bXTp7fSxjdD0oR2U9R2UucmVwbGFjZSgvPCEtLS4qPy0tPi9nLCIiKSkubWF0Y2go''@;'; put 'put ''Lzx0YWJsZS9pKTtpZighY3QpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNvdWxkIG5vdCBmaW5kIDx0YWJsZT4iKTt2YXIgYnQ9R2UubWF0Y2goLzxcL3RhYmxlL2kpLEZ0PWN0LmluZGV4LEV0PWJ0JiZidC5pbmRleHx8R2UubGVuZ3RoLFR0PWZ1bmN0aW9uIGZ0KHksUCxMKXtp''@;'; put 'put ''ZihObnx8InN0cmluZyI9PXR5cGVvZiBQKXJldHVybiB5LnNwbGl0KFApO2Zvcih2YXIgUT15LnNwbGl0KFApLHJlPVtRWzBdXSxwZT0xO3BlPFEubGVuZ3RoOysrcGUpcmUucHVzaChMKSxyZS5wdXNoKFFbcGVdKTtyZXR1cm4gcmV9KEdlLnNsaWNlKEZ0LEV0KSwvKDo/PHRyW14+XSo+KS9p''@;'; put 'put ''LCI8dHI+IiksWnQ9LTEscG49MCxLbj0wLHVuPTAscW49e3M6e3I6MWU3LGM6MWU3fSxlOntyOjAsYzowfX0sem49W107Zm9yKEZ0PTA7RnQ8VHQubGVuZ3RoOysrRnQpe3ZhciBBbj1UdFtGdF0udHJpbSgpLGVyPUFuLnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9ZXIpe2lm''@;'; put 'put ''KCI8dGQiPT1lcnx8Ijx0aCI9PWVyKXt2YXIgdHI9QW4uc3BsaXQoLzxcL3RbZGhdPi9pKTtmb3IoRXQ9MDtFdDx0ci5sZW5ndGg7KytFdCl7dmFyIFpuPXRyW0V0XS50cmltKCk7aWYoWm4ubWF0Y2goLzx0W2RoXS9pKSl7Zm9yKHZhciBOcj1abixvaT0wOyI8Ij09TnIuY2hhckF0KDApJiYo''@;'; put 'put ''b2k9TnIuaW5kZXhPZigiPiIpKT4tMTspTnI9TnIuc2xpY2Uob2krMSk7Zm9yKHZhciBraT0wO2tpPHpuLmxlbmd0aDsrK2tpKXt2YXIgTGk9em5ba2ldO0xpLnMuYz09cG4mJkxpLnMucjxadCYmWnQ8PUxpLmUuciYmKHBuPUxpLmUuYysxLGtpPS0xKX12YXIgUXI9bG4oWm4uc2xpY2UoMCxa''@;'; put 'put ''bi5pbmRleE9mKCI+IikpKTt1bj1Rci5jb2xzcGFuPytRci5jb2xzcGFuOjEsKChLbj0rUXIucm93c3Bhbik+MXx8dW4+MSkmJnpuLnB1c2goe3M6e3I6WnQsYzpwbn0sZTp7cjpadCsoS258fDEpLTEsYzpwbit1bi0xfX0pO3ZhciB1cj1Rci50fHxRclsiZGF0YS10Il18fCIiO2lmKCFOci5s''@;'; put 'put ''ZW5ndGgpe3BuKz11bjtjb250aW51ZX1pZihOcj1SYyhOcikscW4ucy5yPlp0JiYocW4ucy5yPVp0KSxxbi5lLnI8WnQmJihxbi5lLnI9WnQpLHFuLnMuYz5wbiYmKHFuLnMuYz1wbikscW4uZS5jPHBuJiYocW4uZS5jPXBuKSxOci5sZW5ndGgpe3ZhciBUbj17dDoicyIsdjpOcn07ZHQucmF3''@;'; put 'put ''fHwhTnIudHJpbSgpLmxlbmd0aHx8InMiPT11cnx8KFRuPSRuKE5yLGR0KSksZHQuZGVuc2U/KEN0W1p0XXx8KEN0W1p0XT1bXSksQ3RbWnRdW3BuXT1Ubik6Q3RbZGkoe3I6WnQsYzpwbn0pXT1Ubixwbis9dW59fX19fWVsc2V7aWYoKytadCxkdC5zaGVldFJvd3MmJmR0LnNoZWV0Um93czw9''@;'; put 'put ''WnQpey0tWnQ7YnJlYWt9cG49MH19cmV0dXJuIEN0WyIhcmVmIl09T28ocW4pLHpuLmxlbmd0aCYmKEN0WyIhbWVyZ2VzIl09em4pLEN0fWZ1bmN0aW9uIHJlKEdlLG50LGR0LEN0LGN0LGJ0KXt2YXIgVHQsRnQ9R2VbIiFtZXJnZXMiXXx8W10sRXQ9W10sWnQ9e3N0eWxlOltdfSxwbj0hMTtm''@;'; put 'put ''dW5jdGlvbiBLbihEaSxZbyxsbyl7dmFyIEFvPSIiLHhvPTA7aWYoVHRbRGldKXN3aXRjaChUdFtEaV0uc3R5bGUpe2Nhc2UidGhpbiI6Y2FzZSJoYWlyIjpBbz0ic29saWQiLHhvPTE7YnJlYWs7Y2FzZSJtZWRpdW0iOkFvPSJzb2xpZCIseG89MjticmVhaztjYXNlInRoaWNrIjpBbz0ic29s''@;'; put 'put ''aWQiLHhvPTM7YnJlYWs7Y2FzZSJkb3VibGUiOkFvPSJkb3VibGUiLHhvPTM7YnJlYWs7Y2FzZSJkb3R0ZWQiOmNhc2UiZGFzaERvdERvdCI6QW89ImRvdHRlZCIseG89MTticmVhaztjYXNlIm1lZGl1bURhc2hEb3REb3QiOkFvPSJkb3R0ZWQiLHhvPTI7YnJlYWs7Y2FzZSJkYXNoZWQiOmNh''@;'; put 'put ''c2UiZGFzaERvdCI6Y2FzZSJzbGFudERhc2hEb3QiOkFvPSJkYXNoZWQiLHhvPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoZWQiOmNhc2UibWVkaXVtRGFzaERvdCI6QW89ImRhc2hlZCIseG89Mn1lOmlmKDA9PXhvKXtzd2l0Y2goRGkpe2Nhc2UidG9wIjotLVlvO2JyZWFrO2Nhc2UibGVmdCI6''@;'; put 'put ''LS1sbzticmVhaztjYXNlImJvdHRvbSI6KytZbzticmVhaztjYXNlInJpZ2h0IjorK2xvfXZhciBoaT1Zbz49MCYmbG8+PTA/Q3QuZGVuc2U/KEdlW1lvXXx8W10pW2xvXTpHZVtkaSh7cjpZbyxjOmxvfSldOm51bGw7aWYoaGkpe2lmKGhpLnMmJmhpLnNbe3RvcDoiYm90dG9tIixib3R0b206''@;'; put 'put ''InRvcCIsbGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0In1bRGldXSlicmVhayBlO2hpLnMmJmhpLnMuZmdDb2xvciYmKHhvPTEpfVR0LmZnQ29sb3ImJih4bz0xKSwhaGkmJnBuJiYwPT14byYmKHhvPTEpfTAhPXhvJiZ4byYmKFp0LnN0eWxlLnB1c2goImJvcmRlci0iK0RpKyItc3R5bGU6Iiso''@;'; put 'put ''QW98fCJ0cmFuc3BhcmVudCIpKSxadC5zdHlsZS5wdXNoKCJib3JkZXItIitEaSsiLXdpZHRoOiIreG8rInB4IiksIiI9PUFvP1p0LnN0eWxlLnB1c2goImJvcmRlci0iK0RpKyItY29sb3I6IHRyYW5zcGFyZW50Iik6VHRbRGldLmNvbG9yJiZUdFtEaV0uY29sb3IucmdiJiZadC5zdHlsZS5w''@;'; put 'put ''dXNoKCJib3JkZXItIitEaSsiLWNvbG9yOiMiK091KFR0W0RpXS5jb2xvci5yZ2IpKSl9Zm9yKHZhciB1bj1udC5zLmM7dW48PW50LmUuYzsrK3VuKXtmb3IodmFyIHFuPTAsem49MCxBbj0wO0FuPEZ0Lmxlbmd0aDsrK0FuKWlmKCEoRnRbQW5dLnMucj5kdHx8RnRbQW5dLnMuYz51bnx8RnRb''@;'; put 'put ''QW5dLmUucjxkdHx8RnRbQW5dLmUuYzx1bikpe2lmKEZ0W0FuXS5zLnI8ZHR8fEZ0W0FuXS5zLmM8dW4pe3FuPS0xO2JyZWFrfXFuPUZ0W0FuXS5lLnItRnRbQW5dLnMucisxLHpuPUZ0W0FuXS5lLmMtRnRbQW5dLnMuYysxO2JyZWFrfWlmKCEocW48MCkpe3ZhciBlcj1kaSh7cjpkdCxjOnVu''@;'; put 'put ''fSksdHI9Q3QuZGVuc2U/KEdlW2R0XXx8W10pW3VuXTpHZVtlcl07dHI/cG49ITE6KHBuPSEwLHRyPXt0OiJ6IixzOnt9fSk7dmFyIFpuPSJ6Ij09dHIudD8iIjp0ci5ofHxybyh0ci53fHwoY3UodHIpLHRyLncpfHwiIik7aWYoWnQ9e3N0eWxlOltdfSxUdD10ci5zKXt2YXIgTnI9MTtpZigo''@;'; put 'put ''InN1cGVyIj09VHQudmFsaWdufHwic3ViIj09VHQudmFsaWduKSYmKE5yPS44Myxabj1Tcigic3BhbiIsWm4se3N0eWxlOiJ2ZXJ0aWNhbC1hbGlnbjogIitUdC52YWxpZ259KSksWnQuc3R5bGUucHVzaCgiZm9udC13ZWlnaHQ6IisoVHQuYm9sZD83MDA6NDAwKSksVHQuaXRhbGljJiZadC5z''@;'; put 'put ''dHlsZS5wdXNoKCJmb250LXN0eWxlOiBpdGFsaWMiKSwoVHQudW5kZXJsaW5lfHxUdC5zdHJpa2UpJiZadC5zdHlsZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IisoVHQudW5kZXJsaW5lPyIgdW5kZXJsaW5lIjoiIikrKFR0LnN0cmlrZT8iIGxpbmUtdGhyb3VnaCI6IiIpKSxUdC5jb2xvciYm''@;'; put 'put ''VHQuY29sb3IucmdiJiZadC5zdHlsZS5wdXNoKCJjb2xvcjogIyIrT3UoVHQuY29sb3IucmdiKSksVHQubmFtZSYmWnQuc3R5bGUucHVzaCgiZm9udC1mYW1pbHk6IitUdC5uYW1lKyIsIHNhbnMtc2VyaWYiKSxUdC5zeiYmWnQuc3R5bGUucHVzaCgiZm9udC1zaXplOiIrVHQuc3oqTnIrInB0''@;'; put 'put ''IiksbnVsbCE9PVR0LnBhdHRlcm5UeXBlJiZUdC5mZ0NvbG9yJiZUdC5mZ0NvbG9yLnJnYiYmWnQuc3R5bGUucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrT3UoVHQuZmdDb2xvci5yZ2IpKSxbInRvcCIsImxlZnQiXS5mb3JFYWNoKGZ1bmN0aW9uKERpKXtLbihEaSxkdCx1bil9KSxxbj4x''@;'; put 'put ''fHx6bj4xKXt2YXIgb2k9ZGkoe3I6ZHQrcW4tMSxjOnVuK3puLTF9KSxraT1DdC5kZW5zZT8oR2VbZHQrcW4tMV18fFtdKVt1bit6bi0xXTpHZVtvaV0sUXI9VHQ7VHQ9a2kmJmtpLnN8fFR0LFsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKERpKXtLbihEaSxkdCx1bil9KSxU''@;'; put 'put ''dD1Rcn1lbHNlWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oRGkpe0tuKERpLGR0LHVuKX0pO2lmKFR0LmFsaWdubWVudCl7aWYoVHQuYWxpZ25tZW50Lmhvcml6b250YWw/WnQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogIisoeVtUdC5hbGlnbm1lbnQuaG9yaXpvbnRhbF18''@;'; put 'put ''fFR0LmFsaWdubWVudC5ob3Jpem9udGFsKSk6Im4iPT10ci50JiZadC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpLFR0LmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIHVyPVR0LmFsaWdubWVudC52ZXJ0aWNhbDtadC5zdHlsZS5wdXNoKCJ2ZXJ0aWNhbC1hbGlnbjogIisoImNlbnRl''@;'; put 'put ''ciI9PXVyPyJtaWRkbGUiOnVyKSl9aWYoVHQuYWxpZ25tZW50LndyYXBUZXh0KVp0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpO2Vsc2V7dmFyIFRuPUN0LmRlbnNlPyhHZVtkdF18fFtdKVt1bisxXTpHZVtkaSh7cjpkdCxjOnVuKzF9KV07VG4mJiJ6IiE9VG4udCYmWnQu''@;'; put 'put ''c3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIil9fWVsc2UibiI9PXRyLnQmJlp0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0Iik7dmFyIHZyPSgoR2VbIiFjb2xzIl18fFtdKVt1bl18fHt9KS53cHg7bnVsbD09dnImJih2cj0oKEdlWyIhc2hlZXRGb3JtYXQiXXx8e30p''@;'; put 'put ''LmNvbHx8e30pLndweCl9dmFyIHJyPTA7aWYoem48PTEmJnFuPD0xJiYocnI9KChHZVsiIWNvbHMiXXx8W10pW3VuXXx8e30pLndweCkmJlp0LnN0eWxlLnB1c2goIndpZHRoOiAiK3JyKyJweCIpLEdlWyIhY29uZGZtdCJdJiZwZSh0cixkdCx1bixHZVsiIWNvbmRmbXQiXSxadC5zdHlsZSxH''@;'; put 'put ''ZSksMD09WnQuc3R5bGUubGVuZ3RoP2RlbGV0ZSBadC5zdHlsZTpadC5zdHlsZT1adC5zdHlsZS5qb2luKCI7IiksQ3QuY3NzKXt2YXIgU249Y3QuaW5kZXhPZihadC5zdHlsZSk7LTE9PVNuJiYoY3QucHVzaChadC5zdHlsZSksU249Y3QubGVuZ3RoLTEpLGRlbGV0ZSBadC5zdHlsZSxadC5j''@;'; put 'put ''bGFzcz0ic2pzIisoYnR8fCIiKSsiLSIrU259cW4+MSYmKFp0LnJvd3NwYW49cW4pLHpuPjEmJihadC5jb2xzcGFuPXpuKSxDdC5lZGl0YWJsZT9abj0nPHNwYW4gY29udGVudGVkaXRhYmxlPSJ0cnVlIj4nK1puKyI8L3NwYW4+Ijp0ciYmKFp0WyJkYXRhLXQiXT10ciYmdHIudHx8InoiLG51''@;'; put 'put ''bGwhPXRyLnYmJihadFsiZGF0YS12Il09dHIudiksbnVsbCE9dHIueiYmKFp0WyJkYXRhLXoiXT10ci56KSksWnQuaWQ9KEN0LmlkfHwic2pzIikrIi0iK2VyLEV0LnB1c2goU3IoInRkIixabixadCkpfX12YXIgQ2kscHI9e3N0eWxlOltdfTsoQ2k9R2VbIiFzaGVldEZvcm1hdCJdKSYmQ2ku''@;'; put 'put ''cm93JiYoSTMoQ2kucm93KSxDaS5yb3cuaHB4JiYocHIuc3R5bGUucHVzaChbImhlaWdodCIsQ2kucm93LmhweCsicHgiXSkscHIuaGVpZ2h0PU1hdGgucm91bmQoQ2kucm93LmhweCkpKTt2YXIgQnI9R2VbIiFyb3dzIl07aWYoQnImJkJyW2R0XSl7dmFyIGppPUJyW2R0XTtqaS5ocHgmJihw''@;'; put 'put ''ci5zdHlsZS5wdXNoKFsiaGVpZ2h0IiwramkuaHB4KyJweCJdKSxwci5oZWlnaHQ9TWF0aC5yb3VuZChqaS5ocHgpKSxqaS5oaWRkZW4mJnByLnN0eWxlLnB1c2goWyJkaXNwbGF5Iiwibm9uZSJdKX12YXIgX289W107cmV0dXJuIHByLnN0eWxlPXByLnN0eWxlLnJldmVyc2UoKS5maWx0ZXIo''@;'; put 'put ''ZnVuY3Rpb24oRGkpe3JldHVybiEoX28uaW5kZXhPZihEaVswXSk+LTF8fChfby5wdXNoKERpWzBdKSwwKSl9KS5tYXAoZnVuY3Rpb24oRGkpe3JldHVybiBEaVswXSsiOiIrRGlbMV19KSwwPT1wci5zdHlsZS5sZW5ndGg/ZGVsZXRlIHByLnN0eWxlOnByLnN0eWxlPXByLnN0eWxlLmpvaW4o''@;'; put 'put ''IjsiKSxTcigidHIiLEV0LmpvaW4oIiIpLHByKX1mdW5jdGlvbiBwZShHZSxudCxkdCxDdCxjdCxidCl7Q3QuZm9yRWFjaChmdW5jdGlvbihGdCl7aWYoRnQuX3JlZnx8KEZ0Ll9yZWY9InN0cmluZyI9PXR5cGVvZiBGdC5yZWY/V3MoRnQucmVmKTpGdC5yZWYpLCEoRnQuX3JlZi5zLmM+ZHR8''@;'; put 'put ''fEZ0Ll9yZWYuZS5jPGR0fHxGdC5fcmVmLnMucj5udHx8RnQuX3JlZi5lLnI8bnR8fCJzY2FsZSIhPT1GdC50KSl7aWYoIm4iIT1HZS50KXJldHVybjt2YXIgRXQ7aWYobnVsbD09RnQuX21pbil7RnQuX3ZhbHVlcz1bXTtmb3IodmFyIFR0PUZ0Ll9yZWYucy5yO1R0PD1GdC5fcmVmLmUucjsr''@;'; put 'put ''K1R0KWZvcih2YXIgWnQ9RnQuX3JlZi5zLmM7WnQ8PUZ0Ll9yZWYuZS5jOysrWnQpe3ZhciBwbj1BcnJheS5pc0FycmF5KGJ0KT8oYnRbVHRdfHxbXSlbWnRdOmJ0W2RpKHtyOlR0LGM6WnR9KV07cG4mJiJuIj09cG4udCYmRnQuX3ZhbHVlcy5wdXNoKHBuLnYpfWlmKEZ0Ll92YWx1ZXMuc29y''@;'; put 'put ''dChmdW5jdGlvbihLbix1bil7cmV0dXJuIEtuLXVufSksRnQuX21pbj1GdC5fdmFsdWVzWzBdLEZ0Ll9tYXg9RnQuX3ZhbHVlcy5zbGljZSgtMSlbMF0sRnQuX2JhbmQ9RnQuX21heC1GdC5fbWluLEZ0LmNtaWQpe3N3aXRjaChGdC5jbWlkLnQpe2Nhc2UibnVtIjpGdC5fbWlkPUZ0LmNtaWQu''@;'; put 'put ''djticmVhaztjYXNlInBlcmNlbnQiOkZ0Ll9taWQ9RnQuY21pZC52LzEwMCpGdC5fYmFuZCtGdC5fbWluO2JyZWFrO2Nhc2UicGVyY2VudGlsZSI6RnQuX21pZD1mdW5jdGlvbiBmbih5LFApe2lmKDA9PVApcmV0dXJuIHlbMF07aWYoMTAwPT1QKXJldHVybiB5W3kubGVuZ3RoLTFdO3ZhciBR''@;'; put 'put ''PVAvMTAwKih5Lmxlbmd0aC0xKSxyZT1RLU1hdGguZmxvb3IoUSk7cmV0dXJuIHJlKnlbTWF0aC5jZWlsKFEpXSsoMS1yZSkqeVtNYXRoLmZsb29yKFEpXX0oRnQuX3ZhbHVlcyxGdC5jbWlkLnYpfUZ0Ll9iYW5kaD1GdC5fbWF4LUZ0Ll9taWQsRnQuX2JhbmRsPUZ0Ll9taWQtRnQuX21pbn19''@;'; put 'put ''KEV0PUZ0LmNtaWQ/R2Uudj49RnQuX21pZD9MOShGdC5jbWlkLmNvbG9yLEZ0LmNtYXguY29sb3IsKEdlLnYtRnQuX21pZCkvRnQuX2JhbmRoKTpMOShGdC5jbWluLmNvbG9yLEZ0LmNtaWQuY29sb3IsKEdlLnYtRnQuX21pbikvRnQuX2JhbmRsKTpMOShGdC5jbWluLmNvbG9yLEZ0LmNtYXgu''@;'; put 'put ''Y29sb3IsKEdlLnYtRnQuX21pbikvRnQuX2JhbmQpKSYmY3QucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrRXQpfX0pfWZ1bmN0aW9uIF9lKEdlLG50KXt2YXIgZHQ9e3NwYW46bnR8fDEsc3R5bGU6IiJ9LEN0PVtdO3JldHVybiBHZSYmR2Uud3B4JiYoZHQud2lkdGg9TWF0aC5yb3VuZCg0''@;'; put 'put ''KkdlLndweC8zKSxDdC5wdXNoKCJ3aWR0aDoiKyhHZS53cHh8fDApKyJweCIpKSxDdC5sZW5ndGg+MCYmKGR0LnN0eWxlPUN0LmpvaW4oIjsiKSksU3IoImNvbCIsbnVsbCxkdCl9ZnVuY3Rpb24gdmUoR2UsbnQsZHQpe3ZhciBDdD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3BhY2lu''@;'; put 'put ''ZzowLHN0eWxlOlsiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIiwidGFibGUtbGF5b3V0OmZpeGVkIl0uam9pbigiOyIpfTtkdCYmZHQuaWQmJihDdC5pZD1kdC5pZCk7dmFyIGN0PUdlWyIhY29scyJdLGJ0PUdlWyIhc2hlZXRGb3JtYXQiXTtpZihHZSYmY3Qpe2Zvcih2YXIgRnQ9MCxUdD1u''@;'; put 'put ''dC5zLmM7VHQ8PW50LmUuYzsrK1R0KXt2YXIgWnQ9Y3RbVHRdO0Z0Kz1adCYmWnQud3B4P1p0LndweDpidCYmYnQuY29sJiZidC5jb2wud3B4P2J0LmNvbC53cHg6NTN9Q3Quc3R5bGUrPSI7d2lkdGg6IitGdCsicHgifXZhciBLbixwbj1bIjx0YWJsZSIrUGEoQ3QpKyI+Il07aWYocG4ucHVz''@;'; put 'put ''aCgiPHN0eWxlPnRkIHsgcGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1yaWdodDoxcHg7IHBhZGRpbmctbGVmdDoxcHg7IHRleHQtYWxpZ246Z2VuZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBib3JkZXI6MXB4IHNvbGlkOyBib3JkZXItY29sb3I6IisoZHQmJmR0LmdyaWRjb2xvcj9k''@;'; put 'put ''dC5ncmlkY29sb3I6aG4oR2VbIiFncmlkbGluZXMiXSk/InRyYW5zcGFyZW50IjoiYmxhY2siKSsiOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSxwbi5wdXNoKCc8Y29sZ3JvdXAgc3Bhbj0iJysobnQuZS5jLW50LnMuYysxKSsnIj4nKSxj''@;'; put 'put ''dCl7Zm9yKHZhciB1bj1udC5zLmM7dW48TWF0aC5taW4oY3QubGVuZ3RoLG50LmUuYysxKTsrK3VuKSEoS249Y3RbdW5dKSYmYnQmJmJ0LmNvbCYmKEtuPWJ0LmNvbCksS258fChLbj17d3B4OjUzfSkscG4ucHVzaChfZShLbiwxKSk7bnQuZS5jLW50LnMuYysxPmN0Lmxlbmd0aCYmKEtuPW51''@;'; put 'put ''bGwsYnQmJmJ0LmNvbCYmKEtuPWJ0LmNvbCksS258fChLbj17d3B4OjUzfSkscG4ucHVzaChfZShLbixudC5lLmMtbnQucy5jKzEtY3QubGVuZ3RoKSkpfWVsc2UgS249bnVsbCxidCYmYnQuY29sJiYoS249YnQuY29sKSxLbnx8KEtuPXt3cHg6NTN9KSxwbi5wdXNoKF9lKEtuLG50LmUuYy1u''@;'; put 'put ''dC5zLmMrMSkpO3JldHVybiBwbi5wdXNoKCI8L2NvbGdyb3VwPiIpLHBuLmpvaW4oIiIpfXZhciBTZT0nPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT4nLEhlPSI8L2JvZHk+PC9odG1sPiI7''@;'; put 'put ''cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIFEoR2UsbnQpe3JldHVybiBFZChMKEdlLG50KSxudCl9LHRvX3NoZWV0OkwsX3JvdzpyZSxCRUdJTjpTZSxFTkQ6SGUsX3ByZWFtYmxlOnZlLGh0bWxfdG9fcnM6ZnVuY3Rpb24gUChHZSl7dmFyIG50PVtdLGR0PXt9LEN0PTA7cmV0dXJuIEdl''@;'; put 'put ''LnJlcGxhY2UoLzwoXC8/KShbXlxzPz4hXC86XSo6fCkoW15ccz8+OlwvXSspW14+XSo+L2dtLGZ1bmN0aW9uKGN0LGJ0LEZ0LEV0LFR0KXt2YXIgcG49am4obG4oY3QpWzBdKS5yZXBsYWNlKC9bPFwvPl0vZywiIiksS249R2Uuc2xpY2UoQ3QsVHQpLnJlcGxhY2UoL1xzL2csIiAiKTtzd2l0''@;'; put 'put ''Y2goS24ubGVuZ3RoPjAmJihudC5wdXNoKHt0OiJzIix2OktuLHM6ZHR9KSxkdD1vbihkdCkpLHBuLnRvTG93ZXJDYXNlKCkpe2Nhc2UiYiI6Ii8iIT1idD9kdC5ib2xkPSEwOmRlbGV0ZSBkdC5ib2xkO2JyZWFrO2Nhc2UiaSI6Ii8iIT1idD9kdC5pdGFsaWM9ITA6ZGVsZXRlIGR0Lml0YWxp''@;'; put 'put ''YzticmVhaztjYXNlInUiOiIvIiE9YnQ/ZHQudW5kZXJsaW5lPTE6ZGVsZXRlIGR0LnVuZGVybGluZTticmVhaztjYXNlInMiOiIvIiE9YnQ/ZHQuc3RyaWtlPSEwOmRlbGV0ZSBkdC5zdHJpa2V9cmV0dXJuIEN0PVR0K2N0Lmxlbmd0aCxjdH0pLG50fSxmcm9tX3NoZWV0OmZ1bmN0aW9uIFZl''@;'; put 'put ''KEdlLG50KXt2YXIgZHQ9bnR8fHt9LGN0PW51bGwhPWR0LmZvb3Rlcj9kdC5mb290ZXI6SGUsYnQ9W251bGwhPWR0LmhlYWRlcj9kdC5oZWFkZXI6U2UsIiJdLEZ0PVtdLEV0PShuZXcgRGF0ZSkudmFsdWVPZigpO0dlfHwoR2U9e30pLEdlWyIhcmVmIl18fChHZVsiIXJlZiJdPSJBMTpBMSIp''@;'; put 'put ''O3ZhciBUdD1XcyhHZVsiIXJlZiJdKTtpZihkdC5kZW5zZT1BcnJheS5pc0FycmF5KEdlKSxkdC5za2lwZW5kKXt2YXIgWnQ9VHQuZS5yO2U6Zm9yKDtadD49VHQucy5yOy0tWnQpZm9yKHZhciBwbj1UdC5lLmM7cG4+PVR0LnMuYzstLXBuKWlmKG51bGwhPSgoZHQuZGVuc2U/KEdlW1p0XXx8''@;'; put 'put ''W10pW3BuXTpHZVtkaSh7cjpadCxjOnBufSldKXx8e30pLnYpYnJlYWsgZTtUdC5lLnI9WnQ7dmFyIEtuPVR0LmUuYztlOmZvcig7S24+PVR0LnMuYzstLUtuKWZvcih2YXIgdW49VHQuZS5yO3VuPj1UdC5zLnI7LS11bilpZihudWxsIT0oKGR0LmRlbnNlPyhHZVt1bl18fFtdKVtLbl06R2Vb''@;'; put 'put ''ZGkoe3I6dW4sYzpLbn0pXSl8fHt9KS52KWJyZWFrIGU7VHQuZS5jPUtufWJ0LnB1c2godmUoR2UsVHQsZHQpKTtmb3IodmFyIHFuPVR0LnMucjtxbjw9VHQuZS5yOysrcW4pYnQucHVzaChyZShHZSxUdCxxbixkdCxGdCxFdCkpO3JldHVybiBidC5wdXNoKCI8L3RhYmxlPiIrY3QpLGR0LmNz''@;'; put 'put ''cyYmKGJ0WzFdPSI8c3R5bGU+XG4iK0Z0Lm1hcChmdW5jdGlvbih6bixBbil7cmV0dXJuIi5zanMiK0V0KyItIitBbisiIHsiK3puKyJ9In0pLmpvaW4oIlxuIikrIjwvc3R5bGU+IiksYnQuam9pbigiIil9fX0oKTtmdW5jdGlvbiB2Zih5LFAsTCl7dmFyIFE9e307aWYodHlwZW9mIGdldENv''@;'; put 'put ''bXB1dGVkU3R5bGU+InUiKXJldHVybiBRO3ZhciByZT1nZXRDb21wdXRlZFN0eWxlKHkpO2lmKCg3MDA9PXJlWyJmb250LXdlaWdodCJdfHwiYm9sZCI9PXJlWyJmb250LXdlaWdodCJdKSYmKFEuYm9sZD0hMCksKHJlWyJmb250LXN0eWxlIl18fCIiKS5tYXRjaCgvaXRhbGljLykmJihRLml0''@;'; put 'put ''YWxpYz0hMCksKHJlWyJ0ZXh0LWRlY29yYXRpb24iXXx8IiIpLm1hdGNoKC91bmRlcmxpbmUvKSYmKFEudW5kZXJsaW5lPTEpLChyZVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvbGluZS10aHJvdWdoLykmJihRLnN0cmlrZT0xKSxwYXJzZUludChyZVsiZm9udC1zaXplIl0pJiYo''@;'; put 'put ''US5zej1wYXJzZUZsb2F0KHJlWyJmb250LXNpemUiXSkqKHJlWyJmb250LXNpemUiXS5tYXRjaCgvcHgvKT8zLzQ6MSkpLHJlWyJmb250LWZhbWlseSJdJiYoUS5uYW1lPXJlWyJmb250LWZhbWlseSJdLnNwbGl0KCIsIilbMF0ucmVwbGFjZSgvXHMqIlxzKi9nLCIiKSkscmUuY29sb3Ipe3Zh''@;'; put 'put ''ciBwZT1ONChyZS5jb2xvci50b0xvd2VyQ2FzZSgpLCEwKTtwZT49MCYmKFEuY29sb3I9e3JnYjpwZX0pfXN3aXRjaChyZVsidGV4dC10cmFuc2Zvcm0iXSYmKFEudGV4dF90cmFuc2Zvcm09cmVbInRleHQtdHJhbnNmb3JtIl0udG9Mb3dlckNhc2UoKSksIm5vbmUiIT0ocmVbInRleHQtc2hh''@;'; put 'put ''ZG93Il18fCJub25lIikmJihRLnNoYWRvdz0hMCkscmVbInRleHQtYWxpZ24iXSl7Y2FzZSJjZW50ZXIiOlEuYWxpZ25tZW50PXtob3Jpem9udGFsOiJjZW50ZXIifTticmVhaztjYXNlInJpZ2h0IjpRLmFsaWdubWVudD17aG9yaXpvbnRhbDoicmlnaHQifTticmVhaztjYXNlImxlZnQiOlEu''@;'; put 'put ''YWxpZ25tZW50PXtob3Jpem9udGFsOiJsZWZ0In07YnJlYWs7Y2FzZSJqdXN0aWZ5IjpRLmFsaWdubWVudD17aG9yaXpvbnRhbDoianVzdGlmeSJ9fXN3aXRjaChyZVsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJ0b3AiOmNhc2UibWlkZGxlIjpjYXNlImJvdHRvbSI6US5hbGlnbm1lbnR8fChR''@;'; put 'put ''LmFsaWdubWVudD17fSksUS5hbGlnbm1lbnQudmVydGljYWw9cmVbInZlcnRpY2FsLWFsaWduIl0sIm1pZGRsZSI9PVEuYWxpZ25tZW50LnZlcnRpY2FsJiYoUS5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpjYXNlInN1cGVyIjpRLnZhbGlnbj1yZVsidmVy''@;'; put 'put ''dGljYWwtYWxpZ24iXSxRLnN6JiYoUS5zei89LjgzKX12YXIgX2U9UCYmZ2V0Q29tcHV0ZWRTdHlsZShQKTtyZXR1cm4gX2UmJkwmJlAmJlsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPXZlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgp''@;'; put 'put ''K3ZlLnNsaWNlKDEpLEhlPV9lWyJib3JkZXItIit2ZSsiLXN0eWxlIl07aWYoKCJub25lIj09SGV8fCFIZSkmJihIZT1fZVsiYm9yZGVyIitTZSsiU3R5bGUiXSksIm5vbmUiIT1IZSYmSGUpe3ZhciBWZT1wYXJzZUludChfZVsiYm9yZGVyLSIrdmUrIi13aWR0aCJdfHxfZVsiYm9yZGVyIitT''@;'; put 'put ''ZSsiV2lkdGgiXSwxMCksR2U9InRoaW4iO2lmKFZlPjApe3N3aXRjaChIZSl7Y2FzZSJkb3VibGUiOkdlPSJkb3VibGUiO2JyZWFrO2Nhc2UiZGFzaGVkIjpHZT1WZT49Mj8ibWVkaXVtRGFzaGVkIjoiZGFzaGVkIjticmVhaztjYXNlImRvdHRlZCI6R2U9VmU+PTI/Im1lZGl1bURhc2hEb3RE''@;'; put 'put ''b3QiOiJkb3R0ZWQiO2JyZWFrO2Nhc2Uic29saWQiOkdlPVZlPj0zPyJ0aGljayI6VmU+PTI/Im1lZGl1bSI6InRoaW4ifWlmKFFbdmVdPXtzdHlsZTpHZX0sX2VbImJvcmRlci0iK3ZlKyItY29sb3IiXXx8X2VbImJvcmRlciIrU2UrIkNvbG9yIl0pe3ZhciBudD1ONCgoX2VbImJvcmRlci0i''@;'; put 'put ''K3ZlKyItY29sb3IiXXx8X2VbImJvcmRlciIrU2UrIkNvbG9yIl0pLnRvTG93ZXJDYXNlKCksITApO250Pj0wJiYoUVt2ZV0uY29sb3I9e3JnYjpudH0pfX19fSksUX1mdW5jdGlvbiBpXyh5LFAsTCl7dmFyIFE9eS5jaGlsZE5vZGVzO2lmKDE9PXkubm9kZVR5cGUpc3dpdGNoKHkudGFnTmFt''@;'; put 'put ''ZS50b0xvd2VyQ2FzZSgpKXtjYXNlInAiOlAubGVuZ3RoPjAmJlAucHVzaCh7dDoidCIsdjoiXG4iLHM6TH0pO2JyZWFrO2Nhc2Uic2VsZWN0IjpyZXR1cm4gZnVuY3Rpb24gYVIoeSxQLEwpe1AucHVzaCh7dDoidCIsdjp5LmNoaWxkcmVuW3kuc2VsZWN0ZWRJbmRleF0uaW5uZXJUZXh0LHM6''@;'; put 'put ''TH0pfSh5LFAsTCl9aWYoUS5sZW5ndGg+MCl7dmFyIHJlPXZmKHksbnVsbCwhMSk7TCYmKEwudW5kZXJsaW5lJiYocmUudW5kZXJsaW5lPUwudW5kZXJsaW5lKSxMLnN0cmlrZSYmKHJlLnN0cmlrZT1MLnN0cmlrZSkpO2Zvcih2YXIgcGU9MDtwZTxRLmxlbmd0aDsrK3BlKXt0cnl7aWYoUVtw''@;'; put 'put ''ZV0uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKWNvbnRpbnVlfWNhdGNoe31pXyhRW3BlXSxQLHJlKX1kZWxldGUgcmUudGV4dF90cmFuc2Zvcm19ZWxzZSBpZigzPT15Lm5vZGVUeXBlKXt2YXIgX2U9e3Q6InQiLHY6eS5ub2RlVmFsdWUucmVwbGFjZSgvXltcbiBdKy8sIiAiKS5yZXBs''@;'; put 'put ''YWNlKC9bXG4gXSskLywiICIpLHM6TH07c3dpdGNoKEwudGV4dF90cmFuc2Zvcm0pe2Nhc2UidXBwZXJjYXNlIjpfZS52PV9lLnYudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6X2Uudj1fZS52LnRvTG93ZXJDYXNlKCl9KFAubGVuZ3RoPjB8fF9lLnYmJiIgIiE9X2Uudikm''@;'; put 'put ''JlAucHVzaChfZSl9ZWxzZSAxPT15Lm5vZGVUeXBlJiYiYnIiPT09eS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJlAucHVzaCh7dDoidCIsdjoiXG4iLHM6TH0pfWZ1bmN0aW9uIG9fKHksUCxMLFEscmUpe3ZhciBfZSxwZT15LmlubmVySFRNTDtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwi''@;'; put 'put ''dSIpc3dpdGNoKF9lPWdldENvbXB1dGVkU3R5bGUoeSksKF9lWyJ3aGl0ZS1zcGFjZSJdfHwiIikubWF0Y2goL3ByZS8pJiYocGU9cGUucmVwbGFjZSgvXG4vZywiPGJyLz4iKSksKF9lWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnBlPXBl''@;'; put 'put ''LnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOnBlPXBlLnRvTG93ZXJDYXNlKCl9dmFyIHZlPWZ1bmN0aW9uIHNSKHksUCxMLFEpe3ZhciByZT17dDoicyIsdjpQfSxwZT0iIjtpZih5KXtMPXkuZ2V0QXR0cmlidXRlKCJkYXRhLXQiKXx8eS5nZXRBdHRyaWJ1dGUoInQiKTt2''@;'; put 'put ''YXIgX2U9eS5nZXRBdHRyaWJ1dGUoImRhdGEtdiIpfHx5LmdldEF0dHJpYnV0ZSgidiIpO2lmKG51bGwhPShwZT15LmdldEF0dHJpYnV0ZSgiZGF0YS16Iil8fHkuZ2V0QXR0cmlidXRlKCJ6IikpJiYocmUuej1wZSksbnVsbCE9TCYmbnVsbCE9X2UpcmV0dXJuIHJlLnQ9TCxyZS52PV9lLHJl''@;'; put 'put ''fXJldHVybiBudWxsIT1QJiYoMD09UC5sZW5ndGg/cmUudD1MfHwieiI6US5yYXd8fCFQLnRyaW0oKS5sZW5ndGh8fCJzIj09THx8KHJlPSRuKFAsUSkpKSxwZSYmKHJlLno9cGUpLHJlfSh5LFJjKHBlKSxMLHJlKTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSImJih2ZS5zPXZmKHks''@;'; put 'put ''UCxyZS5ib3JkZXJzKSxkZWxldGUgdmUucy50ZXh0X3RyYW5zZm9ybSx5LmNoaWxkTm9kZXMubGVuZ3RoPjF8fDE9PXkuY2hpbGROb2Rlcy5sZW5ndGgmJjMhPXkuY2hpbGROb2Rlc1swXS5ub2RlVHlwZSkpc3dpdGNoKGlfKHksdmUuUj1bXSxudWxsKSx2ZS5SJiZ2ZS5SW3ZlLlIubGVuZ3Ro''@;'; put 'put ''LTFdJiYiXG4iPT12ZS5SW3ZlLlIubGVuZ3RoLTFdLnYmJnZlLlIubGVuZ3RoLS0sKF9lWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnZlLlIuZm9yRWFjaChmdW5jdGlvbihudCl7bnQudj1udC52LnRvVXBwZXJDYXNlKCl9KTticmVhaztj''@;'; put 'put ''YXNlImxvd2VyY2FzZSI6dmUuUi5mb3JFYWNoKGZ1bmN0aW9uKG50KXtudC52PW50LnYudG9Mb3dlckNhc2UoKX0pfWlmKCJzIj09dmUudCl7dmFyIFNlPXZlLnYubWF0Y2goL1xuLyk7IVNlJiZ2ZS5SJiZ2ZS5SLmZvckVhY2goZnVuY3Rpb24obnQpeyJzdHJpbmciPT10eXBlb2YgbnQudiYm''@;'; put 'put ''bnQudi5tYXRjaCgvXG4vKSYmKFNlPSEwKX0pLCJzIj09dmUudCYmU2UmJih2ZS5zfHwodmUucz17fSksdmUucy5hbGlnbm1lbnR8fCh2ZS5zLmFsaWdubWVudD17fSksdmUucy5hbGlnbm1lbnQud3JhcFRleHQ9ITApfWlmKFApe3ZhciBIZT0iIixWZT1QLmdldEVsZW1lbnRzQnlUYWdOYW1l''@;'; put 'put ''KCJBIik7aWYoVmUmJlZlLmxlbmd0aClmb3IodmFyIEdlPTA7R2U8VmUubGVuZ3RoJiYoIVZlW0dlXS5oYXNBdHRyaWJ1dGUoImhyZWYiKXx8IiMiPT0oSGU9VmVbR2VdLmdldEF0dHJpYnV0ZSgiaHJlZiIpKS5jaGFyQXQoMCkpOysrR2UpO0hlJiYiIyIhPUhlLmNoYXJBdCgwKSYmKHZlLmw9''@;'; put 'put ''e1RhcmdldDpIZX0pfXJldHVybiB2ZX1mdW5jdGlvbiBrTSh5LFAsTCl7dmFyIHJlLFE9UC5yb3dzO2lmKCFRKXtpZihMJiZudWxsIT1MLm9yaWdpbil0aHJvdyJVbnN1cHBvcnRlZCBvcmlnaW4gd2hlbiAiK1AudGFnTmFtZSsiIGlzIG5vdCBhIFRBQkxFIjtyZXR1cm4gZnVuY3Rpb24gRU0o''@;'; put 'put ''eSxQLEwpe0w9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShMfHx7fSkpO3ZhciBwZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O3lbIiFtZXJnZXMiXXx8KHlbIiFtZXJnZXMiXT1bXSk7Zm9yKHZhciB2ZSxfZT1QLmNoaWxkcmVuLFNlPTAsSGU9MDtIZTxfZS5sZW5ndGg7KytIZSl7dmFy''@;'; put 'put ''IG50LFZlPV9lW0hlXSxHZT0iIjt0cnl7dHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiP250PWdldENvbXB1dGVkU3R5bGU6VmUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIFZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHls''@;'; put 'put ''ZSYmKG50PVZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fWlmKCFudHx8Im5vbmUiIT1udChWZSkuZGlzcGxheSlzd2l0Y2goVmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlIlRBQkxFIjpTZT0tMSx5WyIhcmVmIl0mJihMLm9yaWdpbj0t''@;'; put 'put ''MSksa00oeSxWZSxMKTticmVhaztjYXNlIkJSIjpjYXNlIkhSIjpTZT0tMSx5WyIhcmVmIl0/KCsrKHBlPVdzKHlbIiFyZWYiXSkpLmUucix5WyIhcmVmIl09T28ocGUpKTp5WyIhcmVmIl09IkExOkExIjticmVhaztjYXNlIkRJViI6Y2FzZSJQIjpjYXNlIkgxIjpjYXNlIkgyIjpjYXNlIkgz''@;'; put 'put ''IjpjYXNlIkg0IjpjYXNlIkg1IjpjYXNlIkg2IjpTZT0tMSx2ZT1vXyhWZSxudWxsLCIiLDAsTCkseVsiIXJlZiJdPyhMLm9yaWdpbj0tMSxzMCh5LFtbdmVdXSxMKSk6KHlbIiFyZWYiXT0iQTEiLEFycmF5LmlzQXJyYXkoeSk/KHlbMF18fCh5WzBdPVtdKSx5WzBdWzBdPXZlKTp5LkExPXZl''@;'; put 'put ''KSx5WyIhcm93cyJdfHwoeVsiIXJvd3MiXT1bXSksbnQmJihwZT1Xcyh5WyIhcmVmIl0pLChHZT1udChWZSkuaGVpZ2h0KSYmImF1dG8iIT1HZSYmKHlbIiFyb3dzIl1bcGUuZS5yXT17aHB0OnBhcnNlSW50KEdlLDEwKX0pKTticmVhaztjYXNlIlNQQU4iOmNhc2UiQSI6Y2FzZSJCIjpjYXNl''@;'; put 'put ''IkVNIjpjYXNlIkkiOmNhc2UiRk9OVCI6Y2FzZSJTIjpjYXNlIlNVQiI6Y2FzZSJTVVAiOmNhc2UiVSI6dmU9b18oVmUsbnVsbCwiIiwwLEwpLHlbIiFyZWYiXXx8KHlbIiFyZWYiXT0iQTE6QTEiKSxzMCh5LFtbdmVdXSx7b3JpZ2luOmRpKHtyOihTZTwwPzE6MCkrKHBlPVdzKHlbIiFyZWYi''@;'; put 'put ''XSkpLmUucixjOisrU2V9KX0pO2JyZWFrO2Nhc2UiREwiOmNhc2UiVUwiOmNhc2UiT0wiOlNlPS0xLGNvbnNvbGUuZXJyb3IoIkhUTUwgQ29udmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGxpc3QgZWxlbWVudCAiK1ZlLnRhZ05hbWUudG9VcHBlckNhc2UoKSk7YnJlYWs7ZGVmYXVsdDpTZT0t''@;'; put 'put ''MSxjb25zb2xlLmVycm9yKCJTa2lwcGluZyAiK1ZlLnRhZ05hbWUudG9VcHBlckNhc2UoKSl9fXJldHVybiB5fSh5LFAsTCl9dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9yZT1nZXRDb21wdXRlZFN0eWxlOlAub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFAub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYocmU9UC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe312YXIgcGU9THx8e307bnVsbCE9dGUmJihwZS5kZW5zZT10ZSk7dmFyIF9lPTAsdmU9MDtpZihu''@;'; put 'put ''dWxsIT1wZS5vcmlnaW4paWYoIm51bWJlciI9PXR5cGVvZiBwZS5vcmlnaW4pX2U9cGUub3JpZ2luO2Vsc2V7dmFyIFNlPSJzdHJpbmciPT10eXBlb2YgcGUub3JpZ2luP3NzKHBlLm9yaWdpbik6cGUub3JpZ2luO19lPVNlLnIsdmU9U2UuY312YXIgSGU9TWF0aC5taW4ocGUuc2hlZXRSb3dz''@;'; put 'put ''fHwxZTcsUS5sZW5ndGgpLFZlPXtzOntyOjAsYzowfSxlOntyOl9lLGM6dmV9fTtpZih5WyIhcmVmIl0pe3ZhciBHZT1Xcyh5WyIhcmVmIl0pO1ZlLnMucj1NYXRoLm1pbihWZS5zLnIsR2Uucy5yKSxWZS5zLmM9TWF0aC5taW4oVmUucy5jLEdlLnMuYyksVmUuZS5yPU1hdGgubWF4KFZlLmUu''@;'; put 'put ''cixHZS5lLnIpLFZlLmUuYz1NYXRoLm1heChWZS5lLmMsR2UuZS5jKSwtMT09X2UmJihWZS5lLnI9X2U9R2UuZS5yKzEpfXZhciBudD1bXSxkdD0wLEN0PXlbIiFyb3dzIl18fCh5WyIhcm93cyJdPVtdKSxjdD0wLGJ0PTAsRnQ9MCxFdD0wLFR0PTAsWnQ9MDtmb3IoeVsiIWNvbHMiXXx8KHlb''@;'; put 'put ''IiFjb2xzIl09W10pO2N0PFEubGVuZ3RoJiZidDxIZTsrK2N0KXtmb3IodmFyIHBuPVFbY3RdLEtuPXBuLnBhcmVudEVsZW1lbnQ7IlRBQkxFIiE9S24udGFnTmFtZS50b1VwcGVyQ2FzZSgpOylLbj1Lbi5wYXJlbnRFbGVtZW50O2lmKEtuPT1QKXtlOmlmKHR5cGVvZiByZTwidSIpe3ZhciB1''@;'; put 'put ''bj1yZShwbik7aWYobnVsbD09dW4pYnJlYWsgZTtpZih1bi5zdHlsZXx8KHVuLnN0eWxlPXt9KSxwZS5kaXNwbGF5JiYibm9uZSI9PSh1bi5kaXNwbGF5fHx1bi5zdHlsZS5kaXNwbGF5KSljb250aW51ZTsibm9uZSI9PSh1bi5kaXNwbGF5fHx1bi5zdHlsZS5kaXNwbGF5KSYmKChDdFtidF18''@;'; put 'put ''fChDdFtidF09e30pKS5oaWRkZW49ITApfXZhciBxbj1wbi5jZWxscztmb3IoRnQ9RXQ9MDtGdDxxbi5sZW5ndGg7KytGdCl7dmFyIHpuPXFuW0Z0XSxBbj1udWxsO2lmKCEodHlwZW9mIHJlPCJ1IiYmKG51bGw9PUFuJiYoQW49cmUoem4pKSxBbi5zdHlsZXx8KEFuLnN0eWxlPXt9KSxwZS5k''@;'; put 'put ''aXNwbGF5JiZudWxsIT1BbiYmIm5vbmUiPT0oQW4uZGlzcGxheXx8QW4uc3R5bGUuZGlzcGxheSkpKSl7Zm9yKFp0PSt6bi5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKXx8MSxkdD0wO2R0PG50Lmxlbmd0aDsrK2R0KXt2YXIgZXI9bnRbZHRdO2VyLnMuYz09RXQrdmUmJmVyLnMucjxidCtfZSYm''@;'; put 'put ''YnQrX2U8PWVyLmUuciYmKEV0PWVyLmUuYysxLXZlLGR0PS0xKX0oKFR0PSt6bi5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKXx8MSk+MXx8WnQ+MSkmJm50LnB1c2goe3M6e3I6YnQrX2UsYzpFdCt2ZX0sZTp7cjpidCtfZSsoVHR8fDEpLTEsYzpFdCt2ZSsoWnR8fDEpLTF9fSk7dmFyIHRyPXpu''@;'; put 'put ''LmdldEF0dHJpYnV0ZSgidCIpfHwiIixabj16bi5nZXRBdHRyaWJ1dGUoImJnY29sb3IiKTtlOmlmKHR5cGVvZiByZTwidSIpe2lmKG51bGw9PUFuJiYoQW49cmUoem4pKSxudWxsPT1BbilicmVhayBlO2lmKEFuLnN0eWxlfHwoQW4uc3R5bGU9e30pLDE9PVp0JiZBbi53aWR0aCYmKHlbIiFj''@;'; put 'put ''b2xzIl1bRXQrdmVdPXlbIiFjb2xzIl1bRXQrdmVdfHx7fSxBbi53aWR0aC5tYXRjaCgvcHgvKT95WyIhY29scyJdW0V0K3ZlXS53cHg9TWF0aC5tYXgocGFyc2VJbnQoQW4ud2lkdGgsMTApKzUseVsiIWNvbHMiXVtFdCt2ZV0ud3B4fHwwKTpBbi53aWR0aC5tYXRjaCgvcHQvKSYmKHlbIiFj''@;'; put 'put ''b2xzIl1bRXQrdmVdLndweD1NYXRoLm1heCg0KnBhcnNlSW50KEFuLndpZHRoLDEwKS8zKzUseVsiIWNvbHMiXVtFdCt2ZV0ud3B4fHwwKSkpLFR0PD0xKXtDdFtidCtfZV18fChDdFtidCtfZV09e30pO3ZhciBOcj1Bbi5oZWlnaHQ7KE5yPU5yLm1hdGNoKC9wdC8pP1UxKHBhcnNlSW50KE5y''@;'; put 'put ''LDEwKSk6cGFyc2VJbnQoTnIsMTApKT4oQ3RbYnQrX2VdLmhweHx8VTEoQ3RbYnQrX2VdLmhwdCl8fDApJiYoZGVsZXRlIEN0W2J0K19lXS5ocHQsQ3RbYnQrX2VdLmhweD1Ocil9fXZhciBvaT16bjtpZih6bi5maXJzdEVsZW1lbnRDaGlsZCYmMT09em4uY2hpbGRyZW4ubGVuZ3RoJiYic3Bh''@;'; put 'put ''biI9PXpuLmZpcnN0RWxlbWVudENoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Zvcih2YXIga2k9MCxMaT16bi5jaGlsZE5vZGVzLFFyPTA7UXI8TGkubGVuZ3RoOysrUXIpMz09TGlbUXJdLm5vZGVUeXBlJiYrK2tpOzA9PWtpJiYoem49em4uZmlyc3RFbGVtZW50Q2hpbGQpfXZhciB1''@;'; put 'put ''cj1vXyh6bixvaSx0ciwwLHBlKTtpZihBbil7dmFyIFRuPXJlKHpuKTtpZihUbiYmIVRuLnN0eWxlJiYoVG4uc3R5bGU9e30pLChUbiYmVG5bImJhY2tncm91bmQtY29sb3IiXXx8QW5bImJhY2tncm91bmQtY29sb3IiXSkmJih1ci5zfHwodXIucz17fSksIXVyLnMuZmdDb2xvcikpdHJ5e3Zh''@;'; put 'put ''ciB2cj1UbiYmVG5bImJhY2tncm91bmQtY29sb3IiXXx8QW5bImJhY2tncm91bmQtY29sb3IiXTt2ci5tYXRjaCgvcmdiYVsoXVxzKjAuKlspXS9pKSYmKHZyPUFuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pO3ZhciBycj1ONCh2ci50b0xvd2VyQ2FzZSgpLCEwKTtycj49MCYmKHVyLnMuZmdDb2xv''@;'; put 'put ''cj17cmdiOnJyfSl9Y2F0Y2h7fXN3aXRjaChBblsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJtaWRkbGUiOmNhc2UiYmFzZWxpbmUiOnVyLnN8fCh1ci5zPXt9KSx1ci5zLmFsaWdubWVudHx8KHVyLnMuYWxpZ25tZW50PXt9KSx1ci5zLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIn19aWYo''@;'; put 'put ''Wm4mJih1ci5zfHwodXIucz17fSksIXVyLnMuZmdDb2xvcikpdHJ5e3ZhciBTbj1ONChabi50b0xvd2VyQ2FzZSgpLCEwKTtTbj49MCYmKHVyLnMuZmdDb2xvcj17cmdiOlNufSl9Y2F0Y2h7fWlmKHBlLmRlbnNlPyh5W2J0K19lXXx8KHlbYnQrX2VdPVtdKSx5W2J0K19lXVtFdCt2ZV09dXIp''@;'; put 'put ''OnlbZGkoe2M6RXQrdmUscjpidCtfZX0pXT11cixUdD4xfHxadD4xKWZvcih2YXIgcHI9YnQ7cHI8YnQrVHQ7Kytwcilmb3IodmFyIENpPUV0O0NpPEV0K1p0OysrQ2kpYnQ9PXByJiZFdD09Q2l8fChwZS5kZW5zZT8oeVtwcitfZV18fCh5W3ByK19lXT1bXSkseVtwcitfZV1bQ2krdmVdPXt0''@;'; put 'put ''OiJ6IixzOm9uKHVyLnN8fHt9KX0pOnlbZGkoe2M6Q2krdmUscjpwcitfZX0pXT17dDoieiIsczpvbih1ci5zfHx7fSl9KTtWZS5lLmM8RXQrdmUmJihWZS5lLmM9RXQrdmUpLEV0Kz1adH19KytidH19aWYobnQubGVuZ3RoJiYoeVsiIW1lcmdlcyJdPSh5WyIhbWVyZ2VzIl18fFtdKS5jb25j''@;'; put 'put ''YXQobnQpKSxWZS5lLnI9TWF0aC5tYXgoVmUuZS5yLGJ0LTErX2UpLHlbIiFyZWYiXT1PbyhWZSksYnQ+PUhlJiYoeVsiIWZ1bGxyZWYiXT1PbygoVmUuZS5yPVEubGVuZ3RoLWN0K2J0LTErX2UsVmUpKSkscGUuYm9yZGVycylmb3IoYnQ9VmUucy5yO2J0PD1WZS5lLnI7KytidClmb3IoRXQ9''@;'; put 'put ''VmUucy5jO0V0PD1WZS5lLmM7KytFdClpZighcGUuZGVuc2Upe3ZhciBCcj15W2RpKHtyOmJ0LGM6RXR9KV07aWYoIUJyfHwhQnIucyljb250aW51ZTtpZihidD4wKXt2YXIgamk9eVtkaSh7cjpidC0xLGM6RXR9KV07amkmJmppLnMmJmppLnMuYm90dG9tJiZkZWxldGUgQnIucy50b3B9aWYo''@;'; put 'put ''RXQ+MCl7dmFyIF9vPXlbZGkoe3I6YnQsYzpFdC0xfSldO19vJiZfby5zJiZfby5zLmJvdHRvbSYmZGVsZXRlIEJyLnMubGVmdH19cmV0dXJuIHl9ZnVuY3Rpb24gSHUoeSxQKXtyZXR1cm4ga00oKFB8fHt9KS5kZW5zZT9bXTp7fSx5LFApfXZhciBRMD1mdW5jdGlvbigpe3ZhciB5PWZ1bmN0''@;'; put 'put ''aW9uKFEscmUscGUpe3ZhciBfZT1RLnJlcGxhY2UoL1tcdFxyXG5dL2csIiAiKS50cmltKCkucmVwbGFjZSgvICsvZywiICIpLnJlcGxhY2UoLzx0ZXh0OnNcLz4vZywiICIpLnJlcGxhY2UoLzx0ZXh0OnMgdGV4dDpjPSIoXGQrKSJcLz4vZyxmdW5jdGlvbihWZSxHZSl7cmV0dXJuIEFycmF5''@;'; put 'put ''KHBhcnNlSW50KEdlLDEwKSsxKS5qb2luKCIgIil9KS5yZXBsYWNlKC88dGV4dDp0YWJbXj5dKlwvPi9nLCJcdCIpLnJlcGxhY2UoLzx0ZXh0OmxpbmUtYnJlYWtcLz4vZywiXG4iKSx2ZT14cihfZS5yZXBsYWNlKC88W14+XSo+L2csIiIpKSxTZT1bXSxIZT0wO3JldHVybiBfZS5yZXBsYWNl''@;'; put 'put ''KC8oPHRleHQ6c3Bhbi4qPz4pKC4qPyk8W1wvXXRleHQ6c3Bhbj4vZyxmdW5jdGlvbihWZSxHZSxudCxkdCl7ZHQhPUhlJiZTZS5wdXNoKHt0OiJzIix2OnhyKF9lLnNsaWNlKEhlLGR0KSl9KTt2YXIgQ3Q9e3Q6InMiLHY6eHIobnQpfSxjdD1sbihHZSlbInN0eWxlLW5hbWUiXTtyZXR1cm4g''@;'; put 'put ''Y3QmJnBlW2N0XSYmKEN0LnM9b24ocGVbY3RdKSksU2UucHVzaChDdCksSGU9ZHQrVmUubGVuZ3RoLCIifSksSGU8X2UubGVuZ3RoJiZTZS5wdXNoKHt0OiJzIix2OnhyKF9lLnNsaWNlKEhlKSl9KSxbdmUsU2VdfSxQPXtkYXk6WyJkIiwiZGQiXSxtb250aDpbIm0iLCJtbSJdLHllYXI6WyJ5''@;'; put 'put ''IiwieXkiXSxob3VyczpbImgiLCJoaCJdLG1pbnV0ZXM6WyJtIiwibW0iXSxzZWNvbmRzOlsicyIsInNzIl0sImFtLXBtIjpbIkEvUCIsIkFNL1BNIl0sImRheS1vZi13ZWVrIjpbImRkZCIsImRkZGQiXSxlcmE6WyJlIiwiZWUiXSxxdWFydGVyOlsiXFxRbSIsJ21cXCJ0aCBxdWFydGVyIidd''@;'; put 'put ''fSxMPWZ1bmN0aW9uKFEscmUpe3ZhciBwZT1sbihRLnNsaWNlKDAsUS5pbmRleE9mKCI+IikpKSxfZT1RLnNsaWNlKFEuaW5kZXhPZigiPiIpKzEpLHZlPXtuYW1lOnBlLm5hbWUsZmFtaWx5OnBlLmZhbWlseX07W1sicGFyZW50IiwicGFyZW50LXN0eWxlLW5hbWUiXSxbImRhdGFuYW1lIiwi''@;'; put 'put ''ZGF0YS1zdHlsZS1uYW1lIl0sWyJtcG5hbWUiLCJtYXN0ZXItcGFnZS1uYW1lIl1dLmZvckVhY2goZnVuY3Rpb24oSGUpe3BlW0hlWzFdXSYmKHZlW0hlWzBdXT1wZVtIZVsxXV0pfSk7dmFyIFNlPXt9O19lLnJlcGxhY2UoJHQsZnVuY3Rpb24oSGUpe3ZhciBWZT1sbihIZSk7aWYoIjxzdHls''@;'; put 'put ''ZTp0ZXh0LXByb3BlcnRpZXMiPT09VmVbMF0pe2lmKFZlWyJmb250LXdlaWdodCJdJiYoU2UuYm9sZD0rKCJib2xkIj09VmVbImZvbnQtd2VpZ2h0Il18fCI3MDAiPT1WZVsiZm9udC13ZWlnaHQiXSkpLCgiaXRhbGljIj09VmVbImZvbnQtc3R5bGUiXXx8Im9ibGlxdWUiPT1WZVsiZm9udC1z''@;'; put 'put ''dHlsZSJdKSYmKFNlLml0YWxpYz0xKSwibm9uZSIhPShWZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiKT9TZS51bmRlcmxpbmU9ImRvdWJsZSI9PVZlWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0/MjoxOihWZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiPT1WZVsidGV4''@;'; put 'put ''dC11bmRlcmxpbmUtdHlwZSJdKSYmKFNlLnVuZGVybGluZT0wKSwoVmVbImZvbnQtc2l6ZSJdfHwiIikubWF0Y2goL3B0JC8pJiYoU2Uuc3o9K1ZlWyJmb250LXNpemUiXS5yZXBsYWNlKCJwdCIsIiIpKSwibm9uZSIhPShWZVsidGV4dC1saW5lLXRocm91Z2gtc3R5bGUiXXx8Im5vbmUiKSYm''@;'; put 'put ''KFNlLnN0cmlrZT0xKSxWZVsiZm9udC1uYW1lIl0mJihTZS5uYW1lPVZlWyJmb250LW5hbWUiXSksVmUuY29sb3Ipe3ZhciBHZT1ONChWZS5jb2xvciwhMCk7R2U+PTAmJihTZS5jb2xvcj1HZSl9c3dpdGNoKFZlWyJ0ZXh0LXBvc2l0aW9uIl0pe2Nhc2Uic3VwZXIiOlNlLnZhbGlnbj0ic3Vw''@;'; put 'put ''ZXIiO2JyZWFrO2Nhc2Uic3ViIjpTZS52YWxpZ249InN1YiI7YnJlYWs7ZGVmYXVsdDooVmVbInRleHQtcG9zaXRpb24iXXx8IiIpLm1hdGNoKC8lLykmJihTZS52YWxpZ249Ii0iPT1WZVsidGV4dC1wb3NpdGlvbiJdLmNoYXJBdCgwKT8ic3ViIjoic3VwZXIiKX0ibm9uZSIhPShWZVsidGV4''@;'; put 'put ''dC1zaGFkb3ciXXx8Im5vbmUiKSYmKFNlLnNoYWRvdz0xKX1yZXR1cm4iIn0pLHJlW3BlLm5hbWVdPVNlfTtyZXR1cm4gZnVuY3Rpb24ocmUscGUpe3ZhciBfZT1wZXx8e307bnVsbCE9dGUmJm51bGw9PV9lLmRlbnNlJiYoX2UuZGVuc2U9dGUpO3ZhciBIZSxWZSxDdCxjdCxUdCxadCx2ZT1K''@;'; put 'put ''dihyZSksU2U9W10sR2U9e25hbWU6IiJ9LG50PSIiLGR0PTAsYnQ9e30sRnQ9W10sRXQ9X2UuZGVuc2U/W106e30scG49e3ZhbHVlOiIifSxLbj0iIix1bj0wLHpuPVtdLEFuPS0xLGVyPS0xLHRyPXtzOntyOjFlNixjOjFlN30sZTp7cjowLGM6MH19LFpuPTAsTnI9e30sb2k9W10sa2k9e30s''@;'; put 'put ''TGk9MCxRcj0wLHVyPVtdLFRuPTEsdnI9MSxycj1bXSxTbj17TmFtZXM6W119LHByPXt9LENpPVsiIiwiIl0sQnI9W10samk9e30sX289e30sRGk9MCxZbz0iIixsbz0wLEFvPSExLHhvPSExLGhpPTA7Zm9yKHpyLmxhc3RJbmRleD0wLHZlPXZlLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+''@;'; put 'put ''L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIik7VHQ9enIuZXhlYyh2ZSk7KXN3aXRjaChUdFszXT1UdFszXS5yZXBsYWNlKC9fLiokLywiIikpe2Nhc2UidGFibGUiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjoiLyI9PT1UdFsxXT8oRXRbIiFyZWYi''@;'; put 'put ''XT10ci5lLmM+PXRyLnMuYyYmdHIuZS5yPj10ci5zLnI/T28odHIpOiJBMTpBMSIsX2Uuc2hlZXRSb3dzPjAmJl9lLnNoZWV0Um93czw9dHIuZS5yJiYoRXRbIiFmdWxscmVmIl09RXRbIiFyZWYiXSx0ci5lLnI9X2Uuc2hlZXRSb3dzLTEsRXRbIiFyZWYiXT1Pbyh0cikpLG9pLmxlbmd0aCYm''@;'; put 'put ''KEV0WyIhbWVyZ2VzIl09b2kpLHVyLmxlbmd0aCYmKEV0WyIhcm93cyJdPXVyKSxDdC5uYW1lPUN0Llx1NTQwZFx1NzlmMHx8Q3QubmFtZSx0eXBlb2YgSlNPTjwidSImJkpTT04uc3RyaW5naWZ5KEN0KSxGdC5wdXNoKEN0Lm5hbWUpLGJ0W0N0Lm5hbWVdPUV0LHhvPSExKToiLyIhPT1UdFsw''@;'; put 'put ''XS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIpJiYoQ3Q9bG4oVHRbMF0sITEpLEFuPWVyPS0xLHRyLnMucj10ci5zLmM9MWU3LHRyLmUucj10ci5lLmM9MCxFdD1fZS5kZW5zZT9bXTp7fSxvaT1bXSx1cj1bXSx4bz0hMCk7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ctZ3JvdXAiOiIvIj09PVR0WzFdPy0t''@;'; put 'put ''Wm46KytabjticmVhaztjYXNlInRhYmxlLXJvdyI6Y2FzZSJcdTg4NGMiOmlmKCIvIj09PVR0WzFdKXtBbis9VG4sVG49MTticmVha31pZigoY3Q9bG4oVHRbMF0sITEpKS5cdTg4NGNcdTUzZjc/QW49Y3QuXHU4ODRjXHU1M2Y3LTE6LTE9PUFuJiYoQW49MCksKFRuPStjdFsibnVtYmVyLXJv''@;'; put 'put ''d3MtcmVwZWF0ZWQiXXx8MSk8MTApZm9yKGhpPTA7aGk8VG47KytoaSlabj4wJiYodXJbQW4raGldPXtsZXZlbDpabn0pO2VyPS0xO2JyZWFrO2Nhc2UiY292ZXJlZC10YWJsZS1jZWxsIjoiLyIhPT1UdFsxXSYmKytlcixfZS5zaGVldFN0dWJzJiYoX2UuZGVuc2U/KEV0W0FuXXx8KEV0W0Fu''@;'; put 'put ''XT1bXSksRXRbQW5dW2VyXT17dDoieiJ9KTpFdFtkaSh7cjpBbixjOmVyfSldPXt0OiJ6In0pLEtuPSIiLHpuPVtdO2JyZWFrO2Nhc2UidGFibGUtY2VsbCI6Y2FzZSJcdTY1NzBcdTYzNmUiOmlmKCIvIj09PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikpKytlcixwbj1sbihUdFswXSwh''@;'; put 'put ''MSksdnI9cGFyc2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCksWnQ9e3Q6InoiLHY6bnVsbH0scG4uZm9ybXVsYSYmMCE9X2UuY2VsbEZvcm11bGEmJihadC5mPWFTKHhyKHBuLmZvcm11bGEpKSksInN0cmluZyI9PShwbi5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3''@;'; put 'put ''OGJ8fHBuWyJ2YWx1ZS10eXBlIl0pJiYoWnQudD0icyIsWnQudj14cihwblsic3RyaW5nLXZhbHVlIl18fCIiKSxfZS5kZW5zZT8oRXRbQW5dfHwoRXRbQW5dPVtdKSxFdFtBbl1bZXJdPVp0KTpFdFtkaSh7cjpBbixjOmVyfSldPVp0KSxlcis9dnItMTtlbHNlIGlmKCIvIiE9PVR0WzFdKXt2''@;'; put 'put ''cj0xO3ZhciB0YT1Ubj9BbitUbi0xOkFuO2lmKCsrZXI+dHIuZS5jJiYodHIuZS5jPWVyKSxlcjx0ci5zLmMmJih0ci5zLmM9ZXIpLEFuPHRyLnMuciYmKHRyLnMucj1BbiksdGE+dHIuZS5yJiYodHIuZS5yPXRhKSxCcj1bXSxqaT17fSxadD17dDoocG49bG4oVHRbMF0sITEpKS5cdTY1NzBc''@;'; put 'put ''dTYzNmVcdTdjN2JcdTU3OGJ8fHBuWyJ2YWx1ZS10eXBlIl0sdjpudWxsfSxfZS5jZWxsRm9ybXVsYSlpZihwbi5mb3JtdWxhJiYocG4uZm9ybXVsYT14cihwbi5mb3JtdWxhKSkscG5bIm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl0mJnBuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bh''@;'; put 'put ''bm5lZCJdJiYoTGk9cGFyc2VJbnQocG5bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0sMTApfHwwLFFyPXBhcnNlSW50KHBuWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxadC5GPU9vKGtpPXtzOntyOkFuLGM6ZXJ9LGU6e3I6QW4rTGktMSxjOmVyK1FyLTF9''@;'; put 'put ''fSkscnIucHVzaChba2ksWnQuRl0pKSxwbi5mb3JtdWxhKVp0LmY9YVMocG4uZm9ybXVsYSk7ZWxzZSBmb3IoaGk9MDtoaTxyci5sZW5ndGg7KytoaSlBbj49cnJbaGldWzBdLnMuciYmQW48PXJyW2hpXVswXS5lLnImJmVyPj1ycltoaV1bMF0ucy5jJiZlcjw9cnJbaGldWzBdLmUuYyYmKFp0''@;'; put 'put ''LkY9cnJbaGldWzFdKTtzd2l0Y2goKHBuWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl18fHBuWyJudW1iZXItcm93cy1zcGFubmVkIl0pJiYoTGk9cGFyc2VJbnQocG5bIm51bWJlci1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsUXI9cGFyc2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQi''@;'; put 'put ''XSwxMCl8fDAsb2kucHVzaChraT17czp7cjpBbixjOmVyfSxlOntyOkFuK0xpLTEsYzplcitRci0xfX0pKSxwblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSYmKHZyPXBhcnNlSW50KHBuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdLDEwKSksWnQudCl7Y2FzZSJib29sZWFuIjpadC50''@;'; put 'put ''PSJiIixadC52PXlyKHBuWyJib29sZWFuLXZhbHVlIl0pO2JyZWFrO2Nhc2UiZmxvYXQiOmNhc2UicGVyY2VudGFnZSI6Y2FzZSJjdXJyZW5jeSI6WnQudD0ibiIsWnQudj1wYXJzZUZsb2F0KHBuLnZhbHVlKTticmVhaztjYXNlImRhdGUiOlp0LnQ9ImQiLFp0LnY9SHQocG5bImRhdGUtdmFs''@;'; put 'put ''dWUiXSksX2UuY2VsbERhdGVzfHwoWnQudD0ibiIsWnQudj1VZShadC52KSksWnQuej0ibS9kL3l5IjticmVhaztjYXNlInRpbWUiOlp0LnQ9Im4iLFp0LnY9aXQocG5bInRpbWUtdmFsdWUiXSkvODY0MDAsX2UuY2VsbERhdGVzJiYoWnQudD0iZCIsWnQudj1odChadC52KSksWnQuej0iSEg6''@;'; put 'put ''TU06U1MiO2JyZWFrO2Nhc2UibnVtYmVyIjpadC50PSJuIixadC52PXBhcnNlRmxvYXQocG4uXHU2NTcwXHU2MzZlXHU2NTcwXHU1MDNjKTticmVhaztkZWZhdWx0OmlmKCJzdHJpbmciIT09WnQudCYmInRleHQiIT09WnQudCYmWnQudCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHZh''@;'; put 'put ''bHVlIHR5cGUgIitadC50KTtadC50PSJzIixudWxsIT1wblsic3RyaW5nLXZhbHVlIl0mJihLbj14cihwblsic3RyaW5nLXZhbHVlIl0pLHpuPVtdKX19ZWxzZXtpZihBbz0hMSwicyI9PT1adC50JiYoWnQudj1Lbnx8IiIsem4ubGVuZ3RoJiYoWnQuUj16biksQW89MD09dW4pLHByLlRhcmdl''@;'; put 'put ''dCYmKFp0Lmw9cHIpLEJyLmxlbmd0aD4wJiYoWnQuYz1CcixCcj1bXSksS24mJiExIT09X2UuY2VsbFRleHQmJihadC53PUtuKSxBbyYmKFp0LnQ9InoiLGRlbGV0ZSBadC52KSxfZS5jZWxsSFRNTCYmKFp0Lmg9WnQuUj9FOShadC5SKTpybygiIitadC52KSksKCFBb3x8X2Uuc2hlZXRTdHVi''@;'; put 'put ''cykmJiEoX2Uuc2hlZXRSb3dzJiZfZS5zaGVldFJvd3M8PUFuKSlmb3IodmFyIE1uPTA7TW48VG47KytNbil7aWYodnI9cGFyc2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCksX2UuZGVuc2UpZm9yKEV0W0FuK01uXXx8KEV0W0FuK01uXT1bXSksRXRbQW4rTW5d''@;'; put 'put ''W2VyXT0wPT1Nbj9adDpvbihadCk7LS12cj4wOylFdFtBbitNbl1bZXIrdnJdPW9uKFp0KTtlbHNlIGZvcihFdFtkaSh7cjpBbitNbixjOmVyfSldPVp0Oy0tdnI+MDspRXRbZGkoe3I6QW4rTW4sYzplcit2cn0pXT1vbihadCk7dHIuZS5jPD1lciYmKHRyLmUuYz1lcil9ZXIrPSh2cj1wYXJz''@;'; put 'put ''ZUludChwblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSktMSx2cj0wLFp0PXt9LEtuPSIiLHpuPVtdfXByPXt9O2JyZWFrO2Nhc2UiZG9jdW1lbnQiOmNhc2UiZG9jdW1lbnQtY29udGVudCI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2NcdTY1ODdcdTY4NjMiOmNh''@;'; put 'put ''c2Uic3ByZWFkc2hlZXQiOmNhc2UiXHU0ZTNiXHU0ZjUzIjpjYXNlInNjcmlwdHMiOmNhc2Uic3R5bGVzIjpjYXNlImZvbnQtZmFjZS1kZWNscyI6Y2FzZSJtYXN0ZXItc3R5bGVzIjppZigiLyI9PT1UdFsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PVR0WzNdKXRocm93IkJhZCBzdGF0ZTog''@;'; put 'put ''IitIZX1lbHNlIi8iIT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmU2UucHVzaChbVHRbM10sITBdKTticmVhaztjYXNlImFubm90YXRpb24iOmlmKCIvIj09PVR0WzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09VHRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK0hlO2ppLnQ9S24sem4u''@;'; put 'put ''bGVuZ3RoJiYoamkuUj16biksamkuYT1ZbyxCci5wdXNoKGppKX1lbHNlIi8iIT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmU2UucHVzaChbVHRbM10sITFdKTtZbz0iIixsbz0wLEtuPSIiLHVuPTAsem49W107YnJlYWs7Y2FzZSJjcmVhdG9yIjoiLyI9PT1UdFsxXT9Zbz12ZS5z''@;'; put 'put ''bGljZShsbyxUdC5pbmRleCk6bG89VHQuaW5kZXgrVHRbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UibWV0YSI6Y2FzZSJcdTUxNDNcdTY1NzBcdTYzNmUiOmNhc2Uic2V0dGluZ3MiOmNhc2UiY29uZmlnLWl0ZW0tc2V0IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1pbmRleGVkIjpjYXNlImNvbmZpZy1p''@;'; put 'put ''dGVtLW1hcC1lbnRyeSI6Y2FzZSJjb25maWctaXRlbS1tYXAtbmFtZWQiOmNhc2Uic2hhcGVzIjpjYXNlImZyYW1lIjpjYXNlInRleHQtYm94IjpjYXNlImltYWdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGVzIjpjYXNlImxpc3Qtc3R5bGUiOmNhc2UiZm9ybSI6Y2FzZSJkZGUtbGlua3MiOmNh''@;'; put 'put ''c2UiZXZlbnQtbGlzdGVuZXJzIjpjYXNlImNoYXJ0IjppZigiLyI9PT1UdFsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PVR0WzNdKXRocm93IkJhZCBzdGF0ZTogIitIZX1lbHNlIi8iIT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmU2UucHVzaChbVHRbM10sITFdKTtLbj0iIix1''@;'; put 'put ''bj0wLHpuPVtdO2JyZWFrO2Nhc2Uic2NpZW50aWZpYy1udW1iZXIiOmNhc2UiY3VycmVuY3ktc3ltYm9sIjpjYXNlImN1cnJlbmN5LXN0eWxlIjpjYXNlInNjcmlwdCI6Y2FzZSJsaWJyYXJpZXMiOmNhc2UiYXV0b21hdGljLXN0eWxlcyI6Y2FzZSJkZWZhdWx0LXN0eWxlIjpjYXNlInBhZ2Ut''@;'; put 'put ''bGF5b3V0IjpjYXNlIm1hcCI6Y2FzZSJmb250LWZhY2UiOmNhc2UicGFyYWdyYXBoLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jb2x1bW4tcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1yb3ctcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jZWxsLXByb3BlcnRp''@;'; put 'put ''ZXMiOmNhc2UiZnJhY3Rpb24iOmNhc2UiYm9vbGVhbi1zdHlsZSI6Y2FzZSJib29sZWFuIjpjYXNlInRleHQtc3R5bGUiOmNhc2UidGV4dC1jb250ZW50IjpjYXNlInRleHQtcHJvcGVydGllcyI6Y2FzZSJlbWJlZGRlZC10ZXh0IjpjYXNlImJvZHkiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4''@;'; put 'put ''XHU2ODNjIjpjYXNlImZvcm1zIjpjYXNlInRhYmxlLWNvbHVtbiI6Y2FzZSJ0YWJsZS1oZWFkZXItcm93cyI6Y2FzZSJ0YWJsZS1yb3dzIjpjYXNlInRhYmxlLWNvbHVtbi1ncm91cCI6Y2FzZSJ0YWJsZS1oZWFkZXItY29sdW1ucyI6Y2FzZSJ0YWJsZS1jb2x1bW5zIjpjYXNlIm51bGwtZGF0''@;'; put 'put ''ZSI6Y2FzZSJncmFwaGljLXByb3BlcnRpZXMiOmNhc2UiY2FsY3VsYXRpb24tc2V0dGluZ3MiOmNhc2UibmFtZWQtZXhwcmVzc2lvbnMiOmNhc2UibGFiZWwtcmFuZ2UiOmNhc2UibGFiZWwtcmFuZ2VzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb24iOmNhc2Uic29ydCI6Y2FzZSJzb3J0LWJ5Ijpj''@;'; put 'put ''YXNlInNvcnQtZ3JvdXBzIjpjYXNlInRhYiI6Y2FzZSJsaW5lLWJyZWFrIjpjYXNlInNwYW4iOmNhc2UicyI6Y2FzZSJkYXRlIjpjYXNlIm9iamVjdCI6Y2FzZSJ0aXRsZSI6Y2FzZSJcdTY4MDdcdTk4OTgiOmNhc2UiZGVzYyI6Y2FzZSJiaW5hcnktZGF0YSI6Y2FzZSJ0YWJsZS1zb3VyY2Ui''@;'; put 'put ''OmNhc2Uic2NlbmFyaW8iOmNhc2UiaXRlcmF0aW9uIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbnMiOmNhc2UiY29udGVudC12YWxpZGF0aW9uIjpjYXNlImhlbHAtbWVzc2FnZSI6Y2FzZSJlcnJvci1tZXNzYWdlIjpjYXNlImRhdGFiYXNlLXJhbmdlcyI6Y2FzZSJmaWx0ZXIiOmNhc2UiZmls''@;'; put 'put ''dGVyLWFuZCI6Y2FzZSJmaWx0ZXItb3IiOmNhc2UiZmlsdGVyLWNvbmRpdGlvbiI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLWJ1bGxldCI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLW51bWJlciI6Y2FzZSJsaXN0LWxldmVsLXByb3BlcnRpZXMiOmNhc2Uic2VuZGVyLWZpcnN0bmFtZSI6Y2FzZSJz''@;'; put 'put ''ZW5kZXItbGFzdG5hbWUiOmNhc2Uic2VuZGVyLWluaXRpYWxzIjpjYXNlInNlbmRlci10aXRsZSI6Y2FzZSJzZW5kZXItcG9zaXRpb24iOmNhc2Uic2VuZGVyLWVtYWlsIjpjYXNlInNlbmRlci1waG9uZS1wcml2YXRlIjpjYXNlInNlbmRlci1mYXgiOmNhc2Uic2VuZGVyLWNvbXBhbnkiOmNh''@;'; put 'put ''c2Uic2VuZGVyLXBob25lLXdvcmsiOmNhc2Uic2VuZGVyLXN0cmVldCI6Y2FzZSJzZW5kZXItY2l0eSI6Y2FzZSJzZW5kZXItcG9zdGFsLWNvZGUiOmNhc2Uic2VuZGVyLWNvdW50cnkiOmNhc2Uic2VuZGVyLXN0YXRlLW9yLXByb3ZpbmNlIjpjYXNlImF1dGhvci1uYW1lIjpjYXNlImF1dGhv''@;'; put 'put ''ci1pbml0aWFscyI6Y2FzZSJjaGFwdGVyIjpjYXNlImZpbGUtbmFtZSI6Y2FzZSJ0ZW1wbGF0ZS1uYW1lIjpjYXNlInNoZWV0LW5hbWUiOmNhc2UiZXZlbnQtbGlzdGVuZXIiOmNhc2UiaW5pdGlhbC1jcmVhdG9yIjpjYXNlImNyZWF0aW9uLWRhdGUiOmNhc2UicHJpbnQtZGF0ZSI6Y2FzZSJn''@;'; put 'put ''ZW5lcmF0b3IiOmNhc2UiZG9jdW1lbnQtc3RhdGlzdGljIjpjYXNlInVzZXItZGVmaW5lZCI6Y2FzZSJlZGl0aW5nLWR1cmF0aW9uIjpjYXNlImVkaXRpbmctY3ljbGVzIjpjYXNlImNvbmZpZy1pdGVtIjpjYXNlInBhZ2UtbnVtYmVyIjpjYXNlInBhZ2UtY291bnQiOmNhc2UidGltZSI6Y2Fz''@;'; put 'put ''ZSJjZWxsLXJhbmdlLXNvdXJjZSI6Y2FzZSJkZXRlY3RpdmUiOmNhc2Uib3BlcmF0aW9uIjpjYXNlImhpZ2hsaWdodGVkLXJhbmdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGUiOmNhc2Uic291cmNlLWNlbGwtcmFuZ2UiOmNhc2Uic291cmNlLXNlcnZpY2UiOmNhc2UiZGF0YS1waWxvdC1maWVs''@;'; put 'put ''ZCI6Y2FzZSJkYXRhLXBpbG90LWxldmVsIjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWxzIjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWwiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXJzIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVyIjpjYXNlImRhdGEtcGlsb3QtZGlzcGxheS1pbmZvIjpjYXNlImRh''@;'; put 'put ''dGEtcGlsb3Qtc29ydC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtbGF5b3V0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1maWVsZC1yZWZlcmVuY2UiOmNhc2UiZGF0YS1waWxvdC1ncm91cHMiOmNhc2UiZGF0YS1waWxvdC1ncm91cCI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwLW1lbWJlciI6Y2FzZSJy''@;'; put 'put ''ZWN0IjpjYXNlImRkZS1jb25uZWN0aW9uLWRlY2xzIjpjYXNlImRkZS1jb25uZWN0aW9uLWRlY2wiOmNhc2UiZGRlLWxpbmsiOmNhc2UiZGRlLXNvdXJjZSI6Y2FzZSJwcm9wZXJ0aWVzIjpjYXNlInByb3BlcnR5IjpjYXNlInRhYmxlLXByb3RlY3Rpb24iOmNhc2UiZGF0YS1waWxvdC1ncmFu''@;'; put 'put ''ZC10b3RhbCI6Y2FzZSJvZmZpY2UtZG9jdW1lbnQtY29tbW9uLWF0dHJzIjpicmVhaztjYXNlIm51bWJlci1zdHlsZSI6Y2FzZSJwZXJjZW50YWdlLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6aWYoIi8iPT09VHRbMV0pe2lmKE5yW0dlLm5hbWVdPW50LChIZT1T''@;'; put 'put ''ZS5wb3AoKSlbMF0hPT1UdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrSGV9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJihudD0iIixHZT1sbihUdFswXSwhMSksU2UucHVzaChbVHRbM10sITBdKSk7YnJlYWs7Y2FzZSJzdHlsZSI6Ii8+Ij09PVR0WzBdLnNsaWNlKC0y''@;'; put 'put ''KT9MKFR0WzBdLF9vKToiLyI9PVR0WzFdP0wodmUuc2xpY2UoRGksVHQuaW5kZXgrVHRbMF0ubGVuZ3RoKSxfbyk6RGk9VHQuaW5kZXg7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiZGF5IjpjYXNlIm1vbnRoIjpjYXNlInllYXIiOmNhc2UiZXJhIjpjYXNlImRheS1vZi13ZWVrIjpjYXNlIndl''@;'; put 'put ''ZWstb2YteWVhciI6Y2FzZSJxdWFydGVyIjpjYXNlImhvdXJzIjpjYXNlIm1pbnV0ZXMiOmNhc2Uic2Vjb25kcyI6Y2FzZSJhbS1wbSI6c3dpdGNoKFNlW1NlLmxlbmd0aC0xXVswXSl7Y2FzZSJ0aW1lLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOlZlPWxuKFR0WzBdLCExKSxudCs9UFtUdFsz''@;'; put 'put ''XV1bImxvbmciPT09VmUuc3R5bGU/MTowXX1icmVhaztjYXNlInRleHQiOmlmKCIvPiI9PT1UdFswXS5zbGljZSgtMikpYnJlYWs7aWYoIi8iPT09VHRbMV0pc3dpdGNoKFNlW1NlLmxlbmd0aC0xXVswXSl7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0''@;'; put 'put ''eWxlIjpudCs9dmUuc2xpY2UoZHQsVHQuaW5kZXgpfWVsc2UgZHQ9VHQuaW5kZXgrVHRbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UibmFtZWQtcmFuZ2UiOkNpPWJ2KChWZT1sbihUdFswXSwhMSkpWyJjZWxsLXJhbmdlLWFkZHJlc3MiXSk7dmFyIE1zPXtOYW1lOlZlLm5hbWUsUmVmOkNpWzBdKyIh''@;'; put 'put ''IitDaVsxXX07eG8mJihNcy5TaGVldD1GdC5sZW5ndGgpLFNuLk5hbWVzLnB1c2goTXMpO2JyZWFrO2Nhc2UicCI6Y2FzZSJcdTY1ODdcdTY3MmNcdTRlMzIiOmlmKFsibWFzdGVyLXN0eWxlcyJdLmluZGV4T2YoU2VbU2UubGVuZ3RoLTFdWzBdKT4tMSlicmVhaztpZigiLyIhPT1UdFsxXXx8''@;'; put 'put ''cG4mJnBuWyJzdHJpbmctdmFsdWUiXSlsbihUdFswXSwhMSksdW49VHQuaW5kZXgrVHRbMF0ubGVuZ3RoO2Vsc2V7dmFyIHlzPXkodmUuc2xpY2UodW4sVHQuaW5kZXgpLDAsX28pO0tuPShLbi5sZW5ndGg+MD9LbisiXG4iOiIiKSt5c1swXSx6bj15c1sxXX1icmVhaztjYXNlImRhdGFiYXNl''@;'; put 'put ''LXJhbmdlIjppZigiLyI9PT1UdFsxXSlicmVhazt0cnl7YnRbKENpPWJ2KGxuKFR0WzBdKVsidGFyZ2V0LXJhbmdlLWFkZHJlc3MiXSkpWzBdXVsiIWF1dG9maWx0ZXIiXT17cmVmOkNpWzFdfX1jYXRjaHt9YnJlYWs7Y2FzZSJhIjppZigiLyIhPT1UdFsxXSl7aWYoIShwcj1sbihUdFswXSwh''@;'; put 'put ''MSkpLmhyZWYpYnJlYWs7cHIuVGFyZ2V0PXhyKHByLmhyZWYpLGRlbGV0ZSBwci5ocmVmLCIjIj09cHIuVGFyZ2V0LmNoYXJBdCgwKSYmcHIuVGFyZ2V0LmluZGV4T2YoIi4iKT4tMT8oQ2k9YnYocHIuVGFyZ2V0LnNsaWNlKDEpKSxwci5UYXJnZXQ9IiMiK0NpWzBdKyIhIitDaVsxXSk6cHIu''@;'; put 'put ''VGFyZ2V0Lm1hdGNoKC9eXC5cLltcXFwvXS8pJiYocHIuVGFyZ2V0PXByLlRhcmdldC5zbGljZSgzKSl9YnJlYWs7ZGVmYXVsdDpzd2l0Y2goVHRbMl0pe2Nhc2UiZGM6IjpjYXNlImNhbGNleHQ6IjpjYXNlImxvZXh0OiI6Y2FzZSJvb286IjpjYXNlImNoYXJ0b29vOiI6Y2FzZSJkcmF3OiI6''@;'; put 'put ''Y2FzZSJzdHlsZToiOmNhc2UiY2hhcnQ6IjpjYXNlImZvcm06IjpjYXNlInVvZjoiOmNhc2UiXHU4ODY4OiI6Y2FzZSJcdTViNTc6IjpicmVhaztkZWZhdWx0OmlmKF9lLldURil0aHJvdyBuZXcgRXJyb3IoVHQpfX12YXIgRWw9e1NoZWV0czpidCxTaGVldE5hbWVzOkZ0LFdvcmtib29rOlNu''@;'; put 'put ''fTtyZXR1cm4gX2UuYm9va1NoZWV0cyYmZGVsZXRlIEVsLlNoZWV0cyxFbH19KCk7ZnVuY3Rpb24gc18oeSxQKXtyZXR1cm4gUTAoeSxQKX12YXIgSzE9ZnVuY3Rpb24oKXt2YXIgeT1bIiAgPG9mZmljZTptYXN0ZXItc3R5bGVzPiIsJyAgICA8c3R5bGU6bWFzdGVyLXBhZ2Ugc3R5bGU6bmFt''@;'; put 'put ''ZT0ibXAxIiBzdHlsZTpwYWdlLWxheW91dC1uYW1lPSJtcDEiPicsIiAgICAgIDxzdHlsZTpoZWFkZXIvPiIsJyAgICAgIDxzdHlsZTpoZWFkZXItbGVmdCBzdHlsZTpkaXNwbGF5PSJmYWxzZSIvPicsIiAgICAgIDxzdHlsZTpmb290ZXIvPiIsJyAgICAgIDxzdHlsZTpmb290ZXItbGVmdCBz''@;'; put 'put ''dHlsZTpkaXNwbGF5PSJmYWxzZSIvPicsIiAgICA8L3N0eWxlOm1hc3Rlci1wYWdlPiIsIiAgPC9vZmZpY2U6bWFzdGVyLXN0eWxlcz4iXS5qb2luKCJcbiIpLFA9IjxvZmZpY2U6ZG9jdW1lbnQtc3R5bGVzICIrUGEoeyJ4bWxuczpvZmZpY2UiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRv''@;'; put 'put ''Y3VtZW50OnhtbG5zOm9mZmljZToxLjAiLCJ4bWxuczp0YWJsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGFibGU6MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0eWxlOjEuMCIsInhtbG5zOnRleHQi''@;'; put 'put ''OiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wIiwieG1sbnM6ZHJhdyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6''@;'; put 'put ''eHNsLWZvLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieG1sbnM6ZGMiOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1s''@;'; put 'put ''bnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6b2YiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMiIsIm9mZmljZTp2ZXJzaW9uIjoi''@;'; put 'put ''MS4yIn0pKyI+XG4iK3krIlxuPC9vZmZpY2U6ZG9jdW1lbnQtc3R5bGVzPiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEJuK1B9fSgpLHYwPWZ1bmN0aW9uKCl7dmFyIHk9ZnVuY3Rpb24odmUsU2Upe3JldHVybiBGcih2ZSkucmVwbGFjZSgvICArL2csZnVuY3Rpb24oSGUpe3JldHVybic8''@;'; put 'put ''dGV4dDpzIHRleHQ6Yz0iJytIZS5sZW5ndGgrJyIvPid9KS5yZXBsYWNlKC9cdC9nLCI8dGV4dDp0YWIvPiIpLnJlcGxhY2UoL1xuL2csU2U/Ijx0ZXh0OmxpbmUtYnJlYWsvPiI6IjwvdGV4dDpwPjx0ZXh0OnA+IikucmVwbGFjZSgvXiAvLCI8dGV4dDpzLz4iKS5yZXBsYWNlKC8gJC8sIjx0''@;'; put 'put ''ZXh0OnMvPiIpfSxQPWZ1bmN0aW9uKHZlKXtyZXR1cm4gdmUubWFwKGZ1bmN0aW9uKFNlKXt2YXIgSGU9IiI7cmV0dXJuIG51bGwhPVNlLm9kcyYmKEhlKz0nIHRleHQ6c3R5bGUtbmFtZT0iVCcrU2Uub2RzKyciJyksU2Uudj8iPHRleHQ6c3BhbiIrSGUrIj4iK3koU2UudiwhMCkrIjwvdGV4''@;'; put 'put ''dDpzcGFuPiI6IiJ9KS5qb2luKCIiKX0sTD0iICAgICAgICAgIDx0YWJsZTp0YWJsZS1jZWxsIC8+XG4iLHJlPWZ1bmN0aW9uKHZlLFNlLEhlKXt2YXIgVmU9W107VmUucHVzaCgnICAgICAgPHRhYmxlOnRhYmxlIHRhYmxlOm5hbWU9IicrRnIoU2UuU2hlZXROYW1lc1tIZV0pKyciIHRhYmxl''@;'; put 'put ''OnN0eWxlLW5hbWU9InRhMSI+XG4nKTt2YXIgR2U9MCxudD0wLGR0PVdzKHZlWyIhcmVmIl18fCJBMSIpLEN0PXZlWyIhbWVyZ2VzIl18fFtdLGN0PTAsYnQ9QXJyYXkuaXNBcnJheSh2ZSk7aWYodmVbIiFjb2xzIl0pZm9yKG50PTA7bnQ8PWR0LmUuYzsrK250KVZlLnB1c2goIiAgICAgICAg''@;'; put 'put ''PHRhYmxlOnRhYmxlLWNvbHVtbiIrKHZlWyIhY29scyJdW250XT8nIHRhYmxlOnN0eWxlLW5hbWU9ImNvJyt2ZVsiIWNvbHMiXVtudF0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLWNvbHVtbj5cbiIpO3ZhciBFdD12ZVsiIXJvd3MiXXx8W107Zm9yKEdlPTA7R2U8ZHQucy5yOysrR2Up''@;'; put 'put ''VmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93IisoRXRbR2VdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK0V0W0dlXS5vZHMrJyInOiIiKSsiPjwvdGFibGU6dGFibGUtcm93PlxuIik7Zm9yKDtHZTw9ZHQuZS5yOysrR2Upe2ZvcihWZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJs''@;'; put 'put ''ZS1yb3ciKyhFdFtHZV0/JyB0YWJsZTpzdHlsZS1uYW1lPSJybycrRXRbR2VdLm9kcysnIic6IiIpKyI+XG4iKSxudD0wO250PGR0LnMuYzsrK250KVZlLnB1c2goTCk7Zm9yKDtudDw9ZHQuZS5jOysrbnQpe3ZhciBUdD0hMSxadD17fSxwbj0iIjtmb3IoY3Q9MDtjdCE9Q3QubGVuZ3RoOysr''@;'; put 'put ''Y3QpaWYoIShDdFtjdF0ucy5jPm50fHxDdFtjdF0ucy5yPkdlfHxDdFtjdF0uZS5jPG50fHxDdFtjdF0uZS5yPEdlKSl7KEN0W2N0XS5zLmMhPW50fHxDdFtjdF0ucy5yIT1HZSkmJihUdD0hMCksWnRbInRhYmxlOm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXT1DdFtjdF0uZS5jLUN0W2N0XS5z''@;'; put 'put ''LmMrMSxadFsidGFibGU6bnVtYmVyLXJvd3Mtc3Bhbm5lZCJdPUN0W2N0XS5lLnItQ3RbY3RdLnMucisxO2JyZWFrfWlmKFR0KVZlLnB1c2goIiAgICAgICAgICA8dGFibGU6Y292ZXJlZC10YWJsZS1jZWxsLz5cbiIpO2Vsc2V7dmFyIEtuPWRpKHtyOkdlLGM6bnR9KSx1bj1idD8odmVbR2Vd''@;'; put 'put ''fHxbXSlbbnRdOnZlW0tuXTtpZih1biYmdW4uZiYmKFp0WyJ0YWJsZTpmb3JtdWxhIl09RnIobFModW4uZikpLHVuLkYmJnVuLkYuc2xpY2UoMCxLbi5sZW5ndGgpPT1Lbikpe3ZhciBxbj1Xcyh1bi5GKTtadFsidGFibGU6bnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXT1xbi5lLmMt''@;'; put 'put ''cW4ucy5jKzEsWnRbInRhYmxlOm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl09cW4uZS5yLXFuLnMucisxfWlmKHVuKXtzd2l0Y2godW4udCl7Y2FzZSJiIjpwbj11bi52PyJUUlVFIjoiRkFMU0UiLFp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJib29sZWFuIixadFsib2ZmaWNlOmJvb2xl''@;'; put 'put ''YW4tdmFsdWUiXT11bi52PyJ0cnVlIjoiZmFsc2UiO2JyZWFrO2Nhc2UibiI6cG49dW4ud3x8U3RyaW5nKHVuLnZ8fDApLFp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJmbG9hdCIsWnRbIm9mZmljZTp2YWx1ZSJdPXVuLnZ8fDA7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6cG49dW4udixadFsi''@;'; put 'put ''b2ZmaWNlOnZhbHVlLXR5cGUiXT0ic3RyaW5nIjticmVhaztjYXNlImQiOnBuPXVuLnd8fEh0KHVuLnYpLnRvSVNPU3RyaW5nKCksWnRbIm9mZmljZTp2YWx1ZS10eXBlIl09ImRhdGUiLFp0WyJvZmZpY2U6ZGF0ZS12YWx1ZSJdPUh0KHVuLnYpLnRvSVNPU3RyaW5nKCksWnRbInRhYmxlOnN0''@;'; put 'put ''eWxlLW5hbWUiXT0iY2UxIjticmVhaztkZWZhdWx0OlZlLnB1c2goTCk7Y29udGludWV9bnVsbCE9dW4ub2RzJiYhWnRbInRhYmxlOnN0eWxlLW5hbWUiXSYmKFp0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlIit1bi5vZHMpO3ZhciB6bj0hdW4uUnx8dW4ubCYmdW4ubC5UYXJnZXQ/eShwbik6''@;'; put 'put ''UCh1bi5SKTtpZih1bi5sJiZ1bi5sLlRhcmdldCl7dmFyIEFuPXVuLmwuVGFyZ2V0OyIjIiE9KEFuPSIjIj09QW4uY2hhckF0KDApPyIjIitjUyhBbi5zbGljZSgxKSk6QW4pLmNoYXJBdCgwKSYmIUFuLm1hdGNoKC9eXHcrOi8pJiYoQW49Ii4uLyIrQW4pLHpuPVNyKCJ0ZXh0OmEiLHpuLHsi''@;'; put 'put ''eGxpbms6aHJlZiI6QW4ucmVwbGFjZSgvJi9nLCImYW1wOyIpfSl9VmUucHVzaCgiICAgICAgICAgICIrU3IoInRhYmxlOnRhYmxlLWNlbGwiLFNyKCJ0ZXh0OnAiLHpuLHt9KSxadCkrIlxuIil9ZWxzZSBWZS5wdXNoKEwpfX1WZS5wdXNoKCIgICAgICAgIDwvdGFibGU6dGFibGUtcm93Plxu''@;'; put 'put ''Iil9cmV0dXJuIFZlLnB1c2goIiAgICAgIDwvdGFibGU6dGFibGU+XG4iKSxWZS5qb2luKCIiKX0scGU9e2NlbnRlcjoiY2VudGVyIixsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9O3JldHVybiBmdW5jdGlvbihTZSxIZSl7dmFyIFZlPVtCbl0sR2U9UGEoeyJ4bWxuczpvZmZpY2UiOiJ1cm46''@;'; put 'put ''b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiLCJ4bWxuczp0YWJsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGFibGU6MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0''@;'; put 'put ''eWxlOjEuMCIsInhtbG5zOnRleHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wIiwieG1sbnM6ZHJhdyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0''@;'; put 'put ''YzpvcGVuZG9jdW1lbnQ6eG1sbnM6eHNsLWZvLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieG1sbnM6ZGMiOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm1ldGEiOiJ1cm46b2FzaXM6bmFtZXM6''@;'; put 'put ''dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6MS4wIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6cHJlc2VudGF0aW9uIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpwcmVz''@;'; put 'put ''ZW50YXRpb246MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxuczpjaGFydCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y2hhcnQ6MS4wIiwieG1sbnM6ZHIzZCI6InVy''@;'; put 'put ''bjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHIzZDoxLjAiLCJ4bWxuczptYXRoIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsInhtbG5zOmZvcm0iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmZvcm06MS4wIiwieG1sbnM6''@;'; put 'put ''c2NyaXB0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzY3JpcHQ6MS4wIiwieG1sbnM6b29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvb2ZmaWNlIiwieG1sbnM6b29vdyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L3dyaXRlciIsInhtbG5zOm9v''@;'; put 'put ''b2MiOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC9jYWxjIiwieG1sbnM6ZG9tIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwtZXZlbnRzIiwieG1sbnM6eGZvcm1zIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMi94Zm9ybXMiLCJ4bWxuczp4c2QiOiJodHRwOi8vd3d3LnczLm9yZy8y''@;'; put 'put ''MDAxL1hNTFNjaGVtYSIsInhtbG5zOnhzaSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiwieG1sbnM6c2hlZXQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnNoMzN0anM6MS4wIiwieG1sbnM6cnB0IjoiaHR0cDovL29wZW5vZmZpY2Uub3Jn''@;'; put 'put ''LzIwMDUvcmVwb3J0IiwieG1sbnM6b2YiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMiIsInhtbG5zOnhodG1sIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsInhtbG5zOmdyZGRsIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMy9nL2RhdGEtdmll''@;'; put 'put ''dyMiLCJ4bWxuczp0YWJsZW9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA5L3RhYmxlIiwieG1sbnM6ZHJhd29vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDEwL2RyYXciLCJ4bWxuczpjYWxjZXh0IjoidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVu''@;'; put 'put ''dGFsOmNhbGM6eG1sbnM6Y2FsY2V4dDoxLjAiLCJ4bWxuczpsb2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpvZmZpY2U6eG1sbnM6bG9leHQ6MS4wIiwieG1sbnM6ZmllbGQiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmltZW50YWw6b29v''@;'; put 'put ''LW1zLWludGVyb3A6eG1sbnM6ZmllbGQ6MS4wIiwieG1sbnM6Zm9ybXgiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmltZW50YWw6b294bWwtb2RmLWludGVyb3A6eG1sbnM6Zm9ybToxLjAiLCJ4bWxuczpjc3MzdCI6Imh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdGV4dC8iLCJvZmZp''@;'; put 'put ''Y2U6dmVyc2lvbiI6IjEuMiJ9KSxudD1QYSh7InhtbG5zOmNvbmZpZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y29uZmlnOjEuMCIsIm9mZmljZTptaW1ldHlwZSI6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQifSk7ImZv''@;'; put 'put ''ZHMiPT1IZS5ib29rVHlwZT8oVmUucHVzaCgiPG9mZmljZTpkb2N1bWVudCIrR2UrbnQrIj5cbiIpLFZlLnB1c2goUzQoKS5yZXBsYWNlKC9vZmZpY2U6ZG9jdW1lbnQtbWV0YS9nLCJvZmZpY2U6bWV0YSIpKSk6VmUucHVzaCgiPG9mZmljZTpkb2N1bWVudC1jb250ZW50IitHZSsiPlxuIiks''@;'; put 'put ''ZnVuY3Rpb24odmUsU2Upe3ZhciBIZT1bXSxWZT17fTtIZS5wdXNoKCIgPG9mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIiksSGUucHVzaCgnICA8bnVtYmVyOmRhdGUtc3R5bGUgc3R5bGU6bmFtZT0iTjM3IiBudW1iZXI6YXV0b21hdGljLW9yZGVyPSJ0cnVlIj5cbicpLEhlLnB1c2goJyAg''@;'; put 'put ''IDxudW1iZXI6bW9udGggbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxIZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxIZS5wdXNoKCcgICA8bnVtYmVyOmRheSBudW1iZXI6c3R5bGU9ImxvbmciLz5cbicpLEhlLnB1c2goIiAgIDxudW1iZXI6dGV4dD4vPC9u''@;'; put 'put ''dW1iZXI6dGV4dD5cbiIpLEhlLnB1c2goIiAgIDxudW1iZXI6eWVhci8+XG4iKSxIZS5wdXNoKCIgIDwvbnVtYmVyOmRhdGUtc3R5bGU+XG4iKTt2YXIgR2U9MDtTZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihjdCl7cmV0dXJuIFNlLlNoZWV0c1tjdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGN0''@;'; put 'put ''KXtpZihjdCYmY3RbIiFjb2xzIl0pZm9yKHZhciBidD0wO2J0PGN0WyIhY29scyJdLmxlbmd0aDsrK2J0KWlmKGN0WyIhY29scyJdW2J0XSl7dmFyIEZ0PWN0WyIhY29scyJdW2J0XTtpZihudWxsPT1GdC53aWR0aCYmbnVsbD09RnQud3B4JiZudWxsPT1GdC53Y2gpY29udGludWU7cHUoRnQp''@;'; put 'put ''LEZ0Lm9kcz1HZTt2YXIgRXQ9Y3RbIiFjb2xzIl1bYnRdLndweCsicHgiO0hlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNvJytHZSsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNvbHVtbiI+XG4nKSxIZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtY29sdW1uLXByb3BlcnRpZXMg''@;'; put 'put ''Zm86YnJlYWstYmVmb3JlPSJhdXRvIiBzdHlsZTpjb2x1bW4td2lkdGg9IicrRXQrJyIvPlxuJyksSGUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksKytHZX19KTt2YXIgbnQ9MDtTZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihjdCl7cmV0dXJuIFNlLlNoZWV0c1tjdF19KS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKGN0KXtpZihjdCYmY3RbIiFyb3dzIl0pZm9yKHZhciBidD0wO2J0PGN0WyIhcm93cyJdLmxlbmd0aDsrK2J0KWlmKGN0WyIhcm93cyJdW2J0XSl7Y3RbIiFyb3dzIl1bYnRdLm9kcz1udDt2YXIgRnQ9Y3RbIiFyb3dzIl1bYnRdLmhweCsicHgiO0hlLnB1c2goJyAgPHN0eWxl''@;'; put 'put ''OnN0eWxlIHN0eWxlOm5hbWU9InJvJytudCsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLXJvdyI+XG4nKSxIZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtcm93LXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJhdXRvIiBzdHlsZTpyb3ctaGVpZ2h0PSInK0Z0KyciLz5cbicpLEhlLnB1c2goIiAg''@;'; put 'put ''PC9zdHlsZTpzdHlsZT5cbiIpLCsrbnR9fSksSGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0idGExIiBzdHlsZTpmYW1pbHk9InRhYmxlIiBzdHlsZTptYXN0ZXItcGFnZS1uYW1lPSJtcDEiPlxuJyksSGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXByb3BlcnRpZXMgdGFibGU6''@;'; put 'put ''ZGlzcGxheT0idHJ1ZSIgc3R5bGU6d3JpdGluZy1tb2RlPSJsci10YiIvPlxuJyksSGUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksSGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0iY2UxIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNlbGwiIHN0eWxlOnBhcmVudC1zdHlsZS1u''@;'; put 'put ''YW1lPSJEZWZhdWx0IiBzdHlsZTpkYXRhLXN0eWxlLW5hbWU9Ik4zNyIvPlxuJyk7dmFyIGR0PTI7bnQ9MCxTZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihjdCl7cmV0dXJuIFNlLlNoZWV0c1tjdF19KS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtpZihjdClmb3IodmFyIGJ0PTAsRnQ9MCxFdD1X''@;'; put 'put ''cyhjdFsiIXJlZiJdKSxUdD1BcnJheS5pc0FycmF5KGN0KTtidDw9RXQuZS5yOysrYnQpZm9yKEZ0PTA7RnQ8PUV0LmUuYzsrK0Z0KXt2YXIgWnQ9ZGkoe3I6YnQsYzpGdH0pLHBuPVR0PyhjdFtidF18fFtdKVtGdF06Y3RbWnRdO2lmKHBuJiYocG4uc3x8cG4uUikpe3ZhciBLbj1bXTtwbi5z''@;'; put 'put ''JiZLbi5wdXNoKFtwbiwhMF0pLHBuLlImJnBuLlIuZm9yRWFjaChmdW5jdGlvbih1bil7dW4mJnVuLnMmJktuLnB1c2goW3VuLCExXSl9KSxLbi5mb3JFYWNoKGZ1bmN0aW9uKHVuKXt2YXIgcW49dW5bMF0sem49cW4ucyxBbj0iIixlcj17InN0eWxlOm5hbWUiOih1blsxXT8iY2UiOiJUIikr''@;'; put 'put ''ZHQsInN0eWxlOmZhbWlseSI6dW5bMV0/InRhYmxlLWNlbGwiOiJ0ZXh0In07dW5bMV0mJihlclsic3R5bGU6cGFyZW50LXN0eWxlLW5hbWUiXT0iRGVmYXVsdCIsZXJbInN0eWxlOmRhdGEtc3R5bGUtbmFtZSJdPSJOMCIpO3ZhciB0cj17fSxabj0hMSxOcj17fSxvaT0hMSxraT17fSxMaT0h''@;'; put 'put ''MTtpZih6bi5jb2xvciYmKE5yWyJmbzpjb2xvciJdPSIjIitPdSh6bi5jb2xvci5yZ2IpLG9pPSEwKSx6bi5zeiYmKE5yWyJmbzpmb250LXNpemUiXT16bi5zeisicHQiLG9pPSEwKSx6bi5ib2xkJiYoTnJbImZvOmZvbnQtd2VpZ2h0Il09ImJvbGQiLG9pPSEwKSx6bi5pdGFsaWMmJihOclsi''@;'; put 'put ''Zm86Zm9udC1zdHlsZSJdPSJpdGFsaWMiLG9pPSEwKSx6bi5uYW1lJiYoVmVbem4ubmFtZV18fChWZVt6bi5uYW1lXT16bi5uYW1lLm1hdGNoKC8gLyk/IiZhcG9zOyIrem4ubmFtZSsiJmFwb3M7Ijp6bi5uYW1lKSxOclsic3R5bGU6Zm9udC1uYW1lIl09em4ubmFtZSxvaT0hMCksem4uc3Ry''@;'; put 'put ''aWtlJiYoTnJbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXN0eWxlIl09InNvbGlkIixOclsic3R5bGU6dGV4dC1saW5lLXRocm91Z2gtdHlwZSJdPSJzaW5nbGUiLG9pPSEwKSx6bi51bmRlcmxpbmUmJihOclsic3R5bGU6dGV4dC11bmRlcmxpbmUtc3R5bGUiXT0ic29saWQiLE5yWyJzdHls''@;'; put 'put ''ZTp0ZXh0LXVuZGVybGluZS13aWR0aCJdPSJhdXRvIixOclsic3R5bGU6dGV4dC11bmRlcmxpbmUtY29sb3IiXT0iZm9udC1jb2xvciIsb2k9ITApLHVuWzFdKXtpZih6bi5hbGlnbm1lbnQpe3ZhciBRcj16bi5hbGlnbm1lbnQ7UXIud3JhcFRleHQmJih0clsiZm86d3JhcC1vcHRpb24iXT0i''@;'; put 'put ''d3JhcCIsWm49ITApLFFyLnZlcnRpY2FsJiYodHJbInN0eWxlOnZlcnRpY2FsLWFsaWduIl09ImNlbnRlciI9PVFyLnZlcnRpY2FsPyJtaWRkbGUiOlFyLnZlcnRpY2FsLFpuPSEwKSxwZVtRci5ob3Jpem9udGFsXSYmKGtpWyJmbzp0ZXh0LWFsaWduIl09cGVbUXIuaG9yaXpvbnRhbF0sTGk9''@;'; put 'put ''ITApfXpuLmZnQ29sb3ImJih0clsiZm86YmFja2dyb3VuZC1jb2xvciJdPSIjIitPdSh6bi5mZ0NvbG9yLnJnYiksWm49ITApfVpuJiYoQW4rPVNyKCJzdHlsZTp0YWJsZS1jZWxsLXByb3BlcnRpZXMiLG51bGwsdHIpKSxvaSYmKEFuKz1Tcigic3R5bGU6dGV4dC1wcm9wZXJ0aWVzIixudWxs''@;'; put 'put ''LE5yKSksTGkmJihBbis9U3IoInN0eWxlOnBhcmFncmFwaC1wcm9wZXJ0aWVzIixudWxsLGtpKSksSGUucHVzaCgiICAiK1NyKCJzdHlsZTpzdHlsZSIsQW4sZXIpKyJcbiIpLHFuLm9kcz1kdCwrK2R0fSl9fX0pLEhlLnB1c2goIiA8L29mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIik7dmFy''@;'; put 'put ''IEN0PSIgPG9mZmljZTpmb250LWZhY2UtZGVjbHM+XG4iK2x0KFZlKS5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybicgIDxzdHlsZTpmb250LWZhY2Ugc3R5bGU6bmFtZT0iJytjdCsnIiBzdmc6Zm9udC1mYW1pbHk9IicrVmVbY3RdKyciLz5cbid9KS5qb2luKCIiKSsiIDwvb2ZmaWNlOmZvbnQt''@;'; put 'put ''ZmFjZS1kZWNscz5cbiI7dmUucHVzaChDdCksdmUucHVzaChIZS5qb2luKCIiKSl9KFZlLFNlKSxWZS5wdXNoKCIgIDxvZmZpY2U6Ym9keT5cbiIpLFZlLnB1c2goIiAgICA8b2ZmaWNlOnNwcmVhZHNoZWV0PlxuIik7Zm9yKHZhciBkdD0wO2R0IT1TZS5TaGVldE5hbWVzLmxlbmd0aDsrK2R0''@;'; put 'put ''KVZlLnB1c2gocmUoU2UuU2hlZXRzW1NlLlNoZWV0TmFtZXNbZHRdXSxTZSxkdCkpO3JldHVybiBWZS5wdXNoKCIgICAgPC9vZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKSxWZS5wdXNoKCIgIDwvb2ZmaWNlOmJvZHk+XG4iKSxWZS5wdXNoKCJmb2RzIj09SGUuYm9va1R5cGU/Ijwvb2ZmaWNlOmRv''@;'; put 'put ''Y3VtZW50PiI6Ijwvb2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQ+IiksVmUuam9pbigiIil9fSgpO2Z1bmN0aW9uIF8wKHksUCl7aWYoImZvZHMiPT1QLmJvb2tUeXBlKXJldHVybiB2MCh5LFApO3ZhciBMPXluKCksUT0iIixyZT1bXSxwZT1bXTtyZXR1cm4gWXQoTCxRPSJtaW1ldHlwZSIsImFw''@;'; put 'put ''cGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiKSxZdChMLFE9ImNvbnRlbnQueG1sIix2MCh5LFApKSxyZS5wdXNoKFtRLCJ0ZXh0L3htbCJdKSxwZS5wdXNoKFtRLCJDb250ZW50RmlsZSJdKSxZdChMLFE9InN0eWxlcy54bWwiLEsxKHksUCkpLHJlLnB1c2go''@;'; put 'put ''W1EsInRleHQveG1sIl0pLHBlLnB1c2goW1EsIlN0eWxlc0ZpbGUiXSksWXQoTCxRPSJtZXRhLnhtbCIsQm4rUzQoKSkscmUucHVzaChbUSwidGV4dC94bWwiXSkscGUucHVzaChbUSwiTWV0YWRhdGFGaWxlIl0pLFl0KEwsUT0ibWFuaWZlc3QucmRmIixmdW5jdGlvbiBHaCh5KXt2YXIgUD1b''@;'; put 'put ''Qm5dO1AucHVzaCgnPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj5cbicpO2Zvcih2YXIgTD0wO0whPXkubGVuZ3RoOysrTClQLnB1c2goTDEoeVtMXVswXSx5W0xdWzFdKSksUC5wdXNoKFZvKCIiLHlbTF1bMF0pKTtyZXR1''@;'; put 'put ''cm4gUC5wdXNoKEwxKCIiLCJEb2N1bWVudCIsInBrZyIpKSxQLnB1c2goIjwvcmRmOlJERj4iKSxQLmpvaW4oIiIpfShwZSkpLHJlLnB1c2goW1EsImFwcGxpY2F0aW9uL3JkZit4bWwiXSksWXQoTCxRPSJNRVRBLUlORi9tYW5pZmVzdC54bWwiLGZ1bmN0aW9uIExkKHkpe3ZhciBQPVtCbl07''@;'; put 'put ''UC5wdXNoKCc8bWFuaWZlc3Q6bWFuaWZlc3QgeG1sbnM6bWFuaWZlc3Q9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWFuaWZlc3Q6MS4wIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiPlxuJyksUC5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1''@;'; put 'put ''bGwtcGF0aD0iLyIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIiBtYW5pZmVzdDptZWRpYS10eXBlPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0Ii8+XG4nKTtmb3IodmFyIEw9MDtMPHkubGVuZ3RoOysrTClQLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50''@;'; put 'put ''cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSInK3lbTF1bMF0rJyIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iJyt5W0xdWzFdKyciLz5cbicpO3JldHVybiBQLnB1c2goIjwvbWFuaWZlc3Q6bWFuaWZlc3Q+IiksUC5qb2luKCIiKX0ocmUpKSxMfWZ1bmN0aW9uIFgxKHkpe3JldHVybiBmdW5jdGlvbihM''@;'; put 'put ''LFEpe3ZhciByZT1mdW5jdGlvbiBUTSh5LFApe2lmKCFQKXJldHVybiAwO3ZhciBMPXkuU2hlZXROYW1lcy5pbmRleE9mKFApO2lmKC0xPT1MKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK1ApO3JldHVybiBMfShMLFEuc2hlZXQpO3JldHVybiB5LmZyb21fc2hlZXQoTC5T''@;'; put 'put ''aGVldHNbTC5TaGVldE5hbWVzW3JlXV0sUSxMKX19dmFyIGxSPVgxKEZ1KSxjUj1YMSh7ZnJvbV9zaGVldDpCbH0pLHVSPVgxKHR5cGVvZiB4OTwidSI/eDk6e30pLGRSPVgxKHR5cGVvZiBNMzwidSI/TTM6e30pLGFfPVgxKHR5cGVvZiBCMTwidSI/QjE6e30pLHk1PVgxKHR5cGVvZiBPbTwi''@;'; put 'put ''dSI/T206e30pLGhSPVgxKHtmcm9tX3NoZWV0OnhSfSksRE09WDEodHlwZW9mIEIyPCJ1Ij9CMjp7fSksZlI9WDEodHlwZW9mIE80PCJ1Ij9PNDp7fSksc2M9Rig3NzkwMyl8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvQnJvd3NlcmlmeTtpZighc2MpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJDYW5ub3QgZmluZCBjcnlwdG8gZXh0ZW5zaW9ucyEiKTt2YXIgbF89e1NIQTUxMjoic2hhNTEyIixTSEEyNTY6InNoYTI1NiIsU0hBMzg0OiJzaGEzODQiLFNIQTE6InNoYTEiLE1ENToibWQ1IixNRDQ6Im1kNCIsTUQyOiJtZDIifTtmdW5jdGlvbiBlbCh5LFApe3N3aXRjaChQPShQfHwi''@;'; put 'put ''IikucmVwbGFjZSgvLS9nLCIiKSl7Y2FzZSJTSEEtNTEyIjpjYXNlIlNIQTUxMiI6cmV0dXJuIG5ldyBzYy5jcmVhdGVIYXNoKCJzaGE1MTIiKS51cGRhdGUoeSkuZGlnZXN0KCk7Y2FzZSJTSEEtMSI6Y2FzZSJTSEExIjpyZXR1cm4gbmV3IHNjLmNyZWF0ZUhhc2goInNoYTEiKS51cGRhdGUo''@;'; put 'put ''eSkuZGlnZXN0KCk7Y2FzZSJNRDIiOnJldHVybiBuZXcgc2MuY3JlYXRlSGFzaCgibWQyIikudXBkYXRlKHkpLmRpZ2VzdCgpO2RlZmF1bHQ6aWYobF9bUF0pcmV0dXJuIG5ldyBzYy5jcmVhdGVIYXNoKGxfW1BdKS51cGRhdGUoeSkuZGlnZXN0KCk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBv''@;'; put 'put ''cnRlZCBoYXNoIGFsZ29yaXRobSAiK1ApfX1mdW5jdGlvbiBKMSh5LFAsTCl7aWYoInJjMiI9PUwpdGhyb3ciVW5zdXBwb3J0ZWQgUkMyIjt2YXIgUT1zYy5jcmVhdGVEZWNpcGhlcml2KEx8fCJhZXMtMjU2LWNiYyIseSxQKTtyZXR1cm4gUS5zZXRBdXRvUGFkZGluZyghMSksUX1mdW5jdGlv''@;'; put 'put ''biBSNih5KXtyZXR1cm5bKCIwMCIrKDI1NSZ5KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoeT4+PjgmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoeT4+PjE2JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKHk+Pj4yNCYyNTUpLnRvU3RyaW5n''@;'; put 'put ''KDE2KSkuc2xpY2UoLTIpXS5qb2luKCIiKX12YXIgTzY9ZnVuY3Rpb24oeSxQLEwpe2Zvcih2YXIgUT0ic3RyaW5nIj09dHlwZW9mIFA/QnVmZmVyLmZyb20oUCwiaGV4Iik6UCxyZT0ic3RyaW5nIj09dHlwZW9mIHk/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCx5KSk6''@;'; put 'put ''eSxwZT0ic3RyaW5nIj09dHlwZW9mIEw/QnVmZmVyLmZyb20oTCwiaGV4Iik6TCxfZT1lbChyZSwiTUQ1IiksdmU9QnVmZmVyLmNvbmNhdChbX2Uuc2xpY2UoMCw1KSxRXSksU2U9MDtTZTw0OysrU2UpdmU9QnVmZmVyLmNvbmNhdChbdmUsdmVdKTt2YXIgSGU9ZWwodmUsIk1ENSIpO3JldHVy''@;'; put 'put ''bihlbChCdWZmZXIuY29uY2F0KFtIZS5zbGljZSgwLDUpLHBlXSksIk1ENSIpLnRvU3RyaW5nKCJoZXgiKSsiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKS5zbGljZSgwLDMyKX0sbXI9ZnVuY3Rpb24oeSxQLEwpe3ZhciBRPSJzdHJpbmciPT10eXBlb2YgUD9CdWZmZXIuZnJv''@;'; put 'put ''bShQLCJoZXgiKTpQLHJlPSJzdHJpbmciPT10eXBlb2YgeT9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLHkpKTp5LHBlPSJzdHJpbmciPT10eXBlb2YgTD9CdWZmZXIuZnJvbShMLCJoZXgiKTpMLF9lPWVsKEJ1ZmZlci5jb25jYXQoW1EscmVdKSwiU0hBMSIpO3JldHVy''@;'; put 'put ''biBlbChCdWZmZXIuY29uY2F0KFtfZSxwZV0pLCJTSEExIil9LGIwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUCgpe31QLnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbihjdCl7dGhpcy5faT0wO3ZhciBidD10aGlzLl9idWlsZChjdCwiIik7cmV0dXJuIiI9PT1idD8iIjonPD94bWwgdmVyc2lvbj0i''@;'; put 'put ''MS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrYnR9LFAucHJvdG90eXBlLl9idWlsZD1mdW5jdGlvbihjdCxidCl7aWYodGhpcy5faSsrJTFlNj09MCYmKHRoaXMuX2M9YnRbMF0pLG51bGw9PWN0fHwib2JqZWN0IiE9dHlwZW9mIGN0JiYiZnVuY3Rpb24iIT10eXBl''@;'; put 'put ''b2YgY3QpbnVsbCE9Y3QmJihidCs9ZnVuY3Rpb24geShjdCxidCl7cmV0dXJuIG51bGw9PWN0fHwoY3Q9Y3QudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksYnQmJihjdD1jdC5yZXBsYWNlKC8iL2csIiZx''@;'; put 'put ''dW90OyIpKSksY3R9KGN0KSk7ZWxzZXtpZighY3QubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlhNTCBub2RlIGRvZXMgbm90IGhhdmUgbmFtZTogIitKU09OLnN0cmluZ2lmeShjdCkpO2J0Kz0iPCIrY3QubmFtZTt2YXIgRnQ9dGhpcztidCs9Y3QuYXR0cmlidXRlcyYmUGEoY3QuYXR0cmlidXRl''@;'; put 'put ''cyl8fCIiLEFycmF5LmlzQXJyYXkoY3QuY2hpbGRyZW4pJiYwIT1jdC5jaGlsZHJlbi5sZW5ndGg/KGJ0Kz0iPiIsY3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihFdCl7YnQ9RnQuX2J1aWxkKEV0LGJ0KX0pLGJ0Kz0iPC8iK2N0Lm5hbWUrIj4iKTpidCs9Ii8+In1yZXR1cm4gYnR9O3Zh''@;'; put 'put ''ciBMPUJ1ZmZlci5mcm9tKFs0LDAsNCwwLDY0LDAsMCwwXSkscGU9e2RhdGFJbnRlZ3JpdHk6e2htYWNLZXk6QnVmZmVyLmZyb20oWzk1LDE3OCwxNzMsMSwxMiwxODUsMjI1LDI0Nl0pLGhtYWNWYWx1ZTpCdWZmZXIuZnJvbShbMTYwLDEwMywxMjcsMiwxNzgsNDQsMTMyLDUxXSl9LGtleTpC''@;'; put 'put ''dWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKSx2ZXJpZmllckhhc2g6e2lucHV0OkJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pLHZhbHVlOkJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3OF0pfX07ZnVuY3Rp''@;'; put 'put ''b24gX2UoY3QsYnQsRnQsRXQsVHQsWnQpe3ZhciBwbj1idC50b0xvd2VyQ2FzZSgpKyItIis4KkV0Lmxlbmd0aDtpZigiQ2hhaW5pbmdNb2RlQ0JDIiE9PUZ0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaXBoZXIgY2hhaW5pbmc6ICIrRnQpO3ZhciBLbj1zY1tjdD8iY3JlYXRlQ2lwaGVy''@;'; put 'put ''aXYiOiJjcmVhdGVEZWNpcGhlcml2Il0ocG4rPSItY2JjIixFdCxUdCk7S24uc2V0QXV0b1BhZGRpbmcoITEpO3ZhciB1bj1Lbi51cGRhdGUoWnQpLHFuPVt1bl07dHJ5e3ZhciB6bj1Lbi5maW5hbCgpO3FuLnB1c2goem4pfWNhdGNoe31yZXR1cm4gQnVmZmVyLmNvbmNhdChxbil9ZnVuY3Rp''@;'; put 'put ''b24gdmUoY3Qpe2N0PWN0LnRvTG93ZXJDYXNlKCk7dmFyIGJ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2lmKHNjLmdldEhhc2hlcygpLmluZGV4T2YoY3QpPDApdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK2N0KTt2YXIgRXQ9c2MuY3JlYXRlSGFz''@;'; put 'put ''aChjdCk7cmV0dXJuIEV0LnVwZGF0ZShCdWZmZXIuY29uY2F0KGJ0KSksRXQuZGlnZXN0KCl9ZnVuY3Rpb24gU2UoY3QsYnQsRnQsRXQpeyJudW1iZXIiPT10eXBlb2YgRXQmJihFdD1IZShFdCkpO3ZhciBUdD12ZShjdCxidCxFdCk7aWYoVHQubGVuZ3RoPEZ0KXt2YXIgWnQ9QnVmZmVyLmFs''@;'; put 'put ''bG9jKEZ0LDU0KTtUdC5jb3B5KFp0KSxUdD1adH1lbHNlIFR0Lmxlbmd0aD5GdCYmKFR0PVR0LnNsaWNlKDAsRnQpKTtyZXR1cm4gVHR9ZnVuY3Rpb24gSGUoY3QsYnQpe3ZhciBGdD1CdWZmZXIuYWxsb2MoYnR8fDQpO3JldHVybiBGdC53cml0ZVVJbnQzMkxFKGN0LDApLEZ0fWZ1bmN0aW9u''@;'; put 'put ''IFZlKGN0LGJ0LEZ0LEV0LFR0LFp0KXtmb3IodmFyIEtuPXZlKGJ0LEZ0LEJ1ZmZlci5mcm9tKGN0LCJ1dGYxNmxlIikpLHVuPTA7dW48RXQ7dW4rKylLbj12ZShidCxIZSh1biksS24pO3ZhciB6bj1UdC84O2lmKChLbj12ZShidCxLbixadCkpLmxlbmd0aDx6bil7dmFyIEFuPUJ1ZmZlci5h''@;'; put 'put ''bGxvYyh6biw1NCk7S24uY29weShBbiksS249QW59ZWxzZSBLbi5sZW5ndGg+em4mJihLbj1Lbi5zbGljZSgwLHpuKSk7cmV0dXJuIEtufXJldHVybiBzYy5yYW5kb21CeXRlc3x8KHNjLnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKGN0KXtmb3IodmFyIGJ0PUJ1ZmZlci5hbGxvYyhjdCksRnQ9MDtG''@;'; put 'put ''dDxjdDsrK0Z0KWJ0W0Z0XT1NYXRoLmZsb29yKDI1NipNYXRoLnJhbmRvbSgpKTtyZXR1cm4gYnR9KSxmdW5jdGlvbiBDdChjdCxidCl7aWYoInN0cmluZyI9PXR5cGVvZiBjdClyZXR1cm4gQ3QoQnVmZmVyLmZyb20oY3QsImJpbmFyeSIpLGJ0KTt2YXIgRnQ9c2MucmFuZG9tQnl0ZXMoMzIp''@;'; put 'put ''LEV0PXtwYWNrYWdlOntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOnNjLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixrZXlCaXRzOjgqRnQubGVuZ3Ro''@;'; put 'put ''fSxrZXk6e2NpcGhlckFsZ29yaXRobToiQUVTIixjaXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6c2MucmFuZG9tQnl0ZXMoMTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LHNwaW5Db3VudDoxLGtleUJpdHM6MjU2fX0s''@;'; put 'put ''VHQ9ZnVuY3Rpb24gR2UoY3QsYnQsRnQsRXQsVHQsWnQscG4sS24pe2Zvcih2YXIgdW49W10scW49Y3Q/MDo4LHpuPTAsQW49MCxlcj0wO2VyPEtuLmxlbmd0aDspeyhlcj0oQW49ZXIpKzQwOTYpPktuLmxlbmd0aCYmKGVyPUtuLmxlbmd0aCk7dmFyIHRyPUtuLnNsaWNlKEFuK3FuLGVyK3Fu''@;'; put 'put ''KSxabj10ci5sZW5ndGglVHQ7Wm4mJih0cj1CdWZmZXIuY29uY2F0KFt0cixCdWZmZXIuYWxsb2MoVHQtWm4pXSkpO3ZhciBvaT1fZShjdCxidCxGdCxwbixTZShFdCxadCxUdCx6biksdHIpO3VuLnB1c2gob2kpLHpuKyt9dmFyIGtpPUJ1ZmZlci5jb25jYXQodW4pO2lmKGN0KWtpPUJ1ZmZl''@;'; put 'put ''ci5jb25jYXQoW0hlKEtuLmxlbmd0aCw4KSxraV0pO2Vsc2V7dmFyIExpPUtuLnJlYWRVSW50MzJMRSgwKTtraT1raS5zbGljZSgwLExpKX1yZXR1cm4ga2l9KCEwLEV0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLEV0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsRXQucGFja2FnZS5oYXNoQWxn''@;'; put 'put ''b3JpdGhtLEV0LnBhY2thZ2UuYmxvY2tTaXplLEV0LnBhY2thZ2Uuc2FsdFZhbHVlLEZ0LGN0KSxadD1zYy5yYW5kb21CeXRlcyg2NCkscG49U2UoRXQucGFja2FnZS5oYXNoQWxnb3JpdGhtLEV0LnBhY2thZ2Uuc2FsdFZhbHVlLEV0LnBhY2thZ2UuYmxvY2tTaXplLHBlLmRhdGFJbnRlZ3Jp''@;'; put 'put ''dHkuaG1hY0tleSksS249X2UoITAsRXQucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sRXQucGFja2FnZS5jaXBoZXJDaGFpbmluZyxGdCxwbixadCksdW49ZnVuY3Rpb24gbnQoY3QsYnQpe2N0PWN0LnRvTG93ZXJDYXNlKCk7dmFyIEZ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO2lmKHNj''@;'; put 'put ''LmdldEhhc2hlcygpLmluZGV4T2YoY3QpPDApdGhyb3cgbmV3IEVycm9yKCJITUFDIGFsZ29yaXRobSAnIitjdCsiJyBub3Qgc3VwcG9ydGVkISIpO3ZhciBUdD1zYy5jcmVhdGVIbWFjKGN0LGJ0KTtyZXR1cm4gVHQudXBkYXRlKEJ1ZmZlci5jb25jYXQoRnQpKSxUdC5kaWdlc3QoKX0oRXQu''@;'; put 'put ''cGFja2FnZS5oYXNoQWxnb3JpdGhtLFp0LFR0KSxxbj1TZShFdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sRXQucGFja2FnZS5zYWx0VmFsdWUsRXQucGFja2FnZS5ibG9ja1NpemUscGUuZGF0YUludGVncml0eS5obWFjVmFsdWUpLHpuPV9lKCEwLEV0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGht''@;'; put 'put ''LEV0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsRnQscW4sdW4pO0V0LmRhdGFJbnRlZ3JpdHk9e2VuY3J5cHRlZEhtYWNLZXk6S24sZW5jcnlwdGVkSG1hY1ZhbHVlOnpufTt2YXIgQW49VmUoYnQsRXQua2V5Lmhhc2hBbGdvcml0aG0sRXQua2V5LnNhbHRWYWx1ZSxFdC5rZXkuc3BpbkNvdW50''@;'; put 'put ''LEV0LmtleS5rZXlCaXRzLHBlLmtleSk7RXQua2V5LmVuY3J5cHRlZEtleVZhbHVlPV9lKCEwLEV0LmtleS5jaXBoZXJBbGdvcml0aG0sRXQua2V5LmNpcGhlckNoYWluaW5nLEFuLEV0LmtleS5zYWx0VmFsdWUsRnQpO3ZhciBlcj1zYy5yYW5kb21CeXRlcygxNiksdHI9VmUoYnQsRXQua2V5''@;'; put 'put ''Lmhhc2hBbGdvcml0aG0sRXQua2V5LnNhbHRWYWx1ZSxFdC5rZXkuc3BpbkNvdW50LEV0LmtleS5rZXlCaXRzLHBlLnZlcmlmaWVySGFzaC5pbnB1dCk7RXQua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0PV9lKCEwLEV0LmtleS5jaXBoZXJBbGdvcml0aG0sRXQua2V5LmNpcGhlckNo''@;'; put 'put ''YWluaW5nLHRyLEV0LmtleS5zYWx0VmFsdWUsZXIpO3ZhciBabj12ZShFdC5rZXkuaGFzaEFsZ29yaXRobSxlciksTnI9VmUoYnQsRXQua2V5Lmhhc2hBbGdvcml0aG0sRXQua2V5LnNhbHRWYWx1ZSxFdC5rZXkuc3BpbkNvdW50LEV0LmtleS5rZXlCaXRzLHBlLnZlcmlmaWVySGFzaC52YWx1''@;'; put 'put ''ZSk7RXQua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlPV9lKCEwLEV0LmtleS5jaXBoZXJBbGdvcml0aG0sRXQua2V5LmNpcGhlckNoYWluaW5nLE5yLEV0LmtleS5zYWx0VmFsdWUsWm4pO3ZhciBvaT1mdW5jdGlvbiBkdChjdCl7dmFyIGJ0PXtuYW1lOiJlbmNyeXB0aW9uIixhdHRy''@;'; put 'put ''aWJ1dGVzOnt4bWxuczoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9lbmNyeXB0aW9uIiwieG1sbnM6cCI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiwieG1sbnM6YyI6Imh0dHA6Ly9zY2hl''@;'; put 'put ''bWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL2NlcnRpZmljYXRlIn0sY2hpbGRyZW46W3tuYW1lOiJrZXlEYXRhIixhdHRyaWJ1dGVzOntzYWx0U2l6ZTpjdC5wYWNrYWdlLnNhbHRWYWx1ZS5sZW5ndGgsYmxvY2tTaXplOmN0LnBhY2thZ2UuYmxvY2tTaXplLGtl''@;'; put 'put ''eUJpdHM6Y3QucGFja2FnZS5rZXlCaXRzLGhhc2hTaXplOmN0LnBhY2thZ2UuaGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOmN0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmN0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTpjdC5wYWNrYWdlLmhh''@;'; put 'put ''c2hBbGdvcml0aG0sc2FsdFZhbHVlOmN0LnBhY2thZ2Uuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJkYXRhSW50ZWdyaXR5IixhdHRyaWJ1dGVzOntlbmNyeXB0ZWRIbWFjS2V5OmN0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY0tleS50b1N0cmluZygiYmFzZTY0''@;'; put 'put ''IiksZW5jcnlwdGVkSG1hY1ZhbHVlOmN0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY1ZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJrZXlFbmNyeXB0b3JzIixjaGlsZHJlbjpbe25hbWU6ImtleUVuY3J5cHRvciIsYXR0cmlidXRlczp7dXJpOiJodHRwOi8vc2NoZW1hcy5t''@;'; put 'put ''aWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCJ9LGNoaWxkcmVuOlt7bmFtZToicDplbmNyeXB0ZWRLZXkiLGF0dHJpYnV0ZXM6e3NwaW5Db3VudDpjdC5rZXkuc3BpbkNvdW50LHNhbHRTaXplOmN0LmtleS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTpj''@;'; put 'put ''dC5rZXkuYmxvY2tTaXplLGtleUJpdHM6Y3Qua2V5LmtleUJpdHMsaGFzaFNpemU6Y3Qua2V5Lmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTpjdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmN0LmtleS5jaXBoZXJDaGFpbmluZyxoYXNoQWxnb3JpdGhtOmN0LmtleS5oYXNo''@;'; put 'put ''QWxnb3JpdGhtLHNhbHRWYWx1ZTpjdC5rZXkuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dDpjdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlOmN0''@;'; put 'put ''LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkS2V5VmFsdWU6Y3Qua2V5LmVuY3J5cHRlZEtleVZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19XX1dfV19LEV0PShuZXcgUCkuYnVpbGQoYnQpO3JldHVybiBCdWZmZXIuY29uY2F0KFtM''@;'; put 'put ''LEJ1ZmZlci5mcm9tKEV0LCJ1dGY4IildKX0oRXQpLGtpPUJlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gQmUudXRpbHMuY2ZiX2FkZChraSwiRW5jcnlwdGlvbkluZm8iLG9pKSxCZS51dGlscy5jZmJfYWRkKGtpLCJFbmNyeXB0ZWRQYWNrYWdlIixUdCksa2l9fSgpO2Z1bmN0aW9uIHc1KHkp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbihMKXtmb3IodmFyIFE9MDtRIT15Lmxlbmd0aDsrK1Epe3ZhciByZT15W1FdO3ZvaWQgMD09PUxbcmVbMF1dJiYoTFtyZVswXV09cmVbMV0pLCJuIj09PXJlWzJdJiYoTFtyZVswXV09TnVtYmVyKExbcmVbMF1dKSl9fX12YXIgUDY9ZnVuY3Rpb24oeSl7dzUoW1si''@;'; put 'put ''Y2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIsITBdLFsiY2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxUZXh0IiwhMF0sWyJjZWxsRGF0ZXMiLCExXSxbInNoZWV0U3R1YnMiLCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9va0RlcHMiLCExXSxbImJvb2tTaGVldHMi''@;'; put 'put ''LCExXSxbImJvb2tQcm9wcyIsITFdLFsiYm9va0ZpbGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsiV1RGIiwhMV1dKSh5KSx5LmJvb2tJbWFnZXMmJih5LmNlbGxTdHlsZXM9ITApfSxkXz13NShbWyJjZWxsRGF0ZXMiLCExXSxbImJvb2tTU1QiLCExXSxbImJvb2tU''@;'; put 'put ''eXBlIiwieGxzeCJdLFsiY29tcHJlc3Npb24iLCExXSxbIldURiIsITFdXSk7ZnVuY3Rpb24gTE0oeSl7cmV0dXJuIEhpLldTLmluZGV4T2YoeSk+LTE/InNoZWV0IjpIaS5DUyYmeT09SGkuQ1M/ImNoYXJ0IjpIaS5EUyYmeT09SGkuRFM/ImRpYWxvZyI6SGkuTVMmJnk9PUhpLk1TPyJtYWNy''@;'; put 'put ''byI6eSYmeS5sZW5ndGg/eToic2hlZXQifXZhciBGNj1bXTtmdW5jdGlvbiBnUih5LFAsTCxRLHJlLHBlLF9lLHZlLFNlLEhlLFZlLEdlKXt0cnl7cGVbUV09RG8oSnQoeSxMLCEwKSxQKTt2YXIgZHQsbnQ9SXQoeSxQKTtzd2l0Y2godmUpe2Nhc2Uic2hlZXQiOmR0PWZ1bmN0aW9uIE5MKHks''@;'; put 'put ''UCxMLFEscmUscGUsX2UsdmUpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIENMKHksUCxMLFEscmUscGUsX2Upe2lmKCF5KXJldHVybiB5O3ZhciB2ZT1QfHx7fTtRfHwoUT17IiFpZCI6e319KSxudWxsIT10ZSYmbnVsbD09dmUuZGVuc2UmJih2ZS5kZW5zZT10ZSk7dmFy''@;'; put 'put ''IEhlLEN0LGN0LGJ0LEZ0LEV0LFR0LFp0LHBuLEtuLFNlPXZlLmRlbnNlP1tdOnt9LFZlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LEdlPVtdLG50PSExLGR0PSExLHVuPVtdO3ZlLmJpZmY9MTIsdmVbIiFyb3ciXT0wO3ZhciBxbj0wLHpuPSExLEFuPVtdLGVyPXt9LHRyPXZlLnN1''@;'; put 'put ''cGJvb2tzfHxyZS5zdXBib29rc3x8W1tdXTtpZih0ci5zaGFyZWRmPWVyLHRyLmFycmF5Zj1Bbix0ci5TaGVldE5hbWVzPXJlLlNoZWV0TmFtZXN8fHJlLlNoZWV0cy5tYXAoZnVuY3Rpb24oUXIpe3JldHVybiBRci5uYW1lfSksIXZlLnN1cGJvb2tzJiYodmUuc3VwYm9va3M9dHIscmUuTmFt''@;'; put 'put ''ZXMpKWZvcih2YXIgWm49MDtabjxyZS5OYW1lcy5sZW5ndGg7Kytabil0clswXVtabisxXT1yZS5OYW1lc1tabl07dmFyIE5yPVtdLG9pPVtdLGtpPSExO2lmKG1mWzE2XT17bjoiQnJ0U2hvcnRSZWFsIixmOkJTfSxIbyh5LGZ1bmN0aW9uKHVyLFRuLHZyKXtpZighZHQpc3dpdGNoKHZyKXtj''@;'; put 'put ''YXNlIDE0ODpIZT11cjticmVhaztjYXNlIDA6Q3Q9dXIsdmUuc2hlZXRSb3dzJiZ2ZS5zaGVldFJvd3M8PUN0LnImJihkdD0hMCkscG49SHMoRnQ9Q3QuciksdmVbIiFyb3ciXT1DdC5yLCh1ci5oaWRkZW58fHVyLmhwdHx8bnVsbCE9dXIubGV2ZWwpJiYodXIuaHB0JiYodXIuaHB4PVUxKHVy''@;'; put 'put ''LmhwdCkpLG9pW3VyLnJdPXVyKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpzd2l0Y2goY3Q9e3Q6dXJbMl19''@;'; put 'put ''LHVyWzJdKXtjYXNlIm4iOmN0LnY9dXJbMV07YnJlYWs7Y2FzZSJzIjpjdC52PShadD1mNlt1clsxXV0pLnQsdmUuY2VsbFN0eWxlcyYmKGN0LlI9ZnVuY3Rpb24gdUQoeSxQKXtpZih5LlIpcmV0dXJuIHkuUjtpZihQJiZQLkZvbnRzJiYoMSE9eS5yLmxlbmd0aHx8MCE9eS5yWzBdLmljaCkp''@;'; put 'put ''e3kuUj1bXTt2YXIgTD0wLFE9eS5yW0xdLHJlPXkucltMKzFdO2ZvcihRLmljaD4wJiZ5LlIucHVzaCh7dDoicyIsdjp5LnQuc2xpY2UoMCxRLmljaCl9KTtMPHkuci5sZW5ndGgtMTsrK0wpeS5SLnB1c2goe3Q6InMiLHY6eS50LnNsaWNlKChRPXkucltMXSkuaWNoLChyZT15LnJbTCsxXSku''@;'; put 'put ''aWNoKSxzOlAuRm9udHNbUS5pZm50XX0pO3JldHVybiB5LlIucHVzaCh7dDoicyIsdjp5LnQuc2xpY2UoKHJlfHxRKS5pY2gpLHM6UC5Gb250c1socmV8fFEpLmlmbnRdfSkseS5SfX0oWnQsX2UpKTticmVhaztjYXNlImIiOmN0LnY9ISF1clsxXTticmVhaztjYXNlImUiOmN0LnY9dXJbMV0s''@;'; put 'put ''ITEhPT12ZS5jZWxsVGV4dCYmKGN0Lnc9UW9bY3Qudl0pO2JyZWFrO2Nhc2Uic3RyIjpjdC50PSJzIixjdC52PXVyWzFdfWlmKChidD1fZS5DZWxsWGZbdXJbMF0uaVN0eWxlUmVmXSkmJnA2KGN0LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQsdmUsMCxfZSks''@;'; put 'put ''dmUuY2VsbFN0eWxlcyYmY3QucyYmYnQuYWxpZ25tZW50JiYoY3Qucy5hbGlnbm1lbnQ9b24oYnQuYWxpZ25tZW50KSksRXQ9LTE9PXVyWzBdLmM/RXQrMTp1clswXS5jLHZlLmRlbnNlPyhTZVtGdF18fChTZVtGdF09W10pLFNlW0Z0XVtFdF09Y3QpOlNlW05zKEV0KStwbl09Y3QsdmUuY2Vs''@;'; put 'put ''bEZvcm11bGEpe2Zvcih6bj0hMSxxbj0wO3FuPEFuLmxlbmd0aDsrK3FuKXt2YXIgcnI9QW5bcW5dO0N0LnI+PXJyWzBdLnMuciYmQ3Qucjw9cnJbMF0uZS5yJiZFdD49cnJbMF0ucy5jJiZFdDw9cnJbMF0uZS5jJiYoY3QuRj1PbyhyclswXSksem49ITApfSF6biYmdXIubGVuZ3RoPjMmJihj''@;'; put 'put ''dC5mPXVyWzNdKX1pZihWZS5zLnI+Q3QuciYmKFZlLnMucj1DdC5yKSxWZS5zLmM+RXQmJihWZS5zLmM9RXQpLFZlLmUucjxDdC5yJiYoVmUuZS5yPUN0LnIpLFZlLmUuYzxFdCYmKFZlLmUuYz1FdCksdmUuY2VsbERhdGVzJiZidCYmIm4iPT1jdC50JiZ3LmlzX2RhdGUody5fdGFibGVbYnQu''@;'; put 'put ''bnVtRm10SWRdKSl7dmFyIFNuPXcucGFyc2VfZGF0ZV9jb2RlKGN0LnYpO1NuJiYoY3QudD0iZCIsY3Qudj1uZXcgRGF0ZShTbi55LFNuLm0tMSxTbi5kLFNuLkgsU24uTSxTbi5TLFNuLnUpKX1icmVhaztjYXNlIDE6Y2FzZSAxMjppZighdmUuc2hlZXRTdHVic3x8bnQpYnJlYWs7Y3Q9e3Q6''@;'; put 'put ''InoiLHY6dm9pZCAwfSxFdD0tMT09dXJbMF0uYz9FdCsxOnVyWzBdLmMsKGJ0PV9lLkNlbGxYZlt1clswXS5pU3R5bGVSZWZdKSYmcDYoY3QsYnQubnVtRm10SWQsYnQuZmlsbElkLGJ0LmZvbnRJZCxidC5ib3JkZXJJZCx2ZSwwLF9lKSx2ZS5jZWxsU3R5bGVzJiZjdC5zJiZidC5hbGlnbm1l''@;'; put 'put ''bnQmJihjdC5zLmFsaWdubWVudD1vbihidC5hbGlnbm1lbnQpKSx2ZS5kZW5zZT8oU2VbRnRdfHwoU2VbRnRdPVtdKSxTZVtGdF1bRXRdPWN0KTpTZVtOcyhFdCkrcG5dPWN0LFZlLnMucj5DdC5yJiYoVmUucy5yPUN0LnIpLFZlLnMuYz5FdCYmKFZlLnMuYz1FdCksVmUuZS5yPEN0LnImJihW''@;'; put 'put ''ZS5lLnI9Q3QuciksVmUuZS5jPEV0JiYoVmUuZS5jPUV0KTticmVhaztjYXNlIDE3Njp1bi5wdXNoKHVyKTticmVhaztjYXNlIDQ5NDp2YXIgcHI9UVsiIWlkIl1bdXIucmVsSWRdO2Zvcihwcj8odXIuVGFyZ2V0PXByLlRhcmdldCx1ci5sb2MmJih1ci5UYXJnZXQrPSIjIit1ci5sb2MpLHVy''@;'; put 'put ''LlJlbD1wcik6IiI9PXVyLnJlbElkJiYodXIuVGFyZ2V0PSIjIit1ci5sb2MpLEZ0PXVyLnJmeC5zLnI7RnQ8PXVyLnJmeC5lLnI7KytGdClmb3IoRXQ9dXIucmZ4LnMuYztFdDw9dXIucmZ4LmUuYzsrK0V0KXZlLmRlbnNlPyhTZVtGdF18fChTZVtGdF09W10pLFNlW0Z0XVtFdF18fChTZVtG''@;'; put 'put ''dF1bRXRdPXt0OiJ6Iix2OnZvaWQgMH0pLFNlW0Z0XVtFdF0ubD11cik6KFR0PWRpKHtjOkV0LHI6RnR9KSxTZVtUdF18fChTZVtUdF09e3Q6InoiLHY6dm9pZCAwfSksU2VbVHRdLmw9dXIpO2JyZWFrO2Nhc2UgNDI2OmlmKCF2ZS5jZWxsRm9ybXVsYSlicmVhaztBbi5wdXNoKHVyKSwoS249''@;'; put 'put ''dmUuZGVuc2U/U2VbRnRdW0V0XTpTZVtOcyhFdCkrcG5dKS5mPXhsKHVyWzFdLFZlLHtyOkN0LnIsYzpFdH0sdHIsdmUpLEtuLkY9T28odXJbMF0pO2JyZWFrO2Nhc2UgNDI3OmlmKCF2ZS5jZWxsRm9ybXVsYSlicmVhaztlcltkaSh1clswXS5zKV09dXJbMV0sKEtuPXZlLmRlbnNlP1NlW0Z0''@;'; put 'put ''XVtFdF06U2VbTnMoRXQpK3BuXSkuZj14bCh1clsxXSxWZSx7cjpDdC5yLGM6RXR9LHRyLHZlKTticmVhaztjYXNlIDYwOmlmKCF2ZS5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7dXIuZT49dXIuczspTnJbdXIuZS0tXT17d2lkdGg6dXIudy8yNTYsaGlkZGVuOiEhKDEmdXIuZmxhZ3MpLGxldmVs''@;'; put 'put ''OnVyLmxldmVsfSxraXx8KGtpPSEwKSxwdShOclt1ci5lKzFdKTticmVhaztjYXNlIDE2MTpTZVsiIWF1dG9maWx0ZXIiXT17cmVmOk9vKHVyKX07YnJlYWs7Y2FzZSA0NzY6U2VbIiFtYXJnaW5zIl09dXI7YnJlYWs7Y2FzZSAxNDc6cmUuU2hlZXRzW0xdfHwocmUuU2hlZXRzW0xdPXt9KSx1''@;'; put 'put ''ci5uYW1lJiYocmUuU2hlZXRzW0xdLkNvZGVOYW1lPXVyLm5hbWUpLCh1ci5hYm92ZXx8dXIubGVmdCkmJihTZVsiIW91dGxpbmUiXT17YWJvdmU6dXIuYWJvdmUsbGVmdDp1ci5sZWZ0fSk7YnJlYWs7Y2FzZSAxMzc6cmUuVmlld3N8fChyZS5WaWV3cz1be31dKSxyZS5WaWV3c1swXXx8KHJl''@;'; put 'put ''LlZpZXdzWzBdPXt9KSx1ci5SVEwmJihyZS5WaWV3c1swXS5SVEw9ITApLHVyLmdyaWR8fChyZS5WaWV3c1swXS5ncmlkPSExLFNlWyIhZ3JpZGxpbmVzIl09ITEpO2JyZWFrO2Nhc2UgNDg1OlNlWyIhc2hlZXRGb3JtYXQiXT11cjticmVhaztjYXNlIDY0OmNhc2UgMTA1MzohZnVuY3Rpb24g''@;'; put 'put ''eUwoeSxQLEwsUSl7aWYoUCl7dmFyIHJlPXtyZWY6UC5zcXJmeCx0OlAudH07UC5vcCYmKHJlLm9wPVAub3ApO3ZhciBwZT0iIixfZT0iIix2ZT1QLnNxcmZ4PyJzdHJpbmciPT10eXBlb2YgUC5zcXJmeD9PaShQLnNxcmZ4LnNwbGl0KCIsIilbMF0pOlAuc3FyZng6bnVsbDtpZihQLmYxJiYo''@;'; put 'put ''cGU9eGwoUC5mMSx2ZSxudWxsLEwsUSwhMCkpLFAuZjImJihfZT14bChQLmYyLHZlLG51bGwsTCxRLCEwKSksUC5vcCYmWyJJTiIsIk9UIl0uaW5kZXhPZihQLm9wKT49LTEpcmUubWluPXBlLHJlLm1heD1fZTtlbHNlIGlmKFAub3ApcmUudj1wZTtlbHNlIHRyeXtzd2l0Y2goUC50KXtjYXNl''@;'; put 'put ''Ikxpc3QiOmlmKCJQdGdTdHIiPT09UC5mMVswXVswXVswXSYmMT09UC5mMVswXS5sZW5ndGgpe3JlLmw9UC5mMVswXVswXVsxXS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjpyZS5mPXBlfX1jYXRjaHt9eVsiIXZhbGlkYXRpb25zIl18fCh5WyIhdmFsaWRhdGlvbnMiXT1bXSkseVsi''@;'; put 'put ''IXZhbGlkYXRpb25zIl0ucHVzaChyZSl9fShTZSx1cix0cix2ZSk7YnJlYWs7Y2FzZSAxNTE6U2VbIiFmcmVlemUiXT11clswXTticmVhaztjYXNlIDE1MjpTZVsiIXNlbCJdPXVyO2JyZWFrO2Nhc2UgMTc1OmNhc2UgNjQ0OmNhc2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpj''@;'; put 'put ''YXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDQ5OmNhc2UgNTg5OmNhc2UgNjA3OmNhc2UgNTY0OmNhc2UgMTA1NTpjYXNlIDE2ODpjYXNlIDE3NDpjYXNlIDExODA6Y2FzZSA0OTk6Y2FzZSA1MDc6Y2FzZSA1NTA6Y2FzZSAxNzE6Y2FzZSAxNjc6''@;'; put 'put ''Y2FzZSAxMTc3OmNhc2UgMTY5OmNhc2UgMTE4MTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDY2MTpjYXNlIDYzOTpjYXNlIDQ3ODpjYXNlIDUzNzpjYXNlIDQ3NzpjYXNlIDUzNjpjYXNlIDExMDM6Y2FzZSA2ODA6Y2FzZSAxMTA0OmNhc2UgMTAyNDpjYXNlIDY2MzpjYXNlIDUzNTpjYXNlIDY3''@;'; put 'put ''ODpjYXNlIDUwNDpjYXNlIDEwNDM6Y2FzZSA0Mjg6Y2FzZSAxNzA6Y2FzZSAzMDcyOmNhc2UgNTA6Y2FzZSAyMDcwOmNhc2UgMTA0NTpicmVhaztjYXNlIDM1Om50PSEwO2JyZWFrO2Nhc2UgMzY6bnQ9ITE7YnJlYWs7Y2FzZSAzNzpHZS5wdXNoKFRuKSxudD0hMDticmVhaztjYXNlIDM4Okdl''@;'; put 'put ''LnBvcCgpLG50PSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoVG58fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChUbnx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIW50fHx2ZS5XVEYmJiJCcnRBQ0JlZ2luIiE9R2VbR2UubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQg''@;'; put 'put ''cmVjb3JkICIrdnIrIiAiK1RuKX19LHZlKSxkZWxldGUgdmUuc3VwYm9va3MsZGVsZXRlIHZlWyIhcm93Il0sIVNlWyIhcmVmIl0mJihWZS5zLnI8MmU2fHxIZSYmKEhlLmUucj4wfHxIZS5lLmM+MHx8SGUucy5yPjB8fEhlLnMuYz4wKSkmJihTZVsiIXJlZiJdPU9vKEhlfHxWZSkpLHZlLnNo''@;'; put 'put ''ZWV0Um93cyYmU2VbIiFyZWYiXSl7dmFyIExpPU9pKFNlWyIhcmVmIl0pO3ZlLnNoZWV0Um93czw9K0xpLmUuciYmKExpLmUucj12ZS5zaGVldFJvd3MtMSxMaS5lLnI+VmUuZS5yJiYoTGkuZS5yPVZlLmUuciksTGkuZS5yPExpLnMuciYmKExpLnMucj1MaS5lLnIpLExpLmUuYz5WZS5lLmMm''@;'; put 'put ''JihMaS5lLmM9VmUuZS5jKSxMaS5lLmM8TGkucy5jJiYoTGkucy5jPUxpLmUuYyksU2VbIiFmdWxscmVmIl09U2VbIiFyZWYiXSxTZVsiIXJlZiJdPU9vKExpKSl9cmV0dXJuIHVuLmxlbmd0aD4wJiYoU2VbIiFtZXJnZXMiXT11biksTnIubGVuZ3RoPjAmJihTZVsiIWNvbHMiXT1Ociksb2ku''@;'; put 'put ''bGVuZ3RoPjAmJihTZVsiIXJvd3MiXT1vaSksU2V9KHksUSxMLHJlLHBlLDAsdmUpOmZ1bmN0aW9uIEtaKHksUCxMLFEscmUscGUsX2Upe2lmKCF5KXJldHVybiB5O1F8fChRPXsiIWlkIjp7fX0pLG51bGwhPXRlJiZudWxsPT1QLmRlbnNlJiYoUC5kZW5zZT10ZSk7dmFyIHZlPVAuZGVuc2U/''@;'; put 'put ''W106e30sU2U9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sSGU9IiIsVmU9IiIsR2U9eS5tYXRjaChhNSk7R2U/KEhlPXkuc2xpY2UoMCxHZS5pbmRleCksVmU9eS5zbGljZShHZS5pbmRleCtHZVswXS5sZW5ndGgpKTpIZT1WZT15O3ZhciBudD1WZS5sYXN0SW5kZXhPZigiZXh0THN0''@;'; put 'put ''IiksQ3Q9KC0xPT1udHx8VmUuc2xpY2UobnQpLEhlLm1hdGNoKE12KSk7Q3Q/djYoQ3RbMF0sMCxyZSxMKTooQ3Q9SGUubWF0Y2goREkpKSYmZnVuY3Rpb24gdlMoeSxQLEwsUSxyZSxwZSxfZSl7djYoeS5zbGljZSgwLHkuaW5kZXhPZigiPiIpKSwwLFEscmUpO3ZhciB2ZT1QLm1hdGNoKF82''@;'; put 'put ''KTtpZih2ZSl7dmFyIEhlPVUyKGxuKHZlWzBdKSxwZSxfZSk7TFsiIXRhYmNvbG9yIl09SGV9aWYoKHZlPVAubWF0Y2goZ1MpKSYmbG4odmVbMF0pLmZpdFRvUGFnZSYmKExbIiFwcmludCJdfHwoTFsiIXByaW50Il09e30pLExbIiFwcmludCJdLnByb3BzfHwoTFsiIXByaW50Il0ucHJvcHM9''@;'; put 'put ''e30pLExbIiFwcmludCJdLnByb3BzLmZpdHx8KExbIiFwcmludCJdLnByb3BzLmZpdD17fSksbnVsbD09TFsiIXByaW50Il0ucHJvcHMuZml0LmhlaWdodCYmKExbIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQ9MSksbnVsbD09TFsiIXByaW50Il0ucHJvcHMuZml0LndpZHRoJiYoTFsiIXBy''@;'; put 'put ''aW50Il0ucHJvcHMuZml0LndpZHRoPTEpKSx2ZT1QLm1hdGNoKG1TKSl7TFsiIW91dGxpbmUiXT17fTt2YXIgR2U9bG4odmVbMF0pO0dlLnN1bW1hcnlCZWxvdyYmKExbIiFvdXRsaW5lIl0uYWJvdmU9IXlyKEdlLnN1bW1hcnlCZWxvdykpLEdlLnN1bW1hcnlSaWdodCYmKExbIiFvdXRsaW5l''@;'; put 'put ''Il0ubGVmdD0heXIoR2Uuc3VtbWFyeVJpZ2h0KSl9fShDdFswXSxDdFsxXXx8IiIsdmUscmUsTCxfZSxwZSk7dmFyIGN0PShIZS5tYXRjaCgvPCg/Olx3KjopP2RpbWVuc2lvbi8pfHx7aW5kZXg6LTF9KS5pbmRleDtpZihjdD4wKXt2YXIgYnQ9SGUuc2xpY2UoY3QsY3QrNTApLm1hdGNoKCRa''@;'; put 'put ''KTtidCYmKCFQfHwhUC5ub2RpbSkmJmZ1bmN0aW9uIEFJKHksUCl7dmFyIEw9T2koUCk7TC5zLnI8PUwuZS5yJiZMLnMuYzw9TC5lLmMmJkwucy5yPj0wJiZMLnMuYz49MCYmKHlbIiFyZWYiXT1PbyhMKSl9KHZlLGJ0WzFdKX12YXIgRnQ9SGUubWF0Y2goSUkpO0Z0JiZGdFsxXSYmZnVuY3Rp''@;'; put 'put ''b24gZVkoeSxQLEwsUSl7TC5WaWV3c3x8KEwuVmlld3M9W3t9XSk7dmFyIHJlPTA7eS5yZXBsYWNlKHpJLGZ1bmN0aW9uKHBlLF9lKXt2YXIgdmU9bG4ocGUpO2lmKEwuVmlld3NbUV18fChMLlZpZXdzW1FdPXt9KSx5cih2ZS5yaWdodFRvTGVmdCkmJihMLlZpZXdzW1FdLlJUTD0hMCksdmUu''@;'; put 'put ''c2hvd0dyaWRMaW5lcyYmKEwuVmlld3NbUV0uZ3JpZD15cih2ZS5zaG93R3JpZExpbmVzKSxudWxsPT1QWyIhZ3JpZGxpbmVzIl0mJihQWyIhZ3JpZGxpbmVzIl09eXIodmUuc2hvd0dyaWRMaW5lcykpKSwrdmUuem9vbVNjYWxlJiYoTC5WaWV3c1tRXS56b29tPSt2ZS56b29tU2NhbGUpLHZl''@;'; put 'put ''LnZpZXcmJihMLlZpZXdzW1FdLnZpZXc9dmUudmlldyksMT09KytyZSYmIi8+IiE9cGUuc2xpY2UoLTIpKXt2YXIgU2U9eS5zbGljZShfZStwZS5sZW5ndGgpLEhlPVNlLm1hdGNoKC88XC8oPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKCFIZSlyZXR1cm4iIjt2''@;'; put 'put ''YXIgVmU9KFNlPVNlLnNsaWNlKDAsSGUuaW5kZXgpKS5tYXRjaCgvPCg/Olx3Oik/cGFuZSg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKFZlKXt2YXIgR2U9bG4oVmVbMF0pOyJmcm96ZW4iPT1HZS5zdGF0ZT9QWyIhZnJlZXplIl09TnMoK0dlLnhTcGxpdHx8MCkrSHMoK0dlLnlTcGxpdHx8''@;'; put 'put ''MCk6R2UudG9wTGVmdENlbGwmJihQWyIhZnJlZXplIl09R2UudG9wTGVmdENlbGwpfXZhciBudD1TZS5tYXRjaCgvPCg/Olx3Oik/c2VsZWN0aW9uKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYobnQpe3ZhciBkdD1sbihudFswXSk7aWYoZHQuYWN0aXZlQ2VsbCYmKFBbIiFzZWwiXT17Y2Vs''@;'; put 'put ''bDpkdC5hY3RpdmVDZWxsfSksZHQuc3FyZWYpe3ZhciBDdD1kdC5zcXJlZi5yZXBsYWNlKC9ccy4qJC8sIiIpO1BbIiFzZWwiXXx8KFBbIiFzZWwiXT17Y2VsbDpkaShXcyhDdCkucyl9KSxQWyIhc2VsIl0ucmFuZ2U9ZHQuc3FyZWZ9fX1yZXR1cm4iIn0pfShGdFsxXSx2ZSxyZSxMKTt2YXIg''@;'; put 'put ''RXQ9SGUubWF0Y2goZmYpLFR0PVtdO2lmKFAuY2VsbFN0eWxlcyl7dmFyIFp0PUhlLm1hdGNoKEN2KTtadCYmZnVuY3Rpb24gRzMoeSxQLEwpe2Zvcih2YXIgUT0hMSxyZT0wO3JlIT1QLmxlbmd0aDsrK3JlKXt2YXIgcGU9bG4oUFtyZV0sITApO3BlLmhpZGRlbiYmKHBlLmhpZGRlbj15cihw''@;'; put 'put ''ZS5oaWRkZW4pKTt2YXIgX2U9cGFyc2VJbnQocGUubWluLDEwKS0xLHZlPXBhcnNlSW50KHBlLm1heCwxMCktMTtmb3IocGUub3V0bGluZUxldmVsJiYocGUubGV2ZWw9K3BlLm91dGxpbmVMZXZlbHx8MCksZGVsZXRlIHBlLm1pbixkZWxldGUgcGUubWF4LHBlLndpZHRoPStwZS53aWR0aCwh''@;'; put 'put ''USYmcGUud2lkdGgmJihRPSEwKSxwdShwZSkscGUuc3R5bGUmJihwZS5zPWM1KHBlLnN0eWxlLEwpKTtfZTw9dmU7KXlbX2UrK109b24ocGUpfX0oVHQsWnQsX2UpfWlmKEdlJiZaSShHZVsxXSxMLHZlLFAsU2UscGUsX2UpLFAuY2FsbGJhY2spcmV0dXJuIHZlO3ZhciBwbj1WZS5tYXRjaChU''@;'; put 'put ''SSk7cG4mJih2ZVsiIXByb3RlY3QiXT1mdW5jdGlvbiB0dCh5KXt2YXIgUD1sbih5LCEwLCEwKSxMPXt9O2lmKHlyKFAuc2hlZXQpKXJldHVybiBrdi5mb3JFYWNoKGZ1bmN0aW9uKFEpe0xbUV09bnVsbCE9UFtRXSYmeXIoUFtRXSl9KSxBdi5mb3JFYWNoKGZ1bmN0aW9uKFEpe0xbUV09bnVs''@;'; put 'put ''bD09UFtRXXx8eXIoUFtRXSl9KSxQLmFsZ29yaXRobU5hbWUmJihMLmVuY3J5cHRpb249e2FsZ286UC5hbGdvcml0aG1OYW1lLGhhc2g6UC5oYXNoVmFsdWUsc2FsdDpQLnNhbHRWYWx1ZSxzcGluOitQLnNwaW5Db3VudHx8MWU1fSksTH0ocG5bMF0pKTt2YXIgS249VmUubWF0Y2goZzYpO0tu''@;'; put 'put ''JiYodmVbIiFhdXRvZmlsdGVyIl09ZnVuY3Rpb24gbDUoeSl7cmV0dXJue3JlZjooeS5tYXRjaCgvcmVmPSIoW14iXSopIi8pfHxbXSlbMV19fShLblswXSkpO3ZhciB1bj1bXSxxbj1WZS5tYXRjaCh3dik7aWYocW4pZm9yKGN0PTA7Y3QhPXFuLmxlbmd0aDsrK2N0KXVuW2N0XT1PaShxbltj''@;'; put 'put ''dF0uc2xpY2UocW5bY3RdLmluZGV4T2YoJyInKSsxKSk7dmFyIHpuPSgtMT09bnQ/VmU6VmUuc2xpY2UoMCxudCkpLm1hdGNoKG02KTt6biYmKHZlWyIhY29uZGZtdCJdPVtdLmNvbmNhdC5hcHBseShbXSx6bi5tYXAoZnVuY3Rpb24oVG4pe3JldHVybiBJUyhUbixQLHBlLF9lKX0pKSksbnQ+''@;'; put 'put ''LTEmJih6bj1WZS5zbGljZShudCkubWF0Y2gobTYpKSYmKHZlWyIhY29uZGZtdCJdfHwodmVbIiFjb25kZm10Il09W10pLHZlWyIhY29uZGZtdCJdPXZlWyIhY29uZGZtdCJdLmNvbmNhdC5hcHBseSh2ZVsiIWNvbmRmbXQiXSx6bi5tYXAoZnVuY3Rpb24oVG4pe3JldHVybiBJUyhUbixQLHBl''@;'; put 'put ''LF9lLCEwKX0pKSk7dmFyIEFuPSgtMT09bnQ/VmU6VmUuc2xpY2UoMCxudCkpLm1hdGNoKGRTKTtBbiYmKHZlWyIhdmFsaWRhdGlvbnMiXT1BUyhBblswXSxQKSksbnQ+LTEmJihBbj1WZS5zbGljZShudCkubWF0Y2goZFMpKSYmKHZlWyIhdmFsaWRhdGlvbnMiXXx8KHZlWyIhdmFsaWRhdGlv''@;'; put 'put ''bnMiXT1bXSksdmVbIiF2YWxpZGF0aW9ucyJdPXZlWyIhdmFsaWRhdGlvbnMiXS5jb25jYXQoQVMoQW5bMF0sUCwhMCkpKTt2YXIgZXI9VmUubWF0Y2godVMpO2VyJiZmdW5jdGlvbiBTUyh5LFAsTCl7Zm9yKHZhciBRPUFycmF5LmlzQXJyYXkoeSkscmU9MDtyZSE9UC5sZW5ndGg7KytyZSl7''@;'; put 'put ''dmFyIHBlPWxuKFBpKFBbcmVdKSwhMCk7aWYoIXBlLnJlZilyZXR1cm47dmFyIF9lPSgoTHx8e30pWyIhaWQiXXx8W10pW3BlLmlkXTtfZT8ocGUuVGFyZ2V0PV9lLlRhcmdldCxwZS5sb2NhdGlvbiYmKHBlLlRhcmdldCs9IiMiK3hyKHBlLmxvY2F0aW9uKSkpOihwZS5UYXJnZXQ9IiMiK3hy''@;'; put 'put ''KHBlLmxvY2F0aW9uKSxfZT17VGFyZ2V0OnBlLlRhcmdldCxUYXJnZXRNb2RlOiJJbnRlcm5hbCJ9KSxwZS5SZWw9X2UscGUudG9vbHRpcCYmKHBlLlRvb2x0aXA9cGUudG9vbHRpcCxkZWxldGUgcGUudG9vbHRpcCk7Zm9yKHZhciB2ZT1PaShwZS5yZWYpLFNlPXZlLnMucjtTZTw9dmUuZS5y''@;'; put 'put ''OysrU2UpZm9yKHZhciBIZT12ZS5zLmM7SGU8PXZlLmUuYzsrK0hlKXt2YXIgVmU9ZGkoe2M6SGUscjpTZX0pO1E/KHlbU2VdfHwoeVtTZV09W10pLHlbU2VdW0hlXXx8KHlbU2VdW0hlXT17dDoieiIsdjp2b2lkIDB9KSx5W1NlXVtIZV0ubD1wZSk6KHlbVmVdfHwoeVtWZV09e3Q6InoiLHY6''@;'; put 'put ''dm9pZCAwfSkseVtWZV0ubD1wZSl9fX0odmUsZXIsUSk7dmFyIHRyPVZlLm1hdGNoKExJKTt0ciYmZnVuY3Rpb24gUEkoeSxQKXt2YXIgTD1sbih5LCExLCEwKTtQWyIhcHJpbnQiXXx8KFBbIiFwcmludCJdPXt9KSxQWyIhcHJpbnQiXS5wcm9wc3x8KFBbIiFwcmludCJdLnByb3BzPXt9KTt2''@;'; put 'put ''YXIgUT1QWyIhcHJpbnQiXS5wcm9wcztMLmdyaWRMaW5lcyYmKFEuZ3JpZGxpbmVzPXlyKEwuZ3JpZExpbmVzKSksbnVsbCE9TC5ob3Jpem9udGFsQ2VudGVyZWQmJihRLmNlbnRlclg9eXIoTC5ob3Jpem9udGFsQ2VudGVyZWQpKSxudWxsIT1MLnZlcnRpY2FsQ2VudGVyZWQmJihRLmNlbnRl''@;'; put 'put ''clk9eXIoTC52ZXJ0aWNhbENlbnRlcmVkKSl9KHRyWzBdLHZlKTt2YXIgWm49VmUubWF0Y2goU3YpO1puJiYoKHZlWyIhcHJpbnQiXXx8KHZlWyIhcHJpbnQiXT17fSkpLm1hcmdpbnM9dmVbIiFtYXJnaW5zIl09TVMobG4oWm5bMF0pKSk7dmFyIE5yPVZlLm1hdGNoKFczKTtOciYmZnVuY3Rp''@;'; put 'put ''b24gYlMoeSxQKXt2YXIgTD1sbih5LCExLCEwKTtkZWxldGUgTC5pZCxkZWxldGUgTFswXSxQWyIhcHJpbnQiXXx8KFBbIiFwcmludCJdPXt9KSxQWyIhcHJpbnQiXS5wcm9wc3x8KFBbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgUT1QWyIhcHJpbnQiXS5wcm9wcztMLm9yaWVudGF0aW9uJiYo''@;'; put 'put ''US5vcmllbnRhdGlvbj1MLm9yaWVudGF0aW9uKSxMLnNjYWxlJiYoUS5zY2FsZT0rTC5zY2FsZSksK0wuZml0VG9IZWlnaHQ+PTAmJigoUS5maXR8fChRLmZpdD17fSkpLmhlaWdodD0rTC5maXRUb0hlaWdodCksK0wuZml0VG9XaWR0aD49MCYmKChRLmZpdHx8KFEuZml0PXt9KSkud2lkdGg9''@;'; put 'put ''K0wuZml0VG9XaWR0aCksTC5wYXBlckhlaWdodCYmTC5wYXBlcldpZHRoP1EucGFwZXI9e3dpZHRoOkwucGFwZXJXaWR0aCxoZWlnaHQ6TC5wYXBlckhlaWdodH06TC5wYXBlclNpemUmJihRLnBhcGVyPVFtW1EucGFwZXI9K0wucGFwZXJTaXplXXx8US5wYXBlciksTC5ob3Jpem9udGFsRHBp''@;'; put 'put ''P1EuZHBpPStMLmhvcml6b250YWxEcGk6TC52ZXJ0aWNhbERwaSYmKFEuZHBpPStMLnZlcnRpY2FsRHBpKSwiYXV0b21hdGljIiE9KEwuZmlyc3RQYWdlTnVtYmVyfHwiYXV0b21hdGljIikmJihRLmZpcnN0PStMLmZpcnN0UGFnZU51bWJlcikseXIoTC5ibGFja0FuZFdoaXRlKSYmKFEuYnc9''@;'; put 'put ''ITApLHlyKEwuZHJhZnQpJiYoUS5kcmFmdD0hMCksIm92ZXJUaGVuRG93biI9PUwucGFnZU9yZGVyJiYoUS5vcmRlcj0ib3ZlciIpLEV2W0wuY2VsbENvbW1lbnRzXSYmKFEuY29tbWVudHM9RXZbTC5jZWxsQ29tbWVudHNdKSxfU1tMLmVycm9yc10mJihRLmVycm9ycz1fU1tMLmVycm9yc10p''@;'; put 'put ''fShOclswXSx2ZSk7dmFyIG9pPVZlLm1hdGNoKHFaKTtvaSYmZnVuY3Rpb24gRHYoeSxQKXtpZihQWyIhcHJpbnQiXXx8KFBbIiFwcmludCJdPXt9KSx5WzFdKXt2YXIgTD0iIixRPTA7eVsxXS5yZXBsYWNlKCR0LGZ1bmN0aW9uKHJlLHBlKXtpZigiLyIhPXJlLmNoYXJBdCgxKSlMPXJlLnNs''@;'; put 'put ''aWNlKDEsLTEpLFE9cGUrcmUubGVuZ3RoO2Vsc2UgaWYoTCl7dmFyIF9lPUwubWF0Y2goL0hlYWRlci8pPyJoZWFkZXIiOiJmb290ZXIiLHZlPUwucmVwbGFjZSgvSGVhZGVyfEZvb3Rlci8sIiIpO0w9IiIsUFsiIXByaW50Il1bX2VdfHwoUFsiIXByaW50Il1bX2VdPXt9KSxQWyIhcHJpbnQi''@;'; put 'put ''XVtfZV1bdmVdPXhyKFBpKHlbMV0uc2xpY2UoUSxwZSkpKX19KX19KG9pLHZlKTt2YXIga2k9VmUubWF0Y2goV2QpO2tpJiYoKHZlWyIhcHJpbnQiXXx8KHZlWyIhcHJpbnQiXT17fSkpLnJvd0JyZWFrcz12ZVsiIXJvd0JyZWFrcyJdPWZ1bmN0aW9uIENTKHkpe3ZhciBQPVtdO3JldHVybih5''@;'; put 'put ''Lm1hdGNoKHdTKXx8W10pLmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIFE9bG4oTCk7UC5wdXNoKHtSOitRLmlkfSl9KSxQfShraVswXSkpO3ZhciBMaT1WZS5tYXRjaChoUyk7TGkmJigodmVbIiFwcmludCJdfHwodmVbIiFwcmludCJdPXt9KSkuY29sQnJlYWtzPXZlWyIhY29sQnJlYWtzIl09''@;'; put 'put ''ZnVuY3Rpb24gSEkoeSl7dmFyIFA9W107cmV0dXJuKHkubWF0Y2god1MpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUT1sbihMKTtQLnB1c2goe0M6K1EuaWR9KX0pLFB9KExpWzBdKSk7dmFyIFFyPVtdO2lmKChRcj1WZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJih2''@;'; put 'put ''ZVsiIXJlbCJdPVFyWzFdKSwoUXI9VmUubWF0Y2goL2xlZ2FjeURyYXdpbmcgcjppZD0iKC4qPykiLykpJiYodmVbIiFsZWdyZWwiXT1RclsxXSksKFFyPVZlLm1hdGNoKGhmKSkmJih2ZVsiIWN0cmxpZCJdPVFyLm1hcChmdW5jdGlvbihUbil7cmV0dXJuIGxuKFRuKX0pKSwoUXI9VmUubWF0''@;'; put 'put ''Y2goeHYpKSYmZnVuY3Rpb24gcFMoeSxQKXt5WyIhdGFibGVyZWZzIl18fCh5WyIhdGFibGVyZWZzIl09W10pLChQLm1hdGNoKGZTKXx8W10pLmZvckVhY2goZnVuY3Rpb24oTCl7eVsiIXRhYmxlcmVmcyJdLnB1c2gobG4oTCkuaWQpfSl9KHZlLFFyWzFdKSxQJiZQLm5vZGltJiYoU2Uucy5j''@;'; put 'put ''PVNlLnMucj0wKSwhdmVbIiFyZWYiXSYmU2UuZS5jPj1TZS5zLmMmJlNlLmUucj49U2Uucy5yJiYodmVbIiFyZWYiXT1PbyhTZSkpLFAuc2hlZXRSb3dzPjAmJnZlWyIhcmVmIl0pe3ZhciB1cj1PaSh2ZVsiIXJlZiJdKTtQLnNoZWV0Um93czw9K3VyLmUuciYmKHVyLmUucj1QLnNoZWV0Um93''@;'; put 'put ''cy0xLHVyLmUucj5TZS5lLnImJih1ci5lLnI9U2UuZS5yKSx1ci5lLnI8dXIucy5yJiYodXIucy5yPXVyLmUuciksdXIuZS5jPlNlLmUuYyYmKHVyLmUuYz1TZS5lLmMpLHVyLmUuYzx1ci5zLmMmJih1ci5zLmM9dXIuZS5jKSx2ZVsiIWZ1bGxyZWYiXT12ZVsiIXJlZiJdLHZlWyIhcmVmIl09''@;'; put 'put ''T28odXIpKX1yZXR1cm4gRXQmJih2ZVsiIXNoZWV0Rm9ybWF0Il09ZnVuY3Rpb24gWFooeSl7dmFyIFA9e30sTD17fSxRPSExLHJlPXt9LHBlPSExO3JldHVybiB5LmRlZmF1bHRSb3dIZWlnaHQmJihRPSEwLEwuaHB0PXBhcnNlRmxvYXQoeS5kZWZhdWx0Um93SGVpZ2h0KSkseS56ZXJvSGVp''@;'; put 'put ''Z2h0JiYoUT0hMCxMLmhpZGRlbj15cih5Lnplcm9IZWlnaHQpKSx5LmJhc2VDb2xXaWR0aD8ocGU9ITAscmUud2NoPXBhcnNlRmxvYXQoeS5iYXNlQ29sV2lkdGgpKTp5LmRlZmF1bHRDb2xXaWR0aCYmKHBlPSEwLHJlLndjaD1wYXJzZUZsb2F0KHkuZGVmYXVsdENvbFdpZHRoKS01L3BsKSx5''@;'; put 'put ''Lm91dGxpbmVMZXZlbENvbCYmKFAuY29sb3V0bGluZT1wYXJzZUludCh5Lm91dGxpbmVMZXZlbENvbCkpLHkub3V0bGluZUxldmVsUm93JiYoUC5yb3dvdXRsaW5lPXBhcnNlSW50KHkub3V0bGluZUxldmVsUm93KSkseS50aGlja0JvdHRvbSYmKFAuYm90dGhpY2s9eXIoeS50aGlja0JvdHRv''@;'; put 'put ''bSkpLHkudGhpY2tUb3AmJihQLnRvcHRoaWNrPXlyKHkudGhpY2tUb3ApKSx5LmR5RGVzY2VudCYmKFAuZHlEZXNjZW50PXBhcnNlRmxvYXQoeS5keURlc2NlbnQpKSxRJiYoSTMoTCksUC5yb3c9TCkscGUmJihwdShyZSksUC5jb2w9cmUpLFB9KGxuKEV0WzBdKSkpLFR0Lmxlbmd0aD4wJiYo''@;'; put 'put ''dmVbIiFjb2xzIl09VHQpLHVuLmxlbmd0aD4wJiYodmVbIiFtZXJnZXMiXT11biksUVsiIWlkIl1bdmVbIiFyZWwiXV0mJih2ZVsiIWRyYXdlbCJdPVFbIiFpZCJdW3ZlWyIhcmVsIl1dKSxRWyIhaWQiXVt2ZVsiIWxlZ3JlbCJdXSYmKHZlWyIhbGVnZHJhd2VsIl09UVsiIWlkIl1bdmVbIiFs''@;'; put 'put ''ZWdyZWwiXV0pLCh2ZVsiIWN0cmxpZCJdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihUbil7VG4ucmVsPVFbIiFpZCJdW1RuLmlkXX0pLG51bGw9PXZlWyIhZ3JpZGxpbmVzIl0mJih2ZVsiIWdyaWRsaW5lcyJdPSEwKSx2ZX0oeSxRLEwscmUscGUsX2UsdmUpfShudCxQLHJlLFNlLHBlW1FdLEhl''@;'; put 'put ''LFZlLEdlKTticmVhaztjYXNlImNoYXJ0IjpkdD1mdW5jdGlvbiBWTCh5LFAsTCxRLHJlLHBlLF9lLHZlKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiB0cCh5LFAsTCxRLHJlKXtpZigheSlyZXR1cm4geTtRfHwoUT17IiFpZCI6e319KTt2YXIgcGU9eyIhdHlwZSI6ImNo''@;'; put 'put ''YXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LF9lPVtdLHZlPSExO3JldHVybiBIbyh5LGZ1bmN0aW9uKEhlLFZlLEdlKXtzd2l0Y2goR2Upe2Nhc2UgNTUwOnBlWyIhcmVsIl09SGU7YnJlYWs7Y2FzZSA2NTE6cmUuU2hlZXRzW0xdfHwocmUuU2hlZXRzW0xdPXt9KSxIZS5uYW1lJiYo''@;'; put 'put ''cmUuU2hlZXRzW0xdLkNvZGVOYW1lPUhlLm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OnZlPSEwO2JyZWFrO2Nhc2UgMzY6dmU9ITE7YnJlYWs7Y2FzZSAzNzpf''@;'; put 'put ''ZS5wdXNoKFZlKTticmVhaztjYXNlIDM4Ol9lLnBvcCgpO2JyZWFrO2RlZmF1bHQ6aWYoKFZlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKV9lLnB1c2goVmUpO2Vsc2UgaWYoKFZlfHwiIikuaW5kZXhPZigiRW5kIik+MClfZS5wb3AoKTtlbHNlIGlmKCF2ZXx8UC5XVEYpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0dlKyIgIitWZSl9fSxQKSxRWyIhaWQiXVtwZVsiIXJlbCJdXSYmKHBlWyIhZHJhd2VsIl09UVsiIWlkIl1bcGVbIiFyZWwiXV0pLHBlfSh5LFEsTCxyZSxwZSk6ZnVuY3Rpb24gSjMoeSxQLEwsUSxyZSl7aWYoIXkpcmV0dXJuIHk7UXx8KFE9eyIh''@;'; put 'put ''aWQiOnt9fSk7dmFyIF9lLHBlPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSx2ZT15Lm1hdGNoKE12KTt2ZSYmdjYodmVbMF0sMCxyZSxMKTt2YXIgU2U9eS5tYXRjaChTdik7cmV0dXJuIFNlJiYocGVbIiFtYXJnaW5zIl09TVMobG4oU2VbMF0pKSksKF9lPXku''@;'; put 'put ''bWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYocGVbIiFyZWwiXT1fZVsxXSksUVsiIWlkIl1bcGVbIiFyZWwiXV0mJihwZVsiIWRyYXdlbCJdPVFbIiFpZCJdW3BlWyIhcmVsIl1dKSxwZX0oeSwwLEwscmUscGUpfShudCxQLHJlLFNlLHBlW1FdLEhlKTticmVhaztjYXNlIm1hY3Jv''@;'; put 'put ''IjpkdD1mdW5jdGlvbiBCTCh5LFAsTCxRLHJlLHBlLF9lLHZlKXtyZXR1cm4gUC5zbGljZSgtNCkseyIhdHlwZSI6Im1hY3JvIn19KDAsUCk7YnJlYWs7Y2FzZSJkaWFsb2ciOmR0PWZ1bmN0aW9uIGpMKHksUCxMLFEscmUscGUsX2UsdmUpe3JldHVybiBQLnNsaWNlKC00KSx7IiF0eXBlIjoi''@;'; put 'put ''ZGlhbG9nIn19KDAsUCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrdmUpfWlmKFNlLmNhbGxiYWNrKXJldHVybjtfZVtRXT1kdCxmdW5jdGlvbiBPTSh5LFAsTCxRLHJlLHBlLF9lLHZlKXtpZih5JiZ5WyIhZHJhd2VsIl0pe3ZhciBT''@;'; put 'put ''ZT1zbih5WyIhZHJhd2VsIl0uVGFyZ2V0LFEpLEhlPUJpKFNlKSxWZT1mdW5jdGlvbiBHRCh5LFAsTCxRLHJlKXt2YXIgcGU9e2NoYXJ0czpbXSxpbWFnZXM6W10sc2hhcGVzOltdfTtpZigheSlyZXR1cm4gcGU7dmFyIF9lPXJlfHx7fTtyZXR1cm4oeS5tYXRjaCgvPFtePF0qPyhhYnNvbHV0''@;'; put 'put ''ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3b0NlbGxBbmNob3IpLio/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvcikuKj8+L2cpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPSIiLEhlPXt0eXBlOiIifSxWZT17fSxHZT0hMCxudD0hMSxkdD0hMSxD''@;'; put 'put ''dD0hMSxjdD17czp7fX0sYnQ9LTEsRnQ9W10sRXQ9W10sVHQ9e3M6e2FsaWdubWVudDp7aG9yaXpvbnRhbDoiY2VudGVyIix2ZXJ0aWNhbDoiY2VudGVyIn19fSxadD0iIixwbj0tMSx1bj17fTt2ZS5yZXBsYWNlKCR0LGZ1bmN0aW9uKHFuLHpuKXtGdD1udWxsO3ZhciBBbj1sbihxbiksZXI9''@;'; put 'put ''am4oQW5bMF0pLnJlcGxhY2UoL1tcL10/PiQvLCIiKTtzd2l0Y2goZXIpe2Nhc2UiPGNsaWVudERhdGEiOmJyZWFrO2Nhc2UiPGFic29sdXRlQW5jaG9yIjpjYXNlIjxvbmVDZWxsQW5jaG9yIjpjYXNlIjx0d29DZWxsQW5jaG9yIjpIZS50eXBlPWpuKEFuWzBdKS5yZXBsYWNlKC9bPD5dL2cs''@;'; put 'put ''IiIpO2JyZWFrO2Nhc2UiPC9hYnNvbHV0ZUFuY2hvciI6Y2FzZSI8L29uZUNlbGxBbmNob3IiOmNhc2UiPC90d29DZWxsQW5jaG9yIjpicmVhaztjYXNlIjxwb3MiOkhlLnBvcz17eDorQW4ueCx5OitBbi55fTticmVhaztjYXNlIjxleHQiOkdlJiYoSGUuZXh0PXt4OitBbi5jeCx5OitBbi5j''@;'; put 'put ''eX0pO2JyZWFrO2Nhc2UiPGZyb20iOmNhc2UiPHRvIjpWZT17fTticmVhaztjYXNlIjwvZnJvbSI6R2UmJihIZS5mcm9tPVZlKTticmVhaztjYXNlIjwvdG8iOkdlJiYoSGUudG89VmUpO2JyZWFrO2Nhc2UiPGNvbCI6Y2FzZSI8Y29sT2ZmIjpjYXNlIjxyb3ciOmNhc2UiPHJvd09mZiI6YnQ9''@;'; put 'put ''em4rcW4ubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2wiOlZlLmM9K3ZlLnNsaWNlKGJ0LHpuKTticmVhaztjYXNlIjwvY29sT2ZmIjpWZS5jT2ZmPSt2ZS5zbGljZShidCx6bik7YnJlYWs7Y2FzZSI8L3JvdyI6VmUucj0rdmUuc2xpY2UoYnQsem4pO2JyZWFrO2Nhc2UiPC9yb3dPZmYiOlZlLnJP''@;'; put 'put ''ZmY9K3ZlLnNsaWNlKGJ0LHpuKTticmVhaztjYXNlIjxzcCI6U2U9InNoYXBlIixUdC5BbmNob3I9SGUscGUuc2hhcGVzLnB1c2goVHQpLEdlPSExO2JyZWFrO2Nhc2UiPC9zcCI6R2U9ITA7YnJlYWs7Y2FzZSI8Z3JhcGhpY0ZyYW1lIjpTZT0iZ3JhcGhpYyIsR2U9ITE7YnJlYWs7Y2FzZSI8''@;'; put 'put ''L2dyYXBoaWNGcmFtZSI6R2U9ITA7YnJlYWs7Y2FzZSI8cGljIjpTZT0icGljdHVyZSIsR2U9ITE7YnJlYWs7Y2FzZSI8L3BpYyI6R2U9ITA7YnJlYWs7Y2FzZSI8Z3JwU3AiOlNlPSJncm91cHNoYXBlIixHZT0hMTticmVhaztjYXNlIjwvZ3JwU3AiOkdlPSEwO2JyZWFrO2Nhc2UiPGdyYXBo''@;'; put 'put ''aWMiOmNhc2UiPC9ncmFwaGljIjpjYXNlIjx4ZnJtIjpjYXNlIjwveGZybSI6Y2FzZSI8b2ZmIjpicmVhaztjYXNlIjxncmFwaGljRGF0YSI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2dyYXBoaWNEYXRhIjpudD0hMTticmVhaztjYXNlIjxibGlwRmlsbCI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2JsaXBG''@;'; put 'put ''aWxsIjpudD0hMTticmVhaztjYXNlIjwvYmxpcCI6YnJlYWs7Y2FzZSI8c3JjUmVjdCI6bnQ9ITA7YnJlYWs7Y2FzZSI8L3NyY1JlY3QiOm50PSExO2JyZWFrO2Nhc2UiPG5vRmlsbCI6aWYoZHQpYnJlYWs7IjxzcFByIj09RXQuc2xpY2UoLTEpWzBdJiYoVHQucy5mZ0NvbG9yPW51bGwpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPC9zb2xpZEZpbGwiOmlmKGR0fHxDdClicmVhazsiPHNwUHIiPT1FdC5zbGljZSgtMilbMF0/VHQucy5mZ0NvbG9yPXVuOiI8clByIj09RXQuc2xpY2UoLTIpWzBdJiZFdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihjdC5zLmNvbG9yPXVuKSx1bj17fSxDdD0hMTticmVhaztj''@;'; put 'put ''YXNlIjxwcnN0R2VvbSI6InNoYXBlIj09U2UmJihUdFsiIXNoYXBlIl09QW4ucHJzdCk7YnJlYWs7Y2FzZSI8L3Byc3RHZW9tIjpjYXNlIjxhdkxzdCI6YnJlYWs7Y2FzZSI8dHhCb2R5IjpudD0hMCxUdC5SPVtdO2JyZWFrO2Nhc2UiPC90eEJvZHkiOm50PSExO2JyZWFrO2Nhc2UiPGJvZHlQ''@;'; put 'put ''ciI6VHQucy5hbGlnbm1lbnQudmVydGljYWw9WURbQW4uYW5jaG9yfHwidCJdfHwidG9wIjticmVhaztjYXNlIjxsc3RTdHlsZSI6YnJlYWs7Y2FzZSI8dCI6cG49em4rcW4ubGVuZ3RoO2JyZWFrO2Nhc2UiPGJyIjpjYXNlIjxici8+IjpadCs9IlxuIjticmVhaztjYXNlIjwvdCI6WnQrPXZl''@;'; put 'put ''LnNsaWNlKHBuLHpuKTticmVhaztjYXNlIjxwUHIiOlR0LnMuYWxpZ25tZW50Lmhvcml6b250YWx8fChUdC5zLmFsaWdubWVudC5ob3Jpem9udGFsPUlDW0FuLmFsZ258fCJsIl18fCJsZWZ0IiksRXQuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoY3Qucy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1J''@;'; put 'put ''Q1tBbi5hbGdufHwibCJdfHwibGVmdCIpO2JyZWFrO2Nhc2UiPHJQciI6QW4uc3omJkV0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKFR0LnMuc3o9Y3Qucy5zej0rQW4uc3ovMTAwKTticmVhaztjYXNlIjxwIjpadD0iIixjdD17dDoicyIsdjoiIixzOnthbGlnbm1lbnQ6e319fTticmVhaztj''@;'; put 'put ''YXNlIjwvcCI6InNoYXBlIj09U2UmJkV0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKFR0LnY9KFR0LnZ8fCIiKStadCxjdC52PVp0LFR0LlIucHVzaChjdCkpO2JyZWFrO2Nhc2UiPGxhdGluIjpBbi50eXBlZmFjZSYmRXQuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoY3Qucy5uYW1lPUFuLnR5''@;'; put 'put ''cGVmYWNlKTticmVhaztjYXNlIjxzdHlsZSI6bnQ9ITAsZHQ9ITA7YnJlYWs7Y2FzZSI8L3N0eWxlIjpudD0hMSxkdD0hMTticmVhaztjYXNlIjxsblJlZiI6Y2FzZSI8ZmlsbFJlZiI6Y2FzZSI8ZWZmZWN0UmVmIjpjYXNlIjxmb250UmVmIjpicmVhaztjYXNlIjwvZmlsbFJlZiI6IWR0JiYi''@;'; put 'put ''c2hhcGUiPT1TZSYmKFR0LnMuZmdDb2xvcj11biksdW49e307YnJlYWs7Y2FzZSI8L2ZvbnRSZWYiOiFkdCYmInNoYXBlIj09U2UmJihUdC5zLmNvbG9yPXVuKSx1bj17fTticmVhaztjYXNlIjxzY2hlbWVDbHIiOnZhciB0cj17YmcxOiJsdDEiLGJnMjoibHQyIix0eDE6ImRrMSIsdHgyOiJk''@;'; put 'put ''azIifVtBbi52YWxdfHxBbi52YWwsWm49KChRLnRoZW1lRWxlbWVudHN8fHt9KS5jbHJTY2hlbWV8fFtdKS5maW5kKGZ1bmN0aW9uKG9pKXtyZXR1cm4gb2kubmFtZT09dHJ9KTtabj91bi5yZ2I9Wm4ucmdiOkN0PSEwO2JyZWFrO2Nhc2UiPHNjcmdiQ2xyIjpDdD0hMDticmVhaztjYXNlIjxz''@;'; put 'put ''cmdiQ2xyIjp1bi5yZ2I9QW4udmFsLnNsaWNlKC02KTticmVhaztjYXNlIjxoc2xDbHIiOmNhc2UiPHN5c0NsciI6Y2FzZSI8cHJzdENsciI6Q3Q9ITA7YnJlYWs7Y2FzZSI8Y2hhcnQiOkZ0PXBlLmNoYXJ0czt2YXIgTnI9QW4uaWQ7Y2FzZSI8YmxpcCI6RnR8fChGdD1wZS5pbWFnZXMsTnI9''@;'; put 'put ''QW4uZW1iZWQpLEZ0LnB1c2goe0FuY2hvcjpIZSxUYXJnZXQ6KFBbIiFpZCJdW05yXXx8e30pLlRhcmdldH0pLEFuLmxpbmsmJihGdFtGdC5sZW5ndGgtMV0uTGluaz0oUFsiIWlkIl1bQW4ubGlua118fHt9KS5UYXJnZXQpO2JyZWFrO2Nhc2UiPGdycFNwUHIiOm50PSEwO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PC9ncnBTcFByIjpudD0hMTticmVhaztjYXNlIjxudkdycFNwUHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9udkdycFNwUHIiOm50PSExO2JyZWFrO2Nhc2UiPHNwUHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9zcFByIjpudD0hMTticmVhaztjYXNlIjxzdHJldGNoIjpjYXNlIjwvc3RyZXRjaCI6Y2Fz''@;'; put 'put ''ZSI8ZmlsbFJlY3QiOmNhc2UiPG52R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9udkdyYXBoaWNGcmFtZVByIjpjYXNlIjxjTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8L2NOdkdyYXBoaWNGcmFtZVByIjpjYXNlIjxncmFwaGljRnJhbWVMb2NrcyI6Y2FzZSI8bnZQaWNQciI6Y2FzZSI8L252UGlj''@;'; put 'put ''UHIiOmNhc2UiPGNOdlBpY1ByIjpjYXNlIjwvY052UGljUHIiOmNhc2UiPHBpY0xvY2tzIjpjYXNlIjxjTnZHcnBTcFByIjpjYXNlIjwvY052R3JwU3BQciI6Y2FzZSI8Z3JwU3BMb2NrcyI6Y2FzZSI8bnZTcFByIjpjYXNlIjwvbnZTcFByIjpjYXNlIjxjTnZTcFByIjpjYXNlIjwvY052U3BQ''@;'; put 'put ''ciI6Y2FzZSI8c3BMb2NrcyI6YnJlYWs7Y2FzZSI8Y052UHIiOm50PSEwO2JyZWFrO2Nhc2UiPC9jTnZQciI6bnQ9ITE7YnJlYWs7Y2FzZSI8Y3huU3AiOm50PSEwO2JyZWFrO2Nhc2UiPC9jeG5TcCI6bnQ9ITE7YnJlYWs7Y2FzZSI8Y052Q3huU3BQciI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2NO''@;'; put 'put ''dkN4blNwUHIiOm50PSExO2JyZWFrO2Nhc2UiPG52Q3huU3BQciI6Y2FzZSI8L252Q3huU3BQciI6YnJlYWs7Y2FzZSI8ZXh0THN0IjpudD0hMCxkdD0hMDticmVhaztjYXNlIjwvZXh0THN0IjpudD0hMSxkdD0hMTticmVhaztjYXNlIjwvZXh0IjpicmVhaztkZWZhdWx0OmlmKF9lJiZfZS5X''@;'; put 'put ''VEYmJiFudCl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK0FuWzBdKyIgaW4gZHJhd2luZyIpfXJldHVybiI8LyI9PWVyLnNsaWNlKDAsMik/RXQucG9wKCk6Ii8+IiE9cW4uc2xpY2UocW4ubGVuZ3RoLTIpJiZFdC5wdXNoKGVyKSwiIn0pfSkscGV9KEp0KEwsU2UsITApLERvKEp0''@;'; put 'put ''KEwsSGUsITApLFNlKSwwLHZlLHJlKTtpZihWZSl7aWYoVmUuY2hhcnRzKWZvcih2YXIgR2U9MDtHZTxWZS5jaGFydHMubGVuZ3RoOysrR2Upe3ZhciBudD1WZS5jaGFydHNbR2VdLGR0PXNuKG50LlRhcmdldCxTZSksQ3Q9QmkoZHQpLGN0PSJjaGFydCI9PVAmJjA9PUdlLGJ0PW0wKEp0KEws''@;'; put 'put ''ZHQsITApLDAsMCxEbyhKdChMLEN0LCEwKSxkdCksMCxjdD95Om51bGwsbnQsY3Q/bnVsbDp5KTtjdHx8KHlbIiFjaGFydHMiXXx8KHlbIiFjaGFydHMiXT1bXSkseVsiIWNoYXJ0cyJdLnB1c2goYnQpKX1pZihyZS5ib29rSW1hZ2VzJiZWZS5pbWFnZXMpZm9yKHZhciBGdD0wO0Z0PFZlLmlt''@;'; put 'put ''YWdlcy5sZW5ndGg7KytGdCl7dmFyIEV0PVZlLmltYWdlc1tGdF0sVHQ9eyIhdHlwZSI6ImltYWdlIiwiIXBvcyI6TUMoRXQuQW5jaG9yKSwiIXBvc1R5cGUiOkV0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpzZihFdC5BbmNob3IseSksIiFyZWxwb3MiOktt''@;'; put 'put ''KEV0LkFuY2hvcix5KX07aWYoRXQuVGFyZ2V0JiYoVHRbIiFwYXRoIl09c24oRXQuVGFyZ2V0LFNlKSxUdFsiIWRhdGEiXT1JdChMLFR0WyIhcGF0aCJdKSxUdFsiIWRhdGF0eXBlIl09InN0cmluZyI9PXR5cGVvZiBUdFsiIWRhdGEiXT8iYmluYXJ5IjoiYnVmZmVyIiksRXQuTGluayYmKFR0''@;'; put 'put ''WyIhZGF0YXR5cGUiXXx8KFR0WyIhZGF0YXR5cGUiXT0icmVtb3RlIiksVHRbIiFsaW5rIl09RXQuTGluayksIVR0WyIhZGF0YXR5cGUiXSl0aHJvdyJJbWFnZSBkYXRhIGNhbm5vdCBiZSBmb3VuZCI7eVsiIWltYWdlcyJdfHwoeVsiIWltYWdlcyJdPVtdKSx5WyIhaW1hZ2VzIl0ucHVzaChU''@;'; put 'put ''dCl9dmFyIFp0LHBuO2lmKFZlLnNoYXBlcylmb3IodmFyIHVuPTA7dW48VmUuc2hhcGVzLmxlbmd0aDsrK3VuKXBuPXsiIXR5cGUiOiJzaGFwZSIsIiFwb3MiOnNmKChadD1WZS5zaGFwZXNbdW5dKS5BbmNob3IseSksIiFwb3NUeXBlIjpadC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3Iv''@;'; put 'put ''LCIiKSwiIWFic3BvcyI6c2YoWnQuQW5jaG9yLHkpLCIhcmVscG9zIjpLbShadC5BbmNob3IseSl9LFsidiIsIiFzaGFwZSIsInMiLCJSIl0uZm9yRWFjaChLbikseVsiIXNoYXBlcyJdfHwoeVsiIXNoYXBlcyJdPVtdKSx5WyIhc2hhcGVzIl0ucHVzaChwbil9fWZ1bmN0aW9uIEtuKHFuKXta''@;'; put 'put ''dFtxbl0mJihwbltxbl09WnRbcW5dKX19KGR0LHZlLHksUCxTZSwwLDAsVmUpO3ZhciBDdD1bXTtyZXR1cm4gcGUmJnBlW1FdJiZsdChwZVtRXSkuZm9yRWFjaChmdW5jdGlvbihjdCl7aWYocGVbUV1bY3RdLlR5cGU9PUhpLkNNTlQpe3ZhciBidD1zbihwZVtRXVtjdF0uVGFyZ2V0LFApO2lm''@;'; put 'put ''KCEoQ3Q9ZnVuY3Rpb24gdVkoeSxQLEwpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIFFEKHksUCl7dmFyIEw9W10sUT1bXSxyZT17fSxwZT0hMTtyZXR1cm4gSG8oeSxmdW5jdGlvbih2ZSxTZSxIZSl7c3dpdGNoKEhlKXtjYXNlIDYzMjpRLnB1c2godmUpO2JyZWFrO2Nh''@;'; put 'put ''c2UgNjM1OnJlPXZlO2JyZWFrO2Nhc2UgNjM3OnJlLnQ9dmUudCxyZS5oPXZlLmgscmUucj12ZS5yO2JyZWFrO2Nhc2UgNjM2OmlmKHJlLmF1dGhvcj1RW3JlLmlhdXRob3JdLGRlbGV0ZSByZS5pYXV0aG9yLFAuc2hlZXRSb3dzJiZyZS5yZngmJlAuc2hlZXRSb3dzPD1yZS5yZngucilicmVh''@;'; put 'put ''aztyZS50fHwocmUudD0iIiksZGVsZXRlIHJlLnJmeCxMLnB1c2gocmUpO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDM3OmNhc2UgMzg6YnJlYWs7Y2FzZSAzNTpwZT0hMDticmVhaztjYXNlIDM2OnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoU2V8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYh''@;'; put 'put ''KChTZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIXBlfHxQLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0hlKyIgIitTZSl9fSksTH0oeSxMKTpmdW5jdGlvbiBGQyh5LFApe2lmKHkubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107''@;'; put 'put ''dmFyIEw9W10sUT1bXSxyZT15Lm1hdGNoKC88KD86XHcrOik/YXV0aG9ycz4oW1xzXFNdKik8XC8oPzpcdys6KT9hdXRob3JzPi8pO3JlJiZyZVsxXSYmcmVbMV0uc3BsaXQoLzxcL1x3Kjo/YXV0aG9yPi8pLmZvckVhY2goZnVuY3Rpb24oX2Upe2lmKCIiIT09X2UmJiIiIT09X2UudHJpbSgp''@;'; put 'put ''KXt2YXIgdmU9X2UubWF0Y2goLzwoPzpcdys6KT9hdXRob3JbXj5dKj4oLiopLyk7dmUmJkwucHVzaCh2ZVsxXSl9fSk7dmFyIHBlPXkubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gcGUmJnBlWzFdJiZwZVsx''@;'; put 'put ''XS5zcGxpdCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVhY2goZnVuY3Rpb24oX2Upe2lmKCIiIT09X2UmJiIiIT09X2UudHJpbSgpKXt2YXIgdmU9X2UubWF0Y2goLzwoPzpcdys6KT9jb21tZW50W14+XSo+Lyk7aWYodmUpe3ZhciBTZT1sbih2ZVswXSksSGU9e2F1dGhvcjpTZS5hdXRob3JJ''@;'; put 'put ''ZCYmTFtTZS5hdXRob3JJZF18fCJzaGVldGpzZ2hvc3QiLHJlZjpTZS5yZWYsZ3VpZDpTZS5ndWlkfSxWZT1zcyhTZS5yZWYpO2lmKCEoUC5zaGVldFJvd3MmJlAuc2hlZXRSb3dzPD1WZS5yKSl7dmFyIEdlPV9lLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90''@;'; put 'put ''ZXh0Pi8pLG50PSEhR2UmJiEhR2VbMV0mJlQ5KEdlWzFdKXx8e3I6IiIsdDoiIixoOiIifTtIZS5yPW50LnIsIjx0PjwvdD4iPT1udC5yJiYobnQudD1udC5oPSIiKSxIZS50PShudC50fHwiIikucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIiksUC5jZWxsSFRNTCYm''@;'; put 'put ''KEhlLmg9bnQuaCksUS5wdXNoKEhlKX19fX0pLFF9KHksTCl9KEl0KHksYnQsITApLGJ0LFNlKSl8fCFDdC5sZW5ndGgpcmV0dXJuOyFmdW5jdGlvbiBHOSh5LFApe3ZhciBRLEw9QXJyYXkuaXNBcnJheSh5KTtQLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBwZT1zcyhyZS5yZWYpO2lmKEw/''@;'; put 'put ''KHlbcGUucl18fCh5W3BlLnJdPVtdKSxRPXlbcGUucl1bcGUuY10pOlE9eVtyZS5yZWZdLCFRKXtRPXt0OiJ6In0sTD95W3BlLnJdW3BlLmNdPVE6eVtyZS5yZWZdPVE7dmFyIF9lPU9pKHlbIiFyZWYiXXx8IkJEV0dPMTAwMDAwMTpBMSIpO19lLnMucj5wZS5yJiYoX2Uucy5yPXBlLnIpLF9l''@;'; put 'put ''LmUucjxwZS5yJiYoX2UuZS5yPXBlLnIpLF9lLnMuYz5wZS5jJiYoX2Uucy5jPXBlLmMpLF9lLmUuYzxwZS5jJiYoX2UuZS5jPXBlLmMpO3ZhciB2ZT1PbyhfZSk7dmUhPT15WyIhcmVmIl0mJih5WyIhcmVmIl09dmUpfVEuY3x8KFEuYz1bXSk7dmFyIFNlPXthOnJlLmF1dGhvcix0OnJlLnQs''@;'; put 'put ''cjpyZS5yfTtTZS5yJiYic3RyaW5nIj09dHlwZW9mIFNlLnImJihTZS5SPURtKFNlLnIpKSxyZS5oJiYoU2UuaD1yZS5oKSxRLmMucHVzaChTZSl9KX0oZHQsQ3QpfX0pLGZ1bmN0aW9uIHBSKHksUCxMLFEscmUscGUsX2UpeyF5fHwheVsiIXRhYmxlcmVmcyJdfHwhTHx8IUxbIiFpZCJdfHwo''@;'; put 'put ''eVsiIXRhYmxlcyJdPVtdLHlbIiF0YWJsZXJlZnMiXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt2YXIgU2U9TFsiIWlkIl1bdmVdO2lmKFNlJiZTZS5UYXJnZXQpe3ZhciBIZT1zbihTZS5UYXJnZXQsUSk7IWZ1bmN0aW9uICQ0KHksUCxMLFEscmUpe3ZhciBwZT17c3R5bGU6e30saGVhZGVyOjB9''@;'; put 'put ''LF9lPSExO3kucmVwbGFjZSgkdCxmdW5jdGlvbih2ZSl7dmFyIFNlPWxuKHZlKTtzd2l0Y2goam4oU2VbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjwvdGFibGU+IjpjYXNlIjwvYXV0b0ZpbHRlcj4iOmNhc2UiPHNvcnRTdGF0ZSI6Y2FzZSI8c29ydFN0YXRlPiI6Y2FzZSI8L3NvcnRTdGF0ZT4i''@;'; put 'put ''OmNhc2UiPC90YWJsZUNvbHVtbnMiOmNhc2UiPC90YWJsZUNvbHVtbnM+IjpjYXNlIjwvdGFibGVDb2x1bW4+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYT4iOmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhIjpjYXNlIjwvY2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNl''@;'; put 'put ''Ijx0b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYSI6Y2FzZSI8L3RvdGFsc1Jvd0Zvcm11bGE+IjpjYXNlIjx4bWxDb2x1bW5Qcj4iOmNhc2UiPHhtbENvbHVtblByIjpjYXNlIjwveG1sQ29sdW1uUHI+IjpjYXNlIjxzb3J0Q29uZGl0aW9uPiI6Y2FzZSI8c29ydENv''@;'; put 'put ''bmRpdGlvbiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHRhYmxlIjpTZS5yZWYmJihwZS5yZWY9U2UucmVmKSxTZS5uYW1lP3BlLm5hbWU9U2UubmFtZTpTZS5kaXNwbGF5TmFtZSYmKHBlLm5hbWU9U2Uu''@;'; put 'put ''ZGlzcGxheU5hbWUpLG51bGwhPVNlLmhlYWRlcnJvd2NvdW50JiYxIT0rU2UuaGVhZGVycm93Y291bnQ/cGUuaGVhZGVyPStTZS5oZWFkZXJyb3djb3VudDpudWxsPT1TZS5oZWFkZXJyb3djb3VudCYmKHBlLmhlYWRlcj0xKTticmVhaztjYXNlIjxhdXRvRmlsdGVyIjpjYXNlIjxhdXRvRmls''@;'; put 'put ''dGVyPiI6cGUuZmlsdGVyPSEwO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1ucyI6Y2FzZSI8dGFibGVDb2x1bW5zPiI6cGUuY29scz1bXTticmVhaztjYXNlIjx0YWJsZVN0eWxlSW5mbyI6U2Uuc2hvd1Jvd1N0cmlwZXMmJihwZS5zdHlsZS5yb3dzdHJpcGU9eXIoU2Uuc2hvd1Jvd1N0cmlwZXMp''@;'; put 'put ''KSxTZS5zaG93Q29sdW1uU3RyaXBlcyYmKHBlLnN0eWxlLmNvbHN0cmlwZT15cihTZS5zaG93Q29sdW1uU3RyaXBlcykpLFNlLnNob3dGaXJzdENvbHVtbiYmKHBlLnN0eWxlLmNvbGZpcnN0PXlyKFNlLnNob3dGaXJzdENvbHVtbikpLFNlLnNob3dMYXN0Q29sdW1uJiYocGUuc3R5bGUuY29s''@;'; put 'put ''bGFzdD15cihTZS5zaG93TGFzdENvbHVtbikpLFNlLm5hbWUmJihwZS5zdHlsZS5uYW1lPVNlLm5hbWUucmVwbGFjZSgvXlRhYmxlU3R5bGUvLCIiKSk7YnJlYWs7Y2FzZSI8dGFibGVDb2x1bW4iOmNhc2UiPHRhYmxlQ29sdW1uPiI6cGUuY29scy5wdXNoKHtpZDorU2UuaWQsbmFtZTpTZS5u''@;'; put 'put ''YW1lfSk7YnJlYWs7Y2FzZSI8ZmlsdGVyQ29sdW1uPiI6Y2FzZSI8ZmlsdGVyQ29sdW1uIjpjYXNlIjxjdXN0b21GaWx0ZXJzIjpjYXNlIjxjdXN0b21GaWx0ZXJzPiI6Y2FzZSI8ZXh0IjpfZT0hMDticmVhaztjYXNlIjwvZmlsdGVyQ29sdW1uPiI6Y2FzZSI8L2N1c3RvbUZpbHRlcnM+Ijpj''@;'; put 'put ''YXNlIjwvZXh0PiI6X2U9ITE7YnJlYWs7ZGVmYXVsdDppZighX2UmJnJlLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1NlWzBdKyIgaW4gdGFibGUiKX1yZXR1cm4gdmV9KSxwZS5maWx0ZXJ8fChwZS5maWx0ZXI9ITEpLHBlLnN0eWxlLm5hbWUmJiFwZS5zdHlsZS5uYW1l''@;'; put 'put ''Lm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKSYmTC5UYWJsZSYmTC5UYWJsZS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXsodmUubmFtZT09cGUuc3R5bGUubmFtZXx8dmUucmF3bmFtZT09cGUuc3R5bGUubmFtZSkmJihwZS5zdHlsZS5yYXc9b24odmUpKX0pLFBbIiF0YWJsZXMiXS5w''@;'; put 'put ''dXNoKHBlKX0oSXQoUCxIZSwhMCkseSxyZSwwLF9lKX19KSxkZWxldGUgeVsiIXRhYmxlcmVmcyJdKX0oZHQseSxwZVtRXSxQLEdlLDAsU2UpLHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSImJkY2LnB1c2goW2R0LHkscGVbUV0sUCx7U2hlZXRzOl9lfSxHZSxTZV0pLGZ1bmN0aW9uIFBN''@;'; put 'put ''KHksUCxMLFEscmUscGUsX2UsdmUpe2lmKHkmJnlbIiFsZWdkcmF3ZWwiXSl7dmFyIFNlPXNuKHlbIiFsZWdkcmF3ZWwiXS5UYXJnZXQsUSksSGU9SnQoTCxTZSwhMCk7SGUmJmZ1bmN0aW9uICREKHksUCxMKXt2YXIgUT0wOyh5Lm1hdGNoKE4zKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUp''@;'; put 'put ''e3ZhciBGdCxFdCxUdCxadCxwbixLbix1bixxbixwZT0iIixfZT0hMCx2ZT0iIixTZT0tMSxIZT17fSxWZT17fSxHZT17fSxudD0tMSxkdD0tMSxDdD0iIixjdD0iIixidD0iIix6bj0hMSxBbj0hMTtzd2l0Y2gocmUucmVwbGFjZSgkdCxmdW5jdGlvbihabixOcil7dmFyIG9pPWxuKFpuKTtz''@;'; put 'put ''d2l0Y2goam4ob2lbMF0pKXtjYXNlIjxzaGFwZSI6b2kuZmlsbGNvbG9yJiYoSGUuY29sb3IxPW9pLmZpbGxjb2xvciksb2kuc3Ryb2tlY29sb3ImJihHZS5jb2xvcj1vaS5zdHJva2Vjb2xvcik7YnJlYWs7Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbD4iOiI8djpmaWxsIj09b2lbMF0mJihvaS5j''@;'; put 'put ''b2xvcjImJihIZS5jb2xvcjI9b2kuY29sb3IyKSxvaS50eXBlJiYoSGUudHlwZT1vaS50eXBlKSk7YnJlYWs7Y2FzZSI8L2ZpbGw+IjpjYXNlIjxsb2NrIjpjYXNlIjxsb2NrLz4iOmJyZWFrO2Nhc2UiPHNoYWRvdyI6b2kuY29sb3ImJihWZS5jb2xvcj1vaS5jb2xvciksb2kub24mJihWZS5v''@;'; put 'put ''bj1vaS5vbik7YnJlYWs7Y2FzZSI8Q2xpZW50RGF0YSI6b2kuT2JqZWN0VHlwZSYmKHBlPW9pLk9iamVjdFR5cGUpO2JyZWFrO2Nhc2UiPFZpc2libGUiOmNhc2UiPFZpc2libGUvPiI6X2U9ITE7YnJlYWs7Y2FzZSI8QW5jaG9yIjpjYXNlIjxBbmNob3I+IjpjYXNlIjxSb3ciOmNhc2UiPFJv''@;'; put 'put ''dz4iOmNhc2UiPENvbHVtbiI6Y2FzZSI8Q29sdW1uPiI6Y2FzZSI8Rm1sYU1hY3JvIjpjYXNlIjxGbWxhTWFjcm8+IjpjYXNlIjxGbWxhTGluayI6Y2FzZSI8Rm1sYUxpbms+IjpjYXNlIjxGbWxhUmFuZ2UiOmNhc2UiPEZtbGFSYW5nZT4iOmNhc2UiPFNlbFR5cGUiOmNhc2UiPFNlbFR5cGU+''@;'; put 'put ''IjpjYXNlIjxWYWwiOmNhc2UiPFZhbD4iOmNhc2UiPE1pbiI6Y2FzZSI8TWluPiI6Y2FzZSI8TWF4IjpjYXNlIjxNYXg+IjpjYXNlIjxJbmMiOmNhc2UiPEluYz4iOmNhc2UiPFBhZ2UiOmNhc2UiPFBhZ2U+IjpjYXNlIjxDaGVja2VkIjpjYXNlIjxDaGVja2VkPiI6Y2FzZSI8dGV4dGJveCI6''@;'; put 'put ''Y2FzZSI8dGV4dGJveD4iOlNlPU5yK1puLmxlbmd0aDticmVhaztjYXNlIjwvQW5jaG9yPiI6dmU9cmUuc2xpY2UoU2UsTnIpLnRyaW0oKTticmVhaztjYXNlIjwvUm93PiI6bnQ9K3JlLnNsaWNlKFNlLE5yKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NvbHVtbj4iOmR0PStyZS5zbGljZShTZSxO''@;'; put 'put ''cikudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTWFjcm8+IjpDdD1yZS5zbGljZShTZSxOcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTGluaz4iOmN0PXJlLnNsaWNlKFNlLE5yKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFSYW5nZT4iOnVuPXJlLnNsaWNlKFNlLE5yKS50cmltKCk7YnJl''@;'; put 'put ''YWs7Y2FzZSI8L1NlbFR5cGU+Ijpxbj1yZS5zbGljZShTZSxOcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9WYWw+IjpGdD0rcmUuc2xpY2UoU2UsTnIpLnRyaW0oKTticmVhaztjYXNlIjwvTWluPiI6RXQ9K3JlLnNsaWNlKFNlLE5yKS50cmltKCk7YnJlYWs7Y2FzZSI8L01heD4iOlR0PStyZS5z''@;'; put 'put ''bGljZShTZSxOcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9JbmM+IjpadD0rcmUuc2xpY2UoU2UsTnIpLnRyaW0oKTticmVhaztjYXNlIjwvUGFnZT4iOnBuPStyZS5zbGljZShTZSxOcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9DaGVja2VkPiI6S249K3JlLnNsaWNlKFNlLE5yKS50cmltKCk7YnJl''@;'; put 'put ''YWs7Y2FzZSI8L3RleHRib3g+IjpidD1yZS5zbGljZShTZSxOcikudHJpbSgpO2JyZWFrO2Nhc2UiPE1vdmVXaXRoQ2VsbHMvPiI6Y2FzZSI8TW92ZVdpdGhDZWxscz4iOnpuPSEwO2JyZWFrO2Nhc2UiPFNpemVXaXRoQ2VsbHMvPiI6Y2FzZSI8U2l6ZVdpdGhDZWxscz4iOkFuPSEwfXJldHVy''@;'; put 'put ''biIifSkscGUpe2Nhc2UiTm90ZSI6dmFyIGVyPXFvLnNoZWV0X2dldF9jZWxsKFAsbnQ+PTAmJmR0Pj0wP2RpKHtyOm50LGM6ZHR9KTpMW1FdLnJlZik7ZXIuYyYmKGVyLmMuaGlkZGVuPV9lLHZlJiYoZXIuYy5yYXdhbmNob3I9dmUsWG0odmUsZXIuYykseEMoZXIuY1siIXBvcyJdLDIqISF6''@;'; put 'put ''bishIUFuLFApKSxIZS5jb2xvcjEmJihlci5jLmZpbGw9SGUpLFZlLmNvbG9yJiYoZXIuYy5zaGFkb3c9VmUpLEdlLmNvbG9yJiYoZXIuYy5zdHJva2U9R2UpKSwrK1E7YnJlYWs7Y2FzZSJCdXR0b24iOmNhc2UiR0JveCI6Y2FzZSJEcm9wIjpjYXNlIkxhYmVsIjpjYXNlIkNoZWNrYm94Ijpj''@;'; put 'put ''YXNlIlNjcm9sbCI6Y2FzZSJMaXN0IjpjYXNlIlJhZGlvIjpjYXNlIlNwaW4iOmNhc2UiRWRpdCI6UFsiIWNvbnRyb2xzIl18fChQWyIhY29udHJvbHMiXT1bXSk7dmFyIHRyPXsiIXR5cGUiOnBlfTt2ZSYmWG0odmUsdHIpLEN0JiYodHIubWFjcm89Q3QucmVwbGFjZSgiWzBdISIsIiIpKSxj''@;'; put 'put ''dCYmKHRyLmxpbms9Y3QpLCJTY3JvbGwiPT1wZXx8IlNwaW4iPT1wZT8obnVsbD09RnQmJihGdD0wKSxudWxsPT1FdCYmKEV0PTApLG51bGw9PVR0JiYoVHQ9M2U0KSxudWxsPT1adCYmKFp0PTEpLCJTY3JvbGwiPT1wZSYmbnVsbD09cG4mJihwbj0xMCkpOiJSYWRpbyI9PXBlfHwiQ2hlY2ti''@;'; put 'put ''b3giPT1wZT8obnVsbD09S24mJihLbj0wKSxGdD1Lbik6KCJMaXN0Ij09cGV8fCJEcm9wIj09cGUpJiYobnVsbCE9dW4mJih0ci5yZWY9dW4pLG51bGw9PXFuJiYocW49IlNpbmdsZSIpLCJMaXN0Ij09cGUmJih0ci5zZWw9cW4pKSxudWxsIT1GdCYmKHRyLnZhbD1GdCksbnVsbCE9RXQmJih0''@;'; put 'put ''ci5taW49RXQpLG51bGwhPVR0JiYodHIubWF4PVR0KSxudWxsIT1adCYmKHRyLnN0ZXA9WnQpLG51bGwhPXBuJiYodHIucGFnZT1wbiksYnQmJih0ci50PWJ0LnJlcGxhY2UoL1xzKjxbXHNcU10qPz5ccyovZywiIikpLFBbIiFjb250cm9scyJdLnB1c2godHIpfX0pfShQaShIZSkseSx2ZXx8''@;'; put 'put ''W10pLHlbIiFMRFAiXT1TZSx5WyIhY3RybGlkIl0mJnlbIiFjdHJsaWQiXS5mb3JFYWNoKGZ1bmN0aW9uKFZlKXtpZihWZS5yZWwmJlZlLnJlbC5UYXJnZXQpe3ZhciBHZT1zbihWZS5yZWwuVGFyZ2V0LFEpO1ZlLnBhdGg9R2UsZGVsZXRlIFZlLnJlbH19KX19KGR0LDAseSxQLDAsMCwwLEN0''@;'; put 'put ''KSxkdH1jYXRjaChjdCl7aWYoU2UuV1RGKXRocm93IGN0fX1mdW5jdGlvbiBhYyh5KXtyZXR1cm4iLyI9PXkuY2hhckF0KDApP3kuc2xpY2UoMSk6eX12YXIgbVI9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEZNKHksUCl7aWYoRjY9W10sUDYoUD1QfHx7fSksdm4oeSwiTUVUQS1JTkYvbWFuaWZl''@;'; put 'put ''c3QueG1sIil8fHZuKHksIm9iamVjdGRhdGEueG1sIikpcmV0dXJuIGZ1bmN0aW9uIEFNKHksUCl7UD1QfHx7fSx2bih5LCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSYmZnVuY3Rpb24gVmEoeSxQKXtmb3IodmFyIFEscmUsTD1Kdih5KTtRPXpyLmV4ZWMoTCk7KXN3aXRjaChRWzNdKXtjYXNl''@;'; put 'put ''Im1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09KHJlPWxuKFFbMF0sITEpKS5wYXRoJiZyZS50eXBlIT09VHUpdGhyb3cgbmV3IEVycm9yKCJUaGlzIE9wZW5Eb2N1bWVudCBpcyBub3QgYSBzcHJlYWRzaGVldCIpO2JyZWFrO2Nhc2UiZW5jcnlwdGlvbi1kYXRhIjpj''@;'; put 'put ''YXNlImFsZ29yaXRobSI6Y2FzZSJzdGFydC1rZXktZ2VuZXJhdGlvbiI6Y2FzZSJrZXktZGVyaXZhdGlvbiI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBPRFMgRW5jcnlwdGlvbiIpO2RlZmF1bHQ6aWYoUCYmUC5XVEYpdGhyb3cgUX19KEl0KHksIk1FVEEtSU5GL21hbmlmZXN0Lnht''@;'; put 'put ''bCIpLFApO3ZhciBMPUp0KHksImNvbnRlbnQueG1sIik7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIGNvbnRlbnQueG1sIGluIE9EUyAvIFVPRiBmaWxlIik7dmFyIFE9UTAoUGkoTCksUCk7cmV0dXJuIHZuKHksIm1ldGEueG1sIikmJihRLlByb3BzPU8yKEl0KHksIm1ldGEueG1s''@;'; put 'put ''IikpKSxRfSh5LFApO2lmKHZuKHksIkluZGV4L0RvY3VtZW50Lml3YSIpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTlVNQkVSUyBmaWxlIik7dmFyIHBlLF9lLEw9ZnVuY3Rpb24gcHQoeSl7Zm9yKHZhciBQPXkuRnVsbFBhdGhzfHxsdCh5LmZpbGVzKSxMPVtdLFE9MDtRPFAubGVu''@;'; put 'put ''Z3RoOysrUSkiLyIhPVBbUV0uc2xpY2UoLTEpJiZMLnB1c2goUFtRXSk7cmV0dXJuIEwuc29ydCgpfSh5KSxRPWZ1bmN0aW9uIGNtKHkpe3ZhciBQPXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6''@;'; put 'put ''W10sbGlua3M6W10sY29yZXByb3BzOltdLGV4dHByb3BzOltdLGN1c3Rwcm9wczpbXSx0aGVtZXM6W10sc3R5bGVzOltdLGNhbGNjaGFpbnM6W10sdmJhOltdLGRyYXdpbmdzOltdLHBpdm90czpbXSxwaXZvdGNhY2hlczpbXSxwaXZvdHJlY29yZHM6W10sZGF0YW1vZGVsczpbXSxjaGFydG9i''@;'; put 'put ''anM6W10sY2hhcnRzdHlsZXM6W10sY2hhcnRjb2xvcnM6W10sY2hhcnRleHM6W10sdGFibGVzOltdLGNvbm5zOltdLGN0cmxwcm9wczpbXSxjdXN0b214bWxwcm9wczpbXSxUT0RPOltdLHhtbG5zOiIifTtpZigheXx8IXkubWF0Y2gpcmV0dXJuIFA7dmFyIEw9e307aWYoKHkubWF0Y2goJHQp''@;'; put 'put ''fHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgcmU9bG4oUSk7c3dpdGNoKHJlWzBdLnJlcGxhY2UoRm4sIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOlAueG1sbnM9cmVbInhtbG5zIisocmVbMF0ubWF0Y2goLzwoXHcrKTovKXx8WyIiLCIiXSlbMV1dO2JyZWFrO2Nh''@;'; put 'put ''c2UiPERlZmF1bHQiOkxbcmUuRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCldPXJlLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92ZXJyaWRlIjp2b2lkIDAhPT1QW1JsW3JlLkNvbnRlbnRUeXBlXV0mJlBbUmxbcmUuQ29udGVudFR5cGVdXS5wdXNoKHJlLlBhcnROYW1lKX19KSxQLnhtbG5zIT09''@;'; put 'put ''aXMuQ1QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIitQLnhtbG5zKTtyZXR1cm4gUC5jYWxjY2hhaW49UC5jYWxjY2hhaW5zLmxlbmd0aD4wP1AuY2FsY2NoYWluc1swXToiIixQLnNzdD1QLnN0cnMubGVuZ3RoPjA/UC5zdHJzWzBdOiIiLFAuc3R5bGU9UC5zdHlsZXMu''@;'; put 'put ''bGVuZ3RoPjA/UC5zdHlsZXNbMF06IiIsUC5jb25uPVAuY29ubnMubGVuZ3RoPjA/UC5jb25uc1swXToiIixQLmRlZmF1bHRzPUwsZGVsZXRlIFAuY2FsY2NoYWlucyxQfShKdCh5LCJbQ29udGVudF9UeXBlc10ueG1sIikpLHJlPSExO2lmKDA9PT1RLndvcmtib29rcy5sZW5ndGgmJkl0KHks''@;'; put 'put ''X2U9InhsL3dvcmtib29rLnhtbCIsITApJiZRLndvcmtib29rcy5wdXNoKF9lKSwwPT09US53b3JrYm9va3MubGVuZ3RoKXtpZighSXQoeSxfZT0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO1Eud29ya2Jvb2tzLnB1c2go''@;'; put 'put ''X2UpLHJlPSEwfSJiaW4iPT1RLndvcmtib29rc1swXS5zbGljZSgtMykmJihyZT0hMCk7dmFyIHZlPXt9LFNlPXt9O2lmKCFQLmJvb2tTaGVldHMmJiFQLmJvb2tQcm9wcyl7aWYoZjY9W10sUS5zc3QpdHJ5e2Y2PWZ1bmN0aW9uIEw2KHksUCxMKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00''@;'; put 'put ''KT9mdW5jdGlvbiBjRCh5LFApe3ZhciBMPVtdLFE9ITE7cmV0dXJuIEhvKHksZnVuY3Rpb24ocGUsX2UsdmUpe3N3aXRjaCh2ZSl7Y2FzZSAxNTk6TC5Db3VudD1wZVswXSxMLlVuaXF1ZT1wZVsxXTticmVhaztjYXNlIDE5OkwucHVzaChwZSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2Fz''@;'; put 'put ''ZSAzNTpRPSEwO2JyZWFrO2Nhc2UgMzY6UT0hMTticmVhaztkZWZhdWx0OmlmKF9lLmluZGV4T2YoIkJlZ2luIik+MHx8X2UuaW5kZXhPZigiRW5kIiksIVF8fFAuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIit2ZSsiICIrX2UpfX0pLEx9KHksTCk6ZnVuY3Rpb24g''@;'; put 'put ''bkMoeSxQKXt2YXIgTD1bXSxRPSIiO2lmKCF5KXJldHVybiBMO3ZhciByZT15Lm1hdGNoKFF3KTtpZihyZSl7UT1yZVsyXS5yZXBsYWNlKGVDLCIiKS5zcGxpdCh0Qyk7Zm9yKHZhciBwZT0wO3BlIT1RLmxlbmd0aDsrK3BlKXt2YXIgX2U9VDkoUVtwZV0udHJpbSgpLFApO251bGwhPV9lJiYo''@;'; put 'put ''TFtMLmxlbmd0aF09X2UpfXJlPWxuKHJlWzFdKSxMLkNvdW50PXJlLmNvdW50LEwuVW5pcXVlPXJlLnVuaXF1ZUNvdW50fXJldHVybiBMfSh5LEwpfShJdCh5LGFjKFEuc3N0KSksUS5zc3QsUCl9Y2F0Y2gocnIpe2lmKFAuV1RGKXRocm93IHJyfVAuY2VsbFN0eWxlcyYmUS50aGVtZXMubGVu''@;'; put 'put ''Z3RoJiYodmU9ZnVuY3Rpb24gSTYoeSxQLEwpe3JldHVybiBHbSh5LEwpfShKdCh5LFEudGhlbWVzWzBdLnJlcGxhY2UoL15cLy8sIiIpLCEwKXx8IiIsMCxQKSksUS5zdHlsZSYmKFNlPWZ1bmN0aW9uIEd2KHksUCxMLFEpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIFY5''@;'; put 'put ''KHksUCxMKXt2YXIgUT17TnVtYmVyRm10OltdfTtmb3IodmFyIHJlIGluIHcuX3RhYmxlKVEuTnVtYmVyRm10W3JlXT13Ll90YWJsZVtyZV07US5DZWxsWGY9W10sUS5Gb250cz1bXSxRLkZpbGxzPVtdLFEuQm9yZGVycz1bXTt2YXIgcGU9W10sX2U9ITE7cmV0dXJuIEhvKHksZnVuY3Rpb24o''@;'; put 'put ''U2UsSGUsVmUpe3N3aXRjaChWZSl7Y2FzZSA0NDpRLk51bWJlckZtdFtTZVswXV09U2VbMV0sdy5sb2FkKFNlWzFdLFNlWzBdKTticmVhaztjYXNlIDQzOno0KFNlLmNvbG9yLFApLFEuRm9udHMucHVzaChTZSk7YnJlYWs7Y2FzZSAxMDI1OmNhc2UgNDg6Y2FzZSA1MDc6Y2FzZSA1NzI6Y2Fz''@;'; put 'put ''ZSA0NzU6Y2FzZSAxMTcxOmNhc2UgMjEwMjpjYXNlIDExMzA6Y2FzZSA1MTI6Y2FzZSAyMDk1OmNhc2UgMzA3MjpicmVhaztjYXNlIDQ1OlNlLmZnQ29sb3ImJno0KFNlLmZnQ29sb3IsUCksU2UuYmdDb2xvciYmejQoU2UuYmdDb2xvcixQKSxRLkZpbGxzLnB1c2goU2UpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''NDY6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJkaWFnIl0uZm9yRWFjaChmdW5jdGlvbihHZSl7U2VbR2VdJiZTZVtHZV0uY29sb3ImJno0KFNlW0dlXS5jb2xvcixQKX0pLFEuQm9yZGVycy5wdXNoKFNlKTticmVhaztjYXNlIDQ3OiJCcnRCZWdpbkNlbGxYRnMiPT1wZVtwZS5s''@;'; put 'put ''ZW5ndGgtMV0mJlEuQ2VsbFhmLnB1c2goU2UpO2JyZWFrO2Nhc2UgMzU6X2U9ITA7YnJlYWs7Y2FzZSAzNjpfZT0hMTticmVhaztjYXNlIDM3OnBlLnB1c2goSGUpLF9lPSEwO2JyZWFrO2Nhc2UgMzg6cGUucG9wKCksX2U9ITE7YnJlYWs7ZGVmYXVsdDppZigoSGV8fCIiKS5pbmRleE9mKCJC''@;'; put 'put ''ZWdpbiIpPjApcGUucHVzaChIZSk7ZWxzZSBpZigoSGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKXBlLnBvcCgpO2Vsc2UgaWYoIV9lfHxMLldURiYmIkJydEFDQmVnaW4iIT1wZVtwZS5sZW5ndGgtMV0pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1ZlKyIgIitIZSl9fSks''@;'; put 'put ''KFEuRm9udHN8fFtdKVswXSYmWjEoUS5Gb250c1swXSksUX0oeSxMLFEpOlptKHksTCxRKX0oSXQoeSxhYyhRLnN0eWxlKSksUS5zdHlsZSx2ZSxQKSl9dmFyIEhlPVEubGlua3MubWFwKGZ1bmN0aW9uKHJyKXt0cnl7dmFyIFNuPURvKEp0KHksQmkoYWMocnIpKSkscnIpO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbiBVTCh5LFAsTCxRKXtyZXR1cm4iLmJpbiI9PT1MLnNsaWNlKC00KT9mdW5jdGlvbiBHNCh5LFAsTCxRKXtpZigheSlyZXR1cm4geTt2YXIgcmU9UXx8e30scGU9ITE7SG8oeSxmdW5jdGlvbihTZSxIZSxWZSl7c3dpdGNoKFZlKXtjYXNlIDM1OTpjYXNlIDM2MzpjYXNlIDM2NDpjYXNl''@;'; put 'put ''IDM2NjpjYXNlIDM2NzpjYXNlIDM2ODpjYXNlIDM2OTpjYXNlIDM3MDpjYXNlIDM3MTpjYXNlIDQ3MjpjYXNlIDU3NzpjYXNlIDU3ODpjYXNlIDU3OTpjYXNlIDU4MDpjYXNlIDU4MTpjYXNlIDU4MjpjYXNlIDU4MzpjYXNlIDU4NDpjYXNlIDU4NTpjYXNlIDU4NjpjYXNlIDU4NzpicmVhaztj''@;'; put 'put ''YXNlIDM1OnBlPSEwO2JyZWFrO2Nhc2UgMzY6cGU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChIZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKEhlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighcGV8fHJlLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1Zl''@;'; put 'put ''LnRvU3RyaW5nKDE2KSsiICIrSGUpfX0scmUpfSh5LDAsMCxRKTpmdW5jdGlvbiBaOSh5LFAsTCxRKXt2YXIgcmU9UXx8e30scGU9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fSx2ZT0hMSxTZT17fSxIZT0tMSxWZT0tMSxHZT17czp7cjowLGM6MH0sZTp7cjotMSxjOi0xfX0sbnQ9e30sZHQ9''@;'; put 'put ''MDtyZXR1cm4oeXx8IiIpLnJlcGxhY2UoJHQsZnVuY3Rpb24oQ3QsY3Qpe3ZhciBidD1sbihDdCk7c3dpdGNoKGpuKGJ0WzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZXh0ZXJuYWxMaW5rIjpjYXNlIjwvZXh0ZXJuYWxMaW5rPiI6Y2FzZSI8L2V4dGVybmFsQm9vaz4iOmNhc2UiPHNoZWV0TmFt''@;'; put 'put ''ZXMiOmNhc2UiPHNoZWV0TmFtZXM+IjpjYXNlIjwvc2hlZXROYW1lcz4iOmNhc2UiPHNoZWV0RGF0YVNldD4iOmNhc2UiPHNoZWV0RGF0YVNldC8+IjpjYXNlIjwvc2hlZXREYXRhU2V0PiI6Y2FzZSI8L3Jvdz4iOmJyZWFrO2Nhc2UiPGV4dGVybmFsQm9vayI6Y2FzZSI8ZXh0ZXJuYWxCb29r''@;'; put 'put ''PiI6cGUuVGFyZ2V0PVBbIiFpZCJdW2J0LmlkXS5UYXJnZXQscGUuTWlzc2luZz1QWyIhaWQiXVtidC5pZF0uVHlwZT09SGkuWE1JU1M7YnJlYWs7Y2FzZSI8c2hlZXROYW1lIjpwZS5TaGVldE5hbWVzLnB1c2goeHIoUGkoYnQudmFsKSkpO2JyZWFrO2Nhc2UiPHNoZWV0RGF0YSI6U2U9e30s''@;'; put 'put ''cGUuU2hlZXRzW3BlLlNoZWV0TmFtZXNbYnQuc2hlZXRJZF1dPXlyKGJ0LnJlZnJlc2hFcnJvcnx8IjAiKT9udWxsOlNlO2JyZWFrO2Nhc2UiPC9zaGVldERhdGE+IjpHZS5lLmM+PTAmJihTZVsiIXJlZiJdPU9vKEdlKSk7YnJlYWs7Y2FzZSI8cm93IjpjYXNlIjxyb3c+IjpidC5yP0hlPXBh''@;'; put 'put ''cnNlSW50KGJ0LnIsMTApLTE6SGUrKyxWZT0tMTticmVhaztjYXNlIjxjZWxsIjpjYXNlIjxjZWxsPiI6YnQucj9WZT1zcyhidC5yKS5jOisrVmUsbnQudD1idC50fHwibiIsInN0ciI9PW50LnQmJihudC50PSJzIik7YnJlYWs7Y2FzZSI8L2NlbGw+IjpHZS5lLnI8SGUmJihHZS5lLnI9SGUp''@;'; put 'put ''LEdlLmUuYzxWZSYmKEdlLmUuYz1WZSksU2VbZGkoe3I6SGUsYzpWZX0pXT1udCxudD17fTticmVhaztjYXNlIjx2IjpjYXNlIjx2PiI6ZHQ9Q3QubGVuZ3RoK2N0O2JyZWFrO2Nhc2UiPC92PiI6dmFyIEZ0PXhyKHkuc2xpY2UoZHQsY3QpKTtudC52PSJuIj09bnQudD9wYXJzZUZsb2F0KEZ0''@;'; put 'put ''KTpGdDticmVhaztjYXNlIjx2Lz4iOm50LnY9IiI7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6dmU9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOnZlPSExO2JyZWFrO2RlZmF1bHQ6aWYoIXZlJiZyZS5XVEYpdGhyb3cidW5yZWNvZ25pemVkICIrYnRbMF0rIiBpbiBleHRlcm5h''@;'; put 'put ''bCBsaW5rIn19KSxwZX0oeSxQLDAsUSl9KEl0KHksYWMocnIpKSxTbixycixQKX1jYXRjaHt9fSksVmU9ZnVuY3Rpb24gbTUoeSxQLEwpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIFd2KHksUCl7dmFyIEw9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10s''@;'; put 'put ''U2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sUT1bXSxyZT0hMTtQfHwoUD17fSksUC5iaWZmPTEyO3ZhciBwZT1bXSxfZT1bW11dO3JldHVybiBfZS5TaGVldE5hbWVzPVtdLF9lLlhUST1bXSxtZlsxNl09e246IkJydEZSVEFyY2hJRCQiLGY6WXZ9LEhvKHksZnVuY3Rpb24oU2UsSGUs''@;'; put 'put ''VmUpe3N3aXRjaChWZSl7Y2FzZSAxNTY6X2UuU2hlZXROYW1lcy5wdXNoKFNlLm5hbWUpLEwuU2hlZXRzLnB1c2goU2UpO2JyZWFrO2Nhc2UgMTUzOkwuV0JQcm9wcz1TZTticmVhaztjYXNlIDM5Om51bGwhPVNlLlNoZWV0JiYoUC5TSUQ9U2UuU2hlZXQpLFNlLlJlZj14bChTZS5QdGcsbnVs''@;'; put 'put ''bCxudWxsLF9lLFApLGRlbGV0ZSBQLlNJRCxkZWxldGUgU2UuUHRnLHBlLnB1c2goU2UpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAxNTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNl''@;'; put 'put ''IDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNlIDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6''@;'; put 'put ''Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3Ol9lWzBdLmxlbmd0aD9fZS5wdXNoKFtWZSxTZV0pOl9lWzBdPVtWZSxTZV0sX2VbX2UubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09''@;'; put 'put ''X2UubGVuZ3RoJiYoX2VbMF09W10sX2VbMF0uWFRJPVtdKSxfZVtfZS5sZW5ndGgtMV0uWFRJPV9lW19lLmxlbmd0aC0xXS5YVEkuY29uY2F0KFNlKSxfZS5YVEk9X2UuWFRJLmNvbmNhdChTZSk7YnJlYWs7Y2FzZSAzNTpjYXNlIDM3OlEucHVzaChIZSkscmU9ITA7YnJlYWs7Y2FzZSAzNjpj''@;'; put 'put ''YXNlIDM4OlEucG9wKCkscmU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChIZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKEhlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighcmV8fFAuV1RGJiYiQnJ0QUNCZWdpbiIhPVFbUS5sZW5ndGgtMV0mJiJCcnRGUlRCZWdpbiIhPVFbUS5sZW5n''@;'; put 'put ''dGgtMV0pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitWZSsiICIrSGUpfX0sUCksenYoTCksTC5OYW1lcz1wZSxMLnN1cGJvb2tzPV9lLEx9KHksTCk6ZnVuY3Rpb24gYVkoeSxQKXtpZigheSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIg''@;'; put 'put ''TD17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLEV4dGVybjpbXSx4bWxuczoiIn0sUT0hMSxyZT0ieG1sbnMiLHBlPXt9LF9lPTA7aWYoeS5yZXBsYWNlKCR0LGZ1bmN0aW9uKFNlLEhlKXt2YXIgVmU9bG4oU2UpO3N3aXRj''@;'; put 'put ''aChqbihWZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4iOmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nLz4iOmNhc2UiPC93b3JrYm9va1ByPiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJvb2tW''@;'; put 'put ''aWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25Hcm91''@;'; put 'put ''cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzLz4iOmNhc2UiPGRlZmluZWROYW1lLz4iOmNhc2UiPC9jYWxjUHI+''@;'; put 'put ''IjpjYXNlIjxvbGVTaXplIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlld3M+IjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXciOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXc+IjpjYXNlIjxwaXZv''@;'; put 'put ''dENhY2hlcz4iOmNhc2UiPC9waXZvdENhY2hlcz4iOmNhc2UiPHBpdm90Q2FjaGVzIjpjYXNlIjxwaXZvdENhY2hlIjpjYXNlIjxzbWFydFRhZ1ByIjpjYXNlIjxzbWFydFRhZ1ByLz4iOmNhc2UiPHNtYXJ0VGFnVHlwZXMiOmNhc2UiPHNtYXJ0VGFnVHlwZXM+IjpjYXNlIjwvc21hcnRUYWdU''@;'; put 'put ''eXBlcz4iOmNhc2UiPHNtYXJ0VGFnVHlwZSI6Y2FzZSI8d2ViUHVibGlzaGluZyI6Y2FzZSI8d2ViUHVibGlzaGluZy8+IjpjYXNlIjxmaWxlUmVjb3ZlcnlQciI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIvPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0''@;'; put 'put ''cyI6Y2FzZSI8L3dlYlB1Ymxpc2hPYmplY3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdCI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmNhc2UiPEFyY2hJRCI6Y2FzZSI8cmV2aXNpb25QdHIiOmJyZWFrO2Nhc2UiPHdvcmti''@;'; put 'put ''b29rIjpTZS5tYXRjaChzWSkmJihyZT0ieG1sbnMiK1NlLm1hdGNoKC88KFx3Kyk6LylbMV0pLEwueG1sbnM9VmVbcmVdO2JyZWFrO2Nhc2UiPGZpbGVWZXJzaW9uIjpkZWxldGUgVmVbMF0sTC5BcHBWZXJzaW9uPVZlO2JyZWFrO2Nhc2UiPGZpbGVTaGFyaW5nIjpMLk1vZGlmeT17dXNlcjpW''@;'; put 'put ''ZS51c2VyTmFtZSx3YXJuOnlyKFZlLnJlYWRPbmx5UmVjb21tZW5kZWR8fCJmYWxzZSIpfSwoVmUuYWxnb3JpdGhtTmFtZXx8VmUuaGFzaFZhbHVlfHxWZS5zYWx0VmFsdWV8fFZlLnNwaW5Db3VudCkmJihMLk1vZGlmeS5lbmNyeXB0aW9uPXthbGdvOlZlLmFsZ29yaXRobU5hbWUsaGFzaDpW''@;'; put 'put ''ZS5oYXNoVmFsdWUsc2FsdDpWZS5zYWx0VmFsdWUsc3BpbjorVmUuc3BpbkNvdW50fHwxZTV9KTticmVhaztjYXNlIjx3b3JrYm9va1ByIjpjYXNlIjx3b3JrYm9va1ByLz4iOksyLmZvckVhY2goZnVuY3Rpb24obnQpe2lmKG51bGwhPVZlW250WzBdXSlzd2l0Y2gobnRbMl0pe2Nhc2UiYm9v''@;'; put 'put ''bCI6TC5XQlByb3BzW250WzBdXT15cihWZVtudFswXV0pO2JyZWFrO2Nhc2UiaW50IjpMLldCUHJvcHNbbnRbMF1dPXBhcnNlSW50KFZlW250WzBdXSwxMCk7YnJlYWs7ZGVmYXVsdDpMLldCUHJvcHNbbnRbMF1dPVZlW250WzBdXX19KSxWZS5jb2RlTmFtZSYmKEwuV0JQcm9wcy5Db2RlTmFt''@;'; put 'put ''ZT1QaShWZS5jb2RlTmFtZSkpO2JyZWFrO2Nhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6dmFyIEdlPUwuUHJvdGVjdGlvbnx8e307R2UubG9ja1N0cnVjdHVyZT15cihWZS5sb2NrU3RydWN0dXJlfHwiZmFsc2UiKSxHZS5sb2NrV2luZG93cz15cihWZS5sb2NrV2luZG93c3x8ImZhbHNlIiks''@;'; put 'put ''VmUud29ya2Jvb2tBbGdvcml0aG1OYW1lJiYoR2UuZW5jcnlwdGlvbj17YWxnbzpWZS53b3JrYm9va0FsZ29yaXRobU5hbWUsaGFzaDpWZS53b3JrYm9va0hhc2hWYWx1ZSxzYWx0OlZlLndvcmtib29rU2FsdFZhbHVlLHNwaW46K1ZlLndvcmtib29rU3BpbkNvdW50fHwxZTV9KSxMLlByb3Rl''@;'; put 'put ''Y3Rpb249R2U7YnJlYWs7Y2FzZSI8d29ya2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIFZlWzBdLEwuV0JWaWV3LnB1c2goVmUpO2JyZWFrO2Nhc2UiPHNoZWV0Ijpzd2l0Y2goVmUuc3RhdGUpe2Nhc2UiaGlkZGVuIjpWZS5IaWRkZW49MTticmVhaztjYXNlInZlcnlI''@;'; put 'put ''aWRkZW4iOlZlLkhpZGRlbj0yO2JyZWFrO2RlZmF1bHQ6VmUuSGlkZGVuPTB9ZGVsZXRlIFZlLnN0YXRlLFZlLm5hbWU9eHIoUGkoVmUubmFtZSkpLGRlbGV0ZSBWZVswXSxMLlNoZWV0cy5wdXNoKFZlKTticmVhaztjYXNlIjxleHRlcm5hbFJlZmVyZW5jZSI6TC5FeHRlcm4ucHVzaChWZS5p''@;'; put 'put ''ZCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjpRPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+IjpjYXNlIjwvZXh0PiI6Y2FzZSI8L0Fs''@;'; put 'put ''dGVybmF0ZUNvbnRlbnQ+IjpRPSExO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lIjoocGU9e30pLk5hbWU9UGkoVmUubmFtZSksVmUuY29tbWVudCYmKHBlLkNvbW1lbnQ9VmUuY29tbWVudCksVmUubG9jYWxTaGVldElkJiYocGUuU2hlZXQ9K1ZlLmxvY2FsU2hlZXRJZCkseXIoVmUuaGlkZGVu''@;'; put 'put ''fHwiMCIpJiYocGUuSGlkZGVuPSEwKSxfZT1IZStTZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lPiI6cGUuUmVmPXhyKFBpKHkuc2xpY2UoX2UsSGUpKSksTC5OYW1lcy5wdXNoKHBlKTticmVhaztjYXNlIjxjYWxjUHIiOmNhc2UiPGNhbGNQci8+IjpkZWxldGUgVmVbMF0sTC5D''@;'; put 'put ''YWxjUHI9VmU7YnJlYWs7ZGVmYXVsdDppZighUSYmUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitWZVswXSsiIGluIHdvcmtib29rIil9cmV0dXJuIFNlfSksLTE9PT1pcy5tYWluLmluZGV4T2YoTC54bWxucykpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFj''@;'; put 'put ''ZTogIitMLnhtbG5zKTtyZXR1cm4genYoTCksTH0oeSxMKX0oSXQoeSxhYyhRLndvcmtib29rc1swXSkpLFEud29ya2Jvb2tzWzBdLFApLEdlPXt9LG50PSIiO1EuY29yZXByb3BzLmxlbmd0aCYmKChudD1JdCh5LGFjKFEuY29yZXByb3BzWzBdKSwhMCkpJiYoR2U9TzIobnQpKSwwIT09US5l''@;'; put 'put ''eHRwcm9wcy5sZW5ndGgmJihudD1JdCh5LGFjKFEuZXh0cHJvcHNbMF0pLCEwKSkmJmZ1bmN0aW9uIHAzKHksUCxMKXt2YXIgUT17fTtQfHwoUD17fSkseT1QaSh5KSxSMS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgcGU9KHkubWF0Y2godWwocmVbMF0pKXx8W10pWzFdO3N3aXRjaChyZVsy''@;'; put 'put ''XSl7Y2FzZSJzdHJpbmciOnBlJiYoUFtyZVsxXV09eHIocGUpKTticmVhaztjYXNlImJvb2wiOlBbcmVbMV1dPSJ0cnVlIj09PXBlO2JyZWFrO2Nhc2UicmF3Ijp2YXIgX2U9eS5tYXRjaChuZXcgUmVnRXhwKCI8IityZVswXSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK3JlWzBdKyI+IikpO19l''@;'; put 'put ''JiZfZS5sZW5ndGg+MCYmKFFbcmVbMV1dPV9lWzFdKX19KSxRLkhlYWRpbmdQYWlycyYmUS5UaXRsZXNPZlBhcnRzJiZ1MChRLkhlYWRpbmdQYWlycyxRLlRpdGxlc09mUGFydHMsUCxMKX0obnQsR2UsUCkpO3ZhciBkdD17fTsoIVAuYm9va1NoZWV0c3x8UC5ib29rUHJvcHMpJiYwIT09US5j''@;'; put 'put ''dXN0cHJvcHMubGVuZ3RoJiYobnQ9SnQoeSxhYyhRLmN1c3Rwcm9wc1swXSksITApKSYmKGR0PWZ1bmN0aW9uIE00KHksUCl7dmFyIEw9e30sUT0iIixyZT15Lm1hdGNoKGt3KTtpZihyZSlmb3IodmFyIHBlPTA7cGUhPXJlLmxlbmd0aDsrK3BlKXt2YXIgX2U9cmVbcGVdLHZlPWxuKF9lKTtz''@;'; put 'put ''d2l0Y2godmVbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPFByb3BlcnRpZXMiOmJyZWFrO2Nhc2UiPHByb3BlcnR5IjpRPXhyKHZlLm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOlE9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT1fZS5pbmRleE9mKCI8dnQ6Iikpe3ZhciBTZT1fZS5zcGxp''@;'; put 'put ''dCgiPiIpLEhlPVNlWzBdLnNsaWNlKDQpLFZlPVNlWzFdO3N3aXRjaChIZSl7Y2FzZSJscHN0ciI6Y2FzZSJic3RyIjpjYXNlImxwd3N0ciI6Y2FzZSJjeSI6Y2FzZSJlcnJvciI6TFtRXT14cihWZSk7YnJlYWs7Y2FzZSJib29sIjpMW1FdPXlyKFZlKTticmVhaztjYXNlImkxIjpjYXNlImky''@;'; put 'put ''IjpjYXNlImk0IjpjYXNlImk4IjpjYXNlImludCI6Y2FzZSJ1aW50IjpMW1FdPXBhcnNlSW50KFZlLDEwKTticmVhaztjYXNlInI0IjpjYXNlInI4IjpjYXNlImRlY2ltYWwiOkxbUV09cGFyc2VGbG9hdChWZSk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpMW1FdPUh0KFZlKTti''@;'; put 'put ''cmVhaztkZWZhdWx0OmlmKCIvIj09SGUuc2xpY2UoLTEpKWJyZWFrO1AuV1RGJiZ0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiVW5leHBlY3RlZCIsX2UsSGUsU2UpfX1lbHNlIGlmKCI8LyIhPT1fZS5zbGljZSgwLDIpJiZQLldURil0aHJvdyBuZXcgRXJyb3IoX2UpfX1yZXR1''@;'; put 'put ''cm4gTH0obnQsUCkpO3ZhciBDdD17fTtpZigoUC5ib29rU2hlZXRzfHxQLmJvb2tQcm9wcykmJihWZS5TaGVldHM/cGU9VmUuU2hlZXRzLm1hcChmdW5jdGlvbihTbil7cmV0dXJuIFNuLm5hbWV9KTpHZS5Xb3Jrc2hlZXRzJiZHZS5TaGVldE5hbWVzLmxlbmd0aD4wJiYocGU9R2UuU2hlZXRO''@;'; put 'put ''YW1lcyksUC5ib29rUHJvcHMmJihDdC5Qcm9wcz1HZSxDdC5DdXN0cHJvcHM9ZHQpLFAuYm9va1NoZWV0cyYmdHlwZW9mIHBlPCJ1IiYmKEN0LlNoZWV0TmFtZXM9cGUpLFAuYm9va1NoZWV0cz9DdC5TaGVldE5hbWVzOlAuYm9va1Byb3BzKSlyZXR1cm4gQ3Q7cGU9e307dmFyIGN0PXt9O1Au''@;'; put 'put ''Ym9va0RlcHMmJlEuY2FsY2NoYWluJiYoY3Q9ZnVuY3Rpb24gekwoeSxQLEwpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIFRDKHksUCxMKXt2YXIgUT1bXTtyZXR1cm4gSG8oeSxmdW5jdGlvbihfZSx2ZSxTZSl7aWYoNjM9PT1TZSlRLnB1c2goX2UpO2Vsc2UgaWYoISgo''@;'; put 'put ''dmV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjB8fCh2ZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitTZSsiICIrdmUpfSksUX0oeSk6ZnVuY3Rpb24gZTYoeSl7dmFyIFA9W107aWYoIXkpcmV0dXJuIFA7dmFyIEw9MTtyZXR1cm4o''@;'; put 'put ''eS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciByZT1sbihRKTtzd2l0Y2gocmVbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nhc2UiPGMiOmRlbGV0ZSByZVswXSxyZS5pP0w9''@;'; put 'put ''cmUuaTpyZS5pPUwsUC5wdXNoKHJlKX19KSxQfSh5KX0oSXQoeSxhYyhRLmNhbGNjaGFpbikpLFEuY2FsY2NoYWluKSk7dmFyIEV0LFR0LGJ0PTAsRnQ9e30sWnQ9VmUuU2hlZXRzO0dlLldvcmtzaGVldHM9WnQubGVuZ3RoLEdlLlNoZWV0TmFtZXM9W107Zm9yKHZhciBwbj0wO3BuIT1adC5s''@;'; put 'put ''ZW5ndGg7KytwbilHZS5TaGVldE5hbWVzW3BuXT1adFtwbl0ubmFtZTt2YXIgS249cmU/ImJpbiI6InhtbCIsdW49US53b3JrYm9va3NbMF0ubGFzdEluZGV4T2YoIi8iKSxxbj0oUS53b3JrYm9va3NbMF0uc2xpY2UoMCx1bisxKSsiX3JlbHMvIitRLndvcmtib29rc1swXS5zbGljZSh1bisx''@;'; put 'put ''KSsiLnJlbHMiKS5yZXBsYWNlKC9eXC8vLCIiKTt2bih5LHFuKXx8KHFuPSJ4bC9fcmVscy93b3JrYm9vay4iK0tuKyIucmVscyIpO3ZhciB6bj1EbyhKdCh5LHFuLCEwKSxxbiksQW49em4sZXI9W107em4mJihWZSYmVmUuRXh0ZXJuJiZWZS5FeHRlcm4ubGVuZ3RoJiZWZS5FeHRlcm4uZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihycixTbil7dmFyIENpPSgiL3hsLyIrem5bIiFpZCJdW3JyXS5UYXJnZXQpLnJlcGxhY2UoL1tcL11bXC9dL2csIi8iKSxCcj1RLmxpbmtzLmluZGV4T2YoQ2kpO0JyPi0xJiYoZXJbU25dPUhlW0JyXSl9KSxWZSYmZGVsZXRlIFZlLkV4dGVybiksem4mJih6bj1mdW5j''@;'; put 'put ''dGlvbiBSTSh5LFApe2lmKCF5KXJldHVybiAwO3RyeXt5PVAubWFwKGZ1bmN0aW9uKFEpe3JldHVybiBRLmlkfHwoUS5pZD1RLnN0clJlbElEKSxbUS5uYW1lLHlbIiFpZCJdW1EuaWRdLlRhcmdldCxMTSh5WyIhaWQiXVtRLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4g''@;'; put 'put ''eSYmMCE9PXkubGVuZ3RoP3k6bnVsbH0oem4sVmUuU2hlZXRzKSk7dmFyIHRyPXZuKHksInhsL3dvcmtzaGVldHMvc2hlZXQueG1sIik/MTowLFpuPVtdLE5yPVtdO2U6Zm9yKGJ0PTA7YnQhPUdlLldvcmtzaGVldHM7KytidCl7dmFyIG9pPSJzaGVldCI7aWYoem4mJnpuW2J0XT8oRXQ9Inhs''@;'; put 'put ''LyIrem5bYnRdWzFdLnJlcGxhY2UoL1tcL10/eGxcLy8sIiIpLHZuKHksRXQpfHwoRXQ9em5bYnRdWzFdKSx2bih5LEV0KXx8KEV0PXFuLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKSt6bltidF1bMV0pLG9pPXpuW2J0XVsyXSk6RXQ9KEV0PSJ4bC93b3Jrc2hlZXRzL3NoZWV0IisoYnQrMS10''@;'; put 'put ''cikrIi4iK0tuKS5yZXBsYWNlKC9zaGVldDBcLi8sInNoZWV0LiIpLFR0PUV0LnJlcGxhY2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxzLyQzLnJlbHMiKSxabi5wdXNoKEV0KSxQJiZudWxsIT1QLnNoZWV0cylzd2l0Y2godHlwZW9mIFAuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYo''@;'; put 'put ''YnQhPVAuc2hlZXRzKWNvbnRpbnVlIGU7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKEdlLlNoZWV0TmFtZXNbYnRdLnRvTG93ZXJDYXNlKCkhPVAuc2hlZXRzLnRvTG93ZXJDYXNlKCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoUC5zaGVl''@;'; put 'put ''dHMpKXtmb3IodmFyIGtpPTAsTGk9MDtMaSE9UC5zaGVldHMubGVuZ3RoOysrTGkpIm51bWJlciI9PXR5cGVvZiBQLnNoZWV0c1tMaV0mJlAuc2hlZXRzW0xpXT09YnQmJihraT0xKSwic3RyaW5nIj09dHlwZW9mIFAuc2hlZXRzW0xpXSYmUC5zaGVldHNbTGldLnRvTG93ZXJDYXNlKCk9PUdl''@;'; put 'put ''LlNoZWV0TmFtZXNbYnRdLnRvTG93ZXJDYXNlKCkmJihraT0xKTtpZigha2kpY29udGludWUgZX19aWYoIVAuc2tpcFBhcnNlKXt2YXIgUXI9Z1IoeSxFdCxUdCxHZS5TaGVldE5hbWVzW2J0XSxidCxGdCxwZSxvaSxQLFZlLHZlLFNlKTtRciYmUXJbIiFMRFAiXSYmKE5yW2J0XT1RclsiIUxE''@;'; put 'put ''UCJdLGRlbGV0ZSBRclsiIUxEUCJdKX19aWYodHlwZW9mIHBhcnNlX3NoZWV0X3Bpdm90PCJ1Iilmb3IoYnQ9MDtidDxGNi5sZW5ndGg7KytidClwYXJzZV9zaGVldF9waXZvdC5hcHBseShudWxsLEY2W2J0XSk7aWYoQ3Q9e0RpcmVjdG9yeTpRLFdvcmtib29rOlZlLFByb3BzOkdlLEN1c3Rw''@;'; put 'put ''cm9wczpkdCxEZXBzOmN0LFNoZWV0czpwZSxTaGVldE5hbWVzOkdlLlNoZWV0TmFtZXMsU3RyaW5nczpmNixTdHlsZXM6U2UsVGhlbWVzOnZlLFNTRjp3LmdldF90YWJsZSgpfSwhUC5za2lwUGFyc2Upe2lmKGZ1bmN0aW9uIGtDKHkpeyF5fHwheS5Xb3JrYm9va3x8IXkuV29ya2Jvb2suTmFt''@;'; put 'put ''ZXN8fHkuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihQKXtpZihQLk5hbWUmJiJfeGxubS4iPT1QLk5hbWUuc2xpY2UoMCw2KSYmKCJfeGxubS5QcmludF9BcmVhIj09UC5OYW1lfHwiX3hsbm0uUHJpbnRfVGl0bGVzIj09UC5OYW1lKSl7dmFyIEw9eS5TaGVldHNbeS5TaGVldE5h''@;'; put 'put ''bWVzW1AuU2hlZXRdXTtpZihMKXtMWyIhcHJpbnQiXXx8KExbIiFwcmludCJdPXt9KSxMWyIhcHJpbnQiXS5wcm9wc3x8KExbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgUT1MWyIhcHJpbnQiXSxyZT1QLlJlZjtpZigiX3hsbm0uUHJpbnRfQXJlYSI9PVAuTmFtZSl7cmUuaW5kZXhPZigiISIp''@;'; put 'put ''Pi0xJiYocmU9cmUuc2xpY2UocmUuaW5kZXhPZigiISIpKzEpKTt2YXIgcGU9T2kocmU9cmUucmVwbGFjZSgvWyRdL2csIiIpKTtRLmFyZWE9cGV9ZWxzZSJfeGxubS5QcmludF9UaXRsZXMiPT1QLk5hbWUmJihRLnRpdGxlcz17czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxyZS5zcGxp''@;'; put 'put ''dCgiLCIpLmZvckVhY2goZnVuY3Rpb24oX2Upe3ZhciBTZT1XcyhfZS5zbGljZShfZS5pbmRleE9mKCIhIikrMSkucmVwbGFjZSgvWyRdL2csIiIpKTtTZS5zLmM+LTEmJihRLnRpdGxlcy5zLmM9U2Uucy5jKSxTZS5lLmM+LTEmJihRLnRpdGxlcy5lLmM9U2UuZS5jKSxTZS5zLnI+LTEmJihR''@;'; put 'put ''LnRpdGxlcy5zLnI9U2Uucy5yKSxTZS5lLnI+LTEmJihRLnRpdGxlcy5lLnI9U2UuZS5yKX0pKX19fSl9KEN0KSxQJiZQLmJvb2tGaWxlcyYmKEN0LmtleXM9TCxDdC5maWxlcz15LmZpbGVzKSxQJiZQLmJvb2tWQkEmJihRLnZiYS5sZW5ndGg+MD9DdC52YmFyYXc9SXQoeSxhYyhRLnZiYVsw''@;'; put 'put ''XSksITApOlEuZGVmYXVsdHMmJlEuZGVmYXVsdHMuYmluPT09JDImJihDdC52YmFyYXc9SXQoeSwieGwvdmJhUHJvamVjdC5iaW4iLCEwKSkpLEFuJiZBblsiIWlkIl0pe2Zvcih2YXIgdXI9W10sVG49MTtUbjw9MTAyNDsrK1RuKUFuWyIhaWQiXVsicklkIitUbl0mJkFuWyIhaWQiXVsicklk''@;'; put 'put ''IitUbl0uVHlwZSYmL2N1c3RvbVhtbCQvLnRlc3QoQW5bIiFpZCJdWyJySWQiK1RuXS5UeXBlKSYmdXIucHVzaChzbihBblsiIWlkIl1bInJJZCIrVG5dLlRhcmdldCxRLndvcmtib29rc1swXSkpO3VyLmxlbmd0aD4wJiYoQ3QuQ3VzdG9tWE1MPVtdLHVyLmZvckVhY2goZnVuY3Rpb24ocnIp''@;'; put 'put ''e3ZhciBTbj17ZGF0YTpKdCh5LGFjKHJyKSl9LHByPUJpKHJyKTt0cnl7dmFyIENpPURvKEp0KHksYWMocHIpLCEwKSxwcik7aWYoQ2kpZm9yKHZhciBCcj0xO0JyPD0xMDI0OysrQnIpQ2lbIiFpZCJdWyJySWQiK0JyXSYmQ2lbIiFpZCJdWyJySWQiK0JyXS5UeXBlJiYvY3VzdG9tWG1sUHJv''@;'; put 'put ''cHMkLy50ZXN0KENpWyIhaWQiXVsicklkIitCcl0uVHlwZSkmJihTbi5wcm9wcz1KdCh5LGFjKHNuKENpWyIhaWQiXVsicklkIitCcl0uVGFyZ2V0LHJyKSkpKX1jYXRjaHt9Q3QuQ3VzdG9tWE1MLnB1c2goU24pfSkpfXZhciB2cj1EdCh5LCJ4bC9tb2RlbC9pdGVtLmRhdGEiLCEwKTt2ciYm''@;'; put 'put ''KEN0Lm1vZGVsPXZyKSxRLmNvbm4mJihDdC5jb25uPUl0KHksYWMoUS5jb25uKSwhMCkpLGVyLmxlbmd0aCYmKEN0LkV4dGVybmFsV0I9ZXIpLFZlJiYoVmUuUFBJPW5mKX1yZXR1cm4gUC50ZW1wbGF0ZSYmKEN0Ll93c3BhdGhzPVpuLEN0Ll9zdHlwYXRoPWFjKFEuc3R5bGV8fCIiKSxDdC5f''@;'; put 'put ''d2JwYXRoPWFjKFEud29ya2Jvb2tzWzBdfHwieGwvd29ya2Jvb2sueG1sIiksQ3QuX3ZtbHBhdGhzPU5yLEN0Ll93YnJlbHNwYXRoPXFuLEN0Ll9jdD1KdCh5LCJbQ29udGVudF9UeXBlc10ueG1sIiksQ3QuZmlsZXM9eS5maWxlcyxtUihDdCx5LFApKSxDdH1mdW5jdGlvbiB2Uih5LFApe3Zh''@;'; put 'put ''ciBMPVB8fHt9O0wucGFzc3dvcmR8fChMLnBhc3N3b3JkPSJWZWx2ZXRTd2VhdHNob3AiKTt2YXIgUT0iV29ya2Jvb2siLHJlPUJlLmZpbmQoeSxRKTt0cnl7aWYoIShyZT1CZS5maW5kKHksUT0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''RUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpO2lmKGZ1bmN0aW9uIGREKHkpe3ZhciBQPXt9O1AuaWQ9eS5yZWFkX3NoaWZ0KDAsImxwcDQiKSxQLlI9RzAoeSw0KSxQLlU9RzAoeSw0KSxQLlc9RzAoeSw0KX0ocmUuY29udGVudCksIShyZT1CZS5maW5kKHksUT0iLyFEYXRh''@;'; put 'put ''U3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IXJlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrUSk7dmFyIHBlPWZ1bmN0aW9uIFA0KHkpe3ZhciBQPVtdO3kubCs9NDtmb3IodmFyIEw9eS5yZWFkX3NoaWZ0KDQpO0wtLSA+MDspUC5w''@;'; put 'put ''dXNoKG9DKHkpKTtyZXR1cm4gUH0ocmUuY29udGVudCk7aWYoMSE9PXBlLmxlbmd0aHx8MSE9PXBlWzBdLmNvbXBzLmxlbmd0aHx8MCE9PXBlWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PXBlWzBdLm5hbWV8fCJFbmNyeXB0ZWRQYWNrYWdlIiE9PXBlWzBd''@;'; put 'put ''LmNvbXBzWzBdLnYpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitRKTtpZighKHJlPUJlLmZpbmQoeSxRPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhcmUuY29udGVudCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitRKTt2YXIgX2U9ZnVuY3Rpb24gRTMoeSl7dmFyIFA9W107eS5sKz00O2Zvcih2YXIgTD15LnJlYWRfc2hpZnQoNCk7TC0tID4wOylQLnB1c2goeS5yZWFkX3NoaWZ0KDAsImxwcDQiKSk7cmV0dXJuIFB9KHJlLmNvbnRlbnQp''@;'; put 'put ''O2lmKDEhPV9lLmxlbmd0aHx8IlN0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0iIT1fZVswXSl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIGJhZCAiK1EpO2lmKCEocmU9QmUuZmluZCh5LFE9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRp''@;'; put 'put ''b25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpOyFmdW5jdGlvbiBBMyh5KXt2YXIgUD1mdW5jdGlvbiBrMyh5KXt2YXIgUD17fTtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLHkubCs9''@;'; put 'put ''NCxQLmlkPXkucmVhZF9zaGlmdCgwLCJscHA0IiksUC5uYW1lPXkucmVhZF9zaGlmdCgwLCJscHA0IiksUC5SPUcwKHksNCksUC5VPUcwKHksNCksUC5XPUcwKHksNCksUH0oeSk7aWYoUC5lbmFtZT15LnJlYWRfc2hpZnQoMCwiOGxwcDQiKSxQLmJsa3N6PXkucmVhZF9zaGlmdCg0KSxQLmNt''@;'; put 'put ''b2RlPXkucmVhZF9zaGlmdCg0KSw0IT15LnJlYWRfc2hpZnQoNCkpdGhyb3cgbmV3IEVycm9yKCJCYWQgIVByaW1hcnkgcmVjb3JkIik7cmV0dXJuIFB9KHJlLmNvbnRlbnQpfWNhdGNoe31pZighKHJlPUJlLmZpbmQoeSxRPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFyZS5jb250ZW50KXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpO3ZhciB2ZT1mdW5jdGlvbiBUMyh5KXt2YXIgUD1HMCh5KTtzd2l0Y2goUC5NaW5vcil7Y2FzZSAyOnJldHVybltQLk1pbm9yLGdaKHkpXTtjYXNlIDM6cmV0dXJuW1AuTWlub3IsaEQoKV07Y2FzZSA0OnJl''@;'; put 'put ''dHVybltQLk1pbm9yLG1aKHkpXX10aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXplZCBWZXJzaW9uOiAiK1AuTWlub3IpfShyZS5jb250ZW50KTtpZighKHJlPUJlLmZpbmQoeSxRPSIvRW5jcnlwdGVkUGFja2FnZSIpKXx8IXJlLmNvbnRlbnQpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrUSk7aWYoND09dmVbMF0pcmV0dXJuIGZ1bmN0aW9uIE5lKHksUCxMLFEpe3ZhciByZT1CZS51dGlscy5wcmVwX2Jsb2I7aWYoImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5''@;'; put 'put ''RW5jcnlwdG9yL3Bhc3N3b3JkIiE9eS51cmkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFQ01BLTM3NiBBZ2lsZSBVUkkgIit5LnVyaSk7dmFyIHBlPXkuZW5jc1swXSxfZT1wZS5oYXNoQWxnb3JpdGhtLHZlPSJhZXMtMjU2LWNiYyIsU2U9QnVmZmVyLmZyb20ocGUuc2FsdFZhbHVl''@;'; put 'put ''LCJiYXNlNjQiKSxIZT1CdWZmZXIuZnJvbSh5LnNhbHRWYWx1ZSwiYmFzZTY0IiksVmU9K3BlLmJsb2NrU2l6ZSxHZT0rcGUua2V5Qml0cz4+MyxudD1lbChCdWZmZXIuY29uY2F0KFtTZSxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEwpKV0pLF9lKSxkdD1CdWZmZXIu''@;'; put 'put ''YWxsb2MoNCk7cmUoZHQsMCk7Zm9yKHZhciBDdD0wO0N0PHBlLnNwaW5Db3VudDsrK0N0KWR0Lmw9MCxkdC53cml0ZV9zaGlmdCg0LEN0KSxudD1lbChCdWZmZXIuY29uY2F0KFtkdCxudF0pLF9lKTt2YXIgY3Q9ZnVuY3Rpb24odHIsWm4sTnIsb2kpe3ZhciBraT1lbChCdWZmZXIuY29uY2F0''@;'; put 'put ''KFt0cixCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKV0pLG9pKSxMaT1raS5sZW5ndGg+PU5yP2tpLnNsaWNlKDAsTnIpOkJ1ZmZlci5hbGxvYyhOcik7aWYoa2kubGVuZ3RoPE5yKXtmb3IodmFyIFFyPTA7UXI8a2kubGVuZ3RoOysrUXIpTGlbUXJdPWtpW1Fy''@;'; put 'put ''XTtmb3IoO1FyPE5yOysrUXIpTGlbUXJdPTU0fXJldHVybiBMaX0obnQsMCxHZSxfZSk7c3dpdGNoKHBlLmNpcGhlckFsZ29yaXRobSl7Y2FzZSJBRVMiOmlmKCJDaGFpbmluZ01vZGVDQkMiIT1wZS5jaXBoZXJDaGFpbmluZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBj''@;'; put 'put ''aGFpbmluZyAiK3BlLmNpcGhlckNoYWluaW5nKTt2ZT0iYWVzLSIrcGUua2V5Qml0cysiLWNiYyI7YnJlYWs7Y2FzZSJSQzIiOnZlPSJyYzIiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgYWxnbyAiK3BlLmNpcGhlckFsZ29yaXRobSl9U2U9ZnVu''@;'; put 'put ''Y3Rpb24oZXIpe2Zvcih2YXIgdHI9QnVmZmVyLmFsbG9jKFZlKSxabj0wO1puPFZlOysrWm4pdHJbWm5dPVpuPGVyLmxlbmd0aD9lcltabl06NTQ7cmV0dXJuIHRyfShTZSk7dmFyIGJ0PUJ1ZmZlci5mcm9tKHBlLmVuY3J5cHRlZEtleVZhbHVlLCJiYXNlNjQiKSxGdD1KMShjdCxTZSx2ZSku''@;'; put 'put ''dXBkYXRlKGJ0KSxFdD1KMShlbChCdWZmZXIuY29uY2F0KFtudCxCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIsNzhdKV0pLF9lKS5zbGljZSgwLEdlKSxTZSx2ZSkudXBkYXRlKEJ1ZmZlci5mcm9tKHBlLmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlLCJiYXNlNjQiKSks''@;'; put 'put ''VHQ9ZWwoSjEoZWwoQnVmZmVyLmNvbmNhdChbbnQsQnVmZmVyLmZyb20oWzI1NCwxNjcsMjEwLDExOCw1OSw3NSwxNTgsMTIxXSldKSxfZSkuc2xpY2UoMCxHZSksU2UsdmUpLnVwZGF0ZShCdWZmZXIuZnJvbShwZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dCwiYmFzZTY0IikpLF9lKSxa''@;'; put 'put ''dD0rcGUuaGFzaFNpemV8fE1hdGgubWluKEV0Lmxlbmd0aCxUdC5sZW5ndGgpO2lmKDAhPUV0LnNsaWNlKDAsWnQpLmNvbXBhcmUoVHQuc2xpY2UoMCxadCkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7cmUoUCwwKTt2YXIgcG49UC5yZWFkX3NoaWZ0KDQpO1AubCs9''@;'; put 'put ''NDt2YXIgS249W10sdW49QnVmZmVyLmNvbmNhdChbSGUsQnVmZmVyLmFsbG9jKDQpXSk7Zm9yKHJlKHVuKSxDdD0wO1AubDxQLmxlbmd0aDspdW4ubD1TZS5sZW5ndGgsdW4ud3JpdGVfc2hpZnQoNCxDdCksS24ucHVzaChKMShGdCxlbChCdWZmZXIuZnJvbSh1biksX2UpLnNsaWNlKDAsMTYp''@;'; put 'put ''LHZlKS51cGRhdGUoQnVmZmVyLmZyb20oUC5zbGljZShQLmwsUC5sKzQwOTYpKSkpLFAubCs9NDA5NiwrK0N0O3ZhciB6bj1CdWZmZXIuY29uY2F0KEtuKS5zbGljZSgwLHBuKSxBbj1vbihRKTtyZXR1cm4gQW4udHlwZT0iYnVmZmVyIixfZih6bixBbil9KHZlWzFdLHJlLmNvbnRlbnQsTC5w''@;'; put 'put ''YXNzd29yZHx8IiIsTCk7aWYoMj09dmVbMF0pcmV0dXJuIGZ1bmN0aW9uIHVfKHksUCxMLFEpe3ZhciByZT1CZS51dGlscy5wcmVwX2Jsb2I7aWYoIlN0ZCIhPT15LnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO3ZhciBwZT15LnYuU2FsdCxf''@;'; put 'put ''ZT15LnYuVmVyaWZpZXIsdmU9eS52LlZlcmlmaWVySGFzaDtpZigzNiE9eS5oLkZsYWdzKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgU3RhbmRhcmQgRW5jcnlwdGlvbiBiYWQgRmxhZ3MiKTt2YXIgU2U9MCxIZT0iIjtzd2l0Y2goeS5oLkFsZ0lEKXtjYXNlIDI2MTI2OlNlPTEyOCxIZT0i''@;'; put 'put ''YWVzLTEyOC1lY2IiO2JyZWFrO2Nhc2UgMjYxMjc6U2U9MTk2LEhlPSJhZXMtMTkyLWVjYiI7YnJlYWs7Y2FzZSAyNjEyODpTZT0yNTYsSGU9ImFlcy0yNTYtZWNiIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKX1pZigz''@;'; put 'put ''Mjc3MiE9eS5oLkFsZ0lESGFzaCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7aWYoeS5oLktleVNpemUhPVNlKXRocm93IG5ldyBFcnJvcigiQWxnSUQvS2V5U2l6ZSBtaXNtYXRjaCIpO2lmKDI0IT15LmguUHJvdmlkZXJUeXBlKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiRUNNQS0zNzYgdW5zdXBwb3J0ZWQgUHJvdmlkZXJUeXBlICIreS5oLlByb3ZpZGVyVHlwZSk7aWYoIk1pY3Jvc29mdCBFbmhhbmNlZCBSU0EgYW5kIEFFUyBDcnlwdG9ncmFwaGljIFByb3ZpZGVyIiE9PXkuaC5DU1BOYW1lLnNsaWNlKDAsNTMpKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VW5zdXBwb3J0ZWQgQ3J5cHRvIFByb3ZpZGVyICIreS5oLkNTUE5hbWUpO3ZhciBHZT0iU0hBLTEiLG50PVNlPj4zLGR0PWVsKEJ1ZmZlci5jb25jYXQoW3BlLGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsTCldKSxHZSksQ3Q9QnVmZmVyLmFsbG9jKDQpO3JlKEN0LDApO2Zvcih2YXIgY3Q9''@;'; put 'put ''MDtjdDw1ZTQ7KytjdClDdC5sPTAsQ3Qud3JpdGVfc2hpZnQoNCxjdCksZHQ9ZWwoQnVmZmVyLmNvbmNhdChbQ3QsZHRdKSxHZSk7Q3QubD0wLEN0LndyaXRlX3NoaWZ0KDQsMCk7dmFyIEtuLHVuLHFuLHpuLEFuLEZ0PSh6bj0ocW49ZnVuY3Rpb24odHIsWm4sTnIpe2Zvcih2YXIgb2k9QnVm''@;'; put 'put ''ZmVyLmFsbG9jKDY0KSxraT0wO2tpPG9pLmxlbmd0aDsrK2tpKW9pW2tpXT10cjtmb3Ioa2k9MDtraTxabi5sZW5ndGg7KytraSlvaVtraV1ePVpuW2tpXTtyZXR1cm4gZWwob2ksTnIpfSkoNTQsS249ZWwoQnVmZmVyLmNvbmNhdChbZHQsQ3RdKSxHZSksdW49R2UpLEFuPXFuKDkyLEtuLHVu''@;'; put 'put ''KSxCdWZmZXIuY29uY2F0KFt6bixBbl0pLnNsaWNlKDAsbnQpKTtpZihKMShGdCxCdWZmZXIuYWxsb2MoMCksSGUpLnVwZGF0ZSh2ZSkuc2xpY2UoMCwyMCkuY29tcGFyZShlbChKMShGdCxCdWZmZXIuYWxsb2MoMCksSGUpLnVwZGF0ZShfZSksR2UpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29y''@;'; put 'put ''cmVjdCBQYXNzd29yZCIpO3JlKFAsMCk7dmFyIEV0PVAucmVhZF9zaGlmdCg0KTtQLmwrPTQ7dmFyIFR0PVtdO2ZvcihjdD0wO1AubDxQLmxlbmd0aDspVHQucHVzaChKMShGdCxCdWZmZXIuYWxsb2MoMCksSGUpLnVwZGF0ZShQLnNsaWNlKFAubCxQLmwrNDA5NikpKSxQLmwrPTQwOTYsKytj''@;'; put 'put ''dDtyZXR1cm4gX2YoQnVmZmVyLmNvbmNhdChUdCkuc2xpY2UoMCxFdCksUSl9KHZlWzFdLHJlLmNvbnRlbnQsTC5wYXNzd29yZHx8IiIsTCk7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpfXZhciBfUj1mdW5jdGlvbigpe307ZnVuY3Rpb24gYlIoeSxQKXtp''@;'; put 'put ''ZihQLnRlbXBsYXRlKXJldHVybiBfUih5LFApO2lmKCJvZHMiPT1QLmJvb2tUeXBlKXJldHVybiBfMCh5LFApO0ZtKFAmJlAuUFBJfHw5NikseSYmIXkuU1NGJiYoeS5TU0Y9dy5nZXRfdGFibGUoKSkseSYmeS5TU0YmJihKKHcpLHcubG9hZF90YWJsZSh5LlNTRiksUC5yZXZzc2Y9QWUoeS5T''@;'; put 'put ''U0YpLFAucmV2c3NmW3kuU1NGWzY1NTM1XV09MCxQLnNzZj15LlNTRikseS5TdHlsZXM9e0ZvbnRzOlAuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6UC5GaWxscz1be3BhdHRl''@;'; put 'put ''cm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6UC5Cb3JkZXJzPVt7fV0sRFhGOlAuRFhGPXkuU3R5bGVzJiZ5LlN0eWxlcy5EWEZ8fFtdLFRhYmxlOlAuVGFibGU9eS5TdHlsZXMmJnkuU3R5bGVzLlRhYmxlfHxbXX0sUC5vdmVycmlkZU1EVz9wbD1QLm92''@;'; put 'put ''ZXJyaWRlTURXOloxKFAuRm9udHNbMF0pLFAucmVscz17fSxQLndicmVscz17fSxQLlN0cmluZ3M9W10sUC5TdHJpbmdzLkNvdW50PTAsUC5TdHJpbmdzLlVuaXF1ZT0wLEswP1AucmV2U3RyaW5ncz1uZXcgTWFwOihQLnJldlN0cmluZ3M9e30sUC5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUg''@;'; put 'put ''UC5yZXZTdHJpbmdzLmZvbyk7dmFyIEw9Inhsc2IiPT1QLmJvb2tUeXBlPyJiaW4iOiJ4bWwiLFE9UlouaW5kZXhPZihQLmJvb2tUeXBlKT4tMSxyZT17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1lbnRz''@;'; put 'put ''OltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hhcnRv''@;'; put 'put ''YmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07ZF8oUD1QfHx7fSk7dmFyIHBlPXluKCksX2U9IiIsdmU9MDtpZihQLmNlbGxYZnM9''@;'; put 'put ''W10sUC5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sZ3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSx5LlByb3BzfHwoeS5Qcm9wcz17fSksWXQocGUsX2U9ImRvY1Byb3BzL2NvcmUueG1sIixmdW5jdGlvbiAkaCh5LFApe3ZhciBMPVB8''@;'; put 'put ''fHt9LFE9W0JuLFAyXSxyZT17fTtpZigheSYmIUwuUHJvcHMpcmV0dXJuIFEuam9pbigiIik7eSYmKG51bGwhPXkuQ3JlYXRlZERhdGUmJmh1KCJkY3Rlcm1zOmNyZWF0ZWQiLCJzdHJpbmciPT10eXBlb2YgeS5DcmVhdGVkRGF0ZT95LkNyZWF0ZWREYXRlOlBoKHkuQ3JlYXRlZERhdGUsTC5X''@;'; put 'put ''VEYpLHsieHNpOnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LFEscmUpLG51bGwhPXkuTW9kaWZpZWREYXRlJiZodSgiZGN0ZXJtczptb2RpZmllZCIsInN0cmluZyI9PXR5cGVvZiB5Lk1vZGlmaWVkRGF0ZT95Lk1vZGlmaWVkRGF0ZTpQaCh5Lk1vZGlmaWVkRGF0ZSxMLldURikseyJ4c2k6dHlw''@;'; put 'put ''ZSI6ImRjdGVybXM6VzNDRFRGIn0sUSxyZSkpO2Zvcih2YXIgcGU9MDtwZSE9T2wubGVuZ3RoOysrcGUpe3ZhciBfZT1PbFtwZV0sdmU9TC5Qcm9wcyYmbnVsbCE9TC5Qcm9wc1tfZVsxXV0/TC5Qcm9wc1tfZVsxXV06eT95W19lWzFdXTpudWxsOyEwPT09dmU/dmU9IjEiOiExPT09dmU/dmU9''@;'; put 'put ''IjAiOiJudW1iZXIiPT10eXBlb2YgdmUmJih2ZT1TdHJpbmcodmUpKSxudWxsIT12ZSYmaHUoX2VbMF0sdmUsbnVsbCxRLHJlKX1yZXR1cm4gUS5sZW5ndGg+MiYmKFFbUS5sZW5ndGhdPSI8L2NwOmNvcmVQcm9wZXJ0aWVzPiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4o''@;'; put 'put ''IiIpfSh5LlByb3BzLFApKSxyZS5jb3JlcHJvcHMucHVzaChfZSksem8oUC5yZWxzLDIsX2UsSGkuQ09SRV9QUk9QUyksX2U9ImRvY1Byb3BzL2FwcC54bWwiLCF5LlByb3BzfHwheS5Qcm9wcy5TaGVldE5hbWVzKWlmKHkuV29ya2Jvb2smJnkuV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIFNl''@;'; put 'put ''PVtdLEhlPTA7SGU8eS5TaGVldE5hbWVzLmxlbmd0aDsrK0hlKTIhPSh5Lldvcmtib29rLlNoZWV0c1tIZV18fHt9KS5IaWRkZW4mJlNlLnB1c2goeS5TaGVldE5hbWVzW0hlXSk7eS5Qcm9wcy5TaGVldE5hbWVzPVNlfWVsc2UgeS5Qcm9wcy5TaGVldE5hbWVzPXkuU2hlZXROYW1lczt5LlBy''@;'; put 'put ''b3BzLldvcmtzaGVldHM9eS5Qcm9wcy5TaGVldE5hbWVzLmxlbmd0aCxZdChwZSxfZSxmdW5jdGlvbiBwcyh5KXt2YXIgUD1bXSxMPVNyO3JldHVybiB5fHwoeT17fSkseS5BcHBsaWNhdGlvbj0iU2hlZXRKUyIsUFtQLmxlbmd0aF09Qm4sUFtQLmxlbmd0aF09ZzMsUjEuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihRKXtpZih2b2lkIDAhPT15W1FbMV1dKXt2YXIgcmU7c3dpdGNoKFFbMl0pe2Nhc2Uic3RyaW5nIjpyZT1GcihTdHJpbmcoeVtRWzFdXSkpO2JyZWFrO2Nhc2UiYm9vbCI6cmU9eVtRWzFdXT8idHJ1ZSI6ImZhbHNlIn12b2lkIDAhPT1yZSYmKFBbUC5sZW5ndGhdPUwoUVswXSxyZSkp''@;'; put 'put ''fX0pLFBbUC5sZW5ndGhdPUwoIkhlYWRpbmdQYWlycyIsTCgidnQ6dmVjdG9yIixMKCJ2dDp2YXJpYW50IiwiPHZ0Omxwc3RyPldvcmtzaGVldHM8L3Z0Omxwc3RyPiIpK0woInZ0OnZhcmlhbnQiLEwoInZ0Omk0IixTdHJpbmcoeS5Xb3Jrc2hlZXRzKSkpLHtzaXplOjIsYmFzZVR5cGU6InZh''@;'; put 'put ''cmlhbnQifSkpLFBbUC5sZW5ndGhdPUwoIlRpdGxlc09mUGFydHMiLEwoInZ0OnZlY3RvciIseS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihRKXtyZXR1cm4iPHZ0Omxwc3RyPiIrRnIoUSkrIjwvdnQ6bHBzdHI+In0pLmpvaW4oIiIpLHtzaXplOnkuV29ya3NoZWV0cyxiYXNlVHlwZToibHBz''@;'; put 'put ''dHIifSkpLFAubGVuZ3RoPjImJihQW1AubGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfSh5LlByb3BzKSkscmUuZXh0cHJvcHMucHVzaChfZSksem8oUC5yZWxzLDMsX2UsSGkuRVhUX1BST1BTKSx5LkN1c3Rwcm9wcyE9PXku''@;'; put 'put ''UHJvcHMmJmx0KHkuQ3VzdHByb3BzfHx7fSkubGVuZ3RoPjAmJihZdChwZSxfZT0iZG9jUHJvcHMvY3VzdG9tLnhtbCIsZnVuY3Rpb24gZDAoeSl7dmFyIFA9W0JuLHVtXTtpZigheSlyZXR1cm4gUC5qb2luKCIiKTt2YXIgTD0xO3JldHVybiBsdCh5KS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXsr''@;'; put 'put ''K0wsUFtQLmxlbmd0aF09U3IoInByb3BlcnR5IixmdW5jdGlvbiBlYSh5LFApe3N3aXRjaCh0eXBlb2YgeSl7Y2FzZSJzdHJpbmciOnZhciBMPVNyKCJ2dDpscHdzdHIiLEZyKHkpKTtyZXR1cm4gUCYmKEw9TC5yZXBsYWNlKC8mcXVvdDsvZywiX3gwMDIyXyIpKSxMO2Nhc2UibnVtYmVyIjpy''@;'; put 'put ''ZXR1cm4gU3IoKDB8eSk9PXk/InZ0Omk0IjoidnQ6cjgiLEZyKFN0cmluZyh5KSkpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIFNyKCJ2dDpib29sIix5PyJ0cnVlIjoiZmFsc2UiKX1pZih5IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gU3IoInZ0OmZpbGV0aW1lIixQaCh5KSk7dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbmFibGUgdG8gc2VyaWFsaXplICIreSl9KHlbcmVdLCEwKSx7Zm10aWQ6IntENUNERDUwNS0yRTlDLTEwMUItOTM5Ny0wODAwMkIyQ0Y5QUV9IixwaWQ6TCxuYW1lOkZyKHJlKX0pfSksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixQWzFdPVBbMV0ucmVw''@;'; put 'put ''bGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9KHkuQ3VzdHByb3BzKSkscmUuY3VzdHByb3BzLnB1c2goX2UpLHpvKFAucmVscyw0LF9lLEhpLkNVU1RfUFJPUFMpKTt2YXIgVmU9W10sR2U9W107ZnVuY3Rpb24gbnQocG4sS24pe0dlLnB1c2goW3ZlLTEsS24scG5dKX1mdW5jdGlvbiBkdChw''@;'; put 'put ''bil7VmUucHVzaChbdmUtMSxwbl0pLHpvKEN0LC0xLCIuLi9waXZvdFRhYmxlcy9waXZvdFRhYmxlIitWZS5sZW5ndGgrIi4iK0wsSGkuUElWT1QpfWZvcih2ZT0xO3ZlPD15LlNoZWV0TmFtZXMubGVuZ3RoOysrdmUpe3ZhciBDdD17IiFpZCI6e319LGN0PXkuU2hlZXRzW3kuU2hlZXROYW1l''@;'; put 'put ''c1t2ZS0xXV0sYnQ9KGN0fHx7fSlbIiF0eXBlIl18fCJzaGVldCI7c3dpdGNoKGJ0KXtjYXNlImNoYXJ0IjppZih0eXBlb2Ygd3JpdGVfZHJhd2luZ188InUiKXtZdChwZSxfZT0ieGwvY2hhcnRzaGVldHMvc2hlZXQiK3ZlKyIuIitMLGFNKHZlLTEsX2UsUCx5LEN0KSkscmUuY2hhcnRzLnB1''@;'; put 'put ''c2goX2UpLHpvKFAud2JyZWxzLC0xLCJjaGFydHNoZWV0cy9zaGVldCIrdmUrIi4iK0wsSGkuQ1MpO2JyZWFrfWRlZmF1bHQ6WXQocGUsX2U9InhsL3dvcmtzaGVldHMvc2hlZXQiK3ZlKyIuIitMLFpMKHZlLTEsX2UsUCx5LEN0KSkscmUuc2hlZXRzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0x''@;'; put 'put ''LCJ3b3Jrc2hlZXRzL3NoZWV0Iit2ZSsiLiIrTCxIaS5XU1swXSl9aWYoY3QpeyJjaGFydCI9PWJ0JiYhY3RbIiFwb3MiXSYmKGN0WyIhcG9zIl09e3g6MCx5OjAsdzo5MDAsaDo2MDB9KTt2YXIgRnQ9Y3RbIiFjb21tZW50cyJdLEV0PSExO2lmKEZ0JiZGdC5sZW5ndGg+MCl7dmFyIFR0PSJ4''@;'; put 'put ''bC9jb21tZW50cyIrdmUrIi4iK0w7WXQocGUsVHQsUWUoRnQsVHQsUCkpLHJlLmNvbW1lbnRzLnB1c2goVHQpLHpvKEN0LC0xLCIuLi9jb21tZW50cyIrdmUrIi4iK0wsSGkuQ01OVCksRXQ9ITB9KGN0WyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wJiYoRXQ9ITApLGN0WyIhbGVnYWN5Il0m''@;'; put 'put ''JkV0JiZZdChwZSwieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIrdmUrIi52bWwiLHFEKHZlLGN0WyIhY29tbWVudHMiXSxjdFsiIWNvbnRyb2xzIl0sY3QpKSxjdFsiIWxlZ2FjeUhGIl0mJm42KHBlLDAsdmUsY3RbIiFwcmludCJdLmltYWdlcyk7dmFyIFp0PSgiY2hhcnQiPT1jdFsiIXR5cGUi''@;'; put 'put ''XT9bY3RdOmN0WyIhY2hhcnRzIl18fFtdKS5jb25jYXQoKGN0WyIhaW1hZ2VzIl18fFtdKS5tYXAoZnVuY3Rpb24ocG4pe3JldHVybiBwblsiIXR5cGUiXXx8KHBuWyIhdHlwZSJdPSJpbWFnZSIpLHBufSkpLmNvbmNhdCgoY3RbIiFzaGFwZXMiXXx8W10pLm1hcChmdW5jdGlvbihwbil7cmV0''@;'; put 'put ''dXJuIHBuWyIhdHlwZSJdfHwocG5bIiF0eXBlIl09InNoYXBlIikscG59KSk7WnQmJlp0Lmxlbmd0aCYmKHR5cGVvZiB3cml0ZV9kcmF3aW5nXzwidSI/d3JpdGVfZHJhd2luZ18ocGUscmUsdmUsY3QsWnQpOihZdChwZSwieGwvZHJhd2luZ3MvZHJhd2luZyIrdmUrIi54bWwiLExDKCkpLHJl''@;'; put 'put ''LmRyYXdpbmdzLnB1c2goInhsL2RyYXdpbmdzL2RyYXdpbmciK3ZlKyIueG1sIikpKSxkZWxldGUgY3RbIiFjb21tZW50cyJdLGRlbGV0ZSBjdFsiIWxlZ2FjeSJdLGRlbGV0ZSBjdFsiIWxlZ2FjeUhGIl19Y3QmJmN0WyIhcGl2b3RzIl0mJiJ4bWwiPT1MJiZ0eXBlb2Ygd3JpdGVfcGl2b3Rf''@;'; put 'put ''eG1sPCJ1IiYmY3RbIiFwaXZvdHMiXS5mb3JFYWNoKGR0KSxDdFsiIWlkIl0ucklkMSYmWXQocGUsQmkoX2UpLFhhKEN0KSksY3QmJmN0WyIhdGFibGVzIl0mJiJ4bWwiPT1MJiZjdFsiIXRhYmxlcyJdLmZvckVhY2gobnQpfXJldHVybiBudWxsIT1QLlN0cmluZ3MmJlAuU3RyaW5ncy5sZW5n''@;'; put 'put ''dGg+MCYmKFl0KHBlLF9lPSJ4bC9zaGFyZWRTdHJpbmdzLiIrTCxXTChQLlN0cmluZ3MsX2UsUCkpLHJlLnN0cnMucHVzaChfZSksem8oUC53YnJlbHMsLTEsInNoYXJlZFN0cmluZ3MuIitMLEhpLlNTVCkpLCJ4bWwiPT1MJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmd3JpdGVfcGl2''@;'; put 'put ''b3RfeG1sKFZlLHkscGUscmUsUCksInhtbCI9PUwmJmZ1bmN0aW9uIHE0KHksUCxMLFEpe3kuZm9yRWFjaChmdW5jdGlvbihyZSxwZSl7dmFyIF9lPVAuU2hlZXRzW1AuU2hlZXROYW1lc1tyZVswXV1dLHZlPSJ4bC90YWJsZXMvdGFibGUiKyhyZVswXSsxKSsiXyIrcmVbMV0rIi54bWwiO1Eu''@;'; put 'put ''dGFibGVzLnB1c2godmUpO3ZhciBTZT1yZVsyXS5yZWZ8fF9lWyIhcmVmIl07InN0cmluZyIhPXR5cGVvZiBTZSYmKFNlPU9vKFNlKSk7dmFyIEhlPU9pKFNlKSxWZT1yZVsyXS5uYW1lfHwic2pzdGJsXyIrcmVbMF0rIl8iK3JlWzFdLEdlPVtCbl0sbnQ9IWhuKHJlWzJdLmhlYWRlciksZHQ9''@;'; put 'put ''bnQmJiFobihyZVsyXS5maWx0ZXIpO0dlLnB1c2goJzx0YWJsZSB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiBpZD0iJysocGUrMSkrJyIgbmFtZT0iJytGcihWZSkrJyIgZGlzcGxheU5hbWU9IicrRnIoVmUpKyciIHJl''@;'; put 'put ''Zj0iJytTZSsnIiAnKyhudWxsIT1yZVsyXS5oZWFkZXImJjEhPXJlWzJdLmhlYWRlcj8naGVhZGVyUm93Q291bnQ9IicrKHJlWzJdLmhlYWRlcnx8MCkrJyIgJzoiIikrIj4iKSxkdCYmR2UucHVzaCgnPGF1dG9GaWx0ZXIgcmVmPSInK1NlKyciLz4nKSxHZS5wdXNoKCc8dGFibGVDb2x1bW5z''@;'; put 'put ''IGNvdW50PSInKyhIZS5lLmMtSGUucy5jKzEpKyciPicpO2Zvcih2YXIgQ3Q9W10sY3Q9SGUucy5jO2N0PD1IZS5lLmM7KytjdClpZihudCl7Zm9yKHZhciBidD1kaSh7cjpIZS5zLnIsYzpjdH0pLEZ0PV9lW2J0XSxFdD1yZVsyXS5jb2xzJiZyZVsyXS5jb2xzW2N0LUhlLnMuY10mJnJlWzJd''@;'; put 'put ''LmNvbHNbY3QtSGUucy5jXS5uYW1lfHxGdCYmKEZ0Lnd8fEZ0LnYpfHwiQ29sdW1uICIrKGN0LUhlLnMuYysxKSxUdD1FdCxadD0xO0N0LmluZGV4T2YoVHQpPi0xJiYrK1p0PDE2Mzg0OylUdD1FdCtadDtpZihUdCE9RXQpdGhyb3cidGFibGUgY29sdW1ucyAiK2N0KyIgYW5kICIrKEN0Lmlu''@;'; put 'put ''ZGV4T2YoRXQpK0hlLnMuYykrIiBoYXZlIHRoZSBzYW1lIGhlYWRlciAnIitFdCsiJzsgdHJ5IHNldHRpbmcgY2VsbCAiK2J0KyIgdG8gJyIrVHQrIiciO0N0LnB1c2goVHQpLEdlLnB1c2goJzx0YWJsZUNvbHVtbiBpZD0iJysocmVbMl0uY29scyYmcmVbMl0uY29sc1tjdC1IZS5zLmNdJiZu''@;'; put 'put ''dWxsIT1yZVsyXS5jb2xzW2N0LUhlLnMuY10uaWQ/cmVbMl0uY29sc1tjdC1IZS5zLmNdLmlkOmN0LUhlLnMuYysxKSsnIiBuYW1lPSInK0ZyKFR0KSsnIi8+Jyl9ZWxzZSBHZS5wdXNoKHJlWzJdLmNvbHMmJnJlWzJdLmNvbHNbY3QtSGUucy5jXT8nPHRhYmxlQ29sdW1uIGlkPSInK3JlWzJd''@;'; put 'put ''LmNvbHNbY3QtSGUucy5jXS5pZCsnIiBuYW1lPSInK3JlWzJdLmNvbHNbY3QtSGUucy5jXS5uYW1lKyciLz4nOic8dGFibGVDb2x1bW4gaWQ9IicrKGN0LUhlLnMuYysxKSsnIiB1bmlxdWVOYW1lPSInKyhjdC1IZS5zLmMrMSkrJyIgbmFtZT0iJysoY3QtSGUucy5jKzEpKyciLz4nKTtHZS5w''@;'; put 'put ''dXNoKCI8L3RhYmxlQ29sdW1ucz4iKTt2YXIgS249KyghMSE9PShyZVsyXS5zdHlsZXx8e30pLnJvd3N0cmlwZSksdW49KyEhKHJlWzJdLnN0eWxlfHx7fSkuY29sc3RyaXBlLHFuPSshIShyZVsyXS5zdHlsZXx8e30pLmNvbGZpcnN0LHpuPSshIShyZVsyXS5zdHlsZXx8e30pLmNvbGxhc3Qs''@;'; put 'put ''QW49KHJlWzJdLnN0eWxlfHx7fSkubmFtZXx8Ik1lZGl1bTkiO0FuPUFuLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKT8iVGFibGVTdHlsZSIrQW46QW4sR2UucHVzaCgnPHRhYmxlU3R5bGVJbmZvIG5hbWU9IicrQW4rJyIgc2hvd0ZpcnN0Q29sdW1uPSInK3FuKyciIHNob3dM''@;'; put 'put ''YXN0Q29sdW1uPSInK3puKyciIHNob3dSb3dTdHJpcGVzPSInK0tuKyciIHNob3dDb2x1bW5TdHJpcGVzPSInK3VuKyciLz4nKSxHZS5wdXNoKCI8L3RhYmxlPiIpLFl0KEwsdmUsR2Uuam9pbigiIikpfSl9KEdlLHkscGUscmUpLCJ4bWwiPT1MJiYoeS5FeHRlcm5hbFdCfHxbXSkubGVuZ3Ro''@;'; put 'put ''JiZmdW5jdGlvbiBZOSh5LFAsTCl7TC5saW5rc3x8KEwubGlua3M9W10pLHkuRXh0ZXJuYWxXQiYmeS5FeHRlcm5hbFdCLmZvckVhY2goZnVuY3Rpb24oUSxyZSl7dmFyIHBlPSIveGwvZXh0ZXJuYWxMaW5rcy9fcmVscy9leHRlcm5hbExpbmsiKyhyZSsxKSsiLnhtbC5yZWxzIixfZT17fTt6''@;'; put 'put ''byhfZSwtMSxRLlRhcmdldCxRLk1pc3Npbmc/SGkuWE1JU1M6SGkuWFBBVEgpLFl0KFAsYWMocGUpLFhhKF9lKSk7dmFyIHZlPSIveGwvZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhyZSsxKSsiLnhtbCI7TC5saW5rcy5wdXNoKHZlKSxZdChQLGFjKHZlKSxmdW5jdGlvbiBEQyh5KXt2''@;'; put 'put ''YXIgUD1bQm4sdDZdO3JldHVybih5LlNoZWV0TmFtZXN8fFtdKS5sZW5ndGgmJihQLnB1c2goJzxleHRlcm5hbEJvb2sgeG1sbnM6cj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIgcjppZD0icklkMSI+JyksUC5w''@;'; put 'put ''dXNoKCI8c2hlZXROYW1lcz4iKSx5LlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihMKXtQLnB1c2goJzxzaGVldE5hbWUgdmFsPSInK0ZyKEwpKyciLz4nKX0pLFAucHVzaCgiPC9zaGVldE5hbWVzPiIpLFAucHVzaCgiPHNoZWV0RGF0YVNldD4iKSx5LlNoZWV0TmFtZXMuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihMLFEpe3ZhciByZT15LlNoZWV0c1tMXSxwZT17c2hlZXRJZDpRfSxfZT1udWxsO2lmKG51bGw9PXJlKXBlLnJlZnJlc2hFcnJvcj0xO2Vsc2UgaWYocmVbIiFyZWYiXSl7dmFyIHZlPVdzKHJlWyIhcmVmIl0pO19lPSIiO2Zvcih2YXIgU2U9dmUucy5yO1NlPD12ZS5lLnI7KytT''@;'; put 'put ''ZSl7Zm9yKHZhciBIZT0iIixWZT12ZS5zLmM7VmU8PXZlLmUuYzsrK1ZlKXt2YXIgR2U9ZGkoe3I6U2UsYzpWZX0pO3JlW0dlXSYmKEhlfHwoSGU9Jzxyb3cgcj0iJysoU2UrMSkrJyI+JyksSGUrPSc8Y2VsbCByPSInK0dlKyciJysocmVbR2VdLnQ/JyB0PSInK3JlW0dlXS50KyciJzoiIikr''@;'; put 'put ''Ij48dj4iK0ZyKHJlW0dlXS52KSsiPC92PjwvY2VsbD4iKX1IZSYmKF9lKz1IZSsiPC9yb3c+Iil9fVAucHVzaChTcigic2hlZXREYXRhIixfZSxwZSkpfSksUC5wdXNoKCI8L3NoZWV0RGF0YVNldD4iKSxQLnB1c2goIjwvZXh0ZXJuYWxCb29rPiIpKSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0''@;'; put 'put ''aF09IjwvZXh0ZXJuYWxMaW5rPiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfShRKSl9KX0oeSxwZSxyZSksInhtbCI9PUwmJmZ1bmN0aW9uIEFDKHkpe3ZhciBQLEw7eS5Xb3JrYm9va3x8KHkuV29ya2Jvb2s9e05hbWVzOltdfSkseS5Xb3JrYm9vay5OYW1lc3x8''@;'; put 'put ''KHkuV29ya2Jvb2suTmFtZXM9W10pO2Zvcih2YXIgUT15Lldvcmtib29rLk5hbWVzLHJlPTA7cmU8eS5TaGVldE5hbWVzLmxlbmd0aDsrK3JlKXt2YXIgcGU9eS5TaGVldE5hbWVzW3JlXSxfZT15LlNoZWV0c1twZV07aWYoX2UmJl9lWyIhcHJpbnQiXSl7dmFyIHZlPSInIitwZSsiJyEiLFNl''@;'; put 'put ''PV9lWyIhcHJpbnQiXTtpZihTZSl7dmFyIEhlPSEoUD1TZS5hcmVhKSxWZT0hKEw9U2UudGl0bGVzKSxHZT1QPyJzdHJpbmciPT10eXBlb2YgUD9QOk9vKFApOiIiO2lmKFAmJihRLmZvckVhY2goZnVuY3Rpb24oZHQpe2R0LlNoZWV0PT1yZSYmIUhlJiYiX3hsbm0uUHJpbnRfQXJlYSI9PWR0''@;'; put 'put ''Lk5hbWUmJihIZT0hMCxkdC5SZWY9dmUrR2UpfSksSGV8fFEucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfQXJlYSIsUmVmOnZlK0dlLFNoZWV0OnJlfSkpLEwpe3ZhciBudD0iIjtMLnMuYz4tMSYmTC5lLmM+LTEmJihudCs9dmUrTnMoTC5zLmMpKyI6IitOcyhMLmUuYykrIiwiKSxMLnMucj4t''@;'; put 'put ''MSYmTC5lLnI+LTEmJihudCs9dmUrSHMoTC5zLnIpKyI6IitIcyhMLmUucikrIiwiKSxudD1udC5zbGljZSgwLC0xKSxRLmZvckVhY2goZnVuY3Rpb24oZHQpe2R0LlNoZWV0PT1yZSYmIVZlJiYiX3hsbm0uUHJpbnRfVGl0bGVzIj09ZHQuTmFtZSYmKEhlPSEwLGR0LlJlZj1udCl9KSxWZXx8''@;'; put 'put ''US5wdXNoKHtOYW1lOiJfeGxubS5QcmludF9UaXRsZXMiLFJlZjpudCxTaGVldDpyZX0pfX19fX0oeSksWXQocGUsX2U9InhsL3dvcmtib29rLiIrTCxmdW5jdGlvbiAkdih5LFAsTCl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP0hMOlJMKSh5LEwpfSh5LF9lLFApKSxyZS53b3JrYm9v''@;'; put 'put ''a3MucHVzaChfZSksem8oUC5yZWxzLDEsX2UsSGkuV0IpLFl0KHBlLF9lPSJ4bC90aGVtZS90aGVtZTEueG1sIixyZih5LlRoZW1lcyxQKSkscmUudGhlbWVzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJ0aGVtZS90aGVtZTEueG1sIixIaS5USEVNRSksWXQocGUsX2U9InhsL3N0eWxlcy4i''@;'; put 'put ''K0wsZnVuY3Rpb24gWUwoeSxQLEwpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9QRDpmQykoeSxMKX0oeSxfZSxQKSkscmUuc3R5bGVzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJzdHlsZXMuIitMLEhpLlNUWSkseS52YmFyYXcmJlEmJihZdChwZSxfZT0ieGwvdmJhUHJvamVjdC5i''@;'; put 'put ''aW4iLHkudmJhcmF3KSxyZS52YmEucHVzaChfZSksem8oUC53YnJlbHMsLTEsInZiYVByb2plY3QuYmluIixIaS5WQkEpKSx5Lm1vZGVsJiZ5Lm1vZGVsLmxlbmd0aCYmKFl0KHBlLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLHkubW9kZWwpLHpvKFAud2JyZWxzLC0xLCJtb2RlbC9pdGVtLmRhdGEi''@;'; put 'put ''LEhpLlBXUlBEKSkseS5jb25uJiYoWXQocGUsInhsL2Nvbm5lY3Rpb25zLnhtbCIseS5jb25uKSxyZS5jb25ucy5wdXNoKCIveGwvY29ubmVjdGlvbnMueG1sIiksem8oUC53YnJlbHMsLTEsImNvbm5lY3Rpb25zLnhtbCIsSGkuQ09OTikpLHkuQ3VzdG9tWE1MJiZ5LkN1c3RvbVhNTC5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKHBuLEtuKXtpZihZdChwZSwiY3VzdG9tWG1sL2l0ZW0iKyhLbisxKSsiLnhtbCIscG4uZGF0YSksem8oUC53YnJlbHMsLTEsIi4uL2N1c3RvbVhtbC9pdGVtIisoS24rMSkrIi54bWwiLEhpLkNYTUwpLHBuLnByb3BzKXtZdChwZSwiY3VzdG9tWG1sL2l0ZW1Qcm9wcyIr''@;'; put 'put ''KEtuKzEpKyIueG1sIixwbi5wcm9wcykscmUuY3VzdG9teG1scHJvcHMucHVzaCgiL2N1c3RvbVhtbC9pdGVtUHJvcHMiKyhLbisxKSsiLnhtbCIpO3ZhciB1bj17fTt6byh1biwtMSwiaXRlbVByb3BzIisoS24rMSkrIi54bWwiLEhpLkNYTUxQKSxZdChwZSwiY3VzdG9tWG1sL19yZWxzL2l0''@;'; put 'put ''ZW0iKyhLbisxKSsiLnhtbC5yZWxzIixYYSh1bikpfX0pLFl0KHBlLCJbQ29udGVudF9UeXBlc10ueG1sIixmdW5jdGlvbiBuOSh5LFAsTCl7dmFyIHJlLFE9W107THx8KFFbUS5sZW5ndGhdPUJuLFFbUS5sZW5ndGhdPWYzLFE9US5jb25jYXQodDkpKTt2YXIgcGU9ZnVuY3Rpb24oU2Upe3lb''@;'; put 'put ''U2VdJiZ5W1NlXS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPVNyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09KHJlPXlbU2VdWzBdKVswXT8iIjoiLyIpK3JlLENvbnRlbnRUeXBlOklkW1NlXVtQLmJvb2tUeXBlfHwieGxzeCJdfSkpfSxfZT1mdW5jdGlvbihTZSl7KHlbU2VdfHxb''@;'; put 'put ''XSkuZm9yRWFjaChmdW5jdGlvbihIZSl7UVtRLmxlbmd0aF09U3IoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1IZVswXT8iIjoiLyIpK0hlLENvbnRlbnRUeXBlOklkW1NlXVtQLmJvb2tUeXBlfHwieGxzeCJdfSl9KX0sdmU9ZnVuY3Rpb24oU2Upeyh5W1NlXXx8W10pLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oSGUpe1FbUS5sZW5ndGhdPVNyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09SGVbMF0/IiI6Ii8iKStIZSxDb250ZW50VHlwZTpIY1tTZV1bMF19KX0pfTtyZXR1cm4gcGUoIndvcmtib29rcyIpLF9lKCJzaGVldHMiKSxfZSgiY2hhcnRzIiksdmUoInRoZW1l''@;'; put 'put ''cyIpLFsic3RycyIsInN0eWxlcyIsImNvbm5zIl0uZm9yRWFjaChwZSksWyJjb3JlcHJvcHMiLCJleHRwcm9wcyIsImN1c3Rwcm9wcyJdLmZvckVhY2godmUpLHZlKCJ2YmEiKSx2ZSgiY29tbWVudHMiKSx2ZSgiZHJhd2luZ3MiKSxfZSgidGFibGVzIiksX2UoInBpdm90cyIpLF9lKCJwaXZv''@;'; put 'put ''dGNhY2hlcyIpLF9lKCJwaXZvdHJlY29yZHMiKSx2ZSgiZGF0YW1vZGVscyIpLHZlKCJjdHJscHJvcHMiKSx2ZSgiY2hhcnRvYmpzIiksdmUoImNoYXJ0c3R5bGVzIiksdmUoImNoYXJ0Y29sb3JzIiksdmUoImNoYXJ0ZXhzIiksX2UoImxpbmtzIiksdmUoImN1c3RvbXhtbHByb3BzIiksIUwm''@;'; put 'put ''JlEubGVuZ3RoPjImJihRW1EubGVuZ3RoXT0iPC9UeXBlcz4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2luKCIiKX0ocmUsUCkpLFl0KHBlLCJfcmVscy8ucmVscyIsWGEoUC5yZWxzKSksWXQocGUsInhsL19yZWxzL3dvcmtib29rLiIrTCsiLnJlbHMiLFhhKFAud2JyZWxz''@;'; put 'put ''KSksZGVsZXRlIFAuRm9udHMsZGVsZXRlIFAuRmlsbHMsZGVsZXRlIFAuQm9yZGVycyxkZWxldGUgUC5yZXZzc2YsZGVsZXRlIFAuc3NmLHBlfWZ1bmN0aW9uIGhfKHksUCl7dmFyIEw9IiI7c3dpdGNoKChQfHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5Ijpy''@;'; put 'put ''ZXR1cm5beVswXSx5WzFdLHlbMl0seVszXSx5WzRdLHlbNV0seVs2XSx5WzddXTtjYXNlImJhc2U2NCI6TD1zZS5kZWNvZGUoeS5zbGljZSgwLDEyKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOkw9eTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIisoUCYm''@;'; put 'put ''UC50eXBlfHwidW5kZWZpbmVkIikpfXJldHVybltMLmNoYXJDb2RlQXQoMCksTC5jaGFyQ29kZUF0KDEpLEwuY2hhckNvZGVBdCgyKSxMLmNoYXJDb2RlQXQoMyksTC5jaGFyQ29kZUF0KDQpLEwuY2hhckNvZGVBdCg1KSxMLmNoYXJDb2RlQXQoNiksTC5jaGFyQ29kZUF0KDcpXX1mdW5jdGlv''@;'; put 'put ''biBITSh5LFApe3ZhciBMPTA7ZTpmb3IoO0w8eS5sZW5ndGg7KXN3aXRjaCh5LmNoYXJDb2RlQXQoTCkpe2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOisrTDticmVhaztjYXNlIDYwOnJldHVybiBqYSh5LnNsaWNlKEwpLFApO2RlZmF1bHQ6YnJlYWsgZX1yZXR1cm4gQjEudG9fd29ya2Jvb2so''@;'; put 'put ''eSxQKX1mdW5jdGlvbiBmXyh5LFAsTCxRKXtyZXR1cm4gUT8oTC50eXBlPSJzdHJpbmciLEIxLnRvX3dvcmtib29rKHksTCkpOkIxLnRvX3dvcmtib29rKFAsTCl9ZnVuY3Rpb24gX2YoeSxQKXt2YXIgTD13LmdldGxvY2FsZSgpO0oodyksdy5zZXRsb2NhbGUoTCksVigpO3ZhciBRPVB8fHt9''@;'; put 'put ''O2lmKHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gX2YobmV3IFVpbnQ4QXJyYXkoeSksKChRPW9uKFEpKS50eXBlPSJhcnJheSIsUSkpO3ZhciBwZSxyZT15LF9lPSExO2lmKEZtKG5mPVEuUFBJfHxJOSksUS5jZWxsU3R5bGVzJiYoUS5j''@;'; put 'put ''ZWxsTkY9ITAsUS5zaGVldFN0dWJzPSEwKSxaMz17fSxRLmRhdGVORiYmKFozLmRhdGVORj1RLmRhdGVORiksUS50eXBlfHwoUS50eXBlPWhlJiZCdWZmZXIuaXNCdWZmZXIoeSk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09US50eXBlJiYoUS50eXBlPWhlPyJidWZmZXIiOiJiaW5hcnki''@;'; put 'put ''LHJlPWZ1bmN0aW9uIEplKHkpe2lmKHR5cGVvZiBXZTwidSIpcmV0dXJuIFdlLnJlYWRGaWxlU3luYyh5KTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciBQPUZpbGUoeSk7UC5vcGVuKCJyIiksUC5lbmNvZGluZz0iYmluYXJ5Ijt2''@;'; put 'put ''YXIgTD1QLnJlYWQoKTtyZXR1cm4gUC5jbG9zZSgpLEx9Y2F0Y2goUSl7aWYoIVEubWVzc2FnZXx8IVEubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBRfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIreSl9KHkpKSwic3RyaW5nIj09US50eXBlJiYoX2U9ITAs''@;'; put 'put ''US50eXBlPSJiaW5hcnkiLFEuY29kZXBhZ2U9NjUwMDEscmU9ZnVuY3Rpb24gTVIoeSl7cmV0dXJuIHkubWF0Y2goL1teXHgwMC1ceDdGXS8pP0xvKHkpOnl9KHkpKSwiYXJyYXkiPT1RLnR5cGUmJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmeSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnR5cGVv''@;'; put 'put ''ZiBBcnJheUJ1ZmZlcjwidSIpe3ZhciB2ZT1uZXcgQXJyYXlCdWZmZXIoMyksU2U9bmV3IFVpbnQ4QXJyYXkodmUpO2lmKFNlLmZvbz0iYmFyIiwhU2UuZm9vKXJldHVybihRPW9uKFEpKS50eXBlPSJhcnJheSIsX2YoQyhyZSksUSl9c3dpdGNoKChwZT1oXyhyZSxRKSlbMF0pe2Nhc2UgMjA4''@;'; put 'put ''OmlmKDIwNz09PXBlWzFdJiYxNz09PXBlWzJdJiYyMjQ9PT1wZVszXSYmMTYxPT09cGVbNF0mJjE3Nz09PXBlWzVdJiYyNj09PXBlWzZdJiYyMjU9PT1wZVs3XSlyZXR1cm4gZnVuY3Rpb24geVIoeSxQKXtyZXR1cm4gQmUuZmluZCh5LCJFbmNyeXB0ZWRQYWNrYWdlIik/dlIoeSxQKTpfNSh5''@;'; put 'put ''LFApfShCZS5yZWFkKHJlLFEpLFEpO2JyZWFrO2Nhc2UgOTppZihwZVsxXTw9OClyZXR1cm4gXzUocmUsUSk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gamEocmUsUSk7Y2FzZSA3MzppZig3Mz09PXBlWzFdJiY0Mj09PXBlWzJdJiYwPT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJUSUZGIEltYWdl''@;'; put 'put ''IEZpbGUgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTtpZig2OD09PXBlWzFdKXJldHVybiBmdW5jdGlvbiBwWih5LFApe3ZhciBMPVB8fHt9LFE9ISFMLldURjtMLldURj0hMDt0cnl7dmFyIHJlPXg5LnRvX3dvcmtib29rKHksTCk7cmV0dXJuIEwuV1RGPVEscmV9Y2F0Y2gocGUpe2lmKEwuV1RG''@;'; put 'put ''PVEsIXBlLm1lc3NhZ2UubWF0Y2goL1NZTEsgYmFkIHJlY29yZCBJRC8pJiZRKXRocm93IHBlO3JldHVybiBCMS50b193b3JrYm9vayh5LFApfX0ocmUsUSk7YnJlYWs7Y2FzZSA4NDppZig2NT09PXBlWzFdJiY2Nj09PXBlWzJdJiY3Nj09PXBlWzNdKXJldHVybiBNMy50b193b3JrYm9vayhy''@;'; put 'put ''ZSxRKTticmVhaztjYXNlIDgwOnJldHVybiA3NT09PXBlWzFdJiZwZVsyXTw5JiZwZVszXTw5P2Z1bmN0aW9uIHdSKHksUCl7dmFyIFE9eSxyZT1QfHx7fTtyZXR1cm4gcmUudHlwZXx8KHJlLnR5cGU9aGUmJkJ1ZmZlci5pc0J1ZmZlcih5KT8iYnVmZmVyIjoiYmFzZTY0IiksRk0oeG4oUSxy''@;'; put 'put ''ZSkscmUpfShyZSxRKTpmXyh5LHJlLFEsX2UpO2Nhc2UgMjM5OnJldHVybiA2MD09PXBlWzNdP2phKHJlLFEpOmZfKHkscmUsUSxfZSk7Y2FzZSAyNTU6aWYoMjU0PT09cGVbMV0pcmV0dXJuIGZ1bmN0aW9uIFNSKHksUCl7dmFyIEw9eTtyZXR1cm4iYmFzZTY0Ij09UC50eXBlJiYoTD1zZS5k''@;'; put 'put ''ZWNvZGUoTCkpLEw9Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxMLnNsaWNlKDIpLCJzdHIiKSxQLnR5cGU9ImJpbmFyeSIsSE0oTCxQKX0ocmUsUSk7YnJlYWs7Y2FzZSAwOmlmKDA9PT1wZVsxXSYmcGVbMl0+PTImJjA9PT1wZVszXSlyZXR1cm4gVG0udG9fd29ya2Jvb2socmUsUSk7YnJl''@;'; put 'put ''YWs7Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMTQwOnJldHVybiBCMi50b193b3JrYm9vayhyZSxRKTtjYXNlIDEyMzppZig5Mj09PXBlWzFdJiYxMTQ9PT1wZVsyXSYmMTE2PT09cGVbM10pcmV0dXJuIE9tLnRvX3dvcmtib29rKHJlLFEpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpj''@;'; put 'put ''YXNlIDMyOnJldHVybiBmdW5jdGlvbiBDUih5LFApe3ZhciBMPSIiLFE9aF8oeSxQKTtzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6TD1zZS5kZWNvZGUoeSk7YnJlYWs7Y2FzZSJiaW5hcnkiOkw9eTticmVhaztjYXNlImJ1ZmZlciI6TD15LnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztj''@;'; put 'put ''YXNlImFycmF5IjpMPVB0KHkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9cmV0dXJuIDIzOT09UVswXSYmMTg3PT1RWzFdJiYxOTE9PVFbMl0mJihMPVBpKEwpKSxITShMLFApfShyZSxRKX1yZXR1cm4gQjIudmVyc2lvbnMuaW5k''@;'; put 'put ''ZXhPZihwZVswXSk+LTEmJnBlWzJdPD0xMiYmcGVbM108PTMxP0IyLnRvX3dvcmtib29rKHJlLFEpOmZfKHkscmUsUSxfZSl9ZnVuY3Rpb24gcF8oeSxQKXt2YXIgTD1QfHx7fTtyZXR1cm4gTC50eXBlPSJmaWxlIixfZih5LEwpfWZ1bmN0aW9uIGdfKHksUCl7c3dpdGNoKFAudHlwZSl7Y2Fz''@;'; put 'put ''ZSJiYXNlNjQiOmNhc2UiYmluYXJ5IjpicmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6UC50eXBlPSIiO2JyZWFrO2Nhc2UiZmlsZSI6cmV0dXJuIFllKFAuZmlsZSxCZS53cml0ZSh5LHt0eXBlOmhlPyJidWZmZXIiOiIifSkpO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidz''@;'; put 'put ''dHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQgZm9yICciK1AuYm9va1R5cGUrIicgZmlsZXMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfXJldHVybiBCZS53cml0ZSh5LFApfWZ1bmN0aW9uIGUxKHksUCxMKXtMfHwoTD0iIik7dmFyIFE9''@;'; put 'put ''TCt5O3N3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gc2UuZW5jb2RlKExvKFEpKTtjYXNlImJpbmFyeSI6cmV0dXJuIExvKFEpO2Nhc2Uic3RyaW5nIjpyZXR1cm4geTtjYXNlImZpbGUiOnJldHVybiBZZShQLmZpbGUsUSwidXRmOCIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gaGU/''@;'; put 'put ''dWUoUSwidXRmOCIpOmUxKFEse3R5cGU6ImJpbmFyeSJ9KS5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmUuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfWZ1bmN0aW9uIG1fKHksUCl7c3dpdGNoKFAudHlwZSl7''@;'; put 'put ''Y2FzZSJzdHJpbmciOmNhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6Zm9yKHZhciBMPSIiLFE9MDtRPHkubGVuZ3RoOysrUSlMKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHlbUV0pO3JldHVybiJiYXNlNjQiPT1QLnR5cGU/c2UuZW5jb2RlKEwpOiJzdHJpbmciPT1QLnR5cGU/UGkoTCk6TDtjYXNl''@;'; put 'put ''ImZpbGUiOnJldHVybiBZZShQLmZpbGUseSk7Y2FzZSJidWZmZXIiOnJldHVybiB5O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9fWZ1bmN0aW9uIEM1KHksUCl7VigpLGZ1bmN0aW9uIERMKHkpe2lmKCF5fHwheS5TaGVldE5hbWVzfHwheS5T''@;'; put 'put ''aGVldHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFdvcmtib29rIik7aWYoIXkuU2hlZXROYW1lcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJXb3JrYm9vayBpcyBlbXB0eSIpOyFmdW5jdGlvbiBadih5LFAsTCl7eS5mb3JFYWNoKGZ1bmN0aW9uKFEscmUpe1V2KFEpO2Zvcih2YXIgcGU9''@;'; put 'put ''MDtwZTxyZTsrK3BlKWlmKFE9PXlbcGVdKXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIFNoZWV0IE5hbWU6ICIrUSk7aWYoTCl7dmFyIF9lPVAmJlBbcmVdJiZQW3JlXS5Db2RlTmFtZXx8UTtpZig5NT09X2UuY2hhckNvZGVBdCgwKSYmX2UubGVuZ3RoPjIyKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''QmFkIENvZGUgTmFtZTogV29ya3NoZWV0IitfZSl9fSl9KHkuU2hlZXROYW1lcyx5Lldvcmtib29rJiZ5Lldvcmtib29rLlNoZWV0c3x8W10sISF5LnZiYXJhdyk7Zm9yKHZhciBMPTA7TDx5LlNoZWV0TmFtZXMubGVuZ3RoOysrTClzNSh5LlNoZWV0c1t5LlNoZWV0TmFtZXNbTF1dLDAsTCl9''@;'; put 'put ''KHkpO3ZhciBMPVB8fHt9O2lmKEwuY2VsbFN0eWxlcyYmKEwuY2VsbE5GPSEwLEwuc2hlZXRTdHVicz0hMCksImFycmF5Ij09TC50eXBlKXtMLnR5cGU9ImJpbmFyeSI7dmFyIFE9QzUoeSxMKTtyZXR1cm4gTC50eXBlPSJhcnJheSIsSChRKX1zd2l0Y2goTC5ib29rVHlwZXx8Inhsc2IiKXtj''@;'; put 'put ''YXNlInhtbCI6Y2FzZSJ4bG1sIjpyZXR1cm4gZTEoSkwoeSxMKSxMKTtjYXNlInNsayI6Y2FzZSJzeWxrIjpyZXR1cm4gZTEodVIoeSxMKSxMKTtjYXNlImh0bSI6Y2FzZSJodG1sIjpyZXR1cm4gZTEobFIoeSxMKSxMKTtjYXNlInR4dCI6cmV0dXJuIGZ1bmN0aW9uIEJNKHksUCl7c3dpdGNo''@;'; put 'put ''KFAudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBzZS5lbmNvZGUoeSk7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjpyZXR1cm4geTtjYXNlImZpbGUiOnJldHVybiBZZShQLmZpbGUseSwiYmluYXJ5Iik7Y2FzZSJidWZmZXIiOnJldHVybiBoZT91ZSh5LCJiaW5hcnkiKTp5LnNwbGl0KCIi''@;'; put 'put ''KS5tYXAoZnVuY3Rpb24oTCl7cmV0dXJuIEwuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfShoUih5LEwpLEwpO2Nhc2UiY3N2IjpyZXR1cm4gZTEoY1IoeSxMKSxMLCJcdWZlZmYiKTtjYXNlImRpZiI6cmV0dXJuIGUxKGRSKHks''@;'; put 'put ''TCksTCk7Y2FzZSJkYmYiOnJldHVybiBtXyhETSh5LEwpLEwpO2Nhc2UicHJuIjpyZXR1cm4gZTEoYV8oeSxMKSxMKTtjYXNlInJ0ZiI6cmV0dXJuIGUxKHk1KHksTCksTCk7Y2FzZSJldGgiOnJldHVybiBlMShmUih5LEwpLEwpO2Nhc2UiZm9kcyI6cmV0dXJuIGUxKF8wKHksTCksTCk7Y2Fz''@;'; put 'put ''ZSJiaWZmMiI6TC5iaWZmfHwoTC5iaWZmPTIpO2Nhc2UiYmlmZjMiOkwuYmlmZnx8KEwuYmlmZj0zKTtjYXNlImJpZmY0IjpyZXR1cm4gTC5iaWZmfHwoTC5iaWZmPTQpLG1fKHJfKHksTCksTCk7Y2FzZSJiaWZmNSI6TC5iaWZmfHwoTC5iaWZmPTUpO2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpj''@;'; put 'put ''YXNlInhscyI6cmV0dXJuIEwuYmlmZnx8KEwuYmlmZj04KSxmdW5jdGlvbiBWTSh5LFApe3ZhciBMPVB8fHt9O3JldHVybiBnXyhmdW5jdGlvbiB3TSh5LFApe3ZhciBMPVB8fHt9LFE9QmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KSxyZT0iL1dvcmtib29rIjtzd2l0Y2goTC5ib29rVHlw''@;'; put 'put ''ZXx8InhscyIpe2Nhc2UieGxzIjpMLmJvb2tUeXBlPSJiaWZmOCI7Y2FzZSJ4bGEiOkwuYm9va1R5cGV8fChMLmJvb2tUeXBlPSJ4bGEiKTtjYXNlImJpZmY4IjpyZT0iL1dvcmtib29rIixMLmJpZmY9ODticmVhaztjYXNlImJpZmY1IjpyZT0iL0Jvb2siLEwuYmlmZj01O2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUgIitMLmJvb2tUeXBlKyIgZm9yIFhMUyBDRkIiKX1yZXR1cm4gQmUudXRpbHMuY2ZiX2FkZChRLHJlLHJfKHksTCkpLDg9PUwuYmlmZiYmKHkuUHJvcHN8fHkuQ3VzdHByb3BzKSYmZnVuY3Rpb24geU0oeSxQKXt2YXIgX2UsTD1bXSxR''@;'; put 'put ''PVtdLHJlPVtdLHBlPTA7aWYoeS5Qcm9wcylmb3IoX2U9bHQoeS5Qcm9wcykscGU9MDtwZTxfZS5sZW5ndGg7KytwZSkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGI0LF9lW3BlXSk/TDpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeTQsX2VbcGVd''@;'; put 'put ''KT9ROnJlKS5wdXNoKFtfZVtwZV0seS5Qcm9wc1tfZVtwZV1dXSk7aWYoeS5DdXN0cHJvcHMpZm9yKF9lPWx0KHkuQ3VzdHByb3BzKSxwZT0wO3BlPF9lLmxlbmd0aDsrK3BlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LlByb3BzfHx7fSxfZVtwZV0pfHwoT2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGI0LF9lW3BlXSk/TDpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeTQsX2VbcGVdKT9ROnJlKS5wdXNoKFtfZVtwZV0seS5DdXN0cHJvcHNbX2VbcGVdXV0pO3ZhciB2ZT1bXTtmb3IocGU9MDtwZTxyZS5sZW5ndGg7''@;'; put 'put ''KytwZSlmbS5pbmRleE9mKHJlW3BlXVswXSk+LTF8fG51bGwhPXJlW3BlXVsxXSYmdmUucHVzaChyZVtwZV0pO1EubGVuZ3RoJiZCZS51dGlscy5jZmJfYWRkKFAsIi9ceDA1U3VtbWFyeUluZm9ybWF0aW9uIix3aShRLHJwLlNJLHk0LHdyKSksKEwubGVuZ3RofHx2ZS5sZW5ndGgpJiZCZS51''@;'; put 'put ''dGlscy5jZmJfYWRkKFAsIi9ceDA1RG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iLHdpKEwscnAuRFNJLGI0LF80LHZlLmxlbmd0aD92ZTpudWxsLHJwLlVESSkpfSh5LFEpLDg9PUwuYmlmZiYmeS52YmFyYXcmJmZ1bmN0aW9uIHRJKHksUCl7UC5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihMLFEpe2lmKDAhPVEpe3ZhciByZT1MLnJlcGxhY2UoL1teXC9dKltcL10vLCIvX1ZCQV9QUk9KRUNUX0NVUi8iKTsiLyIhPT1yZS5zbGljZSgtMSkmJkJlLnV0aWxzLmNmYl9hZGQoeSxyZSxQLkZpbGVJbmRleFtRXS5jb250ZW50KX19KX0oUSxCZS5yZWFkKHkudmJhcmF3LHt0eXBlOiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgeS52YmFyYXc/ImJpbmFyeSI6ImJ1ZmZlciJ9KSksUX0oeSxMKSxMKX0oeSxMKTtjYXNlInhsc3giOmNhc2UieGxzbSI6Y2FzZSJ4bGFtIjpjYXNlInhsc2IiOmNhc2Uib2RzIjpyZXR1cm4gZnVuY3Rpb24gTk0oeSxQKXt2YXIgTD1QfHx7fSxRPWJSKHksTCkscmU9''@;'; put 'put ''e307aWYoTC5jb21wcmVzc2lvbiYmKHJlLmNvbXByZXNzaW9uPSJERUZMQVRFIiksTC5wYXNzd29yZClyZS50eXBlPWhlPyJub2RlYnVmZmVyIjoic3RyaW5nIjtlbHNlIHN3aXRjaChMLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZS50eXBlPSJiYXNlNjQiO2JyZWFrO2Nhc2UiYmluYXJ5IjpyZS50''@;'; put 'put ''eXBlPSJzdHJpbmciO2JyZWFrO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQgZm9yICciK0wuYm9va1R5cGUrIicgZmlsZXMiKTtjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjpyZS50eXBlPWhlPyJub2RlYnVmZmVyIjoic3RyaW5nIjti''@;'; put 'put ''cmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitMLnR5cGUpfXZhciBwZT1RLkZ1bGxQYXRocz9CZS53cml0ZShRLHtmaWxlVHlwZToiemlwIix0eXBlOntub2RlYnVmZmVyOiJidWZmZXIiLHN0cmluZzoiYmluYXJ5In1bcmUudHlwZV18fHJlLnR5cGV9''@;'; put 'put ''KTpRLmdlbmVyYXRlKHJlKTtyZXR1cm4gTC5wYXNzd29yZCYmdHlwZW9mIGIwPCJ1Ij9nXyhiMChwZSxMLnBhc3N3b3JkKSxMKToiZmlsZSI9PT1MLnR5cGU/WWUoTC5maWxlLHBlKToic3RyaW5nIj09TC50eXBlP1BpKHBlKTpwZX0oeSxMKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5y''@;'; put 'put ''ZWNvZ25pemVkIGJvb2tUeXBlIHwiK0wuYm9va1R5cGUrInwiKX19ZnVuY3Rpb24gdDEoeSl7aWYoIXkuYm9va1R5cGUpe3ZhciBMPXkuZmlsZS5zbGljZSh5LmZpbGUubGFzdEluZGV4T2YoIi4iKSkudG9Mb3dlckNhc2UoKTtMLm1hdGNoKC9eXC5bYS16XSskLykmJih5LmJvb2tUeXBlPUwu''@;'; put 'put ''c2xpY2UoMSkpLHkuYm9va1R5cGU9e3hsczoiYmlmZjgiLGh0bToiaHRtbCIsc2xrOiJzeWxrIixzb2NpYWxjYWxjOiJldGgiLFNoMzN0SlM6IldURiJ9W3kuYm9va1R5cGVdfHx5LmJvb2tUeXBlfX1mdW5jdGlvbiBTNSh5LFAsTCl7dmFyIFE9THx8e307cmV0dXJuIFEudHlwZT0iZmlsZSIs''@;'; put 'put ''US5maWxlPVAsdDEoUSksQzUoeSxRKX1mdW5jdGlvbiBqTSh5LFAsTCxRLHJlLHBlLF9lLHZlKXt2YXIgU2U9SHMoTCksSGU9dmUuZGVmdmFsLFZlPXZlLnJhdyxHZT0hMCxudD0xPT09cmU/W106e307aWYoMSE9PXJlKWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KG50LCJfX3Jvd051bV9fIix7dmFsdWU6TCxlbnVtZXJhYmxlOiExfSl9Y2F0Y2h7bnQuX19yb3dOdW1fXz1MfWVsc2UgbnQuX19yb3dOdW1fXz1MO2lmKCFfZXx8eVtMXSlmb3IodmFyIGR0PVAucy5jO2R0PD1QLmUuYzsrK2R0KXt2YXIgQ3Q9X2U/eVtMXVtkdF06eVtRW2R0''@;'; put 'put ''XStTZV07aWYodm9pZCAwIT09Q3QmJnZvaWQgMCE9PUN0LnQpe3ZhciBjdD1DdC52O3N3aXRjaChDdC50KXtjYXNlInoiOmlmKG51bGw9PWN0KWJyZWFrO2NvbnRpbnVlO2Nhc2UiZSI6Y3Q9MD09Y3Q/bnVsbDp2b2lkIDA7YnJlYWs7Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpi''@;'; put 'put ''cmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIitDdC50KX1pZihudWxsIT1wZVtkdF0pe2lmKG51bGw9PWN0KWlmKCJlIj09Q3QudCYmbnVsbD09PWN0KW50W3BlW2R0XV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9PUhlKW50W3BlW2R0XV09SGU7ZWxzZXtp''@;'; put 'put ''ZighVmV8fG51bGwhPT1jdCljb250aW51ZTtudFtwZVtkdF1dPW51bGx9ZWxzZSBudFtwZVtkdF1dPVZlP2N0OmN1KEN0LGN0LHZlKTtudWxsIT1jdCYmKEdlPSExKX19ZWxzZXtpZih2b2lkIDA9PT1IZSljb250aW51ZTtudWxsIT1wZVtkdF0mJihudFtwZVtkdF1dPUhlKX19cmV0dXJue3Jv''@;'; put 'put ''dzpudCxpc2VtcHR5OkdlfX1mdW5jdGlvbiBINih5LFApe2lmKG51bGw9PXl8fG51bGw9PXlbIiFyZWYiXSlyZXR1cm5bXTt2YXIgTD17dDoibiIsdjowfSxRPTAscmU9MSxwZT1bXSxfZT0wLHZlPSIiLFNlPUpTT04ucGFyc2UoJ3sicyI6eyJyIjowLCJjIjowfSwiZSI6eyJyIjowLCJjIjow''@;'; put 'put ''fX0nKSxIZT1QfHx7fSxWZT1udWxsIT1IZS5yYW5nZT9IZS5yYW5nZTp5WyIhcmVmIl07c3dpdGNoKDE9PT1IZS5oZWFkZXI/UT0xOiJBIj09PUhlLmhlYWRlcj9RPTI6QXJyYXkuaXNBcnJheShIZS5oZWFkZXIpP1E9MzpudWxsPT1IZS5oZWFkZXImJihRPTApLHR5cGVvZiBWZSl7Y2FzZSJz''@;'; put 'put ''dHJpbmciOlNlPU9pKFZlKTticmVhaztjYXNlIm51bWJlciI6KFNlPU9pKHlbIiFyZWYiXSkpLnMucj1WZTticmVhaztkZWZhdWx0OlNlPVZlfVE+MCYmKHJlPTApO3ZhciBHZT1IcyhTZS5zLnIpLG50PVtdLGR0PVtdLEN0PTAsY3Q9MCxidD1BcnJheS5pc0FycmF5KHkpLEZ0PVNlLnMucixF''@;'; put 'put ''dD0wLFR0PTA7Zm9yKGJ0JiYheVtGdF0mJih5W0Z0XT1bXSksRXQ9U2Uucy5jO0V0PD1TZS5lLmM7KytFdClzd2l0Y2gobnRbRXRdPU5zKEV0KSxMPWJ0P3lbRnRdW0V0XTp5W250W0V0XStHZV0sUSl7Y2FzZSAxOnBlW0V0XT1FdC1TZS5zLmM7YnJlYWs7Y2FzZSAyOnBlW0V0XT1udFtFdF07''@;'; put 'put ''YnJlYWs7Y2FzZSAzOnBlW0V0XT1IZS5oZWFkZXJbRXQtU2Uucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT1MJiYoTD1KU09OLnBhcnNlKCd7InciOiAiX19FTVBUWSIsICJ0IjogInMifScpKSx2ZT1fZT1jdShMLG51bGwsSGUpLGN0PTAsVHQ9MDtUdDxwZS5sZW5ndGg7KytUdClwZVtU''@;'; put 'put ''dF09PXZlJiYodmU9X2UrIl8iKyArK2N0KTtwZVtFdF09dmV9Zm9yKEZ0PVNlLnMucityZTtGdDw9U2UuZS5yOysrRnQpe3ZhciBadD1qTSh5LFNlLEZ0LG50LFEscGUsYnQsSGUpOyghMT09PVp0LmlzZW1wdHl8fCgxPT09UT8hMSE9PUhlLmJsYW5rcm93czpIZS5ibGFua3Jvd3MpKSYmKGR0''@;'; put 'put ''W0N0KytdPVp0LnJvdyl9cmV0dXJuIGR0Lmxlbmd0aD1DdCxkdH12YXIgJGQ9LyIvZztmdW5jdGlvbiB6TSh5LFAsTCxRLHJlLHBlLF9lLHZlKXtmb3IodmFyIFNlPSEwLEhlPVtdLFZlPSIiLEdlPUhzKEwpLG50PVAucy5jO250PD1QLmUuYzsrK250KWlmKFFbbnRdKXt2YXIgZHQ9dmUuZGVu''@;'; put 'put ''c2U/KHlbTF18fFtdKVtudF06eVtRW250XStHZV07aWYobnVsbD09ZHQpVmU9IiI7ZWxzZSBpZihudWxsIT1kdC52KXtTZT0hMSxWZT0iIitjdShkdCxudWxsLHZlKTtmb3IodmFyIEN0PTAsY3Q9MDtDdCE9PVZlLmxlbmd0aDsrK0N0KWlmKChjdD1WZS5jaGFyQ29kZUF0KEN0KSk9PT1yZXx8''@;'; put 'put ''Y3Q9PT1wZXx8MzQ9PT1jdCl7VmU9JyInK1ZlLnJlcGxhY2UoJGQsJyIiJykrJyInO2JyZWFrfSJJRCI9PVZlJiYoVmU9JyJJRCInKX1lbHNlIG51bGw9PWR0LmZ8fGR0LkY/VmU9IiI6KFNlPSExLChWZT0iPSIrZHQuZikuaW5kZXhPZigiLCIpPj0wJiYoVmU9JyInK1ZlLnJlcGxhY2UoJGQs''@;'; put 'put ''JyIiJykrJyInKSk7SGUucHVzaChWZSl9cmV0dXJuITE9PT12ZS5ibGFua3Jvd3MmJlNlP251bGw6SGUuam9pbihfZSl9ZnVuY3Rpb24gQmwoeSxQKXt2YXIgTD1bXSxRPVA/P3t9O2lmKG51bGw9PXl8fG51bGw9PXlbIiFyZWYiXSlyZXR1cm4iIjt2YXIgcmU9T2koeVsiIXJlZiJdKSxwZT12''@;'; put 'put ''b2lkIDAhPT1RLkZTP1EuRlM6IiwiLF9lPXBlLmNoYXJDb2RlQXQoMCksdmU9dm9pZCAwIT09US5SUz9RLlJTOiJcbiIsU2U9dmUuY2hhckNvZGVBdCgwKSxIZT1uZXcgUmVnRXhwKCgifCI9PXBlPyJcXHwiOnBlKSsiKyQiKSxWZT0iIixHZT1bXTtRLmRlbnNlPUFycmF5LmlzQXJyYXkoeSk7''@;'; put 'put ''Zm9yKHZhciBudD1RLnNraXBIaWRkZW4mJnlbIiFjb2xzIl18fFtdLGR0PVEuc2tpcEhpZGRlbiYmeVsiIXJvd3MiXXx8W10sQ3Q9cmUucy5jO0N0PD1yZS5lLmM7KytDdCkobnRbQ3RdfHx7fSkuaGlkZGVufHwoR2VbQ3RdPU5zKEN0KSk7Zm9yKHZhciBjdD1yZS5zLnI7Y3Q8PXJlLmUucjsr''@;'; put 'put ''K2N0KShkdFtjdF18fHt9KS5oaWRkZW58fG51bGwhPShWZT16TSh5LHJlLGN0LEdlLF9lLFNlLHBlLFEpKSYmKFEuc3RyaXAmJihWZT1WZS5yZXBsYWNlKEhlLCIiKSksTC5wdXNoKFZlK3ZlKSk7cmV0dXJuIGRlbGV0ZSBRLmRlbnNlLEwuam9pbigiIil9ZnVuY3Rpb24geFIoeSxQKXtQfHwo''@;'; put 'put ''UD17fSksUC5GUz0iXHQiLFAuUlM9IlxuIjt2YXIgTD1CbCh5LFApO2lmKHR5cGVvZiBjcHRhYmxlPiJ1Inx8InN0cmluZyI9PVAudHlwZSlyZXR1cm4gTDt2YXIgUT1jcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEwsInN0ciIpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSkrU3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZSgyNTQpK1F9ZnVuY3Rpb24gTjYoeSl7dmFyIEwsUD0iIixRPSIiO2lmKG51bGw9PXl8fG51bGw9PXlbIiFyZWYiXSlyZXR1cm5bXTt2YXIgdmUscmU9T2koeVsiIXJlZiJdKSxwZT0iIixfZT1bXSxTZT1bXSxIZT1BcnJheS5pc0FycmF5KHkpO2Zvcih2ZT1yZS5z''@;'; put 'put ''LmM7dmU8PXJlLmUuYzsrK3ZlKV9lW3ZlXT1Ocyh2ZSk7Zm9yKHZhciBWZT1yZS5zLnI7VmU8PXJlLmUucjsrK1ZlKWZvcihwZT1IcyhWZSksdmU9cmUucy5jO3ZlPD1yZS5lLmM7Kyt2ZSlpZihQPV9lW3ZlXStwZSxRPSIiLHZvaWQgMCE9PShMPUhlPyh5W1ZlXXx8W10pW3ZlXTp5W1BdKSl7''@;'; put 'put ''aWYobnVsbCE9TC5GKXtpZihQPUwuRiwhTC5mKWNvbnRpbnVlO1E9TC5mLC0xPT1QLmluZGV4T2YoIjoiKSYmKFA9UCsiOiIrUCl9aWYobnVsbCE9TC5mKVE9TC5mO2Vsc2V7aWYoInoiPT1MLnQpY29udGludWU7aWYoIm4iPT1MLnQmJm51bGwhPUwudilRPSIiK0wudjtlbHNlIGlmKCJiIj09''@;'; put 'put ''TC50KVE9TC52PyJUUlVFIjoiRkFMU0UiO2Vsc2UgaWYodm9pZCAwIT09TC53KVE9IiciK0wudztlbHNle2lmKHZvaWQgMD09PUwudiljb250aW51ZTtRPSJzIj09TC50PyInIitMLnY6IiIrTC52fX1TZVtTZS5sZW5ndGhdPVArIj0iK1F9cmV0dXJuIFNlfWZ1bmN0aW9uIHZfKHksUCxMKXt2''@;'; put 'put ''YXIgUT1MfHx7fSxyZT0rIVEuc2tpcEhlYWRlcixwZT15fHx7fSxfZT0wLHZlPTA7aWYocGUmJm51bGwhPVEub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgUS5vcmlnaW4pX2U9US5vcmlnaW47ZWxzZXt2YXIgU2U9InN0cmluZyI9PXR5cGVvZiBRLm9yaWdpbj9zcyhRLm9yaWdpbik6US5v''@;'; put 'put ''cmlnaW47X2U9U2Uucix2ZT1TZS5jfXZhciBIZSxWZT1KU09OLnBhcnNlKCd7InMiOiB7ImMiOjAsICJyIjowfSwgImUiOiB7ImMiOjAsICJyIjowfX0nKTtpZihWZS5lLmM9dmUsVmUuZS5yPV9lK1AubGVuZ3RoLTErcmUscGVbIiFyZWYiXSl7dmFyIEdlPU9pKHBlWyIhcmVmIl0pO1ZlLmUu''@;'; put 'put ''Yz1NYXRoLm1heChWZS5lLmMsR2UuZS5jKSxWZS5lLnI9TWF0aC5tYXgoVmUuZS5yLEdlLmUuciksLTE9PV9lJiYoVmUuZS5yPShfZT1HZS5lLnIrMSkrUC5sZW5ndGgtMStyZSl9ZWxzZS0xPT1fZSYmKF9lPTAsVmUuZS5yPVAubGVuZ3RoLTErcmUpO3ZhciBudD1RLmhlYWRlcnx8W10sZHQ9''@;'; put 'put ''MDtQLmZvckVhY2goZnVuY3Rpb24oY3QsYnQpe2x0KGN0KS5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXstMT09KGR0PW50LmluZGV4T2YoRnQpKSYmKG50W2R0PW50Lmxlbmd0aF09RnQpO3ZhciBFdD1jdFtGdF0sVHQ9InoiLFp0PSIiLHBuPWRpKHtjOnZlK2R0LHI6X2UrYnQrcmV9KTtpZihIZT1x''@;'; put 'put ''by5zaGVldF9nZXRfY2VsbChwZSxwbiksIUV0fHwib2JqZWN0IiE9dHlwZW9mIEV0fHxFdCBpbnN0YW5jZW9mIERhdGUpe2lmKCJudW1iZXIiPT10eXBlb2YgRXQ/VHQ9Im4iOiJib29sZWFuIj09dHlwZW9mIEV0P1R0PSJiIjoic3RyaW5nIj09dHlwZW9mIEV0P1R0PSJzIjpFdCBpbnN0YW5j''@;'; put 'put ''ZW9mIERhdGU/KFR0PSJkIixRLmNlbGxEYXRlc3x8KFR0PSJuIixFdD1VZShFdCkpLFp0PUhlLnomJncuaXNfZGF0ZShIZS56KT9IZS56OlEuZGF0ZU5GfHx3Ll90YWJsZVsxNF0pOm51bGw9PT1FdCYmUS5udWxsRXJyb3ImJihUdD0iZSIsRXQ9MCksSGU/KEhlLnQ9VHQsSGUudj1FdCxkZWxl''@;'; put 'put ''dGUgSGUudyxkZWxldGUgSGUuUixadCYmKEhlLno9WnQpKTpwZVtwbl09SGU9e3Q6VHQsdjpFdH0sWnQmJihIZS56PVp0KSxIZSYmSGUuaCl0cnl7aWYoSGUuUj1GdS5odG1sX3RvX3JzKEhlLmgpLCFIZS52KXtIZS52PSIiO2Zvcih2YXIgS249MDtLbjxIZS5SLmxlbmd0aDsrK0tuKUhlLnYr''@;'; put 'put ''PUhlLlJbS25dLnZ8fCIifX1jYXRjaHt9fWVsc2UgcGVbcG5dPUV0fSl9KSxWZS5lLmM9TWF0aC5tYXgoVmUuZS5jLHZlK250Lmxlbmd0aC0xKTt2YXIgQ3Q9SHMoX2UpO2lmKHJlKWZvcihkdD0wO2R0PG50Lmxlbmd0aDsrK2R0KXBlW05zKGR0K3ZlKStDdF09e3Q6InMiLHY6bnRbZHRdfTty''@;'; put 'put ''ZXR1cm4gcGVbIiFyZWYiXT1PbyhWZSkscGV9dmFyIHFvPXtlbmNvZGVfY29sOk5zLGVuY29kZV9yb3c6SHMsZW5jb2RlX2NlbGw6ZGksZW5jb2RlX3JhbmdlOk9vLGRlY29kZV9jb2w6amgsZGVjb2RlX3JvdzpCMCxzcGxpdF9jZWxsOmZ1bmN0aW9uIGg0KHkpe3JldHVybiB5LnJlcGxhY2Uo''@;'; put 'put ''LyhcJD9bQS1aXSopKFwkP1xkKikvLCIkMSwkMiIpLnNwbGl0KCIsIil9LGRlY29kZV9jZWxsOnNzLGRlY29kZV9yYW5nZTpXcyxmb3JtYXRfY2VsbDpjdSxnZXRfZm9ybXVsYWU6TjYsbWFrZV9jc3Y6QmwsbWFrZV9qc29uOkg2LG1ha2VfZm9ybXVsYWU6TjYsaHRtbF90b19yczpGdS5odG1s''@;'; put 'put ''X3RvX3JzLHNoZWV0X2FkZF9hb2E6czAsc2hlZXRfYWRkX2pzb246dl8sc2hlZXRfYWRkX2RvbTprTSxhb2FfdG9fc2hlZXQ6azEsanNvbl90b19zaGVldDpmdW5jdGlvbiBmWSh5LFApe3JldHVybiB2XyhudWxsLHksUCl9LHRhYmxlX3RvX3NoZWV0Okh1LHRhYmxlX3RvX2Jvb2s6ZnVuY3Rp''@;'; put 'put ''b24gaHIoeSxQKXtyZXR1cm4gRWQoSHUoeSxQKSxQKX0sc2hlZXRfdG9fY3N2OkJsLHNoZWV0X3RvX3R4dDp4UixzaGVldF90b19qc29uOkg2LHNoZWV0X3RvX2h0bWw6RnUuZnJvbV9zaGVldCxzaGVldF90b19mb3JtdWxhZTpONixzaGVldF90b19yb3dfb2JqZWN0X2FycmF5Okg2fTtmdW5j''@;'; put 'put ''dGlvbiBVTSh5LFAsTCxRLHJlKXt2YXIgcGU7aWYoeS5zdHlsZSYmISh5Ll9yYW5nZSYmKHBlPSJzdHJpbmciPT10eXBlb2YgeS5fcmFuZ2U/TS51dGlscy5kZWNvZGVfcmFuZ2UoeS5fcmFuZ2UpOnkuX3JhbmdlLEwuYz5wZS5lLmN8fEwuYzxwZS5zLmN8fEwucj5wZS5lLnJ8fEwucjxwZS5z''@;'; put 'put ''LnIpKSYmcGUpe3ZhciBfZT15LnN0eWxlLnN0eWxlO2lmKF9lKXtfZS53aG9sZVRhYmxlJiZxby5hcHBseV9zdHlsZV9kZWx0YShRLF9lLndob2xlVGFibGUpO2U6aWYoX2UuaGVhZGVyUm93KWlmKHJlKXtpZihMLnIhPXBlLnMucilicmVhayBlO2huKHkuc3R5bGUuY29saGVhZCl8fHFvLmFw''@;'; put 'put ''cGx5X3N0eWxlX2RlbHRhKFEsX2UuaGVhZGVyUm93KX1lbHNle2lmKEwuciE9cGUucy5yKWJyZWFrIGU7aG4oeS5oZWFkZXIpfHxxby5hcHBseV9zdHlsZV9kZWx0YShRLF9lLmhlYWRlclJvdyl9fX19cW8udGVzdF9wYXNzd29yZD1mdW5jdGlvbiBJTSh5LFApe3ZhciBMPUJ1ZmZlci5mcm9t''@;'; put 'put ''KHkuc2FsdCwiYmFzZTY0IiksUT15LmFsZ28scmU9ZWwoQnVmZmVyLmNvbmNhdChbTCxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFApKV0pLFEpLHBlPUJ1ZmZlci5hbGxvYyg0KTtvbChwZSwwKTtmb3IodmFyIF9lPTA7X2U8eS5zcGluOysrX2UpcGUubD0wLHBlLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsX2UpLHJlPWVsKEJ1ZmZlci5jb25jYXQoW3JlLHBlXSksUSk7dmFyIHZlPUJ1ZmZlci5mcm9tKHkuaGFzaCwiYmFzZTY0Iik7cmV0dXJuIDA9PXJlLmNvbXBhcmUodmUpfSxxby5oYXNoX3Bhc3N3b3JkPWZ1bmN0aW9uIGNfKHkpe3ZhciBQPXthbGdvOiJTSEEtNTEyIixz''@;'; put 'put ''YWx0OiJVMmhsWlhSS1V5NWpiMjB2ZUd4emVBPT0iLHNwaW46MWUzfSxMPUJ1ZmZlci5mcm9tKFAuc2FsdCwiYmFzZTY0IiksUT1QLmFsZ28scmU9ZWwoQnVmZmVyLmNvbmNhdChbTCxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLHkpKV0pLFEpLHBlPUJ1ZmZlci5hbGxv''@;'; put 'put ''Yyg0KTtvbChwZSwwKTtmb3IodmFyIF9lPTA7X2U8UC5zcGluOysrX2UpcGUubD0wLHBlLndyaXRlX3NoaWZ0KDQsX2UpLHJlPWVsKEJ1ZmZlci5jb25jYXQoW3JlLHBlXSksUSk7cmV0dXJuIFAuaGFzaD1yZS50b1N0cmluZygiYmFzZTY0IiksUH0scW8uc2hlZXRfc2V0X3JhbmdlX3N0eWxl''@;'; put 'put ''PWZ1bmN0aW9uKHksUCxMKXtpZihMKXt2YXIgUT0ic3RyaW5nIj09dHlwZW9mIFA/T2koUCk6UDtudWxsIT1RLnImJm51bGwhPVEuYyYmKFE9e3M6USxlOlF9KTt2YXIgdmUscmU9US5zLnIscGU9MCxfZT0iIixTZT1Xcyh5WyIhcmVmIl18fCJBMSIpO1NlLnMucj5RLnMuciYmKFNlLnMucj1R''@;'; put 'put ''LnMuciksU2Uucy5jPlEucy5jJiYoU2Uucy5jPVEucy5jKSxTZS5lLnI8US5lLnImJihTZS5lLnI9US5lLnIpLFNlLmUuYzxRLmUuYyYmKFNlLmUuYz1RLmUuYykseVsiIXJlZiJdPU9vKFNlKTtmb3IodmFyIFZlPUFycmF5LmlzQXJyYXkoeSk7cmU8PVEuZS5yOysrcmUpZm9yKHBlPVEucy5j''@;'; put 'put ''O3BlPD1RLmUuYzsrK3BlKVZlPyh5W3JlXXx8KHlbcmVdPVtdKSx5W3JlXVtwZV18fCh5W3JlXVtwZV09e3Q6InoifSksdmU9eVtyZV1bcGVdKTooeVtfZT1kaSh7cjpyZSxjOnBlfSldfHwoeVtfZV09e3Q6InoifSksdmU9eVtfZV0pLHZlLnN8fCh2ZS5zPXt9KSxPYmplY3Qua2V5cyhMKS5m''@;'; put 'put ''b3JFYWNoKEhlKSx2ZS5zLnBhdHRlcm5UeXBlJiYhdmUucy5mZ0NvbG9yJiYoZGVsZXRlIHZlLnMucGF0dGVyblR5cGUsZGVsZXRlIHZlLnMuYmdDb2xvciksKHZlLnMuZmdDb2xvcnx8dmUucy5iZ0NvbG9yKSYmIm5vbmUiPT0odmUucy5wYXR0ZXJuVHlwZXx8Im5vbmUiKSYmKHZlLnMucGF0''@;'; put 'put ''dGVyblR5cGU9InNvbGlkIik7aWYocmU9US5zLnIsTC50b3B8fG51bGw9PT1MLnRvcClmb3IocGU9US5zLmM7cGU8PVEuZS5jOysrcGUpe2lmKFZlKXtpZigheVtyZV0pY29udGludWU7dmU9eVtyZV1bcGVdfWVsc2UgX2U9ZGkoe3I6cmUsYzpwZX0pLHZlPXlbX2VdO3ZlJiYobnVsbD09PUwu''@;'; put 'put ''dG9wP2RlbGV0ZSB2ZS5zLnRvcDp2ZS5zLnRvcD1vbihMLnRvcCkpfWlmKHJlPVEuZS5yLEwuYm90dG9tfHxudWxsPT09TC5ib3R0b20pZm9yKHBlPVEucy5jO3BlPD1RLmUuYzsrK3BlKXtpZihWZSl7aWYoIXlbcmVdKWNvbnRpbnVlO3ZlPXlbcmVdW3BlXX1lbHNlIF9lPWRpKHtyOnJlLGM6''@;'; put 'put ''cGV9KSx2ZT15W19lXTt2ZSYmKG51bGw9PT1MLmJvdHRvbT9kZWxldGUgdmUucy5ib3R0b206dmUucy5ib3R0b209b24oTC5ib3R0b20pKX1pZihwZT1RLnMuYyxMLmxlZnR8fG51bGw9PT1MLmxlZnQpZm9yKHJlPVEucy5yO3JlPD1RLmUucjsrK3JlKXtpZihWZSl7aWYoIXlbcmVdKWNvbnRp''@;'; put 'put ''bnVlO3ZlPXlbcmVdW3BlXX1lbHNlIF9lPWRpKHtyOnJlLGM6cGV9KSx2ZT15W19lXTt2ZSYmKG51bGw9PT1MLmxlZnQ/ZGVsZXRlIHZlLnMubGVmdDp2ZS5zLmxlZnQ9b24oTC5sZWZ0KSl9aWYocGU9US5lLmMsTC5yaWdodHx8bnVsbD09PUwucmlnaHQpZm9yKHJlPVEucy5yO3JlPD1RLmUu''@;'; put 'put ''cjsrK3JlKXtpZihWZSl7aWYoIXlbcmVdKWNvbnRpbnVlO3ZlPXlbcmVdW3BlXX1lbHNlIF9lPWRpKHtyOnJlLGM6cGV9KSx2ZT15W19lXTt2ZSYmKG51bGw9PT1MLnJpZ2h0P2RlbGV0ZSB2ZS5zLnJpZ2h0OnZlLnMucmlnaHQ9b24oTC5yaWdodCkpfX1mdW5jdGlvbiBIZShHZSl7aWYoInRv''@;'; put 'put ''cCIhPUdlJiYiYm90dG9tIiE9R2UmJiJsZWZ0IiE9R2UmJiJyaWdodCIhPUdlKXtpZigieiI9PUdlKXJldHVybiB2b2lkKHZlLno9TC56KTtpZigiYWxpZ25tZW50Ij09R2UpcmV0dXJuIHZvaWQodmUuc1tHZV0/T2JqZWN0LmtleXMoTFtHZV0pLmZvckVhY2goZnVuY3Rpb24obnQpe3ZlLnNb''@;'; put 'put ''R2VdW250XT1MW0dlXVtudF19KTp2ZS5zW0dlXT1vbihMW0dlXSkpO2lmKCJpbmNvbCI9PUdlKXJldHVybiBwZT5RLnMuYyYmKG51bGw9PT1MLmxlZnQ/ZGVsZXRlIHZlLnMubGVmdDp2ZS5zLmxlZnQ9Im9iamVjdCI9PXR5cGVvZiBMW0dlXT9vbihMW0dlXSk6TFtHZV0pLHZvaWQocGU8US5l''@;'; put 'put ''LmMmJihudWxsPT09TC5yaWdodD9kZWxldGUgdmUucy5yaWdodDp2ZS5zLnJpZ2h0PSJvYmplY3QiPT10eXBlb2YgTFtHZV0/b24oTFtHZV0pOkxbR2VdKSk7aWYoImlucm93Ij09R2UpcmV0dXJuIHJlPlEucy5yJiYobnVsbD09PUwudG9wP2RlbGV0ZSB2ZS5zLnRvcDp2ZS5zLnRvcD0ib2Jq''@;'; put 'put ''ZWN0Ij09dHlwZW9mIExbR2VdP29uKExbR2VdKTpMW0dlXSksdm9pZChyZTxRLmUuciYmKG51bGw9PT1MLmJvdHRvbT9kZWxldGUgdmUucy5ib3R0b206dmUucy5ib3R0b209Im9iamVjdCI9PXR5cGVvZiBMW0dlXT9vbihMW0dlXSk6TFtHZV0pKTtudWxsPT09TFtHZV0/ZGVsZXRlIHZlLnNb''@;'; put 'put ''R2VdOnZlLnNbR2VdPUxbR2VdJiZBcnJheS5pc0FycmF5KExbR2VdKT9MW0dlXS5zbGljZSgpLm1hcChmdW5jdGlvbihudCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBudD9vbihudCk6bnR9KToib2JqZWN0Ij09dHlwZW9mIExbR2VdP29uKExbR2VdKTpMW0dlXX19fSxxby5hcHBseV9zdHls''@;'; put 'put ''ZV9kZWx0YT1mdW5jdGlvbih5LFApe1sic3oiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtlIiwibmFtZSIsInZhbGlnbiJdLmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIFE9TDsiYmdDb2xvciI9PUw/UT0iZmdDb2xvciI6ImZnQ29sb3IiPT1MJiYoUT0iYmdDb2xvciIpLE9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEwpJiYobnVsbD09PVBbTF0/ZGVsZXRlIHlbUV06bnVsbCE9UFtMXSYmKHlbUV09UFtMXSkpfSksWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJhbGlnbm1lbnQiLCJwcm90ZWN0aW9uIiwiY29sb3IiLCJmZ0NvbG9y''@;'; put 'put ''IiwiYmdDb2xvciJdLmZvckVhY2goZnVuY3Rpb24oTCl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsTCkmJihudWxsPT09UFtMXT9kZWxldGUgeVtMXTpudWxsIT1QW0xdJiYoeVtMXT1vbihQW0xdKSkpfSl9LHFvLmdldF9jb21wdXRlZF9zdHlsZT1mdW5jdGlvbih5''@;'; put 'put ''LFApeyJzdHJpbmciPT10eXBlb2YgUCYmKFA9TS51dGlscy5kZWNvZGVfY2VsbChQKSk7dmFyIEw9QXJyYXkuaXNBcnJheSh5KT8oeVtQLnJdfHxbXSlbUC5jXTp5W00udXRpbHMuZW5jb2RlX2NlbGwoUCldLFE9b24oTCYmTC5zfHx7fSk7cmV0dXJuIHlbIiF0YWJsZXMiXSYmeVsiIXRhYmxl''@;'; put 'put ''cyJdLmZvckVhY2goZnVuY3Rpb24ocmUpe1VNKHJlLDAsUCxRKX0pLHlbIiFwaXZvdHMiXSYmeVsiIXBpdm90cyJdLmZvckVhY2goZnVuY3Rpb24ocmUpe1VNKHJlLDAsUCxRLCEwKX0pLFF9O3ZhciBaTT17fTtxby5jZWxsX2FycmF5X3RvX2Nzdl9yb3c9ZnVuY3Rpb24oeSxQKXt2YXIgTD1Q''@;'; put 'put ''Pz97fSxRPXZvaWQgMCE9PUwuRlM/TC5GUzoiLCIscmU9US5jaGFyQ29kZUF0KDApLHBlPXZvaWQgMCE9PUwuUlM/TC5SUzoiXG4iLF9lPXBlLmNoYXJDb2RlQXQoMCksdmU9Wk1bUV18fChaTVtRXT1uZXcgUmVnRXhwKCgifCI9PVE/IlxcfCI6USkrIiskIikpLFNlPWZ1bmN0aW9uIGlwKHks''@;'; put 'put ''UCxMLFEscmUpe2Zvcih2YXIgcGU9ITAsX2U9W10sdmU9IiIsU2U9MDtTZTw9eS5sZW5ndGgtMTsrK1NlKXt2YXIgSGU9eVtTZV07aWYobnVsbD09SGUpdmU9IiI7ZWxzZSBpZihudWxsIT1IZS52KXtwZT0hMSx2ZT0iIitjdShIZSxudWxsLHJlKTtmb3IodmFyIFZlPTAsR2U9MDtWZSE9PXZl''@;'; put 'put ''Lmxlbmd0aDsrK1ZlKWlmKChHZT12ZS5jaGFyQ29kZUF0KFZlKSk9PT1QfHxHZT09PUx8fDM0PT09R2Upe3ZlPSciJyt2ZS5yZXBsYWNlKCRkLCciIicpKyciJzticmVha30iSUQiPT12ZSYmKHZlPSciSUQiJyl9ZWxzZSBudWxsPT1IZS5mfHxIZS5GP3ZlPSIiOihwZT0hMSwodmU9Ij0iK0hl''@;'; put 'put ''LmYpLmluZGV4T2YoIiwiKT49MCYmKHZlPSciJyt2ZS5yZXBsYWNlKCRkLCciIicpKyciJykpO19lLnB1c2godmUpfXJldHVybiExPT09cmUuYmxhbmtyb3dzJiZwZT9udWxsOl9lLmpvaW4oUSl9KHkscmUsX2UsUSxMKTtyZXR1cm4gTC5zdHJpcCYmKFNlPVNlLnJlcGxhY2UodmUsIiIpKSxT''@;'; put 'put ''ZStwZX0sZnVuY3Rpb24oeSl7ZnVuY3Rpb24gTChwZSxfZSx2ZSl7cmV0dXJuIG51bGwhPXBlW19lXT9wZVtfZV06cGVbX2VdPXZlfWZ1bmN0aW9uIFEocGUsX2UsdmUpe2lmKCJzdHJpbmciPT10eXBlb2YgX2Upe2lmKEFycmF5LmlzQXJyYXkocGUpKXt2YXIgU2U9c3MoX2UpO3JldHVybiBw''@;'; put 'put ''ZVtTZS5yXXx8KHBlW1NlLnJdPVtdKSxwZVtTZS5yXVtTZS5jXXx8KHBlW1NlLnJdW1NlLmNdPXt0OiJ6In0pfXJldHVybiBwZVtfZV18fChwZVtfZV09e3Q6InoifSl9cmV0dXJuIFEocGUsZGkoIm51bWJlciIhPXR5cGVvZiBfZT9fZTp7cjpfZSxjOnZlfHwwfSkpfXkuY29uc3RzPXkuY29u''@;'; put 'put ''c3RzfHx7fSx5LnNoZWV0X2dldF9jZWxsPVEseS5ib29rX25ldz1mdW5jdGlvbigpe3JldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LHkuYm9va19hcHBlbmRfc2hlZXQ9ZnVuY3Rpb24ocGUsX2UsdmUpe2lmKCF2ZSlmb3IodmFyIFNlPTE7U2U8PTY1NTM1JiYtMSE9cGUuU2hlZXRO''@;'; put 'put ''YW1lcy5pbmRleE9mKHZlPSJTaGVldCIrU2UpOysrU2UpO2lmKFV2KHZlKSxwZS5TaGVldE5hbWVzLmluZGV4T2YodmUpPj0wKXRocm93IG5ldyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8Iit2ZSsifCBhbHJlYWR5IGV4aXN0cyEiKTtwZS5TaGVldE5hbWVzLnB1c2godmUpLHBlLlNo''@;'; put 'put ''ZWV0c1t2ZV09X2V9LHkuYm9va19zZXRfc2hlZXRfdmlzaWJpbGl0eT1mdW5jdGlvbihwZSxfZSx2ZSl7TChwZSwiV29ya2Jvb2siLHt9KSxMKHBlLldvcmtib29rLCJTaGVldHMiLFtdKTt2YXIgU2U9ZnVuY3Rpb24gcmUocGUsX2Upe2lmKCJudW1iZXIiPT10eXBlb2YgX2Upe2lmKF9lPj0w''@;'; put 'put ''JiZwZS5TaGVldE5hbWVzLmxlbmd0aD5fZSlyZXR1cm4gX2U7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAjICIrX2UpfWlmKCJzdHJpbmciPT10eXBlb2YgX2Upe3ZhciB2ZT1wZS5TaGVldE5hbWVzLmluZGV4T2YoX2UpO2lmKHZlPi0xKXJldHVybiB2ZTt0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IG5hbWUgfCIrX2UrInwiKX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IHwiK19lKyJ8Iil9KHBlLF9lKTtzd2l0Y2goTChwZS5Xb3JrYm9vay5TaGVldHMsU2Use30pLHZlKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpicmVhaztkZWZh''@;'; put 'put ''dWx0OnRocm93IG5ldyBFcnJvcigiQmFkIHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK3ZlKX1wZS5Xb3JrYm9vay5TaGVldHNbU2VdLkhpZGRlbj12ZX0sZnVuY3Rpb24gUChwZSl7cGUuZm9yRWFjaChmdW5jdGlvbihfZSl7eS5jb25zdHNbX2VbMF1dPV9lWzFdfSl9KFtbIlNIRUVUX1ZJ''@;'; put 'put ''U0lCTEUiLDBdLFsiU0hFRVRfSElEREVOIiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLHkuY2VsbF9zZXRfbnVtYmVyX2Zvcm1hdD1mdW5jdGlvbihwZSxfZSl7cmV0dXJuIHBlLno9X2UscGV9LHkuY2VsbF9zZXRfaHlwZXJsaW5rPWZ1bmN0aW9uKHBlLF9lLHZlKXtyZXR1cm4gX2U/''@;'; put 'put ''KHBlLmw9e1RhcmdldDpfZX0sdmUmJihwZS5sLlRvb2x0aXA9dmUpLHBlLnN8fChwZS5zPXt9KSxwZS5zLmNvbG9yPXt0aGVtZToxMH0pOihkZWxldGUgcGUubCxwZS5zJiZwZS5zLmNvbG9yJiYxMD09cGUucy5jb2xvci50aGVtZSYmZGVsZXRlIHBlLnMuY29sb3IpLHBlfSx5LmNlbGxfc2V0''@;'; put 'put ''X2ludGVybmFsX2xpbms9ZnVuY3Rpb24ocGUsX2UsdmUpe3JldHVybiB5LmNlbGxfc2V0X2h5cGVybGluayhwZSwiIyIrX2UsdmUpfSx5LmNlbGxfYWRkX2NvbW1lbnQ9ZnVuY3Rpb24ocGUsX2UsdmUpe3BlLmN8fChwZS5jPVtdKSxwZS5jLnB1c2goe3Q6X2UsYTp2ZXx8IlNoZWV0SlMifSl9''@;'; put 'put ''LHkuc2hlZXRfc2V0X2FycmF5X2Zvcm11bGE9ZnVuY3Rpb24ocGUsX2UsdmUpe2Zvcih2YXIgU2U9InN0cmluZyIhPXR5cGVvZiBfZT9fZTpPaShfZSksSGU9InN0cmluZyI9PXR5cGVvZiBfZT9fZTpPbyhfZSksVmU9U2Uucy5yO1ZlPD1TZS5lLnI7KytWZSlmb3IodmFyIEdlPVNlLnMuYztH''@;'; put 'put ''ZTw9U2UuZS5jOysrR2Upe3ZhciBudD1RKHBlLFZlLEdlKTtudC50PSJuIixudC5GPUhlLGRlbGV0ZSBudC52LFZlPT1TZS5zLnImJkdlPT1TZS5zLmMmJihudC5mPXZlKX1yZXR1cm4gcGV9fShxbyksaGUmJmZ1bmN0aW9uKCl7dmFyIHk9Rig1MTc5MykuUmVhZGFibGU7TS5zdHJlYW09e3Rv''@;'; put 'put ''X2pzb246ZnVuY3Rpb24ocmUscGUpe3ZhciBfZT15KHtvYmplY3RNb2RlOiEwfSk7aWYobnVsbD09cmV8fG51bGw9PXJlWyIhcmVmIl0pcmV0dXJuIF9lLnB1c2gobnVsbCksX2U7dmFyIHZlPXt0OiJuIix2OjB9LFNlPTAsSGU9MSxWZT1bXSxHZT0wLG50PSIiLGR0PXtzOntyOjAsYzowfSxl''@;'; put 'put ''OntyOjAsYzowfX0sQ3Q9cGV8fHt9LGN0PW51bGwhPUN0LnJhbmdlP0N0LnJhbmdlOnJlWyIhcmVmIl07c3dpdGNoKDE9PT1DdC5oZWFkZXI/U2U9MToiQSI9PT1DdC5oZWFkZXI/U2U9MjpBcnJheS5pc0FycmF5KEN0LmhlYWRlcikmJihTZT0zKSx0eXBlb2YgY3Qpe2Nhc2Uic3RyaW5nIjpk''@;'; put 'put ''dD1PaShjdCk7YnJlYWs7Y2FzZSJudW1iZXIiOihkdD1PaShyZVsiIXJlZiJdKSkucy5yPWN0O2JyZWFrO2RlZmF1bHQ6ZHQ9Y3R9U2U+MCYmKEhlPTApO3ZhciBidD1IcyhkdC5zLnIpLEZ0PVtdLEV0PTAsVHQ9QXJyYXkuaXNBcnJheShyZSksWnQ9ZHQucy5yLHBuPTAsS249MDtmb3IoVHQm''@;'; put 'put ''JiFyZVtadF0mJihyZVtadF09W10pLHBuPWR0LnMuYztwbjw9ZHQuZS5jOysrcG4pc3dpdGNoKEZ0W3BuXT1OcyhwbiksdmU9VHQ/cmVbWnRdW3BuXTpyZVtGdFtwbl0rYnRdLFNlKXtjYXNlIDE6VmVbcG5dPXBuLWR0LnMuYzticmVhaztjYXNlIDI6VmVbcG5dPUZ0W3BuXTticmVhaztjYXNl''@;'; put 'put ''IDM6VmVbcG5dPUN0LmhlYWRlcltwbi1kdC5zLmNdO2JyZWFrO2RlZmF1bHQ6Zm9yKG51bGw9PXZlJiYodmU9e3c6Il9fRU1QVFkiLHQ6InMifSksbnQ9R2U9Y3UodmUsbnVsbCxDdCksRXQ9MCxLbj0wO0tuPFZlLmxlbmd0aDsrK0tuKVZlW0tuXT09bnQmJihudD1HZSsiXyIrICsrRXQpO1Zl''@;'; put 'put ''W3BuXT1udH1yZXR1cm4gWnQ9ZHQucy5yK0hlLF9lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoWnQ+ZHQuZS5yKXJldHVybiBfZS5wdXNoKG51bGwpO2Zvcig7WnQ8PWR0LmUucjspe3ZhciB1bj1qTShyZSxkdCxadCxGdCxTZSxWZSxUdCxDdCk7aWYoKytadCwhMT09PXVuLmlzZW1wdHl8fCgxPT09''@;'; put 'put ''U2U/ITEhPT1DdC5ibGFua3Jvd3M6Q3QuYmxhbmtyb3dzKSl7X2UucHVzaCh1bi5yb3cpO2JyZWFrfX19LF9lfSx0b19odG1sOmZ1bmN0aW9uKHJlLHBlKXt2YXIgX2U9eSgpLHZlPXBlfHx7fSxIZT1udWxsIT12ZS5mb290ZXI/dmUuZm9vdGVyOkZ1LkVORDtfZS5wdXNoKG51bGwhPXZlLmhl''@;'; put 'put ''YWRlcj92ZS5oZWFkZXI6RnUuQkVHSU4pO3ZhciBWZT1XcyhyZVsiIXJlZiJdKTt2ZS5kZW5zZT1BcnJheS5pc0FycmF5KHJlKSxfZS5wdXNoKEZ1Ll9wcmVhbWJsZShyZSxWZSx2ZSkpO3ZhciBHZT1WZS5zLnIsbnQ9ITEsZHQ9W107cmV0dXJuIF9lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoR2U+''@;'; put 'put ''VmUuZS5yKXJldHVybiBudHx8KG50PSEwLF9lLnB1c2goIjwvdGFibGU+IitIZSkpLF9lLnB1c2gobnVsbCk7Zm9yKDtHZTw9VmUuZS5yOyl7X2UucHVzaChGdS5fcm93KHJlLFZlLEdlLHZlLGR0LCIiKSksKytHZTticmVha319LF9lfSx0b19jc3Y6ZnVuY3Rpb24ocmUscGUpe3ZhciBfZT15''@;'; put 'put ''KCksdmU9cGU/P3t9O2lmKG51bGw9PXJlfHxudWxsPT1yZVsiIXJlZiJdKXJldHVybiBfZS5wdXNoKG51bGwpLF9lO3ZhciBTZT1PaShyZVsiIXJlZiJdKSxIZT12b2lkIDAhPT12ZS5GUz92ZS5GUzoiLCIsVmU9SGUuY2hhckNvZGVBdCgwKSxHZT12b2lkIDAhPT12ZS5SUz92ZS5SUzoiXG4i''@;'; put 'put ''LG50PUdlLmNoYXJDb2RlQXQoMCksZHQ9bmV3IFJlZ0V4cCgoInwiPT1IZT8iXFx8IjpIZSkrIiskIiksQ3Q9IiIsY3Q9W107dmUuZGVuc2U9QXJyYXkuaXNBcnJheShyZSk7Zm9yKHZhciBidD12ZS5za2lwSGlkZGVuJiZyZVsiIWNvbHMiXXx8W10sRnQ9dmUuc2tpcEhpZGRlbiYmcmVbIiFy''@;'; put 'put ''b3dzIl18fFtdLEV0PVNlLnMuYztFdDw9U2UuZS5jOysrRXQpKGJ0W0V0XXx8e30pLmhpZGRlbnx8KGN0W0V0XT1OcyhFdCkpO3ZhciBUdD1TZS5zLnIsWnQ9ITE7cmV0dXJuIF9lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoIVp0KXJldHVybiBadD0hMCxfZS5wdXNoKCJcdWZlZmYiKTtmb3IoO1R0''@;'; put 'put ''PD1TZS5lLnI7KWlmKCsrVHQsIShGdFtUdC0xXXx8e30pLmhpZGRlbiYmbnVsbCE9KEN0PXpNKHJlLFNlLFR0LTEsY3QsVmUsbnQsSGUsdmUpKSl7dmUuc3RyaXAmJihDdD1DdC5yZXBsYWNlKGR0LCIiKSksX2UucHVzaChDdCtHZSk7YnJlYWt9cmV0dXJuIFR0PlNlLmUucj9fZS5wdXNoKG51''@;'; put 'put ''bGwpOnZvaWQgMH0sX2V9fX0oKSxNLnBhcnNlX3hsc2NmYj1fNSxNLnBhcnNlX3ppcD1GTSxNLnJlYWQ9X2YsTS5yZWFkRmlsZT1wXyxNLnJlYWRGaWxlU3luYz1wXyxNLndyaXRlPUM1LE0ud3JpdGVGaWxlPVM1LE0ud3JpdGVGaWxlU3luYz1TNSxNLndyaXRlRmlsZUFzeW5jPWZ1bmN0aW9u''@;'; put 'put ''IGJmKHksUCxMLFEpe3ZhciByZT1MfHx7fTtyZS50eXBlPSJmaWxlIixyZS5maWxlPXksdDEocmUpLHJlLnR5cGU9ImJ1ZmZlciI7dmFyIHBlPVE7cmV0dXJuIHBlIGluc3RhbmNlb2YgRnVuY3Rpb258fChwZT1MKSxXZS53cml0ZUZpbGUoeSxDNShQLHJlKSxwZSl9LE0uc2V0X2RhdGVfc3R5''@;'; put 'put ''bGU9ZnVuY3Rpb24gemUoeSl7c3dpdGNoKHkpe2Nhc2UgMDpNZSgpO2JyZWFrO2Nhc2UgMTohZnVuY3Rpb24gRGUoKXt2YXIgeT1uZXcgRGF0ZTtYZT1xZS5nZXRUaW1lKCkrNmU0Kih5LmdldFRpbWV6b25lT2Zmc2V0KCktcWUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7dmFyIFA9eS5nZXRUaW1l''@;'; put 'put ''em9uZU9mZnNldCgpO1VlPWZ1bmN0aW9uKFEscmUpe3ZhciBwZT1RLmdldFRpbWUoKTtyZXR1cm4gcmUmJihwZS09MTI2MzE2OGU1KSwocGUtKHFlLmdldFRpbWUoKSs2ZTQqKFEuZ2V0VGltZXpvbmVPZmZzZXQoKS1xZS5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fSxodD1mdW5jdGlv''@;'; put 'put ''bihRKXt2YXIgcmU9bmV3IERhdGU7cmV0dXJuIHJlLnNldFRpbWUoMjQqUSo2MCo2MCoxZTMrWGUpLHJlLmdldFRpbWV6b25lT2Zmc2V0KCkhPT1QJiZyZS5zZXRUaW1lKHJlLmdldFRpbWUoKSs2ZTQqKHJlLmdldFRpbWV6b25lT2Zmc2V0KCktUCkpLHJlfX0oKX19LE0udXRpbHM9cW8sTS5T''@;'; put 'put ''U0Y9dyx0eXBlb2YgQmU8InUiJiYoTS5DRkI9QmUpfShJZSl9LDI3NDE0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1JZTthZS5iaWdudW09Rig1MDQ3KSxhZS5kZWZpbmU9Rig5MDMwMikuZGVmaW5lLGFlLmJhc2U9Rig0MDUxMCksYWUuY29uc3RhbnRzPUYoNDQxNTUpLGFl''@;'; put 'put ''LmRlY29kZXJzPUYoNzEzMDEpLGFlLmVuY29kZXJzPUYoMjM2OTMpfSw5MDMwMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9RigyMzY5MykseD1GKDcxMzAxKSxtPUYoNjY2OTgpO2Z1bmN0aW9uIE0oTyxSKXt0aGlzLm5hbWU9Tyx0aGlzLmJvZHk9Uix0aGlzLmRlY29kZXJz''@;'; put 'put ''PXt9LHRoaXMuZW5jb2RlcnM9e319SWUuZGVmaW5lPWZ1bmN0aW9uKFIseil7cmV0dXJuIG5ldyBNKFIseil9LE0ucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihSKXtjb25zdCB6PXRoaXMubmFtZTtmdW5jdGlvbiBLKEkpe3RoaXMuX2luaXROYW1lZChJLHopfXJldHVybiBtKEss''@;'; put 'put ''UiksSy5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihrLEUpe1IuY2FsbCh0aGlzLGssRSl9LG5ldyBLKHRoaXMpfSxNLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShSPVJ8fCJkZXIiKXx8KHRoaXMuZGVj''@;'; put 'put ''b2RlcnNbUl09dGhpcy5fY3JlYXRlTmFtZWQoeFtSXSkpLHRoaXMuZGVjb2RlcnNbUl19LE0ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihSLHosSyl7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoeikuZGVjb2RlKFIsSyl9LE0ucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKFIpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KFI9Unx8ImRlciIpfHwodGhpcy5lbmNvZGVyc1tSXT10aGlzLl9jcmVhdGVOYW1lZChhZVtSXSkpLHRoaXMuZW5jb2RlcnNbUl19LE0ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihSLHosSyl7cmV0dXJuIHRoaXMuX2dldEVuY29k''@;'; put 'put ''ZXIoeikuZW5jb2RlKFIsSyl9fSw3NTcyMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9Rig2NjY5OCkseD1GKDk1Njg0KS5iLG09RigyNDE3OSkuQnVmZmVyO2Z1bmN0aW9uIGxlKE8sUil7eC5jYWxsKHRoaXMsUiksbS5pc0J1ZmZlcihPKT8odGhpcy5iYXNlPU8sdGhpcy5v''@;'; put 'put ''ZmZzZXQ9MCx0aGlzLmxlbmd0aD1PLmxlbmd0aCk6dGhpcy5lcnJvcigiSW5wdXQgbm90IEJ1ZmZlciIpfWZ1bmN0aW9uIE0oTyxSKXtpZihBcnJheS5pc0FycmF5KE8pKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gTS5pc0VuY29kZXJCdWZmZXIo''@;'; put 'put ''eil8fCh6PW5ldyBNKHosUikpLHRoaXMubGVuZ3RoKz16Lmxlbmd0aCx6fSx0aGlzKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgTyl7aWYoISgwPD1PJiZPPD0yNTUpKXJldHVybiBSLmVycm9yKCJub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlIik7dGhpcy52YWx1ZT1PLHRoaXMubGVu''@;'; put 'put ''Z3RoPTF9ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIE8pdGhpcy52YWx1ZT1PLHRoaXMubGVuZ3RoPW0uYnl0ZUxlbmd0aChPKTtlbHNle2lmKCFtLmlzQnVmZmVyKE8pKXJldHVybiBSLmVycm9yKCJVbnN1cHBvcnRlZCB0eXBlOiAiK3R5cGVvZiBPKTt0aGlzLnZhbHVlPU8sdGhpcy5sZW5n''@;'; put 'put ''dGg9Ty5sZW5ndGh9fWFlKGxlLHgpLEllLkM9bGUsbGUuaXNEZWNvZGVyQnVmZmVyPWZ1bmN0aW9uKFIpe3JldHVybiBSIGluc3RhbmNlb2YgbGV8fCJvYmplY3QiPT10eXBlb2YgUiYmbS5pc0J1ZmZlcihSLmJhc2UpJiYiRGVjb2RlckJ1ZmZlciI9PT1SLmNvbnN0cnVjdG9yLm5hbWUmJiJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgUi5vZmZzZXQmJiJudW1iZXIiPT10eXBlb2YgUi5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnNhdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnJlc3RvcmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLmlzRW1wdHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnJlYWRV''@;'; put 'put ''SW50OCYmImZ1bmN0aW9uIj09dHlwZW9mIFIuc2tpcCYmImZ1bmN0aW9uIj09dHlwZW9mIFIucmF3fSxsZS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6eC5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sbGUucHJvdG90eXBl''@;'; put 'put ''LnJlc3RvcmU9ZnVuY3Rpb24oUil7Y29uc3Qgej1uZXcgbGUodGhpcy5iYXNlKTtyZXR1cm4gei5vZmZzZXQ9Ui5vZmZzZXQsei5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9Ui5vZmZzZXQseC5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsUi5yZXBvcnRlciksen0sbGUucHJv''@;'; put 'put ''dG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sbGUucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEw''@;'; put 'put ''KTp0aGlzLmVycm9yKFJ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sbGUucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oUix6KXtpZighKHRoaXMub2Zmc2V0K1I8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcih6fHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7Y29uc3QgSz1uZXcg''@;'; put 'put ''bGUodGhpcy5iYXNlKTtyZXR1cm4gSy5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLEsub2Zmc2V0PXRoaXMub2Zmc2V0LEsubGVuZ3RoPXRoaXMub2Zmc2V0K1IsdGhpcy5vZmZzZXQrPVIsS30sbGUucHJvdG90eXBlLnJhdz1mdW5jdGlvbihSKXtyZXR1cm4gdGhpcy5iYXNl''@;'; put 'put ''LnNsaWNlKFI/Ui5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxJZS5SPU0sTS5pc0VuY29kZXJCdWZmZXI9ZnVuY3Rpb24oUil7cmV0dXJuIFIgaW5zdGFuY2VvZiBNfHwib2JqZWN0Ij09dHlwZW9mIFImJiJFbmNvZGVyQnVmZmVyIj09PVIuY29uc3RydWN0b3IubmFtZSYmIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBSLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIFIuam9pbn0sTS5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihSLHope3JldHVybiBSfHwoUj1tLmFsbG9jKHRoaXMubGVuZ3RoKSksenx8KHo9MCksMD09PXRoaXMubGVuZ3RofHwoQXJyYXkuaXNBcnJheSh0aGlzLnZh''@;'; put 'put ''bHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24oSyl7Sy5qb2luKFIseikseis9Sy5sZW5ndGh9KTooIm51bWJlciI9PXR5cGVvZiB0aGlzLnZhbHVlP1Jbel09dGhpcy52YWx1ZToic3RyaW5nIj09dHlwZW9mIHRoaXMudmFsdWU/Ui53cml0ZSh0aGlzLnZhbHVlLHopOm0uaXNCdWZm''@;'; put 'put ''ZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weShSLHopLHorPXRoaXMubGVuZ3RoKSksUn19LDQwNTEwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1JZTthZS5SZXBvcnRlcj1GKDk1Njg0KS5iLGFlLkRlY29kZXJCdWZmZXI9Rig3NTcyMCkuQyxhZS5FbmNvZGVyQnVm''@;'; put 'put ''ZmVyPUYoNzU3MjApLlIsYWUuTm9kZT1GKDU4NTMzKX0sNTg1MzM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoOTU2ODQpLmIseD1GKDc1NzIwKS5SLG09Rig3NTcyMCkuQyxsZT1GKDU3Nzk4KSxNPVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9v''@;'; put 'put ''bCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5p''@;'; put 'put ''c3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sTz1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KE0pO2Z1bmN0aW9uIHooSSxrLEUpe2NvbnN0IGo9e307dGhpcy5fYmFzZVN0''@;'; put 'put ''YXRlPWosai5uYW1lPUUsai5lbmM9SSxqLnBhcmVudD1rfHxudWxsLGouY2hpbGRyZW49bnVsbCxqLnRhZz1udWxsLGouYXJncz1udWxsLGoucmV2ZXJzZUFyZ3M9bnVsbCxqLmNob2ljZT1udWxsLGoub3B0aW9uYWw9ITEsai5hbnk9ITEsai5vYmo9ITEsai51c2U9bnVsbCxqLnVzZURlY29k''@;'; put 'put ''ZXI9bnVsbCxqLmtleT1udWxsLGouZGVmYXVsdD1udWxsLGouZXhwbGljaXQ9bnVsbCxqLmltcGxpY2l0PW51bGwsai5jb250YWlucz1udWxsLGoucGFyZW50fHwoai5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfWF0LmV4cG9ydHM9ejtjb25zdCBLPVsiZW5jIiwicGFyZW50IiwiY2hpbGRy''@;'; put 'put ''ZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07ei5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtjb25z''@;'; put 'put ''dCBrPXRoaXMuX2Jhc2VTdGF0ZSxFPXt9O0suZm9yRWFjaChmdW5jdGlvbihWKXtFW1ZdPWtbVl19KTtjb25zdCBqPW5ldyB0aGlzLmNvbnN0cnVjdG9yKEUucGFyZW50KTtyZXR1cm4gai5fYmFzZVN0YXRlPUUsan0sei5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXtjb25zdCBrPXRoaXMu''@;'; put 'put ''X2Jhc2VTdGF0ZTtPLmZvckVhY2goZnVuY3Rpb24oRSl7dGhpc1tFXT1mdW5jdGlvbigpe2NvbnN0IFY9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIGsuY2hpbGRyZW4ucHVzaChWKSxWW0VdLmFwcGx5KFYsYXJndW1lbnRzKX19LHRoaXMpfSx6LnByb3RvdHlwZS5faW5pdD1m''@;'; put 'put ''dW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtsZShudWxsPT09RS5wYXJlbnQpLGsuY2FsbCh0aGlzKSxFLmNoaWxkcmVuPUUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGope3JldHVybiBqLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksbGUuZXF1YWwoRS5jaGls''@;'; put 'put ''ZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LHoucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlLGo9ay5maWx0ZXIoZnVuY3Rpb24oVil7cmV0dXJuIFYgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVj''@;'; put 'put ''dG9yfSx0aGlzKTtrPWsuZmlsdGVyKGZ1bmN0aW9uKFYpe3JldHVybiEoViBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09ai5sZW5ndGgmJihsZShudWxsPT09RS5jaGlsZHJlbiksRS5jaGlsZHJlbj1qLGouZm9yRWFjaChmdW5jdGlvbihWKXtWLl9iYXNlU3RhdGUu''@;'; put 'put ''cGFyZW50PXRoaXN9LHRoaXMpKSwwIT09ay5sZW5ndGgmJihsZShudWxsPT09RS5hcmdzKSxFLmFyZ3M9ayxFLnJldmVyc2VBcmdzPWsubWFwKGZ1bmN0aW9uKFYpe2lmKCJvYmplY3QiIT10eXBlb2YgVnx8Vi5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gVjtjb25zdCBCPXt9O3JldHVy''@;'; put 'put ''biBPYmplY3Qua2V5cyhWKS5mb3JFYWNoKGZ1bmN0aW9uKFkpe1k9PSgwfFkpJiYoWXw9MCksQltWW1ldXT1ZfSksQn0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVj''@;'; put 'put ''b2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oSSl7ei5wcm90''@;'; put 'put ''b3R5cGVbSV09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoSSsiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksTS5mb3JFYWNoKGZ1bmN0aW9uKEkpe3oucHJvdG90eXBlW0ldPWZ1bmN0aW9uKCl7Y29uc3QgRT10aGlzLl9iYXNlU3Rh''@;'; put 'put ''dGUsaj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBsZShudWxsPT09RS50YWcpLEUudGFnPUksdGhpcy5fdXNlQXJncyhqKSx0aGlzfX0pLHoucHJvdG90eXBlLnVzZT1mdW5jdGlvbihrKXtsZShrKTtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4g''@;'; put 'put ''bGUobnVsbD09PUUudXNlKSxFLnVzZT1rLHRoaXN9LHoucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSx6LnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxl''@;'; put 'put ''KG51bGw9PT1FLmRlZmF1bHQpLEUuZGVmYXVsdD1rLEUub3B0aW9uYWw9ITAsdGhpc30sei5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLmV4cGxpY2l0JiZudWxsPT09RS5pbXBsaWNpdCksRS5leHBsaWNp''@;'; put 'put ''dD1rLHRoaXN9LHoucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBsZShudWxsPT09RS5leHBsaWNpdCYmbnVsbD09PUUuaW1wbGljaXQpLEUuaW1wbGljaXQ9ayx0aGlzfSx6LnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXtjb25z''@;'; put 'put ''dCBrPXRoaXMuX2Jhc2VTdGF0ZSxFPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGsub2JqPSEwLDAhPT1FLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhFKSx0aGlzfSx6LnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7''@;'; put 'put ''cmV0dXJuIGxlKG51bGw9PT1FLmtleSksRS5rZXk9ayx0aGlzfSx6LnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSx6LnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxl''@;'; put 'put ''KG51bGw9PT1FLmNob2ljZSksRS5jaG9pY2U9ayx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKGspLm1hcChmdW5jdGlvbihqKXtyZXR1cm4ga1tqXX0pKSx0aGlzfSx6LnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbGUobnVs''@;'; put 'put ''bD09PUUudXNlKSxFLmNvbnRhaW5zPWssdGhpc30sei5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1qLnBhcmVudClyZXR1cm4gay53cmFwUmVzdWx0KGouY2hpbGRyZW5bMF0uX2RlY29kZShrLEUpKTtsZXQgWCxWPWou''@;'; put 'put ''ZGVmYXVsdCxCPSEwLFk9bnVsbDtpZihudWxsIT09ai5rZXkmJihZPWsuZW50ZXJLZXkoai5rZXkpKSxqLm9wdGlvbmFsKXtsZXQgVT1udWxsO2lmKG51bGwhPT1qLmV4cGxpY2l0P1U9ai5leHBsaWNpdDpudWxsIT09ai5pbXBsaWNpdD9VPWouaW1wbGljaXQ6bnVsbCE9PWoudGFnJiYoVT1q''@;'; put 'put ''LnRhZyksbnVsbCE9PVV8fGouYW55KXtpZihCPXRoaXMuX3BlZWtUYWcoayxVLGouYW55KSxrLmlzRXJyb3IoQikpcmV0dXJuIEJ9ZWxzZXtjb25zdCBxPWsuc2F2ZSgpO3RyeXtudWxsPT09ai5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhqLnRhZyxrLEUpOnRoaXMuX2RlY29kZUNob2lj''@;'; put 'put ''ZShrLEUpLEI9ITB9Y2F0Y2h7Qj0hMX1rLnJlc3RvcmUocSl9fWlmKGoub2JqJiZCJiYoWD1rLmVudGVyT2JqZWN0KCkpLEIpe2lmKG51bGwhPT1qLmV4cGxpY2l0KXtjb25zdCBxPXRoaXMuX2RlY29kZVRhZyhrLGouZXhwbGljaXQpO2lmKGsuaXNFcnJvcihxKSlyZXR1cm4gcTtrPXF9Y29u''@;'; put 'put ''c3QgVT1rLm9mZnNldDtpZihudWxsPT09ai51c2UmJm51bGw9PT1qLmNob2ljZSl7bGV0IHE7ai5hbnkmJihxPWsuc2F2ZSgpKTtjb25zdCBlZT10aGlzLl9kZWNvZGVUYWcoayxudWxsIT09ai5pbXBsaWNpdD9qLmltcGxpY2l0OmoudGFnLGouYW55KTtpZihrLmlzRXJyb3IoZWUpKXJldHVy''@;'; put 'put ''biBlZTtqLmFueT9WPWsucmF3KHEpOms9ZWV9aWYoRSYmRS50cmFjayYmbnVsbCE9PWoudGFnJiZFLnRyYWNrKGsucGF0aCgpLFUsay5sZW5ndGgsInRhZ2dlZCIpLEUmJkUudHJhY2smJm51bGwhPT1qLnRhZyYmRS50cmFjayhrLnBhdGgoKSxrLm9mZnNldCxrLmxlbmd0aCwiY29udGVudCIp''@;'; put 'put ''LGouYW55fHwoVj1udWxsPT09ai5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhqLnRhZyxrLEUpOnRoaXMuX2RlY29kZUNob2ljZShrLEUpKSxrLmlzRXJyb3IoVikpcmV0dXJuIFY7aWYoIWouYW55JiZudWxsPT09ai5jaG9pY2UmJm51bGwhPT1qLmNoaWxkcmVuJiZqLmNoaWxkcmVuLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oZWUpe2VlLl9kZWNvZGUoayxFKX0pLGouY29udGFpbnMmJigib2N0c3RyIj09PWoudGFnfHwiYml0c3RyIj09PWoudGFnKSl7Y29uc3QgcT1uZXcgbShWKTtWPXRoaXMuX2dldFVzZShqLmNvbnRhaW5zLGsuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKHEsRSl9''@;'; put 'put ''fXJldHVybiBqLm9iaiYmQiYmKFY9ay5sZWF2ZU9iamVjdChYKSksbnVsbD09PWoua2V5fHxudWxsPT09ViYmITAhPT1CP251bGwhPT1ZJiZrLmV4aXRLZXkoWSk6ay5sZWF2ZUtleShZLGoua2V5LFYpLFZ9LHoucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKGssRSxqKXtjb25z''@;'; put 'put ''dCBWPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PWt8fCJzZXQiPT09az9udWxsOiJzZXFvZiI9PT1rfHwic2V0b2YiPT09az90aGlzLl9kZWNvZGVMaXN0KEUsayxWLmFyZ3NbMF0saik6L3N0ciQvLnRlc3Qoayk/dGhpcy5fZGVjb2RlU3RyKEUsayxqKToib2JqaWQiPT09ayYmVi5h''@;'; put 'put ''cmdzP3RoaXMuX2RlY29kZU9iamlkKEUsVi5hcmdzWzBdLFYuYXJnc1sxXSxqKToib2JqaWQiPT09az90aGlzLl9kZWNvZGVPYmppZChFLG51bGwsbnVsbCxqKToiZ2VudGltZSI9PT1rfHwidXRjdGltZSI9PT1rP3RoaXMuX2RlY29kZVRpbWUoRSxrLGopOiJudWxsXyI9PT1rP3RoaXMuX2Rl''@;'; put 'put ''Y29kZU51bGwoRSxqKToiYm9vbCI9PT1rP3RoaXMuX2RlY29kZUJvb2woRSxqKToib2JqRGVzYyI9PT1rP3RoaXMuX2RlY29kZVN0cihFLGssaik6ImludCI9PT1rfHwiZW51bSI9PT1rP3RoaXMuX2RlY29kZUludChFLFYuYXJncyYmVi5hcmdzWzBdLGopOm51bGwhPT1WLnVzZT90aGlzLl9n''@;'; put 'put ''ZXRVc2UoVi51c2UsRS5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoRSxqKTpFLmVycm9yKCJ1bmtub3duIHRhZzogIitrKX0sei5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBqLnVzZURlY29kZXI9dGhpcy5fdXNlKGss''@;'; put 'put ''RSksbGUobnVsbD09PWoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksai51c2VEZWNvZGVyPWoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLGouaW1wbGljaXQhPT1qLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKGoudXNlRGVjb2Rlcj1qLnVzZURlY29k''@;'; put 'put ''ZXIuY2xvbmUoKSxqLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1qLmltcGxpY2l0KSxqLnVzZURlY29kZXJ9LHoucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oayxFKXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgVj1udWxsLEI9ITE7cmV0dXJuIE9iamVjdC5r''@;'; put 'put ''ZXlzKGouY2hvaWNlKS5zb21lKGZ1bmN0aW9uKFkpe2NvbnN0IFg9ay5zYXZlKCksVT1qLmNob2ljZVtZXTt0cnl7Y29uc3QgcT1VLl9kZWNvZGUoayxFKTtpZihrLmlzRXJyb3IocSkpcmV0dXJuITE7Vj17dHlwZTpZLHZhbHVlOnF9LEI9ITB9Y2F0Y2h7cmV0dXJuIGsucmVzdG9yZShYKSwh''@;'; put 'put ''MX1yZXR1cm4hMH0sdGhpcyksQj9WOmsuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSx6LnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IHgoayx0aGlzLnJlcG9ydGVyKX0sei5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihrLEUsail7''@;'; put 'put ''Y29uc3QgVj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbCE9PVYuZGVmYXVsdCYmVi5kZWZhdWx0PT09aylyZXR1cm47Y29uc3QgQj10aGlzLl9lbmNvZGVWYWx1ZShrLEUsaik7cmV0dXJuIHZvaWQgMD09PUJ8fHRoaXMuX3NraXBEZWZhdWx0KEIsRSxqKT92b2lkIDA6Qn0sei5wcm90b3R5cGUu''@;'; put 'put ''X2VuY29kZVZhbHVlPWZ1bmN0aW9uKGssRSxqKXtjb25zdCBWPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vi5wYXJlbnQpcmV0dXJuIFYuY2hpbGRyZW5bMF0uX2VuY29kZShrLEV8fG5ldyBhZSk7bGV0IEI9bnVsbDtpZih0aGlzLnJlcG9ydGVyPUUsVi5vcHRpb25hbCYmdm9pZCAwPT09''@;'; put 'put ''ayl7aWYobnVsbD09PVYuZGVmYXVsdClyZXR1cm47az1WLmRlZmF1bHR9bGV0IFk9bnVsbCxYPSExO2lmKFYuYW55KUI9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihrKTtlbHNlIGlmKFYuY2hvaWNlKUI9dGhpcy5fZW5jb2RlQ2hvaWNlKGssRSk7ZWxzZSBpZihWLmNvbnRhaW5zKVk9dGhp''@;'; put 'put ''cy5fZ2V0VXNlKFYuY29udGFpbnMsaikuX2VuY29kZShrLEUpLFg9ITA7ZWxzZSBpZihWLmNoaWxkcmVuKVk9Vi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oVSl7aWYoIm51bGxfIj09PVUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIFUuX2VuY29kZShudWxsLEUsayk7aWYobnVsbD09PVUuX2Jhc2VT''@;'; put 'put ''dGF0ZS5rZXkpcmV0dXJuIEUuZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7Y29uc3QgcT1FLmVudGVyS2V5KFUuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgaylyZXR1cm4gRS5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0''@;'; put 'put ''Iik7Y29uc3QgZWU9VS5fZW5jb2RlKGtbVS5fYmFzZVN0YXRlLmtleV0sRSxrKTtyZXR1cm4gRS5sZWF2ZUtleShxKSxlZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBVfSksWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFkpO2Vsc2UgaWYoInNlcW9mIj09PVYudGFnfHwi''@;'; put 'put ''c2V0b2YiPT09Vi50YWcpe2lmKCFWLmFyZ3N8fDEhPT1WLmFyZ3MubGVuZ3RoKXJldHVybiBFLmVycm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrVi50YWcpO2lmKCFBcnJheS5pc0FycmF5KGspKXJldHVybiBFLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7''@;'; put 'put ''Y29uc3QgVT10aGlzLmNsb25lKCk7VS5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGsubWFwKGZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0saykuX2VuY29kZShxLEUpfSxVKSl9ZWxzZSBu''@;'; put 'put ''dWxsIT09Vi51c2U/Qj10aGlzLl9nZXRVc2UoVi51c2UsaikuX2VuY29kZShrLEUpOihZPXRoaXMuX2VuY29kZVByaW1pdGl2ZShWLnRhZyxrKSxYPSEwKTtpZighVi5hbnkmJm51bGw9PT1WLmNob2ljZSl7Y29uc3QgVT1udWxsIT09Vi5pbXBsaWNpdD9WLmltcGxpY2l0OlYudGFnLHE9bnVs''@;'; put 'put ''bD09PVYuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1VP251bGw9PT1WLnVzZSYmRS5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVYudXNlJiYoQj10aGlzLl9lbmNvZGVDb21wb3NpdGUoVSxYLHEsWSkpfXJldHVybiBu''@;'; put 'put ''dWxsIT09Vi5leHBsaWNpdCYmKEI9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKFYuZXhwbGljaXQsITEsImNvbnRleHQiLEIpKSxCfSx6LnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGUsVj1qLmNob2ljZVtrLnR5cGVdO3JldHVybiBW''@;'; put 'put ''fHxsZSghMSxrLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhqLmNob2ljZSkpKSxWLl9lbmNvZGUoay52YWx1ZSxFKX0sei5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO2lmKC9z''@;'; put 'put ''dHIkLy50ZXN0KGspKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoRSxrKTtpZigib2JqaWQiPT09ayYmai5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChFLGoucmV2ZXJzZUFyZ3NbMF0sai5hcmdzWzFdKTtpZigib2JqaWQiPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoRSxudWxs''@;'; put 'put ''LG51bGwpO2lmKCJnZW50aW1lIj09PWt8fCJ1dGN0aW1lIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoRSxrKTtpZigibnVsbF8iPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09a3x8ImVudW0iPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlSW50KEUsai5hcmdz''@;'; put 'put ''JiZqLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1rKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEUpO2lmKCJvYmpEZXNjIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZVN0cihFLGspO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK2spfSx6LnByb3RvdHlwZS5faXNOdW1z''@;'; put 'put ''dHI9ZnVuY3Rpb24oayl7cmV0dXJuL15bMC05IF0qJC8udGVzdChrKX0sei5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oayl7cmV0dXJuL15bQS1aYS16MC05ICcoKSssLS4vOj0/XSokLy50ZXN0KGspfX0sOTU2ODQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYo''@;'; put 'put ''NjY2OTgpO2Z1bmN0aW9uIHgobGUpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpsZXx8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBtKGxlLE0pe3RoaXMucGF0aD1sZSx0aGlzLnJldGhyb3coTSl9SWUuYj14LHgucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rp''@;'; put 'put ''b24oTSl7cmV0dXJuIE0gaW5zdGFuY2VvZiBtfSx4LnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7Y29uc3QgTT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6TS5vYmoscGF0aExlbjpNLnBhdGgubGVuZ3RofX0seC5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihNKXtjb25zdCBP''@;'; put 'put ''PXRoaXMuX3JlcG9ydGVyU3RhdGU7Ty5vYmo9TS5vYmosTy5wYXRoPU8ucGF0aC5zbGljZSgwLE0ucGF0aExlbil9LHgucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChNKX0seC5wcm90b3R5cGUuZXhpdEtleT1mdW5j''@;'; put 'put ''dGlvbihNKXtjb25zdCBPPXRoaXMuX3JlcG9ydGVyU3RhdGU7Ty5wYXRoPU8ucGF0aC5zbGljZSgwLE0tMSl9LHgucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKE0sTyxSKXtjb25zdCB6PXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KE0pLG51bGwhPT16Lm9iaiYmKHoub2Jq''@;'; put 'put ''W09dPVIpfSx4LnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LHgucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7Y29uc3QgTT10aGlzLl9yZXBvcnRlclN0YXRlLE89TS5vYmo7cmV0dXJuIE0ub2JqPXt9''@;'; put 'put ''LE99LHgucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKE0pe2NvbnN0IE89dGhpcy5fcmVwb3J0ZXJTdGF0ZSxSPU8ub2JqO3JldHVybiBPLm9iaj1NLFJ9LHgucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKE0pe2xldCBPO2NvbnN0IFI9dGhpcy5fcmVwb3J0ZXJTdGF0ZSx6PU0gaW5z''@;'; put 'put ''dGFuY2VvZiBtO2lmKE89ej9NOm5ldyBtKFIucGF0aC5tYXAoZnVuY3Rpb24oSyl7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5KEspKyJdIn0pLmpvaW4oIiIpLE0ubWVzc2FnZXx8TSxNLnN0YWNrKSwhUi5vcHRpb25zLnBhcnRpYWwpdGhyb3cgTztyZXR1cm4genx8Ui5lcnJvcnMucHVzaChP''@;'; put 'put ''KSxPfSx4LnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uKE0pe2NvbnN0IE89dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gTy5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3IoTSk/bnVsbDpNLGVycm9yczpPLmVycm9yc306TX0sYWUobSxFcnJvciksbS5wcm90b3R5''@;'; put 'put ''cGUucmV0aHJvdz1mdW5jdGlvbihNKXtpZih0aGlzLm1lc3NhZ2U9TSsiIGF0OiAiKyh0aGlzLnBhdGh8fCIoc2hhbGxvdykiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxtKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRo''@;'; put 'put ''aXMubWVzc2FnZSl9Y2F0Y2goTyl7dGhpcy5zdGFjaz1PLnN0YWNrfXJldHVybiB0aGlzfX0sNjUwODY6KGF0LEllKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBGKGFlKXtjb25zdCB4PXt9O3JldHVybiBPYmplY3Qua2V5cyhhZSkuZm9yRWFjaChmdW5jdGlvbihtKXsoMHxtKT09bSYmKG18''@;'; put 'put ''PTApLHhbYWVbbV1dPW19KSx4fUllLnRhZ0NsYXNzPXswOiJ1bml2ZXJzYWwiLDE6ImFwcGxpY2F0aW9uIiwyOiJjb250ZXh0IiwzOiJwcml2YXRlIn0sSWUudGFnQ2xhc3NCeU5hbWU9RihJZS50YWdDbGFzcyksSWUudGFnPXswOiJlbmQiLDE6ImJvb2wiLDI6ImludCIsMzoiYml0c3RyIiw0''@;'; put 'put ''OiJvY3RzdHIiLDU6Im51bGxfIiw2OiJvYmppZCIsNzoib2JqRGVzYyIsODoiZXh0ZXJuYWwiLDk6InJlYWwiLDEwOiJlbnVtIiwxMToiZW1iZWQiLDEyOiJ1dGY4c3RyIiwxMzoicmVsYXRpdmVPaWQiLDE2OiJzZXEiLDE3OiJzZXQiLDE4OiJudW1zdHIiLDE5OiJwcmludHN0ciIsMjA6InQ2''@;'; put 'put ''MXN0ciIsMjE6InZpZGVvc3RyIiwyMjoiaWE1c3RyIiwyMzoidXRjdGltZSIsMjQ6ImdlbnRpbWUiLDI1OiJncmFwaHN0ciIsMjY6ImlzbzY0NnN0ciIsMjc6ImdlbnN0ciIsMjg6InVuaXN0ciIsMjk6ImNoYXJzdHIiLDMwOiJibXBzdHIifSxJZS50YWdCeU5hbWU9RihJZS50YWcpfSw0NDE1''@;'; put 'put ''NTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9SWU7YWUuX3JldmVyc2U9ZnVuY3Rpb24obSl7Y29uc3QgbGU9e307cmV0dXJuIE9iamVjdC5rZXlzKG0pLmZvckVhY2goZnVuY3Rpb24oTSl7KDB8TSk9PU0mJihNfD0wKSxsZVttW01dXT1NfSksbGV9LGFlLmRlcj1GKDY1MDg2''@;'; put 'put ''KX0sOTY4MzU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9Rig1MDQ3KSxtPUYoNzU3MjApLkMsbGU9Rig1ODUzMyksTT1GKDY1MDg2KTtmdW5jdGlvbiBPKEkpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1JLm5hbWUsdGhpcy5lbnRpdHk9SSx0aGlzLnRy''@;'; put 'put ''ZWU9bmV3IFIsdGhpcy50cmVlLl9pbml0KEkuYm9keSl9ZnVuY3Rpb24gUihJKXtsZS5jYWxsKHRoaXMsImRlciIsSSl9ZnVuY3Rpb24geihJLGspe2xldCBFPUkucmVhZFVJbnQ4KGspO2lmKEkuaXNFcnJvcihFKSlyZXR1cm4gRTtjb25zdCBqPU0udGFnQ2xhc3NbRT4+Nl0sVj0wPT0oMzIm''@;'; put 'put ''RSk7aWYoMzE9PSgzMSZFKSl7bGV0IFk9RTtmb3IoRT0wOzEyOD09KDEyOCZZKTspe2lmKFk9SS5yZWFkVUludDgoayksSS5pc0Vycm9yKFkpKXJldHVybiBZO0U8PD03LEV8PTEyNyZZfX1lbHNlIEUmPTMxO3JldHVybntjbHM6aixwcmltaXRpdmU6Vix0YWc6RSx0YWdTdHI6TS50YWdbRV19''@;'; put 'put ''fWZ1bmN0aW9uIEsoSSxrLEUpe2xldCBqPUkucmVhZFVJbnQ4KEUpO2lmKEkuaXNFcnJvcihqKSlyZXR1cm4gajtpZighayYmMTI4PT09ailyZXR1cm4gbnVsbDtpZighKDEyOCZqKSlyZXR1cm4gajtjb25zdCBWPTEyNyZqO2lmKFY+NClyZXR1cm4gSS5lcnJvcigibGVuZ3RoIG9jdGVjdCBp''@;'; put 'put ''cyB0b28gbG9uZyIpO2o9MDtmb3IobGV0IEI9MDtCPFY7QisrKXtqPDw9ODtjb25zdCBZPUkucmVhZFVJbnQ4KEUpO2lmKEkuaXNFcnJvcihZKSlyZXR1cm4gWTtqfD1ZfXJldHVybiBqfWF0LmV4cG9ydHM9TyxPLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gbS5pc0Rl''@;'; put 'put ''Y29kZXJCdWZmZXIoayl8fChrPW5ldyBtKGssRSkpLHRoaXMudHJlZS5fZGVjb2RlKGssRSl9LGFlKFIsbGUpLFIucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKGssRSxqKXtpZihrLmlzRW1wdHkoKSlyZXR1cm4hMTtjb25zdCBWPWsuc2F2ZSgpLEI9eihrLCdGYWlsZWQgdG8gcGVlayB0''@;'; put 'put ''YWc6ICInK0UrJyInKTtyZXR1cm4gay5pc0Vycm9yKEIpP0I6KGsucmVzdG9yZShWKSxCLnRhZz09PUV8fEIudGFnU3RyPT09RXx8Qi50YWdTdHIrIm9mIj09PUV8fGopfSxSLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKGssRSxqKXtjb25zdCBWPXooaywnRmFpbGVkIHRvIGRlY29k''@;'; put 'put ''ZSB0YWcgb2YgIicrRSsnIicpO2lmKGsuaXNFcnJvcihWKSlyZXR1cm4gVjtsZXQgQj1LKGssVi5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mICInK0UrJyInKTtpZihrLmlzRXJyb3IoQikpcmV0dXJuIEI7aWYoIWomJlYudGFnIT09RSYmVi50YWdTdHIhPT1FJiZWLnRhZ1N0''@;'; put 'put ''cisib2YiIT09RSlyZXR1cm4gay5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRhZzogIicrRSsnIicpO2lmKFYucHJpbWl0aXZlfHxudWxsIT09QilyZXR1cm4gay5za2lwKEIsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytFKyciJyk7Y29uc3QgWT1rLnNhdmUoKSxYPXRoaXMuX3NraXBV''@;'; put 'put ''bnRpbEVuZChrLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBrLmlzRXJyb3IoWCk/WDooQj1rLm9mZnNldC1ZLm9mZnNldCxrLnJlc3RvcmUoWSksay5za2lwKEIsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytFKyci''@;'; put 'put ''JykpfSxSLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKGssRSl7Zm9yKDs7KXtjb25zdCBqPXooayxFKTtpZihrLmlzRXJyb3IoaikpcmV0dXJuIGo7Y29uc3QgVj1LKGssai5wcmltaXRpdmUsRSk7aWYoay5pc0Vycm9yKFYpKXJldHVybiBWO2xldCBCO2lmKEI9ai5wcmltaXRp''@;'; put 'put ''dmV8fG51bGwhPT1WP2suc2tpcChWKTp0aGlzLl9za2lwVW50aWxFbmQoayxFKSxrLmlzRXJyb3IoQikpcmV0dXJuIEI7aWYoImVuZCI9PT1qLnRhZ1N0cilicmVha319LFIucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKGssRSxqLFYpe2NvbnN0IEI9W107Zm9yKDshay5pc0VtcHR5''@;'; put 'put ''KCk7KXtjb25zdCBZPXRoaXMuX3BlZWtUYWcoaywiZW5kIik7aWYoay5pc0Vycm9yKFkpKXJldHVybiBZO2NvbnN0IFg9ai5kZWNvZGUoaywiZGVyIixWKTtpZihrLmlzRXJyb3IoWCkmJlkpYnJlYWs7Qi5wdXNoKFgpfXJldHVybiBCfSxSLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9u''@;'; put 'put ''KGssRSl7aWYoImJpdHN0ciI9PT1FKXtjb25zdCBqPWsucmVhZFVJbnQ4KCk7cmV0dXJuIGsuaXNFcnJvcihqKT9qOnt1bnVzZWQ6aixkYXRhOmsucmF3KCl9fWlmKCJibXBzdHIiPT09RSl7Y29uc3Qgaj1rLnJhdygpO2lmKGoubGVuZ3RoJTI9PTEpcmV0dXJuIGsuZXJyb3IoIkRlY29kaW5n''@;'; put 'put ''IG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoIik7bGV0IFY9IiI7Zm9yKGxldCBCPTA7QjxqLmxlbmd0aC8yO0IrKylWKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGoucmVhZFVJbnQxNkJFKDIqQikpO3JldHVybiBWfWlmKCJudW1zdHIiPT09RSl7Y29uc3Qgaj1rLnJhdygp''@;'; put 'put ''LnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihqKT9qOmsuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfWlmKCJvY3RzdHIiPT09RSlyZXR1cm4gay5yYXcoKTtpZigib2JqRGVzYyI9PT1FKXJldHVy''@;'; put 'put ''biBrLnJhdygpO2lmKCJwcmludHN0ciI9PT1FKXtjb25zdCBqPWsucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoaik/ajprLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVy''@;'; put 'put ''bi9zdHIkLy50ZXN0KEUpP2sucmF3KCkudG9TdHJpbmcoKTprLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitFKyIgdW5zdXBwb3J0ZWQiKX0sUi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKGssRSxqKXtsZXQgVjtjb25zdCBCPVtdO2xldCBZPTAsWD0wO2Zvcig7''@;'; put 'put ''IWsuaXNFbXB0eSgpOylYPWsucmVhZFVJbnQ4KCksWTw8PTcsWXw9MTI3JlgsMTI4Jlh8fChCLnB1c2goWSksWT0wKTtpZigxMjgmWCYmQi5wdXNoKFkpLFY9aj9COltCWzBdLzQwfDAsQlswXSU0MF0uY29uY2F0KEIuc2xpY2UoMSkpLEUpe2xldCBlZT1FW1Yuam9pbigiICIpXTt2b2lkIDA9''@;'; put 'put ''PT1lZSYmKGVlPUVbVi5qb2luKCIuIildKSx2b2lkIDAhPT1lZSYmKFY9ZWUpfXJldHVybiBWfSxSLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9ay5yYXcoKS50b1N0cmluZygpO2xldCBWLEIsWSxYLFUscTtpZigiZ2VudGltZSI9PT1FKVY9MHxqLnNsaWNl''@;'; put 'put ''KDAsNCksQj0wfGouc2xpY2UoNCw2KSxZPTB8ai5zbGljZSg2LDgpLFg9MHxqLnNsaWNlKDgsMTApLFU9MHxqLnNsaWNlKDEwLDEyKSxxPTB8ai5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1FKXJldHVybiBrLmVycm9yKCJEZWNvZGluZyAiK0UrIiB0aW1lIGlzIG5vdCBzdXBw''@;'; put 'put ''b3J0ZWQgeWV0Iik7Vj0wfGouc2xpY2UoMCwyKSxCPTB8ai5zbGljZSgyLDQpLFk9MHxqLnNsaWNlKDQsNiksWD0wfGouc2xpY2UoNiw4KSxVPTB8ai5zbGljZSg4LDEwKSxxPTB8ai5zbGljZSgxMCwxMiksVj1WPDcwPzJlMytWOjE5MDArVn1yZXR1cm4gRGF0ZS5VVEMoVixCLTEsWSxYLFUs''@;'; put 'put ''cSwwKX0sUi5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sUi5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oayl7Y29uc3QgRT1rLnJlYWRVSW50OCgpO3JldHVybiBrLmlzRXJyb3IoRSk/RTowIT09RX0sUi5wcm90b3R5cGUuX2RlY29kZUludD1m''@;'; put 'put ''dW5jdGlvbihrLEUpe2NvbnN0IGo9ay5yYXcoKTtsZXQgVj1uZXcgeChqKTtyZXR1cm4gRSYmKFY9RVtWLnRvU3RyaW5nKDEwKV18fFYpLFZ9LFIucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oayxFKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgayYmKGs9ayhFKSksay5fZ2V0RGVjb2Rlcigi''@;'; put 'put ''ZGVyIikudHJlZX19LDcxMzAxOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1JZTthZS5kZXI9Rig5NjgzNSksYWUucGVtPUYoMjIwOCl9LDIyMDg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9RigyNDE3OSkuQnVmZmVyLG09Rig5NjgzNSk7''@;'; put 'put ''ZnVuY3Rpb24gbGUoTSl7bS5jYWxsKHRoaXMsTSksdGhpcy5lbmM9InBlbSJ9YWUobGUsbSksYXQuZXhwb3J0cz1sZSxsZS5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKE8sUil7Y29uc3Qgej1PLnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksSz1SLmxhYmVsLnRvVXBwZXJDYXNlKCks''@;'; put 'put ''ST0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC87bGV0IGs9LTEsRT0tMTtmb3IobGV0IEI9MDtCPHoubGVuZ3RoO0IrKyl7Y29uc3QgWT16W0JdLm1hdGNoKEkpO2lmKG51bGwhPT1ZJiZZWzJdPT09Syl7aWYoLTEhPT1rKXtpZigiRU5EIiE9PVlbMV0pYnJlYWs7RT1CO2JyZWFr''@;'; put 'put ''fWlmKCJCRUdJTiIhPT1ZWzFdKWJyZWFrO2s9Qn19aWYoLTE9PT1rfHwtMT09PUUpdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK0spO2NvbnN0IGo9ei5zbGljZShrKzEsRSkuam9pbigiIik7ai5yZXBsYWNlKC9bXmEtejAtOSsvPV0rL2dpLCIiKTtjb25z''@;'; put 'put ''dCBWPXguZnJvbShqLCJiYXNlNjQiKTtyZXR1cm4gbS5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxWLFIpfX0sNjkxMzM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9RigyNDE3OSkuQnVmZmVyLG09Rig1ODUzMyksbGU9Rig2NTA4Nik7ZnVuY3Rpb24g''@;'; put 'put ''TShLKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Sy5uYW1lLHRoaXMuZW50aXR5PUssdGhpcy50cmVlPW5ldyBPLHRoaXMudHJlZS5faW5pdChLLmJvZHkpfWZ1bmN0aW9uIE8oSyl7bS5jYWxsKHRoaXMsImRlciIsSyl9ZnVuY3Rpb24gUihLKXtyZXR1cm4gSzwxMD8iMCIrSzpLfWF0LmV4''@;'; put 'put ''cG9ydHM9TSxNLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoSSxrKS5qb2luKCl9LGFlKE8sbSksTy5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihJLGssRSxqKXtjb25zdCBWPWZ1bmN0aW9uIHooSyxJLGssRSl7bGV0''@;'; put 'put ''IGo7aWYoInNlcW9mIj09PUs/Sz0ic2VxIjoic2V0b2YiPT09SyYmKEs9InNldCIpLGxlLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShLKSlqPWxlLnRhZ0J5TmFtZVtLXTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgS3x8KDB8SykhPT1LKXJldHVybiBFLmVycm9yKCJVbmtub3duIHRhZzog''@;'; put 'put ''IitLKTtqPUt9cmV0dXJuIGo+PTMxP0UuZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCIpOihJfHwoanw9MzIpLGp8PWxlLnRhZ0NsYXNzQnlOYW1lW2t8fCJ1bml2ZXJzYWwiXTw8NixqKX0oSSxrLEUsdGhpcy5yZXBvcnRlcik7aWYoai5sZW5ndGg8MTI4KXtj''@;'; put 'put ''b25zdCBYPXguYWxsb2MoMik7cmV0dXJuIFhbMF09VixYWzFdPWoubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW1gsal0pfWxldCBCPTE7Zm9yKGxldCBYPWoubGVuZ3RoO1g+PTI1NjtYPj49OClCKys7Y29uc3QgWT14LmFsbG9jKDIrQik7WVswXT1WLFlbMV09MTI4fEI7Zm9y''@;'; put 'put ''KGxldCBYPTErQixVPWoubGVuZ3RoO1U+MDtYLS0sVT4+PTgpWVtYXT0yNTUmVTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbWSxqXSl9LE8ucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24oSSxrKXtpZigiYml0c3RyIj09PWspcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29k''@;'; put 'put ''ZXJCdWZmZXIoWzB8SS51bnVzZWQsSS5kYXRhXSk7aWYoImJtcHN0ciI9PT1rKXtjb25zdCBFPXguYWxsb2MoMipJLmxlbmd0aCk7Zm9yKGxldCBqPTA7ajxJLmxlbmd0aDtqKyspRS53cml0ZVVJbnQxNkJFKEkuY2hhckNvZGVBdChqKSwyKmopO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVy''@;'; put 'put ''QnVmZmVyKEUpfXJldHVybiJudW1zdHIiPT09az90aGlzLl9pc051bXN0cihJKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEkpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlIik6InBy''@;'; put 'put ''aW50c3RyIj09PWs/dGhpcy5faXNQcmludHN0cihJKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEkpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMs''@;'; put 'put ''IGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrIik6L3N0ciQvLnRlc3Qoayl8fCJvYmpEZXNjIj09PWs/dGhpcy5f''@;'; put 'put ''Y3JlYXRlRW5jb2RlckJ1ZmZlcihJKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitrKyIgdW5zdXBwb3J0ZWQiKX0sTy5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKEksayxFKXtpZigic3RyaW5nIj09dHlwZW9mIEkpe2lmKCFrKXJldHVy''@;'; put 'put ''biB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYoIWsuaGFzT3duUHJvcGVydHkoSSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7ST1rW0ldLnNwbGl0''@;'; put 'put ''KC9bXHMuXSsvZyk7Zm9yKGxldCBZPTA7WTxJLmxlbmd0aDtZKyspSVtZXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoSSkpe0k9SS5zbGljZSgpO2ZvcihsZXQgWT0wO1k8SS5sZW5ndGg7WSsrKUlbWV18PTB9aWYoIUFycmF5LmlzQXJyYXkoSSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJy''@;'; put 'put ''b3IoIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShJKSk7aWYoIUUpe2lmKElbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtJLnNwbGljZSgwLDIsNDAq''@;'; put 'put ''SVswXStJWzFdKX1sZXQgaj0wO2ZvcihsZXQgWT0wO1k8SS5sZW5ndGg7WSsrKXtsZXQgWD1JW1ldO2ZvcihqKys7WD49MTI4O1g+Pj03KWorK31jb25zdCBWPXguYWxsb2Moaik7bGV0IEI9Vi5sZW5ndGgtMTtmb3IobGV0IFk9SS5sZW5ndGgtMTtZPj0wO1ktLSl7bGV0IFg9SVtZXTtmb3Io''@;'; put 'put ''VltCLS1dPTEyNyZYOyhYPj49Nyk+MDspVltCLS1dPTEyOHwxMjcmWH1yZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihWKX0sTy5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oSSxrKXtsZXQgRTtjb25zdCBqPW5ldyBEYXRlKEkpO3JldHVybiJnZW50aW1lIj09PWs/RT1b''@;'; put 'put ''UihqLmdldFVUQ0Z1bGxZZWFyKCkpLFIoai5nZXRVVENNb250aCgpKzEpLFIoai5nZXRVVENEYXRlKCkpLFIoai5nZXRVVENIb3VycygpKSxSKGouZ2V0VVRDTWludXRlcygpKSxSKGouZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PWs/RT1bUihqLmdldFVUQ0Z1''@;'; put 'put ''bGxZZWFyKCklMTAwKSxSKGouZ2V0VVRDTW9udGgoKSsxKSxSKGouZ2V0VVRDRGF0ZSgpKSxSKGouZ2V0VVRDSG91cnMoKSksUihqLmdldFVUQ01pbnV0ZXMoKSksUihqLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK2srIiB0''@;'; put 'put ''aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKEUsIm9jdHN0ciIpfSxPLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sTy5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihJLGsp''@;'; put 'put ''e2lmKCJzdHJpbmciPT10eXBlb2YgSSl7aWYoIWspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighay5oYXNPd25Qcm9wZXJ0eShJKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1h''@;'; put 'put ''cCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoSSkpO0k9a1tJXX1pZigibnVtYmVyIiE9dHlwZW9mIEkmJiF4LmlzQnVmZmVyKEkpKXtjb25zdCBWPUkudG9BcnJheSgpOyFJLnNpZ24mJjEyOCZWWzBdJiZWLnVuc2hpZnQoMCksST14LmZyb20oVil9aWYoeC5pc0J1ZmZlcihJ''@;'; put 'put ''KSl7bGV0IFY9SS5sZW5ndGg7MD09PUkubGVuZ3RoJiZWKys7Y29uc3QgQj14LmFsbG9jKFYpO3JldHVybiBJLmNvcHkoQiksMD09PUkubGVuZ3RoJiYoQlswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpfWlmKEk8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVy''@;'; put 'put ''KEkpO2lmKEk8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLEldKTtsZXQgRT0xO2ZvcihsZXQgVj1JO1Y+PTI1NjtWPj49OClFKys7Y29uc3Qgaj1uZXcgQXJyYXkoRSk7Zm9yKGxldCBWPWoubGVuZ3RoLTE7Vj49MDtWLS0paltWXT0yNTUmSSxJPj49ODtyZXR1cm4g''@;'; put 'put ''MTI4JmpbMF0mJmoudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHguZnJvbShqKSl9LE8ucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEkpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEk/MjU1OjApfSxPLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9u''@;'; put 'put ''KEksayl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEkmJihJPUkoaykpLEkuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LE8ucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihJLGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGU7bGV0IFY7aWYobnVsbD09PWouZGVmYXVsdClyZXR1''@;'; put 'put ''cm4hMTtjb25zdCBCPUkuam9pbigpO2lmKHZvaWQgMD09PWouZGVmYXVsdEJ1ZmZlciYmKGouZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShqLmRlZmF1bHQsayxFKS5qb2luKCkpLEIubGVuZ3RoIT09ai5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoVj0wO1Y8Qi5s''@;'; put 'put ''ZW5ndGg7VisrKWlmKEJbVl0hPT1qLmRlZmF1bHRCdWZmZXJbVl0pcmV0dXJuITE7cmV0dXJuITB9fSwyMzY5MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9SWU7YWUuZGVyPUYoNjkxMzMpLGFlLnBlbT1GKDc5MDApfSw3OTAwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtj''@;'; put 'put ''b25zdCBhZT1GKDY2Njk4KSx4PUYoNjkxMzMpO2Z1bmN0aW9uIG0obGUpe3guY2FsbCh0aGlzLGxlKSx0aGlzLmVuYz0icGVtIn1hZShtLHgpLGF0LmV4cG9ydHM9bSxtLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oTSxPKXtjb25zdCB6PXgucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMs''@;'; put 'put ''TSkudG9TdHJpbmcoImJhc2U2NCIpLEs9WyItLS0tLUJFR0lOICIrTy5sYWJlbCsiLS0tLS0iXTtmb3IobGV0IEk9MDtJPHoubGVuZ3RoO0krPTY0KUsucHVzaCh6LnNsaWNlKEksSSs2NCkpO3JldHVybiBLLnB1c2goIi0tLS0tRU5EICIrTy5sYWJlbCsiLS0tLS0iKSxLLmpvaW4oIlxuIil9''@;'; put 'put ''fSw1MDQ3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShHLGIpe2lmKCFHKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEcsYil7Ry5zdXBlcl89Yjt2YXIgRD1mdW5jdGlvbigpe307RC5w''@;'; put 'put ''cm90b3R5cGU9Yi5wcm90b3R5cGUsRy5wcm90b3R5cGU9bmV3IEQsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9R31mdW5jdGlvbiBNKEcsYixEKXtpZihNLmlzQk4oRykpcmV0dXJuIEc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGws''@;'; put 'put ''bnVsbCE9PUcmJigoImxlIj09PWJ8fCJiZSI9PT1iKSYmKEQ9YixiPTEwKSx0aGlzLl9pbml0KEd8fDAsYnx8MTAsRHx8ImJlIikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0sTS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1''@;'; put 'put ''IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Rig4MDk1MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEcsYil7dmFyIEQ9Ry5jaGFyQ29kZUF0KGIpO3JldHVybiBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0QtODc6RC00OCYxNX1mdW5jdGlvbiB6''@;'; put 'put ''KEcsYixEKXt2YXIgSD1SKEcsRCk7cmV0dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0KSxIfWZ1bmN0aW9uIEsoRyxiLEQsSCl7Zm9yKHZhciBOPTAsZz1NYXRoLm1pbihHLmxlbmd0aCxEKSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMpLTQ4O04qPUgsTis9Uz49NDk/Uy00''@;'; put 'put ''OSsxMDpTPj0xNz9TLTE3KzEwOlN9cmV0dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgTXx8bnVsbCE9PWImJiJvYmplY3QiPT10eXBlb2YgYiYmYi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoYi53b3Jkcyl9LE0u''@;'; put 'put ''bWF4PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKTwwP2I6RH0sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihi''@;'; put 'put ''LEQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoYixELEgpOyJoZXgiPT09RCYmKEQ9MTYpLG0oRD09PSgwfEQpJiZEPj0yJiZEPD0zNik7dmFyIE49MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKE4rKyx0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEpLE48Yi5sZW5ndGgmJigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixOLEgpOih0aGlzLl9wYXJzZUJhc2UoYixELE4pLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihiLEQs''@;'; put 'put ''SCl7YjwwJiYodGhpcy5uZWdhdGl2ZT0xLGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmJdLHRoaXMubGVuZ3RoPTEpOmI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShi''@;'; put 'put ''PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oYixELEgp''@;'; put 'put ''e2lmKG0oIm51bWJlciI9PXR5cGVvZiBiLmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoYi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0w''@;'; put 'put ''O048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xLGc9MDtOPj0wO04tPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+''@;'; put 'put ''Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihOPTAsZz0wO048Yi5sZW5ndGg7Tis9Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2''@;'; put 'put ''LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihiLEQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0''@;'; put 'put ''aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBTLGc9MCxDPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMTtOPj1EO04tPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRz''@;'; put 'put ''W0MrPTFdfD1TPj4+MjYpOmcrPTg7ZWxzZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9EKzE6RDtOPGIubGVuZ3RoO04rPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7dGhpcy5zdHJp''@;'; put 'put ''cCgpfSxNLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgTj0wLGc9MTtnPD02NzEwODg2MztnKj1EKU4rKztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxTPUMlTix2PU1hdGgubWluKEMsQy1T''@;'; put 'put ''KStILHA9MCx3PUg7dzx2O3crPU4pcD1LKGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0aCxEKSx3PTA7dzxTO3crKylKKj1E''@;'; put 'put ''O3RoaXMuaW11bG4oSiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9MDtEPHRoaXMu''@;'; put 'put ''bGVuZ3RoO0QrKyliLndvcmRzW0RdPXRoaXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5sZW5ndGgsYi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGIucmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoYiks''@;'; put 'put ''Yn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGI7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMu''@;'; put 'put ''bGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sTS5wcm90b3R5cGUuaW5z''@;'; put 'put ''cGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgST1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxrPVswLDAsMjUs''@;'; put 'put ''MTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEs''@;'; put 'put ''MzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1''@;'; put 'put ''MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVihHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5sZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7dmFyIE49MHxHLndvcmRzWzBdLGc9''@;'; put 'put ''MHxiLndvcmRzWzBdLEM9TipnLHY9Qy82NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4NjMmQztmb3IodmFyIHA9MTtwPEg7cCsrKXtmb3IodmFyIHc9dj4+PjI2LEo9NjcxMDg4NjMmdixuZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4KDAscC1HLmxlbmd0aCsxKTtkZTw9''@;'; put 'put ''bmU7ZGUrKyl3Kz0oQz0oTj0wfEcud29yZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2RlXSkrSikvNjcxMDg4NjR8MCxKPTY3MTA4ODYzJkM7RC53b3Jkc1twXT0wfEosdj0wfHd9cmV0dXJuIDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5zdHJpcCgpfU0ucHJvdG90eXBlLnRv''@;'; put 'put ''U3RyaW5nPWZ1bmN0aW9uKGIsRCl7dmFyIEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwxMCl8fCJoZXgiPT09Yil7SD0iIjtmb3IodmFyIE49MCxnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihTPDxOfGcpKS50b1N0cmluZygxNik7''@;'; put 'put ''SD0wIT0oZz1TPj4+MjQtTiYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP0lbNi12Lmxlbmd0aF0rditIOnYrSCwoTis9Mik+PTI2JiYoTi09MjYsQy0tKX1mb3IoMCE9PWcmJihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlJiYoSD0iLSIrSCksSH1pZihiPT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIgcD1rW2JdLHc9RVtiXTtIPSIiO3ZhciBKPXRoaXMuY2xvbmUoKTtmb3IoSi5uZWdhdGl2ZT0wOyFKLmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmluZyhiKTtIPShKPUouaWRpdm4odykp''@;'; put 'put ''LmlzWmVybygpP25lK0g6SVtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9''@;'; put 'put ''LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2IrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0''@;'; put 'put ''KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWI6Yn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxNLnBy''@;'; put 'put ''b3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1IiksdGhpcy50b0FycmF5TGlrZShPLGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxiLEQpfSxNLnByb3RvdHlwZS50b0Fy''@;'; put 'put ''cmF5TGlrZT1mdW5jdGlvbihiLEQsSCl7dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLE4pO20oTjw9ZywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7''@;'; put 'put ''dmFyIHYscCxDPSJsZSI9PT1ELFM9bmV3IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1twXT12O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8Zy1OO3ArKylTW3BdPTA7Zm9yKHA9''@;'; put 'put ''MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAtMV09dn1yZXR1cm4gU30sTS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlvbihiKXt2YXIgRD1iLEg9MDtyZXR1''@;'; put 'put ''cm4gRD49NDA5NiYmKEgrPTEzLEQ+Pj49MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+PTgmJihIKz00LEQ+Pj49NCksRD49MiYmKEgrPTIsRD4+Pj0yKSxIK0R9LE0ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4gMjY7dmFyIEQ9YixIPTA7cmV0dXJu''@;'; put 'put ''IDgxOTEmRHx8KEgrPTEzLEQ+Pj49MTMpLDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8fChIKz00LEQ+Pj49NCksMyZEfHwoSCs9MixEPj4+PTIpLDEmRHx8SCsrLEh9LE0ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3Ro''@;'; put 'put ''aXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29y''@;'; put 'put ''ZHNbRF0pO2lmKGIrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''P3RoaXMuYWJzKCkuaW5vdG4oYikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50ZXN0bihiLTEpP3RoaXMubm90bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5pc05lZz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LE0u''@;'; put 'put ''cHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRzW0RdO3JldHVybiB0aGlzLnN0cmlw''@;'; put 'put ''KCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGIpfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihiKTpiLmNs''@;'; put 'put ''b25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGIpOmIuY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihiKXt2YXIgRDtEPXRoaXMubGVuZ3Ro''@;'; put 'put ''PmIubGVuZ3RoP2I6dGhpcztmb3IodmFyIEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mYi53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9''@;'; put 'put ''PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0''@;'; put 'put ''aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoYik6Yi5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihiKXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRoaXMsSD1iKTooRD1iLEg9dGhpcyk7''@;'; put 'put ''Zm9yKHZhciBOPTA7TjxILmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dXkgud29yZHNbTl07aWYodGhpcyE9PUQpZm9yKDtOPEQubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5w''@;'; put 'put ''cm90b3R5cGUuaXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihiKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihiKTpiLmNsb25l''@;'; put 'put ''KCkuaXhvcih0aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGIpOmIuY2xvbmUoKS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGImJmI+PTApO3ZhciBEPTB8TWF0aC5jZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBhbmQoRCksSD4wJiZELS07Zm9yKHZhciBOPTA7TjxEO04rKyl0aGlzLndvcmRzW05dPTY3MTA4ODYzJn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndvcmRzW05dPX50aGlzLndvcmRzW05d''@;'; put 'put ''JjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihiKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgSD1iLzI2fDAsTj1i''@;'; put 'put ''JTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53b3Jkc1tIXXwxPDxOOnRoaXMud29yZHNbSF0mfigxPDxOKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09''@;'; put 'put ''Yi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSxiLm5lZ2F0aXZl''@;'; put 'put ''PTEsRC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6KEg9YixOPXRoaXMpO2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29yZHNbQ10pK2cpLGc9RD4+PjI2O2Zv''@;'; put 'put ''cig7MCE9PWcmJkM8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrZyksZz1EPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMp''@;'; put 'put ''Zm9yKDtDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiKXt2YXIgRDtyZXR1cm4gMCE9PWIubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsRD10aGlzLnN1YihiKSxiLm5l''@;'; put 'put ''Z2F0aXZlXj0xLEQpOjA9PT1iLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEQ9Yi5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEQpOnRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnBy''@;'; put 'put ''b3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIpe2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0aXZlPTA7dmFyIEQ9dGhpcy5pYWRkKGIpO3JldHVybiBiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChi''@;'; put 'put ''KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5jbXAoYik7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49YixnPXRoaXMpO2Zvcih2YXIgQz0w''@;'; put 'put ''LFM9MDtTPGcubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7Zm9yKDswIT09QyYmUzxOLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZE''@;'; put 'put ''O2lmKDA9PT1DJiZTPE4ubGVuZ3RoJiZOIT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Ti53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sTS5w''@;'; put 'put ''cm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihiKX07dmFyIEI9ZnVuY3Rpb24oYixELEgpe3ZhciB2LHAsdyxOPWIud29yZHMsZz1ELndvcmRzLEM9SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+Pj4xMyxmZT0wfE5bMV0seGU9ODE5''@;'; put 'put ''MSZmZSxMZT1mZT4+PjEzLEZlPTB8TlsyXSxPZT04MTkxJkZlLEJlPUZlPj4+MTMsV2U9MHxOWzNdLEtlPTgxOTEmV2UsWWU9V2U+Pj4xMyxKZT0wfE5bNF0sbHQ9ODE5MSZKZSxQZT1KZT4+PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxOWzZdLFhlPTgxOTEmcWUs''@;'; put 'put ''VWU9cWU+Pj4xMyxodD0wfE5bN10sTWU9ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4XSxpdD04MTkxJnplLHV0PXplPj4+MTMsTXQ9MHxOWzldLEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxvbj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8Z1sxXSxXbj04MTkxJmJuLGVuPWJu''@;'; put 'put ''Pj4+MTMsJG49MHxnWzJdLE5uPTgxOTEmJG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8Z1s0XSxfdD04MTkxJlh0LE50PVh0Pj4+MTMsdm49MHxnWzVdLHJ0PTgxOTEmdm4sSXQ9dm4+Pj4xMyxKdD0wfGdbNl0sRHQ9ODE5MSZKdCxwdD1KdD4+PjEz''@;'; put 'put ''LFl0PTB8Z1s3XSxMbj04MTkxJll0LHp0PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfGdbOV0sT249ODE5MSZCbiwkdD1Cbj4+PjEzO0gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBGbj0oUysodj1NYXRoLmltdWwo''@;'; put 'put ''bmUsQ24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVsKGRlLENuKXwwKSk8PDEzKXwwO1M9KCh3PU1hdGguaW11bChkZSxVdCkpKyhwPj4+MTMpfDApKyhGbj4+PjI2KXwwLEZuJj02NzEwODg2Myx2PU1hdGguaW11bCh4ZSxDbikscD0ocD1NYXRoLmltdWwo''@;'; put 'put ''eGUsVXQpKStNYXRoLmltdWwoTGUsQ24pfDAsdz1NYXRoLmltdWwoTGUsVXQpO3ZhciBuaT0oUysodj12K01hdGguaW11bChuZSxXbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwo''@;'; put 'put ''ZGUsZW4pfDApKyhwPj4+MTMpfDApKyhuaT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1hdGguaW11bChPZSxDbikscD0ocD1NYXRoLmltdWwoT2UsVXQpKStNYXRoLmltdWwoQmUsQ24pfDAsdz1NYXRoLmltdWwoQmUsVXQpLHY9ditNYXRoLmltdWwoeGUsV24pfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bCh4ZSxlbil8MCkrTWF0aC5pbXVsKExlLFduKXwwLHc9dytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIGxuPShTKyh2PXYrTWF0aC5pbXVsKG5lLE5uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxObil8MCkpPDwxMyl8MDtTPSgodz13K01h''@;'; put 'put ''dGguaW11bChkZSxmdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEtlLENuKSxwPShwPU1hdGguaW11bChLZSxVdCkpK01hdGguaW11bChZZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGguaW11bChPZSxXbil8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoQmUsV24pfDAsdz13K01hdGguaW11bChCZSxlbil8MCx2PXYrTWF0aC5pbXVsKHhlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChMZSxObil8MCx3PXcrTWF0aC5pbXVsKExlLGZ0KXwwO3ZhciBqbj0oUyso''@;'; put 'put ''dj12K01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHd0KXwwKStNYXRoLmltdWwoZGUsaG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2Myx2PU1hdGguaW11''@;'; put 'put ''bChsdCxDbikscD0ocD1NYXRoLmltdWwobHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAsdz1NYXRoLmltdWwoUGUsVXQpLHY9ditNYXRoLmltdWwoS2UsV24pfDAscD0ocD1wK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytNYXRoLmltdWwoWWUsZW4pfDAsdj12''@;'; put 'put ''K01hdGguaW11bChPZSxObil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoQmUsTm4pfDAsdz13K01hdGguaW11bChCZSxmdCl8MCx2PXYrTWF0aC5pbXVsKHhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChMZSxobil8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKExlLHd0KXwwO3ZhciBxcj0oUysodj12K01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLE50KXwwKStNYXRoLmltdWwoZGUsX3QpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDApKyhwPj4+MTMpfDApKyhxcj4+PjI2''@;'; put 'put ''KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChBZSxDbikscD0ocD1NYXRoLmltdWwoQWUsVXQpKStNYXRoLmltdWwoVGUsQ24pfDAsdz1NYXRoLmltdWwoVGUsVXQpLHY9ditNYXRoLmltdWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8MCkrTWF0aC5pbXVsKFBlLFduKXww''@;'; put 'put ''LHc9dytNYXRoLmltdWwoUGUsZW4pfDAsdj12K01hdGguaW11bChLZSxObil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsTm4pfDAsdz13K01hdGguaW11bChZZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usd3QpfDAp''@;'; put 'put ''K01hdGguaW11bChCZSxobil8MCx3PXcrTWF0aC5pbXVsKEJlLHd0KXwwLHY9ditNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1wK01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwLHc9dytNYXRoLmltdWwoTGUsTnQpfDA7dmFyIGdpPShTKyh2PXYrTWF0aC5pbXVsKG5lLHJ0''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsSXQpfDApK01hdGguaW11bChkZSxydCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxJdCl8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFhlLENuKSxwPShwPU1hdGgu''@;'; put 'put ''aW11bChYZSxVdCkpK01hdGguaW11bChVZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCksdj12K01hdGguaW11bChBZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGVuKXwwKStNYXRoLmltdWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2PXYrTWF0aC5pbXVsKGx0LE5uKXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxObil8MCx3PXcrTWF0aC5pbXVsKFBlLGZ0KXwwLHY9ditNYXRoLmltdWwoS2UsaG4pfDAscD0ocD1wK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytNYXRoLmltdWwoWWUsd3QpfDAsdj12''@;'; put 'put ''K01hdGguaW11bChPZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoQmUsX3QpfDAsdz13K01hdGguaW11bChCZSxOdCl8MCx2PXYrTWF0aC5pbXVsKHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsSXQpfDApK01hdGguaW11bChMZSxydCl8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKExlLEl0KXwwO3ZhciB4cj0oUysodj12K01hdGguaW11bChuZSxEdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwoZGUsRHQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2''@;'; put 'put ''KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChNZSxDbikscD0ocD1NYXRoLmltdWwoTWUsVXQpKStNYXRoLmltdWwoRGUsQ24pfDAsdz1NYXRoLmltdWwoRGUsVXQpLHY9ditNYXRoLmltdWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8MCkrTWF0aC5pbXVsKFVlLFduKXww''@;'; put 'put ''LHc9dytNYXRoLmltdWwoVWUsZW4pfDAsdj12K01hdGguaW11bChBZSxObil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwoVGUsTm4pfDAsdz13K01hdGguaW11bChUZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsd3QpfDAp''@;'; put 'put ''K01hdGguaW11bChQZSxobil8MCx3PXcrTWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1wK01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGguaW11bChPZSxydCl8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKE9lLEl0KXwwKStNYXRoLmltdWwoQmUscnQpfDAsdz13K01hdGguaW11bChCZSxJdCl8MCx2PXYrTWF0aC5pbXVsKHhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChMZSxEdCl8MCx3PXcrTWF0aC5pbXVsKExlLHB0KXwwO3ZhciBVaT0oUyso''@;'; put 'put ''dj12K01hdGguaW11bChuZSxMbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoZGUsTG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11''@;'; put 'put ''bChpdCxDbikscD0ocD1NYXRoLmltdWwoaXQsVXQpKStNYXRoLmltdWwodXQsQ24pfDAsdz1NYXRoLmltdWwodXQsVXQpLHY9ditNYXRoLmltdWwoTWUsV24pfDAscD0ocD1wK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytNYXRoLmltdWwoRGUsZW4pfDAsdj12''@;'; put 'put ''K01hdGguaW11bChYZSxObil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsTm4pfDAsdz13K01hdGguaW11bChVZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEFlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKFRlLHd0KXwwLHY9ditNYXRoLmltdWwobHQsX3QpfDAscD0ocD1wK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5pbXVsKFBlLF90KXwwLHc9dytNYXRoLmltdWwoUGUsTnQpfDAsdj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEl0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoWWUscnQpfDAsdz13K01hdGguaW11bChZZSxJdCl8MCx2PXYrTWF0aC5pbXVsKE9lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UscHQpfDApK01hdGguaW11bChCZSxEdCl8MCx3PXcrTWF0aC5pbXVsKEJlLHB0KXwwLHY9ditNYXRoLmltdWwoeGUsTG4pfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLExuKXwwLHc9dytNYXRoLmltdWwoTGUsenQpfDA7dmFyIEtyPShTKyh2PXYrTWF0aC5pbXVsKG5lLHhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8MCkpPDwxMyl8MDtTPSgodz13K01h''@;'; put 'put ''dGguaW11bChkZSxzbil8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LENuKSxwPShwPU1hdGguaW11bChIdCxVdCkpK01hdGguaW11bChQdCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGguaW11bChpdCxXbil8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwodXQsV24pfDAsdz13K01hdGguaW11bCh1dCxlbil8MCx2PXYrTWF0aC5pbXVsKE1lLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxObil8MCx3PXcrTWF0aC5pbXVsKERlLGZ0KXwwLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoWGUsaG4pfDAscD0ocD1wK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLHc9dytNYXRoLmltdWwoVWUsd3QpfDAsdj12K01hdGguaW11bChBZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsdz13K01hdGguaW11bChU''@;'; put 'put ''ZSxOdCl8MCx2PXYrTWF0aC5pbXVsKGx0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxydCl8MCx3PXcrTWF0aC5pbXVsKFBlLEl0KXwwLHY9ditNYXRoLmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoWWUscHQpfDAsdj12K01hdGguaW11bChPZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoQmUsTG4pfDAsdz13K01hdGguaW11bChCZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsc24p''@;'; put 'put ''fDApK01hdGguaW11bChMZSx4bil8MCx3PXcrTWF0aC5pbXVsKExlLHNuKXwwO3ZhciBubz0oUysodj12K01hdGguaW11bChuZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwoZGUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwo''@;'; put 'put ''ZGUsJHQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxXbikscD0ocD1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsdz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwoaXQsTm4pfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChpdCxmdCl8MCkrTWF0aC5pbXVsKHV0LE5uKXwwLHc9dytNYXRoLmltdWwodXQsZnQpfDAsdj12K01hdGguaW11bChNZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8MCx2PXYrTWF0aC5pbXVsKFhlLF90''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFVlLE50KXwwLHY9ditNYXRoLmltdWwoQWUscnQpfDAscD0ocD1wK01hdGguaW11bChBZSxJdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9dytNYXRoLmltdWwoVGUsSXQpfDAs''@;'; put 'put ''dj12K01hdGguaW11bChsdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsdz13K01hdGguaW11bChQZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEtlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxMbil8MCx3PXcr''@;'; put 'put ''TWF0aC5pbXVsKFllLHp0KXwwLHY9ditNYXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKEJlLHhuKXwwLHc9dytNYXRoLmltdWwoQmUsc24pfDA7dmFyIEZyPShTKyh2PXYrTWF0aC5pbXVsKHhlLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN''@;'; put 'put ''YXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChMZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEZyPj4+MjYpfDAsRnImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LE5uKSxwPShwPU1hdGguaW11bChIdCxmdCkpK01hdGguaW11bChQ''@;'; put 'put ''dCxObil8MCx3PU1hdGguaW11bChQdCxmdCksdj12K01hdGguaW11bChpdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHd0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsdz13K01hdGguaW11bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTnQp''@;'; put 'put ''fDApK01hdGguaW11bChEZSxfdCl8MCx3PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditNYXRoLmltdWwoWGUscnQpfDAscD0ocD1wK01hdGguaW11bChYZSxJdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsSXQpfDAsdj12K01hdGguaW11bChBZSxEdCl8MCxwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGguaW11bChUZSxwdCl8MCx2PXYrTWF0aC5pbXVsKGx0LExuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxMbil8MCx3PXcrTWF0aC5pbXVsKFBlLHp0KXwwLHY9ditNYXRo''@;'; put 'put ''LmltdWwoS2UseG4pfDAscD0ocD1wK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLHc9dytNYXRoLmltdWwoWWUsc24pfDA7dmFyIHFpPShTKyh2PXYrTWF0aC5pbXVsKE9lLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11''@;'; put 'put ''bChCZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChCZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LGhuKSxwPShwPU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8MCx3PU1hdGguaW11bChQdCx3dCks''@;'; put 'put ''dj12K01hdGguaW11bChpdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsdz13K01hdGguaW11bCh1dCxOdCl8MCx2PXYrTWF0aC5pbXVsKE1lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsSXQpfDApK01hdGguaW11bChEZSxydCl8MCx3PXcr''@;'; put 'put ''TWF0aC5pbXVsKERlLEl0KXwwLHY9ditNYXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01hdGguaW11bChYZSxwdCl8MCkrTWF0aC5pbXVsKFVlLER0KXwwLHc9dytNYXRoLmltdWwoVWUscHQpfDAsdj12K01hdGguaW11bChBZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoVGUsTG4pfDAsdz13K01hdGguaW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVsKGx0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCx3PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12K01hdGguaW11bChLZSxPbil8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoWWUsJHQpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxfdCkscD0ocD1NYXRoLmltdWwo''@;'; put 'put ''SHQsTnQpKStNYXRoLmltdWwoUHQsX3QpfDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditNYXRoLmltdWwoaXQscnQpfDAscD0ocD1wK01hdGguaW11bChpdCxJdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsSXQpfDAsdj12K01hdGguaW11bChNZSxEdCl8MCxwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGguaW11bChEZSxwdCl8MCx2PXYrTWF0aC5pbXVsKFhlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsenQpfDApK01hdGguaW11bChVZSxMbil8MCx3PXcrTWF0aC5pbXVsKFVlLHp0KXwwLHY9ditNYXRo''@;'; put 'put ''LmltdWwoQWUseG4pfDAscD0ocD1wK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLHc9dytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShTKyh2PXYrTWF0aC5pbXVsKGx0LE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11''@;'; put 'put ''bChQZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHJ0KSxwPShwPU1hdGguaW11bChIdCxJdCkpK01hdGguaW11bChQdCxydCl8MCx3PU1hdGguaW11bChQdCxJdCks''@;'; put 'put ''dj12K01hdGguaW11bChpdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LHB0KXwwKStNYXRoLmltdWwodXQsRHQpfDAsdz13K01hdGguaW11bCh1dCxwdCl8MCx2PXYrTWF0aC5pbXVsKE1lLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxMbil8MCx3PXcr''@;'; put 'put ''TWF0aC5pbXVsKERlLHp0KXwwLHY9ditNYXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhuKXwwLHc9dytNYXRoLmltdWwoVWUsc24pfDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN''@;'; put 'put ''YXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11bChUZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChUZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11bChIdCxwdCkpK01hdGguaW11bChQ''@;'; put 'put ''dCxEdCl8MCx3PU1hdGguaW11bChQdCxwdCksdj12K01hdGguaW11bChpdCxMbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwodXQsTG4pfDAsdz13K01hdGguaW11bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsc24p''@;'; put 'put ''fDApK01hdGguaW11bChEZSx4bil8MCx3PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBpbz0oUysodj12K01hdGguaW11bChYZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwo''@;'; put 'put ''VWUsJHQpfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxMbikscD0ocD1NYXRoLmltdWwoSHQsenQpKStNYXRoLmltdWwoUHQsTG4pfDAsdz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwoaXQseG4pfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChpdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24pfDA7dmFyIEdpPShTKyh2PXYrTWF0aC5pbXVsKE1lLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01h''@;'; put 'put ''dGguaW11bChEZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHhuKSxwPShwPU1hdGguaW11bChIdCxzbikpK01hdGguaW11bChQdCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShTKyh2PXYrTWF0aC5pbXVsKGl0LE9u''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoaXQsJHQpfDApK01hdGguaW11bCh1dCxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bCh1dCwkdCl8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0oUysodj1NYXRoLmltdWwoSHQsT24p''@;'; put 'put ''KXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LE9uKXwwKSk8PDEzKXwwO3JldHVybiBTPSgodz1NYXRoLmltdWwoUHQsJHQpKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1GbixDWzFdPW5pLENbMl09bG4sQ1szXT1qbixD''@;'; put 'put ''WzRdPXFyLENbNV09Z2ksQ1s2XT14cixDWzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEwXT1GcixDWzExXT1xaSxDWzEyXT1KaSxDWzEzXT1hbyxDWzE0XT1ybyxDWzE1XT1pbyxDWzE2XT1HaSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMsSC5sZW5ndGgrKyksSH07ZnVuY3Rp''@;'; put 'put ''b24gWChHLGIsRCl7cmV0dXJuKG5ldyBVKS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcsYil7dGhpcy54PUcsdGhpcy55PWJ9TWF0aC5pbXVsfHwoQj1WKSxNLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5sZW5ndGg7cmV0dXJuIEg9MTA9PT10''@;'; put 'put ''aGlzLmxlbmd0aCYmMTA9PT1iLmxlbmd0aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxiLEQpOk48MTAyND9mdW5jdGlvbiBZKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3IodmFyIEg9MCxOPTAsZz0wO2c8RC5s''@;'; put 'put ''ZW5ndGgtMTtnKyspe3ZhciBDPU47Tj0wO2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0aC5taW4oZyxiLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD12O3ArKyl7dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1twXSksZmU9NjcxMDg4NjMmZGU7Uz02''@;'; put 'put ''NzEwODg2MyYoZmU9ZmUrU3wwKSxOKz0oQz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSsoZmU+Pj4yNil8MCk+Pj4yNixDJj02NzEwODg2M31ELndvcmRzW2ddPVMsSD1DLEM9Tn1yZXR1cm4gMCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJpcCgpfSh0aGlzLGIsRCk6WCh0aGlz''@;'; put 'put ''LGIsRCksSH0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9TS5wcm90b3R5cGUuX2NvdW50Qml0cyhiKS0xLE49MDtOPGI7TisrKURbTl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rp''@;'; put 'put ''b24oYixELEgpe2lmKDA9PT1ifHxiPT09SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9MDtnPEQ7ZysrKU58PSgxJmIpPDxELWctMSxiPj49MTtyZXR1cm4gTn0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBTPTA7UzxDO1MrKylOW1NdPURbYltT''@;'; put 'put ''XV0sZ1tTXT1IW2JbU11dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixELEgsTixnLEMpe3RoaXMucGVybXV0ZShDLGIsRCxILE4sZyk7Zm9yKHZhciBTPTE7UzxnO1M8PD0xKWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJL3YpLHc9TWF0aC5zaW4oMipNYXRo''@;'; put 'put ''LlBJL3YpLEo9MDtKPGc7Sis9dilmb3IodmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUrKyl7dmFyIHhlPUhbSitmZV0sTGU9TltKK2ZlXSxGZT1IW0orZmUrU10sT2U9TltKK2ZlK1NdLEJlPW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09eGUrKEZlPUJlKSxOW0orZmVdPUxl''@;'; put 'put ''K09lLEhbSitmZStTXT14ZS1GZSxOW0orZmUrU109TGUtT2UsZmUhPT12JiYoQmU9cCpuZS13KmRlLGRlPXAqZGUrdypuZSxuZT1CZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEmSCxnPTA7Zm9yKEg9SC8yfDA7SDtI''@;'; put 'put ''Pj4+PTEpZysrO3JldHVybiAxPDxnKzErTn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGIsRCxIKXtpZighKEg8PTEpKWZvcih2YXIgTj0wO048SC8yO04rKyl7dmFyIGc9YltOXTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERbTl09LURbSC1OLTFdLERbSC1OLTFd''@;'; put 'put ''PS1nfX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTAsTj0wO048RC8yO04rKyl7dmFyIGc9ODE5MipNYXRoLnJvdW5kKGJbMipOKzFdL0QpK01hdGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZnLEg9Zzw2NzEwODg2ND8wOmcvNjcx''@;'; put 'put ''MDg4NjR8MH1yZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihiLEQsSCxOKXtmb3IodmFyIGc9MCxDPTA7QzxEO0MrKylIWzIqQ109ODE5MSYoZys9MHxiW0NdKSxIWzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihDPTIqRDtDPE47KytDKUhbQ109MDtt''@;'; put 'put ''KDA9PT1nKSxtKDA9PSgtODE5MiZnKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPTA7SDxiO0grKylEW0hdPTA7cmV0dXJuIER9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYihi''@;'; put 'put ''Lmxlbmd0aCxELmxlbmd0aCksZz10aGlzLm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiksUz1uZXcgQXJyYXkoTiksdj1uZXcgQXJyYXkoTikscD1uZXcgQXJyYXkoTiksdz1uZXcgQXJyYXkoTiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRlPUgud29yZHM7ZGUubGVuZ3RoPU4s''@;'; put 'put ''dGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQxM2IoRC53b3JkcyxELmxlbmd0aCx3LE4pLHRoaXMudHJhbnNmb3JtKFMsQyx2LHAsTixnKSx0aGlzLnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9MDtmZTxOO2ZlKyspe3ZhciB4ZT12''@;'; put 'put ''W2ZlXSpKW2ZlXS1wW2ZlXSpuZVtmZV07cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpbZmVdLHZbZmVdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh2LHAsTiksdGhpcy50cmFuc2Zvcm0odixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4pLHRoaXMubm9ybWFsaXplMTNiKGRl''@;'; put 'put ''LE4pLEgubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVuZ3RoK0QubGVuZ3RoLEguc3RyaXAoKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0''@;'; put 'put ''aCksdGhpcy5tdWxUbyhiLEQpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5tdWxUbyhiLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KTtmb3IodmFyIEQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKmIsZz0oNjcxMDg4NjMm''@;'; put 'put ''TikrKDY3MTA4ODYzJkQpO0Q+Pj0yNixEKz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRoaXMud29yZHNbSF09NjcxMDg4NjMmZ31yZXR1cm4gMCE9PUQmJih0aGlzLndvcmRzW0hdPUQsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbG9uZSgpLmltdWxuKGIpfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiKXt2YXIgRD1m''@;'; put 'put ''dW5jdGlvbiBqKEcpe2Zvcih2YXIgYj1uZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgTj1EJTI2O2JbRF09KEcud29yZHNbRC8yNnwwXSYxPDxOKT4+Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBI''@;'; put 'put ''PXRoaXMsTj0wO048RC5sZW5ndGgmJjA9PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsrTjxELmxlbmd0aClmb3IodmFyIGc9SC5zcXIoKTtOPEQubGVuZ3RoO04rKyxnPWcuc3FyKCkpMCE9PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9u''@;'; put 'put ''KGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1EKS8yNixOPTY3MTA4ODYzPj4+MjYtRDw8MjYtRDtpZigwIT09RCl7dmFyIEM9MDtmb3IoZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2ddJk47dGhpcy53b3Jkc1tnXT0oMHx0''@;'; put 'put ''aGlzLndvcmRzW2ddKS1TPDxEfEMsQz1TPj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoZz10aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXRoaXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7ZzxIO2crKyl0aGlzLndvcmRzW2dd''@;'; put 'put ''PTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixELEgpe3ZhciBOO20oIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBiJiZiPj0wKSxOPUQ/KEQtRCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0aC5taW4oKGItZykvMjYsdGhpcy5sZW5ndGgpLFM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnLHY9SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFyIHA9MDtwPEM7cCsrKXYud29yZHNb''@;'; put 'put ''cF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB3''@;'; put 'put ''PTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFyIEo9MHx0aGlzLndvcmRzW3BdO3RoaXMud29yZHNbcF09dzw8MjYtZ3xKPj4+Zyx3PUomU31yZXR1cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcpLDA9PT10aGlzLmxlbmd0aCYmKHRo''@;'; put 'put ''aXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaXNobG4oYil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9u''@;'; put 'put ''KGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxEKSl9LE0u''@;'; put 'put ''cHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90''@;'; put 'put ''aGlzOigwIT09RCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1EJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5EPDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihiKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLmltYXNrbihiKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MD90aGlzLmlzdWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNb''@;'; put 'put ''MF0pPGI/KHRoaXMud29yZHNbMF09Yi0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGIpe3Ro''@;'; put 'put ''aXMud29yZHNbMF0rPWI7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXT49NjcxMDg4NjQ7RCsrKXRoaXMud29yZHNbRF0tPTY3MTA4ODY0LEQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsxXSsrO3JldHVybiB0aGlzLmxlbmd0''@;'; put 'put ''aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxEKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGIpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MClyZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCx0aGlzLmlhZGRuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWIsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEQ9MDtEPHRoaXMu''@;'; put 'put ''bGVuZ3RoJiZ0aGlzLndvcmRzW0RdPDA7RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0LHRoaXMud29yZHNbRCsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYil9LE0ucHJvdG90eXBlLnN1''@;'; put 'put ''Ym49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90''@;'; put 'put ''eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5kKGIubGVuZ3RoK0gpO3ZhciBDLFM9MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXtDPSgwfHRoaXMud29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpEO1M9KChDLT02NzEwODg2MyZ2KT4+''@;'; put 'put ''MjYpLSh2LzY3MTA4ODY0fDApLHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7Zzx0aGlzLmxlbmd0aC1IO2crKylTPShDPSgwfHRoaXMud29yZHNbZytIXSkrUyk+PjI2LHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG0o''@;'; put 'put ''LTE9PT1TKSxTPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29yZHNbZ10pK1MpPj4yNix0aGlzLndvcmRzW2ddPTY3MTA4ODYzJkM7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGIsRCl7dmFy''@;'; put 'put ''IEgsTj10aGlzLmNsb25lKCksZz1iLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhDKSkmJihnPWcudXNobG4oSCksTi5pdXNobG4oSCksQz0wfGcud29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgtZy5sZW5ndGg7aWYoIm1vZCIhPT1E''@;'; put 'put ''KXsocD1uZXcgTShudWxsKSkubGVuZ3RoPXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3KyspcC53b3Jkc1t3XT0wfXZhciBKPU4uY2xvbmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0aXZlJiYoTj1KLHAmJihwLndvcmRz''@;'; put 'put ''W3ZdPTEpKTtmb3IodmFyIG5lPXYtMTtuZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQqKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZV0pKygwfE4ud29yZHNbZy5sZW5ndGgrbmUtMV0pO2ZvcihkZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxuc3VibXVsKGcsZGUsbmUpOzAhPT1O''@;'; put 'put ''Lm5lZ2F0aXZlOylkZS0tLE4ubmVnYXRpdmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUpLE4uaXNaZXJvKCl8fChOLm5lZ2F0aXZlXj0xKTtwJiYocC53b3Jkc1tuZV09ZGUpfXJldHVybiBwJiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9PUgmJk4uaXVzaHJuKEgpLHtkaXY6''@;'; put 'put ''cHx8bnVsbCxtb2Q6Tn19LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oIWIuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRp''@;'; put 'put ''dm1vZChiLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaWFkZChiKSkse2RpdjpOLG1vZDpnfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9kKGIubmVnKCks''@;'; put 'put ''RCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRoaXMubmVnYXRpdmUmYi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLm5lZygpLEQpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaXN1YihiKSkse2Rp''@;'; put 'put ''djpDLmRpdixtb2Q6Z30pOmIubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1iLmxlbmd0aD8iZGl2Ij09PUQ/e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09RD97ZGl2Om51bGwsbW9kOm5ldyBN''@;'; put 'put ''KHRoaXMubW9kbihiLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGIsRCk7dmFyIE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIs''@;'; put 'put ''ImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCExKS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9''@;'; put 'put ''ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5kaXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkpcmV0dXJuIEQuZGl2O3ZhciBIPTAhPT1ELmRpdi5uZWdhdGl2ZT9ELm1vZC5pc3ViKGIpOkQubW9kLE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChOKTtyZXR1cm4gQzwwfHwxPT09ZyYm''@;'; put 'put ''MD09PUM/RC5kaXY6MCE9PUQuZGl2Lm5lZ2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSlIPShEKkgrKDB8''@;'; put 'put ''dGhpcy53b3Jkc1tOXSkpJWI7cmV0dXJuIEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQqRDt0aGlzLndvcmRzW0hdPU4vYnww''@;'; put 'put ''LEQ9TiVifXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihiKX0sTS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgRD10aGlzLEg9Yi5j''@;'; put 'put ''bG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPW5ldyBNKDApLFM9bmV3IE0oMSksdj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrdjtmb3IodmFyIHA9SC5j''@;'; put 'put ''bG9uZSgpLHc9RC5jbG9uZSgpOyFELmlzWmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTshKEQud29yZHNbMF0mbmUpJiZKPDI2OysrSixuZTw8PTEpO2lmKEo+MClmb3IoRC5pdXNocm4oSik7Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5pYWRkKHApLGcuaXN1Yih3KSksTi5p''@;'; put 'put ''dXNocm4oMSksZy5pdXNocm4oMSk7Zm9yKHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBdJmZlKSYmZGU8MjY7KytkZSxmZTw8PTEpO2lmKGRlPjApZm9yKEguaXVzaHJuKGRlKTtkZS0tID4wOykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHApLFMuaXN1Yih3KSksQy5pdXNocm4o''@;'; put 'put ''MSksUy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5pc3ViKFMpKTooSC5pc3ViKEQpLEMuaXN1YihOKSxTLmlzdWIoZykpfXJldHVybnthOkMsYjpTLGdjZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihiKXttKDA9PT1iLm5l''@;'; put 'put ''Z2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgUz0w''@;'; put 'put ''LHY9MTshKEQud29yZHNbMF0mdikmJlM8MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQuaXVzaHJuKFMpO1MtLSA+MDspTi5pc09kZCgpJiZOLmlhZGQoQyksTi5pdXNocm4oMSk7Zm9yKHZhciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3Asdzw8PTEpO2lmKHA+MClmb3IoSC5p''@;'; put 'put ''dXNocm4ocCk7cC0tID4wOylnLmlzT2RkKCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihnKSk6KEguaXN1YihEKSxnLmlzdWIoTikpfXJldHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAmJkouaWFkZChiKSxKfSxNLnByb3Rv''@;'; put 'put ''dHlwZS5nY2Q9ZnVuY3Rpb24oYil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMoKTtpZihiLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBEPXRoaXMuY2xvbmUoKSxIPWIuY2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgTj0wO0QuaXNFdmVuKCkm''@;'; put 'put ''JkguaXNFdmVuKCk7TisrKUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtELmlzRXZlbigpOylELml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1DfWVsc2UgaWYoMD09PWd8fDA9PT1I''@;'; put 'put ''LmNtcG4oMSkpYnJlYWs7RC5pc3ViKEgpfXJldHVybiBILml1c2hsbihOKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lZ2NkKGIpLmEudW1vZChiKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxN''@;'; put 'put ''LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMud29yZHNbMF0mYn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpO3Zh''@;'; put 'put ''ciBEPWIlMjYsSD0oYi1EKS8yNixOPTE8PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PU4sdGhpcztmb3IodmFyIGc9TixDPUg7MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRoaXMud29yZHNbQ107Zz0oUys9Zyk+''@;'; put 'put ''Pj4yNix0aGlzLndvcmRzW0NdPVMmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbQ109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5''@;'; put 'put ''cGUuY21wbj1mdW5jdGlvbihiKXt2YXIgSCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkQpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9LWIpLG0oYjw9NjcxMDg4NjMsIk51''@;'; put 'put ''bWJlciBpcyB0b28gYmlnIik7dmFyIE49MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpOPGI/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSxNLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybi0x''@;'; put 'put ''O2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgRD10aGlzLnVjbXAoYik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUQ6RH0sTS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5iLmxlbmd0aClyZXR1cm4gMTtpZih0''@;'; put 'put ''aGlzLmxlbmd0aDxiLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPTB8dGhpcy53b3Jkc1tIXSxnPTB8Yi53b3Jkc1tIXTtpZihOIT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0dXJuIER9LE0ucHJvdG90eXBlLmd0''@;'; put 'put ''bj1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxNLnByb3RvdHlwZS5ndGU9ZnVuY3Rp''@;'; put 'put ''b24oYil7cmV0dXJuIHRoaXMuY21wKGIpPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oYil7cmV0''@;'; put 'put ''dXJuIHRoaXMuY21wbihiKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKTw9MH0sTS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRo''@;'; put 'put ''aXMuY21wKGIpfSxNLnJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhp''@;'; put 'put ''cy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yZWQ9Yix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9u''@;'; put 'put ''IGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rp''@;'; put 'put ''b24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5j''@;'; put 'put ''dGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhp''@;'; put 'put ''cyxiKSx0aGlzLnJlZC5pbXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3Rv''@;'; put 'put ''dHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBt''@;'; put 'put ''KHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkx''@;'; put 'put ''KHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkJiYhYi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYil9O3ZhciBxPXtrMjU2Om51''@;'; put 'put ''bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxiKXt0aGlzLm5hbWU9Ryx0aGlzLnA9bmV3IE0oYiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRo''@;'; put 'put ''aXMuX3RtcCgpfWZ1bmN0aW9uIHRlKCl7ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtlZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGhlKCl7ZWUuY2Fs''@;'; put 'put ''bCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB1ZShHKXtpZigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3RoaXMubT1iLnAsdGhpcy5wcmltZT1i''@;'; put 'put ''fWVsc2UgbShHLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGNlKEcpe3VlLmNhbGwodGhpcyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlm''@;'; put 'put ''dCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYo''@;'; put 'put ''dGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMp''@;'; put 'put ''KSxifSxlZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97dGhpcy5zcGxpdChELHRoaXMudG1wKSxIPShEPShEPXRoaXMuaW11bEsoRCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIE49SDx0aGlzLm4/LTE6RC51Y21w''@;'; put 'put ''KHRoaXMucCk7cmV0dXJuIDA9PT1OPyhELndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4wP0QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PUQuc3RyaXA/RC5zdHJpcCgpOkQuX3N0cmlwKCksRH0sZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5pdXNocm4odGhpcy5uLDAsRCl9LGVl''@;'; put 'put ''LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9LGxlKHRlLGVlKSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9NDE5NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47ZysrKUQud29yZHNbZ109Yi53b3Jk''@;'; put 'put ''c1tnXTtpZihELmxlbmd0aD1OLGIubGVuZ3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAsdm9pZChiLmxlbmd0aD0xKTt2YXIgQz1iLndvcmRzWzldO2ZvcihELndvcmRzW0QubGVuZ3RoKytdPUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIud29yZHNbZ107Yi53b3Jkc1tnLTEw''@;'; put 'put ''XT0oUyZIKTw8NHxDPj4+MjIsQz1TfWIud29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0aC09MD09PUMmJmIubGVuZ3RoPjEwPzEwOjl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5ndGgrMV09MCxiLmxlbmd0aCs9Mjtm''@;'; put 'put ''b3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTtiLndvcmRzW0hdPTY3MTA4ODYzJihEKz05NzcqTiksRD02NCpOKyhELzY3MTA4ODY0fDApfXJldHVybiAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3RoLS0sMD09PWIud29yZHNbYi5sZW5n''@;'; put 'put ''dGgtMV0mJmIubGVuZ3RoLS0pLGJ9LGxlKG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUpLGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02NzEwODg2MyZOO04+Pj49MjYsYi53''@;'; put 'put ''b3Jkc1tIXT1nLEQ9Tn1yZXR1cm4gMCE9PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQpLGJ9LE0uX3ByaW1lPWZ1bmN0aW9uKGIpe2lmKHFbYl0pcmV0dXJuIHFbYl07dmFyIEQ7aWYoImsyNTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIpRD1uZXcgb2U7ZWxzZSBpZigicDE5''@;'; put 'put ''MiI9PT1iKUQ9bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2IpO0Q9bmV3IGhlfXJldHVybiBxW2JdPUQsRH0sdWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oYixEKXttKDA9PShiLm5lZ2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5y''@;'; put 'put ''ZWQmJmIucmVkPT09RC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQo''@;'; put 'put ''dGhpcyl9LHVlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJvKCk/Yi5jbG9uZSgpOnRoaXMubS5zdWIoYikuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuYWRkKEQpO3JldHVy''@;'; put 'put ''biBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSx1''@;'; put 'put ''ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5Mihi''@;'; put 'put ''LEQpO3ZhciBIPWIuaXN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIs''@;'; put 'put ''RCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0sdWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oYil7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW11bChiLGIuY2xvbmUoKSl9LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsKGIsYil9LHVlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10aGlzLm0uYW5kbG4oMyk7aWYobShE''@;'; put 'put ''JTI9PTEpLDM9PT1EKXt2YXIgSD10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGIsSCl9Zm9yKHZhciBOPXRoaXMubS5zdWJuKDEpLGc9MDshTi5pc1plcm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigxKTttKCFOLmlzWmVybygpKTt2YXIg''@;'; put 'put ''Qz1uZXcgTSgxKS50b1JlZCh0aGlzKSxTPUMucmVkTmVnKCksdj10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHA9bmV3IE0oMipwKnApLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5yZWRJQWRkKFMpO2Zvcih2YXIgdz10''@;'; put 'put ''aGlzLnBvdyhwLE4pLEo9dGhpcy5wb3coYixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhiLE4pLGRlPWc7MCE9PW5lLmNtcChDKTspe2Zvcih2YXIgZmU9bmUseGU9MDswIT09ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxkZSk7dmFyIExlPXRoaXMucG93KHcs''@;'; put 'put ''bmV3IE0oMSkuaXVzaGxuKGRlLXhlLTEpKTtKPUoucmVkTXVsKExlKSx3PUxlLnJlZFNxcigpLG5lPW5lLnJlZE11bCh3KSxkZT14ZX1yZXR1cm4gSn0sdWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUQubmVnYXRpdmU/KEQu''@;'; put 'put ''bmVnYXRpdmU9MCx0aGlzLmltb2QoRCkucmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiLEQpe2lmKEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgTj1uZXcg''@;'; put 'put ''QXJyYXkoMTYpO05bMF09bmV3IE0oMSkudG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIgZz0yO2c8Ti5sZW5ndGg7ZysrKU5bZ109dGhpcy5tdWwoTltnLTFdLGIpO3ZhciBDPU5bMF0sUz0wLHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksZz1ELmxlbmd0aC0xO2c+''@;'; put 'put ''PTA7Zy0tKXtmb3IodmFyIHc9RC53b3Jkc1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5lPXc+PkomMTtDIT09TlswXSYmKEM9dGhpcy5zcXIoQykpLDAhPT1uZXx8MCE9PVM/KFM8PD0xLFN8PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMubXVsKEMsTltTXSksdj0wLFM9MCkp''@;'; put 'put ''OnY9MH1wPTI2fXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3ZhciBEPWIudW1vZCh0aGlzLm0pO3JldHVybiBEPT09Yj9ELmNsb25lKCk6RH0sdWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPWIuY2xvbmUoKTtyZXR1cm4gRC5y''@;'; put 'put ''ZWQ9bnVsbCxEfSxNLm1vbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUoY2UsdWUpLGNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9u''@;'; put 'put ''KGIpe3ZhciBEPXRoaXMuaW1vZChiLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxjZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0aD0xLGI7dmFyIEg9Yi5pbXVsKEQp''@;'; put 'put ''LE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlh''@;'; put 'put ''ZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlz''@;'; put 'put ''Lm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0s''@;'; put 'put ''Y2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQpLHRoaXMpfSwzNjA3MjooYXQsSWUpPT57IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Zvcih2YXIg''@;'; put 'put ''Rj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsYWU9bmV3IFVpbnQ4QXJyYXkoMjU2KSx4PTA7eDw2NDt4KyspYWVbRi5jaGFyQ29kZUF0KHgpXT14O0llLmM9ZnVuY3Rpb24obSl7dmFyIE0sbGU9bmV3IFVpbnQ4QXJy''@;'; put 'put ''YXkobSksTz1sZS5sZW5ndGgsUj0iIjtmb3IoTT0wO008TztNKz0zKVIrPUZbbGVbTV0+PjJdLFIrPUZbKDMmbGVbTV0pPDw0fGxlW00rMV0+PjRdLFIrPUZbKDE1JmxlW00rMV0pPDwyfGxlW00rMl0+PjZdLFIrPUZbNjMmbGVbTSsyXV07cmV0dXJuIE8lMz09Mj9SPVIuc3Vic3RyaW5nKDAs''@;'; put 'put ''Ui5sZW5ndGgtMSkrIj0iOk8lMz09MSYmKFI9Ui5zdWJzdHJpbmcoMCxSLmxlbmd0aC0yKSsiPT0iKSxSfSxJZS5KPWZ1bmN0aW9uKG0pe3ZhciBPLHosSyxJLGssbGU9Ljc1Km0ubGVuZ3RoLE09bS5sZW5ndGgsUj0wOyI9Ij09PW1bbS5sZW5ndGgtMV0mJihsZS0tLCI9Ij09PW1bbS5sZW5n''@;'; put 'put ''dGgtMl0mJmxlLS0pO3ZhciBFPW5ldyBBcnJheUJ1ZmZlcihsZSksaj1uZXcgVWludDhBcnJheShFKTtmb3IoTz0wO088TTtPKz00KXo9YWVbbS5jaGFyQ29kZUF0KE8pXSxLPWFlW20uY2hhckNvZGVBdChPKzEpXSxJPWFlW20uY2hhckNvZGVBdChPKzIpXSxrPWFlW20uY2hhckNvZGVBdChP''@;'; put 'put ''KzMpXSxqW1IrK109ejw8MnxLPj40LGpbUisrXT0oMTUmSyk8PDR8ST4+MixqW1IrK109KDMmSSk8PDZ8NjMmaztyZXR1cm4gRX19KCl9LDk5MTk6KGF0LEllKT0+eyJ1c2Ugc3RyaWN0IjtJZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uIFIoail7dmFyIFY9TyhqKSxZPVZbMV07cmV0dXJuIDMqKFZb''@;'; put 'put ''MF0rWSkvNC1ZfSxJZS50b0J5dGVBcnJheT1mdW5jdGlvbiBLKGope3ZhciBWLHRlLEI9TyhqKSxZPUJbMF0sWD1CWzFdLFU9bmV3IHgoZnVuY3Rpb24geihqLFYsQil7cmV0dXJuIDMqKFYrQikvNC1CfSgwLFksWCkpLHE9MCxlZT1YPjA/WS00Olk7Zm9yKHRlPTA7dGU8ZWU7dGUrPTQpVj1h''@;'; put 'put ''ZVtqLmNoYXJDb2RlQXQodGUpXTw8MTh8YWVbai5jaGFyQ29kZUF0KHRlKzEpXTw8MTJ8YWVbai5jaGFyQ29kZUF0KHRlKzIpXTw8NnxhZVtqLmNoYXJDb2RlQXQodGUrMyldLFVbcSsrXT1WPj4xNiYyNTUsVVtxKytdPVY+PjgmMjU1LFVbcSsrXT0yNTUmVjtyZXR1cm4gMj09PVgmJihWPWFl''@;'; put 'put ''W2ouY2hhckNvZGVBdCh0ZSldPDwyfGFlW2ouY2hhckNvZGVBdCh0ZSsxKV0+PjQsVVtxKytdPTI1NSZWKSwxPT09WCYmKFY9YWVbai5jaGFyQ29kZUF0KHRlKV08PDEwfGFlW2ouY2hhckNvZGVBdCh0ZSsxKV08PDR8YWVbai5jaGFyQ29kZUF0KHRlKzIpXT4+MixVW3ErK109Vj4+OCYyNTUs''@;'; put 'put ''VVtxKytdPTI1NSZWKSxVfSxJZS5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIEUoail7Zm9yKHZhciBWLEI9ai5sZW5ndGgsWT1CJTMsWD1bXSxVPTE2MzgzLHE9MCxlZT1CLVk7cTxlZTtxKz1VKVgucHVzaChrKGoscSxxK1U+ZWU/ZWU6cStVKSk7cmV0dXJuIDE9PT1ZP1gucHVzaChGWyhWPWpb''@;'; put 'put ''Qi0xXSk+PjJdK0ZbVjw8NCY2M10rIj09Iik6Mj09PVkmJlgucHVzaChGWyhWPShqW0ItMl08PDgpK2pbQi0xXSk+PjEwXStGW1Y+PjQmNjNdK0ZbVjw8MiY2M10rIj0iKSxYLmpvaW4oIiIpfTtmb3IodmFyIEY9W10sYWU9W10seD10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpB''@;'; put 'put ''cnJheSxtPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixsZT0wO2xlPDY0OysrbGUpRltsZV09bVtsZV0sYWVbbS5jaGFyQ29kZUF0KGxlKV09bGU7ZnVuY3Rpb24gTyhqKXt2YXIgVj1qLmxlbmd0aDtpZihWJTQ+MCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgQj1qLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PUImJihCPVYpLFtCLEI9PT1WPzA6NC1CJTRdfWZ1bmN0aW9uIEkoail7cmV0dXJuIEZbaj4+MTgmNjNdK0Zbaj4+MTIm''@;'; put 'put ''NjNdK0Zbaj4+NiY2M10rRls2MyZqXX1mdW5jdGlvbiBrKGosVixCKXtmb3IodmFyIFg9W10sVT1WO1U8QjtVKz0zKVgucHVzaChJKChqW1VdPDwxNiYxNjcxMTY4MCkrKGpbVSsxXTw8OCY2NTI4MCkrKDI1NSZqW1UrMl0pKSk7cmV0dXJuIFguam9pbigiIil9YWVbIi0iLmNoYXJDb2RlQXQo''@;'; put 'put ''MCldPTYyLGFlWyJfIi5jaGFyQ29kZUF0KDApXT02M30sNjI2NjI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEgsTil7aWYoIUgpdGhyb3cgbmV3IEVycm9yKE58fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoSCxOKXtI''@;'; put 'put ''LnN1cGVyXz1OO3ZhciBnPWZ1bmN0aW9uKCl7fTtnLnByb3RvdHlwZT1OLnByb3RvdHlwZSxILnByb3RvdHlwZT1uZXcgZyxILnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1IfWZ1bmN0aW9uIE0oSCxOLGcpe2lmKE0uaXNCTihIKSlyZXR1cm4gSDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1u''@;'; put 'put ''dWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09SCYmKCgibGUiPT09Tnx8ImJlIj09PU4pJiYoZz1OLE49MTApLHRoaXMuX2luaXQoSHx8MCxOfHwxMCxnfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndv''@;'; put 'put ''cmRTaXplPTI2O3RyeXtPPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpGKDQ2NjAxKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoSCxOKXt2YXIgZz1ILmNoYXJDb2RlQXQoTik7cmV0dXJuIGc+PTQ4JiZnPD01Nz9nLTQ4Omc+PTY1''@;'; put 'put ''JiZnPD03MD9nLTU1Omc+PTk3JiZnPD0xMDI/Zy04Nzp2b2lkIG0oITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIrSCl9ZnVuY3Rpb24geihILE4sZyl7dmFyIEM9UihILGcpO3JldHVybiBnLTE+PU4mJihDfD1SKEgsZy0xKTw8NCksQ31mdW5jdGlvbiBLKEgsTixnLEMpe2Zvcih2YXIgUz0w''@;'; put 'put ''LHY9MCxwPU1hdGgubWluKEgubGVuZ3RoLGcpLHc9Tjt3PHA7dysrKXt2YXIgSj1ILmNoYXJDb2RlQXQodyktNDg7Uyo9Qyx2PUo+PTQ5P0otNDkrMTA6Sj49MTc/Si0xNysxMDpKLG0oSj49MCYmdjxDLCJJbnZhbGlkIGNoYXJhY3RlciIpLFMrPXZ9cmV0dXJuIFN9ZnVuY3Rpb24gSShILE4p''@;'; put 'put ''e0gud29yZHM9Ti53b3JkcyxILmxlbmd0aD1OLmxlbmd0aCxILm5lZ2F0aXZlPU4ubmVnYXRpdmUsSC5yZWQ9Ti5yZWR9aWYoTS5pc0JOPWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgTXx8bnVsbCE9PU4mJiJvYmplY3QiPT10eXBlb2YgTiYmTi5jb25zdHJ1Y3Rvci53b3JkU2l6''@;'; put 'put ''ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoTi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKE4sZyl7cmV0dXJuIE4uY21wKGcpPjA/TjpnfSxNLm1pbj1mdW5jdGlvbihOLGcpe3JldHVybiBOLmNtcChnKTwwP046Z30sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTixnLEMpe2lmKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgTilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihOLGcsQyk7aWYoIm9iamVjdCI9PXR5cGVvZiBOKXJldHVybiB0aGlzLl9pbml0QXJyYXkoTixnLEMpOyJoZXgiPT09ZyYmKGc9MTYpLG0oZz09PSgwfGcpJiZnPj0yJiZnPD0zNik7dmFyIFM9MDsiLSI9PT0oTj1OLnRv''@;'; put 'put ''U3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKFMrKyx0aGlzLm5lZ2F0aXZlPTEpLFM8Ti5sZW5ndGgmJigxNj09PWc/dGhpcy5fcGFyc2VIZXgoTixTLEMpOih0aGlzLl9wYXJzZUJhc2UoTixnLFMpLCJsZSI9PT1DJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZyxD''@;'; put 'put ''KSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihOLGcsQyl7TjwwJiYodGhpcy5uZWdhdGl2ZT0xLE49LU4pLE48NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJk5dLHRoaXMubGVuZ3RoPTEpOk48NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMm''@;'; put 'put ''TixOLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShOPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJk4sTi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09QyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGcs''@;'; put 'put ''Qyl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oTixnLEMpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBOLmxlbmd0aCksTi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoTi5sZW5ndGgvMyksdGhp''@;'; put 'put ''cy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109MDt2YXIgdixwLHc9MDtpZigiYmUiPT09Qylmb3IoUz1OLmxlbmd0aC0xLHY9MDtTPj0wO1MtPTMpdGhpcy53b3Jkc1t2XXw9KHA9TltTXXxOW1MtMV08PDh8''@;'; put 'put ''TltTLTJdPDwxNik8PHcmNjcxMDg4NjMsdGhpcy53b3Jkc1t2KzFdPXA+Pj4yNi13JjY3MTA4ODYzLCh3Kz0yNCk+PTI2JiYody09MjYsdisrKTtlbHNlIGlmKCJsZSI9PT1DKWZvcihTPTAsdj0wO1M8Ti5sZW5ndGg7Uys9Myl0aGlzLndvcmRzW3ZdfD0ocD1OW1NdfE5bUysxXTw8OHxOW1Mr''@;'; put 'put ''Ml08PDE2KTw8dyY2NzEwODg2Myx0aGlzLndvcmRzW3YrMV09cD4+PjI2LXcmNjcxMDg4NjMsKHcrPTI0KT49MjYmJih3LT0yNix2KyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oTixnLEMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoTi5s''@;'; put 'put ''ZW5ndGgtZykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109MDt2YXIgdyx2PTAscD0wO2lmKCJiZSI9PT1DKWZvcihTPU4ubGVuZ3RoLTE7Uz49ZztTLT0yKXc9eihOLGcsUyk8PHYsdGhpcy53''@;'; put 'put ''b3Jkc1twXXw9NjcxMDg4NjMmdyx2Pj0xOD8odi09MTgsdGhpcy53b3Jkc1twKz0xXXw9dz4+PjI2KTp2Kz04O2Vsc2UgZm9yKFM9KE4ubGVuZ3RoLWcpJTI9PTA/ZysxOmc7UzxOLmxlbmd0aDtTKz0yKXc9eihOLGcsUyk8PHYsdGhpcy53b3Jkc1twXXw9NjcxMDg4NjMmdyx2Pj0xOD8odi09''@;'; put 'put ''MTgsdGhpcy53b3Jkc1twKz0xXXw9dz4+PjI2KTp2Kz04O3RoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oTixnLEMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBTPTAsdj0xO3Y8PTY3MTA4ODYzO3YqPWcpUysrO1MtLSx2PXYvZ3ww''@;'; put 'put ''O2Zvcih2YXIgcD1OLmxlbmd0aC1DLHc9cCVTLEo9TWF0aC5taW4ocCxwLXcpK0MsbmU9MCxkZT1DO2RlPEo7ZGUrPVMpbmU9SyhOLGRlLGRlK1MsZyksdGhpcy5pbXVsbih2KSx0aGlzLndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKTtpZigw''@;'; put 'put ''IT09dyl7dmFyIGZlPTE7Zm9yKG5lPUsoTixkZSxOLmxlbmd0aCxnKSxkZT0wO2RlPHc7ZGUrKylmZSo9Zzt0aGlzLmltdWxuKGZlKSx0aGlzLndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKX10aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5j''@;'; put 'put ''b3B5PWZ1bmN0aW9uKE4pe04ud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKylOLndvcmRzW2ddPXRoaXMud29yZHNbZ107Ti5sZW5ndGg9dGhpcy5sZW5ndGgsTi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLE4ucmVkPXRoaXMucmVkfSxN''@;'; put 'put ''LnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbihOKXtJKE4sdGhpcyl9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIE49bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShOKSxOfSxNLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKE4pe2Zvcig7dGhpcy5sZW5ndGg8TjspdGhp''@;'; put 'put ''cy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3Rv''@;'; put 'put ''dHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdHlwZW9mIFN5bWJvbDwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yKXRyeXtNLnByb3RvdHlwZVtTeW1ib2wu''@;'; put 'put ''Zm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1rfWNhdGNoe00ucHJvdG90eXBlLmluc3BlY3Q9a31lbHNlIE0ucHJvdG90eXBlLmluc3BlY3Q9aztmdW5jdGlvbiBrKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFy''@;'; put 'put ''IEU9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0saj1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxWPVsw''@;'; put 'put ''LDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0''@;'; put 'put ''MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFgoSCxOLGcpe2cubmVnYXRpdmU9''@;'; put 'put ''Ti5uZWdhdGl2ZV5ILm5lZ2F0aXZlO3ZhciBDPUgubGVuZ3RoK04ubGVuZ3RofDA7Zy5sZW5ndGg9QyxDPUMtMXwwO3ZhciBTPTB8SC53b3Jkc1swXSx2PTB8Ti53b3Jkc1swXSxwPVMqdixKPXAvNjcxMDg4NjR8MDtnLndvcmRzWzBdPTY3MTA4ODYzJnA7Zm9yKHZhciBuZT0xO25lPEM7bmUr''@;'; put 'put ''Kyl7Zm9yKHZhciBkZT1KPj4+MjYsZmU9NjcxMDg4NjMmSix4ZT1NYXRoLm1pbihuZSxOLmxlbmd0aC0xKSxMZT1NYXRoLm1heCgwLG5lLUgubGVuZ3RoKzEpO0xlPD14ZTtMZSsrKWRlKz0ocD0oUz0wfEgud29yZHNbbmUtTGV8MF0pKih2PTB8Ti53b3Jkc1tMZV0pK2ZlKS82NzEwODg2NHww''@;'; put 'put ''LGZlPTY3MTA4ODYzJnA7Zy53b3Jkc1tuZV09MHxmZSxKPTB8ZGV9cmV0dXJuIDAhPT1KP2cud29yZHNbbmVdPTB8SjpnLmxlbmd0aC0tLGcuX3N0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oTixnKXt2YXIgQztpZihnPTB8Z3x8MSwxNj09PShOPU58fDEwKXx8ImhleCI9''@;'; put 'put ''PT1OKXtDPSIiO2Zvcih2YXIgUz0wLHY9MCxwPTA7cDx0aGlzLmxlbmd0aDtwKyspe3ZhciB3PXRoaXMud29yZHNbcF0sSj0oMTY3NzcyMTUmKHc8PFN8dikpLnRvU3RyaW5nKDE2KTt2PXc+Pj4yNC1TJjE2Nzc3MjE1LChTKz0yKT49MjYmJihTLT0yNixwLS0pLEM9MCE9PXZ8fHAhPT10aGlz''@;'; put 'put ''Lmxlbmd0aC0xP0VbNi1KLmxlbmd0aF0rSitDOkorQ31mb3IoMCE9PXYmJihDPXYudG9TdHJpbmcoMTYpK0MpO0MubGVuZ3RoJWchPTA7KUM9IjAiK0M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoQz0iLSIrQyksQ31pZihOPT09KDB8TikmJk4+PTImJk48PTM2KXt2YXIgbmU9altOXSxk''@;'; put 'put ''ZT1WW05dO0M9IiI7dmFyIGZlPXRoaXMuY2xvbmUoKTtmb3IoZmUubmVnYXRpdmU9MDshZmUuaXNaZXJvKCk7KXt2YXIgeGU9ZmUubW9kcm4oZGUpLnRvU3RyaW5nKE4pO0M9KGZlPWZlLmlkaXZuKGRlKSkuaXNaZXJvKCk/eGUrQzpFW25lLXhlLmxlbmd0aF0reGUrQ31mb3IodGhpcy5pc1pl''@;'; put 'put ''cm8oKSYmKEM9IjAiK0MpO0MubGVuZ3RoJWchPTA7KUM9IjAiK0M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoQz0iLSIrQyksQ31tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy53b3Jk''@;'; put 'put ''c1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP04rPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9OKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBv''@;'; put 'put ''bmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LU46Tn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsMil9LE8mJihNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihOLGcpe3JldHVybiB0aGlz''@;'; put 'put ''LnRvQXJyYXlMaWtlKE8sTixnKX0pLE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxOLGcpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihOLGcsQyl7dGhpcy5fc3RyaXAoKTt2YXIgUz10aGlzLmJ5dGVMZW5n''@;'; put 'put ''dGgoKSx2PUN8fE1hdGgubWF4KDEsUyk7bShTPD12LCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbSh2PjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBwPWZ1bmN0aW9uKE4sZyl7cmV0dXJuIE4uYWxsb2NVbnNhZmU/Ti5hbGxvY1Vuc2FmZShn''@;'; put 'put ''KTpuZXcgTihnKX0oTix2KTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PWc/IkxFIjoiQkUiKV0ocCxTKSxwfSxNLnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihOLGcpe2Zvcih2YXIgQz0wLFM9MCx2PTAscD0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgdz10''@;'; put 'put ''aGlzLndvcmRzW3ZdPDxwfFM7TltDKytdPTI1NSZ3LEM8Ti5sZW5ndGgmJihOW0MrK109dz4+OCYyNTUpLEM8Ti5sZW5ndGgmJihOW0MrK109dz4+MTYmMjU1KSw2PT09cD8oQzxOLmxlbmd0aCYmKE5bQysrXT13Pj4yNCYyNTUpLFM9MCxwPTApOihTPXc+Pj4yNCxwKz0yKX1pZihDPE4ubGVu''@;'; put 'put ''Z3RoKWZvcihOW0MrK109UztDPE4ubGVuZ3RoOylOW0MrK109MH0sTS5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24oTixnKXtmb3IodmFyIEM9Ti5sZW5ndGgtMSxTPTAsdj0wLHA9MDt2PHRoaXMubGVuZ3RoO3YrKyl7dmFyIHc9dGhpcy53b3Jkc1t2XTw8cHxTO05bQy0tXT0y''@;'; put 'put ''NTUmdyxDPj0wJiYoTltDLS1dPXc+PjgmMjU1KSxDPj0wJiYoTltDLS1dPXc+PjE2JjI1NSksNj09PXA/KEM+PTAmJihOW0MtLV09dz4+MjQmMjU1KSxTPTAscD0wKTooUz13Pj4+MjQscCs9Mil9aWYoQz49MClmb3IoTltDLS1dPVM7Qz49MDspTltDLS1dPTB9LE0ucHJvdG90eXBlLl9jb3Vu''@;'; put 'put ''dEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihOKXtyZXR1cm4gMzItTWF0aC5jbHozMihOKX06ZnVuY3Rpb24oTil7dmFyIGc9TixDPTA7cmV0dXJuIGc+PTQwOTYmJihDKz0xMyxnPj4+PTEzKSxnPj02NCYmKEMrPTcsZz4+Pj03KSxnPj04JiYoQys9NCxnPj4+PTQpLGc+PTImJihDKz0yLGc+''@;'; put 'put ''Pj49MiksQytnfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oTil7aWYoMD09PU4pcmV0dXJuIDI2O3ZhciBnPU4sQz0wO3JldHVybiA4MTkxJmd8fChDKz0xMyxnPj4+PTEzKSwxMjcmZ3x8KEMrPTcsZz4+Pj03KSwxNSZnfHwoQys9NCxnPj4+PTQpLDMmZ3x8KEMrPTIsZz4+Pj0y''@;'; put 'put ''KSwxJmd8fEMrKyxDfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStnfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBOPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgQz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2ddKTtpZihOKz1DLDI2IT09QylicmVha31yZXR1cm4gTn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRo''@;'; put 'put ''LmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKE4pe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKE4pLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oTil7cmV0dXJu''@;'; put 'put ''IHRoaXMudGVzdG4oTi0xKT90aGlzLm5vdG4oTikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5l''@;'; put 'put ''ZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKE4pe2Zvcig7dGhpcy5sZW5ndGg8Ti5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtm''@;'; put 'put ''b3IodmFyIGc9MDtnPE4ubGVuZ3RoO2crKyl0aGlzLndvcmRzW2ddPXRoaXMud29yZHNbZ118Ti53b3Jkc1tnXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKE4pe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfE4ubmVnYXRpdmUpKSx0aGlzLml1b3Io''@;'; put 'put ''Til9LE0ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKE4pOk4uY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9u''@;'; put 'put ''ZSgpLml1b3IoTik6Ti5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKE4pe3ZhciBnO2c9dGhpcy5sZW5ndGg+Ti5sZW5ndGg/Tjp0aGlzO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXSZOLndvcmRzW0Nd''@;'; put 'put ''O3JldHVybiB0aGlzLmxlbmd0aD1nLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKE4pe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfE4ubmVnYXRpdmUpKSx0aGlzLml1YW5kKE4pfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oTil7cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKE4pOk4uY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoTik6Ti5jbG9uZSgpLml1YW5kKHRoaXMpfSxN''@;'; put 'put ''LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihOKXt2YXIgZyxDO3RoaXMubGVuZ3RoPk4ubGVuZ3RoPyhnPXRoaXMsQz1OKTooZz1OLEM9dGhpcyk7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1nLndvcmRzW1NdXkMud29yZHNbU107aWYodGhpcyE9PWcpZm9yKDtT''@;'; put 'put ''PGcubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPWcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPWcubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oTil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Ti5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoTil9''@;'; put 'put ''LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoTik6Ti5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xv''@;'; put 'put ''bmUoKS5pdXhvcihOKTpOLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKE4pe20oIm51bWJlciI9PXR5cGVvZiBOJiZOPj0wKTt2YXIgZz0wfE1hdGguY2VpbChOLzI2KSxDPU4lMjY7dGhpcy5fZXhwYW5kKGcpLEM+MCYmZy0tO2Zvcih2YXIgUz0wO1M8''@;'; put 'put ''ZztTKyspdGhpcy53b3Jkc1tTXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tTXTtyZXR1cm4gQz4wJiYodGhpcy53b3Jkc1tTXT1+dGhpcy53b3Jkc1tTXSY2NzEwODg2Mz4+MjYtQyksdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''Lmlub3RuKE4pfSxNLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKE4sZyl7bSgibnVtYmVyIj09dHlwZW9mIE4mJk4+PTApO3ZhciBDPU4vMjZ8MCxTPU4lMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChDKzEpLHRoaXMud29yZHNbQ109Zz90aGlzLndvcmRzW0NdfDE8PFM6dGhpcy53b3Jkc1tDXSZ+''@;'; put 'put ''KDE8PFMpLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oTil7dmFyIGcsQyxTO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Ti5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGc9dGhpcy5pc3ViKE4pLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNp''@;'; put 'put ''Z24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PU4ubmVnYXRpdmUpcmV0dXJuIE4ubmVnYXRpdmU9MCxnPXRoaXMuaXN1YihOKSxOLm5lZ2F0aXZlPTEsZy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5OLmxlbmd0aD8oQz10aGlzLFM9Tik6KEM9TixTPXRoaXMpO2Zvcih2YXIgdj0wLHA9''@;'; put 'put ''MDtwPFMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTY3MTA4ODYzJihnPSgwfEMud29yZHNbcF0pKygwfFMud29yZHNbcF0pK3YpLHY9Zz4+PjI2O2Zvcig7MCE9PXYmJnA8Qy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09NjcxMDg4NjMmKGc9KDB8Qy53b3Jkc1twXSkrdiksdj1nPj4+MjY7''@;'; put 'put ''aWYodGhpcy5sZW5ndGg9Qy5sZW5ndGgsMCE9PXYpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09dix0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoQyE9PXRoaXMpZm9yKDtwPEMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPUMud29yZHNbcF07cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5j''@;'; put 'put ''dGlvbihOKXt2YXIgZztyZXR1cm4gMCE9PU4ubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhOLm5lZ2F0aXZlPTAsZz10aGlzLnN1YihOKSxOLm5lZ2F0aXZlXj0xLGcpOjA9PT1OLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGc9Ti5zdWIodGhpcyks''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xLGcpOnRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKE4pOk4uY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKE4pe2lmKDAhPT1OLm5lZ2F0aXZlKXtOLm5lZ2F0aXZlPTA7dmFyIGc9dGhpcy5pYWRkKE4pO3Jl''@;'; put 'put ''dHVybiBOLm5lZ2F0aXZlPTEsZy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChOKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgUyx2LEM9dGhpcy5jbXAoTik7aWYoMD09PUMpcmV0dXJuIHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0M+MD8oUz10aGlzLHY9Tik6KFM9Tix2PXRoaXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKylwPShnPSgwfFMud29yZHNbd10pLSgwfHYud29yZHNbd10pK3ApPj4yNix0aGlzLndvcmRzW3ddPTY3''@;'; put 'put ''MTA4ODYzJmc7Zm9yKDswIT09cCYmdzxTLmxlbmd0aDt3KyspcD0oZz0oMHxTLndvcmRzW3ddKStwKT4+MjYsdGhpcy53b3Jkc1t3XT02NzEwODg2MyZnO2lmKDA9PT1wJiZ3PFMubGVuZ3RoJiZTIT09dGhpcylmb3IoO3c8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsdyksUyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoTil9O3ZhciBVPWZ1bmN0aW9uKE4sZyxDKXt2''@;'; put 'put ''YXIgSixuZSxkZSxTPU4ud29yZHMsdj1nLndvcmRzLHA9Qy53b3Jkcyx3PTAsZmU9MHxTWzBdLHhlPTgxOTEmZmUsTGU9ZmU+Pj4xMyxGZT0wfFNbMV0sT2U9ODE5MSZGZSxCZT1GZT4+PjEzLFdlPTB8U1syXSxLZT04MTkxJldlLFllPVdlPj4+MTMsSmU9MHxTWzNdLGx0PTgxOTEmSmUsUGU9''@;'; put 'put ''SmU+Pj4xMyxiZT0wfFNbNF0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8U1s1XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMsaHQ9MHxTWzZdLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfFNbN10saXQ9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8U1s4XSxIdD04MTkxJk10LFB0PU10Pj4+''@;'; put 'put ''MTMsb249MHxTWzldLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfHZbMF0sV249ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8dlsxXSxObj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHx2WzJdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfHZbM10sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLHZu''@;'; put 'put ''PTB8dls0XSxydD04MTkxJnZuLEl0PXZuPj4+MTMsSnQ9MHx2WzVdLER0PTgxOTEmSnQscHQ9SnQ+Pj4xMyxZdD0wfHZbNl0sTG49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8dls3XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHx2WzhdLE9uPTgxOTEmQm4sJHQ9Qm4+Pj4xMyxGbj0wfHZb''@;'; put 'put ''OV0sbmk9ODE5MSZGbixsbj1Gbj4+PjEzO0MubmVnYXRpdmU9Ti5uZWdhdGl2ZV5nLm5lZ2F0aXZlLEMubGVuZ3RoPTE5O3ZhciBqbj0odysoSj1NYXRoLmltdWwoeGUsV24pKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoeGUsZW4pKStNYXRoLmltdWwoTGUsV24pfDApKTw8MTMpfDA7''@;'; put 'put ''dz0oKGRlPU1hdGguaW11bChMZSxlbikpKyhuZT4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsSj1NYXRoLmltdWwoT2UsV24pLG5lPShuZT1NYXRoLmltdWwoT2UsZW4pKStNYXRoLmltdWwoQmUsV24pfDAsZGU9TWF0aC5pbXVsKEJlLGVuKTt2YXIgcXI9KHcrKEo9SitNYXRo''@;'; put 'put ''LmltdWwoeGUsTm4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLE5uKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsZnQpfDApKyhuZT4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsSj1NYXRoLmltdWwo''@;'; put 'put ''S2UsV24pLG5lPShuZT1NYXRoLmltdWwoS2UsZW4pKStNYXRoLmltdWwoWWUsV24pfDAsZGU9TWF0aC5pbXVsKFllLGVuKSxKPUorTWF0aC5pbXVsKE9lLE5uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChCZSxObil8MCxkZT1kZStNYXRoLmltdWwoQmUsZnQp''@;'; put 'put ''fDA7dmFyIGdpPSh3KyhKPUorTWF0aC5pbXVsKHhlLGhuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChMZSxobil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLHd0KXwwKSsobmU+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2km''@;'; put 'put ''PTY3MTA4ODYzLEo9TWF0aC5pbXVsKGx0LFduKSxuZT0obmU9TWF0aC5pbXVsKGx0LGVuKSkrTWF0aC5pbXVsKFBlLFduKXwwLGRlPU1hdGguaW11bChQZSxlbiksSj1KK01hdGguaW11bChLZSxObil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsTm4pfDAs''@;'; put 'put ''ZGU9ZGUrTWF0aC5pbXVsKFllLGZ0KXwwLEo9SitNYXRoLmltdWwoT2UsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKEJlLGhuKXwwLGRlPWRlK01hdGguaW11bChCZSx3dCl8MDt2YXIgeHI9KHcrKEo9SitNYXRoLmltdWwoeGUsX3QpfDApfDApKygoODE5''@;'; put 'put ''MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsTnQpfDApKyhuZT4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQWUsV24pLG5lPShuZT1NYXRoLmltdWwo''@;'; put 'put ''QWUsZW4pKStNYXRoLmltdWwoVGUsV24pfDAsZGU9TWF0aC5pbXVsKFRlLGVuKSxKPUorTWF0aC5pbXVsKGx0LE5uKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxObil8MCxkZT1kZStNYXRoLmltdWwoUGUsZnQpfDAsSj1KK01hdGguaW11bChLZSxobil8''@;'; put 'put ''MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFllLHd0KXwwLEo9SitNYXRoLmltdWwoT2UsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKEJlLF90KXwwLGRlPWRlK01hdGguaW11bChC''@;'; put 'put ''ZSxOdCl8MDt2YXIgVWk9KHcrKEo9SitNYXRoLmltdWwoeGUscnQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxJdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsSXQpfDApKyhuZT4+PjEzKXwwKSsoVWk+Pj4yNil8''@;'; put 'put ''MCxVaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoWGUsV24pLG5lPShuZT1NYXRoLmltdWwoWGUsZW4pKStNYXRoLmltdWwoVWUsV24pfDAsZGU9TWF0aC5pbXVsKFVlLGVuKSxKPUorTWF0aC5pbXVsKEFlLE5uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxO''@;'; put 'put ''bil8MCxkZT1kZStNYXRoLmltdWwoVGUsZnQpfDAsSj1KK01hdGguaW11bChsdCxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLHd0KXwwLEo9SitNYXRoLmltdWwoS2UsX3QpfDAsbmU9KG5lPW5lK01hdGgu''@;'; put 'put ''aW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLGRlPWRlK01hdGguaW11bChZZSxOdCl8MCxKPUorTWF0aC5pbXVsKE9lLHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsSXQpfDApK01hdGguaW11bChCZSxydCl8MCxkZT1kZStNYXRoLmltdWwoQmUsSXQpfDA7dmFyIEtyPSh3''@;'; put 'put ''KyhKPUorTWF0aC5pbXVsKHhlLER0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChMZSxEdCl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLHB0KXwwKSsobmU+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLEo9''@;'; put 'put ''TWF0aC5pbXVsKE1lLFduKSxuZT0obmU9TWF0aC5pbXVsKE1lLGVuKSkrTWF0aC5pbXVsKERlLFduKXwwLGRlPU1hdGguaW11bChEZSxlbiksSj1KK01hdGguaW11bChYZSxObil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsTm4pfDAsZGU9ZGUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLGZ0KXwwLEo9SitNYXRoLmltdWwoQWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLGRlPWRlK01hdGguaW11bChUZSx3dCl8MCxKPUorTWF0aC5pbXVsKGx0LF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsTnQpfDApK01h''@;'; put 'put ''dGguaW11bChQZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoUGUsTnQpfDAsSj1KK01hdGguaW11bChLZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLEl0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFllLEl0KXwwLEo9SitNYXRoLmltdWwoT2UsRHQpfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKEJlLER0KXwwLGRlPWRlK01hdGguaW11bChCZSxwdCl8MDt2YXIgbm89KHcrKEo9SitNYXRoLmltdWwoeGUsTG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLExuKXww''@;'; put 'put ''KSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsenQpfDApKyhuZT4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoaXQsV24pLG5lPShuZT1NYXRoLmltdWwoaXQsZW4pKStNYXRoLmltdWwodXQsV24pfDAsZGU9TWF0aC5pbXVsKHV0LGVuKSxKPUor''@;'; put 'put ''TWF0aC5pbXVsKE1lLE5uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxObil8MCxkZT1kZStNYXRoLmltdWwoRGUsZnQpfDAsSj1KK01hdGguaW11bChYZSxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAs''@;'; put 'put ''ZGU9ZGUrTWF0aC5pbXVsKFVlLHd0KXwwLEo9SitNYXRoLmltdWwoQWUsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLGRlPWRlK01hdGguaW11bChUZSxOdCl8MCxKPUorTWF0aC5pbXVsKGx0LHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwo''@;'; put 'put ''bHQsSXQpfDApK01hdGguaW11bChQZSxydCl8MCxkZT1kZStNYXRoLmltdWwoUGUsSXQpfDAsSj1KK01hdGguaW11bChLZSxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFllLHB0KXwwLEo9SitNYXRoLmltdWwo''@;'; put 'put ''T2UsTG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEJlLExuKXwwLGRlPWRlK01hdGguaW11bChCZSx6dCl8MDt2YXIgRnI9KHcrKEo9SitNYXRoLmltdWwoeGUseG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKExlLHhuKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsc24pfDApKyhuZT4+PjEzKXwwKSsoRnI+Pj4yNil8MCxGciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoSHQsV24pLG5lPShuZT1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsZGU9TWF0aC5pbXVs''@;'; put 'put ''KFB0LGVuKSxKPUorTWF0aC5pbXVsKGl0LE5uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCh1dCxObil8MCxkZT1kZStNYXRoLmltdWwodXQsZnQpfDAsSj1KK01hdGguaW11bChNZSxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoRGUsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKERlLHd0KXwwLEo9SitNYXRoLmltdWwoWGUsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLGRlPWRlK01hdGguaW11bChVZSxOdCl8MCxKPUorTWF0aC5pbXVsKEFlLHJ0KXwwLG5lPShuZT1u''@;'; put 'put ''ZStNYXRoLmltdWwoQWUsSXQpfDApK01hdGguaW11bChUZSxydCl8MCxkZT1kZStNYXRoLmltdWwoVGUsSXQpfDAsSj1KK01hdGguaW11bChsdCxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLHB0KXwwLEo9''@;'; put 'put ''SitNYXRoLmltdWwoS2UsTG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLExuKXwwLGRlPWRlK01hdGguaW11bChZZSx6dCl8MCxKPUorTWF0aC5pbXVsKE9lLHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChCZSx4bil8''@;'; put 'put ''MCxkZT1kZStNYXRoLmltdWwoQmUsc24pfDA7dmFyIHFpPSh3KyhKPUorTWF0aC5pbXVsKHhlLE9uKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxPbil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLCR0KXwwKSsobmU+''@;'; put 'put ''Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLFduKSxuZT0obmU9TWF0aC5pbXVsKENuLGVuKSkrTWF0aC5pbXVsKFV0LFduKXwwLGRlPU1hdGguaW11bChVdCxlbiksSj1KK01hdGguaW11bChIdCxObil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoUHQsTm4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LGZ0KXwwLEo9SitNYXRoLmltdWwoaXQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChpdCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLGRlPWRlK01hdGguaW11bCh1dCx3dCl8MCxKPUorTWF0aC5pbXVsKE1lLF90''@;'; put 'put ''KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoRGUsTnQpfDAsSj1KK01hdGguaW11bChYZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsZGU9ZGUrTWF0aC5pbXVs''@;'; put 'put ''KFVlLEl0KXwwLEo9SitNYXRoLmltdWwoQWUsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLGRlPWRlK01hdGguaW11bChUZSxwdCl8MCxKPUorTWF0aC5pbXVsKGx0LExuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsenQpfDApK01hdGgu''@;'; put 'put ''aW11bChQZSxMbil8MCxkZT1kZStNYXRoLmltdWwoUGUsenQpfDAsSj1KK01hdGguaW11bChLZSx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFllLHNuKXwwLEo9SitNYXRoLmltdWwoT2UsT24pfDAsbmU9KG5l''@;'; put 'put ''PW5lK01hdGguaW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKEJlLE9uKXwwLGRlPWRlK01hdGguaW11bChCZSwkdCl8MDt2YXIgSmk9KHcrKEo9SitNYXRoLmltdWwoeGUsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxsbil8MCkrTWF0aC5pbXVsKExlLG5pKXwwKSk8''@;'; put 'put ''PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsbG4pfDApKyhuZT4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24sTm4pLG5lPShuZT1NYXRoLmltdWwoQ24sZnQpKStNYXRoLmltdWwoVXQsTm4pfDAsZGU9TWF0aC5pbXVsKFV0LGZ0KSxKPUorTWF0''@;'; put 'put ''aC5pbXVsKEh0LGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQsd3QpfDApK01hdGguaW11bChQdCxobil8MCxkZT1kZStNYXRoLmltdWwoUHQsd3QpfDAsSj1KK01hdGguaW11bChpdCxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGl0LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsZGU9''@;'; put 'put ''ZGUrTWF0aC5pbXVsKHV0LE50KXwwLEo9SitNYXRoLmltdWwoTWUscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSxJdCl8MCkrTWF0aC5pbXVsKERlLHJ0KXwwLGRlPWRlK01hdGguaW11bChEZSxJdCl8MCxKPUorTWF0aC5pbXVsKFhlLER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWGUs''@;'; put 'put ''cHQpfDApK01hdGguaW11bChVZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoVWUscHQpfDAsSj1KK01hdGguaW11bChBZSxMbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsTG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFRlLHp0KXwwLEo9SitNYXRoLmltdWwobHQs''@;'; put 'put ''eG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLGRlPWRlK01hdGguaW11bChQZSxzbil8MCxKPUorTWF0aC5pbXVsKEtlLE9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxPbil8MCxkZT1kZStNYXRoLmlt''@;'; put 'put ''dWwoWWUsJHQpfDA7dmFyIGFvPSh3KyhKPUorTWF0aC5pbXVsKE9lLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoT2UsbG4pfDApK01hdGguaW11bChCZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKEJlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKGFvPj4+''@;'; put 'put ''MjYpfDAsYW8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLGhuKSxuZT0obmU9TWF0aC5pbXVsKENuLHd0KSkrTWF0aC5pbXVsKFV0LGhuKXwwLGRlPU1hdGguaW11bChVdCx3dCksSj1KK01hdGguaW11bChIdCxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LE50KXwwKStNYXRoLmltdWwo''@;'; put 'put ''UHQsX3QpfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LE50KXwwLEo9SitNYXRoLmltdWwoaXQscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChpdCxJdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLGRlPWRlK01hdGguaW11bCh1dCxJdCl8MCxKPUorTWF0aC5pbXVsKE1lLER0KXwwLG5lPShuZT1uZStN''@;'; put 'put ''YXRoLmltdWwoTWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoRGUscHQpfDAsSj1KK01hdGguaW11bChYZSxMbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsTG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLHp0KXwwLEo9SitN''@;'; put 'put ''YXRoLmltdWwoQWUseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLGRlPWRlK01hdGguaW11bChUZSxzbil8MCxKPUorTWF0aC5pbXVsKGx0LE9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxPbil8MCxk''@;'; put 'put ''ZT1kZStNYXRoLmltdWwoUGUsJHQpfDA7dmFyIHJvPSh3KyhKPUorTWF0aC5pbXVsKEtlLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoS2UsbG4pfDApK01hdGguaW11bChZZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFllLGxuKXwwKSsobmU+Pj4x''@;'; put 'put ''Myl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLF90KSxuZT0obmU9TWF0aC5pbXVsKENuLE50KSkrTWF0aC5pbXVsKFV0LF90KXwwLGRlPU1hdGguaW11bChVdCxOdCksSj1KK01hdGguaW11bChIdCxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LEl0KXww''@;'; put 'put ''KStNYXRoLmltdWwoUHQscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LEl0KXwwLEo9SitNYXRoLmltdWwoaXQsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChpdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLGRlPWRlK01hdGguaW11bCh1dCxwdCl8MCxKPUorTWF0aC5pbXVsKE1lLExuKXww''@;'; put 'put ''LG5lPShuZT1uZStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxMbil8MCxkZT1kZStNYXRoLmltdWwoRGUsenQpfDAsSj1KK01hdGguaW11bChYZSx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVl''@;'; put 'put ''LHNuKXwwLEo9SitNYXRoLmltdWwoQWUsT24pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRlLE9uKXwwLGRlPWRlK01hdGguaW11bChUZSwkdCl8MDt2YXIgaW89KHcrKEo9SitNYXRoLmltdWwobHQsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGgu''@;'; put 'put ''aW11bChsdCxsbil8MCkrTWF0aC5pbXVsKFBlLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoUGUsbG4pfDApKyhuZT4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24scnQpLG5lPShuZT1NYXRoLmltdWwoQ24sSXQpKStNYXRoLmltdWwo''@;'; put 'put ''VXQscnQpfDAsZGU9TWF0aC5pbXVsKFV0LEl0KSxKPUorTWF0aC5pbXVsKEh0LER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQscHQpfDApK01hdGguaW11bChQdCxEdCl8MCxkZT1kZStNYXRoLmltdWwoUHQscHQpfDAsSj1KK01hdGguaW11bChpdCxMbil8MCxuZT0obmU9bmUrTWF0aC5p''@;'; put 'put ''bXVsKGl0LHp0KXwwKStNYXRoLmltdWwodXQsTG4pfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LHp0KXwwLEo9SitNYXRoLmltdWwoTWUseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXwwLGRlPWRlK01hdGguaW11bChEZSxzbil8MCxKPUorTWF0aC5p''@;'; put 'put ''bXVsKFhlLE9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxPbil8MCxkZT1kZStNYXRoLmltdWwoVWUsJHQpfDA7dmFyIEdpPSh3KyhKPUorTWF0aC5pbXVsKEFlLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoQWUsbG4pfDApK01h''@;'; put 'put ''dGguaW11bChUZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFRlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLER0KSxuZT0obmU9TWF0aC5pbXVsKENuLHB0KSkrTWF0aC5pbXVsKFV0LER0KXwwLGRlPU1hdGgu''@;'; put 'put ''aW11bChVdCxwdCksSj1KK01hdGguaW11bChIdCxMbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LHp0KXwwKStNYXRoLmltdWwoUHQsTG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LHp0KXwwLEo9SitNYXRoLmltdWwoaXQseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChpdCxzbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHV0LHhuKXwwLGRlPWRlK01hdGguaW11bCh1dCxzbil8MCxKPUorTWF0aC5pbXVsKE1lLE9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxPbil8MCxkZT1kZStNYXRoLmltdWwoRGUsJHQpfDA7dmFyIGhvPSh3KyhKPUorTWF0aC5pbXVsKFhl''@;'; put 'put ''LG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoWGUsbG4pfDApK01hdGguaW11bChVZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFVlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLExuKSxu''@;'; put 'put ''ZT0obmU9TWF0aC5pbXVsKENuLHp0KSkrTWF0aC5pbXVsKFV0LExuKXwwLGRlPU1hdGguaW11bChVdCx6dCksSj1KK01hdGguaW11bChIdCx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LHNuKXwwKStNYXRoLmltdWwoUHQseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LHNuKXwwLEo9SitN''@;'; put 'put ''YXRoLmltdWwoaXQsT24pfDAsbmU9KG5lPW5lK01hdGguaW11bChpdCwkdCl8MCkrTWF0aC5pbXVsKHV0LE9uKXwwLGRlPWRlK01hdGguaW11bCh1dCwkdCl8MDt2YXIgeXI9KHcrKEo9SitNYXRoLmltdWwoTWUsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChNZSxsbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKERlLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoRGUsbG4pfDApKyhuZT4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24seG4pLG5lPShuZT1NYXRoLmltdWwoQ24sc24pKStNYXRoLmltdWwoVXQseG4pfDAsZGU9''@;'; put 'put ''TWF0aC5pbXVsKFV0LHNuKSxKPUorTWF0aC5pbXVsKEh0LE9uKXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQsJHQpfDApK01hdGguaW11bChQdCxPbil8MCxkZT1kZStNYXRoLmltdWwoUHQsJHQpfDA7dmFyIFBpPSh3KyhKPUorTWF0aC5pbXVsKGl0LG5pKXwwKXwwKSsoKDgxOTEmKG5lPShu''@;'; put 'put ''ZT1uZStNYXRoLmltdWwoaXQsbG4pfDApK01hdGguaW11bCh1dCxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKHV0LGxuKXwwKSsobmU+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLE9uKSxuZT0obmU9TWF0aC5pbXVsKENuLCR0KSkr''@;'; put 'put ''TWF0aC5pbXVsKFV0LE9uKXwwLGRlPU1hdGguaW11bChVdCwkdCk7dmFyIExvPSh3KyhKPUorTWF0aC5pbXVsKEh0LG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoSHQsbG4pfDApK01hdGguaW11bChQdCxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFB0''@;'; put 'put ''LGxuKXwwKSsobmU+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3MTA4ODYzO3ZhciBocz0odysoSj1NYXRoLmltdWwoQ24sbmkpKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoQ24sbG4pKStNYXRoLmltdWwoVXQsbmkpfDApKTw8MTMpfDA7cmV0dXJuIHc9KChkZT1NYXRoLmltdWwo''@;'; put 'put ''VXQsbG4pKSsobmU+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzLHBbMF09am4scFsxXT1xcixwWzJdPWdpLHBbM109eHIscFs0XT1VaSxwWzVdPUtyLHBbNl09bm8scFs3XT1GcixwWzhdPXFpLHBbOV09SmkscFsxMF09YW8scFsxMV09cm8scFsxMl09aW8scFsxM109R2kscFsx''@;'; put 'put ''NF09aG8scFsxNV09eXIscFsxNl09UGkscFsxN109TG8scFsxOF09aHMsMCE9PXcmJihwWzE5XT13LEMubGVuZ3RoKyspLEN9O2Z1bmN0aW9uIHEoSCxOLGcpe2cubmVnYXRpdmU9Ti5uZWdhdGl2ZV5ILm5lZ2F0aXZlLGcubGVuZ3RoPUgubGVuZ3RoK04ubGVuZ3RoO2Zvcih2YXIgQz0wLFM9''@;'; put 'put ''MCx2PTA7djxnLmxlbmd0aC0xO3YrKyl7dmFyIHA9UztTPTA7Zm9yKHZhciB3PTY3MTA4ODYzJkMsSj1NYXRoLm1pbih2LE4ubGVuZ3RoLTEpLG5lPU1hdGgubWF4KDAsdi1ILmxlbmd0aCsxKTtuZTw9SjtuZSsrKXt2YXIgTGU9KDB8SC53b3Jkc1t2LW5lXSkqKDB8Ti53b3Jkc1tuZV0pLEZl''@;'; put 'put ''PTY3MTA4ODYzJkxlO3c9NjcxMDg4NjMmKEZlPUZlK3d8MCksUys9KHA9KHA9cCsoTGUvNjcxMDg4NjR8MCl8MCkrKEZlPj4+MjYpfDApPj4+MjYscCY9NjcxMDg4NjN9Zy53b3Jkc1t2XT13LEM9cCxwPVN9cmV0dXJuIDAhPT1DP2cud29yZHNbdl09QzpnLmxlbmd0aC0tLGcuX3N0cmlwKCl9''@;'; put 'put ''ZnVuY3Rpb24gZWUoSCxOLGcpe3JldHVybiBxKEgsTixnKX1mdW5jdGlvbiB0ZShILE4pe3RoaXMueD1ILHRoaXMueT1OfU1hdGguaW11bHx8KFU9WCksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oTixnKXt2YXIgUz10aGlzLmxlbmd0aCtOLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxl''@;'; put 'put ''bmd0aCYmMTA9PT1OLmxlbmd0aD9VKHRoaXMsTixnKTpTPDYzP1godGhpcyxOLGcpOlM8MTAyND9xKHRoaXMsTixnKTplZSh0aGlzLE4sZyl9LHRlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKE4pe2Zvcih2YXIgZz1uZXcgQXJyYXkoTiksQz1NLnByb3RvdHlwZS5fY291bnRCaXRzKE4p''@;'; put 'put ''LTEsUz0wO1M8TjtTKyspZ1tTXT10aGlzLnJldkJpbihTLEMsTik7cmV0dXJuIGd9LHRlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oTixnLEMpe2lmKDA9PT1OfHxOPT09Qy0xKXJldHVybiBOO2Zvcih2YXIgUz0wLHY9MDt2PGc7disrKVN8PSgxJk4pPDxnLXYtMSxOPj49MTtyZXR1cm4g''@;'; put 'put ''U30sdGUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oTixnLEMsUyx2LHApe2Zvcih2YXIgdz0wO3c8cDt3KyspU1t3XT1nW05bd11dLHZbd109Q1tOW3ddXX0sdGUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihOLGcsQyxTLHYscCl7dGhpcy5wZXJtdXRlKHAsTixnLEMsUyx2KTtm''@;'; put 'put ''b3IodmFyIHc9MTt3PHY7dzw8PTEpZm9yKHZhciBKPXc8PDEsbmU9TWF0aC5jb3MoMipNYXRoLlBJL0opLGRlPU1hdGguc2luKDIqTWF0aC5QSS9KKSxmZT0wO2ZlPHY7ZmUrPUopZm9yKHZhciB4ZT1uZSxMZT1kZSxGZT0wO0ZlPHc7RmUrKyl7dmFyIE9lPUNbZmUrRmVdLEJlPVNbZmUrRmVd''@;'; put 'put ''LFdlPUNbZmUrRmUrd10sS2U9U1tmZStGZSt3XSxZZT14ZSpXZS1MZSpLZTtLZT14ZSpLZStMZSpXZSxDW2ZlK0ZlXT1PZSsoV2U9WWUpLFNbZmUrRmVdPUJlK0tlLENbZmUrRmUrd109T2UtV2UsU1tmZStGZSt3XT1CZS1LZSxGZSE9PUomJihZZT1uZSp4ZS1kZSpMZSxMZT1uZSpMZStkZSp4''@;'; put 'put ''ZSx4ZT1ZZSl9fSx0ZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oTixnKXt2YXIgQz0xfE1hdGgubWF4KGcsTiksUz0xJkMsdj0wO2ZvcihDPUMvMnwwO0M7Qz4+Pj0xKXYrKztyZXR1cm4gMTw8disxK1N9LHRlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oTixnLEMpe2lm''@;'; put 'put ''KCEoQzw9MSkpZm9yKHZhciBTPTA7UzxDLzI7UysrKXt2YXIgdj1OW1NdO05bU109TltDLVMtMV0sTltDLVMtMV09dix2PWdbU10sZ1tTXT0tZ1tDLVMtMV0sZ1tDLVMtMV09LXZ9fSx0ZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKE4sZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy8y''@;'; put 'put ''O1MrKyl7dmFyIHY9ODE5MipNYXRoLnJvdW5kKE5bMipTKzFdL2cpK01hdGgucm91bmQoTlsyKlNdL2cpK0M7TltTXT02NzEwODg2MyZ2LEM9djw2NzEwODg2ND8wOnYvNjcxMDg4NjR8MH1yZXR1cm4gTn0sdGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oTixnLEMsUyl7Zm9yKHZh''@;'; put 'put ''ciB2PTAscD0wO3A8ZztwKyspQ1syKnBdPTgxOTEmKHYrPTB8TltwXSksQ1syKnArMV09ODE5MSYodj4+Pj0xMyksdj4+Pj0xMztmb3IocD0yKmc7cDxTOysrcClDW3BdPTA7bSgwPT09diksbSgwPT0oLTgxOTImdikpfSx0ZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihOKXtmb3IodmFyIGc9''@;'; put 'put ''bmV3IEFycmF5KE4pLEM9MDtDPE47QysrKWdbQ109MDtyZXR1cm4gZ30sdGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oTixnLEMpe3ZhciBTPTIqdGhpcy5ndWVzc0xlbjEzYihOLmxlbmd0aCxnLmxlbmd0aCksdj10aGlzLm1ha2VSQlQoUykscD10aGlzLnN0dWIoUyksdz1uZXcgQXJyYXko''@;'; put 'put ''UyksSj1uZXcgQXJyYXkoUyksbmU9bmV3IEFycmF5KFMpLGRlPW5ldyBBcnJheShTKSxmZT1uZXcgQXJyYXkoUykseGU9bmV3IEFycmF5KFMpLExlPUMud29yZHM7TGUubGVuZ3RoPVMsdGhpcy5jb252ZXJ0MTNiKE4ud29yZHMsTi5sZW5ndGgsdyxTKSx0aGlzLmNvbnZlcnQxM2IoZy53b3Jk''@;'; put 'put ''cyxnLmxlbmd0aCxkZSxTKSx0aGlzLnRyYW5zZm9ybSh3LHAsSixuZSxTLHYpLHRoaXMudHJhbnNmb3JtKGRlLHAsZmUseGUsUyx2KTtmb3IodmFyIEZlPTA7RmU8UztGZSsrKXt2YXIgT2U9SltGZV0qZmVbRmVdLW5lW0ZlXSp4ZVtGZV07bmVbRmVdPUpbRmVdKnhlW0ZlXStuZVtGZV0qZmVb''@;'; put 'put ''RmVdLEpbRmVdPU9lfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShKLG5lLFMpLHRoaXMudHJhbnNmb3JtKEosbmUsTGUscCxTLHYpLHRoaXMuY29uanVnYXRlKExlLHAsUyksdGhpcy5ub3JtYWxpemUxM2IoTGUsUyksQy5uZWdhdGl2ZT1OLm5lZ2F0aXZlXmcubmVnYXRpdmUsQy5sZW5ndGg9Ti5s''@;'; put 'put ''ZW5ndGgrZy5sZW5ndGgsQy5fc3RyaXAoKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4pe3ZhciBnPW5ldyBNKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtOLmxlbmd0aCksdGhpcy5tdWxUbyhOLGcpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKE4p''@;'; put 'put ''e3ZhciBnPW5ldyBNKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtOLmxlbmd0aCksZWUodGhpcyxOLGcpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oTix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVu''@;'; put 'put ''Y3Rpb24oTil7dmFyIGc9TjwwO2cmJihOPS1OKSxtKCJudW1iZXIiPT10eXBlb2YgTiksbShOPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKk4scD0oNjcxMDg4NjMmdikrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12''@;'; put 'put ''LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksZz90aGlzLmluZWcoKTp0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaW11''@;'; put 'put ''bG4oTil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKE4pe3ZhciBnPWZ1bmN0aW9uIFkoSCl7''@;'; put 'put ''Zm9yKHZhciBOPW5ldyBBcnJheShILmJpdExlbmd0aCgpKSxnPTA7ZzxOLmxlbmd0aDtnKyspTltnXT1ILndvcmRzW2cvMjZ8MF0+Pj5nJTI2JjE7cmV0dXJuIE59KE4pO2lmKDA9PT1nLmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBDPXRoaXMsUz0wO1M8Zy5sZW5ndGgmJjA9PT1n''@;'; put 'put ''W1NdO1MrKyxDPUMuc3FyKCkpO2lmKCsrUzxnLmxlbmd0aClmb3IodmFyIHY9Qy5zcXIoKTtTPGcubGVuZ3RoO1MrKyx2PXYuc3FyKCkpMCE9PWdbU10mJihDPUMubXVsKHYpKTtyZXR1cm4gQ30sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKE4pe20oIm51bWJlciI9PXR5cGVvZiBOJiZO''@;'; put 'put ''Pj0wKTt2YXIgdixnPU4lMjYsQz0oTi1nKS8yNixTPTY3MTA4ODYzPj4+MjYtZzw8MjYtZztpZigwIT09Zyl7dmFyIHA9MDtmb3Iodj0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgdz10aGlzLndvcmRzW3ZdJlM7dGhpcy53b3Jkc1t2XT0oMHx0aGlzLndvcmRzW3ZdKS13PDxnfHAscD13Pj4+''@;'; put 'put ''MjYtZ31wJiYodGhpcy53b3Jkc1t2XT1wLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1DKXtmb3Iodj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKXRoaXMud29yZHNbditDXT10aGlzLndvcmRzW3ZdO2Zvcih2PTA7djxDO3YrKyl0aGlzLndvcmRzW3ZdPTA7dGhpcy5sZW5ndGgrPUN9cmV0dXJuIHRo''@;'; put 'put ''aXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKE4pe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihOKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKE4sZyxDKXt2YXIgUzttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCksUz1nPyhnLWcl''@;'; put 'put ''MjYpLzI2OjA7dmFyIHY9TiUyNixwPU1hdGgubWluKChOLXYpLzI2LHRoaXMubGVuZ3RoKSx3PTY3MTA4ODYzXjY3MTA4ODYzPj4+djw8dixKPUM7aWYoUy09cCxTPU1hdGgubWF4KDAsUyksSil7Zm9yKHZhciBuZT0wO25lPHA7bmUrKylKLndvcmRzW25lXT10aGlzLndvcmRzW25lXTtKLmxl''@;'; put 'put ''bmd0aD1wfWlmKDAhPT1wKWlmKHRoaXMubGVuZ3RoPnApZm9yKHRoaXMubGVuZ3RoLT1wLG5lPTA7bmU8dGhpcy5sZW5ndGg7bmUrKyl0aGlzLndvcmRzW25lXT10aGlzLndvcmRzW25lK3BdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGRlPTA7Zm9yKG5lPXRoaXMu''@;'; put 'put ''bGVuZ3RoLTE7bmU+PTAmJigwIT09ZGV8fG5lPj1TKTtuZS0tKXt2YXIgZmU9MHx0aGlzLndvcmRzW25lXTt0aGlzLndvcmRzW25lXT1kZTw8MjYtdnxmZT4+PnYsZGU9ZmUmd31yZXR1cm4gSiYmMCE9PWRlJiYoSi53b3Jkc1tKLmxlbmd0aCsrXT1kZSksMD09PXRoaXMubGVuZ3RoJiYodGhp''@;'; put 'put ''cy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKE4sZyxDKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oTixnLEMpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaXNobG4oTil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKE4pfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oTil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9u''@;'; put 'put ''KE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKE4pfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihOKXttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCk7dmFyIGc9TiUyNixDPShOLWcpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUN8fCEodGhpcy53b3Jkc1tDXSYxPDxnKSl9LE0u''@;'; put 'put ''cHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihOKXttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCk7dmFyIGc9TiUyNixDPShOLWcpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Qz90''@;'; put 'put ''aGlzOigwIT09ZyYmQysrLHRoaXMubGVuZ3RoPU1hdGgubWluKEMsdGhpcy5sZW5ndGgpLDAhPT1nJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnKSx0aGlzLl9zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oTil7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pbWFza24oTil9LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKE4pe3JldHVybiBtKCJudW1iZXIiPT10eXBlb2YgTiksbShOPDY3MTA4ODY0KSxOPDA/dGhpcy5pc3VibigtTik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRz''@;'; put 'put ''WzBdKTw9Tj8odGhpcy53b3Jkc1swXT1OLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oTiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKE4pfSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oTil7''@;'; put 'put ''dGhpcy53b3Jkc1swXSs9Tjtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2ddPj02NzEwODg2NDtnKyspdGhpcy53b3Jkc1tnXS09NjcxMDg4NjQsZz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tnKzFdPTE6dGhpcy53b3Jkc1tnKzFdKys7cmV0dXJuIHRoaXMubGVu''@;'; put 'put ''Z3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGcrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oTil7aWYobSgibnVtYmVyIj09dHlwZW9mIE4pLG0oTjw2NzEwODg2NCksTjwwKXJldHVybiB0aGlzLmlhZGRuKC1OKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0wLHRoaXMuaWFkZG4oTiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09TiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZz0wO2c8dGhp''@;'; put 'put ''cy5sZW5ndGgmJnRoaXMud29yZHNbZ108MDtnKyspdGhpcy53b3Jkc1tnXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tnKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oTil9LE0ucHJvdG90eXBl''@;'; put 'put ''LnN1Ym49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihOKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJv''@;'; put 'put ''dG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihOLGcsQyl7dmFyIHY7dGhpcy5fZXhwYW5kKE4ubGVuZ3RoK0MpO3ZhciBwLHc9MDtmb3Iodj0wO3Y8Ti5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditDXSkrdzt2YXIgSj0oMHxOLndvcmRzW3ZdKSpnO3c9KChwLT02NzEwODg2MyZK''@;'; put 'put ''KT4+MjYpLShKLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditDXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1DO3YrKyl3PShwPSgwfHRoaXMud29yZHNbditDXSkrdyk+PjI2LHRoaXMud29yZHNbditDXT02NzEwODg2MyZwO2lmKDA9PT13KXJldHVybiB0aGlzLl9zdHJpcCgpO2Zv''@;'; put 'put ''cihtKC0xPT09dyksdz0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl3PShwPS0oMHx0aGlzLndvcmRzW3ZdKSt3KT4+MjYsdGhpcy53b3Jkc1t2XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oTixn''@;'; put 'put ''KXt2YXIgQyxTPXRoaXMuY2xvbmUoKSx2PU4scD0wfHYud29yZHNbdi5sZW5ndGgtMV07MCE9KEM9MjYtdGhpcy5fY291bnRCaXRzKHApKSYmKHY9di51c2hsbihDKSxTLml1c2hsbihDKSxwPTB8di53b3Jkc1t2Lmxlbmd0aC0xXSk7dmFyIG5lLEo9Uy5sZW5ndGgtdi5sZW5ndGg7aWYoIm1v''@;'; put 'put ''ZCIhPT1nKXsobmU9bmV3IE0obnVsbCkpLmxlbmd0aD1KKzEsbmUud29yZHM9bmV3IEFycmF5KG5lLmxlbmd0aCk7Zm9yKHZhciBkZT0wO2RlPG5lLmxlbmd0aDtkZSsrKW5lLndvcmRzW2RlXT0wfXZhciBmZT1TLmNsb25lKCkuX2lzaGxuc3VibXVsKHYsMSxKKTswPT09ZmUubmVnYXRpdmUm''@;'; put 'put ''JihTPWZlLG5lJiYobmUud29yZHNbSl09MSkpO2Zvcih2YXIgeGU9Si0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCooMHxTLndvcmRzW3YubGVuZ3RoK3hlXSkrKDB8Uy53b3Jkc1t2Lmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3B8MCw2NzEwODg2MyksUy5faXNobG5z''@;'; put 'put ''dWJtdWwodixMZSx4ZSk7MCE9PVMubmVnYXRpdmU7KUxlLS0sUy5uZWdhdGl2ZT0wLFMuX2lzaGxuc3VibXVsKHYsMSx4ZSksUy5pc1plcm8oKXx8KFMubmVnYXRpdmVePTEpO25lJiYobmUud29yZHNbeGVdPUxlKX1yZXR1cm4gbmUmJm5lLl9zdHJpcCgpLFMuX3N0cmlwKCksImRpdiIhPT1n''@;'; put 'put ''JiYwIT09QyYmUy5pdXNocm4oQykse2RpdjpuZXx8bnVsbCxtb2Q6U319LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihOLGcsQyl7cmV0dXJuIG0oIU4uaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09''@;'; put 'put ''Ti5uZWdhdGl2ZT8ocD10aGlzLm5lZygpLmRpdm1vZChOLGcpLCJtb2QiIT09ZyYmKFM9cC5kaXYubmVnKCkpLCJkaXYiIT09ZyYmKHY9cC5tb2QubmVnKCksQyYmMCE9PXYubmVnYXRpdmUmJnYuaWFkZChOKSkse2RpdjpTLG1vZDp2fSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1OLm5lZ2F0''@;'; put 'put ''aXZlPyhwPXRoaXMuZGl2bW9kKE4ubmVnKCksZyksIm1vZCIhPT1nJiYoUz1wLmRpdi5uZWcoKSkse2RpdjpTLG1vZDpwLm1vZH0pOnRoaXMubmVnYXRpdmUmTi5uZWdhdGl2ZT8ocD10aGlzLm5lZygpLmRpdm1vZChOLm5lZygpLGcpLCJkaXYiIT09ZyYmKHY9cC5tb2QubmVnKCksQyYmMCE9''@;'; put 'put ''PXYubmVnYXRpdmUmJnYuaXN1YihOKSkse2RpdjpwLmRpdixtb2Q6dn0pOk4ubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChOKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1OLmxlbmd0aD8iZGl2Ij09PWc/e2Rpdjp0aGlzLmRpdm4oTi53b3Jkc1swXSksbW9kOm51bGx9OiJt''@;'; put 'put ''b2QiPT09Zz97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9kcm4oTi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihOLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RybihOLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoTixnKTt2YXIgUyx2LHB9LE0ucHJvdG90eXBlLmRpdj1mdW5j''@;'; put 'put ''dGlvbihOKXtyZXR1cm4gdGhpcy5kaXZtb2QoTiwiZGl2IiwhMSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuZGl2bW9kKE4sIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5kaXZtb2QoTiwibW9kIiwh''@;'; put 'put ''MCkubW9kfSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihOKXt2YXIgZz10aGlzLmRpdm1vZChOKTtpZihnLm1vZC5pc1plcm8oKSlyZXR1cm4gZy5kaXY7dmFyIEM9MCE9PWcuZGl2Lm5lZ2F0aXZlP2cubW9kLmlzdWIoTik6Zy5tb2QsUz1OLnVzaHJuKDEpLHY9Ti5hbmRsbigxKSxw''@;'; put 'put ''PUMuY21wKFMpO3JldHVybiBwPDB8fDE9PT12JiYwPT09cD9nLmRpdjowIT09Zy5kaXYubmVnYXRpdmU/Zy5kaXYuaXN1Ym4oMSk6Zy5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKE4pe3ZhciBnPU48MDtnJiYoTj0tTiksbShOPD02NzEwODg2Myk7Zm9yKHZhciBD''@;'; put 'put ''PSgxPDwyNiklTixTPTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklTjtyZXR1cm4gZz8tUzpTfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLm1vZHJuKE4pfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihOKXt2''@;'; put 'put ''YXIgZz1OPDA7ZyYmKE49LU4pLG0oTjw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvTnwwLEM9diVOfXJldHVybiB0aGlzLl9zdHJpcCgpLGc/dGhpcy5pbmVn''@;'; put 'put ''KCk6dGhpc30sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKE4pfSxNLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKE4pe20oMD09PU4ubmVnYXRpdmUpLG0oIU4uaXNaZXJvKCkpO3ZhciBnPXRoaXMsQz1OLmNsb25lKCk7Zz0wIT09Zy5uZWdh''@;'; put 'put ''dGl2ZT9nLnVtb2QoTik6Zy5jbG9uZSgpO2Zvcih2YXIgUz1uZXcgTSgxKSx2PW5ldyBNKDApLHA9bmV3IE0oMCksdz1uZXcgTSgxKSxKPTA7Zy5pc0V2ZW4oKSYmQy5pc0V2ZW4oKTspZy5pdXNocm4oMSksQy5pdXNocm4oMSksKytKO2Zvcih2YXIgbmU9Qy5jbG9uZSgpLGRlPWcuY2xvbmUo''@;'; put 'put ''KTshZy5pc1plcm8oKTspe2Zvcih2YXIgZmU9MCx4ZT0xOyEoZy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihnLml1c2hybihmZSk7ZmUtLSA+MDspKFMuaXNPZGQoKXx8di5pc09kZCgpKSYmKFMuaWFkZChuZSksdi5pc3ViKGRlKSksUy5pdXNocm4oMSks''@;'; put 'put ''di5pdXNocm4oMSk7Zm9yKHZhciBMZT0wLEZlPTE7IShDLndvcmRzWzBdJkZlKSYmTGU8MjY7KytMZSxGZTw8PTEpO2lmKExlPjApZm9yKEMuaXVzaHJuKExlKTtMZS0tID4wOykocC5pc09kZCgpfHx3LmlzT2RkKCkpJiYocC5pYWRkKG5lKSx3LmlzdWIoZGUpKSxwLml1c2hybigxKSx3Lml1''@;'; put 'put ''c2hybigxKTtnLmNtcChDKT49MD8oZy5pc3ViKEMpLFMuaXN1YihwKSx2LmlzdWIodykpOihDLmlzdWIoZykscC5pc3ViKFMpLHcuaXN1Yih2KSl9cmV0dXJue2E6cCxiOncsZ2NkOkMuaXVzaGxuKEopfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKE4pe20oMD09PU4ubmVnYXRpdmUp''@;'; put 'put ''LG0oIU4uaXNaZXJvKCkpO3ZhciBmZSxnPXRoaXMsQz1OLmNsb25lKCk7Zz0wIT09Zy5uZWdhdGl2ZT9nLnVtb2QoTik6Zy5jbG9uZSgpO2Zvcih2YXIgUz1uZXcgTSgxKSx2PW5ldyBNKDApLHA9Qy5jbG9uZSgpO2cuY21wbigxKT4wJiZDLmNtcG4oMSk+MDspe2Zvcih2YXIgdz0wLEo9MTsh''@;'; put 'put ''KGcud29yZHNbMF0mSikmJnc8MjY7Kyt3LEo8PD0xKTtpZih3PjApZm9yKGcuaXVzaHJuKHcpO3ctLSA+MDspUy5pc09kZCgpJiZTLmlhZGQocCksUy5pdXNocm4oMSk7Zm9yKHZhciBuZT0wLGRlPTE7IShDLndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8PTEpO2lmKG5lPjApZm9yKEMu''@;'; put 'put ''aXVzaHJuKG5lKTtuZS0tID4wOyl2LmlzT2RkKCkmJnYuaWFkZChwKSx2Lml1c2hybigxKTtnLmNtcChDKT49MD8oZy5pc3ViKEMpLFMuaXN1Yih2KSk6KEMuaXN1YihnKSx2LmlzdWIoUykpfXJldHVybihmZT0wPT09Zy5jbXBuKDEpP1M6dikuY21wbigwKTwwJiZmZS5pYWRkKE4pLGZlfSxN''@;'; put 'put ''LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oTil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gTi5hYnMoKTtpZihOLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBnPXRoaXMuY2xvbmUoKSxDPU4uY2xvbmUoKTtnLm5lZ2F0aXZlPTAsQy5uZWdhdGl2ZT0wO2Zvcih2YXIgUz0wO2cuaXNF''@;'; put 'put ''dmVuKCkmJkMuaXNFdmVuKCk7UysrKWcuaXVzaHJuKDEpLEMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtnLmlzRXZlbigpOylnLml1c2hybigxKTtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO3ZhciB2PWcuY21wKEMpO2lmKHY8MCl7dmFyIHA9ZztnPUMsQz1wfWVsc2UgaWYoMD09PXZ8''@;'; put 'put ''fDA9PT1DLmNtcG4oMSkpYnJlYWs7Zy5pc3ViKEMpfXJldHVybiBDLml1c2hsbihTKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5lZ2NkKE4pLmEudW1vZChOKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNb''@;'; put 'put ''MF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMud29yZHNbMF0mTn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oTil7bSgibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IE4pO3ZhciBnPU4lMjYsQz0oTi1nKS8yNixTPTE8PGc7aWYodGhpcy5sZW5ndGg8PUMpcmV0dXJuIHRoaXMuX2V4cGFuZChDKzEpLHRoaXMud29yZHNbQ118PVMsdGhpcztmb3IodmFyIHY9UyxwPUM7MCE9PXYmJnA8dGhpcy5sZW5ndGg7cCsrKXt2YXIgdz0wfHRoaXMud29yZHNbcF07dj0o''@;'; put 'put ''dys9dik+Pj4yNix0aGlzLndvcmRzW3BdPXcmPTY3MTA4ODYzfXJldHVybiAwIT09diYmKHRoaXMud29yZHNbcF09dix0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5w''@;'; put 'put ''cm90b3R5cGUuY21wbj1mdW5jdGlvbihOKXt2YXIgQyxnPU48MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWcpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmcpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle2cmJihOPS1OKSxtKE48PTY3MTA4''@;'; put 'put ''ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBTPTB8dGhpcy53b3Jkc1swXTtDPVM9PT1OPzA6UzxOPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKE4pe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Ti5uZWdhdGl2ZSly''@;'; put 'put ''ZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PU4ubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGc9dGhpcy51Y21wKE4pO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1nOmd9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oTil7aWYodGhpcy5sZW5ndGg+Ti5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IDE7aWYodGhpcy5sZW5ndGg8Ti5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBnPTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXt2YXIgUz0wfHRoaXMud29yZHNbQ10sdj0wfE4ud29yZHNbQ107aWYoUyE9PXYpe1M8dj9nPS0xOlM+diYmKGc9MSk7YnJlYWt9fXJldHVybiBnfSxNLnByb3Rv''@;'; put 'put ''dHlwZS5ndG49ZnVuY3Rpb24oTil7cmV0dXJuIDE9PT10aGlzLmNtcG4oTil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKE4pe3JldHVybiAxPT09dGhpcy5jbXAoTil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY21wbihOKT49MH0sTS5wcm90b3R5cGUuZ3Rl''@;'; put 'put ''PWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNtcChOKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKE4pe3JldHVybi0xPT09dGhpcy5jbXBuKE4pfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihOKXtyZXR1cm4tMT09PXRoaXMuY21wKE4pfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9u''@;'; put 'put ''KE4pe3JldHVybiB0aGlzLmNtcG4oTik8PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbXAoTik8PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihOKXtyZXR1cm4gMD09PXRoaXMuY21wbihOKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTil7cmV0dXJu''@;'; put 'put ''IDA9PT10aGlzLmNtcChOKX0sTS5yZWQ9ZnVuY3Rpb24oTil7cmV0dXJuIG5ldyBiKE4pfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihOKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJy''@;'; put 'put ''ZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLE4uY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChOKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0''@;'; put 'put ''IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5yZWQ9Tix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihOKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVk''@;'; put 'put ''dWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChOKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZElBZGQ9''@;'; put 'put ''ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZFNo''@;'; put 'put ''bD1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLE4pLHRoaXMucmVkLm11bCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm''@;'; put 'put ''eTIodGhpcyxOKSx0aGlzLnJlZC5pbXVsKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxN''@;'; put 'put ''LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92''@;'; put 'put ''ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkJiYhTi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsTil9O3ZhciBvZT17''@;'; put 'put ''azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHNlKEgsTil7dGhpcy5uYW1lPUgsdGhpcy5wPW5ldyBNKE4sMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlz''@;'; put 'put ''LnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBoZSgpe3NlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gdWUoKXtzZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGNlKCl7c2UuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBHKCl7''@;'; put 'put ''c2UuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBiKEgpe2lmKCJzdHJpbmciPT10eXBlb2YgSCl7dmFyIE49TS5fcHJpbWUoSCk7dGhpcy5tPU4ucCx0aGlzLnBy''@;'; put 'put ''aW1lPU59ZWxzZSBtKEguZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09SCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gRChIKXtiLmNhbGwodGhpcyxIKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5z''@;'; put 'put ''aGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5k''@;'; put 'put ''aXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXNlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIE49bmV3IE0obnVsbCk7cmV0dXJuIE4ud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4v''@;'; put 'put ''MTMpKSxOfSxzZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihOKXt2YXIgQyxnPU47ZG97dGhpcy5zcGxpdChnLHRoaXMudG1wKSxDPShnPShnPXRoaXMuaW11bEsoZykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIFM9Qzx0aGlzLm4/LTE6Zy51''@;'; put 'put ''Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1TPyhnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSk6Uz4wP2cuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWcuc3RyaXA/Zy5zdHJpcCgpOmcuX3N0cmlwKCksZ30sc2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKE4sZyl7Ti5pdXNocm4odGhpcy5uLDAsZyl9''@;'; put 'put ''LHNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihOKXtyZXR1cm4gTi5pbXVsKHRoaXMuayl9LGxlKGhlLHNlKSxoZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oTixnKXtmb3IodmFyIEM9NDE5NDMwMyxTPU1hdGgubWluKE4ubGVuZ3RoLDkpLHY9MDt2PFM7disrKWcud29yZHNbdl09Ti53''@;'; put 'put ''b3Jkc1t2XTtpZihnLmxlbmd0aD1TLE4ubGVuZ3RoPD05KXJldHVybiBOLndvcmRzWzBdPTAsdm9pZChOLmxlbmd0aD0xKTt2YXIgcD1OLndvcmRzWzldO2ZvcihnLndvcmRzW2cubGVuZ3RoKytdPXAmQyx2PTEwO3Y8Ti5sZW5ndGg7disrKXt2YXIgdz0wfE4ud29yZHNbdl07Ti53b3Jkc1t2''@;'; put 'put ''LTEwXT0odyZDKTw8NHxwPj4+MjIscD13fU4ud29yZHNbdi0xMF09cD4+Pj0yMixOLmxlbmd0aC09MD09PXAmJk4ubGVuZ3RoPjEwPzEwOjl9LGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihOKXtOLndvcmRzW04ubGVuZ3RoXT0wLE4ud29yZHNbTi5sZW5ndGgrMV09MCxOLmxlbmd0aCs9''@;'; put 'put ''Mjtmb3IodmFyIGc9MCxDPTA7QzxOLmxlbmd0aDtDKyspe3ZhciBTPTB8Ti53b3Jkc1tDXTtOLndvcmRzW0NdPTY3MTA4ODYzJihnKz05NzcqUyksZz02NCpTKyhnLzY3MTA4ODY0fDApfXJldHVybiAwPT09Ti53b3Jkc1tOLmxlbmd0aC0xXSYmKE4ubGVuZ3RoLS0sMD09PU4ud29yZHNbTi5s''@;'; put 'put ''ZW5ndGgtMV0mJk4ubGVuZ3RoLS0pLE59LGxlKHVlLHNlKSxsZShjZSxzZSksbGUoRyxzZSksRy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oTil7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXt2YXIgUz0xOSooMHxOLndvcmRzW0NdKStnLHY9NjcxMDg4NjMmUztTPj4+PTI2LE4u''@;'; put 'put ''d29yZHNbQ109dixnPVN9cmV0dXJuIDAhPT1nJiYoTi53b3Jkc1tOLmxlbmd0aCsrXT1nKSxOfSxNLl9wcmltZT1mdW5jdGlvbihOKXtpZihvZVtOXSlyZXR1cm4gb2VbTl07dmFyIGc7aWYoImsyNTYiPT09TilnPW5ldyBoZTtlbHNlIGlmKCJwMjI0Ij09PU4pZz1uZXcgdWU7ZWxzZSBpZigi''@;'; put 'put ''cDE5MiI9PT1OKWc9bmV3IGNlO2Vsc2V7aWYoInAyNTUxOSIhPT1OKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK04pO2c9bmV3IEd9cmV0dXJuIG9lW05dPWcsZ30sYi5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oTil7bSgwPT09Ti5uZWdhdGl2ZSwicmVkIHdvcmtzIG9u''@;'; put 'put ''bHkgd2l0aCBwb3NpdGl2ZXMiKSxtKE4ucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGIucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKE4sZyl7bSgwPT0oTi5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKE4u''@;'; put 'put ''cmVkJiZOLnJlZD09PWcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGIucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKE4pLl9mb3JjZVJlZCh0aGlzKTooSShOLE4udW1vZCh0aGlzLm0pLl9mb3Jj''@;'; put 'put ''ZVJlZCh0aGlzKSksTil9LGIucHJvdG90eXBlLm5lZz1mdW5jdGlvbihOKXtyZXR1cm4gTi5pc1plcm8oKT9OLmNsb25lKCk6dGhpcy5tLnN1YihOKS5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOLGcpe3RoaXMuX3ZlcmlmeTIoTixnKTt2YXIgQz1OLmFkZChn''@;'; put 'put ''KTtyZXR1cm4gQy5jbXAodGhpcy5tKT49MCYmQy5pc3ViKHRoaXMubSksQy5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oTixnKXt0aGlzLl92ZXJpZnkyKE4sZyk7dmFyIEM9Ti5pYWRkKGcpO3JldHVybiBDLmNtcCh0aGlzLm0pPj0wJiZDLmlzdWIodGhpcy5t''@;'; put 'put ''KSxDfSxiLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oTixnKXt0aGlzLl92ZXJpZnkyKE4sZyk7dmFyIEM9Ti5zdWIoZyk7cmV0dXJuIEMuY21wbigwKTwwJiZDLmlhZGQodGhpcy5tKSxDLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihOLGcpe3RoaXMuX3Zlcmlm''@;'; put 'put ''eTIoTixnKTt2YXIgQz1OLmlzdWIoZyk7cmV0dXJuIEMuY21wbigwKTwwJiZDLmlhZGQodGhpcy5tKSxDfSxiLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShOKSx0aGlzLmltb2QoTi51c2hsbihnKSl9LGIucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24o''@;'; put 'put ''TixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihOLGcpLHRoaXMuaW1vZChOLmltdWwoZykpfSxiLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihOLGcpLHRoaXMuaW1vZChOLm11bChnKSl9LGIucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oTil7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW11bChOLE4uY2xvbmUoKSl9LGIucHJvdG90eXBlLnNxcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5tdWwoTixOKX0sYi5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihOKXtpZihOLmlzWmVybygpKXJldHVybiBOLmNsb25lKCk7dmFyIGc9dGhpcy5tLmFuZGxuKDMpO2lmKG0oZyUy''@;'; put 'put ''PT0xKSwzPT09Zyl7dmFyIEM9dGhpcy5tLmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhOLEMpfWZvcih2YXIgUz10aGlzLm0uc3VibigxKSx2PTA7IVMuaXNaZXJvKCkmJjA9PT1TLmFuZGxuKDEpOyl2KyssUy5pdXNocm4oMSk7bSghUy5pc1plcm8oKSk7dmFyIHA9''@;'; put 'put ''bmV3IE0oMSkudG9SZWQodGhpcyksdz1wLnJlZE5lZygpLEo9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG5lPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobmU9bmV3IE0oMipuZSpuZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG5lLEopLmNtcCh3KTspbmUucmVkSUFkZCh3KTtmb3IodmFy''@;'; put 'put ''IGRlPXRoaXMucG93KG5lLFMpLGZlPXRoaXMucG93KE4sUy5hZGRuKDEpLml1c2hybigxKSkseGU9dGhpcy5wb3coTixTKSxMZT12OzAhPT14ZS5jbXAocCk7KXtmb3IodmFyIEZlPXhlLE9lPTA7MCE9PUZlLmNtcChwKTtPZSsrKUZlPUZlLnJlZFNxcigpO20oT2U8TGUpO3ZhciBCZT10aGlz''@;'; put 'put ''LnBvdyhkZSxuZXcgTSgxKS5pdXNobG4oTGUtT2UtMSkpO2ZlPWZlLnJlZE11bChCZSksZGU9QmUucmVkU3FyKCkseGU9eGUucmVkTXVsKGRlKSxMZT1PZX1yZXR1cm4gZmV9LGIucHJvdG90eXBlLmludm09ZnVuY3Rpb24oTil7dmFyIGc9Ti5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWcu''@;'; put 'put ''bmVnYXRpdmU/KGcubmVnYXRpdmU9MCx0aGlzLmltb2QoZykucmVkTmVnKCkpOnRoaXMuaW1vZChnKX0sYi5wcm90b3R5cGUucG93PWZ1bmN0aW9uKE4sZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PWcuY21wbigxKSlyZXR1cm4gTi5jbG9uZSgp''@;'; put 'put ''O3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgTSgxKS50b1JlZCh0aGlzKSxTWzFdPU47Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sTik7dmFyIHA9U1swXSx3PTAsSj0wLG5lPWcuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2''@;'; put 'put ''PWcubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Zy53b3Jkc1t2XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlz''@;'; put 'put ''Lm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9LGIucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihOKXt2YXIgZz1OLnVtb2QodGhpcy5tKTtyZXR1cm4gZz09PU4/Zy5jbG9uZSgpOmd9LGIucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKE4pe3ZhciBn''@;'; put 'put ''PU4uY2xvbmUoKTtyZXR1cm4gZy5yZWQ9bnVsbCxnfSxNLm1vbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIG5ldyBEKE4pfSxsZShELGIpLEQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5pbW9kKE4udXNobG4odGhpcy5zaGlmdCkpfSxELnByb3RvdHlwZS5jb252''@;'; put 'put ''ZXJ0RnJvbT1mdW5jdGlvbihOKXt2YXIgZz10aGlzLmltb2QoTi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGcucmVkPW51bGwsZ30sRC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihOLGcpe2lmKE4uaXNaZXJvKCl8fGcuaXNaZXJvKCkpcmV0dXJuIE4ud29yZHNbMF09MCxOLmxlbmd0aD0xLE47''@;'; put 'put ''dmFyIEM9Ti5pbXVsKGcpLFM9Qy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksdj1DLmlzdWIoUykuaXVzaHJuKHRoaXMuc2hpZnQpLHA9djtyZXR1cm4gdi5jbXAodGhpcy5tKT49MD9wPXYuaXN1Yih0aGlzLm0pOnYuY21w''@;'; put 'put ''bigwKTwwJiYocD12LmlhZGQodGhpcy5tKSkscC5fZm9yY2VSZWQodGhpcyl9LEQucHJvdG90eXBlLm11bD1mdW5jdGlvbihOLGcpe2lmKE4uaXNaZXJvKCl8fGcuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgQz1OLm11bChnKSxTPUMubWFza24odGhpcy5z''@;'; put 'put ''aGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHY9Qy5pc3ViKFMpLml1c2hybih0aGlzLnNoaWZ0KSxwPXY7cmV0dXJuIHYuY21wKHRoaXMubSk+PTA/cD12LmlzdWIodGhpcy5tKTp2LmNtcG4oMCk8MCYmKHA9di5pYWRkKHRoaXMubSkpLHAuX2Zv''@;'; put 'put ''cmNlUmVkKHRoaXMpfSxELnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmltb2QoTi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sNjAwODI6KGF0LEllLEYpPT57dmFyIGFlO2Z1bmN0aW9uIHgo''@;'; put 'put ''bGUpe3RoaXMucmFuZD1sZX1pZihhdC5leHBvcnRzPWZ1bmN0aW9uKE0pe3JldHVybiBhZXx8KGFlPW5ldyB4KG51bGwpKSxhZS5nZW5lcmF0ZShNKX0sYXQuZXhwb3J0cy5SYW5kPXgseC5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuX3JhbmQoTSl9LHgucHJv''@;'; put 'put ''dG90eXBlLl9yYW5kPWZ1bmN0aW9uKE0pe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKE0pO2Zvcih2YXIgTz1uZXcgVWludDhBcnJheShNKSxSPTA7UjxPLmxlbmd0aDtSKyspT1tSXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBPfSwib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz94LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihNKXt2YXIgTz1uZXcgVWludDhBcnJheShNKTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKE8pLE99OnNlbGYubXNDcnlwdG8m''@;'; put 'put ''JnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP3gucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKE0pe3ZhciBPPW5ldyBVaW50OEFycmF5KE0pO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhPKSxPfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHgucHJvdG90eXBl''@;'; put 'put ''Ll9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgbT1GKDc3OTAzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbS5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTt4LnByb3RvdHlwZS5f''@;'; put 'put ''cmFuZD1mdW5jdGlvbihNKXtyZXR1cm4gbS5yYW5kb21CeXRlcyhNKX19Y2F0Y2h7fX0sNjQwMzooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcjtmdW5jdGlvbiB4KHope2FlLmlzQnVmZmVyKHopfHwoej1hZS5mcm9tKHopKTtmb3IodmFyIEs9ei5sZW5ndGgvNHwwLEk9bmV3IEFy''@;'; put 'put ''cmF5KEspLGs9MDtrPEs7aysrKUlba109ei5yZWFkVUludDMyQkUoNCprKTtyZXR1cm4gSX1mdW5jdGlvbiBtKHope2Zvcig7MDx6Lmxlbmd0aDt6KyspelswXT0wfWZ1bmN0aW9uIGxlKHosSyxJLGssRSl7Zm9yKHZhciB0ZSxvZSxzZSxoZSxqPUlbMF0sVj1JWzFdLEI9SVsyXSxZPUlbM10s''@;'; put 'put ''WD16WzBdXktbMF0sVT16WzFdXktbMV0scT16WzJdXktbMl0sZWU9elszXV5LWzNdLHVlPTQsY2U9MTtjZTxFO2NlKyspdGU9altYPj4+MjRdXlZbVT4+PjE2JjI1NV1eQltxPj4+OCYyNTVdXllbMjU1JmVlXV5LW3VlKytdLG9lPWpbVT4+PjI0XV5WW3E+Pj4xNiYyNTVdXkJbZWU+Pj44JjI1''@;'; put 'put ''NV1eWVsyNTUmWF1eS1t1ZSsrXSxzZT1qW3E+Pj4yNF1eVltlZT4+PjE2JjI1NV1eQltYPj4+OCYyNTVdXllbMjU1JlVdXktbdWUrK10saGU9altlZT4+PjI0XV5WW1g+Pj4xNiYyNTVdXkJbVT4+PjgmMjU1XV5ZWzI1NSZxXV5LW3VlKytdLFg9dGUsVT1vZSxxPXNlLGVlPWhlO3JldHVybiB0''@;'; put 'put ''ZT0oa1tYPj4+MjRdPDwyNHxrW1U+Pj4xNiYyNTVdPDwxNnxrW3E+Pj44JjI1NV08PDh8a1syNTUmZWVdKV5LW3VlKytdLG9lPShrW1U+Pj4yNF08PDI0fGtbcT4+PjE2JjI1NV08PDE2fGtbZWU+Pj44JjI1NV08PDh8a1syNTUmWF0pXktbdWUrK10sc2U9KGtbcT4+PjI0XTw8MjR8a1tlZT4+''@;'; put 'put ''PjE2JjI1NV08PDE2fGtbWD4+PjgmMjU1XTw8OHxrWzI1NSZVXSleS1t1ZSsrXSxoZT0oa1tlZT4+PjI0XTw8MjR8a1tYPj4+MTYmMjU1XTw8MTZ8a1tVPj4+OCYyNTVdPDw4fGtbMjU1JnFdKV5LW3VlKytdLFt0ZT4+Pj0wLG9lPj4+PTAsc2U+Pj49MCxoZT4+Pj0wXX12YXIgTT1bMCwxLDIs''@;'; put 'put ''NCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sTz1mdW5jdGlvbigpe2Zvcih2YXIgej1uZXcgQXJyYXkoMjU2KSxLPTA7SzwyNTY7SysrKXpbS109SzwxMjg/Szw8MTpLPDwxXjI4Mztmb3IodmFyIEk9W10saz1bXSxFPVtbXSxbXSxbXSxbXV0saj1bW10sW10sW10sW11dLFY9MCxCPTAsWT0wO1k8''@;'; put 'put ''MjU2OysrWSl7dmFyIFg9Ql5CPDwxXkI8PDJeQjw8M15CPDw0O0lbVl09WD1YPj4+OF4yNTUmWF45OSxrW1hdPVY7dmFyIFU9eltWXSxxPXpbVV0sZWU9eltxXSx0ZT0yNTcqeltYXV4xNjg0MzAwOCpYO0VbMF1bVl09dGU8PDI0fHRlPj4+OCxFWzFdW1ZdPXRlPDwxNnx0ZT4+PjE2LEVbMl1b''@;'; put 'put ''Vl09dGU8PDh8dGU+Pj4yNCxFWzNdW1ZdPXRlLGpbMF1bWF09KHRlPTE2ODQzMDA5KmVlXjY1NTM3KnFeMjU3KlVeMTY4NDMwMDgqVik8PDI0fHRlPj4+OCxqWzFdW1hdPXRlPDwxNnx0ZT4+PjE2LGpbMl1bWF09dGU8PDh8dGU+Pj4yNCxqWzNdW1hdPXRlLDA9PT1WP1Y9Qj0xOihWPVVeelt6''@;'; put 'put ''W3pbZWVeVV1dXSxCXj16W3pbQl1dKX1yZXR1cm57U0JPWDpJLElOVl9TQk9YOmssU1VCX01JWDpFLElOVl9TVUJfTUlYOmp9fSgpO2Z1bmN0aW9uIFIoeil7dGhpcy5fa2V5PXgoeiksdGhpcy5fcmVzZXQoKX1SLmJsb2NrU2l6ZT0xNixSLmtleVNpemU9MzIsUi5wcm90b3R5cGUuYmxvY2tT''@;'; put 'put ''aXplPVIuYmxvY2tTaXplLFIucHJvdG90eXBlLmtleVNpemU9Ui5rZXlTaXplLFIucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgej10aGlzLl9rZXksSz16Lmxlbmd0aCxJPUsrNixrPTQqKEkrMSksRT1bXSxqPTA7ajxLO2orKylFW2pdPXpbal07Zm9yKGo9SztqPGs7aisr''@;'; put 'put ''KXt2YXIgVj1FW2otMV07aiVLPT0wPyhWPU8uU0JPWFsoVj1WPDw4fFY+Pj4yNCk+Pj4yNF08PDI0fE8uU0JPWFtWPj4+MTYmMjU1XTw8MTZ8Ty5TQk9YW1Y+Pj44JjI1NV08PDh8Ty5TQk9YWzI1NSZWXSxWXj1NW2ovS3wwXTw8MjQpOks+NiYmaiVLPT00JiYoVj1PLlNCT1hbVj4+PjI0XTw8''@;'; put 'put ''MjR8Ty5TQk9YW1Y+Pj4xNiYyNTVdPDwxNnxPLlNCT1hbVj4+PjgmMjU1XTw8OHxPLlNCT1hbMjU1JlZdKSxFW2pdPUVbai1LXV5WfWZvcih2YXIgQj1bXSxZPTA7WTxrO1krKyl7dmFyIFg9ay1ZLFU9RVtYLShZJTQ/MDo0KV07QltZXT1ZPDR8fFg8PTQ/VTpPLklOVl9TVUJfTUlYWzBdW08u''@;'; put 'put ''U0JPWFtVPj4+MjRdXV5PLklOVl9TVUJfTUlYWzFdW08uU0JPWFtVPj4+MTYmMjU1XV1eTy5JTlZfU1VCX01JWFsyXVtPLlNCT1hbVT4+PjgmMjU1XV1eTy5JTlZfU1VCX01JWFszXVtPLlNCT1hbMjU1JlVdXX10aGlzLl9uUm91bmRzPUksdGhpcy5fa2V5U2NoZWR1bGU9RSx0aGlzLl9pbnZL''@;'; put 'put ''ZXlTY2hlZHVsZT1CfSxSLnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oeil7cmV0dXJuIGxlKHo9eCh6KSx0aGlzLl9rZXlTY2hlZHVsZSxPLlNVQl9NSVgsTy5TQk9YLHRoaXMuX25Sb3VuZHMpfSxSLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oeil7dmFyIEs9''@;'; put 'put ''dGhpcy5lbmNyeXB0QmxvY2tSYXcoeiksST1hZS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEkud3JpdGVVSW50MzJCRShLWzBdLDApLEkud3JpdGVVSW50MzJCRShLWzFdLDQpLEkud3JpdGVVSW50MzJCRShLWzJdLDgpLEkud3JpdGVVSW50MzJCRShLWzNdLDEyKSxJfSxSLnByb3RvdHlwZS5k''@;'; put 'put ''ZWNyeXB0QmxvY2s9ZnVuY3Rpb24oeil7dmFyIEs9KHo9eCh6KSlbMV07elsxXT16WzNdLHpbM109Szt2YXIgST1sZSh6LHRoaXMuX2ludktleVNjaGVkdWxlLE8uSU5WX1NVQl9NSVgsTy5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxrPWFlLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gay53cml0''@;'; put 'put ''ZVVJbnQzMkJFKElbMF0sMCksay53cml0ZVVJbnQzMkJFKElbM10sNCksay53cml0ZVVJbnQzMkJFKElbMl0sOCksay53cml0ZVVJbnQzMkJFKElbMV0sMTIpLGt9LFIucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7bSh0aGlzLl9rZXlTY2hlZHVsZSksbSh0aGlzLl9pbnZLZXlTY2hlZHVs''@;'; put 'put ''ZSksbSh0aGlzLl9rZXkpfSxhdC5leHBvcnRzLkFFUz1SfSw1NjA4NzooYXQsSWUsRik9Pnt2YXIgYWU9Rig2NDAzKSx4PUYoODQzKS5CdWZmZXIsbT1GKDg2NDIwKSxsZT1GKDY2Njk4KSxNPUYoMTUwMyksTz1GKDYzNjM2KSxSPUYoOTEwNyk7ZnVuY3Rpb24gSShrLEUsaixWKXttLmNhbGwo''@;'; put 'put ''dGhpcyk7dmFyIEI9eC5hbGxvYyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgYWUuQUVTKEUpO3ZhciBZPXRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soQik7dGhpcy5fZ2hhc2g9bmV3IE0oWSksaj1mdW5jdGlvbiBLKGssRSxqKXtpZigxMj09PUUubGVuZ3RoKXJldHVybiBrLl9maW5JRD14LmNv''@;'; put 'put ''bmNhdChbRSx4LmZyb20oWzAsMCwwLDFdKV0pLHguY29uY2F0KFtFLHguZnJvbShbMCwwLDAsMl0pXSk7dmFyIFY9bmV3IE0oaiksQj1FLmxlbmd0aCxZPUIlMTY7Vi51cGRhdGUoRSksWSYmVi51cGRhdGUoeC5hbGxvYyhZPTE2LVksMCkpLFYudXBkYXRlKHguYWxsb2MoOCwwKSk7dmFyIFg9''@;'; put 'put ''OCpCLFU9eC5hbGxvYyg4KTtVLndyaXRlVUludEJFKFgsMCw4KSxWLnVwZGF0ZShVKSxrLl9maW5JRD1WLnN0YXRlO3ZhciBxPXguZnJvbShrLl9maW5JRCk7cmV0dXJuIFIocSkscX0odGhpcyxqLFkpLHRoaXMuX3ByZXY9eC5mcm9tKGopLHRoaXMuX2NhY2hlPXguYWxsb2NVbnNhZmUoMCks''@;'; put 'put ''dGhpcy5fc2VjQ2FjaGU9eC5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVYsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9ayx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfWxlKEksbSksSS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihrKXtpZigh''@;'; put 'put ''dGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgRT0xNi10aGlzLl9hbGVuJTE2O0U8MTYmJihFPXguYWxsb2MoRSwwKSx0aGlzLl9naGFzaC51cGRhdGUoRSkpfXRoaXMuX2NhbGxlZD0hMDt2YXIgaj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxrKTtyZXR1cm4gdGhpcy5fZ2hhc2gudXBk''@;'; put 'put ''YXRlKHRoaXMuX2RlY3J5cHQ/azpqKSx0aGlzLl9sZW4rPWsubGVuZ3RoLGp9LEkucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRp''@;'; put 'put ''Y2F0ZSBkYXRhIik7dmFyIGs9Tyh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiB6KGssRSl7dmFyIGo9MDtrLmxlbmd0aCE9PUUubGVuZ3Ro''@;'; put 'put ''JiZqKys7Zm9yKHZhciBWPU1hdGgubWluKGsubGVuZ3RoLEUubGVuZ3RoKSxCPTA7QjxWOysrQilqKz1rW0JdXkVbQl07cmV0dXJuIGp9KGssdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0''@;'; put 'put ''aGlzLl9hdXRoVGFnPWssdGhpcy5fY2lwaGVyLnNjcnViKCl9LEkucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwheC5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVu''@;'; put 'put ''c3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LEkucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oRSl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMu''@;'; put 'put ''X2F1dGhUYWc9RX0sSS5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKEUpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShFKSx0aGlzLl9hbGVuKz1FLmxlbmd0aH0s''@;'; put 'put ''YXQuZXhwb3J0cz1JfSw4MjQ4OTooYXQsSWUsRik9Pnt2YXIgYWU9RigxMjY4OSkseD1GKDUwMDQ2KSxtPUYoNDQ5NDYpO0llLmNyZWF0ZUNpcGhlcj1JZS5DaXBoZXI9YWUuY3JlYXRlQ2lwaGVyLEllLmNyZWF0ZUNpcGhlcml2PUllLkNpcGhlcml2PWFlLmNyZWF0ZUNpcGhlcml2LEllLmNy''@;'; put 'put ''ZWF0ZURlY2lwaGVyPUllLkRlY2lwaGVyPXguY3JlYXRlRGVjaXBoZXIsSWUuY3JlYXRlRGVjaXBoZXJpdj1JZS5EZWNpcGhlcml2PXguY3JlYXRlRGVjaXBoZXJpdixJZS5saXN0Q2lwaGVycz1JZS5nZXRDaXBoZXJzPWZ1bmN0aW9uIGxlKCl7cmV0dXJuIE9iamVjdC5rZXlzKG0pfX0sNTAw''@;'; put 'put ''NDY6KGF0LEllLEYpPT57dmFyIGFlPUYoNTYwODcpLHg9Rig4NDMpLkJ1ZmZlcixtPUYoMTI0MjEpLGxlPUYoODkzNTQpLE09Rig4NjQyMCksTz1GKDY0MDMpLFI9RigzNjUwNSk7ZnVuY3Rpb24gSyhWLEIsWSl7TS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBJLHRoaXMuX2xhc3Q9dm9p''@;'; put 'put ''ZCAwLHRoaXMuX2NpcGhlcj1uZXcgTy5BRVMoQiksdGhpcy5fcHJldj14LmZyb20oWSksdGhpcy5fbW9kZT1WLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIEkoKXt0aGlzLmNhY2hlPXguYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gRShWLEIsWSl7dmFyIFg9bVtWLnRvTG93ZXJDYXNl''@;'; put 'put ''KCldO2lmKCFYKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWSYmKFk9eC5mcm9tKFkpKSwiR0NNIiE9PVgubW9kZSYmWS5sZW5ndGghPT1YLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrWS5s''@;'; put 'put ''ZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgQiYmKEI9eC5mcm9tKEIpKSxCLmxlbmd0aCE9PVgua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrQi5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09WC50eXBlP25ldyBsZShYLm1vZHVsZSxCLFksITApOiJh''@;'; put 'put ''dXRoIj09PVgudHlwZT9uZXcgYWUoWC5tb2R1bGUsQixZLCEwKTpuZXcgSyhYLm1vZHVsZSxCLFkpfUYoNjY2OTgpKEssTSksSy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9jYWNoZS5hZGQoVik7Zm9yKHZhciBCLFksWD1bXTtCPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9h''@;'; put 'put ''dXRvcGFkZGluZyk7KVk9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsQiksWC5wdXNoKFkpO3JldHVybiB4LmNvbmNhdChYKX0sSy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''ayhWKXt2YXIgQj1WWzE1XTtpZihCPDF8fEI+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciBZPS0xOysrWTxCOylpZihWW1krKDE2LUIpXSE9PUIpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1CKXJl''@;'; put 'put ''dHVybiBWLnNsaWNlKDAsMTYtQil9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFYpKTtpZihWKXRocm93IG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LEsucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLl9hdXRv''@;'; put 'put ''cGFkZGluZz0hIVYsdGhpc30sSS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFYpe3RoaXMuY2FjaGU9eC5jb25jYXQoW3RoaXMuY2FjaGUsVl0pfSxJLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oVil7dmFyIEI7aWYoVil7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIEI9dGhpcy5jYWNo''@;'; put 'put ''ZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLEJ9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIEI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLEI7cmV0dXJuIG51bGx9LEkucHJvdG90''@;'; put 'put ''eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LEllLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIGooVixCKXt2YXIgWT1tW1YudG9Mb3dlckNhc2UoKV07aWYoIVkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBl''@;'; put 'put ''Iik7dmFyIFg9UihCLCExLFkua2V5LFkuaXYpO3JldHVybiBFKFYsWC5rZXksWC5pdil9LEllLmNyZWF0ZURlY2lwaGVyaXY9RX0sMTI2ODk6KGF0LEllLEYpPT57dmFyIGFlPUYoMTI0MjEpLHg9Rig1NjA4NyksbT1GKDg0MykuQnVmZmVyLGxlPUYoODkzNTQpLE09Rig4NjQyMCksTz1GKDY0''@;'; put 'put ''MDMpLFI9RigzNjUwNSk7ZnVuY3Rpb24gSyhWLEIsWSl7TS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBrLHRoaXMuX2NpcGhlcj1uZXcgTy5BRVMoQiksdGhpcy5fcHJldj1tLmZyb20oWSksdGhpcy5fbW9kZT1WLHRoaXMuX2F1dG9wYWRkaW5nPSEwfUYoNjY2OTgpKEssTSksSy5wcm90''@;'; put 'put ''b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9jYWNoZS5hZGQoVik7Zm9yKHZhciBCLFksWD1bXTtCPXRoaXMuX2NhY2hlLmdldCgpOylZPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEIpLFgucHVzaChZKTtyZXR1cm4gbS5jb25jYXQoWCl9O3ZhciBJPW0uYWxsb2MoMTYsMTYpO2Z1''@;'; put 'put ''bmN0aW9uIGsoKXt0aGlzLmNhY2hlPW0uYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gRShWLEIsWSl7dmFyIFg9YWVbVi50b0xvd2VyQ2FzZSgpXTtpZighWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIEImJihCPW0uZnJvbShC''@;'; put 'put ''KSksQi5sZW5ndGghPT1YLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK0IubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFkmJihZPW0uZnJvbShZKSksIkdDTSIhPT1YLm1vZGUmJlkubGVuZ3RoIT09WC5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJp''@;'; put 'put ''bnZhbGlkIGl2IGxlbmd0aCAiK1kubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PVgudHlwZT9uZXcgbGUoWC5tb2R1bGUsQixZKToiYXV0aCI9PT1YLnR5cGU/bmV3IHgoWC5tb2R1bGUsQixZKTpuZXcgSyhYLm1vZHVsZSxCLFkpfUsucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBW''@;'; put 'put ''PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIFY9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsViksdGhpcy5fY2lwaGVyLnNjcnViKCksVjtpZighVi5lcXVhbHMoSSkpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBt''@;'; put 'put ''dWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sSy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVil7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVix0aGlzfSxrLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVil7dGhpcy5jYWNoZT1tLmNvbmNhdChbdGhpcy5jYWNoZSxWXSl9''@;'; put 'put ''LGsucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgVj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFZ9cmV0dXJuIG51bGx9LGsucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBWPTE2LXRoaXMuY2FjaGUubGVuZ3RoLEI9bS5hbGxvY1Vuc2FmZShWKSxZPS0xOysrWTxWOylCLndyaXRlVUludDgoVixZKTtyZXR1cm4gbS5jb25jYXQoW3RoaXMuY2FjaGUsQl0pfSxJZS5jcmVhdGVDaXBoZXJpdj1FLEllLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBqKFYsQil7''@;'; put 'put ''dmFyIFk9YWVbVi50b0xvd2VyQ2FzZSgpXTtpZighWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgWD1SKEIsITEsWS5rZXksWS5pdik7cmV0dXJuIEUoVixYLmtleSxYLml2KX19LDE1MDM6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXIseD1h''@;'; put 'put ''ZS5hbGxvYygxNiwwKTtmdW5jdGlvbiBsZShPKXt2YXIgUj1hZS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIFIud3JpdGVVSW50MzJCRShPWzBdPj4+MCwwKSxSLndyaXRlVUludDMyQkUoT1sxXT4+PjAsNCksUi53cml0ZVVJbnQzMkJFKE9bMl0+Pj4wLDgpLFIud3JpdGVVSW50MzJCRShPWzNd''@;'; put 'put ''Pj4+MCwxMiksUn1mdW5jdGlvbiBNKE8pe3RoaXMuaD1PLHRoaXMuc3RhdGU9YWUuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1hZS5hbGxvY1Vuc2FmZSgwKX1NLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihPKXtmb3IodmFyIFI9LTE7KytSPE8ubGVuZ3RoOyl0aGlzLnN0YXRlW1JdXj1PW1Jd''@;'; put 'put ''O3RoaXMuX211bHRpcGx5KCl9LE0ucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgeixJLE89ZnVuY3Rpb24gbShPKXtyZXR1cm5bTy5yZWFkVUludDMyQkUoMCksTy5yZWFkVUludDMyQkUoNCksTy5yZWFkVUludDMyQkUoOCksTy5yZWFkVUludDMyQkUoMTIpXX0odGhp''@;'; put 'put ''cy5oKSxSPVswLDAsMCwwXSxrPS0xOysrazwxMjg7KXtmb3IoMCE9KHRoaXMuc3RhdGVbfn4oay84KV0mMTw8Ny1rJTgpJiYoUlswXV49T1swXSxSWzFdXj1PWzFdLFJbMl1ePU9bMl0sUlszXV49T1szXSksST0wIT0oMSZPWzNdKSx6PTM7ej4wO3otLSlPW3pdPU9bel0+Pj4xfCgxJk9bei0x''@;'; put 'put ''XSk8PDMxO09bMF09T1swXT4+PjEsSSYmKE9bMF09T1swXV4yMjU8PDI0KX10aGlzLnN0YXRlPWxlKFIpfSxNLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyl7dGhpcy5jYWNoZT1hZS5jb25jYXQoW3RoaXMuY2FjaGUsT10pO2Zvcih2YXIgUjt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KVI9''@;'; put 'put ''dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goUil9LE0ucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKE8sUil7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKGFlLmNvbmNhdChbdGhpcy5jYWNoZSx4XSwx''@;'; put 'put ''NikpLHRoaXMuZ2hhc2gobGUoWzAsTywwLFJdKSksdGhpcy5zdGF0ZX0sYXQuZXhwb3J0cz1NfSw5MTA3OmF0PT57YXQuZXhwb3J0cz1mdW5jdGlvbiBJZShGKXtmb3IodmFyIHgsYWU9Ri5sZW5ndGg7YWUtLTspe2lmKDI1NSE9PSh4PUYucmVhZFVJbnQ4KGFlKSkpe3grKyxGLndyaXRlVUlu''@;'; put 'put ''dDgoeCxhZSk7YnJlYWt9Ri53cml0ZVVJbnQ4KDAsYWUpfX19LDMxMTc1OihhdCxJZSxGKT0+e3ZhciBhZT1GKDYzNjM2KTtJZS5lbmNyeXB0PWZ1bmN0aW9uKHgsbSl7dmFyIGxlPWFlKG0seC5fcHJldik7cmV0dXJuIHguX3ByZXY9eC5fY2lwaGVyLmVuY3J5cHRCbG9jayhsZSkseC5fcHJl''@;'; put 'put ''dn0sSWUuZGVjcnlwdD1mdW5jdGlvbih4LG0pe3ZhciBsZT14Ll9wcmV2O3guX3ByZXY9bTt2YXIgTT14Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKG0pO3JldHVybiBhZShNLGxlKX19LDQzNjMxOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig2MzYzNik7ZnVuY3Rpb24gbShs''@;'; put 'put ''ZSxNLE8pe3ZhciBSPU0ubGVuZ3RoLHo9eChNLGxlLl9jYWNoZSk7cmV0dXJuIGxlLl9jYWNoZT1sZS5fY2FjaGUuc2xpY2UoUiksbGUuX3ByZXY9YWUuY29uY2F0KFtsZS5fcHJldixPP006el0pLHp9SWUuZW5jcnlwdD1mdW5jdGlvbihsZSxNLE8pe2Zvcih2YXIgeixSPWFlLmFsbG9jVW5z''@;'; put 'put ''YWZlKDApO00ubGVuZ3RoOyl7aWYoMD09PWxlLl9jYWNoZS5sZW5ndGgmJihsZS5fY2FjaGU9bGUuX2NpcGhlci5lbmNyeXB0QmxvY2sobGUuX3ByZXYpLGxlLl9wcmV2PWFlLmFsbG9jVW5zYWZlKDApKSwhKGxlLl9jYWNoZS5sZW5ndGg8PU0ubGVuZ3RoKSl7Uj1hZS5jb25jYXQoW1IsbShs''@;'; put 'put ''ZSxNLE8pXSk7YnJlYWt9Uj1hZS5jb25jYXQoW1IsbShsZSxNLnNsaWNlKDAsej1sZS5fY2FjaGUubGVuZ3RoKSxPKV0pLE09TS5zbGljZSh6KX1yZXR1cm4gUn19LDMzODkyOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyO2Z1bmN0aW9uIHgobGUsTSxPKXtmb3IodmFyIGssRSx6''@;'; put 'put ''PS0xLEk9MDsrK3o8ODspSSs9KDEyOCYoRT1sZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhsZS5fcHJldilbMF1eKGs9TSYxPDw3LXo/MTI4OjApKSk+PnolOCxsZS5fcHJldj1tKGxlLl9wcmV2LE8/azpFKTtyZXR1cm4gSX1mdW5jdGlvbiBtKGxlLE0pe3ZhciBPPWxlLmxlbmd0aCxSPS0xLHo9''@;'; put 'put ''YWUuYWxsb2NVbnNhZmUobGUubGVuZ3RoKTtmb3IobGU9YWUuY29uY2F0KFtsZSxhZS5mcm9tKFtNXSldKTsrK1I8TzspeltSXT1sZVtSXTw8MXxsZVtSKzFdPj43O3JldHVybiB6fUllLmVuY3J5cHQ9ZnVuY3Rpb24obGUsTSxPKXtmb3IodmFyIFI9TS5sZW5ndGgsej1hZS5hbGxvY1Vuc2Fm''@;'; put 'put ''ZShSKSxLPS0xOysrSzxSOyl6W0tdPXgobGUsTVtLXSxPKTtyZXR1cm4gen19LDM2Nzg3OihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyO2Z1bmN0aW9uIHgobSxsZSxNKXt2YXIgUj1tLl9jaXBoZXIuZW5jcnlwdEJsb2NrKG0uX3ByZXYpWzBdXmxlO3JldHVybiBtLl9wcmV2PWFl''@;'; put 'put ''LmNvbmNhdChbbS5fcHJldi5zbGljZSgxKSxhZS5mcm9tKFtNP2xlOlJdKV0pLFJ9SWUuZW5jcnlwdD1mdW5jdGlvbihtLGxlLE0pe2Zvcih2YXIgTz1sZS5sZW5ndGgsUj1hZS5hbGxvY1Vuc2FmZShPKSx6PS0xOysrejxPOylSW3pdPXgobSxsZVt6XSxNKTtyZXR1cm4gUn19LDg1MjY4Oihh''@;'; put 'put ''dCxJZSxGKT0+e3ZhciBhZT1GKDYzNjM2KSx4PUYoODQzKS5CdWZmZXIsbT1GKDkxMDcpO2Z1bmN0aW9uIGxlKE8pe3ZhciBSPU8uX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoTy5fcHJldik7cmV0dXJuIG0oTy5fcHJldiksUn1JZS5lbmNyeXB0PWZ1bmN0aW9uKE8sUil7dmFyIHo9TWF0aC5j''@;'; put 'put ''ZWlsKFIubGVuZ3RoLzE2KSxLPU8uX2NhY2hlLmxlbmd0aDtPLl9jYWNoZT14LmNvbmNhdChbTy5fY2FjaGUseC5hbGxvY1Vuc2FmZSgxNip6KV0pO2Zvcih2YXIgST0wO0k8ejtJKyspe3ZhciBrPWxlKE8pLEU9SysxNipJO08uX2NhY2hlLndyaXRlVUludDMyQkUoa1swXSxFKzApLE8uX2Nh''@;'; put 'put ''Y2hlLndyaXRlVUludDMyQkUoa1sxXSxFKzQpLE8uX2NhY2hlLndyaXRlVUludDMyQkUoa1syXSxFKzgpLE8uX2NhY2hlLndyaXRlVUludDMyQkUoa1szXSxFKzEyKX12YXIgaj1PLl9jYWNoZS5zbGljZSgwLFIubGVuZ3RoKTtyZXR1cm4gTy5fY2FjaGU9Ty5fY2FjaGUuc2xpY2UoUi5sZW5n''@;'; put 'put ''dGgpLGFlKFIsail9fSw0NTk5NTooYXQsSWUpPT57SWUuZW5jcnlwdD1mdW5jdGlvbihGLGFlKXtyZXR1cm4gRi5fY2lwaGVyLmVuY3J5cHRCbG9jayhhZSl9LEllLmRlY3J5cHQ9ZnVuY3Rpb24oRixhZSl7cmV0dXJuIEYuX2NpcGhlci5kZWNyeXB0QmxvY2soYWUpfX0sMTI0MjE6KGF0LEll''@;'; put 'put ''LEYpPT57dmFyIGFlPXtFQ0I6Rig0NTk5NSksQ0JDOkYoMzExNzUpLENGQjpGKDQzNjMxKSxDRkI4OkYoMzY3ODcpLENGQjE6RigzMzg5MiksT0ZCOkYoMzQ1MzIpLENUUjpGKDg1MjY4KSxHQ006Rig4NTI2OCl9LHg9Rig0NDk0Nik7Zm9yKHZhciBtIGluIHgpeFttXS5tb2R1bGU9YWVbeFtt''@;'; put 'put ''XS5tb2RlXTthdC5leHBvcnRzPXh9LDM0NTMyOihhdCxJZSxGKT0+e3ZhciBhZT1GKDYzNjM2KTtmdW5jdGlvbiB4KG0pe3JldHVybiBtLl9wcmV2PW0uX2NpcGhlci5lbmNyeXB0QmxvY2sobS5fcHJldiksbS5fcHJldn1JZS5lbmNyeXB0PWZ1bmN0aW9uKG0sbGUpe2Zvcig7bS5fY2FjaGUu''@;'; put 'put ''bGVuZ3RoPGxlLmxlbmd0aDspbS5fY2FjaGU9QnVmZmVyLmNvbmNhdChbbS5fY2FjaGUseChtKV0pO3ZhciBNPW0uX2NhY2hlLnNsaWNlKDAsbGUubGVuZ3RoKTtyZXR1cm4gbS5fY2FjaGU9bS5fY2FjaGUuc2xpY2UobGUubGVuZ3RoKSxhZShsZSxNKX19LDg5MzU0OihhdCxJZSxGKT0+e3Zh''@;'; put 'put ''ciBhZT1GKDY0MDMpLHg9Rig4NDMpLkJ1ZmZlcixtPUYoODY0MjApO2Z1bmN0aW9uIE0oTyxSLHosSyl7bS5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgYWUuQUVTKFIpLHRoaXMuX3ByZXY9eC5mcm9tKHopLHRoaXMuX2NhY2hlPXguYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9''@;'; put 'put ''eC5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PUssdGhpcy5fbW9kZT1PfUYoNjY2OTgpKE0sbSksTS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihPKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsTyx0aGlzLl9kZWNyeXB0KX0sTS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0''@;'; put 'put ''aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LGF0LmV4cG9ydHM9TX0sMjU2MDA6KGF0LEllLEYpPT57dmFyIGFlPUYoMTQ5NDgpLHg9Rig4MjQ4OSksbT1GKDEyNDIxKSxsZT1GKDg5NDAyKSxNPUYoMzY1MDUpO2Z1bmN0aW9uIHooayxFLGope2lmKGs9ay50b0xvd2VyQ2FzZSgpLG1ba10p''@;'; put 'put ''cmV0dXJuIHguY3JlYXRlQ2lwaGVyaXYoayxFLGopO2lmKGxlW2tdKXJldHVybiBuZXcgYWUoe2tleTpFLGl2OmosbW9kZTprfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24gSyhrLEUsail7aWYoaz1rLnRvTG93ZXJDYXNlKCksbVtrXSlyZXR1''@;'; put 'put ''cm4geC5jcmVhdGVEZWNpcGhlcml2KGssRSxqKTtpZihsZVtrXSlyZXR1cm4gbmV3IGFlKHtrZXk6RSxpdjpqLG1vZGU6ayxkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9SWUuY3JlYXRlQ2lwaGVyPUllLkNpcGhlcj1mdW5jdGlvbiBPKGss''@;'; put 'put ''RSl7dmFyIGosVjtpZihrPWsudG9Mb3dlckNhc2UoKSxtW2tdKWo9bVtrXS5rZXksVj1tW2tdLml2O2Vsc2V7aWYoIWxlW2tdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2o9OCpsZVtrXS5rZXksVj1sZVtrXS5pdn12YXIgQj1NKEUsITEsaixWKTtyZXR1cm4g''@;'; put 'put ''eihrLEIua2V5LEIuaXYpfSxJZS5jcmVhdGVDaXBoZXJpdj1JZS5DaXBoZXJpdj16LEllLmNyZWF0ZURlY2lwaGVyPUllLkRlY2lwaGVyPWZ1bmN0aW9uIFIoayxFKXt2YXIgaixWO2lmKGs9ay50b0xvd2VyQ2FzZSgpLG1ba10paj1tW2tdLmtleSxWPW1ba10uaXY7ZWxzZXtpZighbGVba10p''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aj04KmxlW2tdLmtleSxWPWxlW2tdLml2fXZhciBCPU0oRSwhMSxqLFYpO3JldHVybiBLKGssQi5rZXksQi5pdil9LEllLmNyZWF0ZURlY2lwaGVyaXY9SWUuRGVjaXBoZXJpdj1LLEllLmxpc3RDaXBoZXJzPUllLmdl''@;'; put 'put ''dENpcGhlcnM9ZnVuY3Rpb24gSSgpe3JldHVybiBPYmplY3Qua2V5cyhsZSkuY29uY2F0KHguZ2V0Q2lwaGVycygpKX19LDE0OTQ4OihhdCxJZSxGKT0+e3ZhciBhZT1GKDg2NDIwKSx4PUYoNDAxMzIpLG09Rig2NjY5OCksbGU9Rig4NDMpLkJ1ZmZlcixNPXsiZGVzLWVkZTMtY2JjIjp4LkNC''@;'; put 'put ''Qy5pbnN0YW50aWF0ZSh4LkVERSksImRlcy1lZGUzIjp4LkVERSwiZGVzLWVkZS1jYmMiOnguQ0JDLmluc3RhbnRpYXRlKHguRURFKSwiZGVzLWVkZSI6eC5FREUsImRlcy1jYmMiOnguQ0JDLmluc3RhbnRpYXRlKHguREVTKSwiZGVzLWVjYiI6eC5ERVN9O2Z1bmN0aW9uIE8oUil7YWUuY2Fs''@;'; put 'put ''bCh0aGlzKTt2YXIgSSx6PVIubW9kZS50b0xvd2VyQ2FzZSgpLEs9TVt6XTtJPVIuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciBrPVIua2V5O2xlLmlzQnVmZmVyKGspfHwoaz1sZS5mcm9tKGspKSwoImRlcy1lZGUiPT09enx8ImRlcy1lZGUtY2JjIj09PXopJiYoaz1sZS5jb25j''@;'; put 'put ''YXQoW2ssay5zbGljZSgwLDgpXSkpO3ZhciBFPVIuaXY7bGUuaXNCdWZmZXIoRSl8fChFPWxlLmZyb20oRSkpLHRoaXMuX2Rlcz1LLmNyZWF0ZSh7a2V5OmssaXY6RSx0eXBlOkl9KX1NLmRlcz1NWyJkZXMtY2JjIl0sTS5kZXMzPU1bImRlcy1lZGUzLWNiYyJdLGF0LmV4cG9ydHM9TyxtKE8s''@;'; put 'put ''YWUpLE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUil7cmV0dXJuIGxlLmZyb20odGhpcy5fZGVzLnVwZGF0ZShSKSl9LE8ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBsZS5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDg5NDAyOihhdCxJZSk9PntJZVsiZGVzLWVj''@;'; put 'put ''YiJdPXtrZXk6OCxpdjowfSxJZVsiZGVzLWNiYyJdPUllLmRlcz17a2V5OjgsaXY6OH0sSWVbImRlcy1lZGUzLWNiYyJdPUllLmRlczM9e2tleToyNCxpdjo4fSxJZVsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LEllWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sSWVbImRlcy1lZGUi''@;'; put 'put ''XT17a2V5OjE2LGl2OjB9fSw3MTk0NjooYXQsSWUsRik9Pnt2YXIgYWU9Rig2MjY2MikseD1GKDQ0MDE5KTtmdW5jdGlvbiBsZShPKXt2YXIgeixSPU8ubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97ej1uZXcgYWUoeChSKSl9d2hpbGUoei5jbXAoTy5tb2R1bHVzKT49MHx8IXoudW1vZChPLnBy''@;'; put 'put ''aW1lMSl8fCF6LnVtb2QoTy5wcmltZTIpKTtyZXR1cm4gen1mdW5jdGlvbiBNKE8sUil7dmFyIHo9ZnVuY3Rpb24gbShPKXt2YXIgUj1sZShPKTtyZXR1cm57YmxpbmRlcjpSLnRvUmVkKGFlLm1vbnQoTy5tb2R1bHVzKSkucmVkUG93KG5ldyBhZShPLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJl''@;'; put 'put ''ZCgpLHVuYmxpbmRlcjpSLmludm0oTy5tb2R1bHVzKX19KFIpLEs9Ui5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxJPW5ldyBhZShPKS5tdWwoei5ibGluZGVyKS51bW9kKFIubW9kdWx1cyksaz1JLnRvUmVkKGFlLm1vbnQoUi5wcmltZTEpKSxFPUkudG9SZWQoYWUubW9udChSLnByaW1lMikpLGo9''@;'; put 'put ''Ui5jb2VmZmljaWVudCxWPVIucHJpbWUxLEI9Ui5wcmltZTIsWT1rLnJlZFBvdyhSLmV4cG9uZW50MSkuZnJvbVJlZCgpLFg9RS5yZWRQb3coUi5leHBvbmVudDIpLmZyb21SZWQoKSxVPVkuaXN1YihYKS5pbXVsKGopLnVtb2QoVikuaW11bChCKTtyZXR1cm4gWC5pYWRkKFUpLmltdWwoei51''@;'; put 'put ''bmJsaW5kZXIpLnVtb2QoUi5tb2R1bHVzKS50b0FycmF5TGlrZShCdWZmZXIsImJlIixLKX1NLmdldHI9bGUsYXQuZXhwb3J0cz1NfSw4MTY5OTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1GKDc1MjA3KX0sMjc2ODY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBh''@;'; put 'put ''ZT1GKDg0MykuQnVmZmVyLHg9Rig5NjM2MiksbT1GKDk2NzQ1KSxsZT1GKDY2Njk4KSxNPUYoNjM2MDIpLE89Rig1MTE3MyksUj1GKDc1MjA3KTtmdW5jdGlvbiB6KEUpe20uV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgaj1SW0VdO2lmKCFqKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNz''@;'; put 'put ''YWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBlPWouaGFzaCx0aGlzLl9oYXNoPXgoai5oYXNoKSx0aGlzLl90YWc9ai5pZCx0aGlzLl9zaWduVHlwZT1qLnNpZ259ZnVuY3Rpb24gSyhFKXttLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGo9UltFXTtpZighail0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''a25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoPXgoai5oYXNoKSx0aGlzLl90YWc9ai5pZCx0aGlzLl9zaWduVHlwZT1qLnNpZ259ZnVuY3Rpb24gSShFKXtyZXR1cm4gbmV3IHooRSl9ZnVuY3Rpb24gayhFKXtyZXR1cm4gbmV3IEsoRSl9T2JqZWN0LmtleXMoUikuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihFKXtSW0VdLmlkPWFlLmZyb20oUltFXS5pZCwiaGV4IiksUltFLnRvTG93ZXJDYXNlKCldPVJbRV19KSxsZSh6LG0uV3JpdGFibGUpLHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihqLFYsQil7dGhpcy5faGFzaC51cGRhdGUoaiksQigpfSx6LnByb3RvdHlwZS51cGRhdGU9''@;'; put 'put ''ZnVuY3Rpb24oaixWKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBqP2FlLmZyb20oaixWKTpqKSx0aGlzfSx6LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGosVil7dGhpcy5lbmQoKTt2YXIgQj10aGlzLl9oYXNoLmRpZ2VzdCgpLFk9TShCLGosdGhpcy5faGFz''@;'; put 'put ''aFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gVj9ZLnRvU3RyaW5nKFYpOll9LGxlKEssbS5Xcml0YWJsZSksSy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGosVixCKXt0aGlzLl9oYXNoLnVwZGF0ZShqKSxCKCl9LEsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihq''@;'; put 'put ''LFYpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIGo/YWUuZnJvbShqLFYpOmopLHRoaXN9LEsucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihqLFYsQil7dmFyIFk9InN0cmluZyI9PXR5cGVvZiBWP2FlLmZyb20oVixCKTpWO3RoaXMuZW5kKCk7dmFyIFg9dGhp''@;'; put 'put ''cy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gTyhZLFgsaix0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxhdC5leHBvcnRzPXtTaWduOkksVmVyaWZ5OmssY3JlYXRlU2lnbjpJLGNyZWF0ZVZlcmlmeTprfX0sNjM2MDI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0MykuQnVm''@;'; put 'put ''ZmVyLHg9Rig4NTgyNSksbT1GKDcxOTQ2KSxsZT1GKDg4NjUxKS5lYyxNPUYoNjI2NjIpLE89Rig4Nzk4MyksUj1GKDEzMDgpO2Z1bmN0aW9uIGooVSxxLGVlLHRlKXtpZigoVT1hZS5mcm9tKFUudG9BcnJheSgpKSkubGVuZ3RoPHEuYnl0ZUxlbmd0aCgpKXt2YXIgb2U9YWUuYWxsb2MocS5i''@;'; put 'put ''eXRlTGVuZ3RoKCktVS5sZW5ndGgpO1U9YWUuY29uY2F0KFtvZSxVXSl9dmFyIHNlPWVlLmxlbmd0aCxoZT1mdW5jdGlvbiBCKFUscSl7VT0oVT1WKFUscSkpLm1vZChxKTt2YXIgZWU9YWUuZnJvbShVLnRvQXJyYXkoKSk7aWYoZWUubGVuZ3RoPHEuYnl0ZUxlbmd0aCgpKXt2YXIgdGU9YWUu''@;'; put 'put ''YWxsb2MocS5ieXRlTGVuZ3RoKCktZWUubGVuZ3RoKTtlZT1hZS5jb25jYXQoW3RlLGVlXSl9cmV0dXJuIGVlfShlZSxxKSx1ZT1hZS5hbGxvYyhzZSk7dWUuZmlsbCgxKTt2YXIgY2U9YWUuYWxsb2Moc2UpO3JldHVybiBjZT14KHRlLGNlKS51cGRhdGUodWUpLnVwZGF0ZShhZS5mcm9tKFsw''@;'; put 'put ''XSkpLnVwZGF0ZShVKS51cGRhdGUoaGUpLmRpZ2VzdCgpLHVlPXgodGUsY2UpLnVwZGF0ZSh1ZSkuZGlnZXN0KCkse2s6Y2U9eCh0ZSxjZSkudXBkYXRlKHVlKS51cGRhdGUoYWUuZnJvbShbMV0pKS51cGRhdGUoVSkudXBkYXRlKGhlKS5kaWdlc3QoKSx2OnVlPXgodGUsY2UpLnVwZGF0ZSh1''@;'; put 'put ''ZSkuZGlnZXN0KCl9fWZ1bmN0aW9uIFYoVSxxKXt2YXIgZWU9bmV3IE0oVSksdGU9KFUubGVuZ3RoPDwzKS1xLmJpdExlbmd0aCgpO3JldHVybiB0ZT4wJiZlZS5pc2hybih0ZSksZWV9ZnVuY3Rpb24gWShVLHEsZWUpe3ZhciB0ZSxvZTtkb3tmb3IodGU9YWUuYWxsb2MoMCk7OCp0ZS5sZW5n''@;'; put 'put ''dGg8VS5iaXRMZW5ndGgoKTspcS52PXgoZWUscS5rKS51cGRhdGUocS52KS5kaWdlc3QoKSx0ZT1hZS5jb25jYXQoW3RlLHEudl0pO29lPVYodGUsVSkscS5rPXgoZWUscS5rKS51cGRhdGUocS52KS51cGRhdGUoYWUuZnJvbShbMF0pKS5kaWdlc3QoKSxxLnY9eChlZSxxLmspLnVwZGF0ZShx''@;'; put 'put ''LnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09b2UuY21wKFUpKTtyZXR1cm4gb2V9ZnVuY3Rpb24gWChVLHEsZWUsdGUpe3JldHVybiBVLnRvUmVkKE0ubW9udChlZSkpLnJlZFBvdyhxKS5mcm9tUmVkKCkubW9kKHRlKX1hdC5leHBvcnRzPWZ1bmN0aW9uIEsoVSxxLGVlLHRlLG9lKXt2YXIgc2U9''@;'; put 'put ''TyhxKTtpZihzZS5jdXJ2ZSl7aWYoImVjZHNhIiE9PXRlJiYiZWNkc2EvcnNhIiE9PXRlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBJKFUscSl7dmFyIGVlPVJbcS5jdXJ2ZS5qb2luKCIuIildO2lmKCFlZSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoInVua25vd24gY3VydmUgIitxLmN1cnZlLmpvaW4oIi4iKSk7dmFyIHNlPW5ldyBsZShlZSkua2V5RnJvbVByaXZhdGUocS5wcml2YXRlS2V5KS5zaWduKFUpO3JldHVybiBhZS5mcm9tKHNlLnRvREVSKCkpfShVLHNlKX1pZigiZHNhIj09PXNlLnR5cGUpe2lmKCJkc2EiIT09dGUpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIGsoVSxxLGVlKXtmb3IodmFyIGNlLHRlPXEucGFyYW1zLnByaXZfa2V5LG9lPXEucGFyYW1zLnAsc2U9cS5wYXJhbXMucSxoZT1xLnBhcmFtcy5nLHVlPW5ldyBNKDApLEc9VihVLHNlKS5tb2Qo''@;'; put 'put ''c2UpLGI9ITEsRD1qKHRlLHNlLFUsZWUpOyExPT09YjspdWU9WChoZSxjZT1ZKHNlLEQsZWUpLG9lLHNlKSwwPT09KGI9Y2UuaW52bShzZSkuaW11bChHLmFkZCh0ZS5tdWwodWUpKSkubW9kKHNlKSkuY21wbigwKSYmKGI9ITEsdWU9bmV3IE0oMCkpO3JldHVybiBmdW5jdGlvbiBFKFUscSl7''@;'; put 'put ''VT1VLnRvQXJyYXkoKSxxPXEudG9BcnJheSgpLDEyOCZVWzBdJiYoVT1bMF0uY29uY2F0KFUpKSwxMjgmcVswXSYmKHE9WzBdLmNvbmNhdChxKSk7dmFyIHRlPVs0OCxVLmxlbmd0aCtxLmxlbmd0aCs0LDIsVS5sZW5ndGhdO3JldHVybiB0ZT10ZS5jb25jYXQoVSxbMixxLmxlbmd0aF0scSks''@;'; put 'put ''YWUuZnJvbSh0ZSl9KHVlLGIpfShVLHNlLGVlKX1pZigicnNhIiE9PXRlJiYiZWNkc2EvcnNhIiE9PXRlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO2lmKHZvaWQgMCE9PXEucGFkZGluZyYmMSE9PXEucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwg''@;'; put 'put ''b3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7VT1hZS5jb25jYXQoW29lLFVdKTtmb3IodmFyIGhlPXNlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHVlPVswLDFdO1UubGVuZ3RoK3VlLmxlbmd0aCsxPGhlOyl1ZS5wdXNoKDI1NSk7dWUucHVzaCgwKTtmb3IodmFyIGNlPS0xOysrY2U8VS5s''@;'; put 'put ''ZW5ndGg7KXVlLnB1c2goVVtjZV0pO3JldHVybiBtKHVlLHNlKX0sYXQuZXhwb3J0cy5nZXRLZXk9aixhdC5leHBvcnRzLm1ha2VLZXk9WX0sNTExNzM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig2MjY2MiksbT1GKDg4NjUxKS5lYyxsZT1GKDg3''@;'; put 'put ''OTgzKSxNPUYoMTMwOCk7ZnVuY3Rpb24gSyhJLGspe2lmKEkuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoSS5jbXAoayk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfWF0LmV4cG9ydHM9ZnVuY3Rpb24gTyhJLGssRSxqLFYpe3ZhciBCPWxl''@;'; put 'put ''KEUpO2lmKCJlYyI9PT1CLnR5cGUpe2lmKCJlY2RzYSIhPT1qJiYiZWNkc2EvcnNhIiE9PWopdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gUihJLGssRSl7dmFyIGo9TVtFLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYo''@;'; put 'put ''IWopdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrRS5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgbShqKS52ZXJpZnkoayxJLEUuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oSSxrLEIpfWlmKCJkc2EiPT09Qi50eXBlKXtpZigiZHNhIiE9''@;'; put 'put ''PWopdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24geihJLGssRSl7dmFyIGo9RS5kYXRhLnAsVj1FLmRhdGEucSxCPUUuZGF0YS5nLFk9RS5kYXRhLnB1Yl9rZXksWD1sZS5zaWduYXR1cmUuZGVjb2RlKEksImRlciIpLFU9WC5zLHE9WC5y''@;'; put 'put ''O0soVSxWKSxLKHEsVik7dmFyIGVlPXgubW9udChqKSx0ZT1VLmludm0oVik7cmV0dXJuIDA9PT1CLnRvUmVkKGVlKS5yZWRQb3cobmV3IHgoaykubXVsKHRlKS5tb2QoVikpLmZyb21SZWQoKS5tdWwoWS50b1JlZChlZSkucmVkUG93KHEubXVsKHRlKS5tb2QoVikpLmZyb21SZWQoKSkubW9k''@;'; put 'put ''KGopLm1vZChWKS5jbXAocSl9KEksayxCKX1pZigicnNhIiE9PWomJiJlY2RzYS9yc2EiIT09ail0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO2s9YWUuY29uY2F0KFtWLGtdKTtmb3IodmFyIFk9Qi5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxYPVsxXSxVPTA7ay5sZW5n''@;'; put 'put ''dGgrWC5sZW5ndGgrMjxZOylYLnB1c2goMjU1KSxVKz0xO1gucHVzaCgwKTtmb3IodmFyIHE9LTE7KytxPGsubGVuZ3RoOylYLnB1c2goa1txXSk7WD1hZS5mcm9tKFgpO3ZhciBlZT14Lm1vbnQoQi5tb2R1bHVzKTtJPShJPW5ldyB4KEkpLnRvUmVkKGVlKSkucmVkUG93KG5ldyB4KEIucHVi''@;'; put 'put ''bGljRXhwb25lbnQpKSxJPWFlLmZyb20oSS5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgdGU9VTw4PzE6MDtmb3IoWT1NYXRoLm1pbihJLmxlbmd0aCxYLmxlbmd0aCksSS5sZW5ndGghPT1YLmxlbmd0aCYmKHRlPTEpLHE9LTE7KytxPFk7KXRlfD1JW3FdXlhbcV07cmV0dXJuIDA9PT10ZX19''@;'; put 'put ''LDYzNjM2OmF0PT57YXQuZXhwb3J0cz1mdW5jdGlvbihGLGFlKXtmb3IodmFyIHg9TWF0aC5taW4oRi5sZW5ndGgsYWUubGVuZ3RoKSxtPW5ldyBCdWZmZXIoeCksbGU9MDtsZTx4OysrbGUpbVtsZV09RltsZV1eYWVbbGVdO3JldHVybiBtfX0sMzkwMDc6KGF0LEllLEYpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBhZT1GKDk5MTkpLHg9RigyMjYwMSksbT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7SWUuQnVmZmVyPVIsSWUuU2xvd0J1ZmZlcj1mdW5j''@;'; put 'put ''dGlvbiBVKFBlKXtyZXR1cm4rUGUhPVBlJiYoUGU9MCksUi5hbGxvYygrUGUpfSxJZS5JTlNQRUNUX01BWF9CWVRFUz01MDt2YXIgbGU9MjE0NzQ4MzY0NztmdW5jdGlvbiBPKFBlKXtpZihQZT5sZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1BlKyciIGlzIGludmFsaWQg''@;'; put 'put ''Zm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgYmU9bmV3IFVpbnQ4QXJyYXkoUGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoYmUsUi5wcm90b3R5cGUpLGJlfWZ1bmN0aW9uIFIoUGUsYmUsQWUpe2lmKCJudW1iZXIiPT10eXBlb2YgUGUpe2lmKCJzdHJpbmciPT10eXBlb2YgYmUpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIGsoUGUpfXJldHVybiB6KFBlLGJlLEFlKX1mdW5jdGlvbiB6KFBlLGJlLEFlKXtpZigic3RyaW5nIj09dHlwZW9mIFBlKXJl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBFKFBlLGJlKXtpZigoInN0cmluZyIhPXR5cGVvZiBiZXx8IiI9PT1iZSkmJihiZT0idXRmOCIpLCFSLmlzRW5jb2RpbmcoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrYmUpO3ZhciBBZT0wfHEoUGUsYmUpLFRlPU8oQWUpLHFlPVRl''@;'; put 'put ''LndyaXRlKFBlLGJlKTtyZXR1cm4gcWUhPT1BZSYmKFRlPVRlLnNsaWNlKDAscWUpKSxUZX0oUGUsYmUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhQZSkpcmV0dXJuIGZ1bmN0aW9uIFYoUGUpe2lmKFllKFBlLFVpbnQ4QXJyYXkpKXt2YXIgYmU9bmV3IFVpbnQ4QXJyYXkoUGUpO3JldHVybiBC''@;'; put 'put ''KGJlLmJ1ZmZlcixiZS5ieXRlT2Zmc2V0LGJlLmJ5dGVMZW5ndGgpfXJldHVybiBqKFBlKX0oUGUpO2lmKG51bGw9PVBlKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXks''@;'; put 'put ''IG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIFBlKTtpZihZZShQZSxBcnJheUJ1ZmZlcil8fFBlJiZZZShQZS5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoWWUoUGUsU2hhcmVkQXJyYXlCdWZmZXIpfHxQZSYm''@;'; put 'put ''WWUoUGUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIEIoUGUsYmUsQWUpO2lmKCJudW1iZXIiPT10eXBlb2YgUGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVy''@;'; put 'put ''Jyk7dmFyIFRlPVBlLnZhbHVlT2YmJlBlLnZhbHVlT2YoKTtpZihudWxsIT1UZSYmVGUhPT1QZSlyZXR1cm4gUi5mcm9tKFRlLGJlLEFlKTt2YXIgcWU9ZnVuY3Rpb24gWShQZSl7aWYoUi5pc0J1ZmZlcihQZSkpe3ZhciBiZT0wfFgoUGUubGVuZ3RoKSxBZT1PKGJlKTtyZXR1cm4gMD09PUFl''@;'; put 'put ''Lmxlbmd0aHx8UGUuY29weShBZSwwLDAsYmUpLEFlfXJldHVybiB2b2lkIDAhPT1QZS5sZW5ndGg/Im51bWJlciIhPXR5cGVvZiBQZS5sZW5ndGh8fEplKFBlLmxlbmd0aCk/TygwKTpqKFBlKToiQnVmZmVyIj09PVBlLnR5cGUmJkFycmF5LmlzQXJyYXkoUGUuZGF0YSk/aihQZS5kYXRhKTp2''@;'; put 'put ''b2lkIDB9KFBlKTtpZihxZSlyZXR1cm4gcWU7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIFBlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIFIuZnJvbShQZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxi''@;'; put 'put ''ZSxBZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgUGUpfWZ1bmN0aW9uIEsoUGUp''@;'; put 'put ''e2lmKCJudW1iZXIiIT10eXBlb2YgUGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihQZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrUGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicp''@;'; put 'put ''fWZ1bmN0aW9uIGsoUGUpe3JldHVybiBLKFBlKSxPKFBlPDA/MDowfFgoUGUpKX1mdW5jdGlvbiBqKFBlKXtmb3IodmFyIGJlPVBlLmxlbmd0aDwwPzA6MHxYKFBlLmxlbmd0aCksQWU9TyhiZSksVGU9MDtUZTxiZTtUZSs9MSlBZVtUZV09MjU1JlBlW1RlXTtyZXR1cm4gQWV9ZnVuY3Rpb24g''@;'; put 'put ''QihQZSxiZSxBZSl7aWYoYmU8MHx8UGUuYnl0ZUxlbmd0aDxiZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoUGUuYnl0ZUxlbmd0aDxiZSsoQWV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRz''@;'; put 'put ''aWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgVGU7cmV0dXJuIFRlPXZvaWQgMD09PWJlJiZ2b2lkIDA9PT1BZT9uZXcgVWludDhBcnJheShQZSk6dm9pZCAwPT09QWU/bmV3IFVpbnQ4QXJyYXkoUGUsYmUpOm5ldyBVaW50OEFycmF5KFBlLGJlLEFlKSxPYmplY3Quc2V0UHJvdG90eXBlT2Yo''@;'; put 'put ''VGUsUi5wcm90b3R5cGUpLFRlfWZ1bmN0aW9uIFgoUGUpe2lmKFBlPj1sZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrbGUudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxQZX1mdW5j''@;'; put 'put ''dGlvbiBxKFBlLGJlKXtpZihSLmlzQnVmZmVyKFBlKSlyZXR1cm4gUGUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhQZSl8fFllKFBlLEFycmF5QnVmZmVyKSlyZXR1cm4gUGUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIFBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAi''@;'; put 'put ''c3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBQZSk7dmFyIEFlPVBlLmxlbmd0aCxUZT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFUZSYmMD09''@;'; put 'put ''PUFlKXJldHVybiAwO2Zvcih2YXIgcWU9ITE7Oylzd2l0Y2goYmUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEFlO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEZlKFBlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2''@;'; put 'put ''bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKkFlO2Nhc2UiaGV4IjpyZXR1cm4gQWU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gV2UoUGUpLmxlbmd0aDtkZWZhdWx0OmlmKHFlKXJldHVybiBUZT8tMTpGZShQZSkubGVuZ3RoO2JlPSgiIitiZSkudG9Mb3dlckNhc2UoKSxxZT0hMH19ZnVu''@;'; put 'put ''Y3Rpb24gZWUoUGUsYmUsQWUpe3ZhciBUZT0hMTtpZigodm9pZCAwPT09YmV8fGJlPDApJiYoYmU9MCksYmU+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09QWV8fEFlPnRoaXMubGVuZ3RoKSYmKEFlPXRoaXMubGVuZ3RoKSxBZTw9MCl8fChBZT4+Pj0wKTw9KGJlPj4+PTApKXJldHVybiIiO2Zv''@;'; put 'put ''cihQZXx8KFBlPSJ1dGY4Iik7Oylzd2l0Y2goUGUpe2Nhc2UiaGV4IjpyZXR1cm4gdih0aGlzLGJlLEFlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBIKHRoaXMsYmUsQWUpO2Nhc2UiYXNjaWkiOnJldHVybiBDKHRoaXMsYmUsQWUpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6''@;'; put 'put ''cmV0dXJuIFModGhpcyxiZSxBZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBEKHRoaXMsYmUsQWUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gcCh0aGlzLGJlLEFlKTtkZWZhdWx0OmlmKFRlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVu''@;'; put 'put ''a25vd24gZW5jb2Rpbmc6ICIrUGUpO1BlPShQZSsiIikudG9Mb3dlckNhc2UoKSxUZT0hMH19ZnVuY3Rpb24gdGUoUGUsYmUsQWUpe3ZhciBUZT1QZVtiZV07UGVbYmVdPVBlW0FlXSxQZVtBZV09VGV9ZnVuY3Rpb24gb2UoUGUsYmUsQWUsVGUscWUpe2lmKDA9PT1QZS5sZW5ndGgpcmV0dXJu''@;'; put 'put ''LTE7aWYoInN0cmluZyI9PXR5cGVvZiBBZT8oVGU9QWUsQWU9MCk6QWU+MjE0NzQ4MzY0Nz9BZT0yMTQ3NDgzNjQ3OkFlPC0yMTQ3NDgzNjQ4JiYoQWU9LTIxNDc0ODM2NDgpLEplKEFlPStBZSkmJihBZT1xZT8wOlBlLmxlbmd0aC0xKSxBZTwwJiYoQWU9UGUubGVuZ3RoK0FlKSxBZT49UGUu''@;'; put 'put ''bGVuZ3RoKXtpZihxZSlyZXR1cm4tMTtBZT1QZS5sZW5ndGgtMX1lbHNlIGlmKEFlPDApe2lmKCFxZSlyZXR1cm4tMTtBZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgYmUmJihiZT1SLmZyb20oYmUsVGUpKSxSLmlzQnVmZmVyKGJlKSlyZXR1cm4gMD09PWJlLmxlbmd0aD8tMTpzZShQZSxiZSxB''@;'; put 'put ''ZSxUZSxxZSk7aWYoIm51bWJlciI9PXR5cGVvZiBiZSlyZXR1cm4gYmUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9xZT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoUGUsYmUsQWUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxh''@;'; put 'put ''c3RJbmRleE9mLmNhbGwoUGUsYmUsQWUpOnNlKFBlLFtiZV0sQWUsVGUscWUpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIHNlKFBlLGJlLEFlLFRlLHFlKXt2YXIgRGUsWGU9MSxVZT1QZS5sZW5ndGgsaHQ9YmUu''@;'; put 'put ''bGVuZ3RoO2lmKHZvaWQgMCE9PVRlJiYoInVjczIiPT09KFRlPVN0cmluZyhUZSkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1UZXx8InV0ZjE2bGUiPT09VGV8fCJ1dGYtMTZsZSI9PT1UZSkpe2lmKFBlLmxlbmd0aDwyfHxiZS5sZW5ndGg8MilyZXR1cm4tMTtYZT0yLFVlLz0yLGh0Lz0y''@;'; put 'put ''LEFlLz0yfWZ1bmN0aW9uIE1lKE10LEh0KXtyZXR1cm4gMT09PVhlP010W0h0XTpNdC5yZWFkVUludDE2QkUoSHQqWGUpfWlmKHFlKXt2YXIgemU9LTE7Zm9yKERlPUFlO0RlPFVlO0RlKyspaWYoTWUoUGUsRGUpPT09TWUoYmUsLTE9PT16ZT8wOkRlLXplKSl7aWYoLTE9PT16ZSYmKHplPURl''@;'; put 'put ''KSxEZS16ZSsxPT09aHQpcmV0dXJuIHplKlhlfWVsc2UtMSE9PXplJiYoRGUtPURlLXplKSx6ZT0tMX1lbHNlIGZvcihBZStodD5VZSYmKEFlPVVlLWh0KSxEZT1BZTtEZT49MDtEZS0tKXtmb3IodmFyIGl0PSEwLHV0PTA7dXQ8aHQ7dXQrKylpZihNZShQZSxEZSt1dCkhPT1NZShiZSx1dCkp''@;'; put 'put ''e2l0PSExO2JyZWFrfWlmKGl0KXJldHVybiBEZX1yZXR1cm4tMX1mdW5jdGlvbiBoZShQZSxiZSxBZSxUZSl7QWU9TnVtYmVyKEFlKXx8MDt2YXIgcWU9UGUubGVuZ3RoLUFlO1RlPyhUZT1OdW1iZXIoVGUpKT5xZSYmKFRlPXFlKTpUZT1xZTt2YXIgWGU9YmUubGVuZ3RoO1RlPlhlLzImJihU''@;'; put 'put ''ZT1YZS8yKTtmb3IodmFyIFVlPTA7VWU8VGU7KytVZSl7dmFyIGh0PXBhcnNlSW50KGJlLnN1YnN0cigyKlVlLDIpLDE2KTtpZihKZShodCkpcmV0dXJuIFVlO1BlW0FlK1VlXT1odH1yZXR1cm4gVWV9ZnVuY3Rpb24gdWUoUGUsYmUsQWUsVGUpe3JldHVybiBLZShGZShiZSxQZS5sZW5ndGgt''@;'; put 'put ''QWUpLFBlLEFlLFRlKX1mdW5jdGlvbiBjZShQZSxiZSxBZSxUZSl7cmV0dXJuIEtlKGZ1bmN0aW9uIE9lKFBlKXtmb3IodmFyIGJlPVtdLEFlPTA7QWU8UGUubGVuZ3RoOysrQWUpYmUucHVzaCgyNTUmUGUuY2hhckNvZGVBdChBZSkpO3JldHVybiBiZX0oYmUpLFBlLEFlLFRlKX1mdW5jdGlv''@;'; put 'put ''biBHKFBlLGJlLEFlLFRlKXtyZXR1cm4gS2UoV2UoYmUpLFBlLEFlLFRlKX1mdW5jdGlvbiBiKFBlLGJlLEFlLFRlKXtyZXR1cm4gS2UoZnVuY3Rpb24gQmUoUGUsYmUpe2Zvcih2YXIgQWUsVGUsWGU9W10sVWU9MDtVZTxQZS5sZW5ndGgmJiEoKGJlLT0yKTwwKTsrK1VlKVRlPShBZT1QZS5j''@;'; put 'put ''aGFyQ29kZUF0KFVlKSk+PjgsWGUucHVzaChBZSUyNTYpLFhlLnB1c2goVGUpO3JldHVybiBYZX0oYmUsUGUubGVuZ3RoLUFlKSxQZSxBZSxUZSl9ZnVuY3Rpb24gRChQZSxiZSxBZSl7cmV0dXJuIGFlLmZyb21CeXRlQXJyYXkoMD09PWJlJiZBZT09PVBlLmxlbmd0aD9QZTpQZS5zbGljZShi''@;'; put 'put ''ZSxBZSkpfWZ1bmN0aW9uIEgoUGUsYmUsQWUpe0FlPU1hdGgubWluKFBlLmxlbmd0aCxBZSk7Zm9yKHZhciBUZT1bXSxxZT1iZTtxZTxBZTspe3ZhciBNZSxEZSx6ZSxpdCxYZT1QZVtxZV0sVWU9bnVsbCxodD1YZT4yMzk/NDpYZT4yMjM/MzpYZT4xOTE/MjoxO2lmKHFlK2h0PD1BZSlzd2l0''@;'; put 'put ''Y2goaHQpe2Nhc2UgMTpYZTwxMjgmJihVZT1YZSk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoTWU9UGVbcWUrMV0pKSYmKGl0PSgzMSZYZSk8PDZ8NjMmTWUpPjEyNyYmKFVlPWl0KTticmVhaztjYXNlIDM6RGU9UGVbcWUrMl0sMTI4PT0oMTkyJihNZT1QZVtxZSsxXSkpJiYxMjg9PSgxOTIm''@;'; put 'put ''RGUpJiYoaXQ9KDE1JlhlKTw8MTJ8KDYzJk1lKTw8Nnw2MyZEZSk+MjA0NyYmKGl0PDU1Mjk2fHxpdD41NzM0MykmJihVZT1pdCk7YnJlYWs7Y2FzZSA0OkRlPVBlW3FlKzJdLHplPVBlW3FlKzNdLDEyOD09KDE5MiYoTWU9UGVbcWUrMV0pKSYmMTI4PT0oMTkyJkRlKSYmMTI4PT0oMTkyJnpl''@;'; put 'put ''KSYmKGl0PSgxNSZYZSk8PDE4fCg2MyZNZSk8PDEyfCg2MyZEZSk8PDZ8NjMmemUpPjY1NTM1JiZpdDwxMTE0MTEyJiYoVWU9aXQpfW51bGw9PT1VZT8oVWU9NjU1MzMsaHQ9MSk6VWU+NjU1MzUmJihUZS5wdXNoKChVZS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksVWU9NTYzMjB8MTAyMyZV''@;'; put 'put ''ZSksVGUucHVzaChVZSkscWUrPWh0fXJldHVybiBmdW5jdGlvbiBnKFBlKXt2YXIgYmU9UGUubGVuZ3RoO2lmKGJlPD1OKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxQZSk7Zm9yKHZhciBBZT0iIixUZT0wO1RlPGJlOylBZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5h''@;'; put 'put ''cHBseShTdHJpbmcsUGUuc2xpY2UoVGUsVGUrPU4pKTtyZXR1cm4gQWV9KFRlKX1JZS5rTWF4TGVuZ3RoPWxlLCEoUi5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uIE0oKXt0cnl7dmFyIFBlPW5ldyBVaW50OEFycmF5KDEpLGJlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1''@;'; put 'put ''cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGJlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUGUsYmUpLDQyPT09UGUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIGNvbnNvbGU8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJv''@;'; put 'put ''ciYmY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKFIuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJs''@;'; put 'put ''ZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihSLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksUi5wb29sU2l6ZT04MTkyLFIuZnJvbT1mdW5jdGlvbihQZSxiZSxBZSl7cmV0dXJuIHooUGUsYmUsQWUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUi5wcm90b3R5cGUsVWlu''@;'; put 'put ''dDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihSLFVpbnQ4QXJyYXkpLFIuYWxsb2M9ZnVuY3Rpb24oUGUsYmUsQWUpe3JldHVybiBmdW5jdGlvbiBJKFBlLGJlLEFlKXtyZXR1cm4gSyhQZSksUGU8PTA/TyhQZSk6dm9pZCAwIT09YmU/InN0cmluZyI9PXR5cGVvZiBB''@;'; put 'put ''ZT9PKFBlKS5maWxsKGJlLEFlKTpPKFBlKS5maWxsKGJlKTpPKFBlKX0oUGUsYmUsQWUpfSxSLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKFBlKXtyZXR1cm4gayhQZSl9LFIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKFBlKXtyZXR1cm4gayhQZSl9LFIuaXNCdWZmZXI9ZnVuY3Rpb24oYmUpe3Jl''@;'; put 'put ''dHVybiBudWxsIT1iZSYmITA9PT1iZS5faXNCdWZmZXImJmJlIT09Ui5wcm90b3R5cGV9LFIuY29tcGFyZT1mdW5jdGlvbihiZSxBZSl7aWYoWWUoYmUsVWludDhBcnJheSkmJihiZT1SLmZyb20oYmUsYmUub2Zmc2V0LGJlLmJ5dGVMZW5ndGgpKSxZZShBZSxVaW50OEFycmF5KSYmKEFlPVIu''@;'; put 'put ''ZnJvbShBZSxBZS5vZmZzZXQsQWUuYnl0ZUxlbmd0aCkpLCFSLmlzQnVmZmVyKGJlKXx8IVIuaXNCdWZmZXIoQWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKGJl''@;'; put 'put ''PT09QWUpcmV0dXJuIDA7Zm9yKHZhciBUZT1iZS5sZW5ndGgscWU9QWUubGVuZ3RoLFhlPTAsVWU9TWF0aC5taW4oVGUscWUpO1hlPFVlOysrWGUpaWYoYmVbWGVdIT09QWVbWGVdKXtUZT1iZVtYZV0scWU9QWVbWGVdO2JyZWFrfXJldHVybiBUZTxxZT8tMTpxZTxUZT8xOjB9LFIuaXNFbmNv''@;'; put 'put ''ZGluZz1mdW5jdGlvbihiZSl7c3dpdGNoKFN0cmluZyhiZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0''@;'; put 'put ''ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxSLmNvbmNhdD1mdW5jdGlvbihiZSxBZSl7aWYoIUFycmF5LmlzQXJyYXkoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtp''@;'; put 'put ''ZigwPT09YmUubGVuZ3RoKXJldHVybiBSLmFsbG9jKDApO3ZhciBUZTtpZih2b2lkIDA9PT1BZSlmb3IoQWU9MCxUZT0wO1RlPGJlLmxlbmd0aDsrK1RlKUFlKz1iZVtUZV0ubGVuZ3RoO3ZhciBxZT1SLmFsbG9jVW5zYWZlKEFlKSxYZT0wO2ZvcihUZT0wO1RlPGJlLmxlbmd0aDsrK1RlKXt2''@;'; put 'put ''YXIgVWU9YmVbVGVdO2lmKFllKFVlLFVpbnQ4QXJyYXkpKVhlK1VlLmxlbmd0aD5xZS5sZW5ndGg/Ui5mcm9tKFVlKS5jb3B5KHFlLFhlKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChxZSxVZSxYZSk7ZWxzZXtpZighUi5pc0J1ZmZlcihVZSkpdGhyb3cgbmV3IFR5cGVFcnJvcign''@;'; put 'put ''Imxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1VlLmNvcHkocWUsWGUpfVhlKz1VZS5sZW5ndGh9cmV0dXJuIHFlfSxSLmJ5dGVMZW5ndGg9cSxSLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsUi5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGJlPXRo''@;'; put 'put ''aXMubGVuZ3RoO2lmKGJlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBBZT0wO0FlPGJlO0FlKz0yKXRlKHRoaXMsQWUsQWUrMSk7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnN3YXAzMj1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciBiZT10aGlzLmxlbmd0aDtpZihiZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgQWU9MDtBZTxiZTtBZSs9NCl0ZSh0aGlzLEFlLEFlKzMpLHRlKHRoaXMsQWUrMSxBZSsyKTty''@;'; put 'put ''ZXR1cm4gdGhpc30sUi5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubGVuZ3RoO2lmKGJlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBBZT0wO0FlPGJlO0FlKz04KXRl''@;'; put 'put ''KHRoaXMsQWUsQWUrNyksdGUodGhpcyxBZSsxLEFlKzYpLHRlKHRoaXMsQWUrMixBZSs1KSx0ZSh0aGlzLEFlKzMsQWUrNCk7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPVIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubGVuZ3RoO3Jl''@;'; put 'put ''dHVybiAwPT09YmU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/SCh0aGlzLDAsYmUpOmVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sUi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGJlKXtpZighUi5pc0J1ZmZlcihiZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBh''@;'; put 'put ''IEJ1ZmZlciIpO3JldHVybiB0aGlzPT09YmV8fDA9PT1SLmNvbXBhcmUodGhpcyxiZSl9LFIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgYmU9IiIsQWU9SWUuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIGJlPXRoaXMudG9TdHJpbmcoImhleCIsMCxBZSkucmVwbGFjZSgvKC57''@;'; put 'put ''Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5BZSYmKGJlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK2JlKyI+In0sbSYmKFIucHJvdG90eXBlW21dPVIucHJvdG90eXBlLmluc3BlY3QpLFIucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oYmUsQWUsVGUscWUsWGUpe2lmKFllKGJlLFVp''@;'; put 'put ''bnQ4QXJyYXkpJiYoYmU9Ui5mcm9tKGJlLGJlLm9mZnNldCxiZS5ieXRlTGVuZ3RoKSksIVIuaXNCdWZmZXIoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBl''@;'; put 'put ''ICcrdHlwZW9mIGJlKTtpZih2b2lkIDA9PT1BZSYmKEFlPTApLHZvaWQgMD09PVRlJiYoVGU9YmU/YmUubGVuZ3RoOjApLHZvaWQgMD09PXFlJiYocWU9MCksdm9pZCAwPT09WGUmJihYZT10aGlzLmxlbmd0aCksQWU8MHx8VGU+YmUubGVuZ3RofHxxZTwwfHxYZT50aGlzLmxlbmd0aCl0aHJv''@;'; put 'put ''dyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocWU+PVhlJiZBZT49VGUpcmV0dXJuIDA7aWYocWU+PVhlKXJldHVybi0xO2lmKEFlPj1UZSlyZXR1cm4gMTtpZih0aGlzPT09YmUpcmV0dXJuIDA7Zm9yKHZhciBVZT0oWGU+Pj49MCktKHFlPj4+PTApLGh0PShUZT4+''@;'; put 'put ''Pj0wKS0oQWU+Pj49MCksTWU9TWF0aC5taW4oVWUsaHQpLERlPXRoaXMuc2xpY2UocWUsWGUpLHplPWJlLnNsaWNlKEFlLFRlKSxpdD0wO2l0PE1lOysraXQpaWYoRGVbaXRdIT09emVbaXRdKXtVZT1EZVtpdF0saHQ9emVbaXRdO2JyZWFrfXJldHVybiBVZTxodD8tMTpodDxVZT8xOjB9LFIu''@;'; put 'put ''cHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihiZSxBZSxUZSl9LFIucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBvZSh0aGlzLGJlLEFlLFRlLCEwKX0sUi5wcm90b3R5cGUubGFzdEluZGV4T2Y9''@;'; put 'put ''ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBvZSh0aGlzLGJlLEFlLFRlLCExKX0sUi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2lmKHZvaWQgMD09PUFlKXFlPSJ1dGY4IixUZT10aGlzLmxlbmd0aCxBZT0wO2Vsc2UgaWYodm9pZCAwPT09VGUmJiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgQWUpcWU9QWUsVGU9dGhpcy5sZW5ndGgsQWU9MDtlbHNle2lmKCFpc0Zpbml0ZShBZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0FlPj4+PTAsaXNGaW5pdGUo''@;'; put 'put ''VGUpPyhUZT4+Pj0wLHZvaWQgMD09PXFlJiYocWU9InV0ZjgiKSk6KHFlPVRlLFRlPXZvaWQgMCl9dmFyIFhlPXRoaXMubGVuZ3RoLUFlO2lmKCh2b2lkIDA9PT1UZXx8VGU+WGUpJiYoVGU9WGUpLGJlLmxlbmd0aD4wJiYoVGU8MHx8QWU8MCl8fEFlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBS''@;'; put 'put ''YW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO3FlfHwocWU9InV0ZjgiKTtmb3IodmFyIFVlPSExOzspc3dpdGNoKHFlKXtjYXNlImhleCI6cmV0dXJuIGhlKHRoaXMsYmUsQWUsVGUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHVlKHRo''@;'; put 'put ''aXMsYmUsQWUsVGUpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNlKHRoaXMsYmUsQWUsVGUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gRyh0aGlzLGJlLEFlLFRlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6''@;'; put 'put ''cmV0dXJuIGIodGhpcyxiZSxBZSxUZSk7ZGVmYXVsdDppZihVZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3FlKTtxZT0oIiIrcWUpLnRvTG93ZXJDYXNlKCksVWU9ITB9fSxSLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVy''@;'; put 'put ''IixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBOPTQwOTY7ZnVuY3Rpb24gQyhQZSxiZSxBZSl7dmFyIFRlPSIiO0FlPU1hdGgubWluKFBlLmxlbmd0aCxBZSk7Zm9yKHZhciBxZT1iZTtxZTxBZTsrK3FlKVRlKz1TdHJpbmcuZnJvbUNo''@;'; put 'put ''YXJDb2RlKDEyNyZQZVtxZV0pO3JldHVybiBUZX1mdW5jdGlvbiBTKFBlLGJlLEFlKXt2YXIgVGU9IiI7QWU9TWF0aC5taW4oUGUubGVuZ3RoLEFlKTtmb3IodmFyIHFlPWJlO3FlPEFlOysrcWUpVGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoUGVbcWVdKTtyZXR1cm4gVGV9ZnVuY3Rpb24gdihQ''@;'; put 'put ''ZSxiZSxBZSl7dmFyIFRlPVBlLmxlbmd0aDsoIWJlfHxiZTwwKSYmKGJlPTApLCghQWV8fEFlPDB8fEFlPlRlKSYmKEFlPVRlKTtmb3IodmFyIHFlPSIiLFhlPWJlO1hlPEFlOysrWGUpcWUrPWx0W1BlW1hlXV07cmV0dXJuIHFlfWZ1bmN0aW9uIHAoUGUsYmUsQWUpe2Zvcih2YXIgVGU9UGUu''@;'; put 'put ''c2xpY2UoYmUsQWUpLHFlPSIiLFhlPTA7WGU8VGUubGVuZ3RoLTE7WGUrPTIpcWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoVGVbWGVdKzI1NipUZVtYZSsxXSk7cmV0dXJuIHFlfWZ1bmN0aW9uIHcoUGUsYmUsQWUpe2lmKFBlJTEhPTB8fFBlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNl''@;'; put 'put ''dCBpcyBub3QgdWludCIpO2lmKFBlK2JlPkFlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gSihQZSxiZSxBZSxUZSxxZSxYZSl7aWYoIVIuaXNCdWZmZXIoUGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZm''@;'; put 'put ''ZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihiZT5xZXx8YmU8WGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKEFlK1RlPlBlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0''@;'; put 'put ''IG9mIHJhbmdlIil9ZnVuY3Rpb24gbmUoUGUsYmUsQWUsVGUscWUsWGUpe2lmKEFlK1RlPlBlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoQWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24g''@;'; put 'put ''ZGUoUGUsYmUsQWUsVGUscWUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxxZXx8bmUoUGUsMCxBZSw0KSx4LndyaXRlKFBlLGJlLEFlLFRlLDIzLDQpLEFlKzR9ZnVuY3Rpb24gZmUoUGUsYmUsQWUsVGUscWUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxxZXx8bmUoUGUsMCxBZSw4KSx4LndyaXRl''@;'; put 'put ''KFBlLGJlLEFlLFRlLDUyLDgpLEFlKzh9Ui5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oYmUsQWUpe3ZhciBUZT10aGlzLmxlbmd0aDsoYmU9fn5iZSk8MD8oYmUrPVRlKTwwJiYoYmU9MCk6YmU+VGUmJihiZT1UZSksKEFlPXZvaWQgMD09PUFlP1RlOn5+QWUpPDA/KEFlKz1UZSk8MCYmKEFl''@;'; put 'put ''PTApOkFlPlRlJiYoQWU9VGUpLEFlPGJlJiYoQWU9YmUpO3ZhciBxZT10aGlzLnN1YmFycmF5KGJlLEFlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHFlLFIucHJvdG90eXBlKSxxZX0sUi5wcm90b3R5cGUucmVhZFVpbnRMRT1SLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9u''@;'; put 'put ''KGJlLEFlLFRlKXtiZT4+Pj0wLEFlPj4+PTAsVGV8fHcoYmUsQWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcWU9dGhpc1tiZV0sWGU9MSxVZT0wOysrVWU8QWUmJihYZSo9MjU2KTspcWUrPXRoaXNbYmUrVWVdKlhlO3JldHVybiBxZX0sUi5wcm90b3R5cGUucmVhZFVpbnRCRT1SLnByb3RvdHlw''@;'; put 'put ''ZS5yZWFkVUludEJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtiZT4+Pj0wLEFlPj4+PTAsVGV8fHcoYmUsQWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcWU9dGhpc1tiZSstLUFlXSxYZT0xO0FlPjAmJihYZSo9MjU2KTspcWUrPXRoaXNbYmUrLS1BZV0qWGU7cmV0dXJuIHFlfSxSLnByb3RvdHlwZS5y''@;'; put 'put ''ZWFkVWludDg9Ui5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2JlXX0sUi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPVIucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihiZSxBZSl7cmV0''@;'; put 'put ''dXJuIGJlPj4+PTAsQWV8fHcoYmUsMix0aGlzLmxlbmd0aCksdGhpc1tiZV18dGhpc1tiZSsxXTw8OH0sUi5wcm90b3R5cGUucmVhZFVpbnQxNkJFPVIucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsMix0aGlzLmxlbmd0aCks''@;'; put 'put ''dGhpc1tiZV08PDh8dGhpc1tiZSsxXX0sUi5wcm90b3R5cGUucmVhZFVpbnQzMkxFPVIucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCksKHRoaXNbYmVdfHRoaXNbYmUrMV08PDh8dGhpc1tiZSsyXTw8''@;'; put 'put ''MTYpKzE2Nzc3MjE2KnRoaXNbYmUrM119LFIucHJvdG90eXBlLnJlYWRVaW50MzJCRT1SLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbYmVdKyh0aGlzW2JlKzFdPDwxNnx0''@;'; put 'put ''aGlzW2JlKzJdPDw4fHRoaXNbYmUrM10pfSxSLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oYmUsQWUsVGUpe2JlPj4+PTAsQWU+Pj49MCxUZXx8dyhiZSxBZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBxZT10aGlzW2JlXSxYZT0xLFVlPTA7KytVZTxBZSYmKFhlKj0yNTYpOylxZSs9dGhp''@;'; put 'put ''c1tiZStVZV0qWGU7cmV0dXJuIHFlPj0oWGUqPTEyOCkmJihxZS09TWF0aC5wb3coMiw4KkFlKSkscWV9LFIucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihiZSxBZSxUZSl7YmU+Pj49MCxBZT4+Pj0wLFRlfHx3KGJlLEFlLHRoaXMubGVuZ3RoKTtmb3IodmFyIHFlPUFlLFhlPTEsVWU9''@;'; put 'put ''dGhpc1tiZSstLXFlXTtxZT4wJiYoWGUqPTI1Nik7KVVlKz10aGlzW2JlKy0tcWVdKlhlO3JldHVybiBVZT49KFhlKj0xMjgpJiYoVWUtPU1hdGgucG93KDIsOCpBZSkpLFVlfSxSLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsMSx0''@;'; put 'put ''aGlzLmxlbmd0aCksMTI4JnRoaXNbYmVdPy0xKigyNTUtdGhpc1tiZV0rMSk6dGhpc1tiZV19LFIucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGJlLEFlKXtiZT4+Pj0wLEFlfHx3KGJlLDIsdGhpcy5sZW5ndGgpO3ZhciBUZT10aGlzW2JlXXx0aGlzW2JlKzFdPDw4O3JldHVybiAz''@;'; put 'put ''Mjc2OCZUZT80Mjk0OTAxNzYwfFRlOlRlfSxSLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihiZSxBZSl7YmU+Pj49MCxBZXx8dyhiZSwyLHRoaXMubGVuZ3RoKTt2YXIgVGU9dGhpc1tiZSsxXXx0aGlzW2JlXTw8ODtyZXR1cm4gMzI3NjgmVGU/NDI5NDkwMTc2MHxUZTpUZX0sUi5w''@;'; put 'put ''cm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDQsdGhpcy5sZW5ndGgpLHRoaXNbYmVdfHRoaXNbYmUrMV08PDh8dGhpc1tiZSsyXTw8MTZ8dGhpc1tiZSszXTw8MjR9LFIucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGJl''@;'; put 'put ''LEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2JlXTw8MjR8dGhpc1tiZSsxXTw8MTZ8dGhpc1tiZSsyXTw8OHx0aGlzW2JlKzNdfSxSLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0''@;'; put 'put ''aGlzLmxlbmd0aCkseC5yZWFkKHRoaXMsYmUsITAsMjMsNCl9LFIucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMubGVuZ3RoKSx4LnJlYWQodGhpcyxiZSwhMSwyMyw0KX0sUi5wcm90b3R5cGUucmVhZERvdWJsZUxF''@;'; put 'put ''PWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw4LHRoaXMubGVuZ3RoKSx4LnJlYWQodGhpcyxiZSwhMCw1Miw4KX0sUi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw4LHRoaXMubGVuZ3RoKSx4LnJl''@;'; put 'put ''YWQodGhpcyxiZSwhMSw1Miw4KX0sUi5wcm90b3R5cGUud3JpdGVVaW50TEU9Ui5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2JlPStiZSxBZT4+Pj0wLFRlPj4+PTAscWV8fEoodGhpcyxiZSxBZSxUZSxNYXRoLnBvdygyLDgqVGUpLTEsMCk7dmFyIFVlPTEs''@;'; put 'put ''aHQ9MDtmb3IodGhpc1tBZV09MjU1JmJlOysraHQ8VGUmJihVZSo9MjU2KTspdGhpc1tBZStodF09YmUvVWUmMjU1O3JldHVybiBBZStUZX0sUi5wcm90b3R5cGUud3JpdGVVaW50QkU9Ui5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2JlPStiZSxBZT4+Pj0w''@;'; put 'put ''LFRlPj4+PTAscWV8fEoodGhpcyxiZSxBZSxUZSxNYXRoLnBvdygyLDgqVGUpLTEsMCk7dmFyIFVlPVRlLTEsaHQ9MTtmb3IodGhpc1tBZStVZV09MjU1JmJlOy0tVWU+PTAmJihodCo9MjU2KTspdGhpc1tBZStVZV09YmUvaHQmMjU1O3JldHVybiBBZStUZX0sUi5wcm90b3R5cGUud3JpdGVV''@;'; put 'put ''aW50OD1SLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSwxLDI1NSwwKSx0aGlzW0FlXT0yNTUmYmUsQWUrMX0sUi5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1SLnByb3RvdHlwZS53cml0ZVVJbnQx''@;'; put 'put ''NkxFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSwyLDY1NTM1LDApLHRoaXNbQWVdPTI1NSZiZSx0aGlzW0FlKzFdPWJlPj4+OCxBZSsyfSxSLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPVIucHJvdG90eXBlLndyaXRlVUludDE2QkU9''@;'; put 'put ''ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDIsNjU1MzUsMCksdGhpc1tBZV09YmU+Pj44LHRoaXNbQWUrMV09MjU1JmJlLEFlKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ui5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5j''@;'; put 'put ''dGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbQWUrM109YmU+Pj4yNCx0aGlzW0FlKzJdPWJlPj4+MTYsdGhpc1tBZSsxXT1iZT4+PjgsdGhpc1tBZV09MjU1JmJlLEFlKzR9LFIucHJvdG90eXBlLndyaXRl''@;'; put 'put ''VWludDMyQkU9Ui5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbQWVdPWJlPj4+MjQsdGhpc1tBZSsxXT1iZT4+PjE2LHRoaXNbQWUrMl09YmU+Pj44LHRo''@;'; put 'put ''aXNbQWUrM109MjU1JmJlLEFlKzR9LFIucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2lmKGJlPStiZSxBZT4+Pj0wLCFxZSl7dmFyIFhlPU1hdGgucG93KDIsOCpUZS0xKTtKKHRoaXMsYmUsQWUsVGUsWGUtMSwtWGUpfXZhciBVZT0wLGh0PTEsTWU9MDtmb3Io''@;'; put 'put ''dGhpc1tBZV09MjU1JmJlOysrVWU8VGUmJihodCo9MjU2KTspYmU8MCYmMD09PU1lJiYwIT09dGhpc1tBZStVZS0xXSYmKE1lPTEpLHRoaXNbQWUrVWVdPShiZS9odD4+MCktTWUmMjU1O3JldHVybiBBZStUZX0sUi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihiZSxBZSxUZSxxZSl7''@;'; put 'put ''aWYoYmU9K2JlLEFlPj4+PTAsIXFlKXt2YXIgWGU9TWF0aC5wb3coMiw4KlRlLTEpO0oodGhpcyxiZSxBZSxUZSxYZS0xLC1YZSl9dmFyIFVlPVRlLTEsaHQ9MSxNZT0wO2Zvcih0aGlzW0FlK1VlXT0yNTUmYmU7LS1VZT49MCYmKGh0Kj0yNTYpOyliZTwwJiYwPT09TWUmJjAhPT10aGlzW0Fl''@;'; put 'put ''K1VlKzFdJiYoTWU9MSksdGhpc1tBZStVZV09KGJlL2h0Pj4wKS1NZSYyNTU7cmV0dXJuIEFlK1RlfSxSLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDEsMTI3LC0xMjgpLGJlPDAmJihiZT0yNTUr''@;'; put 'put ''YmUrMSksdGhpc1tBZV09MjU1JmJlLEFlKzF9LFIucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsMiwzMjc2NywtMzI3NjgpLHRoaXNbQWVdPTI1NSZiZSx0aGlzW0FlKzFdPWJlPj4+OCxBZSsy''@;'; put 'put ''fSxSLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0FlXT1iZT4+PjgsdGhpc1tBZSsxXT0yNTUmYmUsQWUrMn0sUi5wcm90b3R5cGUud3JpdGVJbnQzMkxF''@;'; put 'put ''PWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbQWVdPTI1NSZiZSx0aGlzW0FlKzFdPWJlPj4+OCx0aGlzW0FlKzJdPWJlPj4+MTYsdGhpc1tBZSszXT1iZT4+PjI0LEFlKzR9LFIu''@;'; put 'put ''cHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxiZTwwJiYoYmU9NDI5NDk2NzI5NStiZSsxKSx0aGlzW0FlXT1iZT4+PjI0LHRoaXNbQWUrMV09YmU+''@;'; put 'put ''Pj4xNix0aGlzW0FlKzJdPWJlPj4+OCx0aGlzW0FlKzNdPTI1NSZiZSxBZSs0fSxSLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBkZSh0aGlzLGJlLEFlLCEwLFRlKX0sUi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGJlLEFlLFRlKXty''@;'; put 'put ''ZXR1cm4gZGUodGhpcyxiZSxBZSwhMSxUZSl9LFIucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBmZSh0aGlzLGJlLEFlLCEwLFRlKX0sUi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGZlKHRoaXMsYmUs''@;'; put 'put ''QWUsITEsVGUpfSxSLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtpZighUi5pc0J1ZmZlcihiZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoVGV8fChUZT0wKSwhcWUmJjAhPT1xZSYmKHFlPXRoaXMubGVuZ3RoKSxB''@;'; put 'put ''ZT49YmUubGVuZ3RoJiYoQWU9YmUubGVuZ3RoKSxBZXx8KEFlPTApLHFlPjAmJnFlPFRlJiYocWU9VGUpLHFlPT09VGV8fDA9PT1iZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihBZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRz''@;'; put 'put ''Iik7aWYoVGU8MHx8VGU+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihxZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3FlPnRoaXMubGVuZ3RoJiYocWU9dGhpcy5sZW5ndGgpLGJlLmxl''@;'; put 'put ''bmd0aC1BZTxxZS1UZSYmKHFlPWJlLmxlbmd0aC1BZStUZSk7dmFyIFhlPXFlLVRlO3JldHVybiB0aGlzPT09YmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihBZSxUZSxxZSk6VWludDhBcnJheS5wcm90b3R5cGUu''@;'; put 'put ''c2V0LmNhbGwoYmUsdGhpcy5zdWJhcnJheShUZSxxZSksQWUpLFhlfSxSLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtpZigic3RyaW5nIj09dHlwZW9mIGJlKXtpZigic3RyaW5nIj09dHlwZW9mIEFlPyhxZT1BZSxBZT0wLFRlPXRoaXMubGVuZ3RoKToic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIFRlJiYocWU9VGUsVGU9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PXFlJiYic3RyaW5nIiE9dHlwZW9mIHFlKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHFlJiYhUi5pc0VuY29kaW5nKHFlKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3FlKTtpZigxPT09YmUubGVuZ3RoKXt2YXIgWGU9YmUuY2hhckNvZGVBdCgwKTsoInV0ZjgiPT09cWUmJlhlPDEyOHx8ImxhdGluMSI9PT1xZSkmJihiZT1YZSl9fWVsc2UibnVtYmVyIj09dHlwZW9mIGJlP2JlJj0yNTU6ImJvb2xl''@;'; put 'put ''YW4iPT10eXBlb2YgYmUmJihiZT1OdW1iZXIoYmUpKTtpZihBZTwwfHx0aGlzLmxlbmd0aDxBZXx8dGhpcy5sZW5ndGg8VGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKFRlPD1BZSlyZXR1cm4gdGhpczt2YXIgVWU7aWYoQWU+Pj49MCxUZT12b2lkIDA9''@;'; put 'put ''PT1UZT90aGlzLmxlbmd0aDpUZT4+PjAsYmV8fChiZT0wKSwibnVtYmVyIj09dHlwZW9mIGJlKWZvcihVZT1BZTtVZTxUZTsrK1VlKXRoaXNbVWVdPWJlO2Vsc2V7dmFyIGh0PVIuaXNCdWZmZXIoYmUpP2JlOlIuZnJvbShiZSxxZSksTWU9aHQubGVuZ3RoO2lmKDA9PT1NZSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCdUaGUgdmFsdWUgIicrYmUrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihVZT0wO1VlPFRlLUFlOysrVWUpdGhpc1tVZStBZV09aHRbVWUlTWVdfXJldHVybiB0aGlzfTt2YXIgeGU9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBGZShQZSxi''@;'; put 'put ''ZSl7YmU9YmV8fDEvMDtmb3IodmFyIEFlLFRlPVBlLmxlbmd0aCxxZT1udWxsLFhlPVtdLFVlPTA7VWU8VGU7KytVZSl7aWYoKEFlPVBlLmNoYXJDb2RlQXQoVWUpKT41NTI5NSYmQWU8NTczNDQpe2lmKCFxZSl7aWYoQWU+NTYzMTkpeyhiZS09Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkp''@;'; put 'put ''O2NvbnRpbnVlfWlmKFVlKzE9PT1UZSl7KGJlLT0zKT4tMSYmWGUucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9cWU9QWU7Y29udGludWV9aWYoQWU8NTYzMjApeyhiZS09Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkpLHFlPUFlO2NvbnRpbnVlfUFlPTY1NTM2KyhxZS01NTI5Njw8MTB8''@;'; put 'put ''QWUtNTYzMjApfWVsc2UgcWUmJihiZS09Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkpO2lmKHFlPW51bGwsQWU8MTI4KXtpZigoYmUtPTEpPDApYnJlYWs7WGUucHVzaChBZSl9ZWxzZSBpZihBZTwyMDQ4KXtpZigoYmUtPTIpPDApYnJlYWs7WGUucHVzaChBZT4+NnwxOTIsNjMmQWV8MTI4''@;'; put 'put ''KX1lbHNlIGlmKEFlPDY1NTM2KXtpZigoYmUtPTMpPDApYnJlYWs7WGUucHVzaChBZT4+MTJ8MjI0LEFlPj42JjYzfDEyOCw2MyZBZXwxMjgpfWVsc2V7aWYoIShBZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChiZS09NCk8MClicmVhaztYZS5w''@;'; put 'put ''dXNoKEFlPj4xOHwyNDAsQWU+PjEyJjYzfDEyOCxBZT4+NiY2M3wxMjgsNjMmQWV8MTI4KX19cmV0dXJuIFhlfWZ1bmN0aW9uIFdlKFBlKXtyZXR1cm4gYWUudG9CeXRlQXJyYXkoZnVuY3Rpb24gTGUoUGUpe2lmKChQZT0oUGU9UGUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoeGUs''@;'; put 'put ''IiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO1BlLmxlbmd0aCU0IT0wOylQZSs9Ij0iO3JldHVybiBQZX0oUGUpKX1mdW5jdGlvbiBLZShQZSxiZSxBZSxUZSl7Zm9yKHZhciBxZT0wO3FlPFRlJiYhKHFlK0FlPj1iZS5sZW5ndGh8fHFlPj1QZS5sZW5ndGgpOysrcWUpYmVbcWUrQWVdPVBl''@;'; put 'put ''W3FlXTtyZXR1cm4gcWV9ZnVuY3Rpb24gWWUoUGUsYmUpe3JldHVybiBQZSBpbnN0YW5jZW9mIGJlfHxudWxsIT1QZSYmbnVsbCE9UGUuY29uc3RydWN0b3ImJm51bGwhPVBlLmNvbnN0cnVjdG9yLm5hbWUmJlBlLmNvbnN0cnVjdG9yLm5hbWU9PT1iZS5uYW1lfWZ1bmN0aW9uIEplKFBlKXty''@;'; put 'put ''ZXR1cm4gUGUhPVBlfXZhciBsdD1mdW5jdGlvbigpe2Zvcih2YXIgUGU9IjAxMjM0NTY3ODlhYmNkZWYiLGJlPW5ldyBBcnJheSgyNTYpLEFlPTA7QWU8MTY7KytBZSlmb3IodmFyIFRlPTE2KkFlLHFlPTA7cWU8MTY7KytxZSliZVtUZStxZV09UGVbQWVdK1BlW3FlXTtyZXR1cm4gYmV9KCl9''@;'; put 'put ''LDg2NDIwOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig1MTc5MykuVHJhbnNmb3JtLG09Rig3MjAyNCkucztmdW5jdGlvbiBNKE8pe3guY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2YgTyx0aGlzLmhhc2hNb2RlP3RoaXNbT109dGhpcy5fZmlu''@;'; put 'put ''YWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9Rig2NjY5OCkoTSx4KSxNLnByb3RvdHlwZS51''@;'; put 'put ''cGRhdGU9ZnVuY3Rpb24oTyxSLHopeyJzdHJpbmciPT10eXBlb2YgTyYmKE89YWUuZnJvbShPLFIpKTt2YXIgSz10aGlzLl91cGRhdGUoTyk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooeiYmKEs9dGhpcy5fdG9TdHJpbmcoSyx6KSksSyl9LE0ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5n''@;'; put 'put ''PWZ1bmN0aW9uKCl7fSxNLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LE0ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRy''@;'; put 'put ''eWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sTS5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxNLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9u''@;'; put 'put ''KE8sUix6KXt2YXIgSzt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoTyk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZShPKSl9Y2F0Y2goSSl7Sz1JfWZpbmFsbHl7eihLKX19LE0ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihPKXt2YXIgUjt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5h''@;'; put 'put ''bCgpKX1jYXRjaCh6KXtSPXp9TyhSKX0sTS5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oTyl7dmFyIFI9dGhpcy5fX2ZpbmFsKCl8fGFlLmFsbG9jKDApO3JldHVybiBPJiYoUj10aGlzLl90b1N0cmluZyhSLE8sITApKSxSfSxNLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rp''@;'; put 'put ''b24oTyxSLHope2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBtKFIpLHRoaXMuX2VuY29kaW5nPVIpLHRoaXMuX2VuY29kaW5nIT09Uil0aHJvdyBuZXcgRXJyb3IoImNhbid0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgSz10aGlzLl9kZWNvZGVyLndyaXRlKE8pO3JldHVy''@;'; put 'put ''biB6JiYoSys9dGhpcy5fZGVjb2Rlci5lbmQoKSksS30sYXQuZXhwb3J0cz1NfSwzODg0MDooYXQsSWUsRik9Pnt2YXIgYWU9Rig4ODY1MSkseD1GKDMxODUpO2F0LmV4cG9ydHM9ZnVuY3Rpb24oUil7cmV0dXJuIG5ldyBsZShSKX07dmFyIG09e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1Nmsx''@;'; put 'put ''IixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5n''@;'; put 'put ''dGg6MzJ9LHNlY3AzODRyMTp7bmFtZToicDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gbGUoTyl7dGhpcy5jdXJ2ZVR5cGU9bVtPXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOk99KSx0aGlz''@;'; put 'put ''LmN1cnZlPW5ldyBhZS5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIE0oTyxSLHope0FycmF5LmlzQXJyYXkoTyl8fChPPU8udG9BcnJheSgpKTt2YXIgSz1uZXcgQnVmZmVyKE8pO2lmKHomJksubGVuZ3RoPHope3ZhciBJPW5ldyBCdWZmZXIoei1L''@;'; put 'put ''Lmxlbmd0aCk7SS5maWxsKDApLEs9QnVmZmVyLmNvbmNhdChbSSxLXSl9cmV0dXJuIFI/Sy50b1N0cmluZyhSKTpLfW0ucDIyND1tLnNlY3AyMjRyMSxtLnAyNTY9bS5zZWNwMjU2cjE9bS5wcmltZTI1NnYxLG0ucDE5Mj1tLnNlY3AxOTJyMT1tLnByaW1lMTkydjEsbS5wMzg0PW0uc2VjcDM4''@;'; put 'put ''NHIxLG0ucDUyMT1tLnNlY3A1MjFyMSxsZS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKE8sUil7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShPLFIpfSxsZS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihP''@;'; put 'put ''LFIseil7cmV0dXJuIFI9Unx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihPKXx8KE89bmV3IEJ1ZmZlcihPLFIpKSxNKHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhPKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLHosdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxl''@;'; put 'put ''bmd0aCl9LGxlLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oTyxSKXt2YXIgej10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PVIsITApO3JldHVybiJoeWJyaWQiPT09UiYmKHpbMF09elt6Lmxlbmd0aC0xXSUyPzc6NiksTSh6LE8pfSxsZS5wcm90b3R5cGUuZ2V0''@;'; put 'put ''UHJpdmF0ZUtleT1mdW5jdGlvbihPKXtyZXR1cm4gTSh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLE8pfSxsZS5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKE8sUil7cmV0dXJuIFI9Unx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihPKXx8KE89bmV3IEJ1ZmZlcihPLFIpKSx0aGlzLmtl''@;'; put 'put ''eXMuX2ltcG9ydFB1YmxpYyhPKSx0aGlzfSxsZS5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihPLFIpe1I9Unx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihPKXx8KE89bmV3IEJ1ZmZlcihPLFIpKTt2YXIgej1uZXcgeChPKTtyZXR1cm4gej16LnRvU3RyaW5nKDE2KSx0aGlzLmtl''@;'; put 'put ''eXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKHopLHRoaXN9fSwzMTg1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShHLGIpe2lmKCFHKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9u''@;'; put 'put ''IGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEcsYil7Ry5zdXBlcl89Yjt2YXIgRD1mdW5jdGlvbigpe307RC5wcm90b3R5cGU9Yi5wcm90b3R5cGUsRy5wcm90b3R5cGU9bmV3IEQsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9R31mdW5jdGlvbiBNKEcsYixEKXtpZihNLmlzQk4oRykpcmV0dXJuIEc7''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUcmJigoImxlIj09PWJ8fCJiZSI9PT1iKSYmKEQ9YixiPTEwKSx0aGlzLl9pbml0KEd8fDAsYnx8MTAsRHx8ImJlIikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUu''@;'; put 'put ''ZXhwb3J0cz1NOnguQk49TSxNLkJOPU0sTS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Rig4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJDb2RlQXQoYik7cmV0''@;'; put 'put ''dXJuIEQ+PTY1JiZEPD03MD9ELTU1OkQ+PTk3JiZEPD0xMDI/RC04NzpELTQ4JjE1fWZ1bmN0aW9uIHooRyxiLEQpe3ZhciBIPVIoRyxEKTtyZXR1cm4gRC0xPj1iJiYoSHw9UihHLEQtMSk8PDQpLEh9ZnVuY3Rpb24gSyhHLGIsRCxIKXtmb3IodmFyIE49MCxnPU1hdGgubWluKEcubGVuZ3Ro''@;'; put 'put ''LEQpLEM9YjtDPGc7QysrKXt2YXIgUz1HLmNoYXJDb2RlQXQoQyktNDg7Tio9SCxOKz1TPj00OT9TLTQ5KzEwOlM+PTE3P1MtMTcrMTA6U31yZXR1cm4gTn1NLmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBNfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNv''@;'; put 'put ''bnN0cnVjdG9yLndvcmRTaXplPT09TS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sTS5tYXg9ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk+MD9iOkR9LE0ubWluPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPDA/YjpEfSxNLnByb3RvdHlwZS5faW5pdD1mdW5j''@;'; put 'put ''dGlvbihiLEQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIsRCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLEQsSCk7ImhleCI9PT1EJiYoRD0xNiksbShEPT09KDB8RCkmJkQ+PTImJkQ8PTM2KTt2YXIg''@;'; put 'put ''Tj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTisrLHRoaXMubmVnYXRpdmU9MSksTjxiLmxlbmd0aCYmKDE2PT09RD90aGlzLl9wYXJzZUhleChiLE4sSCk6KHRoaXMuX3BhcnNlQmFzZShiLEQsTiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0''@;'; put 'put ''aGlzLnRvQXJyYXkoKSxELEgpKSl9LE0ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIsRCxIKXtiPDAmJih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlz''@;'; put 'put ''LndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihtKGI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXko''@;'; put 'put ''dGhpcy50b0FycmF5KCksRCxIKX0sTS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLEQsSCl7aWYobSgibnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2Vp''@;'; put 'put ''bChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBnLEMsUz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTEsZz0wO04+PTA7Ti09Myl0aGlzLndvcmRzW2ddfD0o''@;'; put 'put ''Qz1iW05dfGJbTi0xXTw8OHxiW04tMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKE49MCxnPTA7TjxiLmxlbmd0aDtOKz0zKXRoaXMud29yZHNbZ118PShDPWJb''@;'; put 'put ''Tl18YltOKzFdPDw4fGJbTisyXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIsRCxIKXt0aGlzLmxlbmd0''@;'; put 'put ''aD1NYXRoLmNlaWwoKGIubGVuZ3RoLUQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIFMsZz0wLEM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xO04+PUQ7Ti09MilTPXoo''@;'; put 'put ''YixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODtlbHNlIGZvcihOPShiLmxlbmd0aC1EKSUyPT0wP0QrMTpEO048Yi5sZW5ndGg7Tis9MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4''@;'; put 'put ''ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYixELEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBOPTAsZz0xO2c8PTY3MTA4ODYzO2cqPUQp''@;'; put 'put ''TisrO04tLSxnPWcvRHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1ILFM9QyVOLHY9TWF0aC5taW4oQyxDLVMpK0gscD0wLHc9SDt3PHY7dys9TilwPUsoYix3LHcrTixEKSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHAp''@;'; put 'put ''O2lmKDAhPT1TKXt2YXIgSj0xO2ZvcihwPUsoYix3LGIubGVuZ3RoLEQpLHc9MDt3PFM7dysrKUoqPUQ7dGhpcy5pbXVsbihKKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmNvcHk9ZnVu''@;'; put 'put ''Y3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKWIud29yZHNbRF09dGhpcy53b3Jkc1tEXTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LE0ucHJvdG90''@;'; put 'put ''eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxNLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlw''@;'; put 'put ''ZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LE0ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''JjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIs''@;'; put 'put ''IjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGs9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2''@;'; put 'put ''LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYy''@;'; put 'put ''NCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBWKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZTt2YXIgSD1H''@;'; put 'put ''Lmxlbmd0aCtiLmxlbmd0aHwwO0QubGVuZ3RoPUgsSD1ILTF8MDt2YXIgTj0wfEcud29yZHNbMF0sZz0wfGIud29yZHNbMF0sQz1OKmcsdj1DLzY3MTA4ODY0fDA7RC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIgcD0xO3A8SDtwKyspe2Zvcih2YXIgdz12Pj4+MjYsSj02NzEwODg2MyZ2''@;'; put 'put ''LG5lPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZGU9TWF0aC5tYXgoMCxwLUcubGVuZ3RoKzEpO2RlPD1uZTtkZSsrKXcrPShDPShOPTB8Ry53b3Jkc1twLWRlfDBdKSooZz0wfGIud29yZHNbZGVdKStKKS82NzEwODg2NHwwLEo9NjcxMDg4NjMmQztELndvcmRzW3BdPTB8Six2PTB8d31yZXR1''@;'; put 'put ''cm4gMCE9PXY/RC53b3Jkc1twXT0wfHY6RC5sZW5ndGgtLSxELnN0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYixEKXt2YXIgSDtpZihEPTB8RHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1iKXtIPSIiO2Zvcih2YXIgTj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtD''@;'; put 'put ''Kyspe3ZhciBTPXRoaXMud29yZHNbQ10sdj0oMTY3NzcyMTUmKFM8PE58ZykpLnRvU3RyaW5nKDE2KTtIPTAhPShnPVM+Pj4yNC1OJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXYubGVuZ3RoXSt2K0g6ditILChOKz0yKT49MjYmJihOLT0yNixDLS0pfWZvcigwIT09ZyYmKEg9''@;'; put 'put ''Zy50b1N0cmluZygxNikrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPWtbYl0sdz1FW2JdO0g9IiI7dmFyIEo9dGhpcy5jbG9uZSgpO2ZvcihKLm5lZ2F0aXZlPTA7''@;'; put 'put ''IUouaXNaZXJvKCk7KXt2YXIgbmU9Si5tb2RuKHcpLnRvU3RyaW5nKGIpO0g9KEo9Si5pZGl2bih3KSkuaXNaZXJvKCk/bmUrSDpJW3AtbmUubGVuZ3RoXStuZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJihIPSItIitIKSxIfW0oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09''@;'; put 'put ''dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxN''@;'; put 'put ''LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LE0ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG0odHlwZW9mIE88InUiKSx0aGlzLnRvQXJyYXlMaWtlKE8sYixEKX0sTS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlv''@;'; put 'put ''bihiLEQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj10aGlzLmJ5dGVMZW5ndGgoKSxnPUh8fE1hdGgubWF4KDEsTik7bShOPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQg''@;'; put 'put ''bGVuZ3RoIiksbShnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdixwLEM9ImxlIj09PUQsUz1uZXcgYihnKSx3PXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW3Bd''@;'; put 'put ''PXY7Zm9yKDtwPGc7cCsrKVNbcF09MH1lbHNle2ZvcihwPTA7cDxnLU47cCsrKVNbcF09MDtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW2ctcC0xXT12fXJldHVybiBTfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rp''@;'; put 'put ''b24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciBEPWIsSD0wO3JldHVybiBEPj00MDk2JiYoSCs9MTMsRD4+Pj0xMyksRD49NjQmJihIKz03LEQ+Pj49NyksRD49OCYmKEgrPTQsRD4+Pj00KSxEPj0yJiYoSCs9MixEPj4+PTIpLEgrRH0sTS5wcm90b3R5cGUu''@;'; put 'put ''X3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2YXIgRD1iLEg9MDtyZXR1cm4gODE5MSZEfHwoSCs9MTMsRD4+Pj0xMyksMTI3JkR8fChIKz03LEQ+Pj49NyksMTUmRHx8KEgrPTQsRD4+Pj00KSwzJkR8fChIKz0yLEQ+Pj49MiksMSZEfHxIKyssSH0sTS5wcm90b3R5''@;'; put 'put ''cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrRH0sTS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2''@;'; put 'put ''YXIgYj0wLEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tEXSk7aWYoYis9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIGJ9LE0ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkv''@;'; put 'put ''OCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5u''@;'; put 'put ''b3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBEPTA7RDxiLmxlbmd0aDtE''@;'; put 'put ''KyspdGhpcy53b3Jkc1tEXT10aGlzLndvcmRzW0RdfGIud29yZHNbRF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0''@;'; put 'put ''aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1''@;'; put 'put ''b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3ZhciBEO0Q9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0aGlzO2Zvcih2YXIgSD0wO0g8RC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZiLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ELmxl''@;'; put 'put ''bmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LE0ucHJvdG90eXBlLmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5j''@;'; put 'put ''bG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LE0ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9u''@;'; put 'put ''KGIpe3ZhciBELEg7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEQ9dGhpcyxIPWIpOihEPWIsSD10aGlzKTtmb3IodmFyIE49MDtOPEgubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl1eSC53b3Jkc1tOXTtpZih0aGlzIT09RClmb3IoO048RC5sZW5ndGg7TisrKXRoaXMud29yZHNb''@;'; put 'put ''Tl09RC53b3Jkc1tOXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24o''@;'; put 'put ''Yil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMpfSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1''@;'; put 'put ''eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9MHxNYXRoLmNlaWwoYi8yNiksSD1iJTI2O3RoaXMuX2V4cGFuZChEKSxIPjAmJkQtLTtmb3IodmFyIE49MDtOPEQ7TisrKXRoaXMud29yZHNbTl09NjcxMDg4''@;'; put 'put ''NjMmfnRoaXMud29yZHNbTl07cmV0dXJuIEg+MCYmKHRoaXMud29yZHNbTl09fnRoaXMud29yZHNbTl0mNjcxMDg4NjM+PjI2LUgpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxNLnByb3RvdHlwZS5zZXRu''@;'; put 'put ''PWZ1bmN0aW9uKGIsRCl7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBIPWIvMjZ8MCxOPWIlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09RD90aGlzLndvcmRzW0hdfDE8PE46dGhpcy53b3Jkc1tIXSZ+KDE8PE4pLHRoaXMuc3RyaXAoKX0sTS5wcm90''@;'; put 'put ''b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgRCxILE47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYw''@;'; put 'put ''IT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhIPXRoaXMsTj1iKTooSD1iLE49dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNb''@;'; put 'put ''Q109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrKDB8Ti53b3Jkc1tDXSkrZyksZz1EPj4+MjY7Zm9yKDswIT09ZyYmQzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09''@;'; put 'put ''Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3IoO0M8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109SC53b3Jkc1tDXTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciBEO3JldHVybiAwIT09Yi5u''@;'; put 'put ''ZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCxEPXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEsRCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsRD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsRCk6dGhpcy5sZW5n''@;'; put 'put ''dGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LE0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgRD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSxELl9ub3JtU2ln''@;'; put 'put ''bigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBOLGcsSD10aGlzLmNtcChiKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhp''@;'; put 'put ''cy53b3Jkc1swXT0wLHRoaXM7SD4wPyhOPXRoaXMsZz1iKTooTj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSktKDB8Zy53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtmb3IoOzAhPT1DJiZTPE4ubGVu''@;'; put 'put ''Z3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7aWYoMD09PUMmJlM8Ti5sZW5ndGgmJk4hPT10aGlzKWZvcig7UzxOLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1OLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0''@;'; put 'put ''aGlzLmxlbmd0aCxTKSxOIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgQj1mdW5jdGlvbihiLEQsSCl7dmFyIHYscCx3LE49Yi53b3JkcyxnPUQud29yZHMs''@;'; put 'put ''Qz1ILndvcmRzLFM9MCxKPTB8TlswXSxuZT04MTkxJkosZGU9Sj4+PjEzLGZlPTB8TlsxXSx4ZT04MTkxJmZlLExlPWZlPj4+MTMsRmU9MHxOWzJdLE9lPTgxOTEmRmUsQmU9RmU+Pj4xMyxXZT0wfE5bM10sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLEplPTB8Tls0XSxsdD04MTkxJkplLFBlPUpl''@;'; put 'put ''Pj4+MTMsYmU9MHxOWzVdLEFlPTgxOTEmYmUsVGU9YmU+Pj4xMyxxZT0wfE5bNl0sWGU9ODE5MSZxZSxVZT1xZT4+PjEzLGh0PTB8Tls3XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxOWzhdLGl0PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfE5bOV0sSHQ9ODE5MSZNdCxQdD1NdD4+PjEz''@;'; put 'put ''LG9uPTB8Z1swXSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49MHxnWzFdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywkbj0wfGdbMl0sTm49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8Z1szXSxobj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHxnWzRdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4xMyx2bj0w''@;'; put 'put ''fGdbNV0scnQ9ODE5MSZ2bixJdD12bj4+PjEzLEp0PTB8Z1s2XSxEdD04MTkxJkp0LHB0PUp0Pj4+MTMsWXQ9MHxnWzddLExuPTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfGdbOF0seG49ODE5MSZ5bixzbj15bj4+PjEzLEJuPTB8Z1s5XSxPbj04MTkxJkJuLCR0PUJuPj4+MTM7SC5uZWdhdGl2''@;'; put 'put ''ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIEZuPShTKyh2PU1hdGguaW11bChuZSxDbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmltdWwoZGUsQ24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkrKHA+Pj4xMyl8MCkr''@;'; put 'put ''KEZuPj4+MjYpfDAsRm4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHhlLENuKSxwPShwPU1hdGguaW11bCh4ZSxVdCkpK01hdGguaW11bChMZSxDbil8MCx3PU1hdGguaW11bChMZSxVdCk7dmFyIG5pPShTKyh2PXYrTWF0aC5pbXVsKG5lLFduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwobmUsZW4pfDApK01hdGguaW11bChkZSxXbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxlbil8MCkrKHA+Pj4xMyl8MCkrKG5pPj4+MjYpfDAsbmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE9lLENuKSxwPShwPU1hdGguaW11bChPZSxVdCkpK01hdGguaW11bChCZSxDbil8''@;'; put 'put ''MCx3PU1hdGguaW11bChCZSxVdCksdj12K01hdGguaW11bCh4ZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwoTGUsV24pfDAsdz13K01hdGguaW11bChMZSxlbil8MDt2YXIgbG49KFMrKHY9ditNYXRoLmltdWwobmUsTm4pfDApfDApKygoODE5MSYocD0ocD1w''@;'; put 'put ''K01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGRlLE5uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGZ0KXwwKSsocD4+PjEzKXwwKSsobG4+Pj4yNil8MCxsbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoS2UsQ24pLHA9KHA9TWF0aC5pbXVsKEtlLFV0KSkrTWF0aC5pbXVs''@;'; put 'put ''KFllLENuKXwwLHc9TWF0aC5pbXVsKFllLFV0KSx2PXYrTWF0aC5pbXVsKE9lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChCZSxXbil8MCx3PXcrTWF0aC5pbXVsKEJlLGVuKXwwLHY9ditNYXRoLmltdWwoeGUsTm4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxm''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKExlLE5uKXwwLHc9dytNYXRoLmltdWwoTGUsZnQpfDA7dmFyIGpuPShTKyh2PXYrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsd3QpfDApK01hdGguaW11bChkZSxobil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11''@;'; put 'put ''bChkZSx3dCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGx0LENuKSxwPShwPU1hdGguaW11bChsdCxVdCkpK01hdGguaW11bChQZSxDbil8MCx3PU1hdGguaW11bChQZSxVdCksdj12K01hdGguaW11bChLZSxXbil8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKEtlLGVuKXwwKStNYXRoLmltdWwoWWUsV24pfDAsdz13K01hdGguaW11bChZZSxlbil8MCx2PXYrTWF0aC5pbXVsKE9lLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChCZSxObil8MCx3PXcrTWF0aC5pbXVsKEJlLGZ0KXwwLHY9ditNYXRoLmltdWwoeGUs''@;'; put 'put ''aG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKExlLGhuKXwwLHc9dytNYXRoLmltdWwoTGUsd3QpfDA7dmFyIHFyPShTKyh2PXYrTWF0aC5pbXVsKG5lLF90KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTnQpfDApK01hdGguaW11bChkZSxfdCl8''@;'; put 'put ''MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxOdCl8MCkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEFlLENuKSxwPShwPU1hdGguaW11bChBZSxVdCkpK01hdGguaW11bChUZSxDbil8MCx3PU1hdGguaW11bChUZSxVdCksdj12K01hdGgu''@;'; put 'put ''aW11bChsdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGVuKXwwKStNYXRoLmltdWwoUGUsV24pfDAsdz13K01hdGguaW11bChQZSxlbil8MCx2PXYrTWF0aC5pbXVsKEtlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxObil8MCx3PXcrTWF0aC5pbXVs''@;'; put 'put ''KFllLGZ0KXwwLHY9ditNYXRoLmltdWwoT2UsaG4pfDAscD0ocD1wK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKEJlLGhuKXwwLHc9dytNYXRoLmltdWwoQmUsd3QpfDAsdj12K01hdGguaW11bCh4ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLE50KXwwKStNYXRoLmltdWwoTGUs''@;'; put 'put ''X3QpfDAsdz13K01hdGguaW11bChMZSxOdCl8MDt2YXIgZ2k9KFMrKHY9ditNYXRoLmltdWwobmUscnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxJdCl8MCkrTWF0aC5pbXVsKGRlLHJ0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLEl0KXwwKSsocD4+PjEz''@;'; put 'put ''KXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWGUsQ24pLHA9KHA9TWF0aC5pbXVsKFhlLFV0KSkrTWF0aC5pbXVsKFVlLENuKXwwLHc9TWF0aC5pbXVsKFVlLFV0KSx2PXYrTWF0aC5pbXVsKEFlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZW4pfDApK01hdGgu''@;'; put 'put ''aW11bChUZSxXbil8MCx3PXcrTWF0aC5pbXVsKFRlLGVuKXwwLHY9ditNYXRoLmltdWwobHQsTm4pfDAscD0ocD1wK01hdGguaW11bChsdCxmdCl8MCkrTWF0aC5pbXVsKFBlLE5uKXwwLHc9dytNYXRoLmltdWwoUGUsZnQpfDAsdj12K01hdGguaW11bChLZSxobil8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsdz13K01hdGguaW11bChZZSx3dCl8MCx2PXYrTWF0aC5pbXVsKE9lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11bChCZSxfdCl8MCx3PXcrTWF0aC5pbXVsKEJlLE50KXwwLHY9ditNYXRoLmltdWwoeGUs''@;'; put 'put ''cnQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxJdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwLHc9dytNYXRoLmltdWwoTGUsSXQpfDA7dmFyIHhyPShTKyh2PXYrTWF0aC5pbXVsKG5lLER0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGguaW11bChkZSxEdCl8''@;'; put 'put ''MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxwdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE1lLENuKSxwPShwPU1hdGguaW11bChNZSxVdCkpK01hdGguaW11bChEZSxDbil8MCx3PU1hdGguaW11bChEZSxVdCksdj12K01hdGgu''@;'; put 'put ''aW11bChYZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGVuKXwwKStNYXRoLmltdWwoVWUsV24pfDAsdz13K01hdGguaW11bChVZSxlbil8MCx2PXYrTWF0aC5pbXVsKEFlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxObil8MCx3PXcrTWF0aC5pbXVs''@;'; put 'put ''KFRlLGZ0KXwwLHY9ditNYXRoLmltdWwobHQsaG4pfDAscD0ocD1wK01hdGguaW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBlLGhuKXwwLHc9dytNYXRoLmltdWwoUGUsd3QpfDAsdj12K01hdGguaW11bChLZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE50KXwwKStNYXRoLmltdWwoWWUs''@;'; put 'put ''X3QpfDAsdz13K01hdGguaW11bChZZSxOdCl8MCx2PXYrTWF0aC5pbXVsKE9lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsSXQpfDApK01hdGguaW11bChCZSxydCl8MCx3PXcrTWF0aC5pbXVsKEJlLEl0KXwwLHY9ditNYXRoLmltdWwoeGUsRHQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxw''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKExlLER0KXwwLHc9dytNYXRoLmltdWwoTGUscHQpfDA7dmFyIFVpPShTKyh2PXYrTWF0aC5pbXVsKG5lLExuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChkZSxMbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11''@;'; put 'put ''bChkZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGl0LENuKSxwPShwPU1hdGguaW11bChpdCxVdCkpK01hdGguaW11bCh1dCxDbil8MCx3PU1hdGguaW11bCh1dCxVdCksdj12K01hdGguaW11bChNZSxXbil8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKE1lLGVuKXwwKStNYXRoLmltdWwoRGUsV24pfDAsdz13K01hdGguaW11bChEZSxlbil8MCx2PXYrTWF0aC5pbXVsKFhlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZnQpfDApK01hdGguaW11bChVZSxObil8MCx3PXcrTWF0aC5pbXVsKFVlLGZ0KXwwLHY9ditNYXRoLmltdWwoQWUs''@;'; put 'put ''aG4pfDAscD0ocD1wK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLHc9dytNYXRoLmltdWwoVGUsd3QpfDAsdj12K01hdGguaW11bChsdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsdz13K01hdGguaW11bChQZSxOdCl8''@;'; put 'put ''MCx2PXYrTWF0aC5pbXVsKEtlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsSXQpfDApK01hdGguaW11bChZZSxydCl8MCx3PXcrTWF0aC5pbXVsKFllLEl0KXwwLHY9ditNYXRoLmltdWwoT2UsRHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKEJlLER0KXwwLHc9''@;'; put 'put ''dytNYXRoLmltdWwoQmUscHQpfDAsdj12K01hdGguaW11bCh4ZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoTGUsTG4pfDAsdz13K01hdGguaW11bChMZSx6dCl8MDt2YXIgS3I9KFMrKHY9ditNYXRoLmltdWwobmUseG4pfDApfDApKygoODE5MSYocD0ocD1w''@;'; put 'put ''K01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGRlLHhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHNuKXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsQ24pLHA9KHA9TWF0aC5pbXVsKEh0LFV0KSkrTWF0aC5pbXVs''@;'; put 'put ''KFB0LENuKXwwLHc9TWF0aC5pbXVsKFB0LFV0KSx2PXYrTWF0aC5pbXVsKGl0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCh1dCxXbil8MCx3PXcrTWF0aC5pbXVsKHV0LGVuKXwwLHY9ditNYXRoLmltdWwoTWUsTm4pfDAscD0ocD1wK01hdGguaW11bChNZSxm''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKERlLE5uKXwwLHc9dytNYXRoLmltdWwoRGUsZnQpfDAsdj12K01hdGguaW11bChYZSxobil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAsdz13K01hdGguaW11bChVZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEFlLF90KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoQWUsTnQpfDApK01hdGguaW11bChUZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFRlLE50KXwwLHY9ditNYXRoLmltdWwobHQscnQpfDAscD0ocD1wK01hdGguaW11bChsdCxJdCl8MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLHc9dytNYXRoLmltdWwoUGUsSXQpfDAsdj12K01h''@;'; put 'put ''dGguaW11bChLZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsdz13K01hdGguaW11bChZZSxwdCl8MCx2PXYrTWF0aC5pbXVsKE9lLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChCZSxMbil8MCx3PXcrTWF0aC5p''@;'; put 'put ''bXVsKEJlLHp0KXwwLHY9ditNYXRoLmltdWwoeGUseG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKExlLHhuKXwwLHc9dytNYXRoLmltdWwoTGUsc24pfDA7dmFyIG5vPShTKyh2PXYrTWF0aC5pbXVsKG5lLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwobmUsJHQpfDApK01hdGguaW11bChkZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LFduKSxwPShwPU1hdGguaW11bChIdCxlbikpK01hdGguaW11bChQdCxXbil8''@;'; put 'put ''MCx3PU1hdGguaW11bChQdCxlbiksdj12K01hdGguaW11bChpdCxObil8MCxwPShwPXArTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwodXQsTm4pfDAsdz13K01hdGguaW11bCh1dCxmdCl8MCx2PXYrTWF0aC5pbXVsKE1lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsd3QpfDApK01h''@;'; put 'put ''dGguaW11bChEZSxobil8MCx3PXcrTWF0aC5pbXVsKERlLHd0KXwwLHY9ditNYXRoLmltdWwoWGUsX3QpfDAscD0ocD1wK01hdGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLHc9dytNYXRoLmltdWwoVWUsTnQpfDAsdj12K01hdGguaW11bChBZSxydCl8MCxwPShwPXArTWF0''@;'; put 'put ''aC5pbXVsKEFlLEl0KXwwKStNYXRoLmltdWwoVGUscnQpfDAsdz13K01hdGguaW11bChUZSxJdCl8MCx2PXYrTWF0aC5pbXVsKGx0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscHQpfDApK01hdGguaW11bChQZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFBlLHB0KXwwLHY9ditNYXRoLmltdWwo''@;'; put 'put ''S2UsTG4pfDAscD0ocD1wK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLExuKXwwLHc9dytNYXRoLmltdWwoWWUsenQpfDAsdj12K01hdGguaW11bChPZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoQmUseG4pfDAsdz13K01hdGguaW11bChCZSxz''@;'; put 'put ''bil8MDt2YXIgRnI9KFMrKHY9ditNYXRoLmltdWwoeGUsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh4ZSwkdCl8MCkrTWF0aC5pbXVsKExlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKExlLCR0KXwwKSsocD4+PjEzKXwwKSsoRnI+Pj4yNil8MCxGciY9Njcx''@;'; put 'put ''MDg4NjMsdj1NYXRoLmltdWwoSHQsTm4pLHA9KHA9TWF0aC5pbXVsKEh0LGZ0KSkrTWF0aC5pbXVsKFB0LE5uKXwwLHc9TWF0aC5pbXVsKFB0LGZ0KSx2PXYrTWF0aC5pbXVsKGl0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsd3QpfDApK01hdGguaW11bCh1dCxobil8MCx3PXcrTWF0aC5p''@;'; put 'put ''bXVsKHV0LHd0KXwwLHY9ditNYXRoLmltdWwoTWUsX3QpfDAscD0ocD1wK01hdGguaW11bChNZSxOdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLHc9dytNYXRoLmltdWwoRGUsTnQpfDAsdj12K01hdGguaW11bChYZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''VWUscnQpfDAsdz13K01hdGguaW11bChVZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEFlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUscHQpfDApK01hdGguaW11bChUZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFRlLHB0KXwwLHY9ditNYXRoLmltdWwobHQsTG4pfDAscD0ocD1wK01hdGguaW11bChs''@;'; put 'put ''dCx6dCl8MCkrTWF0aC5pbXVsKFBlLExuKXwwLHc9dytNYXRoLmltdWwoUGUsenQpfDAsdj12K01hdGguaW11bChLZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsdz13K01hdGguaW11bChZZSxzbil8MDt2YXIgcWk9KFMrKHY9ditNYXRoLmlt''@;'; put 'put ''dWwoT2UsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKEJlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKEJlLCR0KXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsaG4pLHA9''@;'; put 'put ''KHA9TWF0aC5pbXVsKEh0LHd0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLHc9TWF0aC5pbXVsKFB0LHd0KSx2PXYrTWF0aC5pbXVsKGl0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsTnQpfDApK01hdGguaW11bCh1dCxfdCl8MCx3PXcrTWF0aC5pbXVsKHV0LE50KXwwLHY9ditNYXRoLmltdWwo''@;'; put 'put ''TWUscnQpfDAscD0ocD1wK01hdGguaW11bChNZSxJdCl8MCkrTWF0aC5pbXVsKERlLHJ0KXwwLHc9dytNYXRoLmltdWwoRGUsSXQpfDAsdj12K01hdGguaW11bChYZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsdz13K01hdGguaW11bChVZSxw''@;'; put 'put ''dCl8MCx2PXYrTWF0aC5pbXVsKEFlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsenQpfDApK01hdGguaW11bChUZSxMbil8MCx3PXcrTWF0aC5pbXVsKFRlLHp0KXwwLHY9ditNYXRoLmltdWwobHQseG4pfDAscD0ocD1wK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXww''@;'; put 'put ''LHc9dytNYXRoLmltdWwoUGUsc24pfDA7dmFyIEppPShTKyh2PXYrTWF0aC5pbXVsKEtlLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChZZSwkdCl8MCkrKHA+Pj4xMyl8MCkr''@;'; put 'put ''KEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LF90KSxwPShwPU1hdGguaW11bChIdCxOdCkpK01hdGguaW11bChQdCxfdCl8MCx3PU1hdGguaW11bChQdCxOdCksdj12K01hdGguaW11bChpdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LEl0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''dXQscnQpfDAsdz13K01hdGguaW11bCh1dCxJdCl8MCx2PXYrTWF0aC5pbXVsKE1lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCx3PXcrTWF0aC5pbXVsKERlLHB0KXwwLHY9ditNYXRoLmltdWwoWGUsTG4pfDAscD0ocD1wK01hdGguaW11bChY''@;'; put 'put ''ZSx6dCl8MCkrTWF0aC5pbXVsKFVlLExuKXwwLHc9dytNYXRoLmltdWwoVWUsenQpfDAsdj12K01hdGguaW11bChBZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmltdWwoVGUseG4pfDAsdz13K01hdGguaW11bChUZSxzbil8MDt2YXIgYW89KFMrKHY9ditNYXRoLmlt''@;'; put 'put ''dWwobHQsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChsdCwkdCl8MCkrTWF0aC5pbXVsKFBlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFBlLCR0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQscnQpLHA9''@;'; put 'put ''KHA9TWF0aC5pbXVsKEh0LEl0KSkrTWF0aC5pbXVsKFB0LHJ0KXwwLHc9TWF0aC5pbXVsKFB0LEl0KSx2PXYrTWF0aC5pbXVsKGl0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQscHQpfDApK01hdGguaW11bCh1dCxEdCl8MCx3PXcrTWF0aC5pbXVsKHV0LHB0KXwwLHY9ditNYXRoLmltdWwo''@;'; put 'put ''TWUsTG4pfDAscD0ocD1wK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKERlLExuKXwwLHc9dytNYXRoLmltdWwoRGUsenQpfDAsdj12K01hdGguaW11bChYZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsdz13K01hdGguaW11bChVZSxz''@;'; put 'put ''bil8MDt2YXIgcm89KFMrKHY9ditNYXRoLmltdWwoQWUsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFRlLCR0KXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9Njcx''@;'; put 'put ''MDg4NjMsdj1NYXRoLmltdWwoSHQsRHQpLHA9KHA9TWF0aC5pbXVsKEh0LHB0KSkrTWF0aC5pbXVsKFB0LER0KXwwLHc9TWF0aC5pbXVsKFB0LHB0KSx2PXYrTWF0aC5pbXVsKGl0LExuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCh1dCxMbil8MCx3PXcrTWF0aC5p''@;'; put 'put ''bXVsKHV0LHp0KXwwLHY9ditNYXRoLmltdWwoTWUseG4pfDAscD0ocD1wK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXwwLHc9dytNYXRoLmltdWwoRGUsc24pfDA7dmFyIGlvPShTKyh2PXYrTWF0aC5pbXVsKFhlLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoWGUsJHQpfDApK01hdGguaW11bChVZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChVZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LExuKSxwPShwPU1hdGguaW11bChIdCx6dCkpK01hdGguaW11bChQdCxMbil8''@;'; put 'put ''MCx3PU1hdGguaW11bChQdCx6dCksdj12K01hdGguaW11bChpdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwodXQseG4pfDAsdz13K01hdGguaW11bCh1dCxzbil8MDt2YXIgR2k9KFMrKHY9ditNYXRoLmltdWwoTWUsT24pfDApfDApKygoODE5MSYocD0ocD1w''@;'; put 'put ''K01hdGguaW11bChNZSwkdCl8MCkrTWF0aC5pbXVsKERlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKERlLCR0KXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQseG4pLHA9KHA9TWF0aC5pbXVsKEh0LHNuKSkrTWF0aC5pbXVs''@;'; put 'put ''KFB0LHhuKXwwLHc9TWF0aC5pbXVsKFB0LHNuKTt2YXIgaG89KFMrKHY9ditNYXRoLmltdWwoaXQsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChpdCwkdCl8MCkrTWF0aC5pbXVsKHV0LE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKHV0LCR0KXwwKSsocD4+PjEz''@;'; put 'put ''KXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjM7dmFyIHlyPShTKyh2PU1hdGguaW11bChIdCxPbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSHQsJHQpKStNYXRoLmltdWwoUHQsT24pfDApKTw8MTMpfDA7cmV0dXJuIFM9KCh3PU1hdGguaW11bChQdCwkdCkpKyhwPj4+MTMpfDAp''@;'; put 'put ''Kyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxDWzBdPUZuLENbMV09bmksQ1syXT1sbixDWzNdPWpuLENbNF09cXIsQ1s1XT1naSxDWzZdPXhyLENbN109VWksQ1s4XT1LcixDWzldPW5vLENbMTBdPUZyLENbMTFdPXFpLENbMTJdPUppLENbMTNdPWFvLENbMTRdPXJvLENbMTVdPWlvLENbMTZd''@;'; put 'put ''PUdpLENbMTddPWhvLENbMThdPXlyLDAhPT1TJiYoQ1sxOV09UyxILmxlbmd0aCsrKSxIfTtmdW5jdGlvbiBYKEcsYixEKXtyZXR1cm4obmV3IFUpLm11bHAoRyxiLEQpfWZ1bmN0aW9uIFUoRyxiKXt0aGlzLng9Ryx0aGlzLnk9Yn1NYXRoLmltdWx8fChCPVYpLE0ucHJvdG90eXBlLm11bFRv''@;'; put 'put ''PWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gSD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWIubGVuZ3RoP0IodGhpcyxiLEQpOk48NjM/Vih0aGlzLGIsRCk6TjwxMDI0P2Z1bmN0aW9uIFkoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5l''@;'; put 'put ''Z2F0aXZlLEQubGVuZ3RoPUcubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgSD0wLE49MCxnPTA7ZzxELmxlbmd0aC0xO2crKyl7dmFyIEM9TjtOPTA7Zm9yKHZhciBTPTY3MTA4ODYzJkgsdj1NYXRoLm1pbihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLUcubGVuZ3RoKzEpO3A8PXY7cCsr''@;'; put 'put ''KXt2YXIgZGU9KDB8Ry53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxmZT02NzEwODg2MyZkZTtTPTY3MTA4ODYzJihmZT1mZStTfDApLE4rPShDPShDPUMrKGRlLzY3MTA4ODY0fDApfDApKyhmZT4+PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfUQud29yZHNbZ109UyxIPUMsQz1OfXJldHVy''@;'; put 'put ''biAwIT09SD9ELndvcmRzW2ddPUg6RC5sZW5ndGgtLSxELnN0cmlwKCl9KHRoaXMsYixEKTpYKHRoaXMsYixEKSxIfSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD1NLnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsTj0wO048YjtOKysp''@;'; put 'put ''RFtOXT10aGlzLnJldkJpbihOLEgsYik7cmV0dXJuIER9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLEQsSCl7aWYoMD09PWJ8fGI9PT1ILTEpcmV0dXJuIGI7Zm9yKHZhciBOPTAsZz0wO2c8RDtnKyspTnw9KDEmYik8PEQtZy0xLGI+Pj0xO3JldHVybiBOfSxVLnByb3RvdHlwZS5w''@;'; put 'put ''ZXJtdXRlPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXtmb3IodmFyIFM9MDtTPEM7UysrKU5bU109RFtiW1NdXSxnW1NdPUhbYltTXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7dGhpcy5wZXJtdXRlKEMsYixELEgsTixnKTtmb3IodmFyIFM9MTtTPGc7Uzw8''@;'; put 'put ''PTEpZm9yKHZhciB2PVM8PDEscD1NYXRoLmNvcygyKk1hdGguUEkvdiksdz1NYXRoLnNpbigyKk1hdGguUEkvdiksSj0wO0o8ZztKKz12KWZvcih2YXIgbmU9cCxkZT13LGZlPTA7ZmU8UztmZSsrKXt2YXIgeGU9SFtKK2ZlXSxMZT1OW0orZmVdLEZlPUhbSitmZStTXSxPZT1OW0orZmUrU10s''@;'; put 'put ''QmU9bmUqRmUtZGUqT2U7T2U9bmUqT2UrZGUqRmUsSFtKK2ZlXT14ZSsoRmU9QmUpLE5bSitmZV09TGUrT2UsSFtKK2ZlK1NdPXhlLUZlLE5bSitmZStTXT1MZS1PZSxmZSE9PXYmJihCZT1wKm5lLXcqZGUsZGU9cCpkZSt3Km5lLG5lPUJlKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1''@;'; put 'put ''bmN0aW9uKGIsRCl7dmFyIEg9MXxNYXRoLm1heChELGIpLE49MSZILGc9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlnKys7cmV0dXJuIDE8PGcrMStOfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYixELEgpe2lmKCEoSDw9MSkpZm9yKHZhciBOPTA7TjxILzI7TisrKXt2YXIgZz1i''@;'; put 'put ''W05dO2JbTl09YltILU4tMV0sYltILU4tMV09ZyxnPURbTl0sRFtOXT0tRFtILU4tMV0sRFtILU4tMV09LWd9fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9MCxOPTA7TjxELzI7TisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKk4rMV0vRCkr''@;'; put 'put ''TWF0aC5yb3VuZChiWzIqTl0vRCkrSDtiW05dPTY3MTA4ODYzJmcsSD1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIsRCxILE4pe2Zvcih2YXIgZz0wLEM9MDtDPEQ7QysrKUhbMipDXT04MTkxJihnKz0wfGJbQ10p''@;'; put 'put ''LEhbMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9MipEO0M8TjsrK0MpSFtDXT0wO20oMD09PWcpLG0oMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9MDtIPGI7SCsrKURbSF09MDtyZXR1cm4gRH0s''@;'; put 'put ''VS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLEQsSCl7dmFyIE49Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLEQubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChOKSxDPXRoaXMuc3R1YihOKSxTPW5ldyBBcnJheShOKSx2PW5ldyBBcnJheShOKSxwPW5ldyBBcnJheShOKSx3PW5ldyBBcnJh''@;'; put 'put ''eShOKSxKPW5ldyBBcnJheShOKSxuZT1uZXcgQXJyYXkoTiksZGU9SC53b3JkcztkZS5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxTLE4pLHRoaXMuY29udmVydDEzYihELndvcmRzLEQubGVuZ3RoLHcsTiksdGhpcy50cmFuc2Zvcm0oUyxDLHYscCxOLGcpLHRo''@;'; put 'put ''aXMudHJhbnNmb3JtKHcsQyxKLG5lLE4sZyk7Zm9yKHZhciBmZT0wO2ZlPE47ZmUrKyl7dmFyIHhlPXZbZmVdKkpbZmVdLXBbZmVdKm5lW2ZlXTtwW2ZlXT12W2ZlXSpuZVtmZV0rcFtmZV0qSltmZV0sdltmZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHYscCxOKSx0aGlzLnRyYW5zZm9y''@;'; put 'put ''bSh2LHAsZGUsQyxOLGcpLHRoaXMuY29uanVnYXRlKGRlLEMsTiksdGhpcy5ub3JtYWxpemUxM2IoZGUsTiksSC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9Yi5sZW5ndGgrRC5sZW5ndGgsSC5zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFy''@;'; put 'put ''IEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRvKGIsRCl9LE0ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2Iu''@;'; put 'put ''bGVuZ3RoKSxYKHRoaXMsYixEKX0sTS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGIsdGhpcyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpO2Zvcih2YXIgRD0wLEg9''@;'; put 'put ''MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkqYixnPSg2NzEwODg2MyZOKSsoNjcxMDg4NjMmRCk7RD4+PTI2LEQrPU4vNjcxMDg4NjR8MCxEKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09RCYmKHRoaXMud29yZHNbSF09RCx0''@;'; put 'put ''aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oYil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciBEPWZ1bmN0aW9uIGooRyl7Zm9yKHZhciBiPW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxEPTA7RDxiLmxlbmd0aDtEKyspe3ZhciBOPUQlMjY7YltEXT0oRy53b3Jkc1tELzI2fDBdJjE8PE4p''@;'; put 'put ''Pj4+Tn1yZXR1cm4gYn0oYik7aWYoMD09PUQubGVuZ3RoKXJldHVybiBuZXcgTSgxKTtmb3IodmFyIEg9dGhpcyxOPTA7TjxELmxlbmd0aCYmMD09PURbTl07TisrLEg9SC5zcXIoKSk7aWYoKytOPEQubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO048RC5sZW5ndGg7TisrLGc9Zy5zcXIoKSkw''@;'; put 'put ''IT09RFtOXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSxNLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLEQ9YiUyNixIPShiLUQpLzI2LE49NjcxMDg4NjM+Pj4yNi1EPDwyNi1EO2lmKDAhPT1EKXt2YXIgQz0wO2ZvcihnPTA7''@;'; put 'put ''Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBTPXRoaXMud29yZHNbZ10mTjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLVM8PER8QyxDPVM+Pj4yNi1EfUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0p''@;'; put 'put ''dGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNo''@;'; put 'put ''bG4oYil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLEQsSCl7dmFyIE47bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApLE49RD8oRC1EJTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8yNix0aGlzLmxlbmd0aCksUz02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcs''@;'; put 'put ''dj1IO2lmKE4tPUMsTj1NYXRoLm1heCgwLE4pLHYpe2Zvcih2YXIgcD0wO3A8QztwKyspdi53b3Jkc1twXT10aGlzLndvcmRzW3BdO3YubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNb''@;'; put 'put ''cF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHc9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09d3x8cD49Tik7cC0tKXt2YXIgSj0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT13PDwyNi1nfEo+Pj5nLHc9SiZTfXJl''@;'; put 'put ''dHVybiB2JiYwIT09dyYmKHYud29yZHNbdi5sZW5ndGgrK109dyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0''@;'; put 'put ''aGlzLml1c2hybihiLEQsSCl9LE0ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiKX0sTS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LE0ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24o''@;'; put 'put ''Yil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sTS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LE0ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9''@;'; put 'put ''KGItRCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PEQpKX0sTS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUs''@;'; put 'put ''ImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1EJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PUQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+''@;'; put 'put ''PkQ8PEQpLHRoaXMuc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGIpfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwP3RoaXMu''@;'; put 'put ''aXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9Yjtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPj02NzEwODg2NDtEKyspdGhpcy53b3Jkc1tEXS09NjcxMDg4NjQsRD09PXRoaXMubGVu''@;'; put 'put ''Z3RoLTE/dGhpcy53b3Jkc1tEKzFdPTE6dGhpcy53b3Jkc1tEKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEQrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7aWYobSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjww''@;'; put 'put ''KXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRz''@;'; put 'put ''WzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF08MDtEKyspdGhpcy53b3Jkc1tEXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tEKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmFk''@;'; put 'put ''ZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihiKX0sTS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxNLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxNLnBy''@;'; put 'put ''b3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sTS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGIsRCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrSCk7dmFyIEMsUz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhp''@;'; put 'put ''cy53b3Jkc1tnK0hdKStTO3ZhciB2PSgwfGIud29yZHNbZ10pKkQ7Uz0oKEMtPTY3MTA4ODYzJnYpPj4yNiktKHYvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKVM9KEM9KDB8dGhpcy53b3Jkc1tnK0hdKStTKT4+MjYsdGhp''@;'; put 'put ''cy53b3Jkc1tnK0hdPTY3MTA4ODYzJkM7aWYoMD09PVMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PVMpLFM9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspUz0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrUyk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0xLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihIKSxOLml1c2hsbihIKSxDPTB8''@;'; put 'put ''Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsdj1OLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUQpeyhwPW5ldyBNKG51bGwpKS5sZW5ndGg9disxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIHc9MDt3PHAubGVuZ3RoO3crKylwLndvcmRzW3ddPTB9dmFyIEo9Ti5j''@;'; put 'put ''bG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsdik7MD09PUoubmVnYXRpdmUmJihOPUoscCYmKHAud29yZHNbdl09MSkpO2Zvcih2YXIgbmU9di0xO25lPj0wO25lLS0pe3ZhciBkZT02NzEwODg2NCooMHxOLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9y''@;'; put 'put ''KGRlPU1hdGgubWluKGRlL0N8MCw2NzEwODg2MyksTi5faXNobG5zdWJtdWwoZyxkZSxuZSk7MCE9PU4ubmVnYXRpdmU7KWRlLS0sTi5uZWdhdGl2ZT0wLE4uX2lzaGxuc3VibXVsKGcsMSxuZSksTi5pc1plcm8oKXx8KE4ubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT1kZSl9cmV0dXJu''@;'; put 'put ''IHAmJnAuc3RyaXAoKSxOLnN0cmlwKCksImRpdiIhPT1EJiYwIT09SCYmTi5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpOfX0sTS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSghYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBNKDApLG1vZDpu''@;'; put 'put ''ZXcgTSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIsRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2Ok4sbW9kOmd9''@;'; put 'put ''KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSxEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSx7ZGl2Ok4sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCksRCks''@;'; put 'put ''ImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgTSgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09RD97ZGl2OnRo''@;'; put 'put ''aXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1EP3tkaXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYixEKTt2''@;'; put 'put ''YXIgTixnLEN9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihi''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmRpdm1vZChiKTtpZihELm1vZC5pc1plcm8oKSlyZXR1cm4gRC5kaXY7dmFyIEg9MCE9PUQuZGl2Lm5lZ2F0aXZlP0QubW9kLmlzdWIoYik6RC5t''@;'; put 'put ''b2QsTj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPUguY21wKE4pO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz9ELmRpdjowIT09RC5kaXYubmVnYXRpdmU/RC5kaXYuaXN1Ym4oMSk6RC5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7''@;'; put 'put ''Zm9yKHZhciBEPSgxPDwyNiklYixIPTAsTj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKUg9KEQqSCsoMHx0aGlzLndvcmRzW05dKSklYjtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7''@;'; put 'put ''SC0tKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSs2NzEwODg2NCpEO3RoaXMud29yZHNbSF09Ti9ifDAsRD1OJWJ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxNLnByb3RvdHlwZS5lZ2NkPWZ1''@;'; put 'put ''bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9bmV3IE0oMCksUz1uZXcgTSgxKSx2PTA7RC5pc0V2''@;'; put 'put ''ZW4oKSYmSC5pc0V2ZW4oKTspRC5pdXNocm4oMSksSC5pdXNocm4oMSksKyt2O2Zvcih2YXIgcD1ILmNsb25lKCksdz1ELmNsb25lKCk7IUQuaXNaZXJvKCk7KXtmb3IodmFyIEo9MCxuZT0xOyEoRC53b3Jkc1swXSZuZSkmJko8MjY7KytKLG5lPDw9MSk7aWYoSj4wKWZvcihELml1c2hybihK''@;'; put 'put ''KTtKLS0gPjA7KShOLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihOLmlhZGQocCksZy5pc3ViKHcpKSxOLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIGRlPTAsZmU9MTshKEgud29yZHNbMF0mZmUpJiZkZTwyNjsrK2RlLGZlPDw9MSk7aWYoZGU+MClmb3IoSC5pdXNocm4oZGUpO2RlLS0g''@;'; put 'put ''PjA7KShDLmlzT2RkKCl8fFMuaXNPZGQoKSkmJihDLmlhZGQocCksUy5pc3ViKHcpKSxDLml1c2hybigxKSxTLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihDKSxnLmlzdWIoUykpOihILmlzdWIoRCksQy5pc3ViKE4pLFMuaXN1YihnKSl9cmV0dXJue2E6QyxiOlMs''@;'; put 'put ''Z2NkOkguaXVzaGxuKHYpfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBKLEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9''@;'; put 'put ''bmV3IE0oMCksQz1ILmNsb25lKCk7RC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBTPTAsdj0xOyEoRC53b3Jkc1swXSZ2KSYmUzwyNjsrK1Msdjw8PTEpO2lmKFM+MClmb3IoRC5pdXNocm4oUyk7Uy0tID4wOylOLmlzT2RkKCkmJk4uaWFkZChDKSxOLml1c2hybigxKTtmb3Io''@;'; put 'put ''dmFyIHA9MCx3PTE7IShILndvcmRzWzBdJncpJiZwPDI2OysrcCx3PDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKGcpKTooSC5pc3ViKEQpLGcuaXN1YihOKSl9''@;'; put 'put ''cmV0dXJuKEo9MD09PUQuY21wbigxKT9OOmcpLmNtcG4oMCk8MCYmSi5pYWRkKGIpLEp9LE0ucHJvdG90eXBlLmdjZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEQ9dGhpcy5jbG9uZSgpLEg9''@;'; put 'put ''Yi5jbG9uZSgpO0QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBOPTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtOKyspRC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0QuaXNFdmVuKCk7KUQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7''@;'; put 'put ''dmFyIGc9RC5jbXAoSCk7aWYoZzwwKXt2YXIgQz1EO0Q9SCxIPUN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztELmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKE4pfSxNLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxN''@;'; put 'put ''LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1sw''@;'; put 'put ''XSZifSxNLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYik7dmFyIEQ9YiUyNixIPShiLUQpLzI2LE49MTw8RDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9Tix0aGlzO2Zvcih2YXIgZz1OLEM9''@;'; put 'put ''SDswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPTB8dGhpcy53b3Jkc1tDXTtnPShTKz1nKT4+PjI2LHRoaXMud29yZHNbQ109UyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLmlzWmVybz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxNLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGIpe3ZhciBILEQ9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhRClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmRClyZXR1cm4gMTtpZih0aGlz''@;'; put 'put ''LnN0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtEJiYoYj0tYiksbShiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTj0wfHRoaXMud29yZHNbMF07SD1OPT09Yj8wOk48Yj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LE0ucHJvdG90eXBlLmNt''@;'; put 'put ''cD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBEPXRoaXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtRDpEfSxNLnByb3Rv''@;'; put 'put ''dHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49MHx0aGlzLndvcmRzW0hdLGc9MHxiLndvcmRzW0hdO2lm''@;'; put 'put ''KE4hPT1nKXtOPGc/RD0tMTpOPmcmJihEPTEpO2JyZWFrfX1yZXR1cm4gRH0sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5ndD1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5ndGVu''@;'; put 'put ''PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LE0ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24o''@;'; put 'put ''Yil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJu''@;'; put 'put ''IDA9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LE0ucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LE0ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBh''@;'; put 'put ''IG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQs''@;'; put 'put ''ImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LE0ucHJvdG90eXBlLmZvcmNlUmVkPWZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVk''@;'; put 'put ''IG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFN1Yj1m''@;'; put 'put ''dW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZE11bD1m''@;'; put 'put ''dW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQs''@;'; put 'put ''InJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLmltdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sTS5wcm90b3R5cGUu''@;'; put 'put ''cmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMu''@;'; put 'put ''cmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBlZShHLGIpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgTShiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0''@;'; put 'put ''aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUoKXtlZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG9lKCl7ZWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBzZSgpe2VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gaGUoKXtlZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKEcpe2lmKCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgRyl7dmFyIGI9TS5fcHJpbWUoRyk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSBtKEcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Ryx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoRyl7dWUuY2FsbCh0aGlzLEcp''@;'; put 'put ''LHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5f''@;'; put 'put ''aW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9ZWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Yj1uZXcgTShudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LGVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBILEQ9Yjtkb3t0aGlzLnNwbGl0KEQsdGhpcy50bXApLEg9KEQ9KEQ9dGhpcy5pbXVsSyhEKSkuaWFkZCh0aGlz''@;'; put 'put ''LnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgTj1IPHRoaXMubj8tMTpELnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PU4/KEQud29yZHNbMF09MCxELmxlbmd0aD0xKTpOPjA/RC5pc3ViKHRoaXMucCk6dm9pZCAwIT09RC5zdHJpcD9ELnN0cmlwKCk6RC5fc3RyaXAoKSxE''@;'; put 'put ''fSxlZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtiLml1c2hybih0aGlzLm4sMCxEKX0sZWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0sbGUodGUsZWUpLHRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD00''@;'; put 'put ''MTk0MzAzLE49TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8TjtnKyspRC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKEQubGVuZ3RoPU4sYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKEQud29yZHNbRC5sZW5ndGgr''@;'; put 'put ''K109QyZILGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBTPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShTJkgpPDw0fEM+Pj4yMixDPVN9Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9u''@;'; put 'put ''KGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MHxiLndvcmRzW0hdO2Iud29yZHNbSF09NjcxMDg4NjMmKEQrPTk3NypOKSxEPTY0Kk4rKEQvNjcxMDg4NjR8MCl9cmV0''@;'; put 'put ''dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5ndGgtLSksYn0sbGUob2UsZWUpLGxlKHNlLGVlKSxsZShoZSxlZSksaGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD0wLEg9MDtIPGIubGVu''@;'; put 'put ''Z3RoO0grKyl7dmFyIE49MTkqKDB8Yi53b3Jkc1tIXSkrRCxnPTY3MTA4ODYzJk47Tj4+Pj0yNixiLndvcmRzW0hdPWcsRD1OfXJldHVybiAwIT09RCYmKGIud29yZHNbYi5sZW5ndGgrK109RCksYn0sTS5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgRDtpZigi''@;'; put 'put ''azI1NiI9PT1iKUQ9bmV3IHRlO2Vsc2UgaWYoInAyMjQiPT09YilEPW5ldyBvZTtlbHNlIGlmKCJwMTkyIj09PWIpRD1uZXcgc2U7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrYik7RD1uZXcgaGV9cmV0dXJuIHFbYl09RCxEfSx1ZS5wcm90''@;'; put 'put ''b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLEQpe20oMD09KGIu''@;'; put 'put ''bmVnYXRpdmV8RC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCYmYi5yZWQ9PT1ELnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlz''@;'; put 'put ''LnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlw''@;'; put 'put ''ZS5hZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5hZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2''@;'; put 'put ''YXIgSD1iLmlhZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5zdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3Jj''@;'; put 'put ''ZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJp''@;'; put 'put ''ZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKEQpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLmltdWwoRCkpfSx1ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixE''@;'; put 'put ''KSx0aGlzLmltb2QoYi5tdWwoRCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7''@;'; put 'put ''aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBEPXRoaXMubS5hbmRsbigzKTtpZihtKEQlMj09MSksMz09PUQpe3ZhciBIPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coYixIKX1mb3IodmFyIE49dGhpcy5tLnN1Ym4oMSksZz0wOyFOLmlz''@;'; put 'put ''WmVybygpJiYwPT09Ti5hbmRsbigxKTspZysrLE4uaXVzaHJuKDEpO20oIU4uaXNaZXJvKCkpO3ZhciBDPW5ldyBNKDEpLnRvUmVkKHRoaXMpLFM9Qy5yZWROZWcoKSx2PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgTSgyKnAqcCkudG9S''@;'; put 'put ''ZWQodGhpcyk7MCE9PXRoaXMucG93KHAsdikuY21wKFMpOylwLnJlZElBZGQoUyk7Zm9yKHZhciB3PXRoaXMucG93KHAsTiksSj10aGlzLnBvdyhiLE4uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGIsTiksZGU9ZzswIT09bmUuY21wKEMpOyl7Zm9yKHZhciBmZT1uZSx4ZT0wOzAh''@;'; put 'put ''PT1mZS5jbXAoQyk7eGUrKylmZT1mZS5yZWRTcXIoKTttKHhlPGRlKTt2YXIgTGU9dGhpcy5wb3codyxuZXcgTSgxKS5pdXNobG4oZGUteGUtMSkpO0o9Si5yZWRNdWwoTGUpLHc9TGUucmVkU3FyKCksbmU9bmUucmVkTXVsKHcpLGRlPXhlfXJldHVybiBKfSx1ZS5wcm90b3R5cGUuaW52bT1m''@;'; put 'put ''dW5jdGlvbihiKXt2YXIgRD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09RC5uZWdhdGl2ZT8oRC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChEKS5yZWROZWcoKSk6dGhpcy5pbW9kKEQpfSx1ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIsRCl7aWYoRC5pc1plcm8oKSlyZXR1cm4gbmV3IE0o''@;'; put 'put ''MSkudG9SZWQodGhpcyk7aWYoMD09PUQuY21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBOPW5ldyBBcnJheSgxNik7TlswXT1uZXcgTSgxKS50b1JlZCh0aGlzKSxOWzFdPWI7Zm9yKHZhciBnPTI7ZzxOLmxlbmd0aDtnKyspTltnXT10aGlzLm11bChOW2ctMV0sYik7dmFyIEM9TlswXSxT''@;'; put 'put ''PTAsdj0wLHA9RC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPUQubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgdz1ELndvcmRzW2ddLEo9cC0xO0o+PTA7Si0tKXt2YXIgbmU9dz4+SiYxO0MhPT1OWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PW5lfHwwIT09Uz8oUzw8PTEs''@;'; put 'put ''U3w9bmUsKDQ9PSsrdnx8MD09PWcmJjA9PT1KKSYmKEM9dGhpcy5tdWwoQyxOW1NdKSx2PTAsUz0wKSk6dj0wfXA9MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIEQ9Yi51bW9kKHRoaXMubSk7cmV0dXJuIEQ9PT1iP0QuY2xvbmUoKTpEfSx1ZS5w''@;'; put 'put ''cm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9Yi5jbG9uZSgpO3JldHVybiBELnJlZD1udWxsLER9LE0ubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxsZShjZSx1ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''bW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiBELnJlZD1udWxsLER9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8''@;'; put 'put ''RC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgSD1iLmltdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3Jl''@;'; put 'put ''dHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKTt2YXIgSD1iLm11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIo''@;'; put 'put ''dGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChh''@;'; put 'put ''dCksdGhpcyl9LDk2MzYyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjY5OCkseD1GKDc1ODI5KSxtPUYoMzk3MDYpLGxlPUYoOTc5NjUpLE09Rig4NjQyMCk7ZnVuY3Rpb24gTyhSKXtNLmNhbGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1SfWFlKE8sTSksTy5wcm90''@;'; put 'put ''b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihSKXt0aGlzLl9oYXNoLnVwZGF0ZShSKX0sTy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LGF0LmV4cG9ydHM9ZnVuY3Rpb24oeil7cmV0dXJuIm1kNSI9PT0oej16LnRvTG93ZXJDYXNlKCkpP25l''@;'; put 'put ''dyB4OiJybWQxNjAiPT09enx8InJpcGVtZDE2MCI9PT16P25ldyBtOm5ldyBPKGxlKHopKX19LDg3NTg4OihhdCxJZSxGKT0+e3ZhciBhZT1GKDc1ODI5KTthdC5leHBvcnRzPWZ1bmN0aW9uKHgpe3JldHVybihuZXcgYWUpLnVwZGF0ZSh4KS5kaWdlc3QoKX19LDg1ODI1OihhdCxJZSxGKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjY5OCkseD1GKDk1OTIyKSxtPUYoODY0MjApLGxlPUYoODQzKS5CdWZmZXIsTT1GKDg3NTg4KSxPPUYoMzk3MDYpLFI9Rig5Nzk2NSksej1sZS5hbGxvYygxMjgpO2Z1bmN0aW9uIEsoSSxrKXttLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBrJiYoaz1sZS5mcm9tKGspKTt2YXIgRT0ic2hhNTEyIj09PUl8fCJzaGEzODQiPT09ST8xMjg6NjQ7dGhpcy5fYWxnPUksdGhpcy5fa2V5PWssay5sZW5ndGg+RT9rPSgicm1kMTYwIj09PUk/bmV3IE86UihJKSkudXBkYXRlKGspLmRpZ2VzdCgpOmsubGVuZ3RoPEUmJihrPWxl''@;'; put 'put ''LmNvbmNhdChbayx6XSxFKSk7Zm9yKHZhciBWPXRoaXMuX2lwYWQ9bGUuYWxsb2NVbnNhZmUoRSksQj10aGlzLl9vcGFkPWxlLmFsbG9jVW5zYWZlKEUpLFk9MDtZPEU7WSsrKVZbWV09NTRea1tZXSxCW1ldPTkyXmtbWV07dGhpcy5faGFzaD0icm1kMTYwIj09PUk/bmV3IE86UihJKSx0aGlz''@;'; put 'put ''Ll9oYXNoLnVwZGF0ZShWKX1hZShLLG0pLEsucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSSl7dGhpcy5faGFzaC51cGRhdGUoSSl9LEsucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBJPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25l''@;'; put 'put ''dyBPOlIodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShJKS5kaWdlc3QoKX0sYXQuZXhwb3J0cz1mdW5jdGlvbihrLEUpe3JldHVybiJybWQxNjAiPT09KGs9ay50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1rP25ldyBLKCJybWQxNjAiLEUpOiJtZDUiPT09az9u''@;'; put 'put ''ZXcgeChNLEUpOm5ldyBLKGssRSl9fSw5NTkyMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjY2OTgpLHg9Rig4NDMpLkJ1ZmZlcixtPUYoODY0MjApLGxlPXguYWxsb2MoMTI4KSxNPTY0O2Z1bmN0aW9uIE8oUix6KXttLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiB6JiYoej14LmZyb20oeikpLHRoaXMuX2FsZz1SLHRoaXMuX2tleT16LHoubGVuZ3RoPk0/ej1SKHopOnoubGVuZ3RoPE0mJih6PXguY29uY2F0KFt6LGxlXSxNKSk7Zm9yKHZhciBLPXRoaXMuX2lwYWQ9eC5hbGxvY1Vuc2FmZShNKSxJPXRoaXMuX29wYWQ9eC5hbGxvY1Vuc2Fm''@;'; put 'put ''ZShNKSxrPTA7azxNO2srKylLW2tdPTU0Xnpba10sSVtrXT05Ml56W2tdO3RoaXMuX2hhc2g9W0tdfWFlKE8sbSksTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihSKXt0aGlzLl9oYXNoLnB1c2goUil9LE8ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBSPXRoaXMuX2FsZyh4''@;'; put 'put ''LmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyh4LmNvbmNhdChbdGhpcy5fb3BhZCxSXSkpfSxhdC5leHBvcnRzPU99LDc3OTAzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjtJZS5yYW5kb21CeXRlcz1JZS5ybmc9SWUucHNldWRvUmFuZG9tQnl0ZXM9SWUucHJuZz1GKDQ0''@;'; put 'put ''MDE5KSxJZS5jcmVhdGVIYXNoPUllLkhhc2g9Rig5NjM2MiksSWUuY3JlYXRlSG1hYz1JZS5IbWFjPUYoODU4MjUpO3ZhciBhZT1GKDgxNjk5KSx4PU9iamVjdC5rZXlzKGFlKSxtPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNv''@;'; put 'put ''bmNhdCh4KTtJZS5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbX07dmFyIGxlPUYoNTcxMDApO0llLnBia2RmMj1sZS5wYmtkZjIsSWUucGJrZGYyU3luYz1sZS5wYmtkZjJTeW5jO3ZhciBNPUYoMjU2MDApO0llLkNpcGhlcj1NLkNpcGhlcixJZS5jcmVhdGVDaXBoZXI9TS5jcmVhdGVD''@;'; put 'put ''aXBoZXIsSWUuQ2lwaGVyaXY9TS5DaXBoZXJpdixJZS5jcmVhdGVDaXBoZXJpdj1NLmNyZWF0ZUNpcGhlcml2LEllLkRlY2lwaGVyPU0uRGVjaXBoZXIsSWUuY3JlYXRlRGVjaXBoZXI9TS5jcmVhdGVEZWNpcGhlcixJZS5EZWNpcGhlcml2PU0uRGVjaXBoZXJpdixJZS5jcmVhdGVEZWNpcGhl''@;'; put 'put ''cml2PU0uY3JlYXRlRGVjaXBoZXJpdixJZS5nZXRDaXBoZXJzPU0uZ2V0Q2lwaGVycyxJZS5saXN0Q2lwaGVycz1NLmxpc3RDaXBoZXJzO3ZhciBPPUYoNDUxNDQpO0llLkRpZmZpZUhlbGxtYW5Hcm91cD1PLkRpZmZpZUhlbGxtYW5Hcm91cCxJZS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9''@;'; put 'put ''Ty5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsSWUuZ2V0RGlmZmllSGVsbG1hbj1PLmdldERpZmZpZUhlbGxtYW4sSWUuY3JlYXRlRGlmZmllSGVsbG1hbj1PLmNyZWF0ZURpZmZpZUhlbGxtYW4sSWUuRGlmZmllSGVsbG1hbj1PLkRpZmZpZUhlbGxtYW47dmFyIFI9RigyNzY4Nik7SWUuY3Jl''@;'; put 'put ''YXRlU2lnbj1SLmNyZWF0ZVNpZ24sSWUuU2lnbj1SLlNpZ24sSWUuY3JlYXRlVmVyaWZ5PVIuY3JlYXRlVmVyaWZ5LEllLlZlcmlmeT1SLlZlcmlmeSxJZS5jcmVhdGVFQ0RIPUYoMzg4NDApO3ZhciB6PUYoMjcwNTApO0llLnB1YmxpY0VuY3J5cHQ9ei5wdWJsaWNFbmNyeXB0LEllLnByaXZh''@;'; put 'put ''dGVFbmNyeXB0PXoucHJpdmF0ZUVuY3J5cHQsSWUucHVibGljRGVjcnlwdD16LnB1YmxpY0RlY3J5cHQsSWUucHJpdmF0ZURlY3J5cHQ9ei5wcml2YXRlRGVjcnlwdDt2YXIgSz1GKDYxMjM3KTtJZS5yYW5kb21GaWxsPUsucmFuZG9tRmlsbCxJZS5yYW5kb21GaWxsU3luYz1LLnJhbmRvbUZp''@;'; put 'put ''bGxTeW5jLEllLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFsic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCJ3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cyIsImh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG8tYnJvd3Nl''@;'; put 'put ''cmlmeS9jcnlwdG8tYnJvd3NlcmlmeSJdLmpvaW4oIlxuIikpfSxJZS5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBO''@;'; put 'put ''X0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJT''@;'; put 'put ''SU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9fSwxMDAxMjpmdW5jdGlvbihhdCxJZSxGKXt2YXIgYWU7YXQuZXhwb3J0cz0oYWU9YWV8fGZ1bmN0aW9uKHgsbSl7dmFyIGxlO2lmKHR5cGVvZiB3aW5kb3c8''@;'; put 'put ''InUiJiZ3aW5kb3cuY3J5cHRvJiYobGU9d2luZG93LmNyeXB0byksdHlwZW9mIHNlbGY8InUiJiZzZWxmLmNyeXB0byYmKGxlPXNlbGYuY3J5cHRvKSx0eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXMuY3J5cHRvJiYobGU9Z2xvYmFsVGhpcy5jcnlwdG8pLCFsZSYmdHlwZW9mIHdp''@;'; put 'put ''bmRvdzwidSImJndpbmRvdy5tc0NyeXB0byYmKGxlPXdpbmRvdy5tc0NyeXB0byksIWxlJiZ0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsLmNyeXB0byYmKGxlPWdsb2JhbC5jcnlwdG8pLCFsZSl0cnl7bGU9Rig3NzkwMyl9Y2F0Y2h7fXZhciBNPWZ1bmN0aW9uKCl7aWYobGUpe2lmKCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBsZS5nZXRSYW5kb21WYWx1ZXMpdHJ5e3JldHVybiBsZS5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIGxlLnJhbmRvbUJ5dGVzKXRyeXtyZXR1cm4gbGUucmFuZG9tQnl0ZXMoNCkucmVhZElu''@;'; put 'put ''dDMyTEUoKX1jYXRjaHt9fXRocm93IG5ldyBFcnJvcigiTmF0aXZlIGNyeXB0byBtb2R1bGUgY291bGQgbm90IGJlIHVzZWQgdG8gZ2V0IHNlY3VyZSByYW5kb20gbnVtYmVyLiIpfSxPPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVSgpe31yZXR1cm4gZnVuY3Rpb24ocSl7''@;'; put 'put ''dmFyIGVlO3JldHVybiBVLnByb3RvdHlwZT1xLGVlPW5ldyBVLFUucHJvdG90eXBlPW51bGwsZWV9fSgpLFI9e30sej1SLmxpYj17fSxLPXouQmFzZT17ZXh0ZW5kOmZ1bmN0aW9uKFUpe3ZhciBxPU8odGhpcyk7cmV0dXJuIFUmJnEubWl4SW4oVSksKCFxLmhhc093blByb3BlcnR5KCJpbml0''@;'; put 'put ''Iil8fHRoaXMuaW5pdD09PXEuaW5pdCkmJihxLmluaXQ9ZnVuY3Rpb24oKXtxLiRzdXBlci5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHEuaW5pdC5wcm90b3R5cGU9cSxxLiRzdXBlcj10aGlzLHF9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBVPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIFUu''@;'; put 'put ''aW5pdC5hcHBseShVLGFyZ3VtZW50cyksVX0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oVSl7Zm9yKHZhciBxIGluIFUpVS5oYXNPd25Qcm9wZXJ0eShxKSYmKHRoaXNbcV09VVtxXSk7VS5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYmKHRoaXMudG9TdHJpbmc9VS50b1N0''@;'; put 'put ''cmluZyl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX0sST16LldvcmRBcnJheT1LLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihVLHEpe1U9dGhpcy53b3Jkcz1VfHxbXSx0aGlzLnNpZ0J5dGVzPW51bGwhPXE/cTo0KlUubGVuZ3RofSx0''@;'; put 'put ''b1N0cmluZzpmdW5jdGlvbihVKXtyZXR1cm4oVXx8RSkuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24oVSl7dmFyIHE9dGhpcy53b3JkcyxlZT1VLndvcmRzLHRlPXRoaXMuc2lnQnl0ZXMsb2U9VS5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksdGUlNClmb3IodmFyIHNlPTA7c2U8''@;'; put 'put ''b2U7c2UrKylxW3RlK3NlPj4+Ml18PShlZVtzZT4+PjJdPj4+MjQtc2UlNCo4JjI1NSk8PDI0LSh0ZStzZSklNCo4O2Vsc2UgZm9yKHZhciB1ZT0wO3VlPG9lO3VlKz00KXFbdGUrdWU+Pj4yXT1lZVt1ZT4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1vZSx0aGlzfSxjbGFtcDpmdW5jdGlv''@;'; put 'put ''bigpe3ZhciBVPXRoaXMud29yZHMscT10aGlzLnNpZ0J5dGVzO1VbcT4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1xJTQqOCxVLmxlbmd0aD14LmNlaWwocS80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVT1LLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFUud29yZHM9dGhpcy53b3Jkcy5zbGljZSgw''@;'; put 'put ''KSxVfSxyYW5kb206ZnVuY3Rpb24oVSl7Zm9yKHZhciBxPVtdLGVlPTA7ZWU8VTtlZSs9NClxLnB1c2goTSgpKTtyZXR1cm4gbmV3IEkuaW5pdChxLFUpfX0pLGs9Ui5lbmM9e30sRT1rLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1VLndvcmRzLGVlPVUuc2lnQnl0ZXMs''@;'; put 'put ''dGU9W10sb2U9MDtvZTxlZTtvZSsrKXt2YXIgc2U9cVtvZT4+PjJdPj4+MjQtb2UlNCo4JjI1NTt0ZS5wdXNoKChzZT4+PjQpLnRvU3RyaW5nKDE2KSksdGUucHVzaCgoMTUmc2UpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIHRlLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihVKXtmb3IodmFyIHE9''@;'; put 'put ''VS5sZW5ndGgsZWU9W10sdGU9MDt0ZTxxO3RlKz0yKWVlW3RlPj4+M118PXBhcnNlSW50KFUuc3Vic3RyKHRlLDIpLDE2KTw8MjQtdGUlOCo0O3JldHVybiBuZXcgSS5pbml0KGVlLHEvMil9fSxqPWsuTGF0aW4xPXtzdHJpbmdpZnk6ZnVuY3Rpb24oVSl7Zm9yKHZhciBxPVUud29yZHMsZWU9''@;'; put 'put ''VS5zaWdCeXRlcyx0ZT1bXSxvZT0wO29lPGVlO29lKyspdGUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHFbb2U+Pj4yXT4+PjI0LW9lJTQqOCYyNTUpKTtyZXR1cm4gdGUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1VLmxlbmd0aCxlZT1bXSx0ZT0wO3RlPHE7dGUr''@;'; put 'put ''KyllZVt0ZT4+PjJdfD0oMjU1JlUuY2hhckNvZGVBdCh0ZSkpPDwyNC10ZSU0Kjg7cmV0dXJuIG5ldyBJLmluaXQoZWUscSl9fSxWPWsuVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKFUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShqLnN0cmluZ2lmeShVKSkpfWNhdGNo''@;'; put 'put ''e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIFVURi04IGRhdGEiKX19LHBhcnNlOmZ1bmN0aW9uKFUpe3JldHVybiBqLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChVKSkpfX0sQj16LkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09Sy5leHRlbmQoe3Jlc2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''dGhpcy5fZGF0YT1uZXcgSS5pbml0LHRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbihVKXsic3RyaW5nIj09dHlwZW9mIFUmJihVPVYucGFyc2UoVSkpLHRoaXMuX2RhdGEuY29uY2F0KFUpLHRoaXMuX25EYXRhQnl0ZXMrPVUuc2lnQnl0ZXN9LF9wcm9jZXNzOmZ1bmN0aW9u''@;'; put 'put ''KFUpe3ZhciBxLGVlPXRoaXMuX2RhdGEsdGU9ZWUud29yZHMsb2U9ZWUuc2lnQnl0ZXMsc2U9dGhpcy5ibG9ja1NpemUsdWU9b2UvKDQqc2UpLGNlPSh1ZT1VP3guY2VpbCh1ZSk6eC5tYXgoKDB8dWUpLXRoaXMuX21pbkJ1ZmZlclNpemUsMCkpKnNlLEc9eC5taW4oNCpjZSxvZSk7aWYoY2Up''@;'; put 'put ''e2Zvcih2YXIgYj0wO2I8Y2U7Yis9c2UpdGhpcy5fZG9Qcm9jZXNzQmxvY2sodGUsYik7cT10ZS5zcGxpY2UoMCxjZSksZWUuc2lnQnl0ZXMtPUd9cmV0dXJuIG5ldyBJLmluaXQocSxHKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVT1LLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFUuX2RhdGE9''@;'; put 'put ''dGhpcy5fZGF0YS5jbG9uZSgpLFV9LF9taW5CdWZmZXJTaXplOjB9KSxYPSh6Lkhhc2hlcj1CLmV4dGVuZCh7Y2ZnOksuZXh0ZW5kKCksaW5pdDpmdW5jdGlvbihVKXt0aGlzLmNmZz10aGlzLmNmZy5leHRlbmQoVSksdGhpcy5yZXNldCgpfSxyZXNldDpmdW5jdGlvbigpe0IucmVzZXQuY2Fs''@;'; put 'put ''bCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9LHVwZGF0ZTpmdW5jdGlvbihVKXtyZXR1cm4gdGhpcy5fYXBwZW5kKFUpLHRoaXMuX3Byb2Nlc3MoKSx0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbihVKXtyZXR1cm4gVSYmdGhpcy5fYXBwZW5kKFUpLHRoaXMuX2RvRmluYWxpemUoKX0sYmxvY2tTaXpl''@;'; put 'put ''OjE2LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24oVSl7cmV0dXJuIGZ1bmN0aW9uKHEsZWUpe3JldHVybiBuZXcgVS5pbml0KGVlKS5maW5hbGl6ZShxKX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihxLGVlKXtyZXR1cm4gbmV3IFguSE1BQy5pbml0KFUs''@;'; put 'put ''ZWUpLmZpbmFsaXplKHEpfX19KSxSLmFsZ289e30pO3JldHVybiBSfShNYXRoKSxhZSl9LDkyODczOmZ1bmN0aW9uKGF0LEllLEYpe3ZhciBhZTthdC5leHBvcnRzPShhZT1GKDEwMDEyKSxmdW5jdGlvbih4KXt2YXIgbT1hZSxsZT1tLmxpYixNPWxlLldvcmRBcnJheSxPPWxlLkhhc2hlcixS''@;'; put 'put ''PW0uYWxnbyx6PVtdOyFmdW5jdGlvbigpe2Zvcih2YXIgVj0wO1Y8NjQ7VisrKXpbVl09NDI5NDk2NzI5Nip4LmFicyh4LnNpbihWKzEpKXwwfSgpO3ZhciBLPVIuTUQ1PU8uZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3RoaXMuX2hhc2g9bmV3IE0uaW5pdChbMTczMjU4NDE5Myw0MDIz''@;'; put 'put ''MjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4XSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihWLEIpe2Zvcih2YXIgWT0wO1k8MTY7WSsrKXt2YXIgWD1CK1ksVT1WW1hdO1ZbWF09MTY3MTE5MzUmKFU8PDh8VT4+PjI0KXw0Mjc4MjU1MzYwJihVPDwyNHxVPj4+OCl9dmFyIHE9dGhpcy5f''@;'; put 'put ''aGFzaC53b3JkcyxlZT1WW0IrMF0sdGU9VltCKzFdLG9lPVZbQisyXSxzZT1WW0IrM10saGU9VltCKzRdLHVlPVZbQis1XSxjZT1WW0IrNl0sRz1WW0IrN10sYj1WW0IrOF0sRD1WW0IrOV0sSD1WW0IrMTBdLE49VltCKzExXSxnPVZbQisxMl0sQz1WW0IrMTNdLFM9VltCKzE0XSx2PVZbQisx''@;'; put 'put ''NV0scD1xWzBdLHc9cVsxXSxKPXFbMl0sbmU9cVszXTtwPUkocCx3LEosbmUsZWUsNyx6WzBdKSxuZT1JKG5lLHAsdyxKLHRlLDEyLHpbMV0pLEo9SShKLG5lLHAsdyxvZSwxNyx6WzJdKSx3PUkodyxKLG5lLHAsc2UsMjIselszXSkscD1JKHAsdyxKLG5lLGhlLDcsels0XSksbmU9SShuZSxw''@;'; put 'put ''LHcsSix1ZSwxMix6WzVdKSxKPUkoSixuZSxwLHcsY2UsMTcsels2XSksdz1JKHcsSixuZSxwLEcsMjIsels3XSkscD1JKHAsdyxKLG5lLGIsNyx6WzhdKSxuZT1JKG5lLHAsdyxKLEQsMTIsels5XSksSj1JKEosbmUscCx3LEgsMTcselsxMF0pLHc9SSh3LEosbmUscCxOLDIyLHpbMTFdKSxw''@;'; put 'put ''PUkocCx3LEosbmUsZyw3LHpbMTJdKSxuZT1JKG5lLHAsdyxKLEMsMTIselsxM10pLEo9SShKLG5lLHAsdyxTLDE3LHpbMTRdKSxwPWsocCx3PUkodyxKLG5lLHAsdiwyMix6WzE1XSksSixuZSx0ZSw1LHpbMTZdKSxuZT1rKG5lLHAsdyxKLGNlLDkselsxN10pLEo9ayhKLG5lLHAsdyxOLDE0''@;'; put 'put ''LHpbMThdKSx3PWsodyxKLG5lLHAsZWUsMjAselsxOV0pLHA9ayhwLHcsSixuZSx1ZSw1LHpbMjBdKSxuZT1rKG5lLHAsdyxKLEgsOSx6WzIxXSksSj1rKEosbmUscCx3LHYsMTQselsyMl0pLHc9ayh3LEosbmUscCxoZSwyMCx6WzIzXSkscD1rKHAsdyxKLG5lLEQsNSx6WzI0XSksbmU9ayhu''@;'; put 'put ''ZSxwLHcsSixTLDkselsyNV0pLEo9ayhKLG5lLHAsdyxzZSwxNCx6WzI2XSksdz1rKHcsSixuZSxwLGIsMjAselsyN10pLHA9ayhwLHcsSixuZSxDLDUselsyOF0pLG5lPWsobmUscCx3LEosb2UsOSx6WzI5XSksSj1rKEosbmUscCx3LEcsMTQselszMF0pLHA9RShwLHc9ayh3LEosbmUscCxn''@;'; put 'put ''LDIwLHpbMzFdKSxKLG5lLHVlLDQselszMl0pLG5lPUUobmUscCx3LEosYiwxMSx6WzMzXSksSj1FKEosbmUscCx3LE4sMTYselszNF0pLHc9RSh3LEosbmUscCxTLDIzLHpbMzVdKSxwPUUocCx3LEosbmUsdGUsNCx6WzM2XSksbmU9RShuZSxwLHcsSixoZSwxMSx6WzM3XSksSj1FKEosbmUs''@;'; put 'put ''cCx3LEcsMTYselszOF0pLHc9RSh3LEosbmUscCxILDIzLHpbMzldKSxwPUUocCx3LEosbmUsQyw0LHpbNDBdKSxuZT1FKG5lLHAsdyxKLGVlLDExLHpbNDFdKSxKPUUoSixuZSxwLHcsc2UsMTYsels0Ml0pLHc9RSh3LEosbmUscCxjZSwyMyx6WzQzXSkscD1FKHAsdyxKLG5lLEQsNCx6WzQ0''@;'; put 'put ''XSksbmU9RShuZSxwLHcsSixnLDExLHpbNDVdKSxKPUUoSixuZSxwLHcsdiwxNix6WzQ2XSkscD1qKHAsdz1FKHcsSixuZSxwLG9lLDIzLHpbNDddKSxKLG5lLGVlLDYsels0OF0pLG5lPWoobmUscCx3LEosRywxMCx6WzQ5XSksSj1qKEosbmUscCx3LFMsMTUsels1MF0pLHc9aih3LEosbmUs''@;'; put 'put ''cCx1ZSwyMSx6WzUxXSkscD1qKHAsdyxKLG5lLGcsNix6WzUyXSksbmU9aihuZSxwLHcsSixzZSwxMCx6WzUzXSksSj1qKEosbmUscCx3LEgsMTUsels1NF0pLHc9aih3LEosbmUscCx0ZSwyMSx6WzU1XSkscD1qKHAsdyxKLG5lLGIsNix6WzU2XSksbmU9aihuZSxwLHcsSix2LDEwLHpbNTdd''@;'; put 'put ''KSxKPWooSixuZSxwLHcsY2UsMTUsels1OF0pLHc9aih3LEosbmUscCxDLDIxLHpbNTldKSxwPWoocCx3LEosbmUsaGUsNix6WzYwXSksbmU9aihuZSxwLHcsSixOLDEwLHpbNjFdKSxKPWooSixuZSxwLHcsb2UsMTUsels2Ml0pLHc9aih3LEosbmUscCxELDIxLHpbNjNdKSxxWzBdPXFbMF0r''@;'; put 'put ''cHwwLHFbMV09cVsxXSt3fDAscVsyXT1xWzJdK0p8MCxxWzNdPXFbM10rbmV8MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgVj10aGlzLl9kYXRhLEI9Vi53b3JkcyxZPTgqdGhpcy5fbkRhdGFCeXRlcyxYPTgqVi5zaWdCeXRlcztCW1g+Pj41XXw9MTI4PDwyNC1YJTMyO3ZhciBVPXgu''@;'; put 'put ''Zmxvb3IoWS80Mjk0OTY3Mjk2KSxxPVk7QlsxNSsoWCs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYoVTw8OHxVPj4+MjQpfDQyNzgyNTUzNjAmKFU8PDI0fFU+Pj44KSxCWzE0KyhYKzY0Pj4+OTw8NCldPTE2NzExOTM1JihxPDw4fHE+Pj4yNCl8NDI3ODI1NTM2MCYocTw8MjR8cT4+PjgpLFYuc2ln''@;'; put 'put ''Qnl0ZXM9NCooQi5sZW5ndGgrMSksdGhpcy5fcHJvY2VzcygpO2Zvcih2YXIgZWU9dGhpcy5faGFzaCx0ZT1lZS53b3JkcyxvZT0wO29lPDQ7b2UrKyl7dmFyIHNlPXRlW29lXTt0ZVtvZV09MTY3MTE5MzUmKHNlPDw4fHNlPj4+MjQpfDQyNzgyNTUzNjAmKHNlPDwyNHxzZT4+PjgpfXJldHVy''@;'; put 'put ''biBlZX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgVj1PLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFYuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpLFZ9fSk7ZnVuY3Rpb24gSShWLEIsWSxYLFUscSxlZSl7dmFyIHRlPVYrKEImWXx+QiZYKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9''@;'; put 'put ''ZnVuY3Rpb24gayhWLEIsWSxYLFUscSxlZSl7dmFyIHRlPVYrKEImWHxZJn5YKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9ZnVuY3Rpb24gRShWLEIsWSxYLFUscSxlZSl7dmFyIHRlPVYrKEJeWV5YKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9ZnVuY3Rpb24gaihW''@;'; put 'put ''LEIsWSxYLFUscSxlZSl7dmFyIHRlPVYrKFleKEJ8flgpKStVK2VlO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK0J9bS5NRDU9Ty5fY3JlYXRlSGVscGVyKEspLG0uSG1hY01ENT1PLl9jcmVhdGVIbWFjSGVscGVyKEspfShNYXRoKSxhZS5NRDUpfSw0MDEzMjooYXQsSWUsRik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7SWUudXRpbHM9Rig1MjI5NCksSWUuQ2lwaGVyPUYoMjk0ODQpLEllLkRFUz1GKDE0Mzc0KSxJZS5DQkM9RigxMjA2NiksSWUuRURFPUYoNTk3MTApfSwxMjA2NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNTc3OTgpLHg9Rig2NjY5OCksbT17fTtmdW5jdGlvbiBs''@;'; put 'put ''ZShPKXthZS5lcXVhbChPLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgUj0wO1I8dGhpcy5pdi5sZW5ndGg7UisrKXRoaXMuaXZbUl09T1tSXX1JZS5pbnN0YW50aWF0ZT1mdW5jdGlvbiBNKE8pe2Z1bmN0aW9uIFIoayl7Ty5jYWxs''@;'; put 'put ''KHRoaXMsayksdGhpcy5fY2JjSW5pdCgpfXgoUixPKTtmb3IodmFyIHo9T2JqZWN0LmtleXMobSksSz0wO0s8ei5sZW5ndGg7SysrKXt2YXIgST16W0tdO1IucHJvdG90eXBlW0ldPW1bSV19cmV0dXJuIFIuY3JlYXRlPWZ1bmN0aW9uKEUpe3JldHVybiBuZXcgUihFKX0sUn0sbS5fY2JjSW5p''@;'; put 'put ''dD1mdW5jdGlvbigpe3ZhciBSPW5ldyBsZSh0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPVJ9LG0uX3VwZGF0ZT1mdW5jdGlvbihSLHosSyxJKXt2YXIgRT10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsaj10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10''@;'; put 'put ''aGlzLnR5cGUpe2Zvcih2YXIgVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKWpbVl1ePVJbeitWXTtmb3IoRS5fdXBkYXRlLmNhbGwodGhpcyxqLDAsSyxJKSxWPTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKyspaltWXT1LW0krVl19ZWxzZXtmb3IoRS5fdXBkYXRlLmNhbGwodGhpcyxSLHosSyxJKSxW''@;'; put 'put ''PTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKyspS1tJK1ZdXj1qW1ZdO2ZvcihWPTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKyspaltWXT1SW3orVl19fX0sMjk0ODQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KTtmdW5jdGlvbiB4KG0pe3RoaXMub3B0aW9ucz1tLHRoaXMudHlw''@;'; put 'put ''ZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09bS5wYWRkaW5nfWF0LmV4cG9ydHM9eCx4LnByb3RvdHlwZS5faW5pdD1m''@;'; put 'put ''dW5jdGlvbigpe30seC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGxlKXtyZXR1cm4gMD09PWxlLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChsZSk6dGhpcy5fdXBkYXRlRW5jcnlwdChsZSl9LHgucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rp''@;'; put 'put ''b24obGUsTSl7Zm9yKHZhciBPPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixsZS5sZW5ndGgtTSksUj0wO1I8TztSKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrUl09bGVbTStSXTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPU8sT30seC5wcm90b3R5cGUu''@;'; put 'put ''X2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKGxlLE0pe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxsZSxNKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSx4LnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihsZSl7dmFyIE09MCxPPTAsej1uZXcgQXJyYXko''@;'; put 'put ''KCh0aGlzLmJ1ZmZlck9mZitsZS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJihNKz10aGlzLl9idWZmZXIobGUsTSksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihPKz10aGlzLl9mbHVzaEJ1ZmZlcih6''@;'; put 'put ''LE8pKSk7Zm9yKHZhciBLPWxlLmxlbmd0aC0obGUubGVuZ3RoLU0pJXRoaXMuYmxvY2tTaXplO008SztNKz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUobGUsTSx6LE8pLE8rPXRoaXMuYmxvY2tTaXplO2Zvcig7TTxsZS5sZW5ndGg7TSsrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZm''@;'; put 'put ''ZXJbdGhpcy5idWZmZXJPZmZdPWxlW01dO3JldHVybiB6fSx4LnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihsZSl7Zm9yKHZhciBNPTAsTz0wLFI9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitsZS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLHo9bmV3IEFycmF5KFIqdGhp''@;'; put 'put ''cy5ibG9ja1NpemUpO1I+MDtSLS0pTSs9dGhpcy5fYnVmZmVyKGxlLE0pLE8rPXRoaXMuX2ZsdXNoQnVmZmVyKHosTyk7cmV0dXJuIE0rPXRoaXMuX2J1ZmZlcihsZSxNKSx6fSx4LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihsZSl7dmFyIE0sTztyZXR1cm4gbGUmJihNPXRoaXMudXBkYXRl''@;'; put 'put ''KGxlKSksTz0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksTT9NLmNvbmNhdChPKTpPfSx4LnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKGxlLE0pe2lmKDA9PT1NKXJldHVybiExO2Zvcig7TTxsZS5sZW5ndGg7KWxlW00rK109''@;'; put 'put ''MDtyZXR1cm4hMH0seC5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBsZT1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIs''@;'; put 'put ''MCxsZSwwKSxsZX0seC5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKGxlKXtyZXR1cm4gbGV9LHgucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24oKXthZS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIg''@;'; put 'put ''bGU9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIobGUsMCksdGhpcy5fdW5wYWQobGUpfX0sMTQzNzQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KSx4PUYoNjY2OTgpLG09Rig1MjI5NCksbGU9RigyOTQ4NCk7ZnVuY3Rp''@;'; put 'put ''b24gTSgpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBPKHope2xlLmNhbGwodGhpcyx6KTt2YXIgSz1uZXcgTTt0aGlzLl9kZXNTdGF0ZT1LLHRoaXMuZGVyaXZlS2V5cyhLLHoua2V5KX14KE8sbGUpLGF0LmV4cG9ydHM9TyxPLmNyZWF0ZT1mdW5jdGlv''@;'; put 'put ''bihLKXtyZXR1cm4gbmV3IE8oSyl9O3ZhciBSPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtPLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKEssSSl7Sy5rZXlzPW5ldyBBcnJheSgzMiksYWUuZXF1YWwoSS5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5''@;'; put 'put ''IGxlbmd0aCIpO3ZhciBrPW0ucmVhZFVJbnQzMkJFKEksMCksRT1tLnJlYWRVSW50MzJCRShJLDQpO20ucGMxKGssRSxLLnRtcCwwKSxrPUsudG1wWzBdLEU9Sy50bXBbMV07Zm9yKHZhciBqPTA7ajxLLmtleXMubGVuZ3RoO2orPTIpe3ZhciBWPVJbaj4+PjFdO2s9bS5yMjhzaGwoayxWKSxF''@;'; put 'put ''PW0ucjI4c2hsKEUsViksbS5wYzIoayxFLEsua2V5cyxqKX19LE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSyxJLGssRSl7dmFyIGo9dGhpcy5fZGVzU3RhdGUsVj1tLnJlYWRVSW50MzJCRShLLEkpLEI9bS5yZWFkVUludDMyQkUoSyxJKzQpO20uaXAoVixCLGoudG1wLDApLFY9ai50''@;'; put 'put ''bXBbMF0sQj1qLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChqLFYsQixqLnRtcCwwKTp0aGlzLl9kZWNyeXB0KGosVixCLGoudG1wLDApLEI9ai50bXBbMV0sbS53cml0ZVVJbnQzMkJFKGssVj1qLnRtcFswXSxFKSxtLndyaXRlVUludDMyQkUoayxCLEUrNCl9''@;'; put 'put ''LE8ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oSyxJKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4hMTtmb3IodmFyIGs9Sy5sZW5ndGgtSSxFPUk7RTxLLmxlbmd0aDtFKyspS1tFXT1rO3JldHVybiEwfSxPLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oSyl7aWYoITE9PT10aGlzLnBh''@;'; put 'put ''ZGRpbmcpcmV0dXJuIEs7Zm9yKHZhciBJPUtbSy5sZW5ndGgtMV0saz1LLmxlbmd0aC1JO2s8Sy5sZW5ndGg7aysrKWFlLmVxdWFsKEtba10sSSk7cmV0dXJuIEsuc2xpY2UoMCxLLmxlbmd0aC1JKX0sTy5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oSyxJLGssRSxqKXtmb3IodmFyIFY9''@;'; put 'put ''SSxCPWssWT0wO1k8Sy5rZXlzLmxlbmd0aDtZKz0yKXt2YXIgWD1LLmtleXNbWV0sVT1LLmtleXNbWSsxXTttLmV4cGFuZChCLEsudG1wLDApO3ZhciBxPW0uc3Vic3RpdHV0ZShYXj1LLnRtcFswXSxVXj1LLnRtcFsxXSksdGU9QjtCPShWXm0ucGVybXV0ZShxKSk+Pj4wLFY9dGV9bS5yaXAo''@;'; put 'put ''QixWLEUsail9LE8ucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKEssSSxrLEUsail7Zm9yKHZhciBWPWssQj1JLFk9Sy5rZXlzLmxlbmd0aC0yO1k+PTA7WS09Mil7dmFyIFg9Sy5rZXlzW1ldLFU9Sy5rZXlzW1krMV07bS5leHBhbmQoVixLLnRtcCwwKTt2YXIgcT1tLnN1YnN0aXR1dGUo''@;'; put 'put ''WF49Sy50bXBbMF0sVV49Sy50bXBbMV0pLHRlPVY7Vj0oQl5tLnBlcm11dGUocSkpPj4+MCxCPXRlfW0ucmlwKFYsQixFLGopfX0sNTk3MTA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KSx4PUYoNjY2OTgpLG09RigyOTQ4NCksbGU9RigxNDM3NCk7ZnVuY3Rpb24g''@;'; put 'put ''TShSLHope2FlLmVxdWFsKHoubGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgSz16LnNsaWNlKDAsOCksST16LnNsaWNlKDgsMTYpLGs9ei5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PVI/W2xlLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okt9KSxs''@;'; put 'put ''ZS5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpJfSksbGUuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6a30pXTpbbGUuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6a30pLGxlLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okl9KSxsZS5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtl''@;'; put 'put ''eTpLfSldfWZ1bmN0aW9uIE8oUil7bS5jYWxsKHRoaXMsUik7dmFyIHo9bmV3IE0odGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPXp9eChPLG0pLGF0LmV4cG9ydHM9TyxPLmNyZWF0ZT1mdW5jdGlvbih6KXtyZXR1cm4gbmV3IE8oeil9LE8ucHJvdG90eXBlLl91''@;'; put 'put ''cGRhdGU9ZnVuY3Rpb24oeixLLEksayl7dmFyIEU9dGhpcy5fZWRlU3RhdGU7RS5jaXBoZXJzWzBdLl91cGRhdGUoeixLLEksayksRS5jaXBoZXJzWzFdLl91cGRhdGUoSSxrLEksayksRS5jaXBoZXJzWzJdLl91cGRhdGUoSSxrLEksayl9LE8ucHJvdG90eXBlLl9wYWQ9bGUucHJvdG90eXBl''@;'; put 'put ''Ll9wYWQsTy5wcm90b3R5cGUuX3VucGFkPWxlLnByb3RvdHlwZS5fdW5wYWR9LDUyMjk0OihhdCxJZSk9PnsidXNlIHN0cmljdCI7SWUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGxlLE0pe3JldHVybihsZVswK01dPDwyNHxsZVsxK01dPDwxNnxsZVsyK01dPDw4fGxlWzMrTV0pPj4+MH0sSWUu''@;'; put 'put ''d3JpdGVVSW50MzJCRT1mdW5jdGlvbihsZSxNLE8pe2xlWzArT109TT4+PjI0LGxlWzErT109TT4+PjE2JjI1NSxsZVsyK09dPU0+Pj44JjI1NSxsZVszK09dPTI1NSZNfSxJZS5pcD1mdW5jdGlvbihsZSxNLE8sUil7Zm9yKHZhciB6PTAsSz0wLEk9NjtJPj0wO0ktPTIpe2Zvcih2YXIgaz0w''@;'; put 'put ''O2s8PTI0O2srPTgpejw8PTEsenw9TT4+PmsrSSYxO2ZvcihrPTA7azw9MjQ7ays9OCl6PDw9MSx6fD1sZT4+PmsrSSYxfWZvcihJPTY7ST49MDtJLT0yKXtmb3Ioaz0xO2s8PTI1O2srPTgpSzw8PTEsS3w9TT4+PmsrSSYxO2ZvcihrPTE7azw9MjU7ays9OClLPDw9MSxLfD1sZT4+PmsrSSYx''@;'; put 'put ''fU9bUiswXT16Pj4+MCxPW1IrMV09Sz4+PjB9LEllLnJpcD1mdW5jdGlvbihsZSxNLE8sUil7Zm9yKHZhciB6PTAsSz0wLEk9MDtJPDQ7SSsrKWZvcih2YXIgaz0yNDtrPj0wO2stPTgpejw8PTEsenw9TT4+PmsrSSYxLHo8PD0xLHp8PWxlPj4+aytJJjE7Zm9yKEk9NDtJPDg7SSsrKWZvcihr''@;'; put 'put ''PTI0O2s+PTA7ay09OClLPDw9MSxLfD1NPj4+aytJJjEsSzw8PTEsS3w9bGU+Pj5rK0kmMTtPW1IrMF09ej4+PjAsT1tSKzFdPUs+Pj4wfSxJZS5wYzE9ZnVuY3Rpb24obGUsTSxPLFIpe2Zvcih2YXIgej0wLEs9MCxJPTc7ST49NTtJLS0pe2Zvcih2YXIgaz0wO2s8PTI0O2srPTgpejw8PTEs''@;'; put 'put ''enw9TT4+aytJJjE7Zm9yKGs9MDtrPD0yNDtrKz04KXo8PD0xLHp8PWxlPj5rK0kmMX1mb3Ioaz0wO2s8PTI0O2srPTgpejw8PTEsenw9TT4+aytJJjE7Zm9yKEk9MTtJPD0zO0krKyl7Zm9yKGs9MDtrPD0yNDtrKz04KUs8PD0xLEt8PU0+PmsrSSYxO2ZvcihrPTA7azw9MjQ7ays9OClLPDw9''@;'; put 'put ''MSxLfD1sZT4+aytJJjF9Zm9yKGs9MDtrPD0yNDtrKz04KUs8PD0xLEt8PWxlPj5rK0kmMTtPW1IrMF09ej4+PjAsT1tSKzFdPUs+Pj4wfSxJZS5yMjhzaGw9ZnVuY3Rpb24obGUsTSl7cmV0dXJuIGxlPDxNJjI2ODQzNTQ1NXxsZT4+PjI4LU19O3ZhciBGPVsxNCwxMSwxNyw0LDI3LDIzLDI1''@;'; put 'put ''LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO0llLnBjMj1mdW5jdGlvbihsZSxNLE8sUil7Zm9yKHZhciB6PTAsSz0wLEk9Ri5sZW5ndGg+Pj4x''@;'; put 'put ''LGs9MDtrPEk7aysrKXo8PD0xLHp8PWxlPj4+RltrXSYxO2ZvcihrPUk7azxGLmxlbmd0aDtrKyspSzw8PTEsS3w9TT4+PkZba10mMTtPW1IrMF09ej4+PjAsT1tSKzFdPUs+Pj4wfSxJZS5leHBhbmQ9ZnVuY3Rpb24obGUsTSxPKXt2YXIgUj0wLHo9MDtSPSgxJmxlKTw8NXxsZT4+PjI3O2Zv''@;'; put 'put ''cih2YXIgSz0yMztLPj0xNTtLLT00KVI8PD02LFJ8PWxlPj4+SyY2Mztmb3IoSz0xMTtLPj0zO0stPTQpenw9bGU+Pj5LJjYzLHo8PD02O3p8PSgzMSZsZSk8PDF8bGU+Pj4zMSxNW08rMF09Uj4+PjAsTVtPKzFdPXo+Pj4wfTt2YXIgYWU9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIs''@;'; put 'put ''MTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEy''@;'; put 'put ''LDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0''@;'; put 'put ''LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQs''@;'; put 'put ''MTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEs''@;'; put 'put ''Miw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEy''@;'; put 'put ''LDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcs''@;'; put 'put ''MTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2''@;'; put 'put ''LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07SWUuc3Vic3RpdHV0ZT1mdW5jdGlvbihsZSxNKXtmb3IodmFyIE89MCxSPTA7Ujw0O1IrKylPPDw9NCxPfD1hZVs2NCpSKyhsZT4+PjE4LTYqUiY2MyldO2ZvcihSPTA7Ujw0O1IrKylPPDw9NCxPfD1hZVsyNTYrNjQqUisoTT4+PjE4''@;'; put 'put ''LTYqUiY2MyldO3JldHVybiBPPj4+MH07dmFyIHg9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO0llLnBlcm11dGU9ZnVuY3Rpb24obGUpe2Zvcih2YXIgTT0wLE89MDtPPHgubGVu''@;'; put 'put ''Z3RoO08rKylNPDw9MSxNfD1sZT4+PnhbT10mMTtyZXR1cm4gTT4+PjB9LEllLnBhZFNwbGl0PWZ1bmN0aW9uKGxlLE0sTyl7Zm9yKHZhciBSPWxlLnRvU3RyaW5nKDIpO1IubGVuZ3RoPE07KVI9IjAiK1I7Zm9yKHZhciB6PVtdLEs9MDtLPE07Sys9Tyl6LnB1c2goUi5zbGljZShLLEsrTykp''@;'; put 'put ''O3JldHVybiB6LmpvaW4oIiAiKX19LDQ1MTQ0OihhdCxJZSxGKT0+e3ZhciBhZT1GKDcxMDk2KSx4PUYoMjk3OTkpLG09Rig5NTU4MCksTT17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O0llLkRpZmZpZUhlbGxtYW5Hcm91cD1JZS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9SWUuZ2V0''@;'; put 'put ''RGlmZmllSGVsbG1hbj1mdW5jdGlvbiBsZShSKXt2YXIgej1uZXcgQnVmZmVyKHhbUl0ucHJpbWUsImhleCIpLEs9bmV3IEJ1ZmZlcih4W1JdLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBtKHosSyl9LEllLmNyZWF0ZURpZmZpZUhlbGxtYW49SWUuRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBPKFIs''@;'; put 'put ''eixLLEkpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoeil8fHZvaWQgMD09PU1bel0/TyhSLCJiaW5hcnkiLHosSyk6KHo9enx8ImJpbmFyeSIsST1JfHwiYmluYXJ5IixLPUt8fG5ldyBCdWZmZXIoWzJdKSxCdWZmZXIuaXNCdWZmZXIoSyl8fChLPW5ldyBCdWZmZXIoSyxJKSksIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBSP25ldyBtKGFlKFIsSyksSywhMCk6KEJ1ZmZlci5pc0J1ZmZlcihSKXx8KFI9bmV3IEJ1ZmZlcihSLHopKSxuZXcgbShSLEssITApKSl9fSw5NTU4MDooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NzMwMSksbT1uZXcoRig0ODYwNikpLGxlPW5ldyBhZSgyNCksTT1uZXcgYWUoMTEp''@;'; put 'put ''LE89bmV3IGFlKDEwKSxSPW5ldyBhZSgzKSx6PW5ldyBhZSg3KSxLPUYoNzEwOTYpLEk9Rig0NDAxOSk7ZnVuY3Rpb24gayhYLFUpe3JldHVybiBVPVV8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoWCl8fChYPW5ldyBCdWZmZXIoWCxVKSksdGhpcy5fcHViPW5ldyBhZShYKSx0aGlzfWZ1bmN0''@;'; put 'put ''aW9uIEUoWCxVKXtyZXR1cm4gVT1VfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFgpfHwoWD1uZXcgQnVmZmVyKFgsVSkpLHRoaXMuX3ByaXY9bmV3IGFlKFgpLHRoaXN9YXQuZXhwb3J0cz1CO3ZhciBqPXt9O2Z1bmN0aW9uIEIoWCxVLHEpe3RoaXMuc2V0R2VuZXJhdG9yKFUpLHRoaXMuX19w''@;'; put 'put ''cmltZT1uZXcgYWUoWCksdGhpcy5fcHJpbWU9YWUubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPVgubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxxPyh0aGlzLnNldFB1YmxpY0tleT1rLHRoaXMuc2V0UHJp''@;'; put 'put ''dmF0ZUtleT1FKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBZKFgsVSl7dmFyIHE9bmV3IEJ1ZmZlcihYLnRvQXJyYXkoKSk7cmV0dXJuIFU/cS50b1N0cmluZyhVKTpxfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdl''@;'; put 'put ''dDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uIFYoWCxVKXt2YXIgcT1VLnRvU3RyaW5nKCJoZXgiKSxlZT1bcSxYLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKGVlIGluIGopcmV0dXJuIGpbZWVd''@;'; put 'put ''O3ZhciBvZSx0ZT0wO2lmKFguaXNFdmVuKCl8fCFLLnNpbXBsZVNpZXZlfHwhSy5mZXJtYXRUZXN0KFgpfHwhbS50ZXN0KFgpKXJldHVybiB0ZSs9MSxqW2VlXT10ZSs9IjAyIj09PXF8fCIwNSI9PT1xPzg6NCx0ZTtzd2l0Y2gobS50ZXN0KFguc2hybigxKSl8fCh0ZSs9MikscSl7Y2FzZSIw''@;'; put 'put ''MiI6WC5tb2QobGUpLmNtcChNKSYmKHRlKz04KTticmVhaztjYXNlIjA1Ijoob2U9WC5tb2QoTykpLmNtcChSKSYmb2UuY21wKHopJiYodGUrPTgpO2JyZWFrO2RlZmF1bHQ6dGUrPTR9cmV0dXJuIGpbZWVdPXRlLHRlfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29k''@;'; put 'put ''ZX19KSxCLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IGFlKEkodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQo''@;'; put 'put ''KSx0aGlzLmdldFB1YmxpY0tleSgpfSxCLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFgpe3ZhciBVPShYPShYPW5ldyBhZShYKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHE9bmV3IEJ1ZmZlcihVLnRvQXJyYXkoKSksZWU9dGhp''@;'; put 'put ''cy5nZXRQcmltZSgpO2lmKHEubGVuZ3RoPGVlLmxlbmd0aCl7dmFyIHRlPW5ldyBCdWZmZXIoZWUubGVuZ3RoLXEubGVuZ3RoKTt0ZS5maWxsKDApLHE9QnVmZmVyLmNvbmNhdChbdGUscV0pfXJldHVybiBxfSxCLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oVSl7cmV0dXJuIFko''@;'; put 'put ''dGhpcy5fcHViLFUpfSxCLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFUpe3JldHVybiBZKHRoaXMuX3ByaXYsVSl9LEIucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKFgpe3JldHVybiBZKHRoaXMuX19wcmltZSxYKX0sQi5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0''@;'; put 'put ''aW9uKFgpe3JldHVybiBZKHRoaXMuX2dlbixYKX0sQi5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKFgsVSl7cmV0dXJuIFU9VXx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihYKXx8KFg9bmV3IEJ1ZmZlcihYLFUpKSx0aGlzLl9fZ2VuPVgsdGhpcy5fZ2VuPW5ldyBhZShYKSx0aGlz''@;'; put 'put ''fX0sNzEwOTY6KGF0LEllLEYpPT57dmFyIGFlPUYoNDQwMTkpO2F0LmV4cG9ydHM9dGUsdGUuc2ltcGxlU2lldmU9cSx0ZS5mZXJtYXRUZXN0PWVlO3ZhciB4PUYoODczMDEpLG09bmV3IHgoMjQpLE09bmV3KEYoNDg2MDYpKSxPPW5ldyB4KDEpLFI9bmV3IHgoMiksej1uZXcgeCg1KSxrPShu''@;'; put 'put ''ZXcgeCgxNiksbmV3IHgoOCksbmV3IHgoMTApKSxFPW5ldyB4KDMpLFY9KG5ldyB4KDcpLG5ldyB4KDExKSksQj1uZXcgeCg0KSxYPShuZXcgeCgxMiksbnVsbCk7ZnVuY3Rpb24gcShvZSl7Zm9yKHZhciBzZT1mdW5jdGlvbiBVKCl7aWYobnVsbCE9PVgpcmV0dXJuIFg7dmFyIHNlPVtdO3Nl''@;'; put 'put ''WzBdPTI7Zm9yKHZhciBoZT0xLHVlPTM7dWU8MTA0ODU3Njt1ZSs9Mil7Zm9yKHZhciBjZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KHVlKSksRz0wO0c8aGUmJnNlW0ddPD1jZSYmdWUlc2VbR10hPTA7RysrKTtoZSE9PUcmJnNlW0ddPD1jZXx8KHNlW2hlKytdPXVlKX1yZXR1cm4gWD1zZSxzZX0o''@;'; put 'put ''KSxoZT0wO2hlPHNlLmxlbmd0aDtoZSsrKWlmKDA9PT1vZS5tb2RuKHNlW2hlXSkpcmV0dXJuIDA9PT1vZS5jbXBuKHNlW2hlXSk7cmV0dXJuITB9ZnVuY3Rpb24gZWUob2Upe3ZhciBzZT14Lm1vbnQob2UpO3JldHVybiAwPT09Ui50b1JlZChzZSkucmVkUG93KG9lLnN1Ym4oMSkpLmZyb21S''@;'; put 'put ''ZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIHRlKG9lLHNlKXtpZihvZTwxNilyZXR1cm4gbmV3IHgoMj09PXNlfHw1PT09c2U/WzE0MCwxMjNdOlsxNDAsMzldKTtzZT1uZXcgeChzZSk7Zm9yKHZhciBoZSx1ZTs7KXtmb3IoaGU9bmV3IHgoYWUoTWF0aC5jZWlsKG9lLzgpKSk7aGUuYml0TGVuZ3Ro''@;'; put 'put ''KCk+b2U7KWhlLmlzaHJuKDEpO2lmKGhlLmlzRXZlbigpJiZoZS5pYWRkKE8pLGhlLnRlc3RuKDEpfHxoZS5pYWRkKFIpLHNlLmNtcChSKSl7aWYoIXNlLmNtcCh6KSlmb3IoO2hlLm1vZChrKS5jbXAoRSk7KWhlLmlhZGQoQil9ZWxzZSBmb3IoO2hlLm1vZChtKS5jbXAoVik7KWhlLmlhZGQo''@;'; put 'put ''Qik7aWYocSh1ZT1oZS5zaHJuKDEpKSYmcShoZSkmJmVlKHVlKSYmZWUoaGUpJiZNLnRlc3QodWUpJiZNLnRlc3QoaGUpKXJldHVybiBoZX19fSw4NzMwMTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rpb24oKXt9O0QucHJvdG90eXBlPWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShHLGIsRCl7''@;'; put 'put ''aWYoTS5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8fCJiZSIpKX12YXIgTzsi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoNzc0OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEcsYil7dmFy''@;'; put 'put ''IEQ9Ry5jaGFyQ29kZUF0KGIpO3JldHVybiBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0QtODc6RC00OCYxNX1mdW5jdGlvbiB6KEcsYixEKXt2YXIgSD1SKEcsRCk7cmV0dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0KSxIfWZ1bmN0aW9uIEsoRyxiLEQsSCl7Zm9yKHZhciBO''@;'; put 'put ''PTAsZz1NYXRoLm1pbihHLmxlbmd0aCxEKSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMpLTQ4O04qPUgsTis9Uz49NDk/Uy00OSsxMDpTPj0xNz9TLTE3KzEwOlN9cmV0dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgTXx8bnVsbCE9PWImJiJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgYiYmYi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoYi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKTwwP2I6RH0s''@;'; put 'put ''TS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihiLEQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoYixELEgpOyJoZXgiPT09RCYmKEQ9MTYpLG0oRD09PSgw''@;'; put 'put ''fEQpJiZEPj0yJiZEPD0zNik7dmFyIE49MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKE4rKyx0aGlzLm5lZ2F0aXZlPTEpLE48Yi5sZW5ndGgmJigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixOLEgpOih0aGlzLl9wYXJzZUJhc2UoYixELE4pLCJsZSI9''@;'; put 'put ''PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihiLEQsSCl7YjwwJiYodGhpcy5uZWdhdGl2ZT0xLGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmJdLHRoaXMubGVuZ3RoPTEpOmI8''@;'; put 'put ''NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShiPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUi''@;'; put 'put ''PT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oYixELEgpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiLmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhp''@;'; put 'put ''czt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoYi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xLGc9MDtOPj0w''@;'; put 'put ''O04tPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihOPTAsZz0wO048Yi5sZW5ndGg7Tis9''@;'; put 'put ''Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5j''@;'; put 'put ''dGlvbihiLEQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBTLGc9MCxDPTA7aWYoImJlIj09PUgpZm9yKE49Yi5s''@;'; put 'put ''ZW5ndGgtMTtOPj1EO04tPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7ZWxzZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9EKzE6RDtOPGIubGVuZ3RoO04rPTIpUz16KGIsRCxOKTw8''@;'; put 'put ''Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgTj0w''@;'; put 'put ''LGc9MTtnPD02NzEwODg2MztnKj1EKU4rKztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxTPUMlTix2PU1hdGgubWluKEMsQy1TKStILHA9MCx3PUg7dzx2O3crPU4pcD1LKGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jk''@;'; put 'put ''c1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0aCxEKSx3PTA7dzxTO3crKylKKj1EO3RoaXMuaW11bG4oSiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgp''@;'; put 'put ''fSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyliLndvcmRzW0RdPXRoaXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5sZW5ndGgsYi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGIu''@;'; put 'put ''cmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoYiksYn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGI7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDty''@;'; put 'put ''ZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sTS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgST1bIiIs''@;'; put 'put ''IjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxrPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEU9WzAsMCwzMzU1''@;'; put 'put ''NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEs''@;'; put 'put ''NTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVihHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0''@;'; put 'put ''aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5sZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7dmFyIE49MHxHLndvcmRzWzBdLGc9MHxiLndvcmRzWzBdLEM9TipnLHY9Qy82NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4NjMmQztmb3IodmFyIHA9MTtwPEg7cCsrKXtmb3IodmFy''@;'; put 'put ''IHc9dj4+PjI2LEo9NjcxMDg4NjMmdixuZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4KDAscC1HLmxlbmd0aCsxKTtkZTw9bmU7ZGUrKyl3Kz0oQz0oTj0wfEcud29yZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2RlXSkrSikvNjcxMDg4NjR8MCxKPTY3MTA4ODYzJkM7RC53''@;'; put 'put ''b3Jkc1twXT0wfEosdj0wfHd9cmV0dXJuIDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5zdHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGIsRCl7dmFyIEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwxMCl8fCJoZXgiPT09Yil7SD0iIjtmb3IodmFyIE49MCxn''@;'; put 'put ''PTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihTPDxOfGcpKS50b1N0cmluZygxNik7SD0wIT0oZz1TPj4+MjQtTiYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP0lbNi12Lmxlbmd0aF0rditIOnYrSCwoTis9Mik+PTI2JiYoTi09''@;'; put 'put ''MjYsQy0tKX1mb3IoMCE9PWcmJihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihiPT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIgcD1rW2JdLHc9RVtiXTtIPSIiO3ZhciBKPXRoaXMuY2xv''@;'; put 'put ''bmUoKTtmb3IoSi5uZWdhdGl2ZT0wOyFKLmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmluZyhiKTtIPShKPUouaWRpdm4odykpLmlzWmVybygpP25lK0g6SVtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAi''@;'; put 'put ''K0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2IrPTY3MTA4''@;'; put 'put ''ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmU/LWI6Yn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1IiksdGhpcy50b0FycmF5TGlrZShPLGIsRCl9LE0ucHJv''@;'; put 'put ''dG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihiLEQsSCl7dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLE4pO20oTjw9ZywiYnl0ZSBhcnJh''@;'; put 'put ''eSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHYscCxDPSJsZSI9PT1ELFM9bmV3IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxu''@;'; put 'put ''KDI1NSksdy5pdXNocm4oOCksU1twXT12O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8Zy1OO3ArKylTW3BdPTA7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAtMV09dn1yZXR1cm4gU30sTS5wcm90b3R5cGUuX2NvdW50''@;'; put 'put ''Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlvbihiKXt2YXIgRD1iLEg9MDtyZXR1cm4gRD49NDA5NiYmKEgrPTEzLEQ+Pj49MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+PTgmJihIKz00LEQ+Pj49NCksRD49MiYmKEgrPTIsRD4+''@;'; put 'put ''Pj0yKSxIK0R9LE0ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4gMjY7dmFyIEQ9YixIPTA7cmV0dXJuIDgxOTEmRHx8KEgrPTEzLEQ+Pj49MTMpLDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8fChIKz00LEQ+Pj49NCksMyZEfHwoSCs9MixEPj4+PTIp''@;'; put 'put ''LDEmRHx8SCsrLEh9LE0ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5p''@;'; put 'put ''c1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbRF0pO2lmKGIrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgu''@;'; put 'put ''Y2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oYikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4g''@;'; put 'put ''dGhpcy50ZXN0bihiLTEpP3RoaXMubm90bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVn''@;'; put 'put ''KCl9LE0ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LE0ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zv''@;'; put 'put ''cih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRzW0RdO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGIp''@;'; put 'put ''fSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihiKTpiLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUo''@;'; put 'put ''KS5pdW9yKGIpOmIuY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihiKXt2YXIgRDtEPXRoaXMubGVuZ3RoPmIubGVuZ3RoP2I6dGhpcztmb3IodmFyIEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mYi53b3Jkc1tIXTty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMu''@;'; put 'put ''bGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoYik6Yi5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnBy''@;'; put 'put ''b3RvdHlwZS5pdXhvcj1mdW5jdGlvbihiKXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRoaXMsSD1iKTooRD1iLEg9dGhpcyk7Zm9yKHZhciBOPTA7TjxILmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dXkgud29yZHNbTl07aWYodGhpcyE9PUQpZm9yKDtOPEQu''@;'; put 'put ''bGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihiKX0sTS5w''@;'; put 'put ''cm90b3R5cGUueG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihiKTpiLmNsb25lKCkuaXhvcih0aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgp''@;'; put 'put ''Lml1eG9yKGIpOmIuY2xvbmUoKS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPTB8TWF0aC5jZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBhbmQoRCksSD4wJiZELS07Zm9yKHZhciBOPTA7TjxEO04r''@;'; put 'put ''Kyl0aGlzLndvcmRzW05dPTY3MTA4ODYzJn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndvcmRzW05dPX50aGlzLndvcmRzW05dJjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90''@;'; put 'put ''bihiKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgSD1iLzI2fDAsTj1iJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53b3Jkc1tIXXwxPDxOOnRoaXMud29yZHNbSF0mfigxPDxO''@;'; put 'put ''KSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtp''@;'; put 'put ''ZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSxiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6KEg9YixOPXRoaXMpO2Zvcih2YXIgZz0wLEM9MDtDPE4u''@;'; put 'put ''bGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29yZHNbQ10pK2cpLGc9RD4+PjI2O2Zvcig7MCE9PWcmJkM8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrZyksZz1EPj4+MjY7aWYodGhp''@;'; put 'put ''cy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDtDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihi''@;'; put 'put ''KXt2YXIgRDtyZXR1cm4gMCE9PWIubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsRD10aGlzLnN1YihiKSxiLm5lZ2F0aXZlXj0xLEQpOjA9PT1iLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEQ9Yi5zdWIodGhpcyksdGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0xLEQpOnRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIpe2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0aXZlPTA7dmFyIEQ9dGhpcy5pYWRkKGIpO3JldHVybiBi''@;'; put 'put ''Lm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5jbXAoYik7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49YixnPXRoaXMpO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYz''@;'; put 'put ''JkQ7Zm9yKDswIT09QyYmUzxOLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2lmKDA9PT1DJiZTPE4ubGVuZ3RoJiZOIT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Ti53b3Jkc1tTXTtyZXR1cm4g''@;'; put 'put ''dGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihiKX07dmFyIEI9ZnVuY3Rpb24oYixELEgpe3ZhciB2LHAs''@;'; put 'put ''dyxOPWIud29yZHMsZz1ELndvcmRzLEM9SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+Pj4xMyxmZT0wfE5bMV0seGU9ODE5MSZmZSxMZT1mZT4+PjEzLEZlPTB8TlsyXSxPZT04MTkxJkZlLEJlPUZlPj4+MTMsV2U9MHxOWzNdLEtlPTgxOTEmV2UsWWU9V2U+Pj4xMyxKZT0w''@;'; put 'put ''fE5bNF0sbHQ9ODE5MSZKZSxQZT1KZT4+PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxOWzZdLFhlPTgxOTEmcWUsVWU9cWU+Pj4xMyxodD0wfE5bN10sTWU9ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4XSxpdD04MTkxJnplLHV0PXplPj4+MTMsTXQ9MHxOWzld''@;'; put 'put ''LEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxvbj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8Z1sxXSxXbj04MTkxJmJuLGVuPWJuPj4+MTMsJG49MHxnWzJdLE5uPTgxOTEmJG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8Z1s0XSxfdD04''@;'; put 'put ''MTkxJlh0LE50PVh0Pj4+MTMsdm49MHxnWzVdLHJ0PTgxOTEmdm4sSXQ9dm4+Pj4xMyxKdD0wfGdbNl0sRHQ9ODE5MSZKdCxwdD1KdD4+PjEzLFl0PTB8Z1s3XSxMbj04MTkxJll0LHp0PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfGdbOV0sT249ODE5MSZC''@;'; put 'put ''biwkdD1Cbj4+PjEzO0gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBGbj0oUysodj1NYXRoLmltdWwobmUsQ24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVsKGRlLENuKXwwKSk8PDEzKXwwO1M9KCh3PU1hdGguaW11''@;'; put 'put ''bChkZSxVdCkpKyhwPj4+MTMpfDApKyhGbj4+PjI2KXwwLEZuJj02NzEwODg2Myx2PU1hdGguaW11bCh4ZSxDbikscD0ocD1NYXRoLmltdWwoeGUsVXQpKStNYXRoLmltdWwoTGUsQ24pfDAsdz1NYXRoLmltdWwoTGUsVXQpO3ZhciBuaT0oUysodj12K01hdGguaW11bChuZSxXbil8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZW4pfDApKyhwPj4+MTMpfDApKyhuaT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1hdGguaW11bChPZSxDbikscD0ocD1NYXRoLmltdWwoT2Us''@;'; put 'put ''VXQpKStNYXRoLmltdWwoQmUsQ24pfDAsdz1NYXRoLmltdWwoQmUsVXQpLHY9ditNYXRoLmltdWwoeGUsV24pfDAscD0ocD1wK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKExlLFduKXwwLHc9dytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIGxuPShTKyh2PXYrTWF0aC5pbXVsKG5lLE5u''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxObil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxmdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEtlLENuKSxwPShwPU1hdGgu''@;'; put 'put ''aW11bChLZSxVdCkpK01hdGguaW11bChZZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGguaW11bChPZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoQmUsV24pfDAsdz13K01hdGguaW11bChCZSxlbil8MCx2PXYrTWF0aC5pbXVsKHhlLE5uKXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChMZSxObil8MCx3PXcrTWF0aC5pbXVsKExlLGZ0KXwwO3ZhciBqbj0oUysodj12K01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHd0KXwwKStNYXRoLmltdWwoZGUsaG4pfDApKTw8''@;'; put 'put ''MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2Myx2PU1hdGguaW11bChsdCxDbikscD0ocD1NYXRoLmltdWwobHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAsdz1NYXRoLmltdWwoUGUsVXQpLHY9ditNYXRoLmltdWwo''@;'; put 'put ''S2UsV24pfDAscD0ocD1wK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytNYXRoLmltdWwoWWUsZW4pfDAsdj12K01hdGguaW11bChPZSxObil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoQmUsTm4pfDAsdz13K01hdGguaW11bChCZSxm''@;'; put 'put ''dCl8MCx2PXYrTWF0aC5pbXVsKHhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChMZSxobil8MCx3PXcrTWF0aC5pbXVsKExlLHd0KXwwO3ZhciBxcj0oUysodj12K01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLE50''@;'; put 'put ''KXwwKStNYXRoLmltdWwoZGUsX3QpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDApKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChBZSxDbikscD0ocD1NYXRoLmltdWwoQWUsVXQpKStNYXRoLmltdWwoVGUsQ24pfDAsdz1NYXRo''@;'; put 'put ''LmltdWwoVGUsVXQpLHY9ditNYXRoLmltdWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8MCkrTWF0aC5pbXVsKFBlLFduKXwwLHc9dytNYXRoLmltdWwoUGUsZW4pfDAsdj12K01hdGguaW11bChLZSxObil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''WWUsTm4pfDAsdz13K01hdGguaW11bChZZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChCZSxobil8MCx3PXcrTWF0aC5pbXVsKEJlLHd0KXwwLHY9ditNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1wK01hdGguaW11bCh4''@;'; put 'put ''ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwLHc9dytNYXRoLmltdWwoTGUsTnQpfDA7dmFyIGdpPShTKyh2PXYrTWF0aC5pbXVsKG5lLHJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsSXQpfDApK01hdGguaW11bChkZSxydCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGgu''@;'; put 'put ''aW11bChkZSxJdCl8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFhlLENuKSxwPShwPU1hdGguaW11bChYZSxVdCkpK01hdGguaW11bChVZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCksdj12K01hdGguaW11bChBZSxXbil8MCxwPShwPXArTWF0''@;'; put 'put ''aC5pbXVsKEFlLGVuKXwwKStNYXRoLmltdWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2PXYrTWF0aC5pbXVsKGx0LE5uKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxObil8MCx3PXcrTWF0aC5pbXVsKFBlLGZ0KXwwLHY9ditNYXRoLmltdWwo''@;'; put 'put ''S2UsaG4pfDAscD0ocD1wK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytNYXRoLmltdWwoWWUsd3QpfDAsdj12K01hdGguaW11bChPZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoQmUsX3QpfDAsdz13K01hdGguaW11bChCZSxO''@;'; put 'put ''dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsSXQpfDApK01hdGguaW11bChMZSxydCl8MCx3PXcrTWF0aC5pbXVsKExlLEl0KXwwO3ZhciB4cj0oUysodj12K01hdGguaW11bChuZSxEdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoZGUsRHQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChNZSxDbikscD0ocD1NYXRoLmltdWwoTWUsVXQpKStNYXRoLmltdWwoRGUsQ24pfDAsdz1NYXRo''@;'; put 'put ''LmltdWwoRGUsVXQpLHY9ditNYXRoLmltdWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8MCkrTWF0aC5pbXVsKFVlLFduKXwwLHc9dytNYXRoLmltdWwoVWUsZW4pfDAsdj12K01hdGguaW11bChBZSxObil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''VGUsTm4pfDAsdz13K01hdGguaW11bChUZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsd3QpfDApK01hdGguaW11bChQZSxobil8MCx3PXcrTWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1wK01hdGguaW11bChL''@;'; put 'put ''ZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGguaW11bChPZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLEl0KXwwKStNYXRoLmltdWwoQmUscnQpfDAsdz13K01hdGguaW11bChCZSxJdCl8MCx2PXYrTWF0aC5pbXVsKHhlLER0KXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChMZSxEdCl8MCx3PXcrTWF0aC5pbXVsKExlLHB0KXwwO3ZhciBVaT0oUysodj12K01hdGguaW11bChuZSxMbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoZGUsTG4pfDApKTw8''@;'; put 'put ''MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChpdCxDbikscD0ocD1NYXRoLmltdWwoaXQsVXQpKStNYXRoLmltdWwodXQsQ24pfDAsdz1NYXRoLmltdWwodXQsVXQpLHY9ditNYXRoLmltdWwo''@;'; put 'put ''TWUsV24pfDAscD0ocD1wK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytNYXRoLmltdWwoRGUsZW4pfDAsdj12K01hdGguaW11bChYZSxObil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsTm4pfDAsdz13K01hdGguaW11bChVZSxm''@;'; put 'put ''dCl8MCx2PXYrTWF0aC5pbXVsKEFlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8MCx3PXcrTWF0aC5pbXVsKFRlLHd0KXwwLHY9ditNYXRoLmltdWwobHQsX3QpfDAscD0ocD1wK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5pbXVsKFBlLF90KXww''@;'; put 'put ''LHc9dytNYXRoLmltdWwoUGUsTnQpfDAsdj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEl0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsdz13K01hdGguaW11bChZZSxJdCl8MCx2PXYrTWF0aC5pbXVsKE9lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UscHQpfDAp''@;'; put 'put ''K01hdGguaW11bChCZSxEdCl8MCx3PXcrTWF0aC5pbXVsKEJlLHB0KXwwLHY9ditNYXRoLmltdWwoeGUsTG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLExuKXwwLHc9dytNYXRoLmltdWwoTGUsenQpfDA7dmFyIEtyPShTKyh2PXYrTWF0aC5pbXVsKG5lLHhu''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxzbil8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LENuKSxwPShwPU1hdGgu''@;'; put 'put ''aW11bChIdCxVdCkpK01hdGguaW11bChQdCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGguaW11bChpdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwodXQsV24pfDAsdz13K01hdGguaW11bCh1dCxlbil8MCx2PXYrTWF0aC5pbXVsKE1lLE5uKXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxObil8MCx3PXcrTWF0aC5pbXVsKERlLGZ0KXwwLHY9ditNYXRoLmltdWwoWGUsaG4pfDAscD0ocD1wK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLHc9dytNYXRoLmltdWwoVWUsd3QpfDAsdj12''@;'; put 'put ''K01hdGguaW11bChBZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsdz13K01hdGguaW11bChUZSxOdCl8MCx2PXYrTWF0aC5pbXVsKGx0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxydCl8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKFBlLEl0KXwwLHY9ditNYXRoLmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLHc9dytNYXRoLmltdWwoWWUscHQpfDAsdj12K01hdGguaW11bChPZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoQmUsTG4pfDAsdz13K01hdGguaW11bChCZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bChMZSx4bil8MCx3PXcrTWF0aC5pbXVsKExlLHNuKXwwO3ZhciBubz0oUysodj12K01hdGguaW11bChuZSxPbil8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwoZGUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsJHQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxXbikscD0ocD1NYXRoLmltdWwoSHQs''@;'; put 'put ''ZW4pKStNYXRoLmltdWwoUHQsV24pfDAsdz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwoaXQsTm4pfDAscD0ocD1wK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKHV0LE5uKXwwLHc9dytNYXRoLmltdWwodXQsZnQpfDAsdj12K01hdGguaW11bChNZSxobil8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8MCx2PXYrTWF0aC5pbXVsKFhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFVlLE50KXwwLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoQWUscnQpfDAscD0ocD1wK01hdGguaW11bChBZSxJdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9dytNYXRoLmltdWwoVGUsSXQpfDAsdj12K01hdGguaW11bChsdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsdz13K01hdGguaW11bChQ''@;'; put 'put ''ZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEtlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxMbil8MCx3PXcrTWF0aC5pbXVsKFllLHp0KXwwLHY9ditNYXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKEJlLHhu''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoQmUsc24pfDA7dmFyIEZyPShTKyh2PXYrTWF0aC5pbXVsKHhlLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChMZSwkdCl8MCkrKHA+Pj4xMyl8''@;'; put 'put ''MCkrKEZyPj4+MjYpfDAsRnImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LE5uKSxwPShwPU1hdGguaW11bChIdCxmdCkpK01hdGguaW11bChQdCxObil8MCx3PU1hdGguaW11bChQdCxmdCksdj12K01hdGguaW11bChpdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHd0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwodXQsaG4pfDAsdz13K01hdGguaW11bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCx3PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditNYXRoLmltdWwoWGUscnQpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChYZSxJdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsSXQpfDAsdj12K01hdGguaW11bChBZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGguaW11bChUZSxwdCl8MCx2PXYrTWF0aC5pbXVsKGx0LExu''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxMbil8MCx3PXcrTWF0aC5pbXVsKFBlLHp0KXwwLHY9ditNYXRoLmltdWwoS2UseG4pfDAscD0ocD1wK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLHc9dytNYXRoLmltdWwoWWUsc24pfDA7''@;'; put 'put ''dmFyIHFpPShTKyh2PXYrTWF0aC5pbXVsKE9lLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11bChCZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChCZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYz''@;'; put 'put ''LHY9TWF0aC5pbXVsKEh0LGhuKSxwPShwPU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8MCx3PU1hdGguaW11bChQdCx3dCksdj12K01hdGguaW11bChpdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsdz13K01hdGguaW11bCh1''@;'; put 'put ''dCxOdCl8MCx2PXYrTWF0aC5pbXVsKE1lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsSXQpfDApK01hdGguaW11bChEZSxydCl8MCx3PXcrTWF0aC5pbXVsKERlLEl0KXwwLHY9ditNYXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01hdGguaW11bChYZSxwdCl8MCkrTWF0aC5pbXVsKFVlLER0''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoVWUscHQpfDAsdj12K01hdGguaW11bChBZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsTG4pfDAsdz13K01hdGguaW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVsKGx0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsc24p''@;'; put 'put ''fDApK01hdGguaW11bChQZSx4bil8MCx3PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12K01hdGguaW11bChLZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwo''@;'; put 'put ''WWUsJHQpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxfdCkscD0ocD1NYXRoLmltdWwoSHQsTnQpKStNYXRoLmltdWwoUHQsX3QpfDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditNYXRoLmltdWwoaXQscnQpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChpdCxJdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsSXQpfDAsdj12K01hdGguaW11bChNZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGguaW11bChEZSxwdCl8MCx2PXYrTWF0aC5pbXVsKFhlLExu''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsenQpfDApK01hdGguaW11bChVZSxMbil8MCx3PXcrTWF0aC5pbXVsKFVlLHp0KXwwLHY9ditNYXRoLmltdWwoQWUseG4pfDAscD0ocD1wK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLHc9dytNYXRoLmltdWwoVGUsc24pfDA7''@;'; put 'put ''dmFyIGFvPShTKyh2PXYrTWF0aC5pbXVsKGx0LE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYz''@;'; put 'put ''LHY9TWF0aC5pbXVsKEh0LHJ0KSxwPShwPU1hdGguaW11bChIdCxJdCkpK01hdGguaW11bChQdCxydCl8MCx3PU1hdGguaW11bChQdCxJdCksdj12K01hdGguaW11bChpdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LHB0KXwwKStNYXRoLmltdWwodXQsRHQpfDAsdz13K01hdGguaW11bCh1''@;'; put 'put ''dCxwdCl8MCx2PXYrTWF0aC5pbXVsKE1lLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxMbil8MCx3PXcrTWF0aC5pbXVsKERlLHp0KXwwLHY9ditNYXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhu''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoVWUsc24pfDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11bChUZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChUZSwkdCl8MCkrKHA+Pj4xMyl8''@;'; put 'put ''MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11bChIdCxwdCkpK01hdGguaW11bChQdCxEdCl8MCx3PU1hdGguaW11bChQdCxwdCksdj12K01hdGguaW11bChpdCxMbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwodXQsTG4pfDAsdz13K01hdGguaW11bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCx3PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBpbz0oUysodj12K01hdGguaW11bChYZSxPbil8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVWUsJHQpfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxMbikscD0ocD1NYXRoLmltdWwoSHQs''@;'; put 'put ''enQpKStNYXRoLmltdWwoUHQsTG4pfDAsdz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwoaXQseG4pfDAscD0ocD1wK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24pfDA7dmFyIEdpPShTKyh2PXYrTWF0aC5pbXVsKE1lLE9u''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChEZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHhuKSxwPShwPU1hdGgu''@;'; put 'put ''aW11bChIdCxzbikpK01hdGguaW11bChQdCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShTKyh2PXYrTWF0aC5pbXVsKGl0LE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoaXQsJHQpfDApK01hdGguaW11bCh1dCxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGgu''@;'; put 'put ''aW11bCh1dCwkdCl8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0oUysodj1NYXRoLmltdWwoSHQsT24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LE9uKXwwKSk8PDEzKXwwO3JldHVybiBTPSgodz1NYXRoLmlt''@;'; put 'put ''dWwoUHQsJHQpKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1GbixDWzFdPW5pLENbMl09bG4sQ1szXT1qbixDWzRdPXFyLENbNV09Z2ksQ1s2XT14cixDWzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEwXT1GcixDWzExXT1xaSxDWzEyXT1KaSxDWzEzXT1hbyxD''@;'; put 'put ''WzE0XT1ybyxDWzE1XT1pbyxDWzE2XT1HaSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gWChHLGIsRCl7cmV0dXJuKG5ldyBVKS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcsYil7dGhpcy54PUcsdGhpcy55PWJ9TWF0aC5pbXVsfHwo''@;'; put 'put ''Qj1WKSxNLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5sZW5ndGg7cmV0dXJuIEg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1iLmxlbmd0aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxiLEQpOk48MTAyND9mdW5jdGlvbiBZKEcsYixEKXtELm5l''@;'; put 'put ''Z2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3IodmFyIEg9MCxOPTAsZz0wO2c8RC5sZW5ndGgtMTtnKyspe3ZhciBDPU47Tj0wO2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0aC5taW4oZyxiLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAs''@;'; put 'put ''Zy1HLmxlbmd0aCsxKTtwPD12O3ArKyl7dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1twXSksZmU9NjcxMDg4NjMmZGU7Uz02NzEwODg2MyYoZmU9ZmUrU3wwKSxOKz0oQz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSsoZmU+Pj4yNil8MCk+Pj4yNixDJj02NzEwODg2M31ELndv''@;'; put 'put ''cmRzW2ddPVMsSD1DLEM9Tn1yZXR1cm4gMCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJpcCgpfSh0aGlzLGIsRCk6WCh0aGlzLGIsRCksSH0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9TS5wcm90b3R5cGUuX2NvdW50''@;'; put 'put ''Qml0cyhiKS0xLE49MDtOPGI7TisrKURbTl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oYixELEgpe2lmKDA9PT1ifHxiPT09SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9MDtnPEQ7ZysrKU58PSgxJmIpPDxELWctMSxiPj49MTty''@;'; put 'put ''ZXR1cm4gTn0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBTPTA7UzxDO1MrKylOW1NdPURbYltTXV0sZ1tTXT1IW2JbU11dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixELEgsTixnLEMpe3RoaXMucGVybXV0ZShDLGIsRCxILE4s''@;'; put 'put ''Zyk7Zm9yKHZhciBTPTE7UzxnO1M8PD0xKWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJL3YpLHc9TWF0aC5zaW4oMipNYXRoLlBJL3YpLEo9MDtKPGc7Sis9dilmb3IodmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUrKyl7dmFyIHhlPUhbSitmZV0sTGU9TltKK2ZlXSxGZT1I''@;'; put 'put ''W0orZmUrU10sT2U9TltKK2ZlK1NdLEJlPW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09eGUrKEZlPUJlKSxOW0orZmVdPUxlK09lLEhbSitmZStTXT14ZS1GZSxOW0orZmUrU109TGUtT2UsZmUhPT12JiYoQmU9cCpuZS13KmRlLGRlPXAqZGUrdypuZSxuZT1CZSl9fSxVLnBy''@;'; put 'put ''b3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEmSCxnPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpZysrO3JldHVybiAxPDxnKzErTn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGIsRCxIKXtpZighKEg8PTEpKWZvcih2YXIg''@;'; put 'put ''Tj0wO048SC8yO04rKyl7dmFyIGc9YltOXTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERbTl09LURbSC1OLTFdLERbSC1OLTFdPS1nfX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTAsTj0wO048RC8yO04rKyl7dmFyIGc9ODE5MipN''@;'; put 'put ''YXRoLnJvdW5kKGJbMipOKzFdL0QpK01hdGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZnLEg9Zzw2NzEwODg2ND8wOmcvNjcxMDg4NjR8MH1yZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihiLEQsSCxOKXtmb3IodmFyIGc9MCxDPTA7QzxEO0MrKylI''@;'; put 'put ''WzIqQ109ODE5MSYoZys9MHxiW0NdKSxIWzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihDPTIqRDtDPE47KytDKUhbQ109MDttKDA9PT1nKSxtKDA9PSgtODE5MiZnKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPTA7SDxi''@;'; put 'put ''O0grKylEW0hdPTA7cmV0dXJuIER9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYihiLmxlbmd0aCxELmxlbmd0aCksZz10aGlzLm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiksUz1uZXcgQXJyYXkoTiksdj1uZXcgQXJyYXkoTikscD1u''@;'; put 'put ''ZXcgQXJyYXkoTiksdz1uZXcgQXJyYXkoTiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRlPUgud29yZHM7ZGUubGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQxM2IoRC53b3JkcyxELmxlbmd0aCx3LE4pLHRoaXMudHJh''@;'; put 'put ''bnNmb3JtKFMsQyx2LHAsTixnKSx0aGlzLnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9MDtmZTxOO2ZlKyspe3ZhciB4ZT12W2ZlXSpKW2ZlXS1wW2ZlXSpuZVtmZV07cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpbZmVdLHZbZmVdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0''@;'; put 'put ''ZSh2LHAsTiksdGhpcy50cmFuc2Zvcm0odixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4pLHRoaXMubm9ybWFsaXplMTNiKGRlLE4pLEgubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVuZ3RoK0QubGVuZ3RoLEguc3RyaXAoKX0sTS5wcm90b3R5''@;'; put 'put ''cGUubXVsPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksdGhpcy5tdWxUbyhiLEQpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5l''@;'; put 'put ''dyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhiLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3''@;'; put 'put ''MTA4ODY0KTtmb3IodmFyIEQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKmIsZz0oNjcxMDg4NjMmTikrKDY3MTA4ODYzJkQpO0Q+Pj0yNixEKz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRoaXMud29yZHNbSF09NjcxMDg4NjMmZ31yZXR1cm4gMCE9''@;'; put 'put ''PUQmJih0aGlzLndvcmRzW0hdPUQsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGIpfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBlLmlz''@;'; put 'put ''cXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiKXt2YXIgRD1mdW5jdGlvbiBqKEcpe2Zvcih2YXIgYj1uZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgTj1EJTI2O2JbRF09''@;'; put 'put ''KEcud29yZHNbRC8yNnwwXSYxPDxOKT4+Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBIPXRoaXMsTj0wO048RC5sZW5ndGgmJjA9PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsrTjxELmxlbmd0aClmb3IodmFyIGc9SC5zcXIoKTtOPEQu''@;'; put 'put ''bGVuZ3RoO04rKyxnPWcuc3FyKCkpMCE9PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1EKS8yNixOPTY3MTA4ODYzPj4+MjYtRDw8MjYtRDtpZigw''@;'; put 'put ''IT09RCl7dmFyIEM9MDtmb3IoZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2ddJk47dGhpcy53b3Jkc1tnXT0oMHx0aGlzLndvcmRzW2ddKS1TPDxEfEMsQz1TPj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoZz10''@;'; put 'put ''aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXRoaXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7ZzxIO2crKyl0aGlzLndvcmRzW2ddPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09PXRo''@;'; put 'put ''aXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixELEgpe3ZhciBOO20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKSxOPUQ/KEQtRCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0aC5taW4oKGItZykvMjYsdGhpcy5sZW5ndGgpLFM9Njcx''@;'; put 'put ''MDg4NjNeNjcxMDg4NjM+Pj5nPDxnLHY9SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFyIHA9MDtwPEM7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHA9MDtwPHRoaXMu''@;'; put 'put ''bGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB3PTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFyIEo9MHx0aGlzLndvcmRzW3BdO3RoaXMud29yZHNbcF09''@;'; put 'put ''dzw8MjYtZ3xKPj4+Zyx3PUomU31yZXR1cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4g''@;'; put 'put ''bSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oYil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGIpfSxNLnBy''@;'; put 'put ''b3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''YiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxEKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVy''@;'; put 'put ''biBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09RCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1EJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0x''@;'; put 'put ''XSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5EPDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBiKSxt''@;'; put 'put ''KGI8NjcxMDg4NjQpLGI8MD90aGlzLmlzdWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGI/KHRoaXMud29yZHNbMF09Yi0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlz''@;'; put 'put ''LmlzdWJuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGIpe3RoaXMud29yZHNbMF0rPWI7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXT49NjcxMDg4NjQ7RCsrKXRoaXMud29yZHNbRF0t''@;'; put 'put ''PTY3MTA4ODY0LEQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxEKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGIpe2lmKG0oIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBiKSxtKGI8NjcxMDg4NjQpLGI8MClyZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWIsMT09PXRoaXMubGVuZ3RoJiZ0aGlz''@;'; put 'put ''LndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPDA7RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0LHRoaXMud29yZHNbRCsxXS09MTtyZXR1cm4gdGhpcy5z''@;'; put 'put ''dHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5kKGIubGVuZ3RoK0gpO3ZhciBDLFM9MDtmb3IoZz0wO2c8''@;'; put 'put ''Yi5sZW5ndGg7ZysrKXtDPSgwfHRoaXMud29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpEO1M9KChDLT02NzEwODg2MyZ2KT4+MjYpLSh2LzY3MTA4ODY0fDApLHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7Zzx0aGlzLmxlbmd0aC1IO2crKylTPShDPSgwfHRoaXMu''@;'; put 'put ''d29yZHNbZytIXSkrUyk+PjI2LHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG0oLTE9PT1TKSxTPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29yZHNbZ10pK1MpPj4yNix0aGlzLndvcmRzW2ddPTY3MTA4''@;'; put 'put ''ODYzJkM7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmNsb25lKCksZz1iLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhDKSkmJihnPWcudXNo''@;'; put 'put ''bG4oSCksTi5pdXNobG4oSCksQz0wfGcud29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgtZy5sZW5ndGg7aWYoIm1vZCIhPT1EKXsocD1uZXcgTShudWxsKSkubGVuZ3RoPXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3Kysp''@;'; put 'put ''cC53b3Jkc1t3XT0wfXZhciBKPU4uY2xvbmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0aXZlJiYoTj1KLHAmJihwLndvcmRzW3ZdPTEpKTtmb3IodmFyIG5lPXYtMTtuZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQqKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZV0pKygwfE4ud29y''@;'; put 'put ''ZHNbZy5sZW5ndGgrbmUtMV0pO2ZvcihkZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxuc3VibXVsKGcsZGUsbmUpOzAhPT1OLm5lZ2F0aXZlOylkZS0tLE4ubmVnYXRpdmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUpLE4uaXNaZXJvKCl8fChOLm5lZ2F0aXZlXj0xKTtwJiYo''@;'; put 'put ''cC53b3Jkc1tuZV09ZGUpfXJldHVybiBwJiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9PUgmJk4uaXVzaHJuKEgpLHtkaXY6cHx8bnVsbCxtb2Q6Tn19LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oIWIuaXNaZXJvKCkpLHRoaXMuaXNaZXJv''@;'; put 'put ''KCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcu''@;'; put 'put ''aWFkZChiKSkse2RpdjpOLG1vZDpnfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9kKGIubmVnKCksRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRoaXMubmVnYXRpdmUmYi5uZWdhdGl2ZT8oQz10aGlzLm5l''@;'; put 'put ''ZygpLmRpdm1vZChiLm5lZygpLEQpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaXN1YihiKSkse2RpdjpDLmRpdixtb2Q6Z30pOmIubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1iLmxl''@;'; put 'put ''bmd0aD8iZGl2Ij09PUQ/e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09RD97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkp''@;'; put 'put ''fTp0aGlzLl93b3JkRGl2KGIsRCk7dmFyIE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCExKS5tb2R9LE0ucHJv''@;'; put 'put ''dG90eXBlLnVtb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5kaXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkpcmV0dXJuIEQuZGl2O3ZhciBIPTAhPT1ELmRpdi5uZWdh''@;'; put 'put ''dGl2ZT9ELm1vZC5pc3ViKGIpOkQubW9kLE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChOKTtyZXR1cm4gQzwwfHwxPT09ZyYmMD09PUM/RC5kaXY6MCE9PUQuZGl2Lm5lZ2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0''@;'; put 'put ''aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSlIPShEKkgrKDB8dGhpcy53b3Jkc1tOXSkpJWI7cmV0dXJuIEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0w''@;'; put 'put ''LEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQqRDt0aGlzLndvcmRzW0hdPU4vYnwwLEQ9TiVifXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihi''@;'; put 'put ''KX0sTS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPW5ldyBNKDAp''@;'; put 'put ''LFM9bmV3IE0oMSksdj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrdjtmb3IodmFyIHA9SC5jbG9uZSgpLHc9RC5jbG9uZSgpOyFELmlzWmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTshKEQud29yZHNbMF0mbmUpJiZKPDI2OysrSixuZTw8PTEp''@;'; put 'put ''O2lmKEo+MClmb3IoRC5pdXNocm4oSik7Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5pYWRkKHApLGcuaXN1Yih3KSksTi5pdXNocm4oMSksZy5pdXNocm4oMSk7Zm9yKHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBdJmZlKSYmZGU8MjY7KytkZSxmZTw8PTEpO2lmKGRlPjAp''@;'; put 'put ''Zm9yKEguaXVzaHJuKGRlKTtkZS0tID4wOykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHApLFMuaXN1Yih3KSksQy5pdXNocm4oMSksUy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5pc3ViKFMpKTooSC5pc3ViKEQpLEMuaXN1YihOKSxTLmlz''@;'; put 'put ''dWIoZykpfXJldHVybnthOkMsYjpTLGdjZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgp''@;'; put 'put ''O2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgUz0wLHY9MTshKEQud29yZHNbMF0mdikmJlM8MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQuaXVzaHJuKFMpO1MtLSA+MDspTi5pc09kZCgpJiZOLmlh''@;'; put 'put ''ZGQoQyksTi5pdXNocm4oMSk7Zm9yKHZhciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3Asdzw8PTEpO2lmKHA+MClmb3IoSC5pdXNocm4ocCk7cC0tID4wOylnLmlzT2RkKCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihnKSk6''@;'; put 'put ''KEguaXN1YihEKSxnLmlzdWIoTikpfXJldHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAmJkouaWFkZChiKSxKfSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oYil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMoKTtpZihiLmlzWmVybygpKXJldHVybiB0aGlzLmFicygp''@;'; put 'put ''O3ZhciBEPXRoaXMuY2xvbmUoKSxIPWIuY2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgTj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7TisrKUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtELmlzRXZlbigpOylELml1c2hybigxKTtmb3IoO0gu''@;'; put 'put ''aXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1DfWVsc2UgaWYoMD09PWd8fDA9PT1ILmNtcG4oMSkpYnJlYWs7RC5pc3ViKEgpfXJldHVybiBILml1c2hsbihOKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5lZ2NkKGIpLmEudW1vZChiKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24o''@;'; put 'put ''Yil7cmV0dXJuIHRoaXMud29yZHNbMF0mYn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpO3ZhciBEPWIlMjYsSD0oYi1EKS8yNixOPTE8PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18''@;'; put 'put ''PU4sdGhpcztmb3IodmFyIGc9TixDPUg7MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRoaXMud29yZHNbQ107Zz0oUys9Zyk+Pj4yNix0aGlzLndvcmRzW0NdPVMmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbQ109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxN''@;'; put 'put ''LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihiKXt2YXIgSCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRp''@;'; put 'put ''dmUmJkQpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9LWIpLG0oYjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE49MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpOPGI/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''MHwtSDpIfSxNLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgRD10aGlzLnVjbXAoYik7cmV0dXJuIDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPzB8LUQ6RH0sTS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5iLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxiLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPTB8dGhpcy53b3Jk''@;'; put 'put ''c1tIXSxnPTB8Yi53b3Jkc1tIXTtpZihOIT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0dXJuIER9LE0ucHJvdG90eXBlLmd0bj1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNt''@;'; put 'put ''cChiKX0sTS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxNLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcG4oYil9LE0u''@;'; put 'put ''cHJvdG90eXBlLmx0PWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKTw9MH0sTS5wcm90b3R5cGUu''@;'; put 'put ''ZXFuPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wKGIpfSxNLnJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihiKXtyZXR1cm4g''@;'; put 'put ''bSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yZWQ9Yix0aGlzfSxN''@;'; put 'put ''LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRB''@;'; put 'put ''ZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGIp''@;'; put 'put ''fSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVk''@;'; put 'put ''SVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGIp''@;'; put 'put ''fSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9u''@;'; put 'put ''KGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5pbXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNx''@;'; put 'put ''cnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkJiYhYi5yZWQs''@;'; put 'put ''InJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYil9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxiKXt0aGlzLm5hbWU9Ryx0aGlzLnA9bmV3IE0oYiwxNiks''@;'; put 'put ''dGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHRlKCl7ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtlZS5jYWxsKHRoaXMsInAx''@;'; put 'put ''OTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGhlKCl7ZWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQi''@;'; put 'put ''KX1mdW5jdGlvbiB1ZShHKXtpZigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3RoaXMubT1iLnAsdGhpcy5wcmltZT1ifWVsc2UgbShHLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9u''@;'; put 'put ''IGNlKEcpe3VlLmNhbGwodGhpcyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3Fy''@;'; put 'put ''KCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWVlLnByb3RvdHlw''@;'; put 'put ''ZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxifSxlZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97dGhpcy5zcGxpdChELHRoaXMudG1wKSxIPShEPShEPXRo''@;'; put 'put ''aXMuaW11bEsoRCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIE49SDx0aGlzLm4/LTE6RC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1OPyhELndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4wP0QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PUQuc3RyaXA/''@;'; put 'put ''RC5zdHJpcCgpOkQuX3N0cmlwKCksRH0sZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5pdXNocm4odGhpcy5uLDAsRCl9LGVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9LGxlKHRlLGVlKSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVu''@;'; put 'put ''Y3Rpb24oYixEKXtmb3IodmFyIEg9NDE5NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47ZysrKUQud29yZHNbZ109Yi53b3Jkc1tnXTtpZihELmxlbmd0aD1OLGIubGVuZ3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAsdm9pZChiLmxlbmd0aD0xKTt2YXIgQz1iLndvcmRzWzld''@;'; put 'put ''O2ZvcihELndvcmRzW0QubGVuZ3RoKytdPUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIud29yZHNbZ107Yi53b3Jkc1tnLTEwXT0oUyZIKTw8NHxDPj4+MjIsQz1TfWIud29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0aC09MD09PUMmJmIubGVuZ3RoPjEwPzEwOjl9LHRlLnBy''@;'; put 'put ''b3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5ndGgrMV09MCxiLmxlbmd0aCs9Mjtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTtiLndvcmRzW0hdPTY3MTA4ODYzJihEKz05NzcqTiksRD02''@;'; put 'put ''NCpOKyhELzY3MTA4ODY0fDApfXJldHVybiAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3RoLS0sMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJmIubGVuZ3RoLS0pLGJ9LGxlKG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUpLGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtm''@;'; put 'put ''b3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02NzEwODg2MyZOO04+Pj49MjYsYi53b3Jkc1tIXT1nLEQ9Tn1yZXR1cm4gMCE9PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQpLGJ9LE0uX3ByaW1lPWZ1bmN0aW9uKGIpe2lmKHFbYl0p''@;'; put 'put ''cmV0dXJuIHFbYl07dmFyIEQ7aWYoImsyNTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIpRD1uZXcgb2U7ZWxzZSBpZigicDE5MiI9PT1iKUQ9bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2IpO0Q9bmV3IGhlfXJl''@;'; put 'put ''dHVybiBxW2JdPUQsRH0sdWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTI9''@;'; put 'put ''ZnVuY3Rpb24oYixEKXttKDA9PShiLm5lZ2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQmJmIucmVkPT09RC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oYil7''@;'; put 'put ''cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJvKCk/Yi5jbG9uZSgpOnRoaXMubS5zdWIoYikuX2ZvcmNl''@;'; put 'put ''UmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYixE''@;'; put 'put ''KXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYm''@;'; put 'put ''SC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaXN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24o''@;'; put 'put ''YixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0sdWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW11bChiLGIuY2xvbmUoKSl9LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsKGIsYil9LHVlLnByb3Rv''@;'; put 'put ''dHlwZS5zcXJ0PWZ1bmN0aW9uKGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10aGlzLm0uYW5kbG4oMyk7aWYobShEJTI9PTEpLDM9PT1EKXt2YXIgSD10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGIsSCl9Zm9yKHZhciBOPXRo''@;'; put 'put ''aXMubS5zdWJuKDEpLGc9MDshTi5pc1plcm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigxKTttKCFOLmlzWmVybygpKTt2YXIgQz1uZXcgTSgxKS50b1JlZCh0aGlzKSxTPUMucmVkTmVnKCksdj10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0uYml0TGVuZ3RoKCk7''@;'; put 'put ''Zm9yKHA9bmV3IE0oMipwKnApLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5yZWRJQWRkKFMpO2Zvcih2YXIgdz10aGlzLnBvdyhwLE4pLEo9dGhpcy5wb3coYixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhiLE4pLGRlPWc7MCE9PW5lLmNtcChDKTsp''@;'; put 'put ''e2Zvcih2YXIgZmU9bmUseGU9MDswIT09ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxkZSk7dmFyIExlPXRoaXMucG93KHcsbmV3IE0oMSkuaXVzaGxuKGRlLXhlLTEpKTtKPUoucmVkTXVsKExlKSx3PUxlLnJlZFNxcigpLG5lPW5lLnJlZE11bCh3KSxkZT14ZX1yZXR1cm4g''@;'; put 'put ''Sn0sdWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUQubmVnYXRpdmU/KEQubmVnYXRpdmU9MCx0aGlzLmltb2QoRCkucmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiLEQpe2lmKEQu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgTj1uZXcgQXJyYXkoMTYpO05bMF09bmV3IE0oMSkudG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIgZz0yO2c8Ti5sZW5ndGg7ZysrKU5bZ109dGhpcy5tdWwo''@;'; put 'put ''TltnLTFdLGIpO3ZhciBDPU5bMF0sUz0wLHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksZz1ELmxlbmd0aC0xO2c+PTA7Zy0tKXtmb3IodmFyIHc9RC53b3Jkc1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5lPXc+PkomMTtDIT09TlswXSYmKEM9dGhpcy5zcXIoQykp''@;'; put 'put ''LDAhPT1uZXx8MCE9PVM/KFM8PD0xLFN8PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMubXVsKEMsTltTXSksdj0wLFM9MCkpOnY9MH1wPTI2fXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3ZhciBEPWIudW1vZCh0aGlzLm0pO3JldHVybiBE''@;'; put 'put ''PT09Yj9ELmNsb25lKCk6RH0sdWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPWIuY2xvbmUoKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxNLm1vbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUoY2UsdWUpLGNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVu''@;'; put 'put ''Y3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuaW1vZChiLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxjZS5wcm90b3R5cGUuaW11bD1mdW5jdGlv''@;'; put 'put ''bihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0aD0xLGI7dmFyIEg9Yi5pbXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVz''@;'; put 'put ''aHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVy''@;'; put 'put ''bygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNt''@;'; put 'put ''cCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNl''@;'; put 'put ''UmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQpLHRoaXMpfSw3MDg5NjpmdW5jdGlvbihhdCl7YXQuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJZShNZSl7cmV0dXJuKEllPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0''@;'; put 'put ''ZXJhdG9yP2Z1bmN0aW9uKERlKXtyZXR1cm4gdHlwZW9mIERlfTpmdW5jdGlvbihEZSl7cmV0dXJuIERlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZEZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmRGUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBEZX0pKE1lKX1mdW5j''@;'; put 'put ''dGlvbiBGKE1lLERlKXtyZXR1cm4oRj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGl0LHV0KXtyZXR1cm4gaXQuX19wcm90b19fPXV0LGl0fSkoTWUsRGUpfWZ1bmN0aW9uIHgoTWUsRGUsemUpe3JldHVybih4PWZ1bmN0aW9uIGFlKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwh''@;'; put 'put ''UmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rp''@;'; put 'put ''b24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpP1JlZmxlY3QuY29uc3RydWN0OmZ1bmN0aW9uKHV0LE10LEh0KXt2YXIgUHQ9W251bGxdO1B0LnB1c2guYXBwbHkoUHQsTXQpO3ZhciBDbj1uZXcoRnVuY3Rpb24uYmluZC5hcHBseSh1dCxQdCkpO3JldHVybiBIdCYmRihDbixIdC5wcm90''@;'; put 'put ''b3R5cGUpLENufSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIG0oTWUpe3JldHVybiBmdW5jdGlvbiBsZShNZSl7aWYoQXJyYXkuaXNBcnJheShNZSkpcmV0dXJuIFIoTWUpfShNZSl8fGZ1bmN0aW9uIE0oTWUpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1NZVtTeW1ib2wu''@;'; put 'put ''aXRlcmF0b3JdfHxudWxsIT1NZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKE1lKX0oTWUpfHxmdW5jdGlvbiBPKE1lLERlKXtpZihNZSl7aWYoInN0cmluZyI9PXR5cGVvZiBNZSlyZXR1cm4gUihNZSxEZSk7dmFyIHplPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChN''@;'; put 'put ''ZSkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT16ZSYmTWUuY29uc3RydWN0b3ImJih6ZT1NZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXplfHwiU2V0Ij09PXplKXJldHVybiBBcnJheS5mcm9tKE1lKTtpZigiQXJndW1lbnRzIj09PXplfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/''@;'; put 'put ''OkNsYW1wZWQpP0FycmF5JC8udGVzdCh6ZSkpcmV0dXJuIFIoTWUsRGUpfX0oTWUpfHxmdW5jdGlvbiB6KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFy''@;'; put 'put ''cmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gUihNZSxEZSl7KG51bGw9PURlfHxEZT5NZS5sZW5ndGgpJiYoRGU9TWUubGVuZ3RoKTtmb3IodmFyIHplPTAsaXQ9bmV3IEFycmF5KERlKTt6ZTxEZTt6ZSsrKWl0W3plXT1N''@;'; put 'put ''ZVt6ZV07cmV0dXJuIGl0fXZhciBLPU9iamVjdC5oYXNPd25Qcm9wZXJ0eSxJPU9iamVjdC5zZXRQcm90b3R5cGVPZixrPU9iamVjdC5pc0Zyb3plbixFPU9iamVjdC5nZXRQcm90b3R5cGVPZixqPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsVj1PYmplY3QuZnJlZXplLEI9T2Jq''@;'; put 'put ''ZWN0LnNlYWwsWT1PYmplY3QuY3JlYXRlLFg9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LFU9WC5hcHBseSxxPVguY29uc3RydWN0O1V8fChVPWZ1bmN0aW9uKERlLHplLGl0KXtyZXR1cm4gRGUuYXBwbHkoemUsaXQpfSksVnx8KFY9ZnVuY3Rpb24oRGUpe3JldHVybiBEZX0pLEJ8fChC''@;'; put 'put ''PWZ1bmN0aW9uKERlKXtyZXR1cm4gRGV9KSxxfHwocT1mdW5jdGlvbihEZSx6ZSl7cmV0dXJuIHgoRGUsbSh6ZSkpfSk7dmFyIGVlPU4oQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLHRlPU4oQXJyYXkucHJvdG90eXBlLnBvcCksb2U9TihBcnJheS5wcm90b3R5cGUucHVzaCksc2U9TihTdHJp''@;'; put 'put ''bmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxoZT1OKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLHVlPU4oU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksY2U9TihTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLEc9TihTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpLGI9TihTdHJpbmcucHJvdG90''@;'; put 'put ''eXBlLnRyaW0pLEQ9TihSZWdFeHAucHJvdG90eXBlLnRlc3QpLEg9ZnVuY3Rpb24gZyhNZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBEZT1hcmd1bWVudHMubGVuZ3RoLHplPW5ldyBBcnJheShEZSksaXQ9MDtpdDxEZTtpdCsrKXplW2l0XT1hcmd1bWVudHNbaXRdO3JldHVybiBxKE1l''@;'; put 'put ''LHplKX19KFR5cGVFcnJvcik7ZnVuY3Rpb24gTihNZSl7cmV0dXJuIGZ1bmN0aW9uKERlKXtmb3IodmFyIHplPWFyZ3VtZW50cy5sZW5ndGgsaXQ9bmV3IEFycmF5KHplPjE/emUtMTowKSx1dD0xO3V0PHplO3V0KyspaXRbdXQtMV09YXJndW1lbnRzW3V0XTtyZXR1cm4gVShNZSxEZSxpdCl9''@;'; put 'put ''fWZ1bmN0aW9uIEMoTWUsRGUsemUpe3ZhciBpdDt6ZT1udWxsIT09KGl0PXplKSYmdm9pZCAwIT09aXQ/aXQ6c2UsSSYmSShNZSxudWxsKTtmb3IodmFyIHV0PURlLmxlbmd0aDt1dC0tOyl7dmFyIE10PURlW3V0XTtpZigic3RyaW5nIj09dHlwZW9mIE10KXt2YXIgSHQ9emUoTXQpO0h0IT09''@;'; put 'put ''TXQmJihrKERlKXx8KERlW3V0XT1IdCksTXQ9SHQpfU1lW010XT0hMH1yZXR1cm4gTWV9ZnVuY3Rpb24gUyhNZSl7dmFyIHplLERlPVkobnVsbCk7Zm9yKHplIGluIE1lKSEwPT09VShLLE1lLFt6ZV0pJiYoRGVbemVdPU1lW3plXSk7cmV0dXJuIERlfWZ1bmN0aW9uIHYoTWUsRGUpe2Zvcig7''@;'; put 'put ''bnVsbCE9PU1lOyl7dmFyIHplPWooTWUsRGUpO2lmKHplKXtpZih6ZS5nZXQpcmV0dXJuIE4oemUuZ2V0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgemUudmFsdWUpcmV0dXJuIE4oemUudmFsdWUpfU1lPUUoTWUpfXJldHVybiBmdW5jdGlvbiBpdCh1dCl7cmV0dXJuIGNvbnNvbGUud2Fybigi''@;'; put 'put ''ZmFsbGJhY2sgdmFsdWUgZm9yIix1dCksbnVsbH19dmFyIHA9VihbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9u''@;'; put 'put ''IiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1l''@;'; put 'put ''bnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxh''@;'; put 'put ''YmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0''@;'; put 'put ''IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4''@;'; put 'put ''dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksdz1WKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90''@;'; put 'put ''aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJt''@;'; put 'put ''ZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2Vy''@;'; put 'put ''biJdKSxKPVYoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZUZsb29kIiwiZmVGdW5j''@;'; put 'put ''QSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRp''@;'; put 'put ''bGUiLCJmZVR1cmJ1bGVuY2UiXSksbmU9VihbImFuaW1hdGUiLCJjb2xvci1wcm9maWxlIiwiY3Vyc29yIiwiZGlzY2FyZCIsImZlZHJvcHNoYWRvdyIsImZvbnQtZmFjZSIsImZvbnQtZmFjZS1mb3JtYXQiLCJmb250LWZhY2UtbmFtZSIsImZvbnQtZmFjZS1zcmMiLCJmb250LWZhY2UtdXJp''@;'; put 'put ''IiwiZm9yZWlnbm9iamVjdCIsImhhdGNoIiwiaGF0Y2hwYXRoIiwibWVzaCIsIm1lc2hncmFkaWVudCIsIm1lc2hwYXRjaCIsIm1lc2hyb3ciLCJtaXNzaW5nLWdseXBoIiwic2NyaXB0Iiwic2V0Iiwic29saWRjb2xvciIsInVua25vd24iLCJ1c2UiXSksZGU9VihbIm1hdGgiLCJtZW5jbG9z''@;'; put 'put ''ZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIs''@;'; put 'put ''Im1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIl0pLGZlPVYoWyJtYWN0aW9uIiwibWFsaWduZ3JvdXAiLCJtYWxpZ25tYXJrIiwibWxvbmdkaXYiLCJtc2NhcnJpZXMiLCJtc2NhcnJ5IiwibXNncm91cCIsIm1zdGFjayIs''@;'; put 'put ''Im1zbGluZSIsIm1zcm93Iiwic2VtYW50aWNzIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb24teG1sIiwibXByZXNjcmlwdHMiLCJub25lIl0pLHhlPVYoWyIjdGV4dCJdKSxMZT1WKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0''@;'; put 'put ''ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIsImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIs''@;'; put 'put ''ImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5nIiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdn''@;'; put 'put ''YWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRlbiIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJs''@;'; put 'put ''b2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJu''@;'; put 'put ''IiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNl''@;'; put 'put ''bGVjdGVkIiwic2hhcGUiLCJzaXplIiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0''@;'; put 'put ''aCIsInhtbG5zIiwic2xvdCJdKSxGZT1WKFsiYWNjZW50LWhlaWdodCIsImFjY3VtdWxhdGUiLCJhZGRpdGl2ZSIsImFsaWdubWVudC1iYXNlbGluZSIsImFzY2VudCIsImF0dHJpYnV0ZW5hbWUiLCJhdHRyaWJ1dGV0eXBlIiwiYXppbXV0aCIsImJhc2VmcmVxdWVuY3kiLCJiYXNlbGluZS1z''@;'; put 'put ''aGlmdCIsImJlZ2luIiwiYmlhcyIsImJ5IiwiY2xhc3MiLCJjbGlwIiwiY2xpcHBhdGh1bml0cyIsImNsaXAtcGF0aCIsImNsaXAtcnVsZSIsImNvbG9yIiwiY29sb3ItaW50ZXJwb2xhdGlvbiIsImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIsImNvbG9yLXByb2ZpbGUiLCJjb2xvci1y''@;'; put 'put ''ZW5kZXJpbmciLCJjeCIsImN5IiwiZCIsImR4IiwiZHkiLCJkaWZmdXNlY29uc3RhbnQiLCJkaXJlY3Rpb24iLCJkaXNwbGF5IiwiZGl2aXNvciIsImR1ciIsImVkZ2Vtb2RlIiwiZWxldmF0aW9uIiwiZW5kIiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZp''@;'; put 'put ''bHRlcnVuaXRzIiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJn''@;'; put 'put ''bHlwaC1uYW1lIiwiZ2x5cGhyZWYiLCJncmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFuc2Zvcm0iLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJpbWFnZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJrZXlzcGxpbmVz''@;'; put 'put ''Iiwia2V5dGltZXMiLCJsYW5nIiwibGVuZ3RoYWRqdXN0IiwibGV0dGVyLXNwYWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJuZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2NhbCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya2VyaGVpZ2h0''@;'; put 'put ''IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3aWR0aCIsIm1hc2tjb250ZW50dW5pdHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNrIiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFtZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIsIm9wYWNpdHkiLCJvcmRlciIsIm9y''@;'; put 'put ''aWVudCIsIm9yaWVudGF0aW9uIiwib3JpZ2luIiwib3ZlcmZsb3ciLCJwYWludC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3RoIiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFuc2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVzZXJ2ZWFscGhhIiwicHJlc2VydmVh''@;'; put 'put ''c3BlY3RyYXRpbyIsInByaW1pdGl2ZXVuaXRzIiwiciIsInJ4IiwicnkiLCJyYWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVhdGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3VsdCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJlbmRlcmluZyIsInNwZWN1bGFyY29u''@;'; put 'put ''c3RhbnQiLCJzcGVjdWxhcmV4cG9uZW50Iiwic3ByZWFkbWV0aG9kIiwic3RhcnRvZmZzZXQiLCJzdGRkZXZpYXRpb24iLCJzdGl0Y2h0aWxlcyIsInN0b3AtY29sb3IiLCJzdG9wLW9wYWNpdHkiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtbGluZWNh''@;'; put 'put ''cCIsInN0cm9rZS1saW5lam9pbiIsInN0cm9rZS1taXRlcmxpbWl0Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiLCJzdHlsZSIsInN1cmZhY2VzY2FsZSIsInN5c3RlbWxhbmd1YWdlIiwidGFiaW5kZXgiLCJ0YXJnZXR4IiwidGFyZ2V0eSIsInRyYW5zZm9ybSIs''@;'; put 'put ''InRyYW5zZm9ybS1vcmlnaW4iLCJ0ZXh0LWFuY2hvciIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtcmVuZGVyaW5nIiwidGV4dGxlbmd0aCIsInR5cGUiLCJ1MSIsInUyIiwidW5pY29kZSIsInZhbHVlcyIsInZpZXdib3giLCJ2aXNpYmlsaXR5IiwidmVyc2lvbiIsInZlcnQtYWR2LXkiLCJ2''@;'; put 'put ''ZXJ0LW9yaWdpbi14IiwidmVydC1vcmlnaW4teSIsIndpZHRoIiwid29yZC1zcGFjaW5nIiwid3JhcCIsIndyaXRpbmctbW9kZSIsInhjaGFubmVsc2VsZWN0b3IiLCJ5Y2hhbm5lbHNlbGVjdG9yIiwieCIsIngxIiwieDIiLCJ4bWxucyIsInkiLCJ5MSIsInkyIiwieiIsInpvb21hbmRwYW4i''@;'; put 'put ''XSksT2U9VihbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwi''@;'; put 'put ''ZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJt''@;'; put 'put ''b3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVj''@;'; put 'put ''dGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxCZT1WKFsieGxpbms6aHJlZiIsInhtbDppZCIsInhsaW5rOnRpdGxlIiwieG1sOnNw''@;'; put 'put ''YWNlIiwieG1sbnM6eGxpbmsiXSksV2U9QigvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLEtlPUIoLzwlW1x3XFddKnxbXHdcV10qJT4vZ20pLFllPUIoL1wke1tcd1xXXSp9L2dtKSxKZT1CKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLGx0PUIoL15hcmlhLVtcLVx3XSskLyks''@;'; put 'put ''UGU9QigvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xjaWR8eG1wcCk6fFteYS16XXxbYS16Ky5cLV0rKD86W15hLXorLlwtOl18JCkpL2kpLGJlPUIoL14oPzpcdytzY3JpcHR8ZGF0YSk6L2kpLEFlPUIoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUy''@;'; put 'put ''MDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksVGU9QigvXmh0bWwkL2kpO3JldHVybiBmdW5jdGlvbiBVZSgpe3ZhciBNZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3csRGU9ZnVuY3Rp''@;'; put 'put ''b24oWW4pe3JldHVybiBVZShZbil9O2lmKERlLnZlcnNpb249IjIuNC43IixEZS5yZW1vdmVkPVtdLCFNZXx8IU1lLmRvY3VtZW50fHw5IT09TWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIERlLmlzU3VwcG9ydGVkPSExLERlO3ZhciB6ZT1NZS5kb2N1bWVudCxpdD1NZS5kb2N1bWVudCx1''@;'; put 'put ''dD1NZS5Eb2N1bWVudEZyYWdtZW50LE10PU1lLkhUTUxUZW1wbGF0ZUVsZW1lbnQsSHQ9TWUuTm9kZSxQdD1NZS5FbGVtZW50LG9uPU1lLk5vZGVGaWx0ZXIsQ249TWUuTmFtZWROb2RlTWFwLFV0PXZvaWQgMD09PUNuP01lLk5hbWVkTm9kZU1hcHx8TWUuTW96TmFtZWRBdHRyTWFwOkNuLGJu''@;'; put 'put ''PU1lLkhUTUxGb3JtRWxlbWVudCxXbj1NZS5ET01QYXJzZXIsZW49TWUudHJ1c3RlZFR5cGVzLCRuPVB0LnByb3RvdHlwZSxObj12KCRuLCJjbG9uZU5vZGUiKSxmdD12KCRuLCJuZXh0U2libGluZyIpLGZuPXYoJG4sImNoaWxkTm9kZXMiKSxobj12KCRuLCJwYXJlbnROb2RlIik7aWYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIE10KXt2YXIgd3Q9aXQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3dC5jb250ZW50JiZ3dC5jb250ZW50Lm93bmVyRG9jdW1lbnQmJihpdD13dC5jb250ZW50Lm93bmVyRG9jdW1lbnQpfXZhciBYdD1mdW5jdGlvbihEZSx6ZSl7aWYoIm9iamVjdCIhPT1JZShE''@;'; put 'put ''ZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBEZS5jcmVhdGVQb2xpY3kpcmV0dXJuIG51bGw7dmFyIGl0PW51bGwsdXQ9ImRhdGEtdHQtcG9saWN5LXN1ZmZpeCI7emUuY3VycmVudFNjcmlwdCYmemUuY3VycmVudFNjcmlwdC5oYXNBdHRyaWJ1dGUodXQpJiYoaXQ9emUuY3VycmVudFNjcmlwdC5n''@;'; put 'put ''ZXRBdHRyaWJ1dGUodXQpKTt2YXIgTXQ9ImRvbXB1cmlmeSIrKGl0PyIjIitpdDoiIik7dHJ5e3JldHVybiBEZS5jcmVhdGVQb2xpY3koTXQse2NyZWF0ZUhUTUw6ZnVuY3Rpb24oUHQpe3JldHVybiBQdH0sY3JlYXRlU2NyaXB0VVJMOmZ1bmN0aW9uKFB0KXtyZXR1cm4gUHR9fSl9Y2F0Y2h7''@;'; put 'put ''cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK010KyIgY291bGQgbm90IGJlIGNyZWF0ZWQuIiksbnVsbH19KGVuLHplKSxfdD1YdD9YdC5jcmVhdGVIVE1MKCIiKToiIix2bj1pdC5pbXBsZW1lbnRhdGlvbixydD1pdC5jcmVhdGVOb2RlSXRlcmF0b3IsSXQ9aXQu''@;'; put 'put ''Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCxKdD1pdC5nZXRFbGVtZW50c0J5VGFnTmFtZSxEdD16ZS5pbXBvcnROb2RlLHB0PXt9O3RyeXtwdD1TKGl0KS5kb2N1bWVudE1vZGU/aXQuZG9jdW1lbnRNb2RlOnt9fWNhdGNoe312YXIgWXQ9e307RGUuaXNTdXBwb3J0ZWQ9ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGhuJiZ2biYmdm9pZCAwIT09dm4uY3JlYXRlSFRNTERvY3VtZW50JiY5IT09cHQ7dmFyIGVhLCRhLExuPVdlLHp0PUtlLHluPVllLHhuPUplLHNuPWx0LEJuPWJlLE9uPUFlLCR0PVBlLEZuPW51bGwsbmk9Qyh7fSxbXS5jb25jYXQobShwKSxtKHcpLG0oSiksbShkZSksbSh4ZSkpKSxs''@;'; put 'put ''bj1udWxsLGpuPUMoe30sW10uY29uY2F0KG0oTGUpLG0oRmUpLG0oT2UpLG0oQmUpKSkscXI9T2JqZWN0LnNlYWwoT2JqZWN0LmNyZWF0ZShudWxsLHt0YWdOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5h''@;'; put 'put ''bWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksZ2k9bnVsbCx4cj1udWxs''@;'; put 'put ''LFVpPSEwLEtyPSEwLG5vPSExLEZyPSEwLHFpPSExLEppPSExLGFvPSExLHJvPSExLGlvPSExLEdpPSExLGhvPSExLHlyPSEwLFBpPSExLGhzPSEwLHJzPSExLExjPXt9LHVsPW51bGwsUmM9Qyh7fSxbImFubm90YXRpb24teG1sIiwiYXVkaW8iLCJjb2xncm91cCIsImRlc2MiLCJmb3JlaWdu''@;'; put 'put ''b2JqZWN0IiwiaGVhZCIsImlmcmFtZSIsIm1hdGgiLCJtaSIsIm1uIiwibW8iLCJtcyIsIm10ZXh0Iiwibm9lbWJlZCIsIm5vZnJhbWVzIiwibm9zY3JpcHQiLCJwbGFpbnRleHQiLCJzY3JpcHQiLCJzdHlsZSIsInN2ZyIsInRlbXBsYXRlIiwidGhlYWQiLCJ0aXRsZSIsInZpZGVvIiwieG1w''@;'; put 'put ''Il0pLE4wPW51bGwsczM9Qyh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pLGsyPW51bGwsZTA9Qyh7fSxbImFsdCIsImNsYXNzIiwiZm9yIiwiaWQiLCJsYWJlbCIsIm5hbWUiLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJyb2xlIiwic3VtbWFy''@;'; put 'put ''eSIsInRpdGxlIiwidmFsdWUiLCJzdHlsZSIsInhtbG5zIl0pLHh1PSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixmcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFBhPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTcj1QYSxBMj0hMSxhMz1udWxsLFBo''@;'; put 'put ''PUMoe30sW3h1LGZzLFBhXSxoZSksaXM9WyJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCJ0ZXh0L2h0bWwiXSx0MD1udWxsLFNhPWl0LmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxGaD1mdW5jdGlvbihZbil7cmV0dXJuIFluIGluc3RhbmNlb2YgUmVnRXhwfHxZbiBpbnN0YW5jZW9mIEZ1bmN0aW9u''@;'; put 'put ''fSxFdT1mdW5jdGlvbihZbil7dDAmJnQwPT09WW58fCgoIVlufHwib2JqZWN0IiE9PUllKFluKSkmJihZbj17fSksWW49UyhZbiksZWE9ZWE9LTE9PT1pcy5pbmRleE9mKFluLlBBUlNFUl9NRURJQV9UWVBFKT8idGV4dC9odG1sIjpZbi5QQVJTRVJfTUVESUFfVFlQRSwkYT0iYXBwbGljYXRp''@;'; put 'put ''b24veGh0bWwreG1sIj09PWVhP2hlOnNlLEZuPSJBTExPV0VEX1RBR1MiaW4gWW4/Qyh7fSxZbi5BTExPV0VEX1RBR1MsJGEpOm5pLGxuPSJBTExPV0VEX0FUVFIiaW4gWW4/Qyh7fSxZbi5BTExPV0VEX0FUVFIsJGEpOmpuLGEzPSJBTExPV0VEX05BTUVTUEFDRVMiaW4gWW4/Qyh7fSxZbi5B''@;'; put 'put ''TExPV0VEX05BTUVTUEFDRVMsaGUpOlBoLGsyPSJBRERfVVJJX1NBRkVfQVRUUiJpbiBZbj9DKFMoZTApLFluLkFERF9VUklfU0FGRV9BVFRSLCRhKTplMCxOMD0iQUREX0RBVEFfVVJJX1RBR1MiaW4gWW4/QyhTKHMzKSxZbi5BRERfREFUQV9VUklfVEFHUywkYSk6czMsdWw9IkZPUkJJRF9D''@;'; put 'put ''T05URU5UUyJpbiBZbj9DKHt9LFluLkZPUkJJRF9DT05URU5UUywkYSk6UmMsZ2k9IkZPUkJJRF9UQUdTImluIFluP0Moe30sWW4uRk9SQklEX1RBR1MsJGEpOnt9LHhyPSJGT1JCSURfQVRUUiJpbiBZbj9DKHt9LFluLkZPUkJJRF9BVFRSLCRhKTp7fSxMYz0iVVNFX1BST0ZJTEVTImluIFlu''@;'; put 'put ''JiZZbi5VU0VfUFJPRklMRVMsVWk9ITEhPT1Zbi5BTExPV19BUklBX0FUVFIsS3I9ITEhPT1Zbi5BTExPV19EQVRBX0FUVFIsbm89WW4uQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLEZyPSExIT09WW4uQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSLHFpPVluLlNBRkVfRk9SX1RFTVBMQVRF''@;'; put 'put ''U3x8ITEsSmk9WW4uV0hPTEVfRE9DVU1FTlR8fCExLGlvPVluLlJFVFVSTl9ET018fCExLEdpPVluLlJFVFVSTl9ET01fRlJBR01FTlR8fCExLGhvPVluLlJFVFVSTl9UUlVTVEVEX1RZUEV8fCExLHJvPVluLkZPUkNFX0JPRFl8fCExLHlyPSExIT09WW4uU0FOSVRJWkVfRE9NLFBpPVluLlNB''@;'; put 'put ''TklUSVpFX05BTUVEX1BST1BTfHwhMSxocz0hMSE9PVluLktFRVBfQ09OVEVOVCxycz1Zbi5JTl9QTEFDRXx8ITEsJHQ9WW4uQUxMT1dFRF9VUklfUkVHRVhQfHwkdCxTcj1Zbi5OQU1FU1BBQ0V8fFBhLHFyPVluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSxZbi5DVVNUT01fRUxFTUVO''@;'; put 'put ''VF9IQU5ETElORyYmRmgoWW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKHFyLnRhZ05hbWVDaGVjaz1Zbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spLFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZGaChZbi5DVVNUT01fRUxFTUVOVF9I''@;'; put 'put ''QU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYocXIuYXR0cmlidXRlTmFtZUNoZWNrPVluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayksWW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJiJib29sZWFuIj09dHlwZW9mIFluLkNVU1RPTV9FTEVNRU5UX0hB''@;'; put 'put ''TkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKHFyLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz1Zbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMpLHFpJiYoS3I9ITEpLEdpJiYoaW89ITApLExjJiYoRm49''@;'; put 'put ''Qyh7fSxtKHhlKSksbG49W10sITA9PT1MYy5odG1sJiYoQyhGbixwKSxDKGxuLExlKSksITA9PT1MYy5zdmcmJihDKEZuLHcpLEMobG4sRmUpLEMobG4sQmUpKSwhMD09PUxjLnN2Z0ZpbHRlcnMmJihDKEZuLEopLEMobG4sRmUpLEMobG4sQmUpKSwhMD09PUxjLm1hdGhNbCYmKEMoRm4sZGUp''@;'; put 'put ''LEMobG4sT2UpLEMobG4sQmUpKSksWW4uQUREX1RBR1MmJihGbj09PW5pJiYoRm49UyhGbikpLEMoRm4sWW4uQUREX1RBR1MsJGEpKSxZbi5BRERfQVRUUiYmKGxuPT09am4mJihsbj1TKGxuKSksQyhsbixZbi5BRERfQVRUUiwkYSkpLFluLkFERF9VUklfU0FGRV9BVFRSJiZDKGsyLFluLkFE''@;'; put 'put ''RF9VUklfU0FGRV9BVFRSLCRhKSxZbi5GT1JCSURfQ09OVEVOVFMmJih1bD09PVJjJiYodWw9Uyh1bCkpLEModWwsWW4uRk9SQklEX0NPTlRFTlRTLCRhKSksaHMmJihGblsiI3RleHQiXT0hMCksSmkmJkMoRm4sWyJodG1sIiwiaGVhZCIsImJvZHkiXSksRm4udGFibGUmJihDKEZuLFsidGJv''@;'; put 'put ''ZHkiXSksZGVsZXRlIGdpLnRib2R5KSxWJiZWKFluKSx0MD1Zbil9LEFzPUMoe30sWyJtaSIsIm1vIiwibW4iLCJtcyIsIm10ZXh0Il0pLG4wPUMoe30sWyJmb3JlaWdub2JqZWN0IiwiZGVzYyIsInRpdGxlIiwiYW5ub3RhdGlvbi14bWwiXSkscWE9Qyh7fSxbInRpdGxlIiwic3R5bGUiLCJm''@;'; put 'put ''b250IiwiYSIsInNjcmlwdCJdKSx2Yz1DKHt9LHcpO0ModmMsSiksQyh2YyxuZSk7dmFyIEhoPUMoe30sZGUpO0MoSGgsZmUpO3ZhciBibz1mdW5jdGlvbihZbil7b2UoRGUucmVtb3ZlZCx7ZWxlbWVudDpZbn0pO3RyeXtZbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFluKX1jYXRjaHt0cnl7''@;'; put 'put ''WW4ub3V0ZXJIVE1MPV90fWNhdGNoe1luLnJlbW92ZSgpfX19LHIwPWZ1bmN0aW9uKFluLGJpKXt0cnl7b2UoRGUucmVtb3ZlZCx7YXR0cmlidXRlOmJpLmdldEF0dHJpYnV0ZU5vZGUoWW4pLGZyb206Yml9KX1jYXRjaHtvZShEZS5yZW1vdmVkLHthdHRyaWJ1dGU6bnVsbCxmcm9tOmJpfSl9''@;'; put 'put ''aWYoYmkucmVtb3ZlQXR0cmlidXRlKFluKSwiaXMiPT09WW4mJiFsbltZbl0paWYoaW98fEdpKXRyeXtibyhiaSl9Y2F0Y2h7fWVsc2UgdHJ5e2JpLnNldEF0dHJpYnV0ZShZbiwiIil9Y2F0Y2h7fX0sVDI9ZnVuY3Rpb24oWW4pe3ZhciBiaSx5aTtpZihybylZbj0iPHJlbW92ZT48L3JlbW92''@;'; put 'put ''ZT4iK1luO2Vsc2V7dmFyIG9zPXVlKFluLC9eW1xyXG5cdCBdKy8pO3lpPW9zJiZvc1swXX0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PWVhJiZTcj09PVBhJiYoWW49JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytZbisi''@;'; put 'put ''PC9ib2R5PjwvaHRtbD4iKTt2YXIgRmE9WHQ/WHQuY3JlYXRlSFRNTChZbik6WW47aWYoU3I9PT1QYSl0cnl7Ymk9KG5ldyBXbikucGFyc2VGcm9tU3RyaW5nKEZhLGVhKX1jYXRjaHt9aWYoIWJpfHwhYmkuZG9jdW1lbnRFbGVtZW50KXtiaT12bi5jcmVhdGVEb2N1bWVudChTciwidGVtcGxh''@;'; put 'put ''dGUiLG51bGwpO3RyeXtiaS5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MPUEyP190OkZhfWNhdGNoe319dmFyIEhhPWJpLmJvZHl8fGJpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gWW4mJnlpJiZIYS5pbnNlcnRCZWZvcmUoaXQuY3JlYXRlVGV4dE5vZGUoeWkpLEhhLmNoaWxkTm9kZXNbMF18''@;'; put 'put ''fG51bGwpLFNyPT09UGE/SnQuY2FsbChiaSxKaT8iaHRtbCI6ImJvZHkiKVswXTpKaT9iaS5kb2N1bWVudEVsZW1lbnQ6SGF9LEQyPWZ1bmN0aW9uKFluKXtyZXR1cm4gcnQuY2FsbChZbi5vd25lckRvY3VtZW50fHxZbixZbixvbi5TSE9XX0VMRU1FTlR8b24uU0hPV19DT01NRU5UfG9uLlNI''@;'; put 'put ''T1dfVEVYVCxudWxsLCExKX0sQXI9ZnVuY3Rpb24oWW4pe3JldHVybiJvYmplY3QiPT09SWUoSHQpP1luIGluc3RhbmNlb2YgSHQ6WW4mJiJvYmplY3QiPT09SWUoWW4pJiYibnVtYmVyIj09dHlwZW9mIFluLm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mIFluLm5vZGVOYW1lfSxfYz1mdW5j''@;'; put 'put ''dGlvbihZbixiaSx5aSl7WXRbWW5dJiZlZShZdFtZbl0sZnVuY3Rpb24ob3Mpe29zLmNhbGwoRGUsYmkseWksdDApfSl9LGtvPWZ1bmN0aW9uKFluKXt2YXIgYmk7aWYoX2MoImJlZm9yZVNhbml0aXplRWxlbWVudHMiLFluLG51bGwpLGZ1bmN0aW9uKFluKXtyZXR1cm4gWW4gaW5zdGFuY2Vv''@;'; put 'put ''ZiBibiYmKCJzdHJpbmciIT10eXBlb2YgWW4ubm9kZU5hbWV8fCJzdHJpbmciIT10eXBlb2YgWW4udGV4dENvbnRlbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBZbi5yZW1vdmVDaGlsZHx8IShZbi5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgVXQpfHwiZnVuY3Rpb24iIT10eXBlb2YgWW4ucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgWW4uc2V0QXR0cmlidXRlfHwic3RyaW5nIiE9dHlwZW9mIFluLm5hbWVzcGFjZVVSSXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLmluc2VydEJlZm9yZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLmhhc0NoaWxkTm9kZXMpfShZbil8fEQoL1tc''@;'; put 'put ''dTAwODAtXHVGRkZGXS8sWW4ubm9kZU5hbWUpKXJldHVybiBibyhZbiksITA7dmFyIHlpPSRhKFluLm5vZGVOYW1lKTtpZihfYygidXBvblNhbml0aXplRWxlbWVudCIsWW4se3RhZ05hbWU6eWksYWxsb3dlZFRhZ3M6Rm59KSxZbi5oYXNDaGlsZE5vZGVzKCkmJiFBcihZbi5maXJzdEVsZW1l''@;'; put 'put ''bnRDaGlsZCkmJighQXIoWW4uY29udGVudCl8fCFBcihZbi5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSkmJkQoLzxbL1x3XS9nLFluLmlubmVySFRNTCkmJkQoLzxbL1x3XS9nLFluLnRleHRDb250ZW50KXx8InNlbGVjdCI9PT15aSYmRCgvPHRlbXBsYXRlL2ksWW4uaW5uZXJIVE1MKSly''@;'; put 'put ''ZXR1cm4gYm8oWW4pLCEwO2lmKCFGblt5aV18fGdpW3lpXSl7aWYoIWdpW3lpXSYmbzAoeWkpJiYocXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZEKHFyLnRhZ05hbWVDaGVjayx5aSl8fHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZxci50YWdOYW1lQ2hl''@;'; put 'put ''Y2soeWkpKSlyZXR1cm4hMTtpZihocyYmIXVsW3lpXSl7dmFyIG9zPWhuKFluKXx8WW4ucGFyZW50Tm9kZSxGYT1mbihZbil8fFluLmNoaWxkTm9kZXM7aWYoRmEmJm9zKWZvcih2YXIgJG89RmEubGVuZ3RoLTE7JG8+PTA7LS0kbylvcy5pbnNlcnRCZWZvcmUoTm4oRmFbJG9dLCEwKSxmdChZ''@;'; put 'put ''bikpfXJldHVybiBibyhZbiksITB9cmV0dXJuIFluIGluc3RhbmNlb2YgUHQmJiFmdW5jdGlvbihZbil7dmFyIGJpPWhuKFluKTsoIWJpfHwhYmkudGFnTmFtZSkmJihiaT17bmFtZXNwYWNlVVJJOlNyLHRhZ05hbWU6InRlbXBsYXRlIn0pO3ZhciB5aT1zZShZbi50YWdOYW1lKSxvcz1zZShi''@;'; put 'put ''aS50YWdOYW1lKTtyZXR1cm4hIWEzW1luLm5hbWVzcGFjZVVSSV0mJihZbi5uYW1lc3BhY2VVUkk9PT1mcz9iaS5uYW1lc3BhY2VVUkk9PT1QYT8ic3ZnIj09PXlpOmJpLm5hbWVzcGFjZVVSST09PXh1PyJzdmciPT09eWkmJigiYW5ub3RhdGlvbi14bWwiPT09b3N8fEFzW29zXSk6ISF2Y1t5''@;'; put 'put ''aV06WW4ubmFtZXNwYWNlVVJJPT09eHU/YmkubmFtZXNwYWNlVVJJPT09UGE/Im1hdGgiPT09eWk6YmkubmFtZXNwYWNlVVJJPT09ZnM/Im1hdGgiPT09eWkmJm4wW29zXTohIUhoW3lpXTpZbi5uYW1lc3BhY2VVUkk9PT1QYT8hKGJpLm5hbWVzcGFjZVVSST09PWZzJiYhbjBbb3NdfHxiaS5u''@;'; put 'put ''YW1lc3BhY2VVUkk9PT14dSYmIUFzW29zXSkmJiFIaFt5aV0mJihxYVt5aV18fCF2Y1t5aV0pOiEoImFwcGxpY2F0aW9uL3hodG1sK3htbCIhPT1lYXx8IWEzW1luLm5hbWVzcGFjZVVSSV0pKX0oWW4pfHwoIm5vc2NyaXB0Ij09PXlpfHwibm9lbWJlZCI9PT15aXx8Im5vZnJhbWVzIj09PXlp''@;'; put 'put ''KSYmRCgvPFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSxZbi5pbm5lckhUTUwpPyhibyhZbiksITApOihxaSYmMz09PVluLm5vZGVUeXBlJiYoYmk9Y2UoYmk9WW4udGV4dENvbnRlbnQsTG4sIiAiKSxiaT1jZShiaSx6dCwiICIpLGJpPWNlKGJpLHluLCIgIiksWW4udGV4dENvbnRlbnQh''@;'; put 'put ''PT1iaSYmKG9lKERlLnJlbW92ZWQse2VsZW1lbnQ6WW4uY2xvbmVOb2RlKCl9KSxZbi50ZXh0Q29udGVudD1iaSkpLF9jKCJhZnRlclNhbml0aXplRWxlbWVudHMiLFluLG51bGwpLCExKX0sQ3M9ZnVuY3Rpb24oWW4sYmkseWkpe2lmKHlyJiYoImlkIj09PWJpfHwibmFtZSI9PT1iaSkmJih5''@;'; put 'put ''aSBpbiBpdHx8eWkgaW4gU2EpKXJldHVybiExO2lmKCghS3J8fHhyW2JpXXx8IUQoeG4sYmkpKSYmKCFVaXx8IUQoc24sYmkpKSlpZighbG5bYmldfHx4cltiaV0pe2lmKCEobzAoWW4pJiYocXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZEKHFyLnRhZ05hbWVDaGVjayxZbil8''@;'; put 'put ''fHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZxci50YWdOYW1lQ2hlY2soWW4pKSYmKHFyLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRChxci5hdHRyaWJ1dGVOYW1lQ2hlY2ssYmkpfHxxci5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBG''@;'; put 'put ''dW5jdGlvbiYmcXIuYXR0cmlidXRlTmFtZUNoZWNrKGJpKSl8fCJpcyI9PT1iaSYmcXIuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYocXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZEKHFyLnRhZ05hbWVDaGVjayx5aSl8fHFyLnRhZ05hbWVDaGVjayBpbnN0YW5j''@;'; put 'put ''ZW9mIEZ1bmN0aW9uJiZxci50YWdOYW1lQ2hlY2soeWkpKSkpcmV0dXJuITF9ZWxzZSBpZighazJbYmldJiYhRCgkdCxjZSh5aSxPbiwiIikpJiYoInNyYyIhPT1iaSYmInhsaW5rOmhyZWYiIT09YmkmJiJocmVmIiE9PWJpfHwic2NyaXB0Ij09PVlufHwwIT09Ryh5aSwiZGF0YToiKXx8IU4w''@;'; put 'put ''W1luXSkmJighbm98fEQoQm4sY2UoeWksT24sIiIpKSkmJnlpKXJldHVybiExO3JldHVybiEwfSxvMD1mdW5jdGlvbihZbil7cmV0dXJuIFluLmluZGV4T2YoIi0iKT4wfSxJMj1mdW5jdGlvbihZbil7dmFyIGJpLHlpLG9zLEZhO19jKCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLFluLG51''@;'; put 'put ''bGwpO3ZhciBIYT1Zbi5hdHRyaWJ1dGVzO2lmKEhhKXt2YXIgJG89e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczpsbn07Zm9yKEZhPUhhLmxlbmd0aDtGYS0tOyl7dmFyIERhPShiaT1IYVtGYV0pLm5hbWUsVmg9YmkubmFtZXNwYWNlVVJJ''@;'; put 'put ''O2lmKHlpPSJ2YWx1ZSI9PT1EYT9iaS52YWx1ZTpiKGJpLnZhbHVlKSxvcz0kYShEYSksJG8uYXR0ck5hbWU9b3MsJG8uYXR0clZhbHVlPXlpLCRvLmtlZXBBdHRyPSEwLCRvLmZvcmNlS2VlcEF0dHI9dm9pZCAwLF9jKCJ1cG9uU2FuaXRpemVBdHRyaWJ1dGUiLFluLCRvKSx5aT0kby5hdHRy''@;'; put 'put ''VmFsdWUsISRvLmZvcmNlS2VlcEF0dHImJihyMChEYSxZbiksJG8ua2VlcEF0dHIpKXtpZighRnImJkQoL1wvPi9pLHlpKSl7cjAoRGEsWW4pO2NvbnRpbnVlfXFpJiYoeWk9Y2UoeWksTG4sIiAiKSx5aT1jZSh5aSx6dCwiICIpLHlpPWNlKHlpLHluLCIgIikpO3ZhciBCaD0kYShZbi5ub2Rl''@;'; put 'put ''TmFtZSk7aWYoQ3MoQmgsb3MseWkpKXtpZihQaSYmKCJpZCI9PT1vc3x8Im5hbWUiPT09b3MpJiYocjAoRGEsWW4pLHlpPSJ1c2VyLWNvbnRlbnQtIit5aSksWHQmJiJvYmplY3QiPT09SWUoZW4pJiYiZnVuY3Rpb24iPT10eXBlb2YgZW4uZ2V0QXR0cmlidXRlVHlwZSYmIVZoKXN3aXRjaChl''@;'; put 'put ''bi5nZXRBdHRyaWJ1dGVUeXBlKEJoLG9zKSl7Y2FzZSJUcnVzdGVkSFRNTCI6eWk9WHQuY3JlYXRlSFRNTCh5aSk7YnJlYWs7Y2FzZSJUcnVzdGVkU2NyaXB0VVJMIjp5aT1YdC5jcmVhdGVTY3JpcHRVUkwoeWkpfXRyeXtWaD9Zbi5zZXRBdHRyaWJ1dGVOUyhWaCxEYSx5aSk6WW4uc2V0QXR0''@;'; put 'put ''cmlidXRlKERhLHlpKSx0ZShEZS5yZW1vdmVkKX1jYXRjaHt9fX19X2MoImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzIixZbixudWxsKX19LE5oPWZ1bmN0aW9uIFFpKFluKXt2YXIgYmkseWk9RDIoWW4pO2ZvcihfYygiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLFluLG51bGwpO2JpPXlpLm5l''@;'; put 'put ''eHROb2RlKCk7KV9jKCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixiaSxudWxsKSwha28oYmkpJiYoYmkuY29udGVudCBpbnN0YW5jZW9mIHV0JiZRaShiaS5jb250ZW50KSxJMihiaSkpO19jKCJhZnRlclNhbml0aXplU2hhZG93RE9NIixZbixudWxsKX07cmV0dXJuIERlLnNhbml0aXplPWZ1''@;'; put 'put ''bmN0aW9uKFFpKXt2YXIgYmkseWksb3MsRmEsSGEsWW49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKChBMj0hUWkpJiYoUWk9Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiBRaSYmIUFyKFFpKSl7aWYoImZ1bmN0aW9u''@;'; put 'put ''IiE9dHlwZW9mIFFpLnRvU3RyaW5nKXRocm93IEgoInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVvZihRaT1RaS50b1N0cmluZygpKSl0aHJvdyBIKCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nIil9aWYoIURlLmlzU3VwcG9ydGVkKXtpZigi''@;'; put 'put ''b2JqZWN0Ij09PUllKE1lLnRvU3RhdGljSFRNTCl8fCJmdW5jdGlvbiI9PXR5cGVvZiBNZS50b1N0YXRpY0hUTUwpe2lmKCJzdHJpbmciPT10eXBlb2YgUWkpcmV0dXJuIE1lLnRvU3RhdGljSFRNTChRaSk7aWYoQXIoUWkpKXJldHVybiBNZS50b1N0YXRpY0hUTUwoUWkub3V0ZXJIVE1MKX1y''@;'; put 'put ''ZXR1cm4gUWl9aWYoYW98fEV1KFluKSxEZS5yZW1vdmVkPVtdLCJzdHJpbmciPT10eXBlb2YgUWkmJihycz0hMSkscnMpe2lmKFFpLm5vZGVOYW1lKXt2YXIgJG89JGEoUWkubm9kZU5hbWUpO2lmKCFGblskb118fGdpWyRvXSl0aHJvdyBIKCJyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBj''@;'; put 'put ''YW5ub3QgYmUgc2FuaXRpemVkIGluLXBsYWNlIil9fWVsc2UgaWYoUWkgaW5zdGFuY2VvZiBIdCkxPT09KHlpPShiaT1UMigiXHgzYyEtLS0tXHgzZSIpKS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoUWksITApKS5ub2RlVHlwZSYmIkJPRFkiPT09eWkubm9kZU5hbWV8fCJIVE1MIj09PXlp''@;'; put 'put ''Lm5vZGVOYW1lP2JpPXlpOmJpLmFwcGVuZENoaWxkKHlpKTtlbHNle2lmKCFpbyYmIXFpJiYhSmkmJi0xPT09UWkuaW5kZXhPZigiPCIpKXJldHVybiBYdCYmaG8/WHQuY3JlYXRlSFRNTChRaSk6UWk7aWYoIShiaT1UMihRaSkpKXJldHVybiBpbz9udWxsOmhvP190OiIifWJpJiZybyYmYm8o''@;'; put 'put ''YmkuZmlyc3RDaGlsZCk7Zm9yKHZhciBWMD1EMihycz9RaTpiaSk7b3M9VjAubmV4dE5vZGUoKTspMz09PW9zLm5vZGVUeXBlJiZvcz09PUZhfHxrbyhvcyl8fChvcy5jb250ZW50IGluc3RhbmNlb2YgdXQmJk5oKG9zLmNvbnRlbnQpLEkyKG9zKSxGYT1vcyk7aWYoRmE9bnVsbCxycylyZXR1''@;'; put 'put ''cm4gUWk7aWYoaW8pe2lmKEdpKWZvcihIYT1JdC5jYWxsKGJpLm93bmVyRG9jdW1lbnQpO2JpLmZpcnN0Q2hpbGQ7KUhhLmFwcGVuZENoaWxkKGJpLmZpcnN0Q2hpbGQpO2Vsc2UgSGE9Ymk7cmV0dXJuKGxuLnNoYWRvd3Jvb3R8fGxuLnNoYWRvd3Jvb3Rtb2QpJiYoSGE9RHQuY2FsbCh6ZSxI''@;'; put 'put ''YSwhMCkpLEhhfXZhciBEYT1KaT9iaS5vdXRlckhUTUw6YmkuaW5uZXJIVE1MO3JldHVybiBKaSYmRm5bIiFkb2N0eXBlIl0mJmJpLm93bmVyRG9jdW1lbnQmJmJpLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmYmkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJkQoVGUsYmkub3duZXJEb2N1''@;'; put 'put ''bWVudC5kb2N0eXBlLm5hbWUpJiYoRGE9IjwhRE9DVFlQRSAiK2JpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKyI+XG4iK0RhKSxxaSYmKERhPWNlKERhLExuLCIgIiksRGE9Y2UoRGEsenQsIiAiKSxEYT1jZShEYSx5biwiICIpKSxYdCYmaG8/WHQuY3JlYXRlSFRNTChEYSk6RGF9LERl''@;'; put 'put ''LnNldENvbmZpZz1mdW5jdGlvbihRaSl7RXUoUWkpLGFvPSEwfSxEZS5jbGVhckNvbmZpZz1mdW5jdGlvbigpe3QwPW51bGwsYW89ITF9LERlLmlzVmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24oUWksWW4sYmkpe3QwfHxFdSh7fSk7dmFyIHlpPSRhKFFpKSxvcz0kYShZbik7cmV0dXJuIENzKHlp''@;'; put 'put ''LG9zLGJpKX0sRGUuYWRkSG9vaz1mdW5jdGlvbihRaSxZbil7ImZ1bmN0aW9uIj09dHlwZW9mIFluJiYoWXRbUWldPVl0W1FpXXx8W10sb2UoWXRbUWldLFluKSl9LERlLnJlbW92ZUhvb2s9ZnVuY3Rpb24oUWkpe2lmKFl0W1FpXSlyZXR1cm4gdGUoWXRbUWldKX0sRGUucmVtb3ZlSG9va3M9''@;'; put 'put ''ZnVuY3Rpb24oUWkpe1l0W1FpXSYmKFl0W1FpXT1bXSl9LERlLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7WXQ9e319LERlfSgpfSgpfSw4ODY1MTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUllO2FlLnZlcnNpb249RigxODU5NykuaTgsYWUudXRpbHM9Rig0Njc2NyksYWUu''@;'; put 'put ''cmFuZD1GKDYwMDgyKSxhZS5jdXJ2ZT1GKDkxMzIpLGFlLmN1cnZlcz1GKDgwNDkpLGFlLmVjPUYoNjQ0MyksYWUuZWRkc2E9Rig5OTU3Nyl9LDcxMzI0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDQ2NzY3KSxtPXguZ2V0TkFGLGxlPXguZ2V0SlNGLE09''@;'; put 'put ''eC5hc3NlcnQ7ZnVuY3Rpb24gTyh6LEspe3RoaXMudHlwZT16LHRoaXMucD1uZXcgYWUoSy5wLDE2KSx0aGlzLnJlZD1LLnByaW1lP2FlLnJlZChLLnByaW1lKTphZS5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBhZSgwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IGFlKDEpLnRv''@;'; put 'put ''UmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgYWUoMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1LLm4mJm5ldyBhZShLLm4sMTYpLHRoaXMuZz1LLmcmJnRoaXMucG9pbnRGcm9tSlNPTihLLmcsSy5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJy''@;'; put 'put ''YXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIEk9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IUl8fEkuY21wbigxMDApPjA/dGhpcy5yZWROPW51''@;'; put 'put ''bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gUih6LEspe3RoaXMuY3VydmU9eix0aGlzLnR5cGU9Syx0aGlzLnByZWNvbXB1dGVkPW51bGx9YXQuZXhwb3J0cz1PLE8ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sTy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxPLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oSyxJKXtNKEsucHJlY29tcHV0ZWQpO3ZhciBr''@;'; put 'put ''PUsuX2dldERvdWJsZXMoKSxFPW0oSSwxLHRoaXMuX2JpdExlbmd0aCksaj0oMTw8ay5zdGVwKzEpLShrLnN0ZXAlMj09MD8yOjEpO2ovPTM7dmFyIEIsWSxWPVtdO2ZvcihCPTA7QjxFLmxlbmd0aDtCKz1rLnN0ZXApe1k9MDtmb3IodmFyIFg9QitrLnN0ZXAtMTtYPj1CO1gtLSlZPShZPDwx''@;'; put 'put ''KStFW1hdO1YucHVzaChZKX1mb3IodmFyIFU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHE9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGVlPWo7ZWU+MDtlZS0tKXtmb3IoQj0wO0I8Vi5sZW5ndGg7QisrKShZPVZbQl0pPT09ZWU/cT1xLm1peGVkQWRkKGsucG9pbnRzW0JdKTpZ''@;'; put 'put ''PT09LWVlJiYocT1xLm1peGVkQWRkKGsucG9pbnRzW0JdLm5lZygpKSk7VT1VLmFkZChxKX1yZXR1cm4gVS50b1AoKX0sTy5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oSyxJKXtmb3IodmFyIGs9NCxFPUsuX2dldE5BRlBvaW50cyhrKSxqPUUucG9pbnRzLFY9bShJLGs9RS53bmQsdGhp''@;'; put 'put ''cy5fYml0TGVuZ3RoKSxCPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxZPVYubGVuZ3RoLTE7WT49MDtZLS0pe2Zvcih2YXIgWD0wO1k+PTAmJjA9PT1WW1ldO1ktLSlYKys7aWYoWT49MCYmWCsrLEI9Qi5kYmxwKFgpLFk8MClicmVhazt2YXIgVT1WW1ldO00oMCE9PVUpLEI9ImFmZmlu''@;'; put 'put ''ZSI9PT1LLnR5cGU/Qi5taXhlZEFkZChVPjA/altVLTE+PjFdOmpbLVUtMT4+MV0ubmVnKCkpOkIuYWRkKFU+MD9qW1UtMT4+MV06alstVS0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT1LLnR5cGU/Qi50b1AoKTpCfSxPLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbihLLEks''@;'; put 'put ''ayxFLGope3ZhciBVLHEsZWUsVj10aGlzLl93bmFmVDEsQj10aGlzLl93bmFmVDIsWT10aGlzLl93bmFmVDMsWD0wO2ZvcihVPTA7VTxFO1UrKyl7dmFyIHRlPShlZT1JW1VdKS5fZ2V0TkFGUG9pbnRzKEspO1ZbVV09dGUud25kLEJbVV09dGUucG9pbnRzfWZvcihVPUUtMTtVPj0xO1UtPTIp''@;'; put 'put ''e3ZhciBvZT1VLTEsc2U9VTtpZigxPT09VltvZV0mJjE9PT1WW3NlXSl7dmFyIGhlPVtJW29lXSxudWxsLG51bGwsSVtzZV1dOzA9PT1JW29lXS55LmNtcChJW3NlXS55KT8oaGVbMV09SVtvZV0uYWRkKElbc2VdKSxoZVsyXT1JW29lXS50b0ooKS5taXhlZEFkZChJW3NlXS5uZWcoKSkpOjA9''@;'; put 'put ''PT1JW29lXS55LmNtcChJW3NlXS55LnJlZE5lZygpKT8oaGVbMV09SVtvZV0udG9KKCkubWl4ZWRBZGQoSVtzZV0pLGhlWzJdPUlbb2VdLmFkZChJW3NlXS5uZWcoKSkpOihoZVsxXT1JW29lXS50b0ooKS5taXhlZEFkZChJW3NlXSksaGVbMl09SVtvZV0udG9KKCkubWl4ZWRBZGQoSVtzZV0u''@;'; put 'put ''bmVnKCkpKTt2YXIgdWU9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10sY2U9bGUoa1tvZV0sa1tzZV0pO2ZvcihYPU1hdGgubWF4KGNlWzBdLmxlbmd0aCxYKSxZW29lXT1uZXcgQXJyYXkoWCksWVtzZV09bmV3IEFycmF5KFgpLHE9MDtxPFg7cSsrKVlbb2VdW3FdPXVlWzMqKDErKDB8Y2VbMF1b''@;'; put 'put ''cV0pKSsoMSsoMHxjZVsxXVtxXSkpXSxZW3NlXVtxXT0wLEJbb2VdPWhlfWVsc2UgWVtvZV09bShrW29lXSxWW29lXSx0aGlzLl9iaXRMZW5ndGgpLFlbc2VdPW0oa1tzZV0sVltzZV0sdGhpcy5fYml0TGVuZ3RoKSxYPU1hdGgubWF4KFlbb2VdLmxlbmd0aCxYKSxYPU1hdGgubWF4KFlbc2Vd''@;'; put 'put ''Lmxlbmd0aCxYKX12YXIgRD10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksSD10aGlzLl93bmFmVDQ7Zm9yKFU9WDtVPj0wO1UtLSl7Zm9yKHZhciBOPTA7VT49MDspe3ZhciBnPSEwO2ZvcihxPTA7cTxFO3ErKylIW3FdPTB8WVtxXVtVXSwwIT09SFtxXSYmKGc9ITEpO2lmKCFnKWJyZWFr''@;'; put 'put ''O04rKyxVLS19aWYoVT49MCYmTisrLEQ9RC5kYmxwKE4pLFU8MClicmVhaztmb3IocT0wO3E8RTtxKyspe3ZhciBDPUhbcV07MCE9PUMmJihDPjA/ZWU9QltxXVtDLTE+PjFdOkM8MCYmKGVlPUJbcV1bLUMtMT4+MV0ubmVnKCkpLEQ9ImFmZmluZSI9PT1lZS50eXBlP0QubWl4ZWRBZGQoZWUp''@;'; put 'put ''OkQuYWRkKGVlKSl9fWZvcihVPTA7VTxFO1UrKylCW1VdPW51bGw7cmV0dXJuIGo/RDpELnRvUCgpfSxPLkJhc2VQb2ludD1SLFIucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sTy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oSyxJKXtLPXgudG9BcnJheShLLEkpO3ZhciBrPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT1LWzBdfHw2PT09S1swXXx8Nz09PUtbMF0pJiZLLmxlbmd0aC0xPT0y''@;'; put 'put ''KmspcmV0dXJuIDY9PT1LWzBdP00oS1tLLmxlbmd0aC0xXSUyPT0wKTo3PT09S1swXSYmTShLW0subGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoSy5zbGljZSgxLDErayksSy5zbGljZSgxK2ssMSsyKmspKTtpZigoMj09PUtbMF18fDM9PT1LWzBdKSYmSy5sZW5ndGgtMT09PWspcmV0dXJu''@;'; put 'put ''IHRoaXMucG9pbnRGcm9tWChLLnNsaWNlKDEsMStrKSwzPT09S1swXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxSLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmVuY29kZShLLCEwKX0sUi5wcm90b3R5cGUuX2Vu''@;'; put 'put ''Y29kZT1mdW5jdGlvbihLKXt2YXIgST10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLGs9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLEkpO3JldHVybiBLP1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChrKTpbNF0uY29uY2F0KGssdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLEkp''@;'; put 'put ''KX0sUi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEssSSl7cmV0dXJuIHguZW5jb2RlKHRoaXMuX2VuY29kZShJKSxLKX0sUi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbihLKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBJPXtkb3VibGVzOm51bGwsbmFmOm51''@;'; put 'put ''bGwsYmV0YTpudWxsfTtyZXR1cm4gSS5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLEkuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsSyksSS5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPUksdGhpc30sUi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oSyl7''@;'; put 'put ''aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIEk9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhSSYmSS5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKEsuYml0TGVuZ3RoKCkrMSkvSS5zdGVwKX0sUi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oSyxJKXtp''@;'; put 'put ''Zih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIGs9W3RoaXNdLEU9dGhpcyxqPTA7ajxJO2orPUspe2Zvcih2YXIgVj0wO1Y8SztWKyspRT1FLmRibCgpO2sucHVzaChFKX1yZXR1cm57c3Rl''@;'; put 'put ''cDpLLHBvaW50czprfX0sUi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbihLKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBJPVt0aGlzXSxrPSgxPDxLKS0xLEU9MT09PWs/bnVsbDp0''@;'; put 'put ''aGlzLmRibCgpLGo9MTtqPGs7aisrKUlbal09SVtqLTFdLmFkZChFKTtyZXR1cm57d25kOksscG9pbnRzOkl9fSxSLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxSLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKEspe2Zvcih2YXIgST10aGlzLGs9MDtrPEs7aysr''@;'; put 'put ''KUk9SS5kYmwoKTtyZXR1cm4gSX19LDI3NjY1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0Njc2NykseD1GKDMxMzg3KSxtPUYoNjY2OTgpLGxlPUYoNzEzMjQpLE09YWUuYXNzZXJ0O2Z1bmN0aW9uIE8oeil7dGhpcy50d2lzdGVkPTEhPSgwfHouYSksdGhpcy5tT25lQT10''@;'; put 'put ''aGlzLnR3aXN0ZWQmJi0xPT0oMHx6LmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxsZS5jYWxsKHRoaXMsImVkd2FyZHMiLHopLHRoaXMuYT1uZXcgeCh6LmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyB4KHouYywxNiku''@;'; put 'put ''dG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgeCh6LmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxNKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0x''@;'; put 'put ''PT0oMHx6LmMpfWZ1bmN0aW9uIFIoeixLLEksayxFKXtsZS5CYXNlUG9pbnQuY2FsbCh0aGlzLHosInByb2plY3RpdmUiKSxudWxsPT09SyYmbnVsbD09PUkmJm51bGw9PT1rPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5v''@;'; put 'put ''bmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IHgoSywxNiksdGhpcy55PW5ldyB4KEksMTYpLHRoaXMuej1rP25ldyB4KGssMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1FJiZuZXcgeChFLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50''@;'; put 'put ''b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0''@;'; put 'put ''aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX1t''@;'; put 'put ''KE8sbGUpLGF0LmV4cG9ydHM9TyxPLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5tT25lQT9LLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoSyl9LE8ucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLm9uZUM/Szp0aGlzLmMucmVkTXVsKEspfSxP''@;'; put 'put ''LnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oSyxJLGssRSl7cmV0dXJuIHRoaXMucG9pbnQoSyxJLGssRSl9LE8ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oSyxJKXsoSz1uZXcgeChLLDE2KSkucmVkfHwoSz1LLnRvUmVkKHRoaXMucmVkKSk7dmFyIGs9Sy5yZWRTcXIoKSxFPXRo''@;'; put 'put ''aXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoaykpLGo9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKGspKSxWPUUucmVkTXVsKGoucmVkSW52bSgpKSxCPVYucmVkU3FydCgpO2lmKDAhPT1CLnJlZFNxcigpLnJlZFN1YihWKS5jbXAodGhpcy56ZXJvKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgWT1CLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihJJiYhWXx8IUkmJlkpJiYoQj1CLnJlZE5lZygpKSx0aGlzLnBvaW50KEssQil9LE8ucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oSyxJKXsoSz1uZXcgeChLLDE2KSku''@;'; put 'put ''cmVkfHwoSz1LLnRvUmVkKHRoaXMucmVkKSk7dmFyIGs9Sy5yZWRTcXIoKSxFPWsucmVkU3ViKHRoaXMuYzIpLGo9ay5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksVj1FLnJlZE11bChqLnJlZEludm0oKSk7aWYoMD09PVYuY21wKHRoaXMuemVybykpe2lm''@;'; put 'put ''KEkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLEspfXZhciBCPVYucmVkU3FydCgpO2lmKDAhPT1CLnJlZFNxcigpLnJlZFN1YihWKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1''@;'; put 'put ''cm4gQi5mcm9tUmVkKCkuaXNPZGQoKSE9PUkmJihCPUIucmVkTmVnKCkpLHRoaXMucG9pbnQoQixLKX0sTy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oSyl7aWYoSy5pc0luZmluaXR5KCkpcmV0dXJuITA7Sy5ub3JtYWxpemUoKTt2YXIgST1LLngucmVkU3FyKCksaz1LLnkucmVkU3Fy''@;'; put 'put ''KCksRT1JLnJlZE11bCh0aGlzLmEpLnJlZEFkZChrKSxqPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKEkpLnJlZE11bChrKSkpO3JldHVybiAwPT09RS5jbXAoail9LG0oUixsZS5CYXNlUG9pbnQpLE8ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rp''@;'; put 'put ''b24oSyl7cmV0dXJuIFIuZnJvbUpTT04odGhpcyxLKX0sTy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oSyxJLGssRSl7cmV0dXJuIG5ldyBSKHRoaXMsSyxJLGssRSl9LFIuZnJvbUpTT049ZnVuY3Rpb24oSyxJKXtyZXR1cm4gbmV3IFIoSyxJWzBdLElbMV0sSVsyXSl9LFIucHJvdG90eXBl''@;'; put 'put ''Lmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlz''@;'; put 'put ''LnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sUi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxSLnBy''@;'; put 'put ''b3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy54LnJlZFNxcigpLEk9dGhpcy55LnJlZFNxcigpLGs9dGhpcy56LnJlZFNxcigpO2s9ay5yZWRJQWRkKGspO3ZhciBFPXRoaXMuY3VydmUuX211bEEoSyksaj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1''@;'; put 'put ''YihLKS5yZWRJU3ViKEkpLFY9RS5yZWRBZGQoSSksQj1WLnJlZFN1YihrKSxZPUUucmVkU3ViKEkpLFg9ai5yZWRNdWwoQiksVT1WLnJlZE11bChZKSxxPWoucmVkTXVsKFkpLGVlPUIucmVkTXVsKFYpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFgsVSxlZSxxKX0sUi5wcm90b3R5cGUuX3By''@;'; put 'put ''b2pEYmw9ZnVuY3Rpb24oKXt2YXIgRSxqLFYsQixZLFgsSz10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksST10aGlzLngucmVkU3FyKCksaz10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgVT0oQj10aGlzLmN1cnZlLl9tdWxBKEkpKS5yZWRBZGQoayk7''@;'; put 'put ''dGhpcy56T25lPyhFPUsucmVkU3ViKEkpLnJlZFN1YihrKS5yZWRNdWwoVS5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxqPVUucmVkTXVsKEIucmVkU3ViKGspKSxWPVUucmVkU3FyKCkucmVkU3ViKFUpLnJlZFN1YihVKSk6KFk9dGhpcy56LnJlZFNxcigpLFg9VS5yZWRTdWIoWSkucmVkSVN1''@;'; put 'put ''YihZKSxFPUsucmVkU3ViKEkpLnJlZElTdWIoaykucmVkTXVsKFgpLGo9VS5yZWRNdWwoQi5yZWRTdWIoaykpLFY9VS5yZWRNdWwoWCkpfWVsc2UgQj1JLnJlZEFkZChrKSxZPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxYPUIucmVkU3ViKFkpLnJlZFN1YihZKSxFPXRoaXMu''@;'; put 'put ''Y3VydmUuX211bEMoSy5yZWRJU3ViKEIpKS5yZWRNdWwoWCksaj10aGlzLmN1cnZlLl9tdWxDKEIpLnJlZE11bChJLnJlZElTdWIoaykpLFY9Qi5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoRSxqLFYpfSxSLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''c0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sUi5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbihLKXt2YXIgST10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKEsueS5yZWRTdWIoSy54KSksaz10aGlzLnkucmVk''@;'; put 'put ''QWRkKHRoaXMueCkucmVkTXVsKEsueS5yZWRBZGQoSy54KSksRT10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChLLnQpLGo9dGhpcy56LnJlZE11bChLLnoucmVkQWRkKEsueikpLFY9ay5yZWRTdWIoSSksQj1qLnJlZFN1YihFKSxZPWoucmVkQWRkKEUpLFg9ay5yZWRBZGQo''@;'; put 'put ''SSksVT1WLnJlZE11bChCKSxxPVkucmVkTXVsKFgpLGVlPVYucmVkTXVsKFgpLHRlPUIucmVkTXVsKFkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUscSx0ZSxlZSl9LFIucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKEspe3ZhciBxLGVlLEk9dGhpcy56LnJlZE11bChLLnopLGs9SS5y''@;'; put 'put ''ZWRTcXIoKSxFPXRoaXMueC5yZWRNdWwoSy54KSxqPXRoaXMueS5yZWRNdWwoSy55KSxWPXRoaXMuY3VydmUuZC5yZWRNdWwoRSkucmVkTXVsKGopLEI9ay5yZWRTdWIoViksWT1rLnJlZEFkZChWKSxYPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoSy54LnJlZEFkZChLLnkpKS5yZWRJ''@;'; put 'put ''U3ViKEUpLnJlZElTdWIoaiksVT1JLnJlZE11bChCKS5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8ocT1JLnJlZE11bChZKS5yZWRNdWwoai5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShFKSkpLGVlPUIucmVkTXVsKFkpKToocT1JLnJlZE11bChZKS5yZWRNdWwoai5yZWRT''@;'; put 'put ''dWIoRSkpLGVlPXRoaXMuY3VydmUuX211bEMoQikucmVkTXVsKFkpKSx0aGlzLmN1cnZlLnBvaW50KFUscSxlZSl9LFIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/SzpLLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhp''@;'; put 'put ''cy5fZXh0QWRkKEspOnRoaXMuX3Byb2pBZGQoSyl9LFIucHJvdG90eXBlLm11bD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5faGFzRG91YmxlcyhLKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLEspOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxLKX0sUi5wcm90b3R5cGUubXVsQWRk''@;'; put 'put ''PWZ1bmN0aW9uKEssSSxrKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLEldLFtLLGtdLDIsITEpfSxSLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKEssSSxrKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLEldLFtLLGtdLDIsITApfSxSLnBy''@;'; put 'put ''b3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIEs9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoSyksdGhpcy55PXRoaXMueS5yZWRNdWwoSyksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoSykp''@;'; put 'put ''LHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sUi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxSLnByb3RvdHlwZS5nZXRY''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sUi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LFIucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzPT09''@;'; put 'put ''S3x8MD09PXRoaXMuZ2V0WCgpLmNtcChLLmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoSy5nZXRZKCkpfSxSLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oSyl7dmFyIEk9Sy50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoSSkpcmV0''@;'; put 'put ''dXJuITA7Zm9yKHZhciBrPUsuY2xvbmUoKSxFPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihrLmlhZGQodGhpcy5jdXJ2ZS5uKSxrLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEkucmVkSUFkZChFKSwwPT09dGhpcy54LmNtcChJKSlyZXR1cm4hMH19LFIu''@;'; put 'put ''cHJvdG90eXBlLnRvUD1SLnByb3RvdHlwZS5ub3JtYWxpemUsUi5wcm90b3R5cGUubWl4ZWRBZGQ9Ui5wcm90b3R5cGUuYWRkfSw5MTMyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9SWU7YWUuYmFzZT1GKDcxMzI0KSxhZS5zaG9ydD1GKDg5OTk2KSxhZS5tb250PUYoMjkyNTMp''@;'; put 'put ''LGFlLmVkd2FyZHM9RigyNzY2NSl9LDI5MjUzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDY2Njk4KSxtPUYoNzEzMjQpLGxlPUYoNDY3NjcpO2Z1bmN0aW9uIE0oUil7bS5jYWxsKHRoaXMsIm1vbnQiLFIpLHRoaXMuYT1uZXcgYWUoUi5hLDE2KS50b1Jl''@;'; put 'put ''ZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBhZShSLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBhZSg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBhZSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFk''@;'; put 'put ''ZCh0aGlzLnR3bykpfWZ1bmN0aW9uIE8oUix6LEspe20uQmFzZVBvaW50LmNhbGwodGhpcyxSLCJwcm9qZWN0aXZlIiksbnVsbD09PXomJm51bGw9PT1LPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgYWUoeiwxNiksdGhpcy56PW5l''@;'; put 'put ''dyBhZShLLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfXgoTSxtKSxhdC5leHBvcnRzPU0sTS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oeil7''@;'; put 'put ''dmFyIEs9ei5ub3JtYWxpemUoKS54LEk9Sy5yZWRTcXIoKSxrPUkucmVkTXVsKEspLnJlZEFkZChJLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoSyk7cmV0dXJuIDA9PT1rLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoayl9LHgoTyxtLkJhc2VQb2ludCksTS5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9''@;'; put 'put ''ZnVuY3Rpb24oeixLKXtyZXR1cm4gdGhpcy5wb2ludChsZS50b0FycmF5KHosSyksMSl9LE0ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHosSyl7cmV0dXJuIG5ldyBPKHRoaXMseixLKX0sTS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih6KXtyZXR1cm4gTy5mcm9tSlNPTih0''@;'; put 'put ''aGlzLHopfSxPLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxPLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sTy5mcm9tSlNPTj1mdW5jdGlvbih6LEspe3JldHVy''@;'; put 'put ''biBuZXcgTyh6LEtbMF0sS1sxXXx8ei5vbmUpfSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhp''@;'; put 'put ''cy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LE8ucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxPLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgSz10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksaz10aGlz''@;'; put 'put ''LngucmVkU3ViKHRoaXMueikucmVkU3FyKCksRT1LLnJlZFN1YihrKSxqPUsucmVkTXVsKGspLFY9RS5yZWRNdWwoay5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKEUpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoaixWKX0sTy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sTy5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbih6LEspe3ZhciBJPXRoaXMueC5yZWRBZGQodGhpcy56KSxrPXRoaXMueC5yZWRTdWIodGhpcy56KSxFPXoueC5yZWRBZGQoei56KSxWPXoueC5yZWRTdWIo''@;'; put 'put ''ei56KS5yZWRNdWwoSSksQj1FLnJlZE11bChrKSxZPUsuei5yZWRNdWwoVi5yZWRBZGQoQikucmVkU3FyKCkpLFg9Sy54LnJlZE11bChWLnJlZElTdWIoQikucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFksWCl9LE8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtmb3IodmFy''@;'; put 'put ''IEs9ei5jbG9uZSgpLEk9dGhpcyxrPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxqPVtdOzAhPT1LLmNtcG4oMCk7Sy5pdXNocm4oMSkpai5wdXNoKEsuYW5kbG4oMSkpO2Zvcih2YXIgVj1qLmxlbmd0aC0xO1Y+PTA7Vi0tKTA9PT1qW1ZdPyhJPUkuZGlmZkFkZChrLHRoaXMpLGs9ay5k''@;'; put 'put ''YmwoKSk6KGs9SS5kaWZmQWRkKGssdGhpcyksST1JLmRibCgpKTtyZXR1cm4ga30sTy5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sTy5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Ro''@;'; put 'put ''cm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LE8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHope3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKHouZ2V0WCgpKX0sTy5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10''@;'; put 'put ''aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxPLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LDg5OTk2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''YWU9Rig0Njc2NykseD1GKDMxMzg3KSxtPUYoNjY2OTgpLGxlPUYoNzEzMjQpLE09YWUuYXNzZXJ0O2Z1bmN0aW9uIE8oSyl7bGUuY2FsbCh0aGlzLCJzaG9ydCIsSyksdGhpcy5hPW5ldyB4KEsuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgeChLLmIsMTYpLnRvUmVkKHRoaXMu''@;'; put 'put ''cmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKEspLHRo''@;'; put 'put ''aXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIFIoSyxJLGssRSl7bGUuQmFzZVBvaW50LmNhbGwodGhpcyxLLCJhZmZpbmUiKSxudWxsPT09SSYmbnVsbD09PWs/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5m''@;'; put 'put ''PSEwKToodGhpcy54PW5ldyB4KEksMTYpLHRoaXMueT1uZXcgeChrLDE2KSxFJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRo''@;'; put 'put ''aXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIHooSyxJLGssRSl7bGUuQmFzZVBvaW50LmNhbGwodGhpcyxLLCJqYWNvYmlhbiIpLG51bGw9PT1JJiZudWxsPT09ayYmbnVsbD09PUU/KHRoaXMueD10aGlzLmN1cnZl''@;'; put 'put ''Lm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyB4KDApKToodGhpcy54PW5ldyB4KEksMTYpLHRoaXMueT1uZXcgeChrLDE2KSx0aGlzLno9bmV3IHgoRSwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8''@;'; put 'put ''KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1tKE8sbGUpLGF0LmV4cG9ydHM9TyxPLnByb3RvdHlwZS5fZ2V0RW5kb21v''@;'; put 'put ''cnBoaXNtPWZ1bmN0aW9uKEkpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBrLEU7aWYoSS5iZXRhKWs9bmV3IHgoSS5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgaj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtrPShr''@;'; put 'put ''PWpbMF0uY21wKGpbMV0pPDA/alswXTpqWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoSS5sYW1iZGEpRT1uZXcgeChJLmxhbWJkYSwxNik7ZWxzZXt2YXIgVj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChWWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoaykpP0U9''@;'; put 'put ''VlswXTpNKDA9PT10aGlzLmcubXVsKEU9VlsxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKGspKSl9cmV0dXJue2JldGE6ayxsYW1iZGE6RSxiYXNpczpJLmJhc2lzP0kuYmFzaXMubWFwKGZ1bmN0aW9uKFkpe3JldHVybnthOm5ldyB4KFkuYSwxNiksYjpuZXcgeChZLmIsMTYpfX0pOnRoaXMu''@;'; put 'put ''X2dldEVuZG9CYXNpcyhFKX19fSxPLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKEkpe3ZhciBrPUk9PT10aGlzLnA/dGhpcy5yZWQ6eC5tb250KEkpLEU9bmV3IHgoMikudG9SZWQoaykucmVkSW52bSgpLGo9RS5yZWROZWcoKSxWPW5ldyB4KDMpLnRvUmVkKGspLnJlZE5lZygp''@;'; put 'put ''LnJlZFNxcnQoKS5yZWRNdWwoRSk7cmV0dXJuW2oucmVkQWRkKFYpLmZyb21SZWQoKSxqLnJlZFN1YihWKS5mcm9tUmVkKCldfSxPLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKEkpe2Zvcih2YXIgVSxxLGVlLHRlLG9lLHNlLGhlLGNlLEcsaz10aGlzLm4udXNocm4oTWF0aC5m''@;'; put 'put ''bG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEU9SSxqPXRoaXMubi5jbG9uZSgpLFY9bmV3IHgoMSksQj1uZXcgeCgwKSxZPW5ldyB4KDApLFg9bmV3IHgoMSksdWU9MDswIT09RS5jbXBuKDApOyl7dmFyIGI9ai5kaXYoRSk7Y2U9ai5zdWIoYi5tdWwoRSkpLEc9WS5zdWIoYi5tdWwoVikp''@;'; put 'put ''O3ZhciBEPVguc3ViKGIubXVsKEIpKTtpZighZWUmJmNlLmNtcChrKTwwKVU9aGUubmVnKCkscT1WLGVlPWNlLm5lZygpLHRlPUc7ZWxzZSBpZihlZSYmMj09Kyt1ZSlicmVhaztoZT1jZSxqPUUsRT1jZSxZPVYsVj1HLFg9QixCPUR9b2U9Y2UubmVnKCksc2U9Rzt2YXIgSD1lZS5zcXIoKS5h''@;'; put 'put ''ZGQodGUuc3FyKCkpO3JldHVybiBvZS5zcXIoKS5hZGQoc2Uuc3FyKCkpLmNtcChIKT49MCYmKG9lPVUsc2U9cSksZWUubmVnYXRpdmUmJihlZT1lZS5uZWcoKSx0ZT10ZS5uZWcoKSksb2UubmVnYXRpdmUmJihvZT1vZS5uZWcoKSxzZT1zZS5uZWcoKSksW3thOmVlLGI6dGV9LHthOm9lLGI6''@;'; put 'put ''c2V9XX0sTy5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbihJKXt2YXIgaz10aGlzLmVuZG8uYmFzaXMsRT1rWzBdLGo9a1sxXSxWPWouYi5tdWwoSSkuZGl2Um91bmQodGhpcy5uKSxCPUUuYi5uZWcoKS5tdWwoSSkuZGl2Um91bmQodGhpcy5uKSxZPVYubXVsKEUuYSksWD1CLm11bChq''@;'; put 'put ''LmEpLFU9Vi5tdWwoRS5iKSxxPUIubXVsKGouYik7cmV0dXJue2sxOkkuc3ViKFkpLnN1YihYKSxrMjpVLmFkZChxKS5uZWcoKX19LE8ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oSSxrKXsoST1uZXcgeChJLDE2KSkucmVkfHwoST1JLnRvUmVkKHRoaXMucmVkKSk7dmFyIEU9SS5y''@;'; put 'put ''ZWRTcXIoKS5yZWRNdWwoSSkucmVkSUFkZChJLnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksaj1FLnJlZFNxcnQoKTtpZigwIT09ai5yZWRTcXIoKS5yZWRTdWIoRSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIFY9ai5mcm9tUmVk''@;'; put 'put ''KCkuaXNPZGQoKTtyZXR1cm4oayYmIVZ8fCFrJiZWKSYmKGo9ai5yZWROZWcoKSksdGhpcy5wb2ludChJLGopfSxPLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihJKXtpZihJLmluZilyZXR1cm4hMDt2YXIgaz1JLngsRT1JLnksaj10aGlzLmEucmVkTXVsKGspLFY9ay5yZWRTcXIoKS5y''@;'; put 'put ''ZWRNdWwoaykucmVkSUFkZChqKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1FLnJlZFNxcigpLnJlZElTdWIoVikuY21wbigwKX0sTy5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKEksayxFKXtmb3IodmFyIGo9dGhpcy5fZW5kb1duYWZUMSxWPXRoaXMuX2VuZG9XbmFm''@;'; put 'put ''VDIsQj0wO0I8SS5sZW5ndGg7QisrKXt2YXIgWT10aGlzLl9lbmRvU3BsaXQoa1tCXSksWD1JW0JdLFU9WC5fZ2V0QmV0YSgpO1kuazEubmVnYXRpdmUmJihZLmsxLmluZWcoKSxYPVgubmVnKCEwKSksWS5rMi5uZWdhdGl2ZSYmKFkuazIuaW5lZygpLFU9VS5uZWcoITApKSxqWzIqQl09WCxq''@;'; put 'put ''WzIqQisxXT1VLFZbMipCXT1ZLmsxLFZbMipCKzFdPVkuazJ9Zm9yKHZhciBxPXRoaXMuX3duYWZNdWxBZGQoMSxqLFYsMipCLEUpLGVlPTA7ZWU8MipCO2VlKyspaltlZV09bnVsbCxWW2VlXT1udWxsO3JldHVybiBxfSxtKFIsbGUuQmFzZVBvaW50KSxPLnByb3RvdHlwZS5wb2ludD1mdW5j''@;'; put 'put ''dGlvbihJLGssRSl7cmV0dXJuIG5ldyBSKHRoaXMsSSxrLEUpfSxPLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKEksayl7cmV0dXJuIFIuZnJvbUpTT04odGhpcyxJLGspfSxSLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIEk9''@;'; put 'put ''dGhpcy5wcmVjb21wdXRlZDtpZihJJiZJLmJldGEpcmV0dXJuIEkuYmV0YTt2YXIgaz10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoSSl7dmFyIEU9dGhpcy5jdXJ2ZSxqPWZ1bmN0aW9uKFYpe3JldHVybiBFLnBvaW50KFYu''@;'; put 'put ''eC5yZWRNdWwoRS5lbmRvLmJldGEpLFYueSl9O0kuYmV0YT1rLGsucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6SS5uYWYmJnt3bmQ6SS5uYWYud25kLHBvaW50czpJLm5hZi5wb2ludHMubWFwKGopfSxkb3VibGVzOkkuZG91YmxlcyYme3N0ZXA6SS5kb3VibGVzLnN0ZXAscG9pbnRzOkku''@;'; put 'put ''ZG91Ymxlcy5wb2ludHMubWFwKGopfX19cmV0dXJuIGt9fSxSLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRo''@;'; put 'put ''aXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2lu''@;'; put 'put ''dHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxSLmZyb21KU09OPWZ1bmN0aW9uKEksayxFKXsic3RyaW5nIj09dHlwZW9mIGsmJihrPUpTT04ucGFyc2UoaykpO3ZhciBqPUkucG9pbnQoa1swXSxrWzFdLEUpO2lmKCFrWzJdKXJldHVybiBqO2Z1bmN0aW9uIFYoWSl7cmV0dXJuIEku''@;'; put 'put ''cG9pbnQoWVswXSxZWzFdLEUpfXZhciBCPWtbMl07cmV0dXJuIGoucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOkIuZG91YmxlcyYme3N0ZXA6Qi5kb3VibGVzLnN0ZXAscG9pbnRzOltqXS5jb25jYXQoQi5kb3VibGVzLnBvaW50cy5tYXAoVikpfSxuYWY6Qi5uYWYmJnt3bmQ6Qi5u''@;'; put 'put ''YWYud25kLHBvaW50czpbal0uY29uY2F0KEIubmFmLnBvaW50cy5tYXAoVikpfX0san0sUi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9T''@;'; put 'put ''dHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxSLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxSLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oSSl7aWYodGhpcy5pbmYpcmV0dXJuIEk7aWYoSS5pbmYp''@;'; put 'put ''cmV0dXJuIHRoaXM7aWYodGhpcy5lcShJKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKEkpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoSS54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBrPXRo''@;'; put 'put ''aXMueS5yZWRTdWIoSS55KTswIT09ay5jbXBuKDApJiYoaz1rLnJlZE11bCh0aGlzLngucmVkU3ViKEkueCkucmVkSW52bSgpKSk7dmFyIEU9ay5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihJLngpLGo9ay5yZWRNdWwodGhpcy54LnJlZFN1YihFKSkucmVkSVN1Yih0aGlzLnkp''@;'; put 'put ''O3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEUsail9LFIucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBJPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09SS5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFy''@;'; put 'put ''IGs9dGhpcy5jdXJ2ZS5hLEU9dGhpcy54LnJlZFNxcigpLGo9SS5yZWRJbnZtKCksVj1FLnJlZEFkZChFKS5yZWRJQWRkKEUpLnJlZElBZGQoaykucmVkTXVsKGopLEI9Vi5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksWT1WLnJlZE11bCh0aGlzLngucmVkU3ViKEIp''@;'; put 'put ''KS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoQixZKX0sUi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxSLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LFIucHJvdG90eXBl''@;'; put 'put ''Lm11bD1mdW5jdGlvbihJKXtyZXR1cm4gST1uZXcgeChJLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0RvdWJsZXMoSSk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxJKTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtJ''@;'; put 'put ''XSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLEkpfSxSLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oSSxrLEUpe3ZhciBqPVt0aGlzLGtdLFY9W0ksRV07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChqLFYpOnRoaXMuY3VydmUuX3duYWZNdWxB''@;'; put 'put ''ZGQoMSxqLFYsMil9LFIucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oSSxrLEUpe3ZhciBqPVt0aGlzLGtdLFY9W0ksRV07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChqLFYsITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxqLFYsMiwhMCl9''@;'; put 'put ''LFIucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEkpe3JldHVybiB0aGlzPT09SXx8dGhpcy5pbmY9PT1JLmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcChJLngpJiYwPT09dGhpcy55LmNtcChJLnkpKX0sUi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEkpe2lmKHRoaXMuaW5mKXJldHVybiB0''@;'; put 'put ''aGlzO3ZhciBrPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoSSYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIEU9dGhpcy5wcmVjb21wdXRlZCxqPWZ1bmN0aW9uKFYpe3JldHVybiBWLm5lZygpfTtrLnByZWNvbXB1dGVkPXtuYWY6RS5uYWYmJnt3bmQ6RS5uYWYu''@;'; put 'put ''d25kLHBvaW50czpFLm5hZi5wb2ludHMubWFwKGopfSxkb3VibGVzOkUuZG91YmxlcyYme3N0ZXA6RS5kb3VibGVzLnN0ZXAscG9pbnRzOkUuZG91Ymxlcy5wb2ludHMubWFwKGopfX19cmV0dXJuIGt9LFIucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZj90aGlzLmN1''@;'; put 'put ''cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSl9LG0oeixsZS5CYXNlUG9pbnQpLE8ucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihJLGssRSl7cmV0dXJuIG5ldyB6KHRoaXMsSSxrLEUpfSx6LnByb3RvdHlw''@;'; put 'put ''ZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBJPXRoaXMuei5yZWRJbnZtKCksaz1JLnJlZFNxcigpLEU9dGhpcy54LnJlZE11bChrKSxqPXRoaXMueS5yZWRNdWwoaykucmVkTXVsKEkpO3JldHVybiB0''@;'; put 'put ''aGlzLmN1cnZlLnBvaW50KEUsail9LHoucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LHoucHJvdG90eXBlLmFkZD1mdW5jdGlvbihJKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gSTtp''@;'; put 'put ''ZihJLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgaz1JLnoucmVkU3FyKCksRT10aGlzLnoucmVkU3FyKCksaj10aGlzLngucmVkTXVsKGspLFY9SS54LnJlZE11bChFKSxCPXRoaXMueS5yZWRNdWwoay5yZWRNdWwoSS56KSksWT1JLnkucmVkTXVsKEUucmVkTXVsKHRoaXMueikpLFg9''@;'; put 'put ''ai5yZWRTdWIoViksVT1CLnJlZFN1YihZKTtpZigwPT09WC5jbXBuKDApKXJldHVybiAwIT09VS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBxPVgucmVkU3FyKCksZWU9cS5yZWRNdWwoWCksdGU9ai5yZWRNdWwocSksb2U9VS5yZWRT''@;'; put 'put ''cXIoKS5yZWRJQWRkKGVlKS5yZWRJU3ViKHRlKS5yZWRJU3ViKHRlKSxzZT1VLnJlZE11bCh0ZS5yZWRJU3ViKG9lKSkucmVkSVN1YihCLnJlZE11bChlZSkpLGhlPXRoaXMuei5yZWRNdWwoSS56KS5yZWRNdWwoWCk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG9lLHNlLGhlKX0sei5wcm90''@;'; put 'put ''b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24oSSl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIEkudG9KKCk7aWYoSS5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGs9dGhpcy56LnJlZFNxcigpLEU9dGhpcy54LGo9SS54LnJlZE11bChrKSxWPXRoaXMueSxCPUkueS5yZWRNdWwoayku''@;'; put 'put ''cmVkTXVsKHRoaXMueiksWT1FLnJlZFN1YihqKSxYPVYucmVkU3ViKEIpO2lmKDA9PT1ZLmNtcG4oMCkpcmV0dXJuIDAhPT1YLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIFU9WS5yZWRTcXIoKSxxPVUucmVkTXVsKFkpLGVlPUUucmVk''@;'; put 'put ''TXVsKFUpLHRlPVgucmVkU3FyKCkucmVkSUFkZChxKS5yZWRJU3ViKGVlKS5yZWRJU3ViKGVlKSxvZT1YLnJlZE11bChlZS5yZWRJU3ViKHRlKSkucmVkSVN1YihWLnJlZE11bChxKSksc2U9dGhpcy56LnJlZE11bChZKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGUsb2Usc2UpfSx6LnBy''@;'; put 'put ''b3RvdHlwZS5kYmxwPWZ1bmN0aW9uKEkpe2lmKDA9PT1JKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFJKXJldHVybiB0aGlzLmRibCgpO3ZhciBrO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgRT10aGlzO2Zvcihr''@;'; put 'put ''PTA7azxJO2srKylFPUUuZGJsKCk7cmV0dXJuIEV9dmFyIGo9dGhpcy5jdXJ2ZS5hLFY9dGhpcy5jdXJ2ZS50aW52LEI9dGhpcy54LFk9dGhpcy55LFg9dGhpcy56LFU9WC5yZWRTcXIoKS5yZWRTcXIoKSxxPVkucmVkQWRkKFkpO2ZvcihrPTA7azxJO2srKyl7dmFyIGVlPUIucmVkU3FyKCks''@;'; put 'put ''dGU9cS5yZWRTcXIoKSxvZT10ZS5yZWRTcXIoKSxzZT1lZS5yZWRBZGQoZWUpLnJlZElBZGQoZWUpLnJlZElBZGQoai5yZWRNdWwoVSkpLGhlPUIucmVkTXVsKHRlKSx1ZT1zZS5yZWRTcXIoKS5yZWRJU3ViKGhlLnJlZEFkZChoZSkpLGNlPWhlLnJlZElTdWIodWUpLEc9c2UucmVkTXVsKGNl''@;'; put 'put ''KTtHPUcucmVkSUFkZChHKS5yZWRJU3ViKG9lKTt2YXIgYj1xLnJlZE11bChYKTtrKzE8SSYmKFU9VS5yZWRNdWwob2UpKSxCPXVlLFg9YixxPUd9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEIscS5yZWRNdWwoViksWCl9LHoucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LHoucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIEksayxFO2lmKHRoaXMuek9uZSl7dmFyIGo9dGhp''@;'; put 'put ''cy54LnJlZFNxcigpLFY9dGhpcy55LnJlZFNxcigpLEI9Vi5yZWRTcXIoKSxZPXRoaXMueC5yZWRBZGQoVikucmVkU3FyKCkucmVkSVN1YihqKS5yZWRJU3ViKEIpO1k9WS5yZWRJQWRkKFkpO3ZhciBYPWoucmVkQWRkKGopLnJlZElBZGQoaiksVT1YLnJlZFNxcigpLnJlZElTdWIoWSkucmVk''@;'; put 'put ''SVN1YihZKSxxPUIucmVkSUFkZChCKTtxPShxPXEucmVkSUFkZChxKSkucmVkSUFkZChxKSxJPVUsaz1YLnJlZE11bChZLnJlZElTdWIoVSkpLnJlZElTdWIocSksRT10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgZWU9dGhpcy54LnJlZFNxcigpLHRlPXRoaXMueS5yZWRTcXIoKSxv''@;'; put 'put ''ZT10ZS5yZWRTcXIoKSxzZT10aGlzLngucmVkQWRkKHRlKS5yZWRTcXIoKS5yZWRJU3ViKGVlKS5yZWRJU3ViKG9lKTtzZT1zZS5yZWRJQWRkKHNlKTt2YXIgaGU9ZWUucmVkQWRkKGVlKS5yZWRJQWRkKGVlKSx1ZT1oZS5yZWRTcXIoKSxjZT1vZS5yZWRJQWRkKG9lKTtjZT0oY2U9Y2UucmVk''@;'; put 'put ''SUFkZChjZSkpLnJlZElBZGQoY2UpLEk9dWUucmVkSVN1YihzZSkucmVkSVN1YihzZSksaz1oZS5yZWRNdWwoc2UucmVkSVN1YihJKSkucmVkSVN1YihjZSksRT0oRT10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQoRSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEksayxFKX0sei5w''@;'; put 'put ''cm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIEksayxFO2lmKHRoaXMuek9uZSl7dmFyIGo9dGhpcy54LnJlZFNxcigpLFY9dGhpcy55LnJlZFNxcigpLEI9Vi5yZWRTcXIoKSxZPXRoaXMueC5yZWRBZGQoVikucmVkU3FyKCkucmVkSVN1YihqKS5yZWRJU3ViKEIpO1k9WS5yZWRJ''@;'; put 'put ''QWRkKFkpO3ZhciBYPWoucmVkQWRkKGopLnJlZElBZGQoaikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLFU9WC5yZWRTcXIoKS5yZWRJU3ViKFkpLnJlZElTdWIoWSk7ST1VO3ZhciBxPUIucmVkSUFkZChCKTtxPShxPXEucmVkSUFkZChxKSkucmVkSUFkZChxKSxrPVgucmVkTXVsKFkucmVkSVN1''@;'; put 'put ''YihVKSkucmVkSVN1YihxKSxFPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBlZT10aGlzLnoucmVkU3FyKCksdGU9dGhpcy55LnJlZFNxcigpLG9lPXRoaXMueC5yZWRNdWwodGUpLHNlPXRoaXMueC5yZWRTdWIoZWUpLnJlZE11bCh0aGlzLngucmVkQWRkKGVlKSk7c2U9c2UucmVk''@;'; put 'put ''QWRkKHNlKS5yZWRJQWRkKHNlKTt2YXIgaGU9b2UucmVkSUFkZChvZSksdWU9KGhlPWhlLnJlZElBZGQoaGUpKS5yZWRBZGQoaGUpO0k9c2UucmVkU3FyKCkucmVkSVN1Yih1ZSksRT10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1Yih0ZSkucmVkSVN1YihlZSk7dmFyIGNl''@;'; put 'put ''PXRlLnJlZFNxcigpO2NlPShjZT0oY2U9Y2UucmVkSUFkZChjZSkpLnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKSxrPXNlLnJlZE11bChoZS5yZWRJU3ViKEkpKS5yZWRJU3ViKGNlKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoSSxrLEUpfSx6LnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIEk9dGhpcy5jdXJ2ZS5hLGs9dGhpcy54LEU9dGhpcy55LGo9dGhpcy56LFY9ai5yZWRTcXIoKS5yZWRTcXIoKSxCPWsucmVkU3FyKCksWT1FLnJlZFNxcigpLFg9Qi5yZWRBZGQoQikucmVkSUFkZChCKS5yZWRJQWRkKEkucmVkTXVsKFYpKSxVPWsucmVkQWRkKGspLHE9KFU9VS5yZWRJ''@;'; put 'put ''QWRkKFUpKS5yZWRNdWwoWSksZWU9WC5yZWRTcXIoKS5yZWRJU3ViKHEucmVkQWRkKHEpKSx0ZT1xLnJlZElTdWIoZWUpLG9lPVkucmVkU3FyKCk7b2U9KG9lPShvZT1vZS5yZWRJQWRkKG9lKSkucmVkSUFkZChvZSkpLnJlZElBZGQob2UpO3ZhciBzZT1YLnJlZE11bCh0ZSkucmVkSVN1Yihv''@;'; put 'put ''ZSksaGU9RS5yZWRBZGQoRSkucmVkTXVsKGopO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChlZSxzZSxoZSl9LHoucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIEk9dGhpcy54LnJlZFNxcigpLGs9''@;'; put 'put ''dGhpcy55LnJlZFNxcigpLEU9dGhpcy56LnJlZFNxcigpLGo9ay5yZWRTcXIoKSxWPUkucmVkQWRkKEkpLnJlZElBZGQoSSksQj1WLnJlZFNxcigpLFk9dGhpcy54LnJlZEFkZChrKS5yZWRTcXIoKS5yZWRJU3ViKEkpLnJlZElTdWIoaiksWD0oWT0oWT0oWT1ZLnJlZElBZGQoWSkpLnJlZEFk''@;'; put 'put ''ZChZKS5yZWRJQWRkKFkpKS5yZWRJU3ViKEIpKS5yZWRTcXIoKSxVPWoucmVkSUFkZChqKTtVPShVPShVPVUucmVkSUFkZChVKSkucmVkSUFkZChVKSkucmVkSUFkZChVKTt2YXIgcT1WLnJlZElBZGQoWSkucmVkU3FyKCkucmVkSVN1YihCKS5yZWRJU3ViKFgpLnJlZElTdWIoVSksZWU9ay5y''@;'; put 'put ''ZWRNdWwocSk7ZWU9KGVlPWVlLnJlZElBZGQoZWUpKS5yZWRJQWRkKGVlKTt2YXIgdGU9dGhpcy54LnJlZE11bChYKS5yZWRJU3ViKGVlKTt0ZT0odGU9dGUucmVkSUFkZCh0ZSkpLnJlZElBZGQodGUpO3ZhciBvZT10aGlzLnkucmVkTXVsKHEucmVkTXVsKFUucmVkSVN1YihxKSkucmVkSVN1''@;'; put 'put ''YihZLnJlZE11bChYKSkpO29lPShvZT0ob2U9b2UucmVkSUFkZChvZSkpLnJlZElBZGQob2UpKS5yZWRJQWRkKG9lKTt2YXIgc2U9dGhpcy56LnJlZEFkZChZKS5yZWRTcXIoKS5yZWRJU3ViKEUpLnJlZElTdWIoWCk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRlLG9lLHNlKX0sei5wcm90''@;'; put 'put ''b3R5cGUubXVsPWZ1bmN0aW9uKEksayl7cmV0dXJuIEk9bmV3IHgoSSxrKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsSSl9LHoucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEkpe2lmKCJhZmZpbmUiPT09SS50eXBlKXJldHVybiB0aGlzLmVxKEkudG9KKCkpO2lmKHRoaXM9PT1JKXJldHVybiEw''@;'; put 'put ''O3ZhciBrPXRoaXMuei5yZWRTcXIoKSxFPUkuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChFKS5yZWRJU3ViKEkueC5yZWRNdWwoaykpLmNtcG4oMCkpcmV0dXJuITE7dmFyIGo9ay5yZWRNdWwodGhpcy56KSxWPUUucmVkTXVsKEkueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVs''@;'; put 'put ''KFYpLnJlZElTdWIoSS55LnJlZE11bChqKSkuY21wbigwKX0sei5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKEkpe3ZhciBrPXRoaXMuei5yZWRTcXIoKSxFPUkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChrKTtpZigwPT09dGhpcy54LmNtcChFKSlyZXR1cm4hMDtmb3IodmFyIGo9''@;'; put 'put ''SS5jbG9uZSgpLFY9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChrKTs7KXtpZihqLmlhZGQodGhpcy5jdXJ2ZS5uKSxqLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEUucmVkSUFkZChWKSwwPT09dGhpcy54LmNtcChFKSlyZXR1cm4hMH19LHoucHJvdG90eXBlLmluc3BlY3Q9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSx6LnByb3Rv''@;'; put 'put ''dHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDgwNDk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciB6LGFlPUllLHg9Rig3MTA3NiksbT1GKDkxMzIpLE09Rig0Njc2NykuYXNzZXJ0O2Z1bmN0aW9uIE8oSyl7dGhpcy5jdXJ2ZT0ic2hv''@;'; put 'put ''cnQiPT09Sy50eXBlP25ldyBtLnNob3J0KEspOiJlZHdhcmRzIj09PUsudHlwZT9uZXcgbS5lZHdhcmRzKEspOm5ldyBtLm1vbnQoSyksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD1LLmhhc2gsTSh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBj''@;'; put 'put ''dXJ2ZSIpLE0odGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5jdGlvbiBSKEssSSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFlLEsse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBrPW5l''@;'; put 'put ''dyBPKEkpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWUsSyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6a30pLGt9fSl9YWUuUHJlc2V0Q3VydmU9TyxSKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDp4LnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3''@;'; put 'put ''N2ExIDFlNzk0ODExIl19KSxSKCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDp4LnNo''@;'; put 'put ''YTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSxSKCJwMjU2Iix7dHlwZToi''@;'; put 'put ''c2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6eC5z''@;'; put 'put ''aGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJd''@;'; put 'put ''fSksUigicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAx''@;'; put 'put ''Mzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOnguc2hh''@;'; put 'put ''Mzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhm''@;'; put 'put ''NDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLFIoInA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkx''@;'; put 'put ''IDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''YSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIsaGFzaDp4LnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBm''@;'; put 'put ''ODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3''@;'; put 'put ''M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwIl19KSxSKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6eC5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksUigiZWQyNTUxOSIs''@;'; put 'put ''e3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQx''@;'; put 'put ''ZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOnguc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1''@;'; put 'put ''YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4Il19KTt0cnl7ej1GKDI3Mjc0KX1jYXRjaHt6PXZvaWQgMH1SKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6''@;'; put 'put ''ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoi''@;'; put 'put ''MSIsaGFzaDp4LnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJh''@;'; put 'put ''c2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6''@;'; put 'put ''ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4Iix6XX0pfSw2NDQzOihhdCxJZSxGKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDkyNDQ3KSxtPUYoNDY3NjcpLGxlPUYoODA0OSksTT1GKDYwMDgyKSxPPW0uYXNzZXJ0LFI9Rig5MTM3Myksej1GKDU3NzQ2KTtmdW5jdGlvbiBLKEkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEspKXJldHVybiBuZXcgSyhJKTsic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIEkmJihPKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsZSxJKSwiVW5rbm93biBjdXJ2ZSAiK0kpLEk9bGVbSV0pLEkgaW5zdGFuY2VvZiBsZS5QcmVzZXRDdXJ2ZSYmKEk9e2N1cnZlOkl9KSx0aGlzLmN1cnZlPUkuY3VydmUuY3VydmUsdGhpcy5uPXRo''@;'; put 'put ''aXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz1JLmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUoSS5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHRoaXMuaGFzaD1JLmhhc2h8fEkuY3VydmUuaGFzaH1hdC5leHBvcnRzPUssSy5wcm90''@;'; put 'put ''b3R5cGUua2V5UGFpcj1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IFIodGhpcyxrKX0sSy5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gUi5mcm9tUHJpdmF0ZSh0aGlzLGssRSl9LEsucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oayxFKXtyZXR1''@;'; put 'put ''cm4gUi5mcm9tUHVibGljKHRoaXMsayxFKX0sSy5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihrKXtrfHwoaz17fSk7Zm9yKHZhciBFPW5ldyB4KHtoYXNoOnRoaXMuaGFzaCxwZXJzOmsucGVycyxwZXJzRW5jOmsucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6ay5lbnRyb3B5fHxNKHRo''@;'; put 'put ''aXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6ay5lbnRyb3B5JiZrLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0aGlzLm4udG9BcnJheSgpfSksaj10aGlzLm4uYnl0ZUxlbmd0aCgpLFY9dGhpcy5uLnN1YihuZXcgYWUoMikpOzspe3ZhciBCPW5ldyBhZShFLmdlbmVyYXRlKGop''@;'; put 'put ''KTtpZighKEIuY21wKFYpPjApKXJldHVybiBCLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoQil9fSxLLnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oayxFKXt2YXIgaj04KmsuYnl0ZUxlbmd0aCgpLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gaj4wJiYoaz1rLnVzaHJu''@;'; put 'put ''KGopKSwhRSYmay5jbXAodGhpcy5uKT49MD9rLnN1Yih0aGlzLm4pOmt9LEsucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oayxFLGosVil7Im9iamVjdCI9PXR5cGVvZiBqJiYoVj1qLGo9bnVsbCksVnx8KFY9e30pLEU9dGhpcy5rZXlGcm9tUHJpdmF0ZShFLGopLGs9dGhpcy5fdHJ1bmNhdGVU''@;'; put 'put ''b04obmV3IGFlKGssMTYpKTtmb3IodmFyIEI9dGhpcy5uLmJ5dGVMZW5ndGgoKSxZPUUuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIixCKSxYPWsudG9BcnJheSgiYmUiLEIpLFU9bmV3IHgoe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6WSxub25jZTpYLHBlcnM6Vi5wZXJzLHBlcnNFbmM6Vi5w''@;'; put 'put ''ZXJzRW5jfHwidXRmOCJ9KSxxPXRoaXMubi5zdWIobmV3IGFlKDEpKSxlZT0wOztlZSsrKXt2YXIgdGU9Vi5rP1YuayhlZSk6bmV3IGFlKFUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKHRlPXRoaXMuX3RydW5jYXRlVG9OKHRlLCEwKSkuY21wbigxKTw9MHx8dGUuY21w''@;'; put 'put ''KHEpPj0wKSl7dmFyIG9lPXRoaXMuZy5tdWwodGUpO2lmKCFvZS5pc0luZmluaXR5KCkpe3ZhciBzZT1vZS5nZXRYKCksaGU9c2UudW1vZCh0aGlzLm4pO2lmKDAhPT1oZS5jbXBuKDApKXt2YXIgdWU9dGUuaW52bSh0aGlzLm4pLm11bChoZS5tdWwoRS5nZXRQcml2YXRlKCkpLmlhZGQoaykp''@;'; put 'put ''O2lmKDAhPT0odWU9dWUudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgY2U9KG9lLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1zZS5jbXAoaGUpPzI6MCk7cmV0dXJuIFYuY2Fub25pY2FsJiZ1ZS5jbXAodGhpcy5uaCk+MCYmKHVlPXRoaXMubi5zdWIodWUpLGNlXj0xKSxuZXcgeih7cjpo''@;'; put 'put ''ZSxzOnVlLHJlY292ZXJ5UGFyYW06Y2V9KX19fX19fSxLLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oayxFLGosVil7az10aGlzLl90cnVuY2F0ZVRvTihuZXcgYWUoaywxNikpLGo9dGhpcy5rZXlGcm9tUHVibGljKGosVik7dmFyIEI9KEU9bmV3IHooRSwiaGV4IikpLnIsWT1FLnM7aWYo''@;'; put 'put ''Qi5jbXBuKDEpPDB8fEIuY21wKHRoaXMubik+PTB8fFkuY21wbigxKTwwfHxZLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBlZSxYPVkuaW52bSh0aGlzLm4pLFU9WC5tdWwoaykudW1vZCh0aGlzLm4pLHE9WC5tdWwoQikudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3''@;'; put 'put ''ZWxsVHJpY2s/IShlZT10aGlzLmcuam11bEFkZChVLGouZ2V0UHVibGljKCkscSkpLmlzSW5maW5pdHkoKSYmZWUuZXFYVG9QKEIpOiEoZWU9dGhpcy5nLm11bEFkZChVLGouZ2V0UHVibGljKCkscSkpLmlzSW5maW5pdHkoKSYmMD09PWVlLmdldFgoKS51bW9kKHRoaXMubikuY21wKEIpfSxL''@;'; put 'put ''LnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKEksayxFLGope08oKDMmRSk9PT1FLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzIiksaz1uZXcgeihrLGopO3ZhciBWPXRoaXMubixCPW5ldyBhZShJKSxZPWsucixYPWsucyxVPTEmRSxxPUU+PjE7aWYo''@;'; put 'put ''WS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJnEpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtZPXRoaXMuY3VydmUucG9pbnRGcm9tWChxP1kuYWRkKHRoaXMuY3VydmUubik6WSxVKTt2YXIgZWU9ay5yLmlu''@;'; put 'put ''dm0oViksdGU9Vi5zdWIoQikubXVsKGVlKS51bW9kKFYpLG9lPVgubXVsKGVlKS51bW9kKFYpO3JldHVybiB0aGlzLmcubXVsQWRkKHRlLFksb2UpfSxLLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKEksayxFLGope2lmKG51bGwhPT0oaz1uZXcgeihrLGopKS5yZWNv''@;'; put 'put ''dmVyeVBhcmFtKXJldHVybiBrLnJlY292ZXJ5UGFyYW07Zm9yKHZhciBWPTA7Vjw0O1YrKyl7dmFyIEI7dHJ5e0I9dGhpcy5yZWNvdmVyUHViS2V5KEksayxWKX1jYXRjaHtjb250aW51ZX1pZihCLmVxKEUpKXJldHVybiBWfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQg''@;'; put 'put ''cmVjb3ZlcnkgZmFjdG9yIil9fSw5MTM3MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcpLG09Rig0Njc2NykuYXNzZXJ0O2Z1bmN0aW9uIGxlKE0sTyl7dGhpcy5lYz1NLHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsTy5wcml2JiZ0aGlzLl9pbXBvcnRQcml2''@;'; put 'put ''YXRlKE8ucHJpdixPLnByaXZFbmMpLE8ucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoTy5wdWIsTy5wdWJFbmMpfWF0LmV4cG9ydHM9bGUsbGUuZnJvbVB1YmxpYz1mdW5jdGlvbihPLFIseil7cmV0dXJuIFIgaW5zdGFuY2VvZiBsZT9SOm5ldyBsZShPLHtwdWI6UixwdWJFbmM6en0pfSxsZS5m''@;'; put 'put ''cm9tUHJpdmF0ZT1mdW5jdGlvbihPLFIseil7cmV0dXJuIFIgaW5zdGFuY2VvZiBsZT9SOm5ldyBsZShPLHtwcml2OlIscHJpdkVuYzp6fSl9LGxlLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBPPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIE8uaXNJbmZpbml0eSgpP3tyZXN1''@;'; put 'put ''bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTpPLnZhbGlkYXRlKCk/Ty5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNv''@;'; put 'put ''bjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxsZS5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKE8sUil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBPJiYoUj1PLE89bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLFI/dGhpcy5wdWIu''@;'; put 'put ''ZW5jb2RlKFIsTyk6dGhpcy5wdWJ9LGxlLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKE8pe3JldHVybiJoZXgiPT09Tz90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxsZS5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oTyxSKXt0aGlzLnByaXY9bmV3''@;'; put 'put ''IGFlKE8sUnx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxsZS5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihPLFIpe2lmKE8ueHx8Ty55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9tKE8ueCwiTmVlZCB4IGNvb3JkaW5h''@;'; put 'put ''dGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmbShPLngmJk8ueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChPLngsTy55KSk7dGhpcy5wdWI9''@;'; put 'put ''dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChPLFIpfSxsZS5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKE8pe3JldHVybiBPLnZhbGlkYXRlKCl8fG0oTy52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLE8ubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxsZS5wcm90b3R5''@;'; put 'put ''cGUuc2lnbj1mdW5jdGlvbihPLFIseil7cmV0dXJuIHRoaXMuZWMuc2lnbihPLHRoaXMsUix6KX0sbGUucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihPLFIpe3JldHVybiB0aGlzLmVjLnZlcmlmeShPLFIsdGhpcyl9LGxlLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxL''@;'; put 'put ''ZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sNTc3NDY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMzg3KSx4PUYoNDY3NjcpLG09eC5hc3NlcnQ7''@;'; put 'put ''ZnVuY3Rpb24gbGUoSyxJKXtpZihLIGluc3RhbmNlb2YgbGUpcmV0dXJuIEs7dGhpcy5faW1wb3J0REVSKEssSSl8fChtKEsuciYmSy5zLCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IGFlKEsuciwxNiksdGhpcy5zPW5ldyBhZShLLnMsMTYpLHRoaXMucmVjb3ZlcnlQ''@;'; put 'put ''YXJhbT12b2lkIDA9PT1LLnJlY292ZXJ5UGFyYW0/bnVsbDpLLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIE0oKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gTyhLLEkpe3ZhciBrPUtbSS5wbGFjZSsrXTtpZighKDEyOCZrKSlyZXR1cm4gazt2YXIgRT0xNSZrO2lmKDA9PT1FfHxFPjQpcmV0dXJu''@;'; put 'put ''ITE7Zm9yKHZhciBqPTAsVj0wLEI9SS5wbGFjZTtWPEU7VisrLEIrKylqPDw9OCxqfD1LW0JdLGo+Pj49MDtyZXR1cm4hKGo8PTEyNykmJihJLnBsYWNlPUIsail9ZnVuY3Rpb24gUihLKXtmb3IodmFyIEk9MCxrPUsubGVuZ3RoLTE7IUtbSV0mJiEoMTI4JktbSSsxXSkmJkk8azspSSsrO3Jl''@;'; put 'put ''dHVybiAwPT09ST9LOksuc2xpY2UoSSl9ZnVuY3Rpb24geihLLEkpe2lmKEk8MTI4KUsucHVzaChJKTtlbHNle3ZhciBrPTErKE1hdGgubG9nKEkpL01hdGguTE4yPj4+Myk7Zm9yKEsucHVzaCgxMjh8ayk7LS1rOylLLnB1c2goST4+PihrPDwzKSYyNTUpO0sucHVzaChJKX19YXQuZXhwb3J0''@;'; put 'put ''cz1sZSxsZS5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlvbihJLGspe0k9eC50b0FycmF5KEksayk7dmFyIEU9bmV3IE07aWYoNDghPT1JW0UucGxhY2UrK10pcmV0dXJuITE7dmFyIGo9TyhJLEUpO2lmKCExPT09anx8aitFLnBsYWNlIT09SS5sZW5ndGh8fDIhPT1JW0UucGxhY2UrK10p''@;'; put 'put ''cmV0dXJuITE7dmFyIFY9TyhJLEUpO2lmKCExPT09VilyZXR1cm4hMTt2YXIgQj1JLnNsaWNlKEUucGxhY2UsVitFLnBsYWNlKTtpZihFLnBsYWNlKz1WLDIhPT1JW0UucGxhY2UrK10pcmV0dXJuITE7dmFyIFk9TyhJLEUpO2lmKCExPT09WXx8SS5sZW5ndGghPT1ZK0UucGxhY2UpcmV0dXJu''@;'; put 'put ''ITE7dmFyIFg9SS5zbGljZShFLnBsYWNlLFkrRS5wbGFjZSk7aWYoMD09PUJbMF0pe2lmKCEoMTI4JkJbMV0pKXJldHVybiExO0I9Qi5zbGljZSgxKX1pZigwPT09WFswXSl7aWYoISgxMjgmWFsxXSkpcmV0dXJuITE7WD1YLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3IGFlKEIpLHRoaXMu''@;'; put 'put ''cz1uZXcgYWUoWCksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LGxlLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihJKXt2YXIgaz10aGlzLnIudG9BcnJheSgpLEU9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JmtbMF0mJihrPVswXS5jb25jYXQoaykpLDEyOCZFWzBdJiYoRT1bMF0uY29u''@;'; put 'put ''Y2F0KEUpKSxrPVIoayksRT1SKEUpOyEoRVswXXx8MTI4JkVbMV0pOylFPUUuc2xpY2UoMSk7dmFyIGo9WzJdO3ooaixrLmxlbmd0aCksKGo9ai5jb25jYXQoaykpLnB1c2goMikseihqLEUubGVuZ3RoKTt2YXIgVj1qLmNvbmNhdChFKSxCPVs0OF07cmV0dXJuIHooQixWLmxlbmd0aCksQj1C''@;'; put 'put ''LmNvbmNhdChWKSx4LmVuY29kZShCLEkpfX0sOTk1Nzc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDcxMDc2KSx4PUYoODA0OSksbT1GKDQ2NzY3KSxsZT1tLmFzc2VydCxNPW0ucGFyc2VCeXRlcyxPPUYoMTcwMTIpLFI9Rig3ODA2Mik7ZnVuY3Rpb24geihLKXtpZihsZSgi''@;'; put 'put ''ZWQyNTUxOSI9PT1LLCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KEspO3RoaXMuY3VydmU9Sz14W0tdLmN1cnZlLHRoaXMuZz1LLmcsdGhpcy5nLnByZWNvbXB1dGUoSy5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9p''@;'; put 'put ''bnRDbGFzcz1LLnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoSy5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1hZS5zaGE1MTJ9YXQuZXhwb3J0cz16LHoucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oSSxrKXtJPU0oSSk7dmFyIEU9dGhpcy5rZXlG''@;'; put 'put ''cm9tU2VjcmV0KGspLGo9dGhpcy5oYXNoSW50KEUubWVzc2FnZVByZWZpeCgpLEkpLFY9dGhpcy5nLm11bChqKSxCPXRoaXMuZW5jb2RlUG9pbnQoViksWT10aGlzLmhhc2hJbnQoQixFLnB1YkJ5dGVzKCksSSkubXVsKEUucHJpdigpKSxYPWouYWRkKFkpLnVtb2QodGhpcy5jdXJ2ZS5uKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOlYsUzpYLFJlbmNvZGVkOkJ9KX0sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEksayxFKXtJPU0oSSksaz10aGlzLm1ha2VTaWduYXR1cmUoayk7dmFyIGo9dGhpcy5rZXlGcm9tUHVibGljKEUpLFY9dGhpcy5oYXNoSW50KGsuUmVuY29k''@;'; put 'put ''ZWQoKSxqLnB1YkJ5dGVzKCksSSksQj10aGlzLmcubXVsKGsuUygpKTtyZXR1cm4gay5SKCkuYWRkKGoucHViKCkubXVsKFYpKS5lcShCKX0sei5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgST10aGlzLmhhc2goKSxrPTA7azxhcmd1bWVudHMubGVuZ3RoO2srKylJLnVw''@;'; put 'put ''ZGF0ZShhcmd1bWVudHNba10pO3JldHVybiBtLmludEZyb21MRShJLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LHoucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oSSl7cmV0dXJuIE8uZnJvbVB1YmxpYyh0aGlzLEkpfSx6LnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1''@;'; put 'put ''bmN0aW9uKEkpe3JldHVybiBPLmZyb21TZWNyZXQodGhpcyxJKX0sei5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihJKXtyZXR1cm4gSSBpbnN0YW5jZW9mIFI/STpuZXcgUih0aGlzLEkpfSx6LnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihJKXt2YXIgaz1JLmdldFko''@;'; put 'put ''KS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIGtbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9SS5nZXRYKCkuaXNPZGQoKT8xMjg6MCxrfSx6LnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihJKXt2YXIgaz0oST1tLnBhcnNlQnl0ZXMoSSkpLmxlbmd0aC0x''@;'; put 'put ''LEU9SS5zbGljZSgwLGspLmNvbmNhdCgtMTI5Jklba10pLGo9MCE9KDEyOCZJW2tdKSxWPW0uaW50RnJvbUxFKEUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoVixqKX0sei5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKEkpe3JldHVybiBJLnRvQXJyYXkoImxlIix0aGlzLmVu''@;'; put 'put ''Y29kaW5nTGVuZ3RoKX0sei5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKEkpe3JldHVybiBtLmludEZyb21MRShJKX0sei5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihJKXtyZXR1cm4gSSBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDE3MDEyOihhdCxJZSxGKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgYWU9Rig0Njc2NykseD1hZS5hc3NlcnQsbT1hZS5wYXJzZUJ5dGVzLGxlPWFlLmNhY2hlZFByb3BlcnR5O2Z1bmN0aW9uIE0oTyxSKXt0aGlzLmVkZHNhPU8sdGhpcy5fc2VjcmV0PW0oUi5zZWNyZXQpLE8uaXNQb2ludChSLnB1Yik/dGhpcy5fcHViPVIucHViOnRoaXMu''@;'; put 'put ''X3B1YkJ5dGVzPW0oUi5wdWIpfU0uZnJvbVB1YmxpYz1mdW5jdGlvbihSLHope3JldHVybiB6IGluc3RhbmNlb2YgTT96Om5ldyBNKFIse3B1Yjp6fSl9LE0uZnJvbVNlY3JldD1mdW5jdGlvbihSLHope3JldHVybiB6IGluc3RhbmNlb2YgTT96Om5ldyBNKFIse3NlY3JldDp6fSl9LE0ucHJv''@;'; put 'put ''dG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LGxlKE0sInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksbGUoTSwicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlz''@;'; put 'put ''LmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLGxlKE0sInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgUj10aGlzLmVkZHNhLHo9dGhpcy5oYXNoKCksSz1SLmVuY29kaW5nTGVuZ3RoLTEsST16LnNsaWNlKDAsUi5lbmNv''@;'; put 'put ''ZGluZ0xlbmd0aCk7cmV0dXJuIElbMF0mPTI0OCxJW0tdJj0xMjcsSVtLXXw9NjQsSX0pLGxlKE0sInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksbGUoTSwiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5o''@;'; put 'put ''YXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksbGUoTSwibWVzc2FnZVByZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxNLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFIpe3JldHVybiB4KHRo''@;'; put 'put ''aXMuX3NlY3JldCwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24oUix0aGlzKX0sTS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFIseil7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KFIseix0aGlzKX0sTS5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKFIp''@;'; put 'put ''e3JldHVybiB4KHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLGFlLmVuY29kZSh0aGlzLnNlY3JldCgpLFIpfSxNLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oUil7cmV0dXJuIGFlLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksUil9LGF0LmV4cG9ydHM9TX0sNzgw''@;'; put 'put ''NjI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMzg3KSx4PUYoNDY3NjcpLG09eC5hc3NlcnQsbGU9eC5jYWNoZWRQcm9wZXJ0eSxNPXgucGFyc2VCeXRlcztmdW5jdGlvbiBPKFIseil7dGhpcy5lZGRzYT1SLCJvYmplY3QiIT10eXBlb2YgeiYmKHo9TSh6KSksQXJyYXku''@;'; put 'put ''aXNBcnJheSh6KSYmKHo9e1I6ei5zbGljZSgwLFIuZW5jb2RpbmdMZW5ndGgpLFM6ei5zbGljZShSLmVuY29kaW5nTGVuZ3RoKX0pLG0oei5SJiZ6LlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLFIuaXNQb2ludCh6LlIpJiYodGhpcy5fUj16LlIpLHouUyBpbnN0YW5jZW9mIGFlJiYo''@;'; put 'put ''dGhpcy5fUz16LlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoei5SKT96LlI6ei5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KHouUyk/ei5TOnouU2VuY29kZWR9bGUoTywiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5T''@;'; put 'put ''ZW5jb2RlZCgpKX0pLGxlKE8sIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLGxlKE8sIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLGxlKE8sIlNlbmNvZGVk''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxPLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sTy5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4geC5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LGF0LmV4cG9ydHM9T30sMjcyNzQ6YXQ9PnthdC5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVl''@;'; put 'put ''ODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZl''@;'; put 'put ''NDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0''@;'; put 'put ''MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1''@;'; put 'put ''ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3''@;'; put 'put ''MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdm''@;'; put 'put ''YSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAw''@;'; put 'put ''YzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4''@;'; put 'put ''ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDlj''@;'; put 'put ''ZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIx''@;'; put 'put ''MTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3''@;'; put 'put ''NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZi''@;'; put 'put ''MzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYw''@;'; put 'put ''Il0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBk''@;'; put 'put ''ODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5''@;'; put 'put ''YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcx''@;'; put 'put ''YTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgx''@;'; put 'put ''ZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3''@;'; put 'put ''YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2Uy''@;'; put 'put ''ODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdi''@;'; put 'put ''NiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcw''@;'; put 'put ''NjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1''@;'; put 'put ''ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1''@;'; put 'put ''MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1''@;'; put 'put ''NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBm''@;'; put 'put ''OTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4Mzlh''@;'; put 'put ''ZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgy''@;'; put 'put ''Il0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3''@;'; put 'put ''YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2Zk''@;'; put 'put ''ZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZk''@;'; put 'put ''ZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUy''@;'; put 'put ''OTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjlj''@;'; put 'put ''MTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0''@;'; put 'put ''ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUi''@;'; put 'put ''LCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4''@;'; put 'put ''Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMx''@;'; put 'put ''ZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkz''@;'; put 'put ''OTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIw''@;'; put 'put ''MzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5Yzky''@;'; put 'put ''M2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZi''@;'; put 'put ''OTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJd''@;'; put 'put ''LFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4''@;'; put 'put ''MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3''@;'; put 'put ''OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3''@;'; put 'put ''OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZi''@;'; put 'put ''ZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2''@;'; put 'put ''OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2Nh''@;'; put 'put ''MGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDcz''@;'; put 'put ''IiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzlj''@;'; put 'put ''ZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5''@;'; put 'put ''MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMw''@;'; put 'put ''ZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIz''@;'; put 'put ''Mzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEz''@;'; put 'put ''NTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEy''@;'; put 'put ''YzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIy''@;'; put 'put ''MzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRm''@;'; put 'put ''MDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUw''@;'; put 'put ''OTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhj''@;'; put 'put ''YiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1''@;'; put 'put ''Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5''@;'; put 'put ''ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNk''@;'; put 'put ''MjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4''@;'; put 'put ''MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2''@;'; put 'put ''ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMw''@;'; put 'put ''ZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUi''@;'; put 'put ''XSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2Zk''@;'; put 'put ''ZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1''@;'; put 'put ''N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4''@;'; put 'put ''MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3''@;'; put 'put ''MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1''@;'; put 'put ''YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQw''@;'; put 'put ''OGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIs''@;'; put 'put ''Ijc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmEx''@;'; put 'put ''YjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3''@;'; put 'put ''MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEw''@;'; put 'put ''OTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdj''@;'; put 'put ''NjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3''@;'; put 'put ''NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMw''@;'; put 'put ''NjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxb''@;'; put 'put ''ImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4Zjcz''@;'; put 'put ''Mjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0''@;'; put 'put ''Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFl''@;'; put 'put ''OGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0''@;'; put 'put ''NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0''@;'; put 'put ''ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1Zjdi''@;'; put 'put ''NDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIs''@;'; put 'put ''ImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIw''@;'; put 'put ''YjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1''@;'; put 'put ''MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRi''@;'; put 'put ''MTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3''@;'; put 'put ''YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5''@;'; put 'put ''YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVm''@;'; put 'put ''OGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJd''@;'; put 'put ''LFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVm''@;'; put 'put ''ODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIy''@;'; put 'put ''NDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRi''@;'; put 'put ''ZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4''@;'; put 'put ''ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIy''@;'; put 'put ''MmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNk''@;'; put 'put ''NzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIs''@;'; put 'put ''IjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4''@;'; put 'put ''MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0''@;'; put 'put ''ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2''@;'; put 'put ''ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcw''@;'; put 'put ''ZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQw''@;'; put 'put ''MDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2''@;'; put 'put ''NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsi''@;'; put 'put ''MzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0''@;'; put 'put ''MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJk''@;'; put 'put ''NDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVk''@;'; put 'put ''NjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZm''@;'; put 'put ''ZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBh''@;'; put 'put ''ODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2Iy''@;'; put 'put ''MTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4''@;'; put 'put ''ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2Ri''@;'; put 'put ''N2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3''@;'; put 'put ''MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNm''@;'; put 'put ''ZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2Nm''@;'; put 'put ''MDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRl''@;'; put 'put ''MmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJj''@;'; put 'put ''ZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRm''@;'; put 'put ''OGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRj''@;'; put 'put ''OTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4''@;'; put 'put ''IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1''@;'; put 'put ''NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMw''@;'; put 'put ''MzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFm''@;'; put 'put ''ODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0''@;'; put 'put ''YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5''@;'; put 'put ''OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODll''@;'; put 'put ''MTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3''@;'; put 'put ''Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0''@;'; put 'put ''ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1''@;'; put 'put ''YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1''@;'; put 'put ''MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2''@;'; put 'put ''YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4''@;'; put 'put ''ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQy''@;'; put 'put ''YjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2''@;'; put 'put ''YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZh''@;'; put 'put ''NmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdi''@;'; put 'put ''ZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0''@;'; put 'put ''ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0''@;'; put 'put ''NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJl''@;'; put 'put ''ZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRl''@;'; put 'put ''ZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5''@;'; put 'put ''Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2Nl''@;'; put 'put ''MDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5''@;'; put 'put ''YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYz''@;'; put 'put ''ODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4''@;'; put 'put ''MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVm''@;'; put 'put ''ODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRm''@;'; put 'put ''OGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZi''@;'; put 'put ''YiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5''@;'; put 'put ''NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJk''@;'; put 'put ''NTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1''@;'; put 'put ''ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2''@;'; put 'put ''NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5''@;'; put 'put ''ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdl''@;'; put 'put ''ZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMx''@;'; put 'put ''Il0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSw0Njc2NzooYXQsSWUsRik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIGFlPUllLHg9RigzMTM4NyksbT1GKDU3Nzk4KSxsZT1GKDc4MjQ3KTthZS5hc3NlcnQ9bSxhZS50b0FycmF5PWxlLnRvQXJyYXksYWUuemVybzI9bGUuemVybzIsYWUudG9IZXg9bGUudG9IZXgsYWUuZW5jb2RlPWxlLmVuY29kZSxhZS5nZXROQUY9ZnVuY3Rpb24gTShJ''@;'; put 'put ''LGssRSl7dmFyIGo9bmV3IEFycmF5KE1hdGgubWF4KEkuYml0TGVuZ3RoKCksRSkrMSk7ai5maWxsKDApO2Zvcih2YXIgVj0xPDxrKzEsQj1JLmNsb25lKCksWT0wO1k8ai5sZW5ndGg7WSsrKXt2YXIgWCxVPUIuYW5kbG4oVi0xKTtCLmlzT2RkKCk/Qi5pc3VibihYPVU+KFY+PjEpLTE/KFY+''@;'; put 'put ''PjEpLVU6VSk6WD0wLGpbWV09WCxCLml1c2hybigxKX1yZXR1cm4gan0sYWUuZ2V0SlNGPWZ1bmN0aW9uIE8oSSxrKXt2YXIgRT1bW10sW11dO0k9SS5jbG9uZSgpLGs9ay5jbG9uZSgpO2Zvcih2YXIgQixqPTAsVj0wO0kuY21wbigtaik+MHx8ay5jbXBuKC1WKT4wOyl7dmFyIFUscSxZPUku''@;'; put 'put ''YW5kbG4oMykraiYzLFg9ay5hbmRsbigzKStWJjM7Mz09PVkmJihZPS0xKSwzPT09WCYmKFg9LTEpLFU9MSZZPzMhPShCPUkuYW5kbG4oNykraiY3KSYmNSE9PUJ8fDIhPT1YP1k6LVk6MCxFWzBdLnB1c2goVSkscT0xJlg/MyE9KEI9ay5hbmRsbig3KStWJjcpJiY1IT09Qnx8MiE9PVk/WDot''@;'; put 'put ''WDowLEVbMV0ucHVzaChxKSwyKmo9PT1VKzEmJihqPTEtaiksMipWPT09cSsxJiYoVj0xLVYpLEkuaXVzaHJuKDEpLGsuaXVzaHJuKDEpfXJldHVybiBFfSxhZS5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBSKEksayxFKXt2YXIgaj0iXyIraztJLnByb3RvdHlwZVtrXT1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB2b2lkIDAhPT10aGlzW2pdP3RoaXNbal06dGhpc1tqXT1FLmNhbGwodGhpcyl9fSxhZS5wYXJzZUJ5dGVzPWZ1bmN0aW9uIHooSSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBJP2FlLnRvQXJyYXkoSSwiaGV4Iik6SX0sYWUuaW50RnJvbUxFPWZ1bmN0aW9uIEsoSSl7cmV0dXJuIG5l''@;'; put 'put ''dyB4KEksImhleCIsImxlIil9fSwzMTM4NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFy''@;'; put 'put ''IEQ9ZnVuY3Rpb24oKXt9O0QucHJvdG90eXBlPWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShHLGIsRCl7aWYoTS5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5n''@;'; put 'put ''dGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5''@;'; put 'put ''e089dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoODU1NjgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gUihHLGIpe3ZhciBEPUcuY2hhckNvZGVBdChiKTtyZXR1cm4gRD49NjUmJkQ8PTcwP0QtNTU6RD49OTcmJkQ8PTEwMj9ELTg3''@;'; put 'put ''OkQtNDgmMTV9ZnVuY3Rpb24geihHLGIsRCl7dmFyIEg9UihHLEQpO3JldHVybiBELTE+PWImJihIfD1SKEcsRC0xKTw8NCksSH1mdW5jdGlvbiBLKEcsYixELEgpe2Zvcih2YXIgTj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsRCksQz1iO0M8ZztDKyspe3ZhciBTPUcuY2hhckNvZGVBdChDKS00''@;'; put 'put ''ODtOKj1ILE4rPVM+PTQ5P1MtNDkrMTA6Uz49MTc/Uy0xNysxMDpTfXJldHVybiBOfU0uaXNCTj1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIE18fG51bGwhPT1iJiYib2JqZWN0Ij09dHlwZW9mIGImJmIuY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5p''@;'; put 'put ''c0FycmF5KGIud29yZHMpfSxNLm1heD1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKT4wP2I6RH0sTS5taW49ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk8MD9iOkR9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGIsRCxIKXtpZigibnVtYmVyIj09dHlwZW9mIGIpcmV0dXJu''@;'; put 'put ''IHRoaXMuX2luaXROdW1iZXIoYixELEgpO2lmKCJvYmplY3QiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGIsRCxIKTsiaGV4Ij09PUQmJihEPTE2KSxtKEQ9PT0oMHxEKSYmRD49MiYmRDw9MzYpO3ZhciBOPTA7Ii0iPT09KGI9Yi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9n''@;'; put 'put ''LCIiKSlbMF0mJihOKyssdGhpcy5uZWdhdGl2ZT0xKSxOPGIubGVuZ3RoJiYoMTY9PT1EP3RoaXMuX3BhcnNlSGV4KGIsTixIKToodGhpcy5fcGFyc2VCYXNlKGIsRCxOKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCkpKX0sTS5wcm90b3R5cGUuX2luaXRO''@;'; put 'put ''dW1iZXI9ZnVuY3Rpb24oYixELEgpe2I8MCYmKHRoaXMubmVnYXRpdmU9MSxiPS1iKSxiPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiXSx0aGlzLmxlbmd0aD0xKTpiPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2M10s''@;'; put 'put ''dGhpcy5sZW5ndGg9Mik6KG0oYjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpfSxNLnByb3RvdHlwZS5faW5pdEFy''@;'; put 'put ''cmF5PWZ1bmN0aW9uKGIsRCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYi5sZW5ndGgpLGIubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMu''@;'; put 'put ''bGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIGcsQyxTPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMSxnPTA7Tj49MDtOLT0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOLTFdPDw4fGJbTi0yXTw8MTYpPDxTJjY3MTA4ODYz''@;'; put 'put ''LHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3IoTj0wLGc9MDtOPGIubGVuZ3RoO04rPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04rMV08PDh8YltOKzJdPDwxNik8PFMmNjcxMDg4NjMsdGhp''@;'; put 'put ''cy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oYixELEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoYi5sZW5ndGgtRCkvNiksdGhpcy53b3Jkcz1u''@;'; put 'put ''ZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgUyxnPTAsQz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTE7Tj49RDtOLT0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0x''@;'; put 'put ''OD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O2Vsc2UgZm9yKE49KGIubGVuZ3RoLUQpJTI9PTA/RCsxOkQ7TjxiLmxlbmd0aDtOKz0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+''@;'; put 'put ''PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihiLEQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE49MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9RClOKys7Ti0tLGc9Zy9EfDA7Zm9yKHZhciBDPWIubGVuZ3RoLUgsUz1D''@;'; put 'put ''JU4sdj1NYXRoLm1pbihDLEMtUykrSCxwPTAsdz1IO3c8djt3Kz1OKXA9SyhiLHcsdytOLEQpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PVMpe3ZhciBKPTE7Zm9yKHA9SyhiLHcsYi5sZW5ndGgs''@;'; put 'put ''RCksdz0wO3c8Uzt3KyspSio9RDt0aGlzLmltdWxuKEopLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7''@;'; put 'put ''Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aDtEKyspYi53b3Jkc1tEXT10aGlzLndvcmRzW0RdO2IubGVuZ3RoPXRoaXMubGVuZ3RoLGIubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxiLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5jb3B5KGIpLGJ9LE0ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYw''@;'; put 'put ''PT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRo''@;'; put 'put ''aXN9LE0ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIl0saz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxFPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMw''@;'; put 'put ''NDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1''@;'; put 'put ''MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK2IubGVuZ3RofDA7RC5sZW5ndGg9SCxIPUgtMXwwO3Zh''@;'; put 'put ''ciBOPTB8Ry53b3Jkc1swXSxnPTB8Yi53b3Jkc1swXSxDPU4qZyx2PUMvNjcxMDg4NjR8MDtELndvcmRzWzBdPTY3MTA4ODYzJkM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9yKHZhciB3PXY+Pj4yNixKPTY3MTA4ODYzJnYsbmU9TWF0aC5taW4ocCxiLmxlbmd0aC0xKSxkZT1NYXRoLm1heCgw''@;'; put 'put ''LHAtRy5sZW5ndGgrMSk7ZGU8PW5lO2RlKyspdys9KEM9KE49MHxHLndvcmRzW3AtZGV8MF0pKihnPTB8Yi53b3Jkc1tkZV0pK0opLzY3MTA4ODY0fDAsSj02NzEwODg2MyZDO0Qud29yZHNbcF09MHxKLHY9MHx3fXJldHVybiAwIT09dj9ELndvcmRzW3BdPTB8djpELmxlbmd0aC0tLEQuc3Ry''@;'; put 'put ''aXAoKX1NLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihiLEQpe3ZhciBIO2lmKEQ9MHxEfHwxLDE2PT09KGI9Ynx8MTApfHwiaGV4Ij09PWIpe0g9IiI7Zm9yKHZhciBOPTAsZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy53b3Jkc1tDXSx2PSgxNjc3NzIxNSYoUzw8''@;'; put 'put ''TnxnKSkudG9TdHJpbmcoMTYpO0g9MCE9KGc9Uz4+PjI0LU4mMTY3NzcyMTUpfHxDIT09dGhpcy5sZW5ndGgtMT9JWzYtdi5sZW5ndGhdK3YrSDp2K0gsKE4rPTIpPj0yNiYmKE4tPTI2LEMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVEIT0wOylIPSIwIitI''@;'; put 'put ''O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoYj09PSgwfGIpJiZiPj0yJiZiPD0zNil7dmFyIHA9a1tiXSx3PUVbYl07SD0iIjt2YXIgSj10aGlzLmNsb25lKCk7Zm9yKEoubmVnYXRpdmU9MDshSi5pc1plcm8oKTspe3ZhciBuZT1KLm1vZG4odykudG9TdHJpbmco''@;'; put 'put ''Yik7SD0oSj1KLmlkaXZuKHcpKS5pc1plcm8oKT9uZStIOklbcC1uZS5sZW5ndGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUg''@;'; put 'put ''YmV0d2VlbiAyIGFuZCAzNiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9iKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yis9NDUwMzU5''@;'; put 'put ''OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1iOmJ9LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LnRvU3RyaW5nKDE2KX0sTS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oYixEKXtyZXR1cm4gbSh0eXBlb2YgTzwidSIpLHRoaXMudG9BcnJheUxpa2UoTyxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYixE''@;'; put 'put ''KX0sTS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxOKTttKE48PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8''@;'; put 'put ''PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB2LHAsQz0ibGUiPT09RCxTPW5ldyBiKGcpLHc9dGhpcy5jbG9uZSgpO2lmKEMpe2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbcF09djtmb3IoO3A8ZztwKyspU1twXT0wfWVsc2V7Zm9yKHA9MDtwPGct''@;'; put 'put ''TjtwKyspU1twXT0wO2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbZy1wLTFdPXZ9cmV0dXJuIFN9LE0ucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihiKXtyZXR1cm4gMzItTWF0aC5jbHozMihiKX06ZnVuY3Rpb24o''@;'; put 'put ''Yil7dmFyIEQ9YixIPTA7cmV0dXJuIEQ+PTQwOTYmJihIKz0xMyxEPj4+PTEzKSxEPj02NCYmKEgrPTcsRD4+Pj03KSxEPj04JiYoSCs9NCxEPj4+PTQpLEQ+PTImJihIKz0yLEQ+Pj49MiksSCtEfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYil7aWYoMD09PWIpcmV0dXJuIDI2''@;'; put 'put ''O3ZhciBEPWIsSD0wO3JldHVybiA4MTkxJkR8fChIKz0xMyxEPj4+PTEzKSwxMjcmRHx8KEgrPTcsRD4+Pj03KSwxNSZEfHwoSCs9NCxEPj4+PTQpLDMmRHx8KEgrPTIsRD4+Pj0yKSwxJkR8fEgrKyxIfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9jb3Vu''@;'; put 'put ''dEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStEfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBiPTAsRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgSD10aGlz''@;'; put 'put ''Ll96ZXJvQml0cyh0aGlzLndvcmRzW0RdKTtpZihiKz1ILDI2IT09SClicmVha31yZXR1cm4gYn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGIpe3JldHVy''@;'; put 'put ''biAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGIpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudGVzdG4oYi0xKT90aGlzLm5vdG4oYikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5w''@;'; put 'put ''cm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5l''@;'; put 'put ''Z2F0aXZlXj0xKSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8Yi5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl0aGlzLndvcmRzW0RdPXRoaXMud29yZHNbRF18Yi53b3Jkc1tE''@;'; put 'put ''XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVvcihiKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMu''@;'; put 'put ''Y2xvbmUoKS5pb3IoYik6Yi5jbG9uZSgpLmlvcih0aGlzKX0sTS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihiKTpiLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYil7''@;'; put 'put ''dmFyIEQ7RD10aGlzLmxlbmd0aD5iLmxlbmd0aD9iOnRoaXM7Zm9yKHZhciBIPTA7SDxELmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJmIud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5j''@;'; put 'put ''dGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChiKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChiKTpiLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5w''@;'; put 'put ''cm90b3R5cGUudWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGIpOmIuY2xvbmUoKS5pdWFuZCh0aGlzKX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oYil7dmFyIEQsSDt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oRD10aGlz''@;'; put 'put ''LEg9Yik6KEQ9YixIPXRoaXMpO2Zvcih2YXIgTj0wO048SC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXV5ILndvcmRzW05dO2lmKHRoaXMhPT1EKWZvcig7TjxELmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0''@;'; put 'put ''aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoYil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9u''@;'; put 'put ''ZSgpLml4b3IoYik6Yi5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihiKTpiLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGIp''@;'; put 'put ''e20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD0wfE1hdGguY2VpbChiLzI2KSxIPWIlMjY7dGhpcy5fZXhwYW5kKEQpLEg+MCYmRC0tO2Zvcih2YXIgTj0wO048RDtOKyspdGhpcy53b3Jkc1tOXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tOXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jk''@;'; put 'put ''c1tOXT1+dGhpcy53b3Jkc1tOXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oYil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYixEKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49''@;'; put 'put ''MCk7dmFyIEg9Yi8yNnwwLE49YiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1EP3RoaXMud29yZHNbSF18MTw8Tjp0aGlzLndvcmRzW0hdJn4oMTw8TiksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIpe3ZhciBELEgsTjtpZigwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiBiLm5lZ2F0aXZlPTAsRD10aGlz''@;'; put 'put ''LmlzdWIoYiksYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEg9dGhpcyxOPWIpOihIPWIsTj10aGlzKTtmb3IodmFyIGc9MCxDPTA7QzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKSsoMHxOLndvcmRz''@;'; put 'put ''W0NdKStnKSxnPUQ+Pj4yNjtmb3IoOzAhPT1nJiZDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pK2cpLGc9RD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgr''@;'; put 'put ''KztlbHNlIGlmKEghPT10aGlzKWZvcig7QzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1ILndvcmRzW0NdO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYil7dmFyIEQ7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0w''@;'; put 'put ''LEQ9dGhpcy5zdWIoYiksYi5uZWdhdGl2ZV49MSxEKTowPT09Yi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxEPWIuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxEKTp0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChiKTpiLmNsb25l''@;'; put 'put ''KCkuaWFkZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiKXtpZigwIT09Yi5uZWdhdGl2ZSl7Yi5uZWdhdGl2ZT0wO3ZhciBEPXRoaXMuaWFkZChiKTtyZXR1cm4gYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCx0aGlzLmlhZGQoYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE4sZyxIPXRoaXMuY21wKGIpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KE49dGhpcyxnPWIpOihOPWIs''@;'; put 'put ''Zz10aGlzKTtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKS0oMHxnLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2Zvcig7MCE9PUMmJlM8Ti5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSkrQyk+PjI2LHRoaXMu''@;'; put 'put ''d29yZHNbU109NjcxMDg4NjMmRDtpZigwPT09QyYmUzxOLmxlbmd0aCYmTiE9PXRoaXMpZm9yKDtTPE4ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU4ud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMpLE4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0x''@;'; put 'put ''KSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoYil9O3ZhciBCPWZ1bmN0aW9uKGIsRCxIKXt2YXIgdixwLHcsTj1iLndvcmRzLGc9RC53b3JkcyxDPUgud29yZHMsUz0wLEo9MHxOWzBdLG5lPTgxOTEmSixkZT1KPj4+''@;'; put 'put ''MTMsZmU9MHxOWzFdLHhlPTgxOTEmZmUsTGU9ZmU+Pj4xMyxGZT0wfE5bMl0sT2U9ODE5MSZGZSxCZT1GZT4+PjEzLFdlPTB8TlszXSxLZT04MTkxJldlLFllPVdlPj4+MTMsSmU9MHxOWzRdLGx0PTgxOTEmSmUsUGU9SmU+Pj4xMyxiZT0wfE5bNV0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFl''@;'; put 'put ''PTB8Tls2XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMsaHQ9MHxOWzddLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfE5bOF0saXQ9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8Tls5XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxnWzBdLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfGdb''@;'; put 'put ''MV0sV249ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8Z1syXSxObj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHxnWzNdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfGdbNF0sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLHZuPTB8Z1s1XSxydD04MTkxJnZuLEl0PXZuPj4+MTMsSnQ9MHxnWzZdLER0''@;'; put 'put ''PTgxOTEmSnQscHQ9SnQ+Pj4xMyxZdD0wfGdbN10sTG49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8Z1s4XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHxnWzldLE9uPTgxOTEmQm4sJHQ9Qm4+Pj4xMztILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIg''@;'; put 'put ''Rm49KFMrKHY9TWF0aC5pbXVsKG5lLENuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxVdCkpK01hdGguaW11bChkZSxDbil8MCkpPDwxMyl8MDtTPSgodz1NYXRoLmltdWwoZGUsVXQpKSsocD4+PjEzKXwwKSsoRm4+Pj4yNil8MCxGbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoeGUs''@;'; put 'put ''Q24pLHA9KHA9TWF0aC5pbXVsKHhlLFV0KSkrTWF0aC5pbXVsKExlLENuKXwwLHc9TWF0aC5pbXVsKExlLFV0KTt2YXIgbmk9KFMrKHY9ditNYXRoLmltdWwobmUsV24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGRlLFduKXwwKSk8PDEzKXww''@;'; put 'put ''O1M9KCh3PXcrTWF0aC5pbXVsKGRlLGVuKXwwKSsocD4+PjEzKXwwKSsobmk+Pj4yNil8MCxuaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoT2UsQ24pLHA9KHA9TWF0aC5pbXVsKE9lLFV0KSkrTWF0aC5pbXVsKEJlLENuKXwwLHc9TWF0aC5pbXVsKEJlLFV0KSx2PXYrTWF0aC5pbXVsKHhlLFdu''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bChMZSxXbil8MCx3PXcrTWF0aC5pbXVsKExlLGVuKXwwO3ZhciBsbj0oUysodj12K01hdGguaW11bChuZSxObil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwoZGUsTm4pfDAp''@;'; put 'put ''KTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZnQpfDApKyhwPj4+MTMpfDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2Myx2PU1hdGguaW11bChLZSxDbikscD0ocD1NYXRoLmltdWwoS2UsVXQpKStNYXRoLmltdWwoWWUsQ24pfDAsdz1NYXRoLmltdWwoWWUsVXQpLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoT2UsV24pfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKEJlLFduKXwwLHc9dytNYXRoLmltdWwoQmUsZW4pfDAsdj12K01hdGguaW11bCh4ZSxObil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoTGUsTm4pfDAsdz13K01hdGguaW11bChM''@;'; put 'put ''ZSxmdCl8MDt2YXIgam49KFMrKHY9ditNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx3dCl8MCkrTWF0aC5pbXVsKGRlLGhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHd0KXwwKSsocD4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9''@;'; put 'put ''NjcxMDg4NjMsdj1NYXRoLmltdWwobHQsQ24pLHA9KHA9TWF0aC5pbXVsKGx0LFV0KSkrTWF0aC5pbXVsKFBlLENuKXwwLHc9TWF0aC5pbXVsKFBlLFV0KSx2PXYrTWF0aC5pbXVsKEtlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChZZSxXbil8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKFllLGVuKXwwLHY9ditNYXRoLmltdWwoT2UsTm4pfDAscD0ocD1wK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEJlLE5uKXwwLHc9dytNYXRoLmltdWwoQmUsZnQpfDAsdj12K01hdGguaW11bCh4ZSxobil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoTGUsaG4pfDAsdz13K01hdGguaW11bChMZSx3dCl8MDt2YXIgcXI9KFMrKHY9ditNYXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxOdCl8MCkrTWF0aC5pbXVsKGRlLF90KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLE50KXwwKSso''@;'; put 'put ''cD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoQWUsQ24pLHA9KHA9TWF0aC5pbXVsKEFlLFV0KSkrTWF0aC5pbXVsKFRlLENuKXwwLHc9TWF0aC5pbXVsKFRlLFV0KSx2PXYrTWF0aC5pbXVsKGx0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZW4pfDAp''@;'; put 'put ''K01hdGguaW11bChQZSxXbil8MCx3PXcrTWF0aC5pbXVsKFBlLGVuKXwwLHY9ditNYXRoLmltdWwoS2UsTm4pfDAscD0ocD1wK01hdGguaW11bChLZSxmdCl8MCkrTWF0aC5pbXVsKFllLE5uKXwwLHc9dytNYXRoLmltdWwoWWUsZnQpfDAsdj12K01hdGguaW11bChPZSxobil8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKE9lLHd0KXwwKStNYXRoLmltdWwoQmUsaG4pfDAsdz13K01hdGguaW11bChCZSx3dCl8MCx2PXYrTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsTnQpfDApK01hdGguaW11bChMZSxfdCl8MCx3PXcrTWF0aC5pbXVsKExlLE50KXwwO3ZhciBnaT0oUyso''@;'; put 'put ''dj12K01hdGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEl0KXwwKStNYXRoLmltdWwoZGUscnQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsSXQpfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11''@;'; put 'put ''bChYZSxDbikscD0ocD1NYXRoLmltdWwoWGUsVXQpKStNYXRoLmltdWwoVWUsQ24pfDAsdz1NYXRoLmltdWwoVWUsVXQpLHY9ditNYXRoLmltdWwoQWUsV24pfDAscD0ocD1wK01hdGguaW11bChBZSxlbil8MCkrTWF0aC5pbXVsKFRlLFduKXwwLHc9dytNYXRoLmltdWwoVGUsZW4pfDAsdj12''@;'; put 'put ''K01hdGguaW11bChsdCxObil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmltdWwoUGUsTm4pfDAsdz13K01hdGguaW11bChQZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEtlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKFllLHd0KXwwLHY9ditNYXRoLmltdWwoT2UsX3QpfDAscD0ocD1wK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKEJlLF90KXwwLHc9dytNYXRoLmltdWwoQmUsTnQpfDAsdj12K01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEl0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoTGUscnQpfDAsdz13K01hdGguaW11bChMZSxJdCl8MDt2YXIgeHI9KFMrKHY9ditNYXRoLmltdWwobmUsRHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwdCl8MCkrTWF0aC5pbXVsKGRlLER0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHB0KXwwKSso''@;'; put 'put ''cD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoTWUsQ24pLHA9KHA9TWF0aC5pbXVsKE1lLFV0KSkrTWF0aC5pbXVsKERlLENuKXwwLHc9TWF0aC5pbXVsKERlLFV0KSx2PXYrTWF0aC5pbXVsKFhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZW4pfDAp''@;'; put 'put ''K01hdGguaW11bChVZSxXbil8MCx3PXcrTWF0aC5pbXVsKFVlLGVuKXwwLHY9ditNYXRoLmltdWwoQWUsTm4pfDAscD0ocD1wK01hdGguaW11bChBZSxmdCl8MCkrTWF0aC5pbXVsKFRlLE5uKXwwLHc9dytNYXRoLmltdWwoVGUsZnQpfDAsdj12K01hdGguaW11bChsdCxobil8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsdz13K01hdGguaW11bChQZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFllLE50KXwwLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoT2UscnQpfDAscD0ocD1wK01hdGguaW11bChPZSxJdCl8MCkrTWF0aC5pbXVsKEJlLHJ0KXwwLHc9dytNYXRoLmltdWwoQmUsSXQpfDAsdj12K01hdGguaW11bCh4ZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoTGUsRHQpfDAsdz13K01hdGguaW11bChM''@;'; put 'put ''ZSxwdCl8MDt2YXIgVWk9KFMrKHY9ditNYXRoLmltdWwobmUsTG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGRlLExuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHp0KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9''@;'; put 'put ''NjcxMDg4NjMsdj1NYXRoLmltdWwoaXQsQ24pLHA9KHA9TWF0aC5pbXVsKGl0LFV0KSkrTWF0aC5pbXVsKHV0LENuKXwwLHc9TWF0aC5pbXVsKHV0LFV0KSx2PXYrTWF0aC5pbXVsKE1lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bChEZSxXbil8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKERlLGVuKXwwLHY9ditNYXRoLmltdWwoWGUsTm4pfDAscD0ocD1wK01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLE5uKXwwLHc9dytNYXRoLmltdWwoVWUsZnQpfDAsdj12K01hdGguaW11bChBZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoVGUsaG4pfDAsdz13K01hdGguaW11bChUZSx3dCl8MCx2PXYrTWF0aC5pbXVsKGx0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsTnQpfDApK01hdGguaW11bChQZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFBlLE50KXwwLHY9ditNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChLZSxJdCl8MCkrTWF0aC5pbXVsKFllLHJ0KXwwLHc9dytNYXRoLmltdWwoWWUsSXQpfDAsdj12K01hdGguaW11bChPZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLHB0KXwwKStNYXRoLmltdWwoQmUsRHQpfDAsdz13K01hdGguaW11bChCZSxwdCl8MCx2PXYrTWF0aC5pbXVsKHhlLExu''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bChMZSxMbil8MCx3PXcrTWF0aC5pbXVsKExlLHp0KXwwO3ZhciBLcj0oUysodj12K01hdGguaW11bChuZSx4bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwoZGUseG4pfDAp''@;'; put 'put ''KTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsc24pfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxDbikscD0ocD1NYXRoLmltdWwoSHQsVXQpKStNYXRoLmltdWwoUHQsQ24pfDAsdz1NYXRoLmltdWwoUHQsVXQpLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoaXQsV24pfDAscD0ocD1wK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKHV0LFduKXwwLHc9dytNYXRoLmltdWwodXQsZW4pfDAsdj12K01hdGguaW11bChNZSxObil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsTm4pfDAsdz13K01hdGguaW11bChE''@;'; put 'put ''ZSxmdCl8MCx2PXYrTWF0aC5pbXVsKFhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsd3QpfDApK01hdGguaW11bChVZSxobil8MCx3PXcrTWF0aC5pbXVsKFVlLHd0KXwwLHY9ditNYXRoLmltdWwoQWUsX3QpfDAscD0ocD1wK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoVGUsTnQpfDAsdj12K01hdGguaW11bChsdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEl0KXwwKStNYXRoLmltdWwoUGUscnQpfDAsdz13K01hdGguaW11bChQZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEtlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscHQp''@;'; put 'put ''fDApK01hdGguaW11bChZZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFllLHB0KXwwLHY9ditNYXRoLmltdWwoT2UsTG4pfDAscD0ocD1wK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEJlLExuKXwwLHc9dytNYXRoLmltdWwoQmUsenQpfDAsdj12K01hdGguaW11bCh4ZSx4bil8MCxwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwoTGUseG4pfDAsdz13K01hdGguaW11bChMZSxzbil8MDt2YXIgbm89KFMrKHY9ditNYXRoLmltdWwobmUsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKGRlLE9uKXwwKSk8PDEzKXww''@;'; put 'put ''O1M9KCh3PXcrTWF0aC5pbXVsKGRlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsV24pLHA9KHA9TWF0aC5pbXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLHc9TWF0aC5pbXVsKFB0LGVuKSx2PXYrTWF0aC5pbXVsKGl0LE5u''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCh1dCxObil8MCx3PXcrTWF0aC5pbXVsKHV0LGZ0KXwwLHY9ditNYXRoLmltdWwoTWUsaG4pfDAscD0ocD1wK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHc9dytNYXRoLmltdWwoRGUsd3QpfDAs''@;'; put 'put ''dj12K01hdGguaW11bChYZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLE50KXwwKStNYXRoLmltdWwoVWUsX3QpfDAsdz13K01hdGguaW11bChVZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEFlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsSXQpfDApK01hdGguaW11bChUZSxydCl8MCx3PXcr''@;'; put 'put ''TWF0aC5pbXVsKFRlLEl0KXwwLHY9ditNYXRoLmltdWwobHQsRHQpfDAscD0ocD1wK01hdGguaW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXwwLHc9dytNYXRoLmltdWwoUGUscHQpfDAsdj12K01hdGguaW11bChLZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoWWUsTG4pfDAsdz13K01hdGguaW11bChZZSx6dCl8MCx2PXYrTWF0aC5pbXVsKE9lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChCZSx4bil8MCx3PXcrTWF0aC5pbXVsKEJlLHNuKXwwO3ZhciBGcj0oUysodj12K01hdGguaW11bCh4ZSxPbil8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoTGUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoTGUsJHQpfDApKyhwPj4+MTMpfDApKyhGcj4+PjI2KXwwLEZyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxObikscD0ocD1NYXRoLmltdWwo''@;'; put 'put ''SHQsZnQpKStNYXRoLmltdWwoUHQsTm4pfDAsdz1NYXRoLmltdWwoUHQsZnQpLHY9ditNYXRoLmltdWwoaXQsaG4pfDAscD0ocD1wK01hdGguaW11bChpdCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHc9dytNYXRoLmltdWwodXQsd3QpfDAsdj12K01hdGguaW11bChNZSxfdCl8MCxwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKE1lLE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsdz13K01hdGguaW11bChEZSxOdCl8MCx2PXYrTWF0aC5pbXVsKFhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsSXQpfDApK01hdGguaW11bChVZSxydCl8MCx3PXcrTWF0aC5pbXVsKFVlLEl0KXwwLHY9ditNYXRo''@;'; put 'put ''LmltdWwoQWUsRHQpfDAscD0ocD1wK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLHc9dytNYXRoLmltdWwoVGUscHQpfDAsdj12K01hdGguaW11bChsdCxMbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsTG4pfDAsdz13K01hdGguaW11''@;'; put 'put ''bChQZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEtlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usc24pfDApK01hdGguaW11bChZZSx4bil8MCx3PXcrTWF0aC5pbXVsKFllLHNuKXwwO3ZhciBxaT0oUysodj12K01hdGguaW11bChPZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs''@;'; put 'put ''KE9lLCR0KXwwKStNYXRoLmltdWwoQmUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoQmUsJHQpfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxobikscD0ocD1NYXRoLmltdWwoSHQsd3QpKStNYXRoLmltdWwoUHQsaG4pfDAs''@;'; put 'put ''dz1NYXRoLmltdWwoUHQsd3QpLHY9ditNYXRoLmltdWwoaXQsX3QpfDAscD0ocD1wK01hdGguaW11bChpdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXwwLHc9dytNYXRoLmltdWwodXQsTnQpfDAsdj12K01hdGguaW11bChNZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLEl0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUscnQpfDAsdz13K01hdGguaW11bChEZSxJdCl8MCx2PXYrTWF0aC5pbXVsKFhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUscHQpfDApK01hdGguaW11bChVZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFVlLHB0KXwwLHY9ditNYXRoLmltdWwoQWUsTG4pfDAscD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKFRlLExuKXwwLHc9dytNYXRoLmltdWwoVGUsenQpfDAsdj12K01hdGguaW11bChsdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsdz13K01hdGguaW11bChQZSxzbil8MDt2YXIgSmk9KFMrKHY9ditN''@;'; put 'put ''YXRoLmltdWwoS2UsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFllLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFllLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQs''@;'; put 'put ''X3QpLHA9KHA9TWF0aC5pbXVsKEh0LE50KSkrTWF0aC5pbXVsKFB0LF90KXwwLHc9TWF0aC5pbXVsKFB0LE50KSx2PXYrTWF0aC5pbXVsKGl0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsSXQpfDApK01hdGguaW11bCh1dCxydCl8MCx3PXcrTWF0aC5pbXVsKHV0LEl0KXwwLHY9ditNYXRo''@;'; put 'put ''LmltdWwoTWUsRHQpfDAscD0ocD1wK01hdGguaW11bChNZSxwdCl8MCkrTWF0aC5pbXVsKERlLER0KXwwLHc9dytNYXRoLmltdWwoRGUscHQpfDAsdj12K01hdGguaW11bChYZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsTG4pfDAsdz13K01hdGguaW11''@;'; put 'put ''bChVZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEFlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsc24pfDApK01hdGguaW11bChUZSx4bil8MCx3PXcrTWF0aC5pbXVsKFRlLHNuKXwwO3ZhciBhbz0oUysodj12K01hdGguaW11bChsdCxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs''@;'; put 'put ''KGx0LCR0KXwwKStNYXRoLmltdWwoUGUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoUGUsJHQpfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxydCkscD0ocD1NYXRoLmltdWwoSHQsSXQpKStNYXRoLmltdWwoUHQscnQpfDAs''@;'; put 'put ''dz1NYXRoLmltdWwoUHQsSXQpLHY9ditNYXRoLmltdWwoaXQsRHQpfDAscD0ocD1wK01hdGguaW11bChpdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLHc9dytNYXRoLmltdWwodXQscHQpfDAsdj12K01hdGguaW11bChNZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUsTG4pfDAsdz13K01hdGguaW11bChEZSx6dCl8MCx2PXYrTWF0aC5pbXVsKFhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsc24pfDApK01hdGguaW11bChVZSx4bil8MCx3PXcrTWF0aC5pbXVsKFVlLHNuKXwwO3ZhciBybz0oUysodj12K01hdGguaW11bChBZSxPbil8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEFlLCR0KXwwKStNYXRoLmltdWwoVGUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVGUsJHQpfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxEdCkscD0ocD1NYXRoLmltdWwo''@;'; put 'put ''SHQscHQpKStNYXRoLmltdWwoUHQsRHQpfDAsdz1NYXRoLmltdWwoUHQscHQpLHY9ditNYXRoLmltdWwoaXQsTG4pfDAscD0ocD1wK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKHV0LExuKXwwLHc9dytNYXRoLmltdWwodXQsenQpfDAsdj12K01hdGguaW11bChNZSx4bil8MCxwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwoRGUseG4pfDAsdz13K01hdGguaW11bChEZSxzbil8MDt2YXIgaW89KFMrKHY9ditNYXRoLmltdWwoWGUsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLE9uKXwwKSk8PDEzKXww''@;'; put 'put ''O1M9KCh3PXcrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsTG4pLHA9KHA9TWF0aC5pbXVsKEh0LHp0KSkrTWF0aC5pbXVsKFB0LExuKXwwLHc9TWF0aC5pbXVsKFB0LHp0KSx2PXYrTWF0aC5pbXVsKGl0LHhu''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCh1dCx4bil8MCx3PXcrTWF0aC5pbXVsKHV0LHNuKXwwO3ZhciBHaT0oUysodj12K01hdGguaW11bChNZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsT24pfDAp''@;'; put 'put ''KTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoRGUsJHQpfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCx4bikscD0ocD1NYXRoLmltdWwoSHQsc24pKStNYXRoLmltdWwoUHQseG4pfDAsdz1NYXRoLmltdWwoUHQsc24pO3ZhciBobz0oUyso''@;'; put 'put ''dj12K01hdGguaW11bChpdCxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGl0LCR0KXwwKStNYXRoLmltdWwodXQsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwodXQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgeXI9KFMr''@;'; put 'put ''KHY9TWF0aC5pbXVsKEh0LE9uKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChIdCwkdCkpK01hdGguaW11bChQdCxPbil8MCkpPDwxMyl8MDtyZXR1cm4gUz0oKHc9TWF0aC5pbXVsKFB0LCR0KSkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLENbMF09Rm4sQ1sxXT1u''@;'; put 'put ''aSxDWzJdPWxuLENbM109am4sQ1s0XT1xcixDWzVdPWdpLENbNl09eHIsQ1s3XT1VaSxDWzhdPUtyLENbOV09bm8sQ1sxMF09RnIsQ1sxMV09cWksQ1sxMl09SmksQ1sxM109YW8sQ1sxNF09cm8sQ1sxNV09aW8sQ1sxNl09R2ksQ1sxN109aG8sQ1sxOF09eXIsMCE9PVMmJihDWzE5XT1TLEgu''@;'; put 'put ''bGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFgoRyxiLEQpe3JldHVybihuZXcgVSkubXVscChHLGIsRCl9ZnVuY3Rpb24gVShHLGIpe3RoaXMueD1HLHRoaXMueT1ifU1hdGguaW11bHx8KEI9ViksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMubGVuZ3RoK2IubGVu''@;'; put 'put ''Z3RoO3JldHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Yi5sZW5ndGg/Qih0aGlzLGIsRCk6Tjw2Mz9WKHRoaXMsYixEKTpOPDEwMjQ/ZnVuY3Rpb24gWShHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmUsRC5sZW5ndGg9Ry5sZW5ndGgrYi5sZW5ndGg7Zm9yKHZh''@;'; put 'put ''ciBIPTAsTj0wLGc9MDtnPEQubGVuZ3RoLTE7ZysrKXt2YXIgQz1OO049MDtmb3IodmFyIFM9NjcxMDg4NjMmSCx2PU1hdGgubWluKGcsYi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9djtwKyspe3ZhciBkZT0oMHxHLndvcmRzW2ctcF0pKigwfGIud29yZHNbcF0p''@;'; put 'put ''LGZlPTY3MTA4ODYzJmRlO1M9NjcxMDg4NjMmKGZlPWZlK1N8MCksTis9KEM9KEM9QysoZGUvNjcxMDg4NjR8MCl8MCkrKGZlPj4+MjYpfDApPj4+MjYsQyY9NjcxMDg4NjN9RC53b3Jkc1tnXT1TLEg9QyxDPU59cmV0dXJuIDAhPT1IP0Qud29yZHNbZ109SDpELmxlbmd0aC0tLEQuc3RyaXAo''@;'; put 'put ''KX0odGhpcyxiLEQpOlgodGhpcyxiLEQpLEh9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPU0ucHJvdG90eXBlLl9jb3VudEJpdHMoYiktMSxOPTA7TjxiO04rKylEW05dPXRoaXMucmV2QmluKE4sSCxiKTtyZXR1cm4gRH0sVS5wcm90''@;'; put 'put ''b3R5cGUucmV2QmluPWZ1bmN0aW9uKGIsRCxIKXtpZigwPT09Ynx8Yj09PUgtMSlyZXR1cm4gYjtmb3IodmFyIE49MCxnPTA7ZzxEO2crKylOfD0oMSZiKTw8RC1nLTEsYj4+PTE7cmV0dXJuIE59LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oYixELEgsTixnLEMpe2Zvcih2YXIgUz0w''@;'; put 'put ''O1M8QztTKyspTltTXT1EW2JbU11dLGdbU109SFtiW1NdXX0sVS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXt0aGlzLnBlcm11dGUoQyxiLEQsSCxOLGcpO2Zvcih2YXIgUz0xO1M8ZztTPDw9MSlmb3IodmFyIHY9Uzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS92''@;'; put 'put ''KSx3PU1hdGguc2luKDIqTWF0aC5QSS92KSxKPTA7SjxnO0orPXYpZm9yKHZhciBuZT1wLGRlPXcsZmU9MDtmZTxTO2ZlKyspe3ZhciB4ZT1IW0orZmVdLExlPU5bSitmZV0sRmU9SFtKK2ZlK1NdLE9lPU5bSitmZStTXSxCZT1uZSpGZS1kZSpPZTtPZT1uZSpPZStkZSpGZSxIW0orZmVdPXhl''@;'; put 'put ''KyhGZT1CZSksTltKK2ZlXT1MZStPZSxIW0orZmUrU109eGUtRmUsTltKK2ZlK1NdPUxlLU9lLGZlIT09diYmKEJlPXAqbmUtdypkZSxkZT1wKmRlK3cqbmUsbmU9QmUpfX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oYixEKXt2YXIgSD0xfE1hdGgubWF4KEQsYiksTj0xJkgs''@;'; put 'put ''Zz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK059LFUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihiLEQsSCl7aWYoIShIPD0xKSlmb3IodmFyIE49MDtOPEgvMjtOKyspe3ZhciBnPWJbTl07YltOXT1iW0gtTi0xXSxiW0gtTi0xXT1nLGc9RFtOXSxEW05d''@;'; put 'put ''PS1EW0gtTi0xXSxEW0gtTi0xXT0tZ319LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD0wLE49MDtOPEQvMjtOKyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZChiWzIqTisxXS9EKStNYXRoLnJvdW5kKGJbMipOXS9EKStIO2JbTl09NjcxMDg4NjMmZyxI''@;'; put 'put ''PWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIGJ9LFUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oYixELEgsTil7Zm9yKHZhciBnPTAsQz0wO0M8RDtDKyspSFsyKkNdPTgxOTEmKGcrPTB8YltDXSksSFsyKkMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoQz0y''@;'; put 'put ''KkQ7QzxOOysrQylIW0NdPTA7bSgwPT09ZyksbSgwPT0oLTgxOTImZykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD0wO0g8YjtIKyspRFtIXT0wO3JldHVybiBEfSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj0y''@;'; put 'put ''KnRoaXMuZ3Vlc3NMZW4xM2IoYi5sZW5ndGgsRC5sZW5ndGgpLGc9dGhpcy5tYWtlUkJUKE4pLEM9dGhpcy5zdHViKE4pLFM9bmV3IEFycmF5KE4pLHY9bmV3IEFycmF5KE4pLHA9bmV3IEFycmF5KE4pLHc9bmV3IEFycmF5KE4pLEo9bmV3IEFycmF5KE4pLG5lPW5ldyBBcnJheShOKSxkZT1I''@;'; put 'put ''LndvcmRzO2RlLmxlbmd0aD1OLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLFMsTiksdGhpcy5jb252ZXJ0MTNiKEQud29yZHMsRC5sZW5ndGgsdyxOKSx0aGlzLnRyYW5zZm9ybShTLEMsdixwLE4sZyksdGhpcy50cmFuc2Zvcm0odyxDLEosbmUsTixnKTtmb3IodmFyIGZlPTA7''@;'; put 'put ''ZmU8TjtmZSsrKXt2YXIgeGU9dltmZV0qSltmZV0tcFtmZV0qbmVbZmVdO3BbZmVdPXZbZmVdKm5lW2ZlXStwW2ZlXSpKW2ZlXSx2W2ZlXT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUodixwLE4pLHRoaXMudHJhbnNmb3JtKHYscCxkZSxDLE4sZyksdGhpcy5jb25qdWdhdGUoZGUsQyxOKSx0''@;'; put 'put ''aGlzLm5vcm1hbGl6ZTEzYihkZSxOKSxILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD1iLmxlbmd0aCtELmxlbmd0aCxILnN0cmlwKCl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXko''@;'; put 'put ''dGhpcy5sZW5ndGgrYi5sZW5ndGgpLHRoaXMubXVsVG8oYixEKX0sTS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLFgodGhpcyxiLEQpfSxNLnByb3RvdHlwZS5pbXVsPWZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oYix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCk7Zm9yKHZhciBEPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgTj0oMHx0aGlzLndvcmRz''@;'; put 'put ''W0hdKSpiLGc9KDY3MTA4ODYzJk4pKyg2NzEwODg2MyZEKTtEPj49MjYsRCs9Ti82NzEwODg2NHwwLEQrPWc+Pj4yNix0aGlzLndvcmRzW0hdPTY3MTA4ODYzJmd9cmV0dXJuIDAhPT1EJiYodGhpcy53b3Jkc1tIXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVu''@;'; put 'put ''Y3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihiKX0sTS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxNLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9''@;'; put 'put ''ZnVuY3Rpb24oYil7dmFyIEQ9ZnVuY3Rpb24gaihHKXtmb3IodmFyIGI9bmV3IEFycmF5KEcuYml0TGVuZ3RoKCkpLEQ9MDtEPGIubGVuZ3RoO0QrKyl7dmFyIE49RCUyNjtiW0RdPShHLndvcmRzW0QvMjZ8MF0mMTw8Tik+Pj5OfXJldHVybiBifShiKTtpZigwPT09RC5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IG5ldyBNKDEpO2Zvcih2YXIgSD10aGlzLE49MDtOPEQubGVuZ3RoJiYwPT09RFtOXTtOKyssSD1ILnNxcigpKTtpZigrK048RC5sZW5ndGgpZm9yKHZhciBnPUguc3FyKCk7TjxELmxlbmd0aDtOKyssZz1nLnNxcigpKTAhPT1EW05dJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LE0ucHJvdG90''@;'; put 'put ''eXBlLml1c2hsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIGcsRD1iJTI2LEg9KGItRCkvMjYsTj02NzEwODg2Mz4+PjI2LUQ8PDI2LUQ7aWYoMCE9PUQpe3ZhciBDPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy53b3Jkc1tnXSZO''@;'; put 'put ''O3RoaXMud29yZHNbZ109KDB8dGhpcy53b3Jkc1tnXSktUzw8RHxDLEM9Uz4+PjI2LUR9QyYmKHRoaXMud29yZHNbZ109Qyx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8''@;'; put 'put ''SDtnKyspdGhpcy53b3Jkc1tnXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGIsRCxI''@;'; put 'put ''KXt2YXIgTjttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCksTj1EPyhELUQlMjYpLzI2OjA7dmFyIGc9YiUyNixDPU1hdGgubWluKChiLWcpLzI2LHRoaXMubGVuZ3RoKSxTPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8Zyx2PUg7aWYoTi09QyxOPU1hdGgubWF4KDAsTiksdil7Zm9yKHZhciBw''@;'; put 'put ''PTA7cDxDO3ArKyl2LndvcmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9Q31pZigwIT09QylpZih0aGlzLmxlbmd0aD5DKWZvcih0aGlzLmxlbmd0aC09QyxwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAs''@;'; put 'put ''dGhpcy5sZW5ndGg9MTt2YXIgdz0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT13fHxwPj1OKTtwLS0pe3ZhciBKPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPXc8PDI2LWd8Sj4+Pmcsdz1KJlN9cmV0dXJuIHYmJjAhPT13JiYodi53b3Jkc1t2Lmxlbmd0aCsrXT13KSww''@;'; put 'put ''PT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGIsRCxIKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5j''@;'; put 'put ''dGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGIpfSxNLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihiKX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGIpfSxNLnByb3Rv''@;'; put 'put ''dHlwZS51c2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiKX0sTS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMu''@;'; put 'put ''d29yZHNbSF0mMTw8RCkpfSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PUQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09RCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+RDw8RCksdGhpcy5zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249''@;'; put 'put ''ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYil9LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGIpe3JldHVybiBtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDA/dGhpcy5pc3VibigtYik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVu''@;'; put 'put ''Z3RoJiYoMHx0aGlzLndvcmRzWzBdKTxiPyh0aGlzLndvcmRzWzBdPWItKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oYil9LE0ucHJvdG90eXBlLl9p''@;'; put 'put ''YWRkbj1mdW5jdGlvbihiKXt0aGlzLndvcmRzWzBdKz1iO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF0+PTY3MTA4ODY0O0QrKyl0aGlzLndvcmRzW0RdLT02NzEwODg2NCxEPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0QrMV09MTp0aGlzLndvcmRzW0QrMV0r''@;'; put 'put ''KztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsRCsxKSx0aGlzfSxNLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihiKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDApcmV0dXJuIHRoaXMuaWFkZG4oLWIpO2lmKDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1iLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2Ug''@;'; put 'put ''Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXTwwO0QrKyl0aGlzLndvcmRzW0RdKz02NzEwODg2NCx0aGlzLndvcmRzW0QrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRu''@;'; put 'put ''KGIpfSxNLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oYil9LE0ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaWFicygpfSxNLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oYixELEgpe3ZhciBnO3RoaXMuX2V4cGFuZChiLmxlbmd0aCtIKTt2YXIgQyxTPTA7Zm9yKGc9MDtnPGIubGVuZ3RoO2crKyl7Qz0oMHx0aGlzLndvcmRzW2crSF0pK1M7dmFyIHY9KDB8Yi53b3Jkc1tnXSkqRDtT''@;'; put 'put ''PSgoQy09NjcxMDg4NjMmdik+PjI2KS0odi82NzEwODg2NHwwKSx0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQ31mb3IoO2c8dGhpcy5sZW5ndGgtSDtnKyspUz0oQz0oMHx0aGlzLndvcmRzW2crSF0pK1MpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQztpZigwPT09UylyZXR1cm4g''@;'; put 'put ''dGhpcy5zdHJpcCgpO2ZvcihtKC0xPT09UyksUz0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKylTPShDPS0oMHx0aGlzLndvcmRzW2ddKStTKT4+MjYsdGhpcy53b3Jkc1tnXT02NzEwODg2MyZDO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERp''@;'; put 'put ''dj1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5jbG9uZSgpLGc9YixDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMoQykpJiYoZz1nLnVzaGxuKEgpLE4uaXVzaGxuKEgpLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCx2PU4ubGVuZ3RoLWcu''@;'; put 'put ''bGVuZ3RoO2lmKCJtb2QiIT09RCl7KHA9bmV3IE0obnVsbCkpLmxlbmd0aD12KzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgdz0wO3c8cC5sZW5ndGg7dysrKXAud29yZHNbd109MH12YXIgSj1OLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSx2KTswPT09Si5uZWdhdGl2''@;'; put 'put ''ZSYmKE49SixwJiYocC53b3Jkc1t2XT0xKSk7Zm9yKHZhciBuZT12LTE7bmU+PTA7bmUtLSl7dmFyIGRlPTY3MTA4ODY0KigwfE4ud29yZHNbZy5sZW5ndGgrbmVdKSsoMHxOLndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IoZGU9TWF0aC5taW4oZGUvQ3wwLDY3MTA4ODYzKSxOLl9pc2hsbnN1''@;'; put 'put ''Ym11bChnLGRlLG5lKTswIT09Ti5uZWdhdGl2ZTspZGUtLSxOLm5lZ2F0aXZlPTAsTi5faXNobG5zdWJtdWwoZywxLG5lKSxOLmlzWmVybygpfHwoTi5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPWRlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE4uc3RyaXAoKSwiZGl2IiE9PUQmJjAhPT1I''@;'; put 'put ''JiZOLml1c2hybihIKSx7ZGl2OnB8fG51bGwsbW9kOk59fSxNLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKCFiLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRp''@;'; put 'put ''dmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYixEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlhZGQoYikpLHtkaXY6Tixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZT8oQz10''@;'; put 'put ''aGlzLmRpdm1vZChiLm5lZygpLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLHtkaXY6Tixtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYi5uZWcoKSxEKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0''@;'; put 'put ''aXZlJiZnLmlzdWIoYikpLHtkaXY6Qy5kaXYsbW9kOmd9KTpiLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoYik8MD97ZGl2Om5ldyBNKDApLG1vZDp0aGlzfToxPT09Yi5sZW5ndGg/ImRpdiI9PT1EP3tkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUQ/''@;'; put 'put ''e2RpdjpudWxsLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihiLEQpO3ZhciBOLGcsQ30sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGIpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmRpdm1vZChiLCJkaXYiLCExKS5kaXZ9LE0ucHJvdG90eXBlLm1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMSkubW9kfSxNLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEwKS5tb2R9LE0u''@;'; put 'put ''cHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuZGl2bW9kKGIpO2lmKEQubW9kLmlzWmVybygpKXJldHVybiBELmRpdjt2YXIgSD0wIT09RC5kaXYubmVnYXRpdmU/RC5tb2QuaXN1YihiKTpELm1vZCxOPWIudXNocm4oMSksZz1iLmFuZGxuKDEpLEM9SC5jbXAoTik7''@;'; put 'put ''cmV0dXJuIEM8MHx8MT09PWcmJjA9PT1DP0QuZGl2OjAhPT1ELmRpdi5uZWdhdGl2ZT9ELmRpdi5pc3VibigxKTpELmRpdi5pYWRkbigxKX0sTS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9KDE8PDI2KSViLEg9MCxOPXRoaXMubGVuZ3RoLTE7''@;'; put 'put ''Tj49MDtOLS0pSD0oRCpIKygwfHRoaXMud29yZHNbTl0pKSViO3JldHVybiBIfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0KkQ7''@;'; put 'put ''dGhpcy53b3Jkc1tIXT1OL2J8MCxEPU4lYn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oYil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8o''@;'; put 'put ''KSk7dmFyIEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1uZXcgTSgwKSxTPW5ldyBNKDEpLHY9MDtELmlzRXZlbigpJiZILmlzRXZlbigpOylELml1c2hybigxKSxILml1c2hybigx''@;'; put 'put ''KSwrK3Y7Zm9yKHZhciBwPUguY2xvbmUoKSx3PUQuY2xvbmUoKTshRC5pc1plcm8oKTspe2Zvcih2YXIgSj0wLG5lPTE7IShELndvcmRzWzBdJm5lKSYmSjwyNjsrK0osbmU8PD0xKTtpZihKPjApZm9yKEQuaXVzaHJuKEopO0otLSA+MDspKE4uaXNPZGQoKXx8Zy5pc09kZCgpKSYmKE4uaWFk''@;'; put 'put ''ZChwKSxnLmlzdWIodykpLE4uaXVzaHJuKDEpLGcuaXVzaHJuKDEpO2Zvcih2YXIgZGU9MCxmZT0xOyEoSC53b3Jkc1swXSZmZSkmJmRlPDI2OysrZGUsZmU8PD0xKTtpZihkZT4wKWZvcihILml1c2hybihkZSk7ZGUtLSA+MDspKEMuaXNPZGQoKXx8Uy5pc09kZCgpKSYmKEMuaWFkZChwKSxT''@;'; put 'put ''LmlzdWIodykpLEMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKEMpLGcuaXN1YihTKSk6KEguaXN1YihEKSxDLmlzdWIoTiksUy5pc3ViKGcpKX1yZXR1cm57YTpDLGI6UyxnY2Q6SC5pdXNobG4odil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVu''@;'; put 'put ''Y3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEosRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPUguY2xvbmUoKTtELmNtcG4oMSk+MCYmSC5jbXBu''@;'; put 'put ''KDEpPjA7KXtmb3IodmFyIFM9MCx2PTE7IShELndvcmRzWzBdJnYpJiZTPDI2OysrUyx2PDw9MSk7aWYoUz4wKWZvcihELml1c2hybihTKTtTLS0gPjA7KU4uaXNPZGQoKSYmTi5pYWRkKEMpLE4uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLHc9MTshKEgud29yZHNbMF0mdykmJnA8MjY7KytwLHc8''@;'; put 'put ''PD0xKTtpZihwPjApZm9yKEguaXVzaHJuKHApO3AtLSA+MDspZy5pc09kZCgpJiZnLmlhZGQoQyksZy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoZykpOihILmlzdWIoRCksZy5pc3ViKE4pKX1yZXR1cm4oSj0wPT09RC5jbXBuKDEpP046ZykuY21wbigwKTwwJiZK''@;'; put 'put ''LmlhZGQoYiksSn0sTS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGIuYWJzKCk7aWYoYi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgRD10aGlzLmNsb25lKCksSD1iLmNsb25lKCk7RC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3Io''@;'; put 'put ''dmFyIE49MDtELmlzRXZlbigpJiZILmlzRXZlbigpO04rKylELml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7RC5pc0V2ZW4oKTspRC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1ELmNtcChIKTtpZihnPDApe3ZhciBDPUQ7RD1ILEg9Q31l''@;'; put 'put ''bHNlIGlmKDA9PT1nfHwwPT09SC5jbXBuKDEpKWJyZWFrO0QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oTil9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWdjZChiKS5hLnVtb2QoYil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0o''@;'; put 'put ''MSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndvcmRzWzBdJmJ9LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGIpe20oIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBiKTt2YXIgRD1iJTI2LEg9KGItRCkvMjYsTj0xPDxEO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1OLHRoaXM7Zm9yKHZhciBnPU4sQz1IOzAhPT1nJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9MHx0aGlz''@;'; put 'put ''LndvcmRzW0NdO2c9KFMrPWcpPj4+MjYsdGhpcy53b3Jkc1tDXT1TJj02NzEwODg2M31yZXR1cm4gMCE9PWcmJih0aGlzLndvcmRzW0NdPWcsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMu''@;'; put 'put ''d29yZHNbMF19LE0ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oYil7dmFyIEgsRD1iPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFEKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZEKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle0QmJihiPS1i''@;'; put 'put ''KSxtKGI8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBOPTB8dGhpcy53b3Jkc1swXTtIPU49PT1iPzA6TjxiPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGIpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09''@;'; put 'put ''Yi5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEQ9dGhpcy51Y21wKGIpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1EOkR9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGg+Yi5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Yi5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0wfHRoaXMud29yZHNbSF0sZz0wfGIud29yZHNbSF07aWYoTiE9PWcpe048Zz9EPS0xOk4+ZyYmKEQ9MSk7YnJlYWt9fXJldHVy''@;'; put 'put ''biBEfSxNLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKT49MH0sTS5w''@;'; put 'put ''cm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5s''@;'; put 'put ''dGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik8PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik8PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rp''@;'; put 'put ''b24oYil7cmV0dXJuIDA9PT10aGlzLmNtcChiKX0sTS5yZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyB1ZShiKX0sTS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxiLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1''@;'; put 'put ''Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucmVkPWIsdGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEg''@;'; put 'put ''bnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGIpfSxNLnByb3Rv''@;'; put 'put ''dHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGIpfSxNLnBy''@;'; put 'put ''b3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5tdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQuaW11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVk''@;'; put 'put ''LnNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJl''@;'; put 'put ''ZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sTS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCYmIWIucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlz''@;'; put 'put ''LGIpfTt2YXIgcT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGVlKEcsYil7dGhpcy5uYW1lPUcsdGhpcy5wPW5ldyBNKGIsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIo''@;'; put 'put ''dGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB0ZSgpe2VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gb2UoKXtlZS5jYWxsKHRoaXMs''@;'; put 'put ''InAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHNlKCl7ZWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1m''@;'; put 'put ''dW5jdGlvbiBoZSgpe2VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdWUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgYj1NLl9wcmltZShHKTt0aGlz''@;'; put 'put ''Lm09Yi5wLHRoaXMucHJpbWU9Yn1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBjZShHKXt1ZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlm''@;'; put 'put ''dCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRo''@;'; put 'put ''aXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1lZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheShN''@;'; put 'put ''YXRoLmNlaWwodGhpcy5uLzEzKSksYn0sZWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oYil7dmFyIEgsRD1iO2Rve3RoaXMuc3BsaXQoRCx0aGlzLnRtcCksSD0oRD0oRD10aGlzLmltdWxLKEQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBO''@;'; put 'put ''PUg8dGhpcy5uPy0xOkQudWNtcCh0aGlzLnApO3JldHVybiAwPT09Tj8oRC53b3Jkc1swXT0wLEQubGVuZ3RoPTEpOk4+MD9ELmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ELnN0cmlwP0Quc3RyaXAoKTpELl9zdHJpcCgpLER9LGVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2IuaXVz''@;'; put 'put ''aHJuKHRoaXMubiwwLEQpfSxlZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW11bCh0aGlzLmspfSxsZSh0ZSxlZSksdGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTQxOTQzMDMsTj1NYXRoLm1pbihiLmxlbmd0aCw5KSxnPTA7ZzxOO2cr''@;'; put 'put ''KylELndvcmRzW2ddPWIud29yZHNbZ107aWYoRC5sZW5ndGg9TixiLmxlbmd0aDw9OSlyZXR1cm4gYi53b3Jkc1swXT0wLHZvaWQoYi5sZW5ndGg9MSk7dmFyIEM9Yi53b3Jkc1s5XTtmb3IoRC53b3Jkc1tELmxlbmd0aCsrXT1DJkgsZz0xMDtnPGIubGVuZ3RoO2crKyl7dmFyIFM9MHxiLndv''@;'; put 'put ''cmRzW2ddO2Iud29yZHNbZy0xMF09KFMmSCk8PDR8Qz4+PjIyLEM9U31iLndvcmRzW2ctMTBdPUM+Pj49MjIsYi5sZW5ndGgtPTA9PT1DJiZiLmxlbmd0aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Yi53b3Jkc1tiLmxlbmd0aF09MCxiLndvcmRzW2IubGVuZ3Ro''@;'; put 'put ''KzFdPTAsYi5sZW5ndGgrPTI7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0wfGIud29yZHNbSF07Yi53b3Jkc1tIXT02NzEwODg2MyYoRCs9OTc3Kk4pLEQ9NjQqTisoRC82NzEwODg2NHwwKX1yZXR1cm4gMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJihiLmxlbmd0aC0t''@;'; put 'put ''LDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiZiLmxlbmd0aC0tKSxifSxsZShvZSxlZSksbGUoc2UsZWUpLGxlKGhlLGVlKSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0xOSooMHxiLndvcmRzW0hdKStELGc9Njcx''@;'; put 'put ''MDg4NjMmTjtOPj4+PTI2LGIud29yZHNbSF09ZyxEPU59cmV0dXJuIDAhPT1EJiYoYi53b3Jkc1tiLmxlbmd0aCsrXT1EKSxifSxNLl9wcmltZT1mdW5jdGlvbihiKXtpZihxW2JdKXJldHVybiBxW2JdO3ZhciBEO2lmKCJrMjU2Ij09PWIpRD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT1iKUQ9''@;'; put 'put ''bmV3IG9lO2Vsc2UgaWYoInAxOTIiPT09YilEPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09Yil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitiKTtEPW5ldyBoZX1yZXR1cm4gcVtiXT1ELER9LHVlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0''@;'; put 'put ''aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGIsRCl7bSgwPT0oYi5uZWdhdGl2ZXxELm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCBwb3NpdGl2ZXMiKSxtKGIucmVkJiZiLnJlZD09PUQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShiKS5fZm9yY2VSZWQodGhpcyk6Yi51bW9k''@;'; put 'put ''KHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGIpe3JldHVybiBiLmlzWmVybygpP2IuY2xvbmUoKTp0aGlzLm0uc3ViKGIpLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2''@;'; put 'put ''YXIgSD1iLmFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaWFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYm''@;'; put 'put ''SC5pc3ViKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLnN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihi''@;'; put 'put ''LEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlzdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYiksdGhpcy5pbW9kKGIudXNobG4oRCkpfSx1ZS5wcm90b3R5''@;'; put 'put ''cGUuaW11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIuaW11bChEKSl9LHVlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLm11bChEKSl9LHVlLnByb3RvdHlwZS5pc3Fy''@;'; put 'put ''PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltdWwoYixiLmNsb25lKCkpfSx1ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bChiLGIpfSx1ZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihiKXtpZihiLmlzWmVybygpKXJldHVybiBiLmNsb25lKCk7dmFyIEQ9dGhp''@;'; put 'put ''cy5tLmFuZGxuKDMpO2lmKG0oRCUyPT0xKSwzPT09RCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhiLEgpfWZvcih2YXIgTj10aGlzLm0uc3VibigxKSxnPTA7IU4uaXNaZXJvKCkmJjA9PT1OLmFuZGxuKDEpOylnKyssTi5pdXNocm4oMSk7''@;'; put 'put ''bSghTi5pc1plcm8oKSk7dmFyIEM9bmV3IE0oMSkudG9SZWQodGhpcyksUz1DLnJlZE5lZygpLHY9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyBNKDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCx2KS5jbXAoUyk7KXAucmVk''@;'; put 'put ''SUFkZChTKTtmb3IodmFyIHc9dGhpcy5wb3cocCxOKSxKPXRoaXMucG93KGIsTi5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coYixOKSxkZT1nOzAhPT1uZS5jbXAoQyk7KXtmb3IodmFyIGZlPW5lLHhlPTA7MCE9PWZlLmNtcChDKTt4ZSsrKWZlPWZlLnJlZFNxcigpO20oeGU8ZGUp''@;'; put 'put ''O3ZhciBMZT10aGlzLnBvdyh3LG5ldyBNKDEpLml1c2hsbihkZS14ZS0xKSk7Sj1KLnJlZE11bChMZSksdz1MZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwodyksZGU9eGV9cmV0dXJuIEp9LHVlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3ZhciBEPWIuX2ludm1wKHRoaXMubSk7cmV0dXJu''@;'; put 'put ''IDAhPT1ELm5lZ2F0aXZlPyhELm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEQpLnJlZE5lZygpKTp0aGlzLmltb2QoRCl9LHVlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYixEKXtpZihELmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09RC5jbXBuKDEpKXJldHVybiBi''@;'; put 'put ''LmNsb25lKCk7dmFyIE49bmV3IEFycmF5KDE2KTtOWzBdPW5ldyBNKDEpLnRvUmVkKHRoaXMpLE5bMV09Yjtmb3IodmFyIGc9MjtnPE4ubGVuZ3RoO2crKylOW2ddPXRoaXMubXVsKE5bZy0xXSxiKTt2YXIgQz1OWzBdLFM9MCx2PTAscD1ELmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9''@;'; put 'put ''MjYpLGc9RC5sZW5ndGgtMTtnPj0wO2ctLSl7Zm9yKHZhciB3PUQud29yZHNbZ10sSj1wLTE7Sj49MDtKLS0pe3ZhciBuZT13Pj5KJjE7QyE9PU5bMF0mJihDPXRoaXMuc3FyKEMpKSwwIT09bmV8fDAhPT1TPyhTPDw9MSxTfD1uZSwoND09Kyt2fHwwPT09ZyYmMD09PUopJiYoQz10aGlzLm11''@;'; put 'put ''bChDLE5bU10pLHY9MCxTPTApKTp2PTB9cD0yNn1yZXR1cm4gQ30sdWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXt2YXIgRD1iLnVtb2QodGhpcy5tKTtyZXR1cm4gRD09PWI/RC5jbG9uZSgpOkR9LHVlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD1i''@;'; put 'put ''LmNsb25lKCk7cmV0dXJuIEQucmVkPW51bGwsRH0sTS5tb250PWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgY2UoYil9LGxlKGNlLHVlKSxjZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5j''@;'; put 'put ''b252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmltb2QoYi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEQucmVkPW51bGwsRH0sY2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBiLndvcmRzWzBdPTAsYi5sZW5ndGg9''@;'; put 'put ''MSxiO3ZhciBIPWIuaW11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpn''@;'; put 'put ''LmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPWIubXVsKEQpLE49SC5tYXNrbih0''@;'; put 'put ''aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSks''@;'; put 'put ''Qy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sODIwMTY6YXQ9PnsidXNlIHN0cmljdCI7dmFyIGFl''@;'; put 'put ''LEllPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsRj1JZSYmImZ1bmN0aW9uIj09dHlwZW9mIEllLmFwcGx5P0llLmFwcGx5OmZ1bmN0aW9uKGVlLHRlLG9lKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoZWUsdGUsb2UpfTthZT1JZSYmImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIEllLm93bktleXM/SWUub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGVlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZWUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGVlKSl9OmZ1bmN0aW9u''@;'; put 'put ''KGVlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZWUpfTt2YXIgbT1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUhPWVlfTtmdW5jdGlvbiBsZSgpe2xlLmluaXQuY2FsbCh0aGlzKX1hdC5leHBvcnRzPWxlLGF0LmV4cG9ydHMub25jZT1mdW5jdGlvbiBZ''@;'; put 'put ''KHEsZWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0ZSxvZSl7ZnVuY3Rpb24gc2UodWUpe3EucmVtb3ZlTGlzdGVuZXIoZWUsaGUpLG9lKHVlKX1mdW5jdGlvbiBoZSgpeyJmdW5jdGlvbiI9PXR5cGVvZiBxLnJlbW92ZUxpc3RlbmVyJiZxLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIs''@;'; put 'put ''c2UpLHRlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9VShxLGVlLGhlLHtvbmNlOiEwfSksImVycm9yIiE9PWVlJiZmdW5jdGlvbiBYKHEsZWUsdGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBxLm9uJiZVKHEsImVycm9yIixlZSx0ZSl9KHEsc2Use29uY2U6ITB9KX0pfSxsZS5FdmVudEVtaXR0''@;'; put 'put ''ZXI9bGUsbGUucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLGxlLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxsZS5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIE09MTA7ZnVuY3Rpb24gTyhxKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcSl0aHJvdyBuZXcgVHlwZUVycm9yKCdU''@;'; put 'put ''aGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcSl9ZnVuY3Rpb24gUihxKXtyZXR1cm4gdm9pZCAwPT09cS5fbWF4TGlzdGVuZXJzP2xlLmRlZmF1bHRNYXhMaXN0ZW5lcnM6cS5fbWF4TGlzdGVuZXJzfWZ1bmN0''@;'; put 'put ''aW9uIHoocSxlZSx0ZSxvZSl7dmFyIHNlLGhlLHVlO2lmKE8odGUpLHZvaWQgMD09PShoZT1xLl9ldmVudHMpPyhoZT1xLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxxLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09aGUubmV3TGlzdGVuZXImJihxLmVtaXQoIm5ld0xpc3RlbmVyIixl''@;'; put 'put ''ZSx0ZS5saXN0ZW5lcj90ZS5saXN0ZW5lcjp0ZSksaGU9cS5fZXZlbnRzKSx1ZT1oZVtlZV0pLHZvaWQgMD09PXVlKXVlPWhlW2VlXT10ZSwrK3EuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHVlP3VlPWhlW2VlXT1vZT9bdGUsdWVdOlt1ZSx0ZV06b2U/dWUudW5z''@;'; put 'put ''aGlmdCh0ZSk6dWUucHVzaCh0ZSksKHNlPVIocSkpPjAmJnVlLmxlbmd0aD5zZSYmIXVlLndhcm5lZCl7dWUud2FybmVkPSEwO3ZhciBjZT1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIit1ZS5sZW5ndGgrIiAiK1N0cmluZyhlZSkrIiBs''@;'; put 'put ''aXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7Y2UubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixjZS5lbWl0dGVyPXEsY2UudHlwZT1lZSxjZS5jb3VudD11ZS5sZW5ndGgsZnVuY3Rpb24geChxKXtjb25z''@;'; put 'put ''b2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihxKX0oY2UpfXJldHVybiBxfWZ1bmN0aW9uIEsoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIEkocSxlZSx0ZSl7dmFyIG9lPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpxLHR5cGU6ZWUsbGlzdGVuZXI6dGV9LHNlPUsu''@;'; put 'put ''YmluZChvZSk7cmV0dXJuIHNlLmxpc3RlbmVyPXRlLG9lLndyYXBGbj1zZSxzZX1mdW5jdGlvbiBrKHEsZWUsdGUpe3ZhciBvZT1xLl9ldmVudHM7aWYodm9pZCAwPT09b2UpcmV0dXJuW107dmFyIHNlPW9lW2VlXTtyZXR1cm4gdm9pZCAwPT09c2U/W106ImZ1bmN0aW9uIj09dHlwZW9mIHNl''@;'; put 'put ''P3RlP1tzZS5saXN0ZW5lcnx8c2VdOltzZV06dGU/ZnVuY3Rpb24gQihxKXtmb3IodmFyIGVlPW5ldyBBcnJheShxLmxlbmd0aCksdGU9MDt0ZTxlZS5sZW5ndGg7Kyt0ZSllZVt0ZV09cVt0ZV0ubGlzdGVuZXJ8fHFbdGVdO3JldHVybiBlZX0oc2UpOmooc2Usc2UubGVuZ3RoKX1mdW5jdGlv''@;'; put 'put ''biBFKHEpe3ZhciBlZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09ZWUpe3ZhciB0ZT1lZVtxXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGUpcmV0dXJuIDE7aWYodm9pZCAwIT09dGUpcmV0dXJuIHRlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBqKHEsZWUpe2Zvcih2YXIgdGU9bmV3IEFy''@;'; put 'put ''cmF5KGVlKSxvZT0wO29lPGVlOysrb2UpdGVbb2VdPXFbb2VdO3JldHVybiB0ZX1mdW5jdGlvbiBVKHEsZWUsdGUsb2Upe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBxLm9uKW9lLm9uY2U/cS5vbmNlKGVlLHRlKTpxLm9uKGVlLHRlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBxLmFkZEV2''@;'; put 'put ''ZW50TGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJlbWl0dGVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHEpO3EuYWRkRXZlbnRMaXN0ZW5lcihlZSxmdW5jdGlvbiBzZShoZSl7b2Uub25jZSYmcS5yZW1v''@;'; put 'put ''dmVFdmVudExpc3RlbmVyKGVlLHNlKSx0ZShoZSl9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLCJkZWZhdWx0TWF4TGlzdGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTX0sc2V0OmZ1bmN0aW9uKHEpe2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cTwwfHxt''@;'; put 'put ''KHEpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrcSsiLiIpO009cX19KSxsZS5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09''@;'; put 'put ''PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9p''@;'; put 'put ''ZCAwfSxsZS5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGVlKXtpZigibnVtYmVyIiE9dHlwZW9mIGVlfHxlZTwwfHxtKGVlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUg''@;'; put 'put ''bnVtYmVyLiBSZWNlaXZlZCAnK2VlKyIuIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1lZSx0aGlzfSxsZS5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIFIodGhpcyl9LGxlLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGVlKXtmb3IodmFyIHRlPVtdLG9l''@;'; put 'put ''PTE7b2U8YXJndW1lbnRzLmxlbmd0aDtvZSsrKXRlLnB1c2goYXJndW1lbnRzW29lXSk7dmFyIHNlPSJlcnJvciI9PT1lZSxoZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aGUpc2U9c2UmJnZvaWQgMD09PWhlLmVycm9yO2Vsc2UgaWYoIXNlKXJldHVybiExO2lmKHNlKXt2YXIgdWU7aWYo''@;'; put 'put ''dGUubGVuZ3RoPjAmJih1ZT10ZVswXSksdWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyB1ZTt2YXIgY2U9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisodWU/IiAoIit1ZS5tZXNzYWdlKyIpIjoiIikpO3Rocm93IGNlLmNvbnRleHQ9dWUsY2V9dmFyIEc9aGVbZWVdO2lmKHZvaWQgMD09''@;'; put 'put ''PUcpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEcpRihHLHRoaXMsdGUpO2Vsc2V7dmFyIGI9Ry5sZW5ndGgsRD1qKEcsYik7Zm9yKG9lPTA7b2U8YjsrK29lKUYoRFtvZV0sdGhpcyx0ZSl9cmV0dXJuITB9LGxlLnByb3RvdHlwZS5vbj1sZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9''@;'; put 'put ''ZnVuY3Rpb24oZWUsdGUpe3JldHVybiB6KHRoaXMsZWUsdGUsITEpfSxsZS5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4geih0aGlzLGVlLHRlLCEwKX0sbGUucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oZWUsdGUpe3JldHVybiBPKHRlKSx0aGlzLm9u''@;'; put 'put ''KGVlLEkodGhpcyxlZSx0ZSkpLHRoaXN9LGxlLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4gTyh0ZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoZWUsSSh0aGlzLGVlLHRlKSksdGhpc30sbGUucHJvdG90eXBlLm9mZj1sZS5wcm90b3R5cGUucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZWUsdGUpe3ZhciBvZSxzZSxoZSx1ZSxjZTtpZihPKHRlKSx2b2lkIDA9PT0oc2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0ob2U9c2VbZWVdKSlyZXR1cm4gdGhpcztpZihvZT09PXRlfHxvZS5saXN0ZW5lcj09PXRlKTA9PS0t''@;'; put 'put ''dGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBzZVtlZV0sc2UucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGVlLG9lLmxpc3RlbmVyfHx0ZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIG9lKXtm''@;'; put 'put ''b3IoaGU9LTEsdWU9b2UubGVuZ3RoLTE7dWU+PTA7dWUtLSlpZihvZVt1ZV09PT10ZXx8b2VbdWVdLmxpc3RlbmVyPT09dGUpe2NlPW9lW3VlXS5saXN0ZW5lcixoZT11ZTticmVha31pZihoZTwwKXJldHVybiB0aGlzOzA9PT1oZT9vZS5zaGlmdCgpOmZ1bmN0aW9uIFYocSxlZSl7Zm9yKDtl''@;'; put 'put ''ZSsxPHEubGVuZ3RoO2VlKyspcVtlZV09cVtlZSsxXTtxLnBvcCgpfShvZSxoZSksMT09PW9lLmxlbmd0aCYmKHNlW2VlXT1vZVswXSksdm9pZCAwIT09c2UucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGVlLGNlfHx0ZSl9cmV0dXJuIHRoaXN9LGxlLnByb3Rv''@;'; put 'put ''dHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZWUpe3ZhciB0ZSxvZSxzZTtpZih2b2lkIDA9PT0ob2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1vZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1P''@;'; put 'put ''YmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PW9lW2VlXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIG9lW2VlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIHVl''@;'; put 'put ''LGhlPU9iamVjdC5rZXlzKG9lKTtmb3Ioc2U9MDtzZTxoZS5sZW5ndGg7KytzZSkicmVtb3ZlTGlzdGVuZXIiIT09KHVlPWhlW3NlXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKHVlKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZl''@;'; put 'put ''bnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZih0ZT1vZVtlZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoZWUsdGUpO2Vsc2UgaWYodm9pZCAwIT09dGUpZm9yKHNlPXRlLmxlbmd0aC0xO3NlPj0wO3NlLS0pdGhpcy5y''@;'; put 'put ''ZW1vdmVMaXN0ZW5lcihlZSx0ZVtzZV0pO3JldHVybiB0aGlzfSxsZS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKGVlKXtyZXR1cm4gayh0aGlzLGVlLCEwKX0sbGUucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihlZSl7cmV0dXJuIGsodGhpcyxlZSwhMSl9LGxlLmxpc3Rl''@;'; put 'put ''bmVyQ291bnQ9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHEubGlzdGVuZXJDb3VudD9xLmxpc3RlbmVyQ291bnQoZWUpOkUuY2FsbChxLGVlKX0sbGUucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9RSxsZS5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9ldmVudHNDb3VudD4wP2FlKHRoaXMuX2V2ZW50cyk6W119fSwzNjUwNTooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoNzU4MjkpO2F0LmV4cG9ydHM9ZnVuY3Rpb24gbShsZSxNLE8sUil7aWYoYWUuaXNCdWZmZXIobGUpfHwobGU9YWUuZnJvbShsZSwi''@;'; put 'put ''YmluYXJ5IikpLE0mJihhZS5pc0J1ZmZlcihNKXx8KE09YWUuZnJvbShNLCJiaW5hcnkiKSksOCE9PU0ubGVuZ3RoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIgej1PLzgsSz1hZS5hbGxvYyh6KSxJPWFl''@;'; put 'put ''LmFsbG9jKFJ8fDApLGs9YWUuYWxsb2MoMCk7ej4wfHxSPjA7KXt2YXIgRT1uZXcgeDtFLnVwZGF0ZShrKSxFLnVwZGF0ZShsZSksTSYmRS51cGRhdGUoTSksaz1FLmRpZ2VzdCgpO3ZhciBqPTA7aWYoej4wKXt2YXIgVj1LLmxlbmd0aC16O2o9TWF0aC5taW4oeixrLmxlbmd0aCksay5jb3B5''@;'; put 'put ''KEssViwwLGopLHotPWp9aWYoajxrLmxlbmd0aCYmUj4wKXt2YXIgQj1JLmxlbmd0aC1SLFk9TWF0aC5taW4oUixrLmxlbmd0aC1qKTtrLmNvcHkoSSxCLGosaitZKSxSLT1ZfX1yZXR1cm4gay5maWxsKDApLHtrZXk6SyxpdjpJfX19LDYwMzgwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoOTY3NDUpLlRyYW5zZm9ybTtmdW5jdGlvbiBNKE8pe3guY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1hZS5hbGxvY1Vuc2FmZShPKSx0aGlzLl9ibG9ja1NpemU9Tyx0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5f''@;'; put 'put ''ZmluYWxpemVkPSExfUYoNjY2OTgpKE0seCksTS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihPLFIseil7dmFyIEs9bnVsbDt0cnl7dGhpcy51cGRhdGUoTyxSKX1jYXRjaChJKXtLPUl9eihLKX0sTS5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKE8pe3ZhciBSPW51bGw7dHJ5e3Ro''@;'; put 'put ''aXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaCh6KXtSPXp9TyhSKX0sTS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE8sUil7aWYoZnVuY3Rpb24gbGUoTyxSKXtpZighYWUuaXNCdWZmZXIoTykmJiJzdHJpbmciIT10eXBlb2YgTyl0aHJvdyBuZXcgVHlwZUVycm9yKFIrIiBtdXN0IGJl''@;'; put 'put ''IGEgc3RyaW5nIG9yIGEgYnVmZmVyIil9KE8sIkRhdGEiKSx0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTthZS5pc0J1ZmZlcihPKXx8KE89YWUuZnJvbShPLFIpKTtmb3IodmFyIHo9dGhpcy5fYmxvY2ssSz0wO3RoaXMuX2Jsb2NrT2Zm''@;'; put 'put ''c2V0K08ubGVuZ3RoLUs+PXRoaXMuX2Jsb2NrU2l6ZTspe2Zvcih2YXIgST10aGlzLl9ibG9ja09mZnNldDtJPHRoaXMuX2Jsb2NrU2l6ZTspeltJKytdPU9bSysrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7SzxPLmxlbmd0aDspelt0aGlzLl9ibG9ja09mZnNl''@;'; put 'put ''dCsrXT1PW0srK107Zm9yKHZhciBrPTAsRT04Kk8ubGVuZ3RoO0U+MDsrK2spdGhpcy5fbGVuZ3RoW2tdKz1FLChFPXRoaXMuX2xlbmd0aFtrXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhba10tPTQyOTQ5NjcyOTYqRSk7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLl91cGRhdGU9''@;'; put 'put ''ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LE0ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihPKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9''@;'; put 'put ''ITA7dmFyIFI9dGhpcy5fZGlnZXN0KCk7dm9pZCAwIT09TyYmKFI9Ui50b1N0cmluZyhPKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgej0wO3o8NDsrK3opdGhpcy5fbGVuZ3RoW3pdPTA7cmV0dXJuIFJ9LE0ucHJvdG90eXBlLl9kaWdlc3Q9ZnVu''@;'; put 'put ''Y3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LGF0LmV4cG9ydHM9TX0sNzEwNzY6KGF0LEllLEYpPT57dmFyIGFlPUllO2FlLnV0aWxzPUYoMTk4NzUpLGFlLmNvbW1vbj1GKDkyMDg1KSxhZS5zaGE9Rig1NzY1OCksYWUucmlwZW1kPUYoNDgz''@;'; put 'put ''NDQpLGFlLmhtYWM9Rig3NjE5MiksYWUuc2hhMT1hZS5zaGEuc2hhMSxhZS5zaGEyNTY9YWUuc2hhLnNoYTI1NixhZS5zaGEyMjQ9YWUuc2hhLnNoYTIyNCxhZS5zaGEzODQ9YWUuc2hhLnNoYTM4NCxhZS5zaGE1MTI9YWUuc2hhLnNoYTUxMixhZS5yaXBlbWQxNjA9YWUucmlwZW1kLnJpcGVt''@;'; put 'put ''ZDE2MH0sOTIwODU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoNTc3OTgpO2Z1bmN0aW9uIG0oKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0''@;'; put 'put ''U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj0iYmlnIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1Np''@;'; put 'put ''emUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfUllLkJsb2NrSGFzaD1tLG0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihNLE8pe2lmKE09YWUudG9BcnJheShNLE8pLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdChNKTpNLHRoaXMucGVu''@;'; put 'put ''ZGluZ1RvdGFsKz1NLmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciBSPShNPXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9TS5zbGljZShNLmxlbmd0aC1SLE0ubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYm''@;'; put 'put ''KHRoaXMucGVuZGluZz1udWxsKSxNPWFlLmpvaW4zMihNLDAsTS5sZW5ndGgtUix0aGlzLmVuZGlhbik7Zm9yKHZhciB6PTA7ejxNLmxlbmd0aDt6Kz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZShNLHoseit0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sbS5wcm90b3R5cGUuZGlnZXN0''@;'; put 'put ''PWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSkseChudWxsPT09dGhpcy5wZW5kaW5nKSx0aGlzLl9kaWdlc3QoTSl9LG0ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgTT10aGlzLnBlbmRpbmdUb3RhbCxPPXRoaXMuX2RlbHRhOCxSPU8tKE0rdGhpcy5w''@;'; put 'put ''YWRMZW5ndGgpJU8sej1uZXcgQXJyYXkoUit0aGlzLnBhZExlbmd0aCk7elswXT0xMjg7Zm9yKHZhciBLPTE7SzxSO0srKyl6W0tdPTA7aWYoTTw8PTMsImJpZyI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBJPTg7STx0aGlzLnBhZExlbmd0aDtJKyspeltLKytdPTA7eltLKytdPTAseltLKytd''@;'; put 'put ''PTAseltLKytdPTAseltLKytdPTAseltLKytdPU0+Pj4yNCYyNTUseltLKytdPU0+Pj4xNiYyNTUseltLKytdPU0+Pj44JjI1NSx6W0srK109MjU1Jk19ZWxzZSBmb3IoeltLKytdPTI1NSZNLHpbSysrXT1NPj4+OCYyNTUseltLKytdPU0+Pj4xNiYyNTUseltLKytdPU0+Pj4yNCYyNTUseltL''@;'; put 'put ''KytdPTAseltLKytdPTAseltLKytdPTAseltLKytdPTAsST04O0k8dGhpcy5wYWRMZW5ndGg7SSsrKXpbSysrXT0wO3JldHVybiB6fX0sNzYxOTI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoNTc3OTgpO2Z1bmN0aW9uIG0obGUsTSxPKXtpZighKHRoaXMg''@;'; put 'put ''aW5zdGFuY2VvZiBtKSlyZXR1cm4gbmV3IG0obGUsTSxPKTt0aGlzLkhhc2g9bGUsdGhpcy5ibG9ja1NpemU9bGUuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPWxlLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoYWUudG9BcnJheShNLE8pKX1h''@;'; put 'put ''dC5leHBvcnRzPW0sbS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTSl7TS5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJihNPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoTSkuZGlnZXN0KCkpLHgoTS5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIE89TS5sZW5ndGg7Tzx0aGlzLmJsb2Nr''@;'; put 'put ''U2l6ZTtPKyspTS5wdXNoKDApO2ZvcihPPTA7TzxNLmxlbmd0aDtPKyspTVtPXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShNKSxPPTA7TzxNLmxlbmd0aDtPKyspTVtPXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShNKX0sbS5wcm90''@;'; put 'put ''b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE0sTyl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKE0sTyksdGhpc30sbS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdChNKX19LDQ4''@;'; put 'put ''MzQ0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDkyMDg1KSxtPWFlLnJvdGwzMixsZT1hZS5zdW0zMixNPWFlLnN1bTMyXzMsTz1hZS5zdW0zMl80LFI9eC5CbG9ja0hhc2g7ZnVuY3Rpb24geigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBu''@;'; put 'put ''ZXcgejtSLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5lbmRpYW49ImxpdHRsZSJ9ZnVuY3Rpb24gSyhZLFgsVSxxKXtyZXR1cm4gWTw9MTU/WF5VXnE6WTw9MzE/WCZVfH5YJnE6WTw9NDc/KFh8''@;'; put 'put ''flUpXnE6WTw9NjM/WCZxfFUmfnE6WF4oVXx+cSl9ZnVuY3Rpb24gayhZKXtyZXR1cm4gWTw9MTU/MTM1MjgyOTkyNjpZPD0zMT8xNTQ4NjAzNjg0Olk8PTQ3PzE4MzYwNzI2OTE6WTw9NjM/MjA1Mzk5NDIxNzowfWFlLmluaGVyaXRzKHosUiksSWUucmlwZW1kMTYwPXosei5ibG9ja1NpemU9''@;'; put 'put ''NTEyLHoub3V0U2l6ZT0xNjAsei5obWFjU3RyZW5ndGg9MTkyLHoucGFkTGVuZ3RoPTY0LHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWCxVKXtmb3IodmFyIHE9dGhpcy5oWzBdLGVlPXRoaXMuaFsxXSx0ZT10aGlzLmhbMl0sb2U9dGhpcy5oWzNdLHNlPXRoaXMuaFs0XSxoZT1xLHVl''@;'; put 'put ''PWVlLGNlPXRlLEc9b2UsYj1zZSxEPTA7RDw4MDtEKyspe3ZhciBIPWxlKG0oTyhxLEsoRCxlZSx0ZSxvZSksWFtFW0RdK1VdLChZPUQpPD0xNT8wOlk8PTMxPzE1MTg1MDAyNDk6WTw9NDc/MTg1OTc3NTM5MzpZPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4MzgpLFZbRF0pLHNlKTtxPXNlLHNl''@;'; put 'put ''PW9lLG9lPW0odGUsMTApLHRlPWVlLGVlPUgsSD1sZShtKE8oaGUsSyg3OS1ELHVlLGNlLEcpLFhbaltEXStVXSxrKEQpKSxCW0RdKSxiKSxoZT1iLGI9RyxHPW0oY2UsMTApLGNlPXVlLHVlPUh9dmFyIFk7SD1NKHRoaXMuaFsxXSx0ZSxHKSx0aGlzLmhbMV09TSh0aGlzLmhbMl0sb2UsYiks''@;'; put 'put ''dGhpcy5oWzJdPU0odGhpcy5oWzNdLHNlLGhlKSx0aGlzLmhbM109TSh0aGlzLmhbNF0scSx1ZSksdGhpcy5oWzRdPU0odGhpcy5oWzBdLGVlLGNlKSx0aGlzLmhbMF09SH0sei5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihYKXtyZXR1cm4iaGV4Ij09PVg/YWUudG9IZXgzMih0aGlzLmgs''@;'; put 'put ''ImxpdHRsZSIpOmFlLnNwbGl0MzIodGhpcy5oLCJsaXR0bGUiKX07dmFyIEU9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwx''@;'; put 'put ''MSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10saj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQs''@;'; put 'put ''Niw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxWPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcs''@;'; put 'put ''MTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxCPVs4LDksOSwxMSwxMywxNSwxNSw1LDcs''@;'; put 'put ''Nyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1''@;'; put 'put ''LDE1LDEzLDExLDExXX0sNTc2NTg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO0llLnNoYTE9Rig3NTAxMCksSWUuc2hhMjI0PUYoODM1NzgpLEllLnNoYTI1Nj1GKDk3ODU3KSxJZS5zaGEzODQ9Rig2ODcyMyksSWUuc2hhNTEyPUYoNDUzMDQpfSw3NTAxMDooYXQsSWUsRik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5MjA4NSksbT1GKDcyMjEpLGxlPWFlLnJvdGwzMixNPWFlLnN1bTMyLE89YWUuc3VtMzJfNSxSPW0uZnRfMSx6PXguQmxvY2tIYXNoLEs9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIEkoKXtp''@;'; put 'put ''ZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEk7ei5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfWFlLmluaGVyaXRzKEkseiksYXQuZXhwb3J0cz1JLEku''@;'; put 'put ''YmxvY2tTaXplPTUxMixJLm91dFNpemU9MTYwLEkuaG1hY1N0cmVuZ3RoPTgwLEkucGFkTGVuZ3RoPTY0LEkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFY9dGhpcy5XLEI9MDtCPDE2O0IrKylWW0JdPUVbaitCXTtmb3IoO0I8Vi5sZW5ndGg7QisrKVZbQl09bGUo''@;'; put 'put ''VltCLTNdXlZbQi04XV5WW0ItMTRdXlZbQi0xNl0sMSk7dmFyIFk9dGhpcy5oWzBdLFg9dGhpcy5oWzFdLFU9dGhpcy5oWzJdLHE9dGhpcy5oWzNdLGVlPXRoaXMuaFs0XTtmb3IoQj0wO0I8Vi5sZW5ndGg7QisrKXt2YXIgdGU9fn4oQi8yMCksb2U9TyhsZShZLDUpLFIodGUsWCxVLHEpLGVl''@;'; put 'put ''LFZbQl0sS1t0ZV0pO2VlPXEscT1VLFU9bGUoWCwzMCksWD1ZLFk9b2V9dGhpcy5oWzBdPU0odGhpcy5oWzBdLFkpLHRoaXMuaFsxXT1NKHRoaXMuaFsxXSxYKSx0aGlzLmhbMl09TSh0aGlzLmhbMl0sVSksdGhpcy5oWzNdPU0odGhpcy5oWzNdLHEpLHRoaXMuaFs0XT1NKHRoaXMuaFs0XSxl''@;'; put 'put ''ZSl9LEkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oRSl7cmV0dXJuImhleCI9PT1FP2FlLnRvSGV4MzIodGhpcy5oLCJiaWciKTphZS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw4MzU3ODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5Nzg1Nyk7ZnVu''@;'; put 'put ''Y3Rpb24gbSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG0pKXJldHVybiBuZXcgbTt4LmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1hZS5pbmhlcml0''@;'; put 'put ''cyhtLHgpLGF0LmV4cG9ydHM9bSxtLmJsb2NrU2l6ZT01MTIsbS5vdXRTaXplPTIyNCxtLmhtYWNTdHJlbmd0aD0xOTIsbS5wYWRMZW5ndGg9NjQsbS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihNKXtyZXR1cm4iaGV4Ij09PU0/YWUudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSwiYmln''@;'; put 'put ''Iik6YWUuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSw5Nzg1NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5MjA4NSksbT1GKDcyMjEpLGxlPUYoNTc3OTgpLE09YWUuc3VtMzIsTz1hZS5zdW0zMl80LFI9YWUuc3VtMzJfNSx6PW0uY2gz''@;'; put 'put ''MixLPW0ubWFqMzIsST1tLnMwXzI1NixrPW0uczFfMjU2LEU9bS5nMF8yNTYsaj1tLmcxXzI1NixWPXguQmxvY2tIYXNoLEI9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQz''@;'; put 'put ''ODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2''@;'; put 'put ''LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1''@;'; put 'put ''Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2''@;'; put 'put ''MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gWSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFkpKXJldHVybiBuZXcgWTtWLmNhbGwodGhpcyks''@;'; put 'put ''dGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPUIsdGhpcy5XPW5ldyBBcnJheSg2NCl9YWUuaW5oZXJpdHMoWSxWKSxhdC5leHBvcnRzPVksWS5ibG9ja1Np''@;'; put 'put ''emU9NTEyLFkub3V0U2l6ZT0yNTYsWS5obWFjU3RyZW5ndGg9MTkyLFkucGFkTGVuZ3RoPTY0LFkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSxxKXtmb3IodmFyIGVlPXRoaXMuVyx0ZT0wO3RlPDE2O3RlKyspZWVbdGVdPVVbcSt0ZV07Zm9yKDt0ZTxlZS5sZW5ndGg7dGUrKyllZVt0''@;'; put 'put ''ZV09TyhqKGVlW3RlLTJdKSxlZVt0ZS03XSxFKGVlW3RlLTE1XSksZWVbdGUtMTZdKTt2YXIgb2U9dGhpcy5oWzBdLHNlPXRoaXMuaFsxXSxoZT10aGlzLmhbMl0sdWU9dGhpcy5oWzNdLGNlPXRoaXMuaFs0XSxHPXRoaXMuaFs1XSxiPXRoaXMuaFs2XSxEPXRoaXMuaFs3XTtmb3IobGUodGhp''@;'; put 'put ''cy5rLmxlbmd0aD09PWVlLmxlbmd0aCksdGU9MDt0ZTxlZS5sZW5ndGg7dGUrKyl7dmFyIEg9UihELGsoY2UpLHooY2UsRyxiKSx0aGlzLmtbdGVdLGVlW3RlXSksTj1NKEkob2UpLEsob2Usc2UsaGUpKTtEPWIsYj1HLEc9Y2UsY2U9TSh1ZSxIKSx1ZT1oZSxoZT1zZSxzZT1vZSxvZT1NKEgs''@;'; put 'put ''Til9dGhpcy5oWzBdPU0odGhpcy5oWzBdLG9lKSx0aGlzLmhbMV09TSh0aGlzLmhbMV0sc2UpLHRoaXMuaFsyXT1NKHRoaXMuaFsyXSxoZSksdGhpcy5oWzNdPU0odGhpcy5oWzNdLHVlKSx0aGlzLmhbNF09TSh0aGlzLmhbNF0sY2UpLHRoaXMuaFs1XT1NKHRoaXMuaFs1XSxHKSx0aGlzLmhb''@;'; put 'put ''Nl09TSh0aGlzLmhbNl0sYiksdGhpcy5oWzddPU0odGhpcy5oWzddLEQpfSxZLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKFUpe3JldHVybiJoZXgiPT09VT9hZS50b0hleDMyKHRoaXMuaCwiYmlnIik6YWUuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNjg3MjM6KGF0LEllLEYpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoNDUzMDQpO2Z1bmN0aW9uIG0oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBtKSlyZXR1cm4gbmV3IG07eC5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEy''@;'; put 'put ''NzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19YWUuaW5oZXJpdHMobSx4KSxhdC5leHBvcnRzPW0sbS5ibG9ja1NpemU9MTAyNCxt''@;'; put 'put ''Lm91dFNpemU9Mzg0LG0uaG1hY1N0cmVuZ3RoPTE5MixtLnBhZExlbmd0aD0xMjgsbS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihNKXtyZXR1cm4iaGV4Ij09PU0/YWUudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOmFlLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJi''@;'; put 'put ''aWciKX19LDQ1MzA0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDkyMDg1KSxtPUYoNTc3OTgpLGxlPWFlLnJvdHI2NF9oaSxNPWFlLnJvdHI2NF9sbyxPPWFlLnNocjY0X2hpLFI9YWUuc2hyNjRfbG8sej1hZS5zdW02NCxLPWFlLnN1bTY0X2hpLEk9YWUu''@;'; put 'put ''c3VtNjRfbG8saz1hZS5zdW02NF80X2hpLEU9YWUuc3VtNjRfNF9sbyxqPWFlLnN1bTY0XzVfaGksVj1hZS5zdW02NF81X2xvLEI9eC5CbG9ja0hhc2gsWT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTcz''@;'; put 'put ''LDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0''@;'; put 'put ''MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2''@;'; put 'put ''Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5Njgw''@;'; put 'put ''OCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5''@;'; put 'put ''NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4''@;'; put 'put ''NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYx''@;'; put 'put ''NiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwy''@;'; put 'put ''MDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzky''@;'; put 'put ''ODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMz''@;'; put 'put ''LDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1''@;'; put 'put ''bmN0aW9uIFgoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBYKSlyZXR1cm4gbmV3IFg7Qi5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMx''@;'; put 'put ''MTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPVksdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIFUoSCxOLGcsQyxTKXt2YXIgdj1IJmdefkgmUztyZXR1cm4gdjwwJiYodis9NDI5''@;'; put 'put ''NDk2NzI5Niksdn1mdW5jdGlvbiBxKEgsTixnLEMsUyx2KXt2YXIgcD1OJkNefk4mdjtyZXR1cm4gcDwwJiYocCs9NDI5NDk2NzI5NikscH1mdW5jdGlvbiBlZShILE4sZyxDLFMpe3ZhciB2PUgmZ15IJlNeZyZTO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIHRlKEgs''@;'; put 'put ''TixnLEMsUyx2KXt2YXIgcD1OJkNeTiZ2XkMmdjtyZXR1cm4gcDwwJiYocCs9NDI5NDk2NzI5NikscH1mdW5jdGlvbiBvZShILE4pe3ZhciB2PWxlKEgsTiwyOClebGUoTixILDIpXmxlKE4sSCw3KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBzZShILE4pe3ZhciB2''@;'; put 'put ''PU0oSCxOLDI4KV5NKE4sSCwyKV5NKE4sSCw3KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBoZShILE4pe3ZhciB2PWxlKEgsTiwxNClebGUoSCxOLDE4KV5sZShOLEgsOSk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gdWUoSCxOKXt2YXIg''@;'; put 'put ''dj1NKEgsTiwxNCleTShILE4sMTgpXk0oTixILDkpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIGNlKEgsTil7dmFyIHY9bGUoSCxOLDEpXmxlKEgsTiw4KV5PKEgsTiw3KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBHKEgsTil7dmFyIHY9''@;'; put 'put ''TShILE4sMSleTShILE4sOCleUihILE4sNyk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gYihILE4pe3ZhciB2PWxlKEgsTiwxOSlebGUoTixILDI5KV5PKEgsTiw2KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBEKEgsTil7dmFyIHY9TShI''@;'; put 'put ''LE4sMTkpXk0oTixILDI5KV5SKEgsTiw2KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1hZS5pbmhlcml0cyhYLEIpLGF0LmV4cG9ydHM9WCxYLmJsb2NrU2l6ZT0xMDI0LFgub3V0U2l6ZT01MTIsWC5obWFjU3RyZW5ndGg9MTkyLFgucGFkTGVuZ3RoPTEyOCxYLnByb3RvdHlwZS5f''@;'; put 'put ''cHJlcGFyZUJsb2NrPWZ1bmN0aW9uKE4sZyl7Zm9yKHZhciBDPXRoaXMuVyxTPTA7UzwzMjtTKyspQ1tTXT1OW2crU107Zm9yKDtTPEMubGVuZ3RoO1MrPTIpe3ZhciB2PWIoQ1tTLTRdLENbUy0zXSkscD1EKENbUy00XSxDW1MtM10pLHc9Q1tTLTE0XSxKPUNbUy0xM10sbmU9Y2UoQ1tTLTMw''@;'; put 'put ''XSxDW1MtMjldKSxkZT1HKENbUy0zMF0sQ1tTLTI5XSksZmU9Q1tTLTMyXSx4ZT1DW1MtMzFdO0NbU109ayh2LHAsdyxKLG5lLGRlLGZlLHhlKSxDW1MrMV09RSh2LHAsdyxKLG5lLGRlLGZlLHhlKX19LFgucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTixnKXt0aGlzLl9wcmVwYXJlQmxv''@;'; put 'put ''Y2soTixnKTt2YXIgQz10aGlzLlcsUz10aGlzLmhbMF0sdj10aGlzLmhbMV0scD10aGlzLmhbMl0sdz10aGlzLmhbM10sSj10aGlzLmhbNF0sbmU9dGhpcy5oWzVdLGRlPXRoaXMuaFs2XSxmZT10aGlzLmhbN10seGU9dGhpcy5oWzhdLExlPXRoaXMuaFs5XSxGZT10aGlzLmhbMTBdLE9lPXRo''@;'; put 'put ''aXMuaFsxMV0sQmU9dGhpcy5oWzEyXSxXZT10aGlzLmhbMTNdLEtlPXRoaXMuaFsxNF0sWWU9dGhpcy5oWzE1XTttKHRoaXMuay5sZW5ndGg9PT1DLmxlbmd0aCk7Zm9yKHZhciBKZT0wO0plPEMubGVuZ3RoO0plKz0yKXt2YXIgbHQ9S2UsUGU9WWUsYmU9aGUoeGUsTGUpLEFlPXVlKHhlLExl''@;'; put 'put ''KSxUZT1VKHhlLDAsRmUsMCxCZSkscWU9cSgwLExlLDAsT2UsMCxXZSksWGU9dGhpcy5rW0plXSxVZT10aGlzLmtbSmUrMV0saHQ9Q1tKZV0sTWU9Q1tKZSsxXSxEZT1qKGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0LE1lKSx6ZT1WKGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0LE1lKTts''@;'; put 'put ''dD1vZShTLHYpLFBlPXNlKFMsdiksYmU9ZWUoUywwLHAsMCxKKSxBZT10ZSgwLHYsMCx3LDAsbmUpO3ZhciBpdD1LKGx0LFBlLGJlLEFlKSx1dD1JKGx0LFBlLGJlLEFlKTtLZT1CZSxZZT1XZSxCZT1GZSxXZT1PZSxGZT14ZSxPZT1MZSx4ZT1LKGRlLGZlLERlLHplKSxMZT1JKGZlLGZlLERl''@;'; put 'put ''LHplKSxkZT1KLGZlPW5lLEo9cCxuZT13LHA9Uyx3PXYsUz1LKERlLHplLGl0LHV0KSx2PUkoRGUsemUsaXQsdXQpfXoodGhpcy5oLDAsUyx2KSx6KHRoaXMuaCwyLHAsdykseih0aGlzLmgsNCxKLG5lKSx6KHRoaXMuaCw2LGRlLGZlKSx6KHRoaXMuaCw4LHhlLExlKSx6KHRoaXMuaCwxMCxG''@;'; put 'put ''ZSxPZSkseih0aGlzLmgsMTIsQmUsV2UpLHoodGhpcy5oLDE0LEtlLFllKX0sWC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihOKXtyZXR1cm4iaGV4Ij09PU4/YWUudG9IZXgzMih0aGlzLmgsImJpZyIpOmFlLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDcyMjE6KGF0LEllLEYpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciB4PUYoMTk4NzUpLnJvdHIzMjtmdW5jdGlvbiBsZShrLEUsail7cmV0dXJuIGsmRV5+ayZqfWZ1bmN0aW9uIE0oayxFLGope3JldHVybiBrJkVeayZqXkUman1mdW5jdGlvbiBPKGssRSxqKXtyZXR1cm4ga15FXmp9SWUuZnRfMT1mdW5jdGlvbiBtKGssRSxqLFYpe3Jl''@;'; put 'put ''dHVybiAwPT09az9sZShFLGosVik6MT09PWt8fDM9PT1rP08oRSxqLFYpOjI9PT1rP00oRSxqLFYpOnZvaWQgMH0sSWUuY2gzMj1sZSxJZS5tYWozMj1NLEllLnAzMj1PLEllLnMwXzI1Nj1mdW5jdGlvbiBSKGspe3JldHVybiB4KGssMileeChrLDEzKV54KGssMjIpfSxJZS5zMV8yNTY9ZnVu''@;'; put 'put ''Y3Rpb24geihrKXtyZXR1cm4geChrLDYpXngoaywxMSleeChrLDI1KX0sSWUuZzBfMjU2PWZ1bmN0aW9uIEsoayl7cmV0dXJuIHgoayw3KV54KGssMTgpXms+Pj4zfSxJZS5nMV8yNTY9ZnVuY3Rpb24gSShrKXtyZXR1cm4geChrLDE3KV54KGssMTkpXms+Pj4xMH19LDE5ODc1OihhdCxJZSxG''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig1Nzc5OCkseD1GKDY2Njk4KTtmdW5jdGlvbiBtKEQsSCl7cmV0dXJuISg1NTI5NiE9KDY0NTEyJkQuY2hhckNvZGVBdChIKSl8fEg8MHx8SCsxPj1ELmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImRC5jaGFyQ29kZUF0KEgrMSkpfWZ1bmN0aW9uIE8o''@;'; put 'put ''RCl7cmV0dXJuKEQ+Pj4yNHxEPj4+OCY2NTI4MHxEPDw4JjE2NzExNjgwfCgyNTUmRCk8PDI0KT4+PjB9ZnVuY3Rpb24geihEKXtyZXR1cm4gMT09PUQubGVuZ3RoPyIwIitEOkR9ZnVuY3Rpb24gSyhEKXtyZXR1cm4gNz09PUQubGVuZ3RoPyIwIitEOjY9PT1ELmxlbmd0aD8iMDAiK0Q6NT09''@;'; put 'put ''PUQubGVuZ3RoPyIwMDAiK0Q6ND09PUQubGVuZ3RoPyIwMDAwIitEOjM9PT1ELmxlbmd0aD8iMDAwMDAiK0Q6Mj09PUQubGVuZ3RoPyIwMDAwMDAiK0Q6MT09PUQubGVuZ3RoPyIwMDAwMDAwIitEOkR9SWUuaW5oZXJpdHM9eCxJZS50b0FycmF5PWZ1bmN0aW9uIGxlKEQsSCl7aWYoQXJyYXku''@;'; put 'put ''aXNBcnJheShEKSlyZXR1cm4gRC5zbGljZSgpO2lmKCFEKXJldHVybltdO3ZhciBOPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgRClpZihIKXtpZigiaGV4Ij09PUgpZm9yKChEPUQucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoRD0iMCIrRCksQz0wO0M8RC5sZW5n''@;'; put 'put ''dGg7Qys9MilOLnB1c2gocGFyc2VJbnQoRFtDXStEW0MrMV0sMTYpKX1lbHNlIGZvcih2YXIgZz0wLEM9MDtDPEQubGVuZ3RoO0MrKyl7dmFyIFM9RC5jaGFyQ29kZUF0KEMpO1M8MTI4P05bZysrXT1TOlM8MjA0OD8oTltnKytdPVM+PjZ8MTkyLE5bZysrXT02MyZTfDEyOCk6bShELEMpPyhT''@;'; put 'put ''PTY1NTM2KygoMTAyMyZTKTw8MTApKygxMDIzJkQuY2hhckNvZGVBdCgrK0MpKSxOW2crK109Uz4+MTh8MjQwLE5bZysrXT1TPj4xMiY2M3wxMjgsTltnKytdPVM+PjYmNjN8MTI4LE5bZysrXT02MyZTfDEyOCk6KE5bZysrXT1TPj4xMnwyMjQsTltnKytdPVM+PjYmNjN8MTI4LE5bZysrXT02''@;'; put 'put ''MyZTfDEyOCl9ZWxzZSBmb3IoQz0wO0M8RC5sZW5ndGg7QysrKU5bQ109MHxEW0NdO3JldHVybiBOfSxJZS50b0hleD1mdW5jdGlvbiBNKEQpe2Zvcih2YXIgSD0iIixOPTA7TjxELmxlbmd0aDtOKyspSCs9eihEW05dLnRvU3RyaW5nKDE2KSk7cmV0dXJuIEh9LEllLmh0b25sPU8sSWUudG9I''@;'; put 'put ''ZXgzMj1mdW5jdGlvbiBSKEQsSCl7Zm9yKHZhciBOPSIiLGc9MDtnPEQubGVuZ3RoO2crKyl7dmFyIEM9RFtnXTsibGl0dGxlIj09PUgmJihDPU8oQykpLE4rPUsoQy50b1N0cmluZygxNikpfXJldHVybiBOfSxJZS56ZXJvMj16LEllLnplcm84PUssSWUuam9pbjMyPWZ1bmN0aW9uIEkoRCxI''@;'; put 'put ''LE4sZyl7dmFyIEM9Ti1IO2FlKEMlND09MCk7Zm9yKHZhciBTPW5ldyBBcnJheShDLzQpLHY9MCxwPUg7djxTLmxlbmd0aDt2KysscCs9NClTW3ZdPSgiYmlnIj09PWc/RFtwXTw8MjR8RFtwKzFdPDwxNnxEW3ArMl08PDh8RFtwKzNdOkRbcCszXTw8MjR8RFtwKzJdPDwxNnxEW3ArMV08PDh8''@;'; put 'put ''RFtwXSk+Pj4wO3JldHVybiBTfSxJZS5zcGxpdDMyPWZ1bmN0aW9uIGsoRCxIKXtmb3IodmFyIE49bmV3IEFycmF5KDQqRC5sZW5ndGgpLGc9MCxDPTA7ZzxELmxlbmd0aDtnKyssQys9NCl7dmFyIFM9RFtnXTsiYmlnIj09PUg/KE5bQ109Uz4+PjI0LE5bQysxXT1TPj4+MTYmMjU1LE5bQysy''@;'; put 'put ''XT1TPj4+OCYyNTUsTltDKzNdPTI1NSZTKTooTltDKzNdPVM+Pj4yNCxOW0MrMl09Uz4+PjE2JjI1NSxOW0MrMV09Uz4+PjgmMjU1LE5bQ109MjU1JlMpfXJldHVybiBOfSxJZS5yb3RyMzI9ZnVuY3Rpb24gRShELEgpe3JldHVybiBEPj4+SHxEPDwzMi1IfSxJZS5yb3RsMzI9ZnVuY3Rpb24g''@;'; put 'put ''aihELEgpe3JldHVybiBEPDxIfEQ+Pj4zMi1IfSxJZS5zdW0zMj1mdW5jdGlvbiBWKEQsSCl7cmV0dXJuIEQrSD4+PjB9LEllLnN1bTMyXzM9ZnVuY3Rpb24gQihELEgsTil7cmV0dXJuIEQrSCtOPj4+MH0sSWUuc3VtMzJfND1mdW5jdGlvbiBZKEQsSCxOLGcpe3JldHVybiBEK0grTitnPj4+''@;'; put 'put ''MH0sSWUuc3VtMzJfNT1mdW5jdGlvbiBYKEQsSCxOLGcsQyl7cmV0dXJuIEQrSCtOK2crQz4+PjB9LEllLnN1bTY0PWZ1bmN0aW9uIFUoRCxILE4sZyl7dmFyIHY9ZytEW0grMV0+Pj4wO0RbSF09KHY8Zz8xOjApK04rRFtIXT4+PjAsRFtIKzFdPXZ9LEllLnN1bTY0X2hpPWZ1bmN0aW9uIHEo''@;'; put 'put ''RCxILE4sZyl7cmV0dXJuKEgrZz4+PjA8SD8xOjApK0QrTj4+PjB9LEllLnN1bTY0X2xvPWZ1bmN0aW9uIGVlKEQsSCxOLGcpe3JldHVybiBIK2c+Pj4wfSxJZS5zdW02NF80X2hpPWZ1bmN0aW9uIHRlKEQsSCxOLGcsQyxTLHYscCl7dmFyIHc9MCxKPUg7cmV0dXJuIHcrPShKPUorZz4+PjAp''@;'; put 'put ''PEg/MTowLHcrPShKPUorUz4+PjApPFM/MTowLEQrTitDK3YrKHcrPShKPUorcD4+PjApPHA/MTowKT4+PjB9LEllLnN1bTY0XzRfbG89ZnVuY3Rpb24gb2UoRCxILE4sZyxDLFMsdixwKXtyZXR1cm4gSCtnK1MrcD4+PjB9LEllLnN1bTY0XzVfaGk9ZnVuY3Rpb24gc2UoRCxILE4sZyxDLFMs''@;'; put 'put ''dixwLHcsSil7dmFyIG5lPTAsZGU9SDtyZXR1cm4gbmUrPShkZT1kZStnPj4+MCk8SD8xOjAsbmUrPShkZT1kZStTPj4+MCk8Uz8xOjAsbmUrPShkZT1kZStwPj4+MCk8cD8xOjAsRCtOK0Mrdit3KyhuZSs9KGRlPWRlK0o+Pj4wKTxKPzE6MCk+Pj4wfSxJZS5zdW02NF81X2xvPWZ1bmN0aW9u''@;'; put 'put ''IGhlKEQsSCxOLGcsQyxTLHYscCx3LEope3JldHVybiBIK2crUytwK0o+Pj4wfSxJZS5yb3RyNjRfaGk9ZnVuY3Rpb24gdWUoRCxILE4pe3JldHVybihIPDwzMi1OfEQ+Pj5OKT4+PjB9LEllLnJvdHI2NF9sbz1mdW5jdGlvbiBjZShELEgsTil7cmV0dXJuKEQ8PDMyLU58SD4+Pk4pPj4+MH0s''@;'; put 'put ''SWUuc2hyNjRfaGk9ZnVuY3Rpb24gRyhELEgsTil7cmV0dXJuIEQ+Pj5OfSxJZS5zaHI2NF9sbz1mdW5jdGlvbiBiKEQsSCxOKXtyZXR1cm4oRDw8MzItTnxIPj4+Tik+Pj4wfX0sOTI0NDc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDcxMDc2KSx4PUYoNzgyNDcpLG09Rig1''@;'; put 'put ''Nzc5OCk7ZnVuY3Rpb24gbGUoTSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbGUpKXJldHVybiBuZXcgbGUoTSk7dGhpcy5oYXNoPU0uaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISFNLnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PU0ubWluRW50''@;'; put 'put ''cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIE89eC50b0FycmF5KE0uZW50cm9weSxNLmVudHJvcHlFbmN8fCJoZXgiKSxSPXgudG9BcnJheShNLm5vbmNlLE0u''@;'; put 'put ''bm9uY2VFbmN8fCJoZXgiKSx6PXgudG9BcnJheShNLnBlcnMsTS5wZXJzRW5jfHwiaGV4Iik7bShPLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChPLFIseil9YXQu''@;'; put 'put ''ZXhwb3J0cz1sZSxsZS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTyxSLHope3ZhciBLPU8uY29uY2F0KFIpLmNvbmNhdCh6KTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBJPTA7STx0aGlzLlYubGVuZ3Ro''@;'; put 'put ''O0krKyl0aGlzLktbSV09MCx0aGlzLlZbSV09MTt0aGlzLl91cGRhdGUoSyksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LGxlLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgYWUuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0s''@;'; put 'put ''bGUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTyl7dmFyIFI9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO08mJihSPVIudXBkYXRlKE8pKSx0aGlzLks9Ui5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLE8mJih0''@;'; put 'put ''aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShPKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sbGUucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihPLFIseixLKXsic3RyaW5nIiE9dHlwZW9m''@;'; put 'put ''IFImJihLPXosej1SLFI9bnVsbCksTz14LnRvQXJyYXkoTyxSKSx6PXgudG9BcnJheSh6LEspLG0oTy5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShPLmNvbmNh''@;'; put 'put ''dCh6fHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxsZS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oTyxSLHosSyl7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIFImJihLPXos''@;'; put 'put ''ej1SLFI9bnVsbCkseiYmKHo9eC50b0FycmF5KHosS3x8ImhleCIpLHRoaXMuX3VwZGF0ZSh6KSk7Zm9yKHZhciBJPVtdO0kubGVuZ3RoPE87KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksST1JLmNvbmNhdCh0aGlzLlYpO3ZhciBrPUkuc2xpY2UoMCxPKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5fdXBkYXRlKHopLHRoaXMuX3Jlc2VlZCsrLHguZW5jb2RlKGssUil9fSw1NTgzMzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjQxNzkpLkJ1ZmZlcjtJZS5fZGJjcz1LO2Zvcih2YXIgeD0tMSxtPS0yLGxlPS0xMCxNPS0xZTMsTz1uZXcgQXJyYXkoMjU2''@;'; put 'put ''KSx6PTA7ejwyNTY7eisrKU9bel09eDtmdW5jdGlvbiBLKGosVil7aWYodGhpcy5lbmNvZGluZ05hbWU9ai5lbmNvZGluZ05hbWUsIWopdGhyb3cgbmV3IEVycm9yKCJEQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBkYXRhLiIpO2lmKCFqLnRhYmxlKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''RW5jb2RpbmcgJyIrdGhpcy5lbmNvZGluZ05hbWUrIicgaGFzIG5vIGRhdGEuIik7dmFyIEI9ai50YWJsZSgpO3RoaXMuZGVjb2RlVGFibGVzPVtdLHRoaXMuZGVjb2RlVGFibGVzWzBdPU8uc2xpY2UoMCksdGhpcy5kZWNvZGVUYWJsZVNlcT1bXTtmb3IodmFyIFk9MDtZPEIubGVuZ3RoO1kr''@;'; put 'put ''Kyl0aGlzLl9hZGREZWNvZGVDaHVuayhCW1ldKTt0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1WLmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmVuY29kZVRhYmxlPVtdLHRoaXMuZW5jb2RlVGFibGVTZXE9W107dmFyIFg9e307aWYoai5lbmNvZGVTa2lwVmFscylmb3IoWT0wO1k8ai5lbmNvZGVT''@;'; put 'put ''a2lwVmFscy5sZW5ndGg7WSsrKXt2YXIgVT1qLmVuY29kZVNraXBWYWxzW1ldO2lmKCJudW1iZXIiPT10eXBlb2YgVSlYW1VdPSEwO2Vsc2UgZm9yKHZhciBxPVUuZnJvbTtxPD1VLnRvO3ErKylYW3FdPSEwfWlmKHRoaXMuX2ZpbGxFbmNvZGVUYWJsZSgwLDAsWCksai5lbmNvZGVBZGQpZm9y''@;'; put 'put ''KHZhciBlZSBpbiBqLmVuY29kZUFkZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoai5lbmNvZGVBZGQsZWUpJiZ0aGlzLl9zZXRFbmNvZGVDaGFyKGVlLmNoYXJDb2RlQXQoMCksai5lbmNvZGVBZGRbZWVdKTtpZih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxl''@;'; put 'put ''WzBdW1YuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCldLHRoaXMuZGVmQ2hhclNCPT09eCYmKHRoaXMuZGVmQ2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bIj8iXSksdGhpcy5kZWZDaGFyU0I9PT14JiYodGhpcy5kZWZDaGFyU0I9Ij8iLmNoYXJDb2RlQXQoMCkpLCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBqLmdiMTgwMzApe3RoaXMuZ2IxODAzMD1qLmdiMTgwMzAoKTt2YXIgdGU9dGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLG9lPXRoaXMuZGVjb2RlVGFibGVzW3RlXT1PLnNsaWNlKDApLHNlPXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCxoZT10aGlzLmRlY29kZVRhYmxl''@;'; put 'put ''c1tzZV09Ty5zbGljZSgwKTtmb3IoWT0xMjk7WTw9MjU0O1krKyl7dmFyIGNlPXRoaXMuZGVjb2RlVGFibGVzW00tdGhpcy5kZWNvZGVUYWJsZXNbMF1bWV1dO2ZvcihxPTQ4O3E8PTU3O3ErKyljZVtxXT1NLXRlfWZvcihZPTEyOTtZPD0yNTQ7WSsrKW9lW1ldPU0tc2U7Zm9yKFk9NDg7WTw9''@;'; put 'put ''NTc7WSsrKWhlW1ldPW19fWZ1bmN0aW9uIEkoaixWKXt0aGlzLmxlYWRTdXJyb2dhdGU9LTEsdGhpcy5zZXFPYmo9dm9pZCAwLHRoaXMuZW5jb2RlVGFibGU9Vi5lbmNvZGVUYWJsZSx0aGlzLmVuY29kZVRhYmxlU2VxPVYuZW5jb2RlVGFibGVTZXEsdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5''@;'; put 'put ''dGU9Vi5kZWZDaGFyU0IsdGhpcy5nYjE4MDMwPVYuZ2IxODAzMH1mdW5jdGlvbiBrKGosVil7dGhpcy5ub2RlSWR4PTAsdGhpcy5wcmV2QnVmPWFlLmFsbG9jKDApLHRoaXMuZGVjb2RlVGFibGVzPVYuZGVjb2RlVGFibGVzLHRoaXMuZGVjb2RlVGFibGVTZXE9Vi5kZWNvZGVUYWJsZVNlcSx0''@;'; put 'put ''aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1WLmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmdiMTgwMzA9Vi5nYjE4MDMwfWZ1bmN0aW9uIEUoaixWKXtpZihqWzBdPlYpcmV0dXJuLTE7Zm9yKHZhciBCPTAsWT1qLmxlbmd0aDtCPFktMTspe3ZhciBYPUIrTWF0aC5mbG9vcigoWS1CKzEpLzIpO2pb''@;'; put 'put ''WF08PVY/Qj1YOlk9WH1yZXR1cm4gQn1LLnByb3RvdHlwZS5lbmNvZGVyPUksSy5wcm90b3R5cGUuZGVjb2Rlcj1rLEsucHJvdG90eXBlLl9nZXREZWNvZGVUcmllTm9kZT1mdW5jdGlvbihqKXtmb3IodmFyIFY9W107aj4wO2o+Pj04KVYucHVzaCgyNTUmaik7MD09Vi5sZW5ndGgmJlYucHVz''@;'; put 'put ''aCgwKTtmb3IodmFyIEI9dGhpcy5kZWNvZGVUYWJsZXNbMF0sWT1WLmxlbmd0aC0xO1k+MDtZLS0pe3ZhciBYPUJbVltZXV07aWYoWD09eClCW1ZbWV1dPU0tdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVzLnB1c2goQj1PLnNsaWNlKDApKTtlbHNle2lmKCEoWDw9''@;'; put 'put ''TSkpdGhyb3cgbmV3IEVycm9yKCJPdmVyd3JpdGUgYnl0ZSBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIsIGFkZHI6ICIrai50b1N0cmluZygxNikpO0I9dGhpcy5kZWNvZGVUYWJsZXNbTS1YXX19cmV0dXJuIEJ9LEsucHJvdG90eXBlLl9hZGREZWNvZGVDaHVuaz1mdW5jdGlvbihqKXt2YXIg''@;'; put 'put ''Vj1wYXJzZUludChqWzBdLDE2KSxCPXRoaXMuX2dldERlY29kZVRyaWVOb2RlKFYpO1YmPTI1NTtmb3IodmFyIFk9MTtZPGoubGVuZ3RoO1krKyl7dmFyIFg9altZXTtpZigic3RyaW5nIj09dHlwZW9mIFgpZm9yKHZhciBVPTA7VTxYLmxlbmd0aDspe3ZhciBxPVguY2hhckNvZGVBdChVKysp''@;'; put 'put ''O2lmKDU1Mjk2PD1xJiZxPDU2MzIwKXt2YXIgZWU9WC5jaGFyQ29kZUF0KFUrKyk7aWYoISg1NjMyMDw9ZWUmJmVlPDU3MzQ0KSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBzdXJyb2dhdGUgcGFpciBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitqWzBdKTtCW1YrK109''@;'; put 'put ''NjU1MzYrMTAyNCoocS01NTI5NikrKGVlLTU2MzIwKX1lbHNlIGlmKDQwODA8cSYmcTw9NDA5NSl7Zm9yKHZhciB0ZT00MDk1LXErMixvZT1bXSxzZT0wO3NlPHRlO3NlKyspb2UucHVzaChYLmNoYXJDb2RlQXQoVSsrKSk7QltWKytdPWxlLXRoaXMuZGVjb2RlVGFibGVTZXEubGVuZ3RoLHRo''@;'; put 'put ''aXMuZGVjb2RlVGFibGVTZXEucHVzaChvZSl9ZWxzZSBCW1YrK109cX1lbHNle2lmKCJudW1iZXIiIT10eXBlb2YgWCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB0eXBlICciK3R5cGVvZiBYKyInIGdpdmVuIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBjaHVuayAiK2pbMF0pO3Zh''@;'; put 'put ''ciBoZT1CW1YtMV0rMTtmb3IoVT0wO1U8WDtVKyspQltWKytdPWhlKyt9fWlmKFY+MjU1KXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IGNodW5rIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBhZGRyICIralswXSsiOiB0b28gbG9uZyIrVil9LEsucHJvdG90eXBlLl9nZXRFbmNvZGVC''@;'; put 'put ''dWNrZXQ9ZnVuY3Rpb24oail7dmFyIFY9aj4+ODtyZXR1cm4gdm9pZCAwPT09dGhpcy5lbmNvZGVUYWJsZVtWXSYmKHRoaXMuZW5jb2RlVGFibGVbVl09Ty5zbGljZSgwKSksdGhpcy5lbmNvZGVUYWJsZVtWXX0sSy5wcm90b3R5cGUuX3NldEVuY29kZUNoYXI9ZnVuY3Rpb24oaixWKXt2YXIg''@;'; put 'put ''Qj10aGlzLl9nZXRFbmNvZGVCdWNrZXQoaiksWT0yNTUmajtCW1ldPD1sZT90aGlzLmVuY29kZVRhYmxlU2VxW2xlLUJbWV1dWy0xXT1WOkJbWV09PXgmJihCW1ldPVYpfSxLLnByb3RvdHlwZS5fc2V0RW5jb2RlU2VxdWVuY2U9ZnVuY3Rpb24oaixWKXt2YXIgVSxCPWpbMF0sWT10aGlzLl9n''@;'; put 'put ''ZXRFbmNvZGVCdWNrZXQoQiksWD0yNTUmQjtZW1hdPD1sZT9VPXRoaXMuZW5jb2RlVGFibGVTZXFbbGUtWVtYXV06KFU9e30sWVtYXSE9PXgmJihVWy0xXT1ZW1hdKSxZW1hdPWxlLXRoaXMuZW5jb2RlVGFibGVTZXEubGVuZ3RoLHRoaXMuZW5jb2RlVGFibGVTZXEucHVzaChVKSk7Zm9yKHZh''@;'; put 'put ''ciBxPTE7cTxqLmxlbmd0aC0xO3ErKyl7dmFyIGVlPVVbQl07Im9iamVjdCI9PXR5cGVvZiBlZT9VPWVlOihVPVVbQl09e30sdm9pZCAwIT09ZWUmJihVWy0xXT1lZSkpfVVbQj1qW2oubGVuZ3RoLTFdXT1WfSxLLnByb3RvdHlwZS5fZmlsbEVuY29kZVRhYmxlPWZ1bmN0aW9uKGosVixCKXtm''@;'; put 'put ''b3IodmFyIFk9dGhpcy5kZWNvZGVUYWJsZXNbal0sWD0wO1g8MjU2O1grKyl7dmFyIFU9WVtYXSxxPVYrWDtCW3FdfHwoVT49MD90aGlzLl9zZXRFbmNvZGVDaGFyKFUscSk6VTw9TT90aGlzLl9maWxsRW5jb2RlVGFibGUoTS1VLHE8PDgsQik6VTw9bGUmJnRoaXMuX3NldEVuY29kZVNlcXVl''@;'; put 'put ''bmNlKHRoaXMuZGVjb2RlVGFibGVTZXFbbGUtVV0scSkpfX0sSS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oail7Zm9yKHZhciBWPWFlLmFsbG9jKGoubGVuZ3RoKih0aGlzLmdiMTgwMzA/NDozKSksQj10aGlzLmxlYWRTdXJyb2dhdGUsWT10aGlzLnNlcU9iaixYPS0xLFU9MCxxPTA7Oyl7''@;'; put 'put ''aWYoLTE9PT1YKXtpZihVPT1qLmxlbmd0aClicmVhazt2YXIgZWU9ai5jaGFyQ29kZUF0KFUrKyl9ZWxzZSBlZT1YLFg9LTE7aWYoNTUyOTY8PWVlJiZlZTw1NzM0NClpZihlZTw1NjMyMCl7aWYoLTE9PT1CKXtCPWVlO2NvbnRpbnVlfUI9ZWUsZWU9eH1lbHNlLTEhPT1CPyhlZT02NTUzNisx''@;'; put 'put ''MDI0KihCLTU1Mjk2KSsoZWUtNTYzMjApLEI9LTEpOmVlPXg7ZWxzZS0xIT09QiYmKFg9ZWUsZWU9eCxCPS0xKTt2YXIgdGU9eDtpZih2b2lkIDAhPT1ZJiZlZSE9eCl7dmFyIG9lPVlbZWVdO2lmKCJvYmplY3QiPT10eXBlb2Ygb2Upe1k9b2U7Y29udGludWV9Im51bWJlciI9PXR5cGVvZiBv''@;'; put 'put ''ZT90ZT1vZTpudWxsPT1vZSYmdm9pZCAwIT09KG9lPVlbLTFdKSYmKHRlPW9lLFg9ZWUpLFk9dm9pZCAwfWVsc2UgaWYoZWU+PTApe3ZhciBzZT10aGlzLmVuY29kZVRhYmxlW2VlPj44XTtpZih2b2lkIDAhPT1zZSYmKHRlPXNlWzI1NSZlZV0pLHRlPD1sZSl7WT10aGlzLmVuY29kZVRhYmxl''@;'; put 'put ''U2VxW2xlLXRlXTtjb250aW51ZX1pZih0ZT09eCYmdGhpcy5nYjE4MDMwKXt2YXIgaGU9RSh0aGlzLmdiMTgwMzAudUNoYXJzLGVlKTtpZigtMSE9aGUpe3RlPXRoaXMuZ2IxODAzMC5nYkNoYXJzW2hlXSsoZWUtdGhpcy5nYjE4MDMwLnVDaGFyc1toZV0pLFZbcSsrXT0xMjkrTWF0aC5mbG9v''@;'; put 'put ''cih0ZS8xMjYwMCksdGUlPTEyNjAwLFZbcSsrXT00OCtNYXRoLmZsb29yKHRlLzEyNjApLHRlJT0xMjYwLFZbcSsrXT0xMjkrTWF0aC5mbG9vcih0ZS8xMCksVltxKytdPTQ4Kyh0ZSU9MTApO2NvbnRpbnVlfX19dGU9PT14JiYodGU9dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUpLHRlPDI1''@;'; put 'put ''Nj9WW3ErK109dGU6dGU8NjU1MzY/KFZbcSsrXT10ZT4+OCxWW3ErK109MjU1JnRlKTooVltxKytdPXRlPj4xNixWW3ErK109dGU+PjgmMjU1LFZbcSsrXT0yNTUmdGUpfXJldHVybiB0aGlzLnNlcU9iaj1ZLHRoaXMubGVhZFN1cnJvZ2F0ZT1CLFYuc2xpY2UoMCxxKX0sSS5wcm90b3R5cGUu''@;'; put 'put ''ZW5kPWZ1bmN0aW9uKCl7aWYoLTEhPT10aGlzLmxlYWRTdXJyb2dhdGV8fHZvaWQgMCE9PXRoaXMuc2VxT2JqKXt2YXIgaj1hZS5hbGxvYygxMCksVj0wO2lmKHRoaXMuc2VxT2JqKXt2YXIgQj10aGlzLnNlcU9ialstMV07dm9pZCAwIT09QiYmKEI8MjU2P2pbVisrXT1COihqW1YrK109Qj4+''@;'; put 'put ''OCxqW1YrK109MjU1JkIpKSx0aGlzLnNlcU9iaj12b2lkIDB9cmV0dXJuLTEhPT10aGlzLmxlYWRTdXJyb2dhdGUmJihqW1YrK109dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUsdGhpcy5sZWFkU3Vycm9nYXRlPS0xKSxqLnNsaWNlKDAsVil9fSxJLnByb3RvdHlwZS5maW5kSWR4PUUsay5w''@;'; put 'put ''cm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oail7dmFyIFY9YWUuYWxsb2MoMipqLmxlbmd0aCksQj10aGlzLm5vZGVJZHgsWT10aGlzLnByZXZCdWYsWD10aGlzLnByZXZCdWYubGVuZ3RoLFU9LXRoaXMucHJldkJ1Zi5sZW5ndGg7WD4wJiYoWT1hZS5jb25jYXQoW1ksai5zbGljZSgwLDEwKV0p''@;'; put 'put ''KTtmb3IodmFyIGVlPTAsdGU9MDtlZTxqLmxlbmd0aDtlZSsrKXt2YXIgcSxvZT1lZT49MD9qW2VlXTpZW2VlK1hdO2lmKCEoKHE9dGhpcy5kZWNvZGVUYWJsZXNbQl1bb2VdKT49MCkpaWYocT09PXgpZWU9VSxxPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7ZWxzZSBp''@;'; put 'put ''ZihxPT09bSl7dmFyIHNlPVU+PTA/ai5zbGljZShVLGVlKzEpOlkuc2xpY2UoVStYLGVlKzErWCksaGU9MTI2MDAqKHNlWzBdLTEyOSkrMTI2MCooc2VbMV0tNDgpKzEwKihzZVsyXS0xMjkpKyhzZVszXS00OCksdWU9RSh0aGlzLmdiMTgwMzAuZ2JDaGFycyxoZSk7cT10aGlzLmdiMTgwMzAu''@;'; put 'put ''dUNoYXJzW3VlXStoZS10aGlzLmdiMTgwMzAuZ2JDaGFyc1t1ZV19ZWxzZXtpZihxPD1NKXtCPU0tcTtjb250aW51ZX1pZighKHE8PWxlKSl0aHJvdyBuZXcgRXJyb3IoImljb252LWxpdGUgaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgZGVjb2RpbmcgdGFibGUgdmFsdWUgIitxKyIgYXQgIitC''@;'; put 'put ''KyIvIitvZSk7Zm9yKHZhciBjZT10aGlzLmRlY29kZVRhYmxlU2VxW2xlLXFdLEc9MDtHPGNlLmxlbmd0aC0xO0crKylWW3RlKytdPTI1NSYocT1jZVtHXSksVlt0ZSsrXT1xPj44O3E9Y2VbY2UubGVuZ3RoLTFdfWlmKHE+NjU1MzUpe3EtPTY1NTM2O3ZhciBiPTU1Mjk2K01hdGguZmxvb3Io''@;'; put 'put ''cS8xMDI0KTtWW3RlKytdPTI1NSZiLFZbdGUrK109Yj4+OCxxPTU2MzIwK3ElMTAyNH1WW3RlKytdPTI1NSZxLFZbdGUrK109cT4+OCxCPTAsVT1lZSsxfXJldHVybiB0aGlzLm5vZGVJZHg9Qix0aGlzLnByZXZCdWY9VT49MD9qLnNsaWNlKFUpOlkuc2xpY2UoVStYKSxWLnNsaWNlKDAsdGUp''@;'; put 'put ''LnRvU3RyaW5nKCJ1Y3MyIil9LGsucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2Zvcih2YXIgaj0iIjt0aGlzLnByZXZCdWYubGVuZ3RoPjA7KXtqKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZTt2YXIgVj10aGlzLnByZXZCdWYuc2xpY2UoMSk7dGhpcy5wcmV2QnVmPWFlLmFsbG9jKDApLHRo''@;'; put 'put ''aXMubm9kZUlkeD0wLFYubGVuZ3RoPjAmJihqKz10aGlzLndyaXRlKFYpKX1yZXR1cm4gdGhpcy5ub2RlSWR4PTAsan19LDMyNTU0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXtzaGlmdGppczp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIEYoMjcw''@;'; put 'put ''MTQpfSxlbmNvZGVBZGQ6eyJceGE1Ijo5MiwiXHUyMDNlIjoxMjZ9LGVuY29kZVNraXBWYWxzOlt7ZnJvbTo2MDczNix0bzo2MzgwOH1dfSxjc3NoaWZ0amlzOiJzaGlmdGppcyIsbXNrYW5qaToic2hpZnRqaXMiLHNqaXM6InNoaWZ0amlzIix3aW5kb3dzMzFqOiJzaGlmdGppcyIsbXMzMWo6''@;'; put 'put ''InNoaWZ0amlzIix4c2ppczoic2hpZnRqaXMiLHdpbmRvd3M5MzI6InNoaWZ0amlzIixtczkzMjoic2hpZnRqaXMiLDkzMjoic2hpZnRqaXMiLGNwOTMyOiJzaGlmdGppcyIsZXVjanA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDMxNTMyKX0sZW5jb2RlQWRkOnsi''@;'; put 'put ''XHhhNSI6OTIsIlx1MjAzZSI6MTI2fX0sZ2IyMzEyOiJjcDkzNiIsZ2IyMzEyODA6ImNwOTM2IixnYjIzMTIxOTgwOiJjcDkzNiIsY3NnYjIzMTI6ImNwOTM2Iixjc2lzbzU4Z2IyMzEyODA6ImNwOTM2IixldWNjbjoiY3A5MzYiLHdpbmRvd3M5MzY6ImNwOTM2IixtczkzNjoiY3A5MzYiLDkz''@;'; put 'put ''NjoiY3A5MzYiLGNwOTM2Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRigxMzMzNil9fSxnYms6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDEzMzM2KS5jb25jYXQoRig0NDM0NikpfX0seGdiazoiZ2JrIixpc29pcjU4OiJnYmsiLGdiMTgw''@;'; put 'put ''MzA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDEzMzM2KS5jb25jYXQoRig0NDM0NikpfSxnYjE4MDMwOmZ1bmN0aW9uKCl7cmV0dXJuIEYoMzYyNTgpfSxlbmNvZGVTa2lwVmFsczpbMTI4XSxlbmNvZGVBZGQ6eyJcdTIwYWMiOjQxNjk5fX0sY2hpbmVzZToiZ2Ix''@;'; put 'put ''ODAzMCIsd2luZG93czk0OToiY3A5NDkiLG1zOTQ5OiJjcDk0OSIsOTQ5OiJjcDk0OSIsY3A5NDk6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDc3MzQ4KX19LGNzZXVja3I6ImNwOTQ5Iixjc2tzYzU2MDExOTg3OiJjcDk0OSIsZXVja3I6ImNwOTQ5Iixpc29pcjE0''@;'; put 'put ''OToiY3A5NDkiLGtvcmVhbjoiY3A5NDkiLGtzYzU2MDExOTg3OiJjcDk0OSIsa3NjNTYwMTE5ODk6ImNwOTQ5Iixrc2M1NjAxOiJjcDk0OSIsd2luZG93czk1MDoiY3A5NTAiLG1zOTUwOiJjcDk1MCIsOTUwOiJjcDk1MCIsY3A5NTA6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBGKDc0Mjg0KX19LGJpZzU6ImJpZzVoa3NjcyIsYmlnNWhrc2NzOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRig3NDI4NCkuY29uY2F0KEYoNjM0ODApKX0sZW5jb2RlU2tpcFZhbHM6WzQxNjc2XX0sY25iaWc1OiJiaWc1aGtzY3MiLGNzYmlnNToiYmlnNWhr''@;'; put 'put ''c2NzIix4eGJpZzU6ImJpZzVoa3NjcyJ9fSw0NDY1NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Zm9yKHZhciBhZT1bRigyNzY0OCksRig5Mjg0NCksRig0MzI4MCksRig3ODM1NCksRig3MTc2NCksRig2NDc3MyksRigyMDUwMyksRig1NTgzMyksRigzMjU1NCldLHg9MDt4PGFlLmxlbmd0''@;'; put 'put ''aDt4Kyspe3ZhciBtPWFlW3hdO2Zvcih2YXIgbGUgaW4gbSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxsZSkmJihJZVtsZV09bVtsZV0pfX0sMjc2NDg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geChLLEkp''@;'; put 'put ''e3RoaXMuZW5jPUsuZW5jb2RpbmdOYW1lLHRoaXMuYm9tQXdhcmU9Sy5ib21Bd2FyZSwiYmFzZTY0Ij09PXRoaXMuZW5jP3RoaXMuZW5jb2Rlcj1POiJjZXN1OCI9PT10aGlzLmVuYyYmKHRoaXMuZW5jPSJ1dGY4Iix0aGlzLmVuY29kZXI9UiwiXHV7MWY0YTl9IiE9PWFlLmZyb20oImVkYTBi''@;'; put 'put ''ZGVkYjJhOSIsImhleCIpLnRvU3RyaW5nKCkmJih0aGlzLmRlY29kZXI9eix0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1JLmRlZmF1bHRDaGFyVW5pY29kZSkpfWF0LmV4cG9ydHM9e3V0Zjg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LGNlc3U4Ont0eXBlOiJfaW50ZXJuYWwiLGJv''@;'; put 'put ''bUF3YXJlOiEwfSx1bmljb2RlMTF1dGY4OiJ1dGY4Iix1Y3MyOnt0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1dGYxNmxlOiJ1Y3MyIixiaW5hcnk6e3R5cGU6Il9pbnRlcm5hbCJ9LGJhc2U2NDp7dHlwZToiX2ludGVybmFsIn0saGV4Ont0eXBlOiJfaW50ZXJuYWwifSxfaW50ZXJu''@;'; put 'put ''YWw6eH0seC5wcm90b3R5cGUuZW5jb2Rlcj1NLHgucHJvdG90eXBlLmRlY29kZXI9bGU7dmFyIG09Rig3MjAyNCkucztmdW5jdGlvbiBsZShLLEkpe20uY2FsbCh0aGlzLEkuZW5jKX1mdW5jdGlvbiBNKEssSSl7dGhpcy5lbmM9SS5lbmN9ZnVuY3Rpb24gTyhLLEkpe3RoaXMucHJldlN0cj0i''@;'; put 'put ''In1mdW5jdGlvbiBSKEssSSl7fWZ1bmN0aW9uIHooSyxJKXt0aGlzLmFjYz0wLHRoaXMuY29udEJ5dGVzPTAsdGhpcy5hY2NCeXRlcz0wLHRoaXMuZGVmYXVsdENoYXJVbmljb2RlPUkuZGVmYXVsdENoYXJVbmljb2RlfW0ucHJvdG90eXBlLmVuZHx8KG0ucHJvdG90eXBlLmVuZD1mdW5jdGlv''@;'; put 'put ''bigpe30pLGxlLnByb3RvdHlwZT1tLnByb3RvdHlwZSxNLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtyZXR1cm4gYWUuZnJvbShLLHRoaXMuZW5jKX0sTS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXt2YXIgST0oSz10aGlzLnBy''@;'; put 'put ''ZXZTdHIrSykubGVuZ3RoLUsubGVuZ3RoJTQ7cmV0dXJuIHRoaXMucHJldlN0cj1LLnNsaWNlKEkpLEs9Sy5zbGljZSgwLEkpLGFlLmZyb20oSywiYmFzZTY0Iil9LE8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiBhZS5mcm9tKHRoaXMucHJldlN0ciwiYmFzZTY0Iil9LFIucHJv''@;'; put 'put ''dG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2Zvcih2YXIgST1hZS5hbGxvYygzKksubGVuZ3RoKSxrPTAsRT0wO0U8Sy5sZW5ndGg7RSsrKXt2YXIgaj1LLmNoYXJDb2RlQXQoRSk7ajwxMjg/SVtrKytdPWo6ajwyMDQ4PyhJW2srK109MTkyKyhqPj4+NiksSVtrKytdPTEyOCsoNjMmaikpOihJ''@;'; put 'put ''W2srK109MjI0KyhqPj4+MTIpLElbaysrXT0xMjgrKGo+Pj42JjYzKSxJW2srK109MTI4Kyg2MyZqKSl9cmV0dXJuIEkuc2xpY2UoMCxrKX0sUi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSx6LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtmb3IodmFyIEk9dGhpcy5hY2Msaz10aGlz''@;'; put 'put ''LmNvbnRCeXRlcyxFPXRoaXMuYWNjQnl0ZXMsaj0iIixWPTA7VjxLLmxlbmd0aDtWKyspe3ZhciBCPUtbVl07MTI4IT0oMTkyJkIpPyhrPjAmJihqKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSxrPTApLEI8MTI4P2orPVN0cmluZy5mcm9tQ2hhckNvZGUoQik6QjwyMjQ/KEk9MzEmQixrPTEs''@;'; put 'put ''RT0xKTpCPDI0MD8oST0xNSZCLGs9MixFPTEpOmorPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlKTprPjA/KEk9STw8Nnw2MyZCLEUrKywwPT0tLWsmJihqKz0yPT09RSYmSTwxMjgmJkk+MHx8Mz09PUUmJkk8MjA0OD90aGlzLmRlZmF1bHRDaGFyVW5pY29kZTpTdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''KEkpKSk6ais9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGV9cmV0dXJuIHRoaXMuYWNjPUksdGhpcy5jb250Qnl0ZXM9ayx0aGlzLmFjY0J5dGVzPUUsan0sei5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIEs9MDtyZXR1cm4gdGhpcy5jb250Qnl0ZXM+MCYmKEsrPXRoaXMuZGVmYXVsdENo''@;'; put 'put ''YXJVbmljb2RlKSxLfX0sNzE3NjQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geChNLE8pe2lmKCFNKXRocm93IG5ldyBFcnJvcigiU0JDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighTS5jaGFyc3x8MTI4''@;'; put 'put ''IT09TS5jaGFycy5sZW5ndGgmJjI1NiE9PU0uY2hhcnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgJyIrTS50eXBlKyInIGhhcyBpbmNvcnJlY3QgJ2NoYXJzJyAobXVzdCBiZSBvZiBsZW4gMTI4IG9yIDI1NikiKTtpZigxMjg9PT1NLmNoYXJzLmxlbmd0aCl7Zm9yKHZhciBS''@;'; put 'put ''PSIiLHo9MDt6PDEyODt6KyspUis9U3RyaW5nLmZyb21DaGFyQ29kZSh6KTtNLmNoYXJzPVIrTS5jaGFyc310aGlzLmRlY29kZUJ1Zj1hZS5mcm9tKE0uY2hhcnMsInVjczIiKTt2YXIgSz1hZS5hbGxvYyg2NTUzNixPLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtmb3Io''@;'; put 'put ''ej0wO3o8TS5jaGFycy5sZW5ndGg7eisrKUtbTS5jaGFycy5jaGFyQ29kZUF0KHopXT16O3RoaXMuZW5jb2RlQnVmPUt9ZnVuY3Rpb24gbShNLE8pe3RoaXMuZW5jb2RlQnVmPU8uZW5jb2RlQnVmfWZ1bmN0aW9uIGxlKE0sTyl7dGhpcy5kZWNvZGVCdWY9Ty5kZWNvZGVCdWZ9SWUuX3NiY3M9''@;'; put 'put ''eCx4LnByb3RvdHlwZS5lbmNvZGVyPW0seC5wcm90b3R5cGUuZGVjb2Rlcj1sZSxtLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihNKXtmb3IodmFyIE89YWUuYWxsb2MoTS5sZW5ndGgpLFI9MDtSPE0ubGVuZ3RoO1IrKylPW1JdPXRoaXMuZW5jb2RlQnVmW00uY2hhckNvZGVBdChSKV07cmV0''@;'; put 'put ''dXJuIE99LG0ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sbGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKE0pe2Zvcih2YXIgTz10aGlzLmRlY29kZUJ1ZixSPWFlLmFsbG9jKDIqTS5sZW5ndGgpLHo9MCxLPTAsST0wO0k8TS5sZW5ndGg7SSsrKVJbSz0yKkldPU9bej0yKk1bSV1dLFJb''@;'; put 'put ''SysxXT1PW3orMV07cmV0dXJuIFIudG9TdHJpbmcoInVjczIiKX0sbGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe319LDIwNTAzOmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9ezQzNzoiY3A0MzciLDczNzoiY3A3MzciLDc3NToiY3A3NzUiLDg1MDoiY3A4NTAiLDg1MjoiY3A4NTIi''@;'; put 'put ''LDg1NToiY3A4NTUiLDg1NjoiY3A4NTYiLDg1NzoiY3A4NTciLDg1ODoiY3A4NTgiLDg2MDoiY3A4NjAiLDg2MToiY3A4NjEiLDg2MjoiY3A4NjIiLDg2MzoiY3A4NjMiLDg2NDoiY3A4NjQiLDg2NToiY3A4NjUiLDg2NjoiY3A4NjYiLDg2OToiY3A4NjkiLDg3NDoid2luZG93czg3NCIsOTIy''@;'; put 'put ''OiJjcDkyMiIsMTA0NjoiY3AxMDQ2IiwxMTI0OiJjcDExMjQiLDExMjU6ImNwMTEyNSIsMTEyOToiY3AxMTI5IiwxMTMzOiJjcDExMzMiLDExNjE6ImNwMTE2MSIsMTE2MjoiY3AxMTYyIiwxMTYzOiJjcDExNjMiLDEyNTA6IndpbmRvd3MxMjUwIiwxMjUxOiJ3aW5kb3dzMTI1MSIsMTI1Mjoi''@;'; put 'put ''d2luZG93czEyNTIiLDEyNTM6IndpbmRvd3MxMjUzIiwxMjU0OiJ3aW5kb3dzMTI1NCIsMTI1NToid2luZG93czEyNTUiLDEyNTY6IndpbmRvd3MxMjU2IiwxMjU3OiJ3aW5kb3dzMTI1NyIsMTI1ODoid2luZG93czEyNTgiLDI4NTkxOiJpc284ODU5MSIsMjg1OTI6Imlzbzg4NTkyIiwyODU5''@;'; put 'put ''MzoiaXNvODg1OTMiLDI4NTk0OiJpc284ODU5NCIsMjg1OTU6Imlzbzg4NTk1IiwyODU5NjoiaXNvODg1OTYiLDI4NTk3OiJpc284ODU5NyIsMjg1OTg6Imlzbzg4NTk4IiwyODU5OToiaXNvODg1OTkiLDI4NjAwOiJpc284ODU5MTAiLDI4NjAxOiJpc284ODU5MTEiLDI4NjAzOiJpc284ODU5''@;'; put 'put ''MTMiLDI4NjA0OiJpc284ODU5MTQiLDI4NjA1OiJpc284ODU5MTUiLDI4NjA2OiJpc284ODU5MTYiLHdpbmRvd3M4NzQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1''@;'; put 'put ''MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUy''@;'; put 'put ''M1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1''@;'; put 'put ''YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LHdpbjg3NDoid2luZG93czg3NCIsY3A4NzQ6IndpbmRvd3M4NzQiLHdpbmRvd3MxMjUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAz''@;'; put 'put ''MFx1MDE2MFx1MjAzOVx1MDE1YVx1MDE2NFx1MDE3ZFx1MDE3OVx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDE2MVx1MjAzYVx1MDE1Ylx1MDE2NVx1MDE3ZVx1MDE3YVx4YTBcdTAyYzdcdTAyZDhcdTAxNDFceGE0XHUwMTA0''@;'; put 'put ''XHhhNlx4YTdceGE4XHhhOVx1MDE1ZVx4YWJceGFjXHhhZFx4YWVcdTAxN2JceGIwXHhiMVx1MDJkYlx1MDE0Mlx4YjRceGI1XHhiNlx4YjdceGI4XHUwMTA1XHUwMTVmXHhiYlx1MDEzZFx1MDJkZFx1MDEzZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4Yzdc''@;'; put 'put ''dTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBk''@;'; put 'put ''XHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSx3aW4xMjUwOiJ3aW5kb3dzMTI1MCIsY3AxMjUwOiJ3aW5kb3dzMTI1MCIsd2lu''@;'; put 'put ''ZG93czEyNTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUy''@;'; put 'put ''MDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1''@;'; put 'put ''XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUw''@;'; put 'put ''NDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNk''@;'; put 'put ''XHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sd2luMTI1MToid2luZG93czEyNTEiLGNwMTI1MToid2luZG93czEyNTEiLHdpbmRvd3MxMjUy''@;'; put 'put ''Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAx''@;'; put 'put ''NFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJj''@;'; put 'put ''XHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVc''@;'; put 'put ''eGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHdpbjEyNTI6IndpbmRvd3MxMjUyIixjcDEyNTI6IndpbmRvd3MxMjUyIix3aW5kb3dzMTI1Mzp7dHlw''@;'; put 'put ''ZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZm''@;'; put 'put ''ZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwMzg1XHUwMzg2XHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHhiNVx4YjZceGI3XHUwMzg4XHUwMzg5XHUw''@;'; put 'put ''MzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAz''@;'; put 'put ''YTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFc''@;'; put 'put ''dTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQifSx3aW4xMjUzOiJ3aW5kb3dzMTI1MyIsY3AxMjUzOiJ3aW5kb3dzMTI1MyIsd2luZG93czEyNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUy''@;'; put 'put ''MGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNh''@;'; put 'put ''XHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJc''@;'; put 'put ''eGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVh''@;'; put 'put ''XHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIn0sd2luMTI1NDoid2luZG93czEyNTQiLGNwMTI1NDoid2luZG93czEyNTQiLHdpbmRvd3MxMjU1Ont0eXBlOiJfc2JjcyIsY2hh''@;'; put 'put ''cnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZm''@;'; put 'put ''ZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1''@;'; put 'put ''YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdTA1YmFcdTA1YmJcdTA1YmNcdTA1YmRcdTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1''@;'; put 'put ''ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQifSx3aW4xMjU1OiJ3aW5kb3dzMTI1NSIsY3AxMjU1OiJ3aW5kb3dzMTI1NSIsd2luZG93czEyNTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHUwNjdlXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2''@;'; put 'put ''XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwNjc5XHUyMDM5XHUwMTUyXHUwNjg2XHUwNjk4XHUwNjg4XHUwNmFmXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNmE5XHUyMTIyXHUwNjkxXHUyMDNhXHUwMTUzXHUyMDBjXHUyMDBkXHUwNmJhXHhhMFx1MDYw''@;'; put 'put ''Y1x4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHUwNmJlXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHUwNjFiXHhiYlx4YmNceGJkXHhiZVx1MDYxZlx1MDZjMVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1''@;'; put 'put ''MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx4ZDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNceGUwXHUwNjQ0XHhl''@;'; put 'put ''Mlx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx4ZTdceGU4XHhlOVx4ZWFceGViXHUwNjQ5XHUwNjRhXHhlZVx4ZWZcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVceGY0XHUwNjRmXHUwNjUwXHhmN1x1MDY1MVx4ZjlcdTA2NTJceGZiXHhmY1x1MjAwZVx1MjAwZlx1MDZkMiJ9LHdpbjEyNTY6Indp''@;'; put 'put ''bmRvd3MxMjU2IixjcDEyNTY6IndpbmRvd3MxMjU2Iix3aW5kb3dzMTI1Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1''@;'; put 'put ''MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFc''@;'; put 'put ''eGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1''@;'; put 'put ''XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUw''@;'; put 'put ''MTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkifSx3aW4xMjU3OiJ3aW5kb3dzMTI1NyIsY3AxMjU3OiJ3aW5kb3dzMTI1NyIsd2luZG93czEyNTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVm''@;'; put 'put ''ZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUz''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJc''@;'; put 'put ''eGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5''@;'; put 'put ''XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LHdpbjEyNTg6IndpbmRvd3MxMjU4IixjcDEyNTg6IndpbmRvd3MxMjU4Iixpc284ODU5MTp7dHlwZToiX3Ni''@;'; put 'put ''Y3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4''@;'; put 'put ''YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhj''@;'; put 'put ''Zlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4''@;'; put 'put ''XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGNwMjg1OTE6Imlzbzg4NTkxIixpc284ODU5Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRc''@;'; put 'put ''eDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAyZDhcdTAxNDFceGE0XHUwMTNkXHUwMTVhXHhhN1x4YThcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNzlceGFkXHUwMTdkXHUwMTdiXHhiMFx1MDEwNVx1MDJkYlx1MDE0Mlx4YjRcdTAxM2VcdTAx''@;'; put 'put ''NWJcdTAyYzdceGI4XHUwMTYxXHUwMTVmXHUwMTY1XHUwMTdhXHUwMmRkXHUwMTdlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1''@;'; put 'put ''MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhkYVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2''@;'; put 'put ''XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAxNzFceGZjXHhmZFx1MDE2M1x1MDJkOSJ9LGNwMjg1OTI6Imlzbzg4NTkyIixpc284ODU5Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5''@;'; put 'put ''MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMjZcdTAyZDhceGEzXHhhNFx1ZmZmZFx1MDEyNFx4YTdceGE4XHUwMTMwXHUwMTVlXHUwMTFlXHUwMTM0XHhhZFx1ZmZmZFx1MDE3Ylx4YjBcdTAxMjdceGIyXHhiM1x4''@;'; put 'put ''YjRceGI1XHUwMTI1XHhiN1x4YjhcdTAxMzFcdTAxNWZcdTAxMWZcdTAxMzVceGJkXHVmZmZkXHUwMTdjXHhjMFx4YzFceGMyXHVmZmZkXHhjNFx1MDEwYVx1MDEwOFx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1ZmZmZFx4ZDFceGQyXHhkM1x4ZDRcdTAxMjBceGQ2XHhk''@;'; put 'put ''N1x1MDExY1x4ZDlceGRhXHhkYlx4ZGNcdTAxNmNcdTAxNWNceGRmXHhlMFx4ZTFceGUyXHVmZmZkXHhlNFx1MDEwYlx1MDEwOVx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1ZmZmZFx4ZjFceGYyXHhmM1x4ZjRcdTAxMjFceGY2XHhmN1x1MDExZFx4ZjlceGZhXHhmYlx4''@;'; put 'put ''ZmNcdTAxNmRcdTAxNWRcdTAyZDkifSxjcDI4NTkzOiJpc284ODU5MyIsaXNvODg1OTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZc''@;'; put 'put ''eDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTM4XHUwMTU2XHhhNFx1MDEyOFx1MDEzYlx4YTdceGE4XHUwMTYwXHUwMTEyXHUwMTIyXHUwMTY2XHhhZFx1MDE3ZFx4YWZceGIwXHUwMTA1XHUwMmRiXHUwMTU3XHhiNFx1MDEyOVx1MDEzY1x1MDJjN1x4''@;'; put 'put ''YjhcdTAxNjFcdTAxMTNcdTAxMjNcdTAxNjdcdTAxNGFcdTAxN2VcdTAxNGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHUwMTJhXHUwMTEwXHUwMTQ1XHUwMTRjXHUwMTM2XHhkNFx4ZDVceGQ2XHhkN1x4ZDhc''@;'; put 'put ''dTAxNzJceGRhXHhkYlx4ZGNcdTAxNjhcdTAxNmFceGRmXHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx1MDEyYlx1MDExMVx1MDE0Nlx1MDE0ZFx1MDEzN1x4ZjRceGY1XHhmNlx4ZjdceGY4XHUwMTczXHhmYVx4''@;'; put 'put ''ZmJceGZjXHUwMTY5XHUwMTZiXHUwMmQ5In0sY3AyODU5NDoiaXNvODg1OTQiLGlzbzg4NTk1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVc''@;'; put 'put ''eDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQwM1x1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1MDQwOFx1MDQwOVx1MDQwYVx1MDQwYlx1MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0''@;'; put 'put ''MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBc''@;'; put 'put ''dTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0''@;'; put 'put ''NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTIxMTZcdTA0NTFcdTA0NTJcdTA0NTNcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFcdTA0NWJcdTA0NWNceGE3XHUwNDVlXHUwNDVmIn0sY3AyODU5NToiaXNvODg1OTUiLGlzbzg4NTk2Ont0eXBlOiJfc2JjcyIsY2hhcnM6''@;'; put 'put ''Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MGNceGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFiXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjFmXHVmZmZkXHUwNjIxXHUw''@;'; put 'put ''NjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUwNjUxXHUwNjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sY3AyODU5NjoiaXNvODg1OTYiLGlzbzg4NTk3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4''@;'; put 'put ''OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MjAxOFx1MjAxOVx4YTNcdTIwYWNcdTIwYWZceGE2XHhhN1x4YThceGE5XHUwMzdhXHhhYlx4YWNceGFkXHVmZmZkXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx1MDM4NVx1MDM4''@;'; put 'put ''Nlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1''@;'; put 'put ''MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNi''@;'; put 'put ''ZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCJ9LGNwMjg1OTc6Imlzbzg4NTk3Iixpc284ODU5ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4''@;'; put 'put ''ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdc''@;'; put 'put ''eGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxN1x1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVk''@;'; put 'put ''OFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCJ9LGNwMjg1OTg6Imlzbzg4NTk4Iixpc284''@;'; put 'put ''ODU5OTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhh''@;'; put 'put ''Mlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNi''@;'; put 'put ''XHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJc''@;'; put 'put ''eGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiJ9LGNwMjg1OTk6Imlzbzg4NTk5Iixpc284ODU5MTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRc''@;'; put 'put ''eDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTEyXHUwMTIyXHUwMTJhXHUwMTI4XHUwMTM2XHhhN1x1MDEzYlx1MDExMFx1MDE2MFx1MDE2Nlx1MDE3ZFx4YWRcdTAxNmFcdTAxNGFceGIw''@;'; put 'put ''XHUwMTA1XHUwMTEzXHUwMTIzXHUwMTJiXHUwMTI5XHUwMTM3XHhiN1x1MDEzY1x1MDExMVx1MDE2MVx1MDE2N1x1MDE3ZVx1MjAxNVx1MDE2Ylx1MDE0Ylx1MDEwMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx1MDEyZVx1MDEwY1x4YzlcdTAxMThceGNiXHUwMTE2XHhjZFx4Y2VceGNmXHhk''@;'; put 'put ''MFx1MDE0NVx1MDE0Y1x4ZDNceGQ0XHhkNVx4ZDZcdTAxNjhceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHUwMTAxXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHUwMTJmXHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMTdceGVkXHhlZVx4ZWZceGYwXHUwMTQ2XHUwMTRkXHhmM1x4''@;'; put 'put ''ZjRceGY1XHhmNlx1MDE2OVx4ZjhcdTAxNzNceGZhXHhmYlx4ZmNceGZkXHhmZVx1MDEzOCJ9LGNwMjg2MDA6Imlzbzg4NTkxMCIsaXNvODg1OTExOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4''@;'; put 'put ''ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1''@;'; put 'put ''MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUy''@;'; put 'put ''Ylx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1''@;'; put 'put ''MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg2MDE6Imlzbzg4''@;'; put 'put ''NTkxMSIsaXNvODg1OTEzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlm''@;'; put 'put ''XHhhMFx1MjAxZFx4YTJceGEzXHhhNFx1MjAxZVx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNcdTIwMWNceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhj''@;'; put 'put ''NFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAx''@;'; put 'put ''XHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTIwMTkifSxjcDI4''@;'; put 'put ''NjAzOiJpc284ODU5MTMiLGlzbzg4NTkxNDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4''@;'; put 'put ''OWRceDllXHg5Zlx4YTBcdTFlMDJcdTFlMDNceGEzXHUwMTBhXHUwMTBiXHUxZTBhXHhhN1x1MWU4MFx4YTlcdTFlODJcdTFlMGJcdTFlZjJceGFkXHhhZVx1MDE3OFx1MWUxZVx1MWUxZlx1MDEyMFx1MDEyMVx1MWU0MFx1MWU0MVx4YjZcdTFlNTZcdTFlODFcdTFlNTdcdTFlODNcdTFlNjBc''@;'; put 'put ''dTFlZjNcdTFlODRcdTFlODVcdTFlNjFceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTc0XHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHUxZTZhXHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTc2XHhkZlx4ZTBceGUx''@;'; put 'put ''XHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNzVceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZcdTFlNmJceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxNzdceGZmIn0sY3AyODYwNDoiaXNvODg1OTE0Iixpc284ODU5MTU6e3R5cGU6''@;'; put 'put ''Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHUyMGFj''@;'; put 'put ''XHhhNVx1MDE2MFx4YTdcdTAxNjFceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3ZFx4YjVceGI2XHhiN1x1MDE3ZVx4YjlceGJhXHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhj''@;'; put 'put ''YVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYz''@;'; put 'put ''XHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sY3AyODYwNToiaXNvODg1OTE1Iixpc284ODU5MTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4''@;'; put 'put ''Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMTA1XHUwMTQxXHUyMGFjXHUyMDFlXHUwMTYwXHhhN1x1MDE2MVx4YTlcdTAyMThceGFiXHUwMTc5XHhhZFx1MDE3YVx1MDE3Ylx4YjBceGIxXHUwMTBj''@;'; put 'put ''XHUwMTQyXHUwMTdkXHUyMDFkXHhiNlx4YjdcdTAxN2VcdTAxMGRcdTAyMTlceGJiXHUwMTUyXHUwMTUzXHUwMTc4XHUwMTdjXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx1MDEwNlx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMTBcdTAxNDNceGQyXHhkM1x4ZDRc''@;'; put 'put ''dTAxNTBceGQ2XHUwMTVhXHUwMTcwXHhkOVx4ZGFceGRiXHhkY1x1MDExOFx1MDIxYVx4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHUwMTA3XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExMVx1MDE0NFx4ZjJceGYzXHhmNFx1MDE1MVx4ZjZcdTAxNWJcdTAx''@;'; put 'put ''NzFceGY5XHhmYVx4ZmJceGZjXHUwMTE5XHUwMjFiXHhmZiJ9LGNwMjg2MDY6Imlzbzg4NTkxNiIsY3A0Mzc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRc''@;'; put 'put ''eGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2''@;'; put 'put ''XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUy''@;'; put 'put ''NTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIy''@;'; put 'put ''MjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm00Mzc6ImNwNDM3Iixjc2libTQzNzoiY3A0MzciLGNwNzM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDM5MVx1MDM5Mlx1MDM5''@;'; put 'put ''M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1''@;'; put 'put ''MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2''@;'; put 'put ''M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1''@;'; put 'put ''MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4''@;'; put 'put ''Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTczNzoiY3A3MzciLGNzaWJtNzM3OiJjcDczNyIsY3A3NzU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwMTA2XHhmY1x4ZTlcdTAxMDFceGU0''@;'; put 'put ''XHUwMTIzXHhlNVx1MDEwN1x1MDE0Mlx1MDExM1x1MDE1Nlx1MDE1N1x1MDEyYlx1MDE3OVx4YzRceGM1XHhjOVx4ZTZceGM2XHUwMTRkXHhmNlx1MDEyMlx4YTJcdTAxNWFcdTAxNWJceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdceGE0XHUwMTAwXHUwMTJhXHhmM1x1MDE3Ylx1MDE3Y1x1MDE3''@;'; put 'put ''YVx1MjAxZFx4YTZceGE5XHhhZVx4YWNceGJkXHhiY1x1MDE0MVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwMTA0XHUwMTBjXHUwMTE4XHUwMTE2XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTJlXHUwMTYwXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFj''@;'; put 'put ''XHUyNTAwXHUyNTNjXHUwMTcyXHUwMTZhXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUwMTdkXHUwMTA1XHUwMTBkXHUwMTE5XHUwMTE3XHUwMTJmXHUwMTYxXHUwMTczXHUwMTZiXHUwMTdlXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUy''@;'; put 'put ''NTgwXHhkM1x4ZGZcdTAxNGNcdTAxNDNceGY1XHhkNVx4YjVcdTAxNDRcdTAxMzZcdTAxMzdcdTAxM2JcdTAxM2NcdTAxNDZcdTAxMTJcdTAxNDVcdTIwMTlceGFkXHhiMVx1MjAxY1x4YmVceGI2XHhhN1x4ZjdcdTIwMWVceGIwXHUyMjE5XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxp''@;'; put 'put ''Ym03NzU6ImNwNzc1Iixjc2libTc3NToiY3A3NzUiLGNwODUwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhk''@;'; put 'put ''Y1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1''@;'; put 'put ''XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhj''@;'; put 'put ''Y1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1MDoiY3A4NTAiLGNzaWJtODUw''@;'; put 'put ''OiJjcDg1MCIsY3A4NTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRcdTAxNmZcdTAxMDdceGU3XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNkXHUwMTNlXHUwMTVhXHUwMTViXHhk''@;'; put 'put ''Nlx4ZGNcdTAxNjRcdTAxNjVcdTAxNDFceGQ3XHUwMTBkXHhlMVx4ZWRceGYzXHhmYVx1MDEwNFx1MDEwNVx1MDE3ZFx1MDE3ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHUwMTFhXHUwMTVl''@;'; put 'put ''XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTdiXHUwMTdjXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1MDExMFx1MDEwZVx4Y2JcdTAxMGZc''@;'; put 'put ''dTAxNDdceGNkXHhjZVx1MDExYlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDE2Mlx1MDE2ZVx1MjU4MFx4ZDNceGRmXHhkNFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRceGFkXHUwMmRkXHUwMmRiXHUwMmM3''@;'; put 'put ''XHUwMmQ4XHhhN1x4ZjdceGI4XHhiMFx4YThcdTAyZDlcdTAxNzFcdTAxNThcdTAxNTlcdTI1YTBceGEwIn0saWJtODUyOiJjcDg1MiIsY3NpYm04NTI6ImNwODUyIixjcDg1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0NTJcdTA0MDJcdTA0NTNcdTA0MDNcdTA0NTFcdTA0MDFcdTA0NTRc''@;'; put 'put ''dTA0MDRcdTA0NTVcdTA0MDVcdTA0NTZcdTA0MDZcdTA0NTdcdTA0MDdcdTA0NThcdTA0MDhcdTA0NTlcdTA0MDlcdTA0NWFcdTA0MGFcdTA0NWJcdTA0MGJcdTA0NWNcdTA0MGNcdTA0NWVcdTA0MGVcdTA0NWZcdTA0MGZcdTA0NGVcdTA0MmVcdTA0NGFcdTA0MmFcdTA0MzBcdTA0MTBcdTA0''@;'; put 'put ''MzFcdTA0MTFcdTA0NDZcdTA0MjZcdTA0MzRcdTA0MTRcdTA0MzVcdTA0MTVcdTA0NDRcdTA0MjRcdTA0MzNcdTA0MTNceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDQ0NVx1MDQyNVx1MDQzOFx1MDQxOFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDQzOVx1MDQx''@;'; put 'put ''OVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDQzYVx1MDQxYVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTA0M2JcdTA0MWJcdTA0M2NcdTA0MWNcdTA0M2RcdTA0MWRcdTA0M2VcdTA0MWVcdTA0M2ZcdTI1MThcdTI1''@;'; put 'put ''MGNcdTI1ODhcdTI1ODRcdTA0MWZcdTA0NGZcdTI1ODBcdTA0MmZcdTA0NDBcdTA0MjBcdTA0NDFcdTA0MjFcdTA0NDJcdTA0MjJcdTA0NDNcdTA0MjNcdTA0MzZcdTA0MTZcdTA0MzJcdTA0MTJcdTA0NGNcdTA0MmNcdTIxMTZceGFkXHUwNDRiXHUwNDJiXHUwNDM3XHUwNDE3XHUwNDQ4XHUw''@;'; put 'put ''NDI4XHUwNDRkXHUwNDJkXHUwNDQ5XHUwNDI5XHUwNDQ3XHUwNDI3XHhhN1x1MjVhMFx4YTAifSxpYm04NTU6ImNwODU1Iixjc2libTg1NToiY3A4NTUiLGNwODU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1''@;'; put 'put ''MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx4YTNcdWZmZmRceGQ3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhZVx4YWNceGJkXHhiY1x1ZmZmZFx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJj''@;'; put 'put ''XHUyNTFjXHUyNTAwXHUyNTNjXHVmZmZkXHVmZmZkXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZcdWZmZmRc''@;'; put 'put ''dTI1ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9''@;'; put 'put ''LGlibTg1NjoiY3A4NTYiLGNzaWJtODU2OiJjcDg1NiIsY3A4NTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBc''@;'; put 'put ''eGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1''@;'; put 'put ''MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhc''@;'; put 'put ''dTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU3OiJj''@;'; put 'put ''cDg1NyIsY3NpYm04NTc6ImNwODU3IixjcDg1ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhh''@;'; put 'put ''M1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1''@;'; put 'put ''MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUyMGFjXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBc''@;'; put 'put ''eGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTg6ImNwODU4Iixjc2libTg1ODoiY3A4NTgi''@;'; put 'put ''LGNwODYwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGUzXHhlMFx4YzFceGU3XHhlYVx4Y2FceGU4XHhjZFx4ZDRceGVjXHhjM1x4YzJceGM5XHhjMFx4YzhceGY0XHhmNVx4ZjJceGRhXHhmOVx4Y2NceGQ1XHhkY1x4YTJceGEzXHhkOVx1MjBhN1x4ZDNceGUxXHhl''@;'; put 'put ''ZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGQyXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0''@;'; put 'put ''XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUy''@;'; put 'put ''NThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3''@;'; put 'put ''XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjA6ImNwODYwIixjc2libTg2MDoiY3A4NjAiLGNwODYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZc''@;'; put 'put ''eGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1''@;'; put 'put ''MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2''@;'; put 'put ''NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1''@;'; put 'put ''XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYxOiJjcDg2MSIsY3NpYm04NjE6ImNwODYxIixjcDg2Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFc''@;'; put 'put ''dTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFceGEyXHhhM1x4YTVcdTIw''@;'; put 'put ''YTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJc''@;'; put 'put ''dTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1''@;'; put 'put ''MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUy''@;'; put 'put ''MjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MjoiY3A4NjIiLGNzaWJtODYyOiJjcDg2MiIsY3A4NjM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4YzJceGUwXHhiNlx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MjAxN1x4''@;'; put 'put ''YzBceGE3XHhjOVx4YzhceGNhXHhmNFx4Y2JceGNmXHhmYlx4ZjlceGE0XHhkNFx4ZGNceGEyXHhhM1x4ZDlceGRiXHUwMTkyXHhhNlx4YjRceGYzXHhmYVx4YThceGI4XHhiM1x4YWZceGNlXHUyMzEwXHhhY1x4YmRceGJjXHhiZVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUy''@;'; put 'put ''NTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3''@;'; put 'put ''XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRc''@;'; put 'put ''dTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjM6ImNwODYzIixjc2libTg2MzoiY3A4NjMiLGNwODY0Ont0eXBlOiJfc2JjcyIsY2hh''@;'; put 'put ''cnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJFx1MDY2YSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdI''@;'; put 'put ''SUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGIwXHhiN1x1MjIxOVx1MjIxYVx1MjU5Mlx1MjUwMFx1MjUwMlx1MjUzY1x1MjUyNFx1MjUyY1x1MjUxY1x1MjUzNFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1MDNiMlx1MjIxZVx1''@;'; put 'put ''MDNjNlx4YjFceGJkXHhiY1x1MjI0OFx4YWJceGJiXHVmZWY3XHVmZWY4XHVmZmZkXHVmZmZkXHVmZWZiXHVmZWZjXHVmZmZkXHhhMFx4YWRcdWZlODJceGEzXHhhNFx1ZmU4NFx1ZmZmZFx1ZmZmZFx1ZmU4ZVx1ZmU4Zlx1ZmU5NVx1ZmU5OVx1MDYwY1x1ZmU5ZFx1ZmVhMVx1ZmVhNVx1MDY2''@;'; put 'put ''MFx1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmVkMVx1MDYxYlx1ZmViMVx1ZmViNVx1ZmViOVx1MDYxZlx4YTJcdWZlODBcdWZlODFcdWZlODNcdWZlODVcdWZlY2FcdWZlOGJcdWZlOGRcdWZlOTFcdWZlOTNcdWZlOTdcdWZlOWJcdWZl''@;'; put 'put ''OWZcdWZlYTNcdWZlYTdcdWZlYTlcdWZlYWJcdWZlYWRcdWZlYWZcdWZlYjNcdWZlYjdcdWZlYmJcdWZlYmZcdWZlYzFcdWZlYzVcdWZlY2JcdWZlY2ZceGE2XHhhY1x4ZjdceGQ3XHVmZWM5XHUwNjQwXHVmZWQzXHVmZWQ3XHVmZWRiXHVmZWRmXHVmZWUzXHVmZWU3XHVmZWViXHVmZWVkXHVm''@;'; put 'put ''ZWVmXHVmZWYzXHVmZWJkXHVmZWNjXHVmZWNlXHVmZWNkXHVmZWUxXHVmZTdkXHUwNjUxXHVmZWU1XHVmZWU5XHVmZWVjXHVmZWYwXHVmZWYyXHVmZWQwXHVmZWQ1XHVmZWY1XHVmZWY2XHVmZWRkXHVmZWQ5XHVmZWYxXHUyNWEwXHVmZmZkIn0saWJtODY0OiJjcDg2NCIsY3NpYm04NjQ6ImNw''@;'; put 'put ''ODY0IixjcDg2NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJc''@;'; put 'put ''eGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1''@;'; put 'put ''MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhc''@;'; put 'put ''dTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1''@;'; put 'put ''MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2NToiY3A4NjUiLGNzaWJtODY1OiJjcDg2NSIsY3A4NjY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUw''@;'; put 'put ''NDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2''@;'; put 'put ''XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUy''@;'; put 'put ''NTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThj''@;'; put 'put ''XHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIx''@;'; put 'put ''OVx4YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEwXHhhMCJ9LGlibTg2NjoiY3A4NjYiLGNzaWJtODY2OiJjcDg2NiIsY3A4Njk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzg2XHVmZmZkXHhiN1x4YWNceGE2XHUyMDE4XHUyMDE5''@;'; put 'put ''XHUwMzg4XHUyMDE1XHUwMzg5XHUwMzhhXHUwM2FhXHUwMzhjXHVmZmZkXHVmZmZkXHUwMzhlXHUwM2FiXHhhOVx1MDM4Zlx4YjJceGIzXHUwM2FjXHhhM1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNjYVx1MDM5MFx1MDNjY1x1MDNjZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5''@;'; put 'put ''Nlx1MDM5N1x4YmRcdTAzOThcdTAzOTlceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDM5ZVx1MDM5Zlx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1''@;'; put 'put ''MDNhMFx1MDNhMVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDNiNFx1MDNiNVx1MjU4MFx1MDNiNlx1MDNi''@;'; put 'put ''N1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDM4NFx4YWRceGIxXHUwM2M1XHUwM2M2XHUwM2M3XHhhN1x1MDNjOFx1MDM4NVx4YjBceGE4XHUwM2M5XHUwM2NiXHUwM2IwXHUwM2NlXHUyNWEw''@;'; put 'put ''XHhhMCJ9LGlibTg2OToiY3A4NjkiLGNzaWJtODY5OiJjcDg2OSIsY3A5MjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5''@;'; put 'put ''OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVcdTIwM2VceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4''@;'; put 'put ''YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDE2MFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRcdTAxN2RceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhl''@;'; put 'put ''OVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDE2MVx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRcdTAxN2VceGZmIn0saWJtOTIyOiJjcDkyMiIsY3NpYm05MjI6ImNwOTIyIixjcDEwNDY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZTg4XHhk''@;'; put 'put ''N1x4ZjdcdWY4ZjZcdWY4ZjVcdWY4ZjRcdWY4ZjdcdWZlNzFceDg4XHUyNWEwXHUyNTAyXHUyNTAwXHUyNTEwXHUyNTBjXHUyNTE0XHUyNTE4XHVmZTc5XHVmZTdiXHVmZTdkXHVmZTdmXHVmZTc3XHVmZThhXHVmZWYwXHVmZWYzXHVmZWYyXHVmZWNlXHVmZWNmXHVmZWQwXHVmZWY2XHVmZWY4''@;'; put 'put ''XHVmZWZhXHVmZWZjXHhhMFx1ZjhmYVx1ZjhmOVx1ZjhmOFx4YTRcdWY4ZmJcdWZlOGJcdWZlOTFcdWZlOTdcdWZlOWJcdWZlOWZcdWZlYTNcdTA2MGNceGFkXHVmZWE3XHVmZWIzXHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHVm''@;'; put 'put ''ZWI3XHUwNjFiXHVmZWJiXHVmZWJmXHVmZWNhXHUwNjFmXHVmZWNiXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1''@;'; put 'put ''XHUwNjM2XHUwNjM3XHVmZWM3XHUwNjM5XHUwNjNhXHVmZWNjXHVmZTgyXHVmZTg0XHVmZThlXHVmZWQzXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUw''@;'; put 'put ''NjUxXHUwNjUyXHVmZWQ3XHVmZWRiXHVmZWRmXHVmOGZjXHVmZWY1XHVmZWY3XHVmZWY5XHVmZWZiXHVmZWUzXHVmZWU3XHVmZWVjXHVmZWU5XHVmZmZkIn0saWJtMTA0NjoiY3AxMDQ2Iixjc2libTEwNDY6ImNwMTA0NiIsY3AxMTI0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4''@;'; put 'put ''Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDQwMVx1MDQwMlx1MDQ5MFx1MDQwNFx1MDQwNVx1MDQwNlx1MDQwN1x1''@;'; put 'put ''MDQwOFx1MDQwOVx1MDQwYVx1MDQwYlx1MDQwY1x4YWRcdTA0MGVcdTA0MGZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNc''@;'; put 'put ''dTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0''@;'; put 'put ''M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTIxMTZcdTA0NTFcdTA0NTJcdTA0OTFcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NWFc''@;'; put 'put ''dTA0NWJcdTA0NWNceGE3XHUwNDVlXHUwNDVmIn0saWJtMTEyNDoiY3AxMTI0Iixjc2libTExMjQ6ImNwMTEyNCIsY3AxMTI1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQx''@;'; put 'put ''Ylx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1''@;'; put 'put ''MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUy''@;'; put 'put ''Y1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1''@;'; put 'put ''MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQ5MFx1MDQ5MVx1MDQwNFx1MDQ1NFx1MDQwNlx1MDQ1Nlx1MDQwN1x1MDQ1''@;'; put 'put ''N1x4YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEwXHhhMCJ9LGlibTExMjU6ImNwMTEyNSIsY3NpYm0xMTI1OiJjcDExMjUiLGNwMTEyOTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5''@;'; put 'put ''MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHUwMTUzXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxNzhceGI1XHhiNlx4YjdcdTAx''@;'; put 'put ''NTJceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUw''@;'; put 'put ''MzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSxpYm0xMTI5OiJjcDEx''@;'; put 'put ''MjkiLGNzaWJtMTEyOToiY3AxMTI5IixjcDExMzM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4''@;'; put 'put ''OWNceDlkXHg5ZVx4OWZceGEwXHUwZTgxXHUwZTgyXHUwZTg0XHUwZTg3XHUwZTg4XHUwZWFhXHUwZThhXHUwZThkXHUwZTk0XHUwZTk1XHUwZTk2XHUwZTk3XHUwZTk5XHUwZTlhXHUwZTliXHUwZTljXHUwZTlkXHUwZTllXHUwZTlmXHUwZWExXHUwZWEyXHUwZWEzXHUwZWE1XHUwZWE3XHUw''@;'; put 'put ''ZWFiXHUwZWFkXHUwZWFlXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWFmXHUwZWIwXHUwZWIyXHUwZWIzXHUwZWI0XHUwZWI1XHUwZWI2XHUwZWI3XHUwZWI4XHUwZWI5XHUwZWJjXHUwZWIxXHUwZWJiXHUwZWJkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZWMwXHUwZWMxXHUwZWMyXHUwZWMzXHUwZWM0''@;'; put 'put ''XHUwZWM4XHUwZWM5XHUwZWNhXHUwZWNiXHUwZWNjXHUwZWNkXHUwZWM2XHVmZmZkXHUwZWRjXHUwZWRkXHUyMGFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUw''@;'; put 'put ''ZWQwXHUwZWQxXHUwZWQyXHUwZWQzXHUwZWQ0XHUwZWQ1XHUwZWQ2XHUwZWQ3XHUwZWQ4XHUwZWQ5XHVmZmZkXHVmZmZkXHhhMlx4YWNceGE2XHVmZmZkIn0saWJtMTEzMzoiY3AxMTMzIixjc2libTExMzM6ImNwMTEzMyIsY3AxMTYxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1MGU0OFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUx''@;'; put 'put ''OFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1''@;'; put 'put ''MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1MGU0OVx1MGU0YVx1MGU0Ylx1MjBhY1x1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0''@;'; put 'put ''Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx4YTJceGFjXHhhNlx4YTAifSxpYm0xMTYxOiJjcDExNjEiLGNzaWJtMTE2MToiY3AxMTYxIixjcDExNjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHg4''@;'; put 'put ''MVx4ODJceDgzXHg4NFx1MjAyNlx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0''@;'; put 'put ''XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUw''@;'; put 'put ''ZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUw''@;'; put 'put ''ZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saWJtMTE2MjoiY3AxMTYyIixjc2libTExNjI6ImNwMTE2MiIsY3AxMTYzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4''@;'; put 'put ''Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVceGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIz''@;'; put 'put ''XHUwMTc4XHhiNVx4YjZceGI3XHUwMTUyXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhk''@;'; put 'put ''OVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIw''@;'; put 'put ''YWJceGZmIn0saWJtMTE2MzoiY3AxMTYzIixjc2libTExNjM6ImNwMTE2MyIsbWFjY3JvYXRpYW46e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhl''@;'; put 'put ''Zlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHUwMTYwXHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxN2RceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MjIwNlx4YjVcdTIyMDJcdTIyMTFcdTIy''@;'; put 'put ''MGZcdTAxNjFcdTIyMmJceGFhXHhiYVx1MjEyNlx1MDE3ZVx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTAxMDZceGFiXHUwMTBjXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MDExMFx1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2Fc''@;'; put 'put ''dWZmZmRceGE5XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx4YzZceGJiXHUyMDEzXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJcdTAxMDdceGMxXHUwMTBkXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1MDExMVx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwM2Mw''@;'; put 'put ''XHhjYlx1MDJkYVx4YjhceGNhXHhlNlx1MDJjNyJ9LG1hY2N5cmlsbGljOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQy''@;'; put 'put ''MFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0''@;'; put 'put ''MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJc''@;'; put 'put ''dTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3''@;'; put 'put ''XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCJ9LG1hY2dyZWVrOnt0eXBlOiJfc2Jj''@;'; put 'put ''cyIsY2hhcnM6Ilx4YzRceGI5XHhiMlx4YzlceGIzXHhkNlx4ZGNcdTAzODVceGUwXHhlMlx4ZTRcdTAzODRceGE4XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGEzXHUyMTIyXHhlZVx4ZWZcdTIwMjJceGJkXHUyMDMwXHhmNFx4ZjZceGE2XHhhZFx4ZjlceGZiXHhmY1x1MjAyMFx1MDM5M1x1MDM5''@;'; put 'put ''NFx1MDM5OFx1MDM5Ylx1MDM5ZVx1MDNhMFx4ZGZceGFlXHhhOVx1MDNhM1x1MDNhYVx4YTdcdTIyNjBceGIwXHUwMzg3XHUwMzkxXHhiMVx1MjI2NFx1MjI2NVx4YTVcdTAzOTJcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOTlcdTAzOWFcdTAzOWNcdTAzYTZcdTAzYWJcdTAzYThcdTAzYTlcdTAz''@;'; put 'put ''YWNcdTAzOWRceGFjXHUwMzlmXHUwM2ExXHUyMjQ4XHUwM2E0XHhhYlx4YmJcdTIwMjZceGEwXHUwM2E1XHUwM2E3XHUwMzg2XHUwMzg4XHUwMTUzXHUyMDEzXHUyMDE1XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDNhZFx1MDNhZVx1MDNh''@;'; put 'put ''Zlx1MDNjY1x1MDM4Zlx1MDNjZFx1MDNiMVx1MDNiMlx1MDNjOFx1MDNiNFx1MDNiNVx1MDNjNlx1MDNiM1x1MDNiN1x1MDNiOVx1MDNiZVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZlx1MDNjMFx1MDNjZVx1MDNjMVx1MDNjM1x1MDNjNFx1MDNiOFx1MDNjOVx1MDNjMlx1MDNjN1x1''@;'; put 'put ''MDNjNVx1MDNiNlx1MDNjYVx1MDNjYlx1MDM5MFx1MDNiMFx1ZmZmZCJ9LG1hY2ljZWxhbmQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4''@;'; put 'put ''ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUy''@;'; put 'put ''MjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0''@;'; put 'put ''XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUw''@;'; put 'put ''MmRiXHUwMmM3In0sbWFjcm9tYW46e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhm''@;'; put 'put ''Ylx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4''@;'; put 'put ''YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUy''@;'; put 'put ''MDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjcm9tYW5p''@;'; put 'put ''YTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEy''@;'; put 'put ''XHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBcdTAxMDJcdTAxNWVcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx1MDEwM1x1MDE1Zlx4YmZceGExXHhhY1x1MjIx''@;'; put 'put ''YVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1MDE2Mlx1MDE2M1x1MjAyMVx4YjdcdTIw''@;'; put 'put ''MWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3RoYWk6e3R5cGU6Il9zYmNz''@;'; put 'put ''IixjaGFyczoiXHhhYlx4YmJcdTIwMjZcdWY4OGNcdWY4OGZcdWY4OTJcdWY4OTVcdWY4OThcdWY4OGJcdWY4OGVcdWY4OTFcdWY4OTRcdWY4OTdcdTIwMWNcdTIwMWRcdWY4OTlcdWZmZmRcdTIwMjJcdWY4ODRcdWY4ODlcdWY4ODVcdWY4ODZcdWY4ODdcdWY4ODhcdWY4OGFcdWY4OGRcdWY4''@;'; put 'put ''OTBcdWY4OTNcdWY4OTZcdTIwMThcdTIwMTlcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUw''@;'; put 'put ''ZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMx''@;'; put 'put ''XHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZWZmXHUyMDBiXHUyMDEzXHUyMDE0XHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUw''@;'; put 'put ''ZTRkXHUyMTIyXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHhhZVx4YTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxtYWN0dXJraXNoOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhk''@;'; put 'put ''Nlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1''@;'; put 'put ''MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1''@;'; put 'put ''Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUwMTFlXHUwMTFmXHUwMTMwXHUwMTMxXHUwMTVlXHUwMTVmXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4''@;'; put 'put ''ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1ZmZmZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjdWtyYWluZTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0''@;'; put 'put ''MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHUw''@;'; put 'put ''NDkwXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MDQ5MVx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1''@;'; put 'put ''MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUw''@;'; put 'put ''NDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4''@;'; put 'put ''XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCJ9LGtvaThyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5''@;'; put 'put ''MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTVi''@;'; put 'put ''XHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUyNTYyXHUyNTYzXHUyNTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0''@;'; put 'put ''NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1''@;'; put 'put ''MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQy''@;'; put 'put ''YSJ9LGtvaTh1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1''@;'; put 'put ''MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUwNDU0XHUyNTU0XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUwNDkxXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUw''@;'; put 'put ''NDAxXHUwNDA0XHUyNTYzXHUwNDA2XHUwNDA3XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUwNDkwXHUyNTZjXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1''@;'; put 'put ''MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQx''@;'; put 'put ''OVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaThydTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBc''@;'; put 'put ''dTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4''@;'; put 'put ''YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MDQ1NFx1MjU1NFx1MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MDQ1ZVx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2''@;'; put 'put ''N1x1MjU2OFx1MjU2OVx1MjU2YVx1MDQ5MFx1MDQwZVx4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0''@;'; put 'put ''NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZc''@;'; put 'put ''dTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0OWJcdTA0OTNcdTIwMWFcdTA0OTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIw''@;'; put 'put ''MjFcdWZmZmRcdTIwMzBcdTA0YjNcdTIwMzlcdTA0YjJcdTA0YjdcdTA0YjZcdWZmZmRcdTA0OWFcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0ZWZcdTA0ZWVc''@;'; put 'put ''dTA0NTFceGE0XHUwNGUzXHhhNlx4YTdcdWZmZmRcdWZmZmRcdWZmZmRceGFiXHhhY1x4YWRceGFlXHVmZmZkXHhiMFx4YjFceGIyXHUwNDAxXHVmZmZkXHUwNGUyXHhiNlx4YjdcdWZmZmRcdTIxMTZcdWZmZmRceGJiXHVmZmZkXHVmZmZkXHVmZmZkXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1''@;'; put 'put ''MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0''@;'; put 'put ''N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1''@;'; put 'put ''MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGFybXNjaWk4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4''@;'; put 'put ''OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx1MDU4N1x1MDU4OSkoXHhiYlx4YWJcdTIwMTQuXHUwNTVkLC1cdTA1OGFcdTIwMjZcdTA1NWNcdTA1NWJcdTA1NWVcdTA1MzFcdTA1NjFcdTA1MzJcdTA1NjJcdTA1MzNcdTA1NjNcdTA1MzRcdTA1NjRcdTA1MzVcdTA1''@;'; put 'put ''NjVcdTA1MzZcdTA1NjZcdTA1MzdcdTA1NjdcdTA1MzhcdTA1NjhcdTA1MzlcdTA1NjlcdTA1M2FcdTA1NmFcdTA1M2JcdTA1NmJcdTA1M2NcdTA1NmNcdTA1M2RcdTA1NmRcdTA1M2VcdTA1NmVcdTA1M2ZcdTA1NmZcdTA1NDBcdTA1NzBcdTA1NDFcdTA1NzFcdTA1NDJcdTA1NzJcdTA1NDNc''@;'; put 'put ''dTA1NzNcdTA1NDRcdTA1NzRcdTA1NDVcdTA1NzVcdTA1NDZcdTA1NzZcdTA1NDdcdTA1NzdcdTA1NDhcdTA1NzhcdTA1NDlcdTA1NzlcdTA1NGFcdTA1N2FcdTA1NGJcdTA1N2JcdTA1NGNcdTA1N2NcdTA1NGRcdTA1N2RcdTA1NGVcdTA1N2VcdTA1NGZcdTA1N2ZcdTA1NTBcdTA1ODBcdTA1''@;'; put 'put ''NTFcdTA1ODFcdTA1NTJcdTA1ODJcdTA1NTNcdTA1ODNcdTA1NTRcdTA1ODRcdTA1NTVcdTA1ODVcdTA1NTZcdTA1ODZcdTA1NWFcdWZmZmQifSxyazEwNDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFj''@;'; put 'put ''XHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDlhXHUwNGJhXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDliXHUwNGJiXHUwNDVmXHhhMFx1MDRiMFx1MDRiMVx1MDRkOFx4YTRc''@;'; put 'put ''dTA0ZThceGE2XHhhN1x1MDQwMVx4YTlcdTA0OTJceGFiXHhhY1x4YWRceGFlXHUwNGFlXHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0ZTlceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0OTNceGJiXHUwNGQ5XHUwNGEyXHUwNGEzXHUwNGFmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0''@;'; put 'put ''XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUw''@;'; put 'put ''NDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRi''@;'; put 'put ''XHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sdGN2bjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4ZGFcdTFlZTRceDAzXHUxZWVhXHUxZWVjXHUxZWVlXHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx1MWVlOFx1MWVmMFx1MWVmMlx1MWVmNlx1MWVmOFx4ZGRcdTFlZjRceDE4XHgxOVx4''@;'; put 'put ''MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjMFx1MWVhMlx4YzNceGMxXHUxZWEwXHUxZWI2XHUxZWFjXHhjOFx1''@;'; put 'put ''MWViYVx1MWViY1x4YzlcdTFlYjhcdTFlYzZceGNjXHUxZWM4XHUwMTI4XHhjZFx1MWVjYVx4ZDJcdTFlY2VceGQ1XHhkM1x1MWVjY1x1MWVkOFx1MWVkY1x1MWVkZVx1MWVlMFx1MWVkYVx1MWVlMlx4ZDlcdTFlZTZcdTAxNjhceGEwXHUwMTAyXHhjMlx4Y2FceGQ0XHUwMWEwXHUwMWFmXHUw''@;'; put 'put ''MTEwXHUwMTAzXHhlMlx4ZWFceGY0XHUwMWExXHUwMWIwXHUwMTExXHUxZWIwXHUwMzAwXHUwMzA5XHUwMzAzXHUwMzAxXHUwMzIzXHhlMFx1MWVhM1x4ZTNceGUxXHUxZWExXHUxZWIyXHUxZWIxXHUxZWIzXHUxZWI1XHUxZWFmXHUxZWI0XHUxZWFlXHUxZWE2XHUxZWE4XHUxZWFhXHUxZWE0''@;'; put 'put ''XHUxZWMwXHUxZWI3XHUxZWE3XHUxZWE5XHUxZWFiXHUxZWE1XHUxZWFkXHhlOFx1MWVjMlx1MWViYlx1MWViZFx4ZTlcdTFlYjlcdTFlYzFcdTFlYzNcdTFlYzVcdTFlYmZcdTFlYzdceGVjXHUxZWM5XHUxZWM0XHUxZWJlXHUxZWQyXHUwMTI5XHhlZFx1MWVjYlx4ZjJcdTFlZDRcdTFlY2Zc''@;'; put 'put ''eGY1XHhmM1x1MWVjZFx1MWVkM1x1MWVkNVx1MWVkN1x1MWVkMVx1MWVkOVx1MWVkZFx1MWVkZlx1MWVlMVx1MWVkYlx1MWVlM1x4ZjlcdTFlZDZcdTFlZTdcdTAxNjlceGZhXHUxZWU1XHUxZWViXHUxZWVkXHUxZWVmXHUxZWU5XHUxZWYxXHUxZWYzXHUxZWY3XHUxZWY5XHhmZFx1MWVmNVx1''@;'; put 'put ''MWVkMCJ9LGdlb3JnaWFuYWNhZGVteTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJc''@;'; put 'put ''dTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNceDlkXHg5ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4''@;'; put 'put ''YmJceGJjXHhiZFx4YmVceGJmXHUxMGQwXHUxMGQxXHUxMGQyXHUxMGQzXHUxMGQ0XHUxMGQ1XHUxMGQ2XHUxMGQ3XHUxMGQ4XHUxMGQ5XHUxMGRhXHUxMGRiXHUxMGRjXHUxMGRkXHUxMGRlXHUxMGRmXHUxMGUwXHUxMGUxXHUxMGUyXHUxMGUzXHUxMGU0XHUxMGU1XHUxMGU2XHUxMGU3XHUx''@;'; put 'put ''MGU4XHUxMGU5XHUxMGVhXHUxMGViXHUxMGVjXHUxMGVkXHUxMGVlXHUxMGVmXHUxMGYwXHUxMGYxXHUxMGYyXHUxMGYzXHUxMGY0XHUxMGY1XHUxMGY2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4''@;'; put 'put ''ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGdlb3JnaWFucHM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFj''@;'; put 'put ''XHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4Yjdc''@;'; put 'put ''eGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBmMVx1MTBkN1x1MTBkOFx1MTBkOVx1MTBkYVx1MTBkYlx1MTBkY1x1MTBmMlx1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBmM1x1''@;'; put 'put ''MTBlM1x1MTBlNFx1MTBlNVx1MTBlNlx1MTBlN1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBmNFx1MTBlZlx1MTBmMFx1MTBmNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhm''@;'; put 'put ''N1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0scHQxNTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDk2XHUwNDkyXHUwNGVlXHUwNDkzXHUyMDFlXHUyMDI2XHUwNGI2XHUwNGFlXHUwNGIyXHUwNGFmXHUwNGEwXHUwNGUyXHUwNGEyXHUwNDlhXHUwNGJhXHUwNGI4XHUwNDk3''@;'; put 'put ''XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwNGIzXHUwNGI3XHUwNGExXHUwNGUzXHUwNGEzXHUwNDliXHUwNGJiXHUwNGI5XHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx1MDRlOFx1MDQ5OFx1MDRiMFx4YTdcdTA0MDFceGE5XHUwNGQ4XHhhYlx4YWNcdTA0ZWZc''@;'; put 'put ''eGFlXHUwNDljXHhiMFx1MDRiMVx1MDQwNlx1MDQ1Nlx1MDQ5OVx1MDRlOVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNGQ5XHhiYlx1MDQ1OFx1MDRhYVx1MDRhYlx1MDQ5ZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1''@;'; put 'put ''MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQz''@;'; put 'put ''Nlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHZpc2NpaTp7dHlw''@;'; put 'put ''ZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFcdTFlYjJceDAzXHgwNFx1MWViNFx1MWVhYVx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNcdTFlZjZceDE1XHgxNlx4MTdceDE4XHUxZWY4XHgxYVx4MWJceDFjXHgxZFx1MWVmNFx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0''@;'; put 'put ''NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MWVhMFx1MWVhZVx1MWViMFx1MWViNlx1MWVhNFx1MWVhNlx1MWVhOFx1MWVhY1x1MWViY1x1MWViOFx1MWViZVx1MWVjMFx1MWVjMlx1MWVjNFx1''@;'; put 'put ''MWVjNlx1MWVkMFx1MWVkMlx1MWVkNFx1MWVkNlx1MWVkOFx1MWVlMlx1MWVkYVx1MWVkY1x1MWVkZVx1MWVjYVx1MWVjZVx1MWVjY1x1MWVjOFx1MWVlNlx1MDE2OFx1MWVlNFx1MWVmMlx4ZDVcdTFlYWZcdTFlYjFcdTFlYjdcdTFlYTVcdTFlYTdcdTFlYTlcdTFlYWRcdTFlYmRcdTFlYjlc''@;'; put 'put ''dTFlYmZcdTFlYzFcdTFlYzNcdTFlYzVcdTFlYzdcdTFlZDFcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZTBcdTAxYTBcdTFlZDlcdTFlZGRcdTFlZGZcdTFlY2JcdTFlZjBcdTFlZThcdTFlZWFcdTFlZWNcdTAxYTFcdTFlZGJcdTAxYWZceGMwXHhjMVx4YzJceGMzXHUxZWEyXHUwMTAyXHUxZWIz''@;'; put 'put ''XHUxZWI1XHhjOFx4YzlceGNhXHUxZWJhXHhjY1x4Y2RcdTAxMjhcdTFlZjNcdTAxMTBcdTFlZTlceGQyXHhkM1x4ZDRcdTFlYTFcdTFlZjdcdTFlZWJcdTFlZWRceGQ5XHhkYVx1MWVmOVx1MWVmNVx4ZGRcdTFlZTFcdTAxYjBceGUwXHhlMVx4ZTJceGUzXHUxZWEzXHUwMTAzXHUxZWVmXHUx''@;'; put 'put ''ZWFiXHhlOFx4ZTlceGVhXHUxZWJiXHhlY1x4ZWRcdTAxMjlcdTFlYzlcdTAxMTFcdTFlZjFceGYyXHhmM1x4ZjRceGY1XHUxZWNmXHUxZWNkXHUxZWU1XHhmOVx4ZmFcdTAxNjlcdTFlZTdceGZkXHUxZWUzXHUxZWVlIn0saXNvNjQ2Y246e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgw''@;'; put 'put ''Mlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiNceGE1JSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZX''@;'; put 'put ''WFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlzbzY0''@;'; put 'put ''NmpwOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4''@;'; put 'put ''OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltceGE1XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9XHUyMDNlXHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGhwcm9tYW44Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5''@;'; put 'put ''YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YzBceGMyXHhjOFx4Y2FceGNiXHhjZVx4Y2ZceGI0XHUwMmNiXHUwMmM2XHhhOFx1MDJkY1x4ZDlceGRiXHUyMGE0XHhhZlx4ZGRceGZkXHhiMFx4YzdceGU3XHhkMVx4ZjFceGExXHhiZlx4YTRceGEzXHhhNVx4YTdcdTAxOTJceGEyXHhlMlx4''@;'; put 'put ''ZWFceGY0XHhmYlx4ZTFceGU5XHhmM1x4ZmFceGUwXHhlOFx4ZjJceGY5XHhlNFx4ZWJceGY2XHhmY1x4YzVceGVlXHhkOFx4YzZceGU1XHhlZFx4ZjhceGU2XHhjNFx4ZWNceGQ2XHhkY1x4YzlceGVmXHhkZlx4ZDRceGMxXHhjM1x4ZTNceGQwXHhmMFx4Y2RceGNjXHhkM1x4ZDJceGQ1XHhm''@;'; put 'put ''NVx1MDE2MFx1MDE2MVx4ZGFcdTAxNzhceGZmXHhkZVx4ZmVceGI3XHhiNVx4YjZceGJlXHUyMDE0XHhiY1x4YmRceGFhXHhiYVx4YWJcdTI1YTBceGJiXHhiMVx1ZmZmZCJ9LG1hY2ludG9zaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4''@;'; put 'put ''ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhk''@;'; put 'put ''OFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIw''@;'; put 'put ''MTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRc''@;'; put 'put ''eGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxhc2NpaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx0aXM2MjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUw''@;'; put 'put ''ZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0''@;'; put 'put ''XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUw''@;'; put 'put ''ZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTVi''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn19fSw2NDc3MzphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXsxMDAyOToibWFjY2VudGV1cm8iLG1hY2NlbnRldXJvOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUw''@;'; put 'put ''MTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1''@;'; put 'put ''MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUy''@;'; put 'put ''MjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIw''@;'; put 'put ''MWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3In0sODA4OiJj''@;'; put 'put ''cDgwOCIsaWJtODA4OiJjcDgwOCIsY3A4MDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUw''@;'; put 'put ''NDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNl''@;'; put 'put ''XHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUy''@;'; put 'put ''NTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1''@;'; put 'put ''XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZcdTIwYWNcdTI1YTBceGEwIn0sbWlrOnt0eXBlOiJf''@;'; put 'put ''c2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1''@;'; put 'put ''MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0''@;'; put 'put ''NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU2M1x1MjU1MVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjUxMFx1''@;'; put 'put ''MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjExNlx4YTdcdTI1NTdcdTI1NWRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIx''@;'; put 'put ''ZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGNwNzIwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHhlOVx4ZTJceDg0XHhlMFx4ODZceGU3''@;'; put 'put ''XHhlYVx4ZWJceGU4XHhlZlx4ZWVceDhkXHg4ZVx4OGZceDkwXHUwNjUxXHUwNjUyXHhmNFx4YTRcdTA2NDBceGZiXHhmOVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx4YTNcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZc''@;'; put 'put ''dTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1''@;'; put 'put ''MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4''@;'; put 'put ''MFx1MDYzNlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MVx4YjVcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTIyNjFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1''@;'; put 'put ''MjA3Zlx4YjJcdTI1YTBceGEwIn0sYXNjaWk4Yml0OiJhc2NpaSIsdXNhc2NpaToiYXNjaWkiLGFuc2l4MzQ6ImFzY2lpIixhbnNpeDM0MTk2ODoiYXNjaWkiLGFuc2l4MzQxOTg2OiJhc2NpaSIsY3Nhc2NpaToiYXNjaWkiLGNwMzY3OiJhc2NpaSIsaWJtMzY3OiJhc2NpaSIsaXNvaXI2OiJh''@;'; put 'put ''c2NpaSIsaXNvNjQ2dXM6ImFzY2lpIixpc282NDZpcnY6ImFzY2lpIix1czoiYXNjaWkiLGxhdGluMToiaXNvODg1OTEiLGxhdGluMjoiaXNvODg1OTIiLGxhdGluMzoiaXNvODg1OTMiLGxhdGluNDoiaXNvODg1OTQiLGxhdGluNToiaXNvODg1OTkiLGxhdGluNjoiaXNvODg1OTEwIixsYXRp''@;'; put 'put ''bjc6Imlzbzg4NTkxMyIsbGF0aW44OiJpc284ODU5MTQiLGxhdGluOToiaXNvODg1OTE1IixsYXRpbjEwOiJpc284ODU5MTYiLGNzaXNvbGF0aW4xOiJpc284ODU5MSIsY3Npc29sYXRpbjI6Imlzbzg4NTkyIixjc2lzb2xhdGluMzoiaXNvODg1OTMiLGNzaXNvbGF0aW40OiJpc284ODU5NCIs''@;'; put 'put ''Y3Npc29sYXRpbmN5cmlsbGljOiJpc284ODU5NSIsY3Npc29sYXRpbmFyYWJpYzoiaXNvODg1OTYiLGNzaXNvbGF0aW5ncmVlazoiaXNvODg1OTciLGNzaXNvbGF0aW5oZWJyZXc6Imlzbzg4NTk4Iixjc2lzb2xhdGluNToiaXNvODg1OTkiLGNzaXNvbGF0aW42OiJpc284ODU5MTAiLGwxOiJp''@;'; put 'put ''c284ODU5MSIsbDI6Imlzbzg4NTkyIixsMzoiaXNvODg1OTMiLGw0OiJpc284ODU5NCIsbDU6Imlzbzg4NTk5IixsNjoiaXNvODg1OTEwIixsNzoiaXNvODg1OTEzIixsODoiaXNvODg1OTE0IixsOToiaXNvODg1OTE1IixsMTA6Imlzbzg4NTkxNiIsaXNvaXIxNDoiaXNvNjQ2anAiLGlzb2ly''@;'; put 'put ''NTc6ImlzbzY0NmNuIixpc29pcjEwMDoiaXNvODg1OTEiLGlzb2lyMTAxOiJpc284ODU5MiIsaXNvaXIxMDk6Imlzbzg4NTkzIixpc29pcjExMDoiaXNvODg1OTQiLGlzb2lyMTQ0OiJpc284ODU5NSIsaXNvaXIxMjc6Imlzbzg4NTk2Iixpc29pcjEyNjoiaXNvODg1OTciLGlzb2lyMTM4OiJp''@;'; put 'put ''c284ODU5OCIsaXNvaXIxNDg6Imlzbzg4NTk5Iixpc29pcjE1NzoiaXNvODg1OTEwIixpc29pcjE2NjoidGlzNjIwIixpc29pcjE3OToiaXNvODg1OTEzIixpc29pcjE5OToiaXNvODg1OTE0Iixpc29pcjIwMzoiaXNvODg1OTE1Iixpc29pcjIyNjoiaXNvODg1OTE2IixjcDgxOToiaXNvODg1''@;'; put 'put ''OTEiLGlibTgxOToiaXNvODg1OTEiLGN5cmlsbGljOiJpc284ODU5NSIsYXJhYmljOiJpc284ODU5NiIsYXJhYmljODoiaXNvODg1OTYiLGVjbWExMTQ6Imlzbzg4NTk2Iixhc21vNzA4OiJpc284ODU5NiIsZ3JlZWs6Imlzbzg4NTk3IixncmVlazg6Imlzbzg4NTk3IixlY21hMTE4OiJpc284''@;'; put 'put ''ODU5NyIsZWxvdDkyODoiaXNvODg1OTciLGhlYnJldzoiaXNvODg1OTgiLGhlYnJldzg6Imlzbzg4NTk4Iix0dXJraXNoOiJpc284ODU5OSIsdHVya2lzaDg6Imlzbzg4NTk5Iix0aGFpOiJpc284ODU5MTEiLHRoYWk4OiJpc284ODU5MTEiLGNlbHRpYzoiaXNvODg1OTE0IixjZWx0aWM4OiJp''@;'; put 'put ''c284ODU5MTQiLGlzb2NlbHRpYzoiaXNvODg1OTE0Iix0aXM2MjAwOiJ0aXM2MjAiLHRpczYyMDI1MjkxOiJ0aXM2MjAiLHRpczYyMDI1MzMwOiJ0aXM2MjAiLDFlNDoibWFjcm9tYW4iLDEwMDA2OiJtYWNncmVlayIsMTAwMDc6Im1hY2N5cmlsbGljIiwxMDA3OToibWFjaWNlbGFuZCIsMTAw''@;'; put 'put ''ODE6Im1hY3R1cmtpc2giLGNzcGM4Y29kZXBhZ2U0Mzc6ImNwNDM3Iixjc3BjNzc1YmFsdGljOiJjcDc3NSIsY3NwYzg1MG11bHRpbGluZ3VhbDoiY3A4NTAiLGNzcGNwODUyOiJjcDg1MiIsY3NwYzg2MmxhdGluaGVicmV3OiJjcDg2MiIsY3BncjoiY3A4NjkiLG1zZWU6ImNwMTI1MCIsbXNj''@;'; put 'put ''eXJsOiJjcDEyNTEiLG1zYW5zaToiY3AxMjUyIixtc2dyZWVrOiJjcDEyNTMiLG1zdHVyazoiY3AxMjU0Iixtc2hlYnI6ImNwMTI1NSIsbXNhcmFiOiJjcDEyNTYiLHdpbmJhbHRyaW06ImNwMTI1NyIsY3AyMDg2Njoia29pOHIiLDIwODY2OiJrb2k4ciIsaWJtODc4OiJrb2k4ciIsY3Nrb2k4''@;'; put 'put ''cjoia29pOHIiLGNwMjE4NjY6ImtvaTh1IiwyMTg2Njoia29pOHUiLGlibTExNjg6ImtvaTh1IixzdHJrMTA0ODIwMDI6InJrMTA0OCIsdGN2bjU3MTI6InRjdm4iLHRjdm41NzEyMToidGN2biIsZ2IxOTg4ODA6ImlzbzY0NmNuIixjbjoiaXNvNjQ2Y24iLGNzaXNvMTRqaXNjNjIyMHJvOiJp''@;'; put 'put ''c282NDZqcCIsamlzYzYyMjAxOTY5cm86ImlzbzY0NmpwIixqcDoiaXNvNjQ2anAiLGNzaHByb21hbjg6Imhwcm9tYW44IixyODoiaHByb21hbjgiLHJvbWFuODoiaHByb21hbjgiLHhyb21hbjg6Imhwcm9tYW44IixpYm0xMDUxOiJocHJvbWFuOCIsbWFjOiJtYWNpbnRvc2giLGNzbWFjaW50''@;'; put 'put ''b3NoOiJtYWNpbnRvc2gifX0sNDMyODA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geCgpe31mdW5jdGlvbiBtKCl7fWZ1bmN0aW9uIGxlKCl7dGhpcy5vdmVyZmxvd0J5dGU9LTF9ZnVuY3Rpb24gTShLLEkpe3RoaXMuaWNvbnY9SX1m''@;'; put 'put ''dW5jdGlvbiBPKEssSSl7dm9pZCAwPT09KEs9S3x8e30pLmFkZEJPTSYmKEsuYWRkQk9NPSEwKSx0aGlzLmVuY29kZXI9SS5pY29udi5nZXRFbmNvZGVyKCJ1dGYtMTZsZSIsSyl9ZnVuY3Rpb24gUihLLEkpe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5p''@;'; put 'put ''dGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRpb25zPUt8fHt9LHRoaXMuaWNvbnY9SS5pY29udn1mdW5jdGlvbiB6KEssSSl7dmFyIGs9SXx8InV0Zi0xNmxlIjtpZihLLmxlbmd0aD49MilpZigyNTQ9PUtbMF0mJjI1NT09S1sxXSlrPSJ1dGYtMTZiZSI7ZWxzZSBpZigyNTU9PUtbMF0mJjI1ND09''@;'; put 'put ''S1sxXSlrPSJ1dGYtMTZsZSI7ZWxzZXtmb3IodmFyIEU9MCxqPTAsVj1NYXRoLm1pbihLLmxlbmd0aC1LLmxlbmd0aCUyLDY0KSxCPTA7QjxWO0IrPTIpMD09PUtbQl0mJjAhPT1LW0IrMV0mJmorKywwIT09S1tCXSYmMD09PUtbQisxXSYmRSsrO2o+RT9rPSJ1dGYtMTZiZSI6ajxFJiYoaz0i''@;'; put 'put ''dXRmLTE2bGUiKX1yZXR1cm4ga31JZS51dGYxNmJlPXgseC5wcm90b3R5cGUuZW5jb2Rlcj1tLHgucHJvdG90eXBlLmRlY29kZXI9bGUseC5wcm90b3R5cGUuYm9tQXdhcmU9ITAsbS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7Zm9yKHZhciBJPWFlLmZyb20oSywidWNzMiIpLGs9MDtr''@;'; put 'put ''PEkubGVuZ3RoO2srPTIpe3ZhciBFPUlba107SVtrXT1JW2srMV0sSVtrKzFdPUV9cmV0dXJuIEl9LG0ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sbGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2lmKDA9PUsubGVuZ3RoKXJldHVybiIiO3ZhciBJPWFlLmFsbG9jKEsubGVuZ3Ro''@;'; put 'put ''KzEpLGs9MCxFPTA7Zm9yKC0xIT09dGhpcy5vdmVyZmxvd0J5dGUmJihJWzBdPUtbMF0sSVsxXT10aGlzLm92ZXJmbG93Qnl0ZSxrPTEsRT0yKTtrPEsubGVuZ3RoLTE7ays9MixFKz0yKUlbRV09S1trKzFdLElbRSsxXT1LW2tdO3JldHVybiB0aGlzLm92ZXJmbG93Qnl0ZT1rPT1LLmxlbmd0''@;'; put 'put ''aC0xP0tbSy5sZW5ndGgtMV06LTEsSS5zbGljZSgwLEUpLnRvU3RyaW5nKCJ1Y3MyIil9LGxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LEllLnV0ZjE2PU0sTS5wcm90b3R5cGUuZW5jb2Rlcj1PLE0ucHJvdG90eXBlLmRlY29kZXI9UixPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihL''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKEspfSxPLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxSLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtpZighdGhpcy5kZWNvZGVyKXtpZih0aGlzLmluaXRpYWxCeXRlcy5wdXNoKEspLHRo''@;'; put 'put ''aXMuaW5pdGlhbEJ5dGVzTGVuKz1LLmxlbmd0aCx0aGlzLmluaXRpYWxCeXRlc0xlbjwxNilyZXR1cm4iIjt2YXIgST16KEs9YWUuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVy''@;'; put 'put ''KEksdGhpcy5vcHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKEspfSxSLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgSz1hZS5jb25jYXQodGhpcy5pbml0''@;'; put 'put ''aWFsQnl0ZXMpLEk9eihLLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoSSx0aGlzLm9wdGlvbnMpO3ZhciBrPXRoaXMuZGVjb2Rlci53cml0ZShLKSxFPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gRT9rK0U6a31yZXR1''@;'; put 'put ''cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sOTI4NDQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geChLLEkpe3RoaXMuaWNvbnY9SSx0aGlzLmJvbUF3YXJlPSEwLHRoaXMuaXNMRT1LLmlzTEV9ZnVuY3Rpb24gbShLLEkpe3RoaXMuaXNM''@;'; put 'put ''RT1JLmlzTEUsdGhpcy5oaWdoU3Vycm9nYXRlPTB9ZnVuY3Rpb24gbGUoSyxJKXt0aGlzLmlzTEU9SS5pc0xFLHRoaXMuYmFkQ2hhcj1JLmljb252LmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApLHRoaXMub3ZlcmZsb3c9bnVsbH1mdW5jdGlvbiBNKEssSSl7dGhpcy5pY29udj1J''@;'; put 'put ''fWZ1bmN0aW9uIE8oSyxJKXt2b2lkIDA9PT0oSz1LfHx7fSkuYWRkQk9NJiYoSy5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1JLmljb252LmdldEVuY29kZXIoSy5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGYtMzJsZSIsSyl9ZnVuY3Rpb24gUihLLEkpe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5p''@;'; put 'put ''dGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRpb25zPUt8fHt9LHRoaXMuaWNvbnY9SS5pY29udn1mdW5jdGlvbiB6KEssSSl7dmFyIGs9SXx8InV0Zi0zMmxlIjtpZihLLmxlbmd0aD49NClpZig2NTI3OT09PUsucmVhZFVJbnQzMkJFKDApKWs9InV0Zi0zMmJl''@;'; put 'put ''IjtlbHNlIGlmKDY1Mjc5PT09Sy5yZWFkVUludDMyTEUoMCkpaz0idXRmLTMybGUiO2Vsc2V7Zm9yKHZhciBFPTAsaj0wLFY9MCxCPTAsWT1NYXRoLm1pbihLLmxlbmd0aC1LLmxlbmd0aCU0LDEyOCksWD0wO1g8WTtYKz00KXt2YXIgVT1LW1hdLHE9S1tYKzFdLGVlPUtbWCsyXSx0ZT1LW1gr''@;'; put 'put ''M107KDAhPT1VfHxxPjE2KSYmKytqLCgwIT09dGV8fGVlPjE2KSYmKytFLDA9PT1VJiYwPT09cSYmMD09PWVlJiYwIT09dGUmJkIrKywwIT09VSYmMD09PXEmJjA9PT1lZSYmMD09PXRlJiZWKyt9ajxFP2s9InV0Zi0zMmJlIjpFPGomJihrPSJ1dGYtMzJsZSIpLEI+Vj9rPSJ1dGYtMzJiZSI6''@;'; put 'put ''QjxWJiYoaz0idXRmLTMybGUiKX1yZXR1cm4ga31JZS5fdXRmMzI9eCxJZS51dGYzMmxlPXt0eXBlOiJfdXRmMzIiLGlzTEU6ITB9LEllLnV0ZjMyYmU9e3R5cGU6Il91dGYzMiIsaXNMRTohMX0sSWUudWNzNGxlPSJ1dGYzMmxlIixJZS51Y3M0YmU9InV0ZjMyYmUiLHgucHJvdG90eXBlLmVu''@;'; put 'put ''Y29kZXI9bSx4LnByb3RvdHlwZS5kZWNvZGVyPWxlLG0ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2Zvcih2YXIgST1hZS5mcm9tKEssInVjczIiKSxrPWFlLmFsbG9jKDIqSS5sZW5ndGgpLEU9dGhpcy5pc0xFP2sud3JpdGVVSW50MzJMRTprLndyaXRlVUludDMyQkUsaj0wLFY9MDtW''@;'; put 'put ''PEkubGVuZ3RoO1YrPTIpe3ZhciBCPUkucmVhZFVJbnQxNkxFKFYpLFk9NTUyOTY8PUImJkI8NTYzMjA7aWYodGhpcy5oaWdoU3Vycm9nYXRlKXtpZighWSYmNTYzMjA8PUImJkI8NTczNDQpe0UuY2FsbChrLDY1NTM2Kyh0aGlzLmhpZ2hTdXJyb2dhdGUtNTUyOTY8PDEwfEItNTYzMjApLGop''@;'; put 'put ''LGorPTQsdGhpcy5oaWdoU3Vycm9nYXRlPTA7Y29udGludWV9RS5jYWxsKGssdGhpcy5oaWdoU3Vycm9nYXRlLGopLGorPTR9WT90aGlzLmhpZ2hTdXJyb2dhdGU9QjooRS5jYWxsKGssQixqKSxqKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wKX1yZXR1cm4gajxrLmxlbmd0aCYmKGs9ay5zbGlj''@;'; put 'put ''ZSgwLGopKSxrfSxtLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhpZ2hTdXJyb2dhdGUpe3ZhciBLPWFlLmFsbG9jKDQpO3JldHVybiB0aGlzLmlzTEU/Sy53cml0ZVVJbnQzMkxFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKTpLLndyaXRlVUludDMyQkUodGhpcy5oaWdoU3Vycm9n''@;'; put 'put ''YXRlLDApLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wLEt9fSxsZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7aWYoMD09PUsubGVuZ3RoKXJldHVybiIiO3RoaXMub3ZlcmZsb3cmJihLPWFlLmNvbmNhdChbdGhpcy5vdmVyZmxvdyxLXSkpO3ZhciBJPUsubGVuZ3RoLUsubGVuZ3RoJTQ7Sy5s''@;'; put 'put ''ZW5ndGghPT1JPyh0aGlzLm92ZXJmbG93PUsuc2xpY2UoSSksSz1LLnNsaWNlKDAsSSkpOnRoaXMub3ZlcmZsb3c9bnVsbDtmb3IodmFyIGs9YWUuYWxsb2MoSSksRT0wLGo9MDtqPEk7ais9NCl7dmFyIFY9dGhpcy5pc0xFP0sucmVhZFVJbnQzMkxFKGopOksucmVhZFVJbnQzMkJFKGopO2lm''@;'; put 'put ''KFY8NjU1MzYpay53cml0ZVVJbnQxNkxFKFYsRSksRSs9MjtlbHNlIGlmKFY+MTExNDExMSlrLndyaXRlVUludDE2TEUodGhpcy5iYWRDaGFyLEUpLEUrPTI7ZWxzZXt2YXIgWT01NjMyMCsoMTAyMyYoVi09NjU1MzYpKTtrLndyaXRlVUludDE2TEUoNTUyOTZ8Vj4+MTAsRSksay53cml0ZVVJ''@;'; put 'put ''bnQxNkxFKFksRSs9MiksRSs9Mn19cmV0dXJuIGsuc2xpY2UoMCxFKS50b1N0cmluZygidWNzMiIpfSxsZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5vdmVyZmxvdz1udWxsfSxJZS51dGYzMj1NLEllLnVjczQ9TSxNLnByb3RvdHlwZS5lbmNvZGVyPU8sTS5wcm90b3R5cGUuZGVj''@;'; put 'put ''b2Rlcj1SLE8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoSyl9LE8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LFIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2lmKCF0aGlzLmRlY29k''@;'; put 'put ''ZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goSyksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPUsubGVuZ3RoLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPDMyKXJldHVybiIiO3ZhciBrPXooYWUuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0''@;'; put 'put ''aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKGssdGhpcy5vcHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKEspfSxSLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5k''@;'; put 'put ''ZWNvZGVyKXt2YXIgSz1hZS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLEk9eihLLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoSSx0aGlzLm9wdGlvbnMpO3ZhciBrPXRoaXMuZGVjb2Rlci53cml0ZShLKSxFPXRoaXMu''@;'; put 'put ''ZGVjb2Rlci5lbmQoKTtyZXR1cm4gRT9rK0U6a31yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sNzgzNTQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7ZnVuY3Rpb24geChZLFgpe3RoaXMuaWNvbnY9WH1JZS51dGY3PXgsSWUudW5pY29kZTExdXRm''@;'; put 'put ''Nz0idXRmNyIseC5wcm90b3R5cGUuZW5jb2Rlcj1sZSx4LnByb3RvdHlwZS5kZWNvZGVyPU0seC5wcm90b3R5cGUuYm9tQXdhcmU9ITA7dmFyIG09L1teQS1aYS16MC05J1woXCksLVwuXC86XD8gXG5cclx0XSsvZztmdW5jdGlvbiBsZShZLFgpe3RoaXMuaWNvbnY9WC5pY29udn1mdW5jdGlv''@;'; put 'put ''biBNKFksWCl7dGhpcy5pY29udj1YLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn1sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWSl7cmV0dXJuIGFlLmZyb20oWS5yZXBsYWNlKG0sZnVuY3Rpb24oWCl7cmV0dXJuIisiKygiKyI9PT1YPyIiOnRoaXMuaWNv''@;'; put 'put ''bnYuZW5jb2RlKFgsInV0ZjE2LWJlIikudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoLz0rJC8sIiIpKSsiLSJ9LmJpbmQodGhpcykpKX0sbGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe307Zm9yKHZhciBPPS9bQS1aYS16MC05XC8rXS8sUj1bXSx6PTA7ejwyNTY7eisrKVJbel09Ty50''@;'; put 'put ''ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoeikpO3ZhciBLPSIrIi5jaGFyQ29kZUF0KDApLEk9Ii0iLmNoYXJDb2RlQXQoMCksaz0iJiIuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBFKFksWCl7dGhpcy5pY29udj1YfWZ1bmN0aW9uIGooWSxYKXt0aGlzLmljb252PVguaWNvbnYsdGhpcy5pbkJh''@;'; put 'put ''c2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPWFlLmFsbG9jKDYpLHRoaXMuYmFzZTY0QWNjdW1JZHg9MH1mdW5jdGlvbiBWKFksWCl7dGhpcy5pY29udj1YLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn1NLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihZKXtmb3Io''@;'; put 'put ''dmFyIFg9IiIsVT0wLHE9dGhpcy5pbkJhc2U2NCxlZT10aGlzLmJhc2U2NEFjY3VtLHRlPTA7dGU8WS5sZW5ndGg7dGUrKylpZihxKXtpZighUltZW3RlXV0pe2lmKHRlPT1VJiZZW3RlXT09SSlYKz0iKyI7ZWxzZXt2YXIgb2U9ZWUrWS5zbGljZShVLHRlKS50b1N0cmluZygpO1grPXRoaXMu''@;'; put 'put ''aWNvbnYuZGVjb2RlKGFlLmZyb20ob2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfVlbdGVdIT1JJiZ0ZS0tLFU9dGUrMSxxPSExLGVlPSIifX1lbHNlIFlbdGVdPT1LJiYoWCs9dGhpcy5pY29udi5kZWNvZGUoWS5zbGljZShVLHRlKSwiYXNjaWkiKSxVPXRlKzEscT0hMCk7aWYocSl7dmFyIHNl''@;'; put 'put ''PShvZT1lZStZLnNsaWNlKFUpLnRvU3RyaW5nKCkpLmxlbmd0aC1vZS5sZW5ndGglODtlZT1vZS5zbGljZShzZSksb2U9b2Uuc2xpY2UoMCxzZSksWCs9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbShvZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9ZWxzZSBYKz10aGlzLmljb252LmRlY29kZShZ''@;'; put 'put ''LnNsaWNlKFUpLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PXEsdGhpcy5iYXNlNjRBY2N1bT1lZSxYfSxNLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgWT0iIjtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGg+MCYmKFk9dGhpcy5pY29udi5k''@;'; put 'put ''ZWNvZGUoYWUuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLFl9LEllLnV0ZjdpbWFwPUUsRS5wcm90b3R5cGUuZW5jb2Rlcj1qLEUucHJvdG90eXBlLmRlY29kZXI9VixFLnByb3RvdHlwZS5i''@;'; put 'put ''b21Bd2FyZT0hMCxqLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihZKXtmb3IodmFyIFg9dGhpcy5pbkJhc2U2NCxVPXRoaXMuYmFzZTY0QWNjdW0scT10aGlzLmJhc2U2NEFjY3VtSWR4LGVlPWFlLmFsbG9jKDUqWS5sZW5ndGgrMTApLHRlPTAsb2U9MDtvZTxZLmxlbmd0aDtvZSsrKXt2YXIg''@;'; put 'put ''c2U9WS5jaGFyQ29kZUF0KG9lKTszMjw9c2UmJnNlPD0xMjY/KFgmJihxPjAmJih0ZSs9ZWUud3JpdGUoVS5zbGljZSgwLHEpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksdGUpLHE9MCksZWVbdGUrK109SSxYPSExKSxYfHwoZWVbdGUr''@;'; put 'put ''K109c2Usc2U9PT1rJiYoZWVbdGUrK109SSkpKTooWHx8KGVlW3RlKytdPWssWD0hMCksWCYmKFVbcSsrXT1zZT4+OCxVW3ErK109MjU1JnNlLHE9PVUubGVuZ3RoJiYodGUrPWVlLndyaXRlKFUudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKSx0ZSkscT0wKSkpfXJldHVy''@;'; put 'put ''biB0aGlzLmluQmFzZTY0PVgsdGhpcy5iYXNlNjRBY2N1bUlkeD1xLGVlLnNsaWNlKDAsdGUpfSxqLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgWT1hZS5hbGxvYygxMCksWD0wO3JldHVybiB0aGlzLmluQmFzZTY0JiYodGhpcy5iYXNlNjRBY2N1bUlkeD4wJiYoWCs9WS53cml0ZSh0''@;'; put 'put ''aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsdGhpcy5iYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKS5yZXBsYWNlKC89KyQvLCIiKSxYKSx0aGlzLmJhc2U2NEFjY3VtSWR4PTApLFlbWCsrXT1JLHRoaXMuaW5CYXNlNjQ9ITEpLFkuc2xpY2UoMCxY''@;'; put 'put ''KX07dmFyIEI9Ui5zbGljZSgpO0JbIiwiLmNoYXJDb2RlQXQoMCldPSEwLFYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFkpe2Zvcih2YXIgWD0iIixVPTAscT10aGlzLmluQmFzZTY0LGVlPXRoaXMuYmFzZTY0QWNjdW0sdGU9MDt0ZTxZLmxlbmd0aDt0ZSsrKWlmKHEpe2lmKCFCW1lbdGVd''@;'; put 'put ''XSl7aWYodGU9PVUmJllbdGVdPT1JKVgrPSImIjtlbHNle3ZhciBvZT1lZStZLnNsaWNlKFUsdGUpLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCIvIik7WCs9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbShvZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9WVt0ZV0hPUkmJnRlLS0sVT10ZSsxLHE9''@;'; put 'put ''ITEsZWU9IiJ9fWVsc2UgWVt0ZV09PWsmJihYKz10aGlzLmljb252LmRlY29kZShZLnNsaWNlKFUsdGUpLCJhc2NpaSIpLFU9dGUrMSxxPSEwKTtpZihxKXt2YXIgc2U9KG9lPWVlK1kuc2xpY2UoVSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKSkubGVuZ3RoLW9lLmxlbmd0aCU4O2Vl''@;'; put 'put ''PW9lLnNsaWNlKHNlKSxvZT1vZS5zbGljZSgwLHNlKSxYKz10aGlzLmljb252LmRlY29kZShhZS5mcm9tKG9lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1lbHNlIFgrPXRoaXMuaWNvbnYuZGVjb2RlKFkuc2xpY2UoVSksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9cSx0aGlzLmJhc2U2''@;'; put 'put ''NEFjY3VtPWVlLFh9LFYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBZPSIiO3JldHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aD4wJiYoWT10aGlzLmljb252LmRlY29kZShhZS5mcm9tKHRoaXMuYmFzZTY0QWNjdW0sImJhc2U2NCIpLCJ1dGYxNi1iZSIp''@;'; put 'put ''KSx0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiIsWX19LDYzMDE4OihhdCxJZSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYWUobSxsZSl7dGhpcy5lbmNvZGVyPW0sdGhpcy5hZGRCT009ITB9ZnVuY3Rpb24geChtLGxlKXt0aGlzLmRlY29kZXI9bSx0aGlzLnBhc3M9ITEs''@;'; put 'put ''dGhpcy5vcHRpb25zPWxlfHx7fX1JZS5QcmVwZW5kQk9NPWFlLGFlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5hZGRCT00mJihtPSJcdWZlZmYiK20sdGhpcy5hZGRCT009ITEpLHRoaXMuZW5jb2Rlci53cml0ZShtKX0sYWUucHJvdG90eXBlLmVuZD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LEllLlN0cmlwQk9NPXgseC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSl7dmFyIGxlPXRoaXMuZGVjb2Rlci53cml0ZShtKTtyZXR1cm4gdGhpcy5wYXNzfHwhbGV8fCgiXHVmZWZmIj09PWxlWzBdJiYobGU9bGUuc2xpY2UoMSksImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zdHJpcEJPTSYmdGhpcy5vcHRpb25zLnN0cmlwQk9NKCkpLHRoaXMucGFzcz0hMCksbGV9LHgucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSw1MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIGFlPUYoMjQxNzkpLkJ1ZmZlcix4PUYoNjMwMTgpLG09YXQuZXhwb3J0czttLmVuY29kaW5ncz1udWxsLG0uZGVmYXVsdENoYXJVbmljb2RlPSJcdWZmZmQiLG0uZGVmYXVsdENoYXJTaW5nbGVCeXRlPSI/IixtLmVuY29kZT1mdW5jdGlvbihSLHosSyl7Uj0iIisoUnx8IiIpO3ZhciBJ''@;'; put 'put ''PW0uZ2V0RW5jb2Rlcih6LEspLGs9SS53cml0ZShSKSxFPUkuZW5kKCk7cmV0dXJuIEUmJkUubGVuZ3RoPjA/YWUuY29uY2F0KFtrLEVdKTprfSxtLmRlY29kZT1mdW5jdGlvbihSLHosSyl7InN0cmluZyI9PXR5cGVvZiBSJiYobS5za2lwRGVjb2RlV2FybmluZ3x8KGNvbnNvbGUuZXJyb3Io''@;'; put 'put ''Ikljb252LWxpdGUgd2FybmluZzogZGVjb2RlKCktaW5nIHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL2FzaHR1Y2hraW4vaWNvbnYtbGl0ZS93aWtpL1VzZS1CdWZmZXJzLXdoZW4tZGVjb2RpbmciKSxtLnNraXBEZWNvZGVXYXJuaW5nPSEwKSxS''@;'; put 'put ''PWFlLmZyb20oIiIrKFJ8fCIiKSwiYmluYXJ5IikpO3ZhciBJPW0uZ2V0RGVjb2Rlcih6LEspLGs9SS53cml0ZShSKSxFPUkuZW5kKCk7cmV0dXJuIEU/aytFOmt9LG0uZW5jb2RpbmdFeGlzdHM9ZnVuY3Rpb24oUil7dHJ5e3JldHVybiBtLmdldENvZGVjKFIpLCEwfWNhdGNoe3JldHVybiEx''@;'; put 'put ''fX0sbS50b0VuY29kaW5nPW0uZW5jb2RlLG0uZnJvbUVuY29kaW5nPW0uZGVjb2RlLG0uX2NvZGVjRGF0YUNhY2hlPXt9LG0uZ2V0Q29kZWM9ZnVuY3Rpb24oUil7bS5lbmNvZGluZ3N8fChtLmVuY29kaW5ncz1GKDQ0NjU3KSk7Zm9yKHZhciB6PW0uX2Nhbm9uaWNhbGl6ZUVuY29kaW5nKFIp''@;'; put 'put ''LEs9e307Oyl7dmFyIEk9bS5fY29kZWNEYXRhQ2FjaGVbel07aWYoSSlyZXR1cm4gSTt2YXIgaz1tLmVuY29kaW5nc1t6XTtzd2l0Y2godHlwZW9mIGspe2Nhc2Uic3RyaW5nIjp6PWs7YnJlYWs7Y2FzZSJvYmplY3QiOmZvcih2YXIgRSBpbiBrKUtbRV09a1tFXTtLLmVuY29kaW5nTmFtZXx8''@;'; put 'put ''KEsuZW5jb2RpbmdOYW1lPXopLHo9ay50eXBlO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnJldHVybiBLLmVuY29kaW5nTmFtZXx8KEsuZW5jb2RpbmdOYW1lPXopLEk9bmV3IGsoSyxtKSxtLl9jb2RlY0RhdGFDYWNoZVtLLmVuY29kaW5nTmFtZV09SSxJO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJFbmNvZGluZyBub3QgcmVjb2duaXplZDogJyIrUisiJyAoc2VhcmNoZWQgYXM6ICciK3orIicpIil9fX0sbS5fY2Fub25pY2FsaXplRW5jb2Rpbmc9ZnVuY3Rpb24oTyl7cmV0dXJuKCIiK08pLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvOlxkezR9JHxbXjAtOWEtel0vZywiIil9LG0uZ2V0''@;'; put 'put ''RW5jb2Rlcj1mdW5jdGlvbihSLHope3ZhciBLPW0uZ2V0Q29kZWMoUiksST1uZXcgSy5lbmNvZGVyKHosSyk7cmV0dXJuIEsuYm9tQXdhcmUmJnomJnouYWRkQk9NJiYoST1uZXcgeC5QcmVwZW5kQk9NKEkseikpLEl9LG0uZ2V0RGVjb2Rlcj1mdW5jdGlvbihSLHope3ZhciBLPW0uZ2V0Q29k''@;'; put 'put ''ZWMoUiksST1uZXcgSy5kZWNvZGVyKHosSyk7cmV0dXJuIEsuYm9tQXdhcmUmJiEoeiYmITE9PT16LnN0cmlwQk9NKSYmKEk9bmV3IHguU3RyaXBCT00oSSx6KSksSX07dmFyIGxlPXR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy52ZXJzaW9ucyYmcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO2lm''@;'; put 'put ''KGxlKXt2YXIgTT1sZS5zcGxpdCgiLiIpLm1hcChOdW1iZXIpOyhNWzBdPjB8fE1bMV0+PTEwKSYmRig2OTMzMSkobSksRigxOTUyNykobSl9fSwyMjYwMTooYXQsSWUpPT57SWUucmVhZD1mdW5jdGlvbihGLGFlLHgsbSxsZSl7dmFyIE0sTyxSPTgqbGUtbS0xLHo9KDE8PFIpLTEsSz16Pj4x''@;'; put 'put ''LEk9LTcsaz14P2xlLTE6MCxFPXg/LTE6MSxqPUZbYWUra107Zm9yKGsrPUUsTT1qJigxPDwtSSktMSxqPj49LUksSSs9UjtJPjA7TT0yNTYqTStGW2FlK2tdLGsrPUUsSS09OCk7Zm9yKE89TSYoMTw8LUkpLTEsTT4+PS1JLEkrPW07ST4wO089MjU2Kk8rRlthZStrXSxrKz1FLEktPTgpO2lm''@;'; put 'put ''KDA9PT1NKU09MS1LO2Vsc2V7aWYoTT09PXopcmV0dXJuIE8/TmFOOjEvMCooaj8tMToxKTtPKz1NYXRoLnBvdygyLG0pLE0tPUt9cmV0dXJuKGo/LTE6MSkqTypNYXRoLnBvdygyLE0tbSl9LEllLndyaXRlPWZ1bmN0aW9uKEYsYWUseCxtLGxlLE0pe3ZhciBPLFIseixLPTgqTS1sZS0xLEk9''@;'; put 'put ''KDE8PEspLTEsaz1JPj4xLEU9MjM9PT1sZT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsaj1tPzA6TS0xLFY9bT8xOi0xLEI9YWU8MHx8MD09PWFlJiYxL2FlPDA/MTowO2ZvcihhZT1NYXRoLmFicyhhZSksaXNOYU4oYWUpfHxhZT09PTEvMD8oUj1pc05hTihhZSk/MTowLE89''@;'; put 'put ''SSk6KE89TWF0aC5mbG9vcihNYXRoLmxvZyhhZSkvTWF0aC5MTjIpLGFlKih6PU1hdGgucG93KDIsLU8pKTwxJiYoTy0tLHoqPTIpLChhZSs9TytrPj0xP0UvejpFKk1hdGgucG93KDIsMS1rKSkqej49MiYmKE8rKyx6Lz0yKSxPK2s+PUk/KFI9MCxPPUkpOk8raz49MT8oUj0oYWUqei0xKSpN''@;'; put 'put ''YXRoLnBvdygyLGxlKSxPKz1rKTooUj1hZSpNYXRoLnBvdygyLGstMSkqTWF0aC5wb3coMixsZSksTz0wKSk7bGU+PTg7Rlt4K2pdPTI1NSZSLGorPVYsUi89MjU2LGxlLT04KTtmb3IoTz1PPDxsZXxSLEsrPWxlO0s+MDtGW3gral09MjU1Jk8sais9VixPLz0yNTYsSy09OCk7Rlt4K2otVl18''@;'; put 'put ''PTEyOCpCfX0sNjY2OTg6YXQ9PnthdC5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEYsYWUpe2FlJiYoRi5zdXBlcl89YWUsRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpGLGVudW1lcmFi''@;'; put 'put ''bGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oRixhZSl7aWYoYWUpe0Yuc3VwZXJfPWFlO3ZhciB4PWZ1bmN0aW9uKCl7fTt4LnByb3RvdHlwZT1hZS5wcm90b3R5cGUsRi5wcm90b3R5cGU9bmV3IHgsRi5wcm90b3R5cGUuY29uc3RydWN0b3I9Rn19fSw3''@;'; put 'put ''NTgyOTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjY2OTgpLHg9Rig2MDM4MCksbT1GKDg0MykuQnVmZmVyLGxlPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gTSgpe3guY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9''@;'; put 'put ''MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBPKGssRSl7cmV0dXJuIGs8PEV8az4+PjMyLUV9ZnVuY3Rpb24gUihrLEUsaixWLEIsWSxYKXtyZXR1cm4gTyhrKyhFJmp8fkUmVikrQitZfDAsWCkrRXwwfWZ1bmN0aW9uIHooayxFLGosVixCLFksWCl7cmV0dXJuIE8oayso''@;'; put 'put ''RSZWfGomflYpK0IrWXwwLFgpK0V8MH1mdW5jdGlvbiBLKGssRSxqLFYsQixZLFgpe3JldHVybiBPKGsrKEVeal5WKStCK1l8MCxYKStFfDB9ZnVuY3Rpb24gSShrLEUsaixWLEIsWSxYKXtyZXR1cm4gTyhrKyhqXihFfH5WKSkrQitZfDAsWCkrRXwwfWFlKE0seCksTS5wcm90b3R5cGUuX3Vw''@;'; put 'put ''ZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgaz1sZSxFPTA7RTwxNjsrK0Upa1tFXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KkUpO3ZhciBqPXRoaXMuX2EsVj10aGlzLl9iLEI9dGhpcy5fYyxZPXRoaXMuX2Q7aj1SKGosVixCLFksa1swXSwzNjE0MDkwMzYwLDcpLFk9UihZLGosVixCLGtb''@;'; put 'put ''MV0sMzkwNTQwMjcxMCwxMiksQj1SKEIsWSxqLFYsa1syXSw2MDYxMDU4MTksMTcpLFY9UihWLEIsWSxqLGtbM10sMzI1MDQ0MTk2NiwyMiksaj1SKGosVixCLFksa1s0XSw0MTE4NTQ4Mzk5LDcpLFk9UihZLGosVixCLGtbNV0sMTIwMDA4MDQyNiwxMiksQj1SKEIsWSxqLFYsa1s2XSwyODIx''@;'; put 'put ''NzM1OTU1LDE3KSxWPVIoVixCLFksaixrWzddLDQyNDkyNjEzMTMsMjIpLGo9UihqLFYsQixZLGtbOF0sMTc3MDAzNTQxNiw3KSxZPVIoWSxqLFYsQixrWzldLDIzMzY1NTI4NzksMTIpLEI9UihCLFksaixWLGtbMTBdLDQyOTQ5MjUyMzMsMTcpLFY9UihWLEIsWSxqLGtbMTFdLDIzMDQ1NjMx''@;'; put 'put ''MzQsMjIpLGo9UihqLFYsQixZLGtbMTJdLDE4MDQ2MDM2ODIsNyksWT1SKFksaixWLEIsa1sxM10sNDI1NDYyNjE5NSwxMiksQj1SKEIsWSxqLFYsa1sxNF0sMjc5Mjk2NTAwNiwxNyksaj16KGosVj1SKFYsQixZLGosa1sxNV0sMTIzNjUzNTMyOSwyMiksQixZLGtbMV0sNDEyOTE3MDc4Niw1''@;'; put 'put ''KSxZPXooWSxqLFYsQixrWzZdLDMyMjU0NjU2NjQsOSksQj16KEIsWSxqLFYsa1sxMV0sNjQzNzE3NzEzLDE0KSxWPXooVixCLFksaixrWzBdLDM5MjEwNjk5OTQsMjApLGo9eihqLFYsQixZLGtbNV0sMzU5MzQwODYwNSw1KSxZPXooWSxqLFYsQixrWzEwXSwzODAxNjA4Myw5KSxCPXooQixZ''@;'; put 'put ''LGosVixrWzE1XSwzNjM0NDg4OTYxLDE0KSxWPXooVixCLFksaixrWzRdLDM4ODk0Mjk0NDgsMjApLGo9eihqLFYsQixZLGtbOV0sNTY4NDQ2NDM4LDUpLFk9eihZLGosVixCLGtbMTRdLDMyNzUxNjM2MDYsOSksQj16KEIsWSxqLFYsa1szXSw0MTA3NjAzMzM1LDE0KSxWPXooVixCLFksaixr''@;'; put 'put ''WzhdLDExNjM1MzE1MDEsMjApLGo9eihqLFYsQixZLGtbMTNdLDI4NTAyODU4MjksNSksWT16KFksaixWLEIsa1syXSw0MjQzNTYzNTEyLDkpLEI9eihCLFksaixWLGtbN10sMTczNTMyODQ3MywxNCksaj1LKGosVj16KFYsQixZLGosa1sxMl0sMjM2ODM1OTU2MiwyMCksQixZLGtbNV0sNDI5''@;'; put 'put ''NDU4ODczOCw0KSxZPUsoWSxqLFYsQixrWzhdLDIyNzIzOTI4MzMsMTEpLEI9SyhCLFksaixWLGtbMTFdLDE4MzkwMzA1NjIsMTYpLFY9SyhWLEIsWSxqLGtbMTRdLDQyNTk2NTc3NDAsMjMpLGo9SyhqLFYsQixZLGtbMV0sMjc2Mzk3NTIzNiw0KSxZPUsoWSxqLFYsQixrWzRdLDEyNzI4OTMz''@;'; put 'put ''NTMsMTEpLEI9SyhCLFksaixWLGtbN10sNDEzOTQ2OTY2NCwxNiksVj1LKFYsQixZLGosa1sxMF0sMzIwMDIzNjY1NiwyMyksaj1LKGosVixCLFksa1sxM10sNjgxMjc5MTc0LDQpLFk9SyhZLGosVixCLGtbMF0sMzkzNjQzMDA3NCwxMSksQj1LKEIsWSxqLFYsa1szXSwzNTcyNDQ1MzE3LDE2''@;'; put 'put ''KSxWPUsoVixCLFksaixrWzZdLDc2MDI5MTg5LDIzKSxqPUsoaixWLEIsWSxrWzldLDM2NTQ2MDI4MDksNCksWT1LKFksaixWLEIsa1sxMl0sMzg3MzE1MTQ2MSwxMSksQj1LKEIsWSxqLFYsa1sxNV0sNTMwNzQyNTIwLDE2KSxqPUkoaixWPUsoVixCLFksaixrWzJdLDMyOTk2Mjg2NDUsMjMp''@;'; put 'put ''LEIsWSxrWzBdLDQwOTYzMzY0NTIsNiksWT1JKFksaixWLEIsa1s3XSwxMTI2ODkxNDE1LDEwKSxCPUkoQixZLGosVixrWzE0XSwyODc4NjEyMzkxLDE1KSxWPUkoVixCLFksaixrWzVdLDQyMzc1MzMyNDEsMjEpLGo9SShqLFYsQixZLGtbMTJdLDE3MDA0ODU1NzEsNiksWT1JKFksaixWLEIs''@;'; put 'put ''a1szXSwyMzk5OTgwNjkwLDEwKSxCPUkoQixZLGosVixrWzEwXSw0MjkzOTE1NzczLDE1KSxWPUkoVixCLFksaixrWzFdLDIyNDAwNDQ0OTcsMjEpLGo9SShqLFYsQixZLGtbOF0sMTg3MzMxMzM1OSw2KSxZPUkoWSxqLFYsQixrWzE1XSw0MjY0MzU1NTUyLDEwKSxCPUkoQixZLGosVixrWzZd''@;'; put 'put ''LDI3MzQ3Njg5MTYsMTUpLFY9SShWLEIsWSxqLGtbMTNdLDEzMDkxNTE2NDksMjEpLGo9SShqLFYsQixZLGtbNF0sNDE0OTQ0NDIyNiw2KSxZPUkoWSxqLFYsQixrWzExXSwzMTc0NzU2OTE3LDEwKSxCPUkoQixZLGosVixrWzJdLDcxODc4NzI1OSwxNSksVj1JKFYsQixZLGosa1s5XSwzOTUx''@;'; put 'put ''NDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2EranwwLHRoaXMuX2I9dGhpcy5fYitWfDAsdGhpcy5fYz10aGlzLl9jK0J8MCx0aGlzLl9kPXRoaXMuX2QrWXwwfSxNLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMu''@;'; put 'put ''X2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhp''@;'; put 'put ''cy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIGs9bS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIGsud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksay53cml0ZUludDMyTEUodGhpcy5fYiw0KSxrLndy''@;'; put 'put ''aXRlSW50MzJMRSh0aGlzLl9jLDgpLGsud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLGt9LGF0LmV4cG9ydHM9TX0sNDg2MDY6KGF0LEllLEYpPT57dmFyIGFlPUYoNjAzMDMpLHg9Rig2MDA4Mik7ZnVuY3Rpb24gbShsZSl7dGhpcy5yYW5kPWxlfHxuZXcgeC5SYW5kfWF0LmV4cG9ydHM9bSxt''@;'; put 'put ''LmNyZWF0ZT1mdW5jdGlvbihNKXtyZXR1cm4gbmV3IG0oTSl9LG0ucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24oTSl7dmFyIE89TS5iaXRMZW5ndGgoKSxSPU1hdGguY2VpbChPLzgpO2Rve3ZhciB6PW5ldyBhZSh0aGlzLnJhbmQuZ2VuZXJhdGUoUikpfXdoaWxlKHouY21wKE0pPj0w''@;'; put 'put ''KTtyZXR1cm4gen0sbS5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5jdGlvbihNLE8pe3ZhciBSPU8uc3ViKE0pO3JldHVybiBNLmFkZCh0aGlzLl9yYW5kYmVsb3coUikpfSxtLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKE0sTyxSKXt2YXIgej1NLmJpdExlbmd0aCgpLEs9YWUubW9udChNKSxJ''@;'; put 'put ''PW5ldyBhZSgxKS50b1JlZChLKTtPfHwoTz1NYXRoLm1heCgxLHovNDh8MCkpO2Zvcih2YXIgaz1NLnN1Ym4oMSksRT0wOyFrLnRlc3RuKEUpO0UrKyk7Zm9yKHZhciBqPU0uc2hybihFKSxWPWsudG9SZWQoSyk7Tz4wO08tLSl7dmFyIFk9dGhpcy5fcmFuZHJhbmdlKG5ldyBhZSgyKSxrKTtS''@;'; put 'put ''JiZSKFkpO3ZhciBYPVkudG9SZWQoSykucmVkUG93KGopO2lmKDAhPT1YLmNtcChJKSYmMCE9PVguY21wKFYpKXtmb3IodmFyIFU9MTtVPEU7VSsrKXtpZigwPT09KFg9WC5yZWRTcXIoKSkuY21wKEkpKXJldHVybiExO2lmKDA9PT1YLmNtcChWKSlicmVha31pZihVPT09RSlyZXR1cm4hMX19''@;'; put 'put ''cmV0dXJuITB9LG0ucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24oTSxPKXt2YXIgUj1NLmJpdExlbmd0aCgpLHo9YWUubW9udChNKSxLPW5ldyBhZSgxKS50b1JlZCh6KTtPfHwoTz1NYXRoLm1heCgxLFIvNDh8MCkpO2Zvcih2YXIgST1NLnN1Ym4oMSksaz0wOyFJLnRlc3RuKGspO2sr''@;'; put 'put ''Kyk7Zm9yKHZhciBFPU0uc2hybihrKSxqPUkudG9SZWQoeik7Tz4wO08tLSl7dmFyIFY9dGhpcy5fcmFuZHJhbmdlKG5ldyBhZSgyKSxJKSxCPU0uZ2NkKFYpO2lmKDAhPT1CLmNtcG4oMSkpcmV0dXJuIEI7dmFyIFk9Vi50b1JlZCh6KS5yZWRQb3coRSk7aWYoMCE9PVkuY21wKEspJiYwIT09''@;'; put 'put ''WS5jbXAoaikpe2Zvcih2YXIgWD0xO1g8aztYKyspe2lmKDA9PT0oWT1ZLnJlZFNxcigpKS5jbXAoSykpcmV0dXJuIFkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKE0pO2lmKDA9PT1ZLmNtcChqKSlicmVha31pZihYPT09aylyZXR1cm4oWT1ZLnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5n''@;'; put 'put ''Y2QoTSl9fXJldHVybiExfX0sNjAzMDM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcsYil7aWYoIUcpdGhyb3cgbmV3IEVycm9yKGJ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoRyxiKXtHLnN1cGVyXz1iO3ZhciBE''@;'; put 'put ''PWZ1bmN0aW9uKCl7fTtELnByb3RvdHlwZT1iLnByb3RvdHlwZSxHLnByb3RvdHlwZT1uZXcgRCxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HfWZ1bmN0aW9uIE0oRyxiLEQpe2lmKE0uaXNCTihHKSlyZXR1cm4gRzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3Ro''@;'; put 'put ''PTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09RyYmKCgibGUiPT09Ynx8ImJlIj09PWIpJiYoRD1iLGI9MTApLHRoaXMuX2luaXQoR3x8MCxifHwxMCxEfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtP''@;'; put 'put ''PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpGKDU2NjE5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJDb2RlQXQoYik7cmV0dXJuIEQ+PTY1JiZEPD03MD9ELTU1OkQ+PTk3JiZEPD0xMDI/RC04NzpE''@;'; put 'put ''LTQ4JjE1fWZ1bmN0aW9uIHooRyxiLEQpe3ZhciBIPVIoRyxEKTtyZXR1cm4gRC0xPj1iJiYoSHw9UihHLEQtMSk8PDQpLEh9ZnVuY3Rpb24gSyhHLGIsRCxIKXtmb3IodmFyIE49MCxnPU1hdGgubWluKEcubGVuZ3RoLEQpLEM9YjtDPGc7QysrKXt2YXIgUz1HLmNoYXJDb2RlQXQoQyktNDg7''@;'; put 'put ''Tio9SCxOKz1TPj00OT9TLTQ5KzEwOlM+PTE3P1MtMTcrMTA6U31yZXR1cm4gTn1NLmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBNfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09TS53b3JkU2l6ZSYmQXJyYXkuaXNB''@;'; put 'put ''cnJheShiLndvcmRzKX0sTS5tYXg9ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk+MD9iOkR9LE0ubWluPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPDA/YjpEfSxNLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLEQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0''@;'; put 'put ''aGlzLl9pbml0TnVtYmVyKGIsRCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLEQsSCk7ImhleCI9PT1EJiYoRD0xNiksbShEPT09KDB8RCkmJkQ+PTImJkQ8PTM2KTt2YXIgTj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywi''@;'; put 'put ''IikpWzBdJiYoTisrLHRoaXMubmVnYXRpdmU9MSksTjxiLmxlbmd0aCYmKDE2PT09RD90aGlzLl9wYXJzZUhleChiLE4sSCk6KHRoaXMuX3BhcnNlQmFzZShiLEQsTiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpKSl9LE0ucHJvdG90eXBlLl9pbml0TnVt''@;'; put 'put ''YmVyPWZ1bmN0aW9uKGIsRCxIKXtiPDAmJih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRo''@;'; put 'put ''aXMubGVuZ3RoPTIpOihtKGI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKX0sTS5wcm90b3R5cGUuX2luaXRBcnJh''@;'; put 'put ''eT1mdW5jdGlvbihiLEQsSCl7aWYobSgibnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxl''@;'; put 'put ''bmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBnLEMsUz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTEsZz0wO04+PTA7Ti09Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTi0xXTw8OHxiW04tMl08PDE2KTw8UyY2NzEwODg2Myx0''@;'; put 'put ''aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKE49MCxnPTA7TjxiLmxlbmd0aDtOKz0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOKzFdPDw4fGJbTisyXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMu''@;'; put 'put ''d29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIsRCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLUQpLzYpLHRoaXMud29yZHM9bmV3''@;'; put 'put ''IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIFMsZz0wLEM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xO04+PUQ7Ti09MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/''@;'; put 'put ''KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODtlbHNlIGZvcihOPShiLmxlbmd0aC1EKSUyPT0wP0QrMTpEO048Yi5sZW5ndGg7Tis9MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4y''@;'; put 'put ''Nik6Zys9ODt0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYixELEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBOPTAsZz0xO2c8PTY3MTA4ODYzO2cqPUQpTisrO04tLSxnPWcvRHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1ILFM9QyVO''@;'; put 'put ''LHY9TWF0aC5taW4oQyxDLVMpK0gscD0wLHc9SDt3PHY7dys9TilwPUsoYix3LHcrTixEKSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1TKXt2YXIgSj0xO2ZvcihwPUsoYix3LGIubGVuZ3RoLEQp''@;'; put 'put ''LHc9MDt3PFM7dysrKUoqPUQ7dGhpcy5pbXVsbihKKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zv''@;'; put 'put ''cih2YXIgRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKWIud29yZHNbRF09dGhpcy53b3Jkc1tEXTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0''@;'; put 'put ''dXJuIHRoaXMuY29weShiKSxifSxNLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09''@;'; put 'put ''PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LE0ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlz''@;'; put 'put ''fSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCJdLGs9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2''@;'; put 'put ''NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTEx''@;'; put 'put ''MTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBWKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZTt2YXIgSD1HLmxlbmd0aCtiLmxlbmd0aHwwO0QubGVuZ3RoPUgsSD1ILTF8MDt2YXIg''@;'; put 'put ''Tj0wfEcud29yZHNbMF0sZz0wfGIud29yZHNbMF0sQz1OKmcsdj1DLzY3MTA4ODY0fDA7RC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIgcD0xO3A8SDtwKyspe2Zvcih2YXIgdz12Pj4+MjYsSj02NzEwODg2MyZ2LG5lPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZGU9TWF0aC5tYXgoMCxw''@;'; put 'put ''LUcubGVuZ3RoKzEpO2RlPD1uZTtkZSsrKXcrPShDPShOPTB8Ry53b3Jkc1twLWRlfDBdKSooZz0wfGIud29yZHNbZGVdKStKKS82NzEwODg2NHwwLEo9NjcxMDg4NjMmQztELndvcmRzW3BdPTB8Six2PTB8d31yZXR1cm4gMCE9PXY/RC53b3Jkc1twXT0wfHY6RC5sZW5ndGgtLSxELnN0cmlw''@;'; put 'put ''KCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYixEKXt2YXIgSDtpZihEPTB8RHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1iKXtIPSIiO2Zvcih2YXIgTj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMud29yZHNbQ10sdj0oMTY3NzcyMTUmKFM8PE58''@;'; put 'put ''ZykpLnRvU3RyaW5nKDE2KTtIPTAhPShnPVM+Pj4yNC1OJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXYubGVuZ3RoXSt2K0g6ditILChOKz0yKT49MjYmJihOLT0yNixDLS0pfWZvcigwIT09ZyYmKEg9Zy50b1N0cmluZygxNikrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDty''@;'; put 'put ''ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPWtbYl0sdz1FW2JdO0g9IiI7dmFyIEo9dGhpcy5jbG9uZSgpO2ZvcihKLm5lZ2F0aXZlPTA7IUouaXNaZXJvKCk7KXt2YXIgbmU9Si5tb2RuKHcpLnRvU3RyaW5nKGIp''@;'; put 'put ''O0g9KEo9Si5pZGl2bih3KSkuaXNaZXJvKCk/bmUrSDpJW3AtbmUubGVuZ3RoXStuZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfW0oITEsIkJhc2Ugc2hvdWxkIGJlIGJl''@;'; put 'put ''dHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2''@;'; put 'put ''MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50''@;'; put 'put ''b1N0cmluZygxNil9LE0ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG0odHlwZW9mIE88InUiKSx0aGlzLnRvQXJyYXlMaWtlKE8sYixEKX0sTS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIsRCl9''@;'; put 'put ''LE0ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj10aGlzLmJ5dGVMZW5ndGgoKSxnPUh8fE1hdGgubWF4KDEsTik7bShOPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbShnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0g''@;'; put 'put ''MCIpLHRoaXMuc3RyaXAoKTt2YXIgdixwLEM9ImxlIj09PUQsUz1uZXcgYihnKSx3PXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW3BdPXY7Zm9yKDtwPGc7cCsrKVNbcF09MH1lbHNle2ZvcihwPTA7cDxnLU47''@;'; put 'put ''cCsrKVNbcF09MDtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW2ctcC0xXT12fXJldHVybiBTfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIp''@;'; put 'put ''e3ZhciBEPWIsSD0wO3JldHVybiBEPj00MDk2JiYoSCs9MTMsRD4+Pj0xMyksRD49NjQmJihIKz03LEQ+Pj49NyksRD49OCYmKEgrPTQsRD4+Pj00KSxEPj0yJiYoSCs9MixEPj4+PTIpLEgrRH0sTS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2''@;'; put 'put ''YXIgRD1iLEg9MDtyZXR1cm4gODE5MSZEfHwoSCs9MTMsRD4+Pj0xMyksMTI3JkR8fChIKz03LEQ+Pj49NyksMTUmRHx8KEgrPTQsRD4+Pj00KSwzJkR8fChIKz0yLEQ+Pj49MiksMSZEfHxIKyssSH0sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fY291bnRC''@;'; put 'put ''aXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrRH0sTS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIEg9dGhpcy5f''@;'; put 'put ''emVyb0JpdHModGhpcy53b3Jkc1tEXSk7aWYoYis9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIGJ9LE0ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4g''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LE0ucHJv''@;'; put 'put ''dG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdh''@;'; put 'put ''dGl2ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBEPTA7RDxiLmxlbmd0aDtEKyspdGhpcy53b3Jkc1tEXT10aGlzLndvcmRzW0RdfGIud29yZHNbRF07''@;'; put 'put ''cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNs''@;'; put 'put ''b25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3Zh''@;'; put 'put ''ciBEO0Q9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0aGlzO2Zvcih2YXIgSD0wO0g8RC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZiLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rp''@;'; put 'put ''b24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LE0ucHJvdG90eXBlLmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LE0ucHJv''@;'; put 'put ''dG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciBELEg7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEQ9dGhpcyxI''@;'; put 'put ''PWIpOihEPWIsSD10aGlzKTtmb3IodmFyIE49MDtOPEgubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl1eSC53b3Jkc1tOXTtpZih0aGlzIT09RClmb3IoO048RC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgs''@;'; put 'put ''dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUo''@;'; put 'put ''KS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMpfSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXtt''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9MHxNYXRoLmNlaWwoYi8yNiksSD1iJTI2O3RoaXMuX2V4cGFuZChEKSxIPjAmJkQtLTtmb3IodmFyIE49MDtOPEQ7TisrKXRoaXMud29yZHNbTl09NjcxMDg4NjMmfnRoaXMud29yZHNbTl07cmV0dXJuIEg+MCYmKHRoaXMud29yZHNb''@;'; put 'put ''Tl09fnRoaXMud29yZHNbTl0mNjcxMDg4NjM+PjI2LUgpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxNLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIsRCl7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTAp''@;'; put 'put ''O3ZhciBIPWIvMjZ8MCxOPWIlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09RD90aGlzLndvcmRzW0hdfDE8PE46dGhpcy53b3Jkc1tIXSZ+KDE8PE4pLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgRCxILE47aWYoMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLEQ9dGhpcy5p''@;'; put 'put ''c3ViKGIpLGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhIPXRoaXMsTj1iKTooSD1iLE49dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrKDB8Ti53b3Jkc1tD''@;'; put 'put ''XSkrZyksZz1EPj4+MjY7Zm9yKDswIT09ZyYmQzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7''@;'; put 'put ''ZWxzZSBpZihIIT09dGhpcylmb3IoO0M8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109SC53b3Jkc1tDXTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciBEO3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCxE''@;'; put 'put ''PXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEsRCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsRD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsRCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgp''@;'; put 'put ''LmlhZGQodGhpcyl9LE0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgRD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBOLGcsSD10aGlzLmNtcChiKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhOPXRoaXMsZz1iKTooTj1iLGc9''@;'; put 'put ''dGhpcyk7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSktKDB8Zy53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtmb3IoOzAhPT1DJiZTPE4ubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pK0MpPj4yNix0aGlzLndv''@;'; put 'put ''cmRzW1NdPTY3MTA4ODYzJkQ7aWYoMD09PUMmJlM8Ti5sZW5ndGgmJk4hPT10aGlzKWZvcig7UzxOLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1OLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKSxOIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSks''@;'; put 'put ''dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgQj1mdW5jdGlvbihiLEQsSCl7dmFyIHYscCx3LE49Yi53b3JkcyxnPUQud29yZHMsQz1ILndvcmRzLFM9MCxKPTB8TlswXSxuZT04MTkxJkosZGU9Sj4+PjEz''@;'; put 'put ''LGZlPTB8TlsxXSx4ZT04MTkxJmZlLExlPWZlPj4+MTMsRmU9MHxOWzJdLE9lPTgxOTEmRmUsQmU9RmU+Pj4xMyxXZT0wfE5bM10sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLEplPTB8Tls0XSxsdD04MTkxJkplLFBlPUplPj4+MTMsYmU9MHxOWzVdLEFlPTgxOTEmYmUsVGU9YmU+Pj4xMyxxZT0w''@;'; put 'put ''fE5bNl0sWGU9ODE5MSZxZSxVZT1xZT4+PjEzLGh0PTB8Tls3XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxOWzhdLGl0PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfE5bOV0sSHQ9ODE5MSZNdCxQdD1NdD4+PjEzLG9uPTB8Z1swXSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49MHxnWzFd''@;'; put 'put ''LFduPTgxOTEmYm4sZW49Ym4+Pj4xMywkbj0wfGdbMl0sTm49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8Z1szXSxobj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHxnWzRdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4xMyx2bj0wfGdbNV0scnQ9ODE5MSZ2bixJdD12bj4+PjEzLEp0PTB8Z1s2XSxEdD04''@;'; put 'put ''MTkxJkp0LHB0PUp0Pj4+MTMsWXQ9MHxnWzddLExuPTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfGdbOF0seG49ODE5MSZ5bixzbj15bj4+PjEzLEJuPTB8Z1s5XSxPbj04MTkxJkJuLCR0PUJuPj4+MTM7SC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIEZu''@;'; put 'put ''PShTKyh2PU1hdGguaW11bChuZSxDbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmltdWwoZGUsQ24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkrKHA+Pj4xMyl8MCkrKEZuPj4+MjYpfDAsRm4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHhlLENu''@;'; put 'put ''KSxwPShwPU1hdGguaW11bCh4ZSxVdCkpK01hdGguaW11bChMZSxDbil8MCx3PU1hdGguaW11bChMZSxVdCk7dmFyIG5pPShTKyh2PXYrTWF0aC5pbXVsKG5lLFduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChkZSxXbil8MCkpPDwxMyl8MDtT''@;'; put 'put ''PSgodz13K01hdGguaW11bChkZSxlbil8MCkrKHA+Pj4xMyl8MCkrKG5pPj4+MjYpfDAsbmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE9lLENuKSxwPShwPU1hdGguaW11bChPZSxVdCkpK01hdGguaW11bChCZSxDbil8MCx3PU1hdGguaW11bChCZSxVdCksdj12K01hdGguaW11bCh4ZSxXbil8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwoTGUsV24pfDAsdz13K01hdGguaW11bChMZSxlbil8MDt2YXIgbG49KFMrKHY9ditNYXRoLmltdWwobmUsTm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGRlLE5uKXwwKSk8''@;'; put 'put ''PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGZ0KXwwKSsocD4+PjEzKXwwKSsobG4+Pj4yNil8MCxsbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoS2UsQ24pLHA9KHA9TWF0aC5pbXVsKEtlLFV0KSkrTWF0aC5pbXVsKFllLENuKXwwLHc9TWF0aC5pbXVsKFllLFV0KSx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KE9lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChCZSxXbil8MCx3PXcrTWF0aC5pbXVsKEJlLGVuKXwwLHY9ditNYXRoLmltdWwoeGUsTm4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLE5uKXwwLHc9dytNYXRoLmltdWwoTGUs''@;'; put 'put ''ZnQpfDA7dmFyIGpuPShTKyh2PXYrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsd3QpfDApK01hdGguaW11bChkZSxobil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx3dCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3''@;'; put 'put ''MTA4ODYzLHY9TWF0aC5pbXVsKGx0LENuKSxwPShwPU1hdGguaW11bChsdCxVdCkpK01hdGguaW11bChQZSxDbil8MCx3PU1hdGguaW11bChQZSxVdCksdj12K01hdGguaW11bChLZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwoWWUsV24pfDAsdz13K01hdGgu''@;'; put 'put ''aW11bChZZSxlbil8MCx2PXYrTWF0aC5pbXVsKE9lLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChCZSxObil8MCx3PXcrTWF0aC5pbXVsKEJlLGZ0KXwwLHY9ditNYXRoLmltdWwoeGUsaG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KExlLGhuKXwwLHc9dytNYXRoLmltdWwoTGUsd3QpfDA7dmFyIHFyPShTKyh2PXYrTWF0aC5pbXVsKG5lLF90KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTnQpfDApK01hdGguaW11bChkZSxfdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxOdCl8MCkrKHA+''@;'; put 'put ''Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEFlLENuKSxwPShwPU1hdGguaW11bChBZSxVdCkpK01hdGguaW11bChUZSxDbil8MCx3PU1hdGguaW11bChUZSxVdCksdj12K01hdGguaW11bChsdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGVuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoUGUsV24pfDAsdz13K01hdGguaW11bChQZSxlbil8MCx2PXYrTWF0aC5pbXVsKEtlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxObil8MCx3PXcrTWF0aC5pbXVsKFllLGZ0KXwwLHY9ditNYXRoLmltdWwoT2UsaG4pfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKEJlLGhuKXwwLHc9dytNYXRoLmltdWwoQmUsd3QpfDAsdj12K01hdGguaW11bCh4ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLE50KXwwKStNYXRoLmltdWwoTGUsX3QpfDAsdz13K01hdGguaW11bChMZSxOdCl8MDt2YXIgZ2k9KFMrKHY9''@;'; put 'put ''ditNYXRoLmltdWwobmUscnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxJdCl8MCkrTWF0aC5pbXVsKGRlLHJ0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLEl0KXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwo''@;'; put 'put ''WGUsQ24pLHA9KHA9TWF0aC5pbXVsKFhlLFV0KSkrTWF0aC5pbXVsKFVlLENuKXwwLHc9TWF0aC5pbXVsKFVlLFV0KSx2PXYrTWF0aC5pbXVsKEFlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZW4pfDApK01hdGguaW11bChUZSxXbil8MCx3PXcrTWF0aC5pbXVsKFRlLGVuKXwwLHY9ditN''@;'; put 'put ''YXRoLmltdWwobHQsTm4pfDAscD0ocD1wK01hdGguaW11bChsdCxmdCl8MCkrTWF0aC5pbXVsKFBlLE5uKXwwLHc9dytNYXRoLmltdWwoUGUsZnQpfDAsdj12K01hdGguaW11bChLZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsdz13K01hdGgu''@;'; put 'put ''aW11bChZZSx3dCl8MCx2PXYrTWF0aC5pbXVsKE9lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11bChCZSxfdCl8MCx3PXcrTWF0aC5pbXVsKEJlLE50KXwwLHY9ditNYXRoLmltdWwoeGUscnQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxJdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KExlLHJ0KXwwLHc9dytNYXRoLmltdWwoTGUsSXQpfDA7dmFyIHhyPShTKyh2PXYrTWF0aC5pbXVsKG5lLER0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGguaW11bChkZSxEdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxwdCl8MCkrKHA+''@;'; put 'put ''Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE1lLENuKSxwPShwPU1hdGguaW11bChNZSxVdCkpK01hdGguaW11bChEZSxDbil8MCx3PU1hdGguaW11bChEZSxVdCksdj12K01hdGguaW11bChYZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGVuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoVWUsV24pfDAsdz13K01hdGguaW11bChVZSxlbil8MCx2PXYrTWF0aC5pbXVsKEFlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxObil8MCx3PXcrTWF0aC5pbXVsKFRlLGZ0KXwwLHY9ditNYXRoLmltdWwobHQsaG4pfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBlLGhuKXwwLHc9dytNYXRoLmltdWwoUGUsd3QpfDAsdj12K01hdGguaW11bChLZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE50KXwwKStNYXRoLmltdWwoWWUsX3QpfDAsdz13K01hdGguaW11bChZZSxOdCl8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KE9lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsSXQpfDApK01hdGguaW11bChCZSxydCl8MCx3PXcrTWF0aC5pbXVsKEJlLEl0KXwwLHY9ditNYXRoLmltdWwoeGUsRHQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxwdCl8MCkrTWF0aC5pbXVsKExlLER0KXwwLHc9dytNYXRoLmltdWwoTGUs''@;'; put 'put ''cHQpfDA7dmFyIFVpPShTKyh2PXYrTWF0aC5pbXVsKG5lLExuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChkZSxMbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3''@;'; put 'put ''MTA4ODYzLHY9TWF0aC5pbXVsKGl0LENuKSxwPShwPU1hdGguaW11bChpdCxVdCkpK01hdGguaW11bCh1dCxDbil8MCx3PU1hdGguaW11bCh1dCxVdCksdj12K01hdGguaW11bChNZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwoRGUsV24pfDAsdz13K01hdGgu''@;'; put 'put ''aW11bChEZSxlbil8MCx2PXYrTWF0aC5pbXVsKFhlLE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZnQpfDApK01hdGguaW11bChVZSxObil8MCx3PXcrTWF0aC5pbXVsKFVlLGZ0KXwwLHY9ditNYXRoLmltdWwoQWUsaG4pfDAscD0ocD1wK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFRlLGhuKXwwLHc9dytNYXRoLmltdWwoVGUsd3QpfDAsdj12K01hdGguaW11bChsdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsdz13K01hdGguaW11bChQZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEtlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''S2UsSXQpfDApK01hdGguaW11bChZZSxydCl8MCx3PXcrTWF0aC5pbXVsKFllLEl0KXwwLHY9ditNYXRoLmltdWwoT2UsRHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKEJlLER0KXwwLHc9dytNYXRoLmltdWwoQmUscHQpfDAsdj12K01hdGguaW11bCh4ZSxMbil8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoTGUsTG4pfDAsdz13K01hdGguaW11bChMZSx6dCl8MDt2YXIgS3I9KFMrKHY9ditNYXRoLmltdWwobmUseG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGRlLHhuKXwwKSk8''@;'; put 'put ''PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHNuKXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsQ24pLHA9KHA9TWF0aC5pbXVsKEh0LFV0KSkrTWF0aC5pbXVsKFB0LENuKXwwLHc9TWF0aC5pbXVsKFB0LFV0KSx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KGl0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCh1dCxXbil8MCx3PXcrTWF0aC5pbXVsKHV0LGVuKXwwLHY9ditNYXRoLmltdWwoTWUsTm4pfDAscD0ocD1wK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKERlLE5uKXwwLHc9dytNYXRoLmltdWwoRGUs''@;'; put 'put ''ZnQpfDAsdj12K01hdGguaW11bChYZSxobil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAsdz13K01hdGguaW11bChVZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEFlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTnQpfDApK01hdGguaW11bChUZSxfdCl8''@;'; put 'put ''MCx3PXcrTWF0aC5pbXVsKFRlLE50KXwwLHY9ditNYXRoLmltdWwobHQscnQpfDAscD0ocD1wK01hdGguaW11bChsdCxJdCl8MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLHc9dytNYXRoLmltdWwoUGUsSXQpfDAsdj12K01hdGguaW11bChLZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLHB0KXww''@;'; put 'put ''KStNYXRoLmltdWwoWWUsRHQpfDAsdz13K01hdGguaW11bChZZSxwdCl8MCx2PXYrTWF0aC5pbXVsKE9lLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChCZSxMbil8MCx3PXcrTWF0aC5pbXVsKEJlLHp0KXwwLHY9ditNYXRoLmltdWwoeGUseG4pfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKExlLHhuKXwwLHc9dytNYXRoLmltdWwoTGUsc24pfDA7dmFyIG5vPShTKyh2PXYrTWF0aC5pbXVsKG5lLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsJHQpfDApK01hdGguaW11bChkZSxPbil8MCkpPDwxMyl8MDtT''@;'; put 'put ''PSgodz13K01hdGguaW11bChkZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LFduKSxwPShwPU1hdGguaW11bChIdCxlbikpK01hdGguaW11bChQdCxXbil8MCx3PU1hdGguaW11bChQdCxlbiksdj12K01hdGguaW11bChpdCxObil8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwodXQsTm4pfDAsdz13K01hdGguaW11bCh1dCxmdCl8MCx2PXYrTWF0aC5pbXVsKE1lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsd3QpfDApK01hdGguaW11bChEZSxobil8MCx3PXcrTWF0aC5pbXVsKERlLHd0KXwwLHY9''@;'; put 'put ''ditNYXRoLmltdWwoWGUsX3QpfDAscD0ocD1wK01hdGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLHc9dytNYXRoLmltdWwoVWUsTnQpfDAsdj12K01hdGguaW11bChBZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEl0KXwwKStNYXRoLmltdWwoVGUscnQpfDAsdz13K01h''@;'; put 'put ''dGguaW11bChUZSxJdCl8MCx2PXYrTWF0aC5pbXVsKGx0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscHQpfDApK01hdGguaW11bChQZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFBlLHB0KXwwLHY9ditNYXRoLmltdWwoS2UsTG4pfDAscD0ocD1wK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFllLExuKXwwLHc9dytNYXRoLmltdWwoWWUsenQpfDAsdj12K01hdGguaW11bChPZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoQmUseG4pfDAsdz13K01hdGguaW11bChCZSxzbil8MDt2YXIgRnI9KFMrKHY9ditNYXRoLmltdWwoeGUsT24pfDApfDAp''@;'; put 'put ''KygoODE5MSYocD0ocD1wK01hdGguaW11bCh4ZSwkdCl8MCkrTWF0aC5pbXVsKExlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKExlLCR0KXwwKSsocD4+PjEzKXwwKSsoRnI+Pj4yNil8MCxGciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsTm4pLHA9KHA9TWF0aC5pbXVsKEh0''@;'; put 'put ''LGZ0KSkrTWF0aC5pbXVsKFB0LE5uKXwwLHc9TWF0aC5pbXVsKFB0LGZ0KSx2PXYrTWF0aC5pbXVsKGl0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsd3QpfDApK01hdGguaW11bCh1dCxobil8MCx3PXcrTWF0aC5pbXVsKHV0LHd0KXwwLHY9ditNYXRoLmltdWwoTWUsX3QpfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChNZSxOdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLHc9dytNYXRoLmltdWwoRGUsTnQpfDAsdj12K01hdGguaW11bChYZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsdz13K01hdGguaW11bChVZSxJdCl8MCx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKEFlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUscHQpfDApK01hdGguaW11bChUZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFRlLHB0KXwwLHY9ditNYXRoLmltdWwobHQsTG4pfDAscD0ocD1wK01hdGguaW11bChsdCx6dCl8MCkrTWF0aC5pbXVsKFBlLExuKXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''UGUsenQpfDAsdj12K01hdGguaW11bChLZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsdz13K01hdGguaW11bChZZSxzbil8MDt2YXIgcWk9KFMrKHY9ditNYXRoLmltdWwoT2UsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChP''@;'; put 'put ''ZSwkdCl8MCkrTWF0aC5pbXVsKEJlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKEJlLCR0KXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsaG4pLHA9KHA9TWF0aC5pbXVsKEh0LHd0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLHc9''@;'; put 'put ''TWF0aC5pbXVsKFB0LHd0KSx2PXYrTWF0aC5pbXVsKGl0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsTnQpfDApK01hdGguaW11bCh1dCxfdCl8MCx3PXcrTWF0aC5pbXVsKHV0LE50KXwwLHY9ditNYXRoLmltdWwoTWUscnQpfDAscD0ocD1wK01hdGguaW11bChNZSxJdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKERlLHJ0KXwwLHc9dytNYXRoLmltdWwoRGUsSXQpfDAsdj12K01hdGguaW11bChYZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsdz13K01hdGguaW11bChVZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEFlLExuKXwwLHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoQWUsenQpfDApK01hdGguaW11bChUZSxMbil8MCx3PXcrTWF0aC5pbXVsKFRlLHp0KXwwLHY9ditNYXRoLmltdWwobHQseG4pfDAscD0ocD1wK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLHc9dytNYXRoLmltdWwoUGUsc24pfDA7dmFyIEppPShTKyh2PXYrTWF0''@;'; put 'put ''aC5pbXVsKEtlLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxPbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChZZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LF90''@;'; put 'put ''KSxwPShwPU1hdGguaW11bChIdCxOdCkpK01hdGguaW11bChQdCxfdCl8MCx3PU1hdGguaW11bChQdCxOdCksdj12K01hdGguaW11bChpdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LEl0KXwwKStNYXRoLmltdWwodXQscnQpfDAsdz13K01hdGguaW11bCh1dCxJdCl8MCx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKE1lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCx3PXcrTWF0aC5pbXVsKERlLHB0KXwwLHY9ditNYXRoLmltdWwoWGUsTG4pfDAscD0ocD1wK01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLExuKXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''VWUsenQpfDAsdj12K01hdGguaW11bChBZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmltdWwoVGUseG4pfDAsdz13K01hdGguaW11bChUZSxzbil8MDt2YXIgYW89KFMrKHY9ditNYXRoLmltdWwobHQsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChs''@;'; put 'put ''dCwkdCl8MCkrTWF0aC5pbXVsKFBlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFBlLCR0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQscnQpLHA9KHA9TWF0aC5pbXVsKEh0LEl0KSkrTWF0aC5pbXVsKFB0LHJ0KXwwLHc9''@;'; put 'put ''TWF0aC5pbXVsKFB0LEl0KSx2PXYrTWF0aC5pbXVsKGl0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQscHQpfDApK01hdGguaW11bCh1dCxEdCl8MCx3PXcrTWF0aC5pbXVsKHV0LHB0KXwwLHY9ditNYXRoLmltdWwoTWUsTG4pfDAscD0ocD1wK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKERlLExuKXwwLHc9dytNYXRoLmltdWwoRGUsenQpfDAsdj12K01hdGguaW11bChYZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsdz13K01hdGguaW11bChVZSxzbil8MDt2YXIgcm89KFMrKHY9ditNYXRoLmltdWwoQWUsT24pfDApfDAp''@;'; put 'put ''KygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFRlLCR0KXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsRHQpLHA9KHA9TWF0aC5pbXVsKEh0''@;'; put 'put ''LHB0KSkrTWF0aC5pbXVsKFB0LER0KXwwLHc9TWF0aC5pbXVsKFB0LHB0KSx2PXYrTWF0aC5pbXVsKGl0LExuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCh1dCxMbil8MCx3PXcrTWF0aC5pbXVsKHV0LHp0KXwwLHY9ditNYXRoLmltdWwoTWUseG4pfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXwwLHc9dytNYXRoLmltdWwoRGUsc24pfDA7dmFyIGlvPShTKyh2PXYrTWF0aC5pbXVsKFhlLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxPbil8MCkpPDwxMyl8MDtT''@;'; put 'put ''PSgodz13K01hdGguaW11bChVZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LExuKSxwPShwPU1hdGguaW11bChIdCx6dCkpK01hdGguaW11bChQdCxMbil8MCx3PU1hdGguaW11bChQdCx6dCksdj12K01hdGguaW11bChpdCx4bil8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwodXQseG4pfDAsdz13K01hdGguaW11bCh1dCxzbil8MDt2YXIgR2k9KFMrKHY9ditNYXRoLmltdWwoTWUsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChNZSwkdCl8MCkrTWF0aC5pbXVsKERlLE9uKXwwKSk8''@;'; put 'put ''PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKERlLCR0KXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQseG4pLHA9KHA9TWF0aC5pbXVsKEh0LHNuKSkrTWF0aC5pbXVsKFB0LHhuKXwwLHc9TWF0aC5pbXVsKFB0LHNuKTt2YXIgaG89KFMrKHY9''@;'; put 'put ''ditNYXRoLmltdWwoaXQsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChpdCwkdCl8MCkrTWF0aC5pbXVsKHV0LE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKHV0LCR0KXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjM7dmFyIHlyPShTKyh2''@;'; put 'put ''PU1hdGguaW11bChIdCxPbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSHQsJHQpKStNYXRoLmltdWwoUHQsT24pfDApKTw8MTMpfDA7cmV0dXJuIFM9KCh3PU1hdGguaW11bChQdCwkdCkpKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxDWzBdPUZuLENbMV09bmks''@;'; put 'put ''Q1syXT1sbixDWzNdPWpuLENbNF09cXIsQ1s1XT1naSxDWzZdPXhyLENbN109VWksQ1s4XT1LcixDWzldPW5vLENbMTBdPUZyLENbMTFdPXFpLENbMTJdPUppLENbMTNdPWFvLENbMTRdPXJvLENbMTVdPWlvLENbMTZdPUdpLENbMTddPWhvLENbMThdPXlyLDAhPT1TJiYoQ1sxOV09UyxILmxl''@;'; put 'put ''bmd0aCsrKSxIfTtmdW5jdGlvbiBYKEcsYixEKXtyZXR1cm4obmV3IFUpLm11bHAoRyxiLEQpfWZ1bmN0aW9uIFUoRyxiKXt0aGlzLng9Ryx0aGlzLnk9Yn1NYXRoLmltdWx8fChCPVYpLE0ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmxlbmd0aCtiLmxlbmd0''@;'; put 'put ''aDtyZXR1cm4gSD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWIubGVuZ3RoP0IodGhpcyxiLEQpOk48NjM/Vih0aGlzLGIsRCk6TjwxMDI0P2Z1bmN0aW9uIFkoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlLEQubGVuZ3RoPUcubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIg''@;'; put 'put ''SD0wLE49MCxnPTA7ZzxELmxlbmd0aC0xO2crKyl7dmFyIEM9TjtOPTA7Zm9yKHZhciBTPTY3MTA4ODYzJkgsdj1NYXRoLm1pbihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLUcubGVuZ3RoKzEpO3A8PXY7cCsrKXt2YXIgZGU9KDB8Ry53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxm''@;'; put 'put ''ZT02NzEwODg2MyZkZTtTPTY3MTA4ODYzJihmZT1mZStTfDApLE4rPShDPShDPUMrKGRlLzY3MTA4ODY0fDApfDApKyhmZT4+PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfUQud29yZHNbZ109UyxIPUMsQz1OfXJldHVybiAwIT09SD9ELndvcmRzW2ddPUg6RC5sZW5ndGgtLSxELnN0cmlwKCl9''@;'; put 'put ''KHRoaXMsYixEKTpYKHRoaXMsYixEKSxIfSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD1NLnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsTj0wO048YjtOKyspRFtOXT10aGlzLnJldkJpbihOLEgsYik7cmV0dXJuIER9LFUucHJvdG90''@;'; put 'put ''eXBlLnJldkJpbj1mdW5jdGlvbihiLEQsSCl7aWYoMD09PWJ8fGI9PT1ILTEpcmV0dXJuIGI7Zm9yKHZhciBOPTAsZz0wO2c8RDtnKyspTnw9KDEmYik8PEQtZy0xLGI+Pj0xO3JldHVybiBOfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXtmb3IodmFyIFM9MDtT''@;'; put 'put ''PEM7UysrKU5bU109RFtiW1NdXSxnW1NdPUhbYltTXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7dGhpcy5wZXJtdXRlKEMsYixELEgsTixnKTtmb3IodmFyIFM9MTtTPGc7Uzw8PTEpZm9yKHZhciB2PVM8PDEscD1NYXRoLmNvcygyKk1hdGguUEkvdiks''@;'; put 'put ''dz1NYXRoLnNpbigyKk1hdGguUEkvdiksSj0wO0o8ZztKKz12KWZvcih2YXIgbmU9cCxkZT13LGZlPTA7ZmU8UztmZSsrKXt2YXIgeGU9SFtKK2ZlXSxMZT1OW0orZmVdLEZlPUhbSitmZStTXSxPZT1OW0orZmUrU10sQmU9bmUqRmUtZGUqT2U7T2U9bmUqT2UrZGUqRmUsSFtKK2ZlXT14ZSso''@;'; put 'put ''RmU9QmUpLE5bSitmZV09TGUrT2UsSFtKK2ZlK1NdPXhlLUZlLE5bSitmZStTXT1MZS1PZSxmZSE9PXYmJihCZT1wKm5lLXcqZGUsZGU9cCpkZSt3Km5lLG5lPUJlKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIsRCl7dmFyIEg9MXxNYXRoLm1heChELGIpLE49MSZILGc9''@;'; put 'put ''MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlnKys7cmV0dXJuIDE8PGcrMStOfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYixELEgpe2lmKCEoSDw9MSkpZm9yKHZhciBOPTA7TjxILzI7TisrKXt2YXIgZz1iW05dO2JbTl09YltILU4tMV0sYltILU4tMV09ZyxnPURbTl0sRFtOXT0t''@;'; put 'put ''RFtILU4tMV0sRFtILU4tMV09LWd9fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9MCxOPTA7TjxELzI7TisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKk4rMV0vRCkrTWF0aC5yb3VuZChiWzIqTl0vRCkrSDtiW05dPTY3MTA4ODYzJmcsSD1n''@;'; put 'put ''PDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIsRCxILE4pe2Zvcih2YXIgZz0wLEM9MDtDPEQ7QysrKUhbMipDXT04MTkxJihnKz0wfGJbQ10pLEhbMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9MipE''@;'; put 'put ''O0M8TjsrK0MpSFtDXT0wO20oMD09PWcpLG0oMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9MDtIPGI7SCsrKURbSF09MDtyZXR1cm4gRH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLEQsSCl7dmFyIE49Mip0''@;'; put 'put ''aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLEQubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChOKSxDPXRoaXMuc3R1YihOKSxTPW5ldyBBcnJheShOKSx2PW5ldyBBcnJheShOKSxwPW5ldyBBcnJheShOKSx3PW5ldyBBcnJheShOKSxKPW5ldyBBcnJheShOKSxuZT1uZXcgQXJyYXkoTiksZGU9SC53''@;'; put 'put ''b3JkcztkZS5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxTLE4pLHRoaXMuY29udmVydDEzYihELndvcmRzLEQubGVuZ3RoLHcsTiksdGhpcy50cmFuc2Zvcm0oUyxDLHYscCxOLGcpLHRoaXMudHJhbnNmb3JtKHcsQyxKLG5lLE4sZyk7Zm9yKHZhciBmZT0wO2Zl''@;'; put 'put ''PE47ZmUrKyl7dmFyIHhlPXZbZmVdKkpbZmVdLXBbZmVdKm5lW2ZlXTtwW2ZlXT12W2ZlXSpuZVtmZV0rcFtmZV0qSltmZV0sdltmZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHYscCxOKSx0aGlzLnRyYW5zZm9ybSh2LHAsZGUsQyxOLGcpLHRoaXMuY29uanVnYXRlKGRlLEMsTiksdGhp''@;'; put 'put ''cy5ub3JtYWxpemUxM2IoZGUsTiksSC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9Yi5sZW5ndGgrRC5sZW5ndGgsSC5zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRo''@;'; put 'put ''aXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRvKGIsRCl9LE0ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxYKHRoaXMsYixEKX0sTS5wcm90b3R5cGUuaW11bD1mdW5j''@;'; put 'put ''dGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGIsdGhpcyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpO2Zvcih2YXIgRD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIE49KDB8dGhpcy53b3Jkc1tI''@;'; put 'put ''XSkqYixnPSg2NzEwODg2MyZOKSsoNjcxMDg4NjMmRCk7RD4+PTI2LEQrPU4vNjcxMDg4NjR8MCxEKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09RCYmKHRoaXMud29yZHNbSF09RCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0''@;'; put 'put ''aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oYil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1''@;'; put 'put ''bmN0aW9uKGIpe3ZhciBEPWZ1bmN0aW9uIGooRyl7Zm9yKHZhciBiPW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxEPTA7RDxiLmxlbmd0aDtEKyspe3ZhciBOPUQlMjY7YltEXT0oRy53b3Jkc1tELzI2fDBdJjE8PE4pPj4+Tn1yZXR1cm4gYn0oYik7aWYoMD09PUQubGVuZ3RoKXJldHVybiBu''@;'; put 'put ''ZXcgTSgxKTtmb3IodmFyIEg9dGhpcyxOPTA7TjxELmxlbmd0aCYmMD09PURbTl07TisrLEg9SC5zcXIoKSk7aWYoKytOPEQubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO048RC5sZW5ndGg7TisrLGc9Zy5zcXIoKSkwIT09RFtOXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSxNLnByb3RvdHlw''@;'; put 'put ''ZS5pdXNobG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLEQ9YiUyNixIPShiLUQpLzI2LE49NjcxMDg4NjM+Pj4yNi1EPDwyNi1EO2lmKDAhPT1EKXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBTPXRoaXMud29yZHNbZ10mTjt0''@;'; put 'put ''aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLVM8PER8QyxDPVM+Pj4yNi1EfUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPEg7''@;'; put 'put ''ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLEQsSCl7''@;'; put 'put ''dmFyIE47bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApLE49RD8oRC1EJTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8yNix0aGlzLmxlbmd0aCksUz02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsdj1IO2lmKE4tPUMsTj1NYXRoLm1heCgwLE4pLHYpe2Zvcih2YXIgcD0w''@;'; put 'put ''O3A8QztwKyspdi53b3Jkc1twXT10aGlzLndvcmRzW3BdO3YubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRo''@;'; put 'put ''aXMubGVuZ3RoPTE7dmFyIHc9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09d3x8cD49Tik7cC0tKXt2YXIgSj0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT13PDwyNi1nfEo+Pj5nLHc9SiZTfXJldHVybiB2JiYwIT09dyYmKHYud29yZHNbdi5sZW5ndGgrK109dyksMD09''@;'; put 'put ''PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLEQsSCl9LE0ucHJvdG90eXBlLnNobG49ZnVuY3Rp''@;'; put 'put ''b24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiKX0sTS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LE0ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sTS5wcm90b3R5''@;'; put 'put ''cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LE0ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndv''@;'; put 'put ''cmRzW0hdJjE8PEQpKX0sTS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1EJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PUQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkQ8PEQpLHRoaXMuc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1hc2tuPWZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGIpfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0''@;'; put 'put ''aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxNLnByb3RvdHlwZS5faWFk''@;'; put 'put ''ZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9Yjtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPj02NzEwODg2NDtEKyspdGhpcy53b3Jkc1tEXS09NjcxMDg4NjQsRD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tEKzFdPTE6dGhpcy53b3Jkc1tEKzFdKys7''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEQrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7aWYobSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZv''@;'; put 'put ''cih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF08MDtEKyspdGhpcy53b3Jkc1tEXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tEKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihi''@;'; put 'put ''KX0sTS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxNLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxNLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmlhYnMoKX0sTS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGIsRCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrSCk7dmFyIEMsUz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK0hdKStTO3ZhciB2PSgwfGIud29yZHNbZ10pKkQ7Uz0o''@;'; put 'put ''KEMtPTY3MTA4ODYzJnYpPj4yNiktKHYvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKVM9KEM9KDB8dGhpcy53b3Jkc1tnK0hdKStTKT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkM7aWYoMD09PVMpcmV0dXJuIHRo''@;'; put 'put ''aXMuc3RyaXAoKTtmb3IobSgtMT09PVMpLFM9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspUz0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrUyk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9''@;'; put 'put ''ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihIKSxOLml1c2hsbihIKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsdj1OLmxlbmd0aC1nLmxl''@;'; put 'put ''bmd0aDtpZigibW9kIiE9PUQpeyhwPW5ldyBNKG51bGwpKS5sZW5ndGg9disxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIHc9MDt3PHAubGVuZ3RoO3crKylwLndvcmRzW3ddPTB9dmFyIEo9Ti5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsdik7MD09PUoubmVnYXRpdmUm''@;'; put 'put ''JihOPUoscCYmKHAud29yZHNbdl09MSkpO2Zvcih2YXIgbmU9di0xO25lPj0wO25lLS0pe3ZhciBkZT02NzEwODg2NCooMHxOLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKGRlPU1hdGgubWluKGRlL0N8MCw2NzEwODg2MyksTi5faXNobG5zdWJt''@;'; put 'put ''dWwoZyxkZSxuZSk7MCE9PU4ubmVnYXRpdmU7KWRlLS0sTi5uZWdhdGl2ZT0wLE4uX2lzaGxuc3VibXVsKGcsMSxuZSksTi5pc1plcm8oKXx8KE4ubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT1kZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxOLnN0cmlwKCksImRpdiIhPT1EJiYwIT09SCYm''@;'; put 'put ''Ti5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpOfX0sTS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSghYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBNKDApLG1vZDpuZXcgTSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZl''@;'; put 'put ''PyhDPXRoaXMubmVnKCkuZGl2bW9kKGIsRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2Ok4sbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhp''@;'; put 'put ''cy5kaXZtb2QoYi5uZWcoKSxEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSx7ZGl2Ok4sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCksRCksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2''@;'; put 'put ''ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgTSgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09RD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1EP3tk''@;'; put 'put ''aXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYixEKTt2YXIgTixnLEN9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxNLnBy''@;'; put 'put ''b3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmRpdm1vZChiKTtpZihELm1vZC5pc1plcm8oKSlyZXR1cm4gRC5kaXY7dmFyIEg9MCE9PUQuZGl2Lm5lZ2F0aXZlP0QubW9kLmlzdWIoYik6RC5tb2QsTj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPUguY21wKE4pO3Jl''@;'; put 'put ''dHVybiBDPDB8fDE9PT1nJiYwPT09Qz9ELmRpdjowIT09RC5kaXYubmVnYXRpdmU/RC5kaXYuaXN1Ym4oMSk6RC5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPSgxPDwyNiklYixIPTAsTj10aGlzLmxlbmd0aC0xO04+''@;'; put 'put ''PTA7Ti0tKUg9KEQqSCsoMHx0aGlzLndvcmRzW05dKSklYjtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSs2NzEwODg2NCpEO3Ro''@;'; put 'put ''aXMud29yZHNbSF09Ti9ifDAsRD1OJWJ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxNLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkp''@;'; put 'put ''O3ZhciBEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9bmV3IE0oMCksUz1uZXcgTSgxKSx2PTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspRC5pdXNocm4oMSksSC5pdXNocm4oMSks''@;'; put 'put ''Kyt2O2Zvcih2YXIgcD1ILmNsb25lKCksdz1ELmNsb25lKCk7IUQuaXNaZXJvKCk7KXtmb3IodmFyIEo9MCxuZT0xOyEoRC53b3Jkc1swXSZuZSkmJko8MjY7KytKLG5lPDw9MSk7aWYoSj4wKWZvcihELml1c2hybihKKTtKLS0gPjA7KShOLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihOLmlhZGQo''@;'; put 'put ''cCksZy5pc3ViKHcpKSxOLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIGRlPTAsZmU9MTshKEgud29yZHNbMF0mZmUpJiZkZTwyNjsrK2RlLGZlPDw9MSk7aWYoZGU+MClmb3IoSC5pdXNocm4oZGUpO2RlLS0gPjA7KShDLmlzT2RkKCl8fFMuaXNPZGQoKSkmJihDLmlhZGQocCksUy5p''@;'; put 'put ''c3ViKHcpKSxDLml1c2hybigxKSxTLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihDKSxnLmlzdWIoUykpOihILmlzdWIoRCksQy5pc3ViKE4pLFMuaXN1YihnKSl9cmV0dXJue2E6QyxiOlMsZ2NkOkguaXVzaGxuKHYpfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0''@;'; put 'put ''aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBKLEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1ILmNsb25lKCk7RC5jbXBuKDEpPjAmJkguY21wbigx''@;'; put 'put ''KT4wOyl7Zm9yKHZhciBTPTAsdj0xOyEoRC53b3Jkc1swXSZ2KSYmUzwyNjsrK1Msdjw8PTEpO2lmKFM+MClmb3IoRC5pdXNocm4oUyk7Uy0tID4wOylOLmlzT2RkKCkmJk4uaWFkZChDKSxOLml1c2hybigxKTtmb3IodmFyIHA9MCx3PTE7IShILndvcmRzWzBdJncpJiZwPDI2OysrcCx3PDw9''@;'; put 'put ''MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKGcpKTooSC5pc3ViKEQpLGcuaXN1YihOKSl9cmV0dXJuKEo9MD09PUQuY21wbigxKT9OOmcpLmNtcG4oMCk8MCYmSi5p''@;'; put 'put ''YWRkKGIpLEp9LE0ucHJvdG90eXBlLmdjZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEQ9dGhpcy5jbG9uZSgpLEg9Yi5jbG9uZSgpO0QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZh''@;'; put 'put ''ciBOPTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtOKyspRC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0QuaXNFdmVuKCk7KUQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9RC5jbXAoSCk7aWYoZzwwKXt2YXIgQz1EO0Q9SCxIPUN9ZWxz''@;'; put 'put ''ZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztELmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKE4pfSxNLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxNLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEm''@;'; put 'put ''dGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxNLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXttKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgYik7dmFyIEQ9YiUyNixIPShiLUQpLzI2LE49MTw8RDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9Tix0aGlzO2Zvcih2YXIgZz1OLEM9SDswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPTB8dGhpcy53''@;'; put 'put ''b3Jkc1tDXTtnPShTKz1nKT4+PjI2LHRoaXMud29yZHNbQ109UyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndv''@;'; put 'put ''cmRzWzBdfSxNLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGIpe3ZhciBILEQ9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhRClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmRClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtEJiYoYj0tYiks''@;'; put 'put ''bShiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTj0wfHRoaXMud29yZHNbMF07SD1OPT09Yj8wOk48Yj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LE0ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIu''@;'; put 'put ''bmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBEPXRoaXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtRDpEfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVu''@;'; put 'put ''Z3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49MHx0aGlzLndvcmRzW0hdLGc9MHxiLndvcmRzW0hdO2lmKE4hPT1nKXtOPGc/RD0tMTpOPmcmJihEPTEpO2JyZWFrfX1yZXR1cm4g''@;'; put 'put ''RH0sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5ndD1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LE0ucHJv''@;'; put 'put ''dG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUubHRl''@;'; put 'put ''bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9u''@;'; put 'put ''KGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LE0ucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LE0ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0''@;'; put 'put ''aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LE0ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51''@;'; put 'put ''bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sTS5wcm90b3R5''@;'; put 'put ''cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3ViIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sTS5wcm90''@;'; put 'put ''b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz''@;'; put 'put ''LnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLmltdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5z''@;'; put 'put ''cXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRTcXJ0PWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sTS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJ''@;'; put 'put ''bnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks''@;'; put 'put ''dGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxi''@;'; put 'put ''KX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBlZShHLGIpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgTShiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRo''@;'; put 'put ''aXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUoKXtlZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG9lKCl7ZWUuY2FsbCh0aGlzLCJw''@;'; put 'put ''MjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBzZSgpe2VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVu''@;'; put 'put ''Y3Rpb24gaGUoKXtlZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKEcpe2lmKCJzdHJpbmciPT10eXBlb2YgRyl7dmFyIGI9TS5fcHJpbWUoRyk7dGhpcy5t''@;'; put 'put ''PWIucCx0aGlzLnByaW1lPWJ9ZWxzZSBtKEcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Ryx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoRyl7dWUuY2FsbCh0aGlzLEcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQl''@;'; put 'put ''MjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlz''@;'; put 'put ''LnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9ZWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0''@;'; put 'put ''aC5jZWlsKHRoaXMubi8xMykpLGJ9LGVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBILEQ9Yjtkb3t0aGlzLnNwbGl0KEQsdGhpcy50bXApLEg9KEQ9KEQ9dGhpcy5pbXVsSyhEKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgTj1I''@;'; put 'put ''PHRoaXMubj8tMTpELnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PU4/KEQud29yZHNbMF09MCxELmxlbmd0aD0xKTpOPjA/RC5pc3ViKHRoaXMucCk6dm9pZCAwIT09RC5zdHJpcD9ELnN0cmlwKCk6RC5fc3RyaXAoKSxEfSxlZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtiLml1c2hy''@;'; put 'put ''bih0aGlzLm4sMCxEKX0sZWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0sbGUodGUsZWUpLHRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD00MTk0MzAzLE49TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8TjtnKysp''@;'; put 'put ''RC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKEQubGVuZ3RoPU4sYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKEQud29yZHNbRC5sZW5ndGgrK109QyZILGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBTPTB8Yi53b3Jk''@;'; put 'put ''c1tnXTtiLndvcmRzW2ctMTBdPShTJkgpPDw0fEM+Pj4yMixDPVN9Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsx''@;'; put 'put ''XT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MHxiLndvcmRzW0hdO2Iud29yZHNbSF09NjcxMDg4NjMmKEQrPTk3NypOKSxEPTY0Kk4rKEQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSww''@;'; put 'put ''PT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5ndGgtLSksYn0sbGUob2UsZWUpLGxlKHNlLGVlKSxsZShoZSxlZSksaGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MTkqKDB8Yi53b3Jkc1tIXSkrRCxnPTY3MTA4''@;'; put 'put ''ODYzJk47Tj4+Pj0yNixiLndvcmRzW0hdPWcsRD1OfXJldHVybiAwIT09RCYmKGIud29yZHNbYi5sZW5ndGgrK109RCksYn0sTS5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgRDtpZigiazI1NiI9PT1iKUQ9bmV3IHRlO2Vsc2UgaWYoInAyMjQiPT09YilEPW5l''@;'; put 'put ''dyBvZTtlbHNlIGlmKCJwMTkyIj09PWIpRD1uZXcgc2U7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrYik7RD1uZXcgaGV9cmV0dXJuIHFbYl09RCxEfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2''@;'; put 'put ''ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLEQpe20oMD09KGIubmVnYXRpdmV8RC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cG9zaXRpdmVzIiksbShiLnJlZCYmYi5yZWQ9PT1ELnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0''@;'; put 'put ''aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFy''@;'; put 'put ''IEg9Yi5hZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlhZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkgu''@;'; put 'put ''aXN1Yih0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5zdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYixE''@;'; put 'put ''KXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKEQpKX0sdWUucHJvdG90eXBl''@;'; put 'put ''LmltdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLmltdWwoRCkpfSx1ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5tdWwoRCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1m''@;'; put 'put ''dW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBEPXRoaXMu''@;'; put 'put ''bS5hbmRsbigzKTtpZihtKEQlMj09MSksMz09PUQpe3ZhciBIPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coYixIKX1mb3IodmFyIE49dGhpcy5tLnN1Ym4oMSksZz0wOyFOLmlzWmVybygpJiYwPT09Ti5hbmRsbigxKTspZysrLE4uaXVzaHJuKDEpO20o''@;'; put 'put ''IU4uaXNaZXJvKCkpO3ZhciBDPW5ldyBNKDEpLnRvUmVkKHRoaXMpLFM9Qy5yZWROZWcoKSx2PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgTSgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsdikuY21wKFMpOylwLnJlZElB''@;'; put 'put ''ZGQoUyk7Zm9yKHZhciB3PXRoaXMucG93KHAsTiksSj10aGlzLnBvdyhiLE4uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGIsTiksZGU9ZzswIT09bmUuY21wKEMpOyl7Zm9yKHZhciBmZT1uZSx4ZT0wOzAhPT1mZS5jbXAoQyk7eGUrKylmZT1mZS5yZWRTcXIoKTttKHhlPGRlKTt2''@;'; put 'put ''YXIgTGU9dGhpcy5wb3codyxuZXcgTSgxKS5pdXNobG4oZGUteGUtMSkpO0o9Si5yZWRNdWwoTGUpLHc9TGUucmVkU3FyKCksbmU9bmUucmVkTXVsKHcpLGRlPXhlfXJldHVybiBKfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgRD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAw''@;'; put 'put ''IT09RC5uZWdhdGl2ZT8oRC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChEKS5yZWROZWcoKSk6dGhpcy5pbW9kKEQpfSx1ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIsRCl7aWYoRC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PUQuY21wbigxKSlyZXR1cm4gYi5j''@;'; put 'put ''bG9uZSgpO3ZhciBOPW5ldyBBcnJheSgxNik7TlswXT1uZXcgTSgxKS50b1JlZCh0aGlzKSxOWzFdPWI7Zm9yKHZhciBnPTI7ZzxOLmxlbmd0aDtnKyspTltnXT10aGlzLm11bChOW2ctMV0sYik7dmFyIEM9TlswXSxTPTAsdj0wLHA9RC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2''@;'; put 'put ''KSxnPUQubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgdz1ELndvcmRzW2ddLEo9cC0xO0o+PTA7Si0tKXt2YXIgbmU9dz4+SiYxO0MhPT1OWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PW5lfHwwIT09Uz8oUzw8PTEsU3w9bmUsKDQ9PSsrdnx8MD09PWcmJjA9PT1KKSYmKEM9dGhpcy5tdWwo''@;'; put 'put ''QyxOW1NdKSx2PTAsUz0wKSk6dj0wfXA9MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIEQ9Yi51bW9kKHRoaXMubSk7cmV0dXJuIEQ9PT1iP0QuY2xvbmUoKTpEfSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9Yi5j''@;'; put 'put ''bG9uZSgpO3JldHVybiBELnJlZD1udWxsLER9LE0ubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxsZShjZSx1ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29u''@;'; put 'put ''dmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiBELnJlZD1udWxsLER9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEs''@;'; put 'put ''Yjt2YXIgSD1iLmltdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5j''@;'; put 'put ''bXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1iLm11bChEKSxOPUgubWFza24odGhp''@;'; put 'put ''cy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMu''@;'; put 'put ''X2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDU3Nzk4OmF0PT57ZnVuY3Rpb24gSWUoRixhZSl7aWYo''@;'; put 'put ''IUYpdGhyb3cgbmV3IEVycm9yKGFlfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWF0LmV4cG9ydHM9SWUsSWUuZXF1YWw9ZnVuY3Rpb24oYWUseCxtKXtpZihhZSE9eCl0aHJvdyBuZXcgRXJyb3IobXx8IkFzc2VydGlvbiBmYWlsZWQ6ICIrYWUrIiAhPSAiK3gpfX0sNzgyNDc6KGF0LEllKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgRj1JZTtmdW5jdGlvbiB4KGxlKXtyZXR1cm4gMT09PWxlLmxlbmd0aD8iMCIrbGU6bGV9ZnVuY3Rpb24gbShsZSl7Zm9yKHZhciBNPSIiLE89MDtPPGxlLmxlbmd0aDtPKyspTSs9eChsZVtPXS50b1N0cmluZygxNikpO3JldHVybiBNfUYudG9BcnJheT1mdW5jdGlv''@;'; put 'put ''biBhZShsZSxNKXtpZihBcnJheS5pc0FycmF5KGxlKSlyZXR1cm4gbGUuc2xpY2UoKTtpZighbGUpcmV0dXJuW107dmFyIE89W107aWYoInN0cmluZyIhPXR5cGVvZiBsZSl7Zm9yKHZhciBSPTA7UjxsZS5sZW5ndGg7UisrKU9bUl09MHxsZVtSXTtyZXR1cm4gT31pZigiaGV4Ij09PU0pZm9y''@;'; put 'put ''KChsZT1sZS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihsZT0iMCIrbGUpLFI9MDtSPGxlLmxlbmd0aDtSKz0yKU8ucHVzaChwYXJzZUludChsZVtSXStsZVtSKzFdLDE2KSk7ZWxzZSBmb3IoUj0wO1I8bGUubGVuZ3RoO1IrKyl7dmFyIHo9bGUuY2hhckNvZGVB''@;'; put 'put ''dChSKSxLPXo+PjgsST0yNTUmejtLP08ucHVzaChLLEkpOk8ucHVzaChJKX1yZXR1cm4gT30sRi56ZXJvMj14LEYudG9IZXg9bSxGLmVuY29kZT1mdW5jdGlvbihNLE8pe3JldHVybiJoZXgiPT09Tz9tKE0pOk19fSw4MzI3NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImFmIix7bW9udGhzOiJKYW51YXJpZV9GZWJydWFyaWVfTWFhcnRfQXByaWxfTWVpX0p1bmllX0p1bGllX0F1Z3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01y''@;'; put 'put ''dF9BcHJfTWVpX0p1bl9KdWxfQXVnX1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU29uZGFnX01hYW5kYWdfRGluc2RhZ19Xb2Vuc2RhZ19Eb25kZXJkYWdfVnJ5ZGFnX1NhdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvbl9NYWFfRGluX1dvZV9Eb25f''@;'; put 'put ''VnJ5X1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTWFfRGlfV29fRG9fVnJfU2EiLnNwbGl0KCJfIiksbWVyaWRpZW1QYXJzZTovdm18bm0vaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybi9ebm0kL2kudGVzdChtKX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwx''@;'; put 'put ''Mj9NPyJ2bSI6IlZNIjpNPyJubSI6Ik5NIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFy''@;'; put 'put ''OntzYW1lRGF5OiJbVmFuZGFnIG9tXSBMVCIsbmV4dERheToiW01ceGY0cmUgb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbR2lzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltMYWFzXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6Im9vciAlcyIscGFzdDoiJXMgZ2VsZWRlIixzOiInbiBwYWFyIHNla29uZGVzIixzczoiJWQgc2Vrb25kZXMiLG06IiduIG1pbnV1dCIsbW06IiVkIG1pbnV0ZSIsaDoiJ24gdXVyIixoaDoiJWQgdXJlIixkOiInbiBkYWciLGRkOiIlZCBkYWUiLE06IiduIG1hYW5kIixNTToiJWQgbWFh''@;'; put 'put ''bmRlIix5OiInbiBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihtKXtyZXR1cm4gbSsoMT09PW18fDg9PT1tfHxtPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYp''@;'; put 'put ''KX0sNjE4Njc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ZnVuY3Rpb24oUil7cmV0dXJuIDA9PT1SPzA6MT09PVI/MToyPT09Uj8yOlIlMTAwPj0zJiZSJTEwMDw9MTA/MzpSJTEwMD49MTE/NDo1fSxtPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0''@;'; put 'put ''IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1''@;'; put 'put ''MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1''@;'; put 'put ''MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0''@;'; put 'put ''Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0''@;'; put 'put ''IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1''@;'; put 'put ''MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUi''@;'; put 'put ''LCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2''@;'; put 'put ''NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1''@;'; put 'put ''MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0''@;'; put 'put ''NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2Mjdc''@;'; put 'put ''dTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sbGU9ZnVuY3Rpb24oUil7cmV0dXJuIGZ1bmN0aW9uKHosSyxJLGspe3ZhciBFPXgoeiksaj1tW1JdW3goeildO3JldHVybiAyPT09RSYmKGo9altLPzA6MV0pLGoucmVw''@;'; put 'put ''bGFjZSgvJWQvaSx6KX19LE09WyJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGEiLCJcdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGEi''@;'; put 'put ''LCJcdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjkiLCJcdTA2MjNcdTA2NDhcdTA2MmEiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEi''@;'; put 'put ''LCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTthZS5kZWZpbmVMb2NhbGUoImFyLWR6Iix7bW9udGhzOk0sbW9udGhzU2hvcnQ6TSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUw''@;'; put 'put ''NjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1''@;'; put 'put ''MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUw''@;'; put 'put ''NjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''XHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''IixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihSKXtyZXR1cm4iXHUwNjQ1Ij09PVJ9LG1lcmlkaWVtOmZ1bmN0aW9uKFIseixLKXtyZXR1cm4gUjwxMj8iXHUw''@;'; put 'put ''NjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUw''@;'; put 'put ''NjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBc''@;'; put 'put ''dTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczpsZSgicyIpLHNzOmxlKCJzIiksbTpsZSgibSIpLG1tOmxlKCJtIiksaDpsZSgiaCIpLGhoOmxlKCJoIiksZDpsZSgiZCIpLGRkOmxlKCJkIiksTTpsZSgiTSIpLE1NOmxlKCJNIiks''@;'; put 'put ''eTpsZSgieSIpLHl5OmxlKCJ5Iil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTcwNzg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUu''@;'; put 'put ''ZGVmaW5lTG9jYWxlKCJhci1rdyIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYy''@;'; put 'put ''N1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1''@;'; put 'put ''MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3''@;'; put 'put ''XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUw''@;'; put 'put ''NjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2''@;'; put 'put ''MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUw''@;'; put 'put ''NjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjI3XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDYyYVx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2''@;'; put 'put ''MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJc''@;'; put 'put ''dTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5''@;'; put 'put ''OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RE''@;'; put 'put ''YXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUw''@;'; put 'put ''NjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0''@;'; put 'put ''YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MCxkb3k6MTJ9fSl9KEYoMTY2NzYp''@;'; put 'put ''KX0sNzc3NzY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6IjEiLDI6IjIiLDM6IjMiLDQ6IjQiLDU6IjUiLDY6IjYiLDc6IjciLDg6IjgiLDk6IjkiLDA6IjAifSxtPWZ1bmN0aW9uKHope3JldHVybiAwPT09ej8wOjE9PT16PzE6Mj09PXo/''@;'; put 'put ''Mjp6JTEwMD49MyYmeiUxMDA8PTEwPzM6eiUxMDA+PTExPzQ6NX0sbGU9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2''@;'; put 'put ''MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYy''@;'; put 'put ''OSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZc''@;'; put 'put ''dTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1''@;'; put 'put ''MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsi''@;'; put 'put ''XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYz''@;'; put 'put ''OVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1''@;'; put 'put ''XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYzMSIsIlx1''@;'; put 'put ''MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMVx1''@;'; put 'put ''MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjQ2''@;'; put 'put ''IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSxNPWZ1bmN0aW9uKHope3JldHVybiBmdW5jdGlvbihL''@;'; put 'put ''LEksayxFKXt2YXIgaj1tKEspLFY9bGVbel1bbShLKV07cmV0dXJuIDI9PT1qJiYoVj1WW0k/MDoxXSksVi5yZXBsYWNlKC8lZC9pLEspfX0sTz1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1''@;'; put 'put ''MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1''@;'; put 'put ''MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYz''@;'; put 'put ''MSJdO2FlLmRlZmluZUxvY2FsZSgiYXItbHkiLHttb250aHM6Tyxtb250aHNTaG9ydDpPLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYy''@;'; put 'put ''N1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2''@;'; put 'put ''MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYy''@;'; put 'put ''ZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4''@;'; put 'put ''YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2''@;'; put 'put ''MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHope3JldHVybiJcdTA2NDUiPT09en0sbWVyaWRpZW06ZnVuY3Rpb24oeixLLEkpe3JldHVybiB6PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2''@;'; put 'put ''NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1''@;'; put 'put ''MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBb''@;'; put 'put ''XHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOk0oInMiKSxzczpNKCJz''@;'; put 'put ''IiksbTpNKCJtIiksbW06TSgibSIpLGg6TSgiaCIpLGhoOk0oImgiKSxkOk0oImQiKSxkZDpNKCJkIiksTTpNKCJNIiksTU06TSgiTSIpLHk6TSgieSIpLHl5Ok0oInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpm''@;'; put 'put ''dW5jdGlvbih6KXtyZXR1cm4gei5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEspe3JldHVybiB4W0tdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShGKDE2Njc2KSl9LDU2Nzg5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO2FlLmRlZmluZUxvY2FsZSgiYXItbWEiLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2''@;'; put 'put ''NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1''@;'; put 'put ''MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0''@;'; put 'put ''NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1''@;'; put 'put ''MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUw''@;'; put 'put ''NjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1''@;'; put 'put ''MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmJcdTA2NDZcdTA2NGFcdTA2''@;'; put 'put ''NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIs''@;'; put 'put ''bmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExU''@;'; put 'put ''IixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0g''@;'; put 'put ''TFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1''@;'; put 'put ''MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2''@;'; put 'put ''MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYo''@;'; put 'put ''MTY2NzYpKX0sNjg5NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIs''@;'; put 'put ''MDoiXHUwNjYwIn0sbT17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifTthZS5kZWZpbmVMb2NhbGUoImFy''@;'; put 'put ''LXNhIix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4X1x1''@;'; put 'put ''MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhfXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFf''@;'; put 'put ''XHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYz''@;'; put 'put ''MV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYzM1x1''@;'; put 'put ''MDYzN1x1MDYzM19cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1''@;'; put 'put ''MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2''@;'; put 'put ''MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9c''@;'; put 'put ''dTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpz''@;'; put 'put ''cyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4iXHUwNjQ1Ij09PU19LG1lcmlkaWVt''@;'; put 'put ''OmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRE''@;'; put 'put ''YXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFz''@;'; put 'put ''dERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJc''@;'; put 'put ''dTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUw''@;'; put 'put ''NjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBN''@;'; put 'put ''LnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2Uo''@;'; put 'put ''L1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSw3MTU4NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImFyLXRuIix7''@;'; put 'put ''bW9udGhzOiJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1''@;'; put 'put ''MDY0Nl9cdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4''@;'; put 'put ''XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUw''@;'; put 'put ''NjQxXHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIz''@;'; put 'put ''XHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFc''@;'; put 'put ''dTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1''@;'; put 'put ''MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2''@;'; put 'put ''NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhI''@;'; put 'put ''Om1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2Fc''@;'; put 'put ''dTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYy''@;'; put 'put ''M1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9''@;'; put 'put ''LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJc''@;'; put 'put ''dTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUw''@;'; put 'put ''NjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDIyMDk3OmZ1''@;'; put 'put ''bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxtPXsi''@;'; put 'put ''XHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LGxlPWZ1bmN0aW9uKEspe3JldHVybiAwPT09Sz8wOjE9PT1L''@;'; put 'put ''PzE6Mj09PUs/MjpLJTEwMD49MyYmSyUxMDA8PTEwPzM6SyUxMDA+PTExPzQ6NX0sTT17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1''@;'; put 'put ''MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUw''@;'; put 'put ''NjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYy''@;'; put 'put ''ZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRh''@;'; put 'put ''XHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1''@;'; put 'put ''MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUw''@;'; put 'put ''NjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2''@;'; put 'put ''NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUw''@;'; put 'put ''NjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3''@;'; put 'put ''XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2''@;'; put 'put ''MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LE89ZnVuY3Rpb24oSyl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKEksayxFLGope3ZhciBWPWxlKEkpLEI9TVtLXVtsZShJKV07cmV0dXJuIDI9PT1WJiYoQj1CW2s/MDoxXSksQi5yZXBsYWNlKC8lZC9pLEkpfX0sUj1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIs''@;'; put 'put ''Ilx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYz''@;'; put 'put ''YVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1''@;'; put 'put ''MDYyOFx1MDYzMSJdO2FlLmRlZmluZUxvY2FsZSgiYXIiLHttb250aHM6Uixtb250aHNTaG9ydDpSLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0''@;'; put 'put ''NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIx''@;'; put 'put ''X1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQ''@;'; put 'put ''YXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNl''@;'; put 'put ''Oi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKEspe3JldHVybiJcdTA2NDUiPT09S30sbWVyaWRpZW06ZnVuY3Rpb24oSyxJLGspe3JldHVybiBLPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2''@;'; put 'put ''MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRk''@;'; put 'put ''ZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2Vlazoi''@;'; put 'put ''ZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOk8oInMiKSxz''@;'; put 'put ''czpPKCJzIiksbTpPKCJtIiksbW06TygibSIpLGg6TygiaCIpLGhoOk8oImgiKSxkOk8oImQiKSxkZDpPKCJkIiksTTpPKCJNIiksTU06TygiTSIpLHk6TygieSIpLHl5Ok8oInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oSyl7cmV0dXJuIEsucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1''@;'; put 'put ''MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihJKXtyZXR1cm4gbVtJXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oSyl7cmV0dXJuIEsucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihJKXtyZXR1cm4geFtJXX0p''@;'; put 'put ''LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oRigxNjY3NikpfSwxNTYxMTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiLWluY2kiLDU6Ii1pbmNpIiw4OiItaW5jaSIsNzA6Ii1pbmNpIiw4MDoiLWlu''@;'; put 'put ''Y2kiLDI6Ii1uY2kiLDc6Ii1uY2kiLDIwOiItbmNpIiw1MDoiLW5jaSIsMzoiLVx4ZmNuY1x4ZmMiLDQ6Ii1ceGZjbmNceGZjIiwxMDA6Ii1ceGZjbmNceGZjIiw2OiItbmNcdTAxMzEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIsNjA6Ii1cdTAxMzFuY1x1MDEzMSIsOTA6Ii1c''@;'; put 'put ''dTAxMzFuY1x1MDEzMSJ9O2FlLmRlZmluZUxvY2FsZSgiYXoiLHttb250aHM6InlhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9tYXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inlhbl9mZXZfbWFyX2Fwcl9t''@;'; put 'put ''YXlfaXluX2l5bF9hdnFfc2VuX29rdF9ub3lfZGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJCYXphcl9CYXphciBlcnRcdTAyNTlzaV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfXHhjN1x1MDI1OXJcdTAxNWZcdTAyNTluYlx1MDI1OV9DXHhmY21c''@;'; put 'put ''dTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9DXHhmY21cdTAyNTlfXHUwMTVlXHUwMjU5bmJcdTAyNTkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQmF6X0J6RV9ceGM3QXhfXHhjN1x1MDI1OXJfQ0F4X0NceGZjbV9cdTAxNWVcdTAyNTluIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJCel9C''@;'; put 'put ''RV9ceGM3QV9ceGM3XHUwMjU5X0NBX0NceGZjX1x1MDE1ZVx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''IEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FhdF0gTFQiLG5leHREYXk6IltzYWJhaCBzYWF0XSBMVCIsbmV4dFdlZWs6IltnXHUwMjU5bFx1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIs''@;'; put 'put ''bGFzdERheToiW2RceGZjblx1MDI1OW5dIExUIixsYXN0V2VlazoiW2tlXHhlN1x1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29ucmEiLHBhc3Q6IiVzIFx1MDI1OXZ2XHUwMjU5bCIsczoiYmly''@;'; put 'put ''IG5lXHhlN1x1MDI1OSBzYW5peVx1MDI1OSIsc3M6IiVkIHNhbml5XHUwMjU5IixtOiJiaXIgZFx1MDI1OXFpcVx1MDI1OSIsbW06IiVkIGRcdTAyNTlxaXFcdTAyNTkiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGF5IixN''@;'; put 'put ''TToiJWQgYXkiLHk6ImJpciBpbCIseXk6IiVkIGlsIn0sbWVyaWRpZW1QYXJzZTovZ2VjXHUwMjU5fHNcdTAyNTloXHUwMjU5cnxnXHhmY25kXHhmY3p8YXhcdTAxNWZhbS8saXNQTTpmdW5jdGlvbihsZSl7cmV0dXJuL14oZ1x4ZmNuZFx4ZmN6fGF4XHUwMTVmYW0pJC8udGVzdChsZSl9LG1l''@;'; put 'put ''cmlkaWVtOmZ1bmN0aW9uKGxlLE0sTyl7cmV0dXJuIGxlPDQ/ImdlY1x1MDI1OSI6bGU8MTI/InNcdTAyNTloXHUwMjU5ciI6bGU8MTc/ImdceGZjbmRceGZjeiI6ImF4XHUwMTVmYW0ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTAxMzFuY1x1MDEzMXxpbmNpfG5jaXxc''@;'; put 'put ''eGZjbmNceGZjfG5jXHUwMTMxfHVuY3UpLyxvcmRpbmFsOmZ1bmN0aW9uKGxlKXtpZigwPT09bGUpcmV0dXJuIGxlKyItXHUwMTMxbmNcdTAxMzEiO3ZhciBNPWxlJTEwO3JldHVybiBsZSsoeFtNXXx8eFtsZSUxMDAtTV18fHhbbGU+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''N319KX0oRigxNjY3NikpfSw2MjQ1OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKE0sTyxSKXtyZXR1cm4ibSI9PT1SP08/Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1''@;'; put 'put ''Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0MyI6ImgiPT09Uj9PPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzAiOiJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NDMiOk0rIiAiK2Z1bmN0aW9uIHgoTSxPKXt2YXIgUj1NLnNwbGl0KCJf''@;'; put 'put ''Iik7cmV0dXJuIE8lMTA9PTEmJk8lMTAwIT0xMT9SWzBdOk8lMTA+PTImJk8lMTA8PTQmJihPJTEwMDwxMHx8TyUxMDA+PTIwKT9SWzFdOlJbMl19KHtzczpPPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNk''@;'; put 'put ''XHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUw''@;'; put 'put ''NDNkXHUwNDM0IixtbTpPPyJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQz''@;'; put 'put ''Ylx1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIixoaDpPPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDMzXHUwNDMwXHUw''@;'; put 'put ''NDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMzXHUwNDMw''@;'; put 'put ''XHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkIixkZDoiXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ1Nl9cdTA0MzRcdTA0MzdcdTA0NTFcdTA0M2QiLE1NOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRm''@;'; put 'put ''XHUwNDQ2XHUwNDRiX1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQzMFx1MDQ1ZSIseXk6Ilx1MDQzM1x1MDQzZVx1MDQzNF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDNlXHUwNDVlIn1bUl0sK00pfWFlLmRlZmluZUxvY2FsZSgiYmUi''@;'; put 'put ''LHttb250aHM6e2Zvcm1hdDoiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzMFx1MDQzM1x1MDQzMF9cdTA0NDFcdTA0MzBcdTA0M2FcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDNhXHUwNDQw''@;'; put 'put ''XHUwNDMwXHUwNDQxXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQ1ZVx1MDQzZFx1MDQ0Zl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDU2XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQz''@;'; put 'put ''Nlx1MDQzZFx1MDQ1Nlx1MDQ1ZVx1MDQzZFx1MDQ0Zl9cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzBcdTA0NDFcdTA0M2RcdTA0NGZfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDRiXHUwNDQ3XHUwNDNkXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0''@;'; put 'put ''Mlx1MDQzMFx1MDQzZlx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzZcdTA0M2RcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQ0''@;'; put 'put ''Yl9cdTA0NDFcdTA0MzBcdTA0M2FcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJcdTA0''@;'; put 'put ''MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDU2XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNhXHUwNDMwXHUwNDQxXHUw''@;'; put 'put ''NDQyXHUwNDQwXHUwNDRiXHUwNDQ3XHUwNDNkXHUwNDU2XHUwNDNhX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQzZlx1MDQzMFx1MDQzNF9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzZcdTA0MzBcdTA0M2RcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA0NDFc''@;'; put 'put ''dTA0NDJcdTA0NDNcdTA0MzRfXHUwNDNiXHUwNDRlXHUwNDQyX1x1MDQ0MVx1MDQzMFx1MDQzYV9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMl9cdTA0M2JcdTA0NTZcdTA0M2ZfXHUwNDM2XHUwNDNkXHUw''@;'; put 'put ''NDU2XHUwNDMyX1x1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNiIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVc''@;'; put 'put ''dTA0M2JcdTA0NGVfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDMwXHUwNDNhX1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzBcdTA0MzRcdTA0NDNfXHUwNDQ3XHUwNDMw''@;'; put 'put ''XHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0M19cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNi''@;'; put 'put ''XHUwNDRmX1x1MDQzZlx1MDQzMFx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzMFx1MDQ0''@;'; put 'put ''Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0MzBfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9cWyA/W1x1MDQyM1x1MDQ0M1x1MDQ1ZV0gPyg/Olx1MDQzY1x1MDQ1Nlx1''@;'; put 'put ''MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0M1x1MDQ0ZXxcdTA0M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2RcdTA0NDNcdTA0NGUpPyA/XF0gP2RkZGQvfSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0NDBf''@;'; put 'put ''XHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMwXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDZfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8i''@;'; put 'put ''KSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0ifSxjYWxlbmRh''@;'; put 'put ''cjp7c2FtZURheToiW1x1MDQyMVx1MDQ1MVx1MDQzZFx1MDQzZFx1MDQ0ZiBcdTA0NWVdIExUIixuZXh0RGF5OiJbXHUwNDE3XHUwNDMwXHUwNDVlXHUwNDQyXHUwNDQwXHUwNDMwIFx1MDQ1ZV0gTFQiLGxhc3REYXk6IltcdTA0MjNcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAgXHUwNDVlXSBM''@;'; put 'put ''VCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW1x1MDQyM10gZGRkZCBbXHUwNDVlXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNc''@;'; put 'put ''dTA0M2JcdTA0NDNcdTA0NGVdIGRkZGQgW1x1MDQ1ZV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDIzIFx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0Yl0gZGRkZCBbXHUwNDVlXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl''@;'; put 'put ''OiJcdTA0M2ZcdTA0NDBcdTA0MzBcdTA0MzcgJXMiLHBhc3Q6IiVzIFx1MDQ0Mlx1MDQzMFx1MDQzY1x1MDQ0MyIsczoiXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDMwXHUwNDNiXHUwNDRjXHUwNDNhXHUwNDU2IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbSxtbTptLGg6''@;'; put 'put ''bSxoaDptLGQ6Ilx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6bSxNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDYiLE1NOm0seToiXHUwNDMzXHUwNDNlXHUwNDM0Iix5eTptfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGJ8XHUwNDQwXHUw''@;'; put 'put ''NDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRifFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQz''@;'; put 'put ''MCkkLy50ZXN0KE0pfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRiIjpNPDEyPyJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGIiOk08MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0''@;'; put 'put ''N1x1MDQzMFx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ1NnxcdTA0NGJ8XHUwNDMzXHUwNDMwKS8sb3JkaW5hbDpmdW5jdGlvbihNLE8pe3N3aXRjaChPKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4g''@;'; put 'put ''TSUxMCE9MiYmTSUxMCE9M3x8TSUxMDA9PTEyfHxNJTEwMD09MTM/TSsiLVx1MDQ0YiI6TSsiLVx1MDQ1NiI7Y2FzZSJEIjpyZXR1cm4gTSsiLVx1MDQzM1x1MDQzMCI7ZGVmYXVsdDpyZXR1cm4gTX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDkxODI1OmZ1bmN0aW9uKGF0''@;'; put 'put ''LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiYmciLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUw''@;'; put 'put ''NDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1''@;'; put 'put ''XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4''@;'; put 'put ''Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0NDNfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMw''@;'; put 'put ''XHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzZVx1MDQz''@;'; put 'put ''ZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDRmXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0YVx1MDQ0MFx1MDQ0Mlx1MDQ0''@;'; put 'put ''YVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0NGFcdTA0M2FfXHUwNDQxXHUwNDRhXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0''@;'; put 'put ''MVx1MDQ0MFx1MDQ0Zl9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUwNDQyX1x1MDQ0MVx1MDQ0YVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0''@;'; put 'put ''M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5k''@;'; put 'put ''YXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMyXSBMVCIsbmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQz''@;'; put 'put ''MCBcdTA0MzJdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNhc2UgMjpj''@;'; put 'put ''YXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDNiXHUwNDM4XHUwNDRmXSBkZGRkIFtcdTA0MzJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNCAlcyIscGFzdDoiXHUwNDNmXHUw''@;'; put 'put ''NDQwXHUwNDM1XHUwNDM0XHUwNDM4ICVzIixzOiJcdTA0M2RcdTA0NGZcdTA0M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4''@;'; put 'put ''IixtOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6IiVkIFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMCIsZDoiXHUwNDM0XHUwNDM1XHUwNDNk''@;'; put 'put ''IixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIix3OiJcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzAiLHd3OiIlZCBcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzgiLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0''@;'; put 'put ''NiIsTU06IiVkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIseToiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy''@;'; put 'put ''fS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwLE09bSUxMDA7cmV0dXJuIDA9PT1tP20rIi1cdTA0MzVcdTA0MzIiOjA9PT1NP20rIi1c''@;'; put 'put ''dTA0MzVcdTA0M2QiOk0+MTAmJk08MjA/bSsiLVx1MDQ0Mlx1MDQzOCI6MT09PWxlP20rIi1cdTA0MzJcdTA0MzgiOjI9PT1sZT9tKyItXHUwNDQwXHUwNDM4Ijo3PT09bGV8fDg9PT1sZT9tKyItXHUwNDNjXHUwNDM4IjptKyItXHUwNDQyXHUwNDM4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9''@;'; put 'put ''KEYoMTY2NzYpKX0sNzU5MTg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJibSIse21vbnRoczoiWmFud3V5ZWthbG9fRmV3dXJ1eWVrYWxvX01hcmlzaWthbG9fQXdpcmlsaWthbG9fTVx1MDI1YmthbG9fWnV3XHUwMjVibmth''@;'; put 'put ''bG9fWnVsdXlla2Fsb19VdGlrYWxvX1NcdTAyNWJ0YW5idXJ1a2Fsb19cdTAyNTRrdXRcdTAyNTRidXJ1a2Fsb19Ob3dhbmJ1cnVrYWxvX0Rlc2FuYnVydWthbG8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilphbl9GZXdfTWFyX0F3aV9NXHUwMjViX1p1d19adWxfVXRpX1NcdTAyNWJ0X1x1''@;'; put 'put ''MDI1NGt1X05vd19EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkthcmlfTnRcdTAyNWJuXHUwMjVibl9UYXJhdGFfQXJhYmFfQWxhbWlzYV9KdW1hX1NpYmlyaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJLYXJfTnRcdTAyNWJfVGFyX0FyYV9BbGFfSnVtX1NpYiIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiS2FfTnRfVGFfQXJfQWxfSnVfU2kiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6Ik1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSIsTExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2xc''@;'; put 'put ''dTAyNWJyXHUwMjViXSBISDptbSIsTExMTDoiZGRkZCBNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkgW2xcdTAyNWJyXHUwMjViXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQmkgbFx1MDI1YnJcdTAyNWJdIExUIixuZXh0RGF5OiJbU2luaSBsXHUwMjViclx1MDI1Yl0gTFQiLG5leHRX''@;'; put 'put ''ZWVrOiJkZGRkIFtkb24gbFx1MDI1YnJcdTAyNWJdIExUIixsYXN0RGF5OiJbS3VudSBsXHUwMjViclx1MDI1Yl0gTFQiLGxhc3RXZWVrOiJkZGRkIFt0XHUwMjVibVx1MDI1Ym5lbiBsXHUwMjViclx1MDI1Yl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGtc''@;'; put 'put ''dTAyNTRuXHUwMjU0IixwYXN0OiJhIGJcdTAyNWIgJXMgYlx1MDI1NCIsczoic2FuZ2EgZGFtYSBkYW1hIixzczoic2Vrb25kaSAlZCIsbToibWluaXRpIGtlbGVuIixtbToibWluaXRpICVkIixoOiJsXHUwMjViclx1MDI1YiBrZWxlbiIsaGg6ImxcdTAyNWJyXHUwMjViICVkIixkOiJ0aWxl''@;'; put 'put ''IGtlbGVuIixkZDoidGlsZSAlZCIsTToia2FsbyBrZWxlbiIsTU06ImthbG8gJWQiLHk6InNhbiBrZWxlbiIseXk6InNhbiAlZCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDQ5NjgzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4''@;'; put 'put ''PXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIsMzoiXHUwOWU5Iiw0OiJcdTA5ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxtPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoi''@;'; put 'put ''NCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMiOiI2IiwiXHUwOWVkIjoiNyIsIlx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUwOWU2IjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiYm4tYmQiLHttb250aHM6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9c''@;'; put 'put ''dTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5''@;'; put 'put ''Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5''@;'; put 'put ''YThcdTA5YWRcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUw''@;'; put 'put ''OWIwXHUwOWMxX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNk''@;'; put 'put ''XHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUwOWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDliOFx1MDljNyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJl''@;'; put 'put ''XHUwOWIwX1x1MDliOFx1MDljYlx1MDlhZVx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMxXHUwOWE3XHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlh''@;'; put 'put ''YVx1MDlhNFx1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9c''@;'; put 'put ''dTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDli''@;'; put 'put ''ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOV9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBf''@;'; put 'put ''XHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFlXHUwOWRmIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEg''@;'; put 'put ''aDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZcdTA5OWNdIExUIixuZXh0RGF5OiJbXHUwOTg2XHUwOTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUw''@;'; put 'put ''OWJlXHUwOWIyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5''@;'; put 'put ''YjBcdTA5YzciLHBhc3Q6IiVzIFx1MDk4Nlx1MDk5N1x1MDljNyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsc3M6IiVkIFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToi''@;'; put 'put ''XHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsaGg6IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1''@;'; put 'put ''MDliZSIsZDoiXHUwOThmXHUwOTk1IFx1MDlhNlx1MDliZlx1MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIsTU06IiVkIFx1MDlhZVx1MDliZVx1MDliOCIseToiXHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDli''@;'; put 'put ''MCIseXk6IiVkIFx1MDlhY1x1MDk5Ylx1MDliMCJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5ZWNcdTA5ZWRcdTA5ZWVcdTA5ZWZcdTA5ZTZdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KX0scG9z''@;'; put 'put ''dGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxcdTA5YWRcdTA5Y2JcdTA5YjB8XHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlh''@;'; put 'put ''YVx1MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0dXJuIDEyPT09TSYmKE09MCksIlx1MDliMFx1''@;'; put 'put ''MDliZVx1MDlhNCI9PT1PP008ND9NOk0rMTI6Ilx1MDlhZFx1MDljYlx1MDliMCI9PT1PfHwiXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIj09PU8/TToiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PU8/TT49Mz9NOk0rMTI6Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDli''@;'; put 'put ''MiI9PT1PfHwiXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIj09PU8/TSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTw0PyJcdTA5YjBcdTA5YmVcdTA5YTQiOk08Nj8iXHUwOWFkXHUwOWNiXHUwOWIwIjpNPDEyPyJcdTA5Yjhc''@;'; put 'put ''dTA5OTVcdTA5YmVcdTA5YjIiOk08MTU/Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6TTwxOD8iXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIjpNPDIwPyJcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmUiOiJcdTA5YjBcdTA5YmVcdTA5YTQi''@;'; put 'put ''fSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSwzNDA2NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUw''@;'; put 'put ''OWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0sbT17Ilx1MDllNyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDll''@;'; put 'put ''NiI6IjAifTthZS5kZWZpbmVMb2NhbGUoImJuIix7bW9udGhzOiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhZVx1MDliZVx1MDli''@;'; put 'put ''MFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1''@;'; put 'put ''MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JcdTA5YWNcdTA5YjBfXHUwOWE4XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDlhMVx1MDliZlx1MDliOFx1MDljN1x1MDlhZVx1MDljZFx1''@;'; put 'put ''MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIy''@;'; put 'put ''X1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiX1x1MDlhOFx1''@;'; put 'put ''MDlhZFx1MDljN19cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzciLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyXHUw''@;'; put 'put ''OWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljMVx1MDlhN1x1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwXHUwOWFjXHUwOWJlXHUw''@;'; put 'put ''OWIwX1x1MDliNlx1MDlhOFx1MDliZlx1MDlhY1x1MDliZVx1MDliMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUw''@;'; put 'put ''OWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5''@;'; put 'put ''XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYi''@;'; put 'put ''LExUUzoiQSBoOm1tOnNzIFx1MDliOFx1MDlhZVx1MDlkZiIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiJ9''@;'; put 'put ''LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTg2XHUwOTljXSBMVCIsbmV4dERheToiW1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlhZVx1MDljMFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDk5N1x1MDlhNFx1MDk5NVx1MDliZVx1MDliMl0g''@;'; put 'put ''TFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUwOWE0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOWFhXHUwOWIwXHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdcdTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1MDljN1x1MDk5NSBcdTA5YjhcdTA5''@;'; put 'put ''YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLHNzOiIlZCBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLG06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZc''@;'; put 'put ''dTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZcdTA5YmZcdTA5YTgiLE06Ilx1MDk4''@;'; put 'put ''Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5YjgiLE1NOiIlZCBcdTA5YWVcdTA5YmVcdTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBcdTA5YWNcdTA5OWJcdTA5YjAiLHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwOWU3''@;'; put 'put ''XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWViXHUwOWVjXHUwOWVkXHUwOWVlXHUwOWVmXHUwOWU2XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGll''@;'; put 'put ''bVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5YTR8XHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWIwXHUwOWJlXHUwOWE0LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1''@;'; put 'put ''cm4gMTI9PT1NJiYoTT0wKSwiXHUwOWIwXHUwOWJlXHUwOWE0Ij09PU8mJk0+PTR8fCJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiPT09TyYmTTw1fHwiXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIj09PU8/TSsxMjpNfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0''@;'; put 'put ''dXJuIE08ND8iXHUwOWIwXHUwOWJlXHUwOWE0IjpNPDEwPyJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiOk08MTc/Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6TTwyMD8iXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIjoiXHUwOWIwXHUwOWJlXHUwOWE0In0sd2Vlazp7''@;'; put 'put ''ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMTEwMzQ6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MGYyMSIsMjoiXHUwZjIyIiwzOiJcdTBmMjMiLDQ6Ilx1MGYyNCIsNToiXHUwZjI1Iiw2OiJcdTBmMjYiLDc6Ilx1MGYyNyIsODoi''@;'; put 'put ''XHUwZjI4Iiw5OiJcdTBmMjkiLDA6Ilx1MGYyMCJ9LG09eyJcdTBmMjEiOiIxIiwiXHUwZjIyIjoiMiIsIlx1MGYyMyI6IjMiLCJcdTBmMjQiOiI0IiwiXHUwZjI1IjoiNSIsIlx1MGYyNiI6IjYiLCJcdTBmMjciOiI3IiwiXHUwZjI4IjoiOCIsIlx1MGYyOSI6IjkiLCJcdTBmMjAiOiIwIn07''@;'; put 'put ''YWUuZGVmaW5lTG9jYWxlKCJibyIse21vbnRoczoiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQ0XHUwZjBiXHUwZjU0XHUwZjdjX1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NF9cdTBmNWZc''@;'; put 'put ''dTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNjZcdTBmNzRcdTBmNThcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjVlXHUwZjcyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY2M1x1MGY5NFx1''@;'; put 'put ''MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmYjJcdTBmNzRcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1''@;'; put 'put ''MGY1Nlx1MGYwYlx1MGY1Nlx1MGY2Mlx1MGY5Mlx1MGZiMVx1MGY1MVx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmNDJcdTBmNzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUw''@;'; put 'put ''ZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBm''@;'; put 'put ''NDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBmNTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGY1Zlx1MGZiM1x1MGYwYjFfXHUwZjVmXHUwZmIzXHUwZjBiMl9cdTBmNWZcdTBmYjNcdTBmMGIzX1x1MGY1Zlx1MGZiM1x1MGYwYjRfXHUwZjVmXHUwZmIzXHUwZjBiNV9cdTBmNWZcdTBmYjNc''@;'; put 'put ''dTBmMGI2X1x1MGY1Zlx1MGZiM1x1MGYwYjdfXHUwZjVmXHUwZmIzXHUwZjBiOF9cdTBmNWZcdTBmYjNcdTBmMGI5X1x1MGY1Zlx1MGZiM1x1MGYwYjEwX1x1MGY1Zlx1MGZiM1x1MGYwYjExX1x1MGY1Zlx1MGZiM1x1MGYwYjEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUw''@;'; put 'put ''ZjVmXHUwZmIzXHUwZjBiXGR7MSwyfSkvLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGYwYlx1MGY1OFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJf''@;'; put 'put ''XHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU4XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYyXHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1MGY1NFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTVc''@;'; put 'put ''dTBmNzRcdTBmNjJcdTBmMGJcdTBmNTZcdTBmNzRfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU0XHUwZjBiXHUwZjY2XHUwZjQ0XHUwZjY2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBm''@;'; put 'put ''MGJfXHUwZjU1XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGY0OVx1MGY3Ml9cdTBmNWZc''@;'; put 'put ''dTBmYjNfXHUwZjU4XHUwZjcyXHUwZjQyX1x1MGY2M1x1MGZiN1x1MGY0Ml9cdTBmNTVcdTBmNzRcdTBmNjJfXHUwZjY2XHUwZjQ0XHUwZjY2X1x1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1MyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6''@;'; put 'put ''IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBmNTFcdTBmNzJcdTBmMGJcdTBmNjJcdTBmNzJcdTBmNDRdIExUIixuZXh0RGF5OiJbXHUw''@;'; put 'put ''ZjY2XHUwZjQ0XHUwZjBiXHUwZjQ5XHUwZjcyXHUwZjUzXSBMVCIsbmV4dFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTVcdTBmYjJcdTBmNDJcdTBmMGJcdTBmNjJcdTBmOTdcdTBmN2FcdTBmNjZcdTBmMGJcdTBmNThdLCBMVCIsbGFzdERheToiW1x1MGY0MVx1''@;'; put 'put ''MGYwYlx1MGY2Nlx1MGY0NF0gTFQiLGxhc3RXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjU4XHUwZjUwXHUwZjYwXHUwZjBiXHUwZjU4XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi''@;'; put 'put ''JXMgXHUwZjYzXHUwZjBiIixwYXN0OiIlcyBcdTBmNjZcdTBmOTRcdTBmNTNcdTBmMGJcdTBmNjMiLHM6Ilx1MGY2M1x1MGY1OFx1MGYwYlx1MGY2Nlx1MGY0NCIsc3M6IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY0Nlx1MGYwZCIsbToiXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBi''@;'; put 'put ''XHUwZjU4XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixtbToiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4IixoOiJcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTFcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGhoOiIlZCBcdTBmNDZcdTBm''@;'; put 'put ''NzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTEiLGQ6Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsZGQ6IiVkIFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYiIsTToiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcy''@;'; put 'put ''XHUwZjQyIixNTToiJWQgXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2Iix5OiJcdTBmNjNcdTBmN2NcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLHl5OiIlZCBcdTBmNjNcdTBmN2MifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwZjIxXHUwZjIyXHUw''@;'; put 'put ''ZjIzXHUwZjI0XHUwZjI1XHUwZjI2XHUwZjI3XHUwZjI4XHUwZjI5XHUwZjIwXS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGllbVBhcnNlOi9c''@;'; put 'put ''dTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2N8XHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2fFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NHxcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDJ8''@;'; put 'put ''XHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIj09PU8mJk0+PTR8fCJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBm''@;'; put 'put ''NDJcdTBmNzRcdTBmNDQiPT09TyYmTTw1fHwiXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIj09PU8/TSsxMjpNfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIjpNPDEwPyJc''@;'; put 'put ''dTBmNWVcdTBmN2NcdTBmNDJcdTBmNjZcdTBmMGJcdTBmNDBcdTBmNjYiOk08MTc/Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NCI6TTwyMD8iXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIjoiXHUwZjU4XHUwZjVhXHUwZjUzXHUw''@;'; put 'put ''ZjBiXHUwZjU4XHUwZjdjIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMjc2NzE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChCLFksWCl7cmV0dXJuIEIrIiAiK2Z1bmN0aW9uIE0oQixZKXtyZXR1cm4gMj09PVk/ZnVu''@;'; put 'put ''Y3Rpb24gTyhCKXt2YXIgWT17bToidiIsYjoidiIsZDoieiJ9O3JldHVybiB2b2lkIDA9PT1ZW0IuY2hhckF0KDApXT9COllbQi5jaGFyQXQoMCldK0Iuc3Vic3RyaW5nKDEpfShCKTpCfSh7bW06Im11bnV0ZW5uIixNTToibWl6IixkZDoiZGV2ZXpoIn1bWF0sQil9ZnVuY3Rpb24gbGUoQil7''@;'; put 'put ''cmV0dXJuIEI+OT9sZShCJTEwKTpCfXZhciBSPVsvXmdlbi9pLC9eY1tcdTAyYmNcJ11od2UvaSwvXm1ldS9pLC9eZWJyL2ksL15tYWUvaSwvXihtZXp8ZXZlKS9pLC9eZ291L2ksL15lb3MvaSwvXmd3ZS9pLC9eaGVyL2ksL15kdS9pLC9ea2VyL2ldLHo9L14oZ2VudmVyfGNbXHUwMmJjXCdd''@;'; put 'put ''aHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenV8Z2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLGo9Wy9eU3UvaSwvXkx1L2ksL15NZShbXnJdfCQpL2ksL15N''@;'; put 'put ''ZXIvaSwvXllhL2ksL15Hdy9pLC9eU2EvaV07YWUuZGVmaW5lTG9jYWxlKCJiciIse21vbnRoczoiR2VudmVyX0NcdTAyYmNod2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi''@;'; put 'put ''R2VuX0NcdTAyYmNod2VfTWV1X0Vicl9NYWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXIiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bF9MdW5fTWV1cnpoX01lcmNcdTAyYmNoZXJfWWFvdV9Hd2VuZXJfU2Fkb3JuIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bF9MdW5fTWV1X01l''@;'; put 'put ''cl9ZYW9fR3dlX1NhZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTHVfTWVfTWVyX1lhX0d3X1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2U6aixmdWxsV2Vla2RheXNQYXJzZTpbL15zdWwvaSwvXmx1bi9pLC9ebWV1cnpoL2ksL15tZXJjW1x1MDJiY1wnXWhlci9pLC9eeWFvdS9p''@;'; put 'put ''LC9eZ3dlbmVyL2ksL15zYWRvcm4vaV0sc2hvcnRXZWVrZGF5c1BhcnNlOlsvXlN1bC9pLC9eTHVuL2ksL15NZXUvaSwvXk1lci9pLC9eWWFvL2ksL15Hd2UvaSwvXlNhZC9pXSxtaW5XZWVrZGF5c1BhcnNlOmosbW9udGhzUmVnZXg6eixtb250aHNTaG9ydFJlZ2V4OnosbW9udGhzU3RyaWN0''@;'; put 'put ''UmVnZXg6L14oZ2VudmVyfGNbXHUwMmJjXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxl''@;'; put 'put ''b3N8Z3dlfGhlcnxkdXxrZXIpL2ksbW9udGhzUGFyc2U6Uixsb25nTW9udGhzUGFyc2U6UixzaG9ydE1vbnRoc1BhcnNlOlIsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkiLExMTDoiRCBbYSB2''@;'; put 'put ''aXpdIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGl6aXYgZGFdIExUIixuZXh0RGF5OiJbV2FyY1x1MDJiY2hvYXpoIGRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RhXSBMVCIsbGFzdERheToiW0Rl''@;'; put 'put ''Y1x1MDJiY2ggZGFdIExUIixsYXN0V2VlazoiZGRkZCBbcGFzZXQgZGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhLWJlbm4gJXMiLHBhc3Q6IiVzIFx1MDJiY3pvIixzOiJ1biBuZWJldWQgc2Vnb25kZW5ub1x4ZjkiLHNzOiIlZCBlaWxlbm4iLG06InVyIHZ1''@;'; put 'put ''bnV0ZW5uIixtbTp4LGg6InVuIGV1ciIsaGg6IiVkIGV1ciIsZDoidW4gZGV2ZXpoIixkZDp4LE06InVyIG1peiIsTU06eCx5OiJ1ciBibG9heiIseXk6ZnVuY3Rpb24gbShCKXtzd2l0Y2gobGUoQikpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDk6cmV0dXJuIEIrIiBibG9h''@;'; put 'put ''eiI7ZGVmYXVsdDpyZXR1cm4gQisiIHZsb2F6In19fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGFceGYxfHZldCkvLG9yZGluYWw6ZnVuY3Rpb24oQil7cmV0dXJuIEIrKDE9PT1CPyJhXHhmMSI6InZldCIpfSx3ZWVrOntkb3c6MSxkb3k6NH0sbWVyaWRpZW1QYXJzZTovYS5t''@;'; put 'put ''LnxnLm0uLyxpc1BNOmZ1bmN0aW9uKEIpe3JldHVybiJnLm0uIj09PUJ9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsWSxYKXtyZXR1cm4gQjwxMj8iYS5tLiI6ImcubS4ifX0pfShGKDE2Njc2KSl9LDM4MTUzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0''@;'; put 'put ''aW9uIHgobGUsTSxPKXt2YXIgUj1sZSsiICI7c3dpdGNoKE8pe2Nhc2Uic3MiOnJldHVybiBSKygxPT09bGU/InNla3VuZGEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtIjpyZXR1cm4gTT8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtj''@;'; put 'put ''YXNlIm1tIjpyZXR1cm4gUisoMT09PWxlPyJtaW51dGEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nhc2UiaCI6cmV0dXJuIE0/ImplZGFuIHNhdCI6ImplZG5vZyBzYXRhIjtjYXNlImhoIjpyZXR1cm4gUisoMT09PWxlPyJzYXQiOjI9PT1sZXx8Mz09PWxl''@;'; put 'put ''fHw0PT09bGU/InNhdGEiOiJzYXRpIik7Y2FzZSJkZCI6cmV0dXJuIFIrKDE9PT1sZT8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBSKygxPT09bGU/Im1qZXNlYyI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gUisoMT09''@;'; put 'put ''PWxlPyJnb2RpbmEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/ImdvZGluZSI6ImdvZGluYSIpfX1hZS5kZWZpbmVMb2NhbGUoImJzIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2Vt''@;'; put 'put ''YmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVk''@;'; put 'put ''YV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb''@;'; put 'put ''ZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Vd''@;'; put 'put ''IFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZXIgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6cmV0dXJuIltwcm9c''@;'; put 'put ''dTAxNjFsdV0gZGRkZCBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Byb1x1MDE2MWxpXSBkZGRkIFt1XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl''@;'; put 'put ''OiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6InBhciBzZWt1bmRpIixzczp4LG06eCxtbTp4LGg6eCxoaDp4LGQ6ImRhbiIsZGQ6eCxNOiJtamVzZWMiLE1NOngseToiZ29kaW51Iix5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7''@;'; put 'put ''ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNTQyODc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJjYSIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuZXJfZmVicmVyX21hclx4ZTdfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9h''@;'; put 'put ''Z29zdF9zZXRlbWJyZV9vY3R1YnJlX25vdmVtYnJlX2Rlc2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuZXJfZGUgZmVicmVyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlnX2RlIGp1bnlfZGUganVsaW9sX2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3R1YnJlX2RlIG5vdmVtYnJl''@;'; put 'put ''X2RlIGRlc2VtYnJlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXHMpK01NTU0vfSxtb250aHNTaG9ydDoiZ2VuLl9mZWJyLl9tYXJceGU3X2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVr''@;'; put 'put ''ZGF5czoiZGl1bWVuZ2VfZGlsbHVuc19kaW1hcnRzX2RpbWVjcmVzX2Rpam91c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kdC5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kdF9kY19kal9kdl9k''@;'; put 'put ''cyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIs''@;'; put 'put ''bGxsOiJEIE1NTSBZWVlZLCBIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthdnVpIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoi''@;'; put 'put ''bGEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2RlbVx4ZTAgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0s''@;'; put 'put ''bGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYWhpciBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc3NhdCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxzYW1l''@;'; put 'put ''RWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkJ2FxdVx4ZWQgJXMiLHBhc3Q6ImZhICVzIixzOiJ1bnMgc2Vnb25zIixzczoiJWQgc2Vnb25zIixtOiJ1biBtaW51dCIsbW06IiVkIG1pbnV0cyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JlcyIsZDoidW4gZGlhIixkZDoiJWQgZGll''@;'; put 'put ''cyIsTToidW4gbWVzIixNTToiJWQgbWVzb3MiLHk6InVuIGFueSIseXk6IiVkIGFueXMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHJ8bnx0fFx4ZTh8YSkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7dmFyIE09MT09PW0/InIiOjI9PT1tPyJuIjozPT09bT8iciI6ND09PW0/''@;'; put 'put ''InQiOiJceGU4IjtyZXR1cm4oInciPT09bGV8fCJXIj09PWxlKSYmKE09ImEiKSxtK019LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDcyNjE2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXtmb3JtYXQ6ImxlZGVuX1x4ZmFub3Jf''@;'; put 'put ''Ylx1MDE1OWV6ZW5fZHViZW5fa3ZcdTAxMWJ0ZW5fXHUwMTBkZXJ2ZW5fXHUwMTBkZXJ2ZW5lY19zcnBlbl96XHhlMVx1MDE1OVx4ZWRfXHUwMTU5XHhlZGplbl9saXN0b3BhZF9wcm9zaW5lYyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJsZWRuYV9ceGZhbm9yYV9iXHUwMTU5ZXpuYV9kdWJu''@;'; put 'put ''YV9rdlx1MDExYnRuYV9cdTAxMGRlcnZuYV9cdTAxMGRlcnZlbmNlX3NycG5hX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlceGVkam5hX2xpc3RvcGFkdV9wcm9zaW5jZSIuc3BsaXQoIl8iKX0sbT0ibGVkX1x4ZmFub19iXHUwMTU5ZV9kdWJfa3ZcdTAxMWJfXHUwMTBkdm5fXHUwMTBkdmNfc3Jw''@;'; put 'put ''X3pceGUxXHUwMTU5X1x1MDE1OVx4ZWRqX2xpc19wcm8iLnNwbGl0KCJfIiksbGU9Wy9ebGVkL2ksL15ceGZhbm8vaSwvXmJcdTAxNTllL2ksL15kdWIvaSwvXmt2XHUwMTFiL2ksL14oXHUwMTBkdm58XHUwMTBkZXJ2ZW4kfFx1MDEwZGVydm5hKS9pLC9eKFx1MDEwZHZjfFx1MDEwZGVydmVu''@;'; put 'put ''ZWN8XHUwMTBkZXJ2ZW5jZSkvaSwvXnNycC9pLC9eelx4ZTFcdTAxNTkvaSwvXlx1MDE1OVx4ZWRqL2ksL15saXMvaSwvXnByby9pXSxNPS9eKGxlZGVufFx4ZmFub3J8Ylx1MDE1OWV6ZW58ZHViZW58a3ZcdTAxMWJ0ZW58XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVu''@;'; put 'put ''fFx1MDEwZGVydm5hfHNycGVufHpceGUxXHUwMTU5XHhlZHxcdTAxNTlceGVkamVufGxpc3RvcGFkfHByb3NpbmVjfGxlZHxceGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pO2Z1bmN0aW9u''@;'; put 'put ''IE8oSyl7cmV0dXJuIEs+MSYmSzw1JiYxIT1+fihLLzEwKX1mdW5jdGlvbiBSKEssSSxrLEUpe3ZhciBqPUsrIiAiO3N3aXRjaChrKXtjYXNlInMiOnJldHVybiBJfHxFPyJwXHhlMXIgc2VrdW5kIjoicFx4ZTFyIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIEl8fEU/aisoTyhLKT8ic2Vr''@;'; put 'put ''dW5keSI6InNla3VuZCIpOmorInNla3VuZGFtaSI7Y2FzZSJtIjpyZXR1cm4gST8ibWludXRhIjpFPyJtaW51dHUiOiJtaW51dG91IjtjYXNlIm1tIjpyZXR1cm4gSXx8RT9qKyhPKEspPyJtaW51dHkiOiJtaW51dCIpOmorIm1pbnV0YW1pIjtjYXNlImgiOnJldHVybiBJPyJob2RpbmEiOkU/''@;'; put 'put ''ImhvZGludSI6ImhvZGlub3UiO2Nhc2UiaGgiOnJldHVybiBJfHxFP2orKE8oSyk/ImhvZGlueSI6ImhvZGluIik6aisiaG9kaW5hbWkiO2Nhc2UiZCI6cmV0dXJuIEl8fEU/ImRlbiI6ImRuZW0iO2Nhc2UiZGQiOnJldHVybiBJfHxFP2orKE8oSyk/ImRueSI6ImRuXHhlZCIpOmorImRueSI7''@;'; put 'put ''Y2FzZSJNIjpyZXR1cm4gSXx8RT8ibVx1MDExYnNceGVkYyI6Im1cdTAxMWJzXHhlZGNlbSI7Y2FzZSJNTSI6cmV0dXJuIEl8fEU/aisoTyhLKT8ibVx1MDExYnNceGVkY2UiOiJtXHUwMTFic1x4ZWRjXHUwMTZmIik6aisibVx1MDExYnNceGVkY2kiO2Nhc2UieSI6cmV0dXJuIEl8fEU/InJv''@;'; put 'put ''ayI6InJva2VtIjtjYXNlInl5IjpyZXR1cm4gSXx8RT9qKyhPKEspPyJyb2t5IjoibGV0Iik6aisibGV0eSJ9fWFlLmRlZmluZUxvY2FsZSgiY3MiLHttb250aHM6eCxtb250aHNTaG9ydDptLG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGxl''@;'; put 'put ''ZGVufGxlZG5hfFx4ZmFub3JhfFx4ZmFub3J8Ylx1MDE1OWV6ZW58Ylx1MDE1OWV6bmF8ZHViZW58ZHVibmF8a3ZcdTAxMWJ0ZW58a3ZcdTAxMWJ0bmF8XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEwZGVydm5hfHNycGVufHNycG5hfHpceGUxXHUwMTU5XHhl''@;'; put 'put ''ZHxcdTAxNTlceGVkamVufFx1MDE1OVx4ZWRqbmF8bGlzdG9wYWR1fGxpc3RvcGFkfHByb3NpbmVjfHByb3NpbmNlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14obGVkfFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3ZcdTAxMWJ8XHUwMTBkdm58XHUwMTBkdmN8c3JwfHpceGUxXHUwMTU5fFx1''@;'; put 'put ''MDE1OVx4ZWRqfGxpc3xwcm8pL2ksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6Im5lZFx1MDExYmxlX3BvbmRcdTAxMWJsXHhlZF9ceGZhdGVyXHhmZF9zdFx1MDE1OWVkYV9cdTAxMGR0dnJ0ZWtfcFx4ZTF0ZWtfc29ib3Rh''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX1x4ZmF0X3N0X1x1MDEwZHRfcFx4ZTFfc28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06''@;'; put 'put ''c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIEg6bW0iLGw6IkQuIE0uIFlZWVkifSxjYWxlbmRhcjp7c2FtZURheToiW2RuZXMgdl0gTFQiLG5leHREYXk6Ilt6XHhlZHRyYSB2XSBMVCIs''@;'; put 'put ''bmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdiBuZWRcdTAxMWJsaSB2XSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW3ZdIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlt2ZSBzdFx1MDE1OWVkdSB2XSBMVCI7Y2FzZSA0OnJldHVybiJb''@;'; put 'put ''dmUgXHUwMTBkdHZydGVrIHZdIExUIjtjYXNlIDU6cmV0dXJuIlt2IHBceGUxdGVrIHZdIExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSB2XSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSB2XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJl''@;'; put 'put ''dHVybiJbbWludWxvdSBuZWRcdTAxMWJsaSB2XSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW21pbnVsXHhlOV0gZGRkZCBbdl0gTFQiO2Nhc2UgMzpyZXR1cm4iW21pbnVsb3Ugc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW3ZdIExU''@;'; put 'put ''IjtjYXNlIDY6cmV0dXJuIlttaW51bG91IHNvYm90dSB2XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicFx1MDE1OWVkICVzIixzOlIsc3M6UixtOlIsbW06UixoOlIsaGg6UixkOlIsZGQ6UixNOlIsTU06Uix5OlIseXk6Un0sZGF5T2ZN''@;'; put 'put ''b250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDI3MDQ5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiY3YiLHttb250aHM6Ilx1MDQzYVx1''@;'; put 'put ''MDRkMVx1MDQ0MFx1MDQzYlx1MDQzMFx1MDQ0N19cdTA0M2RcdTA0MzBcdTA0NDBcdTA0ZDFcdTA0NDFfXHUwNDNmXHUwNDQzXHUwNDQ4X1x1MDQzMFx1MDQzYVx1MDQzMF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNGFiXHUwNGQ3XHUwNDQwXHUwNDQyXHUwNDNjXHUwNDM1X1x1MDQ0M1x1MDQ0''@;'; put 'put ''Mlx1MDRkMV9cdTA0YWJcdTA0NDNcdTA0NDBcdTA0M2JcdTA0MzBfXHUwNDMwXHUwNDMyXHUwNGQxXHUwNDNkX1x1MDQ0ZVx1MDQzZlx1MDQzMF9cdTA0NDdcdTA0ZjNcdTA0M2FfXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDQyXHUwNDMwXHUwNDMyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJc''@;'; put 'put ''dTA0M2FcdTA0ZDFcdTA0NDBfXHUwNDNkXHUwNDMwXHUwNDQwX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRkN1x1MDQ0MF9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwX1x1MDQzMFx1MDQzMlx1''@;'; put 'put ''MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDMyXHUwNDRiXHUwNDQwXHUwNDQxXHUwNDMwXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0Mlx1MDQ0M1x1''@;'; put 'put ''MDQzZFx1MDQ0Mlx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NGJcdTA0NDJcdTA0M2JcdTA0MzBcdTA0NDBcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRlXHUwNDNkXHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQzYVx1MDRkN1x1MDRhYlx1MDQzZFx1MDQzNVx1MDQ0MFx1MDQzZFx1''@;'; put 'put ''MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NGRcdTA0NDBcdTA0M2RcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDQ4XHUwNGQxXHUwNDNjXHUwNDMwXHUwNDQyXHUwNDNhXHUwNDQzXHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MF9cdTA0''@;'; put 'put ''NDJcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJfXHUwNDRkXHUwNDQwXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDMyXHUwNDQwX1x1MDQ0Mlx1MDQzZF9cdTA0NGJcdTA0''@;'; put 'put ''NDJfXHUwNDRlXHUwNDNkX1x1MDQzYVx1MDRhYl9cdTA0NGRcdTA0NDBfXHUwNDQ4XHUwNDNjIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVkiLExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0Mzhd''@;'; put 'put ''IE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSIsTExMOiJZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFst''@;'; put 'put ''XHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwgSEg6bW0iLExMTEw6ImRkZGQsIFlZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddLCBISDptbSJ9''@;'; put 'put ''LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDFmXHUwNDMwXHUwNDRmXHUwNDNkXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4dERheToiW1x1MDQyYlx1MDQ0MFx1MDQzMFx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0''@;'; put 'put ''Mlx1MDQ0MFx1MDQzNV0iLGxhc3REYXk6IltcdTA0ZDZcdTA0M2RcdTA0MzVcdTA0NDBdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixuZXh0V2VlazoiW1x1MDRhYVx1MDQzOFx1MDQ0Mlx1MDQzNVx1MDQ0MV0gZGRkZCBMVCBbXHUwNDQxXHUwNDM1''@;'; put 'put ''XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbGFzdFdlZWs6IltcdTA0MThcdTA0NDBcdTA0NDJcdTA0M2RcdTA0ZDddIGRkZGQgTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6''@;'; put 'put ''ZnVuY3Rpb24obSl7cmV0dXJuIG0rKC9cdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIkL2kuZXhlYyhtKT8iXHUwNDQwXHUwNDM1XHUwNDNkIjovXHUwNGFiXHUwNDQzXHUwNDNiJC9pLmV4ZWMobSk/Ilx1MDQ0Mlx1MDQzMFx1MDQzZCI6Ilx1MDQ0MFx1MDQzMFx1MDQzZCIpfSxwYXN0''@;'; put 'put ''OiIlcyBcdTA0M2FcdTA0MzBcdTA0NGZcdTA0M2JcdTA0M2JcdTA0MzAiLHM6Ilx1MDQzZlx1MDRkN1x1MDQ0MC1cdTA0MzhcdTA0M2EgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDQyIixzczoiJWQgXHUwNGFiXHUwNDM1XHUwNDNhXHUwNDNhXHUwNDQzXHUwNDNk''@;'; put 'put ''XHUwNDQyIixtOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyIixoaDoiJWQgXHUw''@;'; put 'put ''NDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyIixkOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDNhXHUwNDQzXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNDQzXHUwNDNkIixNOiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1IixNTToiJWQgXHUwNDQzXHUwNDM5''@;'; put 'put ''XHUwNGQxXHUwNDQ1Iix5OiJcdTA0M2ZcdTA0ZDdcdTA0NDAgXHUwNGFiXHUwNDQzXHUwNDNiIix5eToiJWQgXHUwNGFiXHUwNDQzXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS1cdTA0M2NcdTA0ZDdcdTA0NDgvLG9yZGluYWw6IiVkLVx1MDQzY1x1MDRkN1x1MDQ0''@;'; put 'put ''OCIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sOTkxNzI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJjeSIse21vbnRoczoiSW9uYXdyX0Nod2Vmcm9yX01hd3J0aF9FYnJpbGxfTWFpX01laGVmaW5fR29yZmZl''@;'; put 'put ''bm5hZl9Bd3N0X01lZGlfSHlkcmVmX1RhY2h3ZWRkX1JoYWdmeXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Iklvbl9DaHdlX01hd19FYnJfTWFpX01laF9Hb3JfQXdzX01lZF9IeWRfVGFjaF9SaGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdy''@;'; put 'put ''dGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bF9MbHVuX01hd19NZXJfSWF1X0d3ZV9TYWQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0xsX01hX01lX0lhX0d3X1NhIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6IltIZWRkaXcgYW1dIExUIixuZXh0RGF5OiJbWWZvcnkgYW1dIExUIixuZXh0V2VlazoiZGRkZCBbYW1dIExUIixsYXN0RGF5OiJbRGRvZSBhbV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkaXdldGhhZiBhbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im1ld24g''@;'; put 'put ''JXMiLHBhc3Q6IiVzIHluIFx4ZjRsIixzOiJ5Y2h5ZGlnIGVpbGlhZGF1IixzczoiJWQgZWlsaWFkIixtOiJtdW51ZCIsbW06IiVkIG11bnVkIixoOiJhd3IiLGhoOiIlZCBhd3IiLGQ6ImRpd3Jub2QiLGRkOiIlZCBkaXdybm9kIixNOiJtaXMiLE1NOiIlZCBtaXMiLHk6ImJsd3lkZHluIix5''@;'; put 'put ''eToiJWQgZmx5bmVkZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZmVkfGFpbnxhZnxpbHx5ZGR8ZWR8ZWcpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBNPSIiO3JldHVybiBtPjIwP009NDA9PT1tfHw1MD09PW18fDYwPT09bXx8ODA9PT1tfHwxMDA9PT1tPyJmZWQiOiJh''@;'; put 'put ''aW4iOm0+MCYmKE09WyIiLCJhZiIsImlsIiwieWRkIiwieWRkIiwiZWQiLCJlZCIsImVkIiwiZmVkIiwiZmVkIiwiZmVkIiwiZWciLCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJlZyIsImZlZCIsImVnIiwiZmVkIl1bbV0pLG0rTX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYp''@;'; put 'put ''KX0sMjA2MDU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJkYSIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1i''@;'; put 'put ''ZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzXHhmOG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY4cmRhZyIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1Nob3J0OiJzXHhmOG5fbWFuX3Rpcl9vbnNfdG9yX2ZyZV9sXHhmOHIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY4X21hX3RpX29uX3RvX2ZyX2xceGY4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1N''@;'; put 'put ''LllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIFtkLl0gRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbaSBtb3JnZW4ga2wuXSBMVCIsbmV4dFdlZWs6''@;'; put 'put ''InBceGU1IGRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltpIGdceGU1ciBrbC5dIExUIixsYXN0V2VlazoiW2ldIGRkZGRbcyBrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6ImZceGU1IHNla3VuZGVyIixzczoiJWQg''@;'; put 'put ''c2VrdW5kZXIiLG06ImV0IG1pbnV0IixtbToiJWQgbWludXR0ZXIiLGg6ImVuIHRpbWUiLGhoOiIlZCB0aW1lciIsZDoiZW4gZGFnIixkZDoiJWQgZGFnZSIsTToiZW4gbVx4ZTVuZWQiLE1NOiIlZCBtXHhlNW5lZGVyIix5OiJldCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9y''@;'; put 'put ''ZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDkzMzk1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXttOlsiZWluZSBNaW51dGUi''@;'; put 'put ''LCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltsZSsiIFRhZ2UiLGxlKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0s''@;'; put 'put ''TU06W2xlKyIgTW9uYXRlIixsZSsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W2xlKyIgSmFocmUiLGxlKyIgSmFocmVuIl19O3JldHVybiBNP3pbT11bMF06eltPXVsxXX1hZS5kZWZpbmVMb2NhbGUoImRlLWF0Iix7bW9udGhzOiJKXHhlNG5uZXJfRmVicnVh''@;'; put 'put ''cl9NXHhlNHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKXHhlNG4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhI''@;'; put 'put ''Om1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2Vz''@;'; put 'put ''dGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06eCxtbToiJWQgTWludXRlbiIsaDp4''@;'; put 'put ''LGhoOiIlZCBTdHVuZGVuIixkOngsZGQ6eCx3Ongsd3c6IiVkIFdvY2hlbiIsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5OTgzNTpmdW5jdGlvbihhdCxJ''@;'; put 'put ''ZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbbGUrIiBUYWdl''@;'; put 'put ''IixsZSsiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltsZSsiIE1vbmF0ZSIsbGUrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltsZSsiIEphaHJlIixsZSsiIEphaHJlbiJd''@;'; put 'put ''fTtyZXR1cm4gTT96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJkZS1jaCIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNT''@;'; put 'put ''aG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ft''@;'; put 'put ''c3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoi''@;'; put 'put ''SEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Iltt''@;'; put 'put ''b3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMi''@;'; put 'put ''LHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06eCxtbToiJWQgTWludXRlbiIsaDp4LGhoOiIlZCBTdHVuZGVuIixkOngsZGQ6eCx3Ongsd3c6IiVkIFdvY2hlbiIsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3Jk''@;'; put 'put ''aW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5NDAxMzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUg''@;'; put 'put ''U3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbbGUrIiBUYWdlIixsZSsiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltsZSsiIE1vbmF0ZSIsbGUrIiBNb25h''@;'; put 'put ''dGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltsZSsiIEphaHJlIixsZSsiIEphaHJlbiJdfTtyZXR1cm4gTT96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJkZSIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1''@;'; put 'put ''Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtk''@;'; put 'put ''YXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1Nh''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0''@;'; put 'put ''ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOngsbW06IiVkIE1pbnV0ZW4iLGg6eCxoaDoiJWQgU3R1bmRlbiIsZDp4LGRkOngsdzp4LHd3OiIl''@;'; put 'put ''ZCBXb2NoZW4iLE06eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTQ1NzA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IHg9WyJcdTA3OTZcdTA3YWNcdTA3ODJcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3OGFcdTA3YWNcdTA3ODRcdTA3YjBcdTA3ODNcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3ODlcdTA3YTdcdTA3ODNcdTA3YThcdTA3OTdcdTA3YWEiLCJcdTA3ODdc''@;'; put 'put ''dTA3YWRcdTA3OTVcdTA3YjBcdTA3ODNcdTA3YTlcdTA3OGRcdTA3YWEiLCJcdTA3ODlcdTA3YWQiLCJcdTA3OTZcdTA3YWJcdTA3ODJcdTA3YjAiLCJcdTA3OTZcdTA3YWFcdTA3OGRcdTA3YTZcdTA3ODdcdTA3YTgiLCJcdTA3ODdcdTA3YWZcdTA3OGVcdTA3YTZcdTA3OTBcdTA3YjBcdTA3''@;'; put 'put ''OTNcdTA3YWEiLCJcdTA3OTBcdTA3YWNcdTA3OTVcdTA3YjBcdTA3OTNcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODdcdTA3YWVcdTA3ODZcdTA3YjBcdTA3OTNcdTA3YWZcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODJcdTA3YWVcdTA3''@;'; put 'put ''ODhcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3OTFcdTA3YThcdTA3OTBcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiXSxtPVsiXHUwNzg3XHUwN2E3XHUwNzhiXHUwN2E4XHUwNzg3XHUwN2IwXHUwNzhjXHUwN2E2Iiwi''@;'; put 'put ''XHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2IiwiXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwXHUwNzhlXHUwN2E3XHUwNzgzXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3XHUwNzkwXHUwN2IwXHUwNzhhXHUwN2E2XHUwNzhjXHUwN2E4''@;'; put 'put ''IiwiXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhXHUwNzgzXHUwN2FhIiwiXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4XHUwNzgwXHUwN2E4XHUwNzgzXHUwN2FhIl07YWUuZGVmaW5lTG9jYWxlKCJkdiIse21vbnRoczp4LG1vbnRoc1Nob3J0Ongsd2Vla2RheXM6bSx3ZWVrZGF5c1Nob3J0Om0s''@;'; put 'put ''d2Vla2RheXNNaW46Ilx1MDc4N1x1MDdhN1x1MDc4Ylx1MDdhOF9cdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTZfXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwX1x1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNl9cdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdfXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhX1x1''@;'; put 'put ''MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL00vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVy''@;'; put 'put ''aWRpZW1QYXJzZTovXHUwNzg5XHUwNzg2fFx1MDc4OVx1MDc4YS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4iXHUwNzg5XHUwNzhhIj09PU19LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTwxMj8iXHUwNzg5XHUwNzg2IjoiXHUwNzg5XHUwNzhhIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6IltcdTA3ODlcdTA3YThcdTA3ODdcdTA3YTZcdTA3OGJcdTA3YWFdIExUIixuZXh0RGF5OiJbXHUwNzg5XHUwN2E3XHUwNzhiXHUwN2E2XHUwNzg5XHUwN2E3XSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltcdTA3ODdcdTA3YThcdTA3ODdcdTA3YjBcdTA3OTRcdTA3YWNd''@;'; put 'put ''IExUIixsYXN0V2VlazoiW1x1MDc4YVx1MDdhN1x1MDc4N1x1MDdhOFx1MDc4Y1x1MDdhYVx1MDc4OFx1MDdhOF0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNzhjXHUwN2FjXHUwNzgzXHUwN2FkXHUwNzhlXHUwN2E2XHUwNzg3XHUwN2E4ICVzIixw''@;'; put 'put ''YXN0OiJcdTA3ODZcdTA3YWFcdTA3ODNcdTA3YThcdTA3ODJcdTA3YjAgJXMiLHM6Ilx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYVx1MDc4Nlx1MDdhZVx1MDc4NVx1MDdhY1x1MDc4N1x1MDdiMCIsc3M6ImQlIFx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdh''@;'; put 'put ''YVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYSIsbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FjXHUwNzg3XHUwN2IwIixtbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FhICVkIixoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThc''@;'; put 'put ''dTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLGhoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWEgJWQiLGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsZGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1''@;'; put 'put ''MDc5MFx1MDdiMCAlZCIsTToiXHUwNzg5XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixNTToiXHUwNzg5XHUwN2E2XHUwNzkwXHUwN2IwICVkIix5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLHl5OiJcdTA3ODdcdTA3YTZcdTA3ODBc''@;'; put 'put ''dTA3YTZcdTA3ODNcdTA3YWEgJWQifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo3LGRveToxMn19KX0oRigxNjY3Nikp''@;'; put 'put ''fSwzMTg1OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVsIix7bW9udGhzTm9taW5hdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwM2E2XHUw''@;'; put 'put ''M2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNjMVx1MDNjNFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYWZcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzljXHUwM2FjXHUw''@;'; put 'put ''M2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1MDNiZFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2NkXHUwM2IzXHUwM2JmXHUwM2M1XHUwM2MzXHUwM2M0XHUwM2JmXHUwM2MyX1x1MDNhM1x1''@;'; put 'put ''MDNiNVx1MDNjMFx1MDNjNFx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzY2VcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlkXHUwM2JmXHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUw''@;'; put 'put ''M2MyX1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMiIuc3BsaXQoIl8iKSxtb250aHNHZW5pdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwM2E2XHUw''@;'; put 'put ''M2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDNjMVx1MDNjNFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzljXHUwM2IxXHUw''@;'; put 'put ''MzkwXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiZFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2M1XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2MzXHUwM2M0XHUwM2JmXHUwM2M1X1x1MDNhM1x1''@;'; put 'put ''MDNiNVx1MDNjMFx1MDNjNFx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzYzlcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlkXHUwM2JmXHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUw''@;'; put 'put ''M2M1X1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNSIuc3BsaXQoIl8iKSxtb250aHM6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIGxlPyJzdHJpbmciPT10eXBlb2YgTSYmL0QvLnRlc3QoTS5zdWJzdHJpbmcoMCxNLmluZGV4T2YoIk1N''@;'; put 'put ''TU0iKSkpP3RoaXMuX21vbnRoc0dlbml0aXZlRWxbbGUubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW2xlLm1vbnRoKCldOnRoaXMuX21vbnRoc05vbWluYXRpdmVFbH0sbW9udGhzU2hvcnQ6Ilx1MDM5OVx1MDNiMVx1MDNiZF9cdTAzYTZcdTAzYjVcdTAzYjJfXHUwMzljXHUw''@;'; put 'put ''M2IxXHUwM2MxX1x1MDM5MVx1MDNjMFx1MDNjMV9cdTAzOWNcdTAzYjFcdTAzY2FfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JkX1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiYl9cdTAzOTFcdTAzYzVcdTAzYjNfXHUwM2EzXHUwM2I1XHUwM2MwX1x1MDM5Zlx1MDNiYVx1MDNjNF9cdTAzOWRcdTAz''@;'; put 'put ''YmZcdTAzYjVfXHUwMzk0XHUwM2I1XHUwM2JhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTAzOWFcdTAzYzVcdTAzYzFcdTAzYjlcdTAzYjFcdTAzYmFcdTAzYWVfXHUwMzk0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2FkXHUwM2MxXHUwM2IxX1x1MDNhNFx1MDNjMVx1MDNhZlx1MDNjNFx1MDNi''@;'; put 'put ''N19cdTAzYTRcdTAzYjVcdTAzYzRcdTAzYWNcdTAzYzFcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2FkXHUwM2JjXHUwM2MwXHUwM2M0XHUwM2I3X1x1MDNhMFx1MDNiMVx1MDNjMVx1MDNiMVx1MDNjM1x1MDNiYVx1MDNiNVx1MDNjNVx1MDNhZV9cdTAzYTNcdTAzYWNcdTAzYjJcdTAzYjJcdTAz''@;'; put 'put ''YjFcdTAzYzRcdTAzYmYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwMzlhXHUwM2M1XHUwM2MxX1x1MDM5NFx1MDNiNVx1MDNjNV9cdTAzYTRcdTAzYzFcdTAzYjlfXHUwM2E0XHUwM2I1XHUwM2M0X1x1MDNhMFx1MDNiNVx1MDNiY19cdTAzYTBcdTAzYjFcdTAzYzFfXHUwM2EzXHUw''@;'; put 'put ''M2IxXHUwM2IyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAzOWFcdTAzYzVfXHUwMzk0XHUwM2I1X1x1MDNhNFx1MDNjMV9cdTAzYTRcdTAzYjVfXHUwM2EwXHUwM2I1X1x1MDNhMFx1MDNiMV9cdTAzYTNcdTAzYjEiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXty''@;'; put 'put ''ZXR1cm4gbGU+MTE/Tz8iXHUwM2JjXHUwM2JjIjoiXHUwMzljXHUwMzljIjpPPyJcdTAzYzBcdTAzYmMiOiJcdTAzYTBcdTAzOWMifSxpc1BNOmZ1bmN0aW9uKGxlKXtyZXR1cm4iXHUwM2JjIj09PShsZSsiIikudG9Mb3dlckNhc2UoKVswXX0sbWVyaWRpZW1QYXJzZTovW1x1MDNhMFx1MDM5''@;'; put 'put ''Y11cLj9cdTAzOWM/XC4/L2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhckVsOntz''@;'; put 'put ''YW1lRGF5OiJbXHUwM2EzXHUwM2FlXHUwM2JjXHUwM2I1XHUwM2MxXHUwM2IxIHt9XSBMVCIsbmV4dERheToiW1x1MDM5MVx1MDNjZFx1MDNjMVx1MDNiOVx1MDNiZiB7fV0gTFQiLG5leHRXZWVrOiJkZGRkIFt7fV0gTFQiLGxhc3REYXk6IltcdTAzYTdcdTAzYjhcdTAzYjVcdTAzYzIge31d''@;'; put 'put ''IExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiA2PT09dGhpcy5kYXkoKT8iW1x1MDNjNFx1MDNiZiBcdTAzYzBcdTAzYzFcdTAzYmZcdTAzYjdcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYmNcdTAzYjVcdTAzYmRcdTAzYmZdIGRkZGQgW3t9XSBMVCI6IltcdTAzYzRcdTAzYjdcdTAzYmQg''@;'; put 'put ''XHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2I3XSBkZGRkIFt7fV0gTFQifSxzYW1lRWxzZToiTCJ9LGNhbGVuZGFyOmZ1bmN0aW9uKGxlLE0pe3ZhciBPPXRoaXMuX2NhbGVuZGFyRWxbbGVdLFI9TSYmTS5ob3VycygpO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbiB4KGxlKXtyZXR1cm4gdHlwZW9mIEZ1bmN0aW9uPCJ1IiYmbGUgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsZSl9KE8pJiYoTz1PLmFwcGx5KE0pKSxPLnJlcGxhY2UoInt9IixS''@;'; put 'put ''JTEyPT0xPyJcdTAzYzNcdTAzYzRcdTAzYjciOiJcdTAzYzNcdTAzYzRcdTAzYjlcdTAzYzIiKX0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDNjM1x1MDNiNSAlcyIscGFzdDoiJXMgXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JkIixzOiJcdTAzYmJcdTAzYWZcdTAzYjNcdTAzYjEgXHUwM2I0''@;'; put 'put ''XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixzczoiJWQgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixtOiJcdTAzYWRcdTAzYmRc''@;'; put 'put ''dTAzYjEgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2NjIixtbToiJWQgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2FjIixoOiJcdTAzYmNcdTAzYWZcdTAzYjEgXHUwM2NlXHUwM2MxXHUwM2IxIixoaDoiJWQgXHUwM2NlXHUwM2MxXHUwM2I1XHUwM2MyIixkOiJcdTAzYmNcdTAz''@;'; put 'put ''YWZcdTAzYjEgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2IxIixkZDoiJWQgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2I1XHUwM2MyIixNOiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAzYzIgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2IxXHUwM2MyIixNTToiJWQgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2I1''@;'; put 'put ''XHUwM2MyIix5OiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAzYzIgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2JmXHUwM2MyIix5eToiJWQgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2I5XHUwM2IxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MDNiNy8sb3JkaW5h''@;'; put 'put ''bDoiJWRcdTAzYjciLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDU1Nzg1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4tYXUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1''@;'; put 'put ''bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNk''@;'; put 'put ''YXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltU''@;'; put 'put ''b21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcg''@;'; put 'put ''c2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0o''@;'; put 'put ''RigxNjY3NikpfSw4Mzc5MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWNhIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05v''@;'; put 'put ''dmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJk''@;'; put 'put ''YXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IllZ''@;'; put 'put ''WVktTU0tREQiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBb''@;'; put 'put ''YXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1p''@;'; put 'put ''bnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8''@;'; put 'put ''dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX19KX0oRigxNjY3NikpfSw1NzY1MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWdiIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01h''@;'; put 'put ''cl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9G''@;'; put 'put ''cmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExM''@;'; put 'put ''TEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQg''@;'; put 'put ''W2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIs''@;'; put 'put ''ZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAw''@;'; put 'put ''LzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw4MTkyOTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWllIix7bW9u''@;'; put 'put ''dGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19U''@;'; put 'put ''dV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7''@;'; put 'put ''c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIs''@;'; put 'put ''eToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxl''@;'; put 'put ''PyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDE5ODE4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4taWwiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1''@;'; put 'put ''bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNk''@;'; put 'put ''YXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9y''@;'; put 'put ''cm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNv''@;'; put 'put ''bmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3Jk''@;'; put 'put ''aW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9fSl9KEYoMTY2NzYpKX0sNjYxMjpmdW5jdGlv''@;'; put 'put ''bihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWluIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZ''@;'; put 'put ''WSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5''@;'; put 'put ''IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFu''@;'; put 'put ''IGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3Zh''@;'; put 'put ''ciBsZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMjQ5MDA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1ueiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01h''@;'; put 'put ''eV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJk''@;'; put 'put ''ZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRd''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoi''@;'; put 'put ''JWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTAp''@;'; put 'put ''PyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDcyNzIxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4tc2ciLHttb250aHM6''@;'; put 'put ''IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dl''@;'; put 'put ''X1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl''@;'; put 'put ''OiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToi''@;'; put 'put ''YSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJy''@;'; put 'put ''ZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDk1MTU5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW8iLHttb250aHM6ImphbnVhcm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21ham9fanVuaW9f''@;'; put 'put ''anVsaW9fYVx1MDE2ZGd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcnRfYXByX21hal9qdW5fanVsX2FcdTAxNmRnX3NlcHRfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRpbWFuXHUw''@;'; put 'put ''MTA5b19sdW5kb19tYXJkb19tZXJrcmVkb19cdTAxMzVhXHUwMTZkZG9fdmVuZHJlZG9fc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbV9sdW5fbWFyZF9tZXJrX1x1MDEzNWFcdTAxNmRfdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfXHUw''@;'; put 'put ''MTM1YV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSIsTExMOiJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixMTExMOiJkZGRkW25dLCBb''@;'; put 'put ''bGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIFtsYV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1thcF1cLnRcLm0vaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybiJwIj09PW0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCl9LG1lcmlk''@;'; put 'put ''aWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG0+MTE/TT8icC50Lm0uIjoiUC5ULk0uIjpNPyJhLnQubS4iOiJBLlQuTS4ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvZGlhXHUwMTZkIGplXSBMVCIsbmV4dERheToiW01vcmdhXHUwMTZkIGplXSBMVCIsbmV4dFdlZWs6ImRkZGRbbiBqZV0g''@;'; put 'put ''TFQiLGxhc3REYXk6IltIaWVyYVx1MDE2ZCBqZV0gTFQiLGxhc3RXZWVrOiJbcGFzaW50YW5dIGRkZGRbbiBqZV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvc3QgJXMiLHBhc3Q6ImFudGFcdTAxNmQgJXMiLHM6ImtlbGthaiBzZWt1bmRvaiIsc3M6IiVkIHNl''@;'; put 'put ''a3VuZG9qIixtOiJ1bnUgbWludXRvIixtbToiJWQgbWludXRvaiIsaDoidW51IGhvcm8iLGhoOiIlZCBob3JvaiIsZDoidW51IHRhZ28iLGRkOiIlZCB0YWdvaiIsTToidW51IG1vbmF0byIsTU06IiVkIG1vbmF0b2oiLHk6InVudSBqYXJvIix5eToiJWQgamFyb2oifSxkYXlPZk1vbnRoT3Jk''@;'; put 'put ''aW5hbFBhcnNlOi9cZHsxLDJ9YS8sb3JkaW5hbDoiJWRhIix3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSwxMTc4MDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28u''@;'; put 'put ''X3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksbGU9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwv''@;'; put 'put ''XnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSxNPS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5c''@;'; put 'put ''Lj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7YWUuZGVmaW5lTG9jYWxlKCJlcy1kbyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2ll''@;'; put 'put ''bWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihSLHope3JldHVybiBSPy8tTU1NLS8udGVzdCh6KT9tW1IubW9udGgoKV06eFtSLm1vbnRoKCldOnh9LG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98''@;'; put 'put ''bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwu''@;'; put 'put ''P3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTpsZSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExU''@;'; put 'put ''UzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEi''@;'; put 'put ''KygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRo''@;'; put 'put ''aXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGho''@;'; put 'put ''OiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEv''@;'; put 'put ''LG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMjM0Njg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9k''@;'; put 'put ''aWMuIi5zcGxpdCgiXyIpLG09ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLGxlPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9e''@;'; put 'put ''bm92L2ksL15kaWMvaV0sTT0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98''@;'; put 'put ''c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO2FlLmRlZmluZUxvY2FsZSgiZXMtbXgiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzU2hvcnQ6ZnVuY3Rpb24oUix6KXtyZXR1cm4gUj8vLU1NTS0vLnRlc3Qoeik/bVtSLm1vbnRoKCldOnhbUi5tb250aCgpXTp4fSxtb250aHNSZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98''@;'; put 'put ''anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xk''@;'; put 'put ''aWNcLj8pL2ksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9s''@;'; put 'put ''dW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9N''@;'; put 'put ''TS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlz''@;'; put 'put ''LmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIi''@;'; put 'put ''KSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQi''@;'; put 'put ''fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEi''@;'; put 'put ''LGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntk''@;'; put 'put ''b3c6MCxkb3k6NH0saW52YWxpZERhdGU6IkZlY2hhIGludlx4ZTFsaWRhIn0pfShGKDE2Njc2KSl9LDQ0OTM4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3Qu''@;'; put 'put ''X25vdi5fZGljLiIuc3BsaXQoIl8iKSxtPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxsZT1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15v''@;'; put 'put ''Y3QvaSwvXm5vdi9pLC9eZGljL2ldLE09L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98''@;'; put 'put ''YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTthZS5kZWZpbmVMb2NhbGUoImVzLXVzIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKFIseil7cmV0dXJuIFI/Ly1NTU0tLy50ZXN0KHopP21bUi5tb250aCgpXTp4W1IubW9udGgoKV06eH0sbW9udGhzUmVnZXg6TSxtb250aHNTaG9ydFJlZ2V4Ok0sbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJp''@;'; put 'put ''bHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xu''@;'; put 'put ''b3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOmxlLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6''@;'; put 'put ''ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNz''@;'; put 'put ''IEEiLEw6Ik1NL0REL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kg''@;'; put 'put ''YSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlz''@;'; put 'put ''LmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3Vycygp''@;'; put 'put ''PyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFz''@;'; put 'put ''IixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoi''@;'; put 'put ''JWRceGJhIix3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSwyMTk1NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0''@;'; put 'put ''KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksbGU9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRp''@;'; put 'put ''Yy9pXSxNPS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0''@;'; put 'put ''XC4/fG5vdlwuP3xkaWNcLj8pL2k7YWUuZGVmaW5lTG9jYWxlKCJlcyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpm''@;'; put 'put ''dW5jdGlvbihSLHope3JldHVybiBSPy8tTU1NLS8udGVzdCh6KT9tW1IubW9udGgoKV06eFtSLm1vbnRoKCldOnh9LG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xh''@;'; put 'put ''Z29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250''@;'; put 'put ''aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTpsZSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4''@;'; put 'put ''ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJE''@;'; put 'put ''IFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6''@;'; put 'put ''IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFz''@;'; put 'put ''dERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJM''@;'; put 'put ''In0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVk''@;'; put 'put ''YXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fSxp''@;'; put 'put ''bnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KEYoMTY2NzYpKX0sMTE0NTM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e3M6WyJtXHhmNW5lIHNla3VuZGkiLCJtXHhmNW5pIHNla3VuZCIsInBh''@;'; put 'put ''YXIgc2VrdW5kaXQiXSxzczpbbGUrInNla3VuZGkiLGxlKyJzZWt1bmRpdCJdLG06WyJceGZjaGUgbWludXRpIiwiXHhmY2tzIG1pbnV0Il0sbW06W2xlKyIgbWludXRpIixsZSsiIG1pbnV0aXQiXSxoOlsiXHhmY2hlIHR1bm5pIiwidHVuZCBhZWdhIiwiXHhmY2tzIHR1bmQiXSxoaDpbbGUr''@;'; put 'put ''IiB0dW5uaSIsbGUrIiB0dW5kaSJdLGQ6WyJceGZjaGUgcFx4ZTRldmEiLCJceGZja3MgcFx4ZTRldiJdLE06WyJrdXUgYWphIiwia3V1IGFlZ2EiLCJceGZja3Mga3V1Il0sTU06W2xlKyIga3V1IixsZSsiIGt1dWQiXSx5OlsiXHhmY2hlIGFhc3RhIiwiYWFzdGEiLCJceGZja3MgYWFzdGEi''@;'; put 'put ''XSx5eTpbbGUrIiBhYXN0YSIsbGUrIiBhYXN0YXQiXX07cmV0dXJuIE0/eltPXVsyXT96W09dWzJdOnpbT11bMV06Uj96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJldCIse21vbnRoczoiamFhbnVhcl92ZWVicnVhcl9tXHhlNHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1''@;'; put 'put ''Z3VzdF9zZXB0ZW1iZXJfb2t0b29iZXJfbm92ZW1iZXJfZGV0c2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYWFuX3ZlZWJyX21ceGU0cnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJwXHhmY2hhcFx4ZTRl''@;'; put 'put ''dl9lc21hc3BceGU0ZXZfdGVpc2lwXHhlNGV2X2tvbG1hcFx4ZTRldl9uZWxqYXBceGU0ZXZfcmVlZGVfbGF1cFx4ZTRldiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVFx4ZTRuYSxdIExUIixuZXh0''@;'; put 'put ''RGF5OiJbSG9tbWUsXSBMVCIsbmV4dFdlZWs6IltKXHhlNHJnbWluZV0gZGRkZCBMVCIsbGFzdERheToiW0VpbGUsXSBMVCIsbGFzdFdlZWs6IltFZWxtaW5lXSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNHJhc3QiLHBhc3Q6IiVzIHRhZ2Fz''@;'; put 'put ''aSIsczp4LHNzOngsbTp4LG1tOngsaDp4LGhoOngsZDp4LGRkOiIlZCBwXHhlNGV2YSIsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw0NDY5NzpmdW5jdGlv''@;'; put 'put ''bihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImV1Iix7bW9udGhzOiJ1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YSIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNTaG9ydDoidXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29z''@;'; put 'put ''dGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImlnX2FsX2FyX2F6X29nX29sX2xyIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25n''@;'; put 'put ''RGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0iLExMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLExMTEw6ImRkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixsOiJZ''@;'; put 'put ''WVlZLU0tRCIsbGw6IllZWVlba29dIE1NTSBEW2FdIixsbGw6IllZWVlba29dIE1NTSBEW2FdIEhIOm1tIixsbGxsOiJkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltnYXVyXSBMVFtldGFuXSIsbmV4dERheToiW2JpaGFyXSBMVFtldGFuXSIsbmV4''@;'; put 'put ''dFdlZWs6ImRkZGQgTFRbZXRhbl0iLGxhc3REYXk6IlthdHpvXSBMVFtldGFuXSIsbGFzdFdlZWs6IlthdXJyZWtvXSBkZGRkIExUW2V0YW5dIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBiYXJydSIscGFzdDoiZHVlbGEgJXMiLHM6InNlZ3VuZG8gYmF0enVrIixz''@;'; put 'put ''czoiJWQgc2VndW5kbyIsbToibWludXR1IGJhdCIsbW06IiVkIG1pbnV0dSIsaDoib3JkdSBiYXQiLGhoOiIlZCBvcmR1IixkOiJlZ3VuIGJhdCIsZGQ6IiVkIGVndW4iLE06ImhpbGFiZXRlIGJhdCIsTU06IiVkIGhpbGFiZXRlIix5OiJ1cnRlIGJhdCIseXk6IiVkIHVydGUifSxkYXlPZk1v''@;'; put 'put ''bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNTI5MDA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDZmMSIsMjoiXHUwNmYyIiwzOiJcdTA2ZjMi''@;'; put 'put ''LDQ6Ilx1MDZmNCIsNToiXHUwNmY1Iiw2OiJcdTA2ZjYiLDc6Ilx1MDZmNyIsODoiXHUwNmY4Iiw5OiJcdTA2ZjkiLDA6Ilx1MDZmMCJ9LG09eyJcdTA2ZjEiOiIxIiwiXHUwNmYyIjoiMiIsIlx1MDZmMyI6IjMiLCJcdTA2ZjQiOiI0IiwiXHUwNmY1IjoiNSIsIlx1MDZmNiI6IjYiLCJcdTA2''@;'; put 'put ''ZjciOiI3IiwiXHUwNmY4IjoiOCIsIlx1MDZmOSI6IjkiLCJcdTA2ZjAiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJmYSIse21vbnRoczoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNmNjXHUwNjQ3X1x1MDY0MVx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFc''@;'; put 'put ''dTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3X1x1MDYyN1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2''@;'; put 'put ''MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1''@;'; put 'put ''MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2''@;'; put 'put ''MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2Y2NcdTA2YTlcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2''@;'; put 'put ''MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjdlXHUwNjQ2XHUwNjJjXHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNmE5''@;'; put 'put ''XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3''@;'; put 'put ''ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDYyY19cdTA2''@;'; put 'put ''MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0i''@;'; put 'put ''fSxtZXJpZGllbVBhcnNlOi9cdTA2NDJcdTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMXxcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4vXHUwNjI4XHUwNjM5XHUwNjJmIFx1''@;'; put 'put ''MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEvLnRlc3QoTSl9LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTwxMj8iXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEiOiJcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1''@;'; put 'put ''MDYzOFx1MDY0N1x1MDYzMSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ1XHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2NDFcdTA2MzFcdTA2MmZcdTA2MjcgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIs''@;'; put 'put ''bmV4dFdlZWs6ImRkZGQgW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2Y2NcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY3ZVx1MDZjY1x1MDYzNF0gW1x1MDYzM1x1MDYy''@;'; put 'put ''N1x1MDYzOVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyZlx1MDYzMSAlcyIscGFzdDoiJXMgXHUwNjdlXHUwNmNjXHUwNjM0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixzczoiJWQgXHUw''@;'; put 'put ''NjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixtOiJcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixoOiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixoaDoiJWQg''@;'; put 'put ''XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixkOiJcdTA2Y2NcdTA2YTkgXHUwNjMxXHUwNjQ4XHUwNjMyIixkZDoiJWQgXHUwNjMxXHUwNjQ4XHUwNjMyIixNOiJcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNjQ3IixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNjQ3Iix5OiJcdTA2Y2NcdTA2''@;'; put 'put ''YTkgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MDZmMC1cdTA2ZjldL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9y''@;'; put 'put ''bWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwNjQ1LyxvcmRpbmFsOiIlZFx1MDY0NSIsd2Vlazp7ZG93OjYsZG95OjEy''@;'; put 'put ''fX0pfShGKDE2Njc2KSl9LDQ5Nzc1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGpceGU0IHZpaXNpIGt1dXNpIHNlaXRzZW1ceGU0biBrYWhkZWtzYW4geWhkZWtzXHhlNG4iLnNwbGl0KCIgIiks''@;'; put 'put ''bT1bIm5vbGxhIiwieWhkZW4iLCJrYWhkZW4iLCJrb2xtZW4iLCJuZWxqXHhlNG4iLCJ2aWlkZW4iLCJrdXVkZW4iLHhbN10seFs4XSx4WzldXTtmdW5jdGlvbiBsZShSLHosSyxJKXt2YXIgaz0iIjtzd2l0Y2goSyl7Y2FzZSJzIjpyZXR1cm4gST8ibXV1dGFtYW4gc2VrdW5uaW4iOiJtdXV0''@;'; put 'put ''YW1hIHNla3VudGkiO2Nhc2Uic3MiOms9ST8ic2VrdW5uaW4iOiJzZWt1bnRpYSI7YnJlYWs7Y2FzZSJtIjpyZXR1cm4gST8ibWludXV0aW4iOiJtaW51dXR0aSI7Y2FzZSJtbSI6az1JPyJtaW51dXRpbiI6Im1pbnV1dHRpYSI7YnJlYWs7Y2FzZSJoIjpyZXR1cm4gST8idHVubmluIjoidHVu''@;'; put 'put ''dGkiO2Nhc2UiaGgiOms9ST8idHVubmluIjoidHVudGlhIjticmVhaztjYXNlImQiOnJldHVybiBJPyJwXHhlNGl2XHhlNG4iOiJwXHhlNGl2XHhlNCI7Y2FzZSJkZCI6az1JPyJwXHhlNGl2XHhlNG4iOiJwXHhlNGl2XHhlNFx4ZTQiO2JyZWFrO2Nhc2UiTSI6cmV0dXJuIEk/Imt1dWthdWRl''@;'; put 'put ''biI6Imt1dWthdXNpIjtjYXNlIk1NIjprPUk/Imt1dWthdWRlbiI6Imt1dWthdXR0YSI7YnJlYWs7Y2FzZSJ5IjpyZXR1cm4gST8idnVvZGVuIjoidnVvc2kiO2Nhc2UieXkiOms9ST8idnVvZGVuIjoidnVvdHRhIn1yZXR1cm4gZnVuY3Rpb24gTShSLHope3JldHVybiBSPDEwP3o/bVtSXTp4''@;'; put 'put ''W1JdOlJ9KFIsSSkrIiAiK2t9YWUuZGVmaW5lTG9jYWxlKCJmaSIse21vbnRoczoidGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc1x4ZTRrdXVfaGVpblx4ZTRrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUiLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzU2hvcnQ6InRhbW1pX2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXNceGU0X2hlaW5ceGU0X2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9w''@;'; put 'put ''ZXJqYW50YWlfbGF1YW50YWkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VfbWFfdGlfa2VfdG9fcGVfbGEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3Mi''@;'; put 'put ''LEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NW3RhXSBZWVlZIixMTEw6IkRvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tIixMTExMOiJkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsbDoiRC5NLllZWVkiLGxsOiJEbyBNTU0gWVlZWSIsbGxsOiJEbyBNTU0gWVlZWSwg''@;'; put 'put ''W2tsb10gSEgubW0iLGxsbGw6ImRkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt0XHhlNG5ceGU0XHhlNG5dIFtrbG9dIExUIixuZXh0RGF5OiJbaHVvbWVubmFdIFtrbG9dIExUIixuZXh0V2VlazoiZGRkZCBba2xvXSBMVCIsbGFzdERheToiW2Vp''@;'; put 'put ''bGVuXSBba2xvXSBMVCIsbGFzdFdlZWs6Ilt2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHBceGU0XHhlNHN0XHhlNCIscGFzdDoiJXMgc2l0dGVuIixzOmxlLHNzOmxlLG06bGUsbW06bGUsaDpsZSxoaDpsZSxkOmxlLGRk''@;'; put 'put ''OmxlLE06bGUsTU06bGUseTpsZSx5eTpsZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDY0MjgyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgiZmlsIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1''@;'; put 'put ''bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBE''@;'; put 'put ''RCwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJMVCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5n''@;'; put 'put ''XSBkZGRkIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNhbmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixo''@;'; put 'put ''aDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihtKXtyZXR1cm4gbX0sd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sODQyMzY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJmbyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJceGVkbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0''@;'; put 'put ''ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51ZGFndXJfbVx4ZTFuYWRhZ3VyX3RceGZkc2RhZ3VyX21p''@;'; put 'put ''a3VkYWd1cl9oXHhmM3NkYWd1cl9mclx4ZWRnZ2phZGFndXJfbGV5Z2FyZGFndXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VuX21ceGUxbl90XHhmZHNfbWlrX2hceGYzc19mclx4ZWRfbGV5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlMV90XHhmZF9taV9oXHhmM19m''@;'; put 'put ''cl9sZSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5''@;'; put 'put ''OiJbXHhjZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4Y2QgbW9yZ2luIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhjZCBnalx4ZTFyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc1x4ZWRceGYwc3R1XSBkZGRkIFtrbF0gTFQiLHNhbWVFbHNlOiJMIn0scmVs''@;'; put 'put ''YXRpdmVUaW1lOntmdXR1cmU6InVtICVzIixwYXN0OiIlcyBzXHhlZFx4ZjBhbmkiLHM6ImZceGUxIHNla3VuZCIsc3M6IiVkIHNla3VuZGlyIixtOiJlaW4gbWludXR0dXIiLG1tOiIlZCBtaW51dHRpciIsaDoiZWluIHRceGVkbWkiLGhoOiIlZCB0XHhlZG1hciIsZDoiZWluIGRhZ3VyIixk''@;'; put 'put ''ZDoiJWQgZGFnYXIiLE06ImVpbiBtXHhlMW5hXHhmMHVyIixNTToiJWQgbVx4ZTFuYVx4ZjBpciIseToiZWl0dCBceGUxciIseXk6IiVkIFx4ZTFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2''@;'; put 'put ''KSl9LDkyODMwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZnItY2EiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3Zl''@;'; put 'put ''bWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltYW5jaGVf''@;'; put 'put ''bHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURh''@;'; put 'put ''eToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIs''@;'; put 'put ''TToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNh''@;'; put 'put ''c2UiZCI6cmV0dXJuIG0rKDE9PT1tPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIG0rKDE9PT1tPyJyZSI6ImUiKX19fSl9KEYoMTY2NzYpKX0sMjE0MTI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJmci1jaCIs''@;'; put 'put ''e21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVp''@;'; put 'put ''bC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4u''@;'; put 'put ''X21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExM''@;'; put 'put ''OiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBd''@;'; put 'put ''IExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIs''@;'; put 'put ''bToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9''@;'; put 'put ''KGVyfGUpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3N3aXRjaChsZSl7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gbSsoMT09PW0/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsoMT09PW0/InJlIjoiZSIpfX0sd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sODkzNjE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIGxlPS8oamFudlwuP3xmXHhlOXZyXC4/fG1hcnN8YXZyXC4/fG1haXxqdWlufGp1aWxcLj98YW9ceGZidHxzZXB0XC4/fG9jdFwuP3xub3Zc''@;'; put 'put ''Lj98ZFx4ZTljXC4/fGphbnZpZXJ8Zlx4ZTl2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW9ceGZidHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkXHhlOWNlbWJyZSkvaSxNPVsvXmphbnYvaSwvXmZceGU5dnIvaSwvXm1hcnMvaSwvXmF2ci9pLC9ebWFpL2ksL15qdWlu''@;'; put 'put ''L2ksL15qdWlsL2ksL15hb1x4ZmJ0L2ksL15zZXB0L2ksL15vY3QvaSwvXm5vdi9pLC9eZFx4ZTljL2ldO2FlLmRlZmluZUxvY2FsZSgiZnIiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9u''@;'; put 'put ''b3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUmVnZXg6bGUsbW9udGhzU2hvcnRSZWdleDpsZSxt''@;'; put 'put ''b250aHNTdHJpY3RSZWdleDovXihqYW52aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJz''@;'; put 'put ''fGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwuP3xvY3RcLj98bm92XC4/fGRceGU5Y1wuPykvaSxtb250aHNQYXJzZTpNLGxvbmdNb250aHNQYXJzZTpNLHNob3J0TW9udGhzUGFyc2U6TSx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlf''@;'; put 'put ''dmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0g''@;'; put 'put ''TFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0''@;'; put 'put ''OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsdzoidW5lIHNlbWFpbmUiLHd3OiIlZCBzZW1h''@;'; put 'put ''aW5lcyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnwpLyxvcmRpbmFsOmZ1bmN0aW9uKFIseil7c3dpdGNoKHope2Nhc2UiRCI6cmV0dXJuIFIrKDE9PT1SPyJlciI6IiIpO2RlZmF1bHQ6''@;'; put 'put ''Y2FzZSJNIjpjYXNlIlEiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBSKygxPT09Uj8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBSKygxPT09Uj8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw2Njk4NDpmdW5jdGlvbihhdCxJZSxGKXshZnVu''@;'; put 'put ''Y3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iamFuLl9mZWIuX21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtPSJqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKTth''@;'; put 'put ''ZS5kZWZpbmVMb2NhbGUoImZ5Iix7bW9udGhzOiJqYW5uZXdhcmlzX2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVueV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKE0sTyl7cmV0''@;'; put 'put ''dXJuIE0/Ly1NTU0tLy50ZXN0KE8pP21bTS5tb250aCgpXTp4W00ubW9udGgoKV06eH0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoic25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic2ku''@;'; put 'put ''X21vLl90aS5fd28uX3RvLl9mci5fc28uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTaV9Nb19UaV9Xb19Ub19Gcl9TbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Iltoam9lZCBvbV0gTFQiLG5leHREYXk6Ilttb2FybiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltqdXN0''@;'; put 'put ''ZXIgb21dIExUIixsYXN0V2VlazoiW1x4ZjRmclx4ZmJuZV0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvZXIgJXMiLHBhc3Q6IiVzIGx5biIsczoiaW4gcGVhciBzZWtvbmRlbiIsc3M6IiVkIHNla29uZGVuIixtOiJpZW4gbWluXHhmYXQiLG1t''@;'; put 'put ''OiIlZCBtaW51dGVuIixoOiJpZW4gb2VyZSIsaGg6IiVkIG9lcmVuIixkOiJpZW4gZGVpIixkZDoiJWQgZGFnZW4iLE06ImllbiBtb2FubmUiLE1NOiIlZCBtb2FubmVuIix5OiJpZW4gamllciIseXk6IiVkIGppZXJyZW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxk''@;'; put 'put ''ZSkvLG9yZGluYWw6ZnVuY3Rpb24oTSl7cmV0dXJuIE0rKDE9PT1NfHw4PT09TXx8TT49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDkzOTYxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgiZ2EiLHttb250aHM6WyJFYW5ceGUxaXIiLCJGZWFiaHJhIiwiTVx4ZTFydGEiLCJBaWJyZVx4ZTFuIiwiQmVhbHRhaW5lIiwiTWVpdGhlYW1oIiwiSVx4ZmFpbCIsIkxceGZhbmFzYSIsIk1lXHhlMW4gRlx4ZjNtaGFpciIsIkRlaXJlYWRoIEZceGYzbWhhaXIiLCJTYW1oYWluIiwiTm9s''@;'; put 'put ''bGFpZyJdLG1vbnRoc1Nob3J0OlsiRWFuIiwiRmVhYmgiLCJNXHhlMXJ0IiwiQWliIiwiQmVhbCIsIk1laXRoIiwiSVx4ZmFpbCIsIkxceGZhbiIsIk0uRi4iLCJELkYuIiwiU2FtaCIsIk5vbGwiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRFx4ZTkgRG9taG5haWdoIiwiRFx4''@;'; put 'put ''ZTkgTHVhaW4iLCJEXHhlOSBNXHhlMWlydCIsIkRceGU5IENceGU5YWRhb2luIiwiRFx4ZTlhcmRhb2luIiwiRFx4ZTkgaEFvaW5lIiwiRFx4ZTkgU2F0aGFpcm4iXSx3ZWVrZGF5c1Nob3J0OlsiRG9taCIsIkx1YW4iLCJNXHhlMWlydCIsIkNceGU5YWQiLCJEXHhlOWFyIiwiQW9pbmUiLCJT''@;'; put 'put ''YXRoIl0sd2Vla2RheXNNaW46WyJEbyIsIkx1IiwiTVx4ZTEiLCJDXHhlOSIsIkRceGU5IiwiQSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSW5uaXUgYWddIExUIixuZXh0RGF5OiJbQW1ceGUxcmFjaCBhZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthZ10gTFQiLGxhc3REYXk6IltJbm5ceGU5IGFnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjYWl0''@;'; put 'put ''ZV0gW2FnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSAlcyIscGFzdDoiJXMgXHhmMyBzaGluIixzOiJjXHhmYXBsYSBzb2ljaW5kIixzczoiJWQgc29pY2luZCIsbToiblx4ZjNpbVx4ZTlhZCIsbW06IiVkIG5ceGYzaW1ceGU5YWQiLGg6InVhaXIgYW4gY2hs''@;'; put 'put ''b2lnIixoaDoiJWQgdWFpciBhbiBjaGxvaWciLGQ6ImxceGUxIixkZDoiJWQgbFx4ZTEiLE06Im1ceGVkIixNTToiJWQgbVx4ZWRvbm5hIix5OiJibGlhaW4iLHl5OiIlZCBibGlhaW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9u''@;'; put 'put ''KHope3JldHVybiB6KygxPT09ej8iZCI6eiUxMD09Mj8ibmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw3ODg0OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImdkIix7bW9udGhzOlsiQW0gRmFv''@;'; put 'put ''aWxsZWFjaCIsIkFuIEdlYXJyYW4iLCJBbSBNXHhlMHJ0IiwiQW4gR2libGVhbiIsIkFuIENceGU4aXRlYW4iLCJBbiB0LVx4ZDJnbWhpb3MiLCJBbiB0LUl1Y2hhciIsIkFuIExceGY5bmFzdGFsIiwiQW4gdC1TdWx0YWluIiwiQW4gRFx4ZTBtaGFpciIsIkFuIHQtU2FtaGFpbiIsIkFuIERc''@;'; put 'put ''eGY5YmhsYWNoZCJdLG1vbnRoc1Nob3J0OlsiRmFvaSIsIkdlYXIiLCJNXHhlMHJ0IiwiR2libCIsIkNceGU4aXQiLCJceGQyZ21oIiwiSXVjaCIsIkxceGY5biIsIlN1bHQiLCJEXHhlMG1oIiwiU2FtaCIsIkRceGY5YmgiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRGlkXHhm''@;'; put 'put ''Mm1obmFpY2giLCJEaWx1YWluIiwiRGltXHhlMGlydCIsIkRpY2lhZGFpbiIsIkRpYXJkYW9pbiIsIkRpaGFvaW5lIiwiRGlzYXRoYWlybmUiXSx3ZWVrZGF5c1Nob3J0OlsiRGlkIiwiRGlsIiwiRGltIiwiRGljIiwiRGlhIiwiRGloIiwiRGlzIl0sd2Vla2RheXNNaW46WyJEXHhmMiIsIkx1''@;'; put 'put ''IiwiTVx4ZTAiLCJDaSIsIkFyIiwiSGEiLCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxl''@;'; put 'put ''bmRhcjp7c2FtZURheToiW0FuLWRpdWdoIGFpZ10gTFQiLG5leHREYXk6IltBLW1ceGUwaXJlYWNoIGFpZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthaWddIExUIixsYXN0RGF5OiJbQW4tZFx4ZTggYWlnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUIixzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhbm4gYW4gJXMiLHBhc3Q6ImJobyBjaGlvbm4gJXMiLHM6ImJlYWdhbiBkaW9nYW4iLHNzOiIlZCBkaW9nYW4iLG06Im1pb25haWQiLG1tOiIlZCBtaW9uYWlkZWFuIixoOiJ1YWlyIixoaDoiJWQgdWFpcmVhbiIsZDoibGF0aGEiLGRkOiIl''@;'; put 'put ''ZCBsYXRoYSIsTToibVx4ZWNvcyIsTU06IiVkIG1ceGVjb3NhbiIseToiYmxpYWRobmEiLHl5OiIlZCBibGlhZGhuYSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oeil7cmV0dXJuIHorKDE9PT16PyJkIjp6JTEwPT0yPyJuYSI6''@;'; put 'put ''Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDM0MjczOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZ2wiLHttb250aHM6InhhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dVx4ZjFvX3h1''@;'; put 'put ''bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHVceGYxLl94dWwuX2Fnby5fc2V0Ll9vdXQuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEw''@;'; put 'put ''LHdlZWtkYXlzOiJkb21pbmdvX2x1bnNfbWFydGVzX21ceGU5cmNvcmVzX3hvdmVzX3ZlbnJlc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbVx4ZTlyLl94b3YuX3Zlbi5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVf''@;'; put 'put ''bWFfbVx4ZTlfeG9fdmVfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBI''@;'; put 'put ''Om1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3hlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYx''@;'; put 'put ''XHhlMSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgWyIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbb250ZSAiKygxIT09dGhp''@;'; put 'put ''cy5ob3VycygpPyJceGUxIjoiYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW29dIGRkZGQgW3Bhc2FkbyAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0''@;'; put 'put ''dXJuIDA9PT1tLmluZGV4T2YoInVuIik/Im4iK206ImVuICIrbX0scGFzdDoiaGFpICVzIixzOiJ1bnMgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5oYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVk''@;'; put 'put ''IGRceGVkYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNDA2MjM6ZnVuY3Rpb24oYXQs''@;'; put 'put ''SWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e3M6WyJcdTA5MjVcdTA5NGJcdTA5MjFcdTA5MmZcdTA5M2UgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIiwiXHUwOTI1XHUwOTRi''@;'; put 'put ''XHUwOTIxXHUwOTQ3IFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMSJdLHNzOltsZSsiIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsbGUrIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxtOlsiXHUwOTBmXHUwOTE1''@;'; put 'put ''XHUwOTNlIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDJcdTA5MWYiXSxtbTpbbGUrIiBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLGxlKyIgXHUwOTJlXHUw''@;'; put 'put ''OTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTAyIl0saDpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwIl0saGg6W2xlKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixsZSsiIFx1MDkz''@;'; put 'put ''NVx1MDkzMFx1MDkzZVx1MDkwMiJdLGQ6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDk0MFx1MDkzOCJdLGRkOltsZSsiIFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIs''@;'; put 'put ''bGUrIiBcdTA5MjZcdTA5NDBcdTA5MzgiXSxNOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGIiXSxNTTpbbGUr''@;'; put 'put ''IiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjhcdTA5NDAiLGxlKyIgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTQ3Il0seTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5''@;'; put 'put ''MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4Il0seXk6W2xlKyIgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixsZSsiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMiJdfTtyZXR1cm4gUj96W09dWzBd''@;'; put 'put ''OnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJnb20tZGV2YSIse21vbnRoczp7c3RhbmRhbG9uZToiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0''@;'; put 'put ''MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwXHUwOTMyX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTJmX1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZl9cdTA5Mzhc''@;'; put 'put ''dTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdc''@;'; put 'put ''dTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMw''@;'; put 'put ''XHUwOTQwXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYVx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MzJcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJl''@;'; put 'put ''XHUwOTQ3XHUwOTJmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0Mlx1MDkyOFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTExXHUwOTE3XHUwOTM4''@;'; put 'put ''XHUwOTRkXHUwOTFmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBc''@;'; put 'put ''dTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1''@;'; put 'put ''MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovTU1NTShccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0Ny5fXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRc''@;'; put 'put ''dTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwLl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTExXHUwOTE3Ll9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDIuX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkx''@;'; put 'put ''Zlx1MDk0Yi5fXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyLl9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkwNlx1MDkyZlx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5Mzhc''@;'; put 'put ''dTA5NGJcdTA5MmVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5M2ZcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjRcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTQx''@;'; put 'put ''XHUwOTE1XHUwOTRkXHUwOTMwXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0N1x1MDkyOFx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MDZcdTA5MmZcdTA5MjQuX1x1MDkzOFx1MDk0Ylx1MDkyZS5fXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzLl9cdTA5''@;'; put 'put ''MmNcdTA5NDFcdTA5MjcuX1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNC5fXHUwOTM4XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwLl9cdTA5MzZcdTA5NDdcdTA5MjguIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MDZfXHUwOTM4XHUwOTRiX1x1MDkyZVx1''@;'; put 'put ''MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3X1x1MDkzOFx1MDk0MV9cdTA5MzZcdTA5NDciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5''@;'; put 'put ''MDJdIixMVFM6IkEgaDptbTpzcyBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTExMTDoiZGRk''@;'; put 'put ''ZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixsbGxsOiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUw''@;'; put 'put ''OTJmXHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkyYlx1MDkzZVx1MDkzMlx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMl0gTFQiLG5leHRXZWVrOiJbXHUwOTJiXHUwOTQxXHUwOTIxXHUwOTMyXHUwOTRiXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFz''@;'; put 'put ''dFdlZWs6IltcdTA5MmJcdTA5M2VcdTA5MWZcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBcdTA5MDZcdTA5MjZcdTA5NDBcdTA5MDIiLHM6eCxzczp4LG06eCxtbTp4LGg6eCxoaDp4LGQ6eCxkZDp4LE06''@;'; put 'put ''eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MDkzNVx1MDk0N1x1MDkzMCkvLG9yZGluYWw6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIkQiPT09TT9sZSsiXHUwOTM1XHUwOTQ3XHUwOTMwIjpsZX0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFy''@;'; put 'put ''c2U6L1x1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MHxcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDJ8XHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyfFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0Ny8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGxl''@;'; put 'put ''LE0pe3JldHVybiAxMj09PWxlJiYobGU9MCksIlx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI9PT1NP2xlPDQ/bGU6bGUrMTI6Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMiI9PT1NP2xlOiJcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiPT09''@;'; put 'put ''TT9sZT4xMj9sZTpsZSsxMjoiXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3Ij09PU0/bGUrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihsZSxNLE8pe3JldHVybiBsZTw0PyJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAiOmxlPDEyPyJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNc''@;'; put 'put ''dTA5NDBcdTA5MDIiOmxlPDE2PyJcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiOmxlPDIwPyJcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDciOiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAifX0pfShGKDE2Njc2KSl9LDYyNjk2OmZ1bmN0aW9uKGF0LEll''@;'; put 'put ''LEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXtzOlsidGhvZGRlYSBzZWtvbmRhbW5pIiwidGhvZGRlIHNla29uZCJdLHNzOltsZSsiIHNla29uZGFtbmkiLGxlKyIgc2Vrb25kIl0sbTpbImVrYSBtaW50YW4iLCJlayBtaW51dCJdLG1t''@;'; put 'put ''OltsZSsiIG1pbnRhbW5pIixsZSsiIG1pbnRhbSJdLGg6WyJla2Egdm9yYW4iLCJlayB2b3IiXSxoaDpbbGUrIiB2b3JhbW5pIixsZSsiIHZvcmFtIl0sZDpbImVrYSBkaXNhbiIsImVrIGRpcyJdLGRkOltsZSsiIGRpc2FtbmkiLGxlKyIgZGlzIl0sTTpbImVrYSBtaG9pbmVhbiIsImVrIG1o''@;'; put 'put ''b2lubyJdLE1NOltsZSsiIG1ob2luZWFtbmkiLGxlKyIgbWhvaW5lIl0seTpbImVrYSB2b3JzYW4iLCJlayB2b3JvcyJdLHl5OltsZSsiIHZvcnNhbW5pIixsZSsiIHZvcnNhbSJdfTtyZXR1cm4gUj96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJnb20tbGF0biIse21vbnRoczp7''@;'; put 'put ''c3RhbmRhbG9uZToiSmFuZXJfRmVicmVyX01hcnNfQWJyaWxfTWFpX0p1bl9KdWxhaV9BZ29zdF9TZXRlbWJyX090dWJyX05vdmVtYnJfRGV6ZW1iciIuc3BsaXQoIl8iKSxmb3JtYXQ6IkphbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNo''@;'; put 'put ''ZWFfSnVsYWlhY2hlYV9BZ29zdGFjaGVhX1NldGVtYnJhY2hlYV9PdHVicmFjaGVhX05vdmVtYnJhY2hlYV9EZXplbWJyYWNoZWEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28u''@;'; put 'put ''X1NldC5fT3R1Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiQWl0YXJfU29tYXJfTW9uZ2xsYXJfQnVkaHZhcl9CaXJlc3Rhcl9TdWtyYXJfU29uJ3ZhciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaXQuX1NvbS5fTW9uLl9CdWQuX0Jy''@;'; put 'put ''ZS5fU3VrLl9Tb24uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaV9TbV9Nb19CdV9Ccl9TdV9TbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW3ZhenRhXSIsTFRTOiJBIGg6bW06c3MgW3ZhenRhXSIsTDoiREQtTU0tWVlZ''@;'; put 'put ''WSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdIixMTExMOiJkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW3ZhenRhXSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW3ZhenRhXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQWl6XSBMVCIs''@;'; put 'put ''bmV4dERheToiW0ZhbGVhbV0gTFQiLG5leHRXZWVrOiJbRnVkZGxvXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbS2FsXSBMVCIsbGFzdFdlZWs6IltGYXR0bG9dIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBhZGltIixzOngsc3M6''@;'; put 'put ''eCxtOngsbW06eCxoOngsaGg6eCxkOngsZGQ6eCxNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcikvLG9yZGluYWw6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIkQiPT09TT9sZSsiZXIiOmxlfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJz''@;'; put 'put ''ZTovcmF0aXxzb2thbGxpbXxkb25wYXJhbXxzYW5qZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGxlLE0pe3JldHVybiAxMj09PWxlJiYobGU9MCksInJhdGkiPT09TT9sZTw0P2xlOmxlKzEyOiJzb2thbGxpbSI9PT1NP2xlOiJkb25wYXJhbSI9PT1NP2xlPjEyP2xlOmxlKzEyOiJzYW5qZSI9''@;'; put 'put ''PT1NP2xlKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU8ND8icmF0aSI6bGU8MTI/InNva2FsbGltIjpsZTwxNj8iZG9ucGFyYW0iOmxlPDIwPyJzYW5qZSI6InJhdGkifX0pfShGKDE2Njc2KSl9LDY2OTI4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlv''@;'; put 'put ''bihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTBhZTciLDI6Ilx1MGFlOCIsMzoiXHUwYWU5Iiw0OiJcdTBhZWEiLDU6Ilx1MGFlYiIsNjoiXHUwYWVjIiw3OiJcdTBhZWQiLDg6Ilx1MGFlZSIsOToiXHUwYWVmIiwwOiJcdTBhZTYifSxtPXsiXHUwYWU3IjoiMSIsIlx1MGFlOCI6IjIi''@;'; put 'put ''LCJcdTBhZTkiOiIzIiwiXHUwYWVhIjoiNCIsIlx1MGFlYiI6IjUiLCJcdTBhZWMiOiI2IiwiXHUwYWVkIjoiNyIsIlx1MGFlZSI6IjgiLCJcdTBhZWYiOiI5IiwiXHUwYWU2IjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiZ3UiLHttb250aHM6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFh''@;'; put 'put ''Zlx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzFcdTBhODZcdTBhYjBcdTBhYzBfXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNkXHUwYTlhX1x1MGE4Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZlx1MGFiMl9cdTBhYWVcdTBhYzdfXHUw''@;'; put 'put ''YTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZVx1MGE4OF9cdTBhOTFcdTBhOTdcdTBhYjhcdTBhY2RcdTBhOWZfXHUwYWI4XHUwYWFhXHUwYWNkXHUwYTlmXHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZFx1''@;'; put 'put ''MGFhY1x1MGFiMF9cdTBhYThcdTBhYjVcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYWExXHUwYWJmXHUwYWI4XHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBhOWNcdTBhYmVcdTBhYThcdTBhY2RcdTBhYWZcdTBhYzEu''@;'; put 'put ''X1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFjZFx1MGFiMFx1MGFjMS5fXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNkXHUwYTlhX1x1MGE4Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZi5fXHUwYWFlXHUwYWM3X1x1MGE5Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmUuX1x1MGE5''@;'; put 'put ''MVx1MGE5Ny5fXHUwYWI4XHUwYWFhXHUwYWNkXHUwYTlmXHUwYWM3Ll9cdTBhOTFcdTBhOTVcdTBhY2RcdTBhOWZcdTBhY2QuX1x1MGFhOFx1MGFiNVx1MGFjNy5fXHUwYWExXHUwYWJmXHUwYWI4XHUwYWM3LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBh''@;'; put 'put ''YjBcdTBhYjVcdTBhYmZcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI4XHUwYWNiXHUwYWFlXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFhZVx1MGE4Mlx1MGE5N1x1MGFiM1x1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYWNcdTBhYzFcdTBhYTdcdTBhY2RcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYTk3XHUw''@;'; put 'put ''YWMxXHUwYWIwXHUwYWMxXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFiMFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmZcdTBhYjVcdTBhYmVcdTBhYjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYWIwXHUwYWI1XHUwYWJm''@;'; put 'put ''X1x1MGFiOFx1MGFjYlx1MGFhZV9cdTBhYWVcdTBhODJcdTBhOTdcdTBhYjNfXHUwYWFjXHUwYWMxXHUwYWE3XHUwYWNkX1x1MGE5N1x1MGFjMVx1MGFiMFx1MGFjMV9cdTBhYjZcdTBhYzFcdTBhOTVcdTBhY2RcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJcdTBhYjBfXHUwYWI4XHUwYWNiX1x1MGFhZVx1MGE4Ml9cdTBhYWNcdTBhYzFfXHUwYTk3XHUwYWMxX1x1MGFiNlx1MGFjMV9cdTBhYjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMVFM6''@;'; put 'put ''IkEgaDptbTpzcyBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZ''@;'; put 'put ''WVksIEEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGE4Nlx1MGE5Y10gTFQiLG5leHREYXk6IltcdTBhOTVcdTBhYmVcdTBhYjJcdTBhYzddIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhOTdc''@;'; put 'put ''dTBhODdcdTBhOTVcdTBhYmVcdTBhYjJcdTBhYzddIExUIixsYXN0V2VlazoiW1x1MGFhYVx1MGFiZVx1MGE5Ylx1MGFiMlx1MGFiZV0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGFhZVx1MGFiZSIscGFzdDoiJXMgXHUwYWFhXHUwYWI5XHUw''@;'; put 'put ''YWM3XHUwYWIyXHUwYWJlIixzOiJcdTBhODVcdTBhYWVcdTBhYzFcdTBhOTUgXHUwYWFhXHUwYWIzXHUwYWNiIixzczoiJWQgXHUwYWI4XHUwYWM3XHUwYTk1XHUwYTgyXHUwYWExIixtOiJcdTBhOGZcdTBhOTUgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixtbToiJWQgXHUwYWFl''@;'; put 'put ''XHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixoOiJcdTBhOGZcdTBhOTUgXHUwYTk1XHUwYWIyXHUwYWJlXHUwYTk1IixoaDoiJWQgXHUwYTk1XHUwYWIyXHUwYWJlXHUwYTk1IixkOiJcdTBhOGZcdTBhOTUgXHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixkZDoiJWQgXHUwYWE2XHUwYWJmXHUw''@;'; put 'put ''YWI1XHUwYWI4IixNOiJcdTBhOGZcdTBhOTUgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIixNTToiJWQgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIix5OiJcdTBhOGZcdTBhOTUgXHUwYWI1XHUwYWIwXHUwYWNkXHUwYWI3Iix5eToiJWQgXHUwYWI1XHUwYWIwXHUwYWNk''@;'; put 'put ''XHUwYWI3In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MGFlN1x1MGFlOFx1MGFlOVx1MGFlYVx1MGFlYlx1MGFlY1x1MGFlZFx1MGFlZVx1MGFlZlx1MGFlNl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3Jl''@;'; put 'put ''dHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwYWIwXHUwYWJlXHUwYWE0fFx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMHxcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjB8XHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljLyxtZXJpZGll''@;'; put 'put ''bUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwYWIwXHUwYWJlXHUwYWE0Ij09PU8/TTw0P006TSsxMjoiXHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwIj09PU8/TToiXHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwIj09PU8/TT49MTA/TTpNKzEyOiJcdTBhYjhcdTBh''@;'; put 'put ''YmVcdTBhODJcdTBhOWMiPT09Tz9NKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MGFiMFx1MGFiZVx1MGFhNCI6TTwxMD8iXHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwIjpNPDE3PyJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiOk08MjA/Ilx1MGFi''@;'; put 'put ''OFx1MGFiZVx1MGE4Mlx1MGE5YyI6Ilx1MGFiMFx1MGFiZVx1MGFhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDI0ODA0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiaGUiLHttb250aHM6Ilx1MDVkOVx1''@;'; put 'put ''MDVlMFx1MDVkNVx1MDVkMFx1MDVlOF9cdTA1ZTRcdTA1ZDFcdTA1ZThcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWRlXHUwNWU4XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVkOVx1MDVkY19cdTA1ZGVcdTA1ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVk''@;'; put 'put ''NVx1MDVkY1x1MDVkOV9cdTA1ZDBcdTA1ZDVcdTA1ZDJcdTA1ZDVcdTA1ZTFcdTA1ZDhfXHUwNWUxXHUwNWU0XHUwNWQ4XHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkMFx1MDVkNVx1MDVlN1x1MDVkOFx1MDVkNVx1MDVkMVx1MDVlOF9cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZGVcdTA1ZDFcdTA1''@;'; put 'put ''ZThfXHUwNWQzXHUwNWU2XHUwNWRlXHUwNWQxXHUwNWU4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA1ZDlcdTA1ZTBcdTA1ZDVcdTA1ZjNfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWQw''@;'; put 'put ''XHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWYzX1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVmM19cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZjNfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWYzX1x1MDVkM1x1''@;'; put 'put ''MDVlNlx1MDVkZVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNWU4XHUwNWQwXHUwNWU5XHUwNWQ1XHUwNWRmX1x1MDVlOVx1MDVlMFx1MDVkOV9cdTA1ZTlcdTA1ZGNcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU4XHUwNWQxXHUwNWQ5XHUwNWUyXHUwNWQ5X1x1MDVkN1x1MDVkZVx1''@;'; put 'put ''MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQxXHUwNWVhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDVkMFx1MDVmM19cdTA1ZDFcdTA1ZjNfXHUwNWQyXHUwNWYzX1x1MDVkM1x1MDVmM19cdTA1ZDRcdTA1ZjNfXHUwNWQ1XHUwNWYz''@;'; put 'put ''X1x1MDVlOVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNWQwX1x1MDVkMV9cdTA1ZDJfXHUwNWQzX1x1MDVkNF9cdTA1ZDVfXHUwNWU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtc''@;'; put 'put ''dTA1ZDFdTU1NTSBZWVlZIixMTEw6IkQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLGw6IkQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6''@;'; put 'put ''bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDVkNFx1MDVkOVx1MDVkNVx1MDVkZCBcdTA1ZDFcdTA1YmVdTFQiLG5leHREYXk6IltcdTA1ZGVcdTA1ZDdcdTA1ZTggXHUwNWQxXHUwNWJlXUxUIixuZXh0V2VlazoiZGRkZCBbXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsbGFzdERh''@;'; put 'put ''eToiW1x1MDVkMFx1MDVlYVx1MDVkZVx1MDVkNVx1MDVkYyBcdTA1ZDFcdTA1YmVdTFQiLGxhc3RXZWVrOiJbXHUwNWQxXHUwNWQ5XHUwNWQ1XHUwNWRkXSBkZGRkIFtcdTA1ZDRcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDVcdTA1ZGYgXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNWQxXHUwNWUyXHUwNWQ1XHUwNWQzICVzIixwYXN0OiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgJXMiLHM6Ilx1MDVkZVx1MDVlMVx1MDVlNFx1MDVlOCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLHNzOiIlZCBc''@;'; put 'put ''dTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLG06Ilx1MDVkM1x1MDVlN1x1MDVkNCIsbW06IiVkIFx1MDVkM1x1MDVlN1x1MDVkNVx1MDVlYSIsaDoiXHUwNWU5XHUwNWUyXHUwNWQ0IixoaDpmdW5jdGlvbihtKXtyZXR1cm4gMj09PW0/Ilx1MDVlOVx1MDVlMlx1MDVlYVx1MDVkOVx1''@;'; put 'put ''MDVkOVx1MDVkZCI6bSsiIFx1MDVlOVx1MDVlMlx1MDVkNVx1MDVlYSJ9LGQ6Ilx1MDVkOVx1MDVkNVx1MDVkZCIsZGQ6ZnVuY3Rpb24obSl7cmV0dXJuIDI9PT1tPyJcdTA1ZDlcdTA1ZDVcdTA1ZGVcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm0rIiBcdTA1ZDlcdTA1ZGVcdTA1ZDlcdTA1ZGQifSxN''@;'; put 'put ''OiJcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTkiLE1NOmZ1bmN0aW9uKG0pe3JldHVybiAyPT09bT8iXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWQ5XHUwNWRkIjptKyIgXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWRkIn0seToiXHUwNWU5XHUwNWUwXHUwNWQ0''@;'; put 'put ''Iix5eTpmdW5jdGlvbihtKXtyZXR1cm4gMj09PW0/Ilx1MDVlOVx1MDVlMFx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6bSUxMD09MCYmMTAhPT1tP20rIiBcdTA1ZTlcdTA1ZTBcdTA1ZDQiOm0rIiBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZGQifX0sbWVyaWRpZW1QYXJzZTovXHUwNWQwXHUw''@;'; put 'put ''NWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVl''@;'; put 'put ''OFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4fFx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEvaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybi9eKFx1MDVk''@;'; put 'put ''MFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEpJC8udGVzdChtKX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTw1PyJc''@;'; put 'put ''dTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjptPDEwPyJcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOm08MTI/TT8nXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNic6Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1''@;'; put 'put ''ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm08MTg/TT8nXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNic6Ilx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOiJcdTA1ZDFcdTA1ZTJcdTA1ZThc''@;'; put 'put ''dTA1ZDEifX0pfShGKDE2Njc2KSl9LDIzMDE1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2''@;'; put 'put ''ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxtPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9LGxlPVsv''@;'; put 'put ''Xlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUwOTMwfFx1MDkyYlx1MDkzMC9pLC9eXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhL2ksL15cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDgvaSwvXlx1MDkyZVx1MDkwOC9pLC9eXHUwOTFjXHUwOTQyXHUwOTI4L2ksL15c''@;'; put 'put ''dTA5MWNcdTA5NDFcdTA5MzIvaSwvXlx1MDkwNVx1MDkxNy9pLC9eXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyfFx1MDkzOFx1MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzV8XHUwOTI4XHUwOTM1XHUwOTAyL2ksL15cdTA5MjZc''@;'; put 'put ''dTA5M2ZcdTA5MzhcdTA5MDJ8XHUwOTI2XHUwOTNmXHUwOTM4L2ldO2FlLmRlZmluZUxvY2FsZSgiaGkiLHttb250aHM6e2Zvcm1hdDoiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBc''@;'; put 'put ''dTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5''@;'; put 'put ''MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksc3RhbmRhbG9u''@;'; put 'put ''ZToiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5Mjhf''@;'; put 'put ''XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkwMlx1MDky''@;'; put 'put ''Y1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5MjguX1x1MDkyYlx1MDkzY1x1MDkzMC5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0''@;'; put 'put ''OC5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkwNVx1MDkxNy5fXHUwOTM4XHUwOTNmXHUwOTI0Ll9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIuX1x1MDkyOFx1MDkzNS5fXHUwOTI2XHUwOTNmXHUwOTM4LiIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMw''@;'; put 'put ''X1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1''@;'; put 'put ''MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyX1x1MDkyY1x1MDk0MVx1MDkyN19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9cdTA5MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBIGg6bW06c3MgXHUw''@;'; put 'put ''OTJjXHUwOTFjXHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0sbW9udGhzUGFyc2U6bGUsbG9u''@;'; put 'put ''Z01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1''@;'; put 'put ''MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUwOTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzUvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOC9pXSxtb250aHNS''@;'; put 'put ''ZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1''@;'; put 'put ''MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkz''@;'; put 'put ''MlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkx''@;'; put 'put ''NVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUw''@;'; put 'put ''OTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1''@;'; put 'put ''MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1''@;'; put 'put ''MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkz''@;'; put 'put ''Zlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJc''@;'; put 'put ''Lj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkz''@;'; put 'put ''MHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmVcdTA5M2VcdTA5''@;'; put 'put ''MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOD98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0P3xcdTA5MzhcdTA5M2Zc''@;'; put 'put ''dTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyND9cLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlwu''@;'; put 'put ''P3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwPykvaSxtb250aHNTaG9y''@;'; put 'put ''dFN0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0''@;'; put 'put ''MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4''@;'; put 'put ''dERheToiW1x1MDkxNVx1MDkzMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJhXHUwOTNmXHUwOTFiXHUwOTMyXHUwOTQ3XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMg''@;'; put 'put ''XHUwOTJlXHUwOTQ3XHUwOTAyIixwYXN0OiIlcyBcdTA5MmFcdTA5MzlcdTA5MzJcdTA5NDciLHM6Ilx1MDkxNVx1MDk0MVx1MDkxYiBcdTA5MzlcdTA5NDAgXHUwOTE1XHUwOTRkXHUwOTM3XHUwOTIzIixzczoiJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxIixtOiJcdTA5MGZc''@;'; put 'put ''dTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixtbToiJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixoOiJcdTA5MGZcdTA5MTUgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTNlIixoaDoiJWQgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTQ3IixkOiJcdTA5MGZcdTA5MTUgXHUwOTI2XHUw''@;'; put 'put ''OTNmXHUwOTI4IixkZDoiJWQgXHUwOTI2XHUwOTNmXHUwOTI4IixNOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3IixNTToiJWQgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3Iix5OiJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3''@;'; put 'put ''Iix5eToiJWQgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3In0scHJlcGFyc2U6ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbih6KXtyZXR1cm4gbVt6XX0p''@;'; put 'put ''fSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oeil7cmV0dXJuIHhbel19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0fFx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOXxcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzB8''@;'; put 'put ''XHUwOTM2XHUwOTNlXHUwOTJlLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oUix6KXtyZXR1cm4gMTI9PT1SJiYoUj0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0Ij09PXo/Ujw0P1I6UisxMjoiXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5Ij09PXo/UjoiXHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUw''@;'; put 'put ''OTMwIj09PXo/Uj49MTA/UjpSKzEyOiJcdTA5MzZcdTA5M2VcdTA5MmUiPT09ej9SKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oUix6LEspe3JldHVybiBSPDQ/Ilx1MDkzMFx1MDkzZVx1MDkyNCI6UjwxMD8iXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5IjpSPDE3PyJcdTA5MjZcdTA5''@;'; put 'put ''NGJcdTA5MmFcdTA5MzlcdTA5MzAiOlI8MjA/Ilx1MDkzNlx1MDkzZVx1MDkyZSI6Ilx1MDkzMFx1MDkzZVx1MDkyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDE3MTM0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgo''@;'; put 'put ''bGUsTSxPKXt2YXIgUj1sZSsiICI7c3dpdGNoKE8pe2Nhc2Uic3MiOnJldHVybiBSKygxPT09bGU/InNla3VuZGEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtIjpyZXR1cm4gTT8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1t''@;'; put 'put ''IjpyZXR1cm4gUisoMT09PWxlPyJtaW51dGEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nhc2UiaCI6cmV0dXJuIE0/ImplZGFuIHNhdCI6ImplZG5vZyBzYXRhIjtjYXNlImhoIjpyZXR1cm4gUisoMT09PWxlPyJzYXQiOjI9PT1sZXx8Mz09PWxlfHw0PT09''@;'; put 'put ''bGU/InNhdGEiOiJzYXRpIik7Y2FzZSJkZCI6cmV0dXJuIFIrKDE9PT1sZT8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBSKygxPT09bGU/Im1qZXNlYyI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gUisoMT09PWxlPyJn''@;'; put 'put ''b2RpbmEiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/ImdvZGluZSI6ImdvZGluYSIpfX1hZS5kZWZpbmVMb2NhbGUoImhyIix7bW9udGhzOntmb3JtYXQ6InNpamVcdTAxMGRuamFfdmVsamFcdTAxMGRlX29cdTAxN2V1amthX3RyYXZuamFfc3ZpYm5qYV9saXBuamFfc3JwbmphX2tvbG92b3ph''@;'; put 'put ''X3J1am5hX2xpc3RvcGFkYV9zdHVkZW5vZ2FfcHJvc2luY2EiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2lqZVx1MDEwZGFual92ZWxqYVx1MDEwZGFfb1x1MDE3ZXVqYWtfdHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVkZW5pX3Byb3Np''@;'; put 'put ''bmFjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoic2lqLl92ZWxqLl9vXHUwMTdldS5fdHJhLl9zdmkuX2xpcC5fc3JwLl9rb2wuX3J1ai5fbGlzLl9zdHUuX3Byby4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFr''@;'; put 'put ''X3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU0gWVlZWSIsTExMOiJEbyBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRG8gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0''@;'; put 'put ''dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltwcm9c''@;'; put 'put ''dTAxNjFsdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFs''@;'; put 'put ''aV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOiJkYW4iLGRkOngsTToibWplc2VjIixNTTp4LHk6ImdvZGludSIseXk6eH0sZGF5''@;'; put 'put ''T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDUwNjcwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJ2YXNceGUxcm5hcCBoXHhlOXRmXHUwMTUxbiBr''@;'; put 'put ''ZWRkZW4gc3plcmRceGUxbiBjc1x4ZmN0XHhmNnJ0XHhmNmtceGY2biBwXHhlOW50ZWtlbiBzem9tYmF0b24iLnNwbGl0KCIgIik7ZnVuY3Rpb24gbShPLFIseixLKXt2YXIgST1PO3N3aXRjaCh6KXtjYXNlInMiOnJldHVybiBLfHxSPyJuXHhlOWhceGUxbnkgbVx4ZTFzb2RwZXJjIjoiblx4''@;'; put 'put ''ZTloXHhlMW55IG1ceGUxc29kcGVyY2UiO2Nhc2Uic3MiOnJldHVybiBJKyhLfHxSKT8iIG1ceGUxc29kcGVyYyI6IiBtXHhlMXNvZHBlcmNlIjtjYXNlIm0iOnJldHVybiJlZ3kiKyhLfHxSPyIgcGVyYyI6IiBwZXJjZSIpO2Nhc2UibW0iOnJldHVybiBJKyhLfHxSPyIgcGVyYyI6IiBwZXJj''@;'; put 'put ''ZSIpO2Nhc2UiaCI6cmV0dXJuImVneSIrKEt8fFI/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImhoIjpyZXR1cm4gSSsoS3x8Uj8iIFx4ZjNyYSI6IiBceGYzclx4ZTFqYSIpO2Nhc2UiZCI6cmV0dXJuImVneSIrKEt8fFI/IiBuYXAiOiIgbmFwamEiKTtjYXNlImRkIjpyZXR1cm4g''@;'; put 'put ''SSsoS3x8Uj8iIG5hcCI6IiBuYXBqYSIpO2Nhc2UiTSI6cmV0dXJuImVneSIrKEt8fFI/IiBoXHhmM25hcCI6IiBoXHhmM25hcGphIik7Y2FzZSJNTSI6cmV0dXJuIEkrKEt8fFI/IiBoXHhmM25hcCI6IiBoXHhmM25hcGphIik7Y2FzZSJ5IjpyZXR1cm4iZWd5IisoS3x8Uj8iIFx4ZTl2Ijoi''@;'; put 'put ''IFx4ZTl2ZSIpO2Nhc2UieXkiOnJldHVybiBJKyhLfHxSPyIgXHhlOXYiOiIgXHhlOXZlIil9cmV0dXJuIiJ9ZnVuY3Rpb24gbGUoTyl7cmV0dXJuKE8/IiI6IlttXHhmYWx0XSAiKSsiWyIreFt0aGlzLmRheSgpXSsiXSBMVFsta29yXSJ9YWUuZGVmaW5lTG9jYWxlKCJodSIse21vbnRoczoi''@;'; put 'put ''amFudVx4ZTFyX2ZlYnJ1XHhlMXJfbVx4ZTFyY2l1c19ceGUxcHJpbGlzX21ceGUxanVzX2pceGZhbml1c19qXHhmYWxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0XHhmM2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21ceGUxcmMu''@;'; put 'put ''X1x4ZTFwci5fbVx4ZTFqLl9qXHhmYW4uX2pceGZhbC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoidmFzXHhlMXJuYXBfaFx4ZTl0Zlx1MDE1MV9rZWRkX3N6ZXJkYV9jc1x4ZmN0XHhmNnJ0XHhmNmtfcFx4ZTlu''@;'; put 'put ''dGVrX3N6b21iYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoidmFzX2hceGU5dF9rZWRkX3N6ZV9jc1x4ZmN0X3BceGU5bl9zem8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InZfaF9rX3N6ZV9jc19wX3N6byIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoi''@;'; put 'put ''SDptbTpzcyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZLiBNTU1NIEQuIixMTEw6IllZWVkuIE1NTU0gRC4gSDptbSIsTExMTDoiWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1tIn0sbWVyaWRpZW1QYXJzZTovZGV8ZHUvaSxpc1BNOmZ1bmN0aW9uKE8pe3JldHVybiJ1Ij09PU8uY2hhckF0KDEp''@;'; put 'put ''LnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKE8sUix6KXtyZXR1cm4gTzwxMj8hMD09PXo/ImRlIjoiREUiOiEwPT09ej8iZHUiOiJEVSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbWFdIExUWy1rb3JdIixuZXh0RGF5OiJbaG9sbmFwXSBMVFsta29yXSIsbmV4dFdlZWs6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gbGUuY2FsbCh0aGlzLCEwKX0sbGFzdERheToiW3RlZ25hcF0gTFRbLWtvcl0iLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIGxlLmNhbGwodGhpcywhMSl9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIG1ceGZhbHZhIixwYXN0OiIlcyIsczpt''@;'; put 'put ''LHNzOm0sbSxtbTptLGg6bSxoaDptLGQ6bSxkZDptLE06bSxNTTptLHk6bSx5eTptfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNDUyMzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24o''@;'; put 'put ''YWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImh5LWFtIix7bW9udGhzOntmb3JtYXQ6Ilx1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MFx1MDU2Yl9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTc0XHUw''@;'; put 'put ''NTYxXHUwNTgwXHUwNTdmXHUwNTZiX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y1x1MDU2Yl9cdTA1NzRcdTA1NjFcdTA1NzVcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1''@;'; put 'put ''MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RcdTA1NmJfXHUwNTdkXHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1''@;'; put 'put ''MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1''@;'; put 'put ''MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MF9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTc0XHUwNTYxXHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y19cdTA1NzRcdTA1NjFcdTA1NzVcdTA1NmJc''@;'; put 'put ''dTA1N2RfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1MDU2Ylx1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RfXHUwNTdkXHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYy''@;'; put 'put ''XHUwNTY1XHUwNTgwX1x1MDU3MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1''@;'; put 'put ''XHUwNTgwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNTcwXHUwNTc2XHUwNTdlX1x1MDU4M1x1MDU3Zlx1MDU4MF9cdTA1NzRcdTA1ODBcdTA1N2ZfXHUwNTYxXHUwNTdhXHUwNTgwX1x1MDU3NFx1MDU3NVx1MDU3ZF9cdTA1NzBcdTA1NzZcdTA1N2RfXHUwNTcwXHUwNTZjXHUwNTdk''@;'; put 'put ''X1x1MDU4NVx1MDU2M1x1MDU3ZF9cdTA1N2RcdTA1N2FcdTA1N2ZfXHUwNTcwXHUwNTZmXHUwNTdmX1x1MDU3Nlx1MDU3NFx1MDU2Ml9cdTA1NjRcdTA1NmZcdTA1N2YiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDU2Zlx1MDU2Ylx1MDU4MFx1MDU2MVx1MDU2Zlx1MDU2Yl9cdTA1NjVcdTA1''@;'; put 'put ''ODBcdTA1NmZcdTA1NzhcdTA1ODJcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTg0XHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OVx1MDU3OFx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2''@;'; put 'put ''Yl9cdTA1NzBcdTA1NmJcdTA1NzZcdTA1NjNcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyXHUwNTYxXHUwNTY5X1x1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2MVx1MDU2OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1NmZcdTA1ODBc''@;'; put 'put ''dTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDU2Zlx1MDU4MFx1''@;'; put 'put ''MDU2Zl9cdTA1NjVcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTg0X1x1MDU3OVx1MDU4MFx1MDU4NF9cdTA1NzBcdTA1NzZcdTA1NjNfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyX1x1MDU3N1x1MDU2Mlx1MDU2OSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixM''@;'; put 'put ''VFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiIsTExMOiJEIE1NTU0gWVlZWSBcdTA1NjkuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDU2MVx1MDU3NVx1MDU3''@;'; put 'put ''ZFx1MDU4NVx1MDU4MF0gTFQiLG5leHREYXk6IltcdTA1N2VcdTA1NjFcdTA1NzJcdTA1NjhdIExUIixsYXN0RGF5OiJbXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1''@;'; put 'put ''MDU3NFx1MDU2OF0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbXHUwNTYxXHUwNTc2XHUwNTgxXHUwNTYxXHUwNTZlXSBkZGRkIFtcdTA1ODVcdTA1ODBcdTA1NjggXHUwNTZhXHUwNTYxXHUwNTc0XHUwNTY4XSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6IiVzIFx1MDU3MFx1MDU2NVx1MDU3Zlx1MDU3OCIscGFzdDoiJXMgXHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdiIixzOiJcdTA1NzRcdTA1NmIgXHUwNTg0XHUwNTYxXHUwNTc2XHUwNTZiIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsc3M6IiVk''@;'; put 'put ''IFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsbToiXHUwNTgwXHUwNTc4XHUwNTdhXHUwNTY1IixtbToiJWQgXHUwNTgwXHUwNTc4XHUwNTdhXHUwNTY1IixoOiJcdTA1NmFcdTA1NjFcdTA1NzQiLGhoOiIlZCBcdTA1NmFcdTA1NjFcdTA1NzQiLGQ6''@;'; put 'put ''Ilx1MDU4NVx1MDU4MCIsZGQ6IiVkIFx1MDU4NVx1MDU4MCIsTToiXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIixNTToiJWQgXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIix5OiJcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIiLHl5OiIlZCBcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIifSxtZXJp''@;'; put 'put ''ZGllbVBhcnNlOi9cdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjF8XHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdlXHUwNTc4XHUwNTdmXHUwNTdlXHUwNTYxfFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVc''@;'; put 'put ''dTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYvLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuL14oXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxfFx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NikkLy50ZXN0KG0pfSxtZXJp''@;'; put 'put ''ZGllbTpmdW5jdGlvbihtKXtyZXR1cm4gbTw0PyJcdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjEiOm08MTI/Ilx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MSI6bTwxNz8iXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZm''@;'; put 'put ''XHUwNTdlXHUwNTYxIjoiXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfXxcZHsxLDJ9LShcdTA1NmJcdTA1NzZ8XHUwNTgwXHUwNTY0KS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2go''@;'; put 'put ''bGUpe2Nhc2UiREREIjpjYXNlInciOmNhc2UiVyI6Y2FzZSJERERvIjpyZXR1cm4gMT09PW0/bSsiLVx1MDU2Ylx1MDU3NiI6bSsiLVx1MDU4MFx1MDU2NCI7ZGVmYXVsdDpyZXR1cm4gbX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDk5MjMzOmZ1bmN0aW9uKGF0LEllLEYp''@;'; put 'put ''eyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiaWQiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1No''@;'; put 'put ''b3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1bWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JhYl9LYW1f''@;'; put 'put ''SnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0g''@;'; put 'put ''SEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwicGFnaSI9PT1sZT9tOiJzaWFuZyI9PT1sZT9tPj0x''@;'; put 'put ''MT9tOm0rMTI6InNvcmUiPT09bGV8fCJtYWxhbSI9PT1sZT9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMT8icGFnaSI6bTwxNT8ic2lhbmciOm08MTk/InNvcmUiOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExU''@;'; put 'put ''IixuZXh0RGF5OiJbQmVzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsYWx1IHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBh''@;'; put 'put ''c3Q6IiVzIHlhbmcgbGFsdSIsczoiYmViZXJhcGEgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2VtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToi''@;'; put 'put ''JWQgdGFodW4ifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSw5NDY5MzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KE0pe3JldHVybiBNJTEwMD09MTF8fE0lMTAhPTF9ZnVuY3Rpb24gbShNLE8sUix6KXt2YXIgSz1NKyIg''@;'; put 'put ''Ijtzd2l0Y2goUil7Y2FzZSJzIjpyZXR1cm4gT3x8ej8ibm9ra3JhciBzZWtceGZhbmR1ciI6Im5va2tydW0gc2VrXHhmYW5kdW0iO2Nhc2Uic3MiOnJldHVybiB4KE0pP0srKE98fHo/InNla1x4ZmFuZHVyIjoic2VrXHhmYW5kdW0iKTpLKyJzZWtceGZhbmRhIjtjYXNlIm0iOnJldHVybiBP''@;'; put 'put ''PyJtXHhlZG5ceGZhdGEiOiJtXHhlZG5ceGZhdHUiO2Nhc2UibW0iOnJldHVybiB4KE0pP0srKE98fHo/Im1ceGVkblx4ZmF0dXIiOiJtXHhlZG5ceGZhdHVtIik6Tz9LKyJtXHhlZG5ceGZhdGEiOksrIm1ceGVkblx4ZmF0dSI7Y2FzZSJoaCI6cmV0dXJuIHgoTSk/SysoT3x8ej8ia2x1a2t1''@;'; put 'put ''c3R1bmRpciI6ImtsdWtrdXN0dW5kdW0iKTpLKyJrbHVra3VzdHVuZCI7Y2FzZSJkIjpyZXR1cm4gTz8iZGFndXIiOno/ImRhZyI6ImRlZ2kiO2Nhc2UiZGQiOnJldHVybiB4KE0pP08/SysiZGFnYXIiOksrKHo/ImRhZ2EiOiJkXHhmNmd1bSIpOk8/SysiZGFndXIiOksrKHo/ImRhZyI6ImRl''@;'; put 'put ''Z2kiKTtjYXNlIk0iOnJldHVybiBPPyJtXHhlMW51XHhmMHVyIjp6PyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSI7Y2FzZSJNTSI6cmV0dXJuIHgoTSk/Tz9LKyJtXHhlMW51XHhmMGlyIjpLKyh6PyJtXHhlMW51XHhmMGkiOiJtXHhlMW51XHhmMHVtIik6Tz9LKyJtXHhlMW51XHhmMHVy''@;'; put 'put ''IjpLKyh6PyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSIpO2Nhc2UieSI6cmV0dXJuIE98fHo/Ilx4ZTFyIjoiXHhlMXJpIjtjYXNlInl5IjpyZXR1cm4geChNKT9LKyhPfHx6PyJceGUxciI6Ilx4ZTFydW0iKTpLKyhPfHx6PyJceGUxciI6Ilx4ZTFyaSIpfX1hZS5kZWZpbmVMb2NhbGUo''@;'; put 'put ''ImlzIix7bW9udGhzOiJqYW5ceGZhYXJfZmViclx4ZmFhcl9tYXJzX2Fwclx4ZWRsX21hXHhlZF9qXHhmYW5ceGVkX2pceGZhbFx4ZWRfXHhlMWdceGZhc3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfblx4ZjN2ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJf''@;'; put 'put ''bWFyX2Fwcl9tYVx4ZWRfalx4ZmFuX2pceGZhbF9ceGUxZ1x4ZmFfc2VwX29rdF9uXHhmM3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbnVkYWd1cl9ceGZlcmlceGYwanVkYWd1cl9taVx4ZjB2aWt1ZGFndXJfZmltbXR1ZGFndXJfZlx4ZjZzdHVkYWd1cl9s''@;'; put 'put ''YXVnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX1x4ZmVyaV9taVx4ZjBfZmltX2ZceGY2c19sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01ceGUxX1x4ZGVyX01pX0ZpX0ZceGY2X0xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoi''@;'; put 'put ''SDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhlZCBkYWcga2wuXSBMVCIsbmV4dERh''@;'; put 'put ''eToiW1x4ZTEgbW9yZ3VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhlZCBnXHhlNnIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBhc3RhXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlZnRpciAl''@;'; put 'put ''cyIscGFzdDoiZnlyaXIgJXMgc1x4ZWRceGYwYW4iLHM6bSxzczptLG0sbW06bSxoOiJrbHVra3VzdHVuZCIsaGg6bSxkOm0sZGQ6bSxNOm0sTU06bSx5Om0seXk6bX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0p''@;'; put 'put ''fShGKDE2Njc2KSl9LDc4MTE4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiaXQtY2giLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVf''@;'; put 'put ''b3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19n''@;'; put 'put ''aW92ZWRceGVjX3ZlbmVyZFx4ZWNfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDpt''@;'; put 'put ''bSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPZ2dpIGFsbGVdIExUIixuZXh0RGF5OiJbRG9tYW5pIGFsbGVdIExU''@;'; put 'put ''IixuZXh0V2VlazoiZGRkZCBbYWxsZV0gTFQiLGxhc3REYXk6IltJZXJpIGFsbGVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQiOiJbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCJ9LHNhbWVFbHNlOiJM''@;'; put 'put ''In0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJuKC9eWzAtOV0uKyQvLnRlc3QobSk/InRyYSI6ImluIikrIiAiK219LHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4n''@;'; put 'put ''b3JhIixoaDoiJWQgb3JlIixkOiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRv''@;'; put 'put ''eTo0fX0pfShGKDE2Njc2KSl9LDYzOTM2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiaXQiLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1i''@;'; put 'put ''cmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhl''@;'; put 'put ''Y19naW92ZWRceGVjX3ZlbmVyZFx4ZWNfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''SDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW09nZ2kgYSIrKHRoaXMuaG91cnMo''@;'; put 'put ''KT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0RvbWFuaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4iZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0llcmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxh''@;'; put 'put ''c3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpPyJbTGEgc2NvcnNhXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIjoiW0xvIHNjb3Jzb10gZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjow''@;'; put 'put ''PT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InRyYSAlcyIscGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vjb25kaSIsbToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEi''@;'; put 'put ''LGhoOiIlZCBvcmUiLGQ6InVuIGdpb3JubyIsZGQ6IiVkIGdpb3JuaSIsdzoidW5hIHNldHRpbWFuYSIsd3c6IiVkIHNldHRpbWFuZSIsTToidW4gbWVzZSIsTU06IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEv''@;'; put 'put ''LG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sODY4NzE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJqYSIse2VyYXM6W3tzaW5jZToiMjAxOS0wNS0wMSIsb2Zmc2V0OjEsbmFtZToi''@;'; put 'put ''XHU0ZWU0XHU1NDhjIixuYXJyb3c6Ilx1MzJmZiIsYWJicjoiUiJ9LHtzaW5jZToiMTk4OS0wMS0wOCIsdW50aWw6IjIwMTktMDQtMzAiLG9mZnNldDoxLG5hbWU6Ilx1NWU3M1x1NjIxMCIsbmFycm93OiJcdTMzN2IiLGFiYnI6IkgifSx7c2luY2U6IjE5MjYtMTItMjUiLHVudGlsOiIxOTg5''@;'; put 'put ''LTAxLTA3IixvZmZzZXQ6MSxuYW1lOiJcdTY2MmRcdTU0OGMiLG5hcnJvdzoiXHUzMzdjIixhYmJyOiJTIn0se3NpbmNlOiIxOTEyLTA3LTMwIix1bnRpbDoiMTkyNi0xMi0yNCIsb2Zmc2V0OjEsbmFtZToiXHU1OTI3XHU2YjYzIixuYXJyb3c6Ilx1MzM3ZCIsYWJicjoiVCJ9LHtzaW5jZToi''@;'; put 'put ''MTg3My0wMS0wMSIsdW50aWw6IjE5MTItMDctMjkiLG9mZnNldDo2LG5hbWU6Ilx1NjYwZVx1NmNiYiIsbmFycm93OiJcdTMzN2UiLGFiYnI6Ik0ifSx7c2luY2U6IjAwMDEtMDEtMDEiLHVudGlsOiIxODczLTEyLTMxIixvZmZzZXQ6MSxuYW1lOiJcdTg5N2ZcdTY2YTYiLG5hcnJvdzoiQUQi''@;'; put 'put ''LGFiYnI6IkFEIn0se3NpbmNlOiIwMDAwLTEyLTMxIix1bnRpbDotMS8wLG9mZnNldDoxLG5hbWU6Ilx1N2QwMFx1NTE0M1x1NTI0ZCIsbmFycm93OiJCQyIsYWJicjoiQkMifV0sZXJhWWVhck9yZGluYWxSZWdleDovKFx1NTE0M3xcZCspXHU1ZTc0LyxlcmFZZWFyT3JkaW5hbFBhcnNlOmZ1''@;'; put 'put ''bmN0aW9uKG0sbGUpe3JldHVybiJcdTUxNDMiPT09bGVbMV0/MTpwYXJzZUludChsZVsxXXx8bSwxMCl9LG1vbnRoczoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3''@;'; put 'put ''MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY1ZTVcdTY2ZGNcdTY1''@;'; put 'put ''ZTVfXHU2NzA4XHU2NmRjXHU2NWU1X1x1NzA2Ylx1NjZkY1x1NjVlNV9cdTZjMzRcdTY2ZGNcdTY1ZTVfXHU2NzI4XHU2NmRjXHU2NWU1X1x1OTFkMVx1NjZkY1x1NjVlNV9cdTU3MWZcdTY2ZGNcdTY1ZTUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU2NWU1X1x1NjcwOF9cdTcwNmJf''@;'; put 'put ''XHU2YzM0X1x1NjcyOF9cdTkxZDFfXHU1NzFmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU2NzA4X1x1NzA2Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9N''@;'; put 'put ''TS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBkZGRkIEhIOm1tIixsOiJZWVlZL01NL0REIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6''@;'; put 'put ''IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1KGRkZCkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUzNDhcdTUyNGR8XHU1MzQ4XHU1ZjhjL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4iXHU1MzQ4XHU1ZjhjIj09PW19LG1l''@;'; put 'put ''cmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08MTI/Ilx1NTM0OFx1NTI0ZCI6Ilx1NTM0OFx1NWY4YyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU2NWU1XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NjVlNV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKG0pe3JldHVybiBtLndl''@;'; put 'put ''ZWsoKSE9PXRoaXMud2VlaygpPyJbXHU2NzY1XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sbGFzdERheToiW1x1NjYyOFx1NjVlNV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLndlZWsoKSE9PW0ud2VlaygpPyJbXHU1MTQ4XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExU''@;'; put 'put ''In0sc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHU2NWU1LyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3N3aXRjaChsZSl7Y2FzZSJ5IjpyZXR1cm4gMT09PW0/Ilx1NTE0M1x1NWU3NCI6bSsiXHU1ZTc0IjtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJl''@;'; put 'put ''dHVybiBtKyJcdTY1ZTUiO2RlZmF1bHQ6cmV0dXJuIG19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTVmOGMiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTY1NzBcdTc5ZDIiLHNzOiIlZFx1NzlkMiIsbToiMVx1NTIwNiIsbW06IiVkXHU1MjA2IixoOiIxXHU2NjQyXHU5NTkzIixoaDoiJWRc''@;'; put 'put ''dTY2NDJcdTk1OTMiLGQ6IjFcdTY1ZTUiLGRkOiIlZFx1NjVlNSIsTToiMVx1MzBmNlx1NjcwOCIsTU06IiVkXHUzMGY2XHU2NzA4Iix5OiIxXHU1ZTc0Iix5eToiJWRcdTVlNzQifX0pfShGKDE2Njc2KSl9LDY4NzEwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO2FlLmRlZmluZUxvY2FsZSgianYiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vcGVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVp''@;'; put 'put ''X0p1bl9KdWxfQWdzX1NlcF9Pa3RfTm9wX0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmVuX1NlbG9zb19SZWJ1X0tlbWlzX0plbXV3YWhfU2VwdHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWluX1Nlbl9TZWxfUmViX0tlbV9KZW1fU2VwIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzTWluOiJNZ19Tbl9TbF9SYl9LbV9KbV9TcCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBN''@;'; put 'put ''TU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L2VuamluZ3xzaXlhbmd8c29udGVufG5kYWx1LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksImVuamluZyI9PT1sZT9tOiJzaXlhbmciPT09bGU/bT49MTE/bTptKzEyOiJzb250''@;'; put 'put ''ZW4iPT09bGV8fCJuZGFsdSI9PT1sZT9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMT8iZW5qaW5nIjptPDE1PyJzaXlhbmciOm08MTk/InNvbnRlbiI6Im5kYWx1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltEaW50ZW4gcHVuaWtvIHB1a3VsXSBMVCIs''@;'; put 'put ''bmV4dERheToiW01iZW5qYW5nIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0thbGEgd2luZ2kgcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBba2VwZW5na2VyIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToid29u''@;'; put 'put ''dGVuIGluZyAlcyIscGFzdDoiJXMgaW5na2FuZyBrZXBlbmdrZXIiLHM6InNhd2V0YXdpcyBkZXRpayIsc3M6IiVkIGRldGlrIixtOiJzZXR1bmdnYWwgbWVuaXQiLG1tOiIlZCBtZW5pdCIsaDoic2V0dW5nZ2FsIGphbSIsaGg6IiVkIGphbSIsZDoic2VkaW50ZW4iLGRkOiIlZCBkaW50ZW4i''@;'; put 'put ''LE06InNld3VsYW4iLE1NOiIlZCB3dWxhbiIseToic2V0YXVuIix5eToiJWQgdGF1biJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDE3MTI1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgia2EiLHttb250aHM6''@;'; put 'put ''Ilx1MTBkOFx1MTBkMFx1MTBkY1x1MTBkNVx1MTBkMFx1MTBlMFx1MTBkOF9cdTEwZDdcdTEwZDRcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDVcdTEwZDBcdTEwZGFcdTEwZDhfXHUxMGRiXHUxMGQwXHUxMGUwXHUxMGUyXHUxMGQ4X1x1MTBkMFx1MTBkZVx1MTBlMFx1MTBkOFx1MTBkYVx1MTBk''@;'; put 'put ''OF9cdTEwZGJcdTEwZDBcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkOFx1MTBkNVx1MTBkYVx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDBcdTEwZDJcdTEwZDVcdTEwZDhcdTEwZTFcdTEwZTJcdTEwZGRfXHUxMGUxXHUxMGQ0XHUx''@;'; put 'put ''MGU1XHUxMGUyXHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkZFx1MTBlNVx1MTBlMlx1MTBkZFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZGNcdTEwZGRcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGQzXHUxMGQ0XHUx''@;'; put 'put ''MGQ5XHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwZDhcdTEwZDBcdTEwZGNfXHUxMGQ3XHUxMGQ0XHUxMGQxX1x1MTBkYlx1MTBkMFx1MTBlMF9cdTEwZDBcdTEwZGVcdTEwZTBfXHUxMGRiXHUxMGQwXHUxMGQ4X1x1MTBk''@;'; put 'put ''OFx1MTBkNVx1MTBkY19cdTEwZDhcdTEwZDVcdTEwZGFfXHUxMGQwXHUxMGQyXHUxMGQ1X1x1MTBlMVx1MTBkNFx1MTBlNV9cdTEwZGRcdTEwZTVcdTEwZTJfXHUxMGRjXHUxMGRkXHUxMGQ0X1x1MTBkM1x1MTBkNFx1MTBkOSIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7c3RhbmRhbG9uZToiXHUx''@;'; put 'put ''MGQ5XHUxMGQ1XHUxMGQ4XHUxMGUwXHUxMGQwX1x1MTBkZFx1MTBlMFx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZTFcdTEwZDBcdTEwZGJcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGRkXHUxMGQ3XHUxMGVlXHUxMGU4XHUxMGQwXHUx''@;'; put 'put ''MGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBlZVx1MTBlM1x1MTBkN1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZGVcdTEwZDBcdTEwZTBcdTEwZDBcdTEwZTFcdTEwZDlcdTEwZDRcdTEwZDVcdTEwZDhfXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUx''@;'; put 'put ''MGQ4Ii5zcGxpdCgiXyIpLGZvcm1hdDoiXHUxMGQ5XHUxMGQ1XHUxMGQ4XHUxMGUwXHUxMGQwXHUxMGUxX1x1MTBkZFx1MTBlMFx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZTFcdTEwZDBcdTEwZGJcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFf''@;'; put 'put ''XHUxMGRkXHUxMGQ3XHUxMGVlXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlZVx1MTBlM1x1MTBkN1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGVcdTEwZDBcdTEwZTBcdTEwZDBcdTEwZTFcdTEwZDlcdTEwZDRcdTEwZDVcdTEwZTFf''@;'; put 'put ''XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi8oXHUxMGVjXHUxMGQ4XHUxMGRjXHUxMGQwfFx1MTBlOFx1MTBkNFx1MTBkYlx1MTBkM1x1MTBkNFx1MTBkMikvfSx3ZWVrZGF5c1Nob3J0OiJcdTEwZDlcdTEwZDVcdTEwZDhfXHUxMGRk''@;'; put 'put ''XHUxMGUwXHUxMGU4X1x1MTBlMVx1MTBkMFx1MTBkYl9cdTEwZGRcdTEwZDdcdTEwZWVfXHUxMGVlXHUxMGUzXHUxMGQ3X1x1MTBkZVx1MTBkMFx1MTBlMF9cdTEwZThcdTEwZDBcdTEwZDEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTBkOVx1MTBkNV9cdTEwZGRcdTEwZTBfXHUxMGUx''@;'; put 'put ''XHUxMGQwX1x1MTBkZFx1MTBkN19cdTEwZWVcdTEwZTNfXHUxMGRlXHUxMGQwX1x1MTBlOFx1MTBkMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTEwZDNcdTEwZTZcdTEwZDRcdTEwZTFdIExUWy1cdTEwZDZcdTEwZDRdIixuZXh0RGF5OiJbXHUxMGVlXHUxMGQ1XHUxMGQwXHUxMGRhXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbGFzdERheToi''@;'; put 'put ''W1x1MTBkMlx1MTBlM1x1MTBlOFx1MTBkOFx1MTBkY10gTFRbLVx1MTBkNlx1MTBkNF0iLG5leHRXZWVrOiJbXHUxMGU4XHUxMGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyXSBkZGRkIExUWy1cdTEwZDZcdTEwZDRdIixsYXN0V2VlazoiW1x1MTBlY1x1MTBkOFx1MTBkY1x1MTBkMF0gZGRk''@;'; put 'put ''ZCBMVC1cdTEwZDZcdTEwZDQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVwbGFjZSgvKFx1MTBlY1x1MTBkMFx1MTBkYnxcdTEwZWNcdTEwZTNcdTEwZDd8XHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3fFx1MTBlY1x1MTBkNFx1MTBk''@;'; put 'put ''YXxcdTEwZDNcdTEwZTZ8XHUxMGQ3XHUxMGQ1KShcdTEwZDh8XHUxMGQ0KS8sZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4iXHUxMGQ4Ij09PU8/TSsiXHUxMGU4XHUxMGQ4IjpNK08rIlx1MTBlOFx1MTBkOCJ9KX0scGFzdDpmdW5jdGlvbihtKXtyZXR1cm4vKFx1MTBlY1x1MTBkMFx1MTBkYlx1''@;'; put 'put ''MTBkOHxcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDh8XHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3XHUxMGQ4fFx1MTBkM1x1MTBlNlx1MTBkNHxcdTEwZDdcdTEwZDVcdTEwZDQpLy50ZXN0KG0pP20ucmVwbGFjZSgvKFx1MTBkOHxcdTEwZDQpJC8sIlx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhc''@;'; put 'put ''dTEwZGMiKTovXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4Ly50ZXN0KG0pP20ucmVwbGFjZSgvXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4JC8sIlx1MTBlY1x1MTBkYVx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTptfSxzOiJcdTEwZTBcdTEwZDBcdTEwZGJcdTEwZDNcdTEwZDRc''@;'; put 'put ''dTEwZGNcdTEwZDhcdTEwZGJcdTEwZDQgXHUxMGVjXHUxMGQwXHUxMGRiXHUxMGQ4IixzczoiJWQgXHUxMGVjXHUxMGQwXHUxMGRiXHUxMGQ4IixtOiJcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLG1tOiIlZCBcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLGg6Ilx1MTBlMVx1MTBkMFx1MTBk''@;'; put 'put ''MFx1MTBkN1x1MTBkOCIsaGg6IiVkIFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOCIsZDoiXHUxMGQzXHUxMGU2XHUxMGQ0IixkZDoiJWQgXHUxMGQzXHUxMGU2XHUxMGQ0IixNOiJcdTEwZDdcdTEwZDVcdTEwZDQiLE1NOiIlZCBcdTEwZDdcdTEwZDVcdTEwZDQiLHk6Ilx1MTBlY1x1''@;'; put 'put ''MTBkNFx1MTBkYVx1MTBkOCIseXk6IiVkIFx1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6LzB8MS1cdTEwZGFcdTEwZDh8XHUxMGRiXHUxMGQ0LVxkezEsMn18XGR7MSwyfS1cdTEwZDQvLG9yZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIDA9PT1tP206''@;'; put 'put ''MT09PW0/bSsiLVx1MTBkYVx1MTBkOCI6bTwyMHx8bTw9MTAwJiZtJTIwPT0wfHxtJTEwMD09MD8iXHUxMGRiXHUxMGQ0LSIrbTptKyItXHUxMGQ0In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sODI0NjE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIHg9ezA6Ii1cdTA0NDhcdTA0NTYiLDE6Ii1cdTA0NDhcdTA0NTYiLDI6Ii1cdTA0NDhcdTA0NTYiLDM6Ii1cdTA0NDhcdTA0NTYiLDQ6Ii1cdTA0NDhcdTA0NTYiLDU6Ii1cdTA0NDhcdTA0NTYiLDY6Ii1cdTA0NDhcdTA0NGIiLDc6Ii1cdTA0NDhcdTA0NTYiLDg6Ii1cdTA0''@;'; put 'put ''NDhcdTA0NTYiLDk6Ii1cdTA0NDhcdTA0NGIiLDEwOiItXHUwNDQ4XHUwNDRiIiwyMDoiLVx1MDQ0OFx1MDQ0YiIsMzA6Ii1cdTA0NDhcdTA0NGIiLDQwOiItXHUwNDQ4XHUwNDRiIiw1MDoiLVx1MDQ0OFx1MDQ1NiIsNjA6Ii1cdTA0NDhcdTA0NGIiLDcwOiItXHUwNDQ4XHUwNDU2Iiw4MDoi''@;'; put 'put ''LVx1MDQ0OFx1MDQ1NiIsOTA6Ii1cdTA0NDhcdTA0NGIiLDEwMDoiLVx1MDQ0OFx1MDQ1NiJ9O2FlLmRlZmluZUxvY2FsZSgia2siLHttb250aHM6Ilx1MDQ5Ylx1MDQzMFx1MDRhM1x1MDQ0Mlx1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0OWJcdTA0M2ZcdTA0MzBcdTA0M2RfXHUwNDNkXHUwNDMw''@;'; put 'put ''XHUwNDQzXHUwNDQwXHUwNDRiXHUwNDM3X1x1MDQ0MVx1MDRkOVx1MDQ0M1x1MDQ1Nlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0M2NcdTA0NGJcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQzXHUwNDQxXHUwNDRiXHUwNDNjX1x1MDQ0OFx1MDQ1Nlx1MDQzYlx1MDQzNFx1MDQzNV9cdTA0NDJcdTA0''@;'; put 'put ''MzBcdTA0M2NcdTA0NGJcdTA0MzdfXHUwNDliXHUwNDRiXHUwNDQwXHUwNDNhXHUwNGFmXHUwNDM5XHUwNDM1XHUwNDNhX1x1MDQ5Ylx1MDQzMFx1MDQzN1x1MDQzMFx1MDQzZF9cdTA0OWJcdTA0MzBcdTA0NDBcdTA0MzBcdTA0NDhcdTA0MzBfXHUwNDM2XHUwNDM1XHUwNDNiXHUwNDQyXHUw''@;'; put 'put ''NDNlXHUwNDliXHUwNDQxXHUwNDMwXHUwNDNkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0OWJcdTA0MzBcdTA0YTNfXHUwNDMwXHUwNDliXHUwNDNmX1x1MDQzZFx1MDQzMFx1MDQ0M19cdTA0NDFcdTA0ZDlcdTA0NDNfXHUwNDNjXHUwNDMwXHUwNDNjX1x1MDQzY1x1MDQzMFx1MDQ0''@;'; put 'put ''M19cdTA0NDhcdTA0NTZcdTA0M2JfXHUwNDQyXHUwNDMwXHUwNDNjX1x1MDQ5Ylx1MDQ0Ylx1MDQ0MF9cdTA0OWJcdTA0MzBcdTA0MzdfXHUwNDliXHUwNDMwXHUwNDQwX1x1MDQzNlx1MDQzNVx1MDQzYiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDM2XHUwNDM1XHUwNDNhXHUwNDQxXHUw''@;'; put 'put ''NDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzNFx1MDRhZlx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0NDFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNGQ5XHUwNDQwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUw''@;'; put 'put ''NDU2X1x1MDQzMVx1MDQzNVx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzZcdTA0YjFcdTA0M2NcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzNlx1MDQzNVx1MDQzYV9cdTA0MzRcdTA0''@;'; put 'put ''YWZcdTA0MzlfXHUwNDQxXHUwNDM1XHUwNDM5X1x1MDQ0MVx1MDRkOVx1MDQ0MF9cdTA0MzFcdTA0MzVcdTA0MzlfXHUwNDM2XHUwNGIxXHUwNDNjX1x1MDQ0MVx1MDQzNVx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDM2XHUwNDNhX1x1MDQzNFx1MDQzOV9cdTA0NDFcdTA0''@;'; put 'put ''MzlfXHUwNDQxXHUwNDQwX1x1MDQzMVx1MDQzOV9cdTA0MzZcdTA0M2NfXHUwNDQxXHUwNDNkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIs''@;'; put 'put ''TExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1MDQ1Nlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDE1XHUwNDQwXHUwNDQyXHUwNDM1XHUwNGEzIFx1MDQ0''@;'; put 'put ''MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ4XHUwNDM1IFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLGxhc3RXZWVrOiJb''@;'; put 'put ''XHUwNGU4XHUwNDQyXHUwNDNhXHUwNDM1XHUwNDNkIFx1MDQzMFx1MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1MDRhM10gZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDU2XHUw''@;'; put 'put ''NDQ4XHUwNDU2XHUwNDNkXHUwNDM0XHUwNDM1IixwYXN0OiIlcyBcdTA0MzFcdTA0YjFcdTA0NDBcdTA0NGJcdTA0M2QiLHM6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOiIlZCBcdTA0''@;'; put 'put ''NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGg6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0''@;'; put 'put ''OTNcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0MzBcdTA0MzkiLE1NOiIl''@;'; put 'put ''ZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0MzZcdTA0NGJcdTA0M2IiLHl5OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDhcdTA0NTZ8XHUwNDQ4XHUwNDRiKS8sb3JkaW5hbDpmdW5jdGlvbihs''@;'; put 'put ''ZSl7cmV0dXJuIGxlKyh4W2xlXXx8eFtsZSUxMF18fHhbbGU+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw3NzM5OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUxN2UxIiwyOiJcdTE3ZTIi''@;'; put 'put ''LDM6Ilx1MTdlMyIsNDoiXHUxN2U0Iiw1OiJcdTE3ZTUiLDY6Ilx1MTdlNiIsNzoiXHUxN2U3Iiw4OiJcdTE3ZTgiLDk6Ilx1MTdlOSIsMDoiXHUxN2UwIn0sbT17Ilx1MTdlMSI6IjEiLCJcdTE3ZTIiOiIyIiwiXHUxN2UzIjoiMyIsIlx1MTdlNCI6IjQiLCJcdTE3ZTUiOiI1IiwiXHUxN2U2''@;'; put 'put ''IjoiNiIsIlx1MTdlNyI6IjciLCJcdTE3ZTgiOiI4IiwiXHUxN2U5IjoiOSIsIlx1MTdlMCI6IjAifTthZS5kZWZpbmVMb2NhbGUoImttIix7bW9udGhzOiJcdTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1''@;'; put 'put ''MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3YjZfXHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1MTdiYlx1MTc5M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4''@;'; put 'put ''MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZcdTE3YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2XHUxN2I3XHUxNzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxNzk4XHUxNzgwXHUx''@;'; put 'put ''NzlhXHUxN2I2X1x1MTc4MFx1MTdiYlx1MTc5OFx1MTdkMlx1MTc5N1x1MTdjOF9cdTE3OThcdTE3YjhcdTE3OTNcdTE3YjZfXHUxNzk4XHUxN2MxXHUxNzlmXHUxN2I2X1x1MTdhN1x1MTc5Zlx1MTc5N1x1MTdiNl9cdTE3OThcdTE3YjdcdTE3OTBcdTE3YmJcdTE3OTNcdTE3YjZfXHUxNzgw''@;'; put 'put ''XHUxNzgwXHUxN2QyXHUxNzgwXHUxNzhhXHUxN2I2X1x1MTc5Zlx1MTdiOFx1MTdhMFx1MTdiNl9cdTE3ODBcdTE3ODlcdTE3ZDJcdTE3ODlcdTE3YjZfXHUxNzhmXHUxN2JiXHUxNzliXHUxN2I2X1x1MTc5Y1x1MTdiN1x1MTc4NVx1MTdkMlx1MTc4Nlx1MTdiN1x1MTc4MFx1MTdiNl9cdTE3''@;'; put 'put ''OTJcdTE3ZDJcdTE3OTNcdTE3YmMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MTdhMlx1MTdiNlx1MTc5MVx1MTdiN1x1MTc4Zlx1MTdkMlx1MTc5OV9cdTE3ODVcdTE3ZDBcdTE3OTNcdTE3ZDJcdTE3OTFfXHUxN2EyXHUxNzg0XHUxN2QyXHUxNzgyXHUxN2I2XHUxNzlhX1x1MTc5Nlx1MTdi''@;'; put 'put ''Ylx1MTc5Ml9cdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YTBcdTE3OWZcdTE3ZDJcdTE3OTRcdTE3OGZcdTE3YjdcdTE3Y2RfXHUxNzlmXHUxN2JiXHUxNzgwXHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdjNVx1MTc5YVx1MTdjZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTE3YTJcdTE3YjZf''@;'; put 'put ''XHUxNzg1X1x1MTdhMl9cdTE3OTZfXHUxNzk2XHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdiYl9cdTE3OWYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVt''@;'; put 'put ''UGFyc2U6L1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdiOVx1MTc4MHxcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuIlx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NSI9PT1NfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08''@;'; put 'put ''MTI/Ilx1MTc5Nlx1MTdkMlx1MTc5YVx1MTdiOVx1MTc4MCI6Ilx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzXHUxNzkzXHUxN2MxXHUxN2M3IFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLG5l''@;'; put 'put ''eHREYXk6IltcdTE3OWZcdTE3ZDJcdTE3YTJcdTE3YzJcdTE3ODAgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLGxhc3REYXk6IltcdTE3OThcdTE3ZDJcdTE3OWZcdTE3YjdcdTE3OWJcdTE3OThcdTE3''@;'; put 'put ''YjdcdTE3ODkgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MTc5Zlx1MTc5NFx1MTdkMlx1MTc4Zlx1MTdiNlx1MTdhMFx1MTdjZFx1MTc5OFx1MTdiYlx1MTc5M10gW1x1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLHNhbWVFbHNlOiJMIn0scmVs''@;'; put 'put ''YXRpdmVUaW1lOntmdXR1cmU6IiVzXHUxNzkxXHUxN2MwXHUxNzhmIixwYXN0OiIlc1x1MTc5OFx1MTdiYlx1MTc5MyIsczoiXHUxNzk0XHUxN2M5XHUxN2JiXHUxNzkzXHUxN2QyXHUxNzk4XHUxN2I2XHUxNzkzXHUxNzljXHUxN2I3XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixzczoiJWQg''@;'; put 'put ''XHUxNzljXHUxN2I3XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixtOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG1tOiIlZCBcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLGg6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NCIs''@;'; put 'put ''aGg6IiVkIFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NCIsZDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzIixkZDoiJWQgXHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzIixNOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3ODFcdTE3YzIiLE1NOiIlZCBcdTE3ODFcdTE3''@;'; put 'put ''YzIiLHk6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4Nlx1MTdkMlx1MTc5M1x1MTdiNlx1MTdjNiIseXk6IiVkIFx1MTc4Nlx1MTdkMlx1MTc5M1x1MTdiNlx1MTdjNiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1x1MTc5MVx1MTdiOFxkezEsMn0vLG9yZGluYWw6Ilx1MTc5MVx1MTdiOCVk''@;'; put 'put ''IixwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUxN2UxXHUxN2UyXHUxN2UzXHUxN2U0XHUxN2U1XHUxN2U2XHUxN2U3XHUxN2U4XHUxN2U5XHUxN2UwXS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0u''@;'; put 'put ''cmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwzODcyMDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwY2U3IiwyOiJcdTBjZTgiLDM6Ilx1MGNlOSIs''@;'; put 'put ''NDoiXHUwY2VhIiw1OiJcdTBjZWIiLDY6Ilx1MGNlYyIsNzoiXHUwY2VkIiw4OiJcdTBjZWUiLDk6Ilx1MGNlZiIsMDoiXHUwY2U2In0sbT17Ilx1MGNlNyI6IjEiLCJcdTBjZTgiOiIyIiwiXHUwY2U5IjoiMyIsIlx1MGNlYSI6IjQiLCJcdTBjZWIiOiI1IiwiXHUwY2VjIjoiNiIsIlx1MGNl''@;'; put 'put ''ZCI6IjciLCJcdTBjZWUiOiI4IiwiXHUwY2VmIjoiOSIsIlx1MGNlNiI6IjAifTthZS5kZWZpbmVMb2NhbGUoImtuIix7bW9udGhzOiJcdTBjOWNcdTBjYThcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwXHUwY2I1XHUwY2IwXHUwY2JmX1x1MGNhZVx1''@;'; put 'put ''MGNiZVx1MGNiMFx1MGNjZFx1MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBjOWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4''@;'; put 'put ''XHUwY2NkXHUwYzlmXHUwY2NkX1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2E4XHUwY2I1XHUwY2M2XHUwYzgy''@;'; put 'put ''XHUwY2FjXHUwY2IwXHUwY2NkX1x1MGNhMVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzljXHUwY2E4X1x1MGNhYlx1MGNjNlx1MGNhY1x1MGNjZFx1MGNiMF9cdTBjYWVcdTBjYmVcdTBjYjBcdTBjY2RcdTBj''@;'; put 'put ''OWFcdTBjY2RfXHUwYzhmXHUwY2FhXHUwY2NkXHUwY2IwXHUwY2JmXHUwY2IyXHUwY2NkX1x1MGNhZVx1MGNjNlx1MGNkNV9cdTBjOWNcdTBjYzJcdTBjYThcdTBjY2RfXHUwYzljXHUwY2MxXHUwY2IyXHUwY2M2XHUwY2Q2X1x1MGM4Nlx1MGM5N1x1MGNiOFx1MGNjZFx1MGM5Zlx1MGNjZF9c''@;'; put 'put ''dTBjYjhcdTBjYzZcdTBjYWFcdTBjY2RcdTBjOWZcdTBjYzZcdTBjODJfXHUwYzg1XHUwYzk1XHUwY2NkXHUwYzlmXHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNhOFx1MGNiNVx1MGNjNlx1MGM4Ml9cdTBjYTFcdTBjYmZcdTBjYjhcdTBjYzZcdTBjODIiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VF''@;'; put 'put ''eGFjdDohMCx3ZWVrZGF5czoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhZVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2FjXHUwY2Mx''@;'; put 'put ''XHUwY2E3XHUwY2I1XHUwY2JlXHUwY2IwX1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjZcdTBjYzFcdTBjOTVcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmXHUwY2I1XHUwY2JlXHUwY2IwIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzU2hvcnQ6Ilx1MGNhZFx1MGNiZVx1MGNhOFx1MGNjMV9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWVfXHUwY2FlXHUwYzgyXHUwYzk3XHUwY2IzX1x1MGNhY1x1MGNjMVx1MGNhN19cdTBjOTdcdTBjYzFcdTBjYjBcdTBjYzFfXHUwY2I2XHUwY2MxXHUwYzk1XHUwY2Nk''@;'; put 'put ''XHUwY2IwX1x1MGNiNlx1MGNhOFx1MGNiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwY2FkXHUwY2JlX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNV9cdTBjYWVcdTBjODJfXHUwY2FjXHUwY2MxX1x1MGM5N1x1MGNjMV9cdTBjYjZcdTBjYzFfXHUwY2I2Ii5zcGxpdCgiXyIpLGxvbmdE''@;'; put 'put ''YXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGM4N1x1MGM4Mlx1''@;'; put 'put ''MGNhNlx1MGNjMV0gTFQiLG5leHREYXk6IltcdTBjYThcdTBjYmVcdTBjYjNcdTBjYzZdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBjYThcdTBjYmZcdTBjYThcdTBjY2RcdTBjYThcdTBjYzZdIExUIixsYXN0V2VlazoiW1x1MGM5NVx1MGNjNlx1MGNjMlx1MGNhOFx1''@;'; put 'put ''MGNjNlx1MGNhZl0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGNhOFx1MGM4Mlx1MGNhNFx1MGNiMCIscGFzdDoiJXMgXHUwY2I5XHUwY2JmXHUwYzgyXHUwY2E2XHUwY2M2IixzOiJcdTBjOTVcdTBjYzZcdTBjYjJcdTBjYjVcdTBjYzEgXHUw''@;'; put 'put ''Yzk1XHUwY2NkXHUwY2I3XHUwY2EzXHUwYzk3XHUwY2IzXHUwY2MxIixzczoiJWQgXHUwY2I4XHUwY2M2XHUwYzk1XHUwY2M2XHUwYzgyXHUwY2ExXHUwY2MxXHUwYzk3XHUwY2IzXHUwY2MxIixtOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E4XHUwY2JmXHUwY2FlXHUwY2JmXHUw''@;'; put 'put ''Y2I3IixtbToiJWQgXHUwY2E4XHUwY2JmXHUwY2FlXHUwY2JmXHUwY2I3IixoOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwYzk3XHUwYzgyXHUwYzlmXHUwY2M2IixoaDoiJWQgXHUwYzk3XHUwYzgyXHUwYzlmXHUwY2M2IixkOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E2''@;'; put 'put ''XHUwY2JmXHUwY2E4IixkZDoiJWQgXHUwY2E2XHUwY2JmXHUwY2E4IixNOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E0XHUwY2JmXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2MxIixNTToiJWQgXHUwY2E0XHUwY2JmXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2MxIix5OiJcdTBjOTJcdTBj''@;'; put 'put ''ODJcdTBjYTZcdTBjYzEgXHUwY2I1XHUwY2IwXHUwY2NkXHUwY2I3Iix5eToiJWQgXHUwY2I1XHUwY2IwXHUwY2NkXHUwY2I3In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MGNlN1x1MGNlOFx1MGNlOVx1MGNlYVx1MGNlYlx1MGNlY1x1MGNlZFx1MGNlZVx1''@;'; put 'put ''MGNlZlx1MGNlNl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2Jm''@;'; put 'put ''fFx1MGNhY1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNnxcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTh8XHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1N''@;'; put 'put ''JiYoTT0wKSwiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIj09PU8/TTw0P006TSsxMjoiXHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2Ij09PU8/TToiXHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUw''@;'; put 'put ''Y2E4Ij09PU8/TT49MTA/TTpNKzEyOiJcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYiPT09Tz9NKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiI6TTwxMD8iXHUwY2FjXHUwY2M2XHUwY2Iz''@;'; put 'put ''XHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2IjpNPDE3PyJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTgiOk08MjA/Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI6Ilx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiJ9LGRheU9m''@;'; put 'put ''TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHUwY2E4XHUwY2M2XHUwY2Q1KS8sb3JkaW5hbDpmdW5jdGlvbihNKXtyZXR1cm4gTSsiXHUwY2E4XHUwY2M2XHUwY2Q1In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sODUzMDY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9u''@;'; put 'put ''KGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJrbyIse21vbnRoczoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''U2hvcnQ6IjFcdWM2ZDRfMlx1YzZkNF8zXHVjNmQ0XzRcdWM2ZDRfNVx1YzZkNF82XHVjNmQ0XzdcdWM2ZDRfOFx1YzZkNF85XHVjNmQ0XzEwXHVjNmQ0XzExXHVjNmQ0XzEyXHVjNmQ0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdWM3N2NcdWM2OTRcdWM3N2NfXHVjNmQ0XHVjNjk0XHVjNzdj''@;'; put 'put ''X1x1ZDY1NFx1YzY5NFx1Yzc3Y19cdWMyMThcdWM2OTRcdWM3N2NfXHViYWE5XHVjNjk0XHVjNzdjX1x1YWUwOFx1YzY5NFx1Yzc3Y19cdWQxYTBcdWM2OTRcdWM3N2MiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHVjNzdjX1x1YzZkNF9cdWQ2NTRfXHVjMjE4X1x1YmFhOV9cdWFlMDhf''@;'; put 'put ''XHVkMWEwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThfXHViYWE5X1x1YWUwOF9cdWQxYTAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJZWVlZLk1NLkRELiIsTEw6IllZWVlcdWIx''@;'; put 'put ''NDQgTU1NTSBEXHVjNzdjIixMTEw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIEEgaDptbSIsTExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgZGRkZCBBIGg6bW0iLGw6IllZWVkuTU0uREQuIixsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MiLGxsbDoiWVlZWVx1YjE0NCBNTU1NIERc''@;'; put 'put ''dWM3N2MgQSBoOm1tIixsbGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJcdWM2MjRcdWIyOTggTFQiLG5leHREYXk6Ilx1YjBiNFx1Yzc3YyBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6Ilx1YzViNFx1YzgxYyBMVCIs''@;'; put 'put ''bGFzdFdlZWs6Ilx1YzljMFx1YjA5Y1x1YzhmYyBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdWQ2YzQiLHBhc3Q6IiVzIFx1YzgwNCIsczoiXHViYTg3IFx1Y2QwOCIsc3M6IiVkXHVjZDA4IixtOiIxXHViZDg0IixtbToiJWRcdWJkODQiLGg6Ilx1''@;'; put 'put ''ZDU1YyBcdWMyZGNcdWFjMDQiLGhoOiIlZFx1YzJkY1x1YWMwNCIsZDoiXHVkNTU4XHViOGU4IixkZDoiJWRcdWM3N2MiLE06Ilx1ZDU1YyBcdWIyZWMiLE1NOiIlZFx1YjJlYyIseToiXHVjNzdjIFx1YjE0NCIseXk6IiVkXHViMTQ0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy''@;'; put 'put ''fShcdWM3N2N8XHVjNmQ0fFx1YzhmYykvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxlKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBtKyJcdWM3N2MiO2Nhc2UiTSI6cmV0dXJuIG0rIlx1YzZkNCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBtKyJcdWM4ZmMiO2Rl''@;'; put 'put ''ZmF1bHQ6cmV0dXJuIG19fSxtZXJpZGllbVBhcnNlOi9cdWM2MjRcdWM4MDR8XHVjNjI0XHVkNmM0Lyxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybiJcdWM2MjRcdWQ2YzQiPT09bX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMj8iXHVjNjI0XHVjODA0IjoiXHVjNjI0XHVk''@;'; put 'put ''NmM0In19KX0oRigxNjY3NikpfSw4Mjk5NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2Njgi''@;'; put 'put ''LDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sbT17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxsZT1bIlx1''@;'; put 'put ''MDZhOVx1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2MzRcdTA2NDhcdTA2MjhcdTA2MjdcdTA2MmEiLCJcdTA2MjZcdTA2MjdcdTA2MzJcdTA2MjdcdTA2MzEiLCJcdTA2NDZcdTA2Y2NcdTA2MzNcdTA2MjdcdTA2NDYi''@;'; put 'put ''LCJcdTA2MjZcdTA2MjdcdTA2Y2NcdTA2MjdcdTA2MzEiLCJcdTA2MmRcdTA2NDhcdTA2MzJcdTA2ZDVcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MmFcdTA2ZDVcdTA2NDVcdTA2NDVcdTA2NDhcdTA2MzIiLCJcdTA2MjZcdTA2MjdcdTA2MjgiLCJcdTA2MjZcdTA2ZDVcdTA2Y2Nc''@;'; put 'put ''dTA2NDRcdTA2NDhcdTA2NDhcdTA2NDQiLCJcdTA2MmFcdTA2MzRcdTA2MzFcdTA2Y2NcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNjQzXHUwNmQ1XHUwNjQ1IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1MDY0NSIs''@;'; put 'put ''Ilx1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2Y2NcdTA2ZDVcdTA2YTlcdTA2ZDVcdTA2NDUiXTthZS5kZWZpbmVMb2NhbGUoImt1Iix7bW9udGhzOmxlLG1vbnRoc1Nob3J0OmxlLHdlZWtkYXlzOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDNcdTA2MzRcdTA2NDdc''@;'; put 'put ''dTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYzM1x1MDZjZVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2ODZcdTA2NDhcdTA2Mjdc''@;'; put 'put ''dTA2MzFcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjdlXHUwNmNlXHUwNjQ2XHUwNjJjXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY0N1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0Nlx1MDZjY19cdTA2MzRcdTA2NDdc''@;'; put 'put ''dTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MzNcdTA2Y2VcdTA2''@;'; put 'put ''MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjg2XHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUw''@;'; put 'put ''NjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDY0N19cdTA2MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6''@;'; put 'put ''bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGN8''@;'; put 'put ''XHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjLyxpc1BNOmZ1bmN0aW9uKE8pe3JldHVybi9cdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGMvLnRlc3QoTyl9LG1lcmlkaWVtOmZ1bmN0aW9uKE8sUix6KXtyZXR1cm4gTzwxMj8iXHUwNjI4''@;'; put 'put ''XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjIjoiXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjZcdTA2NDdcdTIwMGNcdTA2NDVcdTA2MzFcdTA2YzYgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4''@;'; put 'put ''XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dERheToiW1x1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4''@;'; put 'put ''XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdERheToiW1x1MDYyZlx1MDY0OFx1MDZjZVx1MDY0Nlx1MDZjZSBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNl''@;'; put 'put ''XHUwNjMxXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQ0XHUwNjQ3XHUyMDBjICVzIixwYXN0OiIlcyIsczoiXHUwNjg2XHUwNjQ3XHUyMDBjXHUwNjQ2XHUwNjJmIFx1MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0N1x1MjAwY1x1''@;'; put 'put ''MDY0MyIsc3M6Ilx1MDY4Nlx1MDYzMVx1MDY0M1x1MDY0N1x1MjAwYyAlZCIsbToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsbW06IiVkIFx1MDYyZVx1MDY0OFx1MDY0NFx1MDY0N1x1MjAwY1x1MDY0MyIsaDoiXHUwNmNj''@;'; put 'put ''XHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsaGg6IiVkIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMSIsZDoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY5NVx1MDZjNlx1MDY5OCIsZGQ6''@;'; put 'put ''IiVkIFx1MDY5NVx1MDZjNlx1MDY5OCIsTToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZhZiIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0Nlx1MDZhZiIseToiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIFx1MDYzM1x1MDYyN1x1MDZiNSIseXk6IiVk''@;'; put 'put ''IFx1MDYzM1x1MDYyN1x1MDZiNSJ9LHByZXBhcnNlOmZ1bmN0aW9uKE8pe3JldHVybiBPLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUil7cmV0dXJuIG1bUl19KS5yZXBsYWNlKC9cdTA2''@;'; put 'put ''MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE8pe3JldHVybiBPLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUil7cmV0dXJuIHhbUl19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sODc3OTpmdW5jdGlvbihhdCxJZSxGKXsh''@;'; put 'put ''ZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MDoiLVx1MDQ0N1x1MDRhZiIsMToiLVx1MDQ0N1x1MDQzOCIsMjoiLVx1MDQ0N1x1MDQzOCIsMzoiLVx1MDQ0N1x1MDRhZiIsNDoiLVx1MDQ0N1x1MDRhZiIsNToiLVx1MDQ0N1x1MDQzOCIsNjoiLVx1MDQ0N1x1MDQ0YiIsNzoiLVx1''@;'; put 'put ''MDQ0N1x1MDQzOCIsODoiLVx1MDQ0N1x1MDQzOCIsOToiLVx1MDQ0N1x1MDQ0MyIsMTA6Ii1cdTA0NDdcdTA0NDMiLDIwOiItXHUwNDQ3XHUwNDRiIiwzMDoiLVx1MDQ0N1x1MDQ0MyIsNDA6Ii1cdTA0NDdcdTA0NGIiLDUwOiItXHUwNDQ3XHUwNGFmIiw2MDoiLVx1MDQ0N1x1MDQ0YiIsNzA6''@;'; put 'put ''Ii1cdTA0NDdcdTA0MzgiLDgwOiItXHUwNDQ3XHUwNDM4Iiw5MDoiLVx1MDQ0N1x1MDQ0MyIsMTAwOiItXHUwNDQ3XHUwNGFmIn07YWUuZGVmaW5lTG9jYWxlKCJreSIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRjX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0''@;'; put 'put ''MFx1MDQzMFx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1''@;'; put 'put ''MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0MzRcdTA0MzVc''@;'; put 'put ''dTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0NGMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUw''@;'; put 'put ''NDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MTZc''@;'; put 'put ''dTA0MzVcdTA0M2FcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDE0XHUwNGFmXHUwNDM5XHUwNDQ4XHUwNGU5XHUwNDNjXHUwNDMxXHUwNGFmX1x1MDQyOFx1MDQzNVx1MDQzOVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MjhcdTA0MzBcdTA0NDBcdTA0NDhc''@;'; put 'put ''dTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDExXHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxNlx1MDQ0M1x1MDQzY1x1MDQzMF9cdTA0MThcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzgiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUw''@;'; put 'put ''NDE2XHUwNDM1XHUwNDNhX1x1MDQxNFx1MDRhZlx1MDQzOV9cdTA0MjhcdTA0MzVcdTA0MzlfXHUwNDI4XHUwNDMwXHUwNDQwX1x1MDQxMVx1MDQzNVx1MDQzOV9cdTA0MTZcdTA0NDNcdTA0M2NfXHUwNDE4XHUwNDQ4XHUwNDM1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MTZcdTA0''@;'; put 'put ''M2FfXHUwNDE0XHUwNDM5X1x1MDQyOFx1MDQzOV9cdTA0MjhcdTA0NDBfXHUwNDExXHUwNDM5X1x1MDQxNlx1MDQzY19cdTA0MThcdTA0NDgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''IixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDExXHUwNGFmXHUwNDMzXHUwNGFmXHUwNDNkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLG5leHREYXk6IltcdTA0MmRcdTA0NDBcdTA0''@;'; put 'put ''NDJcdTA0MzVcdTA0YTMgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLGxhc3REYXk6IltcdTA0MWFcdTA0MzVcdTA0NDdcdTA0NGRcdTA0NGQgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFz''@;'; put 'put ''dFdlZWs6IltcdTA0ZThcdTA0NDJcdTA0M2FcdTA0ZTlcdTA0M2QgXHUwNDMwXHUwNDNmXHUwNDQyXHUwNDMwXHUwNDNkXHUwNDRiXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0YWZcdTA0M2RcdTA0YWZdIFtcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA0MzhcdTA0NDdcdTA0MzhcdTA0M2RcdTA0MzRcdTA0MzUiLHBhc3Q6IiVzIFx1MDQzY1x1MDQ0M1x1MDQ0MFx1MDQ0M1x1MDQzZCIsczoiXHUwNDMxXHUwNDM4XHUwNDQwXHUwNDNkXHUwNDM1XHUwNDQ3XHUwNDM1IFx1MDQ0MVx1MDQzNVx1MDQzYVx1''@;'; put 'put ''MDQ0M1x1MDQzZFx1MDQzNCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzY1x1MDRhZlx1MDQzZFx1MDRlOVx1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDRhZlx1MDQzZFx1MDRlOVx1MDQ0MiIsaDoiXHUwNDMx''@;'; put 'put ''XHUwNDM4XHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDRhZlx1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDRhZlx1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1''@;'; put 'put ''MDQzMFx1MDQzOSIsTU06IiVkIFx1MDQzMFx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNlx1MDQ0Ylx1MDQzYiIseXk6IiVkIFx1MDQzNlx1MDQ0Ylx1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ0N1x1MDQzOHxcdTA0NDdcdTA0NGJ8XHUw''@;'; put 'put ''NDQ3XHUwNGFmfFx1MDQ0N1x1MDQ0MykvLG9yZGluYWw6ZnVuY3Rpb24obGUpe3JldHVybiBsZSsoeFtsZV18fHhbbGUlMTBdfHx4W2xlPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNjIwNTc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFl''@;'; put 'put ''KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChSLHosSyxJKXt2YXIgaz17bTpbImVuZyBNaW51dHQiLCJlbmdlciBNaW51dHQiXSxoOlsiZW5nIFN0b25uIiwiZW5nZXIgU3Rvbm4iXSxkOlsiZWVuIERhZyIsImVuZ2VtIERhZyJdLE06WyJlZSBNb3VudCIsImVuZ2VtIE1vdW50Il0seTpbImVl''@;'; put 'put ''IEpvZXIiLCJlbmdlbSBKb2VyIl19O3JldHVybiB6P2tbS11bMF06a1tLXVsxXX1mdW5jdGlvbiBNKFIpe2lmKFI9cGFyc2VJbnQoUiwxMCksaXNOYU4oUikpcmV0dXJuITE7aWYoUjwwKXJldHVybiEwO2lmKFI8MTApcmV0dXJuIDQ8PVImJlI8PTc7aWYoUjwxMDApe3ZhciB6PVIlMTA7cmV0''@;'; put 'put ''dXJuIE0oMD09PXo/Ui8xMDp6KX1pZihSPDFlNCl7Zm9yKDtSPj0xMDspUi89MTA7cmV0dXJuIE0oUil9cmV0dXJuIE0oUi89MWUzKX1hZS5kZWZpbmVMb2NhbGUoImxiIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNGVyel9BYnJceGVibGxfTWVlX0p1bmlfSnVsaV9BdWd1c3RfU2Vw''@;'; put 'put ''dGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmVici5fTXJ6Ll9BYnIuX01lZV9KdW4uX0p1bC5fQXVnLl9TZXB0Ll9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25u''@;'; put 'put ''ZGVnX01ceGU5aW5kZWdfRFx4ZWJuc2NoZGVnX01ceGVidHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9NXHhlOS5fRFx4ZWIuX01ceGViLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTVx4''@;'; put 'put ''ZTlfRFx4ZWJfTVx4ZWJfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSBbQXVlcl0iLExUUzoiSDptbTpzcyBbQXVlcl0iLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6''@;'; put 'put ''bW0gW0F1ZXJdIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhdXQgdW1dIExUIixzYW1lRWxzZToiTCIsbmV4dERheToiW011ZXIgdW1dIExUIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIixsYXN0RGF5OiJbR1x4ZWJzY2h0ZXIg''@;'; put 'put ''dW1dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDI6Y2FzZSA0OnJldHVybiJbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW0xlc2NodGVdIGRkZGQgW3VtXSBMVCJ9fX0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24g''@;'; put 'put ''bShSKXtyZXR1cm4gTShSLnN1YnN0cigwLFIuaW5kZXhPZigiICIpKSk/ImEgIitSOiJhbiAiK1J9LHBhc3Q6ZnVuY3Rpb24gbGUoUil7cmV0dXJuIE0oUi5zdWJzdHIoMCxSLmluZGV4T2YoIiAiKSkpPyJ2aXJ1ICIrUjoidmlydW4gIitSfSxzOiJlIHB1ZXIgU2Vrb25uZW4iLHNzOiIlZCBT''@;'; put 'put ''ZWtvbm5lbiIsbTp4LG1tOiIlZCBNaW51dHRlbiIsaDp4LGhoOiIlZCBTdG9ubmVuIixkOngsZGQ6IiVkIERlZWciLE06eCxNTToiJWQgTVx4ZTlpbnQiLHk6eCx5eToiJWQgSm9lciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6''@;'; put 'put ''MSxkb3k6NH19KX0oRigxNjY3NikpfSwxNzE5MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImxvIix7bW9udGhzOiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUwZWI4XHUwZWExXHUwZTll''@;'; put 'put ''XHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5OVx1MGViMl9cdTBlYzBcdTBlYTFcdTBlYWFcdTBlYjJfXHUwZTllXHUwZWI2XHUwZTk0XHUwZWFhXHUwZWIwXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2RcdTBlYTVcdTBlYjBcdTBl''@;'; put 'put ''ODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUwZWI0XHUwZTg3XHUwZWFiXHUwZWIyX1x1MGU4MVx1MGViMVx1MGU5OVx1MGU4ZFx1MGViMl9cdTBlOTVcdTBlYjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5OVx1MGVhN1x1MGViMiIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZWExXHUwZWIxXHUwZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVhMVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1MGViNlx1MGU5NFx1MGVh''@;'; put 'put ''YVx1MGViMFx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZcdTBlYjhcdTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUwZWE1XHUwZWIwXHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFcdTBlOTlcdTBlOGRcdTBlYjJfXHUw''@;'; put 'put ''ZTk1XHUwZWI4XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4OFx1MGViNFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlcdTBlYTdcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGVhZFx1MGViMlx1MGU5N1x1MGViNFx1MGU5NF9cdTBlODhcdTBlYjFcdTBlOTlfXHUwZWFkXHUw''@;'; put 'put ''ZWIxXHUwZTg3XHUwZTg0XHUwZWIyXHUwZTk5X1x1MGU5ZVx1MGViOFx1MGU5NF9cdTBlOWVcdTBlYjBcdTBlYWJcdTBlYjFcdTBlOTRfXHUwZWFhXHUwZWI4XHUwZTgxX1x1MGVjMFx1MGVhYVx1MGViYlx1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBlOTdcdTBlYjRcdTBl''@;'; put 'put ''OTRfXHUwZTg4XHUwZWIxXHUwZTk5X1x1MGVhZFx1MGViMVx1MGU4N1x1MGU4NFx1MGViMlx1MGU5OV9cdTBlOWVcdTBlYjhcdTBlOTRfXHUwZTllXHUwZWIwXHUwZWFiXHUwZWIxXHUwZTk0X1x1MGVhYVx1MGViOFx1MGU4MV9cdTBlYzBcdTBlYWFcdTBlYmJcdTBlYjIiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46Ilx1MGU5N19cdTBlODhfXHUwZWFkXHUwZTg0X1x1MGU5ZV9cdTBlOWVcdTBlYWJfXHUwZWFhXHUwZTgxX1x1MGVhYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0v''@;'; put 'put ''WVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJcdTBlYTdcdTBlYjFcdTBlOTlkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMwXHUwZThhXHUwZWJiXHUwZWM5XHUwZWIyfFx1MGU5''@;'; put 'put ''NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4Ny8saXNQTTpmdW5jdGlvbihtKXtyZXR1cm4iXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3Ij09PW19LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08MTI/Ilx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMFx1''@;'; put 'put ''MGU4YVx1MGViYlx1MGVjOVx1MGViMiI6Ilx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4NyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZTk5XHUwZWI1XHUwZWM5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbmV4dERheToiW1x1MGVh''@;'; put 'put ''MVx1MGViN1x1MGVjOVx1MGVhZFx1MGViN1x1MGVjOFx1MGU5OVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLG5leHRXZWVrOiJbXHUwZWE3XHUwZWIxXHUwZTk5XWRkZGRbXHUwZWRjXHUwZWM5XHUwZWIyXHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbGFzdERheToiW1x1MGVh''@;'; put 'put ''MVx1MGViN1x1MGVjOVx1MGVhN1x1MGViMlx1MGU5OVx1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLGxhc3RXZWVrOiJbXHUwZWE3XHUwZWIxXHUwZTk5XWRkZGRbXHUwZWMxXHUwZWE1XHUwZWM5XHUwZWE3XHUwZTk5XHUwZWI1XHUwZWM5XHUwZWMwXHUw''@;'; put 'put ''ZWE3XHUwZWE1XHUwZWIyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwZWFkXHUwZWI1XHUwZTgxICVzIixwYXN0OiIlc1x1MGU5Y1x1MGVjOFx1MGViMlx1MGU5OVx1MGVhMVx1MGViMiIsczoiXHUwZTlhXHUwZWNkXHUwZWM4XHUwZWMwXHUwZTk3XHUwZWJi''@;'; put 'put ''XHUwZWM4XHUwZWIyXHUwZWMzXHUwZTk0XHUwZWE3XHUwZWI0XHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixzczoiJWQgXHUwZWE3XHUwZWI0XHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixtOiIxIFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsbW06IiVkIFx1MGU5OVx1MGViMlx1MGU5N1x1''@;'; put 'put ''MGViNSIsaDoiMSBcdTBlOGFcdTBlYmJcdTBlYzhcdTBlYTdcdTBlYzJcdTBlYTFcdTBlODciLGhoOiIlZCBcdTBlOGFcdTBlYmJcdTBlYzhcdTBlYTdcdTBlYzJcdTBlYTFcdTBlODciLGQ6IjEgXHUwZWExXHUwZWI3XHUwZWM5IixkZDoiJWQgXHUwZWExXHUwZWI3XHUwZWM5IixNOiIxIFx1''@;'; put 'put ''MGVjMFx1MGU5NFx1MGViN1x1MGVhZFx1MGU5OSIsTU06IiVkIFx1MGVjMFx1MGU5NFx1MGViN1x1MGVhZFx1MGU5OSIseToiMSBcdTBlOWJcdTBlYjUiLHl5OiIlZCBcdTBlOWJcdTBlYjUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8oXHUwZTk3XHUwZWI1XHUwZWM4KVxkezEsMn0vLG9y''@;'; put 'put ''ZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIlx1MGU5N1x1MGViNVx1MGVjOCIrbX19KX0oRigxNjY3NikpfSwxNTQzMDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17c3M6InNla3VuZFx1MDExN19zZWt1bmRcdTAxN2VpXHUwMTczX3Nla3VuZGVz''@;'; put 'put ''IixtOiJtaW51dFx1MDExN19taW51dFx1MDExN3NfbWludXRcdTAxMTkiLG1tOiJtaW51dFx1MDExN3NfbWludVx1MDEwZGlcdTAxNzNfbWludXRlcyIsaDoidmFsYW5kYV92YWxhbmRvc192YWxhbmRcdTAxMDUiLGhoOiJ2YWxhbmRvc192YWxhbmRcdTAxNzNfdmFsYW5kYXMiLGQ6ImRpZW5h''@;'; put 'put ''X2RpZW5vc19kaWVuXHUwMTA1IixkZDoiZGllbm9zX2RpZW5cdTAxNzNfZGllbmFzIixNOiJtXHUwMTE3bnVvX21cdTAxMTduZXNpb19tXHUwMTE3bmVzXHUwMTJmIixNTToibVx1MDExN25lc2lhaV9tXHUwMTE3bmVzaVx1MDE3M19tXHUwMTE3bmVzaXVzIix5OiJtZXRhaV9tZXRcdTAxNzNf''@;'; put 'put ''bWV0dXMiLHl5OiJtZXRhaV9tZXRcdTAxNzNfbWV0dXMifTtmdW5jdGlvbiBsZShLLEksayxFKXtyZXR1cm4gST9PKGspWzBdOkU/TyhrKVsxXTpPKGspWzJdfWZ1bmN0aW9uIE0oSyl7cmV0dXJuIEslMTA9PTB8fEs+MTAmJks8MjB9ZnVuY3Rpb24gTyhLKXtyZXR1cm4geFtLXS5zcGxpdCgi''@;'; put 'put ''XyIpfWZ1bmN0aW9uIFIoSyxJLGssRSl7dmFyIGo9SysiICI7cmV0dXJuIDE9PT1LP2orbGUoMCxJLGtbMF0sRSk6ST9qKyhNKEspP08oaylbMV06TyhrKVswXSk6RT9qK08oaylbMV06aisoTShLKT9PKGspWzFdOk8oaylbMl0pfWFlLmRlZmluZUxvY2FsZSgibHQiLHttb250aHM6e2Zvcm1h''@;'; put 'put ''dDoic2F1c2lvX3Zhc2FyaW9fa292b19iYWxhbmRcdTAxN2Vpb19nZWd1XHUwMTdlXHUwMTE3c19iaXJcdTAxN2VlbGlvX2xpZXBvc19ydWdwalx1MDE2Ylx1MDEwZGlvX3J1Z3NcdTAxMTdqb19zcGFsaW9fbGFwa3JpXHUwMTBkaW9fZ3J1b2RcdTAxN2VpbyIuc3BsaXQoIl8iKSxzdGFuZGFs''@;'; put 'put ''b25lOiJzYXVzaXNfdmFzYXJpc19rb3Zhc19iYWxhbmRpc19nZWd1XHUwMTdlXHUwMTE3X2Jpclx1MDE3ZWVsaXNfbGllcGFfcnVncGpcdTAxNmJ0aXNfcnVnc1x1MDExN2ppc19zcGFsaXNfbGFwa3JpdGlzX2dydW9kaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhcW1teXFtcXV0q''@;'; put 'put ''XF18XHMpK01NTU0/fE1NTU0/KFxbW15cW1xdXSpcXXxccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6InNhdV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkIi5zcGxpdCgiXyIpLHdlZWtkYXlzOntmb3JtYXQ6InNla21hZGllblx1MDEyZl9waXJtYWRpZW5cdTAx''@;'; put 'put ''MmZfYW50cmFkaWVuXHUwMTJmX3RyZVx1MDEwZGlhZGllblx1MDEyZl9rZXR2aXJ0YWRpZW5cdTAxMmZfcGVua3RhZGllblx1MDEyZl9cdTAxNjFlXHUwMTYxdGFkaWVuXHUwMTJmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNla21hZGllbmlzX3Bpcm1hZGllbmlzX2FudHJhZGllbmlzX3Ry''@;'; put 'put ''ZVx1MDEwZGlhZGllbmlzX2tldHZpcnRhZGllbmlzX3Blbmt0YWRpZW5pc19cdTAxNjFlXHUwMTYxdGFkaWVuaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L2RkZGQgSEg6bW0vfSx3ZWVrZGF5c1Nob3J0OiJTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl9cdTAxNjBlXHUwMTYxIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJTX1BfQV9UX0tfUG5fXHUwMTYwIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dIixMTEw6IllZWVkgW20u''@;'; put 'put ''XSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dIixMTExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZGQsIEhIOm1tIFt2YWwuXSIsbDoiWVlZWS1NTS1ERCIsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsbGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXSIsbGxs''@;'; put 'put ''bDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwMTYwaWFuZGllbl0gTFQiLG5leHREYXk6IltSeXRval0gTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJbVmFrYXJdIExUIixsYXN0V2VlazoiW1ByYVx1MDEx''@;'; put 'put ''N2p1c1x1MDEyZl0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicG8gJXMiLHBhc3Q6InByaWVcdTAxNjEgJXMiLHM6ZnVuY3Rpb24gbShLLEksayxFKXtyZXR1cm4gST8ia2VsaW9zIHNla3VuZFx1MDExN3MiOkU/ImtlbGlcdTAxNzMgc2VrdW5kXHUwMTdl''@;'; put 'put ''aVx1MDE3MyI6ImtlbGlhcyBzZWt1bmRlcyJ9LHNzOlIsbTpsZSxtbTpSLGg6bGUsaGg6UixkOmxlLGRkOlIsTTpsZSxNTTpSLHk6bGUseXk6Un0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS1vamkvLG9yZGluYWw6ZnVuY3Rpb24oSyl7cmV0dXJuIEsrIi1vamkifSx3ZWVrOntk''@;'; put 'put ''b3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw1MzM2MzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17c3M6InNla3VuZGVzX3Nla3VuZFx1MDExM21fc2VrdW5kZV9zZWt1bmRlcyIuc3BsaXQoIl8iKSxtOiJtaW5cdTAxNmJ0ZXNfbWluXHUwMTZi''@;'; put 'put ''dFx1MDExM21fbWluXHUwMTZidGVfbWluXHUwMTZidGVzIi5zcGxpdCgiXyIpLG1tOiJtaW5cdTAxNmJ0ZXNfbWluXHUwMTZidFx1MDExM21fbWluXHUwMTZidGVfbWluXHUwMTZidGVzIi5zcGxpdCgiXyIpLGg6InN0dW5kYXNfc3R1bmRcdTAxMDFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgi''@;'; put 'put ''XyIpLGhoOiJzdHVuZGFzX3N0dW5kXHUwMTAxbV9zdHVuZGFfc3R1bmRhcyIuc3BsaXQoIl8iKSxkOiJkaWVuYXNfZGllblx1MDEwMW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLGRkOiJkaWVuYXNfZGllblx1MDEwMW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLE06Im1cdTAxMTNuZVx1''@;'; put 'put ''MDE2MWFfbVx1MDExM25lXHUwMTYxaWVtX21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLE1NOiJtXHUwMTEzbmVcdTAxNjFhX21cdTAxMTNuZVx1MDE2MWllbV9tXHUwMTEzbmVzaXNfbVx1MDExM25lXHUwMTYxaSIuc3BsaXQoIl8iKSx5OiJnYWRhX2dhZGllbV9n''@;'; put 'put ''YWRzX2dhZGkiLnNwbGl0KCJfIikseXk6ImdhZGFfZ2FkaWVtX2dhZHNfZ2FkaSIuc3BsaXQoIl8iKX07ZnVuY3Rpb24gbSh6LEssSSl7cmV0dXJuIEk/SyUxMD09MSYmSyUxMDAhPTExP3pbMl06elszXTpLJTEwPT0xJiZLJTEwMCE9MTE/elswXTp6WzFdfWZ1bmN0aW9uIGxlKHosSyxJKXty''@;'; put 'put ''ZXR1cm4geisiICIrbSh4W0ldLHosSyl9ZnVuY3Rpb24gTSh6LEssSSl7cmV0dXJuIG0oeFtJXSx6LEspfWFlLmRlZmluZUxvY2FsZSgibHYiLHttb250aHM6ImphbnZcdTAxMDFyaXNfZmVicnVcdTAxMDFyaXNfbWFydHNfYXByXHUwMTJibGlzX21haWpzX2pcdTAxNmJuaWpzX2pcdTAxNmJs''@;'; put 'put ''aWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2pcdTAxNmJuX2pcdTAxNmJsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN2XHUwMTEz''@;'; put 'put ''dGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmVcdTAxNjFkaWVuYV9jZXR1cnRkaWVuYV9waWVrdGRpZW5hX3Nlc3RkaWVuYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdl9QX09fVF9DX1BrX1MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWS4iLExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSIsTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgSEg6bW0iLExMTEw6IllZWVkuIFtnYWRhXSBE''@;'; put 'put ''LiBNTU1NLCBkZGRkLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwMTYwb2RpZW4gcHVsa3N0ZW5dIExUIixuZXh0RGF5OiJbUlx1MDEyYnQgcHVsa3N0ZW5dIExUIixuZXh0V2VlazoiZGRkZCBbcHVsa3N0ZW5dIExUIixsYXN0RGF5OiJbVmFrYXIgcHVsa3N0ZW5dIExUIixsYXN0''@;'; put 'put ''V2VlazoiW1BhZ1x1MDEwMWp1XHUwMTYxXHUwMTAxXSBkZGRkIFtwdWxrc3Rlbl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBcdTAxMTNjICVzIixwYXN0OiJwaXJtcyAlcyIsczpmdW5jdGlvbiBPKHosSyl7cmV0dXJuIEs/ImRhXHUwMTdlYXMgc2VrdW5kZXMi''@;'; put 'put ''OiJkYVx1MDE3ZVx1MDEwMW0gc2VrdW5kXHUwMTEzbSJ9LHNzOmxlLG06TSxtbTpsZSxoOk0saGg6bGUsZDpNLGRkOmxlLE0sTU06bGUseTpNLHl5OmxlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2''@;'; put 'put ''NzYpKX0sNzI5Mzk6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9e3dvcmRzOntzczpbInNla3VuZCIsInNla3VuZGEiLCJzZWt1bmRpIl0sbTpbImplZGFuIG1pbnV0IiwiamVkbm9nIG1pbnV0YSJdLG1tOlsibWludXQiLCJtaW51dGEiLCJtaW51''@;'; put 'put ''dGEiXSxoOlsiamVkYW4gc2F0IiwiamVkbm9nIHNhdGEiXSxoaDpbInNhdCIsInNhdGEiLCJzYXRpIl0sZGQ6WyJkYW4iLCJkYW5hIiwiZGFuYSJdLE1NOlsibWplc2VjIiwibWplc2VjYSIsIm1qZXNlY2kiXSx5eTpbImdvZGluYSIsImdvZGluZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1h''@;'; put 'put ''dGljYWxDYXNlOmZ1bmN0aW9uKGxlLE0pe3JldHVybiAxPT09bGU/TVswXTpsZT49MiYmbGU8PTQ/TVsxXTpNWzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24obGUsTSxPKXt2YXIgUj14LndvcmRzW09dO3JldHVybiAxPT09Ty5sZW5ndGg/TT9SWzBdOlJbMV06bGUrIiAiK3guY29ycmVjdEdyYW1t''@;'; put 'put ''YXRpY2FsQ2FzZShsZSxSKX19O2FlLmRlZmluZUxvY2FsZSgibWUiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5f''@;'; put 'put ''bWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIs''@;'; put 'put ''TFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzanV0cmEgdV0gTFQiLG5leHRX''@;'; put 'put ''ZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNh''@;'; put 'put ''c2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGUgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbcHJvXHUwMTYxbGVdIFtuZWRqZWxqZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BvbmVkamVsamthXSBbdV0gTFQiLCJbcHJvXHUw''@;'; put 'put ''MTYxbG9nXSBbdXRvcmthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzcmlqZWRlXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbXHUwMTBkZXR2cnRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BldGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCJdW3Ro''@;'; put 'put ''aXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6Im5la29saWtvIHNla3VuZGkiLHNzOngudHJhbnNsYXRlLG06eC50cmFuc2xhdGUsbW06eC50cmFuc2xhdGUsaDp4LnRyYW5zbGF0ZSxoaDp4LnRyYW5zbGF0ZSxk''@;'; put 'put ''OiJkYW4iLGRkOngudHJhbnNsYXRlLE06Im1qZXNlYyIsTU06eC50cmFuc2xhdGUseToiZ29kaW51Iix5eTp4LnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDM4MjEyOmZ1''@;'; put 'put ''bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgibWkiLHttb250aHM6IktvaGktdFx1MDEwMXRlX0h1aS10YW5ndXJ1X1BvdXRcdTAxNmItdGUtcmFuZ2lfUGFlbmdhLXdoXHUwMTAxd2hcdTAxMDFfSGFyYXR1YV9QaXBpcmlfSFx1MDE0''@;'; put 'put ''ZG5nb2luZ29pX0hlcmUtdHVyaS1rXHUwMTRka1x1MDEwMV9NYWh1cnVfV2hpcmluZ2EtXHUwMTAxLW51a3VfV2hpcmluZ2EtXHUwMTAxLXJhbmdpX0hha2loZWEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IktvaGlfSHVpX1BvdV9QYWVfSGFyYV9QaXBpX0hcdTAxNGRuZ29pX0hlcmVfTWFo''@;'; put 'put ''dV9XaGktbnVfV2hpLXJhX0hha2kiLnNwbGl0KCJfIiksbW9udGhzUmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTdHJpY3RSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwzfS9pLG1vbnRoc1Nob3J0UmVnZXg6Lyg/''@;'; put 'put ''OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDJ9L2ksd2Vla2RheXM6IlJcdTAxMDF0YXB1X01hbmVfVFx1MDE2YnJlaV9XZW5lcmVpX1RcdTAxMDFpdGVfUGFyYWly''@;'; put 'put ''ZV9IXHUwMTAxdGFyZWkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiVGFfTWFfVFx1MDE2Yl9XZV9UXHUwMTAxaV9QYV9IXHUwMTAxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJUYV9NYV9UXHUwMTZiX1dlX1RcdTAxMDFpX1BhX0hcdTAxMDEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3Jt''@;'; put 'put ''YXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtpXSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW2ldIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIHRlaWUgbWFoYW5hLCBpXSBM''@;'; put 'put ''VCIsbmV4dERheToiW2Fwb3BvIGldIExUIixuZXh0V2VlazoiZGRkZCBbaV0gTFQiLGxhc3REYXk6IltpbmFuYWhpIGldIExUIixsYXN0V2VlazoiZGRkZCBbd2hha2FtdXR1bmdhIGldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpIHJvdG8gaSAlcyIscGFzdDoi''@;'; put 'put ''JXMgaSBtdWEiLHM6InRlIGhcdTAxMTNrb25hIHJ1YXJ1YSIsc3M6IiVkIGhcdTAxMTNrb25hIixtOiJoZSBtZW5ldGkiLG1tOiIlZCBtZW5ldGkiLGg6InRlIGhhb3JhIixoaDoiJWQgaGFvcmEiLGQ6ImhlIHJhIixkZDoiJWQgcmEiLE06ImhlIG1hcmFtYSIsTU06IiVkIG1hcmFtYSIseToi''@;'; put 'put ''aGUgdGF1Iix5eToiJWQgdGF1In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNjk3MTg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVm''@;'; put 'put ''aW5lTG9jYWxlKCJtayIse21vbnRoczoiXHUwNDU4XHUwNDMwXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4''@;'; put 'put ''XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RcdTA0MzhfXHUwNDU4XHUwNDQzXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0''@;'; put 'put ''MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ilx1MDQ1OFx1MDQzMFx1MDQzZF9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUw''@;'; put 'put ''NDM1XHUwNDNmX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0MzVfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0MzBfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUw''@;'; put 'put ''NDNiXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDNlXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1''@;'; put 'put ''MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzBcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0X1x1MDQzZlx1MDQzZVx1MDQzZF9cdTA0MzJcdTA0NDJcdTA0M2VfXHUwNDQxXHUwNDQwXHUwNDM1X1x1MDQ0N1x1MDQzNVx1''@;'; put 'put ''MDQ0Ml9cdTA0M2ZcdTA0MzVcdTA0NDJfXHUwNDQxXHUwNDMwXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RlX1x1MDQzZm9fXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0MzVfXHUwNDNmXHUwNDM1X1x1MDQ0MWEiLnNwbGl0KCJfIiksbG9uZ0RhdGVG''@;'; put 'put ''b3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxNFx1MDQzNVx1MDQzZFx1MDQzNVx1MDQ0''@;'; put 'put ''MSBcdTA0MzJcdTA0M2VdIExUIixuZXh0RGF5OiJbXHUwNDIzXHUwNDQyXHUwNDQwXHUwNDM1IFx1MDQzMlx1MDQzZV0gTFQiLG5leHRXZWVrOiJbXHUwNDEyXHUwNDNlXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIFx1''@;'; put 'put ''MDQzMlx1MDQzZV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA2OnJldHVybiJbXHUwNDE4XHUwNDM3XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDQyXHUwNDMwXHUwNDQyXHUwNDMwXSBkZGRkIFtcdTA0MzJcdTA0M2Vd''@;'; put 'put ''IExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0MThcdTA0MzdcdTA0M2NcdTA0MzhcdTA0M2RcdTA0MzBcdTA0NDJcdTA0MzhcdTA0M2VcdTA0NDJdIGRkZGQgW1x1MDQzMlx1MDQzZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi''@;'; put 'put ''XHUwNDM3XHUwNDMwICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0MzQgJXMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzYVx1MDQ0MyBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0''@;'; put 'put ''M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLG06Ilx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQzNVx1MDQzNFx1MDQzNVx1MDQz''@;'; put 'put ''ZCBcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOiIlZCBcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzAiLGQ6Ilx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzZCBcdTA0MzRcdTA0MzVcdTA0M2QiLGRkOiIlZCBcdTA0MzRcdTA0MzVcdTA0M2RcdTA0MzAiLE06Ilx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzZCBc''@;'; put 'put ''dTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLE1NOiIlZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzgiLHk6Ilx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiLHl5OiIlZCBcdTA0MzNcdTA0M2VcdTA0''@;'; put 'put ''MzRcdTA0MzhcdTA0M2RcdTA0MzgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0MzVcdTA0MzJ8XHUwNDM1XHUwNDNkfFx1MDQ0Mlx1MDQzOHxcdTA0MzJcdTA0Mzh8XHUwNDQwXHUwNDM4fFx1MDQzY1x1MDQzOCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0l''@;'; put 'put ''MTAsTT1tJTEwMDtyZXR1cm4gMD09PW0/bSsiLVx1MDQzNVx1MDQzMiI6MD09PU0/bSsiLVx1MDQzNVx1MDQzZCI6TT4xMCYmTTwyMD9tKyItXHUwNDQyXHUwNDM4IjoxPT09bGU/bSsiLVx1MDQzMlx1MDQzOCI6Mj09PWxlP20rIi1cdTA0NDBcdTA0MzgiOjc9PT1sZXx8OD09PWxlP20rIi1c''@;'; put 'put ''dTA0M2NcdTA0MzgiOm0rIi1cdTA0NDJcdTA0MzgifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw1MDU2MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoIm1sIix7bW9udGhzOiJcdTBkMWNcdTBkMjhcdTBkNDFc''@;'; put 'put ''dTBkMzVcdTBkMzBcdTBkM2ZfXHUwZDJiXHUwZDQ2XHUwZDJjXHUwZDRkXHUwZDMwXHUwZDQxXHUwZDM1XHUwZDMwXHUwZDNmX1x1MGQyZVx1MGQzZVx1MGQ3Y1x1MGQxYVx1MGQ0ZFx1MGQxYVx1MGQ0ZF9cdTBkMGZcdTBkMmFcdTBkNGRcdTBkMzBcdTBkM2ZcdTBkN2RfXHUwZDJlXHUwZDQ3''@;'; put 'put ''XHUwZDJmXHUwZDRkX1x1MGQxY1x1MGQ0Mlx1MGQ3YV9cdTBkMWNcdTBkNDJcdTBkMzJcdTBkNDhfXHUwZDEzXHUwZDE3XHUwZDM4XHUwZDRkXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDRkX1x1MGQzOFx1MGQ0Nlx1MGQyYVx1MGQ0ZFx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQwMlx1MGQyY1x1MGQ3''@;'; put 'put ''Y19cdTBkMTJcdTBkMTVcdTBkNGRcdTBkMWZcdTBkNGJcdTBkMmNcdTBkN2NfXHUwZDI4XHUwZDM1XHUwZDAyXHUwZDJjXHUwZDdjX1x1MGQyMVx1MGQzZlx1MGQzOFx1MGQwMlx1MGQyY1x1MGQ3YyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZDFjXHUwZDI4XHUwZDQxLl9cdTBkMmJc''@;'; put 'put ''dTBkNDZcdTBkMmNcdTBkNGRcdTBkMzBcdTBkNDEuX1x1MGQyZVx1MGQzZVx1MGQ3Yy5fXHUwZDBmXHUwZDJhXHUwZDRkXHUwZDMwXHUwZDNmLl9cdTBkMmVcdTBkNDdcdTBkMmZcdTBkNGRfXHUwZDFjXHUwZDQyXHUwZDdhX1x1MGQxY1x1MGQ0Mlx1MGQzMlx1MGQ0OC5fXHUwZDEzXHUwZDE3''@;'; put 'put ''Ll9cdTBkMzhcdTBkNDZcdTBkMmFcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzEuX1x1MGQxMlx1MGQxNVx1MGQ0ZFx1MGQxZlx1MGQ0Yi5fXHUwZDI4XHUwZDM1XHUwZDAyLl9cdTBkMjFcdTBkM2ZcdTBkMzhcdTBkMDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6''@;'; put 'put ''Ilx1MGQxZVx1MGQzZVx1MGQyZlx1MGQzMVx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMjRcdTBkM2ZcdTBkMTlcdTBkNGRcdTBkMTVcdTBkMzNcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDFhXHUwZDRhXHUwZDM1XHUwZDRkXHUwZDM1XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFh''@;'; put 'put ''X1x1MGQyY1x1MGQ0MVx1MGQyN1x1MGQyOFx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VcdTBkMzRcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM1XHUwZDQ2XHUwZDMzXHUwZDRkXHUwZDMzXHUwZDNmXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDRk''@;'; put 'put ''XHUwZDFhX1x1MGQzNlx1MGQyOFx1MGQzZlx1MGQyZlx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBkMWVcdTBkM2VcdTBkMmZcdTBkN2NfXHUwZDI0XHUwZDNmXHUwZDE5XHUwZDRkXHUwZDE1XHUwZDdlX1x1MGQxYVx1MGQ0YVx1MGQzNVx1''@;'; put 'put ''MGQ0ZFx1MGQzNV9cdTBkMmNcdTBkNDFcdTBkMjdcdTBkN2JfXHUwZDM1XHUwZDRkXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDAyX1x1MGQzNVx1MGQ0Nlx1MGQzM1x1MGQ0ZFx1MGQzM1x1MGQzZl9cdTBkMzZcdTBkMjhcdTBkM2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGQxZVx1MGQz''@;'; put 'put ''ZV9cdTBkMjRcdTBkM2ZfXHUwZDFhXHUwZDRhX1x1MGQyY1x1MGQ0MV9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VfXHUwZDM1XHUwZDQ2X1x1MGQzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSAtXHUwZDI4XHUwZDQxIixMVFM6IkEgaDptbTpzcyAtXHUwZDI4XHUw''@;'; put 'put ''ZDQxIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSAtXHUwZDI4XHUwZDQxIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIC1cdTBkMjhcdTBkNDEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGQwN1x1MGQyOFx1MGQ0ZFx1''@;'; put 'put ''MGQyOFx1MGQ0ZF0gTFQiLG5leHREYXk6IltcdTBkMjhcdTBkM2VcdTBkMzNcdTBkNDZdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBkMDdcdTBkMjhcdTBkNGRcdTBkMjhcdTBkMzJcdTBkNDZdIExUIixsYXN0V2VlazoiW1x1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1''@;'; put 'put ''MGQ0ZFx1MGQxZV0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0ZCIscGFzdDoiJXMgXHUwZDJlXHUwZDQxXHUwZDdiXHUwZDJhXHUwZDRkIixzOiJcdTBkMDVcdTBkN2RcdTBk''@;'; put 'put ''MmEgXHUwZDI4XHUwZDNmXHUwZDJlXHUwZDNmXHUwZDM3XHUwZDE5XHUwZDRkXHUwZDE5XHUwZDdlIixzczoiJWQgXHUwZDM4XHUwZDQ2XHUwZDE1XHUwZDRkXHUwZDE1XHUwZDdiXHUwZDIxXHUwZDRkIixtOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDJlXHUwZDNmXHUwZDI4XHUwZDNmXHUw''@;'; put 'put ''ZDMxXHUwZDRkXHUwZDMxXHUwZDRkIixtbToiJWQgXHUwZDJlXHUwZDNmXHUwZDI4XHUwZDNmXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDRkIixoOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDJlXHUwZDIzXHUwZDNmXHUwZDE1XHUwZDRkXHUwZDE1XHUwZDQyXHUwZDdjIixoaDoiJWQgXHUwZDJl''@;'; put 'put ''XHUwZDIzXHUwZDNmXHUwZDE1XHUwZDRkXHUwZDE1XHUwZDQyXHUwZDdjIixkOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDI2XHUwZDNmXHUwZDM1XHUwZDM4XHUwZDAyIixkZDoiJWQgXHUwZDI2XHUwZDNmXHUwZDM1XHUwZDM4XHUwZDAyIixNOiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDJl''@;'; put 'put ''XHUwZDNlXHUwZDM4XHUwZDAyIixNTToiJWQgXHUwZDJlXHUwZDNlXHUwZDM4XHUwZDAyIix5OiJcdTBkMTJcdTBkMzBcdTBkNDEgXHUwZDM1XHUwZDdjXHUwZDM3XHUwZDAyIix5eToiJWQgXHUwZDM1XHUwZDdjXHUwZDM3XHUwZDAyIn0sbWVyaWRpZW1QYXJzZTovXHUwZDMwXHUwZDNlXHUw''@;'; put 'put ''ZDI0XHUwZDRkXHUwZDMwXHUwZDNmfFx1MGQzMFx1MGQzZVx1MGQzNVx1MGQzZlx1MGQzMlx1MGQ0NnxcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkfFx1MGQzNVx1MGQ0OFx1MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1''@;'; put 'put ''MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMnxcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YvaSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksIlx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiI9PT1sZSYmbT49NHx8Ilx1''@;'; put 'put ''MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiPT09bGV8fCJcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIiPT09bGU/bSsxMjptfSxtZXJpZGllbTpmdW5jdGlv''@;'; put 'put ''bihtLGxlLE0pe3JldHVybiBtPDQ/Ilx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiI6bTwxMj8iXHUwZDMwXHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2IjptPDE3PyJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRk''@;'; put 'put ''XHUwZDFlXHUwZDRkIjptPDIwPyJcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIiOiJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YifX0pfShGKDE2Njc2KSl9LDY4OTI5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5j''@;'; put 'put ''dGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3N3aXRjaChPKXtjYXNlInMiOnJldHVybiBNPyJcdTA0NDVcdTA0NGRcdTA0MzRcdTA0NDVcdTA0NGRcdTA0M2QgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQ1XHUwNDRkXHUwNDM0''@;'; put 'put ''XHUwNDQ1XHUwNDRkXHUwNDNkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCI7Y2FzZSJzcyI6cmV0dXJuIGxlKyhNPyIgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1''@;'; put 'put ''MDQzNFx1MDQ0Ylx1MDQzZCIpO2Nhc2UibSI6Y2FzZSJtbSI6cmV0dXJuIGxlKyhNPyIgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIjoiIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0Ylx1MDQzZCIpO2Nhc2UiaCI6Y2FzZSJoaCI6cmV0dXJuIGxlKyhNPyIgXHUw''@;'; put 'put ''NDQ2XHUwNDMwXHUwNDMzIjoiIFx1MDQ0Nlx1MDQzMFx1MDQzM1x1MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiZCI6Y2FzZSJkZCI6cmV0dXJuIGxlKyhNPyIgXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwIjoiIFx1MDRlOVx1MDQzNFx1MDQ0MFx1MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiTSI6''@;'; put 'put ''Y2FzZSJNTSI6cmV0dXJuIGxlKyhNPyIgXHUwNDQxXHUwNDMwXHUwNDQwIjoiIFx1MDQ0MVx1MDQzMFx1MDQ0MFx1MDQ0Ylx1MDQzZCIpO2Nhc2UieSI6Y2FzZSJ5eSI6cmV0dXJuIGxlKyhNPyIgXHUwNDM2XHUwNDM4XHUwNDNiIjoiIFx1MDQzNlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzOVx1''@;'; put 'put ''MDQzZCIpO2RlZmF1bHQ6cmV0dXJuIGxlfX1hZS5kZWZpbmVMb2NhbGUoIm1uIix7bW9udGhzOiJcdTA0MWRcdTA0NGRcdTA0MzNcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQyNVx1MDQzZVx1MDQ1MVx1MDQ0MFx1MDQzNFx1MDQ0''@;'; put 'put ''M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEzXHUwNDQzXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTRcdTA0ZTlcdTA0NDBcdTA0ZTlcdTA0MzJcdTA0''@;'; put 'put ''MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQyMlx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE3XHUwNDQzXHUwNDQwXHUwNDMzXHUwNDMwXHUwNDM0XHUw''@;'; put 'put ''NDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTRcdTA0M2VcdTA0M2JcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxZFx1MDQzMFx1MDQzOVx1MDQzY1x1MDQzNFx1MDQ0M1x1MDQzM1x1''@;'; put 'put ''MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE1XHUwNDQxXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAg''@;'; put 'put ''XHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxMFx1MDQ0MFx1MDQzMlx1MDQzMFx1MDQzZCBcdTA0M2RcdTA0NGRcdTA0MzNcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxMFx1MDQ0MFx1MDQzMlx1MDQzMFx1MDQzZCBcdTA0NDVcdTA0''@;'; put 'put ''M2VcdTA0NTFcdTA0NDBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxIFx1MDQ0MVx1MDQzMFx1MDQ0MF8yIFx1MDQ0MVx1MDQzMFx1MDQ0MF8zIFx1MDQ0MVx1MDQzMFx1MDQ0MF80IFx1MDQ0''@;'; put 'put ''MVx1MDQzMFx1MDQ0MF81IFx1MDQ0MVx1MDQzMFx1MDQ0MF82IFx1MDQ0MVx1MDQzMFx1MDQ0MF83IFx1MDQ0MVx1MDQzMFx1MDQ0MF84IFx1MDQ0MVx1MDQzMFx1MDQ0MF85IFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMCBcdTA0NDFcdTA0MzBcdTA0NDBfMTEgXHUwNDQxXHUwNDMwXHUwNDQwXzEy''@;'; put 'put ''IFx1MDQ0MVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA0MWRcdTA0NGZcdTA0M2NfXHUwNDE0XHUwNDMwXHUwNDMyXHUwNDMwXHUwNDMwX1x1MDQxY1x1MDQ0Zlx1MDQzM1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MWJcdTA0NDVcdTA0''@;'; put 'put ''MzBcdTA0MzNcdTA0MzJcdTA0MzBfXHUwNDFmXHUwNGFmXHUwNDQwXHUwNDRkXHUwNDMyX1x1MDQxMVx1MDQzMFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzZF9cdTA0MTFcdTA0NGZcdTA0M2NcdTA0MzFcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDFkXHUwNDRmXHUwNDNj''@;'; put 'put ''X1x1MDQxNFx1MDQzMFx1MDQzMl9cdTA0MWNcdTA0NGZcdTA0MzNfXHUwNDFiXHUwNDQ1XHUwNDMwX1x1MDQxZlx1MDRhZlx1MDQ0MF9cdTA0MTFcdTA0MzBcdTA0MzBfXHUwNDExXHUwNDRmXHUwNDNjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MWRcdTA0NGZfXHUwNDE0XHUwNDMw''@;'; put 'put ''X1x1MDQxY1x1MDQ0Zl9cdTA0MWJcdTA0NDVfXHUwNDFmXHUwNGFmX1x1MDQxMVx1MDQzMF9cdTA0MTFcdTA0NGYiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZ''@;'; put 'put ''IFx1MDQzZVx1MDQzZFx1MDQ0YiBNTU1NXHUwNDRiXHUwNDNkIEQiLExMTDoiWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFx1MDQzZVx1MDQzZFx1MDQ0YiBNTU1NXHUwNDRiXHUwNDNkIEQgSEg6bW0ifSxtZXJpZGll''@;'; put 'put ''bVBhcnNlOi9cdTA0YWVcdTA0ZTh8XHUwNGFlXHUwNDI1L2ksaXNQTTpmdW5jdGlvbihsZSl7cmV0dXJuIlx1MDRhZVx1MDQyNSI9PT1sZX0sbWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU8MTI/Ilx1MDRhZVx1MDRlOCI6Ilx1MDRhZVx1MDQyNSJ9LGNhbGVuZGFyOntzYW1l''@;'; put 'put ''RGF5OiJbXHUwNGU4XHUwNDNkXHUwNGU5XHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwXSBMVCIsbmV4dERheToiW1x1MDQxY1x1MDQzMFx1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0OF0gTFQiLG5leHRXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDRkXHUwNDQ1XSBkZGRkIExUIixsYXN0RGF5''@;'; put 'put ''OiJbXHUwNGU4XHUwNDQ3XHUwNDM4XHUwNDMzXHUwNDM0XHUwNGU5XHUwNDQwXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0M2RcdTA0MzNcdTA0ZTlcdTA0NDBcdTA0NDFcdTA0ZTlcdTA0M2RdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQz''@;'; put 'put ''NFx1MDQzMFx1MDQ0MFx1MDQzMFx1MDQzMCIscGFzdDoiJXMgXHUwNGU5XHUwNDNjXHUwNDNkXHUwNGU5IixzOngsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOngsZGQ6eCxNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSBcdTA0ZTlcdTA0MzRcdTA0''@;'; put 'put ''ZTlcdTA0NDAvLG9yZGluYWw6ZnVuY3Rpb24obGUsTSl7c3dpdGNoKE0pe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGxlKyIgXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwIjtkZWZhdWx0OnJldHVybiBsZX19fSl9KEYoMTY2NzYpKX0sODQ4ODA6ZnVuY3Rpb24oYXQsSWUsRil7''@;'; put 'put ''IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDk2NyIsMjoiXHUwOTY4IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIsODoiXHUwOTZlIiw5OiJcdTA5NmYiLDA6Ilx1MDk2NiJ9LG09eyJcdTA5NjciOiIxIiwiXHUw''@;'; put 'put ''OTY4IjoiMiIsIlx1MDk2OSI6IjMiLCJcdTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIsIlx1MDk2YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIwIn07ZnVuY3Rpb24gbGUoTyxSLHosSyl7dmFyIEk9IiI7aWYoUilzd2l0Y2goeil7Y2FzZSJz''@;'; put 'put ''IjpJPSJcdTA5MTVcdTA5M2VcdTA5MzlcdTA5NDAgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2IjticmVhaztjYXNlInNzIjpJPSIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjYiO2JyZWFrO2Nhc2UibSI6ST0iXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1''@;'; put 'put ''MDkzZlx1MDkxZiI7YnJlYWs7Y2FzZSJtbSI6ST0iJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNmXHUwOTFmXHUwOTQ3IjticmVhaztjYXNlImgiOkk9Ilx1MDkwZlx1MDkxNSBcdTA5MjRcdTA5M2VcdTA5MzgiO2JyZWFrO2Nhc2UiaGgiOkk9IiVkIFx1MDkyNFx1MDkzZVx1MDkzOCI7YnJl''@;'; put 'put ''YWs7Y2FzZSJkIjpJPSJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4IjticmVhaztjYXNlImRkIjpJPSIlZCBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzgiO2JyZWFrO2Nhc2UiTSI6ST0iXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSI7YnJl''@;'; put 'put ''YWs7Y2FzZSJNTSI6ST0iJWQgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTQ3IjticmVhaztjYXNlInkiOkk9Ilx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzciO2JyZWFrO2Nhc2UieXkiOkk9IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzN1x1MDk0NyJ9ZWxzZSBz''@;'; put 'put ''d2l0Y2goeil7Y2FzZSJzIjpJPSJcdTA5MTVcdTA5M2VcdTA5MzlcdTA5NDAgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2XHUwOTNlXHUwOTAyIjticmVhaztjYXNlInNzIjpJPSIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjZcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2Ui''@;'; put 'put ''bSI6ST0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDkzZSI7YnJlYWs7Y2FzZSJtbSI6ST0iJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNmXHUwOTFmXHUwOTNlXHUwOTAyIjticmVhaztjYXNlImgiOkk9Ilx1MDkwZlx1MDkxNVx1MDkzZSBc''@;'; put 'put ''dTA5MjRcdTA5M2VcdTA5MzhcdTA5M2UiO2JyZWFrO2Nhc2UiaGgiOkk9IiVkIFx1MDkyNFx1MDkzZVx1MDkzOFx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJkIjpJPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4XHUwOTNlIjticmVhaztjYXNlImRkIjpJPSIl''@;'; put 'put ''ZCBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiTSI6ST0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZSI7YnJlYWs7Y2FzZSJNTSI6ST0iJWQgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4''@;'; put 'put ''XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTAyIjticmVhaztjYXNlInkiOkk9Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5M2UiO2JyZWFrO2Nhc2UieXkiOkk9IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzN1x1MDkzZVx1MDkwMiJ9cmV0dXJuIEkucmVw''@;'; put 'put ''bGFjZSgvJWQvaSxPKX1hZS5kZWZpbmVMb2NhbGUoIm1yIix7bW9udGhzOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkz''@;'; put 'put ''ZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2ZcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5NDhfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1MDk0ZFx1''@;'; put 'put ''MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1''@;'; put 'put ''MDkzMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS5fXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmLl9cdTA5MmVc''@;'; put 'put ''dTA5NDcuX1x1MDkxY1x1MDk0Mlx1MDkyOC5fXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTQ4Ll9cdTA5MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5''@;'; put 'put ''MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzNVx1MDkzZVx1MDkzMF9c''@;'; put 'put ''dTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MzVcdTA5M2Vc''@;'; put 'put ''dTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzX1x1MDkyY1x1MDk0MVx1MDkyN19cdTA5MTdcdTA5NDFc''@;'; put 'put ''dTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9cdTA5MzZcdTA5NDFfXHUwOTM2''@;'; put 'put ''Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTFRTOiJBIGg6bW06c3MgXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZ''@;'; put 'put ''WVksIEEgaDptbSBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTA5XHUw''@;'; put 'put ''OTI2XHUwOTRkXHUwOTJmXHUwOTNlXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmVcdTA5M2VcdTA5MTdcdTA5NDBcdTA5MzJdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiIlc1x1MDkyZVx1MDkyN1x1MDk0ZFx1MDkyZlx1MDk0NyIscGFzdDoiJXNcdTA5MmFcdTA5NDJcdTA5MzBcdTA5NGRcdTA5MzVcdTA5NDAiLHM6bGUsc3M6bGUsbTpsZSxtbTpsZSxoOmxlLGhoOmxlLGQ6bGUsZGQ6bGUsTTpsZSxNTTpsZSx5OmxlLHl5OmxlfSxwcmVwYXJzZTpmdW5j''@;'; put 'put ''dGlvbihPKXtyZXR1cm4gTy5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKFIpe3JldHVybiBtW1JdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTyl7cmV0dXJuIE8ucmVwbGFjZSgvXGQvZyxm''@;'; put 'put ''dW5jdGlvbihSKXtyZXR1cm4geFtSXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDd8XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwfFx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MHxcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJc''@;'; put 'put ''dTA5MTVcdTA5M2VcdTA5MzNcdTA5NDB8XHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTyxSKXtyZXR1cm4gMTI9PT1PJiYoTz0wKSwiXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3Ij09PVJ8fCJcdTA5MzhcdTA5MTVcdTA5''@;'; put 'put ''M2VcdTA5MzNcdTA5NDAiPT09Uj9POiJcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDAiPT09Unx8Ilx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI9PT1SfHwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwIj09PVI/''@;'; put 'put ''Tz49MTI/TzpPKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oTyxSLHope3JldHVybiBPPj0wJiZPPDY/Ilx1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0NyI6TzwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIjpPPDE3PyJcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2Vc''@;'; put 'put ''dTA5MzBcdTA5NDAiOk88MjA/Ilx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDQyMDc0OmZ1bmN0aW9uKGF0LEllLEYp''@;'; put 'put ''eyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgibXMtbXkiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9y''@;'; put 'put ''dDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1''@;'; put 'put ''bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhI''@;'; put 'put ''Lm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksInBhZ2kiPT09bGU/bToidGVuZ2FoYXJpIj09''@;'; put 'put ''PWxlP20+PTExP206bSsxMjoicGV0YW5nIj09PWxlfHwibWFsYW0iPT09bGU/bSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08MTE/InBhZ2kiOm08MTU/InRlbmdhaGFyaSI6bTwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hh''@;'; put 'put ''cmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIs''@;'; put 'put ''eToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNjMxOTM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJtcyIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNfQXBy''@;'; put 'put ''aWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQWhhZF9Jc25pbl9T''@;'; put 'put ''ZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWhfSXNfU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''SC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFs''@;'; put 'put ''YW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwicGFnaSI9PT1sZT9tOiJ0ZW5nYWhhcmkiPT09bGU/bT49MTE/bTptKzEyOiJwZXRhbmciPT09bGV8fCJtYWxhbSI9PT1sZT9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXty''@;'; put 'put ''ZXR1cm4gbTwxMT8icGFnaSI6bTwxNT8idGVuZ2FoYXJpIjptPDE5PyJwZXRhbmciOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbRXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZWxt''@;'; put 'put ''YXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZXBhcyBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxlcGFzIixzOiJiZWJlcmFwYSBzYWF0IixzczoiJWQgc2FhdCIsbToic2VtaW5pdCIsbW06IiVk''@;'; put 'put ''IG1pbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw1NDA4MjpmdW5jdGlvbihhdCxJZSxGKXsh''@;'; put 'put ''ZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoIm10Iix7bW9udGhzOiJKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV9cdTAxMjB1bmp1X0x1bGp1X0F3d2lzc3VfU2V0dGVtYnJ1X090dHVicnVfTm92ZW1icnVfRGlcdTAxMGJlbWJydSIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNTaG9ydDoiSmFuX0ZyYV9NYXJfQXByX01lal9cdTAxMjB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpXHUwMTBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJJbC1cdTAxMjZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wtRXJiZ1x1MDEyN2FfSWwtXHUwMTI2YW1pc19JbC1cdTAxMjBpbWdc''@;'; put 'put ''dTAxMjdhX0lzLVNpYnQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwMTI2YWRfVG5lX1RsaV9FcmJfXHUwMTI2YW1fXHUwMTIwaW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAxMjZhX1RuX1RsX0VyX1x1MDEyNmFfXHUwMTIwaV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbGx1bSBmaWwtXUxUIixuZXh0RGF5''@;'; put 'put ''OiJbR1x1MDEyN2FkYSBmaWwtXUxUIixuZXh0V2VlazoiZGRkZCBbZmlsLV1MVCIsbGFzdERheToiW0lsLWJpZXJhXHUwMTI3IGZpbC1dTFQiLGxhc3RXZWVrOiJkZGRkIFtsaSBnXHUwMTI3YWRkYV0gW2ZpbC1dTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImZcdTIw''@;'; put 'put ''MTkgJXMiLHBhc3Q6IiVzIGlsdSIsczoiZnRpdCBzZWtvbmRpIixzczoiJWQgc2Vrb25kaSIsbToibWludXRhIixtbToiJWQgbWludXRpIixoOiJzaWVnXHUwMTI3YSIsaGg6IiVkIHNpZWdcdTAxMjdhdCIsZDoiXHUwMTIxdXJuYXRhIixkZDoiJWQgXHUwMTIxcmFuZXQiLE06InhhaGFyIixN''@;'; put 'put ''TToiJWQgeGh1ciIseToic2VuYSIseXk6IiVkIHNuaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDgyMjYxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciB4PXsxOiJcdTEwNDEiLDI6Ilx1MTA0MiIsMzoiXHUxMDQzIiw0OiJcdTEwNDQiLDU6Ilx1MTA0NSIsNjoiXHUxMDQ2Iiw3OiJcdTEwNDciLDg6Ilx1MTA0OCIsOToiXHUxMDQ5IiwwOiJcdTEwNDAifSxtPXsiXHUxMDQxIjoiMSIsIlx1MTA0MiI6IjIiLCJcdTEwNDMiOiIz''@;'; put 'put ''IiwiXHUxMDQ0IjoiNCIsIlx1MTA0NSI6IjUiLCJcdTEwNDYiOiI2IiwiXHUxMDQ3IjoiNyIsIlx1MTA0OCI6IjgiLCJcdTEwNDkiOiI5IiwiXHUxMDQwIjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgibXkiLHttb250aHM6Ilx1MTAwN1x1MTAxNFx1MTAzYVx1MTAxNFx1MTAxZFx1MTAyYlx1MTAx''@;'; put 'put ''Ylx1MTAyZV9cdTEwMTZcdTEwMzFcdTEwMTZcdTEwMzFcdTEwMmNcdTEwM2FcdTEwMWRcdTEwMmJcdTEwMWJcdTEwMmVfXHUxMDE5XHUxMDEwXHUxMDNhX1x1MTAyN1x1MTAxNVx1MTAzY1x1MTAyZV9cdTEwMTlcdTEwMzFfXHUxMDA3XHUxMDNkXHUxMDE0XHUxMDNhX1x1MTAwN1x1MTAzMFx1''@;'; put 'put ''MTAxY1x1MTAyZFx1MTAyZlx1MTAwNFx1MTAzYV9cdTEwMWVcdTEwM2NcdTEwMDJcdTEwMmZcdTEwMTBcdTEwM2FfXHUxMDA1XHUxMDAwXHUxMDNhXHUxMDEwXHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjX1x1MTAyMVx1MTAzMVx1MTAyY1x1MTAwMFx1MTAzYVx1MTAxMFx1MTAyZFx1MTAyZlx1''@;'; put 'put ''MTAxOFx1MTAyY19cdTEwMTRcdTEwMmRcdTEwMmZcdTEwMWRcdTEwMDRcdTEwM2FcdTEwMThcdTEwMmNfXHUxMDEyXHUxMDJlXHUxMDA3XHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwMDdcdTEwMTRcdTEwM2FfXHUxMDE2XHUxMDMxX1x1MTAx''@;'; put 'put ''OVx1MTAxMFx1MTAzYV9cdTEwMTVcdTEwM2NcdTEwMmVfXHUxMDE5XHUxMDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMWNcdTEwMmRcdTEwMmZcdTEwMDRcdTEwM2FfXHUxMDFlXHUxMDNjX1x1MTAwNVx1MTAwMFx1MTAzYV9cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2Ff''@;'; put 'put ''XHUxMDE0XHUxMDJkXHUxMDJmX1x1MTAxMlx1MTAyZSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxMDEwXHUxMDE0XHUxMDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxMFx1MTAxNFx1MTAwNFx1MTAzYVx1MTAzOVx1MTAxY1x1MTAyY19cdTEwMjFcdTEwMDRc''@;'; put 'put ''dTEwM2FcdTEwMzlcdTEwMDJcdTEwMmJfXHUxMDE3XHUxMDJmXHUxMDEyXHUxMDM5XHUxMDEzXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY1x1MTAxZVx1MTAxNVx1MTAxMFx1MTAzMVx1MTAzOF9cdTEwMWVcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDA1''@;'; put 'put ''XHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxY1x1MTAyY19cdTEwMDJcdTEwMmJfXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY19cdTEwMWVcdTEwMzFcdTEwMmNfXHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6''@;'; put 'put ''bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMDFhXHUxMDE0XHUxMDMxLl0gTFQgW1x1MTAxOVx1MTAzZVx1''@;'; put 'put ''MTAyY10iLG5leHREYXk6IltcdTEwMTlcdTEwMTRcdTEwMDBcdTEwM2FcdTEwMTZcdTEwM2NcdTEwMTRcdTEwM2FdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixuZXh0V2VlazoiZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdERheToiW1x1MTAxOVx1MTAxNFx1MTAzMS5cdTEw''@;'; put 'put ''MDBdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixsYXN0V2VlazoiW1x1MTAxNVx1MTAzY1x1MTAyZVx1MTAzOFx1MTAwMVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAzMVx1MTAyY10gZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy''@;'; put 'put ''ZToiXHUxMDFjXHUxMDJjXHUxMDE5XHUxMDBhXHUxMDNhXHUxMDM3ICVzIFx1MTAxOVx1MTAzZVx1MTAyYyIscGFzdDoiXHUxMDFjXHUxMDNkXHUxMDE0XHUxMDNhXHUxMDAxXHUxMDMyXHUxMDM3XHUxMDFlXHUxMDMxXHUxMDJjICVzIFx1MTAwMCIsczoiXHUxMDA1XHUxMDAwXHUxMDM5XHUx''@;'; put 'put ''MDAwXHUxMDE0XHUxMDNhLlx1MTAyMVx1MTAxNFx1MTAwYVx1MTAzYVx1MTAzOFx1MTAwNFx1MTAxYVx1MTAzYSIsc3M6IiVkIFx1MTAwNVx1MTAwMFx1MTAzOVx1MTAwMFx1MTAxNFx1MTAzN1x1MTAzYSIsbToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUx''@;'; put 'put ''MDNhIixtbToiJWQgXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNhIixoOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGhoOiIlZCBcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGQ6Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYlx1MTAwMFx1MTAzYSIs''@;'; put 'put ''ZGQ6IiVkIFx1MTAxYlx1MTAwMFx1MTAzYSIsTToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDFjIixNTToiJWQgXHUxMDFjIix5OiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EiLHl5OiIlZCBcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EifSxwcmVwYXJzZTpmdW5j''@;'; put 'put ''dGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUxMDQxXHUxMDQyXHUxMDQzXHUxMDQ0XHUxMDQ1XHUxMDQ2XHUxMDQ3XHUxMDQ4XHUxMDQ5XHUxMDQwXS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxm''@;'; put 'put ''dW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwxNTI3MzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoIm5iIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2Fwcmls''@;'; put 'put ''X21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNl''@;'; put 'put ''RXhhY3Q6ITAsd2Vla2RheXM6InNceGY4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY4Ll9tYS5fdGkuX29uLl90by5fZnIuX2xceGY4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4''@;'; put 'put ''ZjhfbWFfdGlfb25fdG9fZnJfbFx4ZjgiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6Iltm''@;'; put 'put ''b3JyaWdlXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6Im5vZW4gc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXR0IG1pbnV0dCIsbW06IiVkIG1pbnV0dGVyIixoOiJlbiB0aW1lIixoaDoi''@;'; put 'put ''JWQgdGltZXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2VyIix3OiJlbiB1a2UiLHd3OiIlZCB1a2VyIixNOiJlbiBtXHhlNW5lZCIsTU06IiVkIG1ceGU1bmVkZXIiLHk6ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFs''@;'; put 'put ''OiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDE5ODc0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3''@;'; put 'put ''OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxtPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5Iiwi''@;'; put 'put ''XHUwOTY2IjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgibmUiLHttb250aHM6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkw''@;'; put 'put ''NVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZlx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQxXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzdcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUw''@;'; put 'put ''OTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5NDdcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5MjguX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZi5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0MVx1''@;'; put 'put ''MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDguX1x1MDkwNVx1MDkxNy5fXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmLl9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkyZFx1MDk0Ny5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3''@;'; put 'put ''LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5MDdcdTA5MjRcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMlx1MDkyY1x1MDkzZVx1MDkz''@;'; put 'put ''MF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNmXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MmNcdTA5M2VcdTA5''@;'; put 'put ''MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTA2XHUwOTA3XHUwOTI0Ll9cdTA5MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMi5fXHUwOTJjXHUwOTQxXHUwOTI3Ll9cdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2YuX1x1MDkzNlx1MDk0MVx1MDkx''@;'; put 'put ''NVx1MDk0ZFx1MDkzMC5fXHUwOTM2XHUwOTI4XHUwOTNmLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTA2Ll9cdTA5MzhcdTA5NGIuX1x1MDkyZVx1MDkwMi5fXHUwOTJjXHUwOTQxLl9cdTA5MmNcdTA5M2YuX1x1MDkzNlx1MDk0MS5fXHUwOTM2LiIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBXHUwOTE1XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMVFM6IkFcdTA5MTVcdTA5NGIgaDptbTpzcyBcdTA5MmNcdTA5MWNcdTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSwgQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEFcdTA5MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDcifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUw''@;'; put 'put ''OTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGllbVBhcnNlOi9c''@;'; put 'put ''dTA5MzBcdTA5M2VcdTA5MjRcdTA5M2Z8XHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4fFx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YnxcdTA5MzhcdTA5M2VcdTA5MDFcdTA5MWQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihNLE8pe3JldHVybiAxMj09PU0mJihNPTAp''@;'; put 'put ''LCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2YiPT09Tz9NPDQ/TTpNKzEyOiJcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5MjgiPT09Tz9NOiJcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGIiPT09Tz9NPj0xMD9NOk0rMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMVx1MDkxZCI9''@;'; put 'put ''PT1PP00rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08Mz8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIjpNPDEyPyJcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5MjgiOk08MTY/Ilx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YiI6TTwy''@;'; put 'put ''MD8iXHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkIjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTJkXHUwOTRiXHUwOTMyXHUwOTNmXSBMVCIsbmV4dFdlZWs6IltcdTA5MDZcdTA5MDlcdTA5MDFc''@;'; put 'put ''dTA5MjZcdTA5NGJdIGRkZGRbLF0gTFQiLGxhc3REYXk6IltcdTA5MzlcdTA5M2ZcdTA5MWNcdTA5NGJdIExUIixsYXN0V2VlazoiW1x1MDkxN1x1MDkwZlx1MDkxNVx1MDk0Yl0gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTA5MmVcdTA5M2Ui''@;'; put 'put ''LHBhc3Q6IiVzIFx1MDkwNVx1MDkxN1x1MDkzZVx1MDkyMVx1MDkzZiIsczoiXHUwOTE1XHUwOTQ3XHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDk0N1x1MDkyM1x1MDk0ZFx1MDkyMSIsbToiXHUwOTBmXHUwOTE1IFx1''@;'; put 'put ''MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1MDkxZiIsaDoiXHUwOTBmXHUwOTE1IFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsZDoiXHUwOTBm''@;'; put 'put ''XHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkyOCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIseToiXHUwOTBmXHUwOTE1IFx1MDkyY1x1''@;'; put 'put ''MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVkIFx1MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDgxNDg0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21l''@;'; put 'put ''aV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG09Imphbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLGxlPVsvXmphbi9pLC9eZmViL2ksL15tYWFydHxtcnQuPyQvaSwvXmFwci9pLC9ebWVpJC9p''@;'; put 'put ''LC9eanVuW2kuXT8kL2ksL15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLE09L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5c''@;'; put 'put ''Lj98ZmViXC4/fG1ydFwuP3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7YWUuZGVmaW5lTG9jYWxlKCJubC1iZSIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJl''@;'; put 'put ''cl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKFIseil7cmV0dXJuIFI/Ly1NTU0tLy50ZXN0KHopP21bUi5tb250aCgpXTp4W1IubW9udGgoKV06eH0sbW9udGhzUmVnZXg6TSxtb250aHNTaG9ydFJlZ2V4Ok0sbW9udGhzU3RyaWN0''@;'; put 'put ''UmVnZXg6L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/''@;'; put 'put ''fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ6b19tYV9kaV93b19kb192cl96YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJI''@;'; put 'put ''SDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBMVCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltnaXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixz''@;'; put 'put ''czoiJWQgc2Vjb25kZW4iLG06Ilx4ZTlceGU5biBtaW51dXQiLG1tOiIlZCBtaW51dGVuIixoOiJceGU5XHhlOW4gdXVyIixoaDoiJWQgdXVyIixkOiJceGU5XHhlOW4gZGFnIixkZDoiJWQgZGFnZW4iLE06Ilx4ZTlceGU5biBtYWFuZCIsTU06IiVkIG1hYW5kZW4iLHk6Ilx4ZTlceGU5biBq''@;'; put 'put ''YWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihSKXtyZXR1cm4gUisoMT09PVJ8fDg9PT1SfHxSPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNTE2Njc6ZnVu''@;'; put 'put ''Y3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9Imphbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbT0iamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25v''@;'; put 'put ''dl9kZWMiLnNwbGl0KCJfIiksbGU9Wy9eamFuL2ksL15mZWIvaSwvXm1hYXJ0fG1ydC4/JC9pLC9eYXByL2ksL15tZWkkL2ksL15qdW5baS5dPyQvaSwvXmp1bFtpLl0/JC9pLC9eYXVnL2ksL15zZXAvaSwvXm9rdC9pLC9ebm92L2ksL15kZWMvaV0sTT0vXihqYW51YXJpfGZlYnJ1YXJpfG1h''@;'; put 'put ''YXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaTthZS5kZWZpbmVMb2NhbGUoIm5sIix7''@;'; put 'put ''bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oUix6KXtyZXR1cm4gUj8vLU1NTS0vLnRlc3Qoeik/bVtSLm1v''@;'; put 'put ''bnRoKCldOnhbUi5tb250aCgpXTp4fSxtb250aHNSZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDovXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9p''@;'; put 'put ''LG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oamFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fG1laXxqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTpsZSx3ZWVr''@;'; put 'put ''ZGF5czoiem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InpvX21hX2RpX3dvX2RvX3ZyX3ph''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxj''@;'; put 'put ''YWxlbmRhcjp7c2FtZURheToiW3ZhbmRhYWcgb21dIExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2dpc3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAlcyIscGFzdDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4iLHNzOiIlZCBzZWNvbmRlbiIsbToiXHhlOVx4ZTluIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6Ilx4ZTlceGU5biB1dXIiLGhoOiIlZCB1dXIiLGQ6Ilx4ZTlceGU5biBk''@;'; put 'put ''YWciLGRkOiIlZCBkYWdlbiIsdzoiXHhlOVx4ZTluIHdlZWsiLHd3OiIlZCB3ZWtlbiIsTToiXHhlOVx4ZTluIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiXHhlOVx4ZTluIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRp''@;'; put 'put ''bmFsOmZ1bmN0aW9uKFIpe3JldHVybiBSKygxPT09Unx8OD09PVJ8fFI+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwxNzI2MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoIm5uIix7''@;'; put 'put ''bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5f''@;'; put 'put ''bm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InN1bmRhZ19tXHhlNW5kYWdfdHlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sYXVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1Ll9tXHhlNS5fdHkuX29uLl90by5fZnIuX2xhdS4i''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21ceGU1X3R5X29uX3RvX2ZyX2xhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQu''@;'; put 'put ''IE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSSBkYWcga2xva2thXSBMVCIsbmV4dERheToiW0kgbW9yZ29uIGtsb2trYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbG9ra2FdIExUIixsYXN0RGF5''@;'; put 'put ''OiJbSSBnXHhlNXIga2xva2thXSBMVCIsbGFzdFdlZWs6IltGXHhmOHJlZ1x4ZTVhbmRlXSBkZGRkIFtrbG9ra2FdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkYW4iLHM6Im5va3JlIHNla3VuZCIsc3M6IiVkIHNla3VuZCIsbToi''@;'; put 'put ''ZWl0IG1pbnV0dCIsbW06IiVkIG1pbnV0dCIsaDoiZWluIHRpbWUiLGhoOiIlZCB0aW1hciIsZDoiZWluIGRhZyIsZGQ6IiVkIGRhZ2FyIix3OiJlaSB2ZWtlIix3dzoiJWQgdmVrZXIiLE06ImVpbiBtXHhlNW5hZCIsTU06IiVkIG1ceGU1bmFkZXIiLHk6ImVpdCBceGU1ciIseXk6IiVkIFx4''@;'; put 'put ''ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDE5Njc5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgib2MtbG5jIix7''@;'; put 'put ''bW9udGhzOntzdGFuZGFsb25lOiJnZW5pXHhlOHJfZmVicmlceGU4cl9tYXJceGU3X2FicmlsX21haV9qdW5oX2p1bGhldF9hZ29zdF9zZXRlbWJyZV9vY3RceGYyYnJlX25vdmVtYnJlX2RlY2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuaVx4ZThyX2RlIGZlYnJpXHhlOHJfZGUg''@;'; put 'put ''bWFyXHhlN19kJ2FicmlsX2RlIG1haV9kZSBqdW5oX2RlIGp1bGhldF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0XHhmMmJyZV9kZSBub3ZlbWJyZV9kZSBkZWNlbWJyZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdlbi5fZmVici5fbWFy''@;'; put 'put ''XHhlN19hYnIuX21haV9qdW5oX2p1bGguX2Fnby5fc2V0Ll9vY3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1lbmdlX2RpbHVuc19kaW1hcnNfZGltXHhlOGNyZXNfZGlqXHhmMnVzX2RpdmVuZHJlc19kaXNzYWJ0ZSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1Nob3J0OiJkZy5fZGwuX2RtLl9kYy5fZGouX2R2Ll9kcy4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRnX2RsX2RtX2RjX2RqX2R2X2RzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIs''@;'; put 'put ''TDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6IkQgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0iLGxsbDoiRCBNTU0gWVlZWSwgSDptbSIsTExMTDoiZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZ''@;'; put 'put ''WSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdVx4ZThpIGFdIExUIixuZXh0RGF5OiJbZGVtYW4gYV0gTFQiLG5leHRXZWVrOiJkZGRkIFthXSBMVCIsbGFzdERheToiW2lceGU4ciBhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Bhc3NhdCBhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToiZCdhcXVceGVkICVzIixwYXN0OiJmYSAlcyIsczoidW5hcyBzZWdvbmRhcyIsc3M6IiVkIHNlZ29uZGFzIixtOiJ1bmEgbWludXRhIixtbToiJWQgbWludXRhcyIsaDoidW5hIG9yYSIsaGg6IiVkIG9yYXMiLGQ6InVuIGpvcm4iLGRkOiIlZCBqb3JucyIsTToidW4g''@;'; put 'put ''bWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShyfG58dHxceGU4fGEpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3ZhciBNPTE9PT1tPyJyIjoyPT09bT8ibiI6Mz09PW0/InIiOjQ9PT1tPyJ0IjoiXHhlOCI7''@;'; put 'put ''cmV0dXJuKCJ3Ij09PWxlfHwiVyI9PT1sZSkmJihNPSJhIiksbStNfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5NjgzMDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwYTY3IiwyOiJcdTBhNjgiLDM6Ilx1MGE2OSIs''@;'; put 'put ''NDoiXHUwYTZhIiw1OiJcdTBhNmIiLDY6Ilx1MGE2YyIsNzoiXHUwYTZkIiw4OiJcdTBhNmUiLDk6Ilx1MGE2ZiIsMDoiXHUwYTY2In0sbT17Ilx1MGE2NyI6IjEiLCJcdTBhNjgiOiIyIiwiXHUwYTY5IjoiMyIsIlx1MGE2YSI6IjQiLCJcdTBhNmIiOiI1IiwiXHUwYTZjIjoiNiIsIlx1MGE2''@;'; put 'put ''ZCI6IjciLCJcdTBhNmUiOiI4IiwiXHUwYTZmIjoiOSIsIlx1MGE2NiI6IjAifTthZS5kZWZpbmVMb2NhbGUoInBhLWluIix7bW9udGhzOiJcdTBhMWNcdTBhMjhcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJiXHUwYTNjXHUwYTMwXHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyZVx1MGEzZVx1MGEz''@;'; put 'put ''MFx1MGExYV9cdTBhMDVcdTBhMmFcdTBhNGRcdTBhMzBcdTBhNDhcdTBhMzJfXHUwYTJlXHUwYTA4X1x1MGExY1x1MGE0Mlx1MGEyOF9cdTBhMWNcdTBhNDFcdTBhMzJcdTBhM2VcdTBhMDhfXHUwYTA1XHUwYTE3XHUwYTM4XHUwYTI0X1x1MGEzOFx1MGEyNFx1MGE3MFx1MGEyY1x1MGEzMF9c''@;'; put 'put ''dTBhMDVcdTBhMTVcdTBhMjRcdTBhNDJcdTBhMmNcdTBhMzBfXHUwYTI4XHUwYTM1XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEyNlx1MGEzOFx1MGE3MFx1MGEyY1x1MGEzMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYTFjXHUwYTI4XHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyYlx1MGEz''@;'; put 'put ''Y1x1MGEzMFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmVcdTBhM2VcdTBhMzBcdTBhMWFfXHUwYTA1XHUwYTJhXHUwYTRkXHUwYTMwXHUwYTQ4XHUwYTMyX1x1MGEyZVx1MGEwOF9cdTBhMWNcdTBhNDJcdTBhMjhfXHUwYTFjXHUwYTQxXHUwYTMyXHUwYTNlXHUwYTA4X1x1MGEwNVx1MGExN1x1''@;'; put 'put ''MGEzOFx1MGEyNF9cdTBhMzhcdTBhMjRcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTA1XHUwYTE1XHUwYTI0XHUwYTQyXHUwYTJjXHUwYTMwX1x1MGEyOFx1MGEzNVx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMjZcdTBhMzhcdTBhNzBcdTBhMmNcdTBhMzAiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1''@;'; put 'put ''MGExMFx1MGEyNFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhNGJcdTBhMmVcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTJlXHUwYTcwXHUwYTE3XHUwYTMyXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEyY1x1MGE0MVx1MGEyN1x1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzVcdTBhNDBcdTBhMzBc''@;'; put 'put ''dTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTQxXHUwYTcxXHUwYTE1XHUwYTMwXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGEyOFx1MGE0MFx1MGExYVx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBhMTBcdTBh''@;'; put 'put ''MjRfXHUwYTM4XHUwYTRiXHUwYTJlX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMl9cdTBhMmNcdTBhNDFcdTBhMjdfXHUwYTM1XHUwYTQwXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGExNVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46''@;'; put 'put ''Ilx1MGExMFx1MGEyNF9cdTBhMzhcdTBhNGJcdTBhMmVfXHUwYTJlXHUwYTcwXHUwYTE3XHUwYTMyX1x1MGEyY1x1MGE0MVx1MGEyN19cdTBhMzVcdTBhNDBcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTQxXHUwYTE1XHUwYTMwX1x1MGEzOFx1MGEzY1x1MGEyOFx1MGE0MCIuc3BsaXQoIl8iKSxs''@;'; put 'put ''b25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDciLExUUzoiQSBoOm1tOnNzIFx1MGEzNVx1MGExY1x1MGE0NyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3IixMTExMOiJk''@;'; put 'put ''ZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYTA1XHUwYTFjXSBMVCIsbmV4dERheToiW1x1MGExNVx1MGEzMl0gTFQiLG5leHRXZWVrOiJbXHUwYTA1XHUwYTE3XHUwYTMyXHUwYTNlXSBkZGRkLCBMVCIsbGFzdERh''@;'; put 'put ''eToiW1x1MGExNVx1MGEzMl0gTFQiLGxhc3RXZWVrOiJbXHUwYTJhXHUwYTNmXHUwYTFiXHUwYTMyXHUwYTQ3XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYTM1XHUwYTNmXHUwYTcxXHUwYTFhIixwYXN0OiIlcyBcdTBhMmFcdTBhM2ZcdTBh''@;'; put 'put ''MWJcdTBhMzJcdTBhNDciLHM6Ilx1MGExNVx1MGE0MVx1MGExZCBcdTBhMzhcdTBhMTVcdTBhM2ZcdTBhNzBcdTBhMWYiLHNzOiIlZCBcdTBhMzhcdTBhMTVcdTBhM2ZcdTBhNzBcdTBhMWYiLG06Ilx1MGEwN1x1MGExNSBcdTBhMmVcdTBhM2ZcdTBhNzBcdTBhMWYiLG1tOiIlZCBcdTBhMmVc''@;'; put 'put ''dTBhM2ZcdTBhNzBcdTBhMWYiLGg6Ilx1MGEwN1x1MGE3MVx1MGExNSBcdTBhMThcdTBhNzBcdTBhMWZcdTBhM2UiLGhoOiIlZCBcdTBhMThcdTBhNzBcdTBhMWZcdTBhNDciLGQ6Ilx1MGEwN1x1MGE3MVx1MGExNSBcdTBhMjZcdTBhM2ZcdTBhMjgiLGRkOiIlZCBcdTBhMjZcdTBhM2ZcdTBh''@;'; put 'put ''MjgiLE06Ilx1MGEwN1x1MGE3MVx1MGExNSBcdTBhMmVcdTBhMzlcdTBhNDBcdTBhMjhcdTBhM2UiLE1NOiIlZCBcdTBhMmVcdTBhMzlcdTBhNDBcdTBhMjhcdTBhNDciLHk6Ilx1MGEwN1x1MGE3MVx1MGExNSBcdTBhMzhcdTBhM2VcdTBhMzIiLHl5OiIlZCBcdTBhMzhcdTBhM2VcdTBhMzIi''@;'; put 'put ''fSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwYTY3XHUwYTY4XHUwYTY5XHUwYTZhXHUwYTZiXHUwYTZjXHUwYTZkXHUwYTZlXHUwYTZmXHUwYTY2XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0u''@;'; put 'put ''cmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBhMzBcdTBhM2VcdTBhMjR8XHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwfFx1MGEyNlx1MGE0MVx1MGEyYVx1MGEzOVx1MGEzZlx1MGEzMHxcdTBhMzhcdTBhM2NcdTBhM2VcdTBhMmUvLG1l''@;'; put 'put ''cmlkaWVtSG91cjpmdW5jdGlvbihNLE8pe3JldHVybiAxMj09PU0mJihNPTApLCJcdTBhMzBcdTBhM2VcdTBhMjQiPT09Tz9NPDQ/TTpNKzEyOiJcdTBhMzhcdTBhMzVcdTBhNDdcdTBhMzAiPT09Tz9NOiJcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzAiPT09Tz9NPj0xMD9N''@;'; put 'put ''Ok0rMTI6Ilx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZSI9PT1PP00rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwYTMwXHUwYTNlXHUwYTI0IjpNPDEwPyJcdTBhMzhcdTBhMzVcdTBhNDdcdTBhMzAiOk08MTc/Ilx1MGEyNlx1MGE0MVx1MGEyYVx1''@;'; put 'put ''MGEzOVx1MGEzZlx1MGEzMCI6TTwyMD8iXHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlIjoiXHUwYTMwXHUwYTNlXHUwYTI0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sOTM2MTY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9InN0''@;'; put 'put ''eWN6ZVx1MDE0NF9sdXR5X21hcnplY19rd2llY2llXHUwMTQ0X21hal9jemVyd2llY19saXBpZWNfc2llcnBpZVx1MDE0NF93cnplc2llXHUwMTQ0X3BhXHUwMTdhZHppZXJuaWtfbGlzdG9wYWRfZ3J1ZHppZVx1MDE0NCIuc3BsaXQoIl8iKSxtPSJzdHljem5pYV9sdXRlZ29fbWFyY2Ffa3dp''@;'; put 'put ''ZXRuaWFfbWFqYV9jemVyd2NhX2xpcGNhX3NpZXJwbmlhX3dyemVcdTAxNWJuaWFfcGFcdTAxN2Fkemllcm5pa2FfbGlzdG9wYWRhX2dydWRuaWEiLnNwbGl0KCJfIiksbGU9Wy9ec3R5L2ksL15sdXQvaSwvXm1hci9pLC9ea3dpL2ksL15tYWovaSwvXmN6ZS9pLC9ebGlwL2ksL15zaWUvaSwv''@;'; put 'put ''Xndyei9pLC9ecGFcdTAxN2EvaSwvXmxpcy9pLC9eZ3J1L2ldO2Z1bmN0aW9uIE0oeil7cmV0dXJuIHolMTA8NSYmeiUxMD4xJiZ+fih6LzEwKSUxMCE9MX1mdW5jdGlvbiBPKHosSyxJKXt2YXIgaz16KyIgIjtzd2l0Y2goSSl7Y2FzZSJzcyI6cmV0dXJuIGsrKE0oeik/InNla3VuZHkiOiJz''@;'; put 'put ''ZWt1bmQiKTtjYXNlIm0iOnJldHVybiBLPyJtaW51dGEiOiJtaW51dFx1MDExOSI7Y2FzZSJtbSI6cmV0dXJuIGsrKE0oeik/Im1pbnV0eSI6Im1pbnV0Iik7Y2FzZSJoIjpyZXR1cm4gSz8iZ29kemluYSI6ImdvZHppblx1MDExOSI7Y2FzZSJoaCI6cmV0dXJuIGsrKE0oeik/ImdvZHppbnki''@;'; put 'put ''OiJnb2R6aW4iKTtjYXNlInd3IjpyZXR1cm4gaysoTSh6KT8idHlnb2RuaWUiOiJ0eWdvZG5pIik7Y2FzZSJNTSI6cmV0dXJuIGsrKE0oeik/Im1pZXNpXHUwMTA1Y2UiOiJtaWVzaVx1MDExOWN5Iik7Y2FzZSJ5eSI6cmV0dXJuIGsrKE0oeik/ImxhdGEiOiJsYXQiKX19YWUuZGVmaW5lTG9j''@;'; put 'put ''YWxlKCJwbCIse21vbnRoczpmdW5jdGlvbih6LEspe3JldHVybiB6Py9EIE1NTU0vLnRlc3QoSyk/bVt6Lm1vbnRoKCldOnhbei5tb250aCgpXTp4fSxtb250aHNTaG9ydDoic3R5X2x1dF9tYXJfa3dpX21hal9jemVfbGlwX3NpZV93cnpfcGFcdTAxN2FfbGlzX2dydSIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTpsZSx3ZWVrZGF5czoibmllZHppZWxhX3BvbmllZHppYVx1MDE0MmVrX3d0b3Jla19cdTAxNWJyb2RhX2N6d2FydGVrX3BpXHUwMTA1dGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJu''@;'; put 'put ''ZHpfcG9uX3d0X1x1MDE1YnJfY3p3X3B0X3NvYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTmRfUG5fV3RfXHUwMTVhcl9Del9QdF9TbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVki''@;'; put 'put ''LExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltEemlcdTAxNWIgb10gTFQiLG5leHREYXk6IltKdXRybyBvXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJl''@;'; put 'put ''dHVybiJbVyBuaWVkemllbFx1MDExOSBvXSBMVCI7Y2FzZSAyOnJldHVybiJbV2Ugd3RvcmVrIG9dIExUIjtjYXNlIDM6cmV0dXJuIltXIFx1MDE1YnJvZFx1MDExOSBvXSBMVCI7Y2FzZSA2OnJldHVybiJbVyBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1ddIGRkZGQgW29d''@;'; put 'put ''IExUIn19LGxhc3REYXk6IltXY3pvcmFqIG9dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgbmllZHppZWxcdTAxMTkgb10gTFQiO2Nhc2UgMzpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBcdTAx''@;'; put 'put ''NWJyb2RcdTAxMTkgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1cgemVzelx1MDE0MnldIGRkZGQgW29dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0''@;'; put 'put ''OiIlcyB0ZW11IixzOiJraWxrYSBzZWt1bmQiLHNzOk8sbTpPLG1tOk8saDpPLGhoOk8sZDoiMSBkemllXHUwMTQ0IixkZDoiJWQgZG5pIix3OiJ0eWR6aWVcdTAxNDQiLHd3Ok8sTToibWllc2lcdTAxMDVjIixNTTpPLHk6InJvayIseXk6T30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7''@;'; put 'put ''MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDMyNzUxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgicHQtYnIiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdv''@;'; put 'put ''X2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21p''@;'; put 'put ''bmdvX3NlZ3VuZGEtZmVpcmFfdGVyXHhlN2EtZmVpcmFfcXVhcnRhLWZlaXJhX3F1aW50YS1mZWlyYV9zZXh0YS1mZWlyYV9zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX3NlZ190ZXJfcXVhX3F1aV9zZXhfc1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJk''@;'; put 'put ''b18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtk''@;'; put 'put ''ZV0gTU1NTSBbZGVdIFlZWVkgW1x4ZTBzXSBISDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFtceGUwc10gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvamUgXHhlMHNdIExUIixuZXh0RGF5OiJbQW1hbmhceGUzIFx4ZTBzXSBMVCIsbmV4dFdlZWs6ImRkZGQg''@;'; put 'put ''W1x4ZTBzXSBMVCIsbGFzdERheToiW09udGVtIFx4ZTBzXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCl8fDY9PT10aGlzLmRheSgpPyJbXHhkYWx0aW1vXSBkZGRkIFtceGUwc10gTFQiOiJbXHhkYWx0aW1hXSBkZGRkIFtceGUwc10gTFQifSxzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbSAlcyIscGFzdDoiaFx4ZTEgJXMiLHM6InBvdWNvcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1bSBkaWEiLGRkOiIlZCBk''@;'; put 'put ''aWFzIixNOiJ1bSBtXHhlYXMiLE1NOiIlZCBtZXNlcyIseToidW0gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLGludmFsaWREYXRlOiJEYXRhIGludlx4ZTFsaWRhIn0pfShGKDE2Njc2KSl9LDU1MTM4OmZ1''@;'; put 'put ''bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgicHQiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8i''@;'; put 'put ''LnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVyXHhlN2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9TZXh0YS1m''@;'; put 'put ''ZWlyYV9TXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRG9tX1NlZ19UZXJfUXVhX1F1aV9TZXhfU1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9TXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbSJ9''@;'; put 'put ''LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSBceGUwc10gTFQiLG5leHREYXk6IltBbWFuaFx4ZTMgXHhlMHNdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMHNdIExUIixsYXN0RGF5OiJbT250ZW0gXHhlMHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8''@;'; put 'put ''Nj09PXRoaXMuZGF5KCk/IltceGRhbHRpbW9dIGRkZGQgW1x4ZTBzXSBMVCI6IltceGRhbHRpbWFdIGRkZGQgW1x4ZTBzXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixwYXN0OiJoXHhlMSAlcyIsczoic2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIs''@;'; put 'put ''bToidW0gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW1hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW0gZGlhIixkZDoiJWQgZGlhcyIsdzoidW1hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVtIG1ceGVhcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBhbm9zIn0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTc5Njg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8pe3ZhciB6PSIg''@;'; put 'put ''IjtyZXR1cm4obGUlMTAwPj0yMHx8bGU+PTEwMCYmbGUlMTAwPT0wKSYmKHo9IiBkZSAiKSxsZSt6K3tzczoic2VjdW5kZSIsbW06Im1pbnV0ZSIsaGg6Im9yZSIsZGQ6InppbGUiLHd3OiJzXHUwMTAzcHRcdTAxMDNtXHhlMm5pIixNTToibHVuaSIseXk6ImFuaSJ9W09dfWFlLmRlZmluZUxv''@;'; put 'put ''Y2FsZSgicm8iLHttb250aHM6ImlhbnVhcmllX2ZlYnJ1YXJpZV9tYXJ0aWVfYXByaWxpZV9tYWlfaXVuaWVfaXVsaWVfYXVndXN0X3NlcHRlbWJyaWVfb2N0b21icmllX25vaWVtYnJpZV9kZWNlbWJyaWUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imlhbi5fZmViLl9tYXJ0Ll9hcHIuX21h''@;'; put 'put ''aV9pdW4uX2l1bC5fYXVnLl9zZXB0Ll9vY3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkdW1pbmljXHUwMTAzX2x1bmlfbWFyXHUwMjFiaV9taWVyY3VyaV9qb2lfdmluZXJpX3NceGUybWJcdTAxMDN0XHUwMTAzIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6IkR1bV9MdW5fTWFyX01pZV9Kb2lfVmluX1NceGUybSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRHVfTHVfTWFfTWlfSm9fVmlfU1x4ZTIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlthemkgbGFdIExUIixuZXh0RGF5OiJbbVx4ZTJpbmUgbGFdIExUIixuZXh0V2VlazoiZGRkZCBbbGFdIExUIixsYXN0RGF5OiJbaWVyaSBs''@;'; put 'put ''YV0gTFQiLGxhc3RXZWVrOiJbZm9zdGFdIGRkZGQgW2xhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicGVzdGUgJXMiLHBhc3Q6IiVzIFx4ZWVuIHVybVx1MDEwMyIsczoiY1x4ZTJ0ZXZhIHNlY3VuZGUiLHNzOngsbToidW4gbWludXQiLG1tOngsaDoibyBvclx1''@;'; put 'put ''MDEwMyIsaGg6eCxkOiJvIHppIixkZDp4LHc6Im8gc1x1MDEwM3B0XHUwMTAzbVx4ZTJuXHUwMTAzIix3dzp4LE06Im8gbHVuXHUwMTAzIixNTTp4LHk6InVuIGFuIix5eTp4fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw4MTgyODpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rp''@;'; put 'put ''b24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKE8sUix6KXtyZXR1cm4ibSI9PT16P1I/Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCI6Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0MyI6TysiICIrZnVuY3Rpb24geChPLFIpe3ZhciB6PU8uc3Bs''@;'; put 'put ''aXQoIl8iKTtyZXR1cm4gUiUxMD09MSYmUiUxMDAhPTExP3pbMF06UiUxMD49MiYmUiUxMDw9NCYmKFIlMTAwPDEwfHxSJTEwMD49MjApP3pbMV06elsyXX0oe3NzOlI/Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNc''@;'; put 'put ''dTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0''@;'; put 'put ''NDNcdTA0M2RcdTA0MzQiLG1tOlI/Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMF9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIjoiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDQz''@;'; put 'put ''X1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0Yl9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGhoOiJcdTA0NDdcdTA0MzBcdTA0NDFfXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwX1x1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzZVx1MDQzMiIsZGQ6Ilx1MDQzNFx1MDQz''@;'; put 'put ''NVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NGZfXHUwNDM0XHUwNDNkXHUwNDM1XHUwNDM5Iix3dzoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzOF9cdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0''@;'; put 'put ''M2JcdTA0NGMiLE1NOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDMwX1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQzNVx1MDQzMiIseXk6Ilx1MDQzM1x1MDQzZVx1MDQzNF9cdTA0MzNcdTA0M2VcdTA0''@;'; put 'put ''MzRcdTA0MzBfXHUwNDNiXHUwNDM1XHUwNDQyIn1bel0sK08pfXZhciBsZT1bL15cdTA0NGZcdTA0M2RcdTA0MzIvaSwvXlx1MDQ0NFx1MDQzNVx1MDQzMi9pLC9eXHUwNDNjXHUwNDMwXHUwNDQwL2ksL15cdTA0MzBcdTA0M2ZcdTA0NDAvaSwvXlx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZd''@;'; put 'put ''L2ksL15cdTA0MzhcdTA0NGVcdTA0M2QvaSwvXlx1MDQzOFx1MDQ0ZVx1MDQzYi9pLC9eXHUwNDMwXHUwNDMyXHUwNDMzL2ksL15cdTA0NDFcdTA0MzVcdTA0M2QvaSwvXlx1MDQzZVx1MDQzYVx1MDQ0Mi9pLC9eXHUwNDNkXHUwNDNlXHUwNDRmL2ksL15cdTA0MzRcdTA0MzVcdTA0M2EvaV07''@;'; put 'put ''YWUuZGVmaW5lTG9jYWxlKCJydSIse21vbnRoczp7Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGZfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRmX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMF9cdTA0MzBcdTA0M2ZcdTA0''@;'; put 'put ''NDBcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNjXHUwNDMwXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGZfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1''@;'; put 'put ''MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJc''@;'; put 'put ''dTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQz''@;'; put 'put ''OFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0''@;'; put 'put ''NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0''@;'; put 'put ''NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MC5fXHUwNDMwXHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Zl9cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mi5fXHUwNDNl''@;'; put 'put ''XHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzEuX1x1MDQzNFx1MDQzNVx1MDQzYS4iLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0''@;'; put 'put ''M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1''@;'; put 'put ''MDQzMS5fXHUwNDM0XHUwNDM1XHUwNDNhLiIuc3BsaXQoIl8iKX0sd2Vla2RheXM6e3N0YW5kYWxvbmU6Ilx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVc''@;'; put 'put ''dTA0M2JcdTA0NGNcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQy''@;'; put 'put ''XHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0''@;'; put 'put ''M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0''@;'; put 'put ''NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MTJcdTA0MzJdID8oPzpcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhc''@;'; put 'put ''dTA0M2JcdTA0NDNcdTA0NGV8XHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDQzXHUwNDRlfFx1MDQ0ZFx1MDQ0Mlx1MDQ0Myk/ID9dID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDMyXHUwNDQxX1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQx''@;'; put 'put ''XHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzJcdTA0NDFfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNw''@;'; put 'put ''bGl0KCJfIiksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsbW9udGhzUmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDRmXHUwNDNkXHUwNDMyXC4/fFx1MDQ0NFx1MDQzNVx1MDQzMlx1''@;'; put 'put ''MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLj98XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0M2NcdTA0MzBcdTA0NDBcLj98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDMw''@;'; put 'put ''XHUwNDNmXHUwNDQwXC4/fFx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFwuP3xcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2JcLj98XHUwNDMwXHUwNDMy''@;'; put 'put ''XHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0MzJcdTA0MzNcLj98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wuP3xcdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZc''@;'; put 'put ''dTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2VcdTA0M2FcdTA0NDJcLj98XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wuP3xcdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBbXHUwNDRj''@;'; put 'put ''XHUwNDRmXXxcdTA0MzRcdTA0MzVcdTA0M2FcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NGZcdTA0M2RcdTA0MzJcLj98XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0Y1x1''@;'; put 'put ''MDQ0Zl18XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwP1wuP3xcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzY1x1MDQzMFx1MDQ0MFwuP3xcdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzBcdTA0M2ZcdTA0NDBcLj98XHUwNDNjXHUw''@;'; put 'put ''NDMwW1x1MDQzOVx1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkXC4/fFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzYlwuP3xcdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJc''@;'; put 'put ''dTA0MzA/fFx1MDQzMFx1MDQzMlx1MDQzM1wuP3xcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDI/XC4/fFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZd''@;'; put 'put ''fFx1MDQzZVx1MDQzYVx1MDQ0MlwuP3xcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC4/fFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzNFx1MDQzNVx1MDQz''@;'; put 'put ''YVwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzMFx1''@;'; put 'put ''MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzY1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGZcdTA0NGNdfFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0''@;'; put 'put ''Mlx1MDQzMD98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUw''@;'; put 'put ''NDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y10pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcLnxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC58XHUwNDNjXHUwNDMwXHUwNDQwW1x1MDQ0Mi5dfFx1MDQzMFx1MDQz''@;'; put 'put ''Zlx1MDQ0MFwufFx1MDQzY1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGYuXXxcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmLl18XHUwNDMwXHUwNDMyXHUwNDMzXC58XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wufFx1MDQzZVx1MDQz''@;'; put 'put ''YVx1MDQ0MlwufFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMT9cLnxcdTA0MzRcdTA0MzVcdTA0M2FcLikvaSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMz''@;'; put 'put ''LiwgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDMzLiwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDIxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDRmLCBcdTA0MzJdIExUIixuZXh0RGF5OiJbXHUwNDE3XHUwNDMwXHUwNDMyXHUwNDQyXHUwNDQw''@;'; put 'put ''XHUwNDMwLCBcdTA0MzJdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwLCBcdTA0MzJdIExUIixuZXh0V2VlazpmdW5jdGlvbihPKXtpZihPLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXkoKT8iW1x1MDQxMlx1MDQzZV0gZGRkZCwg''@;'; put 'put ''W1x1MDQzMl0gTFQiOiJbXHUwNDEyXSBkZGRkLCBbXHUwNDMyXSBMVCI7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzVcdTA0MzVdIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDE6''@;'; put 'put ''Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzhcdTA0MzldIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRc''@;'; put 'put ''dTA0NDNcdTA0NGVcdTA0NDlcdTA0NDNcdTA0NGVdIGRkZGQsIFtcdTA0MzJdIExUIn19LGxhc3RXZWVrOmZ1bmN0aW9uKE8pe2lmKE8ud2VlaygpPT09dGhpcy53ZWVrKCkpcmV0dXJuIDI9PT10aGlzLmRheSgpPyJbXHUwNDEyXHUwNDNlXSBkZGRkLCBbXHUwNDMyXSBMVCI6IltcdTA0MTJd''@;'; put 'put ''IGRkZGQsIFtcdTA0MzJdIExUIjtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzNV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJbXHUwNDEyIFx1MDQz''@;'; put 'put ''Zlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0Ylx1MDQzOV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0M1x1MDQ0ZV0gZGRkZCwgW1x1MDQzMl0gTFQifX0sc2FtZUVs''@;'; put 'put ''c2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM3ICVzIixwYXN0OiIlcyBcdTA0M2RcdTA0MzBcdTA0MzdcdTA0MzBcdTA0MzQiLHM6Ilx1MDQzZFx1MDQzNVx1MDQ0MVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQzZSBc''@;'; put 'put ''dTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOm0sbSxtbTptLGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6bSxkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOm0sdzoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmIix3dzptLE06Ilx1MDQz''@;'; put 'put ''Y1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0NiIsTU06bSx5OiJcdTA0MzNcdTA0M2VcdTA0MzQiLHl5Om19LG1lcmlkaWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQzOHxcdTA0NDNcdTA0NDJcdTA0NDBcdTA0MzB8XHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1''@;'; put 'put ''MDQzNVx1MDQ0MFx1MDQzMC9pLGlzUE06ZnVuY3Rpb24oTyl7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCkkLy50ZXN0KE8pfSxtZXJpZGllbTpmdW5jdGlvbihPLFIseil7cmV0dXJuIE88ND8iXHUwNDNkXHUwNDNlXHUw''@;'; put 'put ''NDQ3XHUwNDM4IjpPPDEyPyJcdTA0NDNcdTA0NDJcdTA0NDBcdTA0MzAiOk88MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzOXxcdTA0MzNcdTA0M2V8XHUw''@;'; put 'put ''NDRmKS8sb3JkaW5hbDpmdW5jdGlvbihPLFIpe3N3aXRjaChSKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOnJldHVybiBPKyItXHUwNDM5IjtjYXNlIkQiOnJldHVybiBPKyItXHUwNDMzXHUwNDNlIjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIE8rIi1cdTA0NGYiO2RlZmF1bHQ6cmV0dXJu''@;'; put 'put ''IE99fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw2MjE4ODpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0MVx1MDY0YVx1MDYyOFx1MDYzMVx1MDY0OFx1MDYz''@;'; put 'put ''MVx1MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyNlx1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyMVx1MDY1MCIsIlx1MDYyMlx1MDZhZlx1''@;'; put 'put ''MDYzM1x1MDY3ZCIsIlx1MDYzM1x1MDY0YVx1MDY3ZVx1MDY3ZFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyMlx1MDZhYVx1MDY3ZFx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDY4YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLG09''@;'; put 'put ''WyJcdTA2MjJcdTA2ODZcdTA2MzEiLCJcdTA2MzNcdTA2NDhcdTA2NDVcdTA2MzEiLCJcdTA2MjdcdTA2YjFcdTA2MjdcdTA2MzFcdTA2NDgiLCJcdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzkiLCJcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzMiLCJcdTA2MmNcdTA2NDVcdTA2MzkiLCJcdTA2ODdc''@;'; put 'put ''dTA2NDZcdTA2ODdcdTA2MzEiXTthZS5kZWZpbmVMb2NhbGUoInNkIix7bW9udGhzOngsbW9udGhzU2hvcnQ6eCx3ZWVrZGF5czptLHdlZWtkYXlzU2hvcnQ6bSx3ZWVrZGF5c01pbjptLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExM''@;'; put 'put ''OiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZFx1MDYwYyBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNVx1MDYyOFx1MDYyZHxcdTA2MzRcdTA2MjdcdTA2NDUvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuIlx1MDYzNFx1MDYy''@;'; put 'put ''N1x1MDY0NSI9PT1NfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08MTI/Ilx1MDYzNVx1MDYyOFx1MDYyZCI6Ilx1MDYzNFx1MDYyN1x1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjg0XSBMVCIsbmV4dERheToiW1x1MDYzM1x1MDY4MFx1MDYyN1x1MDZi''@;'; put 'put ''Ylx1MDY0YV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MjdcdTA2YjNcdTA2NGFcdTA2NDYgXHUwNjQ3XHUwNjQxXHUwNjJhXHUwNjRhIFx1MDYyYVx1MDY0YV0gTFQiLGxhc3REYXk6IltcdTA2YWFcdTA2MjdcdTA2NDRcdTA2NDdcdTA2NDddIExUIixsYXN0V2VlazoiW1x1MDZhZlx1MDYz''@;'; put 'put ''Mlx1MDYzMVx1MDY0YVx1MDY0NCBcdTA2NDdcdTA2NDFcdTA2MmFcdTA2NGFdIGRkZGQgW1x1MDYyYVx1MDY0YV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDY3ZVx1MDY0OFx1MDYyMSIscGFzdDoiJXMgXHUwNjI3XHUwNmIzIixzOiJcdTA2ODZcdTA2''@;'; put 'put ''NDZcdTA2MmYgXHUwNjMzXHUwNjRhXHUwNmFhXHUwNjQ2XHUwNjhhIixzczoiJWQgXHUwNjMzXHUwNjRhXHUwNmFhXHUwNjQ2XHUwNjhhIixtOiJcdTA2NDdcdTA2YWEgXHUwNjQ1XHUwNjQ2XHUwNjdkIixtbToiJWQgXHUwNjQ1XHUwNjQ2XHUwNjdkIixoOiJcdTA2NDdcdTA2YWEgXHUwNmFh''@;'; put 'put ''XHUwNjQ0XHUwNjI3XHUwNmFhIixoaDoiJWQgXHUwNmFhXHUwNjQ0XHUwNjI3XHUwNmFhIixkOiJcdTA2NDdcdTA2YWEgXHUwNjhmXHUwNjRhXHUwNjQ2XHUwNjQ3XHUwNjQ2IixkZDoiJWQgXHUwNjhmXHUwNjRhXHUwNjQ2XHUwNjQ3XHUwNjQ2IixNOiJcdTA2NDdcdTA2YWEgXHUwNjQ1XHUw''@;'; put 'put ''NjQ3XHUwNjRhXHUwNjQ2XHUwNjQ4IixNTToiJWQgXHUwNjQ1XHUwNjQ3XHUwNjRhXHUwNjQ2XHUwNjI3Iix5OiJcdTA2NDdcdTA2YWEgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgv''@;'; put 'put ''XHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw2NTYyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxv''@;'; put 'put ''Y2FsZSgic2UiLHttb250aHM6Im9cdTAxMTFcdTAxMTFhamFnZW1ceGUxbm51X2d1b3Z2YW1ceGUxbm51X25qdWtcdTAxMGRhbVx4ZTFubnVfY3VvXHUwMTRib21ceGUxbm51X21pZXNzZW1ceGUxbm51X2dlYXNzZW1ceGUxbm51X3N1b2lkbmVtXHhlMW5udV9ib3JnZW1ceGUxbm51X1x1MDEw''@;'; put 'put ''ZGFrXHUwMTBkYW1ceGUxbm51X2dvbGdnb3RtXHhlMW5udV9za1x4ZTFibWFtXHhlMW5udV9qdW92bGFtXHhlMW5udSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoib1x1MDExMVx1MDExMWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX1x1MDEwZGFrXHUwMTBkX2dvbGdfc2tc''@;'; put 'put ''eGUxYl9qdW92Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzb3RuYWJlYWl2aV92dW9zc1x4ZTFyZ2FfbWFcdTAxNGJcdTAxNGJlYlx4ZTFyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0X2JlYXJqYWRhdF9sXHhlMXZ2YXJkYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic290bl92dW9zX21h''@;'; put 'put ''XHUwMTRiX2dhc2tfZHVvcl9iZWFyX2xceGUxdiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic192X21fZ19kX2JfTCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiTU1NTSBELiBbYi5dIFlZWVkiLExMTDoi''@;'; put 'put ''TU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltvdG5lIHRpXSBMVCIsbmV4dERheToiW2lodHRpbiB0aV0gTFQiLG5leHRXZWVrOiJkZGRkIFt0aV0gTFQiLGxhc3REYXk6''@;'; put 'put ''Iltpa3RlIHRpXSBMVCIsbGFzdFdlZWs6IltvdmRkaXRdIGRkZGQgW3RpXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgZ2VhXHUwMTdlZXMiLHBhc3Q6Im1hXHUwMTRiaXQgJXMiLHM6Im1vYWRkZSBzZWt1bmRkYXQiLHNzOiIlZCBzZWt1bmRkYXQiLG06Im9r''@;'; put 'put ''dGEgbWludWh0YSIsbW06IiVkIG1pbnVodGF0IixoOiJva3RhIGRpaW1tdSIsaGg6IiVkIGRpaW1tdXQiLGQ6Im9rdGEgYmVhaXZpIixkZDoiJWQgYmVhaXZ2aXQiLE06Im9rdGEgbVx4ZTFubnUiLE1NOiIlZCBtXHhlMW51dCIseToib2t0YSBqYWhraSIseXk6IiVkIGphZ2l0In0sZGF5T2ZN''@;'; put 'put ''b250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDg3MTcyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgic2kiLHttb250aHM6Ilx1MGRhMlx1''@;'; put 'put ''MGRiMVx1MGRjMFx1MGRjZlx1MGRiYlx1MGRkMl9cdTBkYjRcdTBkZDlcdTBkYjZcdTBkYmJcdTBkYzBcdTBkY2ZcdTBkYmJcdTBkZDJfXHUwZGI4XHUwZGNmXHUwZGJiXHUwZGNhXHUwZGFkXHUwZGQ0X1x1MGQ4NVx1MGRiNFx1MGRjYVx1MjAwZFx1MGRiYlx1MGRkYVx1MGRiZFx1MGRjYV9c''@;'; put 'put ''dTBkYjhcdTBkZDBcdTBkYmFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGIxXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiZFx1MGRkMl9cdTBkODVcdTBkOWNcdTBkZGRcdTBkYzNcdTBkY2FcdTBkYWRcdTBkZDRfXHUwZGMzXHUwZGQwXHUwZGI0XHUwZGNhXHUwZGFkXHUwZGQwXHUwZGI4XHUwZGNh''@;'; put 'put ''XHUwZGI2XHUwZGJiXHUwZGNhX1x1MGQ5NFx1MGQ5YVx1MGRjYVx1MGRhZFx1MGRkZFx1MGRiNlx1MGRiYlx1MGRjYV9cdTBkYjFcdTBkZGNcdTBkYzBcdTBkZDBcdTBkYjhcdTBkY2FcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZGFmXHUwZGQ5XHUwZGMzXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2''@;'; put 'put ''XHUwZGJiXHUwZGNhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBkYTJcdTBkYjFfXHUwZGI0XHUwZGQ5XHUwZGI2X1x1MGRiOFx1MGRjZlx1MGRiYlx1MGRjYV9cdTBkODVcdTBkYjRcdTBkY2FfXHUwZGI4XHUwZGQwXHUwZGJhXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiMVx1MGRkMl9c''@;'; put 'put ''dTBkYTJcdTBkZDZcdTBkYmRcdTBkZDJfXHUwZDg1XHUwZDljXHUwZGRkX1x1MGRjM1x1MGRkMFx1MGRiNFx1MGRjYV9cdTBkOTRcdTBkOWFcdTBkY2FfXHUwZGIxXHUwZGRjXHUwZGMwXHUwZGQwX1x1MGRhZlx1MGRkOVx1MGRjM1x1MGRkMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwZDg5''@;'; put 'put ''XHUwZGJiXHUwZGQyXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRiM1x1MGRkNFx1MGRhZlx1MGRjZl9cdTBkODVcdTBkOWZcdTBkYzRcdTBkYmJcdTBkZDRcdTBkYzBcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGI2XHUwZGFmXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRi''@;'; put 'put ''Ylx1MGRjNFx1MGRjM1x1MGRjYVx1MGRiNFx1MGRhZFx1MGRkMlx1MGRiMVx1MGRjYVx1MGRhZlx1MGRjZl9cdTBkYzNcdTBkZDJcdTBkOWFcdTBkZDRcdTBkYmJcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGMzXHUwZGQ5XHUwZGIxXHUwZGMzXHUwZGQ0XHUwZGJiXHUwZGNmXHUwZGFmXHUwZGNm''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQ4OVx1MGRiYlx1MGRkMl9cdTBkYzNcdTBkYjNcdTBkZDRfXHUwZDg1XHUwZDlmX1x1MGRiNlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJcdTBkYzRfXHUwZGMzXHUwZGQyXHUwZDlhXHUwZGQ0X1x1MGRjM1x1MGRk''@;'; put 'put ''OVx1MGRiMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZDg5X1x1MGRjM19cdTBkODVfXHUwZGI2X1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYl9cdTBkYzNcdTBkZDJfXHUwZGMzXHUwZGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''ImEgaDptbSIsTFRTOiJhIGg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZIE1NTU0gRCIsTExMOiJZWVlZIE1NTU0gRCwgYSBoOm1tIixMTExMOiJZWVlZIE1NTU0gRCBbXHUwZGMwXHUwZGQwXHUwZGIxXHUwZGQyXSBkZGRkLCBhIGg6bW06c3MifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W1x1MGQ4NVx1MGRhZl0gTFRbXHUwZGE3XSIsbmV4dERheToiW1x1MGRjNFx1MGRkOVx1MGRhN10gTFRbXHUwZGE3XSIsbmV4dFdlZWs6ImRkZGQgTFRbXHUwZGE3XSIsbGFzdERheToiW1x1MGQ4YVx1MGRiYVx1MGRkYV0gTFRbXHUwZGE3XSIsbGFzdFdlZWs6IltcdTBkYjRcdTBkYzNcdTBk''@;'; put 'put ''ZDRcdTBkOWNcdTBkZDJcdTBkYmFdIGRkZGQgTFRbXHUwZGE3XSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTBkOWFcdTBkZDJcdTBkYjFcdTBkY2EiLHBhc3Q6IiVzXHUwZDlhXHUwZGE3IFx1MGRiNFx1MGRkOVx1MGRiYiIsczoiXHUwZGFkXHUwZGFkXHUwZGNh''@;'; put 'put ''XHUwZGI0XHUwZGJiIFx1MGQ5YVx1MGRkMlx1MGRjNFx1MGRkMlx1MGRiNFx1MGRiYSIsc3M6Ilx1MGRhZFx1MGRhZFx1MGRjYVx1MGRiNFx1MGRiYiAlZCIsbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0XHUwZGMwIixtbToiXHUwZGI4XHUwZGQy''@;'; put 'put ''XHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0ICVkIixoOiJcdTBkYjRcdTBkZDBcdTBkYmEiLGhoOiJcdTBkYjRcdTBkZDBcdTBkYmEgJWQiLGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMVx1MGRiYSIsZGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMSAlZCIsTToiXHUwZGI4XHUwZGNmXHUw''@;'; put 'put ''ZGMzXHUwZGJhIixNTToiXHUwZGI4XHUwZGNmXHUwZGMzICVkIix5OiJcdTBkYzBcdTBkYzNcdTBkYmIiLHl5OiJcdTBkYzBcdTBkYzNcdTBkYmIgJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9IFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMi8sb3JkaW5hbDpmdW5jdGlvbiht''@;'; put 'put ''KXtyZXR1cm4gbSsiIFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMiJ9LG1lcmlkaWVtUGFyc2U6L1x1MGRiNFx1MGRkOVx1MGRiYiBcdTBkYzBcdTBkYmJcdTBkZDR8XHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNHxcdTBkYjRcdTBkZDkuXHUwZGMwfFx1MGRiNC5cdTBkYzAu''@;'; put 'put ''Lyxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybiJcdTBkYjQuXHUwZGMwLiI9PT1tfHwiXHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNCI9PT1tfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPjExP00/Ilx1MGRiNC5cdTBkYzAuIjoiXHUwZGI0XHUwZGMzXHUw''@;'; put 'put ''ZGNhIFx1MGRjMFx1MGRiYlx1MGRkNCI6TT8iXHUwZGI0XHUwZGQ5Llx1MGRjMC4iOiJcdTBkYjRcdTBkZDlcdTBkYmIgXHUwZGMwXHUwZGJiXHUwZGQ0In19KX0oRigxNjY3NikpfSw5OTk2NjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iamFu''@;'; put 'put ''dVx4ZTFyX2ZlYnJ1XHhlMXJfbWFyZWNfYXByXHhlZGxfbVx4ZTFqX2pceGZhbl9qXHhmYWxfYXVndXN0X3NlcHRlbWJlcl9va3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG09Imphbl9mZWJfbWFyX2Fwcl9tXHhlMWpfalx4ZmFuX2pceGZhbF9hdWdfc2VwX29rdF9u''@;'; put 'put ''b3ZfZGVjIi5zcGxpdCgiXyIpO2Z1bmN0aW9uIGxlKFIpe3JldHVybiBSPjEmJlI8NX1mdW5jdGlvbiBNKFIseixLLEkpe3ZhciBrPVIrIiAiO3N3aXRjaChLKXtjYXNlInMiOnJldHVybiB6fHxJPyJwXHhlMXIgc2VrXHhmYW5kIjoicFx4ZTFyIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJu''@;'; put 'put ''IHp8fEk/aysobGUoUik/InNla3VuZHkiOiJzZWtceGZhbmQiKTprKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIHo/Im1pblx4ZmF0YSI6ST8ibWluXHhmYXR1IjoibWluXHhmYXRvdSI7Y2FzZSJtbSI6cmV0dXJuIHp8fEk/aysobGUoUik/Im1pblx4ZmF0eSI6Im1pblx4ZmF0Iik6aysi''@;'; put 'put ''bWluXHhmYXRhbWkiO2Nhc2UiaCI6cmV0dXJuIHo/ImhvZGluYSI6ST8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6cmV0dXJuIHp8fEk/aysobGUoUik/ImhvZGlueSI6ImhvZFx4ZWRuIik6aysiaG9kaW5hbWkiO2Nhc2UiZCI6cmV0dXJuIHp8fEk/ImRlXHUwMTQ4IjoiZFx1MDE0OG9t''@;'; put 'put ''IjtjYXNlImRkIjpyZXR1cm4genx8ST9rKyhsZShSKT8iZG5pIjoiZG5ceGVkIik6aysiZFx1MDE0OGFtaSI7Y2FzZSJNIjpyZXR1cm4genx8ST8ibWVzaWFjIjoibWVzaWFjb20iO2Nhc2UiTU0iOnJldHVybiB6fHxJP2srKGxlKFIpPyJtZXNpYWNlIjoibWVzaWFjb3YiKTprKyJtZXNpYWNt''@;'; put 'put ''aSI7Y2FzZSJ5IjpyZXR1cm4genx8ST8icm9rIjoicm9rb20iO2Nhc2UieXkiOnJldHVybiB6fHxJP2srKGxlKFIpPyJyb2t5Ijoicm9rb3YiKTprKyJyb2ttaSJ9fWFlLmRlZmluZUxvY2FsZSgic2siLHttb250aHM6eCxtb250aHNTaG9ydDptLHdlZWtkYXlzOiJuZWRlXHUwMTNlYV9wb25k''@;'; put 'put ''ZWxva191dG9yb2tfc3RyZWRhX1x1MDE2MXR2cnRva19waWF0b2tfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lX3BvX3V0X3N0X1x1MDE2MXRfcGlfc28iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3N0X1x1MDE2MXRfcGlfc28iLnNwbGl0KCJfIiksbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RuZXMgb10gTFQiLG5leHREYXk6''@;'; put 'put ''Ilt6YWp0cmEgb10gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3YgbmVkZVx1MDEzZXUgb10gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlt2XSBkZGRkIFtvXSBMVCI7Y2FzZSAzOnJldHVybiJbdiBzdHJlZHUgb10gTFQiO2Nhc2Ug''@;'; put 'put ''NDpyZXR1cm4iW3ZvIFx1MDE2MXR2cnRvayBvXSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwaWF0b2sgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW3Ygc29ib3R1IG9dIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhIG9dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtj''@;'; put 'put ''YXNlIDA6cmV0dXJuIlttaW51bFx4ZmEgbmVkZVx1MDEzZXUgb10gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW21pbnVsXHhmZF0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW21pbnVsXHhmYSBzdHJlZHUgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW21pbnVsXHhm''@;'; put 'put ''YSBzb2JvdHUgb10gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByZWQgJXMiLHM6TSxzczpNLG06TSxtbTpNLGg6TSxoaDpNLGQ6TSxkZDpNLE0sTU06TSx5Ok0seXk6TX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxv''@;'; put 'put ''cmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDQyODc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9bGUrIiAiO3N3aXRjaChPKXtjYXNlInMiOnJldHVybiBNfHxSPyJuZWth''@;'; put 'put ''aiBzZWt1bmQiOiJuZWthaiBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJldHVybiB6KygxPT09bGU/TT8ic2VrdW5kbyI6InNla3VuZGkiOjI9PT1sZT9NfHxSPyJzZWt1bmRpIjoic2VrdW5kYWgiOmxlPDU/TXx8Uj8ic2VrdW5kZSI6InNla3VuZGFoIjoic2VrdW5kIik7Y2FzZSJtIjpyZXR1cm4g''@;'; put 'put ''TT8iZW5hIG1pbnV0YSI6ImVubyBtaW51dG8iO2Nhc2UibW0iOnJldHVybiB6KygxPT09bGU/TT8ibWludXRhIjoibWludXRvIjoyPT09bGU/TXx8Uj8ibWludXRpIjoibWludXRhbWEiOmxlPDU/TXx8Uj8ibWludXRlIjoibWludXRhbWkiOk18fFI/Im1pbnV0IjoibWludXRhbWkiKTtjYXNl''@;'; put 'put ''ImgiOnJldHVybiBNPyJlbmEgdXJhIjoiZW5vIHVybyI7Y2FzZSJoaCI6cmV0dXJuIHorKDE9PT1sZT9NPyJ1cmEiOiJ1cm8iOjI9PT1sZT9NfHxSPyJ1cmkiOiJ1cmFtYSI6bGU8NT9NfHxSPyJ1cmUiOiJ1cmFtaSI6TXx8Uj8idXIiOiJ1cmFtaSIpO2Nhc2UiZCI6cmV0dXJuIE18fFI/ImVu''@;'; put 'put ''IGRhbiI6ImVuaW0gZG5lbSI7Y2FzZSJkZCI6cmV0dXJuIHorKDE9PT1sZT9NfHxSPyJkYW4iOiJkbmVtIjoyPT09bGU/TXx8Uj8iZG5pIjoiZG5ldm9tYSI6TXx8Uj8iZG5pIjoiZG5ldmkiKTtjYXNlIk0iOnJldHVybiBNfHxSPyJlbiBtZXNlYyI6ImVuaW0gbWVzZWNlbSI7Y2FzZSJNTSI6''@;'; put 'put ''cmV0dXJuIHorKDE9PT1sZT9NfHxSPyJtZXNlYyI6Im1lc2VjZW0iOjI9PT1sZT9NfHxSPyJtZXNlY2EiOiJtZXNlY2VtYSI6bGU8NT9NfHxSPyJtZXNlY2UiOiJtZXNlY2kiOk18fFI/Im1lc2VjZXYiOiJtZXNlY2kiKTtjYXNlInkiOnJldHVybiBNfHxSPyJlbm8gbGV0byI6ImVuaW0gbGV0''@;'; put 'put ''b20iO2Nhc2UieXkiOnJldHVybiB6KygxPT09bGU/TXx8Uj8ibGV0byI6ImxldG9tIjoyPT09bGU/TXx8Uj8ibGV0aSI6ImxldG9tYSI6bGU8NT9NfHxSPyJsZXRhIjoibGV0aSI6TXx8Uj8ibGV0IjoibGV0aSIpfX1hZS5kZWZpbmVMb2NhbGUoInNsIix7bW9udGhzOiJqYW51YXJfZmVicnVh''@;'; put 'put ''cl9tYXJlY19hcHJpbF9tYWpfanVuaWpfanVsaWpfYXZndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRlbGphX3BvbmVkZWxqZWtfdG9yZWtfc3JlZGFfXHUwMTBkZXRydGVrX3BldGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdG9yLl9zcmUuX1x1MDEwZGV0Ll9wZXQuX3NvYi4iLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3RvX3NyX1x1MDEwZGVfcGVfc28iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC4gTU0uIFlZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1N''@;'; put 'put ''TSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5lcyBvYl0gTFQiLG5leHREYXk6IltqdXRyaSBvYl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3ZdIFtuZWRl''@;'; put 'put ''bGpvXSBbb2JdIExUIjtjYXNlIDM6cmV0dXJuIlt2XSBbc3JlZG9dIFtvYl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3ZdIFtzb2JvdG9dIFtvYl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3ZdIGRkZGQgW29iXSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYWogb2Jd''@;'; put 'put ''IExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltwcmVqXHUwMTYxbmpvXSBbbmVkZWxqb10gW29iXSBMVCI7Y2FzZSAzOnJldHVybiJbcHJlalx1MDE2MW5qb10gW3NyZWRvXSBbb2JdIExUIjtjYXNlIDY6cmV0dXJuIltwcmVqXHUwMTYx''@;'; put 'put ''bmpvXSBbc29ib3RvXSBbb2JdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcmVqXHUwMTYxbmppXSBkZGRkIFtvYl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwMTBkZXogJXMiLHBhc3Q6InByZWQgJXMiLHM6eCxzczp4LG06''@;'; put 'put ''eCxtbTp4LGg6eCxoaDp4LGQ6eCxkZDp4LE06eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sMTUyOTE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJzcSIse21vbnRoczoiSmFuYXJfU2hrdXJ0X01hcnNfUHJpbGxfTWFqX1FlcnNob3JfS29ycmlrX0d1c2h0X1NodGF0b3JfVGV0b3JfTlx4ZWJudG9yX0RoamV0b3IiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9TaGtfTWFyX1ByaV9N''@;'; put 'put ''YWpfUWVyX0tvcl9HdXNfU2h0X1RldF9OXHhlYm5fRGhqIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJFIERpZWxfRSBIXHhlYm5ceGViX0UgTWFydFx4ZWJfRSBNXHhlYnJrdXJceGViX0UgRW5qdGVfRSBQcmVtdGVfRSBTaHR1blx4ZWIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRGllX0hc''@;'; put 'put ''eGVibl9NYXJfTVx4ZWJyX0Vual9QcmVfU2h0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEX0hfTWFfTVx4ZWJfRV9QX1NoIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxtZXJpZGllbVBhcnNlOi9QRHxNRC8saXNQTTpmdW5jdGlvbihtKXtyZXR1cm4iTSI9PT1tLmNoYXJB''@;'; put 'put ''dCgwKX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMj8iUEQiOiJNRCJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwg''@;'; put 'put ''RCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1NvdCBuXHhlYl0gTFQiLG5leHREYXk6IltOZXNceGViciBuXHhlYl0gTFQiLG5leHRXZWVrOiJkZGRkIFtuXHhlYl0gTFQiLGxhc3REYXk6IltEamUgblx4ZWJdIExUIixsYXN0V2VlazoiZGRkZCBbZSBrYWx1YXIgblx4''@;'; put 'put ''ZWJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuXHhlYiAlcyIscGFzdDoiJXMgbVx4ZWIgcGFyXHhlYiIsczoiZGlzYSBzZWtvbmRhIixzczoiJWQgc2Vrb25kYSIsbToibmpceGViIG1pbnV0XHhlYiIsbW06IiVkIG1pbnV0YSIsaDoibmpceGViIG9yXHhlYiIs''@;'; put 'put ''aGg6IiVkIG9yXHhlYiIsZDoibmpceGViIGRpdFx4ZWIiLGRkOiIlZCBkaXRceGViIixNOiJualx4ZWIgbXVhaiIsTU06IiVkIG11YWoiLHk6Im5qXHhlYiB2aXQiLHl5OiIlZCB2aXRlIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2Rv''@;'; put 'put ''dzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDM3NjAzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXt3b3Jkczp7c3M6WyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzAiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNc''@;'; put 'put ''dTA0M2RcdTA0MzRcdTA0MzUiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiXSxtOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1''@;'; put 'put ''MDQzMyBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiXSxtbTpbIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCJdLGg6WyJc''@;'; put 'put ''dTA0NThcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDQyIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQzMCJdLGhoOlsiXHUwNDQxXHUwNDMwXHUwNDQyIiwiXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDMw''@;'; put 'put ''IiwiXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDM4Il0sZDpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0MzRcdTA0MzBcdTA0M2QiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIl0sZGQ6WyJcdTA0MzRcdTA0''@;'; put 'put ''MzBcdTA0M2QiLCJcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzAiLCJcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzAiXSxNOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1''@;'; put 'put ''MDQzMyBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiXSxNTTpbIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzOCJdLHk6WyJc''@;'; put 'put ''dTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0NDMgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDM1IFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzNSJdLHl5OlsiXHUwNDMzXHUwNDNlXHUwNDM0XHUw''@;'; put 'put ''NDM4XHUwNDNkXHUwNDQzIiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM1IiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIGxlJTEwPj0xJiZsZSUxMDw9NCYmKGxl''@;'; put 'put ''JTEwMDwxMHx8bGUlMTAwPj0yMCk/bGUlMTA9PTE/TVswXTpNWzFdOk1bMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihsZSxNLE8sUil7dmFyIEssej14LndvcmRzW09dO3JldHVybiAxPT09Ty5sZW5ndGg/InkiPT09TyYmTT8iXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDMwIFx1MDQzM1x1''@;'; put 'put ''MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCI6Unx8TT96WzBdOnpbMV06KEs9eC5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKGxlLHopLCJ5eSI9PT1PJiZNJiYiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIj09PUs/bGUrIiBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0Mzhc''@;'; put 'put ''dTA0M2RcdTA0MzAiOmxlKyIgIitLKX19O2FlLmRlZmluZUxvY2FsZSgic3ItY3lybCIse21vbnRoczoiXHUwNDU4XHUwNDMwXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwX1x1MDQ0NFx1MDQzNVx1MDQzMVx1MDQ0MFx1MDQ0M1x1MDQzMFx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJf''@;'; put 'put ''XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0''@;'; put 'put ''MzFcdTA0MzBcdTA0NDBfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzZFx1MDQzZVx1MDQzMlx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzMFx1MDQ0MF9cdTA0MzRcdTA0MzVcdTA0NDZcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDAiLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzU2hvcnQ6Ilx1MDQ1OFx1MDQzMFx1MDQzZC5fXHUwNDQ0XHUwNDM1XHUwNDMxLl9cdTA0M2NcdTA0MzBcdTA0NDAuX1x1MDQzMFx1MDQzZlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThcdTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMy''@;'; put 'put ''XHUwNDMzLl9cdTA0NDFcdTA0MzVcdTA0M2YuX1x1MDQzZVx1MDQzYVx1MDQ0Mi5fXHUwNDNkXHUwNDNlXHUwNDMyLl9cdTA0MzRcdTA0MzVcdTA0NDYuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQz''@;'; put 'put ''MF9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzBcdTA0M2FfXHUwNDQzXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NDBcdTA0NDJcdTA0''@;'; put 'put ''MzBcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzQuX1x1MDQzZlx1MDQzZVx1MDQzZC5fXHUwNDQzXHUwNDQyXHUwNDNlLl9c''@;'; put 'put ''dTA0NDFcdTA0NDBcdTA0MzUuX1x1MDQ0N1x1MDQzNVx1MDQ0Mi5fXHUwNDNmXHUwNDM1XHUwNDQyLl9cdTA0NDFcdTA0NDNcdTA0MzEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzVfXHUwNDNmXHUwNDNlX1x1MDQ0M1x1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUw''@;'; put 'put ''NDM1X1x1MDQzZlx1MDQzNV9cdTA0NDFcdTA0NDMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELiBNLiBZWVlZLiIsTEw6IkQuIE1NTU0gWVlZWS4iLExMTDoiRC4gTU1NTSBZWVlZLiBIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMFx1MDQ0MSBcdTA0NDNdIExUIixuZXh0RGF5OiJbXHUwNDQxXHUwNDQzXHUwNDQyXHUwNDQwXHUwNDMwIFx1MDQ0M10gTFQiLG5leHRXZWVrOmZ1bmN0aW9u''@;'; put 'put ''KCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQ0M10gW1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQ0M10gW1x1MDQ0M10gTFQiO2Nhc2UgMzpyZXR1cm4iW1x1MDQ0M10gW1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M10gW1x1MDQ0M10gTFQi''@;'; put 'put ''O2Nhc2UgNjpyZXR1cm4iW1x1MDQ0M10gW1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0M10gW1x1MDQ0M10gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW1x1MDQ0M10gZGRkZCBbXHUwNDQzXSBMVCJ9fSxsYXN0RGF5OiJbXHUwNDU4XHUwNDQzXHUw''@;'; put 'put ''NDQ3XHUwNDM1IFx1MDQ0M10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDM1XSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0''@;'; put 'put ''NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzM10gW1x1MDQ0M1x1MDQ0Mlx1MDQzZVx1MDQ0MFx1''@;'; put 'put ''MDQzYVx1MDQzMF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM1XSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0NDdc''@;'; put 'put ''dTA0MzVcdTA0NDJcdTA0MzJcdTA0NDBcdTA0NDJcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzM10gW1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQzYVx1MDQzMF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUw''@;'; put 'put ''NDNlXHUwNDQ4XHUwNDNiXHUwNDM1XSBbXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDM1XSBbXHUwNDQzXSBMVCJdW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzdcdTA0MzAgJXMiLHBhc3Q6Ilx1MDQzZlx1MDQ0MFx1MDQz''@;'; put 'put ''NSAlcyIsczoiXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhXHUwNDNlIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsc3M6eC50cmFuc2xhdGUsbTp4LnRyYW5zbGF0ZSxtbTp4LnRyYW5zbGF0ZSxoOngudHJhbnNsYXRlLGhoOngu''@;'; put 'put ''dHJhbnNsYXRlLGQ6eC50cmFuc2xhdGUsZGQ6eC50cmFuc2xhdGUsTTp4LnRyYW5zbGF0ZSxNTTp4LnRyYW5zbGF0ZSx5OngudHJhbnNsYXRlLHl5OngudHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9''@;'; put 'put ''fSl9KEYoMTY2NzYpKX0sODA0NTA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9e3dvcmRzOntzczpbInNla3VuZGEiLCJzZWt1bmRlIiwic2VrdW5kaSJdLG06WyJqZWRhbiBtaW51dCIsImplZG5vZyBtaW51dGEiXSxtbTpbIm1pbnV0IiwibWlu''@;'; put 'put ''dXRhIiwibWludXRhIl0saDpbImplZGFuIHNhdCIsImplZG5vZyBzYXRhIl0saGg6WyJzYXQiLCJzYXRhIiwic2F0aSJdLGQ6WyJqZWRhbiBkYW4iLCJqZWRub2cgZGFuYSJdLGRkOlsiZGFuIiwiZGFuYSIsImRhbmEiXSxNOlsiamVkYW4gbWVzZWMiLCJqZWRub2cgbWVzZWNhIl0sTU06WyJt''@;'; put 'put ''ZXNlYyIsIm1lc2VjYSIsIm1lc2VjaSJdLHk6WyJqZWRudSBnb2RpbnUiLCJqZWRuZSBnb2RpbmUiXSx5eTpbImdvZGludSIsImdvZGluZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKGxlLE0pe3JldHVybiBsZSUxMD49MSYmbGUlMTA8PTQmJihsZSUxMDA8''@;'; put 'put ''MTB8fGxlJTEwMD49MjApP2xlJTEwPT0xP01bMF06TVsxXTpNWzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24obGUsTSxPLFIpe3ZhciBLLHo9eC53b3Jkc1tPXTtyZXR1cm4gMT09PU8ubGVuZ3RoPyJ5Ij09PU8mJk0/ImplZG5hIGdvZGluYSI6Unx8TT96WzBdOnpbMV06KEs9eC5jb3JyZWN0R3Jh''@;'; put 'put ''bW1hdGljYWxDYXNlKGxlLHopLCJ5eSI9PT1PJiZNJiYiZ29kaW51Ij09PUs/bGUrIiBnb2RpbmEiOmxlKyIgIitLKX19O2FlLmRlZmluZUxvY2FsZSgic3IiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25v''@;'; put 'put ''dmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFr''@;'; put 'put ''X3NyZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyZS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuIE0uIFlZWVkuIixMTDoiRC4gTU1NTSBZWVlZLiIsTExMOiJELiBNTU1NIFlZWVkuIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWS4gSDptbSJ9LGNhbGVuZGFyOntz''@;'; put 'put ''YW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1''@;'; put 'put ''cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZSB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIltwcm9cdTAxNjFsZV0gW25lZGVsamVdIFt1XSBMVCIs''@;'; put 'put ''Iltwcm9cdTAxNjFsb2ddIFtwb25lZGVsamthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbdXRvcmthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzcmVkZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW1x1MDEwZGV0dnJ0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwZXRrYV0g''@;'; put 'put ''W3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByZSAlcyIsczoibmVrb2xpa28gc2VrdW5kaSIsc3M6eC50cmFuc2xhdGUsbTp4LnRyYW5zbGF0ZSxtbTp4''@;'; put 'put ''LnRyYW5zbGF0ZSxoOngudHJhbnNsYXRlLGhoOngudHJhbnNsYXRlLGQ6eC50cmFuc2xhdGUsZGQ6eC50cmFuc2xhdGUsTTp4LnRyYW5zbGF0ZSxNTTp4LnRyYW5zbGF0ZSx5OngudHJhbnNsYXRlLHl5OngudHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9y''@;'; put 'put ''ZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sMzAzODM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJzcyIse21vbnRoczoiQmhpbWJpZHZ3YW5lX0luZGxvdmFuYV9JbmRsb3YnbGVua2h1bHVf''@;'; put 'put ''TWFiYXNhX0lua2h3ZWtod2V0aV9JbmhsYWJhX0tob2x3YW5lX0luZ2NpX0lueW9uaV9JbXBoYWxhX0x3ZXRpX0luZ29uZ29uaSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiQmhpX0luYV9JbnVfTWFiX0lua19JbmhfS2hvX0lnY19JbnlfSW1wX0x3ZV9JZ28iLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXM6Ikxpc29udGZvX1Vtc29tYnVsdWtvX0xlc2liaWxpX0xlc2l0c2F0ZnVfTGVzaW5lX0xlc2lobGFudV9VbWdjaWJlbG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGlzX1VtYl9Mc2JfTGVzX0xzaV9Mc2hfVW1nIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9Vc19MYl9MdF9M''@;'; put 'put ''c19MaF9VZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZ''@;'; put 'put ''WSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW05hbXVobGEgbmdhXSBMVCIsbmV4dERheToiW0t1c2FzYSBuZ2FdIExUIixuZXh0V2VlazoiZGRkZCBbbmdhXSBMVCIsbGFzdERheToiW0l0b2xvIG5nYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZWxpcGhlbGlsZV0gW25nYV0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5nYSAlcyIscGFzdDoid2VudGVrYSBuZ2EgJXMiLHM6ImVtaXp1endhbmEgbG9tY2FuZSIsc3M6IiVkIG16dXp3YW5hIixtOiJ1bXp1enUiLG1tOiIlZCBlbWl6dXp1IixoOiJsaWhvcmEiLGhoOiIlZCBlbWFob3JhIixkOiJsaWxh''@;'; put 'put ''bmdhIixkZDoiJWQgZW1hbGFuZ2EiLE06ImlueWFuZ2EiLE1NOiIlZCB0aW55YW5nYSIseToidW1ueWFrYSIseXk6IiVkIGltaW55YWthIn0sbWVyaWRpZW1QYXJzZTovZWt1c2VuaXxlbWluaXxlbnRzYW1iYW1hfGVidXN1a3UvLG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08''@;'; put 'put ''MTE/ImVrdXNlbmkiOm08MTU/ImVtaW5pIjptPDE5PyJlbnRzYW1iYW1hIjoiZWJ1c3VrdSJ9LG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwiZWt1c2VuaSI9PT1sZT9tOiJlbWluaSI9PT1sZT9tPj0xMT9tOm0rMTI6ImVudHNhbWJhbWEiPT09bGV8''@;'; put 'put ''fCJlYnVzdWt1Ij09PWxlPzA9PT1tPzA6bSsxMjp2b2lkIDB9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6IiVkIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwzNzIyMTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjthZS5kZWZpbmVMb2NhbGUoInN2Iix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1''@;'; put 'put ''bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic1x4ZjZuZGFnX21ceGU1bmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY2cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmNm5fbVx4ZTVuX3Rpc19vbnNfdG9yX2ZyZV9s''@;'; put 'put ''XHhmNnIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY2X21ceGU1X3RpX29uX3RvX2ZyX2xceGY2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBb''@;'; put 'put ''a2wuXSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSWRhZ10gTFQiLG5leHREYXk6IltJbW9yZ29uXSBMVCIsbGFzdERheToiW0ln''@;'; put 'put ''XHhlNXJdIExUIixuZXh0V2VlazoiW1BceGU1XSBkZGRkIExUIixsYXN0V2VlazoiW0ldIGRkZGRbc10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiJmXHhmNnIgJXMgc2VkYW4iLHM6Im5ceGU1Z3JhIHNla3VuZGVyIixzczoiJWQgc2VrdW5k''@;'; put 'put ''ZXIiLG06ImVuIG1pbnV0IixtbToiJWQgbWludXRlciIsaDoiZW4gdGltbWUiLGhoOiIlZCB0aW1tYXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2FyIixNOiJlbiBtXHhlNW5hZCIsTU06IiVkIG1ceGU1bmFkZXIiLHk6ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGlu''@;'; put 'put ''YWxQYXJzZTovXGR7MSwyfShcOmV8XDphKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyI6ZSI6MT09PWxlfHwyPT09bGU/IjphIjoiOmUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNTE3NDM6ZnVuY3Rpb24o''@;'; put 'put ''YXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJzdyIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNoaV9BcHJpbGlfTWVpX0p1bmlfSnVsYWlfQWdvc3RpX1NlcHRlbWJhX09rdG9iYV9Ob3ZlbWJhX0Rlc2VtYmEiLnNwbGl0KCJfIiksbW9u''@;'; put 'put ''dGhzU2hvcnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJKdW1hcGlsaV9KdW1hdGF0dV9KdW1hbm5lX0p1bWF0YW5vX0FsaGFtaXNpX0lqdW1hYV9KdW1hbW9zaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OiJKcGxfSnRhdF9Kbm5lX0p0YW5fQWxoX0lqbV9KbW9zIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJKMl9KM19KNF9KNV9BbF9Jal9KMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoaDptbSBBIixMVFM6IkhIOm1tOnNzIixMOiJERC5N''@;'; put 'put ''TS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltsZW8gc2FhXSBMVCIsbmV4dERheToiW2tlc2hvIHNhYV0gTFQiLG5leHRXZWVrOiJbd2lraSBpamF5b10gZGRk''@;'; put 'put ''ZCBbc2FhdF0gTFQiLGxhc3REYXk6IltqYW5hXSBMVCIsbGFzdFdlZWs6Ilt3aWtpIGlsaXlvcGl0YV0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGJhYWRheWUiLHBhc3Q6InRva2VhICVzIixzOiJoaXZpIHB1bmRlIixzczoic2VrdW5k''@;'; put 'put ''ZSAlZCIsbToiZGFraWthIG1vamEiLG1tOiJkYWtpa2EgJWQiLGg6InNhYSBsaW1vamEiLGhoOiJtYXNhYSAlZCIsZDoic2lrdSBtb2phIixkZDoic2lrdSAlZCIsTToibXdlemkgbW1vamEiLE1NOiJtaWV6aSAlZCIseToibXdha2EgbW1vamEiLHl5OiJtaWFrYSAlZCJ9LHdlZWs6e2Rvdzox''@;'; put 'put ''LGRveTo3fX0pfShGKDE2Njc2KSl9LDYzNTE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MGJlNyIsMjoiXHUwYmU4IiwzOiJcdTBiZTkiLDQ6Ilx1MGJlYSIsNToiXHUwYmViIiw2OiJcdTBiZWMiLDc6Ilx1MGJlZCIsODoiXHUwYmVl''@;'; put 'put ''Iiw5OiJcdTBiZWYiLDA6Ilx1MGJlNiJ9LG09eyJcdTBiZTciOiIxIiwiXHUwYmU4IjoiMiIsIlx1MGJlOSI6IjMiLCJcdTBiZWEiOiI0IiwiXHUwYmViIjoiNSIsIlx1MGJlYyI6IjYiLCJcdTBiZWQiOiI3IiwiXHUwYmVlIjoiOCIsIlx1MGJlZiI6IjkiLCJcdTBiZTYiOiIwIn07YWUuZGVm''@;'; put 'put ''aW5lTG9jYWxlKCJ0YSIse21vbnRoczoiXHUwYjljXHUwYmE5XHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhYVx1MGJiZlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWVcdTBiYmVcdTBiYjBcdTBiY2RcdTBiOWFcdTBiY2RfXHUwYjhmXHUwYmFhXHUwYmNkXHUwYmIw''@;'; put 'put ''XHUwYmIyXHUwYmNkX1x1MGJhZVx1MGJjN19cdTBiOWNcdTBiYzJcdTBiYTlcdTBiY2RfXHUwYjljXHUwYmMyXHUwYmIyXHUwYmM4X1x1MGI4Nlx1MGI5NVx1MGJiOFx1MGJjZFx1MGI5Zlx1MGJjZF9cdTBiOWFcdTBiYzZcdTBiYWFcdTBiY2RcdTBiOWZcdTBiYzZcdTBiYWVcdTBiY2RcdTBi''@;'; put 'put ''YWFcdTBiYjBcdTBiY2RfXHUwYjg1XHUwYjk1XHUwYmNkXHUwYjlmXHUwYmM3XHUwYmJlXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGJhOFx1MGJiNVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiOWZcdTBiYmZcdTBiOWFcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2QiLnNw''@;'; put 'put ''bGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGI5Y1x1MGJhOVx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWFcdTBiYmZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFlXHUwYmJlXHUwYmIwXHUwYmNkXHUwYjlhXHUwYmNkX1x1MGI4Zlx1MGJhYVx1MGJjZFx1MGJiMFx1''@;'; put 'put ''MGJiMlx1MGJjZF9cdTBiYWVcdTBiYzdfXHUwYjljXHUwYmMyXHUwYmE5XHUwYmNkX1x1MGI5Y1x1MGJjMlx1MGJiMlx1MGJjOF9cdTBiODZcdTBiOTVcdTBiYjhcdTBiY2RcdTBiOWZcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmFhXHUwYmNkXHUwYjlmXHUwYmM2XHUwYmFlXHUwYmNkXHUwYmFh''@;'; put 'put ''XHUwYmIwXHUwYmNkX1x1MGI4NVx1MGI5NVx1MGJjZFx1MGI5Zlx1MGJjN1x1MGJiZVx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiYThcdTBiYjVcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjlmXHUwYmJmXHUwYjlhXHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzOiJcdTBiOWVcdTBiYmVcdTBiYWZcdTBiYmZcdTBiYjFcdTBiY2RcdTBiYjFcdTBiYzFcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmE0XHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYjlmXHUwYmNkXHUwYjk1XHUwYmJmXHUw''@;'; put 'put ''YmI0XHUwYmFlXHUwYmM4X1x1MGI5YVx1MGJjNlx1MGJiNVx1MGJjZFx1MGJiNVx1MGJiZVx1MGJhZlx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYWFcdTBiYzFcdTBiYTRcdTBiYTlcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmI1XHUw''@;'; put 'put ''YmJmXHUwYmFmXHUwYmJlXHUwYmI0XHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJiNVx1MGJjNlx1MGJiM1x1MGJjZFx1MGJiM1x1MGJiZlx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiOWFcdTBiYTlcdTBiYmZcdTBi''@;'; put 'put ''OTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzgiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYjllXHUwYmJlXHUwYmFmXHUwYmJmXHUwYmIxXHUwYmMxX1x1MGJhNFx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJiM1x1MGJjZF9cdTBiOWFcdTBiYzZcdTBiYjVc''@;'; put 'put ''dTBiY2RcdTBiYjVcdTBiYmVcdTBiYWZcdTBiY2RfXHUwYmFhXHUwYmMxXHUwYmE0XHUwYmE5XHUwYmNkX1x1MGJiNVx1MGJiZlx1MGJhZlx1MGJiZVx1MGJiNFx1MGJhOVx1MGJjZF9cdTBiYjVcdTBiYzZcdTBiYjNcdTBiY2RcdTBiYjNcdTBiYmZfXHUwYjlhXHUwYmE5XHUwYmJmIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzTWluOiJcdTBiOWVcdTBiYmVfXHUwYmE0XHUwYmJmX1x1MGI5YVx1MGJjNl9cdTBiYWFcdTBiYzFfXHUwYmI1XHUwYmJmX1x1MGJiNVx1MGJjNl9cdTBiOWEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQv''@;'; put 'put ''TU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBiODdcdTBiYTlcdTBiY2RcdTBiYjFcdTBiYzFdIExUIixuZXh0RGF5OiJbXHUwYmE4XHUwYmJlXHUw''@;'; put 'put ''YmIzXHUwYmM4XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYmE4XHUwYmM3XHUwYmIxXHUwYmNkXHUwYmIxXHUwYmMxXSBMVCIsbGFzdFdlZWs6IltcdTBiOTVcdTBiOWZcdTBiYThcdTBiY2RcdTBiYTQgXHUwYmI1XHUwYmJlXHUwYmIwXHUwYmFlXHUwYmNkXSBkZGRk''@;'; put 'put ''LCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYjg3XHUwYmIyXHUwYmNkIixwYXN0OiIlcyBcdTBiYWVcdTBiYzFcdTBiYTlcdTBiY2QiLHM6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiOWFcdTBiYmZcdTBiYjIgXHUwYmI1XHUwYmJmXHUwYmE4XHUwYmJl''@;'; put 'put ''XHUwYjlmXHUwYmJmXHUwYjk1XHUwYmIzXHUwYmNkIixzczoiJWQgXHUwYmI1XHUwYmJmXHUwYmE4XHUwYmJlXHUwYjlmXHUwYmJmXHUwYjk1XHUwYmIzXHUwYmNkIixtOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmE4XHUwYmJmXHUwYmFlXHUwYmJmXHUwYjlmXHUwYmFlXHUwYmNkIixtbToi''@;'; put 'put ''JWQgXHUwYmE4XHUwYmJmXHUwYmFlXHUwYmJmXHUwYjlmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkIixoOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmFlXHUwYmEzXHUwYmJmIFx1MGJhOFx1MGJjN1x1MGJiMFx1MGJhZVx1MGJjZCIsaGg6IiVkIFx1MGJhZVx1MGJhM1x1MGJiZiBc''@;'; put 'put ''dTBiYThcdTBiYzdcdTBiYjBcdTBiYWVcdTBiY2QiLGQ6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYThcdTBiYmVcdTBiYjNcdTBiY2QiLGRkOiIlZCBcdTBiYThcdTBiYmVcdTBiOWZcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2QiLE06Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYWVcdTBiYmVc''@;'; put 'put ''dTBiYTRcdTBiYWVcdTBiY2QiLE1NOiIlZCBcdTBiYWVcdTBiYmVcdTBiYTRcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2QiLHk6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYjVcdTBiYjBcdTBiYzFcdTBiOWZcdTBiYWVcdTBiY2QiLHl5OiIlZCBcdTBiODZcdTBiYTNcdTBiY2RcdTBi''@;'; put 'put ''OWZcdTBiYzFcdTBiOTVcdTBiYjNcdTBiY2QifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwYmI1XHUwYmE0XHUwYmMxLyxvcmRpbmFsOmZ1bmN0aW9uKE0pe3JldHVybiBNKyJcdTBiYjVcdTBiYTRcdTBiYzEifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBs''@;'; put 'put ''YWNlKC9bXHUwYmU3XHUwYmU4XHUwYmU5XHUwYmVhXHUwYmViXHUwYmVjXHUwYmVkXHUwYmVlXHUwYmVmXHUwYmU2XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtP''@;'; put 'put ''XX0pfSxtZXJpZGllbVBhcnNlOi9cdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2R8XHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4fFx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOHxcdTBiYThcdTBiYTNcdTBiY2RcdTBiYWFcdTBiOTVcdTBiYjJcdTBiY2R8XHUwYjhlXHUwYmIxXHUw''@;'; put 'put ''YmNkXHUwYmFhXHUwYmJlXHUwYjlmXHUwYmMxfFx1MGJhZVx1MGJiZVx1MGJiMlx1MGJjOC8sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDI/IiBcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QiOk08Nj8iIFx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJjOCI6TTwx''@;'; put 'put ''MD8iIFx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOCI6TTwxND8iIFx1MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZCI6TTwxOD8iIFx1MGI4ZVx1MGJiMVx1MGJjZFx1MGJhYVx1MGJiZVx1MGI5Zlx1MGJjMSI6TTwyMj8iIFx1MGJhZVx1MGJiZVx1MGJiMlx1MGJjOCI6''@;'; put 'put ''IiBcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIj09PU8/TTwyP006TSsxMjoiXHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4Ij09''@;'; put 'put ''PU98fCJcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzgiPT09T3x8Ilx1MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZCI9PT1PJiZNPj0xMD9NOk0rMTJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDk4MTE4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlv''@;'; put 'put ''bihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgidGUiLHttb250aHM6Ilx1MGMxY1x1MGMyOFx1MGMzNVx1MGMzMFx1MGMzZl9cdTBjMmJcdTBjM2ZcdTBjMmNcdTBjNGRcdTBjMzBcdTBjMzVcdTBjMzBcdTBjM2ZfXHUwYzJlXHUwYzNlXHUwYzMwXHUwYzRkXHUwYzFhXHUwYzNm''@;'; put 'put ''X1x1MGMwZlx1MGMyYVx1MGM0ZFx1MGMzMFx1MGMzZlx1MGMzMlx1MGM0ZF9cdTBjMmVcdTBjNDdfXHUwYzFjXHUwYzQyXHUwYzI4XHUwYzRkX1x1MGMxY1x1MGM0MVx1MGMzMlx1MGM0OF9cdTBjMDZcdTBjMTdcdTBjMzhcdTBjNGRcdTBjMWZcdTBjNDFfXHUwYzM4XHUwYzQ2XHUwYzJhXHUw''@;'; put 'put ''YzRkXHUwYzFmXHUwYzQ2XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMwNVx1MGMxNVx1MGM0ZFx1MGMxZlx1MGM0Ylx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMjhcdTBjMzVcdTBjMDJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzIxXHUwYzNmXHUwYzM4XHUwYzQ2XHUwYzAyXHUwYzJjXHUw''@;'; put 'put ''YzMwXHUwYzRkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBjMWNcdTBjMjguX1x1MGMyYlx1MGMzZlx1MGMyY1x1MGM0ZFx1MGMzMC5fXHUwYzJlXHUwYzNlXHUwYzMwXHUwYzRkXHUwYzFhXHUwYzNmX1x1MGMwZlx1MGMyYVx1MGM0ZFx1MGMzMFx1MGMzZi5fXHUwYzJlXHUwYzQ3X1x1''@;'; put 'put ''MGMxY1x1MGM0Mlx1MGMyOFx1MGM0ZF9cdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDhfXHUwYzA2XHUwYzE3Ll9cdTBjMzhcdTBjNDZcdTBjMmFcdTBjNGQuX1x1MGMwNVx1MGMxNVx1MGM0ZFx1MGMxZlx1MGM0Yi5fXHUwYzI4XHUwYzM1Ll9cdTBjMjFcdTBjM2ZcdTBjMzhcdTBjNDYuIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGMwNlx1MGMyNlx1MGMzZlx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzhcdTBjNGJcdTBjMmVcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzJlXHUwYzAyXHUwYzE3XHUwYzMzXHUwYzM1XHUwYzNlXHUwYzMw''@;'; put 'put ''XHUwYzAyX1x1MGMyY1x1MGM0MVx1MGMyN1x1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMTdcdTBjNDFcdTBjMzBcdTBjNDFcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM2XHUwYzQxXHUwYzE1XHUwYzRkXHUwYzMwXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMzNlx1MGMy''@;'; put 'put ''OFx1MGMzZlx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBjMDZcdTBjMjZcdTBjM2ZfXHUwYzM4XHUwYzRiXHUwYzJlX1x1MGMyZVx1MGMwMlx1MGMxN1x1MGMzM19cdTBjMmNcdTBjNDFcdTBjMjdfXHUwYzE3XHUwYzQxXHUwYzMwXHUwYzQx''@;'; put 'put ''X1x1MGMzNlx1MGM0MVx1MGMxNVx1MGM0ZFx1MGMzMF9cdTBjMzZcdTBjMjhcdTBjM2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGMwNl9cdTBjMzhcdTBjNGJfXHUwYzJlXHUwYzAyX1x1MGMyY1x1MGM0MV9cdTBjMTdcdTBjNDFfXHUwYzM2XHUwYzQxX1x1MGMzNiIuc3BsaXQoIl8i''@;'; put 'put ''KSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBjMjhc''@;'; put 'put ''dTBjNDdcdTBjMjFcdTBjNDFdIExUIixuZXh0RGF5OiJbXHUwYzMwXHUwYzQ3XHUwYzJhXHUwYzQxXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYzI4XHUwYzNmXHUwYzI4XHUwYzRkXHUwYzI4XSBMVCIsbGFzdFdlZWs6IltcdTBjMTdcdTBjMjRdIGRkZGQsIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBjMzJcdTBjNGIiLHBhc3Q6IiVzIFx1MGMxNVx1MGM0ZFx1MGMzMFx1MGMzZlx1MGMyNFx1MGMwMiIsczoiXHUwYzE1XHUwYzRhXHUwYzI4XHUwYzRkXHUwYzI4XHUwYzNmIFx1MGMxNVx1MGM0ZFx1MGMzN1x1MGMyM1x1''@;'; put 'put ''MGMzZVx1MGMzMlx1MGM0MSIsc3M6IiVkIFx1MGMzOFx1MGM0Nlx1MGMxNVx1MGMyOFx1MGM0ZFx1MGMzMlx1MGM0MSIsbToiXHUwYzEyXHUwYzE1IFx1MGMyOFx1MGMzZlx1MGMyZVx1MGMzZlx1MGMzN1x1MGMwMiIsbW06IiVkIFx1MGMyOFx1MGMzZlx1MGMyZVx1MGMzZlx1MGMzN1x1MGMz''@;'; put 'put ''ZVx1MGMzMlx1MGM0MSIsaDoiXHUwYzEyXHUwYzE1IFx1MGMxN1x1MGMwMlx1MGMxZiIsaGg6IiVkIFx1MGMxN1x1MGMwMlx1MGMxZlx1MGMzMlx1MGM0MSIsZDoiXHUwYzEyXHUwYzE1IFx1MGMzMFx1MGM0Ylx1MGMxY1x1MGM0MSIsZGQ6IiVkIFx1MGMzMFx1MGM0Ylx1MGMxY1x1MGM0MVx1''@;'; put 'put ''MGMzMlx1MGM0MSIsTToiXHUwYzEyXHUwYzE1IFx1MGMyOFx1MGM0Nlx1MGMzMiIsTU06IiVkIFx1MGMyOFx1MGM0Nlx1MGMzMlx1MGMzMlx1MGM0MSIseToiXHUwYzEyXHUwYzE1IFx1MGMzOFx1MGMwMlx1MGMzNVx1MGMyNFx1MGM0ZFx1MGMzOFx1MGMzMFx1MGMwMiIseXk6IiVkIFx1MGMz''@;'; put 'put ''OFx1MGMwMlx1MGMzNVx1MGMyNFx1MGM0ZFx1MGMzOFx1MGMzMFx1MGMzZVx1MGMzMlx1MGM0MSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTBjMzUvLG9yZGluYWw6IiVkXHUwYzM1IixtZXJpZGllbVBhcnNlOi9cdTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBcdTBj''@;'; put 'put ''M2Z8XHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyfFx1MGMyZVx1MGMyN1x1MGM0ZFx1MGMyZlx1MGMzZVx1MGMzOVx1MGM0ZFx1MGMyOFx1MGMwMnxcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1''@;'; put 'put ''cm4gMTI9PT1tJiYobT0wKSwiXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIj09PWxlP208ND9tOm0rMTI6Ilx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMiI9PT1sZT9tOiJcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDIiPT09''@;'; put 'put ''bGU/bT49MTA/bTptKzEyOiJcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIiPT09bGU/bSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08ND8iXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIjptPDEw''@;'; put 'put ''PyJcdTBjMDlcdTBjMjZcdTBjMmZcdTBjMDIiOm08MTc/Ilx1MGMyZVx1MGMyN1x1MGM0ZFx1MGMyZlx1MGMzZVx1MGMzOVx1MGM0ZFx1MGMyOFx1MGMwMiI6bTwyMD8iXHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzAyIjoiXHUwYzMwXHUwYzNlXHUwYzI0''@;'; put 'put ''XHUwYzRkXHUwYzMwXHUwYzNmIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMjYyNzg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJ0ZXQiLHttb250aHM6IkphbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0Ficmls''@;'; put 'put ''X01haXVfSnVceGYxdV9KdWxsdV9BZ3VzdHVfU2V0ZW1icnVfT3V0dWJydV9Ob3ZlbWJydV9EZXplbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkRvbWluZ3Vf''@;'; put 'put ''U2VndW5kYV9UZXJzYV9LdWFydGFfS2ludGFfU2VzdGFfU2FiYWR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRvbV9TZWdfVGVyc19LdWFfS2ludF9TZXN0X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRG9fU2VnX1RlX0t1X0tpX1Nlc19TYSIuc3BsaXQoIl8iKSxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPaGluIGloYV0gTFQiLG5leHREYXk6''@;'; put 'put ''IltBYmFuIGloYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtpaGFdIExUIixsYXN0RGF5OiJbSG9yaXNlaWsgaWhhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImloYSAlcyIscGFzdDoiJXMgbGl1''@;'; put 'put ''YmEiLHM6InNlZ3VuZHUgYmFsdW4iLHNzOiJzZWd1bmR1ICVkIixtOiJtaW51dHUgaWRhIixtbToibWludXR1ICVkIixoOiJvcmFzIGlkYSIsaGg6Im9yYXMgJWQiLGQ6Imxvcm9uIGlkYSIsZGQ6Imxvcm9uICVkIixNOiJmdWxhbiBpZGEiLE1NOiJmdWxhbiAlZCIseToidGluYW4gaWRhIix5''@;'; put 'put ''eToidGluYW4gJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9''@;'; put 'put ''LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDM2OTg3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXswOiItXHUwNDQzXHUwNDNjIiwxOiItXHUwNDQzXHUwNDNjIiwyOiItXHUwNDRlXHUwNDNjIiwzOiItXHUwNDRlXHUwNDNjIiw0''@;'; put 'put ''OiItXHUwNDQzXHUwNDNjIiw1OiItXHUwNDQzXHUwNDNjIiw2OiItXHUwNDQzXHUwNDNjIiw3OiItXHUwNDQzXHUwNDNjIiw4OiItXHUwNDQzXHUwNDNjIiw5OiItXHUwNDQzXHUwNDNjIiwxMDoiLVx1MDQ0M1x1MDQzYyIsMTI6Ii1cdTA0NDNcdTA0M2MiLDEzOiItXHUwNDQzXHUwNDNjIiwy''@;'; put 'put ''MDoiLVx1MDQ0M1x1MDQzYyIsMzA6Ii1cdTA0NGVcdTA0M2MiLDQwOiItXHUwNDQzXHUwNDNjIiw1MDoiLVx1MDQ0M1x1MDQzYyIsNjA6Ii1cdTA0NDNcdTA0M2MiLDcwOiItXHUwNDQzXHUwNDNjIiw4MDoiLVx1MDQ0M1x1MDQzYyIsOTA6Ii1cdTA0NDNcdTA0M2MiLDEwMDoiLVx1MDQ0M1x1''@;'; put 'put ''MDQzYyJ9O2FlLmRlZmluZUxvY2FsZSgidGciLHttb250aHM6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzhfXHUwNDMwXHUw''@;'; put 'put ''NDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQzOVx1MDQzOF9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2Rc''@;'; put 'put ''dTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiks''@;'; put 'put ''c3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0''@;'; put 'put ''NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1''@;'; put 'put ''MDQzMVx1MDQ0MF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUw''@;'; put 'put ''NDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDRm''@;'; put 'put ''XHUwNDNhXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQzNFx1MDQ0M1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0NDFcdTA0MzVcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMx''@;'; put 'put ''XHUwNDM1X1x1MDQzZlx1MDQzMFx1MDQzZFx1MDRiN1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0YjdcdTA0NDNcdTA0M2NcdTA0NGFcdTA0MzBfXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQ0Zlx1MDQ0OFx1''@;'; put 'put ''MDQzMV9cdTA0MzRcdTA0NDhcdTA0MzFfXHUwNDQxXHUwNDQ4XHUwNDMxX1x1MDQ0N1x1MDQ0OFx1MDQzMV9cdTA0M2ZcdTA0NDhcdTA0MzFfXHUwNGI3XHUwNDQzXHUwNDNjX1x1MDQ0OFx1MDQzZFx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDRmXHUwNDQ4X1x1MDQzNFx1''@;'; put 'put ''MDQ0OF9cdTA0NDFcdTA0NDhfXHUwNDQ3XHUwNDQ4X1x1MDQzZlx1MDQ0OF9cdTA0YjdcdTA0M2NfXHUwNDQ4XHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxOFx1MDQzY1x1MDQ0MFx1MDRlZlx1MDQzNyBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixuZXh0RGF5OiJbXHUwNDI0XHUwNDMwXHUwNDQwXHUw''@;'; put 'put ''NDM0XHUwNDNlIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLGxhc3REYXk6IltcdTA0MTRcdTA0MzhcdTA0NDBcdTA0ZWZcdTA0MzcgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbmV4dFdlZWs6ImRkZGRbXHUwNDM4XSBbXHUwNGIzXHUwNDMwXHUwNDQ0''@;'; put 'put ''XHUwNDQyXHUwNDMwXHUwNDM4IFx1MDQzZVx1MDQ0Zlx1MDQzZFx1MDQzNFx1MDQzMCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixsYXN0V2VlazoiZGRkZFtcdTA0MzhdIFtcdTA0YjNcdTA0MzBcdTA0NDRcdTA0NDJcdTA0MzBcdTA0MzggXHUwNDMzXHUwNDQzXHUwNDM3''@;'; put 'put ''XHUwNDMwXHUwNDQ4XHUwNDQyXHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzMVx1MDQzMFx1MDQ0YVx1MDQzNFx1MDQzOCAlcyIscGFzdDoiJXMgXHUwNDNmXHUwNDM1XHUwNDQ4IixzOiJc''@;'; put 'put ''dTA0NGZcdTA0M2FcdTA0NDdcdTA0MzBcdTA0M2RcdTA0MzQgXHUwNDQxXHUwNDNlXHUwNDNkXHUwNDM4XHUwNDRmIixtOiJcdTA0NGZcdTA0M2EgXHUwNDM0XHUwNDMwXHUwNDliXHUwNDM4XHUwNDliXHUwNDMwIixtbToiJWQgXHUwNDM0XHUwNDMwXHUwNDliXHUwNDM4XHUwNDliXHUwNDMw''@;'; put 'put ''IixoOiJcdTA0NGZcdTA0M2EgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyIixkOiJcdTA0NGZcdTA0M2EgXHUwNDQwXHUwNGVmXHUwNDM3IixkZDoiJWQgXHUwNDQwXHUwNGVmXHUwNDM3IixNOiJcdTA0NGZcdTA0M2EgXHUwNDNjXHUw''@;'; put 'put ''NDNlXHUwNGIzIixNTToiJWQgXHUwNDNjXHUwNDNlXHUwNGIzIix5OiJcdTA0NGZcdTA0M2EgXHUwNDQxXHUwNDNlXHUwNDNiIix5eToiJWQgXHUwNDQxXHUwNDNlXHUwNDNiIn0sbWVyaWRpZW1QYXJzZTovXHUwNDQ4XHUwNDMwXHUwNDMxfFx1MDQ0MVx1MDQ0M1x1MDQzMVx1MDRiM3xcdTA0''@;'; put 'put ''NDBcdTA0ZWZcdTA0Mzd8XHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIDEyPT09bGUmJihsZT0wKSwiXHUwNDQ4XHUwNDMwXHUwNDMxIj09PU0/bGU8ND9sZTpsZSsxMjoiXHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIzIj09''@;'; put 'put ''PU0/bGU6Ilx1MDQ0MFx1MDRlZlx1MDQzNyI9PT1NP2xlPj0xMT9sZTpsZSsxMjoiXHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzIj09PU0/bGUrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihsZSxNLE8pe3JldHVybiBsZTw0PyJcdTA0NDhcdTA0MzBcdTA0MzEiOmxlPDExPyJc''@;'; put 'put ''dTA0NDFcdTA0NDNcdTA0MzFcdTA0YjMiOmxlPDE2PyJcdTA0NDBcdTA0ZWZcdTA0MzciOmxlPDE5PyJcdTA0MzFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0YjMiOiJcdTA0NDhcdTA0MzBcdTA0MzEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDNcdTA0M2N8XHUwNDRl''@;'; put 'put ''XHUwNDNjKS8sb3JkaW5hbDpmdW5jdGlvbihsZSl7cmV0dXJuIGxlKyh4W2xlXXx8eFtsZSUxMF18fHhbbGU+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSwzOTMyNTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijth''@;'; put 'put ''ZS5kZWZpbmVMb2NhbGUoInRoIix7bW9udGhzOiJcdTBlMjFcdTBlMDFcdTBlMjNcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTAxXHUwZTM4XHUwZTIxXHUwZTIwXHUwZTMyXHUwZTFlXHUwZTMxXHUwZTE5XHUwZTE4XHUwZTRjX1x1MGUyMVx1MGUzNVx1MGUxOVx1MGUzMlx1MGUwNFx1MGUyMV9c''@;'; put 'put ''dTBlNDBcdTBlMjFcdTBlMjlcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTFlXHUwZTI0XHUwZTI5XHUwZTIwXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUyMVx1MGUzNFx1MGUxNlx1MGUzOFx1MGUxOVx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMDFcdTBlMjNcdTBlMDFcdTBlMGVcdTBlMzJcdTBlMDRc''@;'; put 'put ''dTBlMjFfXHUwZTJhXHUwZTM0XHUwZTA3XHUwZTJiXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUwMVx1MGUzMVx1MGUxOVx1MGUyMlx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMTVcdTBlMzhcdTBlMjVcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTFlXHUwZTI0XHUwZTI4XHUwZTA4XHUwZTM0XHUwZTAx''@;'; put 'put ''XHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUxOFx1MGUzMVx1MGUxOVx1MGUyN1x1MGUzMlx1MGUwNFx1MGUyMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZTIxLlx1MGUwNC5fXHUwZTAxLlx1MGUxZS5fXHUwZTIxXHUwZTM1Llx1MGUwNC5fXHUwZTQwXHUwZTIxLlx1MGUyMi5fXHUwZTFl''@;'; put 'put ''Llx1MGUwNC5fXHUwZTIxXHUwZTM0Llx1MGUyMi5fXHUwZTAxLlx1MGUwNC5fXHUwZTJhLlx1MGUwNC5fXHUwZTAxLlx1MGUyMi5fXHUwZTE1Llx1MGUwNC5fXHUwZTFlLlx1MGUyMi5fXHUwZTE4Llx1MGUwNC4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUw''@;'; put 'put ''ZTJkXHUwZTMyXHUwZTE3XHUwZTM0XHUwZTE1XHUwZTIyXHUwZTRjX1x1MGUwOFx1MGUzMVx1MGUxOVx1MGUxN1x1MGUyM1x1MGU0Y19cdTBlMmRcdTBlMzFcdTBlMDdcdTBlMDRcdTBlMzJcdTBlMjNfXHUwZTFlXHUwZTM4XHUwZTE4X1x1MGUxZVx1MGUyNFx1MGUyYlx1MGUzMVx1MGUyYVx1''@;'; put 'put ''MGUxYVx1MGUxNFx1MGUzNV9cdTBlMjhcdTBlMzhcdTBlMDFcdTBlMjNcdTBlNGNfXHUwZTQwXHUwZTJhXHUwZTMyXHUwZTIzXHUwZTRjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGUyZFx1MGUzMlx1MGUxN1x1MGUzNFx1MGUxNVx1MGUyMlx1MGU0Y19cdTBlMDhcdTBlMzFcdTBl''@;'; put 'put ''MTlcdTBlMTdcdTBlMjNcdTBlNGNfXHUwZTJkXHUwZTMxXHUwZTA3XHUwZTA0XHUwZTMyXHUwZTIzX1x1MGUxZVx1MGUzOFx1MGUxOF9cdTBlMWVcdTBlMjRcdTBlMmJcdTBlMzFcdTBlMmFfXHUwZTI4XHUwZTM4XHUwZTAxXHUwZTIzXHUwZTRjX1x1MGU0MFx1MGUyYVx1MGUzMlx1MGUyM1x1''@;'; put 'put ''MGU0YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZTJkXHUwZTMyLl9cdTBlMDguX1x1MGUyZC5fXHUwZTFlLl9cdTBlMWVcdTBlMjQuX1x1MGUyOC5fXHUwZTJhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6''@;'; put 'put ''bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzIgSDptbSIsTExMTDoiXHUwZTI3XHUwZTMxXHUwZTE5ZGRkZFx1MGUxN1x1MGUzNVx1MGU0OCBEIE1NTU0gWVlZWSBcdTBlNDBcdTBlMjdcdTBlMjVc''@;'; put 'put ''dTBlMzIgSDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MGUwMVx1MGU0OFx1MGUyZFx1MGUxOVx1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwN3xcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDcvLGlzUE06ZnVuY3Rpb24o''@;'; put 'put ''bSl7cmV0dXJuIlx1MGUyYlx1MGUyNVx1MGUzMVx1MGUwN1x1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNyI9PT1tfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDEyPyJcdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhc''@;'; put 'put ''dTBlMjJcdTBlMDciOiJcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGUyN1x1MGUzMVx1MGUxOVx1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixu''@;'; put 'put ''ZXh0RGF5OiJbXHUwZTFlXHUwZTIzXHUwZTM4XHUwZTQ4XHUwZTA3XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLG5leHRXZWVrOiJkZGRkW1x1MGUyYlx1MGUxOVx1MGU0OVx1MGUzMiBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixsYXN0RGF5''@;'; put 'put ''OiJbXHUwZTQwXHUwZTIxXHUwZTM3XHUwZTQ4XHUwZTJkXHUwZTI3XHUwZTMyXHUwZTE5XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLGxhc3RXZWVrOiJbXHUwZTI3XHUwZTMxXHUwZTE5XWRkZGRbXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTQxXHUwZTI1''@;'; put 'put ''XHUwZTQ5XHUwZTI3IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGUyZFx1MGUzNVx1MGUwMSAlcyIscGFzdDoiJXNcdTBlMTdcdTBlMzVcdTBlNDhcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjciLHM6Ilx1MGU0NFx1''@;'; put 'put ''MGUyMVx1MGU0OFx1MGUwMVx1MGUzNVx1MGU0OFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsc3M6IiVkIFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsbToiMSBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLG1tOiIlZCBcdTBlMTlcdTBlMzJcdTBl''@;'; put 'put ''MTdcdTBlMzUiLGg6IjEgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUwZTA3IixoaDoiJWQgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUwZTA3IixkOiIxIFx1MGUyN1x1MGUzMVx1MGUxOSIsZGQ6IiVkIFx1MGUyN1x1MGUzMVx1MGUxOSIsdzoi''@;'; put 'put ''MSBcdTBlMmFcdTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLHd3OiIlZCBcdTBlMmFcdTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLE06IjEgXHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5IixNTToiJWQgXHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJk''@;'; put 'put ''XHUwZTE5Iix5OiIxIFx1MGUxYlx1MGUzNSIseXk6IiVkIFx1MGUxYlx1MGUzNSJ9fSl9KEYoMTY2NzYpKX0sNDM0ODU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6IidpbmppIiw1OiInaW5qaSIsODoiJ2luamkiLDcwOiInaW5qaSIsODA6''@;'; put 'put ''IidpbmppIiwyOiInbmppIiw3OiInbmppIiwyMDoiJ25qaSIsNTA6IiduamkiLDM6IidceGZjbmppIiw0OiInXHhmY25qaSIsMTAwOiInXHhmY25qaSIsNjoiJ25qeSIsOToiJ3VuankiLDEwOiIndW5qeSIsMzA6Iid1bmp5Iiw2MDoiJ3luankiLDkwOiIneW5qeSJ9O2FlLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgidGsiLHttb250aHM6Ilx4ZGRhbndhcl9GZXdyYWxfTWFydF9BcHJlbF9NYVx4ZmRfSVx4ZmR1bl9JXHhmZHVsX0F3Z3VzdF9TZW50XHhmZGFicl9Pa3RceGZkYWJyX05vXHhmZGFicl9EZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx4ZGRhbl9GZXdfTWFyX0Fwcl9NYVx4ZmRf''@;'; put 'put ''SVx4ZmRuX0lceGZkbF9Bd2dfU2VuX09rdF9Ob1x4ZmRfRGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJceGRkZWtcdTAxNWZlbmJlX0R1XHUwMTVmZW5iZV9TaVx1MDE1ZmVuYmVfXHhjN2FyXHUwMTVmZW5iZV9QZW5cdTAxNWZlbmJlX0FubmFfXHUwMTVlZW5iZSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJceGRkZWtfRHVcdTAxNWZfU2lcdTAxNWZfXHhjN2FyX1Blbl9Bbm5fXHUwMTVlZW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx4ZGRrX0RcdTAxNWZfU1x1MDE1Zl9ceGM3cl9Qbl9Bbl9cdTAxNWVuIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0i''@;'; put 'put ''LExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1Z1x4ZmNuIHNhZ2F0XSBMVCIsbmV4dERheToiW2VydGlyIHNhZ2F0''@;'; put 'put ''XSBMVCIsbmV4dFdlZWs6IltpbmRpa2ldIGRkZGQgW3NhZ2F0XSBMVCIsbGFzdERheToiW2RceGZjXHhmZG5dIExUIixsYXN0V2VlazoiW2dlXHhlN2VuXSBkZGRkIFtzYWdhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvXHUwMTQ4IixwYXN0OiIlcyBc''@;'; put 'put ''eGY2XHUwMTQ4IixzOiJiaXJuXHhlNFx4ZTdlIHNla3VudCIsbToiYmlyIG1pbnV0IixtbToiJWQgbWludXQiLGg6ImJpciBzYWdhdCIsaGg6IiVkIHNhZ2F0IixkOiJiaXIgZ1x4ZmNuIixkZDoiJWQgZ1x4ZmNuIixNOiJiaXIgYVx4ZmQiLE1NOiIlZCBhXHhmZCIseToiYmlyIFx4ZmR5bCIs''@;'; put 'put ''eXk6IiVkIFx4ZmR5bCJ9LG9yZGluYWw6ZnVuY3Rpb24obGUsTSl7c3dpdGNoKE0pe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRvIjpjYXNlIkREIjpyZXR1cm4gbGU7ZGVmYXVsdDppZigwPT09bGUpcmV0dXJuIGxlKyIndW5qeSI7dmFyIE89bGUlMTA7cmV0dXJuIGxlKyh4W09dfHx4W2xlJTEw''@;'; put 'put ''MC1PXXx8eFtsZT49MTAwPzEwMDpudWxsXSl9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw2ODE0ODpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInRsLXBoIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNv''@;'; put 'put ''X0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJM''@;'; put 'put ''aW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJf''@;'; put 'put ''IiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9u''@;'; put 'put ''ZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJMVCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJz''@;'; put 'put ''YSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNhbmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixoaDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06Imlz''@;'; put 'put ''YW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihtKXtyZXR1cm4gbX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNTk2MTY6ZnVuY3Rpb24o''@;'; put 'put ''YXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9InBhZ2hfd2FcdTIwMTlfY2hhXHUyMDE5X3dlal9sb1NfdmFnaF9qYXZfU29jaF9jaG9yZ2hfSHV0Ii5zcGxpdCgiXyIpO2Z1bmN0aW9uIE0oeixLLEksayl7dmFyIEU9ZnVuY3Rpb24gTyh6KXt2YXIgSz1NYXRoLmZs''@;'; put 'put ''b29yKHolMWUzLzEwMCksST1NYXRoLmZsb29yKHolMTAwLzEwKSxrPXolMTAsRT0iIjtyZXR1cm4gSz4wJiYoRSs9eFtLXSsidmF0bGgiKSxJPjAmJihFKz0oIiIhPT1FPyIgIjoiIikreFtJXSsibWFIIiksaz4wJiYoRSs9KCIiIT09RT8iICI6IiIpK3hba10pLCIiPT09RT8icGFnaCI6RX0o''@;'; put 'put ''eik7c3dpdGNoKEkpe2Nhc2Uic3MiOnJldHVybiBFKyIgbHVwIjtjYXNlIm1tIjpyZXR1cm4gRSsiIHR1cCI7Y2FzZSJoaCI6cmV0dXJuIEUrIiByZXAiO2Nhc2UiZGQiOnJldHVybiBFKyIgamFqIjtjYXNlIk1NIjpyZXR1cm4gRSsiIGphciI7Y2FzZSJ5eSI6cmV0dXJuIEUrIiBESVMifX1h''@;'; put 'put ''ZS5kZWZpbmVMb2NhbGUoInRsaCIse21vbnRoczoidGVyYVx1MjAxOSBqYXIgd2FcdTIwMTlfdGVyYVx1MjAxOSBqYXIgY2hhXHUyMDE5X3RlcmFcdTIwMTkgamFyIHdlal90ZXJhXHUyMDE5IGphciBsb1NfdGVyYVx1MjAxOSBqYXIgdmFnaF90ZXJhXHUyMDE5IGphciBqYXZfdGVyYVx1MjAx''@;'; put 'put ''OSBqYXIgU29jaF90ZXJhXHUyMDE5IGphciBjaG9yZ2hfdGVyYVx1MjAxOSBqYXIgSHV0X3RlcmFcdTIwMTkgamFyIHdhXHUyMDE5bWFIX3RlcmFcdTIwMTkgamFyIHdhXHUyMDE5bWFIIHdhXHUyMDE5X3RlcmFcdTIwMTkgamFyIHdhXHUyMDE5bWFIIGNoYVx1MjAxOSIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNTaG9ydDoiamFyIHdhXHUyMDE5X2phciBjaGFcdTIwMTlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFyIFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YVx1MjAxOW1hSF9qYXIgd2FcdTIwMTltYUggd2FcdTIwMTlfamFyIHdhXHUyMDE5bWFIIGNoYVx1MjAx''@;'; put 'put ''OSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9n''@;'; put 'put ''aGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0u''@;'; put 'put ''WVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRGFIamFqXSBMVCIsbmV4dERheToiW3dhXHUyMDE5bGVTXSBMVCIsbmV4dFdlZWs6IkxMTCIsbGFzdERheToiW3dh''@;'; put 'put ''XHUyMDE5SHVcdTIwMTldIExUIixsYXN0V2VlazoiTExMIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uIG0oeil7dmFyIEs9ejtyZXR1cm4tMSE9PXouaW5kZXhPZigiamFqIik/Sy5zbGljZSgwLC0zKSsibGVTIjotMSE9PXouaW5kZXhPZigiamFyIik/Sy5z''@;'; put 'put ''bGljZSgwLC0zKSsid2FRIjotMSE9PXouaW5kZXhPZigiRElTIik/Sy5zbGljZSgwLC0zKSsibmVtIjpLKyIgcElxIn0scGFzdDpmdW5jdGlvbiBsZSh6KXt2YXIgSz16O3JldHVybi0xIT09ei5pbmRleE9mKCJqYWoiKT9LLnNsaWNlKDAsLTMpKyJIdVx1MjAxOSI6LTEhPT16LmluZGV4T2Yo''@;'; put 'put ''ImphciIpP0suc2xpY2UoMCwtMykrIndlbiI6LTEhPT16LmluZGV4T2YoIkRJUyIpP0suc2xpY2UoMCwtMykrImJlbiI6SysiIHJldCJ9LHM6InB1UyBsdXAiLHNzOk0sbToid2FcdTIwMTkgdHVwIixtbTpNLGg6IndhXHUyMDE5IHJlcCIsaGg6TSxkOiJ3YVx1MjAxOSBqYWoiLGRkOk0sTToi''@;'; put 'put ''d2FcdTIwMTkgamFyIixNTTpNLHk6IndhXHUyMDE5IERJUyIseXk6TX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDI0MDQwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciB4PXsxOiInaW5jaSIsNToiJ2luY2kiLDg6IidpbmNpIiw3MDoiJ2luY2kiLDgwOiInaW5jaSIsMjoiJ25jaSIsNzoiJ25jaSIsMjA6IiduY2kiLDUwOiInbmNpIiwzOiInXHhmY25jXHhmYyIsNDoiJ1x4ZmNuY1x4ZmMiLDEwMDoiJ1x4ZmNuY1x4ZmMiLDY6IiduY1x1''@;'; put 'put ''MDEzMSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw2MDoiJ1x1MDEzMW5jXHUwMTMxIiw5MDoiJ1x1MDEzMW5jXHUwMTMxIn07YWUuZGVmaW5lTG9jYWxlKCJ0ciIse21vbnRoczoiT2Nha19cdTAxNWV1YmF0X01hcnRfTmlzYW5fTWF5XHUwMTMxc19IYXppcmFuX1RlbW11el9B''@;'; put 'put ''XHUwMTFmdXN0b3NfRXlsXHhmY2xfRWtpbV9LYXNcdTAxMzFtX0FyYWxcdTAxMzFrIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJPY2FfXHUwMTVldWJfTWFyX05pc19NYXlfSGF6X1RlbV9BXHUwMTFmdV9FeWxfRWtpX0thc19BcmEiLnNwbGl0KCJfIiksd2Vla2RheXM6IlBhemFyX1BhemFy''@;'; put 'put ''dGVzaV9TYWxcdTAxMzFfXHhjN2FyXHUwMTVmYW1iYV9QZXJcdTAxNWZlbWJlX0N1bWFfQ3VtYXJ0ZXNpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlBhel9QenRfU2FsX1x4Yzdhcl9QZXJfQ3VtX0NtdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiUHpfUHRfU2FfXHhjN2FfUGVfQ3Vf''@;'; put 'put ''Q3QiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU8MTI/Tz8iXHhmNlx4ZjYiOiJceGQ2XHhkNiI6Tz8iXHhmNnMiOiJceGQ2UyJ9LG1lcmlkaWVtUGFyc2U6L1x4ZjZceGY2fFx4ZDZceGQ2fFx4ZjZzfFx4ZDZTLyxpc1BNOmZ1bmN0aW9uKGxlKXtyZXR1''@;'; put 'put ''cm4iXHhmNnMiPT09bGV8fCJceGQ2UyI9PT1sZX0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVu''@;'; put 'put ''ZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FhdF0gTFQiLG5leHREYXk6Ilt5YXJcdTAxMzFuIHNhYXRdIExUIixuZXh0V2VlazoiW2dlbGVjZWtdIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNuXSBMVCIsbGFzdFdlZWs6IltnZVx4ZTdlbl0gZGRkZCBbc2FhdF0gTFQiLHNhbWVF''@;'; put 'put ''bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0OiIlcyBceGY2bmNlIixzOiJiaXJrYVx4ZTcgc2FuaXllIixzczoiJWQgc2FuaXllIixtOiJiaXIgZGFraWthIixtbToiJWQgZGFraWthIixoOiJiaXIgc2FhdCIsaGg6IiVkIHNhYXQiLGQ6ImJpciBnXHhmY24i''@;'; put 'put ''LGRkOiIlZCBnXHhmY24iLHc6ImJpciBoYWZ0YSIsd3c6IiVkIGhhZnRhIixNOiJiaXIgYXkiLE1NOiIlZCBheSIseToiYmlyIHlcdTAxMzFsIix5eToiJWQgeVx1MDEzMWwifSxvcmRpbmFsOmZ1bmN0aW9uKGxlLE0pe3N3aXRjaChNKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJE''@;'; put 'put ''RCI6cmV0dXJuIGxlO2RlZmF1bHQ6aWYoMD09PWxlKXJldHVybiBsZSsiJ1x1MDEzMW5jXHUwMTMxIjt2YXIgTz1sZSUxMDtyZXR1cm4gbGUrKHhbT118fHhbbGUlMTAwLU9dfHx4W2xlPj0xMDA/MTAwOm51bGxdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDU5NDpmdW5j''@;'; put 'put ''dGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlLE0sTyxSKXt2YXIgej17czpbInZpZW5zYXMgc2VjdW5kcyIsIidpZW5zYXMgc2VjdW5kcyJdLHNzOltsZSsiIHNlY3VuZHMiLGxlKyIgc2VjdW5kcyJdLG06WyInbiBtXHhlZHV0IiwiJ2llbnMg''@;'; put 'put ''bVx4ZWR1dCJdLG1tOltsZSsiIG1ceGVkdXRzIixsZSsiIG1ceGVkdXRzIl0saDpbIiduIFx4ZmVvcmEiLCInaWVuc2EgXHhmZW9yYSJdLGhoOltsZSsiIFx4ZmVvcmFzIixsZSsiIFx4ZmVvcmFzIl0sZDpbIiduIHppdWEiLCInaWVuc2Egeml1YSJdLGRkOltsZSsiIHppdWFzIixsZSsiIHpp''@;'; put 'put ''dWFzIl0sTTpbIiduIG1lcyIsIidpZW5zIG1lcyJdLE1NOltsZSsiIG1lc2VuIixsZSsiIG1lc2VuIl0seTpbIiduIGFyIiwiJ2llbnMgYXIiXSx5eTpbbGUrIiBhcnMiLGxlKyIgYXJzIl19O3JldHVybiBSfHxNP3pbT11bMF06eltPXVsxXX1hZS5kZWZpbmVMb2NhbGUoInR6bCIse21vbnRo''@;'; put 'put ''czoiSmFudWFyX0ZldnJhZ2xoX01hclx4ZTdfQXZyXHhlZnVfTWFpX0dceGZjbl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9wXHhlNHRzX05vZW12YXJfWmVjZW12YXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZXZfTWFyX0F2cl9NYWlfR1x4ZmNuX0p1bF9HdXNfU2V0X0xp''@;'; put 'put ''c19Ob2VfWmVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTXHhmYWxhZGlfTFx4ZmFuZVx4ZTdpX01haXR6aV9NXHhlMXJjdXJpX1hoXHhmYWFkaV9WaVx4ZTluZXJceGU3aV9TXHhlMXR1cmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU1x4ZmFsX0xceGZhbl9NYWlfTVx4ZTFyX1hoXHhm''@;'; put 'put ''YV9WaVx4ZTlfU1x4ZTF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTXHhmYV9MXHhmYV9NYV9NXHhlMV9YaF9WaV9TXHhlMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBbZGFsbGFzXSBZ''@;'; put 'put ''WVlZIixMTEw6IkQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbSIsTExMTDoiZGRkZCwgW2xpXSBELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0ifSxtZXJpZGllbVBhcnNlOi9kXCdvfGRcJ2EvaSxpc1BNOmZ1bmN0aW9uKGxlKXtyZXR1cm4iZCdvIj09PWxlLnRvTG93ZXJDYXNlKCl9LG1l''@;'; put 'put ''cmlkaWVtOmZ1bmN0aW9uKGxlLE0sTyl7cmV0dXJuIGxlPjExP08/ImQnbyI6IkQnTyI6Tz8iZCdhIjoiRCdBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltveGhpIFx4ZTBdIExUIixuZXh0RGF5OiJbZGVtXHhlMCBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJb''@;'; put 'put ''aWVpcmkgXHhlMF0gTFQiLGxhc3RXZWVrOiJbc1x4ZmNyIGVsXSBkZGRkIFtsYXN0ZXUgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9zcHJlaSAlcyIscGFzdDoiamElcyIsczptLHNzOm0sbSxtbTptLGg6bSxoaDptLGQ6bSxkZDptLE06bSxNTTptLHk6''@;'; put 'put ''bSx5eTptfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMjMyMjY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJ0em0tbGF0''@;'; put 'put ''biIse21vbnRoczoiaW5uYXlyX2JyXHUwMmU0YXlyXHUwMmU0X21hclx1MDJlNHNcdTAyZTRfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X1x1MDI2M3dcdTAxNjF0X1x1MDE2MXd0YW5iaXJfa3RcdTAyZTR3YnJcdTAyZTRfbnd3YW5iaXJfZHdqbmJpciIuc3BsaXQoIl8iKSxtb250aHNTaG9y''@;'; put 'put ''dDoiaW5uYXlyX2JyXHUwMmU0YXlyXHUwMmU0X21hclx1MDJlNHNcdTAyZTRfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X1x1MDI2M3dcdTAxNjF0X1x1MDE2MXd0YW5iaXJfa3RcdTAyZTR3YnJcdTAyZTRfbnd3YW5iaXJfZHdqbmJpciIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiYXNhbWFzX2F5''@;'; put 'put ''bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJhc2FtYXNfYXluYXNfYXNp''@;'; put 'put ''bmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0g''@;'; put 'put ''WVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXNka2ggZ10gTFQiLG5leHREYXk6Ilthc2thIGddIExUIixuZXh0V2VlazoiZGRkZCBbZ10gTFQiLGxhc3REYXk6Ilthc3NhbnQgZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiZGFka2ggcyB5YW4gJXMiLHBhc3Q6InlhbiAlcyIsczoiaW1payIsc3M6IiVkIGltaWsiLG06Im1pbnVcdTFlMGQiLG1tOiIlZCBtaW51XHUxZTBkIixoOiJzYVx1MDI1YmEiLGhoOiIlZCB0YXNzYVx1MDI1YmluIixkOiJhc3MiLGRkOiIlZCBvc3NhbiIsTToiYXlvd3IiLE1N''@;'; put 'put ''OiIlZCBpeXlpcm4iLHk6ImFzZ2FzIix5eToiJWQgaXNnYXNuIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShGKDE2Njc2KSl9LDgwNjczOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgidHptIix7bW9udGhzOiJcdTJkNDlcdTJk''@;'; put 'put ''NGZcdTJkNGZcdTJkMzBcdTJkNjJcdTJkNTRfXHUyZDMxXHUyZDU1XHUyZDMwXHUyZDYyXHUyZDU1X1x1MmQ0ZVx1MmQzMFx1MmQ1NVx1MmQ1YV9cdTJkNDlcdTJkMzFcdTJkNTRcdTJkNDlcdTJkNTRfXHUyZDRlXHUyZDMwXHUyZDYyXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0Zlx1''@;'; put 'put ''MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGRcdTJkNjJcdTJkNTNcdTJkNjNfXHUyZDU2XHUyZDUzXHUyZDViXHUyZDVjX1x1MmQ1Ylx1MmQ1M1x1MmQ1Y1x1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkM2RcdTJkNWZcdTJkNTNcdTJkMzFcdTJkNTVfXHUyZDRmXHUyZDUz''@;'; put 'put ''XHUyZDYxXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzN1x1MmQ1M1x1MmQ0YVx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUyZDQ5XHUyZDRmXHUyZDRmXHUyZDMwXHUyZDYyXHUyZDU0X1x1MmQzMVx1MmQ1NVx1MmQzMFx1MmQ2''@;'; put 'put ''Mlx1MmQ1NV9cdTJkNGVcdTJkMzBcdTJkNTVcdTJkNWFfXHUyZDQ5XHUyZDMxXHUyZDU0XHUyZDQ5XHUyZDU0X1x1MmQ0ZVx1MmQzMFx1MmQ2Mlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGZcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRkXHUyZDYyXHUyZDUzXHUyZDYzX1x1''@;'; put 'put ''MmQ1Nlx1MmQ1M1x1MmQ1Ylx1MmQ1Y19cdTJkNWJcdTJkNTNcdTJkNWNcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDNkXHUyZDVmXHUyZDUzXHUyZDMxXHUyZDU1X1x1MmQ0Zlx1MmQ1M1x1MmQ2MVx1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkMzdcdTJkNTNc''@;'; put 'put ''dTJkNGFcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1''@;'; put 'put ''MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDYxXHUyZDMwXHUy''@;'; put 'put ''ZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNjJc''@;'; put 'put ''dTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQz''@;'; put 'put ''MFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1N''@;'; put 'put ''IFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MmQzMFx1MmQ1OVx1MmQzN1x1MmQ0NSBcdTJkMzRdIExUIixuZXh0RGF5OiJbXHUyZDMwXHUyZDU5XHUyZDNkXHUyZDMwIFx1MmQzNF0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTJkMzRdIExUIixsYXN0RGF5OiJbXHUyZDMwXHUy''@;'; put 'put ''ZDVhXHUyZDMwXHUyZDRmXHUyZDVjIFx1MmQzNF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTJkMzRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTJkMzdcdTJkMzBcdTJkMzdcdTJkNDUgXHUyZDU5IFx1MmQ2Mlx1MmQzMFx1MmQ0ZiAlcyIscGFzdDoiXHUyZDYy''@;'; put 'put ''XHUyZDMwXHUyZDRmICVzIixzOiJcdTJkNDlcdTJkNGVcdTJkNDlcdTJkM2QiLHNzOiIlZCBcdTJkNDlcdTJkNGVcdTJkNDlcdTJkM2QiLG06Ilx1MmQ0ZVx1MmQ0OVx1MmQ0Zlx1MmQ1M1x1MmQzYSIsbW06IiVkIFx1MmQ0ZVx1MmQ0OVx1MmQ0Zlx1MmQ1M1x1MmQzYSIsaDoiXHUyZDU5XHUy''@;'; put 'put ''ZDMwXHUyZDQ0XHUyZDMwIixoaDoiJWQgXHUyZDVjXHUyZDMwXHUyZDU5XHUyZDU5XHUyZDMwXHUyZDQ0XHUyZDQ5XHUyZDRmIixkOiJcdTJkMzBcdTJkNTlcdTJkNTkiLGRkOiIlZCBvXHUyZDU5XHUyZDU5XHUyZDMwXHUyZDRmIixNOiJcdTJkMzBcdTJkNjJvXHUyZDUzXHUyZDU0IixNTToi''@;'; put 'put ''JWQgXHUyZDQ5XHUyZDYyXHUyZDYyXHUyZDQ5XHUyZDU0XHUyZDRmIix5OiJcdTJkMzBcdTJkNTlcdTJkMzNcdTJkMzBcdTJkNTkiLHl5OiIlZCBcdTJkNDlcdTJkNTlcdTJkMzNcdTJkMzBcdTJkNTlcdTJkNGYifSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sNjk1ODA6ZnVu''@;'; put 'put ''Y3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJ1Zy1jbiIse21vbnRoczoiXHUwNjRhXHUwNjI3XHUwNjQ2XHUwNmNiXHUwNjI3XHUwNjMxX1x1MDY0MVx1MDZkMFx1MDZjYlx1MDYzMVx1MDYyN1x1MDY0NF9cdTA2NDVcdTA2MjdcdTA2''@;'; put 'put ''MzFcdTA2MmFfXHUwNjI2XHUwNjI3XHUwNjdlXHUwNjMxXHUwNmQwXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDZfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ0X1x1MDYyNlx1MDYyN1x1MDZjYlx1MDYzYVx1MDZjN1x1MDYzM1x1''@;'; put 'put ''MDYyYV9cdTA2MzNcdTA2ZDBcdTA2NDZcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjI2XHUwNmM2XHUwNjQzXHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0YVx1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MmZcdTA2ZDBcdTA2NDNc''@;'; put 'put ''dTA2MjdcdTA2MjhcdTA2NDlcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDYyN1x1MDY0Nlx1MDZjYlx1MDYyN1x1MDYzMV9cdTA2NDFcdTA2ZDBcdTA2Y2JcdTA2MzFcdTA2MjdcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjJhX1x1MDYyNlx1MDYyN1x1MDY3''@;'; put 'put ''ZVx1MDYzMVx1MDZkMFx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ2X1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0NF9cdTA2MjZcdTA2MjdcdTA2Y2JcdTA2M2FcdTA2YzdcdTA2MzNcdTA2MmFfXHUwNjMzXHUwNmQwXHUwNjQ2XHUw''@;'; put 'put ''NjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyNlx1MDZjNlx1MDY0M1x1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NGFcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjJmXHUwNmQwXHUwNjQzXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2NGFcdTA2ZDVcdTA2NDNcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjJmXHUwNmM4XHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYzM1x1MDZkNVx1MDY0YVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2''@;'; put 'put ''ODZcdTA2MjdcdTA2MzFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjdlXHUwNmQ1XHUwNjRhXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYyY1x1MDZjOFx1MDY0NVx1MDZkNV9cdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDUiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiXHUwNjRhXHUwNmQ1X1x1MDYyZlx1MDZjOF9cdTA2MzNcdTA2ZDVfXHUwNjg2XHUwNjI3X1x1MDY3ZVx1MDZkNV9cdTA2MmNcdTA2YzhfXHUwNjM0XHUwNmQ1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2NGFcdTA2ZDVfXHUwNjJmXHUwNmM4X1x1MDYzM1x1MDZk''@;'; put 'put ''NV9cdTA2ODZcdTA2MjdfXHUwNjdlXHUwNmQ1X1x1MDYyY1x1MDZjOF9cdTA2MzRcdTA2ZDUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVktXHUwNjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2MjZc''@;'; put 'put ''dTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSIsTExMOiJZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUwNjI2XHUwNjI3XHUwNjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDlcdTA2MGMgSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGRcdTA2MGMgWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5XHUwNjBjIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjRhXHUwNmQwXHUwNjMxXHUw''@;'; put 'put ''NjQ5XHUwNjQ1IFx1MDY0M1x1MDZkMFx1MDY4Nlx1MDZkNXxcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzF8XHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NnxcdTA2ODZcdTA2YzhcdTA2MzR8XHUwNjg2XHUwNmM4''@;'; put 'put ''XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NnxcdTA2NDNcdTA2ZDVcdTA2ODYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwiXHUwNjRhXHUwNmQwXHUwNjMxXHUwNjQ5XHUwNjQ1IFx1MDY0M1x1''@;'; put 'put ''MDZkMFx1MDY4Nlx1MDZkNSI9PT1sZXx8Ilx1MDYzM1x1MDZkNVx1MDZiZVx1MDZkNVx1MDYzMSI9PT1sZXx8Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiPT09bGU/bToiXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJh''@;'; put 'put ''XHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiI9PT1sZXx8Ilx1MDY0M1x1MDZkNVx1MDY4NiI9PT1sZT9tKzEyOm0+PTExP206bSsxMn0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXt2YXIgTz0xMDAqbStsZTtyZXR1cm4gTzw2MDA/Ilx1MDY0YVx1MDZkMFx1''@;'; put 'put ''MDYzMVx1MDY0OVx1MDY0NSBcdTA2NDNcdTA2ZDBcdTA2ODZcdTA2ZDUiOk88OTAwPyJcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzEiOk88MTEzMD8iXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NiI6TzwxMjMw''@;'; put 'put ''PyJcdTA2ODZcdTA2YzhcdTA2MzQiOk88MTgwMD8iXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiI6Ilx1MDY0M1x1MDZkNVx1MDY4NiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI4XHUwNmM4XHUwNmFmXHUwNmM4''@;'; put 'put ''XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2MjZcdTA2ZDVcdTA2MmFcdTA2ZDUgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsbmV4dFdlZWs6IltcdTA2NDNcdTA2ZDBcdTA2NDRcdTA2ZDVcdTA2MzFcdTA2NDNcdTA2''@;'; put 'put ''NDldIGRkZGQgW1x1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmFcdTA2YzZcdTA2NDZcdTA2YzhcdTA2YWZcdTA2YzhcdTA2NDZdIExUIixsYXN0V2VlazoiW1x1MDYyNlx1MDYyN1x1MDY0NFx1MDYyZlx1MDY0OVx1MDY0Nlx1MDY0Mlx1MDY0OV0g''@;'; put 'put ''ZGRkZCBbXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2IixwYXN0OiIlcyBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiLHM6Ilx1MDY0Nlx1''@;'; put 'put ''MDZkNVx1MDY4Nlx1MDY4Nlx1MDZkNSBcdTA2MzNcdTA2ZDBcdTA2NDNcdTA2NDhcdTA2NDZcdTA2MmEiLHNzOiIlZCBcdTA2MzNcdTA2ZDBcdTA2NDNcdTA2NDhcdTA2NDZcdTA2MmEiLG06Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2NDVcdTA2NDlcdTA2NDZcdTA2YzdcdTA2MmEiLG1tOiIl''@;'; put 'put ''ZCBcdTA2NDVcdTA2NDlcdTA2NDZcdTA2YzdcdTA2MmEiLGg6Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmEiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmEiLGQ6Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2NDNcdTA2YzhcdTA2''@;'; put 'put ''NDYiLGRkOiIlZCBcdTA2NDNcdTA2YzhcdTA2NDYiLE06Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2MjZcdTA2MjdcdTA2NGEiLE1NOiIlZCBcdTA2MjZcdTA2MjdcdTA2NGEiLHk6Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2NGFcdTA2NDlcdTA2NDQiLHl5OiIlZCBcdTA2NGFcdTA2NDlcdTA2''@;'; put 'put ''NDQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDl8LVx1MDYyNlx1MDYyN1x1MDY0YXwtXHUwNmJlXHUwNmQ1XHUwNjdlXHUwNjJhXHUwNmQ1KS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2Nhc2UiZCI6Y2FzZSJE''@;'; put 'put ''IjpjYXNlIkRERCI6cmV0dXJuIG0rIi1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDkiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsiLVx1MDZiZVx1MDZkNVx1MDY3ZVx1MDYyYVx1MDZkNSI7ZGVmYXVsdDpyZXR1cm4gbX19LHByZXBhcnNlOmZ1bmN0aW9uKG0pe3JldHVybiBtLnJlcGxhY2Uo''@;'; put 'put ''L1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24obSl7cmV0dXJuIG0ucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sODcyNzA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g''@;'; put 'put ''bShSLHosSyl7cmV0dXJuIm0iPT09Sz96PyJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzAiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDMiOiJoIj09PUs/ej8iXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjoi''@;'; put 'put ''XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIjpSKyIgIitmdW5jdGlvbiB4KFIseil7dmFyIEs9Ui5zcGxpdCgiXyIpO3JldHVybiB6JTEwPT0xJiZ6JTEwMCE9MTE/S1swXTp6JTEwPj0yJiZ6JTEwPD00JiYoeiUxMDA8MTB8fHolMTAwPj0yMCk/S1sxXTpLWzJdfSh7c3M6''@;'; put 'put ''ej8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRc''@;'; put 'put ''dTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06ej8iXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQz''@;'; put 'put ''OFx1MDQzZFx1MDQzOF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2QiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDNfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1''@;'; put 'put ''MDQzOFx1MDQzZCIsaGg6ej8iXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2QiOiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDNfXHUw''@;'; put 'put ''NDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZCIsZGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NTZfXHUwNDM0XHUwNDNkXHUwNDU2XHUwNDMyIixNTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUw''@;'; put 'put ''NDRmXHUwNDQ2XHUwNDRjX1x1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ1Nl9cdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NTZcdTA0MzIiLHl5OiJcdTA0NDBcdTA0NTZcdTA0M2FfXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDM4X1x1MDQ0MFx1MDQzZVx1MDQzYVx1''@;'; put 'put ''MDQ1Nlx1MDQzMiJ9W0tdLCtSKX1mdW5jdGlvbiBNKFIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBSKyJcdTA0M2UiKygxMT09PXRoaXMuaG91cnMoKT8iXHUwNDMxIjoiIikrIl0gTFQifX1hZS5kZWZpbmVMb2NhbGUoInVrIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0MVx1MDQ1Nlx1MDQ0''@;'; put 'put ''N1x1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NGVcdTA0NDJcdTA0M2VcdTA0MzNcdTA0M2VfXHUwNDMxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM3XHUwNDNkXHUwNDRmX1x1MDQzYVx1MDQzMlx1MDQ1Nlx1MDQ0Mlx1MDQzZFx1MDQ0Zl9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0M2RcdTA0''@;'; put 'put ''NGZfXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMyXHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQzOFx1MDQzZlx1MDQzZFx1MDQ0Zl9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0M2ZcdTA0M2RcdTA0NGZfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDNkXHUwNDRmX1x1MDQzNlx1MDQzZVx1''@;'; put 'put ''MDQzMlx1MDQ0Mlx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0MzhcdTA0NDFcdTA0NDJcdTA0M2VcdTA0M2ZcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDMzXHUwNDQwXHUwNDQzXHUwNDM0XHUwNDNkXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0MVx1MDQ1Nlx1MDQ0N1x1MDQzNVx1''@;'; put 'put ''MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NGVcdTA0NDJcdTA0MzhcdTA0MzlfXHUwNDMxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYVx1MDQzMlx1MDQ1Nlx1MDQ0Mlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzVc''@;'; put 'put ''dTA0M2RcdTA0NGNfXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQzOFx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDFcdTA0MzVcdTA0NDBcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDQx''@;'; put 'put ''XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNlx1MDQzZVx1MDQzMlx1MDQ0Mlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0MzhcdTA0NDFcdTA0NDJcdTA0M2VcdTA0M2ZcdTA0MzBcdTA0MzRfXHUwNDMzXHUwNDQwXHUwNDQzXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjIi5zcGxpdCgiXyIp''@;'; put 'put ''fSxtb250aHNTaG9ydDoiXHUwNDQxXHUwNDU2XHUwNDQ3X1x1MDQzYlx1MDQ0ZVx1MDQ0Ml9cdTA0MzFcdTA0MzVcdTA0NDBfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMl9cdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzJfXHUwNDNiXHUwNDM4XHUwNDNm''@;'; put 'put ''X1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZl9cdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQyX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Ml9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzQiLnNwbGl0KCJfIiksd2Vla2RheXM6ZnVuY3Rpb24gbGUoUix6KXt2YXIgSz17''@;'; put 'put ''bm9taW5hdGl2ZToiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQzZVx1MDQzYV9cdTA0MzJcdTA0NTZcdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2VcdTA0M2FfXHUwNDQxXHUwNDM1''@;'; put 'put ''XHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTIwMTlcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NGZfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLGFjY3Vz''@;'; put 'put ''YXRpdmU6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ0ZV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2VcdTA0M2FfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0''@;'; put 'put ''MFx1MDQzNVx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDRlX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxnZW5pdGl2ZToi''@;'; put 'put ''XHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDU2X1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQzYVx1MDQzMF9cdTA0MzJcdTA0NTZcdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2FcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDM1''@;'; put 'put ''XHUwNDM0XHUwNDM4X1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzM1x1MDQzMF9cdTA0M2ZcdTIwMTlcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NTZfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDM4Ii5zcGxpdCgiXyIpfTtyZXR1''@;'; put 'put ''cm4hMD09PVI/Sy5ub21pbmF0aXZlLnNsaWNlKDEsNykuY29uY2F0KEsubm9taW5hdGl2ZS5zbGljZSgwLDEpKTpSP0tbLyhcW1tcdTA0MTJcdTA0MzJcdTA0MjNcdTA0NDNdXF0pID9kZGRkLy50ZXN0KHopPyJhY2N1c2F0aXZlIjovXFs/KD86XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUw''@;'; put 'put ''NDNiXHUwNDNlXHUwNDU3fFx1MDQzZFx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzZlx1MDQzZFx1MDQzZVx1MDQ1Nyk/ID9cXSA/ZGRkZC8udGVzdCh6KT8iZ2VuaXRpdmUiOiJub21pbmF0aXZlIl1bUi5kYXkoKV06Sy5ub21pbmF0aXZlfSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0''@;'; put 'put ''MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdc''@;'; put 'put ''dTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNDQwLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0NDAuLCBISDptbSIsTExMTDoi''@;'; put 'put ''ZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDQwLiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpNKCJbXHUwNDIxXHUwNDRjXHUwNDNlXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDU2ICIpLG5leHREYXk6TSgiW1x1MDQxN1x1MDQzMFx1MDQzMlx1MDQ0Mlx1MDQ0MFx1MDQzMCAiKSxsYXN0''@;'; put 'put ''RGF5Ok0oIltcdTA0MTJcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAgIiksbmV4dFdlZWs6TSgiW1x1MDQyM10gZGRkZCBbIiksbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiBNKCJbXHUwNDFjXHUwNDM4XHUw''@;'; put 'put ''NDNkXHUwNDQzXHUwNDNiXHUwNDNlXHUwNDU3XSBkZGRkIFsiKS5jYWxsKHRoaXMpO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiBNKCJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDNlXHUwNDMzXHUwNDNlXSBkZGRkIFsiKS5jYWxsKHRoaXMpfX0sc2FtZUVsc2U6Ikwi''@;'; put 'put ''fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiIlcyBcdTA0NDJcdTA0M2VcdTA0M2NcdTA0NDMiLHM6Ilx1MDQzNFx1MDQzNVx1MDQzYVx1MDQ1Nlx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQzMCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQi''@;'; put 'put ''LHNzOm0sbSxtbTptLGg6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyIsaGg6bSxkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOm0sTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRjIixNTTptLHk6Ilx1MDQ0MFx1MDQ1Nlx1MDQzYSIseXk6''@;'; put 'put ''bX0sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDU2fFx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQzYVx1MDQ0M3xcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwLyxpc1BNOmZ1bmN0aW9uKFIpe3JldHVybi9eKFx1MDQzNFx1''@;'; put 'put ''MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzApJC8udGVzdChSKX0sbWVyaWRpZW06ZnVuY3Rpb24oUix6LEspe3JldHVybiBSPDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ1NiI6UjwxMj8iXHUwNDQwXHUwNDMwXHUwNDNkXHUwNDNhXHUwNDQzIjpSPDE3''@;'; put 'put ''PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0Mzl8XHUwNDMzXHUwNDNlKS8sb3JkaW5hbDpmdW5jdGlvbihSLHope3N3aXRjaCh6KXtjYXNlIk0iOmNhc2UiZCI6''@;'; put 'put ''Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gUisiLVx1MDQzOSI7Y2FzZSJEIjpyZXR1cm4gUisiLVx1MDQzM1x1MDQzZSI7ZGVmYXVsdDpyZXR1cm4gUn19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDExNjU2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihh''@;'; put 'put ''ZSl7InVzZSBzdHJpY3QiO3ZhciB4PVsiXHUwNjJjXHUwNjQ2XHUwNjQ4XHUwNjMxXHUwNmNjIiwiXHUwNjQxXHUwNjMxXHUwNjQ4XHUwNjMxXHUwNmNjIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjg2IiwiXHUwNjI3XHUwNjdlXHUwNjMxXHUwNmNjXHUwNjQ0IiwiXHUwNjQ1XHUwNjI2XHUw''@;'; put 'put ''NmNjIiwiXHUwNjJjXHUwNjQ4XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjQ0XHUwNjI3XHUwNjI2XHUwNmNjIiwiXHUwNjI3XHUwNmFmXHUwNjMzXHUwNjJhIiwiXHUwNjMzXHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwi''@;'; put 'put ''XHUwNjQ2XHUwNjQ4XHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl0sbT1bIlx1MDYyN1x1MDYyYVx1MDY0OFx1MDYyN1x1MDYzMSIsIlx1MDY3ZVx1MDZjY1x1MDYzMSIsIlx1MDY0NVx1MDY0Nlx1MDZhZlx1MDY0NCIsIlx1MDYyOFx1MDYyZlx1''@;'; put 'put ''MDZiZSIsIlx1MDYyY1x1MDY0NVx1MDYzOVx1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDYyY1x1MDY0NVx1MDYzOVx1MDZjMSIsIlx1MDZjMVx1MDY0MVx1MDYyYVx1MDZjMSJdO2FlLmRlZmluZUxvY2FsZSgidXIiLHttb250aHM6eCxtb250aHNTaG9ydDp4LHdlZWtkYXlzOm0sd2Vla2RheXNT''@;'; put 'put ''aG9ydDptLHdlZWtkYXlzTWluOm0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1Q''@;'; put 'put ''YXJzZTovXHUwNjM1XHUwNjI4XHUwNjJkfFx1MDYzNFx1MDYyN1x1MDY0NS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PU19LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTwxMj8iXHUwNjM1XHUwNjI4XHUwNjJkIjoiXHUwNjM0XHUwNjI3''@;'; put 'put ''XHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjJcdTA2MmMgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDZhOVx1MDY0NCBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJh''@;'; put 'put ''XSBMVCIsbGFzdERheToiW1x1MDZhZlx1MDYzMFx1MDYzNFx1MDYyYVx1MDZjMSBcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbGFzdFdlZWs6IltcdTA2YWZcdTA2MzBcdTA2MzRcdTA2MmFcdTA2YzFdIGRkZGQgW1x1MDYyOFx1MDY0OFx1MDY0Mlx1''@;'; put 'put ''MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDYyOFx1MDYzOVx1MDYyZiIscGFzdDoiJXMgXHUwNjQyXHUwNjI4XHUwNjQ0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjMzXHUwNmNjXHUwNmE5XHUwNjQ2XHUwNjg4IixzczoiJWQgXHUwNjMz''@;'; put 'put ''XHUwNmNjXHUwNmE5XHUwNjQ2XHUwNjg4IixtOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjQ2XHUwNjc5IixtbToiJWQgXHUwNjQ1XHUwNjQ2XHUwNjc5IixoOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNmFmXHUwNmJlXHUwNjQ2XHUwNjc5XHUwNmMxIixoaDoiJWQgXHUwNmFmXHUw''@;'; put 'put ''NmJlXHUwNjQ2XHUwNjc5XHUwNmQyIixkOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQ2IixkZDoiJWQgXHUwNjJmXHUwNjQ2IixNOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNmMxIixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNmMxIix5OiJcdTA2MjdcdTA2Y2Nc''@;'; put 'put ''dTA2YTkgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3''@;'; put 'put ''ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwxODc0NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInV6LWxhdG4iLHttb250aHM6IllhbnZhcl9GZXZyYWxfTWFydF9BcHJlbF9NYXlfSXl1bl9JeXVsX0F2Z3VzdF9T''@;'; put 'put ''ZW50YWJyX09rdGFicl9Ob3lhYnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJZYW5fRmV2X01hcl9BcHJfTWF5X0l5dW5fSXl1bF9BdmdfU2VuX09rdF9Ob3lfRGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJZYWtzaGFuYmFfRHVzaGFuYmFfU2VzaGFuYmFfQ2hvcnNoYW5iYV9Q''@;'; put 'put ''YXlzaGFuYmFfSnVtYV9TaGFuYmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiWWFrX0R1c2hfU2VzaF9DaG9yX1BheV9KdW1fU2hhbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiWWFfRHVfU2VfQ2hvX1BhX0p1X1NoYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1t''@;'; put 'put ''IixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IkQgTU1NTSBZWVlZLCBkZGRkIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltCdWd1biBzb2F0XSBMVCBbZGFdIixuZXh0RGF5OiJbRXJ0YWdhXSBM''@;'; put 'put ''VCBbZGFdIixuZXh0V2VlazoiZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdIixsYXN0RGF5OiJbS2VjaGEgc29hdF0gTFQgW2RhXSIsbGFzdFdlZWs6IltPJ3RnYW5dIGRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiWWFxaW4gJXMg''@;'; put 'put ''aWNoaWRhIixwYXN0OiJCaXIgbmVjaGEgJXMgb2xkaW4iLHM6InNvbml5YSIsc3M6IiVkIHNvbml5YSIsbToiYmlyIGRhcWlxYSIsbW06IiVkIGRhcWlxYSIsaDoiYmlyIHNvYXQiLGhoOiIlZCBzb2F0IixkOiJiaXIga3VuIixkZDoiJWQga3VuIixNOiJiaXIgb3kiLE1NOiIlZCBveSIseToi''@;'; put 'put ''YmlyIHlpbCIseXk6IiVkIHlpbCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDY4MzY0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgidXoiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0''@;'; put 'put ''MF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJc''@;'; put 'put ''dTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMx''@;'; put 'put ''XHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2Jf''@;'; put 'put ''XHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDJmXHUwNDNhXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQx''@;'; put 'put ''NFx1MDQ0M1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MjFcdTA0MzVcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDI3XHUwNDNlXHUwNDQwXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxZlx1MDQzMFx1MDQzOVx1MDQ0OFx1MDQzMFx1MDQz''@;'; put 'put ''ZFx1MDQzMVx1MDQzMF9cdTA0MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDI4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQyZlx1MDQzYVx1MDQ0OF9cdTA0MTRcdTA0NDNcdTA0NDhfXHUwNDIxXHUwNDM1XHUwNDQ4X1x1MDQyN1x1MDQz''@;'; put 'put ''ZVx1MDQ0MF9cdTA0MWZcdTA0MzBcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQyOFx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDJmXHUwNDNhX1x1MDQxNFx1MDQ0M19cdTA0MjFcdTA0MzVfXHUwNDI3XHUwNDNlX1x1MDQxZlx1MDQzMF9cdTA0MTZcdTA0''@;'; put 'put ''NDNfXHUwNDI4XHUwNDMwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0ifSxjYWxlbmRh''@;'; put 'put ''cjp7c2FtZURheToiW1x1MDQxMVx1MDQ0M1x1MDQzM1x1MDQ0M1x1MDQzZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDMzXHUwNDMwXSBMVCBbXHUwNDM0XHUwNDMwXSIsbmV4dFdlZWs6''@;'; put 'put ''ImRkZGQgW1x1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzOCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLGxhc3RXZWVr''@;'; put 'put ''OiJbXHUwNDIzXHUwNDQyXHUwNDMzXHUwNDMwXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzggXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDJmXHUwNDNhXHUwNDM4''@;'; put 'put ''XHUwNDNkICVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzNFx1MDQzMCIscGFzdDoiXHUwNDExXHUwNDM4XHUwNDQwIFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzMCAlcyBcdTA0M2VcdTA0M2JcdTA0MzRcdTA0MzhcdTA0M2QiLHM6Ilx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0''@;'; put 'put ''MiIsc3M6IiVkIFx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsbToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsaDoiXHUwNDMxXHUw''@;'; put 'put ''NDM4XHUwNDQwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQz''@;'; put 'put ''ZVx1MDQzOSIsTU06IiVkIFx1MDQzZVx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzOVx1MDQzOFx1MDQzYiIseXk6IiVkIFx1MDQzOVx1MDQzOFx1MDQzYiJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDc1MDQ5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlv''@;'; put 'put ''bihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgidmkiLHttb250aHM6InRoXHhlMW5nIDFfdGhceGUxbmcgMl90aFx4ZTFuZyAzX3RoXHhlMW5nIDRfdGhceGUxbmcgNV90aFx4ZTFuZyA2X3RoXHhlMW5nIDdfdGhceGUxbmcgOF90aFx4ZTFuZyA5X3RoXHhlMW5nIDEwX3RoXHhl''@;'; put 'put ''MW5nIDExX3RoXHhlMW5nIDEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJUaGcgMDFfVGhnIDAyX1RoZyAwM19UaGcgMDRfVGhnIDA1X1RoZyAwNl9UaGcgMDdfVGhnIDA4X1RoZyAwOV9UaGcgMTBfVGhnIDExX1RoZyAxMiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtk''@;'; put 'put ''YXlzOiJjaFx1MWVlNyBuaFx1MWVhZHRfdGhcdTFlZTkgaGFpX3RoXHUxZWU5IGJhX3RoXHUxZWU5IHRcdTAxYjBfdGhcdTFlZTkgblx1MDEwM21fdGhcdTFlZTkgc1x4ZTF1X3RoXHUxZWU5IGJcdTFlYTN5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkNOX1QyX1QzX1Q0X1Q1X1Q2X1Q3''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJDTl9UMl9UM19UNF9UNV9UNl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbWVyaWRpZW1QYXJzZTovc2F8Y2gvaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybi9eY2gkL2kudGVzdChtKX0sbWVyaWRpZW06ZnVuY3Rpb24obSxs''@;'; put 'put ''ZSxNKXtyZXR1cm4gbTwxMj9NPyJzYSI6IlNBIjpNPyJjaCI6IkNIIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbblx1MDEwM21dIFlZWVkiLExMTDoiRCBNTU1NIFtuXHUwMTAzbV0gWVlZWSBISDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCwgRCBNTU1NIFtuXHUwMTAzbV0gWVlZWSBISDptbSIsbDoiREQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hceGY0bSBuYXkgbFx4ZmFjXSBMVCIs''@;'; put 'put ''bmV4dERheToiW05nXHhlMHkgbWFpIGxceGZhY10gTFQiLG5leHRXZWVrOiJkZGRkIFt0dVx1MWVhN24gdFx1MWVkYmkgbFx4ZmFjXSBMVCIsbGFzdERheToiW0hceGY0bSBxdWEgbFx4ZmFjXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3R1XHUxZWE3biB0clx1MDFiMFx1MWVkYmMgbFx4ZmFjXSBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgdFx1MWVkYmkiLHBhc3Q6IiVzIHRyXHUwMWIwXHUxZWRiYyIsczoidlx4ZTBpIGdpXHhlMnkiLHNzOiIlZCBnaVx4ZTJ5IixtOiJtXHUxZWQ5dCBwaFx4ZmF0IixtbToiJWQgcGhceGZhdCIsaDoibVx1MWVkOXQgZ2lc''@;'; put 'put ''dTFlZGQiLGhoOiIlZCBnaVx1MWVkZCIsZDoibVx1MWVkOXQgbmdceGUweSIsZGQ6IiVkIG5nXHhlMHkiLHc6Im1cdTFlZDl0IHR1XHUxZWE3biIsd3c6IiVkIHR1XHUxZWE3biIsTToibVx1MWVkOXQgdGhceGUxbmciLE1NOiIlZCB0aFx4ZTFuZyIseToibVx1MWVkOXQgblx1MDEwM20iLHl5''@;'; put 'put ''OiIlZCBuXHUwMTAzbSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIG19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDE1MTA2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Fl''@;'; put 'put ''LmRlZmluZUxvY2FsZSgieC1wc2V1ZG8iLHttb250aHM6Ikp+XHhlMVx4ZjFceGZhXHhlMX5yXHhmZF9Gflx4ZTliclx4ZmF+XHhlMXJceGZkX35NXHhlMXJjfmhfXHhjMXB+clx4ZWRsX35NXHhlMVx4ZmRffkpceGZhXHhmMVx4ZTl+X0pceGZhbH5ceGZkX1x4YzFceGZhfmdceGZhc3R+X1Nc''@;'; put 'put ''eGU5cH50XHhlOW1iflx4ZTlyX1x4ZDN+Y3RceGYzYn5ceGU5cl9ceGQxflx4ZjN2XHhlOW1+Ylx4ZTlyX35EXHhlOWNceGU5fm1iXHhlOXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikp+XHhlMVx4ZjFffkZceGU5Yl9+TVx4ZTFyX35ceGMxcHJffk1ceGUxXHhmZF9+Slx4ZmFceGYxX35K''@;'; put 'put ''XHhmYWxfflx4YzFceGZhZ19+U1x4ZTlwX35ceGQzY3Rfflx4ZDFceGYzdl9+RFx4ZTljIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlN+XHhmYVx4ZjFkXHhlMX5ceGZkX01ceGYzflx4ZjFkXHhlMVx4ZmR+X1RceGZhXHhlOX5zZFx4ZTFceGZkfl9XXHhlOWR+''@;'; put 'put ''XHhmMVx4ZTlzZH5ceGUxXHhmZF9UfmhceGZhcnN+ZFx4ZTFceGZkX35Gclx4ZWRkflx4ZTFceGZkX1N+XHhlMXRceGZhcn5kXHhlMVx4ZmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU35ceGZhXHhmMV9+TVx4ZjNceGYxX35UXHhmYVx4ZTlffldceGU5ZF9+VGhceGZhX35Gclx4ZWRf''@;'; put 'put ''flNceGUxdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU35ceGZhX01ceGYzfl9UXHhmYV9+V1x4ZTlfVH5oX0Zyfl9TXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''IixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVH5ceGYzZFx4ZTF+XHhmZCBceGUxdF0gTFQiLG5leHREYXk6IltUflx4ZjNtXHhmM35yclx4ZjN+dyBceGUxdF0gTFQiLG5leHRXZWVrOiJkZGRkIFtc''@;'; put 'put ''eGUxdF0gTFQiLGxhc3REYXk6IltceGRkflx4ZTlzdH5ceGU5cmRceGUxflx4ZmQgXHhlMXRdIExUIixsYXN0V2VlazoiW0x+XHhlMXN0XSBkZGRkIFtceGUxdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx4ZWR+XHhmMSAlcyIscGFzdDoiJXMgXHhlMX5nXHhm''@;'; put 'put ''MyIsczoiXHhlMSB+Zlx4ZTl3IH5zXHhlOWNceGYzflx4ZjFkcyIsc3M6IiVkIHN+XHhlOWNceGYzXHhmMX5kcyIsbToiXHhlMSB+bVx4ZWRceGYxflx4ZmF0XHhlOSIsbW06IiVkIG1+XHhlZFx4ZjFceGZhfnRceGU5cyIsaDoiXHhlMX5ceGYxIGhceGYzflx4ZmFyIixoaDoiJWQgaH5ceGYz''@;'; put 'put ''XHhmYXJzIixkOiJceGUxIH5kXHhlMVx4ZmQiLGRkOiIlZCBkflx4ZTFceGZkcyIsTToiXHhlMSB+bVx4ZjNceGYxfnRoIixNTToiJWQgbX5ceGYzXHhmMXR+aHMiLHk6Ilx4ZTEgflx4ZmRceGU5XHhlMXIiLHl5OiIlZCBceGZkflx4ZTlceGUxcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNl''@;'; put 'put ''Oi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDYx''@;'; put 'put ''OTk6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJ5byIse21vbnRoczoiU1x1MWViOVx1MDMwMXJcdTFlYjlcdTAzMDFfRVx1MDMwMHJlXHUwMzAwbGVcdTAzMDBfXHUxZWI4clx1MWViOVx1MDMwMG5hXHUwMzAwX0lcdTAzMDBn''@;'; put 'put ''YmVcdTAzMDFfRVx1MDMwMGJpYmlfT1x1MDMwMGt1XHUwMzAwZHVfQWdcdTFlYjltb19PXHUwMzAwZ3VcdTAzMDFuX093ZXdlX1x1MWVjY1x1MDMwMHdhXHUwMzAwcmFcdTAzMDBfQmVcdTAzMDFsdVx1MDMwMV9cdTFlY2NcdTAzMDBwXHUxZWI5XHUwMzAwXHUwMzAwIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1Nob3J0OiJTXHUxZWI5XHUwMzAxcl9FXHUwMzAwcmxfXHUxZWI4cm5fSVx1MDMwMGdiX0VcdTAzMDBiaV9PXHUwMzAwa3VcdTAzMDBfQWdcdTFlYjlfT1x1MDMwMGd1XHUwMzAxX093ZV9cdTFlY2NcdTAzMDB3YVx1MDMwMF9CZVx1MDMwMWxfXHUxZWNjXHUwMzAwcFx1MWViOVx1MDMw''@;'; put 'put ''MFx1MDMwMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQVx1MDMwMGlcdTAzMDBrdVx1MDMwMV9BamVcdTAzMDFfSVx1MDMwMHNcdTFlYjlcdTAzMDFndW5fXHUxZWNjalx1MWVjZFx1MDMwMXJ1XHUwMzAxX1x1MWVjY2pcdTFlY2RcdTAzMDFiXHUxZWNkX1x1MWViOHRpXHUwMzAwX0FcdTAzMDBi''@;'; put 'put ''YVx1MDMwMW1cdTFlYjlcdTAzMDF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBXHUwMzAwaVx1MDMwMGtfQWplXHUwMzAxX0lcdTAzMDBzXHUxZWI5XHUwMzAxX1x1MWVjY2pyX1x1MWVjY2piX1x1MWViOHRpXHUwMzAwX0FcdTAzMDBiYVx1MDMwMSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c01pbjoiQVx1MDMwMGlcdTAzMDBfQWpfSVx1MDMwMHNfXHUxZWNjcl9cdTFlY2NiX1x1MWViOHRfQVx1MDMwMGIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW09cdTAzMDBuaVx1MDMwMCBuaV0gTFQiLG5leHREYXk6IltcdTFlY2NcdTAzMDBsYSBuaV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTFlY2NzXHUxZWI5XHUwMzAwIHRvXHUw''@;'; put 'put ''MzAxbidiXHUxZWNkXSBbbmldIExUIixsYXN0RGF5OiJbQVx1MDMwMG5hIG5pXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MWVjY3NcdTFlYjlcdTAzMDAgdG9cdTAzMDFsXHUxZWNkXHUwMzAxXSBbbmldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuaVx1MDMwMSAl''@;'; put 'put ''cyIscGFzdDoiJXMga1x1MWVjZGphXHUwMzAxIixzOiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxIGFheWFcdTAzMDEgZGllIixzczoiYWF5YVx1MDMwMSAlZCIsbToiaVx1MDMwMHNcdTFlYjlqdVx1MDMwMSBrYW4iLG1tOiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxICVkIixoOiJ3YVx1MDMwMWth''@;'; put 'put ''dGkga2FuIixoaDoid2FcdTAzMDFrYXRpICVkIixkOiJcdTFlY2RqXHUxZWNkXHUwMzAxIGthbiIsZGQ6Ilx1MWVjZGpcdTFlY2RcdTAzMDEgJWQiLE06Im9zdVx1MDMwMCBrYW4iLE1NOiJvc3VcdTAzMDAgJWQiLHk6Ilx1MWVjZGR1XHUwMzAxbiBrYW4iLHl5OiJcdTFlY2RkdVx1MDMwMW4g''@;'; put 'put ''JWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cdTFlY2RqXHUxZWNkXHUwMzAxXHNcZHsxLDJ9LyxvcmRpbmFsOiJcdTFlY2RqXHUxZWNkXHUwMzAxICVkIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwyNzI4MDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInpoLWNuIix7bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUz''@;'; put 'put ''NDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJc''@;'; put 'put ''dTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTU0NjhcdTY1ZTVfXHU1NDY4XHU0ZTAwX1x1NTQ2OFx1NGU4Y19cdTU0NjhcdTRlMDlfXHU1NDY4XHU1NmRiX1x1NTQ2OFx1NGU5NF9cdTU0NjhcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUw''@;'; put 'put ''OV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNUFoXHU3MGI5bW1cdTUy''@;'; put 'put ''MDYiLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGRBaFx1NzBiOW1tXHU1MjA2IixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVl''@;'; put 'put ''NWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG0sbGUpe3JldHVybiAxMj09PW0mJihtPTApLCJcdTUxY2Nc''@;'; put 'put ''dTY2NjgiPT09bGV8fCJcdTY1ZTlcdTRlMGEiPT09bGV8fCJcdTRlMGFcdTUzNDgiPT09bGU/bToiXHU0ZTBiXHU1MzQ4Ij09PWxlfHwiXHU2NjVhXHU0ZTBhIj09PWxlP20rMTI6bT49MTE/bTptKzEyfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3ZhciBPPTEwMCptK2xlO3JldHVybiBP''@;'; put 'put ''PDYwMD8iXHU1MWNjXHU2NjY4IjpPPDkwMD8iXHU2NWU5XHU0ZTBhIjpPPDExMzA/Ilx1NGUwYVx1NTM0OCI6TzwxMjMwPyJcdTRlMmRcdTUzNDgiOk88MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldTFQiLG5leHRE''@;'; put 'put ''YXk6IltcdTY2MGVcdTU5MjldTFQiLG5leHRXZWVrOmZ1bmN0aW9uKG0pe3JldHVybiBtLndlZWsoKSE9PXRoaXMud2VlaygpPyJbXHU0ZTBiXWRkZExUIjoiW1x1NjcyY11kZGRMVCJ9LGxhc3REYXk6IltcdTY2MjhcdTU5MjldTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKG0pe3JldHVybiB0aGlz''@;'; put 'put ''LndlZWsoKSE9PW0ud2VlaygpPyJbXHU0ZTBhXWRkZExUIjoiW1x1NjcyY11kZGRMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1NTQ2OCkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxlKXtjYXNlImQiOmNh''@;'; put 'put ''c2UiRCI6Y2FzZSJEREQiOnJldHVybiBtKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIG0rIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBtKyJcdTU0NjgiO2RlZmF1bHQ6cmV0dXJuIG19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTU0MGUiLHBhc3Q6IiVzXHU1MjRkIixzOiJc''@;'; put 'put ''dTUxZTBcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDlmIixtbToiJWQgXHU1MjA2XHU5NDlmIixoOiIxIFx1NWMwZlx1NjVmNiIsaGg6IiVkIFx1NWMwZlx1NjVmNiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLHc6IjEgXHU1NDY4Iix3dzoiJWQgXHU1NDY4IixN''@;'; put 'put ''OiIxIFx1NGUyYVx1NjcwOCIsTU06IiVkIFx1NGUyYVx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwzNjg2MDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2Nh''@;'; put 'put ''bGUoInpoLWhrIix7bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2''@;'; put 'put ''NzA4X1x1NTM0MVx1NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXM6Ilx1NjYxZlx1NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJc''@;'; put 'put ''dTkwMzFcdTY1ZTVfXHU5MDMxXHU0ZTAwX1x1OTAzMVx1NGU4Y19cdTkwMzFcdTRlMDlfXHU5MDMxXHU1NmRiX1x1OTAzMVx1NGU5NF9cdTkwMzFcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIu''@;'; put 'put ''c3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1''@;'; put 'put ''ZGRkZCBISDptbSIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1''@;'; put 'put ''NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwiXHU1MWNjXHU2NjY4Ij09PWxlfHwiXHU2NWU5XHU0ZTBhIj09PWxlfHwiXHU0ZTBhXHU1''@;'; put 'put ''MzQ4Ij09PWxlP206Ilx1NGUyZFx1NTM0OCI9PT1sZT9tPj0xMT9tOm0rMTI6Ilx1NGUwYlx1NTM0OCI9PT1sZXx8Ilx1NjY1YVx1NGUwYSI9PT1sZT9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXt2YXIgTz0xMDAqbStsZTtyZXR1cm4gTzw2MDA/Ilx1NTFjY1x1NjY2''@;'; put 'put ''OCI6Tzw5MDA/Ilx1NjVlOVx1NGUwYSI6TzwxMjAwPyJcdTRlMGFcdTUzNDgiOjEyMDA9PT1PPyJcdTRlMmRcdTUzNDgiOk88MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldTFQiLG5leHREYXk6IltcdTY2MGVcdTU5''@;'; put 'put ''MjldTFQiLG5leHRXZWVrOiJbXHU0ZTBiXWRkZGRMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV1MVCIsbGFzdFdlZWs6IltcdTRlMGFdZGRkZExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTkwMzEpLyxvcmRpbmFsOmZ1''@;'; put 'put ''bmN0aW9uKG0sbGUpe3N3aXRjaChsZSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gbSsiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBtKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBtfX0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1''@;'; put 'put ''OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShGKDE2Njc2KSl9LDc4MzY0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiemgtbW8iLHtt''@;'; put 'put ''b250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0''@;'; put 'put ''ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2''@;'; put 'put ''NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9c''@;'; put 'put ''dTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixs''@;'; put 'put ''OiJEL00vWVlZWSIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1''@;'; put 'put ''NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG0sbGUpe3JldHVybiAxMj09PW0mJihtPTApLCJcdTUxY2NcdTY2NjgiPT09bGV8fCJcdTY1ZTlcdTRlMGEiPT09bGV8fCJcdTRlMGFcdTUzNDgiPT09bGU/bToi''@;'; put 'put ''XHU0ZTJkXHU1MzQ4Ij09PWxlP20+PTExP206bSsxMjoiXHU0ZTBiXHU1MzQ4Ij09PWxlfHwiXHU2NjVhXHU0ZTBhIj09PWxlP20rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3ZhciBPPTEwMCptK2xlO3JldHVybiBPPDYwMD8iXHU1MWNjXHU2NjY4IjpPPDkwMD8iXHU2''@;'; put 'put ''NWU5XHU0ZTBhIjpPPDExMzA/Ilx1NGUwYVx1NTM0OCI6TzwxMjMwPyJcdTRlMmRcdTUzNDgiOk88MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4dFdl''@;'; put 'put ''ZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24obSxs''@;'; put 'put ''ZSl7c3dpdGNoKGxlKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBtKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIG0rIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBtKyJcdTkwMzEiO2RlZmF1bHQ6cmV0dXJuIG19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTUx''@;'; put 'put ''NjciLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTVlN2VcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDE4IixtbToiJWQgXHU1MjA2XHU5NDE4IixoOiIxIFx1NWMwZlx1NjY0MiIsaGg6IiVkIFx1NWMwZlx1NjY0MiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLE06IjEg''@;'; put 'put ''XHU1MDBiXHU2NzA4IixNTToiJWQgXHU1MDBiXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9fSl9KEYoMTY2NzYpKX0sNDgyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiemgtdHciLHttb250aHM6Ilx1NGUw''@;'; put 'put ''MFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1''@;'; put 'put ''NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBf''@;'; put 'put ''XHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIs''@;'; put 'put ''bGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxc''@;'; put 'put ''dTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG0sbGUpe3JldHVybiAxMj09PW0mJihtPTApLCJcdTUxY2NcdTY2NjgiPT09bGV8fCJcdTY1ZTlcdTRlMGEiPT09bGV8fCJcdTRlMGFcdTUzNDgiPT09bGU/bToiXHU0ZTJkXHU1MzQ4''@;'; put 'put ''Ij09PWxlP20+PTExP206bSsxMjoiXHU0ZTBiXHU1MzQ4Ij09PWxlfHwiXHU2NjVhXHU0ZTBhIj09PWxlP20rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3ZhciBPPTEwMCptK2xlO3JldHVybiBPPDYwMD8iXHU1MWNjXHU2NjY4IjpPPDkwMD8iXHU2NWU5XHU0ZTBhIjpP''@;'; put 'put ''PDExMzA/Ilx1NGUwYVx1NTM0OCI6TzwxMjMwPyJcdTRlMmRcdTUzNDgiOk88MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4dFdlZWs6IltcdTRlMGJd''@;'; put 'put ''ZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxl''@;'; put 'put ''KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBtKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIG0rIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBtKyJcdTkwMzEiO2RlZmF1bHQ6cmV0dXJuIG19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTVmOGMiLHBhc3Q6IiVz''@;'; put 'put ''XHU1MjRkIixzOiJcdTVlN2VcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDE4IixtbToiJWQgXHU1MjA2XHU5NDE4IixoOiIxIFx1NWMwZlx1NjY0MiIsaGg6IiVkIFx1NWMwZlx1NjY0MiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLE06IjEgXHU1MDBiXHU2NzA4''@;'; put 'put ''IixNTToiJWQgXHU1MDBiXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9fSl9KEYoMTY2NzYpKX0sMTY2NzY6ZnVuY3Rpb24oYXQsSWUsRil7KGF0PUYubm1kKGF0KSkuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgYWUsWTtmdW5jdGlvbiB4KCl7cmV0dXJu''@;'; put 'put ''IGFlLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBsZShrZSl7cmV0dXJuIGtlIGluc3RhbmNlb2YgQXJyYXl8fCJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoa2UpfWZ1bmN0aW9uIE0oa2Upe3JldHVybiBudWxsIT1rZSYmIltvYmplY3Qg''@;'; put 'put ''T2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoa2UpfWZ1bmN0aW9uIE8oa2UsJGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoa2UsJGUpfWZ1bmN0aW9uIFIoa2Upe2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKXJldHVy''@;'; put 'put ''biAwPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoa2UpLmxlbmd0aDt2YXIgJGU7Zm9yKCRlIGluIGtlKWlmKE8oa2UsJGUpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHooa2Upe3JldHVybiB2b2lkIDA9PT1rZX1mdW5jdGlvbiBLKGtlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGtlfHwiW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChrZSl9ZnVuY3Rpb24gSShrZSl7cmV0dXJuIGtlIGluc3RhbmNlb2YgRGF0ZXx8IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGtlKX1mdW5jdGlvbiBr''@;'; put 'put ''KGtlLCRlKXt2YXIgTHQsbXQ9W10sR3Q9a2UubGVuZ3RoO2ZvcihMdD0wO0x0PEd0OysrTHQpbXQucHVzaCgkZShrZVtMdF0sTHQpKTtyZXR1cm4gbXR9ZnVuY3Rpb24gRShrZSwkZSl7Zm9yKHZhciBtdCBpbiAkZSlPKCRlLG10KSYmKGtlW210XT0kZVttdF0pO3JldHVybiBPKCRlLCJ0b1N0''@;'; put 'put ''cmluZyIpJiYoa2UudG9TdHJpbmc9JGUudG9TdHJpbmcpLE8oJGUsInZhbHVlT2YiKSYmKGtlLnZhbHVlT2Y9JGUudmFsdWVPZiksa2V9ZnVuY3Rpb24gaihrZSwkZSxtdCxMdCl7cmV0dXJuIGtkKGtlLCRlLG10LEx0LCEwKS51dGMoKX1mdW5jdGlvbiBCKGtlKXtyZXR1cm4gbnVsbD09a2Uu''@;'; put 'put ''X3BmJiYoa2UuX3BmPXtlbXB0eTohMSx1bnVzZWRUb2tlbnM6W10sdW51c2VkSW5wdXQ6W10sb3ZlcmZsb3c6LTIsY2hhcnNMZWZ0T3ZlcjowLG51bGxJbnB1dDohMSxpbnZhbGlkRXJhOm51bGwsaW52YWxpZE1vbnRoOm51bGwsaW52YWxpZEZvcm1hdDohMSx1c2VySW52YWxpZGF0ZWQ6ITEs''@;'; put 'put ''aXNvOiExLHBhcnNlZERhdGVQYXJ0czpbXSxlcmE6bnVsbCxtZXJpZGllbTpudWxsLHJmYzI4MjI6ITEsd2Vla2RheU1pc21hdGNoOiExfSksa2UuX3BmfWZ1bmN0aW9uIFgoa2Upe2lmKG51bGw9PWtlLl9pc1ZhbGlkKXt2YXIgJGU9QihrZSksbXQ9WS5jYWxsKCRlLnBhcnNlZERhdGVQYXJ0''@;'; put 'put ''cyxmdW5jdGlvbihHdCl7cmV0dXJuIG51bGwhPUd0fSksTHQ9IWlzTmFOKGtlLl9kLmdldFRpbWUoKSkmJiRlLm92ZXJmbG93PDAmJiEkZS5lbXB0eSYmISRlLmludmFsaWRFcmEmJiEkZS5pbnZhbGlkTW9udGgmJiEkZS5pbnZhbGlkV2Vla2RheSYmISRlLndlZWtkYXlNaXNtYXRjaCYmISRl''@;'; put 'put ''Lm51bGxJbnB1dCYmISRlLmludmFsaWRGb3JtYXQmJiEkZS51c2VySW52YWxpZGF0ZWQmJighJGUubWVyaWRpZW18fCRlLm1lcmlkaWVtJiZtdCk7aWYoa2UuX3N0cmljdCYmKEx0PUx0JiYwPT09JGUuY2hhcnNMZWZ0T3ZlciYmMD09PSRlLnVudXNlZFRva2Vucy5sZW5ndGgmJnZvaWQgMD09''@;'; put 'put ''PSRlLmJpZ0hvdXIpLG51bGwhPU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKGtlKSlyZXR1cm4gTHQ7a2UuX2lzVmFsaWQ9THR9cmV0dXJuIGtlLl9pc1ZhbGlkfWZ1bmN0aW9uIFUoa2Upe3ZhciAkZT1qKE5hTik7cmV0dXJuIG51bGwhPWtlP0UoQigkZSksa2UpOkIoJGUpLnVz''@;'; put 'put ''ZXJJbnZhbGlkYXRlZD0hMCwkZX1ZPUFycmF5LnByb3RvdHlwZS5zb21lP0FycmF5LnByb3RvdHlwZS5zb21lOmZ1bmN0aW9uKGtlKXt2YXIgTHQsJGU9T2JqZWN0KHRoaXMpLG10PSRlLmxlbmd0aD4+PjA7Zm9yKEx0PTA7THQ8bXQ7THQrKylpZihMdCBpbiAkZSYma2UuY2FsbCh0aGlzLCRl''@;'; put 'put ''W0x0XSxMdCwkZSkpcmV0dXJuITA7cmV0dXJuITF9O3ZhciBxPXgubW9tZW50UHJvcGVydGllcz1bXSxlZT0hMTtmdW5jdGlvbiB0ZShrZSwkZSl7dmFyIG10LEx0LEd0LFVuPXEubGVuZ3RoO2lmKHooJGUuX2lzQU1vbWVudE9iamVjdCl8fChrZS5faXNBTW9tZW50T2JqZWN0PSRlLl9pc0FN''@;'; put 'put ''b21lbnRPYmplY3QpLHooJGUuX2kpfHwoa2UuX2k9JGUuX2kpLHooJGUuX2YpfHwoa2UuX2Y9JGUuX2YpLHooJGUuX2wpfHwoa2UuX2w9JGUuX2wpLHooJGUuX3N0cmljdCl8fChrZS5fc3RyaWN0PSRlLl9zdHJpY3QpLHooJGUuX3R6bSl8fChrZS5fdHptPSRlLl90em0pLHooJGUuX2lzVVRD''@;'; put 'put ''KXx8KGtlLl9pc1VUQz0kZS5faXNVVEMpLHooJGUuX29mZnNldCl8fChrZS5fb2Zmc2V0PSRlLl9vZmZzZXQpLHooJGUuX3BmKXx8KGtlLl9wZj1CKCRlKSkseigkZS5fbG9jYWxlKXx8KGtlLl9sb2NhbGU9JGUuX2xvY2FsZSksVW4+MClmb3IobXQ9MDttdDxVbjttdCsrKXooR3Q9JGVbTHQ9''@;'; put 'put ''cVttdF1dKXx8KGtlW0x0XT1HdCk7cmV0dXJuIGtlfWZ1bmN0aW9uIG9lKGtlKXt0ZSh0aGlzLGtlKSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPWtlLl9kP2tlLl9kLmdldFRpbWUoKTpOYU4pLHRoaXMuaXNWYWxpZCgpfHwodGhpcy5fZD1uZXcgRGF0ZShOYU4pKSwhMT09PWVlJiYoZWU9ITAs''@;'; put 'put ''eC51cGRhdGVPZmZzZXQodGhpcyksZWU9ITEpfWZ1bmN0aW9uIHNlKGtlKXtyZXR1cm4ga2UgaW5zdGFuY2VvZiBvZXx8bnVsbCE9a2UmJm51bGwhPWtlLl9pc0FNb21lbnRPYmplY3R9ZnVuY3Rpb24gaGUoa2UpeyExPT09eC5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MmJnR5cGVvZiBj''@;'; put 'put ''b25zb2xlPCJ1IiYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIra2UpfWZ1bmN0aW9uIHVlKGtlLCRlKXt2YXIgbXQ9ITA7cmV0dXJuIEUoZnVuY3Rpb24oKXtpZihudWxsIT14LmRlcHJlY2F0aW9uSGFuZGxlciYmeC5kZXByZWNhdGlvbkhhbmRs''@;'; put 'put ''ZXIobnVsbCxrZSksbXQpe3ZhciBHdCxVbixEcixMdD1bXSx5bz1hcmd1bWVudHMubGVuZ3RoO2ZvcihVbj0wO1VuPHlvO1VuKyspe2lmKEd0PSIiLCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzW1VuXSl7Zm9yKERyIGluIEd0Kz0iXG5bIitVbisiXSAiLGFyZ3VtZW50c1swXSlPKGFyZ3Vt''@;'; put 'put ''ZW50c1swXSxEcikmJihHdCs9RHIrIjogIithcmd1bWVudHNbMF1bRHJdKyIsICIpO0d0PUd0LnNsaWNlKDAsLTIpfWVsc2UgR3Q9YXJndW1lbnRzW1VuXTtMdC5wdXNoKEd0KX1oZShrZSsiXG5Bcmd1bWVudHM6ICIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoTHQpLmpvaW4oIiIpKyJc''@;'; put 'put ''biIrKG5ldyBFcnJvcikuc3RhY2spLG10PSExfXJldHVybiAkZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCRlKX12YXIgZyxjZT17fTtmdW5jdGlvbiBHKGtlLCRlKXtudWxsIT14LmRlcHJlY2F0aW9uSGFuZGxlciYmeC5kZXByZWNhdGlvbkhhbmRsZXIoa2UsJGUpLGNlW2tlXXx8KGhlKCRl''@;'; put 'put ''KSxjZVtrZV09ITApfWZ1bmN0aW9uIGIoa2Upe3JldHVybiB0eXBlb2YgRnVuY3Rpb248InUiJiZrZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGtlKX1mdW5jdGlvbiBIKGtlLCRlKXt2YXIgTHQsbXQ9''@;'; put 'put ''RSh7fSxrZSk7Zm9yKEx0IGluICRlKU8oJGUsTHQpJiYoTShrZVtMdF0pJiZNKCRlW0x0XSk/KG10W0x0XT17fSxFKG10W0x0XSxrZVtMdF0pLEUobXRbTHRdLCRlW0x0XSkpOm51bGwhPSRlW0x0XT9tdFtMdF09JGVbTHRdOmRlbGV0ZSBtdFtMdF0pO2ZvcihMdCBpbiBrZSlPKGtlLEx0KSYm''@;'; put 'put ''IU8oJGUsTHQpJiZNKGtlW0x0XSkmJihtdFtMdF09RSh7fSxtdFtMdF0pKTtyZXR1cm4gbXR9ZnVuY3Rpb24gTihrZSl7bnVsbCE9a2UmJnRoaXMuc2V0KGtlKX14LnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncz0hMSx4LmRlcHJlY2F0aW9uSGFuZGxlcj1udWxsLGc9T2JqZWN0LmtleXM/''@;'; put 'put ''T2JqZWN0LmtleXM6ZnVuY3Rpb24oa2Upe3ZhciAkZSxtdD1bXTtmb3IoJGUgaW4ga2UpTyhrZSwkZSkmJm10LnB1c2goJGUpO3JldHVybiBtdH07ZnVuY3Rpb24gdihrZSwkZSxtdCl7dmFyIEx0PSIiK01hdGguYWJzKGtlKTtyZXR1cm4oa2U+PTA/bXQ/IisiOiIiOiItIikrTWF0aC5wb3co''@;'; put 'put ''MTAsTWF0aC5tYXgoMCwkZS1MdC5sZW5ndGgpKS50b1N0cmluZygpLnN1YnN0cigxKStMdH12YXIgcD0vKFxbW15cW10qXF0pfChcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZ''@;'; put 'put ''WVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyx3PS8oXFtbXlxbXSpcXSl8KFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLEo9e30sbmU9e307ZnVuY3Rpb24gZGUo''@;'; put 'put ''a2UsJGUsbXQsTHQpe3ZhciBHdD1MdDsic3RyaW5nIj09dHlwZW9mIEx0JiYoR3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tMdF0oKX0pLGtlJiYobmVba2VdPUd0KSwkZSYmKG5lWyRlWzBdXT1mdW5jdGlvbigpe3JldHVybiB2KEd0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSwkZVsxXSwkZVsy''@;'; put 'put ''XSl9KSxtdCYmKG5lW210XT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKEd0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxrZSl9KX1mdW5jdGlvbiBmZShrZSl7cmV0dXJuIGtlLm1hdGNoKC9cW1tcc1xTXS8pP2tlLnJlcGxhY2UoL15cW3xcXSQvZywiIik6a2Uu''@;'; put 'put ''cmVwbGFjZSgvXFwvZywiIil9ZnVuY3Rpb24gTGUoa2UsJGUpe3JldHVybiBrZS5pc1ZhbGlkKCk/KCRlPUZlKCRlLGtlLmxvY2FsZURhdGEoKSksSlskZV09SlskZV18fGZ1bmN0aW9uIHhlKGtlKXt2YXIgbXQsTHQsJGU9a2UubWF0Y2gocCk7Zm9yKG10PTAsTHQ9JGUubGVuZ3RoO210PEx0''@;'; put 'put ''O210KyspJGVbbXRdPW5lWyRlW210XV0/bmVbJGVbbXRdXTpmZSgkZVttdF0pO3JldHVybiBmdW5jdGlvbihHdCl7dmFyIERyLFVuPSIiO2ZvcihEcj0wO0RyPEx0O0RyKyspVW4rPWIoJGVbRHJdKT8kZVtEcl0uY2FsbChHdCxrZSk6JGVbRHJdO3JldHVybiBVbn19KCRlKSxKWyRlXShrZSkp''@;'; put 'put ''OmtlLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIEZlKGtlLCRlKXt2YXIgbXQ9NTtmdW5jdGlvbiBMdChHdCl7cmV0dXJuICRlLmxvbmdEYXRlRm9ybWF0KEd0KXx8R3R9Zm9yKHcubGFzdEluZGV4PTA7bXQ+PTAmJncudGVzdChrZSk7KWtlPWtlLnJlcGxhY2UodyxMdCks''@;'; put 'put ''dy5sYXN0SW5kZXg9MCxtdC09MTtyZXR1cm4ga2V9dmFyIFRlPXt9O2Z1bmN0aW9uIHFlKGtlLCRlKXt2YXIgbXQ9a2UudG9Mb3dlckNhc2UoKTtUZVttdF09VGVbbXQrInMiXT1UZVskZV09a2V9ZnVuY3Rpb24gWGUoa2Upe3JldHVybiJzdHJpbmciPT10eXBlb2Yga2U/VGVba2VdfHxUZVtr''@;'; put 'put ''ZS50b0xvd2VyQ2FzZSgpXTp2b2lkIDB9ZnVuY3Rpb24gVWUoa2Upe3ZhciBtdCxMdCwkZT17fTtmb3IoTHQgaW4ga2UpTyhrZSxMdCkmJihtdD1YZShMdCkpJiYoJGVbbXRdPWtlW0x0XSk7cmV0dXJuICRlfXZhciBodD17fTtmdW5jdGlvbiBNZShrZSwkZSl7aHRba2VdPSRlfWZ1bmN0aW9u''@;'; put 'put ''IHplKGtlKXtyZXR1cm4ga2UlND09MCYma2UlMTAwIT0wfHxrZSU0MDA9PTB9ZnVuY3Rpb24gaXQoa2Upe3JldHVybiBrZTwwP01hdGguY2VpbChrZSl8fDA6TWF0aC5mbG9vcihrZSl9ZnVuY3Rpb24gdXQoa2Upe3ZhciAkZT0ra2UsbXQ9MDtyZXR1cm4gMCE9PSRlJiZpc0Zpbml0ZSgkZSkm''@;'; put 'put ''JihtdD1pdCgkZSkpLG10fWZ1bmN0aW9uIE10KGtlLCRlKXtyZXR1cm4gZnVuY3Rpb24obXQpe3JldHVybiBudWxsIT1tdD8oUHQodGhpcyxrZSxtdCkseC51cGRhdGVPZmZzZXQodGhpcywkZSksdGhpcyk6SHQodGhpcyxrZSl9fWZ1bmN0aW9uIEh0KGtlLCRlKXtyZXR1cm4ga2UuaXNWYWxp''@;'; put 'put ''ZCgpP2tlLl9kWyJnZXQiKyhrZS5faXNVVEM/IlVUQyI6IiIpKyRlXSgpOk5hTn1mdW5jdGlvbiBQdChrZSwkZSxtdCl7a2UuaXNWYWxpZCgpJiYhaXNOYU4obXQpJiYoIkZ1bGxZZWFyIj09PSRlJiZ6ZShrZS55ZWFyKCkpJiYxPT09a2UubW9udGgoKSYmMjk9PT1rZS5kYXRlKCk/KG10PXV0''@;'; put 'put ''KG10KSxrZS5fZFsic2V0Iisoa2UuX2lzVVRDPyJVVEMiOiIiKSskZV0obXQsa2UubW9udGgoKSxubyhtdCxrZS5tb250aCgpKSkpOmtlLl9kWyJzZXQiKyhrZS5faXNVVEM/IlVUQyI6IiIpKyRlXShtdCkpfXZhciBEdCxVdD0vXGQvLGJuPS9cZFxkLyxXbj0vXGR7M30vLGVuPS9cZHs0fS8s''@;'; put 'put ''JG49L1srLV0/XGR7Nn0vLE5uPS9cZFxkPy8sZnQ9L1xkXGRcZFxkPy8sZm49L1xkXGRcZFxkXGRcZD8vLGhuPS9cZHsxLDN9Lyx3dD0vXGR7MSw0fS8sWHQ9L1srLV0/XGR7MSw2fS8sX3Q9L1xkKy8sTnQ9L1srLV0/XGQrLyx2bj0vWnxbKy1dXGRcZDo/XGRcZC9naSxydD0vWnxbKy1dXGRc''@;'; put 'put ''ZCg/Ojo/XGRcZCk/L2dpLEp0PS9bMC05XXswLDI1Nn1bJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGMDdcdUZGMTAtXHVGRkVGXXsxLDI1Nn18W1x1MDYwMC1cdTA2RkZcL117MSwyNTZ9KFxzKj9bXHUwNjAwLVx1MDZGRl17MSwyNTZ9KXsx''@;'; put 'put ''LDJ9L2k7ZnVuY3Rpb24gcHQoa2UsJGUsbXQpe0R0W2tlXT1iKCRlKT8kZTpmdW5jdGlvbihMdCxHdCl7cmV0dXJuIEx0JiZtdD9tdDokZX19ZnVuY3Rpb24gWXQoa2UsJGUpe3JldHVybiBPKER0LGtlKT9EdFtrZV0oJGUuX3N0cmljdCwkZS5fbG9jYWxlKTpuZXcgUmVnRXhwKGZ1bmN0aW9u''@;'; put 'put ''IExuKGtlKXtyZXR1cm4genQoa2UucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csZnVuY3Rpb24oJGUsbXQsTHQsR3QsVW4pe3JldHVybiBtdHx8THR8fEd0fHxVbn0pKX0oa2UpKX1mdW5jdGlvbiB6dChrZSl7cmV0dXJuIGtl''@;'; put 'put ''LnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9RHQ9e307dmFyIHluPXt9O2Z1bmN0aW9uIHhuKGtlLCRlKXt2YXIgbXQsR3QsTHQ9JGU7Zm9yKCJzdHJpbmciPT10eXBlb2Yga2UmJihrZT1ba2VdKSxLKCRlKSYmKEx0PWZ1bmN0aW9uKFVuLERyKXtEclskZV09dXQo''@;'; put 'put ''VW4pfSksR3Q9a2UubGVuZ3RoLG10PTA7bXQ8R3Q7bXQrKyl5bltrZVttdF1dPUx0fWZ1bmN0aW9uIHNuKGtlLCRlKXt4bihrZSxmdW5jdGlvbihtdCxMdCxHdCxVbil7R3QuX3c9R3QuX3d8fHt9LCRlKG10LEd0Ll93LEd0LFVuKX0pfWZ1bmN0aW9uIEJuKGtlLCRlLG10KXtudWxsIT0kZSYm''@;'; put 'put ''Tyh5bixrZSkmJnluW2tlXSgkZSxtdC5fYSxtdCxrZSl9dmFyIEtyLE9uPTAsJHQ9MSxGbj0yLG5pPTMsbG49NCxqbj01LHFyPTYsZ2k9Nyx4cj04O2Z1bmN0aW9uIG5vKGtlLCRlKXtpZihpc05hTihrZSl8fGlzTmFOKCRlKSlyZXR1cm4gTmFOO3ZhciBtdD1mdW5jdGlvbiBVaShrZSwkZSl7''@;'; put 'put ''cmV0dXJuKGtlJSRlKyRlKSUkZX0oJGUsMTIpO3JldHVybiBrZSs9KCRlLW10KS8xMiwxPT09bXQ/emUoa2UpPzI5OjI4OjMxLW10JTclMn1Lcj1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9BcnJheS5wcm90b3R5cGUuaW5kZXhPZjpmdW5jdGlvbihrZSl7dmFyICRlO2ZvcigkZT0wOyRlPHRo''@;'; put 'put ''aXMubGVuZ3RoOysrJGUpaWYodGhpc1skZV09PT1rZSlyZXR1cm4gJGU7cmV0dXJuLTF9LGRlKCJNIixbIk1NIiwyXSwiTW8iLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSksZGUoIk1NTSIsMCwwLGZ1bmN0aW9uKGtlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhz''@;'; put 'put ''U2hvcnQodGhpcyxrZSl9KSxkZSgiTU1NTSIsMCwwLGZ1bmN0aW9uKGtlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsa2UpfSkscWUoIm1vbnRoIiwiTSIpLE1lKCJtb250aCIsOCkscHQoIk0iLE5uKSxwdCgiTU0iLE5uLGJuKSxwdCgiTU1NIixmdW5jdGlvbihrZSwk''@;'; put 'put ''ZSl7cmV0dXJuICRlLm1vbnRoc1Nob3J0UmVnZXgoa2UpfSkscHQoIk1NTU0iLGZ1bmN0aW9uKGtlLCRlKXtyZXR1cm4gJGUubW9udGhzUmVnZXgoa2UpfSkseG4oWyJNIiwiTU0iXSxmdW5jdGlvbihrZSwkZSl7JGVbJHRdPXV0KGtlKS0xfSkseG4oWyJNTU0iLCJNTU1NIl0sZnVuY3Rpb24o''@;'; put 'put ''a2UsJGUsbXQsTHQpe3ZhciBHdD1tdC5fbG9jYWxlLm1vbnRoc1BhcnNlKGtlLEx0LG10Ll9zdHJpY3QpO251bGwhPUd0PyRlWyR0XT1HdDpCKG10KS5pbnZhbGlkTW9udGg9a2V9KTt2YXIgRnI9IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2Vw''@;'; put 'put ''dGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIikscWk9Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLEppPS9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NPy8sYW89SnQscm89SnQ7ZnVuY3Rpb24g''@;'; put 'put ''aG8oa2UsJGUsbXQpe3ZhciBMdCxHdCxVbixEcj1rZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl9tb250aHNQYXJzZSlmb3IodGhpcy5fbW9udGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10sTHQ9MDtMdDwxMjsrK0x0''@;'; put 'put ''KVVuPWooWzJlMyxMdF0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbTHRdPXRoaXMubW9udGhzU2hvcnQoVW4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW0x0XT10aGlzLm1vbnRocyhVbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbXQ/Ik1N''@;'; put 'put ''TSI9PT0kZT8tMSE9PShHdD1Lci5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsRHIpKT9HdDpudWxsOi0xIT09KEd0PUtyLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLERyKSk/R3Q6bnVsbDoiTU1NIj09PSRlPy0xIT09KEd0PUtyLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxE''@;'; put 'put ''cikpfHwtMSE9PShHdD1Lci5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxEcikpP0d0Om51bGw6LTEhPT0oR3Q9S3IuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsRHIpKXx8LTEhPT0oR3Q9S3IuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLERyKSk/R3Q6bnVsbH1mdW5jdGlvbiBQ''@;'; put 'put ''aShrZSwkZSl7dmFyIG10O2lmKCFrZS5pc1ZhbGlkKCkpcmV0dXJuIGtlO2lmKCJzdHJpbmciPT10eXBlb2YgJGUpaWYoL15cZCskLy50ZXN0KCRlKSkkZT11dCgkZSk7ZWxzZSBpZighSygkZT1rZS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UoJGUpKSlyZXR1cm4ga2U7cmV0dXJuIG10PU1h''@;'; put 'put ''dGgubWluKGtlLmRhdGUoKSxubyhrZS55ZWFyKCksJGUpKSxrZS5fZFsic2V0Iisoa2UuX2lzVVRDPyJVVEMiOiIiKSsiTW9udGgiXSgkZSxtdCksa2V9ZnVuY3Rpb24gTG8oa2Upe3JldHVybiBudWxsIT1rZT8oUGkodGhpcyxrZSkseC51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcyk6SHQo''@;'; put 'put ''dGhpcywiTW9udGgiKX1mdW5jdGlvbiB1bCgpe2Z1bmN0aW9uIGtlKERyLHlvKXtyZXR1cm4geW8ubGVuZ3RoLURyLmxlbmd0aH12YXIgR3QsVW4sJGU9W10sbXQ9W10sTHQ9W107Zm9yKEd0PTA7R3Q8MTI7R3QrKylVbj1qKFsyZTMsR3RdKSwkZS5wdXNoKHRoaXMubW9udGhzU2hvcnQoVW4s''@;'; put 'put ''IiIpKSxtdC5wdXNoKHRoaXMubW9udGhzKFVuLCIiKSksTHQucHVzaCh0aGlzLm1vbnRocyhVbiwiIikpLEx0LnB1c2godGhpcy5tb250aHNTaG9ydChVbiwiIikpO2ZvcigkZS5zb3J0KGtlKSxtdC5zb3J0KGtlKSxMdC5zb3J0KGtlKSxHdD0wO0d0PDEyO0d0KyspJGVbR3RdPXp0KCRlW0d0''@;'; put 'put ''XSksbXRbR3RdPXp0KG10W0d0XSk7Zm9yKEd0PTA7R3Q8MjQ7R3QrKylMdFtHdF09enQoTHRbR3RdKTt0aGlzLl9tb250aHNSZWdleD1uZXcgUmVnRXhwKCJeKCIrTHQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9dGhpcy5fbW9udGhzUmVnZXgsdGhpcy5fbW9u''@;'; put 'put ''dGhzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK210LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIiskZS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gUmMoa2Upe3JldHVybiB6ZShrZSk/MzY2OjM2NX1kZSgiWSIs''@;'; put 'put ''MCwwLGZ1bmN0aW9uKCl7dmFyIGtlPXRoaXMueWVhcigpO3JldHVybiBrZTw9OTk5OT92KGtlLDQpOiIrIitrZX0pLGRlKDAsWyJZWSIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLnllYXIoKSUxMDB9KSxkZSgwLFsiWVlZWSIsNF0sMCwieWVhciIpLGRlKDAsWyJZWVlZWSIsNV0sMCwi''@;'; put 'put ''eWVhciIpLGRlKDAsWyJZWVlZWVkiLDYsITBdLDAsInllYXIiKSxxZSgieWVhciIsInkiKSxNZSgieWVhciIsMSkscHQoIlkiLE50KSxwdCgiWVkiLE5uLGJuKSxwdCgiWVlZWSIsd3QsZW4pLHB0KCJZWVlZWSIsWHQsJG4pLHB0KCJZWVlZWVkiLFh0LCRuKSx4bihbIllZWVlZIiwiWVlZWVlZ''@;'; put 'put ''Il0sT24pLHhuKCJZWVlZIixmdW5jdGlvbihrZSwkZSl7JGVbT25dPTI9PT1rZS5sZW5ndGg/eC5wYXJzZVR3b0RpZ2l0WWVhcihrZSk6dXQoa2UpfSkseG4oIllZIixmdW5jdGlvbihrZSwkZSl7JGVbT25dPXgucGFyc2VUd29EaWdpdFllYXIoa2UpfSkseG4oIlkiLGZ1bmN0aW9uKGtlLCRl''@;'; put 'put ''KXskZVtPbl09cGFyc2VJbnQoa2UsMTApfSkseC5wYXJzZVR3b0RpZ2l0WWVhcj1mdW5jdGlvbihrZSl7cmV0dXJuIHV0KGtlKSsodXQoa2UpPjY4PzE5MDA6MmUzKX07dmFyIE4wPU10KCJGdWxsWWVhciIsITApO2Z1bmN0aW9uIGsyKGtlLCRlLG10LEx0LEd0LFVuLERyKXt2YXIgeW87cmV0''@;'; put 'put ''dXJuIGtlPDEwMCYma2U+PTA/KHlvPW5ldyBEYXRlKGtlKzQwMCwkZSxtdCxMdCxHdCxVbixEciksaXNGaW5pdGUoeW8uZ2V0RnVsbFllYXIoKSkmJnlvLnNldEZ1bGxZZWFyKGtlKSk6eW89bmV3IERhdGUoa2UsJGUsbXQsTHQsR3QsVW4sRHIpLHlvfWZ1bmN0aW9uIGUwKGtlKXt2YXIgJGUs''@;'; put 'put ''bXQ7cmV0dXJuIGtlPDEwMCYma2U+PTA/KChtdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKVswXT1rZSs0MDAsJGU9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCxtdCkpLGlzRmluaXRlKCRlLmdldFVUQ0Z1bGxZZWFyKCkpJiYkZS5zZXRVVENGdWxsWWVhcihr''@;'; put 'put ''ZSkpOiRlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsYXJndW1lbnRzKSksJGV9ZnVuY3Rpb24geHUoa2UsJGUsbXQpe3ZhciBMdD03KyRlLW10O3JldHVybi0oNytlMChrZSwwLEx0KS5nZXRVVENEYXkoKS0kZSklNytMdC0xfWZ1bmN0aW9uIGZzKGtlLCRlLG10LEx0LEd0KXt2YXIg''@;'; put 'put ''ZXMsenMseW89MSs3KigkZS0xKSsoNyttdC1MdCklNyt4dShrZSxMdCxHdCk7cmV0dXJuIHlvPD0wP3pzPVJjKGVzPWtlLTEpK3lvOnlvPlJjKGtlKT8oZXM9a2UrMSx6cz15by1SYyhrZSkpOihlcz1rZSx6cz15bykse3llYXI6ZXMsZGF5T2ZZZWFyOnpzfX1mdW5jdGlvbiBQYShrZSwkZSxt''@;'; put 'put ''dCl7dmFyIFVuLERyLEx0PXh1KGtlLnllYXIoKSwkZSxtdCksR3Q9TWF0aC5mbG9vcigoa2UuZGF5T2ZZZWFyKCktTHQtMSkvNykrMTtyZXR1cm4gR3Q8MT9Vbj1HdCtTcihEcj1rZS55ZWFyKCktMSwkZSxtdCk6R3Q+U3Ioa2UueWVhcigpLCRlLG10KT8oVW49R3QtU3Ioa2UueWVhcigpLCRl''@;'; put 'put ''LG10KSxEcj1rZS55ZWFyKCkrMSk6KERyPWtlLnllYXIoKSxVbj1HdCkse3dlZWs6VW4seWVhcjpEcn19ZnVuY3Rpb24gU3Ioa2UsJGUsbXQpe3ZhciBMdD14dShrZSwkZSxtdCksR3Q9eHUoa2UrMSwkZSxtdCk7cmV0dXJuKFJjKGtlKS1MdCtHdCkvN31kZSgidyIsWyJ3dyIsMl0sIndvIiwi''@;'; put 'put ''d2VlayIpLGRlKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIikscWUoIndlZWsiLCJ3IikscWUoImlzb1dlZWsiLCJXIiksTWUoIndlZWsiLDUpLE1lKCJpc29XZWVrIiw1KSxwdCgidyIsTm4pLHB0KCJ3dyIsTm4sYm4pLHB0KCJXIixObikscHQoIldXIixObixibiksc24oWyJ3Iiwid3ci''@;'; put 'put ''LCJXIiwiV1ciXSxmdW5jdGlvbihrZSwkZSxtdCxMdCl7JGVbTHQuc3Vic3RyKDAsMSldPXV0KGtlKX0pO2Z1bmN0aW9uIFNhKGtlLCRlKXtyZXR1cm4ga2Uuc2xpY2UoJGUsNykuY29uY2F0KGtlLnNsaWNlKDAsJGUpKX1kZSgiZCIsMCwiZG8iLCJkYXkiKSxkZSgiZGQiLDAsMCxmdW5jdGlv''@;'; put 'put ''bihrZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsa2UpfSksZGUoImRkZCIsMCwwLGZ1bmN0aW9uKGtlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLGtlKX0pLGRlKCJkZGRkIiwwLDAsZnVuY3Rpb24oa2Upe3JldHVybiB0''@;'; put 'put ''aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLGtlKX0pLGRlKCJlIiwwLDAsIndlZWtkYXkiKSxkZSgiRSIsMCwwLCJpc29XZWVrZGF5IikscWUoImRheSIsImQiKSxxZSgid2Vla2RheSIsImUiKSxxZSgiaXNvV2Vla2RheSIsIkUiKSxNZSgiZGF5IiwxMSksTWUoIndlZWtkYXkiLDEx''@;'; put 'put ''KSxNZSgiaXNvV2Vla2RheSIsMTEpLHB0KCJkIixObikscHQoImUiLE5uKSxwdCgiRSIsTm4pLHB0KCJkZCIsZnVuY3Rpb24oa2UsJGUpe3JldHVybiAkZS53ZWVrZGF5c01pblJlZ2V4KGtlKX0pLHB0KCJkZGQiLGZ1bmN0aW9uKGtlLCRlKXtyZXR1cm4gJGUud2Vla2RheXNTaG9ydFJlZ2V4''@;'; put 'put ''KGtlKX0pLHB0KCJkZGRkIixmdW5jdGlvbihrZSwkZSl7cmV0dXJuICRlLndlZWtkYXlzUmVnZXgoa2UpfSksc24oWyJkZCIsImRkZCIsImRkZGQiXSxmdW5jdGlvbihrZSwkZSxtdCxMdCl7dmFyIEd0PW10Ll9sb2NhbGUud2Vla2RheXNQYXJzZShrZSxMdCxtdC5fc3RyaWN0KTtudWxsIT1H''@;'; put 'put ''dD8kZS5kPUd0OkIobXQpLmludmFsaWRXZWVrZGF5PWtlfSksc24oWyJkIiwiZSIsIkUiXSxmdW5jdGlvbihrZSwkZSxtdCxMdCl7JGVbTHRdPXV0KGtlKX0pO3ZhciBGaD0iU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJf''@;'; put 'put ''IiksRXU9IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSxBcz0iU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbjA9SnQscWE9SnQsdmM9SnQ7ZnVuY3Rpb24gcjAoa2UsJGUsbXQpe3ZhciBMdCxHdCxVbixEcj1rZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lm''@;'; put 'put ''KCF0aGlzLl93ZWVrZGF5c1BhcnNlKWZvcih0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLEx0PTA7THQ8NzsrK0x0KVVuPWooWzJlMywxXSkuZGF5KEx0KSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW0x0''@;'; put 'put ''XT10aGlzLndlZWtkYXlzTWluKFVuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtMdF09dGhpcy53ZWVrZGF5c1Nob3J0KFVuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3dlZWtkYXlzUGFyc2VbTHRdPXRoaXMud2Vla2RheXMoVW4sIiIp''@;'; put 'put ''LnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG10PyJkZGRkIj09PSRlPy0xIT09KEd0PUtyLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxEcikpP0d0Om51bGw6ImRkZCI9PT0kZT8tMSE9PShHdD1Lci5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxEcikpP0d0Om51bGw6LTEhPT0o''@;'; put 'put ''R3Q9S3IuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLERyKSk/R3Q6bnVsbDoiZGRkZCI9PT0kZT8tMSE9PShHdD1Lci5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsRHIpKXx8LTEhPT0oR3Q9S3IuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsRHIpKXx8LTEhPT0oR3Q9S3IuY2Fs''@;'; put 'put ''bCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLERyKSk/R3Q6bnVsbDoiZGRkIj09PSRlPy0xIT09KEd0PUtyLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLERyKSl8fC0xIT09KEd0PUtyLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxEcikpfHwtMSE9PShHdD1Lci5jYWxsKHRoaXMuX21p''@;'; put 'put ''bldlZWtkYXlzUGFyc2UsRHIpKT9HdDpudWxsOi0xIT09KEd0PUtyLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxEcikpfHwtMSE9PShHdD1Lci5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsRHIpKXx8LTEhPT0oR3Q9S3IuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsRHIpKT9H''@;'; put 'put ''dDpudWxsfWZ1bmN0aW9uIG8wKCl7ZnVuY3Rpb24ga2Uob2MsZjApe3JldHVybiBmMC5sZW5ndGgtb2MubGVuZ3RofXZhciBVbixEcix5byxlcyx6cywkZT1bXSxtdD1bXSxMdD1bXSxHdD1bXTtmb3IoVW49MDtVbjw3O1VuKyspRHI9aihbMmUzLDFdKS5kYXkoVW4pLHlvPXp0KHRoaXMud2Vl''@;'; put 'put ''a2RheXNNaW4oRHIsIiIpKSxlcz16dCh0aGlzLndlZWtkYXlzU2hvcnQoRHIsIiIpKSx6cz16dCh0aGlzLndlZWtkYXlzKERyLCIiKSksJGUucHVzaCh5byksbXQucHVzaChlcyksTHQucHVzaCh6cyksR3QucHVzaCh5byksR3QucHVzaChlcyksR3QucHVzaCh6cyk7JGUuc29ydChrZSksbXQu''@;'; put 'put ''c29ydChrZSksTHQuc29ydChrZSksR3Quc29ydChrZSksdGhpcy5fd2Vla2RheXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrR3Quam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5f''@;'; put 'put ''d2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitMdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIittdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNNaW5T''@;'; put 'put ''dHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrJGUuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIEkyKCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gUWkoa2UsJGUpe2RlKGtlLDAsMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0''@;'; put 'put ''aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksJGUpfSl9ZnVuY3Rpb24gWW4oa2UsJGUpe3JldHVybiAkZS5fbWVyaWRpZW1QYXJzZX1kZSgiSCIsWyJISCIsMl0sMCwiaG91ciIpLGRlKCJoIixbImhoIiwyXSwwLEkyKSxkZSgiayIsWyJrayIsMl0sMCxmdW5jdGlvbiBOaCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmhvdXJzKCl8fDI0fSksZGUoImhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrSTIuYXBwbHkodGhpcykrdih0aGlzLm1pbnV0ZXMoKSwyKX0pLGRlKCJobW1zcyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrSTIuYXBwbHkodGhpcykrdih0aGlzLm1pbnV0ZXMoKSwyKSt2KHRoaXMu''@;'; put 'put ''c2Vjb25kcygpLDIpfSksZGUoIkhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK3YodGhpcy5taW51dGVzKCksMil9KSxkZSgiSG1tc3MiLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKSt2KHRoaXMubWludXRlcygpLDIpK3YodGhpcy5zZWNvbmRz''@;'; put 'put ''KCksMil9KSxRaSgiYSIsITApLFFpKCJBIiwhMSkscWUoImhvdXIiLCJoIiksTWUoImhvdXIiLDEzKSxwdCgiYSIsWW4pLHB0KCJBIixZbikscHQoIkgiLE5uKSxwdCgiaCIsTm4pLHB0KCJrIixObikscHQoIkhIIixObixibikscHQoImhoIixObixibikscHQoImtrIixObixibikscHQoImht''@;'; put 'put ''bSIsZnQpLHB0KCJobW1zcyIsZm4pLHB0KCJIbW0iLGZ0KSxwdCgiSG1tc3MiLGZuKSx4bihbIkgiLCJISCJdLG5pKSx4bihbImsiLCJrayJdLGZ1bmN0aW9uKGtlLCRlLG10KXt2YXIgTHQ9dXQoa2UpOyRlW25pXT0yND09PUx0PzA6THR9KSx4bihbImEiLCJBIl0sZnVuY3Rpb24oa2UsJGUs''@;'; put 'put ''bXQpe210Ll9pc1BtPW10Ll9sb2NhbGUuaXNQTShrZSksbXQuX21lcmlkaWVtPWtlfSkseG4oWyJoIiwiaGgiXSxmdW5jdGlvbihrZSwkZSxtdCl7JGVbbmldPXV0KGtlKSxCKG10KS5iaWdIb3VyPSEwfSkseG4oImhtbSIsZnVuY3Rpb24oa2UsJGUsbXQpe3ZhciBMdD1rZS5sZW5ndGgtMjsk''@;'; put 'put ''ZVtuaV09dXQoa2Uuc3Vic3RyKDAsTHQpKSwkZVtsbl09dXQoa2Uuc3Vic3RyKEx0KSksQihtdCkuYmlnSG91cj0hMH0pLHhuKCJobW1zcyIsZnVuY3Rpb24oa2UsJGUsbXQpe3ZhciBMdD1rZS5sZW5ndGgtNCxHdD1rZS5sZW5ndGgtMjskZVtuaV09dXQoa2Uuc3Vic3RyKDAsTHQpKSwkZVts''@;'; put 'put ''bl09dXQoa2Uuc3Vic3RyKEx0LDIpKSwkZVtqbl09dXQoa2Uuc3Vic3RyKEd0KSksQihtdCkuYmlnSG91cj0hMH0pLHhuKCJIbW0iLGZ1bmN0aW9uKGtlLCRlLG10KXt2YXIgTHQ9a2UubGVuZ3RoLTI7JGVbbmldPXV0KGtlLnN1YnN0cigwLEx0KSksJGVbbG5dPXV0KGtlLnN1YnN0cihMdCkp''@;'; put 'put ''fSkseG4oIkhtbXNzIixmdW5jdGlvbihrZSwkZSxtdCl7dmFyIEx0PWtlLmxlbmd0aC00LEd0PWtlLmxlbmd0aC0yOyRlW25pXT11dChrZS5zdWJzdHIoMCxMdCkpLCRlW2xuXT11dChrZS5zdWJzdHIoTHQsMikpLCRlW2puXT11dChrZS5zdWJzdHIoR3QpKX0pO3ZhciBvcz1NdCgiSG91cnMi''@;'; put 'put ''LCEwKTt2YXIgRGEsSGE9e2NhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVF''@;'; put 'put ''bHNlOiJMIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUUzoiaDptbTpzcyBBIixMVDoiaDptbSBBIixMOiJNTS9ERC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxpbnZhbGlkRGF0ZToiSW52YWxp''@;'; put 'put ''ZCBkYXRlIixvcmRpbmFsOiIlZCIsZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFu''@;'; put 'put ''IGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIix3OiJhIHdlZWsiLHd3OiIlZCB3ZWVrcyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxtb250aHM6RnIsbW9udGhzU2hvcnQ6cWksd2Vlazp7ZG93OjAsZG95OjZ9''@;'; put 'put ''LHdlZWtkYXlzOkZoLHdlZWtkYXlzTWluOkFzLHdlZWtkYXlzU2hvcnQ6RXUsbWVyaWRpZW1QYXJzZTovW2FwXVwuP20/XC4/L2l9LCRvPXt9LFYwPXt9O2Z1bmN0aW9uIFZoKGtlLCRlKXt2YXIgbXQsTHQ9TWF0aC5taW4oa2UubGVuZ3RoLCRlLmxlbmd0aCk7Zm9yKG10PTA7bXQ8THQ7bXQr''@;'; put 'put ''PTEpaWYoa2VbbXRdIT09JGVbbXRdKXJldHVybiBtdDtyZXR1cm4gTHR9ZnVuY3Rpb24gQmgoa2Upe3JldHVybiBrZSYma2UudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCJfIiwiLSIpfWZ1bmN0aW9uIGZyKGtlKXt2YXIgJGU9bnVsbDtpZih2b2lkIDA9PT0kb1trZV0mJmF0JiZhdC5leHBvcnRz''@;'; put 'put ''JiZmdW5jdGlvbiBiYyhrZSl7cmV0dXJuIG51bGwhPWtlLm1hdGNoKCJeW14vXFxcXF0qJCIpfShrZSkpdHJ5eyRlPURhLl9hYmJyLEYoNDY3MDApKCIuLyIra2UpLEhvKCRlKX1jYXRjaHskb1trZV09bnVsbH1yZXR1cm4gJG9ba2VdfWZ1bmN0aW9uIEhvKGtlLCRlKXt2YXIgbXQ7cmV0dXJu''@;'; put 'put ''IGtlJiYoKG10PXooJGUpP2x1KGtlKTp5YyhrZSwkZSkpP0RhPW10OnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkxvY2FsZSAiK2tlKyIgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PyIpKSxEYS5fYWJicn1mdW5jdGlvbiB5Yyhr''@;'; put 'put ''ZSwkZSl7aWYobnVsbCE9PSRlKXt2YXIgbXQsTHQ9SGE7aWYoJGUuYWJicj1rZSxudWxsIT0kb1trZV0pRygiZGVmaW5lTG9jYWxlT3ZlcnJpZGUiLCJ1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVu''@;'; put 'put ''dC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4iKSxMdD0kb1trZV0u''@;'; put 'put ''X2NvbmZpZztlbHNlIGlmKG51bGwhPSRlLnBhcmVudExvY2FsZSlpZihudWxsIT0kb1skZS5wYXJlbnRMb2NhbGVdKUx0PSRvWyRlLnBhcmVudExvY2FsZV0uX2NvbmZpZztlbHNle2lmKG51bGw9PShtdD1mcigkZS5wYXJlbnRMb2NhbGUpKSlyZXR1cm4gVjBbJGUucGFyZW50TG9jYWxlXXx8''@;'; put 'put ''KFYwWyRlLnBhcmVudExvY2FsZV09W10pLFYwWyRlLnBhcmVudExvY2FsZV0ucHVzaCh7bmFtZTprZSxjb25maWc6JGV9KSxudWxsO0x0PW10Ll9jb25maWd9cmV0dXJuICRvW2tlXT1uZXcgTihIKEx0LCRlKSksVjBba2VdJiZWMFtrZV0uZm9yRWFjaChmdW5jdGlvbihHdCl7eWMoR3QubmFt''@;'; put 'put ''ZSxHdC5jb25maWcpfSksSG8oa2UpLCRvW2tlXX1yZXR1cm4gZGVsZXRlICRvW2tlXSxudWxsfWZ1bmN0aW9uIGx1KGtlKXt2YXIgJGU7aWYoa2UmJmtlLl9sb2NhbGUmJmtlLl9sb2NhbGUuX2FiYnImJihrZT1rZS5fbG9jYWxlLl9hYmJyKSwha2UpcmV0dXJuIERhO2lmKCFsZShrZSkpe2lm''@;'; put 'put ''KCRlPWZyKGtlKSlyZXR1cm4gJGU7a2U9W2tlXX1yZXR1cm4gZnVuY3Rpb24gb2woa2Upe2Zvcih2YXIgbXQsTHQsR3QsVW4sJGU9MDskZTxrZS5sZW5ndGg7KXtmb3IobXQ9KFVuPUJoKGtlWyRlXSkuc3BsaXQoIi0iKSkubGVuZ3RoLEx0PShMdD1CaChrZVskZSsxXSkpP0x0LnNwbGl0KCIt''@;'; put 'put ''Iik6bnVsbDttdD4wOyl7aWYoR3Q9ZnIoVW4uc2xpY2UoMCxtdCkuam9pbigiLSIpKSlyZXR1cm4gR3Q7aWYoTHQmJkx0Lmxlbmd0aD49bXQmJlZoKFVuLEx0KT49bXQtMSlicmVhazttdC0tfSRlKyt9cmV0dXJuIERhfShrZSl9ZnVuY3Rpb24gTDIoa2Upe3ZhciAkZSxtdD1rZS5fYTtyZXR1''@;'; put 'put ''cm4gbXQmJi0yPT09QihrZSkub3ZlcmZsb3cmJigkZT1tdFskdF08MHx8bXRbJHRdPjExPyR0Om10W0ZuXTwxfHxtdFtGbl0+bm8obXRbT25dLG10WyR0XSk/Rm46bXRbbmldPDB8fG10W25pXT4yNHx8MjQ9PT1tdFtuaV0mJigwIT09bXRbbG5dfHwwIT09bXRbam5dfHwwIT09bXRbcXJdKT9u''@;'; put 'put ''aTptdFtsbl08MHx8bXRbbG5dPjU5P2xuOm10W2puXTwwfHxtdFtqbl0+NTk/am46bXRbcXJdPDB8fG10W3FyXT45OTk/cXI6LTEsQihrZSkuX292ZXJmbG93RGF5T2ZZZWFyJiYoJGU8T258fCRlPkZuKSYmKCRlPUZuKSxCKGtlKS5fb3ZlcmZsb3dXZWVrcyYmLTE9PT0kZSYmKCRlPWdpKSxC''@;'; put 'put ''KGtlKS5fb3ZlcmZsb3dXZWVrZGF5JiYtMT09PSRlJiYoJGU9eHIpLEIoa2UpLm92ZXJmbG93PSRlKSxrZX12YXIgbWk9L15ccyooKD86WystXVxkezZ9fFxkezR9KS0oPzpcZFxkLVxkXGR8V1xkXGQtXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzo6XGRcZCg/OjpcZFxk''@;'; put 'put ''KD86Wy4sXVxkKyk/KT8pPykoWystXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLHhkPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkfCkpKD86KFR8ICkoXGRcZCg/OlxkXGQoPzpcZFxkKD86Wy4sXVxkKyk/KT8pPykoWyst''@;'; put 'put ''XVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLCQ3PS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLEIwPVtbIllZWVlZWS1NTS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10s''@;'; put 'put ''WyJHR0dHLVtXXVdXIiwvXGR7NH0tV1xkXGQvLCExXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0iLC9cZHs0fS1cZFxkLywhMV0sWyJZWVlZWVlNTUREIiwvWystXVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10s''@;'; put 'put ''WyJHR0dHW1ddV1ciLC9cZHs0fVdcZHsyfS8sITFdLFsiWVlZWURERCIsL1xkezd9L10sWyJZWVlZTU0iLC9cZHs2fS8sITFdLFsiWVlZWSIsL1xkezR9LywhMV1dLEhzPVtbIkhIOm1tOnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxk''@;'; put 'put ''OlxkXGQsXGQrL10sWyJISDptbTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEhtbXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEhtbXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhI''@;'; put 'put ''bW0iLC9cZFxkXGRcZC9dLFsiSEgiLC9cZFxkL11dLG5tPS9eXC8/RGF0ZVwoKC0/XGQrKS9pLGMzPS9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsy''@;'; put 'put ''LDR9KVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXGR7NH0pKSQvLGpoPXtVVDowLEdNVDowLEVEVDotMjQwLEVTVDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgw''@;'; put 'put ''fTtmdW5jdGlvbiBOcyhrZSl7dmFyICRlLG10LFVuLERyLHlvLGVzLEx0PWtlLl9pLEd0PW1pLmV4ZWMoTHQpfHx4ZC5leGVjKEx0KSx6cz1CMC5sZW5ndGgsb2M9SHMubGVuZ3RoO2lmKEd0KXtmb3IoQihrZSkuaXNvPSEwLCRlPTAsbXQ9enM7JGU8bXQ7JGUrKylpZihCMFskZV1bMV0uZXhl''@;'; put 'put ''YyhHdFsxXSkpe0RyPUIwWyRlXVswXSxVbj0hMSE9PUIwWyRlXVsyXTticmVha31pZihudWxsPT1EcilyZXR1cm4gdm9pZChrZS5faXNWYWxpZD0hMSk7aWYoR3RbM10pe2ZvcigkZT0wLG10PW9jOyRlPG10OyRlKyspaWYoSHNbJGVdWzFdLmV4ZWMoR3RbM10pKXt5bz0oR3RbMl18fCIgIikr''@;'; put 'put ''SHNbJGVdWzBdO2JyZWFrfWlmKG51bGw9PXlvKXJldHVybiB2b2lkKGtlLl9pc1ZhbGlkPSExKX1pZighVW4mJm51bGwhPXlvKXJldHVybiB2b2lkKGtlLl9pc1ZhbGlkPSExKTtpZihHdFs0XSl7aWYoISQ3LmV4ZWMoR3RbNF0pKXJldHVybiB2b2lkKGtlLl9pc1ZhbGlkPSExKTtlcz0iWiJ9''@;'; put 'put ''a2UuX2Y9RHIrKHlvfHwiIikrKGVzfHwiIiksczAoa2UpfWVsc2Uga2UuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gbnMoa2Upe3ZhciAkZT1wYXJzZUludChrZSwxMCk7cmV0dXJuICRlPD00OT8yZTMrJGU6JGU8PTk5OT8xOTAwKyRlOiRlfWZ1bmN0aW9uIFdzKGtlKXt2YXIgbXQsJGU9YzMuZXhl''@;'; put 'put ''YyhmdW5jdGlvbiBoNChrZSl7cmV0dXJuIGtlLnJlcGxhY2UoL1woW14oKV0qXCl8W1xuXHRdL2csIiAiKS5yZXBsYWNlKC8oXHNccyspL2csIiAiKS5yZXBsYWNlKC9eXHNccyovLCIiKS5yZXBsYWNlKC9cc1xzKiQvLCIiKX0oa2UuX2kpKTtpZigkZSl7aWYobXQ9ZnVuY3Rpb24gcTcoa2Us''@;'; put 'put ''JGUsbXQsTHQsR3QsVW4pe3ZhciBEcj1bbnMoa2UpLHFpLmluZGV4T2YoJGUpLHBhcnNlSW50KG10LDEwKSxwYXJzZUludChMdCwxMCkscGFyc2VJbnQoR3QsMTApXTtyZXR1cm4gVW4mJkRyLnB1c2gocGFyc2VJbnQoVW4sMTApKSxEcn0oJGVbNF0sJGVbM10sJGVbMl0sJGVbNV0sJGVbNl0s''@;'; put 'put ''JGVbN10pLCFmdW5jdGlvbiBzcyhrZSwkZSxtdCl7cmV0dXJuIWtlfHxFdS5pbmRleE9mKGtlKT09PW5ldyBEYXRlKCRlWzBdLCRlWzFdLCRlWzJdKS5nZXREYXkoKXx8KEIobXQpLndlZWtkYXlNaXNtYXRjaD0hMCxtdC5faXNWYWxpZD0hMSwhMSl9KCRlWzFdLG10LGtlKSlyZXR1cm47a2Uu''@;'; put 'put ''X2E9bXQsa2UuX3R6bT1mdW5jdGlvbiBkaShrZSwkZSxtdCl7aWYoa2UpcmV0dXJuIGpoW2tlXTtpZigkZSlyZXR1cm4gMDt2YXIgTHQ9cGFyc2VJbnQobXQsMTApLEd0PUx0JTEwMDtyZXR1cm4oTHQtR3QpLzEwMCo2MCtHdH0oJGVbOF0sJGVbOV0sJGVbMTBdKSxrZS5fZD1lMC5hcHBseShu''@;'; put 'put ''dWxsLGtlLl9hKSxrZS5fZC5zZXRVVENNaW51dGVzKGtlLl9kLmdldFVUQ01pbnV0ZXMoKS1rZS5fdHptKSxCKGtlKS5yZmMyODIyPSEwfWVsc2Uga2UuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gT2koa2UsJGUsbXQpe3JldHVybiBrZT8/JGU/P210fWZ1bmN0aW9uIGN1KGtlKXt2YXIgJGUsbXQs''@;'; put 'put ''R3QsVW4sRHIsTHQ9W107aWYoIWtlLl9kKXtmb3IoR3Q9ZnVuY3Rpb24gcm0oa2Upe3ZhciAkZT1uZXcgRGF0ZSh4Lm5vdygpKTtyZXR1cm4ga2UuX3VzZVVUQz9bJGUuZ2V0VVRDRnVsbFllYXIoKSwkZS5nZXRVVENNb250aCgpLCRlLmdldFVUQ0RhdGUoKV06WyRlLmdldEZ1bGxZZWFyKCks''@;'; put 'put ''JGUuZ2V0TW9udGgoKSwkZS5nZXREYXRlKCldfShrZSksa2UuX3cmJm51bGw9PWtlLl9hW0ZuXSYmbnVsbD09a2UuX2FbJHRdJiZmdW5jdGlvbiBFZChrZSl7dmFyICRlLG10LEx0LEd0LFVuLERyLHlvLGVzLHpzO251bGwhPSgkZT1rZS5fdykuR0d8fG51bGwhPSRlLld8fG51bGwhPSRlLkU/''@;'; put 'put ''KFVuPTEsRHI9NCxtdD1PaSgkZS5HRyxrZS5fYVtPbl0sUGEoY2EoKSwxLDQpLnllYXIpLEx0PU9pKCRlLlcsMSksKChHdD1PaSgkZS5FLDEpKTwxfHxHdD43KSYmKGVzPSEwKSk6KFVuPWtlLl9sb2NhbGUuX3dlZWsuZG93LERyPWtlLl9sb2NhbGUuX3dlZWsuZG95LHpzPVBhKGNhKCksVW4s''@;'; put 'put ''RHIpLG10PU9pKCRlLmdnLGtlLl9hW09uXSx6cy55ZWFyKSxMdD1PaSgkZS53LHpzLndlZWspLG51bGwhPSRlLmQ/KChHdD0kZS5kKTwwfHxHdD42KSYmKGVzPSEwKTpudWxsIT0kZS5lPyhHdD0kZS5lK1VuLCgkZS5lPDB8fCRlLmU+NikmJihlcz0hMCkpOkd0PVVuKSxMdDwxfHxMdD5Tciht''@;'; put 'put ''dCxVbixEcik/QihrZSkuX292ZXJmbG93V2Vla3M9ITA6bnVsbCE9ZXM/QihrZSkuX292ZXJmbG93V2Vla2RheT0hMDooeW89ZnMobXQsTHQsR3QsVW4sRHIpLGtlLl9hW09uXT15by55ZWFyLGtlLl9kYXlPZlllYXI9eW8uZGF5T2ZZZWFyKX0oa2UpLG51bGwhPWtlLl9kYXlPZlllYXImJihE''@;'; put 'put ''cj1PaShrZS5fYVtPbl0sR3RbT25dKSwoa2UuX2RheU9mWWVhcj5SYyhEcil8fDA9PT1rZS5fZGF5T2ZZZWFyKSYmKEIoa2UpLl9vdmVyZmxvd0RheU9mWWVhcj0hMCksbXQ9ZTAoRHIsMCxrZS5fZGF5T2ZZZWFyKSxrZS5fYVskdF09bXQuZ2V0VVRDTW9udGgoKSxrZS5fYVtGbl09bXQuZ2V0''@;'; put 'put ''VVRDRGF0ZSgpKSwkZT0wOyRlPDMmJm51bGw9PWtlLl9hWyRlXTsrKyRlKWtlLl9hWyRlXT1MdFskZV09R3RbJGVdO2Zvcig7JGU8NzskZSsrKWtlLl9hWyRlXT1MdFskZV09bnVsbD09a2UuX2FbJGVdPzI9PT0kZT8xOjA6a2UuX2FbJGVdOzI0PT09a2UuX2FbbmldJiYwPT09a2UuX2FbbG5d''@;'; put 'put ''JiYwPT09a2UuX2Fbam5dJiYwPT09a2UuX2FbcXJdJiYoa2UuX25leHREYXk9ITAsa2UuX2FbbmldPTApLGtlLl9kPShrZS5fdXNlVVRDP2UwOmsyKS5hcHBseShudWxsLEx0KSxVbj1rZS5fdXNlVVRDP2tlLl9kLmdldFVUQ0RheSgpOmtlLl9kLmdldERheSgpLG51bGwhPWtlLl90em0mJmtl''@;'; put 'put ''Ll9kLnNldFVUQ01pbnV0ZXMoa2UuX2QuZ2V0VVRDTWludXRlcygpLWtlLl90em0pLGtlLl9uZXh0RGF5JiYoa2UuX2FbbmldPTI0KSxrZS5fdyYmdHlwZW9mIGtlLl93LmQ8InUiJiZrZS5fdy5kIT09VW4mJihCKGtlKS53ZWVrZGF5TWlzbWF0Y2g9ITApfX1mdW5jdGlvbiBzMChrZSl7aWYo''@;'; put 'put ''a2UuX2YhPT14LklTT184NjAxKWlmKGtlLl9mIT09eC5SRkNfMjgyMil7a2UuX2E9W10sQihrZSkuZW1wdHk9ITA7dmFyIG10LEx0LEd0LFVuLERyLHpzLG9jLCRlPSIiK2tlLl9pLHlvPSRlLmxlbmd0aCxlcz0wO2ZvcihvYz0oR3Q9RmUoa2UuX2Ysa2UuX2xvY2FsZSkubWF0Y2gocCl8fFtd''@;'; put 'put ''KS5sZW5ndGgsbXQ9MDttdDxvYzttdCsrKShMdD0oJGUubWF0Y2goWXQoVW49R3RbbXRdLGtlKSl8fFtdKVswXSkmJigoRHI9JGUuc3Vic3RyKDAsJGUuaW5kZXhPZihMdCkpKS5sZW5ndGg+MCYmQihrZSkudW51c2VkSW5wdXQucHVzaChEciksJGU9JGUuc2xpY2UoJGUuaW5kZXhPZihMdCkr''@;'; put 'put ''THQubGVuZ3RoKSxlcys9THQubGVuZ3RoKSxuZVtVbl0/KEx0P0Ioa2UpLmVtcHR5PSExOkIoa2UpLnVudXNlZFRva2Vucy5wdXNoKFVuKSxCbihVbixMdCxrZSkpOmtlLl9zdHJpY3QmJiFMdCYmQihrZSkudW51c2VkVG9rZW5zLnB1c2goVW4pO0Ioa2UpLmNoYXJzTGVmdE92ZXI9eW8tZXMs''@;'; put 'put ''JGUubGVuZ3RoPjAmJkIoa2UpLnVudXNlZElucHV0LnB1c2goJGUpLGtlLl9hW25pXTw9MTImJiEwPT09QihrZSkuYmlnSG91ciYma2UuX2FbbmldPjAmJihCKGtlKS5iaWdIb3VyPXZvaWQgMCksQihrZSkucGFyc2VkRGF0ZVBhcnRzPWtlLl9hLnNsaWNlKDApLEIoa2UpLm1lcmlkaWVtPWtl''@;'; put 'put ''Ll9tZXJpZGllbSxrZS5fYVtuaV09ZnVuY3Rpb24gazEoa2UsJGUsbXQpe3ZhciBMdDtyZXR1cm4gbnVsbD09bXQ/JGU6bnVsbCE9a2UubWVyaWRpZW1Ib3VyP2tlLm1lcmlkaWVtSG91cigkZSxtdCk6KG51bGwhPWtlLmlzUE0mJigoTHQ9a2UuaXNQTShtdCkpJiYkZTwxMiYmKCRlKz0xMiks''@;'; put 'put ''IUx0JiYxMj09PSRlJiYoJGU9MCkpLCRlKX0oa2UuX2xvY2FsZSxrZS5fYVtuaV0sa2UuX21lcmlkaWVtKSxudWxsIT09KHpzPUIoa2UpLmVyYSkmJihrZS5fYVtPbl09a2UuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoenMsa2UuX2FbT25dKSksY3Uoa2UpLEwyKGtlKX1lbHNlIFdzKGtlKTtl''@;'; put 'put ''bHNlIE5zKGtlKX1mdW5jdGlvbiBpbShrZSl7dmFyICRlPWtlLl9pLG10PWtlLl9mO3JldHVybiBrZS5fbG9jYWxlPWtlLl9sb2NhbGV8fGx1KGtlLl9sKSxudWxsPT09JGV8fHZvaWQgMD09PW10JiYiIj09PSRlP1Uoe251bGxJbnB1dDohMH0pOigic3RyaW5nIj09dHlwZW9mICRlJiYoa2Uu''@;'; put 'put ''X2k9JGU9a2UuX2xvY2FsZS5wcmVwYXJzZSgkZSkpLHNlKCRlKT9uZXcgb2UoTDIoJGUpKTooSSgkZSk/a2UuX2Q9JGU6bGUobXQpP2Z1bmN0aW9uIGt1KGtlKXt2YXIgJGUsbXQsTHQsR3QsVW4sRHIseW89ITEsZXM9a2UuX2YubGVuZ3RoO2lmKDA9PT1lcylyZXR1cm4gQihrZSkuaW52YWxp''@;'; put 'put ''ZEZvcm1hdD0hMCx2b2lkKGtlLl9kPW5ldyBEYXRlKE5hTikpO2ZvcihHdD0wO0d0PGVzO0d0KyspVW49MCxEcj0hMSwkZT10ZSh7fSxrZSksbnVsbCE9a2UuX3VzZVVUQyYmKCRlLl91c2VVVEM9a2UuX3VzZVVUQyksJGUuX2Y9a2UuX2ZbR3RdLHMwKCRlKSxYKCRlKSYmKERyPSEwKSxVbis9''@;'; put 'put ''QigkZSkuY2hhcnNMZWZ0T3ZlcixVbis9MTAqQigkZSkudW51c2VkVG9rZW5zLmxlbmd0aCxCKCRlKS5zY29yZT1Vbix5bz9VbjxMdCYmKEx0PVVuLG10PSRlKToobnVsbD09THR8fFVuPEx0fHxEcikmJihMdD1VbixtdD0kZSxEciYmKHlvPSEwKSk7RShrZSxtdHx8JGUpfShrZSk6bXQ/czAo''@;'; put 'put ''a2UpOmZ1bmN0aW9uIG9tKGtlKXt2YXIgJGU9a2UuX2k7eigkZSk/a2UuX2Q9bmV3IERhdGUoeC5ub3coKSk6SSgkZSk/a2UuX2Q9bmV3IERhdGUoJGUudmFsdWVPZigpKToic3RyaW5nIj09dHlwZW9mICRlP2Z1bmN0aW9uIE9vKGtlKXt2YXIgJGU9bm0uZXhlYyhrZS5faSk7bnVsbD09PSRl''@;'; put 'put ''PyhOcyhrZSksITE9PT1rZS5faXNWYWxpZCYmKGRlbGV0ZSBrZS5faXNWYWxpZCxXcyhrZSksITE9PT1rZS5faXNWYWxpZCYmKGRlbGV0ZSBrZS5faXNWYWxpZCxrZS5fc3RyaWN0P2tlLl9pc1ZhbGlkPSExOnguY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soa2UpKSkpOmtlLl9kPW5ldyBEYXRl''@;'; put 'put ''KCskZVsxXSl9KGtlKTpsZSgkZSk/KGtlLl9hPWsoJGUuc2xpY2UoMCksZnVuY3Rpb24obXQpe3JldHVybiBwYXJzZUludChtdCwxMCl9KSxjdShrZSkpOk0oJGUpP2Z1bmN0aW9uIHdjKGtlKXtpZigha2UuX2Qpe3ZhciAkZT1VZShrZS5faSk7a2UuX2E9ayhbJGUueWVhciwkZS5tb250aCx2''@;'; put 'put ''b2lkIDA9PT0kZS5kYXk/JGUuZGF0ZTokZS5kYXksJGUuaG91ciwkZS5taW51dGUsJGUuc2Vjb25kLCRlLm1pbGxpc2Vjb25kXSxmdW5jdGlvbihMdCl7cmV0dXJuIEx0JiZwYXJzZUludChMdCwxMCl9KSxjdShrZSl9fShrZSk6SygkZSk/a2UuX2Q9bmV3IERhdGUoJGUpOnguY3JlYXRlRnJv''@;'; put 'put ''bUlucHV0RmFsbGJhY2soa2UpfShrZSksWChrZSl8fChrZS5fZD1udWxsKSxrZSkpfWZ1bmN0aW9uIGtkKGtlLCRlLG10LEx0LEd0KXt2YXIgVW49e307cmV0dXJuKCEwPT09JGV8fCExPT09JGUpJiYoTHQ9JGUsJGU9dm9pZCAwKSwoITA9PT1tdHx8ITE9PT1tdCkmJihMdD1tdCxtdD12b2lk''@;'; put 'put ''IDApLChNKGtlKSYmUihrZSl8fGxlKGtlKSYmMD09PWtlLmxlbmd0aCkmJihrZT12b2lkIDApLFVuLl9pc0FNb21lbnRPYmplY3Q9ITAsVW4uX3VzZVVUQz1Vbi5faXNVVEM9R3QsVW4uX2w9bXQsVW4uX2k9a2UsVW4uX2Y9JGUsVW4uX3N0cmljdD1MdCxmdW5jdGlvbiBuYyhrZSl7dmFyICRl''@;'; put 'put ''PW5ldyBvZShMMihpbShrZSkpKTtyZXR1cm4gJGUuX25leHREYXkmJigkZS5hZGQoMSwiZCIpLCRlLl9uZXh0RGF5PXZvaWQgMCksJGV9KFVuKX1mdW5jdGlvbiBjYShrZSwkZSxtdCxMdCl7cmV0dXJuIGtkKGtlLCRlLG10LEx0LCExKX14LmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrPXVlKCJ2''@;'; put 'put ''YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24g''@;'; put 'put ''UkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSBkaXNjb3VyYWdlZC4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4iLGZ1bmN0aW9uKGtlKXtrZS5fZD1uZXcgRGF0ZShrZS5faSsoa2UuX3VzZVVU''@;'; put 'put ''Qz8iIFVUQyI6IiIpKX0pLHguSVNPXzg2MDE9ZnVuY3Rpb24oKXt9LHguUkZDXzI4MjI9ZnVuY3Rpb24oKXt9O3ZhciBBMT11ZSgibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mv''@;'; put 'put ''bWluLW1heC8iLGZ1bmN0aW9uKCl7dmFyIGtlPWNhLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJmtlLmlzVmFsaWQoKT9rZTx0aGlzP3RoaXM6a2U6VSgpfSksSzc9dWUoIm1vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0''@;'; put 'put ''ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIixmdW5jdGlvbigpe3ZhciBrZT1jYS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZrZS5pc1ZhbGlkKCk/a2U+dGhpcz90aGlzOmtlOlUoKX0pO2Z1bmN0aW9uIGFy''@;'; put 'put ''KGtlLCRlKXt2YXIgbXQsTHQ7aWYoMT09PSRlLmxlbmd0aCYmbGUoJGVbMF0pJiYoJGU9JGVbMF0pLCEkZS5sZW5ndGgpcmV0dXJuIGNhKCk7Zm9yKG10PSRlWzBdLEx0PTE7THQ8JGUubGVuZ3RoOysrTHQpKCEkZVtMdF0uaXNWYWxpZCgpfHwkZVtMdF1ba2VdKG10KSkmJihtdD0kZVtMdF0p''@;'; put 'put ''O3JldHVybiBtdH12YXIgS2M9WyJ5ZWFyIiwicXVhcnRlciIsIm1vbnRoIiwid2VlayIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCJdO2Z1bmN0aW9uIEFkKGtlKXt2YXIgJGU9VWUoa2UpLG10PSRlLnllYXJ8fDAsTHQ9JGUucXVhcnRlcnx8MCxHdD0kZS5t''@;'; put 'put ''b250aHx8MCxVbj0kZS53ZWVrfHwkZS5pc29XZWVrfHwwLERyPSRlLmRheXx8MCx5bz0kZS5ob3VyfHwwLGVzPSRlLm1pbnV0ZXx8MCx6cz0kZS5zZWNvbmR8fDAsb2M9JGUubWlsbGlzZWNvbmR8fDA7dGhpcy5faXNWYWxpZD1mdW5jdGlvbiB6aChrZSl7dmFyICRlLEx0LG10PSExLEd0PUtj''@;'; put 'put ''Lmxlbmd0aDtmb3IoJGUgaW4ga2UpaWYoTyhrZSwkZSkmJigtMT09PUtyLmNhbGwoS2MsJGUpfHxudWxsIT1rZVskZV0mJmlzTmFOKGtlWyRlXSkpKXJldHVybiExO2ZvcihMdD0wO0x0PEd0OysrTHQpaWYoa2VbS2NbTHRdXSl7aWYobXQpcmV0dXJuITE7cGFyc2VGbG9hdChrZVtLY1tMdF1d''@;'; put 'put ''KSE9PXV0KGtlW0tjW0x0XV0pJiYobXQ9ITApfXJldHVybiEwfSgkZSksdGhpcy5fbWlsbGlzZWNvbmRzPStvYysxZTMqenMrNmU0KmVzKzFlMyp5byo2MCo2MCx0aGlzLl9kYXlzPStEcis3KlVuLHRoaXMuX21vbnRocz0rR3QrMypMdCsxMiptdCx0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2Fs''@;'; put 'put ''ZT1sdSgpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIGR1KGtlKXtyZXR1cm4ga2UgaW5zdGFuY2VvZiBBZH1mdW5jdGlvbiBUMShrZSl7cmV0dXJuIGtlPDA/LTEqTWF0aC5yb3VuZCgtMSprZSk6TWF0aC5yb3VuZChrZSl9ZnVuY3Rpb24gWGMoa2UsJGUpe2RlKGtlLDAsMCxmdW5jdGlvbigp''@;'; put 'put ''e3ZhciBtdD10aGlzLnV0Y09mZnNldCgpLEx0PSIrIjtyZXR1cm4gbXQ8MCYmKG10PS1tdCxMdD0iLSIpLEx0K3Yofn4obXQvNjApLDIpKyRlK3Yofn5tdCU2MCwyKX0pfVhjKCJaIiwiOiIpLFhjKCJaWiIsIiIpLHB0KCJaIixydCkscHQoIlpaIixydCkseG4oWyJaIiwiWloiXSxmdW5jdGlv''@;'; put 'put ''bihrZSwkZSxtdCl7bXQuX3VzZVVUQz0hMCxtdC5fdHptPVRkKHJ0LGtlKX0pO3ZhciBTcz0vKFtcK1wtXXxcZFxkKS9naTtmdW5jdGlvbiBUZChrZSwkZSl7dmFyIEd0LFVuLG10PSgkZXx8IiIpLm1hdGNoKGtlKTtyZXR1cm4gbnVsbD09PW10P251bGw6MD09PShVbj02MCooR3Q9KChtdFtt''@;'; put 'put ''dC5sZW5ndGgtMV18fFtdKSsiIikubWF0Y2goU3MpfHxbIi0iLDAsMF0pWzFdK3V0KEd0WzJdKSk/MDoiKyI9PT1HdFswXT9VbjotVW59ZnVuY3Rpb24gVWgoa2UsJGUpe3ZhciBtdCxMdDtyZXR1cm4gJGUuX2lzVVRDPyhtdD0kZS5jbG9uZSgpLEx0PShzZShrZSl8fEkoa2UpP2tlLnZhbHVl''@;'; put 'put ''T2YoKTpjYShrZSkudmFsdWVPZigpKS1tdC52YWx1ZU9mKCksbXQuX2Quc2V0VGltZShtdC5fZC52YWx1ZU9mKCkrTHQpLHgudXBkYXRlT2Zmc2V0KG10LCExKSxtdCk6Y2Eoa2UpLmxvY2FsKCl9ZnVuY3Rpb24gSmMoa2Upe3JldHVybi1NYXRoLnJvdW5kKGtlLl9kLmdldFRpbWV6b25lT2Zm''@;'; put 'put ''c2V0KCkpfWZ1bmN0aW9uIGc0KCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9eC51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBYNz0vXigtfFwrKT8oPzooXGQqKVsuIF0pPyhcZCspOihcZCspKD86OihcZCspKFwuXGQqKT8pPyQv''@;'; put 'put ''LHUzPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/''@;'; put 'put ''KT8kLztmdW5jdGlvbiBNYShrZSwkZSl7dmFyIEd0LFVuLERyLG10PWtlLEx0PW51bGw7cmV0dXJuIGR1KGtlKT9tdD17bXM6a2UuX21pbGxpc2Vjb25kcyxkOmtlLl9kYXlzLE06a2UuX21vbnRoc306SyhrZSl8fCFpc05hTigra2UpPyhtdD17fSwkZT9tdFskZV09K2tlOm10Lm1pbGxpc2Vj''@;'; put 'put ''b25kcz0ra2UpOihMdD1YNy5leGVjKGtlKSk/KEd0PSItIj09PUx0WzFdPy0xOjEsbXQ9e3k6MCxkOnV0KEx0W0ZuXSkqR3QsaDp1dChMdFtuaV0pKkd0LG06dXQoTHRbbG5dKSpHdCxzOnV0KEx0W2puXSkqR3QsbXM6dXQoVDEoMWUzKkx0W3FyXSkpKkd0fSk6KEx0PXUzLmV4ZWMoa2UpKT9t''@;'; put 'put ''dD17eTpjMChMdFsyXSxHdD0iLSI9PT1MdFsxXT8tMToxKSxNOmMwKEx0WzNdLEd0KSx3OmMwKEx0WzRdLEd0KSxkOmMwKEx0WzVdLEd0KSxoOmMwKEx0WzZdLEd0KSxtOmMwKEx0WzddLEd0KSxzOmMwKEx0WzhdLEd0KX06bnVsbD09bXQ/bXQ9e306Im9iamVjdCI9PXR5cGVvZiBtdCYmKCJm''@;'; put 'put ''cm9tImluIG10fHwidG8iaW4gbXQpJiYoRHI9ZnVuY3Rpb24gZDMoa2UsJGUpe3ZhciBtdDtyZXR1cm4ga2UuaXNWYWxpZCgpJiYkZS5pc1ZhbGlkKCk/KCRlPVVoKCRlLGtlKSxrZS5pc0JlZm9yZSgkZSk/bXQ9RmMoa2UsJGUpOigobXQ9RmMoJGUsa2UpKS5taWxsaXNlY29uZHM9LW10Lm1p''@;'; put 'put ''bGxpc2Vjb25kcyxtdC5tb250aHM9LW10Lm1vbnRocyksbXQpOnttaWxsaXNlY29uZHM6MCxtb250aHM6MH19KGNhKG10LmZyb20pLGNhKG10LnRvKSksKG10PXt9KS5tcz1Eci5taWxsaXNlY29uZHMsbXQuTT1Eci5tb250aHMpLFVuPW5ldyBBZChtdCksZHUoa2UpJiZPKGtlLCJfbG9jYWxl''@;'; put 'put ''IikmJihVbi5fbG9jYWxlPWtlLl9sb2NhbGUpLGR1KGtlKSYmTyhrZSwiX2lzVmFsaWQiKSYmKFVuLl9pc1ZhbGlkPWtlLl9pc1ZhbGlkKSxVbn1mdW5jdGlvbiBjMChrZSwkZSl7dmFyIG10PWtlJiZwYXJzZUZsb2F0KGtlLnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihtdCk/MDpt''@;'; put 'put ''dCkqJGV9ZnVuY3Rpb24gRmMoa2UsJGUpe3ZhciBtdD17fTtyZXR1cm4gbXQubW9udGhzPSRlLm1vbnRoKCkta2UubW9udGgoKSsxMiooJGUueWVhcigpLWtlLnllYXIoKSksa2UuY2xvbmUoKS5hZGQobXQubW9udGhzLCJNIikuaXNBZnRlcigkZSkmJi0tbXQubW9udGhzLG10Lm1pbGxpc2Vj''@;'; put 'put ''b25kcz0rJGUtK2tlLmNsb25lKCkuYWRkKG10Lm1vbnRocywiTSIpLG10fWZ1bmN0aW9uIG00KGtlLCRlKXtyZXR1cm4gZnVuY3Rpb24obXQsTHQpe3ZhciBVbjtyZXR1cm4gbnVsbCE9PUx0JiYhaXNOYU4oK0x0KSYmKEcoJGUsIm1vbWVudCgpLiIrJGUrIihwZXJpb2QsIG51bWJlcikgaXMg''@;'; put 'put ''ZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iKyRlKyIobnVtYmVyLCBwZXJpb2QpLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uIiksVW49bXQsbXQ9THQsTHQ9VW4pLFdoKHRoaXMsTWEo''@;'; put 'put ''bXQsTHQpLGtlKSx0aGlzfX1mdW5jdGlvbiBXaChrZSwkZSxtdCxMdCl7dmFyIEd0PSRlLl9taWxsaXNlY29uZHMsVW49VDEoJGUuX2RheXMpLERyPVQxKCRlLl9tb250aHMpO2tlLmlzVmFsaWQoKSYmKEx0PUx0Pz8hMCxEciYmUGkoa2UsSHQoa2UsIk1vbnRoIikrRHIqbXQpLFVuJiZQdChr''@;'; put 'put ''ZSwiRGF0ZSIsSHQoa2UsIkRhdGUiKStVbiptdCksR3QmJmtlLl9kLnNldFRpbWUoa2UuX2QudmFsdWVPZigpK0d0Km10KSxMdCYmeC51cGRhdGVPZmZzZXQoa2UsVW58fERyKSl9TWEuZm49QWQucHJvdG90eXBlLE1hLmludmFsaWQ9ZnVuY3Rpb24gQXUoKXtyZXR1cm4gTWEoTmFOKX07dmFy''@;'; put 'put ''IEo3PW00KDEsImFkZCIpLFE3PW00KC0xLCJzdWJ0cmFjdCIpO2Z1bmN0aW9uIHY0KGtlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGtlfHxrZSBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiBkbChrZSl7cmV0dXJuIHNlKGtlKXx8SShrZSl8fHY0KGtlKXx8SyhrZSl8fGZ1bmN0aW9uIGU5''@;'; put 'put ''KGtlKXt2YXIgJGU9bGUoa2UpLG10PSExO3JldHVybiAkZSYmKG10PTA9PT1rZS5maWx0ZXIoZnVuY3Rpb24oTHQpe3JldHVybiFLKEx0KSYmdjQoa2UpfSkubGVuZ3RoKSwkZSYmbXR9KGtlKXx8ZnVuY3Rpb24gYW0oa2Upe3ZhciBHdCwkZT1NKGtlKSYmIVIoa2UpLG10PSExLEx0PVsieWVh''@;'; put 'put ''cnMiLCJ5ZWFyIiwieSIsIm1vbnRocyIsIm1vbnRoIiwiTSIsImRheXMiLCJkYXkiLCJkIiwiZGF0ZXMiLCJkYXRlIiwiRCIsImhvdXJzIiwiaG91ciIsImgiLCJtaW51dGVzIiwibWludXRlIiwibSIsInNlY29uZHMiLCJzZWNvbmQiLCJzIiwibWlsbGlzZWNvbmRzIiwibWlsbGlzZWNvbmQi''@;'; put 'put ''LCJtcyJdLERyPUx0Lmxlbmd0aDtmb3IoR3Q9MDtHdDxEcjtHdCs9MSltdD1tdHx8TyhrZSxMdFtHdF0pO3JldHVybiAkZSYmbXR9KGtlKXx8bnVsbD09a2V9ZnVuY3Rpb24gS2Eoa2UsJGUpe2lmKGtlLmRhdGUoKTwkZS5kYXRlKCkpcmV0dXJuLUthKCRlLGtlKTt2YXIgbXQ9MTIqKCRlLnll''@;'; put 'put ''YXIoKS1rZS55ZWFyKCkpKygkZS5tb250aCgpLWtlLm1vbnRoKCkpLEx0PWtlLmNsb25lKCkuYWRkKG10LCJtb250aHMiKTtyZXR1cm4tKG10KygkZS1MdDwwPygkZS1MdCkvKEx0LWtlLmNsb25lKCkuYWRkKG10LTEsIm1vbnRocyIpKTooJGUtTHQpLyhrZS5jbG9uZSgpLmFkZChtdCsxLCJt''@;'; put 'put ''b250aHMiKS1MdCkpKXx8MH1mdW5jdGlvbiBIaShrZSl7dmFyICRlO3JldHVybiB2b2lkIDA9PT1rZT90aGlzLl9sb2NhbGUuX2FiYnI6KG51bGwhPSgkZT1sdShrZSkpJiYodGhpcy5fbG9jYWxlPSRlKSx0aGlzKX14LmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIix4LmRl''@;'; put 'put ''ZmF1bHRGb3JtYXRVdGM9IllZWVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciBCaT11ZSgibW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCku''@;'; put 'put ''bG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4iLGZ1bmN0aW9uKGtlKXtyZXR1cm4gdm9pZCAwPT09a2U/dGhpcy5sb2NhbGVEYXRhKCk6dGhpcy5sb2NhbGUoa2UpfSk7ZnVuY3Rpb24gRG8oKXtyZXR1cm4gdGhpcy5fbG9jYWxlfXZhciBYYT02ZTQsSTE9NjAqWGEsem89MzUwNjMyOCpJ''@;'; put 'put ''MTtmdW5jdGlvbiBUdShrZSwkZSl7cmV0dXJuKGtlJSRlKyRlKSUkZX1mdW5jdGlvbiBWYShrZSwkZSxtdCl7cmV0dXJuIGtlPDEwMCYma2U+PTA/bmV3IERhdGUoa2UrNDAwLCRlLG10KS16bzpuZXcgRGF0ZShrZSwkZSxtdCkudmFsdWVPZigpfWZ1bmN0aW9uIExkKGtlLCRlLG10KXtyZXR1''@;'; put 'put ''cm4ga2U8MTAwJiZrZT49MD9EYXRlLlVUQyhrZSs0MDAsJGUsbXQpLXpvOkRhdGUuVVRDKGtlLCRlLG10KX1mdW5jdGlvbiBSZChrZSwkZSl7cmV0dXJuICRlLmVyYXNBYmJyUmVnZXgoa2UpfWZ1bmN0aW9uIGljKCl7dmFyIEd0LFVuLGtlPVtdLCRlPVtdLG10PVtdLEx0PVtdLERyPXRoaXMu''@;'; put 'put ''ZXJhcygpO2ZvcihHdD0wLFVuPURyLmxlbmd0aDtHdDxVbjsrK0d0KSRlLnB1c2goenQoRHJbR3RdLm5hbWUpKSxrZS5wdXNoKHp0KERyW0d0XS5hYmJyKSksbXQucHVzaCh6dChEcltHdF0ubmFycm93KSksTHQucHVzaCh6dChEcltHdF0ubmFtZSkpLEx0LnB1c2goenQoRHJbR3RdLmFiYnIp''@;'; put 'put ''KSxMdC5wdXNoKHp0KERyW0d0XS5uYXJyb3cpKTt0aGlzLl9lcmFzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0x0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9lcmFzTmFtZVJlZ2V4PW5ldyBSZWdFeHAoIl4oIiskZS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fZXJhc0FiYnJSZWdleD1uZXcg''@;'; put 'put ''UmVnRXhwKCJeKCIra2Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNOYXJyb3dSZWdleD1uZXcgUmVnRXhwKCJeKCIrbXQuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIE9kKGtlLCRlKXtkZSgwLFtrZSxrZS5sZW5ndGhdLDAsJGUpfWZ1bmN0aW9uIG85KGtlLCRlLG10LEx0LEd0''@;'; put 'put ''KXt2YXIgVW47cmV0dXJuIG51bGw9PWtlP1BhKHRoaXMsTHQsR3QpLnllYXI6KCRlPihVbj1TcihrZSxMdCxHdCkpJiYoJGU9VW4pLHM5LmNhbGwodGhpcyxrZSwkZSxtdCxMdCxHdCkpfWZ1bmN0aW9uIHM5KGtlLCRlLG10LEx0LEd0KXt2YXIgVW49ZnMoa2UsJGUsbXQsTHQsR3QpLERyPWUw''@;'; put 'put ''KFVuLnllYXIsMCxVbi5kYXlPZlllYXIpO3JldHVybiB0aGlzLnllYXIoRHIuZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChEci5nZXRVVENNb250aCgpKSx0aGlzLmRhdGUoRHIuZ2V0VVRDRGF0ZSgpKSx0aGlzfWRlKCJOIiwwLDAsImVyYUFiYnIiKSxkZSgiTk4iLDAsMCwiZXJhQWJi''@;'; put 'put ''ciIpLGRlKCJOTk4iLDAsMCwiZXJhQWJiciIpLGRlKCJOTk5OIiwwLDAsImVyYU5hbWUiKSxkZSgiTk5OTk4iLDAsMCwiZXJhTmFycm93IiksZGUoInkiLFsieSIsMV0sInlvIiwiZXJhWWVhciIpLGRlKCJ5IixbInl5IiwyXSwwLCJlcmFZZWFyIiksZGUoInkiLFsieXl5IiwzXSwwLCJlcmFZ''@;'; put 'put ''ZWFyIiksZGUoInkiLFsieXl5eSIsNF0sMCwiZXJhWWVhciIpLHB0KCJOIixSZCkscHQoIk5OIixSZCkscHQoIk5OTiIsUmQpLHB0KCJOTk5OIixmdW5jdGlvbiByYyhrZSwkZSl7cmV0dXJuICRlLmVyYXNOYW1lUmVnZXgoa2UpfSkscHQoIk5OTk5OIixmdW5jdGlvbiBBdyhrZSwkZSl7cmV0''@;'; put 'put ''dXJuICRlLmVyYXNOYXJyb3dSZWdleChrZSl9KSx4bihbIk4iLCJOTiIsIk5OTiIsIk5OTk4iLCJOTk5OTiJdLGZ1bmN0aW9uKGtlLCRlLG10LEx0KXt2YXIgR3Q9bXQuX2xvY2FsZS5lcmFzUGFyc2Uoa2UsTHQsbXQuX3N0cmljdCk7R3Q/QihtdCkuZXJhPUd0OkIobXQpLmludmFsaWRFcmE9''@;'; put 'put ''a2V9KSxwdCgieSIsX3QpLHB0KCJ5eSIsX3QpLHB0KCJ5eXkiLF90KSxwdCgieXl5eSIsX3QpLHB0KCJ5byIsZnVuY3Rpb24gQ2Moa2UsJGUpe3JldHVybiAkZS5fZXJhWWVhck9yZGluYWxSZWdleHx8X3R9KSx4bihbInkiLCJ5eSIsInl5eSIsInl5eXkiXSxPbikseG4oWyJ5byJdLGZ1bmN0''@;'; put 'put ''aW9uKGtlLCRlLG10LEx0KXt2YXIgR3Q7bXQuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCYmKEd0PWtlLm1hdGNoKG10Ll9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpKSwkZVtPbl09bXQuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlP210Ll9sb2NhbGUuZXJhWWVhck9yZGlu''@;'; put 'put ''YWxQYXJzZShrZSxHdCk6cGFyc2VJbnQoa2UsMTApfSksZGUoMCxbImdnIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla1llYXIoKSUxMDB9KSxkZSgwLFsiR0ciLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpJTEwMH0pLE9kKCJnZ2dnIiwid2Vla1ll''@;'; put 'put ''YXIiKSxPZCgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLE9kKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxPZCgiR0dHR0ciLCJpc29XZWVrWWVhciIpLHFlKCJ3ZWVrWWVhciIsImdnIikscWUoImlzb1dlZWtZZWFyIiwiR0ciKSxNZSgid2Vla1llYXIiLDEpLE1lKCJpc29XZWVrWWVhciIsMSkscHQoIkci''@;'; put 'put ''LE50KSxwdCgiZyIsTnQpLHB0KCJHRyIsTm4sYm4pLHB0KCJnZyIsTm4sYm4pLHB0KCJHR0dHIix3dCxlbikscHQoImdnZ2ciLHd0LGVuKSxwdCgiR0dHR0ciLFh0LCRuKSxwdCgiZ2dnZ2ciLFh0LCRuKSxzbihbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLGZ1bmN0aW9uKGtlLCRl''@;'; put 'put ''LG10LEx0KXskZVtMdC5zdWJzdHIoMCwyKV09dXQoa2UpfSksc24oWyJnZyIsIkdHIl0sZnVuY3Rpb24oa2UsJGUsbXQsTHQpeyRlW0x0XT14LnBhcnNlVHdvRGlnaXRZZWFyKGtlKX0pLGRlKCJRIiwwLCJRbyIsInF1YXJ0ZXIiKSxxZSgicXVhcnRlciIsIlEiKSxNZSgicXVhcnRlciIsNyks''@;'; put 'put ''cHQoIlEiLFV0KSx4bigiUSIsZnVuY3Rpb24oa2UsJGUpeyRlWyR0XT0zKih1dChrZSktMSl9KSxkZSgiRCIsWyJERCIsMl0sIkRvIiwiZGF0ZSIpLHFlKCJkYXRlIiwiRCIpLE1lKCJkYXRlIiw5KSxwdCgiRCIsTm4pLHB0KCJERCIsTm4sYm4pLHB0KCJEbyIsZnVuY3Rpb24oa2UsJGUpe3Jl''@;'; put 'put ''dHVybiBrZT8kZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZXx8JGUuX29yZGluYWxQYXJzZTokZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSx4bihbIkQiLCJERCJdLEZuKSx4bigiRG8iLGZ1bmN0aW9uKGtlLCRlKXskZVtGbl09dXQoa2UubWF0Y2goTm4pWzBdKX0pO3ZhciBo''@;'; put 'put ''bT1NdCgiRGF0ZSIsITApO2RlKCJEREQiLFsiRERERCIsM10sIkRERG8iLCJkYXlPZlllYXIiKSxxZSgiZGF5T2ZZZWFyIiwiREREIiksTWUoImRheU9mWWVhciIsNCkscHQoIkRERCIsaG4pLHB0KCJEREREIixXbikseG4oWyJEREQiLCJEREREIl0sZnVuY3Rpb24oa2UsJGUsbXQpe210Ll9k''@;'; put 'put ''YXlPZlllYXI9dXQoa2UpfSksZGUoIm0iLFsibW0iLDJdLDAsIm1pbnV0ZSIpLHFlKCJtaW51dGUiLCJtIiksTWUoIm1pbnV0ZSIsMTQpLHB0KCJtIixObikscHQoIm1tIixObixibikseG4oWyJtIiwibW0iXSxsbik7dmFyIEU0PU10KCJNaW51dGVzIiwhMSk7ZGUoInMiLFsic3MiLDJdLDAs''@;'; put 'put ''InNlY29uZCIpLHFlKCJzZWNvbmQiLCJzIiksTWUoInNlY29uZCIsMTUpLHB0KCJzIixObikscHQoInNzIixObixibikseG4oWyJzIiwic3MiXSxqbik7dmFyIEYxLGZtLGE5PU10KCJTZWNvbmRzIiwhMSk7Zm9yKGRlKCJTIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vj''@;'; put 'put ''b25kKCkvMTAwKX0pLGRlKDAsWyJTUyIsMl0sMCxmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMCl9KSxkZSgwLFsiU1NTIiwzXSwwLCJtaWxsaXNlY29uZCIpLGRlKDAsWyJTU1NTIiw0XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDEwKnRoaXMubWlsbGlzZWNvbmQoKX0p''@;'; put 'put ''LGRlKDAsWyJTU1NTUyIsNV0sMCxmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy5taWxsaXNlY29uZCgpfSksZGUoMCxbIlNTU1NTUyIsNl0sMCxmdW5jdGlvbigpe3JldHVybiAxZTMqdGhpcy5taWxsaXNlY29uZCgpfSksZGUoMCxbIlNTU1NTU1MiLDddLDAsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''MWU0KnRoaXMubWlsbGlzZWNvbmQoKX0pLGRlKDAsWyJTU1NTU1NTUyIsOF0sMCxmdW5jdGlvbigpe3JldHVybiAxZTUqdGhpcy5taWxsaXNlY29uZCgpfSksZGUoMCxbIlNTU1NTU1NTUyIsOV0sMCxmdW5jdGlvbigpe3JldHVybiAxZTYqdGhpcy5taWxsaXNlY29uZCgpfSkscWUoIm1pbGxp''@;'; put 'put ''c2Vjb25kIiwibXMiKSxNZSgibWlsbGlzZWNvbmQiLDE2KSxwdCgiUyIsaG4sVXQpLHB0KCJTUyIsaG4sYm4pLHB0KCJTU1MiLGhuLFduKSxGMT0iU1NTUyI7RjEubGVuZ3RoPD05O0YxKz0iUyIpcHQoRjEsX3QpO2Z1bmN0aW9uIER3KGtlLCRlKXskZVtxcl09dXQoMWUzKigiMC4iK2tlKSl9''@;'; put 'put ''Zm9yKEYxPSJTIjtGMS5sZW5ndGg8PTk7RjErPSJTIil4bihGMSxEdyk7Zm09TXQoIk1pbGxpc2Vjb25kcyIsITEpLGRlKCJ6IiwwLDAsInpvbmVBYmJyIiksZGUoInp6IiwwLDAsInpvbmVOYW1lIik7dmFyIHdpPW9lLnByb3RvdHlwZTtmdW5jdGlvbiBrNChrZSl7cmV0dXJuIGtlfXdpLmFk''@;'; put 'put ''ZD1KNyx3aS5jYWxlbmRhcj1mdW5jdGlvbiBiNChrZSwkZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihhcmd1bWVudHNbMF0/ZGwoYXJndW1lbnRzWzBdKT8oa2U9YXJndW1lbnRzWzBdLCRlPXZvaWQgMCk6ZnVuY3Rpb24gXzQoa2Upe3ZhciBHdCwkZT1NKGtlKSYmIVIoa2UpLG10PSExLEx0''@;'; put 'put ''PVsic2FtZURheSIsIm5leHREYXkiLCJsYXN0RGF5IiwibmV4dFdlZWsiLCJsYXN0V2VlayIsInNhbWVFbHNlIl07Zm9yKEd0PTA7R3Q8THQubGVuZ3RoO0d0Kz0xKW10PW10fHxPKGtlLEx0W0d0XSk7cmV0dXJuICRlJiZtdH0oYXJndW1lbnRzWzBdKSYmKCRlPWFyZ3VtZW50c1swXSxrZT12''@;'; put 'put ''b2lkIDApOihrZT12b2lkIDAsJGU9dm9pZCAwKSk7dmFyIG10PWtlfHxjYSgpLEx0PVVoKG10LHRoaXMpLnN0YXJ0T2YoImRheSIpLEd0PXguY2FsZW5kYXJGb3JtYXQodGhpcyxMdCl8fCJzYW1lRWxzZSIsVW49JGUmJihiKCRlW0d0XSk/JGVbR3RdLmNhbGwodGhpcyxtdCk6JGVbR3RdKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5mb3JtYXQoVW58fHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKEd0LHRoaXMsY2EobXQpKSl9LHdpLmNsb25lPWZ1bmN0aW9uIHk0KCl7cmV0dXJuIG5ldyBvZSh0aGlzKX0sd2kuZGlmZj1mdW5jdGlvbiBRbyhrZSwkZSxtdCl7dmFyIEx0LEd0LFVuO2lmKCF0aGlzLmlz''@;'; put 'put ''VmFsaWQoKSlyZXR1cm4gTmFOO2lmKCEoTHQ9VWgoa2UsdGhpcykpLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3N3aXRjaChHdD02ZTQqKEx0LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLCRlPVhlKCRlKSl7Y2FzZSJ5ZWFyIjpVbj1LYSh0aGlzLEx0KS8xMjticmVhaztjYXNlIm1vbnRo''@;'; put 'put ''IjpVbj1LYSh0aGlzLEx0KTticmVhaztjYXNlInF1YXJ0ZXIiOlVuPUthKHRoaXMsTHQpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOlVuPSh0aGlzLUx0KS8xZTM7YnJlYWs7Y2FzZSJtaW51dGUiOlVuPSh0aGlzLUx0KS82ZTQ7YnJlYWs7Y2FzZSJob3VyIjpVbj0odGhpcy1MdCkvMzZlNTticmVh''@;'; put 'put ''aztjYXNlImRheSI6VW49KHRoaXMtTHQtR3QpLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6VW49KHRoaXMtTHQtR3QpLzYwNDhlNTticmVhaztkZWZhdWx0OlVuPXRoaXMtTHR9cmV0dXJuIG10P1VuOml0KFVuKX0sd2kuZW5kT2Y9ZnVuY3Rpb24gVm8oa2Upe3ZhciAkZSxtdDtpZih2b2lkIDA9''@;'; put 'put ''PT0oa2U9WGUoa2UpKXx8Im1pbGxpc2Vjb25kIj09PWtlfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKG10PXRoaXMuX2lzVVRDP0xkOlZhLGtlKXtjYXNlInllYXIiOiRlPW10KHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6JGU9bXQodGhpcy55''@;'; put 'put ''ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzKzMsMSktMTticmVhaztjYXNlIm1vbnRoIjokZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkrMSwxKS0xO2JyZWFrO2Nhc2Uid2VlayI6JGU9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vl''@;'; put 'put ''a2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjokZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKzcpLTE7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6JGU9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMu''@;'; put 'put ''ZGF0ZSgpKzEpLTE7YnJlYWs7Y2FzZSJob3VyIjokZT10aGlzLl9kLnZhbHVlT2YoKSwkZSs9STEtVHUoJGUrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpYYSksSTEpLTE7YnJlYWs7Y2FzZSJtaW51dGUiOiRlPXRoaXMuX2QudmFsdWVPZigpLCRlKz1YYS1UdSgkZSxYYSktMTti''@;'; put 'put ''cmVhaztjYXNlInNlY29uZCI6JGU9dGhpcy5fZC52YWx1ZU9mKCksJGUrPTFlMy1UdSgkZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZSgkZSkseC51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sd2kuZm9ybWF0PWZ1bmN0aW9uIEM0KGtlKXtrZXx8KGtlPXRoaXMuaXNVdGMoKT94''@;'; put 'put ''LmRlZmF1bHRGb3JtYXRVdGM6eC5kZWZhdWx0Rm9ybWF0KTt2YXIgJGU9TGUodGhpcyxrZSk7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQoJGUpfSx3aS5mcm9tPWZ1bmN0aW9uIGNtKGtlLCRlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihzZShrZSkmJmtlLmlzVmFsaWQo''@;'; put 'put ''KXx8Y2Eoa2UpLmlzVmFsaWQoKSk/TWEoe3RvOnRoaXMsZnJvbTprZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghJGUpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LHdpLmZyb21Ob3c9ZnVuY3Rpb24gZjMoa2Upe3JldHVybiB0aGlzLmZyb20oY2EoKSxrZSl9''@;'; put 'put ''LHdpLnRvPWZ1bmN0aW9uIHQ5KGtlLCRlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihzZShrZSkmJmtlLmlzVmFsaWQoKXx8Y2Eoa2UpLmlzVmFsaWQoKSk/TWEoe2Zyb206dGhpcyx0bzprZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghJGUpOnRoaXMubG9jYWxlRGF0YSgp''@;'; put 'put ''LmludmFsaWREYXRlKCl9LHdpLnRvTm93PWZ1bmN0aW9uIG45KGtlKXtyZXR1cm4gdGhpcy50byhjYSgpLGtlKX0sd2kuZ2V0PWZ1bmN0aW9uIG9uKGtlKXtyZXR1cm4gYih0aGlzW2tlPVhlKGtlKV0pP3RoaXNba2VdKCk6dGhpc30sd2kuaW52YWxpZEF0PWZ1bmN0aW9uIFIxKCl7cmV0dXJu''@;'; put 'put ''IEIodGhpcykub3ZlcmZsb3d9LHdpLmlzQWZ0ZXI9ZnVuY3Rpb24gbG0oa2UsJGUpe3ZhciBtdD1zZShrZSk/a2U6Y2Eoa2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbXQuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oJGU9WGUoJGUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZh''@;'; put 'put ''bHVlT2YoKT5tdC52YWx1ZU9mKCk6bXQudmFsdWVPZigpPHRoaXMuY2xvbmUoKS5zdGFydE9mKCRlKS52YWx1ZU9mKCkpfSx3aS5pc0JlZm9yZT1mdW5jdGlvbiB2aShrZSwkZSl7dmFyIG10PXNlKGtlKT9rZTpjYShrZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFtdC5pc1ZhbGlkKCkp''@;'; put 'put ''JiYoIm1pbGxpc2Vjb25kIj09PSgkZT1YZSgkZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPG10LnZhbHVlT2YoKTp0aGlzLmNsb25lKCkuZW5kT2YoJGUpLnZhbHVlT2YoKTxtdC52YWx1ZU9mKCkpfSx3aS5pc0JldHdlZW49ZnVuY3Rpb24gdzQoa2UsJGUsbXQsTHQpe3ZhciBH''@;'; put 'put ''dD1zZShrZSk/a2U6Y2Eoa2UpLFVuPXNlKCRlKT8kZTpjYSgkZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJkd0LmlzVmFsaWQoKSYmVW4uaXNWYWxpZCgpKSYmKCIoIj09PShMdD1MdHx8IigpIilbMF0/dGhpcy5pc0FmdGVyKEd0LG10KTohdGhpcy5pc0JlZm9yZShHdCxtdCkpJiYoIiki''@;'; put 'put ''PT09THRbMV0/dGhpcy5pc0JlZm9yZShVbixtdCk6IXRoaXMuaXNBZnRlcihVbixtdCkpfSx3aS5pc1NhbWU9ZnVuY3Rpb24gaDMoa2UsJGUpe3ZhciBMdCxtdD1zZShrZSk/a2U6Y2Eoa2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbXQuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9''@;'; put 'put ''PT0oJGU9WGUoJGUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKT09PW10LnZhbHVlT2YoKTooTHQ9bXQudmFsdWVPZigpLHRoaXMuY2xvbmUoKS5zdGFydE9mKCRlKS52YWx1ZU9mKCk8PUx0JiZMdDw9dGhpcy5jbG9uZSgpLmVuZE9mKCRlKS52YWx1ZU9mKCkpKX0sd2kuaXNTYW1l''@;'; put 'put ''T3JBZnRlcj1mdW5jdGlvbiBDcihrZSwkZSl7cmV0dXJuIHRoaXMuaXNTYW1lKGtlLCRlKXx8dGhpcy5pc0FmdGVyKGtlLCRlKX0sd2kuaXNTYW1lT3JCZWZvcmU9ZnVuY3Rpb24gTmEoa2UsJGUpe3JldHVybiB0aGlzLmlzU2FtZShrZSwkZSl8fHRoaXMuaXNCZWZvcmUoa2UsJGUpfSx3aS5p''@;'; put 'put ''c1ZhbGlkPWZ1bmN0aW9uIGh1KCl7cmV0dXJuIFgodGhpcyl9LHdpLmxhbmc9Qmksd2kubG9jYWxlPUhpLHdpLmxvY2FsZURhdGE9RG8sd2kubWF4PUs3LHdpLm1pbj1BMSx3aS5wYXJzaW5nRmxhZ3M9ZnVuY3Rpb24gJGgoKXtyZXR1cm4gRSh7fSxCKHRoaXMpKX0sd2kuc2V0PWZ1bmN0aW9u''@;'; put 'put ''IENuKGtlLCRlKXtpZigib2JqZWN0Ij09dHlwZW9mIGtlKXt2YXIgTHQsbXQ9ZnVuY3Rpb24gRGUoa2Upe3ZhciBtdCwkZT1bXTtmb3IobXQgaW4ga2UpTyhrZSxtdCkmJiRlLnB1c2goe3VuaXQ6bXQscHJpb3JpdHk6aHRbbXRdfSk7cmV0dXJuICRlLnNvcnQoZnVuY3Rpb24oTHQsR3Qpe3Jl''@;'; put 'put ''dHVybiBMdC5wcmlvcml0eS1HdC5wcmlvcml0eX0pLCRlfShrZT1VZShrZSkpLEd0PW10Lmxlbmd0aDtmb3IoTHQ9MDtMdDxHdDtMdCsrKXRoaXNbbXRbTHRdLnVuaXRdKGtlW210W0x0XS51bml0XSl9ZWxzZSBpZihiKHRoaXNba2U9WGUoa2UpXSkpcmV0dXJuIHRoaXNba2VdKCRlKTtyZXR1''@;'; put 'put ''cm4gdGhpc30sd2kuc3RhcnRPZj1mdW5jdGlvbiBMMShrZSl7dmFyICRlLG10O2lmKHZvaWQgMD09PShrZT1YZShrZSkpfHwibWlsbGlzZWNvbmQiPT09a2V8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcztzd2l0Y2gobXQ9dGhpcy5faXNVVEM/TGQ6VmEsa2Upe2Nhc2UieWVhciI6JGU9''@;'; put 'put ''bXQodGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOiRlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMywxKTticmVhaztjYXNlIm1vbnRoIjokZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksMSk7YnJlYWs7Y2FzZSJ3ZWVrIjokZT1tdCh0''@;'; put 'put ''aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6JGU9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSk7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6''@;'; put 'put ''JGU9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKTticmVhaztjYXNlImhvdXIiOiRlPXRoaXMuX2QudmFsdWVPZigpLCRlLT1UdSgkZSsodGhpcy5faXNVVEM/MDp0aGlzLnV0Y09mZnNldCgpKlhhKSxJMSk7YnJlYWs7Y2FzZSJtaW51dGUiOiRlPXRoaXMuX2QudmFs''@;'; put 'put ''dWVPZigpLCRlLT1UdSgkZSxYYSk7YnJlYWs7Y2FzZSJzZWNvbmQiOiRlPXRoaXMuX2QudmFsdWVPZigpLCRlLT1UdSgkZSwxZTMpfXJldHVybiB0aGlzLl9kLnNldFRpbWUoJGUpLHgudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LHdpLnN1YnRyYWN0PVE3LHdpLnRvQXJyYXk9ZnVuY3Rp''@;'; put 'put ''b24gSmEoKXt2YXIga2U9dGhpcztyZXR1cm5ba2UueWVhcigpLGtlLm1vbnRoKCksa2UuZGF0ZSgpLGtlLmhvdXIoKSxrZS5taW51dGUoKSxrZS5zZWNvbmQoKSxrZS5taWxsaXNlY29uZCgpXX0sd2kudG9PYmplY3Q9ZnVuY3Rpb24gTzIoKXt2YXIga2U9dGhpcztyZXR1cm57eWVhcnM6a2Uu''@;'; put 'put ''eWVhcigpLG1vbnRoczprZS5tb250aCgpLGRhdGU6a2UuZGF0ZSgpLGhvdXJzOmtlLmhvdXJzKCksbWludXRlczprZS5taW51dGVzKCksc2Vjb25kczprZS5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOmtlLm1pbGxpc2Vjb25kcygpfX0sd2kudG9EYXRlPWZ1bmN0aW9uIE9sKCl7cmV0dXJuIG5l''@;'; put 'put ''dyBEYXRlKHRoaXMudmFsdWVPZigpKX0sd2kudG9JU09TdHJpbmc9ZnVuY3Rpb24gSWQoa2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgJGU9ITAhPT1rZSxtdD0kZT90aGlzLmNsb25lKCkudXRjKCk6dGhpcztyZXR1cm4gbXQueWVhcigpPDB8fG10LnllYXIoKT45OTk5''@;'; put 'put ''P0xlKG10LCRlPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6YihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk/JGU/dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpOm5ldyBEYXRlKHRoaXMudmFsdWVPZigpKzYwKnRo''@;'; put 'put ''aXMudXRjT2Zmc2V0KCkqMWUzKS50b0lTT1N0cmluZygpLnJlcGxhY2UoIloiLExlKG10LCJaIikpOkxlKG10LCRlPyJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0sd2kuaW5zcGVjdD1mdW5jdGlvbiBIYygpe2lmKCF0aGlzLmlz''@;'; put 'put ''VmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgbXQsTHQsa2U9Im1vbWVudCIsJGU9IiI7cmV0dXJuIHRoaXMuaXNMb2NhbCgpfHwoa2U9MD09PXRoaXMudXRjT2Zmc2V0KCk/Im1vbWVudC51dGMiOiJtb21lbnQucGFyc2Vab25lIiwkZT0iWiIp''@;'; put 'put ''LG10PSJbIitrZSsnKCJdJyxMdD0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/IllZWVkiOiJZWVlZWVkiLHRoaXMuZm9ybWF0KG10K0x0KyItTU0tRERbVF1ISDptbTpzcy5TU1MiKyRlKydbIildJyl9LHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wuZm9yJiYod2lb''@;'; put 'put ''U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09ZnVuY3Rpb24oKXtyZXR1cm4iTW9tZW50PCIrdGhpcy5mb3JtYXQoKSsiPiJ9KSx3aS50b0pTT049ZnVuY3Rpb24gUDIoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LHdpLnRv''@;'; put 'put ''U3RyaW5nPWZ1bmN0aW9uIFJsKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfSx3aS51bml4PWZ1bmN0aW9uIFM0KCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sd2kudmFs''@;'; put 'put ''dWVPZj1mdW5jdGlvbiBHaCgpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29mZnNldHx8MCl9LHdpLmNyZWF0aW9uRGF0YT1mdW5jdGlvbiBPMSgpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5f''@;'; put 'put ''aXNVVEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LHdpLmVyYU5hbWU9ZnVuY3Rpb24gcHMoKXt2YXIga2UsJGUsbXQsTHQ9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihrZT0wLCRlPUx0Lmxlbmd0aDtrZTwkZTsrK2tlKWlmKG10PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1''@;'; put 'put ''ZU9mKCksTHRba2VdLnNpbmNlPD1tdCYmbXQ8PUx0W2tlXS51bnRpbHx8THRba2VdLnVudGlsPD1tdCYmbXQ8PUx0W2tlXS5zaW5jZSlyZXR1cm4gTHRba2VdLm5hbWU7cmV0dXJuIiJ9LHdpLmVyYU5hcnJvdz1mdW5jdGlvbiBrdygpe3ZhciBrZSwkZSxtdCxMdD10aGlzLmxvY2FsZURhdGEo''@;'; put 'put ''KS5lcmFzKCk7Zm9yKGtlPTAsJGU9THQubGVuZ3RoO2tlPCRlOysra2UpaWYobXQ9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxMdFtrZV0uc2luY2U8PW10JiZtdDw9THRba2VdLnVudGlsfHxMdFtrZV0udW50aWw8PW10JiZtdDw9THRba2VdLnNpbmNlKXJldHVybiBM''@;'; put 'put ''dFtrZV0ubmFycm93O3JldHVybiIifSx3aS5lcmFBYmJyPWZ1bmN0aW9uIE00KCl7dmFyIGtlLCRlLG10LEx0PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3Ioa2U9MCwkZT1MdC5sZW5ndGg7a2U8JGU7KytrZSlpZihtdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigp''@;'; put 'put ''LEx0W2tlXS5zaW5jZTw9bXQmJm10PD1MdFtrZV0udW50aWx8fEx0W2tlXS51bnRpbDw9bXQmJm10PD1MdFtrZV0uc2luY2UpcmV0dXJuIEx0W2tlXS5hYmJyO3JldHVybiIifSx3aS5lcmFZZWFyPWZ1bmN0aW9uIHVtKCl7dmFyIGtlLCRlLG10LEx0LEd0PXRoaXMubG9jYWxlRGF0YSgpLmVy''@;'; put 'put ''YXMoKTtmb3Ioa2U9MCwkZT1HdC5sZW5ndGg7a2U8JGU7KytrZSlpZihtdD1HdFtrZV0uc2luY2U8PUd0W2tlXS51bnRpbD8xOi0xLEx0PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksR3Rba2VdLnNpbmNlPD1MdCYmTHQ8PUd0W2tlXS51bnRpbHx8R3Rba2VdLnVudGls''@;'; put 'put ''PD1MdCYmTHQ8PUd0W2tlXS5zaW5jZSlyZXR1cm4odGhpcy55ZWFyKCkteChHdFtrZV0uc2luY2UpLnllYXIoKSkqbXQrR3Rba2VdLm9mZnNldDtyZXR1cm4gdGhpcy55ZWFyKCl9LHdpLnllYXI9TjAsd2kuaXNMZWFwWWVhcj1mdW5jdGlvbiBzMygpe3JldHVybiB6ZSh0aGlzLnllYXIoKSl9''@;'; put 'put ''LHdpLndlZWtZZWFyPWZ1bmN0aW9uIFAxKGtlKXtyZXR1cm4gbzkuY2FsbCh0aGlzLGtlLHRoaXMud2VlaygpLHRoaXMud2Vla2RheSgpLHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3kpfSx3aS5pc29XZWVrWWVhcj1mdW5jdGlvbiBxaChr''@;'; put 'put ''ZSl7cmV0dXJuIG85LmNhbGwodGhpcyxrZSx0aGlzLmlzb1dlZWsoKSx0aGlzLmlzb1dlZWtkYXkoKSwxLDQpfSx3aS5xdWFydGVyPXdpLnF1YXJ0ZXJzPWZ1bmN0aW9uIGRtKGtlKXtyZXR1cm4gbnVsbD09a2U/TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgzKihr''@;'; put 'put ''ZS0xKSt0aGlzLm1vbnRoKCklMyl9LHdpLm1vbnRoPUxvLHdpLmRheXNJbk1vbnRoPWZ1bmN0aW9uIGhzKCl7cmV0dXJuIG5vKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSl9LHdpLndlZWs9d2kud2Vla3M9ZnVuY3Rpb24gaXMoa2Upe3ZhciAkZT10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRo''@;'; put 'put ''aXMpO3JldHVybiBudWxsPT1rZT8kZTp0aGlzLmFkZCg3KihrZS0kZSksImQiKX0sd2kuaXNvV2Vlaz13aS5pc29XZWVrcz1mdW5jdGlvbiBXaShrZSl7dmFyICRlPVBhKHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT1rZT8kZTp0aGlzLmFkZCg3KihrZS0kZSksImQiKX0sd2kud2Vla3NJ''@;'; put 'put ''blllYXI9ZnVuY3Rpb24gcjkoKXt2YXIga2U9dGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7cmV0dXJuIFNyKHRoaXMueWVhcigpLGtlLmRvdyxrZS5kb3kpfSx3aS53ZWVrc0luV2Vla1llYXI9ZnVuY3Rpb24gaTkoKXt2YXIga2U9dGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7cmV0dXJuIFNyKHRo''@;'; put 'put ''aXMud2Vla1llYXIoKSxrZS5kb3csa2UuZG95KX0sd2kuaXNvV2Vla3NJblllYXI9ZnVuY3Rpb24gUWMoKXtyZXR1cm4gU3IodGhpcy55ZWFyKCksMSw0KX0sd2kuaXNvV2Vla3NJbklTT1dlZWtZZWFyPWZ1bmN0aW9uIHg0KCl7cmV0dXJuIFNyKHRoaXMuaXNvV2Vla1llYXIoKSwxLDQpfSx3''@;'; put 'put ''aS5kYXRlPWhtLHdpLmRheT13aS5kYXlzPWZ1bmN0aW9uIEQyKGtlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPWtlP3RoaXM6TmFOO3ZhciAkZT10aGlzLl9pc1VUQz90aGlzLl9kLmdldFVUQ0RheSgpOnRoaXMuX2QuZ2V0RGF5KCk7cmV0dXJuIG51bGwhPWtlPyhrZT1mdW5j''@;'; put 'put ''dGlvbiAkYShrZSwkZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBrZT9rZTppc05hTihrZSk/Im51bWJlciI9PXR5cGVvZihrZT0kZS53ZWVrZGF5c1BhcnNlKGtlKSk/a2U6bnVsbDpwYXJzZUludChrZSwxMCl9KGtlLHRoaXMubG9jYWxlRGF0YSgpKSx0aGlzLmFkZChrZS0kZSwiZCIpKTok''@;'; put 'put ''ZX0sd2kud2Vla2RheT1mdW5jdGlvbiBsMyhrZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1rZT90aGlzOk5hTjt2YXIgJGU9KHRoaXMuZGF5KCkrNy10aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpJTc7cmV0dXJuIG51bGw9PWtlPyRlOnRoaXMuYWRkKGtlLSRlLCJkIil9''@;'; put 'put ''LHdpLmlzb1dlZWtkYXk9ZnVuY3Rpb24gQXIoa2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9a2U/dGhpczpOYU47aWYobnVsbCE9a2Upe3ZhciAkZT1mdW5jdGlvbiB0MChrZSwkZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBrZT8kZS53ZWVrZGF5c1BhcnNlKGtlKSU3fHw3''@;'; put 'put ''OmlzTmFOKGtlKT9udWxsOmtlfShrZSx0aGlzLmxvY2FsZURhdGEoKSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCklNz8kZTokZS03KX1yZXR1cm4gdGhpcy5kYXkoKXx8N30sd2kuZGF5T2ZZZWFyPWZ1bmN0aW9uIFR3KGtlKXt2YXIgJGU9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0''@;'; put 'put ''YXJ0T2YoImRheSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBudWxsPT1rZT8kZTp0aGlzLmFkZChrZS0kZSwiZCIpfSx3aS5ob3VyPXdpLmhvdXJzPW9zLHdpLm1pbnV0ZT13aS5taW51dGVzPUU0LHdpLnNlY29uZD13aS5zZWNvbmRzPWE5LHdpLm1p''@;'; put 'put ''bGxpc2Vjb25kPXdpLm1pbGxpc2Vjb25kcz1mbSx3aS51dGNPZmZzZXQ9ZnVuY3Rpb24gRDEoa2UsJGUsbXQpe3ZhciBHdCxMdD10aGlzLl9vZmZzZXR8fDA7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1rZT90aGlzOk5hTjtpZihudWxsIT1rZSl7aWYoInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBrZSl7aWYobnVsbD09PShrZT1UZChydCxrZSkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnMoa2UpPDE2JiYhbXQmJihrZSo9NjApO3JldHVybiF0aGlzLl9pc1VUQyYmJGUmJihHdD1KYyh0aGlzKSksdGhpcy5fb2Zmc2V0PWtlLHRoaXMuX2lzVVRDPSEwLG51bGwhPUd0JiZ0aGlzLmFk''@;'; put 'put ''ZChHdCwibSIpLEx0IT09a2UmJighJGV8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/V2godGhpcyxNYShrZS1MdCwibSIpLDEsITEpOnRoaXMuX2NoYW5nZUluUHJvZ3Jlc3N8fCh0aGlzLl9jaGFuZ2VJblByb2dyZXNzPSEwLHgudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMuX2NoYW5nZUlu''@;'; put 'put ''UHJvZ3Jlc3M9bnVsbCkpLHRoaXN9cmV0dXJuIHRoaXMuX2lzVVRDP0x0OkpjKHRoaXMpfSx3aS51dGM9ZnVuY3Rpb24gWmgoa2Upe3JldHVybiB0aGlzLnV0Y09mZnNldCgwLGtlKX0sd2kubG9jYWw9ZnVuY3Rpb24gbWEoa2Upe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0''@;'; put 'put ''KDAsa2UpLHRoaXMuX2lzVVRDPSExLGtlJiZ0aGlzLnN1YnRyYWN0KEpjKHRoaXMpLCJtIikpLHRoaXN9LHdpLnBhcnNlWm9uZT1mdW5jdGlvbiBQYygpe2lmKG51bGwhPXRoaXMuX3R6bSl0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sITEsITApO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0''@;'; put 'put ''aGlzLl9pKXt2YXIga2U9VGQodm4sdGhpcy5faSk7bnVsbCE9a2U/dGhpcy51dGNPZmZzZXQoa2UpOnRoaXMudXRjT2Zmc2V0KDAsITApfXJldHVybiB0aGlzfSx3aS5oYXNBbGlnbmVkSG91ck9mZnNldD1mdW5jdGlvbiBEZChrZSl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKGtlPWtlP2Nh''@;'; put 'put ''KGtlKS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLWtlKSU2MD09MCl9LHdpLmlzRFNUPWZ1bmN0aW9uIFIyKCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpfHx0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250''@;'; put 'put ''aCg1KS51dGNPZmZzZXQoKX0sd2kuaXNMb2NhbD1mdW5jdGlvbiBZaCgpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJiF0aGlzLl9pc1VUQ30sd2kuaXNVdGNPZmZzZXQ9ZnVuY3Rpb24gcDQoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQ30sd2kuaXNVdGM9ZzQsd2kuaXNV''@;'; put 'put ''VEM9ZzQsd2kuem9uZUFiYnI9ZnVuY3Rpb24gbDkoKXtyZXR1cm4gdGhpcy5faXNVVEM/IlVUQyI6IiJ9LHdpLnpvbmVOYW1lPWZ1bmN0aW9uIGM5KCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSI6IiJ9LHdpLmRhdGVzPXVlKCJkYXRlcyBhY2Nlc3Nv''@;'; put 'put ''ciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLiIsaG0pLHdpLm1vbnRocz11ZSgibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixMbyksd2kueWVhcnM9dWUoInllYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3Rl''@;'; put 'put ''YWQiLE4wKSx3aS56b25lPXVlKCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLyIsZnVuY3Rpb24gbDAoa2UsJGUpe3JldHVybiBudWxsIT1rZT8oInN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBrZSYmKGtlPS1rZSksdGhpcy51dGNPZmZzZXQoa2UsJGUpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfSksd2kuaXNEU1RTaGlmdGVkPXVlKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mv''@;'; put 'put ''ZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIixmdW5jdGlvbiBmNCgpe2lmKCF6KHRoaXMuX2lzRFNUU2hpZnRlZCkpcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDt2YXIgJGUsa2U9e307cmV0dXJuIHRlKGtlLHRoaXMpLChrZT1pbShrZSkpLl9hPygkZT1rZS5faXNVVEM/aihr''@;'; put 'put ''ZS5fYSk6Y2Eoa2UuX2EpLHRoaXMuX2lzRFNUU2hpZnRlZD10aGlzLmlzVmFsaWQoKSYmZnVuY3Rpb24gT2Moa2UsJGUsbXQpe3ZhciBEcixMdD1NYXRoLm1pbihrZS5sZW5ndGgsJGUubGVuZ3RoKSxHdD1NYXRoLmFicyhrZS5sZW5ndGgtJGUubGVuZ3RoKSxVbj0wO2ZvcihEcj0wO0RyPEx0''@;'; put 'put ''O0RyKyspKG10JiZrZVtEcl0hPT0kZVtEcl18fCFtdCYmdXQoa2VbRHJdKSE9PXV0KCRlW0RyXSkpJiZVbisrO3JldHVybiBVbitHdH0oa2UuX2EsJGUudG9BcnJheSgpKT4wKTp0aGlzLl9pc0RTVFNoaWZ0ZWQ9ITEsdGhpcy5faXNEU1RTaGlmdGVkfSk7dmFyIFNvPU4ucHJvdG90eXBlO2Z1''@;'; put 'put ''bmN0aW9uIFBsKGtlLCRlLG10LEx0KXt2YXIgR3Q9bHUoKSxVbj1qKCkuc2V0KEx0LCRlKTtyZXR1cm4gR3RbbXRdKFVuLGtlKX1mdW5jdGlvbiBobChrZSwkZSxtdCl7aWYoSyhrZSkmJigkZT1rZSxrZT12b2lkIDApLGtlPWtlfHwiIixudWxsIT0kZSlyZXR1cm4gUGwoa2UsJGUsbXQsIm1v''@;'; put 'put ''bnRoIik7dmFyIEx0LEd0PVtdO2ZvcihMdD0wO0x0PDEyO0x0KyspR3RbTHRdPVBsKGtlLEx0LG10LCJtb250aCIpO3JldHVybiBHdH1mdW5jdGlvbiBmdShrZSwkZSxtdCxMdCl7ImJvb2xlYW4iPT10eXBlb2Yga2U/KEsoJGUpJiYobXQ9JGUsJGU9dm9pZCAwKSwkZT0kZXx8IiIpOihtdD0k''@;'; put 'put ''ZT1rZSxrZT0hMSxLKCRlKSYmKG10PSRlLCRlPXZvaWQgMCksJGU9JGV8fCIiKTt2YXIgRHIsR3Q9bHUoKSxVbj1rZT9HdC5fd2Vlay5kb3c6MCx5bz1bXTtpZihudWxsIT1tdClyZXR1cm4gUGwoJGUsKG10K1VuKSU3LEx0LCJkYXkiKTtmb3IoRHI9MDtEcjw3O0RyKyspeW9bRHJdPVBsKCRl''@;'; put 'put ''LChEcitVbiklNyxMdCwiZGF5Iik7cmV0dXJuIHlvfVNvLmNhbGVuZGFyPWZ1bmN0aW9uIFMoa2UsJGUsbXQpe3ZhciBMdD10aGlzLl9jYWxlbmRhcltrZV18fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBiKEx0KT9MdC5jYWxsKCRlLG10KTpMdH0sU28ubG9uZ0RhdGVGb3JtYXQ9''@;'; put 'put ''ZnVuY3Rpb24gQmUoa2Upe3ZhciAkZT10aGlzLl9sb25nRGF0ZUZvcm1hdFtrZV0sbXQ9dGhpcy5fbG9uZ0RhdGVGb3JtYXRba2UudG9VcHBlckNhc2UoKV07cmV0dXJuICRlfHwhbXQ/JGU6KHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tlXT1tdC5tYXRjaChwKS5tYXAoZnVuY3Rpb24oTHQpe3Jl''@;'; put 'put ''dHVybiJNTU1NIj09PUx0fHwiTU0iPT09THR8fCJERCI9PT1MdHx8ImRkZGQiPT09THQ/THQuc2xpY2UoMSk6THR9KS5qb2luKCIiKSx0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZV0pfSxTby5pbnZhbGlkRGF0ZT1mdW5jdGlvbiBLZSgpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sU28ub3Jk''@;'; put 'put ''aW5hbD1mdW5jdGlvbiBsdChrZSl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgiJWQiLGtlKX0sU28ucHJlcGFyc2U9azQsU28ucG9zdGZvcm1hdD1rNCxTby5yZWxhdGl2ZVRpbWU9ZnVuY3Rpb24gYmUoa2UsJGUsbXQsTHQpe3ZhciBHdD10aGlzLl9yZWxhdGl2ZVRpbWVbbXRdO3Jl''@;'; put 'put ''dHVybiBiKEd0KT9HdChrZSwkZSxtdCxMdCk6R3QucmVwbGFjZSgvJWQvaSxrZSl9LFNvLnBhc3RGdXR1cmU9ZnVuY3Rpb24gQWUoa2UsJGUpe3ZhciBtdD10aGlzLl9yZWxhdGl2ZVRpbWVba2U+MD8iZnV0dXJlIjoicGFzdCJdO3JldHVybiBiKG10KT9tdCgkZSk6bXQucmVwbGFjZSgvJXMv''@;'; put 'put ''aSwkZSl9LFNvLnNldD1mdW5jdGlvbiBEKGtlKXt2YXIgJGUsbXQ7Zm9yKG10IGluIGtlKU8oa2UsbXQpJiYoYigkZT1rZVttdF0pP3RoaXNbbXRdPSRlOnRoaXNbIl8iK210XT0kZSk7dGhpcy5fY29uZmlnPWtlLHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50PW5ldyBSZWdF''@;'; put 'put ''eHAoKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlfHx0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSsifCIrL1xkezEsMn0vLnNvdXJjZSl9LFNvLmVyYXM9ZnVuY3Rpb24gdTAoa2UsJGUpe3ZhciBtdCxMdCxHdCxVbj10aGlzLl9lcmFzfHxsdSgiZW4iKS5fZXJhcztmb3Io''@;'; put 'put ''bXQ9MCxMdD1Vbi5sZW5ndGg7bXQ8THQ7KyttdClzd2l0Y2goInN0cmluZyI9PXR5cGVvZiBVblttdF0uc2luY2UmJihHdD14KFVuW210XS5zaW5jZSkuc3RhcnRPZigiZGF5IiksVW5bbXRdLnNpbmNlPUd0LnZhbHVlT2YoKSksdHlwZW9mIFVuW210XS51bnRpbCl7Y2FzZSJ1bmRlZmluZWQi''@;'; put 'put ''OlVuW210XS51bnRpbD0xLzA7YnJlYWs7Y2FzZSJzdHJpbmciOkd0PXgoVW5bbXRdLnVudGlsKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksVW5bbXRdLnVudGlsPUd0LnZhbHVlT2YoKX1yZXR1cm4gVW59LFNvLmVyYXNQYXJzZT1mdW5jdGlvbiBwMyhrZSwkZSxtdCl7dmFyIEx0LEd0LERy''@;'; put 'put ''LHlvLGVzLFVuPXRoaXMuZXJhcygpO2ZvcihrZT1rZS50b1VwcGVyQ2FzZSgpLEx0PTAsR3Q9VW4ubGVuZ3RoO0x0PEd0OysrTHQpaWYoRHI9VW5bTHRdLm5hbWUudG9VcHBlckNhc2UoKSx5bz1VbltMdF0uYWJici50b1VwcGVyQ2FzZSgpLGVzPVVuW0x0XS5uYXJyb3cudG9VcHBlckNhc2Uo''@;'; put 'put ''KSxtdClzd2l0Y2goJGUpe2Nhc2UiTiI6Y2FzZSJOTiI6Y2FzZSJOTk4iOmlmKHlvPT09a2UpcmV0dXJuIFVuW0x0XTticmVhaztjYXNlIk5OTk4iOmlmKERyPT09a2UpcmV0dXJuIFVuW0x0XTticmVhaztjYXNlIk5OTk5OIjppZihlcz09PWtlKXJldHVybiBVbltMdF19ZWxzZSBpZihbRHIs''@;'; put 'put ''eW8sZXNdLmluZGV4T2Yoa2UpPj0wKXJldHVybiBVbltMdF19LFNvLmVyYXNDb252ZXJ0WWVhcj1mdW5jdGlvbiBnMyhrZSwkZSl7dmFyIG10PWtlLnNpbmNlPD1rZS51bnRpbD8xOi0xO3JldHVybiB2b2lkIDA9PT0kZT94KGtlLnNpbmNlKS55ZWFyKCk6eChrZS5zaW5jZSkueWVhcigpKygk''@;'; put 'put ''ZS1rZS5vZmZzZXQpKm10fSxTby5lcmFzQWJiclJlZ2V4PWZ1bmN0aW9uIEYyKGtlKXtyZXR1cm4gTyh0aGlzLCJfZXJhc0FiYnJSZWdleCIpfHxpYy5jYWxsKHRoaXMpLGtlP3RoaXMuX2VyYXNBYmJyUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxTby5lcmFzTmFtZVJlZ2V4PWZ1bmN0aW9uIGQw''@;'; put 'put ''KGtlKXtyZXR1cm4gTyh0aGlzLCJfZXJhc05hbWVSZWdleCIpfHxpYy5jYWxsKHRoaXMpLGtlP3RoaXMuX2VyYXNOYW1lUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxTby5lcmFzTmFycm93UmVnZXg9ZnVuY3Rpb24gSDIoa2Upe3JldHVybiBPKHRoaXMsIl9lcmFzTmFycm93UmVnZXgiKXx8aWMu''@;'; put 'put ''Y2FsbCh0aGlzKSxrZT90aGlzLl9lcmFzTmFycm93UmVnZXg6dGhpcy5fZXJhc1JlZ2V4fSxTby5tb250aHM9ZnVuY3Rpb24gaW8oa2UsJGUpe3JldHVybiBrZT9sZSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1trZS5tb250aCgpXTp0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zv''@;'; put 'put ''cm1hdHx8SmkpLnRlc3QoJGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1ba2UubW9udGgoKV06bGUodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHM6dGhpcy5fbW9udGhzLnN0YW5kYWxvbmV9LFNvLm1vbnRoc1Nob3J0PWZ1bmN0aW9uIEdpKGtlLCRlKXtyZXR1cm4ga2U/bGUodGhpcy5fbW9u''@;'; put 'put ''dGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0W2tlLm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W0ppLnRlc3QoJGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1ba2UubW9udGgoKV06bGUodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0LnN0''@;'; put 'put ''YW5kYWxvbmV9LFNvLm1vbnRoc1BhcnNlPWZ1bmN0aW9uIHlyKGtlLCRlLG10KXt2YXIgTHQsR3QsVW47aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gaG8uY2FsbCh0aGlzLGtlLCRlLG10KTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlz''@;'; put 'put ''Ll9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSksTHQ9MDtMdDwxMjtMdCsrKXtpZihHdD1qKFsyZTMsTHRdKSxtdCYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtMdF0mJih0aGlzLl9sb25nTW9udGhzUGFyc2VbTHRdPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9u''@;'; put 'put ''dGhzKEd0LCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtMdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHNTaG9ydChHdCwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpKSwhbXQmJiF0aGlzLl9tb250aHNQYXJzZVtMdF0mJihVbj0iXiIr''@;'; put 'put ''dGhpcy5tb250aHMoR3QsIiIpKyJ8XiIrdGhpcy5tb250aHNTaG9ydChHdCwiIiksdGhpcy5fbW9udGhzUGFyc2VbTHRdPW5ldyBSZWdFeHAoVW4ucmVwbGFjZSgiLiIsIiIpLCJpIikpLG10JiYiTU1NTSI9PT0kZSYmdGhpcy5fbG9uZ01vbnRoc1BhcnNlW0x0XS50ZXN0KGtlKSlyZXR1cm4g''@;'; put 'put ''THQ7aWYobXQmJiJNTU0iPT09JGUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2VbTHRdLnRlc3Qoa2UpKXJldHVybiBMdDtpZighbXQmJnRoaXMuX21vbnRoc1BhcnNlW0x0XS50ZXN0KGtlKSlyZXR1cm4gTHR9fSxTby5tb250aHNSZWdleD1mdW5jdGlvbiBMYyhrZSl7cmV0dXJuIHRoaXMuX21v''@;'; put 'put ''bnRoc1BhcnNlRXhhY3Q/KE8odGhpcywiX21vbnRoc1JlZ2V4Iil8fHVsLmNhbGwodGhpcyksa2U/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihPKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9cm8pLHRoaXMuX21vbnRoc1N0cmlj''@;'; put 'put ''dFJlZ2V4JiZrZT90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCl9LFNvLm1vbnRoc1Nob3J0UmVnZXg9ZnVuY3Rpb24gcnMoa2Upe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhPKHRoaXMsIl9tb250aHNSZWdleCIpfHx1bC5jYWxsKHRoaXMpLGtlP3Ro''@;'; put 'put ''aXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KE8odGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9YW8pLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJmtlP3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0''@;'; put 'put ''UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCl9LFNvLndlZWs9ZnVuY3Rpb24gQTIoa2Upe3JldHVybiBQYShrZSx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sU28uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24gZWEoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LFNvLmZp''@;'; put 'put ''cnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIFBoKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSxTby53ZWVrZGF5cz1mdW5jdGlvbiBIaChrZSwkZSl7dmFyIG10PWxlKHRoaXMuX3dlZWtkYXlzKT90aGlzLl93ZWVrZGF5czp0aGlzLl93ZWVrZGF5c1trZSYmITAhPT1rZSYmdGhpcy5fd2Vla2RheXMu''@;'; put 'put ''aXNGb3JtYXQudGVzdCgkZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXTtyZXR1cm4hMD09PWtlP1NhKG10LHRoaXMuX3dlZWsuZG93KTprZT9tdFtrZS5kYXkoKV06bXR9LFNvLndlZWtkYXlzTWluPWZ1bmN0aW9uIGJvKGtlKXtyZXR1cm4hMD09PWtlP1NhKHRoaXMuX3dlZWtkYXlzTWluLHRo''@;'; put 'put ''aXMuX3dlZWsuZG93KTprZT90aGlzLl93ZWVrZGF5c01pbltrZS5kYXkoKV06dGhpcy5fd2Vla2RheXNNaW59LFNvLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24gSXMoa2Upe3JldHVybiEwPT09a2U/U2EodGhpcy5fd2Vla2RheXNTaG9ydCx0aGlzLl93ZWVrLmRvdyk6a2U/dGhpcy5fd2Vla2Rh''@;'; put 'put ''eXNTaG9ydFtrZS5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH0sU28ud2Vla2RheXNQYXJzZT1mdW5jdGlvbiBUMihrZSwkZSxtdCl7dmFyIEx0LEd0LFVuO2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gcjAuY2FsbCh0aGlzLGtlLCRlLG10KTtmb3IodGhpcy5fd2Vla2Rh''@;'; put 'put ''eXNQYXJzZXx8KHRoaXMuX3dlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2U9W10pLEx0PTA7THQ8NztMdCsrKXtpZihHdD1qKFsyZTMsMV0pLmRheShMdCksbXQmJiF0aGlz''@;'; put 'put ''Ll9mdWxsV2Vla2RheXNQYXJzZVtMdF0mJih0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtMdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhHdCwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbTHRdPW5ldyBSZWdFeHAoIl4iK3Ro''@;'; put 'put ''aXMud2Vla2RheXNTaG9ydChHdCwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW0x0XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzTWluKEd0LCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpKSx0aGlzLl93ZWVrZGF5c1Bh''@;'; put 'put ''cnNlW0x0XXx8KFVuPSJeIit0aGlzLndlZWtkYXlzKEd0LCIiKSsifF4iK3RoaXMud2Vla2RheXNTaG9ydChHdCwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKEd0LCIiKSx0aGlzLl93ZWVrZGF5c1BhcnNlW0x0XT1uZXcgUmVnRXhwKFVuLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxtdCYmImRk''@;'; put 'put ''ZGQiPT09JGUmJnRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW0x0XS50ZXN0KGtlKSlyZXR1cm4gTHQ7aWYobXQmJiJkZGQiPT09JGUmJnRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtMdF0udGVzdChrZSkpcmV0dXJuIEx0O2lmKG10JiYiZGQiPT09JGUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vb''@;'; put 'put ''THRdLnRlc3Qoa2UpKXJldHVybiBMdDtpZighbXQmJnRoaXMuX3dlZWtkYXlzUGFyc2VbTHRdLnRlc3Qoa2UpKXJldHVybiBMdH19LFNvLndlZWtkYXlzUmVnZXg9ZnVuY3Rpb24gX2Moa2Upe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KE8odGhpcywiX3dlZWtkYXlzUmVnZXgi''@;'; put 'put ''KXx8bzAuY2FsbCh0aGlzKSxrZT90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpOihPKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PW4wKSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZrZT90aGlzLl93ZWVrZGF5c1N0''@;'; put 'put ''cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpfSxTby53ZWVrZGF5c1Nob3J0UmVnZXg9ZnVuY3Rpb24ga28oa2Upe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KE8odGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8bzAuY2FsbCh0aGlzKSxrZT90aGlzLl93ZWVrZGF5c1Nob3J0''@;'; put 'put ''U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooTyh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9cWEpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYma2U/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4''@;'; put 'put ''OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCl9LFNvLndlZWtkYXlzTWluUmVnZXg9ZnVuY3Rpb24gQ3Moa2Upe3JldHVybiB0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3Q/KE8odGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8bzAuY2FsbCh0aGlzKSxrZT90aGlzLl93ZWVrZGF5c01pblN0cmljdFJl''@;'; put 'put ''Z2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihPKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXZjKSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZrZT90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWlu''@;'; put 'put ''UmVnZXgpfSxTby5pc1BNPWZ1bmN0aW9uIGJpKGtlKXtyZXR1cm4icCI9PT0oa2UrIiIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApfSxTby5tZXJpZGllbT1mdW5jdGlvbiBGYShrZSwkZSxtdCl7cmV0dXJuIGtlPjExP210PyJwbSI6IlBNIjptdD8iYW0iOiJBTSJ9LEhvKCJlbiIse2VyYXM6''@;'; put 'put ''W3tzaW5jZToiMDAwMS0wMS0wMSIsdW50aWw6MS8wLG9mZnNldDoxLG5hbWU6IkFubm8gRG9taW5pIixuYXJyb3c6IkFEIixhYmJyOiJBRCJ9LHtzaW5jZToiMDAwMC0xMi0zMSIsdW50aWw6LTEvMCxvZmZzZXQ6MSxuYW1lOiJCZWZvcmUgQ2hyaXN0IixuYXJyb3c6IkJDIixhYmJyOiJCQyJ9''@;'; put 'put ''XSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5jdGlvbihrZSl7dmFyICRlPWtlJTEwO3JldHVybiBrZSsoMT09PXV0KGtlJTEwMC8xMCk/InRoIjoxPT09JGU/InN0IjoyPT09JGU/Im5kIjozPT09JGU/InJkIjoidGgiKX19KSx4Lmxh''@;'; put 'put ''bmc9dWUoIm1vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuIixIbykseC5sYW5nRGF0YT11ZSgibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIsbHUpO3ZhciBqMD1NYXRoLmFicztm''@;'; put 'put ''dW5jdGlvbiBOMihrZSwkZSxtdCxMdCl7dmFyIEd0PU1hKCRlLG10KTtyZXR1cm4ga2UuX21pbGxpc2Vjb25kcys9THQqR3QuX21pbGxpc2Vjb25kcyxrZS5fZGF5cys9THQqR3QuX2RheXMsa2UuX21vbnRocys9THQqR3QuX21vbnRocyxrZS5fYnViYmxlKCl9ZnVuY3Rpb24gRHUoa2Upe3Jl''@;'; put 'put ''dHVybiBrZTwwP01hdGguZmxvb3Ioa2UpOk1hdGguY2VpbChrZSl9ZnVuY3Rpb24gZmwoa2Upe3JldHVybiA0ODAwKmtlLzE0NjA5N31mdW5jdGlvbiB2MyhrZSl7cmV0dXJuIDE0NjA5NyprZS80ODAwfWZ1bmN0aW9uIEl1KGtlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcyhr''@;'; put 'put ''ZSl9fXZhciBiMz1JdSgibXMiKSx2bT1JdSgicyIpLGQ5PUl1KCJtIiksTHU9SXUoImgiKSx6MD1JdSgiZCIpLGg5PUl1KCJ3IikseTM9SXUoIk0iKSxmOT1JdSgiUSIpLHA5PUl1KCJ5Iik7ZnVuY3Rpb24gVTAoa2Upe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90''@;'; put 'put ''aGlzLl9kYXRhW2tlXTpOYU59fXZhciBfbT1VMCgibWlsbGlzZWNvbmRzIiksZzk9VTAoInNlY29uZHMiKSx2YT1VMCgibWludXRlcyIpLFQ0PVUwKCJob3VycyIpLG05PVUwKCJkYXlzIiksdjk9VTAoIm1vbnRocyIpLEZsPVUwKCJ5ZWFycyIpO3ZhciBaMD1NYXRoLnJvdW5kLFJ1PXtzczo0''@;'; put 'put ''NCxzOjQ1LG06NDUsaDoyMixkOjI2LHc6bnVsbCxNOjExfTtmdW5jdGlvbiBENChrZSwkZSxtdCxMdCxHdCl7cmV0dXJuIEd0LnJlbGF0aXZlVGltZSgkZXx8MSwhIW10LGtlLEx0KX12YXIgSTQ9TWF0aC5hYnM7ZnVuY3Rpb24gWTAoa2Upe3JldHVybihrZT4wKS0oa2U8MCl8fCtrZX1mdW5j''@;'; put 'put ''dGlvbiBIbCgpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgTHQsR3QsVW4sRHIsZXMsenMsb2MsZjAsa2U9STQodGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMsJGU9STQodGhpcy5fZGF5cyksbXQ9STQodGhpcy5fbW9udGhzKSx5''@;'; put 'put ''bz10aGlzLmFzU2Vjb25kcygpO3JldHVybiB5bz8oTHQ9aXQoa2UvNjApLEd0PWl0KEx0LzYwKSxrZSU9NjAsTHQlPTYwLFVuPWl0KG10LzEyKSxtdCU9MTIsRHI9a2U/a2UudG9GaXhlZCgzKS5yZXBsYWNlKC9cLj8wKyQvLCIiKToiIixlcz15bzwwPyItIjoiIix6cz1ZMCh0aGlzLl9tb250''@;'; put 'put ''aHMpIT09WTAoeW8pPyItIjoiIixvYz1ZMCh0aGlzLl9kYXlzKSE9PVkwKHlvKT8iLSI6IiIsZjA9WTAodGhpcy5fbWlsbGlzZWNvbmRzKSE9PVkwKHlvKT8iLSI6IiIsZXMrIlAiKyhVbj96cytVbisiWSI6IiIpKyhtdD96cyttdCsiTSI6IiIpKygkZT9vYyskZSsiRCI6IiIpKyhHdHx8THR8''@;'; put 'put ''fGtlPyJUIjoiIikrKEd0P2YwK0d0KyJIIjoiIikrKEx0P2YwK0x0KyJNIjoiIikrKGtlP2YwK0RyKyJTIjoiIikpOiJQMEQifXZhciBicz1BZC5wcm90b3R5cGU7cmV0dXJuIGJzLmlzVmFsaWQ9ZnVuY3Rpb24gc20oKXtyZXR1cm4gdGhpcy5faXNWYWxpZH0sYnMuYWJzPWZ1bmN0aW9uIEhk''@;'; put 'put ''KCl7dmFyIGtlPXRoaXMuX2RhdGE7cmV0dXJuIHRoaXMuX21pbGxpc2Vjb25kcz1qMCh0aGlzLl9taWxsaXNlY29uZHMpLHRoaXMuX2RheXM9ajAodGhpcy5fZGF5cyksdGhpcy5fbW9udGhzPWowKHRoaXMuX21vbnRocyksa2UubWlsbGlzZWNvbmRzPWowKGtlLm1pbGxpc2Vjb25kcyksa2Uu''@;'; put 'put ''c2Vjb25kcz1qMChrZS5zZWNvbmRzKSxrZS5taW51dGVzPWowKGtlLm1pbnV0ZXMpLGtlLmhvdXJzPWowKGtlLmhvdXJzKSxrZS5tb250aHM9ajAoa2UubW9udGhzKSxrZS55ZWFycz1qMChrZS55ZWFycyksdGhpc30sYnMuYWRkPWZ1bmN0aW9uIFYyKGtlLCRlKXtyZXR1cm4gTjIodGhpcyxr''@;'; put 'put ''ZSwkZSwxKX0sYnMuc3VidHJhY3Q9ZnVuY3Rpb24gbW0oa2UsJGUpe3JldHVybiBOMih0aGlzLGtlLCRlLC0xKX0sYnMuYXM9ZnVuY3Rpb24gQTQoa2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3ZhciAkZSxtdCxMdD10aGlzLl9taWxsaXNlY29uZHM7aWYoIm1vbnRoIj09PShr''@;'; put 'put ''ZT1YZShrZSkpfHwicXVhcnRlciI9PT1rZXx8InllYXIiPT09a2Upc3dpdGNoKCRlPXRoaXMuX2RheXMrTHQvODY0ZTUsbXQ9dGhpcy5fbW9udGhzK2ZsKCRlKSxrZSl7Y2FzZSJtb250aCI6cmV0dXJuIG10O2Nhc2UicXVhcnRlciI6cmV0dXJuIG10LzM7Y2FzZSJ5ZWFyIjpyZXR1cm4gbXQv''@;'; put 'put ''MTJ9ZWxzZSBzd2l0Y2goJGU9dGhpcy5fZGF5cytNYXRoLnJvdW5kKHYzKHRoaXMuX21vbnRocykpLGtlKXtjYXNlIndlZWsiOnJldHVybiAkZS83K0x0LzYwNDhlNTtjYXNlImRheSI6cmV0dXJuICRlK0x0Lzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KiRlK0x0LzM2ZTU7Y2FzZSJtaW51''@;'; put 'put ''dGUiOnJldHVybiAxNDQwKiRlK0x0LzZlNDtjYXNlInNlY29uZCI6cmV0dXJuIDg2NDAwKiRlK0x0LzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSokZSkrTHQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gdW5pdCAiK2tlKX19LGJzLmFzTWls''@;'; put 'put ''bGlzZWNvbmRzPWIzLGJzLmFzU2Vjb25kcz12bSxicy5hc01pbnV0ZXM9ZDksYnMuYXNIb3Vycz1MdSxicy5hc0RheXM9ejAsYnMuYXNXZWVrcz1oOSxicy5hc01vbnRocz15Myxicy5hc1F1YXJ0ZXJzPWY5LGJzLmFzWWVhcnM9cDksYnMudmFsdWVPZj1mdW5jdGlvbiBfMygpe3JldHVybiB0''@;'; put 'put ''aGlzLmlzVmFsaWQoKT90aGlzLl9taWxsaXNlY29uZHMrODY0ZTUqdGhpcy5fZGF5cyt0aGlzLl9tb250aHMlMTIqMjU5MmU2KzMxNTM2ZTYqdXQodGhpcy5fbW9udGhzLzEyKTpOYU59LGJzLl9idWJibGU9ZnVuY3Rpb24gbTMoKXt2YXIgR3QsVW4sRHIseW8sZXMsa2U9dGhpcy5fbWlsbGlz''@;'; put 'put ''ZWNvbmRzLCRlPXRoaXMuX2RheXMsbXQ9dGhpcy5fbW9udGhzLEx0PXRoaXMuX2RhdGE7cmV0dXJuIGtlPj0wJiYkZT49MCYmbXQ+PTB8fGtlPD0wJiYkZTw9MCYmbXQ8PTB8fChrZSs9ODY0ZTUqRHUodjMobXQpKyRlKSwkZT0wLG10PTApLEx0Lm1pbGxpc2Vjb25kcz1rZSUxZTMsR3Q9aXQo''@;'; put 'put ''a2UvMWUzKSxMdC5zZWNvbmRzPUd0JTYwLFVuPWl0KEd0LzYwKSxMdC5taW51dGVzPVVuJTYwLERyPWl0KFVuLzYwKSxMdC5ob3Vycz1EciUyNCwkZSs9aXQoRHIvMjQpLG10Kz1lcz1pdChmbCgkZSkpLCRlLT1EdSh2MyhlcykpLHlvPWl0KG10LzEyKSxtdCU9MTIsTHQuZGF5cz0kZSxMdC5t''@;'; put 'put ''b250aHM9bXQsTHQueWVhcnM9eW8sdGhpc30sYnMuY2xvbmU9ZnVuY3Rpb24gTHcoKXtyZXR1cm4gTWEodGhpcyl9LGJzLmdldD1mdW5jdGlvbiBLaChrZSl7cmV0dXJuIGtlPVhlKGtlKSx0aGlzLmlzVmFsaWQoKT90aGlzW2tlKyJzIl0oKTpOYU59LGJzLm1pbGxpc2Vjb25kcz1fbSxicy5z''@;'; put 'put ''ZWNvbmRzPWc5LGJzLm1pbnV0ZXM9dmEsYnMuaG91cnM9VDQsYnMuZGF5cz1tOSxicy53ZWVrcz1mdW5jdGlvbiBibSgpe3JldHVybiBpdCh0aGlzLmRheXMoKS83KX0sYnMubW9udGhzPXY5LGJzLnllYXJzPUZsLGJzLmh1bWFuaXplPWZ1bmN0aW9uIF9hKGtlLCRlKXtpZighdGhpcy5pc1Zh''@;'; put 'put ''bGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIEd0LFVuLG10PSExLEx0PVJ1O3JldHVybiJvYmplY3QiPT10eXBlb2Yga2UmJigkZT1rZSxrZT0hMSksImJvb2xlYW4iPT10eXBlb2Yga2UmJihtdD1rZSksIm9iamVjdCI9PXR5cGVvZiAkZSYmKEx0PU9i''@;'; put 'put ''amVjdC5hc3NpZ24oe30sUnUsJGUpLG51bGwhPSRlLnMmJm51bGw9PSRlLnNzJiYoTHQuc3M9JGUucy0xKSksVW49ZnVuY3Rpb24gaDAoa2UsJGUsbXQsTHQpe3ZhciBHdD1NYShrZSkuYWJzKCksVW49WjAoR3QuYXMoInMiKSksRHI9WjAoR3QuYXMoIm0iKSkseW89WjAoR3QuYXMoImgiKSks''@;'; put 'put ''ZXM9WjAoR3QuYXMoImQiKSksenM9WjAoR3QuYXMoIk0iKSksb2M9WjAoR3QuYXMoInciKSksZjA9WjAoR3QuYXMoInkiKSksVzA9VW48PW10LnNzJiZbInMiLFVuXXx8VW48bXQucyYmWyJzcyIsVW5dfHxEcjw9MSYmWyJtIl18fERyPG10Lm0mJlsibW0iLERyXXx8eW88PTEmJlsiaCJdfHx5''@;'; put 'put ''bzxtdC5oJiZbImhoIix5b118fGVzPD0xJiZbImQiXXx8ZXM8bXQuZCYmWyJkZCIsZXNdO3JldHVybiBudWxsIT1tdC53JiYoVzA9VzB8fG9jPD0xJiZbInciXXx8b2M8bXQudyYmWyJ3dyIsb2NdKSwoVzA9VzB8fHpzPD0xJiZbIk0iXXx8enM8bXQuTSYmWyJNTSIsenNdfHxmMDw9MSYmWyJ5''@;'; put 'put ''Il18fFsieXkiLGYwXSlbMl09JGUsVzBbM109K2tlPjAsVzBbNF09THQsRDQuYXBwbHkobnVsbCxXMCl9KHRoaXMsIW10LEx0LEd0PXRoaXMubG9jYWxlRGF0YSgpKSxtdCYmKFVuPUd0LnBhc3RGdXR1cmUoK3RoaXMsVW4pKSxHdC5wb3N0Zm9ybWF0KFVuKX0sYnMudG9JU09TdHJpbmc9SGws''@;'; put 'put ''YnMudG9TdHJpbmc9SGwsYnMudG9KU09OPUhsLGJzLmxvY2FsZT1IaSxicy5sb2NhbGVEYXRhPURvLGJzLnRvSXNvU3RyaW5nPXVlKCJ0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKSIsSGwp''@;'; put 'put ''LGJzLmxhbmc9QmksZGUoIlgiLDAsMCwidW5peCIpLGRlKCJ4IiwwLDAsInZhbHVlT2YiKSxwdCgieCIsTnQpLHB0KCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSx4bigiWCIsZnVuY3Rpb24oa2UsJGUsbXQpe210Ll9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KGtlKSl9KSx4bigieCIs''@;'; put 'put ''ZnVuY3Rpb24oa2UsJGUsbXQpe210Ll9kPW5ldyBEYXRlKHV0KGtlKSl9KSx4LnZlcnNpb249IjIuMjkuNCIsZnVuY3Rpb24gbShrZSl7YWU9a2V9KGNhKSx4LmZuPXdpLHgubWluPWZ1bmN0aW9uIHV1KCl7cmV0dXJuIGFyKCJpc0JlZm9yZSIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkp''@;'; put 'put ''fSx4Lm1heD1mdW5jdGlvbiBGaSgpe3JldHVybiBhcigiaXNBZnRlciIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSx4Lm5vdz1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdz9EYXRlLm5vdygpOituZXcgRGF0ZX0seC51dGM9aix4LnVuaXg9ZnVuY3Rpb24gUGQoa2Upe3JldHVybiBj''@;'; put 'put ''YSgxZTMqa2UpfSx4Lm1vbnRocz1mdW5jdGlvbiBIMShrZSwkZSl7cmV0dXJuIGhsKGtlLCRlLCJtb250aHMiKX0seC5pc0RhdGU9SSx4LmxvY2FsZT1Ibyx4LmludmFsaWQ9VSx4LmR1cmF0aW9uPU1hLHguaXNNb21lbnQ9c2UseC53ZWVrZGF5cz1mdW5jdGlvbiB1OShrZSwkZSxtdCl7cmV0''@;'; put 'put ''dXJuIGZ1KGtlLCRlLG10LCJ3ZWVrZGF5cyIpfSx4LnBhcnNlWm9uZT1mdW5jdGlvbiBJdygpe3JldHVybiBjYS5hcHBseShudWxsLGFyZ3VtZW50cykucGFyc2Vab25lKCl9LHgubG9jYWxlRGF0YT1sdSx4LmlzRHVyYXRpb249ZHUseC5tb250aHNTaG9ydD1mdW5jdGlvbiBwbShrZSwkZSl7''@;'; put 'put ''cmV0dXJuIGhsKGtlLCRlLCJtb250aHNTaG9ydCIpfSx4LndlZWtkYXlzTWluPWZ1bmN0aW9uIGdtKGtlLCRlLG10KXtyZXR1cm4gZnUoa2UsJGUsbXQsIndlZWtkYXlzTWluIil9LHguZGVmaW5lTG9jYWxlPXljLHgudXBkYXRlTG9jYWxlPWZ1bmN0aW9uIGNpKGtlLCRlKXtpZihudWxsIT0k''@;'; put 'put ''ZSl7dmFyIG10LEx0LEd0PUhhO251bGwhPSRvW2tlXSYmbnVsbCE9JG9ba2VdLnBhcmVudExvY2FsZT8kb1trZV0uc2V0KEgoJG9ba2VdLl9jb25maWcsJGUpKToobnVsbCE9KEx0PWZyKGtlKSkmJihHdD1MdC5fY29uZmlnKSwkZT1IKEd0LCRlKSxudWxsPT1MdCYmKCRlLmFiYnI9a2UpLCht''@;'; put 'put ''dD1uZXcgTigkZSkpLnBhcmVudExvY2FsZT0kb1trZV0sJG9ba2VdPW10KSxIbyhrZSl9ZWxzZSBudWxsIT0kb1trZV0mJihudWxsIT0kb1trZV0ucGFyZW50TG9jYWxlPygkb1trZV09JG9ba2VdLnBhcmVudExvY2FsZSxrZT09PUhvKCkmJkhvKGtlKSk6bnVsbCE9JG9ba2VdJiZkZWxldGUg''@;'; put 'put ''JG9ba2VdKTtyZXR1cm4gJG9ba2VdfSx4LmxvY2FsZXM9ZnVuY3Rpb24gZHIoKXtyZXR1cm4gZygkbyl9LHgud2Vla2RheXNTaG9ydD1mdW5jdGlvbiBGZChrZSwkZSxtdCl7cmV0dXJuIGZ1KGtlLCRlLG10LCJ3ZWVrZGF5c1Nob3J0Iil9LHgubm9ybWFsaXplVW5pdHM9WGUseC5yZWxhdGl2''@;'; put 'put ''ZVRpbWVSb3VuZGluZz1mdW5jdGlvbiB5bShrZSl7cmV0dXJuIHZvaWQgMD09PWtlP1owOiJmdW5jdGlvbiI9PXR5cGVvZiBrZSYmKFowPWtlLCEwKX0seC5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQ9ZnVuY3Rpb24gd20oa2UsJGUpe3JldHVybiB2b2lkIDAhPT1SdVtrZV0mJih2b2lkIDA9PT0k''@;'; put 'put ''ZT9SdVtrZV06KFJ1W2tlXT0kZSwicyI9PT1rZSYmKFJ1LnNzPSRlLTEpLCEwKSl9LHguY2FsZW5kYXJGb3JtYXQ9ZnVuY3Rpb24gd3Ioa2UsJGUpe3ZhciBtdD1rZS5kaWZmKCRlLCJkYXlzIiwhMCk7cmV0dXJuIG10PC02PyJzYW1lRWxzZSI6bXQ8LTE/Imxhc3RXZWVrIjptdDwwPyJsYXN0''@;'; put 'put ''RGF5IjptdDwxPyJzYW1lRGF5IjptdDwyPyJuZXh0RGF5IjptdDw3PyJuZXh0V2VlayI6InNhbWVFbHNlIn0seC5wcm90b3R5cGU9d2kseC5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1NLUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1t''@;'; put 'put ''OnNzIixEQVRFVElNRV9MT0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJISDptbTpzcy5TU1MiLFdFRUs6IkdHR0ctW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0seH0o''@;'; put 'put ''KX0sNDQzMTY6YXQ9PnthdC5leHBvcnRzPWZ1bmN0aW9uIEllKEYsYWUseCl7ZnVuY3Rpb24gbShPLFIpe2lmKCFhZVtPXSl7aWYoIUZbT10pe2lmKGxlKXJldHVybiBsZShPLCEwKTt2YXIgSz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitPKyInIik7dGhyb3cgSy5jb2RlPSJN''@;'; put 'put ''T0RVTEVfTk9UX0ZPVU5EIixLfXZhciBJPWFlW09dPXtleHBvcnRzOnt9fTtGW09dWzBdLmNhbGwoSS5leHBvcnRzLGZ1bmN0aW9uKGspe3JldHVybiBtKEZbT11bMV1ba118fGspfSxJLEkuZXhwb3J0cyxJZSxGLGFlLHgpfXJldHVybiBhZVtPXS5leHBvcnRzfWZvcih2YXIgbGU9dm9pZCAw''@;'; put 'put ''LE09MDtNPHgubGVuZ3RoO00rKyltKHhbTV0pO3JldHVybiBtfSh7MTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVy''@;'; put 'put ''YXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUp''@;'; put 'put ''e3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9''@;'; put 'put ''KSkuYmc9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIg''@;'; put 'put ''Vj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5l''@;'; put 'put ''eHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJiZyIsZGVsaW1p''@;'; put 'put ''dGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQxOCIsbWlsbGlvbjoiXHUwNDEwIixiaWxsaW9uOiJNIix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MDQzYlx1''@;'; put 'put ''MDQzMi4iLGNvZGU6IkJHTiJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwyOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxl''@;'; put 'put ''KCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5jc0NaPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9b''@;'; put 'put ''a10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VO''@;'; put 'put ''RCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJ''@;'; put 'put ''ZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiY3MtQ1oiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiXHhhMCIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0aXMuIixt''@;'; put 'put ''aWxsaW9uOiJtaWwuIixiaWxsaW9uOiJtbGQuIix0cmlsbGlvbjoiYmlsLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LHNwYWNlU2VwYXJhdGVkOiEwLGN1cnJlbmN5OntzeW1ib2w6IktcdTAxMGQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJDWksifSxjdXJyZW5jeUZvcm1h''@;'; put 'put ''dDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3Vy''@;'; put 'put ''cmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNl''@;'; put 'put ''U2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMzpbZnVu''@;'; put 'put ''Y3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0p''@;'; put 'put ''e3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShh''@;'; put 'put ''ZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZGFESz1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShN''@;'; put 'put ''LE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0''@;'; put 'put ''aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZh''@;'; put 'put ''ciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImRhLURLIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZp''@;'; put 'put ''YXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoibWlvIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJES0sifSxjdXJyZW5jeUZvcm1hdDp7dGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3ki''@;'; put 'put ''LG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDpbZnVuY3Rpb24o''@;'; put 'put ''SWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVy''@;'; put 'put ''biBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2''@;'; put 'put ''b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZGVBVD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7''@;'; put 'put ''ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBW''@;'; put 'put ''LmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImRlLUFUIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25z''@;'; put 'put ''Ont0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLGNvZGU6IkVVUiJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2Jh''@;'; put 'put ''bDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw1OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm''@;'; put 'put ''JiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wi''@;'; put 'put ''OnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3Nl''@;'; put 'put ''bGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5kZUNIPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBq''@;'; put 'put ''KGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkp''@;'; put 'put ''e3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5l''@;'; put 'put ''eHBvcnRzPXtsYW5ndWFnZVRhZzoiZGUtQ0giLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiJyIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1''@;'; put 'put ''cnJlbmN5OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3Ro''@;'; put 'put ''OjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIs''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xv''@;'; put 'put ''YmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw2OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wi''@;'; put 'put ''PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBN''@;'; put 'put ''fSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcyku''@;'; put 'put ''bnVtYnJvfHwoTS5udW1icm89e30pKS5kZURFPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lm''@;'; put 'put ''KEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6''@;'; put 'put ''KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXts''@;'; put 'put ''YW5ndWFnZVRhZzoiZGUtREUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0b3RhbExlbmd0aDo0LHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''OiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVk''@;'; put 'put ''OiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwi''@;'; put 'put ''dSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNzpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5p''@;'; put 'put ''dGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24o''@;'; put 'put ''bGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJv''@;'; put 'put ''PXt9KSkuZGVMST1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITAp''@;'; put 'put ''O3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0s''@;'; put 'put ''QixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImRlLUxJ''@;'; put 'put ''IixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiciLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLHBvc2l0''@;'; put 'put ''aW9uOiJwb3N0Zml4Iixjb2RlOiJDSEYifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJh''@;'; put 'put ''Z2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxs''@;'; put 'put ''V2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0''@;'; put 'put ''eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sODpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9m''@;'; put 'put ''dW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBN''@;'; put 'put ''OyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZWw9''@;'; put 'put ''bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcg''@;'; put 'put ''RXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRz''@;'; put 'put ''LGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJlbCIsZGVsaW1pdGVyczp7''@;'; put 'put ''dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDNjNyIsbWlsbGlvbjoiXHUwM2I1IixiaWxsaW9uOiJcdTAzYjQiLHRyaWxsaW9uOiJcdTAzYzQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIw''@;'; put 'put ''YWMiLGNvZGU6IkVVUiJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw5OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBT''@;'; put 'put ''eW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6''@;'; put 'put ''KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lbkFVPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10p''@;'; put 'put ''e2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIs''@;'; put 'put ''Vn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJ''@;'; put 'put ''PTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZW4tQVUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJt''@;'; put 'put ''IixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09fn4oUiUxMDAvMTApPyJ0aCI6MT09PXo/InN0IjoyPT09ej8ibmQiOjM9PT16PyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIs''@;'; put 'put ''Y29kZToiQVVEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0''@;'; put 'put ''aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDEwOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxl''@;'; put 'put ''KCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lbkdCPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9b''@;'; put 'put ''a10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VO''@;'; put 'put ''RCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJ''@;'; put 'put ''ZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZW4tR0IiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9u''@;'; put 'put ''OiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09fn4oUiUxMDAvMTApPyJ0aCI6MT09PXo/InN0IjoyPT09ej8ibmQiOjM9PT16PyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhMyIscG9zaXRpb246InBy''@;'; put 'put ''ZWZpeCIsY29kZToiR0JQIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxm''@;'; put 'put ''dWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0Rl''@;'; put 'put ''Y2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdp''@;'; put 'put ''bmRvdzwidSI/d2luZG93Ont9KX0se31dLDExOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9u''@;'; put 'put ''KE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVj''@;'; put 'put ''dCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lbklFPWxlKCl9''@;'; put 'put ''KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9y''@;'; put 'put ''KCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxN''@;'; put 'put ''LE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZW4tSUUiLGRlbGltaXRlcnM6e3Ro''@;'; put 'put ''b3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09fn4oUiUxMDAvMTApPyJ0aCI6MT09PXo/InN0IjoyPT09''@;'; put 'put ''ej8ibmQiOjM9PT16PyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixjb2RlOiJFVVIifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6''@;'; put 'put ''e30pfSx7fV0sMTI6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVv''@;'; put 'put ''ZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFl''@;'; put 'put ''PyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmVuTlo9bGUoKX0oZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1v''@;'; put 'put ''ZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1tr''@;'; put 'put ''XS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJlbi1OWiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNp''@;'; put 'put ''bWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihSKXt2YXIgej1SJTEwO3JldHVybiAxPT1+fihSJTEwMC8xMCk/InRoIjoxPT09ej8ic3QiOjI9PT16PyJuZCI6Mz09PXo/InJk''@;'; put 'put ''IjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJOWkQifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3Rh''@;'; put 'put ''bExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0''@;'; put 'put ''aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5k''@;'; put 'put ''b3c6e30pfSx7fV0sMTM6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5''@;'; put 'put ''cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09''@;'; put 'put ''PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmVuWkE9bGUoKX0oZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5k''@;'; put 'put ''IG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4g''@;'; put 'put ''T1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJlbi1aQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixk''@;'; put 'put ''ZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihSKXt2YXIgej1SJTEwO3JldHVybiAxPT1+fihSJTEwMC8xMCk/InRoIjoxPT09ej8ic3QiOjI9PT16PyJuZCI6Mz09PXo/''@;'; put 'put ''InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJSIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJaQVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0''@;'; put 'put ''b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxs''@;'; put 'put ''V2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93''@;'; put 'put ''aW5kb3c6e30pfSx7fV0sMTQ6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJu''@;'; put 'put ''IHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQg''@;'; put 'put ''MD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmVzQVI9bGUoKX0oZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBm''@;'; put 'put ''aW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1''@;'; put 'put ''cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJlcy1BUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIu''@;'; put 'put ''IixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09PXp8fDM9PT16PyJlciI6Mj09PXo/ImRvIjo3PT09enx8MD09PXo/Im1v''@;'; put 'put ''Ijo4PT09ej8idm8iOjk9PT16PyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkFSUyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZv''@;'; put 'put ''cm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29E''@;'; put 'put ''ZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5j''@;'; put 'put ''YWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwxNTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3lt''@;'; put 'put ''Ym9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09''@;'; put 'put ''eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZXNDTD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEll''@;'; put 'put ''JiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxs''@;'; put 'put ''KEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsx''@;'; put 'put ''OltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImVzLUNMIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpm''@;'; put 'put ''dW5jdGlvbihSKXt2YXIgej1SJTEwO3JldHVybiAxPT09enx8Mz09PXo/ImVyIjoyPT09ej8iZG8iOjc9PT16fHwwPT09ej8ibW8iOjg9PT16PyJ2byI6OT09PXo/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJDTFAifSxjdXJyZW5jeUZv''@;'; put 'put ''cm1hdDp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFj''@;'; put 'put ''ZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwxNjpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0''@;'; put 'put ''aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhw''@;'; put 'put ''b3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZXNDTz1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUp''@;'; put 'put ''e2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9O''@;'; put 'put ''T1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImVzLUNPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIs''@;'; put 'put ''bWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihSKXt2YXIgej1SJTEwO3JldHVybiAxPT09enx8Mz09PXo/ImVyIjoyPT09ej8iZG8iOjc9PT16fHwwPT09ej8ibW8iOjg9PT16PyJ2byI6OT09PXo/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3lt''@;'; put 'put ''Ym9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNl''@;'; put 'put ''U2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBl''@;'; put 'put ''b2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMTc6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVv''@;'; put 'put ''ZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9''@;'; put 'put ''IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98''@;'; put 'put ''fChNLm51bWJybz17fSkpLmVzQ1I9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1''@;'; put 'put ''cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsx''@;'; put 'put ''XVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdl''@;'; put 'put ''VGFnOiJlcy1DUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09PXp8fDM9''@;'; put 'put ''PT16PyJlciI6Mj09PXo/ImRvIjo3PT09enx8MD09PXo/Im1vIjo4PT09ej8idm8iOjk9PT16PyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGExIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ1JDIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFs''@;'; put 'put ''TGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDE4OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxl''@;'; put 'put ''KCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lc0VTPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9b''@;'; put 'put ''a10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VO''@;'; put 'put ''RCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJ''@;'; put 'put ''ZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZXMtRVMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9u''@;'; put 'put ''OiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PT16fHwzPT09ej8iZXIiOjI9PT16PyJkbyI6Nz09PXp8fDA9PT16PyJtbyI6OD09PXo/InZvIjo5PT09ej8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1''@;'; put 'put ''MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxm''@;'; put 'put ''PCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwxOTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJv''@;'; put 'put ''bC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rp''@;'; put 'put ''b24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVt''@;'; put 'put ''YnJvPXt9KSkuZXNNWD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGss''@;'; put 'put ''ITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZ''@;'; put 'put ''KX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImVz''@;'; put 'put ''LU1YIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihSKXt2YXIgej1SJTEwO3JldHVybiAxPT09enx8Mz09PXo/ImVy''@;'; put 'put ''IjoyPT09ej8iZG8iOjc9PT16fHwwPT09ej8ibW8iOjg9PT16PyJ2byI6OT09PXo/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiTVhOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNz''@;'; put 'put ''YTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDIwOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0u''@;'; put 'put ''Y29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVv''@;'; put 'put ''ZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lc05JPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2td''@;'; put 'put ''KXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1P''@;'; put 'put ''W2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxl''@;'; put 'put ''bmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZXMtTkkiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlv''@;'; put 'put ''bjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PT16fHwzPT09ej8iZXIiOjI9PT16PyJkbyI6Nz09PXp8fDA9PT16PyJtbyI6OD09PXo/InZvIjo5PT09ej8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IkMkIixwb3NpdGlvbjoi''@;'; put 'put ''cHJlZml4Iixjb2RlOiJOSU8ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9''@;'; put 'put ''LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5v''@;'; put 'put ''RGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Yg''@;'; put 'put ''d2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMjE6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rp''@;'; put 'put ''b24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2Jq''@;'; put 'put ''ZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmVzUEU9bGUo''@;'; put 'put ''KX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJy''@;'; put 'put ''b3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxl''@;'; put 'put ''LE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJlcy1QRSIsZGVsaW1pdGVyczp7''@;'; put 'put ''dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09PXp8fDM9PT16PyJlciI6Mj09PXo/ImRvIjo3PT09''@;'; put 'put ''enx8MD09PXo/Im1vIjo4PT09ej8idm8iOjk9PT16PyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiUy8uIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJQRU4ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxh''@;'; put 'put ''dmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9''@;'; put 'put ''LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30s''@;'; put 'put ''WzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMjI6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7''@;'; put 'put ''cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5''@;'; put 'put ''bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2lu''@;'; put 'put ''ZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmVzUFI9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319''@;'; put 'put ''O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0p''@;'; put 'put ''O3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJlcy1QUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoi''@;'; put 'put ''dCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09PXp8fDM9PT16PyJlciI6Mj09PXo/ImRvIjo3PT09enx8MD09PXo/Im1vIjo4PT09ej8idm8iOjk9PT16PyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNE''@;'; put 'put ''In0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2lt''@;'; put 'put ''YWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6''@;'; put 'put ''ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93''@;'; put 'put ''Ont9KX0se31dLDIzOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBl''@;'; put 'put ''b2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1h''@;'; put 'put ''ZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lc1NWPWxlKCl9KGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBt''@;'; put 'put ''b2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9b''@;'; put 'put ''a10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZXMtU1YiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVj''@;'; put 'put ''aW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PT16fHwzPT09ej8iZXIiOjI9PT16PyJkbyI6Nz09PXp8fDA9PT16PyJtbyI6OD09''@;'; put 'put ''PXo/InZvIjo5PT09ej8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlNWQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6''@;'; put 'put ''e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFs''@;'; put 'put ''c05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRo''@;'; put 'put ''aXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwyNDpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnBy''@;'; put 'put ''b3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5''@;'; put 'put ''cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZXRFRT1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtp''@;'; put 'put ''ZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhw''@;'; put 'put ''b3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5j''@;'; put 'put ''dGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImV0LUVFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidHVoIixtaWxsaW9uOiJtbG4iLGJpbGxpb246Im1sZCIsdHJpbGxpb246InRybCJ9LG9yZGluYWw6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1h''@;'; put 'put ''dHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNp''@;'; put 'put ''bWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxs''@;'; put 'put ''KHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwyNTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9s''@;'; put 'put ''LnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94''@;'; put 'put ''OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZmFJUj1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJ''@;'; put 'put ''ZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIu''@;'; put 'put ''ZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltm''@;'; put 'put ''dW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImZhLUlSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx1MDYwYyIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA2NDdcdTA2MzJcdTA2MjdcdTA2MzEiLG1pbGxpb246Ilx1MDY0NVx1MDZjY1x1''@;'; put 'put ''MDY0NFx1MDZjY1x1MDY0OFx1MDY0NiIsYmlsbGlvbjoiXHUwNjQ1XHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjI3XHUwNjMxXHUwNjJmIix0cmlsbGlvbjoiXHUwNjJhXHUwNjMxXHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjQ4XHUwNjQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJcdTA2Mjdc''@;'; put 'put ''dTA2NDUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdWZkZmMiLGNvZGU6IklSUiJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwyNjpbZnVu''@;'; put 'put ''Y3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0p''@;'; put 'put ''e3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShh''@;'; put 'put ''ZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZmlGST1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShN''@;'; put 'put ''LE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0''@;'; put 'put ''aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZh''@;'; put 'put ''ciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImZpLUZJIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZp''@;'; put 'put ''YXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiRyIsdHJpbGxpb246IlQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3ki''@;'; put 'put ''LG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMjc6W2Z1bmN0aW9u''@;'; put 'put ''KEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1''@;'; put 'put ''cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYm''@;'; put 'put ''dm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmZpbFBIPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxS''@;'; put 'put ''KXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93''@;'; put 'put ''IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZmlsLVBIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRp''@;'; put 'put ''b25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PX5+KFIlMTAwLzEwKT8idGgiOjE9PT16PyJzdCI6Mj09PXo/Im5kIjozPT09ej8icmQiOiJ0aCJ9LGN1cnJlbmN5Ontz''@;'; put 'put ''eW1ib2w6Ilx1MjBiMSIsY29kZToiUEhQIn19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDI4OltmdW5jdGlvbihJZSxGLGFlKXsoZnVu''@;'; put 'put ''Y3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5l''@;'; put 'put ''eHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5mckNBPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGss''@;'; put 'put ''RSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxF''@;'; put 'put ''X05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZnItQ0EiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJr''@;'; put 'put ''IixtaWxsaW9uOiJNIixiaWxsaW9uOiJHIix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7cmV0dXJuIDE9PT1SPyJlciI6Ilx4ZThtZSJ9LHNwYWNlU2VwYXJhdGVkOiEwLGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVU0QifSxjdXJyZW5j''@;'; put 'put ''eUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19''@;'; put 'put ''LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMjk6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rp''@;'; put 'put ''b24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1''@;'; put 'put ''Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRv''@;'; put 'put ''dzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmZyQ0g9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBq''@;'; put 'put ''PSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4''@;'; put 'put ''cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0kr''@;'; put 'put ''Kyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJmci1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRy''@;'; put 'put ''aWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihSKXtyZXR1cm4gMT09PVI/ImVyIjoiXHhlOG1lIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRo''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50''@;'; put 'put ''aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDMwOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm''@;'; put 'put ''Jk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5''@;'; put 'put ''cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5mckZSPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFN''@;'; put 'put ''W2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIg''@;'; put 'put ''Qj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxS''@;'; put 'put ''Lmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZnItRlIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxs''@;'; put 'put ''aW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7cmV0dXJuIDE9PT1SPyJlciI6Ilx4ZThtZSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0''@;'; put 'put ''b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzMTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9u''@;'; put 'put ''KHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0''@;'; put 'put ''cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuaGVJTD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lm''@;'; put 'put ''KCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1Rf''@;'; put 'put ''Rk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJ''@;'; put 'put ''ZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImhlLUlMIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNWQw''@;'; put 'put ''XHUwNWRjXHUwNWUzIixtaWxsaW9uOiJcdTA1ZGVcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZGYiLGJpbGxpb246Ilx1MDVkMVx1MDVkY1x1MDVkOVx1MDVkNVx1MDVkZiIsdHJpbGxpb246Ilx1MDVkOFx1MDVlOFx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkNVx1MDVkZiJ9LGN1cnJlbmN5OntzeW1i''@;'; put 'put ''b2w6Ilx1MjBhYSIscG9zaXRpb246InByZWZpeCIsY29kZToiSUxTIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3Vy''@;'; put 'put ''RGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1''@;'; put 'put ''cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5''@;'; put 'put ''cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMzI6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5''@;'; put 'put ''cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Yg''@;'; put 'put ''c2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmh1SFU9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUm''@;'; put 'put ''JmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMs''@;'; put 'put ''ZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24o''@;'; put 'put ''bGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJodS1IVSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6IkUiLG1pbGxpb246Ik0iLGJpbGxpb246Ik1yZCIsdHJpbGxpb246IlQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJGdCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkhVRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6''@;'; put 'put ''e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6''@;'; put 'put ''e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGds''@;'; put 'put ''b2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzMzpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3lt''@;'; put 'put ''Ym9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3lt''@;'; put 'put ''Ym9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1''@;'; put 'put ''Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuaWQ9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJu''@;'; put 'put ''IGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24o''@;'; put 'put ''WSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtN''@;'; put 'put ''LmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJpZCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InIiLG1pbGxpb246ImoiLGJpbGxpb246Im0iLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3Vy''@;'; put 'put ''cmVuY3k6e3N5bWJvbDoiUnAiLGNvZGU6IklEUiJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzNDpbZnVuY3Rpb24oSWUsRixhZSl7''@;'; put 'put ''KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1G''@;'; put 'put ''P0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuaXRDSD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24g''@;'; put 'put ''eihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1P''@;'; put 'put ''RFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6Iml0LUNIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiciLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2Fu''@;'; put 'put ''ZDoibWlsYSIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiMCJ9LGN1cnJlbmN5OntzeW1ib2w6IkNIRiIsY29kZToiQ0hGIn19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1''@;'; put 'put ''Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDM1OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJz''@;'; put 'put ''eW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5''@;'; put 'put ''cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6''@;'; put 'put ''dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5pdElUPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGss''@;'; put 'put ''ITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3Jl''@;'; put 'put ''dHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBv''@;'; put 'put ''cnRzPXtsYW5ndWFnZVRhZzoiaXQtSVQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWxhIixtaWxsaW9uOiJtaWwiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGJh''@;'; put 'put ''In0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90''@;'; put 'put ''YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFu''@;'; put 'put ''dGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFs''@;'; put 'put ''PCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDM2OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm''@;'; put 'put ''JiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wi''@;'; put 'put ''OnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3Nl''@;'; put 'put ''bGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5qYUpQPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBq''@;'; put 'put ''KGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkp''@;'; put 'put ''e3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5l''@;'; put 'put ''eHBvcnRzPXtsYW5ndWFnZVRhZzoiamEtSlAiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU1MTA0Iix0cmlsbGlvbjoiXHU1MTQ2In0s''@;'; put 'put ''b3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhNSIscG9zaXRpb246InByZWZpeCIsY29kZToiSlBZIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0s''@;'; put 'put ''Zm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3Nl''@;'; put 'put ''bGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDM3OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJh''@;'; put 'put ''dG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7''@;'; put 'put ''dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30p''@;'; put 'put ''KS5rb0tSPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFy''@;'; put 'put ''IFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIu''@;'; put 'put ''ZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoia28tS1IiLGRl''@;'; put 'put ''bGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdWNjOWMiLG1pbGxpb246Ilx1YmMzMVx1YjljYyIsYmlsbGlvbjoiXHVjMmVkXHVjNWI1Iix0cmlsbGlvbjoiXHVjNzdjXHVjODcwIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGE5Iixjb2RlOiJLUFcifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMzg6W2Z1bmN0''@;'; put 'put ''aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXty''@;'; put 'put ''ZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUp''@;'; put 'put ''KSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmx2TFY9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxP''@;'; put 'put ''LFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhy''@;'; put 'put ''b3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIg''@;'; put 'put ''Sz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJsdi1MViIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0''@;'; put 'put ''aW9uczp7dGhvdXNhbmQ6InRcdTAxNmJrc3QuIixtaWxsaW9uOiJtaWxqLiIsYmlsbGlvbjoibWxqcmQuIix0cmlsbGlvbjoidHJpbGouIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVS''@;'; put 'put ''In0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2lt''@;'; put 'put ''YWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6''@;'; put 'put ''ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93''@;'; put 'put ''Ont9KX0se31dLDM5OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBl''@;'; put 'put ''b2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1h''@;'; put 'put ''ZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5uYk5PPWxlKCl9KGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBt''@;'; put 'put ''b2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9b''@;'; put 'put ''a10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoibmItTk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVj''@;'; put 'put ''aW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJNIixiaWxsaW9uOiJtZCIsdHJpbGxpb246ImIifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiTk9LIn0sY3VycmVu''@;'; put 'put ''Y3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRw''@;'; put 'put ''dXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5''@;'; put 'put ''IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31d''@;'; put 'put ''LDQwOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVu''@;'; put 'put ''Y3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZp''@;'; put 'put ''bmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5uYj1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlv''@;'; put 'put ''biBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2sr''@;'; put 'put ''IiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9''@;'; put 'put ''Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6Im5iIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJy''@;'; put 'put ''ZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLGNvZGU6Ik5PSyJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlw''@;'; put 'put ''ZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw0MTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlw''@;'; put 'put ''ZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBz''@;'; put 'put ''ZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkubmxCRT1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYm''@;'; put 'put ''ailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxm''@;'; put 'put ''dW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihs''@;'; put 'put ''ZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6Im5sLUJFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOmZ1bmN0aW9u''@;'; put 'put ''KFIpe3ZhciB6PVIlMTAwO3JldHVybiAwIT09UiYmejw9MXx8OD09PXp8fDIwPD16PyJzdGUiOiJkZSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0''@;'; put 'put ''aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDoh''@;'; put 'put ''MCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''bWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw0MjpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3lt''@;'; put 'put ''Ym9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigo''@;'; put 'put ''TT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkubmxOTD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtp''@;'; put 'put ''ZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9''@;'; put 'put ''dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0w''@;'; put 'put ''O0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6Im5sLU5MIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibWxu''@;'; put 'put ''IixiaWxsaW9uOiJtcmQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTAwO3JldHVybiAwIT09UiYmejw9MXx8OD09PXp8fDIwPD16PyJzdGUiOiJkZSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InByZWZpeCIsY29kZToiRVVSIn0s''@;'; put 'put ''Y3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1''@;'; put 'put ''cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9''@;'; put 'put ''KX0se31dLDQzOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2Yg''@;'; put 'put ''TX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8i''@;'; put 'put ''dW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5ubj1sZSgpfShmdW5jdGlvbigpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxl''@;'; put 'put ''ICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4''@;'; put 'put ''cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6Im5uIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6Iiwi''@;'; put 'put ''fSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLGNvZGU6Ik5PSyJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRo''@;'; put 'put ''aXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw0NDpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnBy''@;'; put 'put ''b3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5''@;'; put 'put ''cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkucGxQTD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtp''@;'; put 'put ''ZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhw''@;'; put 'put ''b3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5j''@;'; put 'put ''dGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6InBsLVBMIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidHlzLiIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiIgelx1MDE0MiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlBMTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZv''@;'; put 'put ''cm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29E''@;'; put 'put ''ZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5j''@;'; put 'put ''YWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw0NTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3lt''@;'; put 'put ''Ym9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09''@;'; put 'put ''eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkucHRCUj1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEll''@;'; put 'put ''JiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxs''@;'; put 'put ''KEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsx''@;'; put 'put ''OltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6InB0LUJSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlsIixtaWxsaW9uOiJtaWxoXHhmNWVzIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9''@;'; put 'put ''LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6IlIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJCUkwifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEw''@;'; put 'put ''fSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRo''@;'; put 'put ''VHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0p''@;'; put 'put ''fSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDY6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9''@;'; put 'put ''PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQg''@;'; put 'put ''MCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnB0UFQ9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0u''@;'; put 'put ''Y2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6''@;'; put 'put ''fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJwdC1QVCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5h''@;'; put 'put ''bDpmdW5jdGlvbigpe3JldHVybiJceGJhIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0s''@;'; put 'put ''Zm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0p''@;'; put 'put ''LmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDQ3OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1T''@;'; put 'put ''eW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAh''@;'; put 'put ''PT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5yb1JPPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''SWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNh''@;'; put 'put ''bGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0o''@;'; put 'put ''ezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoicm8tUk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWkiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0s''@;'; put 'put ''b3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiIGxlaSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlJPTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9''@;'; put 'put ''LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9''@;'; put 'put ''KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw0ODpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09''@;'; put 'put ''U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAw''@;'; put 'put ''IT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkucm89bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJ''@;'; put 'put ''ZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2Fs''@;'; put 'put ''bChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7''@;'; put 'put ''MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJyby1STyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1paSIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4ifSxv''@;'; put 'put ''cmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiIgbGVpIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUk9OIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0s''@;'; put 'put ''Zm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV0sMjpbZnVuY3Rpb24obGUs''@;'; put 'put ''TSxPKXtNLmV4cG9ydHM9bGUoIi4vcm8tUk8iKX0seyIuL3JvLVJPIjoxfV19LHt9LFsyXSkoMil9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDQ5OltmdW5jdGlvbihJ''@;'; put 'put ''ZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJu''@;'; put 'put ''IE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZv''@;'; put 'put ''aWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5ydVJVPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtm''@;'; put 'put ''dW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYu''@;'; put 'put ''Y29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoicnUtUlUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6''@;'; put 'put ''e3Rob3VzYW5kOiJcdTA0NDJcdTA0NGJcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUwNDQwXHUwNDQzXHUwNDMxLiIscG9zaXRpb246''@;'; put 'put ''InBvc3RmaXgiLGNvZGU6IlJVQiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZToh''@;'; put 'put ''MH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRo''@;'; put 'put ''Tm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVv''@;'; put 'put ''ZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw1MDpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5j''@;'; put 'put ''dGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJv''@;'; put 'put ''YmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkucnVVQT1s''@;'; put 'put ''ZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBF''@;'; put 'put ''cnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMs''@;'; put 'put ''bGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6InJ1LVVBIixkZWxpbWl0ZXJz''@;'; put 'put ''Ont0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJl''@;'; put 'put ''bmN5OntzeW1ib2w6Ilx1MjBiNCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlVBSCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3Ro''@;'; put 'put ''OjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIs''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xv''@;'; put 'put ''YmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw1MTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Yg''@;'; put 'put ''TX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMp''@;'; put 'put ''Lm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuc2tTSz1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtp''@;'; put 'put ''ZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4g''@;'; put 'put ''eihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17''@;'; put 'put ''bGFuZ3VhZ2VUYWc6InNrLVNLIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''Ii4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3Jt''@;'; put 'put ''YXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVj''@;'; put 'put ''aW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2Fs''@;'; put 'put ''bCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTI6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJv''@;'; put 'put ''bC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/''@;'; put 'put ''eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnNsPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkll''@;'; put 'put ''O2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5l''@;'; put 'put ''eHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1''@;'; put 'put ''bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoic2wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0aXMuIixtaWxsaW9uOiJtaWwuIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0s''@;'; put 'put ''e31dLDUzOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06''@;'; put 'put ''ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5k''@;'; put 'put ''ZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5zckN5cmxSUz1sZSgpfShmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9k''@;'; put 'put ''dWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2td''@;'; put 'put ''LmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6InNyLUN5cmwtUlMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIs''@;'; put 'put ''ZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0NDJcdTA0NGJcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiUlNE''@;'; put 'put ''Iixjb2RlOiJSU0QifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTQ6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNl''@;'; put 'put ''IHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5''@;'; put 'put ''bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKToo''@;'; put 'put ''KE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnN2U0U9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7''@;'; put 'put ''aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixW''@;'; put 'put ''fXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9''@;'; put 'put ''MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJzdi1TRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Ik0i''@;'; put 'put ''LGJpbGxpb246Im1kIix0cmlsbGlvbjoidG1kIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIifSxjdXJyZW5jeTp7c3ltYm9sOiJrciIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlNFSyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlz''@;'; put 'put ''c2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw1NTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZN''@;'; put 'put ''LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBl''@;'; put 'put ''b2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkudGhUSD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtr''@;'; put 'put ''XSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9''@;'; put 'put ''T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5s''@;'; put 'put ''ZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6InRoLVRIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwZTFlXHUwZTMxXHUwZTE5Iixt''@;'; put 'put ''aWxsaW9uOiJcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkiLGJpbGxpb246Ilx1MGUxZVx1MGUzMVx1MGUxOVx1MGUyNVx1MGU0OVx1MGUzMlx1MGUxOSIsdHJpbGxpb246Ilx1MGUyNVx1MGU0OVx1MGUzMlx1MGUxOVx1MGUyNVx1MGU0OVx1MGUzMlx1MGUxOSJ9LG9yZGluYWw6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MGUzZiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlRIQiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJE''@;'; put 'put ''aWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3Vy''@;'; put 'put ''cmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlw''@;'; put 'put ''ZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw1NjpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlw''@;'; put 'put ''ZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBz''@;'; put 'put ''ZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkudHJUUj1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYm''@;'; put 'put ''ailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxm''@;'; put 'put ''dW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihs''@;'; put 'put ''ZSxNLE8pe3ZhciBSPXsxOiInaW5jaSIsNToiJ2luY2kiLDg6IidpbmNpIiw3MDoiJ2luY2kiLDgwOiInaW5jaSIsMjoiJ25jaSIsNzoiJ25jaSIsMjA6IiduY2kiLDUwOiInbmNpIiwzOiInXHhmY25jXHhmYyIsNDoiJ1x4ZmNuY1x4ZmMiLDEwMDoiJ1x4ZmNuY1x4ZmMiLDY6IiduY1x1MDEz''@;'; put 'put ''MSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw2MDoiJ1x1MDEzMW5jXHUwMTMxIiw5MDoiJ1x1MDEzMW5jXHUwMTMxIn07TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoidHItVFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Ro''@;'; put 'put ''b3VzYW5kOiJiaW4iLG1pbGxpb246Im1pbHlvbiIsYmlsbGlvbjoibWlseWFyIix0cmlsbGlvbjoidHJpbHlvbiJ9LG9yZGluYWw6ZnVuY3Rpb24oeil7aWYoMD09PXopcmV0dXJuIidcdTAxMzFuY1x1MDEzMSI7dmFyIEs9eiUxMDtyZXR1cm4gUltLXXx8Ult6JTEwMC1LXXx8UlsxMDA8PXo/''@;'; put 'put ''MTAwOm51bGxdfSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYmEiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUUlkifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGln''@;'; put 'put ''aXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJl''@;'; put 'put ''bmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVv''@;'; put 'put ''ZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTc6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/''@;'; put 'put ''InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2Vs''@;'; put 'put ''ZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnVrVUE9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmop''@;'; put 'put ''cmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVu''@;'; put 'put ''Y3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUs''@;'; put 'put ''TSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJ1ay1VQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQzOFx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiXHUwNDNj''@;'; put 'put ''XHUwNDNiXHUwNDQwXHUwNDM0Iix0cmlsbGlvbjoiXHUwNDMxXHUwNDNiXHUwNDNkIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYjQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVQUgifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3Nh''@;'; put 'put ''OjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRo''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTg6W2Z1bmN0aW9uKEllLEYsYWUp''@;'; put 'put ''eyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09''@;'; put 'put ''Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnpoQ049bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9u''@;'; put 'put ''IHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJN''@;'; put 'put ''T0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJ6aC1DTiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNh''@;'; put 'put ''bmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU0ZTA3IixiaWxsaW9uOiJcdTUzNDFcdTRlYmYiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJceGE1Iixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJDTlkifSxjdXJy''@;'; put 'put ''ZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Ro''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9''@;'; put 'put ''fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTk6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVu''@;'; put 'put ''Y3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25z''@;'; put 'put ''dHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdp''@;'; put 'put ''bmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnpoTU89bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3Zh''@;'; put 'put ''ciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109''@;'; put 'put ''e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3Ro''@;'; put 'put ''O0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJ6aC1NTyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4''@;'; put 'put ''NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJNT1AiLGNvZGU6Ik1PUCJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xv''@;'; put 'put ''YmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw2MDpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Yg''@;'; put 'put ''TX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMp''@;'; put 'put ''Lm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuemhTRz1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtp''@;'; put 'put ''ZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4g''@;'; put 'put ''eihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17''@;'; put 'put ''bGFuZ3VhZ2VUYWc6InpoLVNHIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1NTM0MVx1NGViZiIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLGNvZGU6IlNHRCJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9''@;'; put 'put ''XSw2MTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1''@;'; put 'put ''bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVm''@;'; put 'put ''aW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuemhUVz1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICci''@;'; put 'put ''K2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9y''@;'; put 'put ''dHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6InpoLVRXIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4i''@;'; put 'put ''fSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTg0MmMiLGJpbGxpb246Ilx1NTM0MVx1NTEwNCIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHU3YjJjIn0sY3VycmVuY3k6e3N5bWJvbDoiTlQkIixjb2RlOiJU''@;'; put 'put ''V0QifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNjI6W2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjthZS5iZz1JZSgiLi9k''@;'; put 'put ''aXN0L2xhbmd1YWdlcy9iZy5taW4uanMiKSxhZVsiY3MtQ1oiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9jcy1DWi5taW4uanMiKSxhZVsiZGEtREsiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9kYS1ESy5taW4uanMiKSxhZVsiZGUtQVQiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9kZS1BVC5taW4u''@;'; put 'put ''anMiKSxhZVsiZGUtQ0giXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9kZS1DSC5taW4uanMiKSxhZVsiZGUtREUiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9kZS1ERS5taW4uanMiKSxhZVsiZGUtTEkiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9kZS1MSS5taW4uanMiKSxhZS5lbD1JZSgiLi9kaXN0''@;'; put 'put ''L2xhbmd1YWdlcy9lbC5taW4uanMiKSxhZVsiZW4tQVUiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lbi1BVS5taW4uanMiKSxhZVsiZW4tR0IiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lbi1HQi5taW4uanMiKSxhZVsiZW4tSUUiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lbi1JRS5taW4uanMi''@;'; put 'put ''KSxhZVsiZW4tTloiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lbi1OWi5taW4uanMiKSxhZVsiZW4tWkEiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lbi1aQS5taW4uanMiKSxhZVsiZXMtQVIiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lcy1BUi5taW4uanMiKSxhZVsiZXMtQ0wiXT1JZSgiLi9k''@;'; put 'put ''aXN0L2xhbmd1YWdlcy9lcy1DTC5taW4uanMiKSxhZVsiZXMtQ08iXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lcy1DTy5taW4uanMiKSxhZVsiZXMtQ1IiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lcy1DUi5taW4uanMiKSxhZVsiZXMtRVMiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lcy1FUy5t''@;'; put 'put ''aW4uanMiKSxhZVsiZXMtTVgiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lcy1NWC5taW4uanMiKSxhZVsiZXMtTkkiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lcy1OSS5taW4uanMiKSxhZVsiZXMtUEUiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lcy1QRS5taW4uanMiKSxhZVsiZXMtUFIiXT1J''@;'; put 'put ''ZSgiLi9kaXN0L2xhbmd1YWdlcy9lcy1QUi5taW4uanMiKSxhZVsiZXMtU1YiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9lcy1TVi5taW4uanMiKSxhZVsiZXQtRUUiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9ldC1FRS5taW4uanMiKSxhZVsiZmEtSVIiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9m''@;'; put 'put ''YS1JUi5taW4uanMiKSxhZVsiZmktRkkiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9maS1GSS5taW4uanMiKSxhZVsiZmlsLVBIIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZmlsLVBILm1pbi5qcyIpLGFlWyJmci1DQSJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2ZyLUNBLm1pbi5qcyIpLGFlWyJm''@;'; put 'put ''ci1DSCJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2ZyLUNILm1pbi5qcyIpLGFlWyJmci1GUiJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2ZyLUZSLm1pbi5qcyIpLGFlWyJoZS1JTCJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2hlLUlMLm1pbi5qcyIpLGFlWyJodS1IVSJdPUllKCIuL2Rpc3QvbGFu''@;'; put 'put ''Z3VhZ2VzL2h1LUhVLm1pbi5qcyIpLGFlLmlkPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2lkLm1pbi5qcyIpLGFlWyJpdC1DSCJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2l0LUNILm1pbi5qcyIpLGFlWyJpdC1JVCJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2l0LUlULm1pbi5qcyIpLGFlWyJqYS1K''@;'; put 'put ''UCJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2phLUpQLm1pbi5qcyIpLGFlWyJrby1LUiJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2tvLUtSLm1pbi5qcyIpLGFlWyJsdi1MViJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2x2LUxWLm1pbi5qcyIpLGFlWyJuYi1OTyJdPUllKCIuL2Rpc3QvbGFuZ3Vh''@;'; put 'put ''Z2VzL25iLU5PLm1pbi5qcyIpLGFlLm5iPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL25iLm1pbi5qcyIpLGFlWyJubC1CRSJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL25sLUJFLm1pbi5qcyIpLGFlWyJubC1OTCJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL25sLU5MLm1pbi5qcyIpLGFlLm5uPUllKCIu''@;'; put 'put ''L2Rpc3QvbGFuZ3VhZ2VzL25uLm1pbi5qcyIpLGFlWyJwbC1QTCJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL3BsLVBMLm1pbi5qcyIpLGFlWyJwdC1CUiJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL3B0LUJSLm1pbi5qcyIpLGFlWyJwdC1QVCJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL3B0LVBULm1p''@;'; put 'put ''bi5qcyIpLGFlWyJyby1STyJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL3JvLVJPLm1pbi5qcyIpLGFlLnJvPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL3JvLm1pbi5qcyIpLGFlWyJydS1SVSJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL3J1LVJVLm1pbi5qcyIpLGFlWyJydS1VQSJdPUllKCIuL2Rpc3Qv''@;'; put 'put ''bGFuZ3VhZ2VzL3J1LVVBLm1pbi5qcyIpLGFlWyJzay1TSyJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL3NrLVNLLm1pbi5qcyIpLGFlLnNsPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL3NsLm1pbi5qcyIpLGFlWyJzci1DeXJsLVJTIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvc3ItQ3lybC1SUy5taW4u''@;'; put 'put ''anMiKSxhZVsic3YtU0UiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9zdi1TRS5taW4uanMiKSxhZVsidGgtVEgiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy90aC1USC5taW4uanMiKSxhZVsidHItVFIiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy90ci1UUi5taW4uanMiKSxhZVsidWstVUEiXT1JZSgi''@;'; put 'put ''Li9kaXN0L2xhbmd1YWdlcy91ay1VQS5taW4uanMiKSxhZVsiemgtQ04iXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy96aC1DTi5taW4uanMiKSxhZVsiemgtTU8iXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy96aC1NTy5taW4uanMiKSxhZVsiemgtU0ciXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy96aC1T''@;'; put 'put ''Ry5taW4uanMiKSxhZVsiemgtVFciXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy96aC1UVy5taW4uanMiKX0seyIuL2Rpc3QvbGFuZ3VhZ2VzL2JnLm1pbi5qcyI6MSwiLi9kaXN0L2xhbmd1YWdlcy9jcy1DWi5taW4uanMiOjIsIi4vZGlzdC9sYW5ndWFnZXMvZGEtREsubWluLmpzIjozLCIuL2Rp''@;'; put 'put ''c3QvbGFuZ3VhZ2VzL2RlLUFULm1pbi5qcyI6NCwiLi9kaXN0L2xhbmd1YWdlcy9kZS1DSC5taW4uanMiOjUsIi4vZGlzdC9sYW5ndWFnZXMvZGUtREUubWluLmpzIjo2LCIuL2Rpc3QvbGFuZ3VhZ2VzL2RlLUxJLm1pbi5qcyI6NywiLi9kaXN0L2xhbmd1YWdlcy9lbC5taW4uanMiOjgsIi4v''@;'; put 'put ''ZGlzdC9sYW5ndWFnZXMvZW4tQVUubWluLmpzIjo5LCIuL2Rpc3QvbGFuZ3VhZ2VzL2VuLUdCLm1pbi5qcyI6MTAsIi4vZGlzdC9sYW5ndWFnZXMvZW4tSUUubWluLmpzIjoxMSwiLi9kaXN0L2xhbmd1YWdlcy9lbi1OWi5taW4uanMiOjEyLCIuL2Rpc3QvbGFuZ3VhZ2VzL2VuLVpBLm1pbi5q''@;'; put 'put ''cyI6MTMsIi4vZGlzdC9sYW5ndWFnZXMvZXMtQVIubWluLmpzIjoxNCwiLi9kaXN0L2xhbmd1YWdlcy9lcy1DTC5taW4uanMiOjE1LCIuL2Rpc3QvbGFuZ3VhZ2VzL2VzLUNPLm1pbi5qcyI6MTYsIi4vZGlzdC9sYW5ndWFnZXMvZXMtQ1IubWluLmpzIjoxNywiLi9kaXN0L2xhbmd1YWdlcy9l''@;'; put 'put ''cy1FUy5taW4uanMiOjE4LCIuL2Rpc3QvbGFuZ3VhZ2VzL2VzLU1YLm1pbi5qcyI6MTksIi4vZGlzdC9sYW5ndWFnZXMvZXMtTkkubWluLmpzIjoyMCwiLi9kaXN0L2xhbmd1YWdlcy9lcy1QRS5taW4uanMiOjIxLCIuL2Rpc3QvbGFuZ3VhZ2VzL2VzLVBSLm1pbi5qcyI6MjIsIi4vZGlzdC9s''@;'; put 'put ''YW5ndWFnZXMvZXMtU1YubWluLmpzIjoyMywiLi9kaXN0L2xhbmd1YWdlcy9ldC1FRS5taW4uanMiOjI0LCIuL2Rpc3QvbGFuZ3VhZ2VzL2ZhLUlSLm1pbi5qcyI6MjUsIi4vZGlzdC9sYW5ndWFnZXMvZmktRkkubWluLmpzIjoyNiwiLi9kaXN0L2xhbmd1YWdlcy9maWwtUEgubWluLmpzIjoy''@;'; put 'put ''NywiLi9kaXN0L2xhbmd1YWdlcy9mci1DQS5taW4uanMiOjI4LCIuL2Rpc3QvbGFuZ3VhZ2VzL2ZyLUNILm1pbi5qcyI6MjksIi4vZGlzdC9sYW5ndWFnZXMvZnItRlIubWluLmpzIjozMCwiLi9kaXN0L2xhbmd1YWdlcy9oZS1JTC5taW4uanMiOjMxLCIuL2Rpc3QvbGFuZ3VhZ2VzL2h1LUhV''@;'; put 'put ''Lm1pbi5qcyI6MzIsIi4vZGlzdC9sYW5ndWFnZXMvaWQubWluLmpzIjozMywiLi9kaXN0L2xhbmd1YWdlcy9pdC1DSC5taW4uanMiOjM0LCIuL2Rpc3QvbGFuZ3VhZ2VzL2l0LUlULm1pbi5qcyI6MzUsIi4vZGlzdC9sYW5ndWFnZXMvamEtSlAubWluLmpzIjozNiwiLi9kaXN0L2xhbmd1YWdl''@;'; put 'put ''cy9rby1LUi5taW4uanMiOjM3LCIuL2Rpc3QvbGFuZ3VhZ2VzL2x2LUxWLm1pbi5qcyI6MzgsIi4vZGlzdC9sYW5ndWFnZXMvbmItTk8ubWluLmpzIjozOSwiLi9kaXN0L2xhbmd1YWdlcy9uYi5taW4uanMiOjQwLCIuL2Rpc3QvbGFuZ3VhZ2VzL25sLUJFLm1pbi5qcyI6NDEsIi4vZGlzdC9s''@;'; put 'put ''YW5ndWFnZXMvbmwtTkwubWluLmpzIjo0MiwiLi9kaXN0L2xhbmd1YWdlcy9ubi5taW4uanMiOjQzLCIuL2Rpc3QvbGFuZ3VhZ2VzL3BsLVBMLm1pbi5qcyI6NDQsIi4vZGlzdC9sYW5ndWFnZXMvcHQtQlIubWluLmpzIjo0NSwiLi9kaXN0L2xhbmd1YWdlcy9wdC1QVC5taW4uanMiOjQ2LCIu''@;'; put 'put ''L2Rpc3QvbGFuZ3VhZ2VzL3JvLVJPLm1pbi5qcyI6NDcsIi4vZGlzdC9sYW5ndWFnZXMvcm8ubWluLmpzIjo0OCwiLi9kaXN0L2xhbmd1YWdlcy9ydS1SVS5taW4uanMiOjQ5LCIuL2Rpc3QvbGFuZ3VhZ2VzL3J1LVVBLm1pbi5qcyI6NTAsIi4vZGlzdC9sYW5ndWFnZXMvc2stU0subWluLmpz''@;'; put 'put ''Ijo1MSwiLi9kaXN0L2xhbmd1YWdlcy9zbC5taW4uanMiOjUyLCIuL2Rpc3QvbGFuZ3VhZ2VzL3NyLUN5cmwtUlMubWluLmpzIjo1MywiLi9kaXN0L2xhbmd1YWdlcy9zdi1TRS5taW4uanMiOjU0LCIuL2Rpc3QvbGFuZ3VhZ2VzL3RoLVRILm1pbi5qcyI6NTUsIi4vZGlzdC9sYW5ndWFnZXMv''@;'; put 'put ''dHItVFIubWluLmpzIjo1NiwiLi9kaXN0L2xhbmd1YWdlcy91ay1VQS5taW4uanMiOjU3LCIuL2Rpc3QvbGFuZ3VhZ2VzL3poLUNOLm1pbi5qcyI6NTgsIi4vZGlzdC9sYW5ndWFnZXMvemgtTU8ubWluLmpzIjo1OSwiLi9kaXN0L2xhbmd1YWdlcy96aC1TRy5taW4uanMiOjYwLCIuL2Rpc3Qv''@;'; put 'put ''bGFuZ3VhZ2VzL3poLVRXLm1pbi5qcyI6NjF9XX0se30sWzYyXSkoNjIpfSwxMTE3MDphdD0+e2F0LmV4cG9ydHM9ZnVuY3Rpb24gSWUoRixhZSx4KXtmdW5jdGlvbiBtKE8sUil7aWYoIWFlW09dKXtpZighRltPXSl7aWYobGUpcmV0dXJuIGxlKE8sITApO3ZhciBLPW5ldyBFcnJvcigiQ2Fu''@;'; put 'put ''bm90IGZpbmQgbW9kdWxlICciK08rIiciKTt0aHJvdyBLLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLEt9dmFyIEk9YWVbT109e2V4cG9ydHM6e319O0ZbT11bMF0uY2FsbChJLmV4cG9ydHMsZnVuY3Rpb24oayl7cmV0dXJuIG0oRltPXVsxXVtrXXx8ayl9LEksSS5leHBvcnRzLEllLEYsYWUs''@;'; put 'put ''eCl9cmV0dXJuIGFlW09dLmV4cG9ydHN9Zm9yKHZhciBsZT12b2lkIDAsTT0wO008eC5sZW5ndGg7TSsrKW0oeFtNXSk7cmV0dXJuIG19KHsxOltmdW5jdGlvbihJZSxGLGFlKXshZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO3ZhciBtLGxlPS9eLT8oPzpcZCsoPzpcLlxkKik/fFwuXGQrKSg/''@;'; put 'put ''OmVbKy1dP1xkKyk/JC9pLE09TWF0aC5jZWlsLE89TWF0aC5mbG9vcixSPSJbQmlnTnVtYmVyIEVycm9yXSAiLHo9UisiTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czogIixLPTFlMTQsST0xNCxrPTkwMDcxOTkyNTQ3NDA5OTEsRT1bMSwxMCwx''@;'; put 'put ''MDAsMWUzLDFlNCwxZTUsMWU2LDFlNywxZTgsMWU5LDFlMTAsMWUxMSwxZTEyLDFlMTNdLGo9MWU3LFY9MWU5O2Z1bmN0aW9uIEIob2Upe3ZhciBzZT0wfG9lO3JldHVybiAwPG9lfHxvZT09PXNlP3NlOnNlLTF9ZnVuY3Rpb24gWShvZSl7Zm9yKHZhciBzZSxoZSx1ZT0xLGNlPW9lLmxlbmd0''@;'; put 'put ''aCxHPW9lWzBdKyIiO3VlPGNlOyl7Zm9yKHNlPW9lW3VlKytdKyIiLGhlPUktc2UubGVuZ3RoO2hlLS07c2U9IjAiK3NlKTtHKz1zZX1mb3IoY2U9Ry5sZW5ndGg7NDg9PT1HLmNoYXJDb2RlQXQoLS1jZSk7KTtyZXR1cm4gRy5zbGljZSgwLGNlKzF8fDEpfWZ1bmN0aW9uIFgob2Usc2Upe3Zh''@;'; put 'put ''ciBoZSx1ZSxjZT1vZS5jLEc9c2UuYyxiPW9lLnMsRD1zZS5zLEg9b2UuZSxOPXNlLmU7aWYoIWJ8fCFEKXJldHVybiBudWxsO2lmKHVlPUcmJiFHWzBdLChoZT1jZSYmIWNlWzBdKXx8dWUpcmV0dXJuIGhlP3VlPzA6LUQ6YjtpZihiIT1EKXJldHVybiBiO2lmKGhlPWI8MCx1ZT1IPT1OLCFj''@;'; put 'put ''ZXx8IUcpcmV0dXJuIHVlPzA6IWNlXmhlPzE6LTE7aWYoIXVlKXJldHVybiBOPEheaGU/MTotMTtmb3IoRD0oSD1jZS5sZW5ndGgpPChOPUcubGVuZ3RoKT9IOk4sYj0wO2I8RDtiKyspaWYoY2VbYl0hPUdbYl0pcmV0dXJuIGNlW2JdPkdbYl1eaGU/MTotMTtyZXR1cm4gSD09Tj8wOk48SF5o''@;'; put 'put ''ZT8xOi0xfWZ1bmN0aW9uIFUob2Usc2UsaGUsdWUpe2lmKG9lPHNlfHxoZTxvZXx8b2UhPT0ob2U8MD9NKG9lKTpPKG9lKSkpdGhyb3cgRXJyb3IoUisodWV8fCJBcmd1bWVudCIpKygibnVtYmVyIj09dHlwZW9mIG9lP29lPHNlfHxoZTxvZT8iIG91dCBvZiByYW5nZTogIjoiIG5vdCBhbiBp''@;'; put 'put ''bnRlZ2VyOiAiOiIgbm90IGEgcHJpbWl0aXZlIG51bWJlcjogIikrU3RyaW5nKG9lKSl9ZnVuY3Rpb24gcShvZSl7dmFyIHNlPW9lLmMubGVuZ3RoLTE7cmV0dXJuIEIob2UuZS9JKT09c2UmJm9lLmNbc2VdJTIhPTB9ZnVuY3Rpb24gZWUob2Usc2Upe3JldHVybigxPG9lLmxlbmd0aD9vZS5j''@;'; put 'put ''aGFyQXQoMCkrIi4iK29lLnNsaWNlKDEpOm9lKSsoc2U8MD8iZSI6ImUrIikrc2V9ZnVuY3Rpb24gdGUob2Usc2UsaGUpe3ZhciB1ZSxjZTtpZihzZTwwKXtmb3IoY2U9aGUrIi4iOysrc2U7Y2UrPWhlKTtvZT1jZStvZX1lbHNlIGlmKCsrc2U+KHVlPW9lLmxlbmd0aCkpe2ZvcihjZT1oZSxz''@;'; put 'put ''ZS09dWU7LS1zZTtjZSs9aGUpO29lKz1jZX1lbHNlIHNlPHVlJiYob2U9b2Uuc2xpY2UoMCxzZSkrIi4iK29lLnNsaWNlKHNlKSk7cmV0dXJuIG9lfShtPWZ1bmN0aW9uIG9lKHNlKXt2YXIgaGUsdWUsY2UsRyxiLEQsSCxOLGcsQyxTPVdlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6V2UsdG9T''@;'; put 'put ''dHJpbmc6bnVsbCx2YWx1ZU9mOm51bGx9LHY9bmV3IFdlKDEpLHA9MjAsdz00LEo9LTcsbmU9MjEsZGU9LTFlNyxmZT0xZTcseGU9ITEsTGU9MSxGZT0wLE9lPXtwcmVmaXg6IiIsZ3JvdXBTaXplOjMsc2Vjb25kYXJ5R3JvdXBTaXplOjAsZ3JvdXBTZXBhcmF0b3I6IiwiLGRlY2ltYWxTZXBh''@;'; put 'put ''cmF0b3I6Ii4iLGZyYWN0aW9uR3JvdXBTaXplOjAsZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjoiXHhhMCIsc3VmZml4OiIifSxCZT0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtmdW5jdGlvbiBXZShiZSxBZSl7dmFyIFRlLHFlLFhlLFVlLGh0LE1lLERlLHplLGl0PXRo''@;'; put 'put ''aXM7aWYoIShpdCBpbnN0YW5jZW9mIFdlKSlyZXR1cm4gbmV3IFdlKGJlLEFlKTtpZihudWxsPT1BZSl7aWYoYmUgaW5zdGFuY2VvZiBXZSlyZXR1cm4gaXQucz1iZS5zLGl0LmU9YmUuZSx2b2lkKGl0LmM9KGJlPWJlLmMpP2JlLnNsaWNlKCk6YmUpO2lmKChNZT0ibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGJlKSYmMCpiZT09MCl7aWYoaXQucz0xL2JlPDA/KGJlPS1iZSwtMSk6MSxiZT09PX5+YmUpe2ZvcihVZT0wLGh0PWJlOzEwPD1odDtodC89MTAsVWUrKyk7cmV0dXJuIGl0LmU9VWUsdm9pZChpdC5jPVtiZV0pfXplPVN0cmluZyhiZSl9ZWxzZXtpZih6ZT1TdHJpbmcoYmUpLCFsZS50ZXN0''@;'; put 'put ''KHplKSlyZXR1cm4gY2UoaXQsemUsTWUpO2l0LnM9NDU9PXplLmNoYXJDb2RlQXQoMCk/KHplPXplLnNsaWNlKDEpLC0xKToxfS0xPChVZT16ZS5pbmRleE9mKCIuIikpJiYoemU9emUucmVwbGFjZSgiLiIsIiIpKSwwPChodD16ZS5zZWFyY2goL2UvaSkpPyhVZTwwJiYoVWU9aHQpLFVlKz0r''@;'; put 'put ''emUuc2xpY2UoaHQrMSksemU9emUuc3Vic3RyaW5nKDAsaHQpKTpVZTwwJiYoVWU9emUubGVuZ3RoKX1lbHNle2lmKFUoQWUsMixCZS5sZW5ndGgsIkJhc2UiKSx6ZT1TdHJpbmcoYmUpLDEwPT1BZSlyZXR1cm4gbHQoaXQ9bmV3IFdlKGJlIGluc3RhbmNlb2YgV2U/YmU6emUpLHAraXQuZSsx''@;'; put 'put ''LHcpO2lmKE1lPSJudW1iZXIiPT10eXBlb2YgYmUpe2lmKDAqYmUhPTApcmV0dXJuIGNlKGl0LHplLE1lLEFlKTtpZihpdC5zPTEvYmU8MD8oemU9emUuc2xpY2UoMSksLTEpOjEsV2UuREVCVUcmJjE1PHplLnJlcGxhY2UoL14wXC4wKnxcLi8sIiIpLmxlbmd0aCl0aHJvdyBFcnJvcih6K2Jl''@;'; put 'put ''KTtNZT0hMX1lbHNlIGl0LnM9NDU9PT16ZS5jaGFyQ29kZUF0KDApPyh6ZT16ZS5zbGljZSgxKSwtMSk6MTtmb3IoVGU9QmUuc2xpY2UoMCxBZSksVWU9aHQ9MCxEZT16ZS5sZW5ndGg7aHQ8RGU7aHQrKylpZihUZS5pbmRleE9mKHFlPXplLmNoYXJBdChodCkpPDApe2lmKCIuIj09cWUpe2lm''@;'; put 'put ''KFVlPGh0KXtVZT1EZTtjb250aW51ZX19ZWxzZSBpZighWGUmJih6ZT09emUudG9VcHBlckNhc2UoKSYmKHplPXplLnRvTG93ZXJDYXNlKCkpfHx6ZT09emUudG9Mb3dlckNhc2UoKSYmKHplPXplLnRvVXBwZXJDYXNlKCkpKSl7WGU9ITAsaHQ9LTEsVWU9MDtjb250aW51ZX1yZXR1cm4gY2Uo''@;'; put 'put ''aXQsU3RyaW5nKGJlKSxNZSxBZSl9LTE8KFVlPSh6ZT11ZSh6ZSxBZSwxMCxpdC5zKSkuaW5kZXhPZigiLiIpKT96ZT16ZS5yZXBsYWNlKCIuIiwiIik6VWU9emUubGVuZ3RofWZvcihodD0wOzQ4PT09emUuY2hhckNvZGVBdChodCk7aHQrKyk7Zm9yKERlPXplLmxlbmd0aDs0OD09PXplLmNo''@;'; put 'put ''YXJDb2RlQXQoLS1EZSk7KTtpZih6ZT16ZS5zbGljZShodCwrK0RlKSl7aWYoRGUtPWh0LE1lJiZXZS5ERUJVRyYmMTU8RGUmJihrPGJlfHxiZSE9PU8oYmUpKSl0aHJvdyBFcnJvcih6K2l0LnMqYmUpO2lmKGZlPChVZT1VZS1odC0xKSlpdC5jPWl0LmU9bnVsbDtlbHNlIGlmKFVlPGRlKWl0''@;'; put 'put ''LmM9W2l0LmU9MF07ZWxzZXtpZihpdC5lPVVlLGl0LmM9W10saHQ9KFVlKzEpJUksVWU8MCYmKGh0Kz1JKSxodDxEZSl7Zm9yKGh0JiZpdC5jLnB1c2goK3plLnNsaWNlKDAsaHQpKSxEZS09STtodDxEZTspaXQuYy5wdXNoKCt6ZS5zbGljZShodCxodCs9SSkpO3plPXplLnNsaWNlKGh0KSxo''@;'; put 'put ''dD1JLXplLmxlbmd0aH1lbHNlIGh0LT1EZTtmb3IoO2h0LS07emUrPSIwIik7aXQuYy5wdXNoKCt6ZSl9fWVsc2UgaXQuYz1baXQuZT0wXX1mdW5jdGlvbiBLZShiZSxBZSxUZSxxZSl7dmFyIFhlLFVlLGh0LE1lLERlO2lmKG51bGw9PVRlP1RlPXc6VShUZSwwLDgpLCFiZS5jKXJldHVybiBi''@;'; put 'put ''ZS50b1N0cmluZygpO2lmKFhlPWJlLmNbMF0saHQ9YmUuZSxudWxsPT1BZSlEZT1ZKGJlLmMpLERlPTE9PXFlfHwyPT1xZSYmKGh0PD1KfHxuZTw9aHQpP2VlKERlLGh0KTp0ZShEZSxodCwiMCIpO2Vsc2UgaWYoVWU9KGJlPWx0KG5ldyBXZShiZSksQWUsVGUpKS5lLE1lPShEZT1ZKGJlLmMp''@;'; put 'put ''KS5sZW5ndGgsMT09cWV8fDI9PXFlJiYoQWU8PVVlfHxVZTw9Sikpe2Zvcig7TWU8QWU7RGUrPSIwIixNZSsrKTtEZT1lZShEZSxVZSl9ZWxzZSBpZihBZS09aHQsRGU9dGUoRGUsVWUsIjAiKSxNZTxVZSsxKXtpZigwPC0tQWUpZm9yKERlKz0iLiI7QWUtLTtEZSs9IjAiKTt9ZWxzZSBpZigw''@;'; put 'put ''PChBZSs9VWUtTWUpKWZvcihVZSsxPT1NZSYmKERlKz0iLiIpO0FlLS07RGUrPSIwIik7cmV0dXJuIGJlLnM8MCYmWGU/Ii0iK0RlOkRlfWZ1bmN0aW9uIFllKGJlLEFlKXtmb3IodmFyIFRlLHFlPTEsWGU9bmV3IFdlKGJlWzBdKTtxZTxiZS5sZW5ndGg7cWUrKyl7aWYoIShUZT1uZXcgV2Uo''@;'; put 'put ''YmVbcWVdKSkucyl7WGU9VGU7YnJlYWt9QWUuY2FsbChYZSxUZSkmJihYZT1UZSl9cmV0dXJuIFhlfWZ1bmN0aW9uIEplKGJlLEFlLFRlKXtmb3IodmFyIHFlPTEsWGU9QWUubGVuZ3RoOyFBZVstLVhlXTtBZS5wb3AoKSk7Zm9yKFhlPUFlWzBdOzEwPD1YZTtYZS89MTAscWUrKyk7cmV0dXJu''@;'; put 'put ''IGJlLmM9KFRlPXFlK1RlKkktMSk+ZmU/YmUuZT1udWxsOlRlPGRlP1tiZS5lPTBdOihiZS5lPVRlLEFlKSxiZX1mdW5jdGlvbiBsdChiZSxBZSxUZSxxZSl7dmFyIFhlLFVlLGh0LE1lLERlLHplLGl0LHV0PWJlLmMsTXQ9RTtpZih1dCl7ZTp7Zm9yKFhlPTEsTWU9dXRbMF07MTA8PU1lO01l''@;'; put 'put ''Lz0xMCxYZSsrKTtpZigoVWU9QWUtWGUpPDApVWUrPUksaXQ9KERlPXV0W3plPTBdKS9NdFtYZS0oaHQ9QWUpLTFdJTEwfDA7ZWxzZSBpZigoemU9TSgoVWUrMSkvSSkpPj11dC5sZW5ndGgpe2lmKCFxZSlicmVhayBlO2Zvcig7dXQubGVuZ3RoPD16ZTt1dC5wdXNoKDApKTtEZT1pdD0wLGh0''@;'; put 'put ''PShVZSU9SSktSSsoWGU9MSl9ZWxzZXtmb3IoRGU9TWU9dXRbemVdLFhlPTE7MTA8PU1lO01lLz0xMCxYZSsrKTtpdD0oaHQ9KFVlJT1JKS1JK1hlKTwwPzA6RGUvTXRbWGUtaHQtMV0lMTB8MH1pZihxZT1xZXx8QWU8MHx8bnVsbCE9dXRbemUrMV18fChodDwwP0RlOkRlJU10W1hlLWh0LTFd''@;'; put 'put ''KSxxZT1UZTw0PyhpdHx8cWUpJiYoMD09VGV8fFRlPT0oYmUuczwwPzM6MikpOjU8aXR8fDU9PWl0JiYoND09VGV8fHFlfHw2PT1UZSYmKDA8VWU/MDxodD9EZS9NdFtYZS1odF06MDp1dFt6ZS0xXSklMTAmMXx8VGU9PShiZS5zPDA/ODo3KSksQWU8MXx8IXV0WzBdKXJldHVybiB1dC5sZW5n''@;'; put 'put ''dGg9MCxxZT8odXRbMF09TXRbKEktKEFlLT1iZS5lKzEpJUkpJUldLGJlLmU9LUFlfHwwKTp1dFswXT1iZS5lPTAsYmU7aWYoMD09VWU/KHV0Lmxlbmd0aD16ZSxNZT0xLHplLS0pOih1dC5sZW5ndGg9emUrMSxNZT1NdFtJLVVlXSx1dFt6ZV09MDxodD9PKERlL010W1hlLWh0XSVNdFtodF0p''@;'; put 'put ''Kk1lOjApLHFlKWZvcig7Oyl7aWYoMD09emUpe2ZvcihVZT0xLGh0PXV0WzBdOzEwPD1odDtodC89MTAsVWUrKyk7Zm9yKGh0PXV0WzBdKz1NZSxNZT0xOzEwPD1odDtodC89MTAsTWUrKyk7VWUhPU1lJiYoYmUuZSsrLHV0WzBdPT1LJiYodXRbMF09MSkpO2JyZWFrfWlmKHV0W3plXSs9TWUs''@;'; put 'put ''dXRbemVdIT1LKWJyZWFrO3V0W3plLS1dPTAsTWU9MX1mb3IoVWU9dXQubGVuZ3RoOzA9PT11dFstLVVlXTt1dC5wb3AoKSk7fWJlLmU+ZmU/YmUuYz1iZS5lPW51bGw6YmUuZTxkZSYmKGJlLmM9W2JlLmU9MF0pfXJldHVybiBiZX1mdW5jdGlvbiBQZShiZSl7dmFyIEFlLFRlPWJlLmU7cmV0''@;'; put 'put ''dXJuIG51bGw9PT1UZT9iZS50b1N0cmluZygpOihBZT1ZKGJlLmMpLEFlPVRlPD1KfHxuZTw9VGU/ZWUoQWUsVGUpOnRlKEFlLFRlLCIwIiksYmUuczwwPyItIitBZTpBZSl9cmV0dXJuIFdlLmNsb25lPW9lLFdlLlJPVU5EX1VQPTAsV2UuUk9VTkRfRE9XTj0xLFdlLlJPVU5EX0NFSUw9MixX''@;'; put 'put ''ZS5ST1VORF9GTE9PUj0zLFdlLlJPVU5EX0hBTEZfVVA9NCxXZS5ST1VORF9IQUxGX0RPV049NSxXZS5ST1VORF9IQUxGX0VWRU49NixXZS5ST1VORF9IQUxGX0NFSUw9NyxXZS5ST1VORF9IQUxGX0ZMT09SPTgsV2UuRVVDTElEPTksV2UuY29uZmlnPVdlLnNldD1mdW5jdGlvbihiZSl7dmFy''@;'; put 'put ''IEFlLFRlO2lmKG51bGwhPWJlKXtpZigib2JqZWN0IiE9dHlwZW9mIGJlKXRocm93IEVycm9yKFIrIk9iamVjdCBleHBlY3RlZDogIitiZSk7aWYoYmUuaGFzT3duUHJvcGVydHkoQWU9IkRFQ0lNQUxfUExBQ0VTIikmJihVKFRlPWJlW0FlXSwwLFYsQWUpLHA9VGUpLGJlLmhhc093blByb3Bl''@;'; put 'put ''cnR5KEFlPSJST1VORElOR19NT0RFIikmJihVKFRlPWJlW0FlXSwwLDgsQWUpLHc9VGUpLGJlLmhhc093blByb3BlcnR5KEFlPSJFWFBPTkVOVElBTF9BVCIpJiYoKFRlPWJlW0FlXSkmJlRlLnBvcD8oVShUZVswXSwtViwwLEFlKSxVKFRlWzFdLDAsVixBZSksSj1UZVswXSxuZT1UZVsxXSk6''@;'; put 'put ''KFUoVGUsLVYsVixBZSksSj0tKG5lPVRlPDA/LVRlOlRlKSkpLGJlLmhhc093blByb3BlcnR5KEFlPSJSQU5HRSIpKWlmKChUZT1iZVtBZV0pJiZUZS5wb3ApVShUZVswXSwtViwtMSxBZSksVShUZVsxXSwxLFYsQWUpLGRlPVRlWzBdLGZlPVRlWzFdO2Vsc2V7aWYoVShUZSwtVixWLEFlKSwh''@;'; put 'put ''VGUpdGhyb3cgRXJyb3IoUitBZSsiIGNhbm5vdCBiZSB6ZXJvOiAiK1RlKTtkZT0tKGZlPVRlPDA/LVRlOlRlKX1pZihiZS5oYXNPd25Qcm9wZXJ0eShBZT0iQ1JZUFRPIikpe2lmKChUZT1iZVtBZV0pIT09ISFUZSl0aHJvdyBFcnJvcihSK0FlKyIgbm90IHRydWUgb3IgZmFsc2U6ICIrVGUp''@;'; put 'put ''O2lmKFRlKXtpZih0eXBlb2YgY3J5cHRvPiJ1Inx8IWNyeXB0b3x8IWNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJiFjcnlwdG8ucmFuZG9tQnl0ZXMpdGhyb3cgeGU9IVRlLEVycm9yKFIrImNyeXB0byB1bmF2YWlsYWJsZSIpO3hlPVRlfWVsc2UgeGU9VGV9aWYoYmUuaGFzT3duUHJvcGVydHko''@;'; put 'put ''QWU9Ik1PRFVMT19NT0RFIikmJihVKFRlPWJlW0FlXSwwLDksQWUpLExlPVRlKSxiZS5oYXNPd25Qcm9wZXJ0eShBZT0iUE9XX1BSRUNJU0lPTiIpJiYoVShUZT1iZVtBZV0sMCxWLEFlKSxGZT1UZSksYmUuaGFzT3duUHJvcGVydHkoQWU9IkZPUk1BVCIpKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''KFRlPWJlW0FlXSkpdGhyb3cgRXJyb3IoUitBZSsiIG5vdCBhbiBvYmplY3Q6ICIrVGUpO09lPVRlfWlmKGJlLmhhc093blByb3BlcnR5KEFlPSJBTFBIQUJFVCIpKXtpZigic3RyaW5nIiE9dHlwZW9mKFRlPWJlW0FlXSl8fC9eLiR8WystLlxzXXwoLikuKlwxLy50ZXN0KFRlKSl0aHJvdyBF''@;'; put 'put ''cnJvcihSK0FlKyIgaW52YWxpZDogIitUZSk7QmU9VGV9fXJldHVybntERUNJTUFMX1BMQUNFUzpwLFJPVU5ESU5HX01PREU6dyxFWFBPTkVOVElBTF9BVDpbSixuZV0sUkFOR0U6W2RlLGZlXSxDUllQVE86eGUsTU9EVUxPX01PREU6TGUsUE9XX1BSRUNJU0lPTjpGZSxGT1JNQVQ6T2UsQUxQ''@;'; put 'put ''SEFCRVQ6QmV9fSxXZS5pc0JpZ051bWJlcj1mdW5jdGlvbihiZSl7cmV0dXJuIGJlIGluc3RhbmNlb2YgV2V8fGJlJiYhMD09PWJlLl9pc0JpZ051bWJlcnx8ITF9LFdlLm1heGltdW09V2UubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIFllKGFyZ3VtZW50cyxTLmx0KX0sV2UubWluaW11bT1XZS5t''@;'; put 'put ''aW49ZnVuY3Rpb24oKXtyZXR1cm4gWWUoYXJndW1lbnRzLFMuZ3QpfSxXZS5yYW5kb209KEc9OTAwNzE5OTI1NDc0MDk5MixiPU1hdGgucmFuZG9tKCkqRyYyMDk3MTUxP2Z1bmN0aW9uKCl7cmV0dXJuIE8oTWF0aC5yYW5kb20oKSpHKX06ZnVuY3Rpb24oKXtyZXR1cm4gODM4ODYwOCooMTA3''@;'; put 'put ''Mzc0MTgyNCpNYXRoLnJhbmRvbSgpfDApKyg4Mzg4NjA4Kk1hdGgucmFuZG9tKCl8MCl9LGZ1bmN0aW9uKGJlKXt2YXIgQWUsVGUscWUsWGUsVWUsaHQ9MCxNZT1bXSxEZT1uZXcgV2Uodik7aWYobnVsbD09YmU/YmU9cDpVKGJlLDAsViksWGU9TShiZS9JKSx4ZSlpZihjcnlwdG8uZ2V0UmFu''@;'; put 'put ''ZG9tVmFsdWVzKXtmb3IoQWU9Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoWGUqPTIpKTtodDxYZTspOWUxNTw9KFVlPTEzMTA3MipBZVtodF0rKEFlW2h0KzFdPj4+MTEpKT8oVGU9Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpLEFlW2h0''@;'; put 'put ''XT1UZVswXSxBZVtodCsxXT1UZVsxXSk6KE1lLnB1c2goVWUlMWUxNCksaHQrPTIpO2h0PVhlLzJ9ZWxzZXtpZighY3J5cHRvLnJhbmRvbUJ5dGVzKXRocm93IHhlPSExLEVycm9yKFIrImNyeXB0byB1bmF2YWlsYWJsZSIpO2ZvcihBZT1jcnlwdG8ucmFuZG9tQnl0ZXMoWGUqPTcpO2h0PFhl''@;'; put 'put ''Oyk5ZTE1PD0oVWU9MjgxNDc0OTc2NzEwNjU2KigzMSZBZVtodF0pKzEwOTk1MTE2Mjc3NzYqQWVbaHQrMV0rNDI5NDk2NzI5NipBZVtodCsyXSsxNjc3NzIxNipBZVtodCszXSsoQWVbaHQrNF08PDE2KSsoQWVbaHQrNV08PDgpK0FlW2h0KzZdKT9jcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29w''@;'; put 'put ''eShBZSxodCk6KE1lLnB1c2goVWUlMWUxNCksaHQrPTcpO2h0PVhlLzd9aWYoIXhlKWZvcig7aHQ8WGU7KShVZT1iKCkpPDllMTUmJihNZVtodCsrXT1VZSUxZTE0KTtmb3IoWGU9TWVbLS1odF0sYmUlPUksWGUmJmJlJiYoTWVbaHRdPU8oWGUvKFVlPUVbSS1iZV0pKSpVZSk7MD09PU1lW2h0''@;'; put 'put ''XTtNZS5wb3AoKSxodC0tKTtpZihodDwwKU1lPVtxZT0wXTtlbHNle2ZvcihxZT0tMTswPT09TWVbMF07TWUuc3BsaWNlKDAsMSkscWUtPUkpO2ZvcihodD0xLFVlPU1lWzBdOzEwPD1VZTtVZS89MTAsaHQrKyk7aHQ8SSYmKHFlLT1JLWh0KX1yZXR1cm4gRGUuZT1xZSxEZS5jPU1lLERlfSks''@;'; put 'put ''V2Uuc3VtPWZ1bmN0aW9uKCl7Zm9yKHZhciBiZT0xLEFlPWFyZ3VtZW50cyxUZT1uZXcgV2UoQWVbMF0pO2JlPEFlLmxlbmd0aDspVGU9VGUucGx1cyhBZVtiZSsrXSk7cmV0dXJuIFRlfSx1ZT1mdW5jdGlvbigpe3ZhciBiZT0iMDEyMzQ1Njc4OSI7ZnVuY3Rpb24gQWUoVGUscWUsWGUsVWUp''@;'; put 'put ''e2Zvcih2YXIgaHQsTWUsRGU9WzBdLHplPTAsaXQ9VGUubGVuZ3RoO3plPGl0Oyl7Zm9yKE1lPURlLmxlbmd0aDtNZS0tO0RlW01lXSo9cWUpO2ZvcihEZVswXSs9VWUuaW5kZXhPZihUZS5jaGFyQXQoemUrKykpLGh0PTA7aHQ8RGUubGVuZ3RoO2h0KyspRGVbaHRdPlhlLTEmJihudWxsPT1E''@;'; put 'put ''ZVtodCsxXSYmKERlW2h0KzFdPTApLERlW2h0KzFdKz1EZVtodF0vWGV8MCxEZVtodF0lPVhlKX1yZXR1cm4gRGUucmV2ZXJzZSgpfXJldHVybiBmdW5jdGlvbihUZSxxZSxYZSxVZSxodCl7dmFyIE1lLERlLHplLGl0LHV0LE10LEh0LFB0LG9uPVRlLmluZGV4T2YoIi4iKSxDbj1wLFV0PXc7''@;'; put 'put ''Zm9yKDA8PW9uJiYoaXQ9RmUsRmU9MCxUZT1UZS5yZXBsYWNlKCIuIiwiIiksTXQ9KFB0PW5ldyBXZShxZSkpLnBvdyhUZS5sZW5ndGgtb24pLEZlPWl0LFB0LmM9QWUodGUoWShNdC5jKSxNdC5lLCIwIiksMTAsWGUsYmUpLFB0LmU9UHQuYy5sZW5ndGgpLHplPWl0PShIdD1BZShUZSxxZSxY''@;'; put 'put ''ZSxodD8oTWU9QmUsYmUpOihNZT1iZSxCZSkpKS5sZW5ndGg7MD09SHRbLS1pdF07SHQucG9wKCkpO2lmKCFIdFswXSlyZXR1cm4gTWUuY2hhckF0KDApO2lmKG9uPDA/LS16ZTooTXQuYz1IdCxNdC5lPXplLE10LnM9VWUsSHQ9KE10PWhlKE10LFB0LENuLFV0LFhlKSkuYyx1dD1NdC5yLHpl''@;'; put 'put ''PU10LmUpLG9uPUh0W0RlPXplK0NuKzFdLGl0PVhlLzIsdXQ9dXR8fERlPDB8fG51bGwhPUh0W0RlKzFdLHV0PVV0PDQ/KG51bGwhPW9ufHx1dCkmJigwPT1VdHx8VXQ9PShNdC5zPDA/MzoyKSk6aXQ8b258fG9uPT1pdCYmKDQ9PVV0fHx1dHx8Nj09VXQmJjEmSHRbRGUtMV18fFV0PT0oTXQu''@;'; put 'put ''czwwPzg6NykpLERlPDF8fCFIdFswXSlUZT11dD90ZShNZS5jaGFyQXQoMSksLUNuLE1lLmNoYXJBdCgwKSk6TWUuY2hhckF0KDApO2Vsc2V7aWYoSHQubGVuZ3RoPURlLHV0KWZvcigtLVhlOysrSHRbLS1EZV0+WGU7KUh0W0RlXT0wLERlfHwoKyt6ZSxIdD1bMV0uY29uY2F0KEh0KSk7Zm9y''@;'; put 'put ''KGl0PUh0Lmxlbmd0aDshSHRbLS1pdF07KTtmb3Iob249MCxUZT0iIjtvbjw9aXQ7VGUrPU1lLmNoYXJBdChIdFtvbisrXSkpO1RlPXRlKFRlLHplLE1lLmNoYXJBdCgwKSl9cmV0dXJuIFRlfX0oKSxoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGJlKHFlLFhlLFVlKXt2YXIgaHQsTWUsRGUsemUs''@;'; put 'put ''aXQ9MCx1dD1xZS5sZW5ndGgsTXQ9WGUlaixIdD1YZS9qfDA7Zm9yKHFlPXFlLnNsaWNlKCk7dXQtLTspaXQ9KChNZT1NdCooRGU9cWVbdXRdJWopKyhodD1IdCpEZSsoemU9cWVbdXRdL2p8MCkqTXQpJWoqaitpdCkvVWV8MCkrKGh0L2p8MCkrSHQqemUscWVbdXRdPU1lJVVlO3JldHVybiBp''@;'; put 'put ''dCYmKHFlPVtpdF0uY29uY2F0KHFlKSkscWV9ZnVuY3Rpb24gQWUocWUsWGUsVWUsaHQpe3ZhciBNZSxEZTtpZihVZSE9aHQpRGU9aHQ8VWU/MTotMTtlbHNlIGZvcihNZT1EZT0wO01lPFVlO01lKyspaWYocWVbTWVdIT1YZVtNZV0pe0RlPXFlW01lXT5YZVtNZV0/MTotMTticmVha31yZXR1''@;'; put 'put ''cm4gRGV9ZnVuY3Rpb24gVGUocWUsWGUsVWUsaHQpe2Zvcih2YXIgTWU9MDtVZS0tOylxZVtVZV0tPU1lLHFlW1VlXT0oTWU9cWVbVWVdPFhlW1VlXT8xOjApKmh0K3FlW1VlXS1YZVtVZV07Zm9yKDshcWVbMF0mJjE8cWUubGVuZ3RoO3FlLnNwbGljZSgwLDEpKTt9cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KHFlLFhlLFVlLGh0LE1lKXt2YXIgRGUsemUsaXQsdXQsTXQsSHQsUHQsb24sQ24sVXQsYm4sV24sZW4sJG4sTm4sZnQsZm4saG49cWUucz09WGUucz8xOi0xLHd0PXFlLmMsWHQ9WGUuYztpZighKHd0JiZ3dFswXSYmWHQmJlh0WzBdKSlyZXR1cm4gbmV3IFdlKHFlLnMmJlhlLnMmJih3dD8h''@;'; put 'put ''WHR8fHd0WzBdIT1YdFswXTpYdCk/d3QmJjA9PXd0WzBdfHwhWHQ/MCpobjpobi8wOk5hTik7Zm9yKENuPShvbj1uZXcgV2UoaG4pKS5jPVtdLGhuPVVlKyh6ZT1xZS5lLVhlLmUpKzEsTWV8fChNZT1LLHplPUIocWUuZS9JKS1CKFhlLmUvSSksaG49aG4vSXwwKSxpdD0wO1h0W2l0XT09KHd0''@;'; put 'put ''W2l0XXx8MCk7aXQrKyk7aWYoWHRbaXRdPih3dFtpdF18fDApJiZ6ZS0tLGhuPDApQ24ucHVzaCgxKSx1dD0hMDtlbHNle2Zvcigkbj13dC5sZW5ndGgsZnQ9WHQubGVuZ3RoLGhuKz0yLDE8KE10PU8oTWUvKFh0W2l0PTBdKzEpKSkmJihYdD1iZShYdCxNdCxNZSksd3Q9YmUod3QsTXQsTWUp''@;'; put 'put ''LGZ0PVh0Lmxlbmd0aCwkbj13dC5sZW5ndGgpLGVuPWZ0LGJuPShVdD13dC5zbGljZSgwLGZ0KSkubGVuZ3RoO2JuPGZ0O1V0W2JuKytdPTApO2ZuPVh0LnNsaWNlKCksZm49WzBdLmNvbmNhdChmbiksTm49WHRbMF0sWHRbMV0+PU1lLzImJk5uKys7ZG97aWYoTXQ9MCwoRGU9QWUoWHQsVXQs''@;'; put 'put ''ZnQsYm4pKTwwKXtpZihXbj1VdFswXSxmdCE9Ym4mJihXbj1XbipNZSsoVXRbMV18fDApKSwxPChNdD1PKFduL05uKSkpZm9yKE1lPD1NdCYmKE10PU1lLTEpLFB0PShIdD1iZShYdCxNdCxNZSkpLmxlbmd0aCxibj1VdC5sZW5ndGg7MT09QWUoSHQsVXQsUHQsYm4pOylNdC0tLFRlKEh0LGZ0''@;'; put 'put ''PFB0P2ZuOlh0LFB0LE1lKSxQdD1IdC5sZW5ndGgsRGU9MTtlbHNlIDA9PU10JiYoRGU9TXQ9MSksUHQ9KEh0PVh0LnNsaWNlKCkpLmxlbmd0aDtpZihQdDxibiYmKEh0PVswXS5jb25jYXQoSHQpKSxUZShVdCxIdCxibixNZSksYm49VXQubGVuZ3RoLC0xPT1EZSlmb3IoO0FlKFh0LFV0LGZ0''@;'; put 'put ''LGJuKTwxOylNdCsrLFRlKFV0LGZ0PGJuP2ZuOlh0LGJuLE1lKSxibj1VdC5sZW5ndGh9ZWxzZSAwPT09RGUmJihNdCsrLFV0PVswXSk7Q25baXQrK109TXQsVXRbMF0/VXRbYm4rK109d3RbZW5dfHwwOihVdD1bd3RbZW5dXSxibj0xKX13aGlsZSgoZW4rKzwkbnx8bnVsbCE9VXRbMF0pJiZo''@;'; put 'put ''bi0tKTt1dD1udWxsIT1VdFswXSxDblswXXx8Q24uc3BsaWNlKDAsMSl9aWYoTWU9PUspe2ZvcihpdD0xLGhuPUNuWzBdOzEwPD1objtobi89MTAsaXQrKyk7bHQob24sVWUrKG9uLmU9aXQremUqSS0xKSsxLGh0LHV0KX1lbHNlIG9uLmU9emUsb24ucj0rdXQ7cmV0dXJuIG9ufX0oKSxEPS9e''@;'; put 'put ''KC0/KTAoW3hib10pKD89XHdbXHcuXSokKS9pLEg9L14oW14uXSspXC4kLyxOPS9eXC4oW14uXSspJC8sZz0vXi0/KEluZmluaXR5fE5hTikkLyxDPS9eXHMqXCsoPz1bXHcuXSl8XlxzK3xccyskL2csY2U9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe3ZhciBYZSxVZT1UZT9BZTpBZS5yZXBsYWNl''@;'; put 'put ''KEMsIiIpO2lmKGcudGVzdChVZSkpYmUucz1pc05hTihVZSk/bnVsbDpVZTwwPy0xOjEsYmUuYz1iZS5lPW51bGw7ZWxzZXtpZighVGUmJihVZT1VZS5yZXBsYWNlKEQsZnVuY3Rpb24oaHQsTWUsRGUpe3JldHVybiBYZT0ieCI9PShEZT1EZS50b0xvd2VyQ2FzZSgpKT8xNjoiYiI9PURlPzI6''@;'; put 'put ''OCxxZSYmcWUhPVhlP2h0Ok1lfSkscWUmJihYZT1xZSxVZT1VZS5yZXBsYWNlKEgsIiQxIikucmVwbGFjZShOLCIwLiQxIikpLEFlIT1VZSkpcmV0dXJuIG5ldyBXZShVZSxYZSk7aWYoV2UuREVCVUcpdGhyb3cgRXJyb3IoUisiTm90IGEiKyhxZT8iIGJhc2UgIitxZToiIikrIiBudW1iZXI6''@;'; put 'put ''ICIrQWUpO2JlLmM9YmUuZT1iZS5zPW51bGx9fSxTLmFic29sdXRlVmFsdWU9Uy5hYnM9ZnVuY3Rpb24oKXt2YXIgYmU9bmV3IFdlKHRoaXMpO3JldHVybiBiZS5zPDAmJihiZS5zPTEpLGJlfSxTLmNvbXBhcmVkVG89ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBYKHRoaXMsbmV3IFdlKGJlLEFl''@;'; put 'put ''KSl9LFMuZGVjaW1hbFBsYWNlcz1TLmRwPWZ1bmN0aW9uKGJlLEFlKXt2YXIgVGUscWUsWGU7aWYobnVsbCE9YmUpcmV0dXJuIFUoYmUsMCxWKSxudWxsPT1BZT9BZT13OlUoQWUsMCw4KSxsdChuZXcgV2UodGhpcyksYmUrdGhpcy5lKzEsQWUpO2lmKCEoVGU9dGhpcy5jKSlyZXR1cm4gbnVs''@;'; put 'put ''bDtpZihxZT0oKFhlPVRlLmxlbmd0aC0xKS1CKHRoaXMuZS9JKSkqSSxYZT1UZVtYZV0pZm9yKDtYZSUxMD09MDtYZS89MTAscWUtLSk7cmV0dXJuIHFlPDAmJihxZT0wKSxxZX0sUy5kaXZpZGVkQnk9Uy5kaXY9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBoZSh0aGlzLG5ldyBXZShiZSxBZSks''@;'; put 'put ''cCx3KX0sUy5kaXZpZGVkVG9JbnRlZ2VyQnk9Uy5pZGl2PWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gaGUodGhpcyxuZXcgV2UoYmUsQWUpLDAsMSl9LFMuZXhwb25lbnRpYXRlZEJ5PVMucG93PWZ1bmN0aW9uKGJlLEFlKXt2YXIgVGUscWUsWGUsVWUsaHQsTWUsRGUsemUsaXQ9dGhpcztpZigo''@;'; put 'put ''YmU9bmV3IFdlKGJlKSkuYyYmIWJlLmlzSW50ZWdlcigpKXRocm93IEVycm9yKFIrIkV4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiAiK1BlKGJlKSk7aWYobnVsbCE9QWUmJihBZT1uZXcgV2UoQWUpKSxodD0xNDxiZS5lLCFpdC5jfHwhaXQuY1swXXx8MT09aXQuY1swXSYmIWl0LmUmJjE9PWl0''@;'; put 'put ''LmMubGVuZ3RofHwhYmUuY3x8IWJlLmNbMF0pcmV0dXJuIHplPW5ldyBXZShNYXRoLnBvdygrUGUoaXQpLGh0PzItcShiZSk6K1BlKGJlKSkpLEFlP3plLm1vZChBZSk6emU7aWYoTWU9YmUuczwwLEFlKXtpZihBZS5jPyFBZS5jWzBdOiFBZS5zKXJldHVybiBuZXcgV2UoTmFOKTsocWU9IU1l''@;'; put 'put ''JiZpdC5pc0ludGVnZXIoKSYmQWUuaXNJbnRlZ2VyKCkpJiYoaXQ9aXQubW9kKEFlKSl9ZWxzZXtpZig5PGJlLmUmJigwPGl0LmV8fGl0LmU8LTF8fCgwPT1pdC5lPzE8aXQuY1swXXx8aHQmJjI0ZTc8PWl0LmNbMV06aXQuY1swXTw4ZTEzfHxodCYmaXQuY1swXTw9OTk5OTk3NWU3KSkpcmV0''@;'; put 'put ''dXJuIFVlPWl0LnM8MCYmcShiZSk/LTA6MCwtMTxpdC5lJiYoVWU9MS9VZSksbmV3IFdlKE1lPzEvVWU6VWUpO0ZlJiYoVWU9TShGZS9JKzIpKX1mb3IoRGU9aHQ/KFRlPW5ldyBXZSguNSksTWUmJihiZS5zPTEpLHEoYmUpKTooWGU9TWF0aC5hYnMoK1BlKGJlKSkpJTIsemU9bmV3IFdlKHYp''@;'; put 'put ''Ozspe2lmKERlKXtpZighKHplPXplLnRpbWVzKGl0KSkuYylicmVhaztVZT96ZS5jLmxlbmd0aD5VZSYmKHplLmMubGVuZ3RoPVVlKTpxZSYmKHplPXplLm1vZChBZSkpfWlmKFhlKXtpZigwPT09KFhlPU8oWGUvMikpKWJyZWFrO0RlPVhlJTJ9ZWxzZSBpZihsdChiZT1iZS50aW1lcyhUZSks''@;'; put 'put ''YmUuZSsxLDEpLDE0PGJlLmUpRGU9cShiZSk7ZWxzZXtpZigwPT0oWGU9K1BlKGJlKSkpYnJlYWs7RGU9WGUlMn1pdD1pdC50aW1lcyhpdCksVWU/aXQuYyYmaXQuYy5sZW5ndGg+VWUmJihpdC5jLmxlbmd0aD1VZSk6cWUmJihpdD1pdC5tb2QoQWUpKX1yZXR1cm4gcWU/emU6KE1lJiYoemU9''@;'; put 'put ''di5kaXYoemUpKSxBZT96ZS5tb2QoQWUpOlVlP2x0KHplLEZlLHcsdm9pZCAwKTp6ZSl9LFMuaW50ZWdlclZhbHVlPWZ1bmN0aW9uKGJlKXt2YXIgQWU9bmV3IFdlKHRoaXMpO3JldHVybiBudWxsPT1iZT9iZT13OlUoYmUsMCw4KSxsdChBZSxBZS5lKzEsYmUpfSxTLmlzRXF1YWxUbz1TLmVx''@;'; put 'put ''PWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gMD09PVgodGhpcyxuZXcgV2UoYmUsQWUpKX0sUy5pc0Zpbml0ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxTLmlzR3JlYXRlclRoYW49Uy5ndD1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIDA8WCh0aGlzLG5ldyBXZShiZSxBZSkpfSxTLmlzR3Jl''@;'; put 'put ''YXRlclRoYW5PckVxdWFsVG89Uy5ndGU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiAxPT09KEFlPVgodGhpcyxuZXcgV2UoYmUsQWUpKSl8fDA9PT1BZX0sUy5pc0ludGVnZXI9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYyYmQih0aGlzLmUvSSk+dGhpcy5jLmxlbmd0aC0yfSxTLmlzTGVzc1Ro''@;'; put 'put ''YW49Uy5sdD1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIFgodGhpcyxuZXcgV2UoYmUsQWUpKTwwfSxTLmlzTGVzc1RoYW5PckVxdWFsVG89Uy5sdGU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybi0xPT09KEFlPVgodGhpcyxuZXcgV2UoYmUsQWUpKSl8fDA9PT1BZX0sUy5pc05hTj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiF0aGlzLnN9LFMuaXNOZWdhdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnM8MH0sUy5pc1Bvc2l0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIDA8dGhpcy5zfSxTLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jJiYwPT10aGlzLmNbMF19LFMubWludXM9ZnVuY3Rpb24o''@;'; put 'put ''YmUsQWUpe3ZhciBUZSxxZSxYZSxVZSxodD10aGlzLE1lPWh0LnM7aWYoQWU9KGJlPW5ldyBXZShiZSxBZSkpLnMsIU1lfHwhQWUpcmV0dXJuIG5ldyBXZShOYU4pO2lmKE1lIT1BZSlyZXR1cm4gYmUucz0tQWUsaHQucGx1cyhiZSk7dmFyIERlPWh0LmUvSSx6ZT1iZS5lL0ksaXQ9aHQuYyx1''@;'; put 'put ''dD1iZS5jO2lmKCFEZXx8IXplKXtpZighaXR8fCF1dClyZXR1cm4gaXQ/KGJlLnM9LUFlLGJlKTpuZXcgV2UodXQ/aHQ6TmFOKTtpZighaXRbMF18fCF1dFswXSlyZXR1cm4gdXRbMF0/KGJlLnM9LUFlLGJlKTpuZXcgV2UoaXRbMF0/aHQ6Mz09dz8tMDowKX1pZihEZT1CKERlKSx6ZT1CKHpl''@;'; put 'put ''KSxpdD1pdC5zbGljZSgpLE1lPURlLXplKXtmb3IoKFhlPShVZT1NZTwwKT8oTWU9LU1lLGl0KTooemU9RGUsdXQpKS5yZXZlcnNlKCksQWU9TWU7QWUtLTtYZS5wdXNoKDApKTtYZS5yZXZlcnNlKCl9ZWxzZSBmb3IocWU9KFVlPShNZT1pdC5sZW5ndGgpPChBZT11dC5sZW5ndGgpKT9NZTpB''@;'; put 'put ''ZSxNZT1BZT0wO0FlPHFlO0FlKyspaWYoaXRbQWVdIT11dFtBZV0pe1VlPWl0W0FlXTx1dFtBZV07YnJlYWt9aWYoVWUmJihYZT1pdCxpdD11dCx1dD1YZSxiZS5zPS1iZS5zKSwwPChBZT0ocWU9dXQubGVuZ3RoKS0oVGU9aXQubGVuZ3RoKSkpZm9yKDtBZS0tO2l0W1RlKytdPTApO2ZvcihB''@;'; put 'put ''ZT1LLTE7TWU8cWU7KXtpZihpdFstLXFlXTx1dFtxZV0pe2ZvcihUZT1xZTtUZSYmIWl0Wy0tVGVdO2l0W1RlXT1BZSk7LS1pdFtUZV0saXRbcWVdKz1LfWl0W3FlXS09dXRbcWVdfWZvcig7MD09aXRbMF07aXQuc3BsaWNlKDAsMSksLS16ZSk7cmV0dXJuIGl0WzBdP0plKGJlLGl0LHplKToo''@;'; put 'put ''YmUucz0zPT13Py0xOjEsYmUuYz1bYmUuZT0wXSxiZSl9LFMubW9kdWxvPVMubW9kPWZ1bmN0aW9uKGJlLEFlKXt2YXIgVGUscWUsWGU9dGhpcztyZXR1cm4gYmU9bmV3IFdlKGJlLEFlKSwhWGUuY3x8IWJlLnN8fGJlLmMmJiFiZS5jWzBdP25ldyBXZShOYU4pOiFiZS5jfHxYZS5jJiYhWGUu''@;'; put 'put ''Y1swXT9uZXcgV2UoWGUpOig5PT1MZT8ocWU9YmUucyxiZS5zPTEsVGU9aGUoWGUsYmUsMCwzKSxiZS5zPXFlLFRlLnMqPXFlKTpUZT1oZShYZSxiZSwwLExlKSwoYmU9WGUubWludXMoVGUudGltZXMoYmUpKSkuY1swXXx8MSE9TGV8fChiZS5zPVhlLnMpLGJlKX0sUy5tdWx0aXBsaWVkQnk9''@;'; put 'put ''Uy50aW1lcz1mdW5jdGlvbihiZSxBZSl7dmFyIFRlLHFlLFhlLFVlLGh0LE1lLERlLHplLGl0LHV0LE10LEh0LFB0LG9uLENuLFV0PXRoaXMsYm49VXQuYyxXbj0oYmU9bmV3IFdlKGJlLEFlKSkuYztpZighKGJuJiZXbiYmYm5bMF0mJlduWzBdKSlyZXR1cm4hVXQuc3x8IWJlLnN8fGJuJiYh''@;'; put 'put ''Ym5bMF0mJiFXbnx8V24mJiFXblswXSYmIWJuP2JlLmM9YmUuZT1iZS5zPW51bGw6KGJlLnMqPVV0LnMsYm4mJlduPyhiZS5jPVswXSxiZS5lPTApOmJlLmM9YmUuZT1udWxsKSxiZTtmb3IocWU9QihVdC5lL0kpK0IoYmUuZS9JKSxiZS5zKj1VdC5zLChEZT1ibi5sZW5ndGgpPCh1dD1Xbi5s''@;'; put 'put ''ZW5ndGgpJiYoUHQ9Ym4sYm49V24sV249UHQsWGU9RGUsRGU9dXQsdXQ9WGUpLFhlPURlK3V0LFB0PVtdO1hlLS07UHQucHVzaCgwKSk7Zm9yKG9uPUssQ249aixYZT11dDswPD0tLVhlOyl7Zm9yKFRlPTAsTXQ9V25bWGVdJUNuLEh0PVduW1hlXS9DbnwwLFVlPVhlKyhodD1EZSk7WGU8VWU7''@;'; put 'put ''KVRlPSgoemU9TXQqKHplPWJuWy0taHRdJUNuKSsoTWU9SHQqemUrKGl0PWJuW2h0XS9DbnwwKSpNdCklQ24qQ24rUHRbVWVdK1RlKS9vbnwwKSsoTWUvQ258MCkrSHQqaXQsUHRbVWUtLV09emUlb247UHRbVWVdPVRlfXJldHVybiBUZT8rK3FlOlB0LnNwbGljZSgwLDEpLEplKGJlLFB0LHFl''@;'; put 'put ''KX0sUy5uZWdhdGVkPWZ1bmN0aW9uKCl7dmFyIGJlPW5ldyBXZSh0aGlzKTtyZXR1cm4gYmUucz0tYmUuc3x8bnVsbCxiZX0sUy5wbHVzPWZ1bmN0aW9uKGJlLEFlKXt2YXIgVGUscWU9dGhpcyxYZT1xZS5zO2lmKEFlPShiZT1uZXcgV2UoYmUsQWUpKS5zLCFYZXx8IUFlKXJldHVybiBuZXcg''@;'; put 'put ''V2UoTmFOKTtpZihYZSE9QWUpcmV0dXJuIGJlLnM9LUFlLHFlLm1pbnVzKGJlKTt2YXIgVWU9cWUuZS9JLGh0PWJlLmUvSSxNZT1xZS5jLERlPWJlLmM7aWYoIVVlfHwhaHQpe2lmKCFNZXx8IURlKXJldHVybiBuZXcgV2UoWGUvMCk7aWYoIU1lWzBdfHwhRGVbMF0pcmV0dXJuIERlWzBdP2Jl''@;'; put 'put ''Om5ldyBXZShNZVswXT9xZTowKlhlKX1pZihVZT1CKFVlKSxodD1CKGh0KSxNZT1NZS5zbGljZSgpLFhlPVVlLWh0KXtmb3IoKFRlPTA8WGU/KGh0PVVlLERlKTooWGU9LVhlLE1lKSkucmV2ZXJzZSgpO1hlLS07VGUucHVzaCgwKSk7VGUucmV2ZXJzZSgpfWZvcigoWGU9TWUubGVuZ3RoKS0o''@;'; put 'put ''QWU9RGUubGVuZ3RoKTwwJiYoVGU9RGUsRGU9TWUsTWU9VGUsQWU9WGUpLFhlPTA7QWU7KVhlPShNZVstLUFlXT1NZVtBZV0rRGVbQWVdK1hlKS9LfDAsTWVbQWVdPUs9PT1NZVtBZV0/MDpNZVtBZV0lSztyZXR1cm4gWGUmJihNZT1bWGVdLmNvbmNhdChNZSksKytodCksSmUoYmUsTWUsaHQp''@;'; put 'put ''fSxTLnByZWNpc2lvbj1TLnNkPWZ1bmN0aW9uKGJlLEFlKXt2YXIgVGUscWUsWGU7aWYobnVsbCE9YmUmJmJlIT09ISFiZSlyZXR1cm4gVShiZSwxLFYpLG51bGw9PUFlP0FlPXc6VShBZSwwLDgpLGx0KG5ldyBXZSh0aGlzKSxiZSxBZSk7aWYoIShUZT10aGlzLmMpKXJldHVybiBudWxsO2lm''@;'; put 'put ''KHFlPShYZT1UZS5sZW5ndGgtMSkqSSsxLFhlPVRlW1hlXSl7Zm9yKDtYZSUxMD09MDtYZS89MTAscWUtLSk7Zm9yKFhlPVRlWzBdOzEwPD1YZTtYZS89MTAscWUrKyk7fXJldHVybiBiZSYmdGhpcy5lKzE+cWUmJihxZT10aGlzLmUrMSkscWV9LFMuc2hpZnRlZEJ5PWZ1bmN0aW9uKGJlKXty''@;'; put 'put ''ZXR1cm4gVShiZSwtayxrKSx0aGlzLnRpbWVzKCIxZSIrYmUpfSxTLnNxdWFyZVJvb3Q9Uy5zcXJ0PWZ1bmN0aW9uKCl7dmFyIGJlLEFlLFRlLHFlLFhlLFVlPXRoaXMsaHQ9VWUuYyxNZT1VZS5zLERlPVVlLmUsemU9cCs0LGl0PW5ldyBXZSgiMC41Iik7aWYoMSE9PU1lfHwhaHR8fCFodFsw''@;'; put 'put ''XSlyZXR1cm4gbmV3IFdlKCFNZXx8TWU8MCYmKCFodHx8aHRbMF0pP05hTjpodD9VZToxLzApO2lmKChUZT0wPT0oTWU9TWF0aC5zcXJ0KCtQZShVZSkpKXx8TWU9PTEvMD8oKChBZT1ZKGh0KSkubGVuZ3RoK0RlKSUyPT0wJiYoQWUrPSIwIiksTWU9TWF0aC5zcXJ0KCtBZSksRGU9QigoRGUr''@;'; put 'put ''MSkvMiktKERlPDB8fERlJTIpLG5ldyBXZShBZT1NZT09MS8wPyIxZSIrRGU6KEFlPU1lLnRvRXhwb25lbnRpYWwoKSkuc2xpY2UoMCxBZS5pbmRleE9mKCJlIikrMSkrRGUpKTpuZXcgV2UoTWUrIiIpKS5jWzBdKWZvcigoTWU9KERlPVRlLmUpK3plKTwzJiYoTWU9MCk7OylpZihUZT1pdC50''@;'; put 'put ''aW1lcygoWGU9VGUpLnBsdXMoaGUoVWUsWGUsemUsMSkpKSxZKFhlLmMpLnNsaWNlKDAsTWUpPT09KEFlPVkoVGUuYykpLnNsaWNlKDAsTWUpKXtpZihUZS5lPERlJiYtLU1lLCI5OTk5IiE9KEFlPUFlLnNsaWNlKE1lLTMsTWUrMSkpJiYocWV8fCI0OTk5IiE9QWUpKXsrQWUmJigrQWUuc2xp''@;'; put 'put ''Y2UoMSl8fCI1IiE9QWUuY2hhckF0KDApKXx8KGx0KFRlLFRlLmUrcCsyLDEpLGJlPSFUZS50aW1lcyhUZSkuZXEoVWUpKTticmVha31pZighcWUmJihsdChYZSxYZS5lK3ArMiwwKSxYZS50aW1lcyhYZSkuZXEoVWUpKSl7VGU9WGU7YnJlYWt9emUrPTQsTWUrPTQscWU9MX1yZXR1cm4gbHQo''@;'; put 'put ''VGUsVGUuZStwKzEsdyxiZSl9LFMudG9FeHBvbmVudGlhbD1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIG51bGwhPWJlJiYoVShiZSwwLFYpLGJlKyspLEtlKHRoaXMsYmUsQWUsMSl9LFMudG9GaXhlZD1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIG51bGwhPWJlJiYoVShiZSwwLFYpLGJlPWJlK3Ro''@;'; put 'put ''aXMuZSsxKSxLZSh0aGlzLGJlLEFlKX0sUy50b0Zvcm1hdD1mdW5jdGlvbihiZSxBZSxUZSl7dmFyIHFlO2lmKG51bGw9PVRlKW51bGwhPWJlJiZBZSYmIm9iamVjdCI9PXR5cGVvZiBBZT8oVGU9QWUsQWU9bnVsbCk6YmUmJiJvYmplY3QiPT10eXBlb2YgYmU/KFRlPWJlLGJlPUFlPW51bGwp''@;'; put 'put ''OlRlPU9lO2Vsc2UgaWYoIm9iamVjdCIhPXR5cGVvZiBUZSl0aHJvdyBFcnJvcihSKyJBcmd1bWVudCBub3QgYW4gb2JqZWN0OiAiK1RlKTtpZihxZT10aGlzLnRvRml4ZWQoYmUsQWUpLHRoaXMuYyl7dmFyIFhlLFVlPXFlLnNwbGl0KCIuIiksaHQ9K1RlLmdyb3VwU2l6ZSxNZT0rVGUuc2Vj''@;'; put 'put ''b25kYXJ5R3JvdXBTaXplLERlPVRlLmdyb3VwU2VwYXJhdG9yfHwiIix6ZT1VZVswXSxpdD1VZVsxXSx1dD10aGlzLnM8MCxNdD11dD96ZS5zbGljZSgxKTp6ZSxIdD1NdC5sZW5ndGg7aWYoTWUmJihYZT1odCxodD1NZSxIdC09TWU9WGUpLDA8aHQmJjA8SHQpe2Zvcih6ZT1NdC5zdWJzdHIo''@;'; put 'put ''MCxYZT1IdCVodHx8aHQpO1hlPEh0O1hlKz1odCl6ZSs9RGUrTXQuc3Vic3RyKFhlLGh0KTswPE1lJiYoemUrPURlK010LnNsaWNlKFhlKSksdXQmJih6ZT0iLSIremUpfXFlPWl0P3plKyhUZS5kZWNpbWFsU2VwYXJhdG9yfHwiIikrKChNZT0rVGUuZnJhY3Rpb25Hcm91cFNpemUpP2l0LnJl''@;'; put 'put ''cGxhY2UobmV3IFJlZ0V4cCgiXFxkeyIrTWUrIn1cXEIiLCJnIiksIiQmIisoVGUuZnJhY3Rpb25Hcm91cFNlcGFyYXRvcnx8IiIpKTppdCk6emV9cmV0dXJuKFRlLnByZWZpeHx8IiIpK3FlKyhUZS5zdWZmaXh8fCIiKX0sUy50b0ZyYWN0aW9uPWZ1bmN0aW9uKGJlKXt2YXIgQWUsVGUscWUs''@;'; put 'put ''WGUsVWUsaHQsTWUsRGUsemUsaXQsdXQsTXQsSHQ9dGhpcyxQdD1IdC5jO2lmKG51bGwhPWJlJiYoIShNZT1uZXcgV2UoYmUpKS5pc0ludGVnZXIoKSYmKE1lLmN8fDEhPT1NZS5zKXx8TWUubHQodikpKXRocm93IEVycm9yKFIrIkFyZ3VtZW50ICIrKE1lLmlzSW50ZWdlcigpPyJvdXQgb2Yg''@;'; put 'put ''cmFuZ2U6ICI6Im5vdCBhbiBpbnRlZ2VyOiAiKStQZShNZSkpO2lmKCFQdClyZXR1cm4gbmV3IFdlKEh0KTtmb3IoQWU9bmV3IFdlKHYpLHplPVRlPW5ldyBXZSh2KSxxZT1EZT1uZXcgV2UodiksTXQ9WShQdCksVWU9QWUuZT1NdC5sZW5ndGgtSHQuZS0xLEFlLmNbMF09RVsoaHQ9VWUlSSk8''@;'; put 'put ''MD9JK2h0Omh0XSxiZT0hYmV8fDA8TWUuY29tcGFyZWRUbyhBZSk/MDxVZT9BZTp6ZTpNZSxodD1mZSxmZT0xLzAsTWU9bmV3IFdlKE10KSxEZS5jWzBdPTA7aXQ9aGUoTWUsQWUsMCwxKSwxIT0oWGU9VGUucGx1cyhpdC50aW1lcyhxZSkpKS5jb21wYXJlZFRvKGJlKTspVGU9cWUscWU9WGUs''@;'; put 'put ''emU9RGUucGx1cyhpdC50aW1lcyhYZT16ZSkpLERlPVhlLEFlPU1lLm1pbnVzKGl0LnRpbWVzKFhlPUFlKSksTWU9WGU7cmV0dXJuIFhlPWhlKGJlLm1pbnVzKFRlKSxxZSwwLDEpLERlPURlLnBsdXMoWGUudGltZXMoemUpKSxUZT1UZS5wbHVzKFhlLnRpbWVzKHFlKSksRGUucz16ZS5zPUh0''@;'; put 'put ''LnMsdXQ9aGUoemUscWUsVWUqPTIsdykubWludXMoSHQpLmFicygpLmNvbXBhcmVkVG8oaGUoRGUsVGUsVWUsdykubWludXMoSHQpLmFicygpKTwxP1t6ZSxxZV06W0RlLFRlXSxmZT1odCx1dH0sUy50b051bWJlcj1mdW5jdGlvbigpe3JldHVybitQZSh0aGlzKX0sUy50b1ByZWNpc2lvbj1m''@;'; put 'put ''dW5jdGlvbihiZSxBZSl7cmV0dXJuIG51bGwhPWJlJiZVKGJlLDEsViksS2UodGhpcyxiZSxBZSwyKX0sUy50b1N0cmluZz1mdW5jdGlvbihiZSl7dmFyIEFlLFRlPXRoaXMscWU9VGUucyxYZT1UZS5lO3JldHVybiBudWxsPT09WGU/cWU/KEFlPSJJbmZpbml0eSIscWU8MCYmKEFlPSItIitB''@;'; put 'put ''ZSkpOkFlPSJOYU4iOihBZT1udWxsPT1iZT9YZTw9Snx8bmU8PVhlP2VlKFkoVGUuYyksWGUpOnRlKFkoVGUuYyksWGUsIjAiKToxMD09PWJlP3RlKFkoKFRlPWx0KG5ldyBXZShUZSkscCtYZSsxLHcpKS5jKSxUZS5lLCIwIik6KFUoYmUsMixCZS5sZW5ndGgsIkJhc2UiKSx1ZSh0ZShZKFRl''@;'; put 'put ''LmMpLFhlLCIwIiksMTAsYmUscWUsITApKSxxZTwwJiZUZS5jWzBdJiYoQWU9Ii0iK0FlKSksQWV9LFMudmFsdWVPZj1TLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiBQZSh0aGlzKX0sUy5faXNCaWdOdW1iZXI9ITAsImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVv''@;'; put 'put ''ZiBTeW1ib2wuaXRlcmF0b3ImJihTW1N5bWJvbC50b1N0cmluZ1RhZ109IkJpZ051bWJlciIsU1tTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1TLnZhbHVlT2YpLG51bGwhPXNlJiZXZS5zZXQoc2UpLFdlfSgpKS5kZWZhdWx0PW0uQmlnTnVtYmVyPW0sdm9pZCAw''@;'; put 'put ''IT09RiYmRi5leHBvcnRzP0YuZXhwb3J0cz1tOih4fHwoeD10eXBlb2Ygc2VsZjwidSImJnNlbGY/c2VsZjp3aW5kb3cpLHguQmlnTnVtYmVyPW0pfSh0aGlzKX0se31dLDI6W2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJlbi1VUyIsZGVs''@;'; put 'put ''aW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sc3BhY2VTZXBhcmF0ZWQ6ITEsb3JkaW5hbDpmdW5jdGlvbih4KXt2YXIgbT14JTEwO3JldHVybiAxPT1+fih4''@;'; put 'put ''JTEwMC8xMCk/InRoIjoxPT09bT8ic3QiOjI9PT1tPyJuZCI6Mz09PW0/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJVU0QifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6''@;'; put 'put ''e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dLDM6W2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KEIsWSl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKFgpe2lmKEFycmF5LmlzQXJyYXkoWCkpcmV0dXJuIFh9KEIpfHxmdW5jdGlvbihYLFUpe3ZhciBxPVtdLGVlPSEwLHRlPSExLG9lPXZvaWQgMDt0cnl7Zm9yKHZhciBzZSxoZT1YW1N5bWJvbC5pdGVyYXRvcl0oKTshKGVlPShzZT1oZS5uZXh0KCkpLmRvbmUpJiYocS5w''@;'; put 'put ''dXNoKHNlLnZhbHVlKSwhVXx8cS5sZW5ndGghPT1VKTtlZT0hMCk7fWNhdGNoKHVlKXt0ZT0hMCxvZT11ZX1maW5hbGx5e3RyeXtlZXx8bnVsbD09aGUucmV0dXJufHxoZS5yZXR1cm4oKX1maW5hbGx5e2lmKHRlKXRocm93IG9lfX1yZXR1cm4gcX0oQixZKXx8ZnVuY3Rpb24oKXt0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIG09SWUoIi4vZ2xvYmFsU3RhdGUiKSxsZT1JZSgiLi92YWxpZGF0aW5nIiksTT1JZSgiLi9wYXJzaW5nIiksTz1bIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiIs''@;'; put 'put ''IlBCIiwiRUIiLCJaQiIsIllCIl0sUj17Z2VuZXJhbDp7c2NhbGU6MTAyNCxzdWZmaXhlczpPLG1hcmtlcjoiYmQifSxiaW5hcnk6e3NjYWxlOjEwMjQsc3VmZml4ZXM6WyJCIiwiS2lCIiwiTWlCIiwiR2lCIiwiVGlCIiwiUGlCIiwiRWlCIiwiWmlCIiwiWWlCIl0sbWFya2VyOiJiIn0sZGVj''@;'; put 'put ''aW1hbDp7c2NhbGU6MWUzLHN1ZmZpeGVzOk8sbWFya2VyOiJkIn19LHo9e3RvdGFsTGVuZ3RoOjAsY2hhcmFjdGVyaXN0aWM6MCxmb3JjZUF2ZXJhZ2U6ITEsYXZlcmFnZTohMSxtYW50aXNzYTotMSxvcHRpb25hbE1hbnRpc3NhOiEwLHRob3VzYW5kU2VwYXJhdGVkOiExLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiExLG5lZ2F0aXZlOiJzaWduIixmb3JjZVNpZ246ITF9O2Z1bmN0aW9uIEsoQil7dmFyIFk9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LFg9Mjxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBZJiYoWT1NLnBhcnNlRm9ybWF0KFkpKSwhbGUudmFsaWRhdGVGb3JtYXQoWSkpcmV0dXJuIkVSUk9SOiBpbnZhbGlkIGZvcm1hdCI7dmFyIFU9WS5wcmVmaXh8fCIiLHE9WS5wb3N0Zml4fHwiIixlZT1mdW5jdGlvbih0ZSxvZSxzZSl7c3dpdGNoKG9lLm91dHB1dCl7Y2Fz''@;'; put 'put ''ZSJjdXJyZW5jeSI6cmV0dXJuIGZ1bmN0aW9uKEJlLFdlLEtlKXt2YXIgWWU9S2UuY3VycmVudEN1cnJlbmN5KCksSmU9T2JqZWN0LmFzc2lnbih7fSx6LFdlKSxsdD12b2lkIDAsUGU9IiIsYmU9ISFKZS50b3RhbExlbmd0aHx8ISFKZS5mb3JjZUF2ZXJhZ2V8fEplLmF2ZXJhZ2UsQWU9V2Uu''@;'; put 'put ''Y3VycmVuY3lQb3NpdGlvbnx8WWUucG9zaXRpb24sVGU9V2UuY3VycmVuY3lTeW1ib2x8fFllLnN5bWJvbDtKZS5zcGFjZVNlcGFyYXRlZCYmKFBlPSIgIiksImluZml4Ij09PUFlJiYobHQ9UGUrVGUrUGUpO3ZhciBxZT1qKHtpbnN0YW5jZTpCZSxwcm92aWRlZEZvcm1hdDpXZSxzdGF0ZTpL''@;'; put 'put ''ZSxkZWNpbWFsU2VwYXJhdG9yOmx0fSk7cmV0dXJuInByZWZpeCI9PT1BZSYmKHFlPUJlLl92YWx1ZTwwJiYic2lnbiI9PT1KZS5uZWdhdGl2ZT8iLSIuY29uY2F0KFBlKS5jb25jYXQoVGUpLmNvbmNhdChxZS5zbGljZSgxKSk6VGUrUGUrcWUpLEFlJiYicG9zdGZpeCIhPT1BZXx8KHFlPXFl''@;'; put 'put ''KyhQZT1iZT8iIjpQZSkrVGUpLHFlfSh0ZSxvZT1WKG9lLG0uY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSxtKTtjYXNlInBlcmNlbnQiOnJldHVybiBvZT1WKG9lLG0uY3VycmVudFBlcmNlbnRhZ2VEZWZhdWx0Rm9ybWF0KCkpLEtlPW0sSmU9KFdlPW9lKS5wcmVmaXhTeW1ib2ws''@;'; put 'put ''bHQ9aih7aW5zdGFuY2U6c2UoMTAwKnRlLl92YWx1ZSkscHJvdmlkZWRGb3JtYXQ6V2Usc3RhdGU6S2V9KSxQZT1PYmplY3QuYXNzaWduKHt9LHosV2UpLEplPyIlIi5jb25jYXQoUGUuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIiKS5jb25jYXQobHQpOiIiLmNvbmNhdChsdCkuY29uY2F0KFBlLnNw''@;'; put 'put ''YWNlU2VwYXJhdGVkPyIgIjoiIiwiJSIpO2Nhc2UiYnl0ZSI6cmV0dXJuIG9lPVYob2UsbS5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQoKSksdz1tLEo9c2UsbmU9KHA9b2UpLmJhc2V8fCJiaW5hcnkiLExlPShmZT1JKHRlLl92YWx1ZSwoZGU9UltuZV0pLnN1ZmZpeGVzLGRlLnNjYWxlKSku''@;'; put 'put ''c3VmZml4LEZlPWooe2luc3RhbmNlOkooZmUudmFsdWUpLHByb3ZpZGVkRm9ybWF0OnAsc3RhdGU6dyxkZWZhdWx0czp3LmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdCgpfSksT2U9dy5jdXJyZW50QWJicmV2aWF0aW9ucygpLCIiLmNvbmNhdChGZSkuY29uY2F0KE9lLnNwYWNlZD8iICI6IiIp''@;'; put 'put ''LmNvbmNhdChMZSk7Y2FzZSJ0aW1lIjpyZXR1cm4gb2U9VihvZSxtLmN1cnJlbnRUaW1lRGVmYXVsdEZvcm1hdCgpKSxOPXRlLGc9TWF0aC5mbG9vcihOLl92YWx1ZS82MC82MCksQz1NYXRoLmZsb29yKChOLl92YWx1ZS02MCpnKjYwKS82MCksUz1NYXRoLnJvdW5kKE4uX3ZhbHVlLTYwKmcq''@;'; put 'put ''NjAtNjAqQyksIiIuY29uY2F0KGcsIjoiKS5jb25jYXQoQzwxMD8iMCI6IiIpLmNvbmNhdChDLCI6IikuY29uY2F0KFM8MTA/IjAiOiIiKS5jb25jYXQoUyk7Y2FzZSJvcmRpbmFsIjpyZXR1cm4gaGU9dGUsdWU9b2U9VihvZSxtLmN1cnJlbnRPcmRpbmFsRGVmYXVsdEZvcm1hdCgpKSxHPShj''@;'; put 'put ''ZT1tKS5jdXJyZW50T3JkaW5hbCgpLGI9T2JqZWN0LmFzc2lnbih7fSx6LHVlKSxEPWooe2luc3RhbmNlOmhlLHByb3ZpZGVkRm9ybWF0OnVlLHN0YXRlOmNlfSksSD1HKGhlLl92YWx1ZSksIiIuY29uY2F0KEQpLmNvbmNhdChiLnNwYWNlU2VwYXJhdGVkPyIgIjoiIikuY29uY2F0KEgpO2Rl''@;'; put 'put ''ZmF1bHQ6cmV0dXJuIGooe2luc3RhbmNlOnRlLHByb3ZpZGVkRm9ybWF0Om9lLG51bWJybzpzZX0pfXZhciBXZSxLZSxKZSxsdCxQZSxoZSx1ZSxjZSxHLGIsRCxILE4sZyxDLFMscCx3LEosbmUsZGUsZmUsTGUsRmUsT2V9KEIsWSxYKTtyZXR1cm4oZWU9VStlZSkrcX1mdW5jdGlvbiBJKEIs''@;'; put 'put ''WSxYKXt2YXIgVT1ZWzBdLHE9TWF0aC5hYnMoQik7aWYoWDw9cSl7Zm9yKHZhciBlZT0xO2VlPFkubGVuZ3RoOysrZWUpe3ZhciB0ZT1NYXRoLnBvdyhYLGVlKSxvZT1NYXRoLnBvdyhYLGVlKzEpO2lmKHRlPD1xJiZxPG9lKXtVPVlbZWVdLEIvPXRlO2JyZWFrfX1VPT09WVswXSYmKEIvPU1h''@;'; put 'put ''dGgucG93KFgsWS5sZW5ndGgtMSksVT1ZW1kubGVuZ3RoLTFdKX1yZXR1cm57dmFsdWU6QixzdWZmaXg6VX19ZnVuY3Rpb24gayhCKXtmb3IodmFyIFk9IiIsWD0wO1g8QjtYKyspWSs9IjAiO3JldHVybiBZfWZ1bmN0aW9uIGooQil7dmFyIFk9Qi5pbnN0YW5jZSxYPUIucHJvdmlkZWRGb3Jt''@;'; put 'put ''YXQsVT1CLnN0YXRlLHE9dm9pZCAwPT09VT9tOlUsZWU9Qi5kZWNpbWFsU2VwYXJhdG9yLHRlPUIuZGVmYXVsdHMsb2U9dm9pZCAwPT09dGU/cS5jdXJyZW50RGVmYXVsdHMoKTp0ZSxzZT1ZLl92YWx1ZTtpZigwPT09c2UmJnEuaGFzWmVyb0Zvcm1hdCgpKXJldHVybiBxLmdldFplcm9Gb3Jt''@;'; put 'put ''YXQoKTtpZighaXNGaW5pdGUoc2UpKXJldHVybiBzZS50b1N0cmluZygpO3ZhciBoZSx1ZSxjZSxHLGIsSCxOLGc9T2JqZWN0LmFzc2lnbih7fSx6LG9lLFgpLEM9Zy50b3RhbExlbmd0aCxTPUM/MDpnLmNoYXJhY3RlcmlzdGljLHY9Zy5vcHRpb25hbENoYXJhY3RlcmlzdGljLHA9Zy5mb3Jj''@;'; put 'put ''ZUF2ZXJhZ2Usdz0hIUN8fCEhcHx8Zy5hdmVyYWdlLEo9Qz8tMTp3JiZ2b2lkIDA9PT1YLm1hbnRpc3NhPzA6Zy5tYW50aXNzYSxuZT0hQyYmKHZvaWQgMD09PVgub3B0aW9uYWxNYW50aXNzYT8tMT09PUo6Zy5vcHRpb25hbE1hbnRpc3NhKSxkZT1nLnRyaW1NYW50aXNzYSxmZT1nLnRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkLHhlPWcuc3BhY2VTZXBhcmF0ZWQsTGU9Zy5uZWdhdGl2ZSxGZT1nLmZvcmNlU2lnbixPZT1nLmV4cG9uZW50aWFsLEJlPSIiO2lmKHcpe3ZhciBXZT1mdW5jdGlvbihiZSl7dmFyIEFlPWJlLnZhbHVlLFRlPWJlLmZvcmNlQXZlcmFnZSxxZT1iZS5hYmJyZXZpYXRpb25z''@;'; put 'put ''LFhlPWJlLnNwYWNlU2VwYXJhdGVkLFVlPXZvaWQgMCE9PVhlJiZYZSxodD1iZS50b3RhbExlbmd0aCxNZT12b2lkIDA9PT1odD8wOmh0LERlPSIiLHplPU1hdGguYWJzKEFlKSxpdD0tMTtpZih6ZT49TWF0aC5wb3coMTAsMTIpJiYhVGV8fCJ0cmlsbGlvbiI9PT1UZT8oRGU9cWUudHJpbGxp''@;'; put 'put ''b24sQWUvPU1hdGgucG93KDEwLDEyKSk6emU8TWF0aC5wb3coMTAsMTIpJiZ6ZT49TWF0aC5wb3coMTAsOSkmJiFUZXx8ImJpbGxpb24iPT09VGU/KERlPXFlLmJpbGxpb24sQWUvPU1hdGgucG93KDEwLDkpKTp6ZTxNYXRoLnBvdygxMCw5KSYmemU+PU1hdGgucG93KDEwLDYpJiYhVGV8fCJt''@;'; put 'put ''aWxsaW9uIj09PVRlPyhEZT1xZS5taWxsaW9uLEFlLz1NYXRoLnBvdygxMCw2KSk6KHplPE1hdGgucG93KDEwLDYpJiZ6ZT49TWF0aC5wb3coMTAsMykmJiFUZXx8InRob3VzYW5kIj09PVRlKSYmKERlPXFlLnRob3VzYW5kLEFlLz1NYXRoLnBvdygxMCwzKSksRGUmJihEZT0oVWU/IiAiOiIi''@;'; put 'put ''KStEZSksTWUpe3ZhciB1dD1BZS50b1N0cmluZygpLnNwbGl0KCIuIilbMF07aXQ9TWF0aC5tYXgoTWUtdXQubGVuZ3RoLDApfXJldHVybnt2YWx1ZTpBZSxhYmJyZXZpYXRpb246RGUsbWFudGlzc2FQcmVjaXNpb246aXR9fSh7dmFsdWU6c2UsZm9yY2VBdmVyYWdlOnAsYWJicmV2aWF0aW9u''@;'; put 'put ''czpxLmN1cnJlbnRBYmJyZXZpYXRpb25zKCksc3BhY2VTZXBhcmF0ZWQ6eGUsdG90YWxMZW5ndGg6Q30pO3NlPVdlLnZhbHVlLEJlKz1XZS5hYmJyZXZpYXRpb24sQyYmKEo9V2UubWFudGlzc2FQcmVjaXNpb24pfWlmKE9lKXt2YXIgS2U9KHVlPShoZT17dmFsdWU6c2UsY2hhcmFjdGVyaXN0''@;'; put 'put ''aWNQcmVjaXNpb246U30pLnZhbHVlLEc9dm9pZCAwPT09KGNlPWhlLmNoYXJhY3RlcmlzdGljUHJlY2lzaW9uKT8wOmNlLEg9KGI9eCh1ZS50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUiKSwyKSlbMV0sTj0rYlswXSxHJiYxPEcmJihOKj1NYXRoLnBvdygxMCxHLTEpLEg9MDw9KEg9K0gtKEct''@;'; put 'put ''MSkpPyIrIi5jb25jYXQoSCk6SCkse3ZhbHVlOk4sYWJicmV2aWF0aW9uOiJlIi5jb25jYXQoSCl9KTtzZT1LZS52YWx1ZSxCZT1LZS5hYmJyZXZpYXRpb24rQmV9dmFyIFllLEplLGx0LFBlPWZ1bmN0aW9uKGJlLEFlLFRlLHFlLFhlKXtpZigtMT09PXFlKXJldHVybiBiZTt2YXIgVWU9ZnVu''@;'; put 'put ''Y3Rpb24gRShCLFkpe3JldHVybi0xIT09Qi50b1N0cmluZygpLmluZGV4T2YoImUiKT9mdW5jdGlvbihYLFUpe3ZhciBxPVgudG9TdHJpbmcoKSxlZT14KHEuc3BsaXQoImUiKSwyKSxvZT1lZVsxXSxzZT14KGVlWzBdLnNwbGl0KCIuIiksMiksaGU9c2VbMF0sdWU9c2VbMV0sY2U9dm9pZCAw''@;'; put 'put ''PT09dWU/IiI6dWU7aWYoMDwrb2UpcT1oZStjZStrKG9lLWNlLmxlbmd0aCk7ZWxzZXt2YXIgRz0iLiI7Rz0raGU8MD8iLTAiLmNvbmNhdChHKToiMCIuY29uY2F0KEcpO3ZhciBiPShrKC1vZS0xKStNYXRoLmFicyhoZSkrY2UpLnN1YnN0cigwLFUpO2IubGVuZ3RoPFUmJihiKz1rKFUtYi5s''@;'; put 'put ''ZW5ndGgpKSxxPUcrYn1yZXR1cm4gMDwrb2UmJjA8VSYmKHErPSIuIi5jb25jYXQoayhVKSkpLHF9KEIsWSk6KE1hdGgucm91bmQoKyIiLmNvbmNhdChCLCJlKyIpLmNvbmNhdChZKSkvTWF0aC5wb3coMTAsWSkpLnRvRml4ZWQoWSl9KEFlLHFlKSxodD14KFVlLnRvU3RyaW5nKCkuc3BsaXQo''@;'; put 'put ''Ii4iKSwyKSxNZT1odFswXSxEZT1odFsxXSx6ZT12b2lkIDA9PT1EZT8iIjpEZTtpZih6ZS5tYXRjaCgvXjArJC8pJiYoVGV8fFhlKSlyZXR1cm4gTWU7dmFyIGl0PXplLm1hdGNoKC8wKyQvKTtyZXR1cm4gWGUmJml0PyIiLmNvbmNhdChNZSwiLiIpLmNvbmNhdCh6ZS50b1N0cmluZygpLnNs''@;'; put 'put ''aWNlKDAsaXQuaW5kZXgpKTpVZS50b1N0cmluZygpfShzZS50b1N0cmluZygpLHNlLG5lLEosZGUpO3JldHVybiBQZT1mdW5jdGlvbihiZSxBZSxUZSxxZSxYZSl7dmFyIFVlPXFlLmN1cnJlbnREZWxpbWl0ZXJzKCksaHQ9VWUudGhvdXNhbmRzO1hlPVhlfHxVZS5kZWNpbWFsO3ZhciBNZT1V''@;'; put 'put ''ZS50aG91c2FuZHNTaXplfHwzLERlPWJlLnRvU3RyaW5nKCksemU9RGUuc3BsaXQoIi4iKVswXSxpdD1EZS5zcGxpdCgiLiIpWzFdO3JldHVybiBUZSYmKEFlPDAmJih6ZT16ZS5zbGljZSgxKSksZnVuY3Rpb24odXQsTXQpe2Zvcih2YXIgSHQ9W10sUHQ9MCxvbj11dDswPG9uO29uLS0pUHQ9''@;'; put 'put ''PT1NdCYmKEh0LnVuc2hpZnQob24pLFB0PTApLFB0Kys7cmV0dXJuIEh0fSh6ZS5sZW5ndGgsTWUpLmZvckVhY2goZnVuY3Rpb24odXQsTXQpe3plPXplLnNsaWNlKDAsdXQrTXQpK2h0K3plLnNsaWNlKHV0K010KX0pLEFlPDAmJih6ZT0iLSIuY29uY2F0KHplKSkpLGl0P3plK1hlK2l0Onpl''@;'; put 'put ''fShQZT1mdW5jdGlvbihiZSxBZSxUZSxxZSl7dmFyIFhlPWJlLFVlPXgoWGUudG9TdHJpbmcoKS5zcGxpdCgiLiIpLDIpLGh0PVVlWzBdLE1lPVVlWzFdO2lmKGh0Lm1hdGNoKC9eLT8wJC8pJiZUZSlyZXR1cm4gTWU/IiIuY29uY2F0KGh0LnJlcGxhY2UoIjAiLCIiKSwiLiIpLmNvbmNhdChN''@;'; put 'put ''ZSk6aHQucmVwbGFjZSgiMCIsIiIpO2lmKGh0Lmxlbmd0aDxxZSlmb3IodmFyIERlPXFlLWh0Lmxlbmd0aCx6ZT0wO3plPERlO3plKyspWGU9IjAiLmNvbmNhdChYZSk7cmV0dXJuIFhlLnRvU3RyaW5nKCl9KFBlLDAsdixTKSxzZSxmZSxxLGVlKSwod3x8T2UpJiYoUGUrPUJlKSwoRmV8fHNl''@;'; put 'put ''PDApJiYoWWU9UGUsbHQ9TGUsUGU9MD09PShKZT1zZSk/WWU6MD09K1llP1llLnJlcGxhY2UoIi0iLCIiKTowPEplPyIrIi5jb25jYXQoWWUpOiJzaWduIj09PWx0P1llOiIoIi5jb25jYXQoWWUucmVwbGFjZSgiLSIsIiIpLCIpIikpLFBlfWZ1bmN0aW9uIFYoQixZKXtpZighQilyZXR1cm4g''@;'; put 'put ''WTt2YXIgWD1PYmplY3Qua2V5cyhCKTtyZXR1cm4gMT09PVgubGVuZ3RoJiYib3V0cHV0Ij09PVhbMF0/WTpCfUYuZXhwb3J0cz1mdW5jdGlvbihCKXtyZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsWD1uZXcgQXJyYXkoWSksVT0wO1U8WTtVKysp''@;'; put 'put ''WFtVXT1hcmd1bWVudHNbVV07cmV0dXJuIEsuYXBwbHkodm9pZCAwLFguY29uY2F0KFtCXSkpfSxnZXRCeXRlVW5pdDpmdW5jdGlvbigpe2Zvcih2YXIgWT1hcmd1bWVudHMubGVuZ3RoLFg9bmV3IEFycmF5KFkpLFU9MDtVPFk7VSsrKVhbVV09YXJndW1lbnRzW1VdO3JldHVybiBmdW5jdGlv''@;'; put 'put ''bihxKXt2YXIgZWU9Ui5nZW5lcmFsO3JldHVybiBJKHEuX3ZhbHVlLGVlLnN1ZmZpeGVzLGVlLnNjYWxlKS5zdWZmaXh9LmFwcGx5KHZvaWQgMCxYLmNvbmNhdChbQl0pKX0sZ2V0QmluYXJ5Qnl0ZVVuaXQ6ZnVuY3Rpb24oKXtmb3IodmFyIFk9YXJndW1lbnRzLmxlbmd0aCxYPW5ldyBBcnJh''@;'; put 'put ''eShZKSxVPTA7VTxZO1UrKylYW1VdPWFyZ3VtZW50c1tVXTtyZXR1cm4gZnVuY3Rpb24ocSl7dmFyIGVlPVIuYmluYXJ5O3JldHVybiBJKHEuX3ZhbHVlLGVlLnN1ZmZpeGVzLGVlLnNjYWxlKS5zdWZmaXh9LmFwcGx5KHZvaWQgMCxYLmNvbmNhdChbQl0pKX0sZ2V0RGVjaW1hbEJ5dGVVbml0''@;'; put 'put ''OmZ1bmN0aW9uKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsWD1uZXcgQXJyYXkoWSksVT0wO1U8WTtVKyspWFtVXT1hcmd1bWVudHNbVV07cmV0dXJuIGZ1bmN0aW9uKHEpe3ZhciBlZT1SLmRlY2ltYWw7cmV0dXJuIEkocS5fdmFsdWUsZWUuc3VmZml4ZXMsZWUuc2NhbGUpLnN1ZmZp''@;'; put 'put ''eH0uYXBwbHkodm9pZCAwLFguY29uY2F0KFtCXSkpfSxmb3JtYXRPckRlZmF1bHQ6Vn19fSx7Ii4vZ2xvYmFsU3RhdGUiOjQsIi4vcGFyc2luZyI6OCwiLi92YWxpZGF0aW5nIjoxMH1dLDQ6W2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD1JZSgiLi9lbi1VUyIpLG09SWUo''@;'; put 'put ''Ii4vdmFsaWRhdGluZyIpLGxlPUllKCIuL3BhcnNpbmciKSxNPXt9LE89dm9pZCAwLFI9e30sej1udWxsLEs9e307ZnVuY3Rpb24gSShFKXtPPUV9ZnVuY3Rpb24gaygpe3JldHVybiBSW09dfU0ubGFuZ3VhZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sUil9LE0uY3Vy''@;'; put 'put ''cmVudExhbmd1YWdlPWZ1bmN0aW9uKCl7cmV0dXJuIE99LE0uY3VycmVudEN1cnJlbmN5PWZ1bmN0aW9uKCl7cmV0dXJuIGsoKS5jdXJyZW5jeX0sTS5jdXJyZW50QWJicmV2aWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBrKCkuYWJicmV2aWF0aW9uc30sTS5jdXJyZW50RGVsaW1pdGVycz1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBrKCkuZGVsaW1pdGVyc30sTS5jdXJyZW50T3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBrKCkub3JkaW5hbH0sTS5jdXJyZW50RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxrKCkuZGVmYXVsdHMsSyl9LE0uY3VycmVudE9yZGlu''@;'; put 'put ''YWxEZWZhdWx0Rm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sTS5jdXJyZW50RGVmYXVsdHMoKSxrKCkub3JkaW5hbEZvcm1hdCl9LE0uY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sTS5jdXJyZW50RGVm''@;'; put 'put ''YXVsdHMoKSxrKCkuYnl0ZUZvcm1hdCl9LE0uY3VycmVudFBlcmNlbnRhZ2VEZWZhdWx0Rm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sTS5jdXJyZW50RGVmYXVsdHMoKSxrKCkucGVyY2VudGFnZUZvcm1hdCl9LE0uY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1h''@;'; put 'put ''dD1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LE0uY3VycmVudERlZmF1bHRzKCksaygpLmN1cnJlbmN5Rm9ybWF0KX0sTS5jdXJyZW50VGltZURlZmF1bHRGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxNLmN1cnJlbnREZWZhdWx0cygpLGsoKS50''@;'; put 'put ''aW1lRm9ybWF0KX0sTS5zZXREZWZhdWx0cz1mdW5jdGlvbihFKXtFPWxlLnBhcnNlRm9ybWF0KEUpLG0udmFsaWRhdGVGb3JtYXQoRSkmJihLPUUpfSxNLmdldFplcm9Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gen0sTS5zZXRaZXJvRm9ybWF0PWZ1bmN0aW9uKEUpe3JldHVybiB6PSJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgRT9FOm51bGx9LE0uaGFzWmVyb0Zvcm1hdD1mdW5jdGlvbigpe3JldHVybiBudWxsIT09en0sTS5sYW5ndWFnZURhdGE9ZnVuY3Rpb24oRSl7aWYoRSl7aWYoUltFXSlyZXR1cm4gUltFXTt0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdGFnICInLmNvbmNhdChFLCciJykp''@;'; put 'put ''fXJldHVybiBrKCl9LE0ucmVnaXN0ZXJMYW5ndWFnZT1mdW5jdGlvbihFKXt2YXIgaj0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKCFtLnZhbGlkYXRlTGFuZ3VhZ2UoRSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxhbmd1YWdl''@;'; put 'put ''IGRhdGEiKTtSW0UubGFuZ3VhZ2VUYWddPUUsaiYmSShFLmxhbmd1YWdlVGFnKX0sTS5zZXRMYW5ndWFnZT1mdW5jdGlvbihFKXt2YXIgaj0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eC5sYW5ndWFnZVRhZztpZighUltFXSl7dmFyIFY9''@;'; put 'put ''RS5zcGxpdCgiLSIpWzBdLEI9T2JqZWN0LmtleXMoUikuZmluZChmdW5jdGlvbihZKXtyZXR1cm4gWS5zcGxpdCgiLSIpWzBdPT09Vn0pO3JldHVybiBSW0JdP3ZvaWQgSShCKTp2b2lkIEkoail9SShFKX0sTS5yZWdpc3Rlckxhbmd1YWdlKHgpLE89eC5sYW5ndWFnZVRhZyxGLmV4cG9ydHM9''@;'; put 'put ''TX0seyIuL2VuLVVTIjoyLCIuL3BhcnNpbmciOjgsIi4vdmFsaWRhdGluZyI6MTB9XSw1OltmdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPWZ1bmN0aW9uKHgpe3JldHVybntsb2FkTGFuZ3VhZ2VzSW5Ob2RlOmZ1bmN0aW9uKG0pe3JldHVybiBsZT14LHZvaWQgbS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKE0pe3ZhciBPPXZvaWQgMDt0cnl7Tz1JZSgiLi4vbGFuZ3VhZ2VzLyIuY29uY2F0KE0pKX1jYXRjaHtjb25zb2xlLmVycm9yKCdVbmFibGUgdG8gbG9hZCAiJy5jb25jYXQoTSwnIi4gTm8gbWF0Y2hpbmcgbGFuZ3VhZ2UgZmlsZSBmb3VuZC4nKSl9TyYmbGUucmVn''@;'; put 'put ''aXN0ZXJMYW5ndWFnZShPKX0pO3ZhciBsZX19fX0se31dLDY6W2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD1JZSgiYmlnbnVtYmVyLmpzIik7ZnVuY3Rpb24gbShsZSxNLE8pe3ZhciBSPW5ldyB4KGxlLl92YWx1ZSksej1NO3JldHVybiBPLmlzTnVtYnJvKE0pJiYoej1N''@;'; put 'put ''Ll92YWx1ZSksej1uZXcgeCh6KSxsZS5fdmFsdWU9Ui5taW51cyh6KS50b051bWJlcigpLGxlfUYuZXhwb3J0cz1mdW5jdGlvbihsZSl7cmV0dXJue2FkZDpmdW5jdGlvbihNLE8pe3JldHVybiB6PU8sSz1sZSxJPW5ldyB4KChSPU0pLl92YWx1ZSksaz16LEsuaXNOdW1icm8oeikmJihrPXou''@;'; put 'put ''X3ZhbHVlKSxrPW5ldyB4KGspLFIuX3ZhbHVlPUkucGx1cyhrKS50b051bWJlcigpLFI7dmFyIFIseixLLEksa30sc3VidHJhY3Q6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gbShNLE8sbGUpfSxtdWx0aXBseTpmdW5jdGlvbihNLE8pe3JldHVybiB6PU8sSz1sZSxJPW5ldyB4KChSPU0pLl92YWx1''@;'; put 'put ''ZSksaz16LEsuaXNOdW1icm8oeikmJihrPXouX3ZhbHVlKSxrPW5ldyB4KGspLFIuX3ZhbHVlPUkudGltZXMoaykudG9OdW1iZXIoKSxSO3ZhciBSLHosSyxJLGt9LGRpdmlkZTpmdW5jdGlvbihNLE8pe3JldHVybiB6PU8sSz1sZSxJPW5ldyB4KChSPU0pLl92YWx1ZSksaz16LEsuaXNOdW1i''@;'; put 'put ''cm8oeikmJihrPXouX3ZhbHVlKSxrPW5ldyB4KGspLFIuX3ZhbHVlPUkuZGl2aWRlZEJ5KGspLnRvTnVtYmVyKCksUjt2YXIgUix6LEssSSxrfSxzZXQ6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gUj1NLEs9ej1PLGxlLmlzTnVtYnJvKHopJiYoSz16Ll92YWx1ZSksUi5fdmFsdWU9SyxSO3ZhciBS''@;'; put 'put ''LHosS30sZGlmZmVyZW5jZTpmdW5jdGlvbihNLE8pe3JldHVybiBSPU8sbShLPSh6PWxlKShNLl92YWx1ZSksUix6KSxNYXRoLmFicyhLLl92YWx1ZSk7dmFyIFIseixLfX19fSx7ImJpZ251bWJlci5qcyI6MX1dLDc6W2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4''@;'; put 'put ''KGosVil7Zm9yKHZhciBCPTA7QjxWLmxlbmd0aDtCKyspe3ZhciBZPVZbQl07WS5lbnVtZXJhYmxlPVkuZW51bWVyYWJsZXx8ITEsWS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFkmJihZLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaixZLmtleSxZKX19dmFyIG09SWUo''@;'; put 'put ''Ii4vZ2xvYmFsU3RhdGUiKSxsZT1JZSgiLi92YWxpZGF0aW5nIiksTT1JZSgiLi9sb2FkaW5nIikoRSksTz1JZSgiLi91bmZvcm1hdHRpbmciKSxSPUllKCIuL2Zvcm1hdHRpbmciKShFKSx6PUllKCIuL21hbmlwdWxhdGluZyIpKEUpLEs9SWUoIi4vcGFyc2luZyIpLEk9ZnVuY3Rpb24oKXtm''@;'; put 'put ''dW5jdGlvbiBqKFgpeyhmdW5jdGlvbihVLHEpe2lmKCEoVSBpbnN0YW5jZW9mIHEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxqKSx0aGlzLl92YWx1ZT1YfXZhciBWLEI7cmV0dXJuIFY9aiwoQj1be2tleToiY2xvbmUi''@;'; put 'put ''LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcy5fdmFsdWUpfX0se2tleToiZm9ybWF0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBSLmZvcm1hdCh0aGlzLDA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSl9fSx7a2V5OiJmb3Jt''@;'; put 'put ''YXRDdXJyZW5jeSIsdmFsdWU6ZnVuY3Rpb24oWCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBYJiYoWD1LLnBhcnNlRm9ybWF0KFgpKSwoWD1SLmZvcm1hdE9yRGVmYXVsdChYLG0uY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSkub3V0cHV0PSJjdXJyZW5jeSIsUi5mb3JtYXQodGhp''@;'; put 'put ''cyxYKX19LHtrZXk6ImZvcm1hdFRpbWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIFg9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybiBYLm91dHB1dD0idGltZSIsUi5mb3JtYXQodGhpcyxYKX19LHtrZXk6ImJpbmFyeUJ5dGVV''@;'; put 'put ''bml0cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUi5nZXRCaW5hcnlCeXRlVW5pdCh0aGlzKX19LHtrZXk6ImRlY2ltYWxCeXRlVW5pdHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFIuZ2V0RGVjaW1hbEJ5dGVVbml0KHRoaXMpfX0se2tleToiYnl0ZVVuaXRzIix2YWx1ZTpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBSLmdldEJ5dGVVbml0KHRoaXMpfX0se2tleToiZGlmZmVyZW5jZSIsdmFsdWU6ZnVuY3Rpb24oWCl7cmV0dXJuIHouZGlmZmVyZW5jZSh0aGlzLFgpfX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbihYKXtyZXR1cm4gei5hZGQodGhpcyxYKX19LHtrZXk6InN1YnRyYWN0''@;'; put 'put ''Iix2YWx1ZTpmdW5jdGlvbihYKXtyZXR1cm4gei5zdWJ0cmFjdCh0aGlzLFgpfX0se2tleToibXVsdGlwbHkiLHZhbHVlOmZ1bmN0aW9uKFgpe3JldHVybiB6Lm11bHRpcGx5KHRoaXMsWCl9fSx7a2V5OiJkaXZpZGUiLHZhbHVlOmZ1bmN0aW9uKFgpe3JldHVybiB6LmRpdmlkZSh0aGlzLFgp''@;'; put 'put ''fX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihYKXtyZXR1cm4gei5zZXQodGhpcyxrKFgpKX19LHtrZXk6InZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19LHtrZXk6InZhbHVlT2YiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1dKSYm''@;'; put 'put ''eChWLnByb3RvdHlwZSxCKSxqfSgpO2Z1bmN0aW9uIGsoail7dmFyIFY9ajtyZXR1cm4gRS5pc051bWJybyhqKT9WPWouX3ZhbHVlOiJzdHJpbmciPT10eXBlb2Ygaj9WPUUudW5mb3JtYXQoaik6aXNOYU4oaikmJihWPU5hTiksVn1mdW5jdGlvbiBFKGope3JldHVybiBuZXcgSShrKGopKX1F''@;'; put 'put ''LnZlcnNpb249IjIuMS4yIixFLmlzTnVtYnJvPWZ1bmN0aW9uKGope3JldHVybiBqIGluc3RhbmNlb2YgSX0sRS5sYW5ndWFnZT1tLmN1cnJlbnRMYW5ndWFnZSxFLnJlZ2lzdGVyTGFuZ3VhZ2U9bS5yZWdpc3Rlckxhbmd1YWdlLEUuc2V0TGFuZ3VhZ2U9bS5zZXRMYW5ndWFnZSxFLmxhbmd1''@;'; put 'put ''YWdlcz1tLmxhbmd1YWdlcyxFLmxhbmd1YWdlRGF0YT1tLmxhbmd1YWdlRGF0YSxFLnplcm9Gb3JtYXQ9bS5zZXRaZXJvRm9ybWF0LEUuZGVmYXVsdEZvcm1hdD1tLmN1cnJlbnREZWZhdWx0cyxFLnNldERlZmF1bHRzPW0uc2V0RGVmYXVsdHMsRS5kZWZhdWx0Q3VycmVuY3lGb3JtYXQ9bS5j''@;'; put 'put ''dXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0LEUudmFsaWRhdGU9bGUudmFsaWRhdGUsRS5sb2FkTGFuZ3VhZ2VzSW5Ob2RlPU0ubG9hZExhbmd1YWdlc0luTm9kZSxFLnVuZm9ybWF0PU8udW5mb3JtYXQsRi5leHBvcnRzPUV9LHsiLi9mb3JtYXR0aW5nIjozLCIuL2dsb2JhbFN0YXRlIjo0''@;'; put 'put ''LCIuL2xvYWRpbmciOjUsIi4vbWFuaXB1bGF0aW5nIjo2LCIuL3BhcnNpbmciOjgsIi4vdW5mb3JtYXR0aW5nIjo5LCIuL3ZhbGlkYXRpbmciOjEwfV0sODpbZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz17cGFyc2VGb3JtYXQ6ZnVuY3Rpb24oeCl7dmFyIG0sbGUs''@;'; put 'put ''TSxPLFIseixLLEksayxFLGosVixCLFksWCxVLHEsZWUsdGUsb2Usc2U9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVybiJzdHJpbmciIT10eXBlb2YgeD94OihsZT1zZSxSPXNlLGZ1bmN0aW9uKGhlLHVlKXtpZigtMT09PWhl''@;'; put 'put ''LmluZGV4T2YoIiQiKSl7aWYoLTE9PT1oZS5pbmRleE9mKCIlIikpcmV0dXJuLTEhPT1oZS5pbmRleE9mKCJiZCIpPyh1ZS5vdXRwdXQ9ImJ5dGUiLHVlLmJhc2U9ImdlbmVyYWwiKTotMSE9PWhlLmluZGV4T2YoImIiKT8odWUub3V0cHV0PSJieXRlIix1ZS5iYXNlPSJiaW5hcnkiKTotMSE9''@;'; put 'put ''PWhlLmluZGV4T2YoImQiKT8odWUub3V0cHV0PSJieXRlIix1ZS5iYXNlPSJkZWNpbWFsIik6LTE9PT1oZS5pbmRleE9mKCI6Iik/LTEhPT1oZS5pbmRleE9mKCJvIikmJih1ZS5vdXRwdXQ9Im9yZGluYWwiKTp1ZS5vdXRwdXQ9InRpbWUiO3VlLm91dHB1dD0icGVyY2VudCJ9ZWxzZSB1ZS5v''@;'; put 'put ''dXRwdXQ9ImN1cnJlbmN5In0oeD0oej0oTz14PShNPShtPXgpLm1hdGNoKC9eeyhbXn1dKil9LykpPyhsZS5wcmVmaXg9TVsxXSxtLnNsaWNlKE1bMF0ubGVuZ3RoKSk6bSkubWF0Y2goL3soW159XSopfSQvKSk/KFIucG9zdGZpeD16WzFdLE8uc2xpY2UoMCwtelswXS5sZW5ndGgpKTpPLHNl''@;'; put 'put ''KSxLPXNlLChJPXgubWF0Y2goL1sxLTldK1swLTldKi8pKSYmKEsudG90YWxMZW5ndGg9K0lbMF0pLGs9c2UsKEU9eC5zcGxpdCgiLiIpWzBdLm1hdGNoKC8wKy8pKSYmKGsuY2hhcmFjdGVyaXN0aWM9RVswXS5sZW5ndGgpLGZ1bmN0aW9uKGhlLHVlKXtpZigtMSE9PWhlLmluZGV4T2YoIi4i''@;'; put 'put ''KSl7dmFyIGNlPWhlLnNwbGl0KCIuIilbMF07dWUub3B0aW9uYWxDaGFyYWN0ZXJpc3RpYz0tMT09PWNlLmluZGV4T2YoIjAiKX19KHgsc2UpLGo9c2UsLTEhPT14LmluZGV4T2YoImEiKSYmKGouYXZlcmFnZT0hMCksQj1zZSwtMSE9PShWPXgpLmluZGV4T2YoIksiKT9CLmZvcmNlQXZlcmFn''@;'; put 'put ''ZT0idGhvdXNhbmQiOi0xIT09Vi5pbmRleE9mKCJNIik/Qi5mb3JjZUF2ZXJhZ2U9Im1pbGxpb24iOi0xIT09Vi5pbmRleE9mKCJCIik/Qi5mb3JjZUF2ZXJhZ2U9ImJpbGxpb24iOi0xIT09Vi5pbmRleE9mKCJUIikmJihCLmZvcmNlQXZlcmFnZT0idHJpbGxpb24iKSxmdW5jdGlvbihoZSx1''@;'; put 'put ''ZSl7dmFyIGNlPWhlLnNwbGl0KCIuIilbMV07aWYoY2Upe3ZhciBHPWNlLm1hdGNoKC8wKy8pO0cmJih1ZS5tYW50aXNzYT1HWzBdLmxlbmd0aCl9fSh4LHNlKSxYPXNlLChZPXgpLm1hdGNoKC9cW1wuXS8pP1gub3B0aW9uYWxNYW50aXNzYT0hMDpZLm1hdGNoKC9cLi8pJiYoWC5vcHRpb25h''@;'; put 'put ''bE1hbnRpc3NhPSExKSxVPXNlLC0xIT09eC5pbmRleE9mKCIsIikmJihVLnRob3VzYW5kU2VwYXJhdGVkPSEwKSxxPXNlLC0xIT09eC5pbmRleE9mKCIgIikmJihxLnNwYWNlU2VwYXJhdGVkPSEwKSx0ZT1zZSwoZWU9eCkubWF0Y2goL15cKz9cKFteKV0qXCkkLykmJih0ZS5uZWdhdGl2ZT0i''@;'; put 'put ''cGFyZW50aGVzaXMiKSxlZS5tYXRjaCgvXlwrPy0vKSYmKHRlLm5lZ2F0aXZlPSJzaWduIiksb2U9c2UseC5tYXRjaCgvXlwrLykmJihvZS5mb3JjZVNpZ249ITApLHNlKX19fSx7fV0sOTpbZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO3ZhciB4PVt7a2V5OiJaaUIiLGZhY3RvcjpN''@;'; put 'put ''YXRoLnBvdygxMDI0LDcpfSx7a2V5OiJaQiIsZmFjdG9yOk1hdGgucG93KDFlMyw3KX0se2tleToiWWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw4KX0se2tleToiWUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsOCl9LHtrZXk6IlRpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNCl9LHtrZXk6IlRC''@;'; put 'put ''IixmYWN0b3I6TWF0aC5wb3coMWUzLDQpfSx7a2V5OiJQaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDUpfSx7a2V5OiJQQiIsZmFjdG9yOk1hdGgucG93KDFlMyw1KX0se2tleToiTWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwyKX0se2tleToiTUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsMil9''@;'; put 'put ''LHtrZXk6IktpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMSl9LHtrZXk6IktCIixmYWN0b3I6TWF0aC5wb3coMWUzLDEpfSx7a2V5OiJHaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDMpfSx7a2V5OiJHQiIsZmFjdG9yOk1hdGgucG93KDFlMywzKX0se2tleToiRWlCIixmYWN0b3I6TWF0aC5w''@;'; put 'put ''b3coMTAyNCw2KX0se2tleToiRUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNil9LHtrZXk6IkIiLGZhY3RvcjoxfV07ZnVuY3Rpb24gbShNKXtyZXR1cm4gTS5yZXBsYWNlKC9bLS9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9Ri5leHBvcnRzPXt1bmZvcm1hdDpmdW5jdGlvbihNLE8pe3Zh''@;'; put 'put ''ciBSLEk9SWUoIi4vZ2xvYmFsU3RhdGUiKSxrPUkuY3VycmVudERlbGltaXRlcnMoKSxFPUkuY3VycmVudEN1cnJlbmN5KCkuc3ltYm9sLGo9SS5jdXJyZW50T3JkaW5hbCgpLFY9SS5nZXRaZXJvRm9ybWF0KCksQj1JLmN1cnJlbnRBYmJyZXZpYXRpb25zKCksWT12b2lkIDA7aWYoInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBNKVk9ZnVuY3Rpb24oWCxVKXtpZighWC5pbmRleE9mKCI6Iil8fCI6Ij09PVUudGhvdXNhbmRzKXJldHVybiExO3ZhciBxPVguc3BsaXQoIjoiKTtpZigzIT09cS5sZW5ndGgpcmV0dXJuITE7dmFyIHRlPStxWzFdLG9lPStxWzJdO3JldHVybiFpc05hTigrcVswXSkmJiFp''@;'; put 'put ''c05hTih0ZSkmJiFpc05hTihvZSl9KE0sayk/KyhSPU0uc3BsaXQoIjoiKSlbMl0rNjAqK1JbMV0rMzYwMCorUlswXTpmdW5jdGlvbiBsZShNLE8pe3ZhciBSPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIix6PTM8YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD9hcmd1bWVudHNbM106dm9pZCAwLEs9NDxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1s0XTp2b2lkIDAsST01PGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzVdOnZvaWQgMCxrPTY8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbNl06dm9pZCAwO2lmKCIiIT09TSlyZXR1cm4g''@;'; put 'put ''TT09PUs/MDpmdW5jdGlvbiBFKGosVil7dmFyIEI9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiLFk9Mzxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1szXTp2b2lkIDAsWD00PGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzRdOnZv''@;'; put 'put ''aWQgMCxVPTU8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbNV06dm9pZCAwLHE9Njxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1s2XTp2b2lkIDA7aWYoIWlzTmFOKCtqKSlyZXR1cm4rajt2YXIgZWU9IiIsdGU9ai5yZXBsYWNlKC8oXlteKF0qKVwoKC4qKVwpKFteKV0qJCkvLCIkMSQy''@;'; put 'put ''JDMiKTtpZih0ZSE9PWopcmV0dXJuLTEqRSh0ZSxWLEIsWSxYLFUscSk7Zm9yKHZhciBvZT0wO29lPHgubGVuZ3RoO29lKyspe3ZhciBzZT14W29lXTtpZigoZWU9ai5yZXBsYWNlKHNlLmtleSwiIikpIT09ailyZXR1cm4gRShlZSxWLEIsWSxYLFUscSkqc2UuZmFjdG9yfWlmKChlZT1qLnJl''@;'; put 'put ''cGxhY2UoIiUiLCIiKSkhPT1qKXJldHVybiBFKGVlLFYsQixZLFgsVSxxKS8xMDA7dmFyIGhlPXBhcnNlRmxvYXQoaik7aWYoIWlzTmFOKGhlKSl7dmFyIHVlPVkoaGUpO2lmKHVlJiYiLiIhPT11ZSYmKGVlPWoucmVwbGFjZShuZXcgUmVnRXhwKCIiLmNvbmNhdChtKHVlKSwiJCIpKSwiIikp''@;'; put 'put ''IT09ailyZXR1cm4gRShlZSxWLEIsWSxYLFUscSk7dmFyIGNlPXt9O09iamVjdC5rZXlzKFUpLmZvckVhY2goZnVuY3Rpb24oQyl7Y2VbVVtDXV09Q30pO2Zvcih2YXIgRz1PYmplY3Qua2V5cyhjZSkuc29ydCgpLnJldmVyc2UoKSxiPUcubGVuZ3RoLEQ9MDtEPGI7RCsrKXt2YXIgSD1HW0Rd''@;'; put 'put ''LE49Y2VbSF07aWYoKGVlPWoucmVwbGFjZShILCIiKSkhPT1qKXt2YXIgZz12b2lkIDA7c3dpdGNoKE4pe2Nhc2UidGhvdXNhbmQiOmc9TWF0aC5wb3coMTAsMyk7YnJlYWs7Y2FzZSJtaWxsaW9uIjpnPU1hdGgucG93KDEwLDYpO2JyZWFrO2Nhc2UiYmlsbGlvbiI6Zz1NYXRoLnBvdygxMCw5''@;'; put 'put ''KTticmVhaztjYXNlInRyaWxsaW9uIjpnPU1hdGgucG93KDEwLDEyKX1yZXR1cm4gRShlZSxWLEIsWSxYLFUscSkqZ319fX0oZnVuY3Rpb24oRSxqKXt2YXIgQj1FLnJlcGxhY2UoMjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiLCIiKTty''@;'; put 'put ''ZXR1cm4oQj1CLnJlcGxhY2UobmV3IFJlZ0V4cCgiKFswLTldKSIuY29uY2F0KG0oai50aG91c2FuZHMpLCIoWzAtOV0pIiksImciKSwiJDEkMiIpKS5yZXBsYWNlKGouZGVjaW1hbCwiLiIpfShNLE8sUiksTyxSLHosSyxJLGspfShNLGssRSxqLFYsQixPKTtlbHNle2lmKCJudW1iZXIiIT10''@;'; put 'put ''eXBlb2YgTSlyZXR1cm47WT1NfWlmKHZvaWQgMCE9PVkpcmV0dXJuIFl9fX0seyIuL2dsb2JhbFN0YXRlIjo0fV0sMTA6W2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGspe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKEUpe3JldHVybiB0eXBlb2YgRX06ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJkUuY29uc3RydWN0b3I9PT1TeW1ib2wmJkUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBFfSkoayl9''@;'; put 'put ''dmFyIGxlPUllKCIuL3VuZm9ybWF0dGluZyIpLE09L15bYS16XXsyLDN9KC1bYS16QS1aXXs0fSk/KC0oW0EtWl17Mn18WzAtOV17M30pKT8kLyxPPXtvdXRwdXQ6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJjdXJyZW5jeSIsInBlcmNlbnQiLCJieXRlIiwidGltZSIsIm9yZGluYWwi''@;'; put 'put ''LCJudW1iZXIiXX0sYmFzZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbImRlY2ltYWwiLCJiaW5hcnkiLCJnZW5lcmFsIl0scmVzdHJpY3Rpb246ZnVuY3Rpb24oayxFKXtyZXR1cm4iYnl0ZSI9PT1FLm91dHB1dH0sbWVzc2FnZToiYGJhc2VgIG11c3QgYmUgcHJvdmlkZWQgb25seSB3''@;'; put 'put ''aGVuIHRoZSBvdXRwdXQgaXMgYGJ5dGVgIixtYW5kYXRvcnk6ZnVuY3Rpb24oayl7cmV0dXJuImJ5dGUiPT09ay5vdXRwdXR9fSxjaGFyYWN0ZXJpc3RpYzp7dHlwZToibnVtYmVyIixyZXN0cmljdGlvbjpmdW5jdGlvbihrKXtyZXR1cm4gMDw9a30sbWVzc2FnZToidmFsdWUgbXVzdCBiZSBw''@;'; put 'put ''b3NpdGl2ZSJ9LHByZWZpeDoic3RyaW5nIixwb3N0Zml4OiJzdHJpbmciLGZvcmNlQXZlcmFnZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInRyaWxsaW9uIiwiYmlsbGlvbiIsIm1pbGxpb24iLCJ0aG91c2FuZCJdfSxhdmVyYWdlOiJib29sZWFuIixjdXJyZW5jeVBvc2l0aW9uOnt0''@;'; put 'put ''eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsicHJlZml4IiwiaW5maXgiLCJwb3N0Zml4Il19LGN1cnJlbmN5U3ltYm9sOiJzdHJpbmciLHRvdGFsTGVuZ3RoOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uczpbe3Jlc3RyaWN0aW9uOmZ1bmN0aW9uKGspe3JldHVybiAwPD1rfSxtZXNzYWdl''@;'; put 'put ''OiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0se3Jlc3RyaWN0aW9uOmZ1bmN0aW9uKGssRSl7cmV0dXJuIUUuZXhwb25lbnRpYWx9LG1lc3NhZ2U6ImB0b3RhbExlbmd0aGAgaXMgaW5jb21wYXRpYmxlIHdpdGggYGV4cG9uZW50aWFsYCJ9XX0sbWFudGlzc2E6e3R5cGU6Im51bWJlciIscmVz''@;'; put 'put ''dHJpY3Rpb246ZnVuY3Rpb24oayl7cmV0dXJuIDA8PWt9LG1lc3NhZ2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSxvcHRpb25hbE1hbnRpc3NhOiJib29sZWFuIix0cmltTWFudGlzc2E6ImJvb2xlYW4iLG9wdGlvbmFsQ2hhcmFjdGVyaXN0aWM6ImJvb2xlYW4iLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZDoiYm9vbGVhbiIsYWJicmV2aWF0aW9uczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmQ6InN0cmluZyIsbWlsbGlvbjoic3RyaW5nIixiaWxsaW9uOiJzdHJpbmciLHRyaWxsaW9uOiJzdHJpbmcifX0sbmVnYXRpdmU6e3R5cGU6''@;'; put 'put ''InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJzaWduIiwicGFyZW50aGVzaXMiXX0sZm9yY2VTaWduOiJib29sZWFuIixleHBvbmVudGlhbDp7dHlwZToiYm9vbGVhbiJ9LHByZWZpeFN5bWJvbDp7dHlwZToiYm9vbGVhbiIscmVzdHJpY3Rpb246ZnVuY3Rpb24oayxFKXtyZXR1cm4icGVyY2VudCI9''@;'; put 'put ''PT1FLm91dHB1dH0sbWVzc2FnZToiYHByZWZpeFN5bWJvbGAgY2FuIGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBwZXJjZW50YCJ9fSxSPXtsYW5ndWFnZVRhZzp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITAscmVzdHJpY3Rpb246ZnVuY3Rpb24oayl7cmV0dXJuIGsu''@;'; put 'put ''bWF0Y2goTSl9LG1lc3NhZ2U6InRoZSBsYW5ndWFnZSB0YWcgbXVzdCBmb2xsb3cgdGhlIEJDUCA0NyBzcGVjaWZpY2F0aW9uIChzZWUgaHR0cHM6Ly90b29scy5pZWZ0Lm9yZy9odG1sL2JjcDQ3KSJ9LGRlbGltaXRlcnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kczoic3Ry''@;'; put 'put ''aW5nIixkZWNpbWFsOiJzdHJpbmciLHRob3VzYW5kc1NpemU6Im51bWJlciJ9LG1hbmRhdG9yeTohMH0sYWJicmV2aWF0aW9uczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmQ6e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSxtaWxsaW9uOnt0eXBlOiJzdHJpbmciLG1hbmRh''@;'; put 'put ''dG9yeTohMH0sYmlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LHRyaWxsaW9uOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH19LG1hbmRhdG9yeTohMH0sc3BhY2VTZXBhcmF0ZWQ6ImJvb2xlYW4iLG9yZGluYWw6e3R5cGU6ImZ1bmN0aW9uIixtYW5kYXRvcnk6ITB9LGN1''@;'; put 'put ''cnJlbmN5Ont0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntzeW1ib2w6InN0cmluZyIscG9zaXRpb246InN0cmluZyIsY29kZToic3RyaW5nIn0sbWFuZGF0b3J5OiEwfSxkZWZhdWx0czoiZm9ybWF0IixvcmRpbmFsRm9ybWF0OiJmb3JtYXQiLGJ5dGVGb3JtYXQ6ImZvcm1hdCIscGVyY2VudGFn''@;'; put 'put ''ZUZvcm1hdDoiZm9ybWF0IixjdXJyZW5jeUZvcm1hdDoiZm9ybWF0Iix0aW1lRGVmYXVsdHM6ImZvcm1hdCIsZm9ybWF0czp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7Zm91ckRpZ2l0czp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3R5cGU6ImZv''@;'; put 'put ''cm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9fX19O2Z1bmN0aW9uIHooayl7cmV0dXJuISFsZS51bmZvcm1hdChr''@;'; put 'put ''KX1mdW5jdGlvbiBLKGssRSxqKXt2YXIgVj0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLEI9T2JqZWN0LmtleXMoaykubWFwKGZ1bmN0aW9uKFkpe2lmKCFFW1ldKXJldHVybiBjb25zb2xlLmVycm9yKCIiLmNvbmNhdChqLCIgSW52YWxp''@;'; put 'put ''ZCBrZXk6ICIpLmNvbmNhdChZKSksITE7dmFyIFg9a1tZXSxVPUVbWV07aWYoInN0cmluZyI9PXR5cGVvZiBVJiYoVT17dHlwZTpVfSksImZvcm1hdCI9PT1VLnR5cGUpe2lmKCFLKFgsTywiW1ZhbGlkYXRlICIuY29uY2F0KFksIl0iKSwhMCkpcmV0dXJuITF9ZWxzZSBpZihtKFgpIT09VS50''@;'; put 'put ''eXBlKXJldHVybiBjb25zb2xlLmVycm9yKCIiLmNvbmNhdChqLCIgIikuY29uY2F0KFksJyB0eXBlIG1pc21hdGNoZWQ6ICInKS5jb25jYXQoVS50eXBlLCciIGV4cGVjdGVkLCAiJykuY29uY2F0KG0oWCksJyIgcHJvdmlkZWQnKSksITE7aWYoVS5yZXN0cmljdGlvbnMmJlUucmVzdHJpY3Rp''@;'; put 'put ''b25zLmxlbmd0aClmb3IodmFyIHE9VS5yZXN0cmljdGlvbnMubGVuZ3RoLGVlPTA7ZWU8cTtlZSsrKXt2YXIgdGU9VS5yZXN0cmljdGlvbnNbZWVdLHNlPXRlLm1lc3NhZ2U7aWYoISgwLHRlLnJlc3RyaWN0aW9uKShYLGspKXJldHVybiBjb25zb2xlLmVycm9yKCIiLmNvbmNhdChqLCIgIiku''@;'; put 'put ''Y29uY2F0KFksIiBpbnZhbGlkIHZhbHVlOiAiKS5jb25jYXQoc2UpKSwhMX1yZXR1cm4gVS5yZXN0cmljdGlvbiYmIVUucmVzdHJpY3Rpb24oWCxrKT8oY29uc29sZS5lcnJvcigiIi5jb25jYXQoaiwiICIpLmNvbmNhdChZLCIgaW52YWxpZCB2YWx1ZTogIikuY29uY2F0KFUubWVzc2FnZSkp''@;'; put 'put ''LCExKTpVLnZhbGlkVmFsdWVzJiYtMT09PVUudmFsaWRWYWx1ZXMuaW5kZXhPZihYKT8oY29uc29sZS5lcnJvcigiIi5jb25jYXQoaiwiICIpLmNvbmNhdChZLCIgaW52YWxpZCB2YWx1ZTogbXVzdCBiZSBhbW9uZyAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoVS52YWxpZFZhbHVlcyksJywg''@;'; put 'put ''IicpLmNvbmNhdChYLCciIHByb3ZpZGVkJykpLCExKTohKFUuY2hpbGRyZW4mJiFLKFgsVS5jaGlsZHJlbiwiW1ZhbGlkYXRlICIuY29uY2F0KFksIl0iKSkpfSk7cmV0dXJuIFZ8fEIucHVzaC5hcHBseShCLGZ1bmN0aW9uIHgoayl7cmV0dXJuIGZ1bmN0aW9uKEUpe2lmKEFycmF5LmlzQXJy''@;'; put 'put ''YXkoRSkpe2Zvcih2YXIgaj0wLFY9bmV3IEFycmF5KEUubGVuZ3RoKTtqPEUubGVuZ3RoO2orKylWW2pdPUVbal07cmV0dXJuIFZ9fShrKXx8ZnVuY3Rpb24oRSl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChFKXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBl''@;'; put 'put ''LnRvU3RyaW5nLmNhbGwoRSkpcmV0dXJuIEFycmF5LmZyb20oRSl9KGspfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9KE9iamVjdC5rZXlzKEUpLm1hcChmdW5jdGlvbihZKXt2YXIg''@;'; put 'put ''WD1FW1ldO2lmKCJzdHJpbmciPT10eXBlb2YgWCYmKFg9e3R5cGU6WH0pLFgubWFuZGF0b3J5KXt2YXIgVT1YLm1hbmRhdG9yeTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVSYmKFU9VShrKSksVSYmdm9pZCAwPT09a1tZXSlyZXR1cm4gY29uc29sZS5lcnJvcigiIi5jb25jYXQoaiwnIE1pc3Np''@;'; put 'put ''bmcgbWFuZGF0b3J5IGtleSAiJykuY29uY2F0KFksJyInKSksITF9cmV0dXJuITB9KSkpLEIucmVkdWNlKGZ1bmN0aW9uKFksWCl7cmV0dXJuIFkmJlh9LCEwKX1mdW5jdGlvbiBJKGspe3JldHVybiBLKGssTywiW1ZhbGlkYXRlIGZvcm1hdF0iKX1GLmV4cG9ydHM9e3ZhbGlkYXRlOmZ1bmN0''@;'; put 'put ''aW9uKGssRSl7dmFyIGo9eihrKSxWPUkoRSk7cmV0dXJuIGomJlZ9LHZhbGlkYXRlRm9ybWF0OkksdmFsaWRhdGVJbnB1dDp6LHZhbGlkYXRlTGFuZ3VhZ2U6ZnVuY3Rpb24oayl7cmV0dXJuIEsoayxSLCJbVmFsaWRhdGUgbGFuZ3VhZ2VdIil9fX0seyIuL3VuZm9ybWF0dGluZyI6OX1dfSx7''@;'; put 'put ''fSxbN10pKDcpfSw4MTMyMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjc0MTQpO0llLmNlcnRpZmljYXRlPUYoOTcyOTApO3ZhciB4PWFlLmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgp''@;'; put 'put ''LHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIp''@;'; put 'put ''LmludCgpLHRoaXMua2V5KCJleHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtJZS5SU0FQcml2YXRlS2V5PXg7dmFyIG09YWUuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm1vZHVsdXMiKS5p''@;'; put 'put ''bnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtJZS5SU0FQdWJsaWNLZXk9bTt2YXIgbGU9YWUuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKE0pLHRoaXMua2V5KCJz''@;'; put 'put ''dWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSk7SWUuUHVibGljS2V5PWxlO3ZhciBNPWFlLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCku''@;'; put 'put ''b3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSxPPWFlLmRlZmluZSgi''@;'; put 'put ''UHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKE0pLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO0llLlByaXZhdGVLZXk9Tzt2YXIgUj1hZS5k''@;'; put 'put ''ZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlzLmtleSgia2RlIikuc2VxKCku''@;'; put 'put ''b2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgic2FsdCIpLm9jdHN0cigpLHRoaXMua2V5KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnbyIpLm9iamlkKCks''@;'; put 'put ''dGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7SWUuRW5jcnlwdGVkUHJpdmF0ZUtleT1SO3ZhciB6PWFlLmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVy''@;'; put 'put ''c2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7SWUuRFNBUHJpdmF0ZUtleT16LEllLkRTQXBhcmFtPWFlLmRl''@;'; put 'put ''ZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBLPWFlLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtleSgi''@;'; put 'put ''cGFyYW1ldGVycyIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKEkpLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO0llLkVDUHJpdmF0ZUtleT1LO3ZhciBJPWFlLmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMu''@;'; put 'put ''Y2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSk7SWUuc2lnbmF0dXJlPWFlLmRlZmluZSgic2lnbmF0dXJlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9KX0sOTcyOTA6KGF0LEllLEYpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBhZT1GKDI3NDE0KSx4PWFlLmRlZmluZSgiVGltZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksbT1hZS5kZWZpbmUoIkF0dHJpYnV0ZVR5cGVWYWx1ZSIsZnVuY3Rpb24oKXt0''@;'; put 'put ''aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidHlwZSIpLm9iamlkKCksdGhpcy5rZXkoInZhbHVlIikuYW55KCkpfSksbGU9YWUuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5''@;'; put 'put ''KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCkpfSksTT1hZS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UobGUpLHRoaXMua2V5''@;'; put 'put ''KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSksTz1hZS5kZWZpbmUoIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihtKX0pLFI9YWUuZGVmaW5lKCJSRE5TZXF1ZW5jZSIsZnVuY3Rpb24oKXt0aGlzLnNlcW9mKE8pfSksej1hZS5kZWZpbmUo''@;'; put 'put ''Ik5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMudXNlKFIpfSl9KSxLPWFlLmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZSh4KSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UoeCkp''@;'; put 'put ''fSksST1hZS5kZWZpbmUoIkV4dGVuc2lvbiIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiZXh0bklEIikub2JqaWQoKSx0aGlzLmtleSgiY3JpdGljYWwiKS5ib29sKCkuZGVmKCExKSx0aGlzLmtleSgiZXh0blZhbHVlIikub2N0c3RyKCkpfSksaz1hZS5kZWZpbmUoIlRC''@;'; put 'put ''U0NlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIikuaW50KCksdGhpcy5rZXkoInNpZ25hdHVyZSIpLnVzZShsZSksdGhpcy5rZXkoImlzc3Vl''@;'; put 'put ''ciIpLnVzZSh6KSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoSyksdGhpcy5rZXkoInN1YmplY3QiKS51c2UoeiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKE0pLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCks''@;'; put 'put ''dGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihJKS5vcHRpb25hbCgpKX0pLEU9YWUuZGVmaW5lKCJYNTA5Q2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5z''@;'; put 'put ''ZXEoKS5vYmoodGhpcy5rZXkoInRic0NlcnRpZmljYXRlIikudXNlKGspLHRoaXMua2V5KCJzaWduYXR1cmVBbGdvcml0aG0iKS51c2UobGUpLHRoaXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigpKX0pO2F0LmV4cG9ydHM9RX0sMTc1MjA6KGF0LEllLEYpPT57dmFyIGFlPS9Qcm9j''@;'; put 'put ''LVR5cGU6IDQsRU5DUllQVEVEW1xuXHJdK0RFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylbXG5ccl0rKFswLTlBLXpcblxyKy89XSspW1xuXHJdKy9tLHg9L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLS9tLG09''@;'; put 'put ''L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLShbMC05QS16XG5ccisvPV0rKS0tLS0tRU5EIFwxLS0tLS0kL20sbGU9RigzNjUwNSksTT1GKDgyNDg5KSxPPUYoODQzKS5CdWZmZXI7YXQuZXhwb3J0cz1mdW5jdGlvbihSLHope3ZhciBrLEs9Ui50b1N0cmluZygp''@;'; put 'put ''LEk9Sy5tYXRjaChhZSk7aWYoSSl7dmFyIGo9ImFlcyIrSVsxXSxWPU8uZnJvbShJWzJdLCJoZXgiKSxCPU8uZnJvbShJWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0IiksWT1sZSh6LFYuc2xpY2UoMCw4KSxwYXJzZUludChJWzFdLDEwKSkua2V5LFg9W10sVT1NLmNyZWF0ZURl''@;'; put 'put ''Y2lwaGVyaXYoaixZLFYpO1gucHVzaChVLnVwZGF0ZShCKSksWC5wdXNoKFUuZmluYWwoKSksaz1PLmNvbmNhdChYKX1lbHNle3ZhciBFPUsubWF0Y2gobSk7az1PLmZyb20oRVsyXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpfXJldHVybnt0YWc6Sy5tYXRjaCh4KVsxXSxkYXRh''@;'; put 'put ''Omt9fX0sODc5ODM6KGF0LEllLEYpPT57dmFyIGFlPUYoODEzMjIpLHg9RigyMjU2MiksbT1GKDE3NTIwKSxsZT1GKDgyNDg5KSxNPUYoNTcxMDApLE89Rig4NDMpLkJ1ZmZlcjtmdW5jdGlvbiBSKEspe3ZhciBJOyJvYmplY3QiPT10eXBlb2YgSyYmIU8uaXNCdWZmZXIoSykmJihJPUsucGFz''@;'; put 'put ''c3BocmFzZSxLPUsua2V5KSwic3RyaW5nIj09dHlwZW9mIEsmJihLPU8uZnJvbShLKSk7dmFyIFYsQixrPW0oSyxJKSxFPWsudGFnLGo9ay5kYXRhO3N3aXRjaChFKXtjYXNlIkNFUlRJRklDQVRFIjpCPWFlLmNlcnRpZmljYXRlLmRlY29kZShqLCJkZXIiKS50YnNDZXJ0aWZpY2F0ZS5zdWJq''@;'; put 'put ''ZWN0UHVibGljS2V5SW5mbztjYXNlIlBVQkxJQyBLRVkiOnN3aXRjaChCfHwoQj1hZS5QdWJsaWNLZXkuZGVjb2RlKGosImRlciIpKSxWPUIuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBhZS5SU0FQdWJsaWNLZXkuZGVj''@;'; put 'put ''b2RlKEIuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gQi5zdWJqZWN0UHJpdmF0ZUtleT1CLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOkJ9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBCLmFsZ29yaXRo''@;'; put 'put ''bS5wYXJhbXMucHViX2tleT1hZS5EU0FwYXJhbS5kZWNvZGUoQi5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpLHt0eXBlOiJkc2EiLGRhdGE6Qi5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitWKX1jYXNlIkVOQ1JZUFRFRCBQ''@;'; put 'put ''UklWQVRFIEtFWSI6aj1mdW5jdGlvbiB6KEssSSl7dmFyIGs9Sy5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsRT1wYXJzZUludChLLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksaj14W0suYWxnb3JpdGhtLmRlY3J5cHQu''@;'; put 'put ''Y2lwaGVyLmFsZ28uam9pbigiLiIpXSxWPUsuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LEI9Sy5zdWJqZWN0UHJpdmF0ZUtleSxZPXBhcnNlSW50KGouc3BsaXQoIi0iKVsxXSwxMCkvOCxYPU0ucGJrZGYyU3luYyhJLGssRSxZLCJzaGExIiksVT1sZS5jcmVhdGVEZWNpcGhlcml2KGos''@;'; put 'put ''WCxWKSxxPVtdO3JldHVybiBxLnB1c2goVS51cGRhdGUoQikpLHEucHVzaChVLmZpbmFsKCkpLE8uY29uY2F0KHEpfShqPWFlLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKGosImRlciIpLEkpO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChWPShCPWFlLlByaXZhdGVLZXkuZGVjb2RlKGos''@;'; put 'put ''ImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIGFlLlJTQVByaXZhdGVLZXkuZGVjb2RlKEIuc3ViamVjdFByaXZhdGVLZXksImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybntjdXJ2ZTpCLmFs''@;'; put 'put ''Z29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5OmFlLkVDUHJpdmF0ZUtleS5kZWNvZGUoQi5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIEIuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1hZS5EU0FwYXJhbS5kZWNvZGUo''@;'; put 'put ''Qi5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOkIuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVil9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIGFlLlJTQVB1YmxpY0tleS5kZWNvZGUoaiwi''@;'; put 'put ''ZGVyIik7Y2FzZSJSU0EgUFJJVkFURSBLRVkiOnJldHVybiBhZS5SU0FQcml2YXRlS2V5LmRlY29kZShqLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOmFlLkRTQVByaXZhdGVLZXkuZGVjb2RlKGosImRlciIpfTtjYXNlIkVDIFBSSVZBVEUg''@;'; put 'put ''S0VZIjpyZXR1cm57Y3VydmU6KGo9YWUuRUNQcml2YXRlS2V5LmRlY29kZShqLCJkZXIiKSkucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OmoucHJpdmF0ZUtleX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IHR5cGUgIitFKX19YXQuZXhwb3J0cz1SLFIuc2lnbmF0''@;'; put 'put ''dXJlPWFlLnNpZ25hdHVyZX0sNTcxMDA6KGF0LEllLEYpPT57SWUucGJrZGYyPUYoMjg3ODEpLEllLnBia2RmMlN5bmM9Rig2ODA0Nyl9LDI4NzgxOihhdCxJZSxGKT0+e3ZhciBPLGssYWU9Rig4NDMpLkJ1ZmZlcix4PUYoNDg4MSksbT1GKDc1OTgwKSxsZT1GKDY4MDQ3KSxNPUYoNjczMDYp''@;'; put 'put ''LFI9Z2xvYmFsLmNyeXB0byYmZ2xvYmFsLmNyeXB0by5zdWJ0bGUsej17c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQiLCJzaGEtNTEy''@;'; put 'put ''IjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEyIn0sSz1bXTtmdW5jdGlvbiBFKCl7cmV0dXJuIGt8fChrPWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5uZXh0VGljaz9nbG9iYWwucHJvY2Vzcy5uZXh0VGljazpnbG9iYWwucXVldWVNaWNyb3Rhc2s/Z2xvYmFsLnF1ZXVlTWljcm90''@;'; put 'put ''YXNrOmdsb2JhbC5zZXRJbW1lZGlhdGU/Z2xvYmFsLnNldEltbWVkaWF0ZTpnbG9iYWwuc2V0VGltZW91dCl9ZnVuY3Rpb24gaihCLFksWCxVLHEpe3JldHVybiBSLmltcG9ydEtleSgicmF3IixCLHtuYW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbihlZSl7''@;'; put 'put ''cmV0dXJuIFIuZGVyaXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OlksaXRlcmF0aW9uczpYLGhhc2g6e25hbWU6cX19LGVlLFU8PDMpfSkudGhlbihmdW5jdGlvbihlZSl7cmV0dXJuIGFlLmZyb20oZWUpfSl9YXQuZXhwb3J0cz1mdW5jdGlvbihCLFksWCxVLHEsZWUpeyJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBxJiYoZWU9cSxxPXZvaWQgMCk7dmFyIHRlPXpbKHE9cXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZih0ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGdsb2JhbC5Qcm9taXNlKXtpZih4KFgsVSksQj1NKEIsbSwiUGFzc3dvcmQiKSxZPU0oWSxtLCJTYWx0IiksImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mIGVlKXRocm93IG5ldyBFcnJvcigiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyIik7IWZ1bmN0aW9uIFYoQixZKXtCLnRoZW4oZnVuY3Rpb24oWCl7RSgpKGZ1bmN0aW9uKCl7WShudWxsLFgpfSl9LGZ1bmN0aW9uKFgpe0UoKShmdW5jdGlvbigpe1koWCl9KX0pfShmdW5j''@;'; put 'put ''dGlvbiBJKEIpe2lmKGdsb2JhbC5wcm9jZXNzJiYhZ2xvYmFsLnByb2Nlc3MuYnJvd3Nlcnx8IVJ8fCFSLmltcG9ydEtleXx8IVIuZGVyaXZlQml0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtpZih2b2lkIDAhPT1LW0JdKXJldHVybiBLW0JdO3ZhciBZPWooTz1PfHxhZS5hbGxvYyg4''@;'; put 'put ''KSxPLDEwLDEyOCxCKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJuIEtbQl09WSxZfSh0ZSkudGhlbihmdW5jdGlvbihvZSl7cmV0dXJuIG9lP2ooQixZLFgsVSx0ZSk6bGUoQixZLFgsVSxxKX0pLGVlKX1lbHNlIEUoKShmdW5j''@;'; put 'put ''dGlvbigpe3ZhciBvZTt0cnl7b2U9bGUoQixZLFgsVSxxKX1jYXRjaChzZSl7cmV0dXJuIGVlKHNlKX1lZShudWxsLG9lKX0pfX0sNzU5ODA6YXQ9Pnt2YXIgSWU7SWU9Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLmJyb3dzZXI/InV0Zi04IjpnbG9iYWwucHJvY2VzcyYmZ2xvYmFs''@;'; put 'put ''LnByb2Nlc3MudmVyc2lvbj9wYXJzZUludChwcm9jZXNzLnZlcnNpb24uc3BsaXQoIi4iKVswXS5zbGljZSgxKSwxMCk+PTY/InV0Zi04IjoiYmluYXJ5IjoidXRmLTgiLGF0LmV4cG9ydHM9SWV9LDQ4ODE6YXQ9Pnt2YXIgSWU9TWF0aC5wb3coMiwzMCktMTthdC5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KEYsYWUpe2lmKCJudW1iZXIiIT10eXBlb2YgRil0aHJvdyBuZXcgVHlwZUVycm9yKCJJdGVyYXRpb25zIG5vdCBhIG51bWJlciIpO2lmKEY8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQgaXRlcmF0aW9ucyIpO2lmKCJudW1iZXIiIT10eXBlb2YgYWUpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''S2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZihhZTwwfHxhZT5JZXx8YWUhPWFlKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBrZXkgbGVuZ3RoIil9fSw2ODA0NzooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NzU4OCkseD1GKDM5NzA2KSxtPUYoOTc5NjUpLGxlPUYoODQzKS5CdWZmZXIsTT1G''@;'; put 'put ''KDQ4ODEpLE89Rig3NTk4MCksUj1GKDY3MzA2KSx6PWxlLmFsbG9jKDEyOCksSz17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJtZDE2MDoyMCxyaXBlbWQxNjA6MjB9O2Z1bmN0aW9uIEkoaixWLEIpe3ZhciBZPWZ1bmN0aW9uIGsoail7''@;'; put 'put ''cmV0dXJuInJtZDE2MCI9PT1qfHwicmlwZW1kMTYwIj09PWo/ZnVuY3Rpb24gQihZKXtyZXR1cm4obmV3IHgpLnVwZGF0ZShZKS5kaWdlc3QoKX06Im1kNSI9PT1qP2FlOmZ1bmN0aW9uIFYoWSl7cmV0dXJuIG0oaikudXBkYXRlKFkpLmRpZ2VzdCgpfX0oaiksWD0ic2hhNTEyIj09PWp8fCJz''@;'; put 'put ''aGEzODQiPT09aj8xMjg6NjQ7Vi5sZW5ndGg+WD9WPVkoVik6Vi5sZW5ndGg8WCYmKFY9bGUuY29uY2F0KFtWLHpdLFgpKTtmb3IodmFyIFU9bGUuYWxsb2NVbnNhZmUoWCtLW2pdKSxxPWxlLmFsbG9jVW5zYWZlKFgrS1tqXSksZWU9MDtlZTxYO2VlKyspVVtlZV09NTReVltlZV0scVtlZV09''@;'; put 'put ''OTJeVltlZV07dmFyIHRlPWxlLmFsbG9jVW5zYWZlKFgrQis0KTtVLmNvcHkodGUsMCwwLFgpLHRoaXMuaXBhZDE9dGUsdGhpcy5pcGFkMj1VLHRoaXMub3BhZD1xLHRoaXMuYWxnPWosdGhpcy5ibG9ja3NpemU9WCx0aGlzLmhhc2g9WSx0aGlzLnNpemU9S1tqXX1JLnByb3RvdHlwZS5ydW49''@;'; put 'put ''ZnVuY3Rpb24oaixWKXtyZXR1cm4gai5jb3B5KFYsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaChWKS5jb3B5KHRoaXMub3BhZCx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHRoaXMub3BhZCl9LGF0LmV4cG9ydHM9ZnVuY3Rpb24gRShqLFYsQixZLFgpe00oQixZKTt2YXIgVT1uZXcgSShY''@;'; put 'put ''PVh8fCJzaGExIixqPVIoaixPLCJQYXNzd29yZCIpLChWPVIoVixPLCJTYWx0IikpLmxlbmd0aCkscT1sZS5hbGxvY1Vuc2FmZShZKSxlZT1sZS5hbGxvY1Vuc2FmZShWLmxlbmd0aCs0KTtWLmNvcHkoZWUsMCwwLFYubGVuZ3RoKTtmb3IodmFyIHRlPTAsb2U9S1tYXSxzZT1NYXRoLmNlaWwo''@;'; put 'put ''WS9vZSksaGU9MTtoZTw9c2U7aGUrKyl7ZWUud3JpdGVVSW50MzJCRShoZSxWLmxlbmd0aCk7Zm9yKHZhciB1ZT1VLnJ1bihlZSxVLmlwYWQxKSxjZT11ZSxHPTE7RzxCO0crKyl7Y2U9VS5ydW4oY2UsVS5pcGFkMik7Zm9yKHZhciBiPTA7YjxvZTtiKyspdWVbYl1ePWNlW2JdfXVlLmNvcHko''@;'; put 'put ''cSx0ZSksdGUrPW9lfXJldHVybiBxfX0sNjczMDY6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXI7YXQuZXhwb3J0cz1mdW5jdGlvbih4LG0sbGUpe2lmKGFlLmlzQnVmZmVyKHgpKXJldHVybiB4O2lmKCJzdHJpbmciPT10eXBlb2YgeClyZXR1cm4gYWUuZnJvbSh4LG0pO2lmKEFy''@;'; put 'put ''cmF5QnVmZmVyLmlzVmlldyh4KSlyZXR1cm4gYWUuZnJvbSh4LmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihsZSsiIG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIHR5cGVkIGFycmF5IG9yIGEgRGF0YVZpZXciKX19LDE3NDgwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihh''@;'; put 'put ''ZSx4KXsidXNlIHN0cmljdCI7dmFyIG07dHJ5e209RigxNjY3Nil9Y2F0Y2h7fWF0LmV4cG9ydHM9ZnVuY3Rpb24oYWUpe3ZhciB4PSJmdW5jdGlvbiI9PXR5cGVvZiBhZSxtPSEhd2luZG93LmFkZEV2ZW50TGlzdGVuZXIsbGU9d2luZG93LmRvY3VtZW50LE09d2luZG93LnNldFRpbWVvdXQs''@;'; put 'put ''Tz1mdW5jdGlvbihDLFMsdixwKXttP0MuYWRkRXZlbnRMaXN0ZW5lcihTLHYsISFwKTpDLmF0dGFjaEV2ZW50KCJvbiIrUyx2KX0sUj1mdW5jdGlvbihDLFMsdixwKXttP0MucmVtb3ZlRXZlbnRMaXN0ZW5lcihTLHYsISFwKTpDLmRldGFjaEV2ZW50KCJvbiIrUyx2KX0sSz1mdW5jdGlvbihD''@;'; put 'put ''LFMpe3JldHVybi0xIT09KCIgIitDLmNsYXNzTmFtZSsiICIpLmluZGV4T2YoIiAiK1MrIiAiKX0sST1mdW5jdGlvbihDLFMpe0soQyxTKXx8KEMuY2xhc3NOYW1lPSIiPT09Qy5jbGFzc05hbWU/UzpDLmNsYXNzTmFtZSsiICIrUyl9LGs9ZnVuY3Rpb24oQyxTKXtDLmNsYXNzTmFtZT1mdW5j''@;'; put 'put ''dGlvbihDKXtyZXR1cm4gQy50cmltP0MudHJpbSgpOkMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSgoIiAiK0MuY2xhc3NOYW1lKyIgIikucmVwbGFjZSgiICIrUysiICIsIiAiKSl9LEU9ZnVuY3Rpb24oQyl7cmV0dXJuL0FycmF5Ly50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu''@;'; put 'put ''Y2FsbChDKSl9LGo9ZnVuY3Rpb24oQyl7cmV0dXJuL0RhdGUvLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEMpKSYmIWlzTmFOKEMuZ2V0VGltZSgpKX0sVj1mdW5jdGlvbihDKXt2YXIgUz1DLmdldERheSgpO3JldHVybiAwPT09U3x8Nj09PVN9LEI9ZnVuY3Rpb24oQyl7''@;'; put 'put ''cmV0dXJuIEMlND09MCYmQyUxMDAhPTB8fEMlNDAwPT0wfSxZPWZ1bmN0aW9uKEMsUyl7cmV0dXJuWzMxLEIoQyk/Mjk6MjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdW1NdfSxYPWZ1bmN0aW9uKEMpe2ooQykmJkMuc2V0SG91cnMoMCwwLDAsMCl9LFU9ZnVuY3Rpb24oQyxTKXty''@;'; put 'put ''ZXR1cm4gQy5nZXRUaW1lKCk9PT1TLmdldFRpbWUoKX0scT1mdW5jdGlvbihDLFMsdil7dmFyIHAsdztmb3IocCBpbiBTKSh3PXZvaWQgMCE9PUNbcF0pJiYib2JqZWN0Ij09dHlwZW9mIFNbcF0mJm51bGwhPT1TW3BdJiZ2b2lkIDA9PT1TW3BdLm5vZGVOYW1lP2ooU1twXSk/diYmKENbcF09''@;'; put 'put ''bmV3IERhdGUoU1twXS5nZXRUaW1lKCkpKTpFKFNbcF0pP3YmJihDW3BdPVNbcF0uc2xpY2UoMCkpOkNbcF09cSh7fSxTW3BdLHYpOih2fHwhdykmJihDW3BdPVNbcF0pO3JldHVybiBDfSxlZT1mdW5jdGlvbihDLFMsdil7dmFyIHA7bGUuY3JlYXRlRXZlbnQ/KChwPWxlLmNyZWF0ZUV2ZW50''@;'; put 'put ''KCJIVE1MRXZlbnRzIikpLmluaXRFdmVudChTLCEwLCExKSxwPXEocCx2KSxDLmRpc3BhdGNoRXZlbnQocCkpOmxlLmNyZWF0ZUV2ZW50T2JqZWN0JiYocD1sZS5jcmVhdGVFdmVudE9iamVjdCgpLHA9cShwLHYpLEMuZmlyZUV2ZW50KCJvbiIrUyxwKSl9LHRlPWZ1bmN0aW9uKEMpe3JldHVy''@;'; put 'put ''biBDLm1vbnRoPDAmJihDLnllYXItPU1hdGguY2VpbChNYXRoLmFicyhDLm1vbnRoKS8xMiksQy5tb250aCs9MTIpLEMubW9udGg+MTEmJihDLnllYXIrPU1hdGguZmxvb3IoTWF0aC5hYnMoQy5tb250aCkvMTIpLEMubW9udGgtPTEyKSxDfSxvZT17ZmllbGQ6bnVsbCxib3VuZDp2b2lkIDAs''@;'; put 'put ''YXJpYUxhYmVsOiJVc2UgdGhlIGFycm93IGtleXMgdG8gcGljayBhIGRhdGUiLHBvc2l0aW9uOiJib3R0b20gbGVmdCIscmVwb3NpdGlvbjohMCxmb3JtYXQ6IllZWVktTU0tREQiLHRvU3RyaW5nOm51bGwscGFyc2U6bnVsbCxkZWZhdWx0RGF0ZTpudWxsLHNldERlZmF1bHREYXRlOiExLGZp''@;'; put 'put ''cnN0RGF5OjAsZmlyc3RXZWVrT2ZZZWFyTWluRGF5czo0LGZvcm1hdFN0cmljdDohMSxtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLHllYXJSYW5nZToxMCxzaG93V2Vla051bWJlcjohMSxwaWNrV2hvbGVXZWVrOiExLG1pblllYXI6MCxtYXhZZWFyOjk5OTksbWluTW9udGg6dm9pZCAwLG1h''@;'; put 'put ''eE1vbnRoOnZvaWQgMCxzdGFydFJhbmdlOm51bGwsZW5kUmFuZ2U6bnVsbCxpc1JUTDohMSx5ZWFyU3VmZml4OiIiLHNob3dNb250aEFmdGVyWWVhcjohMSxzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiExLGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRo''@;'; put 'put ''czohMSxudW1iZXJPZk1vbnRoczoxLG1haW5DYWxlbmRhcjoibGVmdCIsY29udGFpbmVyOnZvaWQgMCxibHVyRmllbGRPblNlbGVjdDohMCxpMThuOntwcmV2aW91c01vbnRoOiJQcmV2aW91cyBNb250aCIsbmV4dE1vbnRoOiJOZXh0IE1vbnRoIixtb250aHM6WyJKYW51YXJ5IiwiRmVicnVh''@;'; put 'put ''cnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHdlZWtkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5Iiwi''@;'; put 'put ''U2F0dXJkYXkiXSx3ZWVrZGF5c1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il19LHRoZW1lOm51bGwsZXZlbnRzOltdLG9uU2VsZWN0Om51bGwsb25PcGVuOm51bGwsb25DbG9zZTpudWxsLG9uRHJhdzpudWxsLGtleWJvYXJkSW5wdXQ6ITB9LHNlPWZ1''@;'; put 'put ''bmN0aW9uKEMsUyx2KXtmb3IoUys9Qy5maXJzdERheTtTPj03OylTLT03O3JldHVybiB2P0MuaTE4bi53ZWVrZGF5c1Nob3J0W1NdOkMuaTE4bi53ZWVrZGF5c1tTXX0saGU9ZnVuY3Rpb24oQyl7dmFyIFM9W10sdj0iZmFsc2UiO2lmKEMuaXNFbXB0eSl7aWYoIUMuc2hvd0RheXNJbk5leHRB''@;'; put 'put ''bmRQcmV2aW91c01vbnRocylyZXR1cm4nPHRkIGNsYXNzPSJpcy1lbXB0eSI+PC90ZD4nO1MucHVzaCgiaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoIiksQy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHN8fFMucHVzaCgiaXMtc2VsZWN0aW9uLWRpc2FibGVkIil9''@;'; put 'put ''cmV0dXJuIEMuaXNEaXNhYmxlZCYmUy5wdXNoKCJpcy1kaXNhYmxlZCIpLEMuaXNUb2RheSYmUy5wdXNoKCJpcy10b2RheSIpLEMuaXNTZWxlY3RlZCYmKFMucHVzaCgiaXMtc2VsZWN0ZWQiKSx2PSJ0cnVlIiksQy5oYXNFdmVudCYmUy5wdXNoKCJoYXMtZXZlbnQiKSxDLmlzSW5SYW5nZSYm''@;'; put 'put ''Uy5wdXNoKCJpcy1pbnJhbmdlIiksQy5pc1N0YXJ0UmFuZ2UmJlMucHVzaCgiaXMtc3RhcnRyYW5nZSIpLEMuaXNFbmRSYW5nZSYmUy5wdXNoKCJpcy1lbmRyYW5nZSIpLCc8dGQgZGF0YS1kYXk9IicrQy5kYXkrJyIgY2xhc3M9IicrUy5qb2luKCIgIikrJyIgYXJpYS1zZWxlY3RlZD0iJyt2''@;'; put 'put ''KyciPjxidXR0b24gY2xhc3M9InBpa2EtYnV0dG9uIHBpa2EtZGF5IiB0eXBlPSJidXR0b24iIGRhdGEtcGlrYS15ZWFyPSInK0MueWVhcisnIiBkYXRhLXBpa2EtbW9udGg9IicrQy5tb250aCsnIiBkYXRhLXBpa2EtZGF5PSInK0MuZGF5KyciPicrQy5kYXkrIjwvYnV0dG9uPjwvdGQ+In0s''@;'; put 'put ''Y2U9ZnVuY3Rpb24oQyxTLHYscCl7dmFyIHc9bmV3IERhdGUodixTLEMpO3JldHVybic8dGQgY2xhc3M9InBpa2Etd2VlayI+JysoeD9hZSh3KS5pc29XZWVrKCk6ZnVuY3Rpb24oQyxTKXtDLnNldEhvdXJzKDAsMCwwLDApO3ZhciB2PUMuZ2V0RGF0ZSgpLHA9Qy5nZXREYXkoKSx3PVMsSj13''@;'; put 'put ''LTEsZGU9ZnVuY3Rpb24oT2Upe3JldHVybihPZSs3LTEpJTd9O0Muc2V0RGF0ZSh2K0otZGUocCkpO3ZhciBmZT1uZXcgRGF0ZShDLmdldEZ1bGxZZWFyKCksMCx3KSxMZT0oQy5nZXRUaW1lKCktZmUuZ2V0VGltZSgpKS84NjRlNTtyZXR1cm4gMStNYXRoLnJvdW5kKChMZS1KK2RlKGZlLmdl''@;'; put 'put ''dERheSgpKSkvNyl9KHcscCkpKyI8L3RkPiJ9LEc9ZnVuY3Rpb24oQyxTLHYscCl7cmV0dXJuJzx0ciBjbGFzcz0icGlrYS1yb3cnKyh2PyIgcGljay13aG9sZS13ZWVrIjoiIikrKHA/IiBpcy1zZWxlY3RlZCI6IiIpKyciPicrKFM/Qy5yZXZlcnNlKCk6Qykuam9pbigiIikrIjwvdHI+In0s''@;'; put 'put ''SD1mdW5jdGlvbihDLFMsdixwLHcsSil7dmFyIG5lLGRlLGZlLEJlLFdlLHhlPUMuX28sTGU9dj09PXhlLm1pblllYXIsRmU9dj09PXhlLm1heFllYXIsT2U9JzxkaXYgaWQ9IicrSisnIiBjbGFzcz0icGlrYS10aXRsZSIgcm9sZT0iaGVhZGluZyIgYXJpYS1saXZlPSJhc3NlcnRpdmUiPics''@;'; put 'put ''S2U9ITAsWWU9ITA7Zm9yKGZlPVtdLG5lPTA7bmU8MTI7bmUrKylmZS5wdXNoKCc8b3B0aW9uIHZhbHVlPSInKyh2PT09dz9uZS1TOjEyK25lLVMpKyciJysobmU9PT1wPycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyhMZSYmbmU8eGUubWluTW9udGh8fEZlJiZuZT54ZS5tYXhNb250aD8n''@;'; put 'put ''IGRpc2FibGVkPSJkaXNhYmxlZCInOiIiKSsiPiIreGUuaTE4bi5tb250aHNbbmVdKyI8L29wdGlvbj4iKTtmb3IoQmU9JzxkaXYgY2xhc3M9InBpa2EtbGFiZWwiPicreGUuaTE4bi5tb250aHNbcF0rJzxzZWxlY3QgY2xhc3M9InBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LW1vbnRoIiB0YWJp''@;'; put 'put ''bmRleD0iLTEiPicrZmUuam9pbigiIikrIjwvc2VsZWN0PjwvZGl2PiIsRSh4ZS55ZWFyUmFuZ2UpPyhuZT14ZS55ZWFyUmFuZ2VbMF0sZGU9eGUueWVhclJhbmdlWzFdKzEpOihuZT12LXhlLnllYXJSYW5nZSxkZT0xK3YreGUueWVhclJhbmdlKSxmZT1bXTtuZTxkZSYmbmU8PXhlLm1heFll''@;'; put 'put ''YXI7bmUrKyluZT49eGUubWluWWVhciYmZmUucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJytuZSsnIicrKG5lPT09dj8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsiPiIrbmUrIjwvb3B0aW9uPiIpO3JldHVybiBXZT0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+Jyt2K3hlLnllYXJTdWZmaXgr''@;'; put 'put ''JzxzZWxlY3QgY2xhc3M9InBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LXllYXIiIHRhYmluZGV4PSItMSI+JytmZS5qb2luKCIiKSsiPC9zZWxlY3Q+PC9kaXY+IixPZSs9eGUuc2hvd01vbnRoQWZ0ZXJZZWFyP1dlK0JlOkJlK1dlLExlJiYoMD09PXB8fHhlLm1pbk1vbnRoPj1wKSYmKEtlPSEx''@;'; put 'put ''KSxGZSYmKDExPT09cHx8eGUubWF4TW9udGg8PXApJiYoWWU9ITEpLDA9PT1TJiYoT2UrPSc8YnV0dG9uIGNsYXNzPSJwaWthLXByZXYnKyhLZT8iIjoiIGlzLWRpc2FibGVkIikrJyIgdHlwZT0iYnV0dG9uIj4nK3hlLmkxOG4ucHJldmlvdXNNb250aCsiPC9idXR0b24+IiksUz09PUMuX28u''@;'; put 'put ''bnVtYmVyT2ZNb250aHMtMSYmKE9lKz0nPGJ1dHRvbiBjbGFzcz0icGlrYS1uZXh0JysoWWU/IiI6IiBpcy1kaXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+Jyt4ZS5pMThuLm5leHRNb250aCsiPC9idXR0b24+IiksT2UrIjwvZGl2PiJ9LE49ZnVuY3Rpb24oQyxTLHYpe3JldHVybic8dGFi''@;'; put 'put ''bGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGlrYS10YWJsZSIgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSInK3YrJyI+JytmdW5jdGlvbihDKXt2YXIgUyx2PVtdO2ZvcihDLnNob3dXZWVrTnVtYmVyJiZ2LnB1c2goIjx0aD48L3RoPiIpLFM9MDtTPDc7''@;'; put 'put ''UysrKXYucHVzaCgnPHRoIHNjb3BlPSJjb2wiPjxhYmJyIHRpdGxlPSInK3NlKEMsUykrJyI+JytzZShDLFMsITApKyI8L2FiYnI+PC90aD4iKTtyZXR1cm4iPHRoZWFkPjx0cj4iKyhDLmlzUlRMP3YucmV2ZXJzZSgpOnYpLmpvaW4oIiIpKyI8L3RyPjwvdGhlYWQ+In0oQykrZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIjx0Ym9keT4iK0Muam9pbigiIikrIjwvdGJvZHk+In0oUykrIjwvdGFibGU+In0sZz1mdW5jdGlvbihDKXt2YXIgUz10aGlzLHY9Uy5jb25maWcoQyk7Uy5fb25Nb3VzZURvd249ZnVuY3Rpb24odyl7aWYoUy5fdil7dmFyIEo9KHc9d3x8d2luZG93LmV2ZW50KS50YXJnZXR8''@;'; put 'put ''fHcuc3JjRWxlbWVudDtpZihKKWlmKEsoSiwiaXMtZGlzYWJsZWQiKXx8KCFLKEosInBpa2EtYnV0dG9uIil8fEsoSiwiaXMtZW1wdHkiKXx8SyhKLnBhcmVudE5vZGUsImlzLWRpc2FibGVkIik/SyhKLCJwaWthLXByZXYiKT9TLnByZXZNb250aCgpOksoSiwicGlrYS1uZXh0IikmJlMubmV4''@;'; put 'put ''dE1vbnRoKCk6KFMuc2V0RGF0ZShuZXcgRGF0ZShKLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLXllYXIiKSxKLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLW1vbnRoIiksSi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1kYXkiKSkpLHYuYm91bmQmJk0oZnVuY3Rpb24oKXtTLmhpZGUoKSx2LmJs''@;'; put 'put ''dXJGaWVsZE9uU2VsZWN0JiZ2LmZpZWxkJiZ2LmZpZWxkLmJsdXIoKX0sMTAwKSkpLEsoSiwicGlrYS1zZWxlY3QiKSlTLl9jPSEwO2Vsc2V7aWYoIXcucHJldmVudERlZmF1bHQpcmV0dXJuIHcucmV0dXJuVmFsdWU9ITEsITE7dy5wcmV2ZW50RGVmYXVsdCgpfX19LFMuX29uQ2hhbmdlPWZ1''@;'; put 'put ''bmN0aW9uKHcpe3ZhciBKPSh3PXd8fHdpbmRvdy5ldmVudCkudGFyZ2V0fHx3LnNyY0VsZW1lbnQ7SiYmKEsoSiwicGlrYS1zZWxlY3QtbW9udGgiKT9TLmdvdG9Nb250aChKLnZhbHVlKTpLKEosInBpa2Etc2VsZWN0LXllYXIiKSYmUy5nb3RvWWVhcihKLnZhbHVlKSl9LFMuX29uS2V5Q2hh''@;'; put 'put ''bmdlPWZ1bmN0aW9uKHcpe2lmKHc9d3x8d2luZG93LmV2ZW50LFMuaXNWaXNpYmxlKCkpc3dpdGNoKHcua2V5Q29kZSl7Y2FzZSAxMzpjYXNlIDI3OnYuZmllbGQmJnYuZmllbGQuYmx1cigpO2JyZWFrO2Nhc2UgMzc6Uy5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsMSk7YnJlYWs7Y2FzZSAzODpT''@;'; put 'put ''LmFkanVzdERhdGUoInN1YnRyYWN0Iiw3KTticmVhaztjYXNlIDM5OlMuYWRqdXN0RGF0ZSgiYWRkIiwxKTticmVhaztjYXNlIDQwOlMuYWRqdXN0RGF0ZSgiYWRkIiw3KTticmVhaztjYXNlIDg6Y2FzZSA0NjpTLnNldERhdGUobnVsbCl9fSxTLl9wYXJzZUZpZWxkVmFsdWU9ZnVuY3Rpb24o''@;'; put 'put ''KXtpZih2LnBhcnNlKXJldHVybiB2LnBhcnNlKHYuZmllbGQudmFsdWUsdi5mb3JtYXQpO2lmKHgpe3ZhciB3PWFlKHYuZmllbGQudmFsdWUsdi5mb3JtYXQsdi5mb3JtYXRTdHJpY3QpO3JldHVybiB3JiZ3LmlzVmFsaWQoKT93LnRvRGF0ZSgpOm51bGx9cmV0dXJuIG5ldyBEYXRlKERhdGUu''@;'; put 'put ''cGFyc2Uodi5maWVsZC52YWx1ZSkpfSxTLl9vbklucHV0Q2hhbmdlPWZ1bmN0aW9uKHcpe3ZhciBKO3cuZmlyZWRCeSE9PVMmJihKPVMuX3BhcnNlRmllbGRWYWx1ZSgpLGooSikmJlMuc2V0RGF0ZShKKSxTLl92fHxTLnNob3coKSl9LFMuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe1Muc2hv''@;'; put 'put ''dygpfSxTLl9vbklucHV0Q2xpY2s9ZnVuY3Rpb24oKXtTLnNob3coKX0sUy5fb25JbnB1dEJsdXI9ZnVuY3Rpb24oKXt2YXIgdz1sZS5hY3RpdmVFbGVtZW50O2Rve2lmKEsodywicGlrYS1zaW5nbGUiKSlyZXR1cm59d2hpbGUodz13LnBhcmVudE5vZGUpO1MuX2N8fChTLl9iPU0oZnVuY3Rp''@;'; put 'put ''b24oKXtTLmhpZGUoKX0sNTApKSxTLl9jPSExfSxTLl9vbkNsaWNrPWZ1bmN0aW9uKHcpe3ZhciBKPSh3PXd8fHdpbmRvdy5ldmVudCkudGFyZ2V0fHx3LnNyY0VsZW1lbnQsbmU9SjtpZihKKXshbSYmSyhKLCJwaWthLXNlbGVjdCIpJiYoSi5vbmNoYW5nZXx8KEouc2V0QXR0cmlidXRlKCJv''@;'; put 'put ''bmNoYW5nZSIsInJldHVybjsiKSxPKEosImNoYW5nZSIsUy5fb25DaGFuZ2UpKSk7ZG97aWYoSyhuZSwicGlrYS1zaW5nbGUiKXx8bmU9PT12LnRyaWdnZXIpcmV0dXJufXdoaWxlKG5lPW5lLnBhcmVudE5vZGUpO1MuX3YmJkohPT12LnRyaWdnZXImJm5lIT09di50cmlnZ2VyJiZTLmhpZGUo''@;'; put 'put ''KX19LFMuZWw9bGUuY3JlYXRlRWxlbWVudCgiZGl2IiksUy5lbC5jbGFzc05hbWU9InBpa2Etc2luZ2xlIisodi5pc1JUTD8iIGlzLXJ0bCI6IiIpKyh2LnRoZW1lPyIgIit2LnRoZW1lOiIiKSxPKFMuZWwsIm1vdXNlZG93biIsUy5fb25Nb3VzZURvd24sITApLE8oUy5lbCwidG91Y2hlbmQi''@;'; put 'put ''LFMuX29uTW91c2VEb3duLCEwKSxPKFMuZWwsImNoYW5nZSIsUy5fb25DaGFuZ2UpLHYua2V5Ym9hcmRJbnB1dCYmTyhsZSwia2V5ZG93biIsUy5fb25LZXlDaGFuZ2UpLHYuZmllbGQmJih2LmNvbnRhaW5lcj92LmNvbnRhaW5lci5hcHBlbmRDaGlsZChTLmVsKTp2LmJvdW5kP2xlLmJvZHku''@;'; put 'put ''YXBwZW5kQ2hpbGQoUy5lbCk6di5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShTLmVsLHYuZmllbGQubmV4dFNpYmxpbmcpLE8odi5maWVsZCwiY2hhbmdlIixTLl9vbklucHV0Q2hhbmdlKSx2LmRlZmF1bHREYXRlfHwodi5kZWZhdWx0RGF0ZT1TLl9wYXJzZUZpZWxkVmFsdWUoKSx2''@;'; put 'put ''LnNldERlZmF1bHREYXRlPSEwKSk7dmFyIHA9di5kZWZhdWx0RGF0ZTtqKHApP3Yuc2V0RGVmYXVsdERhdGU/Uy5zZXREYXRlKHAsITApOlMuZ290b0RhdGUocCk6Uy5nb3RvRGF0ZShuZXcgRGF0ZSksdi5ib3VuZD8odGhpcy5oaWRlKCksUy5lbC5jbGFzc05hbWUrPSIgaXMtYm91bmQiLE8o''@;'; put 'put ''di50cmlnZ2VyLCJjbGljayIsUy5fb25JbnB1dENsaWNrKSxPKHYudHJpZ2dlciwiZm9jdXMiLFMuX29uSW5wdXRGb2N1cyksTyh2LnRyaWdnZXIsImJsdXIiLFMuX29uSW5wdXRCbHVyKSk6dGhpcy5zaG93KCl9O3JldHVybiBnLnByb3RvdHlwZT17Y29uZmlnOmZ1bmN0aW9uKEMpe3RoaXMu''@;'; put 'put ''X298fCh0aGlzLl9vPXEoe30sb2UsITApKTt2YXIgUz1xKHRoaXMuX28sQywhMCk7Uy5pc1JUTD0hIVMuaXNSVEwsUy5maWVsZD1TLmZpZWxkJiZTLmZpZWxkLm5vZGVOYW1lP1MuZmllbGQ6bnVsbCxTLnRoZW1lPSJzdHJpbmciPT10eXBlb2YgUy50aGVtZSYmUy50aGVtZT9TLnRoZW1lOm51''@;'; put 'put ''bGwsUy5ib3VuZD0hISh2b2lkIDAhPT1TLmJvdW5kP1MuZmllbGQmJlMuYm91bmQ6Uy5maWVsZCksUy50cmlnZ2VyPVMudHJpZ2dlciYmUy50cmlnZ2VyLm5vZGVOYW1lP1MudHJpZ2dlcjpTLmZpZWxkLFMuZGlzYWJsZVdlZWtlbmRzPSEhUy5kaXNhYmxlV2Vla2VuZHMsUy5kaXNhYmxlRGF5''@;'; put 'put ''Rm49ImZ1bmN0aW9uIj09dHlwZW9mIFMuZGlzYWJsZURheUZuP1MuZGlzYWJsZURheUZuOm51bGw7dmFyIHY9cGFyc2VJbnQoUy5udW1iZXJPZk1vbnRocywxMCl8fDE7aWYoUy5udW1iZXJPZk1vbnRocz12PjQ/NDp2LGooUy5taW5EYXRlKXx8KFMubWluRGF0ZT0hMSksaihTLm1heERhdGUp''@;'; put 'put ''fHwoUy5tYXhEYXRlPSExKSxTLm1pbkRhdGUmJlMubWF4RGF0ZSYmUy5tYXhEYXRlPFMubWluRGF0ZSYmKFMubWF4RGF0ZT1TLm1pbkRhdGU9ITEpLFMubWluRGF0ZSYmdGhpcy5zZXRNaW5EYXRlKFMubWluRGF0ZSksUy5tYXhEYXRlJiZ0aGlzLnNldE1heERhdGUoUy5tYXhEYXRlKSxFKFMu''@;'; put 'put ''eWVhclJhbmdlKSl7dmFyIHA9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLTEwO1MueWVhclJhbmdlWzBdPXBhcnNlSW50KFMueWVhclJhbmdlWzBdLDEwKXx8cCxTLnllYXJSYW5nZVsxXT1wYXJzZUludChTLnllYXJSYW5nZVsxXSwxMCl8fHB9ZWxzZSBTLnllYXJSYW5nZT1NYXRoLmFicyhw''@;'; put 'put ''YXJzZUludChTLnllYXJSYW5nZSwxMCkpfHxvZS55ZWFyUmFuZ2UsUy55ZWFyUmFuZ2U+MTAwJiYoUy55ZWFyUmFuZ2U9MTAwKTtyZXR1cm4gU30sdG9TdHJpbmc6ZnVuY3Rpb24oQyl7cmV0dXJuIEM9Q3x8dGhpcy5fby5mb3JtYXQsaih0aGlzLl9kKT90aGlzLl9vLnRvU3RyaW5nP3RoaXMu''@;'; put 'put ''X28udG9TdHJpbmcodGhpcy5fZCxDKTp4P2FlKHRoaXMuX2QpLmZvcm1hdChDKTp0aGlzLl9kLnRvRGF0ZVN0cmluZygpOiIifSxnZXRNb21lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4geD9hZSh0aGlzLl9kKTpudWxsfSxzZXRNb21lbnQ6ZnVuY3Rpb24oQyxTKXt4JiZhZS5pc01vbWVudChDKSYm''@;'; put 'put ''dGhpcy5zZXREYXRlKEMudG9EYXRlKCksUyl9LGdldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzLl9kKT9uZXcgRGF0ZSh0aGlzLl9kLmdldFRpbWUoKSk6bnVsbH0sc2V0RGF0ZTpmdW5jdGlvbihDLFMpe2lmKCFDKXJldHVybiB0aGlzLl9kPW51bGwsdGhpcy5fby5maWVsZCYmKHRo''@;'; put 'put ''aXMuX28uZmllbGQudmFsdWU9IiIsZWUodGhpcy5fby5maWVsZCwiY2hhbmdlIix7ZmlyZWRCeTp0aGlzfSkpLHRoaXMuZHJhdygpO2lmKCJzdHJpbmciPT10eXBlb2YgQyYmKEM9bmV3IERhdGUoRGF0ZS5wYXJzZShDKSkpLGooQykpe3ZhciB2PXRoaXMuX28ubWluRGF0ZSxwPXRoaXMuX28u''@;'; put 'put ''bWF4RGF0ZTtqKHYpJiZDPHY/Qz12OmoocCkmJkM+cCYmKEM9cCksdGhpcy5fZD1uZXcgRGF0ZShDLmdldFRpbWUoKSksWCh0aGlzLl9kKSx0aGlzLmdvdG9EYXRlKHRoaXMuX2QpLHRoaXMuX28uZmllbGQmJih0aGlzLl9vLmZpZWxkLnZhbHVlPXRoaXMudG9TdHJpbmcoKSxlZSh0aGlzLl9v''@;'; put 'put ''LmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9KSksIVMmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uU2VsZWN0JiZ0aGlzLl9vLm9uU2VsZWN0LmNhbGwodGhpcyx0aGlzLmdldERhdGUoKSl9fSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuc2V0RGF0ZShudWxsKX0sZ290b0RhdGU6''@;'; put 'put ''ZnVuY3Rpb24oQyl7dmFyIFM9ITA7aWYoaihDKSl7aWYodGhpcy5jYWxlbmRhcnMpe3ZhciB2PW5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgsMSkscD1uZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0u''@;'; put 'put ''eWVhcix0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ubW9udGgsMSksdz1DLmdldFRpbWUoKTtwLnNldE1vbnRoKHAuZ2V0TW9udGgoKSsxKSxwLnNldERhdGUocC5nZXREYXRlKCktMSksUz13PHYuZ2V0VGltZSgpfHxwLmdldFRpbWUoKTx3fVMmJih0aGlzLmNhbGVu''@;'; put 'put ''ZGFycz1be21vbnRoOkMuZ2V0TW9udGgoKSx5ZWFyOkMuZ2V0RnVsbFllYXIoKX1dLCJyaWdodCI9PT10aGlzLl9vLm1haW5DYWxlbmRhciYmKHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKz0xLXRoaXMuX28ubnVtYmVyT2ZNb250aHMpKSx0aGlzLmFkanVzdENhbGVuZGFycygpfX0sYWRqdXN0''@;'; put 'put ''RGF0ZTpmdW5jdGlvbihDLFMpe3ZhciB3LHY9dGhpcy5nZXREYXRlKCl8fG5ldyBEYXRlLHA9MjQqcGFyc2VJbnQoUykqNjAqNjAqMWUzOyJhZGQiPT09Qz93PW5ldyBEYXRlKHYudmFsdWVPZigpK3ApOiJzdWJ0cmFjdCI9PT1DJiYodz1uZXcgRGF0ZSh2LnZhbHVlT2YoKS1wKSksdGhpcy5z''@;'; put 'put ''ZXREYXRlKHcpfSxhZGp1c3RDYWxlbmRhcnM6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXT10ZSh0aGlzLmNhbGVuZGFyc1swXSk7Zm9yKHZhciBDPTE7Qzx0aGlzLl9vLm51bWJlck9mTW9udGhzO0MrKyl0aGlzLmNhbGVuZGFyc1tDXT10ZSh7bW9udGg6dGhpcy5jYWxlbmRhcnNbMF0u''@;'; put 'put ''bW9udGgrQyx5ZWFyOnRoaXMuY2FsZW5kYXJzWzBdLnllYXJ9KTt0aGlzLmRyYXcoKX0sZ290b1RvZGF5OmZ1bmN0aW9uKCl7dGhpcy5nb3RvRGF0ZShuZXcgRGF0ZSl9LGdvdG9Nb250aDpmdW5jdGlvbihDKXtpc05hTihDKXx8KHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoPXBhcnNlSW50KEMs''@;'; put 'put ''MTApLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCkpfSxuZXh0TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXS5tb250aCsrLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9LHByZXZNb250aDpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLS0sdGhpcy5hZGp1c3RDYWxlbmRh''@;'; put 'put ''cnMoKX0sZ290b1llYXI6ZnVuY3Rpb24oQyl7aXNOYU4oQyl8fCh0aGlzLmNhbGVuZGFyc1swXS55ZWFyPXBhcnNlSW50KEMsMTApLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCkpfSxzZXRNaW5EYXRlOmZ1bmN0aW9uKEMpe0MgaW5zdGFuY2VvZiBEYXRlPyhYKEMpLHRoaXMuX28ubWluRGF0ZT1D''@;'; put 'put ''LHRoaXMuX28ubWluWWVhcj1DLmdldEZ1bGxZZWFyKCksdGhpcy5fby5taW5Nb250aD1DLmdldE1vbnRoKCkpOih0aGlzLl9vLm1pbkRhdGU9b2UubWluRGF0ZSx0aGlzLl9vLm1pblllYXI9b2UubWluWWVhcix0aGlzLl9vLm1pbk1vbnRoPW9lLm1pbk1vbnRoLHRoaXMuX28uc3RhcnRSYW5n''@;'; put 'put ''ZT1vZS5zdGFydFJhbmdlKSx0aGlzLmRyYXcoKX0sc2V0TWF4RGF0ZTpmdW5jdGlvbihDKXtDIGluc3RhbmNlb2YgRGF0ZT8oWChDKSx0aGlzLl9vLm1heERhdGU9Qyx0aGlzLl9vLm1heFllYXI9Qy5nZXRGdWxsWWVhcigpLHRoaXMuX28ubWF4TW9udGg9Qy5nZXRNb250aCgpKToodGhpcy5f''@;'; put 'put ''by5tYXhEYXRlPW9lLm1heERhdGUsdGhpcy5fby5tYXhZZWFyPW9lLm1heFllYXIsdGhpcy5fby5tYXhNb250aD1vZS5tYXhNb250aCx0aGlzLl9vLmVuZFJhbmdlPW9lLmVuZFJhbmdlKSx0aGlzLmRyYXcoKX0sc2V0U3RhcnRSYW5nZTpmdW5jdGlvbihDKXt0aGlzLl9vLnN0YXJ0UmFuZ2U9''@;'; put 'put ''Q30sc2V0RW5kUmFuZ2U6ZnVuY3Rpb24oQyl7dGhpcy5fby5lbmRSYW5nZT1DfSxkcmF3OmZ1bmN0aW9uKEMpe2lmKHRoaXMuX3Z8fEMpe3ZhciBkZSxTPXRoaXMuX28sdj1TLm1pblllYXIscD1TLm1heFllYXIsdz1TLm1pbk1vbnRoLEo9Uy5tYXhNb250aCxuZT0iIjt0aGlzLl95PD12JiYo''@;'; put 'put ''dGhpcy5feT12LCFpc05hTih3KSYmdGhpcy5fbTx3JiYodGhpcy5fbT13KSksdGhpcy5feT49cCYmKHRoaXMuX3k9cCwhaXNOYU4oSikmJnRoaXMuX20+SiYmKHRoaXMuX209SikpO2Zvcih2YXIgZmU9MDtmZTxTLm51bWJlck9mTW9udGhzO2ZlKyspZGU9InBpa2EtdGl0bGUtIitNYXRoLnJh''@;'; put 'put ''bmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csIiIpLnN1YnN0cigwLDIpLG5lKz0nPGRpdiBjbGFzcz0icGlrYS1sZW5kYXIiPicrSCh0aGlzLGZlLHRoaXMuY2FsZW5kYXJzW2ZlXS55ZWFyLHRoaXMuY2FsZW5kYXJzW2ZlXS5tb250aCx0aGlzLmNhbGVuZGFyc1swXS55''@;'; put 'put ''ZWFyLGRlKSt0aGlzLnJlbmRlcih0aGlzLmNhbGVuZGFyc1tmZV0ueWVhcix0aGlzLmNhbGVuZGFyc1tmZV0ubW9udGgsZGUpKyI8L2Rpdj4iO3RoaXMuZWwuaW5uZXJIVE1MPW5lLFMuYm91bmQmJiJoaWRkZW4iIT09Uy5maWVsZC50eXBlJiZNKGZ1bmN0aW9uKCl7Uy50cmlnZ2VyLmZvY3Vz''@;'; put 'put ''KCl9LDEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uRHJhdyYmdGhpcy5fby5vbkRyYXcodGhpcyksUy5ib3VuZCYmUy5maWVsZC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLFMuYXJpYUxhYmVsKX19LGFkanVzdFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEMsUyx2LHAsdyxKLG5l''@;'; put 'put ''LGRlLGZlLHhlLExlLEZlO2lmKCF0aGlzLl9vLmNvbnRhaW5lcil7aWYodGhpcy5lbC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLFM9Qz10aGlzLl9vLnRyaWdnZXIsdj10aGlzLmVsLm9mZnNldFdpZHRoLHA9dGhpcy5lbC5vZmZzZXRIZWlnaHQsdz13aW5kb3cuaW5uZXJXaWR0aHx8bGUu''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLEo9d2luZG93LmlubmVySGVpZ2h0fHxsZS5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LG5lPXdpbmRvdy5wYWdlWU9mZnNldHx8bGUuYm9keS5zY3JvbGxUb3B8fGxlLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsTGU9ITAsRmU9ITAs''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIEMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KWRlPSh4ZT1DLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKS5sZWZ0K3dpbmRvdy5wYWdlWE9mZnNldCxmZT14ZS5ib3R0b20rd2luZG93LnBhZ2VZT2Zmc2V0O2Vsc2UgZm9yKGRlPVMub2Zmc2V0TGVmdCxmZT1TLm9m''@;'; put 'put ''ZnNldFRvcCtTLm9mZnNldEhlaWdodDtTPVMub2Zmc2V0UGFyZW50OylkZSs9Uy5vZmZzZXRMZWZ0LGZlKz1TLm9mZnNldFRvcDsodGhpcy5fby5yZXBvc2l0aW9uJiZkZSt2Pnd8fHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKT4tMSYmZGUtditDLm9mZnNldFdpZHRoPjApJiYo''@;'; put 'put ''ZGU9ZGUtditDLm9mZnNldFdpZHRoLExlPSExKSwodGhpcy5fby5yZXBvc2l0aW9uJiZmZStwPkorbmV8fHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigidG9wIik+LTEmJmZlLXAtQy5vZmZzZXRIZWlnaHQ+MCkmJihmZT1mZS1wLUMub2Zmc2V0SGVpZ2h0LEZlPSExKSx0aGlzLmVsLnN0eWxl''@;'; put 'put ''LmxlZnQ9ZGUrInB4Iix0aGlzLmVsLnN0eWxlLnRvcD1mZSsicHgiLEkodGhpcy5lbCxMZT8ibGVmdC1hbGlnbmVkIjoicmlnaHQtYWxpZ25lZCIpLEkodGhpcy5lbCxGZT8iYm90dG9tLWFsaWduZWQiOiJ0b3AtYWxpZ25lZCIpLGsodGhpcy5lbCxMZT8icmlnaHQtYWxpZ25lZCI6ImxlZnQt''@;'; put 'put ''YWxpZ25lZCIpLGsodGhpcy5lbCxGZT8idG9wLWFsaWduZWQiOiJib3R0b20tYWxpZ25lZCIpfX0scmVuZGVyOmZ1bmN0aW9uKEMsUyx2KXt2YXIgcD10aGlzLl9vLHc9bmV3IERhdGUsSj1ZKEMsUyksbmU9bmV3IERhdGUoQyxTLDEpLmdldERheSgpLGRlPVtdLGZlPVtdO1godykscC5maXJz''@;'; put 'put ''dERheT4wJiYobmUtPXAuZmlyc3REYXkpPDAmJihuZSs9Nyk7Zm9yKHZhciB4ZT0wPT09Uz8xMTpTLTEsTGU9MTE9PT1TPzA6UysxLEZlPTA9PT1TP0MtMTpDLE9lPTExPT09Uz9DKzE6QyxCZT1ZKEZlLHhlKSxXZT1KK25lLEtlPVdlO0tlPjc7KUtlLT03O1dlKz03LUtlO2Zvcih2YXIgWWU9''@;'; put 'put ''ITEsSmU9MCxsdD0wO0plPFdlO0plKyspe3ZhciBQZT1uZXcgRGF0ZShDLFMsSmUtbmUrMSksYmU9ISFqKHRoaXMuX2QpJiZVKFBlLHRoaXMuX2QpLEFlPVUoUGUsdyksVGU9LTEhPT1wLmV2ZW50cy5pbmRleE9mKFBlLnRvRGF0ZVN0cmluZygpKSxxZT1KZTxuZXx8SmU+PUorbmUsWGU9SmUt''@;'; put 'put ''bmUrMSxVZT1TLGh0PUMsTWU9cC5zdGFydFJhbmdlJiZVKHAuc3RhcnRSYW5nZSxQZSksRGU9cC5lbmRSYW5nZSYmVShwLmVuZFJhbmdlLFBlKSx6ZT1wLnN0YXJ0UmFuZ2UmJnAuZW5kUmFuZ2UmJnAuc3RhcnRSYW5nZTxQZSYmUGU8cC5lbmRSYW5nZSxpdD1wLm1pbkRhdGUmJlBlPHAubWlu''@;'; put 'put ''RGF0ZXx8cC5tYXhEYXRlJiZQZT5wLm1heERhdGV8fHAuZGlzYWJsZVdlZWtlbmRzJiZWKFBlKXx8cC5kaXNhYmxlRGF5Rm4mJnAuZGlzYWJsZURheUZuKFBlKTtxZSYmKEplPG5lPyhYZT1CZStYZSxVZT14ZSxodD1GZSk6KFhlLT1KLFVlPUxlLGh0PU9lKSkscC5waWNrV2hvbGVXZWVrJiZi''@;'; put 'put ''ZSYmKFllPSEwKSxmZS5wdXNoKGhlKHtkYXk6WGUsbW9udGg6VWUseWVhcjpodCxoYXNFdmVudDpUZSxpc1NlbGVjdGVkOmJlLGlzVG9kYXk6QWUsaXNEaXNhYmxlZDppdCxpc0VtcHR5OnFlLGlzU3RhcnRSYW5nZTpNZSxpc0VuZFJhbmdlOkRlLGlzSW5SYW5nZTp6ZSxzaG93RGF5c0luTmV4''@;'; put 'put ''dEFuZFByZXZpb3VzTW9udGhzOnAuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocyxlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6cC5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHN9KSksNz09KytsdCYmKHAuc2hvd1dlZWtO''@;'; put 'put ''dW1iZXImJmZlLnVuc2hpZnQoY2UoSmUtbmUsUyxDLHAuZmlyc3RXZWVrT2ZZZWFyTWluRGF5cykpLGRlLnB1c2goRyhmZSxwLmlzUlRMLHAucGlja1dob2xlV2VlayxZZSkpLGZlPVtdLGx0PTAsWWU9ITEpfXJldHVybiBOKHAsZGUsdil9LGlzVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLl92fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5pc1Zpc2libGUoKXx8KHRoaXMuX3Y9ITAsdGhpcy5kcmF3KCksayh0aGlzLmVsLCJpcy1oaWRkZW4iKSx0aGlzLl9vLmJvdW5kJiYoTyhsZSwiY2xpY2siLHRoaXMuX29uQ2xpY2spLHRoaXMuYWRqdXN0UG9zaXRpb24oKSksImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHRoaXMuX28ub25PcGVuJiZ0aGlzLl9vLm9uT3Blbi5jYWxsKHRoaXMpKX0saGlkZTpmdW5jdGlvbigpe3ZhciBDPXRoaXMuX3Y7ITEhPT1DJiYodGhpcy5fby5ib3VuZCYmUihsZSwiY2xpY2siLHRoaXMuX29uQ2xpY2spLHRoaXMuX28uY29udGFpbmVyfHwodGhpcy5lbC5z''@;'; put 'put ''dHlsZS5wb3NpdGlvbj0ic3RhdGljIix0aGlzLmVsLnN0eWxlLmxlZnQ9ImF1dG8iLHRoaXMuZWwuc3R5bGUudG9wPSJhdXRvIiksSSh0aGlzLmVsLCJpcy1oaWRkZW4iKSx0aGlzLl92PSExLHZvaWQgMCE9PUMmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uQ2xvc2UmJnRoaXMuX28u''@;'; put 'put ''b25DbG9zZS5jYWxsKHRoaXMpKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBDPXRoaXMuX287dGhpcy5oaWRlKCksUih0aGlzLmVsLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLCEwKSxSKHRoaXMuZWwsInRvdWNoZW5kIix0aGlzLl9vbk1vdXNlRG93biwhMCksUih0aGlzLmVsLCJj''@;'; put 'put ''aGFuZ2UiLHRoaXMuX29uQ2hhbmdlKSxDLmtleWJvYXJkSW5wdXQmJlIobGUsImtleWRvd24iLHRoaXMuX29uS2V5Q2hhbmdlKSxDLmZpZWxkJiYoUihDLmZpZWxkLCJjaGFuZ2UiLHRoaXMuX29uSW5wdXRDaGFuZ2UpLEMuYm91bmQmJihSKEMudHJpZ2dlciwiY2xpY2siLHRoaXMuX29uSW5w''@;'; put 'put ''dXRDbGljayksUihDLnRyaWdnZXIsImZvY3VzIix0aGlzLl9vbklucHV0Rm9jdXMpLFIoQy50cmlnZ2VyLCJibHVyIix0aGlzLl9vbklucHV0Qmx1cikpKSx0aGlzLmVsLnBhcmVudE5vZGUmJnRoaXMuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsKX19LGd9KG0pfSgpfSwyNzA1''@;'; put 'put ''MDooYXQsSWUsRik9PntJZS5wdWJsaWNFbmNyeXB0PUYoNDU3MzcpLEllLnByaXZhdGVEZWNyeXB0PUYoODUyNTIpLEllLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uKHgsbSl7cmV0dXJuIEllLnB1YmxpY0VuY3J5cHQoeCxtLCEwKX0sSWUucHVibGljRGVjcnlwdD1mdW5jdGlvbih4LG0pe3Jl''@;'; put 'put ''dHVybiBJZS5wcml2YXRlRGVjcnlwdCh4LG0sITApfX0sMTY1MTc6KGF0LEllLEYpPT57dmFyIGFlPUYoOTYzNjIpLHg9Rig4NDMpLkJ1ZmZlcjtmdW5jdGlvbiBtKGxlKXt2YXIgTT14LmFsbG9jVW5zYWZlKDQpO3JldHVybiBNLndyaXRlVUludDMyQkUobGUsMCksTX1hdC5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKGxlLE0pe2Zvcih2YXIgeixPPXguYWxsb2MoMCksUj0wO08ubGVuZ3RoPE07KXo9bShSKyspLE89eC5jb25jYXQoW08sYWUoInNoYTEiKS51cGRhdGUobGUpLnVwZGF0ZSh6KS5kaWdlc3QoKV0pO3JldHVybiBPLnNsaWNlKDAsTSl9fSw0ODIxMTpmdW5jdGlvbihhdCxJZSxGKXsh''@;'; put 'put ''ZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rpb24oKXt9O0QucHJvdG90eXBlPWIucHJvdG90eXBlLEcucHJv''@;'; put 'put ''dG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShHLGIsRCl7aWYoTS5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT1ifHwiYmUi''@;'; put 'put ''PT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1''@;'; put 'put ''Ij93aW5kb3cuQnVmZmVyOkYoNzcxMDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gUihHLGIpe3ZhciBEPUcuY2hhckNvZGVBdChiKTtyZXR1cm4gRD49NjUmJkQ8PTcwP0QtNTU6RD49OTcmJkQ8PTEwMj9ELTg3OkQtNDgmMTV9ZnVuY3Rpb24geihHLGIsRCl7dmFyIEg9UihHLEQpO3JldHVy''@;'; put 'put ''biBELTE+PWImJihIfD1SKEcsRC0xKTw8NCksSH1mdW5jdGlvbiBLKEcsYixELEgpe2Zvcih2YXIgTj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsRCksQz1iO0M8ZztDKyspe3ZhciBTPUcuY2hhckNvZGVBdChDKS00ODtOKj1ILE4rPVM+PTQ5P1MtNDkrMTA6Uz49MTc/Uy0xNysxMDpTfXJldHVy''@;'; put 'put ''biBOfU0uaXNCTj1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIE18fG51bGwhPT1iJiYib2JqZWN0Ij09dHlwZW9mIGImJmIuY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGIud29yZHMpfSxNLm1heD1mdW5jdGlvbihiLEQpe3JldHVybiBi''@;'; put 'put ''LmNtcChEKT4wP2I6RH0sTS5taW49ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk8MD9iOkR9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGIsRCxIKXtpZigibnVtYmVyIj09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoYixELEgpO2lmKCJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''YilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGIsRCxIKTsiaGV4Ij09PUQmJihEPTE2KSxtKEQ9PT0oMHxEKSYmRD49MiYmRDw9MzYpO3ZhciBOPTA7Ii0iPT09KGI9Yi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihOKyssdGhpcy5uZWdhdGl2ZT0xKSxOPGIubGVuZ3RoJiYo''@;'; put 'put ''MTY9PT1EP3RoaXMuX3BhcnNlSGV4KGIsTixIKToodGhpcy5fcGFyc2VCYXNlKGIsRCxOKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCkpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oYixELEgpe2I8MCYmKHRoaXMubmVnYXRpdmU9MSxi''@;'; put 'put ''PS1iKSxiPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiXSx0aGlzLmxlbmd0aD0xKTpiPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oYjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndv''@;'; put 'put ''cmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGIsRCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYi5s''@;'; put 'put ''ZW5ndGgpLGIubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndv''@;'; put 'put ''cmRzW05dPTA7dmFyIGcsQyxTPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMSxnPTA7Tj49MDtOLT0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOLTFdPDw4fGJbTi0yXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0y''@;'; put 'put ''NiYmKFMtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3IoTj0wLGc9MDtOPGIubGVuZ3RoO04rPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04rMV08PDh8YltOKzJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYo''@;'; put 'put ''Uy09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oYixELEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoYi5sZW5ndGgtRCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5n''@;'; put 'put ''dGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgUyxnPTAsQz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTE7Tj49RDtOLT0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O2Vsc2Ug''@;'; put 'put ''Zm9yKE49KGIubGVuZ3RoLUQpJTI9PTA/RCsxOkQ7TjxiLmxlbmd0aDtOKz0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlQmFz''@;'; put 'put ''ZT1mdW5jdGlvbihiLEQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE49MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9RClOKys7Ti0tLGc9Zy9EfDA7Zm9yKHZhciBDPWIubGVuZ3RoLUgsUz1DJU4sdj1NYXRoLm1pbihDLEMtUykrSCxwPTAsdz1IO3c8djt3Kz1OKXA9Syhi''@;'; put 'put ''LHcsdytOLEQpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PVMpe3ZhciBKPTE7Zm9yKHA9SyhiLHcsYi5sZW5ndGgsRCksdz0wO3c8Uzt3KyspSio9RDt0aGlzLmltdWxuKEopLHRoaXMud29yZHNb''@;'; put 'put ''MF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aDtEKyspYi53b3Jkc1tEXT10aGlz''@;'; put 'put ''LndvcmRzW0RdO2IubGVuZ3RoPXRoaXMubGVuZ3RoLGIubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxiLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGIpLGJ9LE0ucHJvdG90eXBlLl9leHBhbmQ9ZnVu''@;'; put 'put ''Y3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTty''@;'; put 'put ''ZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LE0ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhp''@;'; put 'put ''cy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0saz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcs''@;'; put 'put ''Niw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxFPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYs''@;'; put 'put ''MTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0''@;'; put 'put ''MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK2IubGVuZ3RofDA7RC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBOPTB8Ry53b3Jkc1swXSxnPTB8Yi53b3Jkc1swXSxDPU4qZyx2PUMvNjcx''@;'; put 'put ''MDg4NjR8MDtELndvcmRzWzBdPTY3MTA4ODYzJkM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9yKHZhciB3PXY+Pj4yNixKPTY3MTA4ODYzJnYsbmU9TWF0aC5taW4ocCxiLmxlbmd0aC0xKSxkZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7ZGU8PW5lO2RlKyspdys9KEM9KE49MHxHLndvcmRz''@;'; put 'put ''W3AtZGV8MF0pKihnPTB8Yi53b3Jkc1tkZV0pK0opLzY3MTA4ODY0fDAsSj02NzEwODg2MyZDO0Qud29yZHNbcF09MHxKLHY9MHx3fXJldHVybiAwIT09dj9ELndvcmRzW3BdPTB8djpELmxlbmd0aC0tLEQuc3RyaXAoKX1NLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihiLEQpe3ZhciBI''@;'; put 'put ''O2lmKEQ9MHxEfHwxLDE2PT09KGI9Ynx8MTApfHwiaGV4Ij09PWIpe0g9IiI7Zm9yKHZhciBOPTAsZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy53b3Jkc1tDXSx2PSgxNjc3NzIxNSYoUzw8TnxnKSkudG9TdHJpbmcoMTYpO0g9MCE9KGc9Uz4+PjI0LU4mMTY3NzcyMTUp''@;'; put 'put ''fHxDIT09dGhpcy5sZW5ndGgtMT9JWzYtdi5sZW5ndGhdK3YrSDp2K0gsKE4rPTIpPj0yNiYmKE4tPTI2LEMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoYj09''@;'; put 'put ''PSgwfGIpJiZiPj0yJiZiPD0zNil7dmFyIHA9a1tiXSx3PUVbYl07SD0iIjt2YXIgSj10aGlzLmNsb25lKCk7Zm9yKEoubmVnYXRpdmU9MDshSi5pc1plcm8oKTspe3ZhciBuZT1KLm1vZG4odykudG9TdHJpbmcoYik7SD0oSj1KLmlkaXZuKHcpKS5pc1plcm8oKT9uZStIOklbcC1uZS5sZW5n''@;'; put 'put ''dGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciBiPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9iKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3Ro''@;'; put 'put ''PjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1iOmJ9LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sTS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24o''@;'; put 'put ''YixEKXtyZXR1cm4gbSh0eXBlb2YgTzwidSIpLHRoaXMudG9BcnJheUxpa2UoTyxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYixEKX0sTS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oYixELEgpe3Zh''@;'; put 'put ''ciBOPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxOKTttKE48PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB2LHAsQz0ibGUiPT09RCxTPW5ldyBi''@;'; put 'put ''KGcpLHc9dGhpcy5jbG9uZSgpO2lmKEMpe2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbcF09djtmb3IoO3A8ZztwKyspU1twXT0wfWVsc2V7Zm9yKHA9MDtwPGctTjtwKyspU1twXT0wO2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRs''@;'; put 'put ''bigyNTUpLHcuaXVzaHJuKDgpLFNbZy1wLTFdPXZ9cmV0dXJuIFN9LE0ucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihiKXtyZXR1cm4gMzItTWF0aC5jbHozMihiKX06ZnVuY3Rpb24oYil7dmFyIEQ9YixIPTA7cmV0dXJuIEQ+PTQwOTYmJihIKz0xMyxEPj4+PTEz''@;'; put 'put ''KSxEPj02NCYmKEgrPTcsRD4+Pj03KSxEPj04JiYoSCs9NCxEPj4+PTQpLEQ+PTImJihIKz0yLEQ+Pj49MiksSCtEfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYil7aWYoMD09PWIpcmV0dXJuIDI2O3ZhciBEPWIsSD0wO3JldHVybiA4MTkxJkR8fChIKz0xMyxEPj4+PTEzKSwx''@;'; put 'put ''MjcmRHx8KEgrPTcsRD4+Pj03KSwxNSZEfHwoSCs9NCxEPj4+PTQpLDMmRHx8KEgrPTIsRD4+Pj0yKSwxJkR8fEgrKyxIfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0''@;'; put 'put ''aGlzLmxlbmd0aC0xKStEfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBiPTAsRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0RdKTtpZihiKz1ILDI2IT09SClicmVh''@;'; put 'put ''a31yZXR1cm4gYn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGIpLmlhZGRu''@;'; put 'put ''KDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudGVzdG4oYi0xKT90aGlzLm5vdG4oYikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGIp''@;'; put 'put ''e2Zvcig7dGhpcy5sZW5ndGg8Yi5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl0aGlzLndvcmRzW0RdPXRoaXMud29yZHNbRF18Yi53b3Jkc1tEXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pb3I9ZnVuY3Rp''@;'; put 'put ''b24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVvcihiKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoYik6Yi5jbG9uZSgpLmlvcih0aGlzKX0sTS5wcm90b3R5''@;'; put 'put ''cGUudW9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihiKTpiLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYil7dmFyIEQ7RD10aGlzLmxlbmd0aD5iLmxlbmd0aD9iOnRoaXM7Zm9yKHZhciBI''@;'; put 'put ''PTA7SDxELmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJmIud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZl''@;'; put 'put ''KSksdGhpcy5pdWFuZChiKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChiKTpiLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+''@;'; put 'put ''Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGIpOmIuY2xvbmUoKS5pdWFuZCh0aGlzKX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oYil7dmFyIEQsSDt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oRD10aGlzLEg9Yik6KEQ9YixIPXRoaXMpO2Zvcih2YXIgTj0wO048SC5sZW5ndGg7Tisr''@;'; put 'put ''KXRoaXMud29yZHNbTl09RC53b3Jkc1tOXV5ILndvcmRzW05dO2lmKHRoaXMhPT1EKWZvcig7TjxELmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oYil7''@;'; put 'put ''cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoYil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoYik6Yi5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBl''@;'; put 'put ''LnV4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihiKTpiLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD0wfE1hdGguY2Vp''@;'; put 'put ''bChiLzI2KSxIPWIlMjY7dGhpcy5fZXhwYW5kKEQpLEg+MCYmRC0tO2Zvcih2YXIgTj0wO048RDtOKyspdGhpcy53b3Jkc1tOXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tOXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tOXT1+dGhpcy53b3Jkc1tOXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJp''@;'; put 'put ''cCgpfSxNLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oYil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYixEKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEg9Yi8yNnwwLE49YiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgr''@;'; put 'put ''MSksdGhpcy53b3Jkc1tIXT1EP3RoaXMud29yZHNbSF18MTw8Tjp0aGlzLndvcmRzW0hdJn4oMTw8TiksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIpe3ZhciBELEgsTjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCxEPXRoaXMuaXN1YihiKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiBiLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCk7dGhpcy5sZW5n''@;'; put 'put ''dGg+Yi5sZW5ndGg/KEg9dGhpcyxOPWIpOihIPWIsTj10aGlzKTtmb3IodmFyIGc9MCxDPTA7QzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKSsoMHxOLndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtmb3IoOzAhPT1nJiZDPEgubGVuZ3RoO0MrKyl0''@;'; put 'put ''aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pK2cpLGc9RD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7QzxILmxlbmd0aDtDKyspdGhpcy53''@;'; put 'put ''b3Jkc1tDXT1ILndvcmRzW0NdO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYil7dmFyIEQ7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLEQ9dGhpcy5zdWIoYiksYi5uZWdhdGl2ZV49MSxEKTowPT09Yi5uZWdhdGl2''@;'; put 'put ''ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxEPWIuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxEKTp0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChiKTpiLmNsb25lKCkuaWFkZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiKXtp''@;'; put 'put ''ZigwIT09Yi5uZWdhdGl2ZSl7Yi5uZWdhdGl2ZT0wO3ZhciBEPXRoaXMuaWFkZChiKTtyZXR1cm4gYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25v''@;'; put 'put ''cm1TaWduKCk7dmFyIE4sZyxIPXRoaXMuY21wKGIpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KE49dGhpcyxnPWIpOihOPWIsZz10aGlzKTtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspQz0oRD0o''@;'; put 'put ''MHxOLndvcmRzW1NdKS0oMHxnLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2Zvcig7MCE9PUMmJlM8Ti5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtpZigwPT09QyYmUzxOLmxlbmd0aCYmTiE9''@;'; put 'put ''PXRoaXMpZm9yKDtTPE4ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU4ud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMpLE4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoYil9O3ZhciBCPWZ1bmN0aW9uKGIsRCxIKXt2YXIgdixwLHcsTj1iLndvcmRzLGc9RC53b3JkcyxDPUgud29yZHMsUz0wLEo9MHxOWzBdLG5lPTgxOTEmSixkZT1KPj4+MTMsZmU9MHxOWzFdLHhlPTgxOTEmZmUsTGU9ZmU+Pj4xMyxGZT0wfE5bMl0s''@;'; put 'put ''T2U9ODE5MSZGZSxCZT1GZT4+PjEzLFdlPTB8TlszXSxLZT04MTkxJldlLFllPVdlPj4+MTMsSmU9MHxOWzRdLGx0PTgxOTEmSmUsUGU9SmU+Pj4xMyxiZT0wfE5bNV0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8Tls2XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMsaHQ9MHxOWzddLE1lPTgx''@;'; put 'put ''OTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfE5bOF0saXQ9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8Tls5XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxnWzBdLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfGdbMV0sV249ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8Z1syXSxObj04MTkxJiRu''@;'; put 'put ''LGZ0PSRuPj4+MTMsZm49MHxnWzNdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfGdbNF0sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLHZuPTB8Z1s1XSxydD04MTkxJnZuLEl0PXZuPj4+MTMsSnQ9MHxnWzZdLER0PTgxOTEmSnQscHQ9SnQ+Pj4xMyxZdD0wfGdbN10sTG49ODE5MSZZdCx6dD1Z''@;'; put 'put ''dD4+PjEzLHluPTB8Z1s4XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHxnWzldLE9uPTgxOTEmQm4sJHQ9Qm4+Pj4xMztILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgRm49KFMrKHY9TWF0aC5pbXVsKG5lLENuKSl8MCkrKCg4MTkxJihwPShwPU1h''@;'; put 'put ''dGguaW11bChuZSxVdCkpK01hdGguaW11bChkZSxDbil8MCkpPDwxMyl8MDtTPSgodz1NYXRoLmltdWwoZGUsVXQpKSsocD4+PjEzKXwwKSsoRm4+Pj4yNil8MCxGbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoeGUsQ24pLHA9KHA9TWF0aC5pbXVsKHhlLFV0KSkrTWF0aC5pbXVsKExlLENuKXww''@;'; put 'put ''LHc9TWF0aC5pbXVsKExlLFV0KTt2YXIgbmk9KFMrKHY9ditNYXRoLmltdWwobmUsV24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGRlLFduKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGVuKXwwKSsocD4+PjEzKXwwKSsobmk+''@;'; put 'put ''Pj4yNil8MCxuaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoT2UsQ24pLHA9KHA9TWF0aC5pbXVsKE9lLFV0KSkrTWF0aC5pbXVsKEJlLENuKXwwLHc9TWF0aC5pbXVsKEJlLFV0KSx2PXYrTWF0aC5pbXVsKHhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bChMZSxX''@;'; put 'put ''bil8MCx3PXcrTWF0aC5pbXVsKExlLGVuKXwwO3ZhciBsbj0oUysodj12K01hdGguaW11bChuZSxObil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwoZGUsTm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZnQpfDApKyhwPj4+MTMp''@;'; put 'put ''fDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2Myx2PU1hdGguaW11bChLZSxDbikscD0ocD1NYXRoLmltdWwoS2UsVXQpKStNYXRoLmltdWwoWWUsQ24pfDAsdz1NYXRoLmltdWwoWWUsVXQpLHY9ditNYXRoLmltdWwoT2UsV24pfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEJlLFduKXwwLHc9dytNYXRoLmltdWwoQmUsZW4pfDAsdj12K01hdGguaW11bCh4ZSxObil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoTGUsTm4pfDAsdz13K01hdGguaW11bChMZSxmdCl8MDt2YXIgam49KFMrKHY9ditNYXRoLmltdWwobmUsaG4pfDApfDAp''@;'; put 'put ''KygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx3dCl8MCkrTWF0aC5pbXVsKGRlLGhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHd0KXwwKSsocD4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwobHQsQ24pLHA9KHA9TWF0aC5pbXVsKGx0''@;'; put 'put ''LFV0KSkrTWF0aC5pbXVsKFBlLENuKXwwLHc9TWF0aC5pbXVsKFBlLFV0KSx2PXYrTWF0aC5pbXVsKEtlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChZZSxXbil8MCx3PXcrTWF0aC5pbXVsKFllLGVuKXwwLHY9ditNYXRoLmltdWwoT2UsTm4pfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKEJlLE5uKXwwLHc9dytNYXRoLmltdWwoQmUsZnQpfDAsdj12K01hdGguaW11bCh4ZSxobil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoTGUsaG4pfDAsdz13K01hdGguaW11bChMZSx3dCl8MDt2YXIgcXI9KFMr''@;'; put 'put ''KHY9ditNYXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxOdCl8MCkrTWF0aC5pbXVsKGRlLF90KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLE50KXwwKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmlt''@;'; put 'put ''dWwoQWUsQ24pLHA9KHA9TWF0aC5pbXVsKEFlLFV0KSkrTWF0aC5pbXVsKFRlLENuKXwwLHc9TWF0aC5pbXVsKFRlLFV0KSx2PXYrTWF0aC5pbXVsKGx0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZW4pfDApK01hdGguaW11bChQZSxXbil8MCx3PXcrTWF0aC5pbXVsKFBlLGVuKXwwLHY9''@;'; put 'put ''ditNYXRoLmltdWwoS2UsTm4pfDAscD0ocD1wK01hdGguaW11bChLZSxmdCl8MCkrTWF0aC5pbXVsKFllLE5uKXwwLHc9dytNYXRoLmltdWwoWWUsZnQpfDAsdj12K01hdGguaW11bChPZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHd0KXwwKStNYXRoLmltdWwoQmUsaG4pfDAsdz13K01h''@;'; put 'put ''dGguaW11bChCZSx3dCl8MCx2PXYrTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsTnQpfDApK01hdGguaW11bChMZSxfdCl8MCx3PXcrTWF0aC5pbXVsKExlLE50KXwwO3ZhciBnaT0oUysodj12K01hdGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0''@;'; put 'put ''aC5pbXVsKG5lLEl0KXwwKStNYXRoLmltdWwoZGUscnQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsSXQpfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChYZSxDbikscD0ocD1NYXRoLmltdWwoWGUsVXQpKStNYXRoLmltdWwoVWUs''@;'; put 'put ''Q24pfDAsdz1NYXRoLmltdWwoVWUsVXQpLHY9ditNYXRoLmltdWwoQWUsV24pfDAscD0ocD1wK01hdGguaW11bChBZSxlbil8MCkrTWF0aC5pbXVsKFRlLFduKXwwLHc9dytNYXRoLmltdWwoVGUsZW4pfDAsdj12K01hdGguaW11bChsdCxObil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZ0KXww''@;'; put 'put ''KStNYXRoLmltdWwoUGUsTm4pfDAsdz13K01hdGguaW11bChQZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEtlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCx3PXcrTWF0aC5pbXVsKFllLHd0KXwwLHY9ditNYXRoLmltdWwoT2UsX3QpfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKEJlLF90KXwwLHc9dytNYXRoLmltdWwoQmUsTnQpfDAsdj12K01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEl0KXwwKStNYXRoLmltdWwoTGUscnQpfDAsdz13K01hdGguaW11bChMZSxJdCl8MDt2YXIgeHI9KFMr''@;'; put 'put ''KHY9ditNYXRoLmltdWwobmUsRHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwdCl8MCkrTWF0aC5pbXVsKGRlLER0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHB0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmlt''@;'; put 'put ''dWwoTWUsQ24pLHA9KHA9TWF0aC5pbXVsKE1lLFV0KSkrTWF0aC5pbXVsKERlLENuKXwwLHc9TWF0aC5pbXVsKERlLFV0KSx2PXYrTWF0aC5pbXVsKFhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZW4pfDApK01hdGguaW11bChVZSxXbil8MCx3PXcrTWF0aC5pbXVsKFVlLGVuKXwwLHY9''@;'; put 'put ''ditNYXRoLmltdWwoQWUsTm4pfDAscD0ocD1wK01hdGguaW11bChBZSxmdCl8MCkrTWF0aC5pbXVsKFRlLE5uKXwwLHc9dytNYXRoLmltdWwoVGUsZnQpfDAsdj12K01hdGguaW11bChsdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsdz13K01h''@;'; put 'put ''dGguaW11bChQZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFllLE50KXwwLHY9ditNYXRoLmltdWwoT2UscnQpfDAscD0ocD1wK01hdGguaW11bChPZSxJdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEJlLHJ0KXwwLHc9dytNYXRoLmltdWwoQmUsSXQpfDAsdj12K01hdGguaW11bCh4ZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoTGUsRHQpfDAsdz13K01hdGguaW11bChMZSxwdCl8MDt2YXIgVWk9KFMrKHY9ditNYXRoLmltdWwobmUsTG4pfDApfDAp''@;'; put 'put ''KygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGRlLExuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHp0KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoaXQsQ24pLHA9KHA9TWF0aC5pbXVsKGl0''@;'; put 'put ''LFV0KSkrTWF0aC5pbXVsKHV0LENuKXwwLHc9TWF0aC5pbXVsKHV0LFV0KSx2PXYrTWF0aC5pbXVsKE1lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bChEZSxXbil8MCx3PXcrTWF0aC5pbXVsKERlLGVuKXwwLHY9ditNYXRoLmltdWwoWGUsTm4pfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLE5uKXwwLHc9dytNYXRoLmltdWwoVWUsZnQpfDAsdj12K01hdGguaW11bChBZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmltdWwoVGUsaG4pfDAsdz13K01hdGguaW11bChUZSx3dCl8MCx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKGx0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsTnQpfDApK01hdGguaW11bChQZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFBlLE50KXwwLHY9ditNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxJdCl8MCkrTWF0aC5pbXVsKFllLHJ0KXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''WWUsSXQpfDAsdj12K01hdGguaW11bChPZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLHB0KXwwKStNYXRoLmltdWwoQmUsRHQpfDAsdz13K01hdGguaW11bChCZSxwdCl8MCx2PXYrTWF0aC5pbXVsKHhlLExuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bChMZSxM''@;'; put 'put ''bil8MCx3PXcrTWF0aC5pbXVsKExlLHp0KXwwO3ZhciBLcj0oUysodj12K01hdGguaW11bChuZSx4bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwoZGUseG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsc24pfDApKyhwPj4+MTMp''@;'; put 'put ''fDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxDbikscD0ocD1NYXRoLmltdWwoSHQsVXQpKStNYXRoLmltdWwoUHQsQ24pfDAsdz1NYXRoLmltdWwoUHQsVXQpLHY9ditNYXRoLmltdWwoaXQsV24pfDAscD0ocD1wK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHV0LFduKXwwLHc9dytNYXRoLmltdWwodXQsZW4pfDAsdj12K01hdGguaW11bChNZSxObil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsTm4pfDAsdz13K01hdGguaW11bChEZSxmdCl8MCx2PXYrTWF0aC5pbXVsKFhlLGhuKXwwLHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoWGUsd3QpfDApK01hdGguaW11bChVZSxobil8MCx3PXcrTWF0aC5pbXVsKFVlLHd0KXwwLHY9ditNYXRoLmltdWwoQWUsX3QpfDAscD0ocD1wK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLHc9dytNYXRoLmltdWwoVGUsTnQpfDAsdj12K01hdGguaW11bChsdCxy''@;'; put 'put ''dCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEl0KXwwKStNYXRoLmltdWwoUGUscnQpfDAsdz13K01hdGguaW11bChQZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEtlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscHQpfDApK01hdGguaW11bChZZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFllLHB0KXww''@;'; put 'put ''LHY9ditNYXRoLmltdWwoT2UsTG4pfDAscD0ocD1wK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKEJlLExuKXwwLHc9dytNYXRoLmltdWwoQmUsenQpfDAsdj12K01hdGguaW11bCh4ZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwoTGUseG4pfDAsdz13''@;'; put 'put ''K01hdGguaW11bChMZSxzbil8MDt2YXIgbm89KFMrKHY9ditNYXRoLmltdWwobmUsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKGRlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+''@;'; put 'put ''Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsV24pLHA9KHA9TWF0aC5pbXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLHc9TWF0aC5pbXVsKFB0LGVuKSx2PXYrTWF0aC5pbXVsKGl0LE5uKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCh1dCxO''@;'; put 'put ''bil8MCx3PXcrTWF0aC5pbXVsKHV0LGZ0KXwwLHY9ditNYXRoLmltdWwoTWUsaG4pfDAscD0ocD1wK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHc9dytNYXRoLmltdWwoRGUsd3QpfDAsdj12K01hdGguaW11bChYZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLE50''@;'; put 'put ''KXwwKStNYXRoLmltdWwoVWUsX3QpfDAsdz13K01hdGguaW11bChVZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEFlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsSXQpfDApK01hdGguaW11bChUZSxydCl8MCx3PXcrTWF0aC5pbXVsKFRlLEl0KXwwLHY9ditNYXRoLmltdWwobHQsRHQpfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXwwLHc9dytNYXRoLmltdWwoUGUscHQpfDAsdj12K01hdGguaW11bChLZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRoLmltdWwoWWUsTG4pfDAsdz13K01hdGguaW11bChZZSx6dCl8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKE9lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChCZSx4bil8MCx3PXcrTWF0aC5pbXVsKEJlLHNuKXwwO3ZhciBGcj0oUysodj12K01hdGguaW11bCh4ZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoTGUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoTGUsJHQpfDApKyhwPj4+MTMpfDApKyhGcj4+PjI2KXwwLEZyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxObikscD0ocD1NYXRoLmltdWwoSHQsZnQpKStNYXRoLmltdWwoUHQsTm4pfDAsdz1NYXRoLmltdWwoUHQsZnQp''@;'; put 'put ''LHY9ditNYXRoLmltdWwoaXQsaG4pfDAscD0ocD1wK01hdGguaW11bChpdCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHc9dytNYXRoLmltdWwodXQsd3QpfDAsdj12K01hdGguaW11bChNZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsdz13''@;'; put 'put ''K01hdGguaW11bChEZSxOdCl8MCx2PXYrTWF0aC5pbXVsKFhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsSXQpfDApK01hdGguaW11bChVZSxydCl8MCx3PXcrTWF0aC5pbXVsKFVlLEl0KXwwLHY9ditNYXRoLmltdWwoQWUsRHQpfDAscD0ocD1wK01hdGguaW11bChBZSxwdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFRlLER0KXwwLHc9dytNYXRoLmltdWwoVGUscHQpfDAsdj12K01hdGguaW11bChsdCxMbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsTG4pfDAsdz13K01hdGguaW11bChQZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEtlLHhuKXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoS2Usc24pfDApK01hdGguaW11bChZZSx4bil8MCx3PXcrTWF0aC5pbXVsKFllLHNuKXwwO3ZhciBxaT0oUysodj12K01hdGguaW11bChPZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLCR0KXwwKStNYXRoLmltdWwoQmUsT24pfDApKTw8MTMpfDA7Uz0oKHc9''@;'; put 'put ''dytNYXRoLmltdWwoQmUsJHQpfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxobikscD0ocD1NYXRoLmltdWwoSHQsd3QpKStNYXRoLmltdWwoUHQsaG4pfDAsdz1NYXRoLmltdWwoUHQsd3QpLHY9ditNYXRoLmltdWwoaXQsX3QpfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChpdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXwwLHc9dytNYXRoLmltdWwodXQsTnQpfDAsdj12K01hdGguaW11bChNZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLEl0KXwwKStNYXRoLmltdWwoRGUscnQpfDAsdz13K01hdGguaW11bChEZSxJdCl8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKFhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUscHQpfDApK01hdGguaW11bChVZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFVlLHB0KXwwLHY9ditNYXRoLmltdWwoQWUsTG4pfDAscD0ocD1wK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKFRlLExuKXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoVGUsenQpfDAsdj12K01hdGguaW11bChsdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsdz13K01hdGguaW11bChQZSxzbil8MDt2YXIgSmk9KFMrKHY9ditNYXRoLmltdWwoS2UsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11''@;'; put 'put ''bChLZSwkdCl8MCkrTWF0aC5pbXVsKFllLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFllLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsX3QpLHA9KHA9TWF0aC5pbXVsKEh0LE50KSkrTWF0aC5pbXVsKFB0LF90KXww''@;'; put 'put ''LHc9TWF0aC5pbXVsKFB0LE50KSx2PXYrTWF0aC5pbXVsKGl0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsSXQpfDApK01hdGguaW11bCh1dCxydCl8MCx3PXcrTWF0aC5pbXVsKHV0LEl0KXwwLHY9ditNYXRoLmltdWwoTWUsRHQpfDAscD0ocD1wK01hdGguaW11bChNZSxwdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKERlLER0KXwwLHc9dytNYXRoLmltdWwoRGUscHQpfDAsdj12K01hdGguaW11bChYZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsTG4pfDAsdz13K01hdGguaW11bChVZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEFlLHhuKXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoQWUsc24pfDApK01hdGguaW11bChUZSx4bil8MCx3PXcrTWF0aC5pbXVsKFRlLHNuKXwwO3ZhciBhbz0oUysodj12K01hdGguaW11bChsdCxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LCR0KXwwKStNYXRoLmltdWwoUGUsT24pfDApKTw8MTMpfDA7Uz0oKHc9''@;'; put 'put ''dytNYXRoLmltdWwoUGUsJHQpfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxydCkscD0ocD1NYXRoLmltdWwoSHQsSXQpKStNYXRoLmltdWwoUHQscnQpfDAsdz1NYXRoLmltdWwoUHQsSXQpLHY9ditNYXRoLmltdWwoaXQsRHQpfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChpdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLHc9dytNYXRoLmltdWwodXQscHQpfDAsdj12K01hdGguaW11bChNZSxMbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwoRGUsTG4pfDAsdz13K01hdGguaW11bChEZSx6dCl8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKFhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsc24pfDApK01hdGguaW11bChVZSx4bil8MCx3PXcrTWF0aC5pbXVsKFVlLHNuKXwwO3ZhciBybz0oUysodj12K01hdGguaW11bChBZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEFlLCR0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoVGUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVGUsJHQpfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxEdCkscD0ocD1NYXRoLmltdWwoSHQscHQpKStNYXRoLmltdWwoUHQsRHQpfDAsdz1NYXRoLmltdWwoUHQscHQp''@;'; put 'put ''LHY9ditNYXRoLmltdWwoaXQsTG4pfDAscD0ocD1wK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKHV0LExuKXwwLHc9dytNYXRoLmltdWwodXQsenQpfDAsdj12K01hdGguaW11bChNZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwoRGUseG4pfDAsdz13''@;'; put 'put ''K01hdGguaW11bChEZSxzbil8MDt2YXIgaW89KFMrKHY9ditNYXRoLmltdWwoWGUsT24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLE9uKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsoaW8+''@;'; put 'put ''Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsTG4pLHA9KHA9TWF0aC5pbXVsKEh0LHp0KSkrTWF0aC5pbXVsKFB0LExuKXwwLHc9TWF0aC5pbXVsKFB0LHp0KSx2PXYrTWF0aC5pbXVsKGl0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCh1dCx4''@;'; put 'put ''bil8MCx3PXcrTWF0aC5pbXVsKHV0LHNuKXwwO3ZhciBHaT0oUysodj12K01hdGguaW11bChNZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoRGUsJHQpfDApKyhwPj4+MTMp''@;'; put 'put ''fDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCx4bikscD0ocD1NYXRoLmltdWwoSHQsc24pKStNYXRoLmltdWwoUHQseG4pfDAsdz1NYXRoLmltdWwoUHQsc24pO3ZhciBobz0oUysodj12K01hdGguaW11bChpdCxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0''@;'; put 'put ''aC5pbXVsKGl0LCR0KXwwKStNYXRoLmltdWwodXQsT24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwodXQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgeXI9KFMrKHY9TWF0aC5pbXVsKEh0LE9uKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11''@;'; put 'put ''bChIdCwkdCkpK01hdGguaW11bChQdCxPbil8MCkpPDwxMyl8MDtyZXR1cm4gUz0oKHc9TWF0aC5pbXVsKFB0LCR0KSkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLENbMF09Rm4sQ1sxXT1uaSxDWzJdPWxuLENbM109am4sQ1s0XT1xcixDWzVdPWdpLENbNl09eHIsQ1s3''@;'; put 'put ''XT1VaSxDWzhdPUtyLENbOV09bm8sQ1sxMF09RnIsQ1sxMV09cWksQ1sxMl09SmksQ1sxM109YW8sQ1sxNF09cm8sQ1sxNV09aW8sQ1sxNl09R2ksQ1sxN109aG8sQ1sxOF09eXIsMCE9PVMmJihDWzE5XT1TLEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFgoRyxiLEQpe3JldHVybihuZXcgVSku''@;'; put 'put ''bXVscChHLGIsRCl9ZnVuY3Rpb24gVShHLGIpe3RoaXMueD1HLHRoaXMueT1ifU1hdGguaW11bHx8KEI9ViksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMubGVuZ3RoK2IubGVuZ3RoO3JldHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Yi5sZW5ndGg/''@;'; put 'put ''Qih0aGlzLGIsRCk6Tjw2Mz9WKHRoaXMsYixEKTpOPDEwMjQ/ZnVuY3Rpb24gWShHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmUsRC5sZW5ndGg9Ry5sZW5ndGgrYi5sZW5ndGg7Zm9yKHZhciBIPTAsTj0wLGc9MDtnPEQubGVuZ3RoLTE7ZysrKXt2YXIgQz1OO049MDtm''@;'; put 'put ''b3IodmFyIFM9NjcxMDg4NjMmSCx2PU1hdGgubWluKGcsYi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9djtwKyspe3ZhciBkZT0oMHxHLndvcmRzW2ctcF0pKigwfGIud29yZHNbcF0pLGZlPTY3MTA4ODYzJmRlO1M9NjcxMDg4NjMmKGZlPWZlK1N8MCksTis9KEM9''@;'; put 'put ''KEM9QysoZGUvNjcxMDg4NjR8MCl8MCkrKGZlPj4+MjYpfDApPj4+MjYsQyY9NjcxMDg4NjN9RC53b3Jkc1tnXT1TLEg9QyxDPU59cmV0dXJuIDAhPT1IP0Qud29yZHNbZ109SDpELmxlbmd0aC0tLEQuc3RyaXAoKX0odGhpcyxiLEQpOlgodGhpcyxiLEQpLEh9LFUucHJvdG90eXBlLm1ha2VS''@;'; put 'put ''QlQ9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPU0ucHJvdG90eXBlLl9jb3VudEJpdHMoYiktMSxOPTA7TjxiO04rKylEW05dPXRoaXMucmV2QmluKE4sSCxiKTtyZXR1cm4gRH0sVS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGIsRCxIKXtpZigwPT09Ynx8Yj09PUgt''@;'; put 'put ''MSlyZXR1cm4gYjtmb3IodmFyIE49MCxnPTA7ZzxEO2crKylOfD0oMSZiKTw8RC1nLTEsYj4+PTE7cmV0dXJuIE59LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oYixELEgsTixnLEMpe2Zvcih2YXIgUz0wO1M8QztTKyspTltTXT1EW2JbU11dLGdbU109SFtiW1NdXX0sVS5wcm90b3R5''@;'; put 'put ''cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXt0aGlzLnBlcm11dGUoQyxiLEQsSCxOLGcpO2Zvcih2YXIgUz0xO1M8ZztTPDw9MSlmb3IodmFyIHY9Uzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS92KSx3PU1hdGguc2luKDIqTWF0aC5QSS92KSxKPTA7SjxnO0orPXYpZm9yKHZh''@;'; put 'put ''ciBuZT1wLGRlPXcsZmU9MDtmZTxTO2ZlKyspe3ZhciB4ZT1IW0orZmVdLExlPU5bSitmZV0sRmU9SFtKK2ZlK1NdLE9lPU5bSitmZStTXSxCZT1uZSpGZS1kZSpPZTtPZT1uZSpPZStkZSpGZSxIW0orZmVdPXhlKyhGZT1CZSksTltKK2ZlXT1MZStPZSxIW0orZmUrU109eGUtRmUsTltKK2Zl''@;'; put 'put ''K1NdPUxlLU9lLGZlIT09diYmKEJlPXAqbmUtdypkZSxkZT1wKmRlK3cqbmUsbmU9QmUpfX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oYixEKXt2YXIgSD0xfE1hdGgubWF4KEQsYiksTj0xJkgsZz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK059''@;'; put 'put ''LFUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihiLEQsSCl7aWYoIShIPD0xKSlmb3IodmFyIE49MDtOPEgvMjtOKyspe3ZhciBnPWJbTl07YltOXT1iW0gtTi0xXSxiW0gtTi0xXT1nLGc9RFtOXSxEW05dPS1EW0gtTi0xXSxEW0gtTi0xXT0tZ319LFUucHJvdG90eXBlLm5vcm1hbGl6''@;'; put 'put ''ZTEzYj1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD0wLE49MDtOPEQvMjtOKyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZChiWzIqTisxXS9EKStNYXRoLnJvdW5kKGJbMipOXS9EKStIO2JbTl09NjcxMDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIGJ9LFUucHJvdG90''@;'; put 'put ''eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oYixELEgsTil7Zm9yKHZhciBnPTAsQz0wO0M8RDtDKyspSFsyKkNdPTgxOTEmKGcrPTB8YltDXSksSFsyKkMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoQz0yKkQ7QzxOOysrQylIW0NdPTA7bSgwPT09ZyksbSgwPT0oLTgxOTImZykpfSxV''@;'; put 'put ''LnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD0wO0g8YjtIKyspRFtIXT0wO3JldHVybiBEfSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj0yKnRoaXMuZ3Vlc3NMZW4xM2IoYi5sZW5ndGgsRC5sZW5ndGgpLGc9dGhpcy5t''@;'; put 'put ''YWtlUkJUKE4pLEM9dGhpcy5zdHViKE4pLFM9bmV3IEFycmF5KE4pLHY9bmV3IEFycmF5KE4pLHA9bmV3IEFycmF5KE4pLHc9bmV3IEFycmF5KE4pLEo9bmV3IEFycmF5KE4pLG5lPW5ldyBBcnJheShOKSxkZT1ILndvcmRzO2RlLmxlbmd0aD1OLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIu''@;'; put 'put ''bGVuZ3RoLFMsTiksdGhpcy5jb252ZXJ0MTNiKEQud29yZHMsRC5sZW5ndGgsdyxOKSx0aGlzLnRyYW5zZm9ybShTLEMsdixwLE4sZyksdGhpcy50cmFuc2Zvcm0odyxDLEosbmUsTixnKTtmb3IodmFyIGZlPTA7ZmU8TjtmZSsrKXt2YXIgeGU9dltmZV0qSltmZV0tcFtmZV0qbmVbZmVdO3Bb''@;'; put 'put ''ZmVdPXZbZmVdKm5lW2ZlXStwW2ZlXSpKW2ZlXSx2W2ZlXT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUodixwLE4pLHRoaXMudHJhbnNmb3JtKHYscCxkZSxDLE4sZyksdGhpcy5jb25qdWdhdGUoZGUsQyxOKSx0aGlzLm5vcm1hbGl6ZTEzYihkZSxOKSxILm5lZ2F0aXZlPWIubmVnYXRpdmVe''@;'; put 'put ''RC5uZWdhdGl2ZSxILmxlbmd0aD1iLmxlbmd0aCtELmxlbmd0aCxILnN0cmlwKCl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLHRoaXMubXVsVG8oYixEKX0sTS5wcm90''@;'; put 'put ''b3R5cGUubXVsZj1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLFgodGhpcyxiLEQpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oYix0aGlzKX0s''@;'; put 'put ''TS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCk7Zm9yKHZhciBEPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSpiLGc9KDY3MTA4ODYzJk4pKyg2NzEwODg2MyZEKTtEPj49MjYsRCs9''@;'; put 'put ''Ti82NzEwODg2NHwwLEQrPWc+Pj4yNix0aGlzLndvcmRzW0hdPTY3MTA4ODYzJmd9cmV0dXJuIDAhPT1EJiYodGhpcy53b3Jkc1tIXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihiKX0sTS5wcm90''@;'; put 'put ''b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxNLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYil7dmFyIEQ9ZnVuY3Rpb24gaihHKXtmb3IodmFyIGI9bmV3''@;'; put 'put ''IEFycmF5KEcuYml0TGVuZ3RoKCkpLEQ9MDtEPGIubGVuZ3RoO0QrKyl7dmFyIE49RCUyNjtiW0RdPShHLndvcmRzW0QvMjZ8MF0mMTw8Tik+Pj5OfXJldHVybiBifShiKTtpZigwPT09RC5sZW5ndGgpcmV0dXJuIG5ldyBNKDEpO2Zvcih2YXIgSD10aGlzLE49MDtOPEQubGVuZ3RoJiYwPT09''@;'; put 'put ''RFtOXTtOKyssSD1ILnNxcigpKTtpZigrK048RC5sZW5ndGgpZm9yKHZhciBnPUguc3FyKCk7TjxELmxlbmd0aDtOKyssZz1nLnNxcigpKTAhPT1EW05dJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LE0ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYm''@;'; put 'put ''Yj49MCk7dmFyIGcsRD1iJTI2LEg9KGItRCkvMjYsTj02NzEwODg2Mz4+PjI2LUQ8PDI2LUQ7aWYoMCE9PUQpe3ZhciBDPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy53b3Jkc1tnXSZOO3RoaXMud29yZHNbZ109KDB8dGhpcy53b3Jkc1tnXSktUzw8RHxDLEM9Uz4+''@;'; put 'put ''PjI2LUR9QyYmKHRoaXMud29yZHNbZ109Qyx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8SDtnKyspdGhpcy53b3Jkc1tnXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTjttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCksTj1EPyhELUQl''@;'; put 'put ''MjYpLzI2OjA7dmFyIGc9YiUyNixDPU1hdGgubWluKChiLWcpLzI2LHRoaXMubGVuZ3RoKSxTPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8Zyx2PUg7aWYoTi09QyxOPU1hdGgubWF4KDAsTiksdil7Zm9yKHZhciBwPTA7cDxDO3ArKyl2LndvcmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9''@;'; put 'put ''Q31pZigwIT09QylpZih0aGlzLmxlbmd0aD5DKWZvcih0aGlzLmxlbmd0aC09QyxwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdz0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49''@;'; put 'put ''MCYmKDAhPT13fHxwPj1OKTtwLS0pe3ZhciBKPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPXc8PDI2LWd8Sj4+Pmcsdz1KJlN9cmV0dXJuIHYmJjAhPT13JiYodi53b3Jkc1t2Lmxlbmd0aCsrXT13KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9''@;'; put 'put ''MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGIsRCxIKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGIpfSxNLnByb3Rv''@;'; put 'put ''dHlwZS51c2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihiKX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGIpfSxNLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1''@;'; put 'put ''c2hybihiKX0sTS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8RCkpfSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24o''@;'; put 'put ''Yil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PUQmJkgrKyx0aGlzLmxlbmd0''@;'; put 'put ''aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09RCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+RDw8RCksdGhpcy5zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYil9LE0u''@;'; put 'put ''cHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGIpe3JldHVybiBtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDA/dGhpcy5pc3VibigtYik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxiPyh0aGlzLndvcmRzWzBdPWItKDB8''@;'; put 'put ''dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oYil9LE0ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihiKXt0aGlzLndvcmRzWzBdKz1iO2Zvcih2YXIgRD0w''@;'; put 'put ''O0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF0+PTY3MTA4ODY0O0QrKyl0aGlzLndvcmRzW0RdLT02NzEwODg2NCxEPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0QrMV09MTp0aGlzLndvcmRzW0QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsRCsx''@;'; put 'put ''KSx0aGlzfSxNLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihiKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDApcmV0dXJuIHRoaXMuaWFkZG4oLWIpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihiKSx0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1iLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXTwwO0Qr''@;'; put 'put ''Kyl0aGlzLndvcmRzW0RdKz02NzEwODg2NCx0aGlzLndvcmRzW0QrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGIpfSxNLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaXN1Ym4oYil9LE0ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxNLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24o''@;'; put 'put ''YixELEgpe3ZhciBnO3RoaXMuX2V4cGFuZChiLmxlbmd0aCtIKTt2YXIgQyxTPTA7Zm9yKGc9MDtnPGIubGVuZ3RoO2crKyl7Qz0oMHx0aGlzLndvcmRzW2crSF0pK1M7dmFyIHY9KDB8Yi53b3Jkc1tnXSkqRDtTPSgoQy09NjcxMDg4NjMmdik+PjI2KS0odi82NzEwODg2NHwwKSx0aGlzLndv''@;'; put 'put ''cmRzW2crSF09NjcxMDg4NjMmQ31mb3IoO2c8dGhpcy5sZW5ndGgtSDtnKyspUz0oQz0oMHx0aGlzLndvcmRzW2crSF0pK1MpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQztpZigwPT09UylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihtKC0xPT09UyksUz0wLGc9MDtnPHRoaXMubGVu''@;'; put 'put ''Z3RoO2crKylTPShDPS0oMHx0aGlzLndvcmRzW2ddKStTKT4+MjYsdGhpcy53b3Jkc1tnXT02NzEwODg2MyZDO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5jbG9uZSgpLGc9YixDPTB8''@;'; put 'put ''Zy53b3Jkc1tnLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMoQykpJiYoZz1nLnVzaGxuKEgpLE4uaXVzaGxuKEgpLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCx2PU4ubGVuZ3RoLWcubGVuZ3RoO2lmKCJtb2QiIT09RCl7KHA9bmV3IE0obnVsbCkpLmxlbmd0aD12''@;'; put 'put ''KzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgdz0wO3c8cC5sZW5ndGg7dysrKXAud29yZHNbd109MH12YXIgSj1OLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSx2KTswPT09Si5uZWdhdGl2ZSYmKE49SixwJiYocC53b3Jkc1t2XT0xKSk7Zm9yKHZhciBuZT12LTE7bmU+''@;'; put 'put ''PTA7bmUtLSl7dmFyIGRlPTY3MTA4ODY0KigwfE4ud29yZHNbZy5sZW5ndGgrbmVdKSsoMHxOLndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IoZGU9TWF0aC5taW4oZGUvQ3wwLDY3MTA4ODYzKSxOLl9pc2hsbnN1Ym11bChnLGRlLG5lKTswIT09Ti5uZWdhdGl2ZTspZGUtLSxOLm5lZ2F0aXZl''@;'; put 'put ''PTAsTi5faXNobG5zdWJtdWwoZywxLG5lKSxOLmlzWmVybygpfHwoTi5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPWRlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE4uc3RyaXAoKSwiZGl2IiE9PUQmJjAhPT1IJiZOLml1c2hybihIKSx7ZGl2OnB8fG51bGwsbW9kOk59fSxNLnByb3RvdHlw''@;'; put 'put ''ZS5kaXZtb2Q9ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKCFiLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYixEKSwibW9kIiE9PUQmJihOPUMu''@;'; put 'put ''ZGl2Lm5lZygpKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlhZGQoYikpLHtkaXY6Tixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZT8oQz10aGlzLmRpdm1vZChiLm5lZygpLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVn''@;'; put 'put ''KCkpLHtkaXY6Tixtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYi5uZWcoKSxEKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlzdWIoYikpLHtkaXY6Qy5kaXYsbW9kOmd9KTpiLmxlbmd0aD50''@;'; put 'put ''aGlzLmxlbmd0aHx8dGhpcy5jbXAoYik8MD97ZGl2Om5ldyBNKDApLG1vZDp0aGlzfToxPT09Yi5sZW5ndGg/ImRpdiI9PT1EP3tkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUQ/e2RpdjpudWxsLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp7''@;'; put 'put ''ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihiLEQpO3ZhciBOLGcsQ30sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJkaXYiLCExKS5kaXZ9LE0ucHJvdG90eXBl''@;'; put 'put ''Lm1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMSkubW9kfSxNLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEwKS5tb2R9LE0ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuZGl2''@;'; put 'put ''bW9kKGIpO2lmKEQubW9kLmlzWmVybygpKXJldHVybiBELmRpdjt2YXIgSD0wIT09RC5kaXYubmVnYXRpdmU/RC5tb2QuaXN1YihiKTpELm1vZCxOPWIudXNocm4oMSksZz1iLmFuZGxuKDEpLEM9SC5jbXAoTik7cmV0dXJuIEM8MHx8MT09PWcmJjA9PT1DP0QuZGl2OjAhPT1ELmRpdi5uZWdh''@;'; put 'put ''dGl2ZT9ELmRpdi5pc3VibigxKTpELmRpdi5pYWRkbigxKX0sTS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9KDE8PDI2KSViLEg9MCxOPXRoaXMubGVuZ3RoLTE7Tj49MDtOLS0pSD0oRCpIKygwfHRoaXMud29yZHNbTl0pKSViO3JldHVybiBI''@;'; put 'put ''fSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0KkQ7dGhpcy53b3Jkc1tIXT1OL2J8MCxEPU4lYn1yZXR1cm4gdGhpcy5zdHJpcCgp''@;'; put 'put ''fSxNLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oYil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0Qu''@;'; put 'put ''dW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1uZXcgTSgwKSxTPW5ldyBNKDEpLHY9MDtELmlzRXZlbigpJiZILmlzRXZlbigpOylELml1c2hybigxKSxILml1c2hybigxKSwrK3Y7Zm9yKHZhciBwPUguY2xvbmUoKSx3PUQuY2xvbmUoKTshRC5pc1pl''@;'; put 'put ''cm8oKTspe2Zvcih2YXIgSj0wLG5lPTE7IShELndvcmRzWzBdJm5lKSYmSjwyNjsrK0osbmU8PD0xKTtpZihKPjApZm9yKEQuaXVzaHJuKEopO0otLSA+MDspKE4uaXNPZGQoKXx8Zy5pc09kZCgpKSYmKE4uaWFkZChwKSxnLmlzdWIodykpLE4uaXVzaHJuKDEpLGcuaXVzaHJuKDEpO2Zvcih2''@;'; put 'put ''YXIgZGU9MCxmZT0xOyEoSC53b3Jkc1swXSZmZSkmJmRlPDI2OysrZGUsZmU8PD0xKTtpZihkZT4wKWZvcihILml1c2hybihkZSk7ZGUtLSA+MDspKEMuaXNPZGQoKXx8Uy5pc09kZCgpKSYmKEMuaWFkZChwKSxTLmlzdWIodykpLEMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO0QuY21wKEgpPj0w''@;'; put 'put ''PyhELmlzdWIoSCksTi5pc3ViKEMpLGcuaXN1YihTKSk6KEguaXN1YihEKSxDLmlzdWIoTiksUy5pc3ViKGcpKX1yZXR1cm57YTpDLGI6UyxnY2Q6SC5pdXNobG4odil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFy''@;'; put 'put ''IEosRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPUguY2xvbmUoKTtELmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIFM9MCx2PTE7IShELndvcmRzWzBdJnYpJiZTPDI2''@;'; put 'put ''OysrUyx2PDw9MSk7aWYoUz4wKWZvcihELml1c2hybihTKTtTLS0gPjA7KU4uaXNPZGQoKSYmTi5pYWRkKEMpLE4uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLHc9MTshKEgud29yZHNbMF0mdykmJnA8MjY7KytwLHc8PD0xKTtpZihwPjApZm9yKEguaXVzaHJuKHApO3AtLSA+MDspZy5pc09kZCgp''@;'; put 'put ''JiZnLmlhZGQoQyksZy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoZykpOihILmlzdWIoRCksZy5pc3ViKE4pKX1yZXR1cm4oSj0wPT09RC5jbXBuKDEpP046ZykuY21wbigwKTwwJiZKLmlhZGQoYiksSn0sTS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGIpe2lmKHRo''@;'; put 'put ''aXMuaXNaZXJvKCkpcmV0dXJuIGIuYWJzKCk7aWYoYi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgRD10aGlzLmNsb25lKCksSD1iLmNsb25lKCk7RC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIE49MDtELmlzRXZlbigpJiZILmlzRXZlbigpO04rKylELml1c2hybigx''@;'; put 'put ''KSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7RC5pc0V2ZW4oKTspRC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1ELmNtcChIKTtpZihnPDApe3ZhciBDPUQ7RD1ILEg9Q31lbHNlIGlmKDA9PT1nfHwwPT09SC5jbXBuKDEpKWJyZWFrO0QuaXN1YihIKX1y''@;'; put 'put ''ZXR1cm4gSC5pdXNobG4oTil9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWdjZChiKS5hLnVtb2QoYil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndvcmRzWzBdJmJ9LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKTt2YXIgRD1iJTI2LEg9KGItRCkvMjYsTj0xPDxE''@;'; put 'put ''O2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1OLHRoaXM7Zm9yKHZhciBnPU4sQz1IOzAhPT1nJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9MHx0aGlzLndvcmRzW0NdO2c9KFMrPWcpPj4+MjYsdGhpcy53b3Jkc1tDXT1TJj02NzEw''@;'; put 'put ''ODg2M31yZXR1cm4gMCE9PWcmJih0aGlzLndvcmRzW0NdPWcsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LE0ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oYil7dmFyIEgs''@;'; put 'put ''RD1iPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFEKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZEKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle0QmJihiPS1iKSxtKGI8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBOPTB8''@;'; put 'put ''dGhpcy53b3Jkc1swXTtIPU49PT1iPzA6TjxiPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGIpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9''@;'; put 'put ''PWIubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEQ9dGhpcy51Y21wKGIpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1EOkR9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGg+Yi5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Yi5sZW5ndGgpcmV0dXJu''@;'; put 'put ''LTE7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0wfHRoaXMud29yZHNbSF0sZz0wfGIud29yZHNbSF07aWYoTiE9PWcpe048Zz9EPS0xOk4+ZyYmKEQ9MSk7YnJlYWt9fXJldHVybiBEfSxNLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10''@;'; put 'put ''aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKT49MH0sTS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKT49''@;'; put 'put ''MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik8PTB9LE0ucHJv''@;'; put 'put ''dG90eXBlLmx0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik8PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcChiKX0sTS5yZWQ9ZnVuY3Rpb24o''@;'; put 'put ''Yil7cmV0dXJuIG5ldyB1ZShiKX0sTS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxi''@;'; put 'put ''LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxN''@;'; put 'put ''LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucmVkPWIsdGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQo''@;'; put 'put ''Yil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJy''@;'; put 'put ''ZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMs''@;'; put 'put ''Yil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQs''@;'; put 'put ''InJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIo''@;'; put 'put ''dGhpcyxiKSx0aGlzLnJlZC5tdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQuaW11bCh0aGlzLGIp''@;'; put 'put ''fSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu''@;'; put 'put ''X3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sTS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9''@;'; put 'put ''LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCYmIWIucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGIpfTt2YXIgcT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1''@;'; put 'put ''NTE5Om51bGx9O2Z1bmN0aW9uIGVlKEcsYil7dGhpcy5uYW1lPUcsdGhpcy5wPW5ldyBNKGIsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB0ZSgpe2Vl''@;'; put 'put ''LmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gb2UoKXtlZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAw''@;'; put 'put ''MDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHNlKCl7ZWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBoZSgpe2VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdWUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgYj1NLl9wcmltZShHKTt0aGlzLm09Yi5wLHRoaXMucHJpbWU9Yn1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMg''@;'; put 'put ''bXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBjZShHKXt1ZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMu''@;'; put 'put ''cj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWlu''@;'; put 'put ''di51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1lZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksYn0sZWUucHJvdG90eXBlLmlyZWR1Y2U9''@;'; put 'put ''ZnVuY3Rpb24oYil7dmFyIEgsRD1iO2Rve3RoaXMuc3BsaXQoRCx0aGlzLnRtcCksSD0oRD0oRD10aGlzLmltdWxLKEQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBOPUg8dGhpcy5uPy0xOkQudWNtcCh0aGlzLnApO3JldHVybiAwPT09Tj8oRC53''@;'; put 'put ''b3Jkc1swXT0wLEQubGVuZ3RoPTEpOk4+MD9ELmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ELnN0cmlwP0Quc3RyaXAoKTpELl9zdHJpcCgpLER9LGVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2IuaXVzaHJuKHRoaXMubiwwLEQpfSxlZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24o''@;'; put 'put ''Yil7cmV0dXJuIGIuaW11bCh0aGlzLmspfSxsZSh0ZSxlZSksdGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTQxOTQzMDMsTj1NYXRoLm1pbihiLmxlbmd0aCw5KSxnPTA7ZzxOO2crKylELndvcmRzW2ddPWIud29yZHNbZ107aWYoRC5sZW5ndGg9TixiLmxlbmd0''@;'; put 'put ''aDw9OSlyZXR1cm4gYi53b3Jkc1swXT0wLHZvaWQoYi5sZW5ndGg9MSk7dmFyIEM9Yi53b3Jkc1s5XTtmb3IoRC53b3Jkc1tELmxlbmd0aCsrXT1DJkgsZz0xMDtnPGIubGVuZ3RoO2crKyl7dmFyIFM9MHxiLndvcmRzW2ddO2Iud29yZHNbZy0xMF09KFMmSCk8PDR8Qz4+PjIyLEM9U31iLndv''@;'; put 'put ''cmRzW2ctMTBdPUM+Pj49MjIsYi5sZW5ndGgtPTA9PT1DJiZiLmxlbmd0aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Yi53b3Jkc1tiLmxlbmd0aF09MCxiLndvcmRzW2IubGVuZ3RoKzFdPTAsYi5sZW5ndGgrPTI7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7''@;'; put 'put ''SCsrKXt2YXIgTj0wfGIud29yZHNbSF07Yi53b3Jkc1tIXT02NzEwODg2MyYoRCs9OTc3Kk4pLEQ9NjQqTisoRC82NzEwODg2NHwwKX1yZXR1cm4gMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJihiLmxlbmd0aC0tLDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiZiLmxlbmd0aC0tKSxifSxsZShv''@;'; put 'put ''ZSxlZSksbGUoc2UsZWUpLGxlKGhlLGVlKSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0xOSooMHxiLndvcmRzW0hdKStELGc9NjcxMDg4NjMmTjtOPj4+PTI2LGIud29yZHNbSF09ZyxEPU59cmV0dXJuIDAhPT1E''@;'; put 'put ''JiYoYi53b3Jkc1tiLmxlbmd0aCsrXT1EKSxifSxNLl9wcmltZT1mdW5jdGlvbihiKXtpZihxW2JdKXJldHVybiBxW2JdO3ZhciBEO2lmKCJrMjU2Ij09PWIpRD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT1iKUQ9bmV3IG9lO2Vsc2UgaWYoInAxOTIiPT09YilEPW5ldyBzZTtlbHNle2lmKCJw''@;'; put 'put ''MjU1MTkiIT09Yil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitiKTtEPW5ldyBoZX1yZXR1cm4gcVtiXT1ELER9LHVlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQs''@;'; put 'put ''InJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGIsRCl7bSgwPT0oYi5uZWdhdGl2ZXxELm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkJiZiLnJlZD09PUQucmVkLCJyZWQgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShiKS5fZm9yY2VSZWQodGhpcyk6Yi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUubmVnPWZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiBiLmlzWmVybygpP2IuY2xvbmUoKTp0aGlzLm0uc3ViKGIpLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3Vi''@;'; put 'put ''KHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaWFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihi''@;'; put 'put ''LEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLnN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlzdWIoRCk7cmV0dXJu''@;'; put 'put ''IEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYiksdGhpcy5pbW9kKGIudXNobG4oRCkpfSx1ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIs''@;'; put 'put ''RCksdGhpcy5pbW9kKGIuaW11bChEKSl9LHVlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLm11bChEKSl9LHVlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltdWwoYixiLmNsb25lKCkpfSx1''@;'; put 'put ''ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bChiLGIpfSx1ZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihiKXtpZihiLmlzWmVybygpKXJldHVybiBiLmNsb25lKCk7dmFyIEQ9dGhpcy5tLmFuZGxuKDMpO2lmKG0oRCUyPT0xKSwzPT09RCl7dmFyIEg9dGhpcy5t''@;'; put 'put ''LmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhiLEgpfWZvcih2YXIgTj10aGlzLm0uc3VibigxKSxnPTA7IU4uaXNaZXJvKCkmJjA9PT1OLmFuZGxuKDEpOylnKyssTi5pdXNocm4oMSk7bSghTi5pc1plcm8oKSk7dmFyIEM9bmV3IE0oMSkudG9SZWQodGhpcyksUz1D''@;'; put 'put ''LnJlZE5lZygpLHY9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyBNKDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCx2KS5jbXAoUyk7KXAucmVkSUFkZChTKTtmb3IodmFyIHc9dGhpcy5wb3cocCxOKSxKPXRoaXMucG93KGIs''@;'; put 'put ''Ti5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coYixOKSxkZT1nOzAhPT1uZS5jbXAoQyk7KXtmb3IodmFyIGZlPW5lLHhlPTA7MCE9PWZlLmNtcChDKTt4ZSsrKWZlPWZlLnJlZFNxcigpO20oeGU8ZGUpO3ZhciBMZT10aGlzLnBvdyh3LG5ldyBNKDEpLml1c2hsbihkZS14ZS0xKSk7''@;'; put 'put ''Sj1KLnJlZE11bChMZSksdz1MZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwodyksZGU9eGV9cmV0dXJuIEp9LHVlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3ZhciBEPWIuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ELm5lZ2F0aXZlPyhELm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEQpLnJl''@;'; put 'put ''ZE5lZygpKTp0aGlzLmltb2QoRCl9LHVlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYixEKXtpZihELmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09RC5jbXBuKDEpKXJldHVybiBiLmNsb25lKCk7dmFyIE49bmV3IEFycmF5KDE2KTtOWzBdPW5ldyBNKDEpLnRv''@;'; put 'put ''UmVkKHRoaXMpLE5bMV09Yjtmb3IodmFyIGc9MjtnPE4ubGVuZ3RoO2crKylOW2ddPXRoaXMubXVsKE5bZy0xXSxiKTt2YXIgQz1OWzBdLFM9MCx2PTAscD1ELmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLGc9RC5sZW5ndGgtMTtnPj0wO2ctLSl7Zm9yKHZhciB3PUQud29yZHNb''@;'; put 'put ''Z10sSj1wLTE7Sj49MDtKLS0pe3ZhciBuZT13Pj5KJjE7QyE9PU5bMF0mJihDPXRoaXMuc3FyKEMpKSwwIT09bmV8fDAhPT1TPyhTPDw9MSxTfD1uZSwoND09Kyt2fHwwPT09ZyYmMD09PUopJiYoQz10aGlzLm11bChDLE5bU10pLHY9MCxTPTApKTp2PTB9cD0yNn1yZXR1cm4gQ30sdWUucHJv''@;'; put 'put ''dG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXt2YXIgRD1iLnVtb2QodGhpcy5tKTtyZXR1cm4gRD09PWI/RC5jbG9uZSgpOkR9LHVlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD1iLmNsb25lKCk7cmV0dXJuIEQucmVkPW51bGwsRH0sTS5tb250PWZ1bmN0aW9u''@;'; put 'put ''KGIpe3JldHVybiBuZXcgY2UoYil9LGxlKGNlLHVlKSxjZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmltb2QoYi5tdWwo''@;'; put 'put ''dGhpcy5yaW52KSk7cmV0dXJuIEQucmVkPW51bGwsRH0sY2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSxiO3ZhciBIPWIuaW11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVs''@;'; put 'put ''KHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPWIubXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCku''@;'; put 'put ''bXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9u''@;'; put 'put ''KGIpe3JldHVybiB0aGlzLmltb2QoYi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sODUyNTI6KGF0LEllLEYpPT57dmFyIGFlPUYoODc5ODMpLHg9RigxNjUxNyksbT1GKDIxODE3KSxsZT1GKDQ4MjExKSxNPUYoNzE5''@;'; put 'put ''NDYpLE89Rig5NjM2MiksUj1GKDcwNzM1KSx6PUYoODQzKS5CdWZmZXI7YXQuZXhwb3J0cz1mdW5jdGlvbihqLFYsQil7dmFyIFk7WT1qLnBhZGRpbmc/ai5wYWRkaW5nOkI/MTo0O3ZhciBxLFg9YWUoaiksVT1YLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFYubGVuZ3RoPlV8fG5ldyBsZShW''@;'; put 'put ''KS5jbXAoWC5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtxPUI/UihuZXcgbGUoViksWCk6TShWLFgpO3ZhciBlZT16LmFsbG9jKFUtcS5sZW5ndGgpO2lmKHE9ei5jb25jYXQoW2VlLHFdLFUpLDQ9PT1ZKXJldHVybiBmdW5jdGlvbiBLKEUsail7dmFy''@;'; put 'put ''IFY9RS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxCPU8oInNoYTEiKS51cGRhdGUoei5hbGxvYygwKSkuZGlnZXN0KCksWT1CLmxlbmd0aDtpZigwIT09alswXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt2YXIgWD1qLnNsaWNlKDEsWSsxKSxVPWouc2xpY2UoWSsxKSxxPW0o''@;'; put 'put ''WCx4KFUsWSkpLGVlPW0oVSx4KHEsVi1ZLTEpKTtpZihmdW5jdGlvbiBrKEUsail7RT16LmZyb20oRSksaj16LmZyb20oaik7dmFyIFY9MCxCPUUubGVuZ3RoO0UubGVuZ3RoIT09ai5sZW5ndGgmJihWKyssQj1NYXRoLm1pbihFLmxlbmd0aCxqLmxlbmd0aCkpO2Zvcih2YXIgWT0tMTsrK1k8''@;'; put 'put ''QjspVis9RVtZXV5qW1ldO3JldHVybiBWfShCLGVlLnNsaWNlKDAsWSkpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgdGU9WTswPT09ZWVbdGVdOyl0ZSsrO2lmKDEhPT1lZVt0ZSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1''@;'; put 'put ''cm4gZWUuc2xpY2UodGUpfShYLHEpO2lmKDE9PT1ZKXJldHVybiBmdW5jdGlvbiBJKEUsaixWKXtmb3IodmFyIEI9ai5zbGljZSgwLDIpLFk9MixYPTA7MCE9PWpbWSsrXTspaWYoWT49ai5sZW5ndGgpe1grKzticmVha312YXIgVT1qLnNsaWNlKDIsWS0xKTtpZigoIjAwMDIiIT09Qi50b1N0''@;'; put 'put ''cmluZygiaGV4IikmJiFWfHwiMDAwMSIhPT1CLnRvU3RyaW5nKCJoZXgiKSYmVikmJlgrKyxVLmxlbmd0aDw4JiZYKyssWCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gai5zbGljZShZKX0oMCxxLEIpO2lmKDM9PT1ZKXJldHVybiBxO3Rocm93IG5ldyBFcnJv''@;'; put 'put ''cigidW5rbm93biBwYWRkaW5nIil9fSw0NTczNzooYXQsSWUsRik9Pnt2YXIgYWU9Rig4Nzk4MykseD1GKDQ0MDE5KSxtPUYoOTYzNjIpLGxlPUYoMTY1MTcpLE09RigyMTgxNyksTz1GKDQ4MjExKSxSPUYoNzA3MzUpLHo9Rig3MTk0NiksSz1GKDg0MykuQnVmZmVyO2F0LmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oVixCLFkpe3ZhciBYO1g9Vi5wYWRkaW5nP1YucGFkZGluZzpZPzE6NDt2YXIgcSxVPWFlKFYpO2lmKDQ9PT1YKXE9ZnVuY3Rpb24gSShqLFYpe3ZhciBCPWoubW9kdWx1cy5ieXRlTGVuZ3RoKCksWT1WLmxlbmd0aCxYPW0oInNoYTEiKS51cGRhdGUoSy5hbGxvYygwKSkuZGlnZXN0''@;'; put 'put ''KCksVT1YLmxlbmd0aCxxPTIqVTtpZihZPkItcS0yKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3ZhciBlZT1LLmFsbG9jKEItWS1xLTIpLHRlPUItVS0xLG9lPXgoVSksc2U9TShLLmNvbmNhdChbWCxlZSxLLmFsbG9jKDEsMSksVl0sdGUpLGxlKG9lLHRlKSksaGU9TShv''@;'; put 'put ''ZSxsZShzZSxVKSk7cmV0dXJuIG5ldyBPKEsuY29uY2F0KFtLLmFsbG9jKDEpLGhlLHNlXSxCKSl9KFUsQik7ZWxzZSBpZigxPT09WClxPWZ1bmN0aW9uIGsoaixWLEIpe3ZhciBVLFk9Vi5sZW5ndGgsWD1qLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFk+WC0xMSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Im1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gVT1CP0suYWxsb2MoWC1ZLTMsMjU1KTpmdW5jdGlvbiBFKGope2Zvcih2YXIgVSxWPUsuYWxsb2NVbnNhZmUoaiksQj0wLFk9eCgyKmopLFg9MDtCPGo7KVg9PT1ZLmxlbmd0aCYmKFk9eCgyKmopLFg9MCksKFU9WVtYKytdKSYmKFZbQisrXT1V''@;'; put 'put ''KTtyZXR1cm4gVn0oWC1ZLTMpLG5ldyBPKEsuY29uY2F0KFtLLmZyb20oWzAsQj8xOjJdKSxVLEsuYWxsb2MoMSksVl0sWCkpfShVLEIsWSk7ZWxzZXtpZigzIT09WCl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpO2lmKChxPW5ldyBPKEIpKS5jbXAoVS5tb2R1bHVzKT49MCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gWT96KHEsVSk6UihxLFUpfX0sNzA3MzU6KGF0LEllLEYpPT57dmFyIGFlPUYoNDgyMTEpLHg9Rig4NDMpLkJ1ZmZlcjthdC5leHBvcnRzPWZ1bmN0aW9uIG0obGUsTSl7cmV0dXJuIHguZnJvbShsZS50''@;'; put 'put ''b1JlZChhZS5tb250KE0ubW9kdWx1cykpLnJlZFBvdyhuZXcgYWUoTS5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0sMjE4MTc6YXQ9PnthdC5leHBvcnRzPWZ1bmN0aW9uKEYsYWUpe2Zvcih2YXIgeD1GLmxlbmd0aCxtPS0xOysrbTx4OylGW21dXj1hZVttXTtyZXR1''@;'; put 'put ''cm4gRn19LDQ0MDE5OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbGU9Rig4NDMpLkJ1ZmZlcixNPWdsb2JhbC5jcnlwdG98fGdsb2JhbC5tc0NyeXB0bzthdC5leHBvcnRzPU0mJk0uZ2V0UmFuZG9tVmFsdWVzP2Z1bmN0aW9uIE8oUix6KXtpZihSPjQyOTQ5NjcyOTUpdGhyb3cgbmV3''@;'; put 'put ''IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgSz1sZS5hbGxvY1Vuc2FmZShSKTtpZihSPjApaWYoUj42NTUzNilmb3IodmFyIEk9MDtJPFI7SSs9NjU1MzYpTS5nZXRSYW5kb21WYWx1ZXMoSy5zbGljZShJLEkrNjU1MzYpKTtlbHNlIE0uZ2V0UmFu''@;'; put 'put ''ZG9tVmFsdWVzKEspO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB6P3Byb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXt6KG51bGwsSyl9KTpLfTpmdW5jdGlvbiBtKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkg''@;'; put 'put ''dGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sNjEyMzc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGFlKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBw''@;'; put 'put ''b3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIHg9Rig4NDMpLG09Rig0NDAxOSksbGU9eC5CdWZmZXIsTT14LmtNYXhMZW5ndGgsTz1nbG9iYWwuY3J5cHRvfHxnbG9iYWwubXNDcnlwdG8sUj1NYXRoLnBvdygy''@;'; put 'put ''LDMyKS0xO2Z1bmN0aW9uIHooaixWKXtpZigibnVtYmVyIiE9dHlwZW9mIGp8fGohPWopdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSBudW1iZXIiKTtpZihqPlJ8fGo8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKGo+TXx8''@;'; put 'put ''aj5WKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gSyhqLFYsQil7aWYoIm51bWJlciIhPXR5cGVvZiBqfHxqIT1qKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIG51bWJlciIpO2lmKGo+Unx8ajwwKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoInNpemUgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKGorVj5CfHxqPk0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoImJ1ZmZlciB0b28gc21hbGwiKX1mdW5jdGlvbiBrKGosVixCLFkpe2lmKHByb2Nlc3MuYnJvd3Nlcil7dmFyIFU9bmV3IFVpbnQ4QXJyYXkoai5idWZmZXIsVixCKTtyZXR1''@;'; put 'put ''cm4gTy5nZXRSYW5kb21WYWx1ZXMoVSksWT92b2lkIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtZKG51bGwsail9KTpqfWlmKCFZKXJldHVybiBtKEIpLmNvcHkoaixWKSxqO20oQixmdW5jdGlvbihlZSx0ZSl7aWYoZWUpcmV0dXJuIFkoZWUpO3RlLmNvcHkoaixWKSxZKG51bGwsail9''@;'; put 'put ''KX1PJiZPLmdldFJhbmRvbVZhbHVlc3x8IXByb2Nlc3MuYnJvd3Nlcj8oSWUucmFuZG9tRmlsbD1mdW5jdGlvbiBJKGosVixCLFkpe2lmKCEobGUuaXNCdWZmZXIoail8fGogaW5zdGFuY2VvZiBnbG9iYWwuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQg''@;'; put 'put ''bXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFYpWT1WLFY9MCxCPWoubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIEIpWT1CLEI9ai5sZW5ndGgtVjtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBZKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHooVixqLmxlbmd0aCksSyhCLFYsai5sZW5ndGgpLGsoaixWLEIsWSl9LEllLnJhbmRvbUZpbGxTeW5jPWZ1bmN0aW9uIEUoaixWLEIpe2lmKHR5cGVvZiBWPiJ1IiYmKFY9MCksIShsZS5pc0J1ZmZlcihq''@;'; put 'put ''KXx8aiBpbnN0YW5jZW9mIGdsb2JhbC5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtyZXR1cm4geihWLGoubGVuZ3RoKSx2b2lkIDA9PT1CJiYoQj1qLmxlbmd0aC1WKSxLKEIsVixqLmxlbmd0''@;'; put 'put ''aCksayhqLFYsQil9KTooSWUucmFuZG9tRmlsbD1hZSxJZS5yYW5kb21GaWxsU3luYz1hZSl9LDk3MjE4OmF0PT57InVzZSBzdHJpY3QiO3ZhciBGPXt9O2Z1bmN0aW9uIGFlKE8sUix6KXt6fHwoej1FcnJvcik7dmFyIEk9ZnVuY3Rpb24oayl7ZnVuY3Rpb24gRShqLFYsQil7cmV0dXJuIGsu''@;'; put 'put ''Y2FsbCh0aGlzLGZ1bmN0aW9uIEsoayxFLGope3JldHVybiJzdHJpbmciPT10eXBlb2YgUj9SOlIoayxFLGopfShqLFYsQikpfHx0aGlzfXJldHVybiBmdW5jdGlvbiBJZShPLFIpe08ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUpLE8ucHJvdG90eXBlLmNvbnN0cnVjdG9y''@;'; put 'put ''PU8sTy5fX3Byb3RvX189Un0oRSxrKSxFfSh6KTtJLnByb3RvdHlwZS5uYW1lPXoubmFtZSxJLnByb3RvdHlwZS5jb2RlPU8sRltPXT1JfWZ1bmN0aW9uIHgoTyxSKXtpZihBcnJheS5pc0FycmF5KE8pKXt2YXIgej1PLmxlbmd0aDtyZXR1cm4gTz1PLm1hcChmdW5jdGlvbihLKXtyZXR1cm4g''@;'; put 'put ''U3RyaW5nKEspfSksej4yPyJvbmUgb2YgIi5jb25jYXQoUiwiICIpLmNvbmNhdChPLnNsaWNlKDAsei0xKS5qb2luKCIsICIpLCIsIG9yICIpK09bei0xXToyPT09ej8ib25lIG9mICIuY29uY2F0KFIsIiAiKS5jb25jYXQoT1swXSwiIG9yICIpLmNvbmNhdChPWzFdKToib2YgIi5jb25jYXQo''@;'; put 'put ''UiwiICIpLmNvbmNhdChPWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoUiwiICIpLmNvbmNhdChTdHJpbmcoTykpfWFlKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKE8sUil7cmV0dXJuJ1RoZSB2YWx1ZSAiJytSKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytPKyciJ30sVHlw''@;'; put 'put ''ZUVycm9yKSxhZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKE8sUix6KXt2YXIgSyxJO2lmKCJzdHJpbmciPT10eXBlb2YgUiYmZnVuY3Rpb24gbShPLFIseil7cmV0dXJuIE8uc3Vic3RyKCF6fHx6PDA/MDoreixSLmxlbmd0aCk9PT1SfShSLCJub3QgIik/KEs9Im11c3Qgbm90''@;'; put 'put ''IGJlIixSPVIucmVwbGFjZSgvXm5vdCAvLCIiKSk6Sz0ibXVzdCBiZSIsZnVuY3Rpb24gbGUoTyxSLHope3JldHVybih2b2lkIDA9PT16fHx6Pk8ubGVuZ3RoKSYmKHo9Ty5sZW5ndGgpLE8uc3Vic3RyaW5nKHotUi5sZW5ndGgseik9PT1SfShPLCIgYXJndW1lbnQiKSlJPSJUaGUgIi5jb25j''@;'; put 'put ''YXQoTywiICIpLmNvbmNhdChLLCIgIikuY29uY2F0KHgoUiwidHlwZSIpKTtlbHNle3ZhciBrPWZ1bmN0aW9uIE0oTyxSLHope3JldHVybiJudW1iZXIiIT10eXBlb2YgeiYmKHo9MCksISh6K1IubGVuZ3RoPk8ubGVuZ3RoKSYmLTEhPT1PLmluZGV4T2YoUix6KX0oTywiLiIpPyJwcm9wZXJ0''@;'; put 'put ''eSI6ImFyZ3VtZW50IjtJPSdUaGUgIicuY29uY2F0KE8sJyIgJykuY29uY2F0KGssIiAiKS5jb25jYXQoSywiICIpLmNvbmNhdCh4KFIsInR5cGUiKSl9cmV0dXJuIEkrIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2Ygeil9LFR5cGVFcnJvciksYWUoIkVSUl9TVFJFQU1fUFVTSF9B''@;'; put 'put ''RlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLGFlKCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsZnVuY3Rpb24oTyl7cmV0dXJuIlRoZSAiK08rIiBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIn0pLGFlKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1h''@;'; put 'put ''dHVyZSBjbG9zZSIpLGFlKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oTyl7cmV0dXJuIkNhbm5vdCBjYWxsICIrTysiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSksYWUoIkVSUl9NVUxUSVBMRV9DQUxMQkFDSyIsIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1l''@;'; put 'put ''cyIpLGFlKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLGFlKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLGFlKCJFUlJfU1RSRUFNX05VTExfVkFMVUVTIiwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVl''@;'; put 'put ''cyB0byBzdHJlYW0iLFR5cGVFcnJvciksYWUoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihPKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitPfSxUeXBlRXJyb3IpLGFlKCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRl''@;'; put 'put ''ciBlbmQgZXZlbnQiKSxhdC5leHBvcnRzLnE9Rn0sNzAyNDc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oSSl7dmFyIGs9W107Zm9yKHZhciBFIGluIEkpay5wdXNoKEUpO3JldHVybiBrfTthdC5leHBvcnRzPVI7dmFyIHg9Rig4MDMwOSks''@;'; put 'put ''bT1GKDU2NTYzKTtGKDY2Njk4KShSLHgpO2Zvcih2YXIgbGU9YWUobS5wcm90b3R5cGUpLE09MDtNPGxlLmxlbmd0aDtNKyspe3ZhciBPPWxlW01dO1IucHJvdG90eXBlW09dfHwoUi5wcm90b3R5cGVbT109bS5wcm90b3R5cGVbT10pfWZ1bmN0aW9uIFIoSSl7aWYoISh0aGlzIGluc3RhbmNl''@;'; put 'put ''b2YgUikpcmV0dXJuIG5ldyBSKEkpO3guY2FsbCh0aGlzLEkpLG0uY2FsbCh0aGlzLEkpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxJJiYoITE9PT1JLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksITE9PT1JLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksITE9PT1JLmFsbG93SGFs''@;'; put 'put ''Zk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEsdGhpcy5vbmNlKCJlbmQiLHopKSl9ZnVuY3Rpb24geigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fHByb2Nlc3MubmV4dFRpY2soSyx0aGlzKX1mdW5jdGlvbiBLKEkpe0kuZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJv''@;'; put 'put ''dG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFi''@;'; put 'put ''bGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oayl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuZGVzdHJveWVkPWssdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ayl9fSl9LDk1MDk2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXg7dmFyIGFlPUYoMTYzMDcpO2Z1bmN0aW9uIHgobSl7aWYoISh0aGlzIGluc3RhbmNlb2YgeCkpcmV0dXJuIG5l''@;'; put 'put ''dyB4KG0pO2FlLmNhbGwodGhpcyxtKX1GKDY2Njk4KSh4LGFlKSx4LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKG0sbGUsTSl7TShudWxsLG0pfX0sODAzMDk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZTthdC5leHBvcnRzPUcsRy5SZWFkYWJsZVN0YXRlPWNlLEYoODIw''@;'; put 'put ''MTYpO3ZhciBJLG09ZnVuY3Rpb24oSmUsbHQpe3JldHVybiBKZS5saXN0ZW5lcnMobHQpLmxlbmd0aH0sbGU9Rig3ODI0MCksTT1GKDM5MDA3KS5CdWZmZXIsTz0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7''@;'; put 'put ''fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEs9Rig5NDYxNik7ST1LJiZLLmRlYnVnbG9nP0suZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgZWUsdGUsb2Usaz1GKDI5NjApLEU9Rig2NTYwMSksVj1GKDc4NzgyKS5nZXRIaWdoV2F0ZXJNYXJrLEI9Rig5NzIxOCkucSxZ''@;'; put 'put ''PUIuRVJSX0lOVkFMSURfQVJHX1RZUEUsWD1CLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsVT1CLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHE9Qi5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO0YoNjY2OTgpKEcsbGUpO3ZhciBzZT1FLmVycm9yT3JEZXN0cm95LGhl''@;'; put 'put ''PVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIGNlKFllLEplLGx0KXthZT1hZXx8Rig3MDI0NyksImJvb2xlYW4iIT10eXBlb2YgbHQmJihsdD1KZSBpbnN0YW5jZW9mIGFlKSx0aGlzLm9iamVjdE1vZGU9ISEoWWU9WWV8fHt9KS5vYmplY3RN''@;'; put 'put ''b2RlLGx0JiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFZZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1WKHRoaXMsWWUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsbHQpLHRoaXMuYnVmZmVyPW5ldyBrLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBl''@;'; put 'put ''cz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxp''@;'; put 'put ''c3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PVllLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhWWUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9WWUuZGVmYXVs''@;'; put 'put ''dEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsWWUuZW5jb2RpbmcmJihlZXx8KGVlPUYoNzIwMjQpLnMpLHRoaXMuZGVjb2Rlcj1uZXcgZWUoWWUuZW5jb2RpbmcpLHRoaXMu''@;'; put 'put ''ZW5jb2Rpbmc9WWUuZW5jb2RpbmcpfWZ1bmN0aW9uIEcoWWUpe2lmKGFlPWFlfHxGKDcwMjQ3KSwhKHRoaXMgaW5zdGFuY2VvZiBHKSlyZXR1cm4gbmV3IEcoWWUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IGNlKFllLHRoaXMsdGhpcyBpbnN0YW5jZW9mIGFlKSx0aGlzLnJlYWRhYmxlPSEw''@;'; put 'put ''LFllJiYoImZ1bmN0aW9uIj09dHlwZW9mIFllLnJlYWQmJih0aGlzLl9yZWFkPVllLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBZZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1ZZS5kZXN0cm95KSksbGUuY2FsbCh0aGlzKX1mdW5jdGlvbiBiKFllLEplLGx0LFBlLGJlKXtJKCJyZWFkYWJs''@;'; put 'put ''ZUFkZENodW5rIixKZSk7dmFyIFRlLEFlPVllLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1KZSlBZS5yZWFkaW5nPSExLGZ1bmN0aW9uIFMoWWUsSmUpe2lmKEkoIm9uRW9mQ2h1bmsiKSwhSmUuZW5kZWQpe2lmKEplLmRlY29kZXIpe3ZhciBsdD1KZS5kZWNvZGVyLmVuZCgpO2x0JiZsdC5s''@;'; put 'put ''ZW5ndGgmJihKZS5idWZmZXIucHVzaChsdCksSmUubGVuZ3RoKz1KZS5vYmplY3RNb2RlPzE6bHQubGVuZ3RoKX1KZS5lbmRlZD0hMCxKZS5zeW5jP3YoWWUpOihKZS5uZWVkUmVhZGFibGU9ITEsSmUuZW1pdHRlZFJlYWRhYmxlfHwoSmUuZW1pdHRlZFJlYWRhYmxlPSEwLHAoWWUpKSl9fShZ''@;'; put 'put ''ZSxBZSk7ZWxzZSBpZihiZXx8KFRlPWZ1bmN0aW9uIEgoWWUsSmUpe3ZhciBsdDtyZXR1cm4hZnVuY3Rpb24geihZZSl7cmV0dXJuIE0uaXNCdWZmZXIoWWUpfHxZZSBpbnN0YW5jZW9mIE99KEplKSYmInN0cmluZyIhPXR5cGVvZiBKZSYmdm9pZCAwIT09SmUmJiFZZS5vYmplY3RNb2RlJiYo''@;'; put 'put ''bHQ9bmV3IFkoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxKZSkpLGx0fShBZSxKZSkpLFRlKXNlKFllLFRlKTtlbHNlIGlmKEFlLm9iamVjdE1vZGV8fEplJiZKZS5sZW5ndGg+MClpZigic3RyaW5nIiE9dHlwZW9mIEplJiYhQWUub2JqZWN0TW9kZSYmT2JqZWN0''@;'; put 'put ''LmdldFByb3RvdHlwZU9mKEplKSE9PU0ucHJvdG90eXBlJiYoSmU9ZnVuY3Rpb24gUihZZSl7cmV0dXJuIE0uZnJvbShZZSl9KEplKSksUGUpQWUuZW5kRW1pdHRlZD9zZShZZSxuZXcgcSk6RChZZSxBZSxKZSwhMCk7ZWxzZSBpZihBZS5lbmRlZClzZShZZSxuZXcgWCk7ZWxzZXtpZihBZS5k''@;'; put 'put ''ZXN0cm95ZWQpcmV0dXJuITE7QWUucmVhZGluZz0hMSxBZS5kZWNvZGVyJiYhbHQ/KEplPUFlLmRlY29kZXIud3JpdGUoSmUpLEFlLm9iamVjdE1vZGV8fDAhPT1KZS5sZW5ndGg/RChZZSxBZSxKZSwhMSk6dyhZZSxBZSkpOkQoWWUsQWUsSmUsITEpfWVsc2UgUGV8fChBZS5yZWFkaW5nPSEx''@;'; put 'put ''LHcoWWUsQWUpKTtyZXR1cm4hQWUuZW5kZWQmJihBZS5sZW5ndGg8QWUuaGlnaFdhdGVyTWFya3x8MD09PUFlLmxlbmd0aCl9ZnVuY3Rpb24gRChZZSxKZSxsdCxQZSl7SmUuZmxvd2luZyYmMD09PUplLmxlbmd0aCYmIUplLnN5bmM/KEplLmF3YWl0RHJhaW49MCxZZS5lbWl0KCJkYXRhIixs''@;'; put 'put ''dCkpOihKZS5sZW5ndGgrPUplLm9iamVjdE1vZGU/MTpsdC5sZW5ndGgsUGU/SmUuYnVmZmVyLnVuc2hpZnQobHQpOkplLmJ1ZmZlci5wdXNoKGx0KSxKZS5uZWVkUmVhZGFibGUmJnYoWWUpKSx3KFllLEplKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRy5wcm90b3R5cGUsImRlc3Ryb3llZCIs''@;'; put 'put ''e2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oSmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3ll''@;'; put 'put ''ZD1KZSl9fSksRy5wcm90b3R5cGUuZGVzdHJveT1FLmRlc3Ryb3ksRy5wcm90b3R5cGUuX3VuZGVzdHJveT1FLnVuZGVzdHJveSxHLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihZZSxKZSl7SmUoWWUpfSxHLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKFllLEplKXt2YXIgUGUsbHQ9dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbHQub2JqZWN0TW9kZT9QZT0hMDoic3RyaW5nIj09dHlwZW9mIFllJiYoKEplPUplfHxsdC5kZWZhdWx0RW5jb2RpbmcpIT09bHQuZW5jb2RpbmcmJihZZT1NLmZyb20oWWUsSmUpLEplPSIiKSxQZT0hMCksYih0aGlzLFllLEplLCExLFBlKX0sRy5w''@;'; put 'put ''cm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihZZSl7cmV0dXJuIGIodGhpcyxZZSxudWxsLCEwLCExKX0sRy5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sRy5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24o''@;'; put 'put ''WWUpe2VlfHwoZWU9Rig3MjAyNCkucyk7dmFyIEplPW5ldyBlZShZZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPUplLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgbHQ9dGhpcy5fcmVhZGFibGVT''@;'; put 'put ''dGF0ZS5idWZmZXIuaGVhZCxQZT0iIjtudWxsIT09bHQ7KVBlKz1KZS53cml0ZShsdC5kYXRhKSxsdD1sdC5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09UGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goUGUpLHRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUubGVuZ3RoPVBlLmxlbmd0aCx0aGlzfTt2YXIgTj0xMDczNzQxODI0O2Z1bmN0aW9uIEMoWWUsSmUpe3JldHVybiBZZTw9MHx8MD09PUplLmxlbmd0aCYmSmUuZW5kZWQ/MDpKZS5vYmplY3RNb2RlPzE6WWUhPVllP0plLmZsb3dpbmcmJkplLmxlbmd0aD9KZS5idWZmZXIuaGVh''@;'; put 'put ''ZC5kYXRhLmxlbmd0aDpKZS5sZW5ndGg6KFllPkplLmhpZ2hXYXRlck1hcmsmJihKZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIGcoWWUpe3JldHVybiBZZT49Tj9ZZT1OOihZZS0tLFllfD1ZZT4+PjEsWWV8PVllPj4+MixZZXw9WWU+Pj40LFllfD1ZZT4+PjgsWWV8PVllPj4+MTYsWWUrKyks''@;'; put 'put ''WWV9KFllKSksWWU8PUplLmxlbmd0aD9ZZTpKZS5lbmRlZD9KZS5sZW5ndGg6KEplLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gdihZZSl7dmFyIEplPVllLl9yZWFkYWJsZVN0YXRlO0koImVtaXRSZWFkYWJsZSIsSmUubmVlZFJlYWRhYmxlLEplLmVtaXR0ZWRSZWFkYWJsZSksSmUu''@;'; put 'put ''bmVlZFJlYWRhYmxlPSExLEplLmVtaXR0ZWRSZWFkYWJsZXx8KEkoImVtaXRSZWFkYWJsZSIsSmUuZmxvd2luZyksSmUuZW1pdHRlZFJlYWRhYmxlPSEwLHByb2Nlc3MubmV4dFRpY2socCxZZSkpfWZ1bmN0aW9uIHAoWWUpe3ZhciBKZT1ZZS5fcmVhZGFibGVTdGF0ZTtJKCJlbWl0UmVhZGFi''@;'; put 'put ''bGVfIixKZS5kZXN0cm95ZWQsSmUubGVuZ3RoLEplLmVuZGVkKSwhSmUuZGVzdHJveWVkJiYoSmUubGVuZ3RofHxKZS5lbmRlZCkmJihZZS5lbWl0KCJyZWFkYWJsZSIpLEplLmVtaXR0ZWRSZWFkYWJsZT0hMSksSmUubmVlZFJlYWRhYmxlPSFKZS5mbG93aW5nJiYhSmUuZW5kZWQmJkplLmxl''@;'; put 'put ''bmd0aDw9SmUuaGlnaFdhdGVyTWFyayxGZShZZSl9ZnVuY3Rpb24gdyhZZSxKZSl7SmUucmVhZGluZ01vcmV8fChKZS5yZWFkaW5nTW9yZT0hMCxwcm9jZXNzLm5leHRUaWNrKEosWWUsSmUpKX1mdW5jdGlvbiBKKFllLEplKXtmb3IoOyFKZS5yZWFkaW5nJiYhSmUuZW5kZWQmJihKZS5sZW5n''@;'; put 'put ''dGg8SmUuaGlnaFdhdGVyTWFya3x8SmUuZmxvd2luZyYmMD09PUplLmxlbmd0aCk7KXt2YXIgbHQ9SmUubGVuZ3RoO2lmKEkoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksWWUucmVhZCgwKSxsdD09PUplLmxlbmd0aClicmVha31KZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBkZShZZSl7dmFy''@;'; put 'put ''IEplPVllLl9yZWFkYWJsZVN0YXRlO0plLnJlYWRhYmxlTGlzdGVuaW5nPVllLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxKZS5yZXN1bWVTY2hlZHVsZWQmJiFKZS5wYXVzZWQ/SmUuZmxvd2luZz0hMDpZZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmWWUucmVzdW1lKCl9ZnVuY3Rp''@;'; put 'put ''b24gZmUoWWUpe0koInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLFllLnJlYWQoMCl9ZnVuY3Rpb24gTGUoWWUsSmUpe0koInJlc3VtZSIsSmUucmVhZGluZyksSmUucmVhZGluZ3x8WWUucmVhZCgwKSxKZS5yZXN1bWVTY2hlZHVsZWQ9ITEsWWUuZW1pdCgicmVzdW1lIiksRmUoWWUpLEpl''@;'; put 'put ''LmZsb3dpbmcmJiFKZS5yZWFkaW5nJiZZZS5yZWFkKDApfWZ1bmN0aW9uIEZlKFllKXt2YXIgSmU9WWUuX3JlYWRhYmxlU3RhdGU7Zm9yKEkoImZsb3ciLEplLmZsb3dpbmcpO0plLmZsb3dpbmcmJm51bGwhPT1ZZS5yZWFkKCk7KTt9ZnVuY3Rpb24gT2UoWWUsSmUpe3JldHVybiAwPT09SmUu''@;'; put 'put ''bGVuZ3RoP251bGw6KEplLm9iamVjdE1vZGU/bHQ9SmUuYnVmZmVyLnNoaWZ0KCk6IVllfHxZZT49SmUubGVuZ3RoPyhsdD1KZS5kZWNvZGVyP0plLmJ1ZmZlci5qb2luKCIiKToxPT09SmUuYnVmZmVyLmxlbmd0aD9KZS5idWZmZXIuZmlyc3QoKTpKZS5idWZmZXIuY29uY2F0KEplLmxlbmd0''@;'; put 'put ''aCksSmUuYnVmZmVyLmNsZWFyKCkpOmx0PUplLmJ1ZmZlci5jb25zdW1lKFllLEplLmRlY29kZXIpLGx0KTt2YXIgbHR9ZnVuY3Rpb24gQmUoWWUpe3ZhciBKZT1ZZS5fcmVhZGFibGVTdGF0ZTtJKCJlbmRSZWFkYWJsZSIsSmUuZW5kRW1pdHRlZCksSmUuZW5kRW1pdHRlZHx8KEplLmVuZGVk''@;'; put 'put ''PSEwLHByb2Nlc3MubmV4dFRpY2soV2UsSmUsWWUpKX1mdW5jdGlvbiBXZShZZSxKZSl7aWYoSSgiZW5kUmVhZGFibGVOVCIsWWUuZW5kRW1pdHRlZCxZZS5sZW5ndGgpLCFZZS5lbmRFbWl0dGVkJiYwPT09WWUubGVuZ3RoJiYoWWUuZW5kRW1pdHRlZD0hMCxKZS5yZWFkYWJsZT0hMSxKZS5l''@;'; put 'put ''bWl0KCJlbmQiKSxZZS5hdXRvRGVzdHJveSkpe3ZhciBsdD1KZS5fd3JpdGFibGVTdGF0ZTsoIWx0fHxsdC5hdXRvRGVzdHJveSYmbHQuZmluaXNoZWQpJiZKZS5kZXN0cm95KCl9fWZ1bmN0aW9uIEtlKFllLEplKXtmb3IodmFyIGx0PTAsUGU9WWUubGVuZ3RoO2x0PFBlO2x0KyspaWYoWWVb''@;'; put 'put ''bHRdPT09SmUpcmV0dXJuIGx0O3JldHVybi0xfUcucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oWWUpe0koInJlYWQiLFllKSxZZT1wYXJzZUludChZZSwxMCk7dmFyIEplPXRoaXMuX3JlYWRhYmxlU3RhdGUsbHQ9WWU7aWYoMCE9PVllJiYoSmUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09WWUm''@;'; put 'put ''JkplLm5lZWRSZWFkYWJsZSYmKCgwIT09SmUuaGlnaFdhdGVyTWFyaz9KZS5sZW5ndGg+PUplLmhpZ2hXYXRlck1hcms6SmUubGVuZ3RoPjApfHxKZS5lbmRlZCkpcmV0dXJuIEkoInJlYWQ6IGVtaXRSZWFkYWJsZSIsSmUubGVuZ3RoLEplLmVuZGVkKSwwPT09SmUubGVuZ3RoJiZKZS5lbmRl''@;'; put 'put ''ZD9CZSh0aGlzKTp2KHRoaXMpLG51bGw7aWYoMD09PShZZT1DKFllLEplKSkmJkplLmVuZGVkKXJldHVybiAwPT09SmUubGVuZ3RoJiZCZSh0aGlzKSxudWxsO3ZhciBiZSxQZT1KZS5uZWVkUmVhZGFibGU7cmV0dXJuIEkoIm5lZWQgcmVhZGFibGUiLFBlKSwoMD09PUplLmxlbmd0aHx8SmUu''@;'; put 'put ''bGVuZ3RoLVllPEplLmhpZ2hXYXRlck1hcmspJiZJKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsUGU9ITApLEplLmVuZGVkfHxKZS5yZWFkaW5nP0koInJlYWRpbmcgb3IgZW5kZWQiLFBlPSExKTpQZSYmKEkoImRvIHJlYWQiKSxKZS5yZWFkaW5nPSEwLEplLnN5bmM9ITAsMD09PUpl''@;'; put 'put ''Lmxlbmd0aCYmKEplLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChKZS5oaWdoV2F0ZXJNYXJrKSxKZS5zeW5jPSExLEplLnJlYWRpbmd8fChZZT1DKGx0LEplKSkpLG51bGw9PT0oYmU9WWU+MD9PZShZZSxKZSk6bnVsbCk/KEplLm5lZWRSZWFkYWJsZT1KZS5sZW5ndGg8PUplLmhpZ2hX''@;'; put 'put ''YXRlck1hcmssWWU9MCk6KEplLmxlbmd0aC09WWUsSmUuYXdhaXREcmFpbj0wKSwwPT09SmUubGVuZ3RoJiYoSmUuZW5kZWR8fChKZS5uZWVkUmVhZGFibGU9ITApLGx0IT09WWUmJkplLmVuZGVkJiZCZSh0aGlzKSksbnVsbCE9PWJlJiZ0aGlzLmVtaXQoImRhdGEiLGJlKSxiZX0sRy5wcm90''@;'; put 'put ''b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oWWUpe3NlKHRoaXMsbmV3IFUoIl9yZWFkKCkiKSl9LEcucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oWWUsSmUpe3ZhciBsdD10aGlzLFBlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKFBlLnBpcGVzQ291bnQpe2Nhc2UgMDpQZS5waXBlcz1ZZTticmVh''@;'; put 'put ''aztjYXNlIDE6UGUucGlwZXM9W1BlLnBpcGVzLFllXTticmVhaztkZWZhdWx0OlBlLnBpcGVzLnB1c2goWWUpfVBlLnBpcGVzQ291bnQrPTEsSSgicGlwZSBjb3VudD0lZCBvcHRzPSVqIixQZS5waXBlc0NvdW50LEplKTt2YXIgQWU9SmUmJiExPT09SmUuZW5kfHxZZT09PXByb2Nlc3Muc3Rk''@;'; put 'put ''b3V0fHxZZT09PXByb2Nlc3Muc3RkZXJyP3V0OnFlO2Z1bmN0aW9uIHFlKCl7SSgib25lbmQiKSxZZS5lbmQoKX1QZS5lbmRFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soQWUpOmx0Lm9uY2UoImVuZCIsQWUpLFllLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIFRlKE10LEh0KXtJKCJvbnVucGlwZSIp''@;'; put 'put ''LE10PT09bHQmJkh0JiYhMT09PUh0Lmhhc1VucGlwZWQmJihIdC5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIGh0KCl7SSgiY2xlYW51cCIpLFllLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsemUpLFllLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGl0KSxZZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4i''@;'; put 'put ''LFhlKSxZZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLERlKSxZZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixUZSksbHQucmVtb3ZlTGlzdGVuZXIoImVuZCIscWUpLGx0LnJlbW92ZUxpc3RlbmVyKCJlbmQiLHV0KSxsdC5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsTWUpLFVlPSEwLFBlLmF3YWl0''@;'; put 'put ''RHJhaW4mJighWWUuX3dyaXRhYmxlU3RhdGV8fFllLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJlhlKCl9KCkpfSk7dmFyIFhlPWZ1bmN0aW9uIG5lKFllKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbHQ9WWUuX3JlYWRhYmxlU3RhdGU7SSgicGlwZU9uRHJhaW4iLGx0LmF3YWl0RHJhaW4p''@;'; put 'put ''LGx0LmF3YWl0RHJhaW4mJmx0LmF3YWl0RHJhaW4tLSwwPT09bHQuYXdhaXREcmFpbiYmbShZZSwiZGF0YSIpJiYobHQuZmxvd2luZz0hMCxGZShZZSkpfX0obHQpO1llLm9uKCJkcmFpbiIsWGUpO3ZhciBVZT0hMTtmdW5jdGlvbiBNZShNdCl7SSgib25kYXRhIik7dmFyIEh0PVllLndyaXRl''@;'; put 'put ''KE10KTtJKCJkZXN0LndyaXRlIixIdCksITE9PT1IdCYmKCgxPT09UGUucGlwZXNDb3VudCYmUGUucGlwZXM9PT1ZZXx8UGUucGlwZXNDb3VudD4xJiYtMSE9PUtlKFBlLnBpcGVzLFllKSkmJiFVZSYmKEkoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsUGUuYXdhaXREcmFpbiksUGUu''@;'; put 'put ''YXdhaXREcmFpbisrKSxsdC5wYXVzZSgpKX1mdW5jdGlvbiBEZShNdCl7SSgib25lcnJvciIsTXQpLHV0KCksWWUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixEZSksMD09PW0oWWUsImVycm9yIikmJnNlKFllLE10KX1mdW5jdGlvbiB6ZSgpe1llLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGl0''@;'; put 'put ''KSx1dCgpfWZ1bmN0aW9uIGl0KCl7SSgib25maW5pc2giKSxZZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHplKSx1dCgpfWZ1bmN0aW9uIHV0KCl7SSgidW5waXBlIiksbHQudW5waXBlKFllKX1yZXR1cm4gbHQub24oImRhdGEiLE1lKSxmdW5jdGlvbiB1ZShZZSxKZSxsdCl7aWYoImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFllLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gWWUucHJlcGVuZExpc3RlbmVyKEplLGx0KTtZZS5fZXZlbnRzJiZZZS5fZXZlbnRzW0plXT9BcnJheS5pc0FycmF5KFllLl9ldmVudHNbSmVdKT9ZZS5fZXZlbnRzW0plXS51bnNoaWZ0KGx0KTpZZS5fZXZlbnRzW0plXT1b''@;'; put 'put ''bHQsWWUuX2V2ZW50c1tKZV1dOlllLm9uKEplLGx0KX0oWWUsImVycm9yIixEZSksWWUub25jZSgiY2xvc2UiLHplKSxZZS5vbmNlKCJmaW5pc2giLGl0KSxZZS5lbWl0KCJwaXBlIixsdCksUGUuZmxvd2luZ3x8KEkoInBpcGUgcmVzdW1lIiksbHQucmVzdW1lKCkpLFllfSxHLnByb3RvdHlw''@;'; put 'put ''ZS51bnBpcGU9ZnVuY3Rpb24oWWUpe3ZhciBKZT10aGlzLl9yZWFkYWJsZVN0YXRlLGx0PXtoYXNVbnBpcGVkOiExfTtpZigwPT09SmUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09SmUucGlwZXNDb3VudClyZXR1cm4gWWUmJlllIT09SmUucGlwZXN8fChZZXx8KFllPUplLnBpcGVz''@;'; put 'put ''KSxKZS5waXBlcz1udWxsLEplLnBpcGVzQ291bnQ9MCxKZS5mbG93aW5nPSExLFllJiZZZS5lbWl0KCJ1bnBpcGUiLHRoaXMsbHQpKSx0aGlzO2lmKCFZZSl7dmFyIFBlPUplLnBpcGVzLGJlPUplLnBpcGVzQ291bnQ7SmUucGlwZXM9bnVsbCxKZS5waXBlc0NvdW50PTAsSmUuZmxvd2luZz0h''@;'; put 'put ''MTtmb3IodmFyIEFlPTA7QWU8YmU7QWUrKylQZVtBZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIFRlPUtlKEplLnBpcGVzLFllKTtyZXR1cm4tMT09PVRlfHwoSmUucGlwZXMuc3BsaWNlKFRlLDEpLEplLnBpcGVzQ291bnQtPTEsMT09PUpl''@;'; put 'put ''LnBpcGVzQ291bnQmJihKZS5waXBlcz1KZS5waXBlc1swXSksWWUuZW1pdCgidW5waXBlIix0aGlzLGx0KSksdGhpc30sRy5wcm90b3R5cGUuYWRkTGlzdGVuZXI9Ry5wcm90b3R5cGUub249ZnVuY3Rpb24oWWUsSmUpe3ZhciBsdD1sZS5wcm90b3R5cGUub24uY2FsbCh0aGlzLFllLEplKSxQ''@;'; put 'put ''ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PVllPyhQZS5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCwhMSE9PVBlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT1ZZSYmIVBlLmVuZEVtaXR0ZWQmJiFQZS5y''@;'; put 'put ''ZWFkYWJsZUxpc3RlbmluZyYmKFBlLnJlYWRhYmxlTGlzdGVuaW5nPVBlLm5lZWRSZWFkYWJsZT0hMCxQZS5mbG93aW5nPSExLFBlLmVtaXR0ZWRSZWFkYWJsZT0hMSxJKCJvbiByZWFkYWJsZSIsUGUubGVuZ3RoLFBlLnJlYWRpbmcpLFBlLmxlbmd0aD92KHRoaXMpOlBlLnJlYWRpbmd8fHBy''@;'; put 'put ''b2Nlc3MubmV4dFRpY2soZmUsdGhpcykpLGx0fSxHLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihZZSxKZSl7dmFyIGx0PWxlLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsWWUsSmUpO3JldHVybiJyZWFkYWJsZSI9PT1ZZSYmcHJvY2Vzcy5uZXh0VGljayhk''@;'; put 'put ''ZSx0aGlzKSxsdH0sRy5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKFllKXt2YXIgSmU9bGUucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuKCJyZWFkYWJsZSI9PT1ZZXx8dm9pZCAwPT09WWUpJiZwcm9jZXNzLm5l''@;'; put 'put ''eHRUaWNrKGRlLHRoaXMpLEplfSxHLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgWWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gWWUuZmxvd2luZ3x8KEkoInJlc3VtZSIpLFllLmZsb3dpbmc9IVllLnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uIHhlKFllLEplKXtKZS5y''@;'; put 'put ''ZXN1bWVTY2hlZHVsZWR8fChKZS5yZXN1bWVTY2hlZHVsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhMZSxZZSxKZSkpfSh0aGlzLFllKSksWWUucGF1c2VkPSExLHRoaXN9LEcucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEkoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKEkoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30sRy5wcm90b3R5''@;'; put 'put ''cGUud3JhcD1mdW5jdGlvbihZZSl7dmFyIEplPXRoaXMsbHQ9dGhpcy5fcmVhZGFibGVTdGF0ZSxQZT0hMTtmb3IodmFyIGJlIGluIFllLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoSSgid3JhcHBlZCBlbmQiKSxsdC5kZWNvZGVyJiYhbHQuZW5kZWQpe3ZhciBUZT1sdC5kZWNvZGVyLmVuZCgp''@;'; put 'put ''O1RlJiZUZS5sZW5ndGgmJkplLnB1c2goVGUpfUplLnB1c2gobnVsbCl9KSxZZS5vbigiZGF0YSIsZnVuY3Rpb24oVGUpe0koIndyYXBwZWQgZGF0YSIpLGx0LmRlY29kZXImJihUZT1sdC5kZWNvZGVyLndyaXRlKFRlKSksbHQub2JqZWN0TW9kZSYmbnVsbD09VGV8fCEobHQub2JqZWN0TW9k''@;'; put 'put ''ZXx8VGUmJlRlLmxlbmd0aCl8fEplLnB1c2goVGUpfHwoUGU9ITAsWWUucGF1c2UoKSl9KSxZZSl2b2lkIDA9PT10aGlzW2JlXSYmImZ1bmN0aW9uIj09dHlwZW9mIFllW2JlXSYmKHRoaXNbYmVdPWZ1bmN0aW9uKHFlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWWVbcWVdLmFwcGx5KFll''@;'; put 'put ''LGFyZ3VtZW50cyl9fShiZSkpO2Zvcih2YXIgQWU9MDtBZTxoZS5sZW5ndGg7QWUrKylZZS5vbihoZVtBZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxoZVtBZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihUZSl7SSgid3JhcHBlZCBfcmVhZCIsVGUpLFBlJiYoUGU9ITEsWWUucmVzdW1l''@;'; put 'put ''KCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoRy5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRlJiYodGU9RigxMDQ1NykpLHRlKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEcucHJvdG90eXBlLCJy''@;'; put 'put ''ZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEcucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oSmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9SmUpfX0pLEcuX2Zyb21MaXN0PU9lLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtl''@;'; put 'put ''bnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoRy5mcm9tPWZ1bmN0aW9uKFllLEplKXtyZXR1cm4gdm9pZCAwPT09b2UmJihvZT1GKDMzMzM1KSksb2UoRyxZZSxKZSl9KX0s''@;'; put 'put ''MTYzMDc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9ejt2YXIgYWU9Rig5NzIxOCkucSx4PWFlLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELG09YWUuRVJSX01VTFRJUExFX0NBTExCQUNLLGxlPWFlLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsTT1h''@;'; put 'put ''ZS5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAsTz1GKDcwMjQ3KTtmdW5jdGlvbiBSKGssRSl7dmFyIGo9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ai50cmFuc2Zvcm1pbmc9ITE7dmFyIFY9ai53cml0ZWNiO2lmKG51bGw9PT1WKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgbSk7ai53''@;'; put 'put ''cml0ZWNodW5rPW51bGwsai53cml0ZWNiPW51bGwsbnVsbCE9RSYmdGhpcy5wdXNoKEUpLFYoayk7dmFyIEI9dGhpcy5fcmVhZGFibGVTdGF0ZTtCLnJlYWRpbmc9ITEsKEIubmVlZFJlYWRhYmxlfHxCLmxlbmd0aDxCLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEIuaGlnaFdhdGVyTWFy''@;'; put 'put ''ayl9ZnVuY3Rpb24geihrKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooayk7Ty5jYWxsKHRoaXMsayksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOlIuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51''@;'; put 'put ''bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLGsmJigiZnVuY3Rpb24iPT10eXBlb2Ygay50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09ay50cmFuc2Zv''@;'; put 'put ''cm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBrLmZsdXNoJiYodGhpcy5fZmx1c2g9ay5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsSyl9ZnVuY3Rpb24gSygpe3ZhciBrPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9J''@;'; put 'put ''KHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihFLGope0koayxFLGopfSl9ZnVuY3Rpb24gSShrLEUsail7aWYoRSlyZXR1cm4gay5lbWl0KCJlcnJvciIsRSk7aWYobnVsbCE9aiYmay5wdXNoKGopLGsuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyBNO2lmKGsu''@;'; put 'put ''X3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgbGU7cmV0dXJuIGsucHVzaChudWxsKX1GKDY2Njk4KSh6LE8pLHoucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oayxFKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxPLnByb3RvdHlwZS5w''@;'; put 'put ''dXNoLmNhbGwodGhpcyxrLEUpfSx6LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGssRSxqKXtqKG5ldyB4KCJfdHJhbnNmb3JtKCkiKSl9LHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihrLEUsail7dmFyIFY9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoVi53cml0ZWNiPWosVi53''@;'; put 'put ''cml0ZWNodW5rPWssVi53cml0ZWVuY29kaW5nPUUsIVYudHJhbnNmb3JtaW5nKXt2YXIgQj10aGlzLl9yZWFkYWJsZVN0YXRlOyhWLm5lZWRUcmFuc2Zvcm18fEIubmVlZFJlYWRhYmxlfHxCLmxlbmd0aDxCLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEIuaGlnaFdhdGVyTWFyayl9fSx6''@;'; put 'put ''LnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihrKXt2YXIgRT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09RS53cml0ZWNodW5rfHxFLnRyYW5zZm9ybWluZz9FLm5lZWRUcmFuc2Zvcm09ITA6KEUudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShFLndyaXRlY2h1bmssRS53cml0''@;'; put 'put ''ZWVuY29kaW5nLEUuYWZ0ZXJUcmFuc2Zvcm0pKX0sei5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oayxFKXtPLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsayxmdW5jdGlvbihqKXtFKGopfSl9fSw1NjU2MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChGZSl7''@;'; put 'put ''dmFyIE9lPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIExlKEZlLE9lLEJlKXt2YXIgV2U9RmUuZW50cnk7Zm9yKEZlLmVudHJ5PW51bGw7V2U7KXt2YXIgS2U9V2UuY2FsbGJhY2s7T2UucGVuZGluZ2NiLS0sS2Uo''@;'; put 'put ''QmUpLFdlPVdlLm5leHR9T2UuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9RmV9KE9lLEZlKX19dmFyIG07YXQuZXhwb3J0cz1jZSxjZS5Xcml0YWJsZVN0YXRlPWhlO3ZhciB1ZSxsZT17ZGVwcmVjYXRlOkYoOTA0OTYpfSxNPUYoNzgyNDApLE89RigzOTAwNykuQnVmZmVyLFI9KHR5cGVvZiBn''@;'; put 'put ''bG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxJPUYoNjU2MDEpLEU9Rig3ODc4MikuZ2V0SGlnaFdhdGVyTWFyayxqPUYoOTcyMTgpLnEsVj1qLkVSUl9JTlZBTElEX0FSR19U''@;'; put 'put ''WVBFLEI9ai5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxZPWouRVJSX01VTFRJUExFX0NBTExCQUNLLFg9ai5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLFU9ai5FUlJfU1RSRUFNX0RFU1RST1lFRCxxPWouRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxlZT1qLkVSUl9TVFJFQU1fV1JJVEVfQUZU''@;'; put 'put ''RVJfRU5ELHRlPWouRVJSX1VOS05PV05fRU5DT0RJTkcsb2U9SS5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiBzZSgpe31mdW5jdGlvbiBoZShGZSxPZSxCZSl7bT1tfHxGKDcwMjQ3KSwiYm9vbGVhbiIhPXR5cGVvZiBCZSYmKEJlPU9lIGluc3RhbmNlb2YgbSksdGhpcy5vYmplY3RNb2RlPSEh''@;'; put 'put ''KEZlPUZlfHx7fSkub2JqZWN0TW9kZSxCZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhRmUud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9RSh0aGlzLEZlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLEJlKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRo''@;'; put 'put ''aXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PUZlLmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPUZlLmRlZmF1bHRFbmNvZGluZ3x8''@;'; put 'put ''InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oS2UpeyFmdW5jdGlvbiBTKEZlLE9lKXt2YXIgQmU9RmUuX3dyaXRhYmxlU3RhdGUsV2U9QmUu''@;'; put 'put ''c3luYyxLZT1CZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBLZSl0aHJvdyBuZXcgWTtpZihmdW5jdGlvbiBDKEZlKXtGZS53cml0aW5nPSExLEZlLndyaXRlY2I9bnVsbCxGZS5sZW5ndGgtPUZlLndyaXRlbGVuLEZlLndyaXRlbGVuPTB9KEJlKSxPZSkhZnVuY3Rpb24gZyhGZSxP''@;'; put 'put ''ZSxCZSxXZSxLZSl7LS1PZS5wZW5kaW5nY2IsQmU/KHByb2Nlc3MubmV4dFRpY2soS2UsV2UpLHByb2Nlc3MubmV4dFRpY2soZmUsRmUsT2UpLEZlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxvZShGZSxXZSkpOihLZShXZSksRmUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVk''@;'; put 'put ''PSEwLG9lKEZlLFdlKSxmZShGZSxPZSkpfShGZSxCZSxXZSxPZSxLZSk7ZWxzZXt2YXIgWWU9SihCZSl8fEZlLmRlc3Ryb3llZDshWWUmJiFCZS5jb3JrZWQmJiFCZS5idWZmZXJQcm9jZXNzaW5nJiZCZS5idWZmZXJlZFJlcXVlc3QmJncoRmUsQmUpLFdlP3Byb2Nlc3MubmV4dFRpY2sodixG''@;'; put 'put ''ZSxCZSxZZSxLZSk6dihGZSxCZSxZZSxLZSl9fShPZSxLZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0''@;'; put 'put ''aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PUZlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhRmUuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyB4KHRoaXMpfWZ1bmN0aW9uIGNlKEZl''@;'; put 'put ''KXt2YXIgT2U9dGhpcyBpbnN0YW5jZW9mKG09bXx8Rig3MDI0NykpO2lmKCFPZSYmIXVlLmNhbGwoY2UsdGhpcykpcmV0dXJuIG5ldyBjZShGZSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgaGUoRmUsdGhpcyxPZSksdGhpcy53cml0YWJsZT0hMCxGZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBG''@;'; put 'put ''ZS53cml0ZSYmKHRoaXMuX3dyaXRlPUZlLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgRmUud3JpdGV2JiYodGhpcy5fd3JpdGV2PUZlLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIEZlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUZlLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBG''@;'; put 'put ''ZS5maW5hbCYmKHRoaXMuX2ZpbmFsPUZlLmZpbmFsKSksTS5jYWxsKHRoaXMpfWZ1bmN0aW9uIE4oRmUsT2UsQmUsV2UsS2UsWWUsSmUpe09lLndyaXRlbGVuPVdlLE9lLndyaXRlY2I9SmUsT2Uud3JpdGluZz0hMCxPZS5zeW5jPSEwLE9lLmRlc3Ryb3llZD9PZS5vbndyaXRlKG5ldyBVKCJ3''@;'; put 'put ''cml0ZSIpKTpCZT9GZS5fd3JpdGV2KEtlLE9lLm9ud3JpdGUpOkZlLl93cml0ZShLZSxZZSxPZS5vbndyaXRlKSxPZS5zeW5jPSExfWZ1bmN0aW9uIHYoRmUsT2UsQmUsV2Upe0JlfHxmdW5jdGlvbiBwKEZlLE9lKXswPT09T2UubGVuZ3RoJiZPZS5uZWVkRHJhaW4mJihPZS5uZWVkRHJhaW49''@;'; put 'put ''ITEsRmUuZW1pdCgiZHJhaW4iKSl9KEZlLE9lKSxPZS5wZW5kaW5nY2ItLSxXZSgpLGZlKEZlLE9lKX1mdW5jdGlvbiB3KEZlLE9lKXtPZS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBCZT1PZS5idWZmZXJlZFJlcXVlc3Q7aWYoRmUuX3dyaXRldiYmQmUmJkJlLm5leHQpe3ZhciBLZT1uZXcg''@;'; put 'put ''QXJyYXkoT2UuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLFllPU9lLmNvcmtlZFJlcXVlc3RzRnJlZTtZZS5lbnRyeT1CZTtmb3IodmFyIEplPTAsbHQ9ITA7QmU7KUtlW0plXT1CZSxCZS5pc0J1Znx8KGx0PSExKSxCZT1CZS5uZXh0LEplKz0xO0tlLmFsbEJ1ZmZlcnM9bHQsTihGZSxPZSwhMCxP''@;'; put 'put ''ZS5sZW5ndGgsS2UsIiIsWWUuZmluaXNoKSxPZS5wZW5kaW5nY2IrKyxPZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsWWUubmV4dD8oT2UuY29ya2VkUmVxdWVzdHNGcmVlPVllLm5leHQsWWUubmV4dD1udWxsKTpPZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IHgoT2UpLE9lLmJ1ZmZlcmVk''@;'; put 'put ''UmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO0JlOyl7dmFyIFBlPUJlLmNodW5rO2lmKE4oRmUsT2UsITEsT2Uub2JqZWN0TW9kZT8xOlBlLmxlbmd0aCxQZSxCZS5lbmNvZGluZyxCZS5jYWxsYmFjayksQmU9QmUubmV4dCxPZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLE9lLndyaXRpbmcpYnJl''@;'; put 'put ''YWt9bnVsbD09PUJlJiYoT2UubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1PZS5idWZmZXJlZFJlcXVlc3Q9QmUsT2UuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBKKEZlKXtyZXR1cm4gRmUuZW5kaW5nJiYwPT09RmUubGVuZ3RoJiZudWxsPT09RmUuYnVmZmVyZWRSZXF1ZXN0JiYh''@;'; put 'put ''RmUuZmluaXNoZWQmJiFGZS53cml0aW5nfWZ1bmN0aW9uIG5lKEZlLE9lKXtGZS5fZmluYWwoZnVuY3Rpb24oQmUpe09lLnBlbmRpbmdjYi0tLEJlJiZvZShGZSxCZSksT2UucHJlZmluaXNoZWQ9ITAsRmUuZW1pdCgicHJlZmluaXNoIiksZmUoRmUsT2UpfSl9ZnVuY3Rpb24gZmUoRmUsT2Up''@;'; put 'put ''e3ZhciBCZT1KKE9lKTtpZihCZSYmKGZ1bmN0aW9uIGRlKEZlLE9lKXshT2UucHJlZmluaXNoZWQmJiFPZS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiIhPXR5cGVvZiBGZS5fZmluYWx8fE9lLmRlc3Ryb3llZD8oT2UucHJlZmluaXNoZWQ9ITAsRmUuZW1pdCgicHJlZmluaXNoIikpOihPZS5w''@;'; put 'put ''ZW5kaW5nY2IrKyxPZS5maW5hbENhbGxlZD0hMCxwcm9jZXNzLm5leHRUaWNrKG5lLEZlLE9lKSkpfShGZSxPZSksMD09PU9lLnBlbmRpbmdjYiYmKE9lLmZpbmlzaGVkPSEwLEZlLmVtaXQoImZpbmlzaCIpLE9lLmF1dG9EZXN0cm95KSkpe3ZhciBXZT1GZS5fcmVhZGFibGVTdGF0ZTsoIVdl''@;'; put 'put ''fHxXZS5hdXRvRGVzdHJveSYmV2UuZW5kRW1pdHRlZCkmJkZlLmRlc3Ryb3koKX1yZXR1cm4gQmV9Rig2NjY5OCkoY2UsTSksaGUucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgT2U9dGhpcy5idWZmZXJlZFJlcXVlc3QsQmU9W107T2U7KUJlLnB1c2goT2UpLE9lPU9l''@;'; put 'put ''Lm5leHQ7cmV0dXJuIEJlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGUucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6bGUuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRl''@;'; put 'put ''ZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0''@;'; put 'put ''YW5jZV0/KHVlPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKE9lKXtyZXR1cm4hIXVlLmNhbGwodGhpcyxPZSl8fHRoaXM9PT1jZSYmT2UmJk9lLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlIGluc3RhbmNlb2YgaGV9fSkpOnVlPWZ1bmN0aW9uKE9lKXtyZXR1cm4gT2UgaW5zdGFuY2VvZiB0aGlzfSxjZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe29lKHRoaXMsbmV3IFgpfSxjZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oRmUsT2UsQmUpe3ZhciBXZT10aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlLEtlPSExLFllPSFXZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBLKEZlKXtyZXR1cm4gTy5pc0J1ZmZlcihGZSl8fEZlIGluc3RhbmNlb2YgUn0oRmUpO3JldHVybiBZZSYmIU8uaXNCdWZmZXIoRmUpJiYoRmU9ZnVuY3Rpb24geihGZSl7cmV0dXJuIE8uZnJvbShGZSl9KEZl''@;'; put 'put ''KSksImZ1bmN0aW9uIj09dHlwZW9mIE9lJiYoQmU9T2UsT2U9bnVsbCksWWU/T2U9ImJ1ZmZlciI6T2V8fChPZT1XZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBCZSYmKEJlPXNlKSxXZS5lbmRpbmc/ZnVuY3Rpb24gRyhGZSxPZSl7dmFyIEJlPW5ldyBlZTtvZShGZSxC''@;'; put 'put ''ZSkscHJvY2Vzcy5uZXh0VGljayhPZSxCZSl9KHRoaXMsQmUpOihZZXx8ZnVuY3Rpb24gYihGZSxPZSxCZSxXZSl7dmFyIEtlO3JldHVybiBudWxsPT09QmU/S2U9bmV3IHE6InN0cmluZyIhPXR5cGVvZiBCZSYmIU9lLm9iamVjdE1vZGUmJihLZT1uZXcgVigiY2h1bmsiLFsic3RyaW5nIiwi''@;'; put 'put ''QnVmZmVyIl0sQmUpKSwhS2V8fChvZShGZSxLZSkscHJvY2Vzcy5uZXh0VGljayhXZSxLZSksITEpfSh0aGlzLFdlLEZlLEJlKSkmJihXZS5wZW5kaW5nY2IrKyxLZT1mdW5jdGlvbiBIKEZlLE9lLEJlLFdlLEtlLFllKXtpZighQmUpe3ZhciBKZT1mdW5jdGlvbiBEKEZlLE9lLEJlKXtyZXR1''@;'; put 'put ''cm4hRmUub2JqZWN0TW9kZSYmITEhPT1GZS5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIE9lJiYoT2U9Ty5mcm9tKE9lLEJlKSksT2V9KE9lLFdlLEtlKTtXZSE9PUplJiYoQmU9ITAsS2U9ImJ1ZmZlciIsV2U9SmUpfXZhciBsdD1PZS5vYmplY3RNb2RlPzE6V2UubGVuZ3RoO09l''@;'; put 'put ''Lmxlbmd0aCs9bHQ7dmFyIFBlPU9lLmxlbmd0aDxPZS5oaWdoV2F0ZXJNYXJrO2lmKFBlfHwoT2UubmVlZERyYWluPSEwKSxPZS53cml0aW5nfHxPZS5jb3JrZWQpe3ZhciBiZT1PZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O09lLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOldlLGVuY29kaW5n''@;'; put 'put ''OktlLGlzQnVmOkJlLGNhbGxiYWNrOlllLG5leHQ6bnVsbH0sYmU/YmUubmV4dD1PZS5sYXN0QnVmZmVyZWRSZXF1ZXN0Ok9lLmJ1ZmZlcmVkUmVxdWVzdD1PZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LE9lLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgTihGZSxPZSwhMSxsdCxXZSxLZSxZ''@;'; put 'put ''ZSk7cmV0dXJuIFBlfSh0aGlzLFdlLFllLEZlLE9lLEJlKSksS2V9LGNlLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sY2UucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBGZT10aGlzLl93cml0YWJsZVN0YXRlO0ZlLmNvcmtl''@;'; put 'put ''ZCYmKEZlLmNvcmtlZC0tLCFGZS53cml0aW5nJiYhRmUuY29ya2VkJiYhRmUuYnVmZmVyUHJvY2Vzc2luZyYmRmUuYnVmZmVyZWRSZXF1ZXN0JiZ3KHRoaXMsRmUpKX0sY2UucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihPZSl7aWYoInN0cmluZyI9PXR5cGVvZiBPZSYm''@;'; put 'put ''KE9lPU9lLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKE9lKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IHRlKE9l''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9T2UsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0''@;'; put 'put ''aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319''@;'; put 'put ''KSxjZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEZlLE9lLEJlKXtCZShuZXcgQigiX3dyaXRlKCkiKSl9LGNlLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsY2UucHJvdG90eXBlLmVuZD1mdW5jdGlvbihGZSxPZSxCZSl7dmFyIFdlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIEZlPyhCZT1GZSxGZT1udWxsLE9lPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBPZSYmKEJlPU9lLE9lPW51bGwpLG51bGwhPUZlJiZ0aGlzLndyaXRlKEZlLE9lKSxXZS5jb3JrZWQmJihXZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxXZS5lbmRpbmd8fGZ1bmN0aW9u''@;'; put 'put ''IHhlKEZlLE9lLEJlKXtPZS5lbmRpbmc9ITAsZmUoRmUsT2UpLEJlJiYoT2UuZmluaXNoZWQ/cHJvY2Vzcy5uZXh0VGljayhCZSk6RmUub25jZSgiZmluaXNoIixCZSkpLE9lLmVuZGVkPSEwLEZlLndyaXRhYmxlPSExfSh0aGlzLFdlLEJlKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''Y2UucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oT2Upe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1PZSl9fSksY2UucHJvdG90eXBl''@;'; put 'put ''LmRlc3Ryb3k9SS5kZXN0cm95LGNlLnByb3RvdHlwZS5fdW5kZXN0cm95PUkudW5kZXN0cm95LGNlLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihGZSxPZSl7T2UoRmUpfX0sMTA0NTc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZTtmdW5jdGlvbiB4KGVlLHRlLG9lKXtyZXR1''@;'; put 'put ''cm4gdGU9ZnVuY3Rpb24gbShlZSl7dmFyIHRlPWZ1bmN0aW9uIGxlKGVlLHRlKXtpZigib2JqZWN0IiE9dHlwZW9mIGVlfHxudWxsPT09ZWUpcmV0dXJuIGVlO3ZhciBvZT1lZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW9lKXt2YXIgc2U9b2UuY2FsbChlZSx0ZXx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIHNlKXJldHVybiBzZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXRlP1N0cmluZzpOdW1iZXIpKGVlKX0oZWUsInN0cmluZyIpO3JldHVy''@;'; put 'put ''biJzeW1ib2wiPT10eXBlb2YgdGU/dGU6U3RyaW5nKHRlKX0odGUpLHRlIGluIGVlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlZSx0ZSx7dmFsdWU6b2UsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplZVt0ZV09b2UsZWV9dmFyIE09Rig1NDYxOCksTz1TeW1i''@;'; put 'put ''b2woImxhc3RSZXNvbHZlIiksUj1TeW1ib2woImxhc3RSZWplY3QiKSx6PVN5bWJvbCgiZXJyb3IiKSxLPVN5bWJvbCgiZW5kZWQiKSxJPVN5bWJvbCgibGFzdFByb21pc2UiKSxrPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLEU9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBqKGVlLHRlKXty''@;'; put 'put ''ZXR1cm57dmFsdWU6ZWUsZG9uZTp0ZX19ZnVuY3Rpb24gVihlZSl7dmFyIHRlPWVlW09dO2lmKG51bGwhPT10ZSl7dmFyIG9lPWVlW0VdLnJlYWQoKTtudWxsIT09b2UmJihlZVtJXT1udWxsLGVlW09dPW51bGwsZWVbUl09bnVsbCx0ZShqKG9lLCExKSkpfX1mdW5jdGlvbiBCKGVlKXtwcm9j''@;'; put 'put ''ZXNzLm5leHRUaWNrKFYsZWUpfXZhciBYPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLFU9T2JqZWN0LnNldFByb3RvdHlwZU9mKCh4KGFlPXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNbRV19LG5leHQ6ZnVuY3Rpb24oKXt2YXIgdGU9dGhpcyxvZT10aGlzW3pdO2lmKG51''@;'; put 'put ''bGwhPT1vZSlyZXR1cm4gUHJvbWlzZS5yZWplY3Qob2UpO2lmKHRoaXNbS10pcmV0dXJuIFByb21pc2UucmVzb2x2ZShqKHZvaWQgMCwhMCkpO2lmKHRoaXNbRV0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjZSxHKXtwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7''@;'; put 'put ''dGVbel0/Ryh0ZVt6XSk6Y2Uoaih2b2lkIDAsITApKX0pfSk7dmFyIGhlLHNlPXRoaXNbSV07aWYoc2UpaGU9bmV3IFByb21pc2UoZnVuY3Rpb24gWShlZSx0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lLHNlKXtlZS50aGVuKGZ1bmN0aW9uKCl7dGVbS10/b2Uoaih2b2lkIDAsITApKTp0ZVtrXShv''@;'; put 'put ''ZSxzZSl9LHNlKX19KHNlLHRoaXMpKTtlbHNle3ZhciB1ZT10aGlzW0VdLnJlYWQoKTtpZihudWxsIT09dWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShqKHVlLCExKSk7aGU9bmV3IFByb21pc2UodGhpc1trXSl9cmV0dXJuIHRoaXNbSV09aGUsaGV9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzfSkseChhZSwicmV0dXJuIixmdW5jdGlvbigpe3ZhciB0ZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvZSxzZSl7dGVbRV0uZGVzdHJveShudWxsLGZ1bmN0aW9uKGhlKXtoZT9zZShoZSk6b2Uoaih2b2lkIDAsITApKX0pfSl9KSxhZSks''@;'; put 'put ''WCk7YXQuZXhwb3J0cz1mdW5jdGlvbih0ZSl7dmFyIG9lLHNlPU9iamVjdC5jcmVhdGUoVSwoeChvZT17fSxFLHt2YWx1ZTp0ZSx3cml0YWJsZTohMH0pLHgob2UsTyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHgob2UsUix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHgob2Useix7dmFs''@;'; put 'put ''dWU6bnVsbCx3cml0YWJsZTohMH0pLHgob2UsSyx7dmFsdWU6dGUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLHgob2Usayx7dmFsdWU6ZnVuY3Rpb24odWUsY2Upe3ZhciBHPXNlW0VdLnJlYWQoKTtHPyhzZVtJXT1udWxsLHNlW09dPW51bGwsc2VbUl09bnVsbCx1''@;'; put 'put ''ZShqKEcsITEpKSk6KHNlW09dPXVlLHNlW1JdPWNlKX0sd3JpdGFibGU6ITB9KSxvZSkpO3JldHVybiBzZVtJXT1udWxsLE0odGUsZnVuY3Rpb24oaGUpe2lmKGhlJiYiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiIT09aGUuY29kZSl7dmFyIHVlPXNlW1JdO3JldHVybiBudWxsIT09dWUm''@;'; put 'put ''JihzZVtJXT1udWxsLHNlW09dPW51bGwsc2VbUl09bnVsbCx1ZShoZSkpLHZvaWQoc2Vbel09aGUpfXZhciBjZT1zZVtPXTtudWxsIT09Y2UmJihzZVtJXT1udWxsLHNlW09dPW51bGwsc2VbUl09bnVsbCxjZShqKHZvaWQgMCwhMCkpKSxzZVtLXT0hMH0pLHRlLm9uKCJyZWFkYWJsZSIsQi5i''@;'; put 'put ''aW5kKG51bGwsc2UpKSxzZX19LDI5NjA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGFlKEIsWSl7dmFyIFg9T2JqZWN0LmtleXMoQik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIFU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhCKTtZJiYoVT1V''@;'; put 'put ''LmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCLHEpLmVudW1lcmFibGV9KSksWC5wdXNoLmFwcGx5KFgsVSl9cmV0dXJuIFh9ZnVuY3Rpb24geChCKXtmb3IodmFyIFk9MTtZPGFyZ3VtZW50cy5sZW5ndGg7WSsrKXt2YXIgWD1udWxs''@;'; put 'put ''IT1hcmd1bWVudHNbWV0/YXJndW1lbnRzW1ldOnt9O1klMj9hZShPYmplY3QoWCksITApLmZvckVhY2goZnVuY3Rpb24oVSl7bShCLFUsWFtVXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhCLE9iamVjdC5nZXRPd25Qcm9wZXJ0''@;'; put 'put ''eURlc2NyaXB0b3JzKFgpKTphZShPYmplY3QoWCkpLmZvckVhY2goZnVuY3Rpb24oVSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsVSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFgsVSkpfSl9cmV0dXJuIEJ9ZnVuY3Rpb24gbShCLFksWCl7cmV0dXJuKFk9UihZKSlpbiBCP09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShCLFkse3ZhbHVlOlgsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpCW1ldPVgsQn1mdW5jdGlvbiBNKEIsWSl7Zm9yKHZhciBYPTA7WDxZLmxlbmd0aDtYKyspe3ZhciBVPVlbWF07VS5lbnVtZXJhYmxlPVUuZW51bWVyYWJs''@;'; put 'put ''ZXx8ITEsVS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFUmJihVLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQixSKFUua2V5KSxVKX19ZnVuY3Rpb24gUihCKXt2YXIgWT1mdW5jdGlvbiB6KEIsWSl7aWYoIm9iamVjdCIhPXR5cGVvZiBCfHxudWxsPT09QilyZXR1cm4g''@;'; put 'put ''Qjt2YXIgWD1CW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09WCl7dmFyIFU9WC5jYWxsKEIsWXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIFUpcmV0dXJuIFU7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2''@;'; put 'put ''YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1ZP1N0cmluZzpOdW1iZXIpKEIpfShCLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIFk/WTpTdHJpbmcoWSl9dmFyIEk9RigzOTAwNykuQnVmZmVyLEU9Rig1MjM2MSkuaW5zcGVjdCxqPUUmJkUuY3VzdG9tfHwiaW5zcGVjdCI7ZnVu''@;'; put 'put ''Y3Rpb24gVihCLFksWCl7SS5wcm90b3R5cGUuY29weS5jYWxsKEIsWSxYKX1hdC5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQigpeyhmdW5jdGlvbiBsZShCLFkpe2lmKCEoQiBpbnN0YW5jZW9mIFkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBm''@;'; put 'put ''dW5jdGlvbiIpfSkodGhpcyxCKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBmdW5jdGlvbiBPKEIsWSxYKXtZJiZNKEIucHJvdG90eXBlLFkpLFgmJk0oQixYKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQiwicHJvdG90eXBlIix7d3JpdGFibGU6''@;'; put 'put ''ITF9KX0oQixbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oWCl7dmFyIFU9e2RhdGE6WCxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9VTp0aGlzLmhlYWQ9VSx0aGlzLnRhaWw9VSwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24o''@;'; put 'put ''WCl7dmFyIFU9e2RhdGE6WCxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPVUpLHRoaXMuaGVhZD1VLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBYPXRoaXMuaGVhZC5kYXRhO3Jl''@;'; put 'put ''dHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsWH19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZh''@;'; put 'put ''bHVlOmZ1bmN0aW9uKFgpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFU9dGhpcy5oZWFkLHE9IiIrVS5kYXRhO1U9VS5uZXh0OylxKz1YK1UuZGF0YTtyZXR1cm4gcX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oWCl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVy''@;'; put 'put ''biBJLmFsbG9jKDApO2Zvcih2YXIgVT1JLmFsbG9jVW5zYWZlKFg+Pj4wKSxxPXRoaXMuaGVhZCxlZT0wO3E7KVYocS5kYXRhLFUsZWUpLGVlKz1xLmRhdGEubGVuZ3RoLHE9cS5uZXh0O3JldHVybiBVfX0se2tleToiY29uc3VtZSIsdmFsdWU6ZnVuY3Rpb24oWCxVKXt2YXIgcTtyZXR1cm4g''@;'; put 'put ''WDx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KHE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxYKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShYKSk6cT1YPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTpVP3RoaXMuX2dldFN0cmluZyhYKTp0aGlzLl9nZXRC''@;'; put 'put ''dWZmZXIoWCkscX19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKFgpe3ZhciBVPXRoaXMuaGVhZCxxPTEsZWU9VS5kYXRhO2ZvcihYLT1lZS5sZW5ndGg7VT1VLm5leHQ7KXt2YXIg''@;'; put 'put ''dGU9VS5kYXRhLG9lPVg+dGUubGVuZ3RoP3RlLmxlbmd0aDpYO2lmKGVlKz1vZT09PXRlLmxlbmd0aD90ZTp0ZS5zbGljZSgwLFgpLDA9PShYLT1vZSkpe29lPT09dGUubGVuZ3RoPygrK3EsdGhpcy5oZWFkPVUubmV4dD9VLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9VSxVLmRh''@;'; put 'put ''dGE9dGUuc2xpY2Uob2UpKTticmVha30rK3F9cmV0dXJuIHRoaXMubGVuZ3RoLT1xLGVlfX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oWCl7dmFyIFU9SS5hbGxvY1Vuc2FmZShYKSxxPXRoaXMuaGVhZCxlZT0xO2ZvcihxLmRhdGEuY29weShVKSxYLT1xLmRhdGEubGVuZ3Ro''@;'; put 'put ''O3E9cS5uZXh0Oyl7dmFyIHRlPXEuZGF0YSxvZT1YPnRlLmxlbmd0aD90ZS5sZW5ndGg6WDtpZih0ZS5jb3B5KFUsVS5sZW5ndGgtWCwwLG9lKSwwPT0oWC09b2UpKXtvZT09PXRlLmxlbmd0aD8oKytlZSx0aGlzLmhlYWQ9cS5uZXh0P3EubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVh''@;'; put 'put ''ZD1xLHEuZGF0YT10ZS5zbGljZShvZSkpO2JyZWFrfSsrZWV9cmV0dXJuIHRoaXMubGVuZ3RoLT1lZSxVfX0se2tleTpqLHZhbHVlOmZ1bmN0aW9uKFgsVSl7cmV0dXJuIEUodGhpcyx4KHgoe30sVSkse30se2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSksQn0oKX0sNjU2MDE6YXQ9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gRihNLE8pe20oTSxPKSxhZShNKX1mdW5jdGlvbiBhZShNKXtNLl93cml0YWJsZVN0YXRlJiYhTS5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fE0uX3JlYWRhYmxlU3RhdGUmJiFNLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8TS5lbWl0KCJjbG9z''@;'; put 'put ''ZSIpfWZ1bmN0aW9uIG0oTSxPKXtNLmVtaXQoImVycm9yIixPKX1hdC5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIEllKE0sTyl7dmFyIFI9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUm''@;'; put 'put ''JnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhPP08oTSk6TSYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKG0sdGhpcyxNKSk6cHJv''@;'; put 'put ''Y2Vzcy5uZXh0VGljayhtLHRoaXMsTSkpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShNfHxudWxs''@;'; put 'put ''LGZ1bmN0aW9uKEkpeyFPJiZJP1IuX3dyaXRhYmxlU3RhdGU/Ui5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/cHJvY2Vzcy5uZXh0VGljayhhZSxSKTooUi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhGLFIsSSkpOnByb2Nlc3MubmV4dFRpY2so''@;'; put 'put ''RixSLEkpOk8/KHByb2Nlc3MubmV4dFRpY2soYWUsUiksTyhJKSk6cHJvY2Vzcy5uZXh0VGljayhhZSxSKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24geCgpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEx''@;'; put 'put ''KX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24gbGUoTSxPKXt2YXIgUj1NLl9yZWFkYWJsZVN0YXRlLHo9TS5fd3JpdGFibGVTdGF0ZTtSJiZSLmF1dG9EZXN0cm95fHx6JiZ6LmF1dG9EZXN0cm95P00uZGVzdHJveShPKTpNLmVtaXQoImVycm9yIixPKX19fSw1NDYxODooYXQsSWUsRik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIGFlPUYoOTcyMTgpLnEuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gbSgpe31hdC5leHBvcnRzPWZ1bmN0aW9uIE0oTyxSLHope2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBSKXJldHVybiBNKE8sbnVsbCxSKTtSfHwoUj17fSksej1mdW5jdGlvbiB4''@;'; put 'put ''KE8pe3ZhciBSPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFSKXtSPSEwO2Zvcih2YXIgej1hcmd1bWVudHMubGVuZ3RoLEs9bmV3IEFycmF5KHopLEk9MDtJPHo7SSsrKUtbSV09YXJndW1lbnRzW0ldO08uYXBwbHkodGhpcyxLKX19fSh6fHxtKTt2YXIgSz1SLnJlYWRhYmxlfHwhMSE9PVIu''@;'; put 'put ''cmVhZGFibGUmJk8ucmVhZGFibGUsST1SLndyaXRhYmxlfHwhMSE9PVIud3JpdGFibGUmJk8ud3JpdGFibGUsaz1mdW5jdGlvbigpe08ud3JpdGFibGV8fGooKX0sRT1PLl93cml0YWJsZVN0YXRlJiZPLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLGo9ZnVuY3Rpb24oKXtJPSExLEU9ITAsS3x8''@;'; put 'put ''ei5jYWxsKE8pfSxWPU8uX3JlYWRhYmxlU3RhdGUmJk8uX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxCPWZ1bmN0aW9uKCl7Sz0hMSxWPSEwLEl8fHouY2FsbChPKX0sWT1mdW5jdGlvbihlZSl7ei5jYWxsKE8sZWUpfSxYPWZ1bmN0aW9uKCl7dmFyIGVlO3JldHVybiBLJiYhVj8oKCFPLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlfHwhTy5fcmVhZGFibGVTdGF0ZS5lbmRlZCkmJihlZT1uZXcgYWUpLHouY2FsbChPLGVlKSk6SSYmIUU/KCghTy5fd3JpdGFibGVTdGF0ZXx8IU8uX3dyaXRhYmxlU3RhdGUuZW5kZWQpJiYoZWU9bmV3IGFlKSx6LmNhbGwoTyxlZSkpOnZvaWQgMH0sVT1mdW5jdGlvbigp''@;'; put 'put ''e08ucmVxLm9uKCJmaW5pc2giLGopfTtyZXR1cm4gZnVuY3Rpb24gbGUoTyl7cmV0dXJuIE8uc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5hYm9ydH0oTyk/KE8ub24oImNvbXBsZXRlIixqKSxPLm9uKCJhYm9ydCIsWCksTy5yZXE/VSgpOk8ub24oInJlcXVlc3QiLFUpKTpJJiYh''@;'; put 'put ''Ty5fd3JpdGFibGVTdGF0ZSYmKE8ub24oImVuZCIsayksTy5vbigiY2xvc2UiLGspKSxPLm9uKCJlbmQiLEIpLE8ub24oImZpbmlzaCIsaiksITEhPT1SLmVycm9yJiZPLm9uKCJlcnJvciIsWSksTy5vbigiY2xvc2UiLFgpLGZ1bmN0aW9uKCl7Ty5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUi''@;'; put 'put ''LGopLE8ucmVtb3ZlTGlzdGVuZXIoImFib3J0IixYKSxPLnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixVKSxPLnJlcSYmTy5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaiksTy5yZW1vdmVMaXN0ZW5lcigiZW5kIixrKSxPLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsayksTy5yZW1vdmVM''@;'; put 'put ''aXN0ZW5lcigiZmluaXNoIixqKSxPLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEIpLE8ucmVtb3ZlTGlzdGVuZXIoImVycm9yIixZKSxPLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsWCl9fX0sMzMzMzU6YXQ9PnthdC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZWFkYWJsZS5m''@;'; put 'put ''cm9tIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIiKX19LDg0NTE0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWUsbT1GKDk3MjE4KS5xLGxlPW0uRVJSX01JU1NJTkdfQVJHUyxNPW0uRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gTyhqKXtpZihqKXRocm93IGp9''@;'; put 'put ''ZnVuY3Rpb24gSyhqKXtqKCl9ZnVuY3Rpb24gSShqLFYpe3JldHVybiBqLnBpcGUoVil9YXQuZXhwb3J0cz1mdW5jdGlvbiBFKCl7Zm9yKHZhciBqPWFyZ3VtZW50cy5sZW5ndGgsVj1uZXcgQXJyYXkoaiksQj0wO0I8ajtCKyspVltCXT1hcmd1bWVudHNbQl07dmFyIFk9ZnVuY3Rpb24gayhq''@;'; put 'put ''KXtyZXR1cm4gai5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBqW2oubGVuZ3RoLTFdP2oucG9wKCk6T30oVik7aWYoQXJyYXkuaXNBcnJheShWWzBdKSYmKFY9VlswXSksVi5sZW5ndGg8Mil0aHJvdyBuZXcgbGUoInN0cmVhbXMiKTt2YXIgWCxVPVYubWFwKGZ1bmN0aW9uKHEsZWUpe3Zh''@;'; put 'put ''ciB0ZT1lZTxWLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbiB6KGosVixCLFkpe1k9ZnVuY3Rpb24geChqKXt2YXIgVj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtWfHwoVj0hMCxqLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KFkpO3ZhciBYPSExO2oub24oImNsb3NlIixmdW5jdGlvbigpe1g9''@;'; put 'put ''ITB9KSx2b2lkIDA9PT1hZSYmKGFlPUYoNTQ2MTgpKSxhZShqLHtyZWFkYWJsZTpWLHdyaXRhYmxlOkJ9LGZ1bmN0aW9uKHEpe2lmKHEpcmV0dXJuIFkocSk7WD0hMCxZKCl9KTt2YXIgVT0hMTtyZXR1cm4gZnVuY3Rpb24ocSl7aWYoIVgmJiFVKXtpZihVPSEwLGZ1bmN0aW9uIFIoail7cmV0''@;'; put 'put ''dXJuIGouc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2Ygai5hYm9ydH0oaikpcmV0dXJuIGouYWJvcnQoKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygai5kZXN0cm95KXJldHVybiBqLmRlc3Ryb3koKTtZKHF8fG5ldyBNKCJwaXBlIikpfX19KHEsdGUsZWU+MCxmdW5jdGlvbihzZSl7WHx8''@;'; put 'put ''KFg9c2UpLHNlJiZVLmZvckVhY2goSyksIXRlJiYoVS5mb3JFYWNoKEspLFkoWCkpfSl9KTtyZXR1cm4gVi5yZWR1Y2UoSSl9fSw3ODc4MjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoOTcyMTgpLnEuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO2F0LmV4cG9ydHM9e2dldEhpZ2hX''@;'; put 'put ''YXRlck1hcms6ZnVuY3Rpb24gbShsZSxNLE8sUil7dmFyIHo9ZnVuY3Rpb24geChsZSxNLE8pe3JldHVybiBudWxsIT1sZS5oaWdoV2F0ZXJNYXJrP2xlLmhpZ2hXYXRlck1hcms6TT9sZVtPXTpudWxsfShNLFIsTyk7aWYobnVsbCE9eil7aWYoIWlzRmluaXRlKHopfHxNYXRoLmZsb29yKHop''@;'; put 'put ''IT09enx8ejwwKXRocm93IG5ldyBhZShSP086ImhpZ2hXYXRlck1hcmsiLHopO3JldHVybiBNYXRoLmZsb29yKHopfXJldHVybiBsZS5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LDc4MjQwOihhdCxJZSxGKT0+e2F0LmV4cG9ydHM9Rig4MjAxNikuRXZlbnRFbWl0dGVyfSw5Njc0NTooYXQsSWUs''@;'; put 'put ''Rik9PnsoSWU9YXQuZXhwb3J0cz1GKDgwMzA5KSkuU3RyZWFtPUllLEllLlJlYWRhYmxlPUllLEllLldyaXRhYmxlPUYoNTY1NjMpLEllLkR1cGxleD1GKDcwMjQ3KSxJZS5UcmFuc2Zvcm09RigxNjMwNyksSWUuUGFzc1Rocm91Z2g9Rig5NTA5NiksSWUuZmluaXNoZWQ9Rig1NDYxOCksSWUu''@;'; put 'put ''cGlwZWxpbmU9Rig4NDUxNCl9LDM5NzA2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzOTAwNykuQnVmZmVyLHg9Rig2NjY5OCksbT1GKDYwMzgwKSxsZT1uZXcgQXJyYXkoMTYpLE09WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAs''@;'; put 'put ''NiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sTz1bNSwxNCw3LDAsOSwyLDExLDQsMTMs''@;'; put 'put ''NiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5''@;'; put 'put ''LDExXSxSPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUs''@;'; put 'put ''MTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSx6PVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcs''@;'; put 'put ''NSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSxLPVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLEk9WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcy''@;'; put 'put ''NjkxLDIwNTM5OTQyMTcsMF07ZnVuY3Rpb24gaygpe20uY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9ZnVuY3Rpb24gRShVLHEpe3JldHVybiBV''@;'; put 'put ''PDxxfFU+Pj4zMi1xfWZ1bmN0aW9uIGooVSxxLGVlLHRlLG9lLHNlLGhlLHVlKXtyZXR1cm4gRShVKyhxXmVlXnRlKStzZStoZXwwLHVlKStvZXwwfWZ1bmN0aW9uIFYoVSxxLGVlLHRlLG9lLHNlLGhlLHVlKXtyZXR1cm4gRShVKyhxJmVlfH5xJnRlKStzZStoZXwwLHVlKStvZXwwfWZ1bmN0''@;'; put 'put ''aW9uIEIoVSxxLGVlLHRlLG9lLHNlLGhlLHVlKXtyZXR1cm4gRShVKygocXx+ZWUpXnRlKStzZStoZXwwLHVlKStvZXwwfWZ1bmN0aW9uIFkoVSxxLGVlLHRlLG9lLHNlLGhlLHVlKXtyZXR1cm4gRShVKyhxJnRlfGVlJn50ZSkrc2UraGV8MCx1ZSkrb2V8MH1mdW5jdGlvbiBYKFUscSxlZSx0''@;'; put 'put ''ZSxvZSxzZSxoZSx1ZSl7cmV0dXJuIEUoVSsocV4oZWV8fnRlKSkrc2UraGV8MCx1ZSkrb2V8MH14KGssbSksay5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgVT1sZSxxPTA7cTwxNjsrK3EpVVtxXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KnEpO2Zvcih2YXIgZWU9''@;'; put 'put ''MHx0aGlzLl9hLHRlPTB8dGhpcy5fYixvZT0wfHRoaXMuX2Msc2U9MHx0aGlzLl9kLGhlPTB8dGhpcy5fZSx1ZT0wfHRoaXMuX2EsY2U9MHx0aGlzLl9iLEc9MHx0aGlzLl9jLGI9MHx0aGlzLl9kLEQ9MHx0aGlzLl9lLEg9MDtIPDgwO0grPTEpe3ZhciBOLGc7SDwxNj8oTj1qKGVlLHRlLG9l''@;'; put 'put ''LHNlLGhlLFVbTVtIXV0sS1swXSxSW0hdKSxnPVgodWUsY2UsRyxiLEQsVVtPW0hdXSxJWzBdLHpbSF0pKTpIPDMyPyhOPVYoZWUsdGUsb2Usc2UsaGUsVVtNW0hdXSxLWzFdLFJbSF0pLGc9WSh1ZSxjZSxHLGIsRCxVW09bSF1dLElbMV0seltIXSkpOkg8NDg/KE49QihlZSx0ZSxvZSxzZSxo''@;'; put 'put ''ZSxVW01bSF1dLEtbMl0sUltIXSksZz1CKHVlLGNlLEcsYixELFVbT1tIXV0sSVsyXSx6W0hdKSk6SDw2ND8oTj1ZKGVlLHRlLG9lLHNlLGhlLFVbTVtIXV0sS1szXSxSW0hdKSxnPVYodWUsY2UsRyxiLEQsVVtPW0hdXSxJWzNdLHpbSF0pKTooTj1YKGVlLHRlLG9lLHNlLGhlLFVbTVtIXV0s''@;'; put 'put ''S1s0XSxSW0hdKSxnPWoodWUsY2UsRyxiLEQsVVtPW0hdXSxJWzRdLHpbSF0pKSxlZT1oZSxoZT1zZSxzZT1FKG9lLDEwKSxvZT10ZSx0ZT1OLHVlPUQsRD1iLGI9RShHLDEwKSxHPWNlLGNlPWd9dmFyIEM9dGhpcy5fYitvZStifDA7dGhpcy5fYj10aGlzLl9jK3NlK0R8MCx0aGlzLl9jPXRo''@;'; put 'put ''aXMuX2QraGUrdWV8MCx0aGlzLl9kPXRoaXMuX2UrZWUrY2V8MCx0aGlzLl9lPXRoaXMuX2ErdGUrR3wwLHRoaXMuX2E9Q30say5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRo''@;'; put 'put ''aXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhp''@;'; put 'put ''cy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBVPWFlLmFsbG9jP2FlLmFsbG9jKDIwKTpuZXcgYWUoMjApO3JldHVybiBVLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLFUud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksVS53cml0ZUlu''@;'; put 'put ''dDMyTEUodGhpcy5fYyw4KSxVLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxVLndyaXRlSW50MzJMRSh0aGlzLl9lLDE2KSxVfSxhdC5leHBvcnRzPWt9LDg0MzooYXQsSWUsRik9Pnt2YXIgYWU9RigzOTAwNykseD1hZS5CdWZmZXI7ZnVuY3Rpb24gbShNLE8pe2Zvcih2YXIgUiBpbiBNKU9b''@;'; put 'put ''Ul09TVtSXX1mdW5jdGlvbiBsZShNLE8sUil7cmV0dXJuIHgoTSxPLFIpfXguZnJvbSYmeC5hbGxvYyYmeC5hbGxvY1Vuc2FmZSYmeC5hbGxvY1Vuc2FmZVNsb3c/YXQuZXhwb3J0cz1hZToobShhZSxJZSksSWUuQnVmZmVyPWxlKSxsZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4LnByb3Rv''@;'; put 'put ''dHlwZSksbSh4LGxlKSxsZS5mcm9tPWZ1bmN0aW9uKE0sTyxSKXtpZigibnVtYmVyIj09dHlwZW9mIE0pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4geChNLE8sUil9LGxlLmFsbG9jPWZ1bmN0aW9uKE0sTyxSKXtpZigibnVtYmVy''@;'; put 'put ''IiE9dHlwZW9mIE0pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciB6PXgoTSk7cmV0dXJuIHZvaWQgMCE9PU8/InN0cmluZyI9PXR5cGVvZiBSP3ouZmlsbChPLFIpOnouZmlsbChPKTp6LmZpbGwoMCksen0sbGUuYWxsb2NVbnNhZmU9ZnVuY3Rp''@;'; put 'put ''b24oTSl7aWYoIm51bWJlciIhPXR5cGVvZiBNKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4geChNKX0sbGUuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKE0pe2lmKCJudW1iZXIiIT10eXBlb2YgTSl0aHJvdyBuZXcgVHlwZUVycm9yKCJB''@;'; put 'put ''cmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGFlLlNsb3dCdWZmZXIoTSl9fSwyNDE3OTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGxlLGFlPUYoMzkwMDcpLHg9YWUuQnVmZmVyLG09e307Zm9yKGxlIGluIGFlKWFlLmhhc093blByb3BlcnR5KGxlKSYmKCJTbG93QnVm''@;'; put 'put ''ZmVyIj09PWxlfHwiQnVmZmVyIj09PWxlfHwobVtsZV09YWVbbGVdKSk7dmFyIE09bS5CdWZmZXI9e307Zm9yKGxlIGluIHgpeC5oYXNPd25Qcm9wZXJ0eShsZSkmJigiYWxsb2NVbnNhZmUiPT09bGV8fCJhbGxvY1Vuc2FmZVNsb3ciPT09bGV8fChNW2xlXT14W2xlXSkpO2lmKG0uQnVmZmVy''@;'; put 'put ''LnByb3RvdHlwZT14LnByb3RvdHlwZSwoIU0uZnJvbXx8TS5mcm9tPT09VWludDhBcnJheS5mcm9tKSYmKE0uZnJvbT1mdW5jdGlvbihPLFIseil7aWYoIm51bWJlciI9PXR5cGVvZiBPKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5''@;'; put 'put ''cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIE8pO2lmKE8mJnR5cGVvZiBPLmxlbmd0aD4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJy''@;'; put 'put ''YXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgTyk7cmV0dXJuIHgoTyxSLHopfSksTS5hbGxvY3x8KE0uYWxsb2M9ZnVuY3Rpb24oTyxSLHope2lmKCJudW1iZXIiIT10eXBlb2YgTyl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInNpemUiIGFyZ3VtZW50IG11c3QgYmUg''@;'; put 'put ''b2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgTyk7aWYoTzwwfHxPPj0yKigxPDwzMCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytPKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgSz14KE8pO3JldHVybiBSJiYwIT09Ui5sZW5n''@;'; put 'put ''dGg/InN0cmluZyI9PXR5cGVvZiB6P0suZmlsbChSLHopOksuZmlsbChSKTpLLmZpbGwoMCksS30pLCFtLmtTdHJpbmdNYXhMZW5ndGgpdHJ5e20ua1N0cmluZ01heExlbmd0aD1wcm9jZXNzLmJpbmRpbmcoImJ1ZmZlciIpLmtTdHJpbmdNYXhMZW5ndGh9Y2F0Y2h7fW0uY29uc3RhbnRzfHwo''@;'; put 'put ''bS5jb25zdGFudHM9e01BWF9MRU5HVEg6bS5rTWF4TGVuZ3RofSxtLmtTdHJpbmdNYXhMZW5ndGgmJihtLmNvbnN0YW50cy5NQVhfU1RSSU5HX0xFTkdUSD1tLmtTdHJpbmdNYXhMZW5ndGgpKSxhdC5leHBvcnRzPW19LDg4NzAwOihhdCxJZSk9PnsidXNlIHN0cmljdCI7dmFyIGFlOyFmdW5j''@;'; put 'put ''dGlvbigpe3ZhciB4PUllfHx7fTt2b2lkIDAhPT0oYWU9ZnVuY3Rpb24oKXtyZXR1cm4geH0uYXBwbHkoSWUsW10pKSYmKGF0LmV4cG9ydHM9YWUpLHguZGVmYXVsdD14O3ZhciBtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsTT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmci''@;'; put 'put ''LFI9L3VybFwoWyInXT8oLis/KVsiJ10/XCkvLHo9e3dvZmYyOiJmb250L3dvZmYyIix3b2ZmOiJmb250L3dvZmYiLG90ZjoiYXBwbGljYXRpb24veC1mb250LW9wZW50eXBlIix0dGY6ImFwcGxpY2F0aW9uL3gtZm9udC10dGYiLGVvdDoiYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3Qi''@;'; put 'put ''LHNmbnQ6ImFwcGxpY2F0aW9uL2ZvbnQtc2ZudCIsc3ZnOiJpbWFnZS9zdmcreG1sIn0sSz1mdW5jdGlvbihEKXtyZXR1cm4gRCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHxEIGluc3RhbmNlb2YgU1ZHRWxlbWVudH0sST1mdW5jdGlvbihEKXtpZighSyhEKSl0aHJvdyBuZXcgRXJyb3IoImFu''@;'; put 'put ''IEhUTUxFbGVtZW50IG9yIFNWR0VsZW1lbnQgaXMgcmVxdWlyZWQ7IGdvdCAiK0QpfSxrPWZ1bmN0aW9uKEQpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihILE4pe0soRCk/SChEKTpOKG5ldyBFcnJvcigiYW4gSFRNTEVsZW1lbnQgb3IgU1ZHRWxlbWVudCBpcyByZXF1aXJlZDsgZ290''@;'; put 'put ''ICIrRCkpfSl9LGo9ZnVuY3Rpb24oRCl7dmFyIEg9T2JqZWN0LmtleXMoeikuZmlsdGVyKGZ1bmN0aW9uKE4pe3JldHVybiBELmluZGV4T2YoIi4iK04pPjB9KS5tYXAoZnVuY3Rpb24oTil7cmV0dXJuIHpbTl19KTtyZXR1cm4gSD9IWzBdOihjb25zb2xlLmVycm9yKCJVbmtub3duIGZvbnQg''@;'; put 'put ''Zm9ybWF0IGZvciAiK0QrIi4gRm9udHMgbWF5IG5vdCBiZSB3b3JraW5nIGNvcnJlY3RseS4iKSwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIil9LEI9ZnVuY3Rpb24oRCxILE4pe3ZhciBnPUQudmlld0JveCYmRC52aWV3Qm94LmJhc2VWYWwmJkQudmlld0JveC5iYXNlVmFsW05dfHxudWxs''@;'; put 'put ''IT09SC5nZXRBdHRyaWJ1dGUoTikmJiFILmdldEF0dHJpYnV0ZShOKS5tYXRjaCgvJSQvKSYmcGFyc2VJbnQoSC5nZXRBdHRyaWJ1dGUoTikpfHxELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW05dfHxwYXJzZUludChILnN0eWxlW05dKXx8cGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5''@;'; put 'put ''bGUoRCkuZ2V0UHJvcGVydHlWYWx1ZShOKSk7cmV0dXJuIHR5cGVvZiBnPiJ1Inx8bnVsbD09PWd8fGlzTmFOKHBhcnNlRmxvYXQoZykpPzA6Z30sVT1mdW5jdGlvbihEKXtmb3IodmFyIEg9d2luZG93LmF0b2IoRC5zcGxpdCgiLCIpWzFdKSxOPUQuc3BsaXQoIiwiKVswXS5zcGxpdCgiOiIp''@;'; put 'put ''WzFdLnNwbGl0KCI7IilbMF0sZz1uZXcgQXJyYXlCdWZmZXIoSC5sZW5ndGgpLEM9bmV3IFVpbnQ4QXJyYXkoZyksUz0wO1M8SC5sZW5ndGg7UysrKUNbU109SC5jaGFyQ29kZUF0KFMpO3JldHVybiBuZXcgQmxvYihbZ10se3R5cGU6Tn0pfSxvZT17fSxoZT1udWxsLGNlPWZ1bmN0aW9uKEQs''@;'; put 'put ''SCl7dmFyIE49SHx8e30sZz1OLnNlbGVjdG9yUmVtYXAsQz1OLm1vZGlmeVN0eWxlLHY9Ti5mb250cyxwPU4uZXhjbHVkZVVudXNlZENzcyx3PU4ubW9kaWZ5Q3NzfHxmdW5jdGlvbihmZSx4ZSl7cmV0dXJuKGc/ZyhmZSk6ZmUpKyJ7IisoQz9DKHhlKTp4ZSkrIn1cbiJ9LEo9W10sbmU9dHlw''@;'; put 'put ''ZW9mIHY+InUiLGRlPXZ8fFtdO3JldHVybihoZXx8KGhlPUFycmF5LmZyb20oZG9jdW1lbnQuc3R5bGVTaGVldHMpLm1hcChmdW5jdGlvbihEKXt0cnl7cmV0dXJue3J1bGVzOkQuY3NzUnVsZXMsaHJlZjpELmhyZWZ9fWNhdGNoKEgpe3JldHVybiBjb25zb2xlLndhcm4oIlN0eWxlc2hlZXQg''@;'; put 'put ''Y291bGQgbm90IGJlIGxvYWRlZDogIitELmhyZWYsSCkse319fSkpKS5mb3JFYWNoKGZ1bmN0aW9uKGZlKXt2YXIgeGU9ZmUucnVsZXMsTGU9ZmUuaHJlZjt4ZSYmQXJyYXkuZnJvbSh4ZSkuZm9yRWFjaChmdW5jdGlvbihGZSl7aWYodHlwZW9mIEZlLnN0eWxlPCJ1IilpZihmdW5jdGlvbihE''@;'; put 'put ''LEgpe2lmKEgpdHJ5e3JldHVybiBELnF1ZXJ5U2VsZWN0b3IoSCl8fEQucGFyZW50Tm9kZSYmRC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoSCl9Y2F0Y2goTil7Y29uc29sZS53YXJuKCdJbnZhbGlkIENTUyBzZWxlY3RvciAiJytIKyciJyxOKX19KEQsRmUuc2VsZWN0b3JUZXh0KSlKLnB1''@;'; put 'put ''c2godyhGZS5zZWxlY3RvclRleHQsRmUuc3R5bGUuY3NzVGV4dCkpO2Vsc2UgaWYobmUmJkZlLmNzc1RleHQubWF0Y2goL15AZm9udC1mYWNlLykpe3ZhciBPZT1mdW5jdGlvbihELEgpe3ZhciBOPUQuY3NzVGV4dC5tYXRjaChSKSxnPU4mJk5bMV18fCIiO2lmKGcmJiFnLm1hdGNoKC9eZGF0''@;'; put 'put ''YTovKSYmImFib3V0OmJsYW5rIiE9PWcpe3ZhciBDPWcuc3RhcnRzV2l0aCgiLi4vIik/SCsiLy4uLyIrZzpnLnN0YXJ0c1dpdGgoIi4vIik/SCsiLy4iK2c6ZztyZXR1cm57dGV4dDpELmNzc1RleHQsZm9ybWF0OmooQyksdXJsOkN9fX0oRmUsTGUpO09lJiZkZS5wdXNoKE9lKX1lbHNlIHB8''@;'; put 'put ''fEoucHVzaChGZS5jc3NUZXh0KX0pfSksZnVuY3Rpb24oRCl7cmV0dXJuIFByb21pc2UuYWxsKEQubWFwKGZ1bmN0aW9uKEgpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihOLGcpe2lmKG9lW0gudXJsXSlyZXR1cm4gTihvZVtILnVybF0pO3ZhciBDPW5ldyBYTUxIdHRwUmVxdWVzdDtD''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7dmFyIFM9ZnVuY3Rpb24oRCl7Zm9yKHZhciBIPSIiLE49bmV3IFVpbnQ4QXJyYXkoRCksZz0wO2c8Ti5ieXRlTGVuZ3RoO2crKylIKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE5bZ10pO3JldHVybiB3aW5kb3cuYnRvYShIKX0oQy5y''@;'; put 'put ''ZXNwb25zZSksdj1ILnRleHQucmVwbGFjZShSLCd1cmwoImRhdGE6JytILmZvcm1hdCsiO2Jhc2U2NCwiK1MrJyIpJykrIlxuIjtvZVtILnVybF09dixOKHYpfSksQy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oUyl7Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gbG9hZCBmb250''@;'; put 'put ''IGZyb206ICIrSC51cmwsUyksb2VbSC51cmxdPW51bGwsTihudWxsKX0pLEMuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGZ1bmN0aW9uKFMpe2NvbnNvbGUud2FybigiQWJvcnRlZCBsb2FkaW5nIGZvbnQgZnJvbTogIitILnVybCxTKSxOKG51bGwpfSksQy5vcGVuKCJHRVQiLEgudXJsKSxD''@;'; put 'put ''LnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLEMuc2VuZCgpfSl9KSkudGhlbihmdW5jdGlvbihIKXtyZXR1cm4gSC5maWx0ZXIoZnVuY3Rpb24oTil7cmV0dXJuIE59KS5qb2luKCIiKX0pfShkZSkudGhlbihmdW5jdGlvbihmZSl7cmV0dXJuIEouam9pbigiXG4iKStmZX0pfSxHPWZ1bmN0''@;'; put 'put ''aW9uKCl7aWYoIW5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iJiYhKCJkb3dubG9hZCJpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpKXJldHVybntwb3B1cDp3aW5kb3cub3BlbigpfX07eC5wcmVwYXJlU3ZnPWZ1bmN0aW9uKGIsRCxIKXtJKGIpO3ZhciBOPUR8fHt9LGc9Ti5sZWZ0''@;'; put 'put ''LEM9dm9pZCAwPT09Zz8wOmcsUz1OLnRvcCx2PXZvaWQgMD09PVM/MDpTLHA9Ti53aWR0aCx3PU4uaGVpZ2h0LEo9Ti5zY2FsZSxuZT12b2lkIDA9PT1KPzE6SixkZT1OLnJlc3BvbnNpdmUsZmU9dm9pZCAwIT09ZGUmJmRlLHhlPU4uZXhjbHVkZUNzcyxMZT12b2lkIDAhPT14ZSYmeGU7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKEQpe3JldHVybiBQcm9taXNlLmFsbChBcnJheS5mcm9tKEQucXVlcnlTZWxlY3RvckFsbCgiaW1hZ2UiKSkubWFwKGZ1bmN0aW9uKEgpe3ZhciBOPUguZ2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJocmVmIil8fEguZ2V0QXR0cmli''@;'; put 'put ''dXRlKCJocmVmIik7cmV0dXJuIE4/KGZ1bmN0aW9uKEQpe3JldHVybiBEJiYwPT09RC5sYXN0SW5kZXhPZigiaHR0cCIsMCkmJi0xPT09RC5sYXN0SW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdCl9KE4pJiYoTis9KC0xPT09Ti5pbmRleE9mKCI/Iik/Ij8iOiImIikrInQ9IisobmV3IERh''@;'; put 'put ''dGUpLnZhbHVlT2YoKSksbmV3IFByb21pc2UoZnVuY3Rpb24oZyxDKXt2YXIgUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx2PW5ldyBJbWFnZTt2LmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLHYuc3JjPU4sdi5vbmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIEMobmV3IEVycm9y''@;'; put 'put ''KCJDb3VsZCBub3QgbG9hZCAiK04pKX0sdi5vbmxvYWQ9ZnVuY3Rpb24oKXtTLndpZHRoPXYud2lkdGgsUy5oZWlnaHQ9di5oZWlnaHQsUy5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh2LDAsMCksSC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsImhy''@;'; put 'put ''ZWYiLFMudG9EYXRhVVJMKCJpbWFnZS9wbmciKSksZyghMCl9fSkpOlByb21pc2UucmVzb2x2ZShudWxsKX0pKX0oYikudGhlbihmdW5jdGlvbigpe3ZhciBGZT1iLmNsb25lTm9kZSghMCk7RmUuc3R5bGUuYmFja2dyb3VuZENvbG9yPShEfHx7fSkuYmFja2dyb3VuZENvbG9yfHxiLnN0eWxl''@;'; put 'put ''LmJhY2tncm91bmRDb2xvcjt2YXIgT2U9ZnVuY3Rpb24oRCxILE4sZyl7aWYoInN2ZyI9PT1ELnRhZ05hbWUpcmV0dXJue3dpZHRoOk58fEIoRCxILCJ3aWR0aCIpLGhlaWdodDpnfHxCKEQsSCwiaGVpZ2h0Iil9O2lmKEQuZ2V0QkJveCl7dmFyIEM9RC5nZXRCQm94KCk7cmV0dXJue3dpZHRo''@;'; put 'put ''OkMueCtDLndpZHRoLGhlaWdodDpDLnkrQy5oZWlnaHR9fX0oYixGZSxwLHcpLEJlPU9lLndpZHRoLFdlPU9lLmhlaWdodDtpZigic3ZnIiE9PWIudGFnTmFtZSl7aWYoIWIuZ2V0QkJveClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJBdHRlbXB0ZWQgdG8gcmVuZGVyIG5vbi1TVkcgZWxl''@;'; put 'put ''bWVudCIsYik7bnVsbCE9RmUuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKSYmRmUuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLEZlLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikucmVwbGFjZSgvdHJhbnNsYXRlXCguKj9cKS8sIiIpKTt2YXIgS2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5T''@;'; put 'put ''KCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO0tlLmFwcGVuZENoaWxkKEZlKSxGZT1LZX1pZihGZS5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxGZS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFtDLHYsQmUsV2VdLmpvaW4oIiAiKSksRmUuZ2V0QXR0cmlidXRlKCJ4''@;'; put 'put ''bWxucyIpfHxGZS5zZXRBdHRyaWJ1dGVOUyhtLCJ4bWxucyIsTSksRmUuZ2V0QXR0cmlidXRlKCJ4bWxuczp4bGluayIpfHxGZS5zZXRBdHRyaWJ1dGVOUyhtLCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSxmZT8oRmUucmVtb3ZlQXR0cmlidXRlKCJ3aWR0''@;'; put 'put ''aCIpLEZlLnJlbW92ZUF0dHJpYnV0ZSgiaGVpZ2h0IiksRmUuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pbllNaW4gbWVldCIpKTooRmUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsQmUqbmUpLEZlLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixXZSpuZSkpLEFycmF5LmZyb20o''@;'; put 'put ''RmUucXVlcnlTZWxlY3RvckFsbCgiZm9yZWlnbk9iamVjdCA+ICoiKSkuZm9yRWFjaChmdW5jdGlvbihsdCl7bHQuc2V0QXR0cmlidXRlTlMobSwieG1sbnMiLCJzdmciPT09bHQudGFnTmFtZT9NOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIil9KSwhTGUpcmV0dXJuIGNlKGIsRCku''@;'; put 'put ''dGhlbihmdW5jdGlvbihsdCl7dmFyIFBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7UGUuc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxQZS5pbm5lckhUTUw9IjwhW0NEQVRBW1xuIitsdCsiXG5dXT4iO3ZhciBiZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWZz''@;'; put 'put ''Iik7YmUuYXBwZW5kQ2hpbGQoUGUpLEZlLmluc2VydEJlZm9yZShiZSxGZS5maXJzdENoaWxkKTt2YXIgQWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7QWUuYXBwZW5kQ2hpbGQoRmUpO3ZhciBUZT1BZS5pbm5lckhUTUwucmVwbGFjZSgvTlNcZCs6aHJlZi9naSwneG1sbnM6eGxp''@;'; put 'put ''bms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWYnKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSClyZXR1cm57c3JjOlRlLHdpZHRoOkJlLGhlaWdodDpXZX07SChUZSxCZSxXZSl9KTt2YXIgWWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7WWUuYXBwZW5k''@;'; put 'put ''Q2hpbGQoRmUpO3ZhciBKZT1ZZS5pbm5lckhUTUw7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEgpcmV0dXJue3NyYzpKZSx3aWR0aDpCZSxoZWlnaHQ6V2V9O0goSmUsQmUsV2UpfSl9LHguc3ZnQXNEYXRhVXJpPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gSShiKSx4LnByZXBhcmVTdmcoYixEKS50''@;'; put 'put ''aGVuKGZ1bmN0aW9uKE4pe3ZhciBDPU4ud2lkdGgsUz1OLmhlaWdodCx2PSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCIrd2luZG93LmJ0b2EoZnVuY3Rpb24oRCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoRCkucmVwbGFjZSgvJShbMC05QS1GXXsy''@;'; put 'put ''fSkvZyxmdW5jdGlvbihILE4pe3ZhciBnPVN0cmluZy5mcm9tQ2hhckNvZGUoIjB4IitOKTtyZXR1cm4iJSI9PT1nPyIlMjUiOmd9KSl9KCc8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAi''@;'; put 'put ''aHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbPCFFTlRJVFkgbmJzcCAiJiMxNjA7Ij5dPicrTi5zcmMpKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSCYmSCh2LEMsUyksdn0pfSx4LnN2Z0FzUG5nVXJpPWZ1bmN0aW9uKGIsRCxIKXtJKGIpO3Zh''@;'; put 'put ''ciBOPUR8fHt9LGc9Ti5lbmNvZGVyVHlwZSxDPXZvaWQgMD09PWc/ImltYWdlL3BuZyI6ZyxTPU4uZW5jb2Rlck9wdGlvbnMsdj12b2lkIDA9PT1TPy44OlMscD1OLmNhbnZnLHc9ZnVuY3Rpb24obmUpe3ZhciBkZT1uZS5zcmMsZmU9bmUud2lkdGgseGU9bmUuaGVpZ2h0LExlPWRvY3VtZW50''@;'; put 'put ''LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLEZlPUxlLmdldENvbnRleHQoIjJkIiksT2U9d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7TGUud2lkdGg9ZmUqT2UsTGUuaGVpZ2h0PXhlKk9lLExlLnN0eWxlLndpZHRoPUxlLndpZHRoKyJweCIsTGUuc3R5bGUuaGVpZ2h0PUxlLmhlaWdodCsi''@;'; put 'put ''cHgiLEZlLnNldFRyYW5zZm9ybShPZSwwLDAsT2UsMCwwKSxwP3AoTGUsZGUpOkZlLmRyYXdJbWFnZShkZSwwLDApO3ZhciBCZT12b2lkIDA7dHJ5e0JlPUxlLnRvRGF0YVVSTChDLHYpfWNhdGNoKFdlKXtpZih0eXBlb2YgU2VjdXJpdHlFcnJvcjwidSImJldlIGluc3RhbmNlb2YgU2VjdXJp''@;'; put 'put ''dHlFcnJvcnx8IlNlY3VyaXR5RXJyb3IiPT09V2UubmFtZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJSZW5kZXJlZCBTVkcgaW1hZ2VzIGNhbm5vdCBiZSBkb3dubG9hZGVkIGluIHRoaXMgYnJvd3Nlci4iKTt0aHJvdyBXZX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSCYmSChCZSxM''@;'; put 'put ''ZS53aWR0aCxMZS5oZWlnaHQpLFByb21pc2UucmVzb2x2ZShCZSl9O3JldHVybiBwP3gucHJlcGFyZVN2ZyhiLEQpLnRoZW4odyk6eC5zdmdBc0RhdGFVcmkoYixEKS50aGVuKGZ1bmN0aW9uKEope3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuZSxkZSl7dmFyIGZlPW5ldyBJbWFnZTtm''@;'; put 'put ''ZS5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmUodyh7c3JjOmZlLHdpZHRoOmZlLndpZHRoLGhlaWdodDpmZS5oZWlnaHR9KSl9LGZlLm9uZXJyb3I9ZnVuY3Rpb24oKXtkZSgiVGhlcmUgd2FzIGFuIGVycm9yIGxvYWRpbmcgdGhlIGRhdGEgVVJJIGFzIGFuIGltYWdlIG9uIHRoZSBmb2xs''@;'; put 'put ''b3dpbmcgU1ZHXG4iK3dpbmRvdy5hdG9iKEouc2xpY2UoMjYpKSsiT3BlbiB0aGUgZm9sbG93aW5nIGxpbmsgdG8gc2VlIGJyb3dzZXIncyBkaWFnbm9zaXNcbiIrSil9LGZlLnNyYz1KfSl9KX0seC5kb3dubG9hZD1mdW5jdGlvbihiLEQsSCl7aWYobmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJs''@;'; put 'put ''b2IpbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoVShEKSxiKTtlbHNle3ZhciBOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZigiZG93bmxvYWQiaW4gTil7Ti5kb3dubG9hZD1iLE4uc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChOKTt0cnl7''@;'; put 'put ''dmFyIGc9VShEKSxDPVVSTC5jcmVhdGVPYmplY3RVUkwoZyk7Ti5ocmVmPUMsTi5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3JldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMKEMpfSl9fWNhdGNoKFMpe2NvbnNvbGUuZXJyb3IoUyks''@;'; put 'put ''Y29uc29sZS53YXJuKCJFcnJvciB3aGlsZSBnZXR0aW5nIG9iamVjdCBVUkwuIEZhbGxpbmcgYmFjayB0byBzdHJpbmcgVVJMLiIpLE4uaHJlZj1EfU4uY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKE4pfWVsc2UgSCYmSC5wb3B1cCYmKEgucG9wdXAuZG9jdW1lbnQudGl0bGU9''@;'; put 'put ''YixILnBvcHVwLmxvY2F0aW9uLnJlcGxhY2UoRCkpfX0seC5zYXZlU3ZnPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj1HKCk7cmV0dXJuIGsoYikudGhlbihmdW5jdGlvbihnKXtyZXR1cm4geC5zdmdBc0RhdGFVcmkoZyxIfHx7fSl9KS50aGVuKGZ1bmN0aW9uKGcpe3JldHVybiB4LmRvd25sb2Fk''@;'; put 'put ''KEQsZyxOKX0pfSx4LnNhdmVTdmdBc1BuZz1mdW5jdGlvbihiLEQsSCl7dmFyIE49RygpO3JldHVybiBrKGIpLnRoZW4oZnVuY3Rpb24oZyl7cmV0dXJuIHguc3ZnQXNQbmdVcmkoZyxIfHx7fSl9KS50aGVuKGZ1bmN0aW9uKGcpe3JldHVybiB4LmRvd25sb2FkKEQsZyxOKX0pfX0oKX0sODM1''@;'; put 'put ''ODE6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXI7ZnVuY3Rpb24geChtLGxlKXt0aGlzLl9ibG9jaz1hZS5hbGxvYyhtKSx0aGlzLl9maW5hbFNpemU9bGUsdGhpcy5fYmxvY2tTaXplPW0sdGhpcy5fbGVuPTB9eC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKG0sbGUpeyJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgbSYmKG09YWUuZnJvbShtLGxlPWxlfHwidXRmOCIpKTtmb3IodmFyIE09dGhpcy5fYmxvY2ssTz10aGlzLl9ibG9ja1NpemUsUj1tLmxlbmd0aCx6PXRoaXMuX2xlbixLPTA7SzxSOyl7Zm9yKHZhciBJPXolTyxrPU1hdGgubWluKFItSyxPLUkpLEU9MDtFPGs7RSsrKU1b''@;'; put 'put ''SStFXT1tW0srRV07Sys9aywoeis9ayklTz09MCYmdGhpcy5fdXBkYXRlKE0pfXJldHVybiB0aGlzLl9sZW4rPVIsdGhpc30seC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKG0pe3ZhciBsZT10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2NrW2xlXT0xMjgsdGhpcy5fYmxv''@;'; put 'put ''Y2suZmlsbCgwLGxlKzEpLGxlPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciBNPTgqdGhpcy5fbGVuO2lmKE08PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShNLHRoaXMuX2Jsb2NrU2l6ZS00''@;'; put 'put ''KTtlbHNle3ZhciBPPSg0Mjk0OTY3Mjk1Jk0pPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKChNLU8pLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoTyx0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2Nr''@;'; put 'put ''KTt2YXIgej10aGlzLl9oYXNoKCk7cmV0dXJuIG0/ei50b1N0cmluZyhtKTp6fSx4LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sYXQuZXhwb3J0cz14fSw5Nzk2NTooYXQsSWUs''@;'; put 'put ''Rik9Pnt2YXIgYWU9YXQuZXhwb3J0cz1mdW5jdGlvbihtKXttPW0udG9Mb3dlckNhc2UoKTt2YXIgbGU9YWVbbV07aWYoIWxlKXRocm93IG5ldyBFcnJvcihtKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpIik7cmV0dXJuIG5ldyBsZX07YWUuc2hhPUYoNzc5''@;'; put 'put ''MTUpLGFlLnNoYTE9RigxMjI5KSxhZS5zaGEyMjQ9Rig3Mjk1OSksYWUuc2hhMjU2PUYoNTA0NTApLGFlLnNoYTM4ND1GKDYxNzIzKSxhZS5zaGE1MTI9Rig0NzkxNCl9LDc3OTE1OihhdCxJZSxGKT0+e3ZhciBhZT1GKDY2Njk4KSx4PUYoODM1ODEpLG09Rig4NDMpLkJ1ZmZlcixsZT1bMTUx''@;'; put 'put ''ODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLE09bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBPKCl7dGhpcy5pbml0KCksdGhpcy5fdz1NLHguY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBSKEkpe3JldHVybiBJPDw1fEk+Pj4yN31mdW5jdGlvbiB6KEkpe3JldHVy''@;'; put 'put ''biBJPDwzMHxJPj4+Mn1mdW5jdGlvbiBLKEksayxFLGope3JldHVybiAwPT09ST9rJkV8fmsmajoyPT09ST9rJkV8ayZqfEUmajprXkVean1hZShPLHgpLE8ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlz''@;'; put 'put ''Ll9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSSl7Zm9yKHZhciBrPXRoaXMuX3csRT0wfHRoaXMuX2Esaj0wfHRoaXMuX2IsVj0wfHRoaXMuX2MsQj0wfHRoaXMuX2QsWT0wfHRoaXMu''@;'; put 'put ''X2UsWD0wO1g8MTY7KytYKWtbWF09SS5yZWFkSW50MzJCRSg0KlgpO2Zvcig7WDw4MDsrK1gpa1tYXT1rW1gtM11ea1tYLThdXmtbWC0xNF1ea1tYLTE2XTtmb3IodmFyIFU9MDtVPDgwOysrVSl7dmFyIHE9fn4oVS8yMCksZWU9UihFKStLKHEsaixWLEIpK1kra1tVXStsZVtxXXwwO1k9QixC''@;'; put 'put ''PVYsVj16KGopLGo9RSxFPWVlfXRoaXMuX2E9RSt0aGlzLl9hfDAsdGhpcy5fYj1qK3RoaXMuX2J8MCx0aGlzLl9jPVYrdGhpcy5fY3wwLHRoaXMuX2Q9Qit0aGlzLl9kfDAsdGhpcy5fZT1ZK3RoaXMuX2V8MH0sTy5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgST1tLmFsbG9jVW5z''@;'; put 'put ''YWZlKDIwKTtyZXR1cm4gSS53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLEkud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxJLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksSS53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxJLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLEl9LGF0LmV4''@;'; put 'put ''cG9ydHM9T30sMTIyOTooYXQsSWUsRik9Pnt2YXIgYWU9Rig2NjY5OCkseD1GKDgzNTgxKSxtPUYoODQzKS5CdWZmZXIsbGU9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxNPW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gTygpe3RoaXMuaW5pdCgpLHRoaXMu''@;'; put 'put ''X3c9TSx4LmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gUihrKXtyZXR1cm4gazw8MXxrPj4+MzF9ZnVuY3Rpb24geihrKXtyZXR1cm4gazw8NXxrPj4+Mjd9ZnVuY3Rpb24gSyhrKXtyZXR1cm4gazw8MzB8az4+PjJ9ZnVuY3Rpb24gSShrLEUsaixWKXtyZXR1cm4gMD09PWs/RSZqfH5FJlY6''@;'; put 'put ''Mj09PWs/RSZqfEUmVnxqJlY6RV5qXlZ9YWUoTyx4KSxPLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlz''@;'; put 'put ''fSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGspe2Zvcih2YXIgRT10aGlzLl93LGo9MHx0aGlzLl9hLFY9MHx0aGlzLl9iLEI9MHx0aGlzLl9jLFk9MHx0aGlzLl9kLFg9MHx0aGlzLl9lLFU9MDtVPDE2OysrVSlFW1VdPWsucmVhZEludDMyQkUoNCpVKTtmb3IoO1U8ODA7KytVKUVb''@;'; put 'put ''VV09UihFW1UtM11eRVtVLThdXkVbVS0xNF1eRVtVLTE2XSk7Zm9yKHZhciBxPTA7cTw4MDsrK3Epe3ZhciBlZT1+fihxLzIwKSx0ZT16KGopK0koZWUsVixCLFkpK1grRVtxXStsZVtlZV18MDtYPVksWT1CLEI9SyhWKSxWPWosaj10ZX10aGlzLl9hPWordGhpcy5fYXwwLHRoaXMuX2I9Vit0''@;'; put 'put ''aGlzLl9ifDAsdGhpcy5fYz1CK3RoaXMuX2N8MCx0aGlzLl9kPVkrdGhpcy5fZHwwLHRoaXMuX2U9WCt0aGlzLl9lfDB9LE8ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGs9bS5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIGsud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxrLndyaXRl''@;'; put 'put ''SW50MzJCRSgwfHRoaXMuX2IsNCksay53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLGsud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksay53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxrfSxhdC5leHBvcnRzPU99LDcyOTU5OihhdCxJZSxGKT0+e3ZhciBhZT1GKDY2Njk4KSx4PUYoNTA0''@;'; put 'put ''NTApLG09Rig4MzU4MSksbGU9Rig4NDMpLkJ1ZmZlcixNPW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gTygpe3RoaXMuaW5pdCgpLHRoaXMuX3c9TSxtLmNhbGwodGhpcyw2NCw1Nil9YWUoTyx4KSxPLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MzIzODM3MTAzMix0''@;'; put 'put ''aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LE8ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIFI9bGUuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBSLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLFIud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksUi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxSLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxSLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxS''@;'; put 'put ''LndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxSLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxSfSxhdC5leHBvcnRzPU99LDUwNDUwOihhdCxJZSxGKT0+e3ZhciBhZT1GKDY2Njk4KSx4PUYoODM1ODEpLG09Rig4NDMpLkJ1ZmZlcixsZT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0''@;'; put 'put ''NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQs''@;'; put 'put ''MjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5''@;'; put 'put ''OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzcz''@;'; put 'put ''NCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxN''@;'; put 'put ''PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gTygpe3RoaXMuaW5pdCgpLHRoaXMuX3c9TSx4LmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gUihqLFYsQil7cmV0dXJuIEJeaiYoVl5CKX1mdW5jdGlvbiB6KGosVixCKXtyZXR1cm4gaiZWfEImKGp8Vil9ZnVuY3Rpb24gSyhqKXtyZXR1cm4oaj4+''@;'; put 'put ''PjJ8ajw8MzApXihqPj4+MTN8ajw8MTkpXihqPj4+MjJ8ajw8MTApfWZ1bmN0aW9uIEkoail7cmV0dXJuKGo+Pj42fGo8PDI2KV4oaj4+PjExfGo8PDIxKV4oaj4+PjI1fGo8PDcpfWZ1bmN0aW9uIGsoail7cmV0dXJuKGo+Pj43fGo8PDI1KV4oaj4+PjE4fGo8PDE0KV5qPj4+M31mdW5jdGlv''@;'; put 'put ''biBFKGope3JldHVybihqPj4+MTd8ajw8MTUpXihqPj4+MTl8ajw8MTMpXmo+Pj4xMH1hZShPLHgpLE8ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgw''@;'; put 'put ''NzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oail7Zm9yKHZhciBWPXRoaXMuX3csQj0wfHRoaXMuX2EsWT0wfHRoaXMuX2IsWD0wfHRo''@;'; put 'put ''aXMuX2MsVT0wfHRoaXMuX2QscT0wfHRoaXMuX2UsZWU9MHx0aGlzLl9mLHRlPTB8dGhpcy5fZyxvZT0wfHRoaXMuX2gsc2U9MDtzZTwxNjsrK3NlKVZbc2VdPWoucmVhZEludDMyQkUoNCpzZSk7Zm9yKDtzZTw2NDsrK3NlKVZbc2VdPUUoVltzZS0yXSkrVltzZS03XStrKFZbc2UtMTVdKStW''@;'; put 'put ''W3NlLTE2XXwwO2Zvcih2YXIgaGU9MDtoZTw2NDsrK2hlKXt2YXIgdWU9b2UrSShxKStSKHEsZWUsdGUpK2xlW2hlXStWW2hlXXwwLGNlPUsoQikreihCLFksWCl8MDtvZT10ZSx0ZT1lZSxlZT1xLHE9VSt1ZXwwLFU9WCxYPVksWT1CLEI9dWUrY2V8MH10aGlzLl9hPUIrdGhpcy5fYXwwLHRo''@;'; put 'put ''aXMuX2I9WSt0aGlzLl9ifDAsdGhpcy5fYz1YK3RoaXMuX2N8MCx0aGlzLl9kPVUrdGhpcy5fZHwwLHRoaXMuX2U9cSt0aGlzLl9lfDAsdGhpcy5fZj1lZSt0aGlzLl9mfDAsdGhpcy5fZz10ZSt0aGlzLl9nfDAsdGhpcy5faD1vZSt0aGlzLl9ofDB9LE8ucHJvdG90eXBlLl9oYXNoPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIGo9bS5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIGoud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksai53cml0ZUludDMyQkUodGhpcy5fYiw0KSxqLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLGoud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLGoud3JpdGVJbnQzMkJFKHRoaXMuX2Us''@;'; put 'put ''MTYpLGoud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLGoud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLGoud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLGp9LGF0LmV4cG9ydHM9T30sNjE3MjM6KGF0LEllLEYpPT57dmFyIGFlPUYoNjY2OTgpLHg9Rig0NzkxNCksbT1GKDgzNTgxKSxsZT1GKDg0''@;'; put 'put ''MykuQnVmZmVyLE09bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gTygpe3RoaXMuaW5pdCgpLHRoaXMuX3c9TSxtLmNhbGwodGhpcywxMjgsMTEyKX1hZShPLHgpLE8ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUw''@;'; put 'put ''LHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5f''@;'; put 'put ''Y2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxPLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBSPWxlLmFsbG9jVW5z''@;'; put 'put ''YWZlKDQ4KTtmdW5jdGlvbiB6KEssSSxrKXtSLndyaXRlSW50MzJCRShLLGspLFIud3JpdGVJbnQzMkJFKEksays0KX1yZXR1cm4geih0aGlzLl9haCx0aGlzLl9hbCwwKSx6KHRoaXMuX2JoLHRoaXMuX2JsLDgpLHoodGhpcy5fY2gsdGhpcy5fY2wsMTYpLHoodGhpcy5fZGgsdGhpcy5fZGws''@;'; put 'put ''MjQpLHoodGhpcy5fZWgsdGhpcy5fZWwsMzIpLHoodGhpcy5fZmgsdGhpcy5fZmwsNDApLFJ9LGF0LmV4cG9ydHM9T30sNDc5MTQ6KGF0LEllLEYpPT57dmFyIGFlPUYoNjY2OTgpLHg9Rig4MzU4MSksbT1GKDg0MykuQnVmZmVyLGxlPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0''@;'; put 'put ''MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQs''@;'; put 'put ''MzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2''@;'; put 'put ''NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4''@;'; put 'put ''ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2''@;'; put 'put ''NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0''@;'; put 'put ''MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQy''@;'; put 'put ''MzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwx''@;'; put 'put ''NzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5''@;'; put 'put ''OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5Mzgw''@;'; put 'put ''MzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2''@;'; put 'put ''MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sTT1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBPKCl7dGhpcy5pbml0KCksdGhpcy5fdz1NLHguY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIFIoWSxYLFUpe3JldHVybiBVXlkmKFheVSl9ZnVuY3Rpb24geihZLFgs''@;'; put 'put ''VSl7cmV0dXJuIFkmWHxVJihZfFgpfWZ1bmN0aW9uIEsoWSxYKXtyZXR1cm4oWT4+PjI4fFg8PDQpXihYPj4+MnxZPDwzMCleKFg+Pj43fFk8PDI1KX1mdW5jdGlvbiBJKFksWCl7cmV0dXJuKFk+Pj4xNHxYPDwxOCleKFk+Pj4xOHxYPDwxNCleKFg+Pj45fFk8PDIzKX1mdW5jdGlvbiBrKFks''@;'; put 'put ''WCl7cmV0dXJuKFk+Pj4xfFg8PDMxKV4oWT4+Pjh8WDw8MjQpXlk+Pj43fWZ1bmN0aW9uIEUoWSxYKXtyZXR1cm4oWT4+PjF8WDw8MzEpXihZPj4+OHxYPDwyNCleKFk+Pj43fFg8PDI1KX1mdW5jdGlvbiBqKFksWCl7cmV0dXJuKFk+Pj4xOXxYPDwxMyleKFg+Pj4yOXxZPDwzKV5ZPj4+Nn1m''@;'; put 'put ''dW5jdGlvbiBWKFksWCl7cmV0dXJuKFk+Pj4xOXxYPDwxMyleKFg+Pj4yOXxZPDwzKV4oWT4+PjZ8WDw8MjYpfWZ1bmN0aW9uIEIoWSxYKXtyZXR1cm4gWT4+PjA8WD4+PjA/MTowfWFlKE8seCksTy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAz''@;'; put 'put ''LHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMu''@;'; put 'put ''X2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oWSl7Zm9yKHZhciBYPXRoaXMuX3csVT0wfHRoaXMuX2FoLHE9MHx0aGlzLl9iaCxlZT0wfHRoaXMuX2NoLHRlPTB8dGhpcy5fZGgsb2U9MHx0aGlzLl9laCxzZT0wfHRoaXMuX2ZoLGhlPTB8dGhpcy5fZ2gsdWU9MHx0aGlzLl9oaCxjZT0wfHRoaXMuX2FsLEc9MHx0aGlzLl9ibCxiPTB8''@;'; put 'put ''dGhpcy5fY2wsRD0wfHRoaXMuX2RsLEg9MHx0aGlzLl9lbCxOPTB8dGhpcy5fZmwsZz0wfHRoaXMuX2dsLEM9MHx0aGlzLl9obCxTPTA7UzwzMjtTKz0yKVhbU109WS5yZWFkSW50MzJCRSg0KlMpLFhbUysxXT1ZLnJlYWRJbnQzMkJFKDQqUys0KTtmb3IoO1M8MTYwO1MrPTIpe3ZhciB2PVhb''@;'; put 'put ''Uy0zMF0scD1YW1MtMzArMV0sdz1rKHYscCksSj1FKHAsdiksbmU9aih2PVhbUy00XSxwPVhbUy00KzFdKSxkZT1WKHAsdiksTGU9WFtTLTMyXSxGZT1YW1MtMzIrMV0sT2U9SitYW1MtMTQrMV18MCxCZT13K1hbUy0xNF0rQihPZSxKKXwwO0JlPShCZT1CZStuZStCKE9lPU9lK2RlfDAsZGUp''@;'; put 'put ''fDApK0xlK0IoT2U9T2UrRmV8MCxGZSl8MCxYW1NdPUJlLFhbUysxXT1PZX1mb3IodmFyIFdlPTA7V2U8MTYwO1dlKz0yKXtCZT1YW1dlXSxPZT1YW1dlKzFdO3ZhciBLZT16KFUscSxlZSksWWU9eihjZSxHLGIpLEplPUsoVSxjZSksbHQ9SyhjZSxVKSxQZT1JKG9lLEgpLGJlPUkoSCxvZSks''@;'; put 'put ''QWU9bGVbV2VdLFRlPWxlW1dlKzFdLHFlPVIob2Usc2UsaGUpLFhlPVIoSCxOLGcpLFVlPUMrYmV8MCxodD11ZStQZStCKFVlLEMpfDA7aHQ9KGh0PShodD1odCtxZStCKFVlPVVlK1hlfDAsWGUpfDApK0FlK0IoVWU9VWUrVGV8MCxUZSl8MCkrQmUrQihVZT1VZStPZXwwLE9lKXwwO3ZhciBN''@;'; put 'put ''ZT1sdCtZZXwwLERlPUplK0tlK0IoTWUsbHQpfDA7dWU9aGUsQz1nLGhlPXNlLGc9TixzZT1vZSxOPUgsb2U9dGUraHQrQihIPUQrVWV8MCxEKXwwLHRlPWVlLEQ9YixlZT1xLGI9RyxxPVUsRz1jZSxVPWh0K0RlK0IoY2U9VWUrTWV8MCxVZSl8MH10aGlzLl9hbD10aGlzLl9hbCtjZXwwLHRo''@;'; put 'put ''aXMuX2JsPXRoaXMuX2JsK0d8MCx0aGlzLl9jbD10aGlzLl9jbCtifDAsdGhpcy5fZGw9dGhpcy5fZGwrRHwwLHRoaXMuX2VsPXRoaXMuX2VsK0h8MCx0aGlzLl9mbD10aGlzLl9mbCtOfDAsdGhpcy5fZ2w9dGhpcy5fZ2wrZ3wwLHRoaXMuX2hsPXRoaXMuX2hsK0N8MCx0aGlzLl9haD10aGlz''@;'; put 'put ''Ll9haCtVK0IodGhpcy5fYWwsY2UpfDAsdGhpcy5fYmg9dGhpcy5fYmgrcStCKHRoaXMuX2JsLEcpfDAsdGhpcy5fY2g9dGhpcy5fY2grZWUrQih0aGlzLl9jbCxiKXwwLHRoaXMuX2RoPXRoaXMuX2RoK3RlK0IodGhpcy5fZGwsRCl8MCx0aGlzLl9laD10aGlzLl9laCtvZStCKHRoaXMuX2Vs''@;'; put 'put ''LEgpfDAsdGhpcy5fZmg9dGhpcy5fZmgrc2UrQih0aGlzLl9mbCxOKXwwLHRoaXMuX2doPXRoaXMuX2doK2hlK0IodGhpcy5fZ2wsZyl8MCx0aGlzLl9oaD10aGlzLl9oaCt1ZStCKHRoaXMuX2hsLEMpfDB9LE8ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFk9bS5hbGxvY1Vuc2Fm''@;'; put 'put ''ZSg2NCk7ZnVuY3Rpb24gWChVLHEsZWUpe1kud3JpdGVJbnQzMkJFKFUsZWUpLFkud3JpdGVJbnQzMkJFKHEsZWUrNCl9cmV0dXJuIFgodGhpcy5fYWgsdGhpcy5fYWwsMCksWCh0aGlzLl9iaCx0aGlzLl9ibCw4KSxYKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxYKHRoaXMuX2RoLHRoaXMuX2Rs''@;'; put 'put ''LDI0KSxYKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxYKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxYKHRoaXMuX2doLHRoaXMuX2dsLDQ4KSxYKHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxZfSxhdC5leHBvcnRzPU99LDUxNzkzOihhdCxJZSxGKT0+e2F0LmV4cG9ydHM9bTt2YXIgYWU9Rig4MjAxNiku''@;'; put 'put ''RXZlbnRFbWl0dGVyO2Z1bmN0aW9uIG0oKXthZS5jYWxsKHRoaXMpfUYoNjY2OTgpKG0sYWUpLG0uUmVhZGFibGU9Rig4MDMwOSksbS5Xcml0YWJsZT1GKDU2NTYzKSxtLkR1cGxleD1GKDcwMjQ3KSxtLlRyYW5zZm9ybT1GKDE2MzA3KSxtLlBhc3NUaHJvdWdoPUYoOTUwOTYpLG0uZmluaXNo''@;'; put 'put ''ZWQ9Rig1NDYxOCksbS5waXBlbGluZT1GKDg0NTE0KSxtLlN0cmVhbT1tLG0ucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24obGUsTSl7dmFyIE89dGhpcztmdW5jdGlvbiBSKFYpe2xlLndyaXRhYmxlJiYhMT09PWxlLndyaXRlKFYpJiZPLnBhdXNlJiZPLnBhdXNlKCl9ZnVuY3Rpb24geigpe08u''@;'; put 'put ''cmVhZGFibGUmJk8ucmVzdW1lJiZPLnJlc3VtZSgpfU8ub24oImRhdGEiLFIpLGxlLm9uKCJkcmFpbiIseiksIWxlLl9pc1N0ZGlvJiYoIU18fCExIT09TS5lbmQpJiYoTy5vbigiZW5kIixJKSxPLm9uKCJjbG9zZSIsaykpO3ZhciBLPSExO2Z1bmN0aW9uIEkoKXtLfHwoSz0hMCxsZS5lbmQo''@;'; put 'put ''KSl9ZnVuY3Rpb24gaygpe0t8fChLPSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBsZS5kZXN0cm95JiZsZS5kZXN0cm95KCkpfWZ1bmN0aW9uIEUoVil7aWYoaigpLDA9PT1hZS5saXN0ZW5lckNvdW50KHRoaXMsImVycm9yIikpdGhyb3cgVn1mdW5jdGlvbiBqKCl7Ty5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''ZGF0YSIsUiksbGUucmVtb3ZlTGlzdGVuZXIoImRyYWluIix6KSxPLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEkpLE8ucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixrKSxPLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsRSksbGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixFKSxPLnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJlbmQiLGopLE8ucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixqKSxsZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGopfXJldHVybiBPLm9uKCJlcnJvciIsRSksbGUub24oImVycm9yIixFKSxPLm9uKCJlbmQiLGopLE8ub24oImNsb3NlIixqKSxsZS5vbigiY2xvc2UiLGopLGxlLmVtaXQoInBp''@;'; put 'put ''cGUiLE8pLGxlfX0sNzIwMjQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9YWUuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oVSl7c3dpdGNoKChVPSIiK1UpJiZVLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ui''@;'; put 'put ''YXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gTShVKXt2YXIgcTtzd2l0Y2godGhpcy5lbmNvZGluZz1m''@;'; put 'put ''dW5jdGlvbiBsZShVKXt2YXIgcT1mdW5jdGlvbiBtKFUpe2lmKCFVKXJldHVybiJ1dGY4Ijtmb3IodmFyIHE7Oylzd2l0Y2goVSl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJl''@;'; put 'put ''dHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIFU7ZGVmYXVsdDppZihxKXJldHVybjtVPSgiIitVKS50b0xvd2VyQ2FzZSgpLHE9ITB9fShVKTtpZigic3RyaW5nIiE9''@;'; put 'put ''dHlwZW9mIHEmJihhZS5pc0VuY29kaW5nPT09eHx8IXgoVSkpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitVKTtyZXR1cm4gcXx8VX0oVSksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9RSx0aGlzLmVuZD1qLHE9NDticmVhaztjYXNlInV0Zjgi''@;'; put 'put ''OnRoaXMuZmlsbExhc3Q9SyxxPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1WLHRoaXMuZW5kPUIscT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9WSx2b2lkKHRoaXMuZW5kPVgpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9''@;'; put 'put ''YWUuYWxsb2NVbnNhZmUocSl9ZnVuY3Rpb24gTyhVKXtyZXR1cm4gVTw9MTI3PzA6VT4+NT09Nj8yOlU+PjQ9PTE0PzM6VT4+Mz09MzA/NDpVPj42PT0yPy0xOi0yfWZ1bmN0aW9uIEsoVSl7dmFyIHE9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxlZT1mdW5jdGlvbiB6KFUscSxlZSl7''@;'; put 'put ''aWYoMTI4IT0oMTkyJnFbMF0pKXJldHVybiBVLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoVS5sYXN0TmVlZD4xJiZxLmxlbmd0aD4xKXtpZigxMjghPSgxOTImcVsxXSkpcmV0dXJuIFUubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihVLmxhc3ROZWVkPjImJnEubGVuZ3RoPjImJjEyOCE9KDE5MiZx''@;'; put 'put ''WzJdKSlyZXR1cm4gVS5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxVKTtyZXR1cm4gdm9pZCAwIT09ZWU/ZWU6dGhpcy5sYXN0TmVlZDw9VS5sZW5ndGg/KFUuY29weSh0aGlzLmxhc3RDaGFyLHEsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2Rp''@;'; put 'put ''bmcsMCx0aGlzLmxhc3RUb3RhbCkpOihVLmNvcHkodGhpcy5sYXN0Q2hhcixxLDAsVS5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09VS5sZW5ndGgpKX1mdW5jdGlvbiBFKFUscSl7aWYoKFUubGVuZ3RoLXEpJTI9PTApe3ZhciBlZT1VLnRvU3RyaW5nKCJ1dGYxNmxlIixxKTtpZihlZSl7''@;'; put 'put ''dmFyIHRlPWVlLmNoYXJDb2RlQXQoZWUubGVuZ3RoLTEpO2lmKHRlPj01NTI5NiYmdGU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPVVbVS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1VW1UubGVuZ3RoLTFdLGVlLnNs''@;'; put 'put ''aWNlKDAsLTEpfXJldHVybiBlZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1VW1UubGVuZ3RoLTFdLFUudG9TdHJpbmcoInV0ZjE2bGUiLHEsVS5sZW5ndGgtMSl9ZnVuY3Rpb24gaihVKXt2YXIgcT1VJiZVLmxlbmd0aD90aGlzLndy''@;'; put 'put ''aXRlKFUpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3ErdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTpxfWZ1bmN0aW9uIFYoVSxxKXt2YXIgZWU9KFUubGVuZ3RoLXEpJTM7cmV0dXJuIDA9PT1lZT9VLnRvU3RyaW5nKCJi''@;'; put 'put ''YXNlNjQiLHEpOih0aGlzLmxhc3ROZWVkPTMtZWUsdGhpcy5sYXN0VG90YWw9MywxPT09ZWU/dGhpcy5sYXN0Q2hhclswXT1VW1UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPVVbVS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1VW1UubGVuZ3RoLTFdKSxVLnRvU3RyaW5nKCJiYXNl''@;'; put 'put ''NjQiLHEsVS5sZW5ndGgtZWUpKX1mdW5jdGlvbiBCKFUpe3ZhciBxPVUmJlUubGVuZ3RoP3RoaXMud3JpdGUoVSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpxfWZ1bmN0aW9uIFkoVSl7cmV0dXJu''@;'; put 'put ''IFUudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gWChVKXtyZXR1cm4gVSYmVS5sZW5ndGg/dGhpcy53cml0ZShVKToiIn1JZS5zPU0sTS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oVSl7aWYoMD09PVUubGVuZ3RoKXJldHVybiIiO3ZhciBxLGVlO2lmKHRoaXMubGFzdE5lZWQp''@;'; put 'put ''e2lmKHZvaWQgMD09PShxPXRoaXMuZmlsbExhc3QoVSkpKXJldHVybiIiO2VlPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgZWU9MDtyZXR1cm4gZWU8VS5sZW5ndGg/cT9xK3RoaXMudGV4dChVLGVlKTp0aGlzLnRleHQoVSxlZSk6cXx8IiJ9LE0ucHJvdG90eXBlLmVuZD1m''@;'; put 'put ''dW5jdGlvbiBrKFUpe3ZhciBxPVUmJlUubGVuZ3RoP3RoaXMud3JpdGUoVSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cSsiXHVmZmZkIjpxfSxNLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIEkoVSxxKXt2YXIgZWU9ZnVuY3Rpb24gUihVLHEsZWUpe3ZhciB0ZT1xLmxlbmd0aC0xO2lmKHRl''@;'; put 'put ''PGVlKXJldHVybiAwO3ZhciBvZT1PKHFbdGVdKTtyZXR1cm4gb2U+PTA/KG9lPjAmJihVLmxhc3ROZWVkPW9lLTEpLG9lKTotLXRlPGVlfHwtMj09PW9lPzA6KG9lPU8ocVt0ZV0pKT49MD8ob2U+MCYmKFUubGFzdE5lZWQ9b2UtMiksb2UpOi0tdGU8ZWV8fC0yPT09b2U/MDoob2U9TyhxW3Rl''@;'; put 'put ''XSkpPj0wPyhvZT4wJiYoMj09PW9lP29lPTA6VS5sYXN0TmVlZD1vZS0zKSxvZSk6MH0odGhpcyxVLHEpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBVLnRvU3RyaW5nKCJ1dGY4IixxKTt0aGlzLmxhc3RUb3RhbD1lZTt2YXIgdGU9VS5sZW5ndGgtKGVlLXRoaXMubGFzdE5lZWQpO3JldHVy''@;'; put 'put ''biBVLmNvcHkodGhpcy5sYXN0Q2hhciwwLHRlKSxVLnRvU3RyaW5nKCJ1dGY4IixxLHRlKX0sTS5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oVSl7aWYodGhpcy5sYXN0TmVlZDw9VS5sZW5ndGgpcmV0dXJuIFUuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFz''@;'; put 'put ''dE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7VS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLFUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1VLmxlbmd0aH19''@;'; put 'put ''LDY2MzA0OihhdCxJZSxGKT0+e3ZhciBhZT1GKDQwMjkwKTthdC5leHBvcnRzPXtUZXh0RW5jb2RlcjphZS5UZXh0RW5jb2RlcixUZXh0RGVjb2RlcjphZS5UZXh0RGVjb2Rlcn19LDE2NDEzOmZ1bmN0aW9uKGF0KXshZnVuY3Rpb24oSWUpeyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzJiYoYXQu''@;'; put 'put ''ZXhwb3J0cz1JZSksSWVbImVuY29kaW5nLWluZGV4ZXMiXT17YmlnNTpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTczOTIsMTk1MDYsMTc5MjMsMTc4MzAsMTc3ODQsMTYw''@;'; put 'put ''MzU5LDE5ODMxLDE3ODQzLDE2Mjk5MywxOTY4MiwxNjMwMTMsMTUyNTMsMTgyMzAsMTgyNDQsMTk1MjcsMTk1MjAsMTQ4MTU5LDE0NDkxOSwxNjA1OTQsMTU5MzcxLDE1OTk1NCwxOTU0MywxNzI4ODEsMTgyNTUsMTc4ODIsMTk1ODksMTYyOTI0LDE5NzE5LDE5MTA4LDE4MDgxLDE1ODQ5OSwy''@;'; put 'put ''OTIyMSwxNTQxOTYsMTM3ODI3LDE0Njk1MCwxNDcyOTcsMjYxODksMjIyNjcsbnVsbCwzMjE0OSwyMjgxMywxNjY4NDEsMTU4NjAsMzg3MDgsMTYyNzk5LDIzNTE1LDEzODU5MCwyMzIwNCwxMzg2MSwxNzE2OTYsMjMyNDksMjM0NzksMjM4MDQsMjY0NzgsMzQxOTUsMTcwMzA5LDI5NzkzLDI5''@;'; put 'put ''ODUzLDE0NDUzLDEzODU3OSwxNDUwNTQsMTU1NjgxLDE2MTA4LDE1MzgyMiwxNTA5MywzMTQ4NCw0MDg1NSwxNDc4MDksMTY2MTU3LDE0Mzg1MCwxMzM3NzAsMTQzOTY2LDE3MTYyLDMzOTI0LDQwODU0LDM3OTM1LDE4NzM2LDM0MzIzLDIyNjc4LDM4NzMwLDM3NDAwLDMxMTg0LDMxMjgyLDI2''@;'; put 'put ''MjA4LDI3MTc3LDM0OTczLDI5NzcyLDMxNjg1LDI2NDk4LDMxMjc2LDIxMDcxLDM2OTM0LDEzNTQyLDI5NjM2LDE1NTA2NSwyOTg5NCw0MDkwMywyMjQ1MSwxODczNSwyMTU4MCwxNjY4OSwxNDUwMzgsMjI1NTIsMzEzNDYsMTYyNjYxLDM1NzI3LDE4MDk0LDE1OTM2OCwxNjc2OSwxNTUwMzMs''@;'; put 'put ''MzE2NjIsMTQwNDc2LDQwOTA0LDE0MDQ4MSwxNDA0ODksMTQwNDkyLDQwOTA1LDM0MDUyLDE0NDgyNywxNjU2NCw0MDkwNiwxNzYzMywxNzU2MTUsMjUyODEsMjg3ODIsNDA5MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjczNiwxMjczNywxMjczOCwxMjczOSwxMjc0MCwxMzEzNDAsMTI3NDEsMTMxMjgxLDEzMTI3NywxMjc0MiwxMjc0MywxMzEy''@;'; put 'put ''NzUsMTM5MjQwLDEyNzQ0LDEzMTI3NCwxMjc0NSwxMjc0NiwxMjc0NywxMjc0OCwxMzEzNDIsMTI3NDksMTI3NTAsMjU2LDE5Myw0NjEsMTkyLDI3NCwyMDEsMjgyLDIwMCwzMzIsMjExLDQ2NSwyMTAsbnVsbCw3ODcwLG51bGwsNzg3MiwyMDIsMjU3LDIyNSw0NjIsMjI0LDU5MywyNzUsMjMz''@;'; put 'put ''LDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MixudWxsLDc4NzEsbnVsbCw3ODczLDIzNCw2MDksOTE3OCw5MTc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE3Mjk2OSwxMzU0OTMsbnVsbCwyNTg2NixudWxsLG51bGwsMjAwMjksMjgzODEsNDAyNzAsMzczNDMsbnVsbCxudWxsLDE2MTU4OSwyNTc0NSwyMDI1MCwyMDI2NCwyMDM5MiwyMDgyMiwyMDg1MiwyMDg5MiwyMDk2NCwy''@;'; put 'put ''MTE1MywyMTE2MCwyMTMwNywyMTMyNiwyMTQ1NywyMTQ2NCwyMjI0MiwyMjc2OCwyMjc4OCwyMjc5MSwyMjgzNCwyMjgzNiwyMzM5OCwyMzQ1NCwyMzQ1NSwyMzcwNiwyNDE5OCwyNDYzNSwyNTk5MywyNjYyMiwyNjYyOCwyNjcyNSwyNzk4MiwyODg2MCwzMDAwNSwzMjQyMCwzMjQyOCwzMjQ0''@;'; put 'put ''MiwzMjQ1NSwzMjQ2MywzMjQ3OSwzMjUxOCwzMjU2NywzMzQwMiwzMzQ4NywzMzY0NywzNTI3MCwzNTc3NCwzNTgxMCwzNjcxMCwzNjcxMSwzNjcxOCwyOTcxMywzMTk5NiwzMjIwNSwyNjk1MCwzMTQzMywyMTAzMSxudWxsLG51bGwsbnVsbCxudWxsLDM3MjYwLDMwOTA0LDM3MjE0LDMyOTU2''@;'; put 'put ''LG51bGwsMzYxMDcsMzMwMTQsMTMzNjA3LG51bGwsbnVsbCwzMjkyNyw0MDY0NywxOTY2MSw0MDM5Myw0MDQ2MCwxOTUxOCwxNzE1MTAsMTU5NzU4LDQwNDU4LDE3MjMzOSwxMzc2MSxudWxsLDI4MzE0LDMzMzQyLDI5OTc3LG51bGwsMTg3MDUsMzk1MzIsMzk1NjcsNDA4NTcsMzExMTEsMTY0''@;'; put 'put ''OTcyLDEzODY5OCwxMzI1NjAsMTQyMDU0LDIwMDA0LDIwMDk3LDIwMDk2LDIwMTAzLDIwMTU5LDIwMjAzLDIwMjc5LDEzMzg4LDIwNDEzLDE1OTQ0LDIwNDgzLDIwNjE2LDEzNDM3LDEzNDU5LDEzNDc3LDIwODcwLDIyNzg5LDIwOTU1LDIwOTg4LDIwOTk3LDIwMTA1LDIxMTEzLDIxMTM2LDIx''@;'; put 'put ''Mjg3LDEzNzY3LDIxNDE3LDEzNjQ5LDIxNDI0LDEzNjUxLDIxNDQyLDIxNTM5LDEzNjc3LDEzNjgyLDEzOTUzLDIxNjUxLDIxNjY3LDIxNjg0LDIxNjg5LDIxNzEyLDIxNzQzLDIxNzg0LDIxNzk1LDIxODAwLDEzNzIwLDIxODIzLDEzNzMzLDEzNzU5LDIxOTc1LDEzNzY1LDE2MzIwNCwyMTc5''@;'; put 'put ''NyxudWxsLDEzNDIxMCwxMzQ0MjEsMTUxODUxLDIxOTA0LDE0MjUzNCwxNDgyOCwxMzE5MDUsMzY0MjIsMTUwOTY4LDE2OTE4OSwxNjQ2NywxNjQwMzAsMzA1ODYsMTQyMzkyLDE0OTAwLDE4Mzg5LDE2NDE4OSwxNTgxOTQsMTUxMDE4LDI1ODIxLDEzNDUyNCwxMzUwOTIsMTM0MzU3LDEzNTQx''@;'; put 'put ''MiwyNTc0MSwzNjQ3OCwxMzQ4MDYsMTM0MTU1LDEzNTAxMiwxNDI1MDUsMTY0NDM4LDE0ODY5MSxudWxsLDEzNDQ3MCwxNzA1NzMsMTY0MDczLDE4NDIwLDE1MTIwNywxNDI1MzAsMzk2MDIsMTQ5NTEsMTY5NDYwLDE2MzY1LDEzNTc0LDE1MjI2MywxNjk5NDAsMTYxOTkyLDE0MjY2MCw0MDMw''@;'; put 'put ''MiwzODkzMyxudWxsLDE3MzY5LDE1NTgxMywyNTc4MCwyMTczMSwxNDI2NjgsMTQyMjgyLDEzNTI4NywxNDg0MywxMzUyNzksMTU3NDAyLDE1NzQ2MiwxNjIyMDgsMjU4MzQsMTUxNjM0LDEzNDIxMSwzNjQ1NiwxMzk2ODEsMTY2NzMyLDEzMjkxMyxudWxsLDE4NDQzLDEzMTQ5NywxNjM3OCwy''@;'; put 'put ''MjY0MywxNDI3MzMsbnVsbCwxNDg5MzYsMTMyMzQ4LDE1NTc5OSwxMzQ5ODgsMTM0NTUwLDIxODgxLDE2NTcxLDE3MzM4LG51bGwsMTkxMjQsMTQxOTI2LDEzNTMyNSwzMzE5NCwzOTE1NywxMzQ1NTYsMjU0NjUsMTQ4NDYsMTQxMTczLDM2Mjg4LDIyMTc3LDI1NzI0LDE1OTM5LG51bGwsMTcz''@;'; put 'put ''NTY5LDEzNDY2NSwxNDIwMzEsMTQyNTM3LG51bGwsMTM1MzY4LDE0NTg1OCwxNDczOCwxNDg1NCwxNjQ1MDcsMTM2ODgsMTU1MjA5LDEzOTQ2MywyMjA5OCwxMzQ5NjEsMTQyNTE0LDE2OTc2MCwxMzUwMCwyNzcwOSwxNTEwOTksbnVsbCxudWxsLDE2MTE0MCwxNDI5ODcsMTM5Nzg0LDE3MzY1''@;'; put 'put ''OSwxNjcxMTcsMTM0Nzc4LDEzNDE5NiwxNTc3MjQsMzI2NTksMTM1Mzc1LDE0MTMxNSwxNDE2MjUsMTM4MTksMTUyMDM1LDEzNDc5NiwxMzUwNTMsMTM0ODI2LDE2Mjc1LDEzNDk2MCwxMzQ0NzEsMTM1NTAzLDEzNDczMixudWxsLDEzNDgyNywxMzQwNTcsMTM0NDcyLDEzNTM2MCwxMzU0ODUs''@;'; put 'put ''MTYzNzcsMTQwOTUwLDI1NjUwLDEzNTA4NSwxNDQzNzIsMTYxMzM3LDE0MjI4NiwxMzQ1MjYsMTM0NTI3LDE0MjQxNywxNDI0MjEsMTQ4NzIsMTM0ODA4LDEzNTM2NywxMzQ5NTgsMTczNjE4LDE1ODU0NCwxNjcxMjIsMTY3MzIxLDE2NzExNCwzODMxNCwyMTcwOCwzMzQ3NiwyMTk0NSxudWxs''@;'; put 'put ''LDE3MTcxNSwzOTk3NCwzOTYwNiwxNjE2MzAsMTQyODMwLDI4OTkyLDMzMTMzLDMzMDA0LDIzNTgwLDE1NzA0MiwzMzA3NiwxNDIzMSwyMTM0MywxNjQwMjksMzczMDIsMTM0OTA2LDEzNDY3MSwxMzQ3NzUsMTM0OTA3LDEzNzg5LDE1MTAxOSwxMzgzMywxMzQzNTgsMjIxOTEsMTQxMjM3LDEz''@;'; put 'put ''NTM2OSwxMzQ2NzIsMTM0Nzc2LDEzNTI4OCwxMzU0OTYsMTY0MzU5LDEzNjI3NywxMzQ3NzcsMTUxMTIwLDE0Mjc1NiwyMzEyNCwxMzUxOTcsMTM1MTk4LDEzNTQxMywxMzU0MTQsMjI0MjgsMTM0NjczLDE2MTQyOCwxNjQ1NTcsMTM1MDkzLDEzNDc3OSwxNTE5MzQsMTQwODMsMTM1MDk0LDEz''@;'; put 'put ''NTU1MiwxNTIyODAsMTcyNzMzLDE0OTk3OCwxMzcyNzQsMTQ3ODMxLDE2NDQ3NiwyMjY4MSwyMTA5NiwxMzg1MCwxNTM0MDUsMzE2NjYsMjM0MDAsMTg0MzIsMTkyNDQsNDA3NDMsMTg5MTksMzk5NjcsMzk4MjEsMTU0NDg0LDE0MzY3NywyMjAxMSwxMzgxMCwyMjE1MywyMDAwOCwyMjc4Niwx''@;'; put 'put ''MzgxNzcsMTk0NjgwLDM4NzM3LDEzMTIwNiwyMDA1OSwyMDE1NSwxMzYzMCwyMzU4NywyNDQwMSwyNDUxNiwxNDU4NiwyNTE2NCwyNTkwOSwyNzUxNCwyNzcwMSwyNzcwNiwyODc4MCwyOTIyNywyMDAxMiwyOTM1NywxNDk3MzcsMzI1OTQsMzEwMzUsMzE5OTMsMzI1OTUsMTU2MjY2LDEzNTA1''@;'; put 'put ''LG51bGwsMTU2NDkxLDMyNzcwLDMyODk2LDE1NzIwMiwxNTgwMzMsMjEzNDEsMzQ5MTYsMzUyNjUsMTYxOTcwLDM1NzQ0LDM2MTI1LDM4MDIxLDM4MjY0LDM4MjcxLDM4Mzc2LDE2NzQzOSwzODg4NiwzOTAyOSwzOTExOCwzOTEzNCwzOTI2NywxN2U0LDQwMDYwLDQwNDc5LDQwNjQ0LDI3NTAz''@;'; put 'put ''LDYzNzUxLDIwMDIzLDEzMTIwNywzODQyOSwyNTE0MywzODA1MCxudWxsLDIwNTM5LDI4MTU4LDE3MTEyMyw0MDg3MCwxNTgxNywzNDk1OSwxNDc3OTAsMjg3OTEsMjM3OTcsMTkyMzIsMTUyMDEzLDEzNjU3LDE1NDkyOCwyNDg2NiwxNjY0NTAsMzY3NzUsMzczNjYsMjkwNzMsMjYzOTMsMjk2''@;'; put 'put ''MjYsMTQ0MDAxLDE3MjI5NSwxNTQ5OSwxMzc2MDAsMTkyMTYsMzA5NDgsMjk2OTgsMjA5MTAsMTY1NjQ3LDE2MzkzLDI3MjM1LDE3MjczMCwxNjkzMSwzNDMxOSwxMzM3NDMsMzEyNzQsMTcwMzExLDE2NjYzNCwzODc0MSwyODc0OSwyMTI4NCwxMzkzOTAsMzc4NzYsMzA0MjUsMTY2MzcxLDQw''@;'; put 'put ''ODcxLDMwNjg1LDIwMTMxLDIwNDY0LDIwNjY4LDIwMDE1LDIwMjQ3LDQwODcyLDIxNTU2LDMyMTM5LDIyNjc0LDIyNzM2LDEzODY3OCwyNDIxMCwyNDIxNywyNDUxNCwxNDEwNzQsMjU5OTUsMTQ0Mzc3LDI2OTA1LDI3MjAzLDE0NjUzMSwyNzkwMyxudWxsLDI5MTg0LDE0ODc0MSwyOTU4MCwx''@;'; put 'put ''NjA5MSwxNTAwMzUsMjMzMTcsMjk4ODEsMzU3MTUsMTU0Nzg4LDE1MzIzNywzMTM3OSwzMTcyNCwzMTkzOSwzMjM2NCwzMzUyOCwzNDE5OSw0MDg3MywzNDk2MCw0MDg3NCwzNjUzNyw0MDg3NSwzNjgxNSwzNDE0MywzOTM5MiwzNzQwOSw0MDg3NiwxNjczNTMsMTM2MjU1LDE2NDk3LDE3MDU4''@;'; put 'put ''LDIzMDY2LG51bGwsbnVsbCxudWxsLDM5MDE2LDI2NDc1LDE3MDE0LDIyMzMzLG51bGwsMzQyNjIsMTQ5ODgzLDMzNDcxLDE2MDAxMywxOTU4NSwxNTkwOTIsMjM5MzEsMTU4NDg1LDE1OTY3OCw0MDg3Nyw0MDg3OCwyMzQ0Niw0MDg3OSwyNjM0MywzMjM0NywyODI0NywzMTE3OCwxNTc1Miwx''@;'; put 'put ''NzYwMywxNDM5NTgsMTQxMjA2LDE3MzA2LDE3NzE4LG51bGwsMjM3NjUsMTQ2MjAyLDM1NTc3LDIzNjcyLDE1NjM0LDE0NDcyMSwyMzkyOCw0MDg4MiwyOTAxNSwxNzc1MiwxNDc2OTIsMTM4Nzg3LDE5NTc1LDE0NzEyLDEzMzg2LDEzMTQ5MiwxNTg3ODUsMzU1MzIsMjA0MDQsMTMxNjQxLDIy''@;'; put 'put ''OTc1LDMzMTMyLDM4OTk4LDE3MDIzNCwyNDM3OSwxMzQwNDcsbnVsbCwxMzk3MTMsMTY2MjUzLDE2NjQyLDE4MTA3LDE2ODA1NywxNjEzNSw0MDg4MywxNzI0NjksMTY2MzIsMTQyOTQsMTgxNjcsMTU4NzkwLDE2NzY0LDE2NTU1NCwxNjA3NjcsMTc3NzMsMTQ1NDgsMTUyNzMwLDE3NzYxLDE3''@;'; put 'put ''NjkxLDE5ODQ5LDE5NTc5LDE5ODMwLDE3ODk4LDE2MzI4LDE1MDI4NywxMzkyMSwxNzYzMCwxNzU5NywxNjg3NywyMzg3MCwyMzg4MCwyMzg5NCwxNTg2OCwxNDM1MSwyMzk3MiwyMzk5MywxNDM2OCwxNDM5MiwyNDEzMCwyNDI1MywyNDM1NywyNDQ1MSwxNDYwMCwxNDYxMiwxNDY1NSwxNDY2''@;'; put 'put ''OSwyNDc5MSwyNDg5MywyMzc4MSwxNDcyOSwyNTAxNSwyNTAxNywyNTAzOSwxNDc3NiwyNTEzMiwyNTIzMiwyNTMxNywyNTM2OCwxNDg0MCwyMjE5MywxNDg1MSwyNTU3MCwyNTU5NSwyNTYwNywyNTY5MCwxNDkyMywyNTc5MiwyMzgyOSwyMjA0OSw0MDg2MywxNDk5OSwyNTk5MCwxNTAzNywy''@;'; put 'put ''NjExMSwyNjE5NSwxNTA5MCwyNjI1OCwxNTEzOCwyNjM5MCwxNTE3MCwyNjUzMiwyNjYyNCwxNTE5MiwyNjY5OCwyNjc1NiwxNTIxOCwxNTIxNywxNTIyNywyNjg4OSwyNjk0NywyOTI3NiwyNjk4MCwyNzAzOSwyNzAxMywxNTI5MiwyNzA5NCwxNTMyNSwyNzIzNywyNzI1MiwyNzI0OSwyNzI2''@;'; put 'put ''NiwxNTM0MCwyNzI4OSwxNTM0NiwyNzMwNywyNzMxNywyNzM0OCwyNzM4MiwyNzUyMSwyNzU4NSwyNzYyNiwyNzc2NSwyNzgxOCwxNTU2MywyNzkwNiwyNzkxMCwyNzk0MiwyODAzMywxNTU5OSwyODA2OCwyODA4MSwyODE4MSwyODE4NCwyODIwMSwyODI5NCwxNjYzMzYsMjgzNDcsMjgzODYs''@;'; put 'put ''MjgzNzgsNDA4MzEsMjgzOTIsMjgzOTMsMjg0NTIsMjg0NjgsMTU2ODYsMTQ3MjY1LDI4NTQ1LDI4NjA2LDE1NzIyLDE1NzMzLDI5MTExLDIzNzA1LDE1NzU0LDI4NzE2LDE1NzYxLDI4NzUyLDI4NzU2LDI4NzgzLDI4Nzk5LDI4ODA5LDEzMTg3NywxNzM0NSwxMzgwOSwxMzQ4NzIsMTQ3MTU5''@;'; put 'put ''LDIyNDYyLDE1OTQ0MywyODk5MCwxNTM1NjgsMTM5MDIsMjcwNDIsMTY2ODg5LDIzNDEyLDMxMzA1LDE1MzgyNSwxNjkxNzcsMzEzMzMsMzEzNTcsMTU0MDI4LDMxNDE5LDMxNDA4LDMxNDI2LDMxNDI3LDI5MTM3LDE1NjgxMywxNjg0MiwzMTQ1MCwzMTQ1MywzMTQ2NiwxNjg3OSwyMTY4Miwx''@;'; put 'put ''NTQ2MjUsMzE0OTksMzE1NzMsMzE1MjksMTUyMzM0LDE1NDg3OCwzMTY1MCwzMTU5OSwzMzY5MiwxNTQ1NDgsMTU4ODQ3LDMxNjk2LDMzODI1LDMxNjM0LDMxNjcyLDE1NDkxMiwxNTc4OSwxNTQ3MjUsMzM5MzgsMzE3MzgsMzE3NTAsMzE3OTcsMTU0ODE3LDMxODEyLDMxODc1LDE0OTYzNCwz''@;'; put 'put ''MTkxMCwyNjIzNywxNDg4NTYsMzE5NDUsMzE5NDMsMzE5NzQsMzE4NjAsMzE5ODcsMzE5ODksMzE5NTAsMzIzNTksMTc2OTMsMTU5MzAwLDMyMDkzLDE1OTQ0NiwyOTgzNywzMjEzNywzMjE3MSwyODk4MSwzMjE3OSwzMjIxMCwxNDc1NDMsMTU1Njg5LDMyMjI4LDE1NjM1LDMyMjQ1LDEzNzIw''@;'; put 'put ''OSwzMjIyOSwxNjQ3MTcsMzIyODUsMTU1OTM3LDE1NTk5NCwzMjM2NiwzMjQwMiwxNzE5NSwzNzk5NiwzMjI5NSwzMjU3NiwzMjU3NywzMjU4MywzMTAzMCwxNTYzNjgsMzkzOTMsMzI2NjMsMTU2NDk3LDMyNjc1LDEzNjgwMSwxMzExNzYsMTc3NTYsMTQ1MjU0LDE3NjY3LDE2NDY2NiwzMjc2''@;'; put 'put ''MiwxNTY4MDksMzI3NzMsMzI3NzYsMzI3OTcsMzI4MDgsMzI4MTUsMTcyMTY3LDE1ODkxNSwzMjgyNywzMjgyOCwzMjg2NSwxNDEwNzYsMTg4MjUsMTU3MjIyLDE0NjkxNSwxNTc0MTYsMjY0MDUsMzI5MzUsMTY2NDcyLDMzMDMxLDMzMDUwLDIyNzA0LDE0MTA0NiwyNzc3NSwxNTY4MjQsMTUx''@;'; put 'put ''NDgwLDI1ODMxLDEzNjMzMCwzMzMwNCwxMzczMTAsMjcyMTksMTUwMTE3LDE1MDE2NSwxNzUzMCwzMzMyMSwxMzM5MDEsMTU4MjkwLDE0NjgxNCwyMDQ3MywxMzY0NDUsMzQwMTgsMzM2MzQsMTU4NDc0LDE0OTkyNywxNDQ2ODgsMTM3MDc1LDE0NjkzNiwzMzQ1MCwyNjkwNywxOTQ5NjQsMTY4''@;'; put 'put ''NTksMzQxMjMsMzM0ODgsMzM1NjIsMTM0Njc4LDEzNzE0MCwxNDAxNywxNDM3NDEsMTQ0NzMwLDMzNDAzLDMzNTA2LDMzNTYwLDE0NzA4MywxNTkxMzksMTU4NDY5LDE1ODYxNSwxNDQ4NDYsMTU4MDcsMzM1NjUsMjE5OTYsMzM2NjksMTc2NzUsMTU5MTQxLDMzNzA4LDMzNzI5LDMzNzQ3LDEz''@;'; put 'put ''NDM4LDE1OTQ0NCwyNzIyMywzNDEzOCwxMzQ2MiwxNTkyOTgsMTQzMDg3LDMzODgwLDE1NDU5NiwzMzkwNSwxNTgyNywxNzYzNiwyNzMwMywzMzg2NiwxNDY2MTMsMzEwNjQsMzM5NjAsMTU4NjE0LDE1OTM1MSwxNTkyOTksMzQwMTQsMzM4MDcsMzM2ODEsMTc1NjgsMzM5MzksMzQwMjAsMTU0''@;'; put 'put ''NzY5LDE2OTYwLDE1NDgxNiwxNzczMSwzNDEwMCwyMzI4MiwxNTkzODUsMTc3MDMsMzQxNjMsMTc2ODYsMjY1NTksMzQzMjYsMTY1NDEzLDE2NTQzNSwzNDI0MSwxNTk4ODAsMzQzMDYsMTM2NTc4LDE1OTk0OSwxOTQ5OTQsMTc3NzAsMzQzNDQsMTM4OTYsMTM3Mzc4LDIxNDk1LDE2MDY2Niwz''@;'; put 'put ''NDQzMCwzNDY3MywxNzIyODAsMzQ3OTgsMTQyMzc1LDM0NzM3LDM0Nzc4LDM0ODMxLDIyMTEzLDM0NDEyLDI2NzEwLDE3OTM1LDM0ODg1LDM0ODg2LDE2MTI0OCwxNDY4NzMsMTYxMjUyLDM0OTEwLDM0OTcyLDE4MDExLDM0OTk2LDM0OTk3LDI1NTM3LDM1MDEzLDMwNTgzLDE2MTU1MSwzNTIw''@;'; put 'put ''NywzNTIxMCwzNTIzOCwzNTI0MSwzNTIzOSwzNTI2MCwxNjY0MzcsMzUzMDMsMTYyMDg0LDE2MjQ5MywzNTQ4NCwzMDYxMSwzNzM3NCwzNTQ3MiwxNjIzOTMsMzE0NjUsMTYyNjE4LDE0NzM0MywxODE5NSwxNjI2MTYsMjkwNTIsMzU1OTYsMzU2MTUsMTUyNjI0LDE1MjkzMywzNTY0NywzNTY2''@;'; put 'put ''MCwzNTY2MSwzNTQ5NywxNTAxMzgsMzU3MjgsMzU3MzksMzU1MDMsMTM2OTI3LDE3OTQxLDM0ODk1LDM1OTk1LDE2MzE1NiwxNjMyMTUsMTk1MDI4LDE0MTE3LDE2MzE1NSwzNjA1NCwxNjMyMjQsMTYzMjYxLDM2MTE0LDM2MDk5LDEzNzQ4OCwzNjA1OSwyODc2NCwzNjExMywxNTA3MjksMTYw''@;'; put 'put ''ODAsMzYyMTUsMzYyNjUsMTYzODQyLDEzNTE4OCwxNDk4OTgsMTUyMjgsMTY0Mjg0LDE2MDAxMiwzMTQ2MywzNjUyNSwzNjUzNCwzNjU0NywzNzU4OCwzNjYzMywzNjY1MywxNjQ3MDksMTY0ODgyLDM2NzczLDM3NjM1LDE3MjcwMywxMzM3MTIsMzY3ODcsMTg3MzAsMTY2MzY2LDE2NTE4MSwx''@;'; put 'put ''NDY4NzUsMjQzMTIsMTQzOTcwLDM2ODU3LDE3MjA1MiwxNjU1NjQsMTY1MTIxLDE0MDA2OSwxNDcyMCwxNTk0NDcsMzY5MTksMTY1MTgwLDE2MjQ5NCwzNjk2MSwxNjUyMjgsMTY1Mzg3LDM3MDMyLDE2NTY1MSwzNzA2MCwxNjU2MDYsMzcwMzgsMzcxMTcsMzcyMjMsMTUwODgsMzcyODksMzcz''@;'; put 'put ''MTYsMzE5MTYsMTY2MTk1LDEzODg4OSwzNzM5MCwyNzgwNywzNzQ0MSwzNzQ3NCwxNTMwMTcsMzc1NjEsMTY2NTk4LDE0NjU4NywxNjY2NjgsMTUzMDUxLDEzNDQ0OSwzNzY3NiwzNzczOSwxNjY2MjUsMTY2ODkxLDI4ODE1LDIzMjM1LDE2NjYyNiwxNjY2MjksMTg3ODksMzc0NDQsMTY2ODky''@;'; put 'put ''LDE2Njk2OSwxNjY5MTEsMzc3NDcsMzc5NzksMzY1NDAsMzgyNzcsMzgzMTAsMzc5MjYsMzgzMDQsMjg2NjIsMTcwODEsMTQwOTIyLDE2NTU5MiwxMzU4MDQsMTQ2OTkwLDE4OTExLDI3Njc2LDM4NTIzLDM4NTUwLDE2NzQ4LDM4NTYzLDE1OTQ0NSwyNTA1MCwzODU4MiwzMDk2NSwxNjY2MjQs''@;'; put 'put ''Mzg1ODksMjE0NTIsMTg4NDksMTU4OTA0LDEzMTcwMCwxNTY2ODgsMTY4MTExLDE2ODE2NSwxNTAyMjUsMTM3NDkzLDE0NDEzOCwzODcwNSwzNDM3MCwzODcxMCwxODk1OSwxNzcyNSwxNzc5NywxNTAyNDksMjg3ODksMjMzNjEsMzg2ODMsMzg3NDgsMTY4NDA1LDM4NzQzLDIzMzcwLDE2ODQy''@;'; put 'put ''NywzODc1MSwzNzkyNSwyMDY4OCwxNDM1NDMsMTQzNTQ4LDM4NzkzLDM4ODE1LDM4ODMzLDM4ODQ2LDM4ODQ4LDM4ODY2LDM4ODgwLDE1MjY4NCwzODg5NCwyOTcyNCwxNjkwMTEsMzg5MTEsMzg5MDEsMTY4OTg5LDE2MjE3MCwxOTE1MywzODk2NCwzODk2MywzODk4NywzOTAxNCwxNTExOCwx''@;'; put 'put ''NjAxMTcsMTU2OTcsMTMyNjU2LDE0NzgwNCwxNTMzNTAsMzkxMTQsMzkwOTUsMzkxMTIsMzkxMTEsMTkxOTksMTU5MDE1LDEzNjkxNSwyMTkzNiwzOTEzNywzOTE0MiwzOTE0OCwzNzc1MiwzOTIyNSwxNTAwNTcsMTkzMTQsMTcwMDcxLDE3MDI0NSwzOTQxMywzOTQzNiwzOTQ4MywzOTQ0MCwz''@;'; put 'put ''OTUxMiwxNTMzODEsMTQwMjAsMTY4MTEzLDE3MDk2NSwzOTY0OCwzOTY1MCwxNzA3NTcsMzk2NjgsMTk0NzAsMzk3MDAsMzk3MjUsMTY1Mzc2LDIwNTMyLDM5NzMyLDE1ODEyMCwxNDUzMSwxNDM0ODUsMzk3NjAsMzk3NDQsMTcxMzI2LDIzMTA5LDEzNzMxNSwzOTgyMiwxNDgwNDMsMzk5Mzgs''@;'; put 'put ''Mzk5MzUsMzk5NDgsMTcxNjI0LDQwNDA0LDE3MTk1OSwxNzI0MzQsMTcyNDU5LDE3MjI1NywxNzIzMjMsMTcyNTExLDQwMzE4LDQwMzIzLDE3MjM0MCw0MDQ2MiwyNjc2MCw0MDM4OCwxMzk2MTEsMTcyNDM1LDE3MjU3NiwxMzc1MzEsMTcyNTk1LDQwMjQ5LDE3MjIxNywxNzI3MjQsNDA1OTIs''@;'; put 'put ''NDA1OTcsNDA2MDYsNDA2MTAsMTk3NjQsNDA2MTgsNDA2MjMsMTQ4MzI0LDQwNjQxLDE1MjAwLDE0ODIxLDE1NjQ1LDIwMjc0LDE0MjcwLDE2Njk1NSw0MDcwNiw0MDcxMiwxOTM1MCwzNzkyNCwxNTkxMzgsNDA3MjcsNDA3MjYsNDA3NjEsMjIxNzUsMjIxNTQsNDA3NzMsMzkzNTIsMTY4MDc1''@;'; put 'put ''LDM4ODk4LDMzOTE5LDQwODAyLDQwODA5LDMxNDUyLDQwODQ2LDI5MjA2LDE5MzkwLDE0OTg3NywxNDk5NDcsMjkwNDcsMTUwMDA4LDE0ODI5NiwxNTAwOTcsMjk1OTgsMTY2ODc0LDEzNzQ2NiwzMTEzNSwxNjYyNzAsMTY3NDc4LDM3NzM3LDM3ODc1LDE2NjQ2OCwzNzYxMiwzNzc2MSwzNzgz''@;'; put 'put ''NSwxNjYyNTIsMTQ4NjY1LDI5MjA3LDE2MTA3LDMwNTc4LDMxMjk5LDI4ODgwLDE0ODU5NSwxNDg0NzIsMjkwNTQsMTM3MTk5LDI4ODM1LDEzNzQwNiwxNDQ3OTMsMTYwNzEsMTM3MzQ5LDE1MjYyMywxMzcyMDgsMTQxMTQsMTM2OTU1LDEzNzI3MywxNDA0OSwxMzcwNzYsMTM3NDI1LDE1NTQ2''@;'; put 'put ''NywxNDExNSwxMzY4OTYsMjIzNjMsMTUwMDUzLDEzNjE5MCwxMzU4NDgsMTM2MTM0LDEzNjM3NCwzNDA1MSwxNDUwNjIsMzQwNTEsMzM4NzcsMTQ5OTA4LDE2MDEwMSwxNDY5OTMsMTUyOTI0LDE0NzE5NSwxNTk4MjYsMTc2NTIsMTQ1MTM0LDE3MDM5NywxNTk1MjYsMjY2MTcsMTQxMzEsMTUz''@;'; put 'put ''ODEsMTU4NDcsMjI2MzYsMTM3NTA2LDI2NjQwLDE2NDcxLDE0NTIxNSwxNDc2ODEsMTQ3NTk1LDE0NzcyNywxNTg3NTMsMjE3MDcsMjIxNzQsMTU3MzYxLDIyMTYyLDEzNTEzNSwxMzQwNTYsMTM0NjY5LDM3ODMwLDE2NjY3NSwzNzc4OCwyMDIxNiwyMDc3OSwxNDM2MSwxNDg1MzQsMjAxNTYs''@;'; put 'put ''MTMyMTk3LDEzMTk2NywyMDI5OSwyMDM2MiwxNTMxNjksMjMxNDQsMTMxNDk5LDEzMjA0MywxNDc0NSwxMzE4NTAsMTMyMTE2LDEzMzY1LDIwMjY1LDEzMTc3NiwxNjc2MDMsMTMxNzAxLDM1NTQ2LDEzMTU5NiwyMDEyMCwyMDY4NSwyMDc0OSwyMDM4NiwyMDIyNywxNTAwMzAsMTQ3MDgyLDIw''@;'; put 'put ''MjkwLDIwNTI2LDIwNTg4LDIwNjA5LDIwNDI4LDIwNDUzLDIwNTY4LDIwNzMyLDIwODI1LDIwODI3LDIwODI5LDIwODMwLDI4Mjc4LDE0NDc4OSwxNDcwMDEsMTQ3MTM1LDI4MDE4LDEzNzM0OCwxNDcwODEsMjA5MDQsMjA5MzEsMTMyNTc2LDE3NjI5LDEzMjI1OSwxMzIyNDIsMTMyMjQxLDM2''@;'; put 'put ''MjE4LDE2NjU1NiwxMzI4NzgsMjEwODEsMjExNTYsMTMzMjM1LDIxMjE3LDM3NzQyLDE4MDQyLDI5MDY4LDE0ODM2NCwxMzQxNzYsMTQ5OTMyLDEzNTM5NiwyNzA4OSwxMzQ2ODUsMjk4MTcsMTYwOTQsMjk4NDksMjk3MTYsMjk3ODIsMjk1OTIsMTkzNDIsMTUwMjA0LDE0NzU5NywyMTQ1Niwx''@;'; put 'put ''MzcwMCwyOTE5OSwxNDc2NTcsMjE5NDAsMTMxOTA5LDIxNzA5LDEzNDA4NiwyMjMwMSwzNzQ2OSwzODY0NCwzNzczNCwyMjQ5MywyMjQxMywyMjM5OSwxMzg4NiwyMjczMSwyMzE5MywxNjY0NzAsMTM2OTU0LDEzNzA3MSwxMzY5NzYsMjMwODQsMjI5NjgsMzc1MTksMjMxNjYsMjMyNDcsMjMw''@;'; put 'put ''NTgsMTUzOTI2LDEzNzcxNSwxMzczMTMsMTQ4MTE3LDE0MDY5LDI3OTA5LDI5NzYzLDIzMDczLDE1NTI2NywyMzE2OSwxNjY4NzEsMTMyMTE1LDM3ODU2LDI5ODM2LDEzNTkzOSwyODkzMywxODgwMiwzNzg5NiwxNjYzOTUsMzc4MjEsMTQyNDAsMjM1ODIsMjM3MTAsMjQxNTgsMjQxMzYsMTM3''@;'; put 'put ''NjIyLDEzNzU5NiwxNDYxNTgsMjQyNjksMjMzNzUsMTM3NDc1LDEzNzQ3NiwxNDA4MSwxMzczNzYsMTQwNDUsMTM2OTU4LDE0MDM1LDMzMDY2LDE2NjQ3MSwxMzg2ODIsMTQ0NDk4LDE2NjMxMiwyNDMzMiwyNDMzNCwxMzc1MTEsMTM3MTMxLDIzMTQ3LDEzNzAxOSwyMzM2NCwzNDMyNCwxNjEy''@;'; put 'put ''NzcsMzQ5MTIsMjQ3MDIsMTQxNDA4LDE0MDg0MywyNDUzOSwxNjA1NiwxNDA3MTksMTQwNzM0LDE2ODA3MiwxNTk2MDMsMjUwMjQsMTMxMTM0LDEzMTE0MiwxNDA4MjcsMjQ5ODUsMjQ5ODQsMjQ2OTMsMTQyNDkxLDE0MjU5OSwxNDkyMDQsMTY4MjY5LDI1NzEzLDE0OTA5MywxNDIxODYsMTQ4''@;'; put 'put ''ODksMTQyMTE0LDE0NDQ2NCwxNzAyMTgsMTQyOTY4LDI1Mzk5LDE3MzE0NywyNTc4MiwyNTM5MywyNTU1MywxNDk5ODcsMTQyNjk1LDI1MjUyLDE0MjQ5NywyNTY1OSwyNTk2MywyNjk5NCwxNTM0OCwxNDM1MDIsMTQ0MDQ1LDE0OTg5NywxNDQwNDMsMjE3NzMsMTQ0MDk2LDEzNzQzMywxNjkw''@;'; put 'put ''MjMsMjYzMTgsMTQ0MDA5LDE0Mzc5NSwxNTA3MiwxNjc4NCwxNTI5NjQsMTY2NjkwLDE1Mjk3NSwxMzY5NTYsMTUyOTIzLDE1MjYxMywzMDk1OCwxNDM2MTksMTM3MjU4LDE0MzkyNCwxMzQxMiwxNDM4ODcsMTQzNzQ2LDE0ODE2OSwyNjI1NCwxNTkwMTIsMjYyMTksMTkzNDcsMjYxNjAsMTYx''@;'; put 'put ''OTA0LDEzODczMSwyNjIxMSwxNDQwODIsMTQ0MDk3LDI2MTQyLDE1MzcxNCwxNDU0NSwxNDU0NjYsMTQ1MzQwLDE1MjU3LDE0NTMxNCwxNDQzODIsMjk5MDQsMTUyNTQsMjY1MTEsMTQ5MDM0LDI2ODA2LDI2NjU0LDE1MzAwLDI3MzI2LDE0NDM1LDE0NTM2NSwxNDg2MTUsMjcxODcsMjcyMTgs''@;'; put 'put ''MjczMzcsMjczOTcsMTM3NDkwLDI1ODczLDI2Nzc2LDI3MjEyLDE1MzE5LDI3MjU4LDI3NDc5LDE0NzM5MiwxNDY1ODYsMzc3OTIsMzc2MTgsMTY2ODkwLDE2NjYwMywzNzUxMywxNjM4NzAsMTY2MzY0LDM3OTkxLDI4MDY5LDI4NDI3LDE0OTk5NiwyODAwNywxNDczMjcsMTU3NTksMjgxNjQs''@;'; put 'put ''MTQ3NTE2LDIzMTAxLDI4MTcwLDIyNTk5LDI3OTQwLDMwNzg2LDI4OTg3LDE0ODI1MCwxNDgwODYsMjg5MTMsMjkyNjQsMjkzMTksMjkzMzIsMTQ5MzkxLDE0OTI4NSwyMDg1NywxNTAxODAsMTMyNTg3LDI5ODE4LDE0NzE5MiwxNDQ5OTEsMTUwMDkwLDE0OTc4MywxNTU2MTcsMTYxMzQsMTYw''@;'; put 'put ''NDksMTUwMjM5LDE2Njk0NywxNDcyNTMsMjQ3NDMsMTYxMTUsMjk5MDAsMjk3NTYsMzc3NjcsMjk3NTEsMTc1NjcsMTU5MjEwLDE3NzQ1LDMwMDgzLDE2MjI3LDE1MDc0NSwxNTA3OTAsMTYyMTYsMzAwMzcsMzAzMjMsMTczNTEwLDE1MTI5LDI5ODAwLDE2NjYwNCwxNDk5MzEsMTQ5OTAyLDE1''@;'; put 'put ''MDk5LDE1ODIxLDE1MDA5NCwxNjEyNywxNDk5NTcsMTQ5NzQ3LDM3MzcwLDIyMzIyLDM3Njk4LDE2NjYyNywxMzczMTYsMjA3MDMsMTUyMDk3LDE1MjAzOSwzMDU4NCwxNDM5MjIsMzA0NzgsMzA0NzksMzA1ODcsMTQ5MTQzLDE0NTI4MSwxNDk0MiwxNDk3NDQsMjk3NTIsMjk4NTEsMTYwNjMs''@;'; put 'put ''MTUwMjAyLDE1MDIxNSwxNjU4NCwxNTAxNjYsMTU2MDc4LDM3NjM5LDE1Mjk2MSwzMDc1MCwzMDg2MSwzMDg1NiwzMDkzMCwyOTY0OCwzMTA2NSwxNjE2MDEsMTUzMzE1LDE2NjU0LDMxMTMxLDMzOTQyLDMxMTQxLDI3MTgxLDE0NzE5NCwzMTI5MCwzMTIyMCwxNjc1MCwxMzY5MzQsMTY2OTAs''@;'; put 'put ''Mzc0MjksMzEyMTcsMTM0NDc2LDE0OTkwMCwxMzE3MzcsMTQ2ODc0LDEzNzA3MCwxMzcxOSwyMTg2NywxMzY4MCwxMzk5NCwxMzE1NDAsMTM0MTU3LDMxNDU4LDIzMTI5LDE0MTA0NSwxNTQyODcsMTU0MjY4LDIzMDUzLDEzMTY3NSwzMDk2MCwyMzA4MiwxNTQ1NjYsMzE0ODYsMTY4ODksMzE4''@;'; put 'put ''MzcsMzE4NTMsMTY5MTMsMTU0NTQ3LDE1NTMyNCwxNTUzMDIsMzE5NDksMTUwMDA5LDEzNzEzNiwzMTg4NiwzMTg2OCwzMTkxOCwyNzMxNCwzMjIyMCwzMjI2MywzMjIxMSwzMjU5MCwxNTYyNTcsMTU1OTk2LDE2MjYzMiwzMjE1MSwxNTUyNjYsMTcwMDIsMTU4NTgxLDEzMzM5OCwyNjU4Miwx''@;'; put 'put ''MzExNTAsMTQ0ODQ3LDIyNDY4LDE1NjY5MCwxNTY2NjQsMTQ5ODU4LDMyNzMzLDMxNTI3LDEzMzE2NCwxNTQzNDUsMTU0OTQ3LDMxNTAwLDE1NTE1MCwzOTM5OCwzNDM3MywzOTUyMywyNzE2NCwxNDQ0NDcsMTQ4MTgsMTUwMDA3LDE1NzEwMSwzOTQ1NSwxNTcwODgsMzM5MjAsMTYwMDM5LDE1''@;'; put 'put ''ODkyOSwxNzY0MiwzMzA3OSwxNzQxMCwzMjk2NiwzMzAzMywzMzA5MCwxNTc2MjAsMzkxMDcsMTU4Mjc0LDMzMzc4LDMzMzgxLDE1ODI4OSwzMzg3NSwxNTkxNDMsMzQzMjAsMTYwMjgzLDIzMTc0LDE2NzY3LDEzNzI4MCwyMzMzOSwxMzczNzcsMjMyNjgsMTM3NDMyLDM0NDY0LDE5NTAwNCwx''@;'; put 'put ''NDY4MzEsMzQ4NjEsMTYwODAyLDIzMDQyLDM0OTI2LDIwMjkzLDM0OTUxLDM1MDA3LDM1MDQ2LDM1MTczLDM1MTQ5LDE1MzIxOSwzNTE1NiwxNjE2NjksMTYxNjY4LDE2NjkwMSwxNjY4NzMsMTY2ODEyLDE2NjM5MywxNjA0NSwzMzk1NSwxODE2NSwxODEyNywxNDMyMiwzNTM4OSwzNTM1Niwx''@;'; put 'put ''NjkwMzIsMjQzOTcsMzc0MTksMTQ4MTAwLDI2MDY4LDI4OTY5LDI4ODY4LDEzNzI4NSw0MDMwMSwzNTk5OSwzNjA3MywxNjMyOTIsMjI5MzgsMzA2NTksMjMwMjQsMTcyNjIsMTQwMzYsMzYzOTQsMzY1MTksMTUwNTM3LDM2NjU2LDM2NjgyLDE3MTQwLDI3NzM2LDI4NjAzLDE0MDA2NSwxODU4''@;'; put 'put ''NywyODUzNywyODI5OSwxMzcxNzgsMzk5MTMsMTQwMDUsMTQ5ODA3LDM3MDUxLDM3MDE1LDIxODczLDE4Njk0LDM3MzA3LDM3ODkyLDE2NjQ3NSwxNjQ4MiwxNjY2NTIsMzc5MjcsMTY2OTQxLDE2Njk3MSwzNDAyMSwzNTM3MSwzODI5NywzODMxMSwzODI5NSwzODI5NCwxNjcyMjAsMjk3NjUs''@;'; put 'put ''MTYwNjYsMTQ5NzU5LDE1MDA4MiwxNDg0NTgsMTYxMDMsMTQzOTA5LDM4NTQzLDE2NzY1NSwxNjc1MjYsMTY3NTI1LDE2MDc2LDE0OTk5NywxNTAxMzYsMTQ3NDM4LDI5NzE0LDI5ODAzLDE2MTI0LDM4NzIxLDE2ODExMiwyNjY5NSwxODk3MywxNjgwODMsMTUzNTY3LDM4NzQ5LDM3NzM2LDE2''@;'; put 'put ''NjI4MSwxNjY5NTAsMTY2NzAzLDE1NjYwNiwzNzU2MiwyMzMxMywzNTY4OSwxODc0OCwyOTY4OSwxNDc5OTUsMzg4MTEsMzg3NjksMzkyMjQsMTM0OTUwLDI0MDAxLDE2Njg1MywxNTAxOTQsMzg5NDMsMTY5MTc4LDM3NjIyLDE2OTQzMSwzNzM0OSwxNzYwMCwxNjY3MzYsMTUwMTE5LDE2Njc1''@;'; put 'put ''NiwzOTEzMiwxNjY0NjksMTYxMjgsMzc0MTgsMTg3MjUsMzM4MTIsMzkyMjcsMzkyNDUsMTYyNTY2LDE1ODY5LDM5MzIzLDE5MzExLDM5MzM4LDM5NTE2LDE2Njc1NywxNTM4MDAsMjcyNzksMzk0NTcsMjMyOTQsMzk0NzEsMTcwMjI1LDE5MzQ0LDE3MDMxMiwzOTM1NiwxOTM4OSwxOTM1MSwz''@;'; put 'put ''Nzc1NywyMjY0MiwxMzU5MzgsMjI1NjIsMTQ5OTQ0LDEzNjQyNCwzMDc4OCwxNDEwODcsMTQ2ODcyLDI2ODIxLDE1NzQxLDM3OTc2LDE0NjMxLDI0OTEyLDE0MTE4NSwxNDE2NzUsMjQ4MzksNDAwMTUsNDAwMTksNDAwNTksMzk5ODksMzk5NTIsMzk4MDcsMzk4ODcsMTcxNTY1LDM5ODM5LDE3''@;'; put 'put ''MjUzMywxNzIyODYsNDAyMjUsMTk2MzAsMTQ3NzE2LDQwNDcyLDE5NjMyLDQwMjA0LDE3MjQ2OCwxNzIyNjksMTcyMjc1LDE3MDI4Nyw0MDM1NywzMzk4MSwxNTkyNTAsMTU5NzExLDE1ODU5NCwzNDMwMCwxNzcxNSwxNTkxNDAsMTU5MzY0LDE1OTIxNiwzMzgyNCwzNDI4NiwxNTkyMzIsMTQ1''@;'; put 'put ''MzY3LDE1NTc0OCwzMTIwMiwxNDQ3OTYsMTQ0OTYwLDE4NzMzLDE0OTk4MiwxNTcxNCwzNzg1MSwzNzU2NiwzNzcwNCwxMzE3NzUsMzA5MDUsMzc0OTUsMzc5NjUsMjA0NTIsMTMzNzYsMzY5NjQsMTUyOTI1LDMwNzgxLDMwODA0LDMwOTAyLDMwNzk1LDEzNzA0NywxNDM4MTcsMTQ5ODI1LDEz''@;'; put 'put ''OTc4LDIwMzM4LDI4NjM0LDI4NjMzLDI4NzAyLDI4NzAyLDIxNTI0LDE0Nzg5MywyMjQ1OSwyMjc3MSwyMjQxMCw0MDIxNCwyMjQ4NywyODk4MCwxMzQ4NywxNDc4ODQsMjkxNjMsMTU4Nzg0LDE1MTQ0NywyMzMzNiwxMzcxNDEsMTY2NDczLDI0ODQ0LDIzMjQ2LDIzMDUxLDE3MDg0LDE0ODYx''@;'; put 'put ''NiwxNDEyNCwxOTMyMywxNjYzOTYsMzc4MTksMzc4MTYsMTM3NDMwLDEzNDk0MSwzMzkwNiwxNTg5MTIsMTM2MjExLDE0ODIxOCwxNDIzNzQsMTQ4NDE3LDIyOTMyLDE0Njg3MSwxNTc1MDUsMzIxNjgsMTU1OTk1LDE1NTgxMiwxNDk5NDUsMTQ5ODk5LDE2NjM5NCwzNzYwNSwyOTY2NiwxNjEw''@;'; put 'put ''NSwyOTg3NiwxNjY3NTUsMTM3Mzc1LDE2MDk3LDE1MDE5NSwyNzM1MiwyOTY4MywyOTY5MSwxNjA4NiwxNTAwNzgsMTUwMTY0LDEzNzE3NywxNTAxMTgsMTMyMDA3LDEzNjIyOCwxNDk5ODksMjk3NjgsMTQ5NzgyLDI4ODM3LDE0OTg3OCwzNzUwOCwyOTY3MCwzNzcyNywxMzIzNTAsMzc2ODEs''@;'; put 'put ''MTY2NjA2LDE2NjQyMiwzNzc2NiwxNjY4ODcsMTUzMDQ1LDE4NzQxLDE2NjUzMCwyOTAzNSwxNDk4MjcsMTM0Mzk5LDIyMTgwLDEzMjYzNCwxMzQxMjMsMTM0MzI4LDIxNzYyLDMxMTcyLDEzNzIxMCwzMjI1NCwxMzY4OTgsMTUwMDk2LDEzNzI5OCwxNzcxMCwzNzg4OSwxNDA5MCwxNjY1OTIs''@;'; put 'put ''MTQ5OTMzLDIyOTYwLDEzNzQwNywxMzczNDcsMTYwOTAwLDIzMjAxLDE0MDUwLDE0Njc3OSwxNGUzLDM3NDcxLDIzMTYxLDE2NjUyOSwxMzczMTQsMzc3NDgsMTU1NjUsMTMzODEyLDE5MDk0LDE0NzMwLDIwNzI0LDE1NzIxLDE1NjkyLDEzNjA5MiwyOTA0NSwxNzE0NywxNjQzNzYsMjgxNzUs''@;'; put 'put ''MTY4MTY0LDE3NjQzLDI3OTkxLDE2MzQwNywyODc3NSwyNzgyMywxNTU3NCwxNDc0MzcsMTQ2OTg5LDI4MTYyLDI4NDI4LDE1NzI3LDEzMjA4NSwzMDAzMywxNDAxMiwxMzUxMiwxODA0OCwxNjA5MCwxODU0NSwyMjk4MCwzNzQ4NiwxODc1MCwzNjY3MywxNjY5NDAsMTU4NjU2LDIyNTQ2LDIy''@;'; put 'put ''NDcyLDE0MDM4LDEzNjI3NCwyODkyNiwxNDgzMjIsMTUwMTI5LDE0MzMzMSwxMzU4NTYsMTQwMjIxLDI2ODA5LDI2OTgzLDEzNjA4OCwxNDQ2MTMsMTYyODA0LDE0NTExOSwxNjY1MzEsMTQ1MzY2LDE0NDM3OCwxNTA2ODcsMjcxNjIsMTQ1MDY5LDE1ODkwMywzMzg1NCwxNzYzMSwxNzYxNCwx''@;'; put 'put ''NTkwMTQsMTU5MDU3LDE1ODg1MCwxNTk3MTAsMjg0MzksMTYwMDA5LDMzNTk3LDEzNzAxOCwzMzc3MywxNTg4NDgsMTU5ODI3LDEzNzE3OSwyMjkyMSwyMzE3MCwxMzcxMzksMjMxMzcsMjMxNTMsMTM3NDc3LDE0Nzk2NCwxNDEyNSwyMzAyMywxMzcwMjAsMTQwMjMsMjkwNzAsMzc3NzYsMjYy''@;'; put 'put ''NjYsMTQ4MTMzLDIzMTUwLDIzMDgzLDE0ODExNSwyNzE3OSwxNDcxOTMsMTYxNTkwLDE0ODU3MSwxNDgxNzAsMjg5NTcsMTQ4MDU3LDE2NjM2OSwyMDQwMCwxNTkwMTYsMjM3NDYsMTQ4Njg2LDE2MzQwNSwxNDg0MTMsMjcxNDgsMTQ4MDU0LDEzNTk0MCwyODgzOCwyODk3OSwxNDg0NTcsMTU3''@;'; put 'put ''ODEsMjc4NzEsMTk0NTk3LDE1MDA5NSwzMjM1NywyMzAxOSwyMzg1NSwxNTg1OSwyNDQxMiwxNTAxMDksMTM3MTgzLDMyMTY0LDMzODMwLDIxNjM3LDE0NjE3MCwxNDQxMjgsMTMxNjA0LDIyMzk4LDEzMzMzMywxMzI2MzMsMTYzNTcsMTM5MTY2LDE3MjcyNiwyODY3NSwxNjgyODMsMjM5MjAs''@;'; put 'put ''Mjk1ODMsMzE5NTUsMTY2NDg5LDE2ODk5MiwyMDQyNCwzMjc0MywyOTM4OSwyOTQ1NiwxNjI1NDgsMjk0OTYsMjk0OTcsMTUzMzM0LDI5NTA1LDI5NTEyLDE2MDQxLDE2MjU4NCwzNjk3MiwyOTE3MywxNDk3NDYsMjk2NjUsMzMyNzAsMTYwNzQsMzA0NzYsMTYwODEsMjc4MTAsMjIyNjksMjk3''@;'; put 'put ''MjEsMjk3MjYsMjk3MjcsMTYwOTgsMTYxMTIsMTYxMTYsMTYxMjIsMjk5MDcsMTYxNDIsMTYyMTEsMzAwMTgsMzAwNjEsMzAwNjYsMzAwOTMsMTYyNTIsMzAxNTIsMzAxNzIsMTYzMjAsMzAyODUsMTYzNDMsMzAzMjQsMTYzNDgsMzAzMzAsMTUxMzg4LDI5MDY0LDIyMDUxLDM1MjAwLDIyNjMz''@;'; put 'put ''LDE2NDEzLDMwNTMxLDE2NDQxLDI2NDY1LDE2NDUzLDEzNzg3LDMwNjE2LDE2NDkwLDE2NDk1LDIzNjQ2LDMwNjU0LDMwNjY3LDIyNzcwLDMwNzQ0LDI4ODU3LDMwNzQ4LDE2NTUyLDMwNzc3LDMwNzkxLDMwODAxLDMwODIyLDMzODY0LDE1Mjg4NSwzMTAyNywyNjYyNywzMTAyNiwxNjY0Mywx''@;'; put 'put ''NjY0OSwzMTEyMSwzMTEyOSwzNjc5NSwzMTIzOCwzNjc5NiwxNjc0MywzMTM3NywxNjgxOCwzMTQyMCwzMzQwMSwxNjgzNiwzMTQzOSwzMTQ1MSwxNjg0NywyMDAwMSwzMTU4NiwzMTU5NiwzMTYxMSwzMTc2MiwzMTc3MSwxNjk5MiwxNzAxOCwzMTg2NywzMTkwMCwxNzAzNiwzMTkyOCwxNzA0''@;'; put 'put ''NCwzMTk4MSwzNjc1NSwyODg2NCwxMzQzNTEsMzIyMDcsMzIyMTIsMzIyMDgsMzIyNTMsMzI2ODYsMzI2OTIsMjkzNDMsMTczMDMsMzI4MDAsMzI4MDUsMzE1NDUsMzI4MTQsMzI4MTcsMzI4NTIsMTU4MjAsMjI0NTIsMjg4MzIsMzI5NTEsMzMwMDEsMTczODksMzMwMzYsMjk0ODIsMzMwMzgs''@;'; put 'put ''MzMwNDIsMzAwNDgsMzMwNDQsMTc0MDksMTUxNjEsMzMxMTAsMzMxMTMsMzMxMTQsMTc0MjcsMjI1ODYsMzMxNDgsMzMxNTYsMTc0NDUsMzMxNzEsMTc0NTMsMzMxODksMjI1MTEsMzMyMTcsMzMyNTIsMzMzNjQsMTc1NTEsMzM0NDYsMzMzOTgsMzM0ODIsMzM0OTYsMzM1MzUsMTc1ODQsMzM2''@;'; put 'put ''MjMsMzg1MDUsMjcwMTgsMzM3OTcsMjg5MTcsMzM4OTIsMjQ4MDMsMzM5MjgsMTc2NjgsMzM5ODIsMzQwMTcsMzQwNDAsMzQwNjQsMzQxMDQsMzQxMzAsMTc3MjMsMzQxNTksMzQxNjAsMzQyNzIsMTc3ODMsMzQ0MTgsMzQ0NTAsMzQ0ODIsMzQ1NDMsMzg0NjksMzQ2OTksMTc5MjYsMTc5NDMs''@;'; put 'put ''MzQ5OTAsMzUwNzEsMzUxMDgsMzUxNDMsMzUyMTcsMTYyMTUxLDM1MzY5LDM1Mzg0LDM1NDc2LDM1NTA4LDM1OTIxLDM2MDUyLDM2MDgyLDM2MTI0LDE4MzI4LDIyNjIzLDM2MjkxLDE4NDEzLDIwMjA2LDM2NDEwLDIxOTc2LDIyMzU2LDM2NDY1LDIyMDA1LDM2NTI4LDE4NDg3LDM2NTU4LDM2''@;'; put 'put ''NTc4LDM2NTgwLDM2NTg5LDM2NTk0LDM2NzkxLDM2ODAxLDM2ODEwLDM2ODEyLDM2OTE1LDM5MzY0LDE4NjA1LDM5MTM2LDM3Mzk1LDE4NzE4LDM3NDE2LDM3NDY0LDM3NDgzLDM3NTUzLDM3NTUwLDM3NTY3LDM3NjAzLDM3NjExLDM3NjE5LDM3NjIwLDM3NjI5LDM3Njk5LDM3NzY0LDM3ODA1''@;'; put 'put ''LDE4NzU3LDE4NzY5LDQwNjM5LDM3OTExLDIxMjQ5LDM3OTE3LDM3OTMzLDM3OTUwLDE4Nzk0LDM3OTcyLDM4MDA5LDM4MTg5LDM4MzA2LDE4ODU1LDM4Mzg4LDM4NDUxLDE4OTE3LDI2NTI4LDE4OTgwLDM4NzIwLDE4OTk3LDM4ODM0LDM4ODUwLDIyMTAwLDE5MTcyLDI0ODA4LDM5MDk3LDE5''@;'; put 'put ''MjI1LDM5MTUzLDIyNTk2LDM5MTgyLDM5MTkzLDIwOTE2LDM5MTk2LDM5MjIzLDM5MjM0LDM5MjYxLDM5MjY2LDE5MzEyLDM5MzY1LDE5MzU3LDM5NDg0LDM5Njk1LDMxMzYzLDM5Nzg1LDM5ODA5LDM5OTAxLDM5OTIxLDM5OTI0LDE5NTY1LDM5OTY4LDE0MTkxLDEzODE3OCw0MDI2NSwzOTk5''@;'; put 'put ''NCw0MDcwMiwyMjA5Niw0MDMzOSw0MDM4MSw0MDM4NCw0MDQ0NCwzODEzNCwzNjc5MCw0MDU3MSw0MDYyMCw0MDYyNSw0MDYzNyw0MDY0NiwzODEwOCw0MDY3NCw0MDY4OSw0MDY5NiwzMTQzMiw0MDc3MiwxMzEyMjAsMTMxNzY3LDEzMmUzLDI2OTA2LDM4MDgzLDIyOTU2LDEzMjMxMSwyMjU5''@;'; put 'put ''MiwzODA4MSwxNDI2NSwxMzI1NjUsMTMyNjI5LDEzMjcyNiwxMzY4OTAsMjIzNTksMjkwNDMsMTMzODI2LDEzMzgzNywxMzQwNzksMjE2MTAsMTk0NjE5LDEzNDA5MSwyMTY2MiwxMzQxMzksMTM0MjAzLDEzNDIyNywxMzQyNDUsMTM0MjY4LDI0ODA3LDEzNDI4NSwyMjEzOCwxMzQzMjUsMTM0''@;'; put 'put ''MzY1LDEzNDM4MSwxMzQ1MTEsMTM0NTc4LDEzNDYwMCwyNjk2NSwzOTk4MywzNDcyNSwxMzQ2NjAsMTM0NjcwLDEzNDg3MSwxMzUwNTYsMTM0OTU3LDEzNDc3MSwyMzU4NCwxMzUxMDAsMjQwNzUsMTM1MjYwLDEzNTI0NywxMzUyODYsMjYzOTgsMTM1MjkxLDEzNTMwNCwxMzUzMTgsMTM4OTUs''@;'; put 'put ''MTM1MzU5LDEzNTM3OSwxMzU0NzEsMTM1NDgzLDIxMzQ4LDMzOTY1LDEzNTkwNywxMzYwNTMsMTM1OTkwLDM1NzEzLDEzNjU2NywxMzY3MjksMTM3MTU1LDEzNzE1OSwyMDA4OCwyODg1OSwxMzcyNjEsMTM3NTc4LDEzNzc3MywxMzc3OTcsMTM4MjgyLDEzODM1MiwxMzg0MTIsMTM4OTUyLDI1''@;'; put 'put ''MjgzLDEzODk2NSwxMzkwMjksMjkwODAsMjY3MDksMTM5MzMzLDI3MTEzLDE0MDI0LDEzOTkwMCwxNDAyNDcsMTQwMjgyLDE0MTA5OCwxNDE0MjUsMTQxNjQ3LDMzNTMzLDE0MTY3MSwxNDE3MTUsMTQyMDM3LDM1MjM3LDE0MjA1NiwzNjc2OCwxNDIwOTQsMzg4NDAsMTQyMTQzLDM4OTgzLDM5''@;'; put 'put ''NjEzLDE0MjQxMixudWxsLDE0MjQ3MiwxNDI1MTksMTU0NjAwLDE0MjYwMCwxNDI2MTAsMTQyNzc1LDE0Mjc0MSwxNDI5MTQsMTQzMjIwLDE0MzMwOCwxNDM0MTEsMTQzNDYyLDE0NDE1OSwxNDQzNTAsMjQ0OTcsMjYxODQsMjYzMDMsMTYyNDI1LDE0NDc0MywxNDQ4ODMsMjkxODUsMTQ5OTQ2''@;'; put 'put ''LDMwNjc5LDE0NDkyMiwxNDUxNzQsMzIzOTEsMTMxOTEwLDIyNzA5LDI2MzgyLDI2OTA0LDE0NjA4NywxNjEzNjcsMTU1NjE4LDE0Njk2MSwxNDcxMjksMTYxMjc4LDEzOTQxOCwxODY0MCwxOTEyOCwxNDc3MzcsMTY2NTU0LDE0ODIwNiwxNDgyMzcsMTQ3NTE1LDE0ODI3NiwxNDgzNzQsMTUw''@;'; put 'put ''MDg1LDEzMjU1NCwyMDk0NiwxMzI2MjUsMjI5NDMsMTM4OTIwLDE1Mjk0LDE0NjY4NywxNDg0ODQsMTQ4Njk0LDIyNDA4LDE0OTEwOCwxNDc0NywxNDkyOTUsMTY1MzUyLDE3MDQ0MSwxNDE3OCwxMzk3MTUsMzU2NzgsMTY2NzM0LDM5MzgyLDE0OTUyMiwxNDk3NTUsMTUwMDM3LDI5MTkzLDE1''@;'; put 'put ''MDIwOCwxMzQyNjQsMjI4ODUsMTUxMjA1LDE1MTQzMCwxMzI5ODUsMzY1NzAsMTUxNTk2LDIxMTM1LDIyMzM1LDI5MDQxLDE1MjIxNywxNTI2MDEsMTQ3Mjc0LDE1MDE4MywyMTk0OCwxNTI2NDYsMTUyNjg2LDE1ODU0NiwzNzMzMiwxMzQyNywxNTI4OTUsMTYxMzMwLDE1MjkyNiwxODIwMCwx''@;'; put 'put ''NTI5MzAsMTUyOTM0LDE1MzU0MywxNDk4MjMsMTUzNjkzLDIwNTgyLDEzNTYzLDE0NDMzMiwyNDc5OCwxNTM4NTksMTgzMDAsMTY2MjE2LDE1NDI4NiwxNTQ1MDUsMTU0NjMwLDEzODY0MCwyMjQzMywyOTAwOSwyODU5OCwxNTU5MDYsMTYyODM0LDM2OTUwLDE1NjA4MiwxNTE0NTAsMzU2ODIs''@;'; put 'put ''MTU2Njc0LDE1Njc0NiwyMzg5OSwxNTg3MTEsMzY2NjIsMTU2ODA0LDEzNzUwMCwzNTU2MiwxNTAwMDYsMTU2ODA4LDE0NzQzOSwxNTY5NDYsMTkzOTIsMTU3MTE5LDE1NzM2NSwxNDEwODMsMzc5ODksMTUzNTY5LDI0OTgxLDIzMDc5LDE5NDc2NSwyMDQxMSwyMjIwMSwxNDg3NjksMTU3NDM2''@;'; put 'put ''LDIwMDc0LDE0OTgxMiwzODQ4NiwyODA0NywxNTg5MDksMTM4NDgsMzUxOTEsMTU3NTkzLDE1NzgwNiwxNTY2ODksMTU3NzkwLDI5MTUxLDE1Nzg5NSwzMTU1NCwxNjgxMjgsMTMzNjQ5LDE1Nzk5MCwzNzEyNCwxNTgwMDksMzEzMDEsNDA0MzIsMTU4MjAyLDM5NDYyLDE1ODI1MywxMzkxOSwx''@;'; put 'put ''NTY3NzcsMTMxMTA1LDMxMTA3LDE1ODI2MCwxNTg1NTUsMjM4NTIsMTQ0NjY1LDMzNzQzLDE1ODYyMSwxODEyOCwxNTg4ODQsMzAwMTEsMzQ5MTcsMTU5MTUwLDIyNzEwLDE0MTA4LDE0MDY4NSwxNTk4MTksMTYwMjA1LDE1NDQ0LDE2MDM4NCwxNjAzODksMzc1MDUsMTM5NjQyLDE2MDM5NSwz''@;'; put 'put ''NzY4MCwxNjA0ODYsMTQ5OTY4LDI3NzA1LDM4MDQ3LDE2MDg0OCwxMzQ5MDQsMzQ4NTUsMzUwNjEsMTQxNjA2LDE2NDk3OSwxMzcxMzcsMjgzNDQsMTUwMDU4LDEzNzI0OCwxNDc1NiwxNDAwOSwyMzU2OCwzMTIwMywxNzcyNywyNjI5NCwxNzExODEsMTcwMTQ4LDM1MTM5LDE2MTc0MCwxNjE4''@;'; put 'put ''ODAsMjIyMzAsMTY2MDcsMTM2NzE0LDE0NzUzLDE0NTE5OSwxNjQwNzIsMTM2MTMzLDI5MTAxLDMzNjM4LDE2MjI2OSwxNjgzNjAsMjMxNDMsMTk2MzksMTU5OTE5LDE2NjMxNSwxNjIzMDEsMTYyMzE0LDE2MjU3MSwxNjMxNzQsMTQ3ODM0LDMxNTU1LDMxMTAyLDE2Mzg0OSwyODU5NywxNzI3''@;'; put 'put ''NjcsMjcxMzksMTY0NjMyLDIxNDEwLDE1OTIzOSwzNzgyMywyNjY3OCwzODc0OSwxNjQyMDcsMTYzODc1LDE1ODEzMywxMzYxNzMsMTQzOTE5LDE2MzkxMiwyMzk0MSwxNjY5NjAsMTYzOTcxLDIyMjkzLDM4OTQ3LDE2NjIxNywyMzk3OSwxNDk4OTYsMjYwNDYsMjcwOTMsMjE0NTgsMTUwMTgx''@;'; put 'put ''LDE0NzMyOSwxNTM3NywyNjQyMiwxNjM5ODQsMTY0MDg0LDE2NDE0MiwxMzkxNjksMTY0MTc1LDE2NDIzMywxNjQyNzEsMTY0Mzc4LDE2NDYxNCwxNjQ2NTUsMTY0NzQ2LDEzNzcwLDE2NDk2OCwxNjU1NDYsMTg2ODIsMjU1NzQsMTY2MjMwLDMwNzI4LDM3NDYxLDE2NjMyOCwxNzM5NCwxNjYz''@;'; put 'put ''NzUsMTczNzUsMTY2Mzc2LDE2NjcyNiwxNjY4NjgsMjMwMzIsMTY2OTIxLDM2NjE5LDE2Nzg3NywxNjgxNzIsMzE1NjksMTY4MjA4LDE2ODI1MiwxNTg2MywxNjgyODYsMTUwMjE4LDM2ODE2LDI5MzI3LDIyMTU1LDE2OTE5MSwxNjk0NDksMTY5MzkyLDE2OTQwMCwxNjk3NzgsMTcwMTkzLDE3''@;'; put 'put ''MDMxMywxNzAzNDYsMTcwNDM1LDE3MDUzNiwxNzA3NjYsMTcxMzU0LDE3MTQxOSwzMjQxNSwxNzE3NjgsMTcxODExLDE5NjIwLDM4MjE1LDE3MjY5MSwyOTA5MCwxNzI3OTksMTk4NTcsMzY4ODIsMTczNTE1LDE5ODY4LDEzNDMwMCwzNjc5OCwyMTk1MywzNjc5NCwxNDA0NjQsMzY3OTMsMTUw''@;'; put 'put ''MTYzLDE3NjczLDMyMzgzLDI4NTAyLDI3MzEzLDIwMjAyLDEzNTQwLDE2NjcwMCwxNjE5NDksMTQxMzgsMzY0ODAsMTM3MjA1LDE2Mzg3NiwxNjY3NjQsMTY2ODA5LDE2MjM2NiwxNTczNTksMTU4NTEsMTYxMzY1LDE0NjYxNSwxNTMxNDEsMTUzOTQyLDIwMTIyLDE1NTI2NSwxNTYyNDgsMjIy''@;'; put 'put ''MDcsMTM0NzY1LDM2MzY2LDIzNDA1LDE0NzA4MCwxNTA2ODYsMjU1NjYsMjUyOTYsMTM3MjA2LDEzNzMzOSwyNTkwNCwyMjA2MSwxNTQ2OTgsMjE1MzAsMTUyMzM3LDE1ODE0LDE3MTQxNiwxOTU4MSwyMjA1MCwyMjA0NiwzMjU4NSwxNTUzNTIsMjI5MDEsMTQ2NzUyLDM0NjcyLDE5OTk2LDEz''@;'; put 'put ''NTE0NiwxMzQ0NzMsMTQ1MDgyLDMzMDQ3LDQwMjg2LDM2MTIwLDMwMjY3LDQwMDA1LDMwMjg2LDMwNjQ5LDM3NzAxLDIxNTU0LDMzMDk2LDMzNTI3LDIyMDUzLDMzMDc0LDMzODE2LDMyOTU3LDIxOTk0LDMxMDc0LDIyMDgzLDIxNTI2LDEzNDgxMywxMzc3NCwyMjAyMSwyMjAwMSwyNjM1Mywx''@;'; put 'put ''NjQ1NzgsMTM4NjksMzAwMDQsMjJlMywyMTk0NiwyMTY1NSwyMTg3NCwxMzQyMDksMTM0Mjk0LDI0MjcyLDE1MTg4MCwxMzQ3NzQsMTQyNDM0LDEzNDgxOCw0MDYxOSwzMjA5MCwyMTk4MiwxMzUyODUsMjUyNDUsMzg3NjUsMjE2NTIsMzYwNDUsMjkxNzQsMzcyMzgsMjU1OTYsMjU1MjksMjU1''@;'; put 'put ''OTgsMjE4NjUsMTQyMTQ3LDQwMDUwLDE0MzAyNywyMDg5MCwxMzUzNSwxMzQ1NjcsMjA5MDMsMjE1ODEsMjE3OTAsMjE3NzksMzAzMTAsMzYzOTcsMTU3ODM0LDMwMTI5LDMyOTUwLDM0ODIwLDM0Njk0LDM1MDE1LDMzMjA2LDMzODIwLDEzNTM2MSwxNzY0NCwyOTQ0NCwxNDkyNTQsMjM0NDAs''@;'; put 'put ''MzM1NDcsMTU3ODQzLDIyMTM5LDE0MTA0NCwxNjMxMTksMTQ3ODc1LDE2MzE4NywxNTk0NDAsMTYwNDM4LDM3MjMyLDEzNTY0MSwzNzM4NCwxNDY2ODQsMTczNzM3LDEzNDgyOCwxMzQ5MDUsMjkyODYsMTM4NDAyLDE4MjU0LDE1MTQ5MCwxNjM4MzMsMTM1MTQ3LDE2NjM0LDQwMDI5LDI1ODg3''@;'; put 'put ''LDE0Mjc1MiwxODY3NSwxNDk0NzIsMTcxMzg4LDEzNTE0OCwxMzQ2NjYsMjQ2NzQsMTYxMTg3LDEzNTE0OSxudWxsLDE1NTcyMCwxMzU1NTksMjkwOTEsMzIzOTgsNDAyNzIsMTk5OTQsMTk5NzIsMTM2ODcsMjMzMDksMjc4MjYsMjEzNTEsMTM5OTYsMTQ4MTIsMjEzNzMsMTM5ODksMTQ5MDE2''@;'; put 'put ''LDIyNjgyLDE1MDM4MiwzMzMyNSwyMTU3OSwyMjQ0MiwxNTQyNjEsMTMzNDk3LG51bGwsMTQ5MzAsMTQwMzg5LDI5NTU2LDE3MTY5MiwxOTcyMSwzOTkxNywxNDY2ODYsMTcxODI0LDE5NTQ3LDE1MTQ2NSwxNjkzNzQsMTcxOTk4LDMzODg0LDE0Njg3MCwxNjA0MzQsMTU3NjE5LDE0NTE4NCwy''@;'; put 'put ''NTM5MCwzMjAzNywxNDcxOTEsMTQ2OTg4LDE0ODkwLDM2ODcyLDIxMTk2LDE1OTg4LDEzOTQ2LDE3ODk3LDEzMjIzOCwzMDI3MiwyMzI4MCwxMzQ4MzgsMzA4NDIsMTYzNjMwLDIyNjk1LDE2NTc1LDIyMTQwLDM5ODE5LDIzOTI0LDMwMjkyLDE3MzEwOCw0MDU4MSwxOTY4MSwzMDIwMSwxNDMz''@;'; put 'put ''MSwyNDg1NywxNDM1NzgsMTQ4NDY2LG51bGwsMjIxMDksMTM1ODQ5LDIyNDM5LDE0OTg1OSwxNzE1MjYsMjEwNDQsMTU5OTE4LDEzNzQxLDI3NzIyLDQwMzE2LDMxODMwLDM5NzM3LDIyNDk0LDEzNzA2OCwyMzYzNSwyNTgxMSwxNjkxNjgsMTU2NDY5LDE2MDEwMCwzNDQ3NywxMzQ0NDAsMTU5''@;'; put 'put ''MDEwLDE1MDI0MiwxMzQ1MTMsbnVsbCwyMDk5MCwxMzkwMjMsMjM5NTAsMzg2NTksMTM4NzA1LDQwNTc3LDM2OTQwLDMxNTE5LDM5NjgyLDIzNzYxLDMxNjUxLDI1MTkyLDI1Mzk3LDM5Njc5LDMxNjk1LDM5NzIyLDMxODcwLDM5NzI2LDMxODEwLDMxODc4LDM5OTU3LDMxNzQwLDM5Njg5LDQw''@;'; put 'put ''NzI3LDM5OTYzLDE0OTgyMiw0MDc5NCwyMTg3NSwyMzQ5MSwyMDQ3Nyw0MDYwMCwyMDQ2NiwyMTA4OCwxNTg3OCwyMTIwMSwyMjM3NSwyMDU2NiwyMjk2NywyNDA4MiwzODg1Niw0MDM2MywzNjcwMCwyMTYwOSwzODgzNiwzOTIzMiwzODg0MiwyMTI5MiwyNDg4MCwyNjkyNCwyMTQ2NiwzOTk0''@;'; put 'put ''Niw0MDE5NCwxOTUxNSwzODQ2NSwyNzAwOCwyMDY0NiwzMDAyMiwxMzcwNjksMzkzODYsMjExMDcsbnVsbCwzNzIwOSwzODUyOSwzNzIxMixudWxsLDM3MjAxLDE2NzU3NSwyNTQ3MSwxNTkwMTEsMjczMzgsMjIwMzMsMzcyNjIsMzAwNzQsMjUyMjEsMTMyMDkyLDI5NTE5LDMxODU2LDE1NDY1''@;'; put 'put ''NywxNDY2ODUsbnVsbCwxNDk3ODUsMzA0MjIsMzk4MzcsMjAwMTAsMTM0MzU2LDMzNzI2LDM0ODgyLG51bGwsMjM2MjYsMjcwNzIsMjA3MTcsMjIzOTQsMjEwMjMsMjQwNTMsMjAxNzQsMjc2OTcsMTMxNTcwLDIwMjgxLDIxNjYwLDIxNzIyLDIxMTQ2LDM2MjI2LDEzODIyLDI0MzMyLDEzODEx''@;'; put 'put ''LG51bGwsMjc0NzQsMzcyNDQsNDA4NjksMzk4MzEsMzg5NTgsMzkwOTIsMzk2MTAsNDA2MTYsNDA1ODAsMjkwNTAsMzE1MDgsbnVsbCwyNzY0MiwzNDg0MCwzMjYzMixudWxsLDIyMDQ4LDE3MzY0MiwzNjQ3MSw0MDc4NyxudWxsLDM2MzA4LDM2NDMxLDQwNDc2LDM2MzUzLDI1MjE4LDE2NDcz''@;'; put 'put ''MywzNjM5MiwzNjQ2OSwzMTQ0MywxNTAxMzUsMzEyOTQsMzA5MzYsMjc4ODIsMzU0MzEsMzAyMTUsMTY2NDkwLDQwNzQyLDI3ODU0LDM0Nzc0LDMwMTQ3LDE3MjcyMiwzMDgwMywxOTQ2MjQsMzYxMDgsMjk0MTAsMjk1NTMsMzU2MjksMjk0NDIsMjk5MzcsMzYwNzUsMTUwMjAzLDM0MzUxLDI0''@;'; put 'put ''NTA2LDM0OTc2LDE3NTkxLG51bGwsMTM3Mjc1LDE1OTIzNyxudWxsLDM1NDU0LDE0MDU3MSxudWxsLDI0ODI5LDMwMzExLDM5NjM5LDQwMjYwLDM3NzQyLDM5ODIzLDM0ODA1LG51bGwsMzQ4MzEsMzYwODcsMjk0ODQsMzg2ODksMzk4NTYsMTM3ODIsMjkzNjIsMTk0NjMsMzE4MjUsMzkyNDIs''@;'; put 'put ''MTU1OTkzLDI0OTIxLDE5NDYwLDQwNTk4LDI0OTU3LG51bGwsMjIzNjcsMjQ5NDMsMjUyNTQsMjUxNDUsMjUyOTQsMTQ5NDAsMjUwNTgsMjE0MTgsMTQ0MzczLDI1NDQ0LDI2NjI2LDEzNzc4LDIzODk1LDE2Njg1MCwzNjgyNiwxNjc0ODEsbnVsbCwyMDY5NywxMzg1NjYsMzA5ODIsMjEyOTgs''@;'; put 'put ''Mzg0NTYsMTM0OTcxLDE2NDg1LG51bGwsMzA3MTgsbnVsbCwzMTkzOCwxNTU0MTgsMzE5NjIsMzEyNzcsMzI4NzAsMzI4NjcsMzIwNzcsMjk5NTcsMjk5MzgsMzUyMjAsMzMzMDYsMjYzODAsMzI4NjYsMTYwOTAyLDMyODU5LDI5OTM2LDMzMDI3LDMwNTAwLDM1MjA5LDE1NzY0NCwzMDAzNSwx''@;'; put 'put ''NTk0NDEsMzQ3MjksMzQ3NjYsMzMyMjQsMzQ3MDAsMzU0MDEsMzYwMTMsMzU2NTEsMzA1MDcsMjk5NDQsMzQwMTAsMTM4NzcsMjcwNTgsMzYyNjIsbnVsbCwzNTI0MSwyOTgwMCwyODA4OSwzNDc1MywxNDc0NzMsMjk5MjcsMTU4MzUsMjkwNDYsMjQ3NDAsMjQ5ODgsMTU1NjksMjkwMjYsMjQ2''@;'; put 'put ''OTUsbnVsbCwzMjYyNSwxNjY3MDEsMjkyNjQsMjQ4MDksMTkzMjYsMjEwMjQsMTUzODQsMTQ2NjMxLDE1NTM1MSwxNjEzNjYsMTUyODgxLDEzNzU0MCwxMzU5MzQsMTcwMjQzLDE1OTE5NiwxNTk5MTcsMjM3NDUsMTU2MDc3LDE2NjQxNSwxNDUwMTUsMTMxMzEwLDE1Nzc2NiwxNTEzMTAsMTc3''@;'; put 'put ''NjIsMjMzMjcsMTU2NDkyLDQwNzg0LDQwNjE0LDE1NjI2NywxMjI4OCw2NTI5MiwxMjI4OSwxMjI5MCw2NTI5NCw4MjMxLDY1MzA3LDY1MzA2LDY1MzExLDY1MjgxLDY1MDcyLDgyMzAsODIyOSw2NTEwNCw2NTEwNSw2NTEwNiwxODMsNjUxMDgsNjUxMDksNjUxMTAsNjUxMTEsNjUzNzIsODIx''@;'; put 'put ''MSw2NTA3Myw4MjEyLDY1MDc1LDk1ODgsNjUwNzYsNjUxMDMsNjUyODgsNjUyODksNjUwNzcsNjUwNzgsNjUzNzEsNjUzNzMsNjUwNzksNjUwODAsMTIzMDgsMTIzMDksNjUwODEsNjUwODIsMTIzMDQsMTIzMDUsNjUwODMsNjUwODQsMTIyOTgsMTIyOTksNjUwODUsNjUwODYsMTIyOTYsMTIy''@;'; put 'put ''OTcsNjUwODcsNjUwODgsMTIzMDAsMTIzMDEsNjUwODksNjUwOTAsMTIzMDIsMTIzMDMsNjUwOTEsNjUwOTIsNjUxMTMsNjUxMTQsNjUxMTUsNjUxMTYsNjUxMTcsNjUxMTgsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMxNywxMjMxOCw4MjQ1LDgyNDIsNjUyODMsNjUyODYsNjUyOTAsODI1MSwx''@;'; put 'put ''NjcsMTIyOTEsOTY3NSw5Njc5LDk2NTEsOTY1MCw5Njc4LDk3MzQsOTczMyw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NjEsOTY2MCwxMjk2Myw4NDUzLDE3NSw2NTUwNyw2NTM0Myw3MTcsNjUwOTcsNjUwOTgsNjUxMDEsNjUxMDIsNjUwOTksNjUxMDAsNjUxMTksNjUxMjAsNjUxMjEsNjUyOTEs''@;'; put 'put ''NjUyOTMsMjE1LDI0NywxNzcsODczMCw2NTMwOCw2NTMxMCw2NTMwOSw4ODA2LDg4MDcsODgwMCw4NzM0LDg3ODYsODgwMSw2NTEyMiw2NTEyMyw2NTEyNCw2NTEyNSw2NTEyNiw2NTM3NCw4NzQ1LDg3NDYsODg2OSw4NzM2LDg3MzUsODg5NSwxMzI2NiwxMzI2NSw4NzQ3LDg3NTAsODc1Nyw4''@;'; put 'put ''NzU2LDk3OTIsOTc5NCw4ODUzLDg4NTcsODU5Myw4NTk1LDg1OTIsODU5NCw4NTk4LDg1OTksODYwMSw4NjAwLDg3NDEsODczOSw2NTI5NSw2NTM0MCw4NzI1LDY1MTI4LDY1Mjg0LDY1NTA5LDEyMzA2LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MzEyLDg0NTEsODQ1Nyw2NTEyOSw2NTEzMCw2NTEz''@;'; put 'put ''MSwxMzI2OSwxMzIxMiwxMzIxMywxMzIxNCwxMzI2MiwxMzIxNywxMzE5OCwxMzE5OSwxMzI1MiwxNzYsMjA4MjUsMjA4MjcsMjA4MzAsMjA4MjksMjA4MzMsMjA4MzUsMjE5OTEsMjk5MjksMzE5NTAsOTYwMSw5NjAyLDk2MDMsOTYwNCw5NjA1LDk2MDYsOTYwNyw5NjA4LDk2MTUsOTYxNCw5''@;'; put 'put ''NjEzLDk2MTIsOTYxMSw5NjEwLDk2MDksOTUzMiw5NTI0LDk1MTYsOTUwOCw5NTAwLDk2MjAsOTQ3Miw5NDc0LDk2MjEsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTgxLDk1ODIsOTU4NCw5NTgzLDk1NTIsOTU2Niw5NTc4LDk1NjksOTY5OCw5Njk5LDk3MDEsOTcwMCw5NTg1LDk1ODYsOTU4Nyw2''@;'; put 'put ''NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDEyMzIxLDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDIx''@;'; put 'put ''MzEzLDIxMzE2LDIxMzE3LDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3''@;'; put 'put ''LDY1MzM4LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDkx''@;'; put 'put ''Myw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYz''@;'; put 'put ''LDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDEyNTQ5LDEyNTUwLDEyNTUxLDEyNTUyLDEyNTUzLDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3LDEyNTU4LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2LDEyNTY3LDEyNTY4LDEyNTY5LDEyNTcwLDEyNTcxLDEy''@;'; put 'put ''NTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEyNTc3LDEyNTc4LDEyNTc5LDEyNTgwLDEyNTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEyNTg1LDcyOSw3MTMsNzE0LDcxMSw3MTUsOTIxNiw5MjE3LDkyMTgsOTIxOSw5MjIwLDkyMjEsOTIyMiw5MjIzLDkyMjQsOTIyNSw5MjI2LDkyMjcsOTIy''@;'; put 'put ''OCw5MjI5LDkyMzAsOTIzMSw5MjMyLDkyMzMsOTIzNCw5MjM1LDkyMzYsOTIzNyw5MjM4LDkyMzksOTI0MCw5MjQxLDkyNDIsOTI0Myw5MjQ0LDkyNDUsOTI0Niw5MjQ3LDkyNDksODM2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk5NjgsMjAwNTcsMTk5NjksMTk5NzEsMjAwMzUsMjAwNjEsMjAxMDIsMjAxMDgsMjAxNTQsMjA3OTksMjA4MzcsMjA4NDMsMjA5NjAs''@;'; put 'put ''MjA5OTIsMjA5OTMsMjExNDcsMjEyNjksMjEzMTMsMjEzNDAsMjE0NDgsMTk5NzcsMTk5NzksMTk5NzYsMTk5NzgsMjAwMTEsMjAwMjQsMjA5NjEsMjAwMzcsMjAwNDAsMjAwNjMsMjAwNjIsMjAxMTAsMjAxMjksMjA4MDAsMjA5OTUsMjEyNDIsMjEzMTUsMjE0NDksMjE0NzUsMjIzMDMsMjI3''@;'; put 'put ''NjMsMjI4MDUsMjI4MjMsMjI4OTksMjMzNzYsMjMzNzcsMjMzNzksMjM1NDQsMjM1NjcsMjM1ODYsMjM2MDgsMjM2NjUsMjQwMjksMjQwMzcsMjQwNDksMjQwNTAsMjQwNTEsMjQwNjIsMjQxNzgsMjQzMTgsMjQzMzEsMjQzMzksMjUxNjUsMTk5ODUsMTk5ODQsMTk5ODEsMjAwMTMsMjAwMTYs''@;'; put 'put ''MjAwMjUsMjAwNDMsMjM2MDksMjAxMDQsMjAxMTMsMjAxMTcsMjAxMTQsMjAxMTYsMjAxMzAsMjAxNjEsMjAxNjAsMjAxNjMsMjAxNjYsMjAxNjcsMjAxNzMsMjAxNzAsMjAxNzEsMjAxNjQsMjA4MDMsMjA4MDEsMjA4MzksMjA4NDUsMjA4NDYsMjA4NDQsMjA4ODcsMjA5ODIsMjA5OTgsMjA5''@;'; put 'put ''OTksMjFlMywyMTI0MywyMTI0NiwyMTI0NywyMTI3MCwyMTMwNSwyMTMyMCwyMTMxOSwyMTMxNywyMTM0MiwyMTM4MCwyMTQ1MSwyMTQ1MCwyMTQ1MywyMjc2NCwyMjgyNSwyMjgyNywyMjgyNiwyMjgyOSwyMzM4MCwyMzU2OSwyMzU4OCwyMzYxMCwyMzY2MywyNDA1MiwyNDE4NywyNDMxOSwy''@;'; put 'put ''NDM0MCwyNDM0MSwyNDUxNSwyNTA5NiwyNTE0MiwyNTE2MywyNTE2NiwyNTkwMywyNTk5MSwyNjAwNywyNjAyMCwyNjA0MSwyNjA4NSwyNjM1MiwyNjM3NiwyNjQwOCwyNzQyNCwyNzQ5MCwyNzUxMywyNzU5NSwyNzYwNCwyNzYxMSwyNzY2MywyNzcwMCwyODc3OSwyOTIyNiwyOTIzOCwyOTI0''@;'; put 'put ''MywyOTI1NSwyOTI3MywyOTI3NSwyOTM1NiwyOTU3OSwxOTk5MywxOTk5MCwxOTk4OSwxOTk4OCwxOTk5MiwyMDAyNywyMDA0NSwyMDA0NywyMDA0NiwyMDE5NywyMDE4NCwyMDE4MCwyMDE4MSwyMDE4MiwyMDE4MywyMDE5NSwyMDE5NiwyMDE4NSwyMDE5MCwyMDgwNSwyMDgwNCwyMDg3Mywy''@;'; put 'put ''MDg3NCwyMDkwOCwyMDk4NSwyMDk4NiwyMDk4NCwyMTAwMiwyMTE1MiwyMTE1MSwyMTI1MywyMTI1NCwyMTI3MSwyMTI3NywyMDE5MSwyMTMyMiwyMTMyMSwyMTM0NSwyMTM0NCwyMTM1OSwyMTM1OCwyMTQzNSwyMTQ4NywyMTQ3NiwyMTQ5MSwyMTQ4NCwyMTQ4NiwyMTQ4MSwyMTQ4MCwyMTUw''@;'; put 'put ''MCwyMTQ5NiwyMTQ5MywyMTQ4MywyMTQ3OCwyMTQ4MiwyMTQ5MCwyMTQ4OSwyMTQ4OCwyMTQ3NywyMTQ4NSwyMTQ5OSwyMjIzNSwyMjIzNCwyMjgwNiwyMjgzMCwyMjgzMywyMjkwMCwyMjkwMiwyMzM4MSwyMzQyNywyMzYxMiwyNDA0MCwyNDAzOSwyNDAzOCwyNDA2NiwyNDA2NywyNDE3OSwy''@;'; put 'put ''NDE4OCwyNDMyMSwyNDM0NCwyNDM0MywyNDUxNywyNTA5OCwyNTE3MSwyNTE3MiwyNTE3MCwyNTE2OSwyNjAyMSwyNjA4NiwyNjQxNCwyNjQxMiwyNjQxMCwyNjQxMSwyNjQxMywyNzQ5MSwyNzU5NywyNzY2NSwyNzY2NCwyNzcwNCwyNzcxMywyNzcxMiwyNzcxMCwyOTM1OSwyOTU3MiwyOTU3''@;'; put 'put ''NywyOTkxNiwyOTkyNiwyOTk3NiwyOTk4MywyOTk5MiwyOTk5MywzZTQsMzAwMDEsMzAwMDIsMzAwMDMsMzAwOTEsMzAzMzMsMzAzODIsMzAzOTksMzA0NDYsMzA2ODMsMzA2OTAsMzA3MDcsMzEwMzQsMzExNjYsMzEzNDgsMzE0MzUsMTk5OTgsMTk5OTksMjAwNTAsMjAwNTEsMjAwNzMsMjAx''@;'; put 'put ''MjEsMjAxMzIsMjAxMzQsMjAxMzMsMjAyMjMsMjAyMzMsMjAyNDksMjAyMzQsMjAyNDUsMjAyMzcsMjAyNDAsMjAyNDEsMjAyMzksMjAyMTAsMjAyMTQsMjAyMTksMjAyMDgsMjAyMTEsMjAyMjEsMjAyMjUsMjAyMzUsMjA4MDksMjA4MDcsMjA4MDYsMjA4MDgsMjA4NDAsMjA4NDksMjA4Nzcs''@;'; put 'put ''MjA5MTIsMjEwMTUsMjEwMDksMjEwMTAsMjEwMDYsMjEwMTQsMjExNTUsMjEyNTYsMjEyODEsMjEyODAsMjEzNjAsMjEzNjEsMjE1MTMsMjE1MTksMjE1MTYsMjE1MTQsMjE1MjAsMjE1MDUsMjE1MTUsMjE1MDgsMjE1MjEsMjE1MTcsMjE1MTIsMjE1MDcsMjE1MTgsMjE1MTAsMjE1MjIsMjIy''@;'; put 'put ''NDAsMjIyMzgsMjIyMzcsMjIzMjMsMjIzMjAsMjIzMTIsMjIzMTcsMjIzMTYsMjIzMTksMjIzMTMsMjI4MDksMjI4MTAsMjI4MzksMjI4NDAsMjI5MTYsMjI5MDQsMjI5MTUsMjI5MDksMjI5MDUsMjI5MTQsMjI5MTMsMjMzODMsMjMzODQsMjM0MzEsMjM0MzIsMjM0MjksMjM0MzMsMjM1NDYs''@;'; put 'put ''MjM1NzQsMjM2NzMsMjQwMzAsMjQwNzAsMjQxODIsMjQxODAsMjQzMzUsMjQzNDcsMjQ1MzcsMjQ1MzQsMjUxMDIsMjUxMDAsMjUxMDEsMjUxMDQsMjUxODcsMjUxNzksMjUxNzYsMjU5MTAsMjYwODksMjYwODgsMjYwOTIsMjYwOTMsMjYzNTQsMjYzNTUsMjYzNzcsMjY0MjksMjY0MjAsMjY0''@;'; put 'put ''MTcsMjY0MjEsMjc0MjUsMjc0OTIsMjc1MTUsMjc2NzAsMjc3NDEsMjc3MzUsMjc3MzcsMjc3NDMsMjc3NDQsMjc3MjgsMjc3MzMsMjc3NDUsMjc3MzksMjc3MjUsMjc3MjYsMjg3ODQsMjkyNzksMjkyNzcsMzAzMzQsMzE0ODEsMzE4NTksMzE5OTIsMzI1NjYsMzI2NTAsMzI3MDEsMzI3Njks''@;'; put 'put ''MzI3NzEsMzI3ODAsMzI3ODYsMzI4MTksMzI4OTUsMzI5MDUsMzI5MDcsMzI5MDgsMzMyNTEsMzMyNTgsMzMyNjcsMzMyNzYsMzMyOTIsMzMzMDcsMzMzMTEsMzMzOTAsMzMzOTQsMzM0MDYsMzQ0MTEsMzQ4ODAsMzQ4OTIsMzQ5MTUsMzUxOTksMzg0MzMsMjAwMTgsMjAxMzYsMjAzMDEsMjAz''@;'; put 'put ''MDMsMjAyOTUsMjAzMTEsMjAzMTgsMjAyNzYsMjAzMTUsMjAzMDksMjAyNzIsMjAzMDQsMjAzMDUsMjAyODUsMjAyODIsMjAyODAsMjAyOTEsMjAzMDgsMjAyODQsMjAyOTQsMjAzMjMsMjAzMTYsMjAzMjAsMjAyNzEsMjAzMDIsMjAyNzgsMjAzMTMsMjAzMTcsMjAyOTYsMjAzMTQsMjA4MTIs''@;'; put 'put ''MjA4MTEsMjA4MTMsMjA4NTMsMjA5MTgsMjA5MTksMjEwMjksMjEwMjgsMjEwMzMsMjEwMzQsMjEwMzIsMjExNjMsMjExNjEsMjExNjIsMjExNjQsMjEyODMsMjEzNjMsMjEzNjUsMjE1MzMsMjE1NDksMjE1MzQsMjE1NjYsMjE1NDIsMjE1ODIsMjE1NDMsMjE1NzQsMjE1NzEsMjE1NTUsMjE1''@;'; put 'put ''NzYsMjE1NzAsMjE1MzEsMjE1NDUsMjE1NzgsMjE1NjEsMjE1NjMsMjE1NjAsMjE1NTAsMjE1NTcsMjE1NTgsMjE1MzYsMjE1NjQsMjE1NjgsMjE1NTMsMjE1NDcsMjE1MzUsMjE1NDgsMjIyNTAsMjIyNTYsMjIyNDQsMjIyNTEsMjIzNDYsMjIzNTMsMjIzMzYsMjIzNDksMjIzNDMsMjIzNTAs''@;'; put 'put ''MjIzMzQsMjIzNTIsMjIzNTEsMjIzMzEsMjI3NjcsMjI4NDYsMjI5NDEsMjI5MzAsMjI5NTIsMjI5NDIsMjI5NDcsMjI5MzcsMjI5MzQsMjI5MjUsMjI5NDgsMjI5MzEsMjI5MjIsMjI5NDksMjMzODksMjMzODgsMjMzODYsMjMzODcsMjM0MzYsMjM0MzUsMjM0MzksMjM1OTYsMjM2MTYsMjM2''@;'; put 'put ''MTcsMjM2MTUsMjM2MTQsMjM2OTYsMjM2OTcsMjM3MDAsMjM2OTIsMjQwNDMsMjQwNzYsMjQyMDcsMjQxOTksMjQyMDIsMjQzMTEsMjQzMjQsMjQzNTEsMjQ0MjAsMjQ0MTgsMjQ0MzksMjQ0NDEsMjQ1MzYsMjQ1MjQsMjQ1MzUsMjQ1MjUsMjQ1NjEsMjQ1NTUsMjQ1NjgsMjQ1NTQsMjUxMDYs''@;'; put 'put ''MjUxMDUsMjUyMjAsMjUyMzksMjUyMzgsMjUyMTYsMjUyMDYsMjUyMjUsMjUxOTcsMjUyMjYsMjUyMTIsMjUyMTQsMjUyMDksMjUyMDMsMjUyMzQsMjUxOTksMjUyNDAsMjUxOTgsMjUyMzcsMjUyMzUsMjUyMzMsMjUyMjIsMjU5MTMsMjU5MTUsMjU5MTIsMjYwOTcsMjYzNTYsMjY0NjMsMjY0''@;'; put 'put ''NDYsMjY0NDcsMjY0NDgsMjY0NDksMjY0NjAsMjY0NTQsMjY0NjIsMjY0NDEsMjY0MzgsMjY0NjQsMjY0NTEsMjY0NTUsMjc0OTMsMjc1OTksMjc3MTQsMjc3NDIsMjc4MDEsMjc3NzcsMjc3ODQsMjc3ODUsMjc3ODEsMjc4MDMsMjc3NTQsMjc3NzAsMjc3OTIsMjc3NjAsMjc3ODgsMjc3NTIs''@;'; put 'put ''Mjc3OTgsMjc3OTQsMjc3NzMsMjc3NzksMjc3NjIsMjc3NzQsMjc3NjQsMjc3ODIsMjc3NjYsMjc3ODksMjc3OTYsMjc4MDAsMjc3NzgsMjg3OTAsMjg3OTYsMjg3OTcsMjg3OTIsMjkyODIsMjkyODEsMjkyODAsMjkzODAsMjkzNzgsMjk1OTAsMjk5OTYsMjk5OTUsMzAwMDcsMzAwMDgsMzAz''@;'; put 'put ''MzgsMzA0NDcsMzA2OTEsMzExNjksMzExNjgsMzExNjcsMzEzNTAsMzE5OTUsMzI1OTcsMzI5MTgsMzI5MTUsMzI5MjUsMzI5MjAsMzI5MjMsMzI5MjIsMzI5NDYsMzMzOTEsMzM0MjYsMzM0MTksMzM0MjEsMzUyMTEsMzUyODIsMzUzMjgsMzU4OTUsMzU5MTAsMzU5MjUsMzU5OTcsMzYxOTYs''@;'; put 'put ''MzYyMDgsMzYyNzUsMzY1MjMsMzY1NTQsMzY3NjMsMzY3ODQsMzY4MDIsMzY4MDYsMzY4MDUsMzY4MDQsMjQwMzMsMzcwMDksMzcwMjYsMzcwMzQsMzcwMzAsMzcwMjcsMzcxOTMsMzczMTgsMzczMjQsMzg0NTAsMzg0NDYsMzg0NDksMzg0NDIsMzg0NDQsMjAwMDYsMjAwNTQsMjAwODMsMjAx''@;'; put 'put ''MDcsMjAxMjMsMjAxMjYsMjAxMzksMjAxNDAsMjAzMzUsMjAzODEsMjAzNjUsMjAzMzksMjAzNTEsMjAzMzIsMjAzNzksMjAzNjMsMjAzNTgsMjAzNTUsMjAzMzYsMjAzNDEsMjAzNjAsMjAzMjksMjAzNDcsMjAzNzQsMjAzNTAsMjAzNjcsMjAzNjksMjAzNDYsMjA4MjAsMjA4MTgsMjA4MjEs''@;'; put 'put ''MjA4NDEsMjA4NTUsMjA4NTQsMjA4NTYsMjA5MjUsMjA5ODksMjEwNTEsMjEwNDgsMjEwNDcsMjEwNTAsMjEwNDAsMjEwMzgsMjEwNDYsMjEwNTcsMjExODIsMjExNzksMjEzMzAsMjEzMzIsMjEzMzEsMjEzMjksMjEzNTAsMjEzNjcsMjEzNjgsMjEzNjksMjE0NjIsMjE0NjAsMjE0NjMsMjE2''@;'; put 'put ''MTksMjE2MjEsMjE2NTQsMjE2MjQsMjE2NTMsMjE2MzIsMjE2MjcsMjE2MjMsMjE2MzYsMjE2NTAsMjE2MzgsMjE2MjgsMjE2NDgsMjE2MTcsMjE2MjIsMjE2NDQsMjE2NTgsMjE2MDIsMjE2MDgsMjE2NDMsMjE2MjksMjE2NDYsMjIyNjYsMjI0MDMsMjIzOTEsMjIzNzgsMjIzNzcsMjIzNjks''@;'; put 'put ''MjIzNzQsMjIzNzIsMjIzOTYsMjI4MTIsMjI4NTcsMjI4NTUsMjI4NTYsMjI4NTIsMjI4NjgsMjI5NzQsMjI5NzEsMjI5OTYsMjI5NjksMjI5NTgsMjI5OTMsMjI5ODIsMjI5OTIsMjI5ODksMjI5ODcsMjI5OTUsMjI5ODYsMjI5NTksMjI5NjMsMjI5OTQsMjI5ODEsMjMzOTEsMjMzOTYsMjMz''@;'; put 'put ''OTUsMjM0NDcsMjM0NTAsMjM0NDgsMjM0NTIsMjM0NDksMjM0NTEsMjM1NzgsMjM2MjQsMjM2MjEsMjM2MjIsMjM3MzUsMjM3MTMsMjM3MzYsMjM3MjEsMjM3MjMsMjM3MjksMjM3MzEsMjQwODgsMjQwOTAsMjQwODYsMjQwODUsMjQwOTEsMjQwODEsMjQxODQsMjQyMTgsMjQyMTUsMjQyMjAs''@;'; put 'put ''MjQyMTMsMjQyMTQsMjQzMTAsMjQzNTgsMjQzNTksMjQzNjEsMjQ0NDgsMjQ0NDksMjQ0NDcsMjQ0NDQsMjQ1NDEsMjQ1NDQsMjQ1NzMsMjQ1NjUsMjQ1NzUsMjQ1OTEsMjQ1OTYsMjQ2MjMsMjQ2MjksMjQ1OTgsMjQ2MTgsMjQ1OTcsMjQ2MDksMjQ2MTUsMjQ2MTcsMjQ2MTksMjQ2MDMsMjUx''@;'; put 'put ''MTAsMjUxMDksMjUxNTEsMjUxNTAsMjUxNTIsMjUyMTUsMjUyODksMjUyOTIsMjUyODQsMjUyNzksMjUyODIsMjUyNzMsMjUyOTgsMjUzMDcsMjUyNTksMjUyOTksMjUzMDAsMjUyOTEsMjUyODgsMjUyNTYsMjUyNzcsMjUyNzYsMjUyOTYsMjUzMDUsMjUyODcsMjUyOTMsMjUyNjksMjUzMDYs''@;'; put 'put ''MjUyNjUsMjUzMDQsMjUzMDIsMjUzMDMsMjUyODYsMjUyNjAsMjUyOTQsMjU5MTgsMjYwMjMsMjYwNDQsMjYxMDYsMjYxMzIsMjYxMzEsMjYxMjQsMjYxMTgsMjYxMTQsMjYxMjYsMjYxMTIsMjYxMjcsMjYxMzMsMjYxMjIsMjYxMTksMjYzODEsMjYzNzksMjY0NzcsMjY1MDcsMjY1MTcsMjY0''@;'; put 'put ''ODEsMjY1MjQsMjY0ODMsMjY0ODcsMjY1MDMsMjY1MjUsMjY1MTksMjY0NzksMjY0ODAsMjY0OTUsMjY1MDUsMjY0OTQsMjY1MTIsMjY0ODUsMjY1MjIsMjY1MTUsMjY0OTIsMjY0NzQsMjY0ODIsMjc0MjcsMjc0OTQsMjc0OTUsMjc1MTksMjc2NjcsMjc2NzUsMjc4NzUsMjc4ODAsMjc4OTEs''@;'; put 'put ''Mjc4MjUsMjc4NTIsMjc4NzcsMjc4MjcsMjc4MzcsMjc4MzgsMjc4MzYsMjc4NzQsMjc4MTksMjc4NjEsMjc4NTksMjc4MzIsMjc4NDQsMjc4MzMsMjc4NDEsMjc4MjIsMjc4NjMsMjc4NDUsMjc4ODksMjc4MzksMjc4MzUsMjc4NzMsMjc4NjcsMjc4NTAsMjc4MjAsMjc4ODcsMjc4NjgsMjc4''@;'; put 'put ''NjIsMjc4NzIsMjg4MjEsMjg4MTQsMjg4MTgsMjg4MTAsMjg4MjUsMjkyMjgsMjkyMjksMjkyNDAsMjkyNTYsMjkyODcsMjkyODksMjkzNzYsMjkzOTAsMjk0MDEsMjkzOTksMjkzOTIsMjk2MDksMjk2MDgsMjk1OTksMjk2MTEsMjk2MDUsMzAwMTMsMzAxMDksMzAxMDUsMzAxMDYsMzAzNDAs''@;'; put 'put ''MzA0MDIsMzA0NTAsMzA0NTIsMzA2OTMsMzA3MTcsMzEwMzgsMzEwNDAsMzEwNDEsMzExNzcsMzExNzYsMzEzNTQsMzEzNTMsMzE0ODIsMzE5OTgsMzI1OTYsMzI2NTIsMzI2NTEsMzI3NzMsMzI5NTQsMzI5MzMsMzI5MzAsMzI5NDUsMzI5MjksMzI5MzksMzI5MzcsMzI5NDgsMzI5MzgsMzI5''@;'; put 'put ''NDMsMzMyNTMsMzMyNzgsMzMyOTMsMzM0NTksMzM0MzcsMzM0MzMsMzM0NTMsMzM0NjksMzM0MzksMzM0NjUsMzM0NTcsMzM0NTIsMzM0NDUsMzM0NTUsMzM0NjQsMzM0NDMsMzM0NTYsMzM0NzAsMzM0NjMsMzQzODIsMzQ0MTcsMjEwMjEsMzQ5MjAsMzY1NTUsMzY4MTQsMzY4MjAsMzY4MTcs''@;'; put 'put ''MzcwNDUsMzcwNDgsMzcwNDEsMzcwNDYsMzczMTksMzczMjksMzgyNjMsMzgyNzIsMzg0MjgsMzg0NjQsMzg0NjMsMzg0NTksMzg0NjgsMzg0NjYsMzg1ODUsMzg2MzIsMzg3MzgsMzg3NTAsMjAxMjcsMjAxNDEsMjAxNDIsMjA0NDksMjA0MDUsMjAzOTksMjA0MTUsMjA0NDgsMjA0MzMsMjA0''@;'; put 'put ''MzEsMjA0NDUsMjA0MTksMjA0MDYsMjA0NDAsMjA0NDcsMjA0MjYsMjA0MzksMjAzOTgsMjA0MzIsMjA0MjAsMjA0MTgsMjA0NDIsMjA0MzAsMjA0NDYsMjA0MDcsMjA4MjMsMjA4ODIsMjA4ODEsMjA4OTYsMjEwNzAsMjEwNTksMjEwNjYsMjEwNjksMjEwNjgsMjEwNjcsMjEwNjMsMjExOTEs''@;'; put 'put ''MjExOTMsMjExODcsMjExODUsMjEyNjEsMjEzMzUsMjEzNzEsMjE0MDIsMjE0NjcsMjE2NzYsMjE2OTYsMjE2NzIsMjE3MTAsMjE3MDUsMjE2ODgsMjE2NzAsMjE2ODMsMjE3MDMsMjE2OTgsMjE2OTMsMjE2NzQsMjE2OTcsMjE3MDAsMjE3MDQsMjE2NzksMjE2NzUsMjE2ODEsMjE2OTEsMjE2''@;'; put 'put ''NzMsMjE2NzEsMjE2OTUsMjIyNzEsMjI0MDIsMjI0MTEsMjI0MzIsMjI0MzUsMjI0MzQsMjI0NzgsMjI0NDYsMjI0MTksMjI4NjksMjI4NjUsMjI4NjMsMjI4NjIsMjI4NjQsMjMwMDQsMjNlMywyMzAzOSwyMzAxMSwyMzAxNiwyMzA0MywyMzAxMywyMzAxOCwyMzAwMiwyMzAxNCwyMzA0MSwy''@;'; put 'put ''MzAzNSwyMzQwMSwyMzQ1OSwyMzQ2MiwyMzQ2MCwyMzQ1OCwyMzQ2MSwyMzU1MywyMzYzMCwyMzYzMSwyMzYyOSwyMzYyNywyMzc2OSwyMzc2MiwyNDA1NSwyNDA5MywyNDEwMSwyNDA5NSwyNDE4OSwyNDIyNCwyNDIzMCwyNDMxNCwyNDMyOCwyNDM2NSwyNDQyMSwyNDQ1NiwyNDQ1MywyNDQ1''@;'; put 'put ''OCwyNDQ1OSwyNDQ1NSwyNDQ2MCwyNDQ1NywyNDU5NCwyNDYwNSwyNDYwOCwyNDYxMywyNDU5MCwyNDYxNiwyNDY1MywyNDY4OCwyNDY4MCwyNDY3NCwyNDY0NiwyNDY0MywyNDY4NCwyNDY4MywyNDY4MiwyNDY3NiwyNTE1MywyNTMwOCwyNTM2NiwyNTM1MywyNTM0MCwyNTMyNSwyNTM0NSwy''@;'; put 'put ''NTMyNiwyNTM0MSwyNTM1MSwyNTMyOSwyNTMzNSwyNTMyNywyNTMyNCwyNTM0MiwyNTMzMiwyNTM2MSwyNTM0NiwyNTkxOSwyNTkyNSwyNjAyNywyNjA0NSwyNjA4MiwyNjE0OSwyNjE1NywyNjE0NCwyNjE1MSwyNjE1OSwyNjE0MywyNjE1MiwyNjE2MSwyNjE0OCwyNjM1OSwyNjYyMywyNjU3''@;'; put 'put ''OSwyNjYwOSwyNjU4MCwyNjU3NiwyNjYwNCwyNjU1MCwyNjU0MywyNjYxMywyNjYwMSwyNjYwNywyNjU2NCwyNjU3NywyNjU0OCwyNjU4NiwyNjU5NywyNjU1MiwyNjU3NSwyNjU5MCwyNjYxMSwyNjU0NCwyNjU4NSwyNjU5NCwyNjU4OSwyNjU3OCwyNzQ5OCwyNzUyMywyNzUyNiwyNzU3Mywy''@;'; put 'put ''NzYwMiwyNzYwNywyNzY3OSwyNzg0OSwyNzkxNSwyNzk1NCwyNzk0NiwyNzk2OSwyNzk0MSwyNzkxNiwyNzk1MywyNzkzNCwyNzkyNywyNzk2MywyNzk2NSwyNzk2NiwyNzk1OCwyNzkzMSwyNzg5MywyNzk2MSwyNzk0MywyNzk2MCwyNzk0NSwyNzk1MCwyNzk1NywyNzkxOCwyNzk0NywyODg0''@;'; put 'put ''MywyODg1OCwyODg1MSwyODg0NCwyODg0NywyODg0NSwyODg1NiwyODg0NiwyODgzNiwyOTIzMiwyOTI5OCwyOTI5NSwyOTMwMCwyOTQxNywyOTQwOCwyOTQwOSwyOTYyMywyOTY0MiwyOTYyNywyOTYxOCwyOTY0NSwyOTYzMiwyOTYxOSwyOTk3OCwyOTk5NywzMDAzMSwzMDAyOCwzMDAzMCwz''@;'; put 'put ''MDAyNywzMDEyMywzMDExNiwzMDExNywzMDExNCwzMDExNSwzMDMyOCwzMDM0MiwzMDM0MywzMDM0NCwzMDQwOCwzMDQwNiwzMDQwMywzMDQwNSwzMDQ2NSwzMDQ1NywzMDQ1NiwzMDQ3MywzMDQ3NSwzMDQ2MiwzMDQ2MCwzMDQ3MSwzMDY4NCwzMDcyMiwzMDc0MCwzMDczMiwzMDczMywzMTA0''@;'; put 'put ''NiwzMTA0OSwzMTA0OCwzMTA0NywzMTE2MSwzMTE2MiwzMTE4NSwzMTE4NiwzMTE3OSwzMTM1OSwzMTM2MSwzMTQ4NywzMTQ4NSwzMTg2OSwzMjAwMiwzMjAwNSwzMmUzLDMyMDA5LDMyMDA3LDMyMDA0LDMyMDA2LDMyNTY4LDMyNjU0LDMyNzAzLDMyNzcyLDMyNzg0LDMyNzgxLDMyNzg1LDMy''@;'; put 'put ''ODIyLDMyOTgyLDMyOTk3LDMyOTg2LDMyOTYzLDMyOTY0LDMyOTcyLDMyOTkzLDMyOTg3LDMyOTc0LDMyOTkwLDMyOTk2LDMyOTg5LDMzMjY4LDMzMzE0LDMzNTExLDMzNTM5LDMzNTQxLDMzNTA3LDMzNDk5LDMzNTEwLDMzNTQwLDMzNTA5LDMzNTM4LDMzNTQ1LDMzNDkwLDMzNDk1LDMzNTIx''@;'; put 'put ''LDMzNTM3LDMzNTAwLDMzNDkyLDMzNDg5LDMzNTAyLDMzNDkxLDMzNTAzLDMzNTE5LDMzNTQyLDM0Mzg0LDM0NDI1LDM0NDI3LDM0NDI2LDM0ODkzLDM0OTIzLDM1MjAxLDM1Mjg0LDM1MzM2LDM1MzMwLDM1MzMxLDM1OTk4LDM2ZTMsMzYyMTIsMzYyMTEsMzYyNzYsMzY1NTcsMzY1NTYsMzY4''@;'; put 'put ''NDgsMzY4MzgsMzY4MzQsMzY4NDIsMzY4MzcsMzY4NDUsMzY4NDMsMzY4MzYsMzY4NDAsMzcwNjYsMzcwNzAsMzcwNTcsMzcwNTksMzcxOTUsMzcxOTQsMzczMjUsMzgyNzQsMzg0ODAsMzg0NzUsMzg0NzYsMzg0NzcsMzg3NTQsMzg3NjEsMzg4NTksMzg4OTMsMzg4OTksMzg5MTMsMzkwODAs''@;'; put 'put ''MzkxMzEsMzkxMzUsMzkzMTgsMzkzMjEsMjAwNTYsMjAxNDcsMjA0OTIsMjA0OTMsMjA1MTUsMjA0NjMsMjA1MTgsMjA1MTcsMjA0NzIsMjA1MjEsMjA1MDIsMjA0ODYsMjA1NDAsMjA1MTEsMjA1MDYsMjA0OTgsMjA0OTcsMjA0NzQsMjA0ODAsMjA1MDAsMjA1MjAsMjA0NjUsMjA1MTMsMjA0''@;'; put 'put ''OTEsMjA1MDUsMjA1MDQsMjA0NjcsMjA0NjIsMjA1MjUsMjA1MjIsMjA0NzgsMjA1MjMsMjA0ODksMjA4NjAsMjA5MDAsMjA5MDEsMjA4OTgsMjA5NDEsMjA5NDAsMjA5MzQsMjA5MzksMjEwNzgsMjEwODQsMjEwNzYsMjEwODMsMjEwODUsMjEyOTAsMjEzNzUsMjE0MDcsMjE0MDUsMjE0NzEs''@;'; put 'put ''MjE3MzYsMjE3NzYsMjE3NjEsMjE4MTUsMjE3NTYsMjE3MzMsMjE3NDYsMjE3NjYsMjE3NTQsMjE3ODAsMjE3MzcsMjE3NDEsMjE3MjksMjE3NjksMjE3NDIsMjE3MzgsMjE3MzQsMjE3OTksMjE3NjcsMjE3NTcsMjE3NzUsMjIyNzUsMjIyNzYsMjI0NjYsMjI0ODQsMjI0NzUsMjI0NjcsMjI1''@;'; put 'put ''MzcsMjI3OTksMjI4NzEsMjI4NzIsMjI4NzQsMjMwNTcsMjMwNjQsMjMwNjgsMjMwNzEsMjMwNjcsMjMwNTksMjMwMjAsMjMwNzIsMjMwNzUsMjMwODEsMjMwNzcsMjMwNTIsMjMwNDksMjM0MDMsMjM2NDAsMjM0NzIsMjM0NzUsMjM0NzgsMjM0NzYsMjM0NzAsMjM0NzcsMjM0ODEsMjM0ODAs''@;'; put 'put ''MjM1NTYsMjM2MzMsMjM2MzcsMjM2MzIsMjM3ODksMjM4MDUsMjM4MDMsMjM3ODYsMjM3ODQsMjM3OTIsMjM3OTgsMjM4MDksMjM3OTYsMjQwNDYsMjQxMDksMjQxMDcsMjQyMzUsMjQyMzcsMjQyMzEsMjQzNjksMjQ0NjYsMjQ0NjUsMjQ0NjQsMjQ2NjUsMjQ2NzUsMjQ2NzcsMjQ2NTYsMjQ2''@;'; put 'put ''NjEsMjQ2ODUsMjQ2ODEsMjQ2ODcsMjQ3MDgsMjQ3MzUsMjQ3MzAsMjQ3MTcsMjQ3MjQsMjQ3MTYsMjQ3MDksMjQ3MjYsMjUxNTksMjUzMzEsMjUzNTIsMjUzNDMsMjU0MjIsMjU0MDYsMjUzOTEsMjU0MjksMjU0MTAsMjU0MTQsMjU0MjMsMjU0MTcsMjU0MDIsMjU0MjQsMjU0MDUsMjUzODYs''@;'; put 'put ''MjUzODcsMjUzODQsMjU0MjEsMjU0MjAsMjU5MjgsMjU5MjksMjYwMDksMjYwNDksMjYwNTMsMjYxNzgsMjYxODUsMjYxOTEsMjYxNzksMjYxOTQsMjYxODgsMjYxODEsMjYxNzcsMjYzNjAsMjYzODgsMjYzODksMjYzOTEsMjY2NTcsMjY2ODAsMjY2OTYsMjY2OTQsMjY3MDcsMjY2ODEsMjY2''@;'; put 'put ''OTAsMjY3MDgsMjY2NjUsMjY4MDMsMjY2NDcsMjY3MDAsMjY3MDUsMjY2ODUsMjY2MTIsMjY3MDQsMjY2ODgsMjY2ODQsMjY2OTEsMjY2NjYsMjY2OTMsMjY2NDMsMjY2NDgsMjY2ODksMjc1MzAsMjc1MjksMjc1NzUsMjc2ODMsMjc2ODcsMjc2ODgsMjc2ODYsMjc2ODQsMjc4ODgsMjgwMTAs''@;'; put 'put ''MjgwNTMsMjgwNDAsMjgwMzksMjgwMDYsMjgwMjQsMjgwMjMsMjc5OTMsMjgwNTEsMjgwMTIsMjgwNDEsMjgwMTQsMjc5OTQsMjgwMjAsMjgwMDksMjgwNDQsMjgwNDIsMjgwMjUsMjgwMzcsMjgwMDUsMjgwNTIsMjg4NzQsMjg4ODgsMjg5MDAsMjg4ODksMjg4NzIsMjg4NzksMjkyNDEsMjkz''@;'; put 'put ''MDUsMjk0MzYsMjk0MzMsMjk0MzcsMjk0MzIsMjk0MzEsMjk1NzQsMjk2NzcsMjk3MDUsMjk2NzgsMjk2NjQsMjk2NzQsMjk2NjIsMzAwMzYsMzAwNDUsMzAwNDQsMzAwNDIsMzAwNDEsMzAxNDIsMzAxNDksMzAxNTEsMzAxMzAsMzAxMzEsMzAxNDEsMzAxNDAsMzAxMzcsMzAxNDYsMzAxMzYs''@;'; put 'put ''MzAzNDcsMzAzODQsMzA0MTAsMzA0MTMsMzA0MTQsMzA1MDUsMzA0OTUsMzA0OTYsMzA1MDQsMzA2OTcsMzA3NjgsMzA3NTksMzA3NzYsMzA3NDksMzA3NzIsMzA3NzUsMzA3NTcsMzA3NjUsMzA3NTIsMzA3NTEsMzA3NzAsMzEwNjEsMzEwNTYsMzEwNzIsMzEwNzEsMzEwNjIsMzEwNzAsMzEw''@;'; put 'put ''NjksMzEwNjMsMzEwNjYsMzEyMDQsMzEyMDMsMzEyMDcsMzExOTksMzEyMDYsMzEyMDksMzExOTIsMzEzNjQsMzEzNjgsMzE0NDksMzE0OTQsMzE1MDUsMzE4ODEsMzIwMzMsMzIwMjMsMzIwMTEsMzIwMTAsMzIwMzIsMzIwMzQsMzIwMjAsMzIwMTYsMzIwMjEsMzIwMjYsMzIwMjgsMzIwMTMs''@;'; put 'put ''MzIwMjUsMzIwMjcsMzI1NzAsMzI2MDcsMzI2NjAsMzI3MDksMzI3MDUsMzI3NzQsMzI3OTIsMzI3ODksMzI3OTMsMzI3OTEsMzI4MjksMzI4MzEsMzMwMDksMzMwMjYsMzMwMDgsMzMwMjksMzMwMDUsMzMwMTIsMzMwMzAsMzMwMTYsMzMwMTEsMzMwMzIsMzMwMjEsMzMwMzQsMzMwMjAsMzMw''@;'; put 'put ''MDcsMzMyNjEsMzMyNjAsMzMyODAsMzMyOTYsMzMzMjIsMzMzMjMsMzMzMjAsMzMzMjQsMzM0NjcsMzM1NzksMzM2MTgsMzM2MjAsMzM2MTAsMzM1OTIsMzM2MTYsMzM2MDksMzM1ODksMzM1ODgsMzM2MTUsMzM1ODYsMzM1OTMsMzM1OTAsMzM1NTksMzM2MDAsMzM1ODUsMzM1NzYsMzM2MDMs''@;'; put 'put ''MzQzODgsMzQ0NDIsMzQ0NzQsMzQ0NTEsMzQ0NjgsMzQ0NzMsMzQ0NDQsMzQ0NjcsMzQ0NjAsMzQ5MjgsMzQ5MzUsMzQ5NDUsMzQ5NDYsMzQ5NDEsMzQ5MzcsMzUzNTIsMzUzNDQsMzUzNDIsMzUzNDAsMzUzNDksMzUzMzgsMzUzNTEsMzUzNDcsMzUzNTAsMzUzNDMsMzUzNDUsMzU5MTIsMzU5''@;'; put 'put ''NjIsMzU5NjEsMzYwMDEsMzYwMDIsMzYyMTUsMzY1MjQsMzY1NjIsMzY1NjQsMzY1NTksMzY3ODUsMzY4NjUsMzY4NzAsMzY4NTUsMzY4NjQsMzY4NTgsMzY4NTIsMzY4NjcsMzY4NjEsMzY4NjksMzY4NTYsMzcwMTMsMzcwODksMzcwODUsMzcwOTAsMzcyMDIsMzcxOTcsMzcxOTYsMzczMzYs''@;'; put 'put ''MzczNDEsMzczMzUsMzczNDAsMzczMzcsMzgyNzUsMzg0OTgsMzg0OTksMzg0OTcsMzg0OTEsMzg0OTMsMzg1MDAsMzg0ODgsMzg0OTQsMzg1ODcsMzkxMzgsMzkzNDAsMzk1OTIsMzk2NDAsMzk3MTcsMzk3MzAsMzk3NDAsMjAwOTQsMjA2MDIsMjA2MDUsMjA1NzIsMjA1NTEsMjA1NDcsMjA1''@;'; put 'put ''NTYsMjA1NzAsMjA1NTMsMjA1ODEsMjA1OTgsMjA1NTgsMjA1NjUsMjA1OTcsMjA1OTYsMjA1OTksMjA1NTksMjA0OTUsMjA1OTEsMjA1ODksMjA4MjgsMjA4ODUsMjA5NzYsMjEwOTgsMjExMDMsMjEyMDIsMjEyMDksMjEyMDgsMjEyMDUsMjEyNjQsMjEyNjMsMjEyNzMsMjEzMTEsMjEzMTIs''@;'; put 'put ''MjEzMTAsMjE0NDMsMjYzNjQsMjE4MzAsMjE4NjYsMjE4NjIsMjE4MjgsMjE4NTQsMjE4NTcsMjE4MjcsMjE4MzQsMjE4MDksMjE4NDYsMjE4MzksMjE4NDUsMjE4MDcsMjE4NjAsMjE4MTYsMjE4MDYsMjE4NTIsMjE4MDQsMjE4NTksMjE4MTEsMjE4MjUsMjE4NDcsMjIyODAsMjIyODMsMjIy''@;'; put 'put ''ODEsMjI0OTUsMjI1MzMsMjI1MzgsMjI1MzQsMjI0OTYsMjI1MDAsMjI1MjIsMjI1MzAsMjI1ODEsMjI1MTksMjI1MjEsMjI4MTYsMjI4ODIsMjMwOTQsMjMxMDUsMjMxMTMsMjMxNDIsMjMxNDYsMjMxMDQsMjMxMDAsMjMxMzgsMjMxMzAsMjMxMTAsMjMxMTQsMjM0MDgsMjM0OTUsMjM0OTMs''@;'; put 'put ''MjM0OTIsMjM0OTAsMjM0ODcsMjM0OTQsMjM1NjEsMjM1NjAsMjM1NTksMjM2NDgsMjM2NDQsMjM2NDUsMjM4MTUsMjM4MTQsMjM4MjIsMjM4MzUsMjM4MzAsMjM4NDIsMjM4MjUsMjM4NDksMjM4MjgsMjM4MzMsMjM4NDQsMjM4NDcsMjM4MzEsMjQwMzQsMjQxMjAsMjQxMTgsMjQxMTUsMjQx''@;'; put 'put ''MTksMjQyNDcsMjQyNDgsMjQyNDYsMjQyNDUsMjQyNTQsMjQzNzMsMjQzNzUsMjQ0MDcsMjQ0MjgsMjQ0MjUsMjQ0MjcsMjQ0NzEsMjQ0NzMsMjQ0NzgsMjQ0NzIsMjQ0ODEsMjQ0ODAsMjQ0NzYsMjQ3MDMsMjQ3MzksMjQ3MTMsMjQ3MzYsMjQ3NDQsMjQ3NzksMjQ3NTYsMjQ4MDYsMjQ3NjUs''@;'; put 'put ''MjQ3NzMsMjQ3NjMsMjQ3NTcsMjQ3OTYsMjQ3NjQsMjQ3OTIsMjQ3ODksMjQ3NzQsMjQ3OTksMjQ3NjAsMjQ3OTQsMjQ3NzUsMjUxMTQsMjUxMTUsMjUxNjAsMjU1MDQsMjU1MTEsMjU0NTgsMjU0OTQsMjU1MDYsMjU1MDksMjU0NjMsMjU0NDcsMjU0OTYsMjU1MTQsMjU0NTcsMjU1MTMsMjU0''@;'; put 'put ''ODEsMjU0NzUsMjU0OTksMjU0NTEsMjU1MTIsMjU0NzYsMjU0ODAsMjU0OTcsMjU1MDUsMjU1MTYsMjU0OTAsMjU0ODcsMjU0NzIsMjU0NjcsMjU0NDksMjU0NDgsMjU0NjYsMjU5NDksMjU5NDIsMjU5MzcsMjU5NDUsMjU5NDMsMjE4NTUsMjU5MzUsMjU5NDQsMjU5NDEsMjU5NDAsMjYwMTIs''@;'; put 'put ''MjYwMTEsMjYwMjgsMjYwNjMsMjYwNTksMjYwNjAsMjYwNjIsMjYyMDUsMjYyMDIsMjYyMTIsMjYyMTYsMjYyMTQsMjYyMDYsMjYzNjEsMjEyMDcsMjYzOTUsMjY3NTMsMjY3OTksMjY3ODYsMjY3NzEsMjY4MDUsMjY3NTEsMjY3NDIsMjY4MDEsMjY3OTEsMjY3NzUsMjY4MDAsMjY3NTUsMjY4''@;'; put 'put ''MjAsMjY3OTcsMjY3NTgsMjY3NTcsMjY3NzIsMjY3ODEsMjY3OTIsMjY3ODMsMjY3ODUsMjY3NTQsMjc0NDIsMjc1NzgsMjc2MjcsMjc2MjgsMjc2OTEsMjgwNDYsMjgwOTIsMjgxNDcsMjgxMjEsMjgwODIsMjgxMjksMjgxMDgsMjgxMzIsMjgxNTUsMjgxNTQsMjgxNjUsMjgxMDMsMjgxMDcs''@;'; put 'put ''MjgwNzksMjgxMTMsMjgwNzgsMjgxMjYsMjgxNTMsMjgwODgsMjgxNTEsMjgxNDksMjgxMDEsMjgxMTQsMjgxODYsMjgwODUsMjgxMjIsMjgxMzksMjgxMjAsMjgxMzgsMjgxNDUsMjgxNDIsMjgxMzYsMjgxMDIsMjgxMDAsMjgwNzQsMjgxNDAsMjgwOTUsMjgxMzQsMjg5MjEsMjg5MzcsMjg5''@;'; put 'put ''MzgsMjg5MjUsMjg5MTEsMjkyNDUsMjkzMDksMjkzMTMsMjk0NjgsMjk0NjcsMjk0NjIsMjk0NTksMjk0NjUsMjk1NzUsMjk3MDEsMjk3MDYsMjk2OTksMjk3MDIsMjk2OTQsMjk3MDksMjk5MjAsMjk5NDIsMjk5NDMsMjk5ODAsMjk5ODYsMzAwNTMsMzAwNTQsMzAwNTAsMzAwNjQsMzAwOTUs''@;'; put 'put ''MzAxNjQsMzAxNjUsMzAxMzMsMzAxNTQsMzAxNTcsMzAzNTAsMzA0MjAsMzA0MTgsMzA0MjcsMzA1MTksMzA1MjYsMzA1MjQsMzA1MTgsMzA1MjAsMzA1MjIsMzA4MjcsMzA3ODcsMzA3OTgsMzEwNzcsMzEwODAsMzEwODUsMzEyMjcsMzEzNzgsMzEzODEsMzE1MjAsMzE1MjgsMzE1MTUsMzE1''@;'; put 'put ''MzIsMzE1MjYsMzE1MTMsMzE1MTgsMzE1MzQsMzE4OTAsMzE4OTUsMzE4OTMsMzIwNzAsMzIwNjcsMzIxMTMsMzIwNDYsMzIwNTcsMzIwNjAsMzIwNjQsMzIwNDgsMzIwNTEsMzIwNjgsMzIwNDcsMzIwNjYsMzIwNTAsMzIwNDksMzI1NzMsMzI2NzAsMzI2NjYsMzI3MTYsMzI3MTgsMzI3MjIs''@;'; put 'put ''MzI3OTYsMzI4NDIsMzI4MzgsMzMwNzEsMzMwNDYsMzMwNTksMzMwNjcsMzMwNjUsMzMwNzIsMzMwNjAsMzMyODIsMzMzMzMsMzMzMzUsMzMzMzQsMzMzMzcsMzM2NzgsMzM2OTQsMzM2ODgsMzM2NTYsMzM2OTgsMzM2ODYsMzM3MjUsMzM3MDcsMzM2ODIsMzM2NzQsMzM2ODMsMzM2NzMsMzM2''@;'; put 'put ''OTYsMzM2NTUsMzM2NTksMzM2NjAsMzM2NzAsMzM3MDMsMzQzODksMjQ0MjYsMzQ1MDMsMzQ0OTYsMzQ0ODYsMzQ1MDAsMzQ0ODUsMzQ1MDIsMzQ1MDcsMzQ0ODEsMzQ0NzksMzQ1MDUsMzQ4OTksMzQ5NzQsMzQ5NTIsMzQ5ODcsMzQ5NjIsMzQ5NjYsMzQ5NTcsMzQ5NTUsMzUyMTksMzUyMTUs''@;'; put 'put ''MzUzNzAsMzUzNTcsMzUzNjMsMzUzNjUsMzUzNzcsMzUzNzMsMzUzNTksMzUzNTUsMzUzNjIsMzU5MTMsMzU5MzAsMzYwMDksMzYwMTIsMzYwMTEsMzYwMDgsMzYwMTAsMzYwMDcsMzYxOTksMzYxOTgsMzYyODYsMzYyODIsMzY1NzEsMzY1NzUsMzY4ODksMzY4NzcsMzY4OTAsMzY4ODcsMzY4''@;'; put 'put ''OTksMzY4OTUsMzY4OTMsMzY4ODAsMzY4ODUsMzY4OTQsMzY4OTYsMzY4NzksMzY4OTgsMzY4ODYsMzY4OTEsMzY4ODQsMzcwOTYsMzcxMDEsMzcxMTcsMzcyMDcsMzczMjYsMzczNjUsMzczNTAsMzczNDcsMzczNTEsMzczNTcsMzczNTMsMzgyODEsMzg1MDYsMzg1MTcsMzg1MTUsMzg1MjAs''@;'; put 'put ''Mzg1MTIsMzg1MTYsMzg1MTgsMzg1MTksMzg1MDgsMzg1OTIsMzg2MzQsMzg2MzMsMzE0NTYsMzE0NTUsMzg5MTQsMzg5MTUsMzk3NzAsNDAxNjUsNDA1NjUsNDA1NzUsNDA2MTMsNDA2MzUsMjA2NDIsMjA2MjEsMjA2MTMsMjA2MzMsMjA2MjUsMjA2MDgsMjA2MzAsMjA2MzIsMjA2MzQsMjYz''@;'; put 'put ''NjgsMjA5NzcsMjExMDYsMjExMDgsMjExMDksMjEwOTcsMjEyMTQsMjEyMTMsMjEyMTEsMjEzMzgsMjE0MTMsMjE4ODMsMjE4ODgsMjE5MjcsMjE4ODQsMjE4OTgsMjE5MTcsMjE5MTIsMjE4OTAsMjE5MTYsMjE5MzAsMjE5MDgsMjE4OTUsMjE4OTksMjE4OTEsMjE5MzksMjE5MzQsMjE5MTks''@;'; put 'put ''MjE4MjIsMjE5MzgsMjE5MTQsMjE5NDcsMjE5MzIsMjE5MzcsMjE4ODYsMjE4OTcsMjE5MzEsMjE5MTMsMjIyODUsMjI1NzUsMjI1NzAsMjI1ODAsMjI1NjQsMjI1NzYsMjI1NzcsMjI1NjEsMjI1NTcsMjI1NjAsMjI3NzcsMjI3NzgsMjI4ODAsMjMxNTksMjMxOTQsMjMxNjcsMjMxODYsMjMx''@;'; put 'put ''OTUsMjMyMDcsMjM0MTEsMjM0MDksMjM1MDYsMjM1MDAsMjM1MDcsMjM1MDQsMjM1NjIsMjM1NjMsMjM2MDEsMjM4ODQsMjM4ODgsMjM4NjAsMjM4NzksMjQwNjEsMjQxMzMsMjQxMjUsMjQxMjgsMjQxMzEsMjQxOTAsMjQyNjYsMjQyNTcsMjQyNTgsMjQyNjAsMjQzODAsMjQ0MjksMjQ0ODks''@;'; put 'put ''MjQ0OTAsMjQ0ODgsMjQ3ODUsMjQ4MDEsMjQ3NTQsMjQ3NTgsMjQ4MDAsMjQ4NjAsMjQ4NjcsMjQ4MjYsMjQ4NTMsMjQ4MTYsMjQ4MjcsMjQ4MjAsMjQ5MzYsMjQ4MTcsMjQ4NDYsMjQ4MjIsMjQ4NDEsMjQ4MzIsMjQ4NTAsMjUxMTksMjUxNjEsMjU1MDcsMjU0ODQsMjU1NTEsMjU1MzYsMjU1''@;'; put 'put ''NzcsMjU1NDUsMjU1NDIsMjU1NDksMjU1NTQsMjU1NzEsMjU1NTIsMjU1NjksMjU1NTgsMjU1ODEsMjU1ODIsMjU0NjIsMjU1ODgsMjU1NzgsMjU1NjMsMjU2ODIsMjU1NjIsMjU1OTMsMjU5NTAsMjU5NTgsMjU5NTQsMjU5NTUsMjYwMDEsMjZlMywyNjAzMSwyNjIyMiwyNjIyNCwyNjIyOCwy''@;'; put 'put ''NjIzMCwyNjIyMywyNjI1NywyNjIzNCwyNjIzOCwyNjIzMSwyNjM2NiwyNjM2NywyNjM5OSwyNjM5NywyNjg3NCwyNjgzNywyNjg0OCwyNjg0MCwyNjgzOSwyNjg4NSwyNjg0NywyNjg2OSwyNjg2MiwyNjg1NSwyNjg3MywyNjgzNCwyNjg2NiwyNjg1MSwyNjgyNywyNjgyOSwyNjg5MywyNjg5''@;'; put 'put ''OCwyNjg5NCwyNjgyNSwyNjg0MiwyNjk5MCwyNjg3NSwyNzQ1NCwyNzQ1MCwyNzQ1MywyNzU0NCwyNzU0MiwyNzU4MCwyNzYzMSwyNzY5NCwyNzY5NSwyNzY5MiwyODIwNywyODIxNiwyODI0NCwyODE5MywyODIxMCwyODI2MywyODIzNCwyODE5MiwyODE5NywyODE5NSwyODE4NywyODI1MSwy''@;'; put 'put ''ODI0OCwyODE5NiwyODI0NiwyODI3MCwyODIwNSwyODE5OCwyODI3MSwyODIxMiwyODIzNywyODIxOCwyODIwNCwyODIyNywyODE4OSwyODIyMiwyODM2MywyODI5NywyODE4NSwyODIzOCwyODI1OSwyODIyOCwyODI3NCwyODI2NSwyODI1NSwyODk1MywyODk1NCwyODk2NiwyODk3NiwyODk2''@;'; put 'put ''MSwyODk4MiwyOTAzOCwyODk1NiwyOTI2MCwyOTMxNiwyOTMxMiwyOTQ5NCwyOTQ3NywyOTQ5MiwyOTQ4MSwyOTc1NCwyOTczOCwyOTc0NywyOTczMCwyOTczMywyOTc0OSwyOTc1MCwyOTc0OCwyOTc0MywyOTcyMywyOTczNCwyOTczNiwyOTk4OSwyOTk5MCwzMDA1OSwzMDA1OCwzMDE3OCwz''@;'; put 'put ''MDE3MSwzMDE3OSwzMDE2OSwzMDE2OCwzMDE3NCwzMDE3NiwzMDMzMSwzMDMzMiwzMDM1OCwzMDM1NSwzMDM4OCwzMDQyOCwzMDU0MywzMDcwMSwzMDgxMywzMDgyOCwzMDgzMSwzMTI0NSwzMTI0MCwzMTI0MywzMTIzNywzMTIzMiwzMTM4NCwzMTM4MywzMTM4MiwzMTQ2MSwzMTQ1OSwzMTU2''@;'; put 'put ''MSwzMTU3NCwzMTU1OCwzMTU2OCwzMTU3MCwzMTU3MiwzMTU2NSwzMTU2MywzMTU2NywzMTU2OSwzMTkwMywzMTkwOSwzMjA5NCwzMjA4MCwzMjEwNCwzMjA4NSwzMjA0MywzMjExMCwzMjExNCwzMjA5NywzMjEwMiwzMjA5OCwzMjExMiwzMjExNSwyMTg5MiwzMjcyNCwzMjcyNSwzMjc3OSwz''@;'; put 'put ''Mjg1MCwzMjkwMSwzMzEwOSwzMzEwOCwzMzA5OSwzMzEwNSwzMzEwMiwzMzA4MSwzMzA5NCwzMzA4NiwzMzEwMCwzMzEwNywzMzE0MCwzMzI5OCwzMzMwOCwzMzc2OSwzMzc5NSwzMzc4NCwzMzgwNSwzMzc2MCwzMzczMywzMzgwMywzMzcyOSwzMzc3NSwzMzc3NywzMzc4MCwzMzg3OSwzMzgw''@;'; put 'put ''MiwzMzc3NiwzMzgwNCwzMzc0MCwzMzc4OSwzMzc3OCwzMzczOCwzMzg0OCwzMzgwNiwzMzc5NiwzMzc1NiwzMzc5OSwzMzc0OCwzMzc1OSwzNDM5NSwzNDUyNywzNDUyMSwzNDU0MSwzNDUxNiwzNDUyMywzNDUzMiwzNDUxMiwzNDUyNiwzNDkwMywzNTAwOSwzNTAxMCwzNDk5MywzNTIwMywz''@;'; put 'put ''NTIyMiwzNTM4NywzNTQyNCwzNTQxMywzNTQyMiwzNTM4OCwzNTM5MywzNTQxMiwzNTQxOSwzNTQwOCwzNTM5OCwzNTM4MCwzNTM4NiwzNTM4MiwzNTQxNCwzNTkzNywzNTk3MCwzNjAxNSwzNjAyOCwzNjAxOSwzNjAyOSwzNjAzMywzNjAyNywzNjAzMiwzNjAyMCwzNjAyMywzNjAyMiwzNjAz''@;'; put 'put ''MSwzNjAyNCwzNjIzNCwzNjIyOSwzNjIyNSwzNjMwMiwzNjMxNywzNjI5OSwzNjMxNCwzNjMwNSwzNjMwMCwzNjMxNSwzNjI5NCwzNjYwMywzNjYwMCwzNjYwNCwzNjc2NCwzNjkxMCwzNjkxNywzNjkxMywzNjkyMCwzNjkxNCwzNjkxOCwzNzEyMiwzNzEwOSwzNzEyOSwzNzExOCwzNzIxOSwz''@;'; put 'put ''NzIyMSwzNzMyNywzNzM5NiwzNzM5NywzNzQxMSwzNzM4NSwzNzQwNiwzNzM4OSwzNzM5MiwzNzM4MywzNzM5MywzODI5MiwzODI4NywzODI4MywzODI4OSwzODI5MSwzODI5MCwzODI4NiwzODUzOCwzODU0MiwzODUzOSwzODUyNSwzODUzMywzODUzNCwzODU0MSwzODUxNCwzODUzMiwzODU5''@;'; put 'put ''MywzODU5NywzODU5NiwzODU5OCwzODU5OSwzODYzOSwzODY0MiwzODg2MCwzODkxNywzODkxOCwzODkyMCwzOTE0MywzOTE0NiwzOTE1MSwzOTE0NSwzOTE1NCwzOTE0OSwzOTM0MiwzOTM0MSw0MDY0Myw0MDY1Myw0MDY1NywyMDA5OCwyMDY1MywyMDY2MSwyMDY1OCwyMDY1OSwyMDY3Nywy''@;'; put 'put ''MDY3MCwyMDY1MiwyMDY2MywyMDY2NywyMDY1NSwyMDY3OSwyMTExOSwyMTExMSwyMTExNywyMTIxNSwyMTIyMiwyMTIyMCwyMTIxOCwyMTIxOSwyMTI5NSwyMTk4MywyMTk5MiwyMTk3MSwyMTk5MCwyMTk2NiwyMTk4MCwyMTk1OSwyMTk2OSwyMTk4NywyMTk4OCwyMTk5OSwyMTk3OCwyMTk4''@;'; put 'put ''NSwyMTk1NywyMTk1OCwyMTk4OSwyMTk2MSwyMjI5MCwyMjI5MSwyMjYyMiwyMjYwOSwyMjYxNiwyMjYxNSwyMjYxOCwyMjYxMiwyMjYzNSwyMjYwNCwyMjYzNywyMjYwMiwyMjYyNiwyMjYxMCwyMjYwMywyMjg4NywyMzIzMywyMzI0MSwyMzI0NCwyMzIzMCwyMzIyOSwyMzIyOCwyMzIxOSwy''@;'; put 'put ''MzIzNCwyMzIxOCwyMzkxMywyMzkxOSwyNDE0MCwyNDE4NSwyNDI2NSwyNDI2NCwyNDMzOCwyNDQwOSwyNDQ5MiwyNDQ5NCwyNDg1OCwyNDg0NywyNDkwNCwyNDg2MywyNDgxOSwyNDg1OSwyNDgyNSwyNDgzMywyNDg0MCwyNDkxMCwyNDkwOCwyNDkwMCwyNDkwOSwyNDg5NCwyNDg4NCwyNDg3''@;'; put 'put ''MSwyNDg0NSwyNDgzOCwyNDg4NywyNTEyMSwyNTEyMiwyNTYxOSwyNTY2MiwyNTYzMCwyNTY0MiwyNTY0NSwyNTY2MSwyNTY0NCwyNTYxNSwyNTYyOCwyNTYyMCwyNTYxMywyNTY1NCwyNTYyMiwyNTYyMywyNTYwNiwyNTk2NCwyNjAxNSwyNjAzMiwyNjI2MywyNjI0OSwyNjI0NywyNjI0OCwy''@;'; put 'put ''NjI2MiwyNjI0NCwyNjI2NCwyNjI1MywyNjM3MSwyNzAyOCwyNjk4OSwyNjk3MCwyNjk5OSwyNjk3NiwyNjk2NCwyNjk5NywyNjkyOCwyNzAxMCwyNjk1NCwyNjk4NCwyNjk4NywyNjk3NCwyNjk2MywyNzAwMSwyNzAxNCwyNjk3MywyNjk3OSwyNjk3MSwyNzQ2MywyNzUwNiwyNzU4NCwyNzU4''@;'; put 'put ''MywyNzYwMywyNzY0NSwyODMyMiwyODMzNSwyODM3MSwyODM0MiwyODM1NCwyODMwNCwyODMxNywyODM1OSwyODM1NywyODMyNSwyODMxMiwyODM0OCwyODM0NiwyODMzMSwyODM2OSwyODMxMCwyODMxNiwyODM1NiwyODM3MiwyODMzMCwyODMyNywyODM0MCwyOTAwNiwyOTAxNywyOTAzMywy''@;'; put 'put ''OTAyOCwyOTAwMSwyOTAzMSwyOTAyMCwyOTAzNiwyOTAzMCwyOTAwNCwyOTAyOSwyOTAyMiwyODk5OCwyOTAzMiwyOTAxNCwyOTI0MiwyOTI2NiwyOTQ5NSwyOTUwOSwyOTUwMywyOTUwMiwyOTgwNywyOTc4NiwyOTc4MSwyOTc5MSwyOTc5MCwyOTc2MSwyOTc1OSwyOTc4NSwyOTc4NywyOTc4''@;'; put 'put ''OCwzMDA3MCwzMDA3MiwzMDIwOCwzMDE5MiwzMDIwOSwzMDE5NCwzMDE5MywzMDIwMiwzMDIwNywzMDE5NiwzMDE5NSwzMDQzMCwzMDQzMSwzMDU1NSwzMDU3MSwzMDU2NiwzMDU1OCwzMDU2MywzMDU4NSwzMDU3MCwzMDU3MiwzMDU1NiwzMDU2NSwzMDU2OCwzMDU2MiwzMDcwMiwzMDg2Miwz''@;'; put 'put ''MDg5NiwzMDg3MSwzMDg3MiwzMDg2MCwzMDg1NywzMDg0NCwzMDg2NSwzMDg2NywzMDg0NywzMTA5OCwzMTEwMywzMTEwNSwzMzgzNiwzMTE2NSwzMTI2MCwzMTI1OCwzMTI2NCwzMTI1MiwzMTI2MywzMTI2MiwzMTM5MSwzMTM5MiwzMTYwNywzMTY4MCwzMTU4NCwzMTU5OCwzMTU5MSwzMTky''@;'; put 'put ''MSwzMTkyMywzMTkyNSwzMjE0NywzMjEyMSwzMjE0NSwzMjEyOSwzMjE0MywzMjA5MSwzMjYyMiwzMjYxNywzMjYxOCwzMjYyNiwzMjY4MSwzMjY4MCwzMjY3NiwzMjg1NCwzMjg1NiwzMjkwMiwzMjkwMCwzMzEzNywzMzEzNiwzMzE0NCwzMzEyNSwzMzEzNCwzMzEzOSwzMzEzMSwzMzE0NSwz''@;'; put 'put ''MzE0NiwzMzEyNiwzMzI4NSwzMzM1MSwzMzkyMiwzMzkxMSwzMzg1MywzMzg0MSwzMzkwOSwzMzg5NCwzMzg5OSwzMzg2NSwzMzkwMCwzMzg4MywzMzg1MiwzMzg0NSwzMzg4OSwzMzg5MSwzMzg5NywzMzkwMSwzMzg2MiwzNDM5OCwzNDM5NiwzNDM5OSwzNDU1MywzNDU3OSwzNDU2OCwzNDU2''@;'; put 'put ''NywzNDU2MCwzNDU1OCwzNDU1NSwzNDU2MiwzNDU2MywzNDU2NiwzNDU3MCwzNDkwNSwzNTAzOSwzNTAyOCwzNTAzMywzNTAzNiwzNTAzMiwzNTAzNywzNTA0MSwzNTAxOCwzNTAyOSwzNTAyNiwzNTIyOCwzNTI5OSwzNTQzNSwzNTQ0MiwzNTQ0MywzNTQzMCwzNTQzMywzNTQ0MCwzNTQ2Mywz''@;'; put 'put ''NTQ1MiwzNTQyNywzNTQ4OCwzNTQ0MSwzNTQ2MSwzNTQzNywzNTQyNiwzNTQzOCwzNTQzNiwzNTQ0OSwzNTQ1MSwzNTM5MCwzNTQzMiwzNTkzOCwzNTk3OCwzNTk3NywzNjA0MiwzNjAzOSwzNjA0MCwzNjAzNiwzNjAxOCwzNjAzNSwzNjAzNCwzNjAzNywzNjMyMSwzNjMxOSwzNjMyOCwzNjMz''@;'; put 'put ''NSwzNjMzOSwzNjM0NiwzNjMzMCwzNjMyNCwzNjMyNiwzNjUzMCwzNjYxMSwzNjYxNywzNjYwNiwzNjYxOCwzNjc2NywzNjc4NiwzNjkzOSwzNjkzOCwzNjk0NywzNjkzMCwzNjk0OCwzNjkyNCwzNjk0OSwzNjk0NCwzNjkzNSwzNjk0MywzNjk0MiwzNjk0MSwzNjk0NSwzNjkyNiwzNjkyOSwz''@;'; put 'put ''NzEzOCwzNzE0MywzNzIyOCwzNzIyNiwzNzIyNSwzNzMyMSwzNzQzMSwzNzQ2MywzNzQzMiwzNzQzNywzNzQ0MCwzNzQzOCwzNzQ2NywzNzQ1MSwzNzQ3NiwzNzQ1NywzNzQyOCwzNzQ0OSwzNzQ1MywzNzQ0NSwzNzQzMywzNzQzOSwzNzQ2NiwzODI5NiwzODU1MiwzODU0OCwzODU0OSwzODYw''@;'; put 'put ''NSwzODYwMywzODYwMSwzODYwMiwzODY0NywzODY1MSwzODY0OSwzODY0NiwzODc0MiwzODc3MiwzODc3NCwzODkyOCwzODkyOSwzODkzMSwzODkyMiwzODkzMCwzODkyNCwzOTE2NCwzOTE1NiwzOTE2NSwzOTE2NiwzOTM0NywzOTM0NSwzOTM0OCwzOTY0OSw0MDE2OSw0MDU3OCw0MDcxOCw0''@;'; put 'put ''MDcyMyw0MDczNiwyMDcxMSwyMDcxOCwyMDcwOSwyMDY5NCwyMDcxNywyMDY5OCwyMDY5MywyMDY4NywyMDY4OSwyMDcyMSwyMDY4NiwyMDcxMywyMDgzNCwyMDk3OSwyMTEyMywyMTEyMiwyMTI5NywyMTQyMSwyMjAxNCwyMjAxNiwyMjA0MywyMjAzOSwyMjAxMywyMjAzNiwyMjAyMiwyMjAy''@;'; put 'put ''NSwyMjAyOSwyMjAzMCwyMjAwNywyMjAzOCwyMjA0NywyMjAyNCwyMjAzMiwyMjAwNiwyMjI5NiwyMjI5NCwyMjY0NSwyMjY1NCwyMjY1OSwyMjY3NSwyMjY2NiwyMjY0OSwyMjY2MSwyMjY1MywyMjc4MSwyMjgyMSwyMjgxOCwyMjgyMCwyMjg5MCwyMjg4OSwyMzI2NSwyMzI3MCwyMzI3Mywy''@;'; put 'put ''MzI1NSwyMzI1NCwyMzI1NiwyMzI2NywyMzQxMywyMzUxOCwyMzUyNywyMzUyMSwyMzUyNSwyMzUyNiwyMzUyOCwyMzUyMiwyMzUyNCwyMzUxOSwyMzU2NSwyMzY1MCwyMzk0MCwyMzk0MywyNDE1NSwyNDE2MywyNDE0OSwyNDE1MSwyNDE0OCwyNDI3NSwyNDI3OCwyNDMzMCwyNDM5MCwyNDQz''@;'; put 'put ''MiwyNDUwNSwyNDkwMywyNDg5NSwyNDkwNywyNDk1MSwyNDkzMCwyNDkzMSwyNDkyNywyNDkyMiwyNDkyMCwyNDk0OSwyNTEzMCwyNTczNSwyNTY4OCwyNTY4NCwyNTc2NCwyNTcyMCwyNTY5NSwyNTcyMiwyNTY4MSwyNTcwMywyNTY1MiwyNTcwOSwyNTcyMywyNTk3MCwyNjAxNywyNjA3MSwy''@;'; put 'put ''NjA3MCwyNjI3NCwyNjI4MCwyNjI2OSwyNzAzNiwyNzA0OCwyNzAyOSwyNzA3MywyNzA1NCwyNzA5MSwyNzA4MywyNzAzNSwyNzA2MywyNzA2NywyNzA1MSwyNzA2MCwyNzA4OCwyNzA4NSwyNzA1MywyNzA4NCwyNzA0NiwyNzA3NSwyNzA0MywyNzQ2NSwyNzQ2OCwyNzY5OSwyODQ2NywyODQz''@;'; put 'put ''NiwyODQxNCwyODQzNSwyODQwNCwyODQ1NywyODQ3OCwyODQ0OCwyODQ2MCwyODQzMSwyODQxOCwyODQ1MCwyODQxNSwyODM5OSwyODQyMiwyODQ2NSwyODQ3MiwyODQ2NiwyODQ1MSwyODQzNywyODQ1OSwyODQ2MywyODU1MiwyODQ1OCwyODM5NiwyODQxNywyODQwMiwyODM2NCwyODQwNywy''@;'; put 'put ''OTA3NiwyOTA4MSwyOTA1MywyOTA2NiwyOTA2MCwyOTA3NCwyOTI0NiwyOTMzMCwyOTMzNCwyOTUwOCwyOTUyMCwyOTc5NiwyOTc5NSwyOTgwMiwyOTgwOCwyOTgwNSwyOTk1NiwzMDA5NywzMDI0NywzMDIyMSwzMDIxOSwzMDIxNywzMDIyNywzMDQzMywzMDQzNSwzMDU5NiwzMDU4OSwzMDU5''@;'; put 'put ''MSwzMDU2MSwzMDkxMywzMDg3OSwzMDg4NywzMDg5OSwzMDg4OSwzMDg4MywzMTExOCwzMTExOSwzMTExNywzMTI3OCwzMTI4MSwzMTQwMiwzMTQwMSwzMTQ2OSwzMTQ3MSwzMTY0OSwzMTYzNywzMTYyNywzMTYwNSwzMTYzOSwzMTY0NSwzMTYzNiwzMTYzMSwzMTY3MiwzMTYyMywzMTYyMCwz''@;'; put 'put ''MTkyOSwzMTkzMywzMTkzNCwzMjE4NywzMjE3NiwzMjE1NiwzMjE4OSwzMjE5MCwzMjE2MCwzMjIwMiwzMjE4MCwzMjE3OCwzMjE3NywzMjE4NiwzMjE2MiwzMjE5MSwzMjE4MSwzMjE4NCwzMjE3MywzMjIxMCwzMjE5OSwzMjE3MiwzMjYyNCwzMjczNiwzMjczNywzMjczNSwzMjg2MiwzMjg1''@;'; put 'put ''OCwzMjkwMywzMzEwNCwzMzE1MiwzMzE2NywzMzE2MCwzMzE2MiwzMzE1MSwzMzE1NCwzMzI1NSwzMzI3NCwzMzI4NywzMzMwMCwzMzMxMCwzMzM1NSwzMzk5MywzMzk4MywzMzk5MCwzMzk4OCwzMzk0NSwzMzk1MCwzMzk3MCwzMzk0OCwzMzk5NSwzMzk3NiwzMzk4NCwzNDAwMywzMzkzNiwz''@;'; put 'put ''Mzk4MCwzNDAwMSwzMzk5NCwzNDYyMywzNDU4OCwzNDYxOSwzNDU5NCwzNDU5NywzNDYxMiwzNDU4NCwzNDY0NSwzNDYxNSwzNDYwMSwzNTA1OSwzNTA3NCwzNTA2MCwzNTA2NSwzNTA2NCwzNTA2OSwzNTA0OCwzNTA5OCwzNTA1NSwzNTQ5NCwzNTQ2OCwzNTQ4NiwzNTQ5MSwzNTQ2OSwzNTQ4''@;'; put 'put ''OSwzNTQ3NSwzNTQ5MiwzNTQ5OCwzNTQ5MywzNTQ5NiwzNTQ4MCwzNTQ3MywzNTQ4MiwzNTQ5NSwzNTk0NiwzNTk4MSwzNTk4MCwzNjA1MSwzNjA0OSwzNjA1MCwzNjIwMywzNjI0OSwzNjI0NSwzNjM0OCwzNjYyOCwzNjYyNiwzNjYyOSwzNjYyNywzNjc3MSwzNjk2MCwzNjk1MiwzNjk1Niwz''@;'; put 'put ''Njk2MywzNjk1MywzNjk1OCwzNjk2MiwzNjk1NywzNjk1NSwzNzE0NSwzNzE0NCwzNzE1MCwzNzIzNywzNzI0MCwzNzIzOSwzNzIzNiwzNzQ5NiwzNzUwNCwzNzUwOSwzNzUyOCwzNzUyNiwzNzQ5OSwzNzUyMywzNzUzMiwzNzU0NCwzNzUwMCwzNzUyMSwzODMwNSwzODMxMiwzODMxMywzODMw''@;'; put 'put ''NywzODMwOSwzODMwOCwzODU1MywzODU1NiwzODU1NSwzODYwNCwzODYxMCwzODY1NiwzODc4MCwzODc4OSwzODkwMiwzODkzNSwzODkzNiwzOTA4NywzOTA4OSwzOTE3MSwzOTE3MywzOTE4MCwzOTE3NywzOTM2MSwzOTU5OSwzOTYwMCwzOTY1NCwzOTc0NSwzOTc0Niw0MDE4MCw0MDE4Miw0''@;'; put 'put ''MDE3OSw0MDYzNiw0MDc2Myw0MDc3OCwyMDc0MCwyMDczNiwyMDczMSwyMDcyNSwyMDcyOSwyMDczOCwyMDc0NCwyMDc0NSwyMDc0MSwyMDk1NiwyMTEyNywyMTEyOCwyMTEyOSwyMTEzMywyMTEzMCwyMTIzMiwyMTQyNiwyMjA2MiwyMjA3NSwyMjA3MywyMjA2NiwyMjA3OSwyMjA2OCwyMjA1''@;'; put 'put ''NywyMjA5OSwyMjA5NCwyMjEwMywyMjEzMiwyMjA3MCwyMjA2MywyMjA2NCwyMjY1NiwyMjY4NywyMjY4NiwyMjcwNywyMjY4NCwyMjcwMiwyMjY5NywyMjY5NCwyMjg5MywyMzMwNSwyMzI5MSwyMzMwNywyMzI4NSwyMzMwOCwyMzMwNCwyMzUzNCwyMzUzMiwyMzUyOSwyMzUzMSwyMzY1Miwy''@;'; put 'put ''MzY1MywyMzk2NSwyMzk1NiwyNDE2MiwyNDE1OSwyNDE2MSwyNDI5MCwyNDI4MiwyNDI4NywyNDI4NSwyNDI5MSwyNDI4OCwyNDM5MiwyNDQzMywyNDUwMywyNDUwMSwyNDk1MCwyNDkzNSwyNDk0MiwyNDkyNSwyNDkxNywyNDk2MiwyNDk1NiwyNDk0NCwyNDkzOSwyNDk1OCwyNDk5OSwyNDk3''@;'; put 'put ''NiwyNTAwMywyNDk3NCwyNTAwNCwyNDk4NiwyNDk5NiwyNDk4MCwyNTAwNiwyNTEzNCwyNTcwNSwyNTcxMSwyNTcyMSwyNTc1OCwyNTc3OCwyNTczNiwyNTc0NCwyNTc3NiwyNTc2NSwyNTc0NywyNTc0OSwyNTc2OSwyNTc0NiwyNTc3NCwyNTc3MywyNTc3MSwyNTc1NCwyNTc3MiwyNTc1Mywy''@;'; put 'put ''NTc2MiwyNTc3OSwyNTk3MywyNTk3NSwyNTk3NiwyNjI4NiwyNjI4MywyNjI5MiwyNjI4OSwyNzE3MSwyNzE2NywyNzExMiwyNzEzNywyNzE2NiwyNzE2MSwyNzEzMywyNzE2OSwyNzE1NSwyNzE0NiwyNzEyMywyNzEzOCwyNzE0MSwyNzExNywyNzE1MywyNzQ3MiwyNzQ3MCwyNzU1NiwyNzU4''@;'; put 'put ''OSwyNzU5MCwyODQ3OSwyODU0MCwyODU0OCwyODQ5NywyODUxOCwyODUwMCwyODU1MCwyODUyNSwyODUwNywyODUzNiwyODUyNiwyODU1OCwyODUzOCwyODUyOCwyODUxNiwyODU2NywyODUwNCwyODM3MywyODUyNywyODUxMiwyODUxMSwyOTA4NywyOTEwMCwyOTEwNSwyOTA5NiwyOTI3MCwy''@;'; put 'put ''OTMzOSwyOTUxOCwyOTUyNywyOTgwMSwyOTgzNSwyOTgyNywyOTgyMiwyOTgyNCwzMDA3OSwzMDI0MCwzMDI0OSwzMDIzOSwzMDI0NCwzMDI0NiwzMDI0MSwzMDI0MiwzMDM2MiwzMDM5NCwzMDQzNiwzMDYwNiwzMDU5OSwzMDYwNCwzMDYwOSwzMDYwMywzMDkyMywzMDkxNywzMDkwNiwzMDky''@;'; put 'put ''MiwzMDkxMCwzMDkzMywzMDkwOCwzMDkyOCwzMTI5NSwzMTI5MiwzMTI5NiwzMTI5MywzMTI4NywzMTI5MSwzMTQwNywzMTQwNiwzMTY2MSwzMTY2NSwzMTY4NCwzMTY2OCwzMTY4NiwzMTY4NywzMTY4MSwzMTY0OCwzMTY5MiwzMTk0NiwzMjIyNCwzMjI0NCwzMjIzOSwzMjI1MSwzMjIxNiwz''@;'; put 'put ''MjIzNiwzMjIyMSwzMjIzMiwzMjIyNywzMjIxOCwzMjIyMiwzMjIzMywzMjE1OCwzMjIxNywzMjI0MiwzMjI0OSwzMjYyOSwzMjYzMSwzMjY4NywzMjc0NSwzMjgwNiwzMzE3OSwzMzE4MCwzMzE4MSwzMzE4NCwzMzE3OCwzMzE3NiwzNDA3MSwzNDEwOSwzNDA3NCwzNDAzMCwzNDA5MiwzNDA5''@;'; put 'put ''MywzNDA2NywzNDA2NSwzNDA4MywzNDA4MSwzNDA2OCwzNDAyOCwzNDA4NSwzNDA0NywzNDA1NCwzNDY5MCwzNDY3NiwzNDY3OCwzNDY1NiwzNDY2MiwzNDY4MCwzNDY2NCwzNDY0OSwzNDY0NywzNDYzNiwzNDY0MywzNDkwNywzNDkwOSwzNTA4OCwzNTA3OSwzNTA5MCwzNTA5MSwzNTA5Mywz''@;'; put 'put ''NTA4MiwzNTUxNiwzNTUzOCwzNTUyNywzNTUyNCwzNTQ3NywzNTUzMSwzNTU3NiwzNTUwNiwzNTUyOSwzNTUyMiwzNTUxOSwzNTUwNCwzNTU0MiwzNTUzMywzNTUxMCwzNTUxMywzNTU0NywzNTkxNiwzNTkxOCwzNTk0OCwzNjA2NCwzNjA2MiwzNjA3MCwzNjA2OCwzNjA3NiwzNjA3NywzNjA2''@;'; put 'put ''NiwzNjA2NywzNjA2MCwzNjA3NCwzNjA2NSwzNjIwNSwzNjI1NSwzNjI1OSwzNjM5NSwzNjM2OCwzNjM4MSwzNjM4NiwzNjM2NywzNjM5MywzNjM4MywzNjM4NSwzNjM4MiwzNjUzOCwzNjYzNywzNjYzNSwzNjYzOSwzNjY0OSwzNjY0NiwzNjY1MCwzNjYzNiwzNjYzOCwzNjY0NSwzNjk2OSwz''@;'; put 'put ''Njk3NCwzNjk2OCwzNjk3MywzNjk4MywzNzE2OCwzNzE2NSwzNzE1OSwzNzE2OSwzNzI1NSwzNzI1NywzNzI1OSwzNzI1MSwzNzU3MywzNzU2MywzNzU1OSwzNzYxMCwzNzU0OCwzNzYwNCwzNzU2OSwzNzU1NSwzNzU2NCwzNzU4NiwzNzU3NSwzNzYxNiwzNzU1NCwzODMxNywzODMyMSwzODY2''@;'; put 'put ''MCwzODY2MiwzODY2MywzODY2NSwzODc1MiwzODc5NywzODc5NSwzODc5OSwzODk0NSwzODk1NSwzODk0MCwzOTA5MSwzOTE3OCwzOTE4NywzOTE4NiwzOTE5MiwzOTM4OSwzOTM3NiwzOTM5MSwzOTM4NywzOTM3NywzOTM4MSwzOTM3OCwzOTM4NSwzOTYwNywzOTY2MiwzOTY2MywzOTcxOSwz''@;'; put 'put ''OTc0OSwzOTc0OCwzOTc5OSwzOTc5MSw0MDE5OCw0MDIwMSw0MDE5NSw0MDYxNyw0MDYzOCw0MDY1NCwyMjY5Niw0MDc4NiwyMDc1NCwyMDc2MCwyMDc1NiwyMDc1MiwyMDc1NywyMDg2NCwyMDkwNiwyMDk1NywyMTEzNywyMTEzOSwyMTIzNSwyMjEwNSwyMjEyMywyMjEzNywyMjEyMSwyMjEx''@;'; put 'put ''NiwyMjEzNiwyMjEyMiwyMjEyMCwyMjExNywyMjEyOSwyMjEyNywyMjEyNCwyMjExNCwyMjEzNCwyMjcyMSwyMjcxOCwyMjcyNywyMjcyNSwyMjg5NCwyMzMyNSwyMzM0OCwyMzQxNiwyMzUzNiwyMzU2NiwyNDM5NCwyNTAxMCwyNDk3NywyNTAwMSwyNDk3MCwyNTAzNywyNTAxNCwyNTAyMiwy''@;'; put 'put ''NTAzNCwyNTAzMiwyNTEzNiwyNTc5NywyNTc5MywyNTgwMywyNTc4NywyNTc4OCwyNTgxOCwyNTc5NiwyNTc5OSwyNTc5NCwyNTgwNSwyNTc5MSwyNTgxMCwyNTgxMiwyNTc5MCwyNTk3MiwyNjMxMCwyNjMxMywyNjI5NywyNjMwOCwyNjMxMSwyNjI5NiwyNzE5NywyNzE5MiwyNzE5NCwyNzIy''@;'; put 'put ''NSwyNzI0MywyNzIyNCwyNzE5MywyNzIwNCwyNzIzNCwyNzIzMywyNzIxMSwyNzIwNywyNzE4OSwyNzIzMSwyNzIwOCwyNzQ4MSwyNzUxMSwyNzY1MywyODYxMCwyODU5MywyODU3NywyODYxMSwyODU4MCwyODYwOSwyODU4MywyODU5NSwyODYwOCwyODYwMSwyODU5OCwyODU4MiwyODU3Niwy''@;'; put 'put ''ODU5NiwyOTExOCwyOTEyOSwyOTEzNiwyOTEzOCwyOTEyOCwyOTE0MSwyOTExMywyOTEzNCwyOTE0NSwyOTE0OCwyOTEyMywyOTEyNCwyOTU0NCwyOTg1MiwyOTg1OSwyOTg0OCwyOTg1NSwyOTg1NCwyOTkyMiwyOTk2NCwyOTk2NSwzMDI2MCwzMDI2NCwzMDI2NiwzMDQzOSwzMDQzNywzMDYy''@;'; put 'put ''NCwzMDYyMiwzMDYyMywzMDYyOSwzMDk1MiwzMDkzOCwzMDk1NiwzMDk1MSwzMTE0MiwzMTMwOSwzMTMxMCwzMTMwMiwzMTMwOCwzMTMwNywzMTQxOCwzMTcwNSwzMTc2MSwzMTY4OSwzMTcxNiwzMTcwNywzMTcxMywzMTcyMSwzMTcxOCwzMTk1NywzMTk1OCwzMjI2NiwzMjI3MywzMjI2NCwz''@;'; put 'put ''MjI4MywzMjI5MSwzMjI4NiwzMjI4NSwzMjI2NSwzMjI3MiwzMjYzMywzMjY5MCwzMjc1MiwzMjc1MywzMjc1MCwzMjgwOCwzMzIwMywzMzE5MywzMzE5MiwzMzI3NSwzMzI4OCwzMzM2OCwzMzM2OSwzNDEyMiwzNDEzNywzNDEyMCwzNDE1MiwzNDE1MywzNDExNSwzNDEyMSwzNDE1NywzNDE1''@;'; put 'put ''NCwzNDE0MiwzNDY5MSwzNDcxOSwzNDcxOCwzNDcyMiwzNDcwMSwzNDkxMywzNTExNCwzNTEyMiwzNTEwOSwzNTExNSwzNTEwNSwzNTI0MiwzNTIzOCwzNTU1OCwzNTU3OCwzNTU2MywzNTU2OSwzNTU4NCwzNTU0OCwzNTU1OSwzNTU2NiwzNTU4MiwzNTU4NSwzNTU4NiwzNTU3NSwzNTU2NSwz''@;'; put 'put ''NTU3MSwzNTU3NCwzNTU4MCwzNTk0NywzNTk0OSwzNTk4NywzNjA4NCwzNjQyMCwzNjQwMSwzNjQwNCwzNjQxOCwzNjQwOSwzNjQwNSwzNjY2NywzNjY1NSwzNjY2NCwzNjY1OSwzNjc3NiwzNjc3NCwzNjk4MSwzNjk4MCwzNjk4NCwzNjk3OCwzNjk4OCwzNjk4NiwzNzE3MiwzNzI2NiwzNzY2''@;'; put 'put ''NCwzNzY4NiwzNzYyNCwzNzY4MywzNzY3OSwzNzY2NiwzNzYyOCwzNzY3NSwzNzYzNiwzNzY1OCwzNzY0OCwzNzY3MCwzNzY2NSwzNzY1MywzNzY3OCwzNzY1NywzODMzMSwzODU2NywzODU2OCwzODU3MCwzODYxMywzODY3MCwzODY3MywzODY3OCwzODY2OSwzODY3NSwzODY3MSwzODc0Nywz''@;'; put 'put ''ODc0OCwzODc1OCwzODgwOCwzODk2MCwzODk2OCwzODk3MSwzODk2NywzODk1NywzODk2OSwzODk0OCwzOTE4NCwzOTIwOCwzOTE5OCwzOTE5NSwzOTIwMSwzOTE5NCwzOTQwNSwzOTM5NCwzOTQwOSwzOTYwOCwzOTYxMiwzOTY3NSwzOTY2MSwzOTcyMCwzOTgyNSw0MDIxMyw0MDIyNyw0MDIz''@;'; put 'put ''MCw0MDIzMiw0MDIxMCw0MDIxOSw0MDY2NCw0MDY2MCw0MDg0NSw0MDg2MCwyMDc3OCwyMDc2NywyMDc2OSwyMDc4NiwyMTIzNywyMjE1OCwyMjE0NCwyMjE2MCwyMjE0OSwyMjE1MSwyMjE1OSwyMjc0MSwyMjczOSwyMjczNywyMjczNCwyMzM0NCwyMzMzOCwyMzMzMiwyMzQxOCwyMzYwNywy''@;'; put 'put ''MzY1NiwyMzk5NiwyMzk5NCwyMzk5NywyMzk5MiwyNDE3MSwyNDM5NiwyNDUwOSwyNTAzMywyNTAyNiwyNTAzMSwyNTA2MiwyNTAzNSwyNTEzOCwyNTE0MCwyNTgwNiwyNTgwMiwyNTgxNiwyNTgyNCwyNTg0MCwyNTgzMCwyNTgzNiwyNTg0MSwyNTgyNiwyNTgzNywyNTk4NiwyNTk4NywyNjMy''@;'; put 'put ''OSwyNjMyNiwyNzI2NCwyNzI4NCwyNzI2OCwyNzI5OCwyNzI5MiwyNzM1NSwyNzI5OSwyNzI2MiwyNzI4NywyNzI4MCwyNzI5NiwyNzQ4NCwyNzU2NiwyNzYxMCwyNzY1NiwyODYzMiwyODY1NywyODYzOSwyODY0MCwyODYzNSwyODY0NCwyODY1MSwyODY1NSwyODU0NCwyODY1MiwyODY0MSwy''@;'; put 'put ''ODY0OSwyODYyOSwyODY1NCwyODY1NiwyOTE1OSwyOTE1MSwyOTE2NiwyOTE1OCwyOTE1NywyOTE2NSwyOTE2NCwyOTE3MiwyOTE1MiwyOTIzNywyOTI1NCwyOTU1MiwyOTU1NCwyOTg2NSwyOTg3MiwyOTg2MiwyOTg2NCwzMDI3OCwzMDI3NCwzMDI4NCwzMDQ0MiwzMDY0MywzMDYzNCwzMDY0''@;'; put 'put ''MCwzMDYzNiwzMDYzMSwzMDYzNywzMDcwMywzMDk2NywzMDk3MCwzMDk2NCwzMDk1OSwzMDk3NywzMTE0MywzMTE0NiwzMTMxOSwzMTQyMywzMTc1MSwzMTc1NywzMTc0MiwzMTczNSwzMTc1NiwzMTcxMiwzMTk2OCwzMTk2NCwzMTk2NiwzMTk3MCwzMTk2NywzMTk2MSwzMTk2NSwzMjMwMiwz''@;'; put 'put ''MjMxOCwzMjMyNiwzMjMxMSwzMjMwNiwzMjMyMywzMjI5OSwzMjMxNywzMjMwNSwzMjMyNSwzMjMyMSwzMjMwOCwzMjMxMywzMjMyOCwzMjMwOSwzMjMxOSwzMjMwMywzMjU4MCwzMjc1NSwzMjc2NCwzMjg4MSwzMjg4MiwzMjg4MCwzMjg3OSwzMjg4MywzMzIyMiwzMzIxOSwzMzIxMCwzMzIx''@;'; put 'put ''OCwzMzIxNiwzMzIxNSwzMzIxMywzMzIyNSwzMzIxNCwzMzI1NiwzMzI4OSwzMzM5MywzNDIxOCwzNDE4MCwzNDE3NCwzNDIwNCwzNDE5MywzNDE5NiwzNDIyMywzNDIwMywzNDE4MywzNDIxNiwzNDE4NiwzNDQwNywzNDc1MiwzNDc2OSwzNDczOSwzNDc3MCwzNDc1OCwzNDczMSwzNDc0Nywz''@;'; put 'put ''NDc0NiwzNDc2MCwzNDc2MywzNTEzMSwzNTEyNiwzNTE0MCwzNTEyOCwzNTEzMywzNTI0NCwzNTU5OCwzNTYwNywzNTYwOSwzNTYxMSwzNTU5NCwzNTYxNiwzNTYxMywzNTU4OCwzNTYwMCwzNTkwNSwzNTkwMywzNTk1NSwzNjA5MCwzNjA5MywzNjA5MiwzNjA4OCwzNjA5MSwzNjI2NCwzNjQy''@;'; put 'put ''NSwzNjQyNywzNjQyNCwzNjQyNiwzNjY3NiwzNjY3MCwzNjY3NCwzNjY3NywzNjY3MSwzNjk5MSwzNjk4OSwzNjk5NiwzNjk5MywzNjk5NCwzNjk5MiwzNzE3NywzNzI4MywzNzI3OCwzNzI3NiwzNzcwOSwzNzc2MiwzNzY3MiwzNzc0OSwzNzcwNiwzNzczMywzNzcwNywzNzY1NiwzNzc1OCwz''@;'; put 'put ''Nzc0MCwzNzcyMywzNzc0NCwzNzcyMiwzNzcxNiwzODM0NiwzODM0NywzODM0OCwzODM0NCwzODM0MiwzODU3NywzODU4NCwzODYxNCwzODY4NCwzODY4NiwzODgxNiwzODg2NywzODk4MiwzOTA5NCwzOTIyMSwzOTQyNSwzOTQyMywzOTg1NCwzOTg1MSwzOTg1MCwzOTg1Myw0MDI1MSw0MDI1''@;'; put 'put ''NSw0MDU4Nyw0MDY1NSw0MDY3MCw0MDY2OCw0MDY2OSw0MDY2Nyw0MDc2Niw0MDc3OSwyMTQ3NCwyMjE2NSwyMjE5MCwyMjc0NSwyMjc0NCwyMzM1MiwyNDQxMywyNTA1OSwyNTEzOSwyNTg0NCwyNTg0MiwyNTg1NCwyNTg2MiwyNTg1MCwyNTg1MSwyNTg0NywyNjAzOSwyNjMzMiwyNjQwNiwy''@;'; put 'put ''NzMxNSwyNzMwOCwyNzMzMSwyNzMyMywyNzMyMCwyNzMzMCwyNzMxMCwyNzMxMSwyNzQ4NywyNzUxMiwyNzU2NywyODY4MSwyODY4MywyODY3MCwyODY3OCwyODY2NiwyODY4OSwyODY4NywyOTE3OSwyOTE4MCwyOTE4MiwyOTE3NiwyOTU1OSwyOTU1NywyOTg2MywyOTg4NywyOTk3MywzMDI5''@;'; put 'put ''NCwzMDI5NiwzMDI5MCwzMDY1MywzMDY1NSwzMDY1MSwzMDY1MiwzMDk5MCwzMTE1MCwzMTMyOSwzMTMzMCwzMTMyOCwzMTQyOCwzMTQyOSwzMTc4NywzMTc4MywzMTc4NiwzMTc3NCwzMTc3OSwzMTc3NywzMTk3NSwzMjM0MCwzMjM0MSwzMjM1MCwzMjM0NiwzMjM1MywzMjMzOCwzMjM0NSwz''@;'; put 'put ''MjU4NCwzMjc2MSwzMjc2MywzMjg4NywzMjg4NiwzMzIyOSwzMzIzMSwzMzI5MCwzNDI1NSwzNDIxNywzNDI1MywzNDI1NiwzNDI0OSwzNDIyNCwzNDIzNCwzNDIzMywzNDIxNCwzNDc5OSwzNDc5NiwzNDgwMiwzNDc4NCwzNTIwNiwzNTI1MCwzNTMxNiwzNTYyNCwzNTY0MSwzNTYyOCwzNTYy''@;'; put 'put ''NywzNTkyMCwzNjEwMSwzNjQ0MSwzNjQ1MSwzNjQ1NCwzNjQ1MiwzNjQ0NywzNjQzNywzNjU0NCwzNjY4MSwzNjY4NSwzNjk5OSwzNjk5NSwzN2UzLDM3MjkxLDM3MjkyLDM3MzI4LDM3NzgwLDM3NzcwLDM3NzgyLDM3Nzk0LDM3ODExLDM3ODA2LDM3ODA0LDM3ODA4LDM3Nzg0LDM3Nzg2LDM3''@;'; put 'put ''NzgzLDM4MzU2LDM4MzU4LDM4MzUyLDM4MzU3LDM4NjI2LDM4NjIwLDM4NjE3LDM4NjE5LDM4NjIyLDM4NjkyLDM4ODE5LDM4ODIyLDM4ODI5LDM4OTA1LDM4OTg5LDM4OTkxLDM4OTg4LDM4OTkwLDM4OTk1LDM5MDk4LDM5MjMwLDM5MjMxLDM5MjI5LDM5MjE0LDM5MzMzLDM5NDM4LDM5NjE3''@;'; put 'put ''LDM5NjgzLDM5Njg2LDM5NzU5LDM5NzU4LDM5NzU3LDM5ODgyLDM5ODgxLDM5OTMzLDM5ODgwLDM5ODcyLDQwMjczLDQwMjg1LDQwMjg4LDQwNjcyLDQwNzI1LDQwNzQ4LDIwNzg3LDIyMTgxLDIyNzUwLDIyNzUxLDIyNzU0LDIzNTQxLDQwODQ4LDI0MzAwLDI1MDc0LDI1MDc5LDI1MDc4LDI1''@;'; put 'put ''MDc3LDI1ODU2LDI1ODcxLDI2MzM2LDI2MzMzLDI3MzY1LDI3MzU3LDI3MzU0LDI3MzQ3LDI4Njk5LDI4NzAzLDI4NzEyLDI4Njk4LDI4NzAxLDI4NjkzLDI4Njk2LDI5MTkwLDI5MTk3LDI5MjcyLDI5MzQ2LDI5NTYwLDI5NTYyLDI5ODg1LDI5ODk4LDI5OTIzLDMwMDg3LDMwMDg2LDMwMzAz''@;'; put 'put ''LDMwMzA1LDMwNjYzLDMxMDAxLDMxMTUzLDMxMzM5LDMxMzM3LDMxODA2LDMxODA3LDMxODAwLDMxODA1LDMxNzk5LDMxODA4LDMyMzYzLDMyMzY1LDMyMzc3LDMyMzYxLDMyMzYyLDMyNjQ1LDMyMzcxLDMyNjk0LDMyNjk3LDMyNjk2LDMzMjQwLDM0MjgxLDM0MjY5LDM0MjgyLDM0MjYxLDM0''@;'; put 'put ''Mjc2LDM0Mjc3LDM0Mjk1LDM0ODExLDM0ODIxLDM0ODI5LDM0ODA5LDM0ODE0LDM1MTY4LDM1MTY3LDM1MTU4LDM1MTY2LDM1NjQ5LDM1Njc2LDM1NjcyLDM1NjU3LDM1Njc0LDM1NjYyLDM1NjYzLDM1NjU0LDM1NjczLDM2MTA0LDM2MTA2LDM2NDc2LDM2NDY2LDM2NDg3LDM2NDcwLDM2NDYw''@;'; put 'put ''LDM2NDc0LDM2NDY4LDM2NjkyLDM2Njg2LDM2NzgxLDM3MDAyLDM3MDAzLDM3Mjk3LDM3Mjk0LDM3ODU3LDM3ODQxLDM3ODU1LDM3ODI3LDM3ODMyLDM3ODUyLDM3ODUzLDM3ODQ2LDM3ODU4LDM3ODM3LDM3ODQ4LDM3ODYwLDM3ODQ3LDM3ODY0LDM4MzY0LDM4NTgwLDM4NjI3LDM4Njk4LDM4''@;'; put 'put ''Njk1LDM4NzUzLDM4ODc2LDM4OTA3LDM5MDA2LDM5ZTMsMzkwMDMsMzkxMDAsMzkyMzcsMzkyNDEsMzk0NDYsMzk0NDksMzk2OTMsMzk5MTIsMzk5MTEsMzk4OTQsMzk4OTksNDAzMjksNDAyODksNDAzMDYsNDAyOTgsNDAzMDAsNDA1OTQsNDA1OTksNDA1OTUsNDA2MjgsMjEyNDAsMjIxODQs''@;'; put 'put ''MjIxOTksMjIxOTgsMjIxOTYsMjIyMDQsMjI3NTYsMjMzNjAsMjMzNjMsMjM0MjEsMjM1NDIsMjQwMDksMjUwODAsMjUwODIsMjU4ODAsMjU4NzYsMjU4ODEsMjYzNDIsMjY0MDcsMjczNzIsMjg3MzQsMjg3MjAsMjg3MjIsMjkyMDAsMjk1NjMsMjk5MDMsMzAzMDYsMzAzMDksMzEwMTQsMzEw''@;'; put 'put ''MTgsMzEwMjAsMzEwMTksMzE0MzEsMzE0NzgsMzE4MjAsMzE4MTEsMzE4MjEsMzE5ODMsMzE5ODQsMzY3ODIsMzIzODEsMzIzODAsMzIzODYsMzI1ODgsMzI3NjgsMzMyNDIsMzMzODIsMzQyOTksMzQyOTcsMzQzMjEsMzQyOTgsMzQzMTAsMzQzMTUsMzQzMTEsMzQzMTQsMzQ4MzYsMzQ4Mzcs''@;'; put 'put ''MzUxNzIsMzUyNTgsMzUzMjAsMzU2OTYsMzU2OTIsMzU2ODYsMzU2OTUsMzU2NzksMzU2OTEsMzYxMTEsMzYxMDksMzY0ODksMzY0ODEsMzY0ODUsMzY0ODIsMzczMDAsMzczMjMsMzc5MTIsMzc4OTEsMzc4ODUsMzgzNjksMzg3MDQsMzkxMDgsMzkyNTAsMzkyNDksMzkzMzYsMzk0NjcsMzk0''@;'; put 'put ''NzIsMzk0NzksMzk0NzcsMzk5NTUsMzk5NDksNDA1NjksNDA2MjksNDA2ODAsNDA3NTEsNDA3OTksNDA4MDMsNDA4MDEsMjA3OTEsMjA3OTIsMjIyMDksMjIyMDgsMjIyMTAsMjI4MDQsMjM2NjAsMjQwMTMsMjUwODQsMjUwODYsMjU4ODUsMjU4ODQsMjYwMDUsMjYzNDUsMjczODcsMjczOTYs''@;'; put 'put ''MjczODYsMjc1NzAsMjg3NDgsMjkyMTEsMjkzNTEsMjk5MTAsMjk5MDgsMzAzMTMsMzA2NzUsMzE4MjQsMzIzOTksMzIzOTYsMzI3MDAsMzQzMjcsMzQzNDksMzQzMzAsMzQ4NTEsMzQ4NTAsMzQ4NDksMzQ4NDcsMzUxNzgsMzUxODAsMzUyNjEsMzU3MDAsMzU3MDMsMzU3MDksMzYxMTUsMzY0''@;'; put 'put ''OTAsMzY0OTMsMzY0OTEsMzY3MDMsMzY3ODMsMzczMDYsMzc5MzQsMzc5MzksMzc5NDEsMzc5NDYsMzc5NDQsMzc5MzgsMzc5MzEsMzgzNzAsMzg3MTIsMzg3MTMsMzg3MDYsMzg5MTEsMzkwMTUsMzkwMTMsMzkyNTUsMzk0OTMsMzk0OTEsMzk0ODgsMzk0ODYsMzk2MzEsMzk3NjQsMzk3NjEs''@;'; put 'put ''Mzk5ODEsMzk5NzMsNDAzNjcsNDAzNzIsNDAzODYsNDAzNzYsNDA2MDUsNDA2ODcsNDA3MjksNDA3OTYsNDA4MDYsNDA4MDcsMjA3OTYsMjA3OTUsMjIyMTYsMjIyMTgsMjIyMTcsMjM0MjMsMjQwMjAsMjQwMTgsMjQzOTgsMjUwODcsMjU4OTIsMjc0MDIsMjc0ODksMjg3NTMsMjg3NjAsMjk1''@;'; put 'put ''NjgsMjk5MjQsMzAwOTAsMzAzMTgsMzAzMTYsMzExNTUsMzE4NDAsMzE4MzksMzI4OTQsMzI4OTMsMzMyNDcsMzUxODYsMzUxODMsMzUzMjQsMzU3MTIsMzYxMTgsMzYxMTksMzY0OTcsMzY0OTksMzY3MDUsMzcxOTIsMzc5NTYsMzc5NjksMzc5NzAsMzg3MTcsMzg3MTgsMzg4NTEsMzg4NDks''@;'; put 'put ''MzkwMTksMzkyNTMsMzk1MDksMzk1MDEsMzk2MzQsMzk3MDYsNDAwMDksMzk5ODUsMzk5OTgsMzk5OTUsNDA0MDMsNDA0MDcsNDA3NTYsNDA4MTIsNDA4MTAsNDA4NTIsMjIyMjAsMjQwMjIsMjUwODgsMjU4OTEsMjU4OTksMjU4OTgsMjYzNDgsMjc0MDgsMjk5MTQsMzE0MzQsMzE4NDQsMzE4''@;'; put 'put ''NDMsMzE4NDUsMzI0MDMsMzI0MDYsMzI0MDQsMzMyNTAsMzQzNjAsMzQzNjcsMzQ4NjUsMzU3MjIsMzcwMDgsMzcwMDcsMzc5ODcsMzc5ODQsMzc5ODgsMzg3NjAsMzkwMjMsMzkyNjAsMzk1MTQsMzk1MTUsMzk1MTEsMzk2MzUsMzk2MzYsMzk2MzMsNDAwMjAsNDAwMjMsNDAwMjIsNDA0MjEs''@;'; put 'put ''NDA2MDcsNDA2OTIsMjIyMjUsMjI3NjEsMjU5MDAsMjg3NjYsMzAzMjEsMzAzMjIsMzA2NzksMzI1OTIsMzI2NDgsMzQ4NzAsMzQ4NzMsMzQ5MTQsMzU3MzEsMzU3MzAsMzU3MzQsMzMzOTksMzYxMjMsMzczMTIsMzc5OTQsMzg3MjIsMzg3MjgsMzg3MjQsMzg4NTQsMzkwMjQsMzk1MTksMzk3''@;'; put 'put ''MTQsMzk3NjgsNDAwMzEsNDA0NDEsNDA0NDIsNDA1NzIsNDA1NzMsNDA3MTEsNDA4MjMsNDA4MTgsMjQzMDcsMjc0MTQsMjg3NzEsMzE4NTIsMzE4NTQsMzQ4NzUsMzUyNjQsMzY1MTMsMzczMTMsMzgwMDIsMzhlMywzOTAyNSwzOTI2MiwzOTYzOCwzOTcxNSw0MDY1MiwyODc3MiwzMDY4Miwz''@;'; put 'put ''NTczOCwzODAwNywzODg1NywzOTUyMiwzOTUyNSwzMjQxMiwzNTc0MCwzNjUyMiwzNzMxNywzODAxMywzODAxNCwzODAxMiw0MDA1NSw0MDA1Niw0MDY5NSwzNTkyNCwzODAxNSw0MDQ3NCwyOTIyNCwzOTUzMCwzOTcyOSw0MDQ3NSw0MDQ3OCwzMTg1OCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkz''@;'; put 'put ''MTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSwyMDAyMiwyMDAzMSwyMDEwMSwyMDEyOCwyMDg2NiwyMDg4Niwy''@;'; put 'put ''MDkwNywyMTI0MSwyMTMwNCwyMTM1MywyMTQzMCwyMjc5NCwyMzQyNCwyNDAyNywxMjA4MywyNDE5MSwyNDMwOCwyNDQwMCwyNDQxNywyNTkwOCwyNjA4MCwzMDA5OCwzMDMyNiwzNjc4OSwzODU4MiwxNjgsNzEwLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEy''@;'; put 'put ''Mjk0LDEyMjk1LDEyNTQwLDY1MzM5LDY1MzQxLDEwMDQ1LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0''@;'; put 'put ''LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEy''@;'; put 'put ''NDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5''@;'; put 'put ''LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEy''@;'; put 'put ''NDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3''@;'; put 'put ''LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEy''@;'; put 'put ''NTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEw''@;'; put 'put ''NjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEw''@;'; put 'put ''OTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg2NzksODYzMiw4NjMzLDEyNzUxLDEzMTI3NiwyMDA1OCwxMzEyMTAsMjA5OTQsMTc1NTMsNDA4ODAsMjA4NzIsNDA4ODEsMTYxMjg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDEyNDQzLDEyNDQ0LDExOTA0LDExOTA4LDExOTEwLDExOTExLDExOTEyLDExOTE0LDExOTE2LDExOTE3LDExOTI1LDExOTMyLDExOTMzLDExOTQxLDExOTQzLDExOTQ2LDExOTQ4LDExOTUwLDExOTU4LDExOTY0''@;'; put 'put ''LDExOTY2LDExOTc0LDExOTc4LDExOTgwLDExOTgxLDExOTgzLDExOTkwLDExOTkxLDExOTk4LDEyMDAzLG51bGwsbnVsbCxudWxsLDY0Myw1OTIsNjAzLDU5Niw2MjksMzM5LDI0OCwzMzEsNjUwLDYxOCwyMDAzNCwyMDA2MCwyMDk4MSwyMTI3NCwyMTM3OCwxOTk3NSwxOTk4MCwyMDAzOSwy''@;'; put 'put ''MDEwOSwyMjIzMSw2NDAxMiwyMzY2MiwyNDQzNSwxOTk4MywyMDg3MSwxOTk4MiwyMDAxNCwyMDExNSwyMDE2MiwyMDE2OSwyMDE2OCwyMDg4OCwyMTI0NCwyMTM1NiwyMTQzMywyMjMwNCwyMjc4NywyMjgyOCwyMzU2OCwyNDA2MywyNjA4MSwyNzU3MSwyNzU5NiwyNzY2OCwyOTI0NywyMDAx''@;'; put 'put ''NywyMDAyOCwyMDIwMCwyMDE4OCwyMDIwMSwyMDE5MywyMDE4OSwyMDE4NiwyMTAwNCwyMTI3NiwyMTMyNCwyMjMwNiwyMjMwNywyMjgwNywyMjgzMSwyMzQyNSwyMzQyOCwyMzU3MCwyMzYxMSwyMzY2OCwyMzY2NywyNDA2OCwyNDE5MiwyNDE5NCwyNDUyMSwyNTA5NywyNTE2OCwyNzY2OSwy''@;'; put 'put ''NzcwMiwyNzcxNSwyNzcxMSwyNzcwNywyOTM1OCwyOTM2MCwyOTU3OCwzMTE2MCwzMjkwNiwzODQzMCwyMDIzOCwyMDI0OCwyMDI2OCwyMDIxMywyMDI0NCwyMDIwOSwyMDIyNCwyMDIxNSwyMDIzMiwyMDI1MywyMDIyNiwyMDIyOSwyMDI1OCwyMDI0MywyMDIyOCwyMDIxMiwyMDI0MiwyMDkx''@;'; put 'put ''MywyMTAxMSwyMTAwMSwyMTAwOCwyMTE1OCwyMTI4MiwyMTI3OSwyMTMyNSwyMTM4NiwyMTUxMSwyMjI0MSwyMjIzOSwyMjMxOCwyMjMxNCwyMjMyNCwyMjg0NCwyMjkxMiwyMjkwOCwyMjkxNywyMjkwNywyMjkxMCwyMjkwMywyMjkxMSwyMzM4MiwyMzU3MywyMzU4OSwyMzY3NiwyMzY3NCwy''@;'; put 'put ''MzY3NSwyMzY3OCwyNDAzMSwyNDE4MSwyNDE5NiwyNDMyMiwyNDM0NiwyNDQzNiwyNDUzMywyNDUzMiwyNDUyNywyNTE4MCwyNTE4MiwyNTE4OCwyNTE4NSwyNTE5MCwyNTE4NiwyNTE3NywyNTE4NCwyNTE3OCwyNTE4OSwyNjA5NSwyNjA5NCwyNjQzMCwyNjQyNSwyNjQyNCwyNjQyNywyNjQy''@;'; put 'put ''NiwyNjQzMSwyNjQyOCwyNjQxOSwyNzY3MiwyNzcxOCwyNzczMCwyNzc0MCwyNzcyNywyNzcyMiwyNzczMiwyNzcyMywyNzcyNCwyODc4NSwyOTI3OCwyOTM2NCwyOTM2NSwyOTU4MiwyOTk5NCwzMDMzNSwzMTM0OSwzMjU5MywzMzQwMCwzMzQwNCwzMzQwOCwzMzQwNSwzMzQwNywzNDM4MSwz''@;'; put 'put ''NTE5OCwzNzAxNywzNzAxNSwzNzAxNiwzNzAxOSwzNzAxMiwzODQzNCwzODQzNiwzODQzMiwzODQzNSwyMDMxMCwyMDI4MywyMDMyMiwyMDI5NywyMDMwNywyMDMyNCwyMDI4NiwyMDMyNywyMDMwNiwyMDMxOSwyMDI4OSwyMDMxMiwyMDI2OSwyMDI3NSwyMDI4NywyMDMyMSwyMDg3OSwyMDky''@;'; put 'put ''MSwyMTAyMCwyMTAyMiwyMTAyNSwyMTE2NSwyMTE2NiwyMTI1NywyMTM0NywyMTM2MiwyMTM5MCwyMTM5MSwyMTU1MiwyMTU1OSwyMTU0NiwyMTU4OCwyMTU3MywyMTUyOSwyMTUzMiwyMTU0MSwyMTUyOCwyMTU2NSwyMTU4MywyMTU2OSwyMTU0NCwyMTU0MCwyMTU3NSwyMjI1NCwyMjI0Nywy''@;'; put 'put ''MjI0NSwyMjMzNywyMjM0MSwyMjM0OCwyMjM0NSwyMjM0NywyMjM1NCwyMjc5MCwyMjg0OCwyMjk1MCwyMjkzNiwyMjk0NCwyMjkzNSwyMjkyNiwyMjk0NiwyMjkyOCwyMjkyNywyMjk1MSwyMjk0NSwyMzQzOCwyMzQ0MiwyMzU5MiwyMzU5NCwyMzY5MywyMzY5NSwyMzY4OCwyMzY5MSwyMzY4''@;'; put 'put ''OSwyMzY5OCwyMzY5MCwyMzY4NiwyMzY5OSwyMzcwMSwyNDAzMiwyNDA3NCwyNDA3OCwyNDIwMywyNDIwMSwyNDIwNCwyNDIwMCwyNDIwNSwyNDMyNSwyNDM0OSwyNDQ0MCwyNDQzOCwyNDUzMCwyNDUyOSwyNDUyOCwyNDU1NywyNDU1MiwyNDU1OCwyNDU2MywyNDU0NSwyNDU0OCwyNDU0Nywy''@;'; put 'put ''NDU3MCwyNDU1OSwyNDU2NywyNDU3MSwyNDU3NiwyNDU2NCwyNTE0NiwyNTIxOSwyNTIyOCwyNTIzMCwyNTIzMSwyNTIzNiwyNTIyMywyNTIwMSwyNTIxMSwyNTIxMCwyNTIwMCwyNTIxNywyNTIyNCwyNTIwNywyNTIxMywyNTIwMiwyNTIwNCwyNTkxMSwyNjA5NiwyNjEwMCwyNjA5OSwyNjA5''@;'; put 'put ''OCwyNjEwMSwyNjQzNywyNjQzOSwyNjQ1NywyNjQ1MywyNjQ0NCwyNjQ0MCwyNjQ2MSwyNjQ0NSwyNjQ1OCwyNjQ0MywyNzYwMCwyNzY3MywyNzY3NCwyNzc2OCwyNzc1MSwyNzc1NSwyNzc4MCwyNzc4NywyNzc5MSwyNzc2MSwyNzc1OSwyNzc1MywyNzgwMiwyNzc1NywyNzc4MywyNzc5Nywy''@;'; put 'put ''NzgwNCwyNzc1MCwyNzc2MywyNzc0OSwyNzc3MSwyNzc5MCwyODc4OCwyODc5NCwyOTI4MywyOTM3NSwyOTM3MywyOTM3OSwyOTM4MiwyOTM3NywyOTM3MCwyOTM4MSwyOTU4OSwyOTU5MSwyOTU4NywyOTU4OCwyOTU4NiwzMDAxMCwzMDAwOSwzMDEwMCwzMDEwMSwzMDMzNywzMTAzNywzMjgy''@;'; put 'put ''MCwzMjkxNywzMjkyMSwzMjkxMiwzMjkxNCwzMjkyNCwzMzQyNCwzMzQyMywzMzQxMywzMzQyMiwzMzQyNSwzMzQyNywzMzQxOCwzMzQxMSwzMzQxMiwzNTk2MCwzNjgwOSwzNjc5OSwzNzAyMywzNzAyNSwzNzAyOSwzNzAyMiwzNzAzMSwzNzAyNCwzODQ0OCwzODQ0MCwzODQ0NywzODQ0NSwy''@;'; put 'put ''MDAxOSwyMDM3NiwyMDM0OCwyMDM1NywyMDM0OSwyMDM1MiwyMDM1OSwyMDM0MiwyMDM0MCwyMDM2MSwyMDM1NiwyMDM0MywyMDMwMCwyMDM3NSwyMDMzMCwyMDM3OCwyMDM0NSwyMDM1MywyMDM0NCwyMDM2OCwyMDM4MCwyMDM3MiwyMDM4MiwyMDM3MCwyMDM1NCwyMDM3MywyMDMzMSwyMDMz''@;'; put 'put ''NCwyMDg5NCwyMDkyNCwyMDkyNiwyMTA0NSwyMTA0MiwyMTA0MywyMTA2MiwyMTA0MSwyMTE4MCwyMTI1OCwyMTI1OSwyMTMwOCwyMTM5NCwyMTM5NiwyMTYzOSwyMTYzMSwyMTYzMywyMTY0OSwyMTYzNCwyMTY0MCwyMTYxMSwyMTYyNiwyMTYzMCwyMTYwNSwyMTYxMiwyMTYyMCwyMTYwNiwy''@;'; put 'put ''MTY0NSwyMTYxNSwyMTYwMSwyMTYwMCwyMTY1NiwyMTYwMywyMTYwNywyMTYwNCwyMjI2MywyMjI2NSwyMjM4MywyMjM4NiwyMjM4MSwyMjM3OSwyMjM4NSwyMjM4NCwyMjM5MCwyMjQwMCwyMjM4OSwyMjM5NSwyMjM4NywyMjM4OCwyMjM3MCwyMjM3NiwyMjM5NywyMjc5NiwyMjg1MywyMjk2''@;'; put 'put ''NSwyMjk3MCwyMjk5MSwyMjk5MCwyMjk2MiwyMjk4OCwyMjk3NywyMjk2NiwyMjk3MiwyMjk3OSwyMjk5OCwyMjk2MSwyMjk3MywyMjk3NiwyMjk4NCwyMjk2NCwyMjk4MywyMzM5NCwyMzM5NywyMzQ0MywyMzQ0NSwyMzYyMCwyMzYyMywyMzcyNiwyMzcxNiwyMzcxMiwyMzczMywyMzcyNywy''@;'; put 'put ''MzcyMCwyMzcyNCwyMzcxMSwyMzcxNSwyMzcyNSwyMzcxNCwyMzcyMiwyMzcxOSwyMzcwOSwyMzcxNywyMzczNCwyMzcyOCwyMzcxOCwyNDA4NywyNDA4NCwyNDA4OSwyNDM2MCwyNDM1NCwyNDM1NSwyNDM1NiwyNDQwNCwyNDQ1MCwyNDQ0NiwyNDQ0NSwyNDU0MiwyNDU0OSwyNDYyMSwyNDYx''@;'; put 'put ''NCwyNDYwMSwyNDYyNiwyNDU4NywyNDYyOCwyNDU4NiwyNDU5OSwyNDYyNywyNDYwMiwyNDYwNiwyNDYyMCwyNDYxMCwyNDU4OSwyNDU5MiwyNDYyMiwyNDU5NSwyNDU5MywyNDU4OCwyNDU4NSwyNDYwNCwyNTEwOCwyNTE0OSwyNTI2MSwyNTI2OCwyNTI5NywyNTI3OCwyNTI1OCwyNTI3MCwy''@;'; put 'put ''NTI5MCwyNTI2MiwyNTI2NywyNTI2MywyNTI3NSwyNTI1NywyNTI2NCwyNTI3MiwyNTkxNywyNjAyNCwyNjA0MywyNjEyMSwyNjEwOCwyNjExNiwyNjEzMCwyNjEyMCwyNjEwNywyNjExNSwyNjEyMywyNjEyNSwyNjExNywyNjEwOSwyNjEyOSwyNjEyOCwyNjM1OCwyNjM3OCwyNjUwMSwyNjQ3''@;'; put 'put ''NiwyNjUxMCwyNjUxNCwyNjQ4NiwyNjQ5MSwyNjUyMCwyNjUwMiwyNjUwMCwyNjQ4NCwyNjUwOSwyNjUwOCwyNjQ5MCwyNjUyNywyNjUxMywyNjUyMSwyNjQ5OSwyNjQ5MywyNjQ5NywyNjQ4OCwyNjQ4OSwyNjUxNiwyNzQyOSwyNzUyMCwyNzUxOCwyNzYxNCwyNzY3NywyNzc5NSwyNzg4NCwy''@;'; put 'put ''Nzg4MywyNzg4NiwyNzg2NSwyNzgzMCwyNzg2MCwyNzgyMSwyNzg3OSwyNzgzMSwyNzg1NiwyNzg0MiwyNzgzNCwyNzg0MywyNzg0NiwyNzg4NSwyNzg5MCwyNzg1OCwyNzg2OSwyNzgyOCwyNzc4NiwyNzgwNSwyNzc3NiwyNzg3MCwyNzg0MCwyNzk1MiwyNzg1MywyNzg0NywyNzgyNCwyNzg5''@;'; put 'put ''NywyNzg1NSwyNzg4MSwyNzg1NywyODgyMCwyODgyNCwyODgwNSwyODgxOSwyODgwNiwyODgwNCwyODgxNywyODgyMiwyODgwMiwyODgyNiwyODgwMywyOTI5MCwyOTM5OCwyOTM4NywyOTQwMCwyOTM4NSwyOTQwNCwyOTM5NCwyOTM5NiwyOTQwMiwyOTM4OCwyOTM5MywyOTYwNCwyOTYwMSwy''@;'; put 'put ''OTYxMywyOTYwNiwyOTYwMiwyOTYwMCwyOTYxMiwyOTU5NywyOTkxNywyOTkyOCwzMDAxNSwzMDAxNiwzMDAxNCwzMDA5MiwzMDEwNCwzMDM4MywzMDQ1MSwzMDQ0OSwzMDQ0OCwzMDQ1MywzMDcxMiwzMDcxNiwzMDcxMywzMDcxNSwzMDcxNCwzMDcxMSwzMTA0MiwzMTAzOSwzMTE3MywzMTM1''@;'; put 'put ''MiwzMTM1NSwzMTQ4MywzMTg2MSwzMTk5NywzMjgyMSwzMjkxMSwzMjk0MiwzMjkzMSwzMjk1MiwzMjk0OSwzMjk0MSwzMzMxMiwzMzQ0MCwzMzQ3MiwzMzQ1MSwzMzQzNCwzMzQzMiwzMzQzNSwzMzQ2MSwzMzQ0NywzMzQ1NCwzMzQ2OCwzMzQzOCwzMzQ2NiwzMzQ2MCwzMzQ0OCwzMzQ0MSwz''@;'; put 'put ''MzQ0OSwzMzQ3NCwzMzQ0NCwzMzQ3NSwzMzQ2MiwzMzQ0MiwzNDQxNiwzNDQxNSwzNDQxMywzNDQxNCwzNTkyNiwzNjgxOCwzNjgxMSwzNjgxOSwzNjgxMywzNjgyMiwzNjgyMSwzNjgyMywzNzA0MiwzNzA0NCwzNzAzOSwzNzA0MywzNzA0MCwzODQ1NywzODQ2MSwzODQ2MCwzODQ1OCwzODQ2''@;'; put 'put ''NywyMDQyOSwyMDQyMSwyMDQzNSwyMDQwMiwyMDQyNSwyMDQyNywyMDQxNywyMDQzNiwyMDQ0NCwyMDQ0MSwyMDQxMSwyMDQwMywyMDQ0MywyMDQyMywyMDQzOCwyMDQxMCwyMDQxNiwyMDQwOSwyMDQ2MCwyMTA2MCwyMTA2NSwyMTE4NCwyMTE4NiwyMTMwOSwyMTM3MiwyMTM5OSwyMTM5OCwy''@;'; put 'put ''MTQwMSwyMTQwMCwyMTY5MCwyMTY2NSwyMTY3NywyMTY2OSwyMTcxMSwyMTY5OSwzMzU0OSwyMTY4NywyMTY3OCwyMTcxOCwyMTY4NiwyMTcwMSwyMTcwMiwyMTY2NCwyMTYxNiwyMTY5MiwyMTY2NiwyMTY5NCwyMTYxOCwyMTcyNiwyMTY4MCwyMjQ1MywyMjQzMCwyMjQzMSwyMjQzNiwyMjQx''@;'; put 'put ''MiwyMjQyMywyMjQyOSwyMjQyNywyMjQyMCwyMjQyNCwyMjQxNSwyMjQyNSwyMjQzNywyMjQyNiwyMjQyMSwyMjc3MiwyMjc5NywyMjg2NywyMzAwOSwyMzAwNiwyMzAyMiwyMzA0MCwyMzAyNSwyMzAwNSwyMzAzNCwyMzAzNywyMzAzNiwyMzAzMCwyMzAxMiwyMzAyNiwyMzAzMSwyMzAwMywy''@;'; put 'put ''MzAxNywyMzAyNywyMzAyOSwyMzAwOCwyMzAzOCwyMzAyOCwyMzAyMSwyMzQ2NCwyMzYyOCwyMzc2MCwyMzc2OCwyMzc1NiwyMzc2NywyMzc1NSwyMzc3MSwyMzc3NCwyMzc3MCwyMzc1MywyMzc1MSwyMzc1NCwyMzc2NiwyMzc2MywyMzc2NCwyMzc1OSwyMzc1MiwyMzc1MCwyMzc1OCwyMzc3''@;'; put 'put ''NSwyMzgwMCwyNDA1NywyNDA5NywyNDA5OCwyNDA5OSwyNDA5NiwyNDEwMCwyNDI0MCwyNDIyOCwyNDIyNiwyNDIxOSwyNDIyNywyNDIyOSwyNDMyNywyNDM2NiwyNDQwNiwyNDQ1NCwyNDYzMSwyNDYzMywyNDY2MCwyNDY5MCwyNDY3MCwyNDY0NSwyNDY1OSwyNDY0NywyNDY0OSwyNDY2Nywy''@;'; put 'put ''NDY1MiwyNDY0MCwyNDY0MiwyNDY3MSwyNDYxMiwyNDY0NCwyNDY2NCwyNDY3OCwyNDY4NiwyNTE1NCwyNTE1NSwyNTI5NSwyNTM1NywyNTM1NSwyNTMzMywyNTM1OCwyNTM0NywyNTMyMywyNTMzNywyNTM1OSwyNTM1NiwyNTMzNiwyNTMzNCwyNTM0NCwyNTM2MywyNTM2NCwyNTMzOCwyNTM2''@;'; put 'put ''NSwyNTMzOSwyNTMyOCwyNTkyMSwyNTkyMywyNjAyNiwyNjA0NywyNjE2NiwyNjE0NSwyNjE2MiwyNjE2NSwyNjE0MCwyNjE1MCwyNjE0NiwyNjE2MywyNjE1NSwyNjE3MCwyNjE0MSwyNjE2NCwyNjE2OSwyNjE1OCwyNjM4MywyNjM4NCwyNjU2MSwyNjYxMCwyNjU2OCwyNjU1NCwyNjU4OCwy''@;'; put 'put ''NjU1NSwyNjYxNiwyNjU4NCwyNjU2MCwyNjU1MSwyNjU2NSwyNjYwMywyNjU5NiwyNjU5MSwyNjU0OSwyNjU3MywyNjU0NywyNjYxNSwyNjYxNCwyNjYwNiwyNjU5NSwyNjU2MiwyNjU1MywyNjU3NCwyNjU5OSwyNjYwOCwyNjU0NiwyNjYyMCwyNjU2NiwyNjYwNSwyNjU3MiwyNjU0MiwyNjU5''@;'; put 'put ''OCwyNjU4NywyNjYxOCwyNjU2OSwyNjU3MCwyNjU2MywyNjYwMiwyNjU3MSwyNzQzMiwyNzUyMiwyNzUyNCwyNzU3NCwyNzYwNiwyNzYwOCwyNzYxNiwyNzY4MCwyNzY4MSwyNzk0NCwyNzk1NiwyNzk0OSwyNzkzNSwyNzk2NCwyNzk2NywyNzkyMiwyNzkxNCwyNzg2NiwyNzk1NSwyNzkwOCwy''@;'; put 'put ''NzkyOSwyNzk2MiwyNzkzMCwyNzkyMSwyNzkwNCwyNzkzMywyNzk3MCwyNzkwNSwyNzkyOCwyNzk1OSwyNzkwNywyNzkxOSwyNzk2OCwyNzkxMSwyNzkzNiwyNzk0OCwyNzkxMiwyNzkzOCwyNzkxMywyNzkyMCwyODg1NSwyODgzMSwyODg2MiwyODg0OSwyODg0OCwyODgzMywyODg1MiwyODg1''@;'; put 'put ''MywyODg0MSwyOTI0OSwyOTI1NywyOTI1OCwyOTI5MiwyOTI5NiwyOTI5OSwyOTI5NCwyOTM4NiwyOTQxMiwyOTQxNiwyOTQxOSwyOTQwNywyOTQxOCwyOTQxNCwyOTQxMSwyOTU3MywyOTY0NCwyOTYzNCwyOTY0MCwyOTYzNywyOTYyNSwyOTYyMiwyOTYyMSwyOTYyMCwyOTY3NSwyOTYzMSwy''@;'; put 'put ''OTYzOSwyOTYzMCwyOTYzNSwyOTYzOCwyOTYyNCwyOTY0MywyOTkzMiwyOTkzNCwyOTk5OCwzMDAyMywzMDAyNCwzMDExOSwzMDEyMiwzMDMyOSwzMDQwNCwzMDQ3MiwzMDQ2NywzMDQ2OCwzMDQ2OSwzMDQ3NCwzMDQ1NSwzMDQ1OSwzMDQ1OCwzMDY5NSwzMDY5NiwzMDcyNiwzMDczNywzMDcz''@;'; put 'put ''OCwzMDcyNSwzMDczNiwzMDczNSwzMDczNCwzMDcyOSwzMDcyMywzMDczOSwzMTA1MCwzMTA1MiwzMTA1MSwzMTA0NSwzMTA0NCwzMTE4OSwzMTE4MSwzMTE4MywzMTE5MCwzMTE4MiwzMTM2MCwzMTM1OCwzMTQ0MSwzMTQ4OCwzMTQ4OSwzMTg2NiwzMTg2NCwzMTg2NSwzMTg3MSwzMTg3Miwz''@;'; put 'put ''MTg3MywzMjAwMywzMjAwOCwzMjAwMSwzMjYwMCwzMjY1NywzMjY1MywzMjcwMiwzMjc3NSwzMjc4MiwzMjc4MywzMjc4OCwzMjgyMywzMjk4NCwzMjk2NywzMjk5MiwzMjk3NywzMjk2OCwzMjk2MiwzMjk3NiwzMjk2NSwzMjk5NSwzMjk4NSwzMjk4OCwzMjk3MCwzMjk4MSwzMjk2OSwzMjk3''@;'; put 'put ''NSwzMjk4MywzMjk5OCwzMjk3MywzMzI3OSwzMzMxMywzMzQyOCwzMzQ5NywzMzUzNCwzMzUyOSwzMzU0MywzMzUxMiwzMzUzNiwzMzQ5MywzMzU5NCwzMzUxNSwzMzQ5NCwzMzUyNCwzMzUxNiwzMzUwNSwzMzUyMiwzMzUyNSwzMzU0OCwzMzUzMSwzMzUyNiwzMzUyMCwzMzUxNCwzMzUwOCwz''@;'; put 'put ''MzUwNCwzMzUzMCwzMzUyMywzMzUxNywzNDQyMywzNDQyMCwzNDQyOCwzNDQxOSwzNDg4MSwzNDg5NCwzNDkxOSwzNDkyMiwzNDkyMSwzNTI4MywzNTMzMiwzNTMzNSwzNjIxMCwzNjgzNSwzNjgzMywzNjg0NiwzNjgzMiwzNzEwNSwzNzA1MywzNzA1NSwzNzA3NywzNzA2MSwzNzA1NCwzNzA2''@;'; put 'put ''MywzNzA2NywzNzA2NCwzNzMzMiwzNzMzMSwzODQ4NCwzODQ3OSwzODQ4MSwzODQ4MywzODQ3NCwzODQ3OCwyMDUxMCwyMDQ4NSwyMDQ4NywyMDQ5OSwyMDUxNCwyMDUyOCwyMDUwNywyMDQ2OSwyMDQ2OCwyMDUzMSwyMDUzNSwyMDUyNCwyMDQ3MCwyMDQ3MSwyMDUwMywyMDUwOCwyMDUxMiwy''@;'; put 'put ''MDUxOSwyMDUzMywyMDUyNywyMDUyOSwyMDQ5NCwyMDgyNiwyMDg4NCwyMDg4MywyMDkzOCwyMDkzMiwyMDkzMywyMDkzNiwyMDk0MiwyMTA4OSwyMTA4MiwyMTA3NCwyMTA4NiwyMTA4NywyMTA3NywyMTA5MCwyMTE5NywyMTI2MiwyMTQwNiwyMTc5OCwyMTczMCwyMTc4MywyMTc3OCwyMTcz''@;'; put 'put ''NSwyMTc0NywyMTczMiwyMTc4NiwyMTc1OSwyMTc2NCwyMTc2OCwyMTczOSwyMTc3NywyMTc2NSwyMTc0NSwyMTc3MCwyMTc1NSwyMTc1MSwyMTc1MiwyMTcyOCwyMTc3NCwyMTc2MywyMTc3MSwyMjI3MywyMjI3NCwyMjQ3NiwyMjU3OCwyMjQ4NSwyMjQ4MiwyMjQ1OCwyMjQ3MCwyMjQ2MSwy''@;'; put 'put ''MjQ2MCwyMjQ1NiwyMjQ1NCwyMjQ2MywyMjQ3MSwyMjQ4MCwyMjQ1NywyMjQ2NSwyMjc5OCwyMjg1OCwyMzA2NSwyMzA2MiwyMzA4NSwyMzA4NiwyMzA2MSwyMzA1NSwyMzA2MywyMzA1MCwyMzA3MCwyMzA5MSwyMzQwNCwyMzQ2MywyMzQ2OSwyMzQ2OCwyMzU1NSwyMzYzOCwyMzYzNiwyMzc4''@;'; put 'put ''OCwyMzgwNywyMzc5MCwyMzc5MywyMzc5OSwyMzgwOCwyMzgwMSwyNDEwNSwyNDEwNCwyNDIzMiwyNDIzOCwyNDIzNCwyNDIzNiwyNDM3MSwyNDM2OCwyNDQyMywyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDczOCwyNDcxMiwyNDcwNCwyNDcyMiwyNDcwNSwyNDczMywyNDcwNywyNDcyNSwy''@;'; put 'put ''NDczMSwyNDcyNywyNDcxMSwyNDczMiwyNDcxOCwyNTExMywyNTE1OCwyNTMzMCwyNTM2MCwyNTQzMCwyNTM4OCwyNTQxMiwyNTQxMywyNTM5OCwyNTQxMSwyNTU3MiwyNTQwMSwyNTQxOSwyNTQxOCwyNTQwNCwyNTM4NSwyNTQwOSwyNTM5NiwyNTQzMiwyNTQyOCwyNTQzMywyNTM4OSwyNTQx''@;'; put 'put ''NSwyNTM5NSwyNTQzNCwyNTQyNSwyNTQwMCwyNTQzMSwyNTQwOCwyNTQxNiwyNTkzMCwyNTkyNiwyNjA1NCwyNjA1MSwyNjA1MiwyNjA1MCwyNjE4NiwyNjIwNywyNjE4MywyNjE5MywyNjM4NiwyNjM4NywyNjY1NSwyNjY1MCwyNjY5NywyNjY3NCwyNjY3NSwyNjY4MywyNjY5OSwyNjcwMywy''@;'; put 'put ''NjY0NiwyNjY3MywyNjY1MiwyNjY3NywyNjY2NywyNjY2OSwyNjY3MSwyNjcwMiwyNjY5MiwyNjY3NiwyNjY1MywyNjY0MiwyNjY0NCwyNjY2MiwyNjY2NCwyNjY3MCwyNjcwMSwyNjY4MiwyNjY2MSwyNjY1NiwyNzQzNiwyNzQzOSwyNzQzNywyNzQ0MSwyNzQ0NCwyNzUwMSwzMjg5OCwyNzUy''@;'; put 'put ''OCwyNzYyMiwyNzYyMCwyNzYyNCwyNzYxOSwyNzYxOCwyNzYyMywyNzY4NSwyODAyNiwyODAwMywyODAwNCwyODAyMiwyNzkxNywyODAwMSwyODA1MCwyNzk5MiwyODAwMiwyODAxMywyODAxNSwyODA0OSwyODA0NSwyODE0MywyODAzMSwyODAzOCwyNzk5OCwyODAwNywyOGUzLDI4MDU1LDI4''@;'; put 'put ''MDE2LDI4MDI4LDI3OTk5LDI4MDM0LDI4MDU2LDI3OTUxLDI4MDA4LDI4MDQzLDI4MDMwLDI4MDMyLDI4MDM2LDI3OTI2LDI4MDM1LDI4MDI3LDI4MDI5LDI4MDIxLDI4MDQ4LDI4ODkyLDI4ODgzLDI4ODgxLDI4ODkzLDI4ODc1LDMyNTY5LDI4ODk4LDI4ODg3LDI4ODgyLDI4ODk0LDI4ODk2''@;'; put 'put ''LDI4ODg0LDI4ODc3LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODkwLDI4ODc4LDI4ODk3LDI5MjUwLDI5MzA0LDI5MzAzLDI5MzAyLDI5NDQwLDI5NDM0LDI5NDI4LDI5NDM4LDI5NDMwLDI5NDI3LDI5NDM1LDI5NDQxLDI5NjUxLDI5NjU3LDI5NjY5LDI5NjU0LDI5NjI4LDI5NjcxLDI5NjY3LDI5''@;'; put 'put ''NjczLDI5NjYwLDI5NjUwLDI5NjU5LDI5NjUyLDI5NjYxLDI5NjU4LDI5NjU1LDI5NjU2LDI5NjcyLDI5OTE4LDI5OTE5LDI5OTQwLDI5OTQxLDI5OTg1LDMwMDQzLDMwMDQ3LDMwMTI4LDMwMTQ1LDMwMTM5LDMwMTQ4LDMwMTQ0LDMwMTQzLDMwMTM0LDMwMTM4LDMwMzQ2LDMwNDA5LDMwNDkz''@;'; put 'put ''LDMwNDkxLDMwNDgwLDMwNDgzLDMwNDgyLDMwNDk5LDMwNDgxLDMwNDg1LDMwNDg5LDMwNDkwLDMwNDk4LDMwNTAzLDMwNzU1LDMwNzY0LDMwNzU0LDMwNzczLDMwNzY3LDMwNzYwLDMwNzY2LDMwNzYzLDMwNzUzLDMwNzYxLDMwNzcxLDMwNzYyLDMwNzY5LDMxMDYwLDMxMDY3LDMxMDU1LDMx''@;'; put 'put ''MDY4LDMxMDU5LDMxMDU4LDMxMDU3LDMxMjExLDMxMjEyLDMxMjAwLDMxMjE0LDMxMjEzLDMxMjEwLDMxMTk2LDMxMTk4LDMxMTk3LDMxMzY2LDMxMzY5LDMxMzY1LDMxMzcxLDMxMzcyLDMxMzcwLDMxMzY3LDMxNDQ4LDMxNTA0LDMxNDkyLDMxNTA3LDMxNDkzLDMxNTAzLDMxNDk2LDMxNDk4''@;'; put 'put ''LDMxNTAyLDMxNDk3LDMxNTA2LDMxODc2LDMxODg5LDMxODgyLDMxODg0LDMxODgwLDMxODg1LDMxODc3LDMyMDMwLDMyMDI5LDMyMDE3LDMyMDE0LDMyMDI0LDMyMDIyLDMyMDE5LDMyMDMxLDMyMDE4LDMyMDE1LDMyMDEyLDMyNjA0LDMyNjA5LDMyNjA2LDMyNjA4LDMyNjA1LDMyNjAzLDMy''@;'; put 'put ''NjYyLDMyNjU4LDMyNzA3LDMyNzA2LDMyNzA0LDMyNzkwLDMyODMwLDMyODI1LDMzMDE4LDMzMDEwLDMzMDE3LDMzMDEzLDMzMDI1LDMzMDE5LDMzMDI0LDMzMjgxLDMzMzI3LDMzMzE3LDMzNTg3LDMzNTgxLDMzNjA0LDMzNTYxLDMzNjE3LDMzNTczLDMzNjIyLDMzNTk5LDMzNjAxLDMzNTc0''@;'; put 'put ''LDMzNTY0LDMzNTcwLDMzNjAyLDMzNjE0LDMzNTYzLDMzNTc4LDMzNTQ0LDMzNTk2LDMzNjEzLDMzNTU4LDMzNTcyLDMzNTY4LDMzNTkxLDMzNTgzLDMzNTc3LDMzNjA3LDMzNjA1LDMzNjEyLDMzNjE5LDMzNTY2LDMzNTgwLDMzNjExLDMzNTc1LDMzNjA4LDM0Mzg3LDM0Mzg2LDM0NDY2LDM0''@;'; put 'put ''NDcyLDM0NDU0LDM0NDQ1LDM0NDQ5LDM0NDYyLDM0NDM5LDM0NDU1LDM0NDM4LDM0NDQzLDM0NDU4LDM0NDM3LDM0NDY5LDM0NDU3LDM0NDY1LDM0NDcxLDM0NDUzLDM0NDU2LDM0NDQ2LDM0NDYxLDM0NDQ4LDM0NDUyLDM0ODgzLDM0ODg0LDM0OTI1LDM0OTMzLDM0OTM0LDM0OTMwLDM0OTQ0''@;'; put 'put ''LDM0OTI5LDM0OTQzLDM0OTI3LDM0OTQ3LDM0OTQyLDM0OTMyLDM0OTQwLDM1MzQ2LDM1OTExLDM1OTI3LDM1OTYzLDM2MDA0LDM2MDAzLDM2MjE0LDM2MjE2LDM2Mjc3LDM2Mjc5LDM2Mjc4LDM2NTYxLDM2NTYzLDM2ODYyLDM2ODUzLDM2ODY2LDM2ODYzLDM2ODU5LDM2ODY4LDM2ODYwLDM2''@;'; put 'put ''ODU0LDM3MDc4LDM3MDg4LDM3MDgxLDM3MDgyLDM3MDkxLDM3MDg3LDM3MDkzLDM3MDgwLDM3MDgzLDM3MDc5LDM3MDg0LDM3MDkyLDM3MjAwLDM3MTk4LDM3MTk5LDM3MzMzLDM3MzQ2LDM3MzM4LDM4NDkyLDM4NDk1LDM4NTg4LDM5MTM5LDM5NjQ3LDM5NzI3LDIwMDk1LDIwNTkyLDIwNTg2''@;'; put 'put ''LDIwNTc3LDIwNTc0LDIwNTc2LDIwNTYzLDIwNTU1LDIwNTczLDIwNTk0LDIwNTUyLDIwNTU3LDIwNTQ1LDIwNTcxLDIwNTU0LDIwNTc4LDIwNTAxLDIwNTQ5LDIwNTc1LDIwNTg1LDIwNTg3LDIwNTc5LDIwNTgwLDIwNTUwLDIwNTQ0LDIwNTkwLDIwNTk1LDIwNTY3LDIwNTYxLDIwOTQ0LDIx''@;'; put 'put ''MDk5LDIxMTAxLDIxMTAwLDIxMTAyLDIxMjA2LDIxMjAzLDIxMjkzLDIxNDA0LDIxODc3LDIxODc4LDIxODIwLDIxODM3LDIxODQwLDIxODEyLDIxODAyLDIxODQxLDIxODU4LDIxODE0LDIxODEzLDIxODA4LDIxODQyLDIxODI5LDIxNzcyLDIxODEwLDIxODYxLDIxODM4LDIxODE3LDIxODMy''@;'; put 'put ''LDIxODA1LDIxODE5LDIxODI0LDIxODM1LDIyMjgyLDIyMjc5LDIyNTIzLDIyNTQ4LDIyNDk4LDIyNTE4LDIyNDkyLDIyNTE2LDIyNTI4LDIyNTA5LDIyNTI1LDIyNTM2LDIyNTIwLDIyNTM5LDIyNTE1LDIyNDc5LDIyNTM1LDIyNTEwLDIyNDk5LDIyNTE0LDIyNTAxLDIyNTA4LDIyNDk3LDIy''@;'; put 'put ''NTQyLDIyNTI0LDIyNTQ0LDIyNTAzLDIyNTI5LDIyNTQwLDIyNTEzLDIyNTA1LDIyNTEyLDIyNTQxLDIyNTMyLDIyODc2LDIzMTM2LDIzMTI4LDIzMTI1LDIzMTQzLDIzMTM0LDIzMDk2LDIzMDkzLDIzMTQ5LDIzMTIwLDIzMTM1LDIzMTQxLDIzMTQ4LDIzMTIzLDIzMTQwLDIzMTI3LDIzMTA3''@;'; put 'put ''LDIzMTMzLDIzMTIyLDIzMTA4LDIzMTMxLDIzMTEyLDIzMTgyLDIzMTAyLDIzMTE3LDIzMDk3LDIzMTE2LDIzMTUyLDIzMTQ1LDIzMTExLDIzMTIxLDIzMTI2LDIzMTA2LDIzMTMyLDIzNDEwLDIzNDA2LDIzNDg5LDIzNDg4LDIzNjQxLDIzODM4LDIzODE5LDIzODM3LDIzODM0LDIzODQwLDIz''@;'; put 'put ''ODIwLDIzODQ4LDIzODIxLDIzODQ2LDIzODQ1LDIzODIzLDIzODU2LDIzODI2LDIzODQzLDIzODM5LDIzODU0LDI0MTI2LDI0MTE2LDI0MjQxLDI0MjQ0LDI0MjQ5LDI0MjQyLDI0MjQzLDI0Mzc0LDI0Mzc2LDI0NDc1LDI0NDcwLDI0NDc5LDI0NzE0LDI0NzIwLDI0NzEwLDI0NzY2LDI0NzUy''@;'; put 'put ''LDI0NzYyLDI0Nzg3LDI0Nzg4LDI0NzgzLDI0ODA0LDI0NzkzLDI0Nzk3LDI0Nzc2LDI0NzUzLDI0Nzk1LDI0NzU5LDI0Nzc4LDI0NzY3LDI0NzcxLDI0NzgxLDI0NzY4LDI1Mzk0LDI1NDQ1LDI1NDgyLDI1NDc0LDI1NDY5LDI1NTMzLDI1NTAyLDI1NTE3LDI1NTAxLDI1NDk1LDI1NTE1LDI1''@;'; put 'put ''NDg2LDI1NDU1LDI1NDc5LDI1NDg4LDI1NDU0LDI1NTE5LDI1NDYxLDI1NTAwLDI1NDUzLDI1NTE4LDI1NDY4LDI1NTA4LDI1NDAzLDI1NTAzLDI1NDY0LDI1NDc3LDI1NDczLDI1NDg5LDI1NDg1LDI1NDU2LDI1OTM5LDI2MDYxLDI2MjEzLDI2MjA5LDI2MjAzLDI2MjAxLDI2MjA0LDI2MjEw''@;'; put 'put ''LDI2MzkyLDI2NzQ1LDI2NzU5LDI2NzY4LDI2NzgwLDI2NzMzLDI2NzM0LDI2Nzk4LDI2Nzk1LDI2OTY2LDI2NzM1LDI2Nzg3LDI2Nzk2LDI2NzkzLDI2NzQxLDI2NzQwLDI2ODAyLDI2NzY3LDI2NzQzLDI2NzcwLDI2NzQ4LDI2NzMxLDI2NzM4LDI2Nzk0LDI2NzUyLDI2NzM3LDI2NzUwLDI2''@;'; put 'put ''Nzc5LDI2Nzc0LDI2NzYzLDI2Nzg0LDI2NzYxLDI2Nzg4LDI2NzQ0LDI2NzQ3LDI2NzY5LDI2NzY0LDI2NzYyLDI2NzQ5LDI3NDQ2LDI3NDQzLDI3NDQ3LDI3NDQ4LDI3NTM3LDI3NTM1LDI3NTMzLDI3NTM0LDI3NTMyLDI3NjkwLDI4MDk2LDI4MDc1LDI4MDg0LDI4MDgzLDI4Mjc2LDI4MDc2''@;'; put 'put ''LDI4MTM3LDI4MTMwLDI4MDg3LDI4MTUwLDI4MTE2LDI4MTYwLDI4MTA0LDI4MTI4LDI4MTI3LDI4MTE4LDI4MDk0LDI4MTMzLDI4MTI0LDI4MTI1LDI4MTIzLDI4MTQ4LDI4MTA2LDI4MDkzLDI4MTQxLDI4MTQ0LDI4MDkwLDI4MTE3LDI4MDk4LDI4MTExLDI4MTA1LDI4MTEyLDI4MTQ2LDI4''@;'; put 'put ''MTE1LDI4MTU3LDI4MTE5LDI4MTA5LDI4MTMxLDI4MDkxLDI4OTIyLDI4OTQxLDI4OTE5LDI4OTUxLDI4OTE2LDI4OTQwLDI4OTEyLDI4OTMyLDI4OTE1LDI4OTQ0LDI4OTI0LDI4OTI3LDI4OTM0LDI4OTQ3LDI4OTI4LDI4OTIwLDI4OTE4LDI4OTM5LDI4OTMwLDI4OTQyLDI5MzEwLDI5MzA3''@;'; put 'put ''LDI5MzA4LDI5MzExLDI5NDY5LDI5NDYzLDI5NDQ3LDI5NDU3LDI5NDY0LDI5NDUwLDI5NDQ4LDI5NDM5LDI5NDU1LDI5NDcwLDI5NTc2LDI5Njg2LDI5Njg4LDI5Njg1LDI5NzAwLDI5Njk3LDI5NjkzLDI5NzAzLDI5Njk2LDI5NjkwLDI5NjkyLDI5Njk1LDI5NzA4LDI5NzA3LDI5Njg0LDI5''@;'; put 'put ''NzA0LDMwMDUyLDMwMDUxLDMwMTU4LDMwMTYyLDMwMTU5LDMwMTU1LDMwMTU2LDMwMTYxLDMwMTYwLDMwMzUxLDMwMzQ1LDMwNDE5LDMwNTIxLDMwNTExLDMwNTA5LDMwNTEzLDMwNTE0LDMwNTE2LDMwNTE1LDMwNTI1LDMwNTAxLDMwNTIzLDMwNTE3LDMwNzkyLDMwODAyLDMwNzkzLDMwNzk3''@;'; put 'put ''LDMwNzk0LDMwNzk2LDMwNzU4LDMwNzg5LDMwODAwLDMxMDc2LDMxMDc5LDMxMDgxLDMxMDgyLDMxMDc1LDMxMDgzLDMxMDczLDMxMTYzLDMxMjI2LDMxMjI0LDMxMjIyLDMxMjIzLDMxMzc1LDMxMzgwLDMxMzc2LDMxNTQxLDMxNTU5LDMxNTQwLDMxNTI1LDMxNTM2LDMxNTIyLDMxNTI0LDMx''@;'; put 'put ''NTM5LDMxNTEyLDMxNTMwLDMxNTE3LDMxNTM3LDMxNTMxLDMxNTMzLDMxNTM1LDMxNTM4LDMxNTQ0LDMxNTE0LDMxNTIzLDMxODkyLDMxODk2LDMxODk0LDMxOTA3LDMyMDUzLDMyMDYxLDMyMDU2LDMyMDU0LDMyMDU4LDMyMDY5LDMyMDQ0LDMyMDQxLDMyMDY1LDMyMDcxLDMyMDYyLDMyMDYz''@;'; put 'put ''LDMyMDc0LDMyMDU5LDMyMDQwLDMyNjExLDMyNjYxLDMyNjY4LDMyNjY5LDMyNjY3LDMyNzE0LDMyNzE1LDMyNzE3LDMyNzIwLDMyNzIxLDMyNzExLDMyNzE5LDMyNzEzLDMyNzk5LDMyNzk4LDMyNzk1LDMyODM5LDMyODM1LDMyODQwLDMzMDQ4LDMzMDYxLDMzMDQ5LDMzMDUxLDMzMDY5LDMz''@;'; put 'put ''MDU1LDMzMDY4LDMzMDU0LDMzMDU3LDMzMDQ1LDMzMDYzLDMzMDUzLDMzMDU4LDMzMjk3LDMzMzM2LDMzMzMxLDMzMzM4LDMzMzMyLDMzMzMwLDMzMzk2LDMzNjgwLDMzNjk5LDMzNzA0LDMzNjc3LDMzNjU4LDMzNjUxLDMzNzAwLDMzNjUyLDMzNjc5LDMzNjY1LDMzNjg1LDMzNjg5LDMzNjUz''@;'; put 'put ''LDMzNjg0LDMzNzA1LDMzNjYxLDMzNjY3LDMzNjc2LDMzNjkzLDMzNjkxLDMzNzA2LDMzNjc1LDMzNjYyLDMzNzAxLDMzNzExLDMzNjcyLDMzNjg3LDMzNzEyLDMzNjYzLDMzNzAyLDMzNjcxLDMzNzEwLDMzNjU0LDMzNjkwLDM0MzkzLDM0MzkwLDM0NDk1LDM0NDg3LDM0NDk4LDM0NDk3LDM0''@;'; put 'put ''NTAxLDM0NDkwLDM0NDgwLDM0NTA0LDM0NDg5LDM0NDgzLDM0NDg4LDM0NTA4LDM0NDg0LDM0NDkxLDM0NDkyLDM0NDk5LDM0NDkzLDM0NDk0LDM0ODk4LDM0OTUzLDM0OTY1LDM0OTg0LDM0OTc4LDM0OTg2LDM0OTcwLDM0OTYxLDM0OTc3LDM0OTc1LDM0OTY4LDM0OTgzLDM0OTY5LDM0OTcx''@;'; put 'put ''LDM0OTY3LDM0OTgwLDM0OTg4LDM0OTU2LDM0OTYzLDM0OTU4LDM1MjAyLDM1Mjg2LDM1Mjg5LDM1Mjg1LDM1Mzc2LDM1MzY3LDM1MzcyLDM1MzU4LDM1ODk3LDM1ODk5LDM1OTMyLDM1OTMzLDM1OTY1LDM2MDA1LDM2MjIxLDM2MjE5LDM2MjE3LDM2Mjg0LDM2MjkwLDM2MjgxLDM2Mjg3LDM2''@;'; put 'put ''Mjg5LDM2NTY4LDM2NTc0LDM2NTczLDM2NTcyLDM2NTY3LDM2NTc2LDM2NTc3LDM2OTAwLDM2ODc1LDM2ODgxLDM2ODkyLDM2ODc2LDM2ODk3LDM3MTAzLDM3MDk4LDM3MTA0LDM3MTA4LDM3MTA2LDM3MTA3LDM3MDc2LDM3MDk5LDM3MTAwLDM3MDk3LDM3MjA2LDM3MjA4LDM3MjEwLDM3MjAz''@;'; put 'put ''LDM3MjA1LDM3MzU2LDM3MzY0LDM3MzYxLDM3MzYzLDM3MzY4LDM3MzQ4LDM3MzY5LDM3MzU0LDM3MzU1LDM3MzY3LDM3MzUyLDM3MzU4LDM4MjY2LDM4Mjc4LDM4MjgwLDM4NTI0LDM4NTA5LDM4NTA3LDM4NTEzLDM4NTExLDM4NTkxLDM4NzYyLDM4OTE2LDM5MTQxLDM5MzE5LDIwNjM1LDIw''@;'; put 'put ''NjI5LDIwNjI4LDIwNjM4LDIwNjE5LDIwNjQzLDIwNjExLDIwNjIwLDIwNjIyLDIwNjM3LDIwNTg0LDIwNjM2LDIwNjI2LDIwNjEwLDIwNjE1LDIwODMxLDIwOTQ4LDIxMjY2LDIxMjY1LDIxNDEyLDIxNDE1LDIxOTA1LDIxOTI4LDIxOTI1LDIxOTMzLDIxODc5LDIyMDg1LDIxOTIyLDIxOTA3''@;'; put 'put ''LDIxODk2LDIxOTAzLDIxOTQxLDIxODg5LDIxOTIzLDIxOTA2LDIxOTI0LDIxODg1LDIxOTAwLDIxOTI2LDIxODg3LDIxOTA5LDIxOTIxLDIxOTAyLDIyMjg0LDIyNTY5LDIyNTgzLDIyNTUzLDIyNTU4LDIyNTY3LDIyNTYzLDIyNTY4LDIyNTE3LDIyNjAwLDIyNTY1LDIyNTU2LDIyNTU1LDIy''@;'; put 'put ''NTc5LDIyNTkxLDIyNTgyLDIyNTc0LDIyNTg1LDIyNTg0LDIyNTczLDIyNTcyLDIyNTg3LDIyODgxLDIzMjE1LDIzMTg4LDIzMTk5LDIzMTYyLDIzMjAyLDIzMTk4LDIzMTYwLDIzMjA2LDIzMTY0LDIzMjA1LDIzMjEyLDIzMTg5LDIzMjE0LDIzMDk1LDIzMTcyLDIzMTc4LDIzMTkxLDIzMTcx''@;'; put 'put ''LDIzMTc5LDIzMjA5LDIzMTYzLDIzMTY1LDIzMTgwLDIzMTk2LDIzMTgzLDIzMTg3LDIzMTk3LDIzNTMwLDIzNTAxLDIzNDk5LDIzNTA4LDIzNTA1LDIzNDk4LDIzNTAyLDIzNTY0LDIzNjAwLDIzODYzLDIzODc1LDIzOTE1LDIzODczLDIzODgzLDIzODcxLDIzODYxLDIzODg5LDIzODg2LDIz''@;'; put 'put ''ODkzLDIzODU5LDIzODY2LDIzODkwLDIzODY5LDIzODU3LDIzODk3LDIzODc0LDIzODY1LDIzODgxLDIzODY0LDIzODY4LDIzODU4LDIzODYyLDIzODcyLDIzODc3LDI0MTMyLDI0MTI5LDI0NDA4LDI0NDg2LDI0NDg1LDI0NDkxLDI0Nzc3LDI0NzYxLDI0NzgwLDI0ODAyLDI0NzgyLDI0Nzcy''@;'; put 'put ''LDI0ODUyLDI0ODE4LDI0ODQyLDI0ODU0LDI0ODM3LDI0ODIxLDI0ODUxLDI0ODI0LDI0ODI4LDI0ODMwLDI0NzY5LDI0ODM1LDI0ODU2LDI0ODYxLDI0ODQ4LDI0ODMxLDI0ODM2LDI0ODQzLDI1MTYyLDI1NDkyLDI1NTIxLDI1NTIwLDI1NTUwLDI1NTczLDI1NTc2LDI1NTgzLDI1NTM5LDI1''@;'; put 'put ''NzU3LDI1NTg3LDI1NTQ2LDI1NTY4LDI1NTkwLDI1NTU3LDI1NTg2LDI1NTg5LDI1Njk3LDI1NTY3LDI1NTM0LDI1NTY1LDI1NTY0LDI1NTQwLDI1NTYwLDI1NTU1LDI1NTM4LDI1NTQzLDI1NTQ4LDI1NTQ3LDI1NTQ0LDI1NTg0LDI1NTU5LDI1NTYxLDI1OTA2LDI1OTU5LDI1OTYyLDI1OTU2''@;'; put 'put ''LDI1OTQ4LDI1OTYwLDI1OTU3LDI1OTk2LDI2MDEzLDI2MDE0LDI2MDMwLDI2MDY0LDI2MDY2LDI2MjM2LDI2MjIwLDI2MjM1LDI2MjQwLDI2MjI1LDI2MjMzLDI2MjE4LDI2MjI2LDI2MzY5LDI2ODkyLDI2ODM1LDI2ODg0LDI2ODQ0LDI2OTIyLDI2ODYwLDI2ODU4LDI2ODY1LDI2ODk1LDI2''@;'; put 'put ''ODM4LDI2ODcxLDI2ODU5LDI2ODUyLDI2ODcwLDI2ODk5LDI2ODk2LDI2ODY3LDI2ODQ5LDI2ODg3LDI2ODI4LDI2ODg4LDI2OTkyLDI2ODA0LDI2ODk3LDI2ODYzLDI2ODIyLDI2OTAwLDI2ODcyLDI2ODMyLDI2ODc3LDI2ODc2LDI2ODU2LDI2ODkxLDI2ODkwLDI2OTAzLDI2ODMwLDI2ODI0''@;'; put 'put ''LDI2ODQ1LDI2ODQ2LDI2ODU0LDI2ODY4LDI2ODMzLDI2ODg2LDI2ODM2LDI2ODU3LDI2OTAxLDI2OTE3LDI2ODIzLDI3NDQ5LDI3NDUxLDI3NDU1LDI3NDUyLDI3NTQwLDI3NTQzLDI3NTQ1LDI3NTQxLDI3NTgxLDI3NjMyLDI3NjM0LDI3NjM1LDI3Njk2LDI4MTU2LDI4MjMwLDI4MjMxLDI4''@;'; put 'put ''MTkxLDI4MjMzLDI4Mjk2LDI4MjIwLDI4MjIxLDI4MjI5LDI4MjU4LDI4MjAzLDI4MjIzLDI4MjI1LDI4MjUzLDI4Mjc1LDI4MTg4LDI4MjExLDI4MjM1LDI4MjI0LDI4MjQxLDI4MjE5LDI4MTYzLDI4MjA2LDI4MjU0LDI4MjY0LDI4MjUyLDI4MjU3LDI4MjA5LDI4MjAwLDI4MjU2LDI4Mjcz''@;'; put 'put ''LDI4MjY3LDI4MjE3LDI4MTk0LDI4MjA4LDI4MjQzLDI4MjYxLDI4MTk5LDI4MjgwLDI4MjYwLDI4Mjc5LDI4MjQ1LDI4MjgxLDI4MjQyLDI4MjYyLDI4MjEzLDI4MjE0LDI4MjUwLDI4OTYwLDI4OTU4LDI4OTc1LDI4OTIzLDI4OTc0LDI4OTc3LDI4OTYzLDI4OTY1LDI4OTYyLDI4OTc4LDI4''@;'; put 'put ''OTU5LDI4OTY4LDI4OTg2LDI4OTU1LDI5MjU5LDI5Mjc0LDI5MzIwLDI5MzIxLDI5MzE4LDI5MzE3LDI5MzIzLDI5NDU4LDI5NDUxLDI5NDg4LDI5NDc0LDI5NDg5LDI5NDkxLDI5NDc5LDI5NDkwLDI5NDg1LDI5NDc4LDI5NDc1LDI5NDkzLDI5NDUyLDI5NzQyLDI5NzQwLDI5NzQ0LDI5NzM5''@;'; put 'put ''LDI5NzE4LDI5NzIyLDI5NzI5LDI5NzQxLDI5NzQ1LDI5NzMyLDI5NzMxLDI5NzI1LDI5NzM3LDI5NzI4LDI5NzQ2LDI5OTQ3LDI5OTk5LDMwMDYzLDMwMDYwLDMwMTgzLDMwMTcwLDMwMTc3LDMwMTgyLDMwMTczLDMwMTc1LDMwMTgwLDMwMTY3LDMwMzU3LDMwMzU0LDMwNDI2LDMwNTM0LDMw''@;'; put 'put ''NTM1LDMwNTMyLDMwNTQxLDMwNTMzLDMwNTM4LDMwNTQyLDMwNTM5LDMwNTQwLDMwNjg2LDMwNzAwLDMwODE2LDMwODIwLDMwODIxLDMwODEyLDMwODI5LDMwODMzLDMwODI2LDMwODMwLDMwODMyLDMwODI1LDMwODI0LDMwODE0LDMwODE4LDMxMDkyLDMxMDkxLDMxMDkwLDMxMDg4LDMxMjM0''@;'; put 'put ''LDMxMjQyLDMxMjM1LDMxMjQ0LDMxMjM2LDMxMzg1LDMxNDYyLDMxNDYwLDMxNTYyLDMxNTQ3LDMxNTU2LDMxNTYwLDMxNTY0LDMxNTY2LDMxNTUyLDMxNTc2LDMxNTU3LDMxOTA2LDMxOTAyLDMxOTEyLDMxOTA1LDMyMDg4LDMyMTExLDMyMDk5LDMyMDgzLDMyMDg2LDMyMTAzLDMyMTA2LDMy''@;'; put 'put ''MDc5LDMyMTA5LDMyMDkyLDMyMTA3LDMyMDgyLDMyMDg0LDMyMTA1LDMyMDgxLDMyMDk1LDMyMDc4LDMyNTc0LDMyNTc1LDMyNjEzLDMyNjE0LDMyNjc0LDMyNjcyLDMyNjczLDMyNzI3LDMyODQ5LDMyODQ3LDMyODQ4LDMzMDIyLDMyOTgwLDMzMDkxLDMzMDk4LDMzMTA2LDMzMTAzLDMzMDk1''@;'; put 'put ''LDMzMDg1LDMzMTAxLDMzMDgyLDMzMjU0LDMzMjYyLDMzMjcxLDMzMjcyLDMzMjczLDMzMjg0LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzk3LDMzNTk1LDMzNzQzLDMzNzg1LDMzODI3LDMzNzI4LDMzNzY4LDMzODEwLDMzNzY3LDMzNzY0LDMzNzg4LDMzNzgyLDMzODA4LDMzNzM0LDMzNzM2LDMz''@;'; put 'put ''NzcxLDMzNzYzLDMzNzI3LDMzNzkzLDMzNzU3LDMzNzY1LDMzNzUyLDMzNzkxLDMzNzYxLDMzNzM5LDMzNzQyLDMzNzUwLDMzNzgxLDMzNzM3LDMzODAxLDMzODA3LDMzNzU4LDMzODA5LDMzNzk4LDMzNzMwLDMzNzc5LDMzNzQ5LDMzNzg2LDMzNzM1LDMzNzQ1LDMzNzcwLDMzODExLDMzNzMx''@;'; put 'put ''LDMzNzcyLDMzNzc0LDMzNzMyLDMzNzg3LDMzNzUxLDMzNzYyLDMzODE5LDMzNzU1LDMzNzkwLDM0NTIwLDM0NTMwLDM0NTM0LDM0NTE1LDM0NTMxLDM0NTIyLDM0NTM4LDM0NTI1LDM0NTM5LDM0NTI0LDM0NTQwLDM0NTM3LDM0NTE5LDM0NTM2LDM0NTEzLDM0ODg4LDM0OTAyLDM0OTAxLDM1''@;'; put 'put ''MDAyLDM1MDMxLDM1MDAxLDM1ZTMsMzUwMDgsMzUwMDYsMzQ5OTgsMzUwMDQsMzQ5OTksMzUwMDUsMzQ5OTQsMzUwNzMsMzUwMTcsMzUyMjEsMzUyMjQsMzUyMjMsMzUyOTMsMzUyOTAsMzUyOTEsMzU0MDYsMzU0MDUsMzUzODUsMzU0MTcsMzUzOTIsMzU0MTUsMzU0MTYsMzUzOTYsMzUzOTcs''@;'; put 'put ''MzU0MTAsMzU0MDAsMzU0MDksMzU0MDIsMzU0MDQsMzU0MDcsMzU5MzUsMzU5NjksMzU5NjgsMzYwMjYsMzYwMzAsMzYwMTYsMzYwMjUsMzYwMjEsMzYyMjgsMzYyMjQsMzYyMzMsMzYzMTIsMzYzMDcsMzYzMDEsMzYyOTUsMzYzMTAsMzYzMTYsMzYzMDMsMzYzMDksMzYzMTMsMzYyOTYsMzYz''@;'; put 'put ''MTEsMzYyOTMsMzY1OTEsMzY1OTksMzY2MDIsMzY2MDEsMzY1ODIsMzY1OTAsMzY1ODEsMzY1OTcsMzY1ODMsMzY1ODQsMzY1OTgsMzY1ODcsMzY1OTMsMzY1ODgsMzY1OTYsMzY1ODUsMzY5MDksMzY5MTYsMzY5MTEsMzcxMjYsMzcxNjQsMzcxMjQsMzcxMTksMzcxMTYsMzcxMjgsMzcxMTMs''@;'; put 'put ''MzcxMTUsMzcxMjEsMzcxMjAsMzcxMjcsMzcxMjUsMzcxMjMsMzcyMTcsMzcyMjAsMzcyMTUsMzcyMTgsMzcyMTYsMzczNzcsMzczODYsMzc0MTMsMzczNzksMzc0MDIsMzc0MTQsMzczOTEsMzczODgsMzczNzYsMzczOTQsMzczNzUsMzczNzMsMzczODIsMzczODAsMzc0MTUsMzczNzgsMzc0''@;'; put 'put ''MDQsMzc0MTIsMzc0MDEsMzczOTksMzczODEsMzczOTgsMzgyNjcsMzgyODUsMzgyODQsMzgyODgsMzg1MzUsMzg1MjYsMzg1MzYsMzg1MzcsMzg1MzEsMzg1MjgsMzg1OTQsMzg2MDAsMzg1OTUsMzg2NDEsMzg2NDAsMzg3NjQsMzg3NjgsMzg3NjYsMzg5MTksMzkwODEsMzkxNDcsNDAxNjYs''@;'; put 'put ''NDA2OTcsMjAwOTksMjAxMDAsMjAxNTAsMjA2NjksMjA2NzEsMjA2NzgsMjA2NTQsMjA2NzYsMjA2ODIsMjA2NjAsMjA2ODAsMjA2NzQsMjA2NTYsMjA2NzMsMjA2NjYsMjA2NTcsMjA2ODMsMjA2ODEsMjA2NjIsMjA2NjQsMjA5NTEsMjExMTQsMjExMTIsMjExMTUsMjExMTYsMjE5NTUsMjE5''@;'; put 'put ''NzksMjE5NjQsMjE5NjgsMjE5NjMsMjE5NjIsMjE5ODEsMjE5NTIsMjE5NzIsMjE5NTYsMjE5OTMsMjE5NTEsMjE5NzAsMjE5MDEsMjE5NjcsMjE5NzMsMjE5ODYsMjE5NzQsMjE5NjAsMjIwMDIsMjE5NjUsMjE5NzcsMjE5NTQsMjIyOTIsMjI2MTEsMjI2MzIsMjI2MjgsMjI2MDcsMjI2MDUs''@;'; put 'put ''MjI2MDEsMjI2MzksMjI2MTMsMjI2MDYsMjI2MjEsMjI2MTcsMjI2MjksMjI2MTksMjI1ODksMjI2MjcsMjI2NDEsMjI3ODAsMjMyMzksMjMyMzYsMjMyNDMsMjMyMjYsMjMyMjQsMjMyMTcsMjMyMjEsMjMyMTYsMjMyMzEsMjMyNDAsMjMyMjcsMjMyMzgsMjMyMjMsMjMyMzIsMjMyNDIsMjMy''@;'; put 'put ''MjAsMjMyMjIsMjMyNDUsMjMyMjUsMjMxODQsMjM1MTAsMjM1MTIsMjM1MTMsMjM1ODMsMjM2MDMsMjM5MjEsMjM5MDcsMjM4ODIsMjM5MDksMjM5MjIsMjM5MTYsMjM5MDIsMjM5MTIsMjM5MTEsMjM5MDYsMjQwNDgsMjQxNDMsMjQxNDIsMjQxMzgsMjQxNDEsMjQxMzksMjQyNjEsMjQyNjgs''@;'; put 'put ''MjQyNjIsMjQyNjcsMjQyNjMsMjQzODQsMjQ0OTUsMjQ0OTMsMjQ4MjMsMjQ5MDUsMjQ5MDYsMjQ4NzUsMjQ5MDEsMjQ4ODYsMjQ4ODIsMjQ4NzgsMjQ5MDIsMjQ4NzksMjQ5MTEsMjQ4NzMsMjQ4OTYsMjUxMjAsMzcyMjQsMjUxMjMsMjUxMjUsMjUxMjQsMjU1NDEsMjU1ODUsMjU1NzksMjU2''@;'; put 'put ''MTYsMjU2MTgsMjU2MDksMjU2MzIsMjU2MzYsMjU2NTEsMjU2NjcsMjU2MzEsMjU2MjEsMjU2MjQsMjU2NTcsMjU2NTUsMjU2MzQsMjU2MzUsMjU2MTIsMjU2MzgsMjU2NDgsMjU2NDAsMjU2NjUsMjU2NTMsMjU2NDcsMjU2MTAsMjU2MjYsMjU2NjQsMjU2MzcsMjU2MzksMjU2MTEsMjU1NzUs''@;'; put 'put ''MjU2MjcsMjU2NDYsMjU2MzMsMjU2MTQsMjU5NjcsMjYwMDIsMjYwNjcsMjYyNDYsMjYyNTIsMjYyNjEsMjYyNTYsMjYyNTEsMjYyNTAsMjYyNjUsMjYyNjAsMjYyMzIsMjY0MDAsMjY5ODIsMjY5NzUsMjY5MzYsMjY5NTgsMjY5NzgsMjY5OTMsMjY5NDMsMjY5NDksMjY5ODYsMjY5MzcsMjY5''@;'; put 'put ''NDYsMjY5NjcsMjY5NjksMjcwMDIsMjY5NTIsMjY5NTMsMjY5MzMsMjY5ODgsMjY5MzEsMjY5NDEsMjY5ODEsMjY4NjQsMjdlMywyNjkzMiwyNjk4NSwyNjk0NCwyNjk5MSwyNjk0OCwyNjk5OCwyNjk2OCwyNjk0NSwyNjk5NiwyNjk1NiwyNjkzOSwyNjk1NSwyNjkzNSwyNjk3MiwyNjk1OSwy''@;'; put 'put ''Njk2MSwyNjkzMCwyNjk2MiwyNjkyNywyNzAwMywyNjk0MCwyNzQ2MiwyNzQ2MSwyNzQ1OSwyNzQ1OCwyNzQ2NCwyNzQ1NywyNzU0Nyw2NDAxMywyNzY0MywyNzY0NCwyNzY0MSwyNzYzOSwyNzY0MCwyODMxNSwyODM3NCwyODM2MCwyODMwMywyODM1MiwyODMxOSwyODMwNywyODMwOCwyODMy''@;'; put 'put ''MCwyODMzNywyODM0NSwyODM1OCwyODM3MCwyODM0OSwyODM1MywyODMxOCwyODM2MSwyODM0MywyODMzNiwyODM2NSwyODMyNiwyODM2NywyODMzOCwyODM1MCwyODM1NSwyODM4MCwyODM3NiwyODMxMywyODMwNiwyODMwMiwyODMwMSwyODMyNCwyODMyMSwyODM1MSwyODMzOSwyODM2OCwy''@;'; put 'put ''ODM2MiwyODMxMSwyODMzNCwyODMyMywyODk5OSwyOTAxMiwyOTAxMCwyOTAyNywyOTAyNCwyODk5MywyOTAyMSwyOTAyNiwyOTA0MiwyOTA0OCwyOTAzNCwyOTAyNSwyODk5NCwyOTAxNiwyODk5NSwyOTAwMywyOTA0MCwyOTAyMywyOTAwOCwyOTAxMSwyODk5NiwyOTAwNSwyOTAxOCwyOTI2''@;'; put 'put ''MywyOTMyNSwyOTMyNCwyOTMyOSwyOTMyOCwyOTMyNiwyOTUwMCwyOTUwNiwyOTQ5OSwyOTQ5OCwyOTUwNCwyOTUxNCwyOTUxMywyOTc2NCwyOTc3MCwyOTc3MSwyOTc3OCwyOTc3NywyOTc4MywyOTc2MCwyOTc3NSwyOTc3NiwyOTc3NCwyOTc2MiwyOTc2NiwyOTc3MywyOTc4MCwyOTkyMSwy''@;'; put 'put ''OTk1MSwyOTk1MCwyOTk0OSwyOTk4MSwzMDA3MywzMDA3MSwyNzAxMSwzMDE5MSwzMDIyMywzMDIxMSwzMDE5OSwzMDIwNiwzMDIwNCwzMDIwMSwzMDIwMCwzMDIyNCwzMDIwMywzMDE5OCwzMDE4OSwzMDE5NywzMDIwNSwzMDM2MSwzMDM4OSwzMDQyOSwzMDU0OSwzMDU1OSwzMDU2MCwzMDU0''@;'; put 'put ''NiwzMDU1MCwzMDU1NCwzMDU2OSwzMDU2NywzMDU0OCwzMDU1MywzMDU3MywzMDY4OCwzMDg1NSwzMDg3NCwzMDg2OCwzMDg2MywzMDg1MiwzMDg2OSwzMDg1MywzMDg1NCwzMDg4MSwzMDg1MSwzMDg0MSwzMDg3MywzMDg0OCwzMDg3MCwzMDg0MywzMTEwMCwzMTEwNiwzMTEwMSwzMTA5Nywz''@;'; put 'put ''MTI0OSwzMTI1NiwzMTI1NywzMTI1MCwzMTI1NSwzMTI1MywzMTI2NiwzMTI1MSwzMTI1OSwzMTI0OCwzMTM5NSwzMTM5NCwzMTM5MCwzMTQ2NywzMTU5MCwzMTU4OCwzMTU5NywzMTYwNCwzMTU5MywzMTYwMiwzMTU4OSwzMTYwMywzMTYwMSwzMTYwMCwzMTU4NSwzMTYwOCwzMTYwNiwzMTU4''@;'; put 'put ''NywzMTkyMiwzMTkyNCwzMTkxOSwzMjEzNiwzMjEzNCwzMjEyOCwzMjE0MSwzMjEyNywzMjEzMywzMjEyMiwzMjE0MiwzMjEyMywzMjEzMSwzMjEyNCwzMjE0MCwzMjE0OCwzMjEzMiwzMjEyNSwzMjE0NiwzMjYyMSwzMjYxOSwzMjYxNSwzMjYxNiwzMjYyMCwzMjY3OCwzMjY3NywzMjY3OSwz''@;'; put 'put ''MjczMSwzMjczMiwzMjgwMSwzMzEyNCwzMzEyMCwzMzE0MywzMzExNiwzMzEyOSwzMzExNSwzMzEyMiwzMzEzOCwyNjQwMSwzMzExOCwzMzE0MiwzMzEyNywzMzEzNSwzMzA5MiwzMzEyMSwzMzMwOSwzMzM1MywzMzM0OCwzMzM0NCwzMzM0NiwzMzM0OSwzNDAzMywzMzg1NSwzMzg3OCwzMzkx''@;'; put 'put ''MCwzMzkxMywzMzkzNSwzMzkzMywzMzg5MywzMzg3MywzMzg1NiwzMzkyNiwzMzg5NSwzMzg0MCwzMzg2OSwzMzkxNywzMzg4MiwzMzg4MSwzMzkwOCwzMzkwNywzMzg4NSwzNDA1NSwzMzg4NiwzMzg0NywzMzg1MCwzMzg0NCwzMzkxNCwzMzg1OSwzMzkxMiwzMzg0MiwzMzg2MSwzMzgzMywz''@;'; put 'put ''Mzc1MywzMzg2NywzMzgzOSwzMzg1OCwzMzgzNywzMzg4NywzMzkwNCwzMzg0OSwzMzg3MCwzMzg2OCwzMzg3NCwzMzkwMywzMzk4OSwzMzkzNCwzMzg1MSwzMzg2MywzMzg0NiwzMzg0MywzMzg5NiwzMzkxOCwzMzg2MCwzMzgzNSwzMzg4OCwzMzg3NiwzMzkwMiwzMzg3MiwzNDU3MSwzNDU2''@;'; put 'put ''NCwzNDU1MSwzNDU3MiwzNDU1NCwzNDUxOCwzNDU0OSwzNDYzNywzNDU1MiwzNDU3NCwzNDU2OSwzNDU2MSwzNDU1MCwzNDU3MywzNDU2NSwzNTAzMCwzNTAxOSwzNTAyMSwzNTAyMiwzNTAzOCwzNTAzNSwzNTAzNCwzNTAyMCwzNTAyNCwzNTIwNSwzNTIyNywzNTI5NSwzNTMwMSwzNTMwMCwz''@;'; put 'put ''NTI5NywzNTI5NiwzNTI5OCwzNTI5MiwzNTMwMiwzNTQ0NiwzNTQ2MiwzNTQ1NSwzNTQyNSwzNTM5MSwzNTQ0NywzNTQ1OCwzNTQ2MCwzNTQ0NSwzNTQ1OSwzNTQ1NywzNTQ0NCwzNTQ1MCwzNTkwMCwzNTkxNSwzNTkxNCwzNTk0MSwzNTk0MCwzNTk0MiwzNTk3NCwzNTk3MiwzNTk3MywzNjA0''@;'; put 'put ''NCwzNjIwMCwzNjIwMSwzNjI0MSwzNjIzNiwzNjIzOCwzNjIzOSwzNjIzNywzNjI0MywzNjI0NCwzNjI0MCwzNjI0MiwzNjMzNiwzNjMyMCwzNjMzMiwzNjMzNywzNjMzNCwzNjMwNCwzNjMyOSwzNjMyMywzNjMyMiwzNjMyNywzNjMzOCwzNjMzMSwzNjM0MCwzNjYxNCwzNjYwNywzNjYwOSwz''@;'; put 'put ''NjYwOCwzNjYxMywzNjYxNSwzNjYxNiwzNjYxMCwzNjYxOSwzNjk0NiwzNjkyNywzNjkzMiwzNjkzNywzNjkyNSwzNzEzNiwzNzEzMywzNzEzNSwzNzEzNywzNzE0MiwzNzE0MCwzNzEzMSwzNzEzNCwzNzIzMCwzNzIzMSwzNzQ0OCwzNzQ1OCwzNzQyNCwzNzQzNCwzNzQ3OCwzNzQyNywzNzQ3''@;'; put 'put ''NywzNzQ3MCwzNzUwNywzNzQyMiwzNzQ1MCwzNzQ0NiwzNzQ4NSwzNzQ4NCwzNzQ1NSwzNzQ3MiwzNzQ3OSwzNzQ4NywzNzQzMCwzNzQ3MywzNzQ4OCwzNzQyNSwzNzQ2MCwzNzQ3NSwzNzQ1NiwzNzQ5MCwzNzQ1NCwzNzQ1OSwzNzQ1MiwzNzQ2MiwzNzQyNiwzODMwMywzODMwMCwzODMwMiwz''@;'; put 'put ''ODI5OSwzODU0NiwzODU0NywzODU0NSwzODU1MSwzODYwNiwzODY1MCwzODY1MywzODY0OCwzODY0NSwzODc3MSwzODc3NSwzODc3NiwzODc3MCwzODkyNywzODkyNSwzODkyNiwzOTA4NCwzOTE1OCwzOTE2MSwzOTM0MywzOTM0NiwzOTM0NCwzOTM0OSwzOTU5NywzOTU5NSwzOTc3MSw0MDE3''@;'; put 'put ''MCw0MDE3Myw0MDE2Nyw0MDU3Niw0MDcwMSwyMDcxMCwyMDY5MiwyMDY5NSwyMDcxMiwyMDcyMywyMDY5OSwyMDcxNCwyMDcwMSwyMDcwOCwyMDY5MSwyMDcxNiwyMDcyMCwyMDcxOSwyMDcwNywyMDcwNCwyMDk1MiwyMTEyMCwyMTEyMSwyMTIyNSwyMTIyNywyMTI5NiwyMTQyMCwyMjA1NSwy''@;'; put 'put ''MjAzNywyMjAyOCwyMjAzNCwyMjAxMiwyMjAzMSwyMjA0NCwyMjAxNywyMjAzNSwyMjAxOCwyMjAxMCwyMjA0NSwyMjAyMCwyMjAxNSwyMjAwOSwyMjY2NSwyMjY1MiwyMjY3MiwyMjY4MCwyMjY2MiwyMjY1NywyMjY1NSwyMjY0NCwyMjY2NywyMjY1MCwyMjY2MywyMjY3MywyMjY3MCwyMjY0''@;'; put 'put ''NiwyMjY1OCwyMjY2NCwyMjY1MSwyMjY3NiwyMjY3MSwyMjc4MiwyMjg5MSwyMzI2MCwyMzI3OCwyMzI2OSwyMzI1MywyMzI3NCwyMzI1OCwyMzI3NywyMzI3NSwyMzI4MywyMzI2NiwyMzI2NCwyMzI1OSwyMzI3NiwyMzI2MiwyMzI2MSwyMzI1NywyMzI3MiwyMzI2MywyMzQxNSwyMzUyMCwy''@;'; put 'put ''MzUyMywyMzY1MSwyMzkzOCwyMzkzNiwyMzkzMywyMzk0MiwyMzkzMCwyMzkzNywyMzkyNywyMzk0NiwyMzk0NSwyMzk0NCwyMzkzNCwyMzkzMiwyMzk0OSwyMzkyOSwyMzkzNSwyNDE1MiwyNDE1MywyNDE0NywyNDI4MCwyNDI3MywyNDI3OSwyNDI3MCwyNDI4NCwyNDI3NywyNDI4MSwyNDI3''@;'; put 'put ''NCwyNDI3NiwyNDM4OCwyNDM4NywyNDQzMSwyNDUwMiwyNDg3NiwyNDg3MiwyNDg5NywyNDkyNiwyNDk0NSwyNDk0NywyNDkxNCwyNDkxNSwyNDk0NiwyNDk0MCwyNDk2MCwyNDk0OCwyNDkxNiwyNDk1NCwyNDkyMywyNDkzMywyNDg5MSwyNDkzOCwyNDkyOSwyNDkxOCwyNTEyOSwyNTEyNywy''@;'; put 'put ''NTEzMSwyNTY0MywyNTY3NywyNTY5MSwyNTY5MywyNTcxNiwyNTcxOCwyNTcxNCwyNTcxNSwyNTcyNSwyNTcxNywyNTcwMiwyNTc2NiwyNTY3OCwyNTczMCwyNTY5NCwyNTY5MiwyNTY3NSwyNTY4MywyNTY5NiwyNTY4MCwyNTcyNywyNTY2MywyNTcwOCwyNTcwNywyNTY4OSwyNTcwMSwyNTcx''@;'; put 'put ''OSwyNTk3MSwyNjAxNiwyNjI3MywyNjI3MiwyNjI3MSwyNjM3MywyNjM3MiwyNjQwMiwyNzA1NywyNzA2MiwyNzA4MSwyNzA0MCwyNzA4NiwyNzAzMCwyNzA1NiwyNzA1MiwyNzA2OCwyNzAyNSwyNzAzMywyNzAyMiwyNzA0NywyNzAyMSwyNzA0OSwyNzA3MCwyNzA1NSwyNzA3MSwyNzA3Niwy''@;'; put 'put ''NzA2OSwyNzA0NCwyNzA5MiwyNzA2NSwyNzA4MiwyNzAzNCwyNzA4NywyNzA1OSwyNzAyNywyNzA1MCwyNzA0MSwyNzAzOCwyNzA5NywyNzAzMSwyNzAyNCwyNzA3NCwyNzA2MSwyNzA0NSwyNzA3OCwyNzQ2NiwyNzQ2OSwyNzQ2NywyNzU1MCwyNzU1MSwyNzU1MiwyNzU4NywyNzU4OCwyNzY0''@;'; put 'put ''NiwyODM2NiwyODQwNSwyODQwMSwyODQxOSwyODQ1MywyODQwOCwyODQ3MSwyODQxMSwyODQ2MiwyODQyNSwyODQ5NCwyODQ0MSwyODQ0MiwyODQ1NSwyODQ0MCwyODQ3NSwyODQzNCwyODM5NywyODQyNiwyODQ3MCwyODUzMSwyODQwOSwyODM5OCwyODQ2MSwyODQ4MCwyODQ2NCwyODQ3Niwy''@;'; put 'put ''ODQ2OSwyODM5NSwyODQyMywyODQzMCwyODQ4MywyODQyMSwyODQxMywyODQwNiwyODQ3MywyODQ0NCwyODQxMiwyODQ3NCwyODQ0NywyODQyOSwyODQ0NiwyODQyNCwyODQ0OSwyOTA2MywyOTA3MiwyOTA2NSwyOTA1NiwyOTA2MSwyOTA1OCwyOTA3MSwyOTA1MSwyOTA2MiwyOTA1NywyOTA3''@;'; put 'put ''OSwyOTI1MiwyOTI2NywyOTMzNSwyOTMzMywyOTMzMSwyOTUwNywyOTUxNywyOTUyMSwyOTUxNiwyOTc5NCwyOTgxMSwyOTgwOSwyOTgxMywyOTgxMCwyOTc5OSwyOTgwNiwyOTk1MiwyOTk1NCwyOTk1NSwzMDA3NywzMDA5NiwzMDIzMCwzMDIxNiwzMDIyMCwzMDIyOSwzMDIyNSwzMDIxOCwz''@;'; put 'put ''MDIyOCwzMDM5MiwzMDU5MywzMDU4OCwzMDU5NywzMDU5NCwzMDU3NCwzMDU5MiwzMDU3NSwzMDU5MCwzMDU5NSwzMDg5OCwzMDg5MCwzMDkwMCwzMDg5MywzMDg4OCwzMDg0NiwzMDg5MSwzMDg3OCwzMDg4NSwzMDg4MCwzMDg5MiwzMDg4MiwzMDg4NCwzMTEyOCwzMTExNCwzMTExNSwzMTEy''@;'; put 'put ''NiwzMTEyNSwzMTEyNCwzMTEyMywzMTEyNywzMTExMiwzMTEyMiwzMTEyMCwzMTI3NSwzMTMwNiwzMTI4MCwzMTI3OSwzMTI3MiwzMTI3MCwzMTQwMCwzMTQwMywzMTQwNCwzMTQ3MCwzMTYyNCwzMTY0NCwzMTYyNiwzMTYzMywzMTYzMiwzMTYzOCwzMTYyOSwzMTYyOCwzMTY0MywzMTYzMCwz''@;'; put 'put ''MTYyMSwzMTY0MCwyMTEyNCwzMTY0MSwzMTY1MiwzMTYxOCwzMTkzMSwzMTkzNSwzMTkzMiwzMTkzMCwzMjE2NywzMjE4MywzMjE5NCwzMjE2MywzMjE3MCwzMjE5MywzMjE5MiwzMjE5NywzMjE1NywzMjIwNiwzMjE5NiwzMjE5OCwzMjIwMywzMjIwNCwzMjE3NSwzMjE4NSwzMjE1MCwzMjE4''@;'; put 'put ''OCwzMjE1OSwzMjE2NiwzMjE3NCwzMjE2OSwzMjE2MSwzMjIwMSwzMjYyNywzMjczOCwzMjczOSwzMjc0MSwzMjczNCwzMjgwNCwzMjg2MSwzMjg2MCwzMzE2MSwzMzE1OCwzMzE1NSwzMzE1OSwzMzE2NSwzMzE2NCwzMzE2MywzMzMwMSwzMzk0MywzMzk1NiwzMzk1MywzMzk1MSwzMzk3OCwz''@;'; put 'put ''Mzk5OCwzMzk4NiwzMzk2NCwzMzk2NiwzMzk2MywzMzk3NywzMzk3MiwzMzk4NSwzMzk5NywzMzk2MiwzMzk0NiwzMzk2OSwzNGUzLDMzOTQ5LDMzOTU5LDMzOTc5LDMzOTU0LDMzOTQwLDMzOTkxLDMzOTk2LDMzOTQ3LDMzOTYxLDMzOTY3LDMzOTYwLDM0MDA2LDMzOTQ0LDMzOTc0LDMzOTk5''@;'; put 'put ''LDMzOTUyLDM0MDA3LDM0MDA0LDM0MDAyLDM0MDExLDMzOTY4LDMzOTM3LDM0NDAxLDM0NjExLDM0NTk1LDM0NjAwLDM0NjY3LDM0NjI0LDM0NjA2LDM0NTkwLDM0NTkzLDM0NTg1LDM0NTg3LDM0NjI3LDM0NjA0LDM0NjI1LDM0NjIyLDM0NjMwLDM0NTkyLDM0NjEwLDM0NjAyLDM0NjA1LDM0''@;'; put 'put ''NjIwLDM0NTc4LDM0NjE4LDM0NjA5LDM0NjEzLDM0NjI2LDM0NTk4LDM0NTk5LDM0NjE2LDM0NTk2LDM0NTg2LDM0NjA4LDM0NTc3LDM1MDYzLDM1MDQ3LDM1MDU3LDM1MDU4LDM1MDY2LDM1MDcwLDM1MDU0LDM1MDY4LDM1MDYyLDM1MDY3LDM1MDU2LDM1MDUyLDM1MDUxLDM1MjI5LDM1MjMz''@;'; put 'put ''LDM1MjMxLDM1MjMwLDM1MzA1LDM1MzA3LDM1MzA0LDM1NDk5LDM1NDgxLDM1NDY3LDM1NDc0LDM1NDcxLDM1NDc4LDM1OTAxLDM1OTQ0LDM1OTQ1LDM2MDUzLDM2MDQ3LDM2MDU1LDM2MjQ2LDM2MzYxLDM2MzU0LDM2MzUxLDM2MzY1LDM2MzQ5LDM2MzYyLDM2MzU1LDM2MzU5LDM2MzU4LDM2''@;'; put 'put ''MzU3LDM2MzUwLDM2MzUyLDM2MzU2LDM2NjI0LDM2NjI1LDM2NjIyLDM2NjIxLDM3MTU1LDM3MTQ4LDM3MTUyLDM3MTU0LDM3MTUxLDM3MTQ5LDM3MTQ2LDM3MTU2LDM3MTUzLDM3MTQ3LDM3MjQyLDM3MjM0LDM3MjQxLDM3MjM1LDM3NTQxLDM3NTQwLDM3NDk0LDM3NTMxLDM3NDk4LDM3NTM2''@;'; put 'put ''LDM3NTI0LDM3NTQ2LDM3NTE3LDM3NTQyLDM3NTMwLDM3NTQ3LDM3NDk3LDM3NTI3LDM3NTAzLDM3NTM5LDM3NjE0LDM3NTE4LDM3NTA2LDM3NTI1LDM3NTM4LDM3NTAxLDM3NTEyLDM3NTM3LDM3NTE0LDM3NTEwLDM3NTE2LDM3NTI5LDM3NTQzLDM3NTAyLDM3NTExLDM3NTQ1LDM3NTMzLDM3''@;'; put 'put ''NTE1LDM3NDIxLDM4NTU4LDM4NTYxLDM4NjU1LDM4NzQ0LDM4NzgxLDM4Nzc4LDM4NzgyLDM4Nzg3LDM4Nzg0LDM4Nzg2LDM4Nzc5LDM4Nzg4LDM4Nzg1LDM4NzgzLDM4ODYyLDM4ODYxLDM4OTM0LDM5MDg1LDM5MDg2LDM5MTcwLDM5MTY4LDM5MTc1LDM5MzI1LDM5MzI0LDM5MzYzLDM5MzUz''@;'; put 'put ''LDM5MzU1LDM5MzU0LDM5MzYyLDM5MzU3LDM5MzY3LDM5NjAxLDM5NjUxLDM5NjU1LDM5NzQyLDM5NzQzLDM5Nzc2LDM5Nzc3LDM5Nzc1LDQwMTc3LDQwMTc4LDQwMTgxLDQwNjE1LDIwNzM1LDIwNzM5LDIwNzg0LDIwNzI4LDIwNzQyLDIwNzQzLDIwNzI2LDIwNzM0LDIwNzQ3LDIwNzQ4LDIw''@;'; put 'put ''NzMzLDIwNzQ2LDIxMTMxLDIxMTMyLDIxMjMzLDIxMjMxLDIyMDg4LDIyMDgyLDIyMDkyLDIyMDY5LDIyMDgxLDIyMDkwLDIyMDg5LDIyMDg2LDIyMTA0LDIyMTA2LDIyMDgwLDIyMDY3LDIyMDc3LDIyMDYwLDIyMDc4LDIyMDcyLDIyMDU4LDIyMDc0LDIyMjk4LDIyNjk5LDIyNjg1LDIyNzA1''@;'; put 'put ''LDIyNjg4LDIyNjkxLDIyNzAzLDIyNzAwLDIyNjkzLDIyNjg5LDIyNzgzLDIzMjk1LDIzMjg0LDIzMjkzLDIzMjg3LDIzMjg2LDIzMjk5LDIzMjg4LDIzMjk4LDIzMjg5LDIzMjk3LDIzMzAzLDIzMzAxLDIzMzExLDIzNjU1LDIzOTYxLDIzOTU5LDIzOTY3LDIzOTU0LDIzOTcwLDIzOTU1LDIz''@;'; put 'put ''OTU3LDIzOTY4LDIzOTY0LDIzOTY5LDIzOTYyLDIzOTY2LDI0MTY5LDI0MTU3LDI0MTYwLDI0MTU2LDMyMjQzLDI0MjgzLDI0Mjg2LDI0Mjg5LDI0MzkzLDI0NDk4LDI0OTcxLDI0OTYzLDI0OTUzLDI1MDA5LDI1MDA4LDI0OTk0LDI0OTY5LDI0OTg3LDI0OTc5LDI1MDA3LDI1MDA1LDI0OTkx''@;'; put 'put ''LDI0OTc4LDI1MDAyLDI0OTkzLDI0OTczLDI0OTM0LDI1MDExLDI1MTMzLDI1NzEwLDI1NzEyLDI1NzUwLDI1NzYwLDI1NzMzLDI1NzUxLDI1NzU2LDI1NzQzLDI1NzM5LDI1NzM4LDI1NzQwLDI1NzYzLDI1NzU5LDI1NzA0LDI1Nzc3LDI1NzUyLDI1OTc0LDI1OTc4LDI1OTc3LDI1OTc5LDI2''@;'; put 'put ''MDM0LDI2MDM1LDI2MjkzLDI2Mjg4LDI2MjgxLDI2MjkwLDI2Mjk1LDI2MjgyLDI2Mjg3LDI3MTM2LDI3MTQyLDI3MTU5LDI3MTA5LDI3MTI4LDI3MTU3LDI3MTIxLDI3MTA4LDI3MTY4LDI3MTM1LDI3MTE2LDI3MTA2LDI3MTYzLDI3MTY1LDI3MTM0LDI3MTc1LDI3MTIyLDI3MTE4LDI3MTU2''@;'; put 'put ''LDI3MTI3LDI3MTExLDI3MjAwLDI3MTQ0LDI3MTEwLDI3MTMxLDI3MTQ5LDI3MTMyLDI3MTE1LDI3MTQ1LDI3MTQwLDI3MTYwLDI3MTczLDI3MTUxLDI3MTI2LDI3MTc0LDI3MTQzLDI3MTI0LDI3MTU4LDI3NDczLDI3NTU3LDI3NTU1LDI3NTU0LDI3NTU4LDI3NjQ5LDI3NjQ4LDI3NjQ3LDI3''@;'; put 'put ''NjUwLDI4NDgxLDI4NDU0LDI4NTQyLDI4NTUxLDI4NjE0LDI4NTYyLDI4NTU3LDI4NTUzLDI4NTU2LDI4NTE0LDI4NDk1LDI4NTQ5LDI4NTA2LDI4NTY2LDI4NTM0LDI4NTI0LDI4NTQ2LDI4NTAxLDI4NTMwLDI4NDk4LDI4NDk2LDI4NTAzLDI4NTY0LDI4NTYzLDI4NTA5LDI4NDE2LDI4NTEz''@;'; put 'put ''LDI4NTIzLDI4NTQxLDI4NTE5LDI4NTYwLDI4NDk5LDI4NTU1LDI4NTIxLDI4NTQzLDI4NTY1LDI4NTE1LDI4NTM1LDI4NTIyLDI4NTM5LDI5MTA2LDI5MTAzLDI5MDgzLDI5MTA0LDI5MDg4LDI5MDgyLDI5MDk3LDI5MTA5LDI5MDg1LDI5MDkzLDI5MDg2LDI5MDkyLDI5MDg5LDI5MDk4LDI5''@;'; put 'put ''MDg0LDI5MDk1LDI5MTA3LDI5MzM2LDI5MzM4LDI5NTI4LDI5NTIyLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTMzLDI5NTMxLDI5NTM3LDI5NTMwLDI5NTI5LDI5NTM4LDI5ODMxLDI5ODMzLDI5ODM0LDI5ODMwLDI5ODI1LDI5ODIxLDI5ODI5LDI5ODMyLDI5ODIwLDI5ODE3LDI5OTYwLDI5OTU5''@;'; put 'put ''LDMwMDc4LDMwMjQ1LDMwMjM4LDMwMjMzLDMwMjM3LDMwMjM2LDMwMjQzLDMwMjM0LDMwMjQ4LDMwMjM1LDMwMzY0LDMwMzY1LDMwMzY2LDMwMzYzLDMwNjA1LDMwNjA3LDMwNjAxLDMwNjAwLDMwOTI1LDMwOTA3LDMwOTI3LDMwOTI0LDMwOTI5LDMwOTI2LDMwOTMyLDMwOTIwLDMwOTE1LDMw''@;'; put 'put ''OTE2LDMwOTIxLDMxMTMwLDMxMTM3LDMxMTM2LDMxMTMyLDMxMTM4LDMxMTMxLDI3NTEwLDMxMjg5LDMxNDEwLDMxNDEyLDMxNDExLDMxNjcxLDMxNjkxLDMxNjc4LDMxNjYwLDMxNjk0LDMxNjYzLDMxNjczLDMxNjkwLDMxNjY5LDMxOTQxLDMxOTQ0LDMxOTQ4LDMxOTQ3LDMyMjQ3LDMyMjE5''@;'; put 'put ''LDMyMjM0LDMyMjMxLDMyMjE1LDMyMjI1LDMyMjU5LDMyMjUwLDMyMjMwLDMyMjQ2LDMyMjQxLDMyMjQwLDMyMjM4LDMyMjIzLDMyNjMwLDMyNjg0LDMyNjg4LDMyNjg1LDMyNzQ5LDMyNzQ3LDMyNzQ2LDMyNzQ4LDMyNzQyLDMyNzQ0LDMyODY4LDMyODcxLDMzMTg3LDMzMTgzLDMzMTgyLDMz''@;'; put 'put ''MTczLDMzMTg2LDMzMTc3LDMzMTc1LDMzMzAyLDMzMzU5LDMzMzYzLDMzMzYyLDMzMzYwLDMzMzU4LDMzMzYxLDM0MDg0LDM0MTA3LDM0MDYzLDM0MDQ4LDM0MDg5LDM0MDYyLDM0MDU3LDM0MDYxLDM0MDc5LDM0MDU4LDM0MDg3LDM0MDc2LDM0MDQzLDM0MDkxLDM0MDQyLDM0MDU2LDM0MDYw''@;'; put 'put ''LDM0MDM2LDM0MDkwLDM0MDM0LDM0MDY5LDM0MDM5LDM0MDI3LDM0MDM1LDM0MDQ0LDM0MDY2LDM0MDI2LDM0MDI1LDM0MDcwLDM0MDQ2LDM0MDg4LDM0MDc3LDM0MDk0LDM0MDUwLDM0MDQ1LDM0MDc4LDM0MDM4LDM0MDk3LDM0MDg2LDM0MDIzLDM0MDI0LDM0MDMyLDM0MDMxLDM0MDQxLDM0''@;'; put 'put ''MDcyLDM0MDgwLDM0MDk2LDM0MDU5LDM0MDczLDM0MDk1LDM0NDAyLDM0NjQ2LDM0NjU5LDM0NjYwLDM0Njc5LDM0Nzg1LDM0Njc1LDM0NjQ4LDM0NjQ0LDM0NjUxLDM0NjQyLDM0NjU3LDM0NjUwLDM0NjQxLDM0NjU0LDM0NjY5LDM0NjY2LDM0NjQwLDM0NjM4LDM0NjU1LDM0NjUzLDM0Njcx''@;'; put 'put ''LDM0NjY4LDM0NjgyLDM0NjcwLDM0NjUyLDM0NjYxLDM0NjM5LDM0NjgzLDM0Njc3LDM0NjU4LDM0NjYzLDM0NjY1LDM0OTA2LDM1MDc3LDM1MDg0LDM1MDkyLDM1MDgzLDM1MDk1LDM1MDk2LDM1MDk3LDM1MDc4LDM1MDk0LDM1MDg5LDM1MDg2LDM1MDgxLDM1MjM0LDM1MjM2LDM1MjM1LDM1''@;'; put 'put ''MzA5LDM1MzEyLDM1MzA4LDM1NTM1LDM1NTI2LDM1NTEyLDM1NTM5LDM1NTM3LDM1NTQwLDM1NTQxLDM1NTE1LDM1NTQzLDM1NTE4LDM1NTIwLDM1NTI1LDM1NTQ0LDM1NTIzLDM1NTE0LDM1NTE3LDM1NTQ1LDM1OTAyLDM1OTE3LDM1OTgzLDM2MDY5LDM2MDYzLDM2MDU3LDM2MDcyLDM2MDU4''@;'; put 'put ''LDM2MDYxLDM2MDcxLDM2MjU2LDM2MjUyLDM2MjU3LDM2MjUxLDM2Mzg0LDM2Mzg3LDM2Mzg5LDM2Mzg4LDM2Mzk4LDM2MzczLDM2Mzc5LDM2Mzc0LDM2MzY5LDM2Mzc3LDM2MzkwLDM2MzkxLDM2MzcyLDM2MzcwLDM2Mzc2LDM2MzcxLDM2MzgwLDM2Mzc1LDM2Mzc4LDM2NjUyLDM2NjQ0LDM2''@;'; put 'put ''NjMyLDM2NjM0LDM2NjQwLDM2NjQzLDM2NjMwLDM2NjMxLDM2OTc5LDM2OTc2LDM2OTc1LDM2OTY3LDM2OTcxLDM3MTY3LDM3MTYzLDM3MTYxLDM3MTYyLDM3MTcwLDM3MTU4LDM3MTY2LDM3MjUzLDM3MjU0LDM3MjU4LDM3MjQ5LDM3MjUwLDM3MjUyLDM3MjQ4LDM3NTg0LDM3NTcxLDM3NTcy''@;'; put 'put ''LDM3NTY4LDM3NTkzLDM3NTU4LDM3NTgzLDM3NjE3LDM3NTk5LDM3NTkyLDM3NjA5LDM3NTkxLDM3NTk3LDM3NTgwLDM3NjE1LDM3NTcwLDM3NjA4LDM3NTc4LDM3NTc2LDM3NTgyLDM3NjA2LDM3NTgxLDM3NTg5LDM3NTc3LDM3NjAwLDM3NTk4LDM3NjA3LDM3NTg1LDM3NTg3LDM3NTU3LDM3''@;'; put 'put ''NjAxLDM3NTc0LDM3NTU2LDM4MjY4LDM4MzE2LDM4MzE1LDM4MzE4LDM4MzIwLDM4NTY0LDM4NTYyLDM4NjExLDM4NjYxLDM4NjY0LDM4NjU4LDM4NzQ2LDM4Nzk0LDM4Nzk4LDM4NzkyLDM4ODY0LDM4ODYzLDM4OTQyLDM4OTQxLDM4OTUwLDM4OTUzLDM4OTUyLDM4OTQ0LDM4OTM5LDM4OTUx''@;'; put 'put ''LDM5MDkwLDM5MTc2LDM5MTYyLDM5MTg1LDM5MTg4LDM5MTkwLDM5MTkxLDM5MTg5LDM5Mzg4LDM5MzczLDM5Mzc1LDM5Mzc5LDM5MzgwLDM5Mzc0LDM5MzY5LDM5MzgyLDM5Mzg0LDM5MzcxLDM5MzgzLDM5MzcyLDM5NjAzLDM5NjYwLDM5NjU5LDM5NjY3LDM5NjY2LDM5NjY1LDM5NzUwLDM5''@;'; put 'put ''NzQ3LDM5NzgzLDM5Nzk2LDM5NzkzLDM5NzgyLDM5Nzk4LDM5Nzk3LDM5NzkyLDM5Nzg0LDM5NzgwLDM5Nzg4LDQwMTg4LDQwMTg2LDQwMTg5LDQwMTkxLDQwMTgzLDQwMTk5LDQwMTkyLDQwMTg1LDQwMTg3LDQwMjAwLDQwMTk3LDQwMTk2LDQwNTc5LDQwNjU5LDQwNzE5LDQwNzIwLDIwNzY0''@;'; put 'put ''LDIwNzU1LDIwNzU5LDIwNzYyLDIwNzUzLDIwOTU4LDIxMzAwLDIxNDczLDIyMTI4LDIyMTEyLDIyMTI2LDIyMTMxLDIyMTE4LDIyMTE1LDIyMTI1LDIyMTMwLDIyMTEwLDIyMTM1LDIyMzAwLDIyMjk5LDIyNzI4LDIyNzE3LDIyNzI5LDIyNzE5LDIyNzE0LDIyNzIyLDIyNzE2LDIyNzI2LDIz''@;'; put 'put ''MzE5LDIzMzIxLDIzMzIzLDIzMzI5LDIzMzE2LDIzMzE1LDIzMzEyLDIzMzE4LDIzMzM2LDIzMzIyLDIzMzI4LDIzMzI2LDIzNTM1LDIzOTgwLDIzOTg1LDIzOTc3LDIzOTc1LDIzOTg5LDIzOTg0LDIzOTgyLDIzOTc4LDIzOTc2LDIzOTg2LDIzOTgxLDIzOTgzLDIzOTg4LDI0MTY3LDI0MTY4''@;'; put 'put ''LDI0MTY2LDI0MTc1LDI0Mjk3LDI0Mjk1LDI0Mjk0LDI0Mjk2LDI0MjkzLDI0Mzk1LDI0NTA4LDI0OTg5LDI1ZTMsMjQ5ODIsMjUwMjksMjUwMTIsMjUwMzAsMjUwMjUsMjUwMzYsMjUwMTgsMjUwMjMsMjUwMTYsMjQ5NzIsMjU4MTUsMjU4MTQsMjU4MDgsMjU4MDcsMjU4MDEsMjU3ODksMjU3''@;'; put 'put ''MzcsMjU3OTUsMjU4MTksMjU4NDMsMjU4MTcsMjU5MDcsMjU5ODMsMjU5ODAsMjYwMTgsMjYzMTIsMjYzMDIsMjYzMDQsMjYzMTQsMjYzMTUsMjYzMTksMjYzMDEsMjYyOTksMjYyOTgsMjYzMTYsMjY0MDMsMjcxODgsMjcyMzgsMjcyMDksMjcyMzksMjcxODYsMjcyNDAsMjcxOTgsMjcyMjks''@;'; put 'put ''MjcyNDUsMjcyNTQsMjcyMjcsMjcyMTcsMjcxNzYsMjcyMjYsMjcxOTUsMjcxOTksMjcyMDEsMjcyNDIsMjcyMzYsMjcyMTYsMjcyMTUsMjcyMjAsMjcyNDcsMjcyNDEsMjcyMzIsMjcxOTYsMjcyMzAsMjcyMjIsMjcyMjEsMjcyMTMsMjcyMTQsMjcyMDYsMjc0NzcsMjc0NzYsMjc0NzgsMjc1''@;'; put 'put ''NTksMjc1NjIsMjc1NjMsMjc1OTIsMjc1OTEsMjc2NTIsMjc2NTEsMjc2NTQsMjg1ODksMjg2MTksMjg1NzksMjg2MTUsMjg2MDQsMjg2MjIsMjg2MTYsMjg1MTAsMjg2MTIsMjg2MDUsMjg1NzQsMjg2MTgsMjg1ODQsMjg2NzYsMjg1ODEsMjg1OTAsMjg2MDIsMjg1ODgsMjg1ODYsMjg2MjMs''@;'; put 'put ''Mjg2MDcsMjg2MDAsMjg1NzgsMjg2MTcsMjg1ODcsMjg2MjEsMjg1OTEsMjg1OTQsMjg1OTIsMjkxMjUsMjkxMjIsMjkxMTksMjkxMTIsMjkxNDIsMjkxMjAsMjkxMjEsMjkxMzEsMjkxNDAsMjkxMzAsMjkxMjcsMjkxMzUsMjkxMTcsMjkxNDQsMjkxMTYsMjkxMjYsMjkxNDYsMjkxNDcsMjkz''@;'; put 'put ''NDEsMjkzNDIsMjk1NDUsMjk1NDIsMjk1NDMsMjk1NDgsMjk1NDEsMjk1NDcsMjk1NDYsMjk4MjMsMjk4NTAsMjk4NTYsMjk4NDQsMjk4NDIsMjk4NDUsMjk4NTcsMjk5NjMsMzAwODAsMzAyNTUsMzAyNTMsMzAyNTcsMzAyNjksMzAyNTksMzAyNjgsMzAyNjEsMzAyNTgsMzAyNTYsMzAzOTUs''@;'; put 'put ''MzA0MzgsMzA2MTgsMzA2MjEsMzA2MjUsMzA2MjAsMzA2MTksMzA2MjYsMzA2MjcsMzA2MTMsMzA2MTcsMzA2MTUsMzA5NDEsMzA5NTMsMzA5NDksMzA5NTQsMzA5NDIsMzA5NDcsMzA5MzksMzA5NDUsMzA5NDYsMzA5NTcsMzA5NDMsMzA5NDQsMzExNDAsMzEzMDAsMzEzMDQsMzEzMDMsMzE0''@;'; put 'put ''MTQsMzE0MTYsMzE0MTMsMzE0MDksMzE0MTUsMzE3MTAsMzE3MTUsMzE3MTksMzE3MDksMzE3MDEsMzE3MTcsMzE3MDYsMzE3MjAsMzE3MzcsMzE3MDAsMzE3MjIsMzE3MTQsMzE3MDgsMzE3MjMsMzE3MDQsMzE3MTEsMzE5NTQsMzE5NTYsMzE5NTksMzE5NTIsMzE5NTMsMzIyNzQsMzIyODks''@;'; put 'put ''MzIyNzksMzIyNjgsMzIyODcsMzIyODgsMzIyNzUsMzIyNzAsMzIyODQsMzIyNzcsMzIyODIsMzIyOTAsMzIyNjcsMzIyNzEsMzIyNzgsMzIyNjksMzIyNzYsMzIyOTMsMzIyOTIsMzI1NzksMzI2MzUsMzI2MzYsMzI2MzQsMzI2ODksMzI3NTEsMzI4MTAsMzI4MDksMzI4NzYsMzMyMDEsMzMx''@;'; put 'put ''OTAsMzMxOTgsMzMyMDksMzMyMDUsMzMxOTUsMzMyMDAsMzMxOTYsMzMyMDQsMzMyMDIsMzMyMDcsMzMxOTEsMzMyNjYsMzMzNjUsMzMzNjYsMzMzNjcsMzQxMzQsMzQxMTcsMzQxNTUsMzQxMjUsMzQxMzEsMzQxNDUsMzQxMzYsMzQxMTIsMzQxMTgsMzQxNDgsMzQxMTMsMzQxNDYsMzQxMTYs''@;'; put 'put ''MzQxMjksMzQxMTksMzQxNDcsMzQxMTAsMzQxMzksMzQxNjEsMzQxMjYsMzQxNTgsMzQxNjUsMzQxMzMsMzQxNTEsMzQxNDQsMzQxODgsMzQxNTAsMzQxNDEsMzQxMzIsMzQxNDksMzQxNTYsMzQ0MDMsMzQ0MDUsMzQ0MDQsMzQ3MTUsMzQ3MDMsMzQ3MTEsMzQ3MDcsMzQ3MDYsMzQ2OTYsMzQ2''@;'; put 'put ''ODksMzQ3MTAsMzQ3MTIsMzQ2ODEsMzQ2OTUsMzQ3MjMsMzQ2OTMsMzQ3MDQsMzQ3MDUsMzQ3MTcsMzQ2OTIsMzQ3MDgsMzQ3MTYsMzQ3MTQsMzQ2OTcsMzUxMDIsMzUxMTAsMzUxMjAsMzUxMTcsMzUxMTgsMzUxMTEsMzUxMjEsMzUxMDYsMzUxMTMsMzUxMDcsMzUxMTksMzUxMTYsMzUxMDMs''@;'; put 'put ''MzUzMTMsMzU1NTIsMzU1NTQsMzU1NzAsMzU1NzIsMzU1NzMsMzU1NDksMzU2MDQsMzU1NTYsMzU1NTEsMzU1NjgsMzU1MjgsMzU1NTAsMzU1NTMsMzU1NjAsMzU1ODMsMzU1NjcsMzU1NzksMzU5ODUsMzU5ODYsMzU5ODQsMzYwODUsMzYwNzgsMzYwODEsMzYwODAsMzYwODMsMzYyMDQsMzYy''@;'; put 'put ''MDYsMzYyNjEsMzYyNjMsMzY0MDMsMzY0MTQsMzY0MDgsMzY0MTYsMzY0MjEsMzY0MDYsMzY0MTIsMzY0MTMsMzY0MTcsMzY0MDAsMzY0MTUsMzY1NDEsMzY2NjIsMzY2NTQsMzY2NjEsMzY2NTgsMzY2NjUsMzY2NjMsMzY2NjAsMzY5ODIsMzY5ODUsMzY5ODcsMzY5OTgsMzcxMTQsMzcxNzEs''@;'; put 'put ''MzcxNzMsMzcxNzQsMzcyNjcsMzcyNjQsMzcyNjUsMzcyNjEsMzcyNjMsMzc2NzEsMzc2NjIsMzc2NDAsMzc2NjMsMzc2MzgsMzc2NDcsMzc3NTQsMzc2ODgsMzc2OTIsMzc2NTksMzc2NjcsMzc2NTAsMzc2MzMsMzc3MDIsMzc2NzcsMzc2NDYsMzc2NDUsMzc1NzksMzc2NjEsMzc2MjYsMzc2''@;'; put 'put ''NjksMzc2NTEsMzc2MjUsMzc2MjMsMzc2ODQsMzc2MzQsMzc2NjgsMzc2MzEsMzc2NzMsMzc2ODksMzc2ODUsMzc2NzQsMzc2NTIsMzc2NDQsMzc2NDMsMzc2MzAsMzc2NDEsMzc2MzIsMzc2MjcsMzc2NTQsMzgzMzIsMzgzNDksMzgzMzQsMzgzMjksMzgzMzAsMzgzMjYsMzgzMzUsMzgzMjUs''@;'; put 'put ''MzgzMzMsMzg1NjksMzg2MTIsMzg2NjcsMzg2NzQsMzg2NzIsMzg4MDksMzg4MDcsMzg4MDQsMzg4OTYsMzg5MDQsMzg5NjUsMzg5NTksMzg5NjIsMzkyMDQsMzkxOTksMzkyMDcsMzkyMDksMzkzMjYsMzk0MDYsMzk0MDQsMzkzOTcsMzkzOTYsMzk0MDgsMzkzOTUsMzk0MDIsMzk0MDEsMzkz''@;'; put 'put ''OTksMzk2MDksMzk2MTUsMzk2MDQsMzk2MTEsMzk2NzAsMzk2NzQsMzk2NzMsMzk2NzEsMzk3MzEsMzk4MDgsMzk4MTMsMzk4MTUsMzk4MDQsMzk4MDYsMzk4MDMsMzk4MTAsMzk4MjcsMzk4MjYsMzk4MjQsMzk4MDIsMzk4MjksMzk4MDUsMzk4MTYsNDAyMjksNDAyMTUsNDAyMjQsNDAyMjIs''@;'; put 'put ''NDAyMTIsNDAyMzMsNDAyMjEsNDAyMTYsNDAyMjYsNDAyMDgsNDAyMTcsNDAyMjMsNDA1ODQsNDA1ODIsNDA1ODMsNDA2MjIsNDA2MjEsNDA2NjEsNDA2NjIsNDA2OTgsNDA3MjIsNDA3NjUsMjA3NzQsMjA3NzMsMjA3NzAsMjA3NzIsMjA3NjgsMjA3NzcsMjEyMzYsMjIxNjMsMjIxNTYsMjIx''@;'; put 'put ''NTcsMjIxNTAsMjIxNDgsMjIxNDcsMjIxNDIsMjIxNDYsMjIxNDMsMjIxNDUsMjI3NDIsMjI3NDAsMjI3MzUsMjI3MzgsMjMzNDEsMjMzMzMsMjMzNDYsMjMzMzEsMjMzNDAsMjMzMzUsMjMzMzQsMjMzNDMsMjMzNDIsMjM0MTksMjM1MzcsMjM1MzgsMjM5OTEsMjQxNzIsMjQxNzAsMjQ1MTAs''@;'; put 'put ''MjQ1MDcsMjUwMjcsMjUwMTMsMjUwMjAsMjUwNjMsMjUwNTYsMjUwNjEsMjUwNjAsMjUwNjQsMjUwNTQsMjU4MzksMjU4MzMsMjU4MjcsMjU4MzUsMjU4MjgsMjU4MzIsMjU5ODUsMjU5ODQsMjYwMzgsMjYwNzQsMjYzMjIsMjcyNzcsMjcyODYsMjcyNjUsMjczMDEsMjcyNzMsMjcyOTUsMjcy''@;'; put 'put ''OTEsMjcyOTcsMjcyOTQsMjcyNzEsMjcyODMsMjcyNzgsMjcyODUsMjcyNjcsMjczMDQsMjczMDAsMjcyODEsMjcyNjMsMjczMDIsMjcyOTAsMjcyNjksMjcyNzYsMjcyODIsMjc0ODMsMjc1NjUsMjc2NTcsMjg2MjAsMjg1ODUsMjg2NjAsMjg2MjgsMjg2NDMsMjg2MzYsMjg2NTMsMjg2NDcs''@;'; put 'put ''Mjg2NDYsMjg2MzgsMjg2NTgsMjg2MzcsMjg2NDIsMjg2NDgsMjkxNTMsMjkxNjksMjkxNjAsMjkxNzAsMjkxNTYsMjkxNjgsMjkxNTQsMjk1NTUsMjk1NTAsMjk1NTEsMjk4NDcsMjk4NzQsMjk4NjcsMjk4NDAsMjk4NjYsMjk4NjksMjk4NzMsMjk4NjEsMjk4NzEsMjk5NjgsMjk5NjksMjk5''@;'; put 'put ''NzAsMjk5NjcsMzAwODQsMzAyNzUsMzAyODAsMzAyODEsMzAyNzksMzAzNzIsMzA0NDEsMzA2NDUsMzA2MzUsMzA2NDIsMzA2NDcsMzA2NDYsMzA2NDQsMzA2NDEsMzA2MzIsMzA3MDQsMzA5NjMsMzA5NzMsMzA5NzgsMzA5NzEsMzA5NzIsMzA5NjIsMzA5ODEsMzA5NjksMzA5NzQsMzA5ODAs''@;'; put 'put ''MzExNDcsMzExNDQsMzEzMjQsMzEzMjMsMzEzMTgsMzEzMjAsMzEzMTYsMzEzMjIsMzE0MjIsMzE0MjQsMzE0MjUsMzE3NDksMzE3NTksMzE3MzAsMzE3NDQsMzE3NDMsMzE3MzksMzE3NTgsMzE3MzIsMzE3NTUsMzE3MzEsMzE3NDYsMzE3NTMsMzE3NDcsMzE3NDUsMzE3MzYsMzE3NDEsMzE3''@;'; put 'put ''NTAsMzE3MjgsMzE3MjksMzE3NjAsMzE3NTQsMzE5NzYsMzIzMDEsMzIzMTYsMzIzMjIsMzIzMDcsMzg5ODQsMzIzMTIsMzIyOTgsMzIzMjksMzIzMjAsMzIzMjcsMzIyOTcsMzIzMzIsMzIzMDQsMzIzMTUsMzIzMTAsMzIzMjQsMzIzMTQsMzI1ODEsMzI2MzksMzI2MzgsMzI2MzcsMzI3NTYs''@;'; put 'put ''MzI3NTQsMzI4MTIsMzMyMTEsMzMyMjAsMzMyMjgsMzMyMjYsMzMyMjEsMzMyMjMsMzMyMTIsMzMyNTcsMzMzNzEsMzMzNzAsMzMzNzIsMzQxNzksMzQxNzYsMzQxOTEsMzQyMTUsMzQxOTcsMzQyMDgsMzQxODcsMzQyMTEsMzQxNzEsMzQyMTIsMzQyMDIsMzQyMDYsMzQxNjcsMzQxNzIsMzQx''@;'; put 'put ''ODUsMzQyMDksMzQxNzAsMzQxNjgsMzQxMzUsMzQxOTAsMzQxOTgsMzQxODIsMzQxODksMzQyMDEsMzQyMDUsMzQxNzcsMzQyMTAsMzQxNzgsMzQxODQsMzQxODEsMzQxNjksMzQxNjYsMzQyMDAsMzQxOTIsMzQyMDcsMzQ0MDgsMzQ3NTAsMzQ3MzAsMzQ3MzMsMzQ3NTcsMzQ3MzYsMzQ3MzIs''@;'; put 'put ''MzQ3NDUsMzQ3NDEsMzQ3NDgsMzQ3MzQsMzQ3NjEsMzQ3NTUsMzQ3NTQsMzQ3NjQsMzQ3NDMsMzQ3MzUsMzQ3NTYsMzQ3NjIsMzQ3NDAsMzQ3NDIsMzQ3NTEsMzQ3NDQsMzQ3NDksMzQ3ODIsMzQ3MzgsMzUxMjUsMzUxMjMsMzUxMzIsMzUxMzQsMzUxMzcsMzUxNTQsMzUxMjcsMzUxMzgsMzUy''@;'; put 'put ''NDUsMzUyNDcsMzUyNDYsMzUzMTQsMzUzMTUsMzU2MTQsMzU2MDgsMzU2MDYsMzU2MDEsMzU1ODksMzU1OTUsMzU2MTgsMzU1OTksMzU2MDIsMzU2MDUsMzU1OTEsMzU1OTcsMzU1OTIsMzU1OTAsMzU2MTIsMzU2MDMsMzU2MTAsMzU5MTksMzU5NTIsMzU5NTQsMzU5NTMsMzU5NTEsMzU5ODks''@;'; put 'put ''MzU5ODgsMzYwODksMzYyMDcsMzY0MzAsMzY0MjksMzY0MzUsMzY0MzIsMzY0MjgsMzY0MjMsMzY2NzUsMzY2NzIsMzY5OTcsMzY5OTAsMzcxNzYsMzcyNzQsMzcyODIsMzcyNzUsMzcyNzMsMzcyNzksMzcyODEsMzcyNzcsMzcyODAsMzc3OTMsMzc3NjMsMzc4MDcsMzc3MzIsMzc3MTgsMzc3''@;'; put 'put ''MDMsMzc3NTYsMzc3MjAsMzc3MjQsMzc3NTAsMzc3MDUsMzc3MTIsMzc3MTMsMzc3MjgsMzc3NDEsMzc3NzUsMzc3MDgsMzc3MzgsMzc3NTMsMzc3MTksMzc3MTcsMzc3MTQsMzc3MTEsMzc3NDUsMzc3NTEsMzc3NTUsMzc3MjksMzc3MjYsMzc3MzEsMzc3MzUsMzc3NjAsMzc3MTAsMzc3MjEs''@;'; put 'put ''MzgzNDMsMzgzMzYsMzgzNDUsMzgzMzksMzgzNDEsMzgzMjcsMzg1NzQsMzg1NzYsMzg1NzIsMzg2ODgsMzg2ODcsMzg2ODAsMzg2ODUsMzg2ODEsMzg4MTAsMzg4MTcsMzg4MTIsMzg4MTQsMzg4MTMsMzg4NjksMzg4NjgsMzg4OTcsMzg5NzcsMzg5ODAsMzg5ODYsMzg5ODUsMzg5ODEsMzg5''@;'; put 'put ''NzksMzkyMDUsMzkyMTEsMzkyMTIsMzkyMTAsMzkyMTksMzkyMTgsMzkyMTUsMzkyMTMsMzkyMTcsMzkyMTYsMzkzMjAsMzkzMzEsMzkzMjksMzk0MjYsMzk0MTgsMzk0MTIsMzk0MTUsMzk0MTcsMzk0MTYsMzk0MTQsMzk0MTksMzk0MjEsMzk0MjIsMzk0MjAsMzk0MjcsMzk2MTQsMzk2Nzgs''@;'; put 'put ''Mzk2NzcsMzk2ODEsMzk2NzYsMzk3NTIsMzk4MzQsMzk4NDgsMzk4MzgsMzk4MzUsMzk4NDYsMzk4NDEsMzk4NDUsMzk4NDQsMzk4MTQsMzk4NDIsMzk4NDAsMzk4NTUsNDAyNDMsNDAyNTcsNDAyOTUsNDAyNDYsNDAyMzgsNDAyMzksNDAyNDEsNDAyNDgsNDAyNDAsNDAyNjEsNDAyNTgsNDAy''@;'; put 'put ''NTksNDAyNTQsNDAyNDcsNDAyNTYsNDAyNTMsMzI3NTcsNDAyMzcsNDA1ODYsNDA1ODUsNDA1ODksNDA2MjQsNDA2NDgsNDA2NjYsNDA2OTksNDA3MDMsNDA3NDAsNDA3MzksNDA3MzgsNDA3ODgsNDA4NjQsMjA3ODUsMjA3ODEsMjA3ODIsMjIxNjgsMjIxNzIsMjIxNjcsMjIxNzAsMjIxNzMs''@;'; put 'put ''MjIxNjksMjI4OTYsMjMzNTYsMjM2NTcsMjM2NTgsMjRlMywyNDE3MywyNDE3NCwyNTA0OCwyNTA1NSwyNTA2OSwyNTA3MCwyNTA3MywyNTA2NiwyNTA3MiwyNTA2NywyNTA0NiwyNTA2NSwyNTg1NSwyNTg2MCwyNTg1MywyNTg0OCwyNTg1NywyNTg1OSwyNTg1MiwyNjAwNCwyNjA3NSwyNjMz''@;'; put 'put ''MCwyNjMzMSwyNjMyOCwyNzMzMywyNzMyMSwyNzMyNSwyNzM2MSwyNzMzNCwyNzMyMiwyNzMxOCwyNzMxOSwyNzMzNSwyNzMxNiwyNzMwOSwyNzQ4NiwyNzU5MywyNzY1OSwyODY3OSwyODY4NCwyODY4NSwyODY3MywyODY3NywyODY5MiwyODY4NiwyODY3MSwyODY3MiwyODY2NywyODcxMCwy''@;'; put 'put ''ODY2OCwyODY2MywyODY4MiwyOTE4NSwyOTE4MywyOTE3NywyOTE4NywyOTE4MSwyOTU1OCwyOTg4MCwyOTg4OCwyOTg3NywyOTg4OSwyOTg4NiwyOTg3OCwyOTg4MywyOTg5MCwyOTk3MiwyOTk3MSwzMDMwMCwzMDMwOCwzMDI5NywzMDI4OCwzMDI5MSwzMDI5NSwzMDI5OCwzMDM3NCwzMDM5''@;'; put 'put ''NywzMDQ0NCwzMDY1OCwzMDY1MCwzMDk3NSwzMDk4OCwzMDk5NSwzMDk5NiwzMDk4NSwzMDk5MiwzMDk5NCwzMDk5MywzMTE0OSwzMTE0OCwzMTMyNywzMTc3MiwzMTc4NSwzMTc2OSwzMTc3NiwzMTc3NSwzMTc4OSwzMTc3MywzMTc4MiwzMTc4NCwzMTc3OCwzMTc4MSwzMTc5MiwzMjM0OCwz''@;'; put 'put ''MjMzNiwzMjM0MiwzMjM1NSwzMjM0NCwzMjM1NCwzMjM1MSwzMjMzNywzMjM1MiwzMjM0MywzMjMzOSwzMjY5MywzMjY5MSwzMjc1OSwzMjc2MCwzMjg4NSwzMzIzMywzMzIzNCwzMzIzMiwzMzM3NSwzMzM3NCwzNDIyOCwzNDI0NiwzNDI0MCwzNDI0MywzNDI0MiwzNDIyNywzNDIyOSwzNDIz''@;'; put 'put ''NywzNDI0NywzNDI0NCwzNDIzOSwzNDI1MSwzNDI1NCwzNDI0OCwzNDI0NSwzNDIyNSwzNDIzMCwzNDI1OCwzNDM0MCwzNDIzMiwzNDIzMSwzNDIzOCwzNDQwOSwzNDc5MSwzNDc5MCwzNDc4NiwzNDc3OSwzNDc5NSwzNDc5NCwzNDc4OSwzNDc4MywzNDgwMywzNDc4OCwzNDc3MiwzNDc4MCwz''@;'; put 'put ''NDc3MSwzNDc5NywzNDc3NiwzNDc4NywzNDcyNCwzNDc3NSwzNDc3NywzNDgxNywzNDgwNCwzNDc5MiwzNDc4MSwzNTE1NSwzNTE0NywzNTE1MSwzNTE0OCwzNTE0MiwzNTE1MiwzNTE1MywzNTE0NSwzNTYyNiwzNTYyMywzNTYxOSwzNTYzNSwzNTYzMiwzNTYzNywzNTY1NSwzNTYzMSwzNTY0''@;'; put 'put ''NCwzNTY0NiwzNTYzMywzNTYyMSwzNTYzOSwzNTYyMiwzNTYzOCwzNTYzMCwzNTYyMCwzNTY0MywzNTY0NSwzNTY0MiwzNTkwNiwzNTk1NywzNTk5MywzNTk5MiwzNTk5MSwzNjA5NCwzNjEwMCwzNjA5OCwzNjA5NiwzNjQ0NCwzNjQ1MCwzNjQ0OCwzNjQzOSwzNjQzOCwzNjQ0NiwzNjQ1Mywz''@;'; put 'put ''NjQ1NSwzNjQ0MywzNjQ0MiwzNjQ0OSwzNjQ0NSwzNjQ1NywzNjQzNiwzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MywzNzE2MCwzNzE3OCwzNzE3OSwzNzE4MiwzNzI4OCwzNzI4NSwzNzI4NywzNzI5NSwzNzI5MCwzNzgxMywzNzc3MiwzNzc3OCwzNzgxNSwzNzc4NywzNzc4OSwzNzc2OSwzNzc5''@;'; put 'put ''OSwzNzc3NCwzNzgwMiwzNzc5MCwzNzc5OCwzNzc4MSwzNzc2OCwzNzc4NSwzNzc5MSwzNzc3MywzNzgwOSwzNzc3NywzNzgxMCwzNzc5NiwzNzgwMCwzNzgxMiwzNzc5NSwzNzc5NywzODM1NCwzODM1NSwzODM1MywzODU3OSwzODYxNSwzODYxOCwyNDAwMiwzODYyMywzODYxNiwzODYyMSwz''@;'; put 'put ''ODY5MSwzODY5MCwzODY5MywzODgyOCwzODgzMCwzODgyNCwzODgyNywzODgyMCwzODgyNiwzODgxOCwzODgyMSwzODg3MSwzODg3MywzODg3MCwzODg3MiwzODkwNiwzODk5MiwzODk5MywzODk5NCwzOTA5NiwzOTIzMywzOTIyOCwzOTIyNiwzOTQzOSwzOTQzNSwzOTQzMywzOTQzNywzOTQy''@;'; put 'put ''OCwzOTQ0MSwzOTQzNCwzOTQyOSwzOTQzMSwzOTQzMCwzOTYxNiwzOTY0NCwzOTY4OCwzOTY4NCwzOTY4NSwzOTcyMSwzOTczMywzOTc1NCwzOTc1NiwzOTc1NSwzOTg3OSwzOTg3OCwzOTg3NSwzOTg3MSwzOTg3MywzOTg2MSwzOTg2NCwzOTg5MSwzOTg2MiwzOTg3NiwzOTg2NSwzOTg2OSw0''@;'; put 'put ''MDI4NCw0MDI3NSw0MDI3MSw0MDI2Niw0MDI4Myw0MDI2Nyw0MDI4MSw0MDI3OCw0MDI2OCw0MDI3OSw0MDI3NCw0MDI3Niw0MDI4Nyw0MDI4MCw0MDI4Miw0MDU5MCw0MDU4OCw0MDY3MSw0MDcwNSw0MDcwNCw0MDcyNiw0MDc0MSw0MDc0Nyw0MDc0Niw0MDc0NSw0MDc0NCw0MDc4MCw0MDc4''@;'; put 'put ''OSwyMDc4OCwyMDc4OSwyMTE0MiwyMTIzOSwyMTQyOCwyMjE4NywyMjE4OSwyMjE4MiwyMjE4MywyMjE4NiwyMjE4OCwyMjc0NiwyMjc0OSwyMjc0NywyMjgwMiwyMzM1NywyMzM1OCwyMzM1OSwyNDAwMywyNDE3NiwyNDUxMSwyNTA4MywyNTg2MywyNTg3MiwyNTg2OSwyNTg2NSwyNTg2OCwy''@;'; put 'put ''NTg3MCwyNTk4OCwyNjA3OCwyNjA3NywyNjMzNCwyNzM2NywyNzM2MCwyNzM0MCwyNzM0NSwyNzM1MywyNzMzOSwyNzM1OSwyNzM1NiwyNzM0NCwyNzM3MSwyNzM0MywyNzM0MSwyNzM1OCwyNzQ4OCwyNzU2OCwyNzY2MCwyODY5NywyODcxMSwyODcwNCwyODY5NCwyODcxNSwyODcwNSwyODcw''@;'; put 'put ''NiwyODcwNywyODcxMywyODY5NSwyODcwOCwyODcwMCwyODcxNCwyOTE5NiwyOTE5NCwyOTE5MSwyOTE4NiwyOTE4OSwyOTM0OSwyOTM1MCwyOTM0OCwyOTM0NywyOTM0NSwyOTg5OSwyOTg5MywyOTg3OSwyOTg5MSwyOTk3NCwzMDMwNCwzMDY2NSwzMDY2NiwzMDY2MCwzMDcwNSwzMTAwNSwz''@;'; put 'put ''MTAwMywzMTAwOSwzMTAwNCwzMDk5OSwzMTAwNiwzMTE1MiwzMTMzNSwzMTMzNiwzMTc5NSwzMTgwNCwzMTgwMSwzMTc4OCwzMTgwMywzMTk4MCwzMTk3OCwzMjM3NCwzMjM3MywzMjM3NiwzMjM2OCwzMjM3NSwzMjM2NywzMjM3OCwzMjM3MCwzMjM3MiwzMjM2MCwzMjU4NywzMjU4NiwzMjY0''@;'; put 'put ''MywzMjY0NiwzMjY5NSwzMjc2NSwzMjc2NiwzMjg4OCwzMzIzOSwzMzIzNywzMzM4MCwzMzM3NywzMzM3OSwzNDI4MywzNDI4OSwzNDI4NSwzNDI2NSwzNDI3MywzNDI4MCwzNDI2NiwzNDI2MywzNDI4NCwzNDI5MCwzNDI5NiwzNDI2NCwzNDI3MSwzNDI3NSwzNDI2OCwzNDI1NywzNDI4OCwz''@;'; put 'put ''NDI3OCwzNDI4NywzNDI3MCwzNDI3NCwzNDgxNiwzNDgxMCwzNDgxOSwzNDgwNiwzNDgwNywzNDgyNSwzNDgyOCwzNDgyNywzNDgyMiwzNDgxMiwzNDgyNCwzNDgxNSwzNDgyNiwzNDgxOCwzNTE3MCwzNTE2MiwzNTE2MywzNTE1OSwzNTE2OSwzNTE2NCwzNTE2MCwzNTE2NSwzNTE2MSwzNTIw''@;'; put 'put ''OCwzNTI1NSwzNTI1NCwzNTMxOCwzNTY2NCwzNTY1NiwzNTY1OCwzNTY0OCwzNTY2NywzNTY3MCwzNTY2OCwzNTY1OSwzNTY2OSwzNTY2NSwzNTY1MCwzNTY2NiwzNTY3MSwzNTkwNywzNTk1OSwzNTk1OCwzNTk5NCwzNjEwMiwzNjEwMywzNjEwNSwzNjI2OCwzNjI2NiwzNjI2OSwzNjI2Nywz''@;'; put 'put ''NjQ2MSwzNjQ3MiwzNjQ2NywzNjQ1OCwzNjQ2MywzNjQ3NSwzNjU0NiwzNjY5MCwzNjY4OSwzNjY4NywzNjY4OCwzNjY5MSwzNjc4OCwzNzE4NCwzNzE4MywzNzI5NiwzNzI5MywzNzg1NCwzNzgzMSwzNzgzOSwzNzgyNiwzNzg1MCwzNzg0MCwzNzg4MSwzNzg2OCwzNzgzNiwzNzg0OSwzNzgw''@;'; put 'put ''MSwzNzg2MiwzNzgzNCwzNzg0NCwzNzg3MCwzNzg1OSwzNzg0NSwzNzgyOCwzNzgzOCwzNzgyNCwzNzg0MiwzNzg2MywzODI2OSwzODM2MiwzODM2MywzODYyNSwzODY5NywzODY5OSwzODcwMCwzODY5NiwzODY5NCwzODgzNSwzODgzOSwzODgzOCwzODg3NywzODg3OCwzODg3OSwzOTAwNCwz''@;'; put 'put ''OTAwMSwzOTAwNSwzODk5OSwzOTEwMywzOTEwMSwzOTA5OSwzOTEwMiwzOTI0MCwzOTIzOSwzOTIzNSwzOTMzNCwzOTMzNSwzOTQ1MCwzOTQ0NSwzOTQ2MSwzOTQ1MywzOTQ2MCwzOTQ1MSwzOTQ1OCwzOTQ1NiwzOTQ2MywzOTQ1OSwzOTQ1NCwzOTQ1MiwzOTQ0NCwzOTYxOCwzOTY5MSwzOTY5''@;'; put 'put ''MCwzOTY5NCwzOTY5MiwzOTczNSwzOTkxNCwzOTkxNSwzOTkwNCwzOTkwMiwzOTkwOCwzOTkxMCwzOTkwNiwzOTkyMCwzOTg5MiwzOTg5NSwzOTkxNiwzOTkwMCwzOTg5NywzOTkwOSwzOTg5MywzOTkwNSwzOTg5OCw0MDMxMSw0MDMyMSw0MDMzMCw0MDMyNCw0MDMyOCw0MDMwNSw0MDMyMCw0''@;'; put 'put ''MDMxMiw0MDMyNiw0MDMzMSw0MDMzMiw0MDMxNyw0MDI5OSw0MDMwOCw0MDMwOSw0MDMwNCw0MDI5Nyw0MDMyNSw0MDMwNyw0MDMxNSw0MDMyMiw0MDMwMyw0MDMxMyw0MDMxOSw0MDMyNyw0MDI5Niw0MDU5Niw0MDU5Myw0MDY0MCw0MDcwMCw0MDc0OSw0MDc2OCw0MDc2OSw0MDc4MSw0MDc5''@;'; put 'put ''MCw0MDc5MSw0MDc5MiwyMTMwMywyMjE5NCwyMjE5NywyMjE5NSwyMjc1NSwyMzM2NSwyNDAwNiwyNDAwNywyNDMwMiwyNDMwMywyNDUxMiwyNDUxMywyNTA4MSwyNTg3OSwyNTg3OCwyNTg3NywyNTg3NSwyNjA3OSwyNjM0NCwyNjMzOSwyNjM0MCwyNzM3OSwyNzM3NiwyNzM3MCwyNzM2OCwy''@;'; put 'put ''NzM4NSwyNzM3NywyNzM3NCwyNzM3NSwyODczMiwyODcyNSwyODcxOSwyODcyNywyODcyNCwyODcyMSwyODczOCwyODcyOCwyODczNSwyODczMCwyODcyOSwyODczNiwyODczMSwyODcyMywyODczNywyOTIwMywyOTIwNCwyOTM1MiwyOTU2NSwyOTU2NCwyOTg4MiwzMDM3OSwzMDM3OCwzMDM5''@;'; put 'put ''OCwzMDQ0NSwzMDY2OCwzMDY3MCwzMDY3MSwzMDY2OSwzMDcwNiwzMTAxMywzMTAxMSwzMTAxNSwzMTAxNiwzMTAxMiwzMTAxNywzMTE1NCwzMTM0MiwzMTM0MCwzMTM0MSwzMTQ3OSwzMTgxNywzMTgxNiwzMTgxOCwzMTgxNSwzMTgxMywzMTk4MiwzMjM3OSwzMjM4MiwzMjM4NSwzMjM4NCwz''@;'; put 'put ''MjY5OCwzMjc2NywzMjg4OSwzMzI0MywzMzI0MSwzMzI5MSwzMzM4NCwzMzM4NSwzNDMzOCwzNDMwMywzNDMwNSwzNDMwMiwzNDMzMSwzNDMwNCwzNDI5NCwzNDMwOCwzNDMxMywzNDMwOSwzNDMxNiwzNDMwMSwzNDg0MSwzNDgzMiwzNDgzMywzNDgzOSwzNDgzNSwzNDgzOCwzNTE3MSwzNTE3''@;'; put 'put ''NCwzNTI1NywzNTMxOSwzNTY4MCwzNTY5MCwzNTY3NywzNTY4OCwzNTY4MywzNTY4NSwzNTY4NywzNTY5MywzNjI3MCwzNjQ4NiwzNjQ4OCwzNjQ4NCwzNjY5NywzNjY5NCwzNjY5NSwzNjY5MywzNjY5NiwzNjY5OCwzNzAwNSwzNzE4NywzNzE4NSwzNzMwMywzNzMwMSwzNzI5OCwzNzI5OSwz''@;'; put 'put ''Nzg5OSwzNzkwNywzNzg4MywzNzkyMCwzNzkwMywzNzkwOCwzNzg4NiwzNzkwOSwzNzkwNCwzNzkyOCwzNzkxMywzNzkwMSwzNzg3NywzNzg4OCwzNzg3OSwzNzg5NSwzNzkwMiwzNzkxMCwzNzkwNiwzNzg4MiwzNzg5NywzNzg4MCwzNzg5OCwzNzg4NywzNzg4NCwzNzkwMCwzNzg3OCwzNzkw''@;'; put 'put ''NSwzNzg5NCwzODM2NiwzODM2OCwzODM2NywzODcwMiwzODcwMywzODg0MSwzODg0MywzODkwOSwzODkxMCwzOTAwOCwzOTAxMCwzOTAxMSwzOTAwNywzOTEwNSwzOTEwNiwzOTI0OCwzOTI0NiwzOTI1NywzOTI0NCwzOTI0MywzOTI1MSwzOTQ3NCwzOTQ3NiwzOTQ3MywzOTQ2OCwzOTQ2Niwz''@;'; put 'put ''OTQ3OCwzOTQ2NSwzOTQ3MCwzOTQ4MCwzOTQ2OSwzOTYyMywzOTYyNiwzOTYyMiwzOTY5NiwzOTY5OCwzOTY5NywzOTk0NywzOTk0NCwzOTkyNywzOTk0MSwzOTk1NCwzOTkyOCw0ZTQsMzk5NDMsMzk5NTAsMzk5NDIsMzk5NTksMzk5NTYsMzk5NDUsNDAzNTEsNDAzNDUsNDAzNTYsNDAzNDks''@;'; put 'put ''NDAzMzgsNDAzNDQsNDAzMzYsNDAzNDcsNDAzNTIsNDAzNDAsNDAzNDgsNDAzNjIsNDAzNDMsNDAzNTMsNDAzNDYsNDAzNTQsNDAzNjAsNDAzNTAsNDAzNTUsNDAzODMsNDAzNjEsNDAzNDIsNDAzNTgsNDAzNTksNDA2MDEsNDA2MDMsNDA2MDIsNDA2NzcsNDA2NzYsNDA2NzksNDA2NzgsNDA3''@;'; put 'put ''NTIsNDA3NTAsNDA3OTUsNDA4MDAsNDA3OTgsNDA3OTcsNDA3OTMsNDA4NDksMjA3OTQsMjA3OTMsMjExNDQsMjExNDMsMjIyMTEsMjIyMDUsMjIyMDYsMjMzNjgsMjMzNjcsMjQwMTEsMjQwMTUsMjQzMDUsMjUwODUsMjU4ODMsMjczOTQsMjczODgsMjczOTUsMjczODQsMjczOTIsMjg3Mzks''@;'; put 'put ''Mjg3NDAsMjg3NDYsMjg3NDQsMjg3NDUsMjg3NDEsMjg3NDIsMjkyMTMsMjkyMTAsMjkyMDksMjk1NjYsMjk5NzUsMzAzMTQsMzA2NzIsMzEwMjEsMzEwMjUsMzEwMjMsMzE4MjgsMzE4MjcsMzE5ODYsMzIzOTQsMzIzOTEsMzIzOTIsMzIzOTUsMzIzOTAsMzIzOTcsMzI1ODksMzI2OTksMzI4''@;'; put 'put ''MTYsMzMyNDUsMzQzMjgsMzQzNDYsMzQzNDIsMzQzMzUsMzQzMzksMzQzMzIsMzQzMjksMzQzNDMsMzQzNTAsMzQzMzcsMzQzMzYsMzQzNDUsMzQzMzQsMzQzNDEsMzQ4NTcsMzQ4NDUsMzQ4NDMsMzQ4NDgsMzQ4NTIsMzQ4NDQsMzQ4NTksMzQ4OTAsMzUxODEsMzUxNzcsMzUxODIsMzUxNzks''@;'; put 'put ''MzUzMjIsMzU3MDUsMzU3MDQsMzU2NTMsMzU3MDYsMzU3MDcsMzYxMTIsMzYxMTYsMzYyNzEsMzY0OTQsMzY0OTIsMzY3MDIsMzY2OTksMzY3MDEsMzcxOTAsMzcxODgsMzcxODksMzczMDUsMzc5NTEsMzc5NDcsMzc5NDIsMzc5MjksMzc5NDksMzc5NDgsMzc5MzYsMzc5NDUsMzc5MzAsMzc5''@;'; put 'put ''NDMsMzc5MzIsMzc5NTIsMzc5MzcsMzgzNzMsMzgzNzIsMzgzNzEsMzg3MDksMzg3MTQsMzg4NDcsMzg4ODEsMzkwMTIsMzkxMTMsMzkxMTAsMzkxMDQsMzkyNTYsMzkyNTQsMzk0ODEsMzk0ODUsMzk0OTQsMzk0OTIsMzk0OTAsMzk0ODksMzk0ODIsMzk0ODcsMzk2MjksMzk3MDEsMzk3MDMs''@;'; put 'put ''Mzk3MDQsMzk3MDIsMzk3MzgsMzk3NjIsMzk5NzksMzk5NjUsMzk5NjQsMzk5ODAsMzk5NzEsMzk5NzYsMzk5NzcsMzk5NzIsMzk5NjksNDAzNzUsNDAzNzQsNDAzODAsNDAzODUsNDAzOTEsNDAzOTQsNDAzOTksNDAzODIsNDAzODksNDAzODcsNDAzNzksNDAzNzMsNDAzOTgsNDAzNzcsNDAz''@;'; put 'put ''NzgsNDAzNjQsNDAzOTIsNDAzNjksNDAzNjUsNDAzOTYsNDAzNzEsNDAzOTcsNDAzNzAsNDA1NzAsNDA2MDQsNDA2ODMsNDA2ODYsNDA2ODUsNDA3MzEsNDA3MjgsNDA3MzAsNDA3NTMsNDA3ODIsNDA4MDUsNDA4MDQsNDA4NTAsMjAxNTMsMjIyMTQsMjIyMTMsMjIyMTksMjI4OTcsMjMzNzEs''@;'; put 'put ''MjMzNzIsMjQwMjEsMjQwMTcsMjQzMDYsMjU4ODksMjU4ODgsMjU4OTQsMjU4OTAsMjc0MDMsMjc0MDAsMjc0MDEsMjc2NjEsMjg3NTcsMjg3NTgsMjg3NTksMjg3NTQsMjkyMTQsMjkyMTUsMjkzNTMsMjk1NjcsMjk5MTIsMjk5MDksMjk5MTMsMjk5MTEsMzAzMTcsMzAzODEsMzEwMjksMzEx''@;'; put 'put ''NTYsMzEzNDQsMzEzNDUsMzE4MzEsMzE4MzYsMzE4MzMsMzE4MzUsMzE4MzQsMzE5ODgsMzE5ODUsMzI0MDEsMzI1OTEsMzI2NDcsMzMyNDYsMzMzODcsMzQzNTYsMzQzNTcsMzQzNTUsMzQzNDgsMzQzNTQsMzQzNTgsMzQ4NjAsMzQ4NTYsMzQ4NTQsMzQ4NTgsMzQ4NTMsMzUxODUsMzUyNjMs''@;'; put 'put ''MzUyNjIsMzUzMjMsMzU3MTAsMzU3MTYsMzU3MTQsMzU3MTgsMzU3MTcsMzU3MTEsMzYxMTcsMzY1MDEsMzY1MDAsMzY1MDYsMzY0OTgsMzY0OTYsMzY1MDIsMzY1MDMsMzY3MDQsMzY3MDYsMzcxOTEsMzc5NjQsMzc5NjgsMzc5NjIsMzc5NjMsMzc5NjcsMzc5NTksMzc5NTcsMzc5NjAsMzc5''@;'; put 'put ''NjEsMzc5NTgsMzg3MTksMzg4ODMsMzkwMTgsMzkwMTcsMzkxMTUsMzkyNTIsMzkyNTksMzk1MDIsMzk1MDcsMzk1MDgsMzk1MDAsMzk1MDMsMzk0OTYsMzk0OTgsMzk0OTcsMzk1MDYsMzk1MDQsMzk2MzIsMzk3MDUsMzk3MjMsMzk3MzksMzk3NjYsMzk3NjUsNDAwMDYsNDAwMDgsMzk5OTks''@;'; put 'put ''NDAwMDQsMzk5OTMsMzk5ODcsNDAwMDEsMzk5OTYsMzk5OTEsMzk5ODgsMzk5ODYsMzk5OTcsMzk5OTAsNDA0MTEsNDA0MDIsNDA0MTQsNDA0MTAsNDAzOTUsNDA0MDAsNDA0MTIsNDA0MDEsNDA0MTUsNDA0MjUsNDA0MDksNDA0MDgsNDA0MDYsNDA0MzcsNDA0MDUsNDA0MTMsNDA2MzAsNDA2''@;'; put 'put ''ODgsNDA3NTcsNDA3NTUsNDA3NTQsNDA3NzAsNDA4MTEsNDA4NTMsNDA4NjYsMjA3OTcsMjExNDUsMjI3NjAsMjI3NTksMjI4OTgsMjMzNzMsMjQwMjQsMzQ4NjMsMjQzOTksMjUwODksMjUwOTEsMjUwOTIsMjU4OTcsMjU4OTMsMjYwMDYsMjYzNDcsMjc0MDksMjc0MTAsMjc0MDcsMjc1OTQs''@;'; put 'put ''Mjg3NjMsMjg3NjIsMjkyMTgsMjk1NzAsMjk1NjksMjk1NzEsMzAzMjAsMzA2NzYsMzE4NDcsMzE4NDYsMzI0MDUsMzMzODgsMzQzNjIsMzQzNjgsMzQzNjEsMzQzNjQsMzQzNTMsMzQzNjMsMzQzNjYsMzQ4NjQsMzQ4NjYsMzQ4NjIsMzQ4NjcsMzUxOTAsMzUxODgsMzUxODcsMzUzMjYsMzU3''@;'; put 'put ''MjQsMzU3MjYsMzU3MjMsMzU3MjAsMzU5MDksMzYxMjEsMzY1MDQsMzY3MDgsMzY3MDcsMzczMDgsMzc5ODYsMzc5NzMsMzc5ODEsMzc5NzUsMzc5ODIsMzg4NTIsMzg4NTMsMzg5MTIsMzk1MTAsMzk1MTMsMzk3MTAsMzk3MTEsMzk3MTIsNDAwMTgsNDAwMjQsNDAwMTYsNDAwMTAsNDAwMTMs''@;'; put 'put ''NDAwMTEsNDAwMjEsNDAwMjUsNDAwMTIsNDAwMTQsNDA0NDMsNDA0MzksNDA0MzEsNDA0MTksNDA0MjcsNDA0NDAsNDA0MjAsNDA0MzgsNDA0MTcsNDA0MzAsNDA0MjIsNDA0MzQsNDA0MzIsNDA0MTgsNDA0MjgsNDA0MzYsNDA0MzUsNDA0MjQsNDA0MjksNDA2NDIsNDA2NTYsNDA2OTAsNDA2''@;'; put 'put ''OTEsNDA3MTAsNDA3MzIsNDA3NjAsNDA3NTksNDA3NTgsNDA3NzEsNDA3ODMsNDA4MTcsNDA4MTYsNDA4MTQsNDA4MTUsMjIyMjcsMjIyMjEsMjMzNzQsMjM2NjEsMjU5MDEsMjYzNDksMjYzNTAsMjc0MTEsMjg3NjcsMjg3NjksMjg3NjUsMjg3NjgsMjkyMTksMjk5MTUsMjk5MjUsMzA2Nzcs''@;'; put 'put ''MzEwMzIsMzExNTksMzExNTgsMzE4NTAsMzI0MDcsMzI2NDksMzMzODksMzQzNzEsMzQ4NzIsMzQ4NzEsMzQ4NjksMzQ4OTEsMzU3MzIsMzU3MzMsMzY1MTAsMzY1MTEsMzY1MTIsMzY1MDksMzczMTAsMzczMDksMzczMTQsMzc5OTUsMzc5OTIsMzc5OTMsMzg2MjksMzg3MjYsMzg3MjMsMzg3''@;'; put 'put ''MjcsMzg4NTUsMzg4ODUsMzk1MTgsMzk2MzcsMzk3NjksNDAwMzUsNDAwMzksNDAwMzgsNDAwMzQsNDAwMzAsNDAwMzIsNDA0NTAsNDA0NDYsNDA0NTUsNDA0NTEsNDA0NTQsNDA0NTMsNDA0NDgsNDA0NDksNDA0NTcsNDA0NDcsNDA0NDUsNDA0NTIsNDA2MDgsNDA3MzQsNDA3NzQsNDA4MjAs''@;'; put 'put ''NDA4MjEsNDA4MjIsMjIyMjgsMjU5MDIsMjYwNDAsMjc0MTYsMjc0MTcsMjc0MTUsMjc0MTgsMjg3NzAsMjkyMjIsMjkzNTQsMzA2ODAsMzA2ODEsMzEwMzMsMzE4NDksMzE4NTEsMzE5OTAsMzI0MTAsMzI0MDgsMzI0MTEsMzI0MDksMzMyNDgsMzMyNDksMzQzNzQsMzQzNzUsMzQzNzYsMzUx''@;'; put 'put ''OTMsMzUxOTQsMzUxOTYsMzUxOTUsMzUzMjcsMzU3MzYsMzU3MzcsMzY1MTcsMzY1MTYsMzY1MTUsMzc5OTgsMzc5OTcsMzc5OTksMzgwMDEsMzgwMDMsMzg3MjksMzkwMjYsMzkyNjMsNDAwNDAsNDAwNDYsNDAwNDUsNDA0NTksNDA0NjEsNDA0NjQsNDA0NjMsNDA0NjYsNDA0NjUsNDA2MDks''@;'; put 'put ''NDA2OTMsNDA3MTMsNDA3NzUsNDA4MjQsNDA4MjcsNDA4MjYsNDA4MjUsMjIzMDIsMjg3NzQsMzE4NTUsMzQ4NzYsMzYyNzQsMzY1MTgsMzczMTUsMzgwMDQsMzgwMDgsMzgwMDYsMzgwMDUsMzk1MjAsNDAwNTIsNDAwNTEsNDAwNDksNDAwNTMsNDA0NjgsNDA0NjcsNDA2OTQsNDA3MTQsNDA4''@;'; put 'put ''NjgsMjg3NzYsMjg3NzMsMzE5OTEsMzQ0MTAsMzQ4NzgsMzQ4NzcsMzQ4NzksMzU3NDIsMzU5OTYsMzY1MjEsMzY1NTMsMzg3MzEsMzkwMjcsMzkwMjgsMzkxMTYsMzkyNjUsMzkzMzksMzk1MjQsMzk1MjYsMzk1MjcsMzk3MTYsNDA0NjksNDA0NzEsNDA3NzYsMjUwOTUsMjc0MjIsMjkyMjMs''@;'; put 'put ''MzQzODAsMzY1MjAsMzgwMTgsMzgwMTYsMzgwMTcsMzk1MjksMzk1MjgsMzk3MjYsNDA0NzMsMjkyMjUsMzQzNzksMzU3NDMsMzgwMTksNDAwNTcsNDA2MzEsMzAzMjUsMzk1MzEsNDAwNTgsNDA0NzcsMjg3NzcsMjg3NzgsNDA2MTIsNDA4MzAsNDA3NzcsNDA4NTYsMzA4NDksMzc1NjEsMzUw''@;'; put 'put ''MjMsMjI3MTUsMjQ2NTgsMzE5MTEsMjMyOTAsOTU1Niw5NTc0LDk1NTksOTU2OCw5NTgwLDk1NzEsOTU2Miw5NTc3LDk1NjUsOTU1NCw5NTcyLDk1NTcsOTU2Niw5NTc4LDk1NjksOTU2MCw5NTc1LDk1NjMsOTU1NSw5NTczLDk1NTgsOTU2Nyw5NTc5LDk1NzAsOTU2MSw5NTc2LDk1NjQsOTU1''@;'; put 'put ''Myw5NTUyLDk1ODEsOTU4Miw5NTg0LDk1ODMsNjU1MTcsMTMyNDIzLDM3NTk1LDEzMjU3NSwxNDczOTcsMzQxMjQsMTcwNzcsMjk2NzksMjA5MTcsMTM4OTcsMTQ5ODI2LDE2NjM3MiwzNzcwMCwxMzc2OTEsMzM1MTgsMTQ2NjMyLDMwNzgwLDI2NDM2LDI1MzExLDE0OTgxMSwxNjYzMTQsMTMx''@;'; put 'put ''NzQ0LDE1ODY0MywxMzU5NDEsMjAzOTUsMTQwNTI1LDIwNDg4LDE1OTAxNywxNjI0MzYsMTQ0ODk2LDE1MDE5MywxNDA1NjMsMjA1MjEsMTMxOTY2LDI0NDg0LDEzMTk2OCwxMzE5MTEsMjgzNzksMTMyMTI3LDIwNjA1LDIwNzM3LDEzNDM0LDIwNzUwLDM5MDIwLDE0MTQ3LDMzODE0LDE0OTky''@;'; put 'put ''NCwxMzIyMzEsMjA4MzIsMTQ0MzA4LDIwODQyLDEzNDE0MywxMzk1MTYsMTMxODEzLDE0MDU5MiwxMzI0OTQsMTQzOTIzLDEzNzYwMywyMzQyNiwzNDY4NSwxMzI1MzEsMTQ2NTg1LDIwOTE0LDIwOTIwLDQwMjQ0LDIwOTM3LDIwOTQzLDIwOTQ1LDE1NTgwLDIwOTQ3LDE1MDE4MiwyMDkxNSwy''@;'; put 'put ''MDk2MiwyMTMxNCwyMDk3MywzMzc0MSwyNjk0MiwxNDUxOTcsMjQ0NDMsMjEwMDMsMjEwMzAsMjEwNTIsMjExNzMsMjEwNzksMjExNDAsMjExNzcsMjExODksMzE3NjUsMzQxMTQsMjEyMTYsMzQzMTcsMTU4NDgzLDIxMjUzLDE2NjYyMiwyMTgzMywyODM3NywxNDczMjgsMTMzNDYwLDE0NzQz''@;'; put 'put ''NiwyMTI5OSwyMTMxNiwxMzQxMTQsMjc4NTEsMTM2OTk4LDI2NjUxLDI5NjUzLDI0NjUwLDE2MDQyLDE0NTQwLDEzNjkzNiwyOTE0OSwxNzU3MCwyMTM1NywyMTM2NCwxNjU1NDcsMjEzNzQsMjEzNzUsMTM2NTk4LDEzNjcyMywzMDY5NCwyMTM5NSwxNjY1NTUsMjE0MDgsMjE0MTksMjE0MjIs''@;'; put 'put ''Mjk2MDcsMTUzNDU4LDE2MjE3LDI5NTk2LDIxNDQxLDIxNDQ1LDI3NzIxLDIwMDQxLDIyNTI2LDIxNDY1LDE1MDE5LDEzNDAzMSwyMTQ3MiwxNDc0MzUsMTQyNzU1LDIxNDk0LDEzNDI2MywyMTUyMywyODc5MywyMTgwMywyNjE5OSwyNzk5NSwyMTYxMywxNTg1NDcsMTM0NTE2LDIxODUzLDIx''@;'; put 'put ''NjQ3LDIxNjY4LDE4MzQyLDEzNjk3MywxMzQ4NzcsMTU3OTYsMTM0NDc3LDE2NjMzMiwxNDA5NTIsMjE4MzEsMTk2OTMsMjE1NTEsMjk3MTksMjE4OTQsMjE5MjksMjIwMjEsMTM3NDMxLDE0NzUxNCwxNzc0NiwxNDg1MzMsMjYyOTEsMTM1MzQ4LDIyMDcxLDI2MzE3LDE0NDAxMCwyNjI3Niwy''@;'; put 'put ''NjI4NSwyMjA5MywyMjA5NSwzMDk2MSwyMjI1NywzODc5MSwyMTUwMiwyMjI3MiwyMjI1NSwyMjI1MywxNjY3NTgsMTM4NTksMTM1NzU5LDIyMzQyLDE0Nzg3NywyNzc1OCwyODgxMSwyMjMzOCwxNDAwMSwxNTg4NDYsMjI1MDIsMTM2MjE0LDIyNTMxLDEzNjI3NiwxNDgzMjMsMjI1NjYsMTUw''@;'; put 'put ''NTE3LDIyNjIwLDIyNjk4LDEzNjY1LDIyNzUyLDIyNzQ4LDEzNTc0MCwyMjc3OSwyMzU1MSwyMjMzOSwxNzIzNjgsMTQ4MDg4LDM3ODQzLDEzNzI5LDIyODE1LDI2NzkwLDE0MDE5LDI4MjQ5LDEzNjc2NiwyMzA3NiwyMTg0MywxMzY4NTAsMzQwNTMsMjI5ODUsMTM0NDc4LDE1ODg0OSwxNTkw''@;'; put 'put ''MTgsMTM3MTgwLDIzMDAxLDEzNzIxMSwxMzcxMzgsMTU5MTQyLDI4MDE3LDEzNzI1NiwxMzY5MTcsMjMwMzMsMTU5MzAxLDIzMjExLDIzMTM5LDE0MDU0LDE0OTkyOSwyMzE1OSwxNDA4OCwyMzE5MCwyOTc5NywyMzI1MSwxNTk2NDksMTQwNjI4LDE1NzQ5LDEzNzQ4OSwxNDEzMCwxMzY4ODgs''@;'; put 'put ''MjQxOTUsMjEyMDAsMjM0MTQsMjU5OTIsMjM0MjAsMTYyMzE4LDE2Mzg4LDE4NTI1LDEzMTU4OCwyMzUwOSwyNDkyOCwxMzc3ODAsMTU0MDYwLDEzMjUxNywyMzUzOSwyMzQ1MywxOTcyOCwyMzU1NywxMzgwNTIsMjM1NzEsMjk2NDYsMjM1NzIsMTM4NDA1LDE1ODUwNCwyMzYyNSwxODY1Mywy''@;'; put 'put ''MzY4NSwyMzc4NSwyMzc5MSwyMzk0NywxMzg3NDUsMTM4ODA3LDIzODI0LDIzODMyLDIzODc4LDEzODkxNiwyMzczOCwyNDAyMywzMzUzMiwxNDM4MSwxNDk3NjEsMTM5MzM3LDEzOTYzNSwzMzQxNSwxNDM5MCwxNTI5OCwyNDExMCwyNzI3NCwyNDE4MSwyNDE4NiwxNDg2NjgsMTM0MzU1LDIx''@;'; put 'put ''NDE0LDIwMTUxLDI0MjcyLDIxNDE2LDEzNzA3MywyNDA3MywyNDMwOCwxNjQ5OTQsMjQzMTMsMjQzMTUsMTQ0OTYsMjQzMTYsMjY2ODYsMzc5MTUsMjQzMzMsMTMxNTIxLDE5NDcwOCwxNTA3MCwxODYwNiwxMzU5OTQsMjQzNzgsMTU3ODMyLDE0MDI0MCwyNDQwOCwxNDA0MDEsMjQ0MTksMzg4''@;'; put 'put ''NDUsMTU5MzQyLDI0NDM0LDM3Njk2LDE2NjQ1NCwyNDQ4NywyMzk5MCwxNTcxMSwxNTIxNDQsMTM5MTE0LDE1OTk5MiwxNDA5MDQsMzczMzQsMTMxNzQyLDE2NjQ0MSwyNDYyNSwyNjI0NSwxMzczMzUsMTQ2OTEsMTU4MTUsMTM4ODEsMjI0MTYsMTQxMjM2LDMxMDg5LDE1OTM2LDI0NzM0LDI0''@;'; put 'put ''NzQwLDI0NzU1LDE0OTg5MCwxNDk5MDMsMTYyMzg3LDI5ODYwLDIwNzA1LDIzMjAwLDI0OTMyLDMzODI4LDI0ODk4LDE5NDcyNiwxNTk0NDIsMjQ5NjEsMjA5ODAsMTMyNjk0LDI0OTY3LDIzNDY2LDE0NzM4MywxNDE0MDcsMjUwNDMsMTY2ODEzLDE3MDMzMywyNTA0MCwxNDY0MiwxNDE2OTYs''@;'; put 'put ''MTQxNTA1LDI0NjExLDI0OTI0LDI1ODg2LDI1NDgzLDEzMTM1MiwyNTI4NSwxMzcwNzIsMjUzMDEsMTQyODYxLDI1NDUyLDE0OTk4MywxNDg3MSwyNTY1NiwyNTU5MiwxMzYwNzgsMTM3MjEyLDI1NzQ0LDI4NTU0LDE0MjkwMiwzODkzMiwxNDc1OTYsMTUzMzczLDI1ODI1LDI1ODI5LDM4MDEx''@;'; put 'put ''LDE0OTUwLDI1NjU4LDE0OTM1LDI1OTMzLDI4NDM4LDE1MDA1NiwxNTAwNTEsMjU5ODksMjU5NjUsMjU5NTEsMTQzNDg2LDI2MDM3LDE0OTgyNCwxOTI1NSwyNjA2NSwxNjYwMCwxMzcyNTcsMjYwODAsMjYwODMsMjQ1NDMsMTQ0Mzg0LDI2MTM2LDE0Mzg2MywxNDM4NjQsMjYxODAsMTQzNzgw''@;'; put 'put ''LDE0Mzc4MSwyNjE4NywxMzQ3NzMsMjYyMTUsMTUyMDM4LDI2MjI3LDI2MjI4LDEzODgxMywxNDM5MjEsMTY1MzY0LDE0MzgxNiwxNTIzMzksMzA2NjEsMTQxNTU5LDM5MzMyLDI2MzcwLDE0ODM4MCwxNTAwNDksMTUxNDcsMjcxMzAsMTQ1MzQ2LDI2NDYyLDI2NDcxLDI2NDY2LDE0NzkxNywx''@;'; put 'put ''NjgxNzMsMjY1ODMsMTc2NDEsMjY2NTgsMjgyNDAsMzc0MzYsMjY2MjUsMTQ0MzU4LDE1OTEzNiwyNjcxNywxNDQ0OTUsMjcxMDUsMjcxNDcsMTY2NjIzLDI2OTk1LDI2ODE5LDE0NDg0NSwyNjg4MSwyNjg4MCwxNTY2NiwxNDg0OSwxNDQ5NTYsMTUyMzIsMjY1NDAsMjY5NzcsMTY2NDc0LDE3''@;'; put 'put ''MTQ4LDI2OTM0LDI3MDMyLDE1MjY1LDEzMjA0MSwzMzYzNSwyMDYyNCwyNzEyOSwxNDQ5ODUsMTM5NTYyLDI3MjA1LDE0NTE1NSwyNzI5MywxNTM0NywyNjU0NSwyNzMzNiwxNjgzNDgsMTUzNzMsMjc0MjEsMTMzNDExLDI0Nzk4LDI3NDQ1LDI3NTA4LDE0MTI2MSwyODM0MSwxNDYxMzksMTMy''@;'; put 'put ''MDIxLDEzNzU2MCwxNDE0NCwyMTUzNywxNDYyNjYsMjc2MTcsMTQ3MTk2LDI3NjEyLDI3NzAzLDE0MDQyNywxNDk3NDUsMTU4NTQ1LDI3NzM4LDMzMzE4LDI3NzY5LDE0Njg3NiwxNzYwNSwxNDY4NzcsMTQ3ODc2LDE0OTc3MiwxNDk3NjAsMTQ2NjMzLDE0MDUzLDE1NTk1LDEzNDQ1MCwzOTgx''@;'; put 'put ''MSwxNDM4NjUsMTQwNDMzLDMyNjU1LDI2Njc5LDE1OTAxMywxNTkxMzcsMTU5MjExLDI4MDU0LDI3OTk2LDI4Mjg0LDI4NDIwLDE0OTg4NywxNDc1ODksMTU5MzQ2LDM0MDk5LDE1OTYwNCwyMDkzNSwyNzgwNCwyODE4OSwzMzgzOCwxNjY2ODksMjgyMDcsMTQ2OTkxLDI5Nzc5LDE0NzMzMCwz''@;'; put 'put ''MTE4MCwyODIzOSwyMzE4NSwxNDM0MzUsMjg2NjQsMTQwOTMsMjg1NzMsMTQ2OTkyLDI4NDEwLDEzNjM0MywxNDc1MTcsMTc3NDksMzc4NzIsMjg0ODQsMjg1MDgsMTU2OTQsMjg1MzIsMTY4MzA0LDE1Njc1LDI4NTc1LDE0Nzc4MCwyODYyNywxNDc2MDEsMTQ3Nzk3LDE0NzUxMywxNDc0NDAs''@;'; put 'put ''MTQ3MzgwLDE0Nzc3NSwyMDk1OSwxNDc3OTgsMTQ3Nzk5LDE0Nzc3NiwxNTYxMjUsMjg3NDcsMjg3OTgsMjg4MzksMjg4MDEsMjg4NzYsMjg4ODUsMjg4ODYsMjg4OTUsMTY2NDQsMTU4NDgsMjkxMDgsMjkwNzgsMTQ4MDg3LDI4OTcxLDI4OTk3LDIzMTc2LDI5MDAyLDI5MDM4LDIzNzA4LDE0''@;'; put 'put ''ODMyNSwyOTAwNywzNzczMCwxNDgxNjEsMjg5NzIsMTQ4NTcwLDE1MDA1NSwxNTAwNTAsMjkxMTQsMTY2ODg4LDI4ODYxLDI5MTk4LDM3OTU0LDI5MjA1LDIyODAxLDM3OTU1LDI5MjIwLDM3Njk3LDE1MzA5MywyOTIzMCwyOTI0OCwxNDk4NzYsMjY4MTMsMjkyNjksMjkyNzEsMTU5NTcsMTQz''@;'; put 'put ''NDI4LDI2NjM3LDI4NDc3LDI5MzE0LDI5NDgyLDI5NDgzLDE0OTUzOSwxNjU5MzEsMTg2NjksMTY1ODkyLDI5NDgwLDI5NDg2LDI5NjQ3LDI5NjEwLDEzNDIwMiwxNTgyNTQsMjk2NDEsMjk3NjksMTQ3OTM4LDEzNjkzNSwxNTAwNTIsMjYxNDcsMTQwMjEsMTQ5OTQzLDE0OTkwMSwxNTAwMTEs''@;'; put 'put ''Mjk2ODcsMjk3MTcsMjY4ODMsMTUwMDU0LDI5NzUzLDEzMjU0NywxNjA4NywyOTc4OCwxNDE0ODUsMjk3OTIsMTY3NjAyLDI5NzY3LDI5NjY4LDI5ODE0LDMzNzIxLDI5ODA0LDE0MTI4LDI5ODEyLDM3ODczLDI3MTgwLDI5ODI2LDE4NzcxLDE1MDE1NiwxNDc4MDcsMTUwMTM3LDE2Njc5OSwy''@;'; put 'put ''MzM2NiwxNjY5MTUsMTM3Mzc0LDI5ODk2LDEzNzYwOCwyOTk2NiwyOTkyOSwyOTk4MiwxNjc2NDEsMTM3ODAzLDIzNTExLDE2NzU5NiwzNzc2NSwzMDAyOSwzMDAyNiwzMDA1NSwzMDA2MiwxNTE0MjYsMTYxMzIsMTUwODAzLDMwMDk0LDI5Nzg5LDMwMTEwLDMwMTMyLDMwMjEwLDMwMjUyLDMw''@;'; put 'put ''Mjg5LDMwMjg3LDMwMzE5LDMwMzI2LDE1NjY2MSwzMDM1MiwzMzI2MywxNDMyOCwxNTc5NjksMTU3OTY2LDMwMzY5LDMwMzczLDMwMzkxLDMwNDEyLDE1OTY0NywzMzg5MCwxNTE3MDksMTUxOTMzLDEzODc4MCwzMDQ5NCwzMDUwMiwzMDUyOCwyNTc3NSwxNTIwOTYsMzA1NTIsMTQ0MDQ0LDMw''@;'; put 'put ''NjM5LDE2NjI0NCwxNjYyNDgsMTM2ODk3LDMwNzA4LDMwNzI5LDEzNjA1NCwxNTAwMzQsMjY4MjYsMzA4OTUsMzA5MTksMzA5MzEsMzg1NjUsMzEwMjIsMTUzMDU2LDMwOTM1LDMxMDI4LDMwODk3LDE2MTI5MiwzNjc5MiwzNDk0OCwxNjY2OTksMTU1Nzc5LDE0MDgyOCwzMTExMCwzNTA3Miwy''@;'; put 'put ''Njg4MiwzMTEwNCwxNTM2ODcsMzExMzMsMTYyNjE3LDMxMDM2LDMxMTQ1LDI4MjAyLDE2MDAzOCwxNjA0MCwzMTE3NCwxNjgyMDUsMzExODhdLCJldWMta3IiOls0NDAzNCw0NDAzNSw0NDAzNyw0NDAzOCw0NDA0Myw0NDA0NCw0NDA0NSw0NDA0Niw0NDA0Nyw0NDA1Niw0NDA2Miw0NDA2Myw0''@;'; put 'put ''NDA2NSw0NDA2Niw0NDA2Nyw0NDA2OSw0NDA3MCw0NDA3MSw0NDA3Miw0NDA3Myw0NDA3NCw0NDA3NSw0NDA3OCw0NDA4Miw0NDA4Myw0NDA4NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDA4NSw0NDA4Niw0NDA4Nyw0NDA5MCw0NDA5MSw0NDA5Myw0NDA5NCw0NDA5NSw0NDA5''@;'; put 'put ''Nyw0NDA5OCw0NDA5OSw0NDEwMCw0NDEwMSw0NDEwMiw0NDEwMyw0NDEwNCw0NDEwNSw0NDEwNiw0NDEwOCw0NDExMCw0NDExMSw0NDExMiw0NDExMyw0NDExNCw0NDExNSw0NDExNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDExOCw0NDExOSw0NDEyMSw0NDEyMiw0NDEyMyw0''@;'; put 'put ''NDEyNSw0NDEyNiw0NDEyNyw0NDEyOCw0NDEyOSw0NDEzMCw0NDEzMSw0NDEzMiw0NDEzMyw0NDEzNCw0NDEzNSw0NDEzNiw0NDEzNyw0NDEzOCw0NDEzOSw0NDE0MCw0NDE0MSw0NDE0Miw0NDE0Myw0NDE0Niw0NDE0Nyw0NDE0OSw0NDE1MCw0NDE1Myw0NDE1NSw0NDE1Niw0NDE1Nyw0NDE1''@;'; put 'put ''OCw0NDE1OSw0NDE2Miw0NDE2Nyw0NDE2OCw0NDE3Myw0NDE3NCw0NDE3NSw0NDE3Nyw0NDE3OCw0NDE3OSw0NDE4MSw0NDE4Miw0NDE4Myw0NDE4NCw0NDE4NSw0NDE4Niw0NDE4Nyw0NDE5MCw0NDE5NCw0NDE5NSw0NDE5Niw0NDE5Nyw0NDE5OCw0NDE5OSw0NDIwMyw0NDIwNSw0NDIwNiw0''@;'; put 'put ''NDIwOSw0NDIxMCw0NDIxMSw0NDIxMiw0NDIxMyw0NDIxNCw0NDIxNSw0NDIxOCw0NDIyMiw0NDIyMyw0NDIyNCw0NDIyNiw0NDIyNyw0NDIyOSw0NDIzMCw0NDIzMSw0NDIzMyw0NDIzNCw0NDIzNSw0NDIzNyw0NDIzOCw0NDIzOSw0NDI0MCw0NDI0MSw0NDI0Miw0NDI0Myw0NDI0NCw0NDI0''@;'; put 'put ''Niw0NDI0OCw0NDI0OSw0NDI1MCw0NDI1MSw0NDI1Miw0NDI1Myw0NDI1NCw0NDI1NSw0NDI1OCw0NDI1OSw0NDI2MSw0NDI2Miw0NDI2NSw0NDI2Nyw0NDI2OSw0NDI3MCw0NDI3NCw0NDI3Niw0NDI3OSw0NDI4MCw0NDI4MSw0NDI4Miw0NDI4Myw0NDI4Niw0NDI4Nyw0NDI4OSw0NDI5MCw0''@;'; put 'put ''NDI5MSw0NDI5Myw0NDI5NSw0NDI5Niw0NDI5Nyw0NDI5OCw0NDI5OSw0NDMwMiw0NDMwNCw0NDMwNiw0NDMwNyw0NDMwOCw0NDMwOSw0NDMxMCw0NDMxMSw0NDMxMyw0NDMxNCw0NDMxNSw0NDMxNyw0NDMxOCw0NDMxOSw0NDMyMSw0NDMyMiw0NDMyMyw0NDMyNCw0NDMyNSw0NDMyNiw0NDMy''@;'; put 'put ''Nyw0NDMyOCw0NDMzMCw0NDMzMSw0NDMzNCw0NDMzNSw0NDMzNiw0NDMzNyw0NDMzOCw0NDMzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDM0Miw0NDM0Myw0NDM0NSw0NDM0Niw0NDM0Nyw0NDM0OSw0NDM1MCw0NDM1MSw0NDM1Miw0NDM1Myw0NDM1NCw0NDM1NSw0NDM1OCw0''@;'; put 'put ''NDM2MCw0NDM2Miw0NDM2Myw0NDM2NCw0NDM2NSw0NDM2Niw0NDM2Nyw0NDM2OSw0NDM3MCw0NDM3MSw0NDM3Myw0NDM3NCw0NDM3NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDM3Nyw0NDM3OCw0NDM3OSw0NDM4MCw0NDM4MSw0NDM4Miw0NDM4Myw0NDM4NCw0NDM4Niw0NDM4''@;'; put 'put ''OCw0NDM4OSw0NDM5MCw0NDM5MSw0NDM5Miw0NDM5Myw0NDM5NCw0NDM5NSw0NDM5OCw0NDM5OSw0NDQwMSw0NDQwMiw0NDQwNyw0NDQwOCw0NDQwOSw0NDQxMCw0NDQxNCw0NDQxNiw0NDQxOSw0NDQyMCw0NDQyMSw0NDQyMiw0NDQyMyw0NDQyNiw0NDQyNyw0NDQyOSw0NDQzMCw0NDQzMSw0''@;'; put 'put ''NDQzMyw0NDQzNCw0NDQzNSw0NDQzNiw0NDQzNyw0NDQzOCw0NDQzOSw0NDQ0MCw0NDQ0MSw0NDQ0Miw0NDQ0Myw0NDQ0Niw0NDQ0Nyw0NDQ0OCw0NDQ0OSw0NDQ1MCw0NDQ1MSw0NDQ1Myw0NDQ1NCw0NDQ1NSw0NDQ1Niw0NDQ1Nyw0NDQ1OCw0NDQ1OSw0NDQ2MCw0NDQ2MSw0NDQ2Miw0NDQ2''@;'; put 'put ''Myw0NDQ2NCw0NDQ2NSw0NDQ2Niw0NDQ2Nyw0NDQ2OCw0NDQ2OSw0NDQ3MCw0NDQ3Miw0NDQ3Myw0NDQ3NCw0NDQ3NSw0NDQ3Niw0NDQ3Nyw0NDQ3OCw0NDQ3OSw0NDQ4Miw0NDQ4Myw0NDQ4NSw0NDQ4Niw0NDQ4Nyw0NDQ4OSw0NDQ5MCw0NDQ5MSw0NDQ5Miw0NDQ5Myw0NDQ5NCw0NDQ5NSw0''@;'; put 'put ''NDQ5OCw0NDUwMCw0NDUwMSw0NDUwMiw0NDUwMyw0NDUwNCw0NDUwNSw0NDUwNiw0NDUwNyw0NDUwOSw0NDUxMCw0NDUxMSw0NDUxMyw0NDUxNCw0NDUxNSw0NDUxNyw0NDUxOCw0NDUxOSw0NDUyMCw0NDUyMSw0NDUyMiw0NDUyMyw0NDUyNCw0NDUyNSw0NDUyNiw0NDUyNyw0NDUyOCw0NDUy''@;'; put 'put ''OSw0NDUzMCw0NDUzMSw0NDUzMiw0NDUzMyw0NDUzNCw0NDUzNSw0NDUzOCw0NDUzOSw0NDU0MSw0NDU0Miw0NDU0Niw0NDU0Nyw0NDU0OCw0NDU0OSw0NDU1MCw0NDU1MSw0NDU1NCw0NDU1Niw0NDU1OCw0NDU1OSw0NDU2MCw0NDU2MSw0NDU2Miw0NDU2Myw0NDU2NSw0NDU2Niw0NDU2Nyw0''@;'; put 'put ''NDU2OCw0NDU2OSw0NDU3MCw0NDU3MSw0NDU3MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDU3Myw0NDU3NCw0NDU3NSw0NDU3Niw0NDU3Nyw0NDU3OCw0NDU3OSw0NDU4MCw0NDU4MSw0NDU4Miw0NDU4Myw0NDU4NCw0NDU4NSw0NDU4Niw0NDU4Nyw0NDU4OCw0NDU4OSw0NDU5''@;'; put 'put ''MCw0NDU5MSw0NDU5NCw0NDU5NSw0NDU5Nyw0NDU5OCw0NDYwMSw0NDYwMyw0NDYwNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDYwNSw0NDYwNiw0NDYwNyw0NDYxMCw0NDYxMiw0NDYxNSw0NDYxNiw0NDYxNyw0NDYxOSw0NDYyMyw0NDYyNSw0NDYyNiw0NDYyNyw0NDYyOSw0''@;'; put 'put ''NDYzMSw0NDYzMiw0NDYzMyw0NDYzNCw0NDYzNSw0NDYzOCw0NDY0Miw0NDY0Myw0NDY0NCw0NDY0Niw0NDY0Nyw0NDY1MCw0NDY1MSw0NDY1Myw0NDY1NCw0NDY1NSw0NDY1Nyw0NDY1OCw0NDY1OSw0NDY2MCw0NDY2MSw0NDY2Miw0NDY2Myw0NDY2Niw0NDY3MCw0NDY3MSw0NDY3Miw0NDY3''@;'; put 'put ''Myw0NDY3NCw0NDY3NSw0NDY3OCw0NDY3OSw0NDY4MCw0NDY4MSw0NDY4Miw0NDY4Myw0NDY4NSw0NDY4Niw0NDY4Nyw0NDY4OCw0NDY4OSw0NDY5MCw0NDY5MSw0NDY5Miw0NDY5Myw0NDY5NCw0NDY5NSw0NDY5Niw0NDY5Nyw0NDY5OCw0NDY5OSw0NDcwMCw0NDcwMSw0NDcwMiw0NDcwMyw0''@;'; put 'put ''NDcwNCw0NDcwNSw0NDcwNiw0NDcwNyw0NDcwOCw0NDcwOSw0NDcxMCw0NDcxMSw0NDcxMiw0NDcxMyw0NDcxNCw0NDcxNSw0NDcxNiw0NDcxNyw0NDcxOCw0NDcxOSw0NDcyMCw0NDcyMSw0NDcyMiw0NDcyMyw0NDcyNCw0NDcyNSw0NDcyNiw0NDcyNyw0NDcyOCw0NDcyOSw0NDczMCw0NDcz''@;'; put 'put ''MSw0NDczNSw0NDczNyw0NDczOCw0NDczOSw0NDc0MSw0NDc0Miw0NDc0Myw0NDc0NCw0NDc0NSw0NDc0Niw0NDc0Nyw0NDc1MCw0NDc1NCw0NDc1NSw0NDc1Niw0NDc1Nyw0NDc1OCw0NDc1OSw0NDc2Miw0NDc2Myw0NDc2NSw0NDc2Niw0NDc2Nyw0NDc2OCw0NDc2OSw0NDc3MCw0NDc3MSw0''@;'; put 'put ''NDc3Miw0NDc3Myw0NDc3NCw0NDc3NSw0NDc3Nyw0NDc3OCw0NDc4MCw0NDc4Miw0NDc4Myw0NDc4NCw0NDc4NSw0NDc4Niw0NDc4Nyw0NDc4OSw0NDc5MCw0NDc5MSw0NDc5Myw0NDc5NCw0NDc5NSw0NDc5Nyw0NDc5OCw0NDc5OSw0NDgwMCw0NDgwMSw0NDgwMiw0NDgwMyw0NDgwNCw0NDgw''@;'; put 'put ''NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDgwNiw0NDgwOSw0NDgxMCw0NDgxMSw0NDgxMiw0NDgxNCw0NDgxNSw0NDgxNyw0NDgxOCw0NDgxOSw0NDgyMCw0NDgyMSw0NDgyMiw0NDgyMyw0NDgyNCw0NDgyNSw0NDgyNiw0NDgyNyw0NDgyOCw0NDgyOSw0NDgzMCw0NDgzMSw0''@;'; put 'put ''NDgzMiw0NDgzMyw0NDgzNCw0NDgzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDgzNiw0NDgzNyw0NDgzOCw0NDgzOSw0NDg0MCw0NDg0MSw0NDg0Miw0NDg0Myw0NDg0Niw0NDg0Nyw0NDg0OSw0NDg1MSw0NDg1Myw0NDg1NCw0NDg1NSw0NDg1Niw0NDg1Nyw0NDg1OCw0NDg1''@;'; put 'put ''OSw0NDg2Miw0NDg2NCw0NDg2OCw0NDg2OSw0NDg3MCw0NDg3MSw0NDg3NCw0NDg3NSw0NDg3Niw0NDg3Nyw0NDg3OCw0NDg3OSw0NDg4MSw0NDg4Miw0NDg4Myw0NDg4NCw0NDg4NSw0NDg4Niw0NDg4Nyw0NDg4OCw0NDg4OSw0NDg5MCw0NDg5MSw0NDg5NCw0NDg5NSw0NDg5Niw0NDg5Nyw0''@;'; put 'put ''NDg5OCw0NDg5OSw0NDkwMiw0NDkwMyw0NDkwNCw0NDkwNSw0NDkwNiw0NDkwNyw0NDkwOCw0NDkwOSw0NDkxMCw0NDkxMSw0NDkxMiw0NDkxMyw0NDkxNCw0NDkxNSw0NDkxNiw0NDkxNyw0NDkxOCw0NDkxOSw0NDkyMCw0NDkyMiw0NDkyMyw0NDkyNCw0NDkyNSw0NDkyNiw0NDkyNyw0NDky''@;'; put 'put ''OSw0NDkzMCw0NDkzMSw0NDkzMyw0NDkzNCw0NDkzNSw0NDkzNyw0NDkzOCw0NDkzOSw0NDk0MCw0NDk0MSw0NDk0Miw0NDk0Myw0NDk0Niw0NDk0Nyw0NDk0OCw0NDk1MCw0NDk1MSw0NDk1Miw0NDk1Myw0NDk1NCw0NDk1NSw0NDk1Nyw0NDk1OCw0NDk1OSw0NDk2MCw0NDk2MSw0NDk2Miw0''@;'; put 'put ''NDk2Myw0NDk2NCw0NDk2NSw0NDk2Niw0NDk2Nyw0NDk2OCw0NDk2OSw0NDk3MCw0NDk3MSw0NDk3Miw0NDk3Myw0NDk3NCw0NDk3NSw0NDk3Niw0NDk3Nyw0NDk3OCw0NDk3OSw0NDk4MCw0NDk4MSw0NDk4Miw0NDk4Myw0NDk4Niw0NDk4Nyw0NDk4OSw0NDk5MCw0NDk5MSw0NDk5Myw0NDk5''@;'; put 'put ''NCw0NDk5NSw0NDk5Niw0NDk5Nyw0NDk5OCw0NTAwMiw0NTAwNCw0NTAwNyw0NTAwOCw0NTAwOSw0NTAxMCw0NTAxMSw0NTAxMyw0NTAxNCw0NTAxNSw0NTAxNiw0NTAxNyw0NTAxOCw0NTAxOSw0NTAyMSw0NTAyMiw0NTAyMyw0NTAyNCw0NTAyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw0NTAyNiw0NTAyNyw0NTAyOCw0NTAyOSw0NTAzMCw0NTAzMSw0NTAzNCw0NTAzNSw0NTAzNiw0NTAzNyw0NTAzOCw0NTAzOSw0NTA0Miw0NTA0Myw0NTA0NSw0NTA0Niw0NTA0Nyw0NTA0OSw0NTA1MCw0NTA1MSw0NTA1Miw0NTA1Myw0NTA1NCw0NTA1NSw0NTA1OCw0NTA1OSxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTA2MSw0NTA2Miw0NTA2Myw0NTA2NCw0NTA2NSw0NTA2Niw0NTA2Nyw0NTA2OSw0NTA3MCw0NTA3MSw0NTA3Myw0NTA3NCw0NTA3NSw0NTA3Nyw0NTA3OCw0NTA3OSw0NTA4MCw0NTA4MSw0NTA4Miw0NTA4Myw0NTA4Niw0NTA4Nyw0NTA4OCw0''@;'; put 'put ''NTA4OSw0NTA5MCw0NTA5MSw0NTA5Miw0NTA5Myw0NTA5NCw0NTA5NSw0NTA5Nyw0NTA5OCw0NTA5OSw0NTEwMCw0NTEwMSw0NTEwMiw0NTEwMyw0NTEwNCw0NTEwNSw0NTEwNiw0NTEwNyw0NTEwOCw0NTEwOSw0NTExMCw0NTExMSw0NTExMiw0NTExMyw0NTExNCw0NTExNSw0NTExNiw0NTEx''@;'; put 'put ''Nyw0NTExOCw0NTExOSw0NTEyMCw0NTEyMSw0NTEyMiw0NTEyMyw0NTEyNiw0NTEyNyw0NTEyOSw0NTEzMSw0NTEzMyw0NTEzNSw0NTEzNiw0NTEzNyw0NTEzOCw0NTE0Miw0NTE0NCw0NTE0Niw0NTE0Nyw0NTE0OCw0NTE1MCw0NTE1MSw0NTE1Miw0NTE1Myw0NTE1NCw0NTE1NSw0NTE1Niw0''@;'; put 'put ''NTE1Nyw0NTE1OCw0NTE1OSw0NTE2MCw0NTE2MSw0NTE2Miw0NTE2Myw0NTE2NCw0NTE2NSw0NTE2Niw0NTE2Nyw0NTE2OCw0NTE2OSw0NTE3MCw0NTE3MSw0NTE3Miw0NTE3Myw0NTE3NCw0NTE3NSw0NTE3Niw0NTE3Nyw0NTE3OCw0NTE3OSw0NTE4Miw0NTE4Myw0NTE4NSw0NTE4Niw0NTE4''@;'; put 'put ''Nyw0NTE4OSw0NTE5MCw0NTE5MSw0NTE5Miw0NTE5Myw0NTE5NCw0NTE5NSw0NTE5OCw0NTIwMCw0NTIwMiw0NTIwMyw0NTIwNCw0NTIwNSw0NTIwNiw0NTIwNyw0NTIxMSw0NTIxMyw0NTIxNCw0NTIxOSw0NTIyMCw0NTIyMSw0NTIyMiw0NTIyMyw0NTIyNiw0NTIzMiw0NTIzNCw0NTIzOCw0''@;'; put 'put ''NTIzOSw0NTI0MSw0NTI0Miw0NTI0Myw0NTI0NSw0NTI0Niw0NTI0Nyw0NTI0OCw0NTI0OSw0NTI1MCw0NTI1MSw0NTI1NCw0NTI1OCw0NTI1OSw0NTI2MCw0NTI2MSw0NTI2Miw0NTI2Myw0NTI2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTI2Nyw0NTI2OSw0NTI3MCw0NTI3''@;'; put 'put ''MSw0NTI3Myw0NTI3NCw0NTI3NSw0NTI3Niw0NTI3Nyw0NTI3OCw0NTI3OSw0NTI4MSw0NTI4Miw0NTI4Myw0NTI4NCw0NTI4Niw0NTI4Nyw0NTI4OCw0NTI4OSw0NTI5MCw0NTI5MSw0NTI5Miw0NTI5Myw0NTI5NCw0NTI5NSw0NTI5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0''@;'; put 'put ''NTI5Nyw0NTI5OCw0NTI5OSw0NTMwMCw0NTMwMSw0NTMwMiw0NTMwMyw0NTMwNCw0NTMwNSw0NTMwNiw0NTMwNyw0NTMwOCw0NTMwOSw0NTMxMCw0NTMxMSw0NTMxMiw0NTMxMyw0NTMxNCw0NTMxNSw0NTMxNiw0NTMxNyw0NTMxOCw0NTMxOSw0NTMyMiw0NTMyNSw0NTMyNiw0NTMyNyw0NTMy''@;'; put 'put ''OSw0NTMzMiw0NTMzMyw0NTMzNCw0NTMzNSw0NTMzOCw0NTM0Miw0NTM0Myw0NTM0NCw0NTM0NSw0NTM0Niw0NTM1MCw0NTM1MSw0NTM1Myw0NTM1NCw0NTM1NSw0NTM1Nyw0NTM1OCw0NTM1OSw0NTM2MCw0NTM2MSw0NTM2Miw0NTM2Myw0NTM2Niw0NTM3MCw0NTM3MSw0NTM3Miw0NTM3Myw0''@;'; put 'put ''NTM3NCw0NTM3NSw0NTM3OCw0NTM3OSw0NTM4MSw0NTM4Miw0NTM4Myw0NTM4NSw0NTM4Niw0NTM4Nyw0NTM4OCw0NTM4OSw0NTM5MCw0NTM5MSw0NTM5NCw0NTM5NSw0NTM5OCw0NTM5OSw0NTQwMSw0NTQwMiw0NTQwMyw0NTQwNSw0NTQwNiw0NTQwNyw0NTQwOSw0NTQxMCw0NTQxMSw0NTQx''@;'; put 'put ''Miw0NTQxMyw0NTQxNCw0NTQxNSw0NTQxNiw0NTQxNyw0NTQxOCw0NTQxOSw0NTQyMCw0NTQyMSw0NTQyMiw0NTQyMyw0NTQyNCw0NTQyNSw0NTQyNiw0NTQyNyw0NTQyOCw0NTQyOSw0NTQzMCw0NTQzMSw0NTQzNCw0NTQzNSw0NTQzNyw0NTQzOCw0NTQzOSw0NTQ0MSw0NTQ0Myw0NTQ0NCw0''@;'; put 'put ''NTQ0NSw0NTQ0Niw0NTQ0Nyw0NTQ1MCw0NTQ1Miw0NTQ1NCw0NTQ1NSw0NTQ1Niw0NTQ1Nyw0NTQ2MSw0NTQ2Miw0NTQ2Myw0NTQ2NSw0NTQ2Niw0NTQ2Nyw0NTQ2OSw0NTQ3MCw0NTQ3MSw0NTQ3Miw0NTQ3Myw0NTQ3NCw0NTQ3NSw0NTQ3Niw0NTQ3Nyw0NTQ3OCw0NTQ3OSw0NTQ4MSw0NTQ4''@;'; put 'put ''Miw0NTQ4Myw0NTQ4NCw0NTQ4NSw0NTQ4Niw0NTQ4Nyw0NTQ4OCw0NTQ4OSw0NTQ5MCw0NTQ5MSw0NTQ5Miw0NTQ5Myw0NTQ5NCw0NTQ5NSw0NTQ5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTQ5Nyw0NTQ5OCw0NTQ5OSw0NTUwMCw0NTUwMSw0NTUwMiw0NTUwMyw0NTUwNCw0''@;'; put 'put ''NTUwNSw0NTUwNiw0NTUwNyw0NTUwOCw0NTUwOSw0NTUxMCw0NTUxMSw0NTUxMiw0NTUxMyw0NTUxNCw0NTUxNSw0NTUxNyw0NTUxOCw0NTUxOSw0NTUyMSw0NTUyMiw0NTUyMyw0NTUyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTUyNiw0NTUyNyw0NTUyOCw0NTUyOSw0NTUz''@;'; put 'put ''MCw0NTUzMSw0NTUzNCw0NTUzNiw0NTUzNyw0NTUzOCw0NTUzOSw0NTU0MCw0NTU0MSw0NTU0Miw0NTU0Myw0NTU0Niw0NTU0Nyw0NTU0OSw0NTU1MCw0NTU1MSw0NTU1Myw0NTU1NCw0NTU1NSw0NTU1Niw0NTU1Nyw0NTU1OCw0NTU1OSw0NTU2MCw0NTU2Miw0NTU2NCw0NTU2Niw0NTU2Nyw0''@;'; put 'put ''NTU2OCw0NTU2OSw0NTU3MCw0NTU3MSw0NTU3NCw0NTU3NSw0NTU3Nyw0NTU3OCw0NTU4MSw0NTU4Miw0NTU4Myw0NTU4NCw0NTU4NSw0NTU4Niw0NTU4Nyw0NTU5MCw0NTU5Miw0NTU5NCw0NTU5NSw0NTU5Niw0NTU5Nyw0NTU5OCw0NTU5OSw0NTYwMSw0NTYwMiw0NTYwMyw0NTYwNCw0NTYw''@;'; put 'put ''NSw0NTYwNiw0NTYwNyw0NTYwOCw0NTYwOSw0NTYxMCw0NTYxMSw0NTYxMiw0NTYxMyw0NTYxNCw0NTYxNSw0NTYxNiw0NTYxNyw0NTYxOCw0NTYxOSw0NTYyMSw0NTYyMiw0NTYyMyw0NTYyNCw0NTYyNSw0NTYyNiw0NTYyNyw0NTYyOSw0NTYzMCw0NTYzMSw0NTYzMiw0NTYzMyw0NTYzNCw0''@;'; put 'put ''NTYzNSw0NTYzNiw0NTYzNyw0NTYzOCw0NTYzOSw0NTY0MCw0NTY0MSw0NTY0Miw0NTY0Myw0NTY0NCw0NTY0NSw0NTY0Niw0NTY0Nyw0NTY0OCw0NTY0OSw0NTY1MCw0NTY1MSw0NTY1Miw0NTY1Myw0NTY1NCw0NTY1NSw0NTY1Nyw0NTY1OCw0NTY1OSw0NTY2MSw0NTY2Miw0NTY2Myw0NTY2''@;'; put 'put ''NSw0NTY2Niw0NTY2Nyw0NTY2OCw0NTY2OSw0NTY3MCw0NTY3MSw0NTY3NCw0NTY3NSw0NTY3Niw0NTY3Nyw0NTY3OCw0NTY3OSw0NTY4MCw0NTY4MSw0NTY4Miw0NTY4Myw0NTY4Niw0NTY4Nyw0NTY4OCw0NTY4OSw0NTY5MCw0NTY5MSw0NTY5Myw0NTY5NCw0NTY5NSw0NTY5Niw0NTY5Nyw0''@;'; put 'put ''NTY5OCw0NTY5OSw0NTcwMiw0NTcwMyw0NTcwNCw0NTcwNiw0NTcwNyw0NTcwOCw0NTcwOSw0NTcxMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTcxMSw0NTcxNCw0NTcxNSw0NTcxNyw0NTcxOCw0NTcxOSw0NTcyMyw0NTcyNCw0NTcyNSw0NTcyNiw0NTcyNyw0NTczMCw0NTcz''@;'; put 'put ''Miw0NTczNSw0NTczNiw0NTczNyw0NTczOSw0NTc0MSw0NTc0Miw0NTc0Myw0NTc0NSw0NTc0Niw0NTc0Nyw0NTc0OSw0NTc1MCw0NTc1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTc1Miw0NTc1Myw0NTc1NCw0NTc1NSw0NTc1Niw0NTc1Nyw0NTc1OCw0NTc1OSw0NTc2MCw0''@;'; put 'put ''NTc2MSw0NTc2Miw0NTc2Myw0NTc2NCw0NTc2NSw0NTc2Niw0NTc2Nyw0NTc3MCw0NTc3MSw0NTc3Myw0NTc3NCw0NTc3NSw0NTc3Nyw0NTc3OSw0NTc4MCw0NTc4MSw0NTc4Miw0NTc4Myw0NTc4Niw0NTc4OCw0NTc5MCw0NTc5MSw0NTc5Miw0NTc5Myw0NTc5NSw0NTc5OSw0NTgwMSw0NTgw''@;'; put 'put ''Miw0NTgwOCw0NTgwOSw0NTgxMCw0NTgxNCw0NTgyMCw0NTgyMSw0NTgyMiw0NTgyNiw0NTgyNyw0NTgyOSw0NTgzMCw0NTgzMSw0NTgzMyw0NTgzNCw0NTgzNSw0NTgzNiw0NTgzNyw0NTgzOCw0NTgzOSw0NTg0Miw0NTg0Niw0NTg0Nyw0NTg0OCw0NTg0OSw0NTg1MCw0NTg1MSw0NTg1Myw0''@;'; put 'put ''NTg1NCw0NTg1NSw0NTg1Niw0NTg1Nyw0NTg1OCw0NTg1OSw0NTg2MCw0NTg2MSw0NTg2Miw0NTg2Myw0NTg2NCw0NTg2NSw0NTg2Niw0NTg2Nyw0NTg2OCw0NTg2OSw0NTg3MCw0NTg3MSw0NTg3Miw0NTg3Myw0NTg3NCw0NTg3NSw0NTg3Niw0NTg3Nyw0NTg3OCw0NTg3OSw0NTg4MCw0NTg4''@;'; put 'put ''MSw0NTg4Miw0NTg4Myw0NTg4NCw0NTg4NSw0NTg4Niw0NTg4Nyw0NTg4OCw0NTg4OSw0NTg5MCw0NTg5MSw0NTg5Miw0NTg5Myw0NTg5NCw0NTg5NSw0NTg5Niw0NTg5Nyw0NTg5OCw0NTg5OSw0NTkwMCw0NTkwMSw0NTkwMiw0NTkwMyw0NTkwNCw0NTkwNSw0NTkwNiw0NTkwNyw0NTkxMSw0''@;'; put 'put ''NTkxMyw0NTkxNCw0NTkxNyw0NTkyMCw0NTkyMSw0NTkyMiw0NTkyMyw0NTkyNiw0NTkyOCw0NTkzMCw0NTkzMiw0NTkzMyw0NTkzNSw0NTkzOCw0NTkzOSw0NTk0MSw0NTk0Miw0NTk0Myw0NTk0NSw0NTk0Niw0NTk0Nyw0NTk0OCw0NTk0OSw0NTk1MCw0NTk1MSw0NTk1NCw0NTk1OCw0NTk1''@;'; put 'put ''OSw0NTk2MCw0NTk2MSw0NTk2Miw0NTk2Myw0NTk2NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTk2Niw0NTk2Nyw0NTk2OSw0NTk3MCw0NTk3MSw0NTk3Myw0NTk3NCw0NTk3NSw0NTk3Niw0NTk3Nyw0NTk3OCw0NTk3OSw0NTk4MCw0NTk4MSw0NTk4Miw0NTk4Myw0NTk4Niw0''@;'; put 'put ''NTk4Nyw0NTk4OCw0NTk4OSw0NTk5MCw0NTk5MSw0NTk5Myw0NTk5NCw0NTk5NSw0NTk5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTk5OCw0NTk5OSw0NmUzLDQ2MDAxLDQ2MDAyLDQ2MDAzLDQ2MDA0LDQ2MDA1LDQ2MDA2LDQ2MDA3LDQ2MDA4LDQ2MDA5LDQ2MDEwLDQ2MDEx''@;'; put 'put ''LDQ2MDEyLDQ2MDEzLDQ2MDE0LDQ2MDE1LDQ2MDE2LDQ2MDE3LDQ2MDE4LDQ2MDE5LDQ2MDIyLDQ2MDIzLDQ2MDI1LDQ2MDI2LDQ2MDI5LDQ2MDMxLDQ2MDMzLDQ2MDM0LDQ2MDM1LDQ2MDM4LDQ2MDQwLDQ2MDQyLDQ2MDQ0LDQ2MDQ2LDQ2MDQ3LDQ2MDQ5LDQ2MDUwLDQ2MDUxLDQ2MDUzLDQ2''@;'; put 'put ''MDU0LDQ2MDU1LDQ2MDU3LDQ2MDU4LDQ2MDU5LDQ2MDYwLDQ2MDYxLDQ2MDYyLDQ2MDYzLDQ2MDY0LDQ2MDY1LDQ2MDY2LDQ2MDY3LDQ2MDY4LDQ2MDY5LDQ2MDcwLDQ2MDcxLDQ2MDcyLDQ2MDczLDQ2MDc0LDQ2MDc1LDQ2MDc3LDQ2MDc4LDQ2MDc5LDQ2MDgwLDQ2MDgxLDQ2MDgyLDQ2MDgz''@;'; put 'put ''LDQ2MDg0LDQ2MDg1LDQ2MDg2LDQ2MDg3LDQ2MDg4LDQ2MDg5LDQ2MDkwLDQ2MDkxLDQ2MDkyLDQ2MDkzLDQ2MDk0LDQ2MDk1LDQ2MDk3LDQ2MDk4LDQ2MDk5LDQ2MTAwLDQ2MTAxLDQ2MTAyLDQ2MTAzLDQ2MTA1LDQ2MTA2LDQ2MTA3LDQ2MTA5LDQ2MTEwLDQ2MTExLDQ2MTEzLDQ2MTE0LDQ2''@;'; put 'put ''MTE1LDQ2MTE2LDQ2MTE3LDQ2MTE4LDQ2MTE5LDQ2MTIyLDQ2MTI0LDQ2MTI1LDQ2MTI2LDQ2MTI3LDQ2MTI4LDQ2MTI5LDQ2MTMwLDQ2MTMxLDQ2MTMzLDQ2MTM0LDQ2MTM1LDQ2MTM2LDQ2MTM3LDQ2MTM4LDQ2MTM5LDQ2MTQwLDQ2MTQxLDQ2MTQyLDQ2MTQzLDQ2MTQ0LDQ2MTQ1LDQ2MTQ2''@;'; put 'put ''LDQ2MTQ3LDQ2MTQ4LDQ2MTQ5LDQ2MTUwLDQ2MTUxLDQ2MTUyLDQ2MTUzLDQ2MTU0LDQ2MTU1LDQ2MTU2LDQ2MTU3LDQ2MTU4LDQ2MTU5LDQ2MTYyLDQ2MTYzLDQ2MTY1LDQ2MTY2LDQ2MTY3LDQ2MTY5LDQ2MTcwLDQ2MTcxLDQ2MTcyLDQ2MTczLDQ2MTc0LDQ2MTc1LDQ2MTc4LDQ2MTgwLDQ2''@;'; put 'put ''MTgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MTgzLDQ2MTg0LDQ2MTg1LDQ2MTg2LDQ2MTg3LDQ2MTg5LDQ2MTkwLDQ2MTkxLDQ2MTkyLDQ2MTkzLDQ2MTk0LDQ2MTk1LDQ2MTk2LDQ2MTk3LDQ2MTk4LDQ2MTk5LDQ2MjAwLDQ2MjAxLDQ2MjAyLDQ2MjAzLDQ2MjA0LDQ2MjA1''@;'; put 'put ''LDQ2MjA2LDQ2MjA3LDQ2MjA5LDQ2MjEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MjExLDQ2MjEyLDQ2MjEzLDQ2MjE0LDQ2MjE1LDQ2MjE3LDQ2MjE4LDQ2MjE5LDQ2MjIwLDQ2MjIxLDQ2MjIyLDQ2MjIzLDQ2MjI0LDQ2MjI1LDQ2MjI2LDQ2MjI3LDQ2MjI4LDQ2MjI5LDQ2''@;'; put 'put ''MjMwLDQ2MjMxLDQ2MjMyLDQ2MjMzLDQ2MjM0LDQ2MjM1LDQ2MjM2LDQ2MjM4LDQ2MjM5LDQ2MjQwLDQ2MjQxLDQ2MjQyLDQ2MjQzLDQ2MjQ1LDQ2MjQ2LDQ2MjQ3LDQ2MjQ5LDQ2MjUwLDQ2MjUxLDQ2MjUzLDQ2MjU0LDQ2MjU1LDQ2MjU2LDQ2MjU3LDQ2MjU4LDQ2MjU5LDQ2MjYwLDQ2MjYy''@;'; put 'put ''LDQ2MjY0LDQ2MjY2LDQ2MjY3LDQ2MjY4LDQ2MjY5LDQ2MjcwLDQ2MjcxLDQ2MjczLDQ2Mjc0LDQ2Mjc1LDQ2Mjc3LDQ2Mjc4LDQ2Mjc5LDQ2MjgxLDQ2MjgyLDQ2MjgzLDQ2Mjg0LDQ2Mjg1LDQ2Mjg2LDQ2Mjg3LDQ2Mjg5LDQ2MjkwLDQ2MjkxLDQ2MjkyLDQ2Mjk0LDQ2Mjk1LDQ2Mjk2LDQ2''@;'; put 'put ''Mjk3LDQ2Mjk4LDQ2Mjk5LDQ2MzAyLDQ2MzAzLDQ2MzA1LDQ2MzA2LDQ2MzA5LDQ2MzExLDQ2MzEyLDQ2MzEzLDQ2MzE0LDQ2MzE1LDQ2MzE4LDQ2MzIwLDQ2MzIyLDQ2MzIzLDQ2MzI0LDQ2MzI1LDQ2MzI2LDQ2MzI3LDQ2MzI5LDQ2MzMwLDQ2MzMxLDQ2MzMyLDQ2MzMzLDQ2MzM0LDQ2MzM1''@;'; put 'put ''LDQ2MzM2LDQ2MzM3LDQ2MzM4LDQ2MzM5LDQ2MzQwLDQ2MzQxLDQ2MzQyLDQ2MzQzLDQ2MzQ0LDQ2MzQ1LDQ2MzQ2LDQ2MzQ3LDQ2MzQ4LDQ2MzQ5LDQ2MzUwLDQ2MzUxLDQ2MzUyLDQ2MzUzLDQ2MzU0LDQ2MzU1LDQ2MzU4LDQ2MzU5LDQ2MzYxLDQ2MzYyLDQ2MzY1LDQ2MzY2LDQ2MzY3LDQ2''@;'; put 'put ''MzY4LDQ2MzY5LDQ2MzcwLDQ2MzcxLDQ2Mzc0LDQ2Mzc5LDQ2MzgwLDQ2MzgxLDQ2MzgyLDQ2MzgzLDQ2Mzg2LDQ2Mzg3LDQ2Mzg5LDQ2MzkwLDQ2MzkxLDQ2MzkzLDQ2Mzk0LDQ2Mzk1LDQ2Mzk2LDQ2Mzk3LDQ2Mzk4LDQ2Mzk5LDQ2NDAyLDQ2NDA2LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDQ2NDA3LDQ2NDA4LDQ2NDA5LDQ2NDEwLDQ2NDE0LDQ2NDE1LDQ2NDE3LDQ2NDE4LDQ2NDE5LDQ2NDIxLDQ2NDIyLDQ2NDIzLDQ2NDI0LDQ2NDI1LDQ2NDI2LDQ2NDI3LDQ2NDMwLDQ2NDM0LDQ2NDM1LDQ2NDM2LDQ2NDM3LDQ2NDM4LDQ2NDM5LDQ2NDQwLDQ2NDQxLDQ2NDQyLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDQzLDQ2NDQ0LDQ2NDQ1LDQ2NDQ2LDQ2NDQ3LDQ2NDQ4LDQ2NDQ5LDQ2NDUwLDQ2NDUxLDQ2NDUyLDQ2NDUzLDQ2NDU0LDQ2NDU1LDQ2NDU2LDQ2NDU3LDQ2NDU4LDQ2NDU5LDQ2NDYwLDQ2NDYxLDQ2NDYyLDQ2NDYzLDQ2NDY0LDQ2NDY1''@;'; put 'put ''LDQ2NDY2LDQ2NDY3LDQ2NDY4LDQ2NDY5LDQ2NDcwLDQ2NDcxLDQ2NDcyLDQ2NDczLDQ2NDc0LDQ2NDc1LDQ2NDc2LDQ2NDc3LDQ2NDc4LDQ2NDc5LDQ2NDgwLDQ2NDgxLDQ2NDgyLDQ2NDgzLDQ2NDg0LDQ2NDg1LDQ2NDg2LDQ2NDg3LDQ2NDg4LDQ2NDg5LDQ2NDkwLDQ2NDkxLDQ2NDkyLDQ2''@;'; put 'put ''NDkzLDQ2NDk0LDQ2NDk1LDQ2NDk4LDQ2NDk5LDQ2NTAxLDQ2NTAyLDQ2NTAzLDQ2NTA1LDQ2NTA4LDQ2NTA5LDQ2NTEwLDQ2NTExLDQ2NTE0LDQ2NTE4LDQ2NTE5LDQ2NTIwLDQ2NTIxLDQ2NTIyLDQ2NTI2LDQ2NTI3LDQ2NTI5LDQ2NTMwLDQ2NTMxLDQ2NTMzLDQ2NTM0LDQ2NTM1LDQ2NTM2''@;'; put 'put ''LDQ2NTM3LDQ2NTM4LDQ2NTM5LDQ2NTQyLDQ2NTQ2LDQ2NTQ3LDQ2NTQ4LDQ2NTQ5LDQ2NTUwLDQ2NTUxLDQ2NTUzLDQ2NTU0LDQ2NTU1LDQ2NTU2LDQ2NTU3LDQ2NTU4LDQ2NTU5LDQ2NTYwLDQ2NTYxLDQ2NTYyLDQ2NTYzLDQ2NTY0LDQ2NTY1LDQ2NTY2LDQ2NTY3LDQ2NTY4LDQ2NTY5LDQ2''@;'; put 'put ''NTcwLDQ2NTcxLDQ2NTczLDQ2NTc0LDQ2NTc1LDQ2NTc2LDQ2NTc3LDQ2NTc4LDQ2NTc5LDQ2NTgwLDQ2NTgxLDQ2NTgyLDQ2NTgzLDQ2NTg0LDQ2NTg1LDQ2NTg2LDQ2NTg3LDQ2NTg4LDQ2NTg5LDQ2NTkwLDQ2NTkxLDQ2NTkyLDQ2NTkzLDQ2NTk0LDQ2NTk1LDQ2NTk2LDQ2NTk3LDQ2NTk4''@;'; put 'put ''LDQ2NTk5LDQ2NjAwLDQ2NjAxLDQ2NjAyLDQ2NjAzLDQ2NjA0LDQ2NjA1LDQ2NjA2LDQ2NjA3LDQ2NjEwLDQ2NjExLDQ2NjEzLDQ2NjE0LDQ2NjE1LDQ2NjE3LDQ2NjE4LDQ2NjE5LDQ2NjIwLDQ2NjIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjIyLDQ2NjIzLDQ2NjI0LDQ2''@;'; put 'put ''NjI1LDQ2NjI2LDQ2NjI3LDQ2NjI4LDQ2NjMwLDQ2NjMxLDQ2NjMyLDQ2NjMzLDQ2NjM0LDQ2NjM1LDQ2NjM3LDQ2NjM4LDQ2NjM5LDQ2NjQwLDQ2NjQxLDQ2NjQyLDQ2NjQzLDQ2NjQ1LDQ2NjQ2LDQ2NjQ3LDQ2NjQ4LDQ2NjQ5LDQ2NjUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDQ2NjUxLDQ2NjUyLDQ2NjUzLDQ2NjU0LDQ2NjU1LDQ2NjU2LDQ2NjU3LDQ2NjU4LDQ2NjU5LDQ2NjYwLDQ2NjYxLDQ2NjYyLDQ2NjYzLDQ2NjY1LDQ2NjY2LDQ2NjY3LDQ2NjY4LDQ2NjY5LDQ2NjcwLDQ2NjcxLDQ2NjcyLDQ2NjczLDQ2Njc0LDQ2Njc1LDQ2Njc2LDQ2Njc3LDQ2Njc4LDQ2''@;'; put 'put ''Njc5LDQ2NjgwLDQ2NjgxLDQ2NjgyLDQ2NjgzLDQ2Njg0LDQ2Njg1LDQ2Njg2LDQ2Njg3LDQ2Njg4LDQ2Njg5LDQ2NjkwLDQ2NjkxLDQ2NjkzLDQ2Njk0LDQ2Njk1LDQ2Njk3LDQ2Njk4LDQ2Njk5LDQ2NzAwLDQ2NzAxLDQ2NzAyLDQ2NzAzLDQ2NzA0LDQ2NzA1LDQ2NzA2LDQ2NzA3LDQ2NzA4''@;'; put 'put ''LDQ2NzA5LDQ2NzEwLDQ2NzExLDQ2NzEyLDQ2NzEzLDQ2NzE0LDQ2NzE1LDQ2NzE2LDQ2NzE3LDQ2NzE4LDQ2NzE5LDQ2NzIwLDQ2NzIxLDQ2NzIyLDQ2NzIzLDQ2NzI0LDQ2NzI1LDQ2NzI2LDQ2NzI3LDQ2NzI4LDQ2NzI5LDQ2NzMwLDQ2NzMxLDQ2NzMyLDQ2NzMzLDQ2NzM0LDQ2NzM1LDQ2''@;'; put 'put ''NzM2LDQ2NzM3LDQ2NzM4LDQ2NzM5LDQ2NzQwLDQ2NzQxLDQ2NzQyLDQ2NzQzLDQ2NzQ0LDQ2NzQ1LDQ2NzQ2LDQ2NzQ3LDQ2NzUwLDQ2NzUxLDQ2NzUzLDQ2NzU0LDQ2NzU1LDQ2NzU3LDQ2NzU4LDQ2NzU5LDQ2NzYwLDQ2NzYxLDQ2NzYyLDQ2NzY1LDQ2NzY2LDQ2NzY3LDQ2NzY4LDQ2Nzcw''@;'; put 'put ''LDQ2NzcxLDQ2NzcyLDQ2NzczLDQ2Nzc0LDQ2Nzc1LDQ2Nzc2LDQ2Nzc3LDQ2Nzc4LDQ2Nzc5LDQ2NzgwLDQ2NzgxLDQ2NzgyLDQ2NzgzLDQ2Nzg0LDQ2Nzg1LDQ2Nzg2LDQ2Nzg3LDQ2Nzg4LDQ2Nzg5LDQ2NzkwLDQ2NzkxLDQ2NzkyLDQ2NzkzLDQ2Nzk0LDQ2Nzk1LDQ2Nzk2LDQ2Nzk3LDQ2''@;'; put 'put ''Nzk4LDQ2Nzk5LDQ2ODAwLDQ2ODAxLDQ2ODAyLDQ2ODAzLDQ2ODA1LDQ2ODA2LDQ2ODA3LDQ2ODA4LDQ2ODA5LDQ2ODEwLDQ2ODExLDQ2ODEyLDQ2ODEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODE0LDQ2ODE1LDQ2ODE2LDQ2ODE3LDQ2ODE4LDQ2ODE5LDQ2ODIwLDQ2ODIx''@;'; put 'put ''LDQ2ODIyLDQ2ODIzLDQ2ODI0LDQ2ODI1LDQ2ODI2LDQ2ODI3LDQ2ODI4LDQ2ODI5LDQ2ODMwLDQ2ODMxLDQ2ODMzLDQ2ODM0LDQ2ODM1LDQ2ODM3LDQ2ODM4LDQ2ODM5LDQ2ODQxLDQ2ODQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODQzLDQ2ODQ0LDQ2ODQ1LDQ2ODQ2LDQ2''@;'; put 'put ''ODQ3LDQ2ODUwLDQ2ODUxLDQ2ODUyLDQ2ODU0LDQ2ODU1LDQ2ODU2LDQ2ODU3LDQ2ODU4LDQ2ODU5LDQ2ODYwLDQ2ODYxLDQ2ODYyLDQ2ODYzLDQ2ODY0LDQ2ODY1LDQ2ODY2LDQ2ODY3LDQ2ODY4LDQ2ODY5LDQ2ODcwLDQ2ODcxLDQ2ODcyLDQ2ODczLDQ2ODc0LDQ2ODc1LDQ2ODc2LDQ2ODc3''@;'; put 'put ''LDQ2ODc4LDQ2ODc5LDQ2ODgwLDQ2ODgxLDQ2ODgyLDQ2ODgzLDQ2ODg0LDQ2ODg1LDQ2ODg2LDQ2ODg3LDQ2ODkwLDQ2ODkxLDQ2ODkzLDQ2ODk0LDQ2ODk3LDQ2ODk4LDQ2ODk5LDQ2OTAwLDQ2OTAxLDQ2OTAyLDQ2OTAzLDQ2OTA2LDQ2OTA4LDQ2OTA5LDQ2OTEwLDQ2OTExLDQ2OTEyLDQ2''@;'; put 'put ''OTEzLDQ2OTE0LDQ2OTE1LDQ2OTE3LDQ2OTE4LDQ2OTE5LDQ2OTIxLDQ2OTIyLDQ2OTIzLDQ2OTI1LDQ2OTI2LDQ2OTI3LDQ2OTI4LDQ2OTI5LDQ2OTMwLDQ2OTMxLDQ2OTM0LDQ2OTM1LDQ2OTM2LDQ2OTM3LDQ2OTM4LDQ2OTM5LDQ2OTQwLDQ2OTQxLDQ2OTQyLDQ2OTQzLDQ2OTQ1LDQ2OTQ2''@;'; put 'put ''LDQ2OTQ3LDQ2OTQ5LDQ2OTUwLDQ2OTUxLDQ2OTUzLDQ2OTU0LDQ2OTU1LDQ2OTU2LDQ2OTU3LDQ2OTU4LDQ2OTU5LDQ2OTYyLDQ2OTY0LDQ2OTY2LDQ2OTY3LDQ2OTY4LDQ2OTY5LDQ2OTcwLDQ2OTcxLDQ2OTc0LDQ2OTc1LDQ2OTc3LDQ2OTc4LDQ2OTc5LDQ2OTgxLDQ2OTgyLDQ2OTgzLDQ2''@;'; put 'put ''OTg0LDQ2OTg1LDQ2OTg2LDQ2OTg3LDQ2OTkwLDQ2OTk1LDQ2OTk2LDQ2OTk3LDQ3MDAyLDQ3MDAzLDQ3MDA1LDQ3MDA2LDQ3MDA3LDQ3MDA5LDQ3MDEwLDQ3MDExLDQ3MDEyLDQ3MDEzLDQ3MDE0LDQ3MDE1LDQ3MDE4LDQ3MDIyLDQ3MDIzLDQ3MDI0LDQ3MDI1LDQ3MDI2LDQ3MDI3LDQ3MDMw''@;'; put 'put ''LDQ3MDMxLDQ3MDMzLDQ3MDM0LDQ3MDM1LDQ3MDM2LDQ3MDM3LDQ3MDM4LDQ3MDM5LDQ3MDQwLDQ3MDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDQyLDQ3MDQzLDQ3MDQ0LDQ3MDQ1LDQ3MDQ2LDQ3MDQ4LDQ3MDUwLDQ3MDUxLDQ3MDUyLDQ3MDUzLDQ3MDU0LDQ3MDU1LDQ3''@;'; put 'put ''MDU2LDQ3MDU3LDQ3MDU4LDQ3MDU5LDQ3MDYwLDQ3MDYxLDQ3MDYyLDQ3MDYzLDQ3MDY0LDQ3MDY1LDQ3MDY2LDQ3MDY3LDQ3MDY4LDQ3MDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDcwLDQ3MDcxLDQ3MDcyLDQ3MDczLDQ3MDc0LDQ3MDc1LDQ3MDc2LDQ3MDc3LDQ3MDc4''@;'; put 'put ''LDQ3MDc5LDQ3MDgwLDQ3MDgxLDQ3MDgyLDQ3MDgzLDQ3MDg2LDQ3MDg3LDQ3MDg5LDQ3MDkwLDQ3MDkxLDQ3MDkzLDQ3MDk0LDQ3MDk1LDQ3MDk2LDQ3MDk3LDQ3MDk4LDQ3MDk5LDQ3MTAyLDQ3MTA2LDQ3MTA3LDQ3MTA4LDQ3MTA5LDQ3MTEwLDQ3MTE0LDQ3MTE1LDQ3MTE3LDQ3MTE4LDQ3''@;'; put 'put ''MTE5LDQ3MTIxLDQ3MTIyLDQ3MTIzLDQ3MTI0LDQ3MTI1LDQ3MTI2LDQ3MTI3LDQ3MTMwLDQ3MTMyLDQ3MTM0LDQ3MTM1LDQ3MTM2LDQ3MTM3LDQ3MTM4LDQ3MTM5LDQ3MTQyLDQ3MTQzLDQ3MTQ1LDQ3MTQ2LDQ3MTQ3LDQ3MTQ5LDQ3MTUwLDQ3MTUxLDQ3MTUyLDQ3MTUzLDQ3MTU0LDQ3MTU1''@;'; put 'put ''LDQ3MTU4LDQ3MTYyLDQ3MTYzLDQ3MTY0LDQ3MTY1LDQ3MTY2LDQ3MTY3LDQ3MTY5LDQ3MTcwLDQ3MTcxLDQ3MTczLDQ3MTc0LDQ3MTc1LDQ3MTc2LDQ3MTc3LDQ3MTc4LDQ3MTc5LDQ3MTgwLDQ3MTgxLDQ3MTgyLDQ3MTgzLDQ3MTg0LDQ3MTg2LDQ3MTg4LDQ3MTg5LDQ3MTkwLDQ3MTkxLDQ3''@;'; put 'put ''MTkyLDQ3MTkzLDQ3MTk0LDQ3MTk1LDQ3MTk4LDQ3MTk5LDQ3MjAxLDQ3MjAyLDQ3MjAzLDQ3MjA1LDQ3MjA2LDQ3MjA3LDQ3MjA4LDQ3MjA5LDQ3MjEwLDQ3MjExLDQ3MjE0LDQ3MjE2LDQ3MjE4LDQ3MjE5LDQ3MjIwLDQ3MjIxLDQ3MjIyLDQ3MjIzLDQ3MjI1LDQ3MjI2LDQ3MjI3LDQ3MjI5''@;'; put 'put ''LDQ3MjMwLDQ3MjMxLDQ3MjMyLDQ3MjMzLDQ3MjM0LDQ3MjM1LDQ3MjM2LDQ3MjM3LDQ3MjM4LDQ3MjM5LDQ3MjQwLDQ3MjQxLDQ3MjQyLDQ3MjQzLDQ3MjQ0LDQ3MjQ2LDQ3MjQ3LDQ3MjQ4LDQ3MjQ5LDQ3MjUwLDQ3MjUxLDQ3MjUyLDQ3MjUzLDQ3MjU0LDQ3MjU1LDQ3MjU2LDQ3MjU3LDQ3''@;'; put 'put ''MjU4LDQ3MjU5LDQ3MjYwLDQ3MjYxLDQ3MjYyLDQ3MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MjY0LDQ3MjY1LDQ3MjY2LDQ3MjY3LDQ3MjY4LDQ3MjY5LDQ3MjcwLDQ3MjcxLDQ3MjczLDQ3Mjc0LDQ3Mjc1LDQ3Mjc2LDQ3Mjc3LDQ3Mjc4LDQ3Mjc5LDQ3MjgxLDQ3Mjgy''@;'; put 'put ''LDQ3MjgzLDQ3Mjg1LDQ3Mjg2LDQ3Mjg3LDQ3Mjg5LDQ3MjkwLDQ3MjkxLDQ3MjkyLDQ3MjkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3Mjk0LDQ3Mjk1LDQ3Mjk4LDQ3MzAwLDQ3MzAyLDQ3MzAzLDQ3MzA0LDQ3MzA1LDQ3MzA2LDQ3MzA3LDQ3MzA5LDQ3MzEwLDQ3MzExLDQ3''@;'; put 'put ''MzEzLDQ3MzE0LDQ3MzE1LDQ3MzE3LDQ3MzE4LDQ3MzE5LDQ3MzIwLDQ3MzIxLDQ3MzIyLDQ3MzIzLDQ3MzI0LDQ3MzI2LDQ3MzI4LDQ3MzMwLDQ3MzMxLDQ3MzMyLDQ3MzMzLDQ3MzM0LDQ3MzM1LDQ3MzM4LDQ3MzM5LDQ3MzQxLDQ3MzQyLDQ3MzQzLDQ3MzQ1LDQ3MzQ2LDQ3MzQ3LDQ3MzQ4''@;'; put 'put ''LDQ3MzQ5LDQ3MzUwLDQ3MzUxLDQ3MzU0LDQ3MzU2LDQ3MzU4LDQ3MzU5LDQ3MzYwLDQ3MzYxLDQ3MzYyLDQ3MzYzLDQ3MzY1LDQ3MzY2LDQ3MzY3LDQ3MzY4LDQ3MzY5LDQ3MzcwLDQ3MzcxLDQ3MzcyLDQ3MzczLDQ3Mzc0LDQ3Mzc1LDQ3Mzc2LDQ3Mzc3LDQ3Mzc4LDQ3Mzc5LDQ3MzgwLDQ3''@;'; put 'put ''MzgxLDQ3MzgyLDQ3MzgzLDQ3Mzg1LDQ3Mzg2LDQ3Mzg3LDQ3Mzg4LDQ3Mzg5LDQ3MzkwLDQ3MzkxLDQ3MzkzLDQ3Mzk0LDQ3Mzk1LDQ3Mzk2LDQ3Mzk3LDQ3Mzk4LDQ3Mzk5LDQ3NDAwLDQ3NDAxLDQ3NDAyLDQ3NDAzLDQ3NDA0LDQ3NDA1LDQ3NDA2LDQ3NDA3LDQ3NDA4LDQ3NDA5LDQ3NDEw''@;'; put 'put ''LDQ3NDExLDQ3NDEyLDQ3NDEzLDQ3NDE0LDQ3NDE1LDQ3NDE2LDQ3NDE3LDQ3NDE4LDQ3NDE5LDQ3NDIyLDQ3NDIzLDQ3NDI1LDQ3NDI2LDQ3NDI3LDQ3NDI5LDQ3NDMwLDQ3NDMxLDQ3NDMyLDQ3NDMzLDQ3NDM0LDQ3NDM1LDQ3NDM3LDQ3NDM4LDQ3NDQwLDQ3NDQyLDQ3NDQzLDQ3NDQ0LDQ3''@;'; put 'put ''NDQ1LDQ3NDQ2LDQ3NDQ3LDQ3NDUwLDQ3NDUxLDQ3NDUzLDQ3NDU0LDQ3NDU1LDQ3NDU3LDQ3NDU4LDQ3NDU5LDQ3NDYwLDQ3NDYxLDQ3NDYyLDQ3NDYzLDQ3NDY2LDQ3NDY4LDQ3NDcwLDQ3NDcxLDQ3NDcyLDQ3NDczLDQ3NDc0LDQ3NDc1LDQ3NDc4LDQ3NDc5LDQ3NDgxLDQ3NDgyLDQ3NDgz''@;'; put 'put ''LDQ3NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NDg2LDQ3NDg3LDQ3NDg4LDQ3NDg5LDQ3NDkwLDQ3NDkxLDQ3NDk0LDQ3NDk2LDQ3NDk5LDQ3NTAwLDQ3NTAzLDQ3NTA0LDQ3NTA1LDQ3NTA2LDQ3NTA3LDQ3NTA4LDQ3NTA5LDQ3NTEwLDQ3NTExLDQ3NTEyLDQ3NTEzLDQ3''@;'; put 'put ''NTE0LDQ3NTE1LDQ3NTE2LDQ3NTE3LDQ3NTE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NTE5LDQ3NTIwLDQ3NTIxLDQ3NTIyLDQ3NTIzLDQ3NTI0LDQ3NTI1LDQ3NTI2LDQ3NTI3LDQ3NTI4LDQ3NTI5LDQ3NTMwLDQ3NTMxLDQ3NTM0LDQ3NTM1LDQ3NTM3LDQ3NTM4LDQ3NTM5''@;'; put 'put ''LDQ3NTQxLDQ3NTQyLDQ3NTQzLDQ3NTQ0LDQ3NTQ1LDQ3NTQ2LDQ3NTQ3LDQ3NTUwLDQ3NTUyLDQ3NTU0LDQ3NTU1LDQ3NTU2LDQ3NTU3LDQ3NTU4LDQ3NTU5LDQ3NTYyLDQ3NTYzLDQ3NTY1LDQ3NTcxLDQ3NTcyLDQ3NTczLDQ3NTc0LDQ3NTc1LDQ3NTc4LDQ3NTgwLDQ3NTgzLDQ3NTg0LDQ3''@;'; put 'put ''NTg2LDQ3NTkwLDQ3NTkxLDQ3NTkzLDQ3NTk0LDQ3NTk1LDQ3NTk3LDQ3NTk4LDQ3NTk5LDQ3NjAwLDQ3NjAxLDQ3NjAyLDQ3NjAzLDQ3NjA2LDQ3NjExLDQ3NjEyLDQ3NjEzLDQ3NjE0LDQ3NjE1LDQ3NjE4LDQ3NjE5LDQ3NjIwLDQ3NjIxLDQ3NjIyLDQ3NjIzLDQ3NjI1LDQ3NjI2LDQ3NjI3''@;'; put 'put ''LDQ3NjI4LDQ3NjI5LDQ3NjMwLDQ3NjMxLDQ3NjMyLDQ3NjMzLDQ3NjM0LDQ3NjM1LDQ3NjM2LDQ3NjM4LDQ3NjM5LDQ3NjQwLDQ3NjQxLDQ3NjQyLDQ3NjQzLDQ3NjQ0LDQ3NjQ1LDQ3NjQ2LDQ3NjQ3LDQ3NjQ4LDQ3NjQ5LDQ3NjUwLDQ3NjUxLDQ3NjUyLDQ3NjUzLDQ3NjU0LDQ3NjU1LDQ3''@;'; put 'put ''NjU2LDQ3NjU3LDQ3NjU4LDQ3NjU5LDQ3NjYwLDQ3NjYxLDQ3NjYyLDQ3NjYzLDQ3NjY0LDQ3NjY1LDQ3NjY2LDQ3NjY3LDQ3NjY4LDQ3NjY5LDQ3NjcwLDQ3NjcxLDQ3Njc0LDQ3Njc1LDQ3Njc3LDQ3Njc4LDQ3Njc5LDQ3NjgxLDQ3NjgzLDQ3Njg0LDQ3Njg1LDQ3Njg2LDQ3Njg3LDQ3Njkw''@;'; put 'put ''LDQ3NjkyLDQ3Njk1LDQ3Njk2LDQ3Njk3LDQ3Njk4LDQ3NzAyLDQ3NzAzLDQ3NzA1LDQ3NzA2LDQ3NzA3LDQ3NzA5LDQ3NzEwLDQ3NzExLDQ3NzEyLDQ3NzEzLDQ3NzE0LDQ3NzE1LDQ3NzE4LDQ3NzIyLDQ3NzIzLDQ3NzI0LDQ3NzI1LDQ3NzI2LDQ3NzI3LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDQ3NzMwLDQ3NzMxLDQ3NzMzLDQ3NzM0LDQ3NzM1LDQ3NzM3LDQ3NzM4LDQ3NzM5LDQ3NzQwLDQ3NzQxLDQ3NzQyLDQ3NzQzLDQ3NzQ0LDQ3NzQ1LDQ3NzQ2LDQ3NzUwLDQ3NzUyLDQ3NzUzLDQ3NzU0LDQ3NzU1LDQ3NzU3LDQ3NzU4LDQ3NzU5LDQ3NzYwLDQ3NzYxLDQ3NzYy''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzYzLDQ3NzY0LDQ3NzY1LDQ3NzY2LDQ3NzY3LDQ3NzY4LDQ3NzY5LDQ3NzcwLDQ3NzcxLDQ3NzcyLDQ3NzczLDQ3Nzc0LDQ3Nzc1LDQ3Nzc2LDQ3Nzc3LDQ3Nzc4LDQ3Nzc5LDQ3NzgwLDQ3NzgxLDQ3NzgyLDQ3NzgzLDQ3Nzg2LDQ3''@;'; put 'put ''Nzg5LDQ3NzkwLDQ3NzkxLDQ3NzkzLDQ3Nzk1LDQ3Nzk2LDQ3Nzk3LDQ3Nzk4LDQ3Nzk5LDQ3ODAyLDQ3ODA0LDQ3ODA2LDQ3ODA3LDQ3ODA4LDQ3ODA5LDQ3ODEwLDQ3ODExLDQ3ODEzLDQ3ODE0LDQ3ODE1LDQ3ODE3LDQ3ODE4LDQ3ODE5LDQ3ODIwLDQ3ODIxLDQ3ODIyLDQ3ODIzLDQ3ODI0''@;'; put 'put ''LDQ3ODI1LDQ3ODI2LDQ3ODI3LDQ3ODI4LDQ3ODI5LDQ3ODMwLDQ3ODMxLDQ3ODM0LDQ3ODM1LDQ3ODM2LDQ3ODM3LDQ3ODM4LDQ3ODM5LDQ3ODQwLDQ3ODQxLDQ3ODQyLDQ3ODQzLDQ3ODQ0LDQ3ODQ1LDQ3ODQ2LDQ3ODQ3LDQ3ODQ4LDQ3ODQ5LDQ3ODUwLDQ3ODUxLDQ3ODUyLDQ3ODUzLDQ3''@;'; put 'put ''ODU0LDQ3ODU1LDQ3ODU2LDQ3ODU3LDQ3ODU4LDQ3ODU5LDQ3ODYwLDQ3ODYxLDQ3ODYyLDQ3ODYzLDQ3ODY0LDQ3ODY1LDQ3ODY2LDQ3ODY3LDQ3ODY5LDQ3ODcwLDQ3ODcxLDQ3ODczLDQ3ODc0LDQ3ODc1LDQ3ODc3LDQ3ODc4LDQ3ODc5LDQ3ODgwLDQ3ODgxLDQ3ODgyLDQ3ODgzLDQ3ODg0''@;'; put 'put ''LDQ3ODg2LDQ3ODg4LDQ3ODkwLDQ3ODkxLDQ3ODkyLDQ3ODkzLDQ3ODk0LDQ3ODk1LDQ3ODk3LDQ3ODk4LDQ3ODk5LDQ3OTAxLDQ3OTAyLDQ3OTAzLDQ3OTA1LDQ3OTA2LDQ3OTA3LDQ3OTA4LDQ3OTA5LDQ3OTEwLDQ3OTExLDQ3OTEyLDQ3OTE0LDQ3OTE2LDQ3OTE3LDQ3OTE4LDQ3OTE5LDQ3''@;'; put 'put ''OTIwLDQ3OTIxLDQ3OTIyLDQ3OTIzLDQ3OTI3LDQ3OTI5LDQ3OTMwLDQ3OTM1LDQ3OTM2LDQ3OTM3LDQ3OTM4LDQ3OTM5LDQ3OTQyLDQ3OTQ0LDQ3OTQ2LDQ3OTQ3LDQ3OTQ4LDQ3OTUwLDQ3OTUzLDQ3OTU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTU1LDQ3OTU3LDQ3OTU4''@;'; put 'put ''LDQ3OTU5LDQ3OTYxLDQ3OTYyLDQ3OTYzLDQ3OTY0LDQ3OTY1LDQ3OTY2LDQ3OTY3LDQ3OTY4LDQ3OTcwLDQ3OTcyLDQ3OTczLDQ3OTc0LDQ3OTc1LDQ3OTc2LDQ3OTc3LDQ3OTc4LDQ3OTc5LDQ3OTgxLDQ3OTgyLDQ3OTgzLDQ3OTg0LDQ3OTg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDQ3OTg2LDQ3OTg3LDQ3OTg4LDQ3OTg5LDQ3OTkwLDQ3OTkxLDQ3OTkyLDQ3OTkzLDQ3OTk0LDQ3OTk1LDQ3OTk2LDQ3OTk3LDQ3OTk4LDQ3OTk5LDQ4ZTMsNDgwMDEsNDgwMDIsNDgwMDMsNDgwMDQsNDgwMDUsNDgwMDYsNDgwMDcsNDgwMDksNDgwMTAsNDgwMTEsNDgwMTMsNDgwMTQs''@;'; put 'put ''NDgwMTUsNDgwMTcsNDgwMTgsNDgwMTksNDgwMjAsNDgwMjEsNDgwMjIsNDgwMjMsNDgwMjQsNDgwMjUsNDgwMjYsNDgwMjcsNDgwMjgsNDgwMjksNDgwMzAsNDgwMzEsNDgwMzIsNDgwMzMsNDgwMzQsNDgwMzUsNDgwMzcsNDgwMzgsNDgwMzksNDgwNDEsNDgwNDIsNDgwNDMsNDgwNDUsNDgw''@;'; put 'put ''NDYsNDgwNDcsNDgwNDgsNDgwNDksNDgwNTAsNDgwNTEsNDgwNTMsNDgwNTQsNDgwNTYsNDgwNTcsNDgwNTgsNDgwNTksNDgwNjAsNDgwNjEsNDgwNjIsNDgwNjMsNDgwNjUsNDgwNjYsNDgwNjcsNDgwNjksNDgwNzAsNDgwNzEsNDgwNzMsNDgwNzQsNDgwNzUsNDgwNzYsNDgwNzcsNDgwNzgs''@;'; put 'put ''NDgwNzksNDgwODEsNDgwODIsNDgwODQsNDgwODUsNDgwODYsNDgwODcsNDgwODgsNDgwODksNDgwOTAsNDgwOTEsNDgwOTIsNDgwOTMsNDgwOTQsNDgwOTUsNDgwOTYsNDgwOTcsNDgwOTgsNDgwOTksNDgxMDAsNDgxMDEsNDgxMDIsNDgxMDMsNDgxMDQsNDgxMDUsNDgxMDYsNDgxMDcsNDgx''@;'; put 'put ''MDgsNDgxMDksNDgxMTAsNDgxMTEsNDgxMTIsNDgxMTMsNDgxMTQsNDgxMTUsNDgxMTYsNDgxMTcsNDgxMTgsNDgxMTksNDgxMjIsNDgxMjMsNDgxMjUsNDgxMjYsNDgxMjksNDgxMzEsNDgxMzIsNDgxMzMsNDgxMzQsNDgxMzUsNDgxMzgsNDgxNDIsNDgxNDQsNDgxNDYsNDgxNDcsNDgxNTMs''@;'; put 'put ''NDgxNTQsNDgxNjAsNDgxNjEsNDgxNjIsNDgxNjMsNDgxNjYsNDgxNjgsNDgxNzAsNDgxNzEsNDgxNzIsNDgxNzQsNDgxNzUsNDgxNzgsNDgxNzksNDgxODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgxODIsNDgxODMsNDgxODUsNDgxODYsNDgxODcsNDgxODgsNDgxODksNDgx''@;'; put 'put ''OTAsNDgxOTEsNDgxOTQsNDgxOTgsNDgxOTksNDgyMDAsNDgyMDIsNDgyMDMsNDgyMDYsNDgyMDcsNDgyMDksNDgyMTAsNDgyMTEsNDgyMTIsNDgyMTMsNDgyMTQsNDgyMTUsNDgyMTYsNDgyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgyMTgsNDgyMTksNDgyMjAsNDgyMjIs''@;'; put 'put ''NDgyMjMsNDgyMjQsNDgyMjUsNDgyMjYsNDgyMjcsNDgyMjgsNDgyMjksNDgyMzAsNDgyMzEsNDgyMzIsNDgyMzMsNDgyMzQsNDgyMzUsNDgyMzYsNDgyMzcsNDgyMzgsNDgyMzksNDgyNDAsNDgyNDEsNDgyNDIsNDgyNDMsNDgyNDQsNDgyNDUsNDgyNDYsNDgyNDcsNDgyNDgsNDgyNDksNDgy''@;'; put 'put ''NTAsNDgyNTEsNDgyNTIsNDgyNTMsNDgyNTQsNDgyNTUsNDgyNTYsNDgyNTcsNDgyNTgsNDgyNTksNDgyNjIsNDgyNjMsNDgyNjUsNDgyNjYsNDgyNjksNDgyNzEsNDgyNzIsNDgyNzMsNDgyNzQsNDgyNzUsNDgyNzgsNDgyODAsNDgyODMsNDgyODQsNDgyODUsNDgyODYsNDgyODcsNDgyOTAs''@;'; put 'put ''NDgyOTEsNDgyOTMsNDgyOTQsNDgyOTcsNDgyOTgsNDgyOTksNDgzMDAsNDgzMDEsNDgzMDIsNDgzMDMsNDgzMDYsNDgzMTAsNDgzMTEsNDgzMTIsNDgzMTMsNDgzMTQsNDgzMTUsNDgzMTgsNDgzMTksNDgzMjEsNDgzMjIsNDgzMjMsNDgzMjUsNDgzMjYsNDgzMjcsNDgzMjgsNDgzMjksNDgz''@;'; put 'put ''MzAsNDgzMzEsNDgzMzIsNDgzMzQsNDgzMzgsNDgzMzksNDgzNDAsNDgzNDIsNDgzNDMsNDgzNDUsNDgzNDYsNDgzNDcsNDgzNDksNDgzNTAsNDgzNTEsNDgzNTIsNDgzNTMsNDgzNTQsNDgzNTUsNDgzNTYsNDgzNTcsNDgzNTgsNDgzNTksNDgzNjAsNDgzNjEsNDgzNjIsNDgzNjMsNDgzNjQs''@;'; put 'put ''NDgzNjUsNDgzNjYsNDgzNjcsNDgzNjgsNDgzNjksNDgzNzAsNDgzNzEsNDgzNzUsNDgzNzcsNDgzNzgsNDgzNzksNDgzODEsNDgzODIsNDgzODMsNDgzODQsNDgzODUsNDgzODYsNDgzODcsNDgzOTAsNDgzOTIsNDgzOTQsNDgzOTUsNDgzOTYsNDgzOTcsNDgzOTgsNDgzOTksNDg0MDEsNDg0''@;'; put 'put ''MDIsNDg0MDMsNDg0MDUsNDg0MDYsNDg0MDcsNDg0MDgsNDg0MDksNDg0MTAsNDg0MTEsNDg0MTIsNDg0MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0MTQsNDg0MTUsNDg0MTYsNDg0MTcsNDg0MTgsNDg0MTksNDg0MjEsNDg0MjIsNDg0MjMsNDg0MjQsNDg0MjUsNDg0MjYs''@;'; put 'put ''NDg0MjcsNDg0MjksNDg0MzAsNDg0MzEsNDg0MzIsNDg0MzMsNDg0MzQsNDg0MzUsNDg0MzYsNDg0MzcsNDg0MzgsNDg0MzksNDg0NDAsNDg0NDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0NDIsNDg0NDMsNDg0NDQsNDg0NDUsNDg0NDYsNDg0NDcsNDg0NDksNDg0NTAsNDg0''@;'; put 'put ''NTEsNDg0NTIsNDg0NTMsNDg0NTQsNDg0NTUsNDg0NTgsNDg0NTksNDg0NjEsNDg0NjIsNDg0NjMsNDg0NjUsNDg0NjYsNDg0NjcsNDg0NjgsNDg0NjksNDg0NzAsNDg0NzEsNDg0NzQsNDg0NzUsNDg0NzYsNDg0NzcsNDg0NzgsNDg0NzksNDg0ODAsNDg0ODEsNDg0ODIsNDg0ODMsNDg0ODUs''@;'; put 'put ''NDg0ODYsNDg0ODcsNDg0ODksNDg0OTAsNDg0OTEsNDg0OTIsNDg0OTMsNDg0OTQsNDg0OTUsNDg0OTYsNDg0OTcsNDg0OTgsNDg0OTksNDg1MDAsNDg1MDEsNDg1MDIsNDg1MDMsNDg1MDQsNDg1MDUsNDg1MDYsNDg1MDcsNDg1MDgsNDg1MDksNDg1MTAsNDg1MTEsNDg1MTQsNDg1MTUsNDg1''@;'; put 'put ''MTcsNDg1MTgsNDg1MjMsNDg1MjQsNDg1MjUsNDg1MjYsNDg1MjcsNDg1MzAsNDg1MzIsNDg1MzQsNDg1MzUsNDg1MzYsNDg1MzksNDg1NDEsNDg1NDIsNDg1NDMsNDg1NDQsNDg1NDUsNDg1NDYsNDg1NDcsNDg1NDksNDg1NTAsNDg1NTEsNDg1NTIsNDg1NTMsNDg1NTQsNDg1NTUsNDg1NTYs''@;'; put 'put ''NDg1NTcsNDg1NTgsNDg1NTksNDg1NjEsNDg1NjIsNDg1NjMsNDg1NjQsNDg1NjUsNDg1NjYsNDg1NjcsNDg1NjksNDg1NzAsNDg1NzEsNDg1NzIsNDg1NzMsNDg1NzQsNDg1NzUsNDg1NzYsNDg1NzcsNDg1NzgsNDg1NzksNDg1ODAsNDg1ODEsNDg1ODIsNDg1ODMsNDg1ODQsNDg1ODUsNDg1''@;'; put 'put ''ODYsNDg1ODcsNDg1ODgsNDg1ODksNDg1OTAsNDg1OTEsNDg1OTIsNDg1OTMsNDg1OTQsNDg1OTUsNDg1OTgsNDg1OTksNDg2MDEsNDg2MDIsNDg2MDMsNDg2MDUsNDg2MDYsNDg2MDcsNDg2MDgsNDg2MDksNDg2MTAsNDg2MTEsNDg2MTIsNDg2MTMsNDg2MTQsNDg2MTUsNDg2MTYsNDg2MTgs''@;'; put 'put ''NDg2MTksNDg2MjAsNDg2MjEsNDg2MjIsNDg2MjMsNDg2MjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2MjYsNDg2MjcsNDg2MjksNDg2MzAsNDg2MzEsNDg2MzMsNDg2MzQsNDg2MzUsNDg2MzYsNDg2MzcsNDg2MzgsNDg2MzksNDg2NDEsNDg2NDIsNDg2NDQsNDg2NDYsNDg2''@;'; put 'put ''NDcsNDg2NDgsNDg2NDksNDg2NTAsNDg2NTEsNDg2NTQsNDg2NTUsNDg2NTcsNDg2NTgsNDg2NTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2NjEsNDg2NjIsNDg2NjMsNDg2NjQsNDg2NjUsNDg2NjYsNDg2NjcsNDg2NzAsNDg2NzIsNDg2NzMsNDg2NzQsNDg2NzUsNDg2NzYs''@;'; put 'put ''NDg2NzcsNDg2NzgsNDg2NzksNDg2ODAsNDg2ODEsNDg2ODIsNDg2ODMsNDg2ODQsNDg2ODUsNDg2ODYsNDg2ODcsNDg2ODgsNDg2ODksNDg2OTAsNDg2OTEsNDg2OTIsNDg2OTMsNDg2OTQsNDg2OTUsNDg2OTYsNDg2OTcsNDg2OTgsNDg2OTksNDg3MDAsNDg3MDEsNDg3MDIsNDg3MDMsNDg3''@;'; put 'put ''MDQsNDg3MDUsNDg3MDYsNDg3MDcsNDg3MTAsNDg3MTEsNDg3MTMsNDg3MTQsNDg3MTUsNDg3MTcsNDg3MTksNDg3MjAsNDg3MjEsNDg3MjIsNDg3MjMsNDg3MjYsNDg3MjgsNDg3MzIsNDg3MzMsNDg3MzQsNDg3MzUsNDg3MzgsNDg3MzksNDg3NDEsNDg3NDIsNDg3NDMsNDg3NDUsNDg3NDcs''@;'; put 'put ''NDg3NDgsNDg3NDksNDg3NTAsNDg3NTEsNDg3NTQsNDg3NTgsNDg3NTksNDg3NjAsNDg3NjEsNDg3NjIsNDg3NjYsNDg3NjcsNDg3NjksNDg3NzAsNDg3NzEsNDg3NzMsNDg3NzQsNDg3NzUsNDg3NzYsNDg3NzcsNDg3NzgsNDg3NzksNDg3ODIsNDg3ODYsNDg3ODcsNDg3ODgsNDg3ODksNDg3''@;'; put 'put ''OTAsNDg3OTEsNDg3OTQsNDg3OTUsNDg3OTYsNDg3OTcsNDg3OTgsNDg3OTksNDg4MDAsNDg4MDEsNDg4MDIsNDg4MDMsNDg4MDQsNDg4MDUsNDg4MDYsNDg4MDcsNDg4MDksNDg4MTAsNDg4MTEsNDg4MTIsNDg4MTMsNDg4MTQsNDg4MTUsNDg4MTYsNDg4MTcsNDg4MTgsNDg4MTksNDg4MjAs''@;'; put 'put ''NDg4MjEsNDg4MjIsNDg4MjMsNDg4MjQsNDg4MjUsNDg4MjYsNDg4MjcsNDg4MjgsNDg4MjksNDg4MzAsNDg4MzEsNDg4MzIsNDg4MzMsNDg4MzQsNDg4MzUsNDg4MzYsNDg4MzcsNDg4MzgsNDg4MzksNDg4NDAsNDg4NDEsNDg4NDIsNDg4NDMsNDg4NDQsNDg4NDUsNDg4NDYsNDg4NDcsNDg4''@;'; put 'put ''NTAsNDg4NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4NTMsNDg4NTQsNDg4NTcsNDg4NTgsNDg4NTksNDg4NjAsNDg4NjEsNDg4NjIsNDg4NjMsNDg4NjUsNDg4NjYsNDg4NzAsNDg4NzEsNDg4NzIsNDg4NzMsNDg4NzQsNDg4NzUsNDg4NzcsNDg4NzgsNDg4NzksNDg4ODAs''@;'; put 'put ''NDg4ODEsNDg4ODIsNDg4ODMsNDg4ODQsNDg4ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4ODYsNDg4ODcsNDg4ODgsNDg4ODksNDg4OTAsNDg4OTEsNDg4OTIsNDg4OTMsNDg4OTQsNDg4OTUsNDg4OTYsNDg4OTgsNDg4OTksNDg5MDAsNDg5MDEsNDg5MDIsNDg5MDMsNDg5''@;'; put 'put ''MDYsNDg5MDcsNDg5MDgsNDg5MDksNDg5MTAsNDg5MTEsNDg5MTIsNDg5MTMsNDg5MTQsNDg5MTUsNDg5MTYsNDg5MTcsNDg5MTgsNDg5MTksNDg5MjIsNDg5MjYsNDg5MjcsNDg5MjgsNDg5MjksNDg5MzAsNDg5MzEsNDg5MzIsNDg5MzMsNDg5MzQsNDg5MzUsNDg5MzYsNDg5MzcsNDg5Mzgs''@;'; put 'put ''NDg5MzksNDg5NDAsNDg5NDEsNDg5NDIsNDg5NDMsNDg5NDQsNDg5NDUsNDg5NDYsNDg5NDcsNDg5NDgsNDg5NDksNDg5NTAsNDg5NTEsNDg5NTIsNDg5NTMsNDg5NTQsNDg5NTUsNDg5NTYsNDg5NTcsNDg5NTgsNDg5NTksNDg5NjIsNDg5NjMsNDg5NjUsNDg5NjYsNDg5NjcsNDg5NjksNDg5''@;'; put 'put ''NzAsNDg5NzEsNDg5NzIsNDg5NzMsNDg5NzQsNDg5NzUsNDg5NzgsNDg5NzksNDg5ODAsNDg5ODIsNDg5ODMsNDg5ODQsNDg5ODUsNDg5ODYsNDg5ODcsNDg5ODgsNDg5ODksNDg5OTAsNDg5OTEsNDg5OTIsNDg5OTMsNDg5OTQsNDg5OTUsNDg5OTYsNDg5OTcsNDg5OTgsNDg5OTksNDllMyw0''@;'; put 'put ''OTAwMSw0OTAwMiw0OTAwMyw0OTAwNCw0OTAwNSw0OTAwNiw0OTAwNyw0OTAwOCw0OTAwOSw0OTAxMCw0OTAxMSw0OTAxMiw0OTAxMyw0OTAxNCw0OTAxNSw0OTAxNiw0OTAxNyw0OTAxOCw0OTAxOSw0OTAyMCw0OTAyMSw0OTAyMiw0OTAyMyw0OTAyNCw0OTAyNSw0OTAyNiw0OTAyNyw0OTAy''@;'; put 'put ''OCw0OTAyOSw0OTAzMCw0OTAzMSw0OTAzMiw0OTAzMyw0OTAzNCw0OTAzNSw0OTAzNiw0OTAzNyw0OTAzOCw0OTAzOSw0OTA0MCw0OTA0MSw0OTA0Miw0OTA0Myw0OTA0NSw0OTA0Niw0OTA0Nyw0OTA0OCw0OTA0OSw0OTA1MCw0OTA1MSw0OTA1Miw0OTA1MyxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw0OTA1NCw0OTA1NSw0OTA1Niw0OTA1Nyw0OTA1OCw0OTA1OSw0OTA2MCw0OTA2MSw0OTA2Miw0OTA2Myw0OTA2NCw0OTA2NSw0OTA2Niw0OTA2Nyw0OTA2OCw0OTA2OSw0OTA3MCw0OTA3MSw0OTA3Myw0OTA3NCw0OTA3NSw0OTA3Niw0OTA3Nyw0OTA3OCw0OTA3OSw0OTA4''@;'; put 'put ''MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTA4MSw0OTA4Miw0OTA4Myw0OTA4NCw0OTA4NSw0OTA4Niw0OTA4Nyw0OTA4OCw0OTA4OSw0OTA5MCw0OTA5MSw0OTA5Miw0OTA5NCw0OTA5NSw0OTA5Niw0OTA5Nyw0OTA5OCw0OTA5OSw0OTEwMiw0OTEwMyw0OTEwNSw0OTEwNiw0''@;'; put 'put ''OTEwNyw0OTEwOSw0OTExMCw0OTExMSw0OTExMiw0OTExMyw0OTExNCw0OTExNSw0OTExNyw0OTExOCw0OTEyMCw0OTEyMiw0OTEyMyw0OTEyNCw0OTEyNSw0OTEyNiw0OTEyNyw0OTEyOCw0OTEyOSw0OTEzMCw0OTEzMSw0OTEzMiw0OTEzMyw0OTEzNCw0OTEzNSw0OTEzNiw0OTEzNyw0OTEz''@;'; put 'put ''OCw0OTEzOSw0OTE0MCw0OTE0MSw0OTE0Miw0OTE0Myw0OTE0NCw0OTE0NSw0OTE0Niw0OTE0Nyw0OTE0OCw0OTE0OSw0OTE1MCw0OTE1MSw0OTE1Miw0OTE1Myw0OTE1NCw0OTE1NSw0OTE1Niw0OTE1Nyw0OTE1OCw0OTE1OSw0OTE2MCw0OTE2MSw0OTE2Miw0OTE2Myw0OTE2NCw0OTE2NSw0''@;'; put 'put ''OTE2Niw0OTE2Nyw0OTE2OCw0OTE2OSw0OTE3MCw0OTE3MSw0OTE3Miw0OTE3Myw0OTE3NCw0OTE3NSw0OTE3Niw0OTE3Nyw0OTE3OCw0OTE3OSw0OTE4MCw0OTE4MSw0OTE4Miw0OTE4Myw0OTE4NCw0OTE4NSw0OTE4Niw0OTE4Nyw0OTE4OCw0OTE4OSw0OTE5MCw0OTE5MSw0OTE5Miw0OTE5''@;'; put 'put ''Myw0OTE5NCw0OTE5NSw0OTE5Niw0OTE5Nyw0OTE5OCw0OTE5OSw0OTIwMCw0OTIwMSw0OTIwMiw0OTIwMyw0OTIwNCw0OTIwNSw0OTIwNiw0OTIwNyw0OTIwOCw0OTIwOSw0OTIxMCw0OTIxMSw0OTIxMyw0OTIxNCw0OTIxNSw0OTIxNiw0OTIxNyw0OTIxOCw0OTIxOSw0OTIyMCw0OTIyMSw0''@;'; put 'put ''OTIyMiw0OTIyMyw0OTIyNCw0OTIyNSw0OTIyNiw0OTIyNyw0OTIyOCw0OTIyOSw0OTIzMCw0OTIzMSw0OTIzMiw0OTIzNCw0OTIzNSw0OTIzNiw0OTIzNyw0OTIzOCw0OTIzOSw0OTI0MSw0OTI0Miw0OTI0MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTI0NSw0OTI0Niw0OTI0''@;'; put 'put ''Nyw0OTI0OSw0OTI1MCw0OTI1MSw0OTI1Miw0OTI1Myw0OTI1NCw0OTI1NSw0OTI1OCw0OTI1OSw0OTI2MCw0OTI2MSw0OTI2Miw0OTI2Myw0OTI2NCw0OTI2NSw0OTI2Niw0OTI2Nyw0OTI2OCw0OTI2OSw0OTI3MCw0OTI3MSw0OTI3Miw0OTI3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw0OTI3NCw0OTI3NSw0OTI3Niw0OTI3Nyw0OTI3OCw0OTI3OSw0OTI4MCw0OTI4MSw0OTI4Miw0OTI4Myw0OTI4NCw0OTI4NSw0OTI4Niw0OTI4Nyw0OTI4OCw0OTI4OSw0OTI5MCw0OTI5MSw0OTI5Miw0OTI5Myw0OTI5NCw0OTI5NSw0OTI5OCw0OTI5OSw0OTMwMSw0OTMwMiw0OTMw''@;'; put 'put ''Myw0OTMwNSw0OTMwNiw0OTMwNyw0OTMwOCw0OTMwOSw0OTMxMCw0OTMxMSw0OTMxNCw0OTMxNiw0OTMxOCw0OTMxOSw0OTMyMCw0OTMyMSw0OTMyMiw0OTMyMyw0OTMyNiw0OTMyOSw0OTMzMCw0OTMzNSw0OTMzNiw0OTMzNyw0OTMzOCw0OTMzOSw0OTM0Miw0OTM0Niw0OTM0Nyw0OTM0OCw0''@;'; put 'put ''OTM1MCw0OTM1MSw0OTM1NCw0OTM1NSw0OTM1Nyw0OTM1OCw0OTM1OSw0OTM2MSw0OTM2Miw0OTM2Myw0OTM2NCw0OTM2NSw0OTM2Niw0OTM2Nyw0OTM3MCw0OTM3NCw0OTM3NSw0OTM3Niw0OTM3Nyw0OTM3OCw0OTM3OSw0OTM4Miw0OTM4Myw0OTM4NSw0OTM4Niw0OTM4Nyw0OTM4OSw0OTM5''@;'; put 'put ''MCw0OTM5MSw0OTM5Miw0OTM5Myw0OTM5NCw0OTM5NSw0OTM5OCw0OTQwMCw0OTQwMiw0OTQwMyw0OTQwNCw0OTQwNSw0OTQwNiw0OTQwNyw0OTQwOSw0OTQxMCw0OTQxMSw0OTQxMyw0OTQxNCw0OTQxNSw0OTQxNyw0OTQxOCw0OTQxOSw0OTQyMCw0OTQyMSw0OTQyMiw0OTQyMyw0OTQyNSw0''@;'; put 'put ''OTQyNiw0OTQyNyw0OTQyOCw0OTQzMCw0OTQzMSw0OTQzMiw0OTQzMyw0OTQzNCw0OTQzNSw0OTQ0MSw0OTQ0Miw0OTQ0NSw0OTQ0OCw0OTQ0OSw0OTQ1MCw0OTQ1MSw0OTQ1NCw0OTQ1OCw0OTQ1OSw0OTQ2MCw0OTQ2MSw0OTQ2Myw0OTQ2Niw0OTQ2Nyw0OTQ2OSw0OTQ3MCw0OTQ3MSw0OTQ3''@;'; put 'put ''Myw0OTQ3NCw0OTQ3NSw0OTQ3Niw0OTQ3Nyw0OTQ3OCw0OTQ3OSw0OTQ4Miw0OTQ4Niw0OTQ4Nyw0OTQ4OCw0OTQ4OSw0OTQ5MCw0OTQ5MSw0OTQ5NCw0OTQ5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTQ5Nyw0OTQ5OCw0OTQ5OSw0OTUwMSw0OTUwMiw0OTUwMyw0OTUwNCw0''@;'; put 'put ''OTUwNSw0OTUwNiw0OTUwNyw0OTUxMCw0OTUxNCw0OTUxNSw0OTUxNiw0OTUxNyw0OTUxOCw0OTUxOSw0OTUyMSw0OTUyMiw0OTUyMyw0OTUyNSw0OTUyNiw0OTUyNyw0OTUyOSw0OTUzMCw0OTUzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTUzMiw0OTUzMyw0OTUzNCw0OTUz''@;'; put 'put ''NSw0OTUzNiw0OTUzNyw0OTUzOCw0OTUzOSw0OTU0MCw0OTU0Miw0OTU0Myw0OTU0NCw0OTU0NSw0OTU0Niw0OTU0Nyw0OTU1MSw0OTU1Myw0OTU1NCw0OTU1NSw0OTU1Nyw0OTU1OSw0OTU2MCw0OTU2MSw0OTU2Miw0OTU2Myw0OTU2Niw0OTU2OCw0OTU3MCw0OTU3MSw0OTU3Miw0OTU3NCw0''@;'; put 'put ''OTU3NSw0OTU3OCw0OTU3OSw0OTU4MSw0OTU4Miw0OTU4Myw0OTU4NSw0OTU4Niw0OTU4Nyw0OTU4OCw0OTU4OSw0OTU5MCw0OTU5MSw0OTU5Miw0OTU5Myw0OTU5NCw0OTU5NSw0OTU5Niw0OTU5OCw0OTU5OSw0OTYwMCw0OTYwMSw0OTYwMiw0OTYwMyw0OTYwNSw0OTYwNiw0OTYwNyw0OTYw''@;'; put 'put ''OSw0OTYxMCw0OTYxMSw0OTYxMyw0OTYxNCw0OTYxNSw0OTYxNiw0OTYxNyw0OTYxOCw0OTYxOSw0OTYyMSw0OTYyMiw0OTYyNSw0OTYyNiw0OTYyNyw0OTYyOCw0OTYyOSw0OTYzMCw0OTYzMSw0OTYzMyw0OTYzNCw0OTYzNSw0OTYzNyw0OTYzOCw0OTYzOSw0OTY0MSw0OTY0Miw0OTY0Myw0''@;'; put 'put ''OTY0NCw0OTY0NSw0OTY0Niw0OTY0Nyw0OTY1MCw0OTY1Miw0OTY1Myw0OTY1NCw0OTY1NSw0OTY1Niw0OTY1Nyw0OTY1OCw0OTY1OSw0OTY2Miw0OTY2Myw0OTY2NSw0OTY2Niw0OTY2Nyw0OTY2OSw0OTY3MCw0OTY3MSw0OTY3Miw0OTY3Myw0OTY3NCw0OTY3NSw0OTY3OCw0OTY4MCw0OTY4''@;'; put 'put ''Miw0OTY4Myw0OTY4NCw0OTY4NSw0OTY4Niw0OTY4Nyw0OTY5MCw0OTY5MSw0OTY5Myw0OTY5NCw0OTY5Nyw0OTY5OCw0OTY5OSw0OTcwMCw0OTcwMSw0OTcwMiw0OTcwMyw0OTcwNiw0OTcwOCw0OTcxMCw0OTcxMiw0OTcxNSw0OTcxNyw0OTcxOCw0OTcxOSw0OTcyMCw0OTcyMSw0OTcyMiw0''@;'; put 'put ''OTcyMyw0OTcyNCw0OTcyNSw0OTcyNiw0OTcyNyw0OTcyOCw0OTcyOSw0OTczMCw0OTczMSw0OTczMiw0OTczMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTczNCw0OTczNSw0OTczNyw0OTczOCw0OTczOSw0OTc0MCw0OTc0MSw0OTc0Miw0OTc0Myw0OTc0Niw0OTc0Nyw0OTc0''@;'; put 'put ''OSw0OTc1MCw0OTc1MSw0OTc1Myw0OTc1NCw0OTc1NSw0OTc1Niw0OTc1Nyw0OTc1OCw0OTc1OSw0OTc2MSw0OTc2Miw0OTc2Myw0OTc2NCw0OTc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTc2Nyw0OTc2OCw0OTc2OSw0OTc3MCw0OTc3MSw0OTc3NCw0OTc3NSw0OTc3Nyw0''@;'; put 'put ''OTc3OCw0OTc3OSw0OTc4MSw0OTc4Miw0OTc4Myw0OTc4NCw0OTc4NSw0OTc4Niw0OTc4Nyw0OTc5MCw0OTc5Miw0OTc5NCw0OTc5NSw0OTc5Niw0OTc5Nyw0OTc5OCw0OTc5OSw0OTgwMiw0OTgwMyw0OTgwNCw0OTgwNSw0OTgwNiw0OTgwNyw0OTgwOSw0OTgxMCw0OTgxMSw0OTgxMiw0OTgx''@;'; put 'put ''Myw0OTgxNCw0OTgxNSw0OTgxNyw0OTgxOCw0OTgyMCw0OTgyMiw0OTgyMyw0OTgyNCw0OTgyNSw0OTgyNiw0OTgyNyw0OTgzMCw0OTgzMSw0OTgzMyw0OTgzNCw0OTgzNSw0OTgzOCw0OTgzOSw0OTg0MCw0OTg0MSw0OTg0Miw0OTg0Myw0OTg0Niw0OTg0OCw0OTg1MCw0OTg1MSw0OTg1Miw0''@;'; put 'put ''OTg1Myw0OTg1NCw0OTg1NSw0OTg1Niw0OTg1Nyw0OTg1OCw0OTg1OSw0OTg2MCw0OTg2MSw0OTg2Miw0OTg2Myw0OTg2NCw0OTg2NSw0OTg2Niw0OTg2Nyw0OTg2OCw0OTg2OSw0OTg3MCw0OTg3MSw0OTg3Miw0OTg3Myw0OTg3NCw0OTg3NSw0OTg3Niw0OTg3Nyw0OTg3OCw0OTg3OSw0OTg4''@;'; put 'put ''MCw0OTg4MSw0OTg4Miw0OTg4Myw0OTg4Niw0OTg4Nyw0OTg4OSw0OTg5MCw0OTg5Myw0OTg5NCw0OTg5NSw0OTg5Niw0OTg5Nyw0OTg5OCw0OTkwMiw0OTkwNCw0OTkwNiw0OTkwNyw0OTkwOCw0OTkwOSw0OTkxMSw0OTkxNCw0OTkxNyw0OTkxOCw0OTkxOSw0OTkyMSw0OTkyMiw0OTkyMyw0''@;'; put 'put ''OTkyNCw0OTkyNSw0OTkyNiw0OTkyNyw0OTkzMCw0OTkzMSw0OTkzNCw0OTkzNSw0OTkzNiw0OTkzNyw0OTkzOCw0OTk0Miw0OTk0Myw0OTk0NSw0OTk0Niw0OTk0Nyw0OTk0OSw0OTk1MCw0OTk1MSw0OTk1Miw0OTk1Myw0OTk1NCw0OTk1NSw0OTk1OCw0OTk1OSw0OTk2Miw0OTk2Myw0OTk2''@;'; put 'put ''NCw0OTk2NSw0OTk2Niw0OTk2Nyw0OTk2OCw0OTk2OSw0OTk3MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTk3MSw0OTk3Miw0OTk3Myw0OTk3NCw0OTk3NSw0OTk3Niw0OTk3Nyw0OTk3OCw0OTk3OSw0OTk4MCw0OTk4MSw0OTk4Miw0OTk4Myw0OTk4NCw0OTk4NSw0OTk4Niw0''@;'; put 'put ''OTk4Nyw0OTk4OCw0OTk5MCw0OTk5MSw0OTk5Miw0OTk5Myw0OTk5NCw0OTk5NSw0OTk5Niw0OTk5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTk5OCw0OTk5OSw1ZTQsNTAwMDEsNTAwMDIsNTAwMDMsNTAwMDQsNTAwMDUsNTAwMDYsNTAwMDcsNTAwMDgsNTAwMDksNTAwMTAs''@;'; put 'put ''NTAwMTEsNTAwMTIsNTAwMTMsNTAwMTQsNTAwMTUsNTAwMTYsNTAwMTcsNTAwMTgsNTAwMTksNTAwMjAsNTAwMjEsNTAwMjIsNTAwMjMsNTAwMjYsNTAwMjcsNTAwMjksNTAwMzAsNTAwMzEsNTAwMzMsNTAwMzUsNTAwMzYsNTAwMzcsNTAwMzgsNTAwMzksNTAwNDIsNTAwNDMsNTAwNDYsNTAw''@;'; put 'put ''NDcsNTAwNDgsNTAwNDksNTAwNTAsNTAwNTEsNTAwNTMsNTAwNTQsNTAwNTUsNTAwNTcsNTAwNTgsNTAwNTksNTAwNjEsNTAwNjIsNTAwNjMsNTAwNjQsNTAwNjUsNTAwNjYsNTAwNjcsNTAwNjgsNTAwNjksNTAwNzAsNTAwNzEsNTAwNzIsNTAwNzMsNTAwNzQsNTAwNzUsNTAwNzYsNTAwNzcs''@;'; put 'put ''NTAwNzgsNTAwNzksNTAwODAsNTAwODEsNTAwODIsNTAwODMsNTAwODQsNTAwODUsNTAwODYsNTAwODcsNTAwODgsNTAwODksNTAwOTAsNTAwOTEsNTAwOTIsNTAwOTMsNTAwOTQsNTAwOTUsNTAwOTYsNTAwOTcsNTAwOTgsNTAwOTksNTAxMDAsNTAxMDEsNTAxMDIsNTAxMDMsNTAxMDQsNTAx''@;'; put 'put ''MDUsNTAxMDYsNTAxMDcsNTAxMDgsNTAxMDksNTAxMTAsNTAxMTEsNTAxMTMsNTAxMTQsNTAxMTUsNTAxMTYsNTAxMTcsNTAxMTgsNTAxMTksNTAxMjAsNTAxMjEsNTAxMjIsNTAxMjMsNTAxMjQsNTAxMjUsNTAxMjYsNTAxMjcsNTAxMjgsNTAxMjksNTAxMzAsNTAxMzEsNTAxMzIsNTAxMzMs''@;'; put 'put ''NTAxMzQsNTAxMzUsNTAxMzgsNTAxMzksNTAxNDEsNTAxNDIsNTAxNDUsNTAxNDcsNTAxNDgsNTAxNDksNTAxNTAsNTAxNTEsNTAxNTQsNTAxNTUsNTAxNTYsNTAxNTgsNTAxNTksNTAxNjAsNTAxNjEsNTAxNjIsNTAxNjMsNTAxNjYsNTAxNjcsNTAxNjksNTAxNzAsNTAxNzEsNTAxNzIsNTAx''@;'; put 'put ''NzMsNTAxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAxNzUsNTAxNzYsNTAxNzcsNTAxNzgsNTAxNzksNTAxODAsNTAxODEsNTAxODIsNTAxODMsNTAxODUsNTAxODYsNTAxODcsNTAxODgsNTAxODksNTAxOTAsNTAxOTEsNTAxOTMsNTAxOTQsNTAxOTUsNTAxOTYsNTAxOTcs''@;'; put 'put ''NTAxOTgsNTAxOTksNTAyMDAsNTAyMDEsNTAyMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAyMDMsNTAyMDQsNTAyMDUsNTAyMDYsNTAyMDcsNTAyMDgsNTAyMDksNTAyMTAsNTAyMTEsNTAyMTMsNTAyMTQsNTAyMTUsNTAyMTYsNTAyMTcsNTAyMTgsNTAyMTksNTAyMjEsNTAy''@;'; put 'put ''MjIsNTAyMjMsNTAyMjUsNTAyMjYsNTAyMjcsNTAyMjksNTAyMzAsNTAyMzEsNTAyMzIsNTAyMzMsNTAyMzQsNTAyMzUsNTAyMzgsNTAyMzksNTAyNDAsNTAyNDEsNTAyNDIsNTAyNDMsNTAyNDQsNTAyNDUsNTAyNDYsNTAyNDcsNTAyNDksNTAyNTAsNTAyNTEsNTAyNTIsNTAyNTMsNTAyNTQs''@;'; put 'put ''NTAyNTUsNTAyNTYsNTAyNTcsNTAyNTgsNTAyNTksNTAyNjAsNTAyNjEsNTAyNjIsNTAyNjMsNTAyNjQsNTAyNjUsNTAyNjYsNTAyNjcsNTAyNjgsNTAyNjksNTAyNzAsNTAyNzEsNTAyNzIsNTAyNzMsNTAyNzQsNTAyNzUsNTAyNzgsNTAyNzksNTAyODEsNTAyODIsNTAyODMsNTAyODUsNTAy''@;'; put 'put ''ODYsNTAyODcsNTAyODgsNTAyODksNTAyOTAsNTAyOTEsNTAyOTQsNTAyOTUsNTAyOTYsNTAyOTgsNTAyOTksNTAzMDAsNTAzMDEsNTAzMDIsNTAzMDMsNTAzMDUsNTAzMDYsNTAzMDcsNTAzMDgsNTAzMDksNTAzMTAsNTAzMTEsNTAzMTIsNTAzMTMsNTAzMTQsNTAzMTUsNTAzMTYsNTAzMTcs''@;'; put 'put ''NTAzMTgsNTAzMTksNTAzMjAsNTAzMjEsNTAzMjIsNTAzMjMsNTAzMjUsNTAzMjYsNTAzMjcsNTAzMjgsNTAzMjksNTAzMzAsNTAzMzEsNTAzMzMsNTAzMzQsNTAzMzUsNTAzMzYsNTAzMzcsNTAzMzgsNTAzMzksNTAzNDAsNTAzNDEsNTAzNDIsNTAzNDMsNTAzNDQsNTAzNDUsNTAzNDYsNTAz''@;'; put 'put ''NDcsNTAzNDgsNTAzNDksNTAzNTAsNTAzNTEsNTAzNTIsNTAzNTMsNTAzNTQsNTAzNTUsNTAzNTYsNTAzNTcsNTAzNTgsNTAzNTksNTAzNjEsNTAzNjIsNTAzNjMsNTAzNjUsNTAzNjYsNTAzNjcsNTAzNjgsNTAzNjksNTAzNzAsNTAzNzEsNTAzNzIsNTAzNzMsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNTAzNzQsNTAzNzUsNTAzNzYsNTAzNzcsNTAzNzgsNTAzNzksNTAzODAsNTAzODEsNTAzODIsNTAzODMsNTAzODQsNTAzODUsNTAzODYsNTAzODcsNTAzODgsNTAzODksNTAzOTAsNTAzOTEsNTAzOTIsNTAzOTMsNTAzOTQsNTAzOTUsNTAzOTYsNTAzOTcsNTAzOTgsNTAz''@;'; put 'put ''OTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA0MDAsNTA0MDEsNTA0MDIsNTA0MDMsNTA0MDQsNTA0MDUsNTA0MDYsNTA0MDcsNTA0MDgsNTA0MTAsNTA0MTEsNTA0MTIsNTA0MTMsNTA0MTQsNTA0MTUsNTA0MTgsNTA0MTksNTA0MjEsNTA0MjIsNTA0MjMsNTA0MjUsNTA0Mjcs''@;'; put 'put ''NTA0MjgsNTA0MjksNTA0MzAsNTA0MzQsNTA0MzUsNTA0MzYsNTA0MzcsNTA0MzgsNTA0MzksNTA0NDAsNTA0NDEsNTA0NDIsNTA0NDMsNTA0NDUsNTA0NDYsNTA0NDcsNTA0NDksNTA0NTAsNTA0NTEsNTA0NTMsNTA0NTQsNTA0NTUsNTA0NTYsNTA0NTcsNTA0NTgsNTA0NTksNTA0NjEsNTA0''@;'; put 'put ''NjIsNTA0NjMsNTA0NjQsNTA0NjUsNTA0NjYsNTA0NjcsNTA0NjgsNTA0NjksNTA0NzAsNTA0NzEsNTA0NzQsNTA0NzUsNTA0NzcsNTA0NzgsNTA0NzksNTA0ODEsNTA0ODIsNTA0ODMsNTA0ODQsNTA0ODUsNTA0ODYsNTA0ODcsNTA0OTAsNTA0OTIsNTA0OTQsNTA0OTUsNTA0OTYsNTA0OTcs''@;'; put 'put ''NTA0OTgsNTA0OTksNTA1MDIsNTA1MDMsNTA1MDcsNTA1MTEsNTA1MTIsNTA1MTMsNTA1MTQsNTA1MTgsNTA1MjIsNTA1MjMsNTA1MjQsNTA1MjcsNTA1MzAsNTA1MzEsNTA1MzMsNTA1MzQsNTA1MzUsNTA1MzcsNTA1MzgsNTA1MzksNTA1NDAsNTA1NDEsNTA1NDIsNTA1NDMsNTA1NDYsNTA1''@;'; put 'put ''NTAsNTA1NTEsNTA1NTIsNTA1NTMsNTA1NTQsNTA1NTUsNTA1NTgsNTA1NTksNTA1NjEsNTA1NjIsNTA1NjMsNTA1NjUsNTA1NjYsNTA1NjgsNTA1NjksNTA1NzAsNTA1NzEsNTA1NzQsNTA1NzYsNTA1NzgsNTA1NzksNTA1ODAsNTA1ODIsNTA1ODUsNTA1ODYsNTA1ODcsNTA1ODksNTA1OTAs''@;'; put 'put ''NTA1OTEsNTA1OTMsNTA1OTQsNTA1OTUsNTA1OTYsNTA1OTcsNTA1OTgsNTA1OTksNTA2MDAsNTA2MDIsNTA2MDMsNTA2MDQsNTA2MDUsNTA2MDYsNTA2MDcsNTA2MDgsNTA2MDksNTA2MTAsNTA2MTEsNTA2MTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2MTUsNTA2MTgsNTA2''@;'; put 'put ''MjMsNTA2MjQsNTA2MjUsNTA2MjYsNTA2MjcsNTA2MzUsNTA2MzcsNTA2MzksNTA2NDIsNTA2NDMsNTA2NDUsNTA2NDYsNTA2NDcsNTA2NDksNTA2NTAsNTA2NTEsNTA2NTIsNTA2NTMsNTA2NTQsNTA2NTUsNTA2NTgsNTA2NjAsNTA2NjIsNTA2NjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTA2NjQsNTA2NjUsNTA2NjYsNTA2NjcsNTA2NzEsNTA2NzMsNTA2NzQsNTA2NzUsNTA2NzcsNTA2ODAsNTA2ODEsNTA2ODIsNTA2ODMsNTA2OTAsNTA2OTEsNTA2OTIsNTA2OTcsNTA2OTgsNTA2OTksNTA3MDEsNTA3MDIsNTA3MDMsNTA3MDUsNTA3MDYsNTA3MDcsNTA3MDgsNTA3''@;'; put 'put ''MDksNTA3MTAsNTA3MTEsNTA3MTQsNTA3MTcsNTA3MTgsNTA3MTksNTA3MjAsNTA3MjEsNTA3MjIsNTA3MjMsNTA3MjYsNTA3MjcsNTA3MjksNTA3MzAsNTA3MzEsNTA3MzUsNTA3MzcsNTA3MzgsNTA3NDIsNTA3NDQsNTA3NDYsNTA3NDgsNTA3NDksNTA3NTAsNTA3NTEsNTA3NTQsNTA3NTUs''@;'; put 'put ''NTA3NTcsNTA3NTgsNTA3NTksNTA3NjEsNTA3NjIsNTA3NjMsNTA3NjQsNTA3NjUsNTA3NjYsNTA3NjcsNTA3NzAsNTA3NzQsNTA3NzUsNTA3NzYsNTA3NzcsNTA3NzgsNTA3NzksNTA3ODIsNTA3ODMsNTA3ODUsNTA3ODYsNTA3ODcsNTA3ODgsNTA3ODksNTA3OTAsNTA3OTEsNTA3OTIsNTA3''@;'; put 'put ''OTMsNTA3OTQsNTA3OTUsNTA3OTcsNTA3OTgsNTA4MDAsNTA4MDIsNTA4MDMsNTA4MDQsNTA4MDUsNTA4MDYsNTA4MDcsNTA4MTAsNTA4MTEsNTA4MTMsNTA4MTQsNTA4MTUsNTA4MTcsNTA4MTgsNTA4MTksNTA4MjAsNTA4MjEsNTA4MjIsNTA4MjMsNTA4MjYsNTA4MjgsNTA4MzAsNTA4MzEs''@;'; put 'put ''NTA4MzIsNTA4MzMsNTA4MzQsNTA4MzUsNTA4MzgsNTA4MzksNTA4NDEsNTA4NDIsNTA4NDMsNTA4NDUsNTA4NDYsNTA4NDcsNTA4NDgsNTA4NDksNTA4NTAsNTA4NTEsNTA4NTQsNTA4NTYsNTA4NTgsNTA4NTksNTA4NjAsNTA4NjEsNTA4NjIsNTA4NjMsNTA4NjYsNTA4NjcsNTA4NjksNTA4''@;'; put 'put ''NzAsNTA4NzEsNTA4NzUsNTA4NzYsNTA4NzcsNTA4NzgsNTA4NzksNTA4ODIsNTA4ODQsNTA4ODYsNTA4ODcsNTA4ODgsNTA4ODksNTA4OTAsNTA4OTEsNTA4OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA4OTUsNTA4OTcsNTA4OTgsNTA4OTksNTA5MDEsNTA5MDIsNTA5MDMs''@;'; put 'put ''NTA5MDQsNTA5MDUsNTA5MDYsNTA5MDcsNTA5MTAsNTA5MTEsNTA5MTQsNTA5MTUsNTA5MTYsNTA5MTcsNTA5MTgsNTA5MTksNTA5MjIsNTA5MjMsNTA5MjUsNTA5MjYsNTA5MjcsNTA5MjksNTA5MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA5MzEsNTA5MzIsNTA5MzMsNTA5''@;'; put 'put ''MzQsNTA5MzUsNTA5MzgsNTA5MzksNTA5NDAsNTA5NDIsNTA5NDMsNTA5NDQsNTA5NDUsNTA5NDYsNTA5NDcsNTA5NTAsNTA5NTEsNTA5NTMsNTA5NTQsNTA5NTUsNTA5NTcsNTA5NTgsNTA5NTksNTA5NjAsNTA5NjEsNTA5NjIsNTA5NjMsNTA5NjYsNTA5NjgsNTA5NzAsNTA5NzEsNTA5NzIs''@;'; put 'put ''NTA5NzMsNTA5NzQsNTA5NzUsNTA5NzgsNTA5NzksNTA5ODEsNTA5ODIsNTA5ODMsNTA5ODUsNTA5ODYsNTA5ODcsNTA5ODgsNTA5ODksNTA5OTAsNTA5OTEsNTA5OTQsNTA5OTYsNTA5OTgsNTFlMyw1MTAwMSw1MTAwMiw1MTAwMyw1MTAwNiw1MTAwNyw1MTAwOSw1MTAxMCw1MTAxMSw1MTAx''@;'; put 'put ''Myw1MTAxNCw1MTAxNSw1MTAxNiw1MTAxNyw1MTAxOSw1MTAyMiw1MTAyNCw1MTAzMyw1MTAzNCw1MTAzNSw1MTAzNyw1MTAzOCw1MTAzOSw1MTA0MSw1MTA0Miw1MTA0Myw1MTA0NCw1MTA0NSw1MTA0Niw1MTA0Nyw1MTA0OSw1MTA1MCw1MTA1Miw1MTA1Myw1MTA1NCw1MTA1NSw1MTA1Niw1''@;'; put 'put ''MTA1Nyw1MTA1OCw1MTA1OSw1MTA2Miw1MTA2Myw1MTA2NSw1MTA2Niw1MTA2Nyw1MTA3MSw1MTA3Miw1MTA3Myw1MTA3NCw1MTA3OCw1MTA4Myw1MTA4NCw1MTA4NSw1MTA4Nyw1MTA5MCw1MTA5MSw1MTA5Myw1MTA5Nyw1MTA5OSw1MTEwMCw1MTEwMSw1MTEwMiw1MTEwMyw1MTEwNiw1MTEx''@;'; put 'put ''MSw1MTExMiw1MTExMyw1MTExNCw1MTExNSw1MTExOCw1MTExOSw1MTEyMSw1MTEyMiw1MTEyMyw1MTEyNSw1MTEyNiw1MTEyNyw1MTEyOCw1MTEyOSw1MTEzMCw1MTEzMSw1MTEzNCw1MTEzOCw1MTEzOSw1MTE0MCw1MTE0MSw1MTE0Miw1MTE0Myw1MTE0Niw1MTE0Nyw1MTE0OSw1MTE1MSw1''@;'; put 'put ''MTE1Myw1MTE1NCw1MTE1NSw1MTE1Niw1MTE1Nyw1MTE1OCw1MTE1OSw1MTE2MSw1MTE2Miw1MTE2Myw1MTE2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTE2Niw1MTE2Nyw1MTE2OCw1MTE2OSw1MTE3MCw1MTE3MSw1MTE3Myw1MTE3NCw1MTE3NSw1MTE3Nyw1MTE3OCw1MTE3''@;'; put 'put ''OSw1MTE4MSw1MTE4Miw1MTE4Myw1MTE4NCw1MTE4NSw1MTE4Niw1MTE4Nyw1MTE4OCw1MTE4OSw1MTE5MCw1MTE5MSw1MTE5Miw1MTE5Myw1MTE5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTE5NSw1MTE5Niw1MTE5Nyw1MTE5OCw1MTE5OSw1MTIwMiw1MTIwMyw1MTIwNSw1''@;'; put 'put ''MTIwNiw1MTIwNyw1MTIwOSw1MTIxMSw1MTIxMiw1MTIxMyw1MTIxNCw1MTIxNSw1MTIxOCw1MTIyMCw1MTIyMyw1MTIyNCw1MTIyNSw1MTIyNiw1MTIyNyw1MTIzMCw1MTIzMSw1MTIzMyw1MTIzNCw1MTIzNSw1MTIzNyw1MTIzOCw1MTIzOSw1MTI0MCw1MTI0MSw1MTI0Miw1MTI0Myw1MTI0''@;'; put 'put ''Niw1MTI0OCw1MTI1MCw1MTI1MSw1MTI1Miw1MTI1Myw1MTI1NCw1MTI1NSw1MTI1Nyw1MTI1OCw1MTI1OSw1MTI2MSw1MTI2Miw1MTI2Myw1MTI2NSw1MTI2Niw1MTI2Nyw1MTI2OCw1MTI2OSw1MTI3MCw1MTI3MSw1MTI3NCw1MTI3NSw1MTI3OCw1MTI3OSw1MTI4MCw1MTI4MSw1MTI4Miw1''@;'; put 'put ''MTI4Myw1MTI4NSw1MTI4Niw1MTI4Nyw1MTI4OCw1MTI4OSw1MTI5MCw1MTI5MSw1MTI5Miw1MTI5Myw1MTI5NCw1MTI5NSw1MTI5Niw1MTI5Nyw1MTI5OCw1MTI5OSw1MTMwMCw1MTMwMSw1MTMwMiw1MTMwMyw1MTMwNCw1MTMwNSw1MTMwNiw1MTMwNyw1MTMwOCw1MTMwOSw1MTMxMCw1MTMx''@;'; put 'put ''MSw1MTMxNCw1MTMxNSw1MTMxNyw1MTMxOCw1MTMxOSw1MTMyMSw1MTMyMyw1MTMyNCw1MTMyNSw1MTMyNiw1MTMyNyw1MTMzMCw1MTMzMiw1MTMzNiw1MTMzNyw1MTMzOCw1MTM0Miw1MTM0Myw1MTM0NCw1MTM0NSw1MTM0Niw1MTM0Nyw1MTM0OSw1MTM1MCw1MTM1MSw1MTM1Miw1MTM1Myw1''@;'; put 'put ''MTM1NCw1MTM1NSw1MTM1Niw1MTM1OCw1MTM2MCw1MTM2Miw1MTM2Myw1MTM2NCw1MTM2NSw1MTM2Niw1MTM2Nyw1MTM2OSw1MTM3MCw1MTM3MSw1MTM3Miw1MTM3Myw1MTM3NCw1MTM3NSw1MTM3Niw1MTM3Nyw1MTM3OCw1MTM3OSw1MTM4MCw1MTM4MSw1MTM4Miw1MTM4Myw1MTM4NCw1MTM4''@;'; put 'put ''NSw1MTM4Niw1MTM4Nyw1MTM5MCw1MTM5MSw1MTM5Miw1MTM5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTM5NCw1MTM5NSw1MTM5Nyw1MTM5OCw1MTM5OSw1MTQwMSw1MTQwMiw1MTQwMyw1MTQwNSw1MTQwNiw1MTQwNyw1MTQwOCw1MTQwOSw1MTQxMCw1MTQxMSw1MTQxNCw1''@;'; put 'put ''MTQxNiw1MTQxOCw1MTQxOSw1MTQyMCw1MTQyMSw1MTQyMiw1MTQyMyw1MTQyNiw1MTQyNyw1MTQyOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTQzMCw1MTQzMSw1MTQzMiw1MTQzMyw1MTQzNCw1MTQzNSw1MTQzNiw1MTQzNyw1MTQzOCw1MTQzOSw1MTQ0MCw1MTQ0MSw1MTQ0''@;'; put 'put ''Miw1MTQ0Myw1MTQ0NCw1MTQ0Niw1MTQ0Nyw1MTQ0OCw1MTQ0OSw1MTQ1MCw1MTQ1MSw1MTQ1NCw1MTQ1NSw1MTQ1Nyw1MTQ1OCw1MTQ1OSw1MTQ2Myw1MTQ2NCw1MTQ2NSw1MTQ2Niw1MTQ2Nyw1MTQ3MCwxMjI4OCwxMjI4OSwxMjI5MCwxODMsODIyOSw4MjMwLDE2OCwxMjI5MSwxNzMsODIx''@;'; put 'put ''Myw4NzQxLDY1MzQwLDg3NjQsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMwOCwxMjMwOSwxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSwxNzcsMjE1LDI0Nyw4ODAwLDg4MDQsODgwNSw4NzM0LDg3NTYsMTc2LDgyNDIsODI0Myw4NDUx''@;'; put 'put ''LDg0OTEsNjU1MDQsNjU1MDUsNjU1MDksOTc5NCw5NzkyLDg3MzYsODg2OSw4OTc4LDg3MDYsODcxMSw4ODAxLDg3ODYsMTY3LDgyNTEsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEsOTY2MCw4NTk0LDg1OTIsODU5Myw4NTk1LDg1''@;'; put 'put ''OTYsMTIzMDcsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3NTcsODc0Nyw4NzQ4LDg3MTIsODcxNSw4ODM4LDg4MzksODgzNCw4ODM1LDg3NDYsODc0NSw4NzQzLDg3NDQsNjU1MDYsNTE0NzIsNTE0NzQsNTE0NzUsNTE0NzYsNTE0NzcsNTE0NzgsNTE0NzksNTE0ODEsNTE0ODIsNTE0ODMs''@;'; put 'put ''NTE0ODQsNTE0ODUsNTE0ODYsNTE0ODcsNTE0ODgsNTE0ODksNTE0OTAsNTE0OTEsNTE0OTIsNTE0OTMsNTE0OTQsNTE0OTUsNTE0OTYsNTE0OTcsNTE0OTgsNTE0OTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1MDEsNTE1MDIsNTE1MDMsNTE1MDQsNTE1MDUsNTE1MDYsNTE1''@;'; put 'put ''MDcsNTE1MDksNTE1MTAsNTE1MTEsNTE1MTIsNTE1MTMsNTE1MTQsNTE1MTUsNTE1MTYsNTE1MTcsNTE1MTgsNTE1MTksNTE1MjAsNTE1MjEsNTE1MjIsNTE1MjMsNTE1MjQsNTE1MjUsNTE1MjYsNTE1MjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1MjgsNTE1MjksNTE1MzAs''@;'; put 'put ''NTE1MzEsNTE1MzIsNTE1MzMsNTE1MzQsNTE1MzUsNTE1MzgsNTE1MzksNTE1NDEsNTE1NDIsNTE1NDMsNTE1NDUsNTE1NDYsNTE1NDcsNTE1NDgsNTE1NDksNTE1NTAsNTE1NTEsNTE1NTQsNTE1NTYsNTE1NTcsNTE1NTgsNTE1NTksNTE1NjAsNTE1NjEsNTE1NjIsNTE1NjMsNTE1NjUsNTE1''@;'; put 'put ''NjYsNTE1NjcsODY1OCw4NjYwLDg3MDQsODcwNywxODAsNjUzNzQsNzExLDcyOCw3MzMsNzMwLDcyOSwxODQsNzMxLDE2MSwxOTEsNzIwLDg3NTAsODcyMSw4NzE5LDE2NCw4NDU3LDgyNDAsOTY2NSw5NjY0LDk2NTUsOTY1NCw5ODI4LDk4MjQsOTgyNSw5ODI5LDk4MzEsOTgyNyw4ODU3LDk2''@;'; put 'put ''NzIsOTYzNSw5NjgwLDk2ODEsOTYxOCw5NjM2LDk2MzcsOTY0MCw5NjM5LDk2MzgsOTY0MSw5ODMyLDk3NDMsOTc0Miw5NzU2LDk3NTgsMTgyLDgyMjQsODIyNSw4NTk3LDg1OTksODYwMSw4NTk4LDg2MDAsOTgzNyw5ODMzLDk4MzQsOTgzNiwxMjkyNywxMjgyOCw4NDcwLDEzMjU1LDg0ODIs''@;'; put 'put ''MTMyNTAsMTMyNzIsODQ4MSw4MzY0LDE3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1NjksNTE1NzAsNTE1NzEsNTE1NzMs''@;'; put 'put ''NTE1NzQsNTE1NzUsNTE1NzYsNTE1NzcsNTE1NzgsNTE1NzksNTE1ODEsNTE1ODIsNTE1ODMsNTE1ODQsNTE1ODUsNTE1ODYsNTE1ODcsNTE1ODgsNTE1ODksNTE1OTAsNTE1OTEsNTE1OTQsNTE1OTUsNTE1OTcsNTE1OTgsNTE1OTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE2''@;'; put 'put ''MDEsNTE2MDIsNTE2MDMsNTE2MDQsNTE2MDUsNTE2MDYsNTE2MDcsNTE2MTAsNTE2MTIsNTE2MTQsNTE2MTUsNTE2MTYsNTE2MTcsNTE2MTgsNTE2MTksNTE2MjAsNTE2MjEsNTE2MjIsNTE2MjMsNTE2MjQsNTE2MjUsNTE2MjYsNTE2MjcsNTE2MjgsNTE2MjksNTE2MzAsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsNTE2MzEsNTE2MzIsNTE2MzMsNTE2MzQsNTE2MzUsNTE2MzYsNTE2MzcsNTE2MzgsNTE2MzksNTE2NDAsNTE2NDEsNTE2NDIsNTE2NDMsNTE2NDQsNTE2NDUsNTE2NDYsNTE2NDcsNTE2NTAsNTE2NTEsNTE2NTMsNTE2NTQsNTE2NTcsNTE2NTksNTE2NjAsNTE2''@;'; put 'put ''NjEsNTE2NjIsNTE2NjMsNTE2NjYsNTE2NjgsNTE2NzEsNTE2NzIsNTE2NzUsNjUyODEsNjUyODIsNjUyODMsNjUyODQsNjUyODUsNjUyODYsNjUyODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAs''@;'; put 'put ''NjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUzMDgsNjUzMDksNjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUz''@;'; put 'put ''MjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzMzksNjU1MTAsNjUzNDEsNjUzNDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUs''@;'; put 'put ''NjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTE2NzgsNTE2NzksNTE2ODEsNTE2ODMsNTE2ODUsNTE2ODYsNTE2ODgsNTE2ODksNTE2''@;'; put 'put ''OTAsNTE2OTEsNTE2OTQsNTE2OTgsNTE2OTksNTE3MDAsNTE3MDEsNTE3MDIsNTE3MDMsNTE3MDYsNTE3MDcsNTE3MDksNTE3MTAsNTE3MTEsNTE3MTMsNTE3MTQsNTE3MTUsNTE3MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE3MTcsNTE3MTgsNTE3MTksNTE3MjIsNTE3MjYs''@;'; put 'put ''NTE3MjcsNTE3MjgsNTE3MjksNTE3MzAsNTE3MzEsNTE3MzMsNTE3MzQsNTE3MzUsNTE3MzcsNTE3MzgsNTE3MzksNTE3NDAsNTE3NDEsNTE3NDIsNTE3NDMsNTE3NDQsNTE3NDUsNTE3NDYsNTE3NDcsNTE3NDgsNTE3NDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE3NTAsNTE3''@;'; put 'put ''NTEsNTE3NTIsNTE3NTQsNTE3NTUsNTE3NTYsNTE3NTcsNTE3NTgsNTE3NTksNTE3NjAsNTE3NjEsNTE3NjIsNTE3NjMsNTE3NjQsNTE3NjUsNTE3NjYsNTE3NjcsNTE3NjgsNTE3NjksNTE3NzAsNTE3NzEsNTE3NzIsNTE3NzMsNTE3NzQsNTE3NzUsNTE3NzYsNTE3NzcsNTE3NzgsNTE3Nzks''@;'; put 'put ''NTE3ODAsNTE3ODEsNTE3ODIsMTI1OTMsMTI1OTQsMTI1OTUsMTI1OTYsMTI1OTcsMTI1OTgsMTI1OTksMTI2MDAsMTI2MDEsMTI2MDIsMTI2MDMsMTI2MDQsMTI2MDUsMTI2MDYsMTI2MDcsMTI2MDgsMTI2MDksMTI2MTAsMTI2MTEsMTI2MTIsMTI2MTMsMTI2MTQsMTI2MTUsMTI2MTYsMTI2''@;'; put 'put ''MTcsMTI2MTgsMTI2MTksMTI2MjAsMTI2MjEsMTI2MjIsMTI2MjMsMTI2MjQsMTI2MjUsMTI2MjYsMTI2MjcsMTI2MjgsMTI2MjksMTI2MzAsMTI2MzEsMTI2MzIsMTI2MzMsMTI2MzQsMTI2MzUsMTI2MzYsMTI2MzcsMTI2MzgsMTI2MzksMTI2NDAsMTI2NDEsMTI2NDIsMTI2NDMsMTI2NDQs''@;'; put 'put ''MTI2NDUsMTI2NDYsMTI2NDcsMTI2NDgsMTI2NDksMTI2NTAsMTI2NTEsMTI2NTIsMTI2NTMsMTI2NTQsMTI2NTUsMTI2NTYsMTI2NTcsMTI2NTgsMTI2NTksMTI2NjAsMTI2NjEsMTI2NjIsMTI2NjMsMTI2NjQsMTI2NjUsMTI2NjYsMTI2NjcsMTI2NjgsMTI2NjksMTI2NzAsMTI2NzEsMTI2''@;'; put 'put ''NzIsMTI2NzMsMTI2NzQsMTI2NzUsMTI2NzYsMTI2NzcsMTI2NzgsMTI2NzksMTI2ODAsMTI2ODEsMTI2ODIsMTI2ODMsMTI2ODQsMTI2ODUsMTI2ODYsNTE3ODMsNTE3ODQsNTE3ODUsNTE3ODYsNTE3ODcsNTE3OTAsNTE3OTEsNTE3OTMsNTE3OTQsNTE3OTUsNTE3OTcsNTE3OTgsNTE3OTks''@;'; put 'put ''NTE4MDAsNTE4MDEsNTE4MDIsNTE4MDMsNTE4MDYsNTE4MTAsNTE4MTEsNTE4MTIsNTE4MTMsNTE4MTQsNTE4MTUsNTE4MTcsNTE4MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4MTksNTE4MjAsNTE4MjEsNTE4MjIsNTE4MjMsNTE4MjQsNTE4MjUsNTE4MjYsNTE4MjcsNTE4''@;'; put 'put ''MjgsNTE4MjksNTE4MzAsNTE4MzEsNTE4MzIsNTE4MzMsNTE4MzQsNTE4MzUsNTE4MzYsNTE4MzgsNTE4MzksNTE4NDAsNTE4NDEsNTE4NDIsNTE4NDMsNTE4NDUsNTE4NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4NDcsNTE4NDgsNTE4NDksNTE4NTAsNTE4NTEsNTE4NTIs''@;'; put 'put ''NTE4NTMsNTE4NTQsNTE4NTUsNTE4NTYsNTE4NTcsNTE4NTgsNTE4NTksNTE4NjAsNTE4NjEsNTE4NjIsNTE4NjMsNTE4NjUsNTE4NjYsNTE4NjcsNTE4NjgsNTE4NjksNTE4NzAsNTE4NzEsNTE4NzIsNTE4NzMsNTE4NzQsNTE4NzUsNTE4NzYsNTE4NzcsNTE4NzgsNTE4NzksODU2MCw4NTYx''@;'; put 'put ''LDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkx''@;'; put 'put ''Niw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1''@;'; put 'put ''LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg4MCw1MTg4MSw1MTg4Miw1MTg4Myw1MTg4NCw1MTg4NSw1MTg4Niw1MTg4Nyw1MTg4OCw1MTg4OSw1MTg5MCw1MTg5MSw1MTg5Miw1MTg5''@;'; put 'put ''Myw1MTg5NCw1MTg5NSw1MTg5Niw1MTg5Nyw1MTg5OCw1MTg5OSw1MTkwMiw1MTkwMyw1MTkwNSw1MTkwNiw1MTkwNyw1MTkwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTkxMCw1MTkxMSw1MTkxMiw1MTkxMyw1MTkxNCw1MTkxNSw1MTkxOCw1MTkyMCw1MTkyMiw1MTkyNCw1''@;'; put 'put ''MTkyNSw1MTkyNiw1MTkyNyw1MTkzMCw1MTkzMSw1MTkzMiw1MTkzMyw1MTkzNCw1MTkzNSw1MTkzNyw1MTkzOCw1MTkzOSw1MTk0MCw1MTk0MSw1MTk0Miw1MTk0MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTk0NCw1MTk0NSw1MTk0Niw1MTk0Nyw1MTk0OSw1MTk1MCw1MTk1''@;'; put 'put ''MSw1MTk1Miw1MTk1Myw1MTk1NCw1MTk1NSw1MTk1Nyw1MTk1OCw1MTk1OSw1MTk2MCw1MTk2MSw1MTk2Miw1MTk2Myw1MTk2NCw1MTk2NSw1MTk2Niw1MTk2Nyw1MTk2OCw1MTk2OSw1MTk3MCw1MTk3MSw1MTk3Miw1MTk3Myw1MTk3NCw1MTk3NSw1MTk3Nyw1MTk3OCw5NDcyLDk0NzQsOTQ4''@;'; put 'put ''NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUwOCw5NTI0LDk1MzIsOTQ3Myw5NDc1LDk0ODcsOTQ5MSw5NDk5LDk0OTUsOTUwNyw5NTIzLDk1MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5NTI4LDk1MzgsOTQ5MCw5NDg5LDk0OTgsOTQ5''@;'; put 'put ''Nyw5NDk0LDk0OTMsOTQ4Niw5NDg1LDk1MDIsOTUwMyw5NTA1LDk1MDYsOTUxMCw5NTExLDk1MTMsOTUxNCw5NTE3LDk1MTgsOTUyMSw5NTIyLDk1MjUsOTUyNiw5NTI5LDk1MzAsOTUzMyw5NTM0LDk1MzYsOTUzNyw5NTM5LDk1NDAsOTU0MSw5NTQyLDk1NDMsOTU0NCw5NTQ1LDk1NDYsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTc5LDUxOTgwLDUxOTgxLDUxOTgyLDUxOTgzLDUxOTg1LDUx''@;'; put 'put ''OTg2LDUxOTg3LDUxOTg5LDUxOTkwLDUxOTkxLDUxOTkzLDUxOTk0LDUxOTk1LDUxOTk2LDUxOTk3LDUxOTk4LDUxOTk5LDUyMDAyLDUyMDAzLDUyMDA0LDUyMDA1LDUyMDA2LDUyMDA3LDUyMDA4LDUyMDA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDEwLDUyMDExLDUyMDEy''@;'; put 'put ''LDUyMDEzLDUyMDE0LDUyMDE1LDUyMDE2LDUyMDE3LDUyMDE4LDUyMDE5LDUyMDIwLDUyMDIxLDUyMDIyLDUyMDIzLDUyMDI0LDUyMDI1LDUyMDI2LDUyMDI3LDUyMDI4LDUyMDI5LDUyMDMwLDUyMDMxLDUyMDMyLDUyMDM0LDUyMDM1LDUyMDM2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDUyMDM3LDUyMDM4LDUyMDM5LDUyMDQyLDUyMDQzLDUyMDQ1LDUyMDQ2LDUyMDQ3LDUyMDQ5LDUyMDUwLDUyMDUxLDUyMDUyLDUyMDUzLDUyMDU0LDUyMDU1LDUyMDU4LDUyMDU5LDUyMDYwLDUyMDYyLDUyMDYzLDUyMDY0LDUyMDY1LDUyMDY2LDUyMDY3LDUyMDY5LDUyMDcwLDUyMDcx''@;'; put 'put ''LDUyMDcyLDUyMDczLDUyMDc0LDUyMDc1LDUyMDc2LDEzMjA1LDEzMjA2LDEzMjA3LDg0NjcsMTMyMDgsMTMyNTIsMTMyMTksMTMyMjAsMTMyMjEsMTMyMjIsMTMyMDksMTMyMTAsMTMyMTEsMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTUsMTMyMTYsMTMyMTcsMTMyMTgsMTMyNTgsMTMxOTcsMTMx''@;'; put 'put ''OTgsMTMxOTksMTMyNjMsMTMxOTIsMTMxOTMsMTMyNTYsMTMyMjMsMTMyMjQsMTMyMzIsMTMyMzMsMTMyMzQsMTMyMzUsMTMyMzYsMTMyMzcsMTMyMzgsMTMyMzksMTMyNDAsMTMyNDEsMTMxODQsMTMxODUsMTMxODYsMTMxODcsMTMxODgsMTMyNDIsMTMyNDMsMTMyNDQsMTMyNDUsMTMyNDYs''@;'; put 'put ''MTMyNDcsMTMyMDAsMTMyMDEsMTMyMDIsMTMyMDMsMTMyMDQsODQ4NiwxMzI0OCwxMzI0OSwxMzE5NCwxMzE5NSwxMzE5NiwxMzI3MCwxMzI1MywxMzIyOSwxMzIzMCwxMzIzMSwxMzI3NSwxMzIyNSwxMzIyNiwxMzIyNywxMzIyOCwxMzI3NywxMzI2NCwxMzI2NywxMzI1MSwxMzI1NywxMzI3''@;'; put 'put ''NiwxMzI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjA3Nyw1MjA3OCw1MjA3OSw1MjA4MCw1MjA4MSw1MjA4Miw1MjA4Myw1MjA4NCw1MjA4NSw1MjA4Niw1MjA4Nyw1MjA5MCw1MjA5MSw1MjA5''@;'; put 'put ''Miw1MjA5Myw1MjA5NCw1MjA5NSw1MjA5Niw1MjA5Nyw1MjA5OCw1MjA5OSw1MjEwMCw1MjEwMSw1MjEwMiw1MjEwMyw1MjEwNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjEwNSw1MjEwNiw1MjEwNyw1MjEwOCw1MjEwOSw1MjExMCw1MjExMSw1MjExMiw1MjExMyw1MjExNCw1''@;'; put 'put ''MjExNSw1MjExNiw1MjExNyw1MjExOCw1MjExOSw1MjEyMCw1MjEyMSw1MjEyMiw1MjEyMyw1MjEyNSw1MjEyNiw1MjEyNyw1MjEyOCw1MjEyOSw1MjEzMCw1MjEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjEzMiw1MjEzMyw1MjEzNCw1MjEzNSw1MjEzNiw1MjEzNyw1MjEz''@;'; put 'put ''OCw1MjEzOSw1MjE0MCw1MjE0MSw1MjE0Miw1MjE0Myw1MjE0NCw1MjE0NSw1MjE0Niw1MjE0Nyw1MjE0OCw1MjE0OSw1MjE1MCw1MjE1MSw1MjE1Myw1MjE1NCw1MjE1NSw1MjE1Niw1MjE1Nyw1MjE1OCw1MjE1OSw1MjE2MCw1MjE2MSw1MjE2Miw1MjE2Myw1MjE2NCwxOTgsMjA4LDE3MCwy''@;'; put 'put ''OTQsbnVsbCwzMDYsbnVsbCwzMTksMzIxLDIxNiwzMzgsMTg2LDIyMiwzNTgsMzMwLG51bGwsMTI4OTYsMTI4OTcsMTI4OTgsMTI4OTksMTI5MDAsMTI5MDEsMTI5MDIsMTI5MDMsMTI5MDQsMTI5MDUsMTI5MDYsMTI5MDcsMTI5MDgsMTI5MDksMTI5MTAsMTI5MTEsMTI5MTIsMTI5MTMsMTI5''@;'; put 'put ''MTQsMTI5MTUsMTI5MTYsMTI5MTcsMTI5MTgsMTI5MTksMTI5MjAsMTI5MjEsMTI5MjIsMTI5MjMsOTQyNCw5NDI1LDk0MjYsOTQyNyw5NDI4LDk0MjksOTQzMCw5NDMxLDk0MzIsOTQzMyw5NDM0LDk0MzUsOTQzNiw5NDM3LDk0MzgsOTQzOSw5NDQwLDk0NDEsOTQ0Miw5NDQzLDk0NDQsOTQ0''@;'; put 'put ''NSw5NDQ2LDk0NDcsOTQ0OCw5NDQ5LDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMyMiw5MzIzLDkzMjQsOTMyNSw5MzI2LDE4OSw4NTMxLDg1MzIsMTg4LDE5MCw4NTM5LDg1NDAsODU0MSw4NTQyLDUyMTY1LDUyMTY2LDUyMTY3LDUyMTY4LDUy''@;'; put 'put ''MTY5LDUyMTcwLDUyMTcxLDUyMTcyLDUyMTczLDUyMTc0LDUyMTc1LDUyMTc2LDUyMTc3LDUyMTc4LDUyMTc5LDUyMTgxLDUyMTgyLDUyMTgzLDUyMTg0LDUyMTg1LDUyMTg2LDUyMTg3LDUyMTg4LDUyMTg5LDUyMTkwLDUyMTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTky''@;'; put 'put ''LDUyMTkzLDUyMTk0LDUyMTk1LDUyMTk3LDUyMTk4LDUyMjAwLDUyMjAyLDUyMjAzLDUyMjA0LDUyMjA1LDUyMjA2LDUyMjA3LDUyMjA4LDUyMjA5LDUyMjEwLDUyMjExLDUyMjEyLDUyMjEzLDUyMjE0LDUyMjE1LDUyMjE2LDUyMjE3LDUyMjE4LDUyMjE5LDUyMjIwLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDUyMjIxLDUyMjIyLDUyMjIzLDUyMjI0LDUyMjI1LDUyMjI2LDUyMjI3LDUyMjI4LDUyMjI5LDUyMjMwLDUyMjMxLDUyMjMyLDUyMjMzLDUyMjM0LDUyMjM1LDUyMjM4LDUyMjM5LDUyMjQxLDUyMjQyLDUyMjQzLDUyMjQ1LDUyMjQ2LDUyMjQ3LDUyMjQ4LDUyMjQ5''@;'; put 'put ''LDUyMjUwLDUyMjUxLDUyMjU0LDUyMjU1LDUyMjU2LDUyMjU5LDUyMjYwLDIzMCwyNzMsMjQwLDI5NSwzMDUsMzA3LDMxMiwzMjAsMzIyLDI0OCwzMzksMjIzLDI1NCwzNTksMzMxLDMyOSwxMjgwMCwxMjgwMSwxMjgwMiwxMjgwMywxMjgwNCwxMjgwNSwxMjgwNiwxMjgwNywxMjgwOCwxMjgw''@;'; put 'put ''OSwxMjgxMCwxMjgxMSwxMjgxMiwxMjgxMywxMjgxNCwxMjgxNSwxMjgxNiwxMjgxNywxMjgxOCwxMjgxOSwxMjgyMCwxMjgyMSwxMjgyMiwxMjgyMywxMjgyNCwxMjgyNSwxMjgyNiwxMjgyNyw5MzcyLDkzNzMsOTM3NCw5Mzc1LDkzNzYsOTM3Nyw5Mzc4LDkzNzksOTM4MCw5MzgxLDkzODIs''@;'; put 'put ''OTM4Myw5Mzg0LDkzODUsOTM4Niw5Mzg3LDkzODgsOTM4OSw5MzkwLDkzOTEsOTM5Miw5MzkzLDkzOTQsOTM5NSw5Mzk2LDkzOTcsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw5MzQyLDkzNDMsOTM0NCw5MzQ1LDkzNDYsMTg1LDE3OCwxNzksODMw''@;'; put 'put ''OCw4MzE5LDgzMjEsODMyMiw4MzIzLDgzMjQsNTIyNjEsNTIyNjIsNTIyNjYsNTIyNjcsNTIyNjksNTIyNzEsNTIyNzMsNTIyNzQsNTIyNzUsNTIyNzYsNTIyNzcsNTIyNzgsNTIyNzksNTIyODIsNTIyODcsNTIyODgsNTIyODksNTIyOTAsNTIyOTEsNTIyOTQsNTIyOTUsNTIyOTcsNTIyOTgs''@;'; put 'put ''NTIyOTksNTIzMDEsNTIzMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzMDMsNTIzMDQsNTIzMDUsNTIzMDYsNTIzMDcsNTIzMTAsNTIzMTQsNTIzMTUsNTIzMTYsNTIzMTcsNTIzMTgsNTIzMTksNTIzMjEsNTIzMjIsNTIzMjMsNTIzMjUsNTIzMjcsNTIzMjksNTIzMzAsNTIz''@;'; put 'put ''MzEsNTIzMzIsNTIzMzMsNTIzMzQsNTIzMzUsNTIzMzcsNTIzMzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzMzksNTIzNDAsNTIzNDIsNTIzNDMsNTIzNDQsNTIzNDUsNTIzNDYsNTIzNDcsNTIzNDgsNTIzNDksNTIzNTAsNTIzNTEsNTIzNTIsNTIzNTMsNTIzNTQsNTIzNTUs''@;'; put 'put ''NTIzNTYsNTIzNTcsNTIzNTgsNTIzNTksNTIzNjAsNTIzNjEsNTIzNjIsNTIzNjMsNTIzNjQsNTIzNjUsNTIzNjYsNTIzNjcsNTIzNjgsNTIzNjksNTIzNzAsNTIzNzEsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIz''@;'; put 'put ''NjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEs''@;'; put 'put ''MTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0''@;'; put 'put ''MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzcyLDUyMzcz''@;'; put 'put ''LDUyMzc0LDUyMzc1LDUyMzc4LDUyMzc5LDUyMzgxLDUyMzgyLDUyMzgzLDUyMzg1LDUyMzg2LDUyMzg3LDUyMzg4LDUyMzg5LDUyMzkwLDUyMzkxLDUyMzk0LDUyMzk4LDUyMzk5LDUyNDAwLDUyNDAxLDUyNDAyLDUyNDAzLDUyNDA2LDUyNDA3LDUyNDA5LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDUyNDEwLDUyNDExLDUyNDEzLDUyNDE0LDUyNDE1LDUyNDE2LDUyNDE3LDUyNDE4LDUyNDE5LDUyNDIyLDUyNDI0LDUyNDI2LDUyNDI3LDUyNDI4LDUyNDI5LDUyNDMwLDUyNDMxLDUyNDMzLDUyNDM0LDUyNDM1LDUyNDM3LDUyNDM4LDUyNDM5LDUyNDQwLDUyNDQxLDUyNDQy''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDQzLDUyNDQ0LDUyNDQ1LDUyNDQ2LDUyNDQ3LDUyNDQ4LDUyNDQ5LDUyNDUwLDUyNDUxLDUyNDUzLDUyNDU0LDUyNDU1LDUyNDU2LDUyNDU3LDUyNDU4LDUyNDU5LDUyNDYxLDUyNDYyLDUyNDYzLDUyNDY1LDUyNDY2LDUyNDY3LDUy''@;'; put 'put ''NDY4LDUyNDY5LDUyNDcwLDUyNDcxLDUyNDcyLDUyNDczLDUyNDc0LDUyNDc1LDUyNDc2LDUyNDc3LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2''@;'; put 'put ''LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEy''@;'; put 'put ''NDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIx''@;'; put 'put ''LDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQ3OCw1MjQ3OSw1MjQ4MCw1MjQ4Miw1MjQ4Myw1MjQ4NCw1MjQ4NSw1MjQ4''@;'; put 'put ''Niw1MjQ4Nyw1MjQ5MCw1MjQ5MSw1MjQ5Myw1MjQ5NCw1MjQ5NSw1MjQ5Nyw1MjQ5OCw1MjQ5OSw1MjUwMCw1MjUwMSw1MjUwMiw1MjUwMyw1MjUwNiw1MjUwOCw1MjUxMCw1MjUxMSw1MjUxMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjUxMyw1MjUxNCw1MjUxNSw1MjUxNyw1''@;'; put 'put ''MjUxOCw1MjUxOSw1MjUyMSw1MjUyMiw1MjUyMyw1MjUyNSw1MjUyNiw1MjUyNyw1MjUyOCw1MjUyOSw1MjUzMCw1MjUzMSw1MjUzMiw1MjUzMyw1MjUzNCw1MjUzNSw1MjUzNiw1MjUzOCw1MjUzOSw1MjU0MCw1MjU0MSw1MjU0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjU0''@;'; put 'put ''Myw1MjU0NCw1MjU0NSw1MjU0Niw1MjU0Nyw1MjU0OCw1MjU0OSw1MjU1MCw1MjU1MSw1MjU1Miw1MjU1Myw1MjU1NCw1MjU1NSw1MjU1Niw1MjU1Nyw1MjU1OCw1MjU1OSw1MjU2MCw1MjU2MSw1MjU2Miw1MjU2Myw1MjU2NCw1MjU2NSw1MjU2Niw1MjU2Nyw1MjU2OCw1MjU2OSw1MjU3MCw1''@;'; put 'put ''MjU3MSw1MjU3Myw1MjU3NCw1MjU3NSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEw''@;'; put 'put ''NjcsMTA2OCwxMDY5LDEwNzAsMTA3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEw''@;'; put 'put ''ODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUy''@;'; put 'put ''NTc3LDUyNTc4LDUyNTc5LDUyNTgxLDUyNTgyLDUyNTgzLDUyNTg0LDUyNTg1LDUyNTg2LDUyNTg3LDUyNTkwLDUyNTkyLDUyNTk0LDUyNTk1LDUyNTk2LDUyNTk3LDUyNTk4LDUyNTk5LDUyNjAxLDUyNjAyLDUyNjAzLDUyNjA0LDUyNjA1LDUyNjA2LDUyNjA3LDUyNjA4LG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDUyNjA5LDUyNjEwLDUyNjExLDUyNjEyLDUyNjEzLDUyNjE0LDUyNjE1LDUyNjE3LDUyNjE4LDUyNjE5LDUyNjIwLDUyNjIxLDUyNjIyLDUyNjIzLDUyNjI0LDUyNjI1LDUyNjI2LDUyNjI3LDUyNjMwLDUyNjMxLDUyNjMzLDUyNjM0LDUyNjM1LDUyNjM3LDUy''@;'; put 'put ''NjM4LDUyNjM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjQwLDUyNjQxLDUyNjQyLDUyNjQzLDUyNjQ2LDUyNjQ4LDUyNjUwLDUyNjUxLDUyNjUyLDUyNjUzLDUyNjU0LDUyNjU1LDUyNjU3LDUyNjU4LDUyNjU5LDUyNjYwLDUyNjYxLDUyNjYyLDUyNjYzLDUyNjY0LDUyNjY1''@;'; put 'put ''LDUyNjY2LDUyNjY3LDUyNjY4LDUyNjY5LDUyNjcwLDUyNjcxLDUyNjcyLDUyNjczLDUyNjc0LDUyNjc1LDUyNjc3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2NzgsNTI2NzksNTI2ODAsNTI2ODEsNTI2ODIsNTI2ODMsNTI2ODUsNTI2ODYsNTI2ODcsNTI2ODksNTI2OTAsNTI2OTEsNTI2OTIsNTI2OTMsNTI2OTQsNTI2OTUsNTI2OTYsNTI2OTcsNTI2OTgsNTI2OTksNTI3''@;'; put 'put ''MDAsNTI3MDEsNTI3MDIsNTI3MDMsNTI3MDQsNTI3MDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3MDYsNTI3MDcsNTI3MDgsNTI3MDksNTI3MTAsNTI3MTEsNTI3MTMsNTI3MTQsNTI3MTUsNTI3MTcsNTI3MTgsNTI3MTksNTI3MjEsNTI3MjIsNTI3MjMsNTI3MjQsNTI3MjUs''@;'; put 'put ''NTI3MjYsNTI3MjcsNTI3MzAsNTI3MzIsNTI3MzQsNTI3MzUsNTI3MzYsNTI3MzcsNTI3MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3MzksNTI3NDEsNTI3NDIsNTI3NDMsNTI3NDUsNTI3NDYsNTI3NDcsNTI3NDksNTI3NTAsNTI3NTEsNTI3NTIsNTI3NTMsNTI3NTQsNTI3''@;'; put 'put ''NTUsNTI3NTcsNTI3NTgsNTI3NTksNTI3NjAsNTI3NjIsNTI3NjMsNTI3NjQsNTI3NjUsNTI3NjYsNTI3NjcsNTI3NzAsNTI3NzEsNTI3NzMsNTI3NzQsNTI3NzUsNTI3NzcsNTI3NzgsNTI3NzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjc4MCw1Mjc4MSw1Mjc4Miw1Mjc4Myw1Mjc4Niw1Mjc4OCw1Mjc5MCw1Mjc5MSw1Mjc5Miw1Mjc5Myw1Mjc5NCw1Mjc5NSw1Mjc5Niw1''@;'; put 'put ''Mjc5Nyw1Mjc5OCw1Mjc5OSw1MjgwMCw1MjgwMSw1MjgwMiw1MjgwMyw1MjgwNCw1MjgwNSw1MjgwNiw1MjgwNyw1MjgwOCw1MjgwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjgxMCw1MjgxMSw1MjgxMiw1MjgxMyw1MjgxNCw1MjgxNSw1MjgxNiw1MjgxNyw1MjgxOCw1Mjgx''@;'; put 'put ''OSw1MjgyMCw1MjgyMSw1MjgyMiw1MjgyMyw1MjgyNiw1MjgyNyw1MjgyOSw1MjgzMCw1MjgzNCw1MjgzNSw1MjgzNiw1MjgzNyw1MjgzOCw1MjgzOSw1Mjg0Miw1Mjg0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjg0Niw1Mjg0Nyw1Mjg0OCw1Mjg0OSw1Mjg1MCw1Mjg1MSw1''@;'; put 'put ''Mjg1NCw1Mjg1NSw1Mjg1Nyw1Mjg1OCw1Mjg1OSw1Mjg2MSw1Mjg2Miw1Mjg2Myw1Mjg2NCw1Mjg2NSw1Mjg2Niw1Mjg2Nyw1Mjg3MCw1Mjg3Miw1Mjg3NCw1Mjg3NSw1Mjg3Niw1Mjg3Nyw1Mjg3OCw1Mjg3OSw1Mjg4Miw1Mjg4Myw1Mjg4NSw1Mjg4Niw1Mjg4Nyw1Mjg4OSxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODkwLDUyODkxLDUyODkyLDUyODkzLDUyODk0LDUyODk1''@;'; put 'put ''LDUyODk4LDUyOTAyLDUyOTAzLDUyOTA0LDUyOTA1LDUyOTA2LDUyOTA3LDUyOTEwLDUyOTExLDUyOTEyLDUyOTEzLDUyOTE0LDUyOTE1LDUyOTE2LDUyOTE3LDUyOTE4LDUyOTE5LDUyOTIwLDUyOTIxLDUyOTIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyOTIzLDUyOTI0LDUy''@;'; put 'put ''OTI1LDUyOTI2LDUyOTI3LDUyOTI4LDUyOTMwLDUyOTMxLDUyOTMyLDUyOTMzLDUyOTM0LDUyOTM1LDUyOTM2LDUyOTM3LDUyOTM4LDUyOTM5LDUyOTQwLDUyOTQxLDUyOTQyLDUyOTQzLDUyOTQ0LDUyOTQ1LDUyOTQ2LDUyOTQ3LDUyOTQ4LDUyOTQ5LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDUyOTUwLDUyOTUxLDUyOTUyLDUyOTUzLDUyOTU0LDUyOTU1LDUyOTU2LDUyOTU3LDUyOTU4LDUyOTU5LDUyOTYwLDUyOTYxLDUyOTYyLDUyOTYzLDUyOTY2LDUyOTY3LDUyOTY5LDUyOTcwLDUyOTczLDUyOTc0LDUyOTc1LDUyOTc2LDUyOTc3LDUyOTc4LDUyOTc5LDUyOTgyLDUy''@;'; put 'put ''OTg2LDUyOTg3LDUyOTg4LDUyOTg5LDUyOTkwLDUyOTkxLDQ0MDMyLDQ0MDMzLDQ0MDM2LDQ0MDM5LDQ0MDQwLDQ0MDQxLDQ0MDQyLDQ0MDQ4LDQ0MDQ5LDQ0MDUwLDQ0MDUxLDQ0MDUyLDQ0MDUzLDQ0MDU0LDQ0MDU1LDQ0MDU3LDQ0MDU4LDQ0MDU5LDQ0MDYwLDQ0MDYxLDQ0MDY0LDQ0MDY4''@;'; put 'put ''LDQ0MDc2LDQ0MDc3LDQ0MDc5LDQ0MDgwLDQ0MDgxLDQ0MDg4LDQ0MDg5LDQ0MDkyLDQ0MDk2LDQ0MTA3LDQ0MTA5LDQ0MTE2LDQ0MTIwLDQ0MTI0LDQ0MTQ0LDQ0MTQ1LDQ0MTQ4LDQ0MTUxLDQ0MTUyLDQ0MTU0LDQ0MTYwLDQ0MTYxLDQ0MTYzLDQ0MTY0LDQ0MTY1LDQ0MTY2LDQ0MTY5LDQ0''@;'; put 'put ''MTcwLDQ0MTcxLDQ0MTcyLDQ0MTc2LDQ0MTgwLDQ0MTg4LDQ0MTg5LDQ0MTkxLDQ0MTkyLDQ0MTkzLDQ0MjAwLDQ0MjAxLDQ0MjAyLDQ0MjA0LDQ0MjA3LDQ0MjA4LDQ0MjE2LDQ0MjE3LDQ0MjE5LDQ0MjIwLDQ0MjIxLDQ0MjI1LDQ0MjI4LDQ0MjMyLDQ0MjM2LDQ0MjQ1LDQ0MjQ3LDQ0MjU2''@;'; put 'put ''LDQ0MjU3LDQ0MjYwLDQ0MjYzLDQ0MjY0LDQ0MjY2LDQ0MjY4LDQ0MjcxLDQ0MjcyLDQ0MjczLDQ0Mjc1LDQ0Mjc3LDQ0Mjc4LDQ0Mjg0LDQ0Mjg1LDQ0Mjg4LDQ0MjkyLDQ0Mjk0LDUyOTk0LDUyOTk1LDUyOTk3LDUyOTk4LDUyOTk5LDUzMDAxLDUzMDAyLDUzMDAzLDUzMDA0LDUzMDA1LDUz''@;'; put 'put ''MDA2LDUzMDA3LDUzMDEwLDUzMDEyLDUzMDE0LDUzMDE1LDUzMDE2LDUzMDE3LDUzMDE4LDUzMDE5LDUzMDIxLDUzMDIyLDUzMDIzLDUzMDI1LDUzMDI2LDUzMDI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMDI5LDUzMDMwLDUzMDMxLDUzMDMyLDUzMDMzLDUzMDM0LDUzMDM1''@;'; put 'put ''LDUzMDM4LDUzMDQyLDUzMDQzLDUzMDQ0LDUzMDQ1LDUzMDQ2LDUzMDQ3LDUzMDQ5LDUzMDUwLDUzMDUxLDUzMDUyLDUzMDUzLDUzMDU0LDUzMDU1LDUzMDU2LDUzMDU3LDUzMDU4LDUzMDU5LDUzMDYwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMDYxLDUzMDYyLDUzMDYzLDUz''@;'; put 'put ''MDY0LDUzMDY1LDUzMDY2LDUzMDY3LDUzMDY4LDUzMDY5LDUzMDcwLDUzMDcxLDUzMDcyLDUzMDczLDUzMDc0LDUzMDc1LDUzMDc4LDUzMDc5LDUzMDgxLDUzMDgyLDUzMDgzLDUzMDg1LDUzMDg2LDUzMDg3LDUzMDg4LDUzMDg5LDUzMDkwLDUzMDkxLDUzMDk0LDUzMDk2LDUzMDk4LDUzMDk5''@;'; put 'put ''LDUzMTAwLDQ0MzAwLDQ0MzAxLDQ0MzAzLDQ0MzA1LDQ0MzEyLDQ0MzE2LDQ0MzIwLDQ0MzI5LDQ0MzMyLDQ0MzMzLDQ0MzQwLDQ0MzQxLDQ0MzQ0LDQ0MzQ4LDQ0MzU2LDQ0MzU3LDQ0MzU5LDQ0MzYxLDQ0MzY4LDQ0MzcyLDQ0Mzc2LDQ0Mzg1LDQ0Mzg3LDQ0Mzk2LDQ0Mzk3LDQ0NDAwLDQ0''@;'; put 'put ''NDAzLDQ0NDA0LDQ0NDA1LDQ0NDA2LDQ0NDExLDQ0NDEyLDQ0NDEzLDQ0NDE1LDQ0NDE3LDQ0NDE4LDQ0NDI0LDQ0NDI1LDQ0NDI4LDQ0NDMyLDQ0NDQ0LDQ0NDQ1LDQ0NDUyLDQ0NDcxLDQ0NDgwLDQ0NDgxLDQ0NDg0LDQ0NDg4LDQ0NDk2LDQ0NDk3LDQ0NDk5LDQ0NTA4LDQ0NTEyLDQ0NTE2''@;'; put 'put ''LDQ0NTM2LDQ0NTM3LDQ0NTQwLDQ0NTQzLDQ0NTQ0LDQ0NTQ1LDQ0NTUyLDQ0NTUzLDQ0NTU1LDQ0NTU3LDQ0NTY0LDQ0NTkyLDQ0NTkzLDQ0NTk2LDQ0NTk5LDQ0NjAwLDQ0NjAyLDQ0NjA4LDQ0NjA5LDQ0NjExLDQ0NjEzLDQ0NjE0LDQ0NjE4LDQ0NjIwLDQ0NjIxLDQ0NjIyLDQ0NjI0LDQ0''@;'; put 'put ''NjI4LDQ0NjMwLDQ0NjM2LDQ0NjM3LDQ0NjM5LDQ0NjQwLDQ0NjQxLDQ0NjQ1LDQ0NjQ4LDQ0NjQ5LDQ0NjUyLDQ0NjU2LDQ0NjY0LDUzMTAxLDUzMTAyLDUzMTAzLDUzMTA2LDUzMTA3LDUzMTA5LDUzMTEwLDUzMTExLDUzMTEzLDUzMTE0LDUzMTE1LDUzMTE2LDUzMTE3LDUzMTE4LDUzMTE5''@;'; put 'put ''LDUzMTIxLDUzMTIyLDUzMTIzLDUzMTI0LDUzMTI2LDUzMTI3LDUzMTI4LDUzMTI5LDUzMTMwLDUzMTMxLDUzMTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMTM0LDUzMTM1LDUzMTM2LDUzMTM3LDUzMTM4LDUzMTM5LDUzMTQwLDUzMTQxLDUzMTQyLDUzMTQzLDUzMTQ0LDUz''@;'; put 'put ''MTQ1LDUzMTQ2LDUzMTQ3LDUzMTQ4LDUzMTQ5LDUzMTUwLDUzMTUxLDUzMTUyLDUzMTU0LDUzMTU1LDUzMTU2LDUzMTU3LDUzMTU4LDUzMTU5LDUzMTYxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMTYyLDUzMTYzLDUzMTY0LDUzMTY1LDUzMTY2LDUzMTY3LDUzMTY5LDUzMTcw''@;'; put 'put ''LDUzMTcxLDUzMTcyLDUzMTczLDUzMTc0LDUzMTc1LDUzMTc2LDUzMTc3LDUzMTc4LDUzMTc5LDUzMTgwLDUzMTgxLDUzMTgyLDUzMTgzLDUzMTg0LDUzMTg1LDUzMTg2LDUzMTg3LDUzMTg5LDUzMTkwLDUzMTkxLDUzMTkyLDUzMTkzLDUzMTk0LDUzMTk1LDQ0NjY1LDQ0NjY3LDQ0NjY4LDQ0''@;'; put 'put ''NjY5LDQ0Njc2LDQ0Njc3LDQ0Njg0LDQ0NzMyLDQ0NzMzLDQ0NzM0LDQ0NzM2LDQ0NzQwLDQ0NzQ4LDQ0NzQ5LDQ0NzUxLDQ0NzUyLDQ0NzUzLDQ0NzYwLDQ0NzYxLDQ0NzY0LDQ0Nzc2LDQ0Nzc5LDQ0NzgxLDQ0Nzg4LDQ0NzkyLDQ0Nzk2LDQ0ODA3LDQ0ODA4LDQ0ODEzLDQ0ODE2LDQ0ODQ0''@;'; put 'put ''LDQ0ODQ1LDQ0ODQ4LDQ0ODUwLDQ0ODUyLDQ0ODYwLDQ0ODYxLDQ0ODYzLDQ0ODY1LDQ0ODY2LDQ0ODY3LDQ0ODcyLDQ0ODczLDQ0ODgwLDQ0ODkyLDQ0ODkzLDQ0OTAwLDQ0OTAxLDQ0OTIxLDQ0OTI4LDQ0OTMyLDQ0OTM2LDQ0OTQ0LDQ0OTQ1LDQ0OTQ5LDQ0OTU2LDQ0OTg0LDQ0OTg1LDQ0''@;'; put 'put ''OTg4LDQ0OTkyLDQ0OTk5LDQ1ZTMsNDUwMDEsNDUwMDMsNDUwMDUsNDUwMDYsNDUwMTIsNDUwMjAsNDUwMzIsNDUwMzMsNDUwNDAsNDUwNDEsNDUwNDQsNDUwNDgsNDUwNTYsNDUwNTcsNDUwNjAsNDUwNjgsNDUwNzIsNDUwNzYsNDUwODQsNDUwODUsNDUwOTYsNDUxMjQsNDUxMjUsNDUxMjgs''@;'; put 'put ''NDUxMzAsNDUxMzIsNDUxMzQsNDUxMzksNDUxNDAsNDUxNDEsNDUxNDMsNDUxNDUsNTMxOTYsNTMxOTcsNTMxOTgsNTMxOTksNTMyMDAsNTMyMDEsNTMyMDIsNTMyMDMsNTMyMDQsNTMyMDUsNTMyMDYsNTMyMDcsNTMyMDgsNTMyMDksNTMyMTAsNTMyMTEsNTMyMTIsNTMyMTMsNTMyMTQsNTMy''@;'; put 'put ''MTUsNTMyMTgsNTMyMTksNTMyMjEsNTMyMjIsNTMyMjMsNTMyMjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyMjYsNTMyMjcsNTMyMjgsNTMyMjksNTMyMzAsNTMyMzEsNTMyMzQsNTMyMzYsNTMyMzgsNTMyMzksNTMyNDAsNTMyNDEsNTMyNDIsNTMyNDMsNTMyNDUsNTMyNDYs''@;'; put 'put ''NTMyNDcsNTMyNDksNTMyNTAsNTMyNTEsNTMyNTMsNTMyNTQsNTMyNTUsNTMyNTYsNTMyNTcsNTMyNTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyNTksNTMyNjAsNTMyNjEsNTMyNjIsNTMyNjMsNTMyNjQsNTMyNjYsNTMyNjcsNTMyNjgsNTMyNjksNTMyNzAsNTMyNzEsNTMy''@;'; put 'put ''NzMsNTMyNzQsNTMyNzUsNTMyNzYsNTMyNzcsNTMyNzgsNTMyNzksNTMyODAsNTMyODEsNTMyODIsNTMyODMsNTMyODQsNTMyODUsNTMyODYsNTMyODcsNTMyODgsNTMyODksNTMyOTAsNTMyOTEsNTMyOTIsNDUxNDksNDUxODAsNDUxODEsNDUxODQsNDUxODgsNDUxOTYsNDUxOTcsNDUxOTks''@;'; put 'put ''NDUyMDEsNDUyMDgsNDUyMDksNDUyMTAsNDUyMTIsNDUyMTUsNDUyMTYsNDUyMTcsNDUyMTgsNDUyMjQsNDUyMjUsNDUyMjcsNDUyMjgsNDUyMjksNDUyMzAsNDUyMzEsNDUyMzMsNDUyMzUsNDUyMzYsNDUyMzcsNDUyNDAsNDUyNDQsNDUyNTIsNDUyNTMsNDUyNTUsNDUyNTYsNDUyNTcsNDUy''@;'; put 'put ''NjQsNDUyNjUsNDUyNjgsNDUyNzIsNDUyODAsNDUyODUsNDUzMjAsNDUzMjEsNDUzMjMsNDUzMjQsNDUzMjgsNDUzMzAsNDUzMzEsNDUzMzYsNDUzMzcsNDUzMzksNDUzNDAsNDUzNDEsNDUzNDcsNDUzNDgsNDUzNDksNDUzNTIsNDUzNTYsNDUzNjQsNDUzNjUsNDUzNjcsNDUzNjgsNDUzNjks''@;'; put 'put ''NDUzNzYsNDUzNzcsNDUzODAsNDUzODQsNDUzOTIsNDUzOTMsNDUzOTYsNDUzOTcsNDU0MDAsNDU0MDQsNDU0MDgsNDU0MzIsNDU0MzMsNDU0MzYsNDU0NDAsNDU0NDIsNDU0NDgsNDU0NDksNDU0NTEsNDU0NTMsNDU0NTgsNDU0NTksNDU0NjAsNDU0NjQsNDU0NjgsNDU0ODAsNDU1MTYsNDU1''@;'; put 'put ''MjAsNDU1MjQsNDU1MzIsNDU1MzMsNTMyOTQsNTMyOTUsNTMyOTYsNTMyOTcsNTMyOTgsNTMyOTksNTMzMDIsNTMzMDMsNTMzMDUsNTMzMDYsNTMzMDcsNTMzMDksNTMzMTAsNTMzMTEsNTMzMTIsNTMzMTMsNTMzMTQsNTMzMTUsNTMzMTgsNTMzMjAsNTMzMjIsNTMzMjMsNTMzMjQsNTMzMjUs''@;'; put 'put ''NTMzMjYsNTMzMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzMjksNTMzMzAsNTMzMzEsNTMzMzMsNTMzMzQsNTMzMzUsNTMzMzcsNTMzMzgsNTMzMzksNTMzNDAsNTMzNDEsNTMzNDIsNTMzNDMsNTMzNDUsNTMzNDYsNTMzNDcsNTMzNDgsNTMzNDksNTMzNTAsNTMzNTEsNTMz''@;'; put 'put ''NTIsNTMzNTMsNTMzNTQsNTMzNTUsNTMzNTgsNTMzNTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzNjEsNTMzNjIsNTMzNjMsNTMzNjUsNTMzNjYsNTMzNjcsNTMzNjgsNTMzNjksNTMzNzAsNTMzNzEsNTMzNzQsNTMzNzUsNTMzNzYsNTMzNzgsNTMzNzksNTMzODAsNTMzODEs''@;'; put 'put ''NTMzODIsNTMzODMsNTMzODQsNTMzODUsNTMzODYsNTMzODcsNTMzODgsNTMzODksNTMzOTAsNTMzOTEsNTMzOTIsNTMzOTMsNTMzOTQsNTMzOTUsNTMzOTYsNDU1MzUsNDU1NDQsNDU1NDUsNDU1NDgsNDU1NTIsNDU1NjEsNDU1NjMsNDU1NjUsNDU1NzIsNDU1NzMsNDU1NzYsNDU1NzksNDU1''@;'; put 'put ''ODAsNDU1ODgsNDU1ODksNDU1OTEsNDU1OTMsNDU2MDAsNDU2MjAsNDU2MjgsNDU2NTYsNDU2NjAsNDU2NjQsNDU2NzIsNDU2NzMsNDU2ODQsNDU2ODUsNDU2OTIsNDU3MDAsNDU3MDEsNDU3MDUsNDU3MTIsNDU3MTMsNDU3MTYsNDU3MjAsNDU3MjEsNDU3MjIsNDU3MjgsNDU3MjksNDU3MzEs''@;'; put 'put ''NDU3MzMsNDU3MzQsNDU3MzgsNDU3NDAsNDU3NDQsNDU3NDgsNDU3NjgsNDU3NjksNDU3NzIsNDU3NzYsNDU3NzgsNDU3ODQsNDU3ODUsNDU3ODcsNDU3ODksNDU3OTQsNDU3OTYsNDU3OTcsNDU3OTgsNDU4MDAsNDU4MDMsNDU4MDQsNDU4MDUsNDU4MDYsNDU4MDcsNDU4MTEsNDU4MTIsNDU4''@;'; put 'put ''MTMsNDU4MTUsNDU4MTYsNDU4MTcsNDU4MTgsNDU4MTksNDU4MjMsNDU4MjQsNDU4MjUsNDU4MjgsNDU4MzIsNDU4NDAsNDU4NDEsNDU4NDMsNDU4NDQsNDU4NDUsNDU4NTIsNDU5MDgsNDU5MDksNDU5MTAsNDU5MTIsNDU5MTUsNDU5MTYsNDU5MTgsNDU5MTksNDU5MjQsNDU5MjUsNTMzOTcs''@;'; put 'put ''NTMzOTgsNTMzOTksNTM0MDAsNTM0MDEsNTM0MDIsNTM0MDMsNTM0MDQsNTM0MDUsNTM0MDYsNTM0MDcsNTM0MDgsNTM0MDksNTM0MTAsNTM0MTEsNTM0MTQsNTM0MTUsNTM0MTcsNTM0MTgsNTM0MTksNTM0MjEsNTM0MjIsNTM0MjMsNTM0MjQsNTM0MjUsNTM0MjYsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNTM0MjcsNTM0MzAsNTM0MzIsNTM0MzQsNTM0MzUsNTM0MzYsNTM0MzcsNTM0MzgsNTM0MzksNTM0NDIsNTM0NDMsNTM0NDUsNTM0NDYsNTM0NDcsNTM0NTAsNTM0NTEsNTM0NTIsNTM0NTMsNTM0NTQsNTM0NTUsNTM0NTgsNTM0NjIsNTM0NjMsNTM0NjQsNTM0NjUs''@;'; put 'put ''NTM0NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0NjcsNTM0NzAsNTM0NzEsNTM0NzMsNTM0NzQsNTM0NzUsNTM0NzcsNTM0NzgsNTM0NzksNTM0ODAsNTM0ODEsNTM0ODIsNTM0ODMsNTM0ODYsNTM0OTAsNTM0OTEsNTM0OTIsNTM0OTMsNTM0OTQsNTM0OTUsNTM0OTcsNTM0''@;'; put 'put ''OTgsNTM0OTksNTM1MDAsNTM1MDEsNTM1MDIsNTM1MDMsNTM1MDQsNTM1MDUsNTM1MDYsNTM1MDcsNTM1MDgsNDU5MjcsNDU5MjksNDU5MzEsNDU5MzQsNDU5MzYsNDU5MzcsNDU5NDAsNDU5NDQsNDU5NTIsNDU5NTMsNDU5NTUsNDU5NTYsNDU5NTcsNDU5NjQsNDU5NjgsNDU5NzIsNDU5ODQs''@;'; put 'put ''NDU5ODUsNDU5OTIsNDU5OTYsNDYwMjAsNDYwMjEsNDYwMjQsNDYwMjcsNDYwMjgsNDYwMzAsNDYwMzIsNDYwMzYsNDYwMzcsNDYwMzksNDYwNDEsNDYwNDMsNDYwNDUsNDYwNDgsNDYwNTIsNDYwNTYsNDYwNzYsNDYwOTYsNDYxMDQsNDYxMDgsNDYxMTIsNDYxMjAsNDYxMjEsNDYxMjMsNDYx''@;'; put 'put ''MzIsNDYxNjAsNDYxNjEsNDYxNjQsNDYxNjgsNDYxNzYsNDYxNzcsNDYxNzksNDYxODEsNDYxODgsNDYyMDgsNDYyMTYsNDYyMzcsNDYyNDQsNDYyNDgsNDYyNTIsNDYyNjEsNDYyNjMsNDYyNjUsNDYyNzIsNDYyNzYsNDYyODAsNDYyODgsNDYyOTMsNDYzMDAsNDYzMDEsNDYzMDQsNDYzMDcs''@;'; put 'put ''NDYzMDgsNDYzMTAsNDYzMTYsNDYzMTcsNDYzMTksNDYzMjEsNDYzMjgsNDYzNTYsNDYzNTcsNDYzNjAsNDYzNjMsNDYzNjQsNDYzNzIsNDYzNzMsNDYzNzUsNDYzNzYsNDYzNzcsNDYzNzgsNDYzODQsNDYzODUsNDYzODgsNDYzOTIsNTM1MDksNTM1MTAsNTM1MTEsNTM1MTIsNTM1MTMsNTM1''@;'; put 'put ''MTQsNTM1MTUsNTM1MTYsNTM1MTgsNTM1MTksNTM1MjAsNTM1MjEsNTM1MjIsNTM1MjMsNTM1MjQsNTM1MjUsNTM1MjYsNTM1MjcsNTM1MjgsNTM1MjksNTM1MzAsNTM1MzEsNTM1MzIsNTM1MzMsNTM1MzQsNTM1MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1MzYsNTM1Mzcs''@;'; put 'put ''NTM1MzgsNTM1MzksNTM1NDAsNTM1NDEsNTM1NDIsNTM1NDMsNTM1NDQsNTM1NDUsNTM1NDYsNTM1NDcsNTM1NDgsNTM1NDksNTM1NTAsNTM1NTEsNTM1NTQsNTM1NTUsNTM1NTcsNTM1NTgsNTM1NTksNTM1NjEsNTM1NjMsNTM1NjQsNTM1NjUsNTM1NjYsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNTM1NjcsNTM1NzAsNTM1NzQsNTM1NzUsNTM1NzYsNTM1NzcsNTM1NzgsNTM1NzksNTM1ODIsNTM1ODMsNTM1ODUsNTM1ODYsNTM1ODcsNTM1ODksNTM1OTAsNTM1OTEsNTM1OTIsNTM1OTMsNTM1OTQsNTM1OTUsNTM1OTgsNTM2MDAsNTM2MDIsNTM2MDMsNTM2MDQsNTM2MDUs''@;'; put 'put ''NTM2MDYsNTM2MDcsNTM2MDksNTM2MTAsNTM2MTEsNTM2MTMsNDY0MDAsNDY0MDEsNDY0MDMsNDY0MDQsNDY0MDUsNDY0MTEsNDY0MTIsNDY0MTMsNDY0MTYsNDY0MjAsNDY0MjgsNDY0MjksNDY0MzEsNDY0MzIsNDY0MzMsNDY0OTYsNDY0OTcsNDY1MDAsNDY1MDQsNDY1MDYsNDY1MDcsNDY1''@;'; put 'put ''MTIsNDY1MTMsNDY1MTUsNDY1MTYsNDY1MTcsNDY1MjMsNDY1MjQsNDY1MjUsNDY1MjgsNDY1MzIsNDY1NDAsNDY1NDEsNDY1NDMsNDY1NDQsNDY1NDUsNDY1NTIsNDY1NzIsNDY2MDgsNDY2MDksNDY2MTIsNDY2MTYsNDY2MjksNDY2MzYsNDY2NDQsNDY2NjQsNDY2OTIsNDY2OTYsNDY3NDgs''@;'; put 'put ''NDY3NDksNDY3NTIsNDY3NTYsNDY3NjMsNDY3NjQsNDY3NjksNDY4MDQsNDY4MzIsNDY4MzYsNDY4NDAsNDY4NDgsNDY4NDksNDY4NTMsNDY4ODgsNDY4ODksNDY4OTIsNDY4OTUsNDY4OTYsNDY5MDQsNDY5MDUsNDY5MDcsNDY5MTYsNDY5MjAsNDY5MjQsNDY5MzIsNDY5MzMsNDY5NDQsNDY5''@;'; put 'put ''NDgsNDY5NTIsNDY5NjAsNDY5NjEsNDY5NjMsNDY5NjUsNDY5NzIsNDY5NzMsNDY5NzYsNDY5ODAsNDY5ODgsNDY5ODksNDY5OTEsNDY5OTIsNDY5OTMsNDY5OTQsNDY5OTgsNDY5OTksNTM2MTQsNTM2MTUsNTM2MTYsNTM2MTcsNTM2MTgsNTM2MTksNTM2MjAsNTM2MjEsNTM2MjIsNTM2MjMs''@;'; put 'put ''NTM2MjQsNTM2MjUsNTM2MjYsNTM2MjcsNTM2MjksNTM2MzAsNTM2MzEsNTM2MzIsNTM2MzMsNTM2MzQsNTM2MzUsNTM2MzcsNTM2MzgsNTM2MzksNTM2NDEsNTM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NDMsNTM2NDQsNTM2NDUsNTM2NDYsNTM2NDcsNTM2NDgsNTM2''@;'; put 'put ''NDksNTM2NTAsNTM2NTEsNTM2NTIsNTM2NTMsNTM2NTQsNTM2NTUsNTM2NTYsNTM2NTcsNTM2NTgsNTM2NTksNTM2NjAsNTM2NjEsNTM2NjIsNTM2NjMsNTM2NjYsNTM2NjcsNTM2NjksNTM2NzAsNTM2NzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NzMsNTM2NzQsNTM2NzUs''@;'; put 'put ''NTM2NzYsNTM2NzcsNTM2NzgsNTM2NzksNTM2ODIsNTM2ODQsNTM2ODYsNTM2ODcsNTM2ODgsNTM2ODksNTM2OTEsNTM2OTMsNTM2OTQsNTM2OTUsNTM2OTcsNTM2OTgsNTM2OTksNTM3MDAsNTM3MDEsNTM3MDIsNTM3MDMsNTM3MDQsNTM3MDUsNTM3MDYsNTM3MDcsNTM3MDgsNTM3MDksNTM3''@;'; put 'put ''MTAsNTM3MTEsNDdlMyw0NzAwMSw0NzAwNCw0NzAwOCw0NzAxNiw0NzAxNyw0NzAxOSw0NzAyMCw0NzAyMSw0NzAyOCw0NzAyOSw0NzAzMiw0NzA0Nyw0NzA0OSw0NzA4NCw0NzA4NSw0NzA4OCw0NzA5Miw0NzEwMCw0NzEwMSw0NzEwMyw0NzEwNCw0NzEwNSw0NzExMSw0NzExMiw0NzExMyw0''@;'; put 'put ''NzExNiw0NzEyMCw0NzEyOCw0NzEyOSw0NzEzMSw0NzEzMyw0NzE0MCw0NzE0MSw0NzE0NCw0NzE0OCw0NzE1Niw0NzE1Nyw0NzE1OSw0NzE2MCw0NzE2MSw0NzE2OCw0NzE3Miw0NzE4NSw0NzE4Nyw0NzE5Niw0NzE5Nyw0NzIwMCw0NzIwNCw0NzIxMiw0NzIxMyw0NzIxNSw0NzIxNyw0NzIy''@;'; put 'put ''NCw0NzIyOCw0NzI0NSw0NzI3Miw0NzI4MCw0NzI4NCw0NzI4OCw0NzI5Niw0NzI5Nyw0NzI5OSw0NzMwMSw0NzMwOCw0NzMxMiw0NzMxNiw0NzMyNSw0NzMyNyw0NzMyOSw0NzMzNiw0NzMzNyw0NzM0MCw0NzM0NCw0NzM1Miw0NzM1Myw0NzM1NSw0NzM1Nyw0NzM2NCw0NzM4NCw0NzM5Miw0''@;'; put 'put ''NzQyMCw0NzQyMSw0NzQyNCw0NzQyOCw0NzQzNiw0NzQzOSw0NzQ0MSw0NzQ0OCw0NzQ0OSw0NzQ1Miw0NzQ1Niw0NzQ2NCw0NzQ2NSw1MzcxMiw1MzcxMyw1MzcxNCw1MzcxNSw1MzcxNiw1MzcxNyw1MzcxOCw1MzcxOSw1MzcyMSw1MzcyMiw1MzcyMyw1MzcyNCw1MzcyNSw1MzcyNiw1Mzcy''@;'; put 'put ''Nyw1MzcyOCw1MzcyOSw1MzczMCw1MzczMSw1MzczMiw1MzczMyw1MzczNCw1MzczNSw1MzczNiw1MzczNyw1MzczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzczOSw1Mzc0MCw1Mzc0MSw1Mzc0Miw1Mzc0Myw1Mzc0NCw1Mzc0NSw1Mzc0Niw1Mzc0Nyw1Mzc0OSw1Mzc1MCw1''@;'; put 'put ''Mzc1MSw1Mzc1Myw1Mzc1NCw1Mzc1NSw1Mzc1Niw1Mzc1Nyw1Mzc1OCw1Mzc1OSw1Mzc2MCw1Mzc2MSw1Mzc2Miw1Mzc2Myw1Mzc2NCw1Mzc2NSw1Mzc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzc2OCw1Mzc3MCw1Mzc3MSw1Mzc3Miw1Mzc3Myw1Mzc3NCw1Mzc3NSw1Mzc3''@;'; put 'put ''Nyw1Mzc3OCw1Mzc3OSw1Mzc4MCw1Mzc4MSw1Mzc4Miw1Mzc4Myw1Mzc4NCw1Mzc4NSw1Mzc4Niw1Mzc4Nyw1Mzc4OCw1Mzc4OSw1Mzc5MCw1Mzc5MSw1Mzc5Miw1Mzc5Myw1Mzc5NCw1Mzc5NSw1Mzc5Niw1Mzc5Nyw1Mzc5OCw1Mzc5OSw1MzgwMCw1MzgwMSw0NzQ2Nyw0NzQ2OSw0NzQ3Niw0''@;'; put 'put ''NzQ3Nyw0NzQ4MCw0NzQ4NCw0NzQ5Miw0NzQ5Myw0NzQ5NSw0NzQ5Nyw0NzQ5OCw0NzUwMSw0NzUwMiw0NzUzMiw0NzUzMyw0NzUzNiw0NzU0MCw0NzU0OCw0NzU0OSw0NzU1MSw0NzU1Myw0NzU2MCw0NzU2MSw0NzU2NCw0NzU2Niw0NzU2Nyw0NzU2OCw0NzU2OSw0NzU3MCw0NzU3Niw0NzU3''@;'; put 'put ''Nyw0NzU3OSw0NzU4MSw0NzU4Miw0NzU4NSw0NzU4Nyw0NzU4OCw0NzU4OSw0NzU5Miw0NzU5Niw0NzYwNCw0NzYwNSw0NzYwNyw0NzYwOCw0NzYwOSw0NzYxMCw0NzYxNiw0NzYxNyw0NzYyNCw0NzYzNyw0NzY3Miw0NzY3Myw0NzY3Niw0NzY4MCw0NzY4Miw0NzY4OCw0NzY4OSw0NzY5MSw0''@;'; put 'put ''NzY5Myw0NzY5NCw0NzY5OSw0NzcwMCw0NzcwMSw0NzcwNCw0NzcwOCw0NzcxNiw0NzcxNyw0NzcxOSw0NzcyMCw0NzcyMSw0NzcyOCw0NzcyOSw0NzczMiw0NzczNiw0Nzc0Nyw0Nzc0OCw0Nzc0OSw0Nzc1MSw0Nzc1Niw0Nzc4NCw0Nzc4NSw0Nzc4Nyw0Nzc4OCw0Nzc5Miw0Nzc5NCw0Nzgw''@;'; put 'put ''MCw0NzgwMSw0NzgwMyw0NzgwNSw0NzgxMiw0NzgxNiw0NzgzMiw0NzgzMyw0Nzg2OCw1MzgwMiw1MzgwMyw1MzgwNiw1MzgwNyw1MzgwOSw1MzgxMCw1MzgxMSw1MzgxMyw1MzgxNCw1MzgxNSw1MzgxNiw1MzgxNyw1MzgxOCw1MzgxOSw1MzgyMiw1MzgyNCw1MzgyNiw1MzgyNyw1MzgyOCw1''@;'; put 'put ''MzgyOSw1MzgzMCw1MzgzMSw1MzgzMyw1MzgzNCw1MzgzNSw1MzgzNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzgzNyw1MzgzOCw1MzgzOSw1Mzg0MCw1Mzg0MSw1Mzg0Miw1Mzg0Myw1Mzg0NCw1Mzg0NSw1Mzg0Niw1Mzg0Nyw1Mzg0OCw1Mzg0OSw1Mzg1MCw1Mzg1MSw1Mzg1''@;'; put 'put ''Myw1Mzg1NCw1Mzg1NSw1Mzg1Niw1Mzg1Nyw1Mzg1OCw1Mzg1OSw1Mzg2MSw1Mzg2Miw1Mzg2Myw1Mzg2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2NSw1Mzg2Niw1Mzg2Nyw1Mzg2OCw1Mzg2OSw1Mzg3MCw1Mzg3MSw1Mzg3Miw1Mzg3Myw1Mzg3NCw1Mzg3NSw1Mzg3Niw1''@;'; put 'put ''Mzg3Nyw1Mzg3OCw1Mzg3OSw1Mzg4MCw1Mzg4MSw1Mzg4Miw1Mzg4Myw1Mzg4NCw1Mzg4NSw1Mzg4Niw1Mzg4Nyw1Mzg5MCw1Mzg5MSw1Mzg5Myw1Mzg5NCw1Mzg5NSw1Mzg5Nyw1Mzg5OCw1Mzg5OSw1MzkwMCw0Nzg3Miw0Nzg3Niw0Nzg4NSw0Nzg4Nyw0Nzg4OSw0Nzg5Niw0NzkwMCw0Nzkw''@;'; put 'put ''NCw0NzkxMyw0NzkxNSw0NzkyNCw0NzkyNSw0NzkyNiw0NzkyOCw0NzkzMSw0NzkzMiw0NzkzMyw0NzkzNCw0Nzk0MCw0Nzk0MSw0Nzk0Myw0Nzk0NSw0Nzk0OSw0Nzk1MSw0Nzk1Miw0Nzk1Niw0Nzk2MCw0Nzk2OSw0Nzk3MSw0Nzk4MCw0ODAwOCw0ODAxMiw0ODAxNiw0ODAzNiw0ODA0MCw0''@;'; put 'put ''ODA0NCw0ODA1Miw0ODA1NSw0ODA2NCw0ODA2OCw0ODA3Miw0ODA4MCw0ODA4Myw0ODEyMCw0ODEyMSw0ODEyNCw0ODEyNyw0ODEyOCw0ODEzMCw0ODEzNiw0ODEzNyw0ODEzOSw0ODE0MCw0ODE0MSw0ODE0Myw0ODE0NSw0ODE0OCw0ODE0OSw0ODE1MCw0ODE1MSw0ODE1Miw0ODE1NSw0ODE1''@;'; put 'put ''Niw0ODE1Nyw0ODE1OCw0ODE1OSw0ODE2NCw0ODE2NSw0ODE2Nyw0ODE2OSw0ODE3Myw0ODE3Niw0ODE3Nyw0ODE4MCw0ODE4NCw0ODE5Miw0ODE5Myw0ODE5NSw0ODE5Niw0ODE5Nyw0ODIwMSw0ODIwNCw0ODIwNSw0ODIwOCw0ODIyMSw0ODI2MCw0ODI2MSw0ODI2NCw0ODI2Nyw0ODI2OCw0''@;'; put 'put ''ODI3MCw0ODI3Niw0ODI3Nyw0ODI3OSw1MzkwMSw1MzkwMiw1MzkwMyw1MzkwNiw1MzkwNyw1MzkwOCw1MzkxMCw1MzkxMSw1MzkxMiw1MzkxMyw1MzkxNCw1MzkxNSw1MzkxNyw1MzkxOCw1MzkxOSw1MzkyMSw1MzkyMiw1MzkyMyw1MzkyNSw1MzkyNiw1MzkyNyw1MzkyOCw1MzkyOSw1Mzkz''@;'; put 'put ''MCw1MzkzMSw1MzkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzkzNCw1MzkzNSw1MzkzNiw1MzkzOCw1MzkzOSw1Mzk0MCw1Mzk0MSw1Mzk0Miw1Mzk0Myw1Mzk0Niw1Mzk0Nyw1Mzk0OSw1Mzk1MCw1Mzk1Myw1Mzk1NSw1Mzk1Niw1Mzk1Nyw1Mzk1OCw1Mzk1OSw1Mzk2Miw1''@;'; put 'put ''Mzk2NCw1Mzk2NSw1Mzk2Niw1Mzk2Nyw1Mzk2OCw1Mzk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzk3MCw1Mzk3MSw1Mzk3Myw1Mzk3NCw1Mzk3NSw1Mzk3Nyw1Mzk3OCw1Mzk3OSw1Mzk4MSw1Mzk4Miw1Mzk4Myw1Mzk4NCw1Mzk4NSw1Mzk4Niw1Mzk4Nyw1Mzk5MCw1Mzk5''@;'; put 'put ''MSw1Mzk5Miw1Mzk5Myw1Mzk5NCw1Mzk5NSw1Mzk5Niw1Mzk5Nyw1Mzk5OCw1Mzk5OSw1NDAwMiw1NDAwMyw1NDAwNSw1NDAwNiw1NDAwNyw1NDAwOSw1NDAxMCw0ODI4MSw0ODI4Miw0ODI4OCw0ODI4OSw0ODI5Miw0ODI5NSw0ODI5Niw0ODMwNCw0ODMwNSw0ODMwNyw0ODMwOCw0ODMwOSw0''@;'; put 'put ''ODMxNiw0ODMxNyw0ODMyMCw0ODMyNCw0ODMzMyw0ODMzNSw0ODMzNiw0ODMzNyw0ODM0MSw0ODM0NCw0ODM0OCw0ODM3Miw0ODM3Myw0ODM3NCw0ODM3Niw0ODM4MCw0ODM4OCw0ODM4OSw0ODM5MSw0ODM5Myw0ODQwMCw0ODQwNCw0ODQyMCw0ODQyOCw0ODQ0OCw0ODQ1Niw0ODQ1Nyw0ODQ2''@;'; put 'put ''MCw0ODQ2NCw0ODQ3Miw0ODQ3Myw0ODQ4NCw0ODQ4OCw0ODUxMiw0ODUxMyw0ODUxNiw0ODUxOSw0ODUyMCw0ODUyMSw0ODUyMiw0ODUyOCw0ODUyOSw0ODUzMSw0ODUzMyw0ODUzNyw0ODUzOCw0ODU0MCw0ODU0OCw0ODU2MCw0ODU2OCw0ODU5Niw0ODU5Nyw0ODYwMCw0ODYwNCw0ODYxNyw0''@;'; put 'put ''ODYyNCw0ODYyOCw0ODYzMiw0ODY0MCw0ODY0Myw0ODY0NSw0ODY1Miw0ODY1Myw0ODY1Niw0ODY2MCw0ODY2OCw0ODY2OSw0ODY3MSw0ODcwOCw0ODcwOSw0ODcxMiw0ODcxNiw0ODcxOCw0ODcyNCw0ODcyNSw0ODcyNyw0ODcyOSw0ODczMCw0ODczMSw0ODczNiw0ODczNyw0ODc0MCw1NDAx''@;'; put 'put ''MSw1NDAxMiw1NDAxMyw1NDAxNCw1NDAxNSw1NDAxOCw1NDAyMCw1NDAyMiw1NDAyMyw1NDAyNCw1NDAyNSw1NDAyNiw1NDAyNyw1NDAzMSw1NDAzMyw1NDAzNCw1NDAzNSw1NDAzNyw1NDAzOSw1NDA0MCw1NDA0MSw1NDA0Miw1NDA0Myw1NDA0Niw1NDA1MCw1NDA1MSxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCw1NDA1Miw1NDA1NCw1NDA1NSw1NDA1OCw1NDA1OSw1NDA2MSw1NDA2Miw1NDA2Myw1NDA2NSw1NDA2Niw1NDA2Nyw1NDA2OCw1NDA2OSw1NDA3MCw1NDA3MSw1NDA3NCw1NDA3OCw1NDA3OSw1NDA4MCw1NDA4MSw1NDA4Miw1NDA4Myw1NDA4Niw1NDA4Nyw1NDA4''@;'; put 'put ''OCw1NDA4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA5MCw1NDA5MSw1NDA5Miw1NDA5Myw1NDA5NCw1NDA5NSw1NDA5Niw1NDA5Nyw1NDA5OCw1NDA5OSw1NDEwMCw1NDEwMSw1NDEwMiw1NDEwMyw1NDEwNCw1NDEwNSw1NDEwNiw1NDEwNyw1NDEwOCw1NDEwOSw1NDExMCw1''@;'; put 'put ''NDExMSw1NDExMiw1NDExMyw1NDExNCw1NDExNSw1NDExNiw1NDExNyw1NDExOCw1NDExOSw1NDEyMCw1NDEyMSw0ODc0NCw0ODc0Niw0ODc1Miw0ODc1Myw0ODc1NSw0ODc1Niw0ODc1Nyw0ODc2Myw0ODc2NCw0ODc2NSw0ODc2OCw0ODc3Miw0ODc4MCw0ODc4MSw0ODc4Myw0ODc4NCw0ODc4''@;'; put 'put ''NSw0ODc5Miw0ODc5Myw0ODgwOCw0ODg0OCw0ODg0OSw0ODg1Miw0ODg1NSw0ODg1Niw0ODg2NCw0ODg2Nyw0ODg2OCw0ODg2OSw0ODg3Niw0ODg5Nyw0ODkwNCw0ODkwNSw0ODkyMCw0ODkyMSw0ODkyMyw0ODkyNCw0ODkyNSw0ODk2MCw0ODk2MSw0ODk2NCw0ODk2OCw0ODk3Niw0ODk3Nyw0''@;'; put 'put ''ODk4MSw0OTA0NCw0OTA3Miw0OTA5Myw0OTEwMCw0OTEwMSw0OTEwNCw0OTEwOCw0OTExNiw0OTExOSw0OTEyMSw0OTIxMiw0OTIzMyw0OTI0MCw0OTI0NCw0OTI0OCw0OTI1Niw0OTI1Nyw0OTI5Niw0OTI5Nyw0OTMwMCw0OTMwNCw0OTMxMiw0OTMxMyw0OTMxNSw0OTMxNyw0OTMyNCw0OTMy''@;'; put 'put ''NSw0OTMyNyw0OTMyOCw0OTMzMSw0OTMzMiw0OTMzMyw0OTMzNCw0OTM0MCw0OTM0MSw0OTM0Myw0OTM0NCw0OTM0NSw0OTM0OSw0OTM1Miw0OTM1Myw0OTM1Niw0OTM2MCw0OTM2OCw0OTM2OSw0OTM3MSw0OTM3Miw0OTM3Myw0OTM4MCw1NDEyMiw1NDEyMyw1NDEyNCw1NDEyNSw1NDEyNiw1''@;'; put 'put ''NDEyNyw1NDEyOCw1NDEyOSw1NDEzMCw1NDEzMSw1NDEzMiw1NDEzMyw1NDEzNCw1NDEzNSw1NDEzNiw1NDEzNyw1NDEzOCw1NDEzOSw1NDE0Miw1NDE0Myw1NDE0NSw1NDE0Niw1NDE0Nyw1NDE0OSw1NDE1MCw1NDE1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE1Miw1NDE1''@;'; put 'put ''Myw1NDE1NCw1NDE1NSw1NDE1OCw1NDE2Miw1NDE2Myw1NDE2NCw1NDE2NSw1NDE2Niw1NDE2Nyw1NDE3MCw1NDE3MSw1NDE3Myw1NDE3NCw1NDE3NSw1NDE3Nyw1NDE3OCw1NDE3OSw1NDE4MCw1NDE4MSw1NDE4Miw1NDE4Myw1NDE4Niw1NDE4OCw1NDE5MCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1NDE5MSw1NDE5Miw1NDE5Myw1NDE5NCw1NDE5NSw1NDE5Nyw1NDE5OCw1NDE5OSw1NDIwMSw1NDIwMiw1NDIwMyw1NDIwNSw1NDIwNiw1NDIwNyw1NDIwOCw1NDIwOSw1NDIxMCw1NDIxMSw1NDIxNCw1NDIxNSw1NDIxOCw1NDIxOSw1NDIyMCw1NDIyMSw1NDIyMiw1NDIy''@;'; put 'put ''Myw1NDIyNSw1NDIyNiw1NDIyNyw1NDIyOCw1NDIyOSw1NDIzMCw0OTM4MSw0OTM4NCw0OTM4OCw0OTM5Niw0OTM5Nyw0OTM5OSw0OTQwMSw0OTQwOCw0OTQxMiw0OTQxNiw0OTQyNCw0OTQyOSw0OTQzNiw0OTQzNyw0OTQzOCw0OTQzOSw0OTQ0MCw0OTQ0Myw0OTQ0NCw0OTQ0Niw0OTQ0Nyw0''@;'; put 'put ''OTQ1Miw0OTQ1Myw0OTQ1NSw0OTQ1Niw0OTQ1Nyw0OTQ2Miw0OTQ2NCw0OTQ2NSw0OTQ2OCw0OTQ3Miw0OTQ4MCw0OTQ4MSw0OTQ4Myw0OTQ4NCw0OTQ4NSw0OTQ5Miw0OTQ5Myw0OTQ5Niw0OTUwMCw0OTUwOCw0OTUwOSw0OTUxMSw0OTUxMiw0OTUxMyw0OTUyMCw0OTUyNCw0OTUyOCw0OTU0''@;'; put 'put ''MSw0OTU0OCw0OTU0OSw0OTU1MCw0OTU1Miw0OTU1Niw0OTU1OCw0OTU2NCw0OTU2NSw0OTU2Nyw0OTU2OSw0OTU3Myw0OTU3Niw0OTU3Nyw0OTU4MCw0OTU4NCw0OTU5Nyw0OTYwNCw0OTYwOCw0OTYxMiw0OTYyMCw0OTYyMyw0OTYyNCw0OTYzMiw0OTYzNiw0OTY0MCw0OTY0OCw0OTY0OSw0''@;'; put 'put ''OTY1MSw0OTY2MCw0OTY2MSw0OTY2NCw0OTY2OCw0OTY3Niw0OTY3Nyw0OTY3OSw0OTY4MSw0OTY4OCw0OTY4OSw0OTY5Miw0OTY5NSw0OTY5Niw0OTcwNCw0OTcwNSw0OTcwNyw0OTcwOSw1NDIzMSw1NDIzMyw1NDIzNCw1NDIzNSw1NDIzNiw1NDIzNyw1NDIzOCw1NDIzOSw1NDI0MCw1NDI0''@;'; put 'put ''Miw1NDI0NCw1NDI0NSw1NDI0Niw1NDI0Nyw1NDI0OCw1NDI0OSw1NDI1MCw1NDI1MSw1NDI1NCw1NDI1NSw1NDI1Nyw1NDI1OCw1NDI1OSw1NDI2MSw1NDI2Miw1NDI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI2NCw1NDI2NSw1NDI2Niw1NDI2Nyw1NDI3MCw1NDI3Miw1''@;'; put 'put ''NDI3NCw1NDI3NSw1NDI3Niw1NDI3Nyw1NDI3OCw1NDI3OSw1NDI4MSw1NDI4Miw1NDI4Myw1NDI4NCw1NDI4NSw1NDI4Niw1NDI4Nyw1NDI4OCw1NDI4OSw1NDI5MCw1NDI5MSw1NDI5Miw1NDI5Myw1NDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI5NSw1NDI5Niw1NDI5''@;'; put 'put ''Nyw1NDI5OCw1NDI5OSw1NDMwMCw1NDMwMiw1NDMwMyw1NDMwNCw1NDMwNSw1NDMwNiw1NDMwNyw1NDMwOCw1NDMwOSw1NDMxMCw1NDMxMSw1NDMxMiw1NDMxMyw1NDMxNCw1NDMxNSw1NDMxNiw1NDMxNyw1NDMxOCw1NDMxOSw1NDMyMCw1NDMyMSw1NDMyMiw1NDMyMyw1NDMyNCw1NDMyNSw1''@;'; put 'put ''NDMyNiw1NDMyNyw0OTcxMSw0OTcxMyw0OTcxNCw0OTcxNiw0OTczNiw0OTc0NCw0OTc0NSw0OTc0OCw0OTc1Miw0OTc2MCw0OTc2NSw0OTc3Miw0OTc3Myw0OTc3Niw0OTc4MCw0OTc4OCw0OTc4OSw0OTc5MSw0OTc5Myw0OTgwMCw0OTgwMSw0OTgwOCw0OTgxNiw0OTgxOSw0OTgyMSw0OTgy''@;'; put 'put ''OCw0OTgyOSw0OTgzMiw0OTgzNiw0OTgzNyw0OTg0NCw0OTg0NSw0OTg0Nyw0OTg0OSw0OTg4NCw0OTg4NSw0OTg4OCw0OTg5MSw0OTg5Miw0OTg5OSw0OTkwMCw0OTkwMSw0OTkwMyw0OTkwNSw0OTkxMCw0OTkxMiw0OTkxMyw0OTkxNSw0OTkxNiw0OTkyMCw0OTkyOCw0OTkyOSw0OTkzMiw0''@;'; put 'put ''OTkzMyw0OTkzOSw0OTk0MCw0OTk0MSw0OTk0NCw0OTk0OCw0OTk1Niw0OTk1Nyw0OTk2MCw0OTk2MSw0OTk4OSw1MDAyNCw1MDAyNSw1MDAyOCw1MDAzMiw1MDAzNCw1MDA0MCw1MDA0MSw1MDA0NCw1MDA0NSw1MDA1Miw1MDA1Niw1MDA2MCw1MDExMiw1MDEzNiw1MDEzNyw1MDE0MCw1MDE0''@;'; put 'put ''Myw1MDE0NCw1MDE0Niw1MDE1Miw1MDE1Myw1MDE1Nyw1MDE2NCw1MDE2NSw1MDE2OCw1MDE4NCw1MDE5Miw1MDIxMiw1MDIyMCw1MDIyNCw1NDMyOCw1NDMyOSw1NDMzMCw1NDMzMSw1NDMzMiw1NDMzMyw1NDMzNCw1NDMzNSw1NDMzNyw1NDMzOCw1NDMzOSw1NDM0MSw1NDM0Miw1NDM0Myw1''@;'; put 'put ''NDM0NCw1NDM0NSw1NDM0Niw1NDM0Nyw1NDM0OCw1NDM0OSw1NDM1MCw1NDM1MSw1NDM1Miw1NDM1Myw1NDM1NCw1NDM1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM1Niw1NDM1Nyw1NDM1OCw1NDM1OSw1NDM2MCw1NDM2MSw1NDM2Miw1NDM2Myw1NDM2NSw1NDM2Niw1NDM2''@;'; put 'put ''Nyw1NDM2OSw1NDM3MCw1NDM3MSw1NDM3Myw1NDM3NCw1NDM3NSw1NDM3Niw1NDM3Nyw1NDM3OCw1NDM3OSw1NDM4MCw1NDM4Miw1NDM4NCw1NDM4NSw1NDM4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM4Nyw1NDM4OCw1NDM4OSw1NDM5MCw1NDM5MSw1NDM5NCw1NDM5NSw1''@;'; put 'put ''NDM5Nyw1NDM5OCw1NDQwMSw1NDQwMyw1NDQwNCw1NDQwNSw1NDQwNiw1NDQwNyw1NDQxMCw1NDQxMiw1NDQxNCw1NDQxNSw1NDQxNiw1NDQxNyw1NDQxOCw1NDQxOSw1NDQyMSw1NDQyMiw1NDQyMyw1NDQyNCw1NDQyNSw1NDQyNiw1NDQyNyw1NDQyOCw1NDQyOSw1MDIyOCw1MDIzNiw1MDIz''@;'; put 'put ''Nyw1MDI0OCw1MDI3Niw1MDI3Nyw1MDI4MCw1MDI4NCw1MDI5Miw1MDI5Myw1MDI5Nyw1MDMwNCw1MDMyNCw1MDMzMiw1MDM2MCw1MDM2NCw1MDQwOSw1MDQxNiw1MDQxNyw1MDQyMCw1MDQyNCw1MDQyNiw1MDQzMSw1MDQzMiw1MDQzMyw1MDQ0NCw1MDQ0OCw1MDQ1Miw1MDQ2MCw1MDQ3Miw1''@;'; put 'put ''MDQ3Myw1MDQ3Niw1MDQ4MCw1MDQ4OCw1MDQ4OSw1MDQ5MSw1MDQ5Myw1MDUwMCw1MDUwMSw1MDUwNCw1MDUwNSw1MDUwNiw1MDUwOCw1MDUwOSw1MDUxMCw1MDUxNSw1MDUxNiw1MDUxNyw1MDUxOSw1MDUyMCw1MDUyMSw1MDUyNSw1MDUyNiw1MDUyOCw1MDUyOSw1MDUzMiw1MDUzNiw1MDU0''@;'; put 'put ''NCw1MDU0NSw1MDU0Nyw1MDU0OCw1MDU0OSw1MDU1Niw1MDU1Nyw1MDU2MCw1MDU2NCw1MDU2Nyw1MDU3Miw1MDU3Myw1MDU3NSw1MDU3Nyw1MDU4MSw1MDU4Myw1MDU4NCw1MDU4OCw1MDU5Miw1MDYwMSw1MDYxMiw1MDYxMyw1MDYxNiw1MDYxNyw1MDYxOSw1MDYyMCw1MDYyMSw1MDYyMiw1''@;'; put 'put ''MDYyOCw1MDYyOSw1MDYzMCw1MDYzMSw1MDYzMiw1MDYzMyw1MDYzNCw1MDYzNiw1MDYzOCw1NDQzMCw1NDQzMSw1NDQzMiw1NDQzMyw1NDQzNCw1NDQzNSw1NDQzNiw1NDQzNyw1NDQzOCw1NDQzOSw1NDQ0MCw1NDQ0Miw1NDQ0Myw1NDQ0NCw1NDQ0NSw1NDQ0Niw1NDQ0Nyw1NDQ0OCw1NDQ0''@;'; put 'put ''OSw1NDQ1MCw1NDQ1MSw1NDQ1Miw1NDQ1Myw1NDQ1NCw1NDQ1NSw1NDQ1NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ1Nyw1NDQ1OCw1NDQ1OSw1NDQ2MCw1NDQ2MSw1NDQ2Miw1NDQ2Myw1NDQ2NCw1NDQ2NSw1NDQ2Niw1NDQ2Nyw1NDQ2OCw1NDQ2OSw1NDQ3MCw1NDQ3MSw1''@;'; put 'put ''NDQ3Miw1NDQ3Myw1NDQ3NCw1NDQ3NSw1NDQ3Nyw1NDQ3OCw1NDQ3OSw1NDQ4MSw1NDQ4Miw1NDQ4Myw1NDQ4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ4Niw1NDQ4Nyw1NDQ4OCw1NDQ4OSw1NDQ5MCw1NDQ5MSw1NDQ5Myw1NDQ5NCw1NDQ5Niw1NDQ5Nyw1NDQ5OCw1NDQ5''@;'; put 'put ''OSw1NDUwMCw1NDUwMSw1NDUwMiw1NDUwMyw1NDUwNSw1NDUwNiw1NDUwNyw1NDUwOSw1NDUxMCw1NDUxMSw1NDUxMyw1NDUxNCw1NDUxNSw1NDUxNiw1NDUxNyw1NDUxOCw1NDUxOSw1NDUyMSw1NDUyMiw1NDUyNCw1MDY0MCw1MDY0MSw1MDY0NCw1MDY0OCw1MDY1Niw1MDY1Nyw1MDY1OSw1''@;'; put 'put ''MDY2MSw1MDY2OCw1MDY2OSw1MDY3MCw1MDY3Miw1MDY3Niw1MDY3OCw1MDY3OSw1MDY4NCw1MDY4NSw1MDY4Niw1MDY4Nyw1MDY4OCw1MDY4OSw1MDY5Myw1MDY5NCw1MDY5NSw1MDY5Niw1MDcwMCw1MDcwNCw1MDcxMiw1MDcxMyw1MDcxNSw1MDcxNiw1MDcyNCw1MDcyNSw1MDcyOCw1MDcz''@;'; put 'put ''Miw1MDczMyw1MDczNCw1MDczNiw1MDczOSw1MDc0MCw1MDc0MSw1MDc0Myw1MDc0NSw1MDc0Nyw1MDc1Miw1MDc1Myw1MDc1Niw1MDc2MCw1MDc2OCw1MDc2OSw1MDc3MSw1MDc3Miw1MDc3Myw1MDc4MCw1MDc4MSw1MDc4NCw1MDc5Niw1MDc5OSw1MDgwMSw1MDgwOCw1MDgwOSw1MDgxMiw1''@;'; put 'put ''MDgxNiw1MDgyNCw1MDgyNSw1MDgyNyw1MDgyOSw1MDgzNiw1MDgzNyw1MDg0MCw1MDg0NCw1MDg1Miw1MDg1Myw1MDg1NSw1MDg1Nyw1MDg2NCw1MDg2NSw1MDg2OCw1MDg3Miw1MDg3Myw1MDg3NCw1MDg4MCw1MDg4MSw1MDg4Myw1MDg4NSw1MDg5Miw1MDg5Myw1MDg5Niw1MDkwMCw1MDkw''@;'; put 'put ''OCw1MDkwOSw1MDkxMiw1MDkxMyw1MDkyMCw1NDUyNiw1NDUyNyw1NDUyOCw1NDUyOSw1NDUzMCw1NDUzMSw1NDUzMyw1NDUzNCw1NDUzNSw1NDUzNyw1NDUzOCw1NDUzOSw1NDU0MSw1NDU0Miw1NDU0Myw1NDU0NCw1NDU0NSw1NDU0Niw1NDU0Nyw1NDU1MCw1NDU1Miw1NDU1Myw1NDU1NCw1''@;'; put 'put ''NDU1NSw1NDU1Niw1NDU1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU1OCw1NDU1OSw1NDU2MCw1NDU2MSw1NDU2Miw1NDU2Myw1NDU2NCw1NDU2NSw1NDU2Niw1NDU2Nyw1NDU2OCw1NDU2OSw1NDU3MCw1NDU3MSw1NDU3Miw1NDU3Myw1NDU3NCw1NDU3NSw1NDU3Niw1NDU3''@;'; put 'put ''Nyw1NDU3OCw1NDU3OSw1NDU4MCw1NDU4MSw1NDU4Miw1NDU4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU4NCw1NDU4NSw1NDU4Niw1NDU4Nyw1NDU5MCw1NDU5MSw1NDU5Myw1NDU5NCw1NDU5NSw1NDU5Nyw1NDU5OCw1NDU5OSw1NDYwMCw1NDYwMSw1NDYwMiw1NDYwMyw1''@;'; put 'put ''NDYwNiw1NDYwOCw1NDYxMCw1NDYxMSw1NDYxMiw1NDYxMyw1NDYxNCw1NDYxNSw1NDYxOCw1NDYxOSw1NDYyMSw1NDYyMiw1NDYyMyw1NDYyNSw1NDYyNiw1NDYyNyw1MDkyMSw1MDkyNCw1MDkyOCw1MDkzNiw1MDkzNyw1MDk0MSw1MDk0OCw1MDk0OSw1MDk1Miw1MDk1Niw1MDk2NCw1MDk2''@;'; put 'put ''NSw1MDk2Nyw1MDk2OSw1MDk3Niw1MDk3Nyw1MDk4MCw1MDk4NCw1MDk5Miw1MDk5Myw1MDk5NSw1MDk5Nyw1MDk5OSw1MTAwNCw1MTAwNSw1MTAwOCw1MTAxMiw1MTAxOCw1MTAyMCw1MTAyMSw1MTAyMyw1MTAyNSw1MTAyNiw1MTAyNyw1MTAyOCw1MTAyOSw1MTAzMCw1MTAzMSw1MTAzMiw1''@;'; put 'put ''MTAzNiw1MTA0MCw1MTA0OCw1MTA1MSw1MTA2MCw1MTA2MSw1MTA2NCw1MTA2OCw1MTA2OSw1MTA3MCw1MTA3NSw1MTA3Niw1MTA3Nyw1MTA3OSw1MTA4MCw1MTA4MSw1MTA4Miw1MTA4Niw1MTA4OCw1MTA4OSw1MTA5Miw1MTA5NCw1MTA5NSw1MTA5Niw1MTA5OCw1MTEwNCw1MTEwNSw1MTEw''@;'; put 'put ''Nyw1MTEwOCw1MTEwOSw1MTExMCw1MTExNiw1MTExNyw1MTEyMCw1MTEyNCw1MTEzMiw1MTEzMyw1MTEzNSw1MTEzNiw1MTEzNyw1MTE0NCw1MTE0NSw1MTE0OCw1MTE1MCw1MTE1Miw1MTE2MCw1MTE2NSw1MTE3Miw1MTE3Niw1MTE4MCw1MTIwMCw1MTIwMSw1MTIwNCw1MTIwOCw1MTIxMCw1''@;'; put 'put ''NDYyOCw1NDYzMCw1NDYzMSw1NDYzNCw1NDYzNiw1NDYzOCw1NDYzOSw1NDY0MCw1NDY0MSw1NDY0Miw1NDY0Myw1NDY0Niw1NDY0Nyw1NDY0OSw1NDY1MCw1NDY1MSw1NDY1Myw1NDY1NCw1NDY1NSw1NDY1Niw1NDY1Nyw1NDY1OCw1NDY1OSw1NDY2Miw1NDY2Niw1NDY2NyxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1NDY2OCw1NDY2OSw1NDY3MCw1NDY3MSw1NDY3Myw1NDY3NCw1NDY3NSw1NDY3Niw1NDY3Nyw1NDY3OCw1NDY3OSw1NDY4MCw1NDY4MSw1NDY4Miw1NDY4Myw1NDY4NCw1NDY4NSw1NDY4Niw1NDY4Nyw1NDY4OCw1NDY4OSw1NDY5MCw1NDY5MSw1NDY5Miw1''@;'; put 'put ''NDY5NCw1NDY5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY5Niw1NDY5Nyw1NDY5OCw1NDY5OSw1NDcwMCw1NDcwMSw1NDcwMiw1NDcwMyw1NDcwNCw1NDcwNSw1NDcwNiw1NDcwNyw1NDcwOCw1NDcwOSw1NDcxMCw1NDcxMSw1NDcxMiw1NDcxMyw1NDcxNCw1NDcxNSw1NDcx''@;'; put 'put ''Niw1NDcxNyw1NDcxOCw1NDcxOSw1NDcyMCw1NDcyMSw1NDcyMiw1NDcyMyw1NDcyNCw1NDcyNSw1NDcyNiw1NDcyNyw1MTIxNiw1MTIxNyw1MTIxOSw1MTIyMSw1MTIyMiw1MTIyOCw1MTIyOSw1MTIzMiw1MTIzNiw1MTI0NCw1MTI0NSw1MTI0Nyw1MTI0OSw1MTI1Niw1MTI2MCw1MTI2NCw1''@;'; put 'put ''MTI3Miw1MTI3Myw1MTI3Niw1MTI3Nyw1MTI4NCw1MTMxMiw1MTMxMyw1MTMxNiw1MTMyMCw1MTMyMiw1MTMyOCw1MTMyOSw1MTMzMSw1MTMzMyw1MTMzNCw1MTMzNSw1MTMzOSw1MTM0MCw1MTM0MSw1MTM0OCw1MTM1Nyw1MTM1OSw1MTM2MSw1MTM2OCw1MTM4OCw1MTM4OSw1MTM5Niw1MTQw''@;'; put 'put ''MCw1MTQwNCw1MTQxMiw1MTQxMyw1MTQxNSw1MTQxNyw1MTQyNCw1MTQyNSw1MTQyOCw1MTQ0NSw1MTQ1Miw1MTQ1Myw1MTQ1Niw1MTQ2MCw1MTQ2MSw1MTQ2Miw1MTQ2OCw1MTQ2OSw1MTQ3MSw1MTQ3Myw1MTQ4MCw1MTUwMCw1MTUwOCw1MTUzNiw1MTUzNyw1MTU0MCw1MTU0NCw1MTU1Miw1''@;'; put 'put ''MTU1Myw1MTU1NSw1MTU2NCw1MTU2OCw1MTU3Miw1MTU4MCw1MTU5Miw1MTU5Myw1MTU5Niw1MTYwMCw1MTYwOCw1MTYwOSw1MTYxMSw1MTYxMyw1MTY0OCw1MTY0OSw1MTY1Miw1MTY1NSw1MTY1Niw1MTY1OCw1MTY2NCw1MTY2NSw1MTY2Nyw1NDczMCw1NDczMSw1NDczMyw1NDczNCw1NDcz''@;'; put 'put ''NSw1NDczNyw1NDczOSw1NDc0MCw1NDc0MSw1NDc0Miw1NDc0Myw1NDc0Niw1NDc0OCw1NDc1MCw1NDc1MSw1NDc1Miw1NDc1Myw1NDc1NCw1NDc1NSw1NDc1OCw1NDc1OSw1NDc2MSw1NDc2Miw1NDc2Myw1NDc2NSw1NDc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDc2Nyw1''@;'; put 'put ''NDc2OCw1NDc2OSw1NDc3MCw1NDc3MSw1NDc3NCw1NDc3Niw1NDc3OCw1NDc3OSw1NDc4MCw1NDc4MSw1NDc4Miw1NDc4Myw1NDc4Niw1NDc4Nyw1NDc4OSw1NDc5MCw1NDc5MSw1NDc5Myw1NDc5NCw1NDc5NSw1NDc5Niw1NDc5Nyw1NDc5OCw1NDc5OSw1NDgwMixudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw1NDgwNiw1NDgwNyw1NDgwOCw1NDgwOSw1NDgxMCw1NDgxMSw1NDgxMyw1NDgxNCw1NDgxNSw1NDgxNyw1NDgxOCw1NDgxOSw1NDgyMSw1NDgyMiw1NDgyMyw1NDgyNCw1NDgyNSw1NDgyNiw1NDgyNyw1NDgyOCw1NDgzMCw1NDgzMSw1NDgzMiw1NDgzMyw1NDgzNCw1''@;'; put 'put ''NDgzNSw1NDgzNiw1NDgzNyw1NDgzOCw1NDgzOSw1NDg0Miw1NDg0Myw1MTY2OSw1MTY3MCw1MTY3Myw1MTY3NCw1MTY3Niw1MTY3Nyw1MTY4MCw1MTY4Miw1MTY4NCw1MTY4Nyw1MTY5Miw1MTY5Myw1MTY5NSw1MTY5Niw1MTY5Nyw1MTcwNCw1MTcwNSw1MTcwOCw1MTcxMiw1MTcyMCw1MTcy''@;'; put 'put ''MSw1MTcyMyw1MTcyNCw1MTcyNSw1MTczMiw1MTczNiw1MTc1Myw1MTc4OCw1MTc4OSw1MTc5Miw1MTc5Niw1MTgwNCw1MTgwNSw1MTgwNyw1MTgwOCw1MTgwOSw1MTgxNiw1MTgzNyw1MTg0NCw1MTg2NCw1MTkwMCw1MTkwMSw1MTkwNCw1MTkwOCw1MTkxNiw1MTkxNyw1MTkxOSw1MTkyMSw1''@;'; put 'put ''MTkyMyw1MTkyOCw1MTkyOSw1MTkzNiw1MTk0OCw1MTk1Niw1MTk3Niw1MTk4NCw1MTk4OCw1MTk5Miw1MmUzLDUyMDAxLDUyMDMzLDUyMDQwLDUyMDQxLDUyMDQ0LDUyMDQ4LDUyMDU2LDUyMDU3LDUyMDYxLDUyMDY4LDUyMDg4LDUyMDg5LDUyMTI0LDUyMTUyLDUyMTgwLDUyMTk2LDUyMTk5''@;'; put 'put ''LDUyMjAxLDUyMjM2LDUyMjM3LDUyMjQwLDUyMjQ0LDUyMjUyLDUyMjUzLDUyMjU3LDUyMjU4LDUyMjYzLDUyMjY0LDUyMjY1LDUyMjY4LDUyMjcwLDUyMjcyLDUyMjgwLDUyMjgxLDUyMjgzLDU0ODQ1LDU0ODQ2LDU0ODQ3LDU0ODQ5LDU0ODUwLDU0ODUxLDU0ODUyLDU0ODU0LDU0ODU1LDU0''@;'; put 'put ''ODU4LDU0ODYwLDU0ODYyLDU0ODYzLDU0ODY0LDU0ODY2LDU0ODY3LDU0ODcwLDU0ODcxLDU0ODczLDU0ODc0LDU0ODc1LDU0ODc3LDU0ODc4LDU0ODc5LDU0ODgwLDU0ODgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODgyLDU0ODgzLDU0ODg0LDU0ODg1LDU0ODg2LDU0ODg4''@;'; put 'put ''LDU0ODkwLDU0ODkxLDU0ODkyLDU0ODkzLDU0ODk0LDU0ODk1LDU0ODk4LDU0ODk5LDU0OTAxLDU0OTAyLDU0OTAzLDU0OTA0LDU0OTA1LDU0OTA2LDU0OTA3LDU0OTA4LDU0OTA5LDU0OTEwLDU0OTExLDU0OTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0OTEzLDU0OTE0LDU0''@;'; put 'put ''OTE2LDU0OTE4LDU0OTE5LDU0OTIwLDU0OTIxLDU0OTIyLDU0OTIzLDU0OTI2LDU0OTI3LDU0OTI5LDU0OTMwLDU0OTMxLDU0OTMzLDU0OTM0LDU0OTM1LDU0OTM2LDU0OTM3LDU0OTM4LDU0OTM5LDU0OTQwLDU0OTQyLDU0OTQ0LDU0OTQ2LDU0OTQ3LDU0OTQ4LDU0OTQ5LDU0OTUwLDU0OTUx''@;'; put 'put ''LDU0OTUzLDU0OTU0LDUyMjg0LDUyMjg1LDUyMjg2LDUyMjkyLDUyMjkzLDUyMjk2LDUyMzAwLDUyMzA4LDUyMzA5LDUyMzExLDUyMzEyLDUyMzEzLDUyMzIwLDUyMzI0LDUyMzI2LDUyMzI4LDUyMzM2LDUyMzQxLDUyMzc2LDUyMzc3LDUyMzgwLDUyMzg0LDUyMzkyLDUyMzkzLDUyMzk1LDUy''@;'; put 'put ''Mzk2LDUyMzk3LDUyNDA0LDUyNDA1LDUyNDA4LDUyNDEyLDUyNDIwLDUyNDIxLDUyNDIzLDUyNDI1LDUyNDMyLDUyNDM2LDUyNDUyLDUyNDYwLDUyNDY0LDUyNDgxLDUyNDg4LDUyNDg5LDUyNDkyLDUyNDk2LDUyNTA0LDUyNTA1LDUyNTA3LDUyNTA5LDUyNTE2LDUyNTIwLDUyNTI0LDUyNTM3''@;'; put 'put ''LDUyNTcyLDUyNTc2LDUyNTgwLDUyNTg4LDUyNTg5LDUyNTkxLDUyNTkzLDUyNjAwLDUyNjE2LDUyNjI4LDUyNjI5LDUyNjMyLDUyNjM2LDUyNjQ0LDUyNjQ1LDUyNjQ3LDUyNjQ5LDUyNjU2LDUyNjc2LDUyNjg0LDUyNjg4LDUyNzEyLDUyNzE2LDUyNzIwLDUyNzI4LDUyNzI5LDUyNzMxLDUy''@;'; put 'put ''NzMzLDUyNzQwLDUyNzQ0LDUyNzQ4LDUyNzU2LDUyNzYxLDUyNzY4LDUyNzY5LDUyNzcyLDUyNzc2LDUyNzg0LDUyNzg1LDUyNzg3LDUyNzg5LDU0OTU1LDU0OTU3LDU0OTU4LDU0OTU5LDU0OTYxLDU0OTYyLDU0OTYzLDU0OTY0LDU0OTY1LDU0OTY2LDU0OTY3LDU0OTY4LDU0OTcwLDU0OTcy''@;'; put 'put ''LDU0OTczLDU0OTc0LDU0OTc1LDU0OTc2LDU0OTc3LDU0OTc4LDU0OTc5LDU0OTgyLDU0OTgzLDU0OTg1LDU0OTg2LDU0OTg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0OTg5LDU0OTkwLDU0OTkxLDU0OTkyLDU0OTk0LDU0OTk1LDU0OTk3LDU0OTk4LDU1ZTMsNTUwMDIsNTUw''@;'; put 'put ''MDMsNTUwMDQsNTUwMDUsNTUwMDYsNTUwMDcsNTUwMDksNTUwMTAsNTUwMTEsNTUwMTMsNTUwMTQsNTUwMTUsNTUwMTcsNTUwMTgsNTUwMTksNTUwMjAsNTUwMjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwMjIsNTUwMjMsNTUwMjUsNTUwMjYsNTUwMjcsNTUwMjgsNTUwMzAs''@;'; put 'put ''NTUwMzEsNTUwMzIsNTUwMzMsNTUwMzQsNTUwMzUsNTUwMzgsNTUwMzksNTUwNDEsNTUwNDIsNTUwNDMsNTUwNDUsNTUwNDYsNTUwNDcsNTUwNDgsNTUwNDksNTUwNTAsNTUwNTEsNTUwNTIsNTUwNTMsNTUwNTQsNTUwNTUsNTUwNTYsNTUwNTgsNTUwNTksNTUwNjAsNTI4MjQsNTI4MjUsNTI4''@;'; put 'put ''MjgsNTI4MzEsNTI4MzIsNTI4MzMsNTI4NDAsNTI4NDEsNTI4NDMsNTI4NDUsNTI4NTIsNTI4NTMsNTI4NTYsNTI4NjAsNTI4NjgsNTI4NjksNTI4NzEsNTI4NzMsNTI4ODAsNTI4ODEsNTI4ODQsNTI4ODgsNTI4OTYsNTI4OTcsNTI4OTksNTI5MDAsNTI5MDEsNTI5MDgsNTI5MDksNTI5Mjks''@;'; put 'put ''NTI5NjQsNTI5NjUsNTI5NjgsNTI5NzEsNTI5NzIsNTI5ODAsNTI5ODEsNTI5ODMsNTI5ODQsNTI5ODUsNTI5OTIsNTI5OTMsNTI5OTYsNTNlMyw1MzAwOCw1MzAwOSw1MzAxMSw1MzAxMyw1MzAyMCw1MzAyNCw1MzAyOCw1MzAzNiw1MzAzNyw1MzAzOSw1MzA0MCw1MzA0MSw1MzA0OCw1MzA3''@;'; put 'put ''Niw1MzA3Nyw1MzA4MCw1MzA4NCw1MzA5Miw1MzA5Myw1MzA5NSw1MzA5Nyw1MzEwNCw1MzEwNSw1MzEwOCw1MzExMiw1MzEyMCw1MzEyNSw1MzEzMiw1MzE1Myw1MzE2MCw1MzE2OCw1MzE4OCw1MzIxNiw1MzIxNyw1MzIyMCw1MzIyNCw1MzIzMiw1MzIzMyw1MzIzNSw1MzIzNyw1MzI0NCw1''@;'; put 'put ''MzI0OCw1MzI1Miw1MzI2NSw1MzI3Miw1MzI5Myw1MzMwMCw1MzMwMSw1MzMwNCw1MzMwOCw1NTA2MSw1NTA2Miw1NTA2Myw1NTA2Niw1NTA2Nyw1NTA2OSw1NTA3MCw1NTA3MSw1NTA3Myw1NTA3NCw1NTA3NSw1NTA3Niw1NTA3Nyw1NTA3OCw1NTA3OSw1NTA4Miw1NTA4NCw1NTA4Niw1NTA4''@;'; put 'put ''Nyw1NTA4OCw1NTA4OSw1NTA5MCw1NTA5MSw1NTA5NCw1NTA5NSw1NTA5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTA5OCw1NTA5OSw1NTEwMSw1NTEwMiw1NTEwMyw1NTEwNCw1NTEwNSw1NTEwNiw1NTEwNyw1NTEwOSw1NTExMCw1NTExMiw1NTExNCw1NTExNSw1NTExNiw1''@;'; put 'put ''NTExNyw1NTExOCw1NTExOSw1NTEyMiw1NTEyMyw1NTEyNSw1NTEzMCw1NTEzMSw1NTEzMiw1NTEzMyw1NTEzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTEzNSw1NTEzOCw1NTE0MCw1NTE0Miw1NTE0Myw1NTE0NCw1NTE0Niw1NTE0Nyw1NTE0OSw1NTE1MCw1NTE1MSw1NTE1''@;'; put 'put ''Myw1NTE1NCw1NTE1NSw1NTE1Nyw1NTE1OCw1NTE1OSw1NTE2MCw1NTE2MSw1NTE2Miw1NTE2Myw1NTE2Niw1NTE2Nyw1NTE2OCw1NTE3MCw1NTE3MSw1NTE3Miw1NTE3Myw1NTE3NCw1NTE3NSw1NTE3OCw1NTE3OSw1MzMxNiw1MzMxNyw1MzMxOSw1MzMyMSw1MzMyOCw1MzMzMiw1MzMzNiw1''@;'; put 'put ''MzM0NCw1MzM1Niw1MzM1Nyw1MzM2MCw1MzM2NCw1MzM3Miw1MzM3Myw1MzM3Nyw1MzQxMiw1MzQxMyw1MzQxNiw1MzQyMCw1MzQyOCw1MzQyOSw1MzQzMSw1MzQzMyw1MzQ0MCw1MzQ0MSw1MzQ0NCw1MzQ0OCw1MzQ0OSw1MzQ1Niw1MzQ1Nyw1MzQ1OSw1MzQ2MCw1MzQ2MSw1MzQ2OCw1MzQ2''@;'; put 'put ''OSw1MzQ3Miw1MzQ3Niw1MzQ4NCw1MzQ4NSw1MzQ4Nyw1MzQ4OCw1MzQ4OSw1MzQ5Niw1MzUxNyw1MzU1Miw1MzU1Myw1MzU1Niw1MzU2MCw1MzU2Miw1MzU2OCw1MzU2OSw1MzU3MSw1MzU3Miw1MzU3Myw1MzU4MCw1MzU4MSw1MzU4NCw1MzU4OCw1MzU5Niw1MzU5Nyw1MzU5OSw1MzYwMSw1''@;'; put 'put ''MzYwOCw1MzYxMiw1MzYyOCw1MzYzNiw1MzY0MCw1MzY2NCw1MzY2NSw1MzY2OCw1MzY3Miw1MzY4MCw1MzY4MSw1MzY4Myw1MzY4NSw1MzY5MCw1MzY5Miw1MzY5Niw1MzcyMCw1Mzc0OCw1Mzc1Miw1Mzc2Nyw1Mzc2OSw1Mzc3Niw1MzgwNCw1MzgwNSw1MzgwOCw1MzgxMiw1MzgyMCw1Mzgy''@;'; put 'put ''MSw1MzgyMyw1MzgyNSw1MzgzMiw1Mzg1Miw1NTE4MSw1NTE4Miw1NTE4Myw1NTE4NSw1NTE4Niw1NTE4Nyw1NTE4OCw1NTE4OSw1NTE5MCw1NTE5MSw1NTE5NCw1NTE5Niw1NTE5OCw1NTE5OSw1NTIwMCw1NTIwMSw1NTIwMiw1NTIwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2MCw1Mzg4OCw1Mzg4OSw1Mzg5Miw1Mzg5Niw1MzkwNCw1MzkwNSw1MzkwOSw1MzkxNiw1MzkyMCw1MzkyNCw1MzkzMiw1MzkzNyw1Mzk0NCw1Mzk0NSw1Mzk0OCw1Mzk1MSw1Mzk1Miw1Mzk1NCw1Mzk2MCw1Mzk2MSw1Mzk2Myw1Mzk3''@;'; put 'put ''Miw1Mzk3Niw1Mzk4MCw1Mzk4OCw1Mzk4OSw1NGUzLDU0MDAxLDU0MDA0LDU0MDA4LDU0MDE2LDU0MDE3LDU0MDE5LDU0MDIxLDU0MDI4LDU0MDI5LDU0MDMwLDU0MDMyLDU0MDM2LDU0MDM4LDU0MDQ0LDU0MDQ1LDU0MDQ3LDU0MDQ4LDU0MDQ5LDU0MDUzLDU0MDU2LDU0MDU3LDU0MDYwLDU0''@;'; put 'put ''MDY0LDU0MDcyLDU0MDczLDU0MDc1LDU0MDc2LDU0MDc3LDU0MDg0LDU0MDg1LDU0MTQwLDU0MTQxLDU0MTQ0LDU0MTQ4LDU0MTU2LDU0MTU3LDU0MTU5LDU0MTYwLDU0MTYxLDU0MTY4LDU0MTY5LDU0MTcyLDU0MTc2LDU0MTg0LDU0MTg1LDU0MTg3LDU0MTg5LDU0MTk2LDU0MjAwLDU0MjA0''@;'; put 'put ''LDU0MjEyLDU0MjEzLDU0MjE2LDU0MjE3LDU0MjI0LDU0MjMyLDU0MjQxLDU0MjQzLDU0MjUyLDU0MjUzLDU0MjU2LDU0MjYwLDU0MjY4LDU0MjY5LDU0MjcxLDU0MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MjgwLDU0MzAxLDU0MzM2LDU0MzQwLDU0MzY0LDU0MzY4LDU0MzcyLDU0MzgxLDU0MzgzLDU0MzkyLDU0MzkzLDU0Mzk2LDU0Mzk5LDU0NDAw''@;'; put 'put ''LDU0NDAyLDU0NDA4LDU0NDA5LDU0NDExLDU0NDEzLDU0NDIwLDU0NDQxLDU0NDc2LDU0NDgwLDU0NDg0LDU0NDkyLDU0NDk1LDU0NTA0LDU0NTA4LDU0NTEyLDU0NTIwLDU0NTIzLDU0NTI1LDU0NTMyLDU0NTM2LDU0NTQwLDU0NTQ4LDU0NTQ5LDU0NTUxLDU0NTg4LDU0NTg5LDU0NTkyLDU0''@;'; put 'put ''NTk2LDU0NjA0LDU0NjA1LDU0NjA3LDU0NjA5LDU0NjE2LDU0NjE3LDU0NjIwLDU0NjI0LDU0NjI5LDU0NjMyLDU0NjMzLDU0NjM1LDU0NjM3LDU0NjQ0LDU0NjQ1LDU0NjQ4LDU0NjUyLDU0NjYwLDU0NjYxLDU0NjYzLDU0NjY0LDU0NjY1LDU0NjcyLDU0NjkzLDU0NzI4LDU0NzI5LDU0NzMy''@;'; put 'put ''LDU0NzM2LDU0NzM4LDU0NzQ0LDU0NzQ1LDU0NzQ3LDU0NzQ5LDU0NzU2LDU0NzU3LDU0NzYwLDU0NzY0LDU0NzcyLDU0NzczLDU0Nzc1LDU0Nzc3LDU0Nzg0LDU0Nzg1LDU0Nzg4LDU0NzkyLDU0ODAwLDU0ODAxLDU0ODAzLDU0ODA0LDU0ODA1LDU0ODEyLDU0ODE2LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODIwLDU0ODI5LDU0ODQwLDU0ODQxLDU0ODQ0''@;'; put 'put ''LDU0ODQ4LDU0ODUzLDU0ODU2LDU0ODU3LDU0ODU5LDU0ODYxLDU0ODY1LDU0ODY4LDU0ODY5LDU0ODcyLDU0ODc2LDU0ODg3LDU0ODg5LDU0ODk2LDU0ODk3LDU0OTAwLDU0OTE1LDU0OTE3LDU0OTI0LDU0OTI1LDU0OTI4LDU0OTMyLDU0OTQxLDU0OTQzLDU0OTQ1LDU0OTUyLDU0OTU2LDU0''@;'; put 'put ''OTYwLDU0OTY5LDU0OTcxLDU0OTgwLDU0OTgxLDU0OTg0LDU0OTg4LDU0OTkzLDU0OTk2LDU0OTk5LDU1MDAxLDU1MDA4LDU1MDEyLDU1MDE2LDU1MDI0LDU1MDI5LDU1MDM2LDU1MDM3LDU1MDQwLDU1MDQ0LDU1MDU3LDU1MDY0LDU1MDY1LDU1MDY4LDU1MDcyLDU1MDgwLDU1MDgxLDU1MDgz''@;'; put 'put ''LDU1MDg1LDU1MDkyLDU1MDkzLDU1MDk2LDU1MTAwLDU1MTA4LDU1MTExLDU1MTEzLDU1MTIwLDU1MTIxLDU1MTI0LDU1MTI2LDU1MTI3LDU1MTI4LDU1MTI5LDU1MTM2LDU1MTM3LDU1MTM5LDU1MTQxLDU1MTQ1LDU1MTQ4LDU1MTUyLDU1MTU2LDU1MTY0LDU1MTY1LDU1MTY5LDU1MTc2LDU1''@;'; put 'put ''MTc3LDU1MTgwLDU1MTg0LDU1MTkyLDU1MTkzLDU1MTk1LDU1MTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjAyODUsMjAzMzksMjA1''@;'; put 'put ''NTEsMjA3MjksMjExNTIsMjE0ODcsMjE2MjEsMjE3MzMsMjIwMjUsMjMyMzMsMjM0NzgsMjYyNDcsMjY1NTAsMjY1NTEsMjY2MDcsMjc0NjgsMjk2MzQsMzAxNDYsMzEyOTIsMzM0OTksMzM1NDAsMzQ5MDMsMzQ5NTIsMzUzODIsMzYwNDAsMzYzMDMsMzY2MDMsMzY4MzgsMzkzODEsMjEwNTEs''@;'; put 'put ''MjEzNjQsMjE1MDgsMjQ2ODIsMjQ5MzIsMjc1ODAsMjk2NDcsMzMwNTAsMzUyNTgsMzUyODIsMzgzMDcsMjAzNTUsMjEwMDIsMjI3MTgsMjI5MDQsMjMwMTQsMjQxNzgsMjQxODUsMjUwMzEsMjU1MzYsMjY0MzgsMjY2MDQsMjY3NTEsMjg1NjcsMzAyODYsMzA0NzUsMzA5NjUsMzEyNDAsMzE0''@;'; put 'put ''ODcsMzE3NzcsMzI5MjUsMzMzOTAsMzMzOTMsMzU1NjMsMzgyOTEsMjAwNzUsMjE5MTcsMjYzNTksMjgyMTIsMzA4ODMsMzE0NjksMzM4ODMsMzUwODgsMzQ2MzgsMzg4MjQsMjEyMDgsMjIzNTAsMjI1NzAsMjM4ODQsMjQ4NjMsMjUwMjIsMjUxMjEsMjU5NTQsMjY1NzcsMjcyMDQsMjgxODcs''@;'; put 'put ''Mjk5NzYsMzAxMzEsMzA0MzUsMzA2NDAsMzIwNTgsMzcwMzksMzc5NjksMzc5NzAsNDA4NTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjEyODMsMjM3MjQsMzAwMDIsMzI5ODcsMzc0NDAsMzgyOTYsMjEwODMsMjI1MzYsMjMwMDQsMjM3MTMsMjM4MzEsMjQyNDcsMjQzNzgsMjQzOTQsMjQ5NTEsMjc3NDMsMzAwNzQsMzAwODYsMzE5NjgsMzIxMTUsMzIxNzcs''@;'; put 'put ''MzI2NTIsMzMxMDgsMzMzMTMsMzQxOTMsMzUxMzcsMzU2MTEsMzc2MjgsMzg0NzcsNDAwMDcsMjAxNzEsMjAyMTUsMjA0OTEsMjA5NzcsMjI2MDcsMjQ4ODcsMjQ4OTQsMjQ5MzYsMjU5MTMsMjcxMTQsMjg0MzMsMzAxMTcsMzAzNDIsMzA0MjIsMzE2MjMsMzM0NDUsMzM5OTUsNjM3NDQsMzc3''@;'; put 'put ''OTksMzgyODMsMjE4ODgsMjM0NTgsMjIzNTMsNjM3NDUsMzE5MjMsMzI2OTcsMzczMDEsMjA1MjAsMjE0MzUsMjM2MjEsMjQwNDAsMjUyOTgsMjU0NTQsMjU4MTgsMjU4MzEsMjgxOTIsMjg4NDQsMzEwNjcsMzYzMTcsMzYzODIsNjM3NDYsMzY5ODksMzc0NDUsMzc2MjQsMjAwOTQsMjAyMTQs''@;'; put 'put ''MjA1ODEsMjQwNjIsMjQzMTQsMjQ4MzgsMjY5NjcsMzMxMzcsMzQzODgsMzY0MjMsMzc3NDksMzk0NjcsMjAwNjIsMjA2MjUsMjY0ODAsMjY2ODgsMjA3NDUsMjExMzMsMjExMzgsMjcyOTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzA2NTIsMzczOTIsNDA2NjAsMjExNjMsMjQ2MjMsMzY4NTAsMjA1NTIsMjUwMDEsMjU1ODEsMjU4MDIsMjY2ODQsMjcyNjgs''@;'; put 'put ''Mjg2MDgsMzMxNjAsMzUyMzMsMzg1NDgsMjI1MzMsMjkzMDksMjkzNTYsMjk5NTYsMzIxMjEsMzIzNjUsMzI5MzcsMzUyMTEsMzU3MDAsMzY5NjMsNDAyNzMsMjUyMjUsMjc3NzAsMjg1MDAsMzIwODAsMzI1NzAsMzUzNjMsMjA4NjAsMjQ5MDYsMzE2NDUsMzU2MDksMzc0NjMsMzc3NzIsMjAx''@;'; put 'put ''NDAsMjA0MzUsMjA1MTAsMjA2NzAsMjA3NDIsMjExODUsMjExOTcsMjEzNzUsMjIzODQsMjI2NTksMjQyMTgsMjQ0NjUsMjQ5NTAsMjUwMDQsMjU4MDYsMjU5NjQsMjYyMjMsMjYyOTksMjYzNTYsMjY3NzUsMjgwMzksMjg4MDUsMjg5MTMsMjk4NTUsMjk4NjEsMjk4OTgsMzAxNjksMzA4Mjgs''@;'; put 'put ''MzA5NTYsMzE0NTUsMzE0NzgsMzIwNjksMzIxNDcsMzI3ODksMzI4MzEsMzMwNTEsMzM2ODYsMzU2ODYsMzY2MjksMzY4ODUsMzc4NTcsMzg5MTUsMzg5NjgsMzk1MTQsMzk5MTIsMjA0MTgsMjE4NDMsMjI1ODYsMjI4NjUsMjMzOTUsMjM2MjIsMjQ3NjAsMjUxMDYsMjY2OTAsMjY4MDAsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4NTYsMjgzMzAsMzAwMjgs''@;'; put 'put ''MzAzMjgsMzA5MjYsMzEyOTMsMzE5OTUsMzIzNjMsMzIzODAsMzUzMzYsMzU0ODksMzU5MDMsMzg1NDIsNDAzODgsMjE0NzYsMjE0ODEsMjE1NzgsMjE2MTcsMjIyNjYsMjI5OTMsMjMzOTYsMjM2MTEsMjQyMzUsMjUzMzUsMjU5MTEsMjU5MjUsMjU5NzAsMjYyNzIsMjY1NDMsMjcwNzMsMjc4''@;'; put 'put ''MzcsMzAyMDQsMzAzNTIsMzA1OTAsMzEyOTUsMzI2NjAsMzI3NzEsMzI5MjksMzMxNjcsMzM1MTAsMzM1MzMsMzM3NzYsMzQyNDEsMzQ4NjUsMzQ5OTYsMzU0OTMsNjM3NDcsMzY3NjQsMzc2NzgsMzg1OTksMzkwMTUsMzk2NDAsNDA3MjMsMjE3NDEsMjYwMTEsMjYzNTQsMjY3NjcsMzEyOTYs''@;'; put 'put ''MzU4OTUsNDAyODgsMjIyNTYsMjIzNzIsMjM4MjUsMjYxMTgsMjY4MDEsMjY4MjksMjg0MTQsMjk3MzYsMzQ5NzQsMzk5MDgsMjc3NTIsNjM3NDgsMzk1OTIsMjAzNzksMjA4NDQsMjA4NDksMjExNTEsMjMzODAsMjQwMzcsMjQ2NTYsMjQ2ODUsMjUzMjksMjU1MTEsMjU5MTUsMjk2NTcsMzEz''@;'; put 'put ''NTQsMzQ0NjcsMzYwMDIsMzg3OTksMjAwMTgsMjM1MjEsMjUwOTYsMjY1MjQsMjk5MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzExODUsMzM3NDcsMzU0NjMsMzU1MDYsMzYzMjgsMzY5NDIsMzc3MDcsMzg5ODIsMjQyNzUsMjcxMTIsMzQzMDMsMzcxMDEsNjM3NDksMjA4OTYsMjM0NDgsMjM1MzIsMjQ5MzEsMjY4NzQsMjc0NTQsMjg3NDgsMjk3NDMsMjk5''@;'; put 'put ''MTIsMzE2NDksMzI1OTIsMzM3MzMsMzUyNjQsMzYwMTEsMzgzNjQsMzkyMDgsMjEwMzgsMjQ2NjksMjUzMjQsMzY4NjYsMjAzNjIsMjA4MDksMjEyODEsMjI3NDUsMjQyOTEsMjYzMzYsMjc5NjAsMjg4MjYsMjkzNzgsMjk2NTQsMzE1NjgsMzMwMDksMzc5NzksMjEzNTAsMjU0OTksMzI2MTks''@;'; put 'put ''MjAwNTQsMjA2MDgsMjI2MDIsMjI3NTAsMjQ2MTgsMjQ4NzEsMjUyOTYsMjcwODgsMzk3NDUsMjM0MzksMzIwMjQsMzI5NDUsMzY3MDMsMjAxMzIsMjA2ODksMjE2NzYsMjE5MzIsMjMzMDgsMjM5NjgsMjQwMzksMjU4OTgsMjU5MzQsMjY2NTcsMjcyMTEsMjk0MDksMzAzNTAsMzA3MDMsMzIw''@;'; put 'put ''OTQsMzI3NjEsMzMxODQsMzQxMjYsMzQ1MjcsMzY2MTEsMzY2ODYsMzcwNjYsMzkxNzEsMzk1MDksMzk4NTEsMTk5OTIsMjAwMzcsMjAwNjEsMjAxNjcsMjA0NjUsMjA4NTUsMjEyNDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjEzMTIsMjE0NzUsMjE0NzcsMjE2NDYsMjIwMzYsMjIzODksMjI0MzQsMjM0OTUsMjM5NDMsMjQyNzIsMjUwODQsMjUzMDQsMjU5''@;'; put 'put ''MzcsMjY1NTIsMjY2MDEsMjcwODMsMjc0NzIsMjc1OTAsMjc2MjgsMjc3MTQsMjgzMTcsMjg3OTIsMjkzOTksMjk1OTAsMjk2OTksMzA2NTUsMzA2OTcsMzEzNTAsMzIxMjcsMzI3NzcsMzMyNzYsMzMyODUsMzMyOTAsMzM1MDMsMzQ5MTQsMzU2MzUsMzYwOTIsMzY1NDQsMzY4ODEsMzcwNDEs''@;'; put 'put ''Mzc0NzYsMzc1NTgsMzkzNzgsMzk0OTMsNDAxNjksNDA0MDcsNDA4NjAsMjIyODMsMjM2MTYsMzM3MzgsMzg4MTYsMzg4MjcsNDA2MjgsMjE1MzEsMzEzODQsMzI2NzYsMzUwMzMsMzY1NTcsMzcwODksMjI1MjgsMjM2MjQsMjU0OTYsMzEzOTEsMjM0NzAsMjQzMzksMzEzNTMsMzE0MDYsMzM0''@;'; put 'put ''MjIsMzY1MjQsMjA1MTgsMjEwNDgsMjEyNDAsMjEzNjcsMjIyODAsMjUzMzEsMjU0NTgsMjc0MDIsMjgwOTksMzA1MTksMjE0MTMsMjk1MjcsMzQxNTIsMzY0NzAsMzgzNTcsMjY0MjYsMjczMzEsMjg1MjgsMzU0MzcsMzY1NTYsMzkyNDMsNjM3NTAsMjYyMzEsMjc1MTIsMzYwMjAsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzk3NDAsNjM3NTEsMjE0ODMsMjIz''@;'; put 'put ''MTcsMjI4NjIsMjU1NDIsMjcxMzEsMjk2NzQsMzA3ODksMzE0MTgsMzE0MjksMzE5OTgsMzM5MDksMzUyMTUsMzYyMTEsMzY5MTcsMzgzMTIsMjEyNDMsMjIzNDMsMzAwMjMsMzE1ODQsMzM3NDAsMzc0MDYsNjM3NTIsMjcyMjQsMjA4MTEsMjEwNjcsMjExMjcsMjUxMTksMjY4NDAsMjY5OTcs''@;'; put 'put ''Mzg1NTMsMjA2NzcsMjExNTYsMjEyMjAsMjUwMjcsMjYwMjAsMjY2ODEsMjcxMzUsMjk4MjIsMzE1NjMsMzM0NjUsMzM3NzEsMzUyNTAsMzU2NDEsMzY4MTcsMzkyNDEsNjM3NTMsMjAxNzAsMjI5MzUsMjU4MTAsMjYxMjksMjcyNzgsMjk3NDgsMzExMDUsMzExNjUsMzM0NDksMzQ5NDIsMzQ5''@;'; put 'put ''NDMsMzUxNjcsNjM3NTQsMzc2NzAsMjAyMzUsMjE0NTAsMjQ2MTMsMjUyMDEsMjc3NjIsMzIwMjYsMzIxMDIsMjAxMjAsMjA4MzQsMzA2ODQsMzI5NDMsMjAyMjUsMjAyMzgsMjA4NTQsMjA4NjQsMjE5ODAsMjIxMjAsMjIzMzEsMjI1MjIsMjI1MjQsMjI4MDQsMjI4NTUsMjI5MzEsMjM0OTIs''@;'; put 'put ''MjM2OTYsMjM4MjIsMjQwNDksMjQxOTAsMjQ1MjQsMjUyMTYsMjYwNzEsMjYwODMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjYzOTgsMjYzOTksMjY0NjIsMjY4MjcsMjY4MjAsMjcyMzEsMjc0NTAsMjc2ODMsMjc3NzMsMjc3NzgsMjgxMDMsMjk1OTIsMjk3MzQsMjk3MzgsMjk4MjYsMjk4NTksMzAwNzIsMzAwNzksMzA4NDksMzA5NTksMzEwNDEsMzEwNDcs''@;'; put 'put ''MzEwNDgsMzEwOTgsMzE2MzcsMzJlMywzMjE4NiwzMjY0OCwzMjc3NCwzMjgxMywzMjkwOCwzNTM1MiwzNTY2MywzNTkxMiwzNjIxNSwzNzY2NSwzNzY2OCwzOTEzOCwzOTI0OSwzOTQzOCwzOTQzOSwzOTUyNSw0MDU5NCwzMjIwMiwyMDM0MiwyMTUxMywyNTMyNiwyNjcwOCwzNzMyOSwyMTkz''@;'; put 'put ''MSwyMDc5NCw2Mzc1NSw2Mzc1NiwyMzA2OCwyNTA2Miw2Mzc1NywyNTI5NSwyNTM0Myw2Mzc1OCw2Mzc1OSw2Mzc2MCw2Mzc2MSw2Mzc2Miw2Mzc2MywzNzAyNyw2Mzc2NCw2Mzc2NSw2Mzc2Niw2Mzc2Nyw2Mzc2OCwzNTU4Miw2Mzc2OSw2Mzc3MCw2Mzc3MSw2Mzc3MiwyNjI2Miw2Mzc3Mywy''@;'; put 'put ''OTAxNCw2Mzc3NCw2Mzc3NSwzODYyNyw2Mzc3NiwyNTQyMywyNTQ2NiwyMTMzNSw2Mzc3NywyNjUxMSwyNjk3NiwyODI3NSw2Mzc3OCwzMDAwNyw2Mzc3OSw2Mzc4MCw2Mzc4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjAxMyw2Mzc4Miw2Mzc4MywzNDkzMCwyMjIxOCwyMzA2NCw2Mzc4NCw2Mzc4NSw2Mzc4Niw2Mzc4Nyw2Mzc4OCwyMDAzNSw2Mzc4OSwy''@;'; put 'put ''MDgzOSwyMjg1NiwyNjYwOCwzMjc4NCw2Mzc5MCwyMjg5OSwyNDE4MCwyNTc1NCwzMTE3OCwyNDU2NSwyNDY4NCwyNTI4OCwyNTQ2NywyMzUyNywyMzUxMSwyMTE2Miw2Mzc5MSwyMjkwMCwyNDM2MSwyNDU5NCw2Mzc5Miw2Mzc5Myw2Mzc5NCwyOTc4NSw2Mzc5NSw2Mzc5Niw2Mzc5Nyw2Mzc5''@;'; put 'put ''OCw2Mzc5OSw2MzgwMCwzOTM3Nyw2MzgwMSw2MzgwMiw2MzgwMyw2MzgwNCw2MzgwNSw2MzgwNiw2MzgwNyw2MzgwOCw2MzgwOSw2MzgxMCw2MzgxMSwyODYxMSw2MzgxMiw2MzgxMywzMzIxNSwzNjc4NiwyNDgxNyw2MzgxNCw2MzgxNSwzMzEyNiw2MzgxNiw2MzgxNywyMzYxNSw2MzgxOCw2''@;'; put 'put ''MzgxOSw2MzgyMCw2MzgyMSw2MzgyMiw2MzgyMyw2MzgyNCw2MzgyNSwyMzI3MywzNTM2NSwyNjQ5MSwzMjAxNiw2MzgyNiw2MzgyNyw2MzgyOCw2MzgyOSw2MzgzMCw2MzgzMSwzMzAyMSw2MzgzMiw2MzgzMywyMzYxMiwyNzg3NywyMTMxMSwyODM0NiwyMjgxMCwzMzU5MCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDAyNSwyMDE1MCwyMDI5NCwyMTkzNCwy''@;'; put 'put ''MjI5NiwyMjcyNywyNDQwNiwyNjAzOSwyNjA4NiwyNzI2NCwyNzU3MywyODIzNywzMDcwMSwzMTQ3MSwzMTc3NCwzMjIyMiwzNDUwNywzNDk2MiwzNzE3MCwzNzcyMywyNTc4NywyODYwNiwyOTU2MiwzMDEzNiwzNjk0OCwyMTg0NiwyMjM0OSwyNTAxOCwyNTgxMiwyNjMxMSwyODEyOSwyODI1''@;'; put 'put ''MSwyODUyNSwyODYwMSwzMDE5MiwzMjgzNSwzMzIxMywzNDExMywzNTIwMywzNTUyNywzNTY3NCwzNzY2MywyNzc5NSwzMDAzNSwzMTU3MiwzNjM2NywzNjk1NywyMTc3NiwyMjUzMCwyMjYxNiwyNDE2MiwyNTA5NSwyNTc1OCwyNjg0OCwzMDA3MCwzMTk1OCwzNDczOSw0MDY4MCwyMDE5NSwy''@;'; put 'put ''MjQwOCwyMjM4MiwyMjgyMywyMzU2NSwyMzcyOSwyNDExOCwyNDQ1MywyNTE0MCwyNTgyNSwyOTYxOSwzMzI3NCwzNDk1NSwzNjAyNCwzODUzOCw0MDY2NywyMzQyOSwyNDUwMywyNDc1NSwyMDQ5OCwyMDk5MiwyMTA0MCwyMjI5NCwyMjU4MSwyMjYxNSwyMzU2NiwyMzY0OCwyMzc5OCwyMzk0''@;'; put 'put ''NywyNDIzMCwyNDQ2NiwyNDc2NCwyNTM2MSwyNTQ4MSwyNTYyMywyNjY5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg3MywyNzMzMCwyODEyMCwyODE5MywyODM3MiwyODY0NCwyOTE4MiwzMDQyOCwzMDU4NSwzMTE1MywzMTI5MSwzMzc5NiwzNTI0MSwzNjA3NywzNjMzOSwzNjQyNCwzNjg2NywzNjg4NCwzNjk0NywzNzExNywzNzcwOSwzODUxOCwzODg3''@;'; put 'put ''NiwyNzYwMiwyODY3OCwyOTI3MiwyOTM0NiwyOTU0NCwzMDU2MywzMTE2NywzMTcxNiwzMjQxMSwzNTcxMiwyMjY5NywyNDc3NSwyNTk1OCwyNjEwOSwyNjMwMiwyNzc4OCwyODk1OCwyOTEyOSwzNTkzMCwzODkzMSwyMDA3NywzMTM2MSwyMDE4OSwyMDkwOCwyMDk0MSwyMTIwNSwyMTUxNiwy''@;'; put 'put ''NDk5OSwyNjQ4MSwyNjcwNCwyNjg0NywyNzkzNCwyODU0MCwzMDE0MCwzMDY0MywzMTQ2MSwzMzAxMiwzMzg5MSwzNzUwOSwyMDgyOCwyNjAwNywyNjQ2MCwyNjUxNSwzMDE2OCwzMTQzMSwzMzY1MSw2MzgzNCwzNTkxMCwzNjg4NywzODk1NywyMzY2MywzMzIxNiwzMzQzNCwzNjkyOSwzNjk3''@;'; put 'put ''NSwzNzM4OSwyNDQ3MSwyMzk2NSwyNzIyNSwyOTEyOCwzMDMzMSwzMTU2MSwzNDI3NiwzNTU4OCwzNzE1OSwzOTQ3MiwyMTg5NSwyNTA3OCw2MzgzNSwzMDMxMywzMjY0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDM2NywzNDc0NiwzNTA2NCwzNzAwNyw2MzgzNiwyNzkzMSwyODg4OSwyOTY2MiwzMjA5NywzMzg1Myw2MzgzNywzNzIyNiwzOTQwOSw2Mzgz''@;'; put 'put ''OCwyMDA5OCwyMTM2NSwyNzM5NiwyNzQxMCwyODczNCwyOTIxMSwzNDM0OSw0MDQ3OCwyMTA2OCwzNjc3MSwyMzg4OCwyNTgyOSwyNTkwMCwyNzQxNCwyODY1MSwzMTgxMSwzMjQxMiwzNDI1MywzNTE3MiwzNTI2MSwyNTI4OSwzMzI0MCwzNDg0NywyNDI2NiwyNjM5MSwyODAxMCwyOTQzNiwy''@;'; put 'put ''OTcwMSwyOTgwNywzNDY5MCwzNzA4NiwyMDM1OCwyMzgyMSwyNDQ4MCwzMzgwMiwyMDkxOSwyNTUwNCwzMDA1MywyMDE0MiwyMDQ4NiwyMDg0MSwyMDkzNywyNjc1MywyNzE1MywzMTkxOCwzMTkyMSwzMTk3NSwzMzM5MSwzNTUzOCwzNjYzNSwzNzMyNywyMDQwNiwyMDc5MSwyMTIzNywyMTU3''@;'; put 'put ''MCwyNDMwMCwyNDk0MiwyNTE1MCwyNjA1MywyNzM1NCwyODY3MCwzMTAxOCwzNDI2OCwzNDg1MSwzODMxNywzOTUyMiwzOTUzMCw0MDU5OSw0MDY1NCwyMTE0NywyNjMxMCwyNzUxMSwyODcwMSwzMTAxOSwzNjcwNiwzODcyMiwyNDk3NiwyNTA4OCwyNTg5MSwyODQ1MSxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwMSwyOTgzMywzMjI0NCwzMjg3OSwzNDAz''@;'; put 'put ''MCwzNjY0NiwzNjg5OSwzNzcwNiwyMDkyNSwyMTAxNSwyMTE1NSwyNzkxNiwyODg3MiwzNTAxMCwyNDI2NSwyNTk4NiwyNzU2NiwyODYxMCwzMTgwNiwyOTU1NywyMDE5NiwyMDI3OCwyMjI2NSw2MzgzOSwyMzczOCwyMzk5NCwyNDYwNCwyOTYxOCwzMTUzMywzMjY2NiwzMjcxOCwzMjgzOCwz''@;'; put 'put ''Njg5NCwzNzQyOCwzODY0NiwzODcyOCwzODkzNiw0MDgwMSwyMDM2MywyODU4MywzMTE1MCwzNzMwMCwzODU4MywyMTIxNCw2Mzg0MCwyNTczNiwyNTc5NiwyNzM0NywyODUxMCwyODY5NiwyOTIwMCwzMDQzOSwzMjc2OSwzNDMxMCwzNDM5NiwzNjMzNSwzNjYxMywzODcwNiwzOTc5MSw0MDQ0''@;'; put 'put ''Miw0MDU2NSwzMDg2MCwzMTEwMywzMjE2MCwzMzczNywzNzYzNiw0MDU3NSw0MDU5NSwzNTU0MiwyMjc1MSwyNDMyNCwyNjQwNywyODcxMSwyOTkwMywzMTg0MCwzMjg5NCwyMDc2OSwyODcxMiwyOTI4MiwzMDkyMiwzNjAzNCwzNjA1OCwzNjA4NCwzODY0NywyMDEwMiwyMDY5OCwyMzUzNCwy''@;'; put 'put ''NDI3OCwyNjAwOSwyOTEzNCwzMDI3NCwzMDYzNywzMjg0MiwzNDA0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjk4OCwzOTcxOSw0MDg0NSwyMjc0NCwyMzEwNSwyMzY1MCwyNzE1NSwyODEyMiwyODQzMSwzMDI2NywzMjA0NywzMjMxMSwzNDA3OCwzNTEyOCwzNzg2MCwzODQ3NSwyMTEyOSwyNjA2NiwyNjYxMSwyNzA2MCwyNzk2OSwyODMxNiwyODY4Nywy''@;'; put 'put ''OTcwNSwyOTc5MiwzMDA0MSwzMDI0NCwzMDgyNywzNTYyOCwzOTAwNiwyMDg0NSwyNTEzNCwzODUyMCwyMDM3NCwyMDUyMywyMzgzMywyODEzOCwzMjE4NCwzNjY1MCwyNDQ1OSwyNDkwMCwyNjY0Nyw2Mzg0MSwzODUzNCwyMTIwMiwzMjkwNywyMDk1NiwyMDk0MCwyNjk3NCwzMTI2MCwzMjE5''@;'; put 'put ''MCwzMzc3NywzODUxNywyMDQ0MiwyMTAzMywyMTQwMCwyMTUxOSwyMTc3NCwyMzY1MywyNDc0MywyNjQ0NiwyNjc5MiwyODAxMiwyOTMxMywyOTQzMiwyOTcwMiwyOTgyNyw2Mzg0MiwzMDE3OCwzMTg1MiwzMjYzMywzMjY5NiwzMzY3MywzNTAyMywzNTA0MSwzNzMyNCwzNzMyOCwzODYyNiwz''@;'; put 'put ''OTg4MSwyMTUzMywyODU0MiwyOTEzNiwyOTg0OCwzNDI5OCwzNjUyMiwzODU2Myw0MDAyMyw0MDYwNywyNjUxOSwyODEwNywyOTc0NywzMzI1NiwzODY3OCwzMDc2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTQzNSwzMTUyMCwzMTg5MCwyNTcwNSwyOTgwMiwzMDE5NCwzMDkwOCwzMDk1MiwzOTM0MCwzOTc2NCw0MDYzNSwyMzUxOCwyNDE0OSwyODQ0OCwz''@;'; put 'put ''MzE4MCwzMzcwNywzN2UzLDE5OTc1LDIxMzI1LDIzMDgxLDI0MDE4LDI0Mzk4LDI0OTMwLDI1NDA1LDI2MjE3LDI2MzY0LDI4NDE1LDI4NDU5LDI4NzcxLDMwNjIyLDMzODM2LDM0MDY3LDM0ODc1LDM2NjI3LDM5MjM3LDM5OTk1LDIxNzg4LDI1MjczLDI2NDExLDI3ODE5LDMzNTQ1LDM1MTc4''@;'; put 'put ''LDM4Nzc4LDIwMTI5LDIyOTE2LDI0NTM2LDI0NTM3LDI2Mzk1LDMyMTc4LDMyNTk2LDMzNDI2LDMzNTc5LDMzNzI1LDM2NjM4LDM3MDE3LDIyNDc1LDIyOTY5LDIzMTg2LDIzNTA0LDI2MTUxLDI2NTIyLDI2NzU3LDI3NTk5LDI5MDI4LDMyNjI5LDM2MDIzLDM2MDY3LDM2OTkzLDM5NzQ5LDMz''@;'; put 'put ''MDMyLDM1OTc4LDM4NDc2LDM5NDg4LDQwNjEzLDIzMzkxLDI3NjY3LDI5NDY3LDMwNDUwLDMwNDMxLDMzODA0LDIwOTA2LDM1MjE5LDIwODEzLDIwODg1LDIxMTkzLDI2ODI1LDI3Nzk2LDMwNDY4LDMwNDk2LDMyMTkxLDMyMjM2LDM4NzU0LDQwNjI5LDI4MzU3LG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MDY1LDIwOTAxLDIxNTE3LDIxNjI5LDI2MTI2LDI2''@;'; put 'put ''MjY5LDI2OTE5LDI4MzE5LDMwMzk5LDMwNjA5LDMzNTU5LDMzOTg2LDM0NzE5LDM3MjI1LDM3NTI4LDQwMTgwLDM0OTQ2LDIwMzk4LDIwODgyLDIxMjE1LDIyOTgyLDI0MTI1LDI0OTE3LDI1NzIwLDI1NzIxLDI2Mjg2LDI2NTc2LDI3MTY5LDI3NTk3LDI3NjExLDI5Mjc5LDI5MjgxLDI5NzYx''@;'; put 'put ''LDMwNTIwLDMwNjgzLDMyNzkxLDMzNDY4LDMzNTQxLDM1NTg0LDM1NjI0LDM1OTgwLDI2NDA4LDI3NzkyLDI5Mjg3LDMwNDQ2LDMwNTY2LDMxMzAyLDQwMzYxLDI3NTE5LDI3Nzk0LDIyODE4LDI2NDA2LDMzOTQ1LDIxMzU5LDIyNjc1LDIyOTM3LDI0Mjg3LDI1NTUxLDI2MTY0LDI2NDgzLDI4''@;'; put 'put ''MjE4LDI5NDgzLDMxNDQ3LDMzNDk1LDM3NjcyLDIxMjA5LDI0MDQzLDI1MDA2LDI1MDM1LDI1MDk4LDI1Mjg3LDI1NzcxLDI2MDgwLDI2OTY5LDI3NDk0LDI3NTk1LDI4OTYxLDI5Njg3LDMwMDQ1LDMyMzI2LDMzMzEwLDMzNTM4LDM0MTU0LDM1NDkxLDM2MDMxLDM4Njk1LDQwMjg5LDIyNjk2''@;'; put 'put ''LDQwNjY0LDIwNDk3LDIxMDA2LDIxNTYzLDIxODM5LDI1OTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDI3NzY2LDMyMDEwLDMyMDExLDMyODYyLDM0NDQyLDM4MjcyLDM4NjM5LDIxMjQ3LDI3Nzk3LDI5Mjg5LDIxNjE5LDIzMTk0LDIzNjE0LDIzODgzLDI0Mzk2LDI0NDk0LDI2NDEwLDI2ODA2LDI2OTc5LDI4MjIwLDI4MjI4LDMwNDczLDMxODU5LDMyNjU0''@;'; put 'put ''LDM0MTgzLDM1NTk4LDM2ODU1LDM4NzUzLDQwNjkyLDIzNzM1LDI0NzU4LDI0ODQ1LDI1MDAzLDI1OTM1LDI2MTA3LDI2MTA4LDI3NjY1LDI3ODg3LDI5NTk5LDI5NjQxLDMyMjI1LDM4MjkyLDIzNDk0LDM0NTg4LDM1NjAwLDIxMDg1LDIxMzM4LDI1MjkzLDI1NjE1LDI1Nzc4LDI2NDIwLDI3''@;'; put 'put ''MTkyLDI3ODUwLDI5NjMyLDI5ODU0LDMxNjM2LDMxODkzLDMyMjgzLDMzMTYyLDMzMzM0LDM0MTgwLDM2ODQzLDM4NjQ5LDM5MzYxLDIwMjc2LDIxMzIyLDIxNDUzLDIxNDY3LDI1MjkyLDI1NjQ0LDI1ODU2LDI2MDAxLDI3MDc1LDI3ODg2LDI4NTA0LDI5Njc3LDMwMDM2LDMwMjQyLDMwNDM2''@;'; put 'put ''LDMwNDYwLDMwOTI4LDMwOTcxLDMxMDIwLDMyMDcwLDMzMzI0LDM0Nzg0LDM2ODIwLDM4OTMwLDM5MTUxLDIxMTg3LDI1MzAwLDI1NzY1LDI4MTk2LDI4NDk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwMzMyLDM2Mjk5LDM3Mjk3LDM3NDc0LDM5NjYyLDM5NzQ3LDIwNTE1LDIwNjIxLDIyMzQ2LDIyOTUyLDIzNTkyLDI0MTM1LDI0NDM5LDI1MTUxLDI1OTE4''@;'; put 'put ''LDI2MDQxLDI2MDQ5LDI2MTIxLDI2NTA3LDI3MDM2LDI4MzU0LDMwOTE3LDMyMDMzLDMyOTM4LDMzMTUyLDMzMzIzLDMzNDU5LDMzOTUzLDM0NDQ0LDM1MzcwLDM1NjA3LDM3MDMwLDM4NDUwLDQwODQ4LDIwNDkzLDIwNDY3LDYzODQzLDIyNTIxLDI0NDcyLDI1MzA4LDI1NDkwLDI2NDc5LDI4''@;'; put 'put ''MjI3LDI4OTUzLDMwNDAzLDMyOTcyLDMyOTg2LDM1MDYwLDM1MDYxLDM1MDk3LDM2MDY0LDM2NjQ5LDM3MTk3LDM4NTA2LDIwMjcxLDIwMzM2LDI0MDkxLDI2NTc1LDI2NjU4LDMwMzMzLDMwMzM0LDM5NzQ4LDI0MTYxLDI3MTQ2LDI5MDMzLDI5MTQwLDMwMDU4LDYzODQ0LDMyMzIxLDM0MTE1''@;'; put 'put ''LDM0MjgxLDM5MTMyLDIwMjQwLDMxNTY3LDMyNjI0LDM4MzA5LDIwOTYxLDI0MDcwLDI2ODA1LDI3NzEwLDI3NzI2LDI3ODY3LDI5MzU5LDMxNjg0LDMzNTM5LDI3ODYxLDI5NzU0LDIwNzMxLDIxMTI4LDIyNzIxLDI1ODE2LDI3Mjg3LDI5ODYzLDMwMjk0LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwODg3LDM0MzI3LDM4MzcwLDM4NzEzLDYzODQ1LDIxMzQy''@;'; put 'put ''LDI0MzIxLDM1NzIyLDM2Nzc2LDM2NzgzLDM3MDAyLDIxMDI5LDMwNjI5LDQwMDA5LDQwNzEyLDE5OTkzLDIwNDgyLDIwODUzLDIzNjQzLDI0MTgzLDI2MTQyLDI2MTcwLDI2NTY0LDI2ODIxLDI4ODUxLDI5OTUzLDMwMTQ5LDMxMTc3LDMxNDUzLDM2NjQ3LDM5MjAwLDM5NDMyLDIwNDQ1LDIy''@;'; put 'put ''NTYxLDIyNTc3LDIzNTQyLDI2MjIyLDI3NDkzLDI3OTIxLDI4MjgyLDI4NTQxLDI5NjY4LDI5OTk1LDMzNzY5LDM1MDM2LDM1MDkxLDM1Njc2LDM2NjI4LDIwMjM5LDIwNjkzLDIxMjY0LDIxMzQwLDIzNDQzLDI0NDg5LDI2MzgxLDMxMTE5LDMzMTQ1LDMzNTgzLDM0MDY4LDM1MDc5LDM1MjA2''@;'; put 'put ''LDM2NjY1LDM2NjY3LDM5MzMzLDM5OTU0LDI2NDEyLDIwMDg2LDIwNDcyLDIyODU3LDIzNTUzLDIzNzkxLDIzNzkyLDI1NDQ3LDI2ODM0LDI4OTI1LDI5MDkwLDI5NzM5LDMyMjk5LDM0MDI4LDM0NTYyLDM2ODk4LDM3NTg2LDQwMTc5LDE5OTgxLDIwMTg0LDIwNDYzLDIwNjEzLDIxMDc4LDIx''@;'; put 'put ''MTAzLDIxNTQyLDIxNjQ4LDIyNDk2LDIyODI3LDIzMTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDIzMzg2LDIzNDEzLDIzNTAwLDI0MjIwLDYzODQ2LDI1MjA2LDI1OTc1LDI2MDIzLDI4MDE0LDI4MzI1LDI5MjM4LDMxNTI2LDMxODA3LDMyNTY2LDMzMTA0LDMzMTA1LDMzMTc4LDMzMzQ0LDMzNDMzLDMzNzA1LDM1MzMxLDM2ZTMsMzYwNzAsMzYwOTEsMzYy''@;'; put 'put ''MTIsMzYyODIsMzcwOTYsMzczNDAsMzg0MjgsMzg0NjgsMzkzODUsNDAxNjcsMjEyNzEsMjA5OTgsMjE1NDUsMjIxMzIsMjI3MDcsMjI4NjgsMjI4OTQsMjQ1NzUsMjQ5OTYsMjUxOTgsMjYxMjgsMjc3NzQsMjg5NTQsMzA0MDYsMzE4ODEsMzE5NjYsMzIwMjcsMzM0NTIsMzYwMzMsMzg2NDAs''@;'; put 'put ''NjM4NDcsMjAzMTUsMjQzNDMsMjQ0NDcsMjUyODIsMjM4NDksMjYzNzksMjY4NDIsMzA4NDQsMzIzMjMsNDAzMDAsMTk5ODksMjA2MzMsMjEyNjksMjEyOTAsMjEzMjksMjI5MTUsMjMxMzgsMjQxOTksMjQ3NTQsMjQ5NzAsMjUxNjEsMjUyMDksMjZlMywyNjUwMywyNzA0NywyNzYwNCwyNzYw''@;'; put 'put ''NiwyNzYwNywyNzYwOCwyNzgzMiw2Mzg0OCwyOTc0OSwzMDIwMiwzMDczOCwzMDg2NSwzMTE4OSwzMTE5MiwzMTg3NSwzMjIwMywzMjczNywzMjkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMzA4NiwzMzIxOCwzMzc3OCwzNDU4NiwzNTA0OCwzNTUxMywzNTY5MiwzNjAyNywzNzE0NSwzODc1MCwzOTEzMSw0MDc2MywyMjE4OCwyMzMzOCwyNDQyOCwyNTk5''@;'; put 'put ''NiwyNzMxNSwyNzU2NywyNzk5NiwyODY1NywyODY5MywyOTI3NywyOTYxMywzNjAwNywzNjA1MSwzODk3MSwyNDk3NywyNzcwMywzMjg1NiwzOTQyNSwyMDA0NSwyMDEwNywyMDEyMywyMDE4MSwyMDI4MiwyMDI4NCwyMDM1MSwyMDQ0NywyMDczNSwyMTQ5MCwyMTQ5NiwyMTc2NiwyMTk4Nywy''@;'; put 'put ''MjIzNSwyMjc2MywyMjg4MiwyMzA1NywyMzUzMSwyMzU0NiwyMzU1NiwyNDA1MSwyNDEwNywyNDQ3MywyNDYwNSwyNTQ0OCwyNjAxMiwyNjAzMSwyNjYxNCwyNjYxOSwyNjc5NywyNzUxNSwyNzgwMSwyNzg2MywyODE5NSwyODY4MSwyOTUwOSwzMDcyMiwzMTAzOCwzMTA0MCwzMTA3MiwzMTE2''@;'; put 'put ''OSwzMTcyMSwzMjAyMywzMjExNCwzMjkwMiwzMzI5MywzMzY3OCwzNDAwMSwzNDUwMywzNTAzOSwzNTQwOCwzNTQyMiwzNTYxMywzNjA2MCwzNjE5OCwzNjc4MSwzNzAzNCwzOTE2NCwzOTM5MSw0MDYwNSwyMTA2Niw2Mzg0OSwyNjM4OCw2Mzg1MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDYzMiwyMTAzNCwyMzY2NSwyNTk1NSwyNzczMywyOTY0MiwyOTk4''@;'; put 'put ''NywzMDEwOSwzMTYzOSwzMzk0OCwzNzI0MCwzODcwNCwyMDA4NywyNTc0NiwyNzU3OCwyOTAyMiwzNDIxNywxOTk3Nyw2Mzg1MSwyNjQ0MSwyNjg2MiwyODE4MywzMzQzOSwzNDA3MiwzNDkyMywyNTU5MSwyODU0NSwzNzM5NCwzOTA4NywxOTk3OCwyMDY2MywyMDY4NywyMDc2NywyMTgzMCwy''@;'; put 'put ''MTkzMCwyMjAzOSwyMzM2MCwyMzU3NywyMzc3NiwyNDEyMCwyNDIwMiwyNDIyNCwyNDI1OCwyNDgxOSwyNjcwNSwyNzIzMywyODI0OCwyOTI0NSwyOTI0OCwyOTM3NiwzMDQ1NiwzMTA3NywzMTY2NSwzMjcyNCwzNTA1OSwzNTMxNiwzNTQ0MywzNTkzNywzNjA2MiwzODY4NCwyMjYyMiwyOTg4''@;'; put 'put ''NSwzNjA5MywyMTk1OSw2Mzg1MiwzMTMyOSwzMjAzNCwzMzM5NCwyOTI5OCwyOTk4MywyOTk4OSw2Mzg1MywzMTUxMywyMjY2MSwyMjc3OSwyMzk5NiwyNDIwNywyNDI0NiwyNDQ2NCwyNDY2MSwyNTIzNCwyNTQ3MSwyNTkzMywyNjI1NywyNjMyOSwyNjM2MCwyNjY0NiwyNjg2NiwyOTMxMiwy''@;'; put 'put ''OTc5MCwzMTU5OCwzMjExMCwzMjIxNCwzMjYyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCwzMjk5NywzMzI5OCwzNDIyMywzNTE5OSwzNTQ3NSwzNjg5MywzNzYwNCw0MDY1Myw0MDczNiwyMjgwNSwyMjg5MywyNDEwOSwyNDc5NiwyNjEzMiwyNjIyNywyNjUxMiwyNzcyOCwyODEwMSwyODUxMSwzMDcwNywzMDg4OSwzMzk5MCwzNzMyMywzNzY3NSwyMDE4NSwy''@;'; put 'put ''MDY4MiwyMDgwOCwyMTg5MiwyMzMwNywyMzQ1OSwyNTE1OSwyNTk4MiwyNjA1OSwyODIxMCwyOTA1MywyOTY5NywyOTc2NCwyOTgzMSwyOTg4NywzMDMxNiwzMTE0NiwzMjIxOCwzMjM0MSwzMjY4MCwzMzE0NiwzMzIwMywzMzMzNywzNDMzMCwzNDc5NiwzNTQ0NSwzNjMyMywzNjk4NCwzNzUy''@;'; put 'put ''MSwzNzkyNSwzOTI0NSwzOTg1NCwyMTM1MiwyMzYzMywyNjk2NCwyNzg0NCwyNzk0NSwyODIwMywzMzI5MiwzNDIwMywzNTEzMSwzNTM3MywzNTQ5OCwzODYzNCw0MDgwNywyMTA4OSwyNjI5NywyNzU3MCwzMjQwNiwzNDgxNCwzNjEwOSwzODI3NSwzODQ5MywyNTg4NSwyODA0MSwyOTE2Niw2''@;'; put 'put ''Mzg1NCwyMjQ3OCwyMjk5NSwyMzQ2OCwyNDYxNSwyNDgyNiwyNTEwNCwyNjE0MywyNjIwNywyOTQ4MSwyOTY4OSwzMDQyNywzMDQ2NSwzMTU5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjg1NCwzMjg4MiwzMzEyNSwzNTQ4OCwzNzI2NiwxOTk5MCwyMTIxOCwyNzUwNiwyNzkyNywzMTIzNywzMTU0NSwzMjA0OCw2Mzg1NSwzNjAxNiwyMTQ4NCwyMjA2Mywy''@;'; put 'put ''MjYwOSwyMzQ3NywyMzU2NywyMzU2OSwyNDAzNCwyNTE1MiwyNTQ3NSwyNTYyMCwyNjE1NywyNjgwMywyNzgzNiwyODA0MCwyODMzNSwyODcwMywyODgzNiwyOTEzOCwyOTk5MCwzMDA5NSwzMDA5NCwzMDIzMywzMTUwNSwzMTcxMiwzMTc4NywzMjAzMiwzMjA1NywzNDA5MiwzNDE1NywzNDMx''@;'; put 'put ''MSwzNTM4MCwzNjg3NywzNjk2MSwzNzA0NSwzNzU1OSwzODkwMiwzOTQ3OSwyMDQzOSwyMzY2MCwyNjQ2MywyODA0OSwzMTkwMywzMjM5NiwzNTYwNiwzNjExOCwzNjg5NSwyMzQwMywyNDA2MSwyNTYxMywzMzk4NCwzNjk1NiwzOTEzNywyOTU3NSwyMzQzNSwyNDczMCwyNjQ5NCwyODEyNiwz''@;'; put 'put ''NTM1OSwzNTQ5NCwzNjg2NSwzODkyNCwyMTA0Nyw2Mzg1NiwyODc1MywzMDg2MiwzNzc4MiwzNDkyOCwzNzMzNSwyMDQ2MiwyMTQ2MywyMjAxMywyMjIzNCwyMjQwMiwyMjc4MSwyMzIzNCwyMzQzMiwyMzcyMywyMzc0NCwyNDEwMSwyNDgzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNTEwMSwyNTE2MywyNTQ4MCwyNTYyOCwyNTkxMCwyNTk3NiwyNzE5Mywy''@;'; put 'put ''NzUzMCwyNzcwMCwyNzkyOSwyODQ2NSwyOTE1OSwyOTQxNywyOTU2MCwyOTcwMywyOTg3NCwzMDI0NiwzMDU2MSwzMTE2OCwzMTMxOSwzMTQ2NiwzMTkyOSwzMjE0MywzMjE3MiwzMjM1MywzMjY3MCwzMzA2NSwzMzU4NSwzMzkzNiwzNDAxMCwzNDI4MiwzNDk2NiwzNTUwNCwzNTcyOCwzNjY2''@;'; put 'put ''NCwzNjkzMCwzNjk5NSwzNzIyOCwzNzUyNiwzNzU2MSwzODUzOSwzODU2NywzODU2OCwzODYxNCwzODY1NiwzODkyMCwzOTMxOCwzOTYzNSwzOTcwNiwyMTQ2MCwyMjY1NCwyMjgwOSwyMzQwOCwyMzQ4NywyODExMywyODUwNiwyOTA4NywyOTcyOSwyOTg4MSwzMjkwMSwzMzc4OSwyNDAzMywy''@;'; put 'put ''NDQ1NSwyNDQ5MCwyNDY0MiwyNjA5MiwyNjY0MiwyNjk5MSwyNzIxOSwyNzUyOSwyNzk1NywyODE0NywyOTY2NywzMDQ2MiwzMDYzNiwzMTU2NSwzMjAyMCwzMzA1OSwzMzMwOCwzMzYwMCwzNDAzNiwzNDE0NywzNTQyNiwzNTUyNCwzNzI1NSwzNzY2MiwzODkxOCwzOTM0OCwyNTEwMCwzNDg5''@;'; put 'put ''OSwzNjg0OCwzNzQ3NywyMzgxNSwyMzg0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCwyMzkxMywyOTc5MSwzMzE4MSwzNDY2NCwyODYyOSwyNTM0MiwzMjcyMiwzNTEyNiwzNTE4NiwxOTk5OCwyMDA1NiwyMDcxMSwyMTIxMywyMTMxOSwyNTIxNSwyNjExOSwzMjM2MSwzNDgyMSwzODQ5NCwyMDM2NSwyMTI3MywyMjA3MCwyMjk4NywyMzIwNCwyMzYwOCwyMzYz''@;'; put 'put ''MCwyMzYyOSwyNDA2NiwyNDMzNywyNDY0MywyNjA0NSwyNjE1OSwyNjE3OCwyNjU1OCwyNjYxMiwyOTQ2OCwzMDY5MCwzMTAzNCwzMjcwOSwzMzk0MCwzMzk5NywzNTIyMiwzNTQzMCwzNTQzMywzNTU1MywzNTkyNSwzNTk2MiwyMjUxNiwyMzUwOCwyNDMzNSwyNDY4NywyNTMyNSwyNjg5Mywy''@;'; put 'put ''NzU0MiwyODI1MiwyOTA2MCwzMTY5OCwzNDY0NSwzNTY3MiwzNjYwNiwzOTEzNSwzOTE2NiwyMDI4MCwyMDM1MywyMDQ0OSwyMTYyNywyMzA3MiwyMzQ4MCwyNDg5MiwyNjAzMiwyNjIxNiwyOTE4MCwzMDAwMywzMTA3MCwzMjA1MSwzMzEwMiwzMzI1MSwzMzY4OCwzNDIxOCwzNDI1NCwzNDU2''@;'; put 'put ''MywzNTMzOCwzNjUyMywzNjc2Myw2Mzg1NywzNjgwNSwyMjgzMywyMzQ2MCwyMzUyNiwyNDcxMywyMzUyOSwyMzU2MywyNDUxNSwyNzc3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg1OCwyODE0NSwyODY4MywyOTk3OCwzMzQ1NSwzNTU3NCwyMDE2MCwyMTMxMyw2Mzg1OSwzODYxNywyNzY2MywyMDEyNiwyMDQyMCwyMDgxOCwyMTg1NCwyMzA3NywyMzc4''@;'; put 'put ''NCwyNTEwNSwyOTI3MywzMzQ2OSwzMzcwNiwzNDU1OCwzNDkwNSwzNTM1NywzODQ2MywzODU5NywzOTE4Nyw0MDIwMSw0MDI4NSwyMjUzOCwyMzczMSwyMzk5NywyNDEzMiwyNDgwMSwyNDg1MywyNTU2OSwyNzEzOCwyODE5NywzNzEyMiwzNzcxNiwzODk5MCwzOTk1Miw0MDgyMywyMzQzMywy''@;'; put 'put ''MzczNiwyNTM1MywyNjE5MSwyNjY5NiwzMDUyNCwzODU5MywzODc5NywzODk5NiwzOTgzOSwyNjAxNywzNTU4NSwzNjU1NSwzODMzMiwyMTgxMywyMzcyMSwyNDAyMiwyNDI0NSwyNjI2MywzMDI4NCwzMzc4MCwzODM0MywyMjczOSwyNTI3NiwyOTM5MCw0MDIzMiwyMDIwOCwyMjgzMCwyNDU5''@;'; put 'put ''MSwyNjE3MSwyNzUyMywzMTIwNyw0MDIzMCwyMTM5NSwyMTY5NiwyMjQ2NywyMzgzMCwyNDg1OSwyNjMyNiwyODA3OSwzMDg2MSwzMzQwNiwzODU1MiwzODcyNCwyMTM4MCwyNTIxMiwyNTQ5NCwyODA4MiwzMjI2NiwzMzA5OSwzODk4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzM4NywzMjU4OCw0MDM2Nyw0MDQ3NCwyMDA2MywyMDUzOSwyMDkxOCwyMjgx''@;'; put 'put ''MiwyNDgyNSwyNTU5MCwyNjkyOCwyOTI0MiwzMjgyMiw2Mzg2MCwzNzMyNiwyNDM2OSw2Mzg2MSw2Mzg2MiwzMjAwNCwzMzUwOSwzMzkwMywzMzk3OSwzNDI3NywzNjQ5Myw2Mzg2MywyMDMzNSw2Mzg2NCw2Mzg2NSwyMjc1NiwyMzM2MywyNDY2NSwyNTU2MiwyNTg4MCwyNTk2NSwyNjI2NCw2''@;'; put 'put ''Mzg2NiwyNjk1NCwyNzE3MSwyNzkxNSwyODY3MywyOTAzNiwzMDE2MiwzMDIyMSwzMTE1NSwzMTM0NCw2Mzg2NywzMjY1MCw2Mzg2OCwzNTE0MCw2Mzg2OSwzNTczMSwzNzMxMiwzODUyNSw2Mzg3MCwzOTE3OCwyMjI3NiwyNDQ4MSwyNjA0NCwyODQxNywzMDIwOCwzMTE0MiwzNTQ4NiwzOTM0''@;'; put 'put ''MSwzOTc3MCw0MDgxMiwyMDc0MCwyNTAxNCwyNTIzMywyNzI3NywzMzIyMiwyMDU0NywyMjU3NiwyNDQyMiwyODkzNywzNTMyOCwzNTU3OCwyMzQyMCwzNDMyNiwyMDQ3NCwyMDc5NiwyMjE5NiwyMjg1MiwyNTUxMywyODE1MywyMzk3OCwyNjk4OSwyMDg3MCwyMDEwNCwyMDMxMyw2Mzg3MSw2''@;'; put 'put ''Mzg3Miw2Mzg3MywyMjkxNCw2Mzg3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw2Mzg3NSwyNzQ4NywyNzc0MSw2Mzg3NiwyOTg3NywzMDk5OCw2Mzg3NywzMzI4NywzMzM0OSwzMzU5MywzNjY3MSwzNjcwMSw2Mzg3OCwzOTE5Miw2Mzg3OSw2Mzg4MCw2Mzg4MSwyMDEzNCw2Mzg4MiwyMjQ5NSwyNDQ0MSwyNjEzMSw2Mzg4Myw2Mzg4NCwzMDEyMywzMjM3Nywz''@;'; put 'put ''NTY5NSw2Mzg4NSwzNjg3MCwzOTUxNSwyMjE4MSwyMjU2NywyMzAzMiwyMzA3MSwyMzQ3Niw2Mzg4NiwyNDMxMCw2Mzg4Nyw2Mzg4OCwyNTQyNCwyNTQwMyw2Mzg4OSwyNjk0MSwyNzc4MywyNzgzOSwyODA0NiwyODA1MSwyODE0OSwyODQzNiw2Mzg5MCwyODg5NSwyODk4MiwyOTAxNyw2Mzg5''@;'; put 'put ''MSwyOTEyMywyOTE0MSw2Mzg5MiwzMDc5OSwzMDgzMSw2Mzg5MywzMTYwNSwzMjIyNyw2Mzg5NCwzMjMwMyw2Mzg5NSwzNDg5MywzNjU3NSw2Mzg5Niw2Mzg5Nyw2Mzg5OCwzNzQ2Nyw2Mzg5OSw0MDE4Miw2MzkwMCw2MzkwMSw2MzkwMiwyNDcwOSwyODAzNyw2MzkwMywyOTEwNSw2MzkwNCw2''@;'; put 'put ''MzkwNSwzODMyMSwyMTQyMSw2MzkwNiw2MzkwNyw2MzkwOCwyNjU3OSw2MzkwOSwyODgxNCwyODk3NiwyOTc0NCwzMzM5OCwzMzQ5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2MzkxMCwzODMzMSwzOTY1Myw0MDU3MywyNjMwOCw2MzkxMSwyOTEyMSwzMzg2NSw2MzkxMiw2MzkxMywyMjYwMyw2MzkxNCw2MzkxNSwyMzk5MiwyNDQzMyw2MzkxNiwyNjE0NCwy''@;'; put 'put ''NjI1NCwyNzAwMSwyNzA1NCwyNzcwNCwyNzg5MSwyODIxNCwyODQ4MSwyODYzNCwyODY5OSwyODcxOSwyOTAwOCwyOTE1MSwyOTU1Miw2MzkxNywyOTc4Nyw2MzkxOCwyOTkwOCwzMDQwOCwzMTMxMCwzMjQwMyw2MzkxOSw2MzkyMCwzMzUyMSwzNTQyNCwzNjgxNCw2MzkyMSwzNzcwNCw2Mzky''@;'; put 'put ''MiwzODY4MSw2MzkyMyw2MzkyNCwyMDAzNCwyMDUyMiw2MzkyNSwyMWUzLDIxNDczLDI2MzU1LDI3NzU3LDI4NjE4LDI5NDUwLDMwNTkxLDMxMzMwLDMzNDU0LDM0MjY5LDM0MzA2LDYzOTI2LDM1MDI4LDM1NDI3LDM1NzA5LDM1OTQ3LDYzOTI3LDM3NTU1LDYzOTI4LDM4Njc1LDM4OTI4LDIw''@;'; put 'put ''MTE2LDIwMjM3LDIwNDI1LDIwNjU4LDIxMzIwLDIxNTY2LDIxNTU1LDIxOTc4LDIyNjI2LDIyNzE0LDIyODg3LDIzMDY3LDIzNTI0LDI0NzM1LDYzOTI5LDI1MDM0LDI1OTQyLDI2MTExLDI2MjEyLDI2NzkxLDI3NzM4LDI4NTk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4ODc5LDI5MTAwLDI5NTIyLDMxNjEzLDM0NTY4LDM1NDkyLDM5OTg2LDQwNzExLDIz''@;'; put 'put ''NjI3LDI3Nzc5LDI5NTA4LDI5NTc3LDM3NDM0LDI4MzMxLDI5Nzk3LDMwMjM5LDMxMzM3LDMyMjc3LDM0MzE0LDIwODAwLDIyNzI1LDI1NzkzLDI5OTM0LDI5OTczLDMwMzIwLDMyNzA1LDM3MDEzLDM4NjA1LDM5MjUyLDI4MTk4LDI5OTI2LDMxNDAxLDMxNDAyLDMzMjUzLDM0NTIxLDM0Njgw''@;'; put 'put ''LDM1MzU1LDIzMTEzLDIzNDM2LDIzNDUxLDI2Nzg1LDI2ODgwLDI4MDAzLDI5NjA5LDI5NzE1LDI5NzQwLDMwODcxLDMyMjMzLDMyNzQ3LDMzMDQ4LDMzMTA5LDMzNjk0LDM1OTE2LDM4NDQ2LDM4OTI5LDI2MzUyLDI0NDQ4LDI2MTA2LDI2NTA1LDI3NzU0LDI5NTc5LDIwNTI1LDIzMDQzLDI3''@;'; put 'put ''NDk4LDMwNzAyLDIyODA2LDIzOTE2LDI0MDEzLDI5NDc3LDMwMDMxLDYzOTMwLDYzOTMxLDIwNzA5LDIwOTg1LDIyNTc1LDIyODI5LDIyOTM0LDIzMDAyLDIzNTI1LDYzOTMyLDYzOTMzLDIzOTcwLDI1MzAzLDI1NjIyLDI1NzQ3LDI1ODU0LDYzOTM0LDI2MzMyLDYzOTM1LDI3MjA4LDYzOTM2''@;'; put 'put ''LDI5MTgzLDI5Nzk2LDYzOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDMxMzY4LDMxNDA3LDMyMzI3LDMyMzUwLDMyNzY4LDMzMTM2LDYzOTM4LDM0Nzk5LDM1MjAxLDM1NjE2LDM2OTUzLDYzOTM5LDM2OTkyLDM5MjUwLDI0OTU4LDI3NDQyLDI4MDIwLDMyMjg3LDM1MTA5LDM2Nzg1LDIwNDMzLDIwNjUzLDIwODg3LDIxMTkxLDIyNDcxLDIyNjY1LDIzNDgx''@;'; put 'put ''LDI0MjQ4LDI0ODk4LDI3MDI5LDI4MDQ0LDI4MjYzLDI4MzQyLDI5MDc2LDI5Nzk0LDI5OTkyLDI5OTk2LDMyODgzLDMzNTkyLDMzOTkzLDM2MzYyLDM3NzgwLDM3ODU0LDYzOTQwLDIwMTEwLDIwMzA1LDIwNTk4LDIwNzc4LDIxNDQ4LDIxNDUxLDIxNDkxLDIzNDMxLDIzNTA3LDIzNTg4LDI0''@;'; put 'put ''ODU4LDI0OTYyLDI2MTAwLDI5Mjc1LDI5NTkxLDI5NzYwLDMwNDAyLDMxMDU2LDMxMTIxLDMxMTYxLDMyMDA2LDMyNzAxLDMzNDE5LDM0MjYxLDM0Mzk4LDM2ODAyLDM2OTM1LDM3MTA5LDM3MzU0LDM4NTMzLDM4NjMyLDM4NjMzLDIxMjA2LDI0NDIzLDI2MDkzLDI2MTYxLDI2NjcxLDI5MDIw''@;'; put 'put ''LDMxMjg2LDM3MDU3LDM4OTIyLDIwMTEzLDYzOTQxLDI3MjE4LDI3NTUwLDI4NTYwLDI5MDY1LDMyNzkyLDMzNDY0LDM0MTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTM5LDM4NTQ5LDM4NjQyLDM4OTA3LDM0MDc0LDM5NzI5LDIwMTEyLDI5MDY2LDM4NTk2LDIwODAzLDIxNDA3LDIxNzI5LDIyMjkxLDIyMjkwLDIyNDM1LDIzMTk1LDIzMjM2LDIzNDkx''@;'; put 'put ''LDI0NjE2LDI0ODk1LDI1NTg4LDI3NzgxLDI3OTYxLDI4Mjc0LDI4MzA0LDI5MjMyLDI5NTAzLDI5NzgzLDMzNDg5LDM0OTQ1LDM2Njc3LDM2OTYwLDYzOTQyLDM4NDk4LDM5ZTMsNDAyMTksMjYzNzYsMzYyMzQsMzc0NzAsMjAzMDEsMjA1NTMsMjA3MDIsMjEzNjEsMjIyODUsMjI5OTYsMjMw''@;'; put 'put ''NDEsMjM1NjEsMjQ5NDQsMjYyNTYsMjgyMDUsMjkyMzQsMjk3NzEsMzIyMzksMzI5NjMsMzM4MDYsMzM4OTQsMzQxMTEsMzQ2NTUsMzQ5MDcsMzUwOTYsMzU1ODYsMzY5NDksMzg4NTksMzk3NTksMjAwODMsMjAzNjksMjA3NTQsMjA4NDIsNjM5NDMsMjE4MDcsMjE5MjksMjM0MTgsMjM0NjEs''@;'; put 'put ''MjQxODgsMjQxODksMjQyNTQsMjQ3MzYsMjQ3OTksMjQ4NDAsMjQ4NDEsMjU1NDAsMjU5MTIsMjYzNzcsNjM5NDQsMjY1ODAsMjY1ODYsNjM5NDUsMjY5NzcsMjY5NzgsMjc4MzMsMjc5NDMsNjM5NDYsMjgyMTYsNjM5NDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjg2NDEsMjk0OTQsMjk0OTUsNjM5NDgsMjk3ODgsMzAwMDEsNjM5NDksMzAyOTAsNjM5NTAs''@;'; put 'put ''NjM5NTEsMzIxNzMsMzMyNzgsMzM4NDgsMzUwMjksMzU0ODAsMzU1NDcsMzU1NjUsMzY0MDAsMzY0MTgsMzY5MzgsMzY5MjYsMzY5ODYsMzcxOTMsMzczMjEsMzc3NDIsNjM5NTIsNjM5NTMsMjI1MzcsNjM5NTQsMjc2MDMsMzI5MDUsMzI5NDYsNjM5NTUsNjM5NTYsMjA4MDEsMjI4OTEsMjM2''@;'; put 'put ''MDksNjM5NTcsNjM5NTgsMjg1MTYsMjk2MDcsMzI5OTYsMzYxMDMsNjM5NTksMzczOTksMzgyODcsNjM5NjAsNjM5NjEsNjM5NjIsNjM5NjMsMzI4OTUsMjUxMDIsMjg3MDAsMzIxMDQsMzQ3MDEsNjM5NjQsMjI0MzIsMjQ2ODEsMjQ5MDMsMjc1NzUsMzU1MTgsMzc1MDQsMzg1NzcsMjAwNTcs''@;'; put 'put ''MjE1MzUsMjgxMzksMzQwOTMsMzg1MTIsMzg4OTksMzkxNTAsMjU1NTgsMjc4NzUsMzcwMDksMjA5NTcsMjUwMzMsMzMyMTAsNDA0NDEsMjAzODEsMjA1MDYsMjA3MzYsMjM0NTIsMjQ4NDcsMjUwODcsMjU4MzYsMjY4ODUsMjc1ODksMzAwOTcsMzA2OTEsMzI2ODEsMzMzODAsMzQxOTEsMzQ4''@;'; put 'put ''MTEsMzQ5MTUsMzU1MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''MzU2OTYsMzcyOTEsMjAxMDgsMjAxOTcsMjAyMzQsNjM5NjUsNjM5NjYsMjI4MzksMjMwMTYsNjM5NjcsMjQwNTAsMjQzNDcsMjQ0MTEsMjQ2MDksNjM5NjgsNjM5NjksNjM5NzAsNjM5NzEsMjkyNDYsMjk2NjksNjM5NzIsMzAwNjQsMzAxNTcsNjM5NzMsMzEyMjcsNjM5NzQsMzI3ODAsMzI4''@;'; put 'put ''MTksMzI5MDAsMzM1MDUsMzM2MTcsNjM5NzUsNjM5NzYsMzYwMjksMzYwMTksMzY5OTksNjM5NzcsNjM5NzgsMzkxNTYsMzkxODAsNjM5NzksNjM5ODAsMjg3MjcsMzA0MTAsMzI3MTQsMzI3MTYsMzI3NjQsMzU2MTAsMjAxNTQsMjAxNjEsMjA5OTUsMjEzNjAsNjM5ODEsMjE2OTMsMjIyNDAs''@;'; put 'put ''MjMwMzUsMjM0OTMsMjQzNDEsMjQ1MjUsMjgyNzAsNjM5ODIsNjM5ODMsMzIxMDYsMzM1ODksNjM5ODQsMzQ0NTEsMzU0NjksNjM5ODUsMzg3NjUsMzg3NzUsNjM5ODYsNjM5ODcsMTk5NjgsMjAzMTQsMjAzNTAsMjI3NzcsMjYwODUsMjgzMjIsMzY5MjAsMzc4MDgsMzkzNTMsMjAyMTksMjI3''@;'; put 'put ''NjQsMjI5MjIsMjMwMDEsMjQ2NDEsNjM5ODgsNjM5ODksMzEyNTIsNjM5OTAsMzM2MTUsMzYwMzUsMjA4MzcsMjEzMTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM5OTEsNjM5OTIsNjM5OTMsMjAxNzMsMjEwOTcsMjMzODEsMzM0NzEsMjAxODAsMjEwNTAsMjE2NzIsMjI5ODUsMjMwMzksMjMzNzYsMjMzODMsMjMzODgsMjQ2NzUsMjQ5MDQsMjgzNjMsMjg4''@;'; put 'put ''MjUsMjkwMzgsMjk1NzQsMjk5NDMsMzAxMzMsMzA5MTMsMzIwNDMsMzI3NzMsMzMyNTgsMzM1NzYsMzQwNzEsMzQyNDksMzU1NjYsMzYwMzksMzg2MDQsMjAzMTYsMjEyNDIsMjIyMDQsMjYwMjcsMjYxNTIsMjg3OTYsMjg4NTYsMjkyMzcsMzIxODksMzM0MjEsMzcxOTYsMzg1OTIsNDAzMDYs''@;'; put 'put ''MjM0MDksMjY4NTUsMjc1NDQsMjg1MzgsMzA0MzAsMjM2OTcsMjYyODMsMjg1MDcsMzE2NjgsMzE3ODYsMzQ4NzAsMzg2MjAsMTk5NzYsMjAxODMsMjEyODAsMjI1ODAsMjI3MTUsMjI3NjcsMjI4OTIsMjM1NTksMjQxMTUsMjQxOTYsMjQzNzMsMjU0ODQsMjYyOTAsMjY0NTQsMjcxNjcsMjcy''@;'; put 'put ''OTksMjc0MDQsMjg0NzksMjkyNTQsNjM5OTQsMjk1MjAsMjk4MzUsMzE0NTYsMzE5MTEsMzMxNDQsMzMyNDcsMzMyNTUsMzM2NzQsMzM5MDAsMzQwODMsMzQxOTYsMzQyNTUsMzUwMzcsMzYxMTUsMzcyOTIsMzgyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg1NTYsMjA4NzcsMjE3MDUsMjIzMTIsMjM0NzIsMjUxNjUsMjY0NDgsMjY2ODUsMjY3NzEsMjgy''@;'; put 'put ''MjEsMjgzNzEsMjg3OTcsMzIyODksMzUwMDksMzYwMDEsMzY2MTcsNDA3NzksNDA3ODIsMjkyMjksMzE2MzEsMzU1MzMsMzc2NTgsMjAyOTUsMjAzMDIsMjA3ODYsMjE2MzIsMjI5OTIsMjQyMTMsMjUyNjksMjY0ODUsMjY5OTAsMjcxNTksMjc4MjIsMjgxODYsMjk0MDEsMjk0ODIsMzAxNDEs''@;'; put 'put ''MzE2NzIsMzIwNTMsMzM1MTEsMzM3ODUsMzM4NzksMzQyOTUsMzU0MTksMzYwMTUsMzY0ODcsMzY4ODksMzcwNDgsMzg2MDYsNDA3OTksMjEyMTksMjE1MTQsMjMyNjUsMjM0OTAsMjU2ODgsMjU5NzMsMjg0MDQsMjkzODAsNjM5OTUsMzAzNDAsMzEzMDksMzE1MTUsMzE4MjEsMzIzMTgsMzI3''@;'; put 'put ''MzUsMzM2NTksMzU2MjcsMzYwNDIsMzYxOTYsMzYzMjEsMzY0NDcsMzY4NDIsMzY4NTcsMzY5NjksMzc4NDEsMjAyOTEsMjAzNDYsMjA2NTksMjA4NDAsMjA4NTYsMjEwNjksMjEwOTgsMjI2MjUsMjI2NTIsMjI4ODAsMjM1NjAsMjM2MzcsMjQyODMsMjQ3MzEsMjUxMzYsMjY2NDMsMjc1ODMs''@;'; put 'put ''Mjc2NTYsMjg1OTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjkw''@;'; put 'put ''MDYsMjk3MjgsM2U0LDMwMDA4LDMwMDMzLDMwMzIyLDMxNTY0LDMxNjI3LDMxNjYxLDMxNjg2LDMyMzk5LDM1NDM4LDM2NjcwLDM2NjgxLDM3NDM5LDM3NTIzLDM3NjY2LDM3OTMxLDM4NjUxLDM5MDAyLDM5MDE5LDM5MTk4LDIwOTk5LDI1MTMwLDI1MjQwLDI3OTkzLDMwMzA4LDMxNDM0LDMx''@;'; put 'put ''NjgwLDMyMTE4LDIxMzQ0LDIzNzQyLDI0MjE1LDI4NDcyLDI4ODU3LDMxODk2LDM4NjczLDM5ODIyLDQwNjcwLDI1NTA5LDI1NzIyLDM0Njc4LDE5OTY5LDIwMTE3LDIwMTQxLDIwNTcyLDIwNTk3LDIxNTc2LDIyOTc5LDIzNDUwLDI0MTI4LDI0MjM3LDI0MzExLDI0NDQ5LDI0NzczLDI1NDAy''@;'; put 'put ''LDI1OTE5LDI1OTcyLDI2MDYwLDI2MjMwLDI2MjMyLDI2NjIyLDI2OTg0LDI3MjczLDI3NDkxLDI3NzEyLDI4MDk2LDI4MTM2LDI4MTkxLDI4MjU0LDI4NzAyLDI4ODMzLDI5NTgyLDI5NjkzLDMwMDEwLDMwNTU1LDMwODU1LDMxMTE4LDMxMjQzLDMxMzU3LDMxOTM0LDMyMTQyLDMzMzUxLDM1''@;'; put 'put ''MzMwLDM1NTYyLDM1OTk4LDM3MTY1LDM3MTk0LDM3MzM2LDM3NDc4LDM3NTgwLDM3NjY0LDM4NjYyLDM4NzQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NzQ4LDM4OTE0LDQwNzE4LDIxMDQ2LDIxMTM3LDIxODg0LDIyNTY0LDI0MDkzLDI0MzUxLDI0NzE2LDI1NTUyLDI2Nzk5LDI4NjM5LDMxMDg1LDMxNTMyLDMzMjI5LDM0MjM0LDM1MDY5LDM1NTc2LDM2''@;'; put 'put ''NDIwLDM3MjYxLDM4NTAwLDM4NTU1LDM4NzE3LDM4OTg4LDQwNzc4LDIwNDMwLDIwODA2LDIwOTM5LDIxMTYxLDIyMDY2LDI0MzQwLDI0NDI3LDI1NTE0LDI1ODA1LDI2MDg5LDI2MTc3LDI2MzYyLDI2MzYxLDI2Mzk3LDI2NzgxLDI2ODM5LDI3MTMzLDI4NDM3LDI4NTI2LDI5MDMxLDI5MTU3''@;'; put 'put ''LDI5MjI2LDI5ODY2LDMwNTIyLDMxMDYyLDMxMDY2LDMxMTk5LDMxMjY0LDMxMzgxLDMxODk1LDMxOTY3LDMyMDY4LDMyMzY4LDMyOTAzLDM0Mjk5LDM0NDY4LDM1NDEyLDM1NTE5LDM2MjQ5LDM2NDgxLDM2ODk2LDM2OTczLDM3MzQ3LDM4NDU5LDM4NjEzLDQwMTY1LDI2MDYzLDMxNzUxLDM2''@;'; put 'put ''Mjc1LDM3ODI3LDIzMzg0LDIzNTYyLDIxMzMwLDI1MzA1LDI5NDY5LDIwNTE5LDIzNDQ3LDI0NDc4LDI0NzUyLDI0OTM5LDI2ODM3LDI4MTIxLDI5NzQyLDMxMjc4LDMyMDY2LDMyMTU2LDMyMzA1LDMzMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2Mzk0LDM2NDA1LDM3NzU4LDM3OTEyLDIwMzA0LDIyMzUyLDI0MDM4LDI0MjMxLDI1Mzg3LDMyNjE4LDIw''@;'; put 'put ''MDI3LDIwMzAzLDIwMzY3LDIwNTcwLDIzMDA1LDMyOTY0LDIxNjEwLDIxNjA4LDIyMDE0LDIyODYzLDIzNDQ5LDI0MDMwLDI0MjgyLDI2MjA1LDI2NDE3LDI2NjA5LDI2NjY2LDI3ODgwLDI3OTU0LDI4MjM0LDI4NTU3LDI4ODU1LDI5NjY0LDMwMDg3LDMxODIwLDMyMDAyLDMyMDQ0LDMyMTYy''@;'; put 'put ''LDMzMzExLDM0NTIzLDM1Mzg3LDM1NDYxLDM2MjA4LDM2NDkwLDM2NjU5LDM2OTEzLDM3MTk4LDM3MjAyLDM3OTU2LDM5Mzc2LDMxNDgxLDMxOTA5LDIwNDI2LDIwNzM3LDIwOTM0LDIyNDcyLDIzNTM1LDIzODAzLDI2MjAxLDI3MTk3LDI3OTk0LDI4MzEwLDI4NjUyLDI4OTQwLDMwMDYzLDMx''@;'; put 'put ''NDU5LDM0ODUwLDM2ODk3LDM2OTgxLDM4NjAzLDM5NDIzLDMzNTM3LDIwMDEzLDIwMjEwLDM0ODg2LDM3MzI1LDIxMzczLDI3MzU1LDI2OTg3LDI3NzEzLDMzOTE0LDIyNjg2LDI0OTc0LDI2MzY2LDI1MzI3LDI4ODkzLDI5OTY5LDMwMTUxLDMyMzM4LDMzOTc2LDM1NjU3LDM2MTA0LDIwMDQz''@;'; put 'put ''LDIxNDgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjc1LDIy''@;'; put 'put ''MzIwLDIyMzM2LDI0NTM1LDI1MzQ1LDI1MzUxLDI1NzExLDI1OTAzLDI2MDg4LDI2MjM0LDI2NTI1LDI2NTQ3LDI3NDkwLDI3NzQ0LDI3ODAyLDI4NDYwLDMwNjkzLDMwNzU3LDMxMDQ5LDMxMDYzLDMyMDI1LDMyOTMwLDMzMDI2LDMzMjY3LDMzNDM3LDMzNDYzLDM0NTg0LDM1NDY4LDYzOTk2''@;'; put 'put ''LDM2MTAwLDM2Mjg2LDM2OTc4LDMwNDUyLDMxMjU3LDMxMjg3LDMyMzQwLDMyODg3LDIxNzY3LDIxOTcyLDIyNjQ1LDI1MzkxLDI1NjM0LDI2MTg1LDI2MTg3LDI2NzMzLDI3MDM1LDI3NTI0LDI3OTQxLDI4MzM3LDI5NjQ1LDI5ODAwLDI5ODU3LDMwMDQzLDMwMTM3LDMwNDMzLDMwNDk0LDMw''@;'; put 'put ''NjAzLDMxMjA2LDMyMjY1LDMyMjg1LDMzMjc1LDM0MDk1LDM0OTY3LDM1Mzg2LDM2MDQ5LDM2NTg3LDM2Nzg0LDM2OTE0LDM3ODA1LDM4NDk5LDM4NTE1LDM4NjYzLDIwMzU2LDIxNDg5LDIzMDE4LDIzMjQxLDI0MDg5LDI2NzAyLDI5ODk0LDMwMTQyLDMxMjA5LDMxMzc4LDMzMTg3LDM0NTQx''@;'; put 'put ''LDM2MDc0LDM2MzAwLDM2ODQ1LDI2MDE1LDI2Mzg5LDYzOTk3LDIyNTE5LDI4NTAzLDMyMjIxLDM2NjU1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3ODc4LDM4NTk4LDI0NTAxLDI1MDc0LDI4NTQ4LDE5OTg4LDIwMzc2LDIwNTExLDIxNDQ5LDIxOTgzLDIzOTE5LDI0MDQ2LDI3NDI1LDI3NDkyLDMwOTIzLDMxNjQyLDYzOTk4LDM2NDI1LDM2NTU0LDM2OTc0''@;'; put 'put ''LDI1NDE3LDI1NjYyLDMwNTI4LDMxMzY0LDM3Njc5LDM4MDE1LDQwODEwLDI1Nzc2LDI4NTkxLDI5MTU4LDI5ODY0LDI5OTE0LDMxNDI4LDMxNzYyLDMyMzg2LDMxOTIyLDMyNDA4LDM1NzM4LDM2MTA2LDM4MDEzLDM5MTg0LDM5MjQ0LDIxMDQ5LDIzNTE5LDI1ODMwLDI2NDEzLDMyMDQ2LDIw''@;'; put 'put ''NzE3LDIxNDQzLDIyNjQ5LDI0OTIwLDI0OTIxLDI1MDgyLDI2MDI4LDMxNDQ5LDM1NzMwLDM1NzM0LDIwNDg5LDIwNTEzLDIxMTA5LDIxODA5LDIzMTAwLDI0Mjg4LDI0NDMyLDI0ODg0LDI1OTUwLDI2MTI0LDI2MTY2LDI2Mjc0LDI3MDg1LDI4MzU2LDI4NDY2LDI5NDYyLDMwMjQxLDMxMzc5''@;'; put 'put ''LDMzMDgxLDMzMzY5LDMzNzUwLDMzOTgwLDIwNjYxLDIyNTEyLDIzNDg4LDIzNTI4LDI0NDI1LDI1NTA1LDMwNzU4LDMyMTgxLDMzNzU2LDM0MDgxLDM3MzE5LDM3MzY1LDIwODc0LDI2NjEzLDMxNTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MDEyLDIwOTMyLDIyOTcxLDI0NzY1LDM0Mzg5LDIwNTA4LDYzOTk5LDIxMDc2LDIzNjEwLDI0OTU3LDI1MTE0''@;'; put 'put ''LDI1Mjk5LDI1ODQyLDI2MDIxLDI4MzY0LDMwMjQwLDMzMDM0LDM2NDQ4LDM4NDk1LDM4NTg3LDIwMTkxLDIxMzE1LDIxOTEyLDIyODI1LDI0MDI5LDI1Nzk3LDI3ODQ5LDI4MTU0LDI5NTg4LDMxMzU5LDMzMzA3LDM0MjE0LDM2MDY4LDM2MzY4LDM2OTgzLDM3MzUxLDM4MzY5LDM4NDMzLDM4''@;'; put 'put ''ODU0LDIwOTg0LDIxNzQ2LDIxODk0LDI0NTA1LDI1NzY0LDI4NTUyLDMyMTgwLDM2NjM5LDM2Njg1LDM3OTQxLDIwNjgxLDIzNTc0LDI3ODM4LDI4MTU1LDI5OTc5LDMwNjUxLDMxODA1LDMxODQ0LDM1NDQ5LDM1NTIyLDIyNTU4LDIyOTc0LDI0MDg2LDI1NDYzLDI5MjY2LDMwMDkwLDMwNTcx''@;'; put 'put ''LDM1NTQ4LDM2MDI4LDM2NjI2LDI0MzA3LDI2MjI4LDI4MTUyLDMyODkzLDMzNzI5LDM1NTMxLDM4NzM3LDM5ODk0LDY0ZTMsMjEwNTksMjYzNjcsMjgwNTMsMjgzOTksMzIyMjQsMzU1NTgsMzY5MTAsMzY5NTgsMzk2MzYsMjEwMjEsMjExMTksMjE3MzYsMjQ5ODAsMjUyMjAsMjUzMDcsMjY3''@;'; put 'put ''ODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4OTgsMjY5NzAs''@;'; put 'put ''MjcxODksMjg4MTgsMjg5NjYsMzA4MTMsMzA5NzcsMzA5OTAsMzExODYsMzEyNDUsMzI5MTgsMzM0MDAsMzM0OTMsMzM2MDksMzQxMjEsMzU5NzAsMzYyMjksMzcyMTgsMzcyNTksMzcyOTQsMjA0MTksMjIyMjUsMjkxNjUsMzA2NzksMzQ1NjAsMzUzMjAsMjM1NDQsMjQ1MzQsMjY0NDksMzcw''@;'; put 'put ''MzIsMjE0NzQsMjI2MTgsMjM1NDEsMjQ3NDAsMjQ5NjEsMjU2OTYsMzIzMTcsMzI4ODAsMzQwODUsMzc1MDcsMjU3NzQsMjA2NTIsMjM4MjgsMjYzNjgsMjI2ODQsMjUyNzcsMjU1MTIsMjY4OTQsMjdlMywyNzE2NiwyODI2NywzMDM5NCwzMTE3OSwzMzQ2NywzMzgzMywzNTUzNSwzNjI2NCwz''@;'; put 'put ''Njg2MSwzNzEzOCwzNzE5NSwzNzI3NiwzNzY0OCwzNzY1NiwzNzc4NiwzODYxOSwzOTQ3OCwzOTk0OSwxOTk4NSwzMDA0NCwzMTA2OSwzMTQ4MiwzMTU2OSwzMTY4OSwzMjMwMiwzMzk4OCwzNjQ0MSwzNjQ2OCwzNjYwMCwzNjg4MCwyNjE0OSwyNjk0MywyOTc2MywyMDk4NiwyNjQxNCw0MDY2''@;'; put 'put ''OCwyMDgwNSwyNDU0NCwyNzc5OCwzNDgwMiwzNDkwOSwzNDkzNSwyNDc1NiwzMzIwNSwzMzc5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjEwMSwyMTQ2MiwyMTU2MSwyMjA2OCwyMzA5NCwyMzYwMSwyODgxMCwzMjczNiwzMjg1OCwzMzAzMCwzMzI2MSwzNjI1OSwzNzI1NywzOTUxOSw0MDQzNCwyMDU5NiwyMDE2NCwyMTQwOCwyNDgyNywyODIwNCwyMzY1''@;'; put 'put ''MiwyMDM2MCwyMDUxNiwyMTk4OCwyMzc2OSwyNDE1OSwyNDY3NywyNjc3MiwyNzgzNSwyODEwMCwyOTExOCwzMDE2NCwzMDE5NiwzMDMwNSwzMTI1OCwzMTMwNSwzMjE5OSwzMjI1MSwzMjYyMiwzMzI2OCwzNDQ3MywzNjYzNiwzODYwMSwzOTM0Nyw0MDc4NiwyMTA2MywyMTE4OSwzOTE0OSwz''@;'; put 'put ''NTI0MiwxOTk3MSwyNjU3OCwyODQyMiwyMDQwNSwyMzUyMiwyNjUxNywyNzc4NCwyODAyNCwyOTcyMywzMDc1OSwzNzM0MSwzNzc1NiwzNDc1NiwzMTIwNCwzMTI4MSwyNDU1NSwyMDE4MiwyMTY2OCwyMTgyMiwyMjcwMiwyMjk0OSwyNDgxNiwyNTE3MSwyNTMwMiwyNjQyMiwyNjk2NSwzMzMz''@;'; put 'put ''MywzODQ2NCwzOTM0NSwzOTM4OSwyMDUyNCwyMTMzMSwyMTgyOCwyMjM5Niw2NDAwMSwyNTE3Niw2NDAwMiwyNTgyNiwyNjIxOSwyNjU4OSwyODYwOSwyODY1NSwyOTczMCwyOTc1MiwzNTM1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzk0NCwyMTU4NSwyMjAyMiwyMjM3NCwyNDM5MiwyNDk4NiwyNzQ3MCwyODc2MCwyODg0NSwzMjE4NywzNTQ3NywyMjg5''@;'; put 'put ''MCwzMzA2NywyNTUwNiwzMDQ3MiwzMjgyOSwzNjAxMCwyMjYxMiwyNTY0NSwyNzA2NywyMzQ0NSwyNDA4MSwyODI3MSw2NDAwMywzNDE1MywyMDgxMiwyMTQ4OCwyMjgyNiwyNDYwOCwyNDkwNywyNzUyNiwyNzc2MCwyNzg4OCwzMTUxOCwzMjk3NCwzMzQ5MiwzNjI5NCwzNzA0MCwzOTA4OSw2''@;'; put 'put ''NDAwNCwyNTc5OSwyODU4MCwyNTc0NSwyNTg2MCwyMDgxNCwyMTUyMCwyMjMwMywzNTM0MiwyNDkyNywyNjc0Miw2NDAwNSwzMDE3MSwzMTU3MCwzMjExMywzNjg5MCwyMjUzNCwyNzA4NCwzMzE1MSwzNTExNCwzNjg2NCwzODk2OSwyMDYwMCwyMjg3MSwyMjk1NiwyNTIzNywzNjg3OSwzOTcy''@;'; put 'put ''MiwyNDkyNSwyOTMwNSwzODM1OCwyMjM2OSwyMzExMCwyNDA1MiwyNTIyNiwyNTc3MywyNTg1MCwyNjQ4NywyNzg3NCwyNzk2NiwyOTIyOCwyOTc1MCwzMDc3MiwzMjYzMSwzMzQ1MywzNjMxNSwzODkzNSwyMTAyOCwyMjMzOCwyNjQ5NSwyOTI1NiwyOTkyMywzNjAwOSwzNjc3NCwzNzM5Myxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODQ0MiwyMDg0MywyMTQ4''@;'; put 'put ''NSwyNTQyMCwyMDMyOSwyMTc2NCwyNDcyNiwyNTk0MywyNzgwMywyODAzMSwyOTI2MCwyOTQzNywzMTI1NSwzNTIwNywzNTk5NywyNDQyOSwyODU1OCwyODkyMSwzMzE5MiwyNDg0NiwyMDQxNSwyMDU1OSwyNTE1MywyOTI1NSwzMTY4NywzMjIzMiwzMjc0NSwzNjk0MSwzODgyOSwzOTQ0OSwz''@;'; put 'put ''NjAyMiwyMjM3OCwyNDE3OSwyNjU0NCwzMzgwNSwzNTQxMywyMTUzNiwyMzMxOCwyNDE2MywyNDI5MCwyNDMzMCwyNTk4NywzMjk1NCwzNDEwOSwzODI4MSwzODQ5MSwyMDI5NiwyMTI1MywyMTI2MSwyMTI2MywyMTYzOCwyMTc1NCwyMjI3NSwyNDA2NywyNDU5OCwyNTI0MywyNTI2NSwyNTQy''@;'; put 'put ''OSw2NDAwNiwyNzg3MywyODAwNiwzMDEyOSwzMDc3MCwzMjk5MCwzMzA3MSwzMzUwMiwzMzg4OSwzMzk3MCwzNDk1NywzNTA5MCwzNjg3NSwzNzYxMCwzOTE2NSwzOTgyNSwyNDEzMywyNjI5MiwyNjMzMywyODY4OSwyOTE5MCw2NDAwNywyMDQ2OSwyMTExNywyNDQyNiwyNDkxNSwyNjQ1MSwy''@;'; put 'put ''NzE2MSwyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTk2MSwzOTExMSwzOTEwOCwzOTQ5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY5NywzMTI2MywyNjk2MywzNTU3NSwzNTkxNCwzOTA4MCwzOTM0MiwyNDQ0NCwyNTI1OSwzMDEzMCwzMDM4MiwzNDk4NywzNjk5MSwzODQ2NiwyMTMwNSwyNDM4MCwyNDUxNywyNzg1MiwyOTY0NCwzMDA1MCwzMDA5MSwz''@;'; put 'put ''MTU1OCwzMzUzNCwzOTMyNSwyMDA0NywzNjkyNCwxOTk3OSwyMDMwOSwyMTQxNCwyMjc5OSwyNDI2NCwyNjE2MCwyNzgyNywyOTc4MSwzMzY1NSwzNDY2MiwzNjAzMiwzNjk0NCwzODY4NiwzOTk1NywyMjczNywyMzQxNiwzNDM4NCwzNTYwNCw0MDM3MiwyMzUwNiwyNDY4MCwyNDcxNywyNjA5''@;'; put 'put ''NywyNzczNSwyODQ1MCwyODU3OSwyODY5OCwzMjU5NywzMjc1MiwzODI4OSwzODI5MCwzODQ4MCwzODg2NywyMTEwNiwzNjY3NiwyMDk4OSwyMTU0NywyMTY4OCwyMTg1OSwyMTg5OCwyNzMyMywyODA4NSwzMjIxNiwzMzM4MiwzNzUzMiwzODUxOSw0MDU2OSwyMTUxMiwyMTcwNCwzMDQxOCwz''@;'; put 'put ''NDUzMiwzODMwOCwzODM1NiwzODQ5MiwyMDEzMCwyMDIzMywyMzAyMiwyMzI3MCwyNDA1NSwyNDY1OCwyNTIzOSwyNjQ3NywyNjY4OSwyNzc4MiwyODIwNywzMjU2OCwzMjkyMywzMzMyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NDAwOCw2NDAwOSwzODkxNywyMDEzMywyMDU2NSwyMTY4MywyMjQxOSwyMjg3NCwyMzQwMSwyMzQ3NSwyNTAzMiwyNjk5OSwy''@;'; put 'put ''ODAyMywyODcwNywzNDgwOSwzNTI5OSwzNTQ0MiwzNTU1OSwzNjk5NCwzOTQwNSwzOTYwOCwyMTE4MiwyNjY4MCwyMDUwMiwyNDE4NCwyNjQ0NywzMzYwNywzNDg5MiwyMDEzOSwyMTUyMSwyMjE5MCwyOTY3MCwzNzE0MSwzODkxMSwzOTE3NywzOTI1NSwzOTMyMSwyMjA5OSwyMjY4NywzNDM5''@;'; put 'put ''NSwzNTM3NywyNTAxMCwyNzM4MiwyOTU2MywzNjU2MiwyNzQ2MywzODU3MCwzOTUxMSwyMjg2OSwyOTE4NCwzNjIwMywzODc2MSwyMDQzNiwyMzc5NiwyNDM1OCwyNTA4MCwyNjIwMywyNzg4MywyODg0MywyOTU3MiwyOTYyNSwyOTY5NCwzMDUwNSwzMDU0MSwzMjA2NywzMjA5OCwzMjI5MSwz''@;'; put 'put ''MzMzNSwzNDg5OCw2NDAxMCwzNjA2NiwzNzQ0OSwzOTAyMywyMzM3NywzMTM0OCwzNDg4MCwzODkxMywyMzI0NCwyMDQ0OCwyMTMzMiwyMjg0NiwyMzgwNSwyNTQwNiwyODAyNSwyOTQzMywzMzAyOSwzMzAzMSwzMzY5OCwzNzU4MywzODk2MCwyMDEzNiwyMDgwNCwyMTAwOSwyMjQxMSxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDQxOCwyNzg0MiwyODM2Niwy''@;'; put 'put ''ODY3NywyODc1MiwyODg0NywyOTA3NCwyOTY3MywyOTgwMSwzMzYxMCwzNDcyMiwzNDkxMywzNjg3MiwzNzAyNiwzNzc5NSwzOTMzNiwyMDg0NiwyNDQwNywyNDgwMCwyNDkzNSwyNjI5MSwzNDEzNywzNjQyNiwzNzI5NSwzODc5NSwyMDA0NiwyMDExNCwyMTYyOCwyMjc0MSwyMjc3OCwyMjkw''@;'; put 'put ''OSwyMzczMywyNDM1OSwyNTE0MiwyNTE2MCwyNjEyMiwyNjIxNSwyNzYyNywyODAwOSwyODExMSwyODI0NiwyODQwOCwyODU2NCwyODY0MCwyODY0OSwyODc2NSwyOTM5MiwyOTczMywyOTc4NiwyOTkyMCwzMDM1NSwzMTA2OCwzMTk0NiwzMjI4NiwzMjk5MywzMzQ0NiwzMzg5OSwzMzk4Mywz''@;'; put 'put ''NDM4MiwzNDM5OSwzNDY3NiwzNTcwMywzNTk0NiwzNzgwNCwzODkxMiwzOTAxMywyNDc4NSwyNTExMCwzNzIzOSwyMzEzMCwyNjEyNywyODE1MSwyODIyMiwyOTc1OSwzOTc0NiwyNDU3MywyNDc5NCwzMTUwMywyMTcwMCwyNDM0NCwyNzc0MiwyNzg1OSwyNzk0NiwyODg4OCwzMjAwNSwzNDQy''@;'; put 'put ''NSwzNTM0MCw0MDI1MSwyMTI3MCwyMTY0NCwyMzMwMSwyNzE5NCwyODc3OSwzMDA2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTExNywzMTE2NiwzMzQ1NywzMzc3NSwzNTQ0MSwzNTY0OSwzNjAwOCwzODc3Miw2NDAxMSwyNTg0NCwyNTg5OSwzMDkwNiwzMDkwNywzMTMzOSwyMDAyNCwyMTkxNCwyMjg2NCwyMzQ2MiwyNDE4NywyNDczOSwyNTU2MywyNzQ4''@;'; put 'put ''OSwyNjIxMywyNjcwNywyODE4NSwyOTAyOSwyOTg3MiwzMjAwOCwzNjk5NiwzOTUyOSwzOTk3MywyNzk2MywyODM2OSwyOTUwMiwzNTkwNSwzODM0NiwyMDk3NiwyNDE0MCwyNDQ4OCwyNDY1MywyNDgyMiwyNDg4MCwyNDkwOCwyNjE3OSwyNjE4MCwyNzA0NSwyNzg0MSwyODI1NSwyODM2MSwy''@;'; put 'put ''ODUxNCwyOTAwNCwyOTg1MiwzMDM0MywzMTY4MSwzMTc4MywzMzYxOCwzNDY0NywzNjk0NSwzODU0MSw0MDY0MywyMTI5NSwyMjIzOCwyNDMxNSwyNDQ1OCwyNDY3NCwyNDcyNCwyNTA3OSwyNjIxNCwyNjM3MSwyNzI5MiwyODE0MiwyODU5MCwyODc4NCwyOTU0NiwzMjM2MiwzMzIxNCwzMzU4''@;'; put 'put ''OCwzNDUxNiwzNTQ5NiwzNjAzNiwyMTEyMywyOTU1NCwyMzQ0NiwyNzI0MywzNzg5MiwyMTc0MiwyMjE1MCwyMzM4OSwyNTkyOCwyNTk4OSwyNjMxMywyNjc4MywyODA0NSwyODEwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTI0MywzMjk0OCwzNzIzNywzOTUwMSwyMDM5OSwyMDUwNSwyMTQwMiwyMTUxOCwyMTU2NCwyMTg5NywyMTk1NywyNDEyNywyNDQ2''@;'; put 'put ''MCwyNjQyOSwyOTAzMCwyOTY2MSwzNjg2OSwyMTIxMSwyMTIzNSwyMjYyOCwyMjczNCwyODkzMiwyOTA3MSwyOTE3OSwzNDIyNCwzNTM0NywyNjI0OCwzNDIxNiwyMTkyNywyNjI0NCwyOTAwMiwzMzg0MSwyMTMyMSwyMTkxMywyNzU4NSwyNDQwOSwyNDUwOSwyNTU4MiwyNjI0OSwyODk5OSwz''@;'; put 'put ''NTU2OSwzNjYzNyw0MDYzOCwyMDI0MSwyNTY1OCwyODg3NSwzMDA1NCwzNDQwNywyNDY3NiwzNTY2Miw0MDQ0MCwyMDgwNywyMDk4MiwyMTI1NiwyNzk1OCwzMzAxNiw0MDY1NywyNjEzMywyNzQyNywyODgyNCwzMDE2NSwyMTUwNywyMzY3MywzMjAwNywzNTM1MCwyNzQyNCwyNzQ1MywyNzQ2''@;'; put 'put ''MiwyMTU2MCwyNDY4OCwyNzk2NSwzMjcyNSwzMzI4OCwyMDY5NCwyMDk1OCwyMTkxNiwyMjEyMywyMjIyMSwyMzAyMCwyMzMwNSwyNDA3NiwyNDk4NSwyNDk4NCwyNTEzNywyNjIwNiwyNjM0MiwyOTA4MSwyOTExMywyOTExNCwyOTM1MSwzMTE0MywzMTIzMiwzMjY5MCwzNTQ0MCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxnYjE4MDMwOlsxOTk3MCwxOTk3MiwxOTk3MywxOTk3NCwxOTk4MywxOTk4Niwx''@;'; put 'put ''OTk5MSwxOTk5OSwyZTQsMjAwMDEsMjAwMDMsMjAwMDYsMjAwMDksMjAwMTQsMjAwMTUsMjAwMTcsMjAwMTksMjAwMjEsMjAwMjMsMjAwMjgsMjAwMzIsMjAwMzMsMjAwMzQsMjAwMzYsMjAwMzgsMjAwNDIsMjAwNDksMjAwNTMsMjAwNTUsMjAwNTgsMjAwNTksMjAwNjYsMjAwNjcsMjAwNjgs''@;'; put 'put ''MjAwNjksMjAwNzEsMjAwNzIsMjAwNzQsMjAwNzUsMjAwNzYsMjAwNzcsMjAwNzgsMjAwNzksMjAwODIsMjAwODQsMjAwODUsMjAwODYsMjAwODcsMjAwODgsMjAwODksMjAwOTAsMjAwOTEsMjAwOTIsMjAwOTMsMjAwOTUsMjAwOTYsMjAwOTcsMjAwOTgsMjAwOTksMjAxMDAsMjAxMDEsMjAx''@;'; put 'put ''MDMsMjAxMDYsMjAxMTIsMjAxMTgsMjAxMTksMjAxMjEsMjAxMjQsMjAxMjUsMjAxMjYsMjAxMzEsMjAxMzgsMjAxNDMsMjAxNDQsMjAxNDUsMjAxNDgsMjAxNTAsMjAxNTEsMjAxNTIsMjAxNTMsMjAxNTYsMjAxNTcsMjAxNTgsMjAxNjgsMjAxNzIsMjAxNzUsMjAxNzYsMjAxNzgsMjAxODYs''@;'; put 'put ''MjAxODcsMjAxODgsMjAxOTIsMjAxOTQsMjAxOTgsMjAxOTksMjAyMDEsMjAyMDUsMjAyMDYsMjAyMDcsMjAyMDksMjAyMTIsMjAyMTYsMjAyMTcsMjAyMTgsMjAyMjAsMjAyMjIsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMjgsMjAyMjksMjAyMzAsMjAyMzEsMjAyMzIsMjAyMzUsMjAyMzYsMjAy''@;'; put 'put ''NDIsMjAyNDMsMjAyNDQsMjAyNDUsMjAyNDYsMjAyNTIsMjAyNTMsMjAyNTcsMjAyNTksMjAyNjQsMjAyNjUsMjAyNjgsMjAyNjksMjAyNzAsMjAyNzMsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODcsMjAyODgsMjAyODksMjAyOTAsMjAyOTIsMjAyOTMsMjAyOTUs''@;'; put 'put ''MjAyOTYsMjAyOTcsMjAyOTgsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMjEsMjAzMjIsMjAzMjYsMjAzMjgsMjAzMzAsMjAzMzEsMjAzMzMsMjAzMzQsMjAzMzcsMjAzMzgsMjAzNDEsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTIsMjAzNTMsMjAzNTQsMjAz''@;'; put 'put ''NTcsMjAzNTgsMjAzNTksMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAzNzMsMjAzNzQsMjAzNzYsMjAzNzcsMjAzNzgsMjAzODAsMjAzODIsMjAzODMsMjAzODUsMjAzODYsMjAzODgsMjAzOTUsMjAzOTcsMjA0MDAsMjA0MDEsMjA0MDIsMjA0MDMsMjA0MDQsMjA0MDYs''@;'; put 'put ''MjA0MDcsMjA0MDgsMjA0MDksMjA0MTAsMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MTgsMjA0MjIsMjA0MjMsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzQsMjA0MzUsMjA0MzYsMjA0MzcsMjA0MzgsMjA0NDEsMjA0NDMsMjA0NDgsMjA0NTAsMjA0''@;'; put 'put ''NTIsMjA0NTMsMjA0NTUsMjA0NTksMjA0NjAsMjA0NjQsMjA0NjYsMjA0NjgsMjA0NjksMjA0NzAsMjA0NzEsMjA0NzMsMjA0NzUsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODIsMjA0ODMsMjA0ODQsMjA0ODUsMjA0ODYsMjA0ODcsMjA0ODgsMjA0ODksMjA0OTAsMjA0OTEs''@;'; put 'put ''MjA0OTQsMjA0OTYsMjA0OTcsMjA0OTksMjA1MDEsMjA1MDIsMjA1MDMsMjA1MDcsMjA1MDksMjA1MTAsMjA1MTIsMjA1MTQsMjA1MTUsMjA1MTYsMjA1MTksMjA1MjMsMjA1MjcsMjA1MjgsMjA1MjksMjA1MzAsMjA1MzEsMjA1MzIsMjA1MzMsMjA1MzQsMjA1MzUsMjA1MzYsMjA1MzcsMjA1''@;'; put 'put ''MzksMjA1NDEsMjA1NDMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDgsMjA1NDksMjA1NTAsMjA1NTMsMjA1NTQsMjA1NTUsMjA1NTcsMjA1NjAsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjQsMjA1NjYsMjA1NjcsMjA1NjgsMjA1NjksMjA1NzEsMjA1NzMsMjA1NzQsMjA1NzUsMjA1NzYsMjA1Nzcs''@;'; put 'put ''MjA1NzgsMjA1NzksMjA1ODAsMjA1ODIsMjA1ODMsMjA1ODQsMjA1ODUsMjA1ODYsMjA1ODcsMjA1ODksMjA1OTAsMjA1OTEsMjA1OTIsMjA1OTMsMjA1OTQsMjA1OTUsMjA1OTYsMjA1OTcsMjA2MDAsMjA2MDEsMjA2MDIsMjA2MDQsMjA2MDUsMjA2MDksMjA2MTAsMjA2MTEsMjA2MTIsMjA2''@;'; put 'put ''MTQsMjA2MTUsMjA2MTcsMjA2MTgsMjA2MTksMjA2MjAsMjA2MjIsMjA2MjMsMjA2MjQsMjA2MjUsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MjksMjA2MzAsMjA2MzEsMjA2MzIsMjA2MzMsMjA2MzQsMjA2MzUsMjA2MzYsMjA2MzcsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NDQs''@;'; put 'put ''MjA2NDYsMjA2NTAsMjA2NTEsMjA2NTMsMjA2NTQsMjA2NTUsMjA2NTYsMjA2NTcsMjA2NTksMjA2NjAsMjA2NjEsMjA2NjIsMjA2NjMsMjA2NjQsMjA2NjUsMjA2NjgsMjA2NjksMjA2NzAsMjA2NzEsMjA2NzIsMjA2NzMsMjA2NzQsMjA2NzUsMjA2NzYsMjA2NzcsMjA2NzgsMjA2NzksMjA2''@;'; put 'put ''ODAsMjA2ODEsMjA2ODIsMjA2ODMsMjA2ODQsMjA2ODUsMjA2ODYsMjA2ODgsMjA2ODksMjA2OTAsMjA2OTEsMjA2OTIsMjA2OTMsMjA2OTUsMjA2OTYsMjA2OTcsMjA2OTksMjA3MDAsMjA3MDEsMjA3MDIsMjA3MDMsMjA3MDQsMjA3MDUsMjA3MDYsMjA3MDcsMjA3MDgsMjA3MDksMjA3MTIs''@;'; put 'put ''MjA3MTMsMjA3MTQsMjA3MTUsMjA3MTksMjA3MjAsMjA3MjEsMjA3MjIsMjA3MjQsMjA3MjYsMjA3MjcsMjA3MjgsMjA3MjksMjA3MzAsMjA3MzIsMjA3MzMsMjA3MzQsMjA3MzUsMjA3MzYsMjA3MzcsMjA3MzgsMjA3MzksMjA3NDAsMjA3NDEsMjA3NDQsMjA3NDUsMjA3NDYsMjA3NDgsMjA3''@;'; put 'put ''NDksMjA3NTAsMjA3NTEsMjA3NTIsMjA3NTMsMjA3NTUsMjA3NTYsMjA3NTcsMjA3NTgsMjA3NTksMjA3NjAsMjA3NjEsMjA3NjIsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NjcsMjA3NjgsMjA3NzAsMjA3NzEsMjA3NzIsMjA3NzMsMjA3NzQsMjA3NzUsMjA3NzYsMjA3NzcsMjA3Nzgs''@;'; put 'put ''MjA3NzksMjA3ODAsMjA3ODEsMjA3ODIsMjA3ODMsMjA3ODQsMjA3ODUsMjA3ODYsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTAsMjA3OTEsMjA3OTIsMjA3OTMsMjA3OTQsMjA3OTUsMjA3OTYsMjA3OTcsMjA3OTgsMjA4MDIsMjA4MDcsMjA4MTAsMjA4MTIsMjA4MTQsMjA4MTUsMjA4MTYsMjA4''@;'; put 'put ''MTgsMjA4MTksMjA4MjMsMjA4MjQsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjA4MzEsMjA4MzIsMjA4MzMsMjA4MzUsMjA4MzYsMjA4MzgsMjA4MzksMjA4NDEsMjA4NDIsMjA4NDcsMjA4NTAsMjA4NTgsMjA4NjIsMjA4NjMsMjA4NjcsMjA4NjgsMjA4NzAsMjA4NzEsMjA4NzQsMjA4NzUs''@;'; put 'put ''MjA4NzgsMjA4NzksMjA4ODAsMjA4ODEsMjA4ODMsMjA4ODQsMjA4ODgsMjA4OTAsMjA4OTMsMjA4OTQsMjA4OTUsMjA4OTcsMjA4OTksMjA5MDIsMjA5MDMsMjA5MDQsMjA5MDUsMjA5MDYsMjA5MDksMjA5MTAsMjA5MTYsMjA5MjAsMjA5MjEsMjA5MjIsMjA5MjYsMjA5MjcsMjA5MjksMjA5''@;'; put 'put ''MzAsMjA5MzEsMjA5MzMsMjA5MzYsMjA5MzgsMjA5NDEsMjA5NDIsMjA5NDQsMjA5NDYsMjA5NDcsMjA5NDgsMjA5NDksMjA5NTAsMjA5NTEsMjA5NTIsMjA5NTMsMjA5NTQsMjA5NTYsMjA5NTgsMjA5NTksMjA5NjIsMjA5NjMsMjA5NjUsMjA5NjYsMjA5NjcsMjA5NjgsMjA5NjksMjA5NzAs''@;'; put 'put ''MjA5NzIsMjA5NzQsMjA5NzcsMjA5NzgsMjA5ODAsMjA5ODMsMjA5OTAsMjA5OTYsMjA5OTcsMjEwMDEsMjEwMDMsMjEwMDQsMjEwMDcsMjEwMDgsMjEwMTEsMjEwMTIsMjEwMTMsMjEwMjAsMjEwMjIsMjEwMjMsMjEwMjUsMjEwMjYsMjEwMjcsMjEwMjksMjEwMzAsMjEwMzEsMjEwMzQsMjEw''@;'; put 'put ''MzYsMjEwMzksMjEwNDEsMjEwNDIsMjEwNDQsMjEwNDUsMjEwNTIsMjEwNTQsMjEwNjAsMjEwNjEsMjEwNjIsMjEwNjMsMjEwNjQsMjEwNjUsMjEwNjcsMjEwNzAsMjEwNzEsMjEwNzQsMjEwNzUsMjEwNzcsMjEwNzksMjEwODAsMjEwODEsMjEwODIsMjEwODMsMjEwODUsMjEwODcsMjEwODgs''@;'; put 'put ''MjEwOTAsMjEwOTEsMjEwOTIsMjEwOTQsMjEwOTYsMjEwOTksMjExMDAsMjExMDEsMjExMDIsMjExMDQsMjExMDUsMjExMDcsMjExMDgsMjExMDksMjExMTAsMjExMTEsMjExMTIsMjExMTMsMjExMTQsMjExMTUsMjExMTYsMjExMTgsMjExMjAsMjExMjMsMjExMjQsMjExMjUsMjExMjYsMjEx''@;'; put 'put ''MjcsMjExMjksMjExMzAsMjExMzEsMjExMzIsMjExMzMsMjExMzQsMjExMzUsMjExMzcsMjExMzgsMjExNDAsMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDUsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjYsMjExNjcsMjExNjgsMjExNzIsMjExNzMsMjExNzQs''@;'; put 'put ''MjExNzUsMjExNzYsMjExNzcsMjExNzgsMjExNzksMjExODAsMjExODEsMjExODQsMjExODUsMjExODYsMjExODgsMjExODksMjExOTAsMjExOTIsMjExOTQsMjExOTYsMjExOTcsMjExOTgsMjExOTksMjEyMDEsMjEyMDMsMjEyMDQsMjEyMDUsMjEyMDcsMjEyMDksMjEyMTAsMjEyMTEsMjEy''@;'; put 'put ''MTIsMjEyMTMsMjEyMTQsMjEyMTYsMjEyMTcsMjEyMTgsMjEyMTksMjEyMjEsMjEyMjIsMjEyMjMsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjcsMjEyMjgsMjEyMjksMjEyMzAsMjEyMzEsMjEyMzMsMjEyMzQsMjEyMzUsMjEyMzYsMjEyMzcsMjEyMzgsMjEyMzksMjEyNDAsMjEyNDMsMjEyNDQs''@;'; put 'put ''MjEyNDUsMjEyNDksMjEyNTAsMjEyNTEsMjEyNTIsMjEyNTUsMjEyNTcsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjIsMjEyNjUsMjEyNjYsMjEyNjcsMjEyNjgsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODIsMjEyODQsMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEy''@;'; put 'put ''OTIsMjEyOTMsMjEyOTUsMjEyOTYsMjEyOTcsMjEyOTgsMjEyOTksMjEzMDAsMjEzMDEsMjEzMDIsMjEzMDMsMjEzMDQsMjEzMDgsMjEzMDksMjEzMTIsMjEzMTQsMjEzMTYsMjEzMTgsMjEzMjMsMjEzMjQsMjEzMjUsMjEzMjgsMjEzMzIsMjEzMzYsMjEzMzcsMjEzMzksMjEzNDEsMjEzNDks''@;'; put 'put ''MjEzNTIsMjEzNTQsMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjYsMjEzNjksMjEzNzEsMjEzNzIsMjEzNzMsMjEzNzQsMjEzNzYsMjEzNzcsMjEzNzksMjEzODMsMjEzODQsMjEzODYsMjEzOTAsMjEzOTEsMjEzOTIsMjEzOTMsMjEzOTQsMjEzOTUsMjEzOTYsMjEzOTgsMjEzOTksMjE0MDEsMjE0''@;'; put 'put ''MDMsMjE0MDQsMjE0MDYsMjE0MDgsMjE0MDksMjE0MTIsMjE0MTUsMjE0MTgsMjE0MTksMjE0MjAsMjE0MjEsMjE0MjMsMjE0MjQsMjE0MjUsMjE0MjYsMjE0MjcsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzMsMjE0MzQsMjE0MzYsMjE0MzcsMjE0MzgsMjE0NDAsMjE0NDMsMjE0NDQs''@;'; put 'put ''MjE0NDUsMjE0NDYsMjE0NDcsMjE0NTQsMjE0NTUsMjE0NTYsMjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjgsMjE0NjksMjE0NzAsMjE0NzMsMjE0NzQsMjE0NzksMjE0OTIsMjE0OTgsMjE1MDIsMjE1MDMsMjE1MDQsMjE1MDYsMjE1MDksMjE1MTEsMjE1MTUsMjE1MjQsMjE1MjgsMjE1''@;'; put 'put ''MjksMjE1MzAsMjE1MzIsMjE1MzgsMjE1NDAsMjE1NDEsMjE1NDYsMjE1NTIsMjE1NTUsMjE1NTgsMjE1NTksMjE1NjIsMjE1NjUsMjE1NjcsMjE1NjksMjE1NzAsMjE1NzIsMjE1NzMsMjE1NzUsMjE1NzcsMjE1ODAsMjE1ODEsMjE1ODIsMjE1ODMsMjE1ODUsMjE1OTQsMjE1OTcsMjE1OTgs''@;'; put 'put ''MjE1OTksMjE2MDAsMjE2MDEsMjE2MDMsMjE2MDUsMjE2MDcsMjE2MDksMjE2MTAsMjE2MTEsMjE2MTIsMjE2MTMsMjE2MTQsMjE2MTUsMjE2MTYsMjE2MjAsMjE2MjUsMjE2MjYsMjE2MzAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2MzksMjE2NDAsMjE2NDEsMjE2NDIsMjE2NDUsMjE2''@;'; put 'put ''NDksMjE2NTEsMjE2NTUsMjE2NTYsMjE2NjAsMjE2NjIsMjE2NjMsMjE2NjQsMjE2NjUsMjE2NjYsMjE2NjksMjE2NzgsMjE2ODAsMjE2ODIsMjE2ODUsMjE2ODYsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTIsMjE2OTQsMjE2OTksMjE3MDEsMjE3MDYsMjE3MDcsMjE3MTgsMjE3MjAsMjE3MjMs''@;'; put 'put ''MjE3MjgsMjE3MjksMjE3MzAsMjE3MzEsMjE3MzIsMjE3MzksMjE3NDAsMjE3NDMsMjE3NDQsMjE3NDUsMjE3NDgsMjE3NDksMjE3NTAsMjE3NTEsMjE3NTIsMjE3NTMsMjE3NTUsMjE3NTgsMjE3NjAsMjE3NjIsMjE3NjMsMjE3NjQsMjE3NjUsMjE3NjgsMjE3NzAsMjE3NzEsMjE3NzIsMjE3''@;'; put 'put ''NzMsMjE3NzQsMjE3NzgsMjE3NzksMjE3ODEsMjE3ODIsMjE3ODMsMjE3ODQsMjE3ODUsMjE3ODYsMjE3ODgsMjE3ODksMjE3OTAsMjE3OTEsMjE3OTMsMjE3OTcsMjE3OTgsMjE4MDAsMjE4MDEsMjE4MDMsMjE4MDUsMjE4MTAsMjE4MTIsMjE4MTMsMjE4MTQsMjE4MTYsMjE4MTcsMjE4MTgs''@;'; put 'put ''MjE4MTksMjE4MjEsMjE4MjQsMjE4MjYsMjE4MjksMjE4MzEsMjE4MzIsMjE4MzUsMjE4MzYsMjE4MzcsMjE4MzgsMjE4MzksMjE4NDEsMjE4NDIsMjE4NDMsMjE4NDQsMjE4NDcsMjE4NDgsMjE4NDksMjE4NTAsMjE4NTEsMjE4NTMsMjE4NTQsMjE4NTUsMjE4NTYsMjE4NTgsMjE4NTksMjE4''@;'; put 'put ''NjQsMjE4NjUsMjE4NjcsMjE4NzEsMjE4NzIsMjE4NzMsMjE4NzQsMjE4NzUsMjE4NzYsMjE4ODEsMjE4ODIsMjE4ODUsMjE4ODcsMjE4OTMsMjE4OTQsMjE5MDAsMjE5MDEsMjE5MDIsMjE5MDQsMjE5MDYsMjE5MDcsMjE5MDksMjE5MTAsMjE5MTEsMjE5MTQsMjE5MTUsMjE5MTgsMjE5MjAs''@;'; put 'put ''MjE5MjEsMjE5MjIsMjE5MjMsMjE5MjQsMjE5MjUsMjE5MjYsMjE5MjgsMjE5MjksMjE5MzAsMjE5MzEsMjE5MzIsMjE5MzMsMjE5MzQsMjE5MzUsMjE5MzYsMjE5MzgsMjE5NDAsMjE5NDIsMjE5NDQsMjE5NDYsMjE5NDgsMjE5NTEsMjE5NTIsMjE5NTMsMjE5NTQsMjE5NTUsMjE5NTgsMjE5''@;'; put 'put ''NTksMjE5NjAsMjE5NjIsMjE5NjMsMjE5NjYsMjE5NjcsMjE5NjgsMjE5NzMsMjE5NzUsMjE5NzYsMjE5NzcsMjE5NzgsMjE5NzksMjE5ODIsMjE5ODQsMjE5ODYsMjE5OTEsMjE5OTMsMjE5OTcsMjE5OTgsMjJlMywyMjAwMSwyMjAwNCwyMjAwNiwyMjAwOCwyMjAwOSwyMjAxMCwyMjAxMSwy''@;'; put 'put ''MjAxMiwyMjAxNSwyMjAxOCwyMjAxOSwyMjAyMCwyMjAyMSwyMjAyMiwyMjAyMywyMjAyNiwyMjAyNywyMjAyOSwyMjAzMiwyMjAzMywyMjAzNCwyMjAzNSwyMjAzNiwyMjAzNywyMjAzOCwyMjAzOSwyMjA0MSwyMjA0MiwyMjA0NCwyMjA0NSwyMjA0OCwyMjA0OSwyMjA1MCwyMjA1MywyMjA1''@;'; put 'put ''NCwyMjA1NiwyMjA1NywyMjA1OCwyMjA1OSwyMjA2MiwyMjA2MywyMjA2NCwyMjA2NywyMjA2OSwyMjA3MSwyMjA3MiwyMjA3NCwyMjA3NiwyMjA3NywyMjA3OCwyMjA4MCwyMjA4MSwyMjA4MiwyMjA4MywyMjA4NCwyMjA4NSwyMjA4NiwyMjA4NywyMjA4OCwyMjA4OSwyMjA5MCwyMjA5MSwy''@;'; put 'put ''MjA5NSwyMjA5NiwyMjA5NywyMjA5OCwyMjA5OSwyMjEwMSwyMjEwMiwyMjEwNiwyMjEwNywyMjEwOSwyMjExMCwyMjExMSwyMjExMiwyMjExMywyMjExNSwyMjExNywyMjExOCwyMjExOSwyMjEyNSwyMjEyNiwyMjEyNywyMjEyOCwyMjEzMCwyMjEzMSwyMjEzMiwyMjEzMywyMjEzNSwyMjEz''@;'; put 'put ''NiwyMjEzNywyMjEzOCwyMjE0MSwyMjE0MiwyMjE0MywyMjE0NCwyMjE0NSwyMjE0NiwyMjE0NywyMjE0OCwyMjE1MSwyMjE1MiwyMjE1MywyMjE1NCwyMjE1NSwyMjE1NiwyMjE1NywyMjE2MCwyMjE2MSwyMjE2MiwyMjE2NCwyMjE2NSwyMjE2NiwyMjE2NywyMjE2OCwyMjE2OSwyMjE3MCwy''@;'; put 'put ''MjE3MSwyMjE3MiwyMjE3MywyMjE3NCwyMjE3NSwyMjE3NiwyMjE3NywyMjE3OCwyMjE4MCwyMjE4MSwyMjE4MiwyMjE4MywyMjE4NCwyMjE4NSwyMjE4NiwyMjE4NywyMjE4OCwyMjE4OSwyMjE5MCwyMjE5MiwyMjE5MywyMjE5NCwyMjE5NSwyMjE5NiwyMjE5NywyMjE5OCwyMjIwMCwyMjIw''@;'; put 'put ''MSwyMjIwMiwyMjIwMywyMjIwNSwyMjIwNiwyMjIwNywyMjIwOCwyMjIwOSwyMjIxMCwyMjIxMSwyMjIxMiwyMjIxMywyMjIxNCwyMjIxNSwyMjIxNiwyMjIxNywyMjIxOSwyMjIyMCwyMjIyMSwyMjIyMiwyMjIyMywyMjIyNCwyMjIyNSwyMjIyNiwyMjIyNywyMjIyOSwyMjIzMCwyMjIzMiwy''@;'; put 'put ''MjIzMywyMjIzNiwyMjI0MywyMjI0NSwyMjI0NiwyMjI0NywyMjI0OCwyMjI0OSwyMjI1MCwyMjI1MiwyMjI1NCwyMjI1NSwyMjI1OCwyMjI1OSwyMjI2MiwyMjI2MywyMjI2NCwyMjI2NywyMjI2OCwyMjI3MiwyMjI3MywyMjI3NCwyMjI3NywyMjI3OSwyMjI4MywyMjI4NCwyMjI4NSwyMjI4''@;'; put 'put ''NiwyMjI4NywyMjI4OCwyMjI4OSwyMjI5MCwyMjI5MSwyMjI5MiwyMjI5MywyMjI5NCwyMjI5NSwyMjI5NiwyMjI5NywyMjI5OCwyMjI5OSwyMjMwMSwyMjMwMiwyMjMwNCwyMjMwNSwyMjMwNiwyMjMwOCwyMjMwOSwyMjMxMCwyMjMxMSwyMjMxNSwyMjMyMSwyMjMyMiwyMjMyNCwyMjMyNSwy''@;'; put 'put ''MjMyNiwyMjMyNywyMjMyOCwyMjMzMiwyMjMzMywyMjMzNSwyMjMzNywyMjMzOSwyMjM0MCwyMjM0MSwyMjM0MiwyMjM0NCwyMjM0NSwyMjM0NywyMjM1NCwyMjM1NSwyMjM1NiwyMjM1NywyMjM1OCwyMjM2MCwyMjM2MSwyMjM3MCwyMjM3MSwyMjM3MywyMjM3NSwyMjM4MCwyMjM4MiwyMjM4''@;'; put 'put ''NCwyMjM4NSwyMjM4NiwyMjM4OCwyMjM4OSwyMjM5MiwyMjM5MywyMjM5NCwyMjM5NywyMjM5OCwyMjM5OSwyMjQwMCwyMjQwMSwyMjQwNywyMjQwOCwyMjQwOSwyMjQxMCwyMjQxMywyMjQxNCwyMjQxNSwyMjQxNiwyMjQxNywyMjQyMCwyMjQyMSwyMjQyMiwyMjQyMywyMjQyNCwyMjQyNSwy''@;'; put 'put ''MjQyNiwyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzNywyMjQ0MCwyMjQ0MiwyMjQ0NCwyMjQ0NywyMjQ0OCwyMjQ0OSwyMjQ1MSwyMjQ1MywyMjQ1NCwyMjQ1NSwyMjQ1NywyMjQ1OCwyMjQ1OSwyMjQ2MCwyMjQ2MSwyMjQ2MiwyMjQ2MywyMjQ2NCwyMjQ2NSwyMjQ2OCwyMjQ2OSwyMjQ3''@;'; put 'put ''MCwyMjQ3MSwyMjQ3MiwyMjQ3MywyMjQ3NCwyMjQ3NiwyMjQ3NywyMjQ4MCwyMjQ4MSwyMjQ4MywyMjQ4NiwyMjQ4NywyMjQ5MSwyMjQ5MiwyMjQ5NCwyMjQ5NywyMjQ5OCwyMjQ5OSwyMjUwMSwyMjUwMiwyMjUwMywyMjUwNCwyMjUwNSwyMjUwNiwyMjUwNywyMjUwOCwyMjUxMCwyMjUxMiwy''@;'; put 'put ''MjUxMywyMjUxNCwyMjUxNSwyMjUxNywyMjUxOCwyMjUxOSwyMjUyMywyMjUyNCwyMjUyNiwyMjUyNywyMjUyOSwyMjUzMSwyMjUzMiwyMjUzMywyMjUzNiwyMjUzNywyMjUzOCwyMjU0MCwyMjU0MiwyMjU0MywyMjU0NCwyMjU0NiwyMjU0NywyMjU0OCwyMjU1MCwyMjU1MSwyMjU1MiwyMjU1''@;'; put 'put ''NCwyMjU1NSwyMjU1NiwyMjU1NywyMjU1OSwyMjU2MiwyMjU2MywyMjU2NSwyMjU2NiwyMjU2NywyMjU2OCwyMjU2OSwyMjU3MSwyMjU3MiwyMjU3MywyMjU3NCwyMjU3NSwyMjU3NywyMjU3OCwyMjU3OSwyMjU4MCwyMjU4MiwyMjU4MywyMjU4NCwyMjU4NSwyMjU4NiwyMjU4NywyMjU4OCwy''@;'; put 'put ''MjU4OSwyMjU5MCwyMjU5MSwyMjU5MiwyMjU5MywyMjU5NCwyMjU5NSwyMjU5NywyMjU5OCwyMjU5OSwyMjYwMCwyMjYwMSwyMjYwMiwyMjYwMywyMjYwNiwyMjYwNywyMjYwOCwyMjYxMCwyMjYxMSwyMjYxMywyMjYxNCwyMjYxNSwyMjYxNywyMjYxOCwyMjYxOSwyMjYyMCwyMjYyMSwyMjYy''@;'; put 'put ''MywyMjYyNCwyMjYyNSwyMjYyNiwyMjYyNywyMjYyOCwyMjYzMCwyMjYzMSwyMjYzMiwyMjYzMywyMjYzNCwyMjYzNywyMjYzOCwyMjYzOSwyMjY0MCwyMjY0MSwyMjY0MiwyMjY0MywyMjY0NCwyMjY0NSwyMjY0NiwyMjY0NywyMjY0OCwyMjY0OSwyMjY1MCwyMjY1MSwyMjY1MiwyMjY1Mywy''@;'; put 'put ''MjY1NSwyMjY1OCwyMjY2MCwyMjY2MiwyMjY2MywyMjY2NCwyMjY2NiwyMjY2NywyMjY2OCwyMjY2OSwyMjY3MCwyMjY3MSwyMjY3MiwyMjY3MywyMjY3NiwyMjY3NywyMjY3OCwyMjY3OSwyMjY4MCwyMjY4MywyMjY4NCwyMjY4NSwyMjY4OCwyMjY4OSwyMjY5MCwyMjY5MSwyMjY5MiwyMjY5''@;'; put 'put ''MywyMjY5NCwyMjY5NSwyMjY5OCwyMjY5OSwyMjcwMCwyMjcwMSwyMjcwMiwyMjcwMywyMjcwNCwyMjcwNSwyMjcwNiwyMjcwNywyMjcwOCwyMjcwOSwyMjcxMCwyMjcxMSwyMjcxMiwyMjcxMywyMjcxNCwyMjcxNSwyMjcxNywyMjcxOCwyMjcxOSwyMjcyMCwyMjcyMiwyMjcyMywyMjcyNCwy''@;'; put 'put ''MjcyNiwyMjcyNywyMjcyOCwyMjcyOSwyMjczMCwyMjczMSwyMjczMiwyMjczMywyMjczNCwyMjczNSwyMjczNiwyMjczOCwyMjczOSwyMjc0MCwyMjc0MiwyMjc0MywyMjc0NCwyMjc0NSwyMjc0NiwyMjc0NywyMjc0OCwyMjc0OSwyMjc1MCwyMjc1MSwyMjc1MiwyMjc1MywyMjc1NCwyMjc1''@;'; put 'put ''NSwyMjc1NywyMjc1OCwyMjc1OSwyMjc2MCwyMjc2MSwyMjc2MiwyMjc2NSwyMjc2NywyMjc2OSwyMjc3MCwyMjc3MiwyMjc3MywyMjc3NSwyMjc3NiwyMjc3OCwyMjc3OSwyMjc4MCwyMjc4MSwyMjc4MiwyMjc4MywyMjc4NCwyMjc4NSwyMjc4NywyMjc4OSwyMjc5MCwyMjc5MiwyMjc5Mywy''@;'; put 'put ''Mjc5NCwyMjc5NSwyMjc5NiwyMjc5OCwyMjgwMCwyMjgwMSwyMjgwMiwyMjgwMywyMjgwNywyMjgwOCwyMjgxMSwyMjgxMywyMjgxNCwyMjgxNiwyMjgxNywyMjgxOCwyMjgxOSwyMjgyMiwyMjgyNCwyMjgyOCwyMjgzMiwyMjgzNCwyMjgzNSwyMjgzNywyMjgzOCwyMjg0MywyMjg0NSwyMjg0''@;'; put 'put ''NiwyMjg0NywyMjg0OCwyMjg1MSwyMjg1MywyMjg1NCwyMjg1OCwyMjg2MCwyMjg2MSwyMjg2NCwyMjg2NiwyMjg2NywyMjg3MywyMjg3NSwyMjg3NiwyMjg3NywyMjg3OCwyMjg3OSwyMjg4MSwyMjg4MywyMjg4NCwyMjg4NiwyMjg4NywyMjg4OCwyMjg4OSwyMjg5MCwyMjg5MSwyMjg5Miwy''@;'; put 'put ''Mjg5MywyMjg5NCwyMjg5NSwyMjg5NiwyMjg5NywyMjg5OCwyMjkwMSwyMjkwMywyMjkwNiwyMjkwNywyMjkwOCwyMjkxMCwyMjkxMSwyMjkxMiwyMjkxNywyMjkyMSwyMjkyMywyMjkyNCwyMjkyNiwyMjkyNywyMjkyOCwyMjkyOSwyMjkzMiwyMjkzMywyMjkzNiwyMjkzOCwyMjkzOSwyMjk0''@;'; put 'put ''MCwyMjk0MSwyMjk0MywyMjk0NCwyMjk0NSwyMjk0NiwyMjk1MCwyMjk1MSwyMjk1NiwyMjk1NywyMjk2MCwyMjk2MSwyMjk2MywyMjk2NCwyMjk2NSwyMjk2NiwyMjk2NywyMjk2OCwyMjk3MCwyMjk3MiwyMjk3MywyMjk3NSwyMjk3NiwyMjk3NywyMjk3OCwyMjk3OSwyMjk4MCwyMjk4MSwy''@;'; put 'put ''Mjk4MywyMjk4NCwyMjk4NSwyMjk4OCwyMjk4OSwyMjk5MCwyMjk5MSwyMjk5NywyMjk5OCwyMzAwMSwyMzAwMywyMzAwNiwyMzAwNywyMzAwOCwyMzAwOSwyMzAxMCwyMzAxMiwyMzAxNCwyMzAxNSwyMzAxNywyMzAxOCwyMzAxOSwyMzAyMSwyMzAyMiwyMzAyMywyMzAyNCwyMzAyNSwyMzAy''@;'; put 'put ''NiwyMzAyNywyMzAyOCwyMzAyOSwyMzAzMCwyMzAzMSwyMzAzMiwyMzAzNCwyMzAzNiwyMzAzNywyMzAzOCwyMzA0MCwyMzA0MiwyMzA1MCwyMzA1MSwyMzA1MywyMzA1NCwyMzA1NSwyMzA1NiwyMzA1OCwyMzA2MCwyMzA2MSwyMzA2MiwyMzA2MywyMzA2NSwyMzA2NiwyMzA2NywyMzA2OSwy''@;'; put 'put ''MzA3MCwyMzA3MywyMzA3NCwyMzA3NiwyMzA3OCwyMzA3OSwyMzA4MCwyMzA4MiwyMzA4MywyMzA4NCwyMzA4NSwyMzA4NiwyMzA4NywyMzA4OCwyMzA5MSwyMzA5MywyMzA5NSwyMzA5NiwyMzA5NywyMzA5OCwyMzA5OSwyMzEwMSwyMzEwMiwyMzEwMywyMzEwNSwyMzEwNiwyMzEwNywyMzEw''@;'; put 'put ''OCwyMzEwOSwyMzExMSwyMzExMiwyMzExNSwyMzExNiwyMzExNywyMzExOCwyMzExOSwyMzEyMCwyMzEyMSwyMzEyMiwyMzEyMywyMzEyNCwyMzEyNiwyMzEyNywyMzEyOCwyMzEyOSwyMzEzMSwyMzEzMiwyMzEzMywyMzEzNCwyMzEzNSwyMzEzNiwyMzEzNywyMzEzOSwyMzE0MCwyMzE0MSwy''@;'; put 'put ''MzE0MiwyMzE0NCwyMzE0NSwyMzE0NywyMzE0OCwyMzE0OSwyMzE1MCwyMzE1MSwyMzE1MiwyMzE1MywyMzE1NCwyMzE1NSwyMzE2MCwyMzE2MSwyMzE2MywyMzE2NCwyMzE2NSwyMzE2NiwyMzE2OCwyMzE2OSwyMzE3MCwyMzE3MSwyMzE3MiwyMzE3MywyMzE3NCwyMzE3NSwyMzE3NiwyMzE3''@;'; put 'put ''NywyMzE3OCwyMzE3OSwyMzE4MCwyMzE4MSwyMzE4MiwyMzE4MywyMzE4NCwyMzE4NSwyMzE4NywyMzE4OCwyMzE4OSwyMzE5MCwyMzE5MSwyMzE5MiwyMzE5MywyMzE5NiwyMzE5NywyMzE5OCwyMzE5OSwyMzIwMCwyMzIwMSwyMzIwMiwyMzIwMywyMzIwNCwyMzIwNSwyMzIwNiwyMzIwNywy''@;'; put 'put ''MzIwOCwyMzIwOSwyMzIxMSwyMzIxMiwyMzIxMywyMzIxNCwyMzIxNSwyMzIxNiwyMzIxNywyMzIyMCwyMzIyMiwyMzIyMywyMzIyNSwyMzIyNiwyMzIyNywyMzIyOCwyMzIyOSwyMzIzMSwyMzIzMiwyMzIzNSwyMzIzNiwyMzIzNywyMzIzOCwyMzIzOSwyMzI0MCwyMzI0MiwyMzI0MywyMzI0''@;'; put 'put ''NSwyMzI0NiwyMzI0NywyMzI0OCwyMzI0OSwyMzI1MSwyMzI1MywyMzI1NSwyMzI1NywyMzI1OCwyMzI1OSwyMzI2MSwyMzI2MiwyMzI2MywyMzI2NiwyMzI2OCwyMzI2OSwyMzI3MSwyMzI3MiwyMzI3NCwyMzI3NiwyMzI3NywyMzI3OCwyMzI3OSwyMzI4MCwyMzI4MiwyMzI4MywyMzI4NCwy''@;'; put 'put ''MzI4NSwyMzI4NiwyMzI4NywyMzI4OCwyMzI4OSwyMzI5MCwyMzI5MSwyMzI5MiwyMzI5MywyMzI5NCwyMzI5NSwyMzI5NiwyMzI5NywyMzI5OCwyMzI5OSwyMzMwMCwyMzMwMSwyMzMwMiwyMzMwMywyMzMwNCwyMzMwNiwyMzMwNywyMzMwOCwyMzMwOSwyMzMxMCwyMzMxMSwyMzMxMiwyMzMx''@;'; put 'put ''MywyMzMxNCwyMzMxNSwyMzMxNiwyMzMxNywyMzMyMCwyMzMyMSwyMzMyMiwyMzMyMywyMzMyNCwyMzMyNSwyMzMyNiwyMzMyNywyMzMyOCwyMzMyOSwyMzMzMCwyMzMzMSwyMzMzMiwyMzMzMywyMzMzNCwyMzMzNSwyMzMzNiwyMzMzNywyMzMzOCwyMzMzOSwyMzM0MCwyMzM0MSwyMzM0Miwy''@;'; put 'put ''MzM0MywyMzM0NCwyMzM0NSwyMzM0NywyMzM0OSwyMzM1MCwyMzM1MiwyMzM1MywyMzM1NCwyMzM1NSwyMzM1NiwyMzM1NywyMzM1OCwyMzM1OSwyMzM2MSwyMzM2MiwyMzM2MywyMzM2NCwyMzM2NSwyMzM2NiwyMzM2NywyMzM2OCwyMzM2OSwyMzM3MCwyMzM3MSwyMzM3MiwyMzM3MywyMzM3''@;'; put 'put ''NCwyMzM3NSwyMzM3OCwyMzM4MiwyMzM5MCwyMzM5MiwyMzM5MywyMzM5OSwyMzQwMCwyMzQwMywyMzQwNSwyMzQwNiwyMzQwNywyMzQxMCwyMzQxMiwyMzQxNCwyMzQxNSwyMzQxNiwyMzQxNywyMzQxOSwyMzQyMCwyMzQyMiwyMzQyMywyMzQyNiwyMzQzMCwyMzQzNCwyMzQzNywyMzQzOCwy''@;'; put 'put ''MzQ0MCwyMzQ0MSwyMzQ0MiwyMzQ0NCwyMzQ0NiwyMzQ1NSwyMzQ2MywyMzQ2NCwyMzQ2NSwyMzQ2OCwyMzQ2OSwyMzQ3MCwyMzQ3MSwyMzQ3MywyMzQ3NCwyMzQ3OSwyMzQ4MiwyMzQ4MywyMzQ4NCwyMzQ4OCwyMzQ4OSwyMzQ5MSwyMzQ5NiwyMzQ5NywyMzQ5OCwyMzQ5OSwyMzUwMSwyMzUw''@;'; put 'put ''MiwyMzUwMywyMzUwNSwyMzUwOCwyMzUwOSwyMzUxMCwyMzUxMSwyMzUxMiwyMzUxMywyMzUxNCwyMzUxNSwyMzUxNiwyMzUyMCwyMzUyMiwyMzUyMywyMzUyNiwyMzUyNywyMzUyOSwyMzUzMCwyMzUzMSwyMzUzMiwyMzUzMywyMzUzNSwyMzUzNywyMzUzOCwyMzUzOSwyMzU0MCwyMzU0MSwy''@;'; put 'put ''MzU0MiwyMzU0MywyMzU0OSwyMzU1MCwyMzU1MiwyMzU1NCwyMzU1NSwyMzU1NywyMzU1OSwyMzU2MCwyMzU2MywyMzU2NCwyMzU2NSwyMzU2NiwyMzU2OCwyMzU3MCwyMzU3MSwyMzU3NSwyMzU3NywyMzU3OSwyMzU4MiwyMzU4MywyMzU4NCwyMzU4NSwyMzU4NywyMzU5MCwyMzU5MiwyMzU5''@;'; put 'put ''MywyMzU5NCwyMzU5NSwyMzU5NywyMzU5OCwyMzU5OSwyMzYwMCwyMzYwMiwyMzYwMywyMzYwNSwyMzYwNiwyMzYwNywyMzYxOSwyMzYyMCwyMzYyMiwyMzYyMywyMzYyOCwyMzYyOSwyMzYzNCwyMzYzNSwyMzYzNiwyMzYzOCwyMzYzOSwyMzY0MCwyMzY0MiwyMzY0MywyMzY0NCwyMzY0NSwy''@;'; put 'put ''MzY0NywyMzY1MCwyMzY1MiwyMzY1NSwyMzY1NiwyMzY1NywyMzY1OCwyMzY1OSwyMzY2MCwyMzY2MSwyMzY2NCwyMzY2NiwyMzY2NywyMzY2OCwyMzY2OSwyMzY3MCwyMzY3MSwyMzY3MiwyMzY3NSwyMzY3NiwyMzY3NywyMzY3OCwyMzY4MCwyMzY4MywyMzY4NCwyMzY4NSwyMzY4NiwyMzY4''@;'; put 'put ''NywyMzY4OSwyMzY5MCwyMzY5MSwyMzY5NCwyMzY5NSwyMzY5OCwyMzY5OSwyMzcwMSwyMzcwOSwyMzcxMCwyMzcxMSwyMzcxMiwyMzcxMywyMzcxNiwyMzcxNywyMzcxOCwyMzcxOSwyMzcyMCwyMzcyMiwyMzcyNiwyMzcyNywyMzcyOCwyMzczMCwyMzczMiwyMzczNCwyMzczNywyMzczOCwy''@;'; put 'put ''MzczOSwyMzc0MCwyMzc0MiwyMzc0NCwyMzc0NiwyMzc0NywyMzc0OSwyMzc1MCwyMzc1MSwyMzc1MiwyMzc1MywyMzc1NCwyMzc1NiwyMzc1NywyMzc1OCwyMzc1OSwyMzc2MCwyMzc2MSwyMzc2MywyMzc2NCwyMzc2NSwyMzc2NiwyMzc2NywyMzc2OCwyMzc3MCwyMzc3MSwyMzc3MiwyMzc3''@;'; put 'put ''MywyMzc3NCwyMzc3NSwyMzc3NiwyMzc3OCwyMzc3OSwyMzc4MywyMzc4NSwyMzc4NywyMzc4OCwyMzc5MCwyMzc5MSwyMzc5MywyMzc5NCwyMzc5NSwyMzc5NiwyMzc5NywyMzc5OCwyMzc5OSwyMzgwMCwyMzgwMSwyMzgwMiwyMzgwNCwyMzgwNSwyMzgwNiwyMzgwNywyMzgwOCwyMzgwOSwy''@;'; put 'put ''MzgxMiwyMzgxMywyMzgxNiwyMzgxNywyMzgxOCwyMzgxOSwyMzgyMCwyMzgyMSwyMzgyMywyMzgyNCwyMzgyNSwyMzgyNiwyMzgyNywyMzgyOSwyMzgzMSwyMzgzMiwyMzgzMywyMzgzNCwyMzgzNiwyMzgzNywyMzgzOSwyMzg0MCwyMzg0MSwyMzg0MiwyMzg0MywyMzg0NSwyMzg0OCwyMzg1''@;'; put 'put ''MCwyMzg1MSwyMzg1MiwyMzg1NSwyMzg1NiwyMzg1NywyMzg1OCwyMzg1OSwyMzg2MSwyMzg2MiwyMzg2MywyMzg2NCwyMzg2NSwyMzg2NiwyMzg2NywyMzg2OCwyMzg3MSwyMzg3MiwyMzg3MywyMzg3NCwyMzg3NSwyMzg3NiwyMzg3NywyMzg3OCwyMzg4MCwyMzg4MSwyMzg4NSwyMzg4Niwy''@;'; put 'put ''Mzg4NywyMzg4OCwyMzg4OSwyMzg5MCwyMzg5MSwyMzg5MiwyMzg5MywyMzg5NCwyMzg5NSwyMzg5NywyMzg5OCwyMzkwMCwyMzkwMiwyMzkwMywyMzkwNCwyMzkwNSwyMzkwNiwyMzkwNywyMzkwOCwyMzkwOSwyMzkxMCwyMzkxMSwyMzkxMiwyMzkxNCwyMzkxNywyMzkxOCwyMzkyMCwyMzky''@;'; put 'put ''MSwyMzkyMiwyMzkyMywyMzkyNSwyMzkyNiwyMzkyNywyMzkyOCwyMzkyOSwyMzkzMCwyMzkzMSwyMzkzMiwyMzkzMywyMzkzNCwyMzkzNSwyMzkzNiwyMzkzNywyMzkzOSwyMzk0MCwyMzk0MSwyMzk0MiwyMzk0MywyMzk0NCwyMzk0NSwyMzk0NiwyMzk0NywyMzk0OCwyMzk0OSwyMzk1MCwy''@;'; put 'put ''Mzk1MSwyMzk1MiwyMzk1MywyMzk1NCwyMzk1NSwyMzk1NiwyMzk1NywyMzk1OCwyMzk1OSwyMzk2MCwyMzk2MiwyMzk2MywyMzk2NCwyMzk2NiwyMzk2NywyMzk2OCwyMzk2OSwyMzk3MCwyMzk3MSwyMzk3MiwyMzk3MywyMzk3NCwyMzk3NSwyMzk3NiwyMzk3NywyMzk3OCwyMzk3OSwyMzk4''@;'; put 'put ''MCwyMzk4MSwyMzk4MiwyMzk4MywyMzk4NCwyMzk4NSwyMzk4NiwyMzk4NywyMzk4OCwyMzk4OSwyMzk5MCwyMzk5MiwyMzk5MywyMzk5NCwyMzk5NSwyMzk5NiwyMzk5NywyMzk5OCwyMzk5OSwyNGUzLDI0MDAxLDI0MDAyLDI0MDAzLDI0MDA0LDI0MDA2LDI0MDA3LDI0MDA4LDI0MDA5LDI0''@;'; put 'put ''MDEwLDI0MDExLDI0MDEyLDI0MDE0LDI0MDE1LDI0MDE2LDI0MDE3LDI0MDE4LDI0MDE5LDI0MDIwLDI0MDIxLDI0MDIyLDI0MDIzLDI0MDI0LDI0MDI1LDI0MDI2LDI0MDI4LDI0MDMxLDI0MDMyLDI0MDM1LDI0MDM2LDI0MDQyLDI0MDQ0LDI0MDQ1LDI0MDQ4LDI0MDUzLDI0MDU0LDI0MDU2''@;'; put 'put ''LDI0MDU3LDI0MDU4LDI0MDU5LDI0MDYwLDI0MDYzLDI0MDY0LDI0MDY4LDI0MDcxLDI0MDczLDI0MDc0LDI0MDc1LDI0MDc3LDI0MDc4LDI0MDgyLDI0MDgzLDI0MDg3LDI0MDk0LDI0MDk1LDI0MDk2LDI0MDk3LDI0MDk4LDI0MDk5LDI0MTAwLDI0MTAxLDI0MTA0LDI0MTA1LDI0MTA2LDI0''@;'; put 'put ''MTA3LDI0MTA4LDI0MTExLDI0MTEyLDI0MTE0LDI0MTE1LDI0MTE2LDI0MTE3LDI0MTE4LDI0MTIxLDI0MTIyLDI0MTI2LDI0MTI3LDI0MTI4LDI0MTI5LDI0MTMxLDI0MTM0LDI0MTM1LDI0MTM2LDI0MTM3LDI0MTM4LDI0MTM5LDI0MTQxLDI0MTQyLDI0MTQzLDI0MTQ0LDI0MTQ1LDI0MTQ2''@;'; put 'put ''LDI0MTQ3LDI0MTUwLDI0MTUxLDI0MTUyLDI0MTUzLDI0MTU0LDI0MTU2LDI0MTU3LDI0MTU5LDI0MTYwLDI0MTYzLDI0MTY0LDI0MTY1LDI0MTY2LDI0MTY3LDI0MTY4LDI0MTY5LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc1LDI0MTc2LDI0MTc3LDI0MTgxLDI0MTgzLDI0''@;'; put 'put ''MTg1LDI0MTkwLDI0MTkzLDI0MTk0LDI0MTk1LDI0MTk3LDI0MjAwLDI0MjAxLDI0MjA0LDI0MjA1LDI0MjA2LDI0MjEwLDI0MjE2LDI0MjE5LDI0MjIxLDI0MjI1LDI0MjI2LDI0MjI3LDI0MjI4LDI0MjMyLDI0MjMzLDI0MjM0LDI0MjM1LDI0MjM2LDI0MjM4LDI0MjM5LDI0MjQwLDI0MjQx''@;'; put 'put ''LDI0MjQyLDI0MjQ0LDI0MjUwLDI0MjUxLDI0MjUyLDI0MjUzLDI0MjU1LDI0MjU2LDI0MjU3LDI0MjU4LDI0MjU5LDI0MjYwLDI0MjYxLDI0MjYyLDI0MjYzLDI0MjY0LDI0MjY3LDI0MjY4LDI0MjY5LDI0MjcwLDI0MjcxLDI0MjcyLDI0Mjc2LDI0Mjc3LDI0Mjc5LDI0MjgwLDI0MjgxLDI0''@;'; put 'put ''MjgyLDI0Mjg0LDI0Mjg1LDI0Mjg2LDI0Mjg3LDI0Mjg4LDI0Mjg5LDI0MjkwLDI0MjkxLDI0MjkyLDI0MjkzLDI0Mjk0LDI0Mjk1LDI0Mjk3LDI0Mjk5LDI0MzAwLDI0MzAxLDI0MzAyLDI0MzAzLDI0MzA0LDI0MzA1LDI0MzA2LDI0MzA3LDI0MzA5LDI0MzEyLDI0MzEzLDI0MzE1LDI0MzE2''@;'; put 'put ''LDI0MzE3LDI0MzI1LDI0MzI2LDI0MzI3LDI0MzI5LDI0MzMyLDI0MzMzLDI0MzM0LDI0MzM2LDI0MzM4LDI0MzQwLDI0MzQyLDI0MzQ1LDI0MzQ2LDI0MzQ4LDI0MzQ5LDI0MzUwLDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcwLDI0''@;'; put 'put ''MzcxLDI0MzcyLDI0MzczLDI0Mzc0LDI0Mzc1LDI0Mzc2LDI0Mzc5LDI0MzgxLDI0MzgyLDI0MzgzLDI0Mzg1LDI0Mzg2LDI0Mzg3LDI0Mzg4LDI0Mzg5LDI0MzkwLDI0MzkxLDI0MzkyLDI0MzkzLDI0Mzk0LDI0Mzk1LDI0Mzk2LDI0Mzk3LDI0Mzk4LDI0Mzk5LDI0NDAxLDI0NDA0LDI0NDA5''@;'; put 'put ''LDI0NDEwLDI0NDExLDI0NDEyLDI0NDE0LDI0NDE1LDI0NDE2LDI0NDE5LDI0NDIxLDI0NDIzLDI0NDI0LDI0NDI3LDI0NDMwLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDM4LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDQ3LDI0NDUxLDI0NDU0LDI0NDYxLDI0NDYyLDI0NDYzLDI0''@;'; put 'put ''NDY1LDI0NDY3LDI0NDY4LDI0NDcwLDI0NDc0LDI0NDc1LDI0NDc3LDI0NDc4LDI0NDc5LDI0NDgwLDI0NDgyLDI0NDgzLDI0NDg0LDI0NDg1LDI0NDg2LDI0NDg3LDI0NDg5LDI0NDkxLDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NDk4LDI0NDk5LDI0NTAwLDI0NTAyLDI0NTA0LDI0NTA1''@;'; put 'put ''LDI0NTA2LDI0NTA3LDI0NTEwLDI0NTExLDI0NTEyLDI0NTEzLDI0NTE0LDI0NTE5LDI0NTIwLDI0NTIyLDI0NTIzLDI0NTI2LDI0NTMxLDI0NTMyLDI0NTMzLDI0NTM4LDI0NTM5LDI0NTQwLDI0NTQyLDI0NTQzLDI0NTQ2LDI0NTQ3LDI0NTQ5LDI0NTUwLDI0NTUyLDI0NTUzLDI0NTU2LDI0''@;'; put 'put ''NTU5LDI0NTYwLDI0NTYyLDI0NTYzLDI0NTY0LDI0NTY2LDI0NTY3LDI0NTY5LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg0LDI0NTg1LDI0NTg3LDI0NTg4LDI0NTkyLDI0NTkzLDI0NTk1LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA2LDI0NjA3LDI0NjEwLDI0NjExLDI0NjEyLDI0NjIwLDI0NjIx''@;'; put 'put ''LDI0NjIyLDI0NjI0LDI0NjI1LDI0NjI2LDI0NjI3LDI0NjI4LDI0NjMwLDI0NjMxLDI0NjMyLDI0NjMzLDI0NjM0LDI0NjM3LDI0NjM4LDI0NjQwLDI0NjQ0LDI0NjQ1LDI0NjQ2LDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUwLDI0NjUyLDI0NjU0LDI0NjU1LDI0NjU3LDI0NjU5LDI0NjYwLDI0''@;'; put 'put ''NjYyLDI0NjYzLDI0NjY0LDI0NjY3LDI0NjY4LDI0NjcwLDI0NjcxLDI0NjcyLDI0NjczLDI0Njc3LDI0Njc4LDI0Njg2LDI0Njg5LDI0NjkwLDI0NjkyLDI0NjkzLDI0Njk1LDI0NzAyLDI0NzA0LDI0NzA1LDI0NzA2LDI0NzA5LDI0NzEwLDI0NzExLDI0NzEyLDI0NzE0LDI0NzE1LDI0NzE4''@;'; put 'put ''LDI0NzE5LDI0NzIwLDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI3LDI0NzI4LDI0NzI5LDI0NzMyLDI0NzM0LDI0NzM3LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQzLDI0NzQ1LDI0NzQ2LDI0NzUwLDI0NzUyLDI0NzU1LDI0NzU3LDI0NzU4LDI0NzU5LDI0NzYxLDI0NzYyLDI0NzY1LDI0NzY2LDI0''@;'; put 'put ''NzY3LDI0NzY4LDI0NzY5LDI0NzcwLDI0NzcxLDI0NzcyLDI0Nzc1LDI0Nzc2LDI0Nzc3LDI0NzgwLDI0NzgxLDI0NzgyLDI0NzgzLDI0Nzg0LDI0Nzg2LDI0Nzg3LDI0Nzg4LDI0NzkwLDI0NzkxLDI0NzkzLDI0Nzk1LDI0Nzk4LDI0ODAxLDI0ODAyLDI0ODAzLDI0ODA0LDI0ODA1LDI0ODEw''@;'; put 'put ''LDI0ODE3LDI0ODE4LDI0ODIxLDI0ODIzLDI0ODI0LDI0ODI3LDI0ODI4LDI0ODI5LDI0ODMwLDI0ODMxLDI0ODM0LDI0ODM1LDI0ODM2LDI0ODM3LDI0ODM5LDI0ODQyLDI0ODQzLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU2LDI0ODU3LDI0''@;'; put 'put ''ODU5LDI0ODYwLDI0ODYxLDI0ODYyLDI0ODY1LDI0ODY2LDI0ODY5LDI0ODcyLDI0ODczLDI0ODc0LDI0ODc2LDI0ODc3LDI0ODc4LDI0ODc5LDI0ODgwLDI0ODgxLDI0ODgyLDI0ODgzLDI0ODg0LDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg4LDI0ODg5LDI0ODkwLDI0ODkxLDI0ODkyLDI0ODkz''@;'; put 'put ''LDI0ODk0LDI0ODk2LDI0ODk3LDI0ODk4LDI0ODk5LDI0OTAwLDI0OTAxLDI0OTAyLDI0OTAzLDI0OTA1LDI0OTA3LDI0OTA5LDI0OTExLDI0OTEyLDI0OTE0LDI0OTE1LDI0OTE2LDI0OTE4LDI0OTE5LDI0OTIwLDI0OTIxLDI0OTIyLDI0OTIzLDI0OTI0LDI0OTI2LDI0OTI3LDI0OTI4LDI0''@;'; put 'put ''OTI5LDI0OTMxLDI0OTMyLDI0OTMzLDI0OTM0LDI0OTM3LDI0OTM4LDI0OTM5LDI0OTQwLDI0OTQxLDI0OTQyLDI0OTQzLDI0OTQ1LDI0OTQ2LDI0OTQ3LDI0OTQ4LDI0OTUwLDI0OTUyLDI0OTUzLDI0OTU0LDI0OTU1LDI0OTU2LDI0OTU3LDI0OTU4LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYy''@;'; put 'put ''LDI0OTYzLDI0OTY0LDI0OTY1LDI0OTY2LDI0OTY3LDI0OTY4LDI0OTY5LDI0OTcwLDI0OTcyLDI0OTczLDI0OTc1LDI0OTc2LDI0OTc3LDI0OTc4LDI0OTc5LDI0OTgxLDI0OTgyLDI0OTgzLDI0OTg0LDI0OTg1LDI0OTg2LDI0OTg3LDI0OTg4LDI0OTkwLDI0OTkxLDI0OTkyLDI0OTkzLDI0''@;'; put 'put ''OTk0LDI0OTk1LDI0OTk2LDI0OTk3LDI0OTk4LDI1MDAyLDI1MDAzLDI1MDA1LDI1MDA2LDI1MDA3LDI1MDA4LDI1MDA5LDI1MDEwLDI1MDExLDI1MDEyLDI1MDEzLDI1MDE0LDI1MDE2LDI1MDE3LDI1MDE4LDI1MDE5LDI1MDIwLDI1MDIxLDI1MDIzLDI1MDI0LDI1MDI1LDI1MDI3LDI1MDI4''@;'; put 'put ''LDI1MDI5LDI1MDMwLDI1MDMxLDI1MDMzLDI1MDM2LDI1MDM3LDI1MDM4LDI1MDM5LDI1MDQwLDI1MDQzLDI1MDQ1LDI1MDQ2LDI1MDQ3LDI1MDQ4LDI1MDQ5LDI1MDUwLDI1MDUxLDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU2LDI1MDU3LDI1MDU4LDI1MDU5LDI1MDYwLDI1MDYxLDI1''@;'; put 'put ''MDYzLDI1MDY0LDI1MDY1LDI1MDY2LDI1MDY3LDI1MDY4LDI1MDY5LDI1MDcwLDI1MDcxLDI1MDcyLDI1MDczLDI1MDc0LDI1MDc1LDI1MDc2LDI1MDc4LDI1MDc5LDI1MDgwLDI1MDgxLDI1MDgyLDI1MDgzLDI1MDg0LDI1MDg1LDI1MDg2LDI1MDg4LDI1MDg5LDI1MDkwLDI1MDkxLDI1MDky''@;'; put 'put ''LDI1MDkzLDI1MDk1LDI1MDk3LDI1MTA3LDI1MTA4LDI1MTEzLDI1MTE2LDI1MTE3LDI1MTE4LDI1MTIwLDI1MTIzLDI1MTI2LDI1MTI3LDI1MTI4LDI1MTI5LDI1MTMxLDI1MTMzLDI1MTM1LDI1MTM2LDI1MTM3LDI1MTM4LDI1MTQxLDI1MTQyLDI1MTQ0LDI1MTQ1LDI1MTQ2LDI1MTQ3LDI1''@;'; put 'put ''MTQ4LDI1MTU0LDI1MTU2LDI1MTU3LDI1MTU4LDI1MTYyLDI1MTY3LDI1MTY4LDI1MTczLDI1MTc0LDI1MTc1LDI1MTc3LDI1MTc4LDI1MTgwLDI1MTgxLDI1MTgyLDI1MTgzLDI1MTg0LDI1MTg1LDI1MTg2LDI1MTg4LDI1MTg5LDI1MTkyLDI1MjAxLDI1MjAyLDI1MjA0LDI1MjA1LDI1MjA3''@;'; put 'put ''LDI1MjA4LDI1MjEwLDI1MjExLDI1MjEzLDI1MjE3LDI1MjE4LDI1MjE5LDI1MjIxLDI1MjIyLDI1MjIzLDI1MjI0LDI1MjI3LDI1MjI4LDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjM2LDI1MjQxLDI1MjQ0LDI1MjQ1LDI1MjQ2LDI1MjUxLDI1MjU0LDI1MjU1LDI1MjU3LDI1MjU4LDI1''@;'; put 'put ''MjYxLDI1MjYyLDI1MjYzLDI1MjY0LDI1MjY2LDI1MjY3LDI1MjY4LDI1MjcwLDI1MjcxLDI1MjcyLDI1Mjc0LDI1Mjc4LDI1MjgwLDI1MjgxLDI1MjgzLDI1MjkxLDI1Mjk1LDI1Mjk3LDI1MzAxLDI1MzA5LDI1MzEwLDI1MzEyLDI1MzEzLDI1MzE2LDI1MzIyLDI1MzIzLDI1MzI4LDI1MzMw''@;'; put 'put ''LDI1MzMzLDI1MzM2LDI1MzM3LDI1MzM4LDI1MzM5LDI1MzQ0LDI1MzQ3LDI1MzQ4LDI1MzQ5LDI1MzUwLDI1MzU0LDI1MzU1LDI1MzU2LDI1MzU3LDI1MzU5LDI1MzYwLDI1MzYyLDI1MzYzLDI1MzY0LDI1MzY1LDI1MzY3LDI1MzY4LDI1MzY5LDI1MzcyLDI1MzgyLDI1MzgzLDI1Mzg1LDI1''@;'; put 'put ''Mzg4LDI1Mzg5LDI1MzkwLDI1MzkyLDI1MzkzLDI1Mzk1LDI1Mzk2LDI1Mzk3LDI1Mzk4LDI1Mzk5LDI1NDAwLDI1NDAzLDI1NDA0LDI1NDA2LDI1NDA3LDI1NDA4LDI1NDA5LDI1NDEyLDI1NDE1LDI1NDE2LDI1NDE4LDI1NDI1LDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMwLDI1NDMxLDI1NDMy''@;'; put 'put ''LDI1NDMzLDI1NDM0LDI1NDM1LDI1NDM2LDI1NDM3LDI1NDQwLDI1NDQ0LDI1NDQ1LDI1NDQ2LDI1NDQ4LDI1NDUwLDI1NDUxLDI1NDUyLDI1NDU1LDI1NDU2LDI1NDU4LDI1NDU5LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY1LDI1NDY4LDI1NDY5LDI1NDcwLDI1NDcxLDI1NDczLDI1NDc1LDI1''@;'; put 'put ''NDc2LDI1NDc3LDI1NDc4LDI1NDgzLDI1NDg1LDI1NDg5LDI1NDkxLDI1NDkyLDI1NDkzLDI1NDk1LDI1NDk3LDI1NDk4LDI1NDk5LDI1NTAwLDI1NTAxLDI1NTAyLDI1NTAzLDI1NTA1LDI1NTA4LDI1NTEwLDI1NTE1LDI1NTE5LDI1NTIxLDI1NTIyLDI1NTI1LDI1NTI2LDI1NTI5LDI1NTMx''@;'; put 'put ''LDI1NTMzLDI1NTM1LDI1NTM2LDI1NTM3LDI1NTM4LDI1NTM5LDI1NTQxLDI1NTQzLDI1NTQ0LDI1NTQ2LDI1NTQ3LDI1NTQ4LDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTU5LDI1NTYwLDI1NTYxLDI1NTYyLDI1NTYzLDI1NTY0LDI1NTY1LDI1NTY3LDI1NTcwLDI1NTcyLDI1NTczLDI1''@;'; put 'put ''NTc0LDI1NTc1LDI1NTc2LDI1NTc5LDI1NTgwLDI1NTgyLDI1NTgzLDI1NTg0LDI1NTg1LDI1NTg3LDI1NTg5LDI1NTkxLDI1NTkzLDI1NTk0LDI1NTk1LDI1NTk2LDI1NTk4LDI1NjAzLDI1NjA0LDI1NjA2LDI1NjA3LDI1NjA4LDI1NjA5LDI1NjEwLDI1NjEzLDI1NjE0LDI1NjE3LDI1NjE4''@;'; put 'put ''LDI1NjIxLDI1NjIyLDI1NjIzLDI1NjI0LDI1NjI1LDI1NjI2LDI1NjI5LDI1NjMxLDI1NjM0LDI1NjM1LDI1NjM2LDI1NjM3LDI1NjM5LDI1NjQwLDI1NjQxLDI1NjQzLDI1NjQ2LDI1NjQ3LDI1NjQ4LDI1NjQ5LDI1NjUwLDI1NjUxLDI1NjUzLDI1NjU0LDI1NjU1LDI1NjU2LDI1NjU3LDI1''@;'; put 'put ''NjU5LDI1NjYwLDI1NjYyLDI1NjY0LDI1NjY2LDI1NjY3LDI1NjczLDI1Njc1LDI1Njc2LDI1Njc3LDI1Njc4LDI1Njc5LDI1NjgwLDI1NjgxLDI1NjgzLDI1Njg1LDI1Njg2LDI1Njg3LDI1Njg5LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk4LDI1Njk5''@;'; put 'put ''LDI1NzAwLDI1NzAxLDI1NzAyLDI1NzA0LDI1NzA2LDI1NzA3LDI1NzA4LDI1NzEwLDI1NzExLDI1NzEyLDI1NzEzLDI1NzE0LDI1NzE1LDI1NzE2LDI1NzE3LDI1NzE4LDI1NzE5LDI1NzIzLDI1NzI0LDI1NzI1LDI1NzI2LDI1NzI3LDI1NzI4LDI1NzI5LDI1NzMxLDI1NzM0LDI1NzM2LDI1''@;'; put 'put ''NzM3LDI1NzM4LDI1NzM5LDI1NzQwLDI1NzQxLDI1NzQyLDI1NzQzLDI1NzQ0LDI1NzQ3LDI1NzQ4LDI1NzUxLDI1NzUyLDI1NzU0LDI1NzU1LDI1NzU2LDI1NzU3LDI1NzU5LDI1NzYwLDI1NzYxLDI1NzYyLDI1NzYzLDI1NzY1LDI1NzY2LDI1NzY3LDI1NzY4LDI1NzcwLDI1NzcxLDI1Nzc1''@;'; put 'put ''LDI1Nzc3LDI1Nzc4LDI1Nzc5LDI1NzgwLDI1NzgyLDI1Nzg1LDI1Nzg3LDI1Nzg5LDI1NzkwLDI1NzkxLDI1NzkzLDI1Nzk1LDI1Nzk2LDI1Nzk4LDI1Nzk5LDI1ODAwLDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA3LDI1ODA5LDI1ODExLDI1ODEyLDI1ODEzLDI1ODE0LDI1ODE3LDI1''@;'; put 'put ''ODE4LDI1ODE5LDI1ODIwLDI1ODIxLDI1ODIzLDI1ODI0LDI1ODI1LDI1ODI3LDI1ODI5LDI1ODMxLDI1ODMyLDI1ODMzLDI1ODM0LDI1ODM1LDI1ODM2LDI1ODM3LDI1ODM4LDI1ODM5LDI1ODQwLDI1ODQxLDI1ODQyLDI1ODQzLDI1ODQ0LDI1ODQ1LDI1ODQ2LDI1ODQ3LDI1ODQ4LDI1ODQ5''@;'; put 'put ''LDI1ODUwLDI1ODUxLDI1ODUyLDI1ODUzLDI1ODU0LDI1ODU1LDI1ODU3LDI1ODU4LDI1ODU5LDI1ODYwLDI1ODYxLDI1ODYyLDI1ODYzLDI1ODY0LDI1ODY2LDI1ODY3LDI1ODY4LDI1ODY5LDI1ODcwLDI1ODcxLDI1ODcyLDI1ODczLDI1ODc1LDI1ODc2LDI1ODc3LDI1ODc4LDI1ODc5LDI1''@;'; put 'put ''ODgxLDI1ODgyLDI1ODgzLDI1ODg0LDI1ODg1LDI1ODg2LDI1ODg3LDI1ODg4LDI1ODg5LDI1ODkwLDI1ODkxLDI1ODkyLDI1ODk0LDI1ODk1LDI1ODk2LDI1ODk3LDI1ODk4LDI1OTAwLDI1OTAxLDI1OTA0LDI1OTA1LDI1OTA2LDI1OTA3LDI1OTExLDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIw''@;'; put 'put ''LDI1OTIxLDI1OTIyLDI1OTIzLDI1OTI0LDI1OTI2LDI1OTI3LDI1OTMwLDI1OTMxLDI1OTMzLDI1OTM0LDI1OTM2LDI1OTM4LDI1OTM5LDI1OTQwLDI1OTQzLDI1OTQ0LDI1OTQ2LDI1OTQ4LDI1OTUxLDI1OTUyLDI1OTUzLDI1OTU2LDI1OTU3LDI1OTU5LDI1OTYwLDI1OTYxLDI1OTYyLDI1''@;'; put 'put ''OTY1LDI1OTY2LDI1OTY3LDI1OTY5LDI1OTcxLDI1OTczLDI1OTc0LDI1OTc2LDI1OTc3LDI1OTc4LDI1OTc5LDI1OTgwLDI1OTgxLDI1OTgyLDI1OTgzLDI1OTg0LDI1OTg1LDI1OTg2LDI1OTg3LDI1OTg4LDI1OTg5LDI1OTkwLDI1OTkyLDI1OTkzLDI1OTk0LDI1OTk3LDI1OTk4LDI1OTk5''@;'; put 'put ''LDI2MDAyLDI2MDA0LDI2MDA1LDI2MDA2LDI2MDA4LDI2MDEwLDI2MDEzLDI2MDE0LDI2MDE2LDI2MDE4LDI2MDE5LDI2MDIyLDI2MDI0LDI2MDI2LDI2MDI4LDI2MDMwLDI2MDMzLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDM3LDI2MDM4LDI2MDM5LDI2MDQwLDI2MDQyLDI2MDQzLDI2MDQ2LDI2''@;'; put 'put ''MDQ3LDI2MDQ4LDI2MDUwLDI2MDU1LDI2MDU2LDI2MDU3LDI2MDU4LDI2MDYxLDI2MDY0LDI2MDY1LDI2MDY3LDI2MDY4LDI2MDY5LDI2MDcyLDI2MDczLDI2MDc0LDI2MDc1LDI2MDc2LDI2MDc3LDI2MDc4LDI2MDc5LDI2MDgxLDI2MDgzLDI2MDg0LDI2MDkwLDI2MDkxLDI2MDk4LDI2MDk5''@;'; put 'put ''LDI2MTAwLDI2MTAxLDI2MTA0LDI2MTA1LDI2MTA3LDI2MTA4LDI2MTA5LDI2MTEwLDI2MTExLDI2MTEzLDI2MTE2LDI2MTE3LDI2MTE5LDI2MTIwLDI2MTIxLDI2MTIzLDI2MTI1LDI2MTI4LDI2MTI5LDI2MTMwLDI2MTM0LDI2MTM1LDI2MTM2LDI2MTM4LDI2MTM5LDI2MTQwLDI2MTQyLDI2''@;'; put 'put ''MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2MTYyLDI2MTYzLDI2MTY3LDI2MTY4LDI2MTY5LDI2MTcwLDI2MTcxLDI2MTczLDI2MTc1LDI2MTc2LDI2MTc4LDI2MTgwLDI2MTgxLDI2MTgyLDI2MTgzLDI2MTg0LDI2MTg1''@;'; put 'put ''LDI2MTg2LDI2MTg5LDI2MTkwLDI2MTkyLDI2MTkzLDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA1LDI2MjA2LDI2MjA4LDI2MjEwLDI2MjExLDI2MjEzLDI2MjE1LDI2MjE3LDI2MjE4LDI2MjE5LDI2MjIwLDI2MjIxLDI2MjI1LDI2MjI2LDI2MjI3LDI2MjI5LDI2MjMyLDI2MjMzLDI2''@;'; put 'put ''MjM1LDI2MjM2LDI2MjM3LDI2MjM5LDI2MjQwLDI2MjQxLDI2MjQzLDI2MjQ1LDI2MjQ2LDI2MjQ4LDI2MjQ5LDI2MjUwLDI2MjUxLDI2MjUzLDI2MjU0LDI2MjU1LDI2MjU2LDI2MjU4LDI2MjU5LDI2MjYwLDI2MjYxLDI2MjY0LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcwLDI2Mjcx''@;'; put 'put ''LDI2MjcyLDI2MjczLDI2Mjc0LDI2Mjc1LDI2Mjc2LDI2Mjc3LDI2Mjc4LDI2MjgxLDI2MjgyLDI2MjgzLDI2Mjg0LDI2Mjg1LDI2Mjg3LDI2Mjg4LDI2Mjg5LDI2MjkwLDI2MjkxLDI2MjkzLDI2Mjk0LDI2Mjk1LDI2Mjk2LDI2Mjk4LDI2Mjk5LDI2MzAwLDI2MzAxLDI2MzAzLDI2MzA0LDI2''@;'; put 'put ''MzA1LDI2MzA2LDI2MzA3LDI2MzA4LDI2MzA5LDI2MzEwLDI2MzExLDI2MzEyLDI2MzEzLDI2MzE0LDI2MzE1LDI2MzE2LDI2MzE3LDI2MzE4LDI2MzE5LDI2MzIwLDI2MzIxLDI2MzIyLDI2MzIzLDI2MzI0LDI2MzI1LDI2MzI2LDI2MzI3LDI2MzI4LDI2MzMwLDI2MzM0LDI2MzM1LDI2MzM2''@;'; put 'put ''LDI2MzM3LDI2MzM4LDI2MzM5LDI2MzQwLDI2MzQxLDI2MzQzLDI2MzQ0LDI2MzQ2LDI2MzQ3LDI2MzQ4LDI2MzQ5LDI2MzUwLDI2MzUxLDI2MzUzLDI2MzU3LDI2MzU4LDI2MzYwLDI2MzYyLDI2MzYzLDI2MzY1LDI2MzY5LDI2MzcwLDI2MzcxLDI2MzcyLDI2MzczLDI2Mzc0LDI2Mzc1LDI2''@;'; put 'put ''MzgwLDI2MzgyLDI2MzgzLDI2Mzg1LDI2Mzg2LDI2Mzg3LDI2MzkwLDI2MzkyLDI2MzkzLDI2Mzk0LDI2Mzk2LDI2Mzk4LDI2NDAwLDI2NDAxLDI2NDAyLDI2NDAzLDI2NDA0LDI2NDA1LDI2NDA3LDI2NDA5LDI2NDE0LDI2NDE2LDI2NDE4LDI2NDE5LDI2NDIyLDI2NDIzLDI2NDI0LDI2NDI1''@;'; put 'put ''LDI2NDI3LDI2NDI4LDI2NDMwLDI2NDMxLDI2NDMzLDI2NDM2LDI2NDM3LDI2NDM5LDI2NDQyLDI2NDQzLDI2NDQ1LDI2NDUwLDI2NDUyLDI2NDUzLDI2NDU1LDI2NDU2LDI2NDU3LDI2NDU4LDI2NDU5LDI2NDYxLDI2NDY2LDI2NDY3LDI2NDY4LDI2NDcwLDI2NDcxLDI2NDc1LDI2NDc2LDI2''@;'; put 'put ''NDc4LDI2NDgxLDI2NDg0LDI2NDg2LDI2NDg4LDI2NDg5LDI2NDkwLDI2NDkxLDI2NDkzLDI2NDk2LDI2NDk4LDI2NDk5LDI2NTAxLDI2NTAyLDI2NTA0LDI2NTA2LDI2NTA4LDI2NTA5LDI2NTEwLDI2NTExLDI2NTEzLDI2NTE0LDI2NTE1LDI2NTE2LDI2NTE4LDI2NTIxLDI2NTIzLDI2NTI3''@;'; put 'put ''LDI2NTI4LDI2NTI5LDI2NTMyLDI2NTM0LDI2NTM3LDI2NTQwLDI2NTQyLDI2NTQ1LDI2NTQ2LDI2NTQ4LDI2NTUzLDI2NTU0LDI2NTU1LDI2NTU2LDI2NTU3LDI2NTU4LDI2NTU5LDI2NTYwLDI2NTYyLDI2NTY1LDI2NTY2LDI2NTY3LDI2NTY4LDI2NTY5LDI2NTcwLDI2NTcxLDI2NTcyLDI2''@;'; put 'put ''NTczLDI2NTc0LDI2NTgxLDI2NTgyLDI2NTgzLDI2NTg3LDI2NTkxLDI2NTkzLDI2NTk1LDI2NTk2LDI2NTk4LDI2NTk5LDI2NjAwLDI2NjAyLDI2NjAzLDI2NjA1LDI2NjA2LDI2NjEwLDI2NjEzLDI2NjE0LDI2NjE1LDI2NjE2LDI2NjE3LDI2NjE4LDI2NjE5LDI2NjIwLDI2NjIyLDI2NjI1''@;'; put 'put ''LDI2NjI2LDI2NjI3LDI2NjI4LDI2NjMwLDI2NjM3LDI2NjQwLDI2NjQyLDI2NjQ0LDI2NjQ1LDI2NjQ4LDI2NjQ5LDI2NjUwLDI2NjUxLDI2NjUyLDI2NjU0LDI2NjU1LDI2NjU2LDI2NjU4LDI2NjU5LDI2NjYwLDI2NjYxLDI2NjYyLDI2NjYzLDI2NjY0LDI2NjY3LDI2NjY4LDI2NjY5LDI2''@;'; put 'put ''NjcwLDI2NjcxLDI2NjcyLDI2NjczLDI2Njc2LDI2Njc3LDI2Njc4LDI2NjgyLDI2NjgzLDI2Njg3LDI2Njk1LDI2Njk5LDI2NzAxLDI2NzAzLDI2NzA2LDI2NzEwLDI2NzExLDI2NzEyLDI2NzEzLDI2NzE0LDI2NzE1LDI2NzE2LDI2NzE3LDI2NzE4LDI2NzE5LDI2NzMwLDI2NzMyLDI2NzMz''@;'; put 'put ''LDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzM5LDI2NzQxLDI2NzQ0LDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzQ5LDI2NzUwLDI2NzUxLDI2NzUyLDI2NzU0LDI2NzU2LDI2NzU5LDI2NzYwLDI2NzYxLDI2NzYyLDI2NzYzLDI2NzY0LDI2NzY1LDI2NzY2LDI2NzY4LDI2''@;'; put 'put ''NzY5LDI2NzcwLDI2NzcyLDI2NzczLDI2Nzc0LDI2Nzc2LDI2Nzc3LDI2Nzc4LDI2Nzc5LDI2NzgwLDI2NzgxLDI2NzgyLDI2NzgzLDI2Nzg0LDI2Nzg1LDI2Nzg3LDI2Nzg4LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk1LDI2Nzk2LDI2Nzk4LDI2ODAxLDI2ODAyLDI2ODA0LDI2ODA2LDI2ODA3''@;'; put 'put ''LDI2ODA4LDI2ODA5LDI2ODEwLDI2ODExLDI2ODEyLDI2ODEzLDI2ODE0LDI2ODE1LDI2ODE3LDI2ODE5LDI2ODIwLDI2ODIxLDI2ODIyLDI2ODIzLDI2ODI0LDI2ODI2LDI2ODI4LDI2ODMwLDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM2LDI2ODM4LDI2ODM5LDI2ODQxLDI2ODQzLDI2''@;'; put 'put ''ODQ0LDI2ODQ1LDI2ODQ2LDI2ODQ3LDI2ODQ5LDI2ODUwLDI2ODUyLDI2ODUzLDI2ODU0LDI2ODU1LDI2ODU2LDI2ODU3LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODYzLDI2ODY2LDI2ODY3LDI2ODY4LDI2ODcwLDI2ODcxLDI2ODcyLDI2ODc1LDI2ODc3LDI2ODc4LDI2ODc5LDI2ODgw''@;'; put 'put ''LDI2ODgyLDI2ODgzLDI2ODg0LDI2ODg2LDI2ODg3LDI2ODg4LDI2ODg5LDI2ODkwLDI2ODkyLDI2ODk1LDI2ODk3LDI2ODk5LDI2OTAwLDI2OTAxLDI2OTAyLDI2OTAzLDI2OTA0LDI2OTA1LDI2OTA2LDI2OTA3LDI2OTA4LDI2OTA5LDI2OTEwLDI2OTEzLDI2OTE0LDI2OTE1LDI2OTE3LDI2''@;'; put 'put ''OTE4LDI2OTE5LDI2OTIwLDI2OTIxLDI2OTIyLDI2OTIzLDI2OTI0LDI2OTI2LDI2OTI3LDI2OTI5LDI2OTMwLDI2OTMxLDI2OTMzLDI2OTM0LDI2OTM1LDI2OTM2LDI2OTM4LDI2OTM5LDI2OTQwLDI2OTQyLDI2OTQ0LDI2OTQ1LDI2OTQ3LDI2OTQ4LDI2OTQ5LDI2OTUwLDI2OTUxLDI2OTUy''@;'; put 'put ''LDI2OTUzLDI2OTU0LDI2OTU1LDI2OTU2LDI2OTU3LDI2OTU4LDI2OTU5LDI2OTYwLDI2OTYxLDI2OTYyLDI2OTYzLDI2OTY1LDI2OTY2LDI2OTY4LDI2OTY5LDI2OTcxLDI2OTcyLDI2OTc1LDI2OTc3LDI2OTc4LDI2OTgwLDI2OTgxLDI2OTgzLDI2OTg0LDI2OTg1LDI2OTg2LDI2OTg4LDI2''@;'; put 'put ''OTg5LDI2OTkxLDI2OTkyLDI2OTk0LDI2OTk1LDI2OTk2LDI2OTk3LDI2OTk4LDI3MDAyLDI3MDAzLDI3MDA1LDI3MDA2LDI3MDA3LDI3MDA5LDI3MDExLDI3MDEzLDI3MDE4LDI3MDE5LDI3MDIwLDI3MDIyLDI3MDIzLDI3MDI0LDI3MDI1LDI3MDI2LDI3MDI3LDI3MDMwLDI3MDMxLDI3MDMz''@;'; put 'put ''LDI3MDM0LDI3MDM3LDI3MDM4LDI3MDM5LDI3MDQwLDI3MDQxLDI3MDQyLDI3MDQzLDI3MDQ0LDI3MDQ1LDI3MDQ2LDI3MDQ5LDI3MDUwLDI3MDUyLDI3MDU0LDI3MDU1LDI3MDU2LDI3MDU4LDI3MDU5LDI3MDYxLDI3MDYyLDI3MDY0LDI3MDY1LDI3MDY2LDI3MDY4LDI3MDY5LDI3MDcwLDI3''@;'; put 'put ''MDcxLDI3MDcyLDI3MDc0LDI3MDc1LDI3MDc2LDI3MDc3LDI3MDc4LDI3MDc5LDI3MDgwLDI3MDgxLDI3MDgzLDI3MDg1LDI3MDg3LDI3MDg5LDI3MDkwLDI3MDkxLDI3MDkzLDI3MDk0LDI3MDk1LDI3MDk2LDI3MDk3LDI3MDk4LDI3MTAwLDI3MTAxLDI3MTAyLDI3MTA1LDI3MTA2LDI3MTA3''@;'; put 'put ''LDI3MTA4LDI3MTA5LDI3MTEwLDI3MTExLDI3MTEyLDI3MTEzLDI3MTE0LDI3MTE1LDI3MTE2LDI3MTE4LDI3MTE5LDI3MTIwLDI3MTIxLDI3MTIzLDI3MTI0LDI3MTI1LDI3MTI2LDI3MTI3LDI3MTI4LDI3MTI5LDI3MTMwLDI3MTMxLDI3MTMyLDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM4LDI3''@;'; put 'put ''MTM5LDI3MTQwLDI3MTQxLDI3MTQyLDI3MTQzLDI3MTQ0LDI3MTQ1LDI3MTQ3LDI3MTQ4LDI3MTQ5LDI3MTUwLDI3MTUxLDI3MTUyLDI3MTUzLDI3MTU0LDI3MTU1LDI3MTU2LDI3MTU3LDI3MTU4LDI3MTYxLDI3MTYyLDI3MTYzLDI3MTY0LDI3MTY1LDI3MTY2LDI3MTY4LDI3MTcwLDI3MTcx''@;'; put 'put ''LDI3MTcyLDI3MTczLDI3MTc0LDI3MTc1LDI3MTc3LDI3MTc5LDI3MTgwLDI3MTgxLDI3MTgyLDI3MTg0LDI3MTg2LDI3MTg3LDI3MTg4LDI3MTkwLDI3MTkxLDI3MTkyLDI3MTkzLDI3MTk0LDI3MTk1LDI3MTk2LDI3MTk5LDI3MjAwLDI3MjAxLDI3MjAyLDI3MjAzLDI3MjA1LDI3MjA2LDI3''@;'; put 'put ''MjA4LDI3MjA5LDI3MjEwLDI3MjExLDI3MjEyLDI3MjEzLDI3MjE0LDI3MjE1LDI3MjE3LDI3MjE4LDI3MjE5LDI3MjIwLDI3MjIxLDI3MjIyLDI3MjIzLDI3MjI2LDI3MjI4LDI3MjI5LDI3MjMwLDI3MjMxLDI3MjMyLDI3MjM0LDI3MjM1LDI3MjM2LDI3MjM4LDI3MjM5LDI3MjQwLDI3MjQx''@;'; put 'put ''LDI3MjQyLDI3MjQzLDI3MjQ0LDI3MjQ1LDI3MjQ2LDI3MjQ3LDI3MjQ4LDI3MjUwLDI3MjUxLDI3MjUyLDI3MjUzLDI3MjU0LDI3MjU1LDI3MjU2LDI3MjU4LDI3MjU5LDI3MjYxLDI3MjYyLDI3MjYzLDI3MjY1LDI3MjY2LDI3MjY3LDI3MjY5LDI3MjcwLDI3MjcxLDI3MjcyLDI3MjczLDI3''@;'; put 'put ''Mjc0LDI3Mjc1LDI3Mjc2LDI3Mjc3LDI3Mjc5LDI3MjgyLDI3MjgzLDI3Mjg0LDI3Mjg1LDI3Mjg2LDI3Mjg4LDI3Mjg5LDI3MjkwLDI3MjkxLDI3MjkyLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3Mjk3LDI3Mjk4LDI3Mjk5LDI3MzAwLDI3MzAxLDI3MzAyLDI3MzAzLDI3MzA0LDI3MzA2LDI3MzA5''@;'; put 'put ''LDI3MzEwLDI3MzExLDI3MzEyLDI3MzEzLDI3MzE0LDI3MzE1LDI3MzE2LDI3MzE3LDI3MzE4LDI3MzE5LDI3MzIwLDI3MzIxLDI3MzIyLDI3MzIzLDI3MzI0LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzI4LDI3MzI5LDI3MzMwLDI3MzMxLDI3MzMyLDI3MzMzLDI3MzM0LDI3MzM1LDI3MzM2LDI3''@;'; put 'put ''MzM3LDI3MzM4LDI3MzM5LDI3MzQwLDI3MzQxLDI3MzQyLDI3MzQzLDI3MzQ0LDI3MzQ1LDI3MzQ2LDI3MzQ3LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzUxLDI3MzUyLDI3MzUzLDI3MzU0LDI3MzU1LDI3MzU2LDI3MzU3LDI3MzU4LDI3MzU5LDI3MzYwLDI3MzYxLDI3MzYyLDI3MzYzLDI3MzY0''@;'; put 'put ''LDI3MzY1LDI3MzY2LDI3MzY3LDI3MzY4LDI3MzY5LDI3MzcwLDI3MzcxLDI3MzcyLDI3MzczLDI3Mzc0LDI3Mzc1LDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzc5LDI3MzgwLDI3MzgxLDI3MzgyLDI3MzgzLDI3Mzg0LDI3Mzg1LDI3Mzg2LDI3Mzg3LDI3Mzg4LDI3Mzg5LDI3MzkwLDI3MzkxLDI3''@;'; put 'put ''MzkyLDI3MzkzLDI3Mzk0LDI3Mzk1LDI3Mzk2LDI3Mzk3LDI3Mzk4LDI3Mzk5LDI3NDAwLDI3NDAxLDI3NDAyLDI3NDAzLDI3NDA0LDI3NDA1LDI3NDA2LDI3NDA3LDI3NDA4LDI3NDA5LDI3NDEwLDI3NDExLDI3NDEyLDI3NDEzLDI3NDE0LDI3NDE1LDI3NDE2LDI3NDE3LDI3NDE4LDI3NDE5''@;'; put 'put ''LDI3NDIwLDI3NDIxLDI3NDIyLDI3NDIzLDI3NDI5LDI3NDMwLDI3NDMyLDI3NDMzLDI3NDM0LDI3NDM1LDI3NDM2LDI3NDM3LDI3NDM4LDI3NDM5LDI3NDQwLDI3NDQxLDI3NDQzLDI3NDQ0LDI3NDQ1LDI3NDQ2LDI3NDQ4LDI3NDUxLDI3NDUyLDI3NDUzLDI3NDU1LDI3NDU2LDI3NDU3LDI3''@;'; put 'put ''NDU4LDI3NDYwLDI3NDYxLDI3NDY0LDI3NDY2LDI3NDY3LDI3NDY5LDI3NDcwLDI3NDcxLDI3NDcyLDI3NDczLDI3NDc0LDI3NDc1LDI3NDc2LDI3NDc3LDI3NDc4LDI3NDc5LDI3NDgwLDI3NDgyLDI3NDgzLDI3NDg0LDI3NDg1LDI3NDg2LDI3NDg3LDI3NDg4LDI3NDg5LDI3NDk2LDI3NDk3''@;'; put 'put ''LDI3NDk5LDI3NTAwLDI3NTAxLDI3NTAyLDI3NTAzLDI3NTA0LDI3NTA1LDI3NTA2LDI3NTA3LDI3NTA4LDI3NTA5LDI3NTEwLDI3NTExLDI3NTEyLDI3NTE0LDI3NTE3LDI3NTE4LDI3NTE5LDI3NTIwLDI3NTI1LDI3NTI4LDI3NTMyLDI3NTM0LDI3NTM1LDI3NTM2LDI3NTM3LDI3NTQwLDI3''@;'; put 'put ''NTQxLDI3NTQzLDI3NTQ0LDI3NTQ1LDI3NTQ4LDI3NTQ5LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTU2LDI3NTU3LDI3NTU4LDI3NTU5LDI3NTYwLDI3NTYxLDI3NTYzLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY3LDI3NTY4LDI3NTY5LDI3NTcwLDI3NTc0LDI3NTc2LDI3NTc3''@;'; put 'put ''LDI3NTc4LDI3NTc5LDI3NTgwLDI3NTgxLDI3NTgyLDI3NTg0LDI3NTg3LDI3NTg4LDI3NTkwLDI3NTkxLDI3NTkyLDI3NTkzLDI3NTk0LDI3NTk2LDI3NTk4LDI3NjAwLDI3NjAxLDI3NjA4LDI3NjEwLDI3NjEyLDI3NjEzLDI3NjE0LDI3NjE1LDI3NjE2LDI3NjE4LDI3NjE5LDI3NjIwLDI3''@;'; put 'put ''NjIxLDI3NjIyLDI3NjIzLDI3NjI0LDI3NjI1LDI3NjI4LDI3NjI5LDI3NjMwLDI3NjMyLDI3NjMzLDI3NjM0LDI3NjM2LDI3NjM4LDI3NjM5LDI3NjQwLDI3NjQyLDI3NjQzLDI3NjQ0LDI3NjQ2LDI3NjQ3LDI3NjQ4LDI3NjQ5LDI3NjUwLDI3NjUxLDI3NjUyLDI3NjU2LDI3NjU3LDI3NjU4''@;'; put 'put ''LDI3NjU5LDI3NjYwLDI3NjYyLDI3NjY2LDI3NjcxLDI3Njc2LDI3Njc3LDI3Njc4LDI3NjgwLDI3NjgzLDI3Njg1LDI3NjkxLDI3NjkyLDI3NjkzLDI3Njk3LDI3Njk5LDI3NzAyLDI3NzAzLDI3NzA1LDI3NzA2LDI3NzA3LDI3NzA4LDI3NzEwLDI3NzExLDI3NzE1LDI3NzE2LDI3NzE3LDI3''@;'; put 'put ''NzIwLDI3NzIzLDI3NzI0LDI3NzI1LDI3NzI2LDI3NzI3LDI3NzI5LDI3NzMwLDI3NzMxLDI3NzM0LDI3NzM2LDI3NzM3LDI3NzM4LDI3NzQ2LDI3NzQ3LDI3NzQ5LDI3NzUwLDI3NzUxLDI3NzU1LDI3NzU2LDI3NzU3LDI3NzU4LDI3NzU5LDI3NzYxLDI3NzYzLDI3NzY1LDI3NzY3LDI3NzY4''@;'; put 'put ''LDI3NzcwLDI3NzcxLDI3NzcyLDI3Nzc1LDI3Nzc2LDI3NzgwLDI3NzgzLDI3Nzg2LDI3Nzg3LDI3Nzg5LDI3NzkwLDI3NzkzLDI3Nzk0LDI3Nzk3LDI3Nzk4LDI3Nzk5LDI3ODAwLDI3ODAyLDI3ODA0LDI3ODA1LDI3ODA2LDI3ODA4LDI3ODEwLDI3ODE2LDI3ODIwLDI3ODIzLDI3ODI0LDI3''@;'; put 'put ''ODI4LDI3ODI5LDI3ODMwLDI3ODMxLDI3ODM0LDI3ODQwLDI3ODQxLDI3ODQyLDI3ODQzLDI3ODQ2LDI3ODQ3LDI3ODQ4LDI3ODUxLDI3ODUzLDI3ODU0LDI3ODU1LDI3ODU3LDI3ODU4LDI3ODY0LDI3ODY1LDI3ODY2LDI3ODY4LDI3ODY5LDI3ODcxLDI3ODc2LDI3ODc4LDI3ODc5LDI3ODgx''@;'; put 'put ''LDI3ODg0LDI3ODg1LDI3ODkwLDI3ODkyLDI3ODk3LDI3OTAzLDI3OTA0LDI3OTA2LDI3OTA3LDI3OTA5LDI3OTEwLDI3OTEyLDI3OTEzLDI3OTE0LDI3OTE3LDI3OTE5LDI3OTIwLDI3OTIxLDI3OTIzLDI3OTI0LDI3OTI1LDI3OTI2LDI3OTI4LDI3OTMyLDI3OTMzLDI3OTM1LDI3OTM2LDI3''@;'; put 'put ''OTM3LDI3OTM4LDI3OTM5LDI3OTQwLDI3OTQyLDI3OTQ0LDI3OTQ1LDI3OTQ4LDI3OTQ5LDI3OTUxLDI3OTUyLDI3OTU2LDI3OTU4LDI3OTU5LDI3OTYwLDI3OTYyLDI3OTY3LDI3OTY4LDI3OTcwLDI3OTcyLDI3OTc3LDI3OTgwLDI3OTg0LDI3OTg5LDI3OTkwLDI3OTkxLDI3OTkyLDI3OTk1''@;'; put 'put ''LDI3OTk3LDI3OTk5LDI4MDAxLDI4MDAyLDI4MDA0LDI4MDA1LDI4MDA3LDI4MDA4LDI4MDExLDI4MDEyLDI4MDEzLDI4MDE2LDI4MDE3LDI4MDE4LDI4MDE5LDI4MDIxLDI4MDIyLDI4MDI1LDI4MDI2LDI4MDI3LDI4MDI5LDI4MDMwLDI4MDMxLDI4MDMyLDI4MDMzLDI4MDM1LDI4MDM2LDI4''@;'; put 'put ''MDM4LDI4MDM5LDI4MDQyLDI4MDQzLDI4MDQ1LDI4MDQ3LDI4MDQ4LDI4MDUwLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDU3LDI4MDU4LDI4MDYwLDI4MDY2LDI4MDY5LDI4MDc2LDI4MDc3LDI4MDgwLDI4MDgxLDI4MDgzLDI4MDg0LDI4MDg2LDI4MDg3LDI4MDg5LDI4MDkwLDI4MDkxLDI4MDky''@;'; put 'put ''LDI4MDkzLDI4MDk0LDI4MDk3LDI4MDk4LDI4MDk5LDI4MTA0LDI4MTA1LDI4MTA2LDI4MTA5LDI4MTEwLDI4MTExLDI4MTEyLDI4MTE0LDI4MTE1LDI4MTE2LDI4MTE3LDI4MTE5LDI4MTIyLDI4MTIzLDI4MTI0LDI4MTI3LDI4MTMwLDI4MTMxLDI4MTMzLDI4MTM1LDI4MTM2LDI4MTM3LDI4''@;'; put 'put ''MTM4LDI4MTQxLDI4MTQzLDI4MTQ0LDI4MTQ2LDI4MTQ4LDI4MTQ5LDI4MTUwLDI4MTUyLDI4MTU0LDI4MTU3LDI4MTU4LDI4MTU5LDI4MTYwLDI4MTYxLDI4MTYyLDI4MTYzLDI4MTY0LDI4MTY2LDI4MTY3LDI4MTY4LDI4MTY5LDI4MTcxLDI4MTc1LDI4MTc4LDI4MTc5LDI4MTgxLDI4MTg0''@;'; put 'put ''LDI4MTg1LDI4MTg3LDI4MTg4LDI4MTkwLDI4MTkxLDI4MTk0LDI4MTk4LDI4MTk5LDI4MjAwLDI4MjAyLDI4MjA0LDI4MjA2LDI4MjA4LDI4MjA5LDI4MjExLDI4MjEzLDI4MjE0LDI4MjE1LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjIxLDI4MjIyLDI4MjIzLDI4MjI0LDI4MjI1LDI4MjI2LDI4''@;'; put 'put ''MjI5LDI4MjMwLDI4MjMxLDI4MjMyLDI4MjMzLDI4MjM0LDI4MjM1LDI4MjM2LDI4MjM5LDI4MjQwLDI4MjQxLDI4MjQyLDI4MjQ1LDI4MjQ3LDI4MjQ5LDI4MjUwLDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU2LDI4MjU3LDI4MjU4LDI4MjU5LDI4MjYwLDI4MjYxLDI4MjYyLDI4MjYzLDI4MjY0''@;'; put 'put ''LDI4MjY1LDI4MjY2LDI4MjY4LDI4MjY5LDI4MjcxLDI4MjcyLDI4MjczLDI4Mjc0LDI4Mjc1LDI4Mjc2LDI4Mjc3LDI4Mjc4LDI4Mjc5LDI4MjgwLDI4MjgxLDI4MjgyLDI4MjgzLDI4Mjg0LDI4Mjg1LDI4Mjg4LDI4Mjg5LDI4MjkwLDI4MjkyLDI4Mjk1LDI4Mjk2LDI4Mjk4LDI4Mjk5LDI4''@;'; put 'put ''MzAwLDI4MzAxLDI4MzAyLDI4MzA1LDI4MzA2LDI4MzA3LDI4MzA4LDI4MzA5LDI4MzEwLDI4MzExLDI4MzEzLDI4MzE0LDI4MzE1LDI4MzE3LDI4MzE4LDI4MzIwLDI4MzIxLDI4MzIzLDI4MzI0LDI4MzI2LDI4MzI4LDI4MzI5LDI4MzMxLDI4MzMyLDI4MzMzLDI4MzM0LDI4MzM2LDI4MzM5''@;'; put 'put ''LDI4MzQxLDI4MzQ0LDI4MzQ1LDI4MzQ4LDI4MzUwLDI4MzUxLDI4MzUyLDI4MzU1LDI4MzU2LDI4MzU3LDI4MzU4LDI4MzYwLDI4MzYxLDI4MzYyLDI4MzY0LDI4MzY1LDI4MzY2LDI4MzY4LDI4MzcwLDI4Mzc0LDI4Mzc2LDI4Mzc3LDI4Mzc5LDI4MzgwLDI4MzgxLDI4Mzg3LDI4MzkxLDI4''@;'; put 'put ''Mzk0LDI4Mzk1LDI4Mzk2LDI4Mzk3LDI4Mzk4LDI4Mzk5LDI4NDAwLDI4NDAxLDI4NDAyLDI4NDAzLDI4NDA1LDI4NDA2LDI4NDA3LDI4NDA4LDI4NDEwLDI4NDExLDI4NDEyLDI4NDEzLDI4NDE0LDI4NDE1LDI4NDE2LDI4NDE3LDI4NDE5LDI4NDIwLDI4NDIxLDI4NDIzLDI4NDI0LDI4NDI2''@;'; put 'put ''LDI4NDI3LDI4NDI4LDI4NDI5LDI4NDMwLDI4NDMyLDI4NDMzLDI4NDM0LDI4NDM4LDI4NDM5LDI4NDQwLDI4NDQxLDI4NDQyLDI4NDQzLDI4NDQ0LDI4NDQ1LDI4NDQ2LDI4NDQ3LDI4NDQ5LDI4NDUwLDI4NDUxLDI4NDUzLDI4NDU0LDI4NDU1LDI4NDU2LDI4NDYwLDI4NDYyLDI4NDY0LDI4''@;'; put 'put ''NDY2LDI4NDY4LDI4NDY5LDI4NDcxLDI4NDcyLDI4NDczLDI4NDc0LDI4NDc1LDI4NDc2LDI4NDc3LDI4NDc5LDI4NDgwLDI4NDgxLDI4NDgyLDI4NDgzLDI4NDg0LDI4NDg1LDI4NDg4LDI4NDg5LDI4NDkwLDI4NDkyLDI4NDk0LDI4NDk1LDI4NDk2LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAw''@;'; put 'put ''LDI4NTAxLDI4NTAyLDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA3LDI4NTA5LDI4NTExLDI4NTEyLDI4NTEzLDI4NTE1LDI4NTE2LDI4NTE3LDI4NTE5LDI4NTIwLDI4NTIxLDI4NTIyLDI4NTIzLDI4NTI0LDI4NTI3LDI4NTI4LDI4NTI5LDI4NTMxLDI4NTMzLDI4NTM0LDI4NTM1LDI4NTM3LDI4''@;'; put 'put ''NTM5LDI4NTQxLDI4NTQyLDI4NTQzLDI4NTQ0LDI4NTQ1LDI4NTQ2LDI4NTQ3LDI4NTQ5LDI4NTUwLDI4NTUxLDI4NTU0LDI4NTU1LDI4NTU5LDI4NTYwLDI4NTYxLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY1LDI4NTY2LDI4NTY3LDI4NTY4LDI4NTY5LDI4NTcwLDI4NTcxLDI4NTczLDI4NTc0''@;'; put 'put ''LDI4NTc1LDI4NTc2LDI4NTc4LDI4NTc5LDI4NTgwLDI4NTgxLDI4NTgyLDI4NTg0LDI4NTg1LDI4NTg2LDI4NTg3LDI4NTg4LDI4NTg5LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTkzLDI4NTk0LDI4NTk2LDI4NTk3LDI4NTk5LDI4NjAwLDI4NjAyLDI4NjAzLDI4NjA0LDI4NjA1LDI4NjA2LDI4''@;'; put 'put ''NjA3LDI4NjA5LDI4NjExLDI4NjEyLDI4NjEzLDI4NjE0LDI4NjE1LDI4NjE2LDI4NjE4LDI4NjE5LDI4NjIwLDI4NjIxLDI4NjIyLDI4NjIzLDI4NjI0LDI4NjI3LDI4NjI4LDI4NjI5LDI4NjMwLDI4NjMxLDI4NjMyLDI4NjMzLDI4NjM0LDI4NjM1LDI4NjM2LDI4NjM3LDI4NjM5LDI4NjQy''@;'; put 'put ''LDI4NjQzLDI4NjQ0LDI4NjQ1LDI4NjQ2LDI4NjQ3LDI4NjQ4LDI4NjQ5LDI4NjUwLDI4NjUxLDI4NjUyLDI4NjUzLDI4NjU2LDI4NjU3LDI4NjU4LDI4NjU5LDI4NjYwLDI4NjYxLDI4NjYyLDI4NjYzLDI4NjY0LDI4NjY1LDI4NjY2LDI4NjY3LDI4NjY4LDI4NjY5LDI4NjcwLDI4NjcxLDI4''@;'; put 'put ''NjcyLDI4NjczLDI4Njc0LDI4Njc1LDI4Njc2LDI4Njc3LDI4Njc4LDI4Njc5LDI4NjgwLDI4NjgxLDI4NjgyLDI4NjgzLDI4Njg0LDI4Njg1LDI4Njg2LDI4Njg3LDI4Njg4LDI4NjkwLDI4NjkxLDI4NjkyLDI4NjkzLDI4Njk0LDI4Njk1LDI4Njk2LDI4Njk3LDI4NzAwLDI4NzAxLDI4NzAy''@;'; put 'put ''LDI4NzAzLDI4NzA0LDI4NzA1LDI4NzA2LDI4NzA4LDI4NzA5LDI4NzEwLDI4NzExLDI4NzEyLDI4NzEzLDI4NzE0LDI4NzE1LDI4NzE2LDI4NzE3LDI4NzE4LDI4NzE5LDI4NzIwLDI4NzIxLDI4NzIyLDI4NzIzLDI4NzI0LDI4NzI2LDI4NzI3LDI4NzI4LDI4NzMwLDI4NzMxLDI4NzMyLDI4''@;'; put 'put ''NzMzLDI4NzM0LDI4NzM1LDI4NzM2LDI4NzM3LDI4NzM4LDI4NzM5LDI4NzQwLDI4NzQxLDI4NzQyLDI4NzQzLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzQ5LDI4NzUwLDI4NzUyLDI4NzUzLDI4NzU0LDI4NzU1LDI4NzU2LDI4NzU3LDI4NzU4LDI4NzU5LDI4NzYwLDI4NzYxLDI4NzYy''@;'; put 'put ''LDI4NzYzLDI4NzY0LDI4NzY1LDI4NzY3LDI4NzY4LDI4NzY5LDI4NzcwLDI4NzcxLDI4NzcyLDI4NzczLDI4Nzc0LDI4Nzc1LDI4Nzc2LDI4Nzc3LDI4Nzc4LDI4NzgyLDI4Nzg1LDI4Nzg2LDI4Nzg3LDI4Nzg4LDI4NzkxLDI4NzkzLDI4Nzk0LDI4Nzk1LDI4Nzk3LDI4ODAxLDI4ODAyLDI4''@;'; put 'put ''ODAzLDI4ODA0LDI4ODA2LDI4ODA3LDI4ODA4LDI4ODExLDI4ODEyLDI4ODEzLDI4ODE1LDI4ODE2LDI4ODE3LDI4ODE5LDI4ODIzLDI4ODI0LDI4ODI2LDI4ODI3LDI4ODMwLDI4ODMxLDI4ODMyLDI4ODMzLDI4ODM0LDI4ODM1LDI4ODM2LDI4ODM3LDI4ODM4LDI4ODM5LDI4ODQwLDI4ODQx''@;'; put 'put ''LDI4ODQyLDI4ODQ4LDI4ODUwLDI4ODUyLDI4ODUzLDI4ODU0LDI4ODU4LDI4ODYyLDI4ODYzLDI4ODY4LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODczLDI4ODc1LDI4ODc2LDI4ODc3LDI4ODc4LDI4ODc5LDI4ODgwLDI4ODgxLDI4ODgyLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg3LDI4''@;'; put 'put ''ODkwLDI4ODkyLDI4ODkzLDI4ODk0LDI4ODk2LDI4ODk3LDI4ODk4LDI4ODk5LDI4OTAxLDI4OTA2LDI4OTEwLDI4OTEyLDI4OTEzLDI4OTE0LDI4OTE1LDI4OTE2LDI4OTE3LDI4OTE4LDI4OTIwLDI4OTIyLDI4OTIzLDI4OTI0LDI4OTI2LDI4OTI3LDI4OTI4LDI4OTI5LDI4OTMwLDI4OTMx''@;'; put 'put ''LDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM2LDI4OTM5LDI4OTQwLDI4OTQxLDI4OTQyLDI4OTQzLDI4OTQ1LDI4OTQ2LDI4OTQ4LDI4OTUxLDI4OTU1LDI4OTU2LDI4OTU3LDI4OTU4LDI4OTU5LDI4OTYwLDI4OTYxLDI4OTYyLDI4OTYzLDI4OTY0LDI4OTY1LDI4OTY3LDI4OTY4LDI4''@;'; put 'put ''OTY5LDI4OTcwLDI4OTcxLDI4OTcyLDI4OTczLDI4OTc0LDI4OTc4LDI4OTc5LDI4OTgwLDI4OTgxLDI4OTgzLDI4OTg0LDI4OTg1LDI4OTg2LDI4OTg3LDI4OTg4LDI4OTg5LDI4OTkwLDI4OTkxLDI4OTkyLDI4OTkzLDI4OTk0LDI4OTk1LDI4OTk2LDI4OTk4LDI4OTk5LDI5ZTMsMjkwMDEs''@;'; put 'put ''MjkwMDMsMjkwMDUsMjkwMDcsMjkwMDgsMjkwMDksMjkwMTAsMjkwMTEsMjkwMTIsMjkwMTMsMjkwMTQsMjkwMTUsMjkwMTYsMjkwMTcsMjkwMTgsMjkwMTksMjkwMjEsMjkwMjMsMjkwMjQsMjkwMjUsMjkwMjYsMjkwMjcsMjkwMjksMjkwMzMsMjkwMzQsMjkwMzUsMjkwMzYsMjkwMzcsMjkw''@;'; put 'put ''MzksMjkwNDAsMjkwNDEsMjkwNDQsMjkwNDUsMjkwNDYsMjkwNDcsMjkwNDksMjkwNTEsMjkwNTIsMjkwNTQsMjkwNTUsMjkwNTYsMjkwNTcsMjkwNTgsMjkwNTksMjkwNjEsMjkwNjIsMjkwNjMsMjkwNjQsMjkwNjUsMjkwNjcsMjkwNjgsMjkwNjksMjkwNzAsMjkwNzIsMjkwNzMsMjkwNzQs''@;'; put 'put ''MjkwNzUsMjkwNzcsMjkwNzgsMjkwNzksMjkwODIsMjkwODMsMjkwODQsMjkwODUsMjkwODYsMjkwODksMjkwOTAsMjkwOTEsMjkwOTIsMjkwOTMsMjkwOTQsMjkwOTUsMjkwOTcsMjkwOTgsMjkwOTksMjkxMDEsMjkxMDIsMjkxMDMsMjkxMDQsMjkxMDUsMjkxMDYsMjkxMDgsMjkxMTAsMjkx''@;'; put 'put ''MTEsMjkxMTIsMjkxMTQsMjkxMTUsMjkxMTYsMjkxMTcsMjkxMTgsMjkxMTksMjkxMjAsMjkxMjEsMjkxMjIsMjkxMjQsMjkxMjUsMjkxMjYsMjkxMjcsMjkxMjgsMjkxMjksMjkxMzAsMjkxMzEsMjkxMzIsMjkxMzMsMjkxMzUsMjkxMzYsMjkxMzcsMjkxMzgsMjkxMzksMjkxNDIsMjkxNDMs''@;'; put 'put ''MjkxNDQsMjkxNDUsMjkxNDYsMjkxNDcsMjkxNDgsMjkxNDksMjkxNTAsMjkxNTEsMjkxNTMsMjkxNTQsMjkxNTUsMjkxNTYsMjkxNTgsMjkxNjAsMjkxNjEsMjkxNjIsMjkxNjMsMjkxNjQsMjkxNjUsMjkxNjcsMjkxNjgsMjkxNjksMjkxNzAsMjkxNzEsMjkxNzIsMjkxNzMsMjkxNzQsMjkx''@;'; put 'put ''NzUsMjkxNzYsMjkxNzgsMjkxNzksMjkxODAsMjkxODEsMjkxODIsMjkxODMsMjkxODQsMjkxODUsMjkxODYsMjkxODcsMjkxODgsMjkxODksMjkxOTEsMjkxOTIsMjkxOTMsMjkxOTQsMjkxOTUsMjkxOTYsMjkxOTcsMjkxOTgsMjkxOTksMjkyMDAsMjkyMDEsMjkyMDIsMjkyMDMsMjkyMDQs''@;'; put 'put ''MjkyMDUsMjkyMDYsMjkyMDcsMjkyMDgsMjkyMDksMjkyMTAsMjkyMTEsMjkyMTIsMjkyMTQsMjkyMTUsMjkyMTYsMjkyMTcsMjkyMTgsMjkyMTksMjkyMjAsMjkyMjEsMjkyMjIsMjkyMjMsMjkyMjUsMjkyMjcsMjkyMjksMjkyMzAsMjkyMzEsMjkyMzQsMjkyMzUsMjkyMzYsMjkyNDIsMjky''@;'; put 'put ''NDQsMjkyNDYsMjkyNDgsMjkyNDksMjkyNTAsMjkyNTEsMjkyNTIsMjkyNTMsMjkyNTQsMjkyNTcsMjkyNTgsMjkyNTksMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjUsMjkyNjcsMjkyNjgsMjkyNjksMjkyNzEsMjkyNzIsMjkyNzQsMjkyNzYsMjkyNzgsMjkyODAsMjkyODMsMjkyODQsMjkyODUs''@;'; put 'put ''MjkyODgsMjkyOTAsMjkyOTEsMjkyOTIsMjkyOTMsMjkyOTYsMjkyOTcsMjkyOTksMjkzMDAsMjkzMDIsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgsMjkzMDksMjkzMTQsMjkzMTUsMjkzMTcsMjkzMTgsMjkzMTksMjkzMjAsMjkzMjEsMjkzMjQsMjkzMjYsMjkzMjgsMjkzMjksMjkzMzEsMjkz''@;'; put 'put ''MzIsMjkzMzMsMjkzMzQsMjkzMzUsMjkzMzYsMjkzMzcsMjkzMzgsMjkzMzksMjkzNDAsMjkzNDEsMjkzNDIsMjkzNDQsMjkzNDUsMjkzNDYsMjkzNDcsMjkzNDgsMjkzNDksMjkzNTAsMjkzNTEsMjkzNTIsMjkzNTMsMjkzNTQsMjkzNTUsMjkzNTgsMjkzNjEsMjkzNjIsMjkzNjMsMjkzNjUs''@;'; put 'put ''MjkzNzAsMjkzNzEsMjkzNzIsMjkzNzMsMjkzNzQsMjkzNzUsMjkzNzYsMjkzODEsMjkzODIsMjkzODMsMjkzODUsMjkzODYsMjkzODcsMjkzODgsMjkzOTEsMjkzOTMsMjkzOTUsMjkzOTYsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDIsMjk0MDMsNTg1NjYsNTg1NjcsNTg1NjgsNTg1NjksNTg1''@;'; put 'put ''NzAsNTg1NzEsNTg1NzIsNTg1NzMsNTg1NzQsNTg1NzUsNTg1NzYsNTg1NzcsNTg1NzgsNTg1NzksNTg1ODAsNTg1ODEsNTg1ODIsNTg1ODMsNTg1ODQsNTg1ODUsNTg1ODYsNTg1ODcsNTg1ODgsNTg1ODksNTg1OTAsNTg1OTEsNTg1OTIsNTg1OTMsNTg1OTQsNTg1OTUsNTg1OTYsNTg1OTcs''@;'; put 'put ''NTg1OTgsNTg1OTksNTg2MDAsNTg2MDEsNTg2MDIsNTg2MDMsNTg2MDQsNTg2MDUsNTg2MDYsNTg2MDcsNTg2MDgsNTg2MDksNTg2MTAsNTg2MTEsNTg2MTIsNTg2MTMsNTg2MTQsNTg2MTUsNTg2MTYsNTg2MTcsNTg2MTgsNTg2MTksNTg2MjAsNTg2MjEsNTg2MjIsNTg2MjMsNTg2MjQsNTg2''@;'; put 'put ''MjUsNTg2MjYsNTg2MjcsNTg2MjgsNTg2MjksNTg2MzAsNTg2MzEsNTg2MzIsNTg2MzMsNTg2MzQsNTg2MzUsNTg2MzYsNTg2MzcsNTg2MzgsNTg2MzksNTg2NDAsNTg2NDEsNTg2NDIsNTg2NDMsNTg2NDQsNTg2NDUsNTg2NDYsNTg2NDcsNTg2NDgsNTg2NDksNTg2NTAsNTg2NTEsNTg2NTIs''@;'; put 'put ''NTg2NTMsNTg2NTQsNTg2NTUsNTg2NTYsNTg2NTcsNTg2NTgsNTg2NTksNTg2NjAsNTg2NjEsMTIyODgsMTIyODksMTIyOTAsMTgzLDcxMyw3MTEsMTY4LDEyMjkxLDEyMjkzLDgyMTIsNjUzNzQsODIxNCw4MjMwLDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcs''@;'; put 'put ''MTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMTAsMTIzMTEsMTIzMDQsMTIzMDUsMTc3LDIxNSwyNDcsODc1OCw4NzQzLDg3NDQsODcyMSw4NzE5LDg3NDYsODc0NSw4NzEyLDg3NTksODczMCw4ODY5LDg3NDEsODczNiw4OTc4LDg4NTcsODc0Nyw4NzUwLDg4MDEsODc4''@;'; put 'put ''MCw4Nzc2LDg3NjUsODczMyw4ODAwLDg4MTQsODgxNSw4ODA0LDg4MDUsODczNCw4NzU3LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTI4NCwxNjQsNjU1MDQsNjU1MDUsODI0MCwxNjcsODQ3MCw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYz''@;'; put 'put ''Miw5NjUxLDk2NTAsODI1MSw4NTk0LDg1OTIsODU5Myw4NTk1LDEyMzA3LDU4NjYyLDU4NjYzLDU4NjY0LDU4NjY1LDU4NjY2LDU4NjY3LDU4NjY4LDU4NjY5LDU4NjcwLDU4NjcxLDU4NjcyLDU4NjczLDU4Njc0LDU4Njc1LDU4Njc2LDU4Njc3LDU4Njc4LDU4Njc5LDU4NjgwLDU4NjgxLDU4''@;'; put 'put ''NjgyLDU4NjgzLDU4Njg0LDU4Njg1LDU4Njg2LDU4Njg3LDU4Njg4LDU4Njg5LDU4NjkwLDU4NjkxLDU4NjkyLDU4NjkzLDU4Njk0LDU4Njk1LDU4Njk2LDU4Njk3LDU4Njk4LDU4Njk5LDU4NzAwLDU4NzAxLDU4NzAyLDU4NzAzLDU4NzA0LDU4NzA1LDU4NzA2LDU4NzA3LDU4NzA4LDU4NzA5''@;'; put 'put ''LDU4NzEwLDU4NzExLDU4NzEyLDU4NzEzLDU4NzE0LDU4NzE1LDU4NzE2LDU4NzE3LDU4NzE4LDU4NzE5LDU4NzIwLDU4NzIxLDU4NzIyLDU4NzIzLDU4NzI0LDU4NzI1LDU4NzI2LDU4NzI3LDU4NzI4LDU4NzI5LDU4NzMwLDU4NzMxLDU4NzMyLDU4NzMzLDU4NzM0LDU4NzM1LDU4NzM2LDU4''@;'; put 'put ''NzM3LDU4NzM4LDU4NzM5LDU4NzQwLDU4NzQxLDU4NzQyLDU4NzQzLDU4NzQ0LDU4NzQ1LDU4NzQ2LDU4NzQ3LDU4NzQ4LDU4NzQ5LDU4NzUwLDU4NzUxLDU4NzUyLDU4NzUzLDU4NzU0LDU4NzU1LDU4NzU2LDU4NzU3LDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4''@;'; put 'put ''NTY4LDg1NjksNTkyMzgsNTkyMzksNTkyNDAsNTkyNDEsNTkyNDIsNTkyNDMsOTM1Miw5MzUzLDkzNTQsOTM1NSw5MzU2LDkzNTcsOTM1OCw5MzU5LDkzNjAsOTM2MSw5MzYyLDkzNjMsOTM2NCw5MzY1LDkzNjYsOTM2Nyw5MzY4LDkzNjksOTM3MCw5MzcxLDkzMzIsOTMzMyw5MzM0LDkzMzUs''@;'; put 'put ''OTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2LDkzNDcsOTM0OCw5MzQ5LDkzNTAsOTM1MSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDgzNjQsNTkyNDUsMTI4MzIsMTI4MzMsMTI4MzQsMTI4MzUs''@;'; put 'put ''MTI4MzYsMTI4MzcsMTI4MzgsMTI4MzksMTI4NDAsMTI4NDEsNTkyNDYsNTkyNDcsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw4NTU0LDg1NTUsNTkyNDgsNTkyNDksNTg3NTgsNTg3NTksNTg3NjAsNTg3NjEsNTg3NjIsNTg3NjMsNTg3NjQsNTg3''@;'; put 'put ''NjUsNTg3NjYsNTg3NjcsNTg3NjgsNTg3NjksNTg3NzAsNTg3NzEsNTg3NzIsNTg3NzMsNTg3NzQsNTg3NzUsNTg3NzYsNTg3NzcsNTg3NzgsNTg3NzksNTg3ODAsNTg3ODEsNTg3ODIsNTg3ODMsNTg3ODQsNTg3ODUsNTg3ODYsNTg3ODcsNTg3ODgsNTg3ODksNTg3OTAsNTg3OTEsNTg3OTIs''@;'; put 'put ''NTg3OTMsNTg3OTQsNTg3OTUsNTg3OTYsNTg3OTcsNTg3OTgsNTg3OTksNTg4MDAsNTg4MDEsNTg4MDIsNTg4MDMsNTg4MDQsNTg4MDUsNTg4MDYsNTg4MDcsNTg4MDgsNTg4MDksNTg4MTAsNTg4MTEsNTg4MTIsNTg4MTMsNTg4MTQsNTg4MTUsNTg4MTYsNTg4MTcsNTg4MTgsNTg4MTksNTg4''@;'; put 'put ''MjAsNTg4MjEsNTg4MjIsNTg4MjMsNTg4MjQsNTg4MjUsNTg4MjYsNTg4MjcsNTg4MjgsNTg4MjksNTg4MzAsNTg4MzEsNTg4MzIsNTg4MzMsNTg4MzQsNTg4MzUsNTg4MzYsNTg4MzcsNTg4MzgsNTg4MzksNTg4NDAsNTg4NDEsNTg4NDIsNTg4NDMsNTg4NDQsNTg4NDUsNTg4NDYsNTg4NDcs''@;'; put 'put ''NTg4NDgsNTg4NDksNTg4NTAsNTg4NTEsNTg4NTIsMTIyODgsNjUyODEsNjUyODIsNjUyODMsNjU1MDksNjUyODUsNjUyODYsNjUyODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUz''@;'; put 'put ''MDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUzMDgsNjUzMDksNjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjks''@;'; put 'put ''NjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzMzksNjUzNDAsNjUzNDEsNjUzNDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUz''@;'; put 'put ''NTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTg4NTQsNTg4NTUsNTg4NTYsNTg4NTcsNTg4NTgsNTg4NTksNTg4NjAsNTg4NjEsNTg4NjIsNTg4NjMs''@;'; put 'put ''NTg4NjQsNTg4NjUsNTg4NjYsNTg4NjcsNTg4NjgsNTg4NjksNTg4NzAsNTg4NzEsNTg4NzIsNTg4NzMsNTg4NzQsNTg4NzUsNTg4NzYsNTg4NzcsNTg4NzgsNTg4NzksNTg4ODAsNTg4ODEsNTg4ODIsNTg4ODMsNTg4ODQsNTg4ODUsNTg4ODYsNTg4ODcsNTg4ODgsNTg4ODksNTg4OTAsNTg4''@;'; put 'put ''OTEsNTg4OTIsNTg4OTMsNTg4OTQsNTg4OTUsNTg4OTYsNTg4OTcsNTg4OTgsNTg4OTksNTg5MDAsNTg5MDEsNTg5MDIsNTg5MDMsNTg5MDQsNTg5MDUsNTg5MDYsNTg5MDcsNTg5MDgsNTg5MDksNTg5MTAsNTg5MTEsNTg5MTIsNTg5MTMsNTg5MTQsNTg5MTUsNTg5MTYsNTg5MTcsNTg5MTgs''@;'; put 'put ''NTg5MTksNTg5MjAsNTg5MjEsNTg5MjIsNTg5MjMsNTg5MjQsNTg5MjUsNTg5MjYsNTg5MjcsNTg5MjgsNTg5MjksNTg5MzAsNTg5MzEsNTg5MzIsNTg5MzMsNTg5MzQsNTg5MzUsNTg5MzYsNTg5MzcsNTg5MzgsNTg5MzksNTg5NDAsNTg5NDEsNTg5NDIsNTg5NDMsNTg5NDQsNTg5NDUsNTg5''@;'; put 'put ''NDYsNTg5NDcsNTg5NDgsNTg5NDksMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYs''@;'; put 'put ''MTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0''@;'; put 'put ''MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEs''@;'; put 'put ''MTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsNTkyNTAsNTkyNTEsNTkyNTIsNTkyNTMsNTkyNTQsNTkyNTUsNTkyNTYsNTkyNTcsNTkyNTgsNTkyNTksNTkyNjAsNTg5NTAsNTg5NTEsNTg5NTIsNTg5NTMsNTg5NTQsNTg5NTUsNTg5NTYsNTg5NTcsNTg5NTgsNTg5NTksNTg5NjAsNTg5NjEsNTg5''@;'; put 'put ''NjIsNTg5NjMsNTg5NjQsNTg5NjUsNTg5NjYsNTg5NjcsNTg5NjgsNTg5NjksNTg5NzAsNTg5NzEsNTg5NzIsNTg5NzMsNTg5NzQsNTg5NzUsNTg5NzYsNTg5NzcsNTg5NzgsNTg5NzksNTg5ODAsNTg5ODEsNTg5ODIsNTg5ODMsNTg5ODQsNTg5ODUsNTg5ODYsNTg5ODcsNTg5ODgsNTg5ODks''@;'; put 'put ''NTg5OTAsNTg5OTEsNTg5OTIsNTg5OTMsNTg5OTQsNTg5OTUsNTg5OTYsNTg5OTcsNTg5OTgsNTg5OTksNTllMyw1OTAwMSw1OTAwMiw1OTAwMyw1OTAwNCw1OTAwNSw1OTAwNiw1OTAwNyw1OTAwOCw1OTAwOSw1OTAxMCw1OTAxMSw1OTAxMiw1OTAxMyw1OTAxNCw1OTAxNSw1OTAxNiw1OTAx''@;'; put 'put ''Nyw1OTAxOCw1OTAxOSw1OTAyMCw1OTAyMSw1OTAyMiw1OTAyMyw1OTAyNCw1OTAyNSw1OTAyNiw1OTAyNyw1OTAyOCw1OTAyOSw1OTAzMCw1OTAzMSw1OTAzMiw1OTAzMyw1OTAzNCw1OTAzNSw1OTAzNiw1OTAzNyw1OTAzOCw1OTAzOSw1OTA0MCw1OTA0MSw1OTA0Miw1OTA0Myw1OTA0NCw1''@;'; put 'put ''OTA0NSwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3''@;'; put 'put ''NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwx''@;'; put 'put ''MjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUz''@;'; put 'put ''MCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCw1OTI2MSw1OTI2Miw1OTI2Myw1OTI2NCw1OTI2NSw1OTI2Niw1OTI2Nyw1OTI2OCw1OTA0Niw1OTA0Nyw1OTA0OCw1OTA0OSw1OTA1MCw1OTA1MSw1OTA1Miw1OTA1Myw1OTA1NCw1OTA1NSw1OTA1Niw1OTA1Nyw1OTA1OCw1OTA1OSw1OTA2MCw1''@;'; put 'put ''OTA2MSw1OTA2Miw1OTA2Myw1OTA2NCw1OTA2NSw1OTA2Niw1OTA2Nyw1OTA2OCw1OTA2OSw1OTA3MCw1OTA3MSw1OTA3Miw1OTA3Myw1OTA3NCw1OTA3NSw1OTA3Niw1OTA3Nyw1OTA3OCw1OTA3OSw1OTA4MCw1OTA4MSw1OTA4Miw1OTA4Myw1OTA4NCw1OTA4NSw1OTA4Niw1OTA4Nyw1OTA4''@;'; put 'put ''OCw1OTA4OSw1OTA5MCw1OTA5MSw1OTA5Miw1OTA5Myw1OTA5NCw1OTA5NSw1OTA5Niw1OTA5Nyw1OTA5OCw1OTA5OSw1OTEwMCw1OTEwMSw1OTEwMiw1OTEwMyw1OTEwNCw1OTEwNSw1OTEwNiw1OTEwNyw1OTEwOCw1OTEwOSw1OTExMCw1OTExMSw1OTExMiw1OTExMyw1OTExNCw1OTExNSw1''@;'; put 'put ''OTExNiw1OTExNyw1OTExOCw1OTExOSw1OTEyMCw1OTEyMSw1OTEyMiw1OTEyMyw1OTEyNCw1OTEyNSw1OTEyNiw1OTEyNyw1OTEyOCw1OTEyOSw1OTEzMCw1OTEzMSw1OTEzMiw1OTEzMyw1OTEzNCw1OTEzNSw1OTEzNiw1OTEzNyw1OTEzOCw1OTEzOSw1OTE0MCw1OTE0MSw5MTMsOTE0LDkx''@;'; put 'put ''NSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw1OTI2OSw1OTI3MCw1OTI3MSw1OTI3Miw1OTI3Myw1OTI3NCw1OTI3NSw1OTI3Niw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUy''@;'; put 'put ''LDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw1OTI3Nyw1OTI3OCw1OTI3OSw1OTI4MCw1OTI4MSw1OTI4Miw1OTI4Myw2NTA3Nyw2NTA3OCw2NTA4MSw2NTA4Miw2NTA4Nyw2NTA4OCw2NTA4NSw2NTA4Niw2NTA4OSw2NTA5''@;'; put 'put ''MCw2NTA5MSw2NTA5Miw1OTI4NCw1OTI4NSw2NTA4Myw2NTA4NCw2NTA3OSw2NTA4MCw2NTA3Myw1OTI4Niw2NTA3NSw2NTA3Niw1OTI4Nyw1OTI4OCw1OTI4OSw1OTI5MCw1OTI5MSw1OTI5Miw1OTI5Myw1OTI5NCw1OTI5NSw1OTE0Miw1OTE0Myw1OTE0NCw1OTE0NSw1OTE0Niw1OTE0Nyw1''@;'; put 'put ''OTE0OCw1OTE0OSw1OTE1MCw1OTE1MSw1OTE1Miw1OTE1Myw1OTE1NCw1OTE1NSw1OTE1Niw1OTE1Nyw1OTE1OCw1OTE1OSw1OTE2MCw1OTE2MSw1OTE2Miw1OTE2Myw1OTE2NCw1OTE2NSw1OTE2Niw1OTE2Nyw1OTE2OCw1OTE2OSw1OTE3MCw1OTE3MSw1OTE3Miw1OTE3Myw1OTE3NCw1OTE3''@;'; put 'put ''NSw1OTE3Niw1OTE3Nyw1OTE3OCw1OTE3OSw1OTE4MCw1OTE4MSw1OTE4Miw1OTE4Myw1OTE4NCw1OTE4NSw1OTE4Niw1OTE4Nyw1OTE4OCw1OTE4OSw1OTE5MCw1OTE5MSw1OTE5Miw1OTE5Myw1OTE5NCw1OTE5NSw1OTE5Niw1OTE5Nyw1OTE5OCw1OTE5OSw1OTIwMCw1OTIwMSw1OTIwMiw1''@;'; put 'put ''OTIwMyw1OTIwNCw1OTIwNSw1OTIwNiw1OTIwNyw1OTIwOCw1OTIwOSw1OTIxMCw1OTIxMSw1OTIxMiw1OTIxMyw1OTIxNCw1OTIxNSw1OTIxNiw1OTIxNyw1OTIxOCw1OTIxOSw1OTIyMCw1OTIyMSw1OTIyMiw1OTIyMyw1OTIyNCw1OTIyNSw1OTIyNiw1OTIyNyw1OTIyOCw1OTIyOSw1OTIz''@;'; put 'put ''MCw1OTIzMSw1OTIzMiw1OTIzMyw1OTIzNCw1OTIzNSw1OTIzNiw1OTIzNywxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2Miwx''@;'; put 'put ''MDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSw1OTI5Niw1OTI5Nyw1OTI5OCw1OTI5OSw1OTMwMCw1OTMwMSw1OTMwMiw1OTMwMyw1OTMwNCw1OTMwNSw1OTMwNiw1OTMwNyw1OTMwOCw1OTMwOSw1OTMxMCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3Nywx''@;'; put 'put ''MTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw1OTMxMSw1OTMxMiw1OTMxMyw1OTMxNCw1OTMxNSw1''@;'; put 'put ''OTMxNiw1OTMxNyw1OTMxOCw1OTMxOSw1OTMyMCw1OTMyMSw1OTMyMiw1OTMyMyw3MTQsNzE1LDcyOSw4MjExLDgyMTMsODIyOSw4MjQ1LDg0NTMsODQ1Nyw4NTk4LDg1OTksODYwMCw4NjAxLDg3MjUsODczNSw4NzM5LDg3ODYsODgwNiw4ODA3LDg4OTUsOTU1Miw5NTUzLDk1NTQsOTU1NSw5''@;'; put 'put ''NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk1ODEsOTU4Miw5NTgzLDk1ODQsOTU4NSw5NTg2LDk1ODcsOTYwMSw5''@;'; put 'put ''NjAyLDk2MDMsOTYwNCw5NjA1LDk2MDYsOTYwNyw5NjA4LDk2MDksOTYxMCw5NjExLDk2MTIsOTYxMyw5NjE0LDk2MTUsOTYxOSw5NjIwLDk2MjEsOTY2MCw5NjYxLDk2OTgsOTY5OSw5NzAwLDk3MDEsOTczNyw4ODUzLDEyMzA2LDEyMzE3LDEyMzE4LDU5MzI0LDU5MzI1LDU5MzI2LDU5MzI3''@;'; put 'put ''LDU5MzI4LDU5MzI5LDU5MzMwLDU5MzMxLDU5MzMyLDU5MzMzLDU5MzM0LDI1NywyMjUsNDYyLDIyNCwyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MiwyMzQsNTkzLDc3NDMsMzI0LDMyOCw1''@;'; put 'put ''MDUsNjA5LDU5MzM3LDU5MzM4LDU5MzM5LDU5MzQwLDEyNTQ5LDEyNTUwLDEyNTUxLDEyNTUyLDEyNTUzLDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3LDEyNTU4LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2LDEyNTY3LDEyNTY4LDEyNTY5LDEyNTcwLDEy''@;'; put 'put ''NTcxLDEyNTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEyNTc3LDEyNTc4LDEyNTc5LDEyNTgwLDEyNTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEyNTg1LDU5MzQxLDU5MzQyLDU5MzQzLDU5MzQ0LDU5MzQ1LDU5MzQ2LDU5MzQ3LDU5MzQ4LDU5MzQ5LDU5MzUwLDU5MzUxLDU5MzUyLDU5MzUz''@;'; put 'put ''LDU5MzU0LDU5MzU1LDU5MzU2LDU5MzU3LDU5MzU4LDU5MzU5LDU5MzYwLDU5MzYxLDEyMzIxLDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDEyOTYzLDEzMTk4LDEzMTk5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjE3LDEzMjUyLDEzMjYyLDEzMjY1LDEz''@;'; put 'put ''MjY2LDEzMjY5LDY1MDcyLDY1NTA2LDY1NTA4LDU5MzYyLDg0ODEsMTI4NDksNTkzNjMsODIwOCw1OTM2NCw1OTM2NSw1OTM2NiwxMjU0MCwxMjQ0MywxMjQ0NCwxMjU0MSwxMjU0MiwxMjI5NCwxMjQ0NSwxMjQ0Niw2NTA5Nyw2NTA5OCw2NTA5OSw2NTEwMCw2NTEwMSw2NTEwMiw2NTEwMyw2''@;'; put 'put ''NTEwNCw2NTEwNSw2NTEwNiw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTExNyw2NTExOCw2NTExOSw2NTEyMCw2NTEyMSw2NTEyMiw2NTEyMyw2NTEyNCw2NTEyNSw2NTEyNiw2NTEyOCw2NTEyOSw2NTEzMCw2NTEzMSwxMjM1MCwxMjI3MiwxMjI3''@;'; put 'put ''MywxMjI3NCwxMjI3NSwxMjI3NiwxMjI3NywxMjI3OCwxMjI3OSwxMjI4MCwxMjI4MSwxMjI4MiwxMjI4MywxMjI5NSw1OTM4MCw1OTM4MSw1OTM4Miw1OTM4Myw1OTM4NCw1OTM4NSw1OTM4Niw1OTM4Nyw1OTM4OCw1OTM4OSw1OTM5MCw1OTM5MSw1OTM5Miw5NDcyLDk0NzMsOTQ3NCw5NDc1''@;'; put 'put ''LDk0NzYsOTQ3Nyw5NDc4LDk0NzksOTQ4MCw5NDgxLDk0ODIsOTQ4Myw5NDg0LDk0ODUsOTQ4Niw5NDg3LDk0ODgsOTQ4OSw5NDkwLDk0OTEsOTQ5Miw5NDkzLDk0OTQsOTQ5NSw5NDk2LDk0OTcsOTQ5OCw5NDk5LDk1MDAsOTUwMSw5NTAyLDk1MDMsOTUwNCw5NTA1LDk1MDYsOTUwNyw5NTA4''@;'; put 'put ''LDk1MDksOTUxMCw5NTExLDk1MTIsOTUxMyw5NTE0LDk1MTUsOTUxNiw5NTE3LDk1MTgsOTUxOSw5NTIwLDk1MjEsOTUyMiw5NTIzLDk1MjQsOTUyNSw5NTI2LDk1MjcsOTUyOCw5NTI5LDk1MzAsOTUzMSw5NTMyLDk1MzMsOTUzNCw5NTM1LDk1MzYsOTUzNyw5NTM4LDk1MzksOTU0MCw5NTQx''@;'; put 'put ''LDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0Niw5NTQ3LDU5MzkzLDU5Mzk0LDU5Mzk1LDU5Mzk2LDU5Mzk3LDU5Mzk4LDU5Mzk5LDU5NDAwLDU5NDAxLDU5NDAyLDU5NDAzLDU5NDA0LDU5NDA1LDU5NDA2LDU5NDA3LDI5NDA0LDI5NDA1LDI5NDA3LDI5NDEwLDI5NDExLDI5NDEyLDI5NDEzLDI5''@;'; put 'put ''NDE0LDI5NDE1LDI5NDE4LDI5NDE5LDI5NDI5LDI5NDMwLDI5NDMzLDI5NDM3LDI5NDM4LDI5NDM5LDI5NDQwLDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ2LDI5NDQ3LDI5NDQ4LDI5NDQ5LDI5NDUxLDI5NDUyLDI5NDUzLDI5NDU1LDI5NDU2LDI5NDU3LDI5NDU4LDI5NDYwLDI5NDY0LDI5NDY1''@;'; put 'put ''LDI5NDY2LDI5NDcxLDI5NDcyLDI5NDc1LDI5NDc2LDI5NDc4LDI5NDc5LDI5NDgwLDI5NDg1LDI5NDg3LDI5NDg4LDI5NDkwLDI5NDkxLDI5NDkzLDI5NDk0LDI5NDk4LDI5NDk5LDI5NTAwLDI5NTAxLDI5NTA0LDI5NTA1LDI5NTA2LDI5NTA3LDI5NTA4LDI5NTA5LDI5NTEwLDI5NTExLDI5''@;'; put 'put ''NTEyLDI5NTEzLDI5NTE0LDI5NTE1LDI5NTE2LDI5NTE4LDI5NTE5LDI5NTIxLDI5NTIzLDI5NTI0LDI5NTI1LDI5NTI2LDI5NTI4LDI5NTI5LDI5NTMwLDI5NTMxLDI5NTMyLDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM3LDI5NTM4LDI5NTM5LDI5NTQwLDI5NTQxLDI5NTQyLDI5NTQzLDI5NTQ0''@;'; put 'put ''LDI5NTQ1LDI5NTQ2LDI5NTQ3LDI5NTUwLDI5NTUyLDI5NTUzLDU3MzQ0LDU3MzQ1LDU3MzQ2LDU3MzQ3LDU3MzQ4LDU3MzQ5LDU3MzUwLDU3MzUxLDU3MzUyLDU3MzUzLDU3MzU0LDU3MzU1LDU3MzU2LDU3MzU3LDU3MzU4LDU3MzU5LDU3MzYwLDU3MzYxLDU3MzYyLDU3MzYzLDU3MzY0LDU3''@;'; put 'put ''MzY1LDU3MzY2LDU3MzY3LDU3MzY4LDU3MzY5LDU3MzcwLDU3MzcxLDU3MzcyLDU3MzczLDU3Mzc0LDU3Mzc1LDU3Mzc2LDU3Mzc3LDU3Mzc4LDU3Mzc5LDU3MzgwLDU3MzgxLDU3MzgyLDU3MzgzLDU3Mzg0LDU3Mzg1LDU3Mzg2LDU3Mzg3LDU3Mzg4LDU3Mzg5LDU3MzkwLDU3MzkxLDU3Mzky''@;'; put 'put ''LDU3MzkzLDU3Mzk0LDU3Mzk1LDU3Mzk2LDU3Mzk3LDU3Mzk4LDU3Mzk5LDU3NDAwLDU3NDAxLDU3NDAyLDU3NDAzLDU3NDA0LDU3NDA1LDU3NDA2LDU3NDA3LDU3NDA4LDU3NDA5LDU3NDEwLDU3NDExLDU3NDEyLDU3NDEzLDU3NDE0LDU3NDE1LDU3NDE2LDU3NDE3LDU3NDE4LDU3NDE5LDU3''@;'; put 'put ''NDIwLDU3NDIxLDU3NDIyLDU3NDIzLDU3NDI0LDU3NDI1LDU3NDI2LDU3NDI3LDU3NDI4LDU3NDI5LDU3NDMwLDU3NDMxLDU3NDMyLDU3NDMzLDU3NDM0LDU3NDM1LDU3NDM2LDU3NDM3LDI5NTU0LDI5NTU1LDI5NTU2LDI5NTU3LDI5NTU4LDI5NTU5LDI5NTYwLDI5NTYxLDI5NTYyLDI5NTYz''@;'; put 'put ''LDI5NTY0LDI5NTY1LDI5NTY3LDI5NTY4LDI5NTY5LDI5NTcwLDI5NTcxLDI5NTczLDI5NTc0LDI5NTc2LDI5NTc4LDI5NTgwLDI5NTgxLDI5NTgzLDI5NTg0LDI5NTg2LDI5NTg3LDI5NTg4LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTkzLDI5NTk0LDI5NTk2LDI5NTk3LDI5NTk4LDI5NjAwLDI5''@;'; put 'put ''NjAxLDI5NjAzLDI5NjA0LDI5NjA1LDI5NjA2LDI5NjA3LDI5NjA4LDI5NjEwLDI5NjEyLDI5NjEzLDI5NjE3LDI5NjIwLDI5NjIxLDI5NjIyLDI5NjI0LDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMwLDI5NjMxLDI5NjMzLDI5NjM1LDI5NjM2LDI5NjM3LDI5NjM4LDI5NjM5LDI5NjQzLDI5NjQ0''@;'; put 'put ''LDI5NjQ2LDI5NjUwLDI5NjUxLDI5NjUyLDI5NjUzLDI5NjU0LDI5NjU1LDI5NjU2LDI5NjU4LDI5NjU5LDI5NjYwLDI5NjYxLDI5NjYzLDI5NjY1LDI5NjY2LDI5NjY3LDI5NjY4LDI5NjcwLDI5NjcyLDI5Njc0LDI5Njc1LDI5Njc2LDI5Njc4LDI5Njc5LDI5NjgwLDI5NjgxLDI5NjgzLDI5''@;'; put 'put ''Njg0LDI5Njg1LDI5Njg2LDI5Njg3LDU3NDM4LDU3NDM5LDU3NDQwLDU3NDQxLDU3NDQyLDU3NDQzLDU3NDQ0LDU3NDQ1LDU3NDQ2LDU3NDQ3LDU3NDQ4LDU3NDQ5LDU3NDUwLDU3NDUxLDU3NDUyLDU3NDUzLDU3NDU0LDU3NDU1LDU3NDU2LDU3NDU3LDU3NDU4LDU3NDU5LDU3NDYwLDU3NDYx''@;'; put 'put ''LDU3NDYyLDU3NDYzLDU3NDY0LDU3NDY1LDU3NDY2LDU3NDY3LDU3NDY4LDU3NDY5LDU3NDcwLDU3NDcxLDU3NDcyLDU3NDczLDU3NDc0LDU3NDc1LDU3NDc2LDU3NDc3LDU3NDc4LDU3NDc5LDU3NDgwLDU3NDgxLDU3NDgyLDU3NDgzLDU3NDg0LDU3NDg1LDU3NDg2LDU3NDg3LDU3NDg4LDU3''@;'; put 'put ''NDg5LDU3NDkwLDU3NDkxLDU3NDkyLDU3NDkzLDU3NDk0LDU3NDk1LDU3NDk2LDU3NDk3LDU3NDk4LDU3NDk5LDU3NTAwLDU3NTAxLDU3NTAyLDU3NTAzLDU3NTA0LDU3NTA1LDU3NTA2LDU3NTA3LDU3NTA4LDU3NTA5LDU3NTEwLDU3NTExLDU3NTEyLDU3NTEzLDU3NTE0LDU3NTE1LDU3NTE2''@;'; put 'put ''LDU3NTE3LDU3NTE4LDU3NTE5LDU3NTIwLDU3NTIxLDU3NTIyLDU3NTIzLDU3NTI0LDU3NTI1LDU3NTI2LDU3NTI3LDU3NTI4LDU3NTI5LDU3NTMwLDU3NTMxLDI5Njg4LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkyLDI5NjkzLDI5Njk0LDI5Njk1LDI5Njk2LDI5Njk3LDI5Njk4LDI5NzAwLDI5''@;'; put 'put ''NzAzLDI5NzA0LDI5NzA3LDI5NzA4LDI5NzA5LDI5NzEwLDI5NzEzLDI5NzE0LDI5NzE1LDI5NzE2LDI5NzE3LDI5NzE4LDI5NzE5LDI5NzIwLDI5NzIxLDI5NzI0LDI5NzI1LDI5NzI2LDI5NzI3LDI5NzI4LDI5NzI5LDI5NzMxLDI5NzMyLDI5NzM1LDI5NzM3LDI5NzM5LDI5NzQxLDI5NzQz''@;'; put 'put ''LDI5NzQ1LDI5NzQ2LDI5NzUxLDI5NzUyLDI5NzUzLDI5NzU0LDI5NzU1LDI5NzU3LDI5NzU4LDI5NzU5LDI5NzYwLDI5NzYyLDI5NzYzLDI5NzY0LDI5NzY1LDI5NzY2LDI5NzY3LDI5NzY4LDI5NzY5LDI5NzcwLDI5NzcxLDI5NzcyLDI5NzczLDI5Nzc0LDI5Nzc1LDI5Nzc2LDI5Nzc3LDI5''@;'; put 'put ''Nzc4LDI5Nzc5LDI5NzgwLDI5NzgyLDI5Nzg0LDI5Nzg5LDI5NzkyLDI5NzkzLDI5Nzk0LDI5Nzk1LDI5Nzk2LDI5Nzk3LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAxLDI5ODAyLDI5ODAzLDI5ODA0LDI5ODA2LDI5ODA3LDI5ODA5LDI5ODEwLDI5ODExLDI5ODEyLDI5ODEzLDI5ODE2LDI5ODE3''@;'; put 'put ''LDI5ODE4LDU3NTMyLDU3NTMzLDU3NTM0LDU3NTM1LDU3NTM2LDU3NTM3LDU3NTM4LDU3NTM5LDU3NTQwLDU3NTQxLDU3NTQyLDU3NTQzLDU3NTQ0LDU3NTQ1LDU3NTQ2LDU3NTQ3LDU3NTQ4LDU3NTQ5LDU3NTUwLDU3NTUxLDU3NTUyLDU3NTUzLDU3NTU0LDU3NTU1LDU3NTU2LDU3NTU3LDU3''@;'; put 'put ''NTU4LDU3NTU5LDU3NTYwLDU3NTYxLDU3NTYyLDU3NTYzLDU3NTY0LDU3NTY1LDU3NTY2LDU3NTY3LDU3NTY4LDU3NTY5LDU3NTcwLDU3NTcxLDU3NTcyLDU3NTczLDU3NTc0LDU3NTc1LDU3NTc2LDU3NTc3LDU3NTc4LDU3NTc5LDU3NTgwLDU3NTgxLDU3NTgyLDU3NTgzLDU3NTg0LDU3NTg1''@;'; put 'put ''LDU3NTg2LDU3NTg3LDU3NTg4LDU3NTg5LDU3NTkwLDU3NTkxLDU3NTkyLDU3NTkzLDU3NTk0LDU3NTk1LDU3NTk2LDU3NTk3LDU3NTk4LDU3NTk5LDU3NjAwLDU3NjAxLDU3NjAyLDU3NjAzLDU3NjA0LDU3NjA1LDU3NjA2LDU3NjA3LDU3NjA4LDU3NjA5LDU3NjEwLDU3NjExLDU3NjEyLDU3''@;'; put 'put ''NjEzLDU3NjE0LDU3NjE1LDU3NjE2LDU3NjE3LDU3NjE4LDU3NjE5LDU3NjIwLDU3NjIxLDU3NjIyLDU3NjIzLDU3NjI0LDU3NjI1LDI5ODE5LDI5ODIwLDI5ODIxLDI5ODIzLDI5ODI2LDI5ODI4LDI5ODI5LDI5ODMwLDI5ODMyLDI5ODMzLDI5ODM0LDI5ODM2LDI5ODM3LDI5ODM5LDI5ODQx''@;'; put 'put ''LDI5ODQyLDI5ODQzLDI5ODQ0LDI5ODQ1LDI5ODQ2LDI5ODQ3LDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUxLDI5ODUzLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU4LDI5ODU5LDI5ODYwLDI5ODYxLDI5ODYyLDI5ODY2LDI5ODY3LDI5ODY4LDI5ODY5LDI5ODcwLDI5ODcxLDI5ODcyLDI5ODczLDI5''@;'; put 'put ''ODc0LDI5ODc1LDI5ODc2LDI5ODc3LDI5ODc4LDI5ODc5LDI5ODgwLDI5ODgxLDI5ODgzLDI5ODg0LDI5ODg1LDI5ODg2LDI5ODg3LDI5ODg4LDI5ODg5LDI5ODkwLDI5ODkxLDI5ODkyLDI5ODkzLDI5ODk0LDI5ODk1LDI5ODk2LDI5ODk3LDI5ODk4LDI5ODk5LDI5OTAwLDI5OTAxLDI5OTAy''@;'; put 'put ''LDI5OTAzLDI5OTA0LDI5OTA1LDI5OTA3LDI5OTA4LDI5OTA5LDI5OTEwLDI5OTExLDI5OTEyLDI5OTEzLDI5OTE0LDI5OTE1LDI5OTE3LDI5OTE5LDI5OTIxLDI5OTI1LDI5OTI3LDI5OTI4LDI5OTI5LDI5OTMwLDI5OTMxLDI5OTMyLDI5OTMzLDI5OTM2LDI5OTM3LDI5OTM4LDU3NjI2LDU3''@;'; put 'put ''NjI3LDU3NjI4LDU3NjI5LDU3NjMwLDU3NjMxLDU3NjMyLDU3NjMzLDU3NjM0LDU3NjM1LDU3NjM2LDU3NjM3LDU3NjM4LDU3NjM5LDU3NjQwLDU3NjQxLDU3NjQyLDU3NjQzLDU3NjQ0LDU3NjQ1LDU3NjQ2LDU3NjQ3LDU3NjQ4LDU3NjQ5LDU3NjUwLDU3NjUxLDU3NjUyLDU3NjUzLDU3NjU0''@;'; put 'put ''LDU3NjU1LDU3NjU2LDU3NjU3LDU3NjU4LDU3NjU5LDU3NjYwLDU3NjYxLDU3NjYyLDU3NjYzLDU3NjY0LDU3NjY1LDU3NjY2LDU3NjY3LDU3NjY4LDU3NjY5LDU3NjcwLDU3NjcxLDU3NjcyLDU3NjczLDU3Njc0LDU3Njc1LDU3Njc2LDU3Njc3LDU3Njc4LDU3Njc5LDU3NjgwLDU3NjgxLDU3''@;'; put 'put ''NjgyLDU3NjgzLDU3Njg0LDU3Njg1LDU3Njg2LDU3Njg3LDU3Njg4LDU3Njg5LDU3NjkwLDU3NjkxLDU3NjkyLDU3NjkzLDU3Njk0LDU3Njk1LDU3Njk2LDU3Njk3LDU3Njk4LDU3Njk5LDU3NzAwLDU3NzAxLDU3NzAyLDU3NzAzLDU3NzA0LDU3NzA1LDU3NzA2LDU3NzA3LDU3NzA4LDU3NzA5''@;'; put 'put ''LDU3NzEwLDU3NzExLDU3NzEyLDU3NzEzLDU3NzE0LDU3NzE1LDU3NzE2LDU3NzE3LDU3NzE4LDU3NzE5LDI5OTM5LDI5OTQxLDI5OTQ0LDI5OTQ1LDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTQ5LDI5OTUwLDI5OTUyLDI5OTUzLDI5OTU0LDI5OTU1LDI5OTU3LDI5OTU4LDI5OTU5LDI5OTYwLDI5''@;'; put 'put ''OTYxLDI5OTYyLDI5OTYzLDI5OTY0LDI5OTY2LDI5OTY4LDI5OTcwLDI5OTcyLDI5OTczLDI5OTc0LDI5OTc1LDI5OTc5LDI5OTgxLDI5OTgyLDI5OTg0LDI5OTg1LDI5OTg2LDI5OTg3LDI5OTg4LDI5OTkwLDI5OTkxLDI5OTk0LDI5OTk4LDMwMDA0LDMwMDA2LDMwMDA5LDMwMDEyLDMwMDEz''@;'; put 'put ''LDMwMDE1LDMwMDE3LDMwMDE4LDMwMDE5LDMwMDIwLDMwMDIyLDMwMDIzLDMwMDI1LDMwMDI2LDMwMDI5LDMwMDMyLDMwMDMzLDMwMDM0LDMwMDM1LDMwMDM3LDMwMDM4LDMwMDM5LDMwMDQwLDMwMDQ1LDMwMDQ2LDMwMDQ3LDMwMDQ4LDMwMDQ5LDMwMDUwLDMwMDUxLDMwMDUyLDMwMDU1LDMw''@;'; put 'put ''MDU2LDMwMDU3LDMwMDU5LDMwMDYwLDMwMDYxLDMwMDYyLDMwMDYzLDMwMDY0LDMwMDY1LDMwMDY3LDMwMDY5LDMwMDcwLDMwMDcxLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgwLDMwMDgxLDMwMDgyLDMwMDg0LDMwMDg1LDMwMDg3LDU3NzIwLDU3NzIxLDU3NzIyLDU3NzIz''@;'; put 'put ''LDU3NzI0LDU3NzI1LDU3NzI2LDU3NzI3LDU3NzI4LDU3NzI5LDU3NzMwLDU3NzMxLDU3NzMyLDU3NzMzLDU3NzM0LDU3NzM1LDU3NzM2LDU3NzM3LDU3NzM4LDU3NzM5LDU3NzQwLDU3NzQxLDU3NzQyLDU3NzQzLDU3NzQ0LDU3NzQ1LDU3NzQ2LDU3NzQ3LDU3NzQ4LDU3NzQ5LDU3NzUwLDU3''@;'; put 'put ''NzUxLDU3NzUyLDU3NzUzLDU3NzU0LDU3NzU1LDU3NzU2LDU3NzU3LDU3NzU4LDU3NzU5LDU3NzYwLDU3NzYxLDU3NzYyLDU3NzYzLDU3NzY0LDU3NzY1LDU3NzY2LDU3NzY3LDU3NzY4LDU3NzY5LDU3NzcwLDU3NzcxLDU3NzcyLDU3NzczLDU3Nzc0LDU3Nzc1LDU3Nzc2LDU3Nzc3LDU3Nzc4''@;'; put 'put ''LDU3Nzc5LDU3NzgwLDU3NzgxLDU3NzgyLDU3NzgzLDU3Nzg0LDU3Nzg1LDU3Nzg2LDU3Nzg3LDU3Nzg4LDU3Nzg5LDU3NzkwLDU3NzkxLDU3NzkyLDU3NzkzLDU3Nzk0LDU3Nzk1LDU3Nzk2LDU3Nzk3LDU3Nzk4LDU3Nzk5LDU3ODAwLDU3ODAxLDU3ODAyLDU3ODAzLDU3ODA0LDU3ODA1LDU3''@;'; put 'put ''ODA2LDU3ODA3LDU3ODA4LDU3ODA5LDU3ODEwLDU3ODExLDU3ODEyLDU3ODEzLDMwMDg4LDMwMDg5LDMwMDkwLDMwMDkyLDMwMDkzLDMwMDk0LDMwMDk2LDMwMDk5LDMwMTAxLDMwMTA0LDMwMTA3LDMwMTA4LDMwMTEwLDMwMTE0LDMwMTE4LDMwMTE5LDMwMTIwLDMwMTIxLDMwMTIyLDMwMTI1''@;'; put 'put ''LDMwMTM0LDMwMTM1LDMwMTM4LDMwMTM5LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTUwLDMwMTU1LDMwMTU2LDMwMTU4LDMwMTU5LDMwMTYwLDMwMTYxLDMwMTYzLDMwMTY3LDMwMTY5LDMwMTcwLDMwMTcyLDMwMTczLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgxLDMwMTg1LDMwMTg4LDMwMTg5LDMw''@;'; put 'put ''MTkwLDMwMTkxLDMwMTk0LDMwMTk1LDMwMTk3LDMwMTk4LDMwMTk5LDMwMjAwLDMwMjAyLDMwMjAzLDMwMjA1LDMwMjA2LDMwMjEwLDMwMjEyLDMwMjE0LDMwMjE1LDMwMjE2LDMwMjE3LDMwMjE5LDMwMjIxLDMwMjIyLDMwMjIzLDMwMjI1LDMwMjI2LDMwMjI3LDMwMjI4LDMwMjMwLDMwMjM0''@;'; put 'put ''LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQxLDMwMjQzLDMwMjQ3LDMwMjQ4LDMwMjUyLDMwMjU0LDMwMjU1LDMwMjU3LDMwMjU4LDMwMjYyLDMwMjYzLDMwMjY1LDMwMjY2LDMwMjY3LDMwMjY5LDMwMjczLDMwMjc0LDMwMjc2LDU3ODE0LDU3ODE1LDU3ODE2LDU3ODE3LDU3ODE4LDU3ODE5LDU3''@;'; put 'put ''ODIwLDU3ODIxLDU3ODIyLDU3ODIzLDU3ODI0LDU3ODI1LDU3ODI2LDU3ODI3LDU3ODI4LDU3ODI5LDU3ODMwLDU3ODMxLDU3ODMyLDU3ODMzLDU3ODM0LDU3ODM1LDU3ODM2LDU3ODM3LDU3ODM4LDU3ODM5LDU3ODQwLDU3ODQxLDU3ODQyLDU3ODQzLDU3ODQ0LDU3ODQ1LDU3ODQ2LDU3ODQ3''@;'; put 'put ''LDU3ODQ4LDU3ODQ5LDU3ODUwLDU3ODUxLDU3ODUyLDU3ODUzLDU3ODU0LDU3ODU1LDU3ODU2LDU3ODU3LDU3ODU4LDU3ODU5LDU3ODYwLDU3ODYxLDU3ODYyLDU3ODYzLDU3ODY0LDU3ODY1LDU3ODY2LDU3ODY3LDU3ODY4LDU3ODY5LDU3ODcwLDU3ODcxLDU3ODcyLDU3ODczLDU3ODc0LDU3''@;'; put 'put ''ODc1LDU3ODc2LDU3ODc3LDU3ODc4LDU3ODc5LDU3ODgwLDU3ODgxLDU3ODgyLDU3ODgzLDU3ODg0LDU3ODg1LDU3ODg2LDU3ODg3LDU3ODg4LDU3ODg5LDU3ODkwLDU3ODkxLDU3ODkyLDU3ODkzLDU3ODk0LDU3ODk1LDU3ODk2LDU3ODk3LDU3ODk4LDU3ODk5LDU3OTAwLDU3OTAxLDU3OTAy''@;'; put 'put ''LDU3OTAzLDU3OTA0LDU3OTA1LDU3OTA2LDU3OTA3LDMwMjc3LDMwMjc4LDMwMjc5LDMwMjgwLDMwMjgxLDMwMjgyLDMwMjgzLDMwMjg2LDMwMjg3LDMwMjg4LDMwMjg5LDMwMjkwLDMwMjkxLDMwMjkzLDMwMjk1LDMwMjk2LDMwMjk3LDMwMjk4LDMwMjk5LDMwMzAxLDMwMzAzLDMwMzA0LDMw''@;'; put 'put ''MzA1LDMwMzA2LDMwMzA4LDMwMzA5LDMwMzEwLDMwMzExLDMwMzEyLDMwMzEzLDMwMzE0LDMwMzE2LDMwMzE3LDMwMzE4LDMwMzIwLDMwMzIxLDMwMzIyLDMwMzIzLDMwMzI0LDMwMzI1LDMwMzI2LDMwMzI3LDMwMzI5LDMwMzMwLDMwMzMyLDMwMzM1LDMwMzM2LDMwMzM3LDMwMzM5LDMwMzQx''@;'; put 'put ''LDMwMzQ1LDMwMzQ2LDMwMzQ4LDMwMzQ5LDMwMzUxLDMwMzUyLDMwMzU0LDMwMzU2LDMwMzU3LDMwMzU5LDMwMzYwLDMwMzYyLDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY2LDMwMzY3LDMwMzY4LDMwMzY5LDMwMzcwLDMwMzcxLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc3LDMwMzc4LDMw''@;'; put 'put ''Mzc5LDMwMzgwLDMwMzgxLDMwMzgzLDMwMzg0LDMwMzg3LDMwMzg5LDMwMzkwLDMwMzkxLDMwMzkyLDMwMzkzLDMwMzk0LDMwMzk1LDMwMzk2LDMwMzk3LDMwMzk4LDMwNDAwLDMwNDAxLDMwNDAzLDIxODM0LDM4NDYzLDIyNDY3LDI1Mzg0LDIxNzEwLDIxNzY5LDIxNjk2LDMwMzUzLDMwMjg0''@;'; put 'put ''LDM0MTA4LDMwNzAyLDMzNDA2LDMwODYxLDI5MjMzLDM4NTUyLDM4Nzk3LDI3Njg4LDIzNDMzLDIwNDc0LDI1MzUzLDI2MjYzLDIzNzM2LDMzMDE4LDI2Njk2LDMyOTQyLDI2MTE0LDMwNDE0LDIwOTg1LDI1OTQyLDI5MTAwLDMyNzUzLDM0OTQ4LDIwNjU4LDIyODg1LDI1MDM0LDI4NTk1LDMz''@;'; put 'put ''NDUzLDI1NDIwLDI1MTcwLDIxNDg1LDIxNTQzLDMxNDk0LDIwODQzLDMwMTE2LDI0MDUyLDI1MzAwLDM2Mjk5LDM4Nzc0LDI1MjI2LDMyNzkzLDIyMzY1LDM4NzEyLDMyNjEwLDI5MjQwLDMwMzMzLDI2NTc1LDMwMzM0LDI1NjcwLDIwMzM2LDM2MTMzLDI1MzA4LDMxMjU1LDI2MDAxLDI5Njc3''@;'; put 'put ''LDI1NjQ0LDI1MjAzLDMzMzI0LDM5MDQxLDI2NDk1LDI5MjU2LDI1MTk4LDI1MjkyLDIwMjc2LDI5OTIzLDIxMzIyLDIxMTUwLDMyNDU4LDM3MDMwLDI0MTEwLDI2NzU4LDI3MDM2LDMzMTUyLDMyNDY1LDI2ODM0LDMwOTE3LDM0NDQ0LDM4MjI1LDIwNjIxLDM1ODc2LDMzNTAyLDMyOTkwLDIx''@;'; put 'put ''MjUzLDM1MDkwLDIxMDkzLDMwNDA0LDMwNDA3LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE5LDMwNDIxLDMwNDI1LDMwNDI2LDMwNDI4LDMwNDI5LDMwNDMwLDMwNDMyLDMwNDMzLDMwNDM0LDMwNDM1LDMwNDM2LDMwNDM4LDMwNDM5LDMwNDQwLDMwNDQxLDMwNDQyLDMwNDQzLDMwNDQ0LDMwNDQ1''@;'; put 'put ''LDMwNDQ4LDMwNDUxLDMwNDUzLDMwNDU0LDMwNDU1LDMwNDU4LDMwNDU5LDMwNDYxLDMwNDYzLDMwNDY0LDMwNDY2LDMwNDY3LDMwNDY5LDMwNDcwLDMwNDc0LDMwNDc2LDMwNDc4LDMwNDc5LDMwNDgwLDMwNDgxLDMwNDgyLDMwNDgzLDMwNDg0LDMwNDg1LDMwNDg2LDMwNDg3LDMwNDg4LDMw''@;'; put 'put ''NDkxLDMwNDkyLDMwNDkzLDMwNDk0LDMwNDk3LDMwNDk5LDMwNTAwLDMwNTAxLDMwNTAzLDMwNTA2LDMwNTA3LDMwNTA4LDMwNTEwLDMwNTEyLDMwNTEzLDMwNTE0LDMwNTE1LDMwNTE2LDMwNTIxLDMwNTIzLDMwNTI1LDMwNTI2LDMwNTI3LDMwNTMwLDMwNTMyLDMwNTMzLDMwNTM0LDMwNTM2''@;'; put 'put ''LDMwNTM3LDMwNTM4LDMwNTM5LDMwNTQwLDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTQ3LDMwNTQ4LDMwNTQ5LDMwNTUwLDMwNTUxLDMwNTUyLDMwNTUzLDMwNTU2LDM0MTgwLDM4NjQ5LDIwNDQ1LDIyNTYxLDM5MjgxLDIzNDUzLDI1MjY1LDI1MjUzLDI2MjkyLDM1OTYxLDQwMDc3LDI5''@;'; put 'put ''MTkwLDI2NDc5LDMwODY1LDI0NzU0LDIxMzI5LDIxMjcxLDM2NzQ0LDMyOTcyLDM2MTI1LDM4MDQ5LDIwNDkzLDI5Mzg0LDIyNzkxLDI0ODExLDI4OTUzLDM0OTg3LDIyODY4LDMzNTE5LDI2NDEyLDMxNTI4LDIzODQ5LDMyNTAzLDI5OTk3LDI3ODkzLDM2NDU0LDM2ODU2LDM2OTI0LDQwNzYz''@;'; put 'put ''LDI3NjA0LDM3MTQ1LDMxNTA4LDI0NDQ0LDMwODg3LDM0MDA2LDM0MTA5LDI3NjA1LDI3NjA5LDI3NjA2LDI0MDY1LDI0MTk5LDMwMjAxLDM4MzgxLDI1OTQ5LDI0MzMwLDI0NTE3LDM2NzY3LDIyNzIxLDMzMjE4LDM2OTkxLDM4NDkxLDM4ODI5LDM2NzkzLDMyNTM0LDM2MTQwLDI1MTUzLDIw''@;'; put 'put ''NDE1LDIxNDY0LDIxMzQyLDM2Nzc2LDM2Nzc3LDM2Nzc5LDM2OTQxLDI2NjMxLDI0NDI2LDMzMTc2LDM0OTIwLDQwMTUwLDI0OTcxLDIxMDM1LDMwMjUwLDI0NDI4LDI1OTk2LDI4NjI2LDI4MzkyLDIzNDg2LDI1NjcyLDIwODUzLDIwOTEyLDI2NTY0LDE5OTkzLDMxMTc3LDM5MjkyLDI4ODUx''@;'; put 'put ''LDMwNTU3LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTY0LDMwNTY3LDMwNTY5LDMwNTcwLDMwNTczLDMwNTc0LDMwNTc1LDMwNTc2LDMwNTc3LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTgxLDMwNTgyLDMwNTgzLDMwNTg0LDMwNTg2LDMwNTg3LDMwNTg4LDMwNTkzLDMwNTk0LDMwNTk1LDMwNTk4LDMw''@;'; put 'put ''NTk5LDMwNjAwLDMwNjAxLDMwNjAyLDMwNjAzLDMwNjA3LDMwNjA4LDMwNjExLDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE1LDMwNjE2LDMwNjE3LDMwNjE4LDMwNjE5LDMwNjIwLDMwNjIxLDMwNjIyLDMwNjI1LDMwNjI3LDMwNjI4LDMwNjMwLDMwNjMyLDMwNjM1LDMwNjM3LDMwNjM4LDMwNjM5''@;'; put 'put ''LDMwNjQxLDMwNjQyLDMwNjQ0LDMwNjQ2LDMwNjQ3LDMwNjQ4LDMwNjQ5LDMwNjUwLDMwNjUyLDMwNjU0LDMwNjU2LDMwNjU3LDMwNjU4LDMwNjU5LDMwNjYwLDMwNjYxLDMwNjYyLDMwNjYzLDMwNjY0LDMwNjY1LDMwNjY2LDMwNjY3LDMwNjY4LDMwNjcwLDMwNjcxLDMwNjcyLDMwNjczLDMw''@;'; put 'put ''Njc0LDMwNjc1LDMwNjc2LDMwNjc3LDMwNjc4LDMwNjgwLDMwNjgxLDMwNjgyLDMwNjg1LDMwNjg2LDMwNjg3LDMwNjg4LDMwNjg5LDMwNjkyLDMwMTQ5LDI0MTgyLDI5NjI3LDMzNzYwLDI1NzczLDI1MzIwLDM4MDY5LDI3ODc0LDIxMzM4LDIxMTg3LDI1NjE1LDM4MDgyLDMxNjM2LDIwMjcx''@;'; put 'put ''LDI0MDkxLDMzMzM0LDMzMDQ2LDMzMTYyLDI4MTk2LDI3ODUwLDM5NTM5LDI1NDI5LDIxMzQwLDIxNzU0LDM0OTE3LDIyNDk2LDE5OTgxLDI0MDY3LDI3NDkzLDMxODA3LDM3MDk2LDI0NTk4LDI1ODMwLDI5NDY4LDM1MDA5LDI2NDQ4LDI1MTY1LDM2MTMwLDMwNTcyLDM2MzkzLDM3MzE5LDI0''@;'; put 'put ''NDI1LDMzNzU2LDM0MDgxLDM5MTg0LDIxNDQyLDM0NDUzLDI3NTMxLDI0ODEzLDI0ODA4LDI4Nzk5LDMzNDg1LDMzMzI5LDIwMTc5LDI3ODE1LDM0MjU1LDI1ODA1LDMxOTYxLDI3MTMzLDI2MzYxLDMzNjA5LDIxMzk3LDMxNTc0LDIwMzkxLDIwODc2LDI3OTc5LDIzNjE4LDM2NDYxLDI1NTU0''@;'; put 'put ''LDIxNDQ5LDMzNTgwLDMzNTkwLDI2NTk3LDMwOTAwLDI1NjYxLDIzNTE5LDIzNzAwLDI0MDQ2LDM1ODE1LDI1Mjg2LDI2NjEyLDM1OTYyLDI1NjAwLDI1NTMwLDM0NjMzLDM5MzA3LDM1ODYzLDMyNTQ0LDM4MTMwLDIwMTM1LDM4NDE2LDM5MDc2LDI2MTI0LDI5NDYyLDMwNjk0LDMwNjk2LDMw''@;'; put 'put ''Njk4LDMwNzAzLDMwNzA0LDMwNzA1LDMwNzA2LDMwNzA4LDMwNzA5LDMwNzExLDMwNzEzLDMwNzE0LDMwNzE1LDMwNzE2LDMwNzIzLDMwNzI0LDMwNzI1LDMwNzI2LDMwNzI3LDMwNzI4LDMwNzMwLDMwNzMxLDMwNzM0LDMwNzM1LDMwNzM2LDMwNzM5LDMwNzQxLDMwNzQ1LDMwNzQ3LDMwNzUw''@;'; put 'put ''LDMwNzUyLDMwNzUzLDMwNzU0LDMwNzU2LDMwNzYwLDMwNzYyLDMwNzYzLDMwNzY2LDMwNzY3LDMwNzY5LDMwNzcwLDMwNzcxLDMwNzczLDMwNzc0LDMwNzgxLDMwNzgzLDMwNzg1LDMwNzg2LDMwNzg3LDMwNzg4LDMwNzkwLDMwNzkyLDMwNzkzLDMwNzk0LDMwNzk1LDMwNzk3LDMwNzk5LDMw''@;'; put 'put ''ODAxLDMwODAzLDMwODA0LDMwODA4LDMwODA5LDMwODEwLDMwODExLDMwODEyLDMwODE0LDMwODE1LDMwODE2LDMwODE3LDMwODE4LDMwODE5LDMwODIwLDMwODIxLDMwODIyLDMwODIzLDMwODI0LDMwODI1LDMwODMxLDMwODMyLDMwODMzLDMwODM0LDMwODM1LDMwODM2LDMwODM3LDMwODM4''@;'; put 'put ''LDMwODQwLDMwODQxLDMwODQyLDMwODQzLDMwODQ1LDMwODQ2LDMwODQ3LDMwODQ4LDMwODQ5LDMwODUwLDMwODUxLDIyMzMwLDIzNTgxLDI0MTIwLDM4MjcxLDIwNjA3LDMyOTI4LDIxMzc4LDI1OTUwLDMwMDIxLDIxODA5LDIwNTEzLDM2MjI5LDI1MjIwLDM4MDQ2LDI2Mzk3LDIyMDY2LDI4''@;'; put 'put ''NTI2LDI0MDM0LDIxNTU3LDI4ODE4LDM2NzEwLDI1MTk5LDI1NzY0LDI1NTA3LDI0NDQzLDI4NTUyLDM3MTA4LDMzMjUxLDM2Nzg0LDIzNTc2LDI2MjE2LDI0NTYxLDI3Nzg1LDM4NDcyLDM2MjI1LDM0OTI0LDI1NzQ1LDMxMjE2LDIyNDc4LDI3MjI1LDI1MTA0LDIxNTc2LDIwMDU2LDMxMjQz''@;'; put 'put ''LDI0ODA5LDI4NTQ4LDM1ODAyLDI1MjE1LDM2ODk0LDM5NTYzLDMxMjA0LDIxNTA3LDMwMTk2LDI1MzQ1LDIxMjczLDI3NzQ0LDM2ODMxLDI0MzQ3LDM5NTM2LDMyODI3LDQwODMxLDIwMzYwLDIzNjEwLDM2MTk2LDMyNzA5LDI2MDIxLDI4ODYxLDIwODA1LDIwOTE0LDM0NDExLDIzODE1LDIz''@;'; put 'put ''NDU2LDI1Mjc3LDM3MjI4LDMwMDY4LDM2MzY0LDMxMjY0LDI0ODMzLDMxNjA5LDIwMTY3LDMyNTA0LDMwNTk3LDE5OTg1LDMzMjYxLDIxMDIxLDIwOTg2LDI3MjQ5LDIxNDE2LDM2NDg3LDM4MTQ4LDM4NjA3LDI4MzUzLDM4NTAwLDI2OTcwLDMwODUyLDMwODUzLDMwODU0LDMwODU2LDMwODU4''@;'; put 'put ''LDMwODU5LDMwODYzLDMwODY0LDMwODY2LDMwODY4LDMwODY5LDMwODcwLDMwODczLDMwODc3LDMwODc4LDMwODgwLDMwODgyLDMwODg0LDMwODg2LDMwODg4LDMwODg5LDMwODkwLDMwODkxLDMwODkyLDMwODkzLDMwODk0LDMwODk1LDMwOTAxLDMwOTAyLDMwOTAzLDMwOTA0LDMwOTA2LDMw''@;'; put 'put ''OTA3LDMwOTA4LDMwOTA5LDMwOTExLDMwOTEyLDMwOTE0LDMwOTE1LDMwOTE2LDMwOTE4LDMwOTE5LDMwOTIwLDMwOTI0LDMwOTI1LDMwOTI2LDMwOTI3LDMwOTI5LDMwOTMwLDMwOTMxLDMwOTM0LDMwOTM1LDMwOTM2LDMwOTM4LDMwOTM5LDMwOTQwLDMwOTQxLDMwOTQyLDMwOTQzLDMwOTQ0''@;'; put 'put ''LDMwOTQ1LDMwOTQ2LDMwOTQ3LDMwOTQ4LDMwOTQ5LDMwOTUwLDMwOTUxLDMwOTUzLDMwOTU0LDMwOTU1LDMwOTU3LDMwOTU4LDMwOTU5LDMwOTYwLDMwOTYxLDMwOTYzLDMwOTY1LDMwOTY2LDMwOTY4LDMwOTY5LDMwOTcxLDMwOTcyLDMwOTczLDMwOTc0LDMwOTc1LDMwOTc2LDMwOTc4LDMw''@;'; put 'put ''OTc5LDMwOTgwLDMwOTgyLDMwOTgzLDMwOTg0LDMwOTg1LDMwOTg2LDMwOTg3LDMwOTg4LDMwNzg0LDIwNjQ4LDMwNjc5LDI1NjE2LDM1MzAyLDIyNzg4LDI1NTcxLDI0MDI5LDMxMzU5LDI2OTQxLDIwMjU2LDMzMzM3LDIxOTEyLDIwMDE4LDMwMTI2LDMxMzgzLDI0MTYyLDI0MjAyLDM4Mzgz''@;'; put 'put ''LDIxMDE5LDIxNTYxLDI4ODEwLDI1NDYyLDM4MTgwLDIyNDAyLDI2MTQ5LDI2OTQzLDM3MjU1LDIxNzY3LDI4MTQ3LDMyNDMxLDM0ODUwLDI1MTM5LDMyNDk2LDMwMTMzLDMzNTc2LDMwOTEzLDM4NjA0LDM2NzY2LDI0OTA0LDI5OTQzLDM1Nzg5LDI3NDkyLDIxMDUwLDM2MTc2LDI3NDI1LDMy''@;'; put 'put ''ODc0LDMzOTA1LDIyMjU3LDIxMjU0LDIwMTc0LDE5OTk1LDIwOTQ1LDMxODk1LDM3MjU5LDMxNzUxLDIwNDE5LDM2NDc5LDMxNzEzLDMxMzg4LDI1NzAzLDIzODI4LDIwNjUyLDMzMDMwLDMwMjA5LDMxOTI5LDI4MTQwLDMyNzM2LDI2NDQ5LDIzMzg0LDIzNTQ0LDMwOTIzLDI1Nzc0LDI1NjE5''@;'; put 'put ''LDI1NTE0LDI1Mzg3LDM4MTY5LDI1NjQ1LDM2Nzk4LDMxNTcyLDMwMjQ5LDI1MTcxLDIyODIzLDIxNTc0LDI3NTEzLDIwNjQzLDI1MTQwLDI0MTAyLDI3NTI2LDIwMTk1LDM2MTUxLDM0OTU1LDI0NDUzLDM2OTEwLDMwOTg5LDMwOTkwLDMwOTkxLDMwOTkyLDMwOTkzLDMwOTk0LDMwOTk2LDMw''@;'; put 'put ''OTk3LDMwOTk4LDMwOTk5LDMxZTMsMzEwMDEsMzEwMDIsMzEwMDMsMzEwMDQsMzEwMDUsMzEwMDcsMzEwMDgsMzEwMDksMzEwMTAsMzEwMTEsMzEwMTMsMzEwMTQsMzEwMTUsMzEwMTYsMzEwMTcsMzEwMTgsMzEwMTksMzEwMjAsMzEwMjEsMzEwMjIsMzEwMjMsMzEwMjQsMzEwMjUsMzEwMjYs''@;'; put 'put ''MzEwMjcsMzEwMjksMzEwMzAsMzEwMzEsMzEwMzIsMzEwMzMsMzEwMzcsMzEwMzksMzEwNDIsMzEwNDMsMzEwNDQsMzEwNDUsMzEwNDcsMzEwNTAsMzEwNTEsMzEwNTIsMzEwNTMsMzEwNTQsMzEwNTUsMzEwNTYsMzEwNTcsMzEwNTgsMzEwNjAsMzEwNjEsMzEwNjQsMzEwNjUsMzEwNzMsMzEw''@;'; put 'put ''NzUsMzEwNzYsMzEwNzgsMzEwODEsMzEwODIsMzEwODMsMzEwODQsMzEwODYsMzEwODgsMzEwODksMzEwOTAsMzEwOTEsMzEwOTIsMzEwOTMsMzEwOTQsMzEwOTcsMzEwOTksMzExMDAsMzExMDEsMzExMDIsMzExMDMsMzExMDYsMzExMDcsMzExMTAsMzExMTEsMzExMTIsMzExMTMsMzExMTUs''@;'; put 'put ''MzExMTYsMzExMTcsMzExMTgsMzExMjAsMzExMjEsMzExMjIsMjQ2MDgsMzI4MjksMjUyODUsMjAwMjUsMjEzMzMsMzcxMTIsMjU1MjgsMzI5NjYsMjYwODYsMjc2OTQsMjAyOTQsMjQ4MTQsMjgxMjksMzU4MDYsMjQzNzcsMzQ1MDcsMjQ0MDMsMjUzNzcsMjA4MjYsMzM2MzMsMjY3MjMsMjA5''@;'; put 'put ''OTIsMjU0NDMsMzY0MjQsMjA0OTgsMjM3MDcsMzEwOTUsMjM1NDgsMjEwNDAsMzEyOTEsMjQ3NjQsMzY5NDcsMzA0MjMsMjQ1MDMsMjQ0NzEsMzAzNDAsMzY0NjAsMjg3ODMsMzAzMzEsMzE1NjEsMzA2MzQsMjA5NzksMzcwMTEsMjI1NjQsMjAzMDIsMjg0MDQsMzY4NDIsMjU5MzIsMzE1MTUs''@;'; put 'put ''MjkzODAsMjgwNjgsMzI3MzUsMjMyNjUsMjUyNjksMjQyMTMsMjIzMjAsMzM5MjIsMzE1MzIsMjQwOTMsMjQzNTEsMzY4ODIsMzI1MzIsMzkwNzIsMjU0NzQsMjgzNTksMzA4NzIsMjg4NTcsMjA4NTYsMzg3NDcsMjI0NDMsMzAwMDUsMjAyOTEsMzAwMDgsMjQyMTUsMjQ4MDYsMjI4ODAsMjgw''@;'; put 'put ''OTYsMjc1ODMsMzA4NTcsMjE1MDAsMzg2MTMsMjA5MzksMjA5OTMsMjU0ODEsMjE1MTQsMzgwMzUsMzU4NDMsMzYzMDAsMjkyNDEsMzA4NzksMzQ2NzgsMzY4NDUsMzU4NTMsMjE0NzIsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjcsMzExMjgsMzExMjksMzExMzEsMzExMzIsMzExMzMs''@;'; put 'put ''MzExMzQsMzExMzUsMzExMzYsMzExMzcsMzExMzgsMzExMzksMzExNDAsMzExNDEsMzExNDIsMzExNDQsMzExNDUsMzExNDYsMzExNDcsMzExNDgsMzExNDksMzExNTAsMzExNTEsMzExNTIsMzExNTMsMzExNTQsMzExNTYsMzExNTcsMzExNTgsMzExNTksMzExNjAsMzExNjQsMzExNjcsMzEx''@;'; put 'put ''NzAsMzExNzIsMzExNzMsMzExNzUsMzExNzYsMzExNzgsMzExODAsMzExODIsMzExODMsMzExODQsMzExODcsMzExODgsMzExOTAsMzExOTEsMzExOTMsMzExOTQsMzExOTUsMzExOTYsMzExOTcsMzExOTgsMzEyMDAsMzEyMDEsMzEyMDIsMzEyMDUsMzEyMDgsMzEyMTAsMzEyMTIsMzEyMTQs''@;'; put 'put ''MzEyMTcsMzEyMTgsMzEyMTksMzEyMjAsMzEyMjEsMzEyMjIsMzEyMjMsMzEyMjUsMzEyMjYsMzEyMjgsMzEyMzAsMzEyMzEsMzEyMzMsMzEyMzYsMzEyMzcsMzEyMzksMzEyNDAsMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDcsMzEyNDgsMzEyNDksMzEyNTAsMzEyNTEsMzEyNTMsMzEyNTQsMzEy''@;'; put 'put ''NTYsMzEyNTcsMzEyNTksMzEyNjAsMTk5NjksMzA0NDcsMjE0ODYsMzgwMjUsMzkwMzAsNDA3MTgsMzgxODksMjM0NTAsMzU3NDYsMjAwMDIsMTk5OTYsMjA5MDgsMzM4OTEsMjUwMjYsMjExNjAsMjY2MzUsMjAzNzUsMjQ2ODMsMjA5MjMsMjc5MzQsMjA4MjgsMjUyMzgsMjYwMDcsMzg0OTcs''@;'; put 'put ''MzU5MTAsMzY4ODcsMzAxNjgsMzcxMTcsMzA1NjMsMjc2MDIsMjkzMjIsMjk0MjAsMzU4MzUsMjI1ODEsMzA1ODUsMzYxNzIsMjY0NjAsMzgyMDgsMzI5MjIsMjQyMzAsMjgxOTMsMjI5MzAsMzE0NzEsMzA3MDEsMzgyMDMsMjc1NzMsMjYwMjksMzI1MjYsMjI1MzQsMjA4MTcsMzg0MzEsMjM1''@;'; put 'put ''NDUsMjI2OTcsMjE1NDQsMzY0NjYsMjU5NTgsMzkwMzksMjIyNDQsMzgwNDUsMzA0NjIsMzY5MjksMjU0NzksMjE3MDIsMjI4MTAsMjI4NDIsMjI0MjcsMzY1MzAsMjY0MjEsMzYzNDYsMzMzMzMsMjEwNTcsMjQ4MTYsMjI1NDksMzQ1NTgsMjM3ODQsNDA1MTcsMjA0MjAsMzkwNjksMzU3Njks''@;'; put 'put ''MjMwNzcsMjQ2OTQsMjEzODAsMjUyMTIsMzY5NDMsMzcxMjIsMzkyOTUsMjQ2ODEsMzI3ODAsMjA3OTksMzI4MTksMjM1NzIsMzkyODUsMjc5NTMsMjAxMDgsMzEyNjEsMzEyNjMsMzEyNjUsMzEyNjYsMzEyNjgsMzEyNjksMzEyNzAsMzEyNzEsMzEyNzIsMzEyNzMsMzEyNzQsMzEyNzUsMzEy''@;'; put 'put ''NzYsMzEyNzcsMzEyNzgsMzEyNzksMzEyODAsMzEyODEsMzEyODIsMzEyODQsMzEyODUsMzEyODYsMzEyODgsMzEyOTAsMzEyOTQsMzEyOTYsMzEyOTcsMzEyOTgsMzEyOTksMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDUsMzEzMDYsMzEzMDcsMzEzMDgsMzEzMDksMzEzMTAsMzEzMTEs''@;'; put 'put ''MzEzMTIsMzEzMTQsMzEzMTUsMzEzMTYsMzEzMTcsMzEzMTgsMzEzMjAsMzEzMjEsMzEzMjIsMzEzMjMsMzEzMjQsMzEzMjUsMzEzMjYsMzEzMjcsMzEzMjgsMzEzMjksMzEzMzAsMzEzMzEsMzEzMzIsMzEzMzMsMzEzMzQsMzEzMzUsMzEzMzYsMzEzMzcsMzEzMzgsMzEzMzksMzEzNDAsMzEz''@;'; put 'put ''NDEsMzEzNDIsMzEzNDMsMzEzNDUsMzEzNDYsMzEzNDcsMzEzNDksMzEzNTUsMzEzNTYsMzEzNTcsMzEzNTgsMzEzNjIsMzEzNjUsMzEzNjcsMzEzNjksMzEzNzAsMzEzNzEsMzEzNzIsMzEzNzQsMzEzNzUsMzEzNzYsMzEzNzksMzEzODAsMzEzODUsMzEzODYsMzEzODcsMzEzOTAsMzEzOTMs''@;'; put 'put ''MzEzOTQsMzYxNDQsMjE0NTcsMzI2MDIsMzE1NjcsMjAyNDAsMjAwNDcsMzg0MDAsMjc4NjEsMjk2NDgsMzQyODEsMjQwNzAsMzAwNTgsMzI3NjMsMjcxNDYsMzA3MTgsMzgwMzQsMzIzMjEsMjA5NjEsMjg5MDIsMjE0NTMsMzY4MjAsMzM1MzksMzYxMzcsMjkzNTksMzkyNzcsMjc4NjcsMjIz''@;'; put 'put ''NDYsMzM0NTksMjYwNDEsMzI5MzgsMjUxNTEsMzg0NTAsMjI5NTIsMjAyMjMsMzU3NzUsMzI0NDIsMjU5MTgsMzM3NzgsMzg3NTAsMjE4NTcsMzkxMzQsMzI5MzMsMjEyOTAsMzU4MzcsMjE1MzYsMzI5NTQsMjQyMjMsMjc4MzIsMzYxNTMsMzM0NTIsMzcyMTAsMjE1NDUsMjc2NzUsMjA5OTgs''@;'; put 'put ''MzI0MzksMjIzNjcsMjg5NTQsMjc3NzQsMzE4ODEsMjI4NTksMjAyMjEsMjQ1NzUsMjQ4NjgsMzE5MTQsMjAwMTYsMjM1NTMsMjY1MzksMzQ1NjIsMjM3OTIsMzgxNTUsMzkxMTgsMzAxMjcsMjg5MjUsMzY4OTgsMjA5MTEsMzI1NDEsMzU3NzMsMjI4NTcsMjA5NjQsMjAzMTUsMjE1NDIsMjI4''@;'; put 'put ''MjcsMjU5NzUsMzI5MzIsMjM0MTMsMjUyMDYsMjUyODIsMzY3NTIsMjQxMzMsMjc2NzksMzE1MjYsMjAyMzksMjA0NDAsMjYzODEsMzEzOTUsMzEzOTYsMzEzOTksMzE0MDEsMzE0MDIsMzE0MDMsMzE0MDYsMzE0MDcsMzE0MDgsMzE0MDksMzE0MTAsMzE0MTIsMzE0MTMsMzE0MTQsMzE0MTUs''@;'; put 'put ''MzE0MTYsMzE0MTcsMzE0MTgsMzE0MTksMzE0MjAsMzE0MjEsMzE0MjIsMzE0MjQsMzE0MjUsMzE0MjYsMzE0MjcsMzE0MjgsMzE0MjksMzE0MzAsMzE0MzEsMzE0MzIsMzE0MzMsMzE0MzQsMzE0MzYsMzE0MzcsMzE0MzgsMzE0MzksMzE0NDAsMzE0NDEsMzE0NDIsMzE0NDMsMzE0NDQsMzE0''@;'; put 'put ''NDUsMzE0NDcsMzE0NDgsMzE0NTAsMzE0NTEsMzE0NTIsMzE0NTMsMzE0NTcsMzE0NTgsMzE0NjAsMzE0NjMsMzE0NjQsMzE0NjUsMzE0NjYsMzE0NjcsMzE0NjgsMzE0NzAsMzE0NzIsMzE0NzMsMzE0NzQsMzE0NzUsMzE0NzYsMzE0NzcsMzE0NzgsMzE0NzksMzE0ODAsMzE0ODMsMzE0ODQs''@;'; put 'put ''MzE0ODYsMzE0ODgsMzE0ODksMzE0OTAsMzE0OTMsMzE0OTUsMzE0OTcsMzE1MDAsMzE1MDEsMzE1MDIsMzE1MDQsMzE1MDYsMzE1MDcsMzE1MTAsMzE1MTEsMzE1MTIsMzE1MTQsMzE1MTYsMzE1MTcsMzE1MTksMzE1MjEsMzE1MjIsMzE1MjMsMzE1MjcsMzE1MjksMzE1MzMsMjgwMTQsMjgw''@;'; put 'put ''NzQsMzExMTksMzQ5OTMsMjQzNDMsMjk5OTUsMjUyNDIsMzY3NDEsMjA0NjMsMzczNDAsMjYwMjMsMzMwNzEsMzMxMDUsMjQyMjAsMzMxMDQsMzYyMTIsMjExMDMsMzUyMDYsMzYxNzEsMjI3OTcsMjA2MTMsMjAxODQsMzg0MjgsMjkyMzgsMzMxNDUsMzYxMjcsMjM1MDAsMzU3NDcsMzg0Njgs''@;'; put 'put ''MjI5MTksMzI1MzgsMjE2NDgsMjIxMzQsMjIwMzAsMzU4MTMsMjU5MTMsMjcwMTAsMzgwNDEsMzA0MjIsMjgyOTcsMjQxNzgsMjk5NzYsMjY0MzgsMjY1NzcsMzE0ODcsMzI5MjUsMzYyMTQsMjQ4NjMsMzExNzQsMjU5NTQsMzYxOTUsMjA4NzIsMjEwMTgsMzgwNTAsMzI1NjgsMzI5MjMsMzI0''@;'; put 'put ''MzQsMjM3MDMsMjgyMDcsMjY0NjQsMzE3MDUsMzAzNDcsMzk2NDAsMzMxNjcsMzI2NjAsMzE5NTcsMjU2MzAsMzgyMjQsMzEyOTUsMjE1NzgsMjE3MzMsMjc0NjgsMjU2MDEsMjUwOTYsNDA1MDksMzMwMTEsMzAxMDUsMjExMDYsMzg3NjEsMzM4ODMsMjY2ODQsMzQ1MzIsMzg0MDEsMzg1NDgs''@;'; put 'put ''MzgxMjQsMjAwMTAsMjE1MDgsMzI0NzMsMjY2ODEsMzYzMTksMzI3ODksMjYzNTYsMjQyMTgsMzI2OTcsMzE1MzUsMzE1MzYsMzE1MzgsMzE1NDAsMzE1NDEsMzE1NDIsMzE1NDMsMzE1NDUsMzE1NDcsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMsMzE1NTQsMzE1NTUsMzE1NTYsMzE1NTgsMzE1''@;'; put 'put ''NjAsMzE1NjIsMzE1NjUsMzE1NjYsMzE1NzEsMzE1NzMsMzE1NzUsMzE1NzcsMzE1ODAsMzE1ODIsMzE1ODMsMzE1ODUsMzE1ODcsMzE1ODgsMzE1ODksMzE1OTAsMzE1OTEsMzE1OTIsMzE1OTMsMzE1OTQsMzE1OTUsMzE1OTYsMzE1OTcsMzE1OTksMzE2MDAsMzE2MDMsMzE2MDQsMzE2MDYs''@;'; put 'put ''MzE2MDgsMzE2MTAsMzE2MTIsMzE2MTMsMzE2MTUsMzE2MTcsMzE2MTgsMzE2MTksMzE2MjAsMzE2MjIsMzE2MjMsMzE2MjQsMzE2MjUsMzE2MjYsMzE2MjcsMzE2MjgsMzE2MzAsMzE2MzEsMzE2MzMsMzE2MzQsMzE2MzUsMzE2MzgsMzE2NDAsMzE2NDEsMzE2NDIsMzE2NDMsMzE2NDYsMzE2''@;'; put 'put ''NDcsMzE2NDgsMzE2NTEsMzE2NTIsMzE2NTMsMzE2NjIsMzE2NjMsMzE2NjQsMzE2NjYsMzE2NjcsMzE2NjksMzE2NzAsMzE2NzEsMzE2NzMsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2NzgsMzE2NzksMzE2ODAsMzE2ODIsMzE2ODMsMzE2ODQsMjI0NjYsMzI4MzEsMjY3NzUsMjQwMzcs''@;'; put 'put ''MjU5MTUsMjExNTEsMjQ2ODUsNDA4NTgsMjAzNzksMzY1MjQsMjA4NDQsMjM0NjcsMjQzMzksMjQwNDEsMjc3NDIsMjUzMjksMzYxMjksMjA4NDksMzgwNTcsMjEyNDYsMjc4MDcsMzM1MDMsMjkzOTksMjI0MzQsMjY1MDAsMzYxNDEsMjI4MTUsMzY3NjQsMzM3MzUsMjE2NTMsMzE2MjksMjAy''@;'; put 'put ''NzIsMjc4MzcsMjMzOTYsMjI5OTMsNDA3MjMsMjE0NzYsMzQ1MDYsMzk1OTIsMzU4OTUsMzI5MjksMjU5MjUsMzkwMzgsMjIyNjYsMzg1OTksMjEwMzgsMjk5MTYsMjEwNzIsMjM1MjEsMjUzNDYsMzUwNzQsMjAwNTQsMjUyOTYsMjQ2MTgsMjY4NzQsMjA4NTEsMjM0NDgsMjA4OTYsMzUyNjYs''@;'; put 'put ''MzE2NDksMzkzMDIsMzI1OTIsMjQ4MTUsMjg3NDgsMzYxNDMsMjA4MDksMjQxOTEsMzY4OTEsMjk4MDgsMzUyNjgsMjIzMTcsMzA3ODksMjQ0MDIsNDA4NjMsMzgzOTQsMzY3MTIsMzk3NDAsMzU4MDksMzAzMjgsMjY2OTAsMjY1ODgsMzYzMzAsMzYxNDksMjEwNTMsMzY3NDYsMjgzNzgsMjY4''@;'; put 'put ''MjksMzgxNDksMzcxMDEsMjIyNjksMjY1MjQsMzUwNjUsMzY4MDcsMjE3MDQsMzE2ODUsMzE2ODgsMzE2ODksMzE2OTAsMzE2OTEsMzE2OTMsMzE2OTQsMzE2OTUsMzE2OTYsMzE2OTgsMzE3MDAsMzE3MDEsMzE3MDIsMzE3MDMsMzE3MDQsMzE3MDcsMzE3MDgsMzE3MTAsMzE3MTEsMzE3MTIs''@;'; put 'put ''MzE3MTQsMzE3MTUsMzE3MTYsMzE3MTksMzE3MjAsMzE3MjEsMzE3MjMsMzE3MjQsMzE3MjUsMzE3MjcsMzE3MjgsMzE3MzAsMzE3MzEsMzE3MzIsMzE3MzMsMzE3MzQsMzE3MzYsMzE3MzcsMzE3MzgsMzE3MzksMzE3NDEsMzE3NDMsMzE3NDQsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3''@;'; put 'put ''NDksMzE3NTAsMzE3NTIsMzE3NTMsMzE3NTQsMzE3NTcsMzE3NTgsMzE3NjAsMzE3NjEsMzE3NjIsMzE3NjMsMzE3NjQsMzE3NjUsMzE3NjcsMzE3NjgsMzE3NjksMzE3NzAsMzE3NzEsMzE3NzIsMzE3NzMsMzE3NzQsMzE3NzYsMzE3NzcsMzE3NzgsMzE3NzksMzE3ODAsMzE3ODEsMzE3ODQs''@;'; put 'put ''MzE3ODUsMzE3ODcsMzE3ODgsMzE3ODksMzE3OTAsMzE3OTEsMzE3OTIsMzE3OTMsMzE3OTQsMzE3OTUsMzE3OTYsMzE3OTcsMzE3OTgsMzE3OTksMzE4MDEsMzE4MDIsMzE4MDMsMzE4MDQsMzE4MDUsMzE4MDYsMzE4MTAsMzk2MDgsMjM0MDEsMjgwMjMsMjc2ODYsMjAxMzMsMjM0NzUsMzk1''@;'; put 'put ''NTksMzcyMTksMjVlMywzNzAzOSwzODg4OSwyMTU0NywyODA4NSwyMzUwNiwyMDk4OSwyMTg5OCwzMjU5NywzMjc1MiwyNTc4OCwyNTQyMSwyNjA5NywyNTAyMiwyNDcxNywyODkzOCwyNzczNSwyNzcyMSwyMjgzMSwyNjQ3NywzMzMyMiwyMjc0MSwyMjE1OCwzNTk0NiwyNzYyNywzNzA4NSwy''@;'; put 'put ''MjkwOSwzMjc5MSwyMTQ5NSwyODAwOSwyMTYyMSwyMTkxNywzMzY1NSwzMzc0MywyNjY4MCwzMTE2NiwyMTY0NCwyMDMwOSwyMTUxMiwzMDQxOCwzNTk3NywzODQwMiwyNzgyNywyODA4OCwzNjIwMywzNTA4OCw0MDU0OCwzNjE1NCwyMjA3OSw0MDY1NywzMDE2NSwyNDQ1NiwyOTQwOCwyNDY4''@;'; put 'put ''MCwyMTc1NiwyMDEzNiwyNzE3OCwzNDkxMywyNDY1OCwzNjcyMCwyMTcwMCwyODg4OCwzNDQyNSw0MDUxMSwyNzk0NiwyMzQzOSwyNDM0NCwzMjQxOCwyMTg5NywyMDM5OSwyOTQ5MiwyMTU2NCwyMTQwMiwyMDUwNSwyMTUxOCwyMTYyOCwyMDA0NiwyNDU3MywyOTc4NiwyMjc3NCwzMzg5OSwz''@;'; put 'put ''Mjk5MywzNDY3NiwyOTM5MiwzMTk0NiwyODI0NiwzMTgxMSwzMTgxMiwzMTgxMywzMTgxNCwzMTgxNSwzMTgxNiwzMTgxNywzMTgxOCwzMTgxOSwzMTgyMCwzMTgyMiwzMTgyMywzMTgyNCwzMTgyNSwzMTgyNiwzMTgyNywzMTgyOCwzMTgyOSwzMTgzMCwzMTgzMSwzMTgzMiwzMTgzMywzMTgz''@;'; put 'put ''NCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTgzOSwzMTg0MCwzMTg0MSwzMTg0MiwzMTg0MywzMTg0NCwzMTg0NSwzMTg0NiwzMTg0NywzMTg0OCwzMTg0OSwzMTg1MCwzMTg1MSwzMTg1MiwzMTg1MywzMTg1NCwzMTg1NSwzMTg1NiwzMTg1NywzMTg1OCwzMTg2MSwzMTg2MiwzMTg2Mywz''@;'; put 'put ''MTg2NCwzMTg2NSwzMTg2NiwzMTg3MCwzMTg3MSwzMTg3MiwzMTg3MywzMTg3NCwzMTg3NSwzMTg3NiwzMTg3NywzMTg3OCwzMTg3OSwzMTg4MCwzMTg4MiwzMTg4MywzMTg4NCwzMTg4NSwzMTg4NiwzMTg4NywzMTg4OCwzMTg5MSwzMTg5MiwzMTg5NCwzMTg5NywzMTg5OCwzMTg5OSwzMTkw''@;'; put 'put ''NCwzMTkwNSwzMTkwNywzMTkxMCwzMTkxMSwzMTkxMiwzMTkxMywzMTkxNSwzMTkxNiwzMTkxNywzMTkxOSwzMTkyMCwzMTkyNCwzMTkyNSwzMTkyNiwzMTkyNywzMTkyOCwzMTkzMCwzMTkzMSwyNDM1OSwzNDM4MiwyMTgwNCwyNTI1MiwyMDExNCwyNzgxOCwyNTE0MywzMzQ1NywyMTcxOSwy''@;'; put 'put ''MTMyNiwyOTUwMiwyODM2OSwzMDAxMSwyMTAxMCwyMTI3MCwzNTgwNSwyNzA4OCwyNDQ1OCwyNDU3NiwyODE0MiwyMjM1MSwyNzQyNiwyOTYxNSwyNjcwNywzNjgyNCwzMjUzMSwyNTQ0MiwyNDczOSwyMTc5NiwzMDE4NiwzNTkzOCwyODk0OSwyODA2NywyMzQ2MiwyNDE4NywzMzYxOCwyNDkw''@;'; put 'put ''OCw0MDY0NCwzMDk3MCwzNDY0NywzMTc4MywzMDM0MywyMDk3NiwyNDgyMiwyOTAwNCwyNjE3OSwyNDE0MCwyNDY1MywzNTg1NCwyODc4NCwyNTM4MSwzNjc0NSwyNDUwOSwyNDY3NCwzNDUxNiwyMjIzOCwyNzU4NSwyNDcyNCwyNDkzNSwyMTMyMSwyNDgwMCwyNjIxNCwzNjE1OSwzMTIyOSwy''@;'; put 'put ''MDI1MCwyODkwNSwyNzcxOSwzNTc2MywzNTgyNiwzMjQ3MiwzMzYzNiwyNjEyNywyMzEzMCwzOTc0NiwyNzk4NSwyODE1MSwzNTkwNSwyNzk2MywyMDI0OSwyODc3OSwzMzcxOSwyNTExMCwyNDc4NSwzODY2OSwzNjEzNSwzMTA5NiwyMDk4NywyMjMzNCwyMjUyMiwyNjQyNiwzMDA3MiwzMTI5''@;'; put 'put ''MywzMTIxNSwzMTYzNywzMTkzNSwzMTkzNiwzMTkzOCwzMTkzOSwzMTk0MCwzMTk0MiwzMTk0NSwzMTk0NywzMTk1MCwzMTk1MSwzMTk1MiwzMTk1MywzMTk1NCwzMTk1NSwzMTk1NiwzMTk2MCwzMTk2MiwzMTk2MywzMTk2NSwzMTk2NiwzMTk2OSwzMTk3MCwzMTk3MSwzMTk3MiwzMTk3Mywz''@;'; put 'put ''MTk3NCwzMTk3NSwzMTk3NywzMTk3OCwzMTk3OSwzMTk4MCwzMTk4MSwzMTk4MiwzMTk4NCwzMTk4NSwzMTk4NiwzMTk4NywzMTk4OCwzMTk4OSwzMTk5MCwzMTk5MSwzMTk5MywzMTk5NCwzMTk5NiwzMTk5NywzMTk5OCwzMTk5OSwzMmUzLDMyMDAxLDMyMDAyLDMyMDAzLDMyMDA0LDMyMDA1''@;'; put 'put ''LDMyMDA2LDMyMDA3LDMyMDA4LDMyMDA5LDMyMDExLDMyMDEyLDMyMDEzLDMyMDE0LDMyMDE1LDMyMDE2LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIwLDMyMDIxLDMyMDIyLDMyMDIzLDMyMDI0LDMyMDI1LDMyMDI2LDMyMDI3LDMyMDI4LDMyMDI5LDMyMDMwLDMyMDMxLDMyMDMzLDMyMDM1LDMy''@;'; put 'put ''MDM2LDMyMDM3LDMyMDM4LDMyMDQwLDMyMDQxLDMyMDQyLDMyMDQ0LDMyMDQ1LDMyMDQ2LDMyMDQ4LDMyMDQ5LDMyMDUwLDMyMDUxLDMyMDUyLDMyMDUzLDMyMDU0LDMyOTA4LDM5MjY5LDM2ODU3LDI4NjA4LDM1NzQ5LDQwNDgxLDIzMDIwLDMyNDg5LDMyNTIxLDIxNTEzLDI2NDk3LDI2ODQw''@;'; put 'put ''LDM2NzUzLDMxODIxLDM4NTk4LDIxNDUwLDI0NjEzLDMwMTQyLDI3NzYyLDIxMzYzLDIzMjQxLDMyNDIzLDI1MzgwLDIwOTYwLDMzMDM0LDI0MDQ5LDM0MDE1LDI1MjE2LDIwODY0LDIzMzk1LDIwMjM4LDMxMDg1LDIxMDU4LDI0NzYwLDI3OTgyLDIzNDkyLDIzNDkwLDM1NzQ1LDM1NzYwLDI2''@;'; put 'put ''MDgyLDI0NTI0LDM4NDY5LDIyOTMxLDMyNDg3LDMyNDI2LDIyMDI1LDI2NTUxLDIyODQxLDIwMzM5LDIzNDc4LDIxMTUyLDMzNjI2LDM5MDUwLDM2MTU4LDMwMDAyLDM4MDc4LDIwNTUxLDMxMjkyLDIwMjE1LDI2NTUwLDM5NTUwLDIzMjMzLDI3NTE2LDMwNDE3LDIyMzYyLDIzNTc0LDMxNTQ2''@;'; put 'put ''LDM4Mzg4LDI5MDA2LDIwODYwLDMyOTM3LDMzMzkyLDIyOTA0LDMyNTE2LDMzNTc1LDI2ODE2LDI2NjA0LDMwODk3LDMwODM5LDI1MzE1LDI1NDQxLDMxNjE2LDIwNDYxLDIxMDk4LDIwOTQzLDMzNjE2LDI3MDk5LDM3NDkyLDM2MzQxLDM2MTQ1LDM1MjY1LDM4MTkwLDMxNjYxLDIwMjE0LDMy''@;'; put 'put ''MDU1LDMyMDU2LDMyMDU3LDMyMDU4LDMyMDU5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDYzLDMyMDY0LDMyMDY1LDMyMDY2LDMyMDY3LDMyMDY4LDMyMDY5LDMyMDcwLDMyMDcxLDMyMDcyLDMyMDczLDMyMDc0LDMyMDc1LDMyMDc2LDMyMDc3LDMyMDc4LDMyMDc5LDMyMDgwLDMyMDgxLDMyMDgy''@;'; put 'put ''LDMyMDgzLDMyMDg0LDMyMDg1LDMyMDg2LDMyMDg3LDMyMDg4LDMyMDg5LDMyMDkwLDMyMDkxLDMyMDkyLDMyMDkzLDMyMDk0LDMyMDk1LDMyMDk2LDMyMDk3LDMyMDk4LDMyMDk5LDMyMTAwLDMyMTAxLDMyMTAyLDMyMTAzLDMyMTA0LDMyMTA1LDMyMTA2LDMyMTA3LDMyMTA4LDMyMTA5LDMy''@;'; put 'put ''MTExLDMyMTEyLDMyMTEzLDMyMTE0LDMyMTE1LDMyMTE2LDMyMTE3LDMyMTE4LDMyMTIwLDMyMTIxLDMyMTIyLDMyMTIzLDMyMTI0LDMyMTI1LDMyMTI2LDMyMTI3LDMyMTI4LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMyLDMyMTMzLDMyMTM0LDMyMTM1LDMyMTM2LDMyMTM3LDMyMTM4LDMyMTM5''@;'; put 'put ''LDMyMTQwLDMyMTQxLDMyMTQyLDMyMTQzLDMyMTQ0LDMyMTQ1LDMyMTQ2LDMyMTQ3LDMyMTQ4LDMyMTQ5LDMyMTUwLDMyMTUxLDMyMTUyLDIwNTgxLDMzMzI4LDIxMDczLDM5Mjc5LDI4MTc2LDI4MjkzLDI4MDcxLDI0MzE0LDIwNzI1LDIzMDA0LDIzNTU4LDI3OTc0LDI3NzQzLDMwMDg2LDMz''@;'; put 'put ''OTMxLDI2NzI4LDIyODcwLDM1NzYyLDIxMjgwLDM3MjMzLDM4NDc3LDM0MTIxLDI2ODk4LDMwOTc3LDI4OTY2LDMzMDE0LDIwMTMyLDM3MDY2LDI3OTc1LDM5NTU2LDIzMDQ3LDIyMjA0LDI1NjA1LDM4MTI4LDMwNjk5LDIwMzg5LDMzMDUwLDI5NDA5LDM1MjgyLDM5MjkwLDMyNTY0LDMyNDc4''@;'; put 'put ''LDIxMTE5LDI1OTQ1LDM3MjM3LDM2NzM1LDM2NzM5LDIxNDgzLDMxMzgyLDI1NTgxLDI1NTA5LDMwMzQyLDMxMjI0LDM0OTAzLDM4NDU0LDI1MTMwLDIxMTYzLDMzNDEwLDI2NzA4LDI2NDgwLDI1NDYzLDMwNTcxLDMxNDY5LDI3OTA1LDMyNDY3LDM1Mjk5LDIyOTkyLDI1MTA2LDM0MjQ5LDMz''@;'; put 'put ''NDQ1LDMwMDI4LDIwNTExLDIwMTcxLDMwMTE3LDM1ODE5LDIzNjI2LDI0MDYyLDMxNTYzLDI2MDIwLDM3MzI5LDIwMTcwLDI3OTQxLDM1MTY3LDMyMDM5LDM4MTgyLDIwMTY1LDM1ODgwLDM2ODI3LDM4NzcxLDI2MTg3LDMxMTA1LDM2ODE3LDI4OTA4LDI4MDI0LDMyMTUzLDMyMTU0LDMyMTU1''@;'; put 'put ''LDMyMTU2LDMyMTU3LDMyMTU4LDMyMTU5LDMyMTYwLDMyMTYxLDMyMTYyLDMyMTYzLDMyMTY0LDMyMTY1LDMyMTY3LDMyMTY4LDMyMTY5LDMyMTcwLDMyMTcxLDMyMTcyLDMyMTczLDMyMTc1LDMyMTc2LDMyMTc3LDMyMTc4LDMyMTc5LDMyMTgwLDMyMTgxLDMyMTgyLDMyMTgzLDMyMTg0LDMy''@;'; put 'put ''MTg1LDMyMTg2LDMyMTg3LDMyMTg4LDMyMTg5LDMyMTkwLDMyMTkxLDMyMTkyLDMyMTkzLDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMTk5LDMyMjAwLDMyMjAxLDMyMjAyLDMyMjAzLDMyMjA0LDMyMjA1LDMyMjA2LDMyMjA3LDMyMjA4LDMyMjA5LDMyMjEwLDMyMjExLDMyMjEy''@;'; put 'put ''LDMyMjEzLDMyMjE0LDMyMjE1LDMyMjE2LDMyMjE3LDMyMjE4LDMyMjE5LDMyMjIwLDMyMjIxLDMyMjIyLDMyMjIzLDMyMjI0LDMyMjI1LDMyMjI2LDMyMjI3LDMyMjI4LDMyMjI5LDMyMjMwLDMyMjMxLDMyMjMyLDMyMjMzLDMyMjM0LDMyMjM1LDMyMjM2LDMyMjM3LDMyMjM4LDMyMjM5LDMy''@;'; put 'put ''MjQwLDMyMjQxLDMyMjQyLDMyMjQzLDMyMjQ0LDMyMjQ1LDMyMjQ2LDMyMjQ3LDMyMjQ4LDMyMjQ5LDMyMjUwLDIzNjEzLDIxMTcwLDMzNjA2LDIwODM0LDMzNTUwLDMwNTU1LDI2MjMwLDQwMTIwLDIwMTQwLDI0Nzc4LDMxOTM0LDMxOTIzLDMyNDYzLDIwMTE3LDM1Njg2LDI2MjIzLDM5MDQ4''@;'; put 'put ''LDM4NzQ1LDIyNjU5LDI1OTY0LDM4MjM2LDI0NDUyLDMwMTUzLDM4NzQyLDMxNDU1LDMxNDU0LDIwOTI4LDI4ODQ3LDMxMzg0LDI1NTc4LDMxMzUwLDMyNDE2LDI5NTkwLDM4ODkzLDIwMDM3LDI4NzkyLDIwMDYxLDM3MjAyLDIxNDE3LDI1OTM3LDI2MDg3LDMzMjc2LDMzMjg1LDIxNjQ2LDIz''@;'; put 'put ''NjAxLDMwMTA2LDM4ODE2LDI1MzA0LDI5NDAxLDMwMTQxLDIzNjIxLDM5NTQ1LDMzNzM4LDIzNjE2LDIxNjMyLDMwNjk3LDIwMDMwLDI3ODIyLDMyODU4LDI1Mjk4LDI1NDU0LDI0MDQwLDIwODU1LDM2MzE3LDM2MzgyLDM4MTkxLDIwNDY1LDIxNDc3LDI0ODA3LDI4ODQ0LDIxMDk1LDI1NDI0''@;'; put 'put ''LDQwNTE1LDIzMDcxLDIwNTE4LDMwNTE5LDIxMzY3LDMyNDgyLDI1NzMzLDI1ODk5LDI1MjI1LDI1NDk2LDIwNTAwLDI5MjM3LDM1MjczLDIwOTE1LDM1Nzc2LDMyNDc3LDIyMzQzLDMzNzQwLDM4MDU1LDIwODkxLDIxNTMxLDIzODAzLDMyMjUxLDMyMjUyLDMyMjUzLDMyMjU0LDMyMjU1LDMy''@;'; put 'put ''MjU2LDMyMjU3LDMyMjU4LDMyMjU5LDMyMjYwLDMyMjYxLDMyMjYyLDMyMjYzLDMyMjY0LDMyMjY1LDMyMjY2LDMyMjY3LDMyMjY4LDMyMjY5LDMyMjcwLDMyMjcxLDMyMjcyLDMyMjczLDMyMjc0LDMyMjc1LDMyMjc2LDMyMjc3LDMyMjc4LDMyMjc5LDMyMjgwLDMyMjgxLDMyMjgyLDMyMjgz''@;'; put 'put ''LDMyMjg0LDMyMjg1LDMyMjg2LDMyMjg3LDMyMjg4LDMyMjg5LDMyMjkwLDMyMjkxLDMyMjkyLDMyMjkzLDMyMjk0LDMyMjk1LDMyMjk2LDMyMjk3LDMyMjk4LDMyMjk5LDMyMzAwLDMyMzAxLDMyMzAyLDMyMzAzLDMyMzA0LDMyMzA1LDMyMzA2LDMyMzA3LDMyMzA4LDMyMzA5LDMyMzEwLDMy''@;'; put 'put ''MzExLDMyMzEyLDMyMzEzLDMyMzE0LDMyMzE2LDMyMzE3LDMyMzE4LDMyMzE5LDMyMzIwLDMyMzIyLDMyMzIzLDMyMzI0LDMyMzI1LDMyMzI2LDMyMzI4LDMyMzI5LDMyMzMwLDMyMzMxLDMyMzMyLDMyMzMzLDMyMzM0LDMyMzM1LDMyMzM2LDMyMzM3LDMyMzM4LDMyMzM5LDMyMzQwLDMyMzQx''@;'; put 'put ''LDMyMzQyLDMyMzQzLDMyMzQ0LDMyMzQ1LDMyMzQ2LDMyMzQ3LDMyMzQ4LDMyMzQ5LDIwNDI2LDMxNDU5LDI3OTk0LDM3MDg5LDM5NTY3LDIxODg4LDIxNjU0LDIxMzQ1LDIxNjc5LDI0MzIwLDI1NTc3LDI2OTk5LDIwOTc1LDI0OTM2LDIxMDAyLDIyNTcwLDIxMjA4LDIyMzUwLDMwNzMzLDMw''@;'; put 'put ''NDc1LDI0MjQ3LDI0OTUxLDMxOTY4LDI1MTc5LDI1MjM5LDIwMTMwLDI4ODIxLDMyNzcxLDI1MzM1LDI4OTAwLDM4NzUyLDIyMzkxLDMzNDk5LDI2NjA3LDI2ODY5LDMwOTMzLDM5MDYzLDMxMTg1LDIyNzcxLDIxNjgzLDIxNDg3LDI4MjEyLDIwODExLDIxMDUxLDIzNDU4LDM1ODM4LDMyOTQz''@;'; put 'put ''LDIxODI3LDIyNDM4LDI0NjkxLDIyMzUzLDIxNTQ5LDMxMzU0LDI0NjU2LDIzMzgwLDI1NTExLDI1MjQ4LDIxNDc1LDI1MTg3LDIzNDk1LDI2NTQzLDIxNzQxLDMxMzkxLDMzNTEwLDM3MjM5LDI0MjExLDM1MDQ0LDIyODQwLDIyNDQ2LDI1MzU4LDM2MzI4LDMzMDA3LDIyMzU5LDMxNjA3LDIw''@;'; put 'put ''MzkzLDI0NTU1LDIzNDg1LDI3NDU0LDIxMjgxLDMxNTY4LDI5Mzc4LDI2Njk0LDMwNzE5LDMwNTE4LDI2MTAzLDIwOTE3LDIwMTExLDMwNDIwLDIzNzQzLDMxMzk3LDMzOTA5LDIyODYyLDM5NzQ1LDIwNjA4LDMyMzUwLDMyMzUxLDMyMzUyLDMyMzUzLDMyMzU0LDMyMzU1LDMyMzU2LDMyMzU3''@;'; put 'put ''LDMyMzU4LDMyMzU5LDMyMzYwLDMyMzYxLDMyMzYyLDMyMzYzLDMyMzY0LDMyMzY1LDMyMzY2LDMyMzY3LDMyMzY4LDMyMzY5LDMyMzcwLDMyMzcxLDMyMzcyLDMyMzczLDMyMzc0LDMyMzc1LDMyMzc2LDMyMzc3LDMyMzc4LDMyMzc5LDMyMzgwLDMyMzgxLDMyMzgyLDMyMzgzLDMyMzg0LDMy''@;'; put 'put ''Mzg1LDMyMzg3LDMyMzg4LDMyMzg5LDMyMzkwLDMyMzkxLDMyMzkyLDMyMzkzLDMyMzk0LDMyMzk1LDMyMzk2LDMyMzk3LDMyMzk4LDMyMzk5LDMyNDAwLDMyNDAxLDMyNDAyLDMyNDAzLDMyNDA0LDMyNDA1LDMyNDA2LDMyNDA3LDMyNDA4LDMyNDA5LDMyNDEwLDMyNDEyLDMyNDEzLDMyNDE0''@;'; put 'put ''LDMyNDMwLDMyNDM2LDMyNDQzLDMyNDQ0LDMyNDcwLDMyNDg0LDMyNDkyLDMyNTA1LDMyNTIyLDMyNTI4LDMyNTQyLDMyNTY3LDMyNTY5LDMyNTcxLDMyNTcyLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc2LDMyNTc3LDMyNTc5LDMyNTgyLDMyNTgzLDMyNTg0LDMyNTg1LDMyNTg2LDMyNTg3LDMy''@;'; put 'put ''NTg4LDMyNTg5LDMyNTkwLDMyNTkxLDMyNTk0LDMyNTk1LDM5MzA0LDI0ODcxLDI4MjkxLDIyMzcyLDI2MTE4LDI1NDE0LDIyMjU2LDI1MzI0LDI1MTkzLDI0Mjc1LDM4NDIwLDIyNDAzLDI1Mjg5LDIxODk1LDM0NTkzLDMzMDk4LDM2NzcxLDIxODYyLDMzNzEzLDI2NDY5LDM2MTgyLDM0MDEz''@;'; put 'put ''LDIzMTQ2LDI2NjM5LDI1MzE4LDMxNzI2LDM4NDE3LDIwODQ4LDI4NTcyLDM1ODg4LDI1NTk3LDM1MjcyLDI1MDQyLDMyNTE4LDI4ODY2LDI4Mzg5LDI5NzAxLDI3MDI4LDI5NDM2LDI0MjY2LDM3MDcwLDI2MzkxLDI4MDEwLDI1NDM4LDIxMTcxLDI5MjgyLDMyNzY5LDIwMzMyLDIzMDEzLDM3''@;'; put 'put ''MjI2LDI4ODg5LDI4MDYxLDIxMjAyLDIwMDQ4LDM4NjQ3LDM4MjUzLDM0MTc0LDMwOTIyLDMyMDQ3LDIwNzY5LDIyNDE4LDI1Nzk0LDMyOTA3LDMxODY3LDI3ODgyLDI2ODY1LDI2OTc0LDIwOTE5LDIxNDAwLDI2NzkyLDI5MzEzLDQwNjU0LDMxNzI5LDI5NDMyLDMxMTYzLDI4NDM1LDI5NzAy''@;'; put 'put ''LDI2NDQ2LDM3MzI0LDQwMTAwLDMxMDM2LDMzNjczLDMzNjIwLDIxNTE5LDI2NjQ3LDIwMDI5LDIxMzg1LDIxMTY5LDMwNzgyLDIxMzgyLDIxMDMzLDIwNjE2LDIwMzYzLDIwNDMyLDMyNTk4LDMyNjAxLDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA2LDMyNjA4LDMyNjExLDMyNjEyLDMyNjEzLDMy''@;'; put 'put ''NjE0LDMyNjE1LDMyNjE5LDMyNjIwLDMyNjIxLDMyNjIzLDMyNjI0LDMyNjI3LDMyNjI5LDMyNjMwLDMyNjMxLDMyNjMyLDMyNjM0LDMyNjM1LDMyNjM2LDMyNjM3LDMyNjM5LDMyNjQwLDMyNjQyLDMyNjQzLDMyNjQ0LDMyNjQ1LDMyNjQ2LDMyNjQ3LDMyNjQ4LDMyNjQ5LDMyNjUxLDMyNjUz''@;'; put 'put ''LDMyNjU1LDMyNjU2LDMyNjU3LDMyNjU4LDMyNjU5LDMyNjYxLDMyNjYyLDMyNjYzLDMyNjY0LDMyNjY1LDMyNjY3LDMyNjY4LDMyNjcyLDMyNjc0LDMyNjc1LDMyNjc3LDMyNjc4LDMyNjgwLDMyNjgxLDMyNjgyLDMyNjgzLDMyNjg0LDMyNjg1LDMyNjg2LDMyNjg5LDMyNjkxLDMyNjkyLDMy''@;'; put 'put ''NjkzLDMyNjk0LDMyNjk1LDMyNjk4LDMyNjk5LDMyNzAyLDMyNzA0LDMyNzA2LDMyNzA3LDMyNzA4LDMyNzEwLDMyNzExLDMyNzEyLDMyNzEzLDMyNzE1LDMyNzE3LDMyNzE5LDMyNzIwLDMyNzIxLDMyNzIyLDMyNzIzLDMyNzI2LDMyNzI3LDMyNzI5LDMyNzMwLDMyNzMxLDMyNzMyLDMyNzMz''@;'; put 'put ''LDMyNzM0LDMyNzM4LDMyNzM5LDMwMTc4LDMxNDM1LDMxODkwLDI3ODEzLDM4NTgyLDIxMTQ3LDI5ODI3LDIxNzM3LDIwNDU3LDMyODUyLDMzNzE0LDM2ODMwLDM4MjU2LDI0MjY1LDI0NjA0LDI4MDYzLDI0MDg4LDI1OTQ3LDMzMDgwLDM4MTQyLDI0NjUxLDI4ODYwLDMyNDUxLDMxOTE4LDIw''@;'; put 'put ''OTM3LDI2NzUzLDMxOTIxLDMzMzkxLDIwMDA0LDM2NzQyLDM3MzI3LDI2MjM4LDIwMTQyLDM1ODQ1LDI1NzY5LDMyODQyLDIwNjk4LDMwMTAzLDI5MTM0LDIzNTI1LDM2Nzk3LDI4NTE4LDIwMTAyLDI1NzMwLDM4MjQzLDI0Mjc4LDI2MDA5LDIxMDE1LDM1MDEwLDI4ODcyLDIxMTU1LDI5NDU0''@;'; put 'put ''LDI5NzQ3LDI2NTE5LDMwOTY3LDM4Njc4LDIwMDIwLDM3MDUxLDQwMTU4LDI4MTA3LDIwOTU1LDM2MTYxLDIxNTMzLDI1Mjk0LDI5NjE4LDMzNzc3LDM4NjQ2LDQwODM2LDM4MDgzLDIwMjc4LDMyNjY2LDIwOTQwLDI4Nzg5LDM4NTE3LDIzNzI1LDM5MDQ2LDIxNDc4LDIwMTk2LDI4MzE2LDI5''@;'; put 'put ''NzA1LDI3MDYwLDMwODI3LDM5MzExLDMwMDQxLDIxMDE2LDMwMjQ0LDI3OTY5LDI2NjExLDIwODQ1LDQwODU3LDMyODQzLDIxNjU3LDMxNTQ4LDMxNDIzLDMyNzQwLDMyNzQzLDMyNzQ0LDMyNzQ2LDMyNzQ3LDMyNzQ4LDMyNzQ5LDMyNzUxLDMyNzU0LDMyNzU2LDMyNzU3LDMyNzU4LDMyNzU5''@;'; put 'put ''LDMyNzYwLDMyNzYxLDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzcwLDMyNzc1LDMyNzc2LDMyNzc3LDMyNzc4LDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzk0LDMyNzk1LDMyNzk3LDMyNzk4LDMyNzk5LDMyODAxLDMyODAzLDMyODA0LDMyODExLDMyODEyLDMyODEzLDMyODE0LDMy''@;'; put 'put ''ODE1LDMyODE2LDMyODE4LDMyODIwLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMyODMzLDMyODM2LDMyODM3LDMyODM5LDMyODQwLDMyODQxLDMyODQ2LDMyODQ3LDMyODQ4LDMyODQ5LDMyODUxLDMyODUzLDMyODU0LDMyODU1LDMyODU3LDMyODU5LDMyODYwLDMyODYxLDMyODYy''@;'; put 'put ''LDMyODYzLDMyODY0LDMyODY1LDMyODY2LDMyODY3LDMyODY4LDMyODY5LDMyODcwLDMyODcxLDMyODcyLDMyODc1LDMyODc2LDMyODc3LDMyODc4LDMyODc5LDMyODgwLDMyODgyLDMyODgzLDMyODg0LDMyODg1LDMyODg2LDMyODg3LDMyODg4LDMyODg5LDMyODkwLDMyODkxLDMyODkyLDMy''@;'; put 'put ''ODkzLDM4NTM0LDIyNDA0LDI1MzE0LDM4NDcxLDI3MDA0LDIzMDQ0LDI1NjAyLDMxNjk5LDI4NDMxLDM4NDc1LDMzNDQ2LDIxMzQ2LDM5MDQ1LDI0MjA4LDI4ODA5LDI1NTIzLDIxMzQ4LDM0MzgzLDQwMDY1LDQwNTk1LDMwODYwLDM4NzA2LDM2MzM1LDM2MTYyLDQwNTc1LDI4NTEwLDMxMTA4''@;'; put 'put ''LDI0NDA1LDM4NDcwLDI1MTM0LDM5NTQwLDIxNTI1LDM4MTA5LDIwMzg3LDI2MDUzLDIzNjUzLDIzNjQ5LDMyNTMzLDM0Mzg1LDI3Njk1LDI0NDU5LDI5NTc1LDI4Mzg4LDMyNTExLDIzNzgyLDI1MzcxLDIzNDAyLDI4MzkwLDIxMzY1LDIwMDgxLDI1NTA0LDMwMDUzLDI1MjQ5LDM2NzE4LDIw''@;'; put 'put ''MjYyLDIwMTc3LDI3ODE0LDMyNDM4LDM1NzcwLDMzODIxLDM0NzQ2LDMyNTk5LDM2OTIzLDM4MTc5LDMxNjU3LDM5NTg1LDM1MDY0LDMzODUzLDI3OTMxLDM5NTU4LDMyNDc2LDIyOTIwLDQwNjM1LDI5NTk1LDMwNzIxLDM0NDM0LDM5NTMyLDM5NTU0LDIyMDQzLDIxNTI3LDIyNDc1LDIwMDgw''@;'; put 'put ''LDQwNjE0LDIxMzM0LDM2ODA4LDMzMDMzLDMwNjEwLDM5MzE0LDM0NTQyLDI4Mzg1LDM0MDY3LDI2MzY0LDI0OTMwLDI4NDU5LDMyODk0LDMyODk3LDMyODk4LDMyOTAxLDMyOTA0LDMyOTA2LDMyOTA5LDMyOTEwLDMyOTExLDMyOTEyLDMyOTEzLDMyOTE0LDMyOTE2LDMyOTE3LDMyOTE5LDMy''@;'; put 'put ''OTIxLDMyOTI2LDMyOTMxLDMyOTM0LDMyOTM1LDMyOTM2LDMyOTQwLDMyOTQ0LDMyOTQ3LDMyOTQ5LDMyOTUwLDMyOTUyLDMyOTUzLDMyOTU1LDMyOTY1LDMyOTY3LDMyOTY4LDMyOTY5LDMyOTcwLDMyOTcxLDMyOTc1LDMyOTc2LDMyOTc3LDMyOTc4LDMyOTc5LDMyOTgwLDMyOTgxLDMyOTg0''@;'; put 'put ''LDMyOTkxLDMyOTkyLDMyOTk0LDMyOTk1LDMyOTk4LDMzMDA2LDMzMDEzLDMzMDE1LDMzMDE3LDMzMDE5LDMzMDIyLDMzMDIzLDMzMDI0LDMzMDI1LDMzMDI3LDMzMDI4LDMzMDI5LDMzMDMxLDMzMDMyLDMzMDM1LDMzMDM2LDMzMDQ1LDMzMDQ3LDMzMDQ5LDMzMDUxLDMzMDUyLDMzMDUzLDMz''@;'; put 'put ''MDU1LDMzMDU2LDMzMDU3LDMzMDU4LDMzMDU5LDMzMDYwLDMzMDYxLDMzMDYyLDMzMDYzLDMzMDY0LDMzMDY1LDMzMDY2LDMzMDY3LDMzMDY5LDMzMDcwLDMzMDcyLDMzMDc1LDMzMDc2LDMzMDc3LDMzMDc5LDMzMDgxLDMzMDgyLDMzMDgzLDMzMDg0LDMzMDg1LDMzMDg3LDM1ODgxLDMzNDI2''@;'; put 'put ''LDMzNTc5LDMwNDUwLDI3NjY3LDI0NTM3LDMzNzI1LDI5NDgzLDMzNTQxLDM4MTcwLDI3NjExLDMwNjgzLDM4MDg2LDIxMzU5LDMzNTM4LDIwODgyLDI0MTI1LDM1OTgwLDM2MTUyLDIwMDQwLDI5NjExLDI2NTIyLDI2NzU3LDM3MjM4LDM4NjY1LDI5MDI4LDI3ODA5LDMwNDczLDIzMTg2LDM4''@;'; put 'put ''MjA5LDI3NTk5LDMyNjU0LDI2MTUxLDIzNTA0LDIyOTY5LDIzMTk0LDM4Mzc2LDM4MzkxLDIwMjA0LDMzODA0LDMzOTQ1LDI3MzA4LDMwNDMxLDM4MTkyLDI5NDY3LDI2NzkwLDIzMzkxLDMwNTExLDM3Mjc0LDM4NzUzLDMxOTY0LDM2ODU1LDM1ODY4LDI0MzU3LDMxODU5LDMxMTkyLDM1MjY5''@;'; put 'put ''LDI3ODUyLDM0NTg4LDIzNDk0LDI0MTMwLDI2ODI1LDMwNDk2LDMyNTAxLDIwODg1LDIwODEzLDIxMTkzLDIzMDgxLDMyNTE3LDM4NzU0LDMzNDk1LDI1NTUxLDMwNTk2LDM0MjU2LDMxMTg2LDI4MjE4LDI0MjE3LDIyOTM3LDM0MDY1LDI4NzgxLDI3NjY1LDI1Mjc5LDMwMzk5LDI1OTM1LDI0''@;'; put 'put ''NzUxLDM4Mzk3LDI2MTI2LDM0NzE5LDQwNDgzLDM4MTI1LDIxNTE3LDIxNjI5LDM1ODg0LDI1NzIwLDMzMDg4LDMzMDg5LDMzMDkwLDMzMDkxLDMzMDkyLDMzMDkzLDMzMDk1LDMzMDk3LDMzMTAxLDMzMTAyLDMzMTAzLDMzMTA2LDMzMTEwLDMzMTExLDMzMTEyLDMzMTE1LDMzMTE2LDMzMTE3''@;'; put 'put ''LDMzMTE4LDMzMTE5LDMzMTIxLDMzMTIyLDMzMTIzLDMzMTI0LDMzMTI2LDMzMTI4LDMzMTMwLDMzMTMxLDMzMTMyLDMzMTM1LDMzMTM4LDMzMTM5LDMzMTQxLDMzMTQyLDMzMTQzLDMzMTQ0LDMzMTUzLDMzMTU1LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTU5LDMzMTYxLDMzMTYzLDMzMTY0LDMz''@;'; put 'put ''MTY1LDMzMTY2LDMzMTY4LDMzMTcwLDMzMTcxLDMzMTcyLDMzMTczLDMzMTc0LDMzMTc1LDMzMTc3LDMzMTc4LDMzMTgyLDMzMTgzLDMzMTg0LDMzMTg1LDMzMTg2LDMzMTg4LDMzMTg5LDMzMTkxLDMzMTkzLDMzMTk1LDMzMTk2LDMzMTk3LDMzMTk4LDMzMTk5LDMzMjAwLDMzMjAxLDMzMjAy''@;'; put 'put ''LDMzMjA0LDMzMjA1LDMzMjA2LDMzMjA3LDMzMjA4LDMzMjA5LDMzMjEyLDMzMjEzLDMzMjE0LDMzMjE1LDMzMjIwLDMzMjIxLDMzMjIzLDMzMjI0LDMzMjI1LDMzMjI3LDMzMjI5LDMzMjMwLDMzMjMxLDMzMjMyLDMzMjMzLDMzMjM0LDMzMjM1LDI1NzIxLDM0MzIxLDI3MTY5LDMzMTgwLDMw''@;'; put 'put ''OTUyLDI1NzA1LDM5NzY0LDI1MjczLDI2NDExLDMzNzA3LDIyNjk2LDQwNjY0LDI3ODE5LDI4NDQ4LDIzNTE4LDM4NDc2LDM1ODUxLDI5Mjc5LDI2NTc2LDI1Mjg3LDI5MjgxLDIwMTM3LDIyOTgyLDI3NTk3LDIyNjc1LDI2Mjg2LDI0MTQ5LDIxMjE1LDI0OTE3LDI2NDA4LDMwNDQ2LDMwNTY2''@;'; put 'put ''LDI5Mjg3LDMxMzAyLDI1MzQzLDIxNzM4LDIxNTg0LDM4MDQ4LDM3MDI3LDIzMDY4LDMyNDM1LDI3NjcwLDIwMDM1LDIyOTAyLDMyNzg0LDIyODU2LDIxMzM1LDMwMDA3LDM4NTkwLDIyMjE4LDI1Mzc2LDMzMDQxLDI0NzAwLDM4MzkzLDI4MTE4LDIxNjAyLDM5Mjk3LDIwODY5LDIzMjczLDMz''@;'; put 'put ''MDIxLDIyOTU4LDM4Njc1LDIwNTIyLDI3ODc3LDIzNjEyLDI1MzExLDIwMzIwLDIxMzExLDMzMTQ3LDM2ODcwLDI4MzQ2LDM0MDkxLDI1Mjg4LDI0MTgwLDMwOTEwLDI1NzgxLDI1NDY3LDI0NTY1LDIzMDY0LDM3MjQ3LDQwNDc5LDIzNjE1LDI1NDIzLDMyODM0LDIzNDIxLDIxODcwLDM4MjE4''@;'; put 'put ''LDM4MjIxLDI4MDM3LDI0NzQ0LDI2NTkyLDI5NDA2LDIwOTU3LDIzNDI1LDMzMjM2LDMzMjM3LDMzMjM4LDMzMjM5LDMzMjQwLDMzMjQxLDMzMjQyLDMzMjQzLDMzMjQ0LDMzMjQ1LDMzMjQ2LDMzMjQ3LDMzMjQ4LDMzMjQ5LDMzMjUwLDMzMjUyLDMzMjUzLDMzMjU0LDMzMjU2LDMzMjU3LDMz''@;'; put 'put ''MjU5LDMzMjYyLDMzMjYzLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcxLDMzMjcyLDMzMjczLDMzMjc0LDMzMjc3LDMzMjc5LDMzMjgzLDMzMjg3LDMzMjg4LDMzMjg5LDMzMjkwLDMzMjkxLDMzMjk0LDMzMjk1LDMzMjk3LDMzMjk5LDMzMzAxLDMzMzAyLDMzMzAzLDMzMzA0''@;'; put 'put ''LDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEyLDMzMzE2LDMzMzE3LDMzMzE4LDMzMzE5LDMzMzIxLDMzMzI2LDMzMzMwLDMzMzM4LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzQ0LDMzMzQ1LDMzMzQ2LDMzMzQ3LDMzMzQ5LDMzMzUwLDMzMzUyLDMzMzU0LDMzMzU2LDMzMzU3LDMzMzU4LDMzMzYwLDMz''@;'; put 'put ''MzYxLDMzMzYyLDMzMzYzLDMzMzY0LDMzMzY1LDMzMzY2LDMzMzY3LDMzMzY5LDMzMzcxLDMzMzcyLDMzMzczLDMzMzc0LDMzMzc2LDMzMzc3LDMzMzc4LDMzMzc5LDMzMzgwLDMzMzgxLDMzMzgyLDMzMzgzLDMzMzg1LDI1MzE5LDI3ODcwLDI5Mjc1LDI1MTk3LDM4MDYyLDMyNDQ1LDMzMDQz''@;'; put 'put ''LDI3OTg3LDIwODkyLDI0MzI0LDIyOTAwLDIxMTYyLDI0NTk0LDIyODk5LDI2MjYyLDM0Mzg0LDMwMTExLDI1Mzg2LDI1MDYyLDMxOTgzLDM1ODM0LDIxNzM0LDI3NDMxLDQwNDg1LDI3NTcyLDM0MjYxLDIxNTg5LDIwNTk4LDI3ODEyLDIxODY2LDM2Mjc2LDI5MjI4LDI0MDg1LDI0NTk3LDI5''@;'; put 'put ''NzUwLDI1MjkzLDI1NDkwLDI5MjYwLDI0NDcyLDI4MjI3LDI3OTY2LDI1ODU2LDI4NTA0LDMwNDI0LDMwOTI4LDMwNDYwLDMwMDM2LDIxMDI4LDIxNDY3LDIwMDUxLDI0MjIyLDI2MDQ5LDMyODEwLDMyOTgyLDI1MjQzLDIxNjM4LDIxMDMyLDI4ODQ2LDM0OTU3LDM2MzA1LDI3ODczLDIxNjI0''@;'; put 'put ''LDMyOTg2LDIyNTIxLDM1MDYwLDM2MTgwLDM4NTA2LDM3MTk3LDIwMzI5LDI3ODAzLDIxOTQzLDMwNDA2LDMwNzY4LDI1MjU2LDI4OTIxLDI4NTU4LDI0NDI5LDM0MDI4LDI2ODQyLDMwODQ0LDMxNzM1LDMzMTkyLDI2Mzc5LDQwNTI3LDI1NDQ3LDMwODk2LDIyMzgzLDMwNzM4LDM4NzEzLDI1''@;'; put 'put ''MjA5LDI1MjU5LDIxMTI4LDI5NzQ5LDI3NjA3LDMzMzg2LDMzMzg3LDMzMzg4LDMzMzg5LDMzMzkzLDMzMzk3LDMzMzk4LDMzMzk5LDMzNDAwLDMzNDAzLDMzNDA0LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEzLDMzNDE0LDMzNDE1LDMzNDE3LDMzNDIwLDMzNDI0LDMzNDI3LDMzNDI4LDMzNDI5''@;'; put 'put ''LDMzNDMwLDMzNDM0LDMzNDM1LDMzNDM4LDMzNDQwLDMzNDQyLDMzNDQzLDMzNDQ3LDMzNDU4LDMzNDYxLDMzNDYyLDMzNDY2LDMzNDY3LDMzNDY4LDMzNDcxLDMzNDcyLDMzNDc0LDMzNDc1LDMzNDc3LDMzNDc4LDMzNDgxLDMzNDg4LDMzNDk0LDMzNDk3LDMzNDk4LDMzNTAxLDMzNTA2LDMz''@;'; put 'put ''NTExLDMzNTEyLDMzNTEzLDMzNTE0LDMzNTE2LDMzNTE3LDMzNTE4LDMzNTIwLDMzNTIyLDMzNTIzLDMzNTI1LDMzNTI2LDMzNTI4LDMzNTMwLDMzNTMyLDMzNTMzLDMzNTM0LDMzNTM1LDMzNTM2LDMzNTQ2LDMzNTQ3LDMzNTQ5LDMzNTUyLDMzNTU0LDMzNTU1LDMzNTU4LDMzNTYwLDMzNTYx''@;'; put 'put ''LDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY4LDMzNTY5LDMzNTcwLDMzNTcxLDMzNTcyLDMzNTczLDMzNTc0LDMzNTc3LDMzNTc4LDMzNTgyLDMzNTg0LDMzNTg2LDMzNTkxLDMzNTk1LDMzNTk3LDIxODYwLDMzMDg2LDMwMTMwLDMwMzgyLDIxMzA1LDMwMTc0LDIwNzMxLDIzNjE3LDM1NjkyLDMx''@;'; put 'put ''Njg3LDIwNTU5LDI5MjU1LDM5NTc1LDM5MTI4LDI4NDE4LDI5OTIyLDMxMDgwLDI1NzM1LDMwNjI5LDI1MzQwLDM5MDU3LDM2MTM5LDIxNjk3LDMyODU2LDIwMDUwLDIyMzc4LDMzNTI5LDMzODA1LDI0MTc5LDIwOTczLDI5OTQyLDM1NzgwLDIzNjMxLDIyMzY5LDI3OTAwLDM5MDQ3LDIzMTEw''@;'; put 'put ''LDMwNzcyLDM5NzQ4LDM2ODQzLDMxODkzLDIxMDc4LDI1MTY5LDM4MTM4LDIwMTY2LDMzNjcwLDMzODg5LDMzNzY5LDMzOTcwLDIyNDg0LDI2NDIwLDIyMjc1LDI2MjIyLDI4MDA2LDM1ODg5LDI2MzMzLDI4Njg5LDI2Mzk5LDI3NDUwLDI2NjQ2LDI1MTE0LDIyOTcxLDE5OTcxLDIwOTMyLDI4''@;'; put 'put ''NDIyLDI2NTc4LDI3NzkxLDIwODU0LDI2ODI3LDIyODU1LDI3NDk1LDMwMDU0LDIzODIyLDMzMDQwLDQwNzg0LDI2MDcxLDMxMDQ4LDMxMDQxLDM5NTY5LDM2MjE1LDIzNjgyLDIwMDYyLDIwMjI1LDIxNTUxLDIyODY1LDMwNzMyLDIyMTIwLDI3NjY4LDM2ODA0LDI0MzIzLDI3NzczLDI3ODc1''@;'; put 'put ''LDM1NzU1LDI1NDg4LDMzNTk4LDMzNTk5LDMzNjAxLDMzNjAyLDMzNjA0LDMzNjA1LDMzNjA4LDMzNjEwLDMzNjExLDMzNjEyLDMzNjEzLDMzNjE0LDMzNjE5LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjI0LDMzNjI1LDMzNjI5LDMzNjM0LDMzNjQ4LDMzNjQ5LDMzNjUwLDMzNjUxLDMzNjUyLDMz''@;'; put 'put ''NjUzLDMzNjU0LDMzNjU3LDMzNjU4LDMzNjYyLDMzNjYzLDMzNjY0LDMzNjY1LDMzNjY2LDMzNjY3LDMzNjY4LDMzNjcxLDMzNjcyLDMzNjc0LDMzNjc1LDMzNjc2LDMzNjc3LDMzNjc5LDMzNjgwLDMzNjgxLDMzNjg0LDMzNjg1LDMzNjg2LDMzNjg3LDMzNjg5LDMzNjkwLDMzNjkzLDMzNjk1''@;'; put 'put ''LDMzNjk3LDMzNjk4LDMzNjk5LDMzNzAwLDMzNzAxLDMzNzAyLDMzNzAzLDMzNzA4LDMzNzA5LDMzNzEwLDMzNzExLDMzNzE3LDMzNzIzLDMzNzI2LDMzNzI3LDMzNzMwLDMzNzMxLDMzNzMyLDMzNzM0LDMzNzM2LDMzNzM3LDMzNzM5LDMzNzQxLDMzNzQyLDMzNzQ0LDMzNzQ1LDMzNzQ2LDMz''@;'; put 'put ''NzQ3LDMzNzQ5LDMzNzUxLDMzNzUzLDMzNzU0LDMzNzU1LDMzNzU4LDMzNzYyLDMzNzYzLDMzNzY0LDMzNzY2LDMzNzY3LDMzNzY4LDMzNzcxLDMzNzcyLDMzNzczLDI0Njg4LDI3OTY1LDI5MzAxLDI1MTkwLDM4MDMwLDM4MDg1LDIxMzE1LDM2ODAxLDMxNjE0LDIwMTkxLDM1ODc4LDIwMDk0''@;'; put 'put ''LDQwNjYwLDM4MDY1LDM4MDY3LDIxMDY5LDI4NTA4LDM2OTYzLDI3OTczLDM1ODkyLDIyNTQ1LDIzODg0LDI3NDI0LDI3NDY1LDI2NTM4LDIxNTk1LDMzMTA4LDMyNjUyLDIyNjgxLDM0MTAzLDI0Mzc4LDI1MjUwLDI3MjA3LDM4MjAxLDI1OTcwLDI0NzA4LDI2NzI1LDMwNjMxLDIwMDUyLDIw''@;'; put 'put ''MzkyLDI0MDM5LDM4ODA4LDI1NzcyLDMyNzI4LDIzNzg5LDIwNDMxLDMxMzczLDIwOTk5LDMzNTQwLDE5OTg4LDI0NjIzLDMxMzYzLDM4MDU0LDIwNDA1LDIwMTQ2LDMxMjA2LDI5NzQ4LDIxMjIwLDMzNDY1LDI1ODEwLDMxMTY1LDIzNTE3LDI3Nzc3LDM4NzM4LDM2NzMxLDI3NjgyLDIwNTQy''@;'; put 'put ''LDIxMzc1LDI4MTY1LDI1ODA2LDI2MjI4LDI3Njk2LDI0NzczLDM5MDMxLDM1ODMxLDI0MTk4LDI5NzU2LDMxMzUxLDMxMTc5LDE5OTkyLDM3MDQxLDI5Njk5LDI3NzE0LDIyMjM0LDM3MTk1LDI3ODQ1LDM2MjM1LDIxMzA2LDM0NTAyLDI2MzU0LDM2NTI3LDIzNjI0LDM5NTM3LDI4MTkyLDMz''@;'; put 'put ''Nzc0LDMzNzc1LDMzNzc5LDMzNzgwLDMzNzgxLDMzNzgyLDMzNzgzLDMzNzg2LDMzNzg3LDMzNzg4LDMzNzkwLDMzNzkxLDMzNzkyLDMzNzk0LDMzNzk3LDMzNzk5LDMzODAwLDMzODAxLDMzODAyLDMzODA4LDMzODEwLDMzODExLDMzODEyLDMzODEzLDMzODE0LDMzODE1LDMzODE3LDMzODE4''@;'; put 'put ''LDMzODE5LDMzODIyLDMzODIzLDMzODI0LDMzODI1LDMzODI2LDMzODI3LDMzODMzLDMzODM0LDMzODM1LDMzODM2LDMzODM3LDMzODM4LDMzODM5LDMzODQwLDMzODQyLDMzODQzLDMzODQ0LDMzODQ1LDMzODQ2LDMzODQ3LDMzODQ5LDMzODUwLDMzODUxLDMzODU0LDMzODU1LDMzODU2LDMz''@;'; put 'put ''ODU3LDMzODU4LDMzODU5LDMzODYwLDMzODYxLDMzODYzLDMzODY0LDMzODY1LDMzODY2LDMzODY3LDMzODY4LDMzODY5LDMzODcwLDMzODcxLDMzODcyLDMzODc0LDMzODc1LDMzODc2LDMzODc3LDMzODc4LDMzODgwLDMzODg1LDMzODg2LDMzODg3LDMzODg4LDMzODkwLDMzODkyLDMzODkz''@;'; put 'put ''LDMzODk0LDMzODk1LDMzODk2LDMzODk4LDMzOTAyLDMzOTAzLDMzOTA0LDMzOTA2LDMzOTA4LDMzOTExLDMzOTEzLDMzOTE1LDMzOTE2LDIxNDYyLDIzMDk0LDQwODQzLDM2MjU5LDIxNDM1LDIyMjgwLDM5MDc5LDI2NDM1LDM3Mjc1LDI3ODQ5LDIwODQwLDMwMTU0LDI1MzMxLDI5MzU2LDIx''@;'; put 'put ''MDQ4LDIxMTQ5LDMyNTcwLDI4ODIwLDMwMjY0LDIxMzY0LDQwNTIyLDI3MDYzLDMwODMwLDM4NTkyLDM1MDMzLDMyNjc2LDI4OTgyLDI5MTIzLDIwODczLDI2NTc5LDI5OTI0LDIyNzU2LDI1ODgwLDIyMTk5LDM1NzUzLDM5Mjg2LDI1MjAwLDMyNDY5LDI0ODI1LDI4OTA5LDIyNzY0LDIwMTYx''@;'; put 'put ''LDIwMTU0LDI0NTI1LDM4ODg3LDIwMjE5LDM1NzQ4LDIwOTk1LDIyOTIyLDMyNDI3LDI1MTcyLDIwMTczLDI2MDg1LDI1MTAyLDMzNTkyLDMzOTkzLDMzNjM1LDM0NzAxLDI5MDc2LDI4MzQyLDIzNDgxLDMyNDY2LDIwODg3LDI1NTQ1LDI2NTgwLDMyOTA1LDMzNTkzLDM0ODM3LDIwNzU0LDIz''@;'; put 'put ''NDE4LDIyOTE0LDM2Nzg1LDIwMDgzLDI3NzQxLDIwODM3LDM1MTA5LDM2NzE5LDM4NDQ2LDM0MTIyLDI5NzkwLDM4MTYwLDM4Mzg0LDI4MDcwLDMzNTA5LDI0MzY5LDI1NzQ2LDI3OTIyLDMzODMyLDMzMTM0LDQwMTMxLDIyNjIyLDM2MTg3LDE5OTc3LDIxNDQxLDMzOTE3LDMzOTE4LDMzOTE5''@;'; put 'put ''LDMzOTIwLDMzOTIxLDMzOTIzLDMzOTI0LDMzOTI1LDMzOTI2LDMzOTMwLDMzOTMzLDMzOTM1LDMzOTM2LDMzOTM3LDMzOTM4LDMzOTM5LDMzOTQwLDMzOTQxLDMzOTQyLDMzOTQ0LDMzOTQ2LDMzOTQ3LDMzOTQ5LDMzOTUwLDMzOTUxLDMzOTUyLDMzOTU0LDMzOTU1LDMzOTU2LDMzOTU3LDMz''@;'; put 'put ''OTU4LDMzOTU5LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTYzLDMzOTY0LDMzOTY1LDMzOTY2LDMzOTY4LDMzOTY5LDMzOTcxLDMzOTczLDMzOTc0LDMzOTc1LDMzOTc5LDMzOTgwLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTg3LDMzOTg5LDMzOTkwLDMzOTkxLDMzOTkyLDMzOTk1LDMzOTk2LDMzOTk4''@;'; put 'put ''LDMzOTk5LDM0MDAyLDM0MDA0LDM0MDA1LDM0MDA3LDM0MDA4LDM0MDA5LDM0MDEwLDM0MDExLDM0MDEyLDM0MDE0LDM0MDE3LDM0MDE4LDM0MDIwLDM0MDIzLDM0MDI0LDM0MDI1LDM0MDI2LDM0MDI3LDM0MDI5LDM0MDMwLDM0MDMxLDM0MDMzLDM0MDM0LDM0MDM1LDM0MDM2LDM0MDM3LDM0''@;'; put 'put ''MDM4LDM0MDM5LDM0MDQwLDM0MDQxLDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDQ2LDM0MDQ4LDM0MDQ5LDM0MDUwLDIwMjU0LDI1OTU1LDI2NzA1LDIxOTcxLDIwMDA3LDI1NjIwLDM5NTc4LDI1MTk1LDIzMjM0LDI5NzkxLDMzMzk0LDI4MDczLDI2ODYyLDIwNzExLDMzNjc4LDMwNzIyLDI2NDMy''@;'; put 'put ''LDIxMDQ5LDI3ODAxLDMyNDMzLDIwNjY3LDIxODYxLDI5MDIyLDMxNTc5LDI2MTk0LDI5NjQyLDMzNTE1LDI2NDQxLDIzNjY1LDIxMDI0LDI5MDUzLDM0OTIzLDM4Mzc4LDM4NDg1LDI1Nzk3LDM2MTkzLDMzMjAzLDIxODkyLDI3NzMzLDI1MTU5LDMyNTU4LDIyNjc0LDIwMjYwLDIxODMwLDM2''@;'; put 'put ''MTc1LDI2MTg4LDE5OTc4LDIzNTc4LDM1MDU5LDI2Nzg2LDI1NDIyLDMxMjQ1LDI4OTAzLDMzNDIxLDIxMjQyLDM4OTAyLDIzNTY5LDIxNzM2LDM3MDQ1LDMyNDYxLDIyODgyLDM2MTcwLDM0NTAzLDMzMjkyLDMzMjkzLDM2MTk4LDI1NjY4LDIzNTU2LDI0OTEzLDI4MDQxLDMxMDM4LDM1Nzc0''@;'; put 'put ''LDMwNzc1LDMwMDAzLDIxNjI3LDIwMjgwLDM2NTIzLDI4MTQ1LDIzMDcyLDMyNDUzLDMxMDcwLDI3Nzg0LDIzNDU3LDIzMTU4LDI5OTc4LDMyOTU4LDI0OTEwLDI4MTgzLDIyNzY4LDI5OTgzLDI5OTg5LDI5Mjk4LDIxMzE5LDMyNDk5LDM0MDUxLDM0MDUyLDM0MDUzLDM0MDU0LDM0MDU1LDM0''@;'; put 'put ''MDU2LDM0MDU3LDM0MDU4LDM0MDU5LDM0MDYxLDM0MDYyLDM0MDYzLDM0MDY0LDM0MDY2LDM0MDY4LDM0MDY5LDM0MDcwLDM0MDcyLDM0MDczLDM0MDc1LDM0MDc2LDM0MDc3LDM0MDc4LDM0MDgwLDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg2LDM0MDg3LDM0MDg4LDM0MDg5LDM0MDkw''@;'; put 'put ''LDM0MDkzLDM0MDk0LDM0MDk1LDM0MDk2LDM0MDk3LDM0MDk4LDM0MDk5LDM0MTAwLDM0MTAxLDM0MTAyLDM0MTEwLDM0MTExLDM0MTEyLDM0MTEzLDM0MTE0LDM0MTE2LDM0MTE3LDM0MTE4LDM0MTE5LDM0MTIzLDM0MTI0LDM0MTI1LDM0MTI2LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0''@;'; put 'put ''MTMxLDM0MTMyLDM0MTMzLDM0MTM1LDM0MTM2LDM0MTM4LDM0MTM5LDM0MTQwLDM0MTQxLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ3LDM0MTQ5LDM0MTUwLDM0MTUxLDM0MTUzLDM0MTU0LDM0MTU1LDM0MTU2LDM0MTU3LDM0MTU4LDM0MTU5LDM0MTYwLDM0MTYxLDM0MTYzLDM0MTY1''@;'; put 'put ''LDM0MTY2LDM0MTY3LDM0MTY4LDM0MTcyLDM0MTczLDM0MTc1LDM0MTc2LDM0MTc3LDMwNDY1LDMwNDI3LDIxMDk3LDMyOTg4LDIyMzA3LDI0MDcyLDIyODMzLDI5NDIyLDI2MDQ1LDI4Mjg3LDM1Nzk5LDIzNjA4LDM0NDE3LDIxMzEzLDMwNzA3LDI1MzQyLDI2MTAyLDIwMTYwLDM5MTM1LDM0''@;'; put 'put ''NDMyLDIzNDU0LDM1NzgyLDIxNDkwLDMwNjkwLDIwMzUxLDIzNjMwLDM5NTQyLDIyOTg3LDI0MzM1LDMxMDM0LDIyNzYzLDE5OTkwLDI2NjIzLDIwMTA3LDI1MzI1LDM1NDc1LDM2ODkzLDIxMTgzLDI2MTU5LDIxOTgwLDIyMTI0LDM2ODY2LDIwMTgxLDIwMzY1LDM3MzIyLDM5MjgwLDI3NjYz''@;'; put 'put ''LDI0MDY2LDI0NjQzLDIzNDYwLDM1MjcwLDM1Nzk3LDI1OTEwLDI1MTYzLDM5MzE4LDIzNDMyLDIzNTUxLDI1NDgwLDIxODA2LDIxNDYzLDMwMjQ2LDIwODYxLDM0MDkyLDI2NTMwLDI2ODAzLDI3NTMwLDI1MjM0LDM2NzU1LDIxNDYwLDMzMjk4LDI4MTEzLDMwMDk1LDIwMDcwLDM2MTc0LDIz''@;'; put 'put ''NDA4LDI5MDg3LDM0MjIzLDI2MjU3LDI2MzI5LDMyNjI2LDM0NTYwLDQwNjUzLDQwNzM2LDIzNjQ2LDI2NDE1LDM2ODQ4LDI2NjQxLDI2NDYzLDI1MTAxLDMxNDQ2LDIyNjYxLDI0MjQ2LDI1OTY4LDI4NDY1LDM0MTc4LDM0MTc5LDM0MTgyLDM0MTg0LDM0MTg1LDM0MTg2LDM0MTg3LDM0MTg4''@;'; put 'put ''LDM0MTg5LDM0MTkwLDM0MTkyLDM0MTkzLDM0MTk0LDM0MTk1LDM0MTk2LDM0MTk3LDM0MTk4LDM0MTk5LDM0MjAwLDM0MjAxLDM0MjAyLDM0MjA1LDM0MjA2LDM0MjA3LDM0MjA4LDM0MjA5LDM0MjEwLDM0MjExLDM0MjEzLDM0MjE0LDM0MjE1LDM0MjE3LDM0MjE5LDM0MjIwLDM0MjIxLDM0''@;'; put 'put ''MjI1LDM0MjI2LDM0MjI3LDM0MjI4LDM0MjI5LDM0MjMwLDM0MjMyLDM0MjM0LDM0MjM1LDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQwLDM0MjQyLDM0MjQzLDM0MjQ0LDM0MjQ1LDM0MjQ2LDM0MjQ3LDM0MjQ4LDM0MjUwLDM0MjUxLDM0MjUyLDM0MjUzLDM0MjU0LDM0MjU3LDM0MjU4''@;'; put 'put ''LDM0MjYwLDM0MjYyLDM0MjYzLDM0MjY0LDM0MjY1LDM0MjY2LDM0MjY3LDM0MjY5LDM0MjcwLDM0MjcxLDM0MjcyLDM0MjczLDM0Mjc0LDM0Mjc1LDM0Mjc3LDM0Mjc4LDM0Mjc5LDM0MjgwLDM0MjgyLDM0MjgzLDM0Mjg0LDM0Mjg1LDM0Mjg2LDM0Mjg3LDM0Mjg4LDM0Mjg5LDM0MjkwLDM0''@;'; put 'put ''MjkxLDM0MjkyLDM0MjkzLDM0Mjk0LDM0Mjk1LDM0Mjk2LDI0NjYxLDIxMDQ3LDMyNzgxLDI1Njg0LDM0OTI4LDI5OTkzLDI0MDY5LDI2NjQzLDI1MzMyLDM4Njg0LDIxNDUyLDI5MjQ1LDM1ODQxLDI3NzAwLDMwNTYxLDMxMjQ2LDIxNTUwLDMwNjM2LDM5MDM0LDMzMzA4LDM1ODI4LDMwODA1''@;'; put 'put ''LDI2Mzg4LDI4ODY1LDI2MDMxLDI1NzQ5LDIyMDcwLDI0NjA1LDMxMTY5LDIxNDk2LDE5OTk3LDI3NTE1LDMyOTAyLDIzNTQ2LDIxOTg3LDIyMjM1LDIwMjgyLDIwMjg0LDM5MjgyLDI0MDUxLDI2NDk0LDMyODI0LDI0NTc4LDM5MDQyLDM2ODY1LDIzNDM1LDM1NzcyLDM1ODI5LDI1NjI4LDMz''@;'; put 'put ''MzY4LDI1ODIyLDIyMDEzLDMzNDg3LDM3MjIxLDIwNDM5LDMyMDMyLDM2ODk1LDMxOTAzLDIwNzIzLDIyNjA5LDI4MzM1LDIzNDg3LDM1Nzg1LDMyODk5LDM3MjQwLDMzOTQ4LDMxNjM5LDM0NDI5LDM4NTM5LDM4NTQzLDMyNDg1LDM5NjM1LDMwODYyLDIzNjgxLDMxMzE5LDM2OTMwLDM4NTY3''@;'; put 'put ''LDMxMDcxLDIzMzg1LDI1NDM5LDMxNDk5LDM0MDAxLDI2Nzk3LDIxNzY2LDMyNTUzLDI5NzEyLDMyMDM0LDM4MTQ1LDI1MTUyLDIyNjA0LDIwMTgyLDIzNDI3LDIyOTA1LDIyNjEyLDM0Mjk3LDM0Mjk4LDM0MzAwLDM0MzAxLDM0MzAyLDM0MzA0LDM0MzA1LDM0MzA2LDM0MzA3LDM0MzA4LDM0''@;'; put 'put ''MzEwLDM0MzExLDM0MzEyLDM0MzEzLDM0MzE0LDM0MzE1LDM0MzE2LDM0MzE3LDM0MzE4LDM0MzE5LDM0MzIwLDM0MzIyLDM0MzIzLDM0MzI0LDM0MzI1LDM0MzI3LDM0MzI4LDM0MzI5LDM0MzMwLDM0MzMxLDM0MzMyLDM0MzMzLDM0MzM0LDM0MzM1LDM0MzM2LDM0MzM3LDM0MzM4LDM0MzM5''@;'; put 'put ''LDM0MzQwLDM0MzQxLDM0MzQyLDM0MzQ0LDM0MzQ2LDM0MzQ3LDM0MzQ4LDM0MzQ5LDM0MzUwLDM0MzUxLDM0MzUyLDM0MzUzLDM0MzU0LDM0MzU1LDM0MzU2LDM0MzU3LDM0MzU4LDM0MzU5LDM0MzYxLDM0MzYyLDM0MzYzLDM0MzY1LDM0MzY2LDM0MzY3LDM0MzY4LDM0MzY5LDM0MzcwLDM0''@;'; put 'put ''MzcxLDM0MzcyLDM0MzczLDM0Mzc0LDM0Mzc1LDM0Mzc2LDM0Mzc3LDM0Mzc4LDM0Mzc5LDM0MzgwLDM0Mzg2LDM0Mzg3LDM0Mzg5LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk1LDM0Mzk2LDM0Mzk3LDM0Mzk5LDM0NDAwLDM0NDAxLDM0NDAzLDM0NDA0LDM0NDA1LDM0NDA2LDM0NDA3''@;'; put 'put ''LDM0NDA4LDM0NDA5LDM0NDEwLDI5NTQ5LDI1Mzc0LDM2NDI3LDM2MzY3LDMyOTc0LDMzNDkyLDI1MjYwLDIxNDg4LDI3ODg4LDM3MjE0LDIyODI2LDI0NTc3LDI3NzYwLDIyMzQ5LDI1Njc0LDM2MTM4LDMwMjUxLDI4MzkzLDIyMzYzLDI3MjY0LDMwMTkyLDI4NTI1LDM1ODg1LDM1ODQ4LDIy''@;'; put 'put ''Mzc0LDI3NjMxLDM0OTYyLDMwODk5LDI1NTA2LDIxNDk3LDI4ODQ1LDI3NzQ4LDIyNjE2LDI1NjQyLDIyNTMwLDI2ODQ4LDMzMTc5LDIxNzc2LDMxOTU4LDIwNTA0LDM2NTM4LDI4MTA4LDM2MjU1LDI4OTA3LDI1NDg3LDI4MDU5LDI4MzcyLDMyNDg2LDMzNzk2LDI2NjkxLDM2ODY3LDI4MTIw''@;'; put 'put ''LDM4NTE4LDM1NzUyLDIyODcxLDI5MzA1LDM0Mjc2LDMzMTUwLDMwMTQwLDM1NDY2LDI2Nzk5LDIxMDc2LDM2Mzg2LDM4MTYxLDI1NTUyLDM5MDY0LDM2NDIwLDIxODg0LDIwMzA3LDI2MzY3LDIyMTU5LDI0Nzg5LDI4MDUzLDIxMDU5LDIzNjI1LDIyODI1LDI4MTU1LDIyNjM1LDNlNCwyOTk4''@;'; put 'put ''MCwyNDY4NCwzMzMwMCwzMzA5NCwyNTM2MSwyNjQ2NSwzNjgzNCwzMDUyMiwzNjMzOSwzNjE0OCwzODA4MSwyNDA4NiwyMTM4MSwyMTU0OCwyODg2NywzNDQxMywzNDQxNSwzNDQxNiwzNDQxOCwzNDQxOSwzNDQyMCwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNCwzNDQzNSwzNDQzNiwzNDQzNywz''@;'; put 'put ''NDQzOCwzNDQzOSwzNDQ0MCwzNDQ0MSwzNDQ0NiwzNDQ0NywzNDQ0OCwzNDQ0OSwzNDQ1MCwzNDQ1MiwzNDQ1NCwzNDQ1NSwzNDQ1NiwzNDQ1NywzNDQ1OCwzNDQ1OSwzNDQ2MiwzNDQ2MywzNDQ2NCwzNDQ2NSwzNDQ2NiwzNDQ2OSwzNDQ3MCwzNDQ3NSwzNDQ3NywzNDQ3OCwzNDQ4MiwzNDQ4''@;'; put 'put ''MywzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5MSwzNDQ5MiwzNDQ5MywzNDQ5NCwzNDQ5NSwzNDQ5NywzNDQ5OCwzNDQ5OSwzNDUwMSwzNDUwNCwzNDUwOCwzNDUwOSwzNDUxNCwzNDUxNSwzNDUxNywzNDUxOCwzNDUxOSwzNDUyMiwzNDUyNCwzNDUyNSwzNDUyOCwzNDUyOSwzNDUzMCwzNDUzMSwz''@;'; put 'put ''NDUzMywzNDUzNCwzNDUzNSwzNDUzNiwzNDUzOCwzNDUzOSwzNDU0MCwzNDU0MywzNDU0OSwzNDU1MCwzNDU1MSwzNDU1NCwzNDU1NSwzNDU1NiwzNDU1NywzNDU1OSwzNDU2MSwzNDU2NCwzNDU2NSwzNDU2NiwzNDU3MSwzNDU3MiwzNDU3NCwzNDU3NSwzNDU3NiwzNDU3NywzNDU4MCwzNDU4''@;'; put 'put ''MiwyNzcxMiwyNDMxMSwyMDU3MiwyMDE0MSwyNDIzNywyNTQwMiwzMzM1MSwzNjg5MCwyNjcwNCwzNzIzMCwzMDY0MywyMTUxNiwzODEwOCwyNDQyMCwzMTQ2MSwyNjc0MiwyNTQxMywzMTU3MCwzMjQ3OSwzMDE3MSwyMDU5OSwyNTIzNywyMjgzNiwzNjg3OSwyMDk4NCwzMTE3MSwzMTM2MSwy''@;'; put 'put ''MjI3MCwyNDQ2NiwzNjg4NCwyODAzNCwyMzY0OCwyMjMwMywyMTUyMCwyMDgyMCwyODIzNywyMjI0MiwyNTUxMiwzOTA1OSwzMzE1MSwzNDU4MSwzNTExNCwzNjg2NCwyMTUzNCwyMzY2MywzMzIxNiwyNTMwMiwyNTE3NiwzMzA3Myw0MDUwMSwzODQ2NCwzOTUzNCwzOTU0OCwyNjkyNSwyMjk0''@;'; put 'put ''OSwyNTI5OSwyMTgyMiwyNTM2NiwyMTcwMywzNDUyMSwyNzk2NCwyMzA0MywyOTkyNiwzNDk3MiwyNzQ5OCwyMjgwNiwzNTkxNiwyNDM2NywyODI4NiwyOTYwOSwzOTAzNywyMDAyNCwyODkxOSwyMzQzNiwzMDg3MSwyNTQwNSwyNjIwMiwzMDM1OCwyNDc3OSwyMzQ1MSwyMzExMywxOTk3NSwz''@;'; put 'put ''MzEwOSwyNzc1NCwyOTU3OSwyMDEyOSwyNjUwNSwzMjU5MywyNDQ0OCwyNjEwNiwyNjM5NSwyNDUzNiwyMjkxNiwyMzA0MSwzNDU4NSwzNDU4NywzNDU4OSwzNDU5MSwzNDU5MiwzNDU5NiwzNDU5OCwzNDU5OSwzNDYwMCwzNDYwMiwzNDYwMywzNDYwNCwzNDYwNSwzNDYwNywzNDYwOCwzNDYx''@;'; put 'put ''MCwzNDYxMSwzNDYxMywzNDYxNCwzNDYxNiwzNDYxNywzNDYxOCwzNDYyMCwzNDYyMSwzNDYyNCwzNDYyNSwzNDYyNiwzNDYyNywzNDYyOCwzNDYyOSwzNDYzMCwzNDYzNCwzNDYzNSwzNDYzNywzNDYzOSwzNDY0MCwzNDY0MSwzNDY0MiwzNDY0NCwzNDY0NSwzNDY0NiwzNDY0OCwzNDY1MCwz''@;'; put 'put ''NDY1MSwzNDY1MiwzNDY1MywzNDY1NCwzNDY1NSwzNDY1NywzNDY1OCwzNDY2MiwzNDY2MywzNDY2NCwzNDY2NSwzNDY2NiwzNDY2NywzNDY2OCwzNDY2OSwzNDY3MSwzNDY3MywzNDY3NCwzNDY3NSwzNDY3NywzNDY3OSwzNDY4MCwzNDY4MSwzNDY4MiwzNDY4NywzNDY4OCwzNDY4OSwzNDY5''@;'; put 'put ''MiwzNDY5NCwzNDY5NSwzNDY5NywzNDY5OCwzNDcwMCwzNDcwMiwzNDcwMywzNDcwNCwzNDcwNSwzNDcwNiwzNDcwOCwzNDcwOSwzNDcxMCwzNDcxMiwzNDcxMywzNDcxNCwzNDcxNSwzNDcxNiwzNDcxNywzNDcxOCwzNDcyMCwzNDcyMSwzNDcyMiwzNDcyMywzNDcyNCwyNDAxMywyNDQ5NCwy''@;'; put 'put ''MTM2MSwzODg4NiwzNjgyOSwyNjY5MywyMjI2MCwyMTgwNywyNDc5OSwyMDAyNiwyODQ5MywzMjUwMCwzMzQ3OSwzMzgwNiwyMjk5NiwyMDI1NSwyMDI2NiwyMzYxNCwzMjQyOCwyNjQxMCwzNDA3NCwyMTYxOSwzMDAzMSwzMjk2MywyMTg5MCwzOTc1OSwyMDMwMSwyODIwNSwzNTg1OSwyMzU2''@;'; put 'put ''MSwyNDk0NCwyMTM1NSwzMDIzOSwyODIwMSwzNDQ0MiwyNTk5MSwzODM5NSwzMjQ0MSwyMTU2MywzMTI4MywzMjAxMCwzODM4MiwyMTk4NSwzMjcwNSwyOTkzNCwyNTM3MywzNDU4MywyODA2NSwzMTM4OSwyNTEwNSwyNjAxNywyMTM1MSwyNTU2OSwyNzc3OSwyNDA0MywyMTU5NiwzODA1Niwy''@;'; put 'put ''MDA0NCwyNzc0NSwzNTgyMCwyMzYyNywyNjA4MCwzMzQzNiwyNjc5MSwyMTU2NiwyMTU1NiwyNzU5NSwyNzQ5NCwyMDExNiwyNTQxMCwyMTMyMCwzMzMxMCwyMDIzNywyMDM5OCwyMjM2NiwyNTA5OCwzODY1NCwyNjIxMiwyOTI4OSwyMTI0NywyMTE1MywyNDczNSwzNTgyMywyNjEzMiwyOTA4''@;'; put 'put ''MSwyNjUxMiwzNTE5OSwzMDgwMiwzMDcxNywyNjIyNCwyMjA3NSwyMTU2MCwzODE3NywyOTMwNiwzNDcyNSwzNDcyNiwzNDcyNywzNDcyOSwzNDczMCwzNDczNCwzNDczNiwzNDczNywzNDczOCwzNDc0MCwzNDc0MiwzNDc0MywzNDc0NCwzNDc0NSwzNDc0NywzNDc0OCwzNDc1MCwzNDc1MSwz''@;'; put 'put ''NDc1MywzNDc1NCwzNDc1NSwzNDc1NiwzNDc1NywzNDc1OSwzNDc2MCwzNDc2MSwzNDc2NCwzNDc2NSwzNDc2NiwzNDc2NywzNDc2OCwzNDc3MiwzNDc3MywzNDc3NCwzNDc3NSwzNDc3NiwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MSwzNDc4MiwzNDc4MywzNDc4NSwzNDc4NiwzNDc4NywzNDc4''@;'; put 'put ''OCwzNDc5MCwzNDc5MSwzNDc5MiwzNDc5MywzNDc5NSwzNDc5NiwzNDc5NywzNDc5OSwzNDgwMCwzNDgwMSwzNDgwMiwzNDgwMywzNDgwNCwzNDgwNSwzNDgwNiwzNDgwNywzNDgwOCwzNDgxMCwzNDgxMSwzNDgxMiwzNDgxMywzNDgxNSwzNDgxNiwzNDgxNywzNDgxOCwzNDgyMCwzNDgyMSwz''@;'; put 'put ''NDgyMiwzNDgyMywzNDgyNCwzNDgyNSwzNDgyNywzNDgyOCwzNDgyOSwzNDgzMCwzNDgzMSwzNDgzMiwzNDgzMywzNDgzNCwzNDgzNiwzNDgzOSwzNDg0MCwzNDg0MSwzNDg0MiwzNDg0NCwzNDg0NSwzNDg0NiwzNDg0NywzNDg0OCwzNDg1MSwzMTIzMiwyNDY4NywyNDA3NiwyNDcxMywzMzE4''@;'; put 'put ''MSwyMjgwNSwyNDc5NiwyOTA2MCwyODkxMSwyODMzMCwyNzcyOCwyOTMxMiwyNzI2OCwzNDk4OSwyNDEwOSwyMDA2NCwyMzIxOSwyMTkxNiwzODExNSwyNzkyNywzMTk5NSwzODU1MywyNTEwMywzMjQ1NCwzMDYwNiwzNDQzMCwyMTI4MywzODY4NiwzNjc1OCwyNjI0NywyMzc3NywyMDM4NCwy''@;'; put 'put ''OTQyMSwxOTk3OSwyMTQxNCwyMjc5OSwyMTUyMywyNTQ3MiwzODE4NCwyMDgwOCwyMDE4NSw0MDA5MiwzMjQyMCwyMTY4OCwzNjEzMiwzNDkwMCwzMzMzNSwzODM4NiwyODA0NiwyNDM1OCwyMzI0NCwyNjE3NCwzODUwNSwyOTYxNiwyOTQ4NiwyMTQzOSwzMzE0NiwzOTMwMSwzMjY3MywyMzQ2''@;'; put 'put ''NiwzODUxOSwzODQ4MCwzMjQ0NywzMDQ1NiwyMTQxMCwzODI2MiwzOTMyMSwzMTY2NSwzNTE0MCwyODI0OCwyMDA2NSwzMjcyNCwzMTA3NywzNTgxNCwyNDgxOSwyMTcwOSwyMDEzOSwzOTAzMywyNDA1NSwyNzIzMywyMDY4NywyMTUyMSwzNTkzNywzMzgzMSwzMDgxMywzODY2MCwyMTA2Niwy''@;'; put 'put ''MTc0MiwyMjE3OSwzODE0NCwyODA0MCwyMzQ3NywyODEwMiwyNjE5NSwzNDg1MiwzNDg1MywzNDg1NCwzNDg1NSwzNDg1NiwzNDg1NywzNDg1OCwzNDg1OSwzNDg2MCwzNDg2MSwzNDg2MiwzNDg2MywzNDg2NCwzNDg2NSwzNDg2NywzNDg2OCwzNDg2OSwzNDg3MCwzNDg3MSwzNDg3MiwzNDg3''@;'; put 'put ''NCwzNDg3NSwzNDg3NywzNDg3OCwzNDg3OSwzNDg4MSwzNDg4MiwzNDg4MywzNDg4NiwzNDg4NywzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5NCwzNDg5NSwzNDg5NiwzNDg5NywzNDg5OCwzNDg5OSwzNDkwMSwzNDkwMiwzNDkwNCwzNDkwNiwzNDkwNywzNDkwOCwzNDkwOSwzNDkxMCwz''@;'; put 'put ''NDkxMSwzNDkxMiwzNDkxOCwzNDkxOSwzNDkyMiwzNDkyNSwzNDkyNywzNDkyOSwzNDkzMSwzNDkzMiwzNDkzMywzNDkzNCwzNDkzNiwzNDkzNywzNDkzOCwzNDkzOSwzNDk0MCwzNDk0NCwzNDk0NywzNDk1MCwzNDk1MSwzNDk1MywzNDk1NCwzNDk1NiwzNDk1OCwzNDk1OSwzNDk2MCwzNDk2''@;'; put 'put ''MSwzNDk2MywzNDk2NCwzNDk2NSwzNDk2NywzNDk2OCwzNDk2OSwzNDk3MCwzNDk3MSwzNDk3MywzNDk3NCwzNDk3NSwzNDk3NiwzNDk3NywzNDk3OSwzNDk4MSwzNDk4MiwzNDk4MywzNDk4NCwzNDk4NSwzNDk4NiwyMzU2NywyMzM4OSwyNjY1NywzMjkxOCwyMTg4MCwzMTUwNSwyNTkyOCwy''@;'; put 'put ''Njk2NCwyMDEyMywyNzQ2MywzNDYzOCwzODc5NSwyMTMyNywyNTM3NSwyNTY1OCwzNzAzNCwyNjAxMiwzMjk2MSwzNTg1NiwyMDg4OSwyNjgwMCwyMTM2OCwzNDgwOSwyNTAzMiwyNzg0NCwyNzg5OSwzNTg3NCwyMzYzMywzNDIxOCwzMzQ1NSwzODE1NiwyNzQyNywzNjc2MywyNjAzMiwyNDU3''@;'; put 'put ''MSwyNDUxNSwyMDQ0OSwzNDg4NSwyNjE0MywzMzEyNSwyOTQ4MSwyNDgyNiwyMDg1MiwyMTAwOSwyMjQxMSwyNDQxOCwzNzAyNiwzNDg5MiwzNzI2NiwyNDE4NCwyNjQ0NywyNDYxNSwyMjk5NSwyMDgwNCwyMDk4MiwzMzAxNiwyMTI1NiwyNzc2OSwzODU5NiwyOTA2NiwyMDI0MSwyMDQ2Miwz''@;'; put 'put ''MjY3MCwyNjQyOSwyMTk1NywzODE1MiwzMTE2OCwzNDk2NiwzMjQ4MywyMjY4NywyNTEwMCwzODY1NiwzNDM5NCwyMjA0MCwzOTAzNSwyNDQ2NCwzNTc2OCwzMzk4OCwzNzIwNywyMTQ2NSwyNjA5MywyNDIwNywzMDA0NCwyNDY3NiwzMjExMCwyMzE2NywzMjQ5MCwzMjQ5MywzNjcxMywyMTky''@;'; put 'put ''NywyMzQ1OSwyNDc0OCwyNjA1OSwyOTU3MiwzNDk4OCwzNDk5MCwzNDk5MSwzNDk5MiwzNDk5NCwzNDk5NSwzNDk5NiwzNDk5NywzNDk5OCwzNWUzLDM1MDAxLDM1MDAyLDM1MDAzLDM1MDA1LDM1MDA2LDM1MDA3LDM1MDA4LDM1MDExLDM1MDEyLDM1MDE1LDM1MDE2LDM1MDE4LDM1MDE5LDM1''@;'; put 'put ''MDIwLDM1MDIxLDM1MDIzLDM1MDI0LDM1MDI1LDM1MDI3LDM1MDMwLDM1MDMxLDM1MDM0LDM1MDM1LDM1MDM2LDM1MDM3LDM1MDM4LDM1MDQwLDM1MDQxLDM1MDQ2LDM1MDQ3LDM1MDQ5LDM1MDUwLDM1MDUxLDM1MDUyLDM1MDUzLDM1MDU0LDM1MDU1LDM1MDU4LDM1MDYxLDM1MDYyLDM1MDYz''@;'; put 'put ''LDM1MDY2LDM1MDY3LDM1MDY5LDM1MDcxLDM1MDcyLDM1MDczLDM1MDc1LDM1MDc2LDM1MDc3LDM1MDc4LDM1MDc5LDM1MDgwLDM1MDgxLDM1MDgzLDM1MDg0LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDg5LDM1MDkyLDM1MDkzLDM1MDk0LDM1MDk1LDM1MDk2LDM1MTAwLDM1MTAxLDM1MTAyLDM1''@;'; put 'put ''MTAzLDM1MTA0LDM1MTA2LDM1MTA3LDM1MTA4LDM1MTEwLDM1MTExLDM1MTEyLDM1MTEzLDM1MTE2LDM1MTE3LDM1MTE4LDM1MTE5LDM1MTIxLDM1MTIyLDM1MTIzLDM1MTI1LDM1MTI3LDM2ODczLDMwMzA3LDMwNTA1LDMyNDc0LDM4NzcyLDM0MjAzLDIzMzk4LDMxMzQ4LDM4NjM0LDM0ODgw''@;'; put 'put ''LDIxMTk1LDI5MDcxLDI0NDkwLDI2MDkyLDM1ODEwLDIzNTQ3LDM5NTM1LDI0MDMzLDI3NTI5LDI3NzM5LDM1NzU3LDM1NzU5LDM2ODc0LDM2ODA1LDIxMzg3LDI1Mjc2LDQwNDg2LDQwNDkzLDIxNTY4LDIwMDExLDMzNDY5LDI5MjczLDM0NDYwLDIzODMwLDM0OTA1LDI4MDc5LDM4NTk3LDIx''@;'; put 'put ''NzEzLDIwMTIyLDM1NzY2LDI4OTM3LDIxNjkzLDM4NDA5LDI4ODk1LDI4MTUzLDMwNDE2LDIwMDA1LDMwNzQwLDM0NTc4LDIzNzIxLDI0MzEwLDM1MzI4LDM5MDY4LDM4NDE0LDI4ODE0LDI3ODM5LDIyODUyLDI1NTEzLDMwNTI0LDM0ODkzLDI4NDM2LDMzMzk1LDIyNTc2LDI5MTQxLDIxMzg4''@;'; put 'put ''LDMwNzQ2LDM4NTkzLDIxNzYxLDI0NDIyLDI4OTc2LDIzNDc2LDM1ODY2LDM5NTY0LDI3NTIzLDIyODMwLDQwNDk1LDMxMjA3LDI2NDcyLDI1MTk2LDIwMzM1LDMwMTEzLDMyNjUwLDI3OTE1LDM4NDUxLDI3Njg3LDIwMjA4LDMwMTYyLDIwODU5LDI2Njc5LDI4NDc4LDM2OTkyLDMzMTM2LDIy''@;'; put 'put ''OTM0LDI5ODE0LDM1MTI4LDM1MTI5LDM1MTMwLDM1MTMxLDM1MTMyLDM1MTMzLDM1MTM0LDM1MTM1LDM1MTM2LDM1MTM4LDM1MTM5LDM1MTQxLDM1MTQyLDM1MTQzLDM1MTQ0LDM1MTQ1LDM1MTQ2LDM1MTQ3LDM1MTQ4LDM1MTQ5LDM1MTUwLDM1MTUxLDM1MTUyLDM1MTUzLDM1MTU0LDM1MTU1''@;'; put 'put ''LDM1MTU2LDM1MTU3LDM1MTU4LDM1MTU5LDM1MTYwLDM1MTYxLDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY1LDM1MTY4LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTcyLDM1MTczLDM1MTc1LDM1MTc2LDM1MTc3LDM1MTc4LDM1MTc5LDM1MTgwLDM1MTgxLDM1MTgyLDM1MTgzLDM1MTg0LDM1MTg1LDM1''@;'; put 'put ''MTg2LDM1MTg3LDM1MTg4LDM1MTg5LDM1MTkwLDM1MTkxLDM1MTkyLDM1MTkzLDM1MTk0LDM1MTk2LDM1MTk3LDM1MTk4LDM1MjAwLDM1MjAyLDM1MjA0LDM1MjA1LDM1MjA3LDM1MjA4LDM1MjA5LDM1MjEwLDM1MjExLDM1MjEyLDM1MjEzLDM1MjE0LDM1MjE1LDM1MjE2LDM1MjE3LDM1MjE4''@;'; put 'put ''LDM1MjE5LDM1MjIwLDM1MjIxLDM1MjIyLDM1MjIzLDM1MjI0LDM1MjI1LDM1MjI2LDM1MjI3LDM1MjI4LDM1MjI5LDM1MjMwLDM1MjMxLDM1MjMyLDM1MjMzLDI1NjcxLDIzNTkxLDM2OTY1LDMxMzc3LDM1ODc1LDIzMDAyLDIxNjc2LDMzMjgwLDMzNjQ3LDM1MjAxLDMyNzY4LDI2OTI4LDIy''@;'; put 'put ''MDk0LDMyODIyLDI5MjM5LDM3MzI2LDIwOTE4LDIwMDYzLDM5MDI5LDI1NDk0LDE5OTk0LDIxNDk0LDI2MzU1LDMzMDk5LDIyODEyLDI4MDgyLDE5OTY4LDIyNzc3LDIxMzA3LDI1NTU4LDM4MTI5LDIwMzgxLDIwMjM0LDM0OTE1LDM5MDU2LDIyODM5LDM2OTUxLDMxMjI3LDIwMjAyLDMzMDA4''@;'; put 'put ''LDMwMDk3LDI3Nzc4LDIzNDUyLDIzMDE2LDI0NDEzLDI2ODg1LDM0NDMzLDIwNTA2LDI0MDUwLDIwMDU3LDMwNjkxLDIwMTk3LDMzNDAyLDI1MjMzLDI2MTMxLDM3MDA5LDIzNjczLDIwMTU5LDI0NDQxLDMzMjIyLDM2OTIwLDMyOTAwLDMwMTIzLDIwMTM0LDM1MDI4LDI0ODQ3LDI3NTg5LDI0''@;'; put 'put ''NTE4LDIwMDQxLDMwNDEwLDI4MzIyLDM1ODExLDM1NzU4LDM1ODUwLDM1NzkzLDI0MzIyLDMyNzY0LDMyNzE2LDMyNDYyLDMzNTg5LDMzNjQzLDIyMjQwLDI3NTc1LDM4ODk5LDM4NDUyLDIzMDM1LDIxNTM1LDM4MTM0LDI4MTM5LDIzNDkzLDM5Mjc4LDIzNjA5LDI0MzQxLDM4NTQ0LDM1MjM0''@;'; put 'put ''LDM1MjM1LDM1MjM2LDM1MjM3LDM1MjM4LDM1MjM5LDM1MjQwLDM1MjQxLDM1MjQyLDM1MjQzLDM1MjQ0LDM1MjQ1LDM1MjQ2LDM1MjQ3LDM1MjQ4LDM1MjQ5LDM1MjUwLDM1MjUxLDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjU2LDM1MjU3LDM1MjU4LDM1MjU5LDM1MjYwLDM1MjYxLDM1''@;'; put 'put ''MjYyLDM1MjYzLDM1MjY0LDM1MjY3LDM1Mjc3LDM1MjgzLDM1Mjg0LDM1Mjg1LDM1Mjg3LDM1Mjg4LDM1Mjg5LDM1MjkxLDM1MjkzLDM1Mjk1LDM1Mjk2LDM1Mjk3LDM1Mjk4LDM1MzAwLDM1MzAzLDM1MzA0LDM1MzA1LDM1MzA2LDM1MzA4LDM1MzA5LDM1MzEwLDM1MzEyLDM1MzEzLDM1MzE0''@;'; put 'put ''LDM1MzE2LDM1MzE3LDM1MzE4LDM1MzE5LDM1MzIwLDM1MzIxLDM1MzIyLDM1MzIzLDM1MzI0LDM1MzI1LDM1MzI2LDM1MzI3LDM1MzI5LDM1MzMwLDM1MzMxLDM1MzMyLDM1MzMzLDM1MzM0LDM1MzM2LDM1MzM3LDM1MzM4LDM1MzM5LDM1MzQwLDM1MzQxLDM1MzQyLDM1MzQzLDM1MzQ0LDM1''@;'; put 'put ''MzQ1LDM1MzQ2LDM1MzQ3LDM1MzQ4LDM1MzQ5LDM1MzUwLDM1MzUxLDM1MzUyLDM1MzUzLDM1MzU0LDM1MzU1LDM1MzU2LDM1MzU3LDIxMzYwLDMzNTIxLDI3MTg1LDIzMTU2LDQwNTYwLDI0MjEyLDMyNTUyLDMzNzIxLDMzODI4LDMzODI5LDMzNjM5LDM0NjMxLDM2ODE0LDM2MTk0LDMwNDA4''@;'; put 'put ''LDI0NDMzLDM5MDYyLDMwODI4LDI2MTQ0LDIxNzI3LDI1MzE3LDIwMzIzLDMzMjE5LDMwMTUyLDI0MjQ4LDM4NjA1LDM2MzYyLDM0NTUzLDIxNjQ3LDI3ODkxLDI4MDQ0LDI3NzA0LDI0NzAzLDIxMTkxLDI5OTkyLDI0MTg5LDIwMjQ4LDI0NzM2LDI0NTUxLDIzNTg4LDMwMDAxLDM3MDM4LDM4''@;'; put 'put ''MDgwLDI5MzY5LDI3ODMzLDI4MjE2LDM3MTkzLDI2Mzc3LDIxNDUxLDIxNDkxLDIwMzA1LDM3MzIxLDM1ODI1LDIxNDQ4LDI0MTg4LDM2ODAyLDI4MTMyLDIwMTEwLDMwNDAyLDI3MDE0LDM0Mzk4LDI0ODU4LDMzMjg2LDIwMzEzLDIwNDQ2LDM2OTI2LDQwMDYwLDI0ODQxLDI4MTg5LDI4MTgw''@;'; put 'put ''LDM4NTMzLDIwMTA0LDIzMDg5LDM4NjMyLDE5OTgyLDIzNjc5LDMxMTYxLDIzNDMxLDM1ODIxLDMyNzAxLDI5NTc3LDIyNDk1LDMzNDE5LDM3MDU3LDIxNTA1LDM2OTM1LDIxOTQ3LDIzNzg2LDI0NDgxLDI0ODQwLDI3NDQyLDI5NDI1LDMyOTQ2LDM1NDY1LDM1MzU4LDM1MzU5LDM1MzYwLDM1''@;'; put 'put ''MzYxLDM1MzYyLDM1MzYzLDM1MzY0LDM1MzY1LDM1MzY2LDM1MzY3LDM1MzY4LDM1MzY5LDM1MzcwLDM1MzcxLDM1MzcyLDM1MzczLDM1Mzc0LDM1Mzc1LDM1Mzc2LDM1Mzc3LDM1Mzc4LDM1Mzc5LDM1MzgwLDM1MzgxLDM1MzgyLDM1MzgzLDM1Mzg0LDM1Mzg1LDM1Mzg2LDM1Mzg3LDM1Mzg4''@;'; put 'put ''LDM1Mzg5LDM1MzkxLDM1MzkyLDM1MzkzLDM1Mzk0LDM1Mzk1LDM1Mzk2LDM1Mzk3LDM1Mzk4LDM1Mzk5LDM1NDAxLDM1NDAyLDM1NDAzLDM1NDA0LDM1NDA1LDM1NDA2LDM1NDA3LDM1NDA4LDM1NDA5LDM1NDEwLDM1NDExLDM1NDEyLDM1NDEzLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDE3LDM1''@;'; put 'put ''NDE4LDM1NDE5LDM1NDIwLDM1NDIxLDM1NDIyLDM1NDIzLDM1NDI0LDM1NDI1LDM1NDI2LDM1NDI3LDM1NDI4LDM1NDI5LDM1NDMwLDM1NDMxLDM1NDMyLDM1NDMzLDM1NDM0LDM1NDM1LDM1NDM2LDM1NDM3LDM1NDM4LDM1NDM5LDM1NDQwLDM1NDQxLDM1NDQyLDM1NDQzLDM1NDQ0LDM1NDQ1''@;'; put 'put ''LDM1NDQ2LDM1NDQ3LDM1NDQ4LDM1NDUwLDM1NDUxLDM1NDUyLDM1NDUzLDM1NDU0LDM1NDU1LDM1NDU2LDI4MDIwLDIzNTA3LDM1MDI5LDM5MDQ0LDM1OTQ3LDM5NTMzLDQwNDk5LDI4MTcwLDIwOTAwLDIwODAzLDIyNDM1LDM0OTQ1LDIxNDA3LDI1NTg4LDM2NzU3LDIyMjUzLDIxNTkyLDIy''@;'; put 'put ''Mjc4LDI5NTAzLDI4MzA0LDMyNTM2LDM2ODI4LDMzNDg5LDI0ODk1LDI0NjE2LDM4NDk4LDI2MzUyLDMyNDIyLDM2MjM0LDM2MjkxLDM4MDUzLDIzNzMxLDMxOTA4LDI2Mzc2LDI0NzQyLDM4NDA1LDMyNzkyLDIwMTEzLDM3MDk1LDIxMjQ4LDM4NTA0LDIwODAxLDM2ODE2LDM0MTY0LDM3MjEz''@;'; put 'put ''LDI2MTk3LDM4OTAxLDIzMzgxLDIxMjc3LDMwNzc2LDI2NDM0LDI2Njg1LDIxNzA1LDI4Nzk4LDIzNDcyLDM2NzMzLDIwODc3LDIyMzEyLDIxNjgxLDI1ODc0LDI2MjQyLDM2MTkwLDM2MTYzLDMzMDM5LDMzOTAwLDM2OTczLDMxOTY3LDIwOTkxLDM0Mjk5LDI2NTMxLDI2MDg5LDI4NTc3LDM0''@;'; put 'put ''NDY4LDM2NDgxLDIyMTIyLDM2ODk2LDMwMzM4LDI4NzkwLDI5MTU3LDM2MTMxLDI1MzIxLDIxMDE3LDI3OTAxLDM2MTU2LDI0NTkwLDIyNjg2LDI0OTc0LDI2MzY2LDM2MTkyLDI1MTY2LDIxOTM5LDI4MTk1LDI2NDEzLDM2NzExLDM1NDU3LDM1NDU4LDM1NDU5LDM1NDYwLDM1NDYxLDM1NDYy''@;'; put 'put ''LDM1NDYzLDM1NDY0LDM1NDY3LDM1NDY4LDM1NDY5LDM1NDcwLDM1NDcxLDM1NDcyLDM1NDczLDM1NDc0LDM1NDc2LDM1NDc3LDM1NDc4LDM1NDc5LDM1NDgwLDM1NDgxLDM1NDgyLDM1NDgzLDM1NDg0LDM1NDg1LDM1NDg2LDM1NDg3LDM1NDg4LDM1NDg5LDM1NDkwLDM1NDkxLDM1NDkyLDM1''@;'; put 'put ''NDkzLDM1NDk0LDM1NDk1LDM1NDk2LDM1NDk3LDM1NDk4LDM1NDk5LDM1NTAwLDM1NTAxLDM1NTAyLDM1NTAzLDM1NTA0LDM1NTA1LDM1NTA2LDM1NTA3LDM1NTA4LDM1NTA5LDM1NTEwLDM1NTExLDM1NTEyLDM1NTEzLDM1NTE0LDM1NTE1LDM1NTE2LDM1NTE3LDM1NTE4LDM1NTE5LDM1NTIw''@;'; put 'put ''LDM1NTIxLDM1NTIyLDM1NTIzLDM1NTI0LDM1NTI1LDM1NTI2LDM1NTI3LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTMxLDM1NTMyLDM1NTMzLDM1NTM0LDM1NTM1LDM1NTM2LDM1NTM3LDM1NTM4LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQyLDM1NTQzLDM1NTQ0LDM1NTQ1LDM1NTQ2LDM1NTQ3LDM1''@;'; put 'put ''NTQ4LDM1NTQ5LDM1NTUwLDM1NTUxLDM1NTUyLDM1NTUzLDM1NTU0LDM1NTU1LDM4MTEzLDM4MzkyLDMwNTA0LDI2NjI5LDI3MDQ4LDIxNjQzLDIwMDQ1LDI4ODU2LDM1Nzg0LDI1Njg4LDI1OTk1LDIzNDI5LDMxMzY0LDIwNTM4LDIzNTI4LDMwNjUxLDI3NjE3LDM1NDQ5LDMxODk2LDI3ODM4''@;'; put 'put ''LDMwNDE1LDI2MDI1LDM2NzU5LDIzODUzLDIzNjM3LDM0MzYwLDI2NjMyLDIxMzQ0LDI1MTEyLDMxNDQ5LDI4MjUxLDMyNTA5LDI3MTY3LDMxNDU2LDI0NDMyLDI4NDY3LDI0MzUyLDI1NDg0LDI4MDcyLDI2NDU0LDE5OTc2LDI0MDgwLDM2MTM0LDIwMTgzLDMyOTYwLDMwMjYwLDM4NTU2LDI1''@;'; put 'put ''MzA3LDI2MTU3LDI1MjE0LDI3ODM2LDM2MjEzLDI5MDMxLDMyNjE3LDIwODA2LDMyOTAzLDIxNDg0LDM2OTc0LDI1MjQwLDIxNzQ2LDM0NTQ0LDM2NzYxLDMyNzczLDM4MTY3LDM0MDcxLDM2ODI1LDI3OTkzLDI5NjQ1LDI2MDE1LDMwNDk1LDI5OTU2LDMwNzU5LDMzMjc1LDM2MTI2LDM4MDI0''@;'; put 'put ''LDIwMzkwLDI2NTE3LDMwMTM3LDM1Nzg2LDM4NjYzLDI1MzkxLDM4MjE1LDM4NDUzLDMzOTc2LDI1Mzc5LDMwNTI5LDI0NDQ5LDI5NDI0LDIwMTA1LDI0NTk2LDI1OTcyLDI1MzI3LDI3NDkxLDI1OTE5LDM1NTU2LDM1NTU3LDM1NTU4LDM1NTU5LDM1NTYwLDM1NTYxLDM1NTYyLDM1NTYzLDM1''@;'; put 'put ''NTY0LDM1NTY1LDM1NTY2LDM1NTY3LDM1NTY4LDM1NTY5LDM1NTcwLDM1NTcxLDM1NTcyLDM1NTczLDM1NTc0LDM1NTc1LDM1NTc2LDM1NTc3LDM1NTc4LDM1NTc5LDM1NTgwLDM1NTgxLDM1NTgyLDM1NTgzLDM1NTg0LDM1NTg1LDM1NTg2LDM1NTg3LDM1NTg4LDM1NTg5LDM1NTkwLDM1NTky''@;'; put 'put ''LDM1NTkzLDM1NTk0LDM1NTk1LDM1NTk2LDM1NTk3LDM1NTk4LDM1NTk5LDM1NjAwLDM1NjAxLDM1NjAyLDM1NjAzLDM1NjA0LDM1NjA1LDM1NjA2LDM1NjA3LDM1NjA4LDM1NjA5LDM1NjEwLDM1NjExLDM1NjEyLDM1NjEzLDM1NjE0LDM1NjE1LDM1NjE2LDM1NjE3LDM1NjE4LDM1NjE5LDM1''@;'; put 'put ''NjIwLDM1NjIxLDM1NjIzLDM1NjI0LDM1NjI1LDM1NjI2LDM1NjI3LDM1NjI4LDM1NjI5LDM1NjMwLDM1NjMxLDM1NjMyLDM1NjMzLDM1NjM0LDM1NjM1LDM1NjM2LDM1NjM3LDM1NjM4LDM1NjM5LDM1NjQwLDM1NjQxLDM1NjQyLDM1NjQzLDM1NjQ0LDM1NjQ1LDM1NjQ2LDM1NjQ3LDM1NjQ4''@;'; put 'put ''LDM1NjQ5LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDI0MTAzLDMwMTUxLDM3MDczLDM1Nzc3LDMzNDM3LDI2NTI1LDI1OTAzLDIxNTUzLDM0NTg0LDMwNjkzLDMyOTMwLDMzMDI2LDI3NzEzLDIwMDQzLDMyNDU1LDMyODQ0LDMwNDUyLDI2ODkzLDI3NTQyLDI1MTkxLDIwNTQwLDIwMzU2LDIy''@;'; put 'put ''MzM2LDI1MzUxLDI3NDkwLDM2Mjg2LDIxNDgyLDI2MDg4LDMyNDQwLDI0NTM1LDI1MzcwLDI1NTI3LDMzMjY3LDMzMjY4LDMyNjIyLDI0MDkyLDIzNzY5LDIxMDQ2LDI2MjM0LDMxMjA5LDMxMjU4LDM2MTM2LDI4ODI1LDMwMTY0LDI4MzgyLDI3ODM1LDMxMzc4LDIwMDEzLDMwNDA1LDI0NTQ0''@;'; put 'put ''LDM4MDQ3LDM0OTM1LDMyNDU2LDMxMTgxLDMyOTU5LDM3MzI1LDIwMjEwLDIwMjQ3LDMzMzExLDIxNjA4LDI0MDMwLDI3OTU0LDM1Nzg4LDMxOTA5LDM2NzI0LDMyOTIwLDI0MDkwLDIxNjUwLDMwMzg1LDIzNDQ5LDI2MTcyLDM5NTg4LDI5NjY0LDI2NjY2LDM0NTIzLDI2NDE3LDI5NDgyLDM1''@;'; put 'put ''ODMyLDM1ODAzLDM2ODgwLDMxNDgxLDI4ODkxLDI5MDM4LDI1Mjg0LDMwNjMzLDIyMDY1LDIwMDI3LDMzODc5LDI2NjA5LDIxMTYxLDM0NDk2LDM2MTQyLDM4MTM2LDMxNTY5LDM1NjU0LDM1NjU1LDM1NjU2LDM1NjU3LDM1NjU4LDM1NjU5LDM1NjYwLDM1NjYxLDM1NjYyLDM1NjYzLDM1NjY0''@;'; put 'put ''LDM1NjY1LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjY5LDM1NjcwLDM1NjcxLDM1NjcyLDM1NjczLDM1Njc0LDM1Njc1LDM1Njc2LDM1Njc3LDM1Njc4LDM1Njc5LDM1NjgwLDM1NjgxLDM1NjgyLDM1NjgzLDM1Njg0LDM1Njg1LDM1Njg3LDM1Njg4LDM1Njg5LDM1NjkwLDM1NjkxLDM1NjkzLDM1''@;'; put 'put ''Njk0LDM1Njk1LDM1Njk2LDM1Njk3LDM1Njk4LDM1Njk5LDM1NzAwLDM1NzAxLDM1NzAyLDM1NzAzLDM1NzA0LDM1NzA1LDM1NzA2LDM1NzA3LDM1NzA4LDM1NzA5LDM1NzEwLDM1NzExLDM1NzEyLDM1NzEzLDM1NzE0LDM1NzE1LDM1NzE2LDM1NzE3LDM1NzE4LDM1NzE5LDM1NzIwLDM1NzIx''@;'; put 'put ''LDM1NzIyLDM1NzIzLDM1NzI0LDM1NzI1LDM1NzI2LDM1NzI3LDM1NzI4LDM1NzI5LDM1NzMwLDM1NzMxLDM1NzMyLDM1NzMzLDM1NzM0LDM1NzM1LDM1NzM2LDM1NzM3LDM1NzM4LDM1NzM5LDM1NzQwLDM1NzQxLDM1NzQyLDM1NzQzLDM1NzU2LDM1NzYxLDM1NzcxLDM1NzgzLDM1NzkyLDM1''@;'; put 'put ''ODE4LDM1ODQ5LDM1ODcwLDIwMzAzLDI3ODgwLDMxMDY5LDM5NTQ3LDI1MjM1LDI5MjI2LDI1MzQxLDE5OTg3LDMwNzQyLDM2NzE2LDI1Nzc2LDM2MTg2LDMxNjg2LDI2NzI5LDI0MTk2LDM1MDEzLDIyOTE4LDI1NzU4LDIyNzY2LDI5MzY2LDI2ODk0LDM4MTgxLDM2ODYxLDM2MTg0LDIyMzY4''@;'; put 'put ''LDMyNTEyLDM1ODQ2LDIwOTM0LDI1NDE3LDI1MzA1LDIxMzMxLDI2NzAwLDI5NzMwLDMzNTM3LDM3MTk2LDIxODI4LDMwNTI4LDI4Nzk2LDI3OTc4LDIwODU3LDIxNjcyLDM2MTY0LDIzMDM5LDI4MzYzLDI4MTAwLDIzMzg4LDMyMDQzLDIwMTgwLDMxODY5LDI4MzcxLDIzMzc2LDMzMjU4LDI4''@;'; put 'put ''MTczLDIzMzgzLDM5NjgzLDI2ODM3LDM2Mzk0LDIzNDQ3LDMyNTA4LDI0NjM1LDMyNDM3LDM3MDQ5LDM2MjA4LDIyODYzLDI1NTQ5LDMxMTk5LDM2Mjc1LDIxMzMwLDI2MDYzLDMxMDYyLDM1NzgxLDM4NDU5LDMyNDUyLDM4MDc1LDMyMzg2LDIyMDY4LDM3MjU3LDI2MzY4LDMyNjE4LDIzNTYy''@;'; put 'put ''LDM2OTgxLDI2MTUyLDI0MDM4LDIwMzA0LDI2NTkwLDIwNTcwLDIwMzE2LDIyMzUyLDI0MjMxLDU5NDA4LDU5NDA5LDU5NDEwLDU5NDExLDU5NDEyLDM1ODk2LDM1ODk3LDM1ODk4LDM1ODk5LDM1OTAwLDM1OTAxLDM1OTAyLDM1OTAzLDM1OTA0LDM1OTA2LDM1OTA3LDM1OTA4LDM1OTA5LDM1''@;'; put 'put ''OTEyLDM1OTE0LDM1OTE1LDM1OTE3LDM1OTE4LDM1OTE5LDM1OTIwLDM1OTIxLDM1OTIyLDM1OTIzLDM1OTI0LDM1OTI2LDM1OTI3LDM1OTI4LDM1OTI5LDM1OTMxLDM1OTMyLDM1OTMzLDM1OTM0LDM1OTM1LDM1OTM2LDM1OTM5LDM1OTQwLDM1OTQxLDM1OTQyLDM1OTQzLDM1OTQ0LDM1OTQ1''@;'; put 'put ''LDM1OTQ4LDM1OTQ5LDM1OTUwLDM1OTUxLDM1OTUyLDM1OTUzLDM1OTU0LDM1OTU2LDM1OTU3LDM1OTU4LDM1OTU5LDM1OTYzLDM1OTY0LDM1OTY1LDM1OTY2LDM1OTY3LDM1OTY4LDM1OTY5LDM1OTcxLDM1OTcyLDM1OTc0LDM1OTc1LDM1OTc2LDM1OTc5LDM1OTgxLDM1OTgyLDM1OTgzLDM1''@;'; put 'put ''OTg0LDM1OTg1LDM1OTg2LDM1OTg3LDM1OTg5LDM1OTkwLDM1OTkxLDM1OTkzLDM1OTk0LDM1OTk1LDM1OTk2LDM1OTk3LDM1OTk4LDM1OTk5LDM2ZTMsMzYwMDEsMzYwMDIsMzYwMDMsMzYwMDQsMzYwMDUsMzYwMDYsMzYwMDcsMzYwMDgsMzYwMDksMzYwMTAsMzYwMTEsMzYwMTIsMzYwMTMs''@;'; put 'put ''MjAxMDksMTk5ODAsMjA4MDAsMTk5ODQsMjQzMTksMjEzMTcsMTk5ODksMjAxMjAsMTk5OTgsMzk3MzAsMjM0MDQsMjIxMjEsMjAwMDgsMzExNjIsMjAwMzEsMjEyNjksMjAwMzksMjI4MjksMjkyNDMsMjEzNTgsMjc2NjQsMjIyMzksMzI5OTYsMzkzMTksMjc2MDMsMzA1OTAsNDA3MjcsMjAw''@;'; put 'put ''MjIsMjAxMjcsNDA3MjAsMjAwNjAsMjAwNzMsMjAxMTUsMzM0MTYsMjMzODcsMjE4NjgsMjIwMzEsMjAxNjQsMjEzODksMjE0MDUsMjE0MTEsMjE0MTMsMjE0MjIsMzg3NTcsMzYxODksMjEyNzQsMjE0OTMsMjEyODYsMjEyOTQsMjEzMTAsMzYxODgsMjEzNTAsMjEzNDcsMjA5OTQsMjFlMywy''@;'; put 'put ''MTAwNiwyMTAzNywyMTA0MywyMTA1NSwyMTA1NiwyMTA2OCwyMTA4NiwyMTA4OSwyMTA4NCwzMzk2NywyMTExNywyMTEyMiwyMTEyMSwyMTEzNiwyMTEzOSwyMDg2NiwzMjU5NiwyMDE1NSwyMDE2MywyMDE2OSwyMDE2MiwyMDIwMCwyMDE5MywyMDIwMywyMDE5MCwyMDI1MSwyMDIxMSwyMDI1''@;'; put 'put ''OCwyMDMyNCwyMDIxMywyMDI2MSwyMDI2MywyMDIzMywyMDI2NywyMDMxOCwyMDMyNywyNTkxMiwyMDMxNCwyMDMxNywzNjAxNCwzNjAxNSwzNjAxNiwzNjAxNywzNjAxOCwzNjAxOSwzNjAyMCwzNjAyMSwzNjAyMiwzNjAyMywzNjAyNCwzNjAyNSwzNjAyNiwzNjAyNywzNjAyOCwzNjAyOSwz''@;'; put 'put ''NjAzMCwzNjAzMSwzNjAzMiwzNjAzMywzNjAzNCwzNjAzNSwzNjAzNiwzNjAzNywzNjAzOCwzNjAzOSwzNjA0MCwzNjA0MSwzNjA0MiwzNjA0MywzNjA0NCwzNjA0NSwzNjA0NiwzNjA0NywzNjA0OCwzNjA0OSwzNjA1MCwzNjA1MSwzNjA1MiwzNjA1MywzNjA1NCwzNjA1NSwzNjA1NiwzNjA1''@;'; put 'put ''NywzNjA1OCwzNjA1OSwzNjA2MCwzNjA2MSwzNjA2MiwzNjA2MywzNjA2NCwzNjA2NSwzNjA2NiwzNjA2NywzNjA2OCwzNjA2OSwzNjA3MCwzNjA3MSwzNjA3MiwzNjA3MywzNjA3NCwzNjA3NSwzNjA3NiwzNjA3NywzNjA3OCwzNjA3OSwzNjA4MCwzNjA4MSwzNjA4MiwzNjA4MywzNjA4NCwz''@;'; put 'put ''NjA4NSwzNjA4NiwzNjA4NywzNjA4OCwzNjA4OSwzNjA5MCwzNjA5MSwzNjA5MiwzNjA5MywzNjA5NCwzNjA5NSwzNjA5NiwzNjA5NywzNjA5OCwzNjA5OSwzNjEwMCwzNjEwMSwzNjEwMiwzNjEwMywzNjEwNCwzNjEwNSwzNjEwNiwzNjEwNywzNjEwOCwzNjEwOSwyMDMxOSwyMDMxMSwyMDI3''@;'; put 'put ''NCwyMDI4NSwyMDM0MiwyMDM0MCwyMDM2OSwyMDM2MSwyMDM1NSwyMDM2NywyMDM1MCwyMDM0NywyMDM5NCwyMDM0OCwyMDM5NiwyMDM3MiwyMDQ1NCwyMDQ1NiwyMDQ1OCwyMDQyMSwyMDQ0MiwyMDQ1MSwyMDQ0NCwyMDQzMywyMDQ0NywyMDQ3MiwyMDUyMSwyMDU1NiwyMDQ2NywyMDUyNCwy''@;'; put 'put ''MDQ5NSwyMDUyNiwyMDUyNSwyMDQ3OCwyMDUwOCwyMDQ5MiwyMDUxNywyMDUyMCwyMDYwNiwyMDU0NywyMDU2NSwyMDU1MiwyMDU1OCwyMDU4OCwyMDYwMywyMDY0NSwyMDY0NywyMDY0OSwyMDY2NiwyMDY5NCwyMDc0MiwyMDcxNywyMDcxNiwyMDcxMCwyMDcxOCwyMDc0MywyMDc0NywyMDE4''@;'; put 'put ''OSwyNzcwOSwyMDMxMiwyMDMyNSwyMDQzMCw0MDg2NCwyNzcxOCwzMTg2MCwyMDg0NiwyNDA2MSw0MDY0OSwzOTMyMCwyMDg2NSwyMjgwNCwyMTI0MSwyMTI2MSwzNTMzNSwyMTI2NCwyMDk3MSwyMjgwOSwyMDgyMSwyMDEyOCwyMDgyMiwyMDE0NywzNDkyNiwzNDk4MCwyMDE0OSwzMzA0NCwz''@;'; put 'put ''NTAyNiwzMTEwNCwyMzM0OCwzNDgxOSwzMjY5NiwyMDkwNywyMDkxMywyMDkyNSwyMDkyNCwzNjExMCwzNjExMSwzNjExMiwzNjExMywzNjExNCwzNjExNSwzNjExNiwzNjExNywzNjExOCwzNjExOSwzNjEyMCwzNjEyMSwzNjEyMiwzNjEyMywzNjEyNCwzNjEyOCwzNjE3NywzNjE3OCwzNjE4''@;'; put 'put ''MywzNjE5MSwzNjE5NywzNjIwMCwzNjIwMSwzNjIwMiwzNjIwNCwzNjIwNiwzNjIwNywzNjIwOSwzNjIxMCwzNjIxNiwzNjIxNywzNjIxOCwzNjIxOSwzNjIyMCwzNjIyMSwzNjIyMiwzNjIyMywzNjIyNCwzNjIyNiwzNjIyNywzNjIzMCwzNjIzMSwzNjIzMiwzNjIzMywzNjIzNiwzNjIzNywz''@;'; put 'put ''NjIzOCwzNjIzOSwzNjI0MCwzNjI0MiwzNjI0MywzNjI0NSwzNjI0NiwzNjI0NywzNjI0OCwzNjI0OSwzNjI1MCwzNjI1MSwzNjI1MiwzNjI1MywzNjI1NCwzNjI1NiwzNjI1NywzNjI1OCwzNjI2MCwzNjI2MSwzNjI2MiwzNjI2MywzNjI2NCwzNjI2NSwzNjI2NiwzNjI2NywzNjI2OCwzNjI2''@;'; put 'put ''OSwzNjI3MCwzNjI3MSwzNjI3MiwzNjI3NCwzNjI3OCwzNjI3OSwzNjI4MSwzNjI4MywzNjI4NSwzNjI4OCwzNjI4OSwzNjI5MCwzNjI5MywzNjI5NSwzNjI5NiwzNjI5NywzNjI5OCwzNjMwMSwzNjMwNCwzNjMwNiwzNjMwNywzNjMwOCwyMDkzNSwyMDg4NiwyMDg5OCwyMDkwMSwzNTc0NCwz''@;'; put 'put ''NTc1MCwzNTc1MSwzNTc1NCwzNTc2NCwzNTc2NSwzNTc2NywzNTc3OCwzNTc3OSwzNTc4NywzNTc5MSwzNTc5MCwzNTc5NCwzNTc5NSwzNTc5NiwzNTc5OCwzNTgwMCwzNTgwMSwzNTgwNCwzNTgwNywzNTgwOCwzNTgxMiwzNTgxNiwzNTgxNywzNTgyMiwzNTgyNCwzNTgyNywzNTgzMCwzNTgz''@;'; put 'put ''MywzNTgzNiwzNTgzOSwzNTg0MCwzNTg0MiwzNTg0NCwzNTg0NywzNTg1MiwzNTg1NSwzNTg1NywzNTg1OCwzNTg2MCwzNTg2MSwzNTg2MiwzNTg2NSwzNTg2NywzNTg2NCwzNTg2OSwzNTg3MSwzNTg3MiwzNTg3MywzNTg3NywzNTg3OSwzNTg4MiwzNTg4MywzNTg4NiwzNTg4NywzNTg5MCwz''@;'; put 'put ''NTg5MSwzNTg5MywzNTg5NCwyMTM1MywyMTM3MCwzODQyOSwzODQzNCwzODQzMywzODQ0OSwzODQ0MiwzODQ2MSwzODQ2MCwzODQ2NiwzODQ3MywzODQ4NCwzODQ5NSwzODUwMywzODUwOCwzODUxNCwzODUxNiwzODUzNiwzODU0MSwzODU1MSwzODU3NiwzNzAxNSwzNzAxOSwzNzAyMSwzNzAx''@;'; put 'put ''NywzNzAzNiwzNzAyNSwzNzA0NCwzNzA0MywzNzA0NiwzNzA1MCwzNjMwOSwzNjMxMiwzNjMxMywzNjMxNiwzNjMyMCwzNjMyMSwzNjMyMiwzNjMyNSwzNjMyNiwzNjMyNywzNjMyOSwzNjMzMywzNjMzNCwzNjMzNiwzNjMzNywzNjMzOCwzNjM0MCwzNjM0MiwzNjM0OCwzNjM1MCwzNjM1MSwz''@;'; put 'put ''NjM1MiwzNjM1MywzNjM1NCwzNjM1NSwzNjM1NiwzNjM1OCwzNjM1OSwzNjM2MCwzNjM2MywzNjM2NSwzNjM2NiwzNjM2OCwzNjM2OSwzNjM3MCwzNjM3MSwzNjM3MywzNjM3NCwzNjM3NSwzNjM3NiwzNjM3NywzNjM3OCwzNjM3OSwzNjM4MCwzNjM4NCwzNjM4NSwzNjM4OCwzNjM4OSwzNjM5''@;'; put 'put ''MCwzNjM5MSwzNjM5MiwzNjM5NSwzNjM5NywzNjQwMCwzNjQwMiwzNjQwMywzNjQwNCwzNjQwNiwzNjQwNywzNjQwOCwzNjQxMSwzNjQxMiwzNjQxNCwzNjQxNSwzNjQxOSwzNjQyMSwzNjQyMiwzNjQyOCwzNjQyOSwzNjQzMCwzNjQzMSwzNjQzMiwzNjQzNSwzNjQzNiwzNjQzNywzNjQzOCwz''@;'; put 'put ''NjQzOSwzNjQ0MCwzNjQ0MiwzNjQ0MywzNjQ0NCwzNjQ0NSwzNjQ0NiwzNjQ0NywzNjQ0OCwzNjQ0OSwzNjQ1MCwzNjQ1MSwzNjQ1MiwzNjQ1MywzNjQ1NSwzNjQ1NiwzNjQ1OCwzNjQ1OSwzNjQ2MiwzNjQ2NSwzNzA0OCwzNzA0MCwzNzA3MSwzNzA2MSwzNzA1NCwzNzA3MiwzNzA2MCwzNzA2''@;'; put 'put ''MywzNzA3NSwzNzA5NCwzNzA5MCwzNzA4NCwzNzA3OSwzNzA4MywzNzA5OSwzNzEwMywzNzExOCwzNzEyNCwzNzE1NCwzNzE1MCwzNzE1NSwzNzE2OSwzNzE2NywzNzE3NywzNzE4NywzNzE5MCwyMTAwNSwyMjg1MCwyMTE1NCwyMTE2NCwyMTE2NSwyMTE4MiwyMTc1OSwyMTIwMCwyMTIwNiwy''@;'; put 'put ''MTIzMiwyMTQ3MSwyOTE2NiwzMDY2OSwyNDMwOCwyMDk4MSwyMDk4OCwzOTcyNywyMTQzMCwyNDMyMSwzMDA0MiwyNDA0NywyMjM0OCwyMjQ0MSwyMjQzMywyMjY1NCwyMjcxNiwyMjcyNSwyMjczNywyMjMxMywyMjMxNiwyMjMxNCwyMjMyMywyMjMyOSwyMjMxOCwyMjMxOSwyMjM2NCwyMjMz''@;'; put 'put ''MSwyMjMzOCwyMjM3NywyMjQwNSwyMjM3OSwyMjQwNiwyMjM5NiwyMjM5NSwyMjM3NiwyMjM4MSwyMjM5MCwyMjM4NywyMjQ0NSwyMjQzNiwyMjQxMiwyMjQ1MCwyMjQ3OSwyMjQzOSwyMjQ1MiwyMjQxOSwyMjQzMiwyMjQ4NSwyMjQ4OCwyMjQ5MCwyMjQ4OSwyMjQ4MiwyMjQ1NiwyMjUxNiwy''@;'; put 'put ''MjUxMSwyMjUyMCwyMjUwMCwyMjQ5MywzNjQ2NywzNjQ2OSwzNjQ3MSwzNjQ3MiwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ3NywzNjQ3OCwzNjQ4MCwzNjQ4MiwzNjQ4MywzNjQ4NCwzNjQ4NiwzNjQ4OCwzNjQ4OSwzNjQ5MCwzNjQ5MSwzNjQ5MiwzNjQ5MywzNjQ5NCwzNjQ5NywzNjQ5OCwzNjQ5''@;'; put 'put ''OSwzNjUwMSwzNjUwMiwzNjUwMywzNjUwNCwzNjUwNSwzNjUwNiwzNjUwNywzNjUwOSwzNjUxMSwzNjUxMiwzNjUxMywzNjUxNCwzNjUxNSwzNjUxNiwzNjUxNywzNjUxOCwzNjUxOSwzNjUyMCwzNjUyMSwzNjUyMiwzNjUyNSwzNjUyNiwzNjUyOCwzNjUyOSwzNjUzMSwzNjUzMiwzNjUzMywz''@;'; put 'put ''NjUzNCwzNjUzNSwzNjUzNiwzNjUzNywzNjUzOSwzNjU0MCwzNjU0MSwzNjU0MiwzNjU0MywzNjU0NCwzNjU0NSwzNjU0NiwzNjU0NywzNjU0OCwzNjU0OSwzNjU1MCwzNjU1MSwzNjU1MiwzNjU1MywzNjU1NCwzNjU1NSwzNjU1NiwzNjU1NywzNjU1OSwzNjU2MCwzNjU2MSwzNjU2MiwzNjU2''@;'; put 'put ''MywzNjU2NCwzNjU2NSwzNjU2NiwzNjU2NywzNjU2OCwzNjU2OSwzNjU3MCwzNjU3MSwzNjU3MiwzNjU3MywzNjU3NCwzNjU3NSwzNjU3NiwzNjU3NywzNjU3OCwzNjU3OSwzNjU4MCwyMjUzOSwyMjU0MSwyMjUyNSwyMjUwOSwyMjUyOCwyMjU1OCwyMjU1MywyMjU5NiwyMjU2MCwyMjYyOSwy''@;'; put 'put ''MjYzNiwyMjY1NywyMjY2NSwyMjY4MiwyMjY1NiwzOTMzNiw0MDcyOSwyNTA4NywzMzQwMSwzMzQwNSwzMzQwNywzMzQyMywzMzQxOCwzMzQ0OCwzMzQxMiwzMzQyMiwzMzQyNSwzMzQzMSwzMzQzMywzMzQ1MSwzMzQ2NCwzMzQ3MCwzMzQ1NiwzMzQ4MCwzMzQ4MiwzMzUwNywzMzQzMiwzMzQ2''@;'; put 'put ''MywzMzQ1NCwzMzQ4MywzMzQ4NCwzMzQ3MywzMzQ0OSwzMzQ2MCwzMzQ0MSwzMzQ1MCwzMzQzOSwzMzQ3NiwzMzQ4NiwzMzQ0NCwzMzUwNSwzMzU0NSwzMzUyNywzMzUwOCwzMzU1MSwzMzU0MywzMzUwMCwzMzUyNCwzMzQ5MCwzMzQ5NiwzMzU0OCwzMzUzMSwzMzQ5MSwzMzU1MywzMzU2Miwz''@;'; put 'put ''MzU0MiwzMzU1NiwzMzU1NywzMzUwNCwzMzQ5MywzMzU2NCwzMzYxNywzMzYyNywzMzYyOCwzMzU0NCwzMzY4MiwzMzU5NiwzMzU4OCwzMzU4NSwzMzY5MSwzMzYzMCwzMzU4MywzMzYxNSwzMzYwNywzMzYwMywzMzYzMSwzMzYwMCwzMzU1OSwzMzYzMiwzMzU4MSwzMzU5NCwzMzU4NywzMzYz''@;'; put 'put ''OCwzMzYzNywzNjU4MSwzNjU4MiwzNjU4MywzNjU4NCwzNjU4NSwzNjU4NiwzNjU4NywzNjU4OCwzNjU4OSwzNjU5MCwzNjU5MSwzNjU5MiwzNjU5MywzNjU5NCwzNjU5NSwzNjU5NiwzNjU5NywzNjU5OCwzNjU5OSwzNjYwMCwzNjYwMSwzNjYwMiwzNjYwMywzNjYwNCwzNjYwNSwzNjYwNiwz''@;'; put 'put ''NjYwNywzNjYwOCwzNjYwOSwzNjYxMCwzNjYxMSwzNjYxMiwzNjYxMywzNjYxNCwzNjYxNSwzNjYxNiwzNjYxNywzNjYxOCwzNjYxOSwzNjYyMCwzNjYyMSwzNjYyMiwzNjYyMywzNjYyNCwzNjYyNSwzNjYyNiwzNjYyNywzNjYyOCwzNjYyOSwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzMywzNjYz''@;'; put 'put ''NCwzNjYzNSwzNjYzNiwzNjYzNywzNjYzOCwzNjYzOSwzNjY0MCwzNjY0MSwzNjY0MiwzNjY0MywzNjY0NCwzNjY0NSwzNjY0NiwzNjY0NywzNjY0OCwzNjY0OSwzNjY1MCwzNjY1MSwzNjY1MiwzNjY1MywzNjY1NCwzNjY1NSwzNjY1NiwzNjY1NywzNjY1OCwzNjY1OSwzNjY2MCwzNjY2MSwz''@;'; put 'put ''NjY2MiwzNjY2MywzNjY2NCwzNjY2NSwzNjY2NiwzNjY2NywzNjY2OCwzNjY2OSwzNjY3MCwzNjY3MSwzNjY3MiwzNjY3MywzNjY3NCwzNjY3NSwzNjY3NiwzMzY0MCwzMzU2MywzMzY0MSwzMzY0NCwzMzY0MiwzMzY0NSwzMzY0NiwzMzcxMiwzMzY1NiwzMzcxNSwzMzcxNiwzMzY5NiwzMzcw''@;'; put 'put ''NiwzMzY4MywzMzY5MiwzMzY2OSwzMzY2MCwzMzcxOCwzMzcwNSwzMzY2MSwzMzcyMCwzMzY1OSwzMzY4OCwzMzY5NCwzMzcwNCwzMzcyMiwzMzcyNCwzMzcyOSwzMzc5MywzMzc2NSwzMzc1MiwyMjUzNSwzMzgxNiwzMzgwMywzMzc1NywzMzc4OSwzMzc1MCwzMzgyMCwzMzg0OCwzMzgwOSwz''@;'; put 'put ''Mzc5OCwzMzc0OCwzMzc1OSwzMzgwNywzMzc5NSwzMzc4NCwzMzc4NSwzMzc3MCwzMzczMywzMzcyOCwzMzgzMCwzMzc3NiwzMzc2MSwzMzg4NCwzMzg3MywzMzg4MiwzMzg4MSwzMzkwNywzMzkyNywzMzkyOCwzMzkxNCwzMzkyOSwzMzkxMiwzMzg1MiwzMzg2MiwzMzg5NywzMzkxMCwzMzkz''@;'; put 'put ''MiwzMzkzNCwzMzg0MSwzMzkwMSwzMzk4NSwzMzk5NywzNGUzLDM0MDIyLDMzOTgxLDM0MDAzLDMzOTk0LDMzOTgzLDMzOTc4LDM0MDE2LDMzOTUzLDMzOTc3LDMzOTcyLDMzOTQzLDM0MDIxLDM0MDE5LDM0MDYwLDI5OTY1LDM0MTA0LDM0MDMyLDM0MTA1LDM0MDc5LDM0MTA2LDM2Njc3LDM2''@;'; put 'put ''Njc4LDM2Njc5LDM2NjgwLDM2NjgxLDM2NjgyLDM2NjgzLDM2Njg0LDM2Njg1LDM2Njg2LDM2Njg3LDM2Njg4LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk0LDM2Njk1LDM2Njk2LDM2Njk3LDM2Njk4LDM2Njk5LDM2NzAwLDM2NzAxLDM2NzAyLDM2NzAzLDM2NzA0LDM2NzA1''@;'; put 'put ''LDM2NzA2LDM2NzA3LDM2NzA4LDM2NzA5LDM2NzE0LDM2NzM2LDM2NzQ4LDM2NzU0LDM2NzY1LDM2NzY4LDM2NzY5LDM2NzcwLDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzc1LDM2Nzc4LDM2NzgwLDM2NzgxLDM2NzgyLDM2NzgzLDM2Nzg2LDM2Nzg3LDM2Nzg4LDM2Nzg5LDM2NzkxLDM2NzkyLDM2''@;'; put 'put ''Nzk0LDM2Nzk1LDM2Nzk2LDM2Nzk5LDM2ODAwLDM2ODAzLDM2ODA2LDM2ODA5LDM2ODEwLDM2ODExLDM2ODEyLDM2ODEzLDM2ODE1LDM2ODE4LDM2ODIyLDM2ODIzLDM2ODI2LDM2ODMyLDM2ODMzLDM2ODM1LDM2ODM5LDM2ODQ0LDM2ODQ3LDM2ODQ5LDM2ODUwLDM2ODUyLDM2ODUzLDM2ODU0''@;'; put 'put ''LDM2ODU4LDM2ODU5LDM2ODYwLDM2ODYyLDM2ODYzLDM2ODcxLDM2ODcyLDM2ODc2LDM2ODc4LDM2ODgzLDM2ODg1LDM2ODg4LDM0MTM0LDM0MTA3LDM0MDQ3LDM0MDQ0LDM0MTM3LDM0MTIwLDM0MTUyLDM0MTQ4LDM0MTQyLDM0MTcwLDMwNjI2LDM0MTE1LDM0MTYyLDM0MTcxLDM0MjEyLDM0''@;'; put 'put ''MjE2LDM0MTgzLDM0MTkxLDM0MTY5LDM0MjIyLDM0MjA0LDM0MTgxLDM0MjMzLDM0MjMxLDM0MjI0LDM0MjU5LDM0MjQxLDM0MjY4LDM0MzAzLDM0MzQzLDM0MzA5LDM0MzQ1LDM0MzI2LDM0MzY0LDI0MzE4LDI0MzI4LDIyODQ0LDIyODQ5LDMyODIzLDIyODY5LDIyODc0LDIyODcyLDIxMjYz''@;'; put 'put ''LDIzNTg2LDIzNTg5LDIzNTk2LDIzNjA0LDI1MTY0LDI1MTk0LDI1MjQ3LDI1Mjc1LDI1MjkwLDI1MzA2LDI1MzAzLDI1MzI2LDI1Mzc4LDI1MzM0LDI1NDAxLDI1NDE5LDI1NDExLDI1NTE3LDI1NTkwLDI1NDU3LDI1NDY2LDI1NDg2LDI1NTI0LDI1NDUzLDI1NTE2LDI1NDgyLDI1NDQ5LDI1''@;'; put 'put ''NTE4LDI1NTMyLDI1NTg2LDI1NTkyLDI1NTY4LDI1NTk5LDI1NTQwLDI1NTY2LDI1NTUwLDI1NjgyLDI1NTQyLDI1NTM0LDI1NjY5LDI1NjY1LDI1NjExLDI1NjI3LDI1NjMyLDI1NjEyLDI1NjM4LDI1NjMzLDI1Njk0LDI1NzMyLDI1NzA5LDI1NzUwLDM2ODg5LDM2ODkyLDM2ODk5LDM2OTAw''@;'; put 'put ''LDM2OTAxLDM2OTAzLDM2OTA0LDM2OTA1LDM2OTA2LDM2OTA3LDM2OTA4LDM2OTEyLDM2OTEzLDM2OTE0LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTIxLDM2OTIyLDM2OTI1LDM2OTI3LDM2OTI4LDM2OTMxLDM2OTMzLDM2OTM0LDM2OTM2LDM2OTM3LDM2OTM4LDM2OTM5LDM2OTQwLDM2OTQyLDM2''@;'; put 'put ''OTQ4LDM2OTQ5LDM2OTUwLDM2OTUzLDM2OTU0LDM2OTU2LDM2OTU3LDM2OTU4LDM2OTU5LDM2OTYwLDM2OTYxLDM2OTY0LDM2OTY2LDM2OTY3LDM2OTY5LDM2OTcwLDM2OTcxLDM2OTcyLDM2OTc1LDM2OTc2LDM2OTc3LDM2OTc4LDM2OTc5LDM2OTgyLDM2OTgzLDM2OTg0LDM2OTg1LDM2OTg2''@;'; put 'put ''LDM2OTg3LDM2OTg4LDM2OTkwLDM2OTkzLDM2OTk2LDM2OTk3LDM2OTk4LDM2OTk5LDM3MDAxLDM3MDAyLDM3MDA0LDM3MDA1LDM3MDA2LDM3MDA3LDM3MDA4LDM3MDEwLDM3MDEyLDM3MDE0LDM3MDE2LDM3MDE4LDM3MDIwLDM3MDIyLDM3MDIzLDM3MDI0LDM3MDI4LDM3MDI5LDM3MDMxLDM3''@;'; put 'put ''MDMyLDM3MDMzLDM3MDM1LDM3MDM3LDM3MDQyLDM3MDQ3LDM3MDUyLDM3MDUzLDM3MDU1LDM3MDU2LDI1NzIyLDI1NzgzLDI1Nzg0LDI1NzUzLDI1Nzg2LDI1NzkyLDI1ODA4LDI1ODE1LDI1ODI4LDI1ODI2LDI1ODY1LDI1ODkzLDI1OTAyLDI0MzMxLDI0NTMwLDI5OTc3LDI0MzM3LDIxMzQz''@;'; put 'put ''LDIxNDg5LDIxNTAxLDIxNDgxLDIxNDgwLDIxNDk5LDIxNTIyLDIxNTI2LDIxNTEwLDIxNTc5LDIxNTg2LDIxNTg3LDIxNTg4LDIxNTkwLDIxNTcxLDIxNTM3LDIxNTkxLDIxNTkzLDIxNTM5LDIxNTU0LDIxNjM0LDIxNjUyLDIxNjIzLDIxNjE3LDIxNjA0LDIxNjU4LDIxNjU5LDIxNjM2LDIx''@;'; put 'put ''NjIyLDIxNjA2LDIxNjYxLDIxNzEyLDIxNjc3LDIxNjk4LDIxNjg0LDIxNzE0LDIxNjcxLDIxNjcwLDIxNzE1LDIxNzE2LDIxNjE4LDIxNjY3LDIxNzE3LDIxNjkxLDIxNjk1LDIxNzA4LDIxNzIxLDIxNzIyLDIxNzI0LDIxNjczLDIxNjc0LDIxNjY4LDIxNzI1LDIxNzExLDIxNzI2LDIxNzg3''@;'; put 'put ''LDIxNzM1LDIxNzkyLDIxNzU3LDIxNzgwLDIxNzQ3LDIxNzk0LDIxNzk1LDIxNzc1LDIxNzc3LDIxNzk5LDIxODAyLDIxODYzLDIxOTAzLDIxOTQxLDIxODMzLDIxODY5LDIxODI1LDIxODQ1LDIxODIzLDIxODQwLDIxODIwLDM3MDU4LDM3MDU5LDM3MDYyLDM3MDY0LDM3MDY1LDM3MDY3LDM3''@;'; put 'put ''MDY4LDM3MDY5LDM3MDc0LDM3MDc2LDM3MDc3LDM3MDc4LDM3MDgwLDM3MDgxLDM3MDgyLDM3MDg2LDM3MDg3LDM3MDg4LDM3MDkxLDM3MDkyLDM3MDkzLDM3MDk3LDM3MDk4LDM3MTAwLDM3MTAyLDM3MTA0LDM3MTA1LDM3MTA2LDM3MTA3LDM3MTA5LDM3MTEwLDM3MTExLDM3MTEzLDM3MTE0''@;'; put 'put ''LDM3MTE1LDM3MTE2LDM3MTE5LDM3MTIwLDM3MTIxLDM3MTIzLDM3MTI1LDM3MTI2LDM3MTI3LDM3MTI4LDM3MTI5LDM3MTMwLDM3MTMxLDM3MTMyLDM3MTMzLDM3MTM0LDM3MTM1LDM3MTM2LDM3MTM3LDM3MTM4LDM3MTM5LDM3MTQwLDM3MTQxLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3''@;'; put 'put ''MTQ3LDM3MTQ4LDM3MTQ5LDM3MTUxLDM3MTUyLDM3MTUzLDM3MTU2LDM3MTU3LDM3MTU4LDM3MTU5LDM3MTYwLDM3MTYxLDM3MTYyLDM3MTYzLDM3MTY0LDM3MTY1LDM3MTY2LDM3MTY4LDM3MTcwLDM3MTcxLDM3MTcyLDM3MTczLDM3MTc0LDM3MTc1LDM3MTc2LDM3MTc4LDM3MTc5LDM3MTgw''@;'; put 'put ''LDM3MTgxLDM3MTgyLDM3MTgzLDM3MTg0LDM3MTg1LDM3MTg2LDM3MTg4LDIxODE1LDIxODQ2LDIxODc3LDIxODc4LDIxODc5LDIxODExLDIxODA4LDIxODUyLDIxODk5LDIxOTcwLDIxODkxLDIxOTM3LDIxOTQ1LDIxODk2LDIxODg5LDIxOTE5LDIxODg2LDIxOTc0LDIxOTA1LDIxODgzLDIx''@;'; put 'put ''OTgzLDIxOTQ5LDIxOTUwLDIxOTA4LDIxOTEzLDIxOTk0LDIyMDA3LDIxOTYxLDIyMDQ3LDIxOTY5LDIxOTk1LDIxOTk2LDIxOTcyLDIxOTkwLDIxOTgxLDIxOTU2LDIxOTk5LDIxOTg5LDIyMDAyLDIyMDAzLDIxOTY0LDIxOTY1LDIxOTkyLDIyMDA1LDIxOTg4LDM2NzU2LDIyMDQ2LDIyMDI0''@;'; put 'put ''LDIyMDI4LDIyMDE3LDIyMDUyLDIyMDUxLDIyMDE0LDIyMDE2LDIyMDU1LDIyMDYxLDIyMTA0LDIyMDczLDIyMTAzLDIyMDYwLDIyMDkzLDIyMTE0LDIyMTA1LDIyMTA4LDIyMDkyLDIyMTAwLDIyMTUwLDIyMTE2LDIyMTI5LDIyMTIzLDIyMTM5LDIyMTQwLDIyMTQ5LDIyMTYzLDIyMTkxLDIy''@;'; put 'put ''MjI4LDIyMjMxLDIyMjM3LDIyMjQxLDIyMjYxLDIyMjUxLDIyMjY1LDIyMjcxLDIyMjc2LDIyMjgyLDIyMjgxLDIyMzAwLDI0MDc5LDI0MDg5LDI0MDg0LDI0MDgxLDI0MTEzLDI0MTIzLDI0MTI0LDM3MTg5LDM3MTkxLDM3MTkyLDM3MjAxLDM3MjAzLDM3MjA0LDM3MjA1LDM3MjA2LDM3MjA4''@;'; put 'put ''LDM3MjA5LDM3MjExLDM3MjEyLDM3MjE1LDM3MjE2LDM3MjIyLDM3MjIzLDM3MjI0LDM3MjI3LDM3MjI5LDM3MjM1LDM3MjQyLDM3MjQzLDM3MjQ0LDM3MjQ4LDM3MjQ5LDM3MjUwLDM3MjUxLDM3MjUyLDM3MjU0LDM3MjU2LDM3MjU4LDM3MjYyLDM3MjYzLDM3MjY3LDM3MjY4LDM3MjY5LDM3''@;'; put 'put ''MjcwLDM3MjcxLDM3MjcyLDM3MjczLDM3Mjc2LDM3Mjc3LDM3Mjc4LDM3Mjc5LDM3MjgwLDM3MjgxLDM3Mjg0LDM3Mjg1LDM3Mjg2LDM3Mjg3LDM3Mjg4LDM3Mjg5LDM3MjkxLDM3MjkyLDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzAzLDM3MzA0LDM3MzA1LDM3MzA3LDM3MzA4''@;'; put 'put ''LDM3MzA5LDM3MzEwLDM3MzExLDM3MzEyLDM3MzEzLDM3MzE0LDM3MzE1LDM3MzE2LDM3MzE3LDM3MzE4LDM3MzIwLDM3MzIzLDM3MzI4LDM3MzMwLDM3MzMxLDM3MzMyLDM3MzMzLDM3MzM0LDM3MzM1LDM3MzM2LDM3MzM3LDM3MzM4LDM3MzM5LDM3MzQxLDM3MzQyLDM3MzQzLDM3MzQ0LDM3''@;'; put 'put ''MzQ1LDM3MzQ2LDM3MzQ3LDM3MzQ4LDM3MzQ5LDI0MTE5LDI0MTMyLDI0MTQ4LDI0MTU1LDI0MTU4LDI0MTYxLDIzNjkyLDIzNjc0LDIzNjkzLDIzNjk2LDIzNzAyLDIzNjg4LDIzNzA0LDIzNzA1LDIzNjk3LDIzNzA2LDIzNzA4LDIzNzMzLDIzNzE0LDIzNzQxLDIzNzI0LDIzNzIzLDIzNzI5''@;'; put 'put ''LDIzNzE1LDIzNzQ1LDIzNzM1LDIzNzQ4LDIzNzYyLDIzNzgwLDIzNzU1LDIzNzgxLDIzODEwLDIzODExLDIzODQ3LDIzODQ2LDIzODU0LDIzODQ0LDIzODM4LDIzODE0LDIzODM1LDIzODk2LDIzODcwLDIzODYwLDIzODY5LDIzOTE2LDIzODk5LDIzOTE5LDIzOTAxLDIzOTE1LDIzODgzLDIz''@;'; put 'put ''ODgyLDIzOTEzLDIzOTI0LDIzOTM4LDIzOTYxLDIzOTY1LDM1OTU1LDIzOTkxLDI0MDA1LDI0NDM1LDI0NDM5LDI0NDUwLDI0NDU1LDI0NDU3LDI0NDYwLDI0NDY5LDI0NDczLDI0NDc2LDI0NDg4LDI0NDkzLDI0NTAxLDI0NTA4LDM0OTE0LDI0NDE3LDI5MzU3LDI5MzYwLDI5MzY0LDI5MzY3''@;'; put 'put ''LDI5MzY4LDI5Mzc5LDI5Mzc3LDI5MzkwLDI5Mzg5LDI5Mzk0LDI5NDE2LDI5NDIzLDI5NDE3LDI5NDI2LDI5NDI4LDI5NDMxLDI5NDQxLDI5NDI3LDI5NDQzLDI5NDM0LDM3MzUwLDM3MzUxLDM3MzUyLDM3MzUzLDM3MzU0LDM3MzU1LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3''@;'; put 'put ''MzYxLDM3MzYyLDM3MzYzLDM3MzY0LDM3MzY1LDM3MzY2LDM3MzY3LDM3MzY4LDM3MzY5LDM3MzcwLDM3MzcxLDM3MzcyLDM3MzczLDM3Mzc0LDM3Mzc1LDM3Mzc2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzg3LDM3Mzg4''@;'; put 'put ''LDM3Mzg5LDM3MzkwLDM3MzkxLDM3MzkyLDM3MzkzLDM3Mzk0LDM3Mzk1LDM3Mzk2LDM3Mzk3LDM3Mzk4LDM3Mzk5LDM3NDAwLDM3NDAxLDM3NDAyLDM3NDAzLDM3NDA0LDM3NDA1LDM3NDA2LDM3NDA3LDM3NDA4LDM3NDA5LDM3NDEwLDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE1LDM3''@;'; put 'put ''NDE2LDM3NDE3LDM3NDE4LDM3NDE5LDM3NDIwLDM3NDIxLDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI1LDM3NDI2LDM3NDI3LDM3NDI4LDM3NDI5LDM3NDMwLDM3NDMxLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM1LDM3NDM2LDM3NDM3LDM3NDM4LDM3NDM5LDM3NDQwLDM3NDQxLDM3NDQyLDM3NDQz''@;'; put 'put ''LDM3NDQ0LDM3NDQ1LDI5NDM1LDI5NDYzLDI5NDU5LDI5NDczLDI5NDUwLDI5NDcwLDI5NDY5LDI5NDYxLDI5NDc0LDI5NDk3LDI5NDc3LDI5NDg0LDI5NDk2LDI5NDg5LDI5NTIwLDI5NTE3LDI5NTI3LDI5NTM2LDI5NTQ4LDI5NTUxLDI5NTY2LDMzMzA3LDIyODIxLDM5MTQzLDIyODIwLDIy''@;'; put 'put ''Nzg2LDM5MjY3LDM5MjcxLDM5MjcyLDM5MjczLDM5Mjc0LDM5Mjc1LDM5Mjc2LDM5Mjg0LDM5Mjg3LDM5MjkzLDM5Mjk2LDM5MzAwLDM5MzAzLDM5MzA2LDM5MzA5LDM5MzEyLDM5MzEzLDM5MzE1LDM5MzE2LDM5MzE3LDI0MTkyLDI0MjA5LDI0MjAzLDI0MjE0LDI0MjI5LDI0MjI0LDI0MjQ5''@;'; put 'put ''LDI0MjQ1LDI0MjU0LDI0MjQzLDM2MTc5LDI0Mjc0LDI0MjczLDI0MjgzLDI0Mjk2LDI0Mjk4LDMzMjEwLDI0NTE2LDI0NTIxLDI0NTM0LDI0NTI3LDI0NTc5LDI0NTU4LDI0NTgwLDI0NTQ1LDI0NTQ4LDI0NTc0LDI0NTgxLDI0NTgyLDI0NTU0LDI0NTU3LDI0NTY4LDI0NjAxLDI0NjI5LDI0''@;'; put 'put ''NjE0LDI0NjAzLDI0NTkxLDI0NTg5LDI0NjE3LDI0NjE5LDI0NTg2LDI0NjM5LDI0NjA5LDI0Njk2LDI0Njk3LDI0Njk5LDI0Njk4LDI0NjQyLDM3NDQ2LDM3NDQ3LDM3NDQ4LDM3NDQ5LDM3NDUwLDM3NDUxLDM3NDUyLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU2LDM3NDU3LDM3NDU4LDM3NDU5''@;'; put 'put ''LDM3NDYwLDM3NDYxLDM3NDYyLDM3NDYzLDM3NDY0LDM3NDY1LDM3NDY2LDM3NDY3LDM3NDY4LDM3NDY5LDM3NDcwLDM3NDcxLDM3NDcyLDM3NDczLDM3NDc0LDM3NDc1LDM3NDc2LDM3NDc3LDM3NDc4LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDgyLDM3NDgzLDM3NDg0LDM3NDg1LDM3NDg2LDM3''@;'; put 'put ''NDg3LDM3NDg4LDM3NDg5LDM3NDkwLDM3NDkxLDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk4LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAyLDM3NTAzLDM3NTA0LDM3NTA1LDM3NTA2LDM3NTA3LDM3NTA4LDM3NTA5LDM3NTEwLDM3NTExLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE1''@;'; put 'put ''LDM3NTE2LDM3NTE3LDM3NTE5LDM3NTIwLDM3NTIxLDM3NTIyLDM3NTIzLDM3NTI0LDM3NTI1LDM3NTI2LDM3NTI3LDM3NTI4LDM3NTI5LDM3NTMwLDM3NTMxLDM3NTMyLDM3NTMzLDM3NTM0LDM3NTM1LDM3NTM2LDM3NTM3LDM3NTM4LDM3NTM5LDM3NTQwLDM3NTQxLDM3NTQyLDM3NTQzLDI0''@;'; put 'put ''NjgyLDI0NzAxLDI0NzI2LDI0NzMwLDI0NzQ5LDI0NzMzLDI0NzA3LDI0NzIyLDI0NzE2LDI0NzMxLDI0ODEyLDI0NzYzLDI0NzUzLDI0Nzk3LDI0NzkyLDI0Nzc0LDI0Nzk0LDI0NzU2LDI0ODY0LDI0ODcwLDI0ODUzLDI0ODY3LDI0ODIwLDI0ODMyLDI0ODQ2LDI0ODc1LDI0OTA2LDI0OTQ5''@;'; put 'put ''LDI1MDA0LDI0OTgwLDI0OTk5LDI1MDE1LDI1MDQ0LDI1MDc3LDI0NTQxLDM4NTc5LDM4Mzc3LDM4Mzc5LDM4Mzg1LDM4Mzg3LDM4Mzg5LDM4MzkwLDM4Mzk2LDM4Mzk4LDM4NDAzLDM4NDA0LDM4NDA2LDM4NDA4LDM4NDEwLDM4NDExLDM4NDEyLDM4NDEzLDM4NDE1LDM4NDE4LDM4NDIxLDM4''@;'; put 'put ''NDIyLDM4NDIzLDM4NDI1LDM4NDI2LDIwMDEyLDI5MjQ3LDI1MTA5LDI3NzAxLDI3NzMyLDI3NzQwLDI3NzIyLDI3ODExLDI3NzgxLDI3NzkyLDI3Nzk2LDI3Nzg4LDI3NzUyLDI3NzUzLDI3NzY0LDI3NzY2LDI3NzgyLDI3ODE3LDI3ODU2LDI3ODYwLDI3ODIxLDI3ODk1LDI3ODk2LDI3ODg5''@;'; put 'put ''LDI3ODYzLDI3ODI2LDI3ODcyLDI3ODYyLDI3ODk4LDI3ODgzLDI3ODg2LDI3ODI1LDI3ODU5LDI3ODg3LDI3OTAyLDM3NTQ0LDM3NTQ1LDM3NTQ2LDM3NTQ3LDM3NTQ4LDM3NTQ5LDM3NTUxLDM3NTUyLDM3NTUzLDM3NTU0LDM3NTU1LDM3NTU2LDM3NTU3LDM3NTU4LDM3NTU5LDM3NTYwLDM3''@;'; put 'put ''NTYxLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY2LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTcyLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc3LDM3NTc4LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTgzLDM3NTg0LDM3NTg1LDM3NTg2LDM3NTg3LDM3NTg4LDM3NTg5''@;'; put 'put ''LDM3NTkwLDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk0LDM3NTk1LDM3NTk2LDM3NTk3LDM3NTk4LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAyLDM3NjAzLDM3NjA0LDM3NjA1LDM3NjA2LDM3NjA3LDM3NjA4LDM3NjA5LDM3NjEwLDM3NjExLDM3NjEyLDM3NjEzLDM3NjE0LDM3NjE1LDM3NjE2LDM3''@;'; put 'put ''NjE3LDM3NjE4LDM3NjE5LDM3NjIwLDM3NjIxLDM3NjIyLDM3NjIzLDM3NjI0LDM3NjI1LDM3NjI2LDM3NjI3LDM3NjI4LDM3NjI5LDM3NjMwLDM3NjMxLDM3NjMyLDM3NjMzLDM3NjM0LDM3NjM1LDM3NjM2LDM3NjM3LDM3NjM4LDM3NjM5LDM3NjQwLDM3NjQxLDI3OTYxLDI3OTQzLDI3OTE2''@;'; put 'put ''LDI3OTcxLDI3OTc2LDI3OTExLDI3OTA4LDI3OTI5LDI3OTE4LDI3OTQ3LDI3OTgxLDI3OTUwLDI3OTU3LDI3OTMwLDI3OTgzLDI3OTg2LDI3OTg4LDI3OTU1LDI4MDQ5LDI4MDE1LDI4MDYyLDI4MDY0LDI3OTk4LDI4MDUxLDI4MDUyLDI3OTk2LDI4ZTMsMjgwMjgsMjgwMDMsMjgxODYsMjgx''@;'; put 'put ''MDMsMjgxMDEsMjgxMjYsMjgxNzQsMjgwOTUsMjgxMjgsMjgxNzcsMjgxMzQsMjgxMjUsMjgxMjEsMjgxODIsMjgwNzUsMjgxNzIsMjgwNzgsMjgyMDMsMjgyNzAsMjgyMzgsMjgyNjcsMjgzMzgsMjgyNTUsMjgyOTQsMjgyNDMsMjgyNDQsMjgyMTAsMjgxOTcsMjgyMjgsMjgzODMsMjgzMzcs''@;'; put 'put ''MjgzMTIsMjgzODQsMjg0NjEsMjgzODYsMjgzMjUsMjgzMjcsMjgzNDksMjgzNDcsMjgzNDMsMjgzNzUsMjgzNDAsMjgzNjcsMjgzMDMsMjgzNTQsMjgzMTksMjg1MTQsMjg0ODYsMjg0ODcsMjg0NTIsMjg0MzcsMjg0MDksMjg0NjMsMjg0NzAsMjg0OTEsMjg1MzIsMjg0NTgsMjg0MjUsMjg0''@;'; put 'put ''NTcsMjg1NTMsMjg1NTcsMjg1NTYsMjg1MzYsMjg1MzAsMjg1NDAsMjg1MzgsMjg2MjUsMzc2NDIsMzc2NDMsMzc2NDQsMzc2NDUsMzc2NDYsMzc2NDcsMzc2NDgsMzc2NDksMzc2NTAsMzc2NTEsMzc2NTIsMzc2NTMsMzc2NTQsMzc2NTUsMzc2NTYsMzc2NTcsMzc2NTgsMzc2NTksMzc2NjAs''@;'; put 'put ''Mzc2NjEsMzc2NjIsMzc2NjMsMzc2NjQsMzc2NjUsMzc2NjYsMzc2NjcsMzc2NjgsMzc2NjksMzc2NzAsMzc2NzEsMzc2NzIsMzc2NzMsMzc2NzQsMzc2NzUsMzc2NzYsMzc2NzcsMzc2NzgsMzc2NzksMzc2ODAsMzc2ODEsMzc2ODIsMzc2ODMsMzc2ODQsMzc2ODUsMzc2ODYsMzc2ODcsMzc2''@;'; put 'put ''ODgsMzc2ODksMzc2OTAsMzc2OTEsMzc2OTIsMzc2OTMsMzc2OTUsMzc2OTYsMzc2OTcsMzc2OTgsMzc2OTksMzc3MDAsMzc3MDEsMzc3MDIsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MDYsMzc3MDcsMzc3MDgsMzc3MDksMzc3MTAsMzc3MTEsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTUsMzc3MTYs''@;'; put 'put ''Mzc3MTcsMzc3MTgsMzc3MTksMzc3MjAsMzc3MjEsMzc3MjIsMzc3MjMsMzc3MjQsMzc3MjUsMzc3MjYsMzc3MjcsMzc3MjgsMzc3MjksMzc3MzAsMzc3MzEsMzc3MzIsMzc3MzMsMzc3MzQsMzc3MzUsMzc3MzYsMzc3MzcsMzc3MzksMjg2MTcsMjg1ODMsMjg2MDEsMjg1OTgsMjg2MTAsMjg2''@;'; put 'put ''NDEsMjg2NTQsMjg2MzgsMjg2NDAsMjg2NTUsMjg2OTgsMjg3MDcsMjg2OTksMjg3MjksMjg3MjUsMjg3NTEsMjg3NjYsMjM0MjQsMjM0MjgsMjM0NDUsMjM0NDMsMjM0NjEsMjM0ODAsMjk5OTksMzk1ODIsMjU2NTIsMjM1MjQsMjM1MzQsMzUxMjAsMjM1MzYsMzY0MjMsMzU1OTEsMzY3OTAs''@;'; put 'put ''MzY4MTksMzY4MjEsMzY4MzcsMzY4NDYsMzY4MzYsMzY4NDEsMzY4MzgsMzY4NTEsMzY4NDAsMzY4NjksMzY4NjgsMzY4NzUsMzY5MDIsMzY4ODEsMzY4NzcsMzY4ODYsMzY4OTcsMzY5MTcsMzY5MTgsMzY5MDksMzY5MTEsMzY5MzIsMzY5NDUsMzY5NDYsMzY5NDQsMzY5NjgsMzY5NTIsMzY5''@;'; put 'put ''NjIsMzY5NTUsMjYyOTcsMzY5ODAsMzY5ODksMzY5OTQsMzdlMywzNjk5NSwzNzAwMywyNDQwMCwyNDQwNywyNDQwNiwyNDQwOCwyMzYxMSwyMTY3NSwyMzYzMiwyMzY0MSwyMzQwOSwyMzY1MSwyMzY1NCwzMjcwMCwyNDM2MiwyNDM2MSwyNDM2NSwzMzM5NiwyNDM4MCwzOTczOSwyMzY2Miwy''@;'; put 'put ''MjkxMywyMjkxNSwyMjkyNSwyMjk1MywyMjk1NCwyMjk0NywzNzc0MCwzNzc0MSwzNzc0MiwzNzc0MywzNzc0NCwzNzc0NSwzNzc0NiwzNzc0NywzNzc0OCwzNzc0OSwzNzc1MCwzNzc1MSwzNzc1MiwzNzc1MywzNzc1NCwzNzc1NSwzNzc1NiwzNzc1NywzNzc1OCwzNzc1OSwzNzc2MCwzNzc2''@;'; put 'put ''MSwzNzc2MiwzNzc2MywzNzc2NCwzNzc2NSwzNzc2NiwzNzc2NywzNzc2OCwzNzc2OSwzNzc3MCwzNzc3MSwzNzc3MiwzNzc3MywzNzc3NCwzNzc3NiwzNzc3NywzNzc3OCwzNzc3OSwzNzc4MCwzNzc4MSwzNzc4MiwzNzc4MywzNzc4NCwzNzc4NSwzNzc4NiwzNzc4NywzNzc4OCwzNzc4OSwz''@;'; put 'put ''Nzc5MCwzNzc5MSwzNzc5MiwzNzc5MywzNzc5NCwzNzc5NSwzNzc5NiwzNzc5NywzNzc5OCwzNzc5OSwzNzgwMCwzNzgwMSwzNzgwMiwzNzgwMywzNzgwNCwzNzgwNSwzNzgwNiwzNzgwNywzNzgwOCwzNzgwOSwzNzgxMCwzNzgxMSwzNzgxMiwzNzgxMywzNzgxNCwzNzgxNSwzNzgxNiwzNzgx''@;'; put 'put ''NywzNzgxOCwzNzgxOSwzNzgyMCwzNzgyMSwzNzgyMiwzNzgyMywzNzgyNCwzNzgyNSwzNzgyNiwzNzgyNywzNzgyOCwzNzgyOSwzNzgzMCwzNzgzMSwzNzgzMiwzNzgzMywzNzgzNSwzNzgzNiwzNzgzNywyMjkzNSwyMjk4NiwyMjk1NSwyMjk0MiwyMjk0OCwyMjk5NCwyMjk2MiwyMjk1OSwy''@;'; put 'put ''Mjk5OSwyMjk3NCwyMzA0NSwyMzA0NiwyMzAwNSwyMzA0OCwyMzAxMSwyM2UzLDIzMDMzLDIzMDUyLDIzMDQ5LDIzMDkwLDIzMDkyLDIzMDU3LDIzMDc1LDIzMDU5LDIzMTA0LDIzMTQzLDIzMTE0LDIzMTI1LDIzMTAwLDIzMTM4LDIzMTU3LDMzMDA0LDIzMjEwLDIzMTk1LDIzMTU5LDIzMTYy''@;'; put 'put ''LDIzMjMwLDIzMjc1LDIzMjE4LDIzMjUwLDIzMjUyLDIzMjI0LDIzMjY0LDIzMjY3LDIzMjgxLDIzMjU0LDIzMjcwLDIzMjU2LDIzMjYwLDIzMzA1LDIzMzE5LDIzMzE4LDIzMzQ2LDIzMzUxLDIzMzYwLDIzNTczLDIzNTgwLDIzMzg2LDIzMzk3LDIzNDExLDIzMzc3LDIzMzc5LDIzMzk0LDM5''@;'; put 'put ''NTQxLDM5NTQzLDM5NTQ0LDM5NTQ2LDM5NTUxLDM5NTQ5LDM5NTUyLDM5NTUzLDM5NTU3LDM5NTYwLDM5NTYyLDM5NTY4LDM5NTcwLDM5NTcxLDM5NTc0LDM5NTc2LDM5NTc5LDM5NTgwLDM5NTgxLDM5NTgzLDM5NTg0LDM5NTg2LDM5NTg3LDM5NTg5LDM5NTkxLDMyNDE1LDMyNDE3LDMyNDE5''@;'; put 'put ''LDMyNDIxLDMyNDI0LDMyNDI1LDM3ODM4LDM3ODM5LDM3ODQwLDM3ODQxLDM3ODQyLDM3ODQzLDM3ODQ0LDM3ODQ1LDM3ODQ3LDM3ODQ4LDM3ODQ5LDM3ODUwLDM3ODUxLDM3ODUyLDM3ODUzLDM3ODU0LDM3ODU1LDM3ODU2LDM3ODU3LDM3ODU4LDM3ODU5LDM3ODYwLDM3ODYxLDM3ODYyLDM3''@;'; put 'put ''ODYzLDM3ODY0LDM3ODY1LDM3ODY2LDM3ODY3LDM3ODY4LDM3ODY5LDM3ODcwLDM3ODcxLDM3ODcyLDM3ODczLDM3ODc0LDM3ODc1LDM3ODc2LDM3ODc3LDM3ODc4LDM3ODc5LDM3ODgwLDM3ODgxLDM3ODgyLDM3ODgzLDM3ODg0LDM3ODg1LDM3ODg2LDM3ODg3LDM3ODg4LDM3ODg5LDM3ODkw''@;'; put 'put ''LDM3ODkxLDM3ODkyLDM3ODkzLDM3ODk0LDM3ODk1LDM3ODk2LDM3ODk3LDM3ODk4LDM3ODk5LDM3OTAwLDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA0LDM3OTA1LDM3OTA2LDM3OTA3LDM3OTA4LDM3OTA5LDM3OTEwLDM3OTExLDM3OTEyLDM3OTEzLDM3OTE0LDM3OTE1LDM3OTE2LDM3OTE3LDM3''@;'; put 'put ''OTE4LDM3OTE5LDM3OTIwLDM3OTIxLDM3OTIyLDM3OTIzLDM3OTI0LDM3OTI1LDM3OTI2LDM3OTI3LDM3OTI4LDM3OTI5LDM3OTMwLDM3OTMxLDM3OTMyLDM3OTMzLDM3OTM0LDMyNDI5LDMyNDMyLDMyNDQ2LDMyNDQ4LDMyNDQ5LDMyNDUwLDMyNDU3LDMyNDU5LDMyNDYwLDMyNDY0LDMyNDY4''@;'; put 'put ''LDMyNDcxLDMyNDc1LDMyNDgwLDMyNDgxLDMyNDg4LDMyNDkxLDMyNDk0LDMyNDk1LDMyNDk3LDMyNDk4LDMyNTI1LDMyNTAyLDMyNTA2LDMyNTA3LDMyNTEwLDMyNTEzLDMyNTE0LDMyNTE1LDMyNTE5LDMyNTIwLDMyNTIzLDMyNTI0LDMyNTI3LDMyNTI5LDMyNTMwLDMyNTM1LDMyNTM3LDMy''@;'; put 'put ''NTQwLDMyNTM5LDMyNTQzLDMyNTQ1LDMyNTQ2LDMyNTQ3LDMyNTQ4LDMyNTQ5LDMyNTUwLDMyNTUxLDMyNTU0LDMyNTU1LDMyNTU2LDMyNTU3LDMyNTU5LDMyNTYwLDMyNTYxLDMyNTYyLDMyNTYzLDMyNTY1LDI0MTg2LDMwMDc5LDI0MDI3LDMwMDE0LDM3MDEzLDI5NTgyLDI5NTg1LDI5NjE0''@;'; put 'put ''LDI5NjAyLDI5NTk5LDI5NjQ3LDI5NjM0LDI5NjQ5LDI5NjIzLDI5NjE5LDI5NjMyLDI5NjQxLDI5NjQwLDI5NjY5LDI5NjU3LDM5MDM2LDI5NzA2LDI5NjczLDI5NjcxLDI5NjYyLDI5NjI2LDI5NjgyLDI5NzExLDI5NzM4LDI5Nzg3LDI5NzM0LDI5NzMzLDI5NzM2LDI5NzQ0LDI5NzQyLDI5''@;'; put 'put ''NzQwLDM3OTM1LDM3OTM2LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQxLDM3OTQyLDM3OTQzLDM3OTQ0LDM3OTQ1LDM3OTQ2LDM3OTQ3LDM3OTQ4LDM3OTQ5LDM3OTUxLDM3OTUyLDM3OTUzLDM3OTU0LDM3OTU1LDM3OTU2LDM3OTU3LDM3OTU4LDM3OTU5LDM3OTYwLDM3OTYxLDM3OTYy''@;'; put 'put ''LDM3OTYzLDM3OTY0LDM3OTY1LDM3OTY2LDM3OTY3LDM3OTY4LDM3OTY5LDM3OTcwLDM3OTcxLDM3OTcyLDM3OTczLDM3OTc0LDM3OTc1LDM3OTc2LDM3OTc3LDM3OTc4LDM3OTc5LDM3OTgwLDM3OTgxLDM3OTgyLDM3OTgzLDM3OTg0LDM3OTg1LDM3OTg2LDM3OTg3LDM3OTg4LDM3OTg5LDM3''@;'; put 'put ''OTkwLDM3OTkxLDM3OTkyLDM3OTkzLDM3OTk0LDM3OTk2LDM3OTk3LDM3OTk4LDM3OTk5LDM4ZTMsMzgwMDEsMzgwMDIsMzgwMDMsMzgwMDQsMzgwMDUsMzgwMDYsMzgwMDcsMzgwMDgsMzgwMDksMzgwMTAsMzgwMTEsMzgwMTIsMzgwMTMsMzgwMTQsMzgwMTUsMzgwMTYsMzgwMTcsMzgwMTgs''@;'; put 'put ''MzgwMTksMzgwMjAsMzgwMzMsMzgwMzgsMzgwNDAsMzgwODcsMzgwOTUsMzgwOTksMzgxMDAsMzgxMDYsMzgxMTgsMzgxMzksMzgxNzIsMzgxNzYsMjk3MjMsMjk3MjIsMjk3NjEsMjk3ODgsMjk3ODMsMjk3ODEsMjk3ODUsMjk4MTUsMjk4MDUsMjk4MjIsMjk4NTIsMjk4MzgsMjk4MjQsMjk4''@;'; put 'put ''MjUsMjk4MzEsMjk4MzUsMjk4NTQsMjk4NjQsMjk4NjUsMjk4NDAsMjk4NjMsMjk5MDYsMjk4ODIsMzg4OTAsMzg4OTEsMzg4OTIsMjY0NDQsMjY0NTEsMjY0NjIsMjY0NDAsMjY0NzMsMjY1MzMsMjY1MDMsMjY0NzQsMjY0ODMsMjY1MjAsMjY1MzUsMjY0ODUsMjY1MzYsMjY1MjYsMjY1NDEs''@;'; put 'put ''MjY1MDcsMjY0ODcsMjY0OTIsMjY2MDgsMjY2MzMsMjY1ODQsMjY2MzQsMjY2MDEsMjY1NDQsMjY2MzYsMjY1ODUsMjY1NDksMjY1ODYsMjY1NDcsMjY1ODksMjY2MjQsMjY1NjMsMjY1NTIsMjY1OTQsMjY2MzgsMjY1NjEsMjY2MjEsMjY2NzQsMjY2NzUsMjY3MjAsMjY3MjEsMjY3MDIsMjY3''@;'; put 'put ''MjIsMjY2OTIsMjY3MjQsMjY3NTUsMjY2NTMsMjY3MDksMjY3MjYsMjY2ODksMjY3MjcsMjY2ODgsMjY2ODYsMjY2OTgsMjY2OTcsMjY2NjUsMjY4MDUsMjY3NjcsMjY3NDAsMjY3NDMsMjY3NzEsMjY3MzEsMjY4MTgsMjY5OTAsMjY4NzYsMjY5MTEsMjY5MTIsMjY4NzMsMzgxODMsMzgxOTUs''@;'; put 'put ''MzgyMDUsMzgyMTEsMzgyMTYsMzgyMTksMzgyMjksMzgyMzQsMzgyNDAsMzgyNTQsMzgyNjAsMzgyNjEsMzgyNjMsMzgyNjQsMzgyNjUsMzgyNjYsMzgyNjcsMzgyNjgsMzgyNjksMzgyNzAsMzgyNzIsMzgyNzMsMzgyNzQsMzgyNzUsMzgyNzYsMzgyNzcsMzgyNzgsMzgyNzksMzgyODAsMzgy''@;'; put 'put ''ODEsMzgyODIsMzgyODMsMzgyODQsMzgyODUsMzgyODYsMzgyODcsMzgyODgsMzgyODksMzgyOTAsMzgyOTEsMzgyOTIsMzgyOTMsMzgyOTQsMzgyOTUsMzgyOTYsMzgyOTcsMzgyOTgsMzgyOTksMzgzMDAsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDQsMzgzMDUsMzgzMDYsMzgzMDcsMzgzMDgs''@;'; put 'put ''MzgzMDksMzgzMTAsMzgzMTEsMzgzMTIsMzgzMTMsMzgzMTQsMzgzMTUsMzgzMTYsMzgzMTcsMzgzMTgsMzgzMTksMzgzMjAsMzgzMjEsMzgzMjIsMzgzMjMsMzgzMjQsMzgzMjUsMzgzMjYsMzgzMjcsMzgzMjgsMzgzMjksMzgzMzAsMzgzMzEsMzgzMzIsMzgzMzMsMzgzMzQsMzgzMzUsMzgz''@;'; put 'put ''MzYsMzgzMzcsMzgzMzgsMzgzMzksMzgzNDAsMzgzNDEsMzgzNDIsMzgzNDMsMzgzNDQsMzgzNDUsMzgzNDYsMzgzNDcsMjY5MTYsMjY4NjQsMjY4OTEsMjY4ODEsMjY5NjcsMjY4NTEsMjY4OTYsMjY5OTMsMjY5MzcsMjY5NzYsMjY5NDYsMjY5NzMsMjcwMTIsMjY5ODcsMjcwMDgsMjcwMzIs''@;'; put 'put ''MjdlMywyNjkzMiwyNzA4NCwyNzAxNSwyNzAxNiwyNzA4NiwyNzAxNywyNjk4MiwyNjk3OSwyNzAwMSwyNzAzNSwyNzA0NywyNzA2NywyNzA1MSwyNzA1MywyNzA5MiwyNzA1NywyNzA3MywyNzA4MiwyNzEwMywyNzAyOSwyNzEwNCwyNzAyMSwyNzEzNSwyNzE4MywyNzExNywyNzE1OSwyNzE2''@;'; put 'put ''MCwyNzIzNywyNzEyMiwyNzIwNCwyNzE5OCwyNzI5NiwyNzIxNiwyNzIyNywyNzE4OSwyNzI3OCwyNzI1NywyNzE5NywyNzE3NiwyNzIyNCwyNzI2MCwyNzI4MSwyNzI4MCwyNzMwNSwyNzI4NywyNzMwNywyOTQ5NSwyOTUyMiwyNzUyMSwyNzUyMiwyNzUyNywyNzUyNCwyNzUzOCwyNzUzOSwy''@;'; put 'put ''NzUzMywyNzU0NiwyNzU0NywyNzU1MywyNzU2MiwzNjcxNSwzNjcxNywzNjcyMSwzNjcyMiwzNjcyMywzNjcyNSwzNjcyNiwzNjcyOCwzNjcyNywzNjcyOSwzNjczMCwzNjczMiwzNjczNCwzNjczNywzNjczOCwzNjc0MCwzNjc0MywzNjc0NywzODM0OCwzODM0OSwzODM1MCwzODM1MSwzODM1''@;'; put 'put ''MiwzODM1MywzODM1NCwzODM1NSwzODM1NiwzODM1NywzODM1OCwzODM1OSwzODM2MCwzODM2MSwzODM2MiwzODM2MywzODM2NCwzODM2NSwzODM2NiwzODM2NywzODM2OCwzODM2OSwzODM3MCwzODM3MSwzODM3MiwzODM3MywzODM3NCwzODM3NSwzODM4MCwzODM5OSwzODQwNywzODQxOSwz''@;'; put 'put ''ODQyNCwzODQyNywzODQzMCwzODQzMiwzODQzNSwzODQzNiwzODQzNywzODQzOCwzODQzOSwzODQ0MCwzODQ0MSwzODQ0MywzODQ0NCwzODQ0NSwzODQ0NywzODQ0OCwzODQ1NSwzODQ1NiwzODQ1NywzODQ1OCwzODQ2MiwzODQ2NSwzODQ2NywzODQ3NCwzODQ3OCwzODQ3OSwzODQ4MSwzODQ4''@;'; put 'put ''MiwzODQ4MywzODQ4NiwzODQ4NywzODQ4OCwzODQ4OSwzODQ5MCwzODQ5MiwzODQ5MywzODQ5NCwzODQ5NiwzODQ5OSwzODUwMSwzODUwMiwzODUwNywzODUwOSwzODUxMCwzODUxMSwzODUxMiwzODUxMywzODUxNSwzODUyMCwzODUyMSwzODUyMiwzODUyMywzODUyNCwzODUyNSwzODUyNiwz''@;'; put 'put ''ODUyNywzODUyOCwzODUyOSwzODUzMCwzODUzMSwzODUzMiwzODUzNSwzODUzNywzODUzOCwzNjc0OSwzNjc1MCwzNjc1MSwzNjc2MCwzNjc2MiwzNjU1OCwyNTA5OSwyNTExMSwyNTExNSwyNTExOSwyNTEyMiwyNTEyMSwyNTEyNSwyNTEyNCwyNTEzMiwzMzI1NSwyOTkzNSwyOTk0MCwyOTk1''@;'; put 'put ''MSwyOTk2NywyOTk2OSwyOTk3MSwyNTkwOCwyNjA5NCwyNjA5NSwyNjA5NiwyNjEyMiwyNjEzNywyNjQ4MiwyNjExNSwyNjEzMywyNjExMiwyODgwNSwyNjM1OSwyNjE0MSwyNjE2NCwyNjE2MSwyNjE2NiwyNjE2NSwzMjc3NCwyNjIwNywyNjE5NiwyNjE3NywyNjE5MSwyNjE5OCwyNjIwOSwy''@;'; put 'put ''NjE5OSwyNjIzMSwyNjI0NCwyNjI1MiwyNjI3OSwyNjI2OSwyNjMwMiwyNjMzMSwyNjMzMiwyNjM0MiwyNjM0NSwzNjE0NiwzNjE0NywzNjE1MCwzNjE1NSwzNjE1NywzNjE2MCwzNjE2NSwzNjE2NiwzNjE2OCwzNjE2OSwzNjE2NywzNjE3MywzNjE4MSwzNjE4NSwzNTI3MSwzNTI3NCwzNTI3''@;'; put 'put ''NSwzNTI3NiwzNTI3OCwzNTI3OSwzNTI4MCwzNTI4MSwyOTI5NCwyOTM0MywyOTI3NywyOTI4NiwyOTI5NSwyOTMxMCwyOTMxMSwyOTMxNiwyOTMyMywyOTMyNSwyOTMyNywyOTMzMCwyNTM1MiwyNTM5NCwyNTUyMCwzODU0MCwzODU0MiwzODU0NSwzODU0NiwzODU0NywzODU0OSwzODU1MCwz''@;'; put 'put ''ODU1NCwzODU1NSwzODU1NywzODU1OCwzODU1OSwzODU2MCwzODU2MSwzODU2MiwzODU2MywzODU2NCwzODU2NSwzODU2NiwzODU2OCwzODU2OSwzODU3MCwzODU3MSwzODU3MiwzODU3MywzODU3NCwzODU3NSwzODU3NywzODU3OCwzODU4MCwzODU4MSwzODU4MywzODU4NCwzODU4NiwzODU4''@;'; put 'put ''NywzODU5MSwzODU5NCwzODU5NSwzODYwMCwzODYwMiwzODYwMywzODYwOCwzODYwOSwzODYxMSwzODYxMiwzODYxNCwzODYxNSwzODYxNiwzODYxNywzODYxOCwzODYxOSwzODYyMCwzODYyMSwzODYyMiwzODYyMywzODYyNSwzODYyNiwzODYyNywzODYyOCwzODYyOSwzODYzMCwzODYzMSwz''@;'; put 'put ''ODYzNSwzODYzNiwzODYzNywzODYzOCwzODY0MCwzODY0MSwzODY0MiwzODY0NCwzODY0NSwzODY0OCwzODY1MCwzODY1MSwzODY1MiwzODY1MywzODY1NSwzODY1OCwzODY1OSwzODY2MSwzODY2NiwzODY2NywzODY2OCwzODY3MiwzODY3MywzODY3NCwzODY3NiwzODY3NywzODY3OSwzODY4''@;'; put 'put ''MCwzODY4MSwzODY4MiwzODY4MywzODY4NSwzODY4NywzODY4OCwyNTY2MywyNTgxNiwzMjc3MiwyNzYyNiwyNzYzNSwyNzY0NSwyNzYzNywyNzY0MSwyNzY1MywyNzY1NSwyNzY1NCwyNzY2MSwyNzY2OSwyNzY3MiwyNzY3MywyNzY3NCwyNzY4MSwyNzY4OSwyNzY4NCwyNzY5MCwyNzY5OCwy''@;'; put 'put ''NTkwOSwyNTk0MSwyNTk2MywyOTI2MSwyOTI2NiwyOTI3MCwyOTIzMiwzNDQwMiwyMTAxNCwzMjkyNywzMjkyNCwzMjkxNSwzMjk1NiwyNjM3OCwzMjk1NywzMjk0NSwzMjkzOSwzMjk0MSwzMjk0OCwzMjk1MSwzMjk5OSwzM2UzLDMzMDAxLDMzMDAyLDMyOTg3LDMyOTYyLDMyOTY0LDMyOTg1''@;'; put 'put ''LDMyOTczLDMyOTgzLDI2Mzg0LDMyOTg5LDMzMDAzLDMzMDA5LDMzMDEyLDMzMDA1LDMzMDM3LDMzMDM4LDMzMDEwLDMzMDIwLDI2Mzg5LDMzMDQyLDM1OTMwLDMzMDc4LDMzMDU0LDMzMDY4LDMzMDQ4LDMzMDc0LDMzMDk2LDMzMTAwLDMzMTA3LDMzMTQwLDMzMTEzLDMzMTE0LDMzMTM3LDMz''@;'; put 'put ''MTIwLDMzMTI5LDMzMTQ4LDMzMTQ5LDMzMTMzLDMzMTI3LDIyNjA1LDIzMjIxLDMzMTYwLDMzMTU0LDMzMTY5LDI4MzczLDMzMTg3LDMzMTk0LDMzMjI4LDI2NDA2LDMzMjI2LDMzMjExLDM4Njg5LDM4NjkwLDM4NjkxLDM4NjkyLDM4NjkzLDM4Njk0LDM4Njk1LDM4Njk2LDM4Njk3LDM4Njk5''@;'; put 'put ''LDM4NzAwLDM4NzAyLDM4NzAzLDM4NzA1LDM4NzA3LDM4NzA4LDM4NzA5LDM4NzEwLDM4NzExLDM4NzE0LDM4NzE1LDM4NzE2LDM4NzE3LDM4NzE5LDM4NzIwLDM4NzIxLDM4NzIyLDM4NzIzLDM4NzI0LDM4NzI1LDM4NzI2LDM4NzI3LDM4NzI4LDM4NzI5LDM4NzMwLDM4NzMxLDM4NzMyLDM4''@;'; put 'put ''NzMzLDM4NzM0LDM4NzM1LDM4NzM2LDM4NzM3LDM4NzQwLDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ4LDM4NzQ5LDM4NzUxLDM4NzU1LDM4NzU2LDM4NzU4LDM4NzU5LDM4NzYwLDM4NzYyLDM4NzYzLDM4NzY0LDM4NzY1LDM4NzY2LDM4NzY3LDM4NzY4LDM4NzY5LDM4NzcwLDM4Nzcz''@;'; put 'put ''LDM4Nzc1LDM4Nzc2LDM4Nzc3LDM4Nzc4LDM4Nzc5LDM4NzgxLDM4NzgyLDM4NzgzLDM4Nzg0LDM4Nzg1LDM4Nzg2LDM4Nzg3LDM4Nzg4LDM4NzkwLDM4NzkxLDM4NzkyLDM4NzkzLDM4Nzk0LDM4Nzk2LDM4Nzk4LDM4Nzk5LDM4ODAwLDM4ODAzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4''@;'; put 'put ''ODEwLDM4ODExLDM4ODEyLDM4ODEzLDMzMjE3LDMzMTkwLDI3NDI4LDI3NDQ3LDI3NDQ5LDI3NDU5LDI3NDYyLDI3NDgxLDM5MTIxLDM5MTIyLDM5MTIzLDM5MTI1LDM5MTI5LDM5MTMwLDI3NTcxLDI0Mzg0LDI3NTg2LDM1MzE1LDI2ZTMsNDA3ODUsMjYwMDMsMjYwNDQsMjYwNTQsMjYwNTIs''@;'; put 'put ''MjYwNTEsMjYwNjAsMjYwNjIsMjYwNjYsMjYwNzAsMjg4MDAsMjg4MjgsMjg4MjIsMjg4MjksMjg4NTksMjg4NjQsMjg4NTUsMjg4NDMsMjg4NDksMjg5MDQsMjg4NzQsMjg5NDQsMjg5NDcsMjg5NTAsMjg5NzUsMjg5NzcsMjkwNDMsMjkwMjAsMjkwMzIsMjg5OTcsMjkwNDIsMjkwMDIsMjkw''@;'; put 'put ''NDgsMjkwNTAsMjkwODAsMjkxMDcsMjkxMDksMjkwOTYsMjkwODgsMjkxNTIsMjkxNDAsMjkxNTksMjkxNzcsMjkyMTMsMjkyMjQsMjg3ODAsMjg5NTIsMjkwMzAsMjkxMTMsMjUxNTAsMjUxNDksMjUxNTUsMjUxNjAsMjUxNjEsMzEwMzUsMzEwNDAsMzEwNDYsMzEwNDksMzEwNjcsMzEwNjgs''@;'; put 'put ''MzEwNTksMzEwNjYsMzEwNzQsMzEwNjMsMzEwNzIsMzEwODcsMzEwNzksMzEwOTgsMzExMDksMzExMTQsMzExMzAsMzExNDMsMzExNTUsMjQ1MjksMjQ1MjgsMzg4MTQsMzg4MTUsMzg4MTcsMzg4MTgsMzg4MjAsMzg4MjEsMzg4MjIsMzg4MjMsMzg4MjQsMzg4MjUsMzg4MjYsMzg4MjgsMzg4''@;'; put 'put ''MzAsMzg4MzIsMzg4MzMsMzg4MzUsMzg4MzcsMzg4MzgsMzg4MzksMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDMsMzg4NDQsMzg4NDUsMzg4NDYsMzg4NDcsMzg4NDgsMzg4NDksMzg4NTAsMzg4NTEsMzg4NTIsMzg4NTMsMzg4NTQsMzg4NTUsMzg4NTYsMzg4NTcsMzg4NTgsMzg4NTksMzg4NjAs''@;'; put 'put ''Mzg4NjEsMzg4NjIsMzg4NjMsMzg4NjQsMzg4NjUsMzg4NjYsMzg4NjcsMzg4NjgsMzg4NjksMzg4NzAsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzQsMzg4NzUsMzg4NzYsMzg4NzcsMzg4NzgsMzg4NzksMzg4ODAsMzg4ODEsMzg4ODIsMzg4ODMsMzg4ODQsMzg4ODUsMzg4ODgsMzg4OTQsMzg4''@;'; put 'put ''OTUsMzg4OTYsMzg4OTcsMzg4OTgsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDUsMzg5MDYsMzg5MDcsMzg5MDgsMzg5MDksMzg5MTAsMzg5MTEsMzg5MTIsMzg5MTMsMzg5MTQsMzg5MTUsMzg5MTYsMzg5MTcsMzg5MTgsMzg5MTksMzg5MjAsMzg5MjEsMzg5MjIsMzg5MjMsMzg5MjQsMzg5MjUs''@;'; put 'put ''Mzg5MjYsMjQ2MzYsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEsMjQ2NjUsMjQ2NzUsMjQ3NDcsMjQ4MzgsMjQ4NDUsMjQ5MjUsMjUwMDEsMjQ5ODksMjUwMzUsMjUwNDEsMjUwOTQsMzI4OTYsMzI4OTUsMjc3OTUsMjc4OTQsMjgxNTYsMzA3MTAsMzA3MTIsMzA3MjAsMzA3MjksMzA3NDMsMzA3''@;'; put 'put ''NDQsMzA3MzcsMjYwMjcsMzA3NjUsMzA3NDgsMzA3NDksMzA3NzcsMzA3NzgsMzA3NzksMzA3NTEsMzA3ODAsMzA3NTcsMzA3NjQsMzA3NTUsMzA3NjEsMzA3OTgsMzA4MjksMzA4MDYsMzA4MDcsMzA3NTgsMzA4MDAsMzA3OTEsMzA3OTYsMzA4MjYsMzA4NzUsMzA4NjcsMzA4NzQsMzA4NTUs''@;'; put 'put ''MzA4NzYsMzA4ODEsMzA4ODMsMzA4OTgsMzA5MDUsMzA4ODUsMzA5MzIsMzA5MzcsMzA5MjEsMzA5NTYsMzA5NjIsMzA5ODEsMzA5NjQsMzA5OTUsMzEwMTIsMzEwMDYsMzEwMjgsNDA4NTksNDA2OTcsNDA2OTksNDA3MDAsMzA0NDksMzA0NjgsMzA0NzcsMzA0NTcsMzA0NzEsMzA0NzIsMzA0''@;'; put 'put ''OTAsMzA0OTgsMzA0ODksMzA1MDksMzA1MDIsMzA1MTcsMzA1MjAsMzA1NDQsMzA1NDUsMzA1MzUsMzA1MzEsMzA1NTQsMzA1NjgsMzg5MjcsMzg5MjgsMzg5MjksMzg5MzAsMzg5MzEsMzg5MzIsMzg5MzMsMzg5MzQsMzg5MzUsMzg5MzYsMzg5MzcsMzg5MzgsMzg5MzksMzg5NDAsMzg5NDEs''@;'; put 'put ''Mzg5NDIsMzg5NDMsMzg5NDQsMzg5NDUsMzg5NDYsMzg5NDcsMzg5NDgsMzg5NDksMzg5NTAsMzg5NTEsMzg5NTIsMzg5NTMsMzg5NTQsMzg5NTUsMzg5NTYsMzg5NTcsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjEsMzg5NjIsMzg5NjMsMzg5NjQsMzg5NjUsMzg5NjYsMzg5NjcsMzg5NjgsMzg5''@;'; put 'put ''NjksMzg5NzAsMzg5NzEsMzg5NzIsMzg5NzMsMzg5NzQsMzg5NzUsMzg5NzYsMzg5NzcsMzg5NzgsMzg5NzksMzg5ODAsMzg5ODEsMzg5ODIsMzg5ODMsMzg5ODQsMzg5ODUsMzg5ODYsMzg5ODcsMzg5ODgsMzg5ODksMzg5OTAsMzg5OTEsMzg5OTIsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTYs''@;'; put 'put ''Mzg5OTcsMzg5OTgsMzg5OTksMzllMywzOTAwMSwzOTAwMiwzOTAwMywzOTAwNCwzOTAwNSwzOTAwNiwzOTAwNywzOTAwOCwzOTAwOSwzOTAxMCwzOTAxMSwzOTAxMiwzOTAxMywzOTAxNCwzOTAxNSwzOTAxNiwzOTAxNywzOTAxOCwzOTAxOSwzOTAyMCwzOTAyMSwzOTAyMiwzMDU2MiwzMDU2''@;'; put 'put ''NSwzMDU5MSwzMDYwNSwzMDU4OSwzMDU5MiwzMDYwNCwzMDYwOSwzMDYyMywzMDYyNCwzMDY0MCwzMDY0NSwzMDY1MywzMDAxMCwzMDAxNiwzMDAzMCwzMDAyNywzMDAyNCwzMDA0MywzMDA2NiwzMDA3MywzMDA4MywzMjYwMCwzMjYwOSwzMjYwNywzNTQwMCwzMjYxNiwzMjYyOCwzMjYyNSwz''@;'; put 'put ''MjYzMywzMjY0MSwzMjYzOCwzMDQxMywzMDQzNywzNDg2NiwzODAyMSwzODAyMiwzODAyMywzODAyNywzODAyNiwzODAyOCwzODAyOSwzODAzMSwzODAzMiwzODAzNiwzODAzOSwzODAzNywzODA0MiwzODA0MywzODA0NCwzODA1MSwzODA1MiwzODA1OSwzODA1OCwzODA2MSwzODA2MCwzODA2''@;'; put 'put ''MywzODA2NCwzODA2NiwzODA2OCwzODA3MCwzODA3MSwzODA3MiwzODA3MywzODA3NCwzODA3NiwzODA3NywzODA3OSwzODA4NCwzODA4OCwzODA4OSwzODA5MCwzODA5MSwzODA5MiwzODA5MywzODA5NCwzODA5NiwzODA5NywzODA5OCwzODEwMSwzODEwMiwzODEwMywzODEwNSwzODEwNCwz''@;'; put 'put ''ODEwNywzODExMCwzODExMSwzODExMiwzODExNCwzODExNiwzODExNywzODExOSwzODEyMCwzODEyMiwzOTAyMywzOTAyNCwzOTAyNSwzOTAyNiwzOTAyNywzOTAyOCwzOTA1MSwzOTA1NCwzOTA1OCwzOTA2MSwzOTA2NSwzOTA3NSwzOTA4MCwzOTA4MSwzOTA4MiwzOTA4MywzOTA4NCwzOTA4''@;'; put 'put ''NSwzOTA4NiwzOTA4NywzOTA4OCwzOTA4OSwzOTA5MCwzOTA5MSwzOTA5MiwzOTA5MywzOTA5NCwzOTA5NSwzOTA5NiwzOTA5NywzOTA5OCwzOTA5OSwzOTEwMCwzOTEwMSwzOTEwMiwzOTEwMywzOTEwNCwzOTEwNSwzOTEwNiwzOTEwNywzOTEwOCwzOTEwOSwzOTExMCwzOTExMSwzOTExMiwz''@;'; put 'put ''OTExMywzOTExNCwzOTExNSwzOTExNiwzOTExNywzOTExOSwzOTEyMCwzOTEyNCwzOTEyNiwzOTEyNywzOTEzMSwzOTEzMiwzOTEzMywzOTEzNiwzOTEzNywzOTEzOCwzOTEzOSwzOTE0MCwzOTE0MSwzOTE0MiwzOTE0NSwzOTE0NiwzOTE0NywzOTE0OCwzOTE0OSwzOTE1MCwzOTE1MSwzOTE1''@;'; put 'put ''MiwzOTE1MywzOTE1NCwzOTE1NSwzOTE1NiwzOTE1NywzOTE1OCwzOTE1OSwzOTE2MCwzOTE2MSwzOTE2MiwzOTE2MywzOTE2NCwzOTE2NSwzOTE2NiwzOTE2NywzOTE2OCwzOTE2OSwzOTE3MCwzOTE3MSwzOTE3MiwzOTE3MywzOTE3NCwzOTE3NSwzODEyMSwzODEyMywzODEyNiwzODEyNywz''@;'; put 'put ''ODEzMSwzODEzMiwzODEzMywzODEzNSwzODEzNywzODE0MCwzODE0MSwzODE0MywzODE0NywzODE0NiwzODE1MCwzODE1MSwzODE1MywzODE1NCwzODE1NywzODE1OCwzODE1OSwzODE2MiwzODE2MywzODE2NCwzODE2NSwzODE2NiwzODE2OCwzODE3MSwzODE3MywzODE3NCwzODE3NSwzODE3''@;'; put 'put ''OCwzODE4NiwzODE4NywzODE4NSwzODE4OCwzODE5MywzODE5NCwzODE5NiwzODE5OCwzODE5OSwzODIwMCwzODIwNCwzODIwNiwzODIwNywzODIxMCwzODE5NywzODIxMiwzODIxMywzODIxNCwzODIxNywzODIyMCwzODIyMiwzODIyMywzODIyNiwzODIyNywzODIyOCwzODIzMCwzODIzMSwz''@;'; put 'put ''ODIzMiwzODIzMywzODIzNSwzODIzOCwzODIzOSwzODIzNywzODI0MSwzODI0MiwzODI0NCwzODI0NSwzODI0NiwzODI0NywzODI0OCwzODI0OSwzODI1MCwzODI1MSwzODI1MiwzODI1NSwzODI1NywzODI1OCwzODI1OSwzODIwMiwzMDY5NSwzMDcwMCwzODYwMSwzMTE4OSwzMTIxMywzMTIw''@;'; put 'put ''MywzMTIxMSwzMTIzOCwyMzg3OSwzMTIzNSwzMTIzNCwzMTI2MiwzMTI1MiwzOTE3NiwzOTE3NywzOTE3OCwzOTE3OSwzOTE4MCwzOTE4MiwzOTE4MywzOTE4NSwzOTE4NiwzOTE4NywzOTE4OCwzOTE4OSwzOTE5MCwzOTE5MSwzOTE5MiwzOTE5MywzOTE5NCwzOTE5NSwzOTE5NiwzOTE5Nywz''@;'; put 'put ''OTE5OCwzOTE5OSwzOTIwMCwzOTIwMSwzOTIwMiwzOTIwMywzOTIwNCwzOTIwNSwzOTIwNiwzOTIwNywzOTIwOCwzOTIwOSwzOTIxMCwzOTIxMSwzOTIxMiwzOTIxMywzOTIxNSwzOTIxNiwzOTIxNywzOTIxOCwzOTIxOSwzOTIyMCwzOTIyMSwzOTIyMiwzOTIyMywzOTIyNCwzOTIyNSwzOTIy''@;'; put 'put ''NiwzOTIyNywzOTIyOCwzOTIyOSwzOTIzMCwzOTIzMSwzOTIzMiwzOTIzMywzOTIzNCwzOTIzNSwzOTIzNiwzOTIzNywzOTIzOCwzOTIzOSwzOTI0MCwzOTI0MSwzOTI0MiwzOTI0MywzOTI0NCwzOTI0NSwzOTI0NiwzOTI0NywzOTI0OCwzOTI0OSwzOTI1MCwzOTI1MSwzOTI1NCwzOTI1NSwz''@;'; put 'put ''OTI1NiwzOTI1NywzOTI1OCwzOTI1OSwzOTI2MCwzOTI2MSwzOTI2MiwzOTI2MywzOTI2NCwzOTI2NSwzOTI2NiwzOTI2OCwzOTI3MCwzOTI4MywzOTI4OCwzOTI4OSwzOTI5MSwzOTI5NCwzOTI5OCwzOTI5OSwzOTMwNSwzMTI4OSwzMTI4NywzMTMxMyw0MDY1NSwzOTMzMywzMTM0NCwzMDM0''@;'; put 'put ''NCwzMDM1MCwzMDM1NSwzMDM2MSwzMDM3MiwyOTkxOCwyOTkyMCwyOTk5Niw0MDQ4MCw0MDQ4Miw0MDQ4OCw0MDQ4OSw0MDQ5MCw0MDQ5MSw0MDQ5Miw0MDQ5OCw0MDQ5Nyw0MDUwMiw0MDUwNCw0MDUwMyw0MDUwNSw0MDUwNiw0MDUxMCw0MDUxMyw0MDUxNCw0MDUxNiw0MDUxOCw0MDUxOSw0''@;'; put 'put ''MDUyMCw0MDUyMSw0MDUyMyw0MDUyNCw0MDUyNiw0MDUyOSw0MDUzMyw0MDUzNSw0MDUzOCw0MDUzOSw0MDU0MCw0MDU0Miw0MDU0Nyw0MDU1MCw0MDU1MSw0MDU1Miw0MDU1Myw0MDU1NCw0MDU1NSw0MDU1Niw0MDU2MSw0MDU1Nyw0MDU2MywzMDA5OCwzMDEwMCwzMDEwMiwzMDExMiwzMDEw''@;'; put 'put ''OSwzMDEyNCwzMDExNSwzMDEzMSwzMDEzMiwzMDEzNiwzMDE0OCwzMDEyOSwzMDEyOCwzMDE0NywzMDE0NiwzMDE2NiwzMDE1NywzMDE3OSwzMDE4NCwzMDE4MiwzMDE4MCwzMDE4NywzMDE4MywzMDIxMSwzMDE5MywzMDIwNCwzMDIwNywzMDIyNCwzMDIwOCwzMDIxMywzMDIyMCwzMDIzMSwz''@;'; put 'put ''MDIxOCwzMDI0NSwzMDIzMiwzMDIyOSwzMDIzMywzOTMwOCwzOTMxMCwzOTMyMiwzOTMyMywzOTMyNCwzOTMyNSwzOTMyNiwzOTMyNywzOTMyOCwzOTMyOSwzOTMzMCwzOTMzMSwzOTMzMiwzOTMzNCwzOTMzNSwzOTMzNywzOTMzOCwzOTMzOSwzOTM0MCwzOTM0MSwzOTM0MiwzOTM0MywzOTM0''@;'; put 'put ''NCwzOTM0NSwzOTM0NiwzOTM0NywzOTM0OCwzOTM0OSwzOTM1MCwzOTM1MSwzOTM1MiwzOTM1MywzOTM1NCwzOTM1NSwzOTM1NiwzOTM1NywzOTM1OCwzOTM1OSwzOTM2MCwzOTM2MSwzOTM2MiwzOTM2MywzOTM2NCwzOTM2NSwzOTM2NiwzOTM2NywzOTM2OCwzOTM2OSwzOTM3MCwzOTM3MSwz''@;'; put 'put ''OTM3MiwzOTM3MywzOTM3NCwzOTM3NSwzOTM3NiwzOTM3NywzOTM3OCwzOTM3OSwzOTM4MCwzOTM4MSwzOTM4MiwzOTM4MywzOTM4NCwzOTM4NSwzOTM4NiwzOTM4NywzOTM4OCwzOTM4OSwzOTM5MCwzOTM5MSwzOTM5MiwzOTM5MywzOTM5NCwzOTM5NSwzOTM5NiwzOTM5NywzOTM5OCwzOTM5''@;'; put 'put ''OSwzOTQwMCwzOTQwMSwzOTQwMiwzOTQwMywzOTQwNCwzOTQwNSwzOTQwNiwzOTQwNywzOTQwOCwzOTQwOSwzOTQxMCwzOTQxMSwzOTQxMiwzOTQxMywzOTQxNCwzOTQxNSwzOTQxNiwzOTQxNywzMDIzNSwzMDI2OCwzMDI0MiwzMDI0MCwzMDI3MiwzMDI1MywzMDI1NiwzMDI3MSwzMDI2MSwz''@;'; put 'put ''MDI3NSwzMDI3MCwzMDI1OSwzMDI4NSwzMDMwMiwzMDI5MiwzMDMwMCwzMDI5NCwzMDMxNSwzMDMxOSwzMjcxNCwzMTQ2MiwzMTM1MiwzMTM1MywzMTM2MCwzMTM2NiwzMTM2OCwzMTM4MSwzMTM5OCwzMTM5MiwzMTQwNCwzMTQwMCwzMTQwNSwzMTQxMSwzNDkxNiwzNDkyMSwzNDkzMCwzNDk0''@;'; put 'put ''MSwzNDk0MywzNDk0NiwzNDk3OCwzNTAxNCwzNDk5OSwzNTAwNCwzNTAxNywzNTA0MiwzNTAyMiwzNTA0MywzNTA0NSwzNTA1NywzNTA5OCwzNTA2OCwzNTA0OCwzNTA3MCwzNTA1NiwzNTEwNSwzNTA5NywzNTA5MSwzNTA5OSwzNTA4MiwzNTEyNCwzNTExNSwzNTEyNiwzNTEzNywzNTE3NCwz''@;'; put 'put ''NTE5NSwzMDA5MSwzMjk5NywzMDM4NiwzMDM4OCwzMDY4NCwzMjc4NiwzMjc4OCwzMjc5MCwzMjc5NiwzMjgwMCwzMjgwMiwzMjgwNSwzMjgwNiwzMjgwNywzMjgwOSwzMjgwOCwzMjgxNywzMjc3OSwzMjgyMSwzMjgzNSwzMjgzOCwzMjg0NSwzMjg1MCwzMjg3MywzMjg4MSwzNTIwMywzOTAz''@;'; put 'put ''MiwzOTA0MCwzOTA0MywzOTQxOCwzOTQxOSwzOTQyMCwzOTQyMSwzOTQyMiwzOTQyMywzOTQyNCwzOTQyNSwzOTQyNiwzOTQyNywzOTQyOCwzOTQyOSwzOTQzMCwzOTQzMSwzOTQzMiwzOTQzMywzOTQzNCwzOTQzNSwzOTQzNiwzOTQzNywzOTQzOCwzOTQzOSwzOTQ0MCwzOTQ0MSwzOTQ0Miwz''@;'; put 'put ''OTQ0MywzOTQ0NCwzOTQ0NSwzOTQ0NiwzOTQ0NywzOTQ0OCwzOTQ0OSwzOTQ1MCwzOTQ1MSwzOTQ1MiwzOTQ1MywzOTQ1NCwzOTQ1NSwzOTQ1NiwzOTQ1NywzOTQ1OCwzOTQ1OSwzOTQ2MCwzOTQ2MSwzOTQ2MiwzOTQ2MywzOTQ2NCwzOTQ2NSwzOTQ2NiwzOTQ2NywzOTQ2OCwzOTQ2OSwzOTQ3''@;'; put 'put ''MCwzOTQ3MSwzOTQ3MiwzOTQ3MywzOTQ3NCwzOTQ3NSwzOTQ3NiwzOTQ3NywzOTQ3OCwzOTQ3OSwzOTQ4MCwzOTQ4MSwzOTQ4MiwzOTQ4MywzOTQ4NCwzOTQ4NSwzOTQ4NiwzOTQ4NywzOTQ4OCwzOTQ4OSwzOTQ5MCwzOTQ5MSwzOTQ5MiwzOTQ5MywzOTQ5NCwzOTQ5NSwzOTQ5NiwzOTQ5Nywz''@;'; put 'put ''OTQ5OCwzOTQ5OSwzOTUwMCwzOTUwMSwzOTUwMiwzOTUwMywzOTUwNCwzOTUwNSwzOTUwNiwzOTUwNywzOTUwOCwzOTUwOSwzOTUxMCwzOTUxMSwzOTUxMiwzOTUxMywzOTA0OSwzOTA1MiwzOTA1MywzOTA1NSwzOTA2MCwzOTA2NiwzOTA2NywzOTA3MCwzOTA3MSwzOTA3MywzOTA3NCwzOTA3''@;'; put 'put ''NywzOTA3OCwzNDM4MSwzNDM4OCwzNDQxMiwzNDQxNCwzNDQzMSwzNDQyNiwzNDQyOCwzNDQyNywzNDQ3MiwzNDQ0NSwzNDQ0MywzNDQ3NiwzNDQ2MSwzNDQ3MSwzNDQ2NywzNDQ3NCwzNDQ1MSwzNDQ3MywzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUxMCwzNDQ4MCwzNDQ5MCwzNDQ4MSwzNDQ3OSwz''@;'; put 'put ''NDUwNSwzNDUxMSwzNDQ4NCwzNDUzNywzNDU0NSwzNDU0NiwzNDU0MSwzNDU0NywzNDUxMiwzNDU3OSwzNDUyNiwzNDU0OCwzNDUyNywzNDUyMCwzNDUxMywzNDU2MywzNDU2NywzNDU1MiwzNDU2OCwzNDU3MCwzNDU3MywzNDU2OSwzNDU5NSwzNDYxOSwzNDU5MCwzNDU5NywzNDYwNiwzNDU4''@;'; put 'put ''NiwzNDYyMiwzNDYzMiwzNDYxMiwzNDYwOSwzNDYwMSwzNDYxNSwzNDYyMywzNDY5MCwzNDU5NCwzNDY4NSwzNDY4NiwzNDY4MywzNDY1NiwzNDY3MiwzNDYzNiwzNDY3MCwzNDY5OSwzNDY0MywzNDY1OSwzNDY4NCwzNDY2MCwzNDY0OSwzNDY2MSwzNDcwNywzNDczNSwzNDcyOCwzNDc3MCwz''@;'; put 'put ''OTUxNCwzOTUxNSwzOTUxNiwzOTUxNywzOTUxOCwzOTUxOSwzOTUyMCwzOTUyMSwzOTUyMiwzOTUyMywzOTUyNCwzOTUyNSwzOTUyNiwzOTUyNywzOTUyOCwzOTUyOSwzOTUzMCwzOTUzMSwzOTUzOCwzOTU1NSwzOTU2MSwzOTU2NSwzOTU2NiwzOTU3MiwzOTU3MywzOTU3NywzOTU5MCwzOTU5''@;'; put 'put ''MywzOTU5NCwzOTU5NSwzOTU5NiwzOTU5NywzOTU5OCwzOTU5OSwzOTYwMiwzOTYwMywzOTYwNCwzOTYwNSwzOTYwOSwzOTYxMSwzOTYxMywzOTYxNCwzOTYxNSwzOTYxOSwzOTYyMCwzOTYyMiwzOTYyMywzOTYyNCwzOTYyNSwzOTYyNiwzOTYyOSwzOTYzMCwzOTYzMSwzOTYzMiwzOTYzNCwz''@;'; put 'put ''OTYzNiwzOTYzNywzOTYzOCwzOTYzOSwzOTY0MSwzOTY0MiwzOTY0MywzOTY0NCwzOTY0NSwzOTY0NiwzOTY0OCwzOTY1MCwzOTY1MSwzOTY1MiwzOTY1MywzOTY1NSwzOTY1NiwzOTY1NywzOTY1OCwzOTY2MCwzOTY2MiwzOTY2NCwzOTY2NSwzOTY2NiwzOTY2NywzOTY2OCwzOTY2OSwzOTY3''@;'; put 'put ''MCwzOTY3MSwzOTY3MiwzOTY3NCwzOTY3NiwzOTY3NywzOTY3OCwzOTY3OSwzOTY4MCwzOTY4MSwzOTY4MiwzOTY4NCwzOTY4NSwzOTY4NiwzNDc1OCwzNDY5NiwzNDY5MywzNDczMywzNDcxMSwzNDY5MSwzNDczMSwzNDc4OSwzNDczMiwzNDc0MSwzNDczOSwzNDc2MywzNDc3MSwzNDc0OSwz''@;'; put 'put ''NDc2OSwzNDc1MiwzNDc2MiwzNDc3OSwzNDc5NCwzNDc4NCwzNDc5OCwzNDgzOCwzNDgzNSwzNDgxNCwzNDgyNiwzNDg0MywzNDg0OSwzNDg3MywzNDg3NiwzMjU2NiwzMjU3OCwzMjU4MCwzMjU4MSwzMzI5NiwzMTQ4MiwzMTQ4NSwzMTQ5NiwzMTQ5MSwzMTQ5MiwzMTUwOSwzMTQ5OCwzMTUz''@;'; put 'put ''MSwzMTUwMywzMTU1OSwzMTU0NCwzMTUzMCwzMTUxMywzMTUzNCwzMTUzNywzMTUyMCwzMTUyNSwzMTUyNCwzMTUzOSwzMTU1MCwzMTUxOCwzMTU3NiwzMTU3OCwzMTU1NywzMTYwNSwzMTU2NCwzMTU4MSwzMTU4NCwzMTU5OCwzMTYxMSwzMTU4NiwzMTYwMiwzMTYwMSwzMTYzMiwzMTY1NCwz''@;'; put 'put ''MTY1NSwzMTY3MiwzMTY2MCwzMTY0NSwzMTY1NiwzMTYyMSwzMTY1OCwzMTY0NCwzMTY1MCwzMTY1OSwzMTY2OCwzMTY5NywzMTY4MSwzMTY5MiwzMTcwOSwzMTcwNiwzMTcxNywzMTcxOCwzMTcyMiwzMTc1NiwzMTc0MiwzMTc0MCwzMTc1OSwzMTc2NiwzMTc1NSwzOTY4NywzOTY4OSwzOTY5''@;'; put 'put ''MCwzOTY5MSwzOTY5MiwzOTY5MywzOTY5NCwzOTY5NiwzOTY5NywzOTY5OCwzOTcwMCwzOTcwMSwzOTcwMiwzOTcwMywzOTcwNCwzOTcwNSwzOTcwNiwzOTcwNywzOTcwOCwzOTcwOSwzOTcxMCwzOTcxMiwzOTcxMywzOTcxNCwzOTcxNiwzOTcxNywzOTcxOCwzOTcxOSwzOTcyMCwzOTcyMSwz''@;'; put 'put ''OTcyMiwzOTcyMywzOTcyNCwzOTcyNSwzOTcyNiwzOTcyOCwzOTcyOSwzOTczMSwzOTczMiwzOTczMywzOTczNCwzOTczNSwzOTczNiwzOTczNywzOTczOCwzOTc0MSwzOTc0MiwzOTc0MywzOTc0NCwzOTc1MCwzOTc1NCwzOTc1NSwzOTc1NiwzOTc1OCwzOTc2MCwzOTc2MiwzOTc2MywzOTc2''@;'; put 'put ''NSwzOTc2NiwzOTc2NywzOTc2OCwzOTc2OSwzOTc3MCwzOTc3MSwzOTc3MiwzOTc3MywzOTc3NCwzOTc3NSwzOTc3NiwzOTc3NywzOTc3OCwzOTc3OSwzOTc4MCwzOTc4MSwzOTc4MiwzOTc4MywzOTc4NCwzOTc4NSwzOTc4NiwzOTc4NywzOTc4OCwzOTc4OSwzOTc5MCwzOTc5MSwzOTc5Miwz''@;'; put 'put ''OTc5MywzOTc5NCwzOTc5NSwzOTc5NiwzOTc5NywzOTc5OCwzOTc5OSwzOTgwMCwzOTgwMSwzOTgwMiwzOTgwMywzMTc3NSwzMTc4NiwzMTc4MiwzMTgwMCwzMTgwOSwzMTgwOCwzMzI3OCwzMzI4MSwzMzI4MiwzMzI4NCwzMzI2MCwzNDg4NCwzMzMxMywzMzMxNCwzMzMxNSwzMzMyNSwzMzMy''@;'; put 'put ''NywzMzMyMCwzMzMyMywzMzMzNiwzMzMzOSwzMzMzMSwzMzMzMiwzMzM0MiwzMzM0OCwzMzM1MywzMzM1NSwzMzM1OSwzMzM3MCwzMzM3NSwzMzM4NCwzNDk0MiwzNDk0OSwzNDk1MiwzNTAzMiwzNTAzOSwzNTE2NiwzMjY2OSwzMjY3MSwzMjY3OSwzMjY4NywzMjY4OCwzMjY5MCwzMTg2OCwy''@;'; put 'put ''NTkyOSwzMTg4OSwzMTkwMSwzMTkwMCwzMTkwMiwzMTkwNiwzMTkyMiwzMTkzMiwzMTkzMywzMTkzNywzMTk0MywzMTk0OCwzMTk0OSwzMTk0NCwzMTk0MSwzMTk1OSwzMTk3NiwzMzM5MCwyNjI4MCwzMjcwMywzMjcxOCwzMjcyNSwzMjc0MSwzMjczNywzMjc0MiwzMjc0NSwzMjc1MCwzMjc1''@;'; put 'put ''NSwzMTk5MiwzMjExOSwzMjE2NiwzMjE3NCwzMjMyNywzMjQxMSw0MDYzMiw0MDYyOCwzNjIxMSwzNjIyOCwzNjI0NCwzNjI0MSwzNjI3MywzNjE5OSwzNjIwNSwzNTkxMSwzNTkxMywzNzE5NCwzNzIwMCwzNzE5OCwzNzE5OSwzNzIyMCwzOTgwNCwzOTgwNSwzOTgwNiwzOTgwNywzOTgwOCwz''@;'; put 'put ''OTgwOSwzOTgxMCwzOTgxMSwzOTgxMiwzOTgxMywzOTgxNCwzOTgxNSwzOTgxNiwzOTgxNywzOTgxOCwzOTgxOSwzOTgyMCwzOTgyMSwzOTgyMiwzOTgyMywzOTgyNCwzOTgyNSwzOTgyNiwzOTgyNywzOTgyOCwzOTgyOSwzOTgzMCwzOTgzMSwzOTgzMiwzOTgzMywzOTgzNCwzOTgzNSwzOTgz''@;'; put 'put ''NiwzOTgzNywzOTgzOCwzOTgzOSwzOTg0MCwzOTg0MSwzOTg0MiwzOTg0MywzOTg0NCwzOTg0NSwzOTg0NiwzOTg0NywzOTg0OCwzOTg0OSwzOTg1MCwzOTg1MSwzOTg1MiwzOTg1MywzOTg1NCwzOTg1NSwzOTg1NiwzOTg1NywzOTg1OCwzOTg1OSwzOTg2MCwzOTg2MSwzOTg2MiwzOTg2Mywz''@;'; put 'put ''OTg2NCwzOTg2NSwzOTg2NiwzOTg2NywzOTg2OCwzOTg2OSwzOTg3MCwzOTg3MSwzOTg3MiwzOTg3MywzOTg3NCwzOTg3NSwzOTg3NiwzOTg3NywzOTg3OCwzOTg3OSwzOTg4MCwzOTg4MSwzOTg4MiwzOTg4MywzOTg4NCwzOTg4NSwzOTg4NiwzOTg4NywzOTg4OCwzOTg4OSwzOTg5MCwzOTg5''@;'; put 'put ''MSwzOTg5MiwzOTg5MywzOTg5NCwzOTg5NSwzOTg5NiwzOTg5NywzOTg5OCwzOTg5OSwzNzIxOCwzNzIxNywzNzIzMiwzNzIyNSwzNzIzMSwzNzI0NSwzNzI0NiwzNzIzNCwzNzIzNiwzNzI0MSwzNzI2MCwzNzI1MywzNzI2NCwzNzI2MSwzNzI2NSwzNzI4MiwzNzI4MywzNzI5MCwzNzI5Mywz''@;'; put 'put ''NzI5NCwzNzI5NSwzNzMwMSwzNzMwMCwzNzMwNiwzNTkyNSw0MDU3NCwzNjI4MCwzNjMzMSwzNjM1NywzNjQ0MSwzNjQ1NywzNjI3NywzNjI4NywzNjI4NCwzNjI4MiwzNjI5MiwzNjMxMCwzNjMxMSwzNjMxNCwzNjMxOCwzNjMwMiwzNjMwMywzNjMxNSwzNjI5NCwzNjMzMiwzNjM0MywzNjM0''@;'; put 'put ''NCwzNjMyMywzNjM0NSwzNjM0NywzNjMyNCwzNjM2MSwzNjM0OSwzNjM3MiwzNjM4MSwzNjM4MywzNjM5NiwzNjM5OCwzNjM4NywzNjM5OSwzNjQxMCwzNjQxNiwzNjQwOSwzNjQwNSwzNjQxMywzNjQwMSwzNjQyNSwzNjQxNywzNjQxOCwzNjQzMywzNjQzNCwzNjQyNiwzNjQ2NCwzNjQ3MCwz''@;'; put 'put ''NjQ3NiwzNjQ2MywzNjQ2OCwzNjQ4NSwzNjQ5NSwzNjUwMCwzNjQ5NiwzNjUwOCwzNjUxMCwzNTk2MCwzNTk3MCwzNTk3OCwzNTk3MywzNTk5MiwzNTk4OCwyNjAxMSwzNTI4NiwzNTI5NCwzNTI5MCwzNTI5MiwzOTkwMCwzOTkwMSwzOTkwMiwzOTkwMywzOTkwNCwzOTkwNSwzOTkwNiwzOTkw''@;'; put 'put ''NywzOTkwOCwzOTkwOSwzOTkxMCwzOTkxMSwzOTkxMiwzOTkxMywzOTkxNCwzOTkxNSwzOTkxNiwzOTkxNywzOTkxOCwzOTkxOSwzOTkyMCwzOTkyMSwzOTkyMiwzOTkyMywzOTkyNCwzOTkyNSwzOTkyNiwzOTkyNywzOTkyOCwzOTkyOSwzOTkzMCwzOTkzMSwzOTkzMiwzOTkzMywzOTkzNCwz''@;'; put 'put ''OTkzNSwzOTkzNiwzOTkzNywzOTkzOCwzOTkzOSwzOTk0MCwzOTk0MSwzOTk0MiwzOTk0MywzOTk0NCwzOTk0NSwzOTk0NiwzOTk0NywzOTk0OCwzOTk0OSwzOTk1MCwzOTk1MSwzOTk1MiwzOTk1MywzOTk1NCwzOTk1NSwzOTk1NiwzOTk1NywzOTk1OCwzOTk1OSwzOTk2MCwzOTk2MSwzOTk2''@;'; put 'put ''MiwzOTk2MywzOTk2NCwzOTk2NSwzOTk2NiwzOTk2NywzOTk2OCwzOTk2OSwzOTk3MCwzOTk3MSwzOTk3MiwzOTk3MywzOTk3NCwzOTk3NSwzOTk3NiwzOTk3NywzOTk3OCwzOTk3OSwzOTk4MCwzOTk4MSwzOTk4MiwzOTk4MywzOTk4NCwzOTk4NSwzOTk4NiwzOTk4NywzOTk4OCwzOTk4OSwz''@;'; put 'put ''OTk5MCwzOTk5MSwzOTk5MiwzOTk5MywzOTk5NCwzOTk5NSwzNTMwMSwzNTMwNywzNTMxMSwzNTM5MCwzNTYyMiwzODczOSwzODYzMywzODY0MywzODYzOSwzODY2MiwzODY1NywzODY2NCwzODY3MSwzODY3MCwzODY5OCwzODcwMSwzODcwNCwzODcxOCw0MDgzMiw0MDgzNSw0MDgzNyw0MDgz''@;'; put 'put ''OCw0MDgzOSw0MDg0MCw0MDg0MSw0MDg0Miw0MDg0NCw0MDcwMiw0MDcxNSw0MDcxNywzODU4NSwzODU4OCwzODU4OSwzODYwNiwzODYxMCwzMDY1NSwzODYyNCwzNzUxOCwzNzU1MCwzNzU3NiwzNzY5NCwzNzczOCwzNzgzNCwzNzc3NSwzNzk1MCwzNzk5NSw0MDA2Myw0MDA2Niw0MDA2OSw0''@;'; put 'put ''MDA3MCw0MDA3MSw0MDA3MiwzMTI2Nyw0MDA3NSw0MDA3OCw0MDA4MCw0MDA4MSw0MDA4Miw0MDA4NCw0MDA4NSw0MDA5MCw0MDA5MSw0MDA5NCw0MDA5NSw0MDA5Niw0MDA5Nyw0MDA5OCw0MDA5OSw0MDEwMSw0MDEwMiw0MDEwMyw0MDEwNCw0MDEwNSw0MDEwNyw0MDEwOSw0MDExMCw0MDEx''@;'; put 'put ''Miw0MDExMyw0MDExNCw0MDExNSw0MDExNiw0MDExNyw0MDExOCw0MDExOSw0MDEyMiw0MDEyMyw0MDEyNCw0MDEyNSw0MDEzMiw0MDEzMyw0MDEzNCw0MDEzNSw0MDEzOCw0MDEzOSwzOTk5NiwzOTk5NywzOTk5OCwzOTk5OSw0ZTQsNDAwMDEsNDAwMDIsNDAwMDMsNDAwMDQsNDAwMDUsNDAw''@;'; put 'put ''MDYsNDAwMDcsNDAwMDgsNDAwMDksNDAwMTAsNDAwMTEsNDAwMTIsNDAwMTMsNDAwMTQsNDAwMTUsNDAwMTYsNDAwMTcsNDAwMTgsNDAwMTksNDAwMjAsNDAwMjEsNDAwMjIsNDAwMjMsNDAwMjQsNDAwMjUsNDAwMjYsNDAwMjcsNDAwMjgsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzIsNDAwMzMs''@;'; put 'put ''NDAwMzQsNDAwMzUsNDAwMzYsNDAwMzcsNDAwMzgsNDAwMzksNDAwNDAsNDAwNDEsNDAwNDIsNDAwNDMsNDAwNDQsNDAwNDUsNDAwNDYsNDAwNDcsNDAwNDgsNDAwNDksNDAwNTAsNDAwNTEsNDAwNTIsNDAwNTMsNDAwNTQsNDAwNTUsNDAwNTYsNDAwNTcsNDAwNTgsNDAwNTksNDAwNjEsNDAw''@;'; put 'put ''NjIsNDAwNjQsNDAwNjcsNDAwNjgsNDAwNzMsNDAwNzQsNDAwNzYsNDAwNzksNDAwODMsNDAwODYsNDAwODcsNDAwODgsNDAwODksNDAwOTMsNDAxMDYsNDAxMDgsNDAxMTEsNDAxMjEsNDAxMjYsNDAxMjcsNDAxMjgsNDAxMjksNDAxMzAsNDAxMzYsNDAxMzcsNDAxNDUsNDAxNDYsNDAxNTQs''@;'; put 'put ''NDAxNTUsNDAxNjAsNDAxNjEsNDAxNDAsNDAxNDEsNDAxNDIsNDAxNDMsNDAxNDQsNDAxNDcsNDAxNDgsNDAxNDksNDAxNTEsNDAxNTIsNDAxNTMsNDAxNTYsNDAxNTcsNDAxNTksNDAxNjIsMzg3ODAsMzg3ODksMzg4MDEsMzg4MDIsMzg4MDQsMzg4MzEsMzg4MjcsMzg4MTksMzg4MzQsMzg4''@;'; put 'put ''MzYsMzk2MDEsMzk2MDAsMzk2MDcsNDA1MzYsMzk2MDYsMzk2MTAsMzk2MTIsMzk2MTcsMzk2MTYsMzk2MjEsMzk2MTgsMzk2MjcsMzk2MjgsMzk2MzMsMzk3NDksMzk3NDcsMzk3NTEsMzk3NTMsMzk3NTIsMzk3NTcsMzk3NjEsMzkxNDQsMzkxODEsMzkyMTQsMzkyNTMsMzkyNTIsMzk2NDcs''@;'; put 'put ''Mzk2NDksMzk2NTQsMzk2NjMsMzk2NTksMzk2NzUsMzk2NjEsMzk2NzMsMzk2ODgsMzk2OTUsMzk2OTksMzk3MTEsMzk3MTUsNDA2MzcsNDA2MzgsMzIzMTUsNDA1NzgsNDA1ODMsNDA1ODQsNDA1ODcsNDA1OTQsMzc4NDYsNDA2MDUsNDA2MDcsNDA2NjcsNDA2NjgsNDA2NjksNDA2NzIsNDA2''@;'; put 'put ''NzEsNDA2NzQsNDA2ODEsNDA2NzksNDA2NzcsNDA2ODIsNDA2ODcsNDA3MzgsNDA3NDgsNDA3NTEsNDA3NjEsNDA3NTksNDA3NjUsNDA3NjYsNDA3NzIsNDAxNjMsNDAxNjQsNDAxNjUsNDAxNjYsNDAxNjcsNDAxNjgsNDAxNjksNDAxNzAsNDAxNzEsNDAxNzIsNDAxNzMsNDAxNzQsNDAxNzUs''@;'; put 'put ''NDAxNzYsNDAxNzcsNDAxNzgsNDAxNzksNDAxODAsNDAxODEsNDAxODIsNDAxODMsNDAxODQsNDAxODUsNDAxODYsNDAxODcsNDAxODgsNDAxODksNDAxOTAsNDAxOTEsNDAxOTIsNDAxOTMsNDAxOTQsNDAxOTUsNDAxOTYsNDAxOTcsNDAxOTgsNDAxOTksNDAyMDAsNDAyMDEsNDAyMDIsNDAy''@;'; put 'put ''MDMsNDAyMDQsNDAyMDUsNDAyMDYsNDAyMDcsNDAyMDgsNDAyMDksNDAyMTAsNDAyMTEsNDAyMTIsNDAyMTMsNDAyMTQsNDAyMTUsNDAyMTYsNDAyMTcsNDAyMTgsNDAyMTksNDAyMjAsNDAyMjEsNDAyMjIsNDAyMjMsNDAyMjQsNDAyMjUsNDAyMjYsNDAyMjcsNDAyMjgsNDAyMjksNDAyMzAs''@;'; put 'put ''NDAyMzEsNDAyMzIsNDAyMzMsNDAyMzQsNDAyMzUsNDAyMzYsNDAyMzcsNDAyMzgsNDAyMzksNDAyNDAsNDAyNDEsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNDUsNDAyNDYsNDAyNDcsNDAyNDgsNDAyNDksNDAyNTAsNDAyNTEsNDAyNTIsNDAyNTMsNDAyNTQsNDAyNTUsNDAyNTYsNDAyNTcsNDAy''@;'; put 'put ''NTgsNTc5MDgsNTc5MDksNTc5MTAsNTc5MTEsNTc5MTIsNTc5MTMsNTc5MTQsNTc5MTUsNTc5MTYsNTc5MTcsNTc5MTgsNTc5MTksNTc5MjAsNTc5MjEsNTc5MjIsNTc5MjMsNTc5MjQsNTc5MjUsNTc5MjYsNTc5MjcsNTc5MjgsNTc5MjksNTc5MzAsNTc5MzEsNTc5MzIsNTc5MzMsNTc5MzQs''@;'; put 'put ''NTc5MzUsNTc5MzYsNTc5MzcsNTc5MzgsNTc5MzksNTc5NDAsNTc5NDEsNTc5NDIsNTc5NDMsNTc5NDQsNTc5NDUsNTc5NDYsNTc5NDcsNTc5NDgsNTc5NDksNTc5NTAsNTc5NTEsNTc5NTIsNTc5NTMsNTc5NTQsNTc5NTUsNTc5NTYsNTc5NTcsNTc5NTgsNTc5NTksNTc5NjAsNTc5NjEsNTc5''@;'; put 'put ''NjIsNTc5NjMsNTc5NjQsNTc5NjUsNTc5NjYsNTc5NjcsNTc5NjgsNTc5NjksNTc5NzAsNTc5NzEsNTc5NzIsNTc5NzMsNTc5NzQsNTc5NzUsNTc5NzYsNTc5NzcsNTc5NzgsNTc5NzksNTc5ODAsNTc5ODEsNTc5ODIsNTc5ODMsNTc5ODQsNTc5ODUsNTc5ODYsNTc5ODcsNTc5ODgsNTc5ODks''@;'; put 'put ''NTc5OTAsNTc5OTEsNTc5OTIsNTc5OTMsNTc5OTQsNTc5OTUsNTc5OTYsNTc5OTcsNTc5OTgsNTc5OTksNThlMyw1ODAwMSw0MDI1OSw0MDI2MCw0MDI2MSw0MDI2Miw0MDI2Myw0MDI2NCw0MDI2NSw0MDI2Niw0MDI2Nyw0MDI2OCw0MDI2OSw0MDI3MCw0MDI3MSw0MDI3Miw0MDI3Myw0MDI3''@;'; put 'put ''NCw0MDI3NSw0MDI3Niw0MDI3Nyw0MDI3OCw0MDI3OSw0MDI4MCw0MDI4MSw0MDI4Miw0MDI4Myw0MDI4NCw0MDI4NSw0MDI4Niw0MDI4Nyw0MDI4OCw0MDI4OSw0MDI5MCw0MDI5MSw0MDI5Miw0MDI5Myw0MDI5NCw0MDI5NSw0MDI5Niw0MDI5Nyw0MDI5OCw0MDI5OSw0MDMwMCw0MDMwMSw0''@;'; put 'put ''MDMwMiw0MDMwMyw0MDMwNCw0MDMwNSw0MDMwNiw0MDMwNyw0MDMwOCw0MDMwOSw0MDMxMCw0MDMxMSw0MDMxMiw0MDMxMyw0MDMxNCw0MDMxNSw0MDMxNiw0MDMxNyw0MDMxOCw0MDMxOSw0MDMyMCw0MDMyMSw0MDMyMiw0MDMyMyw0MDMyNCw0MDMyNSw0MDMyNiw0MDMyNyw0MDMyOCw0MDMy''@;'; put 'put ''OSw0MDMzMCw0MDMzMSw0MDMzMiw0MDMzMyw0MDMzNCw0MDMzNSw0MDMzNiw0MDMzNyw0MDMzOCw0MDMzOSw0MDM0MCw0MDM0MSw0MDM0Miw0MDM0Myw0MDM0NCw0MDM0NSw0MDM0Niw0MDM0Nyw0MDM0OCw0MDM0OSw0MDM1MCw0MDM1MSw0MDM1Miw0MDM1Myw0MDM1NCw1ODAwMiw1ODAwMyw1''@;'; put 'put ''ODAwNCw1ODAwNSw1ODAwNiw1ODAwNyw1ODAwOCw1ODAwOSw1ODAxMCw1ODAxMSw1ODAxMiw1ODAxMyw1ODAxNCw1ODAxNSw1ODAxNiw1ODAxNyw1ODAxOCw1ODAxOSw1ODAyMCw1ODAyMSw1ODAyMiw1ODAyMyw1ODAyNCw1ODAyNSw1ODAyNiw1ODAyNyw1ODAyOCw1ODAyOSw1ODAzMCw1ODAz''@;'; put 'put ''MSw1ODAzMiw1ODAzMyw1ODAzNCw1ODAzNSw1ODAzNiw1ODAzNyw1ODAzOCw1ODAzOSw1ODA0MCw1ODA0MSw1ODA0Miw1ODA0Myw1ODA0NCw1ODA0NSw1ODA0Niw1ODA0Nyw1ODA0OCw1ODA0OSw1ODA1MCw1ODA1MSw1ODA1Miw1ODA1Myw1ODA1NCw1ODA1NSw1ODA1Niw1ODA1Nyw1ODA1OCw1''@;'; put 'put ''ODA1OSw1ODA2MCw1ODA2MSw1ODA2Miw1ODA2Myw1ODA2NCw1ODA2NSw1ODA2Niw1ODA2Nyw1ODA2OCw1ODA2OSw1ODA3MCw1ODA3MSw1ODA3Miw1ODA3Myw1ODA3NCw1ODA3NSw1ODA3Niw1ODA3Nyw1ODA3OCw1ODA3OSw1ODA4MCw1ODA4MSw1ODA4Miw1ODA4Myw1ODA4NCw1ODA4NSw1ODA4''@;'; put 'put ''Niw1ODA4Nyw1ODA4OCw1ODA4OSw1ODA5MCw1ODA5MSw1ODA5Miw1ODA5Myw1ODA5NCw1ODA5NSw0MDM1NSw0MDM1Niw0MDM1Nyw0MDM1OCw0MDM1OSw0MDM2MCw0MDM2MSw0MDM2Miw0MDM2Myw0MDM2NCw0MDM2NSw0MDM2Niw0MDM2Nyw0MDM2OCw0MDM2OSw0MDM3MCw0MDM3MSw0MDM3Miw0''@;'; put 'put ''MDM3Myw0MDM3NCw0MDM3NSw0MDM3Niw0MDM3Nyw0MDM3OCw0MDM3OSw0MDM4MCw0MDM4MSw0MDM4Miw0MDM4Myw0MDM4NCw0MDM4NSw0MDM4Niw0MDM4Nyw0MDM4OCw0MDM4OSw0MDM5MCw0MDM5MSw0MDM5Miw0MDM5Myw0MDM5NCw0MDM5NSw0MDM5Niw0MDM5Nyw0MDM5OCw0MDM5OSw0MDQw''@;'; put 'put ''MCw0MDQwMSw0MDQwMiw0MDQwMyw0MDQwNCw0MDQwNSw0MDQwNiw0MDQwNyw0MDQwOCw0MDQwOSw0MDQxMCw0MDQxMSw0MDQxMiw0MDQxMyw0MDQxNCw0MDQxNSw0MDQxNiw0MDQxNyw0MDQxOCw0MDQxOSw0MDQyMCw0MDQyMSw0MDQyMiw0MDQyMyw0MDQyNCw0MDQyNSw0MDQyNiw0MDQyNyw0''@;'; put 'put ''MDQyOCw0MDQyOSw0MDQzMCw0MDQzMSw0MDQzMiw0MDQzMyw0MDQzNCw0MDQzNSw0MDQzNiw0MDQzNyw0MDQzOCw0MDQzOSw0MDQ0MCw0MDQ0MSw0MDQ0Miw0MDQ0Myw0MDQ0NCw0MDQ0NSw0MDQ0Niw0MDQ0Nyw0MDQ0OCw0MDQ0OSw0MDQ1MCw1ODA5Niw1ODA5Nyw1ODA5OCw1ODA5OSw1ODEw''@;'; put 'put ''MCw1ODEwMSw1ODEwMiw1ODEwMyw1ODEwNCw1ODEwNSw1ODEwNiw1ODEwNyw1ODEwOCw1ODEwOSw1ODExMCw1ODExMSw1ODExMiw1ODExMyw1ODExNCw1ODExNSw1ODExNiw1ODExNyw1ODExOCw1ODExOSw1ODEyMCw1ODEyMSw1ODEyMiw1ODEyMyw1ODEyNCw1ODEyNSw1ODEyNiw1ODEyNyw1''@;'; put 'put ''ODEyOCw1ODEyOSw1ODEzMCw1ODEzMSw1ODEzMiw1ODEzMyw1ODEzNCw1ODEzNSw1ODEzNiw1ODEzNyw1ODEzOCw1ODEzOSw1ODE0MCw1ODE0MSw1ODE0Miw1ODE0Myw1ODE0NCw1ODE0NSw1ODE0Niw1ODE0Nyw1ODE0OCw1ODE0OSw1ODE1MCw1ODE1MSw1ODE1Miw1ODE1Myw1ODE1NCw1ODE1''@;'; put 'put ''NSw1ODE1Niw1ODE1Nyw1ODE1OCw1ODE1OSw1ODE2MCw1ODE2MSw1ODE2Miw1ODE2Myw1ODE2NCw1ODE2NSw1ODE2Niw1ODE2Nyw1ODE2OCw1ODE2OSw1ODE3MCw1ODE3MSw1ODE3Miw1ODE3Myw1ODE3NCw1ODE3NSw1ODE3Niw1ODE3Nyw1ODE3OCw1ODE3OSw1ODE4MCw1ODE4MSw1ODE4Miw1''@;'; put 'put ''ODE4Myw1ODE4NCw1ODE4NSw1ODE4Niw1ODE4Nyw1ODE4OCw1ODE4OSw0MDQ1MSw0MDQ1Miw0MDQ1Myw0MDQ1NCw0MDQ1NSw0MDQ1Niw0MDQ1Nyw0MDQ1OCw0MDQ1OSw0MDQ2MCw0MDQ2MSw0MDQ2Miw0MDQ2Myw0MDQ2NCw0MDQ2NSw0MDQ2Niw0MDQ2Nyw0MDQ2OCw0MDQ2OSw0MDQ3MCw0MDQ3''@;'; put 'put ''MSw0MDQ3Miw0MDQ3Myw0MDQ3NCw0MDQ3NSw0MDQ3Niw0MDQ3Nyw0MDQ3OCw0MDQ4NCw0MDQ4Nyw0MDQ5NCw0MDQ5Niw0MDUwMCw0MDUwNyw0MDUwOCw0MDUxMiw0MDUyNSw0MDUyOCw0MDUzMCw0MDUzMSw0MDUzMiw0MDUzNCw0MDUzNyw0MDU0MSw0MDU0Myw0MDU0NCw0MDU0NSw0MDU0Niw0''@;'; put 'put ''MDU0OSw0MDU1OCw0MDU1OSw0MDU2Miw0MDU2NCw0MDU2NSw0MDU2Niw0MDU2Nyw0MDU2OCw0MDU2OSw0MDU3MCw0MDU3MSw0MDU3Miw0MDU3Myw0MDU3Niw0MDU3Nyw0MDU3OSw0MDU4MCw0MDU4MSw0MDU4Miw0MDU4NSw0MDU4Niw0MDU4OCw0MDU4OSw0MDU5MCw0MDU5MSw0MDU5Miw0MDU5''@;'; put 'put ''Myw0MDU5Niw0MDU5Nyw0MDU5OCw0MDU5OSw0MDYwMCw0MDYwMSw0MDYwMiw0MDYwMyw0MDYwNCw0MDYwNiw0MDYwOCw0MDYwOSw0MDYxMCw0MDYxMSw0MDYxMiw0MDYxMyw0MDYxNSw0MDYxNiw0MDYxNyw0MDYxOCw1ODE5MCw1ODE5MSw1ODE5Miw1ODE5Myw1ODE5NCw1ODE5NSw1ODE5Niw1''@;'; put 'put ''ODE5Nyw1ODE5OCw1ODE5OSw1ODIwMCw1ODIwMSw1ODIwMiw1ODIwMyw1ODIwNCw1ODIwNSw1ODIwNiw1ODIwNyw1ODIwOCw1ODIwOSw1ODIxMCw1ODIxMSw1ODIxMiw1ODIxMyw1ODIxNCw1ODIxNSw1ODIxNiw1ODIxNyw1ODIxOCw1ODIxOSw1ODIyMCw1ODIyMSw1ODIyMiw1ODIyMyw1ODIy''@;'; put 'put ''NCw1ODIyNSw1ODIyNiw1ODIyNyw1ODIyOCw1ODIyOSw1ODIzMCw1ODIzMSw1ODIzMiw1ODIzMyw1ODIzNCw1ODIzNSw1ODIzNiw1ODIzNyw1ODIzOCw1ODIzOSw1ODI0MCw1ODI0MSw1ODI0Miw1ODI0Myw1ODI0NCw1ODI0NSw1ODI0Niw1ODI0Nyw1ODI0OCw1ODI0OSw1ODI1MCw1ODI1MSw1''@;'; put 'put ''ODI1Miw1ODI1Myw1ODI1NCw1ODI1NSw1ODI1Niw1ODI1Nyw1ODI1OCw1ODI1OSw1ODI2MCw1ODI2MSw1ODI2Miw1ODI2Myw1ODI2NCw1ODI2NSw1ODI2Niw1ODI2Nyw1ODI2OCw1ODI2OSw1ODI3MCw1ODI3MSw1ODI3Miw1ODI3Myw1ODI3NCw1ODI3NSw1ODI3Niw1ODI3Nyw1ODI3OCw1ODI3''@;'; put 'put ''OSw1ODI4MCw1ODI4MSw1ODI4Miw1ODI4Myw0MDYxOSw0MDYyMCw0MDYyMSw0MDYyMiw0MDYyMyw0MDYyNCw0MDYyNSw0MDYyNiw0MDYyNyw0MDYyOSw0MDYzMCw0MDYzMSw0MDYzMyw0MDYzNCw0MDYzNiw0MDYzOSw0MDY0MCw0MDY0MSw0MDY0Miw0MDY0Myw0MDY0NSw0MDY0Niw0MDY0Nyw0''@;'; put 'put ''MDY0OCw0MDY1MCw0MDY1MSw0MDY1Miw0MDY1Niw0MDY1OCw0MDY1OSw0MDY2MSw0MDY2Miw0MDY2Myw0MDY2NSw0MDY2Niw0MDY3MCw0MDY3Myw0MDY3NSw0MDY3Niw0MDY3OCw0MDY4MCw0MDY4Myw0MDY4NCw0MDY4NSw0MDY4Niw0MDY4OCw0MDY4OSw0MDY5MCw0MDY5MSw0MDY5Miw0MDY5''@;'; put 'put ''Myw0MDY5NCw0MDY5NSw0MDY5Niw0MDY5OCw0MDcwMSw0MDcwMyw0MDcwNCw0MDcwNSw0MDcwNiw0MDcwNyw0MDcwOCw0MDcwOSw0MDcxMCw0MDcxMSw0MDcxMiw0MDcxMyw0MDcxNCw0MDcxNiw0MDcxOSw0MDcyMSw0MDcyMiw0MDcyNCw0MDcyNSw0MDcyNiw0MDcyOCw0MDczMCw0MDczMSw0''@;'; put 'put ''MDczMiw0MDczMyw0MDczNCw0MDczNSw0MDczNyw0MDczOSw0MDc0MCw0MDc0MSw0MDc0Miw0MDc0Myw0MDc0NCw0MDc0NSw0MDc0Niw0MDc0Nyw0MDc0OSw0MDc1MCw0MDc1Miw0MDc1Myw1ODI4NCw1ODI4NSw1ODI4Niw1ODI4Nyw1ODI4OCw1ODI4OSw1ODI5MCw1ODI5MSw1ODI5Miw1ODI5''@;'; put 'put ''Myw1ODI5NCw1ODI5NSw1ODI5Niw1ODI5Nyw1ODI5OCw1ODI5OSw1ODMwMCw1ODMwMSw1ODMwMiw1ODMwMyw1ODMwNCw1ODMwNSw1ODMwNiw1ODMwNyw1ODMwOCw1ODMwOSw1ODMxMCw1ODMxMSw1ODMxMiw1ODMxMyw1ODMxNCw1ODMxNSw1ODMxNiw1ODMxNyw1ODMxOCw1ODMxOSw1ODMyMCw1''@;'; put 'put ''ODMyMSw1ODMyMiw1ODMyMyw1ODMyNCw1ODMyNSw1ODMyNiw1ODMyNyw1ODMyOCw1ODMyOSw1ODMzMCw1ODMzMSw1ODMzMiw1ODMzMyw1ODMzNCw1ODMzNSw1ODMzNiw1ODMzNyw1ODMzOCw1ODMzOSw1ODM0MCw1ODM0MSw1ODM0Miw1ODM0Myw1ODM0NCw1ODM0NSw1ODM0Niw1ODM0Nyw1ODM0''@;'; put 'put ''OCw1ODM0OSw1ODM1MCw1ODM1MSw1ODM1Miw1ODM1Myw1ODM1NCw1ODM1NSw1ODM1Niw1ODM1Nyw1ODM1OCw1ODM1OSw1ODM2MCw1ODM2MSw1ODM2Miw1ODM2Myw1ODM2NCw1ODM2NSw1ODM2Niw1ODM2Nyw1ODM2OCw1ODM2OSw1ODM3MCw1ODM3MSw1ODM3Miw1ODM3Myw1ODM3NCw1ODM3NSw1''@;'; put 'put ''ODM3Niw1ODM3Nyw0MDc1NCw0MDc1NSw0MDc1Niw0MDc1Nyw0MDc1OCw0MDc2MCw0MDc2Miw0MDc2NCw0MDc2Nyw0MDc2OCw0MDc2OSw0MDc3MCw0MDc3MSw0MDc3Myw0MDc3NCw0MDc3NSw0MDc3Niw0MDc3Nyw0MDc3OCw0MDc3OSw0MDc4MCw0MDc4MSw0MDc4Miw0MDc4Myw0MDc4Niw0MDc4''@;'; put 'put ''Nyw0MDc4OCw0MDc4OSw0MDc5MCw0MDc5MSw0MDc5Miw0MDc5Myw0MDc5NCw0MDc5NSw0MDc5Niw0MDc5Nyw0MDc5OCw0MDc5OSw0MDgwMCw0MDgwMSw0MDgwMiw0MDgwMyw0MDgwNCw0MDgwNSw0MDgwNiw0MDgwNyw0MDgwOCw0MDgwOSw0MDgxMCw0MDgxMSw0MDgxMiw0MDgxMyw0MDgxNCw0''@;'; put 'put ''MDgxNSw0MDgxNiw0MDgxNyw0MDgxOCw0MDgxOSw0MDgyMCw0MDgyMSw0MDgyMiw0MDgyMyw0MDgyNCw0MDgyNSw0MDgyNiw0MDgyNyw0MDgyOCw0MDgyOSw0MDgzMCw0MDgzMyw0MDgzNCw0MDg0NSw0MDg0Niw0MDg0Nyw0MDg0OCw0MDg0OSw0MDg1MCw0MDg1MSw0MDg1Miw0MDg1Myw0MDg1''@;'; put 'put ''NCw0MDg1NSw0MDg1Niw0MDg2MCw0MDg2MSw0MDg2Miw0MDg2NSw0MDg2Niw0MDg2Nyw0MDg2OCw0MDg2OSw2Mzc4OCw2Mzg2NSw2Mzg5Myw2Mzk3NSw2Mzk4NSw1ODM3OCw1ODM3OSw1ODM4MCw1ODM4MSw1ODM4Miw1ODM4Myw1ODM4NCw1ODM4NSw1ODM4Niw1ODM4Nyw1ODM4OCw1ODM4OSw1''@;'; put 'put ''ODM5MCw1ODM5MSw1ODM5Miw1ODM5Myw1ODM5NCw1ODM5NSw1ODM5Niw1ODM5Nyw1ODM5OCw1ODM5OSw1ODQwMCw1ODQwMSw1ODQwMiw1ODQwMyw1ODQwNCw1ODQwNSw1ODQwNiw1ODQwNyw1ODQwOCw1ODQwOSw1ODQxMCw1ODQxMSw1ODQxMiw1ODQxMyw1ODQxNCw1ODQxNSw1ODQxNiw1ODQx''@;'; put 'put ''Nyw1ODQxOCw1ODQxOSw1ODQyMCw1ODQyMSw1ODQyMiw1ODQyMyw1ODQyNCw1ODQyNSw1ODQyNiw1ODQyNyw1ODQyOCw1ODQyOSw1ODQzMCw1ODQzMSw1ODQzMiw1ODQzMyw1ODQzNCw1ODQzNSw1ODQzNiw1ODQzNyw1ODQzOCw1ODQzOSw1ODQ0MCw1ODQ0MSw1ODQ0Miw1ODQ0Myw1ODQ0NCw1''@;'; put 'put ''ODQ0NSw1ODQ0Niw1ODQ0Nyw1ODQ0OCw1ODQ0OSw1ODQ1MCw1ODQ1MSw1ODQ1Miw1ODQ1Myw1ODQ1NCw1ODQ1NSw1ODQ1Niw1ODQ1Nyw1ODQ1OCw1ODQ1OSw1ODQ2MCw1ODQ2MSw1ODQ2Miw1ODQ2Myw1ODQ2NCw1ODQ2NSw1ODQ2Niw1ODQ2Nyw1ODQ2OCw1ODQ2OSw1ODQ3MCw1ODQ3MSw2NDAx''@;'; put 'put ''Miw2NDAxMyw2NDAxNCw2NDAxNSw2NDAxNyw2NDAxOSw2NDAyMCw2NDAyNCw2NDAzMSw2NDAzMiw2NDAzMyw2NDAzNSw2NDAzNiw2NDAzOSw2NDA0MCw2NDA0MSwxMTkwNSw1OTQxNCw1OTQxNSw1OTQxNiwxMTkwOCwxMzQyNywxMzM4MywxMTkxMiwxMTkxNSw1OTQyMiwxMzcyNiwxMzg1MCwx''@;'; put 'put ''MzgzOCwxMTkxNiwxMTkyNywxNDcwMiwxNDYxNiw1OTQzMCwxNDc5OSwxNDgxNSwxNDk2MywxNDgwMCw1OTQzNSw1OTQzNiwxNTE4MiwxNTQ3MCwxNTU4NCwxMTk0Myw1OTQ0MSw1OTQ0MiwxMTk0NiwxNjQ3MCwxNjczNSwxMTk1MCwxNzIwNywxMTk1NSwxMTk1OCwxMTk1OSw1OTQ1MSwxNzMy''@;'; put 'put ''OSwxNzMyNCwxMTk2MywxNzM3MywxNzYyMiwxODAxNywxNzk5Niw1OTQ1OSwxODIxMSwxODIxNywxODMwMCwxODMxNywxMTk3OCwxODc1OSwxODgxMCwxODgxMywxODgxOCwxODgxOSwxODgyMSwxODgyMiwxODg0NywxODg0MywxODg3MSwxODg3MCw1OTQ3Niw1OTQ3NywxOTYxOSwxOTYxNSwx''@;'; put 'put ''OTYxNiwxOTYxNywxOTU3NSwxOTYxOCwxOTczMSwxOTczMiwxOTczMywxOTczNCwxOTczNSwxOTczNiwxOTczNywxOTg4Niw1OTQ5Miw1ODQ3Miw1ODQ3Myw1ODQ3NCw1ODQ3NSw1ODQ3Niw1ODQ3Nyw1ODQ3OCw1ODQ3OSw1ODQ4MCw1ODQ4MSw1ODQ4Miw1ODQ4Myw1ODQ4NCw1ODQ4NSw1ODQ4''@;'; put 'put ''Niw1ODQ4Nyw1ODQ4OCw1ODQ4OSw1ODQ5MCw1ODQ5MSw1ODQ5Miw1ODQ5Myw1ODQ5NCw1ODQ5NSw1ODQ5Niw1ODQ5Nyw1ODQ5OCw1ODQ5OSw1ODUwMCw1ODUwMSw1ODUwMiw1ODUwMyw1ODUwNCw1ODUwNSw1ODUwNiw1ODUwNyw1ODUwOCw1ODUwOSw1ODUxMCw1ODUxMSw1ODUxMiw1ODUxMyw1''@;'; put 'put ''ODUxNCw1ODUxNSw1ODUxNiw1ODUxNyw1ODUxOCw1ODUxOSw1ODUyMCw1ODUyMSw1ODUyMiw1ODUyMyw1ODUyNCw1ODUyNSw1ODUyNiw1ODUyNyw1ODUyOCw1ODUyOSw1ODUzMCw1ODUzMSw1ODUzMiw1ODUzMyw1ODUzNCw1ODUzNSw1ODUzNiw1ODUzNyw1ODUzOCw1ODUzOSw1ODU0MCw1ODU0''@;'; put 'put ''MSw1ODU0Miw1ODU0Myw1ODU0NCw1ODU0NSw1ODU0Niw1ODU0Nyw1ODU0OCw1ODU0OSw1ODU1MCw1ODU1MSw1ODU1Miw1ODU1Myw1ODU1NCw1ODU1NSw1ODU1Niw1ODU1Nyw1ODU1OCw1ODU1OSw1ODU2MCw1ODU2MSw1ODU2Miw1ODU2Myw1ODU2NCw1ODU2NV0sImdiMTgwMzAtcmFuZ2VzIjpb''@;'; put 'put ''WzAsMTI4XSxbMzYsMTY1XSxbMzgsMTY5XSxbNDUsMTc4XSxbNTAsMTg0XSxbODEsMjE2XSxbODksMjI2XSxbOTUsMjM1XSxbOTYsMjM4XSxbMTAwLDI0NF0sWzEwMywyNDhdLFsxMDQsMjUxXSxbMTA1LDI1M10sWzEwOSwyNThdLFsxMjYsMjc2XSxbMTMzLDI4NF0sWzE0OCwzMDBdLFsxNzIs''@;'; put 'put ''MzI1XSxbMTc1LDMyOV0sWzE3OSwzMzRdLFsyMDgsMzY0XSxbMzA2LDQ2M10sWzMwNyw0NjVdLFszMDgsNDY3XSxbMzA5LDQ2OV0sWzMxMCw0NzFdLFszMTEsNDczXSxbMzEyLDQ3NV0sWzMxMyw0NzddLFszNDEsNTA2XSxbNDI4LDU5NF0sWzQ0Myw2MTBdLFs1NDQsNzEyXSxbNTQ1LDcxNl0s''@;'; put 'put ''WzU1OCw3MzBdLFs3NDEsOTMwXSxbNzQyLDkzOF0sWzc0OSw5NjJdLFs3NTAsOTcwXSxbODA1LDEwMjZdLFs4MTksMTEwNF0sWzgyMCwxMTA2XSxbNzkyMiw4MjA5XSxbNzkyNCw4MjE1XSxbNzkyNSw4MjE4XSxbNzkyNyw4MjIyXSxbNzkzNCw4MjMxXSxbNzk0Myw4MjQxXSxbNzk0NCw4MjQ0''@;'; put 'put ''XSxbNzk0NSw4MjQ2XSxbNzk1MCw4MjUyXSxbODA2Miw4MzY1XSxbODE0OCw4NDUyXSxbODE0OSw4NDU0XSxbODE1Miw4NDU4XSxbODE2NCw4NDcxXSxbODE3NCw4NDgyXSxbODIzNiw4NTU2XSxbODI0MCw4NTcwXSxbODI2Miw4NTk2XSxbODI2NCw4NjAyXSxbODM3NCw4NzEzXSxbODM4MCw4''@;'; put 'put ''NzIwXSxbODM4MSw4NzIyXSxbODM4NCw4NzI2XSxbODM4OCw4NzMxXSxbODM5MCw4NzM3XSxbODM5Miw4NzQwXSxbODM5Myw4NzQyXSxbODM5NCw4NzQ4XSxbODM5Niw4NzUxXSxbODQwMSw4NzYwXSxbODQwNiw4NzY2XSxbODQxNiw4Nzc3XSxbODQxOSw4NzgxXSxbODQyNCw4Nzg3XSxbODQz''@;'; put 'put ''Nyw4ODAyXSxbODQzOSw4ODA4XSxbODQ0NSw4ODE2XSxbODQ4Miw4ODU0XSxbODQ4NSw4ODU4XSxbODQ5Niw4ODcwXSxbODUyMSw4ODk2XSxbODYwMyw4OTc5XSxbODkzNiw5MzIyXSxbODk0Niw5MzcyXSxbOTA0Niw5NTQ4XSxbOTA1MCw5NTg4XSxbOTA2Myw5NjE2XSxbOTA2Niw5NjIyXSxb''@;'; put 'put ''OTA3Niw5NjM0XSxbOTA5Miw5NjUyXSxbOTEwMCw5NjYyXSxbOTEwOCw5NjcyXSxbOTExMSw5Njc2XSxbOTExMyw5NjgwXSxbOTEzMSw5NzAyXSxbOTE2Miw5NzM1XSxbOTE2NCw5NzM4XSxbOTIxOCw5NzkzXSxbOTIxOSw5Nzk1XSxbMTEzMjksMTE5MDZdLFsxMTMzMSwxMTkwOV0sWzExMzM0''@;'; put 'put ''LDExOTEzXSxbMTEzMzYsMTE5MTddLFsxMTM0NiwxMTkyOF0sWzExMzYxLDExOTQ0XSxbMTEzNjMsMTE5NDddLFsxMTM2NiwxMTk1MV0sWzExMzcwLDExOTU2XSxbMTEzNzIsMTE5NjBdLFsxMTM3NSwxMTk2NF0sWzExMzg5LDExOTc5XSxbMTE2ODIsMTIyODRdLFsxMTY4NiwxMjI5Ml0sWzEx''@;'; put 'put ''Njg3LDEyMzEyXSxbMTE2OTIsMTIzMTldLFsxMTY5NCwxMjMzMF0sWzExNzE0LDEyMzUxXSxbMTE3MTYsMTI0MzZdLFsxMTcyMywxMjQ0N10sWzExNzI1LDEyNTM1XSxbMTE3MzAsMTI1NDNdLFsxMTczNiwxMjU4Nl0sWzExOTgyLDEyODQyXSxbMTE5ODksMTI4NTBdLFsxMjEwMiwxMjk2NF0s''@;'; put 'put ''WzEyMzM2LDEzMjAwXSxbMTIzNDgsMTMyMTVdLFsxMjM1MCwxMzIxOF0sWzEyMzg0LDEzMjUzXSxbMTIzOTMsMTMyNjNdLFsxMjM5NSwxMzI2N10sWzEyMzk3LDEzMjcwXSxbMTI1MTAsMTMzODRdLFsxMjU1MywxMzQyOF0sWzEyODUxLDEzNzI3XSxbMTI5NjIsMTM4MzldLFsxMjk3MywxMzg1''@;'; put 'put ''MV0sWzEzNzM4LDE0NjE3XSxbMTM4MjMsMTQ3MDNdLFsxMzkxOSwxNDgwMV0sWzEzOTMzLDE0ODE2XSxbMTQwODAsMTQ5NjRdLFsxNDI5OCwxNTE4M10sWzE0NTg1LDE1NDcxXSxbMTQ2OTgsMTU1ODVdLFsxNTU4MywxNjQ3MV0sWzE1ODQ3LDE2NzM2XSxbMTYzMTgsMTcyMDhdLFsxNjQzNCwx''@;'; put 'put ''NzMyNV0sWzE2NDM4LDE3MzMwXSxbMTY0ODEsMTczNzRdLFsxNjcyOSwxNzYyM10sWzE3MTAyLDE3OTk3XSxbMTcxMjIsMTgwMThdLFsxNzMxNSwxODIxMl0sWzE3MzIwLDE4MjE4XSxbMTc0MDIsMTgzMDFdLFsxNzQxOCwxODMxOF0sWzE3ODU5LDE4NzYwXSxbMTc5MDksMTg4MTFdLFsxNzkx''@;'; put 'put ''MSwxODgxNF0sWzE3OTE1LDE4ODIwXSxbMTc5MTYsMTg4MjNdLFsxNzkzNiwxODg0NF0sWzE3OTM5LDE4ODQ4XSxbMTc5NjEsMTg4NzJdLFsxODY2NCwxOTU3Nl0sWzE4NzAzLDE5NjIwXSxbMTg4MTQsMTk3MzhdLFsxODk2MiwxOTg4N10sWzE5MDQzLDQwODcwXSxbMzM0NjksNTkyNDRdLFsz''@;'; put 'put ''MzQ3MCw1OTMzNl0sWzMzNDcxLDU5MzY3XSxbMzM0ODQsNTk0MTNdLFszMzQ4NSw1OTQxN10sWzMzNDkwLDU5NDIzXSxbMzM0OTcsNTk0MzFdLFszMzUwMSw1OTQzN10sWzMzNTA1LDU5NDQzXSxbMzM1MTMsNTk0NTJdLFszMzUyMCw1OTQ2MF0sWzMzNTM2LDU5NDc4XSxbMzM1NTAsNTk0OTNd''@;'; put 'put ''LFszNzg0NSw2Mzc4OV0sWzM3OTIxLDYzODY2XSxbMzc5NDgsNjM4OTRdLFszODAyOSw2Mzk3Nl0sWzM4MDM4LDYzOTg2XSxbMzgwNjQsNjQwMTZdLFszODA2NSw2NDAxOF0sWzM4MDY2LDY0MDIxXSxbMzgwNjksNjQwMjVdLFszODA3NSw2NDAzNF0sWzM4MDc2LDY0MDM3XSxbMzgwNzgsNjQw''@;'; put 'put ''NDJdLFszOTEwOCw2NTA3NF0sWzM5MTA5LDY1MDkzXSxbMzkxMTMsNjUxMDddLFszOTExNCw2NTExMl0sWzM5MTE1LDY1MTI3XSxbMzkxMTYsNjUxMzJdLFszOTI2NSw2NTM3NV0sWzM5Mzk0LDY1NTEwXSxbMTg5ZTMsNjU1MzZdXSxqaXMwMjA4OlsxMjI4OCwxMjI4OSwxMjI5MCw2NTI5Miw2''@;'; put 'put ''NTI5NCwxMjUzOSw2NTMwNiw2NTMwNyw2NTMxMSw2NTI4MSwxMjQ0MywxMjQ0NCwxODAsNjUzNDQsMTY4LDY1MzQyLDY1NTA3LDY1MzQzLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDgyMTMsODIwOCw2NTI5NSw2NTM0MCw2NTM3''@;'; put 'put ''NCw4NzQxLDY1MzcyLDgyMzAsODIyOSw4MjE2LDgyMTcsODIyMCw4MjIxLDY1Mjg4LDY1Mjg5LDEyMzA4LDEyMzA5LDY1MzM5LDY1MzQxLDY1MzcxLDY1MzczLDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDY1MjkxLDY1MjkzLDE3''@;'; put 'put ''NywyMTUsMjQ3LDY1MzA5LDg4MDAsNjUzMDgsNjUzMTAsODgwNiw4ODA3LDg3MzQsODc1Niw5Nzk0LDk3OTIsMTc2LDgyNDIsODI0Myw4NDUxLDY1NTA5LDY1Mjg0LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MjgzLDY1Mjg2LDY1MjkwLDY1MzEyLDE2Nyw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2Nzgs''@;'; put 'put ''OTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDgyNTEsMTIzMDYsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0''@;'; put 'put ''Niw4NzQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzQzLDg3NDQsNjU1MDYsODY1OCw4NjYwLDg3MDQsODcwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4''@;'; put 'put ''MDEsODc4Niw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NDkxLDgyNDAsOTgzOSw5ODM3LDk4MzQsODIyNCw4MjI1LDE4MixudWxsLG51bGwsbnVsbCxudWxsLDk3MTEsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTMxMyw2NTMxNCw2''@;'; put 'put ''NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEy''@;'; put 'put ''Mzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0''@;'; put 'put ''LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEy''@;'; put 'put ''NDMyLDEyNDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2''@;'; put 'put ''MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwx''@;'; put 'put ''MjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUx''@;'; put 'put ''OCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5''@;'; put 'put ''LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgs''@;'; put 'put ''OTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgs''@;'; put 'put ''MTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYs''@;'; put 'put ''MTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIs''@;'; put 'put ''OTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMyMyw5MzI0LDkzMjUsOTMyNiw5MzI3LDkzMjgs''@;'; put 'put ''OTMyOSw5MzMwLDkzMzEsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MyxudWxsLDEzMTI5LDEzMDc2LDEzMDkwLDEzMTMzLDEzMDgwLDEzMDk1LDEzMDU5LDEzMTEwLDEzMTM3LDEzMTQzLDEzMDY5LDEzMDk0LDEzMDkxLDEzMDk5LDEzMTMwLDEzMTE1''@;'; put 'put ''LDEzMjEyLDEzMjEzLDEzMjE0LDEzMTk4LDEzMTk5LDEzMjUyLDEzMjE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMzE3OSwxMjMxNywxMjMxOSw4NDcwLDEzMjYxLDg0ODEsMTI5NjQsMTI5NjUsMTI5NjYsMTI5NjcsMTI5NjgsMTI4NDksMTI4NTAsMTI4NTcs''@;'; put 'put ''MTMxODIsMTMxODEsMTMxODAsODc4Niw4ODAxLDg3NDcsODc1MCw4NzIxLDg3MzAsODg2OSw4NzM2LDg3MzUsODg5NSw4NzU3LDg3NDUsODc0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMTI0LDIxNzgyLDIzMDQzLDM4NDYzLDIxNjk2LDI0ODU5LDI1Mzg0LDIzMDMwLDM2ODk4LDMzOTA5LDMzNTY0LDMxMzEyLDI0NzQ2LDI1NTY5LDI4MTk3LDI2MDkzLDMzODk0LDMzNDQ2LDM5OTI1LDI2NzcxLDIy''@;'; put 'put ''MzExLDI2MDE3LDI1MjAxLDIzNDUxLDIyOTkyLDM0NDI3LDM5MTU2LDMyMDk4LDMyMTkwLDM5ODIyLDI1MTEwLDMxOTAzLDM0OTk5LDIzNDMzLDI0MjQ1LDI1MzUzLDI2MjYzLDI2Njk2LDM4MzQzLDM4Nzk3LDI2NDQ3LDIwMTk3LDIwMjM0LDIwMzAxLDIwMzgxLDIwNTUzLDIyMjU4LDIyODM5''@;'; put 'put ''LDIyOTk2LDIzMDQxLDIzNTYxLDI0Nzk5LDI0ODQ3LDI0OTQ0LDI2MTMxLDI2ODg1LDI4ODU4LDMwMDMxLDMwMDY0LDMxMjI3LDMyMTczLDMyMjM5LDMyOTYzLDMzODA2LDM0OTE1LDM1NTg2LDM2OTQ5LDM2OTg2LDIxMzA3LDIwMTE3LDIwMTMzLDIyNDk1LDMyOTQ2LDM3MDU3LDMwOTU5LDE5''@;'; put 'put ''OTY4LDIyNzY5LDI4MzIyLDM2OTIwLDMxMjgyLDMzNTc2LDMzNDE5LDM5OTgzLDIwODAxLDIxMzYwLDIxNjkzLDIxNzI5LDIyMjQwLDIzMDM1LDI0MzQxLDM5MTU0LDI4MTM5LDMyOTk2LDM0MDkzLDM4NDk4LDM4NTEyLDM4NTYwLDM4OTA3LDIxNTE1LDIxNDkxLDIzNDMxLDI4ODc5LDMyNzAx''@;'; put 'put ''LDM2ODAyLDM4NjMyLDIxMzU5LDQwMjg0LDMxNDE4LDE5OTg1LDMwODY3LDMzMjc2LDI4MTk4LDIyMDQwLDIxNzY0LDI3NDIxLDM0MDc0LDM5OTk1LDIzMDEzLDIxNDE3LDI4MDA2LDI5OTE2LDM4Mjg3LDIyMDgyLDIwMTEzLDM2OTM5LDM4NjQyLDMzNjE1LDM5MTgwLDIxNDczLDIxOTQyLDIz''@;'; put 'put ''MzQ0LDI0NDMzLDI2MTQ0LDI2MzU1LDI2NjI4LDI3NzA0LDI3ODkxLDI3OTQ1LDI5Nzg3LDMwNDA4LDMxMzEwLDM4OTY0LDMzNTIxLDM0OTA3LDM1NDI0LDM3NjEzLDI4MDgyLDMwMTIzLDMwNDEwLDM5MzY1LDI0NzQyLDM1NTg1LDM2MjM0LDM4MzIyLDI3MDIyLDIxNDIxLDIwODcwLDIyMjkw''@;'; put 'put ''LDIyNTc2LDIyODUyLDIzNDc2LDI0MzEwLDI0NjE2LDI1NTEzLDI1NTg4LDI3ODM5LDI4NDM2LDI4ODE0LDI4OTQ4LDI5MDE3LDI5MTQxLDI5NTAzLDMyMjU3LDMzMzk4LDMzNDg5LDM0MTk5LDM2OTYwLDM3NDY3LDQwMjE5LDIyNjMzLDI2MDQ0LDI3NzM4LDI5OTg5LDIwOTg1LDIyODMwLDIy''@;'; put 'put ''ODg1LDI0NDQ4LDI0NTQwLDI1Mjc2LDI2MTA2LDI3MTc4LDI3NDMxLDI3NTcyLDI5NTc5LDMyNzA1LDM1MTU4LDQwMjM2LDQwMjA2LDQwNjQ0LDIzNzEzLDI3Nzk4LDMzNjU5LDIwNzQwLDIzNjI3LDI1MDE0LDMzMjIyLDI2NzQyLDI5MjgxLDIwMDU3LDIwNDc0LDIxMzY4LDI0NjgxLDI4MjAx''@;'; put 'put ''LDMxMzExLDM4ODk5LDE5OTc5LDIxMjcwLDIwMjA2LDIwMzA5LDIwMjg1LDIwMzg1LDIwMzM5LDIxMTUyLDIxNDg3LDIyMDI1LDIyNzk5LDIzMjMzLDIzNDc4LDIzNTIxLDMxMTg1LDI2MjQ3LDI2NTI0LDI2NTUwLDI3NDY4LDI3ODI3LDI4Nzc5LDI5NjM0LDMxMTE3LDMxMTY2LDMxMjkyLDMx''@;'; put 'put ''NjIzLDMzNDU3LDMzNDk5LDMzNTQwLDMzNjU1LDMzNzc1LDMzNzQ3LDM0NjYyLDM1NTA2LDIyMDU3LDM2MDA4LDM2ODM4LDM2OTQyLDM4Njg2LDM0NDQyLDIwNDIwLDIzNzg0LDI1MTA1LDI5MjczLDMwMDExLDMzMjUzLDMzNDY5LDM0NTU4LDM2MDMyLDM4NTk3LDM5MTg3LDM5MzgxLDIwMTcx''@;'; put 'put ''LDIwMjUwLDM1Mjk5LDIyMjM4LDIyNjAyLDIyNzMwLDI0MzE1LDI0NTU1LDI0NjE4LDI0NzI0LDI0Njc0LDI1MDQwLDI1MTA2LDI1Mjk2LDI1OTEzLDM5NzQ1LDI2MjE0LDI2ODAwLDI4MDIzLDI4Nzg0LDMwMDI4LDMwMzQyLDMyMTE3LDMzNDQ1LDM0ODA5LDM4MjgzLDM4NTQyLDM1OTk3LDIw''@;'; put 'put ''OTc3LDIxMTgyLDIyODA2LDIxNjgzLDIzNDc1LDIzODMwLDI0OTM2LDI3MDEwLDI4MDc5LDMwODYxLDMzOTk1LDM0OTAzLDM1NDQyLDM3Nzk5LDM5NjA4LDI4MDEyLDM5MzM2LDM0NTIxLDIyNDM1LDI2NjIzLDM0NTEwLDM3MzkwLDIxMTIzLDIyMTUxLDIxNTA4LDI0Mjc1LDI1MzEzLDI1Nzg1''@;'; put 'put ''LDI2Njg0LDI2NjgwLDI3NTc5LDI5NTU0LDMwOTA2LDMxMzM5LDM1MjI2LDM1MjgyLDM2MjAzLDM2NjExLDM3MTAxLDM4MzA3LDM4NTQ4LDM4NzYxLDIzMzk4LDIzNzMxLDI3MDA1LDM4OTg5LDM4OTkwLDI1NDk5LDMxNTIwLDI3MTc5LDI3MjYzLDI2ODA2LDM5OTQ5LDI4NTExLDIxMTA2LDIx''@;'; put 'put ''OTE3LDI0Njg4LDI1MzI0LDI3OTYzLDI4MTY3LDI4MzY5LDMzODgzLDM1MDg4LDM2Njc2LDE5OTg4LDM5OTkzLDIxNDk0LDI2OTA3LDI3MTk0LDM4Nzg4LDI2NjY2LDIwODI4LDMxNDI3LDMzOTcwLDM3MzQwLDM3NzcyLDIyMTA3LDQwMjMyLDI2NjU4LDMzNTQxLDMzODQxLDMxOTA5LDIxZTMs''@;'; put 'put ''MzM0NzcsMjk5MjYsMjAwOTQsMjAzNTUsMjA4OTYsMjM1MDYsMjEwMDIsMjEyMDgsMjEyMjMsMjQwNTksMjE5MTQsMjI1NzAsMjMwMTQsMjM0MzYsMjM0NDgsMjM1MTUsMjQxNzgsMjQxODUsMjQ3MzksMjQ4NjMsMjQ5MzEsMjUwMjIsMjU1NjMsMjU5NTQsMjY1NzcsMjY3MDcsMjY4NzQsMjc0''@;'; put 'put ''NTQsMjc0NzUsMjc3MzUsMjg0NTAsMjg1NjcsMjg0ODUsMjk4NzIsMjk5NzYsMzA0MzUsMzA0NzUsMzE0ODcsMzE2NDksMzE3NzcsMzIyMzMsMzI1NjYsMzI3NTIsMzI5MjUsMzMzODIsMzM2OTQsMzUyNTEsMzU1MzIsMzYwMTEsMzY5OTYsMzc5NjksMzgyOTEsMzgyODksMzgzMDYsMzg1MDEs''@;'; put 'put ''Mzg4NjcsMzkyMDgsMzMzMDQsMjAwMjQsMjE1NDcsMjM3MzYsMjQwMTIsMjk2MDksMzAyODQsMzA1MjQsMjM3MjEsMzI3NDcsMzYxMDcsMzg1OTMsMzg5MjksMzg5OTYsMzllMywyMDIyNSwyMDIzOCwyMTM2MSwyMTkxNiwyMjEyMCwyMjUyMiwyMjg1NSwyMzMwNSwyMzQ5MiwyMzY5NiwyNDA3''@;'; put 'put ''NiwyNDE5MCwyNDUyNCwyNTU4MiwyNjQyNiwyNjA3MSwyNjA4MiwyNjM5OSwyNjgyNywyNjgyMCwyNzIzMSwyNDExMiwyNzU4OSwyNzY3MSwyNzc3MywzMDA3OSwzMTA0OCwyMzM5NSwzMTIzMiwzMmUzLDI0NTA5LDM1MjE1LDM1MzUyLDM2MDIwLDM2MjE1LDM2NTU2LDM2NjM3LDM5MTM4LDM5''@;'; put 'put ''NDM4LDM5NzQwLDIwMDk2LDIwNjA1LDIwNzM2LDIyOTMxLDIzNDUyLDI1MTM1LDI1MjE2LDI1ODM2LDI3NDUwLDI5MzQ0LDMwMDk3LDMxMDQ3LDMyNjgxLDM0ODExLDM1NTE2LDM1Njk2LDI1NTE2LDMzNzM4LDM4ODE2LDIxNTEzLDIxNTA3LDIxOTMxLDI2NzA4LDI3MjI0LDM1NDQwLDMwNzU5''@;'; put 'put ''LDI2NDg1LDQwNjUzLDIxMzY0LDIzNDU4LDMzMDUwLDM0Mzg0LDM2ODcwLDE5OTkyLDIwMDM3LDIwMTY3LDIwMjQxLDIxNDUwLDIxNTYwLDIzNDcwLDI0MzM5LDI0NjEzLDI1OTM3LDI2NDI5LDI3NzE0LDI3NzYyLDI3ODc1LDI4NzkyLDI5Njk5LDMxMzUwLDMxNDA2LDMxNDk2LDMyMDI2LDMx''@;'; put 'put ''OTk4LDMyMTAyLDI2MDg3LDI5Mjc1LDIxNDM1LDIzNjIxLDI0MDQwLDI1Mjk4LDI1MzEyLDI1MzY5LDI4MTkyLDM0Mzk0LDM1Mzc3LDM2MzE3LDM3NjI0LDI4NDE3LDMxMTQyLDM5NzcwLDIwMTM2LDIwMTM5LDIwMTQwLDIwMzc5LDIwMzg0LDIwNjg5LDIwODA3LDMxNDc4LDIwODQ5LDIwOTgy''@;'; put 'put ''LDIxMzMyLDIxMjgxLDIxMzc1LDIxNDgzLDIxOTMyLDIyNjU5LDIzNzc3LDI0Mzc1LDI0Mzk0LDI0NjIzLDI0NjU2LDI0Njg1LDI1Mzc1LDI1OTQ1LDI3MjExLDI3ODQxLDI5Mzc4LDI5NDIxLDMwNzAzLDMzMDE2LDMzMDI5LDMzMjg4LDM0MTI2LDM3MTExLDM3ODU3LDM4OTExLDM5MjU1LDM5''@;'; put 'put ''NTE0LDIwMjA4LDIwOTU3LDIzNTk3LDI2MjQxLDI2OTg5LDIzNjE2LDI2MzU0LDI2OTk3LDI5NTc3LDI2NzA0LDMxODczLDIwNjc3LDIxMjIwLDIyMzQzLDI0MDYyLDM3NjcwLDI2MDIwLDI3NDI3LDI3NDUzLDI5NzQ4LDMxMTA1LDMxMTY1LDMxNTYzLDMyMjAyLDMzNDY1LDMzNzQwLDM0OTQz''@;'; put 'put ''LDM1MTY3LDM1NjQxLDM2ODE3LDM3MzI5LDIxNTM1LDM3NTA0LDIwMDYxLDIwNTM0LDIxNDc3LDIxMzA2LDI5Mzk5LDI5NTkwLDMwNjk3LDMzNTEwLDM2NTI3LDM5MzY2LDM5MzY4LDM5Mzc4LDIwODU1LDI0ODU4LDM0Mzk4LDIxOTM2LDMxMzU0LDIwNTk4LDIzNTA3LDM2OTM1LDM4NTMzLDIw''@;'; put 'put ''MDE4LDI3MzU1LDM3MzUxLDIzNjMzLDIzNjI0LDI1NDk2LDMxMzkxLDI3Nzk1LDM4NzcyLDM2NzA1LDMxNDAyLDI5MDY2LDM4NTM2LDMxODc0LDI2NjQ3LDMyMzY4LDI2NzA1LDM3NzQwLDIxMjM0LDIxNTMxLDM0MjE5LDM1MzQ3LDMyNjc2LDM2NTU3LDM3MDg5LDIxMzUwLDM0OTUyLDMxMDQx''@;'; put 'put ''LDIwNDE4LDIwNjcwLDIxMDA5LDIwODA0LDIxODQzLDIyMzE3LDI5Njc0LDIyNDExLDIyODY1LDI0NDE4LDI0NDUyLDI0NjkzLDI0OTUwLDI0OTM1LDI1MDAxLDI1NTIyLDI1NjU4LDI1OTY0LDI2MjIzLDI2NjkwLDI4MTc5LDMwMDU0LDMxMjkzLDMxOTk1LDMyMDc2LDMyMTUzLDMyMzMxLDMy''@;'; put 'put ''NjE5LDMzNTUwLDMzNjEwLDM0NTA5LDM1MzM2LDM1NDI3LDM1Njg2LDM2NjA1LDM4OTM4LDQwMzM1LDMzNDY0LDM2ODE0LDM5OTEyLDIxMTI3LDI1MTE5LDI1NzMxLDI4NjA4LDM4NTUzLDI2Njg5LDIwNjI1LDI3NDI0LDI3NzcwLDI4NTAwLDMxMzQ4LDMyMDgwLDM0ODgwLDM1MzYzLDI2Mzc2''@;'; put 'put ''LDIwMjE0LDIwNTM3LDIwNTE4LDIwNTgxLDIwODYwLDIxMDQ4LDIxMDkxLDIxOTI3LDIyMjg3LDIyNTMzLDIzMjQ0LDI0MzE0LDI1MDEwLDI1MDgwLDI1MzMxLDI1NDU4LDI2OTA4LDI3MTc3LDI5MzA5LDI5MzU2LDI5NDg2LDMwNzQwLDMwODMxLDMyMTIxLDMwNDc2LDMyOTM3LDM1MjExLDM1''@;'; put 'put ''NjA5LDM2MDY2LDM2NTYyLDM2OTYzLDM3NzQ5LDM4NTIyLDM4OTk3LDM5NDQzLDQwNTY4LDIwODAzLDIxNDA3LDIxNDI3LDI0MTg3LDI0MzU4LDI4MTg3LDI4MzA0LDI5NTcyLDI5Njk0LDMyMDY3LDMzMzM1LDM1MzI4LDM1NTc4LDM4NDgwLDIwMDQ2LDIwNDkxLDIxNDc2LDIxNjI4LDIyMjY2''@;'; put 'put ''LDIyOTkzLDIzMzk2LDI0MDQ5LDI0MjM1LDI0MzU5LDI1MTQ0LDI1OTI1LDI2NTQzLDI4MjQ2LDI5MzkyLDMxOTQ2LDM0OTk2LDMyOTI5LDMyOTkzLDMzNzc2LDM0MzgyLDM1NDYzLDM2MzI4LDM3NDMxLDM4NTk5LDM5MDE1LDQwNzIzLDIwMTE2LDIwMTE0LDIwMjM3LDIxMzIwLDIxNTc3LDIx''@;'; put 'put ''NTY2LDIzMDg3LDI0NDYwLDI0NDgxLDI0NzM1LDI2NzkxLDI3Mjc4LDI5Nzg2LDMwODQ5LDM1NDg2LDM1NDkyLDM1NzAzLDM3MjY0LDIwMDYyLDM5ODgxLDIwMTMyLDIwMzQ4LDIwMzk5LDIwNTA1LDIwNTAyLDIwODA5LDIwODQ0LDIxMTUxLDIxMTc3LDIxMjQ2LDIxNDAyLDIxNDc1LDIxNTIx''@;'; put 'put ''LDIxNTE4LDIxODk3LDIyMzUzLDIyNDM0LDIyOTA5LDIzMzgwLDIzMzg5LDIzNDM5LDI0MDM3LDI0MDM5LDI0MDU1LDI0MTg0LDI0MTk1LDI0MjE4LDI0MjQ3LDI0MzQ0LDI0NjU4LDI0OTA4LDI1MjM5LDI1MzA0LDI1NTExLDI1OTE1LDI2MTE0LDI2MTc5LDI2MzU2LDI2NDc3LDI2NjU3LDI2''@;'; put 'put ''Nzc1LDI3MDgzLDI3NzQzLDI3OTQ2LDI4MDA5LDI4MjA3LDI4MzE3LDMwMDAyLDMwMzQzLDMwODI4LDMxMjk1LDMxOTY4LDMyMDA1LDMyMDI0LDMyMDk0LDMyMTc3LDMyNzg5LDMyNzcxLDMyOTQzLDMyOTQ1LDMzMTA4LDMzMTY3LDMzMzIyLDMzNjE4LDM0ODkyLDM0OTEzLDM1NjExLDM2MDAy''@;'; put 'put ''LDM2MDkyLDM3MDY2LDM3MjM3LDM3NDg5LDMwNzgzLDM3NjI4LDM4MzA4LDM4NDc3LDM4OTE3LDM5MzIxLDM5NjQwLDQwMjUxLDIxMDgzLDIxMTYzLDIxNDk1LDIxNTEyLDIyNzQxLDI1MzM1LDI4NjQwLDM1OTQ2LDM2NzAzLDQwNjMzLDIwODExLDIxMDUxLDIxNTc4LDIyMjY5LDMxMjk2LDM3''@;'; put 'put ''MjM5LDQwMjg4LDQwNjU4LDI5NTA4LDI4NDI1LDMzMTM2LDI5OTY5LDI0NTczLDI0Nzk0LDM5NTkyLDI5NDAzLDM2Nzk2LDI3NDkyLDM4OTE1LDIwMTcwLDIyMjU2LDIyMzcyLDIyNzE4LDIzMTMwLDI0NjgwLDI1MDMxLDI2MTI3LDI2MTE4LDI2NjgxLDI2ODAxLDI4MTUxLDMwMTY1LDMyMDU4''@;'; put 'put ''LDMzMzkwLDM5NzQ2LDIwMTIzLDIwMzA0LDIxNDQ5LDIxNzY2LDIzOTE5LDI0MDM4LDI0MDQ2LDI2NjE5LDI3ODAxLDI5ODExLDMwNzIyLDM1NDA4LDM3NzgyLDM1MDM5LDIyMzUyLDI0MjMxLDI1Mzg3LDIwNjYxLDIwNjUyLDIwODc3LDI2MzY4LDIxNzA1LDIyNjIyLDIyOTcxLDIzNDcyLDI0''@;'; put 'put ''NDI1LDI1MTY1LDI1NTA1LDI2Njg1LDI3NTA3LDI4MTY4LDI4Nzk3LDM3MzE5LDI5MzEyLDMwNzQxLDMwNzU4LDMxMDg1LDI1OTk4LDMyMDQ4LDMzNzU2LDM1MDA5LDM2NjE3LDM4NTU1LDIxMDkyLDIyMzEyLDI2NDQ4LDMyNjE4LDM2MDAxLDIwOTE2LDIyMzM4LDM4NDQyLDIyNTg2LDI3MDE4''@;'; put 'put ''LDMyOTQ4LDIxNjgyLDIzODIyLDIyNTI0LDMwODY5LDQwNDQyLDIwMzE2LDIxMDY2LDIxNjQzLDI1NjYyLDI2MTUyLDI2Mzg4LDI2NjEzLDMxMzY0LDMxNTc0LDMyMDM0LDM3Njc5LDI2NzE2LDM5ODUzLDMxNTQ1LDIxMjczLDIwODc0LDIxMDQ3LDIzNTE5LDI1MzM0LDI1Nzc0LDI1ODMwLDI2''@;'; put 'put ''NDEzLDI3NTc4LDM0MjE3LDM4NjA5LDMwMzUyLDM5ODk0LDI1NDIwLDM3NjM4LDM5ODUxLDMwMzk5LDI2MTk0LDE5OTc3LDIwNjMyLDIxNDQyLDIzNjY1LDI0ODA4LDI1NzQ2LDI1OTU1LDI2NzE5LDI5MTU4LDI5NjQyLDI5OTg3LDMxNjM5LDMyMzg2LDM0NDUzLDM1NzE1LDM2MDU5LDM3MjQw''@;'; put 'put ''LDM5MTg0LDI2MDI4LDI2MjgzLDI3NTMxLDIwMTgxLDIwMTgwLDIwMjgyLDIwMzUxLDIxMDUwLDIxNDk2LDIxNDkwLDIxOTg3LDIyMjM1LDIyNzYzLDIyOTg3LDIyOTg1LDIzMDM5LDIzMzc2LDIzNjI5LDI0MDY2LDI0MTA3LDI0NTM1LDI0NjA1LDI1MzUxLDI1OTAzLDIzMzg4LDI2MDMxLDI2''@;'; put 'put ''MDQ1LDI2MDg4LDI2NTI1LDI3NDkwLDI3NTE1LDI3NjYzLDI5NTA5LDMxMDQ5LDMxMTY5LDMxOTkyLDMyMDI1LDMyMDQzLDMyOTMwLDMzMDI2LDMzMjY3LDM1MjIyLDM1NDIyLDM1NDMzLDM1NDMwLDM1NDY4LDM1NTY2LDM2MDM5LDM2MDYwLDM4NjA0LDM5MTY0LDI3NTAzLDIwMTA3LDIwMjg0''@;'; put 'put ''LDIwMzY1LDIwODE2LDIzMzgzLDIzNTQ2LDI0OTA0LDI1MzQ1LDI2MTc4LDI3NDI1LDI4MzYzLDI3ODM1LDI5MjQ2LDI5ODg1LDMwMTY0LDMwOTEzLDMxMDM0LDMyNzgwLDMyODE5LDMzMjU4LDMzOTQwLDM2NzY2LDI3NzI4LDQwNTc1LDI0MzM1LDM1NjcyLDQwMjM1LDMxNDgyLDM2NjAwLDIz''@;'; put 'put ''NDM3LDM4NjM1LDE5OTcxLDIxNDg5LDIyNTE5LDIyODMzLDIzMjQxLDIzNDYwLDI0NzEzLDI4Mjg3LDI4NDIyLDMwMTQyLDM2MDc0LDIzNDU1LDM0MDQ4LDMxNzEyLDIwNTk0LDI2NjEyLDMzNDM3LDIzNjQ5LDM0MTIyLDMyMjg2LDMzMjk0LDIwODg5LDIzNTU2LDI1NDQ4LDM2MTk4LDI2MDEy''@;'; put 'put ''LDI5MDM4LDMxMDM4LDMyMDIzLDMyNzczLDM1NjEzLDM2NTU0LDM2OTc0LDM0NTAzLDM3MDM0LDIwNTExLDIxMjQyLDIzNjEwLDI2NDUxLDI4Nzk2LDI5MjM3LDM3MTk2LDM3MzIwLDM3Njc1LDMzNTA5LDIzNDkwLDI0MzY5LDI0ODI1LDIwMDI3LDIxNDYyLDIzNDMyLDI1MTYzLDI2NDE3LDI3''@;'; put 'put ''NTMwLDI5NDE3LDI5NjY0LDMxMjc4LDMzMTMxLDM2MjU5LDM3MjAyLDM5MzE4LDIwNzU0LDIxNDYzLDIxNjEwLDIzNTUxLDI1NDgwLDI3MTkzLDMyMTcyLDM4NjU2LDIyMjM0LDIxNDU0LDIxNjA4LDIzNDQ3LDIzNjAxLDI0MDMwLDIwNDYyLDI0ODMzLDI1MzQyLDI3OTU0LDMxMTY4LDMxMTc5''@;'; put 'put ''LDMyMDY2LDMyMzMzLDMyNzIyLDMzMjYxLDMzMzExLDMzOTM2LDM0ODg2LDM1MTg2LDM1NzI4LDM2NDY4LDM2NjU1LDM2OTEzLDM3MTk1LDM3MjI4LDM4NTk4LDM3Mjc2LDIwMTYwLDIwMzAzLDIwODA1LDIxMzEzLDI0NDY3LDI1MTAyLDI2NTgwLDI3NzEzLDI4MTcxLDI5NTM5LDMyMjk0LDM3''@;'; put 'put ''MzI1LDM3NTA3LDIxNDYwLDIyODA5LDIzNDg3LDI4MTEzLDMxMDY5LDMyMzAyLDMxODk5LDIyNjU0LDI5MDg3LDIwOTg2LDM0ODk5LDM2ODQ4LDIwNDI2LDIzODAzLDI2MTQ5LDMwNjM2LDMxNDU5LDMzMzA4LDM5NDIzLDIwOTM0LDI0NDkwLDI2MDkyLDI2OTkxLDI3NTI5LDI4MTQ3LDI4MzEw''@;'; put 'put ''LDI4NTE2LDMwNDYyLDMyMDIwLDI0MDMzLDM2OTgxLDM3MjU1LDM4OTE4LDIwOTY2LDIxMDIxLDI1MTUyLDI2MjU3LDI2MzI5LDI4MTg2LDI0MjQ2LDMyMjEwLDMyNjI2LDI2MzYwLDM0MjIzLDM0Mjk1LDM1NTc2LDIxMTYxLDIxNDY1LDIyODk5LDI0MjA3LDI0NDY0LDI0NjYxLDM3NjA0LDM4''@;'; put 'put ''NTAwLDIwNjYzLDIwNzY3LDIxMjEzLDIxMjgwLDIxMzE5LDIxNDg0LDIxNzM2LDIxODMwLDIxODA5LDIyMDM5LDIyODg4LDIyOTc0LDIzMTAwLDIzNDc3LDIzNTU4LDIzNTY3LDIzNTY5LDIzNTc4LDI0MTk2LDI0MjAyLDI0Mjg4LDI0NDMyLDI1MjE1LDI1MjIwLDI1MzA3LDI1NDg0LDI1NDYz''@;'; put 'put ''LDI2MTE5LDI2MTI0LDI2MTU3LDI2MjMwLDI2NDk0LDI2Nzg2LDI3MTY3LDI3MTg5LDI3ODM2LDI4MDQwLDI4MTY5LDI4MjQ4LDI4OTg4LDI4OTY2LDI5MDMxLDMwMTUxLDMwNDY1LDMwODEzLDMwOTc3LDMxMDc3LDMxMjE2LDMxNDU2LDMxNTA1LDMxOTExLDMyMDU3LDMyOTE4LDMzNzUwLDMz''@;'; put 'put ''OTMxLDM0MTIxLDM0OTA5LDM1MDU5LDM1MzU5LDM1Mzg4LDM1NDEyLDM1NDQzLDM1OTM3LDM2MDYyLDM3Mjg0LDM3NDc4LDM3NzU4LDM3OTEyLDM4NTU2LDM4ODA4LDE5OTc4LDE5OTc2LDE5OTk4LDIwMDU1LDIwODg3LDIxMTA0LDIyNDc4LDIyNTgwLDIyNzMyLDIzMzMwLDI0MTIwLDI0Nzcz''@;'; put 'put ''LDI1ODU0LDI2NDY1LDI2NDU0LDI3OTcyLDI5MzY2LDMwMDY3LDMxMzMxLDMzOTc2LDM1Njk4LDM3MzA0LDM3NjY0LDIyMDY1LDIyNTE2LDM5MTY2LDI1MzI1LDI2ODkzLDI3NTQyLDI5MTY1LDMyMzQwLDMyODg3LDMzMzk0LDM1MzAyLDM5MTM1LDM0NjQ1LDM2Nzg1LDIzNjExLDIwMjgwLDIw''@;'; put 'put ''NDQ5LDIwNDA1LDIxNzY3LDIzMDcyLDIzNTE3LDIzNTI5LDI0NTE1LDI0OTEwLDI1MzkxLDI2MDMyLDI2MTg3LDI2ODYyLDI3MDM1LDI4MDI0LDI4MTQ1LDMwMDAzLDMwMTM3LDMwNDk1LDMxMDcwLDMxMjA2LDMyMDUxLDMzMjUxLDMzNDU1LDM0MjE4LDM1MjQyLDM1Mzg2LDM2NTIzLDM2NzYz''@;'; put 'put ''LDM2OTE0LDM3MzQxLDM4NjYzLDIwMTU0LDIwMTYxLDIwOTk1LDIyNjQ1LDIyNzY0LDIzNTYzLDI5OTc4LDIzNjEzLDMzMTAyLDM1MzM4LDM2ODA1LDM4NDk5LDM4NzY1LDMxNTI1LDM1NTM1LDM4OTIwLDM3MjE4LDIyMjU5LDIxNDE2LDM2ODg3LDIxNTYxLDIyNDAyLDI0MTAxLDI1NTEyLDI3''@;'; put 'put ''NzAwLDI4ODEwLDMwNTYxLDMxODgzLDMyNzM2LDM0OTI4LDM2OTMwLDM3MjA0LDM3NjQ4LDM3NjU2LDM4NTQzLDI5NzkwLDM5NjIwLDIzODE1LDIzOTEzLDI1OTY4LDI2NTMwLDM2MjY0LDM4NjE5LDI1NDU0LDI2NDQxLDI2OTA1LDMzNzMzLDM4OTM1LDM4NTkyLDM1MDcwLDI4NTQ4LDI1NzIy''@;'; put 'put ''LDIzNTQ0LDE5OTkwLDI4NzE2LDMwMDQ1LDI2MTU5LDIwOTMyLDIxMDQ2LDIxMjE4LDIyOTk1LDI0NDQ5LDI0NjE1LDI1MTA0LDI1OTE5LDI1OTcyLDI2MTQzLDI2MjI4LDI2ODY2LDI2NjQ2LDI3NDkxLDI4MTY1LDI5Mjk4LDI5OTgzLDMwNDI3LDMxOTM0LDMyODU0LDIyNzY4LDM1MDY5LDM1''@;'; put 'put ''MTk5LDM1NDg4LDM1NDc1LDM1NTMxLDM2ODkzLDM3MjY2LDM4NzM4LDM4NzQ1LDI1OTkzLDMxMjQ2LDMzMDMwLDM4NTg3LDI0MTA5LDI0Nzk2LDI1MTE0LDI2MDIxLDI2MTMyLDI2NTEyLDMwNzA3LDMxMzA5LDMxODIxLDMyMzE4LDMzMDM0LDM2MDEyLDM2MTk2LDM2MzIxLDM2NDQ3LDMwODg5''@;'; put 'put ''LDIwOTk5LDI1MzA1LDI1NTA5LDI1NjY2LDI1MjQwLDM1MzczLDMxMzYzLDMxNjgwLDM1NTAwLDM4NjM0LDMyMTE4LDMzMjkyLDM0NjMzLDIwMTg1LDIwODA4LDIxMzE1LDIxMzQ0LDIzNDU5LDIzNTU0LDIzNTc0LDI0MDI5LDI1MTI2LDI1MTU5LDI1Nzc2LDI2NjQzLDI2Njc2LDI3ODQ5LDI3''@;'; put 'put ''OTczLDI3OTI3LDI2NTc5LDI4NTA4LDI5MDA2LDI5MDUzLDI2MDU5LDMxMzU5LDMxNjYxLDMyMjE4LDMyMzMwLDMyNjgwLDMzMTQ2LDMzMzA3LDMzMzM3LDM0MjE0LDM1NDM4LDM2MDQ2LDM2MzQxLDM2OTg0LDM2OTgzLDM3NTQ5LDM3NTIxLDM4Mjc1LDM5ODU0LDIxMDY5LDIxODkyLDI4NDcy''@;'; put 'put ''LDI4OTgyLDIwODQwLDMxMTA5LDMyMzQxLDMzMjAzLDMxOTUwLDIyMDkyLDIyNjA5LDIzNzIwLDI1NTE0LDI2MzY2LDI2MzY1LDI2OTcwLDI5NDAxLDMwMDk1LDMwMDk0LDMwOTkwLDMxMDYyLDMxMTk5LDMxODk1LDMyMDMyLDMyMDY4LDM0MzExLDM1MzgwLDM4NDU5LDM2OTYxLDQwNzM2LDIw''@;'; put 'put ''NzExLDIxMTA5LDIxNDUyLDIxNDc0LDIwNDg5LDIxOTMwLDIyNzY2LDIyODYzLDI5MjQ1LDIzNDM1LDIzNjUyLDIxMjc3LDI0ODAzLDI0ODE5LDI1NDM2LDI1NDc1LDI1NDA3LDI1NTMxLDI1ODA1LDI2MDg5LDI2MzYxLDI0MDM1LDI3MDg1LDI3MTMzLDI4NDM3LDI5MTU3LDIwMTA1LDMwMTg1''@;'; put 'put ''LDMwNDU2LDMxMzc5LDMxOTY3LDMyMjA3LDMyMTU2LDMyODY1LDMzNjA5LDMzNjI0LDMzOTAwLDMzOTgwLDM0Mjk5LDM1MDEzLDM2MjA4LDM2ODY1LDM2OTczLDM3NzgzLDM4Njg0LDM5NDQyLDIwNjg3LDIyNjc5LDI0OTc0LDMzMjM1LDM0MTAxLDM2MTA0LDM2ODk2LDIwNDE5LDIwNTk2LDIx''@;'; put 'put ''MDYzLDIxMzYzLDI0Njg3LDI1NDE3LDI2NDYzLDI4MjA0LDM2Mjc1LDM2ODk1LDIwNDM5LDIzNjQ2LDM2MDQyLDI2MDYzLDMyMTU0LDIxMzMwLDM0OTY2LDIwODU0LDI1NTM5LDIzMzg0LDIzNDAzLDIzNTYyLDI1NjEzLDI2NDQ5LDM2OTU2LDIwMTgyLDIyODEwLDIyODI2LDI3NzYwLDM1NDA5''@;'; put 'put ''LDIxODIyLDIyNTQ5LDIyOTQ5LDI0ODE2LDI1MTcxLDI2NTYxLDMzMzMzLDI2OTY1LDM4NDY0LDM5MzY0LDM5NDY0LDIwMzA3LDIyNTM0LDIzNTUwLDMyNzg0LDIzNzI5LDI0MTExLDI0NDUzLDI0NjA4LDI0OTA3LDI1MTQwLDI2MzY3LDI3ODg4LDI4MzgyLDMyOTc0LDMzMTUxLDMzNDkyLDM0''@;'; put 'put ''OTU1LDM2MDI0LDM2ODY0LDM2OTEwLDM4NTM4LDQwNjY3LDM5ODk5LDIwMTk1LDIxNDg4LDIyODIzLDMxNTMyLDM3MjYxLDM4OTg4LDQwNDQxLDI4MzgxLDI4NzExLDIxMzMxLDIxODI4LDIzNDI5LDI1MTc2LDI1MjQ2LDI1Mjk5LDI3ODEwLDI4NjU1LDI5NzMwLDM1MzUxLDM3OTQ0LDI4NjA5''@;'; put 'put ''LDM1NTgyLDMzNTkyLDIwOTY3LDM0NTUyLDIxNDgyLDIxNDgxLDIwMjk0LDM2OTQ4LDM2Nzg0LDIyODkwLDMzMDczLDI0MDYxLDMxNDY2LDM2Nzk5LDI2ODQyLDM1ODk1LDI5NDMyLDQwMDA4LDI3MTk3LDM1NTA0LDIwMDI1LDIxMzM2LDIyMDIyLDIyMzc0LDI1Mjg1LDI1NTA2LDI2MDg2LDI3''@;'; put 'put ''NDcwLDI4MTI5LDI4MjUxLDI4ODQ1LDMwNzAxLDMxNDcxLDMxNjU4LDMyMTg3LDMyODI5LDMyOTY2LDM0NTA3LDM1NDc3LDM3NzIzLDIyMjQzLDIyNzI3LDI0MzgyLDI2MDI5LDI2MjYyLDI3MjY0LDI3NTczLDMwMDA3LDM1NTI3LDIwNTE2LDMwNjkzLDIyMzIwLDI0MzQ3LDI0Njc3LDI2MjM0''@;'; put 'put ''LDI3NzQ0LDMwMTk2LDMxMjU4LDMyNjIyLDMzMjY4LDM0NTg0LDM2OTMzLDM5MzQ3LDMxNjg5LDMwMDQ0LDMxNDgxLDMxNTY5LDMzOTg4LDM2ODgwLDMxMjA5LDMxMzc4LDMzNTkwLDIzMjY1LDMwNTI4LDIwMDEzLDIwMjEwLDIzNDQ5LDI0NTQ0LDI1Mjc3LDI2MTcyLDI2NjA5LDI3ODgwLDM0''@;'; put 'put ''NDExLDM0OTM1LDM1Mzg3LDM3MTk4LDM3NjE5LDM5Mzc2LDI3MTU5LDI4NzEwLDI5NDgyLDMzNTExLDMzODc5LDM2MDE1LDE5OTY5LDIwODA2LDIwOTM5LDIxODk5LDIzNTQxLDI0MDg2LDI0MTE1LDI0MTkzLDI0MzQwLDI0MzczLDI0NDI3LDI0NTAwLDI1MDc0LDI1MzYxLDI2Mjc0LDI2Mzk3''@;'; put 'put ''LDI4NTI2LDI5MjY2LDMwMDEwLDMwNTIyLDMyODg0LDMzMDgxLDMzMTQ0LDM0Njc4LDM1NTE5LDM1NTQ4LDM2MjI5LDM2MzM5LDM3NTMwLDM4MjYzLDM4OTE0LDQwMTY1LDIxMTg5LDI1NDMxLDMwNDUyLDI2Mzg5LDI3Nzg0LDI5NjQ1LDM2MDM1LDM3ODA2LDM4NTE1LDI3OTQxLDIyNjg0LDI2''@;'; put 'put ''ODk0LDI3MDg0LDM2ODYxLDM3Nzg2LDMwMTcxLDM2ODkwLDIyNjE4LDI2NjI2LDI1NTI0LDI3MTMxLDIwMjkxLDI4NDYwLDI2NTg0LDM2Nzk1LDM0MDg2LDMyMTgwLDM3NzE2LDI2OTQzLDI4NTI4LDIyMzc4LDIyNzc1LDIzMzQwLDMyMDQ0LDI5MjI2LDIxNTE0LDM3MzQ3LDQwMzcyLDIwMTQx''@;'; put 'put ''LDIwMzAyLDIwNTcyLDIwNTk3LDIxMDU5LDM1OTk4LDIxNTc2LDIyNTY0LDIzNDUwLDI0MDkzLDI0MjEzLDI0MjM3LDI0MzExLDI0MzUxLDI0NzE2LDI1MjY5LDI1NDAyLDI1NTUyLDI2Nzk5LDI3NzEyLDMwODU1LDMxMTE4LDMxMjQzLDMyMjI0LDMzMzUxLDM1MzMwLDM1NTU4LDM2NDIwLDM2''@;'; put 'put ''ODgzLDM3MDQ4LDM3MTY1LDM3MzM2LDQwNzE4LDI3ODc3LDI1Njg4LDI1ODI2LDI1OTczLDI4NDA0LDMwMzQwLDMxNTE1LDM2OTY5LDM3ODQxLDI4MzQ2LDIxNzQ2LDI0NTA1LDI1NzY0LDM2Njg1LDM2ODQ1LDM3NDQ0LDIwODU2LDIyNjM1LDIyODI1LDIzNjM3LDI0MjE1LDI4MTU1LDMyMzk5''@;'; put 'put ''LDI5OTgwLDM2MDI4LDM2NTc4LDM5MDAzLDI4ODU3LDIwMjUzLDI3NTgzLDI4NTkzLDNlNCwzODY1MSwyMDgxNCwyMTUyMCwyMjU4MSwyMjYxNSwyMjk1NiwyMzY0OCwyNDQ2NiwyNjAwNywyNjQ2MCwyODE5MywzMDMzMSwzMzc1OSwzNjA3NywzNjg4NCwzNzExNywzNzcwOSwzMDc1NywzMDc3''@;'; put 'put ''OCwyMTE2MiwyNDIzMCwyMjMwMywyMjkwMCwyNDU5NCwyMDQ5OCwyMDgyNiwyMDkwOCwyMDk0MSwyMDk5MiwyMTc3NiwyMjYxMiwyMjYxNiwyMjg3MSwyMzQ0NSwyMzc5OCwyMzk0NywyNDc2NCwyNTIzNywyNTY0NSwyNjQ4MSwyNjY5MSwyNjgxMiwyNjg0NywzMDQyMywyODEyMCwyODI3MSwy''@;'; put 'put ''ODA1OSwyODc4MywyOTEyOCwyNDQwMywzMDE2OCwzMTA5NSwzMTU2MSwzMTU3MiwzMTU3MCwzMTk1OCwzMjExMywyMTA0MCwzMzg5MSwzNDE1MywzNDI3NiwzNTM0MiwzNTU4OCwzNTkxMCwzNjM2NywzNjg2NywzNjg3OSwzNzkxMywzODUxOCwzODk1NywzOTQ3MiwzODM2MCwyMDY4NSwyMTIw''@;'; put 'put ''NSwyMTUxNiwyMjUzMCwyMzU2NiwyNDk5OSwyNTc1OCwyNzkzNCwzMDY0MywzMTQ2MSwzMzAxMiwzMzc5NiwzNjk0NywzNzUwOSwyMzc3Niw0MDE5OSwyMTMxMSwyNDQ3MSwyNDQ5OSwyODA2MCwyOTMwNSwzMDU2MywzMTE2NywzMTcxNiwyNzYwMiwyOTQyMCwzNTUwMSwyNjYyNywyNzIzMywy''@;'; put 'put ''MDk4NCwzMTM2MSwyNjkzMiwyMzYyNiw0MDE4MiwzMzUxNSwyMzQ5MywzNzE5MywyODcwMiwyMjEzNiwyMzY2MywyNDc3NSwyNTk1OCwyNzc4OCwzNTkzMCwzNjkyOSwzODkzMSwyMTU4NSwyNjMxMSwzNzM4OSwyMjg1NiwzNzAyNywyMDg2OSwyMDA0NSwyMDk3MCwzNDIwMSwzNTU5OCwyODc2''@;'; put 'put ''MCwyNTQ2NiwzNzcwNywyNjk3OCwzOTM0OCwzMjI2MCwzMDA3MSwyMTMzNSwyNjk3NiwzNjU3NSwzODYyNywyNzc0MSwyMDEwOCwyMzYxMiwyNDMzNiwzNjg0MSwyMTI1MCwzNjA0OSwzMjkwNSwzNDQyNSwyNDMxOSwyNjA4NSwyMDA4MywyMDgzNywyMjkxNCwyMzYxNSwzODg5NCwyMDIxOSwy''@;'; put 'put ''MjkyMiwyNDUyNSwzNTQ2OSwyODY0MSwzMTE1MiwzMTA3NCwyMzUyNywzMzkwNSwyOTQ4MywyOTEwNSwyNDE4MCwyNDU2NSwyNTQ2NywyNTc1NCwyOTEyMywzMTg5NiwyMDAzNSwyNDMxNiwyMDA0MywyMjQ5MiwyMjE3OCwyNDc0NSwyODYxMSwzMjAxMywzMzAyMSwzMzA3NSwzMzIxNSwzNjc4''@;'; put 'put ''NiwzNTIyMywzNDQ2OCwyNDA1MiwyNTIyNiwyNTc3MywzNTIwNywyNjQ4NywyNzg3NCwyNzk2NiwyOTc1MCwzMDc3MiwyMzExMCwzMjYyOSwzMzQ1MywzOTM0MCwyMDQ2NywyNDI1OSwyNTMwOSwyNTQ5MCwyNTk0MywyNjQ3OSwzMDQwMywyOTI2MCwzMjk3MiwzMjk1NCwzNjY0OSwzNzE5Nywy''@;'; put 'put ''MDQ5MywyMjUyMSwyMzE4NiwyNjc1NywyNjk5NSwyOTAyOCwyOTQzNywzNjAyMywyMjc3MCwzNjA2NCwzODUwNiwzNjg4OSwzNDY4NywzMTIwNCwzMDY5NSwzMzgzMywyMDI3MSwyMTA5MywyMTMzOCwyNTI5MywyNjU3NSwyNzg1MCwzMDMzMywzMTYzNiwzMTg5MywzMzMzNCwzNDE4MCwzNjg0''@;'; put 'put ''MywyNjMzMywyODQ0OCwyOTE5MCwzMjI4MywzMzcwNywzOTM2MSw0MDYxNCwyMDk4OSwzMTY2NSwzMDgzNCwzMTY3MiwzMjkwMywzMTU2MCwyNzM2OCwyNDE2MSwzMjkwOCwzMDAzMywzMDA0OCwyMDg0MywzNzQ3NCwyODMwMCwzMDMzMCwzNzI3MSwzOTY1OCwyMDI0MCwzMjYyNCwyNTI0NCwz''@;'; put 'put ''MTU2NywzODMwOSw0MDE2OSwyMjEzOCwyMjYxNywzNDUzMiwzODU4OCwyMDI3NiwyMTAyOCwyMTMyMiwyMTQ1MywyMTQ2NywyNDA3MCwyNTY0NCwyNjAwMSwyNjQ5NSwyNzcxMCwyNzcyNiwyOTI1NiwyOTM1OSwyOTY3NywzMDAzNiwzMjMyMSwzMzMyNCwzNDI4MSwzNjAwOSwzMTY4NCwzNzMx''@;'; put 'put ''OCwyOTAzMywzODkzMCwzOTE1MSwyNTQwNSwyNjIxNywzMDA1OCwzMDQzNiwzMDkyOCwzNDExNSwzNDU0MiwyMTI5MCwyMTMyOSwyMTU0MiwyMjkxNSwyNDE5OSwyNDQ0NCwyNDc1NCwyNTE2MSwyNTIwOSwyNTI1OSwyNmUzLDI3NjA0LDI3ODUyLDMwMTMwLDMwMzgyLDMwODY1LDMxMTkyLDMy''@;'; put 'put ''MjAzLDMyNjMxLDMyOTMzLDM0OTg3LDM1NTEzLDM2MDI3LDM2OTkxLDM4NzUwLDM5MTMxLDI3MTQ3LDMxODAwLDIwNjMzLDIzNjE0LDI0NDk0LDI2NTAzLDI3NjA4LDI5NzQ5LDMwNDczLDMyNjU0LDQwNzYzLDI2NTcwLDMxMjU1LDIxMzA1LDMwMDkxLDM5NjYxLDI0NDIyLDMzMTgxLDMzNzc3''@;'; put 'put ''LDMyOTIwLDI0MzgwLDI0NTE3LDMwMDUwLDMxNTU4LDM2OTI0LDI2NzI3LDIzMDE5LDIzMTk1LDMyMDE2LDMwMzM0LDM1NjI4LDIwNDY5LDI0NDI2LDI3MTYxLDI3NzAzLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1NDEzLDM1OTYxLDI0Mjg3LDI1NTUxLDMwMTQ5LDMxMTg2LDMzNDk1LDM3''@;'; put 'put ''NjcyLDM3NjE4LDMzOTQ4LDM0NTQxLDM5OTgxLDIxNjk3LDI0NDI4LDI1OTk2LDI3OTk2LDI4NjkzLDM2MDA3LDM2MDUxLDM4OTcxLDI1OTM1LDI5OTQyLDE5OTgxLDIwMTg0LDIyNDk2LDIyODI3LDIzMTQyLDIzNTAwLDIwOTA0LDI0MDY3LDI0MjIwLDI0NTk4LDI1MjA2LDI1OTc1LDI2MDIz''@;'; put 'put ''LDI2MjIyLDI4MDE0LDI5MjM4LDMxNTI2LDMzMTA0LDMzMTc4LDMzNDMzLDM1Njc2LDM2ZTMsMzYwNzAsMzYyMTIsMzg0MjgsMzg0NjgsMjAzOTgsMjU3NzEsMjc0OTQsMzMzMTAsMzM4ODksMzQxNTQsMzcwOTYsMjM1NTMsMjY5NjMsMzkwODAsMzM5MTQsMzQxMzUsMjAyMzksMjExMDMsMjQ0''@;'; put 'put ''ODksMjQxMzMsMjYzODEsMzExMTksMzMxNDUsMzUwNzksMzUyMDYsMjgxNDksMjQzNDMsMjUxNzMsMjc4MzIsMjAxNzUsMjkyODksMzk4MjYsMjA5OTgsMjE1NjMsMjIxMzIsMjI3MDcsMjQ5OTYsMjUxOTgsMjg5NTQsMjI4OTQsMzE4ODEsMzE5NjYsMzIwMjcsMzg2NDAsMjU5OTEsMzI4NjIs''@;'; put 'put ''MTk5OTMsMjAzNDEsMjA4NTMsMjI1OTIsMjQxNjMsMjQxNzksMjQzMzAsMjY1NjQsMjAwMDYsMzQxMDksMzgyODEsMzg0OTEsMzE4NTksMzg5MTMsMjA3MzEsMjI3MjEsMzAyOTQsMzA4ODcsMjEwMjksMzA2MjksMzQwNjUsMzE2MjIsMjA1NTksMjI3OTMsMjkyNTUsMzE2ODcsMzIyMzIsMzY3''@;'; put 'put ''OTQsMzY4MjAsMzY5NDEsMjA0MTUsMjExOTMsMjMwODEsMjQzMjEsMzg4MjksMjA0NDUsMzMzMDMsMzc2MTAsMjIyNzUsMjU0MjksMjc0OTcsMjk5OTUsMzUwMzYsMzY2MjgsMzEyOTgsMjEyMTUsMjI2NzUsMjQ5MTcsMjUwOTgsMjYyODYsMjc1OTcsMzE4MDcsMzM3NjksMjA1MTUsMjA0NzIs''@;'; put 'put ''MjEyNTMsMjE1NzQsMjI1NzcsMjI4NTcsMjM0NTMsMjM3OTIsMjM3OTEsMjM4NDksMjQyMTQsMjUyNjUsMjU0NDcsMjU5MTgsMjYwNDEsMjYzNzksMjc4NjEsMjc4NzMsMjg5MjEsMzA3NzAsMzIyOTksMzI5OTAsMzM0NTksMzM4MDQsMzQwMjgsMzQ1NjIsMzUwOTAsMzUzNzAsMzU5MTQsMzcw''@;'; put 'put ''MzAsMzc1ODYsMzkxNjUsNDAxNzksNDAzMDAsMjAwNDcsMjAxMjksMjA2MjEsMjEwNzgsMjIzNDYsMjI5NTIsMjQxMjUsMjQ1MzYsMjQ1MzcsMjUxNTEsMjYyOTIsMjYzOTUsMjY1NzYsMjY4MzQsMjA4ODIsMzIwMzMsMzI5MzgsMzMxOTIsMzU1ODQsMzU5ODAsMzYwMzEsMzc1MDIsMzg0NTAs''@;'; put 'put ''MjE1MzYsMzg5NTYsMjEyNzEsMjA2OTMsMjEzNDAsMjI2OTYsMjU3NzgsMjY0MjAsMjkyODcsMzA1NjYsMzEzMDIsMzczNTAsMjExODcsMjc4MDksMjc1MjYsMjI1MjgsMjQxNDAsMjI4NjgsMjY0MTIsMzI3NjMsMjA5NjEsMzA0MDYsMjU3MDUsMzA5NTIsMzk3NjQsNDA2MzUsMjI0NzUsMjI5''@;'; put 'put ''NjksMjYxNTEsMjY1MjIsMjc1OTgsMjE3MzcsMjcwOTcsMjQxNDksMzMxODAsMjY1MTcsMzk4NTAsMjY2MjIsNDAwMTgsMjY3MTcsMjAxMzQsMjA0NTEsMjE0NDgsMjUyNzMsMjY0MTEsMjc4MTksMzY4MDQsMjAzOTcsMzIzNjUsNDA2MzksMTk5NzUsMjQ5MzAsMjgyODgsMjg0NTksMzQwNjcs''@;'; put 'put ''MjE2MTksMjY0MTAsMzk3NDksMjQwNTEsMzE2MzcsMjM3MjQsMjM0OTQsMzQ1ODgsMjgyMzQsMzQwMDEsMzEyNTIsMzMwMzIsMjI5MzcsMzE4ODUsMjc2NjUsMzA0OTYsMjEyMDksMjI4MTgsMjg5NjEsMjkyNzksMzA2ODMsMzg2OTUsNDAyODksMjY4OTEsMjMxNjcsMjMwNjQsMjA5MDEsMjE1''@;'; put 'put ''MTcsMjE2MjksMjYxMjYsMzA0MzEsMzY4NTUsMzc1MjgsNDAxODAsMjMwMTgsMjkyNzcsMjgzNTcsMjA4MTMsMjY4MjUsMzIxOTEsMzIyMzYsMzg3NTQsNDA2MzQsMjU3MjAsMjcxNjksMzM1MzgsMjI5MTYsMjMzOTEsMjc2MTEsMjk0NjcsMzA0NTAsMzIxNzgsMzI3OTEsMzM5NDUsMjA3ODYs''@;'; put 'put ''MjY0MDgsNDA2NjUsMzA0NDYsMjY0NjYsMjEyNDcsMzkxNzMsMjM1ODgsMjUxNDcsMzE4NzAsMzYwMTYsMjE4MzksMjQ3NTgsMzIwMTEsMzgyNzIsMjEyNDksMjAwNjMsMjA5MTgsMjI4MTIsMjkyNDIsMzI4MjIsMzczMjYsMjQzNTcsMzA2OTAsMjEzODAsMjQ0NDEsMzIwMDQsMzQyMjAsMzUz''@;'; put 'put ''NzksMzY0OTMsMzg3NDIsMjY2MTEsMzQyMjIsMzc5NzEsMjQ4NDEsMjQ4NDAsMjc4MzMsMzAyOTAsMzU1NjUsMzY2NjQsMjE4MDcsMjAzMDUsMjA3NzgsMjExOTEsMjE0NTEsMjM0NjEsMjQxODksMjQ3MzYsMjQ5NjIsMjU1NTgsMjYzNzcsMjY1ODYsMjgyNjMsMjgwNDQsMjk0OTQsMjk0OTUs''@;'; put 'put ''MzAwMDEsMzEwNTYsMzUwMjksMzU0ODAsMzY5MzgsMzcwMDksMzcxMDksMzg1OTYsMzQ3MDEsMjI4MDUsMjAxMDQsMjAzMTMsMTk5ODIsMzU0NjUsMzY2NzEsMzg5MjgsMjA2NTMsMjQxODgsMjI5MzQsMjM0ODEsMjQyNDgsMjU1NjIsMjU1OTQsMjU3OTMsMjYzMzIsMjY5NTQsMjcwOTYsMjc5''@;'; put 'put ''MTUsMjgzNDIsMjkwNzYsMjk5OTIsMzE0MDcsMzI2NTAsMzI3NjgsMzM4NjUsMzM5OTMsMzUyMDEsMzU2MTcsMzYzNjIsMzY5NjUsMzg1MjUsMzkxNzgsMjQ5NTgsMjUyMzMsMjc0NDIsMjc3NzksMjgwMjAsMzI3MTYsMzI3NjQsMjgwOTYsMzI2NDUsMzQ3NDYsMzUwNjQsMjY0NjksMzM3MTMs''@;'; put 'put ''Mzg5NzIsMzg2NDcsMjc5MzEsMzIwOTcsMzM4NTMsMzcyMjYsMjAwODEsMjEzNjUsMjM4ODgsMjczOTYsMjg2NTEsMzQyNTMsMzQzNDksMzUyMzksMjEwMzMsMjE1MTksMjM2NTMsMjY0NDYsMjY3OTIsMjk3MDIsMjk4MjcsMzAxNzgsMzUwMjMsMzUwNDEsMzczMjQsMzg2MjYsMzg1MjAsMjQ0''@;'; put 'put ''NTksMjk1NzUsMzE0MzUsMzM4NzAsMjU1MDQsMzAwNTMsMjExMjksMjc5NjksMjgzMTYsMjk3MDUsMzAwNDEsMzA4MjcsMzE4OTAsMzg1MzQsMzE0NTIsNDA4NDUsMjA0MDYsMjQ5NDIsMjYwNTMsMzQzOTYsMjAxMDIsMjAxNDIsMjA2OTgsMjAwMDEsMjA5NDAsMjM1MzQsMjYwMDksMjY3NTMs''@;'; put 'put ''MjgwOTIsMjk0NzEsMzAyNzQsMzA2MzcsMzEyNjAsMzE5NzUsMzMzOTEsMzU1MzgsMzY5ODgsMzczMjcsMzg1MTcsMzg5MzYsMjExNDcsMzIyMDksMjA1MjMsMjE0MDAsMjY1MTksMjgxMDcsMjkxMzYsMjk3NDcsMzMyNTYsMzY2NTAsMzg1NjMsNDAwMjMsNDA2MDcsMjk3OTIsMjI1OTMsMjgw''@;'; put 'put ''NTcsMzIwNDcsMzkwMDYsMjAxOTYsMjAyNzgsMjAzNjMsMjA5MTksMjExNjksMjM5OTQsMjQ2MDQsMjk2MTgsMzEwMzYsMzM0OTEsMzc0MjgsMzg1ODMsMzg2NDYsMzg2NjYsNDA1OTksNDA4MDIsMjYyNzgsMjc1MDgsMjEwMTUsMjExNTUsMjg4NzIsMzUwMTAsMjQyNjUsMjQ2NTEsMjQ5NzYs''@;'; put 'put ''Mjg0NTEsMjkwMDEsMzE4MDYsMzIyNDQsMzI4NzksMzQwMzAsMzY4OTksMzc2NzYsMjE1NzAsMzk3OTEsMjczNDcsMjg4MDksMzYwMzQsMzYzMzUsMzg3MDYsMjExNzIsMjMxMDUsMjQyNjYsMjQzMjQsMjYzOTEsMjcwMDQsMjcwMjgsMjgwMTAsMjg0MzEsMjkyODIsMjk0MzYsMzE3MjUsMzI3''@;'; put 'put ''NjksMzI4OTQsMzQ2MzUsMzcwNzAsMjA4NDUsNDA1OTUsMzExMDgsMzI5MDcsMzc2ODIsMzU1NDIsMjA1MjUsMjE2NDQsMzU0NDEsMjc0OTgsMzYwMzYsMzMwMzEsMjQ3ODUsMjY1MjgsNDA0MzQsMjAxMjEsMjAxMjAsMzk5NTIsMzU0MzUsMzQyNDEsMzQxNTIsMjY4ODAsMjgyODYsMzA4NzEs''@;'; put 'put ''MzMxMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDMzMiwxOTk4NCwxOTk4OSwyMDAxMCwyMDAxNywyMDAyMiwyMDAyOCwyMDAzMSwyMDAzNCwyMDA1NCwyMDA1NiwyMDA5OCwyMDEwMSwzNTk0NywyMDEwNiwzMzI5OCwyNDMzMywyMDExMCwy''@;'; put 'put ''MDEyNiwyMDEyNywyMDEyOCwyMDEzMCwyMDE0NCwyMDE0NywyMDE1MCwyMDE3NCwyMDE3MywyMDE2NCwyMDE2NiwyMDE2MiwyMDE4MywyMDE5MCwyMDIwNSwyMDE5MSwyMDIxNSwyMDIzMywyMDMxNCwyMDI3MiwyMDMxNSwyMDMxNywyMDMxMSwyMDI5NSwyMDM0MiwyMDM2MCwyMDM2NywyMDM3''@;'; put 'put ''NiwyMDM0NywyMDMyOSwyMDMzNiwyMDM2OSwyMDMzNSwyMDM1OCwyMDM3NCwyMDc2MCwyMDQzNiwyMDQ0NywyMDQzMCwyMDQ0MCwyMDQ0MywyMDQzMywyMDQ0MiwyMDQzMiwyMDQ1MiwyMDQ1MywyMDUwNiwyMDUyMCwyMDUwMCwyMDUyMiwyMDUxNywyMDQ4NSwyMDI1MiwyMDQ3MCwyMDUxMywy''@;'; put 'put ''MDUyMSwyMDUyNCwyMDQ3OCwyMDQ2MywyMDQ5NywyMDQ4NiwyMDU0NywyMDU1MSwyNjM3MSwyMDU2NSwyMDU2MCwyMDU1MiwyMDU3MCwyMDU2NiwyMDU4OCwyMDYwMCwyMDYwOCwyMDYzNCwyMDYxMywyMDY2MCwyMDY1OCwyMDY4MSwyMDY4MiwyMDY1OSwyMDY3NCwyMDY5NCwyMDcwMiwyMDcw''@;'; put 'put ''OSwyMDcxNywyMDcwNywyMDcxOCwyMDcyOSwyMDcyNSwyMDc0NSwyMDczNywyMDczOCwyMDc1OCwyMDc1NywyMDc1NiwyMDc2MiwyMDc2OSwyMDc5NCwyMDc5MSwyMDc5NiwyMDc5NSwyMDc5OSwyMDgwMCwyMDgxOCwyMDgxMiwyMDgyMCwyMDgzNCwzMTQ4MCwyMDg0MSwyMDg0MiwyMDg0Niwy''@;'; put 'put ''MDg2NCwyMDg2NiwyMjIzMiwyMDg3NiwyMDg3MywyMDg3OSwyMDg4MSwyMDg4MywyMDg4NSwyMDg4NiwyMDkwMCwyMDkwMiwyMDg5OCwyMDkwNSwyMDkwNiwyMDkwNywyMDkxNSwyMDkxMywyMDkxNCwyMDkxMiwyMDkxNywyMDkyNSwyMDkzMywyMDkzNywyMDk1NSwyMDk2MCwzNDM4OSwyMDk2''@;'; put 'put ''OSwyMDk3MywyMDk3NiwyMDk4MSwyMDk5MCwyMDk5NiwyMTAwMywyMTAxMiwyMTAwNiwyMTAzMSwyMTAzNCwyMTAzOCwyMTA0MywyMTA0OSwyMTA3MSwyMTA2MCwyMTA2NywyMTA2OCwyMTA4NiwyMTA3NiwyMTA5OCwyMTEwOCwyMTA5NywyMTEwNywyMTExOSwyMTExNywyMTEzMywyMTE0MCwy''@;'; put 'put ''MTEzOCwyMTEwNSwyMTEyOCwyMTEzNywzNjc3NiwzNjc3NSwyMTE2NCwyMTE2NSwyMTE4MCwyMTE3MywyMTE4NSwyMTE5NywyMTIwNywyMTIxNCwyMTIxOSwyMTIyMiwzOTE0OSwyMTIxNiwyMTIzNSwyMTIzNywyMTI0MCwyMTI0MSwyMTI1NCwyMTI1NiwzMDAwOCwyMTI2MSwyMTI2NCwyMTI2''@;'; put 'put ''MywyMTI2OSwyMTI3NCwyMTI4MywyMTI5NSwyMTI5NywyMTI5OSwyMTMwNCwyMTMxMiwyMTMxOCwyMTMxNywxOTk5MSwyMTMyMSwyMTMyNSwyMDk1MCwyMTM0MiwyMTM1MywyMTM1OCwyMjgwOCwyMTM3MSwyMTM2NywyMTM3OCwyMTM5OCwyMTQwOCwyMTQxNCwyMTQxMywyMTQyMiwyMTQyNCwy''@;'; put 'put ''MTQzMCwyMTQ0MywzMTc2MiwzODYxNywyMTQ3MSwyNjM2NCwyOTE2NiwyMTQ4NiwyMTQ4MCwyMTQ4NSwyMTQ5OCwyMTUwNSwyMTU2NSwyMTU2OCwyMTU0OCwyMTU0OSwyMTU2NCwyMTU1MCwyMTU1OCwyMTU0NSwyMTUzMywyMTU4MiwyMTY0NywyMTYyMSwyMTY0NiwyMTU5OSwyMTYxNywyMTYy''@;'; put 'put ''MywyMTYxNiwyMTY1MCwyMTYyNywyMTYzMiwyMTYyMiwyMTYzNiwyMTY0OCwyMTYzOCwyMTcwMywyMTY2NiwyMTY4OCwyMTY2OSwyMTY3NiwyMTcwMCwyMTcwNCwyMTY3MiwyMTY3NSwyMTY5OCwyMTY2OCwyMTY5NCwyMTY5MiwyMTcyMCwyMTczMywyMTczNCwyMTc3NSwyMTc4MCwyMTc1Nywy''@;'; put 'put ''MTc0MiwyMTc0MSwyMTc1NCwyMTczMCwyMTgxNywyMTgyNCwyMTg1OSwyMTgzNiwyMTgwNiwyMTg1MiwyMTgyOSwyMTg0NiwyMTg0NywyMTgxNiwyMTgxMSwyMTg1MywyMTkxMywyMTg4OCwyMTY3OSwyMTg5OCwyMTkxOSwyMTg4MywyMTg4NiwyMTkxMiwyMTkxOCwyMTkzNCwyMTg4NCwyMTg5''@;'; put 'put ''MSwyMTkyOSwyMTg5NSwyMTkyOCwyMTk3OCwyMTk1NywyMTk4MywyMTk1NiwyMTk4MCwyMTk4OCwyMTk3MiwyMjAzNiwyMjAwNywyMjAzOCwyMjAxNCwyMjAxMywyMjA0MywyMjAwOSwyMjA5NCwyMjA5NiwyOTE1MSwyMjA2OCwyMjA3MCwyMjA2NiwyMjA3MiwyMjEyMywyMjExNiwyMjA2Mywy''@;'; put 'put ''MjEyNCwyMjEyMiwyMjE1MCwyMjE0NCwyMjE1NCwyMjE3NiwyMjE2NCwyMjE1OSwyMjE4MSwyMjE5MCwyMjE5OCwyMjE5NiwyMjIxMCwyMjIwNCwyMjIwOSwyMjIxMSwyMjIwOCwyMjIxNiwyMjIyMiwyMjIyNSwyMjIyNywyMjIzMSwyMjI1NCwyMjI2NSwyMjI3MiwyMjI3MSwyMjI3NiwyMjI4''@;'; put 'put ''MSwyMjI4MCwyMjI4MywyMjI4NSwyMjI5MSwyMjI5NiwyMjI5NCwyMTk1OSwyMjMwMCwyMjMxMCwyMjMyNywyMjMyOCwyMjM1MCwyMjMzMSwyMjMzNiwyMjM1MSwyMjM3NywyMjQ2NCwyMjQwOCwyMjM2OSwyMjM5OSwyMjQwOSwyMjQxOSwyMjQzMiwyMjQ1MSwyMjQzNiwyMjQ0MiwyMjQ0OCwy''@;'; put 'put ''MjQ2NywyMjQ3MCwyMjQ4NCwyMjQ4MiwyMjQ4MywyMjUzOCwyMjQ4NiwyMjQ5OSwyMjUzOSwyMjU1MywyMjU1NywyMjY0MiwyMjU2MSwyMjYyNiwyMjYwMywyMjY0MCwyNzU4NCwyMjYxMCwyMjU4OSwyMjY0OSwyMjY2MSwyMjcxMywyMjY4NywyMjY5OSwyMjcxNCwyMjc1MCwyMjcxNSwyMjcx''@;'; put 'put ''MiwyMjcwMiwyMjcyNSwyMjczOSwyMjczNywyMjc0MywyMjc0NSwyMjc0NCwyMjc1NywyMjc0OCwyMjc1NiwyMjc1MSwyMjc2NywyMjc3OCwyMjc3NywyMjc3OSwyMjc4MCwyMjc4MSwyMjc4NiwyMjc5NCwyMjgwMCwyMjgxMSwyNjc5MCwyMjgyMSwyMjgyOCwyMjgyOSwyMjgzNCwyMjg0MCwy''@;'; put 'put ''Mjg0NiwzMTQ0MiwyMjg2OSwyMjg2NCwyMjg2MiwyMjg3NCwyMjg3MiwyMjg4MiwyMjg4MCwyMjg4NywyMjg5MiwyMjg4OSwyMjkwNCwyMjkxMywyMjk0MSwyMDMxOCwyMDM5NSwyMjk0NywyMjk2MiwyMjk4MiwyMzAxNiwyMzAwNCwyMjkyNSwyMzAwMSwyMzAwMiwyMzA3NywyMzA3MSwyMzA1''@;'; put 'put ''NywyMzA2OCwyMzA0OSwyMzA2NiwyMzEwNCwyMzE0OCwyMzExMywyMzA5MywyMzA5NCwyMzEzOCwyMzE0NiwyMzE5NCwyMzIyOCwyMzIzMCwyMzI0MywyMzIzNCwyMzIyOSwyMzI2NywyMzI1NSwyMzI3MCwyMzI3MywyMzI1NCwyMzI5MCwyMzI5MSwyMzMwOCwyMzMwNywyMzMxOCwyMzM0Niwy''@;'; put 'put ''MzI0OCwyMzMzOCwyMzM1MCwyMzM1OCwyMzM2MywyMzM2NSwyMzM2MCwyMzM3NywyMzM4MSwyMzM4NiwyMzM4NywyMzM5NywyMzQwMSwyMzQwOCwyMzQxMSwyMzQxMywyMzQxNiwyNTk5MiwyMzQxOCwyMzQyNCwyMzQyNywyMzQ2MiwyMzQ4MCwyMzQ5MSwyMzQ5NSwyMzQ5NywyMzUwOCwyMzUw''@;'; put 'put ''NCwyMzUyNCwyMzUyNiwyMzUyMiwyMzUxOCwyMzUyNSwyMzUzMSwyMzUzNiwyMzU0MiwyMzUzOSwyMzU1NywyMzU1OSwyMzU2MCwyMzU2NSwyMzU3MSwyMzU4NCwyMzU4NiwyMzU5MiwyMzYwOCwyMzYwOSwyMzYxNywyMzYyMiwyMzYzMCwyMzYzNSwyMzYzMiwyMzYzMSwyMzQwOSwyMzY2MCwy''@;'; put 'put ''MzY2MiwyMDA2NiwyMzY3MCwyMzY3MywyMzY5MiwyMzY5NywyMzcwMCwyMjkzOSwyMzcyMywyMzczOSwyMzczNCwyMzc0MCwyMzczNSwyMzc0OSwyMzc0MiwyMzc1MSwyMzc2OSwyMzc4NSwyMzgwNSwyMzgwMiwyMzc4OSwyMzk0OCwyMzc4NiwyMzgxOSwyMzgyOSwyMzgzMSwyMzkwMCwyMzgz''@;'; put 'put ''OSwyMzgzNSwyMzgyNSwyMzgyOCwyMzg0MiwyMzgzNCwyMzgzMywyMzgzMiwyMzg4NCwyMzg5MCwyMzg4NiwyMzg4MywyMzkxNiwyMzkyMywyMzkyNiwyMzk0MywyMzk0MCwyMzkzOCwyMzk3MCwyMzk2NSwyMzk4MCwyMzk4MiwyMzk5NywyMzk1MiwyMzk5MSwyMzk5NiwyNDAwOSwyNDAxMywy''@;'; put 'put ''NDAxOSwyNDAxOCwyNDAyMiwyNDAyNywyNDA0MywyNDA1MCwyNDA1MywyNDA3NSwyNDA5MCwyNDA4OSwyNDA4MSwyNDA5MSwyNDExOCwyNDExOSwyNDEzMiwyNDEzMSwyNDEyOCwyNDE0MiwyNDE1MSwyNDE0OCwyNDE1OSwyNDE2MiwyNDE2NCwyNDEzNSwyNDE4MSwyNDE4MiwyNDE4Niw0MDYz''@;'; put 'put ''NiwyNDE5MSwyNDIyNCwyNDI1NywyNDI1OCwyNDI2NCwyNDI3MiwyNDI3MSwyNDI3OCwyNDI5MSwyNDI4NSwyNDI4MiwyNDI4MywyNDI5MCwyNDI4OSwyNDI5NiwyNDI5NywyNDMwMCwyNDMwNSwyNDMwNywyNDMwNCwyNDMwOCwyNDMxMiwyNDMxOCwyNDMyMywyNDMyOSwyNDQxMywyNDQxMiwy''@;'; put 'put ''NDMzMSwyNDMzNywyNDM0MiwyNDM2MSwyNDM2NSwyNDM3NiwyNDM4NSwyNDM5MiwyNDM5NiwyNDM5OCwyNDM2NywyNDQwMSwyNDQwNiwyNDQwNywyNDQwOSwyNDQxNywyNDQyOSwyNDQzNSwyNDQzOSwyNDQ1MSwyNDQ1MCwyNDQ0NywyNDQ1OCwyNDQ1NiwyNDQ2NSwyNDQ1NSwyNDQ3OCwyNDQ3''@;'; put 'put ''MywyNDQ3MiwyNDQ4MCwyNDQ4OCwyNDQ5MywyNDUwOCwyNDUzNCwyNDU3MSwyNDU0OCwyNDU2OCwyNDU2MSwyNDU0MSwyNDc1NSwyNDU3NSwyNDYwOSwyNDY3MiwyNDYwMSwyNDU5MiwyNDYxNywyNDU5MCwyNDYyNSwyNDYwMywyNDU5NywyNDYxOSwyNDYxNCwyNDU5MSwyNDYzNCwyNDY2Niwy''@;'; put 'put ''NDY0MSwyNDY4MiwyNDY5NSwyNDY3MSwyNDY1MCwyNDY0NiwyNDY1MywyNDY3NSwyNDY0MywyNDY3NiwyNDY0MiwyNDY4NCwyNDY4MywyNDY2NSwyNDcwNSwyNDcxNywyNDgwNywyNDcwNywyNDczMCwyNDcwOCwyNDczMSwyNDcyNiwyNDcyNywyNDcyMiwyNDc0MywyNDcxNSwyNDgwMSwyNDc2''@;'; put 'put ''MCwyNDgwMCwyNDc4NywyNDc1NiwyNDU2MCwyNDc2NSwyNDc3NCwyNDc1NywyNDc5MiwyNDkwOSwyNDg1MywyNDgzOCwyNDgyMiwyNDgyMywyNDgzMiwyNDgyMCwyNDgyNiwyNDgzNSwyNDg2NSwyNDgyNywyNDgxNywyNDg0NSwyNDg0NiwyNDkwMywyNDg5NCwyNDg3MiwyNDg3MSwyNDkwNiwy''@;'; put 'put ''NDg5NSwyNDg5MiwyNDg3NiwyNDg4NCwyNDg5MywyNDg5OCwyNDkwMCwyNDk0NywyNDk1MSwyNDkyMCwyNDkyMSwyNDkyMiwyNDkzOSwyNDk0OCwyNDk0MywyNDkzMywyNDk0NSwyNDkyNywyNDkyNSwyNDkxNSwyNDk0OSwyNDk4NSwyNDk4MiwyNDk2NywyNTAwNCwyNDk4MCwyNDk4NiwyNDk3''@;'; put 'put ''MCwyNDk3NywyNTAwMywyNTAwNiwyNTAzNiwyNTAzNCwyNTAzMywyNTA3OSwyNTAzMiwyNTAyNywyNTAzMCwyNTAxOCwyNTAzNSwzMjYzMywyNTAzNywyNTA2MiwyNTA1OSwyNTA3OCwyNTA4MiwyNTA3NiwyNTA4NywyNTA4NSwyNTA4NCwyNTA4NiwyNTA4OCwyNTA5NiwyNTA5NywyNTEwMSwy''@;'; put 'put ''NTEwMCwyNTEwOCwyNTExNSwyNTExOCwyNTEyMSwyNTEzMCwyNTEzNCwyNTEzNiwyNTEzOCwyNTEzOSwyNTE1MywyNTE2NiwyNTE4MiwyNTE4NywyNTE3OSwyNTE4NCwyNTE5MiwyNTIxMiwyNTIxOCwyNTIyNSwyNTIxNCwyNTIzNCwyNTIzNSwyNTIzOCwyNTMwMCwyNTIxOSwyNTIzNiwyNTMw''@;'; put 'put ''MywyNTI5NywyNTI3NSwyNTI5NSwyNTM0MywyNTI4NiwyNTgxMiwyNTI4OCwyNTMwOCwyNTI5MiwyNTI5MCwyNTI4MiwyNTI4NywyNTI0MywyNTI4OSwyNTM1NiwyNTMyNiwyNTMyOSwyNTM4MywyNTM0NiwyNTM1MiwyNTMyNywyNTMzMywyNTQyNCwyNTQwNiwyNTQyMSwyNTYyOCwyNTQyMywy''@;'; put 'put ''NTQ5NCwyNTQ4NiwyNTQ3MiwyNTUxNSwyNTQ2MiwyNTUwNywyNTQ4NywyNTQ4MSwyNTUwMywyNTUyNSwyNTQ1MSwyNTQ0OSwyNTUzNCwyNTU3NywyNTUzNiwyNTU0MiwyNTU3MSwyNTU0NSwyNTU1NCwyNTU5MCwyNTU0MCwyNTYyMiwyNTY1MiwyNTYwNiwyNTYxOSwyNTYzOCwyNTY1NCwyNTg4''@;'; put 'put ''NSwyNTYyMywyNTY0MCwyNTYxNSwyNTcwMywyNTcxMSwyNTcxOCwyNTY3OCwyNTg5OCwyNTc0OSwyNTc0NywyNTc2NSwyNTc2OSwyNTczNiwyNTc4OCwyNTgxOCwyNTgxMCwyNTc5NywyNTc5OSwyNTc4NywyNTgxNiwyNTc5NCwyNTg0MSwyNTgzMSwzMzI4OSwyNTgyNCwyNTgyNSwyNTI2MCwy''@;'; put 'put ''NTgyNywyNTgzOSwyNTkwMCwyNTg0NiwyNTg0NCwyNTg0MiwyNTg1MCwyNTg1NiwyNTg1MywyNTg4MCwyNTg4NCwyNTg2MSwyNTg5MiwyNTg5MSwyNTg5OSwyNTkwOCwyNTkwOSwyNTkxMSwyNTkxMCwyNTkxMiwzMDAyNywyNTkyOCwyNTk0MiwyNTk0MSwyNTkzMywyNTk0NCwyNTk1MCwyNTk0''@;'; put 'put ''OSwyNTk3MCwyNTk3NiwyNTk4NiwyNTk4NywzNTcyMiwyNjAxMSwyNjAxNSwyNjAyNywyNjAzOSwyNjA1MSwyNjA1NCwyNjA0OSwyNjA1MiwyNjA2MCwyNjA2NiwyNjA3NSwyNjA3MywyNjA4MCwyNjA4MSwyNjA5NywyNjQ4MiwyNjEyMiwyNjExNSwyNjEwNywyNjQ4MywyNjE2NSwyNjE2Niwy''@;'; put 'put ''NjE2NCwyNjE0MCwyNjE5MSwyNjE4MCwyNjE4NSwyNjE3NywyNjIwNiwyNjIwNSwyNjIxMiwyNjIxNSwyNjIxNiwyNjIwNywyNjIxMCwyNjIyNCwyNjI0MywyNjI0OCwyNjI1NCwyNjI0OSwyNjI0NCwyNjI2NCwyNjI2OSwyNjMwNSwyNjI5NywyNjMxMywyNjMwMiwyNjMwMCwyNjMwOCwyNjI5''@;'; put 'put ''NiwyNjMyNiwyNjMzMCwyNjMzNiwyNjE3NSwyNjM0MiwyNjM0NSwyNjM1MiwyNjM1NywyNjM1OSwyNjM4MywyNjM5MCwyNjM5OCwyNjQwNiwyNjQwNywzODcxMiwyNjQxNCwyNjQzMSwyNjQyMiwyNjQzMywyNjQyNCwyNjQyMywyNjQzOCwyNjQ2MiwyNjQ2NCwyNjQ1NywyNjQ2NywyNjQ2OCwy''@;'; put 'put ''NjUwNSwyNjQ4MCwyNjUzNywyNjQ5MiwyNjQ3NCwyNjUwOCwyNjUwNywyNjUzNCwyNjUyOSwyNjUwMSwyNjU1MSwyNjYwNywyNjU0OCwyNjYwNCwyNjU0NywyNjYwMSwyNjU1MiwyNjU5NiwyNjU5MCwyNjU4OSwyNjU5NCwyNjYwNiwyNjU1MywyNjU3NCwyNjU2NiwyNjU5OSwyNzI5MiwyNjY1''@;'; put 'put ''NCwyNjY5NCwyNjY2NSwyNjY4OCwyNjcwMSwyNjY3NCwyNjcwMiwyNjgwMywyNjY2NywyNjcxMywyNjcyMywyNjc0MywyNjc1MSwyNjc4MywyNjc2NywyNjc5NywyNjc3MiwyNjc4MSwyNjc3OSwyNjc1NSwyNzMxMCwyNjgwOSwyNjc0MCwyNjgwNSwyNjc4NCwyNjgxMCwyNjg5NSwyNjc2NSwy''@;'; put 'put ''Njc1MCwyNjg4MSwyNjgyNiwyNjg4OCwyNjg0MCwyNjkxNCwyNjkxOCwyNjg0OSwyNjg5MiwyNjgyOSwyNjgzNiwyNjg1NSwyNjgzNywyNjkzNCwyNjg5OCwyNjg4NCwyNjgzOSwyNjg1MSwyNjkxNywyNjg3MywyNjg0OCwyNjg2MywyNjkyMCwyNjkyMiwyNjkwNiwyNjkxNSwyNjkxMywyNjgy''@;'; put 'put ''MiwyNzAwMSwyNjk5OSwyNjk3MiwyN2UzLDI2OTg3LDI2OTY0LDI3MDA2LDI2OTkwLDI2OTM3LDI2OTk2LDI2OTQxLDI2OTY5LDI2OTI4LDI2OTc3LDI2OTc0LDI2OTczLDI3MDA5LDI2OTg2LDI3MDU4LDI3MDU0LDI3MDg4LDI3MDcxLDI3MDczLDI3MDkxLDI3MDcwLDI3MDg2LDIzNTI4LDI3''@;'; put 'put ''MDgyLDI3MTAxLDI3MDY3LDI3MDc1LDI3MDQ3LDI3MTgyLDI3MDI1LDI3MDQwLDI3MDM2LDI3MDI5LDI3MDYwLDI3MTAyLDI3MTEyLDI3MTM4LDI3MTYzLDI3MTM1LDI3NDAyLDI3MTI5LDI3MTIyLDI3MTExLDI3MTQxLDI3MDU3LDI3MTY2LDI3MTE3LDI3MTU2LDI3MTE1LDI3MTQ2LDI3MTU0''@;'; put 'put ''LDI3MzI5LDI3MTcxLDI3MTU1LDI3MjA0LDI3MTQ4LDI3MjUwLDI3MTkwLDI3MjU2LDI3MjA3LDI3MjM0LDI3MjI1LDI3MjM4LDI3MjA4LDI3MTkyLDI3MTcwLDI3MjgwLDI3Mjc3LDI3Mjk2LDI3MjY4LDI3Mjk4LDI3Mjk5LDI3Mjg3LDM0MzI3LDI3MzIzLDI3MzMxLDI3MzMwLDI3MzIwLDI3''@;'; put 'put ''MzE1LDI3MzA4LDI3MzU4LDI3MzQ1LDI3MzU5LDI3MzA2LDI3MzU0LDI3MzcwLDI3Mzg3LDI3Mzk3LDM0MzI2LDI3Mzg2LDI3NDEwLDI3NDE0LDM5NzI5LDI3NDIzLDI3NDQ4LDI3NDQ3LDMwNDI4LDI3NDQ5LDM5MTUwLDI3NDYzLDI3NDU5LDI3NDY1LDI3NDcyLDI3NDgxLDI3NDc2LDI3NDgz''@;'; put 'put ''LDI3NDg3LDI3NDg5LDI3NTEyLDI3NTEzLDI3NTE5LDI3NTIwLDI3NTI0LDI3NTIzLDI3NTMzLDI3NTQ0LDI3NTQxLDI3NTUwLDI3NTU2LDI3NTYyLDI3NTYzLDI3NTY3LDI3NTcwLDI3NTY5LDI3NTcxLDI3NTc1LDI3NTgwLDI3NTkwLDI3NTk1LDI3NjAzLDI3NjE1LDI3NjI4LDI3NjI3LDI3''@;'; put 'put ''NjM1LDI3NjMxLDQwNjM4LDI3NjU2LDI3NjY3LDI3NjY4LDI3Njc1LDI3Njg0LDI3NjgzLDI3NzQyLDI3NzMzLDI3NzQ2LDI3NzU0LDI3Nzc4LDI3Nzg5LDI3ODAyLDI3Nzc3LDI3ODAzLDI3Nzc0LDI3NzUyLDI3NzYzLDI3Nzk0LDI3NzkyLDI3ODQ0LDI3ODg5LDI3ODU5LDI3ODM3LDI3ODYz''@;'; put 'put ''LDI3ODQ1LDI3ODY5LDI3ODIyLDI3ODI1LDI3ODM4LDI3ODM0LDI3ODY3LDI3ODg3LDI3ODY1LDI3ODgyLDI3OTM1LDM0ODkzLDI3OTU4LDI3OTQ3LDI3OTY1LDI3OTYwLDI3OTI5LDI3OTU3LDI3OTU1LDI3OTIyLDI3OTE2LDI4MDAzLDI4MDUxLDI4MDA0LDI3OTk0LDI4MDI1LDI3OTkzLDI4''@;'; put 'put ''MDQ2LDI4MDUzLDI4NjQ0LDI4MDM3LDI4MTUzLDI4MTgxLDI4MTcwLDI4MDg1LDI4MTAzLDI4MTM0LDI4MDg4LDI4MTAyLDI4MTQwLDI4MTI2LDI4MTA4LDI4MTM2LDI4MTE0LDI4MTAxLDI4MTU0LDI4MTIxLDI4MTMyLDI4MTE3LDI4MTM4LDI4MTQyLDI4MjA1LDI4MjcwLDI4MjA2LDI4MTg1''@;'; put 'put ''LDI4Mjc0LDI4MjU1LDI4MjIyLDI4MTk1LDI4MjY3LDI4MjAzLDI4Mjc4LDI4MjM3LDI4MTkxLDI4MjI3LDI4MjE4LDI4MjM4LDI4MTk2LDI4NDE1LDI4MTg5LDI4MjE2LDI4MjkwLDI4MzMwLDI4MzEyLDI4MzYxLDI4MzQzLDI4MzcxLDI4MzQ5LDI4MzM1LDI4MzU2LDI4MzM4LDI4MzcyLDI4''@;'; put 'put ''MzczLDI4MzAzLDI4MzI1LDI4MzU0LDI4MzE5LDI4NDgxLDI4NDMzLDI4NzQ4LDI4Mzk2LDI4NDA4LDI4NDE0LDI4NDc5LDI4NDAyLDI4NDY1LDI4Mzk5LDI4NDY2LDI4MzY0LDI4NDc4LDI4NDM1LDI4NDA3LDI4NTUwLDI4NTM4LDI4NTM2LDI4NTQ1LDI4NTQ0LDI4NTI3LDI4NTA3LDI4NjU5''@;'; put 'put ''LDI4NTI1LDI4NTQ2LDI4NTQwLDI4NTA0LDI4NTU4LDI4NTYxLDI4NjEwLDI4NTE4LDI4NTk1LDI4NTc5LDI4NTc3LDI4NTgwLDI4NjAxLDI4NjE0LDI4NTg2LDI4NjM5LDI4NjI5LDI4NjUyLDI4NjI4LDI4NjMyLDI4NjU3LDI4NjU0LDI4NjM1LDI4NjgxLDI4NjgzLDI4NjY2LDI4Njg5LDI4''@;'; put 'put ''NjczLDI4Njg3LDI4NjcwLDI4Njk5LDI4Njk4LDI4NTMyLDI4NzAxLDI4Njk2LDI4NzAzLDI4NzIwLDI4NzM0LDI4NzIyLDI4NzUzLDI4NzcxLDI4ODI1LDI4ODE4LDI4ODQ3LDI4OTEzLDI4ODQ0LDI4ODU2LDI4ODUxLDI4ODQ2LDI4ODk1LDI4ODc1LDI4ODkzLDI4ODg5LDI4OTM3LDI4OTI1''@;'; put 'put ''LDI4OTU2LDI4OTUzLDI5MDI5LDI5MDEzLDI5MDY0LDI5MDMwLDI5MDI2LDI5MDA0LDI5MDE0LDI5MDM2LDI5MDcxLDI5MTc5LDI5MDYwLDI5MDc3LDI5MDk2LDI5MTAwLDI5MTQzLDI5MTEzLDI5MTE4LDI5MTM4LDI5MTI5LDI5MTQwLDI5MTM0LDI5MTUyLDI5MTY0LDI5MTU5LDI5MTczLDI5''@;'; put 'put ''MTgwLDI5MTc3LDI5MTgzLDI5MTk3LDI5MjAwLDI5MjExLDI5MjI0LDI5MjI5LDI5MjI4LDI5MjMyLDI5MjM0LDI5MjQzLDI5MjQ0LDI5MjQ3LDI5MjQ4LDI5MjU0LDI5MjU5LDI5MjcyLDI5MzAwLDI5MzEwLDI5MzE0LDI5MzEzLDI5MzE5LDI5MzMwLDI5MzM0LDI5MzQ2LDI5MzUxLDI5MzY5''@;'; put 'put ''LDI5MzYyLDI5Mzc5LDI5MzgyLDI5MzgwLDI5MzkwLDI5Mzk0LDI5NDEwLDI5NDA4LDI5NDA5LDI5NDMzLDI5NDMxLDIwNDk1LDI5NDYzLDI5NDUwLDI5NDY4LDI5NDYyLDI5NDY5LDI5NDkyLDI5NDg3LDI5NDgxLDI5NDc3LDI5NTAyLDI5NTE4LDI5NTE5LDQwNjY0LDI5NTI3LDI5NTQ2LDI5''@;'; put 'put ''NTQ0LDI5NTUyLDI5NTYwLDI5NTU3LDI5NTYzLDI5NTYyLDI5NjQwLDI5NjE5LDI5NjQ2LDI5NjI3LDI5NjMyLDI5NjY5LDI5Njc4LDI5NjYyLDI5ODU4LDI5NzAxLDI5ODA3LDI5NzMzLDI5Njg4LDI5NzQ2LDI5NzU0LDI5NzgxLDI5NzU5LDI5NzkxLDI5Nzg1LDI5NzYxLDI5Nzg4LDI5ODAx''@;'; put 'put ''LDI5ODA4LDI5Nzk1LDI5ODAyLDI5ODE0LDI5ODIyLDI5ODM1LDI5ODU0LDI5ODYzLDI5ODk4LDI5OTAzLDI5OTA4LDI5NjgxLDI5OTIwLDI5OTIzLDI5OTI3LDI5OTI5LDI5OTM0LDI5OTM4LDI5OTM2LDI5OTM3LDI5OTQ0LDI5OTQzLDI5OTU2LDI5OTU1LDI5OTU3LDI5OTY0LDI5OTY2LDI5''@;'; put 'put ''OTY1LDI5OTczLDI5OTcxLDI5OTgyLDI5OTkwLDI5OTk2LDMwMDEyLDMwMDIwLDMwMDI5LDMwMDI2LDMwMDI1LDMwMDQzLDMwMDIyLDMwMDQyLDMwMDU3LDMwMDUyLDMwMDU1LDMwMDU5LDMwMDYxLDMwMDcyLDMwMDcwLDMwMDg2LDMwMDg3LDMwMDY4LDMwMDkwLDMwMDg5LDMwMDgyLDMwMTAw''@;'; put 'put ''LDMwMTA2LDMwMTA5LDMwMTE3LDMwMTE1LDMwMTQ2LDMwMTMxLDMwMTQ3LDMwMTMzLDMwMTQxLDMwMTM2LDMwMTQwLDMwMTI5LDMwMTU3LDMwMTU0LDMwMTYyLDMwMTY5LDMwMTc5LDMwMTc0LDMwMjA2LDMwMjA3LDMwMjA0LDMwMjA5LDMwMTkyLDMwMjAyLDMwMTk0LDMwMTk1LDMwMjE5LDMw''@;'; put 'put ''MjIxLDMwMjE3LDMwMjM5LDMwMjQ3LDMwMjQwLDMwMjQxLDMwMjQyLDMwMjQ0LDMwMjYwLDMwMjU2LDMwMjY3LDMwMjc5LDMwMjgwLDMwMjc4LDMwMzAwLDMwMjk2LDMwMzA1LDMwMzA2LDMwMzEyLDMwMzEzLDMwMzE0LDMwMzExLDMwMzE2LDMwMzIwLDMwMzIyLDMwMzI2LDMwMzI4LDMwMzMy''@;'; put 'put ''LDMwMzM2LDMwMzM5LDMwMzQ0LDMwMzQ3LDMwMzUwLDMwMzU4LDMwMzU1LDMwMzYxLDMwMzYyLDMwMzg0LDMwMzg4LDMwMzkyLDMwMzkzLDMwMzk0LDMwNDAyLDMwNDEzLDMwNDIyLDMwNDE4LDMwNDMwLDMwNDMzLDMwNDM3LDMwNDM5LDMwNDQyLDM0MzUxLDMwNDU5LDMwNDcyLDMwNDcxLDMw''@;'; put 'put ''NDY4LDMwNTA1LDMwNTAwLDMwNDk0LDMwNTAxLDMwNTAyLDMwNDkxLDMwNTE5LDMwNTIwLDMwNTM1LDMwNTU0LDMwNTY4LDMwNTcxLDMwNTU1LDMwNTY1LDMwNTkxLDMwNTkwLDMwNTg1LDMwNjA2LDMwNjAzLDMwNjA5LDMwNjI0LDMwNjIyLDMwNjQwLDMwNjQ2LDMwNjQ5LDMwNjU1LDMwNjUy''@;'; put 'put ''LDMwNjUzLDMwNjUxLDMwNjYzLDMwNjY5LDMwNjc5LDMwNjgyLDMwNjg0LDMwNjkxLDMwNzAyLDMwNzE2LDMwNzMyLDMwNzM4LDMxMDE0LDMwNzUyLDMxMDE4LDMwNzg5LDMwODYyLDMwODM2LDMwODU0LDMwODQ0LDMwODc0LDMwODYwLDMwODgzLDMwOTAxLDMwODkwLDMwODk1LDMwOTI5LDMw''@;'; put 'put ''OTE4LDMwOTIzLDMwOTMyLDMwOTEwLDMwOTA4LDMwOTE3LDMwOTIyLDMwOTU2LDMwOTUxLDMwOTM4LDMwOTczLDMwOTY0LDMwOTgzLDMwOTk0LDMwOTkzLDMxMDAxLDMxMDIwLDMxMDE5LDMxMDQwLDMxMDcyLDMxMDYzLDMxMDcxLDMxMDY2LDMxMDYxLDMxMDU5LDMxMDk4LDMxMTAzLDMxMTE0''@;'; put 'put ''LDMxMTMzLDMxMTQzLDQwNzc5LDMxMTQ2LDMxMTUwLDMxMTU1LDMxMTYxLDMxMTYyLDMxMTc3LDMxMTg5LDMxMjA3LDMxMjEyLDMxMjAxLDMxMjAzLDMxMjQwLDMxMjQ1LDMxMjU2LDMxMjU3LDMxMjY0LDMxMjYzLDMxMTA0LDMxMjgxLDMxMjkxLDMxMjk0LDMxMjg3LDMxMjk5LDMxMzE5LDMx''@;'; put 'put ''MzA1LDMxMzI5LDMxMzMwLDMxMzM3LDQwODYxLDMxMzQ0LDMxMzUzLDMxMzU3LDMxMzY4LDMxMzgzLDMxMzgxLDMxMzg0LDMxMzgyLDMxNDAxLDMxNDMyLDMxNDA4LDMxNDE0LDMxNDI5LDMxNDI4LDMxNDIzLDM2OTk1LDMxNDMxLDMxNDM0LDMxNDM3LDMxNDM5LDMxNDQ1LDMxNDQzLDMxNDQ5''@;'; put 'put ''LDMxNDUwLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYyLDMxNDY5LDMxNDcyLDMxNDkwLDMxNTAzLDMxNDk4LDMxNDk0LDMxNTM5LDMxNTEyLDMxNTEzLDMxNTE4LDMxNTQxLDMxNTI4LDMxNTQyLDMxNTY4LDMxNjEwLDMxNDkyLDMxNTY1LDMxNDk5LDMxNTY0LDMxNTU3LDMxNjA1LDMxNTg5LDMx''@;'; put 'put ''NjA0LDMxNTkxLDMxNjAwLDMxNjAxLDMxNTk2LDMxNTk4LDMxNjQ1LDMxNjQwLDMxNjQ3LDMxNjI5LDMxNjQ0LDMxNjQyLDMxNjI3LDMxNjM0LDMxNjMxLDMxNTgxLDMxNjQxLDMxNjkxLDMxNjgxLDMxNjkyLDMxNjk1LDMxNjY4LDMxNjg2LDMxNzA5LDMxNzIxLDMxNzYxLDMxNzY0LDMxNzE4''@;'; put 'put ''LDMxNzE3LDMxODQwLDMxNzQ0LDMxNzUxLDMxNzYzLDMxNzMxLDMxNzM1LDMxNzY3LDMxNzU3LDMxNzM0LDMxNzc5LDMxNzgzLDMxNzg2LDMxNzc1LDMxNzk5LDMxNzg3LDMxODA1LDMxODIwLDMxODExLDMxODI4LDMxODIzLDMxODA4LDMxODI0LDMxODMyLDMxODM5LDMxODQ0LDMxODMwLDMx''@;'; put 'put ''ODQ1LDMxODUyLDMxODYxLDMxODc1LDMxODg4LDMxOTA4LDMxOTE3LDMxOTA2LDMxOTE1LDMxOTA1LDMxOTEyLDMxOTIzLDMxOTIyLDMxOTIxLDMxOTE4LDMxOTI5LDMxOTMzLDMxOTM2LDMxOTQxLDMxOTM4LDMxOTYwLDMxOTU0LDMxOTY0LDMxOTcwLDM5NzM5LDMxOTgzLDMxOTg2LDMxOTg4''@;'; put 'put ''LDMxOTkwLDMxOTk0LDMyMDA2LDMyMDAyLDMyMDI4LDMyMDIxLDMyMDEwLDMyMDY5LDMyMDc1LDMyMDQ2LDMyMDUwLDMyMDYzLDMyMDUzLDMyMDcwLDMyMTE1LDMyMDg2LDMyMDc4LDMyMTE0LDMyMTA0LDMyMTEwLDMyMDc5LDMyMDk5LDMyMTQ3LDMyMTM3LDMyMDkxLDMyMTQzLDMyMTI1LDMy''@;'; put 'put ''MTU1LDMyMTg2LDMyMTc0LDMyMTYzLDMyMTgxLDMyMTk5LDMyMTg5LDMyMTcxLDMyMzE3LDMyMTYyLDMyMTc1LDMyMjIwLDMyMTg0LDMyMTU5LDMyMTc2LDMyMjE2LDMyMjIxLDMyMjI4LDMyMjIyLDMyMjUxLDMyMjQyLDMyMjI1LDMyMjYxLDMyMjY2LDMyMjkxLDMyMjg5LDMyMjc0LDMyMzA1''@;'; put 'put ''LDMyMjg3LDMyMjY1LDMyMjY3LDMyMjkwLDMyMzI2LDMyMzU4LDMyMzE1LDMyMzA5LDMyMzEzLDMyMzIzLDMyMzExLDMyMzA2LDMyMzE0LDMyMzU5LDMyMzQ5LDMyMzQyLDMyMzUwLDMyMzQ1LDMyMzQ2LDMyMzc3LDMyMzYyLDMyMzYxLDMyMzgwLDMyMzc5LDMyMzg3LDMyMjEzLDMyMzgxLDM2''@;'; put 'put ''NzgyLDMyMzgzLDMyMzkyLDMyMzkzLDMyMzk2LDMyNDAyLDMyNDAwLDMyNDAzLDMyNDA0LDMyNDA2LDMyMzk4LDMyNDExLDMyNDEyLDMyNTY4LDMyNTcwLDMyNTgxLDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkyLDMyNTkzLDMyNTk3LDMyNTk2LDMyNjAwLDMyNjA3LDMyNjA4LDMyNjE2LDMyNjE3''@;'; put 'put ''LDMyNjE1LDMyNjMyLDMyNjQyLDMyNjQ2LDMyNjQzLDMyNjQ4LDMyNjQ3LDMyNjUyLDMyNjYwLDMyNjcwLDMyNjY5LDMyNjY2LDMyNjc1LDMyNjg3LDMyNjkwLDMyNjk3LDMyNjg2LDMyNjk0LDMyNjk2LDM1Njk3LDMyNzA5LDMyNzEwLDMyNzE0LDMyNzI1LDMyNzI0LDMyNzM3LDMyNzQyLDMy''@;'; put 'put ''NzQ1LDMyNzU1LDMyNzYxLDM5MTMyLDMyNzc0LDMyNzcyLDMyNzc5LDMyNzg2LDMyNzkyLDMyNzkzLDMyNzk2LDMyODAxLDMyODA4LDMyODMxLDMyODI3LDMyODQyLDMyODM4LDMyODUwLDMyODU2LDMyODU4LDMyODYzLDMyODY2LDMyODcyLDMyODgzLDMyODgyLDMyODgwLDMyODg2LDMyODg5''@;'; put 'put ''LDMyODkzLDMyODk1LDMyOTAwLDMyOTAyLDMyOTAxLDMyOTIzLDMyOTE1LDMyOTIyLDMyOTQxLDIwODgwLDMyOTQwLDMyOTg3LDMyOTk3LDMyOTg1LDMyOTg5LDMyOTY0LDMyOTg2LDMyOTgyLDMzMDMzLDMzMDA3LDMzMDA5LDMzMDUxLDMzMDY1LDMzMDU5LDMzMDcxLDMzMDk5LDM4NTM5LDMz''@;'; put 'put ''MDk0LDMzMDg2LDMzMTA3LDMzMTA1LDMzMDIwLDMzMTM3LDMzMTM0LDMzMTI1LDMzMTI2LDMzMTQwLDMzMTU1LDMzMTYwLDMzMTYyLDMzMTUyLDMzMTU0LDMzMTg0LDMzMTczLDMzMTg4LDMzMTg3LDMzMTE5LDMzMTcxLDMzMTkzLDMzMjAwLDMzMjA1LDMzMjE0LDMzMjA4LDMzMjEzLDMzMjE2''@;'; put 'put ''LDMzMjE4LDMzMjEwLDMzMjI1LDMzMjI5LDMzMjMzLDMzMjQxLDMzMjQwLDMzMjI0LDMzMjQyLDMzMjQ3LDMzMjQ4LDMzMjU1LDMzMjc0LDMzMjc1LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg1LDMzMjg3LDMzMjkwLDMzMjkzLDMzMjk2LDMzMzAyLDMzMzIxLDMzMzIzLDMzMzM2LDMzMzMxLDMz''@;'; put 'put ''MzQ0LDMzMzY5LDMzMzY4LDMzMzczLDMzMzcwLDMzMzc1LDMzMzgwLDMzMzc4LDMzMzg0LDMzMzg2LDMzMzg3LDMzMzI2LDMzMzkzLDMzMzk5LDMzNDAwLDMzNDA2LDMzNDIxLDMzNDI2LDMzNDUxLDMzNDM5LDMzNDY3LDMzNDUyLDMzNTA1LDMzNTA3LDMzNTAzLDMzNDkwLDMzNTI0LDMzNTIz''@;'; put 'put ''LDMzNTMwLDMzNjgzLDMzNTM5LDMzNTMxLDMzNTI5LDMzNTAyLDMzNTQyLDMzNTAwLDMzNTQ1LDMzNDk3LDMzNTg5LDMzNTg4LDMzNTU4LDMzNTg2LDMzNTg1LDMzNjAwLDMzNTkzLDMzNjE2LDMzNjA1LDMzNTgzLDMzNTc5LDMzNTU5LDMzNTYwLDMzNjY5LDMzNjkwLDMzNzA2LDMzNjk1LDMz''@;'; put 'put ''Njk4LDMzNjg2LDMzNTcxLDMzNjc4LDMzNjcxLDMzNjc0LDMzNjYwLDMzNzE3LDMzNjUxLDMzNjUzLDMzNjk2LDMzNjczLDMzNzA0LDMzNzgwLDMzODExLDMzNzcxLDMzNzQyLDMzNzg5LDMzNzk1LDMzNzUyLDMzODAzLDMzNzI5LDMzNzgzLDMzNzk5LDMzNzYwLDMzNzc4LDMzODA1LDMzODI2''@;'; put 'put ''LDMzODI0LDMzNzI1LDMzODQ4LDM0MDU0LDMzNzg3LDMzOTAxLDMzODM0LDMzODUyLDM0MTM4LDMzOTI0LDMzOTExLDMzODk5LDMzOTY1LDMzOTAyLDMzOTIyLDMzODk3LDMzODYyLDMzODM2LDMzOTAzLDMzOTEzLDMzODQ1LDMzOTk0LDMzODkwLDMzOTc3LDMzOTgzLDMzOTUxLDM0MDA5LDMz''@;'; put 'put ''OTk3LDMzOTc5LDM0MDEwLDM0ZTMsMzM5ODUsMzM5OTAsMzQwMDYsMzM5NTMsMzQwODEsMzQwNDcsMzQwMzYsMzQwNzEsMzQwNzIsMzQwOTIsMzQwNzksMzQwNjksMzQwNjgsMzQwNDQsMzQxMTIsMzQxNDcsMzQxMzYsMzQxMjAsMzQxMTMsMzQzMDYsMzQxMjMsMzQxMzMsMzQxNzYsMzQyMTIs''@;'; put 'put ''MzQxODQsMzQxOTMsMzQxODYsMzQyMTYsMzQxNTcsMzQxOTYsMzQyMDMsMzQyODIsMzQxODMsMzQyMDQsMzQxNjcsMzQxNzQsMzQxOTIsMzQyNDksMzQyMzQsMzQyNTUsMzQyMzMsMzQyNTYsMzQyNjEsMzQyNjksMzQyNzcsMzQyNjgsMzQyOTcsMzQzMTQsMzQzMjMsMzQzMTUsMzQzMDIsMzQy''@;'; put 'put ''OTgsMzQzMTAsMzQzMzgsMzQzMzAsMzQzNTIsMzQzNjcsMzQzODEsMjAwNTMsMzQzODgsMzQzOTksMzQ0MDcsMzQ0MTcsMzQ0NTEsMzQ0NjcsMzQ0NzMsMzQ0NzQsMzQ0NDMsMzQ0NDQsMzQ0ODYsMzQ0NzksMzQ1MDAsMzQ1MDIsMzQ0ODAsMzQ1MDUsMzQ4NTEsMzQ0NzUsMzQ1MTYsMzQ1MjYs''@;'; put 'put ''MzQ1MzcsMzQ1NDAsMzQ1MjcsMzQ1MjMsMzQ1NDMsMzQ1NzgsMzQ1NjYsMzQ1NjgsMzQ1NjAsMzQ1NjMsMzQ1NTUsMzQ1NzcsMzQ1NjksMzQ1NzMsMzQ1NTMsMzQ1NzAsMzQ2MTIsMzQ2MjMsMzQ2MTUsMzQ2MTksMzQ1OTcsMzQ2MDEsMzQ1ODYsMzQ2NTYsMzQ2NTUsMzQ2ODAsMzQ2MzYsMzQ2''@;'; put 'put ''MzgsMzQ2NzYsMzQ2NDcsMzQ2NjQsMzQ2NzAsMzQ2NDksMzQ2NDMsMzQ2NTksMzQ2NjYsMzQ4MjEsMzQ3MjIsMzQ3MTksMzQ2OTAsMzQ3MzUsMzQ3NjMsMzQ3NDksMzQ3NTIsMzQ3NjgsMzg2MTQsMzQ3MzEsMzQ3NTYsMzQ3MzksMzQ3NTksMzQ3NTgsMzQ3NDcsMzQ3OTksMzQ4MDIsMzQ3ODQs''@;'; put 'put ''MzQ4MzEsMzQ4MjksMzQ4MTQsMzQ4MDYsMzQ4MDcsMzQ4MzAsMzQ3NzAsMzQ4MzMsMzQ4MzgsMzQ4MzcsMzQ4NTAsMzQ4NDksMzQ4NjUsMzQ4NzAsMzQ4NzMsMzQ4NTUsMzQ4NzUsMzQ4ODQsMzQ4ODIsMzQ4OTgsMzQ5MDUsMzQ5MTAsMzQ5MTQsMzQ5MjMsMzQ5NDUsMzQ5NDIsMzQ5NzQsMzQ5''@;'; put 'put ''MzMsMzQ5NDEsMzQ5OTcsMzQ5MzAsMzQ5NDYsMzQ5NjcsMzQ5NjIsMzQ5OTAsMzQ5NjksMzQ5NzgsMzQ5NTcsMzQ5ODAsMzQ5OTIsMzUwMDcsMzQ5OTMsMzUwMTEsMzUwMTIsMzUwMjgsMzUwMzIsMzUwMzMsMzUwMzcsMzUwNjUsMzUwNzQsMzUwNjgsMzUwNjAsMzUwNDgsMzUwNTgsMzUwNzYs''@;'; put 'put ''MzUwODQsMzUwODIsMzUwOTEsMzUxMzksMzUxMDIsMzUxMDksMzUxMTQsMzUxMTUsMzUxMzcsMzUxNDAsMzUxMzEsMzUxMjYsMzUxMjgsMzUxNDgsMzUxMDEsMzUxNjgsMzUxNjYsMzUxNzQsMzUxNzIsMzUxODEsMzUxNzgsMzUxODMsMzUxODgsMzUxOTEsMzUxOTgsMzUyMDMsMzUyMDgsMzUy''@;'; put 'put ''MTAsMzUyMTksMzUyMjQsMzUyMzMsMzUyNDEsMzUyMzgsMzUyNDQsMzUyNDcsMzUyNTAsMzUyNTgsMzUyNjEsMzUyNjMsMzUyNjQsMzUyOTAsMzUyOTIsMzUyOTMsMzUzMDMsMzUzMTYsMzUzMjAsMzUzMzEsMzUzNTAsMzUzNDQsMzUzNDAsMzUzNTUsMzUzNTcsMzUzNjUsMzUzODIsMzUzOTMs''@;'; put 'put ''MzU0MTksMzU0MTAsMzUzOTgsMzU0MDAsMzU0NTIsMzU0MzcsMzU0MzYsMzU0MjYsMzU0NjEsMzU0NTgsMzU0NjAsMzU0OTYsMzU0ODksMzU0NzMsMzU0OTMsMzU0OTQsMzU0ODIsMzU0OTEsMzU1MjQsMzU1MzMsMzU1MjIsMzU1NDYsMzU1NjMsMzU1NzEsMzU1NTksMzU1NTYsMzU1NjksMzU2''@;'; put 'put ''MDQsMzU1NTIsMzU1NTQsMzU1NzUsMzU1NTAsMzU1NDcsMzU1OTYsMzU1OTEsMzU2MTAsMzU1NTMsMzU2MDYsMzU2MDAsMzU2MDcsMzU2MTYsMzU2MzUsMzg4MjcsMzU2MjIsMzU2MjcsMzU2NDYsMzU2MjQsMzU2NDksMzU2NjAsMzU2NjMsMzU2NjIsMzU2NTcsMzU2NzAsMzU2NzUsMzU2NzQs''@;'; put 'put ''MzU2OTEsMzU2NzksMzU2OTIsMzU2OTUsMzU3MDAsMzU3MDksMzU3MTIsMzU3MjQsMzU3MjYsMzU3MzAsMzU3MzEsMzU3MzQsMzU3MzcsMzU3MzgsMzU4OTgsMzU5MDUsMzU5MDMsMzU5MTIsMzU5MTYsMzU5MTgsMzU5MjAsMzU5MjUsMzU5MzgsMzU5NDgsMzU5NjAsMzU5NjIsMzU5NzAsMzU5''@;'; put 'put ''NzcsMzU5NzMsMzU5NzgsMzU5ODEsMzU5ODIsMzU5ODgsMzU5NjQsMzU5OTIsMjUxMTcsMzYwMTMsMzYwMTAsMzYwMjksMzYwMTgsMzYwMTksMzYwMTQsMzYwMjIsMzYwNDAsMzYwMzMsMzYwNjgsMzYwNjcsMzYwNTgsMzYwOTMsMzYwOTAsMzYwOTEsMzYxMDAsMzYxMDEsMzYxMDYsMzYxMDMs''@;'; put 'put ''MzYxMTEsMzYxMDksMzYxMTIsNDA3ODIsMzYxMTUsMzYwNDUsMzYxMTYsMzYxMTgsMzYxOTksMzYyMDUsMzYyMDksMzYyMTEsMzYyMjUsMzYyNDksMzYyOTAsMzYyODYsMzYyODIsMzYzMDMsMzYzMTQsMzYzMTAsMzYzMDAsMzYzMTUsMzYyOTksMzYzMzAsMzYzMzEsMzYzMTksMzYzMjMsMzYz''@;'; put 'put ''NDgsMzYzNjAsMzYzNjEsMzYzNTEsMzYzODEsMzYzODIsMzYzNjgsMzYzODMsMzY0MTgsMzY0MDUsMzY0MDAsMzY0MDQsMzY0MjYsMzY0MjMsMzY0MjUsMzY0MjgsMzY0MzIsMzY0MjQsMzY0NDEsMzY0NTIsMzY0NDgsMzYzOTQsMzY0NTEsMzY0MzcsMzY0NzAsMzY0NjYsMzY0NzYsMzY0ODEs''@;'; put 'put ''MzY0ODcsMzY0ODUsMzY0ODQsMzY0OTEsMzY0OTAsMzY0OTksMzY0OTcsMzY1MDAsMzY1MDUsMzY1MjIsMzY1MTMsMzY1MjQsMzY1MjgsMzY1NTAsMzY1MjksMzY1NDIsMzY1NDksMzY1NTIsMzY1NTUsMzY1NzEsMzY1NzksMzY2MDQsMzY2MDMsMzY1ODcsMzY2MDYsMzY2MTgsMzY2MTMsMzY2''@;'; put 'put ''MjksMzY2MjYsMzY2MzMsMzY2MjcsMzY2MzYsMzY2MzksMzY2MzUsMzY2MjAsMzY2NDYsMzY2NTksMzY2NjcsMzY2NjUsMzY2NzcsMzY2NzQsMzY2NzAsMzY2ODQsMzY2ODEsMzY2NzgsMzY2ODYsMzY2OTUsMzY3MDAsMzY3MDYsMzY3MDcsMzY3MDgsMzY3NjQsMzY3NjcsMzY3NzEsMzY3ODEs''@;'; put 'put ''MzY3ODMsMzY3OTEsMzY4MjYsMzY4MzcsMzY4MzQsMzY4NDIsMzY4NDcsMzY5OTksMzY4NTIsMzY4NjksMzY4NTcsMzY4NTgsMzY4ODEsMzY4ODUsMzY4OTcsMzY4NzcsMzY4OTQsMzY4ODYsMzY4NzUsMzY5MDMsMzY5MTgsMzY5MTcsMzY5MjEsMzY4NTYsMzY5NDMsMzY5NDQsMzY5NDUsMzY5''@;'; put 'put ''NDYsMzY4NzgsMzY5MzcsMzY5MjYsMzY5NTAsMzY5NTIsMzY5NTgsMzY5NjgsMzY5NzUsMzY5ODIsMzg1NjgsMzY5NzgsMzY5OTQsMzY5ODksMzY5OTMsMzY5OTIsMzcwMDIsMzcwMDEsMzcwMDcsMzcwMzIsMzcwMzksMzcwNDEsMzcwNDUsMzcwOTAsMzcwOTIsMjUxNjAsMzcwODMsMzcxMjIs''@;'; put 'put ''MzcxMzgsMzcxNDUsMzcxNzAsMzcxNjgsMzcxOTQsMzcyMDYsMzcyMDgsMzcyMTksMzcyMjEsMzcyMjUsMzcyMzUsMzcyMzQsMzcyNTksMzcyNTcsMzcyNTAsMzcyODIsMzcyOTEsMzcyOTUsMzcyOTAsMzczMDEsMzczMDAsMzczMDYsMzczMTIsMzczMTMsMzczMjEsMzczMjMsMzczMjgsMzcz''@;'; put 'put ''MzQsMzczNDMsMzczNDUsMzczMzksMzczNzIsMzczNjUsMzczNjYsMzc0MDYsMzczNzUsMzczOTYsMzc0MjAsMzczOTcsMzczOTMsMzc0NzAsMzc0NjMsMzc0NDUsMzc0NDksMzc0NzYsMzc0NDgsMzc1MjUsMzc0MzksMzc0NTEsMzc0NTYsMzc1MzIsMzc1MjYsMzc1MjMsMzc1MzEsMzc0NjYs''@;'; put 'put ''Mzc1ODMsMzc1NjEsMzc1NTksMzc2MDksMzc2NDcsMzc2MjYsMzc3MDAsMzc2NzgsMzc2NTcsMzc2NjYsMzc2NTgsMzc2NjcsMzc2OTAsMzc2ODUsMzc2OTEsMzc3MjQsMzc3MjgsMzc3NTYsMzc3NDIsMzc3MTgsMzc4MDgsMzc4MDQsMzc4MDUsMzc3ODAsMzc4MTcsMzc4NDYsMzc4NDcsMzc4''@;'; put 'put ''NjQsMzc4NjEsMzc4NDgsMzc4MjcsMzc4NTMsMzc4NDAsMzc4MzIsMzc4NjAsMzc5MTQsMzc5MDgsMzc5MDcsMzc4OTEsMzc4OTUsMzc5MDQsMzc5NDIsMzc5MzEsMzc5NDEsMzc5MjEsMzc5NDYsMzc5NTMsMzc5NzAsMzc5NTYsMzc5NzksMzc5ODQsMzc5ODYsMzc5ODIsMzc5OTQsMzc0MTcs''@;'; put 'put ''MzhlMywzODAwNSwzODAwNywzODAxMywzNzk3OCwzODAxMiwzODAxNCwzODAxNywzODAxNSwzODI3NCwzODI3OSwzODI4MiwzODI5MiwzODI5NCwzODI5NiwzODI5NywzODMwNCwzODMxMiwzODMxMSwzODMxNywzODMzMiwzODMzMSwzODMyOSwzODMzNCwzODM0NiwyODY2MiwzODMzOSwzODM0''@;'; put 'put ''OSwzODM0OCwzODM1NywzODM1NiwzODM1OCwzODM2NCwzODM2OSwzODM3MywzODM3MCwzODQzMywzODQ0MCwzODQ0NiwzODQ0NywzODQ2NiwzODQ3NiwzODQ3OSwzODQ3NSwzODUxOSwzODQ5MiwzODQ5NCwzODQ5MywzODQ5NSwzODUwMiwzODUxNCwzODUwOCwzODU0MSwzODU1MiwzODU0OSwz''@;'; put 'put ''ODU1MSwzODU3MCwzODU2NywzODU3NywzODU3OCwzODU3NiwzODU4MCwzODU4MiwzODU4NCwzODU4NSwzODYwNiwzODYwMywzODYwMSwzODYwNSwzNTE0OSwzODYyMCwzODY2OSwzODYxMywzODY0OSwzODY2MCwzODY2MiwzODY2NCwzODY3NSwzODY3MCwzODY3MywzODY3MSwzODY3OCwzODY4''@;'; put 'put ''MSwzODY5MiwzODY5OCwzODcwNCwzODcxMywzODcxNywzODcxOCwzODcyNCwzODcyNiwzODcyOCwzODcyMiwzODcyOSwzODc0OCwzODc1MiwzODc1NiwzODc1OCwzODc2MCwyMTIwMiwzODc2MywzODc2OSwzODc3NywzODc4OSwzODc4MCwzODc4NSwzODc3OCwzODc5MCwzODc5NSwzODc5OSwz''@;'; put 'put ''ODgwMCwzODgxMiwzODgyNCwzODgyMiwzODgxOSwzODgzNSwzODgzNiwzODg1MSwzODg1NCwzODg1NiwzODg1OSwzODg3NiwzODg5Myw0MDc4MywzODg5OCwzMTQ1NSwzODkwMiwzODkwMSwzODkyNywzODkyNCwzODk2OCwzODk0OCwzODk0NSwzODk2NywzODk3MywzODk4MiwzODk5MSwzODk4''@;'; put 'put ''NywzOTAxOSwzOTAyMywzOTAyNCwzOTAyNSwzOTAyOCwzOTAyNywzOTA4MiwzOTA4NywzOTA4OSwzOTA5NCwzOTEwOCwzOTEwNywzOTExMCwzOTE0NSwzOTE0NywzOTE3MSwzOTE3NywzOTE4NiwzOTE4OCwzOTE5MiwzOTIwMSwzOTE5NywzOTE5OCwzOTIwNCwzOTIwMCwzOTIxMiwzOTIxNCwz''@;'; put 'put ''OTIyOSwzOTIzMCwzOTIzNCwzOTI0MSwzOTIzNywzOTI0OCwzOTI0MywzOTI0OSwzOTI1MCwzOTI0NCwzOTI1MywzOTMxOSwzOTMyMCwzOTMzMywzOTM0MSwzOTM0MiwzOTM1NiwzOTM5MSwzOTM4NywzOTM4OSwzOTM4NCwzOTM3NywzOTQwNSwzOTQwNiwzOTQwOSwzOTQxMCwzOTQxOSwzOTQx''@;'; put 'put ''NiwzOTQyNSwzOTQzOSwzOTQyOSwzOTM5NCwzOTQ0OSwzOTQ2NywzOTQ3OSwzOTQ5MywzOTQ5MCwzOTQ4OCwzOTQ5MSwzOTQ4NiwzOTUwOSwzOTUwMSwzOTUxNSwzOTUxMSwzOTUxOSwzOTUyMiwzOTUyNSwzOTUyNCwzOTUyOSwzOTUzMSwzOTUzMCwzOTU5NywzOTYwMCwzOTYxMiwzOTYxNiwz''@;'; put 'put ''OTYzMSwzOTYzMywzOTYzNSwzOTYzNiwzOTY0NiwzOTY0NywzOTY1MCwzOTY1MSwzOTY1NCwzOTY2MywzOTY1OSwzOTY2MiwzOTY2OCwzOTY2NSwzOTY3MSwzOTY3NSwzOTY4NiwzOTcwNCwzOTcwNiwzOTcxMSwzOTcxNCwzOTcxNSwzOTcxNywzOTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcy''@;'; put 'put ''NiwzOTcyNywzOTczMCwzOTc0OCwzOTc0NywzOTc1OSwzOTc1NywzOTc1OCwzOTc2MSwzOTc2OCwzOTc5NiwzOTgyNywzOTgxMSwzOTgyNSwzOTgzMCwzOTgzMSwzOTgzOSwzOTg0MCwzOTg0OCwzOTg2MCwzOTg3MiwzOTg4MiwzOTg2NSwzOTg3OCwzOTg4NywzOTg4OSwzOTg5MCwzOTkwNywz''@;'; put 'put ''OTkwNiwzOTkwOCwzOTg5MiwzOTkwNSwzOTk5NCwzOTkyMiwzOTkyMSwzOTkyMCwzOTk1NywzOTk1NiwzOTk0NSwzOTk1NSwzOTk0OCwzOTk0MiwzOTk0NCwzOTk1NCwzOTk0NiwzOTk0MCwzOTk4MiwzOTk2MywzOTk3MywzOTk3MiwzOTk2OSwzOTk4NCw0MDAwNywzOTk4Niw0MDAwNiwzOTk5''@;'; put 'put ''OCw0MDAyNiw0MDAzMiw0MDAzOSw0MDA1NCw0MDA1Niw0MDE2Nyw0MDE3Miw0MDE3Niw0MDIwMSw0MDIwMCw0MDE3MSw0MDE5NSw0MDE5OCw0MDIzNCw0MDIzMCw0MDM2Nyw0MDIyNyw0MDIyMyw0MDI2MCw0MDIxMyw0MDIxMCw0MDI1Nyw0MDI1NSw0MDI1NCw0MDI2Miw0MDI2NCw0MDI4NSw0''@;'; put 'put ''MDI4Niw0MDI5Miw0MDI3Myw0MDI3Miw0MDI4MSw0MDMwNiw0MDMyOSw0MDMyNyw0MDM2Myw0MDMwMyw0MDMxNCw0MDM0Niw0MDM1Niw0MDM2MSw0MDM3MCw0MDM4OCw0MDM4NSw0MDM3OSw0MDM3Niw0MDM3OCw0MDM5MCw0MDM5OSw0MDM4Niw0MDQwOSw0MDQwMyw0MDQ0MCw0MDQyMiw0MDQy''@;'; put 'put ''OSw0MDQzMSw0MDQ0NSw0MDQ3NCw0MDQ3NSw0MDQ3OCw0MDU2NSw0MDU2OSw0MDU3Myw0MDU3Nyw0MDU4NCw0MDU4Nyw0MDU4OCw0MDU5NCw0MDU5Nyw0MDU5Myw0MDYwNSw0MDYxMyw0MDYxNyw0MDYzMiw0MDYxOCw0MDYyMSwzODc1Myw0MDY1Miw0MDY1NCw0MDY1NSw0MDY1Niw0MDY2MCw0''@;'; put 'put ''MDY2OCw0MDY3MCw0MDY2OSw0MDY3Miw0MDY3Nyw0MDY4MCw0MDY4Nyw0MDY5Miw0MDY5NCw0MDY5NSw0MDY5Nyw0MDY5OSw0MDcwMCw0MDcwMSw0MDcxMSw0MDcxMiwzMDM5MSw0MDcyNSw0MDczNyw0MDc0OCw0MDc2Niw0MDc3OCw0MDc4Niw0MDc4OCw0MDgwMyw0MDc5OSw0MDgwMCw0MDgw''@;'; put 'put ''MSw0MDgwNiw0MDgwNyw0MDgxMiw0MDgxMCw0MDgyMyw0MDgxOCw0MDgyMiw0MDg1Myw0MDg2MCw0MDg2NCwyMjU3NSwyNzA3OSwzNjk1MywyOTc5NiwyMDk1NiwyOTA4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2''@;'; put 'put ''MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAyMjAsMjAyMjQsMjAyMjcsMjAyODEsMjAzMTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMs''@;'; put 'put ''MjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgsMjExODQsMjEyMTEsMjEyNDgsMjEyNTUsMjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2''@;'; put 'put ''ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIs''@;'; put 'put ''MjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYx''@;'; put 'put ''NDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYyMjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYs''@;'; put 'put ''MjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYsMjc3MTEsMjc3NDAsMjc3ODIsMjc3NTksMjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2''@;'; put 'put ''NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3Mzcs''@;'; put 'put ''Mjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQw''@;'; put 'put ''MjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIxODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMs''@;'; put 'put ''MzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUsMzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQsMzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcxNTksMzczMzgsMzczMzUsMzczNDIsMzcz''@;'; put 'put ''NTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzczOTIsMzczODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUs''@;'; put 'put ''Mzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQsMzc3NDQsMzc3MTksMzc3OTYsMzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5''@;'; put 'put ''OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1''@;'; put 'put ''NjYsODU2Nyw4NTY4LDg1NjksNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTYwLDg1NjEsODU2''@;'; put 'put ''Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDg3NTcsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0''@;'; put 'put ''MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAyMjAsMjAyMjQsMjAyMjcsMjAyODEsMjAzMTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQs''@;'; put 'put ''MjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgsMjExODQsMjEyMTEsMjEyNDgsMjEyNTUsMjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0''@;'; put 'put ''NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIs''@;'; put 'put ''MjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYx''@;'; put 'put ''NzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYyMjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIs''@;'; put 'put ''MjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYsMjc3MTEsMjc3NDAsMjc3ODIsMjc3NTksMjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgz''@;'; put 'put ''NTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMs''@;'; put 'put ''Mjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQw''@;'; put 'put ''MjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIxODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEs''@;'; put 'put ''MzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUsMzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQsMzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcx''@;'; put 'put ''NTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzczOTIsMzczODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODks''@;'; put 'put ''Mzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQsMzc3NDQsMzc3MTksMzc3OTYsMzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3''@;'; put 'put ''MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxqaXMwMjEyOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw3MjgsNzExLDE4NCw3MjksNzMzLDE3NSw3MzEsNzMwLDY1Mzc0LDkwMCw5MDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDE2MSwxNjYsMTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxODYsMTcwLDE2OSwxNzQsODQ4MiwxNjQsODQ3MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTAyLDkwNCw5MDUsOTA2LDkzOCxudWxsLDkwOCxudWxsLDkxMCw5MzksbnVsbCw5MTEsbnVsbCxudWxsLG51bGwsbnVsbCw5NDAsOTQxLDk0Miw5NDMsOTcwLDkxMiw5NzIsOTYyLDk3''@;'; put 'put ''Myw5NzEsOTQ0LDk3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzgsMTAzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTgsMTExOSxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OCwyNzIsbnVsbCwyOTQsbnVsbCwzMDYs''@;'; put 'put ''bnVsbCwzMjEsMzE5LG51bGwsMzMwLDIxNiwzMzgsbnVsbCwzNTgsMjIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMiwzMjAsMzI5LDMz''@;'; put 'put ''MSwyNDgsMzM5LDIyMywzNTksMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTkzLDE5MiwxOTYsMTk0LDI1OCw0NjEsMjU2LDI2MCwxOTcsMTk1LDI2MiwyNjQsMjY4LDE5OSwyNjYsMjcwLDIwMSwyMDAsMjAzLDIw''@;'; put 'put ''MiwyODIsMjc4LDI3NCwyODAsbnVsbCwyODQsMjg2LDI5MCwyODgsMjkyLDIwNSwyMDQsMjA3LDIwNiw0NjMsMzA0LDI5OCwzMDIsMjk2LDMwOCwzMTAsMzEzLDMxNywzMTUsMzIzLDMyNywzMjUsMjA5LDIxMSwyMTAsMjE0LDIxMiw0NjUsMzM2LDMzMiwyMTMsMzQwLDM0NCwzNDIsMzQ2LDM0''@;'; put 'put ''OCwzNTIsMzUwLDM1NiwzNTQsMjE4LDIxNywyMjAsMjE5LDM2NCw0NjcsMzY4LDM2MiwzNzAsMzY2LDM2MCw0NzEsNDc1LDQ3Myw0NjksMzcyLDIyMSwzNzYsMzc0LDM3NywzODEsMzc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjI1LDIyNCwyMjgsMjI2LDI1OSw0NjIs''@;'; put 'put ''MjU3LDI2MSwyMjksMjI3LDI2MywyNjUsMjY5LDIzMSwyNjcsMjcxLDIzMywyMzIsMjM1LDIzNCwyODMsMjc5LDI3NSwyODEsNTAxLDI4NSwyODcsbnVsbCwyODksMjkzLDIzNywyMzYsMjM5LDIzOCw0NjQsbnVsbCwyOTksMzAzLDI5NywzMDksMzExLDMxNCwzMTgsMzE2LDMyNCwzMjgsMzI2''@;'; put 'put ''LDI0MSwyNDMsMjQyLDI0NiwyNDQsNDY2LDMzNywzMzMsMjQ1LDM0MSwzNDUsMzQzLDM0NywzNDksMzUzLDM1MSwzNTcsMzU1LDI1MCwyNDksMjUyLDI1MSwzNjUsNDY4LDM2OSwzNjMsMzcxLDM2NywzNjEsNDcyLDQ3Niw0NzQsNDcwLDM3MywyNTMsMjU1LDM3NSwzNzgsMzgyLDM4MCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk5NzAsMTk5NzIsMTk5NzMsMTk5ODAsMTk5ODYsMTk5OTksMjAwMDMsMjAwMDQsMjAwMDgsMjAwMTEsMjAwMTQsMjAw''@;'; put 'put ''MTUsMjAwMTYsMjAwMjEsMjAwMzIsMjAwMzMsMjAwMzYsMjAwMzksMjAwNDksMjAwNTgsMjAwNjAsMjAwNjcsMjAwNzIsMjAwNzMsMjAwODQsMjAwODUsMjAwODksMjAwOTUsMjAxMDksMjAxMTgsMjAxMTksMjAxMjUsMjAxNDMsMjAxNTMsMjAxNjMsMjAxNzYsMjAxODYsMjAxODcsMjAxOTIs''@;'; put 'put ''MjAxOTMsMjAxOTQsMjAyMDAsMjAyMDcsMjAyMDksMjAyMTEsMjAyMTMsMjAyMjEsMjAyMjIsMjAyMjMsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDUsMjAyNDYsMjAyNDcsMjAyNDksMjAyNzAsMjAyNzMsMjAzMjAsMjAyNzUsMjAyNzcsMjAyNzksMjAy''@;'; put 'put ''ODEsMjAyODMsMjAyODYsMjAyODgsMjAyOTAsMjAyOTYsMjAyOTcsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMTIsMjAzMTksMjAzMjMsMjAzMzAsMjAzMzIsMjAzMzQsMjAzMzcsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTAsMjAzNTMsMjAzNTQsMjAzNTYs''@;'; put 'put ''MjAzNTcsMjAzNjEsMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAzNzIsMjAzNzUsMjAzNzcsMjAzNzgsMjAzODIsMjAzODMsMjA0MDIsMjA0MDcsMjA0MDksMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MjEsMjA0MjIsMjA0MjQsMjA0MjUsMjA0''@;'; put 'put ''MjcsMjA0MjgsMjA0MjksMjA0MzEsMjA0MzQsMjA0NDQsMjA0NDgsMjA0NTAsMjA0NjQsMjA0NjYsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODQsMjA0ODcsMjA0OTAsMjA0OTIsMjA0OTQsMjA0OTYsMjA0OTksMjA1MDMsMjA1MDQsMjA1MDcsMjA1MDgsMjA1MDksMjA1MTAs''@;'; put 'put ''MjA1MTQsMjA1MTksMjA1MjYsMjA1MjgsMjA1MzAsMjA1MzEsMjA1MzMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDksMjA1NTAsMjA1NTQsMjA1NTYsMjA1NTgsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjcsMjA1NjksMjA1NzUsMjA1NzYsMjA1NzgsMjA1NzksMjA1ODIsMjA1ODMsMjA1ODYsMjA1''@;'; put 'put ''ODksMjA1OTIsMjA1OTMsMjA1MzksMjA2MDksMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTgsMjA2MjIsMjA2MjMsMjA2MjQsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MzAsMjA2MzUsMjA2MzYsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NTAsMjA2NTUsMjA2NTYsMjA2NjUsMjA2NjYs''@;'; put 'put ''MjA2NjksMjA2NzIsMjA2NzUsMjA2NzYsMjA2NzksMjA2ODQsMjA2ODYsMjA2ODgsMjA2OTEsMjA2OTIsMjA2OTYsMjA3MDAsMjA3MDEsMjA3MDMsMjA3MDYsMjA3MDgsMjA3MTAsMjA3MTIsMjA3MTMsMjA3MTksMjA3MjEsMjA3MjYsMjA3MzAsMjA3MzQsMjA3MzksMjA3NDIsMjA3NDMsMjA3''@;'; put 'put ''NDQsMjA3NDcsMjA3NDgsMjA3NDksMjA3NTAsMjA3MjIsMjA3NTIsMjA3NTksMjA3NjEsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NzEsMjA3NzUsMjA3NzYsMjA3ODAsMjA3ODEsMjA3ODMsMjA3ODUsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTIsMjA3OTMsMjA4MDIsMjA4MTAsMjA4MTUs''@;'; put 'put ''MjA4MTksMjA4MjEsMjA4MjMsMjA4MjQsMjA4MzEsMjA4MzYsMjA4MzgsMjA4NjIsMjA4NjcsMjA4NjgsMjA4NzUsMjA4NzgsMjA4ODgsMjA4OTMsMjA4OTcsMjA4OTksMjA5MDksMjA5MjAsMjA5MjIsMjA5MjQsMjA5MjYsMjA5MjcsMjA5MzAsMjA5MzYsMjA5NDMsMjA5NDUsMjA5NDYsMjA5''@;'; put 'put ''NDcsMjA5NDksMjA5NTIsMjA5NTgsMjA5NjIsMjA5NjUsMjA5NzQsMjA5NzgsMjA5NzksMjA5ODAsMjA5ODMsMjA5OTMsMjA5OTQsMjA5OTcsMjEwMTAsMjEwMTEsMjEwMTMsMjEwMTQsMjEwMTYsMjEwMjYsMjEwMzIsMjEwNDEsMjEwNDIsMjEwNDUsMjEwNTIsMjEwNjEsMjEwNjUsMjEwNzcs''@;'; put 'put ''MjEwNzksMjEwODAsMjEwODIsMjEwODQsMjEwODcsMjEwODgsMjEwODksMjEwOTQsMjExMDIsMjExMTEsMjExMTIsMjExMTMsMjExMjAsMjExMjIsMjExMjUsMjExMzAsMjExMzIsMjExMzksMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjEx''@;'; put 'put ''NTksMjExNjcsMjExNjgsMjExNzQsMjExNzUsMjExNzYsMjExNzgsMjExNzksMjExODEsMjExODQsMjExODgsMjExOTAsMjExOTIsMjExOTYsMjExOTksMjEyMDEsMjEyMDQsMjEyMDYsMjEyMTEsMjEyMTIsMjEyMTcsMjEyMjEsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjgsMjEyMzIsMjEyMzMs''@;'; put 'put ''MjEyMzYsMjEyMzgsMjEyMzksMjEyNDgsMjEyNTEsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjUsMjEyNjcsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTYsMjEyOTgsMjEzMDEsMjEzMDgsMjEzMDksMjEz''@;'; put 'put ''MTAsMjEzMTQsMjEzMjQsMjEzMjMsMjEzMzcsMjEzMzksMjEzNDUsMjEzNDcsMjEzNDksMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjksMjEzNzQsMjEzNzksMjEzODMsMjEzODQsMjEzOTAsMjEzOTUsMjEzOTYsMjE0MDEsMjE0MDUsMjE0MDksMjE0MTIsMjE0MTgsMjE0MTksMjE0MjMsMjE0MjYs''@;'; put 'put ''MjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzQsMjE0MzcsMjE0NDAsMjE0NDUsMjE0NTUsMjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjksMjE0NzAsMjE0NzIsMjE0NzgsMjE0NzksMjE0OTMsMjE1MDYsMjE1MjMsMjE1MzAsMjE1MzcsMjE1NDMsMjE1NDQsMjE1NDYsMjE1NTEsMjE1''@;'; put 'put ''NTMsMjE1NTYsMjE1NTcsMjE1NzEsMjE1NzIsMjE1NzUsMjE1ODEsMjE1ODMsMjE1OTgsMjE2MDIsMjE2MDQsMjE2MDYsMjE2MDcsMjE2MDksMjE2MTEsMjE2MTMsMjE2MTQsMjE2MjAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2NDAsMjE2NDEsMjE2NDUsMjE2NDksMjE2NTMsMjE2NTQs''@;'; put 'put ''MjE2NjAsMjE2NjMsMjE2NjUsMjE2NzAsMjE2NzEsMjE2NzMsMjE2NzQsMjE2NzcsMjE2NzgsMjE2ODEsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTEsMjE2OTUsMjE3MDIsMjE3MDYsMjE3MDksMjE3MTAsMjE3MjgsMjE3MzgsMjE3NDAsMjE3NDMsMjE3NTAsMjE3NTYsMjE3NTgsMjE3NTksMjE3''@;'; put 'put ''NjAsMjE3NjEsMjE3NjUsMjE3NjgsMjE3NjksMjE3NzIsMjE3NzMsMjE3NzQsMjE3ODEsMjE4MDIsMjE4MDMsMjE4MTAsMjE4MTMsMjE4MTQsMjE4MTksMjE4MjAsMjE4MjEsMjE4MjUsMjE4MzEsMjE4MzMsMjE4MzQsMjE4MzcsMjE4NDAsMjE4NDEsMjE4NDgsMjE4NTAsMjE4NTEsMjE4NTQs''@;'; put 'put ''MjE4NTYsMjE4NTcsMjE4NjAsMjE4NjIsMjE4ODcsMjE4ODksMjE4OTAsMjE4OTQsMjE4OTYsMjE5MDIsMjE5MDMsMjE5MDUsMjE5MDYsMjE5MDcsMjE5MDgsMjE5MTEsMjE5MjMsMjE5MjQsMjE5MzMsMjE5MzgsMjE5NTEsMjE5NTMsMjE5NTUsMjE5NTgsMjE5NjEsMjE5NjMsMjE5NjQsMjE5''@;'; put 'put ''NjYsMjE5NjksMjE5NzAsMjE5NzEsMjE5NzUsMjE5NzYsMjE5NzksMjE5ODIsMjE5ODYsMjE5OTMsMjIwMDYsMjIwMTUsMjIwMjEsMjIwMjQsMjIwMjYsMjIwMjksMjIwMzAsMjIwMzEsMjIwMzIsMjIwMzMsMjIwMzQsMjIwNDEsMjIwNjAsMjIwNjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzMs''@;'; put 'put ''MjIwNzUsMjIwNzYsMjIwNzcsMjIwNzksMjIwODAsMjIwODEsMjIwODMsMjIwODQsMjIwODYsMjIwODksMjIwOTEsMjIwOTMsMjIwOTUsMjIxMDAsMjIxMTAsMjIxMTIsMjIxMTMsMjIxMTQsMjIxMTUsMjIxMTgsMjIxMjEsMjIxMjUsMjIxMjcsMjIxMjksMjIxMzAsMjIxMzMsMjIxNDgsMjIx''@;'; put 'put ''NDksMjIxNTIsMjIxNTUsMjIxNTYsMjIxNjUsMjIxNjksMjIxNzAsMjIxNzMsMjIxNzQsMjIxNzUsMjIxODIsMjIxODMsMjIxODQsMjIxODUsMjIxODcsMjIxODgsMjIxODksMjIxOTMsMjIxOTUsMjIxOTksMjIyMDYsMjIyMTMsMjIyMTcsMjIyMTgsMjIyMTksMjIyMjMsMjIyMjQsMjIyMjAs''@;'; put 'put ''MjIyMjEsMjIyMzMsMjIyMzYsMjIyMzcsMjIyMzksMjIyNDEsMjIyNDQsMjIyNDUsMjIyNDYsMjIyNDcsMjIyNDgsMjIyNTcsMjIyNTEsMjIyNTMsMjIyNjIsMjIyNjMsMjIyNzMsMjIyNzQsMjIyNzksMjIyODIsMjIyODQsMjIyODksMjIyOTMsMjIyOTgsMjIyOTksMjIzMDEsMjIzMDQsMjIz''@;'; put 'put ''MDYsMjIzMDcsMjIzMDgsMjIzMDksMjIzMTMsMjIzMTQsMjIzMTYsMjIzMTgsMjIzMTksMjIzMjMsMjIzMjQsMjIzMzMsMjIzMzQsMjIzMzUsMjIzNDEsMjIzNDIsMjIzNDgsMjIzNDksMjIzNTQsMjIzNzAsMjIzNzMsMjIzNzUsMjIzNzYsMjIzNzksMjIzODEsMjIzODIsMjIzODMsMjIzODQs''@;'; put 'put ''MjIzODUsMjIzODcsMjIzODgsMjIzODksMjIzOTEsMjIzOTMsMjIzOTQsMjIzOTUsMjIzOTYsMjIzOTgsMjI0MDEsMjI0MDMsMjI0MTIsMjI0MjAsMjI0MjMsMjI0MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzMsMjI0MjEsMjI0MzksMjI0NDAsMjI0NDEsMjI0NDQsMjI0''@;'; put 'put ''NTYsMjI0NjEsMjI0NzEsMjI0NzIsMjI0NzYsMjI0NzksMjI0ODUsMjI0OTMsMjI0OTQsMjI1MDAsMjI1MDIsMjI1MDMsMjI1MDUsMjI1MDksMjI1MTIsMjI1MTcsMjI1MTgsMjI1MjAsMjI1MjUsMjI1MjYsMjI1MjcsMjI1MzEsMjI1MzIsMjI1MzYsMjI1MzcsMjI0OTcsMjI1NDAsMjI1NDEs''@;'; put 'put ''MjI1NTUsMjI1NTgsMjI1NTksMjI1NjAsMjI1NjYsMjI1NjcsMjI1NzMsMjI1NzgsMjI1ODUsMjI1OTEsMjI2MDEsMjI2MDQsMjI2MDUsMjI2MDcsMjI2MDgsMjI2MTMsMjI2MjMsMjI2MjUsMjI2MjgsMjI2MzEsMjI2MzIsMjI2NDgsMjI2NTIsMjI2NTUsMjI2NTYsMjI2NTcsMjI2NjMsMjI2''@;'; put 'put ''NjQsMjI2NjUsMjI2NjYsMjI2NjgsMjI2NjksMjI2NzEsMjI2NzIsMjI2NzYsMjI2NzgsMjI2ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTQsMjI2OTcsMjI3MDUsMjI3MDYsMjI3MjQsMjI3MTYsMjI3MjIsMjI3MjgsMjI3MzMsMjI3MzQsMjI3MzYsMjI3MzgsMjI3NDAsMjI3NDIsMjI3NDYs''@;'; put 'put ''MjI3NDksMjI3NTMsMjI3NTQsMjI3NjEsMjI3NzEsMjI3ODksMjI3OTAsMjI3OTUsMjI3OTYsMjI4MDIsMjI4MDMsMjI4MDQsMzQzNjksMjI4MTMsMjI4MTcsMjI4MTksMjI4MjAsMjI4MjQsMjI4MzEsMjI4MzIsMjI4MzUsMjI4MzcsMjI4MzgsMjI4NDcsMjI4NTEsMjI4NTQsMjI4NjYsMjI4''@;'; put 'put ''NjcsMjI4NzMsMjI4NzUsMjI4NzcsMjI4NzgsMjI4NzksMjI4ODEsMjI4ODMsMjI4OTEsMjI4OTMsMjI4OTUsMjI4OTgsMjI5MDEsMjI5MDIsMjI5MDUsMjI5MDcsMjI5MDgsMjI5MjMsMjI5MjQsMjI5MjYsMjI5MzAsMjI5MzMsMjI5MzUsMjI5NDMsMjI5NDgsMjI5NTEsMjI5NTcsMjI5NTgs''@;'; put 'put ''MjI5NTksMjI5NjAsMjI5NjMsMjI5NjcsMjI5NzAsMjI5NzIsMjI5NzcsMjI5NzksMjI5ODAsMjI5ODQsMjI5ODYsMjI5ODksMjI5OTQsMjMwMDUsMjMwMDYsMjMwMDcsMjMwMTEsMjMwMTIsMjMwMTUsMjMwMjIsMjMwMjMsMjMwMjUsMjMwMjYsMjMwMjgsMjMwMzEsMjMwNDAsMjMwNDQsMjMw''@;'; put 'put ''NTIsMjMwNTMsMjMwNTQsMjMwNTgsMjMwNTksMjMwNzAsMjMwNzUsMjMwNzYsMjMwNzksMjMwODAsMjMwODIsMjMwODUsMjMwODgsMjMxMDgsMjMxMDksMjMxMTEsMjMxMTIsMjMxMTYsMjMxMjAsMjMxMjUsMjMxMzQsMjMxMzksMjMxNDEsMjMxNDMsMjMxNDksMjMxNTksMjMxNjIsMjMxNjMs''@;'; put 'put ''MjMxNjYsMjMxNzksMjMxODQsMjMxODcsMjMxOTAsMjMxOTMsMjMxOTYsMjMxOTgsMjMxOTksMjMyMDAsMjMyMDIsMjMyMDcsMjMyMTIsMjMyMTcsMjMyMTgsMjMyMTksMjMyMjEsMjMyMjQsMjMyMjYsMjMyMjcsMjMyMzEsMjMyMzYsMjMyMzgsMjMyNDAsMjMyNDcsMjMyNTgsMjMyNjAsMjMy''@;'; put 'put ''NjQsMjMyNjksMjMyNzQsMjMyNzgsMjMyODUsMjMyODYsMjMyOTMsMjMyOTYsMjMyOTcsMjMzMDQsMjMzMTksMjMzNDgsMjMzMjEsMjMzMjMsMjMzMjUsMjMzMjksMjMzMzMsMjMzNDEsMjMzNTIsMjMzNjEsMjMzNzEsMjMzNzIsMjMzNzgsMjMzODIsMjMzOTAsMjM0MDAsMjM0MDYsMjM0MDcs''@;'; put 'put ''MjM0MjAsMjM0MjEsMjM0MjIsMjM0MjMsMjM0MjUsMjM0MjgsMjM0MzAsMjM0MzQsMjM0MzgsMjM0NDAsMjM0NDEsMjM0NDMsMjM0NDQsMjM0NDYsMjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzEsMjM0NzMsMjM0NzQsMjM0NzksMjM0ODIsMjM0ODQsMjM0ODgsMjM0ODksMjM1MDEsMjM1''@;'; put 'put ''MDMsMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1MjAsMjM1MzUsMjM1MzcsMjM1NDAsMjM1NDksMjM1NjQsMjM1NzUsMjM1ODIsMjM1ODMsMjM1ODcsMjM1OTAsMjM1OTMsMjM1OTUsMjM1OTYsMjM1OTgsMjM2MDAsMjM2MDIsMjM2MDUsMjM2MDYsMjM2NDEsMjM2NDIsMjM2NDQs''@;'; put 'put ''MjM2NTAsMjM2NTEsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NjEsMjM2NjQsMjM2NjgsMjM2NjksMjM2NzQsMjM2NzUsMjM2NzYsMjM2NzcsMjM2ODcsMjM2ODgsMjM2OTAsMjM2OTUsMjM2OTgsMjM3MDksMjM3MTEsMjM3MTIsMjM3MTQsMjM3MTUsMjM3MTgsMjM3MjIsMjM3MzAsMjM3MzIsMjM3''@;'; put 'put ''MzMsMjM3MzgsMjM3NTMsMjM3NTUsMjM3NjIsMjM3NzMsMjM3NjcsMjM3OTAsMjM3OTMsMjM3OTQsMjM3OTYsMjM4MDksMjM4MTQsMjM4MjEsMjM4MjYsMjM4NTEsMjM4NDMsMjM4NDQsMjM4NDYsMjM4NDcsMjM4NTcsMjM4NjAsMjM4NjUsMjM4NjksMjM4NzEsMjM4NzQsMjM4NzUsMjM4Nzgs''@;'; put 'put ''MjM4ODAsMjM4OTMsMjM4ODksMjM4OTcsMjM4ODIsMjM5MDMsMjM5MDQsMjM5MDUsMjM5MDYsMjM5MDgsMjM5MTQsMjM5MTcsMjM5MjAsMjM5MjksMjM5MzAsMjM5MzQsMjM5MzUsMjM5MzcsMjM5MzksMjM5NDQsMjM5NDYsMjM5NTQsMjM5NTUsMjM5NTYsMjM5NTcsMjM5NjEsMjM5NjMsMjM5''@;'; put 'put ''NjcsMjM5NjgsMjM5NzUsMjM5NzksMjM5ODQsMjM5ODgsMjM5OTIsMjM5OTMsMjQwMDMsMjQwMDcsMjQwMTEsMjQwMTYsMjQwMTQsMjQwMjQsMjQwMjUsMjQwMzIsMjQwMzYsMjQwNDEsMjQwNTYsMjQwNTcsMjQwNjQsMjQwNzEsMjQwNzcsMjQwODIsMjQwODQsMjQwODUsMjQwODgsMjQwOTUs''@;'; put 'put ''MjQwOTYsMjQxMTAsMjQxMDQsMjQxMTQsMjQxMTcsMjQxMjYsMjQxMzksMjQxNDQsMjQxMzcsMjQxNDUsMjQxNTAsMjQxNTIsMjQxNTUsMjQxNTYsMjQxNTgsMjQxNjgsMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzYsMjQxOTIsMjQyMDMsMjQyMDYsMjQyMjYsMjQyMjgsMjQy''@;'; put 'put ''MjksMjQyMzIsMjQyMzQsMjQyMzYsMjQyNDEsMjQyNDMsMjQyNTMsMjQyNTQsMjQyNTUsMjQyNjIsMjQyNjgsMjQyNjcsMjQyNzAsMjQyNzMsMjQyNzQsMjQyNzYsMjQyNzcsMjQyODQsMjQyODYsMjQyOTMsMjQyOTksMjQzMjIsMjQzMjYsMjQzMjcsMjQzMjgsMjQzMzQsMjQzNDUsMjQzNDgs''@;'; put 'put ''MjQzNDksMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgsMjQzNzIsMjQzNzQsMjQzNzksMjQzODEsMjQzODMsMjQzODQsMjQzODgsMjQzODksMjQzOTEsMjQzOTcsMjQ0MDAsMjQ0MDQsMjQ0MDgsMjQ0MTEsMjQ0MTYsMjQ0MTksMjQ0MjAsMjQ0''@;'; put 'put ''MjMsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0NTcsMjQ0NjEsMjQ0NjMsMjQ0NzAsMjQ0NzYsMjQ0NzcsMjQ0ODIsMjQ0ODcsMjQ0OTEsMjQ0ODQsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ1MDQsMjQ1MTYsMjQ1MTksMjQ1MjAsMjQ1MjEs''@;'; put 'put ''MjQ1MjMsMjQ1MjgsMjQ1MjksMjQ1MzAsMjQ1MzEsMjQ1MzIsMjQ1NDIsMjQ1NDUsMjQ1NDYsMjQ1NTIsMjQ1NTMsMjQ1NTQsMjQ1NTYsMjQ1NTcsMjQ1NTgsMjQ1NTksMjQ1NjIsMjQ1NjMsMjQ1NjYsMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODYsMjQ1ODksMjQ1OTUsMjQ1OTYsMjQ1OTksMjQ2''@;'; put 'put ''MDAsMjQ2MDIsMjQ2MDcsMjQ2MTIsMjQ2MjEsMjQ2MjcsMjQ2MjksMjQ2NDAsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTIsMjQ2NTcsMjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjksMjQ2NzMsMjQ2NzksMjQ2ODksMjQ3MDIsMjQ3MDMsMjQ3MDYsMjQ3MTAsMjQ3MTIsMjQ3MTQsMjQ3MTgsMjQ3MjEs''@;'; put 'put ''MjQ3MjMsMjQ3MjUsMjQ3MjgsMjQ3MzMsMjQ3MzQsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDQsMjQ3NTIsMjQ3NTMsMjQ3NTksMjQ3NjMsMjQ3NjYsMjQ3NzAsMjQ3NzIsMjQ3NzYsMjQ3NzcsMjQ3NzgsMjQ3NzksMjQ3ODIsMjQ3ODMsMjQ3ODgsMjQ3ODksMjQ3OTMsMjQ3OTUsMjQ3OTcsMjQ3''@;'; put 'put ''OTgsMjQ4MDIsMjQ4MDUsMjQ4MTgsMjQ4MjEsMjQ4MjQsMjQ4MjgsMjQ4MjksMjQ4MzQsMjQ4MzksMjQ4NDIsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTcsMjQ4NjAsMjQ4NjIsMjQ4NjYsMjQ4NzQsMjQ4NzUsMjQ4ODAsMjQ4ODEsMjQ4ODUs''@;'; put 'put ''MjQ4ODYsMjQ4ODcsMjQ4ODksMjQ4OTcsMjQ5MDEsMjQ5MDIsMjQ5MDUsMjQ5MjYsMjQ5MjgsMjQ5NDAsMjQ5NDYsMjQ5NTIsMjQ5NTUsMjQ5NTYsMjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjMsMjQ5NjQsMjQ5NzEsMjQ5NzMsMjQ5NzgsMjQ5NzksMjQ5ODMsMjQ5ODQsMjQ5ODgsMjQ5ODksMjQ5''@;'; put 'put ''OTEsMjQ5OTIsMjQ5OTcsMjVlMywyNTAwMiwyNTAwNSwyNTAxNiwyNTAxNywyNTAyMCwyNTAyNCwyNTAyNSwyNTAyNiwyNTAzOCwyNTAzOSwyNTA0NSwyNTA1MiwyNTA1MywyNTA1NCwyNTA1NSwyNTA1NywyNTA1OCwyNTA2MywyNTA2NSwyNTA2MSwyNTA2OCwyNTA2OSwyNTA3MSwyNTA4OSwy''@;'; put 'put ''NTA5MSwyNTA5MiwyNTA5NSwyNTEwNywyNTEwOSwyNTExNiwyNTEyMCwyNTEyMiwyNTEyMywyNTEyNywyNTEyOSwyNTEzMSwyNTE0NSwyNTE0OSwyNTE1NCwyNTE1NSwyNTE1NiwyNTE1OCwyNTE2NCwyNTE2OCwyNTE2OSwyNTE3MCwyNTE3MiwyNTE3NCwyNTE3OCwyNTE4MCwyNTE4OCwyNTE5''@;'; put 'put ''NywyNTE5OSwyNTIwMywyNTIxMCwyNTIxMywyNTIyOSwyNTIzMCwyNTIzMSwyNTIzMiwyNTI1NCwyNTI1NiwyNTI2NywyNTI3MCwyNTI3MSwyNTI3NCwyNTI3OCwyNTI3OSwyNTI4NCwyNTI5NCwyNTMwMSwyNTMwMiwyNTMwNiwyNTMyMiwyNTMzMCwyNTMzMiwyNTM0MCwyNTM0MSwyNTM0Nywy''@;'; put 'put ''NTM0OCwyNTM1NCwyNTM1NSwyNTM1NywyNTM2MCwyNTM2MywyNTM2NiwyNTM2OCwyNTM4NSwyNTM4NiwyNTM4OSwyNTM5NywyNTM5OCwyNTQwMSwyNTQwNCwyNTQwOSwyNTQxMCwyNTQxMSwyNTQxMiwyNTQxNCwyNTQxOCwyNTQxOSwyNTQyMiwyNTQyNiwyNTQyNywyNTQyOCwyNTQzMiwyNTQz''@;'; put 'put ''NSwyNTQ0NSwyNTQ0NiwyNTQ1MiwyNTQ1MywyNTQ1NywyNTQ2MCwyNTQ2MSwyNTQ2NCwyNTQ2OCwyNTQ2OSwyNTQ3MSwyNTQ3NCwyNTQ3NiwyNTQ3OSwyNTQ4MiwyNTQ4OCwyNTQ5MiwyNTQ5MywyNTQ5NywyNTQ5OCwyNTUwMiwyNTUwOCwyNTUxMCwyNTUxNywyNTUxOCwyNTUxOSwyNTUzMywy''@;'; put 'put ''NTUzNywyNTU0MSwyNTU0NCwyNTU1MCwyNTU1MywyNTU1NSwyNTU1NiwyNTU1NywyNTU2NCwyNTU2OCwyNTU3MywyNTU3OCwyNTU4MCwyNTU4NiwyNTU4NywyNTU4OSwyNTU5MiwyNTU5MywyNTYwOSwyNTYxMCwyNTYxNiwyNTYxOCwyNTYyMCwyNTYyNCwyNTYzMCwyNTYzMiwyNTYzNCwyNTYz''@;'; put 'put ''NiwyNTYzNywyNTY0MSwyNTY0MiwyNTY0NywyNTY0OCwyNTY1MywyNTY2MSwyNTY2MywyNTY3NSwyNTY3OSwyNTY4MSwyNTY4MiwyNTY4MywyNTY4NCwyNTY5MCwyNTY5MSwyNTY5MiwyNTY5MywyNTY5NSwyNTY5NiwyNTY5NywyNTY5OSwyNTcwOSwyNTcxNSwyNTcxNiwyNTcyMywyNTcyNSwy''@;'; put 'put ''NTczMywyNTczNSwyNTc0MywyNTc0NCwyNTc0NSwyNTc1MiwyNTc1MywyNTc1NSwyNTc1NywyNTc1OSwyNTc2MSwyNTc2MywyNTc2NiwyNTc2OCwyNTc3MiwyNTc3OSwyNTc4OSwyNTc5MCwyNTc5MSwyNTc5NiwyNTgwMSwyNTgwMiwyNTgwMywyNTgwNCwyNTgwNiwyNTgwOCwyNTgwOSwyNTgx''@;'; put 'put ''MywyNTgxNSwyNTgyOCwyNTgyOSwyNTgzMywyNTgzNCwyNTgzNywyNTg0MCwyNTg0NSwyNTg0NywyNTg1MSwyNTg1NSwyNTg1NywyNTg2MCwyNTg2NCwyNTg2NSwyNTg2NiwyNTg3MSwyNTg3NSwyNTg3NiwyNTg3OCwyNTg4MSwyNTg4MywyNTg4NiwyNTg4NywyNTg5MCwyNTg5NCwyNTg5Nywy''@;'; put 'put ''NTkwMiwyNTkwNSwyNTkxNCwyNTkxNiwyNTkxNywyNTkyMywyNTkyNywyNTkyOSwyNTkzNiwyNTkzOCwyNTk0MCwyNTk1MSwyNTk1MiwyNTk1OSwyNTk2MywyNTk3OCwyNTk4MSwyNTk4NSwyNTk4OSwyNTk5NCwyNjAwMiwyNjAwNSwyNjAwOCwyNjAxMywyNjAxNiwyNjAxOSwyNjAyMiwyNjAz''@;'; put 'put ''MCwyNjAzNCwyNjAzNSwyNjAzNiwyNjA0NywyNjA1MCwyNjA1NiwyNjA1NywyNjA2MiwyNjA2NCwyNjA2OCwyNjA3MCwyNjA3MiwyNjA3OSwyNjA5NiwyNjA5OCwyNjEwMCwyNjEwMSwyNjEwNSwyNjExMCwyNjExMSwyNjExMiwyNjExNiwyNjEyMCwyNjEyMSwyNjEyNSwyNjEyOSwyNjEzMCwy''@;'; put 'put ''NjEzMywyNjEzNCwyNjE0MSwyNjE0MiwyNjE0NSwyNjE0NiwyNjE0NywyNjE0OCwyNjE1MCwyNjE1MywyNjE1NCwyNjE1NSwyNjE1NiwyNjE1OCwyNjE2MCwyNjE2MSwyNjE2MywyNjE2OSwyNjE2NywyNjE3NiwyNjE4MSwyNjE4MiwyNjE4NiwyNjE4OCwyNjE5MywyNjE5MCwyNjE5OSwyNjIw''@;'; put 'put ''MCwyNjIwMSwyNjIwMywyNjIwNCwyNjIwOCwyNjIwOSwyNjM2MywyNjIxOCwyNjIxOSwyNjIyMCwyNjIzOCwyNjIyNywyNjIyOSwyNjIzOSwyNjIzMSwyNjIzMiwyNjIzMywyNjIzNSwyNjI0MCwyNjIzNiwyNjI1MSwyNjI1MiwyNjI1MywyNjI1NiwyNjI1OCwyNjI2NSwyNjI2NiwyNjI2Nywy''@;'; put 'put ''NjI2OCwyNjI3MSwyNjI3MiwyNjI3NiwyNjI4NSwyNjI4OSwyNjI5MCwyNjI5MywyNjI5OSwyNjMwMywyNjMwNCwyNjMwNiwyNjMwNywyNjMxMiwyNjMxNiwyNjMxOCwyNjMxOSwyNjMyNCwyNjMzMSwyNjMzNSwyNjM0NCwyNjM0NywyNjM0OCwyNjM1MCwyNjM2MiwyNjM3MywyNjM3NSwyNjM4''@;'; put 'put ''MiwyNjM4NywyNjM5MywyNjM5NiwyNjQwMCwyNjQwMiwyNjQxOSwyNjQzMCwyNjQzNywyNjQzOSwyNjQ0MCwyNjQ0NCwyNjQ1MiwyNjQ1MywyNjQ2MSwyNjQ3MCwyNjQ3NiwyNjQ3OCwyNjQ4NCwyNjQ4NiwyNjQ5MSwyNjQ5NywyNjUwMCwyNjUxMCwyNjUxMSwyNjUxMywyNjUxNSwyNjUxOCwy''@;'; put 'put ''NjUyMCwyNjUyMSwyNjUyMywyNjU0NCwyNjU0NSwyNjU0NiwyNjU0OSwyNjU1NSwyNjU1NiwyNjU1NywyNjYxNywyNjU2MCwyNjU2MiwyNjU2MywyNjU2NSwyNjU2OCwyNjU2OSwyNjU3OCwyNjU4MywyNjU4NSwyNjU4OCwyNjU5MywyNjU5OCwyNjYwOCwyNjYxMCwyNjYxNCwyNjYxNSwyNjcw''@;'; put 'put ''NiwyNjY0NCwyNjY0OSwyNjY1MywyNjY1NSwyNjY2NCwyNjY2MywyNjY2OCwyNjY2OSwyNjY3MSwyNjY3MiwyNjY3MywyNjY3NSwyNjY4MywyNjY4NywyNjY5MiwyNjY5MywyNjY5OCwyNjcwMCwyNjcwOSwyNjcxMSwyNjcxMiwyNjcxNSwyNjczMSwyNjczNCwyNjczNSwyNjczNiwyNjczNywy''@;'; put 'put ''NjczOCwyNjc0MSwyNjc0NSwyNjc0NiwyNjc0NywyNjc0OCwyNjc1NCwyNjc1NiwyNjc1OCwyNjc2MCwyNjc3NCwyNjc3NiwyNjc3OCwyNjc4MCwyNjc4NSwyNjc4NywyNjc4OSwyNjc5MywyNjc5NCwyNjc5OCwyNjgwMiwyNjgxMSwyNjgyMSwyNjgyNCwyNjgyOCwyNjgzMSwyNjgzMiwyNjgz''@;'; put 'put ''MywyNjgzNSwyNjgzOCwyNjg0MSwyNjg0NCwyNjg0NSwyNjg1MywyNjg1NiwyNjg1OCwyNjg1OSwyNjg2MCwyNjg2MSwyNjg2NCwyNjg2NSwyNjg2OSwyNjg3MCwyNjg3NSwyNjg3NiwyNjg3NywyNjg4NiwyNjg4OSwyNjg5MCwyNjg5NiwyNjg5NywyNjg5OSwyNjkwMiwyNjkwMywyNjkyOSwy''@;'; put 'put ''NjkzMSwyNjkzMywyNjkzNiwyNjkzOSwyNjk0NiwyNjk0OSwyNjk1MywyNjk1OCwyNjk2NywyNjk3MSwyNjk3OSwyNjk4MCwyNjk4MSwyNjk4MiwyNjk4NCwyNjk4NSwyNjk4OCwyNjk5MiwyNjk5MywyNjk5NCwyNzAwMiwyNzAwMywyNzAwNywyNzAwOCwyNzAyMSwyNzAyNiwyNzAzMCwyNzAz''@;'; put 'put ''MiwyNzA0MSwyNzA0NSwyNzA0NiwyNzA0OCwyNzA1MSwyNzA1MywyNzA1NSwyNzA2MywyNzA2NCwyNzA2NiwyNzA2OCwyNzA3NywyNzA4MCwyNzA4OSwyNzA5NCwyNzA5NSwyNzEwNiwyNzEwOSwyNzExOCwyNzExOSwyNzEyMSwyNzEyMywyNzEyNSwyNzEzNCwyNzEzNiwyNzEzNywyNzEzOSwy''@;'; put 'put ''NzE1MSwyNzE1MywyNzE1NywyNzE2MiwyNzE2NSwyNzE2OCwyNzE3MiwyNzE3NiwyNzE4NCwyNzE4NiwyNzE4OCwyNzE5MSwyNzE5NSwyNzE5OCwyNzE5OSwyNzIwNSwyNzIwNiwyNzIwOSwyNzIxMCwyNzIxNCwyNzIxNiwyNzIxNywyNzIxOCwyNzIyMSwyNzIyMiwyNzIyNywyNzIzNiwyNzIz''@;'; put 'put ''OSwyNzI0MiwyNzI0OSwyNzI1MSwyNzI2MiwyNzI2NSwyNzI2NywyNzI3MCwyNzI3MSwyNzI3MywyNzI3NSwyNzI4MSwyNzI5MSwyNzI5MywyNzI5NCwyNzI5NSwyNzMwMSwyNzMwNywyNzMxMSwyNzMxMiwyNzMxMywyNzMxNiwyNzMyNSwyNzMyNiwyNzMyNywyNzMzNCwyNzMzNywyNzMzNiwy''@;'; put 'put ''NzM0MCwyNzM0NCwyNzM0OCwyNzM0OSwyNzM1MCwyNzM1NiwyNzM1NywyNzM2NCwyNzM2NywyNzM3MiwyNzM3NiwyNzM3NywyNzM3OCwyNzM4OCwyNzM4OSwyNzM5NCwyNzM5NSwyNzM5OCwyNzM5OSwyNzQwMSwyNzQwNywyNzQwOCwyNzQwOSwyNzQxNSwyNzQxOSwyNzQyMiwyNzQyOCwyNzQz''@;'; put 'put ''MiwyNzQzNSwyNzQzNiwyNzQzOSwyNzQ0NSwyNzQ0NiwyNzQ1MSwyNzQ1NSwyNzQ2MiwyNzQ2NiwyNzQ2OSwyNzQ3NCwyNzQ3OCwyNzQ4MCwyNzQ4NSwyNzQ4OCwyNzQ5NSwyNzQ5OSwyNzUwMiwyNzUwNCwyNzUwOSwyNzUxNywyNzUxOCwyNzUyMiwyNzUyNSwyNzU0MywyNzU0NywyNzU1MSwy''@;'; put 'put ''NzU1MiwyNzU1NCwyNzU1NSwyNzU2MCwyNzU2MSwyNzU2NCwyNzU2NSwyNzU2NiwyNzU2OCwyNzU3NiwyNzU3NywyNzU4MSwyNzU4MiwyNzU4NywyNzU4OCwyNzU5MywyNzU5NiwyNzYwNiwyNzYxMCwyNzYxNywyNzYxOSwyNzYyMiwyNzYyMywyNzYzMCwyNzYzMywyNzYzOSwyNzY0MSwyNzY0''@;'; put 'put ''NywyNzY1MCwyNzY1MiwyNzY1MywyNzY1NywyNzY2MSwyNzY2MiwyNzY2NCwyNzY2NiwyNzY3MywyNzY3OSwyNzY4NiwyNzY4NywyNzY4OCwyNzY5MiwyNzY5NCwyNzY5OSwyNzcwMSwyNzcwMiwyNzcwNiwyNzcwNywyNzcxMSwyNzcyMiwyNzcyMywyNzcyNSwyNzcyNywyNzczMCwyNzczMiwy''@;'; put 'put ''NzczNywyNzczOSwyNzc0MCwyNzc1NSwyNzc1NywyNzc1OSwyNzc2NCwyNzc2NiwyNzc2OCwyNzc2OSwyNzc3MSwyNzc4MSwyNzc4MiwyNzc4MywyNzc4NSwyNzc5NiwyNzc5NywyNzc5OSwyNzgwMCwyNzgwNCwyNzgwNywyNzgyNCwyNzgyNiwyNzgyOCwyNzg0MiwyNzg0NiwyNzg1MywyNzg1''@;'; put 'put ''NSwyNzg1NiwyNzg1NywyNzg1OCwyNzg2MCwyNzg2MiwyNzg2NiwyNzg2OCwyNzg3MiwyNzg3OSwyNzg4MSwyNzg4MywyNzg4NCwyNzg4NiwyNzg5MCwyNzg5MiwyNzkwOCwyNzkxMSwyNzkxNCwyNzkxOCwyNzkxOSwyNzkyMSwyNzkyMywyNzkzMCwyNzk0MiwyNzk0MywyNzk0NCwyNzc1MSwy''@;'; put 'put ''Nzk1MCwyNzk1MSwyNzk1MywyNzk2MSwyNzk2NCwyNzk2NywyNzk5MSwyNzk5OCwyNzk5OSwyODAwMSwyODAwNSwyODAwNywyODAxNSwyODAxNiwyODAyOCwyODAzNCwyODAzOSwyODA0OSwyODA1MCwyODA1MiwyODA1NCwyODA1NSwyODA1NiwyODA3NCwyODA3NiwyODA4NCwyODA4NywyODA4''@;'; put 'put ''OSwyODA5MywyODA5NSwyODEwMCwyODEwNCwyODEwNiwyODExMCwyODExMSwyODExOCwyODEyMywyODEyNSwyODEyNywyODEyOCwyODEzMCwyODEzMywyODEzNywyODE0MywyODE0NCwyODE0OCwyODE1MCwyODE1NiwyODE2MCwyODE2NCwyODE5MCwyODE5NCwyODE5OSwyODIxMCwyODIxNCwy''@;'; put 'put ''ODIxNywyODIxOSwyODIyMCwyODIyOCwyODIyOSwyODIzMiwyODIzMywyODIzNSwyODIzOSwyODI0MSwyODI0MiwyODI0MywyODI0NCwyODI0NywyODI1MiwyODI1MywyODI1NCwyODI1OCwyODI1OSwyODI2NCwyODI3NSwyODI4MywyODI4NSwyODMwMSwyODMwNywyODMxMywyODMyMCwyODMy''@;'; put 'put ''NywyODMzMywyODMzNCwyODMzNywyODMzOSwyODM0NywyODM1MSwyODM1MiwyODM1MywyODM1NSwyODM1OSwyODM2MCwyODM2MiwyODM2NSwyODM2NiwyODM2NywyODM5NSwyODM5NywyODM5OCwyODQwOSwyODQxMSwyODQxMywyODQyMCwyODQyNCwyODQyNiwyODQyOCwyODQyOSwyODQzOCwy''@;'; put 'put ''ODQ0MCwyODQ0MiwyODQ0MywyODQ1NCwyODQ1NywyODQ1OCwyODQ2MywyODQ2NCwyODQ2NywyODQ3MCwyODQ3NSwyODQ3NiwyODQ2MSwyODQ5NSwyODQ5NywyODQ5OCwyODQ5OSwyODUwMywyODUwNSwyODUwNiwyODUwOSwyODUxMCwyODUxMywyODUxNCwyODUyMCwyODUyNCwyODU0MSwyODU0''@;'; put 'put ''MiwyODU0NywyODU1MSwyODU1MiwyODU1NSwyODU1NiwyODU1NywyODU2MCwyODU2MiwyODU2MywyODU2NCwyODU2NiwyODU3MCwyODU3NSwyODU3NiwyODU4MSwyODU4MiwyODU4MywyODU4NCwyODU5MCwyODU5MSwyODU5MiwyODU5NywyODU5OCwyODYwNCwyODYxMywyODYxNSwyODYxNiwy''@;'; put 'put ''ODYxOCwyODYzNCwyODYzOCwyODY0OCwyODY0OSwyODY1NiwyODY2MSwyODY2NSwyODY2OCwyODY2OSwyODY3MiwyODY3NywyODY3OCwyODY3OSwyODY4NSwyODY5NSwyODcwNCwyODcwNywyODcxOSwyODcyNCwyODcyNywyODcyOSwyODczMiwyODczOSwyODc0MCwyODc0NCwyODc0NSwyODc0''@;'; put 'put ''NiwyODc0NywyODc1NiwyODc1NywyODc2NSwyODc2NiwyODc1MCwyODc3MiwyODc3MywyODc4MCwyODc4MiwyODc4OSwyODc5MCwyODc5OCwyODgwMSwyODgwNSwyODgwNiwyODgyMCwyODgyMSwyODgyMiwyODgyMywyODgyNCwyODgyNywyODgzNiwyODg0MywyODg0OCwyODg0OSwyODg1Miwy''@;'; put 'put ''ODg1NSwyODg3NCwyODg4MSwyODg4MywyODg4NCwyODg4NSwyODg4NiwyODg4OCwyODg5MiwyODkwMCwyODkyMiwyODkzMSwyODkzMiwyODkzMywyODkzNCwyODkzNSwyODkzOSwyODk0MCwyODk0MywyODk1OCwyODk2MCwyODk3MSwyODk3MywyODk3NSwyODk3NiwyODk3NywyODk4NCwyODk5''@;'; put 'put ''MywyODk5NywyODk5OCwyODk5OSwyOTAwMiwyOTAwMywyOTAwOCwyOTAxMCwyOTAxNSwyOTAxOCwyOTAyMCwyOTAyMiwyOTAyNCwyOTAzMiwyOTA0OSwyOTA1NiwyOTA2MSwyOTA2MywyOTA2OCwyOTA3NCwyOTA4MiwyOTA4MywyOTA4OCwyOTA5MCwyOTEwMywyOTEwNCwyOTEwNiwyOTEwNywy''@;'; put 'put ''OTExNCwyOTExOSwyOTEyMCwyOTEyMSwyOTEyNCwyOTEzMSwyOTEzMiwyOTEzOSwyOTE0MiwyOTE0NSwyOTE0NiwyOTE0OCwyOTE3NiwyOTE4MiwyOTE4NCwyOTE5MSwyOTE5MiwyOTE5MywyOTIwMywyOTIwNywyOTIxMCwyOTIxMywyOTIxNSwyOTIyMCwyOTIyNywyOTIzMSwyOTIzNiwyOTI0''@;'; put 'put ''MCwyOTI0MSwyOTI0OSwyOTI1MCwyOTI1MSwyOTI1MywyOTI2MiwyOTI2MywyOTI2NCwyOTI2NywyOTI2OSwyOTI3MCwyOTI3NCwyOTI3NiwyOTI3OCwyOTI4MCwyOTI4MywyOTI4OCwyOTI5MSwyOTI5NCwyOTI5NSwyOTI5NywyOTMwMywyOTMwNCwyOTMwNywyOTMwOCwyOTMxMSwyOTMxNiwy''@;'; put 'put ''OTMyMSwyOTMyNSwyOTMyNiwyOTMzMSwyOTMzOSwyOTM1MiwyOTM1NywyOTM1OCwyOTM2MSwyOTM2NCwyOTM3NCwyOTM3NywyOTM4MywyOTM4NSwyOTM4OCwyOTM5NywyOTM5OCwyOTQwMCwyOTQwNywyOTQxMywyOTQyNywyOTQyOCwyOTQzNCwyOTQzNSwyOTQzOCwyOTQ0MiwyOTQ0NCwyOTQ0''@;'; put 'put ''NSwyOTQ0NywyOTQ1MSwyOTQ1MywyOTQ1OCwyOTQ1OSwyOTQ2NCwyOTQ2NSwyOTQ3MCwyOTQ3NCwyOTQ3NiwyOTQ3OSwyOTQ4MCwyOTQ4NCwyOTQ4OSwyOTQ5MCwyOTQ5MywyOTQ5OCwyOTQ5OSwyOTUwMSwyOTUwNywyOTUxNywyOTUyMCwyOTUyMiwyOTUyNiwyOTUyOCwyOTUzMywyOTUzNCwy''@;'; put 'put ''OTUzNSwyOTUzNiwyOTU0MiwyOTU0MywyOTU0NSwyOTU0NywyOTU0OCwyOTU1MCwyOTU1MSwyOTU1MywyOTU1OSwyOTU2MSwyOTU2NCwyOTU2OCwyOTU2OSwyOTU3MSwyOTU3MywyOTU3NCwyOTU4MiwyOTU4NCwyOTU4NywyOTU4OSwyOTU5MSwyOTU5MiwyOTU5NiwyOTU5OCwyOTU5OSwyOTYw''@;'; put 'put ''MCwyOTYwMiwyOTYwNSwyOTYwNiwyOTYxMCwyOTYxMSwyOTYxMywyOTYyMSwyOTYyMywyOTYyNSwyOTYyOCwyOTYyOSwyOTYzMSwyOTYzNywyOTYzOCwyOTY0MSwyOTY0MywyOTY0NCwyOTY0NywyOTY1MCwyOTY1MSwyOTY1NCwyOTY1NywyOTY2MSwyOTY2NSwyOTY2NywyOTY3MCwyOTY3MSwy''@;'; put 'put ''OTY3MywyOTY4NCwyOTY4NSwyOTY4NywyOTY4OSwyOTY5MCwyOTY5MSwyOTY5MywyOTY5NSwyOTY5NiwyOTY5NywyOTcwMCwyOTcwMywyOTcwNiwyOTcxMywyOTcyMiwyOTcyMywyOTczMiwyOTczNCwyOTczNiwyOTczNywyOTczOCwyOTczOSwyOTc0MCwyOTc0MSwyOTc0MiwyOTc0MywyOTc0''@;'; put 'put ''NCwyOTc0NSwyOTc1MywyOTc2MCwyOTc2MywyOTc2NCwyOTc2NiwyOTc2NywyOTc3MSwyOTc3MywyOTc3NywyOTc3OCwyOTc4MywyOTc4OSwyOTc5NCwyOTc5OCwyOTc5OSwyOTgwMCwyOTgwMywyOTgwNSwyOTgwNiwyOTgwOSwyOTgxMCwyOTgyNCwyOTgyNSwyOTgyOSwyOTgzMCwyOTgzMSwy''@;'; put 'put ''OTgzMywyOTgzOSwyOTg0MCwyOTg0MSwyOTg0MiwyOTg0OCwyOTg0OSwyOTg1MCwyOTg1MiwyOTg1NSwyOTg1NiwyOTg1NywyOTg1OSwyOTg2MiwyOTg2NCwyOTg2NSwyOTg2NiwyOTg2NywyOTg3MCwyOTg3MSwyOTg3MywyOTg3NCwyOTg3NywyOTg4MSwyOTg4MywyOTg4NywyOTg5NiwyOTg5''@;'; put 'put ''NywyOTkwMCwyOTkwNCwyOTkwNywyOTkxMiwyOTkxNCwyOTkxNSwyOTkxOCwyOTkxOSwyOTkyNCwyOTkyOCwyOTkzMCwyOTkzMSwyOTkzNSwyOTk0MCwyOTk0NiwyOTk0NywyOTk0OCwyOTk1MSwyOTk1OCwyOTk3MCwyOTk3NCwyOTk3NSwyOTk4NCwyOTk4NSwyOTk4OCwyOTk5MSwyOTk5Mywy''@;'; put 'put ''OTk5NCwyOTk5OSwzMDAwNiwzMDAwOSwzMDAxMywzMDAxNCwzMDAxNSwzMDAxNiwzMDAxOSwzMDAyMywzMDAyNCwzMDAzMCwzMDAzMiwzMDAzNCwzMDAzOSwzMDA0NiwzMDA0NywzMDA0OSwzMDA2MywzMDA2NSwzMDA3MywzMDA3NCwzMDA3NSwzMDA3NiwzMDA3NywzMDA3OCwzMDA4MSwzMDA4''@;'; put 'put ''NSwzMDA5NiwzMDA5OCwzMDA5OSwzMDEwMSwzMDEwNSwzMDEwOCwzMDExNCwzMDExNiwzMDEzMiwzMDEzOCwzMDE0MywzMDE0NCwzMDE0NSwzMDE0OCwzMDE1MCwzMDE1NiwzMDE1OCwzMDE1OSwzMDE2NywzMDE3MiwzMDE3NSwzMDE3NiwzMDE3NywzMDE4MCwzMDE4MywzMDE4OCwzMDE5MCwz''@;'; put 'put ''MDE5MSwzMDE5MywzMDIwMSwzMDIwOCwzMDIxMCwzMDIxMSwzMDIxMiwzMDIxNSwzMDIxNiwzMDIxOCwzMDIyMCwzMDIyMywzMDIyNiwzMDIyNywzMDIyOSwzMDIzMCwzMDIzMywzMDIzNSwzMDIzNiwzMDIzNywzMDIzOCwzMDI0MywzMDI0NSwzMDI0NiwzMDI0OSwzMDI1MywzMDI1OCwzMDI1''@;'; put 'put ''OSwzMDI2MSwzMDI2NCwzMDI2NSwzMDI2NiwzMDI2OCwzMDI4MiwzMDI3MiwzMDI3MywzMDI3NSwzMDI3NiwzMDI3NywzMDI4MSwzMDI4MywzMDI5MywzMDI5NywzMDMwMywzMDMwOCwzMDMwOSwzMDMxNywzMDMxOCwzMDMxOSwzMDMyMSwzMDMyNCwzMDMzNywzMDM0MSwzMDM0OCwzMDM0OSwz''@;'; put 'put ''MDM1NywzMDM2MywzMDM2NCwzMDM2NSwzMDM2NywzMDM2OCwzMDM3MCwzMDM3MSwzMDM3MiwzMDM3MywzMDM3NCwzMDM3NSwzMDM3NiwzMDM3OCwzMDM4MSwzMDM5NywzMDQwMSwzMDQwNSwzMDQwOSwzMDQxMSwzMDQxMiwzMDQxNCwzMDQyMCwzMDQyNSwzMDQzMiwzMDQzOCwzMDQ0MCwzMDQ0''@;'; put 'put ''NCwzMDQ0OCwzMDQ0OSwzMDQ1NCwzMDQ1NywzMDQ2MCwzMDQ2NCwzMDQ3MCwzMDQ3NCwzMDQ3OCwzMDQ4MiwzMDQ4NCwzMDQ4NSwzMDQ4NywzMDQ4OSwzMDQ5MCwzMDQ5MiwzMDQ5OCwzMDUwNCwzMDUwOSwzMDUxMCwzMDUxMSwzMDUxNiwzMDUxNywzMDUxOCwzMDUyMSwzMDUyNSwzMDUyNiwz''@;'; put 'put ''MDUzMCwzMDUzMywzMDUzNCwzMDUzOCwzMDU0MSwzMDU0MiwzMDU0MywzMDU0NiwzMDU1MCwzMDU1MSwzMDU1NiwzMDU1OCwzMDU1OSwzMDU2MCwzMDU2MiwzMDU2NCwzMDU2NywzMDU3MCwzMDU3MiwzMDU3NiwzMDU3OCwzMDU3OSwzMDU4MCwzMDU4NiwzMDU4OSwzMDU5MiwzMDU5NiwzMDYw''@;'; put 'put ''NCwzMDYwNSwzMDYxMiwzMDYxMywzMDYxNCwzMDYxOCwzMDYyMywzMDYyNiwzMDYzMSwzMDYzNCwzMDYzOCwzMDYzOSwzMDY0MSwzMDY0NSwzMDY1NCwzMDY1OSwzMDY2NSwzMDY3MywzMDY3NCwzMDY3NywzMDY4MSwzMDY4NiwzMDY4NywzMDY4OCwzMDY5MiwzMDY5NCwzMDY5OCwzMDcwMCwz''@;'; put 'put ''MDcwNCwzMDcwNSwzMDcwOCwzMDcxMiwzMDcxNSwzMDcyNSwzMDcyNiwzMDcyOSwzMDczMywzMDczNCwzMDczNywzMDc0OSwzMDc1MywzMDc1NCwzMDc1NSwzMDc2NSwzMDc2NiwzMDc2OCwzMDc3MywzMDc3NSwzMDc4NywzMDc4OCwzMDc5MSwzMDc5MiwzMDc5NiwzMDc5OCwzMDgwMiwzMDgx''@;'; put 'put ''MiwzMDgxNCwzMDgxNiwzMDgxNywzMDgxOSwzMDgyMCwzMDgyNCwzMDgyNiwzMDgzMCwzMDg0MiwzMDg0NiwzMDg1OCwzMDg2MywzMDg2OCwzMDg3MiwzMDg4MSwzMDg3NywzMDg3OCwzMDg3OSwzMDg4NCwzMDg4OCwzMDg5MiwzMDg5MywzMDg5NiwzMDg5NywzMDg5OCwzMDg5OSwzMDkwNywz''@;'; put 'put ''MDkwOSwzMDkxMSwzMDkxOSwzMDkyMCwzMDkyMSwzMDkyNCwzMDkyNiwzMDkzMCwzMDkzMSwzMDkzMywzMDkzNCwzMDk0OCwzMDkzOSwzMDk0MywzMDk0NCwzMDk0NSwzMDk1MCwzMDk1NCwzMDk2MiwzMDk2MywzMDk3NiwzMDk2NiwzMDk2NywzMDk3MCwzMDk3MSwzMDk3NSwzMDk4MiwzMDk4''@;'; put 'put ''OCwzMDk5MiwzMTAwMiwzMTAwNCwzMTAwNiwzMTAwNywzMTAwOCwzMTAxMywzMTAxNSwzMTAxNywzMTAyMSwzMTAyNSwzMTAyOCwzMTAyOSwzMTAzNSwzMTAzNywzMTAzOSwzMTA0NCwzMTA0NSwzMTA0NiwzMTA1MCwzMTA1MSwzMTA1NSwzMTA1NywzMTA2MCwzMTA2NCwzMTA2NywzMTA2OCwz''@;'; put 'put ''MTA3OSwzMTA4MSwzMTA4MywzMTA5MCwzMTA5NywzMTA5OSwzMTEwMCwzMTEwMiwzMTExNSwzMTExNiwzMTEyMSwzMTEyMywzMTEyNCwzMTEyNSwzMTEyNiwzMTEyOCwzMTEzMSwzMTEzMiwzMTEzNywzMTE0NCwzMTE0NSwzMTE0NywzMTE1MSwzMTE1MywzMTE1NiwzMTE2MCwzMTE2MywzMTE3''@;'; put 'put ''MCwzMTE3MiwzMTE3NSwzMTE3NiwzMTE3OCwzMTE4MywzMTE4OCwzMTE5MCwzMTE5NCwzMTE5NywzMTE5OCwzMTIwMCwzMTIwMiwzMTIwNSwzMTIxMCwzMTIxMSwzMTIxMywzMTIxNywzMTIyNCwzMTIyOCwzMTIzNCwzMTIzNSwzMTIzOSwzMTI0MSwzMTI0MiwzMTI0NCwzMTI0OSwzMTI1Mywz''@;'; put 'put ''MTI1OSwzMTI2MiwzMTI2NSwzMTI3MSwzMTI3NSwzMTI3NywzMTI3OSwzMTI4MCwzMTI4NCwzMTI4NSwzMTI4OCwzMTI4OSwzMTI5MCwzMTMwMCwzMTMwMSwzMTMwMywzMTMwNCwzMTMwOCwzMTMxNywzMTMxOCwzMTMyMSwzMTMyNCwzMTMyNSwzMTMyNywzMTMyOCwzMTMzMywzMTMzNSwzMTMz''@;'; put 'put ''OCwzMTM0MSwzMTM0OSwzMTM1MiwzMTM1OCwzMTM2MCwzMTM2MiwzMTM2NSwzMTM2NiwzMTM3MCwzMTM3MSwzMTM3NiwzMTM3NywzMTM4MCwzMTM5MCwzMTM5MiwzMTM5NSwzMTQwNCwzMTQxMSwzMTQxMywzMTQxNywzMTQxOSwzMTQyMCwzMTQzMCwzMTQzMywzMTQzNiwzMTQzOCwzMTQ0MSwz''@;'; put 'put ''MTQ1MSwzMTQ2NCwzMTQ2NSwzMTQ2NywzMTQ2OCwzMTQ3MywzMTQ3NiwzMTQ4MywzMTQ4NSwzMTQ4NiwzMTQ5NSwzMTUwOCwzMTUxOSwzMTUyMywzMTUyNywzMTUyOSwzMTUzMCwzMTUzMSwzMTUzMywzMTUzNCwzMTUzNSwzMTUzNiwzMTUzNywzMTU0MCwzMTU0OSwzMTU1MSwzMTU1MiwzMTU1''@;'; put 'put ''MywzMTU1OSwzMTU2NiwzMTU3MywzMTU4NCwzMTU4OCwzMTU5MCwzMTU5MywzMTU5NCwzMTU5NywzMTU5OSwzMTYwMiwzMTYwMywzMTYwNywzMTYyMCwzMTYyNSwzMTYzMCwzMTYzMiwzMTYzMywzMTYzOCwzMTY0MywzMTY0NiwzMTY0OCwzMTY1MywzMTY2MCwzMTY2MywzMTY2NCwzMTY2Niwz''@;'; put 'put ''MTY2OSwzMTY3MCwzMTY3NCwzMTY3NSwzMTY3NiwzMTY3NywzMTY4MiwzMTY4NSwzMTY4OCwzMTY5MCwzMTcwMCwzMTcwMiwzMTcwMywzMTcwNSwzMTcwNiwzMTcwNywzMTcyMCwzMTcyMiwzMTczMCwzMTczMiwzMTczMywzMTczNiwzMTczNywzMTczOCwzMTc0MCwzMTc0MiwzMTc0NSwzMTc0''@;'; put 'put ''NiwzMTc0NywzMTc0OCwzMTc1MCwzMTc1MywzMTc1NSwzMTc1NiwzMTc1OCwzMTc1OSwzMTc2OSwzMTc3MSwzMTc3NiwzMTc4MSwzMTc4MiwzMTc4NCwzMTc4OCwzMTc5MywzMTc5NSwzMTc5NiwzMTc5OCwzMTgwMSwzMTgwMiwzMTgxNCwzMTgxOCwzMTgyOSwzMTgyNSwzMTgyNiwzMTgyNywz''@;'; put 'put ''MTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTg0MSwzMTg0MywzMTg0NywzMTg0OSwzMTg1MywzMTg1NCwzMTg1NiwzMTg1OCwzMTg2NSwzMTg2OCwzMTg2OSwzMTg3OCwzMTg3OSwzMTg4NywzMTg5MiwzMTkwMiwzMTkwNCwzMTkxMCwzMTkyMCwzMTkyNiwzMTkyNywzMTkz''@;'; put 'put ''MCwzMTkzMSwzMTkzMiwzMTkzNSwzMTk0MCwzMTk0MywzMTk0NCwzMTk0NSwzMTk0OSwzMTk1MSwzMTk1NSwzMTk1NiwzMTk1NywzMTk1OSwzMTk2MSwzMTk2MiwzMTk2NSwzMTk3NCwzMTk3NywzMTk3OSwzMTk4OSwzMjAwMywzMjAwNywzMjAwOCwzMjAwOSwzMjAxNSwzMjAxNywzMjAxOCwz''@;'; put 'put ''MjAxOSwzMjAyMiwzMjAyOSwzMjAzMCwzMjAzNSwzMjAzOCwzMjA0MiwzMjA0NSwzMjA0OSwzMjA2MCwzMjA2MSwzMjA2MiwzMjA2NCwzMjA2NSwzMjA3MSwzMjA3MiwzMjA3NywzMjA4MSwzMjA4MywzMjA4NywzMjA4OSwzMjA5MCwzMjA5MiwzMjA5MywzMjEwMSwzMjEwMywzMjEwNiwzMjEx''@;'; put 'put ''MiwzMjEyMCwzMjEyMiwzMjEyMywzMjEyNywzMjEyOSwzMjEzMCwzMjEzMSwzMjEzMywzMjEzNCwzMjEzNiwzMjEzOSwzMjE0MCwzMjE0MSwzMjE0NSwzMjE1MCwzMjE1MSwzMjE1NywzMjE1OCwzMjE2NiwzMjE2NywzMjE3MCwzMjE3OSwzMjE4MiwzMjE4MywzMjE4NSwzMjE5NCwzMjE5NSwz''@;'; put 'put ''MjE5NiwzMjE5NywzMjE5OCwzMjIwNCwzMjIwNSwzMjIwNiwzMjIxNSwzMjIxNywzMjI1NiwzMjIyNiwzMjIyOSwzMjIzMCwzMjIzNCwzMjIzNSwzMjIzNywzMjI0MSwzMjI0NSwzMjI0NiwzMjI0OSwzMjI1MCwzMjI2NCwzMjI3MiwzMjI3MywzMjI3NywzMjI3OSwzMjI4NCwzMjI4NSwzMjI4''@;'; put 'put ''OCwzMjI5NSwzMjI5NiwzMjMwMCwzMjMwMSwzMjMwMywzMjMwNywzMjMxMCwzMjMxOSwzMjMyNCwzMjMyNSwzMjMyNywzMjMzNCwzMjMzNiwzMjMzOCwzMjM0NCwzMjM1MSwzMjM1MywzMjM1NCwzMjM1NywzMjM2MywzMjM2NiwzMjM2NywzMjM3MSwzMjM3NiwzMjM4MiwzMjM4NSwzMjM5MCwz''@;'; put 'put ''MjM5MSwzMjM5NCwzMjM5NywzMjQwMSwzMjQwNSwzMjQwOCwzMjQxMCwzMjQxMywzMjQxNCwzMjU3MiwzMjU3MSwzMjU3MywzMjU3NCwzMjU3NSwzMjU3OSwzMjU4MCwzMjU4MywzMjU5MSwzMjU5NCwzMjU5NSwzMjYwMywzMjYwNCwzMjYwNSwzMjYwOSwzMjYxMSwzMjYxMiwzMjYxMywzMjYx''@;'; put 'put ''NCwzMjYyMSwzMjYyNSwzMjYzNywzMjYzOCwzMjYzOSwzMjY0MCwzMjY1MSwzMjY1MywzMjY1NSwzMjY1NiwzMjY1NywzMjY2MiwzMjY2MywzMjY2OCwzMjY3MywzMjY3NCwzMjY3OCwzMjY4MiwzMjY4NSwzMjY5MiwzMjcwMCwzMjcwMywzMjcwNCwzMjcwNywzMjcxMiwzMjcxOCwzMjcxOSwz''@;'; put 'put ''MjczMSwzMjczNSwzMjczOSwzMjc0MSwzMjc0NCwzMjc0OCwzMjc1MCwzMjc1MSwzMjc1NCwzMjc2MiwzMjc2NSwzMjc2NiwzMjc2NywzMjc3NSwzMjc3NiwzMjc3OCwzMjc4MSwzMjc4MiwzMjc4MywzMjc4NSwzMjc4NywzMjc4OCwzMjc5MCwzMjc5NywzMjc5OCwzMjc5OSwzMjgwMCwzMjgw''@;'; put 'put ''NCwzMjgwNiwzMjgxMiwzMjgxNCwzMjgxNiwzMjgyMCwzMjgyMSwzMjgyMywzMjgyNSwzMjgyNiwzMjgyOCwzMjgzMCwzMjgzMiwzMjgzNiwzMjg2NCwzMjg2OCwzMjg3MCwzMjg3NywzMjg4MSwzMjg4NSwzMjg5NywzMjkwNCwzMjkxMCwzMjkyNCwzMjkyNiwzMjkzNCwzMjkzNSwzMjkzOSwz''@;'; put 'put ''Mjk1MiwzMjk1MywzMjk2OCwzMjk3MywzMjk3NSwzMjk3OCwzMjk4MCwzMjk4MSwzMjk4MywzMjk4NCwzMjk5MiwzMzAwNSwzMzAwNiwzMzAwOCwzMzAxMCwzMzAxMSwzMzAxNCwzMzAxNywzMzAxOCwzMzAyMiwzMzAyNywzMzAzNSwzMzA0NiwzMzA0NywzMzA0OCwzMzA1MiwzMzA1NCwzMzA1''@;'; put 'put ''NiwzMzA2MCwzMzA2MywzMzA2OCwzMzA3MiwzMzA3NywzMzA4MiwzMzA4NCwzMzA5MywzMzA5NSwzMzA5OCwzMzEwMCwzMzEwNiwzMzExMSwzMzEyMCwzMzEyMSwzMzEyNywzMzEyOCwzMzEyOSwzMzEzMywzMzEzNSwzMzE0MywzMzE1MywzMzE2OCwzMzE1NiwzMzE1NywzMzE1OCwzMzE2Mywz''@;'; put 'put ''MzE2NiwzMzE3NCwzMzE3NiwzMzE3OSwzMzE4MiwzMzE4NiwzMzE5OCwzMzIwMiwzMzIwNCwzMzIxMSwzMzIyNywzMzIxOSwzMzIyMSwzMzIyNiwzMzIzMCwzMzIzMSwzMzIzNywzMzIzOSwzMzI0MywzMzI0NSwzMzI0NiwzMzI0OSwzMzI1MiwzMzI1OSwzMzI2MCwzMzI2NCwzMzI2NSwzMzI2''@;'; put 'put ''NiwzMzI2OSwzMzI3MCwzMzI3MiwzMzI3MywzMzI3NywzMzI3OSwzMzI4MCwzMzI4MywzMzI5NSwzMzI5OSwzMzMwMCwzMzMwNSwzMzMwNiwzMzMwOSwzMzMxMywzMzMxNCwzMzMyMCwzMzMzMCwzMzMzMiwzMzMzOCwzMzM0NywzMzM0OCwzMzM0OSwzMzM1MCwzMzM1NSwzMzM1OCwzMzM1OSwz''@;'; put 'put ''MzM2MSwzMzM2NiwzMzM3MiwzMzM3NiwzMzM3OSwzMzM4MywzMzM4OSwzMzM5NiwzMzQwMywzMzQwNSwzMzQwNywzMzQwOCwzMzQwOSwzMzQxMSwzMzQxMiwzMzQxNSwzMzQxNywzMzQxOCwzMzQyMiwzMzQyNSwzMzQyOCwzMzQzMCwzMzQzMiwzMzQzNCwzMzQzNSwzMzQ0MCwzMzQ0MSwzMzQ0''@;'; put 'put ''MywzMzQ0NCwzMzQ0NywzMzQ0OCwzMzQ0OSwzMzQ1MCwzMzQ1NCwzMzQ1NiwzMzQ1OCwzMzQ2MCwzMzQ2MywzMzQ2NiwzMzQ2OCwzMzQ3MCwzMzQ3MSwzMzQ3OCwzMzQ4OCwzMzQ5MywzMzQ5OCwzMzUwNCwzMzUwNiwzMzUwOCwzMzUxMiwzMzUxNCwzMzUxNywzMzUxOSwzMzUyNiwzMzUyNywz''@;'; put 'put ''MzUzMywzMzUzNCwzMzUzNiwzMzUzNywzMzU0MywzMzU0NCwzMzU0NiwzMzU0NywzMzYyMCwzMzU2MywzMzU2NSwzMzU2NiwzMzU2NywzMzU2OSwzMzU3MCwzMzU4MCwzMzU4MSwzMzU4MiwzMzU4NCwzMzU4NywzMzU5MSwzMzU5NCwzMzU5NiwzMzU5NywzMzYwMiwzMzYwMywzMzYwNCwzMzYw''@;'; put 'put ''NywzMzYxMywzMzYxNCwzMzYxNywzMzYyMSwzMzYyMiwzMzYyMywzMzY0OCwzMzY1NiwzMzY2MSwzMzY2MywzMzY2NCwzMzY2NiwzMzY2OCwzMzY3MCwzMzY3NywzMzY4MiwzMzY4NCwzMzY4NSwzMzY4OCwzMzY4OSwzMzY5MSwzMzY5MiwzMzY5MywzMzcwMiwzMzcwMywzMzcwNSwzMzcwOCwz''@;'; put 'put ''MzcyNiwzMzcyNywzMzcyOCwzMzczNSwzMzczNywzMzc0MywzMzc0NCwzMzc0NSwzMzc0OCwzMzc1NywzMzYxOSwzMzc2OCwzMzc3MCwzMzc4MiwzMzc4NCwzMzc4NSwzMzc4OCwzMzc5MywzMzc5OCwzMzgwMiwzMzgwNywzMzgwOSwzMzgxMywzMzgxNywzMzcwOSwzMzgzOSwzMzg0OSwzMzg2''@;'; put 'put ''MSwzMzg2MywzMzg2NCwzMzg2NiwzMzg2OSwzMzg3MSwzMzg3MywzMzg3NCwzMzg3OCwzMzg4MCwzMzg4MSwzMzg4MiwzMzg4NCwzMzg4OCwzMzg5MiwzMzg5MywzMzg5NSwzMzg5OCwzMzkwNCwzMzkwNywzMzkwOCwzMzkxMCwzMzkxMiwzMzkxNiwzMzkxNywzMzkyMSwzMzkyNSwzMzkzOCwz''@;'; put 'put ''MzkzOSwzMzk0MSwzMzk1MCwzMzk1OCwzMzk2MCwzMzk2MSwzMzk2MiwzMzk2NywzMzk2OSwzMzk3MiwzMzk3OCwzMzk4MSwzMzk4MiwzMzk4NCwzMzk4NiwzMzk5MSwzMzk5MiwzMzk5NiwzMzk5OSwzNDAwMywzNDAxMiwzNDAyMywzNDAyNiwzNDAzMSwzNDAzMiwzNDAzMywzNDAzNCwzNDAz''@;'; put 'put ''OSwzNDA5OCwzNDA0MiwzNDA0MywzNDA0NSwzNDA1MCwzNDA1MSwzNDA1NSwzNDA2MCwzNDA2MiwzNDA2NCwzNDA3NiwzNDA3OCwzNDA4MiwzNDA4MywzNDA4NCwzNDA4NSwzNDA4NywzNDA5MCwzNDA5MSwzNDA5NSwzNDA5OSwzNDEwMCwzNDEwMiwzNDExMSwzNDExOCwzNDEyNywzNDEyOCwz''@;'; put 'put ''NDEyOSwzNDEzMCwzNDEzMSwzNDEzNCwzNDEzNywzNDE0MCwzNDE0MSwzNDE0MiwzNDE0MywzNDE0NCwzNDE0NSwzNDE0NiwzNDE0OCwzNDE1NSwzNDE1OSwzNDE2OSwzNDE3MCwzNDE3MSwzNDE3MywzNDE3NSwzNDE3NywzNDE4MSwzNDE4MiwzNDE4NSwzNDE4NywzNDE4OCwzNDE5MSwzNDE5''@;'; put 'put ''NSwzNDIwMCwzNDIwNSwzNDIwNywzNDIwOCwzNDIxMCwzNDIxMywzNDIxNSwzNDIyOCwzNDIzMCwzNDIzMSwzNDIzMiwzNDIzNiwzNDIzNywzNDIzOCwzNDIzOSwzNDI0MiwzNDI0NywzNDI1MCwzNDI1MSwzNDI1NCwzNDIyMSwzNDI2NCwzNDI2NiwzNDI3MSwzNDI3MiwzNDI3OCwzNDI4MCwz''@;'; put 'put ''NDI4NSwzNDI5MSwzNDI5NCwzNDMwMCwzNDMwMywzNDMwNCwzNDMwOCwzNDMwOSwzNDMxNywzNDMxOCwzNDMyMCwzNDMyMSwzNDMyMiwzNDMyOCwzNDMyOSwzNDMzMSwzNDMzNCwzNDMzNywzNDM0MywzNDM0NSwzNDM1OCwzNDM2MCwzNDM2MiwzNDM2NCwzNDM2NSwzNDM2OCwzNDM3MCwzNDM3''@;'; put 'put ''NCwzNDM4NiwzNDM4NywzNDM5MCwzNDM5MSwzNDM5MiwzNDM5MywzNDM5NywzNDQwMCwzNDQwMSwzNDQwMiwzNDQwMywzNDQwNCwzNDQwOSwzNDQxMiwzNDQxNSwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNiwzNDQ0NSwzNDQ0OSwzNDQ1NCwzNDQ1NiwzNDQ1OCwzNDQ2MCwzNDQ2NSwzNDQ3MCwz''@;'; put 'put ''NDQ3MSwzNDQ3MiwzNDQ3NywzNDQ4MSwzNDQ4MywzNDQ4NCwzNDQ4NSwzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5NSwzNDQ5NiwzNDQ5NywzNDQ5OSwzNDUwMSwzNDUxMywzNDUxNCwzNDUxNywzNDUxOSwzNDUyMiwzNDUyNCwzNDUyOCwzNDUzMSwzNDUzMywzNDUzNSwzNDQ0MCwzNDU1NCwzNDU1''@;'; put 'put ''NiwzNDU1NywzNDU2NCwzNDU2NSwzNDU2NywzNDU3MSwzNDU3NCwzNDU3NSwzNDU3NiwzNDU3OSwzNDU4MCwzNDU4NSwzNDU5MCwzNDU5MSwzNDU5MywzNDU5NSwzNDYwMCwzNDYwNiwzNDYwNywzNDYwOSwzNDYxMCwzNDYxNywzNDYxOCwzNDYyMCwzNDYyMSwzNDYyMiwzNDYyNCwzNDYyNywz''@;'; put 'put ''NDYyOSwzNDYzNywzNDY0OCwzNDY1MywzNDY1NywzNDY2MCwzNDY2MSwzNDY3MSwzNDY3MywzNDY3NCwzNDY4MywzNDY5MSwzNDY5MiwzNDY5MywzNDY5NCwzNDY5NSwzNDY5NiwzNDY5NywzNDY5OSwzNDcwMCwzNDcwNCwzNDcwNywzNDcwOSwzNDcxMSwzNDcxMiwzNDcxMywzNDcxOCwzNDcy''@;'; put 'put ''MCwzNDcyMywzNDcyNywzNDczMiwzNDczMywzNDczNCwzNDczNywzNDc0MSwzNDc1MCwzNDc1MSwzNDc1MywzNDc2MCwzNDc2MSwzNDc2MiwzNDc2NiwzNDc3MywzNDc3NCwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MywzNDc4NiwzNDc4NywzNDc4OCwzNDc5NCwzNDc5NSwzNDc5NywzNDgwMSwz''@;'; put 'put ''NDgwMywzNDgwOCwzNDgxMCwzNDgxNSwzNDgxNywzNDgxOSwzNDgyMiwzNDgyNSwzNDgyNiwzNDgyNywzNDgzMiwzNDg0MSwzNDgzNCwzNDgzNSwzNDgzNiwzNDg0MCwzNDg0MiwzNDg0MywzNDg0NCwzNDg0NiwzNDg0NywzNDg1NiwzNDg2MSwzNDg2MiwzNDg2NCwzNDg2NiwzNDg2OSwzNDg3''@;'; put 'put ''NCwzNDg3NiwzNDg4MSwzNDg4MywzNDg4NSwzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5NCwzNDg5NywzNDkwMSwzNDkwMiwzNDkwNCwzNDkwNiwzNDkwOCwzNDkxMSwzNDkxMiwzNDkxNiwzNDkyMSwzNDkyOSwzNDkzNywzNDkzOSwzNDk0NCwzNDk2OCwzNDk3MCwzNDk3MSwzNDk3Miwz''@;'; put 'put ''NDk3NSwzNDk3NiwzNDk4NCwzNDk4NiwzNTAwMiwzNTAwNSwzNTAwNiwzNTAwOCwzNTAxOCwzNTAxOSwzNTAyMCwzNTAyMSwzNTAyMiwzNTAyNSwzNTAyNiwzNTAyNywzNTAzNSwzNTAzOCwzNTA0NywzNTA1NSwzNTA1NiwzNTA1NywzNTA2MSwzNTA2MywzNTA3MywzNTA3OCwzNTA4NSwzNTA4''@;'; put 'put ''NiwzNTA4NywzNTA5MywzNTA5NCwzNTA5NiwzNTA5NywzNTA5OCwzNTEwMCwzNTEwNCwzNTExMCwzNTExMSwzNTExMiwzNTEyMCwzNTEyMSwzNTEyMiwzNTEyNSwzNTEyOSwzNTEzMCwzNTEzNCwzNTEzNiwzNTEzOCwzNTE0MSwzNTE0MiwzNTE0NSwzNTE1MSwzNTE1NCwzNTE1OSwzNTE2Miwz''@;'; put 'put ''NTE2MywzNTE2NCwzNTE2OSwzNTE3MCwzNTE3MSwzNTE3OSwzNTE4MiwzNTE4NCwzNTE4NywzNTE4OSwzNTE5NCwzNTE5NSwzNTE5NiwzNTE5NywzNTIwOSwzNTIxMywzNTIxNiwzNTIyMCwzNTIyMSwzNTIyNywzNTIyOCwzNTIzMSwzNTIzMiwzNTIzNywzNTI0OCwzNTI1MiwzNTI1MywzNTI1''@;'; put 'put ''NCwzNTI1NSwzNTI2MCwzNTI4NCwzNTI4NSwzNTI4NiwzNTI4NywzNTI4OCwzNTMwMSwzNTMwNSwzNTMwNywzNTMwOSwzNTMxMywzNTMxNSwzNTMxOCwzNTMyMSwzNTMyNSwzNTMyNywzNTMzMiwzNTMzMywzNTMzNSwzNTM0MywzNTM0NSwzNTM0NiwzNTM0OCwzNTM0OSwzNTM1OCwzNTM2MCwz''@;'; put 'put ''NTM2MiwzNTM2NCwzNTM2NiwzNTM3MSwzNTM3MiwzNTM3NSwzNTM4MSwzNTM4MywzNTM4OSwzNTM5MCwzNTM5MiwzNTM5NSwzNTM5NywzNTM5OSwzNTQwMSwzNTQwNSwzNTQwNiwzNTQxMSwzNTQxNCwzNTQxNSwzNTQxNiwzNTQyMCwzNTQyMSwzNTQyNSwzNTQyOSwzNTQzMSwzNTQ0NSwzNTQ0''@;'; put 'put ''NiwzNTQ0NywzNTQ0OSwzNTQ1MCwzNTQ1MSwzNTQ1NCwzNTQ1NSwzNTQ1NiwzNTQ1OSwzNTQ2MiwzNTQ2NywzNTQ3MSwzNTQ3MiwzNTQ3NCwzNTQ3OCwzNTQ3OSwzNTQ4MSwzNTQ4NywzNTQ5NSwzNTQ5NywzNTUwMiwzNTUwMywzNTUwNywzNTUxMCwzNTUxMSwzNTUxNSwzNTUxOCwzNTUyMywz''@;'; put 'put ''NTUyNiwzNTUyOCwzNTUyOSwzNTUzMCwzNTUzNywzNTUzOSwzNTU0MCwzNTU0MSwzNTU0MywzNTU0OSwzNTU1MSwzNTU2NCwzNTU2OCwzNTU3MiwzNTU3MywzNTU3NCwzNTU4MCwzNTU4MywzNTU4OSwzNTU5MCwzNTU5NSwzNTYwMSwzNTYxMiwzNTYxNCwzNTYxNSwzNTU5NCwzNTYyOSwzNTYz''@;'; put 'put ''MiwzNTYzOSwzNTY0NCwzNTY1MCwzNTY1MSwzNTY1MiwzNTY1MywzNTY1NCwzNTY1NiwzNTY2NiwzNTY2NywzNTY2OCwzNTY3MywzNTY2MSwzNTY3OCwzNTY4MywzNTY5MywzNTcwMiwzNTcwNCwzNTcwNSwzNTcwOCwzNTcxMCwzNTcxMywzNTcxNiwzNTcxNywzNTcyMywzNTcyNSwzNTcyNywz''@;'; put 'put ''NTczMiwzNTczMywzNTc0MCwzNTc0MiwzNTc0MywzNTg5NiwzNTg5NywzNTkwMSwzNTkwMiwzNTkwOSwzNTkxMSwzNTkxMywzNTkxNSwzNTkxOSwzNTkyMSwzNTkyMywzNTkyNCwzNTkyNywzNTkyOCwzNTkzMSwzNTkzMywzNTkyOSwzNTkzOSwzNTk0MCwzNTk0MiwzNTk0NCwzNTk0NSwzNTk0''@;'; put 'put ''OSwzNTk1NSwzNTk1NywzNTk1OCwzNTk2MywzNTk2NiwzNTk3NCwzNTk3NSwzNTk3OSwzNTk4NCwzNTk4NiwzNTk4NywzNTk5MywzNTk5NSwzNTk5NiwzNjAwNCwzNjAyNSwzNjAyNiwzNjAzNywzNjAzOCwzNjA0MSwzNjA0MywzNjA0NywzNjA1NCwzNjA1MywzNjA1NywzNjA2MSwzNjA2NSwz''@;'; put 'put ''NjA3MiwzNjA3NiwzNjA3OSwzNjA4MCwzNjA4MiwzNjA4NSwzNjA4NywzNjA4OCwzNjA5NCwzNjA5NSwzNjA5NywzNjA5OSwzNjEwNSwzNjExNCwzNjExOSwzNjEyMywzNjE5NywzNjIwMSwzNjIwNCwzNjIwNiwzNjIyMywzNjIyNiwzNjIyOCwzNjIzMiwzNjIzNywzNjI0MCwzNjI0MSwzNjI0''@;'; put 'put ''NSwzNjI1NCwzNjI1NSwzNjI1NiwzNjI2MiwzNjI2NywzNjI2OCwzNjI3MSwzNjI3NCwzNjI3NywzNjI3OSwzNjI4MSwzNjI4MywzNjI4OCwzNjI5MywzNjI5NCwzNjI5NSwzNjI5NiwzNjI5OCwzNjMwMiwzNjMwNSwzNjMwOCwzNjMwOSwzNjMxMSwzNjMxMywzNjMyNCwzNjMyNSwzNjMyNywz''@;'; put 'put ''NjMzMiwzNjMzNiwzNjI4NCwzNjMzNywzNjMzOCwzNjM0MCwzNjM0OSwzNjM1MywzNjM1NiwzNjM1NywzNjM1OCwzNjM2MywzNjM2OSwzNjM3MiwzNjM3NCwzNjM4NCwzNjM4NSwzNjM4NiwzNjM4NywzNjM5MCwzNjM5MSwzNjQwMSwzNjQwMywzNjQwNiwzNjQwNywzNjQwOCwzNjQwOSwzNjQx''@;'; put 'put ''MywzNjQxNiwzNjQxNywzNjQyNywzNjQyOSwzNjQzMCwzNjQzMSwzNjQzNiwzNjQ0MywzNjQ0NCwzNjQ0NSwzNjQ0NiwzNjQ0OSwzNjQ1MCwzNjQ1NywzNjQ2MCwzNjQ2MSwzNjQ2MywzNjQ2NCwzNjQ2NSwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ4MiwzNjQ4MywzNjQ4OSwzNjQ5NiwzNjQ5OCwz''@;'; put 'put ''NjUwMSwzNjUwNiwzNjUwNywzNjUwOSwzNjUxMCwzNjUxNCwzNjUxOSwzNjUyMSwzNjUyNSwzNjUyNiwzNjUzMSwzNjUzMywzNjUzOCwzNjUzOSwzNjU0NCwzNjU0NSwzNjU0NywzNjU0OCwzNjU1MSwzNjU1OSwzNjU2MSwzNjU2NCwzNjU3MiwzNjU4NCwzNjU5MCwzNjU5MiwzNjU5MywzNjU5''@;'; put 'put ''OSwzNjYwMSwzNjYwMiwzNjU4OSwzNjYwOCwzNjYxMCwzNjYxNSwzNjYxNiwzNjYyMywzNjYyNCwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzOCwzNjY0MCwzNjY0MSwzNjY0MywzNjY0NSwzNjY0NywzNjY0OCwzNjY1MiwzNjY1MywzNjY1NCwzNjY2MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2Niwz''@;'; put 'put ''NjY3MiwzNjY3MywzNjY3NSwzNjY3OSwzNjY4NywzNjY4OSwzNjY5MCwzNjY5MSwzNjY5MiwzNjY5MywzNjY5NiwzNjcwMSwzNjcwMiwzNjcwOSwzNjc2NSwzNjc2OCwzNjc2OSwzNjc3MiwzNjc3MywzNjc3NCwzNjc4OSwzNjc5MCwzNjc5MiwzNjc5OCwzNjgwMCwzNjgwMSwzNjgwNiwzNjgx''@;'; put 'put ''MCwzNjgxMSwzNjgxMywzNjgxNiwzNjgxOCwzNjgxOSwzNjgyMSwzNjgzMiwzNjgzNSwzNjgzNiwzNjg0MCwzNjg0NiwzNjg0OSwzNjg1MywzNjg1NCwzNjg1OSwzNjg2MiwzNjg2NiwzNjg2OCwzNjg3MiwzNjg3NiwzNjg4OCwzNjg5MSwzNjkwNCwzNjkwNSwzNjkxMSwzNjkwNiwzNjkwOCwz''@;'; put 'put ''NjkwOSwzNjkxNSwzNjkxNiwzNjkxOSwzNjkyNywzNjkzMSwzNjkzMiwzNjk0MCwzNjk1NSwzNjk1NywzNjk2MiwzNjk2NiwzNjk2NywzNjk3MiwzNjk3NiwzNjk4MCwzNjk4NSwzNjk5NywzN2UzLDM3MDAzLDM3MDA0LDM3MDA2LDM3MDA4LDM3MDEzLDM3MDE1LDM3MDE2LDM3MDE3LDM3MDE5''@;'; put 'put ''LDM3MDI0LDM3MDI1LDM3MDI2LDM3MDI5LDM3MDQwLDM3MDQyLDM3MDQzLDM3MDQ0LDM3MDQ2LDM3MDUzLDM3MDY4LDM3MDU0LDM3MDU5LDM3MDYwLDM3MDYxLDM3MDYzLDM3MDY0LDM3MDc3LDM3MDc5LDM3MDgwLDM3MDgxLDM3MDg0LDM3MDg1LDM3MDg3LDM3MDkzLDM3MDc0LDM3MTEwLDM3''@;'; put 'put ''MDk5LDM3MTAzLDM3MTA0LDM3MTA4LDM3MTE4LDM3MTE5LDM3MTIwLDM3MTI0LDM3MTI1LDM3MTI2LDM3MTI4LDM3MTMzLDM3MTM2LDM3MTQwLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ4LDM3MTUwLDM3MTUyLDM3MTU3LDM3MTU0LDM3MTU1LDM3MTU5LDM3MTYxLDM3MTY2LDM3MTY3''@;'; put 'put ''LDM3MTY5LDM3MTcyLDM3MTc0LDM3MTc1LDM3MTc3LDM3MTc4LDM3MTgwLDM3MTgxLDM3MTg3LDM3MTkxLDM3MTkyLDM3MTk5LDM3MjAzLDM3MjA3LDM3MjA5LDM3MjEwLDM3MjExLDM3MjE3LDM3MjIwLDM3MjIzLDM3MjI5LDM3MjM2LDM3MjQxLDM3MjQyLDM3MjQzLDM3MjQ5LDM3MjUxLDM3''@;'; put 'put ''MjUzLDM3MjU0LDM3MjU4LDM3MjYyLDM3MjY1LDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcyLDM3Mjc4LDM3MjgxLDM3Mjg2LDM3Mjg4LDM3MjkyLDM3MjkzLDM3Mjk0LDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzA3LDM3MzA4LDM3MzA5LDM3MzExLDM3MzE0LDM3MzE1LDM3MzE3''@;'; put 'put ''LDM3MzMxLDM3MzMyLDM3MzM1LDM3MzM3LDM3MzM4LDM3MzQyLDM3MzQ4LDM3MzQ5LDM3MzUzLDM3MzU0LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzY3LDM3MzY5LDM3MzcxLDM3MzczLDM3Mzc2LDM3Mzc3LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg1LDM3''@;'; put 'put ''Mzg2LDM3Mzg4LDM3MzkyLDM3Mzk0LDM3Mzk1LDM3Mzk4LDM3NDAwLDM3NDA0LDM3NDA1LDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE2LDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI3LDM3NDI5LDM3NDMwLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM2LDM3NDM4LDM3NDQwLDM3NDQyLDM3NDQz''@;'; put 'put ''LDM3NDQ2LDM3NDQ3LDM3NDUwLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU3LDM3NDY0LDM3NDY1LDM3NDY4LDM3NDY5LDM3NDcyLDM3NDczLDM3NDc3LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDg2LDM3NDg3LDM3NDg4LDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk5LDM3NTAwLDM3''@;'; put 'put ''NTAxLDM3NTAzLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE3LDM3NTE4LDM3NTIyLDM3NTI3LDM3NTI5LDM3NTM1LDM3NTM2LDM3NTQwLDM3NTQxLDM3NTQzLDM3NTQ0LDM3NTQ3LDM3NTUxLDM3NTU0LDM3NTU4LDM3NTYwLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY3LDM3NTY4LDM3NTY5''@;'; put 'put ''LDM3NTcwLDM3NTcxLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc2LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTg0LDM3NTg3LDM3NTg5LDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk2LDM3NTk3LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAzLDM3NjA1LDM3NjA3LDM3NjA4LDM3NjEyLDM3NjE0LDM3''@;'; put 'put ''NjE2LDM3NjI1LDM3NjI3LDM3NjMxLDM3NjMyLDM3NjM0LDM3NjQwLDM3NjQ1LDM3NjQ5LDM3NjUyLDM3NjUzLDM3NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY1LDM3NjY4LDM3NjY5LDM3NjcxLDM3NjczLDM3Njc0LDM3NjgzLDM3Njg0LDM3Njg2LDM3Njg3LDM3NzAzLDM3NzA0LDM3NzA1''@;'; put 'put ''LDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE3LDM3NzE5LDM3NzIwLDM3NzIyLDM3NzI2LDM3NzMyLDM3NzMzLDM3NzM1LDM3NzM3LDM3NzM4LDM3NzQxLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ3LDM3NzQ4LDM3NzUwLDM3NzU0LDM3NzU3LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzY4LDM3''@;'; put 'put ''NzcwLDM3NzcxLDM3NzczLDM3Nzc1LDM3Nzc4LDM3NzgxLDM3Nzg0LDM3Nzg3LDM3NzkwLDM3NzkzLDM3Nzk1LDM3Nzk2LDM3Nzk4LDM3ODAwLDM3ODAzLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE4LDM3ODAxLDM3ODI1LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMzLDM3ODM0LDM3ODM1''@;'; put 'put ''LDM3ODM2LDM3ODM3LDM3ODQzLDM3ODQ5LDM3ODUyLDM3ODU0LDM3ODU1LDM3ODU4LDM3ODYyLDM3ODYzLDM3ODgxLDM3ODc5LDM3ODgwLDM3ODgyLDM3ODgzLDM3ODg1LDM3ODg5LDM3ODkwLDM3ODkyLDM3ODk2LDM3ODk3LDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA5LDM3OTEwLDM3OTExLDM3''@;'; put 'put ''OTE5LDM3OTM0LDM3OTM1LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQ3LDM3OTUxLDM3OTQ5LDM3OTU1LDM3OTU3LDM3OTYwLDM3OTYyLDM3OTY0LDM3OTczLDM3OTc3LDM3OTgwLDM3OTgzLDM3OTg1LDM3OTg3LDM3OTkyLDM3OTk1LDM3OTk3LDM3OTk4LDM3OTk5LDM4MDAxLDM4MDAy''@;'; put 'put ''LDM4MDIwLDM4MDE5LDM4MjY0LDM4MjY1LDM4MjcwLDM4Mjc2LDM4MjgwLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA1LDM4MzEwLDM4MzEzLDM4MzE1LDM4MzE2LDM4MzI0LDM4MzI2LDM4MzMwLDM4MzMzLDM4MzM1LDM4MzQyLDM4MzQ0LDM4MzQ1LDM4MzQ3LDM4''@;'; put 'put ''MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzYxLDM4MzYyLDM4MzY1LDM4MzY2LDM4MzY3LDM4MzY4LDM4MzcyLDM4Mzc0LDM4NDI5LDM4NDMwLDM4NDM0LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDQ0LDM4NDQ5LDM4NDUxLDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYwLDM4NDYxLDM4NDY1''@;'; put 'put ''LDM4NDgyLDM4NDg0LDM4NDg2LDM4NDg3LDM4NDg4LDM4NDk3LDM4NTEwLDM4NTE2LDM4NTIzLDM4NTI0LDM4NTI2LDM4NTI3LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM3LDM4NTQ1LDM4NTUwLDM4NTU0LDM4NTU3LDM4NTU5LDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY5LDM4NTc0LDM4''@;'; put 'put ''NTc1LDM4NTc5LDM4NTg2LDM4NjAyLDM4NjEwLDIzOTg2LDM4NjE2LDM4NjE4LDM4NjIxLDM4NjIyLDM4NjIzLDM4NjMzLDM4NjM5LDM4NjQxLDM4NjUwLDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY1LDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg5LDM4NjkwLDM4NjkxLDM4Njk2LDM4NzA1LDM4NzA3''@;'; put 'put ''LDM4NzIxLDM4NzIzLDM4NzMwLDM4NzM0LDM4NzM1LDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2LDM4NzQ3LDM4NzU1LDM4NzU5LDM4NzYyLDM4NzY2LDM4NzcxLDM4Nzc0LDM4Nzc1LDM4Nzc2LDM4Nzc5LDM4NzgxLDM4NzgzLDM4Nzg0LDM4NzkzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4''@;'; put 'put ''ODEwLDM4ODE0LDM4ODE1LDM4ODE4LDM4ODI4LDM4ODMwLDM4ODMzLDM4ODM0LDM4ODM3LDM4ODM4LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQ0LDM4ODQ2LDM4ODQ3LDM4ODQ5LDM4ODUyLDM4ODUzLDM4ODU1LDM4ODU3LDM4ODU4LDM4ODYwLDM4ODYxLDM4ODYyLDM4ODY0LDM4ODY1LDM4ODY4''@;'; put 'put ''LDM4ODcxLDM4ODcyLDM4ODczLDM4ODc3LDM4ODc4LDM4ODgwLDM4ODc1LDM4ODgxLDM4ODg0LDM4ODk1LDM4ODk3LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA2LDM4OTE5LDM4OTIyLDM4OTM3LDM4OTI1LDM4OTI2LDM4OTMyLDM4OTM0LDM4OTQwLDM4OTQyLDM4OTQ0LDM4OTQ3LDM4OTUwLDM4''@;'; put 'put ''OTU1LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYyLDM4OTYzLDM4OTY1LDM4OTQ5LDM4OTc0LDM4OTgwLDM4OTgzLDM4OTg2LDM4OTkzLDM4OTk0LDM4OTk1LDM4OTk4LDM4OTk5LDM5MDAxLDM5MDAyLDM5MDEwLDM5MDExLDM5MDEzLDM5MDE0LDM5MDE4LDM5MDIwLDM5MDgzLDM5MDg1LDM5MDg2''@;'; put 'put ''LDM5MDg4LDM5MDkyLDM5MDk1LDM5MDk2LDM5MDk4LDM5MDk5LDM5MTAzLDM5MTA2LDM5MTA5LDM5MTEyLDM5MTE2LDM5MTM3LDM5MTM5LDM5MTQxLDM5MTQyLDM5MTQzLDM5MTQ2LDM5MTU1LDM5MTU4LDM5MTcwLDM5MTc1LDM5MTc2LDM5MTg1LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTk0LDM5''@;'; put 'put ''MTk1LDM5MTk2LDM5MTk5LDM5MjAyLDM5MjA2LDM5MjA3LDM5MjExLDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjMyLDM5MjMzLDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQ1LDM5MjQ2LDM5MjUyLDM5MjU2LDM5MjU3LDM5MjU5LDM5MjYw''@;'; put 'put ''LDM5MjYyLDM5MjYzLDM5MjY0LDM5MzIzLDM5MzI1LDM5MzI3LDM5MzM0LDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ5LDM5MzUzLDM5MzU0LDM5MzU3LDM5MzU5LDM5MzYzLDM5MzY5LDM5Mzc5LDM5MzgwLDM5Mzg1LDM5Mzg2LDM5Mzg4LDM5MzkwLDM5Mzk5LDM5NDAyLDM5NDAzLDM5NDA0LDM5''@;'; put 'put ''NDA4LDM5NDEyLDM5NDEzLDM5NDE3LDM5NDIxLDM5NDIyLDM5NDI2LDM5NDI3LDM5NDI4LDM5NDM1LDM5NDM2LDM5NDQwLDM5NDQxLDM5NDQ2LDM5NDU0LDM5NDU2LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYzLDM5NDY5LDM5NDcwLDM5NDc1LDM5NDc3LDM5NDc4LDM5NDgwLDM5NDk1LDM5NDg5''@;'; put 'put ''LDM5NDkyLDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAyLDM5NTA1LDM5NTA4LDM5NTEwLDM5NTE3LDM5NTk0LDM5NTk2LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjA0LDM5NjA1LDM5NjA2LDM5NjA5LDM5NjExLDM5NjE0LDM5NjE1LDM5NjE3LDM5NjE5LDM5NjIyLDM5NjI0LDM5NjMwLDM5NjMyLDM5''@;'; put 'put ''NjM0LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQzLDM5NjQ0LDM5NjQ4LDM5NjUyLDM5NjUzLDM5NjU1LDM5NjU3LDM5NjYwLDM5NjY2LDM5NjY3LDM5NjY5LDM5NjczLDM5Njc0LDM5Njc3LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5NjgzLDM5Njg0LDM5Njg1LDM5Njg4LDM5Njg5LDM5Njkx''@;'; put 'put ''LDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk4LDM5NzAyLDM5NzA1LDM5NzA3LDM5NzA4LDM5NzEyLDM5NzE4LDM5NzIzLDM5NzI1LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM1LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzUyLDM5NzU1LDM5NzU2LDM5NzY1LDM5NzY2LDM5NzY3LDM5NzcxLDM5''@;'; put 'put ''Nzc0LDM5Nzc3LDM5Nzc5LDM5NzgxLDM5NzgyLDM5Nzg0LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5Nzk1LDM5Nzk3LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODA3LDM5ODA4LDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIxLDM5ODIzLDM5ODI0''@;'; put 'put ''LDM5ODI4LDM5ODM0LDM5ODM3LDM5ODM4LDM5ODQ2LDM5ODQ3LDM5ODQ5LDM5ODUyLDM5ODU2LDM5ODU3LDM5ODU4LDM5ODYzLDM5ODY0LDM5ODY3LDM5ODY4LDM5ODcwLDM5ODcxLDM5ODczLDM5ODc5LDM5ODgwLDM5ODg2LDM5ODg4LDM5ODk1LDM5ODk2LDM5OTAxLDM5OTAzLDM5OTA5LDM5''@;'; put 'put ''OTExLDM5OTE0LDM5OTE1LDM5OTE5LDM5OTIzLDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMzLDM5OTM1LDM5OTM2LDM5OTM4LDM5OTQ3LDM5OTUxLDM5OTUzLDM5OTU4LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTY0LDM5OTY2LDM5OTcwLDM5OTcxLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3''@;'; put 'put ''LDM5OTc4LDM5OTg1LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTk3LDQwMDAxLDQwMDAzLDQwMDA0LDQwMDA1LDQwMDA5LDQwMDEwLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE5LDQwMDIwLDQwMDIyLDQwMDI0LDQwMDI3LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDM1LDQwMDQxLDQwMDQyLDQwMDI4LDQw''@;'; put 'put ''MDQzLDQwMDQwLDQwMDQ2LDQwMDQ4LDQwMDUwLDQwMDUzLDQwMDU1LDQwMDU5LDQwMTY2LDQwMTc4LDQwMTgzLDQwMTg1LDQwMjAzLDQwMTk0LDQwMjA5LDQwMjE1LDQwMjE2LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjM5LDQwMjQwLDQwMjQyLDQwMjQzLDQwMjQ0LDQwMjUwLDQwMjUyLDQwMjYx''@;'; put 'put ''LDQwMjUzLDQwMjU4LDQwMjU5LDQwMjYzLDQwMjY2LDQwMjc1LDQwMjc2LDQwMjg3LDQwMjkxLDQwMjkwLDQwMjkzLDQwMjk3LDQwMjk4LDQwMjk5LDQwMzA0LDQwMzEwLDQwMzExLDQwMzE1LDQwMzE2LDQwMzE4LDQwMzIzLDQwMzI0LDQwMzI2LDQwMzMwLDQwMzMzLDQwMzM0LDQwMzM4LDQw''@;'; put 'put ''MzM5LDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzUzLDQwMzYyLDQwMzY0LDQwMzY2LDQwMzY5LDQwMzczLDQwMzc3LDQwMzgwLDQwMzgzLDQwMzg3LDQwMzkxLDQwMzkzLDQwMzk0LDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDEwLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDIxLDQwNDIz''@;'; put 'put ''LDQwNDI1LDQwNDI3LDQwNDMwLDQwNDMyLDQwNDM1LDQwNDM2LDQwNDQ2LDQwNDU4LDQwNDUwLDQwNDU1LDQwNDYyLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY5LDQwNDcwLDQwNDczLDQwNDc2LDQwNDc3LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTc2LDQwNTc4LDQwNTc5LDQwNTgwLDQwNTgxLDQw''@;'; put 'put ''NTgzLDQwNTkwLDQwNTkxLDQwNTk4LDQwNjAwLDQwNjAzLDQwNjA2LDQwNjEyLDQwNjE2LDQwNjIwLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI3LDQwNjI4LDQwNjI5LDQwNjQ2LDQwNjQ4LDQwNjUxLDQwNjYxLDQwNjcxLDQwNjc2LDQwNjc5LDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5''@;'; put 'put ''LDQwNjkwLDQwNjkzLDQwNjk2LDQwNzAzLDQwNzA2LDQwNzA3LDQwNzEzLDQwNzE5LDQwNzIwLDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI2LDQwNzI3LDQwNzI5LDQwNzMwLDQwNzMxLDQwNzM1LDQwNzM4LDQwNzQyLDQwNzQ2LDQwNzQ3LDQwNzUxLDQwNzUzLDQwNzU0LDQwNzU2LDQwNzU5LDQw''@;'; put 'put ''NzYxLDQwNzYyLDQwNzY0LDQwNzY1LDQwNzY3LDQwNzY5LDQwNzcxLDQwNzcyLDQwNzczLDQwNzc0LDQwNzc1LDQwNzg3LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzk0LDQwNzk3LDQwNzk4LDQwODA4LDQwODA5LDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE5LDQwODIx''@;'; put 'put ''LDQwODI2LDQwODI5LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUyLDQwODU0LDQwODU1LDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0saWJtODY2OlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwx''@;'; put 'put ''MDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwx''@;'; put 'put ''MDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4Nyw5NjE3LDk2MTgsOTYxOSw5NDc0LDk1MDgsOTU2OSw5NTcwLDk1NTgsOTU1Nyw5NTcxLDk1NTMsOTU1OSw5NTY1LDk1NjQsOTU2Myw5NDg4LDk0OTIsOTUyNCw5NTE2LDk1MDAsOTQ3Miw5NTMyLDk1NjYsOTU2Nyw5''@;'; put 'put ''NTYyLDk1NTYsOTU3Nyw5NTc0LDk1NjgsOTU1Miw5NTgwLDk1NzUsOTU3Niw5NTcyLDk1NzMsOTU2MSw5NTYwLDk1NTQsOTU1NSw5NTc5LDk1NzgsOTQ5Niw5NDg0LDk2MDgsOTYwNCw5NjEyLDk2MTYsOTYwMCwxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5Niwx''@;'; put 'put ''MDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDEwMjUsMTEwNSwxMDI4LDExMDgsMTAzMSwxMTExLDEwMzgsMTExOCwxNzYsODcyOSwxODMsODczMCw4NDcwLDE2NCw5NjMyLDE2MF0sImlzby04ODU5LTIiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcs''@;'; put 'put ''MTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsNzI4LDMyMSwxNjQsMzE3LDM0NiwxNjcsMTY4LDM1MiwzNTAsMzU2LDM3NywxNzMsMzgxLDM3OSwxNzYsMjYxLDczMSwz''@;'; put 'put ''MjIsMTgwLDMxOCwzNDcsNzExLDE4NCwzNTMsMzUxLDM1NywzNzgsNzMzLDM4MiwzODAsMzQwLDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIy''@;'; put 'put ''MCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSwiaXNvLTg4NTktMyI6WzEyOCwxMjks''@;'; put 'put ''MTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI5NCw3MjgsMTYzLDE2NCxudWxsLDI5MiwxNjcsMTY4LDMwNCwzNTAs''@;'; put 'put ''Mjg2LDMwOCwxNzMsbnVsbCwzNzksMTc2LDI5NSwxNzgsMTc5LDE4MCwxODEsMjkzLDE4MywxODQsMzA1LDM1MSwyODcsMzA5LDE4OSxudWxsLDM4MCwxOTIsMTkzLDE5NCxudWxsLDE5NiwyNjYsMjY0LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LG51bGwsMjA5LDIxMCwy''@;'; put 'put ''MTEsMjEyLDI4OCwyMTQsMjE1LDI4NCwyMTcsMjE4LDIxOSwyMjAsMzY0LDM0OCwyMjMsMjI0LDIyNSwyMjYsbnVsbCwyMjgsMjY3LDI2NSwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSxudWxsLDI0MSwyNDIsMjQzLDI0NCwyODksMjQ2LDI0NywyODUsMjQ5LDI1MCwyNTEs''@;'; put 'put ''MjUyLDM2NSwzNDksNzI5XSwiaXNvLTg4NTktNCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2''@;'; put 'put ''MCwzMTIsMzQyLDE2NCwyOTYsMzE1LDE2NywxNjgsMzUyLDI3NCwyOTAsMzU4LDE3MywzODEsMTc1LDE3NiwyNjEsNzMxLDM0MywxODAsMjk3LDMxNiw3MTEsMTg0LDM1MywyNzUsMjkxLDM1OSwzMzAsMzgyLDMzMSwyNTYsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMzAyLDI2OCwyMDEsMjgw''@;'; put 'put ''LDIwMywyNzgsMjA1LDIwNiwyOTgsMjcyLDMyNSwzMzIsMzEwLDIxMiwyMTMsMjE0LDIxNSwyMTYsMzcwLDIxOCwyMTksMjIwLDM2MCwzNjIsMjIzLDI1NywyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwzMDMsMjY5LDIzMywyODEsMjM1LDI3OSwyMzcsMjM4LDI5OSwyNzMsMzI2LDMzMywzMTEs''@;'; put 'put ''MjQ0LDI0NSwyNDYsMjQ3LDI0OCwzNzEsMjUwLDI1MSwyNTIsMzYxLDM2Myw3MjldLCJpc28tODg1OS01IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1''@;'; put 'put ''MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTczLDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwx''@;'; put 'put ''MDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwx''@;'; put 'put ''MDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg0NzAsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTY3LDEx''@;'; put 'put ''MTgsMTExOV0sImlzby04ODU5LTYiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCxudWxsLG51bGws''@;'; put 'put ''bnVsbCwxNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNTQ4LDE3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NjMsbnVsbCxudWxsLG51bGwsMTU2NyxudWxsLDE1NjksMTU3MCwxNTcxLDE1''@;'; put 'put ''NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMTU5MSwxNTkyLDE1OTMsMTU5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTYwMCwxNjAxLDE2MDIsMTYwMywxNjA0LDE2''@;'; put 'put ''MDUsMTYwNiwxNjA3LDE2MDgsMTYwOSwxNjEwLDE2MTEsMTYxMiwxNjEzLDE2MTQsMTYxNSwxNjE2LDE2MTcsMTYxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSwiaXNvLTg4NTktNyI6WzEyOCwxMjksMTMwLDEzMSwx''@;'; put 'put ''MzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDgyMTYsODIxNywxNjMsODM2NCw4MzY3LDE2NiwxNjcsMTY4LDE2OSw4OTAsMTcxLDE3''@;'; put 'put ''MiwxNzMsbnVsbCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAsOTAxLDkwMiwxODMsOTA0LDkwNSw5MDYsMTg3LDkwOCwxODksOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSxudWxsLDkzMSw5MzIs''@;'; put 'put ''OTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5''@;'; put 'put ''NzQsbnVsbF0sImlzby04ODU5LTgiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCxudWxsLDE2Miwx''@;'; put 'put ''NjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDgyMTUsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0OTMsMTQ5NCwxNDk1LDE0OTYsMTQ5NywxNDk4''@;'; put 'put ''LDE0OTksMTUwMCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUsMTUwNiwxNTA3LDE1MDgsMTUwOSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1MTQsbnVsbCxudWxsLDgyMDYsODIwNyxudWxsXSwiaXNvLTg4NTktMTAiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4''@;'; put 'put ''LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjc0LDI5MCwyOTgsMjk2LDMxMCwxNjcsMzE1LDI3MiwzNTIsMzU4LDM4MSwxNzMsMzYyLDMzMCwxNzYsMjYxLDI3NSwyOTEs''@;'; put 'put ''Mjk5LDI5NywzMTEsMTgzLDMxNiwyNzMsMzUzLDM1OSwzODIsODIxMywzNjMsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDIwNywyMDgsMzI1LDMzMiwyMTEsMjEyLDIxMywyMTQsMzYwLDIxNiwzNzAsMjE4LDIxOSwyMjAs''@;'; put 'put ''MjIxLDIyMiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjM5LDI0MCwzMjYsMzMzLDI0MywyNDQsMjQ1LDI0NiwzNjEsMjQ4LDM3MSwyNTAsMjUxLDI1MiwyNTMsMjU0LDMxMl0sImlzby04ODU5LTEzIjpbMTI4LDEyOSwx''@;'; put 'put ''MzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIyMSwxNjIsMTYzLDE2NCw4MjIyLDE2NiwxNjcsMjE2LDE2OSwzNDIs''@;'; put 'put ''MTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzksODIyMCwxODEsMTgyLDE4MywyNDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwzMTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEs''@;'; put 'put ''MzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMwMywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1Miwz''@;'; put 'put ''ODAsMzgyLDgyMTddLCJpc28tODg1OS0xNCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDc2ODIs''@;'; put 'put ''NzY4MywxNjMsMjY2LDI2Nyw3NjkwLDE2Nyw3ODA4LDE2OSw3ODEwLDc2OTEsNzkyMiwxNzMsMTc0LDM3Niw3NzEwLDc3MTEsMjg4LDI4OSw3NzQ0LDc3NDUsMTgyLDc3NjYsNzgwOSw3NzY3LDc4MTEsNzc3Niw3OTIzLDc4MTIsNzgxMyw3Nzc3LDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5''@;'; put 'put ''OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywzNzIsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsNzc4NiwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwzNzQsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIz''@;'; put 'put ''OSwzNzMsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsNzc4NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywzNzUsMjU1XSwiaXNvLTg4NTktMTUiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0''@;'; put 'put ''OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2Myw4MzY0LDE2NSwzNTIsMTY3LDM1MywxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDM4MSwxODEsMTgyLDE4MywzODIsMTg1LDE4NiwxODcsMzM4LDMz''@;'; put 'put ''OSwzNzYsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMw''@;'; put 'put ''LDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NV0sImlzby04ODU5LTE2IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzks''@;'; put 'put ''MTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDI2MSwzMjEsODM2NCw4MjIyLDM1MiwxNjcsMzUzLDE2OSw1MzYsMTcxLDM3NywxNzMsMzc4LDM3OSwxNzYsMTc3LDI2OCwzMjIsMzgx''@;'; put 'put ''LDgyMjEsMTgyLDE4MywzODIsMjY5LDUzNywxODcsMzM4LDMzOSwzNzYsMzgwLDE5MiwxOTMsMTk0LDI1OCwxOTYsMjYyLDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyNzIsMzIzLDIxMCwyMTEsMjEyLDMzNiwyMTQsMzQ2LDM2OCwyMTcsMjE4LDIxOSwyMjAsMjgw''@;'; put 'put ''LDUzOCwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyNjMsMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI3MywzMjQsMjQyLDI0MywyNDQsMzM3LDI0NiwzNDcsMzY5LDI0OSwyNTAsMjUxLDI1MiwyODEsNTM5LDI1NV0sImtvaTgtciI6Wzk0NzIsOTQ3NCw5NDg0LDk0''@;'; put 'put ''ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQsMTEwNSw5NTU1LDk1''@;'; put 'put ''NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSwxMDI1LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5''@;'; put 'put ''MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDExMDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0''@;'; put 'put ''MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcxLDEwNTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sImtvaTgtdSI6Wzk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1''@;'; put 'put ''MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQsMTEwNSwxMTA4LDk1NTYsMTExMCwxMTExLDk1''@;'; put 'put ''NTksOTU2MCw5NTYxLDk1NjIsOTU2MywxMTY5LDExMTgsOTU2Niw5NTY3LDk1NjgsOTU2OSwxMDI1LDEwMjgsOTU3MSwxMDMwLDEwMzEsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDExNjgsMTAzOCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4''@;'; put 'put ''MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDExMDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0''@;'; put 'put ''OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcxLDEwNTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sbWFjaW50b3NoOlsxOTYsMTk3LDE5OSwyMDEsMjA5LDIxNCwyMjAsMjI1LDIyNCwyMjYsMjI4LDIy''@;'; put 'put ''NywyMjksMjMxLDIzMywyMzIsMjM0LDIzNSwyMzcsMjM2LDIzOCwyMzksMjQxLDI0MywyNDIsMjQ0LDI0NiwyNDUsMjUwLDI0OSwyNTEsMjUyLDgyMjQsMTc2LDE2MiwxNjMsMTY3LDgyMjYsMTgyLDIyMywxNzQsMTY5LDg0ODIsMTgwLDE2OCw4ODAwLDE5OCwyMTYsODczNCwxNzcsODgwNCw4''@;'; put 'put ''ODA1LDE2NSwxODEsODcwNiw4NzIxLDg3MTksOTYwLDg3NDcsMTcwLDE4Niw5MzcsMjMwLDI0OCwxOTEsMTYxLDE3Miw4NzMwLDQwMiw4Nzc2LDg3MTAsMTcxLDE4Nyw4MjMwLDE2MCwxOTIsMTk1LDIxMywzMzgsMzM5LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw5Njc0LDI1''@;'; put 'put ''NSwzNzYsODI2MCw4MzY0LDgyNDksODI1MCw2NDI1Nyw2NDI1OCw4MjI1LDE4Myw4MjE4LDgyMjIsODI0MCwxOTQsMjAyLDE5MywyMDMsMjAwLDIwNSwyMDYsMjA3LDIwNCwyMTEsMjEyLDYzNzQzLDIxMCwyMTgsMjE5LDIxNywzMDUsNzEwLDczMiwxNzUsNzI4LDcyOSw3MzAsMTg0LDczMyw3''@;'; put 'put ''MzEsNzExXSwid2luZG93cy04NzQiOls4MzY0LDEyOSwxMzAsMTMxLDEzMiw4MjMwLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwz''@;'; put 'put ''NTg1LDM1ODYsMzU4NywzNTg4LDM1ODksMzU5MCwzNTkxLDM1OTIsMzU5MywzNTk0LDM1OTUsMzU5NiwzNTk3LDM1OTgsMzU5OSwzNjAwLDM2MDEsMzYwMiwzNjAzLDM2MDQsMzYwNSwzNjA2LDM2MDcsMzYwOCwzNjA5LDM2MTAsMzYxMSwzNjEyLDM2MTMsMzYxNCwzNjE1LDM2MTYsMzYxNywz''@;'; put 'put ''NjE4LDM2MTksMzYyMCwzNjIxLDM2MjIsMzYyMywzNjI0LDM2MjUsMzYyNiwzNjI3LDM2MjgsMzYyOSwzNjMwLDM2MzEsMzYzMiwzNjMzLDM2MzQsMzYzNSwzNjM2LDM2MzcsMzYzOCwzNjM5LDM2NDAsMzY0MSwzNjQyLG51bGwsbnVsbCxudWxsLG51bGwsMzY0NywzNjQ4LDM2NDksMzY1MCwz''@;'; put 'put ''NjUxLDM2NTIsMzY1MywzNjU0LDM2NTUsMzY1NiwzNjU3LDM2NTgsMzY1OSwzNjYwLDM2NjEsMzY2MiwzNjYzLDM2NjQsMzY2NSwzNjY2LDM2NjcsMzY2OCwzNjY5LDM2NzAsMzY3MSwzNjcyLDM2NzMsMzY3NCwzNjc1LG51bGwsbnVsbCxudWxsLG51bGxdLCJ3aW5kb3dzLTEyNTAiOls4MzY0''@;'; put 'put ''LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDM1Miw4MjQ5LDM0NiwzNTYsMzgxLDM3NywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwzNTMsODI1MCwzNDcsMzU3LDM4MiwzNzgsMTYwLDcxMSw3MjgsMzIxLDE2NCwyNjAs''@;'; put 'put ''MTY2LDE2NywxNjgsMTY5LDM1MCwxNzEsMTcyLDE3MywxNzQsMzc5LDE3NiwxNzcsNzMxLDMyMiwxODAsMTgxLDE4MiwxODMsMTg0LDI2MSwzNTEsMTg3LDMxNyw3MzMsMzE4LDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwy''@;'; put 'put ''NzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0''@;'; put 'put ''NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLCJ3aW5kb3dzLTEyNTEiOlsxMDI2LDEwMjcsODIxOCwxMTA3LDgyMjIsODIzMCw4MjI0LDgyMjUsODM2NCw4MjQwLDEwMzMsODI0OSwxMDM0LDEwMzYsMTAzNSwxMDM5LDExMDYsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIx''@;'; put 'put ''MiwxNTIsODQ4MiwxMTEzLDgyNTAsMTExNCwxMTE2LDExMTUsMTExOSwxNjAsMTAzOCwxMTE4LDEwMzIsMTY0LDExNjgsMTY2LDE2NywxMDI1LDE2OSwxMDI4LDE3MSwxNzIsMTczLDE3NCwxMDMxLDE3NiwxNzcsMTAzMCwxMTEwLDExNjksMTgxLDE4MiwxODMsMTEwNSw4NDcwLDExMDgsMTg3''@;'; put 'put ''LDExMTIsMTAyOSwxMTA5LDExMTEsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4''@;'; put 'put ''LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAx''@;'; put 'put ''LDExMDIsMTEwM10sIndpbmRvd3MtMTI1MiI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgyNDksMzM4LDE0MSwzODEsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDM1Myw4MjUwLDMzOSwxNTcs''@;'; put 'put ''MzgyLDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwx''@;'; put 'put ''OTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0''@;'; put 'put ''MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NV0sIndpbmRvd3MtMTI1MyI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcs''@;'; put 'put ''ODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDE1NCw4MjUwLDE1NiwxNTcsMTU4LDE1OSwxNjAsOTAxLDkwMiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksbnVsbCwxNzEsMTcyLDE3MywxNzQsODIxMywxNzYsMTc3LDE3OCwxNzksOTAwLDE4MSwxODIsMTgzLDkwNCw5MDUs''@;'; put 'put ''OTA2LDE4Nyw5MDgsMTg5LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksbnVsbCw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYs''@;'; put 'put ''OTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LG51bGxdLCJ3aW5kb3dzLTEyNTQiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIy''@;'; put 'put ''NCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcy''@;'; put 'put ''LDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjg2LDIwOSwyMTAsMjExLDIxMiwyMTMs''@;'; put 'put ''MjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDMwNCwzNTAsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyODcsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMzA1LDM1MSwy''@;'; put 'put ''NTVdLCJ3aW5kb3dzLTEyNTUiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTks''@;'; put 'put ''MTYwLDE2MSwxNjIsMTYzLDgzNjIsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCwxOTEsMTQ1NiwxNDU3LDE0NTgsMTQ1OSwxNDYwLDE0NjEsMTQ2Miwx''@;'; put 'put ''NDYzLDE0NjQsMTQ2NSwxNDY2LDE0NjcsMTQ2OCwxNDY5LDE0NzAsMTQ3MSwxNDcyLDE0NzMsMTQ3NCwxNDc1LDE1MjAsMTUyMSwxNTIyLDE1MjMsMTUyNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE0ODgsMTQ4OSwxNDkwLDE0OTEsMTQ5MiwxNDkzLDE0OTQsMTQ5NSwx''@;'; put 'put ''NDk2LDE0OTcsMTQ5OCwxNDk5LDE1MDAsMTUwMSwxNTAyLDE1MDMsMTUwNCwxNTA1LDE1MDYsMTUwNywxNTA4LDE1MDksMTUxMCwxNTExLDE1MTIsMTUxMywxNTE0LG51bGwsbnVsbCw4MjA2LDgyMDcsbnVsbF0sIndpbmRvd3MtMTI1NiI6WzgzNjQsMTY2Miw4MjE4LDQwMiw4MjIyLDgyMzAs''@;'; put 'put ''ODIyNCw4MjI1LDcxMCw4MjQwLDE2NTcsODI0OSwzMzgsMTY3MCwxNjg4LDE2NzIsMTcxMSw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE3MDUsODQ4MiwxNjgxLDgyNTAsMzM5LDgyMDQsODIwNSwxNzIyLDE2MCwxNTQ4LDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwx''@;'; put 'put ''NjksMTcyNiwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxNTYzLDE4NywxODgsMTg5LDE5MCwxNTY3LDE3MjksMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwx''@;'; put 'put ''NTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwyMTUsMTU5MSwxNTkyLDE1OTMsMTU5NCwxNjAwLDE2MDEsMTYwMiwxNjAzLDIyNCwxNjA0LDIyNiwxNjA1LDE2MDYsMTYwNywxNjA4LDIzMSwyMzIsMjMzLDIzNCwyMzUsMTYwOSwxNjEwLDIzOCwyMzksMTYxMSwx''@;'; put 'put ''NjEyLDE2MTMsMTYxNCwyNDQsMTYxNSwxNjE2LDI0NywxNjE3LDI0OSwxNjE4LDI1MSwyNTIsODIwNiw4MjA3LDE3NDZdLCJ3aW5kb3dzLTEyNTciOls4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4MjQ5LDE0MCwxNjgsNzExLDE4NCwxNDQsODIx''@;'; put 'put ''Niw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYsMTc1LDczMSwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsbnVsbCwxNjYsMTY3LDIxNiwxNjksMzQyLDE3MSwxNzIsMTczLDE3NCwxOTgsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4Mywy''@;'; put 'put ''NDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwzMTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMw''@;'; put 'put ''MywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDcyOV0sIndpbmRvd3MtMTI1OCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIz''@;'; put 'put ''MCw4MjI0LDgyMjUsNzEwLDgyNDAsMTM4LDgyNDksMzM4LDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDE1NCw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3''@;'; put 'put ''MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDI1OCwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDc2OCwyMDUsMjA2LDIwNywyNzIsMjA5LDc3NywyMTEsMjEy''@;'; put 'put ''LDQxNiwyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsNDMxLDc3MSwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsNzY5LDIzNywyMzgsMjM5LDI3MywyNDEsODAzLDI0MywyNDQsNDE3LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1Miw0MzIs''@;'; put 'put ''ODM2MywyNTVdLCJ4LW1hYy1jeXJpbGxpYyI6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEw''@;'; put 'put ''NjcsMTA2OCwxMDY5LDEwNzAsMTA3MSw4MjI0LDE3NiwxMTY4LDE2MywxNjcsODIyNiwxODIsMTAzMCwxNzQsMTY5LDg0ODIsMTAyNiwxMTA2LDg4MDAsMTAyNywxMTA3LDg3MzQsMTc3LDg4MDQsODgwNSwxMTEwLDE4MSwxMTY5LDEwMzIsMTAyOCwxMTA4LDEwMzEsMTExMSwxMDMzLDExMTMs''@;'; put 'put ''MTAzNCwxMTE0LDExMTIsMTAyOSwxNzIsODczMCw0MDIsODc3Niw4NzEwLDE3MSwxODcsODIzMCwxNjAsMTAzNSwxMTE1LDEwMzYsMTExNiwxMTA5LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw4MjIyLDEwMzgsMTExOCwxMDM5LDExMTksODQ3MCwxMDI1LDExMDUsMTEwMywx''@;'; put 'put ''MDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDgzNjRdfX0odGhp''@;'; put 'put ''c3x8e30pfSw0MDI5MDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KFRlLHFlLFhlKXtyZXR1cm4gcWU8PVRlJiZUZTw9WGV9YXQuZXhwb3J0cyYmIWFlWyJlbmNvZGluZy1pbmRleGVzIl0mJihhZVsiZW5jb2RpbmctaW5kZXhlcyJdPUYo''@;'; put 'put ''MTY0MTMpWyJlbmNvZGluZy1pbmRleGVzIl0pO3ZhciBsZT1NYXRoLmZsb29yO2Z1bmN0aW9uIE0oVGUpe2lmKHZvaWQgMD09PVRlKXJldHVybnt9O2lmKFRlPT09T2JqZWN0KFRlKSlyZXR1cm4gVGU7dGhyb3cgVHlwZUVycm9yKCJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCB0byBkaWN0''@;'; put 'put ''aW9uYXJ5Iil9ZnVuY3Rpb24geihUZSl7cmV0dXJuIDA8PVRlJiZUZTw9MTI3fXZhciBLPXosST0tMTtmdW5jdGlvbiBrKFRlKXt0aGlzLnRva2Vucz1bXS5zbGljZS5jYWxsKFRlKSx0aGlzLnRva2Vucy5yZXZlcnNlKCl9ay5wcm90b3R5cGU9e2VuZE9mU3RyZWFtOmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIXRoaXMudG9rZW5zLmxlbmd0aH0scmVhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vucy5sZW5ndGg/dGhpcy50b2tlbnMucG9wKCk6SX0scHJlcGVuZDpmdW5jdGlvbihUZSl7aWYoQXJyYXkuaXNBcnJheShUZSkpZm9yKHZhciBxZT1UZTtxZS5sZW5ndGg7KXRoaXMudG9rZW5z''@;'; put 'put ''LnB1c2gocWUucG9wKCkpO2Vsc2UgdGhpcy50b2tlbnMucHVzaChUZSl9LHB1c2g6ZnVuY3Rpb24oVGUpe2lmKEFycmF5LmlzQXJyYXkoVGUpKWZvcih2YXIgcWU9VGU7cWUubGVuZ3RoOyl0aGlzLnRva2Vucy51bnNoaWZ0KHFlLnNoaWZ0KCkpO2Vsc2UgdGhpcy50b2tlbnMudW5zaGlmdChU''@;'; put 'put ''ZSl9fTt2YXIgRT0tMTtmdW5jdGlvbiBqKFRlLHFlKXtpZihUZSl0aHJvdyBUeXBlRXJyb3IoIkRlY29kZXIgZXJyb3IiKTtyZXR1cm4gcWV8fDY1NTMzfWZ1bmN0aW9uIFYoVGUpe3Rocm93IFR5cGVFcnJvcigiVGhlIGNvZGUgcG9pbnQgIitUZSsiIGNvdWxkIG5vdCBiZSBlbmNvZGVkLiIp''@;'; put 'put ''fWZ1bmN0aW9uIFgoVGUpe3JldHVybiBUZT1TdHJpbmcoVGUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxLFRlKT9xW1RlXTpudWxsfXZhciBVPVt7ZW5jb2RpbmdzOlt7bGFiZWxzOlsidW5pY29kZS0xLTEtdXRmLTgiLCJ1dGYt''@;'; put 'put ''OCIsInV0ZjgiXSxuYW1lOiJVVEYtOCJ9XSxoZWFkaW5nOiJUaGUgRW5jb2RpbmcifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiODY2IiwiY3A4NjYiLCJjc2libTg2NiIsImlibTg2NiJdLG5hbWU6IklCTTg2NiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluMiIsImlzby04ODU5LTIiLCJpc28taXIt''@;'; put 'put ''MTAxIiwiaXNvODg1OS0yIiwiaXNvODg1OTIiLCJpc29fODg1OS0yIiwiaXNvXzg4NTktMjoxOTg3IiwibDIiLCJsYXRpbjIiXSxuYW1lOiJJU08tODg1OS0yIn0se2xhYmVsczpbImNzaXNvbGF0aW4zIiwiaXNvLTg4NTktMyIsImlzby1pci0xMDkiLCJpc284ODU5LTMiLCJpc284ODU5MyIs''@;'; put 'put ''Imlzb184ODU5LTMiLCJpc29fODg1OS0zOjE5ODgiLCJsMyIsImxhdGluMyJdLG5hbWU6IklTTy04ODU5LTMifSx7bGFiZWxzOlsiY3Npc29sYXRpbjQiLCJpc28tODg1OS00IiwiaXNvLWlyLTExMCIsImlzbzg4NTktNCIsImlzbzg4NTk0IiwiaXNvXzg4NTktNCIsImlzb184ODU5LTQ6MTk4''@;'; put 'put ''OCIsImw0IiwibGF0aW40Il0sbmFtZToiSVNPLTg4NTktNCJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluY3lyaWxsaWMiLCJjeXJpbGxpYyIsImlzby04ODU5LTUiLCJpc28taXItMTQ0IiwiaXNvODg1OS01IiwiaXNvODg1OTUiLCJpc29fODg1OS01IiwiaXNvXzg4NTktNToxOTg4Il0sbmFtZToi''@;'; put 'put ''SVNPLTg4NTktNSJ9LHtsYWJlbHM6WyJhcmFiaWMiLCJhc21vLTcwOCIsImNzaXNvODg1OTZlIiwiY3Npc284ODU5NmkiLCJjc2lzb2xhdGluYXJhYmljIiwiZWNtYS0xMTQiLCJpc28tODg1OS02IiwiaXNvLTg4NTktNi1lIiwiaXNvLTg4NTktNi1pIiwiaXNvLWlyLTEyNyIsImlzbzg4NTkt''@;'; put 'put ''NiIsImlzbzg4NTk2IiwiaXNvXzg4NTktNiIsImlzb184ODU5LTY6MTk4NyJdLG5hbWU6IklTTy04ODU5LTYifSx7bGFiZWxzOlsiY3Npc29sYXRpbmdyZWVrIiwiZWNtYS0xMTgiLCJlbG90XzkyOCIsImdyZWVrIiwiZ3JlZWs4IiwiaXNvLTg4NTktNyIsImlzby1pci0xMjYiLCJpc284ODU5''@;'; put 'put ''LTciLCJpc284ODU5NyIsImlzb184ODU5LTciLCJpc29fODg1OS03OjE5ODciLCJzdW5fZXVfZ3JlZWsiXSxuYW1lOiJJU08tODg1OS03In0se2xhYmVsczpbImNzaXNvODg1OThlIiwiY3Npc29sYXRpbmhlYnJldyIsImhlYnJldyIsImlzby04ODU5LTgiLCJpc28tODg1OS04LWUiLCJpc28t''@;'; put 'put ''aXItMTM4IiwiaXNvODg1OS04IiwiaXNvODg1OTgiLCJpc29fODg1OS04IiwiaXNvXzg4NTktODoxOTg4IiwidmlzdWFsIl0sbmFtZToiSVNPLTg4NTktOCJ9LHtsYWJlbHM6WyJjc2lzbzg4NTk4aSIsImlzby04ODU5LTgtaSIsImxvZ2ljYWwiXSxuYW1lOiJJU08tODg1OS04LUkifSx7bGFi''@;'; put 'put ''ZWxzOlsiY3Npc29sYXRpbjYiLCJpc28tODg1OS0xMCIsImlzby1pci0xNTciLCJpc284ODU5LTEwIiwiaXNvODg1OTEwIiwibDYiLCJsYXRpbjYiXSxuYW1lOiJJU08tODg1OS0xMCJ9LHtsYWJlbHM6WyJpc28tODg1OS0xMyIsImlzbzg4NTktMTMiLCJpc284ODU5MTMiXSxuYW1lOiJJU08t''@;'; put 'put ''ODg1OS0xMyJ9LHtsYWJlbHM6WyJpc28tODg1OS0xNCIsImlzbzg4NTktMTQiLCJpc284ODU5MTQiXSxuYW1lOiJJU08tODg1OS0xNCJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluOSIsImlzby04ODU5LTE1IiwiaXNvODg1OS0xNSIsImlzbzg4NTkxNSIsImlzb184ODU5LTE1IiwibDkiXSxuYW1l''@;'; put 'put ''OiJJU08tODg1OS0xNSJ9LHtsYWJlbHM6WyJpc28tODg1OS0xNiJdLG5hbWU6IklTTy04ODU5LTE2In0se2xhYmVsczpbImNza29pOHIiLCJrb2kiLCJrb2k4Iiwia29pOC1yIiwia29pOF9yIl0sbmFtZToiS09JOC1SIn0se2xhYmVsczpbImtvaTgtcnUiLCJrb2k4LXUiXSxuYW1lOiJLT0k4''@;'; put 'put ''LVUifSx7bGFiZWxzOlsiY3NtYWNpbnRvc2giLCJtYWMiLCJtYWNpbnRvc2giLCJ4LW1hYy1yb21hbiJdLG5hbWU6Im1hY2ludG9zaCJ9LHtsYWJlbHM6WyJkb3MtODc0IiwiaXNvLTg4NTktMTEiLCJpc284ODU5LTExIiwiaXNvODg1OTExIiwidGlzLTYyMCIsIndpbmRvd3MtODc0Il0sbmFt''@;'; put 'put ''ZToid2luZG93cy04NzQifSx7bGFiZWxzOlsiY3AxMjUwIiwid2luZG93cy0xMjUwIiwieC1jcDEyNTAiXSxuYW1lOiJ3aW5kb3dzLTEyNTAifSx7bGFiZWxzOlsiY3AxMjUxIiwid2luZG93cy0xMjUxIiwieC1jcDEyNTEiXSxuYW1lOiJ3aW5kb3dzLTEyNTEifSx7bGFiZWxzOlsiYW5zaV94''@;'; put 'put ''My40LTE5NjgiLCJhc2NpaSIsImNwMTI1MiIsImNwODE5IiwiY3Npc29sYXRpbjEiLCJpYm04MTkiLCJpc28tODg1OS0xIiwiaXNvLWlyLTEwMCIsImlzbzg4NTktMSIsImlzbzg4NTkxIiwiaXNvXzg4NTktMSIsImlzb184ODU5LTE6MTk4NyIsImwxIiwibGF0aW4xIiwidXMtYXNjaWkiLCJ3''@;'; put 'put ''aW5kb3dzLTEyNTIiLCJ4LWNwMTI1MiJdLG5hbWU6IndpbmRvd3MtMTI1MiJ9LHtsYWJlbHM6WyJjcDEyNTMiLCJ3aW5kb3dzLTEyNTMiLCJ4LWNwMTI1MyJdLG5hbWU6IndpbmRvd3MtMTI1MyJ9LHtsYWJlbHM6WyJjcDEyNTQiLCJjc2lzb2xhdGluNSIsImlzby04ODU5LTkiLCJpc28taXIt''@;'; put 'put ''MTQ4IiwiaXNvODg1OS05IiwiaXNvODg1OTkiLCJpc29fODg1OS05IiwiaXNvXzg4NTktOToxOTg5IiwibDUiLCJsYXRpbjUiLCJ3aW5kb3dzLTEyNTQiLCJ4LWNwMTI1NCJdLG5hbWU6IndpbmRvd3MtMTI1NCJ9LHtsYWJlbHM6WyJjcDEyNTUiLCJ3aW5kb3dzLTEyNTUiLCJ4LWNwMTI1NSJd''@;'; put 'put ''LG5hbWU6IndpbmRvd3MtMTI1NSJ9LHtsYWJlbHM6WyJjcDEyNTYiLCJ3aW5kb3dzLTEyNTYiLCJ4LWNwMTI1NiJdLG5hbWU6IndpbmRvd3MtMTI1NiJ9LHtsYWJlbHM6WyJjcDEyNTciLCJ3aW5kb3dzLTEyNTciLCJ4LWNwMTI1NyJdLG5hbWU6IndpbmRvd3MtMTI1NyJ9LHtsYWJlbHM6WyJj''@;'; put 'put ''cDEyNTgiLCJ3aW5kb3dzLTEyNTgiLCJ4LWNwMTI1OCJdLG5hbWU6IndpbmRvd3MtMTI1OCJ9LHtsYWJlbHM6WyJ4LW1hYy1jeXJpbGxpYyIsIngtbWFjLXVrcmFpbmlhbiJdLG5hbWU6IngtbWFjLWN5cmlsbGljIn1dLGhlYWRpbmc6IkxlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MifSx7''@;'; put 'put ''ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY2hpbmVzZSIsImNzZ2IyMzEyIiwiY3Npc281OGdiMjMxMjgwIiwiZ2IyMzEyIiwiZ2JfMjMxMiIsImdiXzIzMTItODAiLCJnYmsiLCJpc28taXItNTgiLCJ4LWdiayJdLG5hbWU6IkdCSyJ9LHtsYWJlbHM6WyJnYjE4MDMwIl0sbmFtZToiZ2IxODAzMCJ9''@;'; put 'put ''XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlIChzaW1wbGlmaWVkKSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiYmlnNSIsImJpZzUtaGtzY3MiLCJjbi1iaWc1IiwiY3NiaWc1IiwieC14LWJpZzUiXSxuYW1lOiJCaWc1In1dLGhlYWRpbmc6IkxlZ2FjeSBt''@;'; put 'put ''dWx0aS1ieXRlIENoaW5lc2UgKHRyYWRpdGlvbmFsKSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3NldWNwa2RmbXRqYXBhbmVzZSIsImV1Yy1qcCIsIngtZXVjLWpwIl0sbmFtZToiRVVDLUpQIn0se2xhYmVsczpbImNzaXNvMjAyMmpwIiwiaXNvLTIwMjItanAiXSxuYW1l''@;'; put 'put ''OiJJU08tMjAyMi1KUCJ9LHtsYWJlbHM6WyJjc3NoaWZ0amlzIiwibXM5MzIiLCJtc19rYW5qaSIsInNoaWZ0LWppcyIsInNoaWZ0X2ppcyIsInNqaXMiLCJ3aW5kb3dzLTMxaiIsIngtc2ppcyJdLG5hbWU6IlNoaWZ0X0pJUyJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBKYXBhbmVz''@;'; put 'put ''ZSBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3NldWNrciIsImNza3NjNTYwMTE5ODciLCJldWMta3IiLCJpc28taXItMTQ5Iiwia29yZWFuIiwia3NfY181NjAxLTE5ODciLCJrc19jXzU2MDEtMTk4OSIsImtzYzU2MDEiLCJrc2NfNTYwMSIsIndpbmRvd3MtOTQ5Il0sbmFt''@;'; put 'put ''ZToiRVVDLUtSIn1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIEtvcmVhbiBlbmNvZGluZ3MifSx7ZW5jb2RpbmdzOlt7bGFiZWxzOlsiY3Npc28yMDIya3IiLCJoei1nYi0yMzEyIiwiaXNvLTIwMjItY24iLCJpc28tMjAyMi1jbi1leHQiLCJpc28tMjAyMi1rciJdLG5hbWU6InJlcGxh''@;'; put 'put ''Y2VtZW50In0se2xhYmVsczpbInV0Zi0xNmJlIl0sbmFtZToiVVRGLTE2QkUifSx7bGFiZWxzOlsidXRmLTE2IiwidXRmLTE2bGUiXSxuYW1lOiJVVEYtMTZMRSJ9LHtsYWJlbHM6WyJ4LXVzZXItZGVmaW5lZCJdLG5hbWU6IngtdXNlci1kZWZpbmVkIn1dLGhlYWRpbmc6IkxlZ2FjeSBtaXNj''@;'; put 'put ''ZWxsYW5lb3VzIGVuY29kaW5ncyJ9XSxxPXt9O1UuZm9yRWFjaChmdW5jdGlvbihUZSl7VGUuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24ocWUpe3FlLmxhYmVscy5mb3JFYWNoKGZ1bmN0aW9uKFhlKXtxW1hlXT1xZX0pfSl9KTt2YXIgYixlZT17fSx0ZT17fTtmdW5jdGlvbiBvZShUZSxx''@;'; put 'put ''ZSl7cmV0dXJuIHFlJiZxZVtUZV18fG51bGx9ZnVuY3Rpb24gc2UoVGUscWUpe3ZhciBYZT1xZS5pbmRleE9mKFRlKTtyZXR1cm4tMT09PVhlP251bGw6WGV9ZnVuY3Rpb24gaGUoVGUpe2lmKCEoImVuY29kaW5nLWluZGV4ZXMiaW4gYWUpKXRocm93IEVycm9yKCJJbmRleGVzIG1pc3Npbmcu''@;'; put 'put ''IERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTtyZXR1cm4gYWVbImVuY29kaW5nLWluZGV4ZXMiXVtUZV19dmFyIEgsTj0idXRmLTgiO2Z1bmN0aW9uIGcoVGUscWUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXRocm93IFR5cGVFcnJvcigi''@;'; put 'put ''Q2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0ICduZXcnPyIpO1RlPXZvaWQgMCE9PVRlP1N0cmluZyhUZSk6TixxZT1NKHFlKSx0aGlzLl9lbmNvZGluZz1udWxsLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9pZ25vcmVCT009ITEsdGhpcy5fQk9Nc2Vlbj0hMSx0aGlzLl9l''@;'; put 'put ''cnJvcl9tb2RlPSJyZXBsYWNlbWVudCIsdGhpcy5fZG9fbm90X2ZsdXNoPSExO3ZhciBYZT1YKFRlKTtpZihudWxsPT09WGV8fCJyZXBsYWNlbWVudCI9PT1YZS5uYW1lKXRocm93IFJhbmdlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrVGUpO2lmKCF0ZVtYZS5uYW1lXSl0aHJvdyBFcnJv''@;'; put 'put ''cigiRGVjb2RlciBub3QgcHJlc2VudC4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0PyIpO3ZhciBVZT10aGlzO3JldHVybiBVZS5fZW5jb2Rpbmc9WGUscWUuZmF0YWwmJihVZS5fZXJyb3JfbW9kZT0iZmF0YWwiKSxxZS5pZ25vcmVCT00mJihV''@;'; put 'put ''ZS5faWdub3JlQk9NPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHl8fCh0aGlzLmVuY29kaW5nPVVlLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCksdGhpcy5mYXRhbD0iZmF0YWwiPT09VWUuX2Vycm9yX21vZGUsdGhpcy5pZ25vcmVCT009VWUuX2lnbm9yZUJPTSksVWV9ZnVuY3Rpb24g''@;'; put 'put ''QyhUZSxxZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgQykpdGhyb3cgVHlwZUVycm9yKCJDYWxsZWQgYXMgYSBmdW5jdGlvbi4gRGlkIHlvdSBmb3JnZXQgJ25ldyc/Iik7aWYocWU9TShxZSksdGhpcy5fZW5jb2Rpbmc9bnVsbCx0aGlzLl9lbmNvZGVyPW51bGwsdGhpcy5fZG9fbm90X2ZsdXNo''@;'; put 'put ''PSExLHRoaXMuX2ZhdGFsPXFlLmZhdGFsPyJmYXRhbCI6InJlcGxhY2VtZW50IixxZS5OT05TVEFOREFSRF9hbGxvd0xlZ2FjeUVuY29kaW5nKXt2YXIgVWU9WChUZT12b2lkIDAhPT1UZT9TdHJpbmcoVGUpOk4pO2lmKG51bGw9PT1VZXx8InJlcGxhY2VtZW50Ij09PVVlLm5hbWUpdGhyb3cg''@;'; put 'put ''UmFuZ2VFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitUZSk7aWYoIWVlW1VlLm5hbWVdKXRocm93IEVycm9yKCJFbmNvZGVyIG5vdCBwcmVzZW50LiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7dGhpcy5fZW5jb2Rpbmc9VWV9ZWxzZSB0''@;'; put 'put ''aGlzLl9lbmNvZGluZz1YKCJ1dGYtOCIpLHZvaWQgMCE9PVRlJiYiY29uc29sZSJpbiBhZSYmY29uc29sZS53YXJuKCJUZXh0RW5jb2RlciBjb25zdHJ1Y3RvciBjYWxsZWQgd2l0aCBlbmNvZGluZyBsYWJlbCwgd2hpY2ggaXMgaWdub3JlZC4iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5fHwodGhpcy5lbmNvZGluZz10aGlzLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCkpLHRoaXN9ZnVuY3Rpb24gUyhUZSl7dmFyIHFlPVRlLmZhdGFsLFhlPTAsVWU9MCxodD0wLE1lPTEyOCxEZT0xOTE7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHplLGl0KXtpZihpdD09PUkmJjAhPT1o''@;'; put 'put ''dClyZXR1cm4gaHQ9MCxqKHFlKTtpZihpdD09PUkpcmV0dXJuIEU7aWYoMD09PWh0KXtpZih4KGl0LDAsMTI3KSlyZXR1cm4gaXQ7aWYoeChpdCwxOTQsMjIzKSlodD0xLFhlPTMxJml0O2Vsc2UgaWYoeChpdCwyMjQsMjM5KSkyMjQ9PT1pdCYmKE1lPTE2MCksMjM3PT09aXQmJihEZT0xNTkp''@;'; put 'put ''LGh0PTIsWGU9MTUmaXQ7ZWxzZXtpZigheChpdCwyNDAsMjQ0KSlyZXR1cm4gaihxZSk7MjQwPT09aXQmJihNZT0xNDQpLDI0ND09PWl0JiYoRGU9MTQzKSxodD0zLFhlPTcmaXR9cmV0dXJuIG51bGx9aWYoIXgoaXQsTWUsRGUpKXJldHVybiBYZT1odD1VZT0wLE1lPTEyOCxEZT0xOTEsemUu''@;'; put 'put ''cHJlcGVuZChpdCksaihxZSk7aWYoTWU9MTI4LERlPTE5MSxYZT1YZTw8Nnw2MyZpdCwoVWUrPTEpIT09aHQpcmV0dXJuIG51bGw7dmFyIHV0PVhlO3JldHVybiBYZT1odD1VZT0wLHV0fX1mdW5jdGlvbiB2KFRlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oWGUsVWUpe2lmKFVlPT09SSlyZXR1''@;'; put 'put ''cm4gRTtpZihLKFVlKSlyZXR1cm4gVWU7dmFyIGh0LE1lO3goVWUsMTI4LDIwNDcpPyhodD0xLE1lPTE5Mik6eChVZSwyMDQ4LDY1NTM1KT8oaHQ9MixNZT0yMjQpOngoVWUsNjU1MzYsMTExNDExMSkmJihodD0zLE1lPTI0MCk7Zm9yKHZhciBEZT1bKFVlPj42Kmh0KStNZV07aHQ+MDspRGUu''@;'; put 'put ''cHVzaCgxMjh8NjMmVWU+PjYqKGh0LTEpKSxodC09MTtyZXR1cm4gRGV9fWZ1bmN0aW9uIHAoVGUscWUpe3ZhciBYZT1xZS5mYXRhbDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oVWUsaHQpe2lmKGh0PT09SSlyZXR1cm4gRTtpZih6KGh0KSlyZXR1cm4gaHQ7dmFyIE1lPVRlW2h0LTEyOF07cmV0''@;'; put 'put ''dXJuIG51bGw9PT1NZT9qKFhlKTpNZX19ZnVuY3Rpb24gdyhUZSxxZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFVlLGh0KXtpZihodD09PUkpcmV0dXJuIEU7aWYoSyhodCkpcmV0dXJuIGh0O3ZhciBNZT1zZShodCxUZSk7cmV0dXJuIG51bGw9PT1NZSYmVihodCksTWUrMTI4fX1mdW5jdGlv''@;'; put 'put ''biBKKFRlKXt2YXIgcWU9VGUuZmF0YWwsWGU9MCxVZT0wLGh0PTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKE1lLERlKXtpZihEZT09PUkmJjA9PT1YZSYmMD09PVVlJiYwPT09aHQpcmV0dXJuIEU7dmFyIHplO2lmKERlPT09SSYmKDAhPT1YZXx8MCE9PVVlfHwwIT09aHQpJiYoWGU9MCxVZT0w''@;'; put 'put ''LGh0PTAsaihxZSkpLDAhPT1odCl7emU9bnVsbCx4KERlLDQ4LDU3KSYmKHplPWZ1bmN0aW9uIHVlKFRlKXtpZihUZT4zOTQxOSYmVGU8MTg5ZTN8fFRlPjEyMzc1NzUpcmV0dXJuIG51bGw7aWYoNzQ1Nz09PVRlKXJldHVybiA1OTMzNTt2YXIgaHQscWU9MCxYZT0wLFVlPWhlKCJnYjE4MDMw''@;'; put 'put ''LXJhbmdlcyIpO2ZvcihodD0wO2h0PFVlLmxlbmd0aDsrK2h0KXt2YXIgTWU9VWVbaHRdO2lmKCEoTWVbMF08PVRlKSlicmVhaztxZT1NZVswXSxYZT1NZVsxXX1yZXR1cm4gWGUrVGUtcWV9KDEwKigxMjYqKDEwKihYZS0xMjkpK1VlLTQ4KStodC0xMjkpK0RlLTQ4KSk7dmFyIGl0PVtVZSxo''@;'; put 'put ''dCxEZV07cmV0dXJuIFhlPTAsVWU9MCxodD0wLG51bGw9PT16ZT8oTWUucHJlcGVuZChpdCksaihxZSkpOnplfWlmKDAhPT1VZSlyZXR1cm4geChEZSwxMjksMjU0KT8oaHQ9RGUsbnVsbCk6KE1lLnByZXBlbmQoW1VlLERlXSksWGU9MCxVZT0wLGoocWUpKTtpZigwIT09WGUpe2lmKHgoRGUs''@;'; put 'put ''NDgsNTcpKXJldHVybiBVZT1EZSxudWxsO3ZhciB1dD1YZSxNdD1udWxsO1hlPTA7dmFyIEh0PURlPDEyNz82NDo2NTtyZXR1cm4oeChEZSw2NCwxMjYpfHx4KERlLDEyOCwyNTQpKSYmKE10PTE5MCoodXQtMTI5KSsoRGUtSHQpKSxudWxsPT09KHplPW51bGw9PT1NdD9udWxsOm9lKE10LGhl''@;'; put 'put ''KCJnYjE4MDMwIikpKSYmeihEZSkmJk1lLnByZXBlbmQoRGUpLG51bGw9PT16ZT9qKHFlKTp6ZX1yZXR1cm4geihEZSk/RGU6MTI4PT09RGU/ODM2NDp4KERlLDEyOSwyNTQpPyhYZT1EZSxudWxsKTpqKHFlKX19ZnVuY3Rpb24gbmUoVGUscWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihVZSxo''@;'; put 'put ''dCl7aWYoaHQ9PT1JKXJldHVybiBFO2lmKEsoaHQpKXJldHVybiBodDtpZig1ODg1Mz09PWh0KXJldHVybiBWKGh0KTtpZihxZSYmODM2ND09PWh0KXJldHVybiAxMjg7dmFyIE1lPXNlKGh0LGhlKCJnYjE4MDMwIikpO2lmKG51bGwhPT1NZSl7dmFyIHplPU1lJTE5MDtyZXR1cm5bbGUoTWUv''@;'; put 'put ''MTkwKSsxMjksemUrKHplPDYzPzY0OjY1KV19aWYocWUpcmV0dXJuIFYoaHQpO01lPWZ1bmN0aW9uIGNlKFRlKXtpZig1OTMzNT09PVRlKXJldHVybiA3NDU3O3ZhciBodCxxZT0wLFhlPTAsVWU9aGUoImdiMTgwMzAtcmFuZ2VzIik7Zm9yKGh0PTA7aHQ8VWUubGVuZ3RoOysraHQpe3ZhciBN''@;'; put 'put ''ZT1VZVtodF07aWYoIShNZVsxXTw9VGUpKWJyZWFrO3FlPU1lWzFdLFhlPU1lWzBdfXJldHVybiBYZStUZS1xZX0oaHQpO3ZhciB1dD1sZShNZS8xMC8xMjYvMTApLE10PWxlKChNZS09MTAqdXQqMTI2KjEwKS8xMC8xMjYpLEh0PWxlKChNZS09MTAqTXQqMTI2KS8xMCk7cmV0dXJuW3V0KzEy''@;'; put 'put ''OSxNdCs0OCxIdCsxMjksTWUtMTAqSHQrNDhdfX1mdW5jdGlvbiBkZShUZSl7dmFyIHFlPVRlLmZhdGFsLFhlPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFVlLGh0KXtpZihodD09PUkmJjAhPT1YZSlyZXR1cm4gWGU9MCxqKHFlKTtpZihodD09PUkmJjA9PT1YZSlyZXR1cm4gRTtpZigwIT09''@;'; put 'put ''WGUpe3ZhciBNZT1YZSxEZT1udWxsO1hlPTA7dmFyIHplPWh0PDEyNz82NDo5ODtzd2l0Y2goKHgoaHQsNjQsMTI2KXx8eChodCwxNjEsMjU0KSkmJihEZT0xNTcqKE1lLTEyOSkrKGh0LXplKSksRGUpe2Nhc2UgMTEzMzpyZXR1cm5bMjAyLDc3Ml07Y2FzZSAxMTM1OnJldHVyblsyMDIsNzgw''@;'; put 'put ''XTtjYXNlIDExNjQ6cmV0dXJuWzIzNCw3NzJdO2Nhc2UgMTE2NjpyZXR1cm5bMjM0LDc4MF19dmFyIGl0PW51bGw9PT1EZT9udWxsOm9lKERlLGhlKCJiaWc1IikpO3JldHVybiBudWxsPT09aXQmJnooaHQpJiZVZS5wcmVwZW5kKGh0KSxudWxsPT09aXQ/aihxZSk6aXR9cmV0dXJuIHooaHQp''@;'; put 'put ''P2h0OngoaHQsMTI5LDI1NCk/KFhlPWh0LG51bGwpOmoocWUpfX1mdW5jdGlvbiBmZShUZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFhlLFVlKXtpZihVZT09PUkpcmV0dXJuIEU7aWYoSyhVZSkpcmV0dXJuIFVlO3ZhciBodD1mdW5jdGlvbiBEKFRlKXt2YXIgcWU9SD1IfHxoZSgiYmlnNSIp''@;'; put 'put ''Lm1hcChmdW5jdGlvbihYZSxVZSl7cmV0dXJuIFVlPDUwMjQ/bnVsbDpYZX0pO3JldHVybiA5NTUyPT09VGV8fDk1NjY9PT1UZXx8OTU2OT09PVRlfHw5NTc4PT09VGV8fDIxMzEzPT09VGV8fDIxMzE3PT09VGU/cWUubGFzdEluZGV4T2YoVGUpOnNlKFRlLHFlKX0oVWUpO2lmKG51bGw9PT1o''@;'; put 'put ''dClyZXR1cm4gVihVZSk7dmFyIE1lPWxlKGh0LzE1NykrMTI5O2lmKE1lPDE2MSlyZXR1cm4gVihVZSk7dmFyIERlPWh0JTE1NztyZXR1cm5bTWUsRGUrKERlPDYzPzY0Ojk4KV19fWZ1bmN0aW9uIHhlKFRlKXt2YXIgcWU9VGUuZmF0YWwsWGU9ITEsVWU9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rp''@;'; put 'put ''b24oaHQsTWUpe2lmKE1lPT09SSYmMCE9PVVlKXJldHVybiBVZT0wLGoocWUpO2lmKE1lPT09SSYmMD09PVVlKXJldHVybiBFO2lmKDE0Mj09PVVlJiZ4KE1lLDE2MSwyMjMpKXJldHVybiBVZT0wLDY1MjE2K01lO2lmKDE0Mz09PVVlJiZ4KE1lLDE2MSwyNTQpKXJldHVybiBYZT0hMCxVZT1N''@;'; put 'put ''ZSxudWxsO2lmKDAhPT1VZSl7dmFyIERlPVVlO1VlPTA7dmFyIHplPW51bGw7cmV0dXJuIHgoRGUsMTYxLDI1NCkmJngoTWUsMTYxLDI1NCkmJih6ZT1vZSg5NCooRGUtMTYxKSsoTWUtMTYxKSxoZShYZT8iamlzMDIxMiI6ImppczAyMDgiKSkpLFhlPSExLHgoTWUsMTYxLDI1NCl8fGh0LnBy''@;'; put 'put ''ZXBlbmQoTWUpLG51bGw9PT16ZT9qKHFlKTp6ZX1yZXR1cm4geihNZSk/TWU6MTQyPT09TWV8fDE0Mz09PU1lfHx4KE1lLDE2MSwyNTQpPyhVZT1NZSxudWxsKTpqKHFlKX19ZnVuY3Rpb24gTGUoVGUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihYZSxVZSl7aWYoVWU9PT1JKXJldHVybiBFO2lm''@;'; put 'put ''KEsoVWUpKXJldHVybiBVZTtpZigxNjU9PT1VZSlyZXR1cm4gOTI7aWYoODI1ND09PVVlKXJldHVybiAxMjY7aWYoeChVZSw2NTM3Nyw2NTQzOSkpcmV0dXJuWzE0MixVZS02NTM3NysxNjFdOzg3MjI9PT1VZSYmKFVlPTY1MjkzKTt2YXIgaHQ9c2UoVWUsaGUoImppczAyMDgiKSk7cmV0dXJu''@;'; put 'put ''IG51bGw9PT1odD9WKFVlKTpbbGUoaHQvOTQpKzE2MSxodCU5NCsxNjFdfX1mdW5jdGlvbiBGZShUZSl7dmFyIHFlPVRlLmZhdGFsLFVlPTAsTWU9MCxEZT0hMTt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oemUsaXQpe3N3aXRjaChVZSl7ZGVmYXVsdDpjYXNlIDA6cmV0dXJuIDI3PT09aXQ/KFVl''@;'; put 'put ''PTUsbnVsbCk6eChpdCwwLDEyNykmJjE0IT09aXQmJjE1IT09aXQmJjI3IT09aXQ/KERlPSExLGl0KTppdD09PUk/RTooRGU9ITEsaihxZSkpO2Nhc2UgMTpyZXR1cm4gMjc9PT1pdD8oVWU9NSxudWxsKTo5Mj09PWl0PyhEZT0hMSwxNjUpOjEyNj09PWl0PyhEZT0hMSw4MjU0KTp4KGl0LDAs''@;'; put 'put ''MTI3KSYmMTQhPT1pdCYmMTUhPT1pdCYmMjchPT1pdCYmOTIhPT1pdCYmMTI2IT09aXQ/KERlPSExLGl0KTppdD09PUk/RTooRGU9ITEsaihxZSkpO2Nhc2UgMjpyZXR1cm4gMjc9PT1pdD8oVWU9NSxudWxsKTp4KGl0LDMzLDk1KT8oRGU9ITEsNjUzNDQraXQpOml0PT09ST9FOihEZT0hMSxq''@;'; put 'put ''KHFlKSk7Y2FzZSAzOnJldHVybiAyNz09PWl0PyhVZT01LG51bGwpOngoaXQsMzMsMTI2KT8oRGU9ITEsTWU9aXQsVWU9NCxudWxsKTppdD09PUk/RTooRGU9ITEsaihxZSkpO2Nhc2UgNDppZigyNz09PWl0KXJldHVybiBVZT01LGoocWUpO2lmKHgoaXQsMzMsMTI2KSl7VWU9Mzt2YXIgTXQ9''@;'; put 'put ''b2UoOTQqKE1lLTMzKStpdC0zMyxoZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PU10P2oocWUpOk10fXJldHVybiBpdD09PUk/KFVlPTMsemUucHJlcGVuZChpdCksaihxZSkpOihVZT0zLGoocWUpKTtjYXNlIDU6cmV0dXJuIDM2PT09aXR8fDQwPT09aXQ/KE1lPWl0LFVlPTYsbnVsbCk6''@;'; put 'put ''KHplLnByZXBlbmQoaXQpLERlPSExLFVlPTAsaihxZSkpO2Nhc2UgNjp2YXIgSHQ9TWU7TWU9MDt2YXIgUHQ9bnVsbDtpZig0MD09PUh0JiY2Nj09PWl0JiYoUHQ9MCksNDA9PT1IdCYmNzQ9PT1pdCYmKFB0PTEpLDQwPT09SHQmJjczPT09aXQmJihQdD0yKSwzNj09PUh0JiYoNjQ9PT1pdHx8''@;'; put 'put ''NjY9PT1pdCkmJihQdD0zKSxudWxsIT09UHQpe1VlPVVlPVB0O3ZhciBvbj1EZTtyZXR1cm4gRGU9ITAsb24/aihxZSk6bnVsbH1yZXR1cm4gemUucHJlcGVuZChbSHQsaXRdKSxEZT0hMSxVZT0wLGoocWUpfX19ZnVuY3Rpb24gT2UoVGUpe3ZhciBVZT0wO3RoaXMuaGFuZGxlcj1mdW5jdGlv''@;'; put 'put ''bihodCxNZSl7aWYoTWU9PT1JJiYwIT09VWUpcmV0dXJuIGh0LnByZXBlbmQoTWUpLFVlPTAsWzI3LDQwLDY2XTtpZihNZT09PUkmJjA9PT1VZSlyZXR1cm4gRTtpZighKDAhPT1VZSYmMSE9PVVlfHwxNCE9PU1lJiYxNSE9PU1lJiYyNyE9PU1lKSlyZXR1cm4gVig2NTUzMyk7aWYoMD09PVVl''@;'; put 'put ''JiZLKE1lKSlyZXR1cm4gTWU7aWYoMT09PVVlJiYoSyhNZSkmJjkyIT09TWUmJjEyNiE9PU1lfHwxNjU9PU1lfHw4MjU0PT1NZSkpe2lmKEsoTWUpKXJldHVybiBNZTtpZigxNjU9PT1NZSlyZXR1cm4gOTI7aWYoODI1ND09PU1lKXJldHVybiAxMjZ9aWYoSyhNZSkmJjAhPT1VZSlyZXR1cm4g''@;'; put 'put ''aHQucHJlcGVuZChNZSksVWU9MCxbMjcsNDAsNjZdO2lmKCgxNjU9PT1NZXx8ODI1ND09PU1lKSYmMSE9PVVlKXJldHVybiBodC5wcmVwZW5kKE1lKSxVZT0xLFsyNyw0MCw3NF07ODcyMj09PU1lJiYoTWU9NjUyOTMpO3ZhciBEZT1zZShNZSxoZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09''@;'; put 'put ''PURlP1YoTWUpOjIhPT1VZT8oaHQucHJlcGVuZChNZSksVWU9MixbMjcsMzYsNjZdKTpbbGUoRGUvOTQpKzMzLERlJTk0KzMzXX19ZnVuY3Rpb24gQmUoVGUpe3ZhciBxZT1UZS5mYXRhbCxYZT0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihVZSxodCl7aWYoaHQ9PT1JJiYwIT09WGUpcmV0dXJu''@;'; put 'put ''IFhlPTAsaihxZSk7aWYoaHQ9PT1JJiYwPT09WGUpcmV0dXJuIEU7aWYoMCE9PVhlKXt2YXIgTWU9WGUsRGU9bnVsbDtYZT0wO3ZhciB6ZT1odDwxMjc/NjQ6NjUsaXQ9TWU8MTYwPzEyOToxOTM7aWYoKHgoaHQsNjQsMTI2KXx8eChodCwxMjgsMjUyKSkmJihEZT0xODgqKE1lLWl0KStodC16''@;'; put 'put ''ZSkseChEZSw4ODM2LDEwNzE1KSlyZXR1cm4gNDg1MDgrRGU7dmFyIHV0PW51bGw9PT1EZT9udWxsOm9lKERlLGhlKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09dXQmJnooaHQpJiZVZS5wcmVwZW5kKGh0KSxudWxsPT09dXQ/aihxZSk6dXR9cmV0dXJuIHooaHQpfHwxMjg9PT1odD9odDp4''@;'; put 'put ''KGh0LDE2MSwyMjMpPzY1MjE2K2h0OngoaHQsMTI5LDE1OSl8fHgoaHQsMjI0LDI1Mik/KFhlPWh0LG51bGwpOmoocWUpfX1mdW5jdGlvbiBXZShUZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFhlLFVlKXtpZihVZT09PUkpcmV0dXJuIEU7aWYoSyhVZSl8fDEyOD09PVVlKXJldHVybiBVZTtp''@;'; put 'put ''ZigxNjU9PT1VZSlyZXR1cm4gOTI7aWYoODI1ND09PVVlKXJldHVybiAxMjY7aWYoeChVZSw2NTM3Nyw2NTQzOSkpcmV0dXJuIFVlLTY1Mzc3KzE2MTs4NzIyPT09VWUmJihVZT02NTI5Myk7dmFyIGh0PWZ1bmN0aW9uIEcoVGUpe3JldHVybihiPWJ8fGhlKCJqaXMwMjA4IikubWFwKGZ1bmN0''@;'; put 'put ''aW9uKFhlLFVlKXtyZXR1cm4geChVZSw4MjcyLDg4MzUpP251bGw6WGV9KSkuaW5kZXhPZihUZSl9KFVlKTtpZihudWxsPT09aHQpcmV0dXJuIFYoVWUpO3ZhciBNZT1sZShodC8xODgpLHplPWh0JTE4ODtyZXR1cm5bTWUrKE1lPDMxPzEyOToxOTMpLHplKyh6ZTw2Mz82NDo2NSldfX1mdW5j''@;'; put 'put ''dGlvbiBLZShUZSl7dmFyIHFlPVRlLmZhdGFsLFhlPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFVlLGh0KXtpZihodD09PUkmJjAhPT1YZSlyZXR1cm4gWGU9MCxqKHFlKTtpZihodD09PUkmJjA9PT1YZSlyZXR1cm4gRTtpZigwIT09WGUpe3ZhciBNZT1YZSxEZT1udWxsO1hlPTAseChodCw2''@;'; put 'put ''NSwyNTQpJiYoRGU9MTkwKihNZS0xMjkpKyhodC02NSkpO3ZhciB6ZT1udWxsPT09RGU/bnVsbDpvZShEZSxoZSgiZXVjLWtyIikpO3JldHVybiBudWxsPT09RGUmJnooaHQpJiZVZS5wcmVwZW5kKGh0KSxudWxsPT09emU/aihxZSk6emV9cmV0dXJuIHooaHQpP2h0OngoaHQsMTI5LDI1NCk/''@;'; put 'put ''KFhlPWh0LG51bGwpOmoocWUpfX1mdW5jdGlvbiBZZShUZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFhlLFVlKXtpZihVZT09PUkpcmV0dXJuIEU7aWYoSyhVZSkpcmV0dXJuIFVlO3ZhciBodD1zZShVZSxoZSgiZXVjLWtyIikpO3JldHVybiBudWxsPT09aHQ/VihVZSk6W2xlKGh0LzE5MCkr''@;'; put 'put ''MTI5LGh0JTE5MCs2NV19fWZ1bmN0aW9uIEplKFRlLHFlKXt2YXIgWGU9VGU+PjgsVWU9MjU1JlRlO3JldHVybiBxZT9bWGUsVWVdOltVZSxYZV19ZnVuY3Rpb24gbHQoVGUscWUpe3ZhciBYZT1xZS5mYXRhbCxVZT1udWxsLGh0PW51bGw7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKE1lLERlKXtp''@;'; put 'put ''ZihEZT09PUkmJihudWxsIT09VWV8fG51bGwhPT1odCkpcmV0dXJuIGooWGUpO2lmKERlPT09SSYmbnVsbD09PVVlJiZudWxsPT09aHQpcmV0dXJuIEU7aWYobnVsbD09PVVlKXJldHVybiBVZT1EZSxudWxsO3ZhciB6ZTtpZih6ZT1UZT8oVWU8PDgpK0RlOihEZTw8OCkrVWUsVWU9bnVsbCxu''@;'; put 'put ''dWxsIT09aHQpe3ZhciBpdD1odDtyZXR1cm4gaHQ9bnVsbCx4KHplLDU2MzIwLDU3MzQzKT82NTUzNisxMDI0KihpdC01NTI5NikrKHplLTU2MzIwKTooTWUucHJlcGVuZChKZSh6ZSxUZSkpLGooWGUpKX1yZXR1cm4geCh6ZSw1NTI5Niw1NjMxOSk/KGh0PXplLG51bGwpOngoemUsNTYzMjAs''@;'; put 'put ''NTczNDMpP2ooWGUpOnplfX1mdW5jdGlvbiBQZShUZSxxZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFVlLGh0KXtpZihodD09PUkpcmV0dXJuIEU7aWYoeChodCwwLDY1NTM1KSlyZXR1cm4gSmUoaHQsVGUpO3ZhciBNZT1KZSg1NTI5NisoaHQtNjU1MzY+PjEwKSxUZSksRGU9SmUoNTYzMjAr''@;'; put 'put ''KGh0LTY1NTM2JjEwMjMpLFRlKTtyZXR1cm4gTWUuY29uY2F0KERlKX19ZnVuY3Rpb24gYmUoVGUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihYZSxVZSl7cmV0dXJuIFVlPT09ST9FOnooVWUpP1VlOjYzMzYwK1VlLTEyOH19ZnVuY3Rpb24gQWUoVGUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihY''@;'; put 'put ''ZSxVZSl7cmV0dXJuIFVlPT09ST9FOksoVWUpP1VlOngoVWUsNjMzNjAsNjM0ODcpP1VlLTYzMzYwKzEyODpWKFVlKX19T2JqZWN0LmRlZmluZVByb3BlcnR5JiYoT2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJlbmNvZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJmYXRhbCIse2dldDpmdW5jdGlvbigpe3JldHVybiJmYXRhbCI9PT10aGlzLl9lcnJvcl9tb2RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSwiaWdu''@;'; put 'put ''b3JlQk9NIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lnbm9yZUJPTX19KSksZy5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHFlLFhlKXt2YXIgVWU7VWU9Im9iamVjdCI9PXR5cGVvZiBxZSYmcWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShxZSk6Im9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBxZSYmImJ1ZmZlciJpbiBxZSYmcWUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/bmV3IFVpbnQ4QXJyYXkocWUuYnVmZmVyLHFlLmJ5dGVPZmZzZXQscWUuYnl0ZUxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoMCksWGU9TShYZSksdGhpcy5fZG9fbm90X2ZsdXNo''@;'; put 'put ''fHwodGhpcy5fZGVjb2Rlcj10ZVt0aGlzLl9lbmNvZGluZy5uYW1lXSh7ZmF0YWw6ImZhdGFsIj09PXRoaXMuX2Vycm9yX21vZGV9KSx0aGlzLl9CT01zZWVuPSExKSx0aGlzLl9kb19ub3RfZmx1c2g9ISFYZS5zdHJlYW07Zm9yKHZhciBEZSxodD1uZXcgayhVZSksTWU9W107Oyl7dmFyIHpl''@;'; put 'put ''PWh0LnJlYWQoKTtpZih6ZT09PUl8fChEZT10aGlzLl9kZWNvZGVyLmhhbmRsZXIoaHQsemUpKT09PUUpYnJlYWs7bnVsbCE9PURlJiYoQXJyYXkuaXNBcnJheShEZSk/TWUucHVzaC5hcHBseShNZSxEZSk6TWUucHVzaChEZSkpfWlmKCF0aGlzLl9kb19ub3RfZmx1c2gpe2Rve2lmKChEZT10''@;'; put 'put ''aGlzLl9kZWNvZGVyLmhhbmRsZXIoaHQsaHQucmVhZCgpKSk9PT1FKWJyZWFrO251bGwhPT1EZSYmKEFycmF5LmlzQXJyYXkoRGUpP01lLnB1c2guYXBwbHkoTWUsRGUpOk1lLnB1c2goRGUpKX13aGlsZSghaHQuZW5kT2ZTdHJlYW0oKSk7dGhpcy5fZGVjb2Rlcj1udWxsfXJldHVybiBmdW5j''@;'; put 'put ''dGlvbiBpdCh1dCl7cmV0dXJuIGZ1bmN0aW9uIG0oVGUscWUpe3JldHVybi0xIT09VGUuaW5kZXhPZihxZSl9KFsiVVRGLTgiLCJVVEYtMTZMRSIsIlVURi0xNkJFIl0sdGhpcy5fZW5jb2RpbmcubmFtZSkmJiF0aGlzLl9pZ25vcmVCT00mJiF0aGlzLl9CT01zZWVuJiYodXQubGVuZ3RoPjAm''@;'; put 'put ''JjY1Mjc5PT09dXRbMF0/KHRoaXMuX0JPTXNlZW49ITAsdXQuc2hpZnQoKSk6dXQubGVuZ3RoPjAmJih0aGlzLl9CT01zZWVuPSEwKSksZnVuY3Rpb24gUihUZSl7Zm9yKHZhciBxZT0iIixYZT0wO1hlPFRlLmxlbmd0aDsrK1hlKXt2YXIgVWU9VGVbWGVdO1VlPD02NTUzNT9xZSs9U3RyaW5n''@;'; put 'put ''LmZyb21DaGFyQ29kZShVZSk6KFVlLT02NTUzNixxZSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoVWU+PjEwKSw1NjMyMCsoMTAyMyZVZSkpKX1yZXR1cm4gcWV9KHV0KX0uY2FsbCh0aGlzLE1lKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoQy5w''@;'; put 'put ''cm90b3R5cGUsImVuY29kaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKX19KSxDLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24ocWUsWGUpe3FlPXZvaWQgMD09PXFlPyIiOlN0cmluZyhxZSksWGU9TShYZSksdGhpcy5fZG9fbm90''@;'; put 'put ''X2ZsdXNofHwodGhpcy5fZW5jb2Rlcj1lZVt0aGlzLl9lbmNvZGluZy5uYW1lXSh7ZmF0YWw6ImZhdGFsIj09PXRoaXMuX2ZhdGFsfSkpLHRoaXMuX2RvX25vdF9mbHVzaD0hIVhlLnN0cmVhbTtmb3IodmFyIE1lLFVlPW5ldyBrKGZ1bmN0aW9uIE8oVGUpe2Zvcih2YXIgcWU9U3RyaW5nKFRl''@;'; put 'put ''KSxYZT1xZS5sZW5ndGgsVWU9MCxodD1bXTtVZTxYZTspe3ZhciBNZT1xZS5jaGFyQ29kZUF0KFVlKTtpZihNZTw1NTI5Nnx8TWU+NTczNDMpaHQucHVzaChNZSk7ZWxzZSBpZig1NjMyMDw9TWUmJk1lPD01NzM0MylodC5wdXNoKDY1NTMzKTtlbHNlIGlmKDU1Mjk2PD1NZSYmTWU8PTU2MzE5''@;'; put 'put ''KWlmKFVlPT09WGUtMSlodC5wdXNoKDY1NTMzKTtlbHNle3ZhciBEZT1xZS5jaGFyQ29kZUF0KFVlKzEpOzU2MzIwPD1EZSYmRGU8PTU3MzQzPyhodC5wdXNoKDY1NTM2KygoMTAyMyZNZSk8PDEwKSsoMTAyMyZEZSkpLFVlKz0xKTpodC5wdXNoKDY1NTMzKX1VZSs9MX1yZXR1cm4gaHR9KHFl''@;'; put 'put ''KSksaHQ9W107Oyl7dmFyIERlPVVlLnJlYWQoKTtpZihEZT09PUl8fChNZT10aGlzLl9lbmNvZGVyLmhhbmRsZXIoVWUsRGUpKT09PUUpYnJlYWs7QXJyYXkuaXNBcnJheShNZSk/aHQucHVzaC5hcHBseShodCxNZSk6aHQucHVzaChNZSl9aWYoIXRoaXMuX2RvX25vdF9mbHVzaCl7Zm9yKDso''@;'; put 'put ''TWU9dGhpcy5fZW5jb2Rlci5oYW5kbGVyKFVlLFVlLnJlYWQoKSkpIT09RTspQXJyYXkuaXNBcnJheShNZSk/aHQucHVzaC5hcHBseShodCxNZSk6aHQucHVzaChNZSk7dGhpcy5fZW5jb2Rlcj1udWxsfXJldHVybiBuZXcgVWludDhBcnJheShodCl9LGVlWyJVVEYtOCJdPWZ1bmN0aW9uKFRl''@;'; put 'put ''KXtyZXR1cm4gbmV3IHYoVGUpfSx0ZVsiVVRGLTgiXT1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBTKFRlKX0sImVuY29kaW5nLWluZGV4ZXMiaW4gYWUmJlUuZm9yRWFjaChmdW5jdGlvbihUZSl7IkxlZ2FjeSBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MiPT09VGUuaGVhZGluZyYmVGUuZW5jb2Rp''@;'; put 'put ''bmdzLmZvckVhY2goZnVuY3Rpb24ocWUpe3ZhciBYZT1xZS5uYW1lLFVlPWhlKFhlLnRvTG93ZXJDYXNlKCkpO3RlW1hlXT1mdW5jdGlvbihodCl7cmV0dXJuIG5ldyBwKFVlLGh0KX0sZWVbWGVdPWZ1bmN0aW9uKGh0KXtyZXR1cm4gbmV3IHcoVWUsaHQpfX0pfSksdGUuR0JLPWZ1bmN0aW9u''@;'; put 'put ''KFRlKXtyZXR1cm4gbmV3IEooVGUpfSxlZS5HQks9ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgbmUoVGUsITApfSxlZS5nYjE4MDMwPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IG5lKFRlKX0sdGUuZ2IxODAzMD1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBKKFRlKX0sZWUuQmlnNT1mdW5jdGlv''@;'; put 'put ''bihUZSl7cmV0dXJuIG5ldyBmZShUZSl9LHRlLkJpZzU9ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgZGUoVGUpfSxlZVsiRVVDLUpQIl09ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgTGUoVGUpfSx0ZVsiRVVDLUpQIl09ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgeGUoVGUpfSxlZVsiSVNPLTIw''@;'; put 'put ''MjItSlAiXT1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBPZShUZSl9LHRlWyJJU08tMjAyMi1KUCJdPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IEZlKFRlKX0sZWUuU2hpZnRfSklTPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IFdlKFRlKX0sdGUuU2hpZnRfSklTPWZ1bmN0aW9uKFRlKXtyZXR1''@;'; put 'put ''cm4gbmV3IEJlKFRlKX0sZWVbIkVVQy1LUiJdPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IFllKFRlKX0sdGVbIkVVQy1LUiJdPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IEtlKFRlKX0sZWVbIlVURi0xNkJFIl09ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgUGUoITAsVGUpfSx0ZVsiVVRGLTE2''@;'; put 'put ''QkUiXT1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBsdCghMCxUZSl9LGVlWyJVVEYtMTZMRSJdPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IFBlKCExLFRlKX0sdGVbIlVURi0xNkxFIl09ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgbHQoITEsVGUpfSxlZVsieC11c2VyLWRlZmluZWQiXT1mdW5j''@;'; put 'put ''dGlvbihUZSl7cmV0dXJuIG5ldyBBZShUZSl9LHRlWyJ4LXVzZXItZGVmaW5lZCJdPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IGJlKFRlKX0sYWUuVGV4dEVuY29kZXJ8fChhZS5UZXh0RW5jb2Rlcj1DKSxhZS5UZXh0RGVjb2Rlcnx8KGFlLlRleHREZWNvZGVyPWcpLGF0LmV4cG9ydHMmJihh''@;'; put 'put ''dC5leHBvcnRzPXtUZXh0RW5jb2RlcjphZS5UZXh0RW5jb2RlcixUZXh0RGVjb2RlcjphZS5UZXh0RGVjb2RlcixFbmNvZGluZ0luZGV4ZXM6YWVbImVuY29kaW5nLWluZGV4ZXMiXX0pfSh0aGlzfHx7fSl9LDkwNDk2OmF0PT57ZnVuY3Rpb24gRihhZSl7dHJ5e2lmKCFnbG9iYWwubG9jYWxT''@;'; put 'put ''dG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciB4PWdsb2JhbC5sb2NhbFN0b3JhZ2VbYWVdO3JldHVybiBudWxsIT14JiYidHJ1ZSI9PT1TdHJpbmcoeCkudG9Mb3dlckNhc2UoKX1hdC5leHBvcnRzPWZ1bmN0aW9uIEllKGFlLHgpe2lmKEYoIm5vRGVwcmVjYXRpb24iKSlyZXR1''@;'; put 'put ''cm4gYWU7dmFyIG09ITE7cmV0dXJuIGZ1bmN0aW9uIGxlKCl7aWYoIW0pe2lmKEYoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3IoeCk7RigidHJhY2VEZXByZWNhdGlvbiIpP2NvbnNvbGUudHJhY2UoeCk6Y29uc29sZS53YXJuKHgpLG09ITB9cmV0dXJuIGFlLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKX19fSw3ODUzMjooYXQsSWUsRik9PnshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5leHBvcnRzLmlzX3VyaT1tLGFlLmV4cG9ydHMuaXNfaHR0cF91cmk9bGUsYWUuZXhwb3J0cy5pc19odHRwc191cmk9TSxhZS5leHBvcnRzLmlzX3dlYl91cmk9TyxhZS5leHBv''@;'; put 'put ''cnRzLmlzVXJpPW0sYWUuZXhwb3J0cy5pc0h0dHBVcmk9bGUsYWUuZXhwb3J0cy5pc0h0dHBzVXJpPU0sYWUuZXhwb3J0cy5pc1dlYlVyaT1PO3ZhciB4PWZ1bmN0aW9uKFIpe3JldHVybiBSLm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/''@;'; put 'put ''KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBtKFIpe2lmKFImJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoUikmJiEvJVteMC05YS1mXS9pLnRlc3QoUikmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2ku''@;'; put 'put ''dGVzdChSKSl7dmFyIHosSSxrLEUsaixLPSIiLFY9IiI7aWYoST0oej14KFIpKVsyXSxrPXpbM10sRT16WzRdLGo9els1XSwoSz16WzFdKSYmSy5sZW5ndGgmJmsubGVuZ3RoPj0wKXtpZihJJiZJLmxlbmd0aCl7aWYoMCE9PWsubGVuZ3RoJiYhL15cLy8udGVzdChrKSlyZXR1cm59ZWxzZSBp''@;'; put 'put ''ZigvXlwvXC8vLnRlc3QoaykpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KEsudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFYrPUsrIjoiLEkmJkkubGVuZ3RoJiYoVis9Ii8vIitJKSxWKz1rLEUmJkUubGVuZ3RoJiYoVis9Ij8iK0UpLGomJmoubGVuZ3RoJiYoVis9IiMi''@;'; put 'put ''K2opLFZ9fX1mdW5jdGlvbiBsZShSLHope2lmKG0oUikpe3ZhciBLLEUsVixCLEk9IiIsaz0iIixqPSIiLFk9IiI7aWYoaz0oSz14KFIpKVsyXSxFPUtbM10sVj1LWzRdLEI9S1s1XSxJPUtbMV0pe2lmKHope2lmKCJodHRwcyIhPUkudG9Mb3dlckNhc2UoKSlyZXR1cm59ZWxzZSBpZigiaHR0''@;'; put 'put ''cCIhPUkudG9Mb3dlckNhc2UoKSlyZXR1cm47aWYoaylyZXR1cm4vOihcZCspJC8udGVzdChrKSYmKGo9ay5tYXRjaCgvOihcZCspJC8pWzBdLGs9ay5yZXBsYWNlKC86XGQrJC8sIiIpKSxZKz1JKyI6IixZKz0iLy8iK2ssaiYmKFkrPWopLFkrPUUsViYmVi5sZW5ndGgmJihZKz0iPyIrViks''@;'; put 'put ''QiYmQi5sZW5ndGgmJihZKz0iIyIrQiksWX19fWZ1bmN0aW9uIE0oUil7cmV0dXJuIGxlKFIsITApfWZ1bmN0aW9uIE8oUil7cmV0dXJuIGxlKFIpfHxNKFIpfX0oYXQ9Ri5ubWQoYXQpKX0sODE0NTA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDEyMDE0KSx4PUYoOTQ2NzYp''@;'; put 'put ''LG09VHlwZUVycm9yO2F0LmV4cG9ydHM9ZnVuY3Rpb24obGUpe2lmKGFlKGxlKSlyZXR1cm4gbGU7dGhyb3cgbSh4KGxlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSw3MDA4OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxMjAxNCkseD1TdHJpbmcsbT1UeXBlRXJyb3I7YXQu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbihsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBsZXx8YWUobGUpKXJldHVybiBsZTt0aHJvdyBtKCJDYW4ndCBzZXQgIit4KGxlKSsiIGFzIGEgcHJvdG90eXBlIil9fSw3NDk2NTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjU0NikseD1GKDc0NDEw''@;'; put 'put ''KSxtPUYoNTExODMpLmYsbGU9YWUoInVuc2NvcGFibGVzIiksTT1BcnJheS5wcm90b3R5cGU7bnVsbD09TVtsZV0mJm0oTSxsZSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOngobnVsbCl9KSxhdC5leHBvcnRzPWZ1bmN0aW9uKE8pe01bbGVdW09dPSEwfX0sNTg2NDc6KGF0LEllLEYpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBhZT1GKDEzODQ5KSx4PVN0cmluZyxtPVR5cGVFcnJvcjthdC5leHBvcnRzPWZ1bmN0aW9uKGxlKXtpZihhZShsZSkpcmV0dXJuIGxlO3Rocm93IG0oeChsZSkrIiBpcyBub3QgYW4gb2JqZWN0Iil9fSwzNjMwNTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFl''@;'; put 'put ''PUYoNTAzMjcpLHg9Rig3NjE2MyksbT1GKDU0NDUwKSxsZT1mdW5jdGlvbihNKXtyZXR1cm4gZnVuY3Rpb24oTyxSLHope3ZhciBFLEs9YWUoTyksST1tKEspLGs9eCh6LEkpO2lmKE0mJlIhPVIpe2Zvcig7ST5rOylpZigoRT1LW2srK10pIT1FKXJldHVybiEwfWVsc2UgZm9yKDtJPms7aysr''@;'; put 'put ''KWlmKChNfHxrIGluIEspJiZLW2tdPT09UilyZXR1cm4gTXx8a3x8MDtyZXR1cm4hTSYmLTF9fTthdC5leHBvcnRzPXtpbmNsdWRlczpsZSghMCksaW5kZXhPZjpsZSghMSl9fSw4Njc1OTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODU2MjQpLHg9RigyOTEwNiksbT1UeXBl''@;'; put 'put ''RXJyb3IsbGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixNPWFlJiYhZnVuY3Rpb24oKXtpZih2b2lkIDAhPT10aGlzKXJldHVybiEwO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkubGVuZ3RoPTF9Y2F0Y2goTyl7cmV0dXJuIE8g''@;'; put 'put ''aW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpO2F0LmV4cG9ydHM9TT9mdW5jdGlvbihPLFIpe2lmKHgoTykmJiFsZShPLCJsZW5ndGgiKS53cml0YWJsZSl0aHJvdyBtKCJDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoIik7cmV0dXJuIE8ubGVuZ3RoPVJ9OmZ1bmN0aW9uKE8sUil7cmV0dXJu''@;'; put 'put ''IE8ubGVuZ3RoPVJ9fSw0MDkzMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjYxMyk7YXQuZXhwb3J0cz1hZShbXS5zbGljZSl9LDk0NzIzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjEzKSx4PWFlKHt9LnRvU3RyaW5nKSxtPWFlKCIiLnNsaWNlKTth''@;'; put 'put ''dC5leHBvcnRzPWZ1bmN0aW9uKGxlKXtyZXR1cm4gbSh4KGxlKSw4LC0xKX19LDc5NTIwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNzQ5MCkseD1GKDEyMDE0KSxtPUYoOTQ3MjMpLE09RigyNTQ2KSgidG9TdHJpbmdUYWciKSxPPU9iamVjdCxSPSJBcmd1bWVudHMiPT1t''@;'; put 'put ''KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7YXQuZXhwb3J0cz1hZT9tOmZ1bmN0aW9uKEspe3ZhciBJLGssRTtyZXR1cm4gdm9pZCAwPT09Sz8iVW5kZWZpbmVkIjpudWxsPT09Sz8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihrPWZ1bmN0aW9uKEssSSl7dHJ5e3JldHVybiBLW0ld''@;'; put 'put ''fWNhdGNoe319KEk9TyhLKSxNKSk/azpSP20oSSk6Ik9iamVjdCI9PShFPW0oSSkpJiZ4KEkuY2FsbGVlKT8iQXJndW1lbnRzIjpFfX0sNzc1NDg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDQ4ODExKSx4PUYoMjExOTkpLG09Rig0Nzk4NyksbGU9Rig1MTE4Myk7YXQuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihNLE8sUil7Zm9yKHZhciB6PXgoTyksSz1sZS5mLEk9bS5mLGs9MDtrPHoubGVuZ3RoO2srKyl7dmFyIEU9eltrXTshYWUoTSxFKSYmKCFSfHwhYWUoUixFKSkmJksoTSxFLEkoTyxFKSl9fX0sMTYwMTc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg1''@;'; put 'put ''NjI0KSx4PUYoNTExODMpLG09Rig3MzkyMCk7YXQuZXhwb3J0cz1hZT9mdW5jdGlvbihsZSxNLE8pe3JldHVybiB4LmYobGUsTSxtKDEsTykpfTpmdW5jdGlvbihsZSxNLE8pe3JldHVybiBsZVtNXT1PLGxlfX0sNzM5MjA6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1mdW5jdGlvbihJ''@;'; put 'put ''ZSxGKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmSWUpLGNvbmZpZ3VyYWJsZTohKDImSWUpLHdyaXRhYmxlOiEoNCZJZSksdmFsdWU6Rn19fSwyNTY2NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTIwMTQpLHg9Rig1MTE4MyksbT1GKDM0NDY4KSxsZT1GKDczNDcwKTthdC5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKE0sTyxSLHope3p8fCh6PXt9KTt2YXIgSz16LmVudW1lcmFibGUsST12b2lkIDAhPT16Lm5hbWU/ei5uYW1lOk87aWYoYWUoUikmJm0oUixJLHopLHouZ2xvYmFsKUs/TVtPXT1SOmxlKE8sUik7ZWxzZXt0cnl7ei51bnNhZmU/TVtPXSYmKEs9ITApOmRlbGV0ZSBN''@;'; put 'put ''W09dfWNhdGNoe31LP01bT109Ujp4LmYoTSxPLHt2YWx1ZTpSLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiF6Lm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohei5ub25Xcml0YWJsZX0pfXJldHVybiBNfX0sNzM0NzA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDcwNzA1''@;'; put 'put ''KSx4PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTthdC5leHBvcnRzPWZ1bmN0aW9uKG0sbGUpe3RyeXt4KGFlLG0se3ZhbHVlOmxlLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoe2FlW21dPWxlfXJldHVybiBsZX19LDQ2Mjg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBh''@;'; put 'put ''ZT1GKDk0Njc2KSx4PVR5cGVFcnJvcjthdC5leHBvcnRzPWZ1bmN0aW9uKG0sbGUpe2lmKCFkZWxldGUgbVtsZV0pdGhyb3cgeCgiQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAiK2FlKGxlKSsiIG9mICIrYWUobSkpfX0sODU2MjQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDIz''@;'; put 'put ''NTIzKTthdC5leHBvcnRzPSFhZShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KX0sMzEyNzA6YXQ9PnsidXNlIHN0cmljdCI7dmFyIEllPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3Vt''@;'; put 'put ''ZW50LmFsbDthdC5leHBvcnRzPXthbGw6SWUsSVNfSFRNTEREQTp0eXBlb2YgSWU+InUiJiZ2b2lkIDAhPT1JZX19LDQ2MzEzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3MDcwNSkseD1GKDEzODQ5KSxtPWFlLmRvY3VtZW50LGxlPXgobSkmJngobS5jcmVhdGVFbGVtZW50''@;'; put 'put ''KTthdC5leHBvcnRzPWZ1bmN0aW9uKE0pe3JldHVybiBsZT9tLmNyZWF0ZUVsZW1lbnQoTSk6e319fSwyMzEyNDphdD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSWU9VHlwZUVycm9yO2F0LmV4cG9ydHM9ZnVuY3Rpb24oYWUpe2lmKGFlPjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgSWUoIk1heGltdW0g''@;'; put 'put ''YWxsb3dlZCBpbmRleCBleGNlZWRlZCIpO3JldHVybiBhZX19LDgzNDYwOmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIEJ1biYmQnVuJiYic3RyaW5nIj09dHlwZW9mIEJ1bi52ZXJzaW9ufSw3ODUyMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IGFlPUYoNzc4MzkpO2F0LmV4cG9ydHM9Lyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QoYWUpfSw4NzI0NDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoOTQ3MjMpO2F0LmV4cG9ydHM9dHlwZW9mIHByb2Nlc3M8InUiJiYicHJvY2VzcyI9PWFlKHBy''@;'; put 'put ''b2Nlc3MpfSw3NzgzOTphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXR5cGVvZiBuYXZpZ2F0b3I8InUiJiZTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCl8fCIifSwyOTM4NTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIFIseixhZT1GKDcwNzA1KSx4PUYoNzc4MzkpLG09YWUu''@;'; put 'put ''cHJvY2VzcyxsZT1hZS5EZW5vLE09bSYmbS52ZXJzaW9uc3x8bGUmJmxlLnZlcnNpb24sTz1NJiZNLnY4O08mJih6PShSPU8uc3BsaXQoIi4iKSlbMF0+MCYmUlswXTw0PzE6KyhSWzBdK1JbMV0pKSwheiYmeCYmKCEoUj14Lm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8UlsxXT49NzQpJiYoUj14''@;'; put 'put ''Lm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYoej0rUlsxXSksYXQuZXhwb3J0cz16fSw0NzgzMzphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxl''@;'; put 'put ''U3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LDIzNzA1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjEzKSx4PUVycm9yLG09YWUoIiIucmVwbGFjZSksbGU9U3RyaW5nKHgoInp4Y2FzZCIpLnN0YWNrKSxNPS9cblxzKmF0IFteOl0qOlteXG5dKi8sTz1NLnRlc3Qo''@;'; put 'put ''bGUpO2F0LmV4cG9ydHM9ZnVuY3Rpb24oUix6KXtpZihPJiYic3RyaW5nIj09dHlwZW9mIFImJiF4LnByZXBhcmVTdGFja1RyYWNlKWZvcig7ei0tOylSPW0oUixNLCIiKTtyZXR1cm4gUn19LDg3ODc3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxNjAxNykseD1GKDIzNzA1''@;'; put 'put ''KSxtPUYoNDE0MTMpLGxlPUVycm9yLmNhcHR1cmVTdGFja1RyYWNlO2F0LmV4cG9ydHM9ZnVuY3Rpb24oTSxPLFIseil7bSYmKGxlP2xlKE0sTyk6YWUoTSwic3RhY2siLHgoUix6KSkpfX0sNDE0MTM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDIzNTIzKSx4PUYoNzM5MjAp''@;'; put 'put ''O2F0LmV4cG9ydHM9IWFlKGZ1bmN0aW9uKCl7dmFyIG09RXJyb3IoImEiKTtyZXR1cm4hKCJzdGFjayJpbiBtKXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLCJzdGFjayIseCgxLDcpKSw3IT09bS5zdGFjayl9KX0sODU2NDg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDcw''@;'; put 'put ''NzA1KSx4PUYoNDc5ODcpLmYsbT1GKDE2MDE3KSxsZT1GKDI1NjY2KSxNPUYoNzM0NzApLE89Rig3NzU0OCksUj1GKDY3NTA3KTthdC5leHBvcnRzPWZ1bmN0aW9uKHosSyl7dmFyIFYsQixZLFgsVSxJPXoudGFyZ2V0LGs9ei5nbG9iYWwsRT16LnN0YXQ7aWYoVj1rP2FlOkU/YWVbSV18fE0o''@;'; put 'put ''SSx7fSk6KGFlW0ldfHx7fSkucHJvdG90eXBlKWZvcihCIGluIEspe2lmKFg9S1tCXSxZPXouZG9udENhbGxHZXRTZXQ/KFU9eChWLEIpKSYmVS52YWx1ZTpWW0JdLCFSKGs/QjpJKyhFPyIuIjoiIyIpK0Isei5mb3JjZWQpJiZ2b2lkIDAhPT1ZKXtpZih0eXBlb2YgWD09dHlwZW9mIFkpY29u''@;'; put 'put ''dGludWU7TyhYLFkpfSh6LnNoYW18fFkmJlkuc2hhbSkmJm0oWCwic2hhbSIsITApLGxlKFYsQixYLHopfX19LDIzNTIzOmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9ZnVuY3Rpb24oSWUpe3RyeXtyZXR1cm4hIUllKCl9Y2F0Y2h7cmV0dXJuITB9fX0sMTEzMDY6KGF0LEllLEYpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBhZT1GKDM2NTYxKSx4PUZ1bmN0aW9uLnByb3RvdHlwZSxtPXguYXBwbHksbGU9eC5jYWxsO2F0LmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwoYWU/bGUuYmluZChtKTpmdW5jdGlvbigpe3JldHVybiBsZS5hcHBseSht''@;'; put 'put ''LGFyZ3VtZW50cyl9KX0sODU0OTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTE1MSkseD1GKDgxNDUwKSxtPUYoMzY1NjEpLGxlPWFlKGFlLmJpbmQpO2F0LmV4cG9ydHM9ZnVuY3Rpb24oTSxPKXtyZXR1cm4geChNKSx2b2lkIDA9PT1PP006bT9sZShNLE8pOmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIE0uYXBwbHkoTyxhcmd1bWVudHMpfX19LDM2NTYxOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyMzUyMyk7YXQuZXhwb3J0cz0hYWUoZnVuY3Rpb24oKXt2YXIgeD1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB4fHx4Lmhh''@;'; put 'put ''c093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pfSwzNTYyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzNjU2MSkseD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDthdC5leHBvcnRzPWFlP3guYmluZCh4KTpmdW5jdGlvbigpe3JldHVybiB4LmFwcGx5KHgsYXJndW1lbnRzKX19''@;'; put 'put ''LDEzODY5OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NTYyNCkseD1GKDQ4ODExKSxtPUZ1bmN0aW9uLnByb3RvdHlwZSxsZT1hZSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixNPXgobSwibmFtZSIpLE89TSYmInNvbWV0aGluZyI9PT1mdW5jdGlvbigpe30u''@;'; put 'put ''bmFtZSxSPU0mJighYWV8fGFlJiZsZShtLCJuYW1lIikuY29uZmlndXJhYmxlKTthdC5leHBvcnRzPXtFWElTVFM6TSxQUk9QRVI6TyxDT05GSUdVUkFCTEU6Un19LDQ1OTM4OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjEzKSx4PUYoODE0NTApO2F0LmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24obSxsZSxNKXt0cnl7cmV0dXJuIGFlKHgoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLGxlKVtNXSkpfWNhdGNoe319fSwxMTUxOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig5NDcyMykseD1GKDY2MTMpO2F0LmV4cG9ydHM9ZnVuY3Rpb24obSl7aWYo''@;'; put 'put ''IkZ1bmN0aW9uIj09PWFlKG0pKXJldHVybiB4KG0pfX0sNjYxMzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzY1NjEpLHg9RnVuY3Rpb24ucHJvdG90eXBlLG09eC5jYWxsLGxlPWFlJiZ4LmJpbmQuYmluZChtLG0pO2F0LmV4cG9ydHM9YWU/bGU6ZnVuY3Rpb24oTSl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG0uYXBwbHkoTSxhcmd1bWVudHMpfX19LDQ2NjkzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3MDcwNSkseD1GKDEyMDE0KTthdC5leHBvcnRzPWZ1bmN0aW9uKGxlLE0pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/ZnVuY3Rpb24o''@;'; put 'put ''bGUpe3JldHVybiB4KGxlKT9sZTp2b2lkIDB9KGFlW2xlXSk6YWVbbGVdJiZhZVtsZV1bTV19fSwzODU4NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjYxMykseD1GKDI5MTA2KSxtPUYoMTIwMTQpLGxlPUYoOTQ3MjMpLE09Rig5MjEpLE89YWUoW10ucHVzaCk7YXQuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihSKXtpZihtKFIpKXJldHVybiBSO2lmKHgoUikpe2Zvcih2YXIgej1SLmxlbmd0aCxLPVtdLEk9MDtJPHo7SSsrKXt2YXIgaz1SW0ldOyJzdHJpbmciPT10eXBlb2Ygaz9PKEssayk6KCJudW1iZXIiPT10eXBlb2Yga3x8Ik51bWJlciI9PWxlKGspfHwiU3RyaW5nIj09''@;'; put 'put ''bGUoaykpJiZPKEssTShrKSl9dmFyIEU9Sy5sZW5ndGgsaj0hMDtyZXR1cm4gZnVuY3Rpb24oVixCKXtpZihqKXJldHVybiBqPSExLEI7aWYoeCh0aGlzKSlyZXR1cm4gQjtmb3IodmFyIFk9MDtZPEU7WSsrKWlmKEtbWV09PT1WKXJldHVybiBCfX19fSwyMDk0ODooYXQsSWUsRik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIGFlPUYoODE0NTApLHg9Rig2Mzc0KTthdC5leHBvcnRzPWZ1bmN0aW9uKG0sbGUpe3ZhciBNPW1bbGVdO3JldHVybiB4KE0pP3ZvaWQgMDphZShNKX19LDcwNzA1OmZ1bmN0aW9uKGF0KXsidXNlIHN0cmljdCI7dmFyIEllPWZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLk1h''@;'; put 'put ''dGg9PU1hdGgmJkZ9O2F0LmV4cG9ydHM9SWUoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8SWUoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fEllKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fEllKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFs''@;'; put 'put ''JiZnbG9iYWwpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHx0aGlzfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSw0ODgxMTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjYxMykseD1GKDY4MDcxKSxtPWFlKHt9Lmhhc093blByb3BlcnR5KTthdC5leHBvcnRzPU9i''@;'; put 'put ''amVjdC5oYXNPd258fGZ1bmN0aW9uKE0sTyl7cmV0dXJuIG0oeChNKSxPKX19LDE5OTA5OmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9e319LDU5NDA2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0NjY5Myk7YXQuZXhwb3J0cz1hZSgiZG9jdW1lbnQiLCJkb2N1bWVu''@;'; put 'put ''dEVsZW1lbnQiKX0sOTQ2NzU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg1NjI0KSx4PUYoMjM1MjMpLG09Rig0NjMxMyk7YXQuZXhwb3J0cz0hYWUmJiF4KGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShtKCJkaXYiKSwiYSIse2dldDpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiA3fX0pLmF9KX0sNTY2MDc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2MTMpLHg9RigyMzUyMyksbT1GKDk0NzIzKSxsZT1PYmplY3QsTT1hZSgiIi5zcGxpdCk7YXQuZXhwb3J0cz14KGZ1bmN0aW9uKCl7cmV0dXJuIWxlKCJ6IikucHJvcGVydHlJ''@;'; put 'put ''c0VudW1lcmFibGUoMCl9KT9mdW5jdGlvbihPKXtyZXR1cm4iU3RyaW5nIj09bShPKT9NKE8sIiIpOmxlKE8pfTpsZX0sNTE4NDk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDEyMDE0KSx4PUYoMTM4NDkpLG09RigxOTU4Nyk7YXQuZXhwb3J0cz1mdW5jdGlvbihsZSxNLE8p''@;'; put 'put ''e3ZhciBSLHo7cmV0dXJuIG0mJmFlKFI9TS5jb25zdHJ1Y3RvcikmJlIhPT1PJiZ4KHo9Ui5wcm90b3R5cGUpJiZ6IT09Ty5wcm90b3R5cGUmJm0obGUseiksbGV9fSw1NzM3MTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjYxMykseD1GKDEyMDE0KSxtPUYoODEwNjkpLGxl''@;'; put 'put ''PWFlKEZ1bmN0aW9uLnRvU3RyaW5nKTt4KG0uaW5zcGVjdFNvdXJjZSl8fChtLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oTSl7cmV0dXJuIGxlKE0pfSksYXQuZXhwb3J0cz1tLmluc3BlY3RTb3VyY2V9LDQ5NDI3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxMzg0OSkseD1G''@;'; put 'put ''KDE2MDE3KTthdC5leHBvcnRzPWZ1bmN0aW9uKG0sbGUpe2FlKGxlKSYmImNhdXNlImluIGxlJiZ4KG0sImNhdXNlIixsZS5jYXVzZSl9fSw3Mjc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBFLGosVixhZT1GKDE3NTQyKSx4PUYoNzA3MDUpLG09RigxMzg0OSksbGU9RigxNjAxNyks''@;'; put 'put ''TT1GKDQ4ODExKSxPPUYoODEwNjkpLFI9RigyNzIzMCksej1GKDE5OTA5KSxLPSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsST14LlR5cGVFcnJvcjtpZihhZXx8Ty5zdGF0ZSl7dmFyIFg9Ty5zdGF0ZXx8KE8uc3RhdGU9bmV3KDAseC5XZWFrTWFwKSk7WC5nZXQ9WC5nZXQsWC5oYXM9''@;'; put 'put ''WC5oYXMsWC5zZXQ9WC5zZXQsRT1mdW5jdGlvbihxLGVlKXtpZihYLmhhcyhxKSl0aHJvdyBJKEspO3JldHVybiBlZS5mYWNhZGU9cSxYLnNldChxLGVlKSxlZX0saj1mdW5jdGlvbihxKXtyZXR1cm4gWC5nZXQocSl8fHt9fSxWPWZ1bmN0aW9uKHEpe3JldHVybiBYLmhhcyhxKX19ZWxzZXt2''@;'; put 'put ''YXIgVT1SKCJzdGF0ZSIpO3pbVV09ITAsRT1mdW5jdGlvbihxLGVlKXtpZihNKHEsVSkpdGhyb3cgSShLKTtyZXR1cm4gZWUuZmFjYWRlPXEsbGUocSxVLGVlKSxlZX0saj1mdW5jdGlvbihxKXtyZXR1cm4gTShxLFUpP3FbVV06e319LFY9ZnVuY3Rpb24ocSl7cmV0dXJuIE0ocSxVKX19YXQu''@;'; put 'put ''ZXhwb3J0cz17c2V0OkUsZ2V0OmosaGFzOlYsZW5mb3JjZTpmdW5jdGlvbihxKXtyZXR1cm4gVihxKT9qKHEpOkUocSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihxKXtyZXR1cm4gZnVuY3Rpb24oZWUpe3ZhciB0ZTtpZighbShlZSl8fCh0ZT1qKGVlKSkudHlwZSE9PXEpdGhyb3cgSSgiSW5j''@;'; put 'put ''b21wYXRpYmxlIHJlY2VpdmVyLCAiK3ErIiByZXF1aXJlZCIpO3JldHVybiB0ZX19fX0sMjkxMDY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDk0NzIzKTthdC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKG0pe3JldHVybiJBcnJheSI9PWFlKG0pfX0sMTIwMTQ6''@;'; put 'put ''KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMjcwKSx4PWFlLmFsbDthdC5leHBvcnRzPWFlLklTX0hUTUxEREE/ZnVuY3Rpb24obSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG18fG09PT14fTpmdW5jdGlvbihtKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbX19LDY3''@;'; put 'put ''NTA3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyMzUyMykseD1GKDEyMDE0KSxtPS8jfFwucHJvdG90eXBlXC4vLGxlPWZ1bmN0aW9uKEssSSl7dmFyIGs9T1tNKEspXTtyZXR1cm4gaz09enx8ayE9UiYmKHgoSSk/YWUoSSk6ISFJKX0sTT1sZS5ub3JtYWxpemU9ZnVuY3Rp''@;'; put 'put ''b24oSyl7cmV0dXJuIFN0cmluZyhLKS5yZXBsYWNlKG0sIi4iKS50b0xvd2VyQ2FzZSgpfSxPPWxlLmRhdGE9e30sUj1sZS5OQVRJVkU9Ik4iLHo9bGUuUE9MWUZJTEw9IlAiO2F0LmV4cG9ydHM9bGV9LDYzNzQ6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1mdW5jdGlvbihJZSl7cmV0''@;'; put 'put ''dXJuIG51bGw9PUllfX0sMTM4NDk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDEyMDE0KSx4PUYoMzEyNzApLG09eC5hbGw7YXQuZXhwb3J0cz14LklTX0hUTUxEREE/ZnVuY3Rpb24obGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgbGU/bnVsbCE9PWxlOmFlKGxlKXx8bGU9''@;'; put 'put ''PT1tfTpmdW5jdGlvbihsZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBsZT9udWxsIT09bGU6YWUobGUpfX0sMTAwMTc6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz0hMX0sNjk3NTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNDY2OTMpLHg9RigxMjAxNCksbT1GKDM3''@;'; put 'put ''NDc0KSxsZT1GKDIzOTYxKSxNPU9iamVjdDthdC5leHBvcnRzPWxlP2Z1bmN0aW9uKE8pe3JldHVybiJzeW1ib2wiPT10eXBlb2YgT306ZnVuY3Rpb24oTyl7dmFyIFI9YWUoIlN5bWJvbCIpO3JldHVybiB4KFIpJiZtKFIucHJvdG90eXBlLE0oTykpfX0sNTQ0NTA6KGF0LEllLEYpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBhZT1GKDY1MzE2KTthdC5leHBvcnRzPWZ1bmN0aW9uKHgpe3JldHVybiBhZSh4Lmxlbmd0aCl9fSwzNDQ2ODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjYxMykseD1GKDIzNTIzKSxtPUYoMTIwMTQpLGxlPUYoNDg4MTEpLE09Rig4NTYyNCksTz1G''@;'; put 'put ''KDEzODY5KS5DT05GSUdVUkFCTEUsUj1GKDU3MzcxKSx6PUYoNzI3KSxLPXouZW5mb3JjZSxJPXouZ2V0LGs9U3RyaW5nLEU9T2JqZWN0LmRlZmluZVByb3BlcnR5LGo9YWUoIiIuc2xpY2UpLFY9YWUoIiIucmVwbGFjZSksQj1hZShbXS5qb2luKSxZPU0mJiF4KGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IDghPT1FKGZ1bmN0aW9uKCl7fSwibGVuZ3RoIix7dmFsdWU6OH0pLmxlbmd0aH0pLFg9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLFU9YXQuZXhwb3J0cz1mdW5jdGlvbihxLGVlLHRlKXsiU3ltYm9sKCI9PT1qKGsoZWUpLDAsNykmJihlZT0iWyIrVihrKGVlKSwvXlN5bWJvbFwo''@;'; put 'put ''KFteKV0qKVwpLywiJDEiKSsiXSIpLHRlJiZ0ZS5nZXR0ZXImJihlZT0iZ2V0ICIrZWUpLHRlJiZ0ZS5zZXR0ZXImJihlZT0ic2V0ICIrZWUpLCghbGUocSwibmFtZSIpfHxPJiZxLm5hbWUhPT1lZSkmJihNP0UocSwibmFtZSIse3ZhbHVlOmVlLGNvbmZpZ3VyYWJsZTohMH0pOnEubmFtZT1l''@;'; put 'put ''ZSksWSYmdGUmJmxlKHRlLCJhcml0eSIpJiZxLmxlbmd0aCE9PXRlLmFyaXR5JiZFKHEsImxlbmd0aCIse3ZhbHVlOnRlLmFyaXR5fSk7dHJ5e3RlJiZsZSh0ZSwiY29uc3RydWN0b3IiKSYmdGUuY29uc3RydWN0b3I/TSYmRShxLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOnEucHJvdG90''@;'; put 'put ''eXBlJiYocS5wcm90b3R5cGU9dm9pZCAwKX1jYXRjaHt9dmFyIG9lPUsocSk7cmV0dXJuIGxlKG9lLCJzb3VyY2UiKXx8KG9lLnNvdXJjZT1CKFgsInN0cmluZyI9PXR5cGVvZiBlZT9lZToiIikpLHF9O0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1VKGZ1bmN0aW9uKCl7cmV0dXJuIG0o''@;'; put 'put ''dGhpcykmJkkodGhpcykuc291cmNlfHxSKHRoaXMpfSwidG9TdHJpbmciKX0sODQ3NDQ6YXQ9PnsidXNlIHN0cmljdCI7dmFyIEllPU1hdGguY2VpbCxGPU1hdGguZmxvb3I7YXQuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlvbih4KXt2YXIgbT0reDtyZXR1cm4obT4wP0Y6SWUpKG0pfX0s''@;'; put 'put ''ODIxNDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoOTIxKTthdC5leHBvcnRzPWZ1bmN0aW9uKHgsbSl7cmV0dXJuIHZvaWQgMD09PXg/YXJndW1lbnRzLmxlbmd0aDwyPyIiOm06YWUoeCl9fSw3NDQxMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIFgsYWU9Rig1ODY0''@;'; put 'put ''NykseD1GKDc3MzI4KSxtPUYoNDc4MzMpLGxlPUYoMTk5MDkpLE09Rig1OTQwNiksTz1GKDQ2MzEzKSxSPUYoMjcyMzApLEk9InByb3RvdHlwZSIsaz0ic2NyaXB0IixFPVIoIklFX1BST1RPIiksaj1mdW5jdGlvbigpe30sVj1mdW5jdGlvbihxKXtyZXR1cm4iPCIraysiPiIrcSsiPC8iK2sr''@;'; put 'put ''Ij4ifSxCPWZ1bmN0aW9uKHEpe3Eud3JpdGUoVigiIikpLHEuY2xvc2UoKTt2YXIgZWU9cS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBxPW51bGwsZWV9LFU9ZnVuY3Rpb24oKXt0cnl7WD1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaHt9VT10eXBlb2YgZG9jdW1lbnQ8''@;'; put 'put ''InUiP2RvY3VtZW50LmRvbWFpbiYmWD9CKFgpOmZ1bmN0aW9uKCl7dmFyIHRlLHE9TygiaWZyYW1lIiksZWU9ImphdmEiK2srIjoiO3JldHVybiBxLnN0eWxlLmRpc3BsYXk9Im5vbmUiLE0uYXBwZW5kQ2hpbGQocSkscS5zcmM9U3RyaW5nKGVlKSwodGU9cS5jb250ZW50V2luZG93LmRvY3Vt''@;'; put 'put ''ZW50KS5vcGVuKCksdGUud3JpdGUoVigiZG9jdW1lbnQuRj1PYmplY3QiKSksdGUuY2xvc2UoKSx0ZS5GfSgpOkIoWCk7Zm9yKHZhciBxPW0ubGVuZ3RoO3EtLTspZGVsZXRlIFVbSV1bbVtxXV07cmV0dXJuIFUoKX07bGVbRV09ITAsYXQuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlv''@;'; put 'put ''bihlZSx0ZSl7dmFyIG9lO3JldHVybiBudWxsIT09ZWU/KGpbSV09YWUoZWUpLG9lPW5ldyBqLGpbSV09bnVsbCxvZVtFXT1lZSk6b2U9VSgpLHZvaWQgMD09PXRlP29lOnguZihvZSx0ZSl9fSw3NzMyODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODU2MjQpLHg9RigyMDEx''@;'; put 'put ''OCksbT1GKDUxMTgzKSxsZT1GKDU4NjQ3KSxNPUYoNTAzMjcpLE89RigxNDU0NSk7SWUuZj1hZSYmIXg/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oeixLKXtsZSh6KTtmb3IodmFyIFYsST1NKEspLGs9TyhLKSxFPWsubGVuZ3RoLGo9MDtFPmo7KW0uZih6LFY9a1tqKytdLElb''@;'; put 'put ''Vl0pO3JldHVybiB6fX0sNTExODM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg1NjI0KSx4PUYoOTQ2NzUpLG09RigyMDExOCksbGU9Rig1ODY0NyksTT1GKDg0MDk0KSxPPVR5cGVFcnJvcixSPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx6PU9iamVjdC5nZXRPd25Qcm9wZXJ0''@;'; put 'put ''eURlc2NyaXB0b3IsSz0iZW51bWVyYWJsZSIsST0iY29uZmlndXJhYmxlIixrPSJ3cml0YWJsZSI7SWUuZj1hZT9tP2Z1bmN0aW9uKGosVixCKXtpZihsZShqKSxWPU0oViksbGUoQiksImZ1bmN0aW9uIj09dHlwZW9mIGomJiJwcm90b3R5cGUiPT09ViYmInZhbHVlImluIEImJmsgaW4gQiYm''@;'; put 'put ''IUJba10pe3ZhciBZPXooaixWKTtZJiZZW2tdJiYoaltWXT1CLnZhbHVlLEI9e2NvbmZpZ3VyYWJsZTpJIGluIEI/QltJXTpZW0ldLGVudW1lcmFibGU6SyBpbiBCP0JbS106WVtLXSx3cml0YWJsZTohMX0pfXJldHVybiBSKGosVixCKX06UjpmdW5jdGlvbihqLFYsQil7aWYobGUoaiksVj1N''@;'; put 'put ''KFYpLGxlKEIpLHgpdHJ5e3JldHVybiBSKGosVixCKX1jYXRjaHt9aWYoImdldCJpbiBCfHwic2V0ImluIEIpdGhyb3cgTygiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gQiYmKGpbVl09Qi52YWx1ZSksan19LDQ3OTg3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgYWU9Rig4NTYyNCkseD1GKDM1NjIpLG09Rig0NjkwMSksbGU9Rig3MzkyMCksTT1GKDUwMzI3KSxPPUYoODQwOTQpLFI9Rig0ODgxMSksej1GKDk0Njc1KSxLPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7SWUuZj1hZT9LOmZ1bmN0aW9uKGssRSl7aWYoaz1NKGspLEU9''@;'; put 'put ''TyhFKSx6KXRyeXtyZXR1cm4gSyhrLEUpfWNhdGNoe31pZihSKGssRSkpcmV0dXJuIGxlKCF4KG0uZixrLEUpLGtbRV0pfX0sNzU0MzE6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0OTY3KSxtPUYoNDc4MzMpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7SWUuZj1P''@;'; put 'put ''YmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24oTSl7cmV0dXJuIGFlKE0sbSl9fSw1NTM0OihhdCxJZSk9PnsidXNlIHN0cmljdCI7SWUuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwzNzQ3NDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjYxMyk7''@;'; put 'put ''YXQuZXhwb3J0cz1hZSh7fS5pc1Byb3RvdHlwZU9mKX0sMjQ5Njc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2MTMpLHg9Rig0ODgxMSksbT1GKDUwMzI3KSxsZT1GKDM2MzA1KS5pbmRleE9mLE09RigxOTkwOSksTz1hZShbXS5wdXNoKTthdC5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KFIseil7dmFyIEUsSz1tKFIpLEk9MCxrPVtdO2ZvcihFIGluIEspIXgoTSxFKSYmeChLLEUpJiZPKGssRSk7Zm9yKDt6Lmxlbmd0aD5JOyl4KEssRT16W0krK10pJiYofmxlKGssRSl8fE8oayxFKSk7cmV0dXJuIGt9fSwxNDU0NTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYo''@;'; put 'put ''MjQ5NjcpLHg9Rig0NzgzMyk7YXQuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24obGUpe3JldHVybiBhZShsZSx4KX19LDQ2OTAxOihhdCxJZSk9PnsidXNlIHN0cmljdCI7dmFyIEY9e30ucHJvcGVydHlJc0VudW1lcmFibGUsYWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv''@;'; put 'put ''cix4PWFlJiYhRi5jYWxsKHsxOjJ9LDEpO0llLmY9eD9mdW5jdGlvbihsZSl7dmFyIE09YWUodGhpcyxsZSk7cmV0dXJuISFNJiZNLmVudW1lcmFibGV9OkZ9LDE5NTg3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0NTkzOCkseD1GKDU4NjQ3KSxtPUYoNzAwOCk7YXQuZXhw''@;'; put 'put ''b3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgTyxsZT0hMSxNPXt9O3RyeXsoTz1hZShPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iLCJzZXQiKSkoTSxbXSksbGU9TSBpbnN0YW5jZW9mIEFycmF5fWNhdGNoe31yZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oeixLKXtyZXR1cm4geCh6KSxtKEspLGxlP08oeixLKTp6Ll9fcHJvdG9fXz1LLHp9fSgpOnZvaWQgMCl9LDYzNDE1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzNTYyKSx4PUYoMTIwMTQpLG09RigxMzg0OSksbGU9VHlwZUVycm9yO2F0LmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24oTSxPKXt2YXIgUix6O2lmKCJzdHJpbmciPT09TyYmeChSPU0udG9TdHJpbmcpJiYhbSh6PWFlKFIsTSkpfHx4KFI9TS52YWx1ZU9mKSYmIW0oej1hZShSLE0pKXx8InN0cmluZyIhPT1PJiZ4KFI9TS50b1N0cmluZykmJiFtKHo9YWUoUixNKSkpcmV0dXJuIHo7dGhyb3cgbGUoIkNhbid0''@;'; put 'put ''IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sMjExOTk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDQ2NjkzKSx4PUYoNjYxMyksbT1GKDc1NDMxKSxsZT1GKDU1MzQpLE09Rig1ODY0NyksTz14KFtdLmNvbmNhdCk7YXQuZXhwb3J0cz1hZSgiUmVmbGVj''@;'; put 'put ''dCIsIm93bktleXMiKXx8ZnVuY3Rpb24oeil7dmFyIEs9bS5mKE0oeikpLEk9bGUuZjtyZXR1cm4gST9PKEssSSh6KSk6S319LDkyNDAwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig1MTE4MykuZjthdC5leHBvcnRzPWZ1bmN0aW9uKHgsbSxsZSl7bGUgaW4geHx8YWUoeCxs''@;'; put 'put ''ZSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtW2xlXX0sc2V0OmZ1bmN0aW9uKE0pe21bbGVdPU19fSl9fSwyNDU3MjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjM3NCkseD1UeXBlRXJyb3I7YXQuZXhwb3J0cz1mdW5jdGlvbihtKXtpZihhZSht''@;'; put 'put ''KSl0aHJvdyB4KCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAiK20pO3JldHVybiBtfX0sOTU4OTU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBJLGFlPUYoNzA3MDUpLHg9RigxMTMwNiksbT1GKDEyMDE0KSxsZT1GKDgzNDYwKSxNPUYoNzc4MzkpLE89Rig0MDkzMCksUj1GKDc5NTQ1KSx6''@;'; put 'put ''PWFlLkZ1bmN0aW9uLEs9L01TSUUgLlwuLy50ZXN0KE0pfHxsZSYmKChJPWFlLkJ1bi52ZXJzaW9uLnNwbGl0KCIuIikpLmxlbmd0aDwzfHwwPT1JWzBdJiYoSVsxXTwzfHwzPT1JWzFdJiYwPT1JWzJdKSk7YXQuZXhwb3J0cz1mdW5jdGlvbihJLGspe3ZhciBFPWs/MjoxO3JldHVybiBLP2Z1''@;'; put 'put ''bmN0aW9uKGosVil7dmFyIEI9Uihhcmd1bWVudHMubGVuZ3RoLDEpPkUsWT1tKGopP2o6eihqKSxYPUI/Tyhhcmd1bWVudHMsRSk6W10sVT1CP2Z1bmN0aW9uKCl7eChZLHRoaXMsWCl9Olk7cmV0dXJuIGs/SShVLFYpOkkoVSl9Okl9fSwyNzIzMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIGFlPUYoNjg4MzUpLHg9Rig1MjgxMCksbT1hZSgia2V5cyIpO2F0LmV4cG9ydHM9ZnVuY3Rpb24obGUpe3JldHVybiBtW2xlXXx8KG1bbGVdPXgobGUpKX19LDgxMDY5OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3MDcwNSkseD1GKDczNDcwKSxtPSJfX2NvcmUtanNf''@;'; put 'put ''c2hhcmVkX18iLGxlPWFlW21dfHx4KG0se30pO2F0LmV4cG9ydHM9bGV9LDY4ODM1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxMDAxNykseD1GKDgxMDY5KTsoYXQuZXhwb3J0cz1mdW5jdGlvbihtLGxlKXtyZXR1cm4geFttXXx8KHhbbV09dm9pZCAwIT09bGU/bGU6e30p''@;'; put 'put ''fSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4zMi4wIixtb2RlOmFlPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6Ilx4YTkgMjAxNC0yMDIzIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1q''@;'; put 'put ''cy9ibG9iL3YzLjMyLjAvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sMjkzMzk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI5Mzg1KSx4PUYoMjM1MjMpLGxlPUYoNzA3MDUpLlN0cmluZzthdC5leHBvcnRzPSEhT2Jq''@;'; put 'put ''ZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIXgoZnVuY3Rpb24oKXt2YXIgTT1TeW1ib2woKTtyZXR1cm4hbGUoTSl8fCEoT2JqZWN0KE0paW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJmFlJiZhZTw0MX0pfSw1NTI2MTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIHNl''@;'; put 'put ''LGhlLHVlLGNlLGFlPUYoNzA3MDUpLHg9RigxMTMwNiksbT1GKDg1NDkpLGxlPUYoMTIwMTQpLE09Rig0ODgxMSksTz1GKDIzNTIzKSxSPUYoNTk0MDYpLHo9Rig0MDkzMCksSz1GKDQ2MzEzKSxJPUYoNzk1NDUpLGs9Rig3ODUyMCksRT1GKDg3MjQ0KSxqPWFlLnNldEltbWVkaWF0ZSxWPWFl''@;'; put 'put ''LmNsZWFySW1tZWRpYXRlLEI9YWUucHJvY2VzcyxZPWFlLkRpc3BhdGNoLFg9YWUuRnVuY3Rpb24sVT1hZS5NZXNzYWdlQ2hhbm5lbCxxPWFlLlN0cmluZyxlZT0wLHRlPXt9LG9lPSJvbnJlYWR5c3RhdGVjaGFuZ2UiO08oZnVuY3Rpb24oKXtzZT1hZS5sb2NhdGlvbn0pO3ZhciBHPWZ1bmN0''@;'; put 'put ''aW9uKE4pe2lmKE0odGUsTikpe3ZhciBnPXRlW05dO2RlbGV0ZSB0ZVtOXSxnKCl9fSxiPWZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbigpe0coTil9fSxEPWZ1bmN0aW9uKE4pe0coTi5kYXRhKX0sSD1mdW5jdGlvbihOKXthZS5wb3N0TWVzc2FnZShxKE4pLHNlLnByb3RvY29sKyIvLyIr''@;'; put 'put ''c2UuaG9zdCl9Oyghanx8IVYpJiYoaj1mdW5jdGlvbihnKXtJKGFyZ3VtZW50cy5sZW5ndGgsMSk7dmFyIEM9bGUoZyk/ZzpYKGcpLFM9eihhcmd1bWVudHMsMSk7cmV0dXJuIHRlWysrZWVdPWZ1bmN0aW9uKCl7eChDLHZvaWQgMCxTKX0saGUoZWUpLGVlfSxWPWZ1bmN0aW9uKGcpe2RlbGV0''@;'; put 'put ''ZSB0ZVtnXX0sRT9oZT1mdW5jdGlvbihOKXtCLm5leHRUaWNrKGIoTikpfTpZJiZZLm5vdz9oZT1mdW5jdGlvbihOKXtZLm5vdyhiKE4pKX06VSYmIWs/KGNlPSh1ZT1uZXcgVSkucG9ydDIsdWUucG9ydDEub25tZXNzYWdlPUQsaGU9bShjZS5wb3N0TWVzc2FnZSxjZSkpOmFlLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXImJmxlKGFlLnBvc3RNZXNzYWdlKSYmIWFlLmltcG9ydFNjcmlwdHMmJnNlJiYiZmlsZToiIT09c2UucHJvdG9jb2wmJiFPKEgpPyhoZT1ILGFlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLEQsITEpKTpoZT1vZSBpbiBLKCJzY3JpcHQiKT9mdW5jdGlvbihOKXtSLmFwcGVu''@;'; put 'put ''ZENoaWxkKEsoInNjcmlwdCIpKVtvZV09ZnVuY3Rpb24oKXtSLnJlbW92ZUNoaWxkKHRoaXMpLEcoTil9fTpmdW5jdGlvbihOKXtzZXRUaW1lb3V0KGIoTiksMCl9KSxhdC5leHBvcnRzPXtzZXQ6aixjbGVhcjpWfX0sNzYxNjM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDQw''@;'; put 'put ''NzAyKSx4PU1hdGgubWF4LG09TWF0aC5taW47YXQuZXhwb3J0cz1mdW5jdGlvbihsZSxNKXt2YXIgTz1hZShsZSk7cmV0dXJuIE88MD94KE8rTSwwKTptKE8sTSl9fSw1MDMyNzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNTY2MDcpLHg9RigyNDU3Mik7YXQuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihtKXtyZXR1cm4gYWUoeChtKSl9fSw0MDcwMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODQ3NDQpO2F0LmV4cG9ydHM9ZnVuY3Rpb24oeCl7dmFyIG09K3g7cmV0dXJuIG0hPW18fDA9PT1tPzA6YWUobSl9fSw2NTMxNjooYXQsSWUsRik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIGFlPUYoNDA3MDIpLHg9TWF0aC5taW47YXQuZXhwb3J0cz1mdW5jdGlvbihtKXtyZXR1cm4gbT4wP3goYWUobSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LDY4MDcxOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDU3MikseD1PYmplY3Q7YXQuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihtKXtyZXR1cm4geChhZShtKSl9fSw3NTUzNzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzU2MikseD1GKDEzODQ5KSxtPUYoNjk3NSksbGU9RigyMDk0OCksTT1GKDYzNDE1KSxPPUYoMjU0NiksUj1UeXBlRXJyb3Isej1PKCJ0b1ByaW1pdGl2ZSIpO2F0LmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24oSyxJKXtpZigheChLKXx8bShLKSlyZXR1cm4gSzt2YXIgRSxrPWxlKEsseik7aWYoayl7aWYodm9pZCAwPT09SSYmKEk9ImRlZmF1bHQiKSxFPWFlKGssSyxJKSwheChFKXx8bShFKSlyZXR1cm4gRTt0aHJvdyBSKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUiKX1yZXR1cm4gdm9pZCAwPT09SSYmKEk9Im51bWJlciIpLE0oSyxJKX19LDg0MDk0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3NTUzNykseD1GKDY5NzUpO2F0LmV4cG9ydHM9ZnVuY3Rpb24obSl7dmFyIGxlPWFlKG0sInN0cmluZyIpO3JldHVybiB4KGxl''@;'; put 'put ''KT9sZTpsZSsiIn19LDI3NDkwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbT17fTttW0YoMjU0NikoInRvU3RyaW5nVGFnIildPSJ6IixhdC5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhtKX0sOTIxOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3OTUyMCks''@;'; put 'put ''eD1TdHJpbmc7YXQuZXhwb3J0cz1mdW5jdGlvbihtKXtpZigiU3ltYm9sIj09PWFlKG0pKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4geChtKX19LDk0Njc2OmF0PT57InVzZSBzdHJpY3QiO3ZhciBJZT1TdHJpbmc7''@;'; put 'put ''YXQuZXhwb3J0cz1mdW5jdGlvbihGKXt0cnl7cmV0dXJuIEllKEYpfWNhdGNoe3JldHVybiJPYmplY3QifX19LDUyODEwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjEzKSx4PTAsbT1NYXRoLnJhbmRvbSgpLGxlPWFlKDEuLnRvU3RyaW5nKTthdC5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKE0pe3JldHVybiJTeW1ib2woIisodm9pZCAwPT09TT8iIjpNKSsiKV8iK2xlKCsreCttLDM2KX19LDIzOTYxOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyOTMzOSk7YXQuZXhwb3J0cz1hZSYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVy''@;'; put 'put ''YXRvcn0sMjAxMTg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg1NjI0KSx4PUYoMjM1MjMpO2F0LmV4cG9ydHM9YWUmJngoZnVuY3Rpb24oKXtyZXR1cm4gNDIhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe30sInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRh''@;'; put 'put ''YmxlOiExfSkucHJvdG90eXBlfSl9LDc5NTQ1OmF0PT57InVzZSBzdHJpY3QiO3ZhciBJZT1UeXBlRXJyb3I7YXQuZXhwb3J0cz1mdW5jdGlvbihGLGFlKXtpZihGPGFlKXRocm93IEllKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiBGfX0sMTc1NDI6KGF0LEllLEYpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBhZT1GKDcwNzA1KSx4PUYoMTIwMTQpLG09YWUuV2Vha01hcDthdC5leHBvcnRzPXgobSkmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcobSkpfSwyNTQ2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3MDcwNSkseD1GKDY4ODM1KSxtPUYoNDg4MTEpLGxl''@;'; put 'put ''PUYoNTI4MTApLE09RigyOTMzOSksTz1GKDIzOTYxKSxSPWFlLlN5bWJvbCx6PXgoIndrcyIpLEs9Tz9SLmZvcnx8UjpSJiZSLndpdGhvdXRTZXR0ZXJ8fGxlO2F0LmV4cG9ydHM9ZnVuY3Rpb24oSSl7cmV0dXJuIG0oeixJKXx8KHpbSV09TSYmbShSLEkpP1JbSV06SygiU3ltYm9sLiIrSSkp''@;'; put 'put ''LHpbSV19fSw2NzY3ODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNDY2OTMpLHg9Rig0ODgxMSksbT1GKDE2MDE3KSxsZT1GKDM3NDc0KSxNPUYoMTk1ODcpLE89Rig3NzU0OCksUj1GKDkyNDAwKSx6PUYoNTE4NDkpLEs9Rig4MjE0KSxJPUYoNDk0MjcpLGs9Rig4Nzg3Nyks''@;'; put 'put ''RT1GKDg1NjI0KSxqPUYoMTAwMTcpO2F0LmV4cG9ydHM9ZnVuY3Rpb24oVixCLFksWCl7dmFyIFU9InN0YWNrVHJhY2VMaW1pdCIscT1YPzI6MSxlZT1WLnNwbGl0KCIuIiksdGU9ZWVbZWUubGVuZ3RoLTFdLG9lPWFlLmFwcGx5KG51bGwsZWUpO2lmKG9lKXt2YXIgc2U9b2UucHJvdG90eXBl''@;'; put 'put ''O2lmKCFqJiZ4KHNlLCJjYXVzZSIpJiZkZWxldGUgc2UuY2F1c2UsIVkpcmV0dXJuIG9lO3ZhciBoZT1hZSgiRXJyb3IiKSx1ZT1CKGZ1bmN0aW9uKGNlLEcpe3ZhciBiPUsoWD9HOmNlLHZvaWQgMCksRD1YP25ldyBvZShjZSk6bmV3IG9lO3JldHVybiB2b2lkIDAhPT1iJiZtKEQsIm1lc3Nh''@;'; put 'put ''Z2UiLGIpLGsoRCx1ZSxELnN0YWNrLDIpLHRoaXMmJmxlKHNlLHRoaXMpJiZ6KEQsdGhpcyx1ZSksYXJndW1lbnRzLmxlbmd0aD5xJiZJKEQsYXJndW1lbnRzW3FdKSxEfSk7aWYodWUucHJvdG90eXBlPXNlLCJFcnJvciIhPT10ZT9NP00odWUsaGUpOk8odWUsaGUse25hbWU6ITB9KTpFJiZV''@;'; put 'put ''IGluIG9lJiYoUih1ZSxvZSxVKSxSKHVlLG9lLCJwcmVwYXJlU3RhY2tUcmFjZSIpKSxPKHVlLG9lKSwhail0cnl7c2UubmFtZSE9PXRlJiZtKHNlLCJuYW1lIix0ZSksc2UuY29uc3RydWN0b3I9dWV9Y2F0Y2h7fXJldHVybiB1ZX19fSw1MTAxOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgYWU9Rig4NTY0OCkseD1GKDY4MDcxKSxtPUYoNTQ0NTApLGxlPUYoNDA3MDIpLE09Rig3NDk2NSk7YWUoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24oUil7dmFyIHo9eCh0aGlzKSxLPW0oeiksST1sZShSKSxrPUk+PTA/STpLK0k7cmV0dXJuIGs8MHx8az49Sz92''@;'; put 'put ''b2lkIDA6eltrXX19KSxNKCJhdCIpfSw4NzEzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NTY0OCkseD1GKDY4MDcxKSxtPUYoNTQ0NTApLGxlPUYoODY3NTkpLE09RigyMzEyNCk7YWUoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOkYoMjM1MjMp''@;'; put 'put ''KGZ1bmN0aW9uKCl7cmV0dXJuIDQyOTQ5NjcyOTchPT1bXS5wdXNoLmNhbGwoe2xlbmd0aDo0Mjk0OTY3Mjk2fSwxKX0pfHwhZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLnB1c2goKX1jYXRjaChJKXtyZXR1cm4gSSBpbnN0''@;'; put 'put ''YW5jZW9mIFR5cGVFcnJvcn19KCl9LHtwdXNoOmZ1bmN0aW9uKGspe3ZhciBFPXgodGhpcyksaj1tKEUpLFY9YXJndW1lbnRzLmxlbmd0aDtNKGorVik7Zm9yKHZhciBCPTA7QjxWO0IrKylFW2pdPWFyZ3VtZW50c1tCXSxqKys7cmV0dXJuIGxlKEUsaiksan19KX0sMTYwMDE6KGF0LEllLEYp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg1NjQ4KSx4PUYoNjgwNzEpLG09Rig1NDQ1MCksbGU9Rig4Njc1OSksTT1GKDQ2MjgpLE89RigyMzEyNCk7YWUoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOjEhPT1bXS51bnNoaWZ0KDApfHwhZnVuY3Rpb24oKXt0cnl7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLnVuc2hpZnQoKX1jYXRjaChJKXtyZXR1cm4gSSBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCl9LHt1bnNoaWZ0OmZ1bmN0aW9uKGspe3ZhciBFPXgodGhpcyksaj1tKEUpLFY9YXJndW1lbnRzLmxlbmd0aDtp''@;'; put 'put ''ZihWKXtPKGorVik7Zm9yKHZhciBCPWo7Qi0tOyl7dmFyIFk9QitWO0IgaW4gRT9FW1ldPUVbQl06TShFLFkpfWZvcih2YXIgWD0wO1g8VjtYKyspRVtYXT1hcmd1bWVudHNbWF19cmV0dXJuIGxlKEUsaitWKX19KX0sNTY1ODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODU2''@;'; put 'put ''NDgpLHg9Rig3MDcwNSksbT1GKDExMzA2KSxsZT1GKDY3Njc4KSxNPSJXZWJBc3NlbWJseSIsTz14W01dLFI9NyE9PUVycm9yKCJlIix7Y2F1c2U6N30pLmNhdXNlLHo9ZnVuY3Rpb24oSSxrKXt2YXIgRT17fTtFW0ldPWxlKEksayxSKSxhZSh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGFy''@;'; put 'put ''aXR5OjEsZm9yY2VkOlJ9LEUpfSxLPWZ1bmN0aW9uKEksayl7aWYoTyYmT1tJXSl7dmFyIEU9e307RVtJXT1sZShNKyIuIitJLGssUiksYWUoe3RhcmdldDpNLHN0YXQ6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6Un0sRSl9fTt6KCJFcnJvciIsZnVuY3Rpb24oSSl7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKEUpe3JldHVybiBtKEksdGhpcyxhcmd1bWVudHMpfX0pLHooIkV2YWxFcnJvciIsZnVuY3Rpb24oSSl7cmV0dXJuIGZ1bmN0aW9uKEUpe3JldHVybiBtKEksdGhpcyxhcmd1bWVudHMpfX0pLHooIlJhbmdlRXJyb3IiLGZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbihFKXty''@;'; put 'put ''ZXR1cm4gbShJLHRoaXMsYXJndW1lbnRzKX19KSx6KCJSZWZlcmVuY2VFcnJvciIsZnVuY3Rpb24oSSl7cmV0dXJuIGZ1bmN0aW9uKEUpe3JldHVybiBtKEksdGhpcyxhcmd1bWVudHMpfX0pLHooIlN5bnRheEVycm9yIixmdW5jdGlvbihJKXtyZXR1cm4gZnVuY3Rpb24oRSl7cmV0dXJuIG0o''@;'; put 'put ''SSx0aGlzLGFyZ3VtZW50cyl9fSkseigiVHlwZUVycm9yIixmdW5jdGlvbihJKXtyZXR1cm4gZnVuY3Rpb24oRSl7cmV0dXJuIG0oSSx0aGlzLGFyZ3VtZW50cyl9fSkseigiVVJJRXJyb3IiLGZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbihFKXtyZXR1cm4gbShJLHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX19KSxLKCJDb21waWxlRXJyb3IiLGZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbihFKXtyZXR1cm4gbShJLHRoaXMsYXJndW1lbnRzKX19KSxLKCJMaW5rRXJyb3IiLGZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbihFKXtyZXR1cm4gbShJLHRoaXMsYXJndW1lbnRzKX19KSxLKCJSdW50''@;'; put 'put ''aW1lRXJyb3IiLGZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbihFKXtyZXR1cm4gbShJLHRoaXMsYXJndW1lbnRzKX19KX0sMTMwMDY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg1NjQ4KSx4PUYoNDY2OTMpLG09RigxMTMwNiksbGU9RigzNTYyKSxNPUYoNjYxMyksTz1G''@;'; put 'put ''KDIzNTIzKSxSPUYoMTIwMTQpLHo9Rig2OTc1KSxLPUYoNDA5MzApLEk9RigzODU4Niksaz1GKDI5MzM5KSxFPVN0cmluZyxqPXgoIkpTT04iLCJzdHJpbmdpZnkiKSxWPU0oLy4vLmV4ZWMpLEI9TSgiIi5jaGFyQXQpLFk9TSgiIi5jaGFyQ29kZUF0KSxYPU0oIiIucmVwbGFjZSksVT1NKDEu''@;'; put 'put ''LnRvU3RyaW5nKSxxPS9bXHVEODAwLVx1REZGRl0vZyxlZT0vXltcdUQ4MDAtXHVEQkZGXSQvLHRlPS9eW1x1REMwMC1cdURGRkZdJC8sb2U9IWt8fE8oZnVuY3Rpb24oKXt2YXIgY2U9eCgiU3ltYm9sIikoKTtyZXR1cm4iW251bGxdIiE9aihbY2VdKXx8Int9IiE9aih7YTpjZX0pfHwie30i''@;'; put 'put ''IT1qKE9iamVjdChjZSkpfSksc2U9TyhmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PWooIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PWooIlx1ZGVhZCIpfSksaGU9ZnVuY3Rpb24oY2UsRyl7dmFyIGI9Syhhcmd1bWVudHMpLEQ9SShHKTtpZihSKEQpfHx2b2lk''@;'; put 'put ''IDAhPT1jZSYmIXooY2UpKXJldHVybiBiWzFdPWZ1bmN0aW9uKEgsTil7aWYoUihEKSYmKE49bGUoRCx0aGlzLEUoSCksTikpLCF6KE4pKXJldHVybiBOfSxtKGosbnVsbCxiKX0sdWU9ZnVuY3Rpb24oY2UsRyxiKXt2YXIgRD1CKGIsRy0xKSxIPUIoYixHKzEpO3JldHVybiBWKGVlLGNlKSYm''@;'; put 'put ''IVYodGUsSCl8fFYodGUsY2UpJiYhVihlZSxEKT8iXFx1IitVKFkoY2UsMCksMTYpOmNlfTtqJiZhZSh7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGFyaXR5OjMsZm9yY2VkOm9lfHxzZX0se3N0cmluZ2lmeTpmdW5jdGlvbihHLGIsRCl7dmFyIEg9Syhhcmd1bWVudHMpLE49bShvZT9oZTpqLG51''@;'; put 'put ''bGwsSCk7cmV0dXJuIHNlJiYic3RyaW5nIj09dHlwZW9mIE4/WChOLHEsdWUpOk59fSl9LDIyNDk2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NTY0OCkseD1GKDcwNzA1KSxtPUYoNTUyNjEpLmNsZWFyO2FlKHtnbG9iYWw6ITAsYmluZDohMCxlbnVtZXJhYmxlOiEwLGZv''@;'; put 'put ''cmNlZDp4LmNsZWFySW1tZWRpYXRlIT09bX0se2NsZWFySW1tZWRpYXRlOm19KX0sOTE5NDU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO0YoMjI0OTYpLEYoMzQ0NDMpfSwzNDQ0MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODU2NDgpLHg9Rig3MDcwNSksbT1GKDU1MjYx''@;'; put 'put ''KS5zZXQsbGU9Rig5NTg5NSksTT14LnNldEltbWVkaWF0ZT9sZShtLCExKTptO2FlKHtnbG9iYWw6ITAsYmluZDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDp4LnNldEltbWVkaWF0ZSE9PU19LHtzZXRJbW1lZGlhdGU6TX0pfSw0NjcwMDooYXQsSWUsRik9Pnt2YXIgYWU9eyIuL2FmIjo4MzI3''@;'; put 'put ''NCwiLi9hZi5qcyI6ODMyNzQsIi4vYXIiOjIyMDk3LCIuL2FyLWR6Ijo2MTg2NywiLi9hci1kei5qcyI6NjE4NjcsIi4vYXIta3ciOjE3MDc4LCIuL2FyLWt3LmpzIjoxNzA3OCwiLi9hci1seSI6Nzc3NzYsIi4vYXItbHkuanMiOjc3Nzc2LCIuL2FyLW1hIjo1Njc4OSwiLi9hci1tYS5qcyI6''@;'; put 'put ''NTY3ODksIi4vYXItc2EiOjY4OTcsIi4vYXItc2EuanMiOjY4OTcsIi4vYXItdG4iOjcxNTg1LCIuL2FyLXRuLmpzIjo3MTU4NSwiLi9hci5qcyI6MjIwOTcsIi4vYXoiOjE1NjExLCIuL2F6LmpzIjoxNTYxMSwiLi9iZSI6NjI0NTksIi4vYmUuanMiOjYyNDU5LCIuL2JnIjo5MTgyNSwiLi9i''@;'; put 'put ''Zy5qcyI6OTE4MjUsIi4vYm0iOjc1OTE4LCIuL2JtLmpzIjo3NTkxOCwiLi9ibiI6MzQwNjUsIi4vYm4tYmQiOjQ5NjgzLCIuL2JuLWJkLmpzIjo0OTY4MywiLi9ibi5qcyI6MzQwNjUsIi4vYm8iOjExMDM0LCIuL2JvLmpzIjoxMTAzNCwiLi9iciI6Mjc2NzEsIi4vYnIuanMiOjI3NjcxLCIu''@;'; put 'put ''L2JzIjozODE1MywiLi9icy5qcyI6MzgxNTMsIi4vY2EiOjU0Mjg3LCIuL2NhLmpzIjo1NDI4NywiLi9jcyI6NzI2MTYsIi4vY3MuanMiOjcyNjE2LCIuL2N2IjoyNzA0OSwiLi9jdi5qcyI6MjcwNDksIi4vY3kiOjk5MTcyLCIuL2N5LmpzIjo5OTE3MiwiLi9kYSI6MjA2MDUsIi4vZGEuanMi''@;'; put 'put ''OjIwNjA1LCIuL2RlIjo5NDAxMywiLi9kZS1hdCI6OTMzOTUsIi4vZGUtYXQuanMiOjkzMzk1LCIuL2RlLWNoIjo5OTgzNSwiLi9kZS1jaC5qcyI6OTk4MzUsIi4vZGUuanMiOjk0MDEzLCIuL2R2IjoxNDU3MCwiLi9kdi5qcyI6MTQ1NzAsIi4vZWwiOjMxODU5LCIuL2VsLmpzIjozMTg1OSwi''@;'; put 'put ''Li9lbi1hdSI6NTU3ODUsIi4vZW4tYXUuanMiOjU1Nzg1LCIuL2VuLWNhIjo4Mzc5MiwiLi9lbi1jYS5qcyI6ODM3OTIsIi4vZW4tZ2IiOjU3NjUxLCIuL2VuLWdiLmpzIjo1NzY1MSwiLi9lbi1pZSI6ODE5MjksIi4vZW4taWUuanMiOjgxOTI5LCIuL2VuLWlsIjoxOTgxOCwiLi9lbi1pbC5q''@;'; put 'put ''cyI6MTk4MTgsIi4vZW4taW4iOjY2MTIsIi4vZW4taW4uanMiOjY2MTIsIi4vZW4tbnoiOjI0OTAwLCIuL2VuLW56LmpzIjoyNDkwMCwiLi9lbi1zZyI6NzI3MjEsIi4vZW4tc2cuanMiOjcyNzIxLCIuL2VvIjo5NTE1OSwiLi9lby5qcyI6OTUxNTksIi4vZXMiOjIxOTU0LCIuL2VzLWRvIjox''@;'; put 'put ''MTc4MCwiLi9lcy1kby5qcyI6MTE3ODAsIi4vZXMtbXgiOjIzNDY4LCIuL2VzLW14LmpzIjoyMzQ2OCwiLi9lcy11cyI6NDQ5MzgsIi4vZXMtdXMuanMiOjQ0OTM4LCIuL2VzLmpzIjoyMTk1NCwiLi9ldCI6MTE0NTMsIi4vZXQuanMiOjExNDUzLCIuL2V1Ijo0NDY5NywiLi9ldS5qcyI6NDQ2''@;'; put 'put ''OTcsIi4vZmEiOjUyOTAwLCIuL2ZhLmpzIjo1MjkwMCwiLi9maSI6NDk3NzUsIi4vZmkuanMiOjQ5Nzc1LCIuL2ZpbCI6NjQyODIsIi4vZmlsLmpzIjo2NDI4MiwiLi9mbyI6ODQyMzYsIi4vZm8uanMiOjg0MjM2LCIuL2ZyIjo4OTM2MSwiLi9mci1jYSI6OTI4MzAsIi4vZnItY2EuanMiOjky''@;'; put 'put ''ODMwLCIuL2ZyLWNoIjoyMTQxMiwiLi9mci1jaC5qcyI6MjE0MTIsIi4vZnIuanMiOjg5MzYxLCIuL2Z5Ijo2Njk4NCwiLi9meS5qcyI6NjY5ODQsIi4vZ2EiOjkzOTYxLCIuL2dhLmpzIjo5Mzk2MSwiLi9nZCI6Nzg4NDksIi4vZ2QuanMiOjc4ODQ5LCIuL2dsIjozNDI3MywiLi9nbC5qcyI6''@;'; put 'put ''MzQyNzMsIi4vZ29tLWRldmEiOjQwNjIzLCIuL2dvbS1kZXZhLmpzIjo0MDYyMywiLi9nb20tbGF0biI6NjI2OTYsIi4vZ29tLWxhdG4uanMiOjYyNjk2LCIuL2d1Ijo2NjkyOCwiLi9ndS5qcyI6NjY5MjgsIi4vaGUiOjI0ODA0LCIuL2hlLmpzIjoyNDgwNCwiLi9oaSI6MjMwMTUsIi4vaGku''@;'; put 'put ''anMiOjIzMDE1LCIuL2hyIjoxNzEzNCwiLi9oci5qcyI6MTcxMzQsIi4vaHUiOjUwNjcwLCIuL2h1LmpzIjo1MDY3MCwiLi9oeS1hbSI6NDUyMywiLi9oeS1hbS5qcyI6NDUyMywiLi9pZCI6OTkyMzMsIi4vaWQuanMiOjk5MjMzLCIuL2lzIjo5NDY5MywiLi9pcy5qcyI6OTQ2OTMsIi4vaXQi''@;'; put 'put ''OjYzOTM2LCIuL2l0LWNoIjo3ODExOCwiLi9pdC1jaC5qcyI6NzgxMTgsIi4vaXQuanMiOjYzOTM2LCIuL2phIjo4Njg3MSwiLi9qYS5qcyI6ODY4NzEsIi4vanYiOjY4NzEwLCIuL2p2LmpzIjo2ODcxMCwiLi9rYSI6MTcxMjUsIi4va2EuanMiOjE3MTI1LCIuL2trIjo4MjQ2MSwiLi9ray5q''@;'; put 'put ''cyI6ODI0NjEsIi4va20iOjc3Mzk5LCIuL2ttLmpzIjo3NzM5OSwiLi9rbiI6Mzg3MjAsIi4va24uanMiOjM4NzIwLCIuL2tvIjo4NTMwNiwiLi9rby5qcyI6ODUzMDYsIi4va3UiOjgyOTk1LCIuL2t1LmpzIjo4Mjk5NSwiLi9reSI6ODc3OSwiLi9reS5qcyI6ODc3OSwiLi9sYiI6NjIwNTcs''@;'; put 'put ''Ii4vbGIuanMiOjYyMDU3LCIuL2xvIjoxNzE5MiwiLi9sby5qcyI6MTcxOTIsIi4vbHQiOjE1NDMwLCIuL2x0LmpzIjoxNTQzMCwiLi9sdiI6NTMzNjMsIi4vbHYuanMiOjUzMzYzLCIuL21lIjo3MjkzOSwiLi9tZS5qcyI6NzI5MzksIi4vbWkiOjM4MjEyLCIuL21pLmpzIjozODIxMiwiLi9t''@;'; put 'put ''ayI6Njk3MTgsIi4vbWsuanMiOjY5NzE4LCIuL21sIjo1MDU2MSwiLi9tbC5qcyI6NTA1NjEsIi4vbW4iOjY4OTI5LCIuL21uLmpzIjo2ODkyOSwiLi9tciI6ODQ4ODAsIi4vbXIuanMiOjg0ODgwLCIuL21zIjo2MzE5MywiLi9tcy1teSI6NDIwNzQsIi4vbXMtbXkuanMiOjQyMDc0LCIuL21z''@;'; put 'put ''LmpzIjo2MzE5MywiLi9tdCI6NTQwODIsIi4vbXQuanMiOjU0MDgyLCIuL215Ijo4MjI2MSwiLi9teS5qcyI6ODIyNjEsIi4vbmIiOjE1MjczLCIuL25iLmpzIjoxNTI3MywiLi9uZSI6MTk4NzQsIi4vbmUuanMiOjE5ODc0LCIuL25sIjo1MTY2NywiLi9ubC1iZSI6ODE0ODQsIi4vbmwtYmUu''@;'; put 'put ''anMiOjgxNDg0LCIuL25sLmpzIjo1MTY2NywiLi9ubiI6MTcyNjIsIi4vbm4uanMiOjE3MjYyLCIuL29jLWxuYyI6MTk2NzksIi4vb2MtbG5jLmpzIjoxOTY3OSwiLi9wYS1pbiI6OTY4MzAsIi4vcGEtaW4uanMiOjk2ODMwLCIuL3BsIjo5MzYxNiwiLi9wbC5qcyI6OTM2MTYsIi4vcHQiOjU1''@;'; put 'put ''MTM4LCIuL3B0LWJyIjozMjc1MSwiLi9wdC1ici5qcyI6MzI3NTEsIi4vcHQuanMiOjU1MTM4LCIuL3JvIjoxNzk2OCwiLi9yby5qcyI6MTc5NjgsIi4vcnUiOjgxODI4LCIuL3J1LmpzIjo4MTgyOCwiLi9zZCI6NjIxODgsIi4vc2QuanMiOjYyMTg4LCIuL3NlIjo2NTYyLCIuL3NlLmpzIjo2''@;'; put 'put ''NTYyLCIuL3NpIjo4NzE3MiwiLi9zaS5qcyI6ODcxNzIsIi4vc2siOjk5OTY2LCIuL3NrLmpzIjo5OTk2NiwiLi9zbCI6NDI4NywiLi9zbC5qcyI6NDI4NywiLi9zcSI6MTUyOTEsIi4vc3EuanMiOjE1MjkxLCIuL3NyIjo4MDQ1MCwiLi9zci1jeXJsIjozNzYwMywiLi9zci1jeXJsLmpzIjoz''@;'; put 'put ''NzYwMywiLi9zci5qcyI6ODA0NTAsIi4vc3MiOjMwMzgzLCIuL3NzLmpzIjozMDM4MywiLi9zdiI6MzcyMjEsIi4vc3YuanMiOjM3MjIxLCIuL3N3Ijo1MTc0MywiLi9zdy5qcyI6NTE3NDMsIi4vdGEiOjYzNTEsIi4vdGEuanMiOjYzNTEsIi4vdGUiOjk4MTE4LCIuL3RlLmpzIjo5ODExOCwi''@;'; put 'put ''Li90ZXQiOjI2Mjc4LCIuL3RldC5qcyI6MjYyNzgsIi4vdGciOjM2OTg3LCIuL3RnLmpzIjozNjk4NywiLi90aCI6MzkzMjUsIi4vdGguanMiOjM5MzI1LCIuL3RrIjo0MzQ4NSwiLi90ay5qcyI6NDM0ODUsIi4vdGwtcGgiOjY4MTQ4LCIuL3RsLXBoLmpzIjo2ODE0OCwiLi90bGgiOjU5NjE2''@;'; put 'put ''LCIuL3RsaC5qcyI6NTk2MTYsIi4vdHIiOjI0MDQwLCIuL3RyLmpzIjoyNDA0MCwiLi90emwiOjU5NCwiLi90emwuanMiOjU5NCwiLi90em0iOjgwNjczLCIuL3R6bS1sYXRuIjoyMzIyNiwiLi90em0tbGF0bi5qcyI6MjMyMjYsIi4vdHptLmpzIjo4MDY3MywiLi91Zy1jbiI6Njk1ODAsIi4v''@;'; put 'put ''dWctY24uanMiOjY5NTgwLCIuL3VrIjo4NzI3MCwiLi91ay5qcyI6ODcyNzAsIi4vdXIiOjExNjU2LCIuL3VyLmpzIjoxMTY1NiwiLi91eiI6NjgzNjQsIi4vdXotbGF0biI6MTg3NDQsIi4vdXotbGF0bi5qcyI6MTg3NDQsIi4vdXouanMiOjY4MzY0LCIuL3ZpIjo3NTA0OSwiLi92aS5qcyI6''@;'; put 'put ''NzUwNDksIi4veC1wc2V1ZG8iOjE1MTA2LCIuL3gtcHNldWRvLmpzIjoxNTEwNiwiLi95byI6NjE5OSwiLi95by5qcyI6NjE5OSwiLi96aC1jbiI6MjcyODAsIi4vemgtY24uanMiOjI3MjgwLCIuL3poLWhrIjozNjg2MCwiLi96aC1oay5qcyI6MzY4NjAsIi4vemgtbW8iOjc4MzY0LCIuL3po''@;'; put 'put ''LW1vLmpzIjo3ODM2NCwiLi96aC10dyI6NDgyLCIuL3poLXR3LmpzIjo0ODJ9O2Z1bmN0aW9uIHgobGUpe3ZhciBNPW0obGUpO3JldHVybiBGKE0pfWZ1bmN0aW9uIG0obGUpe2lmKCFGLm8oYWUsbGUpKXt2YXIgTT1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitsZSsiJyIpO3Ro''@;'; put 'put ''cm93IE0uY29kZT0iTU9EVUxFX05PVF9GT1VORCIsTX1yZXR1cm4gYWVbbGVdfXgua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhhZSl9LHgucmVzb2x2ZT1tLGF0LmV4cG9ydHM9eCx4LmlkPTQ2NzAwfSw3ODc3MzooKT0+e30sODA5NTA6KCk9Pnt9LDQ2NjAxOigpPT57fSw4''@;'; put 'put ''NjIzOigpPT57fSw3NzQ4OigpPT57fSw4NTU2ODooKT0+e30sMTk1Mjc6KCk9Pnt9LDY5MzMxOigpPT57fSw1NjYxOTooKT0+e30sNzcxMDg6KCk9Pnt9LDUyMzYxOigpPT57fSw5NDYxNjooKT0+e30sMTcxNTY6YXQ9PntmdW5jdGlvbiBJZShhZSx4LG0sbGUsTSxPLFIpe3RyeXt2YXIgej1h''@;'; put 'put ''ZVtPXShSKSxLPXoudmFsdWV9Y2F0Y2goSSl7cmV0dXJuIHZvaWQgbShJKX16LmRvbmU/eChLKTpQcm9taXNlLnJlc29sdmUoSykudGhlbihsZSxNKX1hdC5leHBvcnRzPWZ1bmN0aW9uIEYoYWUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB4PXRoaXMsbT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQ''@;'; put 'put ''cm9taXNlKGZ1bmN0aW9uKGxlLE0pe3ZhciBPPWFlLmFwcGx5KHgsbSk7ZnVuY3Rpb24gUihLKXtJZShPLGxlLE0sUix6LCJuZXh0IixLKX1mdW5jdGlvbiB6KEspe0llKE8sbGUsTSxSLHosInRocm93IixLKX1SKHZvaWQgMCl9KX19LGF0LmV4cG9ydHMuX19lc01vZHVsZT0hMCxhdC5leHBv''@;'; put 'put ''cnRzLmRlZmF1bHQ9YXQuZXhwb3J0c30sNDQ5NDY6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6eyJj''@;'; put 'put ''aXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhlciI6IkFFUyIs''@;'; put 'put ''ImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1Niwi''@;'; put 'put ''aXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwi''@;'; put 'put ''dHlwZSI6ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0s''@;'; put 'put ''ImFlcy0xOTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgt''@;'; put 'put ''Y2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjgi''@;'; put 'put ''OnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7ImNp''@;'; put 'put ''cGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7ImNpcGhlciI6''@;'; put 'put ''IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtl''@;'; put 'put ''eSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJp''@;'; put 'put ''diI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTIsIm1v''@;'; put 'put ''ZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5''@;'; put 'put ''cGUiOiJhdXRoIn19Jyl9LDc1MjA3OmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMi''@;'; put 'put ''fSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEz''@;'; put 'put ''MDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24i''@;'; put 'put ''OiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9''@;'; put 'put ''LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMw''@;'; put 'put ''MGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQi''@;'; put 'put ''OiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7''@;'; put 'put ''InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNo''@;'; put 'put ''YTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hh''@;'; put 'put ''MjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQi''@;'; put 'put ''LCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIs''@;'; put 'put ''ImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0''@;'; put 'put ''MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2''@;'; put 'put ''MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sMTMwODphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0''@;'; put 'put ''MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDI5Nzk5OmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5''@;'; put 'put ''MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVm''@;'; put 'put ''MTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQy''@;'; put 'put ''ZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5''@;'; put 'put ''Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIy''@;'; put 'put ''MjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAw''@;'; put 'put ''N2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJl''@;'; put 'put ''YzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhj''@;'; put 'put ''MjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVl''@;'; put 'put ''Mzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMw''@;'; put 'put ''OGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFj''@;'; put 'put ''YmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3''@;'; put 'put ''NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0''@;'; put 'put ''ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdj''@;'; put 'put ''NGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2Uz''@;'; put 'put ''YmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVh''@;'; put 'put ''NzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3''@;'; put 'put ''NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMw''@;'; put 'put ''NWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6''@;'; put 'put ''IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3''@;'; put 'put ''NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1''@;'; put 'put ''NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAx''@;'; put 'put ''NTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAy''@;'; put 'put ''NzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYx''@;'; put 'put ''NTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMx''@;'; put 'put ''ODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2''@;'; put 'put ''Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2''@;'; put 'put ''Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2''@;'; put 'put ''ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIw''@;'; put 'put ''YmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUx''@;'; put 'put ''ZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4''@;'; put 'put ''NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIz''@;'; put 'put ''OTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJm''@;'; put 'put ''Y2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkw''@;'; put 'put ''YzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRm''@;'; put 'put ''OGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVh''@;'; put 'put ''MTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5''@;'; put 'put ''YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhj''@;'; put 'put ''ZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNm''@;'; put 'put ''YzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdl''@;'; put 'put ''ZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZiJ9fScpfSwxODU5NzphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXtpODoiNi41LjQifX0sNjM0ODA6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyI4NzQwIiwiXHU0M2YwXHU0YzMyXHU0NjAzXHU0NWE2XHU0NTc4XHV7MjcyNjd9XHU0ZDc3XHU0NWIz''@;'; put 'put ''XHV7MjdjYjF9XHU0Y2UyXHV7MjdjYzV9XHUzYjk1XHU0NzM2XHU0NzQ0XHU0YzQ3XHU0YzQwXHV7MjQyYmZ9XHV7MjM2MTd9XHV7MjczNTJ9XHV7MjZlOGJ9XHV7MjcwZDJ9XHU0YzU3XHV7MmEzNTF9XHU0NzRmXHU0NWRhXHU0Yzg1XHV7MjdjNmN9XHU0ZDA3XHU0YWE0XHU0NmExXHV7MjZi''@;'; put 'put ''MjN9XHU3MjI1XHV7MjVhNTR9XHV7MjFhNjN9XHV7MjNlMDZ9XHV7MjNmNjF9XHU2NjRkXHU1NmZiIl0sWyI4NzY3IiwiXHU3ZDk1XHU1OTFkXHV7MjhiYjl9XHUzZGY0XHU5NzM0XHV7MjdiZWZ9XHU1YmRiXHV7MjFkNWV9XHU1YWE0XHUzNjI1XHV7MjllYjB9XHU1YWQxXHU1YmI3XHU1Y2Zj''@;'; put 'put ''XHU2NzZlXHU4NTkzXHV7Mjk5NDV9XHU3NDYxXHU3NDlkXHUzODc1XHV7MjFkNTN9XHV7MjM2OWV9XHV7MjYwMjF9XHUzZWVjIl0sWyI4N2ExIiwiXHV7MjU4ZGV9XHUzYWY1XHU3YWZjXHU5Zjk3XHV7MjQxNjF9XHV7Mjg5MGR9XHV7MjMxZWF9XHV7MjBhOGF9XHV7MjMyNWV9XHU0MzBhXHU4''@;'; put 'put ''NDg0XHU5Zjk2XHU5NDJmXHU0OTMwXHU4NjEzXHU1ODk2XHU5NzRhXHU5MjE4XHU3OWQwXHU3YTMyXHU2NjYwXHU2YTI5XHU4ODlkXHU3NDRjXHU3YmM1XHU2NzgyXHU3YTJjXHU1MjRmXHU5MDQ2XHUzNGU2XHU3M2M0XHV7MjVkYjl9XHU3NGM2XHU5ZmM3XHU1N2IzXHU0OTJmXHU1NDRjXHU0''@;'; put 'put ''MTMxXHV7MjM2OGV9XHU1ODE4XHU3YTcyXHV7MjdiNjV9XHU4YjhmXHU0NmFlXHV7MjZlODh9XHU0MTgxXHV7MjVkOTl9XHU3YmFlXHV7MjI0YmN9XHU5ZmM4XHV7MjI0YzF9XHV7MjI0Yzl9XHV7MjI0Y2N9XHU5ZmM5XHU4NTA0XHV7MjM1YmJ9XHU0MGI0XHU5ZmNhXHU0NGUxXHV7MmFkZmZ9''@;'; put 'put ''XHU2MmMxXHU3MDZlXHU5ZmNiIl0sWyI4ODQwIiwiXHUzMWMwIiw0LCJcdXsyMDEwY31cdTMxYzVcdXsyMDBkMX1cdXsyMDBjZH1cdTMxYzZcdTMxYzdcdXsyMDBjYn1cdXsyMWZlOH1cdTMxYzhcdXsyMDBjYX1cdTMxYzlcdTMxY2FcdTMxY2JcdTMxY2NcdXsyMDEwZX1cdTMxY2RcdTMxY2Vc''@;'; put 'put ''dTAxMDBceGMxXHUwMWNkXHhjMFx1MDExMlx4YzlcdTAxMWFceGM4XHUwMTRjXHhkM1x1MDFkMVx4ZDJcdTBmZmZceGNhXHUwMzA0XHUxZWJlXHUwZmZmXHhjYVx1MDMwY1x1MWVjMFx4Y2FcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDI1MVx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1''@;'; put 'put ''MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhIl0sWyI4OGExIiwiXHUwMWRjXHhmY1x1MGZmZlx4ZWFcdTAzMDRcdTFlYmZcdTBmZmZceGVhXHUwMzBjXHUxZWMxXHhlYVx1MDI2MVx1MjNkYVx1MjNkYiJdLFsiODk0MCIs''@;'; put 'put ''Ilx1ezJhM2E5fVx1ezIxMTQ1fSJdLFsiODk0MyIsIlx1NjUwYSJdLFsiODk0NiIsIlx1NGUzZFx1NmVkZFx1OWQ0ZVx1OTFkZiJdLFsiODk0YyIsIlx1ezI3NzM1fVx1NjQ5MVx1NGYxYVx1NGYyOFx1NGZhOFx1NTE1Nlx1NTE3NFx1NTE5Y1x1NTFlNFx1NTJhMVx1NTJhOFx1NTMzYlx1NTM0''@;'; put 'put ''ZVx1NTNkMVx1NTNkOFx1NTZlMlx1NThmMFx1NTkwNFx1NTkwN1x1NTkzMlx1NTkzNFx1NWI2Nlx1NWI5ZVx1NWI5Zlx1NWM5YVx1NWU4Nlx1NjAzYlx1NjU4OVx1NjdmZVx1NjgwNFx1Njg2NVx1NmQ0ZVx1NzBiY1x1NzUzNVx1N2VhNFx1N2VhY1x1N2ViYVx1N2VjN1x1N2VjZlx1N2VkZlx1''@;'; put 'put ''N2YwNlx1N2YzN1x1ODI3YVx1ODJjZlx1ODM2Zlx1ODljNlx1OGJiZVx1OGJlMlx1OGY2Nlx1OGY2N1x1OGY2ZSJdLFsiODlhMSIsIlx1NzQxMVx1N2NmY1x1N2RjZFx1Njk0Nlx1N2FjOVx1NTIyNyJdLFsiODlhYiIsIlx1OTE4Y1x1NzhiOFx1OTE1ZVx1ODBiYyJdLFsiODliMCIsIlx1OGQw''@;'; put 'put ''Ylx1ODBmNlx1ezIwOWU3fSJdLFsiODliNSIsIlx1ODA5Zlx1OWVjN1x1NGNjZFx1OWRjOVx1OWUwY1x1NGMzZVx1ezI5ZGY2fVx1ezI3MDBlfVx1OWUwYVx1ezJhMTMzfVx1MzVjMSJdLFsiODljMSIsIlx1NmU5YVx1ODIzZVx1NzUxOSJdLFsiODljNSIsIlx1NDkxMVx1OWE2Y1x1OWE4Zlx1''@;'; put 'put ''OWY5OVx1Nzk4N1x1ezI4NDZjfVx1ezIxZGNhfVx1ezIwNWQwfVx1ezIyYWU2fVx1NGUyNFx1NGU4MVx1NGU4MFx1NGU4N1x1NGViZlx1NGVlYlx1NGYzN1x1MzQ0Y1x1NGZiZFx1M2U0OFx1NTAwM1x1NTA4OFx1MzQ3ZFx1MzQ5M1x1MzRhNVx1NTE4Nlx1NTkwNVx1NTFkYlx1NTFmY1x1NTIw''@;'; put 'put ''NVx1NGU4OVx1NTI3OVx1NTI5MFx1NTMyN1x1MzVjN1x1NTNhOVx1MzU1MVx1NTNiMFx1MzU1M1x1NTNjMlx1NTQyM1x1MzU2ZFx1MzU3Mlx1MzY4MVx1NTQ5M1x1NTRhM1x1NTRiNFx1NTRiOVx1NTRkMFx1NTRlZlx1NTUxOFx1NTUyM1x1NTUyOFx1MzU5OFx1NTUzZlx1MzVhNVx1MzViZlx1''@;'; put 'put ''NTVkN1x1MzVjNSJdLFsiOGE0MCIsIlx1ezI3ZDg0fVx1NTUyNSJdLFsiOGE0MyIsIlx1ezIwYzQyfVx1ezIwZDE1fVx1ezI1MTJifVx1NTU5MFx1ezIyY2M2fVx1MzllY1x1ezIwMzQxfVx1OGU0Nlx1ezI0ZGI4fVx1ezI5NGU1fVx1NDA1M1x1ezI4MGJlfVx1Nzc3YVx1ezIyYzM4fVx1M2Ez''@;'; put 'put ''NFx1NDdkNVx1ezI4MTVkfVx1ezI2OWYyfVx1ezI0ZGVhfVx1NjRkZFx1ezIwZDdjfVx1ezIwZmI0fVx1ezIwY2Q1fVx1ezIxMGY0fVx1NjQ4ZFx1OGU3ZVx1ezIwZTk2fVx1ezIwYzBifVx1ezIwZjY0fVx1ezIyY2E5fVx1ezI4MjU2fVx1ezI0NGQzfSJdLFsiOGE2NCIsIlx1ezIwZDQ2fVx1''@;'; put 'put ''ezI5YTRkfVx1ezI4MGU5fVx1NDdmNFx1ezI0ZWE3fVx1ezIyY2MyfVx1OWFiMlx1M2E2N1x1ezI5NWY0fVx1M2ZlZFx1MzUwNlx1ezI1MmM3fVx1ezI5N2Q0fVx1ezI3OGM4fVx1ezIyZDQ0fVx1OWQ2ZVx1OTgxNSJdLFsiOGE3NiIsIlx1NDNkOVx1ezI2MGE1fVx1NjRiNFx1NTRlM1x1ezIy''@;'; put 'put ''ZDRjfVx1ezIyYmNhfVx1ezIxMDc3fVx1MzlmYlx1ezIxMDZmfSJdLFsiOGFhMSIsIlx1ezI2NmRhfVx1ezI2NzE2fVx1ezI3OWEwfVx1NjRlYVx1ezI1MDUyfVx1ezIwYzQzfVx1OGU2OFx1ezIyMWExfVx1ezI4YjRjfVx1ezIwNzMxfSJdLFsiOGFhYyIsIlx1NDgwYlx1ezIwMWE5fVx1M2Zm''@;'; put 'put ''YVx1NTg3M1x1ezIyZDhkfSJdLFsiOGFiMiIsIlx1ezI0NWM4fVx1ezIwNGZjfVx1ezI2MDk3fVx1ezIwZjRjfVx1ezIwZDk2fVx1NTU3OVx1NDBiYlx1NDNiYSJdLFsiOGFiYiIsIlx1NGFiNFx1ezIyYTY2fVx1ezIxMDlkfVx1ODFhYVx1OThmNVx1ezIwZDljfVx1NjM3OVx1MzlmZVx1ezIy''@;'; put 'put ''Nzc1fVx1OGRjMFx1NTZhMVx1NjQ3Y1x1M2U0MyJdLFsiOGFjOSIsIlx1ezJhNjAxfVx1ezIwZTA5fVx1ezIyYWNmfVx1ezIyY2M5fSJdLFsiOGFjZSIsIlx1ezIxMGM4fVx1ezIzOWMyfVx1Mzk5Mlx1M2EwNlx1ezI4MjlifVx1MzU3OFx1ezI1ZTQ5fVx1ezIyMGM3fVx1NTY1Mlx1ezIwZjMx''@;'; put 'put ''fVx1ezIyY2IyfVx1ezI5NzIwfVx1MzRiY1x1NmMzZFx1ezI0ZTNifSJdLFsiOGFkZiIsIlx1ezI3NTc0fVx1ezIyZThifVx1ezIyMjA4fVx1ezJhNjVifVx1ezI4Y2NkfVx1ezIwZTdhfVx1ezIwYzM0fVx1ezI2ODFjfVx1N2Y5M1x1ezIxMGNmfVx1ezIyODAzfVx1ezIyOTM5fVx1MzVmYlx1''@;'; put 'put ''ezI1MWUzfVx1ezIwZThjfVx1ezIwZjhkfVx1ezIwZWFhfVx1M2Y5M1x1ezIwZjMwfVx1ezIwZDQ3fVx1ezIxMTRmfVx1ezIwZTRjfSJdLFsiOGFmNiIsIlx1ezIwZWFifVx1ezIwYmE5fVx1ezIwZDQ4fVx1ezIxMGMwfVx1ezIxMTNkfVx1M2ZmOVx1ezIyNjk2fVx1NjQzMlx1ezIwZmFkfSJd''@;'; put 'put ''LFsiOGI0MCIsIlx1ezIzM2Y0fVx1ezI3NjM5fVx1ezIyYmNlfVx1ezIwZDdlfVx1ezIwZDdmfVx1ezIyYzUxfVx1ezIyYzU1fVx1M2ExOFx1ezIwZTk4fVx1ezIxMGM3fVx1ezIwZjJlfVx1ezJhNjMyfVx1ezI2YjUwfVx1ezI4Y2QyfVx1ezI4ZDk5fVx1ezI4Y2NhfVx1OTVhYVx1NTRjY1x1''@;'; put 'put ''ODJjNFx1NTViOSJdLFsiOGI1NSIsIlx1ezI5ZWMzfVx1OWMyNlx1OWFiNlx1ezI3NzVlfVx1ezIyZGVlfVx1NzE0MFx1ODE2ZFx1ODBlY1x1NWMxY1x1ezI2NTcyfVx1ODEzNFx1Mzc5N1x1NTM1Zlx1ezI4MGJkfVx1OTFiNlx1ezIwZWZhfVx1ezIwZTBmfVx1ezIwZTc3fVx1ezIwZWZifVx1''@;'; put 'put ''MzVkZFx1ezI0ZGVifVx1MzYwOVx1ezIwY2Q2fVx1NTZhZlx1ezIyN2I1fVx1ezIxMGM5fVx1ezIwZTEwfVx1ezIwZTc4fVx1ezIxMDc4fVx1ezIxMTQ4fVx1ezI4MjA3fVx1ezIxNDU1fVx1ezIwZTc5fVx1ezI0ZTUwfVx1ezIyZGE0fVx1NWE1NFx1ezIxMDFkfVx1ezIxMDFlfVx1ezIxMGY1''@;'; put 'put ''fVx1ezIxMGY2fVx1NTc5Y1x1ezIwZTExfSJdLFsiOGJhMSIsIlx1ezI3Njk0fVx1ezI4MmNkfVx1ezIwZmI1fVx1ezIwZTdifVx1ezI1MTdlfVx1MzcwM1x1ezIwZmI2fVx1ezIxMTgwfVx1ezI1MmQ4fVx1ezJhMmJkfVx1ezI0OWRhfVx1ezIxODNhfVx1ezI0MTc3fVx1ezI4MjdjfVx1NTg5''@;'; put 'put ''OVx1NTI2OFx1MzYxYVx1ezI1NzNkfVx1N2JiMlx1NWI2OFx1NDgwMFx1NGIyY1x1OWYyN1x1NDllN1x1OWMxZlx1OWI4ZFx1ezI1Yjc0fVx1ezIzMTNkfVx1NTVmYlx1MzVmMlx1NTY4OVx1NGUyOFx1NTkwMlx1ezIxYmMxfVx1ezJmODc4fVx1OTc1MVx1ezIwMDg2fVx1NGU1Ylx1NGViYlx1''@;'; put 'put ''MzUzZVx1NWMyM1x1NWY1MVx1NWZjNFx1MzhmYVx1NjI0Y1x1NjUzNVx1NmI3YVx1NmMzNVx1NmMzYVx1NzA2Y1x1NzIyYlx1NGUyY1x1NzJhZFx1ezI0OGU5fVx1N2Y1Mlx1NzkzYlx1N2NmOVx1N2Y1M1x1ezI2MjZhfVx1MzRjMSJdLFsiOGJkZSIsIlx1ezI2MzRifVx1ODAwMlx1ODA4MFx1''@;'; put 'put ''ezI2NjEyfVx1ezI2OTUxfVx1NTM1ZFx1ODg2NFx1ODljMVx1ezI3OGIyfVx1OGJhMFx1OGQxZFx1OTQ4NVx1OTU3OFx1OTU3Zlx1OTVlOFx1ezI4ZTBmfVx1OTdlNlx1OTg3NVx1OThjZVx1OThkZVx1OTk2M1x1ezI5ODEwfVx1OWM3Y1x1OWUxZlx1OWVjNFx1NmI2Zlx1ZjkwN1x1NGUzN1x1''@;'; put 'put ''ezIwMDg3fVx1OTYxZFx1NjIzN1x1OTRhMiJdLFsiOGM0MCIsIlx1NTAzYlx1NmRmZVx1ezI5YzczfVx1OWZhNlx1M2RjOVx1ODg4Zlx1ezI0MTRlfVx1NzA3N1x1NWNmNVx1NGIyMFx1ezI1MWNkfVx1MzU1OVx1ezI1ZDMwfVx1NjEyMlx1ezI4YTMyfVx1OGZhN1x1OTFmNlx1NzE5MVx1Njcx''@;'; put 'put ''OVx1NzNiYVx1ezIzMjgxfVx1ezJhMTA3fVx1M2M4Ylx1ezIxOTgwfVx1NGIxMFx1NzhlNFx1NzQwMlx1NTFhZVx1ezI4NzBmfVx1NDAwOVx1NmE2M1x1ezJhMmJhfVx1NDIyM1x1ODYwZlx1ezIwYTZmfVx1N2EyYVx1ezI5OTQ3fVx1ezI4YWVhfVx1OTc1NVx1NzA0ZFx1NTMyNFx1ezIyMDdl''@;'; put 'put ''fVx1OTNmNFx1NzZkOVx1ezI4OWUzfVx1OWZhN1x1NzdkZFx1NGVhM1x1NGZmMFx1NTBiY1x1NGUyZlx1NGYxN1x1OWZhOFx1NTQzNFx1N2Q4Ylx1NTg5Mlx1NThkMFx1ezIxZGI2fVx1NWU5Mlx1NWU5OVx1NWZjMlx1ezIyNzEyfVx1NjU4YiJdLFsiOGNhMSIsIlx1ezIzM2Y5fVx1NjkxOVx1''@;'; put 'put ''NmE0M1x1ezIzYzYzfVx1NmNmZiJdLFsiOGNhNyIsIlx1NzIwMFx1ezI0NTA1fVx1NzM4Y1x1M2VkYlx1ezI0YTEzfVx1NWIxNVx1NzRiOVx1OGI4M1x1ezI1Y2E0fVx1ezI1Njk1fVx1N2E5M1x1N2JlY1x1N2NjM1x1N2U2Y1x1ODJmOFx1ODU5N1x1OWZhOVx1ODg5MFx1OWZhYVx1OGViOVx1''@;'; put 'put ''OWZhYlx1OGZjZlx1ODU1Zlx1OTllMFx1OTIyMVx1OWZhY1x1ezI4ZGI5fVx1ezIxNDNmfVx1NDA3MVx1NDJhMlx1NWExYSJdLFsiOGNjOSIsIlx1OTg2OFx1Njc2Ylx1NDI3Nlx1NTczZCJdLFsiOGNjZSIsIlx1ODVkNlx1ezI0OTdifVx1ODJiZlx1ezI3MTBkfVx1NGM4MVx1ezI2ZDc0fVx1''@;'; put 'put ''NWQ3Ylx1ezI2YjE1fVx1ezI2ZmJlfVx1OWZhZFx1OWZhZVx1NWI5Nlx1OWZhZlx1NjZlN1x1N2U1Ylx1NmU1N1x1NzljYVx1M2Q4OFx1NDRjM1x1ezIzMjU2fVx1ezIyNzk2fVx1NDM5YVx1NDUzNiJdLFsiOGNlNiIsIlx1NWNkNVx1ezIzYjFhfVx1OGFmOVx1NWM3OFx1M2QxMlx1ezIzNTUx''@;'; put 'put ''fVx1NWQ3OFx1OWZiMlx1NzE1N1x1NDU1OFx1ezI0MGVjfVx1ezIxZTIzfVx1NGM3N1x1Mzk3OFx1MzQ0YVx1ezIwMWE0fVx1ezI2YzQxfVx1OGFjY1x1NGZiNFx1ezIwMjM5fVx1NTliZlx1ODE2Y1x1OTg1Nlx1ezI5OGZhfVx1NWYzYiJdLFsiOGQ0MCIsIlx1ezIwYjlmfSJdLFsiOGQ0MiIs''@;'; put 'put ''Ilx1ezIyMWMxfVx1ezI4OTZkfVx1NDEwMlx1NDZiYlx1ezI5MDc5fVx1M2YwN1x1OWZiM1x1ezJhMWI1fVx1NDBmOFx1MzdkNlx1NDZmN1x1ezI2YzQ2fVx1NDE3Y1x1ezI4NmIyfVx1ezI3M2ZmfVx1NDU2ZFx1MzhkNFx1ezI1NDlhfVx1NDU2MVx1NDUxYlx1NGQ4OVx1NGM3Ylx1NGQ3Nlx1''@;'; put 'put ''NDVlYVx1M2ZjOFx1ezI0YjBmfVx1MzY2MVx1NDRkZVx1NDRiZFx1NDFlZFx1NWQzZVx1NWQ0OFx1NWQ1Nlx1M2RmY1x1MzgwZlx1NWRhNFx1NWRiOVx1MzgyMFx1MzgzOFx1NWU0Mlx1NWViZFx1NWYyNVx1NWY4M1x1MzkwOFx1MzkxNFx1MzkzZlx1Mzk0ZFx1NjBkN1x1NjEzZFx1NWNlNVx1''@;'; put 'put ''Mzk4OVx1NjFiN1x1NjFiOVx1NjFjZlx1MzliOFx1NjIyY1x1NjI5MFx1NjJlNVx1NjMxOFx1MzlmOFx1NTZiMSJdLFsiOGRhMSIsIlx1M2EwM1x1NjNlMlx1NjNmYlx1NjQwN1x1NjQ1YVx1M2E0Ylx1NjRjMFx1NWQxNVx1NTYyMVx1OWY5Zlx1M2E5N1x1NjU4Nlx1M2FiZFx1NjVmZlx1NjY1''@;'; put 'put ''M1x1M2FmMlx1NjY5Mlx1M2IyMlx1NjcxNlx1M2I0Mlx1NjdhNFx1NjgwMFx1M2I1OFx1Njg0YVx1Njg4NFx1M2I3Mlx1M2I3MVx1M2I3Ylx1NjkwOVx1Njk0M1x1NzI1Y1x1Njk2NFx1Njk5Zlx1Njk4NVx1M2JiY1x1NjlkNlx1M2JkZFx1NmE2NVx1NmE3NFx1NmE3MVx1NmE4Mlx1M2JlY1x1''@;'; put 'put ''NmE5OVx1M2JmMlx1NmFhYlx1NmFiNVx1NmFkNFx1NmFmNlx1NmI4MVx1NmJjMVx1NmJlYVx1NmM3NVx1NmNhYVx1M2NjYlx1NmQwMlx1NmQwNlx1NmQyNlx1NmQ4MVx1M2NlZlx1NmRhNFx1NmRiMVx1NmUxNVx1NmUxOFx1NmUyOVx1NmU4Nlx1ezI4OWMwfVx1NmViYlx1NmVlMlx1NmVkYVx1''@;'; put 'put ''OWY3Zlx1NmVlOFx1NmVlOVx1NmYyNFx1NmYzNFx1M2Q0Nlx1ezIzZjQxfVx1NmY4MVx1NmZiZVx1M2Q2YVx1M2Q3NVx1NzFiN1x1NWM5OVx1M2Q4YVx1NzAyY1x1M2Q5MVx1NzA1MFx1NzA1NFx1NzA2Zlx1NzA3Zlx1NzA4OVx1ezIwMzI1fVx1NDNjMVx1MzVmMVx1ezIwZWQ4fSJdLFsiOGU0''@;'; put 'put ''MCIsIlx1ezIzZWQ3fVx1NTdiZVx1ezI2ZWQzfVx1NzEzZVx1ezI1N2UwfVx1MzY0ZVx1NjlhMlx1ezI4YmU5fVx1NWI3NFx1N2E0OVx1ezI1OGUxfVx1ezI5NGQ5fVx1N2E2NVx1N2E3ZFx1ezI1OWFjfVx1N2FiYlx1N2FiMFx1N2FjMlx1N2FjM1x1NzFkMVx1ezI2NDhkfVx1NDFjYVx1N2Fk''@;'; put 'put ''YVx1N2FkZFx1N2FlYVx1NDFlZlx1NTRiMlx1ezI1YzAxfVx1N2IwYlx1N2I1NVx1N2IyOVx1ezI1MzBlfVx1ezI1Y2ZlfVx1N2JhMlx1N2I2Zlx1ODM5Y1x1ezI1YmI0fVx1ezI2YzdmfVx1N2JkMFx1ODQyMVx1N2I5Mlx1N2JiOFx1ezI1ZDIwfVx1M2RhZFx1ezI1YzY1fVx1ODQ5Mlx1N2Jm''@;'; put 'put ''YVx1N2MwNlx1N2MzNVx1ezI1Y2MxfVx1N2M0NFx1N2M4M1x1ezI0ODgyfVx1N2NhNlx1NjY3ZFx1ezI0NTc4fVx1N2NjOVx1N2NjN1x1N2NlNlx1N2M3NFx1N2NmM1x1N2NmNVx1N2NjZSJdLFsiOGVhMSIsIlx1N2U2N1x1NDUxZFx1ezI2ZTQ0fVx1N2Q1ZFx1ezI2ZWQ2fVx1NzQ4ZFx1N2Q4''@;'; put 'put ''OVx1N2RhYlx1NzEzNVx1N2RiM1x1N2RkMlx1ezI0MDU3fVx1ezI2MDI5fVx1N2RlNFx1M2QxM1x1N2RmNVx1ezIxN2Y5fVx1N2RlNVx1ezI4MzZkfVx1N2UxZFx1ezI2MTIxfVx1ezI2MTVhfVx1N2U2ZVx1N2U5Mlx1NDMyYlx1OTQ2Y1x1N2UyN1x1N2Y0MFx1N2Y0MVx1N2Y0N1x1NzkzNlx1''@;'; put 'put ''ezI2MmQwfVx1OTllMVx1N2Y5N1x1ezI2MzUxfVx1N2ZhM1x1ezIxNjYxfVx1ezIwMDY4fVx1NDU1Y1x1ezIzNzY2fVx1NDUwM1x1ezI4MzNhfVx1N2ZmYVx1ezI2NDg5fVx1ODAwNVx1ODAwOFx1ODAxZFx1ODAyOFx1ODAyZlx1ezJhMDg3fVx1ezI2Y2MzfVx1ODAzYlx1ODAzY1x1ODA2MVx1''@;'; put 'put ''ezIyNzE0fVx1NDk4OVx1ezI2NjI2fVx1ezIzZGUzfVx1ezI2NmU4fVx1NjcyNVx1ODBhN1x1ezI4YTQ4fVx1ODEwN1x1ODExYVx1NThiMFx1ezIyNmY2fVx1NmM3Zlx1ezI2NDk4fVx1ezI0ZmI4fVx1NjRlN1x1ezIxNDhhfVx1ODIxOFx1ezIxODVlfVx1NmE1M1x1ezI0YTY1fVx1ezI0YTk1''@;'; put 'put ''fVx1NDQ3YVx1ODIyOVx1ezIwYjBkfVx1ezI2YTUyfVx1ezIzZDdlfVx1NGZmOVx1ezIxNGZkfVx1ODRlMlx1ODM2Mlx1ezI2YjBhfVx1ezI0OWE3fVx1ezIzNTMwfVx1ezIxNzczfVx1ezIzZGY4fVx1ODJhYVx1NjkxYlx1ezJmOTk0fVx1NDFkYiJdLFsiOGY0MCIsIlx1ODU0Ylx1ODJkMFx1''@;'; put 'put ''ODMxYVx1ezIwZTE2fVx1ezIxN2I0fVx1MzZjMVx1ezIzMTdkfVx1ezIzNTVhfVx1ODI3Ylx1ODJlMlx1ODMxOFx1ezIzZThifVx1ezI2ZGEzfVx1ezI2YjA1fVx1ezI2Yjk3fVx1ezIzNWNlfVx1M2RiZlx1ODMxZFx1NTVlY1x1ODM4NVx1NDUwYlx1ezI2ZGE1fVx1ODNhY1x1ODNjMVx1ODNk''@;'; put 'put ''M1x1MzQ3ZVx1ezI2ZWQ0fVx1NmE1N1x1ODU1YVx1MzQ5Nlx1ezI2ZTQyfVx1ezIyZWVmfVx1ODQ1OFx1ezI1YmU0fVx1ODQ3MVx1M2RkM1x1NDRlNFx1NmFhN1x1ODQ0YVx1ezIzY2I1fVx1Nzk1OFx1ODRhOFx1ezI2Yjk2fVx1ezI2ZTc3fVx1ezI2ZTQzfVx1ODRkZVx1ODQwZlx1ODM5MVx1''@;'; put 'put ''NDRhMFx1ODQ5M1x1ODRlNFx1ezI1YzkxfVx1NDI0MFx1ezI1Y2MwfVx1NDU0M1x1ODUzNFx1NWFmMlx1ezI2ZTk5fVx1NDUyN1x1ODU3M1x1NDUxNlx1NjdiZlx1ODYxNiJdLFsiOGZhMSIsIlx1ezI4NjI1fVx1ezI4NjNifVx1ODVjMVx1ezI3MDg4fVx1ODYwMlx1ezIxNTgyfVx1ezI3MGNk''@;'; put 'put ''fVx1ezJmOWIyfVx1NDU2YVx1ODYyOFx1MzY0OFx1ezIxOGEyfVx1NTNmN1x1ezI3MzlhfVx1ODY3ZVx1ODc3MVx1ezJhMGY4fVx1ODdlZVx1ezIyYzI3fVx1ODdiMVx1ODdkYVx1ODgwZlx1NTY2MVx1ODY2Y1x1Njg1Nlx1NDYwZlx1ODg0NVx1ODg0Nlx1ezI3NWUwfVx1ezIzZGI5fVx1ezI3''@;'; put 'put ''NWU0fVx1ODg1ZVx1ODg5Y1x1NDY1Ylx1ODhiNFx1ODhiNVx1NjNjMVx1ODhjNVx1Nzc3N1x1ezI3NzBmfVx1ODk4N1x1ODk4YVx1ODlhNlx1ODlhOVx1ODlhN1x1ODliY1x1ezI4YTI1fVx1ODllN1x1ezI3OTI0fVx1ezI3YWJkfVx1OGE5Y1x1Nzc5M1x1OTFmZVx1OGE5MFx1ezI3YTU5fVx1''@;'; put 'put ''N2FlOVx1ezI3YjNhfVx1ezIzZjhmfVx1NDcxM1x1ezI3YjM4fVx1NzE3Y1x1OGIwY1x1OGIxZlx1ezI1NDMwfVx1ezI1NTY1fVx1OGIzZlx1OGI0Y1x1OGI0ZFx1OGFhOVx1ezI0YTdhfVx1OGI5MFx1OGI5Ylx1OGFhZlx1ezIxNmRmfVx1NDYxNVx1ODg0Zlx1OGM5Ylx1ezI3ZDU0fVx1ezI3''@;'; put 'put ''ZDhmfVx1ezJmOWQ0fVx1MzcyNVx1ezI3ZDUzfVx1OGNkNlx1ezI3ZDk4fVx1ezI3ZGJkfVx1OGQxMlx1OGQwM1x1ezIxOTEwfVx1OGNkYlx1NzA1Y1x1OGQxMVx1ezI0Y2M5fVx1M2VkMFx1OGQ3NyJdLFsiOTA0MCIsIlx1OGRhOVx1ezI4MDAyfVx1ezIxMDE0fVx1ezI0OThhfVx1M2I3Y1x1''@;'; put 'put ''ezI4MWJjfVx1ezI3MTBjfVx1N2FlN1x1OGVhZFx1OGViNlx1OGVjM1x1OTJkNFx1OGYxOVx1OGYyZFx1ezI4MzY1fVx1ezI4NDEyfVx1OGZhNVx1OTMwM1x1ezJhMjlmfVx1ezIwYTUwfVx1OGZiM1x1NDkyYVx1ezI4OWRlfVx1ezI4NTNkfVx1ezIzZGJifVx1NWVmOFx1ezIzMjYyfVx1OGZm''@;'; put 'put ''OVx1ezJhMDE0fVx1ezI4NmJjfVx1ezI4NTAxfVx1ezIyMzI1fVx1Mzk4MFx1ezI2ZWQ3fVx1OTAzN1x1ezI4NTNjfVx1ezI3YWJlfVx1OTA2MVx1ezI4NTZjfVx1ezI4NjBifVx1OTBhOFx1ezI4NzEzfVx1OTBjNFx1ezI4NmU2fVx1OTBhZVx1OTBmZFx1OTE2N1x1M2FmMFx1OTFhOVx1OTFj''@;'; put 'put ''NFx1N2NhY1x1ezI4OTMzfVx1ezIxZTg5fVx1OTIwZVx1NmM5Zlx1OTI0MVx1OTI2Mlx1ezI1NWI5fVx1OTJiOVx1ezI4YWM2fVx1ezIzYzlifVx1ezI4YjBjfVx1ezI1NWRifSJdLFsiOTBhMSIsIlx1ezIwZDMxfVx1OTMyY1x1OTM2Ylx1ezI4YWUxfVx1ezI4YmVifVx1NzA4Zlx1NWFjM1x1''@;'; put 'put ''ezI4YWUyfVx1ezI4YWU1fVx1NDk2NVx1OTI0NFx1ezI4YmVjfVx1ezI4YzM5fVx1ezI4YmZmfVx1OTM3M1x1OTQ1Ylx1OGViY1x1OTU4NVx1OTVhNlx1OTQyNlx1OTVhMFx1NmZmNlx1NDJiOVx1ezIyNjdhfVx1ezI4NmQ4fVx1ezIxMjdjfVx1ezIzZTJlfVx1NDlkZlx1NmMxY1x1OTY3Ylx1''@;'; put 'put ''OTY5Nlx1NDE2Y1x1OTZhM1x1ezI2ZWQ1fVx1NjFkYVx1OTZiNlx1NzhmNVx1ezI4YWUwfVx1OTZiZFx1NTNjY1x1NDlhMVx1ezI2Y2I4fVx1ezIwMjc0fVx1ezI2NDEwfVx1ezI5MGFmfVx1ezI5MGU1fVx1ezI0YWQxfVx1ezIxOTE1fVx1ezIzMzBhfVx1OTczMVx1ODY0Mlx1OTczNlx1NGEw''@;'; put 'put ''Zlx1NDUzZFx1NDU4NVx1ezI0YWU5fVx1NzA3NVx1NWI0MVx1OTcxYlx1OTc1Y1x1ezI5MWQ1fVx1OTc1N1x1NWI0YVx1ezI5MWVifVx1OTc1Zlx1OTQyNVx1NTBkMFx1ezIzMGI3fVx1ezIzMGJjfVx1OTc4OVx1OTc5Zlx1OTdiMVx1OTdiZVx1OTdjMFx1OTdkMlx1OTdlMFx1ezI1NDZjfVx1''@;'; put 'put ''OTdlZVx1NzQxY1x1ezI5NDMzfVx1OTdmZlx1OTdmNVx1ezI5NDFkfVx1ezI3OTdhfVx1NGFkMVx1OTgzNFx1OTgzM1x1OTg0Ylx1OTg2Nlx1M2IwZVx1ezI3MTc1fVx1M2Q1MVx1ezIwNjMwfVx1ezI0MTVjfSJdLFsiOTE0MCIsIlx1ezI1NzA2fVx1OThjYVx1OThiN1x1OThjOFx1OThjN1x1''@;'; put 'put ''NGFmZlx1ezI2ZDI3fVx1ezIxNmQzfVx1NTViMFx1OThlMVx1OThlNlx1OThlY1x1OTM3OFx1OTkzOVx1ezI0YTI5fVx1NGI3Mlx1ezI5ODU3fVx1ezI5OTA1fVx1OTlmNVx1OWEwY1x1OWEzYlx1OWExMFx1OWE1OFx1ezI1NzI1fVx1MzZjNFx1ezI5MGIxfVx1ezI5YmQ1fVx1OWFlMFx1OWFl''@;'; put 'put ''Mlx1ezI5YjA1fVx1OWFmNFx1NGMwZVx1OWIxNFx1OWIyZFx1ezI4NjAwfVx1NTAzNFx1OWIzNFx1ezI2OWE4fVx1MzhjM1x1ezIzMDdkfVx1OWI1MFx1OWI0MFx1ezI5ZDNlfVx1NWE0NVx1ezIxODYzfVx1OWI4ZVx1ezI0MjRifVx1OWMwMlx1OWJmZlx1OWMwY1x1ezI5ZTY4fVx1OWRkNFx1''@;'; put 'put ''ezI5ZmI3fVx1ezJhMTkyfVx1ezJhMWFifVx1ezJhMGUxfVx1ezJhMTIzfVx1ezJhMWRmfVx1OWQ3ZVx1OWQ4M1x1ezJhMTM0fVx1OWUwZVx1Njg4OCJdLFsiOTFhMSIsIlx1OWRjNFx1ezIyMTVifVx1ezJhMTkzfVx1ezJhMjIwfVx1ezIxOTNifVx1ezJhMjMzfVx1OWQzOVx1ezJhMGI5fVx1''@;'; put 'put ''ezJhMmI0fVx1OWU5MFx1OWU5NVx1OWU5ZVx1OWVhMlx1NGQzNFx1OWVhYVx1OWVhZlx1ezI0MzY0fVx1OWVjMVx1M2I2MFx1MzllNVx1M2QxZFx1NGYzMlx1MzdiZVx1ezI4YzJifVx1OWYwMlx1OWYwOFx1NGI5Nlx1OTQyNFx1ezI2ZGEyfVx1OWYxN1x1OWYxNlx1OWYzOVx1NTY5Zlx1NTY4''@;'; put 'put ''YVx1OWY0NVx1OTliOFx1ezI5MDhifVx1OTdmMlx1ODQ3Zlx1OWY2Mlx1OWY2OVx1N2FkY1x1OWY4ZVx1NzIxNlx1NGJiZVx1ezI0OTc1fVx1ezI0OWJifVx1NzE3N1x1ezI0OWY4fVx1ezI0MzQ4fVx1ezI0YTUxfVx1NzM5ZVx1ezI4YmRhfVx1ezIxOGZhfVx1Nzk5Zlx1ezI4OTdlfVx1ezI4''@;'; put 'put ''ZTM2fVx1OTM2OVx1OTNmM1x1ezI4YTQ0fVx1OTJlY1x1OTM4MVx1OTNjYlx1ezI4OTZjfVx1ezI0NGI5fVx1NzIxN1x1M2VlYlx1Nzc3Mlx1N2E0M1x1NzBkMFx1ezI0NDczfVx1ezI0M2Y4fVx1NzE3ZVx1ezIxN2VmfVx1NzBhM1x1ezIxOGJlfVx1ezIzNTk5fVx1M2VjN1x1ezIxODg1fVx1''@;'; put 'put ''ezI1NDJmfVx1ezIxN2Y4fVx1MzcyMlx1ezIxNmZifVx1ezIxODM5fVx1MzZlMVx1ezIxNzc0fVx1ezIxOGQxfVx1ezI1ZjRifVx1MzcyM1x1ezIxNmMwfVx1NTc1Ylx1ezI0YTI1fVx1ezIxM2ZlfVx1ezIxMmE4fSJdLFsiOTI0MCIsIlx1ezIxM2M2fVx1ezIxNGI2fVx1ODUwM1x1ezIzNmE2''@;'; put 'put ''fVx1ODUwM1x1ODQ1NVx1ezI0OTk0fVx1ezI3MTY1fVx1ezIzZTMxfVx1ezI1NTVjfVx1ezIzZWZifVx1ezI3MDUyfVx1NDRmNFx1ezIzNmVlfVx1ezI5OTlkfVx1ezI2ZjI2fVx1NjdmOVx1MzczM1x1M2MxNVx1M2RlN1x1NTg2Y1x1ezIxOTIyfVx1NjgxMFx1NDA1N1x1ezIzNzNmfVx1ezI0''@;'; put 'put ''MGUxfVx1ezI0MDhifVx1ezI0MTBmfVx1ezI2YzIxfVx1NTRjYlx1NTY5ZVx1ezI2NmIxfVx1NTY5Mlx1ezIwZmRmfVx1ezIwYmE4fVx1ezIwZTBkfVx1OTNjNlx1ezI4YjEzfVx1OTM5Y1x1NGVmOFx1NTEyYlx1MzgxOVx1ezI0NDM2fVx1NGViY1x1ezIwNDY1fVx1ezIwMzdmfVx1NGY0Ylx1''@;'; put 'put ''NGY4YVx1ezI1NjUxfVx1NWE2OFx1ezIwMWFifVx1ezIwM2NifVx1Mzk5OVx1ezIwMzBhfVx1ezIwNDE0fVx1MzQzNVx1NGYyOVx1ezIwMmMwfVx1ezI4ZWIzfVx1ezIwMjc1fVx1OGFkYVx1ezIwMjBjfVx1NGU5OCJdLFsiOTJhMSIsIlx1NTBjZFx1NTEwZFx1NGZhMlx1NGYwM1x1ezI0YTBl''@;'; put 'put ''fVx1ezIzZThhfVx1NGY0Mlx1NTAyZVx1NTA2Y1x1NTA4MVx1NGZjY1x1NGZlNVx1NTA1OFx1NTBmY1x1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NmU3Nlx1ezIzNTk1fVx1ezIzZTM5fVx1ezIzZWJmfVx1NmQ3Mlx1ezIxODg0fVx1ezIzZTg5fVx1NTFhOFx1NTFjM1x1ezIwNWUwfVx1NDRk''@;'; put 'put ''ZFx1ezIwNGEzfVx1ezIwNDkyfVx1ezIwNDkxfVx1OGQ3YVx1ezI4YTljfVx1ezIwNzBlfVx1NTI1OVx1NTJhNFx1ezIwODczfVx1NTJlMVx1OTM2ZVx1NDY3YVx1NzE4Y1x1ezI0MzhjfVx1ezIwYzIwfVx1ezI0OWFjfVx1ezIxMGU0fVx1NjlkMVx1ezIwZTFkfVx1NzQ3OVx1M2VkZVx1NzQ5''@;'; put 'put ''OVx1NzQxNFx1NzQ1Nlx1NzM5OFx1NGI4ZVx1ezI0YWJjfVx1ezI0MDhkfVx1NTNkMFx1MzU4NFx1NzIwZlx1ezI0MGM5fVx1NTViNFx1ezIwMzQ1fVx1NTRjZFx1ezIwYmM2fVx1NTcxZFx1OTI1ZFx1OTZmNFx1OTM2Nlx1NTdkZFx1NTc4ZFx1NTc3Zlx1MzYzZVx1NThjYlx1NWE5OVx1ezI4''@;'; put 'put ''YTQ2fVx1ezIxNmZhfVx1ezIxNzZmfVx1ezIxNzEwfVx1NWEyY1x1NTliOFx1OTI4Zlx1NWE3ZVx1NWFjZlx1NWExMlx1ezI1OTQ2fVx1ezIxOWYzfVx1ezIxODYxfVx1ezI0Mjk1fVx1MzZmNVx1NmQwNVx1NzQ0M1x1NWEyMVx1ezI1ZTgzfSJdLFsiOTM0MCIsIlx1NWE4MVx1ezI4YmQ3fVx1''@;'; put 'put ''ezIwNDEzfVx1OTNlMFx1NzQ4Y1x1ezIxMzAzfVx1NzEwNVx1NDk3Mlx1OTQwOFx1ezI4OWZifVx1OTNiZFx1MzdhMFx1NWMxZVx1NWM5ZVx1NWU1ZVx1NWU0OFx1ezIxOTk2fVx1ezIxOTdjfVx1ezIzYWVlfVx1NWVjZFx1NWI0Zlx1ezIxOTAzfVx1ezIxOTA0fVx1MzcwMVx1ezIxOGEwfVx1''@;'; put 'put ''MzZkZFx1ezIxNmZlfVx1MzZkM1x1ODEyYVx1ezI4YTQ3fVx1ezIxZGJhfVx1ezIzNDcyfVx1ezI4OWE4fVx1NWYwY1x1NWYwZVx1ezIxOTI3fVx1ezIxN2FifVx1NWE2Ylx1ezIxNzNifVx1NWI0NFx1ODYxNFx1ezI3NWZkfVx1ODg2MFx1NjA3ZVx1ezIyODYwfVx1ezIyNjJifVx1NWZkYlx1''@;'; put 'put ''M2ViOFx1ezIyNWFmfVx1ezIyNWJlfVx1ezI5MDg4fVx1ezI2ZjczfVx1NjFjMFx1ezIwMDNlfVx1ezIwMDQ2fVx1ezIyNjFifVx1NjE5OVx1NjE5OFx1NjA3NVx1ezIyYzlifVx1ezIyZDA3fVx1ezI0NmQ0fVx1ezI5MTRkfSJdLFsiOTNhMSIsIlx1NjQ3MVx1ezI0NjY1fVx1ezIyYjZhfVx1''@;'; put 'put ''M2EyOVx1ezIyYjIyfVx1ezIzNDUwfVx1ezI5OGVhfVx1ezIyZTc4fVx1NjMzN1x1ezJhNDVifVx1NjRiNlx1NjMzMVx1NjNkMVx1ezI0OWUzfVx1ezIyZDY3fVx1NjJhNFx1ezIyY2ExfVx1NjQzYlx1NjU2Ylx1Njk3Mlx1M2JmNFx1ezIzMDhlfVx1ezIzMmFkfVx1ezI0OTg5fVx1ezIzMmFi''@;'; put 'put ''fVx1NTUwZFx1ezIzMmUwfVx1ezIxOGQ5fVx1ezI5NDNmfVx1NjZjZVx1ezIzMjg5fVx1ezIzMWIzfVx1M2FlMFx1NDE5MFx1ezI1NTg0fVx1ezI4YjIyfVx1ezI1NThmfVx1ezIxNmZjfVx1ezI1NTVifVx1ezI1NDI1fVx1NzhlZVx1ezIzMTAzfVx1ezIxODJhfVx1ezIzMjM0fVx1MzQ2NFx1''@;'; put 'put ''ezIzMjBmfVx1ezIzMTgyfVx1ezI0MmM5fVx1NjY4ZVx1ezI2ZDI0fVx1NjY2Ylx1NGI5M1x1NjYzMFx1ezI3ODcwfVx1ezIxZGVifVx1NjY2M1x1ezIzMmQyfVx1ezIzMmUxfVx1NjYxZVx1ezI1ODcyfVx1MzhkMVx1ezIzODNhfVx1ezIzN2JjfVx1M2I5OVx1ezIzN2EyfVx1ezIzM2ZlfVx1''@;'; put 'put ''NzRkMFx1M2I5Nlx1Njc4Zlx1ezI0NjJhfVx1NjhiNlx1NjgxZVx1M2JjNFx1NmFiZVx1Mzg2M1x1ezIzN2Q1fVx1ezI0NDg3fVx1NmEzM1x1NmE1Mlx1NmFjOVx1NmIwNVx1ezIxOTEyfVx1NjUxMVx1Njg5OFx1NmE0Y1x1M2JkN1x1NmE3YVx1NmI1N1x1ezIzZmMwfVx1ezIzYzlhfVx1OTNh''@;'; put 'put ''MFx1OTJmMlx1ezI4YmVhfVx1ezI4YWNifSJdLFsiOTQ0MCIsIlx1OTI4OVx1ezI4MDFlfVx1ezI4OWRjfVx1OTQ2N1x1NmRhNVx1NmYwYlx1ezI0OWVjfVx1NmQ2N1x1ezIzZjdmfVx1M2Q4Zlx1NmUwNFx1ezI0MDNjfVx1NWEzZFx1NmUwYVx1NTg0N1x1NmQyNFx1Nzg0Mlx1NzEzYlx1ezI0''@;'; put 'put ''MzFhfVx1ezI0Mjc2fVx1NzBmMVx1NzI1MFx1NzI4N1x1NzI5NFx1ezI0NzhmfVx1ezI0NzI1fVx1NTE3OVx1ezI0YWE0fVx1ezIwNWVifVx1NzQ3YVx1ezIzZWY4fVx1ezIzNjVmfVx1ezI0YTRhfVx1ezI0OTE3fVx1ezI1ZmUxfVx1M2YwNlx1M2ViMVx1ezI0YWRmfVx1ezI4YzIzfVx1ezIz''@;'; put 'put ''ZjM1fVx1NjBhN1x1M2VmM1x1NzRjY1x1NzQzY1x1OTM4N1x1NzQzN1x1NDQ5Zlx1ezI2ZGVhfVx1NDU1MVx1NzU4M1x1M2Y2M1x1ezI0Y2Q5fVx1ezI0ZDA2fVx1M2Y1OFx1NzU1NVx1NzY3M1x1ezJhNWM2fVx1M2IxOVx1NzQ2OFx1ezI4YWNjfVx1ezI0OWFifVx1ezI0OThlfVx1M2FmYiJd''@;'; put 'put ''LFsiOTRhMSIsIlx1M2RjZFx1ezI0YTRlfVx1M2VmZlx1ezI0OWM1fVx1ezI0OGYzfVx1OTFmYVx1NTczMlx1OTM0Mlx1ezI4YWUzfVx1ezIxODY0fVx1NTBkZlx1ezI1MjIxfVx1ezI1MWU3fVx1Nzc3OFx1ezIzMjMyfVx1NzcwZVx1NzcwZlx1Nzc3Ylx1ezI0Njk3fVx1ezIzNzgxfVx1M2E1''@;'; put 'put ''ZVx1ezI0OGYwfVx1NzQzOFx1NzQ5Ylx1M2ViZlx1ezI0YWJhfVx1ezI0YWM3fVx1NDBjOFx1ezI0YTk2fVx1ezI2MWFlfVx1OTMwN1x1ezI1NTgxfVx1NzgxZVx1Nzg4ZFx1Nzg4OFx1NzhkMlx1NzNkMFx1Nzk1OVx1ezI3NzQxfVx1ezI1NmUzfVx1NDEwZVx1Nzk5Ylx1ODQ5Nlx1NzlhNVx1''@;'; put 'put ''NmEyZFx1ezIzZWZhfVx1N2EzYVx1NzlmNFx1NDE2ZVx1ezIxNmU2fVx1NDEzMlx1OTIzNVx1NzlmMVx1ezIwZDRjfVx1ezI0OThjfVx1ezIwMjk5fVx1ezIzZGJhfVx1ezIxNzZlfVx1MzU5N1x1NTU2Ylx1MzU3MFx1MzZhYVx1ezIwMWQ0fVx1ezIwYzBkfVx1N2FlMlx1NWE1OVx1ezIyNmY1''@;'; put 'put ''fVx1ezI1YWFmfVx1ezI1YTljfVx1NWEwZFx1ezIwMjVifVx1NzhmMFx1NWEyYVx1ezI1YmM2fVx1N2FmZVx1NDFmOVx1N2M1ZFx1N2M2ZFx1NDIxMVx1ezI1YmIzfVx1ezI1ZWJjfVx1ezI1ZWE2fVx1N2NjZFx1ezI0OWY5fVx1ezIxN2IwfVx1N2M4ZVx1N2M3Y1x1N2NhZVx1NmFiMlx1N2Rk''@;'; put 'put ''Y1x1N2UwN1x1N2RkM1x1N2Y0ZVx1ezI2MjYxfSJdLFsiOTU0MCIsIlx1ezI2MTVjfVx1ezI3YjQ4fVx1N2Q5N1x1ezI1ZTgyfVx1NDI2YVx1ezI2Yjc1fVx1ezIwOTE2fVx1NjdkNlx1ezIwMDRlfVx1ezIzNWNmfVx1NTdjNFx1ezI2NDEyfVx1ezI2M2Y4fVx1ezI0OTYyfVx1N2ZkZFx1N2Iy''@;'; put 'put ''N1x1ezIwODJjfVx1ezI1YWU5fVx1ezI1ZDQzfVx1N2IwY1x1ezI1ZTBlfVx1OTllNlx1ODY0NVx1OWE2M1x1NmExY1x1ezIzNDNmfVx1MzllMlx1ezI0OWY3fVx1ezI2NWFkfVx1OWExZlx1ezI2NWEwfVx1ODQ4MFx1ezI3MTI3fVx1ezI2Y2QxfVx1NDRlYVx1ODEzN1x1NDQwMlx1ODBjNlx1''@;'; put 'put ''ODEwOVx1ODE0Mlx1ezI2N2I0fVx1OThjM1x1ezI2YTQyfVx1ODI2Mlx1ODI2NVx1ezI2YTUxfVx1ODQ1M1x1ezI2ZGE3fVx1ODYxMFx1ezI3MjFifVx1NWE4Nlx1NDE3Zlx1ezIxODQwfVx1NWIyYlx1ezIxOGExfVx1NWFlNFx1ezIxOGQ4fVx1ODZhMFx1ezJmOWJjfVx1ezIzZDhmfVx1ODgy''@;'; put 'put ''ZFx1ezI3NDIyfVx1NWEwMiJdLFsiOTVhMSIsIlx1ODg2ZVx1NGY0NVx1ODg4N1x1ODhiZlx1ODhlNlx1ODk2NVx1ODk0ZFx1ezI1NjgzfVx1ODk1NFx1ezI3Nzg1fVx1ezI3Nzg0fVx1ezI4YmY1fVx1ezI4YmQ5fVx1ezI4YjljfVx1ezI4OWY5fVx1M2VhZFx1ODRhM1x1NDZmNVx1NDZjZlx1''@;'; put 'put ''MzdmMlx1OGEzZFx1OGExY1x1ezI5NDQ4fVx1NWY0ZFx1OTIyYlx1ezI0Mjg0fVx1NjVkNFx1NzEyOVx1NzBjNFx1ezIxODQ1fVx1OWQ2ZFx1OGM5Zlx1OGNlOVx1ezI3ZGRjfVx1NTk5YVx1NzdjM1x1NTlmMFx1NDM2ZVx1MzZkNFx1OGUyYVx1OGVhN1x1ezI0YzA5fVx1OGYzMFx1OGY0YVx1''@;'; put 'put ''NDJmNFx1NmM1OFx1NmZiYlx1ezIyMzIxfVx1NDg5Ylx1NmY3OVx1NmU4Ylx1ezIxN2RhfVx1OWJlOVx1MzZiNVx1ezI0OTJmfVx1OTBiYlx1OTA5N1x1NTU3MVx1NDkwNlx1OTFiYlx1OTQwNFx1ezI4YTRifVx1NDA2Mlx1ezI4YWZjfVx1OTQyN1x1ezI4YzFkfVx1ezI4YzNifVx1ODRlNVx1''@;'; put 'put ''OGEyYlx1OTU5OVx1OTVhN1x1OTU5N1x1OTU5Nlx1ezI4ZDM0fVx1NzQ0NVx1M2VjMlx1ezI0OGZmfVx1ezI0YTQyfVx1ezI0M2VhfVx1M2VlN1x1ezIzMjI1fVx1OTY4Zlx1ezI4ZWU3fVx1ezI4ZTY2fVx1ezI4ZTY1fVx1M2VjY1x1ezI0OWVkfVx1ezI0YTc4fVx1ezIzZmVlfVx1NzQxMlx1''@;'; put 'put ''NzQ2Ylx1M2VmY1x1OTc0MVx1ezI5MGIwfSJdLFsiOTY0MCIsIlx1Njg0N1x1NGExZFx1ezI5MDkzfVx1ezI1N2RmfVx1OTc1ZFx1OTM2OFx1ezI4OTg5fVx1ezI4YzI2fVx1ezI4YjJmfVx1ezI2M2JlfVx1OTJiYVx1NWIxMVx1OGI2OVx1NDkzY1x1NzNmOVx1ezI0MjFifVx1OTc5Ylx1OTc3''@;'; put 'put ''MVx1OTkzOFx1ezIwZjI2fVx1NWRjMVx1ezI4YmM1fVx1ezI0YWIyfVx1OTgxZlx1ezI5NGRhfVx1OTJmNlx1ezI5NWQ3fVx1OTFlNVx1NDRjMFx1ezI4YjUwfVx1ezI0YTY3fVx1ezI4YjY0fVx1OThkY1x1ezI4YTQ1fVx1M2YwMFx1OTIyYVx1NDkyNVx1ODQxNFx1OTkzYlx1OTk0ZFx1ezI3''@;'; put 'put ''YjA2fVx1M2RmZFx1OTk5Ylx1NGI2Zlx1OTlhYVx1OWE1Y1x1ezI4YjY1fVx1ezI1OGM4fVx1NmE4Zlx1OWEyMVx1NWFmZVx1OWEyZlx1ezI5OGYxfVx1NGI5MFx1ezI5OTQ4fVx1OTliY1x1NGJiZFx1NGI5N1x1OTM3ZFx1NTg3Mlx1ezIxMzAyfVx1NTgyMlx1ezI0OWI4fSJdLFsiOTZhMSIs''@;'; put 'put ''Ilx1ezIxNGU4fVx1Nzg0NFx1ezIyNzFmfVx1ezIzZGI4fVx1NjhjNVx1M2Q3ZFx1OTQ1OFx1MzkyN1x1NjE1MFx1ezIyNzgxfVx1ezIyOTZifVx1NjEwN1x1OWM0Zlx1OWM1M1x1OWM3Ylx1OWMzNVx1OWMxMFx1OWI3Zlx1OWJjZlx1ezI5ZTJkfVx1OWI5Zlx1ezJhMWY1fVx1ezJhMGZlfVx1''@;'; put 'put ''OWQyMVx1NGNhZVx1ezI0MTA0fVx1OWUxOFx1NGNiMFx1OWQwY1x1ezJhMWI0fVx1ezJhMGVkfVx1ezJhMGYzfVx1ezI5OTJmfVx1OWRhNVx1ODRiZFx1ezI2ZTEyfVx1ezI2ZmRmfVx1ezI2YjgyfVx1ODVmY1x1NDUzM1x1ezI2ZGE0fVx1ezI2ZTg0fVx1ezI2ZGYwfVx1ODQyMFx1ODVlZVx1''@;'; put 'put ''ezI2ZTAwfVx1ezIzN2Q3fVx1ezI2MDY0fVx1NzllMlx1ezIzNTljfVx1ezIzNjQwfVx1NDkyZFx1ezI0OWRlfVx1M2Q2Mlx1OTNkYlx1OTJiZVx1OTM0OFx1ezIwMmJmfVx1NzhiOVx1OTI3N1x1OTQ0ZFx1NGZlNFx1MzQ0MFx1OTA2NFx1ezI1NTVkfVx1NzgzZFx1Nzg1NFx1NzhiNlx1Nzg0''@;'; put 'put ''Ylx1ezIxNzU3fVx1ezIzMWM5fVx1ezI0OTQxfVx1MzY5YVx1NGY3Mlx1NmZkYVx1NmZkOVx1NzAxZVx1NzAxZVx1NTQxNFx1ezI0MWI1fVx1NTdiYlx1NThmM1x1NTc4YVx1OWQxNlx1NTdkN1x1NzEzNFx1MzRhZlx1ezI0MWFjfVx1NzFlYlx1ezI2YzQwfVx1ezI0Zjk3fVx1NWIyOFx1ezIx''@;'; put 'put ''N2I1fVx1ezI4YTQ5fSJdLFsiOTc0MCIsIlx1NjEwY1x1NWFjZVx1NWEwYlx1NDJiY1x1ezI0NDg4fVx1MzcyY1x1NGI3Ylx1ezI4OWZjfVx1OTNiYlx1OTNiOFx1ezIxOGQ2fVx1ezIwZjFkfVx1ODQ3Mlx1ezI2Y2MwfVx1ezIxNDEzfVx1ezI0MmZhfVx1ezIyYzI2fVx1ezI0M2MxfVx1NTk5''@;'; put 'put ''NFx1ezIzZGI3fVx1ezI2NzQxfVx1N2RhOFx1ezI2MTVifVx1ezI2MGE0fVx1ezI0OWI5fVx1ezI0OThifVx1ezI4OWZhfVx1OTJlNVx1NzNlMlx1M2VlOVx1NzRiNFx1ezI4YjYzfVx1ezIxODlmfVx1M2VlMVx1ezI0YWIzfVx1NmFkOFx1NzNmM1x1NzNmYlx1M2VkNlx1ezI0YTNlfVx1ezI0''@;'; put 'put ''YTk0fVx1ezIxN2Q5fVx1ezI0YTY2fVx1ezIwM2E3fVx1ezIxNDI0fVx1ezI0OWU1fVx1NzQ0OFx1ezI0OTE2fVx1NzBhNVx1ezI0OTc2fVx1OTI4NFx1NzNlNlx1OTM1Zlx1ezIwNGZlfVx1OTMzMVx1ezI4YWNlfVx1ezI4YTE2fVx1OTM4Nlx1ezI4YmU3fVx1ezI1NWQ1fVx1NDkzNVx1ezI4''@;'; put 'put ''YTgyfVx1NzE2YiJdLFsiOTdhMSIsIlx1ezI0OTQzfVx1ezIwY2ZmfVx1NTZhNFx1ezIwNjFhfVx1ezIwYmVifVx1ezIwY2I4fVx1NTUwMlx1NzljNFx1ezIxN2ZhfVx1N2RmZVx1ezIxNmMyfVx1ezI0YTUwfVx1ezIxODUyfVx1NDUyZVx1OTQwMVx1MzcwYVx1ezI4YWMwfVx1ezI0OWFkfVx1''@;'; put 'put ''NTliMFx1ezIxOGJmfVx1ezIxODgzfVx1ezI3NDg0fVx1NWFhMVx1MzZlMlx1ezIzZDVifVx1MzZiMFx1OTI1Zlx1NWE3OVx1ezI4YTgxfVx1ezIxODYyfVx1OTM3NFx1M2NjZFx1ezIwYWI0fVx1NGE5Nlx1Mzk4YVx1NTBmNFx1M2Q2OVx1M2Q0Y1x1ezIxMzljfVx1NzE3NVx1NDJmYlx1ezI4''@;'; put 'put ''MjE4fVx1NmUwZlx1ezI5MGU0fVx1NDRlYlx1NmQ1N1x1ezI3ZTRmfVx1NzA2N1x1NmNhZlx1M2NkNlx1ezIzZmVkfVx1ezIzZTJkfVx1NmUwMlx1NmYwY1x1M2Q2Zlx1ezIwM2Y1fVx1NzU1MVx1MzZiY1x1MzRjOFx1NDY4MFx1M2VkYVx1NDg3MVx1NTljNFx1OTI2ZVx1NDkzZVx1OGY0MVx1''@;'; put 'put ''ezI4YzFjfVx1ezI2YmMwfVx1NTgxMlx1NTdjOFx1MzZkNlx1ezIxNDUyfVx1NzBmZVx1ezI0MzYyfVx1ezI0YTcxfVx1ezIyZmUzfVx1ezIxMmIwfVx1ezIyM2JkfVx1NjhiOVx1Njk2N1x1ezIxMzk4fVx1ezIzNGU1fVx1ezI3YmY0fVx1ezIzNmRmfVx1ezI4YTgzfVx1ezIzN2Q2fVx1ezIz''@;'; put 'put ''M2ZhfVx1ezI0YzlmfVx1NmExYVx1ezIzNmFkfVx1ezI2Y2I3fVx1ODQzZVx1NDRkZlx1NDRjZSJdLFsiOTg0MCIsIlx1ezI2ZDI2fVx1ezI2ZDUxfVx1ezI2YzgyfVx1ezI2ZmRlfVx1NmYxN1x1ezI3MTA5fVx1ODMzZFx1ezIxNzNhfVx1ODNlZFx1ezI2YzgwfVx1ezI3MDUzfVx1ezIxN2Ri''@;'; put 'put ''fVx1NTk4OVx1NWE4Mlx1ezIxN2IzfVx1NWE2MVx1NWE3MVx1ezIxOTA1fVx1ezI0MWZjfVx1MzcyZFx1NTllZlx1ezIxNzNjfVx1MzZjN1x1NzE4ZVx1OTM5MFx1NjY5YVx1ezI0MmE1fVx1NWE2ZVx1NWEyYlx1ezI0MjkzfVx1NmEyYlx1ezIzZWY5fVx1ezI3NzM2fVx1ezI0NDVifVx1ezI0''@;'; put 'put ''MmNhfVx1NzExZFx1ezI0MjU5fVx1ezI4OWUxfVx1NGZiMFx1ezI2ZDI4fVx1NWNjMlx1ezI0NGNlfVx1ezI3ZTRkfVx1ezI0M2JkfVx1NmEwY1x1ezI0MjU2fVx1ezIxMzA0fVx1NzBhNlx1NzEzM1x1ezI0M2U5fVx1M2RhNVx1NmNkZlx1ezJmODI1fVx1ezI0YTRmfVx1N2U2NVx1NTllYlx1''@;'; put 'put ''NWQyZlx1M2RmM1x1NWY1Y1x1ezI0YTVkfVx1ezIxN2RmfVx1N2RhNFx1ODQyNiJdLFsiOThhMSIsIlx1NTQ4NVx1ezIzYWZhfVx1ezIzMzAwfVx1ezIwMjE0fVx1NTc3ZVx1ezIwOGQ1fVx1ezIwNjE5fVx1M2ZlNVx1ezIxZjllfVx1ezJhMmI2fVx1NzAwM1x1ezI5MTVifVx1NWQ3MFx1NzM4''@;'; put 'put ''Zlx1N2NkM1x1ezI4YTU5fVx1ezI5NDIwfVx1NGZjOFx1N2ZlN1x1NzJjZFx1NzMxMFx1ezI3YWY0fVx1NzMzOFx1NzMzOVx1ezI1NmY2fVx1NzM0MVx1NzM0OFx1M2VhOVx1ezI3YjE4fVx1OTA2Y1x1NzFmNVx1ezI0OGYyfVx1NzNlMVx1ODFmNlx1M2VjYVx1NzcwY1x1M2VkMVx1NmNhMlx1''@;'; put 'put ''NTZmZFx1NzQxOVx1NzQxZVx1NzQxZlx1M2VlMlx1M2VmMFx1M2VmNFx1M2VmYVx1NzRkM1x1M2YwZVx1M2Y1M1x1NzU0Mlx1NzU2ZFx1NzU3Mlx1NzU4ZFx1M2Y3Y1x1NzVjOFx1NzVkY1x1M2ZjMFx1NzY0ZFx1M2ZkN1x1NzY3NFx1M2ZkY1x1NzY3YVx1ezI0ZjVjfVx1NzE4OFx1NTYyM1x1''@;'; put 'put ''ODk4MFx1NTg2OVx1NDAxZFx1Nzc0M1x1NDAzOVx1Njc2MVx1NDA0NVx1MzVkYlx1Nzc5OFx1NDA2YVx1NDA2Zlx1NWM1ZVx1NzdiZVx1NzdjYlx1NThmMlx1NzgxOFx1NzBiOVx1NzgxY1x1NDBhOFx1NzgzOVx1Nzg0N1x1Nzg1MVx1Nzg2Nlx1ODQ0OFx1ezI1NTM1fVx1NzkzM1x1NjgwM1x1''@;'; put 'put ''NzkzMlx1NDEwMyJdLFsiOTk0MCIsIlx1NDEwOVx1Nzk5MVx1Nzk5OVx1OGZiYlx1N2EwNlx1OGZiY1x1NDE2N1x1N2E5MVx1NDFiMlx1N2FiY1x1ODI3OVx1NDFjNFx1N2FjZlx1N2FkYlx1NDFjZlx1NGUyMVx1N2I2Mlx1N2I2Y1x1N2I3Ylx1N2MxMlx1N2MxYlx1NDI2MFx1NDI3YVx1N2M3''@;'; put 'put ''Ylx1N2M5Y1x1NDI4Y1x1N2NiOFx1NDI5NFx1N2NlZFx1OGY5M1x1NzBjMFx1ezIwY2NmfVx1N2RjZlx1N2RkNFx1N2RkMFx1N2RmZFx1N2ZhZVx1N2ZiNFx1NzI5Zlx1NDM5N1x1ODAyMFx1ODAyNVx1N2IzOVx1ODAyZVx1ODAzMVx1ODA1NFx1M2RjY1x1NTdiNFx1NzBhMFx1ODBiN1x1ODBl''@;'; put 'put ''OVx1NDNlZFx1ODEwY1x1NzMyYVx1ODEwZVx1ODExMlx1NzU2MFx1ODExNFx1NDQwMVx1M2IzOVx1ODE1Nlx1ODE1OVx1ODE1YSJdLFsiOTlhMSIsIlx1NDQxM1x1NTgzYVx1ODE3Y1x1ODE4NFx1NDQyNVx1ODE5M1x1NDQyZFx1ODFhNVx1NTdlZlx1ODFjMVx1ODFlNFx1ODI1NFx1NDQ4Zlx1''@;'; put 'put ''ODJhNlx1ODI3Nlx1ODJjYVx1ODJkOFx1ODJmZlx1NDRiMFx1ODM1N1x1OTY2OVx1Njk4YVx1ODQwNVx1NzBmNVx1ODQ2NFx1NjBlM1x1ODQ4OFx1NDUwNFx1ODRiZVx1ODRlMVx1ODRmOFx1ODUxMFx1ODUzOFx1ODU1Mlx1NDUzYlx1ODU2Zlx1ODU3MFx1ODVlMFx1NDU3N1x1ODY3Mlx1ODY5''@;'; put 'put ''Mlx1ODZiMlx1ODZlZlx1OTY0NVx1ODc4Ylx1NDYwNlx1NDYxN1x1ODhhZVx1ODhmZlx1ODkyNFx1ODk0N1x1ODk5MVx1ezI3OTY3fVx1OGEyOVx1OGEzOFx1OGE5NFx1OGFiNFx1OGM1MVx1OGNkNFx1OGNmMlx1OGQxY1x1NDc5OFx1NTg1Zlx1OGRjM1x1NDdlZFx1NGVlZVx1OGUzYVx1NTVk''@;'; put 'put ''OFx1NTc1NFx1OGU3MVx1NTVmNVx1OGViMFx1NDgzN1x1OGVjZVx1OGVlMlx1OGVlNFx1OGVlZFx1OGVmMlx1OGZiN1x1OGZjMVx1OGZjYVx1OGZjY1x1OTAzM1x1OTljNFx1NDhhZFx1OThlMFx1OTIxM1x1NDkxZVx1OTIyOFx1OTI1OFx1OTI2Ylx1OTJiMVx1OTJhZVx1OTJiZiJdLFsiOWE0''@;'; put 'put ''MCIsIlx1OTJlM1x1OTJlYlx1OTJmM1x1OTJmNFx1OTJmZFx1OTM0M1x1OTM4NFx1OTNhZFx1NDk0NVx1NDk1MVx1OWViZlx1OTQxN1x1NTMwMVx1OTQxZFx1OTQyZFx1OTQzZVx1NDk2YVx1OTQ1NFx1OTQ3OVx1OTUyZFx1OTVhMlx1NDlhN1x1OTVmNFx1OTYzM1x1NDllNVx1NjdhMFx1NGEy''@;'; put 'put ''NFx1OTc0MFx1NGEzNVx1OTdiMlx1OTdjMlx1NTY1NFx1NGFlNFx1NjBlOFx1OThiOVx1NGIxOVx1OThmMVx1NTg0NFx1OTkwZVx1OTkxOVx1NTFiNFx1OTkxY1x1OTkzN1x1OTk0Mlx1OTk1ZFx1OTk2Mlx1NGI3MFx1OTljNVx1NGI5ZFx1OWEzY1x1OWIwZlx1N2E4M1x1OWI2OVx1OWI4MVx1''@;'; put 'put ''OWJkZFx1OWJmMVx1OWJmNFx1NGM2ZFx1OWMyMFx1Mzc2Zlx1ezIxYmMyfVx1OWQ0OVx1OWMzYSJdLFsiOWFhMSIsIlx1OWVmZVx1NTY1MFx1OWQ5M1x1OWRiZFx1OWRjMFx1OWRmY1x1OTRmNlx1OGZiNlx1OWU3Ylx1OWVhY1x1OWViMVx1OWViZFx1OWVjNlx1OTRkY1x1OWVlMlx1OWVmMVx1''@;'; put 'put ''OWVmOFx1N2FjOFx1OWY0NFx1ezIwMDk0fVx1ezIwMmI3fVx1ezIwM2EwfVx1NjkxYVx1OTRjM1x1NTlhY1x1ezIwNGQ3fVx1NTg0MFx1OTRjMVx1MzdiOVx1ezIwNWQ1fVx1ezIwNjE1fVx1ezIwNjc2fVx1ezIxNmJhfVx1NTc1N1x1NzE3M1x1ezIwYWMyfVx1ezIwYWNkfVx1ezIwYmJmfVx1''@;'; put 'put ''NTQ2YVx1ezJmODNifVx1ezIwYmNifVx1NTQ5ZVx1ezIwYmZifVx1ezIwYzNifVx1ezIwYzUzfVx1ezIwYzY1fVx1ezIwYzdjfVx1NjBlN1x1ezIwYzhkfVx1NTY3YVx1ezIwY2I1fVx1ezIwY2RkfVx1ezIwY2VkfVx1ezIwZDZmfVx1ezIwZGIyfVx1ezIwZGM4fVx1Njk1NVx1OWMyZlx1ODdh''@;'; put 'put ''NVx1ezIwZTA0fVx1ezIwZTBlfVx1ezIwZWQ3fVx1ezIwZjkwfVx1ezIwZjJkfVx1ezIwZTczfVx1NWMyMFx1ezIwZmJjfVx1NWUwYlx1ezIxMDVjfVx1ezIxMDRmfVx1ezIxMDc2fVx1NjcxZVx1ezIxMDdifVx1ezIxMDg4fVx1ezIxMDk2fVx1MzY0N1x1ezIxMGJmfVx1ezIxMGQzfVx1ezIx''@;'; put 'put ''MTJmfVx1ezIxMTNifVx1NTM2NFx1ODRhZFx1ezIxMmUzfVx1ezIxMzc1fVx1ezIxMzM2fVx1OGI4MVx1ezIxNTc3fVx1ezIxNjE5fVx1ezIxN2MzfVx1ezIxN2M3fVx1NGU3OFx1NzBiYlx1ezIxODJkfVx1ezIxOTZhfSJdLFsiOWI0MCIsIlx1ezIxYTJkfVx1ezIxYTQ1fVx1ezIxYzJhfVx1''@;'; put 'put ''ezIxYzcwfVx1ezIxY2FjfVx1ezIxZWM4fVx1NjJjM1x1ezIxZWQ1fVx1ezIxZjE1fVx1NzE5OFx1Njg1NVx1ezIyMDQ1fVx1NjllOVx1MzZjOFx1ezIyMjdjfVx1ezIyM2Q3fVx1ezIyM2ZhfVx1ezIyNzJhfVx1ezIyODcxfVx1ezIyOTRmfVx1ODJmZFx1ezIyOTY3fVx1ezIyOTkzfVx1ezIy''@;'; put 'put ''YWQ1fVx1ODlhNVx1ezIyYWU4fVx1OGZhMFx1ezIyYjBlfVx1OTdiOFx1ezIyYjNmfVx1OTg0N1x1OWFiZFx1ezIyYzRjfSJdLFsiOWI2MiIsIlx1ezIyYzg4fVx1ezIyY2I3fVx1ezI1YmU4fVx1ezIyZDA4fVx1ezIyZDEyfVx1ezIyZGI3fVx1ezIyZDk1fVx1ezIyZTQyfVx1ezIyZjc0fVx1''@;'; put 'put ''ezIyZmNjfVx1ezIzMDMzfVx1ezIzMDY2fVx1ezIzMzFmfVx1ezIzM2RlfVx1NWZiMVx1NjY0OFx1NjZiZlx1ezI3YTc5fVx1ezIzNTY3fVx1ezIzNWYzfVx1NzIwMVx1ezI0OWJhfVx1NzdkN1x1ezIzNjFhfVx1ezIzNzE2fVx1N2U4N1x1ezIwMzQ2fVx1NThiNVx1NjcwZSJdLFsiOWJhMSIs''@;'; put 'put ''Ilx1NjkxOFx1ezIzYWE3fVx1ezI3NjU3fVx1ezI1ZmUyfVx1ezIzZTExfVx1ezIzZWI5fVx1ezI3NWZlfVx1ezIyMDlhfVx1NDhkMFx1NGFiOFx1ezI0MTE5fVx1ezI4YTlhfVx1ezI0MmVlfVx1ezI0MzBkfVx1ezI0MDNifVx1ezI0MzM0fVx1ezI0Mzk2fVx1ezI0YTQ1fVx1ezIwNWNhfVx1''@;'; put 'put ''NTFkMlx1ezIwNjExfVx1NTk5Zlx1ezIxZWE4fVx1M2JiZVx1ezIzY2ZmfVx1ezI0NDA0fVx1ezI0NGQ2fVx1NTc4OFx1ezI0Njc0fVx1Mzk5Ylx1ezI0NzJmfVx1ezI4NWU4fVx1ezI5OWM5fVx1Mzc2Mlx1ezIyMWMzfVx1OGI1ZVx1ezI4YjRlfVx1OTlkNlx1ezI0ODEyfVx1ezI0OGZifVx1''@;'; put 'put ''ezI0YTE1fVx1NzIwOVx1ezI0YWMwfVx1ezIwYzc4fVx1NTk2NVx1ezI0ZWE1fVx1ezI0Zjg2fVx1ezIwNzc5fVx1OGVkYVx1ezI1MDJjfVx1NTI4Zlx1NTczZlx1NzE3MVx1ezI1Mjk5fVx1ezI1NDE5fVx1ezIzZjRhfVx1ezI0YWE3fVx1NTViY1x1ezI1NDQ2fVx1ezI1NDZlfVx1ezI2YjUy''@;'; put 'put ''fVx1OTFkNFx1MzQ3M1x1ezI1NTNmfVx1ezI3NjMyfVx1ezI1NTVlfVx1NDcxOFx1ezI1NTYyfVx1ezI1NTY2fVx1ezI1N2M3fVx1ezI0OTNmfVx1ezI1ODVkfVx1NTA2Nlx1MzRmYlx1ezIzM2NjfVx1NjBkZVx1ezI1OTAzfVx1NDc3Y1x1ezI4OTQ4fVx1ezI1YWFlfVx1ezI1Yjg5fVx1ezI1''@;'; put 'put ''YzA2fVx1ezIxZDkwfVx1NTdhMVx1NzE1MVx1NmZiNlx1ezI2MTAyfVx1ezI3YzEyfVx1OTA1Nlx1ezI2MWIyfVx1ezI0ZjlhfVx1OGI2Mlx1ezI2NDAyfVx1ezI2NDRhfSJdLFsiOWM0MCIsIlx1NWQ1Ylx1ezI2YmY3fVx1OGYzNlx1ezI2NDg0fVx1ezIxOTFjfVx1OGFlYVx1ezI0OWY2fVx1''@;'; put 'put ''ezI2NDg4fVx1ezIzZmVmfVx1ezI2NTEyfVx1NGJjMFx1ezI2NWJmfVx1ezI2NmI1fVx1ezIyNzFifVx1OTQ2NVx1ezI1N2UxfVx1NjE5NVx1NWEyN1x1ezJmOGNkfVx1NGZiYlx1NTZiOVx1ezI0NTIxfVx1ezI2NmZjfVx1NGU2YVx1ezI0OTM0fVx1OTY1Nlx1NmQ4Zlx1ezI2Y2JkfVx1MzYx''@;'; put 'put ''OFx1ODk3N1x1ezI2Nzk5fVx1ezI2ODZlfVx1ezI2NDExfVx1ezI2ODVlfVx1NzFkZlx1ezI2OGM3fVx1N2I0Mlx1ezI5MGMwfVx1ezIwYTExfVx1ezI2OTI2fVx1OTEwNFx1ezI2OTM5fVx1N2E0NVx1OWRmMFx1ezI2OWZhfVx1OWEyNlx1ezI2YTJkfVx1MzY1Zlx1ezI2NDY5fVx1ezIwMDIx''@;'; put 'put ''fVx1Nzk4M1x1ezI2YTM0fVx1ezI2YjVifVx1NWQyY1x1ezIzNTE5fVx1ODNjZlx1ezI2YjlkfVx1NDZkMFx1ezI2Y2E0fVx1NzUzYlx1ODg2NVx1ezI2ZGFlfVx1NThiNiJdLFsiOWNhMSIsIlx1MzcxY1x1ezIyNThkfVx1ezI3MDRifVx1ezI3MWNkfVx1M2M1NFx1ezI3MjgwfVx1ezI3Mjg1''@;'; put 'put ''fVx1OTI4MVx1ezIyMTdhfVx1ezI3MjhifVx1OTMzMFx1ezI3MmU2fVx1ezI0OWQwfVx1NmMzOVx1OTQ5Zlx1ezI3NDUwfVx1ezIwZWY4fVx1ODgyN1x1ODhmNVx1ezIyOTI2fVx1ezI4NDczfVx1ezIxN2IxfVx1NmViOFx1ezI0YTJhfVx1ezIxODIwfVx1MzlhNFx1MzZiOVx1NWMxMFx1Nzll''@;'; put 'put ''M1x1NDUzZlx1NjZiNlx1ezI5Y2FkfVx1ezI5OGE0fVx1ODk0M1x1ezI3N2NjfVx1ezI3ODU4fVx1NTZkNlx1NDBkZlx1ezIxNjBhfVx1MzlhMVx1ezIzNzJmfVx1ezI4MGU4fVx1ezIxM2M1fVx1NzFhZFx1ODM2Nlx1ezI3OWRkfVx1ezI5MWE4fVx1NWE2N1x1NGNiN1x1ezI3MGFmfVx1ezI4''@;'; put 'put ''OWFifVx1ezI3OWZkfVx1ezI3YTBhfVx1ezI3YjBifVx1ezI3ZDY2fVx1ezI0MTdhfVx1N2I0M1x1Nzk3ZVx1ezI4MDA5fVx1NmZiNVx1ezJhMmRmfVx1NmEwM1x1ezI4MzE4fVx1NTNhMlx1ezI2ZTA3fVx1OTNiZlx1NjgzNlx1OTc1ZFx1ezI4MTZmfVx1ezI4MDIzfVx1ezI2OWI1fVx1ezIx''@;'; put 'put ''M2VkfVx1ezIzMjJmfVx1ezI4MDQ4fVx1NWQ4NVx1ezI4YzMwfVx1ezI4MDgzfVx1NTcxNVx1OTgyM1x1ezI4OTQ5fVx1NWRhYlx1ezI0OTg4fVx1NjViZVx1NjlkNVx1NTNkMlx1ezI0YWE1fVx1ezIzZjgxfVx1M2MxMVx1NjczNlx1ezI4MDkwfVx1ezI4MGY0fVx1ezI4MTJlfVx1ezIxZmEx''@;'; put 'put ''fVx1ezI4MTRmfSJdLFsiOWQ0MCIsIlx1ezI4MTg5fVx1ezI4MWFmfVx1ezI4MjFhfVx1ezI4MzA2fVx1ezI4MzJmfVx1ezI4MzhhfVx1MzVjYVx1ezI4NDY4fVx1ezI4NmFhfVx1NDhmYVx1NjNlNlx1ezI4OTU2fVx1NzgwOFx1OTI1NVx1ezI4OWI4fVx1NDNmMlx1ezI4OWU3fVx1NDNkZlx1''@;'; put 'put ''ezI4OWU4fVx1ezI4YjQ2fVx1ezI4YmQ0fVx1NTlmOFx1ezI4YzA5fVx1OGYwYlx1ezI4ZmM1fVx1ezI5MGVjfVx1N2I1MVx1ezI5MTEwfVx1ezI5MTNjfVx1M2RmN1x1ezI5MTVlfVx1ezI0YWNhfVx1OGZkMFx1NzI4Zlx1NTY4Ylx1ezI5NGU3fVx1ezI5NWU5fVx1ezI5NWIwfVx1ezI5NWI4''@;'; put 'put ''fVx1ezI5NzMyfVx1ezI5OGQxfVx1ezI5OTQ5fVx1ezI5OTZhfVx1ezI5OWMzfVx1ezI5YTI4fVx1ezI5YjBlfVx1ezI5ZDVhfVx1ezI5ZDlifVx1N2U5Zlx1ezI5ZWY4fVx1ezI5ZjIzfVx1NGNhNFx1OTU0N1x1ezJhMjkzfVx1NzFhMlx1ezJhMmZmfVx1NGQ5MVx1OTAxMlx1ezJhNWNifVx1''@;'; put 'put ''NGQ5Y1x1ezIwYzljfVx1OGZiZVx1NTVjMSJdLFsiOWRhMSIsIlx1OGZiYVx1ezIyNGIwfVx1OGZiOVx1ezI0YTkzfVx1NDUwOVx1N2U3Zlx1NmY1Nlx1NmFiMVx1NGVlYVx1MzRlNFx1ezI4YjJjfVx1ezI3ODlkfVx1MzczYVx1OGU4MFx1ezIxN2Y1fVx1ezI4MDI0fVx1ezI4YjZjfVx1ezI4''@;'; put 'put ''Yjk5fVx1ezI3YTNlfVx1ezI2NmFmfVx1M2RlYlx1ezI3NjU1fVx1ezIzY2I3fVx1ezI1NjM1fVx1ezI1OTU2fVx1NGU5YVx1ezI1ZTgxfVx1ezI2MjU4fVx1NTZiZlx1ezIwZTZkfVx1OGUwZVx1NWI2ZFx1ezIzZTg4fVx1ezI0YzllfVx1NjNkZVx1NjJkMFx1ezIxN2Y2fVx1ezIxODdifVx1''@;'; put 'put ''NjUzMFx1NTYyZFx1ezI1YzRhfVx1NTQxYVx1ezI1MzExfVx1M2RjNlx1ezI5ZDk4fVx1NGM3ZFx1NTYyMlx1NTYxZVx1N2Y0OVx1ezI1ZWQ4fVx1NTk3NVx1ezIzZDQwfVx1ODc3MFx1NGUxY1x1ezIwZmVhfVx1ezIwZDQ5fVx1ezIzNmJhfVx1ODExN1x1OWQ1ZVx1OGQxOFx1NzYzYlx1OWM0''@;'; put 'put ''NVx1NzY0ZVx1NzdiOVx1OTM0NVx1NTQzMlx1ODE0OFx1ODJmN1x1NTYyNVx1ODEzMlx1ODQxOFx1ODBiZFx1NTVlYVx1Nzk2Mlx1NTY0M1x1NTQxNlx1ezIwZTlkfVx1MzVjZVx1NTYwNVx1NTVmMVx1NjZmMVx1ezI4MmUyfVx1MzYyZFx1NzUzNFx1NTVmMFx1NTViYVx1NTQ5N1x1NTU3Mlx1''@;'; put 'put ''ezIwYzQxfVx1ezIwYzk2fVx1NWVkMFx1ezI1MTQ4fVx1ezIwZTc2fVx1ezIyYzYyfSJdLFsiOWU0MCIsIlx1ezIwZWEyfVx1OWVhYlx1N2Q1YVx1NTVkZVx1ezIxMDc1fVx1NjI5ZFx1OTc2ZFx1NTQ5NFx1OGNjZFx1NzFmNlx1OTE3Nlx1NjNmY1x1NjNiOVx1NjNmZVx1NTU2OVx1ezIyYjQz''@;'; put 'put ''fVx1OWM3Mlx1ezIyZWIzfVx1NTE5YVx1MzRkZlx1ezIwZGE3fVx1NTFhN1x1NTQ0ZFx1NTUxZVx1NTUxM1x1NzY2Nlx1OGUyZFx1ezI2ODhhfVx1NzViMVx1ODBiNlx1ODgwNFx1ODc4Nlx1ODhjN1x1ODFiNlx1ODQxY1x1ezIxMGMxfVx1NDRlY1x1NzMwNFx1ezI0NzA2fVx1NWI5MFx1ODMw''@;'; put 'put ''Ylx1ezI2ODkzfVx1NTY3Ylx1ezIyNmY0fVx1ezI3ZDJmfVx1ezI0MWEzfVx1ezI3ZDczfVx1ezI2ZWQwfVx1ezI3MmI2fVx1OTE3MFx1ezIxMWQ5fVx1OTIwOFx1ezIzY2ZjfVx1ezJhNmE5fVx1ezIwZWFjfVx1ezIwZWY5fVx1NzI2Nlx1ezIxY2EyfVx1NDc0ZVx1ezI0ZmMyfVx1ezI3ZmY5''@;'; put 'put ''fVx1ezIwZmVifVx1NDBmYSJdLFsiOWVhMSIsIlx1OWM1ZFx1NjUxZlx1ezIyZGEwfVx1NDhmM1x1ezI0N2UwfVx1ezI5ZDdjfVx1ezIwZmVjfVx1ezIwZTBhfVx1NjA2Mlx1ezI3NWEzfVx1ezIwZmVkfSJdLFsiOWVhZCIsIlx1ezI2MDQ4fVx1ezIxMTg3fVx1NzFhM1x1N2U4ZVx1OWQ1MFx1''@;'; put 'put ''NGUxYVx1NGUwNFx1MzU3N1x1NWIwZFx1NmNiMlx1NTM2N1x1MzZhY1x1MzlkY1x1NTM3ZFx1MzZhNVx1ezI0NjE4fVx1NTg5YVx1ezI0YjZlfVx1ODIyZFx1NTQ0Ylx1NTdhYVx1ezI1YTk1fVx1ezIwOTc5fSJdLFsiOWVjNSIsIlx1M2E1Mlx1ezIyNDY1fVx1NzM3NFx1ezI5ZWFjfVx1NGQw''@;'; put 'put ''OVx1OWJlZFx1ezIzY2ZlfVx1ezI5ZjMwfVx1NGM1Ylx1ezI0ZmE5fVx1ezI5NTllfVx1ezI5ZmRlfVx1ODQ1Y1x1ezIzZGI2fVx1ezI3MmIyfVx1ezI2N2IzfVx1ezIzNzIwfVx1NjMyZVx1N2QyNVx1ezIzZWY3fVx1ezIzZTJjfVx1M2EyYVx1OTAwOFx1NTJjY1x1M2U3NFx1MzY3YVx1NDVl''@;'; put 'put ''OVx1ezIwNDhlfVx1NzY0MFx1NWFmMFx1ezIwZWI2fVx1Nzg3YVx1ezI3ZjJlfVx1NThhN1x1NDBiZlx1NTY3Y1x1OWI4Ylx1NWQ3NFx1NzY1NFx1ezJhNDM0fVx1OWU4NVx1NGNlMVx1NzVmOVx1MzdmYlx1NjExOVx1ezIzMGRhfVx1ezI0M2YyfSJdLFsiOWVmNSIsIlx1NTY1ZFx1ezIxMmE5''@;'; put 'put ''fVx1NTdhN1x1ezI0OTYzfVx1ezI5ZTA2fVx1NTIzNFx1ezI3MGFlfVx1MzVhZFx1NmM0YVx1OWQ3YyJdLFsiOWY0MCIsIlx1N2M1Nlx1OWIzOVx1NTdkZVx1ezIxNzZjfVx1NWM1M1x1NjRkM1x1ezI5NGQwfVx1ezI2MzM1fVx1ezI3MTY0fVx1ODZhZFx1ezIwZDI4fVx1ezI2ZDIyfVx1ezI0''@;'; put 'put ''YWUyfVx1ezIwZDcxfSJdLFsiOWY0ZiIsIlx1NTFmZVx1ezIxZjBmfVx1NWQ4ZVx1OTcwM1x1ezIxZGQxfVx1OWU4MVx1OTA0Y1x1N2IxZlx1OWIwMlx1NWNkMVx1N2JhM1x1NjI2OFx1NjMzNVx1OWFmZlx1N2JjZlx1OWIyYVx1N2M3ZVx1OWIyZVx1N2M0Mlx1N2M4Nlx1OWMxNVx1N2JmY1x1''@;'; put 'put ''OWIwOVx1OWYxN1x1OWMxYlx1ezI0OTNlfVx1OWY1YVx1NTU3M1x1NWJjM1x1NGZmZFx1OWU5OFx1NGZmMlx1NTI2MFx1M2UwNlx1NTJkMVx1NTc2N1x1NTA1Nlx1NTliN1x1NWUxMlx1OTdjOFx1OWRhYlx1OGY1Y1x1NTQ2OVx1OTdiNFx1OTk0MFx1OTdiYVx1NTMyY1x1NjEzMCJdLFsiOWZh''@;'; put 'put ''MSIsIlx1NjkyY1x1NTNkYVx1OWMwYVx1OWQwMlx1NGMzYlx1OTY0MVx1Njk4MFx1NTBhNlx1NzU0Nlx1ezIxNzZkfVx1OTlkYVx1NTI3MyJdLFsiOWZhZSIsIlx1OTE1OVx1OTY4MVx1OTE1YyJdLFsiOWZiMiIsIlx1OTE1MVx1ezI4ZTk3fVx1NjM3Zlx1ezI2ZDIzfVx1NmFjYVx1NTYxMVx1''@;'; put 'put ''OTE4ZVx1NzU3YVx1NjI4NVx1ezIwM2ZjfVx1NzM0Zlx1N2M3MFx1ezI1YzIxfVx1ezIzY2ZkfSJdLFsiOWZjMSIsIlx1ezI0OTE5fVx1NzZkNlx1OWI5ZFx1NGUyYVx1ezIwY2Q0fVx1ODNiZVx1ODg0MiJdLFsiOWZjOSIsIlx1NWM0YVx1NjljMFx1NTBlZFx1NTc3YVx1NTIxZlx1NWRmNVx1''@;'; put 'put ''NGVjZVx1NmMzMVx1ezIwMWYyfVx1NGYzOVx1NTQ5Y1x1NTRkYVx1NTI5YVx1OGQ4Mlx1MzVmZVx1NWYwY1x1MzVmMyJdLFsiOWZkYiIsIlx1NmI1Mlx1OTE3Y1x1OWZhNVx1OWI5N1x1OTgyZVx1OThiNFx1OWFiYVx1OWVhOFx1OWU4NFx1NzE3YVx1N2IxNCJdLFsiOWZlNyIsIlx1NmJmYVx1''@;'; put 'put ''ODgxOFx1N2Y3OCJdLFsiOWZlYiIsIlx1NTYyMFx1ezJhNjRhfVx1OGU3N1x1OWY1MyJdLFsiOWZmMCIsIlx1OGRkNFx1OGU0Zlx1OWUxY1x1OGUwMVx1NjI4Mlx1ezI4MzdkfVx1OGUyOFx1OGU3NVx1N2FkM1x1ezI0YTc3fVx1N2EzZVx1NzhkOFx1NmNlYVx1OGE2N1x1NzYwNyJdLFsiYTA0''@;'; put 'put ''MCIsIlx1ezI4YTVhfVx1OWYyNlx1NmNjZVx1ODdkNlx1NzVjM1x1ezJhMmIyfVx1Nzg1M1x1ezJmODQwfVx1OGQwY1x1NzJlMlx1NzM3MVx1OGIyZFx1NzMwMlx1NzRmMVx1OGNlYlx1ezI0YWJifVx1ODYyZlx1NWZiYVx1ODhhMFx1NDRiNyJdLFsiYTA1NSIsIlx1ezIxODNifVx1ezI2ZTA1''@;'; put 'put ''fSJdLFsiYTA1OCIsIlx1OGE3ZVx1ezIyNTFifSJdLFsiYTA1YiIsIlx1NjBmZFx1NzY2N1x1OWFkN1x1OWQ0NFx1OTM2ZVx1OWI4Zlx1ODdmNSJdLFsiYTA2MyIsIlx1ODgwZlx1OGNmN1x1NzMyY1x1OTcyMVx1OWJiMFx1MzVkNlx1NzJiMlx1NGMwN1x1N2M1MVx1OTk0YVx1ezI2MTU5fVx1''@;'; put 'put ''NjE1OVx1NGMwNFx1OWU5Nlx1NjE3ZCJdLFsiYTA3MyIsIlx1NTc1Zlx1NjE2Zlx1NjJhNlx1NjIzOVx1NjJjZVx1M2E1Y1x1NjFlMlx1NTNhYVx1ezIzM2Y1fVx1NjM2NFx1NjgwMlx1MzVkMiJdLFsiYTBhMSIsIlx1NWQ1N1x1ezI4YmMyfVx1OGZkYVx1ezI4ZTM5fSJdLFsiYTBhNiIsIlx1''@;'; put 'put ''NTBkOVx1ezIxZDQ2fVx1NzkwNlx1NTMzMlx1OTYzOFx1ezIwZjNifVx1NDA2NSJdLFsiYTBhZSIsIlx1NzdmZSJdLFsiYTBiMCIsIlx1N2NjMlx1ezI1ZjFhfVx1N2NkYVx1N2EyZFx1ODA2Nlx1ODA2M1x1N2Q0ZFx1NzUwNVx1NzRmMlx1ODk5NFx1ODIxYVx1NjcwY1x1ODA2Mlx1ezI3NDg2''@;'; put 'put ''fVx1ODA1Ylx1NzRmMFx1ODEwM1x1NzcyNFx1ODk4OVx1ezI2N2NjfVx1NzU1M1x1ezI2ZWQxfVx1ODdhOVx1ODdjZVx1ODFjOFx1ODc4Y1x1OGE0OVx1OGNhZFx1OGI0M1x1NzcyYlx1NzRmOFx1ODRkYVx1MzYzNVx1NjliMlx1OGRhNiJdLFsiYTBkNCIsIlx1ODlhOVx1NzQ2OFx1NmRiOVx1''@;'; put 'put ''ODdjMVx1ezI0MDExfVx1NzRlN1x1M2RkYlx1NzE3Nlx1NjBhNFx1NjE5Y1x1M2NkMVx1NzE2Mlx1NjA3NyJdLFsiYTBlMiIsIlx1N2Y3MVx1ezI4YjJkfVx1NzI1MFx1NjBlOVx1NGI3ZVx1NTIyMFx1M2MxOFx1ezIzY2M3fVx1ezI1ZWQ3fVx1ezI3NjU2fVx1ezI1NTMxfVx1ezIxOTQ0fVx1''@;'; put 'put ''ezIxMmZlfVx1ezI5OTAzfVx1ezI2ZGRjfVx1ezI3MGFkfVx1NWNjMVx1ezI2MWFkfVx1ezI4YTBmfVx1ezIzNjc3fVx1ezIwMGVlfVx1ezI2ODQ2fVx1ezI0ZjBlfVx1NDU2Mlx1NWIxZlx1ezI2MzRjfVx1OWY1MFx1OWVhNlx1ezI2MjZifSJdLFsiYTNjMCIsIlx1MjQwMCIsMzEsIlx1MjQy''@;'; put 'put ''MSJdLFsiYzZhMSIsIlx1MjQ2MCIsOSwiXHUyNDc0Iiw5LCJcdTIxNzAiLDksIlx1NGUzNlx1NGUzZlx1NGU4NVx1NGVhMFx1NTE4Mlx1NTE5Nlx1NTFhYlx1NTJmOVx1NTMzOFx1NTM2OVx1NTNiNlx1NTkwYVx1NWI4MFx1NWRkYlx1MmYzM1x1NWU3Zlx1NWVmNFx1NWY1MFx1NWY2MVx1NjUz''@;'; put 'put ''NFx1NjVlMFx1NzU5Mlx1NzY3Nlx1OGZiNVx1OTZiNlx4YThcdTAyYzZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdWZmM2JcdWZmM2RcdTI3M2RcdTMwNDEiLDIzXSxbImM3NDAiLCJcdTMwNTkiLDU4LCJcdTMwYTFcdTMwYTJc''@;'; put 'put ''dTMwYTNcdTMwYTQiXSxbImM3YTEiLCJcdTMwYTUiLDgxLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsNF0sWyJjODQwIiwiXHUwNDFiIiwyNiwiXHUwNDUxXHUwNDM2IiwyNSwiXHUyMWU3XHUyMWI4XHUyMWI5XHUzMWNmXHV7MjAwY2N9XHU0ZTVhXHV7MjAwOGF9XHU1MjAyXHU0NDkxIl0s''@;'; put 'put ''WyJjOGExIiwiXHU5ZmIwXHU1MTg4XHU5ZmIxXHV7Mjc2MDd9Il0sWyJjOGNkIiwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUzMDliXHUzMDljXHUyZTgwXHUyZTg0XHUyZTg2XHUyZTg3XHUyZTg4XHUyZThhXHUyZThjXHUyZThkXHUyZTk1XHUyZTljXHUy''@;'; put 'put ''ZTlkXHUyZWE1XHUyZWE3XHUyZWFhXHUyZWFjXHUyZWFlXHUyZWI2XHUyZWJjXHUyZWJlXHUyZWM2XHUyZWNhXHUyZWNjXHUyZWNkXHUyZWNmXHUyZWQ2XHUyZWQ3XHUyZWRlXHUyZWUzIl0sWyJjOGY1IiwiXHUwMjgzXHUwMjUwXHUwMjViXHUwMjU0XHUwMjc1XHUwMTUzXHhmOFx1MDE0Ylx1''@;'; put 'put ''MDI4YVx1MDI2YSJdLFsiZjlmZSIsIlx1ZmZlZCJdLFsiZmE0MCIsIlx1ezIwNTQ3fVx1OTJkYlx1ezIwNWRmfVx1ezIzZmM1fVx1ODU0Y1x1NDJiNVx1NzNlZlx1NTFiNVx1MzY0OVx1ezI0OTQyfVx1ezI4OWU0fVx1OTM0NFx1ezIxOWRifVx1ODJlZVx1ezIzY2M4fVx1NzgzY1x1Njc0NFx1''@;'; put 'put ''NjJkZlx1ezI0OTMzfVx1ezI4OWFhfVx1ezIwMmEwfVx1ezI2YmIzfVx1ezIxMzA1fVx1NGZhYlx1ezIyNGVkfVx1NTAwOFx1ezI2ZDI5fVx1ezI3YTg0fVx1ezIzNjAwfVx1ezI0YWIxfVx1ezIyNTEzfVx1NTAyOVx1ezIwMzdlfVx1NWZhNFx1ezIwMzgwfVx1ezIwMzQ3fVx1NmVkYlx1ezIw''@;'; put 'put ''NDFmfVx1NTA3ZFx1NTEwMVx1MzQ3YVx1NTEwZVx1OTg2Y1x1Mzc0M1x1ODQxNlx1ezI0OWE0fVx1ezIwNDg3fVx1NTE2MFx1ezIzM2I0fVx1NTE2YVx1ezIwYmZmfVx1ezIyMGZjfVx1ezIwMmU1fVx1ezIyNTMwfVx1ezIwNThlfVx1ezIzMjMzfVx1ezIxOTgzfVx1NWI4Mlx1ODc3ZFx1ezIw''@;'; put 'put ''NWIzfVx1ezIzYzk5fVx1NTFiMlx1NTFiOCJdLFsiZmFhMSIsIlx1OWQzNFx1NTFjOVx1NTFjZlx1NTFkMVx1M2NkY1x1NTFkM1x1ezI0YWE2fVx1NTFiM1x1NTFlMlx1NTM0Mlx1NTFlZFx1ODNjZFx1NjkzZVx1ezIzNzJkfVx1NWY3Ylx1NTIwYlx1NTIyNlx1NTIzY1x1NTJiNVx1NTI1N1x1''@;'; put 'put ''NTI5NFx1NTJiOVx1NTJjNVx1N2MxNVx1ODU0Mlx1NTJlMFx1ODYwZFx1ezI2YjEzfVx1NTMwNVx1ezI4YWRlfVx1NTU0OVx1NmVkOVx1ezIzZjgwfVx1ezIwOTU0fVx1ezIzZmVjfVx1NTMzM1x1NTM0NFx1ezIwYmUyfVx1NmNjYlx1ezIxNzI2fVx1NjgxYlx1NzNkNVx1NjA0YVx1M2VhYVx1''@;'; put 'put ''MzhjY1x1ezIxNmU4fVx1NzFkZFx1NDRhMlx1NTM2ZFx1NTM3NFx1ezI4NmFifVx1NTM3ZVx1NTM3Zlx1ezIxNTk2fVx1ezIxNjEzfVx1NzdlNlx1NTM5M1x1ezI4YTlifVx1NTNhMFx1NTNhYlx1NTNhZVx1NzNhN1x1ezI1NzcyfVx1M2Y1OVx1NzM5Y1x1NTNjMVx1NTNjNVx1NmM0OVx1NGU0''@;'; put 'put ''OVx1NTdmZVx1NTNkOVx1M2FhYlx1ezIwYjhmfVx1NTNlMFx1ezIzZmVifVx1ezIyZGEzfVx1NTNmNlx1ezIwYzc3fVx1NTQxM1x1NzA3OVx1NTUyYlx1NjY1N1x1NmQ1Ylx1NTQ2ZFx1ezI2YjUzfVx1ezIwZDc0fVx1NTU1ZFx1NTQ4Zlx1NTRhNFx1NDdhNlx1ezIxNzBkfVx1ezIwZWRkfVx1''@;'; put 'put ''M2RiNFx1ezIwZDRkfSJdLFsiZmI0MCIsIlx1ezI4OWJjfVx1ezIyNjk4fVx1NTU0N1x1NGNlZFx1NTQyZlx1NzQxN1x1NTU4Nlx1NTVhOVx1NTYwNVx1ezIxOGQ3fVx1ezI0MDNhfVx1NDU1Mlx1ezI0NDM1fVx1NjZiM1x1ezIxMGI0fVx1NTYzN1x1NjZjZFx1ezIzMjhhfVx1NjZhNFx1NjZh''@;'; put 'put ''ZFx1NTY0ZFx1NTY0Zlx1NzhmMVx1NTZmMVx1OTc4N1x1NTNmZVx1NTcwMFx1NTZlZlx1NTZlZFx1ezI4YjY2fVx1MzYyM1x1ezIxMjRmfVx1NTc0Nlx1ezI0MWE1fVx1NmM2ZVx1NzA4Ylx1NTc0Mlx1MzZiMVx1ezI2YzdlfVx1NTdlNlx1ezIxNDE2fVx1NTgwM1x1ezIxNDU0fVx1ezI0MzYz''@;'; put 'put ''fVx1NTgyNlx1ezI0YmY1fVx1NTg1Y1x1NThhYVx1MzU2MVx1NThlMFx1NThkY1x1ezIxMjNjfVx1NThmYlx1NWJmZlx1NTc0M1x1ezJhMTUwfVx1ezI0Mjc4fVx1OTNkM1x1MzVhMVx1NTkxZlx1NjhhNlx1MzZjM1x1NmU1OSJdLFsiZmJhMSIsIlx1ezIxNjNlfVx1NWEyNFx1NTU1M1x1ezIx''@;'; put 'put ''NjkyfVx1ODUwNVx1NTljOVx1ezIwZDRlfVx1ezI2YzgxfVx1ezI2ZDJhfVx1ezIxN2RjfVx1NTlkOVx1ezIxN2ZifVx1ezIxN2IyfVx1ezI2ZGE2fVx1NmQ3MVx1ezIxODI4fVx1ezIxNmQ1fVx1NTlmOVx1ezI2ZTQ1fVx1NWFhYlx1NWE2M1x1MzZlNlx1ezI0OWE5fVx1NWE3N1x1MzcwOFx1''@;'; put 'put ''NWE5Nlx1NzQ2NVx1NWFkM1x1ezI2ZmExfVx1ezIyNTU0fVx1M2Q4NVx1ezIxOTExfVx1MzczMlx1ezIxNmI4fVx1NWU4M1x1NTJkMFx1NWI3Nlx1NjU4OFx1NWI3Y1x1ezI3YTBlfVx1NDAwNFx1NDg1ZFx1ezIwMjA0fVx1NWJkNVx1NjE2MFx1ezIxYTM0fVx1ezI1OWNjfVx1ezIwNWE1fVx1''@;'; put 'put ''NWJmM1x1NWI5ZFx1NGQxMFx1NWMwNVx1ezIxYjQ0fVx1NWMxM1x1NzNjZVx1NWMxNFx1ezIxY2E1fVx1ezI2YjI4fVx1NWM0OVx1NDhkZFx1NWM4NVx1NWNlOVx1NWNlZlx1NWQ4Ylx1ezIxZGY5fVx1ezIxZTM3fVx1NWQxMFx1NWQxOFx1NWQ0Nlx1ezIxZWE0fVx1NWNiYVx1NWRkN1x1ODJm''@;'; put 'put ''Y1x1MzgyZFx1ezI0OTAxfVx1ezIyMDQ5fVx1ezIyMTczfVx1ODI4N1x1MzgzNlx1M2JjMlx1NWUyZVx1NmE4YVx1NWU3NVx1NWU3YVx1ezI0NGJjfVx1ezIwY2QzfVx1NTNhNlx1NGViN1x1NWVkMFx1NTNhOFx1ezIxNzcxfVx1NWUwOVx1NWVmNFx1ezI4NDgyfSJdLFsiZmM0MCIsIlx1NWVm''@;'; put 'put ''OVx1NWVmYlx1MzhhMFx1NWVmY1x1NjgzZVx1OTQxYlx1NWYwZFx1ezIwMWMxfVx1ezJmODk0fVx1M2FkZVx1NDhhZVx1ezIxMzNhfVx1NWYzYVx1ezI2ODg4fVx1ezIyM2QwfVx1NWY1OFx1ezIyNDcxfVx1NWY2M1x1OTdiZFx1ezI2ZTZlfVx1NWY3Mlx1OTM0MFx1ezI4YTM2fVx1NWZhN1x1''@;'; put 'put ''NWRiNlx1M2Q1Zlx1ezI1MjUwfVx1ezIxZjZhfVx1ezI3MGY4fVx1ezIyNjY4fVx1OTFkNlx1ezIwMjllfVx1ezI4YTI5fVx1NjAzMVx1NjY4NVx1ezIxODc3fVx1Mzk2M1x1M2RjN1x1MzYzOVx1NTc5MFx1ezIyN2I0fVx1Nzk3MVx1M2U0MFx1NjA5ZVx1NjBhNFx1NjBiM1x1ezI0OTgyfVx1''@;'; put 'put ''ezI0OThmfVx1ezI3YTUzfVx1NzRhNFx1NTBlMVx1NWFhMFx1NjE2NFx1ODQyNFx1NjE0Mlx1ezJmOGE2fVx1ezI2ZWQyfVx1NjE4MVx1NTFmNFx1ezIwNjU2fVx1NjE4N1x1NWJhYVx1ezIzZmI3fSJdLFsiZmNhMSIsIlx1ezIyODVmfVx1NjFkM1x1ezI4YjlkfVx1ezI5OTVkfVx1NjFkMFx1''@;'; put 'put ''MzkzMlx1ezIyOTgwfVx1ezIyOGMxfVx1NjAyM1x1NjE1Y1x1NjUxZVx1NjM4Ylx1ezIwMTE4fVx1NjJjNVx1ezIxNzcwfVx1NjJkNVx1ezIyZTBkfVx1NjM2Y1x1ezI0OWRmfVx1M2ExN1x1NjQzOFx1NjNmOFx1ezIxMzhlfVx1ezIxN2ZjfVx1NjQ5MFx1NmY4YVx1ezIyZTM2fVx1OTgxNFx1''@;'; put 'put ''ezI0MDhjfVx1ezI1NzFkfVx1NjRlMVx1NjRlNVx1OTQ3Ylx1M2E2Nlx1NjQzYVx1M2E1N1x1NjU0ZFx1NmYxNlx1ezI0YTI4fVx1ezI0YTIzfVx1NjU4NVx1NjU2ZFx1NjU1Zlx1ezIzMDdlfVx1NjViNVx1ezI0OTQwfVx1NGIzN1x1NjVkMVx1NDBkOFx1ezIxODI5fVx1NjVlMFx1NjVlM1x1''@;'; put 'put ''NWZkZlx1ezIzNDAwfVx1NjYxOFx1ezIzMWY3fVx1ezIzMWY4fVx1NjY0NFx1ezIzMWE0fVx1ezIzMWE1fVx1NjY0Ylx1ezIwZTc1fVx1NjY2N1x1ezI1MWU2fVx1NjY3M1x1NjY3NFx1ezIxZTNkfVx1ezIzMjMxfVx1ezI4NWY0fVx1ezIzMWM4fVx1ezI1MzEzfVx1NzdjNVx1ezIyOGY3fVx1''@;'; put 'put ''OTlhNFx1NjcwMlx1ezI0MzljfVx1ezI0YTIxfVx1M2IyYlx1NjlmYVx1ezIzN2MyfVx1Njc1ZVx1Njc2N1x1Njc2Mlx1ezI0MWNkfVx1ezI5MGVkfVx1NjdkN1x1NDRlOVx1NjgyMlx1NmU1MFx1OTIzY1x1NjgwMVx1ezIzM2U2fVx1ezI2ZGEwfVx1Njg1ZCJdLFsiZmQ0MCIsIlx1ezIzNDZm''@;'; put 'put ''fVx1NjllMVx1NmEwYlx1ezI4YWRmfVx1Njk3M1x1NjhjM1x1ezIzNWNkfVx1NjkwMVx1NjkwMFx1M2QzMlx1M2EwMVx1ezIzNjNjfVx1M2I4MFx1NjdhY1x1Njk2MVx1ezI4YTRhfVx1NDJmY1x1NjkzNlx1Njk5OFx1M2JhMVx1ezIwM2M5fVx1ODM2M1x1NTA5MFx1NjlmOVx1ezIzNjU5fVx1''@;'; put 'put ''ezIyMTJhfVx1NmE0NVx1ezIzNzAzfVx1NmE5ZFx1M2JmM1x1NjdiMVx1NmFjOFx1ezI5MTljfVx1M2MwZFx1NmIxZFx1ezIwOTIzfVx1NjBkZVx1NmIzNVx1NmI3NFx1ezIyN2NkfVx1NmViNVx1ezIzYWRifVx1ezIwM2I1fVx1ezIxOTU4fVx1Mzc0MFx1NTQyMVx1ezIzYjVhfVx1NmJlMVx1''@;'; put 'put ''ezIzZWZjfVx1NmJkY1x1NmMzN1x1ezIyNDhifVx1ezI0OGYxfVx1ezI2YjUxfVx1NmM1YVx1ODIyNlx1NmM3OVx1ezIzZGJjfVx1NDRjNVx1ezIzZGJkfVx1ezI0MWE0fVx1ezI0OTBjfVx1ezI0OTAwfSJdLFsiZmRhMSIsIlx1ezIzY2M5fVx1MzZlNVx1M2NlYlx1ezIwZDMyfVx1OWI4M1x1''@;'; put 'put ''ezIzMWY5fVx1ezIyNDkxfVx1N2Y4Zlx1NjgzN1x1ezI2ZDI1fVx1ezI2ZGExfVx1ezI2ZGVifVx1NmQ5Nlx1NmQ1Y1x1NmU3Y1x1NmYwNFx1ezI0OTdmfVx1ezI0MDg1fVx1ezI2ZTcyfVx1ODUzM1x1ezI2Zjc0fVx1NTFjN1x1NmM5Y1x1NmUxZFx1ODQyZVx1ezI4YjIxfVx1NmUyZlx1ezIz''@;'; put 'put ''ZTJmfVx1NzQ1M1x1ezIzZjgyfVx1NzljY1x1NmU0Zlx1NWE5MVx1ezIzMDRifVx1NmZmOFx1MzcwZFx1NmY5ZFx1ezIzZTMwfVx1NmVmYVx1ezIxNDk3fVx1ezI0MDNkfVx1NDU1NVx1OTNmMFx1NmY0NFx1NmY1Y1x1M2Q0ZVx1NmY3NFx1ezI5MTcwfVx1M2QzYlx1NmY5Zlx1ezI0MTQ0fVx1''@;'; put 'put ''NmZkM1x1ezI0MDkxfVx1ezI0MTU1fVx1ezI0MDM5fVx1ezIzZmYwfVx1ezIzZmI0fVx1ezI0MTNmfVx1NTFkZlx1ezI0MTU2fVx1ezI0MTU3fVx1ezI0MTQwfVx1ezI2MWRkfVx1NzA0Ylx1NzA3ZVx1NzBhN1x1NzA4MVx1NzBjY1x1NzBkNVx1NzBkNlx1NzBkZlx1NDEwNFx1M2RlOFx1NzFi''@;'; put 'put ''NFx1NzE5Nlx1ezI0Mjc3fVx1NzEyYlx1NzE0NVx1NWE4OFx1NzE0YVx1NzE2ZVx1NWM5Y1x1ezI0MzY1fVx1NzE0Zlx1OTM2Mlx1ezI0MmMxfVx1NzEyY1x1ezI0NDVhfVx1ezI0YTI3fVx1ezI0YTIyfVx1NzFiYVx1ezI4YmU4fVx1NzBiZFx1NzIwZSJdLFsiZmU0MCIsIlx1OTQ0Mlx1NzIx''@;'; put 'put ''NVx1NTkxMVx1OTQ0M1x1NzIyNFx1OTM0MVx1ezI1NjA1fVx1NzIyZVx1NzI0MFx1ezI0OTc0fVx1NjhiZFx1NzI1NVx1NzI1N1x1M2U1NVx1ezIzMDQ0fVx1NjgwZFx1NmYzZFx1NzI4Mlx1NzMyYVx1NzMyYlx1ezI0ODIzfVx1ezI4ODJifVx1NDhlZFx1ezI4ODA0fVx1NzMyOFx1NzMyZVx1''@;'; put 'put ''NzNjZlx1NzNhYVx1ezIwYzNhfVx1ezI2YTJlfVx1NzNjOVx1NzQ0OVx1ezI0MWUyfVx1ezIxNmU3fVx1ezI0YTI0fVx1NjYyM1x1MzZjNVx1ezI0OWI3fVx1ezI0OThkfVx1ezI0OWZifVx1NzNmN1x1NzQxNVx1NjkwM1x1ezI0YTI2fVx1NzQzOVx1ezIwNWMzfVx1M2VkN1x1NzQ1Y1x1ezIy''@;'; put 'put ''OGFkfVx1NzQ2MFx1ezI4ZWIyfVx1NzQ0N1x1NzNlNFx1NzQ3Nlx1ODNiOVx1NzQ2Y1x1MzczMFx1NzQ3NFx1OTNmMVx1NmEyY1x1NzQ4Mlx1NDk1M1x1ezI0YThjfSJdLFsiZmVhMSIsIlx1ezI0MTVmfVx1ezI0YTc5fVx1ezI4YjhmfVx1NWI0Nlx1ezI4YzAzfVx1ezIxODllfVx1NzRjOFx1''@;'; put 'put ''ezIxOTg4fVx1NzUwZVx1NzRlOVx1NzUxZVx1ezI4ZWQ5fVx1ezIxYTRifVx1NWJkN1x1ezI4ZWFjfVx1OTM4NVx1NzU0ZFx1NzU0YVx1NzU2N1x1NzU2ZVx1ezI0ZjgyfVx1M2YwNFx1ezI0ZDEzfVx1NzU4ZVx1NzQ1ZFx1NzU5ZVx1NzViNFx1NzYwMlx1NzYyY1x1NzY1MVx1NzY0Zlx1NzY2''@;'; put 'put ''Zlx1NzY3Nlx1ezI2M2Y1fVx1NzY5MFx1ODFlZlx1MzdmOFx1ezI2OTExfVx1ezI2OTBlfVx1NzZhMVx1NzZhNVx1NzZiN1x1NzZjY1x1ezI2ZjlmfVx1ODQ2Mlx1ezI1MDlkfVx1ezI1MTdkfVx1ezIxZTFjfVx1NzcxZVx1NzcyNlx1Nzc0MFx1NjRhZlx1ezI1MjIwfVx1Nzc1OFx1ezIzMmFj''@;'; put 'put ''fVx1NzdhZlx1ezI4OTY0fVx1ezI4OTY4fVx1ezIxNmMxfVx1NzdmNFx1NzgwOVx1ezIxMzc2fVx1ezI0YTEyfVx1NjhjYVx1NzhhZlx1NzhjN1x1NzhkM1x1OTZhNVx1NzkyZVx1ezI1NWUwfVx1NzhkN1x1NzkzNFx1NzhiMVx1ezI3NjBjfVx1OGZiOFx1ODg4NFx1ezI4YjJifVx1ezI2MDgz''@;'; put 'put ''fVx1ezIyNjFjfVx1Nzk4Nlx1ODkwMFx1NjkwMlx1Nzk4MFx1ezI1ODU3fVx1Nzk5ZFx1ezI3YjM5fVx1NzkzY1x1NzlhOVx1NmUyYVx1ezI3MTI2fVx1M2VhOFx1NzljNlx1ezI5MTBkfVx1NzlkNCJdXScpfSwxMzMzNjphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPUpTT04ucGFyc2Uo''@;'; put 'put ''J1tbIjAiLCJcXHUwMDAwIiwxMjcsIlx1MjBhYyJdLFsiODE0MCIsIlx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0''@;'; put 'put ''MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YSIsNSwiXHU0ZTcyXHU0ZTc0Iiw5LCJcdTRlN2YiLDYsIlx1NGU4N1x1NGU4YSJdLFsiODE4MCIsIlx1NGU5''@;'; put 'put ''MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1''@;'; put 'put ''NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMiIsNiwiXHU0ZjBiXHU0ZjBjXHU0ZjEyIiw0LCJcdTRmMWNcdTRmMWRcdTRmMjFcdTRmMjNcdTRmMjhcdTRmMjlc''@;'; put 'put ''dTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2UiLDQsIlx1NGY0NFx1NGY0NVx1NGY0NyIsNSwiXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjYxXHU0ZjYyXHU0ZjY2XHU0ZjY4XHU0ZjZhXHU0ZjZiXHU0ZjZkXHU0ZjZlXHU0ZjcxXHU0Zjcy''@;'; put 'put ''XHU0Zjc1XHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjgwXHU0ZjgxXHU0ZjgyXHU0Zjg1XHU0Zjg2XHU0Zjg3XHU0ZjhhXHU0ZjhjXHU0ZjhlXHU0ZjkwXHU0ZjkyXHU0ZjkzXHU0Zjk1XHU0Zjk2XHU0Zjk4XHU0Zjk5XHU0ZjlhXHU0ZjljXHU0ZjllXHU0ZjlmXHU0ZmExXHU0''@;'; put 'put ''ZmEyIl0sWyI4MjQwIiwiXHU0ZmE0XHU0ZmFiXHU0ZmFkXHU0ZmIwIiw0LCJcdTRmYjYiLDgsIlx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMiIsNCwiXHU0ZmQ5XHU0ZmRiXHU0ZmUwXHU0ZmUyXHU0ZmU0XHU0ZmU1XHU0''@;'; put 'put ''ZmU3XHU0ZmViXHU0ZmVjXHU0ZmYwXHU0ZmYyXHU0ZmY0XHU0ZmY1XHU0ZmY2XHU0ZmY3XHU0ZmY5XHU0ZmZiXHU0ZmZjXHU0ZmZkXHU0ZmZmIiwxMV0sWyI4MjgwIiwiXHU1MDBiXHU1MDBlXHU1MDEwXHU1MDExXHU1MDEzXHU1MDE1XHU1MDE2XHU1MDE3XHU1MDFiXHU1MDFkXHU1MDFlXHU1''@;'; put 'put ''MDIwXHU1MDIyXHU1MDIzXHU1MDI0XHU1MDI3XHU1MDJiXHU1MDJmIiwxMCwiXHU1MDNiXHU1MDNkXHU1MDNmXHU1MDQwXHU1MDQxXHU1MDQyXHU1MDQ0XHU1MDQ1XHU1MDQ2XHU1MDQ5XHU1MDRhXHU1MDRiXHU1MDRkXHU1MDUwIiw0LCJcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJc''@;'; put 'put ''dTUwNWQiLDcsIlx1NTA2NiIsNSwiXHU1MDZkIiw4LCJcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRcdTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUwOGUiLDIwLCJcdTUwYTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUwYWQi''@;'; put 'put ''LDQsIlx1NTBiMyIsNiwiXHU1MGJjIl0sWyI4MzQwIiwiXHU1MGJkIiwxNywiXHU1MGQwIiw1LCJcdTUwZDdcdTUwZDhcdTUwZDlcdTUwZGIiLDEwLCJcdTUwZThcdTUwZTlcdTUwZWFcdTUwZWJcdTUwZWZcdTUwZjBcdTUwZjFcdTUwZjJcdTUwZjRcdTUwZjYiLDQsIlx1NTBmYyIsOSwiXHU1''@;'; put 'put ''MTA4Il0sWyI4MzgwIiwiXHU1MTA5XHU1MTBhXHU1MTBjIiw1LCJcdTUxMTMiLDEzLCJcdTUxMjIiLDI4LCJcdTUxNDJcdTUxNDdcdTUxNGFcdTUxNGNcdTUxNGVcdTUxNGZcdTUxNTBcdTUxNTJcdTUxNTNcdTUxNTdcdTUxNThcdTUxNTlcdTUxNWJcdTUxNWQiLDQsIlx1NTE2M1x1NTE2NFx1''@;'; put 'put ''NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFh''@;'; put 'put ''M1x1NTFhNiIsNCwiXHU1MWFkXHU1MWFlXHU1MWI0XHU1MWI4XHU1MWI5XHU1MWJhXHU1MWJlXHU1MWJmXHU1MWMxXHU1MWMyXHU1MWMzXHU1MWM1XHU1MWM4XHU1MWNhXHU1MWNkXHU1MWNlXHU1MWQwXHU1MWQyIiw1XSxbIjg0NDAiLCJcdTUxZDhcdTUxZDlcdTUxZGFcdTUxZGNcdTUxZGVc''@;'; put 'put ''dTUxZGZcdTUxZTJcdTUxZTNcdTUxZTUiLDUsIlx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIy''@;'; put 'put ''M1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NCIsNSwiXHU1MjRiXHU1MjRlXHU1MjRmXHU1MjUyXHU1MjUzXHU1MjU1XHU1MjU3XHU1MjU4Il0sWyI4NDgwIiwiXHU1MjU5XHU1MjVhXHU1MjViXHU1''@;'; put 'put ''MjVkXHU1MjVmXHU1MjYwXHU1MjYyXHU1MjYzXHU1MjY0XHU1MjY2XHU1MjY4XHU1MjZiXHU1MjZjXHU1MjZkXHU1MjZlXHU1MjcwXHU1MjcxXHU1MjczIiw5LCJcdTUyN2VcdTUyODBcdTUyODMiLDQsIlx1NTI4OSIsNiwiXHU1MjkxXHU1MjkyXHU1Mjk0Iiw2LCJcdTUyOWNcdTUyYTRcdTUy''@;'; put 'put ''YTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZcdTUyYjBcdTUyYjQiLDksIlx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOSIsNSwiXHU1MmUwXHU1''@;'; put 'put ''MmUxXHU1MmUyXHU1MmUzXHU1MmU1IiwxMCwiXHU1MmYxIiw3LCJcdTUyZmJcdTUyZmNcdTUyZmRcdTUzMDFcdTUzMDJcdTUzMDNcdTUzMDRcdTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGUiXSxbIjg1NDAiLCJcdTUzMTFcdTUzMTJcdTUzMTNcdTUzMTRcdTUzMThcdTUzMWJc''@;'; put 'put ''dTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUzMmYiLDksIlx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1''@;'; put 'put ''Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3Y1x1NTM3ZFx1NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4ZiJdLFsiODU4MCIsIlx1NTM5MCIsNCwiXHU1Mzk2XHU1Mzk3XHU1''@;'; put 'put ''Mzk5XHU1MzliXHU1MzljXHU1MzllXHU1M2EwXHU1M2ExXHU1M2E0XHU1M2E3XHU1M2FhXHU1M2FiXHU1M2FjXHU1M2FkXHU1M2FmIiw2LCJcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUzYzBcdTUzYzMiLDQsIlx1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1''@;'; put 'put ''NTNkM1x1NTNkNVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQz''@;'; put 'put ''MFx1NTQzM1x1NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZCIsNCwiXHU1NDYzXHU1NDY1XHU1NDY3XHU1NDY5Iiw3LCJcdTU0NzRcdTU0NzlcdTU0''@;'; put 'put ''N2FcdTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlcdTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNcdTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTEiXSxbIjg2NDAiLCJcdTU0YTJcdTU0YTVcdTU0YWVcdTU0YjBcdTU0YjJcdTU0YjVc''@;'; put 'put ''dTU0YjZcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmNcdTU0YmVcdTU0YzNcdTU0YzVcdTU0Y2FcdTU0Y2JcdTU0ZDZcdTU0ZDhcdTU0ZGJcdTU0ZTAiLDQsIlx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNCIsNSwiXHU1NGZiXHU1NGZlXHU1NTAwXHU1NTAyXHU1NTAzXHU1NTA0''@;'; put 'put ''XHU1NTA1XHU1NTA4XHU1NTBhIiw0LCJcdTU1MTJcdTU1MTNcdTU1MTUiLDUsIlx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNiJdLFsiODY4MCIsIlx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUz''@;'; put 'put ''YVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0YiIsNCwiXHU1NTUxXHU1NTUyXHU1NTUzXHU1NTU0XHU1NTU3Iiw0LCJcdTU1NWRcdTU1NWVcdTU1NWZcdTU1NjBcdTU1NjJcdTU1NjNcdTU1NjhcdTU1NjlcdTU1NmJcdTU1NmYiLDUsIlx1NTU3OVx1NTU3''@;'; put 'put ''YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMCIsNiwiXHU1NWE4Iiw4LCJcdTU1YjJcdTU1YjRcdTU1YjZcdTU1YjhcdTU1YmFcdTU1YmNcdTU1YmYiLDQs''@;'; put 'put ''Ilx1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkNyIsNCwiXHU1NWRlXHU1NWUwXHU1NWUyXHU1NWU3XHU1NWU5XHU1NWVkXHU1NWVlXHU1NWYwXHU1NWYxXHU1NWY0XHU1NWY2XHU1NWY4Iiw0LCJcdTU1ZmZcdTU2MDJcdTU2MDNcdTU2''@;'; put 'put ''MDRcdTU2MDUiXSxbIjg3NDAiLCJcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2MGRcdTU2MTAiLDcsIlx1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1''@;'; put 'put ''NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MCIsMTEsIlx1NTY0ZiIsNCwiXHU1NjU1XHU1NjU2XHU1NjVhXHU1NjViXHU1NjVkIiw0XSxbIjg3ODAiLCJcdTU2NjNcdTU2NjVcdTU2NjZcdTU2NjdcdTU2NmRcdTU2NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2''@;'; put 'put ''NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2N2QiLDcsIlx1NTY4NyIsNiwiXHU1NjkwXHU1NjkxXHU1NjkyXHU1Njk0IiwxNCwiXHU1NmE0IiwxMCwiXHU1NmIwIiw2LCJcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2YmQiLDEyLCJcdTU2Y2IiLDgsIlx1NTZk''@;'; put 'put ''NVx1NTZkNlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNSIsNSwiXHU1NmVjXHU1NmVlXHU1NmVmXHU1NmYyXHU1NmYzXHU1NmY2XHU1NmY3XHU1NmY4XHU1NmZiXHU1NmZjXHU1NzAwXHU1NzAxXHU1NzAyXHU1NzA1XHU1NzA3XHU1NzBiIiw2XSxbIjg4NDAiLCJcdTU3MTIiLDksIlx1''@;'; put 'put ''NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1NTcyYlx1NTczMVx1NTczMlx1NTczNCIsNCwiXHU1NzNjXHU1NzNkXHU1NzNmXHU1NzQxXHU1NzQzXHU1NzQ0XHU1NzQ1XHU1NzQ2XHU1NzQ4XHU1NzQ5XHU1NzRiXHU1NzUyIiw0LCJcdTU3NThc''@;'; put 'put ''dTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBcdTU3NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODAiXSxbIjg4ODAiLCJcdTU3ODFcdTU3ODdcdTU3ODhcdTU3ODlcdTU3OGFcdTU3OGQiLDQs''@;'; put 'put ''Ilx1NTc5NCIsNiwiXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2E1XHU1N2E4XHU1N2FhXHU1N2FjXHU1N2FmXHU1N2IwXHU1N2IxXHU1N2IzXHU1N2I1XHU1N2I2XHU1N2I3XHU1N2I5Iiw4LCJcdTU3YzQiLDYsIlx1NTdjY1x1NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdk''@;'; put 'put ''N1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNSIsNywiXHU1N2VlXHU1N2YwXHU1N2YxXHU1N2YyXHU1N2YzXHU1N2Y1XHU1N2Y2XHU1N2Y3XHU1N2ZiXHU1N2ZjXHU1N2ZlXHU1N2ZmXHU1ODAxXHU1ODAzXHU1ODA0XHU1ODA1XHU1ODA4XHU1ODA5XHU1ODBhXHU1''@;'; put 'put ''ODBjXHU1ODBlXHU1ODBmXHU1ODEwXHU1ODEyXHU1ODEzXHU1ODE0XHU1ODE2XHU1ODE3XHU1ODE4XHU1ODFhXHU1ODFiXHU1ODFjXHU1ODFkXHU1ODFmXHU1ODIyXHU1ODIzXHU1ODI1Iiw0LCJcdTU4MmIiLDQsIlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNiIsN10sWyI4OTQwIiwi''@;'; put 'put ''XHU1ODNlIiw1LCJcdTU4NDUiLDYsIlx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OSIsNCwiXHU1ODVmIiw1LCJcdTU4NjYiLDQsIlx1NTg2ZCIsMTYsIlx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1''@;'; put 'put ''NTg4YyJdLFsiODk4MCIsIlx1NTg4ZCIsNCwiXHU1ODk0Iiw0LCJcdTU4OWJcdTU4OWNcdTU4OWRcdTU4YTAiLDcsIlx1NThhYSIsMTcsIlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNiIsMTAsIlx1NThkMlx1NThkM1x1NThkNFx1NThkNiIsMTMsIlx1''@;'; put 'put ''NThlNSIsNSwiXHU1OGVkXHU1OGVmXHU1OGYxXHU1OGYyXHU1OGY0XHU1OGY1XHU1OGY3XHU1OGY4XHU1OGZhIiw3LCJcdTU5MDNcdTU5MDVcdTU5MDZcdTU5MDgiLDQsIlx1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1''@;'; put 'put ''NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYiJdLFsiOGE0MCIsIlx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1''@;'; put 'put ''OVx1NTk1YiIsNCwiXHU1OTYxXHU1OTYzXHU1OTY0XHU1OTY2IiwxMiwiXHU1OTc1XHU1OTc3XHU1OTdhXHU1OTdiXHU1OTdjXHU1OTdlXHU1OTdmXHU1OTgwXHU1OTg1XHU1OTg5XHU1OThiXHU1OThjXHU1OThlXHU1OThmXHU1OTkwXHU1OTkxXHU1OTk0XHU1OTk1XHU1OTk4XHU1OTlhXHU1''@;'; put 'put ''OTliXHU1OTljXHU1OTlkXHU1OTlmXHU1OWEwXHU1OWExXHU1OWEyXHU1OWE2Il0sWyI4YTgwIiwiXHU1OWE3XHU1OWFjXHU1OWFkXHU1OWIwXHU1OWIxXHU1OWIzIiw1LCJcdTU5YmFcdTU5YmNcdTU5YmRcdTU5YmYiLDYsIlx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1''@;'; put 'put ''NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZSIsNCwiXHU1OWU0XHU1OWU2XHU1OWU3XHU1OWU5XHU1OWVhXHU1OWViXHU1OWVkIiwxMSwiXHU1OWZhXHU1OWZjXHU1OWZkXHU1OWZlXHU1YTAwXHU1YTAyXHU1YTBhXHU1YTBiXHU1YTBkXHU1YTBlXHU1YTBmXHU1YTEwXHU1YTEy''@;'; put 'put ''XHU1YTE0XHU1YTE1XHU1YTE2XHU1YTE3XHU1YTE5XHU1YTFhXHU1YTFiXHU1YTFkXHU1YTFlXHU1YTIxXHU1YTIyXHU1YTI0XHU1YTI2XHU1YTI3XHU1YTI4XHU1YTJhIiw2LCJcdTVhMzNcdTVhMzVcdTVhMzciLDQsIlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MSIsNCwiXHU1YTQ3XHU1YTQ4''@;'; put 'put ''XHU1YTRiIiw5LCJcdTVhNTZcdTVhNTdcdTVhNThcdTVhNTlcdTVhNWIiLDVdLFsiOGI0MCIsIlx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2YiIsOCwiXHU1YTc4XHU1YTc5XHU1YTdiXHU1YTdjXHU1YTdkXHU1YTdlXHU1YTgwIiwxNywiXHU1YTkzIiw2''@;'; put 'put ''LCJcdTVhOWMiLDEzLCJcdTVhYWJcdTVhYWMiXSxbIjhiODAiLCJcdTVhYWQiLDQsIlx1NWFiNFx1NWFiNlx1NWFiN1x1NWFiOSIsNCwiXHU1YWJmXHU1YWMwXHU1YWMzIiw1LCJcdTVhY2FcdTVhY2JcdTVhY2QiLDQsIlx1NWFkM1x1NWFkNVx1NWFkN1x1NWFkOVx1NWFkYVx1NWFkYlx1NWFk''@;'; put 'put ''ZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1NWFlYyIsNCwiXHU1YWYyIiwyMiwiXHU1YjBhIiwxMSwiXHU1YjE4IiwyNSwiXHU1YjMzXHU1YjM1XHU1YjM2XHU1YjM4Iiw3LCJcdTViNDEiLDZdLFsiOGM0MCIsIlx1NWI0OCIsNywiXHU1YjUyXHU1''@;'; put 'put ''YjU2XHU1YjVlXHU1YjYwXHU1YjYxXHU1YjY3XHU1YjY4XHU1YjZiXHU1YjZkXHU1YjZlXHU1YjZmXHU1YjcyXHU1Yjc0XHU1Yjc2XHU1Yjc3XHU1Yjc4XHU1Yjc5XHU1YjdiXHU1YjdjXHU1YjdlXHU1YjdmXHU1YjgyXHU1Yjg2XHU1YjhhXHU1YjhkXHU1YjhlXHU1YjkwXHU1YjkxXHU1Yjky''@;'; put 'put ''XHU1Yjk0XHU1Yjk2XHU1YjlmXHU1YmE3XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFlXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJiXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmMzXHU1YmM4XHU1YmM5XHU1YmNhXHU1YmNiXHU1YmNkXHU1YmNlXHU1YmNmIl0sWyI4Yzgw''@;'; put 'put ''IiwiXHU1YmQxXHU1YmQ0Iiw4LCJcdTViZTBcdTViZTJcdTViZTNcdTViZTZcdTViZTdcdTViZTkiLDQsIlx1NWJlZlx1NWJmMSIsNiwiXHU1YmZkXHU1YmZlXHU1YzAwXHU1YzAyXHU1YzAzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBiXHU1YzBjXHU1YzBkXHU1YzBlXHU1YzEwXHU1YzEyXHU1''@;'; put 'put ''YzEzXHU1YzE3XHU1YzE5XHU1YzFiXHU1YzFlXHU1YzFmXHU1YzIwXHU1YzIxXHU1YzIzXHU1YzI2XHU1YzI4XHU1YzI5XHU1YzJhXHU1YzJiXHU1YzJkXHU1YzJlXHU1YzJmXHU1YzMwXHU1YzMyXHU1YzMzXHU1YzM1XHU1YzM2XHU1YzM3XHU1YzQzXHU1YzQ0XHU1YzQ2XHU1YzQ3XHU1YzRj''@;'; put 'put ''XHU1YzRkXHU1YzUyXHU1YzUzXHU1YzU0XHU1YzU2XHU1YzU3XHU1YzU4XHU1YzVhXHU1YzViXHU1YzVjXHU1YzVkXHU1YzVmXHU1YzYyXHU1YzY0XHU1YzY3Iiw2LCJcdTVjNzBcdTVjNzIiLDYsIlx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4MyIsNCwiXHU1Yzg5XHU1Yzhh''@;'; put 'put ''XHU1YzhiXHU1YzhlXHU1YzhmXHU1YzkyXHU1YzkzXHU1Yzk1XHU1YzlkIiw0LCJcdTVjYTQiLDRdLFsiOGQ0MCIsIlx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNSIs''@;'; put 'put ''NSwiXHU1Y2NjIiw1LCJcdTVjZDMiLDUsIlx1NWNkYSIsNiwiXHU1Y2UyXHU1Y2UzXHU1Y2U3XHU1Y2U5XHU1Y2ViXHU1Y2VjXHU1Y2VlXHU1Y2VmXHU1Y2YxIiw5LCJcdTVjZmMiLDRdLFsiOGQ4MCIsIlx1NWQwMVx1NWQwNFx1NWQwNVx1NWQwOCIsNSwiXHU1ZDBmIiw0LCJcdTVkMTVcdTVk''@;'; put 'put ''MTdcdTVkMThcdTVkMTlcdTVkMWFcdTVkMWNcdTVkMWRcdTVkMWYiLDQsIlx1NWQyNVx1NWQyOFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQyZiIsNCwiXHU1ZDM1Iiw3LCJcdTVkM2YiLDcsIlx1NWQ0OFx1NWQ0OVx1NWQ0ZCIsMTAsIlx1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZSIsMTAsIlx1NWQ2''@;'; put 'put ''YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NSIsMTIsIlx1NWQ4MyIsMjEsIlx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMCJdLFsiOGU0MCIsIlx1NWRhMSIsMjEsIlx1NWRiOCIsMTIsIlx1NWRjNiIsNiwiXHU1ZGNlIiwxMiwiXHU1ZGRjXHU1''@;'; put 'put ''ZGRmXHU1ZGUwXHU1ZGUzXHU1ZGU0XHU1ZGVhXHU1ZGVjXHU1ZGVkIl0sWyI4ZTgwIiwiXHU1ZGYwXHU1ZGY1XHU1ZGY2XHU1ZGY4Iiw0LCJcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJcdTVlMTNcdTVlMTdcdTVlMWUiLDcsIlx1''@;'; put 'put ''NWUyOCIsNCwiXHU1ZTJmXHU1ZTMwXHU1ZTMyIiw0LCJcdTVlMzlcdTVlM2FcdTVlM2VcdTVlM2ZcdTVlNDBcdTVlNDFcdTVlNDNcdTVlNDYiLDUsIlx1NWU0ZCIsNiwiXHU1ZTU2Iiw0LCJcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjMiLDE0LCJcdTVlNzVcdTVlNzdcdTVlNzlcdTVl''@;'; put 'put ''N2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVlOGRcdTVlOGVcdTVlOTJcdTVlOThcdTVlOWJcdTVlOWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYTgiLDQsIlx1NWVhZSIsNCwiXHU1ZWI0XHU1ZWJhXHU1ZWJiXHU1ZWJjXHU1ZWJkXHU1ZWJmIiw2''@;'; put 'put ''XSxbIjhmNDAiLCJcdTVlYzZcdTVlYzdcdTVlYzhcdTVlY2IiLDUsIlx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkYyIsMTEsIlx1NWVlOVx1NWVlYiIsOCwiXHU1ZWY1XHU1ZWY4XHU1ZWY5XHU1ZWZiXHU1ZWZjXHU1ZWZkXHU1ZjA1XHU1ZjA2XHU1ZjA3XHU1ZjA5''@;'; put 'put ''XHU1ZjBjXHU1ZjBkXHU1ZjBlXHU1ZjEwXHU1ZjEyXHU1ZjE0XHU1ZjE2XHU1ZjE5XHU1ZjFhXHU1ZjFjXHU1ZjFkXHU1ZjFlXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0Il0sWyI4ZjgwIiwiXHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjMyIiw2LCJcdTVmM2JcdTVmM2RcdTVm''@;'; put 'put ''M2VcdTVmM2ZcdTVmNDEiLDE0LCJcdTVmNTFcdTVmNTRcdTVmNTlcdTVmNWFcdTVmNWJcdTVmNWNcdTVmNWVcdTVmNWZcdTVmNjBcdTVmNjNcdTVmNjVcdTVmNjdcdTVmNjhcdTVmNmJcdTVmNmVcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzZcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2Vc''@;'; put 'put ''dTVmN2ZcdTVmODNcdTVmODZcdTVmOGRcdTVmOGVcdTVmOGZcdTVmOTFcdTVmOTNcdTVmOTRcdTVmOTZcdTVmOWFcdTVmOWJcdTVmOWRcdTVmOWVcdTVmOWZcdTVmYTBcdTVmYTIiLDUsIlx1NWZhOVx1NWZhYlx1NWZhY1x1NWZhZiIsNSwiXHU1ZmI2XHU1ZmI4XHU1ZmI5XHU1ZmJhXHU1ZmJi''@;'; put 'put ''XHU1ZmJlIiw0LCJcdTVmYzdcdTVmYzhcdTVmY2FcdTVmY2JcdTVmY2VcdTVmZDNcdTVmZDRcdTVmZDVcdTVmZGFcdTVmZGJcdTVmZGNcdTVmZGVcdTVmZGZcdTVmZTJcdTVmZTNcdTVmZTVcdTVmZTZcdTVmZThcdTVmZTlcdTVmZWNcdTVmZWZcdTVmZjBcdTVmZjJcdTVmZjNcdTVmZjRcdTVm''@;'; put 'put ''ZjZcdTVmZjdcdTVmZjlcdTVmZmFcdTVmZmNcdTYwMDciXSxbIjkwNDAiLCJcdTYwMDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBcdTYwMTFcdTYwMTNcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWVcdTYwMWZcdTYwMjJcdTYwMjNcdTYwMjRcdTYwMmNcdTYwMmRcdTYwMmVcdTYwMzAiLDQsIlx1''@;'; put 'put ''NjAzNiIsNCwiXHU2MDNkXHU2MDNlXHU2MDQwXHU2MDQ0Iiw2LCJcdTYwNGNcdTYwNGVcdTYwNGZcdTYwNTFcdTYwNTNcdTYwNTRcdTYwNTZcdTYwNTdcdTYwNThcdTYwNWJcdTYwNWNcdTYwNWVcdTYwNWZcdTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZcdTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRc''@;'; put 'put ''dTYwNzVcdTYwNzdcdTYwN2VcdTYwODAiXSxbIjkwODAiLCJcdTYwODFcdTYwODJcdTYwODVcdTYwODZcdTYwODdcdTYwODhcdTYwOGFcdTYwOGJcdTYwOGVcdTYwOGZcdTYwOTBcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOTdcdTYwOThcdTYwOTlcdTYwOWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYw''@;'; put 'put ''YTRcdTYwYTVcdTYwYTdcdTYwYTlcdTYwYWFcdTYwYWVcdTYwYjBcdTYwYjNcdTYwYjVcdTYwYjZcdTYwYjdcdTYwYjlcdTYwYmFcdTYwYmQiLDcsIlx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjYyIsNCwiXHU2MGQyXHU2MGQzXHU2MGQ0XHU2MGQ2XHU2MGQ3XHU2MGQ5XHU2MGRiXHU2MGRlXHU2''@;'; put 'put ''MGUxIiw0LCJcdTYwZWFcdTYwZjFcdTYwZjJcdTYwZjVcdTYwZjdcdTYwZjhcdTYwZmIiLDQsIlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMCIsNCwiXHU2MTE2XHU2MTE3XHU2MTE4XHU2MTE5XHU2MTFiXHU2MTFjXHU2MTFkXHU2MTFlXHU2''@;'; put 'put ''MTIxXHU2MTIyXHU2MTI1XHU2MTI4XHU2MTI5XHU2MTJhXHU2MTJjIiwxOCwiXHU2MTQwIiw2XSxbIjkxNDAiLCJcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYxNTRcdTYxNTYiLDYsIlx1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2''@;'; put 'put ''NFx1NjE2NVx1NjE2Nlx1NjE2OSIsNiwiXHU2MTcxXHU2MTcyXHU2MTczXHU2MTc0XHU2MTc2XHU2MTc4IiwxOCwiXHU2MThjXHU2MThkXHU2MThmIiw0LCJcdTYxOTUiXSxbIjkxODAiLCJcdTYxOTYiLDYsIlx1NjE5ZSIsOCwiXHU2MWFhXHU2MWFiXHU2MWFkIiw5LCJcdTYxYjgiLDUsIlx1''@;'; put 'put ''NjFiZlx1NjFjMFx1NjFjMVx1NjFjMyIsNCwiXHU2MWM5XHU2MWNjIiw0LCJcdTYxZDNcdTYxZDUiLDE2LCJcdTYxZTciLDEzLCJcdTYxZjYiLDgsIlx1NjIwMCIsNSwiXHU2MjA3XHU2MjA5XHU2MjEzXHU2MjE0XHU2MjE5XHU2MjFjXHU2MjFkXHU2MjFlXHU2MjIwXHU2MjIzXHU2MjI2XHU2''@;'; put 'put ''MjI3XHU2MjI4XHU2MjI5XHU2MjJiXHU2MjJkXHU2MjJmXHU2MjMwXHU2MjMxXHU2MjMyXHU2MjM1XHU2MjM2XHU2MjM4Iiw0LCJcdTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGEiXSxbIjkyNDAiLCJcdTYyNGZcdTYyNTBcdTYyNTVcdTYyNTZcdTYyNTdcdTYyNTlcdTYyNWFcdTYyNWMi''@;'; put 'put ''LDYsIlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4YiIsNSwiXHU2Mjk0XHU2Mjk5XHU2MjljXHU2MjlkXHU2MjllXHU2MmEz''@;'; put 'put ''XHU2MmE2XHU2MmE3XHU2MmE5XHU2MmFhXHU2MmFkXHU2MmFlXHU2MmFmXHU2MmIwXHU2MmIyXHU2MmIzXHU2MmI0XHU2MmI2XHU2MmI3XHU2MmI4XHU2MmJhXHU2MmJlXHU2MmMwXHU2MmMxIl0sWyI5MjgwIiwiXHU2MmMzXHU2MmNiXHU2MmNmXHU2MmQxXHU2MmQ1XHU2MmRkXHU2MmRlXHU2''@;'; put 'put ''MmUwXHU2MmUxXHU2MmU0XHU2MmVhXHU2MmViXHU2MmYwXHU2MmYyXHU2MmY1XHU2MmY4XHU2MmY5XHU2MmZhXHU2MmZiXHU2MzAwXHU2MzAzXHU2MzA0XHU2MzA1XHU2MzA2XHU2MzBhXHU2MzBiXHU2MzBjXHU2MzBkXHU2MzBmXHU2MzEwXHU2MzEyXHU2MzEzXHU2MzE0XHU2MzE1XHU2MzE3''@;'; put 'put ''XHU2MzE4XHU2MzE5XHU2MzFjXHU2MzI2XHU2MzI3XHU2MzI5XHU2MzJjXHU2MzJkXHU2MzJlXHU2MzMwXHU2MzMxXHU2MzMzIiw1LCJcdTYzM2JcdTYzM2NcdTYzM2VcdTYzM2ZcdTYzNDBcdTYzNDFcdTYzNDRcdTYzNDdcdTYzNDhcdTYzNGFcdTYzNTFcdTYzNTJcdTYzNTNcdTYzNTRcdTYz''@;'; put 'put ''NTYiLDcsIlx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1''@;'; put 'put ''NjM4ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OSIsNiwiXHU2M2ExXHU2M2E0XHU2M2E2XHU2M2FiXHU2M2FmXHU2M2IxXHU2M2IyXHU2M2I1XHU2M2I2XHU2M2I5XHU2M2JiXHU2M2JkXHU2M2JmXHU2M2MwIl0sWyI5MzQwIiwiXHU2M2MxXHU2M2MyXHU2M2MzXHU2M2M1''@;'; put 'put ''XHU2M2M3XHU2M2M4XHU2M2NhXHU2M2NiXHU2M2NjXHU2M2QxXHU2M2QzXHU2M2Q0XHU2M2Q1XHU2M2Q3Iiw2LCJcdTYzZGZcdTYzZTJcdTYzZTQiLDQsIlx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNm''@;'; put 'put ''Y1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNiIsNCwiXHU2NDBkXHU2NDBlXHU2NDExXHU2NDEyXHU2NDE1Iiw1LCJcdTY0MWRcdTY0MWZcdTY0MjJcdTY0MjNcdTY0MjQiXSxbIjkzODAiLCJcdTY0MjVcdTY0MjdcdTY0MjhcdTY0MjlcdTY0MmJcdTY0MmUiLDUsIlx1NjQzNSIsNCwiXHU2NDNi''@;'; put 'put ''XHU2NDNjXHU2NDNlXHU2NDQwXHU2NDQyXHU2NDQzXHU2NDQ5XHU2NDRiIiw2LCJcdTY0NTNcdTY0NTVcdTY0NTZcdTY0NTdcdTY0NTkiLDQsIlx1NjQ1ZiIsNywiXHU2NDY4XHU2NDZhXHU2NDZiXHU2NDZjXHU2NDZlIiw5LCJcdTY0N2IiLDYsIlx1NjQ4M1x1NjQ4Nlx1NjQ4OCIsOCwiXHU2''@;'; put 'put ''NDkzXHU2NDk0XHU2NDk3XHU2NDk4XHU2NDlhXHU2NDliXHU2NDljXHU2NDlkXHU2NDlmIiw0LCJcdTY0YTVcdTY0YTZcdTY0YTdcdTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0YjJcdTY0YjNcdTY0YjRcdTY0YjZcdTY0YjlcdTY0YmJcdTY0YmRcdTY0YmVcdTY0YmZcdTY0YzFc''@;'; put 'put ''dTY0YzNcdTY0YzRcdTY0YzYiLDYsIlx1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRkYSJdLFsiOTQ0MCIsIlx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlNyIsMjQsIlx1NjUwMSIsNywiXHU2NTBhIiw3LCJc''@;'; put 'put ''dTY1MTMiLDQsIlx1NjUxOSIsOF0sWyI5NDgwIiwiXHU2NTIyXHU2NTIzXHU2NTI0XHU2NTI2Iiw0LCJcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDAiLDQsIlx1NjU0Nlx1NjU0N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0''@;'; put 'put ''ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1NjU2NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OCIsMTQsIlx1NjU4OFx1''@;'; put 'put ''NjU4OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMSIsNywiXHU2NWJhXHU2NWJiXHU2NWJlXHU2NWJmXHU2NWMw''@;'; put 'put ''XHU2NWMyXHU2NWM3XHU2NWM4XHU2NWM5XHU2NWNhXHU2NWNkXHU2NWQwXHU2NWQxXHU2NWQzXHU2NWQ0XHU2NWQ1XHU2NWQ4Iiw3LCJcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWIiXSxbIjk1NDAiLCJcdTY1ZjJcdTY1ZjNcdTY1ZjRcdTY1ZjVcdTY1ZjhcdTY1ZjlcdTY1ZmIiLDQs''@;'; put 'put ''Ilx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1NjYxMlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1''@;'; put 'put ''NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzNyIsNCwiXHU2NjNkXHU2NjNmXHU2NjQwXHU2NjQyXHU2NjQ0Iiw2LCJcdTY2NGRcdTY2NGVcdTY2NTBcdTY2NTFcdTY2NTgiXSxbIjk1ODAiLCJcdTY2NTlcdTY2NWJcdTY2NWNcdTY2NWRcdTY2NWVcdTY2NjBcdTY2NjJcdTY2NjNcdTY2NjVc''@;'; put 'put ''dTY2NjdcdTY2NjkiLDQsIlx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5''@;'; put 'put ''M1x1NjY5NFx1NjY5NVx1NjY5OCIsNCwiXHU2NjllIiw4LCJcdTY2YTkiLDQsIlx1NjZhZiIsNCwiXHU2NmI1XHU2NmI2XHU2NmI3XHU2NmI4XHU2NmJhXHU2NmJiXHU2NmJjXHU2NmJkXHU2NmJmIiwyNSwiXHU2NmRhXHU2NmRlIiw3LCJcdTY2ZTdcdTY2ZThcdTY2ZWEiLDUsIlx1NjZmMVx1''@;'; put 'put ''NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwMyJdLFsiOTY0MCIsIlx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1Njcy''@;'; put 'put ''MCIsNSwiXHU2NzI3XHU2NzI5XHU2NzJlXHU2NzMwXHU2NzMyXHU2NzMzXHU2NzM2XHU2NzM3XHU2NzM4XHU2NzM5XHU2NzNiXHU2NzNjXHU2NzNlXHU2NzNmXHU2NzQxXHU2NzQ0XHU2NzQ1XHU2NzQ3XHU2NzRhXHU2NzRiXHU2NzRkXHU2NzUyXHU2NzU0XHU2NzU1XHU2NzU3Iiw0LCJcdTY3''@;'; put 'put ''NWRcdTY3NjJcdTY3NjNcdTY3NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3NmNcdTY3NmVcdTY3NzFcdTY3NzRcdTY3NzYiXSxbIjk2ODAiLCJcdTY3NzhcdTY3NzlcdTY3N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZcdTY3ODhcdTY3OGFcdTY3OGNcdTY3OGRc''@;'; put 'put ''dTY3OGVcdTY3OGZcdTY3OTFcdTY3OTJcdTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlcdTY3OWJcdTY3OWZcdTY3YTBcdTY3YTFcdTY3YTRcdTY3YTZcdTY3YTlcdTY3YWNcdTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjkiLDcsIlx1NjdjMlx1NjdjNSIsOSwiXHU2N2Q1XHU2N2Q2XHU2N2Q3''@;'; put 'put ''XHU2N2RiXHU2N2RmXHU2N2UxXHU2N2UzXHU2N2U0XHU2N2U2XHU2N2U3XHU2N2U4XHU2N2VhXHU2N2ViXHU2N2VkXHU2N2VlXHU2N2YyXHU2N2Y1Iiw3LCJcdTY3ZmVcdTY4MDFcdTY4MDJcdTY4MDNcdTY4MDRcdTY4MDZcdTY4MGRcdTY4MTBcdTY4MTJcdTY4MTRcdTY4MTVcdTY4MTgiLDQs''@;'; put 'put ''Ilx1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMiIsNiwiXHU2ODJiIiw2LCJcdTY4MzRcdTY4MzVcdTY4MzZcdTY4M2FcdTY4M2JcdTY4M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4NTYiLDVdLFsiOTc0MCIsIlx1Njg1Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2YyIs''@;'; put 'put ''NywiXHU2ODc1XHU2ODc4Iiw4LCJcdTY4ODJcdTY4ODRcdTY4ODciLDcsIlx1Njg5MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OCIsOSwiXHU2OGEzXHU2OGE0XHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFiXHU2OGFjXHU2OGFlXHU2OGIxXHU2OGIyXHU2OGI0XHU2OGI2XHU2''@;'; put 'put ''OGI3XHU2OGI4Il0sWyI5NzgwIiwiXHU2OGI5Iiw2LCJcdTY4YzFcdTY4YzMiLDUsIlx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYiIsNCwiXHU2OGUxXHU2OGUyXHU2OGU0Iiw5LCJcdTY4ZWZcdTY4ZjJcdTY4''@;'; put 'put ''ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4ZmZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDYiLDQsIlx1NjkwY1x1NjkwZlx1NjkxMVx1NjkxMyIsMTEsIlx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNSIsNywiXHU2OTJlXHU2OTJmXHU2OTMxXHU2''@;'; put 'put ''OTMyXHU2OTMzXHU2OTM1XHU2OTM2XHU2OTM3XHU2OTM4XHU2OTNhXHU2OTNiXHU2OTNjXHU2OTNlXHU2OTQwXHU2OTQxXHU2OTQzIiwxNiwiXHU2OTU1XHU2OTU2XHU2OTU4XHU2OTU5XHU2OTViXHU2OTVjXHU2OTVmIl0sWyI5ODQwIiwiXHU2OTYxXHU2OTYyXHU2OTY0XHU2OTY1XHU2OTY3''@;'; put 'put ''XHU2OTY4XHU2OTY5XHU2OTZhXHU2OTZjXHU2OTZkXHU2OTZmXHU2OTcwXHU2OTcyIiw0LCJcdTY5N2FcdTY5N2JcdTY5N2RcdTY5N2VcdTY5N2ZcdTY5ODFcdTY5ODNcdTY5ODVcdTY5OGFcdTY5OGJcdTY5OGNcdTY5OGUiLDUsIlx1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZCIsOSwi''@;'; put 'put ''XHU2OWE5XHU2OWFhXHU2OWFjXHU2OWFlXHU2OWFmXHU2OWIwXHU2OWIyXHU2OWIzXHU2OWI1XHU2OWI2XHU2OWI4XHU2OWI5XHU2OWJhXHU2OWJjXHU2OWJkIl0sWyI5ODgwIiwiXHU2OWJlXHU2OWJmXHU2OWMwXHU2OWMyIiw3LCJcdTY5Y2JcdTY5Y2RcdTY5Y2ZcdTY5ZDFcdTY5ZDJcdTY5''@;'; put 'put ''ZDNcdTY5ZDUiLDUsIlx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMSIsMTEsIlx1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmMyIsOSwiXHU2OWZlXHU2YTAwIiw5LCJcdTZhMGIiLDExLCJcdTZhMTkiLDUsIlx1NmEyMFx1NmEyMiIsNSwiXHU2YTI5XHU2YTJiXHU2YTJjXHU2YTJkXHU2YTJl''@;'; put 'put ''XHU2YTMwXHU2YTMyXHU2YTMzXHU2YTM0XHU2YTM2Iiw2LCJcdTZhM2YiLDQsIlx1NmE0NVx1NmE0Nlx1NmE0OCIsNywiXHU2YTUxIiw2LCJcdTZhNWEiXSxbIjk5NDAiLCJcdTZhNWMiLDQsIlx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2NiIsMTAsIlx1NmE3MiIsNiwiXHU2YTdhXHU2YTdiXHU2''@;'; put 'put ''YTdkXHU2YTdlXHU2YTdmXHU2YTgxXHU2YTgyXHU2YTgzXHU2YTg1Iiw4LCJcdTZhOGZcdTZhOTIiLDQsIlx1NmE5OCIsNywiXHU2YWExIiw1XSxbIjk5ODAiLCJcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWQiLDExNCwiXHU2YjI1XHU2YjI2XHU2YjI4Iiw2XSxbIjlhNDAiLCJcdTZiMmZcdTZi''@;'; put 'put ''MzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZiNDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGQiLDExLCJcdTZiNWEiLDcsIlx1NmI2OFx1NmI2OVx1NmI2YiIsMTMsIlx1NmI3YVx1''@;'; put 'put ''NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OCJdLFsiOWE4MCIsIlx1NmI4Y1x1NmI4ZVx1NmI4Zlx1NmI5MFx1NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5YyIsNCwiXHU2YmEyIiw3LCJcdTZiYWIiLDcsIlx1NmJiNlx1NmJiOCIsNiwiXHU2YmMwXHU2''@;'; put 'put ''YmMzXHU2YmM0XHU2YmM2Iiw0LCJcdTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGMiLDQsIlx1NmJlMiIsNywiXHU2YmVjXHU2YmVkXHU2YmVlXHU2YmYwXHU2YmYxXHU2YmYyXHU2YmY0XHU2YmY2XHU2YmY3XHU2YmY4XHU2YmZhXHU2YmZiXHU2YmZjXHU2YmZlIiw2''@;'; put 'put ''LCJcdTZjMDgiLDQsIlx1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMzZVx1NmMzZlx1NmM0M1x1NmM0NFx1NmM0NVx1''@;'; put 'put ''NmM0OFx1NmM0YiIsNCwiXHU2YzUxXHU2YzUyXHU2YzUzXHU2YzU2XHU2YzU4Il0sWyI5YjQwIiwiXHU2YzU5XHU2YzVhXHU2YzYyXHU2YzYzXHU2YzY1XHU2YzY2XHU2YzY3XHU2YzZiIiw0LCJcdTZjNzFcdTZjNzNcdTZjNzVcdTZjNzdcdTZjNzhcdTZjN2FcdTZjN2JcdTZjN2NcdTZjN2Zc''@;'; put 'put ''dTZjODBcdTZjODRcdTZjODdcdTZjOGFcdTZjOGJcdTZjOGRcdTZjOGVcdTZjOTFcdTZjOTJcdTZjOTVcdTZjOTZcdTZjOTdcdTZjOThcdTZjOWFcdTZjOWNcdTZjOWRcdTZjOWVcdTZjYTBcdTZjYTJcdTZjYThcdTZjYWNcdTZjYWZcdTZjYjBcdTZjYjRcdTZjYjVcdTZjYjZcdTZjYjdcdTZj''@;'; put 'put ''YmFcdTZjYzBcdTZjYzFcdTZjYzJcdTZjYzNcdTZjYzZcdTZjYzdcdTZjYzhcdTZjY2JcdTZjY2RcdTZjY2VcdTZjY2ZcdTZjZDFcdTZjZDJcdTZjZDgiXSxbIjliODAiLCJcdTZjZDlcdTZjZGFcdTZjZGNcdTZjZGRcdTZjZGZcdTZjZTRcdTZjZTZcdTZjZTdcdTZjZTlcdTZjZWNcdTZjZWRc''@;'; put 'put ''dTZjZjJcdTZjZjRcdTZjZjlcdTZjZmZcdTZkMDBcdTZkMDJcdTZkMDNcdTZkMDVcdTZkMDZcdTZkMDhcdTZkMDlcdTZkMGFcdTZkMGRcdTZkMGZcdTZkMTBcdTZkMTFcdTZkMTNcdTZkMTRcdTZkMTVcdTZkMTZcdTZkMThcdTZkMWNcdTZkMWRcdTZkMWYiLDUsIlx1NmQyNlx1NmQyOFx1NmQy''@;'; put 'put ''OVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1''@;'; put 'put ''NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3YVx1NmQ3Ylx1NmQ3ZCIsNCwiXHU2ZDgzXHU2ZDg0XHU2ZDg2XHU2ZDg3XHU2ZDhhXHU2ZDhiXHU2ZDhkXHU2ZDhmXHU2ZDkwXHU2ZDkyXHU2ZDk2Iiw0LCJc''@;'; put 'put ''dTZkOWNcdTZkYTJcdTZkYTVcdTZkYWNcdTZkYWRcdTZkYjBcdTZkYjFcdTZkYjNcdTZkYjRcdTZkYjZcdTZkYjdcdTZkYjkiLDUsIlx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYSJdLFsiOWM0MCIsIlx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRk''@;'; put 'put ''NFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZCIsNywiXHU2ZTA2XHU2ZTA3XHU2ZTA4XHU2''@;'; put 'put ''ZTA5XHU2ZTBiXHU2ZTBmXHU2ZTEyXHU2ZTEzXHU2ZTE1XHU2ZTE4XHU2ZTE5XHU2ZTFiXHU2ZTFjXHU2ZTFlXHU2ZTFmXHU2ZTIyXHU2ZTI2XHU2ZTI3XHU2ZTI4XHU2ZTJhXHU2ZTJjXHU2ZTJlXHU2ZTMwXHU2ZTMxXHU2ZTMzXHU2ZTM1Il0sWyI5YzgwIiwiXHU2ZTM2XHU2ZTM3XHU2ZTM5''@;'; put 'put ''XHU2ZTNiIiw3LCJcdTZlNDUiLDcsIlx1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MCIsMTAsIlx1NmU2Y1x1NmU2ZFx1NmU2ZiIsMTQsIlx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4''@;'; put 'put ''YSIsNCwiXHU2ZTkxIiw2LCJcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVcdTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZlYTZcdTZlYThcdTZlYTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZlYjBcdTZlYjNcdTZlYjVcdTZlYjhcdTZlYjlcdTZlYmNcdTZlYmVcdTZlYmZcdTZl''@;'; put 'put ''YzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZlY2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJcdTZlZDZcdTZlZDhcdTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNcdTZlZTdcdTZlZWEiLDVdLFsiOWQ0MCIsIlx1NmVmMFx1NmVmMVx1NmVmMlx1NmVm''@;'; put 'put ''M1x1NmVmNVx1NmVmNlx1NmVmN1x1NmVmOFx1NmVmYSIsNywiXHU2ZjAzXHU2ZjA0XHU2ZjA1XHU2ZjA3XHU2ZjA4XHU2ZjBhIiw0LCJcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTYiLDksIlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYz''@;'; put 'put ''MFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzNyIsNiwiXHU2ZjNmXHU2ZjQwXHU2ZjQxXHU2ZjQyIl0sWyI5ZDgwIiwiXHU2ZjQzXHU2ZjQ0XHU2ZjQ1XHU2ZjQ4XHU2ZjQ5XHU2ZjRhXHU2ZjRjXHU2ZjRlIiw5LCJcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZm''@;'; put 'put ''NjNcdTZmNjRcdTZmNjVcdTZmNjciLDUsIlx1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1NmY3Ylx1NmY3ZCIsNiwiXHU2Zjg1XHU2Zjg2XHU2Zjg3XHU2ZjhhXHU2ZjhiXHU2ZjhmIiwxMiwiXHU2ZjlkXHU2ZjllXHU2ZjlmXHU2ZmEwXHU2ZmEyIiw0''@;'; put 'put ''LCJcdTZmYTgiLDEwLCJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZmYmEiLDUsIlx1NmZjMVx1NmZjMyIsNSwiXHU2ZmNhIiw2LCJcdTZmZDMiLDEwLCJcdTZmZGZcdTZmZTJcdTZmZTNcdTZmZTRcdTZmZTUiXSxbIjllNDAiLCJcdTZmZTYiLDcsIlx1NmZmMCIsMzIsIlx1NzAxMiIsNywi''@;'; put 'put ''XHU3MDFjIiw2LCJcdTcwMjQiLDZdLFsiOWU4MCIsIlx1NzAyYiIsOSwiXHU3MDM2XHU3MDM3XHU3MDM4XHU3MDNhIiwxNywiXHU3MDRkXHU3MDRlXHU3MDUwIiwxMywiXHU3MDVmIiwxMSwiXHU3MDZlXHU3MDcxXHU3MDcyXHU3MDczXHU3MDc0XHU3MDc3XHU3MDc5XHU3MDdhXHU3MDdiXHU3''@;'; put 'put ''MDdkXHU3MDgxXHU3MDgyXHU3MDgzXHU3MDg0XHU3MDg2XHU3MDg3XHU3MDg4XHU3MDhiXHU3MDhjXHU3MDhkXHU3MDhmXHU3MDkwXHU3MDkxXHU3MDkzXHU3MDk3XHU3MDk4XHU3MDlhXHU3MDliXHU3MDllIiwxMiwiXHU3MGIwXHU3MGIyXHU3MGI0XHU3MGI1XHU3MGI2XHU3MGJhXHU3MGJl''@;'; put 'put ''XHU3MGJmXHU3MGM0XHU3MGM1XHU3MGM2XHU3MGM3XHU3MGM5XHU3MGNiIiwxMiwiXHU3MGRhIl0sWyI5ZjQwIiwiXHU3MGRjXHU3MGRkXHU3MGRlXHU3MGUwXHU3MGUxXHU3MGUyXHU3MGUzXHU3MGU1XHU3MGVhXHU3MGVlXHU3MGYwIiw2LCJcdTcwZjhcdTcwZmFcdTcwZmJcdTcwZmNcdTcw''@;'; put 'put ''ZmUiLDEwLCJcdTcxMGIiLDQsIlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYiIsMTAsIlx1NzEyNyIsNywiXHU3MTMyXHU3MTMzXHU3MTM0Il0sWyI5ZjgwIiwiXHU3MTM1XHU3MTM3IiwxMywiXHU3MTQ2XHU3MTQ3XHU3MTQ4XHU3MTQ5XHU3MTRiXHU3MTRkXHU3MTRmIiwxMiwiXHU3''@;'; put 'put ''MTVkXHU3MTVmIiw0LCJcdTcxNjVcdTcxNjkiLDQsIlx1NzE2Zlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZSIsNSwiXHU3MTg1Iiw0LCJcdTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcxOTBcdTcxOTFcdTcxOTJcdTcxOTNcdTcx''@;'; put 'put ''OTVcdTcxOTZcdTcxOTdcdTcxOWEiLDQsIlx1NzFhMSIsNiwiXHU3MWE5XHU3MWFhXHU3MWFiXHU3MWFkIiw1LCJcdTcxYjRcdTcxYjZcdTcxYjdcdTcxYjhcdTcxYmEiLDgsIlx1NzFjNCIsOSwiXHU3MWNmIiw0XSxbImEwNDAiLCJcdTcxZDYiLDksIlx1NzFlMVx1NzFlMlx1NzFlM1x1NzFl''@;'; put 'put ''NFx1NzFlNlx1NzFlOCIsNSwiXHU3MWVmIiw5LCJcdTcxZmEiLDExLCJcdTcyMDciLDE5XSxbImEwODAiLCJcdTcyMWJcdTcyMWNcdTcyMWUiLDksIlx1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1NzIzMlx1NzIzM1x1NzIzNFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MCIsNiwiXHU3''@;'; put 'put ''MjQ5XHU3MjRhXHU3MjRiXHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUxXHU3MjUzXHU3MjU0XHU3MjU1XHU3MjU3XHU3MjU4XHU3MjVhXHU3MjVjXHU3MjVlXHU3MjYwXHU3MjYzXHU3MjY0XHU3MjY1XHU3MjY4XHU3MjZhXHU3MjZiXHU3MjZjXHU3MjZkXHU3MjcwXHU3MjcxXHU3MjczXHU3Mjc0''@;'; put 'put ''XHU3Mjc2XHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdkXHU3MjgyXHU3MjgzXHU3Mjg1Iiw0LCJcdTcyOGNcdTcyOGVcdTcyOTBcdTcyOTFcdTcyOTMiLDExLCJcdTcyYTAiLDExLCJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcyYmEiLDYsIlx1NzJjNVx1NzJjNlx1NzJj''@;'; put 'put ''N1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYiJdLFsiYTFhMSIsIlx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVmZjVlXHUyMDE2XHUyMDI2''@;'; put 'put ''XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4Iiw3LCJcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIz''@;'; put 'put ''MTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdc''@;'; put 'put ''dTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTMiXSxbImEyYTEiLCJcdTIxNzAiLDldLFsiYTJiMSIsIlx1MjQ4OCIsMTksIlx1MjQ3NCIsMTksIlx1''@;'; put 'put ''MjQ2MCIsOV0sWyJhMmU1IiwiXHUzMjIwIiw5XSxbImEyZjEiLCJcdTIxNjAiLDExXSxbImEzYTEiLCJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDUiLDg4LCJcdWZmZTMiXSxbImE0YTEiLCJcdTMwNDEiLDgyXSxbImE1YTEiLCJcdTMwYTEiLDg1XSxbImE2YTEiLCJcdTAzOTEiLDE2''@;'; put 'put ''LCJcdTAzYTMiLDZdLFsiYTZjMSIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyJhNmUwIiwiXHVmZTM1XHVmZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0Il0sWyJhNmVlIiwiXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVm''@;'; put 'put ''ZTMxIl0sWyJhNmY0IiwiXHVmZTMzXHVmZTM0Il0sWyJhN2ExIiwiXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbImE3ZDEiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYTg0MCIsIlx1MDJjYVx1MDJjYlx1MDJkOVx1MjAxM1x1MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1''@;'; put 'put ''MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1MjI1Mlx1MjI2Nlx1MjI2N1x1MjJiZlx1MjU1MCIsMzUsIlx1MjU4MSIsNl0sWyJhODgwIiwiXHUyNTg4Iiw3LCJcdTI1OTNcdTI1OTRcdTI1OTVcdTI1YmNcdTI1YmRcdTI1ZTJcdTI1ZTNcdTI1ZTRcdTI1''@;'; put 'put ''ZTVcdTI2MDlcdTIyOTVcdTMwMTJcdTMwMWRcdTMwMWUiXSxbImE4YTEiLCJcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUw''@;'; put 'put ''MWRjXHhmY1x4ZWFcdTAyNTEiXSxbImE4YmQiLCJcdTAxNDRcdTAxNDgiXSxbImE4YzAiLCJcdTAyNjEiXSxbImE4YzUiLCJcdTMxMDUiLDM2XSxbImE5NDAiLCJcdTMwMjEiLDgsIlx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1''@;'; put 'put ''MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNCJdLFsiYTk1OSIsIlx1MjEyMVx1MzIzMSJdLFsiYTk1YyIsIlx1MjAxMCJdLFsiYTk2MCIsIlx1MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OSIsOSwiXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3''@;'; put 'put ''XHVmZTU5Iiw4XSxbImE5ODAiLCJcdWZlNjIiLDQsIlx1ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2YiJdLFsiYTk5NiIsIlx1MzAwNyJdLFsiYTlhNCIsIlx1MjUwMCIsNzVdLFsiYWE0MCIsIlx1NzJkY1x1NzJkZFx1NzJkZlx1NzJlMiIsNSwiXHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2XHU3MmY5''@;'; put 'put ''XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0Iiw1LCJcdTczMGJcdTczMGNcdTczMGRcdTczMGZcdTczMTBcdTczMTFcdTczMTJcdTczMTRcdTczMThcdTczMTlcdTczMWFcdTczMWZcdTczMjBcdTczMjNcdTczMjRcdTczMjZcdTczMjdcdTczMjhcdTczMmRcdTczMmZcdTcz''@;'; put 'put ''MzBcdTczMzJcdTczMzNcdTczMzVcdTczMzZcdTczM2FcdTczM2JcdTczM2NcdTczM2RcdTczNDAiLDhdLFsiYWE4MCIsIlx1NzM0OVx1NzM0YVx1NzM0Ylx1NzM0Y1x1NzM0ZVx1NzM0Zlx1NzM1MVx1NzM1M1x1NzM1NFx1NzM1NVx1NzM1Nlx1NzM1OCIsNywiXHU3MzYxIiwxMCwiXHU3MzZl''@;'; put 'put ''XHU3MzcwXHU3MzcxIl0sWyJhYjQwIiwiXHU3MzcyIiwxMSwiXHU3MzdmIiw0LCJcdTczODVcdTczODZcdTczODhcdTczOGFcdTczOGNcdTczOGRcdTczOGZcdTczOTBcdTczOTJcdTczOTNcdTczOTRcdTczOTVcdTczOTdcdTczOThcdTczOTlcdTczOWFcdTczOWNcdTczOWRcdTczOWVcdTcz''@;'; put 'put ''YTBcdTczYTFcdTczYTMiLDUsIlx1NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNiNFx1NzNiNVx1NzNiNlx1NzNiOFx1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZVx1NzNiZlx1NzNjMVx1NzNjMyIsNF0sWyJhYjgwIiwiXHU3M2NiXHU3M2NjXHU3M2NlXHU3M2QyIiw2LCJcdTczZGFcdTczZGJc''@;'; put 'put ''dTczZGNcdTczZGRcdTczZGZcdTczZTFcdTczZTJcdTczZTNcdTczZTRcdTczZTZcdTczZThcdTczZWFcdTczZWJcdTczZWNcdTczZWVcdTczZWZcdTczZjBcdTczZjFcdTczZjMiLDRdLFsiYWM0MCIsIlx1NzNmOCIsMTAsIlx1NzQwNFx1NzQwN1x1NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1''@;'; put 'put ''NzQwZVx1NzQxMSIsOCwiXHU3NDFjIiw1LCJcdTc0MjNcdTc0MjRcdTc0MjdcdTc0MjlcdTc0MmJcdTc0MmRcdTc0MmZcdTc0MzFcdTc0MzJcdTc0MzciLDQsIlx1NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1NzQ0MiIsMTFdLFsiYWM4MCIsIlx1NzQ0ZSIsNiwiXHU3NDU2XHU3NDU4XHU3NDVk''@;'; put 'put ''XHU3NDYwIiwxMiwiXHU3NDZlXHU3NDZmXHU3NDcxIiw0LCJcdTc0NzhcdTc0NzlcdTc0N2EiXSxbImFkNDAiLCJcdTc0N2JcdTc0N2NcdTc0N2RcdTc0N2ZcdTc0ODJcdTc0ODRcdTc0ODVcdTc0ODZcdTc0ODhcdTc0ODlcdTc0OGFcdTc0OGNcdTc0OGRcdTc0OGZcdTc0OTEiLDEwLCJcdTc0''@;'; put 'put ''OWRcdTc0OWYiLDcsIlx1NzRhYSIsMTUsIlx1NzRiYiIsMTJdLFsiYWQ4MCIsIlx1NzRjOCIsOSwiXHU3NGQzIiw4LCJcdTc0ZGRcdTc0ZGZcdTc0ZTFcdTc0ZTVcdTc0ZTciLDYsIlx1NzRmMFx1NzRmMVx1NzRmMiJdLFsiYWU0MCIsIlx1NzRmM1x1NzRmNVx1NzRmOCIsNiwiXHU3NTAwXHU3''@;'; put 'put ''NTAxXHU3NTAyXHU3NTAzXHU3NTA1Iiw3LCJcdTc1MGVcdTc1MTBcdTc1MTJcdTc1MTRcdTc1MTVcdTc1MTZcdTc1MTdcdTc1MWJcdTc1MWRcdTc1MWVcdTc1MjAiLDQsIlx1NzUyNlx1NzUyN1x1NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1NzUzOVx1NzUzY1x1NzUzZFx1NzUzZlx1NzU0MVx1''@;'; put 'put ''NzU0Mlx1NzU0M1x1NzU0NFx1NzU0Nlx1NzU0N1x1NzU0OVx1NzU0YVx1NzU0ZFx1NzU1MFx1NzU1MVx1NzU1Mlx1NzU1M1x1NzU1NVx1NzU1Nlx1NzU1N1x1NzU1OCJdLFsiYWU4MCIsIlx1NzU1ZCIsNywiXHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiIiw2LCJcdTc1NzNcdTc1NzVcdTc1NzZc''@;'; put 'put ''dTc1NzdcdTc1N2EiLDQsIlx1NzU4MFx1NzU4MVx1NzU4Mlx1NzU4NFx1NzU4NVx1NzU4NyJdLFsiYWY0MCIsIlx1NzU4OFx1NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1NzVhMlx1NzVhNiIsNCwiXHU3NWFk''@;'; put 'put ''XHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3NWNlXHU3NWNmXHU3NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3''@;'; put 'put ''NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZkXHU3NWZlXHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3Il0sWyJhZjgwIiwiXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBmXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0''@;'; put 'put ''XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3NjJmXHU3NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0Il0sWyJiMDQwIiwiXHU3NjQ1Iiw2LCJcdTc2''@;'; put 'put ''NGUiLDUsIlx1NzY1NVx1NzY1NyIsNCwiXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0Iiw2LCJcdTc2NmNcdTc2NmRcdTc2NmVcdTc2NzAiLDcsIlx1NzY3OVx1NzY3YVx1NzY3Y1x1NzY3Zlx1NzY4MFx1NzY4MVx1NzY4M1x1NzY4NVx1NzY4OVx1NzY4YVx1NzY4Y1x1NzY4''@;'; put 'put ''ZFx1NzY4Zlx1NzY5MFx1NzY5Mlx1NzY5NFx1NzY5NVx1NzY5N1x1NzY5OFx1NzY5YVx1NzY5YiJdLFsiYjA4MCIsIlx1NzY5YyIsNywiXHU3NmE1Iiw4LCJcdTc2YWZcdTc2YjBcdTc2YjNcdTc2YjUiLDksIlx1NzZjMFx1NzZjMVx1NzZjM1x1NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRj''@;'; put 'put ''ZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1''@;'; put 'put ''NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQy''@;'; put 'put ''NVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1''@;'; put 'put ''NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NSJdLFsiYjE0MCIsIlx1NzZjNFx1NzZjN1x1NzZjOVx1NzZjYlx1NzZjY1x1NzZkM1x1NzZkNVx1NzZkOVx1NzZkYVx1NzZkY1x1NzZkZFx1NzZkZVx1NzZlMCIsNCwiXHU3NmU2Iiw3LCJcdTc2ZjBcdTc2ZjNcdTc2ZjVc''@;'; put 'put ''dTc2ZjZcdTc2ZjdcdTc2ZmFcdTc2ZmJcdTc2ZmRcdTc2ZmZcdTc3MDBcdTc3MDJcdTc3MDNcdTc3MDVcdTc3MDZcdTc3MGFcdTc3MGNcdTc3MGUiLDEwLCJcdTc3MWJcdTc3MWNcdTc3MWRcdTc3MWVcdTc3MjFcdTc3MjNcdTc3MjRcdTc3MjVcdTc3MjdcdTc3MmFcdTc3MmIiXSxbImIxODAi''@;'; put 'put ''LCJcdTc3MmNcdTc3MmVcdTc3MzAiLDQsIlx1NzczOVx1NzczYlx1NzczZFx1NzczZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1Nzc0Nlx1Nzc0OCIsNywiXHU3NzUyIiw3LCJcdTc3NWNcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThj''@;'; put 'put ''NzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhc''@;'; put 'put ''dTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThk''@;'; put 'put ''MmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5Yzlc''@;'; put 'put ''dTk5N2NcdTcwYjMiXSxbImIyNDAiLCJcdTc3NWRcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjRcdTc3NjdcdTc3NjlcdTc3NmFcdTc3NmQiLDExLCJcdTc3N2FcdTc3N2JcdTc3N2NcdTc3ODFcdTc3ODJcdTc3ODNcdTc3ODYiLDUsIlx1Nzc4Zlx1Nzc5MFx1Nzc5MyIsMTEsIlx1NzdhMVx1Nzdh''@;'; put 'put ''M1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiMlx1NzdiNFx1NzdiNiIsNF0sWyJiMjgwIiwiXHU3N2JjXHU3N2JlXHU3N2MwIiwxMiwiXHU3N2NlIiw4LCJcdTc3ZDhcdTc3ZDlcdTc3ZGFcdTc3ZGQiLDQsIlx1NzdlNFx1NzVjNVx1NWU3Nlx1''@;'; put 'put ''NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2Mz''@;'; put 'put ''Zlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1''@;'; put 'put ''N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0''@;'; put 'put ''OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNiJdLFsiYjM0MCIsIlx1NzdlNlx1NzdlOFx1NzdlYVx1NzdlZlx1NzdmMFx1NzdmMVx1NzdmMlx1NzdmNFx1NzdmNVx1NzdmN1x1NzdmOVx1NzdmYVx1NzdmYlx1NzdmY1x1NzgwMyIsNSwiXHU3''@;'; put 'put ''ODBhXHU3ODBiXHU3ODBlXHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQy''@;'; put 'put ''XHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhIl0sWyJiMzgwIiwiXHU3ODViXHU3ODVjXHU3ODVlIiwxMSwiXHU3ODZmIiw3LCJcdTc4NzhcdTc4NzlcdTc4N2FcdTc4N2JcdTc4''@;'; put 'put ''N2QiLDYsIlx1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1''@;'; put 'put ''OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMw''@;'; put 'put ''MVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1''@;'; put 'put ''Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YSJdLFsiYjQ0MCIsIlx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5''@;'; put 'put ''OVx1Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1NzhhNFx1NzhhNlx1NzhhOCIsNywiXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3''@;'; put 'put ''OGNmXHU3OGQxXHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhIiw5XSxbImI0ODAiLCJcdTc4ZTRcdTc4ZTVcdTc4ZTZcdTc4ZTdcdTc4ZTlcdTc4ZWFcdTc4ZWJcdTc4ZWQiLDQsIlx1NzhmM1x1NzhmNVx1NzhmNlx1NzhmOFx1NzhmOVx1NzhmYiIsNSwiXHU3OTAyXHU3OTAz''@;'; put 'put ''XHU3OTA0XHU3OTA2Iiw2LCJcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3''@;'; put 'put ''ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJc''@;'; put 'put ''dTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdi''@;'; put 'put ''NTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmUiXSxbImI1NDAiLCJcdTc5MGQiLDUsIlx1NzkxNCIsOSwiXHU3OTFmIiw0LCJcdTc5MjUiLDE0LCJcdTc5MzUiLDQsIlx1NzkzZFx1Nzkz''@;'; put 'put ''Zlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YSIsOCwiXHU3OTU0XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzIl0sWyJiNTgwIiwiXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwIiw2LCJcdTc5NzlcdTc5N2IiLDQsIlx1Nzk4''@;'; put 'put ''Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1''@;'; put 'put ''ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5''@;'; put 'put ''M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1''@;'; put 'put ''NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMCJdLFsiYjY0MCIsIlx1Nzk5MyIsNiwi''@;'; put 'put ''XHU3OTliIiwxMSwiXHU3OWE4IiwxMCwiXHU3OWI0Iiw0LCJcdTc5YmNcdTc5YmZcdTc5YzJcdTc5YzRcdTc5YzVcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2NcdTc5Y2VcdTc5Y2ZcdTc5ZDBcdTc5ZDNcdTc5ZDRcdTc5ZDZcdTc5ZDdcdTc5ZDkiLDUsIlx1NzllMFx1NzllMVx1NzllMlx1Nzll''@;'; put 'put ''NVx1NzllOFx1NzllYSJdLFsiYjY4MCIsIlx1NzllY1x1NzllZVx1NzlmMSIsNiwiXHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmIiw0LCJcdTdhMTVcdTdhMTZcdTdhMThcdTdhMTlcdTdh''@;'; put 'put ''MWJcdTdhMWNcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdc''@;'; put 'put ''dTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0''@;'; put 'put ''MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZc''@;'; put 'put ''dTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGMiXSxbImI3NDAiLCJcdTdhMWRcdTdhMWZcdTdhMjFcdTdhMjJcdTdhMjQiLDE0LCJcdTdhMzRcdTdhMzVcdTdhMzZcdTdhMzhcdTdhM2FcdTdhM2VcdTdh''@;'; put 'put ''NDAiLDUsIlx1N2E0NyIsOSwiXHU3YTUyIiw0LCJcdTdhNTgiLDE2XSxbImI3ODAiLCJcdTdhNjkiLDYsIlx1N2E3MVx1N2E3Mlx1N2E3M1x1N2E3NVx1N2E3Ylx1N2E3Y1x1N2E3ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4N1x1N2E4OVx1N2E4YVx1N2E4Ylx1N2E4Y1x1N2E4ZVx1N2E4Zlx1''@;'; put 'put ''N2E5MFx1N2E5M1x1N2E5NFx1N2E5OVx1N2E5YVx1N2E5Ylx1N2E5ZVx1N2FhMVx1N2FhMlx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBl''@;'; put 'put ''Nlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1''@;'; put 'put ''NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAy''@;'; put 'put ''Mlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZCJdLFsiYjg0MCIsIlx1N2FhM1x1N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1''@;'; put 'put ''N2FhYlx1N2FhZSIsNCwiXHU3YWI0IiwxMCwiXHU3YWMwIiwxMCwiXHU3YWNjIiw5LCJcdTdhZDdcdTdhZDhcdTdhZGFcdTdhZGJcdTdhZGNcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTRcdTdhZTciLDUsIlx1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1N2FmMyJdLFsiYjg4MCIsIlx1N2FmNCIs''@;'; put 'put ''NCwiXHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBjXHU3YjBkXHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3XHU3YjI5''@;'; put 'put ''XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1''@;'; put 'put ''YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEy''@;'; put 'put ''XHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4''@;'; put 'put ''NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5Il0sWyJiOTQwIiwiXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNmIiw1LCJcdTdiNDZc''@;'; put 'put ''dTdiNDhcdTdiNGFcdTdiNGRcdTdiNGVcdTdiNTNcdTdiNTVcdTdiNTdcdTdiNTlcdTdiNWNcdTdiNWVcdTdiNWZcdTdiNjFcdTdiNjMiLDEwLCJcdTdiNmZcdTdiNzBcdTdiNzNcdTdiNzRcdTdiNzZcdTdiNzhcdTdiN2FcdTdiN2NcdTdiN2RcdTdiN2ZcdTdiODFcdTdiODJcdTdiODNcdTdi''@;'; put 'put ''ODRcdTdiODYiLDYsIlx1N2I4ZVx1N2I4ZiJdLFsiYjk4MCIsIlx1N2I5MVx1N2I5Mlx1N2I5M1x1N2I5Nlx1N2I5OFx1N2I5OVx1N2I5YVx1N2I5Ylx1N2I5ZVx1N2I5Zlx1N2JhMFx1N2JhM1x1N2JhNFx1N2JhNVx1N2JhZVx1N2JhZlx1N2JiMFx1N2JiMlx1N2JiM1x1N2JiNVx1N2JiNlx1''@;'; put 'put ''N2JiN1x1N2JiOSIsNywiXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRm''@;'; put 'put ''XHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2''@;'; put 'put ''MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNj''@;'; put 'put ''XHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4Il0sWyJiYTQwIiwiXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3''@;'; put 'put ''YmQwXHU3YmQyXHU3YmQ0Iiw0LCJcdTdiZGJcdTdiZGNcdTdiZGVcdTdiZGZcdTdiZTBcdTdiZTJcdTdiZTNcdTdiZTRcdTdiZTdcdTdiZThcdTdiZTlcdTdiZWJcdTdiZWNcdTdiZWRcdTdiZWZcdTdiZjBcdTdiZjIiLDQsIlx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmYlx1N2JmZFx1N2JmZiIs''@;'; put 'put ''NywiXHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwIiw1LCJcdTdjMTdcdTdjMThcdTdjMTkiXSxbImJhODAiLCJcdTdjMWEiLDQsIlx1N2MyMCIsNSwiXHU3YzI4XHU3YzI5XHU3YzJiIiwxMiwiXHU3YzM5Iiw1LCJcdTdjNDJcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRl''@;'; put 'put ''YTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFc''@;'; put 'put ''dTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVm''@;'; put 'put ''ODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFc''@;'; put 'put ''dTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTYiXSxbImJiNDAiLCJcdTdjNDMiLDksIlx1N2M0ZSIsMzYsIlx1N2M3NSIsNSwiXHU3YzdlIiw5XSxbImJiODAiLCJcdTdjODhcdTdjOGEiLDYsIlx1N2M5M1x1N2M5NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2Nh''@;'; put 'put ''MFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNCIsNCwiXHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3''@;'; put 'put ''NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3''@;'; put 'put ''XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4''@;'; put 'put ''YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1Il0sWyJi''@;'; put 'put ''YzQwIiwiXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlIiw2LCJcdTdjZDhcdTdjZGFcdTdjZGJcdTdjZGRcdTdjZGVcdTdjZTEiLDYsIlx1N2NlOSIsNSwiXHU3Y2YwIiw3LCJcdTdjZjlcdTdjZmFcdTdjZmMiLDEzLCJcdTdkMGIiLDVdLFsi''@;'; put 'put ''YmM4MCIsIlx1N2QxMSIsMTQsIlx1N2QyMVx1N2QyM1x1N2QyNFx1N2QyNVx1N2QyNlx1N2QyOFx1N2QyOVx1N2QyYVx1N2QyY1x1N2QyZFx1N2QyZVx1N2QzMCIsNiwiXHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2''@;'; put 'put ''OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIw''@;'; put 'put ''XHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3''@;'; put 'put ''YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2''@;'; put 'put ''Il0sWyJiZDQwIiwiXHU3ZDM3Iiw1NCwiXHU3ZDZmIiw3XSxbImJkODAiLCJcdTdkNzgiLDMyLCJcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJc''@;'; put 'put ''dTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThm''@;'; put 'put ''N2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2Jc''@;'; put 'put ''dTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzgiXSxbImJlNDAiLCJcdTdkOTkiLDEyLCJcdTdkYTciLDYsIlx1N2Rh''@;'; put 'put ''ZiIsNDJdLFsiYmU4MCIsIlx1N2RkYSIsMzIsIlx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVj''@;'; put 'put ''OVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1''@;'; put 'put ''NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2Vl''@;'; put 'put ''Mlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYiJdLFsiYmY0MCIsIlx1N2RmYiIsNjJdLFsiYmY4MCIsIlx1N2UzYVx1N2UzYyIsNCwiXHU3ZTQyIiw0LCJcdTdlNDgi''@;'; put 'put ''LDIxLCJcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcw''@;'; put 'put ''OTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBc''@;'; put 'put ''dTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4''@;'; put 'put ''NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODAiXSxbImMwNDAiLCJcdTdlNWUiLDM1LCJcdTdlODMiLDIzLCJcdTdlOWNcdTdlOWRcdTdlOWUiXSxbImMwODAiLCJcdTdlYWVcdTdlYjRcdTdlYmJcdTdlYmNc''@;'; put 'put ''dTdlZDZcdTdlZTRcdTdlZWNcdTdlZjlcdTdmMGFcdTdmMTBcdTdmMWVcdTdmMzdcdTdmMzlcdTdmM2IiLDYsIlx1N2Y0M1x1N2Y0NiIsOSwiXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1Nzgz''@;'; put 'put ''XHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1''@;'; put 'put ''ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVl''@;'; put 'put ''XHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwIl0s''@;'; put 'put ''WyJjMTQwIiwiXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVlXHU3ZjYwXHU3ZjYzIiw0LCJcdTdmNmJcdTdmNmNcdTdmNmRcdTdmNmZcdTdmNzBcdTdmNzNcdTdmNzVcdTdmNzZcdTdmNzdcdTdmNzhcdTdmN2FcdTdmN2JcdTdmN2NcdTdmN2RcdTdmN2ZcdTdmODBcdTdmODIi''@;'; put 'put ''LDcsIlx1N2Y4Ylx1N2Y4ZFx1N2Y4ZiIsNCwiXHU3Zjk1Iiw0LCJcdTdmOWJcdTdmOWNcdTdmYTBcdTdmYTJcdTdmYTNcdTdmYTVcdTdmYTZcdTdmYTgiLDYsIlx1N2ZiMSJdLFsiYzE4MCIsIlx1N2ZiMyIsNCwiXHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3''@;'; put 'put ''ZmM2XHU3ZmM3XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmIiw0LCJcdTdmZDZcdTdmZDdcdTdmZDkiLDUsIlx1N2ZlMlx1N2ZlM1x1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1''@;'; put 'put ''NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2''@;'; put 'put ''Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1''@;'; put 'put ''NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZiJdLFsiYzI0MCIsIlx1N2Zl''@;'; put 'put ''NFx1N2ZlN1x1N2ZlOFx1N2ZlYVx1N2ZlYlx1N2ZlY1x1N2ZlZFx1N2ZlZlx1N2ZmMlx1N2ZmNCIsNiwiXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4''@;'; put 'put ''MDIxXHU4MDIzXHU4MDI0XHU4MDJiIiw1LCJcdTgwMzJcdTgwMzRcdTgwMzlcdTgwM2FcdTgwM2NcdTgwM2VcdTgwNDBcdTgwNDFcdTgwNDRcdTgwNDVcdTgwNDdcdTgwNDhcdTgwNDlcdTgwNGVcdTgwNGZcdTgwNTBcdTgwNTFcdTgwNTNcdTgwNTVcdTgwNTZcdTgwNTciXSxbImMyODAiLCJc''@;'; put 'put ''dTgwNTlcdTgwNWIiLDEzLCJcdTgwNmIiLDUsIlx1ODA3MiIsMTEsIlx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4''@;'; put 'put ''Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1''@;'; put 'put ''NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4''@;'; put 'put ''Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYiJdLFsiYzM0MCIsIlx1ODA3ZVx1ODA4MVx1ODA4Mlx1ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZCIs''@;'; put 'put ''NSwiXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3Iiw0LCJcdTgwY2YiLDYsIlx1ODBkOFx1ODBkZlx1ODBlMFx1ODBlMlx1ODBlM1x1''@;'; put 'put ''ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1ODBmOVx1ODBmYlx1ODBmZVx1ODBmZlx1ODEwMFx1ODEwMVx1ODEwM1x1ODEwNFx1ODEwNVx1ODEwN1x1ODEwOFx1ODEwYiJdLFsiYzM4MCIsIlx1ODEwY1x1ODExNVx1ODExN1x1ODExOVx1ODExYlx1ODExY1x1ODExZFx1ODExZiIsMTIsIlx1ODEy''@;'; put 'put ''ZFx1ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1ODEzN1x1ODEzOSIsNCwiXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4''@;'; put 'put ''ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2''@;'; put 'put ''XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4''@;'; put 'put ''NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4Il0sWyJjNDQwIiwiXHU4MTQwIiw1LCJcdTgxNDdcdTgxNDlcdTgxNGRc''@;'; put 'put ''dTgxNGVcdTgxNGZcdTgxNTJcdTgxNTZcdTgxNTdcdTgxNThcdTgxNWIiLDQsIlx1ODE2MVx1ODE2Mlx1ODE2M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3OFx1ODE4MVx1ODE4MyIsNCwiXHU4MTg5''@;'; put 'put ''XHU4MThiXHU4MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyIiw1LCJcdTgxOTlcdTgxOWFcdTgxOWUiLDQsIlx1ODFhNFx1ODFhNSJdLFsiYzQ4MCIsIlx1ODFhN1x1ODFhOVx1ODFhYiIsNywiXHU4MWI0Iiw1LCJcdTgxYmNcdTgxYmRcdTgxYmVcdTgxYmZcdTgxYzRcdTgxYzVcdTgxYzdc''@;'; put 'put ''dTgxYzhcdTgxYzlcdTgxY2JcdTgxY2QiLDYsIlx1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTlj''@;'; put 'put ''Nlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1''@;'; put 'put ''NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZm''@;'; put 'put ''NVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MSJdLFsiYzU0MCIsIlx1ODFkNCIsMTQsIlx1ODFlNFx1ODFlNVx1ODFlNlx1ODFlOFx1ODFlOVx1ODFlYlx1ODFlZSIs''@;'; put 'put ''NCwiXHU4MWY1Iiw1LCJcdTgxZmRcdTgxZmZcdTgyMDNcdTgyMDciLDQsIlx1ODIwZVx1ODIwZlx1ODIxMVx1ODIxM1x1ODIxNSIsNSwiXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmIl0sWyJjNTgw''@;'; put 'put ''IiwiXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwIiw3LCJcdTgyNTlcdTgyNWJcdTgyNWNcdTgyNWRcdTgyNWVcdTgyNjAiLDcsIlx1ODI2OVx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1''@;'; put 'put ''ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAx''@;'; put 'put ''NVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1''@;'; put 'put ''NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTcz''@;'; put 'put ''OVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkNyJdLFsiYzY0MCIsIlx1ODI2YVx1ODI2Ylx1ODI2Y1x1ODI2ZFx1ODI3MVx1ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4OVx1ODI4Y1x1ODI5MFx1''@;'; put 'put ''ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1ODJhMlx1ODJhM1x1ODJhN1x1ODJiMlx1ODJiNVx1ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJjMlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJjOVx1ODJkMFx1ODJkNlx1ODJkOVx1ODJk''@;'; put 'put ''YVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJlOFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJlZFx1ODJlZVx1ODJmMFx1ODJmMlx1ODJmM1x1ODJmNVx1ODJmNlx1ODJmOCJdLFsiYzY4MCIsIlx1ODJmYVx1ODJmYyIsNCwiXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4''@;'; put 'put ''MzE4XHU4MzE5XHU4MzFkIiw5LCJcdTgzMjlcdTgzMmFcdTgzMmVcdTgzMzBcdTgzMzJcdTgzMzdcdTgzM2JcdTgzM2RcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJc''@;'; put 'put ''dTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0''@;'; put 'put ''ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdc''@;'; put 'put ''dTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTAiXSxbImM3NDAiLCJcdTgzM2VcdTgzM2ZcdTgz''@;'; put 'put ''NDFcdTgzNDJcdTgzNDRcdTgzNDVcdTgzNDhcdTgzNGEiLDQsIlx1ODM1M1x1ODM1NSIsNCwiXHU4MzVkXHU4MzYyXHU4MzcwIiw2LCJcdTgzNzlcdTgzN2FcdTgzN2UiLDYsIlx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5''@;'; put 'put ''NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMSIsNiwiXHU4M2FjXHU4M2FkXHU4M2FlIl0sWyJjNzgwIiwiXHU4M2FmXHU4M2I1XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4M2M5XHU4M2NiXHU4M2NkXHU4M2NlXHU4''@;'; put 'put ''M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4M2U3XHU4M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3Yjdl''@;'; put 'put ''XHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2''@;'; put 'put ''ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUy''@;'; put 'put ''XHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1''@;'; put 'put ''YzQ4XHU5YTcxXHU2ZTIwIl0sWyJjODQwIiwiXHU4M2VlXHU4M2VmXHU4M2YzIiw0LCJcdTgzZmFcdTgzZmJcdTgzZmNcdTgzZmVcdTgzZmZcdTg0MDBcdTg0MDJcdTg0MDVcdTg0MDdcdTg0MDhcdTg0MDlcdTg0MGFcdTg0MTBcdTg0MTIiLDUsIlx1ODQxOVx1ODQxYVx1ODQxYlx1ODQxZSIs''@;'; put 'put ''NSwiXHU4NDI5Iiw3LCJcdTg0MzIiLDUsIlx1ODQzOVx1ODQzYVx1ODQzYlx1ODQzZSIsNywiXHU4NDQ3XHU4NDQ4XHU4NDQ5Il0sWyJjODgwIiwiXHU4NDRhIiw2LCJcdTg0NTIiLDQsIlx1ODQ1OFx1ODQ1ZFx1ODQ1ZVx1ODQ1Zlx1ODQ2MFx1ODQ2Mlx1ODQ2NCIsNCwiXHU4NDZhXHU4NDZl''@;'; put 'put ''XHU4NDZmXHU4NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1''@;'; put 'put ''Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0''@;'; put 'put ''XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1''@;'; put 'put ''MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxIl0sWyJjOTQwIiwiXHU4NDdkIiw0LCJcdTg0ODNcdTg0ODRcdTg0ODVcdTg0ODZc''@;'; put 'put ''dTg0OGFcdTg0OGRcdTg0OGYiLDcsIlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1ODQ5ZVx1ODQ5Zlx1ODRhMFx1ODRhMiIsMTIsIlx1ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRiYlx1ODRiY1x1ODRiZVx1ODRjMFx1ODRjMlx1ODRjM1x1ODRjNVx1ODRjNlx1ODRj''@;'; put 'put ''N1x1ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRkNFx1ODRkNVx1ODRkNyJdLFsiYzk4MCIsIlx1ODRkOCIsNCwiXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3Iiw0LCJcdTg0ZWRcdTg0ZWVcdTg0ZWZcdTg0ZjEiLDEwLCJcdTg0ZmRcdTg0ZmVcdTg1MDBcdTg1''@;'; put 'put ''MDFcdTg1MDJcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2Fc''@;'; put 'put ''dTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgy''@;'; put 'put ''OGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVc''@;'; put 'put ''dTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjMiXSxbImNhNDAiLCJcdTg1MDMiLDgsIlx1ODUwZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUxNVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUx''@;'; put 'put ''Ylx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1ODUyMiIsOCwiXHU4NTJkIiw5LCJcdTg1M2UiLDQsIlx1ODU0NFx1ODU0NVx1ODU0Nlx1ODU0N1x1ODU0YiIsMTBdLFsiY2E4MCIsIlx1ODU1N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1ODU1ZiIsNCwiXHU4NTY1XHU4NTY2XHU4''@;'; put 'put ''NTY3XHU4NTY5Iiw4LCJcdTg1NzNcdTg1NzVcdTg1NzZcdTg1NzdcdTg1NzhcdTg1N2NcdTg1N2RcdTg1N2ZcdTg1ODBcdTg1ODFcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNc''@;'; put 'put ''dTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRl''@;'; put 'put ''ZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJc''@;'; put 'put ''dTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzEiXSxbImNiNDAiLCJcdTg1ODJcdTg1''@;'; put 'put ''ODNcdTg1ODZcdTg1ODgiLDYsIlx1ODU5MCIsMTAsIlx1ODU5ZCIsNiwiXHU4NWE1XHU4NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxIiw1LCJcdTg1YjhcdTg1YmEiLDYsIlx1ODVjMiIsNiwiXHU4NWNhIiw0LCJcdTg1ZDFcdTg1ZDIiXSxbImNiODAiLCJcdTg1ZDRc''@;'; put 'put ''dTg1ZDYiLDUsIlx1ODVkZCIsNiwiXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhIiwxNCwiXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2Fj''@;'; put 'put ''XHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1''@;'; put 'put ''YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhl''@;'; put 'put ''XHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0Il0sWyJjYzQwIiwiXHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4''@;'; put 'put ''NWZlXHU4NjAwIiw0LCJcdTg2MDYiLDEwLCJcdTg2MTJcdTg2MTNcdTg2MTRcdTg2MTVcdTg2MTciLDE1LCJcdTg2MjhcdTg2MmEiLDEzLCJcdTg2MzlcdTg2M2FcdTg2M2JcdTg2M2RcdTg2M2VcdTg2M2ZcdTg2NDAiXSxbImNjODAiLCJcdTg2NDEiLDExLCJcdTg2NTJcdTg2NTNcdTg2NTUi''@;'; put 'put ''LDQsIlx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1ODY2MFx1ODY2MVx1ODY2MyIsNywiXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzVi''@;'; put 'put ''XHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2''@;'; put 'put ''ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQz''@;'; put 'put ''XHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzIl0sWyJjZDQwIiwiXHU4NjZkXHU4NjZmXHU4NjcwXHU4NjcyIiw2LCJcdTg2''@;'; put 'put ''ODMiLDYsIlx1ODY4ZSIsNCwiXHU4Njk0XHU4Njk2Iiw1LCJcdTg2OWUiLDQsIlx1ODZhNVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYiIsNCwiXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1XHU4NmM4XHU4NmNjXHU4NmNkXHU4NmQy''@;'; put 'put ''XHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRhXHU4NmRjIl0sWyJjZDgwIiwiXHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4NmZhXHU4NmZiXHU4NmZjXHU4''@;'; put 'put ''NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0''@;'; put 'put ''XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4''@;'; put 'put ''OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdl''@;'; put 'put ''XHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxIl0sWyJjZTQwIiwiXHU4''@;'; put 'put ''NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzQwIiw2LCJcdTg3NGFcdTg3NGJc''@;'; put 'put ''dTg3NGRcdTg3NGZcdTg3NTBcdTg3NTFcdTg3NTJcdTg3NTRcdTg3NTVcdTg3NTZcdTg3NThcdTg3NWEiLDUsIlx1ODc2MVx1ODc2Mlx1ODc2NiIsNywiXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1Il0sWyJjZTgwIiwiXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4Nzgw''@;'; put 'put ''XHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlIiw0LCJcdTg3OTRcdTg3OTVcdTg3OTZcdTg3OTgiLDYsIlx1ODdhMCIsNCwiXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0''@;'; put 'put ''XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3''@;'; put 'put ''YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNi''@;'; put 'put ''XHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhIl0s''@;'; put 'put ''WyJjZjQwIiwiXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxIiw0LCJcdTg3YzdcdTg3YzhcdTg3YzlcdTg3Y2MiLDQsIlx1ODdkNCIs''@;'; put 'put ''NiwiXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmIiw5XSxbImNmODAiLCJcdTg3ZmFcdTg3ZmJcdTg3ZmNcdTg3ZmRcdTg3ZmZcdTg4MDBcdTg4MDFcdTg4MDJcdTg4''@;'; put 'put ''MDQiLDUsIlx1ODgwYiIsNywiXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjIiw0LCJcdTg4MjNcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVh''@;'; put 'put ''YjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0Yjhc''@;'; put 'put ''dThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdm''@;'; put 'put ''ZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTMiXSxbImQwNDAiLCJcdTg4MjQiLDEzLCJcdTg4MzMi''@;'; put 'put ''LDUsIlx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1ODg0MVx1ODg0Mlx1ODg0M1x1ODg0NiIsNSwiXHU4ODRlIiw1LCJcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWEiLDYsIlx1ODg2Nlx1ODg2N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1''@;'; put 'put ''ODg3OFx1ODg3OVx1ODg3YSJdLFsiZDA4MCIsIlx1ODg3Ylx1ODg3Y1x1ODg4MFx1ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1ODg5NyIsNCwiXHU4ODlkIiw0LCJcdTg4YTNcdTg4YTUiLDUsIlx1''@;'; put 'put ''NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1''@;'; put 'put ''MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1''@;'; put 'put ''ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1''@;'; put 'put ''Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NCJdLFsiZDE0MCIsIlx1ODhhY1x1ODhhZVx1ODhhZlx1ODhiMFx1ODhiMiIsNCwiXHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4''@;'; put 'put ''OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhIiw0LCJcdTg4ZTBcdTg4ZTFcdTg4ZTZcdTg4ZTdcdTg4ZTkiLDYsIlx1ODhmMlx1ODhmNVx1ODhmNlx1ODhmN1x1ODhmYVx1ODhmYlx1''@;'; put 'put ''ODhmZFx1ODhmZlx1ODkwMFx1ODkwMVx1ODkwMyIsNV0sWyJkMTgwIiwiXHU4OTA5XHU4OTBiIiw0LCJcdTg5MTFcdTg5MTQiLDQsIlx1ODkxYyIsNCwiXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMy''@;'; put 'put ''XHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1''@;'; put 'put ''MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAw''@;'; put 'put ''XHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0''@;'; put 'put ''ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2Il0sWyJkMjQwIiwiXHU4OTM4Iiw4LCJcdTg5NDJcdTg5NDNcdTg5NDUiLDI0LCJcdTg5NjAiLDUsIlx1ODk2NyIsMTksIlx1ODk3YyJd''@;'; put 'put ''LFsiZDI4MCIsIlx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1ODk4NyIsMjYsIlx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1''@;'; put 'put ''Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1''@;'; put 'put ''NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJh''@;'; put 'put ''ZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MCJdLFsiZDM0MCIsIlx1ODlhMiIsMzAsIlx1ODljM1x1ODljZFx1''@;'; put 'put ''ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODllNFx1ODllN1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlmNCIsNl0sWyJkMzgwIiwiXHU4OWZiIiw0''@;'; put 'put ''LCJcdThhMDEiLDUsIlx1OGEwOCIsMjEsIlx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1''@;'; put 'put ''NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1''@;'; put 'put ''MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1''@;'; put 'put ''OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OSJdLFsiZDQ0MCIsIlx1OGExZSIsMzEsIlx1OGEzZiIsOCwiXHU4YTQ5IiwyMV0sWyJkNDgwIiwiXHU4YTVmIiwyNSwiXHU4''@;'; put 'put ''YTdhIiw2LCJcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJc''@;'; put 'put ''dTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcw''@;'; put 'put ''N2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlc''@;'; put 'put ''dTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjciXSxbImQ1NDAiLCJcdThhODEiLDcsIlx1OGE4YiIsNywiXHU4YTk0Iiw0Nl0sWyJkNTgwIiwiXHU4YWMzIiwzMiwiXHU5NGUxXHU5NWY4XHU3NzI4XHU2''@;'; put 'put ''ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTVi''@;'; put 'put ''XHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2''@;'; put 'put ''Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQx''@;'; put 'put ''XHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmIl0sWyJkNjQwIiwiXHU4YWU0IiwzNCwiXHU4YjA4IiwyN10sWyJkNjgwIiwiXHU4YjI0XHU4YjI1XHU4YjI3IiwzMCwiXHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMx''@;'; put 'put ''XHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1''@;'; put 'put ''ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNj''@;'; put 'put ''XHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4''@;'; put 'put ''NmMwXHU4ZDJlXHU5NGY4XHU3YjUxIl0sWyJkNzQwIiwiXHU4YjQ2IiwzMSwiXHU4YjY3Iiw0LCJcdThiNmQiLDI1XSxbImQ3ODAiLCJcdThiODciLDI0LCJcdThiYWNcdThiYjFcdThiYmJcdThiYzdcdThiZDBcdThiZWFcdThjMDlcdThjMWVcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYy''@;'; put 'put ''OTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNc''@;'; put 'put ''dTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYw''@;'; put 'put ''M2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNc''@;'; put 'put ''dTU3NTBcdTVlYTciXSxbImQ4NDAiLCJcdThjMzgiLDgsIlx1OGM0Mlx1OGM0M1x1OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0Ylx1OGM0ZCIsNywiXHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViIiw1LCJcdThjNjMiLDYsIlx1OGM2YyIsNiwiXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4''@;'; put 'put ''Yzc3XHU4YzdiIiw2LCJcdThjODNcdThjODRcdThjODZcdThjODciXSxbImQ4ODAiLCJcdThjODhcdThjOGJcdThjOGQiLDYsIlx1OGM5NVx1OGM5Nlx1OGM5N1x1OGM5OSIsMjAsIlx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1''@;'; put 'put ''NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVj''@;'; put 'put ''NFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1''@;'; put 'put ''NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1''@;'; put 'put ''YVx1NGY1ZCJdLFsiZDk0MCIsIlx1OGNhZSIsNjJdLFsiZDk4MCIsIlx1OGNlZCIsMzIsIlx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZl''@;'; put 'put ''YVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1''@;'; put 'put ''NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEw''@;'; put 'put ''N1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiYyJdLFsiZGE0MCIsIlx1OGQwZSIsMTQsIlx1OGQyMFx1OGQ1MVx1OGQ1Mlx1''@;'; put 'put ''OGQ1N1x1OGQ1Zlx1OGQ2NVx1OGQ2OFx1OGQ2OVx1OGQ2YVx1OGQ2Y1x1OGQ2ZVx1OGQ2Zlx1OGQ3MVx1OGQ3Mlx1OGQ3OCIsOCwiXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjIiw0LCJcdThkOTJcdThkOTNcdThkOTUiLDksIlx1OGRhMFx1OGRhMSJdLFsiZGE4''@;'; put 'put ''MCIsIlx1OGRhMlx1OGRhNCIsMTIsIlx1OGRiMlx1OGRiNlx1OGRiN1x1OGRiOVx1OGRiYlx1OGRiZFx1OGRjMFx1OGRjMVx1OGRjMlx1OGRjNVx1OGRjN1x1OGRjOFx1OGRjOVx1OGRjYVx1OGRjZFx1OGRkMFx1OGRkMlx1OGRkM1x1OGRkNFx1NTFjN1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJh''@;'; put 'put ''MFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1''@;'; put 'put ''OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMz''@;'; put 'put ''Mlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1''@;'; put 'put ''OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYSJdLFsiZGI0MCIsIlx1OGRkNVx1OGRkOFx1OGRkOVx1OGRkY1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRlN1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRmMVx1OGRmMlx1OGRmNFx1OGRmNlx1OGRm''@;'; put 'put ''Y1x1OGRmZSIsNiwiXHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1Iiw3LCJcdThlMjBcdThlMjFcdThlMjQiLDQsIlx1OGUyYlx1OGUyZFx1OGUzMFx1OGUzMlx1OGUzM1x1OGUzNFx1OGUzNlx1OGUzN1x1OGUzOFx1OGUz''@;'; put 'put ''Ylx1OGUzY1x1OGUzZSJdLFsiZGI4MCIsIlx1OGUzZlx1OGU0M1x1OGU0NVx1OGU0Nlx1OGU0YyIsNCwiXHU4ZTUzIiw1LCJcdThlNWEiLDExLCJcdThlNjdcdThlNjhcdThlNmFcdThlNmJcdThlNmVcdThlNzFcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkw''@;'; put 'put ''YzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZc''@;'; put 'put ''dTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3''@;'; put 'put ''M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRc''@;'; put 'put ''dTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGQiXSxbImRjNDAiLCJcdThlNzNcdThlNzVcdThlNzciLDQsIlx1OGU3ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4Nlx1OGU4OCIsNiwiXHU4ZTkxXHU4ZTkyXHU4ZTkzXHU4ZTk1Iiw2LCJcdThlOWRcdThlOWYiLDExLCJcdThlYWRc''@;'; put 'put ''dThlYWVcdThlYjBcdThlYjFcdThlYjMiLDYsIlx1OGViYiIsN10sWyJkYzgwIiwiXHU4ZWMzIiwxMCwiXHU4ZWNmIiwyMSwiXHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5''@;'; put 'put ''OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5''@;'; put 'put ''XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4''@;'; put 'put ''MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1Il0sWyJkZDQwIiwiXHU4ZWU1Iiw2Ml0s''@;'; put 'put ''WyJkZDgwIiwiXHU4ZjI0IiwzMiwiXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4Mzll''@;'; put 'put ''XHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4''@;'; put 'put ''M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJm''@;'; put 'put ''XHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhIl0sWyJkZTQwIiwiXHU4ZjQ1IiwzMiwiXHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4''@;'; put 'put ''ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2Il0sWyJkZTgwIiwiXHU4ZmM5Iiw0LCJcdThmY2ZcdThmZDJc''@;'; put 'put ''dThmZDZcdThmZDdcdThmZGFcdThmZTBcdThmZTFcdThmZTNcdThmZTdcdThmZWNcdThmZWZcdThmZjFcdThmZjJcdThmZjRcdThmZjVcdThmZjZcdThmZmFcdThmZmJcdThmZmNcdThmZmVcdThmZmZcdTkwMDdcdTkwMDhcdTkwMGNcdTkwMGVcdTkwMTNcdTkwMTVcdTkwMThcdTg1NTZcdTg1''@;'; put 'put ''M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZc''@;'; put 'put ''dTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYy''@;'; put 'put ''ZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFc''@;'; put 'put ''dTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTYiXSxbImRmNDAiLCJcdTkwMTlcdTkwMWNcdTkwMjNcdTkwMjRcdTkwMjVcdTkwMjciLDUsIlx1OTAzMCIsNCwiXHU5MDM3XHU5MDM5XHU5MDNhXHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQz''@;'; put 'put ''XHU5MDQ1XHU5MDQ2XHU5MDQ4Iiw0LCJcdTkwNGVcdTkwNTRcdTkwNTVcdTkwNTZcdTkwNTlcdTkwNWFcdTkwNWMiLDUsIlx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2ZiIsNCwiXHU5MDc2Iiw2LCJcdTkwN2VcdTkwODEiXSxbImRmODAiLCJcdTkwODRc''@;'; put 'put ''dTkwODVcdTkwODZcdTkwODdcdTkwODlcdTkwOGFcdTkwOGMiLDQsIlx1OTA5Mlx1OTA5NFx1OTA5Nlx1OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBhYlx1OTBhZFx1OTBiMlx1OTBiN1x1OTBiY1x1OTBiZFx1OTBi''@;'; put 'put ''Zlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1''@;'; put 'put ''NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRh''@;'; put 'put ''N1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1''@;'; put 'put ''NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzYyJdLFsiZTA0MCIsIlx1OTBjMlx1OTBjM1x1OTBjNlx1OTBjOFx1OTBjOVx1OTBjYlx1OTBjY1x1OTBjZFx1OTBkMlx1OTBkNFx1OTBkNVx1OTBkNlx1OTBk''@;'; put 'put ''OFx1OTBkOVx1OTBkYVx1OTBkZVx1OTBkZlx1OTBlMFx1OTBlM1x1OTBlNFx1OTBlNVx1OTBlOVx1OTBlYVx1OTBlY1x1OTBlZVx1OTBmMFx1OTBmMVx1OTBmMlx1OTBmM1x1OTBmNVx1OTBmNlx1OTBmN1x1OTBmOVx1OTBmYVx1OTBmYlx1OTBmY1x1OTBmZlx1OTEwMFx1OTEwMVx1OTEwM1x1''@;'; put 'put ''OTEwNSIsMTksIlx1OTExYVx1OTExYlx1OTExYyJdLFsiZTA4MCIsIlx1OTExZFx1OTExZlx1OTEyMFx1OTEyMVx1OTEyNCIsMTAsIlx1OTEzMFx1OTEzMiIsNiwiXHU5MTNhIiw4LCJcdTkxNDRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJc''@;'; put 'put ''dTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1''@;'; put 'put ''ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNc''@;'; put 'put ''dTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVl''@;'; put 'put ''MzFcdTVlM2JcdTVlM2MiXSxbImUxNDAiLCJcdTkxNDVcdTkxNDdcdTkxNDhcdTkxNTFcdTkxNTNcdTkxNTRcdTkxNTVcdTkxNTZcdTkxNThcdTkxNTlcdTkxNWJcdTkxNWNcdTkxNWZcdTkxNjBcdTkxNjZcdTkxNjdcdTkxNjhcdTkxNmJcdTkxNmRcdTkxNzNcdTkxN2FcdTkxN2JcdTkxN2Nc''@;'; put 'put ''dTkxODAiLDQsIlx1OTE4Nlx1OTE4OFx1OTE4YVx1OTE4ZVx1OTE4Zlx1OTE5MyIsNiwiXHU5MTljIiw1LCJcdTkxYTQiLDUsIlx1OTFhYlx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiN1x1OTFiOFx1OTFiOVx1OTFiYiJdLFsiZTE4MCIsIlx1OTFiYyIsMTAsIlx1''@;'; put 'put ''OTFjOFx1OTFjYlx1OTFkMFx1OTFkMiIsOSwiXHU5MWRkIiw4LCJcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNc''@;'; put 'put ''dTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVk''@;'; put 'put ''NmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBc''@;'; put 'put ''dTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmEiXSxbImUyNDAiLCJcdTkxZTYiLDYyXSxbImUyODAiLCJcdTkyMjUiLDMyLCJcdTcyZmJcdTczMTdc''@;'; put 'put ''dTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjciLDUsIlx1OTk3''@;'; put 'put ''NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1''@;'; put 'put ''NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAy''@;'; put 'put ''MVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0MiJdLFsiZTM0MCIsIlx1OTI0NiIsNDUsIlx1OTI3NSIsMTZdLFsiZTM4MCIsIlx1OTI4NiIsNywiXHU5MjhmIiwyNCwiXHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVj''@;'; put 'put ''XHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5''@;'; put 'put ''NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRh''@;'; put 'put ''XHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2''@;'; put 'put ''Y2ZlIl0sWyJlNDQwIiwiXHU5MmE4Iiw1LCJcdTkyYWYiLDI0LCJcdTkyYzkiLDMxXSxbImU0ODAiLCJcdTkyZTkiLDMyLCJcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZk''@;'; put 'put ''NTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNc''@;'; put 'put ''dTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZl''@;'; put 'put ''OGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDEiXSxbImU1NDAiLCJcdTkzMGEiLDUxLCJc''@;'; put 'put ''dTkzM2YiLDEwXSxbImU1ODAiLCJcdTkzNGEiLDMxLCJcdTkzNmJcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNc''@;'; put 'put ''dTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkw''@;'; put 'put ''MTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBc''@;'; put 'put ''dTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTMiXSxbImU2NDAiLCJcdTkzNmMiLDM0LCJcdTkzOTAiLDI3XSxbImU2ODAiLCJcdTkzYWMiLDI5LCJc''@;'; put 'put ''dTkzY2JcdTkzY2NcdTkzY2RcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVh''@;'; put 'put ''NDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZc''@;'; put 'put ''dTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlh''@;'; put 'put ''OWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTkiXSxbImU3NDAiLCJcdTkzY2UiLDcsIlx1OTNkNyIsNTRdLFsiZTc4MCIsIlx1OTQwZSIsMzIsIlx1N2VhZFx1N2ViMFx1N2ViZVx1N2Vj''@;'; put 'put ''MFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1''@;'; put 'put ''N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMSIsNiwiXHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmIiw0LCJcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJc''@;'; put 'put ''dTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmMiXSxb''@;'; put 'put ''ImU4NDAiLCJcdTk0MmYiLDE0LCJcdTk0M2YiLDQzLCJcdTk0NmNcdTk0NmRcdTk0NmVcdTk0NmYiXSxbImU4ODAiLCJcdTk0NzAiLDIwLCJcdTk0OTFcdTk0OTZcdTk0OThcdTk0YzdcdTk0Y2ZcdTk0ZDNcdTk0ZDRcdTk0ZGFcdTk0ZTZcdTk0ZmJcdTk1MWNcdTk1MjBcdTc0MWJcdTc0MWFc''@;'; put 'put ''dTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3''@;'; put 'put ''NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBc''@;'; put 'put ''dTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4''@;'; put 'put ''NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjkiXSxbImU5NDAiLCJcdTk1MjdcdTk1MzNcdTk1M2RcdTk1NDNcdTk1NDhcdTk1NGJcdTk1NTVcdTk1NWFcdTk1NjBcdTk1NmVcdTk1NzRcdTk1NzVcdTk1NzciLDcsIlx1OTU4MCIsNDJdLFsi''@;'; put 'put ''ZTk4MCIsIlx1OTVhYiIsMzIsIlx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1''@;'; put 'put ''Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEz''@;'; put 'put ''NVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1''@;'; put 'put ''OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4YiJdLFsiZWE0MCIsIlx1OTVjYyIsMjcsIlx1OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxYlx1OTYxZVx1OTYyMFx1OTYy''@;'; put 'put ''MyIsNiwiXHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3Il0sWyJlYTgwIiwiXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5''@;'; put 'put ''NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkIiw0LCJcdTk2NzNcdTk2NzgiLDEyLCJcdTk2ODdcdTk2ODlcdTk2OGFcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVc''@;'; put 'put ''dTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2''@;'; put 'put ''NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdc''@;'; put 'put ''dThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjAiXSxbImViNDAi''@;'; put 'put ''LCJcdTk2OGNcdTk2OGVcdTk2OTFcdTk2OTJcdTk2OTNcdTk2OTVcdTk2OTZcdTk2OWFcdTk2OWJcdTk2OWQiLDksIlx1OTZhOCIsNywiXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5''@;'; put 'put ''NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2Iiw5LCJcdTk2ZTEiLDYsIlx1OTZlYiJdLFsiZWI4MCIsIlx1OTZlY1x1OTZlZFx1OTZlZVx1OTZmMFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1''@;'; put 'put ''OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1OTcxNyIsNCwiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5''@;'; put 'put ''XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4''@;'; put 'put ''MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4''@;'; put 'put ''XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiIl0sWyJlYzQwIiwiXHU5NzIxIiw4''@;'; put 'put ''LCJcdTk3MmJcdTk3MmNcdTk3MmVcdTk3MmZcdTk3MzFcdTk3MzMiLDQsIlx1OTczYVx1OTczYlx1OTczY1x1OTczZFx1OTczZiIsMTgsIlx1OTc1NFx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Y1x1OTc1ZFx1OTc1Zlx1OTc2M1x1OTc2NFx1OTc2Nlx1OTc2N1x1OTc2OFx1OTc2YSIs''@;'; put 'put ''N10sWyJlYzgwIiwiXHU5NzcyXHU5Nzc1XHU5Nzc3Iiw0LCJcdTk3N2QiLDcsIlx1OTc4NiIsNCwiXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5Iiw0LCJcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlc''@;'; put 'put ''dTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcw''@;'; put 'put ''YjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRc''@;'; put 'put ''dTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5''@;'; put 'put ''YTdcdTc5YjNcdTVmZDFcdTVmZDAiXSxbImVkNDAiLCJcdTk3OWVcdTk3OWZcdTk3YTFcdTk3YTJcdTk3YTQiLDYsIlx1OTdhY1x1OTdhZVx1OTdiMFx1OTdiMVx1OTdiM1x1OTdiNSIsNDZdLFsiZWQ4MCIsIlx1OTdlNFx1OTdlNVx1OTdlOFx1OTdlZSIsNCwiXHU5N2Y0XHU5N2Y3IiwyMywi''@;'; put 'put ''XHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3''@;'; put 'put ''ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODlj''@;'; put 'put ''XHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3''@;'; put 'put ''NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4Il0sWyJlZTQwIiwiXHU5ODBmIiw2Ml0sWyJlZTgwIiwiXHU5ODRlIiwzMiwiXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3''@;'; put 'put ''NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1''@;'; put 'put ''XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2Iiw0LCJcdTk0YmNcdTk0''@;'; put 'put ''YmRcdTk0YmZcdTk0YzRcdTk0YzgiLDYsIlx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYSJdLFsiZWY0MCIsIlx1OTg2ZiIsNSwiXHU5ODhiXHU5''@;'; put 'put ''ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4IiwzNywiXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwIiw0XSxbImVmODAiLCJcdTk4ZTVcdTk4ZTZcdTk4ZTkiLDMwLCJcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0''@;'; put 'put ''ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTIiLDQsIlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1''@;'; put 'put ''OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1''@;'; put 'put ''Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NCIsOCwiXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0Il0sWyJmMDQwIiwiXHU5OTA4Iiw0LCJcdTk5''@;'; put 'put ''MGVcdTk5MGZcdTk5MTEiLDI4LCJcdTk5MmYiLDI2XSxbImYwODAiLCJcdTk5NGEiLDksIlx1OTk1NiIsMTIsIlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4''@;'; put 'put ''OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOCIsNCwiXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5''@;'; put 'put ''ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2Iiw2LCJcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBc''@;'; put 'put ''dTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTkiXSxbImYxNDAiLCJcdTk5OGNcdTk5''@;'; put 'put ''OGVcdTk5OWEiLDEwLCJcdTk5YTZcdTk5YTdcdTk5YTkiLDQ3XSxbImYxODAiLCJcdTk5ZDkiLDMyLCJcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2''@;'; put 'put ''NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJc''@;'; put 'put ''dTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgw''@;'; put 'put ''MTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODMiXSxbImYyNDAiLCJcdTk5ZmEiLDYyXSxbImYyODAiLCJcdTlh''@;'; put 'put ''MzkiLDMyLCJcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRc''@;'; put 'put ''dTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2''@;'; put 'put ''ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBc''@;'; put 'put ''dTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDIiXSxbImYzNDAiLCJcdTlhNWEiLDE3LCJcdTlhNzJcdTlhODNcdTlhODlcdTlhOGRcdTlhOGVcdTlhOTRcdTlhOTVcdTlhOTlcdTlhYTZcdTlhYTkiLDYs''@;'; put 'put ''Ilx1OWFiMlx1OWFiM1x1OWFiNFx1OWFiNVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFiZVx1OWFiZlx1OWFjM1x1OWFjNFx1OWFjNiIsNCwiXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5YWRhXHU5YWRiXHU5YWRjIl0sWyJmMzgw''@;'; put 'put ''IiwiXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwIiw4LCJcdTlhZmFcdTlhZmMiLDYsIlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1''@;'; put 'put ''ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIx''@;'; put 'put ''MFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1''@;'; put 'put ''N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2Mw''@;'; put 'put ''Y1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYiJdLFsiZjQ0MCIsIlx1OWIwN1x1OWIwOSIsNSwiXHU5YjEwXHU5YjExXHU5YjEyXHU5YjE0IiwxMCwiXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0IiwxMCwiXHU5YjMwXHU5YjMxXHU5YjMzIiw3LCJcdTliM2RcdTliM2VcdTliM2ZcdTli''@;'; put 'put ''NDBcdTliNDZcdTliNGFcdTliNGJcdTliNGNcdTliNGVcdTliNTBcdTliNTJcdTliNTNcdTliNTUiLDVdLFsiZjQ4MCIsIlx1OWI1YiIsMzIsIlx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIy''@;'; put 'put ''Mlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1''@;'; put 'put ''N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2Zl''@;'; put 'put ''Nlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NCJdLFsiZjU0MCIsIlx1''@;'; put 'put ''OWI3YyIsNjJdLFsiZjU4MCIsIlx1OWJiYiIsMzIsIlx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1''@;'; put 'put ''OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRm''@;'; put 'put ''Ylx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1''@;'; put 'put ''OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkYyJdLFsiZjY0MCIsIlx1OWJkYyIsNjJdLFsiZjY4MCIsIlx1OWMxYiIsMzIsIlx1ODllNVx1ODllYlx1ODllZlx1''@;'; put 'put ''OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NSIsNSwiXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQy''@;'; put 'put ''XHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5''@;'; put 'put ''YzllIiw1LCJcdTljYTUiLDQsIlx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMCIsNywiXHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiIl0sWyJmNzQwIiwiXHU5YzNjIiw2Ml0sWyJmNzgwIiwiXHU5YzdiXHU5YzdkXHU5YzdlXHU5Yzgw''@;'; put 'put ''XHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5XHU5YzlkXHU5Y2FhXHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlIiw0LCJcdTljYzhcdTljYzlcdTljZDFcdTljZDJcdTljZGFcdTljZGJcdTljZTBcdTljZTFcdTljY2MiLDQs''@;'; put 'put ''Ilx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1''@;'; put 'put ''OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIw''@;'; put 'put ''OFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1''@;'; put 'put ''OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NCJdLFsiZjg0MCIsIlx1OWNlMyIsNjJdLFsiZjg4MCIsIlx1OWQyMiIsMzJdLFsiZjk0MCIsIlx1OWQ0MyIsNjJdLFsiZjk4MCIsIlx1OWQ4MiIsMzJdLFsiZmE0MCIsIlx1OWRhMyIsNjJdLFsiZmE4MCIsIlx1OWRlMiIs''@;'; put 'put ''MzJdLFsiZmI0MCIsIlx1OWUwMyIsMjcsIlx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1''@;'; put 'put ''OWU3Mlx1OWU3NCIsOSwiXHU5ZTgwIl0sWyJmYjgwIiwiXHU5ZTgxXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg2XHU5ZTg5XHU5ZThhXHU5ZThjIiw1LCJcdTllOTQiLDgsIlx1OWU5ZVx1OWVhMCIsNSwiXHU5ZWE3XHU5ZWE4XHU5ZWE5XHU5ZWFhIl0sWyJmYzQwIiwiXHU5ZWFiIiw4LCJcdTll''@;'; put 'put ''YjVcdTllYjZcdTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmYiLDQsIlx1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1''@;'; put 'put ''OWVlOFx1OWVlYlx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMCIsOCwiXHU5ZWZhXHU5ZWZkXHU5ZWZmIiw2XSxbImZjODAiLCJcdTlmMDYiLDQsIlx1OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYSIsNSwiXHU5ZjIxXHU5ZjIzIiw4LCJcdTlmMmRc''@;'; put 'put ''dTlmMmVcdTlmMzBcdTlmMzEiXSxbImZkNDAiLCJcdTlmMzIiLDQsIlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZiIsNCwiXHU5ZjQ1IiwxMCwiXHU5ZjUyIiwzOF0sWyJmZDgwIiwiXHU5Zjc5Iiw1LCJcdTlmODFcdTlmODJcdTlmOGQiLDExLCJcdTlmOWNcdTlmOWRcdTlmOWVcdTlmYTEiLDQs''@;'; put 'put ''Ilx1ZjkyY1x1Zjk3OVx1Zjk5NVx1ZjllN1x1ZjlmMSJdLFsiZmU0MCIsIlx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOSJdXScpfSw3NzM0ODphdD0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjthdC5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiODE0MSIsIlx1YWMwMlx1YWMwM1x1YWMwNVx1YWMwNlx1YWMwYiIsNCwiXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1Iiw2LCJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzQi''@;'; put 'put ''XSxbIjgxNjEiLCJcdWFjMzVcdWFjMzZcdWFjMzdcdWFjM2FcdWFjM2JcdWFjM2RcdWFjM2VcdWFjM2ZcdWFjNDEiLDksIlx1YWM0Y1x1YWM0ZSIsNSwiXHVhYzU1Il0sWyI4MTgxIiwiXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkIiwxOCwiXHVhYzcyXHVhYzczXHVhYzc1''@;'; put 'put ''XHVhYzc2XHVhYzc5XHVhYzdiIiw0LCJcdWFjODJcdWFjODdcdWFjODhcdWFjOGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTUiLDYsIlx1YWM5ZVx1YWNhMiIsNSwiXHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxIiw2LCJcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJc''@;'; put 'put ''dWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2QiLDcsIlx1YWNkNlx1YWNkOCIsNywiXHVhY2UyXHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3Iiw0LCJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJc''@;'; put 'put ''dWFkMDNcdWFkMDVcdWFkMDciLDQsIlx1YWQwZVx1YWQxMFx1YWQxMlx1YWQxMyJdLFsiODI0MSIsIlx1YWQxNFx1YWQxNVx1YWQxNlx1YWQxN1x1YWQxOVx1YWQxYVx1YWQxYlx1YWQxZFx1YWQxZVx1YWQxZlx1YWQyMSIsNywiXHVhZDJhXHVhZDJiXHVhZDJlIiw1XSxbIjgyNjEiLCJcdWFk''@;'; put 'put ''MzZcdWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2QiLDYsIlx1YWQ0Nlx1YWQ0OFx1YWQ0YSIsNSwiXHVhZDUxXHVhZDUyXHVhZDUzXHVhZDU1XHVhZDU2XHVhZDU3Il0sWyI4MjgxIiwiXHVhZDU5Iiw3LCJcdWFkNjJcdWFkNjQiLDcsIlx1YWQ2ZVx1YWQ2Zlx1YWQ3MVx1YWQ3Mlx1YWQ3''@;'; put 'put ''N1x1YWQ3OFx1YWQ3OVx1YWQ3YVx1YWQ3ZVx1YWQ4MFx1YWQ4MyIsNCwiXHVhZDhhXHVhZDhiXHVhZDhkXHVhZDhlXHVhZDhmXHVhZDkxIiwxMCwiXHVhZDllIiw1LCJcdWFkYTUiLDE3LCJcdWFkYjgiLDcsIlx1YWRjMlx1YWRjM1x1YWRjNVx1YWRjNlx1YWRjN1x1YWRjOSIsNiwiXHVhZGQy''@;'; put 'put ''XHVhZGQ0Iiw3LCJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNcdWFkZTUiLDE4XSxbIjgzNDEiLCJcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVcdWFlMDIiLDUsIlx1YWUwYVx1YWUwY1x1YWUwZSIsNSwiXHVhZTE1Iiw3XSxbIjgzNjEiLCJcdWFlMWQiLDE4LCJcdWFlMzJc''@;'; put 'put ''dWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2MiXSxbIjgzODEiLCJcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTciLDQsIlx1YWU1ZVx1YWU2Mlx1YWU2M1x1YWU2''@;'; put 'put ''NFx1YWU2Nlx1YWU2N1x1YWU2YVx1YWU2Ylx1YWU2ZFx1YWU2ZVx1YWU2Zlx1YWU3MSIsNiwiXHVhZTdhXHVhZTdlIiw1LCJcdWFlODYiLDUsIlx1YWU4ZCIsNDYsIlx1YWViZlx1YWVjMVx1YWVjMlx1YWVjM1x1YWVjNSIsNiwiXHVhZWNlXHVhZWQyIiw1LCJcdWFlZGFcdWFlZGJcdWFlZGQi''@;'; put 'put ''LDhdLFsiODQ0MSIsIlx1YWVlNlx1YWVlN1x1YWVlOVx1YWVlYVx1YWVlY1x1YWVlZSIsNSwiXHVhZWY1XHVhZWY2XHVhZWY3XHVhZWY5XHVhZWZhXHVhZWZiXHVhZWZkIiw4XSxbIjg0NjEiLCJcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTEiLDE4XSxb''@;'; put 'put ''Ijg0ODEiLCJcdWFmMjQiLDcsIlx1YWYyZVx1YWYyZlx1YWYzMVx1YWYzM1x1YWYzNSIsNiwiXHVhZjNlXHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhIiw1LCJcdWFmNTEiLDEwLCJcdWFmNWUiLDUsIlx1YWY2NiIsMTgsIlx1YWY3YSIsNSwiXHVhZjgxXHVhZjgyXHVhZjgz''@;'; put 'put ''XHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5Iiw2LCJcdWFmOTJcdWFmOTNcdWFmOTRcdWFmOTYiLDUsIlx1YWY5ZCIsMjYsIlx1YWZiYVx1YWZiYlx1YWZiZFx1YWZiZSJdLFsiODU0MSIsIlx1YWZiZlx1YWZjMSIsNSwiXHVhZmNhXHVhZmNjXHVhZmNmIiw0LCJcdWFmZDUiLDYsIlx1YWZkZCIs''@;'; put 'put ''NF0sWyI4NTYxIiwiXHVhZmUyIiw1LCJcdWFmZWEiLDUsIlx1YWZmMlx1YWZmM1x1YWZmNVx1YWZmNlx1YWZmN1x1YWZmOSIsNiwiXHViMDAyXHViMDAzIl0sWyI4NTgxIiwiXHViMDA1Iiw2LCJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTUiLDYsIlx1YjAxZSIs''@;'; put 'put ''OSwiXHViMDI5IiwyNiwiXHViMDQ2XHViMDQ3XHViMDQ5XHViMDRiXHViMDRkXHViMDRmXHViMDUwXHViMDUxXHViMDUyXHViMDU2XHViMDU4XHViMDVhXHViMDViXHViMDVjXHViMDVlIiwyOSwiXHViMDdlXHViMDdmXHViMDgxXHViMDgyXHViMDgzXHViMDg1Iiw2LCJcdWIwOGVcdWIwOTBc''@;'; put 'put ''dWIwOTIiLDUsIlx1YjA5Ylx1YjA5ZFx1YjA5ZVx1YjBhM1x1YjBhNCJdLFsiODY0MSIsIlx1YjBhNVx1YjBhNlx1YjBhN1x1YjBhYVx1YjBiMFx1YjBiMlx1YjBiNlx1YjBiN1x1YjBiOVx1YjBiYVx1YjBiYlx1YjBiZCIsNiwiXHViMGM2XHViMGNhIiw1LCJcdWIwZDIiXSxbIjg2NjEiLCJc''@;'; put 'put ''dWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDkiLDYsIlx1YjBlMVx1YjBlMlx1YjBlM1x1YjBlNFx1YjBlNiIsMTBdLFsiODY4MSIsIlx1YjBmMSIsMjIsIlx1YjEwYVx1YjEwZFx1YjEwZVx1YjEwZlx1YjExMVx1YjExNFx1YjExNVx1YjExNlx1YjExN1x1YjExYVx1YjExZSIsNCwiXHVi''@;'; put 'put ''MTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkIiw2LCJcdWIxMzZcdWIxM2EiLDUsIlx1YjE0Mlx1YjE0M1x1YjE0NVx1YjE0Nlx1YjE0N1x1YjE0OSIsNiwiXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVkXHViMTVlXHViMTVmXHViMTYxIiwy''@;'; put 'put ''MiwiXHViMTdhXHViMTdiXHViMTdkXHViMTdlXHViMTdmXHViMTgxXHViMTgzIiw0LCJcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWQiXSxbIjg3NDEiLCJcdWIxOWUiLDksIlx1YjFhOSIsMTVdLFsi''@;'; put 'put ''ODc2MSIsIlx1YjFiOSIsMTgsIlx1YjFjZFx1YjFjZVx1YjFjZlx1YjFkMVx1YjFkMlx1YjFkM1x1YjFkNSJdLFsiODc4MSIsIlx1YjFkNiIsNSwiXHViMWRlXHViMWUwIiw3LCJcdWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjEiLDcsIlx1YjFmYVx1YjFmY1x1YjFmZSIsNSwi''@;'; put 'put ''XHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBkIiw2LCJcdWIyMTZcdWIyMThcdWIyMWEiLDUsIlx1YjIyMSIsMTgsIlx1YjIzNSIsNiwiXHViMjNkIiwyNiwiXHViMjU5XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVmXHViMjYxIiw2LCJcdWIyNmEiLDRdLFsiODg0MSIsIlx1YjI2''@;'; put 'put ''ZiIsNCwiXHViMjc2Iiw1LCJcdWIyN2QiLDYsIlx1YjI4Nlx1YjI4N1x1YjI4OFx1YjI4YSIsNF0sWyI4ODYxIiwiXHViMjhmXHViMjkyXHViMjkzXHViMjk1XHViMjk2XHViMjk3XHViMjliIiw0LCJcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIyYWRcdWIyYWVcdWIy''@;'; put 'put ''YWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjciXSxbIjg4ODEiLCJcdWIyYjgiLDE1LCJcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDMiLDQsIlx1YjJkYVx1YjJkY1x1YjJkZVx1YjJkZlx1YjJlMFx1YjJlMVx1YjJlM1x1YjJlN1x1YjJlOVx1''@;'; put 'put ''YjJlYVx1YjJmMFx1YjJmMVx1YjJmMlx1YjJmNlx1YjJmY1x1YjJmZFx1YjJmZVx1YjMwMlx1YjMwM1x1YjMwNVx1YjMwNlx1YjMwN1x1YjMwOSIsNiwiXHViMzEyXHViMzE2Iiw1LCJcdWIzMWQiLDU0LCJcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBcdWIzNjFcdWIzNjJcdWIzNjMi''@;'; put 'put ''XSxbIjg5NDEiLCJcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzkiLDYsIlx1YjM4Mlx1YjM4NiIsNSwiXHViMzhkIl0sWyI4OTYxIiwiXHViMzhlXHViMzhmXHViMzkxXHViMzkyXHViMzkzXHViMzk1IiwxMCwi''@;'; put 'put ''XHViM2EyIiw1LCJcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWQiXSxbIjg5ODEiLCJcdWIzYWUiLDIxLCJcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIzZTJcdWIz''@;'; put 'put ''ZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTkiLDE4LCJcdWIzZmQiLDE4LCJcdWI0MTEiLDYsIlx1YjQxOVx1YjQxYVx1YjQxYlx1YjQxZFx1YjQxZVx1YjQxZlx1YjQyMSIsNiwiXHViNDJhXHViNDJjIiw3LCJcdWI0MzUiLDE1XSxbIjhhNDEiLCJcdWI0NDUiLDEwLCJcdWI0NTJcdWI0NTNc''@;'; put 'put ''dWI0NTVcdWI0NTZcdWI0NTdcdWI0NTkiLDYsIlx1YjQ2Mlx1YjQ2NFx1YjQ2NiJdLFsiOGE2MSIsIlx1YjQ2NyIsNCwiXHViNDZkIiwxOCwiXHViNDgxXHViNDgyIl0sWyI4YTgxIiwiXHViNDgzIiw0LCJcdWI0ODkiLDE5LCJcdWI0OWUiLDUsIlx1YjRhNVx1YjRhNlx1YjRhN1x1YjRhOVx1''@;'; put 'put ''YjRhYVx1YjRhYlx1YjRhZCIsNywiXHViNGI2XHViNGI4XHViNGJhIiw1LCJcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzkiLDYsIlx1YjRkMVx1YjRkMlx1YjRkM1x1YjRkNFx1YjRkNiIsNSwiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3Iiw0''@;'; put 'put ''LCJcdWI0ZWVcdWI0ZjBcdWI0ZjIiLDUsIlx1YjRmOSIsMjYsIlx1YjUxNlx1YjUxN1x1YjUxOVx1YjUxYVx1YjUxZCJdLFsiOGI0MSIsIlx1YjUxZSIsNSwiXHViNTI2XHViNTJiIiw0LCJcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZcdWI1MzdcdWI1MzkiLDYsIlx1YjU0Mlx1YjU0NiJdLFsi''@;'; put 'put ''OGI2MSIsIlx1YjU0N1x1YjU0OFx1YjU0OVx1YjU0YVx1YjU0ZVx1YjU0Zlx1YjU1MVx1YjU1Mlx1YjU1M1x1YjU1NSIsNiwiXHViNTVlXHViNTYyIiw4XSxbIjhiODEiLCJcdWI1NmIiLDUyLCJcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVc''@;'; put 'put ''dWI1YWZcdWI1YjJcdWI1YjYiLDQsIlx1YjViZVx1YjViZlx1YjVjMVx1YjVjMlx1YjVjM1x1YjVjNSIsNiwiXHViNWNlXHViNWQyIiw1LCJcdWI1ZDkiLDE4LCJcdWI1ZWQiLDE4XSxbIjhjNDEiLCJcdWI2MDAiLDE1LCJcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTkiLDRd''@;'; put 'put ''LFsiOGM2MSIsIlx1YjYxZSIsNiwiXHViNjI2Iiw1LCJcdWI2MmQiLDYsIlx1YjYzNSIsNV0sWyI4YzgxIiwiXHViNjNiIiwxMiwiXHViNjQ5IiwyNiwiXHViNjY1XHViNjY2XHViNjY3XHViNjY5Iiw1MCwiXHViNjllXHViNjlmXHViNmExXHViNmEyXHViNmEzXHViNmE1Iiw1LCJcdWI2YWRc''@;'; put 'put ''dWI2YWVcdWI2YWZcdWI2YjBcdWI2YjIiLDE2XSxbIjhkNDEiLCJcdWI2YzMiLDE2LCJcdWI2ZDUiLDhdLFsiOGQ2MSIsIlx1YjZkZSIsMTcsIlx1YjZmMVx1YjZmMlx1YjZmM1x1YjZmNVx1YjZmNlx1YjZmN1x1YjZmOVx1YjZmYSJdLFsiOGQ4MSIsIlx1YjZmYiIsNCwiXHViNzAyXHViNzAz''@;'; put 'put ''XHViNzA0XHViNzA2IiwzMywiXHViNzJhXHViNzJiXHViNzJkXHViNzJlXHViNzMxIiw2LCJcdWI3M2FcdWI3M2MiLDcsIlx1Yjc0NVx1Yjc0Nlx1Yjc0N1x1Yjc0OVx1Yjc0YVx1Yjc0Ylx1Yjc0ZCIsNiwiXHViNzU2Iiw5LCJcdWI3NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3Njdc''@;'; put 'put ''dWI3NjkiLDYsIlx1Yjc3Mlx1Yjc3NFx1Yjc3NiIsNSwiXHViNzdlXHViNzdmXHViNzgxXHViNzgyXHViNzgzXHViNzg1Iiw2LCJcdWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWUiXSxbIjhlNDEiLCJcdWI3OWZcdWI3YTEiLDYsIlx1YjdhYVx1YjdhZSIs''@;'; put 'put ''NSwiXHViN2I2XHViN2I3XHViN2I5Iiw4XSxbIjhlNjEiLCJcdWI3YzIiLDQsIlx1YjdjOFx1YjdjYSIsMTldLFsiOGU4MSIsIlx1YjdkZSIsMTMsIlx1YjdlZVx1YjdlZlx1YjdmMVx1YjdmMlx1YjdmM1x1YjdmNSIsNiwiXHViN2ZlXHViODAyIiw0LCJcdWI4MGFcdWI4MGJcdWI4MGRcdWI4''@;'; put 'put ''MGVcdWI4MGZcdWI4MTEiLDYsIlx1YjgxYVx1YjgxY1x1YjgxZSIsNSwiXHViODI2XHViODI3XHViODI5XHViODJhXHViODJiXHViODJkIiw2LCJcdWI4MzZcdWI4M2EiLDUsIlx1Yjg0MVx1Yjg0Mlx1Yjg0M1x1Yjg0NSIsMTEsIlx1Yjg1Mlx1Yjg1NCIsNywiXHViODVlXHViODVmXHViODYx''@;'; put 'put ''XHViODYyXHViODYzXHViODY1Iiw2LCJcdWI4NmVcdWI4NzBcdWI4NzIiLDUsIlx1Yjg3OVx1Yjg3YVx1Yjg3Ylx1Yjg3ZCIsN10sWyI4ZjQxIiwiXHViODg1Iiw3LCJcdWI4OGUiLDE3XSxbIjhmNjEiLCJcdWI4YTAiLDcsIlx1YjhhOSIsNiwiXHViOGIxXHViOGIyXHViOGIzXHViOGI1XHVi''@;'; put 'put ''OGI2XHViOGI3XHViOGI5Iiw0XSxbIjhmODEiLCJcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzYiLDUsIlx1YjhjZFx1YjhjZVx1YjhjZlx1YjhkMVx1YjhkMlx1YjhkM1x1YjhkNSIsNywiXHViOGRlXHViOGUwXHViOGUyIiw1LCJcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZc''@;'; put 'put ''dWI4ZjEiLDYsIlx1YjhmYVx1YjhmY1x1YjhmZSIsNSwiXHViOTA1IiwxOCwiXHViOTE5Iiw2LCJcdWI5MjEiLDI2LCJcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5NDUiLDYsIlx1Yjk0ZFx1Yjk0ZVx1Yjk1MFx1Yjk1MiIsNV0sWyI5MDQxIiwiXHViOTVhXHViOTViXHViOTVk''@;'; put 'put ''XHViOTVlXHViOTVmXHViOTYxIiw2LCJcdWI5NmFcdWI5NmNcdWI5NmUiLDUsIlx1Yjk3Nlx1Yjk3N1x1Yjk3OVx1Yjk3YVx1Yjk3Ylx1Yjk3ZCJdLFsiOTA2MSIsIlx1Yjk3ZSIsNSwiXHViOTg2XHViOTg4XHViOThiXHViOThjXHViOThmIiwxNV0sWyI5MDgxIiwiXHViOTlmIiwxMiwiXHVi''@;'; put 'put ''OWFlXHViOWFmXHViOWIxXHViOWIyXHViOWIzXHViOWI1Iiw2LCJcdWI5YmVcdWI5YzBcdWI5YzIiLDUsIlx1YjljYVx1YjljYlx1YjljZFx1YjlkMyIsNCwiXHViOWRhXHViOWRjXHViOWRmXHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkIiw2LCJcdWI5''@;'; put 'put ''ZjZcdWI5ZmIiLDQsIlx1YmEwMiIsNSwiXHViYTA5IiwxMSwiXHViYTE2IiwzMywiXHViYTNhXHViYTNiXHViYTNkXHViYTNlXHViYTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2Il0sWyI5MTQxIiwiXHViYTQ3XHViYTRhXHViYTRjXHViYTRmXHViYTUwXHViYTUxXHViYTUyXHVi''@;'; put 'put ''YTU2XHViYTU3XHViYTU5XHViYTVhXHViYTViXHViYTVkIiw2LCJcdWJhNjZcdWJhNmEiLDVdLFsiOTE2MSIsIlx1YmE3Mlx1YmE3M1x1YmE3NVx1YmE3Nlx1YmE3N1x1YmE3OSIsOSwiXHViYTg2XHViYTg4XHViYTg5XHViYThhXHViYThiXHViYThkIiw1XSxbIjkxODEiLCJcdWJhOTMiLDIw''@;'; put 'put ''LCJcdWJhYWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjMiLDQsIlx1YmFiYVx1YmFiY1x1YmFiZSIsNSwiXHViYWM1XHViYWM2XHViYWM3XHViYWM5IiwxNCwiXHViYWRhIiwzMywiXHViYWZkXHViYWZlXHViYWZmXHViYjAxXHViYjAyXHViYjAzXHViYjA1Iiw3LCJcdWJiMGVcdWJi''@;'; put 'put ''MTBcdWJiMTIiLDUsIlx1YmIxOVx1YmIxYVx1YmIxYlx1YmIxZFx1YmIxZVx1YmIxZlx1YmIyMSIsNl0sWyI5MjQxIiwiXHViYjI4XHViYjJhXHViYjJjIiw3LCJcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2YiLDQsIlx1YmI0Nlx1YmI0OFx1YmI0YVx1YmI0Ylx1YmI0Y1x1YmI0ZVx1YmI1MVx1''@;'; put 'put ''YmI1MiJdLFsiOTI2MSIsIlx1YmI1M1x1YmI1NVx1YmI1Nlx1YmI1N1x1YmI1OSIsNywiXHViYjYyXHViYjY0Iiw3LCJcdWJiNmQiLDRdLFsiOTI4MSIsIlx1YmI3MiIsMjEsIlx1YmI4OVx1YmI4YVx1YmI4Ylx1YmI4ZFx1YmI4ZVx1YmI4Zlx1YmI5MSIsMTgsIlx1YmJhNVx1YmJhNlx1YmJh''@;'; put 'put ''N1x1YmJhOVx1YmJhYVx1YmJhYlx1YmJhZCIsNiwiXHViYmI1XHViYmI2XHViYmI4Iiw3LCJcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZcdWJiYzdcdWJiYzkiLDYsIlx1YmJkMVx1YmJkMlx1YmJkNCIsMzUsIlx1YmJmYVx1YmJmYlx1YmJmZFx1YmJmZVx1YmMwMSJdLFsiOTM0MSIs''@;'; put 'put ''Ilx1YmMwMyIsNCwiXHViYzBhXHViYzBlXHViYzEwXHViYzEyXHViYzEzXHViYzE5XHViYzFhXHViYzIwXHViYzIxXHViYzIyXHViYzIzXHViYzI2XHViYzI4XHViYzJhXHViYzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1Il0sWyI5MzYxIiwiXHViYzM2XHViYzM3XHVi''@;'; put 'put ''YzM5Iiw2LCJcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJjNGVcdWJjNGZcdWJjNTEiLDhdLFsiOTM4MSIsIlx1YmM1YVx1YmM1Ylx1YmM1Y1x1YmM1ZSIsMzcsIlx1YmM4Nlx1YmM4N1x1YmM4OVx1YmM4YVx1YmM4ZFx1YmM4ZiIsNCwiXHViYzk2XHViYzk4XHViYzli''@;'; put 'put ''Iiw0LCJcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTkiLDYsIlx1YmNiMlx1YmNiNiIsNSwiXHViY2JlXHViY2JmXHViY2MxXHViY2MyXHViY2MzXHViY2M1Iiw3LCJcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGQiLDIyLCJc''@;'; put 'put ''dWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmQiXSxbIjk0NDEiLCJcdWJjZmUiLDUsIlx1YmQwNlx1YmQwOFx1YmQwYSIsNSwiXHViZDExXHViZDEyXHViZDEzXHViZDE1Iiw4XSxbIjk0NjEiLCJcdWJkMWUiLDUsIlx1YmQyNSIsNiwiXHViZDJkIiwxMl0sWyI5NDgxIiwiXHViZDNhIiw1''@;'; put 'put ''LCJcdWJkNDEiLDYsIlx1YmQ0YVx1YmQ0Ylx1YmQ0ZFx1YmQ0ZVx1YmQ0Zlx1YmQ1MSIsNiwiXHViZDVhIiw5LCJcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjkiLDIyLCJcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGIiLDQsIlx1YmQ5Mlx1YmQ5NFx1YmQ5Nlx1YmQ5N1x1YmQ5OFx1YmQ5''@;'; put 'put ''Ylx1YmQ5ZCIsNiwiXHViZGE1IiwxMCwiXHViZGIxIiw2LCJcdWJkYjkiLDI0XSxbIjk1NDEiLCJcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGQiLDExLCJcdWJkZWEiLDUsIlx1YmRmMSJdLFsiOTU2MSIsIlx1YmRmMlx1YmRmM1x1YmRmNVx1YmRmNlx1''@;'; put 'put ''YmRmN1x1YmRmOSIsNiwiXHViZTAxXHViZTAyXHViZTA0XHViZTA2Iiw1LCJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTMiXSxbIjk1ODEiLCJcdWJlMTUiLDYsIlx1YmUxZVx1YmUyMCIsMzUsIlx1YmU0Nlx1YmU0N1x1YmU0OVx1YmU0YVx1YmU0Ylx1YmU0ZFx1YmU0ZiIsNCwiXHVi''@;'; put 'put ''ZTU2XHViZTU4XHViZTVjXHViZTVkXHViZTVlXHViZTVmXHViZTYyXHViZTYzXHViZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZiIiw0LCJcdWJlNzJcdWJlNzYiLDQsIlx1YmU3ZVx1YmU3Zlx1YmU4MVx1YmU4Mlx1YmU4M1x1YmU4NSIsNiwiXHViZThlXHViZTkyIiw1LCJcdWJlOWEiLDEz''@;'; put 'put ''LCJcdWJlYTkiLDE0XSxbIjk2NDEiLCJcdWJlYjgiLDIzLCJcdWJlZDJcdWJlZDMiXSxbIjk2NjEiLCJcdWJlZDVcdWJlZDZcdWJlZDkiLDYsIlx1YmVlMVx1YmVlMlx1YmVlNiIsNSwiXHViZWVkIiw4XSxbIjk2ODEiLCJcdWJlZjYiLDEwLCJcdWJmMDIiLDUsIlx1YmYwYSIsMTMsIlx1YmYx''@;'; put 'put ''YVx1YmYxZSIsMzMsIlx1YmY0Mlx1YmY0M1x1YmY0NVx1YmY0Nlx1YmY0N1x1YmY0OSIsNiwiXHViZjUyXHViZjUzXHViZjU0XHViZjU2Iiw0NF0sWyI5NzQxIiwiXHViZjgzIiwxNiwiXHViZjk1Iiw4XSxbIjk3NjEiLCJcdWJmOWUiLDE3LCJcdWJmYjEiLDddLFsiOTc4MSIsIlx1YmZiOSIs''@;'; put 'put ''MTEsIlx1YmZjNiIsNSwiXHViZmNlXHViZmNmXHViZmQxXHViZmQyXHViZmQzXHViZmQ1Iiw2LCJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTIiLDg5LCJcdWMwM2RcdWMwM2VcdWMwM2YiXSxbIjk4NDEiLCJcdWMwNDAiLDE2LCJcdWMwNTIiLDUsIlx1YzA1OVx1YzA1YVx1YzA1YiJdLFsiOTg2''@;'; put 'put ''MSIsIlx1YzA1ZFx1YzA1ZVx1YzA1Zlx1YzA2MSIsNiwiXHVjMDZhIiwxNV0sWyI5ODgxIiwiXHVjMDdhIiwyMSwiXHVjMDkyXHVjMDkzXHVjMDk1XHVjMDk2XHVjMDk3XHVjMDk5Iiw2LCJcdWMwYTJcdWMwYTRcdWMwYTYiLDUsIlx1YzBhZVx1YzBiMVx1YzBiMlx1YzBiNyIsNCwiXHVjMGJl''@;'; put 'put ''XHVjMGMyXHVjMGMzXHVjMGM0XHVjMGM2XHVjMGM3XHVjMGNhXHVjMGNiXHVjMGNkXHVjMGNlXHVjMGNmXHVjMGQxIiw2LCJcdWMwZGFcdWMwZGUiLDUsIlx1YzBlNlx1YzBlN1x1YzBlOVx1YzBlYVx1YzBlYlx1YzBlZCIsNiwiXHVjMGY2XHVjMGY4XHVjMGZhIiw1LCJcdWMxMDFcdWMxMDJc''@;'; put 'put ''dWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDkiLDYsIlx1YzExMVx1YzExMlx1YzExM1x1YzExNFx1YzExNiIsNSwiXHVjMTIxXHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVjMTJhXHVjMTJiXHVjMTJlIl0sWyI5OTQxIiwiXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNh''@;'; put 'put ''XHVjMTNiXHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQxIiw2LCJcdWMxNGFcdWMxNGUiLDUsIlx1YzE1Nlx1YzE1NyJdLFsiOTk2MSIsIlx1YzE1OVx1YzE1YVx1YzE1Ylx1YzE1ZCIsNiwiXHVjMTY2XHVjMTZhIiw1LCJcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlc''@;'; put 'put ''dWMxN2FcdWMxN2IiXSxbIjk5ODEiLCJcdWMxN2MiLDgsIlx1YzE4NiIsNSwiXHVjMThmXHVjMTkxXHVjMTkyXHVjMTkzXHVjMTk1XHVjMTk3Iiw0LCJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFcdWMxYWJcdWMxYWRcdWMxYWVcdWMxYWZcdWMxYjEi''@;'; put 'put ''LDExLCJcdWMxYmUiLDUsIlx1YzFjNVx1YzFjNlx1YzFjN1x1YzFjOVx1YzFjYVx1YzFjYlx1YzFjZCIsNiwiXHVjMWQ1XHVjMWQ2XHVjMWQ5Iiw2LCJcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTkiLDYsIlx1YzFmMlx1YzFmNCIsNywiXHVjMWZlXHVjMWZmXHVj''@;'; put 'put ''MjAxXHVjMjAyXHVjMjAzXHVjMjA1Iiw2LCJcdWMyMGVcdWMyMTBcdWMyMTIiLDUsIlx1YzIxYVx1YzIxYlx1YzIxZFx1YzIxZVx1YzIyMVx1YzIyMlx1YzIyMyJdLFsiOWE0MSIsIlx1YzIyNFx1YzIyNVx1YzIyNlx1YzIyN1x1YzIyYVx1YzIyY1x1YzIyZVx1YzIzMFx1YzIzM1x1YzIzNSIs''@;'; put 'put ''MTZdLFsiOWE2MSIsIlx1YzI0Nlx1YzI0N1x1YzI0OSIsNiwiXHVjMjUyXHVjMjUzXHVjMjU1XHVjMjU2XHVjMjU3XHVjMjU5Iiw2LCJcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjYiXSxbIjlhODEiLCJcdWMyNjciLDQsIlx1YzI2ZVx1YzI2Zlx1YzI3MVx1YzI3Mlx1YzI3M1x1YzI3''@;'; put 'put ''NSIsNiwiXHVjMjdlXHVjMjgwXHVjMjgyIiw1LCJcdWMyOGEiLDUsIlx1YzI5MSIsNiwiXHVjMjk5XHVjMjlhXHVjMjljXHVjMjllIiw1LCJcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWUiLDUsIlx1YzJiNlx1YzJiOFx1YzJiYSIsMzMsIlx1YzJkZVx1YzJkZlx1YzJlMVx1''@;'; put 'put ''YzJlMlx1YzJlNSIsNSwiXHVjMmVlXHVjMmYwXHVjMmYyXHVjMmYzXHVjMmY0XHVjMmY1XHVjMmY3XHVjMmZhXHVjMmZkXHVjMmZlXHVjMmZmXHVjMzAxIiw2LCJcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGYiXSxbIjliNDEiLCJcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlc''@;'; put 'put ''dWMzMWFcdWMzMWJcdWMzMWQiLDYsIlx1YzMyNlx1YzMyN1x1YzMyYSIsOF0sWyI5YjYxIiwiXHVjMzMzIiwxNywiXHVjMzQ2Iiw3XSxbIjliODEiLCJcdWMzNGUiLDI1LCJcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMzNzFcdWMzNzMiLDQsIlx1YzM3YVx1YzM3Ylx1YzM3ZSIs''@;'; put 'put ''NSwiXHVjMzg1XHVjMzg2XHVjMzg3XHVjMzg5XHVjMzhhXHVjMzhiXHVjMzhkIiw1MCwiXHVjM2MxIiwyMiwiXHVjM2RhIl0sWyI5YzQxIiwiXHVjM2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVjM2UzIiw0LCJcdWMzZWFcdWMzZWJcdWMzZWNcdWMzZWUiLDUsIlx1YzNmNlx1YzNmN1x1YzNmOSIs''@;'; put 'put ''NV0sWyI5YzYxIiwiXHVjM2ZmIiw4LCJcdWM0MDkiLDYsIlx1YzQxMSIsOV0sWyI5YzgxIiwiXHVjNDFiIiw4LCJcdWM0MjUiLDYsIlx1YzQyZFx1YzQyZVx1YzQyZlx1YzQzMVx1YzQzMlx1YzQzM1x1YzQzNSIsNiwiXHVjNDNlIiw5LCJcdWM0NDkiLDI2LCJcdWM0NjZcdWM0NjdcdWM0Njlc''@;'; put 'put ''dWM0NmFcdWM0NmJcdWM0NmQiLDYsIlx1YzQ3Nlx1YzQ3N1x1YzQ3OFx1YzQ3YSIsNSwiXHVjNDgxIiwxOCwiXHVjNDk1Iiw2LCJcdWM0OWQiLDEyXSxbIjlkNDEiLCJcdWM0YWEiLDEzLCJcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmQiLDhdLFsiOWQ2MSIsIlx1YzRjNiIsMjVdLFsiOWQ4MSIs''@;'; put 'put ''Ilx1YzRlMCIsOCwiXHVjNGVhIiw1LCJcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1MDIiLDksIlx1YzUwZFx1YzUwZVx1YzUwZlx1YzUxMVx1YzUxMlx1YzUxM1x1YzUxNSIsNiwiXHVjNTFkIiwxMCwiXHVjNTJhXHVjNTJi''@;'; put 'put ''XHVjNTJkXHVjNTJlXHVjNTJmXHVjNTMxIiw2LCJcdWM1M2FcdWM1M2NcdWM1M2UiLDUsIlx1YzU0Nlx1YzU0N1x1YzU0Ylx1YzU0Zlx1YzU1MFx1YzU1MVx1YzU1Mlx1YzU1Nlx1YzU1YVx1YzU1Ylx1YzU1Y1x1YzU1Zlx1YzU2Mlx1YzU2M1x1YzU2NVx1YzU2Nlx1YzU2N1x1YzU2OSIsNiwi''@;'; put 'put ''XHVjNTcyXHVjNTc2Iiw1LCJcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTQiXSxbIjllNDEiLCJcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1''@;'; put 'put ''OWZcdWM1YTEiLDcsIlx1YzVhYSIsOSwiXHVjNWI2Il0sWyI5ZTYxIiwiXHVjNWI3XHVjNWJhXHVjNWJmIiw0LCJcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDkiLDYsIlx1YzVlMlx1YzVlNFx1YzVlNlx1YzVlNyJdLFsiOWU4MSIsIlx1YzVl''@;'; put 'put ''OFx1YzVlOVx1YzVlYVx1YzVlYlx1YzVlZlx1YzVmMVx1YzVmMlx1YzVmM1x1YzVmNVx1YzVmOFx1YzVmOVx1YzVmYVx1YzVmYlx1YzYwMlx1YzYwM1x1YzYwNFx1YzYwOVx1YzYwYVx1YzYwYlx1YzYwZFx1YzYwZVx1YzYwZlx1YzYxMSIsNiwiXHVjNjFhXHVjNjFkIiw2LCJcdWM2MjZcdWM2''@;'; put 'put ''MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDkiLDYsIlx1YzY1Mlx1YzY1NiIsNSwiXHVjNjVlXHVjNjVmXHVjNjYxIiwxMCwiXHVj''@;'; put 'put ''NjZkXHVjNjZlXHVjNjcwXHVjNjcyIiw1LCJcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODEiLDYsIlx1YzY4YVx1YzY4Y1x1YzY4ZSIsNSwiXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjliXHVjNjlkIiw2LCJcdWM2YTYiXSxbIjlmNDEiLCJcdWM2YThcdWM2YWEiLDUs''@;'; put 'put ''Ilx1YzZiMlx1YzZiM1x1YzZiNVx1YzZiNlx1YzZiN1x1YzZiYiIsNCwiXHVjNmMyXHVjNmM0XHVjNmM2Iiw1LCJcdWM2Y2UiXSxbIjlmNjEiLCJcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDUiLDYsIlx1YzZkZVx1YzZkZlx1YzZlMiIsNSwiXHVjNmVhXHVjNmViXHVjNmVkXHVjNmVl''@;'; put 'put ''XHVjNmVmXHVjNmYxXHVjNmYyIl0sWyI5ZjgxIiwiXHVjNmYzIiw0LCJcdWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmUiLDUsIlx1YzcwNlx1YzcwN1x1YzcwOVx1YzcwYVx1YzcwYlx1YzcwZCIsNiwiXHVjNzE2XHVjNzE4XHVjNzFhIiw1LCJcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3Mjdc''@;'; put 'put ''dWM3MjkiLDYsIlx1YzczMlx1YzczNFx1YzczNlx1YzczOFx1YzczOVx1YzczYVx1YzczYlx1YzczZVx1YzczZlx1Yzc0MVx1Yzc0Mlx1Yzc0M1x1Yzc0NSIsNCwiXHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVjNzVhXHVjNzViXHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxIiw2LCJcdWM3Njlc''@;'; put 'put ''dWM3NmFcdWM3NmMiLDcsIlx1Yzc3Nlx1Yzc3N1x1Yzc3OVx1Yzc3YVx1Yzc3Ylx1Yzc3Zlx1Yzc4MFx1Yzc4MVx1Yzc4Mlx1Yzc4Nlx1Yzc4Ylx1Yzc4Y1x1Yzc4ZFx1Yzc4Zlx1Yzc5Mlx1Yzc5M1x1Yzc5NVx1Yzc5OVx1Yzc5YiIsNCwiXHVjN2EyXHVjN2E3Iiw0LCJcdWM3YWVcdWM3YWZc''@;'; put 'put ''dWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjciXSxbImEwNDEiLCJcdWM3YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzIiLDUsIlx1YzdjYVx1YzdjYlx1YzdjZFx1YzdjZlx1YzdkMSIsNiwiXHVjN2Q5XHVjN2RhXHVjN2RiXHVjN2RjIl0sWyJhMDYxIiwiXHVjN2Rl''@;'; put 'put ''Iiw1LCJcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWQiLDEzXSxbImEwODEiLCJcdWM3ZmIiLDQsIlx1YzgwMlx1YzgwM1x1YzgwNVx1YzgwNlx1YzgwN1x1YzgwOVx1YzgwYiIsNCwiXHVjODEyXHVjODE0XHVjODE3Iiw0LCJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4''@;'; put 'put ''MjJcdWM4MjNcdWM4MjUiLDYsIlx1YzgyZVx1YzgzMFx1YzgzMiIsNSwiXHVjODM5XHVjODNhXHVjODNiXHVjODNkXHVjODNlXHVjODNmXHVjODQxIiw2LCJcdWM4NGFcdWM4NGJcdWM4NGUiLDUsIlx1Yzg1NSIsMjYsIlx1Yzg3Mlx1Yzg3M1x1Yzg3NVx1Yzg3Nlx1Yzg3N1x1Yzg3OVx1Yzg3''@;'; put 'put ''YiIsNCwiXHVjODgyXHVjODg0XHVjODg4XHVjODg5XHVjODhhXHVjODhlIiw1LCJcdWM4OTUiLDcsIlx1Yzg5ZVx1YzhhMFx1YzhhMlx1YzhhM1x1YzhhNCJdLFsiYTE0MSIsIlx1YzhhNVx1YzhhNlx1YzhhN1x1YzhhOSIsMTgsIlx1YzhiZVx1YzhiZlx1YzhjMFx1YzhjMSJdLFsiYTE2MSIs''@;'; put 'put ''Ilx1YzhjMlx1YzhjM1x1YzhjNVx1YzhjNlx1YzhjN1x1YzhjOVx1YzhjYVx1YzhjYlx1YzhjZCIsNiwiXHVjOGQ2XHVjOGQ4XHVjOGRhIiw1LCJcdWM4ZTJcdWM4ZTNcdWM4ZTUiXSxbImExODEiLCJcdWM4ZTYiLDE0LCJcdWM4ZjYiLDUsIlx1YzhmZVx1YzhmZlx1YzkwMVx1YzkwMlx1Yzkw''@;'; put 'put ''M1x1YzkwNyIsNCwiXHVjOTBlXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MjAyNVx1MjAyNlx4YThcdTMwMDNceGFkXHUyMDE1XHUyMjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4Iiw5LCJceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIy''@;'; put 'put ''NjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVj''@;'; put 'put ''Nlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1''@;'; put 'put ''MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMiJdLFsiYTI0MSIsIlx1YzkxMFx1YzkxMiIsNSwiXHVjOTE5IiwxOF0sWyJhMjYxIiwiXHVjOTJkIiw2LCJcdWM5MzUiLDE4XSxbImEyODEiLCJcdWM5NDgiLDcsIlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OSIsNiwiXHVjOTYyXHVj''@;'; put 'put ''OTY0Iiw3LCJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNceGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUwMmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1MjAzMFx1MjVjMVx1MjVjMFx1MjVi''@;'; put 'put ''N1x1MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5OVx1MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIx''@;'; put 'put ''OTVcdTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFcdTI2NmNcdTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdcdTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlIl0sWyJhMzQxIiwiXHVjOTcxXHVjOTcyXHVjOTczXHVjOTc1Iiw2LCJcdWM5N2QiLDEwLCJcdWM5''@;'; put 'put ''OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGYiXSxbImEzNjEiLCJcdWM5OTEiLDYsIlx1Yzk5YVx1Yzk5Y1x1Yzk5ZSIsMTZdLFsiYTM4MSIsIlx1YzlhZiIsMTYsIlx1YzljMlx1YzljM1x1YzljNVx1YzljNlx1YzljOVx1YzljYiIsNCwiXHVjOWQyXHVjOWQ0XHVjOWQ3XHVjOWQ4XHVjOWRi''@;'; put 'put ''XHVmZjAxIiw1OCwiXHVmZmU2XHVmZjNkIiwzMiwiXHVmZmUzIl0sWyJhNDQxIiwiXHVjOWRlXHVjOWRmXHVjOWUxXHVjOWUzXHVjOWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVjOWViXHVjOWVlXHVjOWYyIiw1LCJcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNh''@;'; put 'put ''MDJcdWNhMDNcdWNhMDQiXSxbImE0NjEiLCJcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGUiLDUsIlx1Y2ExNVx1Y2ExNlx1Y2ExN1x1Y2ExOSIsMTJdLFsiYTQ4MSIsIlx1Y2EyNlx1Y2EyN1x1Y2EyOFx1Y2EyYSIsMjgsIlx1MzEzMSIsOTNdLFsiYTU0MSIsIlx1Y2E0NyIsNCwiXHVj''@;'; put 'put ''YTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1Iiw2LCJcdWNhNWVcdWNhNjIiLDUsIlx1Y2E2OVx1Y2E2YSJdLFsiYTU2MSIsIlx1Y2E2YiIsMTcsIlx1Y2E3ZSIsNSwiXHVjYTg1XHVjYTg2Il0sWyJhNTgxIiwiXHVjYTg3IiwxNiwiXHVjYTk5IiwxNCwiXHUyMTcwIiw5XSxbImE1''@;'; put 'put ''YjAiLCJcdTIxNjAiLDldLFsiYTVjMSIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNWUxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE2NDEiLCJcdWNhYTgiLDE5LCJcdWNhYmVcdWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzUiXSxbImE2NjEiLCJcdWNhYzYiLDUsIlx1Y2Fj''@;'; put 'put ''ZVx1Y2FkMFx1Y2FkMlx1Y2FkNFx1Y2FkNVx1Y2FkNlx1Y2FkN1x1Y2FkYSIsNSwiXHVjYWUxIiw2XSxbImE2ODEiLCJcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWQiLDYsIlx1Y2FmNSIsMTgsIlx1Y2IwOVx1Y2IwYVx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1''@;'; put 'put ''MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1MjUxMlx1MjUx''@;'; put 'put ''MVx1MjUxYVx1MjUxOVx1MjUxNlx1MjUxNVx1MjUwZVx1MjUwZFx1MjUxZVx1MjUxZlx1MjUyMVx1MjUyMlx1MjUyNlx1MjUyN1x1MjUyOVx1MjUyYVx1MjUyZFx1MjUyZVx1MjUzMVx1MjUzMlx1MjUzNVx1MjUzNlx1MjUzOVx1MjUzYVx1MjUzZFx1MjUzZVx1MjU0MFx1MjU0MVx1MjU0MyIs''@;'; put 'put ''N10sWyJhNzQxIiwiXHVjYjBiIiw0LCJcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTkiLDYsIlx1Y2IyMiIsN10sWyJhNzYxIiwiXHVjYjJhIiwyMiwiXHVjYjQyXHVjYjQzXHVjYjQ0Il0sWyJhNzgxIiwiXHVjYjQ1XHVjYjQ2XHVjYjQ3XHVjYjRhXHVjYjRiXHVj''@;'; put 'put ''YjRkXHVjYjRlXHVjYjRmXHVjYjUxIiw2LCJcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWUiLDUsIlx1Y2I2NSIsNywiXHUzMzk1XHUzMzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUzMzk5Iiw5LCJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMz''@;'; put 'put ''Y2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjAiLDksIlx1MzM4MCIsNCwiXHUzM2JhIiw1LCJcdTMzOTAiLDQsIlx1MjEyNlx1MzNjMFx1MzNjMVx1MzM4YVx1MzM4Ylx1MzM4Y1x1MzNkNlx1MzNjNVx1MzNhZFx1MzNhZVx1MzNhZlx1MzNkYlx1MzNhOVx1MzNhYVx1MzNh''@;'; put 'put ''Ylx1MzNhY1x1MzNkZFx1MzNkMFx1MzNkM1x1MzNjM1x1MzNjOVx1MzNkY1x1MzNjNiJdLFsiYTg0MSIsIlx1Y2I2ZCIsMTAsIlx1Y2I3YSIsMTRdLFsiYTg2MSIsIlx1Y2I4OSIsMTgsIlx1Y2I5ZCIsNl0sWyJhODgxIiwiXHVjYmE0IiwxOSwiXHVjYmI5IiwxMSwiXHhjNlx4ZDBceGFhXHUw''@;'; put 'put ''MTI2Il0sWyJhOGE2IiwiXHUwMTMyIl0sWyJhOGE4IiwiXHUwMTNmXHUwMTQxXHhkOFx1MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRhIl0sWyJhOGIxIiwiXHUzMjYwIiwyNywiXHUyNGQwIiwyNSwiXHUyNDYwIiwxNCwiXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVk''@;'; put 'put ''XHUyMTVlIl0sWyJhOTQxIiwiXHVjYmM1IiwxNCwiXHVjYmQ1IiwxMF0sWyJhOTYxIiwiXHVjYmUwXHVjYmUxXHVjYmUyXHVjYmUzXHVjYmU1XHVjYmU2XHVjYmU4XHVjYmVhIiwxOF0sWyJhOTgxIiwiXHVjYmZkIiwxNCwiXHVjYzBlXHVjYzBmXHVjYzExXHVjYzEyXHVjYzEzXHVjYzE1Iiw2''@;'; put 'put ''LCJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMCIsMjcsIlx1MjQ5YyIsMjUsIlx1MjQ3NCIsMTQsIlx4YjlceGIyXHhi''@;'; put 'put ''M1x1MjA3NFx1MjA3Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NCJdLFsiYWE0MSIsIlx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMSIsNiwiXHVjYzNhXHVjYzNmIiw0LCJcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFcdWNjNGJcdWNjNGRcdWNjNGUiXSxbImFhNjEi''@;'; put 'put ''LCJcdWNjNGYiLDQsIlx1Y2M1Nlx1Y2M1YSIsNSwiXHVjYzYxXHVjYzYyXHVjYzYzXHVjYzY1XHVjYzY3XHVjYzY5Iiw2LCJcdWNjNzFcdWNjNzIiXSxbImFhODEiLCJcdWNjNzNcdWNjNzRcdWNjNzYiLDI5LCJcdTMwNDEiLDgyXSxbImFiNDEiLCJcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdc''@;'; put 'put ''dWNjOWFcdWNjOWJcdWNjOWRcdWNjOWVcdWNjOWZcdWNjYTEiLDYsIlx1Y2NhYVx1Y2NhZSIsNSwiXHVjY2I2XHVjY2I3XHVjY2I5Il0sWyJhYjYxIiwiXHVjY2JhXHVjY2JiXHVjY2JkIiw2LCJcdWNjYzZcdWNjYzhcdWNjY2EiLDUsIlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNSIsNV0sWyJh''@;'; put 'put ''YjgxIiwiXHVjY2RiIiw4LCJcdWNjZTUiLDYsIlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1Y2NmMSIsMTIsIlx1MzBhMSIsODVdLFsiYWM0MSIsIlx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMiIsNSwiXHVjZDBhXHVjZDBiXHVjZDBkXHVjZDBlXHVjZDBmXHVjZDExIiw2LCJcdWNkMWFcdWNkMWNcdWNk''@;'; put 'put ''MWVcdWNkMWZcdWNkMjAiXSxbImFjNjEiLCJcdWNkMjFcdWNkMjJcdWNkMjNcdWNkMjVcdWNkMjZcdWNkMjdcdWNkMjlcdWNkMmFcdWNkMmJcdWNkMmQiLDExLCJcdWNkM2EiLDRdLFsiYWM4MSIsIlx1Y2QzZiIsMjgsIlx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2''@;'; put 'put ''IiwyNV0sWyJhY2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxbImFkNDEiLCJcdWNkNjFcdWNkNjJcdWNkNjNcdWNkNjUiLDYsIlx1Y2Q2ZVx1Y2Q3MFx1Y2Q3MiIsNSwiXHVjZDc5Iiw3XSxbImFkNjEiLCJcdWNkODEiLDYsIlx1Y2Q4OSIsMTAsIlx1Y2Q5Nlx1Y2Q5N1x1Y2Q5''@;'; put 'put ''OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5ZiJdLFsiYWQ4MSIsIlx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1Y2RhOFx1Y2RhYSIsNSwiXHVjZGIxIiwxOCwiXHVjZGM1Il0sWyJhZTQxIiwiXHVjZGM2Iiw1LCJcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDEiLDE2XSxbImFl''@;'; put 'put ''NjEiLCJcdWNkZTIiLDUsIlx1Y2RlOVx1Y2RlYVx1Y2RlYlx1Y2RlZFx1Y2RlZVx1Y2RlZlx1Y2RmMSIsNiwiXHVjZGZhXHVjZGZjXHVjZGZlIiw0XSxbImFlODEiLCJcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNlMGQiLDYsIlx1Y2UxNVx1Y2UxNlx1Y2Ux''@;'; put 'put ''N1x1Y2UxOFx1Y2UxYSIsNSwiXHVjZTIyXHVjZTIzXHVjZTI1XHVjZTI2XHVjZTI3XHVjZTI5XHVjZTJhXHVjZTJiIl0sWyJhZjQxIiwiXHVjZTJjXHVjZTJkXHVjZTJlXHVjZTJmXHVjZTMyXHVjZTM0XHVjZTM2IiwxOV0sWyJhZjYxIiwiXHVjZTRhIiwxMywiXHVjZTVhXHVjZTViXHVjZTVk''@;'; put 'put ''XHVjZTVlXHVjZTYyIiw1LCJcdWNlNmFcdWNlNmMiXSxbImFmODEiLCJcdWNlNmUiLDUsIlx1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZCIsNiwiXHVjZTg2XHVjZTg4XHVjZThhIiw1LCJcdWNlOTJcdWNlOTNcdWNlOTVcdWNlOTZcdWNlOTdcdWNlOTkiXSxbImIwNDEiLCJc''@;'; put 'put ''dWNlOWEiLDUsIlx1Y2VhMlx1Y2VhNiIsNSwiXHVjZWFlIiwxMl0sWyJiMDYxIiwiXHVjZWJiIiw1LCJcdWNlYzIiLDE5XSxbImIwODEiLCJcdWNlZDYiLDEzLCJcdWNlZTZcdWNlZTdcdWNlZTlcdWNlZWFcdWNlZWQiLDYsIlx1Y2VmNlx1Y2VmYSIsNSwiXHVhYzAwXHVhYzAxXHVhYzA0XHVh''@;'; put 'put ''YzA3XHVhYzA4XHVhYzA5XHVhYzBhXHVhYzEwIiw3LCJcdWFjMTkiLDQsIlx1YWMyMFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1''@;'; put 'put ''YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNi''@;'; put 'put ''Ylx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNiJdLFsiYjE0''@;'; put 'put ''MSIsIlx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2YwN1x1Y2YwOSIsNiwiXHVjZjEyXHVjZjE0XHVjZjE2Iiw1LCJcdWNmMWRcdWNmMWVcdWNmMWZcdWNmMjFcdWNmMjJcdWNmMjMiXSxbImIxNjEiLCJcdWNmMjUiLDYsIlx1Y2YyZVx1Y2YzMiIsNSwiXHVjZjM5IiwxMV0sWyJiMTgxIiwi''@;'; put 'put ''XHVjZjQ1IiwxNCwiXHVjZjU2XHVjZjU3XHVjZjU5XHVjZjVhXHVjZjViXHVjZjVkIiw2LCJcdWNmNjZcdWNmNjhcdWNmNmFcdWNmNmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRcdWFkMzVcdWFkMzhcdWFk''@;'; put 'put ''M2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFkNjFcdWFkNjNcdWFkNmNcdWFkNmRcdWFkNzBcdWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJcdWFkODhcdWFkODlcdWFkOGNcdWFkOTBcdWFkOWNc''@;'; put 'put ''dWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBcdWFkZDFcdWFkZDNcdWFkZGNcdWFkZTBcdWFkZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBcdWFlMzFcdWFlMzRcdWFl''@;'; put 'put ''MzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFlNGFcdWFlNGNcdWFlNGRcdWFlNGVcdWFlNTBcdWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFlNzgiXSxbImIyNDEiLCJc''@;'; put 'put ''dWNmNmRcdWNmNmVcdWNmNmZcdWNmNzJcdWNmNzNcdWNmNzVcdWNmNzZcdWNmNzdcdWNmNzkiLDYsIlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4NiIsNSwiXHVjZjhkIl0sWyJiMjYxIiwiXHVjZjhlIiwxOCwiXHVjZmEyIiw1LCJcdWNmYTkiXSxbImIyODEiLCJcdWNmYWEiLDUsIlx1''@;'; put 'put ''Y2ZiMSIsMTgsIlx1Y2ZjNSIsNiwiXHVhZTc5XHVhZTdiXHVhZTdjXHVhZTdkXHVhZTg0XHVhZTg1XHVhZThjXHVhZWJjXHVhZWJkXHVhZWJlXHVhZWMwXHVhZWM0XHVhZWNjXHVhZWNkXHVhZWNmXHVhZWQwXHVhZWQxXHVhZWQ4XHVhZWQ5XHVhZWRjXHVhZWU4XHVhZWViXHVhZWVkXHVhZWY0''@;'; put 'put ''XHVhZWY4XHVhZWZjXHVhZjA3XHVhZjA4XHVhZjBkXHVhZjEwXHVhZjJjXHVhZjJkXHVhZjMwXHVhZjMyXHVhZjM0XHVhZjNjXHVhZjNkXHVhZjNmXHVhZjQxXHVhZjQyXHVhZjQzXHVhZjQ4XHVhZjQ5XHVhZjUwXHVhZjVjXHVhZjVkXHVhZjY0XHVhZjY1XHVhZjc5XHVhZjgwXHVhZjg0XHVh''@;'; put 'put ''Zjg4XHVhZjkwXHVhZjkxXHVhZjk1XHVhZjljXHVhZmI4XHVhZmI5XHVhZmJjXHVhZmMwXHVhZmM3XHVhZmM4XHVhZmM5XHVhZmNiXHVhZmNkXHVhZmNlXHVhZmQ0XHVhZmRjXHVhZmU4XHVhZmU5XHVhZmYwXHVhZmYxXHVhZmY0XHVhZmY4XHViMDAwXHViMDAxXHViMDA0XHViMDBjXHViMDEw''@;'; put 'put ''XHViMDE0XHViMDFjXHViMDFkXHViMDI4XHViMDQ0XHViMDQ1XHViMDQ4XHViMDRhXHViMDRjXHViMDRlXHViMDUzXHViMDU0XHViMDU1XHViMDU3XHViMDU5Il0sWyJiMzQxIiwiXHVjZmNjIiwxOSwiXHVjZmUyXHVjZmUzXHVjZmU1XHVjZmU2XHVjZmU3XHVjZmU5Il0sWyJiMzYxIiwiXHVj''@;'; put 'put ''ZmVhIiw1LCJcdWNmZjJcdWNmZjRcdWNmZjYiLDUsIlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNSIsNV0sWyJiMzgxIiwiXHVkMDBiIiw1LCJcdWQwMTIiLDUsIlx1ZDAxOSIsMTksIlx1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1''@;'; put 'put ''YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYiIsNCwiXHViMGIxXHViMGIzXHViMGI0XHViMGI1XHViMGI4XHViMGJjXHViMGM0XHViMGM1XHViMGM3XHViMGM4XHViMGM5XHViMGQwXHViMGQxXHViMGQ0''@;'; put 'put ''XHViMGQ4XHViMGUwXHViMGU1XHViMTA4XHViMTA5XHViMTBiXHViMTBjXHViMTEwXHViMTEyXHViMTEzXHViMTE4XHViMTE5XHViMTFiXHViMTFjXHViMTFkXHViMTIzXHViMTI0XHViMTI1XHViMTI4XHViMTJjXHViMTM0XHViMTM1XHViMTM3XHViMTM4XHViMTM5XHViMTQwXHViMTQxXHVi''@;'; put 'put ''MTQ0XHViMTQ4XHViMTUwXHViMTUxXHViMTU0XHViMTU1XHViMTU4XHViMTVjXHViMTYwXHViMTc4XHViMTc5XHViMTdjXHViMTgwXHViMTgyXHViMTg4XHViMTg5XHViMThiXHViMThkXHViMTkyXHViMTkzXHViMTk0XHViMTk4XHViMTljXHViMWE4XHViMWNjXHViMWQwXHViMWQ0XHViMWRj''@;'; put 'put ''XHViMWRkIl0sWyJiNDQxIiwiXHVkMDJlIiw1LCJcdWQwMzZcdWQwMzdcdWQwMzlcdWQwM2FcdWQwM2JcdWQwM2QiLDYsIlx1ZDA0Nlx1ZDA0OFx1ZDA0YSIsNV0sWyJiNDYxIiwiXHVkMDUxXHVkMDUyXHVkMDUzXHVkMDU1XHVkMDU2XHVkMDU3XHVkMDU5Iiw2LCJcdWQwNjEiLDEwLCJcdWQw''@;'; put 'put ''NmVcdWQwNmYiXSxbImI0ODEiLCJcdWQwNzFcdWQwNzJcdWQwNzNcdWQwNzUiLDYsIlx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4MiIsMTgsIlx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIwY1x1YjIxNFx1''@;'; put 'put ''YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1OFx1YjI1Y1x1YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1YjJhNVx1YjJh''@;'; put 'put ''Nlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1YjJjY1x1YjJkMFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYiIsNCwiXHViMmYzXHViMmY0XHViMmY1XHViMmY3Iiw0LCJcdWIyZmZcdWIzMDBcdWIz''@;'; put 'put ''MDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRcdWIzMTVcdWIzMWNcdWIzNTRcdWIzNTVcdWIzNTZcdWIzNThcdWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjUiXSxbImI1NDEiLCJcdWQwOTUiLDE0LCJcdWQwYTZcdWQwYTdcdWQwYTlcdWQwYWFcdWQwYWJc''@;'; put 'put ''dWQwYWQiLDVdLFsiYjU2MSIsIlx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYSIsNSwiXHVkMGMyXHVkMGMzXHVkMGM1XHVkMGM2XHVkMGM3XHVkMGNhIiw1LCJcdWQwZDJcdWQwZDYiLDRdLFsiYjU4MSIsIlx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNSIsNiwiXHVk''@;'; put 'put ''MGVlXHVkMGYyIiw1LCJcdWQwZjkiLDExLCJcdWIzNjdcdWIzNjlcdWIzNmJcdWIzNmVcdWIzNzBcdWIzNzFcdWIzNzRcdWIzNzhcdWIzODBcdWIzODFcdWIzODNcdWIzODRcdWIzODVcdWIzOGNcdWIzOTBcdWIzOTRcdWIzYTBcdWIzYTFcdWIzYThcdWIzYWNcdWIzYzRcdWIzYzVcdWIzYzhc''@;'; put 'put ''dWIzY2JcdWIzY2NcdWIzY2VcdWIzZDBcdWIzZDRcdWIzZDVcdWIzZDdcdWIzZDlcdWIzZGJcdWIzZGRcdWIzZTBcdWIzZTRcdWIzZThcdWIzZmNcdWI0MTBcdWI0MThcdWI0MWNcdWI0MjBcdWI0MjhcdWI0MjlcdWI0MmJcdWI0MzRcdWI0NTBcdWI0NTFcdWI0NTRcdWI0NThcdWI0NjBcdWI0''@;'; put 'put ''NjFcdWI0NjNcdWI0NjVcdWI0NmNcdWI0ODBcdWI0ODhcdWI0OWRcdWI0YTRcdWI0YThcdWI0YWNcdWI0YjVcdWI0YjdcdWI0YjlcdWI0YzBcdWI0YzRcdWI0YzhcdWI0ZDBcdWI0ZDVcdWI0ZGNcdWI0ZGRcdWI0ZTBcdWI0ZTNcdWI0ZTRcdWI0ZTZcdWI0ZWNcdWI0ZWRcdWI0ZWZcdWI0ZjFc''@;'; put 'put ''dWI0ZjhcdWI1MTRcdWI1MTVcdWI1MThcdWI1MWJcdWI1MWNcdWI1MjRcdWI1MjVcdWI1MjdcdWI1MjhcdWI1MjlcdWI1MmFcdWI1MzBcdWI1MzFcdWI1MzRcdWI1MzgiXSxbImI2NDEiLCJcdWQxMDUiLDcsIlx1ZDEwZSIsMTddLFsiYjY2MSIsIlx1ZDEyMCIsMTUsIlx1ZDEzMlx1ZDEzM1x1''@;'; put 'put ''ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZSJdLFsiYjY4MSIsIlx1ZDEzZlx1ZDE0Mlx1ZDE0NiIsNSwiXHVkMTRlXHVkMTRmXHVkMTUxXHVkMTUyXHVkMTUzXHVkMTU1Iiw2LCJcdWQxNWVcdWQxNjBcdWQxNjIiLDUsIlx1ZDE2OVx1ZDE2YVx1ZDE2Ylx1''@;'; put 'put ''ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjVi''@;'; put 'put ''Ylx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1''@;'; put 'put ''YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3''@;'; put 'put ''NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5NyJdLFsiYjc0MSIsIlx1ZDE2ZSIsMTMsIlx1ZDE3ZCIsNiwiXHVkMTg1XHVkMTg2XHVkMTg3XHVkMTg5XHVkMThhIl0sWyJiNzYxIiwiXHVkMThiIiwyMCwiXHVk''@;'; put 'put ''MWEyXHVkMWEzXHVkMWE1XHVkMWE2XHVkMWE3Il0sWyJiNzgxIiwiXHVkMWE5Iiw2LCJcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZcdWQxYzEiLDE0LCJcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJc''@;'; put 'put ''dWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4''@;'; put 'put ''MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4MzhcdWI4MzlcdWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRcdWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFcdWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFc''@;'; put 'put ''dWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5''@;'; put 'put ''NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjkiXSxbImI4NDEiLCJcdWQxZDAiLDcsIlx1ZDFkOSIsMTddLFsiYjg2MSIsIlx1ZDFlYiIsOCwiXHVkMWY1XHVkMWY2XHVkMWY3XHVkMWY5IiwxM10sWyJiODgxIiwiXHVkMjA4XHVkMjBhIiw1LCJcdWQyMTEiLDI0LCJcdWI5NmJcdWI5NmRcdWI5''@;'; put 'put ''NzRcdWI5NzVcdWI5NzhcdWI5N2NcdWI5ODRcdWI5ODVcdWI5ODdcdWI5ODlcdWI5OGFcdWI5OGRcdWI5OGVcdWI5YWNcdWI5YWRcdWI5YjBcdWI5YjRcdWI5YmNcdWI5YmRcdWI5YmZcdWI5YzFcdWI5YzhcdWI5YzlcdWI5Y2NcdWI5Y2UiLDQsIlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1''@;'; put 'put ''YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1''@;'; put 'put ''M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1''@;'; put 'put ''YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmYyJdLFsiYjk0MSIsIlx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNSIsNiwiXHVkMjNlXHVkMjQwXHVkMjQyIiw1LCJcdWQyNDlcdWQyNGFcdWQyNGJcdWQyNGMiXSxbImI5NjEiLCJcdWQyNGQi''@;'; put 'put ''LDE0LCJcdWQyNWQiLDYsIlx1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OCJdLFsiYjk4MSIsIlx1ZDI2OSIsMjIsIlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIy''@;'; put 'put ''MFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1''@;'; put 'put ''YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNCIsNCwiXHViYzFiIiw0LCJcdWJjMjRcdWJjMjVcdWJjMjdc''@;'; put 'put ''dWJjMjlcdWJjMmRcdWJjMzBcdWJjMzFcdWJjMzRcdWJjMzhcdWJjNDBcdWJjNDFcdWJjNDNcdWJjNDRcdWJjNDVcdWJjNDlcdWJjNGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVcdWJjODhcdWJjOGJcdWJjOGNcdWJjOGVcdWJjOTRcdWJjOTVcdWJjOTciXSxbImJhNDEiLCJcdWQy''@;'; put 'put ''OGRcdWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNcdWQyOTRcdWQyOTYiLDUsIlx1ZDI5ZFx1ZDI5ZVx1ZDI5Zlx1ZDJhMVx1ZDJhMlx1ZDJhM1x1ZDJhNSIsNiwiXHVkMmFkIl0sWyJiYTYxIiwiXHVkMmFlXHVkMmFmXHVkMmIwXHVkMmIyIiw1LCJcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQy''@;'; put 'put ''YzFcdWQyYzMiLDQsIlx1ZDJjYVx1ZDJjYyIsNV0sWyJiYTgxIiwiXHVkMmQyXHVkMmQzXHVkMmQ1XHVkMmQ2XHVkMmQ3XHVkMmQ5XHVkMmRhXHVkMmRiXHVkMmRkIiw2LCJcdWQyZTYiLDksIlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5OVx1YmM5YVx1''@;'; put 'put ''YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNiMVx1YmNiM1x1YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1YmQwNFx1YmQw''@;'; put 'put ''NVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5NVx1YmQ5OVx1''@;'; put 'put ''YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRkNVx1YmRkOFx1YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1YmU0Y1x1YmU0''@;'; put 'put ''ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1YmU2MFx1YmU2MVx1YmU2NCJdLFsiYmI0MSIsIlx1ZDJmYiIsNCwiXHVkMzAyXHVkMzA0XHVkMzA2Iiw1LCJcdWQzMGZcdWQzMTFcdWQzMTJcdWQzMTNcdWQzMTVcdWQzMTciLDQsIlx1ZDMxZVx1ZDMyMlx1ZDMyMyJdLFsi''@;'; put 'put ''YmI2MSIsIlx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMyZlx1ZDMzMSIsNiwiXHVkMzNhXHVkMzNlIiw1LCJcdWQzNDZcdWQzNDdcdWQzNDhcdWQzNDkiXSxbImJiODEiLCJcdWQzNGEiLDMxLCJcdWJlNjhcdWJlNmFcdWJlNzBcdWJlNzFcdWJlNzNcdWJl''@;'; put 'put ''NzRcdWJlNzVcdWJlN2JcdWJlN2NcdWJlN2RcdWJlODBcdWJlODRcdWJlOGNcdWJlOGRcdWJlOGZcdWJlOTBcdWJlOTFcdWJlOThcdWJlOTlcdWJlYThcdWJlZDBcdWJlZDFcdWJlZDRcdWJlZDdcdWJlZDhcdWJlZTBcdWJlZTNcdWJlZTRcdWJlZTVcdWJlZWNcdWJmMDFcdWJmMDhcdWJmMDlc''@;'; put 'put ''dWJmMThcdWJmMTlcdWJmMWJcdWJmMWNcdWJmMWRcdWJmNDBcdWJmNDFcdWJmNDRcdWJmNDhcdWJmNTBcdWJmNTFcdWJmNTVcdWJmOTRcdWJmYjBcdWJmYzVcdWJmY2NcdWJmY2RcdWJmZDBcdWJmZDRcdWJmZGNcdWJmZGZcdWJmZTFcdWMwM2NcdWMwNTFcdWMwNThcdWMwNWNcdWMwNjBcdWMw''@;'; put 'put ''NjhcdWMwNjlcdWMwOTBcdWMwOTFcdWMwOTRcdWMwOThcdWMwYTBcdWMwYTFcdWMwYTNcdWMwYTVcdWMwYWNcdWMwYWRcdWMwYWZcdWMwYjBcdWMwYjNcdWMwYjRcdWMwYjVcdWMwYjZcdWMwYmNcdWMwYmRcdWMwYmZcdWMwYzBcdWMwYzFcdWMwYzVcdWMwYzhcdWMwYzlcdWMwY2NcdWMwZDBc''@;'; put 'put ''dWMwZDhcdWMwZDlcdWMwZGJcdWMwZGNcdWMwZGRcdWMwZTQiXSxbImJjNDEiLCJcdWQzNmEiLDE3LCJcdWQzN2VcdWQzN2ZcdWQzODFcdWQzODJcdWQzODNcdWQzODVcdWQzODZcdWQzODciXSxbImJjNjEiLCJcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTIiLDUsIlx1ZDM5''@;'; put 'put ''YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMSIsNiwiXHVkM2FhXHVkM2FjXHVkM2FlIl0sWyJiYzgxIiwiXHVkM2FmIiw0LCJcdWQzYjVcdWQzYjZcdWQzYjdcdWQzYjlcdWQzYmFcdWQzYmJcdWQzYmQiLDYsIlx1ZDNjNlx1ZDNjN1x1ZDNjYSIsNSwiXHVkM2QxIiw1LCJcdWMwZTVc''@;'; put 'put ''dWMwZThcdWMwZWNcdWMwZjRcdWMwZjVcdWMwZjdcdWMwZjlcdWMxMDBcdWMxMDRcdWMxMDhcdWMxMTBcdWMxMTVcdWMxMWMiLDQsIlx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0''@;'; put 'put ''OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1''@;'; put 'put ''YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIx''@;'; put 'put ''OVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZCJdLFsiYmQ0MSIsIlx1ZDNkN1x1ZDNkOSIsNywiXHVkM2UyXHVkM2U0Iiw3LCJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQzZjciXSxbImJkNjEiLCJcdWQzZjhcdWQzZjlcdWQz''@;'; put 'put ''ZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDIiLDUsIlx1ZDQwOSIsMTNdLFsiYmQ4MSIsIlx1ZDQxNyIsNSwiXHVkNDFlIiwyNSwiXHVjMjJmXHVjMjMxXHVjMjMyXHVjMjM0XHVjMjQ4XHVjMjUwXHVjMjUxXHVjMjU0XHVjMjU4XHVjMjYwXHVjMjY1XHVjMjZjXHVjMjZkXHVjMjcwXHVjMjc0''@;'; put 'put ''XHVjMjdjXHVjMjdkXHVjMjdmXHVjMjgxXHVjMjg4XHVjMjg5XHVjMjkwXHVjMjk4XHVjMjliXHVjMjlkXHVjMmE0XHVjMmE1XHVjMmE4XHVjMmFjXHVjMmFkXHVjMmI0XHVjMmI1XHVjMmI3XHVjMmI5XHVjMmRjXHVjMmRkXHVjMmUwXHVjMmUzXHVjMmU0XHVjMmViXHVjMmVjXHVjMmVkXHVj''@;'; put 'put ''MmVmXHVjMmYxXHVjMmY2XHVjMmY4XHVjMmY5XHVjMmZiXHVjMmZjXHVjMzAwXHVjMzA4XHVjMzA5XHVjMzBjXHVjMzBkXHVjMzEzXHVjMzE0XHVjMzE1XHVjMzE4XHVjMzFjXHVjMzI0XHVjMzI1XHVjMzI4XHVjMzI5XHVjMzQ1XHVjMzY4XHVjMzY5XHVjMzZjXHVjMzcwXHVjMzcyXHVjMzc4''@;'; put 'put ''XHVjMzc5XHVjMzdjXHVjMzdkXHVjMzg0XHVjMzg4XHVjMzhjXHVjM2MwXHVjM2Q4XHVjM2Q5XHVjM2RjXHVjM2RmXHVjM2UwXHVjM2UyXHVjM2U4XHVjM2U5XHVjM2VkXHVjM2Y0XHVjM2Y1XHVjM2Y4XHVjNDA4XHVjNDEwXHVjNDI0XHVjNDJjXHVjNDMwIl0sWyJiZTQxIiwiXHVkNDM4Iiw3''@;'; put 'put ''LCJcdWQ0NDFcdWQ0NDJcdWQ0NDNcdWQ0NDUiLDE0XSxbImJlNjEiLCJcdWQ0NTQiLDcsIlx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NSIsNywiXHVkNDZlXHVkNDcwXHVkNDcxXHVkNDcyIl0sWyJiZTgxIiwiXHVkNDczIiw0LCJcdWQ0N2FcdWQ0N2JcdWQ0N2Rc''@;'; put 'put ''dWQ0N2VcdWQ0ODFcdWQ0ODMiLDQsIlx1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZSIsNSwiXHVkNDk1Iiw4LCJcdWM0MzRcdWM0M2NcdWM0M2RcdWM0NDhcdWM0NjRcdWM0NjVcdWM0NjhcdWM0NmNcdWM0NzRcdWM0NzVcdWM0NzlcdWM0ODBcdWM0OTRcdWM0OWNcdWM0YjhcdWM0YmNcdWM0ZTlcdWM0ZjBc''@;'; put 'put ''dWM0ZjFcdWM0ZjRcdWM0ZjhcdWM0ZmFcdWM0ZmZcdWM1MDBcdWM1MDFcdWM1MGNcdWM1MTBcdWM1MTRcdWM1MWNcdWM1MjhcdWM1MjlcdWM1MmNcdWM1MzBcdWM1MzhcdWM1MzlcdWM1M2JcdWM1M2RcdWM1NDRcdWM1NDVcdWM1NDhcdWM1NDlcdWM1NGFcdWM1NGNcdWM1NGRcdWM1NGVcdWM1''@;'; put 'put ''NTNcdWM1NTRcdWM1NTVcdWM1NTdcdWM1NThcdWM1NTlcdWM1NWRcdWM1NWVcdWM1NjBcdWM1NjFcdWM1NjRcdWM1NjhcdWM1NzBcdWM1NzFcdWM1NzNcdWM1NzRcdWM1NzVcdWM1N2NcdWM1N2RcdWM1ODBcdWM1ODRcdWM1ODdcdWM1OGNcdWM1OGRcdWM1OGZcdWM1OTFcdWM1OTVcdWM1OTdc''@;'; put 'put ''dWM1OThcdWM1OWNcdWM1YTBcdWM1YTlcdWM1YjRcdWM1YjVcdWM1YjhcdWM1YjlcdWM1YmJcdWM1YmNcdWM1YmRcdWM1YmVcdWM1YzQiLDYsIlx1YzVjY1x1YzVjZSJdLFsiYmY0MSIsIlx1ZDQ5ZSIsMTAsIlx1ZDRhYSIsMTRdLFsiYmY2MSIsIlx1ZDRiOSIsMTgsIlx1ZDRjZFx1ZDRjZVx1''@;'; put 'put ''ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNSJdLFsiYmY4MSIsIlx1ZDRkNiIsNSwiXHVkNGRkXHVkNGRlXHVkNGUwIiw3LCJcdWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjEiLDYsIlx1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1''@;'; put 'put ''YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmYyIsNSwiXHVjNjA1XHVjNjA2XHVjNjA3XHVjNjA4XHVjNjBjXHVjNjEwXHVjNjE4XHVjNjE5XHVjNjFiXHVjNjFjXHVjNjI0XHVjNjI1XHVjNjI4XHVjNjJjXHVjNjJk''@;'; put 'put ''XHVjNjJlXHVjNjMwXHVjNjMzXHVjNjM0XHVjNjM1XHVjNjM3XHVjNjM5XHVjNjNiXHVjNjQwXHVjNjQxXHVjNjQ0XHVjNjQ4XHVjNjUwXHVjNjUxXHVjNjUzXHVjNjU0XHVjNjU1XHVjNjVjXHVjNjVkXHVjNjYwXHVjNjZjXHVjNjZmXHVjNjcxXHVjNjc4XHVjNjc5XHVjNjdjXHVjNjgwXHVj''@;'; put 'put ''Njg4XHVjNjg5XHVjNjhiXHVjNjhkXHVjNjk0XHVjNjk1XHVjNjk4XHVjNjljXHVjNmE0XHVjNmE1XHVjNmE3XHVjNmE5XHVjNmIwXHVjNmIxXHVjNmI0XHVjNmI4XHVjNmI5XHVjNmJhXHVjNmMwXHVjNmMxXHVjNmMzXHVjNmM1XHVjNmNjXHVjNmNkXHVjNmQwXHVjNmQ0XHVjNmRjXHVjNmRk''@;'; put 'put ''XHVjNmUwXHVjNmUxXHVjNmU4Il0sWyJjMDQxIiwiXHVkNGZlIiw1LCJcdWQ1MDVcdWQ1MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGQiLDYsIlx1ZDUxNlx1ZDUxOCIsNV0sWyJjMDYxIiwiXHVkNTFlIiwyNV0sWyJjMDgxIiwiXHVkNTM4XHVkNTM5XHVkNTNhXHVkNTNiXHVkNTNl''@;'; put 'put ''XHVkNTNmXHVkNTQxXHVkNTQyXHVkNTQzXHVkNTQ1Iiw2LCJcdWQ1NGVcdWQ1NTBcdWQ1NTIiLDUsIlx1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1Yzcw''@;'; put 'put ''Y1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1YzcyNFx1YzcyOFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MSIsNywiXHVjNzVjXHVjNzYwXHVjNzY4XHVjNzZiXHVj''@;'; put 'put ''Nzc0XHVjNzc1XHVjNzc4XHVjNzdjXHVjNzdkXHVjNzdlXHVjNzgzXHVjNzg0XHVjNzg1XHVjNzg3XHVjNzg4XHVjNzg5XHVjNzhhXHVjNzhlXHVjNzkwXHVjNzkxXHVjNzk0XHVjNzk2XHVjNzk3XHVjNzk4XHVjNzlhXHVjN2EwXHVjN2ExXHVjN2EzXHVjN2E0XHVjN2E1XHVjN2E2XHVjN2Fj''@;'; put 'put ''XHVjN2FkXHVjN2IwXHVjN2I0XHVjN2JjXHVjN2JkXHVjN2JmXHVjN2MwXHVjN2MxXHVjN2M4XHVjN2M5XHVjN2NjXHVjN2NlXHVjN2QwXHVjN2Q4XHVjN2RkXHVjN2U0XHVjN2U4XHVjN2VjXHVjODAwXHVjODAxXHVjODA0XHVjODA4XHVjODBhIl0sWyJjMTQxIiwiXHVkNTY0XHVkNTY2XHVk''@;'; put 'put ''NTY3XHVkNTZhXHVkNTZjXHVkNTZlIiw1LCJcdWQ1NzZcdWQ1NzdcdWQ1NzlcdWQ1N2FcdWQ1N2JcdWQ1N2QiLDYsIlx1ZDU4Nlx1ZDU4YVx1ZDU4YiJdLFsiYzE2MSIsIlx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MSIsMTksIlx1ZDVhNlx1ZDVhNyJdLFsiYzE4MSIsIlx1ZDVhOCIs''@;'; put 'put ''MzEsIlx1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1YzgzY1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4''@;'; put 'put ''MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1''@;'; put 'put ''YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5''@;'; put 'put ''OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkMyJdLFsiYzI0MSIsIlx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkMyIsNCwiXHVkNWRhXHVkNWRjXHVkNWRlIiw1LCJcdWQ1ZTZcdWQ1''@;'; put 'put ''ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWUiXSxbImMyNjEiLCJcdWQ1ZWYiLDQsIlx1ZDVmNlx1ZDVmOFx1ZDVmYSIsNSwiXHVkNjAyXHVkNjAzXHVkNjA1XHVkNjA2XHVkNjA3XHVkNjA5Iiw2LCJcdWQ2MTIiXSxbImMyODEiLCJcdWQ2MTYiLDUsIlx1ZDYxZFx1ZDYxZVx1ZDYx''@;'; put 'put ''Zlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNSIsNywiXHVkNjJlIiw5LCJcdWQ2M2FcdWQ2M2JcdWM5ZDVcdWM5ZDZcdWM5ZDlcdWM5ZGFcdWM5ZGNcdWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNcdWNh''@;'; put 'put ''MDBcdWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNhMTRcdWNhMThcdWNhMjlcdWNhNGNcdWNhNGRcdWNhNTBcdWNhNTRcdWNhNWNcdWNhNWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThcdWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNhY2Rc''@;'; put 'put ''dWNhY2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBcdWNhZWNcdWNhZjRcdWNiMDhcdWNiMTBcdWNiMTRcdWNiMThcdWNiMjBcdWNiMjFcdWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNiNWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhcdWNi''@;'; put 'put ''ZDRcdWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNjMTBcdWNjMTRcdWNjMWNcdWNjMWRcdWNjMjFcdWNjMjJcdWNjMjdcdWNjMjhcdWNjMjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2IiXSxbImMzNDEiLCJcdWQ2M2RcdWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJc''@;'; put 'put ''dWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdcdWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZcdWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWQiLDRdLFsiYzM2MSIsIlx1ZDY2MiIsNCwiXHVkNjY4XHVkNjZhIiw1LCJcdWQ2NzJcdWQ2NzNcdWQ2NzUiLDEx''@;'; put 'put ''XSxbImMzODEiLCJcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODYiLDUsIlx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5NSIsNywiXHVkNjllXHVkNmEwXHVkNmEyIiw1LCJcdWQ2YTlcdWQ2YWFcdWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRc''@;'; put 'put ''dWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZcdWNjNjhcdWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNjYThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNjYjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNj''@;'; put 'put ''ZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNkMDlcdWNkMGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRcdWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBcdWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRc''@;'; put 'put ''dWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlcdWNkYjBcdWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNkZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNlMDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNl''@;'; put 'put ''MzBcdWNlMzFcdWNlMzNcdWNlMzUiXSxbImM0NDEiLCJcdWQ2YWJcdWQ2YWRcdWQ2YWVcdWQ2YWZcdWQ2YjEiLDcsIlx1ZDZiYVx1ZDZiYyIsNywiXHVkNmM2XHVkNmM3XHVkNmM5XHVkNmNhXHVkNmNiIl0sWyJjNDYxIiwiXHVkNmNkXHVkNmNlXHVkNmNmXHVkNmQwXHVkNmQyXHVkNmQzXHVk''@;'; put 'put ''NmQ1XHVkNmQ2XHVkNmQ4XHVkNmRhIiw1LCJcdWQ2ZTFcdWQ2ZTJcdWQ2ZTNcdWQ2ZTVcdWQ2ZTZcdWQ2ZTdcdWQ2ZTkiLDRdLFsiYzQ4MSIsIlx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNiIsNSwiXHVkNmZlXHVkNmZmXHVkNzAxXHVkNzAyXHVkNzAzXHVkNzA1''@;'; put 'put ''IiwxMSwiXHVkNzEyXHVkNzEzXHVkNzE0XHVjZTU4XHVjZTU5XHVjZTVjXHVjZTVmXHVjZTYwXHVjZTYxXHVjZTY4XHVjZTY5XHVjZTZiXHVjZTZkXHVjZTc0XHVjZTc1XHVjZTc4XHVjZTdjXHVjZTg0XHVjZTg1XHVjZTg3XHVjZTg5XHVjZTkwXHVjZTkxXHVjZTk0XHVjZTk4XHVjZWEwXHVj''@;'; put 'put ''ZWExXHVjZWEzXHVjZWE0XHVjZWE1XHVjZWFjXHVjZWFkXHVjZWMxXHVjZWU0XHVjZWU1XHVjZWU4XHVjZWViXHVjZWVjXHVjZWY0XHVjZWY1XHVjZWY3XHVjZWY4XHVjZWY5XHVjZjAwXHVjZjAxXHVjZjA0XHVjZjA4XHVjZjEwXHVjZjExXHVjZjEzXHVjZjE1XHVjZjFjXHVjZjIwXHVjZjI0''@;'; put 'put ''XHVjZjJjXHVjZjJkXHVjZjJmXHVjZjMwXHVjZjMxXHVjZjM4XHVjZjU0XHVjZjU1XHVjZjU4XHVjZjVjXHVjZjY0XHVjZjY1XHVjZjY3XHVjZjY5XHVjZjcwXHVjZjcxXHVjZjc0XHVjZjc4XHVjZjgwXHVjZjg1XHVjZjhjXHVjZmExXHVjZmE4XHVjZmIwXHVjZmM0XHVjZmUwXHVjZmUxXHVj''@;'; put 'put ''ZmU0XHVjZmU4XHVjZmYwXHVjZmYxXHVjZmYzXHVjZmY1XHVjZmZjXHVkMDAwXHVkMDA0XHVkMDExXHVkMDE4XHVkMDJkXHVkMDM0XHVkMDM1XHVkMDM4XHVkMDNjIl0sWyJjNTQxIiwiXHVkNzE1XHVkNzE2XHVkNzE3XHVkNzFhXHVkNzFiXHVkNzFkXHVkNzFlXHVkNzFmXHVkNzIxIiw2LCJc''@;'; put 'put ''dWQ3MmFcdWQ3MmNcdWQ3MmUiLDUsIlx1ZDczNlx1ZDczN1x1ZDczOSJdLFsiYzU2MSIsIlx1ZDczYVx1ZDczYlx1ZDczZCIsNiwiXHVkNzQ1XHVkNzQ2XHVkNzQ4XHVkNzRhIiw1LCJcdWQ3NTJcdWQ3NTNcdWQ3NTVcdWQ3NWEiLDRdLFsiYzU4MSIsIlx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2''@;'; put 'put ''Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NSIsNiwiXHVkNzdlXHVkNzdmXHVkNzgwXHVkNzgyIiw1LCJcdWQ3OGFcdWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRcdWQwNThcdWQwNjBcdWQw''@;'; put 'put ''NmNcdWQwNmRcdWQwNzBcdWQwNzRcdWQwN2NcdWQwN2RcdWQwODFcdWQwYTRcdWQwYTVcdWQwYThcdWQwYWNcdWQwYjRcdWQwYjVcdWQwYjdcdWQwYjlcdWQwYzBcdWQwYzFcdWQwYzRcdWQwYzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQwZGNcdWQwZGRcdWQwZTBc''@;'; put 'put ''dWQwZTRcdWQwZWNcdWQwZWRcdWQwZWZcdWQwZjBcdWQwZjFcdWQwZjhcdWQxMGRcdWQxMzBcdWQxMzFcdWQxMzRcdWQxMzhcdWQxM2FcdWQxNDBcdWQxNDFcdWQxNDNcdWQxNDRcdWQxNDVcdWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZcdWQxNjFcdWQxNjhcdWQx''@;'; put 'put ''NmNcdWQxN2NcdWQxODRcdWQxODhcdWQxYTBcdWQxYTFcdWQxYTRcdWQxYThcdWQxYjBcdWQxYjFcdWQxYjNcdWQxYjVcdWQxYmFcdWQxYmNcdWQxYzBcdWQxZDhcdWQxZjRcdWQxZjhcdWQyMDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQyM2NcdWQyM2RcdWQyM2Zc''@;'; put 'put ''dWQyNDFcdWQyNDhcdWQyNWMiXSxbImM2NDEiLCJcdWQ3OGRcdWQ3OGVcdWQ3OGZcdWQ3OTEiLDYsIlx1ZDc5YVx1ZDc5Y1x1ZDc5ZSIsNV0sWyJjNmExIiwiXHVkMjY0XHVkMjgwXHVkMjgxXHVkMjg0XHVkMjg4XHVkMjkwXHVkMjkxXHVkMjk1XHVkMjljXHVkMmEwXHVkMmE0XHVkMmFjXHVk''@;'; put 'put ''MmIxXHVkMmI4XHVkMmI5XHVkMmJjXHVkMmJmXHVkMmMwXHVkMmMyXHVkMmM4XHVkMmM5XHVkMmNiXHVkMmQ0XHVkMmQ4XHVkMmRjXHVkMmU0XHVkMmU1XHVkMmYwXHVkMmYxXHVkMmY0XHVkMmY4XHVkMzAwXHVkMzAxXHVkMzAzXHVkMzA1XHVkMzBjXHVkMzBkXHVkMzBlXHVkMzEwXHVkMzE0''@;'; put 'put ''XHVkMzE2XHVkMzFjXHVkMzFkXHVkMzFmXHVkMzIwXHVkMzIxXHVkMzI1XHVkMzI4XHVkMzI5XHVkMzJjXHVkMzMwXHVkMzM4XHVkMzM5XHVkMzNiXHVkMzNjXHVkMzNkXHVkMzQ0XHVkMzQ1XHVkMzdjXHVkMzdkXHVkMzgwXHVkMzg0XHVkMzhjXHVkMzhkXHVkMzhmXHVkMzkwXHVkMzkxXHVk''@;'; put 'put ''Mzk4XHVkMzk5XHVkMzljXHVkM2EwXHVkM2E4XHVkM2E5XHVkM2FiXHVkM2FkXHVkM2I0XHVkM2I4XHVkM2JjXHVkM2M0XHVkM2M1XHVkM2M4XHVkM2M5XHVkM2QwXHVkM2Q4XHVkM2UxXHVkM2UzXHVkM2VjXHVkM2VkXHVkM2YwXHVkM2Y0XHVkM2ZjXHVkM2ZkXHVkM2ZmXHVkNDAxIl0sWyJj''@;'; put 'put ''N2ExIiwiXHVkNDA4XHVkNDFkXHVkNDQwXHVkNDQ0XHVkNDVjXHVkNDYwXHVkNDY0XHVkNDZkXHVkNDZmXHVkNDc4XHVkNDc5XHVkNDdjXHVkNDdmXHVkNDgwXHVkNDgyXHVkNDg4XHVkNDg5XHVkNDhiXHVkNDhkXHVkNDk0XHVkNGE5XHVkNGNjXHVkNGQwXHVkNGQ0XHVkNGRjXHVkNGRmXHVk''@;'; put 'put ''NGU4XHVkNGVjXHVkNGYwXHVkNGY4XHVkNGZiXHVkNGZkXHVkNTA0XHVkNTA4XHVkNTBjXHVkNTE0XHVkNTE1XHVkNTE3XHVkNTNjXHVkNTNkXHVkNTQwXHVkNTQ0XHVkNTRjXHVkNTRkXHVkNTRmXHVkNTUxXHVkNTU4XHVkNTU5XHVkNTVjXHVkNTYwXHVkNTY1XHVkNTY4XHVkNTY5XHVkNTZi''@;'; put 'put ''XHVkNTZkXHVkNTc0XHVkNTc1XHVkNTc4XHVkNTdjXHVkNTg0XHVkNTg1XHVkNTg3XHVkNTg4XHVkNTg5XHVkNTkwXHVkNWE1XHVkNWM4XHVkNWM5XHVkNWNjXHVkNWQwXHVkNWQyXHVkNWQ4XHVkNWQ5XHVkNWRiXHVkNWRkXHVkNWU0XHVkNWU1XHVkNWU4XHVkNWVjXHVkNWY0XHVkNWY1XHVk''@;'; put 'put ''NWY3XHVkNWY5XHVkNjAwXHVkNjAxXHVkNjA0XHVkNjA4XHVkNjEwXHVkNjExXHVkNjEzXHVkNjE0XHVkNjE1XHVkNjFjXHVkNjIwIl0sWyJjOGExIiwiXHVkNjI0XHVkNjJkXHVkNjM4XHVkNjM5XHVkNjNjXHVkNjQwXHVkNjQ1XHVkNjQ4XHVkNjQ5XHVkNjRiXHVkNjRkXHVkNjUxXHVkNjU0''@;'; put 'put ''XHVkNjU1XHVkNjU4XHVkNjVjXHVkNjY3XHVkNjY5XHVkNjcwXHVkNjcxXHVkNjc0XHVkNjgzXHVkNjg1XHVkNjhjXHVkNjhkXHVkNjkwXHVkNjk0XHVkNjlkXHVkNjlmXHVkNmExXHVkNmE4XHVkNmFjXHVkNmIwXHVkNmI5XHVkNmJiXHVkNmM0XHVkNmM1XHVkNmM4XHVkNmNjXHVkNmQxXHVk''@;'; put 'put ''NmQ0XHVkNmQ3XHVkNmQ5XHVkNmUwXHVkNmU0XHVkNmU4XHVkNmYwXHVkNmY1XHVkNmZjXHVkNmZkXHVkNzAwXHVkNzA0XHVkNzExXHVkNzE4XHVkNzE5XHVkNzFjXHVkNzIwXHVkNzI4XHVkNzI5XHVkNzJiXHVkNzJkXHVkNzM0XHVkNzM1XHVkNzM4XHVkNzNjXHVkNzQ0XHVkNzQ3XHVkNzQ5''@;'; put 'put ''XHVkNzUwXHVkNzUxXHVkNzU0XHVkNzU2XHVkNzU3XHVkNzU4XHVkNzU5XHVkNzYwXHVkNzYxXHVkNzYzXHVkNzY1XHVkNzY5XHVkNzZjXHVkNzcwXHVkNzc0XHVkNzdjXHVkNzdkXHVkNzgxXHVkNzg4XHVkNzg5XHVkNzhjXHVkNzkwXHVkNzk4XHVkNzk5XHVkNzliXHVkNzlkIl0sWyJjYWEx''@;'; put 'put ''IiwiXHU0ZjNkXHU0ZjczXHU1MDQ3XHU1MGY5XHU1MmEwXHU1M2VmXHU1NDc1XHU1NGU1XHU1NjA5XHU1YWMxXHU1YmI2XHU2Njg3XHU2N2I2XHU2N2I3XHU2N2VmXHU2YjRjXHU3M2MyXHU3NWMyXHU3YTNjXHU4MmRiXHU4MzA0XHU4ODU3XHU4ODg4XHU4YTM2XHU4Y2M4XHU4ZGNmXHU4ZWZi''@;'; put 'put ''XHU4ZmU2XHU5OWQ1XHU1MjNiXHU1Mzc0XHU1NDA0XHU2MDZhXHU2MTY0XHU2YmJjXHU3M2NmXHU4MTFhXHU4OWJhXHU4OWQyXHU5NWEzXHU0ZjgzXHU1MjBhXHU1OGJlXHU1OTc4XHU1OWU2XHU1ZTcyXHU1ZTc5XHU2MWM3XHU2M2MwXHU2NzQ2XHU2N2VjXHU2ODdmXHU2Zjk3XHU3NjRlXHU3''@;'; put 'put ''NzBiXHU3OGY1XHU3YTA4XHU3YWZmXHU3YzIxXHU4MDlkXHU4MjZlXHU4MjcxXHU4YWViXHU5NTkzXHU0ZTZiXHU1NTlkXHU2NmY3XHU2ZTM0XHU3OGEzXHU3YWVkXHU4NDViXHU4OTEwXHU4NzRlXHU5N2E4XHU1MmQ4XHU1NzRlXHU1ODJhXHU1ZDRjXHU2MTFmXHU2MWJlXHU2MjIxXHU2NTYy''@;'; put 'put ''XHU2N2QxXHU2YTQ0XHU2ZTFiXHU3NTE4XHU3NWIzXHU3NmUzXHU3N2IwXHU3ZDNhXHU5MGFmXHU5NDUxXHU5NDUyXHU5Zjk1Il0sWyJjYmExIiwiXHU1MzIzXHU1Y2FjXHU3NTMyXHU4MGRiXHU5MjQwXHU5NTk4XHU1MjViXHU1ODA4XHU1OWRjXHU1Y2ExXHU1ZDE3XHU1ZWI3XHU1ZjNhXHU1''@;'; put 'put ''ZjRhXHU2MTc3XHU2YzVmXHU3NTdhXHU3NTg2XHU3Y2UwXHU3ZDczXHU3ZGIxXHU3ZjhjXHU4MTU0XHU4MjIxXHU4NTkxXHU4OTQxXHU4YjFiXHU5MmZjXHU5NjRkXHU5YzQ3XHU0ZWNiXHU0ZWY3XHU1MDBiXHU1MWYxXHU1ODRmXHU2MTM3XHU2MTNlXHU2MTY4XHU2NTM5XHU2OWVhXHU2ZjEx''@;'; put 'put ''XHU3NWE1XHU3Njg2XHU3NmQ2XHU3Yjg3XHU4MmE1XHU4NGNiXHVmOTAwXHU5M2E3XHU5NThiXHU1NTgwXHU1YmEyXHU1NzUxXHVmOTAxXHU3Y2IzXHU3ZmI5XHU5MWI1XHU1MDI4XHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MzZlXHU2NGRhXHU2NGU3XHU2ZTIwXHU3MGFjXHU3OTViXHU4''@;'; put 'put ''ZGRkXHU4ZTFlXHVmOTAyXHU5MDdkXHU5MjQ1XHU5MmY4XHU0ZTdlXHU0ZWY2XHU1MDY1XHU1ZGZlXHU1ZWZhXHU2MTA2XHU2OTU3XHU4MTcxXHU4NjU0XHU4ZTQ3XHU5Mzc1XHU5YTJiXHU0ZTVlXHU1MDkxXHU2NzcwXHU2ODQwXHU1MTA5XHU1MjhkXHU1MjkyXHU2YWEyIl0sWyJjY2ExIiwi''@;'; put 'put ''XHU3N2JjXHU5MjEwXHU5ZWQ0XHU1MmFiXHU2MDJmXHU4ZmYyXHU1MDQ4XHU2MWE5XHU2M2VkXHU2NGNhXHU2ODNjXHU2YTg0XHU2ZmMwXHU4MTg4XHU4OWExXHU5Njk0XHU1ODA1XHU3MjdkXHU3MmFjXHU3NTA0XHU3ZDc5XHU3ZTZkXHU4MGE5XHU4OThiXHU4Yjc0XHU5MDYzXHU5ZDUxXHU2''@;'; put 'put ''Mjg5XHU2YzdhXHU2ZjU0XHU3ZDUwXHU3ZjNhXHU4YTIzXHU1MTdjXHU2MTRhXHU3YjlkXHU4YjE5XHU5MjU3XHU5MzhjXHU0ZWFjXHU0ZmQzXHU1MDFlXHU1MGJlXHU1MTA2XHU1MmMxXHU1MmNkXHU1MzdmXHU1NzcwXHU1ODgzXHU1ZTlhXHU1ZjkxXHU2MTc2XHU2MWFjXHU2NGNlXHU2NTZj''@;'; put 'put ''XHU2NjZmXHU2NmJiXHU2NmY0XHU2ODk3XHU2ZDg3XHU3MDg1XHU3MGYxXHU3NDlmXHU3NGE1XHU3NGNhXHU3NWQ5XHU3ODZjXHU3OGVjXHU3YWRmXHU3YWY2XHU3ZDQ1XHU3ZDkzXHU4MDE1XHU4MDNmXHU4MTFiXHU4Mzk2XHU4YjY2XHU4ZjE1XHU5MDE1XHU5M2UxXHU5ODAzXHU5ODM4XHU5''@;'; put 'put ''YTVhXHU5YmU4XHU0ZmMyXHU1NTUzXHU1ODNhXHU1OTUxXHU1YjYzXHU1YzQ2XHU2MGI4XHU2MjEyXHU2ODQyXHU2OGIwIl0sWyJjZGExIiwiXHU2OGU4XHU2ZWFhXHU3NTRjXHU3Njc4XHU3OGNlXHU3YTNkXHU3Y2ZiXHU3ZTZiXHU3ZTdjXHU4YTA4XHU4YWExXHU4YzNmXHU5NjhlXHU5ZGM0''@;'; put 'put ''XHU1M2U0XHU1M2U5XHU1NDRhXHU1NDcxXHU1NmZhXHU1OWQxXHU1YjY0XHU1YzNiXHU1ZWFiXHU2MmY3XHU2NTM3XHU2NTQ1XHU2NTcyXHU2NmEwXHU2N2FmXHU2OWMxXHU2Y2JkXHU3NWZjXHU3NjkwXHU3NzdlXHU3YTNmXHU3Zjk0XHU4MDAzXHU4MGExXHU4MThmXHU4MmU2XHU4MmZkXHU4''@;'; put 'put ''M2YwXHU4NWMxXHU4ODMxXHU4OGI0XHU4YWE1XHVmOTAzXHU4ZjljXHU5MzJlXHU5NmM3XHU5ODY3XHU5YWQ4XHU5ZjEzXHU1NGVkXHU2NTliXHU2NmYyXHU2ODhmXHU3YTQwXHU4YzM3XHU5ZDYwXHU1NmYwXHU1NzY0XHU1ZDExXHU2NjA2XHU2OGIxXHU2OGNkXHU2ZWZlXHU3NDI4XHU4ODll''@;'; put 'put ''XHU5YmU0XHU2YzY4XHVmOTA0XHU5YWE4XHU0ZjliXHU1MTZjXHU1MTcxXHU1MjlmXHU1YjU0XHU1ZGU1XHU2MDUwXHU2MDZkXHU2MmYxXHU2M2E3XHU2NTNiXHU3M2Q5XHU3YTdhXHU4NmEzXHU4Y2EyXHU5NzhmXHU0ZTMyXHU1YmUxXHU2MjA4XHU2NzljXHU3NGRjIl0sWyJjZWExIiwiXHU3''@;'; put 'put ''OWQxXHU4M2QzXHU4YTg3XHU4YWIyXHU4ZGU4XHU5MDRlXHU5MzRiXHU5ODQ2XHU1ZWQzXHU2OWU4XHU4NWZmXHU5MGVkXHVmOTA1XHU1MWEwXHU1Yjk4XHU1YmVjXHU2MTYzXHU2OGZhXHU2YjNlXHU3MDRjXHU3NDJmXHU3NGQ4XHU3YmExXHU3ZjUwXHU4M2M1XHU4OWMwXHU4Y2FiXHU5NWRj''@;'; put 'put ''XHU5OTI4XHU1MjJlXHU2MDVkXHU2MmVjXHU5MDAyXHU0ZjhhXHU1MTQ5XHU1MzIxXHU1OGQ5XHU1ZWUzXHU2NmUwXHU2ZDM4XHU3MDlhXHU3MmMyXHU3M2Q2XHU3YjUwXHU4MGYxXHU5NDViXHU1MzY2XHU2MzliXHU3ZjZiXHU0ZTU2XHU1MDgwXHU1ODRhXHU1OGRlXHU2MDJhXHU2MTI3XHU2''@;'; put 'put ''MmQwXHU2OWQwXHU5YjQxXHU1YjhmXHU3ZDE4XHU4MGIxXHU4ZjVmXHU0ZWE0XHU1MGQxXHU1NGFjXHU1NWFjXHU1YjBjXHU1ZGEwXHU1ZGU3XHU2NTJhXHU2NTRlXHU2ODIxXHU2YTRiXHU3MmUxXHU3NjhlXHU3N2VmXHU3ZDVlXHU3ZmY5XHU4MWEwXHU4NTRlXHU4NmRmXHU4ZjAzXHU4ZjRl''@;'; put 'put ''XHU5MGNhXHU5OTAzXHU5YTU1XHU5YmFiXHU0ZTE4XHU0ZTQ1XHU0ZTVkXHU0ZWM3XHU0ZmYxXHU1MTc3XHU1MmZlIl0sWyJjZmExIiwiXHU1MzQwXHU1M2UzXHU1M2U1XHU1NDhlXHU1NjE0XHU1Nzc1XHU1N2EyXHU1YmM3XHU1ZDg3XHU1ZWQwXHU2MWZjXHU2MmQ4XHU2NTUxXHU2N2I4XHU2''@;'; put 'put ''N2U5XHU2OWNiXHU2YjUwXHU2YmM2XHU2YmVjXHU2YzQyXHU2ZTlkXHU3MDc4XHU3MmQ3XHU3Mzk2XHU3NDAzXHU3N2JmXHU3N2U5XHU3YTc2XHU3ZDdmXHU4MDA5XHU4MWZjXHU4MjA1XHU4MjBhXHU4MmRmXHU4ODYyXHU4YjMzXHU4Y2ZjXHU4ZWMwXHU5MDExXHU5MGIxXHU5MjY0XHU5MmI2''@;'; put 'put ''XHU5OWQyXHU5YTQ1XHU5Y2U5XHU5ZGQ3XHU5ZjljXHU1NzBiXHU1YzQwXHU4M2NhXHU5N2EwXHU5N2FiXHU5ZWI0XHU1NDFiXHU3YTk4XHU3ZmE0XHU4OGQ5XHU4ZWNkXHU5MGUxXHU1ODAwXHU1YzQ4XHU2Mzk4XHU3YTlmXHU1YmFlXHU1ZjEzXHU3YTc5XHU3YWFlXHU4MjhlXHU4ZWFjXHU1''@;'; put 'put ''MDI2XHU1MjM4XHU1MmY4XHU1Mzc3XHU1NzA4XHU2MmYzXHU2MzcyXHU2YjBhXHU2ZGMzXHU3NzM3XHU1M2E1XHU3MzU3XHU4NTY4XHU4ZTc2XHU5NWQ1XHU2NzNhXHU2YWMzXHU2ZjcwXHU4YTZkXHU4ZWNjXHU5OTRiXHVmOTA2XHU2Njc3XHU2Yjc4XHU4Y2I0Il0sWyJkMGExIiwiXHU5YjNj''@;'; put 'put ''XHVmOTA3XHU1M2ViXHU1NzJkXHU1OTRlXHU2M2M2XHU2OWZiXHU3M2VhXHU3ODQ1XHU3YWJhXHU3YWM1XHU3Y2ZlXHU4NDc1XHU4OThmXHU4ZDczXHU5MDM1XHU5NWE4XHU1MmZiXHU1NzQ3XHU3NTQ3XHU3YjYwXHU4M2NjXHU5MjFlXHVmOTA4XHU2YTU4XHU1MTRiXHU1MjRiXHU1Mjg3XHU2''@;'; put 'put ''MjFmXHU2OGQ4XHU2OTc1XHU5Njk5XHU1MGM1XHU1MmE0XHU1MmU0XHU2MWMzXHU2NWE0XHU2ODM5XHU2OWZmXHU3NDdlXHU3YjRiXHU4MmI5XHU4M2ViXHU4OWIyXHU4YjM5XHU4ZmQxXHU5OTQ5XHVmOTA5XHU0ZWNhXHU1OTk3XHU2NGQyXHU2NjExXHU2YThlXHU3NDM0XHU3OTgxXHU3OWJk''@;'; put 'put ''XHU4MmE5XHU4ODdlXHU4ODdmXHU4OTVmXHVmOTBhXHU5MzI2XHU0ZjBiXHU1M2NhXHU2MDI1XHU2MjcxXHU2YzcyXHU3ZDFhXHU3ZDY2XHU0ZTk4XHU1MTYyXHU3N2RjXHU4MGFmXHU0ZjAxXHU0ZjBlXHU1MTc2XHU1MTgwXHU1NWRjXHU1NjY4XHU1NzNiXHU1N2ZhXHU1N2ZjXHU1OTE0XHU1''@;'; put 'put ''OTQ3XHU1OTkzXHU1YmM0XHU1YzkwXHU1ZDBlXHU1ZGYxXHU1ZTdlXHU1ZmNjXHU2MjgwXHU2NWQ3XHU2NWUzIl0sWyJkMWExIiwiXHU2NzFlXHU2NzFmXHU2NzVlXHU2OGNiXHU2OGM0XHU2YTVmXHU2YjNhXHU2YzIzXHU2YzdkXHU2YzgyXHU2ZGM3XHU3Mzk4XHU3NDI2XHU3NDJhXHU3NDgy''@;'; put 'put ''XHU3NGEzXHU3NTc4XHU3NTdmXHU3ODgxXHU3OGVmXHU3OTQxXHU3OTQ3XHU3OTQ4XHU3OTdhXHU3Yjk1XHU3ZDAwXHU3ZGJhXHU3Zjg4XHU4MDA2XHU4MDJkXHU4MDhjXHU4YTE4XHU4YjRmXHU4YzQ4XHU4ZDc3XHU5MzIxXHU5MzI0XHU5OGUyXHU5OTUxXHU5YTBlXHU5YTBmXHU5YTY1XHU5''@;'; put 'put ''ZTkyXHU3ZGNhXHU0Zjc2XHU1NDA5XHU2MmVlXHU2ODU0XHU5MWQxXHU1NWFiXHU1MTNhXHVmOTBiXHVmOTBjXHU1YTFjXHU2MWU2XHVmOTBkXHU2MmNmXHU2MmZmXHVmOTBlIiw1LCJcdTkwYTNcdWY5MTQiLDQsIlx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1''@;'; put 'put ''NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNSJdLFsiZDJhMSIsIlx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOCIsNCwiXHU0ZTQz''@;'; put 'put ''XHVmOTJkXHU1MTY3XHU1OTQ4XHU2N2YwXHU4MDEwXHVmOTJlXHU1OTczXHU1ZTc0XHU2NDlhXHU3OWNhXHU1ZmY1XHU2MDZjXHU2MmM4XHU2MzdiXHU1YmU3XHU1YmQ3XHU1MmFhXHVmOTJmXHU1OTc0XHU1ZjI5XHU2MDEyXHVmOTMwXHVmOTMxXHVmOTMyXHU3NDU5XHVmOTMzIiw1LCJcdTk5''@;'; put 'put ''ZDFcdWY5MzkiLDEwLCJcdTZmYzNcdWY5NDRcdWY5NDVcdTgxYmZcdThmYjJcdTYwZjFcdWY5NDZcdWY5NDdcdTgxNjZcdWY5NDhcdWY5NDlcdTVjM2ZcdWY5NGEiLDcsIlx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1MiIsNSwiXHU4MGZkXHVmOTU4XHVmOTU5XHU1YzNjXHU2Y2U1XHU1''@;'; put 'put ''MzNmXHU2ZWJhXHU1OTFhXHU4MzM2Il0sWyJkM2ExIiwiXHU0ZTM5XHU0ZWI2XHU0ZjQ2XHU1NWFlXHU1NzE4XHU1OGM3XHU1ZjU2XHU2NWI3XHU2NWU2XHU2YTgwXHU2YmI1XHU2ZTRkXHU3N2VkXHU3YWVmXHU3YzFlXHU3ZGRlXHU4NmNiXHU4ODkyXHU5MTMyXHU5MzViXHU2NGJiXHU2ZmJl''@;'; put 'put ''XHU3MzdhXHU3NWI4XHU5MDU0XHU1NTU2XHU1NzRkXHU2MWJhXHU2NGQ0XHU2NmM3XHU2ZGUxXHU2ZTViXHU2ZjZkXHU2ZmI5XHU3NWYwXHU4MDQzXHU4MWJkXHU4NTQxXHU4OTgzXHU4YWM3XHU4YjVhXHU5MzFmXHU2YzkzXHU3NTUzXHU3YjU0XHU4ZTBmXHU5MDVkXHU1NTEwXHU1ODAyXHU1''@;'; put 'put ''ODU4XHU1ZTYyXHU2MjA3XHU2NDllXHU2OGUwXHU3NTc2XHU3Y2Q2XHU4N2IzXHU5ZWU4XHU0ZWUzXHU1Nzg4XHU1NzZlXHU1OTI3XHU1YzBkXHU1Y2IxXHU1ZTM2XHU1Zjg1XHU2MjM0XHU2NGUxXHU3M2IzXHU4MWZhXHU4ODhiXHU4Y2I4XHU5NjhhXHU5ZWRiXHU1Yjg1XHU1ZmI3XHU2MGIz''@;'; put 'put ''XHU1MDEyXHU1MjAwXHU1MjMwXHU1NzE2XHU1ODM1XHU1ODU3XHU1YzBlXHU1YzYwXHU1Y2Y2XHU1ZDhiXHU1ZWE2XHU1ZjkyXHU2MGJjXHU2MzExXHU2Mzg5XHU2NDE3XHU2ODQzIl0sWyJkNGExIiwiXHU2OGY5XHU2YWMyXHU2ZGQ4XHU2ZTIxXHU2ZWQ0XHU2ZmU0XHU3MWZlXHU3NmRjXHU3''@;'; put 'put ''Nzc5XHU3OWIxXHU3YTNiXHU4NDA0XHU4OWE5XHU4Y2VkXHU4ZGYzXHU4ZTQ4XHU5MDAzXHU5MDE0XHU5MDUzXHU5MGZkXHU5MzRkXHU5Njc2XHU5N2RjXHU2YmQyXHU3MDA2XHU3MjU4XHU3MmEyXHU3MzY4XHU3NzYzXHU3OWJmXHU3YmU0XHU3ZTliXHU4YjgwXHU1OGE5XHU2MGM3XHU2NTY2''@;'; put 'put ''XHU2NWZkXHU2NmJlXHU2YzhjXHU3MTFlXHU3MWM5XHU4YzVhXHU5ODEzXHU0ZTZkXHU3YTgxXHU0ZWRkXHU1MWFjXHU1MWNkXHU1MmQ1XHU1NDBjXHU2MWE3XHU2NzcxXHU2ODUwXHU2OGRmXHU2ZDFlXHU2ZjdjXHU3NWJjXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDYzXHU5Mjg1XHU1MTVjXHU2''@;'; put 'put ''NTk3XHU2NzVjXHU2NzkzXHU3NWQ4XHU3YWM3XHU4MzczXHVmOTVhXHU4YzQ2XHU5MDE3XHU5ODJkXHU1YzZmXHU4MWMwXHU4MjlhXHU5MDQxXHU5MDZmXHU5MjBkXHU1Zjk3XHU1ZDlkXHU2YTU5XHU3MWM4XHU3NjdiXHU3YjQ5XHU4NWU0XHU4YjA0XHU5MTI3XHU5YTMwXHU1NTg3XHU2MWY2''@;'; put 'put ''XHVmOTViXHU3NjY5XHU3Zjg1Il0sWyJkNWExIiwiXHU4NjNmXHU4N2JhXHU4OGY4XHU5MDhmXHVmOTVjXHU2ZDFiXHU3MGQ5XHU3M2RlXHU3ZDYxXHU4NDNkXHVmOTVkXHU5MTZhXHU5OWYxXHVmOTVlXHU0ZTgyXHU1Mzc1XHU2YjA0XHU2YjEyXHU3MDNlXHU3MjFiXHU4NjJkXHU5ZTFlXHU1''@;'; put 'put ''MjRjXHU4ZmEzXHU1ZDUwXHU2NGU1XHU2NTJjXHU2YjE2XHU2ZmViXHU3YzQzXHU3ZTljXHU4NWNkXHU4OTY0XHU4OWJkXHU2MmM5XHU4MWQ4XHU4ODFmXHU1ZWNhXHU2NzE3XHU2ZDZhXHU3MmZjXHU3NDA1XHU3NDZmXHU4NzgyXHU5MGRlXHU0Zjg2XHU1ZDBkXHU1ZmEwXHU4NDBhXHU1MWI3''@;'; put 'put ''XHU2M2EwXHU3NTY1XHU0ZWFlXHU1MDA2XHU1MTY5XHU1MWM5XHU2ODgxXHU2YTExXHU3Y2FlXHU3Y2IxXHU3Y2U3XHU4MjZmXHU4YWQyXHU4ZjFiXHU5MWNmXHU0ZmI2XHU1MTM3XHU1MmY1XHU1NDQyXHU1ZWVjXHU2MTZlXHU2MjNlXHU2NWM1XHU2YWRhXHU2ZmZlXHU3OTJhXHU4NWRjXHU4''@;'; put 'put ''ODIzXHU5NWFkXHU5YTYyXHU5YTZhXHU5ZTk3XHU5ZWNlXHU1MjliXHU2NmM2XHU2Yjc3XHU3MDFkXHU3OTJiXHU4ZjYyXHU5NzQyXHU2MTkwXHU2MjAwXHU2NTIzXHU2ZjIzIl0sWyJkNmExIiwiXHU3MTQ5XHU3NDg5XHU3ZGY0XHU4MDZmXHU4NGVlXHU4ZjI2XHU5MDIzXHU5MzRhXHU1MWJk''@;'; put 'put ''XHU1MjE3XHU1MmEzXHU2ZDBjXHU3MGM4XHU4OGMyXHU1ZWM5XHU2NTgyXHU2YmFlXHU2ZmMyXHU3YzNlXHU3Mzc1XHU0ZWU0XHU0ZjM2XHU1NmY5XHVmOTVmXHU1Y2JhXHU1ZGJhXHU2MDFjXHU3M2IyXHU3YjJkXHU3ZjlhXHU3ZmNlXHU4MDQ2XHU5MDFlXHU5MjM0XHU5NmY2XHU5NzQ4XHU5''@;'; put 'put ''ODE4XHU5ZjYxXHU0ZjhiXHU2ZmE3XHU3OWFlXHU5MWI0XHU5NmI3XHU1MmRlXHVmOTYwXHU2NDg4XHU2NGM0XHU2YWQzXHU2ZjVlXHU3MDE4XHU3MjEwXHU3NmU3XHU4MDAxXHU4NjA2XHU4NjVjXHU4ZGVmXHU4ZjA1XHU5NzMyXHU5YjZmXHU5ZGZhXHU5ZTc1XHU3ODhjXHU3OTdmXHU3ZGEw''@;'; put 'put ''XHU4M2M5XHU5MzA0XHU5ZTdmXHU5ZTkzXHU4YWQ2XHU1OGRmXHU1ZjA0XHU2NzI3XHU3MDI3XHU3NGNmXHU3YzYwXHU4MDdlXHU1MTIxXHU3MDI4XHU3MjYyXHU3OGNhXHU4Y2MyXHU4Y2RhXHU4Y2Y0XHU5NmY3XHU0ZTg2XHU1MGRhXHU1YmVlXHU1ZWQ2XHU2NTk5XHU3MWNlXHU3NjQyXHU3''@;'; put 'put ''N2FkXHU4MDRhXHU4NGZjIl0sWyJkN2ExIiwiXHU5MDdjXHU5YjI3XHU5ZjhkXHU1OGQ4XHU1YTQxXHU1YzYyXHU2YTEzXHU2ZGRhXHU2ZjBmXHU3NjNiXHU3ZDJmXHU3ZTM3XHU4NTFlXHU4OTM4XHU5M2U0XHU5NjRiXHU1Mjg5XHU2NWQyXHU2N2YzXHU2OWI0XHU2ZDQxXHU2ZTljXHU3MDBm''@;'; put 'put ''XHU3NDA5XHU3NDYwXHU3NTU5XHU3NjI0XHU3ODZiXHU4YjJjXHU5ODVlXHU1MTZkXHU2MjJlXHU5Njc4XHU0Zjk2XHU1MDJiXHU1ZDE5XHU2ZGVhXHU3ZGI4XHU4ZjJhXHU1ZjhiXHU2MTQ0XHU2ODE3XHVmOTYxXHU5Njg2XHU1MmQyXHU4MDhiXHU1MWRjXHU1MWNjXHU2OTVlXHU3YTFjXHU3''@;'; put 'put ''ZGJlXHU4M2YxXHU5Njc1XHU0ZmRhXHU1MjI5XHU1Mzk4XHU1NDBmXHU1NTBlXHU1YzY1XHU2MGE3XHU2NzRlXHU2OGE4XHU2ZDZjXHU3MjgxXHU3MmY4XHU3NDA2XHU3NDgzXHVmOTYyXHU3NWUyXHU3YzZjXHU3Zjc5XHU3ZmI4XHU4Mzg5XHU4OGNmXHU4OGUxXHU5MWNjXHU5MWQwXHU5NmUy''@;'; put 'put ''XHU5YmM5XHU1NDFkXHU2ZjdlXHU3MWQwXHU3NDk4XHU4NWZhXHU4ZWFhXHU5NmEzXHU5YzU3XHU5ZTlmXHU2Nzk3XHU2ZGNiXHU3NDMzXHU4MWU4XHU5NzE2XHU3ODJjIl0sWyJkOGExIiwiXHU3YWNiXHU3YjIwXHU3YzkyXHU2NDY5XHU3NDZhXHU3NWYyXHU3OGJjXHU3OGU4XHU5OWFjXHU5''@;'; put 'put ''YjU0XHU5ZWJiXHU1YmRlXHU1ZTU1XHU2ZjIwXHU4MTljXHU4M2FiXHU5MDg4XHU0ZTA3XHU1MzRkXHU1YTI5XHU1ZGQyXHU1ZjRlXHU2MTYyXHU2MzNkXHU2NjY5XHU2NmZjXHU2ZWZmXHU2ZjJiXHU3MDYzXHU3NzllXHU4NDJjXHU4NTEzXHU4ODNiXHU4ZjEzXHU5OTQ1XHU5YzNiXHU1NTFj''@;'; put 'put ''XHU2MmI5XHU2NzJiXHU2Y2FiXHU4MzA5XHU4OTZhXHU5NzdhXHU0ZWExXHU1OTg0XHU1ZmQ4XHU1ZmQ5XHU2NzFiXHU3ZGIyXHU3ZjU0XHU4MjkyXHU4MzJiXHU4M2JkXHU4ZjFlXHU5MDk5XHU1N2NiXHU1OWI5XHU1YTkyXHU1YmQwXHU2NjI3XHU2NzlhXHU2ODg1XHU2YmNmXHU3MTY0XHU3''@;'; put 'put ''Zjc1XHU4Y2I3XHU4Y2UzXHU5MDgxXHU5YjQ1XHU4MTA4XHU4YzhhXHU5NjRjXHU5YTQwXHU5ZWE1XHU1YjVmXHU2YzEzXHU3MzFiXHU3NmYyXHU3NmRmXHU4NDBjXHU1MWFhXHU4OTkzXHU1MTRkXHU1MTk1XHU1MmM5XHU2OGM5XHU2Yzk0XHU3NzA0XHU3NzIwXHU3ZGJmXHU3ZGVjXHU5NzYy''@;'; put 'put ''XHU5ZWI1XHU2ZWM1Il0sWyJkOWExIiwiXHU4NTExXHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU2NjlkXHU2OTI3XHU2ZTlmXHU3NmJmXHU3NzkxXHU4MzE3XHU4NGMyXHU4NzlmXHU5MTY5XHU5Mjk4XHU5Y2Y0XHU4ODgyXHU0ZmFlXHU1MTkyXHU1MmRmXHU1OWM2XHU1ZTNkXHU2MTU1XHU2''@;'; put 'put ''NDc4XHU2NDc5XHU2NmFlXHU2N2QwXHU2YTIxXHU2YmNkXHU2YmRiXHU3MjVmXHU3MjYxXHU3NDQxXHU3NzM4XHU3N2RiXHU4MDE3XHU4MmJjXHU4MzA1XHU4YjAwXHU4YjI4XHU4YzhjXHU2NzI4XHU2YzkwXHU3MjY3XHU3NmVlXHU3NzY2XHU3YTQ2XHU5ZGE5XHU2YjdmXHU2YzkyXHU1OTIy''@;'; put 'put ''XHU2NzI2XHU4NDk5XHU1MzZmXHU1ODkzXHU1OTk5XHU1ZWRmXHU2M2NmXHU2NjM0XHU2NzczXHU2ZTNhXHU3MzJiXHU3YWQ3XHU4MmQ3XHU5MzI4XHU1MmQ5XHU1ZGViXHU2MWFlXHU2MWNiXHU2MjBhXHU2MmM3XHU2NGFiXHU2NWUwXHU2OTU5XHU2YjY2XHU2YmNiXHU3MTIxXHU3M2Y3XHU3''@;'; put 'put ''NTVkXHU3ZTQ2XHU4MjFlXHU4MzAyXHU4NTZhXHU4YWEzXHU4Y2JmXHU5NzI3XHU5ZDYxXHU1OGE4XHU5ZWQ4XHU1MDExXHU1MjBlXHU1NDNiXHU1NTRmXHU2NTg3Il0sWyJkYWExIiwiXHU2Yzc2XHU3ZDBhXHU3ZDBiXHU4MDVlXHU4NjhhXHU5NTgwXHU5NmVmXHU1MmZmXHU2Yzk1XHU3MjY5''@;'; put 'put ''XHU1NDczXHU1YTlhXHU1YzNlXHU1ZDRiXHU1ZjRjXHU1ZmFlXHU2NzJhXHU2OGI2XHU2OTYzXHU2ZTNjXHU2ZTQ0XHU3NzA5XHU3YzczXHU3ZjhlXHU4NTg3XHU4YjBlXHU4ZmY3XHU5NzYxXHU5ZWY0XHU1Y2I3XHU2MGI2XHU2MTBkXHU2MWFiXHU2NTRmXHU2NWZiXHU2NWZjXHU2YzExXHU2''@;'; put 'put ''Y2VmXHU3MzlmXHU3M2M5XHU3ZGUxXHU5NTk0XHU1YmM2XHU4NzFjXHU4YjEwXHU1MjVkXHU1MzVhXHU2MmNkXHU2NDBmXHU2NGIyXHU2NzM0XHU2YTM4XHU2Y2NhXHU3M2MwXHU3NDllXHU3Yjk0XHU3Yzk1XHU3ZTFiXHU4MThhXHU4MjM2XHU4NTg0XHU4ZmViXHU5NmY5XHU5OWMxXHU0ZjM0''@;'; put 'put ''XHU1MzRhXHU1M2NkXHU1M2RiXHU2MmNjXHU2NDJjXHU2NTAwXHU2NTkxXHU2OWMzXHU2Y2VlXHU2ZjU4XHU3M2VkXHU3NTU0XHU3NjIyXHU3NmU0XHU3NmZjXHU3OGQwXHU3OGZiXHU3OTJjXHU3ZDQ2XHU4MjJjXHU4N2UwXHU4ZmQ0XHU5ODEyXHU5OGVmXHU1MmMzXHU2MmQ0XHU2NGE1XHU2''@;'; put 'put ''ZTI0XHU2ZjUxIl0sWyJkYmExIiwiXHU3NjdjXHU4ZGNiXHU5MWIxXHU5MjYyXHU5YWVlXHU5YjQzXHU1MDIzXHU1MDhkXHU1NzRhXHU1OWE4XHU1YzI4XHU1ZTQ3XHU1Zjc3XHU2MjNmXHU2NTNlXHU2NWI5XHU2NWMxXHU2NjA5XHU2NzhiXHU2OTljXHU2ZWMyXHU3OGM1XHU3ZDIxXHU4MGFh''@;'; put 'put ''XHU4MTgwXHU4MjJiXHU4MmIzXHU4NGExXHU4NjhjXHU4YTJhXHU4YjE3XHU5MGE2XHU5NjMyXHU5ZjkwXHU1MDBkXHU0ZmYzXHVmOTYzXHU1N2Y5XHU1Zjk4XHU2MmRjXHU2MzkyXHU2NzZmXHU2ZTQzXHU3MTE5XHU3NmMzXHU4MGNjXHU4MGRhXHU4OGY0XHU4OGY1XHU4OTE5XHU4Y2UwXHU4''@;'; put 'put ''ZjI5XHU5MTRkXHU5NjZhXHU0ZjJmXHU0ZjcwXHU1ZTFiXHU2N2NmXHU2ODIyXHU3NjdkXHU3NjdlXHU5YjQ0XHU1ZTYxXHU2YTBhXHU3MTY5XHU3MWQ0XHU3NTZhXHVmOTY0XHU3ZTQxXHU4NTQzXHU4NWU5XHU5OGRjXHU0ZjEwXHU3YjRmXHU3ZjcwXHU5NWE1XHU1MWUxXHU1ZTA2XHU2OGI1''@;'; put 'put ''XHU2YzNlXHU2YzRlXHU2Y2RiXHU3MmFmXHU3YmM0XHU4MzAzXHU2Y2Q1XHU3NDNhXHU1MGZiXHU1Mjg4XHU1OGMxXHU2NGQ4XHU2YTk3XHU3NGE3XHU3NjU2Il0sWyJkY2ExIiwiXHU3OGE3XHU4NjE3XHU5NWUyXHU5NzM5XHVmOTY1XHU1MzVlXHU1ZjAxXHU4YjhhXHU4ZmE4XHU4ZmFmXHU5''@;'; put 'put ''MDhhXHU1MjI1XHU3N2E1XHU5YzQ5XHU5ZjA4XHU0ZTE5XHU1MDAyXHU1MTc1XHU1YzViXHU1ZTc3XHU2NjFlXHU2NjNhXHU2N2M0XHU2OGM1XHU3MGIzXHU3NTAxXHU3NWM1XHU3OWM5XHU3YWRkXHU4ZjI3XHU5OTIwXHU5YTA4XHU0ZmRkXHU1ODIxXHU1ODMxXHU1YmY2XHU2NjZlXHU2YjY1''@;'; put 'put ''XHU2ZDExXHU2ZTdhXHU2ZjdkXHU3M2U0XHU3NTJiXHU4M2U5XHU4OGRjXHU4OTEzXHU4YjVjXHU4ZjE0XHU0ZjBmXHU1MGQ1XHU1MzEwXHU1MzVjXHU1YjkzXHU1ZmE5XHU2NzBkXHU3OThmXHU4MTc5XHU4MzJmXHU4NTE0XHU4OTA3XHU4OTg2XHU4ZjM5XHU4ZjNiXHU5OWE1XHU5YzEyXHU2''@;'; put 'put ''NzJjXHU0ZTc2XHU0ZmY4XHU1OTQ5XHU1YzAxXHU1Y2VmXHU1Y2YwXHU2MzY3XHU2OGQyXHU3MGZkXHU3MWEyXHU3NDJiXHU3ZTJiXHU4NGVjXHU4NzAyXHU5MDIyXHU5MmQyXHU5Y2YzXHU0ZTBkXHU0ZWQ4XHU0ZmVmXHU1MDg1XHU1MjU2XHU1MjZmXHU1NDI2XHU1NDkwXHU1N2UwXHU1OTJi''@;'; put 'put ''XHU1YTY2Il0sWyJkZGExIiwiXHU1YjVhXHU1Yjc1XHU1YmNjXHU1ZTljXHVmOTY2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2ZDZlXHU2ZWE1XHU3MjM2XHU3YjI2XHU3YzNmXHU3ZjM2XHU4MTUwXHU4MTUxXHU4MTlhXHU4MjQwXHU4Mjk5XHU4M2E5XHU4YTAzXHU4Y2EwXHU4Y2U2XHU4Y2ZiXHU4''@;'; put 'put ''ZDc0XHU4ZGJhXHU5MGU4XHU5MWRjXHU5NjFjXHU5NjQ0XHU5OWQ5XHU5Y2U3XHU1MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OGIzXHU1OTU0XHU1OTZlXHU1ZmZmXHU2MWE0XHU2MjZlXHU2NjEwXHU2YzdlXHU3MTFhXHU3NmM2XHU3Yzg5XHU3Y2RlXHU3ZDFiXHU4MmFjXHU4Y2MxXHU5NmYw''@;'; put 'put ''XHVmOTY3XHU0ZjViXHU1ZjE3XHU1ZjdmXHU2MmMyXHU1ZDI5XHU2NzBiXHU2OGRhXHU3ODdjXHU3ZTQzXHU5ZDZjXHU0ZTE1XHU1MDk5XHU1MzE1XHU1MzJhXHU1MzUxXHU1OTgzXHU1YTYyXHU1ZTg3XHU2MGIyXHU2MThhXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OWE3XHU2YmQ0XHU2''@;'; put 'put ''YmQ2XHU2YmQ3XHU2YmQ4XHU2Y2I4XHVmOTY4XHU3NDM1XHU3NWZhXHU3ODEyXHU3ODkxXHU3OWQ1XHU3OWQ4XHU3YzgzXHU3ZGNiXHU3ZmUxXHU4MGE1Il0sWyJkZWExIiwiXHU4MTNlXHU4MWMyXHU4M2YyXHU4NzFhXHU4OGU4XHU4YWI5XHU4YjZjXHU4Y2JiXHU5MTE5XHU5NzVlXHU5OGRi''@;'; put 'put ''XHU5ZjNiXHU1NmFjXHU1YjJhXHU1ZjZjXHU2NThjXHU2YWIzXHU2YmFmXHU2ZDVjXHU2ZmYxXHU3MDE1XHU3MjVkXHU3M2FkXHU4Y2E3XHU4Y2QzXHU5ODNiXHU2MTkxXHU2YzM3XHU4MDU4XHU5YTAxXHU0ZTRkXHU0ZThiXHU0ZTliXHU0ZWQ1XHU0ZjNhXHU0ZjNjXHU0ZjdmXHU0ZmRmXHU1''@;'; put 'put ''MGZmXHU1M2YyXHU1M2Y4XHU1NTA2XHU1NWUzXHU1NmRiXHU1OGViXHU1OTYyXHU1YTExXHU1YmViXHU1YmZhXHU1YzA0XHU1ZGYzXHU1ZTJiXHU1Zjk5XHU2MDFkXHU2MzY4XHU2NTljXHU2NWFmXHU2N2Y2XHU2N2ZiXHU2OGFkXHU2YjdiXHU2Yzk5XHU2Y2Q3XHU2ZTIzXHU3MDA5XHU3MzQ1''@;'; put 'put ''XHU3ODAyXHU3OTNlXHU3OTQwXHU3OTYwXHU3OWMxXHU3YmU5XHU3ZDE3XHU3ZDcyXHU4MDg2XHU4MjBkXHU4MzhlXHU4NGQxXHU4NmM3XHU4OGRmXHU4YTUwXHU4YTVlXHU4YjFkXHU4Y2RjXHU4ZDY2XHU4ZmFkXHU5MGFhXHU5OGZjXHU5OWRmXHU5ZTlkXHU1MjRhXHVmOTY5XHU2NzE0XHVm''@;'; put 'put ''OTZhIl0sWyJkZmExIiwiXHU1MDk4XHU1MjJhXHU1YzcxXHU2NTYzXHU2YzU1XHU3M2NhXHU3NTIzXHU3NTlkXHU3Yjk3XHU4NDljXHU5MTc4XHU5NzMwXHU0ZTc3XHU2NDkyXHU2YmJhXHU3MTVlXHU4NWE5XHU0ZTA5XHVmOTZiXHU2NzQ5XHU2OGVlXHU2ZTE3XHU4MjlmXHU4NTE4XHU4ODZi''@;'; put 'put ''XHU2M2Y3XHU2ZjgxXHU5MjEyXHU5OGFmXHU0ZTBhXHU1MGI3XHU1MGNmXHU1MTFmXHU1NTQ2XHU1NWFhXHU1NjE3XHU1YjQwXHU1YzE5XHU1Y2UwXHU1ZTM4XHU1ZThhXHU1ZWEwXHU1ZWMyXHU2MGYzXHU2ODUxXHU2YTYxXHU2ZTU4XHU3MjNkXHU3MjQwXHU3MmMwXHU3NmY4XHU3OTY1XHU3''@;'; put 'put ''YmIxXHU3ZmQ0XHU4OGYzXHU4OWY0XHU4YTczXHU4YzYxXHU4Y2RlXHU5NzFjXHU1ODVlXHU3NGJkXHU4Y2ZkXHU1NWM3XHVmOTZjXHU3YTYxXHU3ZDIyXHU4MjcyXHU3MjcyXHU3NTFmXHU3NTI1XHVmOTZkXHU3YjE5XHU1ODg1XHU1OGZiXHU1ZGJjXHU1ZThmXHU1ZWI2XHU1ZjkwXHU2MDU1''@;'; put 'put ''XHU2MjkyXHU2MzdmXHU2NTRkXHU2NjkxXHU2NmQ5XHU2NmY4XHU2ODE2XHU2OGYyXHU3MjgwXHU3NDVlXHU3YjZlXHU3ZDZlXHU3ZGQ2XHU3ZjcyIl0sWyJlMGExIiwiXHU4MGU1XHU4MjEyXHU4NWFmXHU4OTdmXHU4YTkzXHU5MDFkXHU5MmU0XHU5ZWNkXHU5ZjIwXHU1OTE1XHU1OTZkXHU1''@;'; put 'put ''ZTJkXHU2MGRjXHU2NjE0XHU2NjczXHU2NzkwXHU2YzUwXHU2ZGM1XHU2ZjVmXHU3N2YzXHU3OGE5XHU4NGM2XHU5MWNiXHU5MzJiXHU0ZWQ5XHU1MGNhXHU1MTQ4XHU1NTg0XHU1YjBiXHU1YmEzXHU2MjQ3XHU2NTdlXHU2NWNiXHU2ZTMyXHU3MTdkXHU3NDAxXHU3NDQ0XHU3NDg3XHU3NGJm''@;'; put 'put ''XHU3NjZjXHU3OWFhXHU3ZGRhXHU3ZTU1XHU3ZmE4XHU4MTdhXHU4MWIzXHU4MjM5XHU4NjFhXHU4N2VjXHU4YTc1XHU4ZGUzXHU5MDc4XHU5MjkxXHU5NDI1XHU5OTRkXHU5YmFlXHU1MzY4XHU1YzUxXHU2OTU0XHU2Y2M0XHU2ZDI5XHU2ZTJiXHU4MjBjXHU4NTliXHU4OTNiXHU4YTJkXHU4''@;'; put 'put ''YWFhXHU5NmVhXHU5ZjY3XHU1MjYxXHU2NmI5XHU2YmIyXHU3ZTk2XHU4N2ZlXHU4ZDBkXHU5NTgzXHU5NjVkXHU2NTFkXHU2ZDg5XHU3MWVlXHVmOTZlXHU1N2NlXHU1OWQzXHU1YmFjXHU2MDI3XHU2MGZhXHU2MjEwXHU2NjFmXHU2NjVmXHU3MzI5XHU3M2Y5XHU3NmRiXHU3NzAxXHU3YjZj''@;'; put 'put ''Il0sWyJlMWExIiwiXHU4MDU2XHU4MDcyXHU4MTY1XHU4YWEwXHU5MTkyXHU0ZTE2XHU1MmUyXHU2YjcyXHU2ZDE3XHU3YTA1XHU3YjM5XHU3ZDMwXHVmOTZmXHU4Y2IwXHU1M2VjXHU1NjJmXHU1ODUxXHU1YmI1XHU1YzBmXHU1YzExXHU1ZGUyXHU2MjQwXHU2MzgzXHU2NDE0XHU2NjJkXHU2''@;'; put 'put ''OGIzXHU2Y2JjXHU2ZDg4XHU2ZWFmXHU3MDFmXHU3MGE0XHU3MWQyXHU3NTI2XHU3NThmXHU3NThlXHU3NjE5XHU3YjExXHU3YmUwXHU3YzJiXHU3ZDIwXHU3ZDM5XHU4NTJjXHU4NTZkXHU4NjA3XHU4YTM0XHU5MDBkXHU5MDYxXHU5MGI1XHU5MmI3XHU5N2Y2XHU5YTM3XHU0ZmQ3XHU1YzZj''@;'; put 'put ''XHU2NzVmXHU2ZDkxXHU3YzlmXHU3ZThjXHU4YjE2XHU4ZDE2XHU5MDFmXHU1YjZiXHU1ZGZkXHU2NDBkXHU4NGMwXHU5MDVjXHU5OGUxXHU3Mzg3XHU1YjhiXHU2MDlhXHU2NzdlXHU2ZGRlXHU4YTFmXHU4YWE2XHU5MDAxXHU5ODBjXHU1MjM3XHVmOTcwXHU3MDUxXHU3ODhlXHU5Mzk2XHU4''@;'; put 'put ''ODcwXHU5MWQ3XHU0ZmVlXHU1M2Q3XHU1NWZkXHU1NmRhXHU1NzgyXHU1OGZkXHU1YWMyXHU1Yjg4XHU1Y2FiXHU1Y2MwXHU1ZTI1XHU2MTAxIl0sWyJlMmExIiwiXHU2MjBkXHU2MjRiXHU2Mzg4XHU2NDFjXHU2NTM2XHU2NTc4XHU2YTM5XHU2YjhhXHU2YzM0XHU2ZDE5XHU2ZjMxXHU3MWU3''@;'; put 'put ''XHU3MmU5XHU3Mzc4XHU3NDA3XHU3NGIyXHU3NjI2XHU3NzYxXHU3OWMwXHU3YTU3XHU3YWVhXHU3Y2I5XHU3ZDhmXHU3ZGFjXHU3ZTYxXHU3ZjllXHU4MTI5XHU4MzMxXHU4NDkwXHU4NGRhXHU4NWVhXHU4ODk2XHU4YWIwXHU4YjkwXHU4ZjM4XHU5MDQyXHU5MDgzXHU5MTZjXHU5Mjk2XHU5''@;'; put 'put ''MmI5XHU5NjhiXHU5NmE3XHU5NmE4XHU5NmQ2XHU5NzAwXHU5ODA4XHU5OTk2XHU5YWQzXHU5YjFhXHU1M2Q0XHU1ODdlXHU1OTE5XHU1YjcwXHU1YmJmXHU2ZGQxXHU2ZjVhXHU3MTlmXHU3NDIxXHU3NGI5XHU4MDg1XHU4M2ZkXHU1ZGUxXHU1Zjg3XHU1ZmFhXHU2MDQyXHU2NWVjXHU2ODEy''@;'; put 'put ''XHU2OTZmXHU2YTUzXHU2Yjg5XHU2ZDM1XHU2ZGYzXHU3M2UzXHU3NmZlXHU3N2FjXHU3YjRkXHU3ZDE0XHU4MTIzXHU4MjFjXHU4MzQwXHU4NGY0XHU4NTYzXHU4YTYyXHU4YWM0XHU5MTg3XHU5MzFlXHU5ODA2XHU5OWI0XHU2MjBjXHU4ODUzXHU4ZmYwXHU5MjY1XHU1ZDA3XHU1ZDI3Il0s''@;'; put 'put ''WyJlM2ExIiwiXHU1ZDY5XHU3NDVmXHU4MTlkXHU4NzY4XHU2ZmQ1XHU2MmZlXHU3ZmQyXHU4OTM2XHU4OTcyXHU0ZTFlXHU0ZTU4XHU1MGU3XHU1MmRkXHU1MzQ3XHU2MjdmXHU2NjA3XHU3ZTY5XHU4ODA1XHU5NjVlXHU0ZjhkXHU1MzE5XHU1NjM2XHU1OWNiXHU1YWE0XHU1YzM4XHU1YzRl''@;'; put 'put ''XHU1YzRkXHU1ZTAyXHU1ZjExXHU2MDQzXHU2NWJkXHU2NjJmXHU2NjQyXHU2N2JlXHU2N2Y0XHU3MzFjXHU3N2UyXHU3OTNhXHU3ZmM1XHU4NDk0XHU4NGNkXHU4OTk2XHU4YTY2XHU4YTY5XHU4YWUxXHU4YzU1XHU4YzdhXHU1N2Y0XHU1YmQ0XHU1ZjBmXHU2MDZmXHU2MmVkXHU2OTBkXHU2''@;'; put 'put ''Yjk2XHU2ZTVjXHU3MTg0XHU3YmQyXHU4NzU1XHU4YjU4XHU4ZWZlXHU5OGRmXHU5OGZlXHU0ZjM4XHU0ZjgxXHU0ZmUxXHU1NDdiXHU1YTIwXHU1YmI4XHU2MTNjXHU2NWIwXHU2NjY4XHU3MWZjXHU3NTMzXHU3OTVlXHU3ZDMzXHU4MTRlXHU4MWUzXHU4Mzk4XHU4NWFhXHU4NWNlXHU4NzAz''@;'; put 'put ''XHU4YTBhXHU4ZWFiXHU4ZjliXHVmOTcxXHU4ZmM1XHU1OTMxXHU1YmE0XHU1YmU2XHU2MDg5XHU1YmU5XHU1YzBiXHU1ZmMzXHU2YzgxIl0sWyJlNGExIiwiXHVmOTcyXHU2ZGYxXHU3MDBiXHU3NTFhXHU4MmFmXHU4YWY2XHU0ZWMwXHU1MzQxXHVmOTczXHU5NmQ5XHU2YzBmXHU0ZTllXHU0''@;'; put 'put ''ZmM0XHU1MTUyXHU1NTVlXHU1YTI1XHU1Y2U4XHU2MjExXHU3MjU5XHU4MmJkXHU4M2FhXHU4NmZlXHU4ODU5XHU4YTFkXHU5NjNmXHU5NmM1XHU5OTEzXHU5ZDA5XHU5ZDVkXHU1ODBhXHU1Y2IzXHU1ZGJkXHU1ZTQ0XHU2MGUxXHU2MTE1XHU2M2UxXHU2YTAyXHU2ZTI1XHU5MTAyXHU5MzU0''@;'; put 'put ''XHU5ODRlXHU5YzEwXHU5Zjc3XHU1Yjg5XHU1Y2I4XHU2MzA5XHU2NjRmXHU2ODQ4XHU3NzNjXHU5NmMxXHU5NzhkXHU5ODU0XHU5YjlmXHU2NWExXHU4YjAxXHU4ZWNiXHU5NWJjXHU1NTM1XHU1Y2E5XHU1ZGQ2XHU1ZWI1XHU2Njk3XHU3NjRjXHU4M2Y0XHU5NWM3XHU1OGQzXHU2MmJjXHU3''@;'; put 'put ''MmNlXHU5ZDI4XHU0ZWYwXHU1OTJlXHU2MDBmXHU2NjNiXHU2YjgzXHU3OWU3XHU5ZDI2XHU1MzkzXHU1NGMwXHU1N2MzXHU1ZDE2XHU2MTFiXHU2NmQ2XHU2ZGFmXHU3ODhkXHU4MjdlXHU5Njk4XHU5NzQ0XHU1Mzg0XHU2MjdjXHU2Mzk2XHU2ZGIyXHU3ZTBhXHU4MTRiXHU5ODRkIl0sWyJl''@;'; put 'put ''NWExIiwiXHU2YWZiXHU3ZjRjXHU5ZGFmXHU5ZTFhXHU0ZTVmXHU1MDNiXHU1MWI2XHU1OTFjXHU2MGY5XHU2M2Y2XHU2OTMwXHU3MjNhXHU4MDM2XHVmOTc0XHU5MWNlXHU1ZjMxXHVmOTc1XHVmOTc2XHU3ZDA0XHU4MmU1XHU4NDZmXHU4NGJiXHU4NWU1XHU4ZThkXHVmOTc3XHU0ZjZmXHVm''@;'; put 'put ''OTc4XHVmOTc5XHU1OGU0XHU1YjQzXHU2MDU5XHU2M2RhXHU2NTE4XHU2NTZkXHU2Njk4XHVmOTdhXHU2OTRhXHU2YTIzXHU2ZDBiXHU3MDAxXHU3MTZjXHU3NWQyXHU3NjBkXHU3OWIzXHU3YTcwXHVmOTdiXHU3ZjhhXHVmOTdjXHU4OTQ0XHVmOTdkXHU4YjkzXHU5MWMwXHU5NjdkXHVmOTdl''@;'; put 'put ''XHU5OTBhXHU1NzA0XHU1ZmExXHU2NWJjXHU2ZjAxXHU3NjAwXHU3OWE2XHU4YTllXHU5OWFkXHU5YjVhXHU5ZjZjXHU1MTA0XHU2MWI2XHU2MjkxXHU2YThkXHU4MWM2XHU1MDQzXHU1ODMwXHU1ZjY2XHU3MTA5XHU4YTAwXHU4YWZhXHU1YjdjXHU4NjE2XHU0ZmZhXHU1MTNjXHU1NmI0XHU1''@;'; put 'put ''OTQ0XHU2M2E5XHU2ZGY5XHU1ZGFhXHU2OTZkXHU1MTg2XHU0ZTg4XHU0ZjU5XHVmOTdmXHVmOTgwXHVmOTgxXHU1OTgyXHVmOTgyIl0sWyJlNmExIiwiXHVmOTgzXHU2YjVmXHU2YzVkXHVmOTg0XHU3NGI1XHU3OTE2XHVmOTg1XHU4MjA3XHU4MjQ1XHU4MzM5XHU4ZjNmXHU4ZjVkXHVmOTg2''@;'; put 'put ''XHU5OTE4XHVmOTg3XHVmOTg4XHVmOTg5XHU0ZWE2XHVmOThhXHU1N2RmXHU1Zjc5XHU2NjEzXHVmOThiXHVmOThjXHU3NWFiXHU3ZTc5XHU4YjZmXHVmOThkXHU5MDA2XHU5YTViXHU1NmE1XHU1ODI3XHU1OWY4XHU1YTFmXHU1YmI0XHVmOThlXHU1ZWY2XHVmOThmXHVmOTkwXHU2MzUwXHU2''@;'; put 'put ''MzNiXHVmOTkxXHU2OTNkXHU2Yzg3XHU2Y2JmXHU2ZDhlXHU2ZDkzXHU2ZGY1XHU2ZjE0XHVmOTkyXHU3MGRmXHU3MTM2XHU3MTU5XHVmOTkzXHU3MWMzXHU3MWQ1XHVmOTk0XHU3ODRmXHU3ODZmXHVmOTk1XHU3Yjc1XHU3ZGUzXHVmOTk2XHU3ZTJmXHVmOTk3XHU4ODRkXHU4ZWRmXHVmOTk4''@;'; put 'put ''XHVmOTk5XHVmOTlhXHU5MjViXHVmOTliXHU5Y2Y2XHVmOTljXHVmOTlkXHVmOTllXHU2MDg1XHU2ZDg1XHVmOTlmXHU3MWIxXHVmOWEwXHVmOWExXHU5NWIxXHU1M2FkXHVmOWEyXHVmOWEzXHVmOWE0XHU2N2QzXHVmOWE1XHU3MDhlXHU3MTMwXHU3NDMwXHU4Mjc2XHU4MmQyIl0sWyJlN2Ex''@;'; put 'put ''IiwiXHVmOWE2XHU5NWJiXHU5YWU1XHU5ZTdkXHU2NmM0XHVmOWE3XHU3MWMxXHU4NDQ5XHVmOWE4XHVmOWE5XHU1ODRiXHVmOWFhXHVmOWFiXHU1ZGI4XHU1ZjcxXHVmOWFjXHU2NjIwXHU2NjhlXHU2OTc5XHU2OWFlXHU2YzM4XHU2Y2YzXHU2ZTM2XHU2ZjQxXHU2ZmRhXHU3MDFiXHU3MDJm''@;'; put 'put ''XHU3MTUwXHU3MWRmXHU3MzcwXHVmOWFkXHU3NDViXHVmOWFlXHU3NGQ0XHU3NmM4XHU3YTRlXHU3ZTkzXHVmOWFmXHVmOWIwXHU4MmYxXHU4YTYwXHU4ZmNlXHVmOWIxXHU5MzQ4XHVmOWIyXHU5NzE5XHVmOWIzXHVmOWI0XHU0ZTQyXHU1MDJhXHVmOWI1XHU1MjA4XHU1M2UxXHU2NmYzXHU2''@;'; put 'put ''YzZkXHU2ZmNhXHU3MzBhXHU3NzdmXHU3YTYyXHU4MmFlXHU4NWRkXHU4NjAyXHVmOWI2XHU4OGQ0XHU4YTYzXHU4YjdkXHU4YzZiXHVmOWI3XHU5MmIzXHVmOWI4XHU5NzEzXHU5ODEwXHU0ZTk0XHU0ZjBkXHU0ZmM5XHU1MGIyXHU1MzQ4XHU1NDNlXHU1NDMzXHU1NWRhXHU1ODYyXHU1OGJh''@;'; put 'put ''XHU1OTY3XHU1YTFiXHU1YmU0XHU2MDlmXHVmOWI5XHU2MWNhXHU2NTU2XHU2NWZmXHU2NjY0XHU2OGE3XHU2YzVhXHU2ZmIzIl0sWyJlOGExIiwiXHU3MGNmXHU3MWFjXHU3MzUyXHU3YjdkXHU4NzA4XHU4YWE0XHU5YzMyXHU5ZjA3XHU1YzRiXHU2YzgzXHU3MzQ0XHU3Mzg5XHU5MjNhXHU2''@;'; put 'put ''ZWFiXHU3NDY1XHU3NjFmXHU3YTY5XHU3ZTE1XHU4NjBhXHU1MTQwXHU1OGM1XHU2NGMxXHU3NGVlXHU3NTE1XHU3NjcwXHU3ZmMxXHU5MDk1XHU5NmNkXHU5OTU0XHU2ZTI2XHU3NGU2XHU3YWE5XHU3YWFhXHU4MWU1XHU4NmQ5XHU4Nzc4XHU4YTFiXHU1YTQ5XHU1YjhjXHU1YjliXHU2OGEx''@;'; put 'put ''XHU2OTAwXHU2ZDYzXHU3M2E5XHU3NDEzXHU3NDJjXHU3ODk3XHU3ZGU5XHU3ZmViXHU4MTE4XHU4MTU1XHU4MzllXHU4YzRjXHU5NjJlXHU5ODExXHU2NmYwXHU1ZjgwXHU2NWZhXHU2Nzg5XHU2YzZhXHU3MzhiXHU1MDJkXHU1YTAzXHU2YjZhXHU3N2VlXHU1OTE2XHU1ZDZjXHU1ZGNkXHU3''@;'; put 'put ''MzI1XHU3NTRmXHVmOWJhXHVmOWJiXHU1MGU1XHU1MWY5XHU1ODJmXHU1OTJkXHU1OTk2XHU1OWRhXHU1YmU1XHVmOWJjXHVmOWJkXHU1ZGEyXHU2MmQ3XHU2NDE2XHU2NDkzXHU2NGZlXHVmOWJlXHU2NmRjXHVmOWJmXHU2YTQ4XHVmOWMwXHU3MWZmXHU3NDY0XHVmOWMxIl0sWyJlOWExIiwi''@;'; put 'put ''XHU3YTg4XHU3YWFmXHU3ZTQ3XHU3ZTVlXHU4MDAwXHU4MTcwXHVmOWMyXHU4N2VmXHU4OTgxXHU4YjIwXHU5MDU5XHVmOWMzXHU5MDgwXHU5OTUyXHU2MTdlXHU2YjMyXHU2ZDc0XHU3ZTFmXHU4OTI1XHU4ZmIxXHU0ZmQxXHU1MGFkXHU1MTk3XHU1MmM3XHU1N2M3XHU1ODg5XHU1YmI5XHU1''@;'; put 'put ''ZWI4XHU2MTQyXHU2OTk1XHU2ZDhjXHU2ZTY3XHU2ZWI2XHU3MTk0XHU3NDYyXHU3NTI4XHU3NTJjXHU4MDczXHU4MzM4XHU4NGM5XHU4ZTBhXHU5Mzk0XHU5M2RlXHVmOWM0XHU0ZThlXHU0ZjUxXHU1MDc2XHU1MTJhXHU1M2M4XHU1M2NiXHU1M2YzXHU1Yjg3XHU1YmQzXHU1YzI0XHU2MTFh''@;'; put 'put ''XHU2MTgyXHU2NWY0XHU3MjViXHU3Mzk3XHU3NDQwXHU3NmMyXHU3OTUwXHU3OTkxXHU3OWI5XHU3ZDA2XHU3ZmJkXHU4MjhiXHU4NWQ1XHU4NjVlXHU4ZmMyXHU5MDQ3XHU5MGY1XHU5MWVhXHU5Njg1XHU5NmU4XHU5NmU5XHU1MmQ2XHU1ZjY3XHU2NWVkXHU2NjMxXHU2ODJmXHU3MTVjXHU3''@;'; put 'put ''YTM2XHU5MGMxXHU5ODBhXHU0ZTkxXHVmOWM1XHU2YTUyXHU2YjllXHU2ZjkwXHU3MTg5XHU4MDE4XHU4MmI4XHU4NTUzIl0sWyJlYWExIiwiXHU5MDRiXHU5Njk1XHU5NmYyXHU5N2ZiXHU4NTFhXHU5YjMxXHU0ZTkwXHU3MThhXHU5NmM0XHU1MTQzXHU1MzlmXHU1NGUxXHU1NzEzXHU1NzEy''@;'; put 'put ''XHU1N2EzXHU1YTliXHU1YWM0XHU1YmMzXHU2MDI4XHU2MTNmXHU2M2Y0XHU2Yzg1XHU2ZDM5XHU2ZTcyXHU2ZTkwXHU3MjMwXHU3MzNmXHU3NDU3XHU4MmQxXHU4ODgxXHU4ZjQ1XHU5MDYwXHVmOWM2XHU5NjYyXHU5ODU4XHU5ZDFiXHU2NzA4XHU4ZDhhXHU5MjVlXHU0ZjRkXHU1MDQ5XHU1''@;'; put 'put ''MGRlXHU1MzcxXHU1NzBkXHU1OWQ0XHU1YTAxXHU1YzA5XHU2MTcwXHU2NjkwXHU2ZTJkXHU3MjMyXHU3NDRiXHU3ZGVmXHU4MGMzXHU4NDBlXHU4NDY2XHU4NTNmXHU4NzVmXHU4ODViXHU4OTE4XHU4YjAyXHU5MDU1XHU5N2NiXHU5YjRmXHU0ZTczXHU0ZjkxXHU1MTEyXHU1MTZhXHVmOWM3''@;'; put 'put ''XHU1NTJmXHU1NWE5XHU1YjdhXHU1YmE1XHU1ZTdjXHU1ZTdkXHU1ZWJlXHU2MGEwXHU2MGRmXHU2MTA4XHU2MTA5XHU2M2M0XHU2NTM4XHU2NzA5XHVmOWM4XHU2N2Q0XHU2N2RhXHVmOWM5XHU2OTYxXHU2OTYyXHU2Y2I5XHU2ZDI3XHVmOWNhXHU2ZTM4XHVmOWNiIl0sWyJlYmExIiwiXHU2''@;'; put 'put ''ZmUxXHU3MzM2XHU3MzM3XHVmOWNjXHU3NDVjXHU3NTMxXHVmOWNkXHU3NjUyXHVmOWNlXHVmOWNmXHU3ZGFkXHU4MWZlXHU4NDM4XHU4OGQ1XHU4YTk4XHU4YWRiXHU4YWVkXHU4ZTMwXHU4ZTQyXHU5MDRhXHU5MDNlXHU5MDdhXHU5MTQ5XHU5MWM5XHU5MzZlXHVmOWQwXHVmOWQxXHU1ODA5''@;'; put 'put ''XHVmOWQyXHU2YmQzXHU4MDg5XHU4MGIyXHVmOWQzXHVmOWQ0XHU1MTQxXHU1OTZiXHU1YzM5XHVmOWQ1XHVmOWQ2XHU2ZjY0XHU3M2E3XHU4MGU0XHU4ZDA3XHVmOWQ3XHU5MjE3XHU5NThmXHVmOWQ4XHVmOWQ5XHVmOWRhXHVmOWRiXHU4MDdmXHU2MjBlXHU3MDFjXHU3ZDY4XHU4NzhkXHVm''@;'; put 'put ''OWRjXHU1N2EwXHU2MDY5XHU2MTQ3XHU2YmI3XHU4YWJlXHU5MjgwXHU5NmIxXHU0ZTU5XHU1NDFmXHU2ZGViXHU4NTJkXHU5NjcwXHU5N2YzXHU5OGVlXHU2M2Q2XHU2Y2UzXHU5MDkxXHU1MWRkXHU2MWM5XHU4MWJhXHU5ZGY5XHU0ZjlkXHU1MDFhXHU1MTAwXHU1YjljXHU2MTBmXHU2MWZm''@;'; put 'put ''XHU2NGVjXHU2OTA1XHU2YmM1XHU3NTkxXHU3N2UzXHU3ZmE5XHU4MjY0XHU4NThmXHU4N2ZiXHU4ODYzXHU4YWJjIl0sWyJlY2ExIiwiXHU4YjcwXHU5MWFiXHU0ZThjXHU0ZWU1XHU0ZjBhXHVmOWRkXHVmOWRlXHU1OTM3XHU1OWU4XHVmOWRmXHU1ZGYyXHU1ZjFiXHU1ZjViXHU2MDIxXHVm''@;'; put 'put ''OWUwXHVmOWUxXHVmOWUyXHVmOWUzXHU3MjNlXHU3M2U1XHVmOWU0XHU3NTcwXHU3NWNkXHVmOWU1XHU3OWZiXHVmOWU2XHU4MDBjXHU4MDMzXHU4MDg0XHU4MmUxXHU4MzUxXHVmOWU3XHVmOWU4XHU4Y2JkXHU4Y2IzXHU5MDg3XHVmOWU5XHVmOWVhXHU5OGY0XHU5OTBjXHVmOWViXHVmOWVj''@;'; put 'put ''XHU3MDM3XHU3NmNhXHU3ZmNhXHU3ZmNjXHU3ZmZjXHU4YjFhXHU0ZWJhXHU0ZWMxXHU1MjAzXHU1MzcwXHVmOWVkXHU1NGJkXHU1NmUwXHU1OWZiXHU1YmM1XHU1ZjE1XHU1ZmNkXHU2ZTZlXHVmOWVlXHVmOWVmXHU3ZDZhXHU4MzM1XHVmOWYwXHU4NjkzXHU4YThkXHVmOWYxXHU5NzZkXHU5''@;'; put 'put ''Nzc3XHVmOWYyXHVmOWYzXHU0ZTAwXHU0ZjVhXHU0ZjdlXHU1OGY5XHU2NWU1XHU2ZWEyXHU5MDM4XHU5M2IwXHU5OWI5XHU0ZWZiXHU1OGVjXHU1OThhXHU1OWQ5XHU2MDQxXHVmOWY0XHVmOWY1XHU3YTE0XHVmOWY2XHU4MzRmXHU4Y2MzXHU1MTY1XHU1MzQ0Il0sWyJlZGExIiwiXHVmOWY3''@;'; put 'put ''XHVmOWY4XHVmOWY5XHU0ZWNkXHU1MjY5XHU1YjU1XHU4MmJmXHU0ZWQ0XHU1MjNhXHU1NGE4XHU1OWM5XHU1OWZmXHU1YjUwXHU1YjU3XHU1YjVjXHU2MDYzXHU2MTQ4XHU2ZWNiXHU3MDk5XHU3MTZlXHU3Mzg2XHU3NGY3XHU3NWI1XHU3OGMxXHU3ZDJiXHU4MDA1XHU4MWVhXHU4MzI4XHU4''@;'; put 'put ''NTE3XHU4NWM5XHU4YWVlXHU4Y2M3XHU5NmNjXHU0ZjVjXHU1MmZhXHU1NmJjXHU2NWFiXHU2NjI4XHU3MDdjXHU3MGI4XHU3MjM1XHU3ZGJkXHU4MjhkXHU5MTRjXHU5NmMwXHU5ZDcyXHU1YjcxXHU2OGU3XHU2Yjk4XHU2ZjdhXHU3NmRlXHU1YzkxXHU2NmFiXHU2ZjViXHU3YmI0XHU3YzJh''@;'; put 'put ''XHU4ODM2XHU5NmRjXHU0ZTA4XHU0ZWQ3XHU1MzIwXHU1ODM0XHU1OGJiXHU1OGVmXHU1OTZjXHU1YzA3XHU1ZTMzXHU1ZTg0XHU1ZjM1XHU2MzhjXHU2NmIyXHU2NzU2XHU2YTFmXHU2YWEzXHU2YjBjXHU2ZjNmXHU3MjQ2XHVmOWZhXHU3MzUwXHU3NDhiXHU3YWUwXHU3Y2E3XHU4MTc4XHU4''@;'; put 'put ''MWRmXHU4MWU3XHU4MzhhXHU4NDZjXHU4NTIzXHU4NTk0XHU4NWNmXHU4OGRkXHU4ZDEzXHU5MWFjXHU5NTc3Il0sWyJlZWExIiwiXHU5NjljXHU1MThkXHU1NGM5XHU1NzI4XHU1YmIwXHU2MjRkXHU2NzUwXHU2ODNkXHU2ODkzXHU2ZTNkXHU2ZWQzXHU3MDdkXHU3ZTIxXHU4OGMxXHU4Y2Ex''@;'; put 'put ''XHU4ZjA5XHU5ZjRiXHU5ZjRlXHU3MjJkXHU3YjhmXHU4YWNkXHU5MzFhXHU0ZjQ3XHU0ZjRlXHU1MTMyXHU1NDgwXHU1OWQwXHU1ZTk1XHU2MmI1XHU2Nzc1XHU2OTZlXHU2YTE3XHU2Y2FlXHU2ZTFhXHU3MmQ5XHU3MzJhXHU3NWJkXHU3YmI4XHU3ZDM1XHU4MmU3XHU4M2Y5XHU4NDU3XHU4''@;'; put 'put ''NWY3XHU4YTViXHU4Y2FmXHU4ZTg3XHU5MDE5XHU5MGI4XHU5NmNlXHU5ZjVmXHU1MmUzXHU1NDBhXHU1YWUxXHU1YmMyXHU2NDU4XHU2NTc1XHU2ZWY0XHU3MmM0XHVmOWZiXHU3Njg0XHU3YTRkXHU3YjFiXHU3YzRkXHU3ZTNlXHU3ZmRmXHU4MzdiXHU4YjJiXHU4Y2NhXHU4ZDY0XHU4ZGUx''@;'; put 'put ''XHU4ZTVmXHU4ZmVhXHU4ZmY5XHU5MDY5XHU5M2QxXHU0ZjQzXHU0ZjdhXHU1MGIzXHU1MTY4XHU1MTc4XHU1MjRkXHU1MjZhXHU1ODYxXHU1ODdjXHU1OTYwXHU1YzA4XHU1YzU1XHU1ZWRiXHU2MDliXHU2MjMwXHU2ODEzXHU2YmJmXHU2YzA4XHU2ZmIxIl0sWyJlZmExIiwiXHU3MTRlXHU3''@;'; put 'put ''NDIwXHU3NTMwXHU3NTM4XHU3NTUxXHU3NjcyXHU3YjRjXHU3YjhiXHU3YmFkXHU3YmM2XHU3ZThmXHU4YTZlXHU4ZjNlXHU4ZjQ5XHU5MjNmXHU5MjkzXHU5MzIyXHU5NDJiXHU5NmZiXHU5ODVhXHU5ODZiXHU5OTFlXHU1MjA3XHU2MjJhXHU2Mjk4XHU2ZDU5XHU3NjY0XHU3YWNhXHU3YmMw''@;'; put 'put ''XHU3ZDc2XHU1MzYwXHU1Y2JlXHU1ZTk3XHU2ZjM4XHU3MGI5XHU3Yzk4XHU5NzExXHU5YjhlXHU5ZWRlXHU2M2E1XHU2NDdhXHU4Nzc2XHU0ZTAxXHU0ZTk1XHU0ZWFkXHU1MDVjXHU1MDc1XHU1NDQ4XHU1OWMzXHU1YjlhXHU1ZTQwXHU1ZWFkXHU1ZWY3XHU1ZjgxXHU2MGM1XHU2MzNhXHU2''@;'; put 'put ''NTNmXHU2NTc0XHU2NWNjXHU2Njc2XHU2Njc4XHU2N2ZlXHU2OTY4XHU2YTg5XHU2YjYzXHU2YzQwXHU2ZGMwXHU2ZGU4XHU2ZTFmXHU2ZTVlXHU3MDFlXHU3MGExXHU3MzhlXHU3M2ZkXHU3NTNhXHU3NzViXHU3ODg3XHU3OThlXHU3YTBiXHU3YTdkXHU3Y2JlXHU3ZDhlXHU4MjQ3XHU4YTAy''@;'; put 'put ''XHU4YWVhXHU4YzllXHU5MTJkXHU5MTRhXHU5MWQ4XHU5MjY2XHU5MmNjXHU5MzIwXHU5NzA2XHU5NzU2Il0sWyJmMGExIiwiXHU5NzVjXHU5ODAyXHU5ZjBlXHU1MjM2XHU1MjkxXHU1NTdjXHU1ODI0XHU1ZTFkXHU1ZjFmXHU2MDhjXHU2M2QwXHU2OGFmXHU2ZmRmXHU3OTZkXHU3YjJjXHU4''@;'; put 'put ''MWNkXHU4NWJhXHU4OGZkXHU4YWY4XHU4ZTQ0XHU5MThkXHU5NjY0XHU5NjliXHU5NzNkXHU5ODRjXHU5ZjRhXHU0ZmNlXHU1MTQ2XHU1MWNiXHU1MmE5XHU1NjMyXHU1ZjE0XHU1ZjZiXHU2M2FhXHU2NGNkXHU2NWU5XHU2NjQxXHU2NmZhXHU2NmY5XHU2NzFkXHU2ODlkXHU2OGQ3XHU2OWZk''@;'; put 'put ''XHU2ZjE1XHU2ZjZlXHU3MTY3XHU3MWU1XHU3MjJhXHU3NGFhXHU3NzNhXHU3OTU2XHU3OTVhXHU3OWRmXHU3YTIwXHU3YTk1XHU3Yzk3XHU3Y2RmXHU3ZDQ0XHU3ZTcwXHU4MDg3XHU4NWZiXHU4NmE0XHU4YTU0XHU4YWJmXHU4ZDk5XHU4ZTgxXHU5MDIwXHU5MDZkXHU5MWUzXHU5NjNiXHU5''@;'; put 'put ''NmQ1XHU5Y2U1XHU2NWNmXHU3YzA3XHU4ZGIzXHU5M2MzXHU1YjU4XHU1YzBhXHU1MzUyXHU2MmQ5XHU3MzFkXHU1MDI3XHU1Yjk3XHU1ZjllXHU2MGIwXHU2MTZiXHU2OGQ1XHU2ZGQ5XHU3NDJlXHU3YTJlXHU3ZDQyXHU3ZDljXHU3ZTMxXHU4MTZiIl0sWyJmMWExIiwiXHU4ZTJhXHU4ZTM1''@;'; put 'put ''XHU5MzdlXHU5NDE4XHU0ZjUwXHU1NzUwXHU1ZGU2XHU1ZWE3XHU2MzJiXHU3ZjZhXHU0ZTNiXHU0ZjRmXHU0ZjhmXHU1MDVhXHU1OWRkXHU4MGM0XHU1NDZhXHU1NDY4XHU1NWZlXHU1OTRmXHU1Yjk5XHU1ZGRlXHU1ZWRhXHU2NjVkXHU2NzMxXHU2N2YxXHU2ODJhXHU2Y2U4XHU2ZDMyXHU2''@;'; put 'put ''ZTRhXHU2ZjhkXHU3MGI3XHU3M2UwXHU3NTg3XHU3YzRjXHU3ZDAyXHU3ZDJjXHU3ZGEyXHU4MjFmXHU4NmRiXHU4YTNiXHU4YTg1XHU4ZDcwXHU4ZThhXHU4ZjMzXHU5MDMxXHU5MTRlXHU5MTUyXHU5NDQ0XHU5OWQwXHU3YWY5XHU3Y2E1XHU0ZmNhXHU1MTAxXHU1MWM2XHU1N2M4XHU1YmVm''@;'; put 'put ''XHU1Y2ZiXHU2NjU5XHU2YTNkXHU2ZDVhXHU2ZTk2XHU2ZmVjXHU3MTBjXHU3NTZmXHU3YWUzXHU4ODIyXHU5MDIxXHU5MDc1XHU5NmNiXHU5OWZmXHU4MzAxXHU0ZTJkXHU0ZWYyXHU4ODQ2XHU5MWNkXHU1MzdkXHU2YWRiXHU2OTZiXHU2YzQxXHU4NDdhXHU1ODllXHU2MThlXHU2NmZlXHU2''@;'; put 'put ''MmVmXHU3MGRkXHU3NTExXHU3NWM3XHU3ZTUyXHU4NGI4XHU4YjQ5XHU4ZDA4XHU0ZTRiXHU1M2VhIl0sWyJmMmExIiwiXHU1NGFiXHU1NzMwXHU1NzQwXHU1ZmQ3XHU2MzAxXHU2MzA3XHU2NDZmXHU2NTJmXHU2NWU4XHU2NjdhXHU2NzlkXHU2N2IzXHU2YjYyXHU2YzYwXHU2YzlhXHU2ZjJj''@;'; put 'put ''XHU3N2U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3ZDE5XHU4MGEyXHU4MTAyXHU4MWYzXHU4MjlkXHU4MmI3XHU4NzE4XHU4YThjXHVmOWZjXHU4ZDA0XHU4ZGJlXHU5MDcyXHU3NmY0XHU3YTE5XHU3YTM3XHU3ZTU0XHU4MDc3XHU1NTA3XHU1NWQ0XHU1ODc1XHU2MzJmXHU2NDIyXHU2NjQ5XHU2''@;'; put 'put ''NjRiXHU2ODZkXHU2OTliXHU2Yjg0XHU2ZDI1XHU2ZWIxXHU3M2NkXHU3NDY4XHU3NGExXHU3NTViXHU3NWI5XHU3NmUxXHU3NzFlXHU3NzhiXHU3OWU2XHU3ZTA5XHU3ZTFkXHU4MWZiXHU4NTJmXHU4ODk3XHU4YTNhXHU4Y2QxXHU4ZWViXHU4ZmIwXHU5MDMyXHU5M2FkXHU5NjYzXHU5Njcz''@;'; put 'put ''XHU5NzA3XHU0Zjg0XHU1M2YxXHU1OWVhXHU1YWM5XHU1ZTE5XHU2ODRlXHU3NGM2XHU3NWJlXHU3OWU5XHU3YTkyXHU4MWEzXHU4NmVkXHU4Y2VhXHU4ZGNjXHU4ZmVkXHU2NTlmXHU2NzE1XHVmOWZkXHU1N2Y3XHU2ZjU3XHU3ZGRkXHU4ZjJmIl0sWyJmM2ExIiwiXHU5M2Y2XHU5NmM2XHU1''@;'; put 'put ''ZmI1XHU2MWYyXHU2Zjg0XHU0ZTE0XHU0Zjk4XHU1MDFmXHU1M2M5XHU1NWRmXHU1ZDZmXHU1ZGVlXHU2YjIxXHU2YjY0XHU3OGNiXHU3YjlhXHVmOWZlXHU4ZTQ5XHU4ZWNhXHU5MDZlXHU2MzQ5XHU2NDNlXHU3NzQwXHU3YTg0XHU5MzJmXHU5NDdmXHU5ZjZhXHU2NGIwXHU2ZmFmXHU3MWU2''@;'; put 'put ''XHU3NGE4XHU3NGRhXHU3YWM0XHU3YzEyXHU3ZTgyXHU3Y2IyXHU3ZTk4XHU4YjlhXHU4ZDBhXHU5NDdkXHU5OTEwXHU5OTRjXHU1MjM5XHU1YmRmXHU2NGU2XHU2NzJkXHU3ZDJlXHU1MGVkXHU1M2MzXHU1ODc5XHU2MTU4XHU2MTU5XHU2MWZhXHU2NWFjXHU3YWQ5XHU4YjkyXHU4Yjk2XHU1''@;'; put 'put ''MDA5XHU1MDIxXHU1Mjc1XHU1NTMxXHU1YTNjXHU1ZWUwXHU1ZjcwXHU2MTM0XHU2NTVlXHU2NjBjXHU2NjM2XHU2NmEyXHU2OWNkXHU2ZWM0XHU2ZjMyXHU3MzE2XHU3NjIxXHU3YTkzXHU4MTM5XHU4MjU5XHU4M2Q2XHU4NGJjXHU1MGI1XHU1N2YwXHU1YmMwXHU1YmU4XHU1ZjY5XHU2M2Ex''@;'; put 'put ''XHU3ODI2XHU3ZGI1XHU4M2RjXHU4NTIxXHU5MWM3XHU5MWY1XHU1MThhXHU2N2Y1XHU3YjU2Il0sWyJmNGExIiwiXHU4Y2FjXHU1MWM0XHU1OWJiXHU2MGJkXHU4NjU1XHU1MDFjXHVmOWZmXHU1MjU0XHU1YzNhXHU2MTdkXHU2MjFhXHU2MmQzXHU2NGYyXHU2NWE1XHU2ZWNjXHU3NjIwXHU4''@;'; put 'put ''MTBhXHU4ZTYwXHU5NjVmXHU5NmJiXHU0ZWRmXHU1MzQzXHU1NTk4XHU1OTI5XHU1ZGRkXHU2NGM1XHU2Y2M5XHU2ZGZhXHU3Mzk0XHU3YTdmXHU4MjFiXHU4NWE2XHU4Y2U0XHU4ZTEwXHU5MDc3XHU5MWU3XHU5NWUxXHU5NjIxXHU5N2M2XHU1MWY4XHU1NGYyXHU1NTg2XHU1ZmI5XHU2NGE0''@;'; put 'put ''XHU2Zjg4XHU3ZGI0XHU4ZjFmXHU4ZjRkXHU5NDM1XHU1MGM5XHU1YzE2XHU2Y2JlXHU2ZGZiXHU3NTFiXHU3N2JiXHU3YzNkXHU3YzY0XHU4YTc5XHU4YWMyXHU1ODFlXHU1OWJlXHU1ZTE2XHU2Mzc3XHU3MjUyXHU3NThhXHU3NzZiXHU4YWRjXHU4Y2JjXHU4ZjEyXHU1ZWYzXHU2Njc0XHU2''@;'; put 'put ''ZGY4XHU4MDdkXHU4M2MxXHU4YWNiXHU5NzUxXHU5YmQ2XHVmYTAwXHU1MjQzXHU2NmZmXHU2ZDk1XHU2ZWVmXHU3ZGUwXHU4YWU2XHU5MDJlXHU5MDVlXHU5YWQ0XHU1MjFkXHU1MjdmXHU1NGU4XHU2MTk0XHU2Mjg0XHU2MmRiXHU2OGEyIl0sWyJmNWExIiwiXHU2OTEyXHU2OTVhXHU2YTM1''@;'; put 'put ''XHU3MDkyXHU3MTI2XHU3ODVkXHU3OTAxXHU3OTBlXHU3OWQyXHU3YTBkXHU4MDk2XHU4Mjc4XHU4MmQ1XHU4MzQ5XHU4NTQ5XHU4YzgyXHU4ZDg1XHU5MTYyXHU5MThiXHU5MWFlXHU0ZmMzXHU1NmQxXHU3MWVkXHU3N2Q3XHU4NzAwXHU4OWY4XHU1YmY4XHU1ZmQ2XHU2NzUxXHU5MGE4XHU1''@;'; put 'put ''M2UyXHU1ODVhXHU1YmY1XHU2MGE0XHU2MTgxXHU2NDYwXHU3ZTNkXHU4MDcwXHU4NTI1XHU5MjgzXHU2NGFlXHU1MGFjXHU1ZDE0XHU2NzAwXHU1ODljXHU2MmJkXHU2M2E4XHU2OTBlXHU2OTc4XHU2YTFlXHU2ZTZiXHU3NmJhXHU3OWNiXHU4MmJiXHU4NDI5XHU4YWNmXHU4ZGE4XHU4ZmZk''@;'; put 'put ''XHU5MTEyXHU5MTRiXHU5MTljXHU5MzEwXHU5MzE4XHU5MzlhXHU5NmRiXHU5YTM2XHU5YzBkXHU0ZTExXHU3NTVjXHU3OTVkXHU3YWZhXHU3YjUxXHU3YmM5XHU3ZTJlXHU4NGM0XHU4ZTU5XHU4ZTc0XHU4ZWY4XHU5MDEwXHU2NjI1XHU2OTNmXHU3NDQzXHU1MWZhXHU2NzJlXHU5ZWRjXHU1''@;'; put 'put ''MTQ1XHU1ZmUwXHU2Yzk2XHU4N2YyXHU4ODVkXHU4ODc3XHU2MGI0XHU4MWI1XHU4NDAzIl0sWyJmNmExIiwiXHU4ZDA1XHU1M2Q2XHU1NDM5XHU1NjM0XHU1YTM2XHU1YzMxXHU3MDhhXHU3ZmUwXHU4MDVhXHU4MTA2XHU4MWVkXHU4ZGEzXHU5MTg5XHU5YTVmXHU5ZGYyXHU1MDc0XHU0ZWM0''@;'; put 'put ''XHU1M2EwXHU2MGZiXHU2ZTJjXHU1YzY0XHU0Zjg4XHU1MDI0XHU1NWU0XHU1Y2Q5XHU1ZTVmXHU2MDY1XHU2ODk0XHU2Y2JiXHU2ZGM0XHU3MWJlXHU3NWQ0XHU3NWY0XHU3NjYxXHU3YTFhXHU3YTQ5XHU3ZGM3XHU3ZGZiXHU3ZjZlXHU4MWY0XHU4NmE5XHU4ZjFjXHU5NmM5XHU5OWIzXHU5''@;'; put 'put ''ZjUyXHU1MjQ3XHU1MmM1XHU5OGVkXHU4OWFhXHU0ZTAzXHU2N2QyXHU2ZjA2XHU0ZmI1XHU1YmUyXHU2Nzk1XHU2Yzg4XHU2ZDc4XHU3NDFiXHU3ODI3XHU5MWRkXHU5MzdjXHU4N2M0XHU3OWU0XHU3YTMxXHU1ZmViXHU0ZWQ2XHU1NGE0XHU1NTNlXHU1OGFlXHU1OWE1XHU2MGYwXHU2MjUz''@;'; put 'put ''XHU2MmQ2XHU2NzM2XHU2OTU1XHU4MjM1XHU5NjQwXHU5OWIxXHU5OWRkXHU1MDJjXHU1MzUzXHU1NTQ0XHU1NzdjXHVmYTAxXHU2MjU4XHVmYTAyXHU2NGUyXHU2NjZiXHU2N2RkXHU2ZmMxXHU2ZmVmXHU3NDIyXHU3NDM4XHU4YTE3Il0sWyJmN2ExIiwiXHU5NDM4XHU1NDUxXHU1NjA2XHU1''@;'; put 'put ''NzY2XHU1ZjQ4XHU2MTlhXHU2YjRlXHU3MDU4XHU3MGFkXHU3ZGJiXHU4YTk1XHU1OTZhXHU4MTJiXHU2M2EyXHU3NzA4XHU4MDNkXHU4Y2FhXHU1ODU0XHU2NDJkXHU2OWJiXHU1Yjk1XHU1ZTExXHU2ZTZmXHVmYTAzXHU4NTY5XHU1MTRjXHU1M2YwXHU1OTJhXHU2MDIwXHU2MTRiXHU2Yjg2''@;'; put 'put ''XHU2YzcwXHU2Y2YwXHU3YjFlXHU4MGNlXHU4MmQ0XHU4ZGM2XHU5MGIwXHU5OGIxXHVmYTA0XHU2NGM3XHU2ZmE0XHU2NDkxXHU2NTA0XHU1MTRlXHU1NDEwXHU1NzFmXHU4YTBlXHU2MTVmXHU2ODc2XHVmYTA1XHU3NWRiXHU3YjUyXHU3ZDcxXHU5MDFhXHU1ODA2XHU2OWNjXHU4MTdmXHU4''@;'; put 'put ''OTJhXHU5MDAwXHU5ODM5XHU1MDc4XHU1OTU3XHU1OWFjXHU2Mjk1XHU5MDBmXHU5YjJhXHU2MTVkXHU3Mjc5XHU5NWQ2XHU1NzYxXHU1YTQ2XHU1ZGY0XHU2MjhhXHU2NGFkXHU2NGZhXHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3MjJjXHU3NDM2XHU3ODM0XHU3Zjc3XHU4MmFkXHU4ZGRiXHU5ODE3''@;'; put 'put ''XHU1MjI0XHU1NzQyXHU2NzdmXHU3MjQ4XHU3NGUzXHU4Y2E5XHU4ZmE2XHU5MjExIl0sWyJmOGExIiwiXHU5NjJhXHU1MTZiXHU1M2VkXHU2MzRjXHU0ZjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2YzliXHU2ZDdmXHU3MjRjXHU3MmZkXHU3YTE3XHU4OTg3XHU4YzlkXHU1ZjZkXHU2ZjhlXHU3''@;'; put 'put ''MGY5XHU4MWE4XHU2MTBlXHU0ZmJmXHU1MDRmXHU2MjQxXHU3MjQ3XHU3YmM3XHU3ZGU4XHU3ZmU5XHU5MDRkXHU5N2FkXHU5YTE5XHU4Y2I2XHU1NzZhXHU1ZTczXHU2N2IwXHU4NDBkXHU4YTU1XHU1NDIwXHU1YjE2XHU1ZTYzXHU1ZWUyXHU1ZjBhXHU2NTgzXHU4MGJhXHU4NTNkXHU5NTg5''@;'; put 'put ''XHU5NjViXHU0ZjQ4XHU1MzA1XHU1MzBkXHU1MzBmXHU1NDg2XHU1NGZhXHU1NzAzXHU1ZTAzXHU2MDE2XHU2MjliXHU2MmIxXHU2MzU1XHVmYTA2XHU2Y2UxXHU2ZDY2XHU3NWIxXHU3ODMyXHU4MGRlXHU4MTJmXHU4MmRlXHU4NDYxXHU4NGIyXHU4ODhkXHU4OTEyXHU5MDBiXHU5MmVhXHU5''@;'; put 'put ''OGZkXHU5YjkxXHU1ZTQ1XHU2NmI0XHU2NmRkXHU3MDExXHU3MjA2XHVmYTA3XHU0ZmY1XHU1MjdkXHU1ZjZhXHU2MTUzXHU2NzUzXHU2YTE5XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4Yzc5XHU5OGM3XHU5OGM0XHU5YTQzIl0sWyJmOWExIiwiXHU1NGMxXHU3YTFmXHU2OTUzXHU4YWY3''@;'; put 'put ''XHU4YzRhXHU5OGE4XHU5OWFlXHU1ZjdjXHU2MmFiXHU3NWIyXHU3NmFlXHU4OGFiXHU5MDdmXHU5NjQyXHU1MzM5XHU1ZjNjXHU1ZmM1XHU2Y2NjXHU3M2NjXHU3NTYyXHU3NThiXHU3YjQ2XHU4MmZlXHU5OTlkXHU0ZTRmXHU5MDNjXHU0ZTBiXHU0ZjU1XHU1M2E2XHU1OTBmXHU1ZWM4XHU2''@;'; put 'put ''NjMwXHU2Y2IzXHU3NDU1XHU4Mzc3XHU4NzY2XHU4Y2MwXHU5MDUwXHU5NzFlXHU5YzE1XHU1OGQxXHU1Yjc4XHU4NjUwXHU4YjE0XHU5ZGI0XHU1YmQyXHU2MDY4XHU2MDhkXHU2NWYxXHU2YzU3XHU2ZjIyXHU2ZmEzXHU3MDFhXHU3ZjU1XHU3ZmYwXHU5NTkxXHU5NTkyXHU5NjUwXHU5N2Qz''@;'; put 'put ''XHU1MjcyXHU4ZjQ0XHU1MWZkXHU1NDJiXHU1NGI4XHU1NTYzXHU1NThhXHU2YWJiXHU2ZGI1XHU3ZGQ4XHU4MjY2XHU5MjljXHU5Njc3XHU5ZTc5XHU1NDA4XHU1NGM4XHU3NmQyXHU4NmU0XHU5NWE0XHU5NWQ0XHU5NjVjXHU0ZWEyXHU0ZjA5XHU1OWVlXHU1YWU2XHU1ZGY3XHU2MDUyXHU2''@;'; put 'put ''Mjk3XHU2NzZkXHU2ODQxXHU2Yzg2XHU2ZTJmXHU3ZjM4XHU4MDliXHU4MjJhIl0sWyJmYWExIiwiXHVmYTA4XHVmYTA5XHU5ODA1XHU0ZWE1XHU1MDU1XHU1NGIzXHU1NzkzXHU1OTVhXHU1YjY5XHU1YmIzXHU2MWM4XHU2OTc3XHU2ZDc3XHU3MDIzXHU4N2Y5XHU4OWUzXHU4YTcyXHU4YWU3''@;'; put 'put ''XHU5MDgyXHU5OWVkXHU5YWI4XHU1MmJlXHU2ODM4XHU1MDE2XHU1ZTc4XHU2NzRmXHU4MzQ3XHU4ODRjXHU0ZWFiXHU1NDExXHU1NmFlXHU3M2U2XHU5MTE1XHU5N2ZmXHU5OTA5XHU5OTU3XHU5OTk5XHU1NjUzXHU1ODlmXHU4NjViXHU4YTMxXHU2MWIyXHU2YWY2XHU3MzdiXHU4ZWQyXHU2''@;'; put 'put ''YjQ3XHU5NmFhXHU5YTU3XHU1OTU1XHU3MjAwXHU4ZDZiXHU5NzY5XHU0ZmQ0XHU1Y2Y0XHU1ZjI2XHU2MWY4XHU2NjViXHU2Y2ViXHU3MGFiXHU3Mzg0XHU3M2I5XHU3M2ZlXHU3NzI5XHU3NzRkXHU3ZDQzXHU3ZDYyXHU3ZTIzXHU4MjM3XHU4ODUyXHVmYTBhXHU4Y2UyXHU5MjQ5XHU5ODZm''@;'; put 'put ''XHU1YjUxXHU3YTc0XHU4ODQwXHU5ODAxXHU1YWNjXHU0ZmUwXHU1MzU0XHU1OTNlXHU1Y2ZkXHU2MzNlXHU2ZDc5XHU3MmY5XHU4MTA1XHU4MTA3XHU4M2EyXHU5MmNmXHU5ODMwXHU0ZWE4XHU1MTQ0XHU1MjExXHU1NzhiIl0sWyJmYmExIiwiXHU1ZjYyXHU2Y2MyXHU2ZWNlXHU3MDA1XHU3''@;'; put 'put ''MDUwXHU3MGFmXHU3MTkyXHU3M2U5XHU3NDY5XHU4MzRhXHU4N2EyXHU4ODYxXHU5MDA4XHU5MGEyXHU5M2EzXHU5OWE4XHU1MTZlXHU1ZjU3XHU2MGUwXHU2MTY3XHU2NmIzXHU4NTU5XHU4ZTRhXHU5MWFmXHU5NzhiXHU0ZTRlXHU0ZTkyXHU1NDdjXHU1OGQ1XHU1OGZhXHU1OTdkXHU1Y2I1''@;'; put 'put ''XHU1ZjI3XHU2MjM2XHU2MjQ4XHU2NjBhXHU2NjY3XHU2YmViXHU2ZDY5XHU2ZGNmXHU2ZTU2XHU2ZWY4XHU2Zjk0XHU2ZmUwXHU2ZmU5XHU3MDVkXHU3MmQwXHU3NDI1XHU3NDVhXHU3NGUwXHU3NjkzXHU3OTVjXHU3Y2NhXHU3ZTFlXHU4MGUxXHU4MmE2XHU4NDZiXHU4NGJmXHU4NjRlXHU4''@;'; put 'put ''NjVmXHU4Nzc0XHU4Yjc3XHU4YzZhXHU5M2FjXHU5ODAwXHU5ODY1XHU2MGQxXHU2MjE2XHU5MTc3XHU1YTVhXHU2NjBmXHU2ZGY3XHU2ZTNlXHU3NDNmXHU5YjQyXHU1ZmZkXHU2MGRhXHU3YjBmXHU1NGM0XHU1ZjE4XHU2YzVlXHU2Y2QzXHU2ZDJhXHU3MGQ4XHU3ZDA1XHU4Njc5XHU4YTBj''@;'; put 'put ''XHU5ZDNiXHU1MzE2XHU1NDhjXHU1YjA1XHU2YTNhXHU3MDZiXHU3NTc1Il0sWyJmY2ExIiwiXHU3OThkXHU3OWJlXHU4MmIxXHU4M2VmXHU4YTcxXHU4YjQxXHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3OGJhXHU3OGJiXHU3YTZiXHU0ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1''@;'; put 'put ''ZTdiXHU2MGEzXHU2M2RiXHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5XHU3MTY1XHU3NGIwXHU3ZDA4XHU5MDg0XHU5YTY5XHU5YzI1XHU2ZDNiXHU2ZWQxXHU3MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4XHU2MDRkXHU2MGY2XHU2MTMwXHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1''@;'; put 'put ''XHU2Y2MxXHU2ZTVmXHU2ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3Njg3XHU3YmMxXHU3YzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5NjhkXHU5ZWMzXHU1MzJmXHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2MWY3XHU2NjY2XHU2NzAzXHU2YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3''@;'; put 'put ''MzZhXHU3ZTZhXHU4MWJlXHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0XHU1MjgzXHU3MzcyXHU1Yjk2XHU2YTZiXHU5NDA0XHU1NGVlXHU1Njg2XHU1YjVkXHU2NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2Il0sWyJmZGExIiwiXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFm''@;'; put 'put ''XHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1ZTNmXHU1ZjhjXHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1''@;'; put 'put ''MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5XHU3MTQ3XHU4YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4''@;'; put 'put ''XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2YjNkXHU2YjQ2XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3''@;'; put 'put ''MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcwIl1dJyl9LDc0Mjg0OmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyJhMTQwIiwiXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFi''@;'; put 'put ''XHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1''@;'; put 'put ''ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1''@;'; put 'put ''ZmU1YSJdLFsiYTFhMSIsIlx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVc''@;'; put 'put ''dTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFl''@;'; put 'put ''XHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyIiw0LCJcdWZmNWVcdTIyMjlcdTIyMmFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTMzZDJcdTMzZDFcdTIyMmJcdTIyMmVcdTIyMzVcdTIyMzRcdTI2NDBcdTI2NDJcdTIyOTVcdTIyOTlcdTIxOTFcdTIx''@;'; put 'put ''OTNcdTIxOTBcdTIxOTJcdTIxOTZcdTIxOTdcdTIxOTlcdTIxOThcdTIyMjVcdTIyMjNcdWZmMGYiXSxbImEyNDAiLCJcdWZmM2NcdTIyMTVcdWZlNjhcdWZmMDRcdWZmZTVcdTMwMTJcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMjBcdTIxMDNcdTIxMDlcdWZlNjlcdWZlNmFcdWZlNmJcdTMzZDVc''@;'; put 'put ''dTMzOWNcdTMzOWRcdTMzOWVcdTMzY2VcdTMzYTFcdTMzOGVcdTMzOGZcdTMzYzRceGIwXHU1MTU5XHU1MTViXHU1MTVlXHU1MTVkXHU1MTYxXHU1MTYzXHU1NWU3XHU3NGU5XHU3Y2NlXHUyNTgxIiw3LCJcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2Nc''@;'; put 'put ''dTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmQiXSxbImEyYTEiLCJcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1''@;'; put 'put ''NzJcdTI1NzNcdWZmMTAiLDksIlx1MjE2MCIsOSwiXHUzMDIxIiw4LCJcdTUzNDFcdTUzNDRcdTUzNDVcdWZmMjEiLDI1LCJcdWZmNDEiLDIxXSxbImEzNDAiLCJcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdTAzOTEiLDE2LCJcdTAzYTMiLDYsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNiwiXHUz''@;'; put 'put ''MTA1IiwxMF0sWyJhM2ExIiwiXHUzMTEwIiwyNSwiXHUwMmQ5XHUwMmM5XHUwMmNhXHUwMmM3XHUwMmNiIl0sWyJhM2UxIiwiXHUyMGFjIl0sWyJhNDQwIiwiXHU0ZTAwXHU0ZTU5XHU0ZTAxXHU0ZTAzXHU0ZTQzXHU0ZTVkXHU0ZTg2XHU0ZThjXHU0ZWJhXHU1MTNmXHU1MTY1XHU1MTZiXHU1''@;'; put 'put ''MWUwXHU1MjAwXHU1MjAxXHU1MjliXHU1MzE1XHU1MzQxXHU1MzVjXHU1M2M4XHU0ZTA5XHU0ZTBiXHU0ZTA4XHU0ZTBhXHU0ZTJiXHU0ZTM4XHU1MWUxXHU0ZTQ1XHU0ZTQ4XHU0ZTVmXHU0ZTVlXHU0ZThlXHU0ZWExXHU1MTQwXHU1MjAzXHU1MmZhXHU1MzQzXHU1M2M5XHU1M2UzXHU1NzFm''@;'; put 'put ''XHU1OGViXHU1OTE1XHU1OTI3XHU1OTczXHU1YjUwXHU1YjUxXHU1YjUzXHU1YmY4XHU1YzBmXHU1YzIyXHU1YzM4XHU1YzcxXHU1ZGRkXHU1ZGU1XHU1ZGYxXHU1ZGYyXHU1ZGYzXHU1ZGZlXHU1ZTcyXHU1ZWZlXHU1ZjBiXHU1ZjEzXHU2MjRkIl0sWyJhNGExIiwiXHU0ZTExXHU0ZTEwXHU0''@;'; put 'put ''ZTBkXHU0ZTJkXHU0ZTMwXHU0ZTM5XHU0ZTRiXHU1YzM5XHU0ZTg4XHU0ZTkxXHU0ZTk1XHU0ZTkyXHU0ZTk0XHU0ZWEyXHU0ZWMxXHU0ZWMwXHU0ZWMzXHU0ZWM2XHU0ZWM3XHU0ZWNkXHU0ZWNhXHU0ZWNiXHU0ZWM0XHU1MTQzXHU1MTQxXHU1MTY3XHU1MTZkXHU1MTZlXHU1MTZjXHU1MTk3''@;'; put 'put ''XHU1MWY2XHU1MjA2XHU1MjA3XHU1MjA4XHU1MmZiXHU1MmZlXHU1MmZmXHU1MzE2XHU1MzM5XHU1MzQ4XHU1MzQ3XHU1MzQ1XHU1MzVlXHU1Mzg0XHU1M2NiXHU1M2NhXHU1M2NkXHU1OGVjXHU1OTI5XHU1OTJiXHU1OTJhXHU1OTJkXHU1YjU0XHU1YzExXHU1YzI0XHU1YzNhXHU1YzZmXHU1''@;'; put 'put ''ZGY0XHU1ZTdiXHU1ZWZmXHU1ZjE0XHU1ZjE1XHU1ZmMzXHU2MjA4XHU2MjM2XHU2MjRiXHU2MjRlXHU2NTJmXHU2NTg3XHU2NTk3XHU2NWE0XHU2NWI5XHU2NWU1XHU2NmYwXHU2NzA4XHU2NzI4XHU2YjIwXHU2YjYyXHU2Yjc5XHU2YmNiXHU2YmQ0XHU2YmRiXHU2YzBmXHU2YzM0XHU3MDZi''@;'; put 'put ''XHU3MjJhXHU3MjM2XHU3MjNiXHU3MjQ3XHU3MjU5XHU3MjViXHU3MmFjXHU3MzhiXHU0ZTE5Il0sWyJhNTQwIiwiXHU0ZTE2XHU0ZTE1XHU0ZTE0XHU0ZTE4XHU0ZTNiXHU0ZTRkXHU0ZTRmXHU0ZTRlXHU0ZWU1XHU0ZWQ4XHU0ZWQ0XHU0ZWQ1XHU0ZWQ2XHU0ZWQ3XHU0ZWUzXHU0ZWU0XHU0''@;'; put 'put ''ZWQ5XHU0ZWRlXHU1MTQ1XHU1MTQ0XHU1MTg5XHU1MThhXHU1MWFjXHU1MWY5XHU1MWZhXHU1MWY4XHU1MjBhXHU1MmEwXHU1MjlmXHU1MzA1XHU1MzA2XHU1MzE3XHU1MzFkXHU0ZWRmXHU1MzRhXHU1MzQ5XHU1MzYxXHU1MzYwXHU1MzZmXHU1MzZlXHU1M2JiXHU1M2VmXHU1M2U0XHU1M2Yz''@;'; put 'put ''XHU1M2VjXHU1M2VlXHU1M2U5XHU1M2U4XHU1M2ZjXHU1M2Y4XHU1M2Y1XHU1M2ViXHU1M2U2XHU1M2VhXHU1M2YyXHU1M2YxXHU1M2YwXHU1M2U1XHU1M2VkXHU1M2ZiXHU1NmRiXHU1NmRhXHU1OTE2Il0sWyJhNWExIiwiXHU1OTJlXHU1OTMxXHU1OTc0XHU1OTc2XHU1YjU1XHU1YjgzXHU1''@;'; put 'put ''YzNjXHU1ZGU4XHU1ZGU3XHU1ZGU2XHU1ZTAyXHU1ZTAzXHU1ZTczXHU1ZTdjXHU1ZjAxXHU1ZjE4XHU1ZjE3XHU1ZmM1XHU2MjBhXHU2MjUzXHU2MjU0XHU2MjUyXHU2MjUxXHU2NWE1XHU2NWU2XHU2NzJlXHU2NzJjXHU2NzJhXHU2NzJiXHU2NzJkXHU2YjYzXHU2YmNkXHU2YzExXHU2YzEw''@;'; put 'put ''XHU2YzM4XHU2YzQxXHU2YzQwXHU2YzNlXHU3MmFmXHU3Mzg0XHU3Mzg5XHU3NGRjXHU3NGU2XHU3NTE4XHU3NTFmXHU3NTI4XHU3NTI5XHU3NTMwXHU3NTMxXHU3NTMyXHU3NTMzXHU3NThiXHU3NjdkXHU3NmFlXHU3NmJmXHU3NmVlXHU3N2RiXHU3N2UyXHU3N2YzXHU3OTNhXHU3OWJlXHU3''@;'; put 'put ''YTc0XHU3YWNiXHU0ZTFlXHU0ZTFmXHU0ZTUyXHU0ZTUzXHU0ZTY5XHU0ZTk5XHU0ZWE0XHU0ZWE2XHU0ZWE1XHU0ZWZmXHU0ZjA5XHU0ZjE5XHU0ZjBhXHU0ZjE1XHU0ZjBkXHU0ZjEwXHU0ZjExXHU0ZjBmXHU0ZWYyXHU0ZWY2XHU0ZWZiXHU0ZWYwXHU0ZWYzXHU0ZWZkXHU0ZjAxXHU0ZjBi''@;'; put 'put ''XHU1MTQ5XHU1MTQ3XHU1MTQ2XHU1MTQ4XHU1MTY4Il0sWyJhNjQwIiwiXHU1MTcxXHU1MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1MjEyXHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIwXHU1MzcwXHU1MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1NDBhXHU1NDEwXHU1NDAxXHU1''@;'; put 'put ''NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4XHU1NDAzXHU1NDBlXHU1NDA2XHU1NDEyXHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMzXHU1NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1OTE5XHU1OTFhXHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4XHU1OTgzXHU1OTdkXHU1OTc5''@;'; put 'put ''XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5XHU1YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1ZTA2XHU1ZTc2XHU1ZTc0Il0sWyJhNmExIiwiXHU1ZjBmXHU1ZjFiXHU1ZmQ5XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2''@;'; put 'put ''MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2NzA5XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1XHU2YjIxXHU2YjY0XHU2YjdiXHU2YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRl''@;'; put 'put ''XHU3MDcwXHU3MjVmXHU3MjVkXHU3NjdlXHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2XHU3ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4MDBjXHU4MDEyXHU4MDMzXHU4MDdmXHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUzXHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4''@;'; put 'put ''MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0ZTMyXHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3XHU0ZjU3XHU0ZjVlXHU0ZjM0XHU0ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2''@;'; put 'put ''XHU0ZjYzIl0sWyJhNzQwIiwiXHU0ZjVjXHU0ZjYwXHU0ZjJmXHU0ZjRlXHU0ZjM2XHU0ZjU5XHU0ZjVkXHU0ZjQ4XHU0ZjVhXHU1MTRjXHU1MTRiXHU1MTRkXHU1MTc1XHU1MWI2XHU1MWI3XHU1MjI1XHU1MjI0XHU1MjI5XHU1MjJhXHU1MjI4XHU1MmFiXHU1MmE5XHU1MmFhXHU1MmFjXHU1''@;'; put 'put ''MzIzXHU1MzczXHU1Mzc1XHU1NDFkXHU1NDJkXHU1NDFlXHU1NDNlXHU1NDI2XHU1NDRlXHU1NDI3XHU1NDQ2XHU1NDQzXHU1NDMzXHU1NDQ4XHU1NDQyXHU1NDFiXHU1NDI5XHU1NDRhXHU1NDM5XHU1NDNiXHU1NDM4XHU1NDJlXHU1NDM1XHU1NDM2XHU1NDIwXHU1NDNjXHU1NDQwXHU1NDMx''@;'; put 'put ''XHU1NDJiXHU1NDFmXHU1NDJjXHU1NmVhXHU1NmYwXHU1NmU0XHU1NmViXHU1NzRhXHU1NzUxXHU1NzQwXHU1NzRkIl0sWyJhN2ExIiwiXHU1NzQ3XHU1NzRlXHU1NzNlXHU1NzUwXHU1NzRmXHU1NzNiXHU1OGVmXHU1OTNlXHU1OTlkXHU1OTkyXHU1OWE4XHU1OTllXHU1OWEzXHU1OTk5XHU1''@;'; put 'put ''OTk2XHU1OThkXHU1OWE0XHU1OTkzXHU1OThhXHU1OWE1XHU1YjVkXHU1YjVjXHU1YjVhXHU1YjViXHU1YjhjXHU1YjhiXHU1YjhmXHU1YzJjXHU1YzQwXHU1YzQxXHU1YzNmXHU1YzNlXHU1YzkwXHU1YzkxXHU1Yzk0XHU1YzhjXHU1ZGViXHU1ZTBjXHU1ZThmXHU1ZTg3XHU1ZThhXHU1ZWY3''@;'; put 'put ''XHU1ZjA0XHU1ZjFmXHU1ZjY0XHU1ZjYyXHU1Zjc3XHU1Zjc5XHU1ZmQ4XHU1ZmNjXHU1ZmQ3XHU1ZmNkXHU1ZmYxXHU1ZmViXHU1ZmY4XHU1ZmVhXHU2MjEyXHU2MjExXHU2Mjg0XHU2Mjk3XHU2Mjk2XHU2MjgwXHU2Mjc2XHU2Mjg5XHU2MjZkXHU2MjhhXHU2MjdjXHU2MjdlXHU2Mjc5XHU2''@;'; put 'put ''MjczXHU2MjkyXHU2MjZmXHU2Mjk4XHU2MjZlXHU2Mjk1XHU2MjkzXHU2MjkxXHU2Mjg2XHU2NTM5XHU2NTNiXHU2NTM4XHU2NWYxXHU2NmY0XHU2NzVmXHU2NzRlXHU2NzRmXHU2NzUwXHU2NzUxXHU2NzVjXHU2NzU2XHU2NzVlXHU2NzQ5XHU2NzQ2XHU2NzYwIl0sWyJhODQwIiwiXHU2NzUz''@;'; put 'put ''XHU2NzU3XHU2YjY1XHU2YmNmXHU2YzQyXHU2YzVlXHU2Yzk5XHU2YzgxXHU2Yzg4XHU2Yzg5XHU2Yzg1XHU2YzliXHU2YzZhXHU2YzdhXHU2YzkwXHU2YzcwXHU2YzhjXHU2YzY4XHU2Yzk2XHU2YzkyXHU2YzdkXHU2YzgzXHU2YzcyXHU2YzdlXHU2Yzc0XHU2Yzg2XHU2Yzc2XHU2YzhkXHU2''@;'; put 'put ''Yzk0XHU2Yzk4XHU2YzgyXHU3MDc2XHU3MDdjXHU3MDdkXHU3MDc4XHU3MjYyXHU3MjYxXHU3MjYwXHU3MmM0XHU3MmMyXHU3Mzk2XHU3NTJjXHU3NTJiXHU3NTM3XHU3NTM4XHU3NjgyXHU3NmVmXHU3N2UzXHU3OWMxXHU3OWMwXHU3OWJmXHU3YTc2XHU3Y2ZiXHU3ZjU1XHU4MDk2XHU4MDkz''@;'; put 'put ''XHU4MDlkXHU4MDk4XHU4MDliXHU4MDlhXHU4MGIyXHU4MjZmXHU4MjkyIl0sWyJhOGExIiwiXHU4MjhiXHU4MjhkXHU4OThiXHU4OWQyXHU4YTAwXHU4YzM3XHU4YzQ2XHU4YzU1XHU4YzlkXHU4ZDY0XHU4ZDcwXHU4ZGIzXHU4ZWFiXHU4ZWNhXHU4ZjliXHU4ZmIwXHU4ZmMyXHU4ZmM2XHU4''@;'; put 'put ''ZmM1XHU4ZmM0XHU1ZGUxXHU5MDkxXHU5MGEyXHU5MGFhXHU5MGE2XHU5MGEzXHU5MTQ5XHU5MWM2XHU5MWNjXHU5NjMyXHU5NjJlXHU5NjMxXHU5NjJhXHU5NjJjXHU0ZTI2XHU0ZTU2XHU0ZTczXHU0ZThiXHU0ZTliXHU0ZTllXHU0ZWFiXHU0ZWFjXHU0ZjZmXHU0ZjlkXHU0ZjhkXHU0Zjcz''@;'; put 'put ''XHU0ZjdmXHU0ZjZjXHU0ZjliXHU0ZjhiXHU0Zjg2XHU0ZjgzXHU0ZjcwXHU0Zjc1XHU0Zjg4XHU0ZjY5XHU0ZjdiXHU0Zjk2XHU0ZjdlXHU0ZjhmXHU0ZjkxXHU0ZjdhXHU1MTU0XHU1MTUyXHU1MTU1XHU1MTY5XHU1MTc3XHU1MTc2XHU1MTc4XHU1MWJkXHU1MWZkXHU1MjNiXHU1MjM4XHU1''@;'; put 'put ''MjM3XHU1MjNhXHU1MjMwXHU1MjJlXHU1MjM2XHU1MjQxXHU1MmJlXHU1MmJiXHU1MzUyXHU1MzU0XHU1MzUzXHU1MzUxXHU1MzY2XHU1Mzc3XHU1Mzc4XHU1Mzc5XHU1M2Q2XHU1M2Q0XHU1M2Q3XHU1NDczXHU1NDc1Il0sWyJhOTQwIiwiXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdi''@;'; put 'put ''XHU1NDc3XHU1NDg0XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkwXHU1NDcxXHU1NDc2XHU1NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1NDhiXHU1NDdkXHU1NDhlXHU1NmZhXHU1NzgzXHU1Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1''@;'; put 'put ''OTQ4XHU1OTQ0XHU1OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1OWI5XHU1OWFlXHU1OWQxXHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNiXHU1OWQzXHU1OWNhXHU1OWFmXHU1OWIzXHU1OWQyXHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYzXHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1Yjli''@;'; put 'put ''XHU1YzFhXHU1YzQ4XHU1YzQ1Il0sWyJhOWExIiwiXHU1YzQ2XHU1Y2I3XHU1Y2ExXHU1Y2I4XHU1Y2E5XHU1Y2FiXHU1Y2IxXHU1Y2IzXHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1XHU1ZTk2XHU1ZWY2XHU1ZjI2XHU1''@;'; put 'put ''ZjI3XHU1ZjI5XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1ZmZkXHU1ZmY1XHU1ZmZmXHU2MDBmXHU2MDE0XHU2MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2MjE1XHU2MjNmXHU2MjNlXHU2MjQw''@;'; put 'put ''XHU2MjdmXHU2MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQyXHU2MmRiXHU2MmFiXHU2MmQzXHU2MmQ0XHU2MmNiXHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJjXHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIxXHU2MmQ4XHU2MmQ2XHU2MmQ3XHU2''@;'; put 'put ''MmM2XHU2MmFjXHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2NjEzXHU2NjBjXHU2NjA2XHU2NjAyXHU2NjBlXHU2NjAwXHU2NjBmXHU2NjE1XHU2NjBhIl0sWyJhYTQwIiwiXHU2NjA3XHU2NzBkXHU2NzBiXHU2NzZkXHU2NzhiXHU2Nzk1XHU2NzcxXHU2NzljXHU2Nzcz''@;'; put 'put ''XHU2Nzc3XHU2Nzg3XHU2NzlkXHU2Nzk3XHU2NzZmXHU2NzcwXHU2NzdmXHU2Nzg5XHU2NzdlXHU2NzkwXHU2Nzc1XHU2NzlhXHU2NzkzXHU2NzdjXHU2NzZhXHU2NzcyXHU2YjIzXHU2YjY2XHU2YjY3XHU2YjdmXHU2YzEzXHU2YzFiXHU2Y2UzXHU2Y2U4XHU2Y2YzXHU2Y2IxXHU2Y2NjXHU2''@;'; put 'put ''Y2U1XHU2Y2IzXHU2Y2JkXHU2Y2JlXHU2Y2JjXHU2Y2UyXHU2Y2FiXHU2Y2Q1XHU2Y2QzXHU2Y2I4XHU2Y2M0XHU2Y2I5XHU2Y2MxXHU2Y2FlXHU2Y2Q3XHU2Y2M1XHU2Y2YxXHU2Y2JmXHU2Y2JiXHU2Y2UxXHU2Y2RiXHU2Y2NhXHU2Y2FjXHU2Y2VmXHU2Y2RjXHU2Y2Q2XHU2Y2UwIl0sWyJh''@;'; put 'put ''YWExIiwiXHU3MDk1XHU3MDhlXHU3MDkyXHU3MDhhXHU3MDk5XHU3MjJjXHU3MjJkXHU3MjM4XHU3MjQ4XHU3MjY3XHU3MjY5XHU3MmMwXHU3MmNlXHU3MmQ5XHU3MmQ3XHU3MmQwXHU3M2E5XHU3M2E4XHU3MzlmXHU3M2FiXHU3M2E1XHU3NTNkXHU3NTlkXHU3NTk5XHU3NTlhXHU3Njg0XHU3''@;'; put 'put ''NmMyXHU3NmYyXHU3NmY0XHU3N2U1XHU3N2ZkXHU3OTNlXHU3OTQwXHU3OTQxXHU3OWM5XHU3OWM4XHU3YTdhXHU3YTc5XHU3YWZhXHU3Y2ZlXHU3ZjU0XHU3ZjhjXHU3ZjhiXHU4MDA1XHU4MGJhXHU4MGE1XHU4MGEyXHU4MGIxXHU4MGExXHU4MGFiXHU4MGE5XHU4MGI0XHU4MGFhXHU4MGFm''@;'; put 'put ''XHU4MWU1XHU4MWZlXHU4MjBkXHU4MmIzXHU4MjlkXHU4Mjk5XHU4MmFkXHU4MmJkXHU4MjlmXHU4MmI5XHU4MmIxXHU4MmFjXHU4MmE1XHU4MmFmXHU4MmI4XHU4MmEzXHU4MmIwXHU4MmJlXHU4MmI3XHU4NjRlXHU4NjcxXHU1MjFkXHU4ODY4XHU4ZWNiXHU4ZmNlXHU4ZmQ0XHU4ZmQxXHU5''@;'; put 'put ''MGI1XHU5MGI4XHU5MGIxXHU5MGI2XHU5MWM3XHU5MWQxXHU5NTc3XHU5NTgwXHU5NjFjXHU5NjQwXHU5NjNmXHU5NjNiXHU5NjQ0Il0sWyJhYjQwIiwiXHU5NjQyXHU5NmI5XHU5NmU4XHU5NzUyXHU5NzVlXHU0ZTlmXHU0ZWFkXHU0ZWFlXHU0ZmUxXHU0ZmI1XHU0ZmFmXHU0ZmJmXHU0ZmUw''@;'; put 'put ''XHU0ZmQxXHU0ZmNmXHU0ZmRkXHU0ZmMzXHU0ZmI2XHU0ZmQ4XHU0ZmRmXHU0ZmNhXHU0ZmQ3XHU0ZmFlXHU0ZmQwXHU0ZmM0XHU0ZmMyXHU0ZmRhXHU0ZmNlXHU0ZmRlXHU0ZmI3XHU1MTU3XHU1MTkyXHU1MTkxXHU1MWEwXHU1MjRlXHU1MjQzXHU1MjRhXHU1MjRkXHU1MjRjXHU1MjRiXHU1''@;'; put 'put ''MjQ3XHU1MmM3XHU1MmM5XHU1MmMzXHU1MmMxXHU1MzBkXHU1MzU3XHU1MzdiXHU1MzlhXHU1M2RiXHU1NGFjXHU1NGMwXHU1NGE4XHU1NGNlXHU1NGM5XHU1NGI4XHU1NGE2XHU1NGIzXHU1NGM3XHU1NGMyXHU1NGJkXHU1NGFhXHU1NGMxIl0sWyJhYmExIiwiXHU1NGM0XHU1NGM4XHU1NGFm''@;'; put 'put ''XHU1NGFiXHU1NGIxXHU1NGJiXHU1NGE5XHU1NGE3XHU1NGJmXHU1NmZmXHU1NzgyXHU1NzhiXHU1N2EwXHU1N2EzXHU1N2EyXHU1N2NlXHU1N2FlXHU1NzkzXHU1OTU1XHU1OTUxXHU1OTRmXHU1OTRlXHU1OTUwXHU1OWRjXHU1OWQ4XHU1OWZmXHU1OWUzXHU1OWU4XHU1YTAzXHU1OWU1XHU1''@;'; put 'put ''OWVhXHU1OWRhXHU1OWU2XHU1YTAxXHU1OWZiXHU1YjY5XHU1YmEzXHU1YmE2XHU1YmE0XHU1YmEyXHU1YmE1XHU1YzAxXHU1YzRlXHU1YzRmXHU1YzRkXHU1YzRiXHU1Y2Q5XHU1Y2QyXHU1ZGY3XHU1ZTFkXHU1ZTI1XHU1ZTFmXHU1ZTdkXHU1ZWEwXHU1ZWE2XHU1ZWZhXHU1ZjA4XHU1ZjJk''@;'; put 'put ''XHU1ZjY1XHU1Zjg4XHU1Zjg1XHU1ZjhhXHU1ZjhiXHU1Zjg3XHU1ZjhjXHU1Zjg5XHU2MDEyXHU2MDFkXHU2MDIwXHU2MDI1XHU2MDBlXHU2MDI4XHU2MDRkXHU2MDcwXHU2MDY4XHU2MDYyXHU2MDQ2XHU2MDQzXHU2MDZjXHU2MDZiXHU2MDZhXHU2MDY0XHU2MjQxXHU2MmRjXHU2MzE2XHU2''@;'; put 'put ''MzA5XHU2MmZjXHU2MmVkXHU2MzAxXHU2MmVlXHU2MmZkXHU2MzA3XHU2MmYxXHU2MmY3Il0sWyJhYzQwIiwiXHU2MmVmXHU2MmVjXHU2MmZlXHU2MmY0XHU2MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJkXHU2NjIwXHU2NjI3XHU2NjJmXHU2NjFm''@;'; put 'put ''XHU2NjI4XHU2NjMxXHU2NjI0XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0XHU2N2QwXHU2N2VjXHU2N2I2XHU2N2FmXHU2N2Y1XHU2N2U5XHU2N2VmXHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2N2YzXHU2N2IwXHU2N2Q5XHU2N2UyXHU2''@;'; put 'put ''N2RkXHU2N2QyXHU2YjZhXHU2YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2YzFmXHU2Y2M5XHU2ZDBiXHU2ZDMyXHU2ZDJhXHU2ZDQxXHU2ZDI1XHU2ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3Il0sWyJhY2ExIiwiXHU2ZDNiXHU2ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2Y2Y1XHU2ZDM5''@;'; put 'put ''XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBlXHU2ZDJiXHU3MGFiXHU3MGJhXHU3MGIzXHU3MGFjXHU3MGFmXHU3MGFkXHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZmXHU3Mjc0XHU3MmU5XHU3MmUwXHU3MmUxXHU3M2I3XHU3M2NhXHU3M2JiXHU3M2IyXHU3''@;'; put 'put ''M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3NTRjXHU3NTRlXHU3NTRiXHU3NWFiXHU3NWE0XHU3NWE1XHU3NWEyXHU3NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3NmM2XHU3NmMzXHU3NmM1XHU3NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3NzBiXHU3NmZl''@;'; put 'put ''XHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBjXHU3ODBkXHU3OTQ2XHU3OTQ5XHU3OTQ4XHU3OTQ3XHU3OWI5XHU3OWJhXHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZmXHU3YWZkXHU3YzdkXHU3ZDAyXHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3XHU3ZDA0XHU3''@;'; put 'put ''ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0Il0sWyJhZDQwIiwiXHU4MDEwXHU4MDBkXHU4MDExXHU4MDM2XHU4MGQ2XHU4MGU1XHU4MGRhXHU4MGMzXHU4MGM0XHU4MGNjXHU4MGUxXHU4MGRiXHU4MGNlXHU4MGRlXHU4MGU0XHU4MGRkXHU4MWY0XHU4MjIyXHU4MmU3XHU4MzAzXHU4MzA1''@;'; put 'put ''XHU4MmUzXHU4MmRiXHU4MmU2XHU4MzA0XHU4MmU1XHU4MzAyXHU4MzA5XHU4MmQyXHU4MmQ3XHU4MmYxXHU4MzAxXHU4MmRjXHU4MmQ0XHU4MmQxXHU4MmRlXHU4MmQzXHU4MmRmXHU4MmVmXHU4MzA2XHU4NjUwXHU4Njc5XHU4NjdiXHU4NjdhXHU4ODRkXHU4ODZiXHU4OTgxXHU4OWQ0XHU4''@;'; put 'put ''YTA4XHU4YTAyXHU4YTAzXHU4YzllXHU4Y2EwXHU4ZDc0XHU4ZDczXHU4ZGI0XHU4ZWNkXHU4ZWNjXHU4ZmYwXHU4ZmU2XHU4ZmUyXHU4ZmVhXHU4ZmU1Il0sWyJhZGExIiwiXHU4ZmVkXHU4ZmViXHU4ZmU0XHU4ZmU4XHU5MGNhXHU5MGNlXHU5MGMxXHU5MGMzXHU5MTRiXHU5MTRhXHU5MWNk''@;'; put 'put ''XHU5NTgyXHU5NjUwXHU5NjRiXHU5NjRjXHU5NjRkXHU5NzYyXHU5NzY5XHU5N2NiXHU5N2VkXHU5N2YzXHU5ODAxXHU5OGE4XHU5OGRiXHU5OGRmXHU5OTk2XHU5OTk5XHU0ZTU4XHU0ZWIzXHU1MDBjXHU1MDBkXHU1MDIzXHU0ZmVmXHU1MDI2XHU1MDI1XHU0ZmY4XHU1MDI5XHU1MDE2XHU1''@;'; put 'put ''MDA2XHU1MDNjXHU1MDFmXHU1MDFhXHU1MDEyXHU1MDExXHU0ZmZhXHU1MDAwXHU1MDE0XHU1MDI4XHU0ZmYxXHU1MDIxXHU1MDBiXHU1MDE5XHU1MDE4XHU0ZmYzXHU0ZmVlXHU1MDJkXHU1MDJhXHU0ZmZlXHU1MDJiXHU1MDA5XHU1MTdjXHU1MWE0XHU1MWE1XHU1MWEyXHU1MWNkXHU1MWNj''@;'; put 'put ''XHU1MWM2XHU1MWNiXHU1MjU2XHU1MjVjXHU1MjU0XHU1MjViXHU1MjVkXHU1MzJhXHU1MzdmXHU1MzlmXHU1MzlkXHU1M2RmXHU1NGU4XHU1NTEwXHU1NTAxXHU1NTM3XHU1NGZjXHU1NGU1XHU1NGYyXHU1NTA2XHU1NGZhXHU1NTE0XHU1NGU5XHU1NGVkXHU1NGUxXHU1NTA5XHU1NGVlXHU1''@;'; put 'put ''NGVhIl0sWyJhZTQwIiwiXHU1NGU2XHU1NTI3XHU1NTA3XHU1NGZkXHU1NTBmXHU1NzAzXHU1NzA0XHU1N2MyXHU1N2Q0XHU1N2NiXHU1N2MzXHU1ODA5XHU1OTBmXHU1OTU3XHU1OTU4XHU1OTVhXHU1YTExXHU1YTE4XHU1YTFjXHU1YTFmXHU1YTFiXHU1YTEzXHU1OWVjXHU1YTIwXHU1YTIz''@;'; put 'put ''XHU1YTI5XHU1YTI1XHU1YTBjXHU1YTA5XHU1YjZiXHU1YzU4XHU1YmIwXHU1YmIzXHU1YmI2XHU1YmI0XHU1YmFlXHU1YmI1XHU1YmI5XHU1YmI4XHU1YzA0XHU1YzUxXHU1YzU1XHU1YzUwXHU1Y2VkXHU1Y2ZkXHU1Y2ZiXHU1Y2VhXHU1Y2U4XHU1Y2YwXHU1Y2Y2XHU1ZDAxXHU1Y2Y0XHU1''@;'; put 'put ''ZGVlXHU1ZTJkXHU1ZTJiXHU1ZWFiXHU1ZWFkXHU1ZWE3XHU1ZjMxXHU1ZjkyXHU1ZjkxXHU1ZjkwXHU2MDU5Il0sWyJhZWExIiwiXHU2MDYzXHU2MDY1XHU2MDUwXHU2MDU1XHU2MDZkXHU2MDY5XHU2MDZmXHU2MDg0XHU2MDlmXHU2MDlhXHU2MDhkXHU2MDk0XHU2MDhjXHU2MDg1XHU2MDk2''@;'; put 'put ''XHU2MjQ3XHU2MmYzXHU2MzA4XHU2MmZmXHU2MzRlXHU2MzNlXHU2MzJmXHU2MzU1XHU2MzQyXHU2MzQ2XHU2MzRmXHU2MzQ5XHU2MzNhXHU2MzUwXHU2MzNkXHU2MzJhXHU2MzJiXHU2MzI4XHU2MzRkXHU2MzRjXHU2NTQ4XHU2NTQ5XHU2NTk5XHU2NWMxXHU2NWM1XHU2NjQyXHU2NjQ5XHU2''@;'; put 'put ''NjRmXHU2NjQzXHU2NjUyXHU2NjRjXHU2NjQ1XHU2NjQxXHU2NmY4XHU2NzE0XHU2NzE1XHU2NzE3XHU2ODIxXHU2ODM4XHU2ODQ4XHU2ODQ2XHU2ODUzXHU2ODM5XHU2ODQyXHU2ODU0XHU2ODI5XHU2OGIzXHU2ODE3XHU2ODRjXHU2ODUxXHU2ODNkXHU2N2Y0XHU2ODUwXHU2ODQwXHU2ODNj''@;'; put 'put ''XHU2ODQzXHU2ODJhXHU2ODQ1XHU2ODEzXHU2ODE4XHU2ODQxXHU2YjhhXHU2Yjg5XHU2YmI3XHU2YzIzXHU2YzI3XHU2YzI4XHU2YzI2XHU2YzI0XHU2Y2YwXHU2ZDZhXHU2ZDk1XHU2ZDg4XHU2ZDg3XHU2ZDY2XHU2ZDc4XHU2ZDc3XHU2ZDU5XHU2ZDkzIl0sWyJhZjQwIiwiXHU2ZDZjXHU2''@;'; put 'put ''ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhjXHU2ZDhhXHU2ZDc5XHU2ZDg1XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3MGQ4XHU3MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3Mzg2XHU3M2VkXHU3NDA5XHU3M2Vl''@;'; put 'put ''XHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3NTVjXHU3NTVhXHU3NTU5XHU3NWJlXHU3NWM1XHU3NWM3XHU3NWIyXHU3NWIzXHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIwXHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5XHU3NzFmXHU3NzIwXHU3NzI4XHU3''@;'; put 'put ''N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0XHU3ODM3Il0sWyJhZmExIiwiXHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFmXHU3ODMyXHU3OTU1XHU3OTUwXHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVlXHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2''@;'; put 'put ''XHU3OWU5XHU3OWQ4XHU3YTg0XHU3YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3Yzg5XHU3ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3ZDIwXHU3ZDIyXHU3ZDE0XHU3ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4''@;'; put 'put ''MDA2XHU4MDE4XHU4MDE1XHU4MDE5XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYxXHU4MTAyXHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0XHU4MTA2XHU4MGY4XHU4MGYzXHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZjXHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4''@;'; put 'put ''XHU4MjJjXHU4MmJiXHU4MzJiXHU4MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4MzUwXHU4MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4MzMyXHU4MzM5XHU4MzM2XHU4MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4MzQzIl0sWyJiMDQwIiwiXHU4NjU0XHU4NjhhXHU4NmFhXHU4NjkzXHU4NmE0XHU4''@;'; put 'put ''NmE5XHU4NjhjXHU4NmEzXHU4NjljXHU4ODcwXHU4ODc3XHU4ODgxXHU4ODgyXHU4ODdkXHU4ODc5XHU4YTE4XHU4YTEwXHU4YTBlXHU4YTBjXHU4YTE1XHU4YTBhXHU4YTE3XHU4YTEzXHU4YTE2XHU4YTBmXHU4YTExXHU4YzQ4XHU4YzdhXHU4Yzc5XHU4Y2ExXHU4Y2EyXHU4ZDc3XHU4ZWFj''@;'; put 'put ''XHU4ZWQyXHU4ZWQ0XHU4ZWNmXHU4ZmIxXHU5MDAxXHU5MDA2XHU4ZmY3XHU5MDAwXHU4ZmZhXHU4ZmY0XHU5MDAzXHU4ZmZkXHU5MDA1XHU4ZmY4XHU5MDk1XHU5MGUxXHU5MGRkXHU5MGUyXHU5MTUyXHU5MTRkXHU5MTRjXHU5MWQ4XHU5MWRkXHU5MWQ3XHU5MWRjXHU5MWQ5XHU5NTgzXHU5''@;'; put 'put ''NjYyXHU5NjYzXHU5NjYxIl0sWyJiMGExIiwiXHU5NjViXHU5NjVkXHU5NjY0XHU5NjU4XHU5NjVlXHU5NmJiXHU5OGUyXHU5OWFjXHU5YWE4XHU5YWQ4XHU5YjI1XHU5YjMyXHU5YjNjXHU0ZTdlXHU1MDdhXHU1MDdkXHU1MDVjXHU1MDQ3XHU1MDQzXHU1MDRjXHU1MDVhXHU1MDQ5XHU1MDY1''@;'; put 'put ''XHU1MDc2XHU1MDRlXHU1MDU1XHU1MDc1XHU1MDc0XHU1MDc3XHU1MDRmXHU1MDBmXHU1MDZmXHU1MDZkXHU1MTVjXHU1MTk1XHU1MWYwXHU1MjZhXHU1MjZmXHU1MmQyXHU1MmQ5XHU1MmQ4XHU1MmQ1XHU1MzEwXHU1MzBmXHU1MzE5XHU1MzNmXHU1MzQwXHU1MzNlXHU1M2MzXHU2NmZjXHU1''@;'; put 'put ''NTQ2XHU1NTZhXHU1NTY2XHU1NTQ0XHU1NTVlXHU1NTYxXHU1NTQzXHU1NTRhXHU1NTMxXHU1NTU2XHU1NTRmXHU1NTU1XHU1NTJmXHU1NTY0XHU1NTM4XHU1NTJlXHU1NTVjXHU1NTJjXHU1NTYzXHU1NTMzXHU1NTQxXHU1NTU3XHU1NzA4XHU1NzBiXHU1NzA5XHU1N2RmXHU1ODA1XHU1ODBh''@;'; put 'put ''XHU1ODA2XHU1N2UwXHU1N2U0XHU1N2ZhXHU1ODAyXHU1ODM1XHU1N2Y3XHU1N2Y5XHU1OTIwXHU1OTYyXHU1YTM2XHU1YTQxXHU1YTQ5XHU1YTY2XHU1YTZhXHU1YTQwIl0sWyJiMTQwIiwiXHU1YTNjXHU1YTYyXHU1YTVhXHU1YTQ2XHU1YTRhXHU1YjcwXHU1YmM3XHU1YmM1XHU1YmM0XHU1''@;'; put 'put ''YmMyXHU1YmJmXHU1YmM2XHU1YzA5XHU1YzA4XHU1YzA3XHU1YzYwXHU1YzVjXHU1YzVkXHU1ZDA3XHU1ZDA2XHU1ZDBlXHU1ZDFiXHU1ZDE2XHU1ZDIyXHU1ZDExXHU1ZDI5XHU1ZDE0XHU1ZDE5XHU1ZDI0XHU1ZDI3XHU1ZDE3XHU1ZGUyXHU1ZTM4XHU1ZTM2XHU1ZTMzXHU1ZTM3XHU1ZWI3''@;'; put 'put ''XHU1ZWI4XHU1ZWI2XHU1ZWI1XHU1ZWJlXHU1ZjM1XHU1ZjM3XHU1ZjU3XHU1ZjZjXHU1ZjY5XHU1ZjZiXHU1Zjk3XHU1Zjk5XHU1ZjllXHU1Zjk4XHU1ZmExXHU1ZmEwXHU1ZjljXHU2MDdmXHU2MGEzXHU2MDg5XHU2MGEwXHU2MGE4XHU2MGNiXHU2MGI0XHU2MGU2XHU2MGJkIl0sWyJiMWEx''@;'; put 'put ''IiwiXHU2MGM1XHU2MGJiXHU2MGI1XHU2MGRjXHU2MGJjXHU2MGQ4XHU2MGQ1XHU2MGM2XHU2MGRmXHU2MGI4XHU2MGRhXHU2MGM3XHU2MjFhXHU2MjFiXHU2MjQ4XHU2M2EwXHU2M2E3XHU2MzcyXHU2Mzk2XHU2M2EyXHU2M2E1XHU2Mzc3XHU2MzY3XHU2Mzk4XHU2M2FhXHU2MzcxXHU2M2E5''@;'; put 'put ''XHU2Mzg5XHU2MzgzXHU2MzliXHU2MzZiXHU2M2E4XHU2Mzg0XHU2Mzg4XHU2Mzk5XHU2M2ExXHU2M2FjXHU2MzkyXHU2MzhmXHU2MzgwXHU2MzdiXHU2MzY5XHU2MzY4XHU2MzdhXHU2NTVkXHU2NTU2XHU2NTUxXHU2NTU5XHU2NTU3XHU1NTVmXHU2NTRmXHU2NTU4XHU2NTU1XHU2NTU0XHU2''@;'; put 'put ''NTljXHU2NTliXHU2NWFjXHU2NWNmXHU2NWNiXHU2NWNjXHU2NWNlXHU2NjVkXHU2NjVhXHU2NjY0XHU2NjY4XHU2NjY2XHU2NjVlXHU2NmY5XHU1MmQ3XHU2NzFiXHU2ODgxXHU2OGFmXHU2OGEyXHU2ODkzXHU2OGI1XHU2ODdmXHU2ODc2XHU2OGIxXHU2OGE3XHU2ODk3XHU2OGIwXHU2ODgz''@;'; put 'put ''XHU2OGM0XHU2OGFkXHU2ODg2XHU2ODg1XHU2ODk0XHU2ODlkXHU2OGE4XHU2ODlmXHU2OGExXHU2ODgyXHU2YjMyXHU2YmJhIl0sWyJiMjQwIiwiXHU2YmViXHU2YmVjXHU2YzJiXHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2''@;'; put 'put ''ZTA1XHU2ZGM3XHU2ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFlXHU2ZGRlXHU2ZGY5XHU2ZGI4XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQyXHU2ZTFhXHU2ZGI1XHU2ZGRhXHU2ZGViXHU2ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2''@;'; put 'put ''XHU3MGY5XHU3MTA5XHU3MTBhXHU3MGZkXHU3MGVmXHU3MjNkXHU3MjdkXHU3MjgxXHU3MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3MzE5XHU3Mzg3XHU3NDA1XHU3NDBhXHU3NDAzXHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUwXHU3NGY2Il0sWyJiMmExIiwiXHU3NGY3XHU3NTFjXHU3NTIyXHU3''@;'; put 'put ''NTY1XHU3NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3NWNhXHU3NWNkXHU3NjhlXHU3NmQ0XHU3NmQyXHU3NmRiXHU3NzM3XHU3NzNlXHU3NzNjXHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4XHU3OTZkXHU3OWZiXHU3YTky''@;'; put 'put ''XHU3YTk1XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFlXHU3YjJlXHU3YzkyXHU3Yzk3XHU3Yzk1XHU3ZDQ2XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3ZDMyXHU3ZDMxXHU3ZjNkXHU3''@;'; put 'put ''ZjllXHU3ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4MTJmXHU4MTE2XHU4MTIzXHU4MTJiXHU4MTI5XHU4MTMwXHU4MTI0XHU4MjAyXHU4MjM1XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2EyXHU4Mzk2XHU4M2JkXHU4M2Fi''@;'; put 'put ''XHU4MzkyXHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4MzdjIl0sWyJiMzQwIiwiXHU4Mzg2XHU4M2E3XHU4NjU1XHU1ZjZhXHU4NmM3XHU4NmMwXHU4NmI2XHU4NmM0XHU4NmI1XHU4NmM2XHU4NmNiXHU4NmIxXHU4NmFmXHU4NmM5XHU4ODUzXHU4ODllXHU4ODg4XHU4''@;'; put 'put ''OGFiXHU4ODkyXHU4ODk2XHU4ODhkXHU4ODhiXHU4OTkzXHU4OThmXHU4YTJhXHU4YTFkXHU4YTIzXHU4YTI1XHU4YTMxXHU4YTJkXHU4YTFmXHU4YTFiXHU4YTIyXHU4YzQ5XHU4YzVhXHU4Y2E5XHU4Y2FjXHU4Y2FiXHU4Y2E4XHU4Y2FhXHU4Y2E3XHU4ZDY3XHU4ZDY2XHU4ZGJlXHU4ZGJh''@;'; put 'put ''XHU4ZWRiXHU4ZWRmXHU5MDE5XHU5MDBkXHU5MDFhXHU5MDE3XHU5MDIzXHU5MDFmXHU5MDFkXHU5MDEwXHU5MDE1XHU5MDFlXHU5MDIwXHU5MDBmXHU5MDIyXHU5MDE2XHU5MDFiXHU5MDE0Il0sWyJiM2ExIiwiXHU5MGU4XHU5MGVkXHU5MGZkXHU5MTU3XHU5MWNlXHU5MWY1XHU5MWU2XHU5''@;'; put 'put ''MWUzXHU5MWU3XHU5MWVkXHU5MWU5XHU5NTg5XHU5NjZhXHU5Njc1XHU5NjczXHU5Njc4XHU5NjcwXHU5Njc0XHU5Njc2XHU5Njc3XHU5NjZjXHU5NmMwXHU5NmVhXHU5NmU5XHU3YWUwXHU3YWRmXHU5ODAyXHU5ODAzXHU5YjVhXHU5Y2U1XHU5ZTc1XHU5ZTdmXHU5ZWE1XHU5ZWJiXHU1MGEy''@;'; put 'put ''XHU1MDhkXHU1MDg1XHU1MDk5XHU1MDkxXHU1MDgwXHU1MDk2XHU1MDk4XHU1MDlhXHU2NzAwXHU1MWYxXHU1MjcyXHU1Mjc0XHU1Mjc1XHU1MjY5XHU1MmRlXHU1MmRkXHU1MmRiXHU1MzVhXHU1M2E1XHU1NTdiXHU1NTgwXHU1NWE3XHU1NTdjXHU1NThhXHU1NTlkXHU1NTk4XHU1NTgyXHU1''@;'; put 'put ''NTljXHU1NWFhXHU1NTk0XHU1NTg3XHU1NThiXHU1NTgzXHU1NWIzXHU1NWFlXHU1NTlmXHU1NTNlXHU1NWIyXHU1NTlhXHU1NWJiXHU1NWFjXHU1NWIxXHU1NTdlXHU1NTg5XHU1NWFiXHU1NTk5XHU1NzBkXHU1ODJmXHU1ODJhXHU1ODM0XHU1ODI0XHU1ODMwXHU1ODMxXHU1ODIxXHU1ODFk''@;'; put 'put ''XHU1ODIwXHU1OGY5XHU1OGZhXHU1OTYwIl0sWyJiNDQwIiwiXHU1YTc3XHU1YTlhXHU1YTdmXHU1YTkyXHU1YTliXHU1YWE3XHU1YjczXHU1YjcxXHU1YmQyXHU1YmNjXHU1YmQzXHU1YmQwXHU1YzBhXHU1YzBiXHU1YzMxXHU1ZDRjXHU1ZDUwXHU1ZDM0XHU1ZDQ3XHU1ZGZkXHU1ZTQ1XHU1''@;'; put 'put ''ZTNkXHU1ZTQwXHU1ZTQzXHU1ZTdlXHU1ZWNhXHU1ZWMxXHU1ZWMyXHU1ZWM0XHU1ZjNjXHU1ZjZkXHU1ZmE5XHU1ZmFhXHU1ZmE4XHU2MGQxXHU2MGUxXHU2MGIyXHU2MGI2XHU2MGUwXHU2MTFjXHU2MTIzXHU2MGZhXHU2MTE1XHU2MGYwXHU2MGZiXHU2MGY0XHU2MTY4XHU2MGYxXHU2MTBl''@;'; put 'put ''XHU2MGY2XHU2MTA5XHU2MTAwXHU2MTEyXHU2MjFmXHU2MjQ5XHU2M2EzXHU2MzhjXHU2M2NmXHU2M2MwXHU2M2U5XHU2M2M5XHU2M2M2XHU2M2NkIl0sWyJiNGExIiwiXHU2M2QyXHU2M2UzXHU2M2QwXHU2M2UxXHU2M2Q2XHU2M2VkXHU2M2VlXHU2Mzc2XHU2M2Y0XHU2M2VhXHU2M2RiXHU2''@;'; put 'put ''NDUyXHU2M2RhXHU2M2Y5XHU2NTVlXHU2NTY2XHU2NTYyXHU2NTYzXHU2NTkxXHU2NTkwXHU2NWFmXHU2NjZlXHU2NjcwXHU2Njc0XHU2Njc2XHU2NjZmXHU2NjkxXHU2NjdhXHU2NjdlXHU2Njc3XHU2NmZlXHU2NmZmXHU2NzFmXHU2NzFkXHU2OGZhXHU2OGQ1XHU2OGUwXHU2OGQ4XHU2OGQ3''@;'; put 'put ''XHU2OTA1XHU2OGRmXHU2OGY1XHU2OGVlXHU2OGU3XHU2OGY5XHU2OGQyXHU2OGYyXHU2OGUzXHU2OGNiXHU2OGNkXHU2OTBkXHU2OTEyXHU2OTBlXHU2OGM5XHU2OGRhXHU2OTZlXHU2OGZiXHU2YjNlXHU2YjNhXHU2YjNkXHU2Yjk4XHU2Yjk2XHU2YmJjXHU2YmVmXHU2YzJlXHU2YzJmXHU2''@;'; put 'put ''YzJjXHU2ZTJmXHU2ZTM4XHU2ZTU0XHU2ZTIxXHU2ZTMyXHU2ZTY3XHU2ZTRhXHU2ZTIwXHU2ZTI1XHU2ZTIzXHU2ZTFiXHU2ZTViXHU2ZTU4XHU2ZTI0XHU2ZTU2XHU2ZTZlXHU2ZTJkXHU2ZTI2XHU2ZTZmXHU2ZTM0XHU2ZTRkXHU2ZTNhXHU2ZTJjXHU2ZTQzXHU2ZTFkXHU2ZTNlXHU2ZWNi''@;'; put 'put ''Il0sWyJiNTQwIiwiXHU2ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcyXHU2ZTY5XHU2ZTVmXHU3MTE5XHU3MTFhXHU3MTI2XHU3MTMwXHU3MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3MzI5XHU3NDNhXHU3NDJhXHU3''@;'; put 'put ''NDMzXHU3NDIyXHU3NDI1XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3NDI2XHU3NDI4XHU3NTI1XHU3NTI2XHU3NTZiXHU3NTZhXHU3NWUyXHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3NjkzXHU3NmI0XHU3NmRjXHU3NzRm''@;'; put 'put ''XHU3N2VkXHU3ODVkXHU3ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1XHU3YTAwXHU3YTk4Il0sWyJiNWExIiwiXHU3YTk3XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUwXHU3YjUyXHU3YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3YjUxXHU3YzlmXHU3''@;'; put 'put ''Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3ZDZlXHU3ZDcyXHU3ZDYxXHU3ZDY2XHU3ZDYyXHU3ZDcwXHU3ZDczXHU1NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4MTU0XHU4MTRiXHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2XHU4MTNlXHU4MTRj''@;'; put 'put ''XHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAzXHU4M2Y4XHU4NDBkXHU4M2UwXHU4M2M1XHU4NDBiXHU4M2MxXHU4M2VmXHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2NjXHU4M2ZkXHU4M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4NDA0XHU4M2RjXHU4''@;'; put 'put ''NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4NmVkXHU4NmQ0XHU4NmRiXHU4NmU0XHU4NmQwXHU4NmRlXHU4ODU3XHU4OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4YTU1XHU4YTVlXHU4YTNjXHU4YTQxIl0sWyJiNjQwIiwiXHU4YTU0XHU4YTVi''@;'; put 'put ''XHU4YTUwXHU4YTQ2XHU4YTM0XHU4YTNhXHU4YTM2XHU4YTU2XHU4YzYxXHU4YzgyXHU4Y2FmXHU4Y2JjXHU4Y2IzXHU4Y2JkXHU4Y2MxXHU4Y2JiXHU4Y2MwXHU4Y2I0XHU4Y2I3XHU4Y2I2XHU4Y2JmXHU4Y2I4XHU4ZDhhXHU4ZDg1XHU4ZDgxXHU4ZGNlXHU4ZGRkXHU4ZGNiXHU4ZGRhXHU4''@;'; put 'put ''ZGQxXHU4ZGNjXHU4ZGRiXHU4ZGM2XHU4ZWZiXHU4ZWY4XHU4ZWZjXHU4ZjljXHU5MDJlXHU5MDM1XHU5MDMxXHU5MDM4XHU5MDMyXHU5MDM2XHU5MTAyXHU5MGY1XHU5MTA5XHU5MGZlXHU5MTYzXHU5MTY1XHU5MWNmXHU5MjE0XHU5MjE1XHU5MjIzXHU5MjA5XHU5MjFlXHU5MjBkXHU5MjEw''@;'; put 'put ''XHU5MjA3XHU5MjExXHU5NTk0XHU5NThmXHU5NThiXHU5NTkxIl0sWyJiNmExIiwiXHU5NTkzXHU5NTkyXHU5NThlXHU5NjhhXHU5NjhlXHU5NjhiXHU5NjdkXHU5Njg1XHU5Njg2XHU5NjhkXHU5NjcyXHU5Njg0XHU5NmMxXHU5NmM1XHU5NmM0XHU5NmM2XHU5NmM3XHU5NmVmXHU5NmYyXHU5''@;'; put 'put ''N2NjXHU5ODA1XHU5ODA2XHU5ODA4XHU5OGU3XHU5OGVhXHU5OGVmXHU5OGU5XHU5OGYyXHU5OGVkXHU5OWFlXHU5OWFkXHU5ZWMzXHU5ZWNkXHU5ZWQxXHU0ZTgyXHU1MGFkXHU1MGI1XHU1MGIyXHU1MGIzXHU1MGM1XHU1MGJlXHU1MGFjXHU1MGI3XHU1MGJiXHU1MGFmXHU1MGM3XHU1Mjdm''@;'; put 'put ''XHU1Mjc3XHU1MjdkXHU1MmRmXHU1MmU2XHU1MmU0XHU1MmUyXHU1MmUzXHU1MzJmXHU1NWRmXHU1NWU4XHU1NWQzXHU1NWU2XHU1NWNlXHU1NWRjXHU1NWM3XHU1NWQxXHU1NWUzXHU1NWU0XHU1NWVmXHU1NWRhXHU1NWUxXHU1NWM1XHU1NWM2XHU1NWU1XHU1NWM5XHU1NzEyXHU1NzEzXHU1''@;'; put 'put ''ODVlXHU1ODUxXHU1ODU4XHU1ODU3XHU1ODVhXHU1ODU0XHU1ODZiXHU1ODRjXHU1ODZkXHU1ODRhXHU1ODYyXHU1ODUyXHU1ODRiXHU1OTY3XHU1YWMxXHU1YWM5XHU1YWNjXHU1YWJlXHU1YWJkXHU1YWJjIl0sWyJiNzQwIiwiXHU1YWIzXHU1YWMyXHU1YWIyXHU1ZDY5XHU1ZDZmXHU1ZTRj''@;'; put 'put ''XHU1ZTc5XHU1ZWM5XHU1ZWM4XHU1ZjEyXHU1ZjU5XHU1ZmFjXHU1ZmFlXHU2MTFhXHU2MTBmXHU2MTQ4XHU2MTFmXHU2MGYzXHU2MTFiXHU2MGY5XHU2MTAxXHU2MTA4XHU2MTRlXHU2MTRjXHU2MTQ0XHU2MTRkXHU2MTNlXHU2MTM0XHU2MTI3XHU2MTBkXHU2MTA2XHU2MTM3XHU2MjIxXHU2''@;'; put 'put ''MjIyXHU2NDEzXHU2NDNlXHU2NDFlXHU2NDJhXHU2NDJkXHU2NDNkXHU2NDJjXHU2NDBmXHU2NDFjXHU2NDE0XHU2NDBkXHU2NDM2XHU2NDE2XHU2NDE3XHU2NDA2XHU2NTZjXHU2NTlmXHU2NWIwXHU2Njk3XHU2Njg5XHU2Njg3XHU2Njg4XHU2Njk2XHU2Njg0XHU2Njk4XHU2NjhkXHU2NzAz''@;'; put 'put ''XHU2OTk0XHU2OTZkIl0sWyJiN2ExIiwiXHU2OTVhXHU2OTc3XHU2OTYwXHU2OTU0XHU2OTc1XHU2OTMwXHU2OTgyXHU2OTRhXHU2OTY4XHU2OTZiXHU2OTVlXHU2OTUzXHU2OTc5XHU2OTg2XHU2OTVkXHU2OTYzXHU2OTViXHU2YjQ3XHU2YjcyXHU2YmMwXHU2YmJmXHU2YmQzXHU2YmZkXHU2''@;'; put 'put ''ZWEyXHU2ZWFmXHU2ZWQzXHU2ZWI2XHU2ZWMyXHU2ZTkwXHU2ZTlkXHU2ZWM3XHU2ZWM1XHU2ZWE1XHU2ZTk4XHU2ZWJjXHU2ZWJhXHU2ZWFiXHU2ZWQxXHU2ZTk2XHU2ZTljXHU2ZWM0XHU2ZWQ0XHU2ZWFhXHU2ZWE3XHU2ZWI0XHU3MTRlXHU3MTU5XHU3MTY5XHU3MTY0XHU3MTQ5XHU3MTY3''@;'; put 'put ''XHU3MTVjXHU3MTZjXHU3MTY2XHU3MTRjXHU3MTY1XHU3MTVlXHU3MTQ2XHU3MTY4XHU3MTU2XHU3MjNhXHU3MjUyXHU3MzM3XHU3MzQ1XHU3MzNmXHU3MzNlXHU3NDZmXHU3NDVhXHU3NDU1XHU3NDVmXHU3NDVlXHU3NDQxXHU3NDNmXHU3NDU5XHU3NDViXHU3NDVjXHU3NTc2XHU3NTc4XHU3''@;'; put 'put ''NjAwXHU3NWYwXHU3NjAxXHU3NWYyXHU3NWYxXHU3NWZhXHU3NWZmXHU3NWY0XHU3NWYzXHU3NmRlXHU3NmRmXHU3NzViXHU3NzZiXHU3NzY2XHU3NzVlXHU3NzYzIl0sWyJiODQwIiwiXHU3Nzc5XHU3NzZhXHU3NzZjXHU3NzVjXHU3NzY1XHU3NzY4XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIw''@;'; put 'put ''XHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3ODkzXHU3ODdmXHU3OTdhXHU3OTdmXHU3OTgxXHU4NDJjXHU3OWJkXHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3YTlmXHU3YWEwXHU3Yjc3XHU3YmMwXHU3YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3''@;'; put 'put ''Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhmXHU3ZDViXHU3ZjZlXHU3ZjY5XHU3ZjZhXHU3ZjcyXHU3ZmE5XHU3ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcxXHU4MTcwXHU4MTc4XHU4MTY1XHU4MTZlXHU4MTczXHU4MTZiIl0sWyJiOGExIiwi''@;'; put 'put ''XHU4MTc5XHU4MTdhXHU4MTY2XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3XHU4NDNkXHU4NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4NDQ5XHU4NDZjXHU4NDViXHU4NDNjXHU4NDM1XHU4NDYxXHU4NDYzXHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4''@;'; put 'put ''NzA4XHU4NzA3XHU4NzAwXHU4NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4NzA2XHU4NzBhXHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5XHU4OGRjXHU4OGQ4XHU4OGRkXHU4OGUxXHU4OGNhXHU4OGQ1XHU4OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcw''@;'; put 'put ''XHU4YTg3XHU4YTdjXHU4YTYzXHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZkXHU4YTYyXHU4YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4YTNlXHU4YTY4XHU4YzYyXHU4YzhhXHU4Yzg5XHU4Y2NhXHU4Y2M3XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4''@;'; put 'put ''ZGU4XHU4ZGVmXHU4ZGYzXHU4ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4ZWIyXHU4ZjAzXHU4ZjA5XHU4ZWZlXHU4ZjBhIl0sWyJiOTQwIiwiXHU4ZjlmXHU4ZmIyXHU5MDRiXHU5MDRhXHU5MDUzXHU5MDQyXHU5MDU0XHU5MDNjXHU5MDU1XHU5MDUwXHU5MDQ3XHU5MDRmXHU5MDRlXHU5MDRk''@;'; put 'put ''XHU5MDUxXHU5MDNlXHU5MDQxXHU5MTEyXHU5MTE3XHU5MTZjXHU5MTZhXHU5MTY5XHU5MWM5XHU5MjM3XHU5MjU3XHU5MjM4XHU5MjNkXHU5MjQwXHU5MjNlXHU5MjViXHU5MjRiXHU5MjY0XHU5MjUxXHU5MjM0XHU5MjQ5XHU5MjRkXHU5MjQ1XHU5MjM5XHU5MjNmXHU5MjVhXHU5NTk4XHU5''@;'; put 'put ''Njk4XHU5Njk0XHU5Njk1XHU5NmNkXHU5NmNiXHU5NmM5XHU5NmNhXHU5NmY3XHU5NmZiXHU5NmY5XHU5NmY2XHU5NzU2XHU5Nzc0XHU5Nzc2XHU5ODEwXHU5ODExXHU5ODEzXHU5ODBhXHU5ODEyXHU5ODBjXHU5OGZjXHU5OGY0Il0sWyJiOWExIiwiXHU5OGZkXHU5OGZlXHU5OWIzXHU5OWIx''@;'; put 'put ''XHU5OWI0XHU5YWUxXHU5Y2U5XHU5ZTgyXHU5ZjBlXHU5ZjEzXHU5ZjIwXHU1MGU3XHU1MGVlXHU1MGU1XHU1MGQ2XHU1MGVkXHU1MGRhXHU1MGQ1XHU1MGNmXHU1MGQxXHU1MGYxXHU1MGNlXHU1MGU5XHU1MTYyXHU1MWYzXHU1MjgzXHU1MjgyXHU1MzMxXHU1M2FkXHU1NWZlXHU1NjAwXHU1''@;'; put 'put ''NjFiXHU1NjE3XHU1NWZkXHU1NjE0XHU1NjA2XHU1NjA5XHU1NjBkXHU1NjBlXHU1NWY3XHU1NjE2XHU1NjFmXHU1NjA4XHU1NjEwXHU1NWY2XHU1NzE4XHU1NzE2XHU1ODc1XHU1ODdlXHU1ODgzXHU1ODkzXHU1ODhhXHU1ODc5XHU1ODg1XHU1ODdkXHU1OGZkXHU1OTI1XHU1OTIyXHU1OTI0''@;'; put 'put ''XHU1OTZhXHU1OTY5XHU1YWUxXHU1YWU2XHU1YWU5XHU1YWQ3XHU1YWQ2XHU1YWQ4XHU1YWUzXHU1Yjc1XHU1YmRlXHU1YmU3XHU1YmUxXHU1YmU1XHU1YmU2XHU1YmU4XHU1YmUyXHU1YmU0XHU1YmRmXHU1YzBkXHU1YzYyXHU1ZDg0XHU1ZDg3XHU1ZTViXHU1ZTYzXHU1ZTU1XHU1ZTU3XHU1''@;'; put 'put ''ZTU0XHU1ZWQzXHU1ZWQ2XHU1ZjBhXHU1ZjQ2XHU1ZjcwXHU1ZmI5XHU2MTQ3Il0sWyJiYTQwIiwiXHU2MTNmXHU2MTRiXHU2MTc3XHU2MTYyXHU2MTYzXHU2MTVmXHU2MTVhXHU2MTU4XHU2MTc1XHU2MjJhXHU2NDg3XHU2NDU4XHU2NDU0XHU2NGE0XHU2NDc4XHU2NDVmXHU2NDdhXHU2NDUx''@;'; put 'put ''XHU2NDY3XHU2NDM0XHU2NDZkXHU2NDdiXHU2NTcyXHU2NWExXHU2NWQ3XHU2NWQ2XHU2NmEyXHU2NmE4XHU2NjlkXHU2OTljXHU2OWE4XHU2OTk1XHU2OWMxXHU2OWFlXHU2OWQzXHU2OWNiXHU2OTliXHU2OWI3XHU2OWJiXHU2OWFiXHU2OWI0XHU2OWQwXHU2OWNkXHU2OWFkXHU2OWNjXHU2''@;'; put 'put ''OWE2XHU2OWMzXHU2OWEzXHU2YjQ5XHU2YjRjXHU2YzMzXHU2ZjMzXHU2ZjE0XHU2ZWZlXHU2ZjEzXHU2ZWY0XHU2ZjI5XHU2ZjNlXHU2ZjIwXHU2ZjJjXHU2ZjBmXHU2ZjAyXHU2ZjIyIl0sWyJiYWExIiwiXHU2ZWZmXHU2ZWVmXHU2ZjA2XHU2ZjMxXHU2ZjM4XHU2ZjMyXHU2ZjIzXHU2ZjE1''@;'; put 'put ''XHU2ZjJiXHU2ZjJmXHU2Zjg4XHU2ZjJhXHU2ZWVjXHU2ZjAxXHU2ZWYyXHU2ZWNjXHU2ZWY3XHU3MTk0XHU3MTk5XHU3MTdkXHU3MThhXHU3MTg0XHU3MTkyXHU3MjNlXHU3MjkyXHU3Mjk2XHU3MzQ0XHU3MzUwXHU3NDY0XHU3NDYzXHU3NDZhXHU3NDcwXHU3NDZkXHU3NTA0XHU3NTkxXHU3''@;'; put 'put ''NjI3XHU3NjBkXHU3NjBiXHU3NjA5XHU3NjEzXHU3NmUxXHU3NmUzXHU3Nzg0XHU3NzdkXHU3NzdmXHU3NzYxXHU3OGMxXHU3ODlmXHU3OGE3XHU3OGIzXHU3OGE5XHU3OGEzXHU3OThlXHU3OThmXHU3OThkXHU3YTJlXHU3YTMxXHU3YWFhXHU3YWE5XHU3YWVkXHU3YWVmXHU3YmExXHU3Yjk1''@;'; put 'put ''XHU3YjhiXHU3Yjc1XHU3Yjk3XHU3YjlkXHU3Yjk0XHU3YjhmXHU3YmI4XHU3Yjg3XHU3Yjg0XHU3Y2I5XHU3Y2JkXHU3Y2JlXHU3ZGJiXHU3ZGIwXHU3ZDljXHU3ZGJkXHU3ZGJlXHU3ZGEwXHU3ZGNhXHU3ZGI0XHU3ZGIyXHU3ZGIxXHU3ZGJhXHU3ZGEyXHU3ZGJmXHU3ZGI1XHU3ZGI4XHU3''@;'; put 'put ''ZGFkXHU3ZGQyXHU3ZGM3XHU3ZGFjIl0sWyJiYjQwIiwiXHU3ZjcwXHU3ZmUwXHU3ZmUxXHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3XHU4MTUwXHU4MTgwXHU4MThmXHU4MTg4XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJm''@;'; put 'put ''XHU4NGM2XHU4NGM0XHU4NDk5XHU4NDllXHU4NGIyXHU4NDljXHU4NGNiXHU4NGI4XHU4NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4NGQxXHU4NGNhXHU4NzNmXHU4NzFjXHU4NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4''@;'; put 'put ''OGY5XHU4OGY4XHU4OGZkXHU4OGU4XHU4OTFhXHU4OGVmXHU4YWE2XHU4YThjXHU4YTllXHU4YWEzXHU4YThkXHU4YWExXHU4YTkzXHU4YWE0Il0sWyJiYmExIiwiXHU4YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4YzhkXHU4YzhjXHU4Y2QzXHU4Y2Qx''@;'; put 'put ''XHU4Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1XHU4ZjEzXHU4ZmEzXHU5MDYwXHU5MDU4XHU5MDVjXHU5MDYzXHU5MDU5XHU5MDVlXHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4XHU5MTc3XHU5MTc0XHU5Mjc4XHU5''@;'; put 'put ''MjgwXHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5MjdjXHU5MjkxXHU5NWExXHU5NWE4XHU5NWE5XHU5NWEzXHU5NWE1XHU5NWE0XHU5Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5N2Y2XHU5ODE3XHU5ODE4XHU5OGFm''@;'; put 'put ''XHU5OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIwXHU5YWU2XHU5YjQxXHU5YjQyXHU5Y2Y0XHU5Y2Y2XHU5Y2YzXHU5ZWJjXHU5ZjNiXHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4XHU1MTA5XHU1MTA1XHU1MWRjIl0s''@;'; put 'put ''WyJiYzQwIiwiXHU1Mjg3XHU1Mjg4XHU1Mjg5XHU1MjhkXHU1MjhhXHU1MmYwXHU1M2IyXHU1NjJlXHU1NjNiXHU1NjM5XHU1NjMyXHU1NjNmXHU1NjM0XHU1NjI5XHU1NjUzXHU1NjRlXHU1NjU3XHU1Njc0XHU1NjM2XHU1NjJmXHU1NjMwXHU1ODgwXHU1ODlmXHU1ODllXHU1OGIzXHU1ODlj''@;'; put 'put ''XHU1OGFlXHU1OGE5XHU1OGE2XHU1OTZkXHU1YjA5XHU1YWZiXHU1YjBiXHU1YWY1XHU1YjBjXHU1YjA4XHU1YmVlXHU1YmVjXHU1YmU5XHU1YmViXHU1YzY0XHU1YzY1XHU1ZDlkXHU1ZDk0XHU1ZTYyXHU1ZTVmXHU1ZTYxXHU1ZWUyXHU1ZWRhXHU1ZWRmXHU1ZWRkXHU1ZWUzXHU1ZWUwXHU1''@;'; put 'put ''ZjQ4XHU1ZjcxXHU1ZmI3XHU1ZmI1XHU2MTc2XHU2MTY3XHU2MTZlXHU2MTVkXHU2MTU1XHU2MTgyIl0sWyJiY2ExIiwiXHU2MTdjXHU2MTcwXHU2MTZiXHU2MTdlXHU2MWE3XHU2MTkwXHU2MWFiXHU2MThlXHU2MWFjXHU2MTlhXHU2MWE0XHU2MTk0XHU2MWFlXHU2MjJlXHU2NDY5XHU2NDZm''@;'; put 'put ''XHU2NDc5XHU2NDllXHU2NGIyXHU2NDg4XHU2NDkwXHU2NGIwXHU2NGE1XHU2NDkzXHU2NDk1XHU2NGE5XHU2NDkyXHU2NGFlXHU2NGFkXHU2NGFiXHU2NDlhXHU2NGFjXHU2NDk5XHU2NGEyXHU2NGIzXHU2NTc1XHU2NTc3XHU2NTc4XHU2NmFlXHU2NmFiXHU2NmI0XHU2NmIxXHU2YTIzXHU2''@;'; put 'put ''YTFmXHU2OWU4XHU2YTAxXHU2YTFlXHU2YTE5XHU2OWZkXHU2YTIxXHU2YTEzXHU2YTBhXHU2OWYzXHU2YTAyXHU2YTA1XHU2OWVkXHU2YTExXHU2YjUwXHU2YjRlXHU2YmE0XHU2YmM1XHU2YmM2XHU2ZjNmXHU2ZjdjXHU2Zjg0XHU2ZjUxXHU2ZjY2XHU2ZjU0XHU2Zjg2XHU2ZjZkXHU2ZjVi''@;'; put 'put ''XHU2Zjc4XHU2ZjZlXHU2ZjhlXHU2ZjdhXHU2ZjcwXHU2ZjY0XHU2Zjk3XHU2ZjU4XHU2ZWQ1XHU2ZjZmXHU2ZjYwXHU2ZjVmXHU3MTlmXHU3MWFjXHU3MWIxXHU3MWE4XHU3MjU2XHU3MjliXHU3MzRlXHU3MzU3XHU3NDY5XHU3NDhiXHU3NDgzIl0sWyJiZDQwIiwiXHU3NDdlXHU3NDgwXHU3''@;'; put 'put ''NTdmXHU3NjIwXHU3NjI5XHU3NjFmXHU3NjI0XHU3NjI2XHU3NjIxXHU3NjIyXHU3NjlhXHU3NmJhXHU3NmU0XHU3NzhlXHU3Nzg3XHU3NzhjXHU3NzkxXHU3NzhiXHU3OGNiXHU3OGM1XHU3OGJhXHU3OGNhXHU3OGJlXHU3OGQ1XHU3OGJjXHU3OGQwXHU3YTNmXHU3YTNjXHU3YTQwXHU3YTNk''@;'; put 'put ''XHU3YTM3XHU3YTNiXHU3YWFmXHU3YWFlXHU3YmFkXHU3YmIxXHU3YmM0XHU3YmI0XHU3YmM2XHU3YmM3XHU3YmMxXHU3YmEwXHU3YmNjXHU3Y2NhXHU3ZGUwXHU3ZGY0XHU3ZGVmXHU3ZGZiXHU3ZGQ4XHU3ZGVjXHU3ZGRkXHU3ZGU4XHU3ZGUzXHU3ZGRhXHU3ZGRlXHU3ZGU5XHU3ZDllXHU3''@;'; put 'put ''ZGQ5XHU3ZGYyXHU3ZGY5XHU3Zjc1XHU3Zjc3XHU3ZmFmIl0sWyJiZGExIiwiXHU3ZmU5XHU4MDI2XHU4MTliXHU4MTljXHU4MTlkXHU4MWEwXHU4MTlhXHU4MTk4XHU4NTE3XHU4NTNkXHU4NTFhXHU4NGVlXHU4NTJjXHU4NTJkXHU4NTEzXHU4NTExXHU4NTIzXHU4NTIxXHU4NTE0XHU4NGVj''@;'; put 'put ''XHU4NTI1XHU4NGZmXHU4NTA2XHU4NzgyXHU4Nzc0XHU4Nzc2XHU4NzYwXHU4NzY2XHU4Nzc4XHU4NzY4XHU4NzU5XHU4NzU3XHU4NzRjXHU4NzUzXHU4ODViXHU4ODVkXHU4OTEwXHU4OTA3XHU4OTEyXHU4OTEzXHU4OTE1XHU4OTBhXHU4YWJjXHU4YWQyXHU4YWM3XHU4YWM0XHU4YTk1XHU4''@;'; put 'put ''YWNiXHU4YWY4XHU4YWIyXHU4YWM5XHU4YWMyXHU4YWJmXHU4YWIwXHU4YWQ2XHU4YWNkXHU4YWI2XHU4YWI5XHU4YWRiXHU4YzRjXHU4YzRlXHU4YzZjXHU4Y2UwXHU4Y2RlXHU4Y2U2XHU4Y2U0XHU4Y2VjXHU4Y2VkXHU4Y2UyXHU4Y2UzXHU4Y2RjXHU4Y2VhXHU4Y2UxXHU4ZDZkXHU4ZDlm''@;'; put 'put ''XHU4ZGEzXHU4ZTJiXHU4ZTEwXHU4ZTFkXHU4ZTIyXHU4ZTBmXHU4ZTI5XHU4ZTFmXHU4ZTIxXHU4ZTFlXHU4ZWJhXHU4ZjFkXHU4ZjFiXHU4ZjFmXHU4ZjI5XHU4ZjI2XHU4ZjJhXHU4ZjFjXHU4ZjFlIl0sWyJiZTQwIiwiXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5MDZkXHU5MDc3XHU5''@;'; put 'put ''MTMwXHU5MTJkXHU5MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5MmM1XHU5MmJiXHU5MmI3XHU5MmVhXHU5MmFjXHU5MmU0XHU5MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3XHU5NzA5XHU5NzYw''@;'; put 'put ''XHU5NzhkXHU5NzhiXHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBhXHU5OTEzXHU5OTEyXHU5OTE4XHU5OWRkXHU5OWQwXHU5OWRmXHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5Yjc3XHU5YjZmXHU5''@;'; put 'put ''ZDA2XHU5ZDA5Il0sWyJiZWExIiwiXHU5ZDAzXHU5ZWE5XHU5ZWJlXHU5ZWNlXHU1OGE4XHU5ZjUyXHU1MTEyXHU1MTE4XHU1MTE0XHU1MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1NjY0XHU1Njc4XHU1NjZh''@;'; put 'put ''XHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1NjYyXHU1Njc2XHU1OGMxXHU1OGJlXHU1OGM3XHU1OGM1XHU1OTZlXHU1YjFkXHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJlXHU2MWNhXHU2MWM4XHU2''@;'; put 'put ''MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJjXHU2NGRhXHU2NGM0XHU2NGM3XHU2NGMyXHU2NGNkXHU2NGJmXHU2NGQyXHU2NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2YTU5XHU2YTZiXHU2YTU4''@;'; put 'put ''XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2YTQ3XHU2YTM1XHU2YTVmXHU2YTQ4XHU2YjU5XHU2Yjc3XHU2YzA1XHU2ZmMyXHU2ZmIxXHU2ZmExIl0sWyJiZjQwIiwiXHU2ZmMzXHU2ZmE0XHU2ZmMxXHU2ZmE3XHU2ZmIzXHU2ZmMwXHU2ZmI5XHU2ZmI2XHU2ZmE2XHU2ZmEwXHU2''@;'; put 'put ''ZmI0XHU3MWJlXHU3MWM5XHU3MWQwXHU3MWQyXHU3MWM4XHU3MWQ1XHU3MWI5XHU3MWNlXHU3MWQ5XHU3MWRjXHU3MWMzXHU3MWM0XHU3MzY4XHU3NDljXHU3NGEzXHU3NDk4XHU3NDlmXHU3NDllXHU3NGUyXHU3NTBjXHU3NTBkXHU3NjM0XHU3NjM4XHU3NjNhXHU3NmU3XHU3NmU1XHU3N2Ew''@;'; put 'put ''XHU3NzllXHU3NzlmXHU3N2E1XHU3OGU4XHU3OGRhXHU3OGVjXHU3OGU3XHU3OWE2XHU3YTRkXHU3YTRlXHU3YTQ2XHU3YTRjXHU3YTRiXHU3YWJhXHU3YmQ5XHU3YzExXHU3YmM5XHU3YmU0XHU3YmRiXHU3YmUxXHU3YmU5XHU3YmU2XHU3Y2Q1XHU3Y2Q2XHU3ZTBhIl0sWyJiZmExIiwiXHU3''@;'; put 'put ''ZTExXHU3ZTA4XHU3ZTFiXHU3ZTIzXHU3ZTFlXHU3ZTFkXHU3ZTA5XHU3ZTEwXHU3Zjc5XHU3ZmIyXHU3ZmYwXHU3ZmYxXHU3ZmVlXHU4MDI4XHU4MWIzXHU4MWE5XHU4MWE4XHU4MWZiXHU4MjA4XHU4MjU4XHU4MjU5XHU4NTRhXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY5XHU4NTQzXHU4NTQ5''@;'; put 'put ''XHU4NTZkXHU4NTZhXHU4NTVlXHU4NzgzXHU4NzlmXHU4NzllXHU4N2EyXHU4NzhkXHU4ODYxXHU4OTJhXHU4OTMyXHU4OTI1XHU4OTJiXHU4OTIxXHU4OWFhXHU4OWE2XHU4YWU2XHU4YWZhXHU4YWViXHU4YWYxXHU4YjAwXHU4YWRjXHU4YWU3XHU4YWVlXHU4YWZlXHU4YjAxXHU4YjAyXHU4''@;'; put 'put ''YWY3XHU4YWVkXHU4YWYzXHU4YWY2XHU4YWZjXHU4YzZiXHU4YzZkXHU4YzkzXHU4Y2Y0XHU4ZTQ0XHU4ZTMxXHU4ZTM0XHU4ZTQyXHU4ZTM5XHU4ZTM1XHU4ZjNiXHU4ZjJmXHU4ZjM4XHU4ZjMzXHU4ZmE4XHU4ZmE2XHU5MDc1XHU5MDc0XHU5MDc4XHU5MDcyXHU5MDdjXHU5MDdhXHU5MTM0''@;'; put 'put ''XHU5MTkyXHU5MzIwXHU5MzM2XHU5MmY4XHU5MzMzXHU5MzJmXHU5MzIyXHU5MmZjXHU5MzJiXHU5MzA0XHU5MzFhIl0sWyJjMDQwIiwiXHU5MzEwXHU5MzI2XHU5MzIxXHU5MzE1XHU5MzJlXHU5MzE5XHU5NWJiXHU5NmE3XHU5NmE4XHU5NmFhXHU5NmQ1XHU5NzBlXHU5NzExXHU5NzE2XHU5''@;'; put 'put ''NzBkXHU5NzEzXHU5NzBmXHU5NzViXHU5NzVjXHU5NzY2XHU5Nzk4XHU5ODMwXHU5ODM4XHU5ODNiXHU5ODM3XHU5ODJkXHU5ODM5XHU5ODI0XHU5OTEwXHU5OTI4XHU5OTFlXHU5OTFiXHU5OTIxXHU5OTFhXHU5OWVkXHU5OWUyXHU5OWYxXHU5YWI4XHU5YWJjXHU5YWZiXHU5YWVkXHU5YjI4''@;'; put 'put ''XHU5YjkxXHU5ZDE1XHU5ZDIzXHU5ZDI2XHU5ZDI4XHU5ZDEyXHU5ZDFiXHU5ZWQ4XHU5ZWQ0XHU5ZjhkXHU5ZjljXHU1MTJhXHU1MTFmXHU1MTIxXHU1MTMyXHU1MmY1XHU1NjhlXHU1NjgwXHU1NjkwXHU1Njg1XHU1Njg3Il0sWyJjMGExIiwiXHU1NjhmXHU1OGQ1XHU1OGQzXHU1OGQxXHU1''@;'; put 'put ''OGNlXHU1YjMwXHU1YjJhXHU1YjI0XHU1YjdhXHU1YzM3XHU1YzY4XHU1ZGJjXHU1ZGJhXHU1ZGJkXHU1ZGI4XHU1ZTZiXHU1ZjRjXHU1ZmJkXHU2MWM5XHU2MWMyXHU2MWM3XHU2MWU2XHU2MWNiXHU2MjMyXHU2MjM0XHU2NGNlXHU2NGNhXHU2NGQ4XHU2NGUwXHU2NGYwXHU2NGU2XHU2NGVj''@;'; put 'put ''XHU2NGYxXHU2NGUyXHU2NGVkXHU2NTgyXHU2NTgzXHU2NmQ5XHU2NmQ2XHU2YTgwXHU2YTk0XHU2YTg0XHU2YWEyXHU2YTljXHU2YWRiXHU2YWEzXHU2YTdlXHU2YTk3XHU2YTkwXHU2YWEwXHU2YjVjXHU2YmFlXHU2YmRhXHU2YzA4XHU2ZmQ4XHU2ZmYxXHU2ZmRmXHU2ZmUwXHU2ZmRiXHU2''@;'; put 'put ''ZmU0XHU2ZmViXHU2ZmVmXHU2ZjgwXHU2ZmVjXHU2ZmUxXHU2ZmU5XHU2ZmQ1XHU2ZmVlXHU2ZmYwXHU3MWU3XHU3MWRmXHU3MWVlXHU3MWU2XHU3MWU1XHU3MWVkXHU3MWVjXHU3MWY0XHU3MWUwXHU3MjM1XHU3MjQ2XHU3MzcwXHU3MzcyXHU3NGE5XHU3NGIwXHU3NGE2XHU3NGE4XHU3NjQ2''@;'; put 'put ''XHU3NjQyXHU3NjRjXHU3NmVhXHU3N2IzXHU3N2FhXHU3N2IwXHU3N2FjIl0sWyJjMTQwIiwiXHU3N2E3XHU3N2FkXHU3N2VmXHU3OGY3XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFhXHU3YTU3XHU3YWJmXHU3YzA3XHU3YzBkXHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3''@;'; put 'put ''Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3ZTJlXHU3ZTNlXHU3ZTQ2XHU3ZTM3XHU3ZTMyXHU3ZTQzXHU3ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3ZTM5XHU3ZTQ4XHU3ZTM1XHU3ZTNmXHU3ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcx''@;'; put 'put ''XHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJhXHU4MWMyXHU4MWMwXHU4MWJmXHU4MWJkXHU4MWM5XHU4MWJlXHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhIl0sWyJjMWExIiwiXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4''@;'; put 'put ''NWE4XHU4NThhXHU4NjY3XHU4N2MwXHU4N2QxXHU4N2IzXHU4N2QyXHU4N2M2XHU4N2FiXHU4N2JiXHU4N2JhXHU4N2M4XHU4N2NiXHU4OTNiXHU4OTM2XHU4OTQ0XHU4OTM4XHU4OTNkXHU4OWFjXHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEw''@;'; put 'put ''XHU4YzQxXHU4YzNmXHU4YzczXHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4Y2Y4XHU4Y2ZiXHU4ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4ZTRhXHU4ZjQ0XHU4ZjNlXHU4ZjQyXHU4ZjQ1XHU4ZjNmXHU5MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5''@;'; put 'put ''MTljXHU5MzRkXHU5MzgyXHU5MzI4XHU5Mzc1XHU5MzRhXHU5MzY1XHU5MzRiXHU5MzE4XHU5MzdlXHU5MzZjXHU5MzViXHU5MzcwXHU5MzVhXHU5MzU0XHU5NWNhXHU5NWNiXHU5NWNjXHU5NWM4XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2''@;'; put 'put ''XHU5OGI2XHU5OTM1XHU5YTAxIl0sWyJjMjQwIiwiXHU5OWZmXHU5YmFlXHU5YmFiXHU5YmFhXHU5YmFkXHU5ZDNiXHU5ZDNmXHU5ZThiXHU5ZWNmXHU5ZWRlXHU5ZWRjXHU5ZWRkXHU5ZWRiXHU5ZjNlXHU5ZjRiXHU1M2UyXHU1Njk1XHU1NmFlXHU1OGQ5XHU1OGQ4XHU1YjM4XHU1ZjVkXHU2''@;'; put 'put ''MWUzXHU2MjMzXHU2NGY0XHU2NGYyXHU2NGZlXHU2NTA2XHU2NGZhXHU2NGZiXHU2NGY3XHU2NWI3XHU2NmRjXHU2NzI2XHU2YWIzXHU2YWFjXHU2YWMzXHU2YWJiXHU2YWI4XHU2YWMyXHU2YWFlXHU2YWFmXHU2YjVmXHU2Yjc4XHU2YmFmXHU3MDA5XHU3MDBiXHU2ZmZlXHU3MDA2XHU2ZmZh''@;'; put 'put ''XHU3MDExXHU3MDBmXHU3MWZiXHU3MWZjXHU3MWZlXHU3MWY4XHU3Mzc3XHU3Mzc1XHU3NGE3XHU3NGJmXHU3NTE1XHU3NjU2XHU3NjU4Il0sWyJjMmExIiwiXHU3NjUyXHU3N2JkXHU3N2JmXHU3N2JiXHU3N2JjXHU3OTBlXHU3OWFlXHU3YTYxXHU3YTYyXHU3YTYwXHU3YWM0XHU3YWM1XHU3''@;'; put 'put ''YzJiXHU3YzI3XHU3YzJhXHU3YzFlXHU3YzIzXHU3YzIxXHU3Y2U3XHU3ZTU0XHU3ZTU1XHU3ZTVlXHU3ZTVhXHU3ZTYxXHU3ZTUyXHU3ZTU5XHU3ZjQ4XHU3ZmY5XHU3ZmZiXHU4MDc3XHU4MDc2XHU4MWNkXHU4MWNmXHU4MjBhXHU4NWNmXHU4NWE5XHU4NWNkXHU4NWQwXHU4NWM5XHU4NWIw''@;'; put 'put ''XHU4NWJhXHU4NWI5XHU4NWE2XHU4N2VmXHU4N2VjXHU4N2YyXHU4N2UwXHU4OTg2XHU4OWIyXHU4OWY0XHU4YjI4XHU4YjM5XHU4YjJjXHU4YjJiXHU4YzUwXHU4ZDA1XHU4ZTU5XHU4ZTYzXHU4ZTY2XHU4ZTY0XHU4ZTVmXHU4ZTU1XHU4ZWMwXHU4ZjQ5XHU4ZjRkXHU5MDg3XHU5MDgzXHU5''@;'; put 'put ''MDg4XHU5MWFiXHU5MWFjXHU5MWQwXHU5Mzk0XHU5MzhhXHU5Mzk2XHU5M2EyXHU5M2IzXHU5M2FlXHU5M2FjXHU5M2IwXHU5Mzk4XHU5MzlhXHU5Mzk3XHU5NWQ0XHU5NWQ2XHU5NWQwXHU5NWQ1XHU5NmUyXHU5NmRjXHU5NmQ5XHU5NmRiXHU5NmRlXHU5NzI0XHU5N2EzXHU5N2E2Il0sWyJj''@;'; put 'put ''MzQwIiwiXHU5N2FkXHU5N2Y5XHU5ODRkXHU5ODRmXHU5ODRjXHU5ODRlXHU5ODUzXHU5OGJhXHU5OTNlXHU5OTNmXHU5OTNkXHU5OTJlXHU5OWE1XHU5YTBlXHU5YWMxXHU5YjAzXHU5YjA2XHU5YjRmXHU5YjRlXHU5YjRkXHU5YmNhXHU5YmM5XHU5YmZkXHU5YmM4XHU5YmMwXHU5ZDUxXHU5''@;'; put 'put ''ZDVkXHU5ZDYwXHU5ZWUwXHU5ZjE1XHU5ZjJjXHU1MTMzXHU1NmE1XHU1OGRlXHU1OGRmXHU1OGUyXHU1YmY1XHU5ZjkwXHU1ZWVjXHU2MWYyXHU2MWY3XHU2MWY2XHU2MWY1XHU2NTAwXHU2NTBmXHU2NmUwXHU2NmRkXHU2YWU1XHU2YWRkXHU2YWRhXHU2YWQzXHU3MDFiXHU3MDFmXHU3MDI4''@;'; put 'put ''XHU3MDFhXHU3MDFkXHU3MDE1XHU3MDE4XHU3MjA2XHU3MjBkXHU3MjU4XHU3MmEyXHU3Mzc4Il0sWyJjM2ExIiwiXHU3MzdhXHU3NGJkXHU3NGNhXHU3NGUzXHU3NTg3XHU3NTg2XHU3NjVmXHU3NjYxXHU3N2M3XHU3OTE5XHU3OWIxXHU3YTZiXHU3YTY5XHU3YzNlXHU3YzNmXHU3YzM4XHU3''@;'; put 'put ''YzNkXHU3YzM3XHU3YzQwXHU3ZTZiXHU3ZTZkXHU3ZTc5XHU3ZTY5XHU3ZTZhXHU3Zjg1XHU3ZTczXHU3ZmI2XHU3ZmI5XHU3ZmI4XHU4MWQ4XHU4NWU5XHU4NWRkXHU4NWVhXHU4NWQ1XHU4NWU0XHU4NWU1XHU4NWY3XHU4N2ZiXHU4ODA1XHU4ODBkXHU4N2Y5XHU4N2ZlXHU4OTYwXHU4OTVm''@;'; put 'put ''XHU4OTU2XHU4OTVlXHU4YjQxXHU4YjVjXHU4YjU4XHU4YjQ5XHU4YjVhXHU4YjRlXHU4YjRmXHU4YjQ2XHU4YjU5XHU4ZDA4XHU4ZDBhXHU4ZTdjXHU4ZTcyXHU4ZTg3XHU4ZTc2XHU4ZTZjXHU4ZTdhXHU4ZTc0XHU4ZjU0XHU4ZjRlXHU4ZmFkXHU5MDhhXHU5MDhiXHU5MWIxXHU5MWFlXHU5''@;'; put 'put ''M2UxXHU5M2QxXHU5M2RmXHU5M2MzXHU5M2M4XHU5M2RjXHU5M2RkXHU5M2Q2XHU5M2UyXHU5M2NkXHU5M2Q4XHU5M2U0XHU5M2Q3XHU5M2U4XHU5NWRjXHU5NmI0XHU5NmUzXHU5NzJhXHU5NzI3XHU5NzYxXHU5N2RjXHU5N2ZiXHU5ODVlIl0sWyJjNDQwIiwiXHU5ODU4XHU5ODViXHU5OGJj''@;'; put 'put ''XHU5OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5XHU5YjBkXHU5YmU4XHU5YmU3XHU5YmQ2XHU5YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5ZDZhXHU5ZDZjXHU5ZTkyXHU5ZTk3XHU5ZTkzXHU5ZWI0XHU1MmY4XHU1NmE4XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1''@;'; put 'put ''YjdkXHU1YmY2XHU1ZGM5XHU2MWY4XHU2MWZhXHU2NTE4XHU2NTE0XHU2NTE5XHU2NmU2XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMwXHU3MDMyXHU3MjEwXHU3MzdiXHU3NGNmXHU3NjYyXHU3NjY1XHU3OTI2XHU3OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRk''@;'; put 'put ''XHU3Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdkXHU3ZTdjIl0sWyJjNGExIiwiXHU3ZTgyXHU3ZjRjXHU4MDAwXHU4MWRhXHU4MjY2XHU4NWZiXHU4NWY5XHU4NjExXHU4NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4OWJhXHU4OWY4XHU4YjcwXHU4YjZjXHU4''@;'; put 'put ''YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4ZTg1XHU4ZTgyXHU5MWI0XHU5MWNiXHU5NDE4XHU5NDAzXHU5M2ZkXHU5NWUxXHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3XHU5YTM1XHU5YzEzXHU5YzBkXHU5ZTc5''@;'; put 'put ''XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4XHU1NmMxXHU1NmMwXHU1NmMyXHU1OTE0XHU1YzZjXHU1ZGNkXHU2MWZjXHU2MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2YmIyXHU3MDRjXHU3MjFiXHU3MmE3XHU3''@;'; put 'put ''NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4NjE3XHU4NjJkXHU4NjFhXHU4ODIzXHU4ODIyXHU4ODIxXHU4ODFmXHU4OTZhXHU4OTZjXHU4OWJkXHU4Yjc0Il0sWyJjNTQwIiwiXHU4Yjc3XHU4YjdkXHU4ZDEzXHU4ZThhXHU4ZThkXHU4ZThiXHU4ZjVm''@;'; put 'put ''XHU4ZmFmXHU5MWJhXHU5NDJlXHU5NDMzXHU5NDM1XHU5NDNhXHU5NDM4XHU5NDMyXHU5NDJiXHU5NWUyXHU5NzM4XHU5NzM5XHU5NzMyXHU5N2ZmXHU5ODY3XHU5ODY1XHU5OTU3XHU5YTQ1XHU5YTQzXHU5YTQwXHU5YTNlXHU5YWNmXHU5YjU0XHU5YjUxXHU5YzJkXHU5YzI1XHU5ZGFmXHU5''@;'; put 'put ''ZGI0XHU5ZGMyXHU5ZGI4XHU5ZTlkXHU5ZWVmXHU5ZjE5XHU5ZjVjXHU5ZjY2XHU5ZjY3XHU1MTNjXHU1MTNiXHU1NmM4XHU1NmNhXHU1NmM5XHU1YjdmXHU1ZGQ0XHU1ZGQyXHU1ZjRlXHU2MWZmXHU2NTI0XHU2YjBhXHU2YjYxXHU3MDUxXHU3MDU4XHU3MzgwXHU3NGU0XHU3NThhXHU3NjZl''@;'; put 'put ''XHU3NjZjIl0sWyJjNWExIiwiXHU3OWIzXHU3YzYwXHU3YzVmXHU4MDdlXHU4MDdkXHU4MWRmXHU4OTcyXHU4OTZmXHU4OWZjXHU4YjgwXHU4ZDE2XHU4ZDE3XHU4ZTkxXHU4ZTkzXHU4ZjYxXHU5MTQ4XHU5NDQ0XHU5NDUxXHU5NDUyXHU5NzNkXHU5NzNlXHU5N2MzXHU5N2MxXHU5ODZiXHU5''@;'; put 'put ''OTU1XHU5YTU1XHU5YTRkXHU5YWQyXHU5YjFhXHU5YzQ5XHU5YzMxXHU5YzNlXHU5YzNiXHU5ZGQzXHU5ZGQ3XHU5ZjM0XHU5ZjZjXHU5ZjZhXHU5Zjk0XHU1NmNjXHU1ZGQ2XHU2MjAwXHU2NTIzXHU2NTJiXHU2NTJhXHU2NmVjXHU2YjEwXHU3NGRhXHU3YWNhXHU3YzY0XHU3YzYzXHU3YzY1''@;'; put 'put ''XHU3ZTkzXHU3ZTk2XHU3ZTk0XHU4MWUyXHU4NjM4XHU4NjNmXHU4ODMxXHU4YjhhXHU5MDkwXHU5MDhmXHU5NDYzXHU5NDYwXHU5NDY0XHU5NzY4XHU5ODZmXHU5OTVjXHU5YTVhXHU5YTViXHU5YTU3XHU5YWQzXHU5YWQ0XHU5YWQxXHU5YzU0XHU5YzU3XHU5YzU2XHU5ZGU1XHU5ZTlmXHU5''@;'; put 'put ''ZWY0XHU1NmQxXHU1OGU5XHU2NTJjXHU3MDVlXHU3NjcxXHU3NjcyXHU3N2Q3XHU3ZjUwXHU3Zjg4XHU4ODM2XHU4ODM5XHU4ODYyXHU4YjkzXHU4YjkyIl0sWyJjNjQwIiwiXHU4Yjk2XHU4Mjc3XHU4ZDFiXHU5MWMwXHU5NDZhXHU5NzQyXHU5NzQ4XHU5NzQ0XHU5N2M2XHU5ODcwXHU5YTVm''@;'; put 'put ''XHU5YjIyXHU5YjU4XHU5YzVmXHU5ZGY5XHU5ZGZhXHU5ZTdjXHU5ZTdkXHU5ZjA3XHU5Zjc3XHU5ZjcyXHU1ZWYzXHU2YjE2XHU3MDYzXHU3YzZjXHU3YzZlXHU4ODNiXHU4OWMwXHU4ZWExXHU5MWMxXHU5NDcyXHU5NDcwXHU5ODcxXHU5OTVlXHU5YWQ2XHU5YjIzXHU5ZWNjXHU3MDY0XHU3''@;'; put 'put ''N2RhXHU4YjlhXHU5NDc3XHU5N2M5XHU5YTYyXHU5YTY1XHU3ZTljXHU4YjljXHU4ZWFhXHU5MWM1XHU5NDdkXHU5NDdlXHU5NDdjXHU5Yzc3XHU5Yzc4XHU5ZWY3XHU4YzU0XHU5NDdmXHU5ZTFhXHU3MjI4XHU5YTZhXHU5YjMxXHU5ZTFiXHU5ZTFlXHU3YzcyIl0sWyJjOTQwIiwiXHU0ZTQy''@;'; put 'put ''XHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThkXHU1NmQ3XHVmYTBjXHU1YzZlXHU1ZjczXHU0ZTBmXHU1MTg3XHU0ZTBlXHU0ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1''@;'; put 'put ''YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0ZTNjXHU0ZWU4XHU0ZWRjXHU0ZWU5XHU0ZWUxXHU0ZWRkXHU0ZWRhXHU1MjBjXHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0XHU1YzEyXHU1YzNiXHU1Yzc0XHU1Yzcz''@;'; put 'put ''XHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1Il0sWyJjOWExIiwiXHU2YzM2XHU2YzQzXHU2YzNmXHU2YzNiXHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFlXHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0''@;'; put 'put ''ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0ZWY0XHU0ZjEyXHU1MWIxXHU1MjEzXHU1MjA5XHU1MjEwXHU1MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1''@;'; put 'put ''XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1XHU1YzdjXHU1YzdhXHU1YzdiXHU1YzdlXHU1ZGRmXHU1ZTc1XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2''@;'; put 'put ''MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2NzM4XHU2NzNiXHU2NzNhXHU2NzNmXHU2NzNjXHU2NzMzXHU2YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2YzU0XHU2YzRiIl0sWyJjYTQwIiwiXHU2YzRjXHU3MDcxXHU3MjVlXHU3MmI0XHU3MmI1''@;'; put 'put ''XHU3MzhlXHU3NTJhXHU3NjdmXHU3YTc1XHU3ZjUxXHU4Mjc4XHU4MjdjXHU4MjgwXHU4MjdkXHU4MjdmXHU4NjRkXHU4OTdlXHU5MDk5XHU5MDk3XHU5MDk4XHU5MDliXHU5MDk0XHU5NjIyXHU5NjI0XHU5NjIwXHU5NjIzXHU0ZjU2XHU0ZjNiXHU0ZjYyXHU0ZjQ5XHU0ZjUzXHU0ZjY0XHU0''@;'; put 'put ''ZjNlXHU0ZjY3XHU0ZjUyXHU0ZjVmXHU0ZjQxXHU0ZjU4XHU0ZjJkXHU0ZjMzXHU0ZjNmXHU0ZjYxXHU1MThmXHU1MWI5XHU1MjFjXHU1MjFlXHU1MjIxXHU1MmFkXHU1MmFlXHU1MzA5XHU1MzYzXHU1MzcyXHU1MzhlXHU1MzhmXHU1NDMwXHU1NDM3XHU1NDJhXHU1NDU0XHU1NDQ1XHU1NDE5''@;'; put 'put ''XHU1NDFjXHU1NDI1XHU1NDE4Il0sWyJjYWExIiwiXHU1NDNkXHU1NDRmXHU1NDQxXHU1NDI4XHU1NDI0XHU1NDQ3XHU1NmVlXHU1NmU3XHU1NmU1XHU1NzQxXHU1NzQ1XHU1NzRjXHU1NzQ5XHU1NzRiXHU1NzUyXHU1OTA2XHU1OTQwXHU1OWE2XHU1OTk4XHU1OWEwXHU1OTk3XHU1OThlXHU1''@;'; put 'put ''OWEyXHU1OTkwXHU1OThmXHU1OWE3XHU1OWExXHU1YjhlXHU1YjkyXHU1YzI4XHU1YzJhXHU1YzhkXHU1YzhmXHU1Yzg4XHU1YzhiXHU1Yzg5XHU1YzkyXHU1YzhhXHU1Yzg2XHU1YzkzXHU1Yzk1XHU1ZGUwXHU1ZTBhXHU1ZTBlXHU1ZThiXHU1ZTg5XHU1ZThjXHU1ZTg4XHU1ZThkXHU1ZjA1''@;'; put 'put ''XHU1ZjFkXHU1Zjc4XHU1Zjc2XHU1ZmQyXHU1ZmQxXHU1ZmQwXHU1ZmVkXHU1ZmU4XHU1ZmVlXHU1ZmYzXHU1ZmUxXHU1ZmU0XHU1ZmUzXHU1ZmZhXHU1ZmVmXHU1ZmY3XHU1ZmZiXHU2MDAwXHU1ZmY0XHU2MjNhXHU2MjgzXHU2MjhjXHU2MjhlXHU2MjhmXHU2Mjk0XHU2Mjg3XHU2MjcxXHU2''@;'; put 'put ''MjdiXHU2MjdhXHU2MjcwXHU2MjgxXHU2Mjg4XHU2Mjc3XHU2MjdkXHU2MjcyXHU2Mjc0XHU2NTM3XHU2NWYwXHU2NWY0XHU2NWYzXHU2NWYyXHU2NWY1XHU2NzQ1XHU2NzQ3Il0sWyJjYjQwIiwiXHU2NzU5XHU2NzU1XHU2NzRjXHU2NzQ4XHU2NzVkXHU2NzRkXHU2NzVhXHU2NzRiXHU2YmQw''@;'; put 'put ''XHU2YzE5XHU2YzFhXHU2Yzc4XHU2YzY3XHU2YzZiXHU2Yzg0XHU2YzhiXHU2YzhmXHU2YzcxXHU2YzZmXHU2YzY5XHU2YzlhXHU2YzZkXHU2Yzg3XHU2Yzk1XHU2YzljXHU2YzY2XHU2YzczXHU2YzY1XHU2YzdiXHU2YzhlXHU3MDc0XHU3MDdhXHU3MjYzXHU3MmJmXHU3MmJkXHU3MmMzXHU3''@;'; put 'put ''MmM2XHU3MmMxXHU3MmJhXHU3MmM1XHU3Mzk1XHU3Mzk3XHU3MzkzXHU3Mzk0XHU3MzkyXHU3NTNhXHU3NTM5XHU3NTk0XHU3NTk1XHU3NjgxXHU3OTNkXHU4MDM0XHU4MDk1XHU4MDk5XHU4MDkwXHU4MDkyXHU4MDljXHU4MjkwXHU4MjhmXHU4Mjg1XHU4MjhlXHU4MjkxXHU4MjkzIl0sWyJj''@;'; put 'put ''YmExIiwiXHU4MjhhXHU4MjgzXHU4Mjg0XHU4Yzc4XHU4ZmM5XHU4ZmJmXHU5MDlmXHU5MGExXHU5MGE1XHU5MDllXHU5MGE3XHU5MGEwXHU5NjMwXHU5NjI4XHU5NjJmXHU5NjJkXHU0ZTMzXHU0Zjk4XHU0ZjdjXHU0Zjg1XHU0ZjdkXHU0ZjgwXHU0Zjg3XHU0Zjc2XHU0Zjc0XHU0Zjg5XHU0''@;'; put 'put ''Zjg0XHU0Zjc3XHU0ZjRjXHU0Zjk3XHU0ZjZhXHU0ZjlhXHU0Zjc5XHU0ZjgxXHU0Zjc4XHU0ZjkwXHU0ZjljXHU0Zjk0XHU0ZjllXHU0ZjkyXHU0ZjgyXHU0Zjk1XHU0ZjZiXHU0ZjZlXHU1MTllXHU1MWJjXHU1MWJlXHU1MjM1XHU1MjMyXHU1MjMzXHU1MjQ2XHU1MjMxXHU1MmJjXHU1MzBh''@;'; put 'put ''XHU1MzBiXHU1MzNjXHU1MzkyXHU1Mzk0XHU1NDg3XHU1NDdmXHU1NDgxXHU1NDkxXHU1NDgyXHU1NDg4XHU1NDZiXHU1NDdhXHU1NDdlXHU1NDY1XHU1NDZjXHU1NDc0XHU1NDY2XHU1NDhkXHU1NDZmXHU1NDYxXHU1NDYwXHU1NDk4XHU1NDYzXHU1NDY3XHU1NDY0XHU1NmY3XHU1NmY5XHU1''@;'; put 'put ''NzZmXHU1NzcyXHU1NzZkXHU1NzZiXHU1NzcxXHU1NzcwXHU1Nzc2XHU1NzgwXHU1Nzc1XHU1NzdiXHU1NzczXHU1Nzc0XHU1NzYyIl0sWyJjYzQwIiwiXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJhXHU1OWNmXHU1OWNlXHU1OWIyXHU1OWNjXHU1OWMxXHU1OWI2XHU1OWJj''@;'; put 'put ''XHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMwXHU1OWM4XHU1OWI0XHU1OWM3XHU1YjYyXHU1YjY1XHU1YjkzXHU1Yjk1XHU1YzQ0XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1Y2FjXHU1YzlmXHU1Y2EzXHU1Y2FkXHU1Y2EyXHU1Y2FhXHU1Y2E3XHU1''@;'; put 'put ''YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1ZTE3XHU1ZTE0XHU1ZTE5XHU1ZjI4XHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjU0XHU1ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5XHU2MDMyXHU2MDBiIl0sWyJjY2ExIiwiXHU2MDM0XHU2MDBhXHU2MDE3''@;'; put 'put ''XHU2MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2MDIyXHU2MDBkXHU2MDEwXHU2MDJlXHU2MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2MDFjXHU2MjE0XHU2MjNkXHU2MmFkXHU2MmI0XHU2MmQxXHU2MmJlXHU2MmFhXHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2''@;'; put 'put ''MmIwXHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJiXHU2NjA5XHU2NWZjXHU2NjA0XHU2NjEyXHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBiXHU2NjBkXHU2NjA1XHU2NWZkXHU2NjExXHU2NjEwXHU2NmY2XHU2NzBhXHU2Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2''@;'; put 'put ''XHU2Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2NzdhXHU2NzlmXHU2NzkxXHU2Nzk5XHU2NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2Nzc5XHU2Nzk0XHU2YjI1XHU2YjgwXHU2YjdlXHU2YmRlXHU2YzFkXHU2YzkzXHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2''@;'; put 'put ''Y2U3XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2JhXHU2Y2MzXHU2Y2M2XHU2Y2VkXHU2Y2YyIl0sWyJjZDQwIiwiXHU2Y2QyXHU2Y2RkXHU2Y2I0XHU2YzhhXHU2YzlkXHU2YzgwXHU2Y2RlXHU2Y2MwXHU2ZDMwXHU2Y2NkXHU2Y2M3XHU2Y2IwXHU2Y2Y5XHU2Y2NmXHU2Y2U5XHU2Y2QxXHU3MDk0''@;'; put 'put ''XHU3MDk4XHU3MDg1XHU3MDkzXHU3MDg2XHU3MDg0XHU3MDkxXHU3MDk2XHU3MDgyXHU3MDlhXHU3MDgzXHU3MjZhXHU3MmQ2XHU3MmNiXHU3MmQ4XHU3MmM5XHU3MmRjXHU3MmQyXHU3MmQ0XHU3MmRhXHU3MmNjXHU3MmQxXHU3M2E0XHU3M2ExXHU3M2FkXHU3M2E2XHU3M2EyXHU3M2EwXHU3''@;'; put 'put ''M2FjXHU3MzlkXHU3NGRkXHU3NGU4XHU3NTNmXHU3NTQwXHU3NTNlXHU3NThjXHU3NTk4XHU3NmFmXHU3NmYzXHU3NmYxXHU3NmYwXHU3NmY1XHU3N2Y4XHU3N2ZjXHU3N2Y5XHU3N2ZiXHU3N2ZhIl0sWyJjZGExIiwiXHU3N2Y3XHU3OTQyXHU3OTNmXHU3OWM1XHU3YTc4XHU3YTdiXHU3YWZi''@;'; put 'put ''XHU3Yzc1XHU3Y2ZkXHU4MDM1XHU4MDhmXHU4MGFlXHU4MGEzXHU4MGI4XHU4MGI1XHU4MGFkXHU4MjIwXHU4MmEwXHU4MmMwXHU4MmFiXHU4MjlhXHU4Mjk4XHU4MjliXHU4MmI1XHU4MmE3XHU4MmFlXHU4MmJjXHU4MjllXHU4MmJhXHU4MmI0XHU4MmE4XHU4MmExXHU4MmE5XHU4MmMyXHU4''@;'; put 'put ''MmE0XHU4MmMzXHU4MmI2XHU4MmEyXHU4NjcwXHU4NjZmXHU4NjZkXHU4NjZlXHU4YzU2XHU4ZmQyXHU4ZmNiXHU4ZmQzXHU4ZmNkXHU4ZmQ2XHU4ZmQ1XHU4ZmQ3XHU5MGIyXHU5MGI0XHU5MGFmXHU5MGIzXHU5MGIwXHU5NjM5XHU5NjNkXHU5NjNjXHU5NjNhXHU5NjQzXHU0ZmNkXHU0ZmM1''@;'; put 'put ''XHU0ZmQzXHU0ZmIyXHU0ZmM5XHU0ZmNiXHU0ZmMxXHU0ZmQ0XHU0ZmRjXHU0ZmQ5XHU0ZmJiXHU0ZmIzXHU0ZmRiXHU0ZmM3XHU0ZmQ2XHU0ZmJhXHU0ZmMwXHU0ZmI5XHU0ZmVjXHU1MjQ0XHU1MjQ5XHU1MmMwXHU1MmMyXHU1MzNkXHU1MzdjXHU1Mzk3XHU1Mzk2XHU1Mzk5XHU1Mzk4XHU1''@;'; put 'put ''NGJhXHU1NGExXHU1NGFkXHU1NGE1XHU1NGNmIl0sWyJjZTQwIiwiXHU1NGMzXHU4MzBkXHU1NGI3XHU1NGFlXHU1NGQ2XHU1NGI2XHU1NGM1XHU1NGM2XHU1NGEwXHU1NDcwXHU1NGJjXHU1NGEyXHU1NGJlXHU1NDcyXHU1NGRlXHU1NGIwXHU1N2I1XHU1NzllXHU1NzlmXHU1N2E0XHU1Nzhj''@;'; put 'put ''XHU1Nzk3XHU1NzlkXHU1NzliXHU1Nzk0XHU1Nzk4XHU1NzhmXHU1Nzk5XHU1N2E1XHU1NzlhXHU1Nzk1XHU1OGY0XHU1OTBkXHU1OTUzXHU1OWUxXHU1OWRlXHU1OWVlXHU1YTAwXHU1OWYxXHU1OWRkXHU1OWZhXHU1OWZkXHU1OWZjXHU1OWY2XHU1OWU0XHU1OWYyXHU1OWY3XHU1OWRiXHU1''@;'; put 'put ''OWU5XHU1OWYzXHU1OWY1XHU1OWUwXHU1OWZlXHU1OWY0XHU1OWVkXHU1YmE4XHU1YzRjXHU1Y2QwXHU1Y2Q4XHU1Y2NjXHU1Y2Q3XHU1Y2NiXHU1Y2RiIl0sWyJjZWExIiwiXHU1Y2RlXHU1Y2RhXHU1Y2M5XHU1Y2M3XHU1Y2NhXHU1Y2Q2XHU1Y2QzXHU1Y2Q0XHU1Y2NmXHU1Y2M4XHU1Y2M2''@;'; put 'put ''XHU1Y2NlXHU1Y2RmXHU1Y2Y4XHU1ZGY5XHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTIwXHU1ZTI0XHU1ZWIwXHU1ZWE0XHU1ZWEyXHU1ZTliXHU1ZWEzXHU1ZWE1XHU1ZjA3XHU1ZjJlXHU1ZjU2XHU1Zjg2XHU2MDM3XHU2MDM5XHU2MDU0XHU2MDcyXHU2MDVlXHU2MDQ1XHU2MDUzXHU2MDQ3XHU2''@;'; put 'put ''MDQ5XHU2MDViXHU2MDRjXHU2MDQwXHU2MDQyXHU2MDVmXHU2MDI0XHU2MDQ0XHU2MDU4XHU2MDY2XHU2MDZlXHU2MjQyXHU2MjQzXHU2MmNmXHU2MzBkXHU2MzBiXHU2MmY1XHU2MzBlXHU2MzAzXHU2MmViXHU2MmY5XHU2MzBmXHU2MzBjXHU2MmY4XHU2MmY2XHU2MzAwXHU2MzEzXHU2MzE0''@;'; put 'put ''XHU2MmZhXHU2MzE1XHU2MmZiXHU2MmYwXHU2NTQxXHU2NTQzXHU2NWFhXHU2NWJmXHU2NjM2XHU2NjIxXHU2NjMyXHU2NjM1XHU2NjFjXHU2NjI2XHU2NjIyXHU2NjMzXHU2NjJiXHU2NjNhXHU2NjFkXHU2NjM0XHU2NjM5XHU2NjJlXHU2NzBmXHU2NzEwXHU2N2MxXHU2N2YyXHU2N2M4XHU2''@;'; put 'put ''N2JhIl0sWyJjZjQwIiwiXHU2N2RjXHU2N2JiXHU2N2Y4XHU2N2Q4XHU2N2MwXHU2N2I3XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2RmXHU2N2I1XHU2N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2N2VlXHU2N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2''@;'; put 'put ''XHU2N2VkXHU2N2NjXHU2N2FlXHU2N2U2XHU2N2RiXHU2N2ZhXHU2N2M5XHU2N2NhXHU2N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2YjgyXHU2Yjg0XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUwXHU2YzIwXHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2''@;'; put 'put ''ZDBhXHU2Y2RhXHU2ZDMzXHU2ZDA0XHU2ZDE5XHU2ZDNhXHU2ZDFhXHU2ZDExXHU2ZDAwXHU2ZDFkXHU2ZDQyIl0sWyJjZmExIiwiXHU2ZDAxXHU2ZDE4XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2ZDEwXHU3MGI3XHU3MDlm''@;'; put 'put ''XHU3MGJlXHU3MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQxXHU3MjQ5XHU3MjRhXHU3MjZjXHU3MjcwXHU3MjczXHU3MjZlXHU3MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2MyXHU3M2M4XHU3M2M1XHU3''@;'; put 'put ''M2I5XHU3M2I2XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3M2MzXHU3M2M2XHU3M2I4XHU3M2NiXHU3NGVjXHU3NGVlXHU3NTJlXHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3NzBhXHU3NmY3XHU3NmZi''@;'; put 'put ''XHU3NmZhXHU3N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEwXHU3ODBmXHU3ODBlXHU3ODA5XHU3ODAzXHU3ODEzXHU3OTRhXHU3OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwIl0sWyJkMDQwIiwiXHU3YTdlXHU3''@;'; put 'put ''YWQxXHU3YjAwXHU3YjAxXHU3YzdhXHU3Yzc4XHU3Yzc5XHU3YzdmXHU3YzgwXHU3YzgxXHU3ZDAzXHU3ZDA4XHU3ZDAxXHU3ZjU4XHU3ZjkxXHU3ZjhkXHU3ZmJlXHU4MDA3XHU4MDBlXHU4MDBmXHU4MDE0XHU4MDM3XHU4MGQ4XHU4MGM3XHU4MGUwXHU4MGQxXHU4MGM4XHU4MGMyXHU4MGQw''@;'; put 'put ''XHU4MGM1XHU4MGUzXHU4MGQ5XHU4MGRjXHU4MGNhXHU4MGQ1XHU4MGM5XHU4MGNmXHU4MGQ3XHU4MGU2XHU4MGNkXHU4MWZmXHU4MjIxXHU4Mjk0XHU4MmQ5XHU4MmZlXHU4MmY5XHU4MzA3XHU4MmU4XHU4MzAwXHU4MmQ1XHU4MzNhXHU4MmViXHU4MmQ2XHU4MmY0XHU4MmVjXHU4MmUxXHU4''@;'; put 'put ''MmYyXHU4MmY1XHU4MzBjXHU4MmZiXHU4MmY2XHU4MmYwXHU4MmVhIl0sWyJkMGExIiwiXHU4MmU0XHU4MmUwXHU4MmZhXHU4MmYzXHU4MmVkXHU4Njc3XHU4Njc0XHU4NjdjXHU4NjczXHU4ODQxXHU4ODRlXHU4ODY3XHU4ODZhXHU4ODY5XHU4OWQzXHU4YTA0XHU4YTA3XHU4ZDcyXHU4ZmUz''@;'; put 'put ''XHU4ZmUxXHU4ZmVlXHU4ZmUwXHU5MGYxXHU5MGJkXHU5MGJmXHU5MGQ1XHU5MGM1XHU5MGJlXHU5MGM3XHU5MGNiXHU5MGM4XHU5MWQ0XHU5MWQzXHU5NjU0XHU5NjRmXHU5NjUxXHU5NjUzXHU5NjRhXHU5NjRlXHU1MDFlXHU1MDA1XHU1MDA3XHU1MDEzXHU1MDIyXHU1MDMwXHU1MDFiXHU0''@;'; put 'put ''ZmY1XHU0ZmY0XHU1MDMzXHU1MDM3XHU1MDJjXHU0ZmY2XHU0ZmY3XHU1MDE3XHU1MDFjXHU1MDIwXHU1MDI3XHU1MDM1XHU1MDJmXHU1MDMxXHU1MDBlXHU1MTVhXHU1MTk0XHU1MTkzXHU1MWNhXHU1MWM0XHU1MWM1XHU1MWM4XHU1MWNlXHU1MjYxXHU1MjVhXHU1MjUyXHU1MjVlXHU1MjVm''@;'; put 'put ''XHU1MjU1XHU1MjYyXHU1MmNkXHU1MzBlXHU1MzllXHU1NTI2XHU1NGUyXHU1NTE3XHU1NTEyXHU1NGU3XHU1NGYzXHU1NGU0XHU1NTFhXHU1NGZmXHU1NTA0XHU1NTA4XHU1NGViXHU1NTExXHU1NTA1XHU1NGYxIl0sWyJkMTQwIiwiXHU1NTBhXHU1NGZiXHU1NGY3XHU1NGY4XHU1NGUwXHU1''@;'; put 'put ''NTBlXHU1NTAzXHU1NTBiXHU1NzAxXHU1NzAyXHU1N2NjXHU1ODMyXHU1N2Q1XHU1N2QyXHU1N2JhXHU1N2M2XHU1N2JkXHU1N2JjXHU1N2I4XHU1N2I2XHU1N2JmXHU1N2M3XHU1N2QwXHU1N2I5XHU1N2MxXHU1OTBlXHU1OTRhXHU1YTE5XHU1YTE2XHU1YTJkXHU1YTJlXHU1YTE1XHU1YTBm''@;'; put 'put ''XHU1YTE3XHU1YTBhXHU1YTFlXHU1YTMzXHU1YjZjXHU1YmE3XHU1YmFkXHU1YmFjXHU1YzAzXHU1YzU2XHU1YzU0XHU1Y2VjXHU1Y2ZmXHU1Y2VlXHU1Y2YxXHU1Y2Y3XHU1ZDAwXHU1Y2Y5XHU1ZTI5XHU1ZTI4XHU1ZWE4XHU1ZWFlXHU1ZWFhXHU1ZWFjXHU1ZjMzXHU1ZjMwXHU1ZjY3XHU2''@;'; put 'put ''MDVkXHU2MDVhXHU2MDY3Il0sWyJkMWExIiwiXHU2MDQxXHU2MGEyXHU2MDg4XHU2MDgwXHU2MDkyXHU2MDgxXHU2MDlkXHU2MDgzXHU2MDk1XHU2MDliXHU2MDk3XHU2MDg3XHU2MDljXHU2MDhlXHU2MjE5XHU2MjQ2XHU2MmYyXHU2MzEwXHU2MzU2XHU2MzJjXHU2MzQ0XHU2MzQ1XHU2MzM2''@;'; put 'put ''XHU2MzQzXHU2M2U0XHU2MzM5XHU2MzRiXHU2MzRhXHU2MzNjXHU2MzI5XHU2MzQxXHU2MzM0XHU2MzU4XHU2MzU0XHU2MzU5XHU2MzJkXHU2MzQ3XHU2MzMzXHU2MzVhXHU2MzUxXHU2MzM4XHU2MzU3XHU2MzQwXHU2MzQ4XHU2NTRhXHU2NTQ2XHU2NWM2XHU2NWMzXHU2NWM0XHU2NWMyXHU2''@;'; put 'put ''NjRhXHU2NjVmXHU2NjQ3XHU2NjUxXHU2NzEyXHU2NzEzXHU2ODFmXHU2ODFhXHU2ODQ5XHU2ODMyXHU2ODMzXHU2ODNiXHU2ODRiXHU2ODRmXHU2ODE2XHU2ODMxXHU2ODFjXHU2ODM1XHU2ODJiXHU2ODJkXHU2ODJmXHU2ODRlXHU2ODQ0XHU2ODM0XHU2ODFkXHU2ODEyXHU2ODE0XHU2ODI2''@;'; put 'put ''XHU2ODI4XHU2ODJlXHU2ODRkXHU2ODNhXHU2ODI1XHU2ODIwXHU2YjJjXHU2YjJmXHU2YjJkXHU2YjMxXHU2YjM0XHU2YjZkXHU4MDgyXHU2Yjg4XHU2YmU2XHU2YmU0Il0sWyJkMjQwIiwiXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2XHU2''@;'; put 'put ''ZDBkXHU2ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2ZDhkXHU2ZGVmXHU2ZDdmXHU2ZDg2XHU2ZDVlXHU2ZDY3XHU2ZDYwXHU2ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2ZDE2''@;'; put 'put ''XHU2ZDgzXHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQxXHU3MGRkXHU3MGNiXHU3ZjM5XHU3MGUyXHU3MGQ3XHU3MGQyXHU3MGRlXHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNlXHU3MGUxXHU3MjQyXHU3Mjc4Il0sWyJkMmEx''@;'; put 'put ''IiwiXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZlXHU3MmY2XHU3MmYzXHU3MmZiXHU3MzAxXHU3M2QzXHU3M2Q5XHU3M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0XHU3M2RkXHU3M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4''@;'; put 'put ''XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3NTVmXHU3NWIwXHU3NWMxXHU3NWJiXHU3NWM0XHU3NWMwXHU3NWJmXHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3NzIzXHU3NzExXHU3NzE1XHU3NzE5XHU3NzFhXHU3''@;'; put 'put ''NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJmXHU3ODI4XHU3ODJlXHU3ODJiXHU3ODIxXHU3ODI5XHU3ODMzXHU3ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVjXHU3OTUzXHU3OTUyXHU3OTUxXHU3OWViXHU3OWVjXHU3OWUwXHU3OWVlXHU3OWVkXHU3OWVh''@;'; put 'put ''XHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3YThiXHU3YThjXHU3YThhXHU3YTg3XHU3YWQ4XHU3YjEwIl0sWyJkMzQwIiwiXHU3YjA0XHU3YjEzXHU3YjA1XHU3YjBmXHU3YjA4XHU3YjBhXHU3YjBlXHU3YjA5XHU3YjEyXHU3Yzg0XHU3YzkxXHU3YzhhXHU3YzhjXHU3''@;'; put 'put ''Yzg4XHU3YzhkXHU3Yzg1XHU3ZDFlXHU3ZDFkXHU3ZDExXHU3ZDBlXHU3ZDE4XHU3ZDE2XHU3ZDEzXHU3ZDFmXHU3ZDEyXHU3ZDBmXHU3ZDBjXHU3ZjVjXHU3ZjYxXHU3ZjVlXHU3ZjYwXHU3ZjVkXHU3ZjViXHU3Zjk2XHU3ZjkyXHU3ZmMzXHU3ZmMyXHU3ZmMwXHU4MDE2XHU4MDNlXHU4MDM5''@;'; put 'put ''XHU4MGZhXHU4MGYyXHU4MGY5XHU4MGY1XHU4MTAxXHU4MGZiXHU4MTAwXHU4MjAxXHU4MjJmXHU4MjI1XHU4MzMzXHU4MzJkXHU4MzQ0XHU4MzE5XHU4MzUxXHU4MzI1XHU4MzU2XHU4MzNmXHU4MzQxXHU4MzI2XHU4MzFjXHU4MzIyIl0sWyJkM2ExIiwiXHU4MzQyXHU4MzRlXHU4MzFiXHU4''@;'; put 'put ''MzJhXHU4MzA4XHU4MzNjXHU4MzRkXHU4MzE2XHU4MzI0XHU4MzIwXHU4MzM3XHU4MzJmXHU4MzI5XHU4MzQ3XHU4MzQ1XHU4MzRjXHU4MzUzXHU4MzFlXHU4MzJjXHU4MzRiXHU4MzI3XHU4MzQ4XHU4NjUzXHU4NjUyXHU4NmEyXHU4NmE4XHU4Njk2XHU4NjhkXHU4NjkxXHU4NjllXHU4Njg3''@;'; put 'put ''XHU4Njk3XHU4Njg2XHU4NjhiXHU4NjlhXHU4Njg1XHU4NmE1XHU4Njk5XHU4NmExXHU4NmE3XHU4Njk1XHU4Njk4XHU4NjhlXHU4NjlkXHU4NjkwXHU4Njk0XHU4ODQzXHU4ODQ0XHU4ODZkXHU4ODc1XHU4ODc2XHU4ODcyXHU4ODgwXHU4ODcxXHU4ODdmXHU4ODZmXHU4ODgzXHU4ODdlXHU4''@;'; put 'put ''ODc0XHU4ODdjXHU4YTEyXHU4YzQ3XHU4YzU3XHU4YzdiXHU4Y2E0XHU4Y2EzXHU4ZDc2XHU4ZDc4XHU4ZGI1XHU4ZGI3XHU4ZGI2XHU4ZWQxXHU4ZWQzXHU4ZmZlXHU4ZmY1XHU5MDAyXHU4ZmZmXHU4ZmZiXHU5MDA0XHU4ZmZjXHU4ZmY2XHU5MGQ2XHU5MGUwXHU5MGQ5XHU5MGRhXHU5MGUz''@;'; put 'put ''XHU5MGRmXHU5MGU1XHU5MGQ4XHU5MGRiXHU5MGQ3XHU5MGRjXHU5MGU0XHU5MTUwIl0sWyJkNDQwIiwiXHU5MTRlXHU5MTRmXHU5MWQ1XHU5MWUyXHU5MWRhXHU5NjVjXHU5NjVmXHU5NmJjXHU5OGUzXHU5YWRmXHU5YjJmXHU0ZTdmXHU1MDcwXHU1MDZhXHU1MDYxXHU1MDVlXHU1MDYwXHU1''@;'; put 'put ''MDUzXHU1MDRiXHU1MDVkXHU1MDcyXHU1MDQ4XHU1MDRkXHU1MDQxXHU1MDViXHU1MDRhXHU1MDYyXHU1MDE1XHU1MDQ1XHU1MDVmXHU1MDY5XHU1MDZiXHU1MDYzXHU1MDY0XHU1MDQ2XHU1MDQwXHU1MDZlXHU1MDczXHU1MDU3XHU1MDUxXHU1MWQwXHU1MjZiXHU1MjZkXHU1MjZjXHU1MjZl''@;'; put 'put ''XHU1MmQ2XHU1MmQzXHU1MzJkXHU1MzljXHU1NTc1XHU1NTc2XHU1NTNjXHU1NTRkXHU1NTUwXHU1NTM0XHU1NTJhXHU1NTUxXHU1NTYyXHU1NTM2XHU1NTM1XHU1NTMwXHU1NTUyXHU1NTQ1Il0sWyJkNGExIiwiXHU1NTBjXHU1NTMyXHU1NTY1XHU1NTRlXHU1NTM5XHU1NTQ4XHU1NTJkXHU1''@;'; put 'put ''NTNiXHU1NTQwXHU1NTRiXHU1NzBhXHU1NzA3XHU1N2ZiXHU1ODE0XHU1N2UyXHU1N2Y2XHU1N2RjXHU1N2Y0XHU1ODAwXHU1N2VkXHU1N2ZkXHU1ODA4XHU1N2Y4XHU1ODBiXHU1N2YzXHU1N2NmXHU1ODA3XHU1N2VlXHU1N2UzXHU1N2YyXHU1N2U1XHU1N2VjXHU1N2UxXHU1ODBlXHU1N2Zj''@;'; put 'put ''XHU1ODEwXHU1N2U3XHU1ODAxXHU1ODBjXHU1N2YxXHU1N2U5XHU1N2YwXHU1ODBkXHU1ODA0XHU1OTVjXHU1YTYwXHU1YTU4XHU1YTU1XHU1YTY3XHU1YTVlXHU1YTM4XHU1YTM1XHU1YTZkXHU1YTUwXHU1YTVmXHU1YTY1XHU1YTZjXHU1YTUzXHU1YTY0XHU1YTU3XHU1YTQzXHU1YTVkXHU1''@;'; put 'put ''YTUyXHU1YTQ0XHU1YTViXHU1YTQ4XHU1YThlXHU1YTNlXHU1YTRkXHU1YTM5XHU1YTRjXHU1YTcwXHU1YTY5XHU1YTQ3XHU1YTUxXHU1YTU2XHU1YTQyXHU1YTVjXHU1YjcyXHU1YjZlXHU1YmMxXHU1YmMwXHU1YzU5XHU1ZDFlXHU1ZDBiXHU1ZDFkXHU1ZDFhXHU1ZDIwXHU1ZDBjXHU1ZDI4''@;'; put 'put ''XHU1ZDBkXHU1ZDI2XHU1ZDI1XHU1ZDBmIl0sWyJkNTQwIiwiXHU1ZDMwXHU1ZDEyXHU1ZDIzXHU1ZDFmXHU1ZDJlXHU1ZTNlXHU1ZTM0XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2MDhhXHU2MDkwXHU2MDg2XHU2MGJlXHU2''@;'; put 'put ''MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNmXHU2MGU0XHU2MGQ5XHU2MGRkXHU2MGM4XHU2MGIxXHU2MGRiXHU2MGI3XHU2MGNhXHU2MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2MzgyXHU2MzdkXHU2M2JkXHU2MzllXHU2M2FkXHU2MzlkXHU2Mzk3XHU2M2Fi''@;'; put 'put ''XHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2MzZlXHU2M2FmXHU2Mzc1XHU2MzljXHU2MzZkXHU2M2FlXHU2MzdjXHU2M2E0XHU2MzNiXHU2MzlmIl0sWyJkNWExIiwiXHU2Mzc4XHU2Mzg1XHU2MzgxXHU2MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2''@;'; put 'put ''NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2ODc5XHU2ODg3XHU2ODkwXHU2ODljXHU2ODZkXHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2XHU2ODZmXHU2OGEzXHU2OGFjXHU2OGE5XHU2ODc1XHU2ODc0XHU2OGIyXHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgw''@;'; put 'put ''XHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2XHU2ODhiXHU2OGEwXHU2ODg5XHU2OGE0XHU2ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2ODhhXHU2ODdkXHU2YjM2XHU2YjMzXHU2YjM3XHU2YjM4XHU2YjkxXHU2YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2''@;'; put 'put ''ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2ZGUyXHU2ZGI3XHU2ZGY2XHU2ZGQ0XHU2ZTAwXHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2XHU2ZGJlXHU2ZGU1XHU2ZGRjXHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2ZGNhXHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5''@;'; put 'put ''Il0sWyJkNjQwIiwiXHU2ZGQwXHU2ZGYyXHU2ZGQzXHU2ZGZkXHU2ZGQ3XHU2ZGNkXHU2ZGUzXHU2ZGJiXHU3MGZhXHU3MTBkXHU3MGY3XHU3MTE3XHU3MGY0XHU3MTBjXHU3MGYwXHU3MTA0XHU3MGYzXHU3MTEwXHU3MGZjXHU3MGZmXHU3MTA2XHU3MTEzXHU3MTAwXHU3MGY4XHU3MGY2XHU3''@;'; put 'put ''MTBiXHU3MTAyXHU3MTBlXHU3MjdlXHU3MjdiXHU3MjdjXHU3MjdmXHU3MzFkXHU3MzE3XHU3MzA3XHU3MzExXHU3MzE4XHU3MzBhXHU3MzA4XHU3MmZmXHU3MzBmXHU3MzFlXHU3Mzg4XHU3M2Y2XHU3M2Y4XHU3M2Y1XHU3NDA0XHU3NDAxXHU3M2ZkXHU3NDA3XHU3NDAwXHU3M2ZhXHU3M2Zj''@;'; put 'put ''XHU3M2ZmXHU3NDBjXHU3NDBiXHU3M2Y0XHU3NDA4XHU3NTY0XHU3NTYzXHU3NWNlXHU3NWQyXHU3NWNmIl0sWyJkNmExIiwiXHU3NWNiXHU3NWNjXHU3NWQxXHU3NWQwXHU3NjhmXHU3Njg5XHU3NmQzXHU3NzM5XHU3NzJmXHU3NzJkXHU3NzMxXHU3NzMyXHU3NzM0XHU3NzMzXHU3NzNkXHU3''@;'; put 'put ''NzI1XHU3NzNiXHU3NzM1XHU3ODQ4XHU3ODUyXHU3ODQ5XHU3ODRkXHU3ODRhXHU3ODRjXHU3ODI2XHU3ODQ1XHU3ODUwXHU3OTY0XHU3OTY3XHU3OTY5XHU3OTZhXHU3OTYzXHU3OTZiXHU3OTYxXHU3OWJiXHU3OWZhXHU3OWY4XHU3OWY2XHU3OWY3XHU3YThmXHU3YTk0XHU3YTkwXHU3YjM1''@;'; put 'put ''XHU3YjQ3XHU3YjM0XHU3YjI1XHU3YjMwXHU3YjIyXHU3YjI0XHU3YjMzXHU3YjE4XHU3YjJhXHU3YjFkXHU3YjMxXHU3YjJiXHU3YjJkXHU3YjJmXHU3YjMyXHU3YjM4XHU3YjFhXHU3YjIzXHU3Yzk0XHU3Yzk4XHU3Yzk2XHU3Y2EzXHU3ZDM1XHU3ZDNkXHU3ZDM4XHU3ZDM2XHU3ZDNhXHU3''@;'; put 'put ''ZDQ1XHU3ZDJjXHU3ZDI5XHU3ZDQxXHU3ZDQ3XHU3ZDNlXHU3ZDNmXHU3ZDRhXHU3ZDNiXHU3ZDI4XHU3ZjYzXHU3Zjk1XHU3ZjljXHU3ZjlkXHU3ZjliXHU3ZmNhXHU3ZmNiXHU3ZmNkXHU3ZmQwXHU3ZmQxXHU3ZmM3XHU3ZmNmXHU3ZmM5XHU4MDFmIl0sWyJkNzQwIiwiXHU4MDFlXHU4MDFi''@;'; put 'put ''XHU4MDQ3XHU4MDQzXHU4MDQ4XHU4MTE4XHU4MTI1XHU4MTE5XHU4MTFiXHU4MTJkXHU4MTFmXHU4MTJjXHU4MTFlXHU4MTIxXHU4MTE1XHU4MTI3XHU4MTFkXHU4MTIyXHU4MjExXHU4MjM4XHU4MjMzXHU4MjNhXHU4MjM0XHU4MjMyXHU4Mjc0XHU4MzkwXHU4M2EzXHU4M2E4XHU4MzhkXHU4''@;'; put 'put ''MzdhXHU4MzczXHU4M2E0XHU4Mzc0XHU4MzhmXHU4MzgxXHU4Mzk1XHU4Mzk5XHU4Mzc1XHU4Mzk0XHU4M2E5XHU4MzdkXHU4MzgzXHU4MzhjXHU4MzlkXHU4MzliXHU4M2FhXHU4MzhiXHU4MzdlXHU4M2E1XHU4M2FmXHU4Mzg4XHU4Mzk3XHU4M2IwXHU4MzdmXHU4M2E2XHU4Mzg3XHU4M2Fl''@;'; put 'put ''XHU4Mzc2XHU4MzlhXHU4NjU5XHU4NjU2XHU4NmJmXHU4NmI3Il0sWyJkN2ExIiwiXHU4NmMyXHU4NmMxXHU4NmM1XHU4NmJhXHU4NmIwXHU4NmM4XHU4NmI5XHU4NmIzXHU4NmI4XHU4NmNjXHU4NmI0XHU4NmJiXHU4NmJjXHU4NmMzXHU4NmJkXHU4NmJlXHU4ODUyXHU4ODg5XHU4ODk1XHU4''@;'; put 'put ''OGE4XHU4OGEyXHU4OGFhXHU4ODlhXHU4ODkxXHU4OGExXHU4ODlmXHU4ODk4XHU4OGE3XHU4ODk5XHU4ODliXHU4ODk3XHU4OGE0XHU4OGFjXHU4ODhjXHU4ODkzXHU4ODhlXHU4OTgyXHU4OWQ2XHU4OWQ5XHU4OWQ1XHU4YTMwXHU4YTI3XHU4YTJjXHU4YTFlXHU4YzM5XHU4YzNiXHU4YzVj''@;'; put 'put ''XHU4YzVkXHU4YzdkXHU4Y2E1XHU4ZDdkXHU4ZDdiXHU4ZDc5XHU4ZGJjXHU4ZGMyXHU4ZGI5XHU4ZGJmXHU4ZGMxXHU4ZWQ4XHU4ZWRlXHU4ZWRkXHU4ZWRjXHU4ZWQ3XHU4ZWUwXHU4ZWUxXHU5MDI0XHU5MDBiXHU5MDExXHU5MDFjXHU5MDBjXHU5MDIxXHU5MGVmXHU5MGVhXHU5MGYwXHU5''@;'; put 'put ''MGY0XHU5MGYyXHU5MGYzXHU5MGQ0XHU5MGViXHU5MGVjXHU5MGU5XHU5MTU2XHU5MTU4XHU5MTVhXHU5MTUzXHU5MTU1XHU5MWVjXHU5MWY0XHU5MWYxXHU5MWYzXHU5MWY4XHU5MWU0XHU5MWY5XHU5MWVhIl0sWyJkODQwIiwiXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2''@;'; put 'put ''XHU5NTg4XHU5NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5NjZmXHU5NmJmXHU5NzZhXHU5ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1MDk1XHU1MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1MDgzXHU1MDhjXHU1MDhlXHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1''@;'; put 'put ''MWQ0XHU1MzEyXHU1MzExXHU1M2E0XHU1M2E3XHU1NTkxXHU1NWE4XHU1NWE1XHU1NWFkXHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkzXHU1NTg4XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEzXHU1NTkyXHU1NWE0XHU1NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBj''@;'; put 'put ''XHU1ODI5XHU1ODM3Il0sWyJkOGExIiwiXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIzXHU1ODI4XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1ODFjXHU1ODFiXHU1ODMzXHU1ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1YWFmXHU1YTk0XHU1YTlmXHU1''@;'; put 'put ''YTdhXHU1YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1YTk1XHU1YWFlXHU1YTM3XHU1YTg0XHU1YThhXHU1YTk3XHU1YTgzXHU1YThiXHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVhXHU1YmNkXHU1YmNiXHU1YmQ0''@;'; put 'put ''XHU1YmQxXHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZiXHU1ZDQxXHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1ZDUxXHU1ZDRlXHU1ZDU1XHU1ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1ZDM4XHU1ZDNjXHU1ZDMyXHU1''@;'; put 'put ''ZDM2XHU1ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1ZmFiXHU2MGM5XHU2MGI5XHU2MGNjXHU2MGUyXHU2MGNlXHU2MGM0XHU2MTE0Il0sWyJkOTQwIiwiXHU2MGYyXHU2MTBhXHU2MTE2XHU2MTA1XHU2MGY1XHU2MTEzXHU2MGY4XHU2MGZjXHU2MGZlXHU2MGMx''@;'; put 'put ''XHU2MTAzXHU2MTE4XHU2MTFkXHU2MTEwXHU2MGZmXHU2MTA0XHU2MTBiXHU2MjRhXHU2Mzk0XHU2M2IxXHU2M2IwXHU2M2NlXHU2M2U1XHU2M2U4XHU2M2VmXHU2M2MzXHU2NDlkXHU2M2YzXHU2M2NhXHU2M2UwXHU2M2Y2XHU2M2Q1XHU2M2YyXHU2M2Y1XHU2NDYxXHU2M2RmXHU2M2JlXHU2''@;'; put 'put ''M2RkXHU2M2RjXHU2M2M0XHU2M2Q4XHU2M2QzXHU2M2MyXHU2M2M3XHU2M2NjXHU2M2NiXHU2M2M4XHU2M2YwXHU2M2Q3XHU2M2Q5XHU2NTMyXHU2NTY3XHU2NTZhXHU2NTY0XHU2NTVjXHU2NTY4XHU2NTY1XHU2NThjXHU2NTlkXHU2NTllXHU2NWFlXHU2NWQwXHU2NWQyIl0sWyJkOWExIiwi''@;'; put 'put ''XHU2NjdjXHU2NjZjXHU2NjdiXHU2NjgwXHU2NjcxXHU2Njc5XHU2NjZhXHU2NjcyXHU2NzAxXHU2OTBjXHU2OGQzXHU2OTA0XHU2OGRjXHU2OTJhXHU2OGVjXHU2OGVhXHU2OGYxXHU2OTBmXHU2OGQ2XHU2OGY3XHU2OGViXHU2OGU0XHU2OGY2XHU2OTEzXHU2OTEwXHU2OGYzXHU2OGUxXHU2''@;'; put 'put ''OTA3XHU2OGNjXHU2OTA4XHU2OTcwXHU2OGI0XHU2OTExXHU2OGVmXHU2OGM2XHU2OTE0XHU2OGY4XHU2OGQwXHU2OGZkXHU2OGZjXHU2OGU4XHU2OTBiXHU2OTBhXHU2OTE3XHU2OGNlXHU2OGM4XHU2OGRkXHU2OGRlXHU2OGU2XHU2OGY0XHU2OGQxXHU2OTA2XHU2OGQ0XHU2OGU5XHU2OTE1''@;'; put 'put ''XHU2OTI1XHU2OGM3XHU2YjM5XHU2YjNiXHU2YjNmXHU2YjNjXHU2Yjk0XHU2Yjk3XHU2Yjk5XHU2Yjk1XHU2YmJkXHU2YmYwXHU2YmYyXHU2YmYzXHU2YzMwXHU2ZGZjXHU2ZTQ2XHU2ZTQ3XHU2ZTFmXHU2ZTQ5XHU2ZTg4XHU2ZTNjXHU2ZTNkXHU2ZTQ1XHU2ZTYyXHU2ZTJiXHU2ZTNmXHU2''@;'; put 'put ''ZTQxXHU2ZTVkXHU2ZTczXHU2ZTFjXHU2ZTMzXHU2ZTRiXHU2ZTQwXHU2ZTUxXHU2ZTNiXHU2ZTAzXHU2ZTJlXHU2ZTVlIl0sWyJkYTQwIiwiXHU2ZTY4XHU2ZTVjXHU2ZTYxXHU2ZTMxXHU2ZTI4XHU2ZTYwXHU2ZTcxXHU2ZTZiXHU2ZTM5XHU2ZTIyXHU2ZTMwXHU2ZTUzXHU2ZTY1XHU2ZTI3''@;'; put 'put ''XHU2ZTc4XHU2ZTY0XHU2ZTc3XHU2ZTU1XHU2ZTc5XHU2ZTUyXHU2ZTY2XHU2ZTM1XHU2ZTM2XHU2ZTVhXHU3MTIwXHU3MTFlXHU3MTJmXHU3MGZiXHU3MTJlXHU3MTMxXHU3MTIzXHU3MTI1XHU3MTIyXHU3MTMyXHU3MTFmXHU3MTI4XHU3MTNhXHU3MTFiXHU3MjRiXHU3MjVhXHU3Mjg4XHU3''@;'; put 'put ''Mjg5XHU3Mjg2XHU3Mjg1XHU3MjhiXHU3MzEyXHU3MzBiXHU3MzMwXHU3MzIyXHU3MzMxXHU3MzMzXHU3MzI3XHU3MzMyXHU3MzJkXHU3MzI2XHU3MzIzXHU3MzM1XHU3MzBjXHU3NDJlXHU3NDJjXHU3NDMwXHU3NDJiXHU3NDE2Il0sWyJkYWExIiwiXHU3NDFhXHU3NDIxXHU3NDJkXHU3NDMx''@;'; put 'put ''XHU3NDI0XHU3NDIzXHU3NDFkXHU3NDI5XHU3NDIwXHU3NDMyXHU3NGZiXHU3NTJmXHU3NTZmXHU3NTZjXHU3NWU3XHU3NWRhXHU3NWUxXHU3NWU2XHU3NWRkXHU3NWRmXHU3NWU0XHU3NWQ3XHU3Njk1XHU3NjkyXHU3NmRhXHU3NzQ2XHU3NzQ3XHU3NzQ0XHU3NzRkXHU3NzQ1XHU3NzRhXHU3''@;'; put 'put ''NzRlXHU3NzRiXHU3NzRjXHU3N2RlXHU3N2VjXHU3ODYwXHU3ODY0XHU3ODY1XHU3ODVjXHU3ODZkXHU3ODcxXHU3ODZhXHU3ODZlXHU3ODcwXHU3ODY5XHU3ODY4XHU3ODVlXHU3ODYyXHU3OTc0XHU3OTczXHU3OTcyXHU3OTcwXHU3YTAyXHU3YTBhXHU3YTAzXHU3YTBjXHU3YTA0XHU3YTk5''@;'; put 'put ''XHU3YWU2XHU3YWU0XHU3YjRhXHU3YjNiXHU3YjQ0XHU3YjQ4XHU3YjRjXHU3YjRlXHU3YjQwXHU3YjU4XHU3YjQ1XHU3Y2EyXHU3YzllXHU3Y2E4XHU3Y2ExXHU3ZDU4XHU3ZDZmXHU3ZDYzXHU3ZDUzXHU3ZDU2XHU3ZDY3XHU3ZDZhXHU3ZDRmXHU3ZDZkXHU3ZDVjXHU3ZDZiXHU3ZDUyXHU3''@;'; put 'put ''ZDU0XHU3ZDY5XHU3ZDUxXHU3ZDVmXHU3ZDRlXHU3ZjNlXHU3ZjNmXHU3ZjY1Il0sWyJkYjQwIiwiXHU3ZjY2XHU3ZmEyXHU3ZmEwXHU3ZmExXHU3ZmQ3XHU4MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUyXHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRkXHU4MTNh''@;'; put 'put ''XHU4MWU2XHU4MWVlXHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNkXHU4MjNmXHU4Mjc1XHU4MzNiXHU4M2NmXHU4M2Y5XHU4NDIzXHU4M2MwXHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4M2JmXHU4''@;'; put 'put ''NDAxXHU4M2RkXHU4M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4M2Q2XHU4M2Y1XHU4M2M5XHU4NDA5XHU4NDBmXHU4M2RlXHU4NDExXHU4NDA2XHU4M2MyXHU4M2YzIl0sWyJkYmExIiwiXHU4M2Q1XHU4M2ZhXHU4M2M3XHU4M2QxXHU4M2VhXHU4NDEzXHU4M2MzXHU4M2Vj''@;'; put 'put ''XHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFiXHU4M2RiXHU4M2ZlXHU4NmQ4XHU4NmUyXHU4NmU2XHU4NmQzXHU4NmUzXHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRjXHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4XHU4NmQxXHU4ODQ4XHU4ODU2XHU4ODU1XHU4OGJhXHU4''@;'; put 'put ''OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4OGJjXHU4OGI3XHU4OGJkXHU4OGIyXHU4OTAxXHU4OGM5XHU4OTk1XHU4OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4YTQwXHU4YTU3XHU4YTU4XHU4YTQ0XHU4YTQ1XHU4YTUy''@;'; put 'put ''XHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVmXHU4YzgxXHU4YzgwXHU4Y2JhXHU4Y2JlXHU4Y2IwXHU4Y2I5XHU4Y2I1XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQzXHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRjXHU4ZGNmXHU4ZGQ1XHU4ZGQ5XHU4ZGM4XHU4ZGQ3XHU4''@;'; put 'put ''ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhIl0sWyJkYzQwIiwiXHU4ZWY5XHU4ZWU2XHU4ZWVlXHU4ZWU1XHU4ZWY1XHU4ZWU3XHU4ZWU4XHU4ZWY2XHU4ZWViXHU4ZWYxXHU4ZWVjXHU4ZWY0XHU4ZWU5XHU5MDJkXHU5MDM0XHU5MDJmXHU5MTA2XHU5MTJjXHU5MTA0XHU5MGZmXHU5MGZjXHU5MTA4''@;'; put 'put ''XHU5MGY5XHU5MGZiXHU5MTAxXHU5MTAwXHU5MTA3XHU5MTA1XHU5MTAzXHU5MTYxXHU5MTY0XHU5MTVmXHU5MTYyXHU5MTYwXHU5MjAxXHU5MjBhXHU5MjI1XHU5MjAzXHU5MjFhXHU5MjI2XHU5MjBmXHU5MjBjXHU5MjAwXHU5MjEyXHU5MWZmXHU5MWZkXHU5MjA2XHU5MjA0XHU5MjI3XHU5''@;'; put 'put ''MjAyXHU5MjFjXHU5MjI0XHU5MjE5XHU5MjE3XHU5MjA1XHU5MjE2XHU5NTdiXHU5NThkXHU5NThjXHU5NTkwXHU5Njg3XHU5NjdlXHU5Njg4Il0sWyJkY2ExIiwiXHU5Njg5XHU5NjgzXHU5NjgwXHU5NmMyXHU5NmM4XHU5NmMzXHU5NmYxXHU5NmYwXHU5NzZjXHU5NzcwXHU5NzZlXHU5ODA3''@;'; put 'put ''XHU5OGE5XHU5OGViXHU5Y2U2XHU5ZWY5XHU0ZTgzXHU0ZTg0XHU0ZWI2XHU1MGJkXHU1MGJmXHU1MGM2XHU1MGFlXHU1MGM0XHU1MGNhXHU1MGI0XHU1MGM4XHU1MGMyXHU1MGIwXHU1MGMxXHU1MGJhXHU1MGIxXHU1MGNiXHU1MGM5XHU1MGI2XHU1MGI4XHU1MWQ3XHU1MjdhXHU1Mjc4XHU1''@;'; put 'put ''MjdiXHU1MjdjXHU1NWMzXHU1NWRiXHU1NWNjXHU1NWQwXHU1NWNiXHU1NWNhXHU1NWRkXHU1NWMwXHU1NWQ0XHU1NWM0XHU1NWU5XHU1NWJmXHU1NWQyXHU1NThkXHU1NWNmXHU1NWQ1XHU1NWUyXHU1NWQ2XHU1NWM4XHU1NWYyXHU1NWNkXHU1NWQ5XHU1NWMyXHU1NzE0XHU1ODUzXHU1ODY4''@;'; put 'put ''XHU1ODY0XHU1ODRmXHU1ODRkXHU1ODQ5XHU1ODZmXHU1ODU1XHU1ODRlXHU1ODVkXHU1ODU5XHU1ODY1XHU1ODViXHU1ODNkXHU1ODYzXHU1ODcxXHU1OGZjXHU1YWM3XHU1YWM0XHU1YWNiXHU1YWJhXHU1YWI4XHU1YWIxXHU1YWI1XHU1YWIwXHU1YWJmXHU1YWM4XHU1YWJiXHU1YWM2Il0s''@;'; put 'put ''WyJkZDQwIiwiXHU1YWI3XHU1YWMwXHU1YWNhXHU1YWI0XHU1YWI2XHU1YWNkXHU1YWI5XHU1YTkwXHU1YmQ2XHU1YmQ4XHU1YmQ5XHU1YzFmXHU1YzMzXHU1ZDcxXHU1ZDYzXHU1ZDRhXHU1ZDY1XHU1ZDcyXHU1ZDZjXHU1ZDVlXHU1ZDY4XHU1ZDY3XHU1ZDYyXHU1ZGYwXHU1ZTRmXHU1ZTRl''@;'; put 'put ''XHU1ZTRhXHU1ZTRkXHU1ZTRiXHU1ZWM1XHU1ZWNjXHU1ZWM2XHU1ZWNiXHU1ZWM3XHU1ZjQwXHU1ZmFmXHU1ZmFkXHU2MGY3XHU2MTQ5XHU2MTRhXHU2MTJiXHU2MTQ1XHU2MTM2XHU2MTMyXHU2MTJlXHU2MTQ2XHU2MTJmXHU2MTRmXHU2MTI5XHU2MTQwXHU2MjIwXHU5MTY4XHU2MjIzXHU2''@;'; put 'put ''MjI1XHU2MjI0XHU2M2M1XHU2M2YxXHU2M2ViXHU2NDEwXHU2NDEyXHU2NDA5XHU2NDIwXHU2NDI0Il0sWyJkZGExIiwiXHU2NDMzXHU2NDQzXHU2NDFmXHU2NDE1XHU2NDE4XHU2NDM5XHU2NDM3XHU2NDIyXHU2NDIzXHU2NDBjXHU2NDI2XHU2NDMwXHU2NDI4XHU2NDQxXHU2NDM1XHU2NDJm''@;'; put 'put ''XHU2NDBhXHU2NDFhXHU2NDQwXHU2NDI1XHU2NDI3XHU2NDBiXHU2M2U3XHU2NDFiXHU2NDJlXHU2NDIxXHU2NDBlXHU2NTZmXHU2NTkyXHU2NWQzXHU2Njg2XHU2NjhjXHU2Njk1XHU2NjkwXHU2NjhiXHU2NjhhXHU2Njk5XHU2Njk0XHU2Njc4XHU2NzIwXHU2OTY2XHU2OTVmXHU2OTM4XHU2''@;'; put 'put ''OTRlXHU2OTYyXHU2OTcxXHU2OTNmXHU2OTQ1XHU2OTZhXHU2OTM5XHU2OTQyXHU2OTU3XHU2OTU5XHU2OTdhXHU2OTQ4XHU2OTQ5XHU2OTM1XHU2OTZjXHU2OTMzXHU2OTNkXHU2OTY1XHU2OGYwXHU2OTc4XHU2OTM0XHU2OTY5XHU2OTQwXHU2OTZmXHU2OTQ0XHU2OTc2XHU2OTU4XHU2OTQx''@;'; put 'put ''XHU2OTc0XHU2OTRjXHU2OTNiXHU2OTRiXHU2OTM3XHU2OTVjXHU2OTRmXHU2OTUxXHU2OTMyXHU2OTUyXHU2OTJmXHU2OTdiXHU2OTNjXHU2YjQ2XHU2YjQ1XHU2YjQzXHU2YjQyXHU2YjQ4XHU2YjQxXHU2YjliXHVmYTBkXHU2YmZiXHU2YmZjIl0sWyJkZTQwIiwiXHU2YmY5XHU2YmY3XHU2''@;'; put 'put ''YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2ZTk0XHU2ZWEwXHU2ZWIxXHU2ZWI5XHU2ZWM2XHU2ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIwXHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIyXHU2ZWJlXHU2ZWMzXHU2ZWRjXHU2ZWQ4''@;'; put 'put ''XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThkXHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIzXHU2ZWQwXHU2ZWNhXHU2ZTk3XHU2ZWFlXHU2ZWEzXHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3MTZhXHU3MTYxXHU3MTQyXHU3MTU4XHU3''@;'; put 'put ''MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3MTUwXHU3MTUzIl0sWyJkZWExIiwiXHU3MTQ0XHU3MTRkXHU3MTVhXHU3MjRmXHU3MjhkXHU3MjhjXHU3MjkxXHU3MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3MzNiXHU3MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3NDUy''@;'; put 'put ''XHU3NDUxXHU3NDU3XHU3NDQwXHU3NDRmXHU3NDUwXHU3NDRlXHU3NDQyXHU3NDQ2XHU3NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3NGZlXHU3NGZkXHU3NTFkXHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVmXHU3NjBmXHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEwXHU3''@;'; put 'put ''NWZiXHU3NWY2XHU3NWVkXHU3NWY1XHU3NWZkXHU3Njk5XHU3NmI1XHU3NmRkXHU3NzU1XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2XHU3NzVhXHU3NzY5XHU3NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3N2UwXHU3ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3ODg2''@;'; put 'put ''XHU3OGExXHU3ODgzXHU3ODc5XHU3ODk5XHU3ODgwXHU3ODk2XHU3ODdiXHU3OTdjXHU3OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3YTE4XHU3YTE5XHU3YTEyXHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEzIl0sWyJkZjQwIiwiXHU3YTFiXHU3YTEwXHU3YWEzXHU3YWEyXHU3YTllXHU3YWViXHU3''@;'; put 'put ''YjY2XHU3YjY0XHU3YjZkXHU3Yjc0XHU3YjY5XHU3YjcyXHU3YjY1XHU3YjczXHU3YjcxXHU3YjcwXHU3YjYxXHU3Yjc4XHU3Yjc2XHU3YjYzXHU3Y2IyXHU3Y2I0XHU3Y2FmXHU3ZDg4XHU3ZDg2XHU3ZDgwXHU3ZDhkXHU3ZDdmXHU3ZDg1XHU3ZDdhXHU3ZDhlXHU3ZDdiXHU3ZDgzXHU3ZDdj''@;'; put 'put ''XHU3ZDhjXHU3ZDk0XHU3ZDg0XHU3ZDdkXHU3ZDkyXHU3ZjZkXHU3ZjZiXHU3ZjY3XHU3ZjY4XHU3ZjZjXHU3ZmE2XHU3ZmE1XHU3ZmE3XHU3ZmRiXHU3ZmRjXHU4MDIxXHU4MTY0XHU4MTYwXHU4MTc3XHU4MTVjXHU4MTY5XHU4MTViXHU4MTYyXHU4MTcyXHU2NzIxXHU4MTVlXHU4MTc2XHU4''@;'; put 'put ''MTY3XHU4MTZmIl0sWyJkZmExIiwiXHU4MTQ0XHU4MTYxXHU4MjFkXHU4MjQ5XHU4MjQ0XHU4MjQwXHU4MjQyXHU4MjQ1XHU4NGYxXHU4NDNmXHU4NDU2XHU4NDc2XHU4NDc5XHU4NDhmXHU4NDhkXHU4NDY1XHU4NDUxXHU4NDQwXHU4NDg2XHU4NDY3XHU4NDMwXHU4NDRkXHU4NDdkXHU4NDVh''@;'; put 'put ''XHU4NDU5XHU4NDc0XHU4NDczXHU4NDVkXHU4NTA3XHU4NDVlXHU4NDM3XHU4NDNhXHU4NDM0XHU4NDdhXHU4NDQzXHU4NDc4XHU4NDMyXHU4NDQ1XHU4NDI5XHU4M2Q5XHU4NDRiXHU4NDJmXHU4NDQyXHU4NDJkXHU4NDVmXHU4NDcwXHU4NDM5XHU4NDRlXHU4NDRjXHU4NDUyXHU4NDZmXHU4''@;'; put 'put ''NGM1XHU4NDhlXHU4NDNiXHU4NDQ3XHU4NDM2XHU4NDMzXHU4NDY4XHU4NDdlXHU4NDQ0XHU4NDJiXHU4NDYwXHU4NDU0XHU4NDZlXHU4NDUwXHU4NzBiXHU4NzA0XHU4NmY3XHU4NzBjXHU4NmZhXHU4NmQ2XHU4NmY1XHU4NzRkXHU4NmY4XHU4NzBlXHU4NzA5XHU4NzAxXHU4NmY2XHU4NzBk''@;'; put 'put ''XHU4NzA1XHU4OGQ2XHU4OGNiXHU4OGNkXHU4OGNlXHU4OGRlXHU4OGRiXHU4OGRhXHU4OGNjXHU4OGQwXHU4OTg1XHU4OTliXHU4OWRmXHU4OWU1XHU4OWU0Il0sWyJlMDQwIiwiXHU4OWUxXHU4OWUwXHU4OWUyXHU4OWRjXHU4OWU2XHU4YTc2XHU4YTg2XHU4YTdmXHU4YTYxXHU4YTNmXHU4''@;'; put 'put ''YTc3XHU4YTgyXHU4YTg0XHU4YTc1XHU4YTgzXHU4YTgxXHU4YTc0XHU4YTdhXHU4YzNjXHU4YzRiXHU4YzRhXHU4YzY1XHU4YzY0XHU4YzY2XHU4Yzg2XHU4Yzg0XHU4Yzg1XHU4Y2NjXHU4ZDY4XHU4ZDY5XHU4ZDkxXHU4ZDhjXHU4ZDhlXHU4ZDhmXHU4ZDhkXHU4ZDkzXHU4ZDk0XHU4ZDkw''@;'; put 'put ''XHU4ZDkyXHU4ZGYwXHU4ZGUwXHU4ZGVjXHU4ZGYxXHU4ZGVlXHU4ZGQwXHU4ZGU5XHU4ZGUzXHU4ZGUyXHU4ZGU3XHU4ZGYyXHU4ZGViXHU4ZGY0XHU4ZjA2XHU4ZWZmXHU4ZjAxXHU4ZjAwXHU4ZjA1XHU4ZjA3XHU4ZjA4XHU4ZjAyXHU4ZjBiXHU5MDUyXHU5MDNmIl0sWyJlMGExIiwiXHU5''@;'; put 'put ''MDQ0XHU5MDQ5XHU5MDNkXHU5MTEwXHU5MTBkXHU5MTBmXHU5MTExXHU5MTE2XHU5MTE0XHU5MTBiXHU5MTBlXHU5MTZlXHU5MTZmXHU5MjQ4XHU5MjUyXHU5MjMwXHU5MjNhXHU5MjY2XHU5MjMzXHU5MjY1XHU5MjVlXHU5MjgzXHU5MjJlXHU5MjRhXHU5MjQ2XHU5MjZkXHU5MjZjXHU5MjRm''@;'; put 'put ''XHU5MjYwXHU5MjY3XHU5MjZmXHU5MjM2XHU5MjYxXHU5MjcwXHU5MjMxXHU5MjU0XHU5MjYzXHU5MjUwXHU5MjcyXHU5MjRlXHU5MjUzXHU5MjRjXHU5MjU2XHU5MjMyXHU5NTlmXHU5NTljXHU5NTllXHU5NTliXHU5NjkyXHU5NjkzXHU5NjkxXHU5Njk3XHU5NmNlXHU5NmZhXHU5NmZkXHU5''@;'; put 'put ''NmY4XHU5NmY1XHU5NzczXHU5Nzc3XHU5Nzc4XHU5NzcyXHU5ODBmXHU5ODBkXHU5ODBlXHU5OGFjXHU5OGY2XHU5OGY5XHU5OWFmXHU5OWIyXHU5OWIwXHU5OWI1XHU5YWFkXHU5YWFiXHU5YjViXHU5Y2VhXHU5Y2VkXHU5Y2U3XHU5ZTgwXHU5ZWZkXHU1MGU2XHU1MGQ0XHU1MGQ3XHU1MGU4''@;'; put 'put ''XHU1MGYzXHU1MGRiXHU1MGVhXHU1MGRkXHU1MGU0XHU1MGQzXHU1MGVjXHU1MGYwXHU1MGVmXHU1MGUzXHU1MGUwIl0sWyJlMTQwIiwiXHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1''@;'; put 'put ''NjAxXHU1NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1NjA0XHU1NWZmXHU1NWY5XHU1ODg5XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2XHU1ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZl''@;'; put 'put ''XHU1OTZiXHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1XHU1YWVhXHU1YWRhXHU1YWVkXHU1YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1YWRiXHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUwIl0sWyJlMWExIiwiXHU1YmUzXHU1YzYzXHU1ZDgyXHU1ZDgwXHU1''@;'; put 'put ''ZDdkXHU1ZDg2XHU1ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1ZDdlXHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdmXHU1ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZm''@;'; put 'put ''XHU1ZmI2XHU2MTJjXHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUyXHU2MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2MTc0XHU2MTU0XHU2MTdhXHU2MTViXHU2MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJiXHU2NDJiXHU2NDRkXHU2NDViXHU2''@;'; put 'put ''NDVkXHU2NDc0XHU2NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2NGE2XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVjXHU2NDRiXHU2NDUzXHU2NDYwXHU2NDUwXHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2NTczXHU2NWEwXHU2NmExXHU2NmEw''@;'; put 'put ''XHU2NjlmXHU2NzA1XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5Il0sWyJlMjQwIiwiXHU2OWEwXHU2OWNlXHU2OTk2XHU2OWIwXHU2OWFjXHU2OWJjXHU2OTkxXHU2OTk5XHU2OThlXHU2OWE3XHU2OThkXHU2OWE5XHU2OWJlXHU2OWFmXHU2OWJmXHU2OWM0XHU2OWJkXHU2OWE0XHU2''@;'; put 'put ''OWQ0XHU2OWI5XHU2OWNhXHU2OTlhXHU2OWNmXHU2OWIzXHU2OTkzXHU2OWFhXHU2OWExXHU2OTllXHU2OWQ5XHU2OTk3XHU2OTkwXHU2OWMyXHU2OWI1XHU2OWE1XHU2OWM2XHU2YjRhXHU2YjRkXHU2YjRiXHU2YjllXHU2YjlmXHU2YmEwXHU2YmMzXHU2YmM0XHU2YmZlXHU2ZWNlXHU2ZWY1''@;'; put 'put ''XHU2ZWYxXHU2ZjAzXHU2ZjI1XHU2ZWY4XHU2ZjM3XHU2ZWZiXHU2ZjJlXHU2ZjA5XHU2ZjRlXHU2ZjE5XHU2ZjFhXHU2ZjI3XHU2ZjE4XHU2ZjNiXHU2ZjEyXHU2ZWVkXHU2ZjBhIl0sWyJlMmExIiwiXHU2ZjM2XHU2ZjczXHU2ZWY5XHU2ZWVlXHU2ZjJkXHU2ZjQwXHU2ZjMwXHU2ZjNjXHU2''@;'; put 'put ''ZjM1XHU2ZWViXHU2ZjA3XHU2ZjBlXHU2ZjQzXHU2ZjA1XHU2ZWZkXHU2ZWY2XHU2ZjM5XHU2ZjFjXHU2ZWZjXHU2ZjNhXHU2ZjFmXHU2ZjBkXHU2ZjFlXHU2ZjA4XHU2ZjIxXHU3MTg3XHU3MTkwXHU3MTg5XHU3MTgwXHU3MTg1XHU3MTgyXHU3MThmXHU3MTdiXHU3MTg2XHU3MTgxXHU3MTk3''@;'; put 'put ''XHU3MjQ0XHU3MjUzXHU3Mjk3XHU3Mjk1XHU3MjkzXHU3MzQzXHU3MzRkXHU3MzUxXHU3MzRjXHU3NDYyXHU3NDczXHU3NDcxXHU3NDc1XHU3NDcyXHU3NDY3XHU3NDZlXHU3NTAwXHU3NTAyXHU3NTAzXHU3NTdkXHU3NTkwXHU3NjE2XHU3NjA4XHU3NjBjXHU3NjE1XHU3NjExXHU3NjBhXHU3''@;'; put 'put ''NjE0XHU3NmI4XHU3NzgxXHU3NzdjXHU3Nzg1XHU3NzgyXHU3NzZlXHU3NzgwXHU3NzZmXHU3NzdlXHU3NzgzXHU3OGIyXHU3OGFhXHU3OGI0XHU3OGFkXHU3OGE4XHU3ODdlXHU3OGFiXHU3ODllXHU3OGE1XHU3OGEwXHU3OGFjXHU3OGEyXHU3OGE0XHU3OTk4XHU3OThhXHU3OThiXHU3OTk2''@;'; put 'put ''XHU3OTk1XHU3OTk0XHU3OTkzIl0sWyJlMzQwIiwiXHU3OTk3XHU3OTg4XHU3OTkyXHU3OTkwXHU3YTJiXHU3YTRhXHU3YTMwXHU3YTJmXHU3YTI4XHU3YTI2XHU3YWE4XHU3YWFiXHU3YWFjXHU3YWVlXHU3Yjg4XHU3YjljXHU3YjhhXHU3YjkxXHU3YjkwXHU3Yjk2XHU3YjhkXHU3YjhjXHU3''@;'; put 'put ''YjliXHU3YjhlXHU3Yjg1XHU3Yjk4XHU1Mjg0XHU3Yjk5XHU3YmE0XHU3YjgyXHU3Y2JiXHU3Y2JmXHU3Y2JjXHU3Y2JhXHU3ZGE3XHU3ZGI3XHU3ZGMyXHU3ZGEzXHU3ZGFhXHU3ZGMxXHU3ZGMwXHU3ZGM1XHU3ZDlkXHU3ZGNlXHU3ZGM0XHU3ZGM2XHU3ZGNiXHU3ZGNjXHU3ZGFmXHU3ZGI5''@;'; put 'put ''XHU3ZDk2XHU3ZGJjXHU3ZDlmXHU3ZGE2XHU3ZGFlXHU3ZGE5XHU3ZGExXHU3ZGM5XHU3ZjczXHU3ZmUyXHU3ZmUzXHU3ZmU1XHU3ZmRlIl0sWyJlM2ExIiwiXHU4MDI0XHU4MDVkXHU4MDVjXHU4MTg5XHU4MTg2XHU4MTgzXHU4MTg3XHU4MThkXHU4MThjXHU4MThiXHU4MjE1XHU4NDk3XHU4''@;'; put 'put ''NGE0XHU4NGExXHU4NDlmXHU4NGJhXHU4NGNlXHU4NGMyXHU4NGFjXHU4NGFlXHU4NGFiXHU4NGI5XHU4NGI0XHU4NGMxXHU4NGNkXHU4NGFhXHU4NDlhXHU4NGIxXHU4NGQwXHU4NDlkXHU4NGE3XHU4NGJiXHU4NGEyXHU4NDk0XHU4NGM3XHU4NGNjXHU4NDliXHU4NGE5XHU4NGFmXHU4NGE4''@;'; put 'put ''XHU4NGQ2XHU4NDk4XHU4NGI2XHU4NGNmXHU4NGEwXHU4NGQ3XHU4NGQ0XHU4NGQyXHU4NGRiXHU4NGIwXHU4NDkxXHU4NjYxXHU4NzMzXHU4NzIzXHU4NzI4XHU4NzZiXHU4NzQwXHU4NzJlXHU4NzFlXHU4NzIxXHU4NzE5XHU4NzFiXHU4NzQzXHU4NzJjXHU4NzQxXHU4NzNlXHU4NzQ2XHU4''@;'; put 'put ''NzIwXHU4NzMyXHU4NzJhXHU4NzJkXHU4NzNjXHU4NzEyXHU4NzNhXHU4NzMxXHU4NzM1XHU4NzQyXHU4NzI2XHU4NzI3XHU4NzM4XHU4NzI0XHU4NzFhXHU4NzMwXHU4NzExXHU4OGY3XHU4OGU3XHU4OGYxXHU4OGYyXHU4OGZhXHU4OGZlXHU4OGVlXHU4OGZjXHU4OGY2XHU4OGZiIl0sWyJl''@;'; put 'put ''NDQwIiwiXHU4OGYwXHU4OGVjXHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTllXHU4OWU5XHU4OWViXHU4OWU4XHU4YWFiXHU4YTk5XHU4YThiXHU4YTkyXHU4YThmXHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2NmXHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAyXHU4ZGZmXHU4''@;'; put 'put ''ZTBkXHU4ZGZkXHU4ZTBhXHU4ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4ZTAwXHU4ZTA0XHU4ZjEwXHU4ZjExXHU4ZjBlXHU4ZjBkXHU5MTIzXHU5MTFjXHU5MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5MTc5XHU5MTcz''@;'; put 'put ''XHU5MmE1XHU5MmE0XHU5Mjc2XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFhXHU5MjhkIl0sWyJlNGExIiwiXHU5MmE2XHU5MjlhXHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmExXHU5MjhhXHU5''@;'; put 'put ''Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3XHU5MmE5XHU5MjlkXHU5MjhiXHU5MjJkXHU5NjllXHU5NmExXHU5NmZmXHU5NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5NzgzXHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5ODE2XHU5OGFk''@;'; put 'put ''XHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5OTljXHU5OWMzXHU5OWI5XHU5OWJiXHU5OWJhXHU5OWMyXHU5OWJkXHU5OWM3XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZmXHU1MTAzXHU1''@;'; put 'put ''MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZlXHU1MTBiXHU1MTBjXHU1MGZkXHU1MTBhXHU1MjhiXHU1MjhjXHU1MmYxXHU1MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2XHU1NjU4Il0sWyJlNTQwIiwiXHU1NjVhXHU1NjQwXHU1NjMz''@;'; put 'put ''XHU1NjNkXHU1NjJjXHU1NjNlXHU1NjM4XHU1NjJhXHU1NjNhXHU1NzFhXHU1OGFiXHU1ODlkXHU1OGIxXHU1OGEwXHU1OGEzXHU1OGFmXHU1OGFjXHU1OGE1XHU1OGExXHU1OGZmXHU1YWZmXHU1YWY0XHU1YWZkXHU1YWY3XHU1YWY2XHU1YjAzXHU1YWY4XHU1YjAyXHU1YWY5XHU1YjAxXHU1''@;'; put 'put ''YjA3XHU1YjA1XHU1YjBmXHU1YzY3XHU1ZDk5XHU1ZDk3XHU1ZDlmXHU1ZDkyXHU1ZGEyXHU1ZDkzXHU1ZDk1XHU1ZGEwXHU1ZDljXHU1ZGExXHU1ZDlhXHU1ZDllXHU1ZTY5XHU1ZTVkXHU1ZTYwXHU1ZTVjXHU3ZGYzXHU1ZWRiXHU1ZWRlXHU1ZWUxXHU1ZjQ5XHU1ZmIyXHU2MThiXHU2MTgz''@;'; put 'put ''XHU2MTc5XHU2MWIxXHU2MWIwXHU2MWEyXHU2MTg5Il0sWyJlNWExIiwiXHU2MTliXHU2MTkzXHU2MWFmXHU2MWFkXHU2MTlmXHU2MTkyXHU2MWFhXHU2MWExXHU2MThkXHU2MTY2XHU2MWIzXHU2MjJkXHU2NDZlXHU2NDcwXHU2NDk2XHU2NGEwXHU2NDg1XHU2NDk3XHU2NDljXHU2NDhmXHU2''@;'; put 'put ''NDhiXHU2NDhhXHU2NDhjXHU2NGEzXHU2NDlmXHU2NDY4XHU2NGIxXHU2NDk4XHU2NTc2XHU2NTdhXHU2NTc5XHU2NTdiXHU2NWIyXHU2NWIzXHU2NmI1XHU2NmIwXHU2NmE5XHU2NmIyXHU2NmI3XHU2NmFhXHU2NmFmXHU2YTAwXHU2YTA2XHU2YTE3XHU2OWU1XHU2OWY4XHU2YTE1XHU2OWYx''@;'; put 'put ''XHU2OWU0XHU2YTIwXHU2OWZmXHU2OWVjXHU2OWUyXHU2YTFiXHU2YTFkXHU2OWZlXHU2YTI3XHU2OWYyXHU2OWVlXHU2YTE0XHU2OWY3XHU2OWU3XHU2YTQwXHU2YTA4XHU2OWU2XHU2OWZiXHU2YTBkXHU2OWZjXHU2OWViXHU2YTA5XHU2YTA0XHU2YTE4XHU2YTI1XHU2YTBmXHU2OWY2XHU2''@;'; put 'put ''YTI2XHU2YTA3XHU2OWY0XHU2YTE2XHU2YjUxXHU2YmE1XHU2YmEzXHU2YmEyXHU2YmE2XHU2YzAxXHU2YzAwXHU2YmZmXHU2YzAyXHU2ZjQxXHU2ZjI2XHU2ZjdlXHU2Zjg3XHU2ZmM2XHU2ZjkyIl0sWyJlNjQwIiwiXHU2ZjhkXHU2Zjg5XHU2ZjhjXHU2ZjYyXHU2ZjRmXHU2Zjg1XHU2ZjVh''@;'; put 'put ''XHU2Zjk2XHU2Zjc2XHU2ZjZjXHU2ZjgyXHU2ZjU1XHU2ZjcyXHU2ZjUyXHU2ZjUwXHU2ZjU3XHU2Zjk0XHU2ZjkzXHU2ZjVkXHU2ZjAwXHU2ZjYxXHU2ZjZiXHU2ZjdkXHU2ZjY3XHU2ZjkwXHU2ZjUzXHU2ZjhiXHU2ZjY5XHU2ZjdmXHU2Zjk1XHU2ZjYzXHU2Zjc3XHU2ZjZhXHU2ZjdiXHU3''@;'; put 'put ''MWIyXHU3MWFmXHU3MTliXHU3MWIwXHU3MWEwXHU3MTlhXHU3MWE5XHU3MWI1XHU3MTlkXHU3MWE1XHU3MTllXHU3MWE0XHU3MWExXHU3MWFhXHU3MTljXHU3MWE3XHU3MWIzXHU3Mjk4XHU3MjlhXHU3MzU4XHU3MzUyXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzVkXHU3MzViXHU3MzYxXHU3MzVh''@;'; put 'put ''XHU3MzU5Il0sWyJlNmExIiwiXHU3MzYyXHU3NDg3XHU3NDg5XHU3NDhhXHU3NDg2XHU3NDgxXHU3NDdkXHU3NDg1XHU3NDg4XHU3NDdjXHU3NDc5XHU3NTA4XHU3NTA3XHU3NTdlXHU3NjI1XHU3NjFlXHU3NjE5XHU3NjFkXHU3NjFjXHU3NjIzXHU3NjFhXHU3NjI4XHU3NjFiXHU3NjljXHU3''@;'; put 'put ''NjlkXHU3NjllXHU3NjliXHU3NzhkXHU3NzhmXHU3Nzg5XHU3Nzg4XHU3OGNkXHU3OGJiXHU3OGNmXHU3OGNjXHU3OGQxXHU3OGNlXHU3OGQ0XHU3OGM4XHU3OGMzXHU3OGM0XHU3OGM5XHU3OTlhXHU3OWExXHU3OWEwXHU3OTljXHU3OWEyXHU3OTliXHU2Yjc2XHU3YTM5XHU3YWIyXHU3YWI0''@;'; put 'put ''XHU3YWIzXHU3YmI3XHU3YmNiXHU3YmJlXHU3YmFjXHU3YmNlXHU3YmFmXHU3YmI5XHU3YmNhXHU3YmI1XHU3Y2M1XHU3Y2M4XHU3Y2NjXHU3Y2NiXHU3ZGY3XHU3ZGRiXHU3ZGVhXHU3ZGU3XHU3ZGQ3XHU3ZGUxXHU3ZTAzXHU3ZGZhXHU3ZGU2XHU3ZGY2XHU3ZGYxXHU3ZGYwXHU3ZGVlXHU3''@;'; put 'put ''ZGRmXHU3Zjc2XHU3ZmFjXHU3ZmIwXHU3ZmFkXHU3ZmVkXHU3ZmViXHU3ZmVhXHU3ZmVjXHU3ZmU2XHU3ZmU4XHU4MDY0XHU4MDY3XHU4MWEzXHU4MTlmIl0sWyJlNzQwIiwiXHU4MTllXHU4MTk1XHU4MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4MjRmXHU4MjUzXHU4MjUyXHU4MjUwXHU4MjRl''@;'; put 'put ''XHU4MjUxXHU4NTI0XHU4NTNiXHU4NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4NTA5XHU4NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4NTFjXHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3XHU4NGViXHU4NGYzXHU4NGZjXHU4NTEyXHU4''@;'; put 'put ''NGVhXHU4NGU5XHU4NTE2XHU4NGZlXHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAyXHU4NGZkXHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2XHU4NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4NTJmXHU4NjYyIl0sWyJlN2ExIiwiXHU4NzU2''@;'; put 'put ''XHU4NzYzXHU4NzY0XHU4Nzc3XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzViXHU4NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4NzVlXHU4NzZkXHU4NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4NzVkXHU4NzZmXHU4NzZjXHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4NzdiXHU4''@;'; put 'put ''Nzc1XHU4NzYyXHU4NzY3XHU4NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4OTBiXHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2XHU4OTE2XHU4OTExXHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0XHU4OWEzXHU4OWVkXHU4OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQzXHU4YWQx''@;'; put 'put ''XHU4YWQ0XHU4YWQ1XHU4YWJiXHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4XHU4YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4YzNlXHU4YzRkXHU4YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4Y2U4XHU4Y2RhXHU4Y2RkXHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4ZTIwXHU4''@;'; put 'put ''ZTIzXHU4ZTI1XHU4ZTI0XHU4ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4ZTE5XHU4ZTI2XHU4ZTI3Il0sWyJlODQwIiwiXHU4ZTE0XHU4ZTEyXHU4ZTE4XHU4ZTEzXHU4ZTFjXHU4ZTE3XHU4ZTFhXHU4ZjJjXHU4ZjI0XHU4ZjE4XHU4ZjFhXHU4ZjIwXHU4ZjIzXHU4ZjE2XHU4ZjE3''@;'; put 'put ''XHU5MDczXHU5MDcwXHU5MDZmXHU5MDY3XHU5MDZiXHU5MTJmXHU5MTJiXHU5MTI5XHU5MTJhXHU5MTMyXHU5MTI2XHU5MTJlXHU5MTg1XHU5MTg2XHU5MThhXHU5MTgxXHU5MTgyXHU5MTg0XHU5MTgwXHU5MmQwXHU5MmMzXHU5MmM0XHU5MmMwXHU5MmQ5XHU5MmI2XHU5MmNmXHU5MmYxXHU5''@;'; put 'put ''MmRmXHU5MmQ4XHU5MmU5XHU5MmQ3XHU5MmRkXHU5MmNjXHU5MmVmXHU5MmMyXHU5MmU4XHU5MmNhXHU5MmM4XHU5MmNlXHU5MmU2XHU5MmNkXHU5MmQ1XHU5MmM5XHU5MmUwXHU5MmRlXHU5MmU3XHU5MmQxXHU5MmQzIl0sWyJlOGExIiwiXHU5MmI1XHU5MmUxXHU5MmM2XHU5MmI0XHU5NTdj''@;'; put 'put ''XHU5NWFjXHU5NWFiXHU5NWFlXHU5NWIwXHU5NmE0XHU5NmEyXHU5NmQzXHU5NzA1XHU5NzA4XHU5NzAyXHU5NzVhXHU5NzhhXHU5NzhlXHU5Nzg4XHU5N2QwXHU5N2NmXHU5ODFlXHU5ODFkXHU5ODI2XHU5ODI5XHU5ODI4XHU5ODIwXHU5ODFiXHU5ODI3XHU5OGIyXHU5OTA4XHU5OGZhXHU5''@;'; put 'put ''OTExXHU5OTE0XHU5OTE2XHU5OTE3XHU5OTE1XHU5OWRjXHU5OWNkXHU5OWNmXHU5OWQzXHU5OWQ0XHU5OWNlXHU5OWM5XHU5OWQ2XHU5OWQ4XHU5OWNiXHU5OWQ3XHU5OWNjXHU5YWIzXHU5YWVjXHU5YWViXHU5YWYzXHU5YWYyXHU5YWYxXHU5YjQ2XHU5YjQzXHU5YjY3XHU5Yjc0XHU5Yjcx''@;'; put 'put ''XHU5YjY2XHU5Yjc2XHU5Yjc1XHU5YjcwXHU5YjY4XHU5YjY0XHU5YjZjXHU5Y2ZjXHU5Y2ZhXHU5Y2ZkXHU5Y2ZmXHU5Y2Y3XHU5ZDA3XHU5ZDAwXHU5Y2Y5XHU5Y2ZiXHU5ZDA4XHU5ZDA1XHU5ZDA0XHU5ZTgzXHU5ZWQzXHU5ZjBmXHU5ZjEwXHU1MTFjXHU1MTEzXHU1MTE3XHU1MTFhXHU1''@;'; put 'put ''MTExXHU1MWRlXHU1MzM0XHU1M2UxXHU1NjcwXHU1NjYwXHU1NjZlIl0sWyJlOTQwIiwiXHU1NjczXHU1NjY2XHU1NjYzXHU1NjZkXHU1NjcyXHU1NjVlXHU1Njc3XHU1NzFjXHU1NzFiXHU1OGM4XHU1OGJkXHU1OGM5XHU1OGJmXHU1OGJhXHU1OGMyXHU1OGJjXHU1OGM2XHU1YjE3XHU1YjE5''@;'; put 'put ''XHU1YjFiXHU1YjIxXHU1YjE0XHU1YjEzXHU1YjEwXHU1YjE2XHU1YjI4XHU1YjFhXHU1YjIwXHU1YjFlXHU1YmVmXHU1ZGFjXHU1ZGIxXHU1ZGE5XHU1ZGE3XHU1ZGI1XHU1ZGIwXHU1ZGFlXHU1ZGFhXHU1ZGE4XHU1ZGIyXHU1ZGFkXHU1ZGFmXHU1ZGI0XHU1ZTY3XHU1ZTY4XHU1ZTY2XHU1''@;'; put 'put ''ZTZmXHU1ZWU5XHU1ZWU3XHU1ZWU2XHU1ZWU4XHU1ZWU1XHU1ZjRiXHU1ZmJjXHU2MTlkXHU2MWE4XHU2MTk2XHU2MWM1XHU2MWI0XHU2MWM2XHU2MWMxXHU2MWNjXHU2MWJhIl0sWyJlOWExIiwiXHU2MWJmXHU2MWI4XHU2MThjXHU2NGQ3XHU2NGQ2XHU2NGQwXHU2NGNmXHU2NGM5XHU2NGJk''@;'; put 'put ''XHU2NDg5XHU2NGMzXHU2NGRiXHU2NGYzXHU2NGQ5XHU2NTMzXHU2NTdmXHU2NTdjXHU2NWEyXHU2NmM4XHU2NmJlXHU2NmMwXHU2NmNhXHU2NmNiXHU2NmNmXHU2NmJkXHU2NmJiXHU2NmJhXHU2NmNjXHU2NzIzXHU2YTM0XHU2YTY2XHU2YTQ5XHU2YTY3XHU2YTMyXHU2YTY4XHU2YTNlXHU2''@;'; put 'put ''YTVkXHU2YTZkXHU2YTc2XHU2YTViXHU2YTUxXHU2YTI4XHU2YTVhXHU2YTNiXHU2YTNmXHU2YTQxXHU2YTZhXHU2YTY0XHU2YTUwXHU2YTRmXHU2YTU0XHU2YTZmXHU2YTY5XHU2YTYwXHU2YTNjXHU2YTVlXHU2YTU2XHU2YTU1XHU2YTRkXHU2YTRlXHU2YTQ2XHU2YjU1XHU2YjU0XHU2YjU2''@;'; put 'put ''XHU2YmE3XHU2YmFhXHU2YmFiXHU2YmM4XHU2YmM3XHU2YzA0XHU2YzAzXHU2YzA2XHU2ZmFkXHU2ZmNiXHU2ZmEzXHU2ZmM3XHU2ZmJjXHU2ZmNlXHU2ZmM4XHU2ZjVlXHU2ZmM0XHU2ZmJkXHU2ZjllXHU2ZmNhXHU2ZmE4XHU3MDA0XHU2ZmE1XHU2ZmFlXHU2ZmJhXHU2ZmFjXHU2ZmFhXHU2''@;'; put 'put ''ZmNmXHU2ZmJmXHU2ZmI4Il0sWyJlYTQwIiwiXHU2ZmEyXHU2ZmM5XHU2ZmFiXHU2ZmNkXHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1XHU3MWMyXHU3MWJmXHU3MWI4XHU3MWQ2XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2''@;'; put 'put ''XHU3MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3MzY5XHU3MzY2XHU3MzY3XHU3MzZjXHU3MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3NDlhXHU3NGEwXHU3NDk0XHU3NDkyXHU3NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJkXHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3''@;'; put 'put ''NjMyXHU3NjMwXHU3NmJiXHU3NmU2XHU3NzlhXHU3NzlkXHU3N2ExXHU3NzljXHU3NzliXHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5Il0sWyJlYWExIiwiXHU3Nzk3XHU3OGRkXHU3OGU5XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUxXHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUw''@;'; put 'put ''XHU3OWE0XHU3YTQ0XHU3YTQ4XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIxXHU3YWI3XHU3YmRlXHU3YmUzXHU3YmU3XHU3YmRkXHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3''@;'; put 'put ''Y2Q3XHU3Y2QwXHU3Y2QxXHU3ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3ZTIwXHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3ZTE1XHU3ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3ZjdiXHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVm''@;'; put 'put ''XHU4MDJhXHU4MDI5XHU4MDZjXHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1XHU4MWFiXHU4MWIwXHU4MWFjXHU4MWI0XHU4MWIyXHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4NTUzXHU4NTYxXHU4NTU4Il0sWyJlYjQw''@;'; put 'put ''IiwiXHU4NTQwXHU4NTQ2XHU4NTY0XHU4NTQxXHU4NTYyXHU4NTQ0XHU4NTUxXHU4NTQ3XHU4NTYzXHU4NTNlXHU4NTViXHU4NTcxXHU4NTRlXHU4NTZlXHU4NTc1XHU4NTU1XHU4NTY3XHU4NTYwXHU4NThjXHU4NTY2XHU4NTVkXHU4NTU0XHU4NTY1XHU4NTZjXHU4NjYzXHU4NjY1XHU4NjY0''@;'; put 'put ''XHU4NzliXHU4NzhmXHU4Nzk3XHU4NzkzXHU4NzkyXHU4Nzg4XHU4NzgxXHU4Nzk2XHU4Nzk4XHU4Nzc5XHU4Nzg3XHU4N2EzXHU4Nzg1XHU4NzkwXHU4NzkxXHU4NzlkXHU4Nzg0XHU4Nzk0XHU4NzljXHU4NzlhXHU4Nzg5XHU4OTFlXHU4OTI2XHU4OTMwXHU4OTJkXHU4OTJlXHU4OTI3XHU4''@;'; put 'put ''OTMxXHU4OTIyXHU4OTI5XHU4OTIzXHU4OTJmXHU4OTJjXHU4OTFmXHU4OWYxXHU4YWUwIl0sWyJlYmExIiwiXHU4YWUyXHU4YWYyXHU4YWY0XHU4YWY1XHU4YWRkXHU4YjE0XHU4YWU0XHU4YWRmXHU4YWYwXHU4YWM4XHU4YWRlXHU4YWUxXHU4YWU4XHU4YWZmXHU4YWVmXHU4YWZiXHU4Yzkx''@;'; put 'put ''XHU4YzkyXHU4YzkwXHU4Y2Y1XHU4Y2VlXHU4Y2YxXHU4Y2YwXHU4Y2YzXHU4ZDZjXHU4ZDZlXHU4ZGE1XHU4ZGE3XHU4ZTMzXHU4ZTNlXHU4ZTM4XHU4ZTQwXHU4ZTQ1XHU4ZTM2XHU4ZTNjXHU4ZTNkXHU4ZTQxXHU4ZTMwXHU4ZTNmXHU4ZWJkXHU4ZjM2XHU4ZjJlXHU4ZjM1XHU4ZjMyXHU4''@;'; put 'put ''ZjM5XHU4ZjM3XHU4ZjM0XHU5MDc2XHU5MDc5XHU5MDdiXHU5MDg2XHU5MGZhXHU5MTMzXHU5MTM1XHU5MTM2XHU5MTkzXHU5MTkwXHU5MTkxXHU5MThkXHU5MThmXHU5MzI3XHU5MzFlXHU5MzA4XHU5MzFmXHU5MzA2XHU5MzBmXHU5MzdhXHU5MzM4XHU5MzNjXHU5MzFiXHU5MzIzXHU5MzEy''@;'; put 'put ''XHU5MzAxXHU5MzQ2XHU5MzJkXHU5MzBlXHU5MzBkXHU5MmNiXHU5MzFkXHU5MmZhXHU5MzI1XHU5MzEzXHU5MmY5XHU5MmY3XHU5MzM0XHU5MzAyXHU5MzI0XHU5MmZmXHU5MzI5XHU5MzM5XHU5MzM1XHU5MzJhXHU5MzE0XHU5MzBjIl0sWyJlYzQwIiwiXHU5MzBiXHU5MmZlXHU5MzA5XHU5''@;'; put 'put ''MzAwXHU5MmZiXHU5MzE2XHU5NWJjXHU5NWNkXHU5NWJlXHU5NWI5XHU5NWJhXHU5NWI2XHU5NWJmXHU5NWI1XHU5NWJkXHU5NmE5XHU5NmQ0XHU5NzBiXHU5NzEyXHU5NzEwXHU5Nzk5XHU5Nzk3XHU5Nzk0XHU5N2YwXHU5N2Y4XHU5ODM1XHU5ODJmXHU5ODMyXHU5OTI0XHU5OTFmXHU5OTI3''@;'; put 'put ''XHU5OTI5XHU5OTllXHU5OWVlXHU5OWVjXHU5OWU1XHU5OWU0XHU5OWYwXHU5OWUzXHU5OWVhXHU5OWU5XHU5OWU3XHU5YWI5XHU5YWJmXHU5YWI0XHU5YWJiXHU5YWY2XHU5YWZhXHU5YWY5XHU5YWY3XHU5YjMzXHU5YjgwXHU5Yjg1XHU5Yjg3XHU5YjdjXHU5YjdlXHU5YjdiXHU5YjgyXHU5''@;'; put 'put ''YjkzXHU5YjkyXHU5YjkwXHU5YjdhXHU5Yjk1Il0sWyJlY2ExIiwiXHU5YjdkXHU5Yjg4XHU5ZDI1XHU5ZDE3XHU5ZDIwXHU5ZDFlXHU5ZDE0XHU5ZDI5XHU5ZDFkXHU5ZDE4XHU5ZDIyXHU5ZDEwXHU5ZDE5XHU5ZDFmXHU5ZTg4XHU5ZTg2XHU5ZTg3XHU5ZWFlXHU5ZWFkXHU5ZWQ1XHU5ZWQ2''@;'; put 'put ''XHU5ZWZhXHU5ZjEyXHU5ZjNkXHU1MTI2XHU1MTI1XHU1MTIyXHU1MTI0XHU1MTIwXHU1MTI5XHU1MmY0XHU1NjkzXHU1NjhjXHU1NjhkXHU1Njg2XHU1Njg0XHU1NjgzXHU1NjdlXHU1NjgyXHU1NjdmXHU1NjgxXHU1OGQ2XHU1OGQ0XHU1OGNmXHU1OGQyXHU1YjJkXHU1YjI1XHU1YjMyXHU1''@;'; put 'put ''YjIzXHU1YjJjXHU1YjI3XHU1YjI2XHU1YjJmXHU1YjJlXHU1YjdiXHU1YmYxXHU1YmYyXHU1ZGI3XHU1ZTZjXHU1ZTZhXHU1ZmJlXHU1ZmJiXHU2MWMzXHU2MWI1XHU2MWJjXHU2MWU3XHU2MWUwXHU2MWU1XHU2MWU0XHU2MWU4XHU2MWRlXHU2NGVmXHU2NGU5XHU2NGUzXHU2NGViXHU2NGU0''@;'; put 'put ''XHU2NGU4XHU2NTgxXHU2NTgwXHU2NWI2XHU2NWRhXHU2NmQyXHU2YThkXHU2YTk2XHU2YTgxXHU2YWE1XHU2YTg5XHU2YTlmXHU2YTliXHU2YWExXHU2YTllXHU2YTg3XHU2YTkzXHU2YThlIl0sWyJlZDQwIiwiXHU2YTk1XHU2YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2YTdmXHU2YWE2XHU2''@;'; put 'put ''YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2ZmE5XHU2ZmY0XHU2ZmQ0XHU2ZmUzXHU2ZmRjXHU2ZmVkXHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUxXHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0XHU3MWYwXHU3MWUy''@;'; put 'put ''XHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFhXHU3NGFkXHU3NGIxXHU3NGE1XHU3NGFmXHU3NTEwXHU3NTExXHU3NTEyXHU3NTBmXHU3NTg0XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3N2IyXHU3N2I3XHU3''@;'; put 'put ''N2I2Il0sWyJlZGExIiwiXHU3N2I0XHU3N2IxXHU3N2E4XHU3N2YwXHU3OGYzXHU3OGZkXHU3OTAyXHU3OGZiXHU3OGZjXHU3OGYyXHU3OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3YWMx''@;'; put 'put ''XHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZmXHU3YmZiXHU3YzBlXHU3YmY0XHU3YzBiXHU3YmYzXHU3YzAyXHU3YzA5XHU3YzAzXHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBhXHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4XHU3''@;'; put 'put ''ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3ZTI5XHU3ZTRjXHU3ZTMwXHU3ZTNiXHU3ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1XHU3ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4MjVi''@;'; put 'put ''XHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThmXHU4NWE3XHU4NTk1XHU4NWEwXHU4NThiXHU4NWEzXHU4NTdiXHU4NWE0XHU4NTlhXHU4NTllIl0sWyJlZTQwIiwiXHU4NTc3XHU4NTdjXHU4NTg5XHU4NWExXHU4NTdhXHU4NTc4XHU4NTU3XHU4NThlXHU4NTk2XHU4NTg2XHU4NThkXHU4''@;'; put 'put ''NTk5XHU4NTlkXHU4NTgxXHU4NWEyXHU4NTgyXHU4NTg4XHU4NTg1XHU4NTc5XHU4NTc2XHU4NTk4XHU4NTkwXHU4NTlmXHU4NjY4XHU4N2JlXHU4N2FhXHU4N2FkXHU4N2M1XHU4N2IwXHU4N2FjXHU4N2I5XHU4N2I1XHU4N2JjXHU4N2FlXHU4N2M5XHU4N2MzXHU4N2MyXHU4N2NjXHU4N2I3''@;'; put 'put ''XHU4N2FmXHU4N2M0XHU4N2NhXHU4N2I0XHU4N2I2XHU4N2JmXHU4N2I4XHU4N2JkXHU4N2RlXHU4N2IyXHU4OTM1XHU4OTMzXHU4OTNjXHU4OTNlXHU4OTQxXHU4OTUyXHU4OTM3XHU4OTQyXHU4OWFkXHU4OWFmXHU4OWFlXHU4OWYyXHU4OWYzXHU4YjFlIl0sWyJlZWExIiwiXHU4YjE4XHU4''@;'; put 'put ''YjE2XHU4YjExXHU4YjA1XHU4YjBiXHU4YjIyXHU4YjBmXHU4YjEyXHU4YjE1XHU4YjA3XHU4YjBkXHU4YjA4XHU4YjA2XHU4YjFjXHU4YjEzXHU4YjFhXHU4YzRmXHU4YzcwXHU4YzcyXHU4YzcxXHU4YzZmXHU4Yzk1XHU4Yzk0XHU4Y2Y5XHU4ZDZmXHU4ZTRlXHU4ZTRkXHU4ZTUzXHU4ZTUw''@;'; put 'put ''XHU4ZTRjXHU4ZTQ3XHU4ZjQzXHU4ZjQwXHU5MDg1XHU5MDdlXHU5MTM4XHU5MTlhXHU5MWEyXHU5MTliXHU5MTk5XHU5MTlmXHU5MWExXHU5MTlkXHU5MWEwXHU5M2ExXHU5MzgzXHU5M2FmXHU5MzY0XHU5MzU2XHU5MzQ3XHU5MzdjXHU5MzU4XHU5MzVjXHU5Mzc2XHU5MzQ5XHU5MzUwXHU5''@;'; put 'put ''MzUxXHU5MzYwXHU5MzZkXHU5MzhmXHU5MzRjXHU5MzZhXHU5Mzc5XHU5MzU3XHU5MzU1XHU5MzUyXHU5MzRmXHU5MzcxXHU5Mzc3XHU5MzdiXHU5MzYxXHU5MzVlXHU5MzYzXHU5MzY3XHU5MzgwXHU5MzRlXHU5MzU5XHU5NWM3XHU5NWMwXHU5NWM5XHU5NWMzXHU5NWM1XHU5NWI3XHU5NmFl''@;'; put 'put ''XHU5NmIwXHU5NmFjXHU5NzIwXHU5NzFmXHU5NzE4XHU5NzFkXHU5NzE5XHU5NzlhXHU5N2ExXHU5NzljIl0sWyJlZjQwIiwiXHU5NzllXHU5NzlkXHU5N2Q1XHU5N2Q0XHU5N2YxXHU5ODQxXHU5ODQ0XHU5ODRhXHU5ODQ5XHU5ODQ1XHU5ODQzXHU5OTI1XHU5OTJiXHU5OTJjXHU5OTJhXHU5''@;'; put 'put ''OTMzXHU5OTMyXHU5OTJmXHU5OTJkXHU5OTMxXHU5OTMwXHU5OTk4XHU5OWEzXHU5OWExXHU5YTAyXHU5OWZhXHU5OWY0XHU5OWY3XHU5OWY5XHU5OWY4XHU5OWY2XHU5OWZiXHU5OWZkXHU5OWZlXHU5OWZjXHU5YTAzXHU5YWJlXHU5YWZlXHU5YWZkXHU5YjAxXHU5YWZjXHU5YjQ4XHU5Yjlh''@;'; put 'put ''XHU5YmE4XHU5YjllXHU5YjliXHU5YmE2XHU5YmExXHU5YmE1XHU5YmE0XHU5Yjg2XHU5YmEyXHU5YmEwXHU5YmFmXHU5ZDMzXHU5ZDQxXHU5ZDY3XHU5ZDM2XHU5ZDJlXHU5ZDJmXHU5ZDMxXHU5ZDM4XHU5ZDMwIl0sWyJlZmExIiwiXHU5ZDQ1XHU5ZDQyXHU5ZDQzXHU5ZDNlXHU5ZDM3XHU5''@;'; put 'put ''ZDQwXHU5ZDNkXHU3ZmY1XHU5ZDJkXHU5ZThhXHU5ZTg5XHU5ZThkXHU5ZWIwXHU5ZWM4XHU5ZWRhXHU5ZWZiXHU5ZWZmXHU5ZjI0XHU5ZjIzXHU5ZjIyXHU5ZjU0XHU5ZmEwXHU1MTMxXHU1MTJkXHU1MTJlXHU1Njk4XHU1NjljXHU1Njk3XHU1NjlhXHU1NjlkXHU1Njk5XHU1OTcwXHU1YjNj''@;'; put 'put ''XHU1YzY5XHU1YzZhXHU1ZGMwXHU1ZTZkXHU1ZTZlXHU2MWQ4XHU2MWRmXHU2MWVkXHU2MWVlXHU2MWYxXHU2MWVhXHU2MWYwXHU2MWViXHU2MWQ2XHU2MWU5XHU2NGZmXHU2NTA0XHU2NGZkXHU2NGY4XHU2NTAxXHU2NTAzXHU2NGZjXHU2NTk0XHU2NWRiXHU2NmRhXHU2NmRiXHU2NmQ4XHU2''@;'; put 'put ''YWM1XHU2YWI5XHU2YWJkXHU2YWUxXHU2YWM2XHU2YWJhXHU2YWI2XHU2YWI3XHU2YWM3XHU2YWI0XHU2YWFkXHU2YjVlXHU2YmM5XHU2YzBiXHU3MDA3XHU3MDBjXHU3MDBkXHU3MDAxXHU3MDA1XHU3MDE0XHU3MDBlXHU2ZmZmXHU3MDAwXHU2ZmZiXHU3MDI2XHU2ZmZjXHU2ZmY3XHU3MDBh''@;'; put 'put ''XHU3MjAxXHU3MWZmXHU3MWY5XHU3MjAzXHU3MWZkXHU3Mzc2Il0sWyJmMDQwIiwiXHU3NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3NGJlXHU3NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3NmJkXHU3''@;'; put 'put ''NmVjXHU3N2MyXHU3N2JhXHU3OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3OTA5XHU3OTEwXHU3OTEyXHU3OTExXHU3OWFkXHU3OWFjXHU3YTVmXHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFmXHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVjXHU3ZTUw''@;'; put 'put ''XHU3ZTU2XHU3ZTYzXHU3ZTU4XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYwXHU3ZTU3XHU3ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3ZmY4XHU4MDc1XHU4MWQxXHU4MWQyIl0sWyJmMGExIiwiXHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMyXHU4NWIzXHU4''@;'; put 'put ''NWI1XHU4NWJkXHU4NWM3XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4NWM1XHU4NWIxXHU4NWI2XHU4NWQyXHU4NjI0XHU4NWI4XHU4NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4N2U0XHU4N2Q0''@;'; put 'put ''XHU4N2RjXHU4N2QzXHU4N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5XHU4ODAxXHU4N2Y0XHU4N2U4XHU4N2RkXHU4OTUzXHU4OTRiXHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUwXHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1XHU4YjQ3XHU4''@;'; put 'put ''YjJmXHU4YjNjXHU4YjNlXHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4YjJlXHU4YjI0XHU4YjNiXHU4YjNkXHU4YjNhXHU4YzQyXHU4Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4ZTU2XHU4ZTVl''@;'; put 'put ''XHU4ZTY1XHU4ZTY3Il0sWyJmMTQwIiwiXHU4ZTViXHU4ZTVhXHU4ZTYxXHU4ZTVkXHU4ZTY5XHU4ZTU0XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjRiXHU5MTI4XHU5MTNhXHU5MTNiXHU5MTNlXHU5MWE4XHU5MWE1XHU5MWE3XHU5MWFmXHU5MWFhXHU5M2I1XHU5MzhjXHU5MzkyXHU5M2I3XHU5''@;'; put 'put ''MzliXHU5MzlkXHU5Mzg5XHU5M2E3XHU5MzhlXHU5M2FhXHU5MzllXHU5M2E2XHU5Mzk1XHU5Mzg4XHU5Mzk5XHU5MzlmXHU5MzhkXHU5M2IxXHU5MzkxXHU5M2IyXHU5M2E0XHU5M2E4XHU5M2I0XHU5M2EzXHU5M2E1XHU5NWQyXHU5NWQzXHU5NWQxXHU5NmIzXHU5NmQ3XHU5NmRhXHU1ZGMy''@;'; put 'put ''XHU5NmRmXHU5NmQ4XHU5NmRkXHU5NzIzXHU5NzIyXHU5NzI1XHU5N2FjXHU5N2FlXHU5N2E4XHU5N2FiXHU5N2E0XHU5N2FhIl0sWyJmMWExIiwiXHU5N2EyXHU5N2E1XHU5N2Q3XHU5N2Q5XHU5N2Q2XHU5N2Q4XHU5N2ZhXHU5ODUwXHU5ODUxXHU5ODUyXHU5OGI4XHU5OTQxXHU5OTNjXHU5''@;'; put 'put ''OTNhXHU5YTBmXHU5YTBiXHU5YTA5XHU5YTBkXHU5YTA0XHU5YTExXHU5YTBhXHU5YTA1XHU5YTA3XHU5YTA2XHU5YWMwXHU5YWRjXHU5YjA4XHU5YjA0XHU5YjA1XHU5YjI5XHU5YjM1XHU5YjRhXHU5YjRjXHU5YjRiXHU5YmM3XHU5YmM2XHU5YmMzXHU5YmJmXHU5YmMxXHU5YmI1XHU5YmI4''@;'; put 'put ''XHU5YmQzXHU5YmI2XHU5YmM0XHU5YmI5XHU5YmJkXHU5ZDVjXHU5ZDUzXHU5ZDRmXHU5ZDRhXHU5ZDViXHU5ZDRiXHU5ZDU5XHU5ZDU2XHU5ZDRjXHU5ZDU3XHU5ZDUyXHU5ZDU0XHU5ZDVmXHU5ZDU4XHU5ZDVhXHU5ZThlXHU5ZThjXHU5ZWRmXHU5ZjAxXHU5ZjAwXHU5ZjE2XHU5ZjI1XHU5''@;'; put 'put ''ZjJiXHU5ZjJhXHU5ZjI5XHU5ZjI4XHU5ZjRjXHU5ZjU1XHU1MTM0XHU1MTM1XHU1Mjk2XHU1MmY3XHU1M2I0XHU1NmFiXHU1NmFkXHU1NmE2XHU1NmE3XHU1NmFhXHU1NmFjXHU1OGRhXHU1OGRkXHU1OGRiXHU1OTEyXHU1YjNkXHU1YjNlXHU1YjNmXHU1ZGMzXHU1ZTcwIl0sWyJmMjQwIiwi''@;'; put 'put ''XHU1ZmJmXHU2MWZiXHU2NTA3XHU2NTEwXHU2NTBkXHU2NTA5XHU2NTBjXHU2NTBlXHU2NTg0XHU2NWRlXHU2NWRkXHU2NmRlXHU2YWU3XHU2YWUwXHU2YWNjXHU2YWQxXHU2YWQ5XHU2YWNiXHU2YWRmXHU2YWRjXHU2YWQwXHU2YWViXHU2YWNmXHU2YWNkXHU2YWRlXHU2YjYwXHU2YmIwXHU2''@;'; put 'put ''YzBjXHU3MDE5XHU3MDI3XHU3MDIwXHU3MDE2XHU3MDJiXHU3MDIxXHU3MDIyXHU3MDIzXHU3MDI5XHU3MDE3XHU3MDI0XHU3MDFjXHU3MDJhXHU3MjBjXHU3MjBhXHU3MjA3XHU3MjAyXHU3MjA1XHU3MmE1XHU3MmE2XHU3MmE0XHU3MmEzXHU3MmExXHU3NGNiXHU3NGM1XHU3NGI3XHU3NGMz''@;'; put 'put ''XHU3NTE2XHU3NjYwXHU3N2M5XHU3N2NhXHU3N2M0XHU3N2YxXHU3OTFkXHU3OTFiIl0sWyJmMmExIiwiXHU3OTIxXHU3OTFjXHU3OTE3XHU3OTFlXHU3OWIwXHU3YTY3XHU3YTY4XHU3YzMzXHU3YzNjXHU3YzM5XHU3YzJjXHU3YzNiXHU3Y2VjXHU3Y2VhXHU3ZTc2XHU3ZTc1XHU3ZTc4XHU3''@;'; put 'put ''ZTcwXHU3ZTc3XHU3ZTZmXHU3ZTdhXHU3ZTcyXHU3ZTc0XHU3ZTY4XHU3ZjRiXHU3ZjRhXHU3ZjgzXHU3Zjg2XHU3ZmI3XHU3ZmZkXHU3ZmZlXHU4MDc4XHU4MWQ3XHU4MWQ1XHU4MjY0XHU4MjYxXHU4MjYzXHU4NWViXHU4NWYxXHU4NWVkXHU4NWQ5XHU4NWUxXHU4NWU4XHU4NWRhXHU4NWQ3''@;'; put 'put ''XHU4NWVjXHU4NWYyXHU4NWY4XHU4NWQ4XHU4NWRmXHU4NWUzXHU4NWRjXHU4NWQxXHU4NWYwXHU4NWU2XHU4NWVmXHU4NWRlXHU4NWUyXHU4ODAwXHU4N2ZhXHU4ODAzXHU4N2Y2XHU4N2Y3XHU4ODA5XHU4ODBjXHU4ODBiXHU4ODA2XHU4N2ZjXHU4ODA4XHU4N2ZmXHU4ODBhXHU4ODAyXHU4''@;'; put 'put ''OTYyXHU4OTVhXHU4OTViXHU4OTU3XHU4OTYxXHU4OTVjXHU4OTU4XHU4OTVkXHU4OTU5XHU4OTg4XHU4OWI3XHU4OWI2XHU4OWY2XHU4YjUwXHU4YjQ4XHU4YjRhXHU4YjQwXHU4YjUzXHU4YjU2XHU4YjU0XHU4YjRiXHU4YjU1Il0sWyJmMzQwIiwiXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3''@;'; put 'put ''XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4YzlhXHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFjXHU4ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZkXHU4ZTc4XHU4ZTczXHU4ZTZhXHU4ZTZmXHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUzXHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5''@;'; put 'put ''MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5M2VjXHU5M2NjXHU5M2Q5XHU5M2E5XHU5M2U2XHU5M2NhXHU5M2Q0XHU5M2VlXHU5M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5''@;'; put 'put ''XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2Il0sWyJmM2ExIiwiXHU5N2IzXHU5N2I3XHU5N2I2XHU5N2RkXHU5N2RlXHU5N2RmXHU5ODVjXHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQzXHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1XHU5''@;'; put 'put ''YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5YTIyXHU5YTIwXHU5YTI3XHU5YTIzXHU5YTFlXHU5YTFjXHU5YTE0XHU5YWMyXHU5YjBiXHU5YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmViXHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5YmVj''@;'; put 'put ''XHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1XHU5YmUxXHU5YmRhXHU5ZDc3XHU5ZDgxXHU5ZDhhXHU5ZDg0XHU5ZDg4XHU5ZDcxXHU5ZDgwXHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgyXHU5''@;'; put 'put ''ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMwXHU5ZWZjXHU5ZjJkXHU5ZjQwXHU5ZjQxXHU5ZjRkXHU5ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyIl0sWyJmNDQwIiwiXHU1NmI1XHU1NmIzXHU1OGUzXHU1YjQ1XHU1ZGM2XHU1ZGM3XHU1ZWVlXHU1ZWVm''@;'; put 'put ''XHU1ZmMwXHU1ZmMxXHU2MWY5XHU2NTE3XHU2NTE2XHU2NTE1XHU2NTEzXHU2NWRmXHU2NmU4XHU2NmUzXHU2NmU0XHU2YWYzXHU2YWYwXHU2YWVhXHU2YWU4XHU2YWY5XHU2YWYxXHU2YWVlXHU2YWVmXHU3MDNjXHU3MDM1XHU3MDJmXHU3MDM3XHU3MDM0XHU3MDMxXHU3MDQyXHU3MDM4XHU3''@;'; put 'put ''MDNmXHU3MDNhXHU3MDM5XHU3MDQwXHU3MDNiXHU3MDMzXHU3MDQxXHU3MjEzXHU3MjE0XHU3MmE4XHU3MzdkXHU3MzdjXHU3NGJhXHU3NmFiXHU3NmFhXHU3NmJlXHU3NmVkXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2NkXHU3N2YyXHU3OTI1XHU3OTIzXHU3OTI3XHU3OTI4XHU3OTI0XHU3OTI5''@;'; put 'put ''Il0sWyJmNGExIiwiXHU3OWIyXHU3YTZlXHU3YTZjXHU3YTZkXHU3YWY3XHU3YzQ5XHU3YzQ4XHU3YzRhXHU3YzQ3XHU3YzQ1XHU3Y2VlXHU3ZTdiXHU3ZTdlXHU3ZTgxXHU3ZTgwXHU3ZmJhXHU3ZmZmXHU4MDc5XHU4MWRiXHU4MWQ5XHU4MjBiXHU4MjY4XHU4MjY5XHU4NjIyXHU4NWZmXHU4''@;'; put 'put ''NjAxXHU4NWZlXHU4NjFiXHU4NjAwXHU4NWY2XHU4NjA0XHU4NjA5XHU4NjA1XHU4NjBjXHU4NWZkXHU4ODE5XHU4ODEwXHU4ODExXHU4ODE3XHU4ODEzXHU4ODE2XHU4OTYzXHU4OTY2XHU4OWI5XHU4OWY3XHU4YjYwXHU4YjZhXHU4YjVkXHU4YjY4XHU4YjYzXHU4YjY1XHU4YjY3XHU4YjZk''@;'; put 'put ''XHU4ZGFlXHU4ZTg2XHU4ZTg4XHU4ZTg0XHU4ZjU5XHU4ZjU2XHU4ZjU3XHU4ZjU1XHU4ZjU4XHU4ZjVhXHU5MDhkXHU5MTQzXHU5MTQxXHU5MWI3XHU5MWI1XHU5MWIyXHU5MWIzXHU5NDBiXHU5NDEzXHU5M2ZiXHU5NDIwXHU5NDBmXHU5NDE0XHU5M2ZlXHU5NDE1XHU5NDEwXHU5NDI4XHU5''@;'; put 'put ''NDE5XHU5NDBkXHU5M2Y1XHU5NDAwXHU5M2Y3XHU5NDA3XHU5NDBlXHU5NDE2XHU5NDEyXHU5M2ZhXHU5NDA5XHU5M2Y4XHU5NDBhXHU5M2ZmIl0sWyJmNTQwIiwiXHU5M2ZjXHU5NDBjXHU5M2Y2XHU5NDExXHU5NDA2XHU5NWRlXHU5NWUwXHU5NWRmXHU5NzJlXHU5NzJmXHU5N2I5XHU5N2Ji''@;'; put 'put ''XHU5N2ZkXHU5N2ZlXHU5ODYwXHU5ODYyXHU5ODYzXHU5ODVmXHU5OGMxXHU5OGMyXHU5OTUwXHU5OTRlXHU5OTU5XHU5OTRjXHU5OTRiXHU5OTUzXHU5YTMyXHU5YTM0XHU5YTMxXHU5YTJjXHU5YTJhXHU5YTM2XHU5YTI5XHU5YTJlXHU5YTM4XHU5YTJkXHU5YWM3XHU5YWNhXHU5YWM2XHU5''@;'; put 'put ''YjEwXHU5YjEyXHU5YjExXHU5YzBiXHU5YzA4XHU5YmY3XHU5YzA1XHU5YzEyXHU5YmY4XHU5YzQwXHU5YzA3XHU5YzBlXHU5YzA2XHU5YzE3XHU5YzE0XHU5YzA5XHU5ZDlmXHU5ZDk5XHU5ZGE0XHU5ZDlkXHU5ZDkyXHU5ZDk4XHU5ZDkwXHU5ZDliIl0sWyJmNWExIiwiXHU5ZGEwXHU5ZDk0''@;'; put 'put ''XHU5ZDljXHU5ZGFhXHU5ZDk3XHU5ZGExXHU5ZDlhXHU5ZGEyXHU5ZGE4XHU5ZDllXHU5ZGEzXHU5ZGJmXHU5ZGE5XHU5ZDk2XHU5ZGE2XHU5ZGE3XHU5ZTk5XHU5ZTliXHU5ZTlhXHU5ZWU1XHU5ZWU0XHU5ZWU3XHU5ZWU2XHU5ZjMwXHU5ZjJlXHU5ZjViXHU5ZjYwXHU5ZjVlXHU5ZjVkXHU5''@;'; put 'put ''ZjU5XHU5ZjkxXHU1MTNhXHU1MTM5XHU1Mjk4XHU1Mjk3XHU1NmMzXHU1NmJkXHU1NmJlXHU1YjQ4XHU1YjQ3XHU1ZGNiXHU1ZGNmXHU1ZWYxXHU2MWZkXHU2NTFiXHU2YjAyXHU2YWZjXHU2YjAzXHU2YWY4XHU2YjAwXHU3MDQzXHU3MDQ0XHU3MDRhXHU3MDQ4XHU3MDQ5XHU3MDQ1XHU3MDQ2''@;'; put 'put ''XHU3MjFkXHU3MjFhXHU3MjE5XHU3MzdlXHU3NTE3XHU3NjZhXHU3N2QwXHU3OTJkXHU3OTMxXHU3OTJmXHU3YzU0XHU3YzUzXHU3Y2YyXHU3ZThhXHU3ZTg3XHU3ZTg4XHU3ZThiXHU3ZTg2XHU3ZThkXHU3ZjRkXHU3ZmJiXHU4MDMwXHU4MWRkXHU4NjE4XHU4NjJhXHU4NjI2XHU4NjFmXHU4''@;'; put 'put ''NjIzXHU4NjFjXHU4NjE5XHU4NjI3XHU4NjJlXHU4NjIxXHU4NjIwXHU4NjI5XHU4NjFlXHU4NjI1Il0sWyJmNjQwIiwiXHU4ODI5XHU4ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4ODJiXHU4ODRhXHU4OTZkXHU4OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4Yjc5XHU4Yjc4XHU4YjQ1''@;'; put 'put ''XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFmXHU4ZThlXHU4ZThjXHU4ZjVlXHU4ZjViXHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5MTQ1XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5XHU5NDNkXHU5NDNjXHU5NDMwXHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJjXHU5NDQwXHU5NDMxXHU5''@;'; put 'put ''NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5N2JmXHU5N2UxXHU5ODY0XHU5OGM5XHU5OGM2XHU5OGMwXHU5OTU4XHU5OTU2XHU5YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5YTQxXHU5YTNhIl0sWyJmNmExIiwiXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2''@;'; put 'put ''XHU5YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5YzFjXHU5YzJjXHU5YzIzXHU5YzI4XHU5YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5ZGI2XHU5ZGJjXHU5ZGMxXHU5ZGM3XHU5ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5''@;'; put 'put ''ZGM4XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIzXHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5ZTljXHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFiXHU5ZjE4XHU5ZjFhXHU5ZjMxXHU5ZjRlXHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1''@;'; put 'put ''XHU1ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2NTI2XHU2NTIyXHU2YjBiXHU2YjA4XHU2YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3MDU3XHU3MDUyXHU3MjFlXHU3MjFmXHU3MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3''@;'; put 'put ''YTcxXHU3YzU3XHU3YzVjXHU3YzU5XHU3YzViXHU3YzVhIl0sWyJmNzQwIiwiXHU3Y2Y0XHU3Y2YxXHU3ZTkxXHU3ZjRmXHU3Zjg3XHU4MWRlXHU4MjZiXHU4NjM0XHU4NjM1XHU4NjMzXHU4NjJjXHU4NjMyXHU4NjM2XHU4ODJjXHU4ODI4XHU4ODI2XHU4ODJhXHU4ODI1XHU4OTcxXHU4OWJm''@;'; put 'put ''XHU4OWJlXHU4OWZiXHU4YjdlXHU4Yjg0XHU4YjgyXHU4Yjg2XHU4Yjg1XHU4YjdmXHU4ZDE1XHU4ZTk1XHU4ZTk0XHU4ZTlhXHU4ZTkyXHU4ZTkwXHU4ZTk2XHU4ZTk3XHU4ZjYwXHU4ZjYyXHU5MTQ3XHU5NDRjXHU5NDUwXHU5NDRhXHU5NDRiXHU5NDRmXHU5NDQ3XHU5NDQ1XHU5NDQ4XHU5''@;'; put 'put ''NDQ5XHU5NDQ2XHU5NzNmXHU5N2UzXHU5ODZhXHU5ODY5XHU5OGNiXHU5OTU0XHU5OTViXHU5YTRlXHU5YTUzXHU5YTU0XHU5YTRjXHU5YTRmXHU5YTQ4XHU5YTRhIl0sWyJmN2ExIiwiXHU5YTQ5XHU5YTUyXHU5YTUwXHU5YWQwXHU5YjE5XHU5YjJiXHU5YjNiXHU5YjU2XHU5YjU1XHU5YzQ2''@;'; put 'put ''XHU5YzQ4XHU5YzNmXHU5YzQ0XHU5YzM5XHU5YzMzXHU5YzQxXHU5YzNjXHU5YzM3XHU5YzM0XHU5YzMyXHU5YzNkXHU5YzM2XHU5ZGRiXHU5ZGQyXHU5ZGRlXHU5ZGRhXHU5ZGNiXHU5ZGQwXHU5ZGRjXHU5ZGQxXHU5ZGRmXHU5ZGU5XHU5ZGQ5XHU5ZGQ4XHU5ZGQ2XHU5ZGY1XHU5ZGQ1XHU5''@;'; put 'put ''ZGRkXHU5ZWI2XHU5ZWYwXHU5ZjM1XHU5ZjMzXHU5ZjMyXHU5ZjQyXHU5ZjZiXHU5Zjk1XHU5ZmEyXHU1MTNkXHU1Mjk5XHU1OGU4XHU1OGU3XHU1OTcyXHU1YjRkXHU1ZGQ4XHU4ODJmXHU1ZjRmXHU2MjAxXHU2MjAzXHU2MjA0XHU2NTI5XHU2NTI1XHU2NTk2XHU2NmViXHU2YjExXHU2YjEy''@;'; put 'put ''XHU2YjBmXHU2YmNhXHU3MDViXHU3MDVhXHU3MjIyXHU3MzgyXHU3MzgxXHU3MzgzXHU3NjcwXHU3N2Q0XHU3YzY3XHU3YzY2XHU3ZTk1XHU4MjZjXHU4NjNhXHU4NjQwXHU4NjM5XHU4NjNjXHU4NjMxXHU4NjNiXHU4NjNlXHU4ODMwXHU4ODMyXHU4ODJlXHU4ODMzXHU4OTc2XHU4OTc0XHU4''@;'; put 'put ''OTczXHU4OWZlIl0sWyJmODQwIiwiXHU4YjhjXHU4YjhlXHU4YjhiXHU4Yjg4XHU4YzQ1XHU4ZDE5XHU4ZTk4XHU4ZjY0XHU4ZjYzXHU5MWJjXHU5NDYyXHU5NDU1XHU5NDVkXHU5NDU3XHU5NDVlXHU5N2M0XHU5N2M1XHU5ODAwXHU5YTU2XHU5YTU5XHU5YjFlXHU5YjFmXHU5YjIwXHU5YzUy''@;'; put 'put ''XHU5YzU4XHU5YzUwXHU5YzRhXHU5YzRkXHU5YzRiXHU5YzU1XHU5YzU5XHU5YzRjXHU5YzRlXHU5ZGZiXHU5ZGY3XHU5ZGVmXHU5ZGUzXHU5ZGViXHU5ZGY4XHU5ZGU0XHU5ZGY2XHU5ZGUxXHU5ZGVlXHU5ZGU2XHU5ZGYyXHU5ZGYwXHU5ZGUyXHU5ZGVjXHU5ZGY0XHU5ZGYzXHU5ZGU4XHU5''@;'; put 'put ''ZGVkXHU5ZWMyXHU5ZWQwXHU5ZWYyXHU5ZWYzXHU5ZjA2XHU5ZjFjXHU5ZjM4XHU5ZjM3XHU5ZjM2XHU5ZjQzXHU5ZjRmIl0sWyJmOGExIiwiXHU5ZjcxXHU5ZjcwXHU5ZjZlXHU5ZjZmXHU1NmQzXHU1NmNkXHU1YjRlXHU1YzZkXHU2NTJkXHU2NmVkXHU2NmVlXHU2YjEzXHU3MDVmXHU3MDYx''@;'; put 'put ''XHU3MDVkXHU3MDYwXHU3MjIzXHU3NGRiXHU3NGU1XHU3N2Q1XHU3OTM4XHU3OWI3XHU3OWI2XHU3YzZhXHU3ZTk3XHU3Zjg5XHU4MjZkXHU4NjQzXHU4ODM4XHU4ODM3XHU4ODM1XHU4ODRiXHU4Yjk0XHU4Yjk1XHU4ZTllXHU4ZTlmXHU4ZWEwXHU4ZTlkXHU5MWJlXHU5MWJkXHU5MWMyXHU5''@;'; put 'put ''NDZiXHU5NDY4XHU5NDY5XHU5NmU1XHU5NzQ2XHU5NzQzXHU5NzQ3XHU5N2M3XHU5N2U1XHU5YTVlXHU5YWQ1XHU5YjU5XHU5YzYzXHU5YzY3XHU5YzY2XHU5YzYyXHU5YzVlXHU5YzYwXHU5ZTAyXHU5ZGZlXHU5ZTA3XHU5ZTAzXHU5ZTA2XHU5ZTA1XHU5ZTAwXHU5ZTAxXHU5ZTA5XHU5ZGZm''@;'; put 'put ''XHU5ZGZkXHU5ZTA0XHU5ZWEwXHU5ZjFlXHU5ZjQ2XHU5Zjc0XHU5Zjc1XHU5Zjc2XHU1NmQ0XHU2NTJlXHU2NWI4XHU2YjE4XHU2YjE5XHU2YjE3XHU2YjFhXHU3MDYyXHU3MjI2XHU3MmFhXHU3N2Q4XHU3N2Q5XHU3OTM5XHU3YzY5XHU3YzZiXHU3Y2Y2XHU3ZTlhIl0sWyJmOTQwIiwiXHU3''@;'; put 'put ''ZTk4XHU3ZTliXHU3ZTk5XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4OTc5XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZmXHU4Yjk4XHU4Yjk5XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZl''@;'; put 'put ''XHU5YzZkXHU5ZTBiXHU5ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5ZTExXHU5ZWExXHU5ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5ZjdiXHU5ZjdhXHU5Zjc5XHU1NzFlXHU3MDY2XHU3YzZmXHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMzXHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5''@;'; put 'put ''Yzc0XHU5YzczXHU5YzcxXHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2XHU5ZjBhIl0sWyJmOWExIiwiXHU5ZmE0XHU3MDY4XHU3MDY1XHU3Y2Y3XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNmXHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5ODczXHU5ODc0XHU5OGNjXHU5OTYxXHU5OWFi''@;'; put 'put ''XHU5YTY0XHU5YTY2XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3XHU2YjFlXHU3MjI3XHU4NjRjXHU4ZWE4XHU5NDgyXHU5NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgzXHU5Yzc5XHU5ZWI3XHU3Njc1XHU5YTZiXHU5''@;'; put 'put ''YzdhXHU5ZTFkXHU3MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3ODgxXHU5MmI5XHU4OGNmXHU1OGJiXHU2MDUyXHU3Y2E3XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUyNTVkXHUyNTUyXHUyNTY0XHUyNTU1XHUyNTVl''@;'; put 'put ''XHUyNTZhXHUyNTYxXHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2XHUyNTVmXHUyNTZiXHUyNTYyXHUyNTU5XHUyNTY4XHUyNTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTkzIl1dJyl9LDMxNTMyOmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9y''@;'; put 'put ''dHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyI4ZWExIiwiXHVmZjYxIiw2Ml0sWyJhMWExIiwiXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNc''@;'; put 'put ''dWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMw''@;'; put 'put ''MTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDgiLDksIlx1ZmYwYlx1ZmYwZFx4YjFceGQ3XHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZm''@;'; put 'put ''ZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3Il0sWyJhMmExIiwiXHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUz''@;'; put 'put ''MDEzIl0sWyJhMmJhIiwiXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5Il0sWyJhMmNhIiwiXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzIl0sWyJhMmRjIiwiXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYx''@;'; put 'put ''XHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjIl0sWyJhMmYyIiwiXHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNiJdLFsiYTJmZSIsIlx1MjVlZiJdLFsiYTNiMCIsIlx1ZmYxMCIsOV0sWyJhM2MxIiwiXHVm''@;'; put 'put ''ZjIxIiwyNV0sWyJhM2UxIiwiXHVmZjQxIiwyNV0sWyJhNGExIiwiXHUzMDQxIiw4Ml0sWyJhNWExIiwiXHUzMGExIiw4NV0sWyJhNmExIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE2YzEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiYTdhMSIsIlx1MDQxMCIsNSwiXHUwNDAxXHUw''@;'; put 'put ''NDE2IiwyNV0sWyJhN2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxbImE4YTEiLCJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNc''@;'; put 'put ''dTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDIiXSxbImFkYTEiLCJcdTI0NjAiLDE5LCJcdTIxNjAiLDldLFsiYWRjMCIsIlx1MzM0OVx1MzMxNFx1MzMyMlx1MzM0ZFx1MzMxOFx1MzMyN1x1''@;'; put 'put ''MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMyNlx1MzMyM1x1MzMyYlx1MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMSJdLFsiYWRkZiIsIlx1MzM3Ylx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1MzJhNCIsNCwiXHUzMjMx''@;'; put 'put ''XHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhIl0sWyJiMGExIiwiXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1''@;'; put 'put ''OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1''@;'; put 'put ''XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4''@;'; put 'put ''MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1''@;'; put 'put ''XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkIl0sWyJiMWExIiwiXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1NTA0XHU2YjFkXHU4''@;'; put 'put ''NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRlXHU5ODM0XHU4MmYx''@;'; put 'put ''XHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2FkXHU1MTg2XHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3''@;'; put 'put ''MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjIl0sWyJiMmExIiwiXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3MzhiXHU3ZmMxXHU4OTU2''@;'; put 'put ''XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0ZjczXHU1MmEwXHU1''@;'; put 'put ''M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIyXHU1NjI5XHU4Y2E4''@;'; put 'put ''XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2MDk0XHU2MDYyXHU2''@;'; put 'put ''MWQwXHU2MjEyXHU2MmQwXHU2NTM5Il0sWyJiM2ExIiwiXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFm''@;'; put 'put ''XHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4''@;'; put 'put ''ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0''@;'; put 'put ''XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxIl0sWyJiNGExIiwiXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1''@;'; put 'put ''MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIw''@;'; put 'put ''XHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1''@;'; put 'put ''ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUy''@;'; put 'put ''XHU2NzFmXHU2OGNiXHU2OGM0Il0sWyJiNWExIiwiXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1''@;'; put 'put ''MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEy''@;'; put 'put ''XHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1''@;'; put 'put ''M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjIl0sWyJiNmExIiwiXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIx''@;'; put 'put ''XHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1''@;'; put 'put ''MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5''@;'; put 'put ''XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5''@;'; put 'put ''MWU3XHU1YzUxXHU1YzQ4Il0sWyJiN2ExIiwiXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQx''@;'; put 'put ''XHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3''@;'; put 'put ''ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4XHU1Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4''@;'; put 'put ''XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYzXHU2MzcyIl0sWyJiOGExIiwiXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4''@;'; put 'put ''MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0''@;'; put 'put ''XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1''@;'; put 'put ''MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1Mzlh''@;'; put 'put ''XHU1M2UzXHU1NDExIl0sWyJiOWExIiwiXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2''@;'; put 'put ''NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUy''@;'; put 'put ''XHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkXHU5ODA1XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1''@;'; put 'put ''MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4ZmJjIl0sWyJiYWExIiwiXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBm''@;'; put 'put ''XHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1''@;'; put 'put ''MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZh''@;'; put 'put ''XHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1''@;'; put 'put ''MThhXHU1MjM3Il0sWyJiYmExIiwiXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2''@;'; put 'put ''XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1''@;'; put 'put ''ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThj''@;'; put 'put ''XHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyIl0sWyJiY2ExIiwiXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4''@;'; put 'put ''MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0''@;'; put 'put ''XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5''@;'; put 'put ''MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2Nl''@;'; put 'put ''XHU1NDY4Il0sWyJiZGExIiwiXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5MTZjXHU5NmM2XHU5''@;'; put 'put ''MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYwXHU0ZmNhXHU1Y2Zi''@;'; put 'put ''XHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzXHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3''@;'; put 'put ''ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1MGI3XHU1MTFmIl0sWyJiZWExIiwiXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OWJlXHU1YTNj''@;'; put 'put ''XHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4XHU3MTNjXHU3''@;'; put 'put ''MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5MzdlXHU5NDE4''@;'; put 'put ''XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMxXHU1N2Y0XHU5''@;'; put 'put ''OGZlIl0sWyJiZmExIiwiXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVl''@;'; put 'put ''XHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4''@;'; put 'put ''MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4XHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVl''@;'; put 'put ''XHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlIl0sWyJjMGExIiwiXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1''@;'; put 'put ''ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBl''@;'; put 'put ''XHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5''@;'; put 'put ''NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRh''@;'; put 'put ''Il0sWyJjMWExIiwiXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1''@;'; put 'put ''ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRm''@;'; put 'put ''XHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4''@;'; put 'put ''MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlIl0sWyJjMmExIiwiXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJj''@;'; put 'put ''XHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2''@;'; put 'put ''N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRi''@;'; put 'put ''XHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhIl0s''@;'; put 'put ''WyJjM2ExIiwiXHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUxXHU2ZTViXHU3MGFk''@;'; put 'put ''XHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3NWY0XHU3YTFhXHU3''@;'; put 'put ''ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0XHU5MDEwXHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRl''@;'; put 'put ''XHU5MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1Il0sWyJjNGExIiwiXHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2NzFkXHU2ZjZlXHU3''@;'; put 'put ''MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODljXHU2OTBlXHU2OWNj''@;'; put 'put ''XHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0ZWFkXHU0ZjRlXHU1''@;'; put 'put ''MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0XHU5MDEzIl0sWyJj''@;'; put 'put ''NWExIiwiXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3''@;'; put 'put ''ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1''@;'; put 'put ''XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2''@;'; put 'put ''ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwIl0sWyJjNmExIiwiXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMw''@;'; put 'put ''XHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4''@;'; put 'put ''YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVh''@;'; put 'put ''XHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1Il0sWyJjN2Ex''@;'; put 'put ''IiwiXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMz''@;'; put 'put ''XHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3''@;'; put 'put ''MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1XHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3Njdk''@;'; put 'put ''XHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2Il0sWyJjOGExIiwiXHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2''@;'; put 'put ''ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2Vk''@;'; put 'put ''XHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2''@;'; put 'put ''NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlIl0sWyJjOWExIiwi''@;'; put 'put ''XHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2ZjAyXHU3NGUyXHU3''@;'; put 'put ''OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4XHU1N2UwXHU1OTJi''@;'; put 'put ''XHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4''@;'; put 'put ''NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkIl0sWyJjYWExIiwiXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2XHU1NDNiXHU1Njc0''@;'; put 'put ''XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1MGZiXHU1OGMxXHU3''@;'; put 'put ''NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJiXHU4OGRjXHU4ZjE0''@;'; put 'put ''XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiIl0sWyJjYmExIiwiXHU2''@;'; put 'put ''Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNm''@;'; put 'put ''XHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2''@;'; put 'put ''Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2XHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUz''@;'; put 'put ''XHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwIl0sWyJjY2ExIiwiXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1''@;'; put 'put ''OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJm''@;'; put 'put ''XHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3''@;'; put 'put ''ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyIl0sWyJjZGExIiwiXHU4YWVk''@;'; put 'put ''XHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0''@;'; put 'put ''ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIx''@;'; put 'put ''XHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2''@;'; put 'put ''ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzIl0sWyJjZWExIiwiXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTlj''@;'; put 'put ''XHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5''@;'; put 'put ''MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJh''@;'; put 'put ''XHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmIl0sWyJjZmExIiwiXHU4NGVlXHU5''@;'; put 'put ''MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0''@;'; put 'put ''XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1Il0sWyJkMGExIiwiXHU1ZjBjXHU0ZTEwXHU0ZTE1XHU0''@;'; put 'put ''ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0ZWQ3''@;'; put 'put ''XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4XHU0''@;'; put 'put ''ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVh''@;'; put 'put ''XHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyIl0sWyJkMWExIiwiXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1''@;'; put 'put ''MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0''@;'; put 'put ''XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1''@;'; put 'put ''MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4Il0sWyJkMmExIiwiXHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJj''@;'; put 'put ''XHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1''@;'; put 'put ''MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4''@;'; put 'put ''XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1''@;'; put 'put ''NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4Il0sWyJkM2ExIiwiXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYz''@;'; put 'put ''XHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1''@;'; put 'put ''NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0''@;'; put 'put ''XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5Il0sWyJkNGExIiwiXHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1''@;'; put 'put ''NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2Qz''@;'; put 'put ''XHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1''@;'; put 'put ''OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRl''@;'; put 'put ''XHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5Il0sWyJkNWExIiwiXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5XHU1''@;'; put 'put ''YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1YjM2''@;'; put 'put ''XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1''@;'; put 'put ''YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzIl0sWyJkNmExIiwiXHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZl''@;'; put 'put ''XHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1''@;'; put 'put ''ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQz''@;'; put 'put ''XHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1''@;'; put 'put ''ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmIl0sWyJkN2ExIiwiXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVk''@;'; put 'put ''XHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1''@;'; put 'put ''ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNh''@;'; put 'put ''XHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhIl0sWyJkOGExIiwiXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2''@;'; put 'put ''MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNl''@;'; put 'put ''XHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2''@;'; put 'put ''MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAw''@;'; put 'put ''XHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiIl0sWyJkOWExIiwiXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2''@;'; put 'put ''MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1''@;'; put 'put ''XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2''@;'; put 'put ''NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjIl0sWyJkYWExIiwiXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4''@;'; put 'put ''XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3''@;'; put 'put ''NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYx''@;'; put 'put ''XHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2''@;'; put 'put ''NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjIl0sWyJkYmExIiwiXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2NzM2''@;'; put 'put ''XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0XHU2''@;'; put 'put ''N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODRkXHU2ODMyXHU2ODRlXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODli''@;'; put 'put ''XHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkIl0sWyJkY2ExIiwiXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2''@;'; put 'put ''OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVk''@;'; put 'put ''XHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2''@;'; put 'put ''YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkw''@;'; put 'put ''XHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzIl0sWyJkZGExIiwiXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5''@;'; put 'put ''YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFh''@;'; put 'put ''XHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2''@;'; put 'put ''YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlIl0sWyJkZWExIiwiXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRk''@;'; put 'put ''XHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2''@;'; put 'put ''ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRl''@;'; put 'put ''XHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2''@;'; put 'put ''ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjIl0sWyJkZmExIiwiXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEz''@;'; put 'put ''XHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3''@;'; put 'put ''MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZj''@;'; put 'put ''XHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjIl0sWyJlMGExIiwiXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3''@;'; put 'put ''MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUw''@;'; put 'put ''XHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3''@;'; put 'put ''M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3''@;'; put 'put ''XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxIl0sWyJlMWExIiwiXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2XHU3NTJjXHU3''@;'; put 'put ''NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3NWMyXHU3NWIz''@;'; put 'put ''XHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZlXHU3NWZmXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3''@;'; put 'put ''NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwIl0sWyJlMmExIiwiXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3Njhi''@;'; put 'put ''XHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFlXHU3''@;'; put 'put ''NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3N2Nk''@;'; put 'put ''XHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJlXHU3''@;'; put 'put ''OGJjXHU3OGM1XHU3OGNhXHU3OGVjIl0sWyJlM2ExIiwiXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3''@;'; put 'put ''XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3''@;'; put 'put ''YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRk''@;'; put 'put ''XHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwIl0sWyJlNGExIiwiXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3''@;'; put 'put ''Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2''@;'; put 'put ''XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3''@;'; put 'put ''YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0''@;'; put 'put ''XHU3Y2Y2XHU3Y2ZhXHU3ZDA2Il0sWyJlNWExIiwiXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3''@;'; put 'put ''ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIx''@;'; put 'put ''XHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3XHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3''@;'; put 'put ''ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhIl0sWyJlNmExIiwiXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4''@;'; put 'put ''XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3''@;'; put 'put ''ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDcz''@;'; put 'put ''XHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4''@;'; put 'put ''MTIzXHU4MTJmXHU4MTRiIl0sWyJlN2ExIiwiXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVmXHU4MTkzXHU4MWE5''@;'; put 'put ''XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBhXHU4MjBkXHU4''@;'; put 'put ''MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0XHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFj''@;'; put 'put ''XHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5XHU4MmQ5Il0sWyJlOGExIiwiXHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4''@;'; put 'put ''MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2ZkXHU4NDAzXHU4M2Q4''@;'; put 'put ''XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJjXHU4NDZmXHU4''@;'; put 'put ''NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZjXHU4NTQwXHU4NTYz''@;'; put 'put ''XHU4NTU4XHU4NTQ4Il0sWyJlOWExIiwiXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4''@;'; put 'put ''NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4Njhj''@;'; put 'put ''XHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4''@;'; put 'put ''NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5Il0sWyJlYWExIiwiXHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2Jk''@;'; put 'put ''XHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4''@;'; put 'put ''ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMz''@;'; put 'put ''XHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4''@;'; put 'put ''OTYwXHU4OTVlIl0sWyJlYmExIiwiXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRh''@;'; put 'put ''XHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4''@;'; put 'put ''YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3XHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIw''@;'; put 'put ''XHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiIl0sWyJlY2ExIiwiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4''@;'; put 'put ''Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2Jk''@;'; put 'put ''XHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4''@;'; put 'put ''ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0''@;'; put 'put ''XHU4ZTRhIl0sWyJlZGExIiwiXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4''@;'; put 'put ''ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMz''@;'; put 'put ''XHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5''@;'; put 'put ''MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4Il0sWyJlZWExIiwiXHU5MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4''@;'; put 'put ''XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5''@;'; put 'put ''MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFl''@;'; put 'put ''XHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5''@;'; put 'put ''MzJlIl0sWyJlZmExIiwiXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2Qw''@;'; put 'put ''XHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5''@;'; put 'put ''NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5XHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRj''@;'; put 'put ''XHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlIl0sWyJmMGExIiwiXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5''@;'; put 'put ''NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMw''@;'; put 'put ''XHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5''@;'; put 'put ''N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcw''@;'; put 'put ''Il0sWyJmMWExIiwiXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5''@;'; put 'put ''OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAx''@;'; put 'put ''XHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5''@;'; put 'put ''YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3Il0sWyJmMmExIiwiXHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJh''@;'; put 'put ''XHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5''@;'; put 'put ''YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2''@;'; put 'put ''XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4Il0s''@;'; put 'put ''WyJmM2ExIiwiXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMyXHU5ZGQ5XHU5ZGQz''@;'; put 'put ''XHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5ZWNjXHU5ZWNlXHU5''@;'; put 'put ''ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYz''@;'; put 'put ''XHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEwIl0sWyJmNGExIiwiXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5Il0sWyJmOWExIiwiXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4''@;'; put 'put ''NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0''@;'; put 'put ''XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1''@;'; put 'put ''N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZk''@;'; put 'put ''XHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3Il0sWyJmYWExIiwiXHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2''@;'; put 'put ''NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEz''@;'; put 'put ''XHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2''@;'; put 'put ''ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxIl0sWyJmYmExIiwiXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2Jk''@;'; put 'put ''XHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3''@;'; put 'put ''OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4''@;'; put 'put ''XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVm''@;'; put 'put ''YTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhIl0sWyJmY2ExIiwiXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3''@;'; put 'put ''XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVm''@;'; put 'put ''OWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcw''@;'; put 'put ''XHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl0sWyJmY2YxIiwiXHUyMTcwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDIiXSxbIjhmYTJhZiIsIlx1MDJkOFx1MDJjN1x4YjhcdTAyZDlcdTAyZGRceGFmXHUwMmRiXHUwMmRhXHVmZjVlXHUwMzg0XHUwMzg1Il0sWyI4ZmEyYzIiLCJceGEx''@;'; put 'put ''XHhhNlx4YmYiXSxbIjhmYTJlYiIsIlx4YmFceGFhXHhhOVx4YWVcdTIxMjJceGE0XHUyMTE2Il0sWyI4ZmE2ZTEiLCJcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzYWEiXSxbIjhmYTZlNyIsIlx1MDM4YyJdLFsiOGZhNmU5IiwiXHUwMzhlXHUwM2FiIl0sWyI4ZmE2ZWMiLCJcdTAzOGYi''@;'; put 'put ''XSxbIjhmYTZmMSIsIlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNjYVx1MDM5MFx1MDNjY1x1MDNjMlx1MDNjZFx1MDNjYlx1MDNiMFx1MDNjZSJdLFsiOGZhN2MyIiwiXHUwNDAyIiwxMCwiXHUwNDBlXHUwNDBmIl0sWyI4ZmE3ZjIiLCJcdTA0NTIiLDEwLCJcdTA0NWVcdTA0NWYiXSxb''@;'; put 'put ''IjhmYTlhMSIsIlx4YzZcdTAxMTAiXSxbIjhmYTlhNCIsIlx1MDEyNiJdLFsiOGZhOWE2IiwiXHUwMTMyIl0sWyI4ZmE5YTgiLCJcdTAxNDFcdTAxM2YiXSxbIjhmYTlhYiIsIlx1MDE0YVx4ZDhcdTAxNTIiXSxbIjhmYTlhZiIsIlx1MDE2Nlx4ZGUiXSxbIjhmYTljMSIsIlx4ZTZcdTAxMTFc''@;'; put 'put ''eGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQyXHUwMTQwXHUwMTQ5XHUwMTRiXHhmOFx1MDE1M1x4ZGZcdTAxNjdceGZlIl0sWyI4ZmFhYTEiLCJceGMxXHhjMFx4YzRceGMyXHUwMTAyXHUwMWNkXHUwMTAwXHUwMTA0XHhjNVx4YzNcdTAxMDZcdTAxMDhcdTAxMGNceGM3XHUwMTBh''@;'; put 'put ''XHUwMTBlXHhjOVx4YzhceGNiXHhjYVx1MDExYVx1MDExNlx1MDExMlx1MDExOCJdLFsiOGZhYWJhIiwiXHUwMTFjXHUwMTFlXHUwMTIyXHUwMTIwXHUwMTI0XHhjZFx4Y2NceGNmXHhjZVx1MDFjZlx1MDEzMFx1MDEyYVx1MDEyZVx1MDEyOFx1MDEzNFx1MDEzNlx1MDEzOVx1MDEzZFx1MDEz''@;'; put 'put ''Ylx1MDE0M1x1MDE0N1x1MDE0NVx4ZDFceGQzXHhkMlx4ZDZceGQ0XHUwMWQxXHUwMTUwXHUwMTRjXHhkNVx1MDE1NFx1MDE1OFx1MDE1Nlx1MDE1YVx1MDE1Y1x1MDE2MFx1MDE1ZVx1MDE2NFx1MDE2Mlx4ZGFceGQ5XHhkY1x4ZGJcdTAxNmNcdTAxZDNcdTAxNzBcdTAxNmFcdTAxNzJcdTAx''@;'; put 'put ''NmVcdTAxNjhcdTAxZDdcdTAxZGJcdTAxZDlcdTAxZDVcdTAxNzRceGRkXHUwMTc4XHUwMTc2XHUwMTc5XHUwMTdkXHUwMTdiIl0sWyI4ZmFiYTEiLCJceGUxXHhlMFx4ZTRceGUyXHUwMTAzXHUwMWNlXHUwMTAxXHUwMTA1XHhlNVx4ZTNcdTAxMDdcdTAxMDlcdTAxMGRceGU3XHUwMTBiXHUw''@;'; put 'put ''MTBmXHhlOVx4ZThceGViXHhlYVx1MDExYlx1MDExN1x1MDExM1x1MDExOVx1MDFmNVx1MDExZFx1MDExZiJdLFsiOGZhYmJkIiwiXHUwMTIxXHUwMTI1XHhlZFx4ZWNceGVmXHhlZVx1MDFkMCJdLFsiOGZhYmM1IiwiXHUwMTJiXHUwMTJmXHUwMTI5XHUwMTM1XHUwMTM3XHUwMTNhXHUwMTNl''@;'; put 'put ''XHUwMTNjXHUwMTQ0XHUwMTQ4XHUwMTQ2XHhmMVx4ZjNceGYyXHhmNlx4ZjRcdTAxZDJcdTAxNTFcdTAxNGRceGY1XHUwMTU1XHUwMTU5XHUwMTU3XHUwMTViXHUwMTVkXHUwMTYxXHUwMTVmXHUwMTY1XHUwMTYzXHhmYVx4ZjlceGZjXHhmYlx1MDE2ZFx1MDFkNFx1MDE3MVx1MDE2Ylx1MDE3''@;'; put 'put ''M1x1MDE2Zlx1MDE2OVx1MDFkOFx1MDFkY1x1MDFkYVx1MDFkNlx1MDE3NVx4ZmRceGZmXHUwMTc3XHUwMTdhXHUwMTdlXHUwMTdjIl0sWyI4ZmIwYTEiLCJcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMGNcdTRlMTJcdTRlMWZcdTRlMjNcdTRlMjRcdTRlMjhcdTRlMmJcdTRlMmVcdTRlMmZcdTRl''@;'; put 'put ''MzBcdTRlMzVcdTRlNDBcdTRlNDFcdTRlNDRcdTRlNDdcdTRlNTFcdTRlNWFcdTRlNWNcdTRlNjNcdTRlNjhcdTRlNjlcdTRlNzRcdTRlNzVcdTRlNzlcdTRlN2ZcdTRlOGRcdTRlOTZcdTRlOTdcdTRlOWRcdTRlYWZcdTRlYjlcdTRlYzNcdTRlZDBcdTRlZGFcdTRlZGJcdTRlZTBcdTRlZTFc''@;'; put 'put ''dTRlZTJcdTRlZThcdTRlZWZcdTRlZjFcdTRlZjNcdTRlZjVcdTRlZmRcdTRlZmVcdTRlZmZcdTRmMDBcdTRmMDJcdTRmMDNcdTRmMDhcdTRmMGJcdTRmMGNcdTRmMTJcdTRmMTVcdTRmMTZcdTRmMTdcdTRmMTlcdTRmMmVcdTRmMzFcdTRmNjBcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRm''@;'; put 'put ''M2JcdTRmM2VcdTRmNDBcdTRmNDJcdTRmNDhcdTRmNDlcdTRmNGJcdTRmNGNcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNThcdTRmNWZcdTRmNjNcdTRmNmFcdTRmNmNcdTRmNmVcdTRmNzFcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmN2VcdTRmODFcdTRmODJcdTRmODQiXSxbIjhm''@;'; put 'put ''YjFhMSIsIlx1NGY4NVx1NGY4OVx1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NFx1NGY5N1x1NGY5OVx1NGY5YVx1NGY5ZVx1NGY5Zlx1NGZiMlx1NGZiN1x1NGZiOVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjNVx1NGZjNlx1NGZjOFx1''@;'; put 'put ''NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZjZlx1NGZkMlx1NGZkY1x1NGZlMFx1NGZlMlx1NGZmMFx1NGZmMlx1NGZmY1x1NGZmZFx1NGZmZlx1NTAwMFx1NTAwMVx1NTAwNFx1NTAwN1x1NTAwYVx1NTAwY1x1NTAwZVx1NTAxMFx1NTAxM1x1NTAxN1x1NTAxOFx1NTAxYlx1NTAxY1x1NTAx''@;'; put 'put ''ZFx1NTAxZVx1NTAyMlx1NTAyN1x1NTAyZVx1NTAzMFx1NTAzMlx1NTAzM1x1NTAzNVx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NVx1NTA0Nlx1NTA0YVx1NTA0Y1x1NTA0ZVx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1N1x1NTA1OVx1NTA1Zlx1NTA2MFx1NTA2Mlx1NTA2M1x1NTA2Nlx1NTA2N1x1''@;'; put 'put ''NTA2YVx1NTA2ZFx1NTA3MFx1NTA3MVx1NTAzYlx1NTA4MVx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4YVx1NTA4ZVx1NTA4Zlx1NTA5MCJdLFsiOGZiMmExIiwiXHU1MDkyXHU1MDkzXHU1MDk0XHU1MDk2XHU1MDliXHU1MDljXHU1MDllIiw0LCJcdTUwYWFcdTUwYWZcdTUwYjBcdTUwYjlcdTUw''@;'; put 'put ''YmFcdTUwYmRcdTUwYzBcdTUwYzNcdTUwYzRcdTUwYzdcdTUwY2NcdTUwY2VcdTUwZDBcdTUwZDNcdTUwZDRcdTUwZDhcdTUwZGNcdTUwZGRcdTUwZGZcdTUwZTJcdTUwZTRcdTUwZTZcdTUwZThcdTUwZTlcdTUwZWZcdTUwZjFcdTUwZjZcdTUwZmFcdTUwZmVcdTUxMDNcdTUxMDZcdTUxMDdc''@;'; put 'put ''dTUxMDhcdTUxMGJcdTUxMGNcdTUxMGRcdTUxMGVcdTUwZjJcdTUxMTBcdTUxMTdcdTUxMTlcdTUxMWJcdTUxMWNcdTUxMWRcdTUxMWVcdTUxMjNcdTUxMjdcdTUxMjhcdTUxMmNcdTUxMmRcdTUxMmZcdTUxMzFcdTUxMzNcdTUxMzRcdTUxMzVcdTUxMzhcdTUxMzlcdTUxNDJcdTUxNGFcdTUx''@;'; put 'put ''NGZcdTUxNTNcdTUxNTVcdTUxNTdcdTUxNThcdTUxNWZcdTUxNjRcdTUxNjZcdTUxN2VcdTUxODNcdTUxODRcdTUxOGJcdTUxOGVcdTUxOThcdTUxOWRcdTUxYTFcdTUxYTNcdTUxYWRcdTUxYjhcdTUxYmFcdTUxYmNcdTUxYmVcdTUxYmZcdTUxYzIiXSxbIjhmYjNhMSIsIlx1NTFjOFx1NTFj''@;'; put 'put ''Zlx1NTFkMVx1NTFkMlx1NTFkM1x1NTFkNVx1NTFkOFx1NTFkZVx1NTFlMlx1NTFlNVx1NTFlZVx1NTFmMlx1NTFmM1x1NTFmNFx1NTFmN1x1NTIwMVx1NTIwMlx1NTIwNVx1NTIxMlx1NTIxM1x1NTIxNVx1NTIxNlx1NTIxOFx1NTIyMlx1NTIyOFx1NTIzMVx1NTIzMlx1NTIzNVx1NTIzY1x1''@;'; put 'put ''NTI0NVx1NTI0OVx1NTI1NVx1NTI1N1x1NTI1OFx1NTI1YVx1NTI1Y1x1NTI1Zlx1NTI2MFx1NTI2MVx1NTI2Nlx1NTI2ZVx1NTI3N1x1NTI3OFx1NTI3OVx1NTI4MFx1NTI4Mlx1NTI4NVx1NTI4YVx1NTI4Y1x1NTI5M1x1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5YVx1NTI5Y1x1NTJh''@;'; put 'put ''NFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZlx1NTJiMFx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiYVx1NTJiYlx1NTJiZFx1NTJjMFx1NTJjNFx1NTJjNlx1NTJjOFx1NTJjY1x1NTJjZlx1NTJkMVx1NTJkNFx1NTJkNlx1NTJkYlx1NTJkY1x1NTJlMVx1NTJlNVx1NTJlOFx1NTJlOVx1NTJlYVx1''@;'; put 'put ''NTJlY1x1NTJmMFx1NTJmMVx1NTJmNFx1NTJmNlx1NTJmN1x1NTMwMFx1NTMwM1x1NTMwYVx1NTMwYiJdLFsiOGZiNGExIiwiXHU1MzBjXHU1MzExXHU1MzEzXHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1''@;'; put 'put ''MzMwXHU1MzMyXHU1MzM1XHU1MzNjXHU1MzNkXHU1MzNlXHU1MzQyXHU1MzRjXHU1MzRiXHU1MzU5XHU1MzViXHU1MzYxXHU1MzYzXHU1MzY1XHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc5XHU1MzdlXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhlXHU1MzkzXHU1Mzk0XHU1Mzk5XHU1MzlkXHU1M2Ex''@;'; put 'put ''XHU1M2E0XHU1M2FhXHU1M2FiXHU1M2FmXHU1M2IyXHU1M2I0XHU1M2I1XHU1M2I3XHU1M2I4XHU1M2JhXHU1M2JkXHU1M2MwXHU1M2M1XHU1M2NmXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RkXHU1M2RlXHU1M2UwXHU1M2U2XHU1M2U3XHU1M2Y1XHU1NDAyXHU1NDEzXHU1NDFhXHU1''@;'; put 'put ''NDIxXHU1NDI3XHU1NDI4XHU1NDJhXHU1NDJmXHU1NDMxXHU1NDM0XHU1NDM1XHU1NDQzXHU1NDQ0XHU1NDQ3XHU1NDRkXHU1NDRmXHU1NDVlXHU1NDYyXHU1NDY0XHU1NDY2XHU1NDY3XHU1NDY5XHU1NDZiXHU1NDZkXHU1NDZlXHU1NDc0XHU1NDdmIl0sWyI4ZmI1YTEiLCJcdTU0ODFcdTU0''@;'; put 'put ''ODNcdTU0ODVcdTU0ODhcdTU0ODlcdTU0OGRcdTU0OTFcdTU0OTVcdTU0OTZcdTU0OWNcdTU0OWZcdTU0YTFcdTU0YTZcdTU0YTdcdTU0YTlcdTU0YWFcdTU0YWRcdTU0YWVcdTU0YjFcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmJcdTU0YmZcdTU0YzZcdTU0Y2FcdTU0Y2RcdTU0Y2VcdTU0ZTBc''@;'; put 'put ''dTU0ZWFcdTU0ZWNcdTU0ZWZcdTU0ZjZcdTU0ZmNcdTU0ZmVcdTU0ZmZcdTU1MDBcdTU1MDFcdTU1MDVcdTU1MDhcdTU1MDlcdTU1MGNcdTU1MGRcdTU1MGVcdTU1MTVcdTU1MmFcdTU1MmJcdTU1MzJcdTU1MzVcdTU1MzZcdTU1M2JcdTU1M2NcdTU1M2RcdTU1NDFcdTU1NDdcdTU1NDlcdTU1''@;'; put 'put ''NGFcdTU1NGRcdTU1NTBcdTU1NTFcdTU1NThcdTU1NWFcdTU1NWJcdTU1NWVcdTU1NjBcdTU1NjFcdTU1NjRcdTU1NjZcdTU1N2ZcdTU1ODFcdTU1ODJcdTU1ODZcdTU1ODhcdTU1OGVcdTU1OGZcdTU1OTFcdTU1OTJcdTU1OTNcdTU1OTRcdTU1OTdcdTU1YTNcdTU1YTRcdTU1YWRcdTU1YjJc''@;'; put 'put ''dTU1YmZcdTU1YzFcdTU1YzNcdTU1YzZcdTU1YzlcdTU1Y2JcdTU1Y2NcdTU1Y2VcdTU1ZDFcdTU1ZDIiXSxbIjhmYjZhMSIsIlx1NTVkM1x1NTVkN1x1NTVkOFx1NTVkYlx1NTVkZVx1NTVlMlx1NTVlOVx1NTVmNlx1NTVmZlx1NTYwNVx1NTYwOFx1NTYwYVx1NTYwZCIsNSwiXHU1NjE5XHU1''@;'; put 'put ''NjJjXHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM5XHU1NjNiXHU1NjNjXHU1NjNkXHU1NjNmXHU1NjQwXHU1NjQxXHU1NjQzXHU1NjQ0XHU1NjQ2XHU1NjQ5XHU1NjRiXHU1NjRkXHU1NjRmXHU1NjU0XHU1NjVlXHU1NjYwXHU1NjYxXHU1NjYyXHU1NjYzXHU1NjY2XHU1NjY5XHU1NjZk''@;'; put 'put ''XHU1NjZmXHU1NjcxXHU1NjcyXHU1Njc1XHU1Njg0XHU1Njg1XHU1Njg4XHU1NjhiXHU1NjhjXHU1Njk1XHU1Njk5XHU1NjlhXHU1NjlkXHU1NjllXHU1NjlmXHU1NmE2XHU1NmE3XHU1NmE4XHU1NmE5XHU1NmFiXHU1NmFjXHU1NmFkXHU1NmIxXHU1NmIzXHU1NmI3XHU1NmJlXHU1NmM1XHU1''@;'; put 'put ''NmM5XHU1NmNhXHU1NmNiXHU1NmNmXHU1NmQwXHU1NmNjXHU1NmNkXHU1NmQ5XHU1NmRjXHU1NmRkXHU1NmRmXHU1NmUxXHU1NmU0Iiw0LCJcdTU2ZjFcdTU2ZWJcdTU2ZWQiXSxbIjhmYjdhMSIsIlx1NTZmNlx1NTZmN1x1NTcwMVx1NTcwMlx1NTcwN1x1NTcwYVx1NTcwY1x1NTcxMVx1NTcx''@;'; put 'put ''NVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcyMFx1NTcyMlx1NTcyM1x1NTcyNFx1NTcyNVx1NTcyOVx1NTcyYVx1NTcyY1x1NTcyZVx1NTcyZlx1NTczM1x1NTczNFx1NTczZFx1NTczZVx1NTczZlx1NTc0NVx1NTc0Nlx1NTc0Y1x1NTc0ZFx1NTc1Mlx1NTc2Mlx1NTc2NVx1NTc2N1x1NTc2OFx1''@;'; put 'put ''NTc2Ylx1NTc2ZCIsNCwiXHU1NzczXHU1Nzc0XHU1Nzc1XHU1Nzc3XHU1Nzc5XHU1NzdhXHU1NzdiXHU1NzdjXHU1NzdlXHU1NzgxXHU1NzgzXHU1NzhjXHU1Nzk0XHU1Nzk3XHU1Nzk5XHU1NzlhXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2ExXHU1Nzk1XHU1N2E3XHU1N2E4XHU1N2E5''@;'; put 'put ''XHU1N2FjXHU1N2I4XHU1N2JkXHU1N2M3XHU1N2M4XHU1N2NjXHU1N2NmXHU1N2Q1XHU1N2RkXHU1N2RlXHU1N2U0XHU1N2U2XHU1N2U3XHU1N2U5XHU1N2VkXHU1N2YwXHU1N2Y1XHU1N2Y2XHU1N2Y4XHU1N2ZkXHU1N2ZlXHU1N2ZmXHU1ODAzXHU1ODA0XHU1ODA4XHU1ODA5XHU1N2UxIl0s''@;'; put 'put ''WyI4ZmI4YTEiLCJcdTU4MGNcdTU4MGRcdTU4MWJcdTU4MWVcdTU4MWZcdTU4MjBcdTU4MjZcdTU4MjdcdTU4MmRcdTU4MzJcdTU4MzlcdTU4M2ZcdTU4NDlcdTU4NGNcdTU4NGRcdTU4NGZcdTU4NTBcdTU4NTVcdTU4NWZcdTU4NjFcdTU4NjRcdTU4NjdcdTU4NjhcdTU4NzhcdTU4N2NcdTU4''@;'; put 'put ''N2ZcdTU4ODBcdTU4ODFcdTU4ODdcdTU4ODhcdTU4ODlcdTU4OGFcdTU4OGNcdTU4OGRcdTU4OGZcdTU4OTBcdTU4OTRcdTU4OTZcdTU4OWRcdTU4YTBcdTU4YTFcdTU4YTJcdTU4YTZcdTU4YTlcdTU4YjFcdTU4YjJcdTU4YzRcdTU4YmNcdTU4YzJcdTU4YzhcdTU4Y2RcdTU4Y2VcdTU4ZDBc''@;'; put 'put ''dTU4ZDJcdTU4ZDRcdTU4ZDZcdTU4ZGFcdTU4ZGRcdTU4ZTFcdTU4ZTJcdTU4ZTlcdTU4ZjNcdTU5MDVcdTU5MDZcdTU5MGJcdTU5MGNcdTU5MTJcdTU5MTNcdTU5MTRcdTg2NDFcdTU5MWRcdTU5MjFcdTU5MjNcdTU5MjRcdTU5MjhcdTU5MmZcdTU5MzBcdTU5MzNcdTU5MzVcdTU5MzZcdTU5''@;'; put 'put ''M2ZcdTU5NDNcdTU5NDZcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWRcdTU5NWVcdTU5NWZcdTU5NjFcdTU5NjNcdTU5NmJcdTU5NmQiXSxbIjhmYjlhMSIsIlx1NTk2Zlx1NTk3Mlx1NTk3NVx1NTk3Nlx1NTk3OVx1NTk3Ylx1NTk3Y1x1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk5Mlx1NTk5''@;'; put 'put ''NVx1NTk5N1x1NTk5Zlx1NTlhNFx1NTlhN1x1NTlhZFx1NTlhZVx1NTlhZlx1NTliMFx1NTliM1x1NTliN1x1NTliYVx1NTliY1x1NTljMVx1NTljM1x1NTljNFx1NTljOFx1NTljYVx1NTljZFx1NTlkMlx1NTlkZFx1NTlkZVx1NTlkZlx1NTllM1x1NTllNFx1NTllN1x1NTllZVx1NTllZlx1''@;'; put 'put ''NTlmMVx1NTlmMlx1NTlmNFx1NTlmN1x1NWEwMFx1NWEwNFx1NWEwY1x1NWEwZFx1NWEwZVx1NWExMlx1NWExM1x1NWExZVx1NWEyM1x1NWEyNFx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyZFx1NWEzMFx1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Y1x1NWE1MFx1NWE1NVx1NWE1ZVx1NWE2''@;'; put 'put ''M1x1NWE2NVx1NWE2N1x1NWE2ZFx1NWE3N1x1NWE3YVx1NWE3Ylx1NWE3ZVx1NWE4Ylx1NWE5MFx1NWE5M1x1NWE5Nlx1NWE5OVx1NWE5Y1x1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMlx1NWFhN1x1NWFhY1x1NWFiMVx1NWFiMlx1NWFiM1x1NWFiNVx1NWFiOFx1NWFiYVx1NWFiYlx1NWFiZiJd''@;'; put 'put ''LFsiOGZiYWExIiwiXHU1YWM0XHU1YWM2XHU1YWM4XHU1YWNmXHU1YWRhXHU1YWRjXHU1YWUwXHU1YWU1XHU1YWVhXHU1YWVlXHU1YWY1XHU1YWY2XHU1YWZkXHU1YjAwXHU1YjAxXHU1YjA4XHU1YjE3XHU1YjM0XHU1YjE5XHU1YjFiXHU1YjFkXHU1YjIxXHU1YjI1XHU1YjJkXHU1YjM4XHU1''@;'; put 'put ''YjQxXHU1YjRiXHU1YjRjXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjY4XHU1YjZlXHU1YjZmXHU1YjdjXHU1YjdkXHU1YjdlXHU1YjdmXHU1YjgxXHU1Yjg0XHU1Yjg2XHU1YjhhXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkzXHU1Yjk0XHU1Yjk2XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFm''@;'; put 'put ''XHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmNkXHU1YmNmXHU1YmQ2Iiw0LCJcdTViZTBcdTViZWZcdTViZjFcdTViZjRcdTViZmRcdTVjMGNcdTVjMTdcdTVjMWVcdTVjMWZcdTVjMjNcdTVjMjZcdTVjMjlcdTVjMmJcdTVjMmNcdTVjMmVcdTVjMzBcdTVj''@;'; put 'put ''MzJcdTVjMzVcdTVjMzZcdTVjNTlcdTVjNWFcdTVjNWNcdTVjNjJcdTVjNjNcdTVjNjdcdTVjNjhcdTVjNjkiXSxbIjhmYmJhMSIsIlx1NWM2ZFx1NWM3MFx1NWM3NFx1NWM3NVx1NWM3YVx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM4N1x1NWM4OFx1NWM4YVx1NWM4Zlx1NWM5Mlx1NWM5ZFx1NWM5''@;'; put 'put ''Zlx1NWNhMFx1NWNhMlx1NWNhM1x1NWNhNlx1NWNhYVx1NWNiMlx1NWNiNFx1NWNiNVx1NWNiYVx1NWNjOVx1NWNjYlx1NWNkMlx1NWNkZFx1NWNkN1x1NWNlZVx1NWNmMVx1NWNmMlx1NWNmNFx1NWQwMVx1NWQwNlx1NWQwZFx1NWQxMlx1NWQyYlx1NWQyM1x1NWQyNFx1NWQyNlx1NWQyN1x1''@;'; put 'put ''NWQzMVx1NWQzNFx1NWQzOVx1NWQzZFx1NWQzZlx1NWQ0Mlx1NWQ0M1x1NWQ0Nlx1NWQ0OFx1NWQ1NVx1NWQ1MVx1NWQ1OVx1NWQ0YVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2NFx1NWQ2YVx1NWQ2ZFx1NWQ3MFx1NWQ3OVx1NWQ3YVx1NWQ3ZVx1NWQ3Zlx1NWQ4MVx1NWQ4M1x1NWQ4''@;'; put 'put ''OFx1NWQ4YVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5OVx1NWQ5Ylx1NWQ5Zlx1NWRhMFx1NWRhN1x1NWRhYlx1NWRiMFx1NWRiNFx1NWRiOFx1NWRiOVx1NWRjM1x1NWRjN1x1NWRjYlx1NWRkMFx1NWRjZVx1NWRkOFx1NWRkOVx1NWRlMFx1NWRlNCJdLFsiOGZiY2ExIiwiXHU1ZGU5''@;'; put 'put ''XHU1ZGY4XHU1ZGY5XHU1ZTAwXHU1ZTA3XHU1ZTBkXHU1ZTEyXHU1ZTE0XHU1ZTE1XHU1ZTE4XHU1ZTFmXHU1ZTIwXHU1ZTJlXHU1ZTI4XHU1ZTMyXHU1ZTM1XHU1ZTNlXHU1ZTRiXHU1ZTUwXHU1ZTQ5XHU1ZTUxXHU1ZTU2XHU1ZTU4XHU1ZTViXHU1ZTVjXHU1ZTVlXHU1ZTY4XHU1ZTZhIiw0''@;'; put 'put ''LCJcdTVlNzBcdTVlODBcdTVlOGJcdTVlOGVcdTVlYTJcdTVlYTRcdTVlYTVcdTVlYThcdTVlYWFcdTVlYWNcdTVlYjFcdTVlYjNcdTVlYmRcdTVlYmVcdTVlYmZcdTVlYzZcdTVlY2NcdTVlY2JcdTVlY2VcdTVlZDFcdTVlZDJcdTVlZDRcdTVlZDVcdTVlZGNcdTVlZGVcdTVlZTVcdTVlZWJc''@;'; put 'put ''dTVmMDJcdTVmMDZcdTVmMDdcdTVmMDhcdTVmMGVcdTVmMTlcdTVmMWNcdTVmMWRcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjRcdTVmMjhcdTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzRcdTVmMzZcdTVmM2JcdTVmM2RcdTVmM2ZcdTVmNDBcdTVmNDRcdTVmNDVcdTVmNDdcdTVmNGRcdTVm''@;'; put 'put ''NTBcdTVmNTRcdTVmNThcdTVmNWJcdTVmNjBcdTVmNjNcdTVmNjRcdTVmNjciXSxbIjhmYmRhMSIsIlx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY4OVx1NWY4ZFx1NWY4Zlx1NWY5Nlx1NWY5Y1x1NWY5ZFx1NWZhMlx1NWZhN1x1NWZhYlx1NWZh''@;'; put 'put ''NFx1NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiOFx1NWZjNFx1NWZjN1x1NWZjOFx1NWZjOVx1NWZjYlx1NWZkMCIsNCwiXHU1ZmRlXHU1ZmUxXHU1ZmUyXHU1ZmU4XHU1ZmU5XHU1ZmVhXHU1ZmVjXHU1ZmVkXHU1ZmVlXHU1ZmVmXHU1ZmYyXHU1ZmYzXHU1ZmY2XHU1ZmZhXHU1ZmZjXHU2''@;'; put 'put ''MDA3XHU2MDBhXHU2MDBkXHU2MDEzXHU2MDE0XHU2MDE3XHU2MDE4XHU2MDFhXHU2MDFmXHU2MDI0XHU2MDJkXHU2MDMzXHU2MDM1XHU2MDQwXHU2MDQ3XHU2MDQ4XHU2MDQ5XHU2MDRjXHU2MDUxXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDVkXHU2MDYxXHU2MDY3XHU2MDcxXHU2MDdlXHU2MDdm''@;'; put 'put ''XHU2MDgyXHU2MDg2XHU2MDg4XHU2MDhhXHU2MDhlXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk4XHU2MDlkXHU2MDllXHU2MGEyXHU2MGE0XHU2MGE1XHU2MGE4XHU2MGIwXHU2MGIxXHU2MGI3Il0sWyI4ZmJlYTEiLCJcdTYwYmJcdTYwYmVcdTYwYzJcdTYwYzRcdTYwYzhcdTYwYzlcdTYwY2Fc''@;'; put 'put ''dTYwY2JcdTYwY2VcdTYwY2ZcdTYwZDRcdTYwZDVcdTYwZDlcdTYwZGJcdTYwZGRcdTYwZGVcdTYwZTJcdTYwZTVcdTYwZjJcdTYwZjVcdTYwZjhcdTYwZmNcdTYwZmRcdTYxMDJcdTYxMDdcdTYxMGFcdTYxMGNcdTYxMTAiLDQsIlx1NjExNlx1NjExN1x1NjExOVx1NjExY1x1NjExZVx1NjEy''@;'; put 'put ''Mlx1NjEyYVx1NjEyYlx1NjEzMFx1NjEzMVx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOVx1NjE0MVx1NjE0NVx1NjE0Nlx1NjE0OVx1NjE1ZVx1NjE2MFx1NjE2Y1x1NjE3Mlx1NjE3OFx1NjE3Ylx1NjE3Y1x1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4M1x1NjE4NFx1NjE4Ylx1NjE4ZFx1NjE5Mlx1''@;'; put 'put ''NjE5M1x1NjE5N1x1NjE5OFx1NjE5Y1x1NjE5ZFx1NjE5Zlx1NjFhMFx1NjFhNVx1NjFhOFx1NjFhYVx1NjFhZFx1NjFiOFx1NjFiOVx1NjFiY1x1NjFjMFx1NjFjMVx1NjFjMlx1NjFjZVx1NjFjZlx1NjFkNVx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMVx1NjFlMlx1NjFlN1x1NjFl''@;'; put 'put ''OVx1NjFlNSJdLFsiOGZiZmExIiwiXHU2MWVjXHU2MWVkXHU2MWVmXHU2MjAxXHU2MjAzXHU2MjA0XHU2MjA3XHU2MjEzXHU2MjE1XHU2MjFjXHU2MjIwXHU2MjIyXHU2MjIzXHU2MjI3XHU2MjI5XHU2MjJiXHU2MjM5XHU2MjNkXHU2MjQyXHU2MjQzXHU2MjQ0XHU2MjQ2XHU2MjRjXHU2MjUw''@;'; put 'put ''XHU2MjUxXHU2MjUyXHU2MjU0XHU2MjU2XHU2MjVhXHU2MjVjXHU2MjY0XHU2MjZkXHU2MjZmXHU2MjczXHU2MjdhXHU2MjdkXHU2MjhkXHU2MjhlXHU2MjhmXHU2MjkwXHU2MmE2XHU2MmE4XHU2MmIzXHU2MmI2XHU2MmI3XHU2MmJhXHU2MmJlXHU2MmJmXHU2MmM0XHU2MmNlXHU2MmQ1XHU2''@;'; put 'put ''MmQ2XHU2MmRhXHU2MmVhXHU2MmYyXHU2MmY0XHU2MmZjXHU2MmZkXHU2MzAzXHU2MzA0XHU2MzBhXHU2MzBiXHU2MzBkXHU2MzEwXHU2MzEzXHU2MzE2XHU2MzE4XHU2MzI5XHU2MzJhXHU2MzJkXHU2MzM1XHU2MzM2XHU2MzM5XHU2MzNjXHU2MzQxXHU2MzQyXHU2MzQzXHU2MzQ0XHU2MzQ2''@;'; put 'put ''XHU2MzRhXHU2MzRiXHU2MzRlXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU4XHU2MzViXHU2MzY1XHU2MzY2XHU2MzZjXHU2MzZkXHU2MzcxXHU2Mzc0XHU2Mzc1Il0sWyI4ZmMwYTEiLCJcdTYzNzhcdTYzN2NcdTYzN2RcdTYzN2ZcdTYzODJcdTYzODRcdTYzODdcdTYzOGFcdTYzOTBcdTYzOTRc''@;'; put 'put ''dTYzOTVcdTYzOTlcdTYzOWFcdTYzOWVcdTYzYTRcdTYzYTZcdTYzYWRcdTYzYWVcdTYzYWZcdTYzYmRcdTYzYzFcdTYzYzVcdTYzYzhcdTYzY2VcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZGNcdTYzZTBcdTYzZTVcdTYzZWFcdTYzZWNcdTYzZjJcdTYzZjNcdTYzZjVcdTYzZjhcdTYz''@;'; put 'put ''ZjlcdTY0MDlcdTY0MGFcdTY0MTBcdTY0MTJcdTY0MTRcdTY0MThcdTY0MWVcdTY0MjBcdTY0MjJcdTY0MjRcdTY0MjVcdTY0MjlcdTY0MmFcdTY0MmZcdTY0MzBcdTY0MzVcdTY0M2RcdTY0M2ZcdTY0NGJcdTY0NGZcdTY0NTFcdTY0NTJcdTY0NTNcdTY0NTRcdTY0NWFcdTY0NWJcdTY0NWNc''@;'; put 'put ''dTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjNcdTY0NmRcdTY0NzNcdTY0NzRcdTY0N2JcdTY0N2RcdTY0ODVcdTY0ODdcdTY0OGZcdTY0OTBcdTY0OTFcdTY0OThcdTY0OTlcdTY0OWJcdTY0OWRcdTY0OWZcdTY0YTFcdTY0YTNcdTY0YTZcdTY0YThcdTY0YWNcdTY0YjNcdTY0YmRcdTY0''@;'; put 'put ''YmVcdTY0YmYiXSxbIjhmYzFhMSIsIlx1NjRjNFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZVx1NjRkMFx1NjRkMVx1NjRkNVx1NjRkN1x1NjRlNFx1NjRlNVx1NjRlOVx1NjRlYVx1NjRlZFx1NjRmMFx1NjRmNVx1NjRmN1x1NjRmYlx1NjRmZlx1NjUwMVx1NjUwNFx1NjUwOFx1NjUw''@;'; put 'put ''OVx1NjUwYVx1NjUwZlx1NjUxM1x1NjUxNFx1NjUxNlx1NjUxOVx1NjUxYlx1NjUxZVx1NjUxZlx1NjUyMlx1NjUyNlx1NjUyOVx1NjUyZVx1NjUzMVx1NjUzYVx1NjUzY1x1NjUzZFx1NjU0M1x1NjU0N1x1NjU0OVx1NjU1MFx1NjU1Mlx1NjU1NFx1NjU1Zlx1NjU2MFx1NjU2N1x1NjU2Ylx1''@;'; put 'put ''NjU3YVx1NjU3ZFx1NjU4MVx1NjU4NVx1NjU4YVx1NjU5Mlx1NjU5NVx1NjU5OFx1NjU5ZFx1NjVhMFx1NjVhM1x1NjVhNlx1NjVhZVx1NjViMlx1NjViM1x1NjViNFx1NjViZlx1NjVjMlx1NjVjOFx1NjVjOVx1NjVjZVx1NjVkMFx1NjVkNFx1NjVkNlx1NjVkOFx1NjVkZlx1NjVmMFx1NjVm''@;'; put 'put ''Mlx1NjVmNFx1NjVmNVx1NjVmOVx1NjVmZVx1NjVmZlx1NjYwMFx1NjYwNFx1NjYwOFx1NjYwOVx1NjYwZFx1NjYxMVx1NjYxMlx1NjYxNVx1NjYxNlx1NjYxZCJdLFsiOGZjMmExIiwiXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJj''@;'; put 'put ''XHU2NjJlXHU2NjMwXHU2NjMxXHU2NjMzXHU2NjM5XHU2NjM3XHU2NjQwXHU2NjQ1XHU2NjQ2XHU2NjRhXHU2NjRjXHU2NjUxXHU2NjRlXHU2NjU3XHU2NjU4XHU2NjU5XHU2NjViXHU2NjVjXHU2NjYwXHU2NjYxXHU2NmZiXHU2NjZhXHU2NjZiXHU2NjZjXHU2NjdlXHU2NjczXHU2Njc1XHU2''@;'; put 'put ''NjdmXHU2Njc3XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjgwXHU2NjdjXHU2NjhiXHU2NjhjXHU2NjhkXHU2NjkwXHU2NjkyXHU2Njk5XHU2NjlhXHU2NjliXHU2NjljXHU2NjlmXHU2NmEwXHU2NmE0XHU2NmFkXHU2NmIxXHU2NmIyXHU2NmI1XHU2NmJiXHU2NmJmXHU2NmMwXHU2NmMyXHU2NmMz''@;'; put 'put ''XHU2NmM4XHU2NmNjXHU2NmNlXHU2NmNmXHU2NmQ0XHU2NmRiXHU2NmRmXHU2NmU4XHU2NmViXHU2NmVjXHU2NmVlXHU2NmZhXHU2NzA1XHU2NzA3XHU2NzBlXHU2NzEzXHU2NzE5XHU2NzFjXHU2NzIwXHU2NzIyXHU2NzMzXHU2NzNlXHU2NzQ1XHU2NzQ3XHU2NzQ4XHU2NzRjXHU2NzU0XHU2''@;'; put 'put ''NzU1XHU2NzVkIl0sWyI4ZmMzYTEiLCJcdTY3NjZcdTY3NmNcdTY3NmVcdTY3NzRcdTY3NzZcdTY3N2JcdTY3ODFcdTY3ODRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTNcdTY3OTZcdTY3OThcdTY3OTlcdTY3OWJcdTY3YjBcdTY3YjFcdTY3YjJcdTY3YjVcdTY3YmJcdTY3YmNcdTY3YmRcdTY3''@;'; put 'put ''ZjlcdTY3YzBcdTY3YzJcdTY3YzNcdTY3YzVcdTY3YzhcdTY3YzlcdTY3ZDJcdTY3ZDdcdTY3ZDlcdTY3ZGNcdTY3ZTFcdTY3ZTZcdTY3ZjBcdTY3ZjJcdTY3ZjZcdTY3ZjdcdTY4NTJcdTY4MTRcdTY4MTlcdTY4MWRcdTY4MWZcdTY4MjhcdTY4MjdcdTY4MmNcdTY4MmRcdTY4MmZcdTY4MzBc''@;'; put 'put ''dTY4MzFcdTY4MzNcdTY4M2JcdTY4M2ZcdTY4NDRcdTY4NDVcdTY4NGFcdTY4NGNcdTY4NTVcdTY4NTdcdTY4NThcdTY4NWJcdTY4NmJcdTY4NmUiLDQsIlx1Njg3NVx1Njg3OVx1Njg3YVx1Njg3Ylx1Njg3Y1x1Njg4Mlx1Njg4NFx1Njg4Nlx1Njg4OFx1Njg5Nlx1Njg5OFx1Njg5YVx1Njg5''@;'; put 'put ''Y1x1NjhhMVx1NjhhM1x1NjhhNVx1NjhhOVx1NjhhYVx1NjhhZVx1NjhiMlx1NjhiYlx1NjhjNVx1NjhjOFx1NjhjY1x1NjhjZiJdLFsiOGZjNGExIiwiXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ2XHU2OGQ5XHU2OGRjXHU2OGRkXHU2OGU1XHU2OGU4XHU2OGVhXHU2OGViXHU2OGVjXHU2OGVk''@;'; put 'put ''XHU2OGYwXHU2OGYxXHU2OGY1XHU2OGY2XHU2OGZiXHU2OGZjXHU2OGZkXHU2OTA2XHU2OTA5XHU2OTBhXHU2OTEwXHU2OTExXHU2OTEzXHU2OTE2XHU2OTE3XHU2OTMxXHU2OTMzXHU2OTM1XHU2OTM4XHU2OTNiXHU2OTQyXHU2OTQ1XHU2OTQ5XHU2OTRlXHU2OTU3XHU2OTViXHU2OTYzXHU2''@;'; put 'put ''OTY0XHU2OTY1XHU2OTY2XHU2OTY4XHU2OTY5XHU2OTZjXHU2OTcwXHU2OTcxXHU2OTcyXHU2OTdhXHU2OTdiXHU2OTdmXHU2OTgwXHU2OThkXHU2OTkyXHU2OTk2XHU2OTk4XHU2OWExXHU2OWE1XHU2OWE2XHU2OWE4XHU2OWFiXHU2OWFkXHU2OWFmXHU2OWI3XHU2OWI4XHU2OWJhXHU2OWJj''@;'; put 'put ''XHU2OWM1XHU2OWM4XHU2OWQxXHU2OWQ2XHU2OWQ3XHU2OWUyXHU2OWU1XHU2OWVlXHU2OWVmXHU2OWYxXHU2OWYzXHU2OWY1XHU2OWZlXHU2YTAwXHU2YTAxXHU2YTAzXHU2YTBmXHU2YTExXHU2YTE1XHU2YTFhXHU2YTFkXHU2YTIwXHU2YTI0XHU2YTI4XHU2YTMwXHU2YTMyIl0sWyI4ZmM1''@;'; put 'put ''YTEiLCJcdTZhMzRcdTZhMzdcdTZhM2JcdTZhM2VcdTZhM2ZcdTZhNDVcdTZhNDZcdTZhNDlcdTZhNGFcdTZhNGVcdTZhNTBcdTZhNTFcdTZhNTJcdTZhNTVcdTZhNTZcdTZhNWJcdTZhNjRcdTZhNjdcdTZhNmFcdTZhNzFcdTZhNzNcdTZhN2VcdTZhODFcdTZhODNcdTZhODZcdTZhODdcdTZh''@;'; put 'put ''ODlcdTZhOGJcdTZhOTFcdTZhOWJcdTZhOWRcdTZhOWVcdTZhOWZcdTZhYTVcdTZhYWJcdTZhYWZcdTZhYjBcdTZhYjFcdTZhYjRcdTZhYmRcdTZhYmVcdTZhYmZcdTZhYzZcdTZhYzlcdTZhYzhcdTZhY2NcdTZhZDBcdTZhZDRcdTZhZDVcdTZhZDZcdTZhZGNcdTZhZGRcdTZhZTRcdTZhZTdc''@;'; put 'put ''dTZhZWNcdTZhZjBcdTZhZjFcdTZhZjJcdTZhZmNcdTZhZmRcdTZiMDJcdTZiMDNcdTZiMDZcdTZiMDdcdTZiMDlcdTZiMGZcdTZiMTBcdTZiMTFcdTZiMTdcdTZiMWJcdTZiMWVcdTZiMjRcdTZiMjhcdTZiMmJcdTZiMmNcdTZiMmZcdTZiMzVcdTZiMzZcdTZiM2JcdTZiM2ZcdTZiNDZcdTZi''@;'; put 'put ''NGFcdTZiNGRcdTZiNTJcdTZiNTZcdTZiNThcdTZiNWRcdTZiNjBcdTZiNjdcdTZiNmJcdTZiNmVcdTZiNzBcdTZiNzVcdTZiN2QiXSxbIjhmYzZhMSIsIlx1NmI3ZVx1NmI4Mlx1NmI4NVx1NmI5N1x1NmI5Ylx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhOFx1NmJhOVx1NmJhY1x1NmJh''@;'; put 'put ''ZFx1NmJhZVx1NmJiMFx1NmJiOFx1NmJiOVx1NmJiZFx1NmJiZVx1NmJjM1x1NmJjNFx1NmJjOVx1NmJjY1x1NmJkNlx1NmJkYVx1NmJlMVx1NmJlM1x1NmJlNlx1NmJlN1x1NmJlZVx1NmJmMVx1NmJmN1x1NmJmOVx1NmJmZlx1NmMwMlx1NmMwNFx1NmMwNVx1NmMwOVx1NmMwZFx1NmMwZVx1''@;'; put 'put ''NmMxMFx1NmMxMlx1NmMxOVx1NmMxZlx1NmMyNlx1NmMyN1x1NmMyOFx1NmMyY1x1NmMyZVx1NmMzM1x1NmMzNVx1NmMzNlx1NmMzYVx1NmMzYlx1NmMzZlx1NmM0YVx1NmM0Ylx1NmM0ZFx1NmM0Zlx1NmM1Mlx1NmM1NFx1NmM1OVx1NmM1Ylx1NmM1Y1x1NmM2Ylx1NmM2ZFx1NmM2Zlx1NmM3''@;'; put 'put ''NFx1NmM3Nlx1NmM3OFx1NmM3OVx1NmM3Ylx1NmM4NVx1NmM4Nlx1NmM4N1x1NmM4OVx1NmM5NFx1NmM5NVx1NmM5N1x1NmM5OFx1NmM5Y1x1NmM5Zlx1NmNiMFx1NmNiMlx1NmNiNFx1NmNjMlx1NmNjNlx1NmNjZFx1NmNjZlx1NmNkMFx1NmNkMVx1NmNkMlx1NmNkNFx1NmNkNiJdLFsiOGZj''@;'; put 'put ''N2ExIiwiXHU2Y2RhXHU2Y2RjXHU2Y2UwXHU2Y2U3XHU2Y2U5XHU2Y2ViXHU2Y2VjXHU2Y2VlXHU2Y2YyXHU2Y2Y0XHU2ZDA0XHU2ZDA3XHU2ZDBhXHU2ZDBlXHU2ZDBmXHU2ZDExXHU2ZDEzXHU2ZDFhXHU2ZDI2XHU2ZDI3XHU2ZDI4XHU2YzY3XHU2ZDJlXHU2ZDJmXHU2ZDMxXHU2ZDM5XHU2''@;'; put 'put ''ZDNjXHU2ZDNmXHU2ZDU3XHU2ZDVlXHU2ZDVmXHU2ZDYxXHU2ZDY1XHU2ZDY3XHU2ZDZmXHU2ZDcwXHU2ZDdjXHU2ZDgyXHU2ZDg3XHU2ZDkxXHU2ZDkyXHU2ZDk0XHU2ZDk2XHU2ZDk3XHU2ZDk4XHU2ZGFhXHU2ZGFjXHU2ZGI0XHU2ZGI3XHU2ZGI5XHU2ZGJkXHU2ZGJmXHU2ZGM0XHU2ZGM4''@;'; put 'put ''XHU2ZGNhXHU2ZGNlXHU2ZGNmXHU2ZGQ2XHU2ZGRiXHU2ZGRkXHU2ZGRmXHU2ZGUwXHU2ZGUyXHU2ZGU1XHU2ZGU5XHU2ZGVmXHU2ZGYwXHU2ZGY0XHU2ZGY2XHU2ZGZjXHU2ZTAwXHU2ZTA0XHU2ZTFlXHU2ZTIyXHU2ZTI3XHU2ZTMyXHU2ZTM2XHU2ZTM5XHU2ZTNiXHU2ZTNjXHU2ZTQ0XHU2''@;'; put 'put ''ZTQ1XHU2ZTQ4XHU2ZTQ5XHU2ZTRiXHU2ZTRmXHU2ZTUxXHU2ZTUyXHU2ZTUzXHU2ZTU0XHU2ZTU3XHU2ZTVjXHU2ZTVkXHU2ZTVlIl0sWyI4ZmM4YTEiLCJcdTZlNjJcdTZlNjNcdTZlNjhcdTZlNzNcdTZlN2JcdTZlN2RcdTZlOGRcdTZlOTNcdTZlOTlcdTZlYTBcdTZlYTdcdTZlYWRcdTZl''@;'; put 'put ''YWVcdTZlYjFcdTZlYjNcdTZlYmJcdTZlYmZcdTZlYzBcdTZlYzFcdTZlYzNcdTZlYzdcdTZlYzhcdTZlY2FcdTZlY2RcdTZlY2VcdTZlY2ZcdTZlZWJcdTZlZWRcdTZlZWVcdTZlZjlcdTZlZmJcdTZlZmRcdTZmMDRcdTZmMDhcdTZmMGFcdTZmMGNcdTZmMGRcdTZmMTZcdTZmMThcdTZmMWFc''@;'; put 'put ''dTZmMWJcdTZmMjZcdTZmMjlcdTZmMmFcdTZmMmZcdTZmMzBcdTZmMzNcdTZmMzZcdTZmM2JcdTZmM2NcdTZmMmRcdTZmNGZcdTZmNTFcdTZmNTJcdTZmNTNcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWRcdTZmNWVcdTZmNjFcdTZmNjJcdTZmNjhcdTZmNmNcdTZmN2RcdTZmN2VcdTZmODNcdTZm''@;'; put 'put ''ODdcdTZmODhcdTZmOGJcdTZmOGNcdTZmOGRcdTZmOTBcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTZcdTZmOWFcdTZmOWZcdTZmYTBcdTZmYTVcdTZmYTZcdTZmYTdcdTZmYThcdTZmYWVcdTZmYWZcdTZmYjBcdTZmYjVcdTZmYjZcdTZmYmNcdTZmYzVcdTZmYzdcdTZmYzhcdTZmY2EiXSxbIjhm''@;'; put 'put ''YzlhMSIsIlx1NmZkYVx1NmZkZVx1NmZlOFx1NmZlOVx1NmZmMFx1NmZmNVx1NmZmOVx1NmZmY1x1NmZmZFx1NzAwMFx1NzAwNVx1NzAwNlx1NzAwN1x1NzAwZFx1NzAxN1x1NzAyMFx1NzAyM1x1NzAyZlx1NzAzNFx1NzAzN1x1NzAzOVx1NzAzY1x1NzA0M1x1NzA0NFx1NzA0OFx1NzA0OVx1''@;'; put 'put ''NzA0YVx1NzA0Ylx1NzA1NFx1NzA1NVx1NzA1ZFx1NzA1ZVx1NzA0ZVx1NzA2NFx1NzA2NVx1NzA2Y1x1NzA2ZVx1NzA3NVx1NzA3Nlx1NzA3ZVx1NzA4MVx1NzA4NVx1NzA4Nlx1NzA5NCIsNCwiXHU3MDliXHU3MGE0XHU3MGFiXHU3MGIwXHU3MGIxXHU3MGI0XHU3MGI3XHU3MGNhXHU3MGQx''@;'; put 'put ''XHU3MGQzXHU3MGQ0XHU3MGQ1XHU3MGQ2XHU3MGQ4XHU3MGRjXHU3MGU0XHU3MGZhXHU3MTAzIiw0LCJcdTcxMGJcdTcxMGNcdTcxMGZcdTcxMWVcdTcxMjBcdTcxMmJcdTcxMmRcdTcxMmZcdTcxMzBcdTcxMzFcdTcxMzhcdTcxNDFcdTcxNDVcdTcxNDZcdTcxNDdcdTcxNGFcdTcxNGJcdTcx''@;'; put 'put ''NTBcdTcxNTJcdTcxNTdcdTcxNWFcdTcxNWNcdTcxNWVcdTcxNjAiXSxbIjhmY2FhMSIsIlx1NzE2OFx1NzE3OVx1NzE4MFx1NzE4NVx1NzE4N1x1NzE4Y1x1NzE5Mlx1NzE5YVx1NzE5Ylx1NzFhMFx1NzFhMlx1NzFhZlx1NzFiMFx1NzFiMlx1NzFiM1x1NzFiYVx1NzFiZlx1NzFjMFx1NzFj''@;'; put 'put ''MVx1NzFjNFx1NzFjYlx1NzFjY1x1NzFkM1x1NzFkNlx1NzFkOVx1NzFkYVx1NzFkY1x1NzFmOFx1NzFmZVx1NzIwMFx1NzIwN1x1NzIwOFx1NzIwOVx1NzIxM1x1NzIxN1x1NzIxYVx1NzIxZFx1NzIxZlx1NzIyNFx1NzIyYlx1NzIyZlx1NzIzNFx1NzIzOFx1NzIzOVx1NzI0MVx1NzI0Mlx1''@;'; put 'put ''NzI0M1x1NzI0NVx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1M1x1NzI1NVx1NzI1Nlx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1NzI2OFx1NzI2Ylx1NzI2ZVx1NzI2Zlx1NzI3MVx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzI4NFx1NzI4OVx1NzI4ZFx1NzI4ZVx1NzI5''@;'; put 'put ''M1x1NzI5Ylx1NzJhOFx1NzJhZFx1NzJhZVx1NzJiMVx1NzJiNFx1NzJiZVx1NzJjMVx1NzJjN1x1NzJjOVx1NzJjY1x1NzJkNVx1NzJkNlx1NzJkOFx1NzJkZlx1NzJlNVx1NzJmM1x1NzJmNFx1NzJmYVx1NzJmYiJdLFsiOGZjYmExIiwiXHU3MmZlXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA3''@;'; put 'put ''XHU3MzBiXHU3MzBkXHU3MzEyXHU3MzEzXHU3MzE4XHU3MzE5XHU3MzFlXHU3MzIyXHU3MzI0XHU3MzI3XHU3MzI4XHU3MzJjXHU3MzMxXHU3MzMyXHU3MzM1XHU3MzNhXHU3MzNiXHU3MzNkXHU3MzQzXHU3MzRkXHU3MzUwXHU3MzUyXHU3MzU2XHU3MzU4XHU3MzVkXHU3MzVlXHU3MzVmXHU3''@;'; put 'put ''MzYwXHU3MzY2XHU3MzY3XHU3MzY5XHU3MzZiXHU3MzZjXHU3MzZlXHU3MzZmXHU3MzcxXHU3Mzc3XHU3Mzc5XHU3MzdjXHU3MzgwXHU3MzgxXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3MzhlXHU3MzkwXHU3MzkzXHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3MzljXHU3MzllXHU3MzlmXHU3M2EwXHU3M2Ey''@;'; put 'put ''XHU3M2E1XHU3M2E2XHU3M2FhXHU3M2FiXHU3M2FkXHU3M2I1XHU3M2I3XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JmXHU3M2M1XHU3M2M2XHU3M2M5XHU3M2NiXHU3M2NjXHU3M2NmXHU3M2QyXHU3M2QzXHU3M2Q2XHU3M2Q5XHU3M2RkXHU3M2UxXHU3M2UzXHU3M2U2XHU3M2U3XHU3M2U5XHU3''@;'; put 'put ''M2Y0XHU3M2Y1XHU3M2Y3XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZkIl0sWyI4ZmNjYTEiLCJcdTczZmZcdTc0MDBcdTc0MDFcdTc0MDRcdTc0MDdcdTc0MGFcdTc0MTFcdTc0MWFcdTc0MWJcdTc0MjRcdTc0MjZcdTc0MjgiLDksIlx1NzQzOVx1NzQ0MFx1NzQ0M1x1NzQ0NFx1NzQ0Nlx1NzQ0''@;'; put 'put ''N1x1NzQ0Ylx1NzQ0ZFx1NzQ1MVx1NzQ1Mlx1NzQ1N1x1NzQ1ZFx1NzQ2Mlx1NzQ2Nlx1NzQ2N1x1NzQ2OFx1NzQ2Ylx1NzQ2ZFx1NzQ2ZVx1NzQ3MVx1NzQ3Mlx1NzQ4MFx1NzQ4MVx1NzQ4NVx1NzQ4Nlx1NzQ4N1x1NzQ4OVx1NzQ4Zlx1NzQ5MFx1NzQ5MVx1NzQ5Mlx1NzQ5OFx1NzQ5OVx1''@;'; put 'put ''NzQ5YVx1NzQ5Y1x1NzQ5Zlx1NzRhMFx1NzRhMVx1NzRhM1x1NzRhNlx1NzRhOFx1NzRhOVx1NzRhYVx1NzRhYlx1NzRhZVx1NzRhZlx1NzRiMVx1NzRiMlx1NzRiNVx1NzRiOVx1NzRiYlx1NzRiZlx1NzRjOFx1NzRjOVx1NzRjY1x1NzRkMFx1NzRkM1x1NzRkOFx1NzRkYVx1NzRkYlx1NzRk''@;'; put 'put ''ZVx1NzRkZlx1NzRlNFx1NzRlOFx1NzRlYVx1NzRlYlx1NzRlZlx1NzRmNFx1NzRmYVx1NzRmYlx1NzRmY1x1NzRmZlx1NzUwNiJdLFsiOGZjZGExIiwiXHU3NTEyXHU3NTE2XHU3NTE3XHU3NTIwXHU3NTIxXHU3NTI0XHU3NTI3XHU3NTI5XHU3NTJhXHU3NTJmXHU3NTM2XHU3NTM5XHU3NTNk''@;'; put 'put ''XHU3NTNlXHU3NTNmXHU3NTQwXHU3NTQzXHU3NTQ3XHU3NTQ4XHU3NTRlXHU3NTUwXHU3NTUyXHU3NTU3XHU3NTVlXHU3NTVmXHU3NTYxXHU3NTZmXHU3NTcxXHU3NTc5Iiw1LCJcdTc1ODFcdTc1ODVcdTc1OTBcdTc1OTJcdTc1OTNcdTc1OTVcdTc1OTlcdTc1OWNcdTc1YTJcdTc1YTRcdTc1''@;'; put 'put ''YjRcdTc1YmFcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzRcdTc1YzZcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDdcdTc1ZGNcdTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1ZTRcdTc1ZTdcdTc1ZWNcdTc1ZWVcdTc1ZWZcdTc1ZjFcdTc1ZjlcdTc2MDBcdTc2MDJcdTc2MDNcdTc2MDRcdTc2MDdcdTc2MDhc''@;'; put 'put ''dTc2MGFcdTc2MGNcdTc2MGZcdTc2MTJcdTc2MTNcdTc2MTVcdTc2MTZcdTc2MTlcdTc2MWJcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjNcdTc2MjVcdTc2MjZcdTc2MjlcdTc2MmRcdTc2MzJcdTc2MzNcdTc2MzVcdTc2MzhcdTc2MzkiXSxbIjhmY2VhMSIsIlx1NzYzYVx1NzYzY1x1NzY0YVx1''@;'; put 'put ''NzY0MFx1NzY0MVx1NzY0M1x1NzY0NFx1NzY0NVx1NzY0OVx1NzY0Ylx1NzY1NVx1NzY1OVx1NzY1Zlx1NzY2NFx1NzY2NVx1NzY2ZFx1NzY2ZVx1NzY2Zlx1NzY3MVx1NzY3NFx1NzY4MVx1NzY4NVx1NzY4Y1x1NzY4ZFx1NzY5NVx1NzY5Ylx1NzY5Y1x1NzY5ZFx1NzY5Zlx1NzZhMFx1NzZh''@;'; put 'put ''MiIsNiwiXHU3NmFhXHU3NmFkXHU3NmJkXHU3NmMxXHU3NmM1XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmNlXHU3NmQ0XHU3NmQ5XHU3NmUwXHU3NmU2XHU3NmU4XHU3NmVjXHU3NmYwXHU3NmYxXHU3NmY2XHU3NmY5XHU3NmZjXHU3NzAwXHU3NzA2XHU3NzBhXHU3NzBlXHU3NzEyXHU3NzE0XHU3''@;'; put 'put ''NzE1XHU3NzE3XHU3NzE5XHU3NzFhXHU3NzFjXHU3NzIyXHU3NzI4XHU3NzJkXHU3NzJlXHU3NzJmXHU3NzM0XHU3NzM1XHU3NzM2XHU3NzM5XHU3NzNkXHU3NzNlXHU3NzQyXHU3NzQ1XHU3NzQ2XHU3NzRhXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzU2XHU3NzU3XHU3NzVjXHU3NzVl''@;'; put 'put ''XHU3NzVmXHU3NzYwXHU3NzYyIl0sWyI4ZmNmYTEiLCJcdTc3NjRcdTc3NjdcdTc3NmFcdTc3NmNcdTc3NzBcdTc3NzJcdTc3NzNcdTc3NzRcdTc3N2FcdTc3N2RcdTc3ODBcdTc3ODRcdTc3OGNcdTc3OGRcdTc3OTRcdTc3OTVcdTc3OTZcdTc3OWFcdTc3OWZcdTc3YTJcdTc3YTdcdTc3YWFc''@;'; put 'put ''dTc3YWVcdTc3YWZcdTc3YjFcdTc3YjVcdTc3YmVcdTc3YzNcdTc3YzlcdTc3ZDFcdTc3ZDJcdTc3ZDVcdTc3ZDlcdTc3ZGVcdTc3ZGZcdTc3ZTBcdTc3ZTRcdTc3ZTZcdTc3ZWFcdTc3ZWNcdTc3ZjBcdTc3ZjFcdTc3ZjRcdTc3ZjhcdTc3ZmJcdTc4MDVcdTc4MDZcdTc4MDlcdTc4MGRcdTc4''@;'; put 'put ''MGVcdTc4MTFcdTc4MWRcdTc4MjFcdTc4MjJcdTc4MjNcdTc4MmRcdTc4MmVcdTc4MzBcdTc4MzVcdTc4MzdcdTc4NDNcdTc4NDRcdTc4NDdcdTc4NDhcdTc4NGNcdTc4NGVcdTc4NTJcdTc4NWNcdTc4NWVcdTc4NjBcdTc4NjFcdTc4NjNcdTc4NjRcdTc4NjhcdTc4NmFcdTc4NmVcdTc4N2Fc''@;'; put 'put ''dTc4N2VcdTc4OGFcdTc4OGZcdTc4OTRcdTc4OThcdTc4YTFcdTc4OWRcdTc4OWVcdTc4OWZcdTc4YTRcdTc4YThcdTc4YWNcdTc4YWRcdTc4YjBcdTc4YjFcdTc4YjJcdTc4YjMiXSxbIjhmZDBhMSIsIlx1NzhiYlx1NzhiZFx1NzhiZlx1NzhjN1x1NzhjOFx1NzhjOVx1NzhjY1x1NzhjZVx1''@;'; put 'put ''NzhkMlx1NzhkM1x1NzhkNVx1NzhkNlx1NzhlNFx1NzhkYlx1NzhkZlx1NzhlMFx1NzhlMVx1NzhlNlx1NzhlYVx1NzhmMlx1NzhmM1x1NzkwMFx1NzhmNlx1NzhmN1x1NzhmYVx1NzhmYlx1NzhmZlx1NzkwNlx1NzkwY1x1NzkxMFx1NzkxYVx1NzkxY1x1NzkxZVx1NzkxZlx1NzkyMFx1Nzky''@;'; put 'put ''NVx1NzkyN1x1NzkyOVx1NzkyZFx1NzkzMVx1NzkzNFx1NzkzNVx1NzkzYlx1NzkzZFx1NzkzZlx1Nzk0NFx1Nzk0NVx1Nzk0Nlx1Nzk0YVx1Nzk0Ylx1Nzk0Zlx1Nzk1MVx1Nzk1NFx1Nzk1OFx1Nzk1Ylx1Nzk1Y1x1Nzk2N1x1Nzk2OVx1Nzk2Ylx1Nzk3Mlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1''@;'; put 'put ''Nzk3ZVx1Nzk4Ylx1Nzk4Y1x1Nzk5MVx1Nzk5M1x1Nzk5NFx1Nzk5NVx1Nzk5Nlx1Nzk5OFx1Nzk5Ylx1Nzk5Y1x1NzlhMVx1NzlhOFx1NzlhOVx1NzlhYlx1NzlhZlx1NzliMVx1NzliNFx1NzliOFx1NzliYlx1NzljMlx1NzljNFx1NzljN1x1NzljOFx1NzljYVx1NzljZlx1NzlkNFx1Nzlk''@;'; put 'put ''Nlx1NzlkYVx1NzlkZFx1NzlkZSJdLFsiOGZkMWExIiwiXHU3OWUwXHU3OWUyXHU3OWU1XHU3OWVhXHU3OWViXHU3OWVkXHU3OWYxXHU3OWY4XHU3OWZjXHU3YTAyXHU3YTAzXHU3YTA3XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTExXHU3YTE1XHU3YTFiXHU3YTFlXHU3YTIxXHU3YTI3XHU3YTJi''@;'; put 'put ''XHU3YTJkXHU3YTJmXHU3YTMwXHU3YTM0XHU3YTM1XHU3YTM4XHU3YTM5XHU3YTNhXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTRjXHU3YTU1XHU3YTU2XHU3YTU5XHU3YTVjXHU3YTVkXHU3YTVmXHU3YTYwXHU3YTY1XHU3YTY3XHU3YTZhXHU3YTZkXHU3YTc1XHU3YTc4XHU3YTdlXHU3''@;'; put 'put ''YTgwXHU3YTgyXHU3YTg1XHU3YTg2XHU3YThhXHU3YThiXHU3YTkwXHU3YTkxXHU3YTk0XHU3YTllXHU3YWEwXHU3YWEzXHU3YWFjXHU3YWIzXHU3YWI1XHU3YWI5XHU3YWJiXHU3YWJjXHU3YWM2XHU3YWM5XHU3YWNjXHU3YWNlXHU3YWQxXHU3YWRiXHU3YWU4XHU3YWU5XHU3YWViXHU3YWVj''@;'; put 'put ''XHU3YWYxXHU3YWY0XHU3YWZiXHU3YWZkXHU3YWZlXHU3YjA3XHU3YjE0XHU3YjFmXHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJhXHU3YjJiXHU3YjJkXHU3YjJlXHU3YjJmXHU3YjMwIl0sWyI4ZmQyYTEiLCJcdTdiMzFcdTdiMzRcdTdiM2RcdTdiM2ZcdTdiNDBcdTdiNDFcdTdiNDdcdTdiNGVc''@;'; put 'put ''dTdiNTVcdTdiNjBcdTdiNjRcdTdiNjZcdTdiNjlcdTdiNmFcdTdiNmRcdTdiNmZcdTdiNzJcdTdiNzNcdTdiNzdcdTdiODRcdTdiODlcdTdiOGVcdTdiOTBcdTdiOTFcdTdiOTZcdTdiOWJcdTdiOWVcdTdiYTBcdTdiYTVcdTdiYWNcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjVcdTdiYjZcdTdi''@;'; put 'put ''YmFcdTdiYmJcdTdiYmNcdTdiYmRcdTdiYzJcdTdiYzVcdTdiYzhcdTdiY2FcdTdiZDRcdTdiZDZcdTdiZDdcdTdiZDlcdTdiZGFcdTdiZGJcdTdiZThcdTdiZWFcdTdiZjJcdTdiZjRcdTdiZjVcdTdiZjhcdTdiZjlcdTdiZmFcdTdiZmNcdTdiZmVcdTdjMDFcdTdjMDJcdTdjMDNcdTdjMDRc''@;'; put 'put ''dTdjMDZcdTdjMDlcdTdjMGJcdTdjMGNcdTdjMGVcdTdjMGZcdTdjMTlcdTdjMWJcdTdjMjBcdTdjMjVcdTdjMjZcdTdjMjhcdTdjMmNcdTdjMzFcdTdjMzNcdTdjMzRcdTdjMzZcdTdjMzlcdTdjM2FcdTdjNDZcdTdjNGFcdTdjNTVcdTdjNTFcdTdjNTJcdTdjNTNcdTdjNTkiLDVdLFsiOGZk''@;'; put 'put ''M2ExIiwiXHU3YzYxXHU3YzYzXHU3YzY3XHU3YzY5XHU3YzZkXHU3YzZlXHU3YzcwXHU3YzcyXHU3Yzc5XHU3YzdjXHU3YzdkXHU3Yzg2XHU3Yzg3XHU3YzhmXHU3Yzk0XHU3YzllXHU3Y2EwXHU3Y2E2XHU3Y2IwXHU3Y2I2XHU3Y2I3XHU3Y2JhXHU3Y2JiXHU3Y2JjXHU3Y2JmXHU3Y2M0XHU3''@;'; put 'put ''Y2M3XHU3Y2M4XHU3Y2M5XHU3Y2NkXHU3Y2NmXHU3Y2QzXHU3Y2Q0XHU3Y2Q1XHU3Y2Q3XHU3Y2Q5XHU3Y2RhXHU3Y2RkXHU3Y2U2XHU3Y2U5XHU3Y2ViXHU3Y2Y1XHU3ZDAzXHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBmXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE2XHU3ZDFkXHU3ZDFlXHU3ZDIz''@;'; put 'put ''XHU3ZDI2XHU3ZDJhXHU3ZDJkXHU3ZDMxXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDQwXHU3ZDQxXHU3ZDQ3XHU3ZDQ4XHU3ZDRkXHU3ZDUxXHU3ZDUzXHU3ZDU3XHU3ZDU5XHU3ZDVhXHU3ZDVjXHU3ZDVkXHU3ZDY1XHU3ZDY3XHU3ZDZhXHU3ZDcwXHU3ZDc4XHU3ZDdhXHU3ZDdiXHU3ZDdmXHU3''@;'; put 'put ''ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg1XHU3ZDg2XHU3ZDg4XHU3ZDhiXHU3ZDhjXHU3ZDhkXHU3ZDkxXHU3ZDk2XHU3ZDk3XHU3ZDlkIl0sWyI4ZmQ0YTEiLCJcdTdkOWVcdTdkYTZcdTdkYTdcdTdkYWFcdTdkYjNcdTdkYjZcdTdkYjdcdTdkYjlcdTdkYzIiLDQsIlx1N2RjY1x1N2RjZFx1N2Rj''@;'; put 'put ''ZVx1N2RkN1x1N2RkOVx1N2UwMFx1N2RlMlx1N2RlNVx1N2RlNlx1N2RlYVx1N2RlYlx1N2RlZFx1N2RmMVx1N2RmNVx1N2RmNlx1N2RmOVx1N2RmYVx1N2UwOFx1N2UxMFx1N2UxMVx1N2UxNVx1N2UxN1x1N2UxY1x1N2UxZFx1N2UyMFx1N2UyN1x1N2UyOFx1N2UyY1x1N2UyZFx1N2UyZlx1''@;'; put 'put ''N2UzM1x1N2UzNlx1N2UzZlx1N2U0NFx1N2U0NVx1N2U0N1x1N2U0ZVx1N2U1MFx1N2U1Mlx1N2U1OFx1N2U1Zlx1N2U2MVx1N2U2Mlx1N2U2NVx1N2U2Ylx1N2U2ZVx1N2U2Zlx1N2U3M1x1N2U3OFx1N2U3ZVx1N2U4MVx1N2U4Nlx1N2U4N1x1N2U4YVx1N2U4ZFx1N2U5MVx1N2U5NVx1N2U5''@;'; put 'put ''OFx1N2U5YVx1N2U5ZFx1N2U5ZVx1N2YzY1x1N2YzYlx1N2YzZFx1N2YzZVx1N2YzZlx1N2Y0M1x1N2Y0NFx1N2Y0N1x1N2Y0Zlx1N2Y1Mlx1N2Y1M1x1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y2MVx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2ZCJdLFsiOGZkNWExIiwiXHU3ZjcxXHU3Zjdk''@;'; put 'put ''XHU3ZjdlXHU3ZjdmXHU3ZjgwXHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3Zjk2XHU3Zjk3XHU3ZjljXHU3ZmExXHU3ZmEyXHU3ZmE2XHU3ZmFhXHU3ZmFkXHU3ZmI0XHU3ZmJjXHU3ZmJmXHU3ZmMwXHU3ZmMzXHU3ZmM4XHU3ZmNlXHU3ZmNmXHU3ZmRiXHU3ZmRmXHU3ZmUzXHU3''@;'; put 'put ''ZmU1XHU3ZmU4XHU3ZmVjXHU3ZmVlXHU3ZmVmXHU3ZmYyXHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDA3XHU4MDA4XHU4MDBhXHU4MDBkXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDE0XHU4MDE2XHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIwXHU4MDI0XHU4MDI2XHU4MDJjXHU4MDJl''@;'; put 'put ''XHU4MDMwXHU4MDM0XHU4MDM1XHU4MDM3XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQ0XHU4MDYwXHU4MDY0XHU4MDY2XHU4MDZkXHU4MDcxXHU4MDc1XHU4MDgxXHU4MDg4XHU4MDhlXHU4MDljXHU4MDllXHU4MGE2XHU4MGE3XHU4MGFiXHU4MGI4XHU4MGI5XHU4MGM4XHU4''@;'; put 'put ''MGNkXHU4MGNmXHU4MGQyXHU4MGQ0XHU4MGQ1XHU4MGQ3XHU4MGQ4XHU4MGUwXHU4MGVkXHU4MGVlIl0sWyI4ZmQ2YTEiLCJcdTgwZjBcdTgwZjJcdTgwZjNcdTgwZjZcdTgwZjlcdTgwZmFcdTgwZmVcdTgxMDNcdTgxMGJcdTgxMTZcdTgxMTdcdTgxMThcdTgxMWNcdTgxMWVcdTgxMjBcdTgx''@;'; put 'put ''MjRcdTgxMjdcdTgxMmNcdTgxMzBcdTgxMzVcdTgxM2FcdTgxM2NcdTgxNDVcdTgxNDdcdTgxNGFcdTgxNGNcdTgxNTJcdTgxNTdcdTgxNjBcdTgxNjFcdTgxNjdcdTgxNjhcdTgxNjlcdTgxNmRcdTgxNmZcdTgxNzdcdTgxODFcdTgxOTBcdTgxODRcdTgxODVcdTgxODZcdTgxOGJcdTgxOGVc''@;'; put 'put ''dTgxOTZcdTgxOThcdTgxOWJcdTgxOWVcdTgxYTJcdTgxYWVcdTgxYjJcdTgxYjRcdTgxYmJcdTgxY2JcdTgxYzNcdTgxYzVcdTgxY2FcdTgxY2VcdTgxY2ZcdTgxZDVcdTgxZDdcdTgxZGJcdTgxZGRcdTgxZGVcdTgxZTFcdTgxZTRcdTgxZWJcdTgxZWNcdTgxZjBcdTgxZjFcdTgxZjJcdTgx''@;'; put 'put ''ZjVcdTgxZjZcdTgxZjhcdTgxZjlcdTgxZmRcdTgxZmZcdTgyMDBcdTgyMDNcdTgyMGZcdTgyMTNcdTgyMTRcdTgyMTlcdTgyMWFcdTgyMWRcdTgyMjFcdTgyMjJcdTgyMjhcdTgyMzJcdTgyMzRcdTgyM2FcdTgyNDNcdTgyNDRcdTgyNDVcdTgyNDYiXSxbIjhmZDdhMSIsIlx1ODI0Ylx1ODI0''@;'; put 'put ''ZVx1ODI0Zlx1ODI1MVx1ODI1Nlx1ODI1Y1x1ODI2MFx1ODI2M1x1ODI2N1x1ODI2ZFx1ODI3NFx1ODI3Ylx1ODI3ZFx1ODI3Zlx1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NFx1ODI4N1x1ODI4OVx1ODI4YVx1ODI4ZVx1ODI5MVx1ODI5NFx1ODI5Nlx1ODI5OFx1ODI5YVx1ODI5Ylx1ODJhMFx1''@;'; put 'put ''ODJhMVx1ODJhM1x1ODJhNFx1ODJhN1x1ODJhOFx1ODJhOVx1ODJhYVx1ODJhZVx1ODJiMFx1ODJiMlx1ODJiNFx1ODJiN1x1ODJiYVx1ODJiY1x1ODJiZVx1ODJiZlx1ODJjNlx1ODJkMFx1ODJkNVx1ODJkYVx1ODJlMFx1ODJlMlx1ODJlNFx1ODJlOFx1ODJlYVx1ODJlZFx1ODJlZlx1ODJm''@;'; put 'put ''Nlx1ODJmN1x1ODJmZFx1ODJmZVx1ODMwMFx1ODMwMVx1ODMwN1x1ODMwOFx1ODMwYVx1ODMwYlx1ODM1NFx1ODMxYlx1ODMxZFx1ODMxZVx1ODMxZlx1ODMyMVx1ODMyMlx1ODMyY1x1ODMyZFx1ODMyZVx1ODMzMFx1ODMzM1x1ODMzN1x1ODMzYVx1ODMzY1x1ODMzZFx1ODM0Mlx1ODM0M1x1''@;'; put 'put ''ODM0NFx1ODM0N1x1ODM0ZFx1ODM0ZVx1ODM1MVx1ODM1NVx1ODM1Nlx1ODM1N1x1ODM3MFx1ODM3OCJdLFsiOGZkOGExIiwiXHU4MzdkXHU4MzdmXHU4MzgwXHU4MzgyXHU4Mzg0XHU4Mzg2XHU4MzhkXHU4MzkyXHU4Mzk0XHU4Mzk1XHU4Mzk4XHU4Mzk5XHU4MzliXHU4MzljXHU4MzlkXHU4''@;'; put 'put ''M2E2XHU4M2E3XHU4M2E5XHU4M2FjXHU4M2JlXHU4M2JmXHU4M2MwXHU4M2M3XHU4M2M5XHU4M2NmXHU4M2QwXHU4M2QxXHU4M2Q0XHU4M2RkXHU4MzUzXHU4M2U4XHU4M2VhXHU4M2Y2XHU4M2Y4XHU4M2Y5XHU4M2ZjXHU4NDAxXHU4NDA2XHU4NDBhXHU4NDBmXHU4NDExXHU4NDE1XHU4NDE5''@;'; put 'put ''XHU4M2FkXHU4NDJmXHU4NDM5XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDRhXHU4NDRkXHU4NDRmXHU4NDUxXHU4NDUyXHU4NDU2XHU4NDU4XHU4NDU5XHU4NDVhXHU4NDVjXHU4NDYwXHU4NDY0XHU4NDY1XHU4NDY3XHU4NDZhXHU4NDcwXHU4NDczXHU4NDc0XHU4NDc2XHU4NDc4XHU4NDdjXHU4''@;'; put 'put ''NDdkXHU4NDgxXHU4NDg1XHU4NDkyXHU4NDkzXHU4NDk1XHU4NDllXHU4NGE2XHU4NGE4XHU4NGE5XHU4NGFhXHU4NGFmXHU4NGIxXHU4NGI0XHU4NGJhXHU4NGJkXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGM3XHU4NGM4XHU4NGNjXHU4NGNmXHU4NGQzIl0sWyI4ZmQ5YTEiLCJcdTg0ZGNcdTg0''@;'; put 'put ''ZTdcdTg0ZWFcdTg0ZWZcdTg0ZjBcdTg0ZjFcdTg0ZjJcdTg0ZjdcdTg1MzJcdTg0ZmFcdTg0ZmJcdTg0ZmRcdTg1MDJcdTg1MDNcdTg1MDdcdTg1MGNcdTg1MGVcdTg1MTBcdTg1MWNcdTg1MWVcdTg1MjJcdTg1MjNcdTg1MjRcdTg1MjVcdTg1MjdcdTg1MmFcdTg1MmJcdTg1MmZcdTg1MzNc''@;'; put 'put ''dTg1MzRcdTg1MzZcdTg1M2ZcdTg1NDZcdTg1NGYiLDQsIlx1ODU1Nlx1ODU1OVx1ODU1YyIsNiwiXHU4NTY0XHU4NTZiXHU4NTZmXHU4NTc5XHU4NTdhXHU4NTdiXHU4NTdkXHU4NTdmXHU4NTgxXHU4NTg1XHU4NTg2XHU4NTg5XHU4NThiXHU4NThjXHU4NThmXHU4NTkzXHU4NTk4XHU4NTlk''@;'; put 'put ''XHU4NTlmXHU4NWEwXHU4NWEyXHU4NWE1XHU4NWE3XHU4NWI0XHU4NWI2XHU4NWI3XHU4NWI4XHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMyXHU4NWM3XHU4NWNhXHU4NWNiXHU4NWNlXHU4NWFkXHU4NWQ4XHU4NWRhXHU4NWRmXHU4NWUwXHU4NWU2XHU4NWU4XHU4NWVkXHU4NWYzXHU4''@;'; put 'put ''NWY2XHU4NWZjIl0sWyI4ZmRhYTEiLCJcdTg1ZmZcdTg2MDBcdTg2MDRcdTg2MDVcdTg2MGRcdTg2MGVcdTg2MTBcdTg2MTFcdTg2MTJcdTg2MThcdTg2MTlcdTg2MWJcdTg2MWVcdTg2MjFcdTg2MjdcdTg2MjlcdTg2MzZcdTg2MzhcdTg2M2FcdTg2M2NcdTg2M2RcdTg2NDBcdTg2NDJcdTg2''@;'; put 'put ''NDZcdTg2NTJcdTg2NTNcdTg2NTZcdTg2NTdcdTg2NThcdTg2NTlcdTg2NWRcdTg2NjAiLDQsIlx1ODY2OVx1ODY2Y1x1ODY2Zlx1ODY3NVx1ODY3Nlx1ODY3N1x1ODY3YVx1ODY4ZFx1ODY5MVx1ODY5Nlx1ODY5OFx1ODY5YVx1ODY5Y1x1ODZhMVx1ODZhNlx1ODZhN1x1ODZhOFx1ODZhZFx1''@;'; put 'put ''ODZiMVx1ODZiM1x1ODZiNFx1ODZiNVx1ODZiN1x1ODZiOFx1ODZiOVx1ODZiZlx1ODZjMFx1ODZjMVx1ODZjM1x1ODZjNVx1ODZkMVx1ODZkMlx1ODZkNVx1ODZkN1x1ODZkYVx1ODZkY1x1ODZlMFx1ODZlM1x1ODZlNVx1ODZlN1x1ODY4OFx1ODZmYVx1ODZmY1x1ODZmZFx1ODcwNFx1ODcw''@;'; put 'put ''NVx1ODcwN1x1ODcwYlx1ODcwZVx1ODcwZlx1ODcxMFx1ODcxM1x1ODcxNFx1ODcxOVx1ODcxZVx1ODcxZlx1ODcyMVx1ODcyMyJdLFsiOGZkYmExIiwiXHU4NzI4XHU4NzJlXHU4NzJmXHU4NzMxXHU4NzMyXHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzNlXHU4NzQwXHU4NzQzXHU4NzQ1''@;'; put 'put ''XHU4NzRkXHU4NzU4XHU4NzVkXHU4NzYxXHU4NzY0XHU4NzY1XHU4NzZmXHU4NzcxXHU4NzcyXHU4NzdiXHU4NzgzIiw2LCJcdTg3OGJcdTg3OGNcdTg3OTBcdTg3OTNcdTg3OTVcdTg3OTdcdTg3OThcdTg3OTlcdTg3OWVcdTg3YTBcdTg3YTNcdTg3YTdcdTg3YWNcdTg3YWRcdTg3YWVcdTg3''@;'; put 'put ''YjFcdTg3YjVcdTg3YmVcdTg3YmZcdTg3YzFcdTg3YzhcdTg3YzlcdTg3Y2FcdTg3Y2VcdTg3ZDVcdTg3ZDZcdTg3ZDlcdTg3ZGFcdTg3ZGNcdTg3ZGZcdTg3ZTJcdTg3ZTNcdTg3ZTRcdTg3ZWFcdTg3ZWJcdTg3ZWRcdTg3ZjFcdTg3ZjNcdTg3ZjhcdTg3ZmFcdTg3ZmZcdTg4MDFcdTg4MDNc''@;'; put 'put ''dTg4MDZcdTg4MDlcdTg4MGFcdTg4MGJcdTg4MTBcdTg4MTlcdTg4MTJcdTg4MTNcdTg4MTRcdTg4MThcdTg4MWFcdTg4MWJcdTg4MWNcdTg4MWVcdTg4MWZcdTg4MjhcdTg4MmRcdTg4MmVcdTg4MzBcdTg4MzJcdTg4MzUiXSxbIjhmZGNhMSIsIlx1ODgzYVx1ODgzY1x1ODg0MVx1ODg0M1x1''@;'; put 'put ''ODg0NVx1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg1MVx1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Y1x1ODg1Zlx1ODg2MFx1ODg2NFx1ODg2OVx1ODg3MVx1ODg3OVx1ODg3Ylx1ODg4MFx1ODg5OFx1ODg5YVx1ODg5Ylx1ODg5Y1x1ODg5Zlx1ODhhMFx1ODhhOFx1ODhh''@;'; put 'put ''YVx1ODhiYVx1ODhiZFx1ODhiZVx1ODhjMFx1ODhjYSIsNCwiXHU4OGQxXHU4OGQyXHU4OGQzXHU4OGRiXHU4OGRlXHU4OGU3XHU4OGVmXHU4OGYwXHU4OGYxXHU4OGY1XHU4OGY3XHU4OTAxXHU4OTA2XHU4OTBkXHU4OTBlXHU4OTBmXHU4OTE1XHU4OTE2XHU4OTE4XHU4OTE5XHU4OTFhXHU4''@;'; put 'put ''OTFjXHU4OTIwXHU4OTI2XHU4OTI3XHU4OTI4XHU4OTMwXHU4OTMxXHU4OTMyXHU4OTM1XHU4OTM5XHU4OTNhXHU4OTNlXHU4OTQwXHU4OTQyXHU4OTQ1XHU4OTQ2XHU4OTQ5XHU4OTRmXHU4OTUyXHU4OTU3XHU4OTVhXHU4OTViXHU4OTVjXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTZiXHU4OTZl''@;'; put 'put ''XHU4OTcwXHU4OTczXHU4OTc1XHU4OTdhIl0sWyI4ZmRkYTEiLCJcdTg5N2JcdTg5N2NcdTg5N2RcdTg5ODlcdTg5OGRcdTg5OTBcdTg5OTRcdTg5OTVcdTg5OWJcdTg5OWNcdTg5OWZcdTg5YTBcdTg5YTVcdTg5YjBcdTg5YjRcdTg5YjVcdTg5YjZcdTg5YjdcdTg5YmNcdTg5ZDQiLDQsIlx1''@;'; put 'put ''ODllNVx1ODllOVx1ODllYlx1ODllZFx1ODlmMVx1ODlmM1x1ODlmNlx1ODlmOVx1ODlmZFx1ODlmZlx1OGEwNFx1OGEwNVx1OGEwN1x1OGEwZlx1OGExMVx1OGExMlx1OGExNFx1OGExNVx1OGExZVx1OGEyMFx1OGEyMlx1OGEyNFx1OGEyNlx1OGEyYlx1OGEyY1x1OGEyZlx1OGEzNVx1OGEz''@;'; put 'put ''N1x1OGEzZFx1OGEzZVx1OGE0MFx1OGE0M1x1OGE0NVx1OGE0N1x1OGE0OVx1OGE0ZFx1OGE0ZVx1OGE1M1x1OGE1Nlx1OGE1N1x1OGE1OFx1OGE1Y1x1OGE1ZFx1OGE2MVx1OGE2NVx1OGE2N1x1OGE3NVx1OGE3Nlx1OGE3N1x1OGE3OVx1OGE3YVx1OGE3Ylx1OGE3ZVx1OGE3Zlx1OGE4MFx1''@;'; put 'put ''OGE4M1x1OGE4Nlx1OGE4Ylx1OGE4Zlx1OGE5MFx1OGE5Mlx1OGE5Nlx1OGE5N1x1OGE5OVx1OGE5Zlx1OGFhN1x1OGFhOVx1OGFhZVx1OGFhZlx1OGFiMyJdLFsiOGZkZWExIiwiXHU4YWI2XHU4YWI3XHU4YWJiXHU4YWJlXHU4YWMzXHU4YWM2XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWQxXHU4''@;'; put 'put ''YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ3XHU4YWRkXHU4YWRmXHU4YWVjXHU4YWYwXHU4YWY0XHU4YWY1XHU4YWY2XHU4YWZjXHU4YWZmXHU4YjA1XHU4YjA2XHU4YjBiXHU4YjExXHU4YjFjXHU4YjFlXHU4YjFmXHU4YjBhXHU4YjJkXHU4YjMwXHU4YjM3XHU4YjNjXHU4YjQyIiw0LCJcdThiNDhc''@;'; put 'put ''dThiNTJcdThiNTNcdThiNTRcdThiNTlcdThiNGRcdThiNWVcdThiNjNcdThiNmRcdThiNzZcdThiNzhcdThiNzlcdThiN2NcdThiN2VcdThiODFcdThiODRcdThiODVcdThiOGJcdThiOGRcdThiOGZcdThiOTRcdThiOTVcdThiOWNcdThiOWVcdThiOWZcdThjMzhcdThjMzlcdThjM2RcdThj''@;'; put 'put ''M2VcdThjNDVcdThjNDdcdThjNDlcdThjNGJcdThjNGZcdThjNTFcdThjNTNcdThjNTRcdThjNTdcdThjNThcdThjNWJcdThjNWRcdThjNTlcdThjNjNcdThjNjRcdThjNjZcdThjNjhcdThjNjlcdThjNmRcdThjNzNcdThjNzVcdThjNzZcdThjN2JcdThjN2VcdThjODYiXSxbIjhmZGZhMSIs''@;'; put 'put ''Ilx1OGM4N1x1OGM4Ylx1OGM5MFx1OGM5Mlx1OGM5M1x1OGM5OVx1OGM5Ylx1OGM5Y1x1OGNhNFx1OGNiOVx1OGNiYVx1OGNjNVx1OGNjNlx1OGNjOVx1OGNjYlx1OGNjZlx1OGNkNlx1OGNkNVx1OGNkOVx1OGNkZFx1OGNlMVx1OGNlOFx1OGNlY1x1OGNlZlx1OGNmMFx1OGNmMlx1OGNmNVx1''@;'; put 'put ''OGNmN1x1OGNmOFx1OGNmZVx1OGNmZlx1OGQwMVx1OGQwM1x1OGQwOVx1OGQxMlx1OGQxN1x1OGQxYlx1OGQ2NVx1OGQ2OVx1OGQ2Y1x1OGQ2ZVx1OGQ3Zlx1OGQ4Mlx1OGQ4NFx1OGQ4OFx1OGQ4ZFx1OGQ5MFx1OGQ5MVx1OGQ5NVx1OGQ5ZVx1OGQ5Zlx1OGRhMFx1OGRhNlx1OGRhYlx1OGRh''@;'; put 'put ''Y1x1OGRhZlx1OGRiMlx1OGRiNVx1OGRiN1x1OGRiOVx1OGRiYlx1OGRjMFx1OGRjNVx1OGRjNlx1OGRjN1x1OGRjOFx1OGRjYVx1OGRjZVx1OGRkMVx1OGRkNFx1OGRkNVx1OGRkN1x1OGRkOVx1OGRlNFx1OGRlNVx1OGRlN1x1OGRlY1x1OGRmMFx1OGRiY1x1OGRmMVx1OGRmMlx1OGRmNFx1''@;'; put 'put ''OGRmZFx1OGUwMVx1OGUwNFx1OGUwNVx1OGUwNlx1OGUwYlx1OGUxMVx1OGUxNFx1OGUxNlx1OGUyMFx1OGUyMVx1OGUyMiJdLFsiOGZlMGExIiwiXHU4ZTIzXHU4ZTI2XHU4ZTI3XHU4ZTMxXHU4ZTMzXHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTM5XHU4ZTNkXHU4ZTQwXHU4ZTQxXHU4ZTRiXHU4''@;'; put 'put ''ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTU0XHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTYxXHU4ZTYyXHU4ZTY5XHU4ZTZjXHU4ZTZkXHU4ZTZmXHU4ZTcwXHU4ZTcxXHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTgyXHU4ZTgzXHU4ZTg5XHU4ZTkwXHU4ZTkyXHU4ZTk1XHU4ZTlhXHU4ZTliXHU4ZTlk''@;'; put 'put ''XHU4ZTllXHU4ZWEyXHU4ZWE3XHU4ZWE5XHU4ZWFkXHU4ZWFlXHU4ZWIzXHU4ZWI1XHU4ZWJhXHU4ZWJiXHU4ZWMwXHU4ZWMxXHU4ZWMzXHU4ZWM0XHU4ZWM3XHU4ZWNmXHU4ZWQxXHU4ZWQ0XHU4ZWRjXHU4ZWU4XHU4ZWVlXHU4ZWYwXHU4ZWYxXHU4ZWY3XHU4ZWY5XHU4ZWZhXHU4ZWVkXHU4''@;'; put 'put ''ZjAwXHU4ZjAyXHU4ZjA3XHU4ZjA4XHU4ZjBmXHU4ZjEwXHU4ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjFlXHU4ZjIwXHU4ZjIxXHU4ZjIzXHU4ZjI1XHU4ZjI3XHU4ZjI4XHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjNhXHU4ZjQwXHU4ZjQxIl0sWyI4ZmUxYTEi''@;'; put 'put ''LCJcdThmNDNcdThmNDdcdThmNGZcdThmNTEiLDQsIlx1OGY1OFx1OGY1ZFx1OGY1ZVx1OGY2NVx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhNFx1OGZhNVx1OGZhNlx1OGZiNVx1OGZiNlx1OGZiOFx1OGZiZVx1OGZjMFx1OGZjMVx1OGZjNlx1OGZjYVx1OGZjYlx1OGZjZFx1OGZkMFx1OGZkMlx1''@;'; put 'put ''OGZkM1x1OGZkNVx1OGZlMFx1OGZlM1x1OGZlNFx1OGZlOFx1OGZlZVx1OGZmMVx1OGZmNVx1OGZmNlx1OGZmYlx1OGZmZVx1OTAwMlx1OTAwNFx1OTAwOFx1OTAwY1x1OTAxOFx1OTAxYlx1OTAyOFx1OTAyOVx1OTAyZlx1OTAyYVx1OTAyY1x1OTAyZFx1OTAzM1x1OTAzNFx1OTAzN1x1OTAz''@;'; put 'put ''Zlx1OTA0M1x1OTA0NFx1OTA0Y1x1OTA1Ylx1OTA1ZFx1OTA2Mlx1OTA2Nlx1OTA2N1x1OTA2Y1x1OTA3MFx1OTA3NFx1OTA3OVx1OTA4NVx1OTA4OFx1OTA4Ylx1OTA4Y1x1OTA4ZVx1OTA5MFx1OTA5NVx1OTA5N1x1OTA5OFx1OTA5OVx1OTA5Ylx1OTBhMFx1OTBhMVx1OTBhMlx1OTBhNVx1''@;'; put 'put ''OTBiMFx1OTBiMlx1OTBiM1x1OTBiNFx1OTBiNlx1OTBiZFx1OTBjY1x1OTBiZVx1OTBjMyJdLFsiOGZlMmExIiwiXHU5MGM0XHU5MGM1XHU5MGM3XHU5MGM4XHU5MGQ1XHU5MGQ3XHU5MGQ4XHU5MGQ5XHU5MGRjXHU5MGRkXHU5MGRmXHU5MGU1XHU5MGQyXHU5MGY2XHU5MGViXHU5MGVmXHU5''@;'; put 'put ''MGYwXHU5MGY0XHU5MGZlXHU5MGZmXHU5MTAwXHU5MTA0XHU5MTA1XHU5MTA2XHU5MTA4XHU5MTBkXHU5MTEwXHU5MTE0XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFjXHU5MTFlXHU5MTIwXHU5MTI1XHU5MTIyXHU5MTIzXHU5MTI3XHU5MTI5XHU5MTJlXHU5MTJmXHU5MTMxXHU5MTM0''@;'; put 'put ''XHU5MTM2XHU5MTM3XHU5MTM5XHU5MTNhXHU5MTNjXHU5MTNkXHU5MTQzXHU5MTQ3XHU5MTQ4XHU5MTRmXHU5MTUzXHU5MTU3XHU5MTU5XHU5MTVhXHU5MTViXHU5MTYxXHU5MTY0XHU5MTY3XHU5MTZkXHU5MTc0XHU5MTc5XHU5MTdhXHU5MTdiXHU5MTgxXHU5MTgzXHU5MTg1XHU5MTg2XHU5''@;'; put 'put ''MThhXHU5MThlXHU5MTkxXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk4XHU5MTllXHU5MWExXHU5MWE2XHU5MWE4XHU5MWFjXHU5MWFkXHU5MWFlXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWJiXHU5MWJjXHU5MWJkXHU5MWJmIl0sWyI4ZmUzYTEiLCJcdTkxYzJcdTkxYzNcdTkx''@;'; put 'put ''YzVcdTkxZDNcdTkxZDRcdTkxZDdcdTkxZDlcdTkxZGFcdTkxZGVcdTkxZTRcdTkxZTVcdTkxZTlcdTkxZWFcdTkxZWMiLDUsIlx1OTFmN1x1OTFmOVx1OTFmYlx1OTFmZFx1OTIwMFx1OTIwMVx1OTIwNFx1OTIwNVx1OTIwNlx1OTIwN1x1OTIwOVx1OTIwYVx1OTIwY1x1OTIxMFx1OTIxMlx1''@;'; put 'put ''OTIxM1x1OTIxNlx1OTIxOFx1OTIxY1x1OTIxZFx1OTIyM1x1OTIyNFx1OTIyNVx1OTIyNlx1OTIyOFx1OTIyZVx1OTIyZlx1OTIzMFx1OTIzM1x1OTIzNVx1OTIzNlx1OTIzOFx1OTIzOVx1OTIzYVx1OTIzY1x1OTIzZVx1OTI0MFx1OTI0Mlx1OTI0M1x1OTI0Nlx1OTI0N1x1OTI0YVx1OTI0''@;'; put 'put ''ZFx1OTI0ZVx1OTI0Zlx1OTI1MVx1OTI1OFx1OTI1OVx1OTI1Y1x1OTI1ZFx1OTI2MFx1OTI2MVx1OTI2NVx1OTI2N1x1OTI2OFx1OTI2OVx1OTI2ZVx1OTI2Zlx1OTI3MFx1OTI3NSIsNCwiXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdmXHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhkXHU5MjhlXHU5''@;'; put 'put ''MjkyXHU5Mjk3Il0sWyI4ZmU0YTEiLCJcdTkyOTlcdTkyOWZcdTkyYTBcdTkyYTRcdTkyYTVcdTkyYTdcdTkyYThcdTkyYWJcdTkyYWZcdTkyYjJcdTkyYjZcdTkyYjhcdTkyYmFcdTkyYmJcdTkyYmNcdTkyYmRcdTkyYmYiLDQsIlx1OTJjNVx1OTJjNlx1OTJjN1x1OTJjOFx1OTJjYlx1OTJj''@;'; put 'put ''Y1x1OTJjZFx1OTJjZVx1OTJkMFx1OTJkM1x1OTJkNVx1OTJkN1x1OTJkOFx1OTJkOVx1OTJkY1x1OTJkZFx1OTJkZlx1OTJlMFx1OTJlMVx1OTJlM1x1OTJlNVx1OTJlN1x1OTJlOFx1OTJlY1x1OTJlZVx1OTJmMFx1OTJmOVx1OTJmYlx1OTJmZlx1OTMwMFx1OTMwMlx1OTMwOFx1OTMwZFx1''@;'; put 'put ''OTMxMVx1OTMxNFx1OTMxNVx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1OTMyMVx1OTMyNFx1OTMyNVx1OTMyN1x1OTMyOVx1OTMyYVx1OTMzM1x1OTMzNFx1OTMzNlx1OTMzN1x1OTM0N1x1OTM0OFx1OTM0OVx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1NVx1OTM1N1x1OTM1OFx1OTM1YVx1OTM1''@;'; put 'put ''ZVx1OTM2NFx1OTM2NVx1OTM2N1x1OTM2OVx1OTM2YVx1OTM2ZFx1OTM2Zlx1OTM3MFx1OTM3MVx1OTM3M1x1OTM3NFx1OTM3NiJdLFsiOGZlNWExIiwiXHU5MzdhXHU5MzdkXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5Mzg4XHU5MzhhXHU5MzhiXHU5MzhkXHU5MzhmXHU5MzkyXHU5Mzk1''@;'; put 'put ''XHU5Mzk4XHU5MzliXHU5MzllXHU5M2ExXHU5M2EzXHU5M2E0XHU5M2E2XHU5M2E4XHU5M2FiXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2JhXHU5M2E5XHU5M2MxXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M5Iiw0LCJcdTkzZDNcdTkzZDlcdTkzZGNcdTkzZGVcdTkzZGZcdTkzZTJcdTkz''@;'; put 'put ''ZTZcdTkzZTdcdTkzZjlcdTkzZjdcdTkzZjhcdTkzZmFcdTkzZmJcdTkzZmRcdTk0MDFcdTk0MDJcdTk0MDRcdTk0MDhcdTk0MDlcdTk0MGRcdTk0MGVcdTk0MGZcdTk0MTVcdTk0MTZcdTk0MTdcdTk0MWZcdTk0MmVcdTk0MmZcdTk0MzFcdTk0MzJcdTk0MzNcdTk0MzRcdTk0M2JcdTk0M2Zc''@;'; put 'put ''dTk0M2RcdTk0NDNcdTk0NDVcdTk0NDhcdTk0NGFcdTk0NGNcdTk0NTVcdTk0NTlcdTk0NWNcdTk0NWZcdTk0NjFcdTk0NjNcdTk0NjhcdTk0NmJcdTk0NmRcdTk0NmVcdTk0NmZcdTk0NzFcdTk0NzJcdTk0ODRcdTk0ODNcdTk1NzhcdTk1NzkiXSxbIjhmZTZhMSIsIlx1OTU3ZVx1OTU4NFx1''@;'; put 'put ''OTU4OFx1OTU4Y1x1OTU4ZFx1OTU4ZVx1OTU5ZFx1OTU5ZVx1OTU5Zlx1OTVhMVx1OTVhNlx1OTVhOVx1OTVhYlx1OTVhY1x1OTViNFx1OTViNlx1OTViYVx1OTViZFx1OTViZlx1OTVjNlx1OTVjOFx1OTVjOVx1OTVjYlx1OTVkMFx1OTVkMVx1OTVkMlx1OTVkM1x1OTVkOVx1OTVkYVx1OTVk''@;'; put 'put ''ZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlNFx1OTVlNlx1OTYxZFx1OTYxZVx1OTYyMlx1OTYyNFx1OTYyNVx1OTYyNlx1OTYyY1x1OTYzMVx1OTYzM1x1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzY1x1OTYzZFx1OTY0MVx1OTY1Mlx1OTY1NFx1OTY1Nlx1OTY1N1x1OTY1OFx1OTY2MVx1''@;'; put 'put ''OTY2ZVx1OTY3NFx1OTY3Ylx1OTY3Y1x1OTY3ZVx1OTY3Zlx1OTY4MVx1OTY4Mlx1OTY4M1x1OTY4NFx1OTY4OVx1OTY5MVx1OTY5Nlx1OTY5YVx1OTY5ZFx1OTY5Zlx1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOVx1OTZhZVx1OTZhZlx1OTZiM1x1OTZiYVx1OTZjYVx1OTZkMlx1NWRiMlx1OTZk''@;'; put 'put ''OFx1OTZkYVx1OTZkZFx1OTZkZVx1OTZkZlx1OTZlOVx1OTZlZlx1OTZmMVx1OTZmYVx1OTcwMiJdLFsiOGZlN2ExIiwiXHU5NzAzXHU5NzA1XHU5NzA5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI4XHU5NzMxXHU5NzMzXHU5NzQxXHU5NzQzXHU5NzRhXHU5NzRl''@;'; put 'put ''XHU5NzRmXHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzViXHU5NzYzXHU5NzY3XHU5NzZhXHU5NzZlXHU5NzczXHU5Nzc2XHU5Nzc3XHU5Nzc4XHU5NzdiXHU5NzdkXHU5NzdmXHU5NzgwXHU5Nzg5XHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzllXHU5NzlmXHU5N2EyXHU5''@;'; put 'put ''N2FjXHU5N2FlXHU5N2IxXHU5N2IyXHU5N2I1XHU5N2I2XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JjXHU5N2JlXHU5N2JmXHU5N2MxXHU5N2M0XHU5N2M1XHU5N2M3XHU5N2M5XHU5N2NhXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2QwXHU5N2QxXHU5N2Q0XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2Rk''@;'; put 'put ''XHU5N2RlXHU5N2UwXHU5N2RiXHU5N2UxXHU5N2U0XHU5N2VmXHU5N2YxXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2ZhXHU5ODA3XHU5ODBhXHU5ODE5XHU5ODBkXHU5ODBlXHU5ODE0XHU5ODE2XHU5ODFjXHU5ODFlXHU5ODIwXHU5ODIzXHU5ODI2Il0sWyI4ZmU4YTEiLCJcdTk4MmJcdTk4MmVc''@;'; put 'put ''dTk4MmZcdTk4MzBcdTk4MzJcdTk4MzNcdTk4MzVcdTk4MjVcdTk4M2VcdTk4NDRcdTk4NDdcdTk4NGFcdTk4NTFcdTk4NTJcdTk4NTNcdTk4NTZcdTk4NTdcdTk4NTlcdTk4NWFcdTk4NjJcdTk4NjNcdTk4NjVcdTk4NjZcdTk4NmFcdTk4NmNcdTk4YWJcdTk4YWRcdTk4YWVcdTk4YjBcdTk4''@;'; put 'put ''YjRcdTk4YjdcdTk4YjhcdTk4YmFcdTk4YmJcdTk4YmZcdTk4YzJcdTk4YzVcdTk4YzhcdTk4Y2NcdTk4ZTFcdTk4ZTNcdTk4ZTVcdTk4ZTZcdTk4ZTdcdTk4ZWFcdTk4ZjNcdTk4ZjZcdTk5MDJcdTk5MDdcdTk5MDhcdTk5MTFcdTk5MTVcdTk5MTZcdTk5MTdcdTk5MWFcdTk5MWJcdTk5MWNc''@;'; put 'put ''dTk5MWZcdTk5MjJcdTk5MjZcdTk5MjdcdTk5MmJcdTk5MzEiLDQsIlx1OTkzOVx1OTkzYVx1OTkzYlx1OTkzY1x1OTk0MFx1OTk0MVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0ZFx1OTk0ZVx1OTk1NFx1OTk1OFx1OTk1OVx1OTk1Ylx1OTk1Y1x1OTk1ZVx1OTk1Zlx1OTk2MFx1OTk5Ylx1OTk5''@;'; put 'put ''ZFx1OTk5Zlx1OTlhNlx1OTliMFx1OTliMVx1OTliMlx1OTliNSJdLFsiOGZlOWExIiwiXHU5OWI5XHU5OWJhXHU5OWJkXHU5OWJmXHU5OWMzXHU5OWM5XHU5OWQzXHU5OWQ0XHU5OWQ5XHU5OWRhXHU5OWRjXHU5OWRlXHU5OWU3XHU5OWVhXHU5OWViXHU5OWVjXHU5OWYwXHU5OWY0XHU5OWY1''@;'; put 'put ''XHU5OWY5XHU5OWZkXHU5OWZlXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTBiXHU5YTBjXHU5YTEwXHU5YTExXHU5YTE2XHU5YTFlXHU5YTIwXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI3XHU5YTJkXHU5YTJlXHU5YTMzXHU5YTM1XHU5YTM2XHU5YTM4XHU5YTQ3XHU5YTQxXHU5YTQ0XHU5YTRhXHU5''@;'; put 'put ''YTRiXHU5YTRjXHU5YTRlXHU5YTUxXHU5YTU0XHU5YTU2XHU5YTVkXHU5YWFhXHU5YWFjXHU5YWFlXHU5YWFmXHU5YWIyXHU5YWI0XHU5YWI1XHU5YWI2XHU5YWI5XHU5YWJiXHU5YWJlXHU5YWJmXHU5YWMxXHU5YWMzXHU5YWM2XHU5YWM4XHU5YWNlXHU5YWQwXHU5YWQyXHU5YWQ1XHU5YWQ2''@;'; put 'put ''XHU5YWQ3XHU5YWRiXHU5YWRjXHU5YWUwXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU5XHU5YWVjXHU5YWYyXHU5YWYzXHU5YWY1XHU5YWY5XHU5YWZhXHU5YWZkXHU5YWZmIiw0XSxbIjhmZWFhMSIsIlx1OWIwNFx1OWIwNVx1OWIwOFx1OWIwOVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIx''@;'; put 'put ''MFx1OWIxMlx1OWIxNlx1OWIxOVx1OWIxYlx1OWIxY1x1OWIyMFx1OWIyNlx1OWIyYlx1OWIyZFx1OWIzM1x1OWIzNFx1OWIzNVx1OWIzN1x1OWIzOVx1OWIzYVx1OWIzZFx1OWI0OFx1OWI0Ylx1OWI0Y1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1Ylx1OWI1ZVx1OWI2MVx1OWI2M1x1OWI2NVx1''@;'; put 'put ''OWI2Nlx1OWI2OFx1OWI2YSIsNCwiXHU5YjczXHU5Yjc1XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdmXHU5YjgwXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhkXHU5YjhmXHU5YjkwXHU5Yjk0XHU5YjlhXHU5YjlkXHU5YjllXHU5YmE2XHU5YmE3XHU5YmE5''@;'; put 'put ''XHU5YmFjXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmI3XHU5YmI4XHU5YmJiXHU5YmJjXHU5YmJlXHU5YmJmXHU5YmMxXHU5YmM3XHU5YmM4XHU5YmNlXHU5YmQwXHU5YmQ3XHU5YmQ4XHU5YmRkXHU5YmRmXHU5YmU1XHU5YmU3XHU5YmVhXHU5YmViXHU5YmVmXHU5YmYzXHU5YmY3XHU5YmY4Il0s''@;'; put 'put ''WyI4ZmViYTEiLCJcdTliZjlcdTliZmFcdTliZmRcdTliZmZcdTljMDBcdTljMDJcdTljMGJcdTljMGZcdTljMTFcdTljMTZcdTljMThcdTljMTlcdTljMWFcdTljMWNcdTljMWVcdTljMjJcdTljMjNcdTljMjYiLDQsIlx1OWMzMVx1OWMzNVx1OWMzNlx1OWMzN1x1OWMzZFx1OWM0MVx1OWM0''@;'; put 'put ''M1x1OWM0NFx1OWM0NVx1OWM0OVx1OWM0YVx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1M1x1OWM1NFx1OWM1Nlx1OWM1OFx1OWM1Ylx1OWM1ZFx1OWM1ZVx1OWM1Zlx1OWM2M1x1OWM2OVx1OWM2YVx1OWM1Y1x1OWM2Ylx1OWM2OFx1OWM2ZVx1OWM3MFx1OWM3Mlx1OWM3NVx1OWM3N1x1OWM3Ylx1''@;'; put 'put ''OWNlNlx1OWNmMlx1OWNmN1x1OWNmOVx1OWQwYlx1OWQwMlx1OWQxMVx1OWQxN1x1OWQxOFx1OWQxY1x1OWQxZFx1OWQxZVx1OWQyZlx1OWQzMFx1OWQzMlx1OWQzM1x1OWQzNFx1OWQzYVx1OWQzY1x1OWQ0NVx1OWQzZFx1OWQ0Mlx1OWQ0M1x1OWQ0N1x1OWQ0YVx1OWQ1M1x1OWQ1NFx1OWQ1''@;'; put 'put ''Zlx1OWQ2M1x1OWQ2Mlx1OWQ2NVx1OWQ2OVx1OWQ2YVx1OWQ2Ylx1OWQ3MFx1OWQ3Nlx1OWQ3N1x1OWQ3YiJdLFsiOGZlY2ExIiwiXHU5ZDdjXHU5ZDdlXHU5ZDgzXHU5ZDg0XHU5ZDg2XHU5ZDhhXHU5ZDhkXHU5ZDhlXHU5ZDkyXHU5ZDkzXHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZGEx''@;'; put 'put ''XHU5ZGFhXHU5ZGFjXHU5ZGFlXHU5ZGIxXHU5ZGI1XHU5ZGI5XHU5ZGJjXHU5ZGJmXHU5ZGMzXHU5ZGM3XHU5ZGM5XHU5ZGNhXHU5ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGRhXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGU1XHU5ZGU3XHU5ZGU5XHU5ZGViXHU5ZGVlXHU5ZGYwXHU5ZGYzXHU5''@;'; put 'put ''ZGY0XHU5ZGZlXHU5ZTBhXHU5ZTAyXHU5ZTA3XHU5ZTBlXHU5ZTEwXHU5ZTExXHU5ZTEyXHU5ZTE1XHU5ZTE2XHU5ZTE5XHU5ZTFjXHU5ZTFkXHU5ZTdhXHU5ZTdiXHU5ZTdjXHU5ZTgwXHU5ZTgyXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg3XHU5ZThlXHU5ZThmXHU5ZTk2XHU5ZTk4XHU5ZTli''@;'; put 'put ''XHU5ZTllXHU5ZWE0XHU5ZWE4XHU5ZWFjXHU5ZWFlXHU5ZWFmXHU5ZWIwXHU5ZWIzXHU5ZWI0XHU5ZWI1XHU5ZWM2XHU5ZWM4XHU5ZWNiXHU5ZWQ1XHU5ZWRmXHU5ZWU0XHU5ZWU3XHU5ZWVjXHU5ZWVkXHU5ZWVlXHU5ZWYwXHU5ZWYxXHU5ZWYyXHU5ZWY1Il0sWyI4ZmVkYTEiLCJcdTllZjhc''@;'; put 'put ''dTllZmZcdTlmMDJcdTlmMDNcdTlmMDlcdTlmMGZcdTlmMTBcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTZcdTlmMTdcdTlmMTlcdTlmMWFcdTlmMWJcdTlmMWZcdTlmMjJcdTlmMjZcdTlmMmFcdTlmMmJcdTlmMmZcdTlmMzFcdTlmMzJcdTlmMzRcdTlmMzdcdTlmMzlcdTlmM2FcdTlmM2NcdTlm''@;'; put 'put ''M2RcdTlmM2ZcdTlmNDFcdTlmNDMiLDQsIlx1OWY1M1x1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1YVx1OWY1ZFx1OWY1ZVx1OWY2OFx1OWY2OVx1OWY2ZCIsNCwiXHU5ZjczXHU5Zjc1XHU5ZjdhXHU5ZjdkXHU5ZjhmXHU5ZjkwXHU5ZjkxXHU5ZjkyXHU5Zjk0XHU5Zjk2XHU5Zjk3XHU5''@;'; put 'put ''ZjllXHU5ZmExXHU5ZmEyXHU5ZmEzXHU5ZmE1Il1dJyl9LDM2MjU4OmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9SlNPTi5wYXJzZSgneyJ1Q2hhcnMiOlsxMjgsMTY1LDE2OSwxNzgsMTg0LDIxNiwyMjYsMjM1LDIzOCwyNDQsMjQ4LDI1MSwyNTMsMjU4LDI3NiwyODQsMzAwLDMyNSwz''@;'; put 'put ''MjksMzM0LDM2NCw0NjMsNDY1LDQ2Nyw0NjksNDcxLDQ3Myw0NzUsNDc3LDUwNiw1OTQsNjEwLDcxMiw3MTYsNzMwLDkzMCw5MzgsOTYyLDk3MCwxMDI2LDExMDQsMTEwNiw4MjA5LDgyMTUsODIxOCw4MjIyLDgyMzEsODI0MSw4MjQ0LDgyNDYsODI1Miw4MzY1LDg0NTIsODQ1NCw4NDU4LDg0''@;'; put 'put ''NzEsODQ4Miw4NTU2LDg1NzAsODU5Niw4NjAyLDg3MTMsODcyMCw4NzIyLDg3MjYsODczMSw4NzM3LDg3NDAsODc0Miw4NzQ4LDg3NTEsODc2MCw4NzY2LDg3NzcsODc4MSw4Nzg3LDg4MDIsODgwOCw4ODE2LDg4NTQsODg1OCw4ODcwLDg4OTYsODk3OSw5MzIyLDkzNzIsOTU0OCw5NTg4LDk2''@;'; put 'put ''MTYsOTYyMiw5NjM0LDk2NTIsOTY2Miw5NjcyLDk2NzYsOTY4MCw5NzAyLDk3MzUsOTczOCw5NzkzLDk3OTUsMTE5MDYsMTE5MDksMTE5MTMsMTE5MTcsMTE5MjgsMTE5NDQsMTE5NDcsMTE5NTEsMTE5NTYsMTE5NjAsMTE5NjQsMTE5NzksMTIyODQsMTIyOTIsMTIzMTIsMTIzMTksMTIzMzAs''@;'; put 'put ''MTIzNTEsMTI0MzYsMTI0NDcsMTI1MzUsMTI1NDMsMTI1ODYsMTI4NDIsMTI4NTAsMTI5NjQsMTMyMDAsMTMyMTUsMTMyMTgsMTMyNTMsMTMyNjMsMTMyNjcsMTMyNzAsMTMzODQsMTM0MjgsMTM3MjcsMTM4MzksMTM4NTEsMTQ2MTcsMTQ3MDMsMTQ4MDEsMTQ4MTYsMTQ5NjQsMTUxODMsMTU0''@;'; put 'put ''NzEsMTU1ODUsMTY0NzEsMTY3MzYsMTcyMDgsMTczMjUsMTczMzAsMTczNzQsMTc2MjMsMTc5OTcsMTgwMTgsMTgyMTIsMTgyMTgsMTgzMDEsMTgzMTgsMTg3NjAsMTg4MTEsMTg4MTQsMTg4MjAsMTg4MjMsMTg4NDQsMTg4NDgsMTg4NzIsMTk1NzYsMTk2MjAsMTk3MzgsMTk4ODcsNDA4NzAs''@;'; put 'put ''NTkyNDQsNTkzMzYsNTkzNjcsNTk0MTMsNTk0MTcsNTk0MjMsNTk0MzEsNTk0MzcsNTk0NDMsNTk0NTIsNTk0NjAsNTk0NzgsNTk0OTMsNjM3ODksNjM4NjYsNjM4OTQsNjM5NzYsNjM5ODYsNjQwMTYsNjQwMTgsNjQwMjEsNjQwMjUsNjQwMzQsNjQwMzcsNjQwNDIsNjUwNzQsNjUwOTMsNjUx''@;'; put 'put ''MDcsNjUxMTIsNjUxMjcsNjUxMzIsNjUzNzUsNjU1MTAsNjU1MzZdLCJnYkNoYXJzIjpbMCwzNiwzOCw0NSw1MCw4MSw4OSw5NSw5NiwxMDAsMTAzLDEwNCwxMDUsMTA5LDEyNiwxMzMsMTQ4LDE3MiwxNzUsMTc5LDIwOCwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDM0MSw0Mjgs''@;'; put 'put ''NDQzLDU0NCw1NDUsNTU4LDc0MSw3NDIsNzQ5LDc1MCw4MDUsODE5LDgyMCw3OTIyLDc5MjQsNzkyNSw3OTI3LDc5MzQsNzk0Myw3OTQ0LDc5NDUsNzk1MCw4MDYyLDgxNDgsODE0OSw4MTUyLDgxNjQsODE3NCw4MjM2LDgyNDAsODI2Miw4MjY0LDgzNzQsODM4MCw4MzgxLDgzODQsODM4OCw4''@;'; put 'put ''MzkwLDgzOTIsODM5Myw4Mzk0LDgzOTYsODQwMSw4NDA2LDg0MTYsODQxOSw4NDI0LDg0MzcsODQzOSw4NDQ1LDg0ODIsODQ4NSw4NDk2LDg1MjEsODYwMyw4OTM2LDg5NDYsOTA0Niw5MDUwLDkwNjMsOTA2Niw5MDc2LDkwOTIsOTEwMCw5MTA4LDkxMTEsOTExMyw5MTMxLDkxNjIsOTE2NCw5''@;'; put 'put ''MjE4LDkyMTksMTEzMjksMTEzMzEsMTEzMzQsMTEzMzYsMTEzNDYsMTEzNjEsMTEzNjMsMTEzNjYsMTEzNzAsMTEzNzIsMTEzNzUsMTEzODksMTE2ODIsMTE2ODYsMTE2ODcsMTE2OTIsMTE2OTQsMTE3MTQsMTE3MTYsMTE3MjMsMTE3MjUsMTE3MzAsMTE3MzYsMTE5ODIsMTE5ODksMTIxMDIs''@;'; put 'put ''MTIzMzYsMTIzNDgsMTIzNTAsMTIzODQsMTIzOTMsMTIzOTUsMTIzOTcsMTI1MTAsMTI1NTMsMTI4NTEsMTI5NjIsMTI5NzMsMTM3MzgsMTM4MjMsMTM5MTksMTM5MzMsMTQwODAsMTQyOTgsMTQ1ODUsMTQ2OTgsMTU1ODMsMTU4NDcsMTYzMTgsMTY0MzQsMTY0MzgsMTY0ODEsMTY3MjksMTcx''@;'; put 'put ''MDIsMTcxMjIsMTczMTUsMTczMjAsMTc0MDIsMTc0MTgsMTc4NTksMTc5MDksMTc5MTEsMTc5MTUsMTc5MTYsMTc5MzYsMTc5MzksMTc5NjEsMTg2NjQsMTg3MDMsMTg4MTQsMTg5NjIsMTkwNDMsMzM0NjksMzM0NzAsMzM0NzEsMzM0ODQsMzM0ODUsMzM0OTAsMzM0OTcsMzM1MDEsMzM1MDUs''@;'; put 'put ''MzM1MTMsMzM1MjAsMzM1MzYsMzM1NTAsMzc4NDUsMzc5MjEsMzc5NDgsMzgwMjksMzgwMzgsMzgwNjQsMzgwNjUsMzgwNjYsMzgwNjksMzgwNzUsMzgwNzYsMzgwNzgsMzkxMDgsMzkxMDksMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkyNjUsMzkzOTQsMTg5MDAwXX0nKX0sNDQzNDY6YXQ9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyJhMTQwIiwiXHVlNGM2Iiw2Ml0sWyJhMTgwIiwiXHVlNTA1IiwzMl0sWyJhMjQwIiwiXHVlNTI2Iiw2Ml0sWyJhMjgwIiwiXHVlNTY1IiwzMl0sWyJhMmFiIiwiXHVlNzY2Iiw1XSxbImEyZTMiLCJcdTIwYWNcdWU3NmQi''@;'; put 'put ''XSxbImEyZWYiLCJcdWU3NmVcdWU3NmYiXSxbImEyZmQiLCJcdWU3NzBcdWU3NzEiXSxbImEzNDAiLCJcdWU1ODYiLDYyXSxbImEzODAiLCJcdWU1YzUiLDMxLCJcdTMwMDAiXSxbImE0NDAiLCJcdWU1ZTYiLDYyXSxbImE0ODAiLCJcdWU2MjUiLDMyXSxbImE0ZjQiLCJcdWU3NzIiLDEwXSxb''@;'; put 'put ''ImE1NDAiLCJcdWU2NDYiLDYyXSxbImE1ODAiLCJcdWU2ODUiLDMyXSxbImE1ZjciLCJcdWU3N2QiLDddLFsiYTY0MCIsIlx1ZTZhNiIsNjJdLFsiYTY4MCIsIlx1ZTZlNSIsMzJdLFsiYTZiOSIsIlx1ZTc4NSIsN10sWyJhNmQ5IiwiXHVlNzhkIiw2XSxbImE2ZWMiLCJcdWU3OTRcdWU3OTUi''@;'; put 'put ''XSxbImE2ZjMiLCJcdWU3OTYiXSxbImE2ZjYiLCJcdWU3OTciLDhdLFsiYTc0MCIsIlx1ZTcwNiIsNjJdLFsiYTc4MCIsIlx1ZTc0NSIsMzJdLFsiYTdjMiIsIlx1ZTdhMCIsMTRdLFsiYTdmMiIsIlx1ZTdhZiIsMTJdLFsiYTg5NiIsIlx1ZTdiYyIsMTBdLFsiYThiYyIsIlx1ZTdjNyJdLFsi''@;'; put 'put ''YThiZiIsIlx1MDFmOSJdLFsiYThjMSIsIlx1ZTdjOVx1ZTdjYVx1ZTdjYlx1ZTdjYyJdLFsiYThlYSIsIlx1ZTdjZCIsMjBdLFsiYTk1OCIsIlx1ZTdlMiJdLFsiYTk1YiIsIlx1ZTdlMyJdLFsiYTk1ZCIsIlx1ZTdlNFx1ZTdlNVx1ZTdlNiJdLFsiYTk4OSIsIlx1MzAzZVx1MmZmMCIsMTFd''@;'; put 'put ''LFsiYTk5NyIsIlx1ZTdmNCIsMTJdLFsiYTlmMCIsIlx1ZTgwMSIsMTRdLFsiYWFhMSIsIlx1ZTAwMCIsOTNdLFsiYWJhMSIsIlx1ZTA1ZSIsOTNdLFsiYWNhMSIsIlx1ZTBiYyIsOTNdLFsiYWRhMSIsIlx1ZTExYSIsOTNdLFsiYWVhMSIsIlx1ZTE3OCIsOTNdLFsiYWZhMSIsIlx1ZTFkNiIs''@;'; put 'put ''OTNdLFsiZDdmYSIsIlx1ZTgxMCIsNF0sWyJmOGExIiwiXHVlMjM0Iiw5M10sWyJmOWExIiwiXHVlMjkyIiw5M10sWyJmYWExIiwiXHVlMmYwIiw5M10sWyJmYmExIiwiXHVlMzRlIiw5M10sWyJmY2ExIiwiXHVlM2FjIiw5M10sWyJmZGExIiwiXHVlNDBhIiw5M10sWyJmZTUwIiwiXHUyZTgx''@;'; put 'put ''XHVlODE2XHVlODE3XHVlODE4XHUyZTg0XHUzNDczXHUzNDQ3XHUyZTg4XHUyZThiXHVlODFlXHUzNTllXHUzNjFhXHUzNjBlXHUyZThjXHUyZTk3XHUzOTZlXHUzOTE4XHVlODI2XHUzOWNmXHUzOWRmXHUzYTczXHUzOWQwXHVlODJiXHVlODJjXHUzYjRlXHUzYzZlXHUzY2UwXHUyZWE3XHVl''@;'; put 'put ''ODMxXHVlODMyXHUyZWFhXHU0MDU2XHU0MTVmXHUyZWFlXHU0MzM3XHUyZWIzXHUyZWI2XHUyZWI3XHVlODNiXHU0M2IxXHU0M2FjXHUyZWJiXHU0M2RkXHU0NGQ2XHU0NjYxXHU0NjRjXHVlODQzIl0sWyJmZTgwIiwiXHU0NzIzXHU0NzI5XHU0NzdjXHU0NzhkXHUyZWNhXHU0OTQ3XHU0OTdh''@;'; put 'put ''XHU0OTdkXHU0OTgyXHU0OTgzXHU0OTg1XHU0OTg2XHU0OTlmXHU0OTliXHU0OWI3XHU0OWI2XHVlODU0XHVlODU1XHU0Y2EzXHU0YzlmXHU0Y2EwXHU0Y2ExXHU0Yzc3XHU0Y2EyXHU0ZDEzIiw2LCJcdTRkYWVcdWU4NjRcdWU0NjgiLDkzXV0nKX0sMjcwMTQ6YXQ9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''YXQuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI4XSxbImExIiwiXHVmZjYxIiw2Ml0sWyI4MTQwIiwiXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2Vc''@;'; put 'put ''dWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMw''@;'; put 'put ''MTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDgiLDksIlx1ZmYwYlx1ZmYwZFx4YjFceGQ3Il0sWyI4MTgwIiwiXHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZm''@;'; put 'put ''ZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUy''@;'; put 'put ''MTkzXHUzMDEzIl0sWyI4MWI4IiwiXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5Il0sWyI4MWM4IiwiXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzIl0sWyI4MWRhIiwiXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3''@;'; put 'put ''XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjIl0sWyI4MWYwIiwiXHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNiJdLFsiODFmYyIsIlx1MjVlZiJdLFsiODI0ZiIsIlx1ZmYxMCIsOV0sWyI4MjYw''@;'; put 'put ''IiwiXHVmZjIxIiwyNV0sWyI4MjgxIiwiXHVmZjQxIiwyNV0sWyI4MjlmIiwiXHUzMDQxIiw4Ml0sWyI4MzQwIiwiXHUzMGExIiw2Ml0sWyI4MzgwIiwiXHUzMGUwIiwyMl0sWyI4MzlmIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbIjgzYmYiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsi''@;'; put 'put ''ODQ0MCIsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyI4NDcwIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDddLFsiODQ4MCIsIlx1MDQzZSIsMTddLFsiODQ5ZiIsIlx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1''@;'; put 'put ''MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0MiJdLFsiODc0MCIsIlx1MjQ2MCIsMTksIlx1MjE2MCIsOV0s''@;'; put 'put ''WyI4NzVmIiwiXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExIl0sWyI4NzdlIiwiXHUzMzdi''@;'; put 'put ''Il0sWyI4NzgwIiwiXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0Iiw0LCJcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIy''@;'; put 'put ''MmEiXSxbIjg4OWYiLCJcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBc''@;'; put 'put ''dTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYx''@;'; put 'put ''MGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJc''@;'; put 'put ''dTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmQiXSxbIjg5NDAiLCJcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUz''@;'; put 'put ''NmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBc''@;'; put 'put ''dTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODYiXSxbIjg5ODAiLCJcdTU3MTJcdTU4''@;'; put 'put ''MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVc''@;'; put 'put ''dTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdh''@;'; put 'put ''NGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdc''@;'; put 'put ''dTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRm''@;'; put 'put ''MWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzkiXSxbIjhhNDAiLCJcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVc''@;'; put 'put ''dThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYy''@;'; put 'put ''ZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmIiXSxbIjhhODAiLCJcdTZhN2ZcdTY4YjZc''@;'; put 'put ''dTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgz''@;'; put 'put ''MDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJc''@;'; put 'put ''dTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1''@;'; put 'put ''OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdc''@;'; put 'put ''dTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzQiXSxbIjhiNDAiLCJcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThh''@;'; put 'put ''MThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlc''@;'; put 'put ''dTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTEiXSxbIjhiODAiLCJcdTY3M2RcdTZjNDJcdTZj''@;'; put 'put ''NzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJc''@;'; put 'put ''dTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgw''@;'; put 'put ''ZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2Rc''@;'; put 'put ''dTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYx''@;'; put 'put ''MWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDgiXSxbIjhjNDAiLCJcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNc''@;'; put 'put ''dTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1''@;'; put 'put ''NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZTgiXSxbIjhjODAiLCJcdTUyODdcdTYyMWZcdTY0ODNc''@;'; put 'put ''dTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYz''@;'; put 'put ''NzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBc''@;'; put 'put ''dTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2''@;'; put 'put ''NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRc''@;'; put 'put ''dTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTEiXSxbIjhkNDAiLCJcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVl''@;'; put 'put ''OWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThc''@;'; put 'put ''dTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGQiXSxbIjhkODAiLCJcdTk4MDVcdTk5OTlcdTlhZDhcdTlk''@;'; put 'put ''M2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNc''@;'; put 'put ''dTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0''@;'; put 'put ''NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRc''@;'; put 'put ''dTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3''@;'; put 'put ''MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlcdTUzMTlcdTUxOGFcdTUyMzciXSxbIjhlNDAiLCJcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZc''@;'; put 'put ''dTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFcdTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUz''@;'; put 'put ''ZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjIiXSxbIjhlODAiLCJcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlc''@;'; put 'put ''dTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJcdTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZi''@;'; put 'put ''MjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRc''@;'; put 'put ''dTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2''@;'; put 'put ''YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZc''@;'; put 'put ''dTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjgiXSxbIjhmNDAiLCJcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0''@;'; put 'put ''OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFc''@;'; put 'put ''dTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjMiXSxbIjhmODAiLCJcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVk''@;'; put 'put ''ZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRc''@;'; put 'put ''dTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2''@;'; put 'put ''NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNc''@;'; put 'put ''dThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZk''@;'; put 'put ''NDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmUiXSxbIjkwNDAiLCJcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVc''@;'; put 'put ''dTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkx''@;'; put 'put ''ZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYTgiXSxbIjkwODAiLCJcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThc''@;'; put 'put ''dTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0''@;'; put 'put ''N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRc''@;'; put 'put ''dTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4''@;'; put 'put ''YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlc''@;'; put 'put ''dTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGEiXSxbIjkxNDAiLCJcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTliYWVcdTUy''@;'; put 'put ''NGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRcdTk2M2Jc''@;'; put 'put ''dTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmIiXSxbIjkxODAiLCJcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5''@;'; put 'put ''ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGVcdTgxZDNcdTg1MzVc''@;'; put 'put ''dThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRl''@;'; put 'put ''ZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBc''@;'; put 'put ''dTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZm''@;'; put 'put ''ZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWEiXSxbIjkyNDAiLCJcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlc''@;'; put 'put ''dTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThh''@;'; put 'put ''YzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzQiXSxbIjkyODAiLCJcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBc''@;'; put 'put ''dTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVl''@;'; put 'put ''ODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRc''@;'; put 'put ''dTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3''@;'; put 'put ''NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBc''@;'; put 'put ''dTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTMiXSxbIjkzNDAiLCJcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0''@;'; put 'put ''YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJc''@;'; put 'put ''dTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWMiXSxbIjkzODAiLCJcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTVi''@;'; put 'put ''OTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRc''@;'; put 'put ''dThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUz''@;'; put 'put ''M2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFc''@;'; put 'put ''dTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThm''@;'; put 'put ''ZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjUiXSxbIjk0NDAiLCJcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2Jc''@;'; put 'put ''dTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdm''@;'; put 'put ''NzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODUiXSxbIjk0ODAiLCJcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFc''@;'; put 'put ''dTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdi''@;'; put 'put ''YjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2Rc''@;'; put 'put ''dTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUz''@;'; put 'put ''MmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhc''@;'; put 'put ''dTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGUiXSxbIjk1NDAiLCJcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVh''@;'; put 'put ''OWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNc''@;'; put 'put ''dTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzciXSxbIjk1ODAiLCJcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgy''@;'; put 'put ''OTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZc''@;'; put 'put ''dTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVm''@;'; put 'put ''MGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFc''@;'; put 'put ''dTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVj''@;'; put 'put ''ZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGIiXSxbIjk2NDAiLCJcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNc''@;'; put 'put ''dTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUz''@;'; put 'put ''NWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzYiXSxbIjk2ODAiLCJcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFc''@;'; put 'put ''dTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTli''@;'; put 'put ''NDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVc''@;'; put 'put ''dTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2''@;'; put 'put ''ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZc''@;'; put 'put ''dTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTIiXSxbIjk3NDAiLCJcdThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1''@;'; put 'put ''MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJc''@;'; put 'put ''dTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzIiXSxbIjk3ODAiLCJcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3''@;'; put 'put ''NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVkNTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJc''@;'; put 'put ''dTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1''@;'; put 'put ''OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBc''@;'; put 'put ''dTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYw''@;'; put 'put ''NGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmYiXSxbIjk4NDAiLCJcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZc''@;'; put 'put ''dTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1''@;'; put 'put ''NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTUiXSxbIjk4OWYiLCJcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBc''@;'; put 'put ''dTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRm''@;'; put 'put ''NzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVc''@;'; put 'put ''dTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjIiXSxbIjk5NDAiLCJcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUw''@;'; put 'put ''ZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBc''@;'; put 'put ''dTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUx''@;'; put 'put ''ZWQiXSxbIjk5ODAiLCJcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRc''@;'; put 'put ''dTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUz''@;'; put 'put ''MTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVc''@;'; put 'put ''dTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0''@;'; put 'put ''NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YTgiXSxbIjlhNDAiLCJcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZc''@;'; put 'put ''dTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1''@;'; put 'put ''OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2Mzgi''@;'; put 'put ''XSxbIjlhODAiLCJcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2''@;'; put 'put ''ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNc''@;'; put 'put ''dTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4''@;'; put 'put ''OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZc''@;'; put 'put ''dTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5NjkiXSxbIjliNDAiLCJcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5''@;'; put 'put ''ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlc''@;'; put 'put ''dTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODAiXSxb''@;'; put 'put ''IjliODAiLCJcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhc''@;'; put 'put ''dTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVj''@;'; put 'put ''ZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJc''@;'; put 'put ''dTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVl''@;'; put 'put ''NTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2YiXSxbIjljNDAiLCJcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlc''@;'; put 'put ''dTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVm''@;'; put 'put ''NmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjAiXSxbIjlj''@;'; put 'put ''ODAiLCJcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYw''@;'; put 'put ''ODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBc''@;'; put 'put ''dTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYx''@;'; put 'put ''NmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2Rc''@;'; put 'put ''dTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWIiXSxbIjlkNDAiLCJcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYy''@;'; put 'put ''NWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdc''@;'; put 'put ''dTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmIiXSxbIjlkODAi''@;'; put 'put ''LCJcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlcdTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNc''@;'; put 'put ''dTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1''@;'; put 'put ''MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1MzdcdTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNc''@;'; put 'put ''dTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2''@;'; put 'put ''NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlcdTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmMiXSxbIjllNDAiLCJcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVc''@;'; put 'put ''dTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3''@;'; put 'put ''YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGUiXSxbIjllODAiLCJc''@;'; put 'put ''dTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5''@;'; put 'put ''MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRc''@;'; put 'put ''dTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5''@;'; put 'put ''OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJc''@;'; put 'put ''dTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTMiXSxbIjlmNDAiLCJcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZh''@;'; put 'put ''ZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlc''@;'; put 'put ''dTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWYiXSxbIjlmODAiLCJcdTll''@;'; put 'put ''YmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRc''@;'; put 'put ''dTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZm''@;'; put 'put ''ZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZc''@;'; put 'put ''dTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZl''@;'; put 'put ''YTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2MiXSxbImUwNDAiLCJcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNc''@;'; put 'put ''dTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcw''@;'; put 'put ''MDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGQiXSxbImUwODAiLCJcdTcwZDlc''@;'; put 'put ''dTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcx''@;'; put 'put ''ZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJc''@;'; put 'put ''dTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTcz''@;'; put 'put ''NTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFc''@;'; put 'put ''dTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjEiXSxbImUxNDAiLCJcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1''@;'; put 'put ''MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRc''@;'; put 'put ''dTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmYiXSxbImUxODAiLCJcdTc1ZmNcdTc2''@;'; put 'put ''MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2Njdc''@;'; put 'put ''dTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2''@;'; put 'put ''ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBc''@;'; put 'put ''dTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4''@;'; put 'put ''OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWMiXSxbImUyNDAiLCJcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBc''@;'; put 'put ''dTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdh''@;'; put 'put ''MWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjAiXSxbImUyODAiLCJcdTdhYjZcdTdhYzVc''@;'; put 'put ''dTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdi''@;'; put 'put ''MzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2Jc''@;'; put 'put ''dTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdj''@;'; put 'put ''NGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBc''@;'; put 'put ''dTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDYiXSxbImUzNDAiLCJcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdk''@;'; put 'put ''NTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhc''@;'; put 'put ''dTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzciXSxbImUzODAiLCJcdTdlMzJcdTdlM2FcdTdl''@;'; put 'put ''NjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhc''@;'; put 'put ''dTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdm''@;'; put 'put ''YWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2Zc''@;'; put 'put ''dTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgw''@;'; put 'put ''ZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGIiXSxbImU0NDAiLCJcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhc''@;'; put 'put ''dTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgx''@;'; put 'put ''ZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjQiXSxbImU0ODAiLCJcdTgyNjJcdTgyNjhcdTgyNmFc''@;'; put 'put ''dTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgy''@;'; put 'put ''ZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVc''@;'; put 'put ''dTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0''@;'; put 'put ''ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZc''@;'; put 'put ''dTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDgiXSxbImU1NDAiLCJcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1''@;'; put 'put ''ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVc''@;'; put 'put ''dTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWMiXSxbImU1ODAiLCJcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3''@;'; put 'put ''MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlc''@;'; put 'put ''dTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4''@;'; put 'put ''MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdc''@;'; put 'put ''dTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5''@;'; put 'put ''MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWUiXSxbImU2NDAiLCJcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFc''@;'; put 'put ''dTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThh''@;'; put 'put ''NDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTciXSxbImU2ODAiLCJcdThhZTRcdThhZjFcdThiMTRcdThhZTBc''@;'; put 'put ''dThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThi''@;'; put 'put ''NWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVc''@;'; put 'put ''dThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThk''@;'; put 'put ''MGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhc''@;'; put 'put ''dThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGEiXSxbImU3NDAiLCJcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThl''@;'; put 'put ''ODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVc''@;'; put 'put ''dThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWMiXSxbImU3ODAiLCJcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThm''@;'; put 'put ''OWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZc''@;'; put 'put ''dTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYy''@;'; put 'put ''NDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlc''@;'; put 'put ''dTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTky''@;'; put 'put ''OTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmUiXSxbImU4NDAiLCJcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRc''@;'; put 'put ''dTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0''@;'; put 'put ''NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTkiXSxbImU4ODAiLCJcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNc''@;'; put 'put ''dTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2''@;'; put 'put ''NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZc''@;'; put 'put ''dTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3''@;'; put 'put ''ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4Mzhc''@;'; put 'put ''dTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4NzAiXSxbImU5NDAiLCJcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5''@;'; put 'put ''MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJc''@;'; put 'put ''dTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDMiXSxbImU5ODAiLCJcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlh''@;'; put 'put ''NWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZc''@;'; put 'put ''dTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTli''@;'; put 'put ''YTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFc''@;'; put 'put ''dTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlk''@;'; put 'put ''MjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDgiXSxbImVhNDAiLCJcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJc''@;'; put 'put ''dTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTll''@;'; put 'put ''OTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWYiXSxbImVhODAiLCJcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNc''@;'; put 'put ''dTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkw''@;'; put 'put ''NTlcdTc0NjRcdTUxZGNcdTcxOTkiXSxbImVkNDAiLCJcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFc''@;'; put 'put ''dTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUz''@;'; put 'put ''YjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGYiXSxbImVkODAiLCJcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBc''@;'; put 'put ''dTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYx''@;'; put 'put ''MTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFc''@;'; put 'put ''dTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZk''@;'; put 'put ''MDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVc''@;'; put 'put ''dTcxYzFcdTcxZmVcdTcyYjEiXSxbImVlNDAiLCJcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2''@;'; put 'put ''OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZc''@;'; put 'put ''dTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTkiXSxbImVlODAiLCJcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThh''@;'; put 'put ''ZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFc''@;'; put 'put ''dTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkz''@;'; put 'put ''NzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVc''@;'; put 'put ''dTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXSxbImVlZWYiLCJcdTIxNzAiLDksIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMiJdLFsiZjA0MCIsIlx1ZTAwMCIsNjJdLFsiZjA4MCIsIlx1''@;'; put 'put ''ZTAzZiIsMTI0XSxbImYxNDAiLCJcdWUwYmMiLDYyXSxbImYxODAiLCJcdWUwZmIiLDEyNF0sWyJmMjQwIiwiXHVlMTc4Iiw2Ml0sWyJmMjgwIiwiXHVlMWI3IiwxMjRdLFsiZjM0MCIsIlx1ZTIzNCIsNjJdLFsiZjM4MCIsIlx1ZTI3MyIsMTI0XSxbImY0NDAiLCJcdWUyZjAiLDYyXSxbImY0''@;'; put 'put ''ODAiLCJcdWUzMmYiLDEyNF0sWyJmNTQwIiwiXHVlM2FjIiw2Ml0sWyJmNTgwIiwiXHVlM2ViIiwxMjRdLFsiZjY0MCIsIlx1ZTQ2OCIsNjJdLFsiZjY4MCIsIlx1ZTRhNyIsMTI0XSxbImY3NDAiLCJcdWU1MjQiLDYyXSxbImY3ODAiLCJcdWU1NjMiLDEyNF0sWyJmODQwIiwiXHVlNWUwIiw2''@;'; put 'put ''Ml0sWyJmODgwIiwiXHVlNjFmIiwxMjRdLFsiZjk0MCIsIlx1ZTY5YyJdLFsiZmE0MCIsIlx1MjE3MCIsOSwiXHUyMTYwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJc''@;'; put 'put ''dTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUx''@;'; put 'put ''NGEiXSxbImZhODAiLCJcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNc''@;'; put 'put ''dTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVk''@;'; put 'put ''YjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVc''@;'; put 'put ''dTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5''@;'; put 'put ''OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmYiXSxbImZiNDAiLCJcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNc''@;'; put 'put ''dTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTcz''@;'; put 'put ''ZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTki''@;'; put 'put ''XSxbImZiODAiLCJcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0''@;'; put 'put ''YjRcdTg1NTNcdTg1NTlcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVc''@;'; put 'put ''dTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTky''@;'; put 'put ''ZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRc''@;'; put 'put ''dTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDkiXSxbImZjNDAiLCJcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlk''@;'; put 'put ''NmJcdWZhMmRcdTllMTlcdTllZDEiXV0nKX0sMjI1NjI6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEu''@;'; put 'put ''MTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40''@;'; put 'put ''LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQz''@;'; put 'put ''IjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn0nKX19LGF0PT57YXQoYXQucz04MjAyNSl9XSk7'';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=polyfills.87dbbd3faabed513-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s0MjldLHs1NTMyMTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNDI0NCksdCg3NzY1NyksdCg4ODgxMyksdCg1MzEwKSx0KDUxNzcxKSx0KDYyMzE0KSx0''@;'; put 'put ''KDE2MzQzKSx0KDM3MDQyKSx0KDc2NzcpLHQoODI2OTEpLHQoMjkxMzIpLHQoMTc4NzgpLHQoNTIyOTgpLHQoNDM0OTkpLHQoNjc3OTUpLHQoNDgzMzIpLHQoMzA3NTgpO3ZhciB2dD10KDM5MDA3KTt3aW5kb3cuZ2xvYmFsPXdpbmRvdyx3aW5kb3cuZ2xvYmFsLkJ1ZmZlcj13aW5kb3cuZ2xv''@;'; put 'put ''YmFsLkJ1ZmZlcnx8dnQuQnVmZmVyLHdpbmRvdy5wcm9jZXNzPXt2ZXJzaW9uOiIifX0sOTkxOTooYyxsKT0+eyJ1c2Ugc3RyaWN0IjtsLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gaShFKXt2YXIgaj1mKEUpLFI9alsxXTtyZXR1cm4gMyooalswXStSKS80LVJ9LGwudG9CeXRlQXJyYXk9ZnVuY3Rp''@;'; put 'put ''b24geShFKXt2YXIgaixTLHc9ZihFKSxSPXdbMF0sRj13WzFdLEI9bmV3IGUoZnVuY3Rpb24gcChFLGosdyl7cmV0dXJuIDMqKGordykvNC13fSgwLFIsRikpLGI9MCxPPUY+MD9SLTQ6Ujtmb3IoUz0wO1M8TztTKz00KWo9bltFLmNoYXJDb2RlQXQoUyldPDwxOHxuW0UuY2hhckNvZGVBdChT''@;'; put 'put ''KzEpXTw8MTJ8bltFLmNoYXJDb2RlQXQoUysyKV08PDZ8bltFLmNoYXJDb2RlQXQoUyszKV0sQltiKytdPWo+PjE2JjI1NSxCW2IrK109aj4+OCYyNTUsQltiKytdPTI1NSZqO3JldHVybiAyPT09RiYmKGo9bltFLmNoYXJDb2RlQXQoUyldPDwyfG5bRS5jaGFyQ29kZUF0KFMrMSldPj40LEJb''@;'; put 'put ''YisrXT0yNTUmaiksMT09PUYmJihqPW5bRS5jaGFyQ29kZUF0KFMpXTw8MTB8bltFLmNoYXJDb2RlQXQoUysxKV08PDR8bltFLmNoYXJDb2RlQXQoUysyKV0+PjIsQltiKytdPWo+PjgmMjU1LEJbYisrXT0yNTUmaiksQn0sbC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIHgoRSl7Zm9yKHZhciBq''@;'; put 'put ''LHc9RS5sZW5ndGgsUj13JTMsRj1bXSxCPTE2MzgzLGI9MCxPPXctUjtiPE87Yis9QilGLnB1c2goZyhFLGIsYitCPk8/TzpiK0IpKTtyZXR1cm4gMT09PVI/Ri5wdXNoKHRbKGo9RVt3LTFdKT4+Ml0rdFtqPDw0JjYzXSsiPT0iKToyPT09UiYmRi5wdXNoKHRbKGo9KEVbdy0yXTw8OCkrRVt3''@;'; put 'put ''LTFdKT4+MTBdK3Rbaj4+NCY2M10rdFtqPDwyJjYzXSsiPSIpLEYuam9pbigiIil9O2Zvcih2YXIgdD1bXSxuPVtdLGU9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXkscz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAx''@;'; put 'put ''MjM0NTY3ODkrLyIsbz0wO288NjQ7KytvKXRbb109c1tvXSxuW3MuY2hhckNvZGVBdChvKV09bztmdW5jdGlvbiBmKEUpe3ZhciBqPUUubGVuZ3RoO2lmKGolND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciB3''@;'; put 'put ''PUUuaW5kZXhPZigiPSIpO3JldHVybi0xPT09dyYmKHc9aiksW3csdz09PWo/MDo0LXclNF19ZnVuY3Rpb24gdihFKXtyZXR1cm4gdFtFPj4xOCY2M10rdFtFPj4xMiY2M10rdFtFPj42JjYzXSt0WzYzJkVdfWZ1bmN0aW9uIGcoRSxqLHcpe2Zvcih2YXIgRj1bXSxCPWo7Qjx3O0IrPTMpRi5w''@;'; put 'put ''dXNoKHYoKEVbQl08PDE2JjE2NzExNjgwKSsoRVtCKzFdPDw4JjY1MjgwKSsoMjU1JkVbQisyXSkpKTtyZXR1cm4gRi5qb2luKCIiKX1uWyItIi5jaGFyQ29kZUF0KDApXT02MixuWyJfIi5jaGFyQ29kZUF0KDApXT02M30sMzkwMDc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDk5''@;'; put 'put ''MTkpLGU9dCgyMjYwMSkscz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7bC5CdWZmZXI9aSxsLlNsb3dCdWZmZXI9ZnVuY3Rpb24gQihkKXtyZXR1cm4r''@;'; put 'put ''ZCE9ZCYmKGQ9MCksaS5hbGxvYygrZCl9LGwuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIG89MjE0NzQ4MzY0NztmdW5jdGlvbiBmKGQpe2lmKGQ+byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2QrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciByPW5l''@;'; put 'put ''dyBVaW50OEFycmF5KGQpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocixpLnByb3RvdHlwZSkscn1mdW5jdGlvbiBpKGQscixhKXtpZigibnVtYmVyIj09dHlwZW9mIGQpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1l''@;'; put 'put ''bnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gZyhkKX1yZXR1cm4gcChkLHIsYSl9ZnVuY3Rpb24gcChkLHIsYSl7aWYoInN0cmluZyI9PXR5cGVvZiBkKXJldHVybiBmdW5jdGlvbiB4KGQscil7aWYoKCJzdHJpbmciIT10eXBlb2Ygcnx8''@;'; put 'put ''IiI9PT1yKSYmKHI9InV0ZjgiKSwhaS5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7dmFyIGE9MHxiKGQsciksbT1mKGEpLEQ9bS53cml0ZShkLHIpO3JldHVybiBEIT09YSYmKG09bS5zbGljZSgwLEQpKSxtfShkLHIpO2lmKEFycmF5''@;'; put 'put ''QnVmZmVyLmlzVmlldyhkKSlyZXR1cm4gZnVuY3Rpb24gaihkKXtpZihadChkLFVpbnQ4QXJyYXkpKXt2YXIgcj1uZXcgVWludDhBcnJheShkKTtyZXR1cm4gdyhyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKX1yZXR1cm4gRShkKX0oZCk7aWYobnVsbD09ZCl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBkKTtpZihadChkLEFycmF5QnVmZmVyKXx8ZCYmWnQoZC5i''@;'; put 'put ''dWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoWnQoZCxTaGFyZWRBcnJheUJ1ZmZlcil8fGQmJlp0KGQuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIHcoZCxyLGEpO2lmKCJudW1iZXIiPT10eXBlb2YgZCl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgbT1kLnZhbHVlT2YmJmQudmFsdWVPZigpO2lmKG51bGwhPW0mJm0hPT1kKXJldHVybiBpLmZyb20obSxyLGEpO3ZhciBEPWZ1bmN0aW9uIFIoZCl7''@;'; put 'put ''aWYoaS5pc0J1ZmZlcihkKSl7dmFyIHI9MHxGKGQubGVuZ3RoKSxhPWYocik7cmV0dXJuIDA9PT1hLmxlbmd0aHx8ZC5jb3B5KGEsMCwwLHIpLGF9cmV0dXJuIHZvaWQgMCE9PWQubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgZC5sZW5ndGh8fGVuKGQubGVuZ3RoKT9mKDApOkUoZCk6IkJ1ZmZl''@;'; put 'put ''ciI9PT1kLnR5cGUmJkFycmF5LmlzQXJyYXkoZC5kYXRhKT9FKGQuZGF0YSk6dm9pZCAwfShkKTtpZihEKXJldHVybiBEO2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBkW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJu''@;'; put 'put ''IGkuZnJvbShkW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHIsYSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJl''@;'; put 'put ''Y2VpdmVkIHR5cGUgIit0eXBlb2YgZCl9ZnVuY3Rpb24geShkKXtpZigibnVtYmVyIiE9dHlwZW9mIGQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihkPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytk''@;'; put 'put ''KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBnKGQpe3JldHVybiB5KGQpLGYoZDwwPzA6MHxGKGQpKX1mdW5jdGlvbiBFKGQpe2Zvcih2YXIgcj1kLmxlbmd0aDwwPzA6MHxGKGQubGVuZ3RoKSxhPWYociksbT0wO208cjttKz0xKWFbbV09MjU1JmRbbV07cmV0''@;'; put 'put ''dXJuIGF9ZnVuY3Rpb24gdyhkLHIsYSl7aWYocjwwfHxkLmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoZC5ieXRlTGVuZ3RoPHIrKGF8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBp''@;'; put 'put ''cyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgbTtyZXR1cm4gbT12b2lkIDA9PT1yJiZ2b2lkIDA9PT1hP25ldyBVaW50OEFycmF5KGQpOnZvaWQgMD09PWE/bmV3IFVpbnQ4QXJyYXkoZCxyKTpuZXcgVWludDhBcnJheShkLHIsYSksT2JqZWN0LnNldFByb3RvdHlwZU9mKG0saS5w''@;'; put 'put ''cm90b3R5cGUpLG19ZnVuY3Rpb24gRihkKXtpZihkPj1vKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitvLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZH1mdW5jdGlvbiBiKGQscil7''@;'; put 'put ''aWYoaS5pc0J1ZmZlcihkKSlyZXR1cm4gZC5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGQpfHxadChkLEFycmF5QnVmZmVyKSlyZXR1cm4gZC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgZCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVz''@;'; put 'put ''dCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZCk7dmFyIGE9ZC5sZW5ndGgsbT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFtJiYwPT09YSlyZXR1cm4gMDtmb3IodmFyIEQ9ITE7''@;'; put 'put ''Oylzd2l0Y2gocil7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gYTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBubihkKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKmE7''@;'; put 'put ''Y2FzZSJoZXgiOnJldHVybiBhPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIG9uKGQpLmxlbmd0aDtkZWZhdWx0OmlmKEQpcmV0dXJuIG0/LTE6bm4oZCkubGVuZ3RoO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksRD0hMH19ZnVuY3Rpb24gTyhkLHIsYSl7dmFyIG09ITE7aWYoKHZvaWQgMD09PXJ8''@;'; put 'put ''fHI8MCkmJihyPTApLHI+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09YXx8YT50aGlzLmxlbmd0aCkmJihhPXRoaXMubGVuZ3RoKSxhPD0wKXx8KGE+Pj49MCk8PShyPj4+PTApKXJldHVybiIiO2ZvcihkfHwoZD0idXRmOCIpOzspc3dpdGNoKGQpe2Nhc2UiaGV4IjpyZXR1cm4gdnQodGhpcyxy''@;'; put 'put ''LGEpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFgodGhpcyxyLGEpO2Nhc2UiYXNjaWkiOnJldHVybiBZKHRoaXMscixhKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBmdCh0aGlzLHIsYSk7Y2FzZSJiYXNlNjQiOnJldHVybiBzdCh0aGlzLHIsYSk7Y2FzZSJ1Y3My''@;'; put 'put ''IjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBNdCh0aGlzLHIsYSk7ZGVmYXVsdDppZihtKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZCk7ZD0oZCsiIikudG9Mb3dlckNhc2UoKSxtPSEwfX1mdW5jdGlvbiBTKGQscixh''@;'; put 'put ''KXt2YXIgbT1kW3JdO2Rbcl09ZFthXSxkW2FdPW19ZnVuY3Rpb24gQyhkLHIsYSxtLEQpe2lmKDA9PT1kLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIGE/KG09YSxhPTApOmE+MjE0NzQ4MzY0Nz9hPTIxNDc0ODM2NDc6YTwtMjE0NzQ4MzY0OCYmKGE9LTIxNDc0ODM2NDgp''@;'; put 'put ''LGVuKGE9K2EpJiYoYT1EPzA6ZC5sZW5ndGgtMSksYTwwJiYoYT1kLmxlbmd0aCthKSxhPj1kLmxlbmd0aCl7aWYoRClyZXR1cm4tMTthPWQubGVuZ3RoLTF9ZWxzZSBpZihhPDApe2lmKCFEKXJldHVybi0xO2E9MH1pZigic3RyaW5nIj09dHlwZW9mIHImJihyPWkuZnJvbShyLG0pKSxpLmlz''@;'; put 'put ''QnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5ndGg/LTE6SyhkLHIsYSxtLEQpO2lmKCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4gciY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP0Q/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxs''@;'; put 'put ''KGQscixhKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGQscixhKTpLKGQsW3JdLGEsbSxEKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBLKGQscixhLG0sRCl7dmFyIFQsJD0xLGg9ZC5s''@;'; put 'put ''ZW5ndGgsUD1yLmxlbmd0aDtpZih2b2lkIDAhPT1tJiYoInVjczIiPT09KG09U3RyaW5nKG0pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bXx8InV0ZjE2bGUiPT09bXx8InV0Zi0xNmxlIj09PW0pKXtpZihkLmxlbmd0aDwyfHxyLmxlbmd0aDwyKXJldHVybi0xOyQ9MixoLz0yLFAvPTIs''@;'; put 'put ''YS89Mn1mdW5jdGlvbiBJKHosb3Qpe3JldHVybiAxPT09JD96W290XTp6LnJlYWRVSW50MTZCRShvdCokKX1pZihEKXt2YXIgQT0tMTtmb3IoVD1hO1Q8aDtUKyspaWYoSShkLFQpPT09SShyLC0xPT09QT8wOlQtQSkpe2lmKC0xPT09QSYmKEE9VCksVC1BKzE9PT1QKXJldHVybiBBKiR9ZWxz''@;'; put 'put ''ZS0xIT09QSYmKFQtPVQtQSksQT0tMX1lbHNlIGZvcihhK1A+aCYmKGE9aC1QKSxUPWE7VD49MDtULS0pe2Zvcih2YXIgaz0hMCxKPTA7SjxQO0orKylpZihJKGQsVCtKKSE9PUkocixKKSl7az0hMTticmVha31pZihrKXJldHVybiBUfXJldHVybi0xfWZ1bmN0aW9uIFUoZCxyLGEsbSl7YT1O''@;'; put 'put ''dW1iZXIoYSl8fDA7dmFyIEQ9ZC5sZW5ndGgtYTttPyhtPU51bWJlcihtKSk+RCYmKG09RCk6bT1EO3ZhciAkPXIubGVuZ3RoO20+JC8yJiYobT0kLzIpO2Zvcih2YXIgaD0wO2g8bTsrK2gpe3ZhciBQPXBhcnNlSW50KHIuc3Vic3RyKDIqaCwyKSwxNik7aWYoZW4oUCkpcmV0dXJuIGg7ZFth''@;'; put 'put ''K2hdPVB9cmV0dXJuIGh9ZnVuY3Rpb24gWihkLHIsYSxtKXtyZXR1cm4gWXQobm4ocixkLmxlbmd0aC1hKSxkLGEsbSl9ZnVuY3Rpb24gdHQoZCxyLGEsbSl7cmV0dXJuIFl0KGZ1bmN0aW9uIGFuKGQpe2Zvcih2YXIgcj1bXSxhPTA7YTxkLmxlbmd0aDsrK2Epci5wdXNoKDI1NSZkLmNoYXJD''@;'; put 'put ''b2RlQXQoYSkpO3JldHVybiByfShyKSxkLGEsbSl9ZnVuY3Rpb24gXyhkLHIsYSxtKXtyZXR1cm4gWXQob24ociksZCxhLG0pfWZ1bmN0aW9uIG50KGQscixhLG0pe3JldHVybiBZdChmdW5jdGlvbiBmbihkLHIpe2Zvcih2YXIgYSxtLCQ9W10saD0wO2g8ZC5sZW5ndGgmJiEoKHItPTIpPDAp''@;'; put 'put ''OysraCltPShhPWQuY2hhckNvZGVBdChoKSk+PjgsJC5wdXNoKGElMjU2KSwkLnB1c2gobSk7cmV0dXJuICR9KHIsZC5sZW5ndGgtYSksZCxhLG0pfWZ1bmN0aW9uIHN0KGQscixhKXtyZXR1cm4gbi5mcm9tQnl0ZUFycmF5KDA9PT1yJiZhPT09ZC5sZW5ndGg/ZDpkLnNsaWNlKHIsYSkpfWZ1''@;'; put 'put ''bmN0aW9uIFgoZCxyLGEpe2E9TWF0aC5taW4oZC5sZW5ndGgsYSk7Zm9yKHZhciBtPVtdLEQ9cjtEPGE7KXt2YXIgSSxULEEsaywkPWRbRF0saD1udWxsLFA9JD4yMzk/NDokPjIyMz8zOiQ+MTkxPzI6MTtpZihEK1A8PWEpc3dpdGNoKFApe2Nhc2UgMTokPDEyOCYmKGg9JCk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAyOjEyOD09KDE5MiYoST1kW0QrMV0pKSYmKGs9KDMxJiQpPDw2fDYzJkkpPjEyNyYmKGg9ayk7YnJlYWs7Y2FzZSAzOlQ9ZFtEKzJdLDEyOD09KDE5MiYoST1kW0QrMV0pKSYmMTI4PT0oMTkyJlQpJiYoaz0oMTUmJCk8PDEyfCg2MyZJKTw8Nnw2MyZUKT4yMDQ3JiYoazw1NTI5Nnx8az41''@;'; put 'put ''NzM0MykmJihoPWspO2JyZWFrO2Nhc2UgNDpUPWRbRCsyXSxBPWRbRCszXSwxMjg9PSgxOTImKEk9ZFtEKzFdKSkmJjEyOD09KDE5MiZUKSYmMTI4PT0oMTkyJkEpJiYoaz0oMTUmJCk8PDE4fCg2MyZJKTw8MTJ8KDYzJlQpPDw2fDYzJkEpPjY1NTM1JiZrPDExMTQxMTImJihoPWspfW51bGw9''@;'; put 'put ''PT1oPyhoPTY1NTMzLFA9MSk6aD42NTUzNSYmKG0ucHVzaCgoaC09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksaD01NjMyMHwxMDIzJmgpLG0ucHVzaChoKSxEKz1QfXJldHVybiBmdW5jdGlvbiBRKGQpe3ZhciByPWQubGVuZ3RoO2lmKHI8PVYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUu''@;'; put 'put ''YXBwbHkoU3RyaW5nLGQpO2Zvcih2YXIgYT0iIixtPTA7bTxyOylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxkLnNsaWNlKG0sbSs9VikpO3JldHVybiBhfShtKX1sLmtNYXhMZW5ndGg9bywhKGkuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiB1KCl7dHJ5e3ZhciBk''@;'; put 'put ''PW5ldyBVaW50OEFycmF5KDEpLHI9e2ZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocixVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGQsciksNDI9PT1kLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSkmJnR5''@;'; put 'put ''cGVvZiBjb25zb2xlPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZl''@;'; put 'put ''cmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihpLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoaS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLGkucG9vbFNpemU9ODE5MixpLmZyb209ZnVuY3Rpb24oZCxyLGEpe3JldHVybiBwKGQs''@;'; put 'put ''cixhKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKGkucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoaSxVaW50OEFycmF5KSxpLmFsbG9jPWZ1bmN0aW9uKGQscixhKXtyZXR1cm4gZnVuY3Rpb24gdihkLHIsYSl7cmV0dXJuIHkoZCksZDw9MD9m''@;'; put 'put ''KGQpOnZvaWQgMCE9PXI/InN0cmluZyI9PXR5cGVvZiBhP2YoZCkuZmlsbChyLGEpOmYoZCkuZmlsbChyKTpmKGQpfShkLHIsYSl9LGkuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZCl7cmV0dXJuIGcoZCl9LGkuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGQpe3JldHVybiBnKGQpfSxpLmlzQnVm''@;'; put 'put ''ZmVyPWZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT1yJiYhMD09PXIuX2lzQnVmZmVyJiZyIT09aS5wcm90b3R5cGV9LGkuY29tcGFyZT1mdW5jdGlvbihyLGEpe2lmKFp0KHIsVWludDhBcnJheSkmJihyPWkuZnJvbShyLHIub2Zmc2V0LHIuYnl0ZUxlbmd0aCkpLFp0KGEsVWludDhBcnJheSkm''@;'; put 'put ''JihhPWkuZnJvbShhLGEub2Zmc2V0LGEuYnl0ZUxlbmd0aCkpLCFpLmlzQnVmZmVyKHIpfHwhaS5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihy''@;'; put 'put ''PT09YSlyZXR1cm4gMDtmb3IodmFyIG09ci5sZW5ndGgsRD1hLmxlbmd0aCwkPTAsaD1NYXRoLm1pbihtLEQpOyQ8aDsrKyQpaWYoclskXSE9PWFbJF0pe209clskXSxEPWFbJF07YnJlYWt9cmV0dXJuIG08RD8tMTpEPG0/MTowfSxpLmlzRW5jb2Rpbmc9ZnVuY3Rpb24ocil7c3dpdGNoKFN0''@;'; put 'put ''cmluZyhyKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJu''@;'; put 'put ''ITA7ZGVmYXVsdDpyZXR1cm4hMX19LGkuY29uY2F0PWZ1bmN0aW9uKHIsYSl7aWYoIUFycmF5LmlzQXJyYXkocikpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gaS5hbGxvYygw''@;'; put 'put ''KTt2YXIgbTtpZih2b2lkIDA9PT1hKWZvcihhPTAsbT0wO208ci5sZW5ndGg7KyttKWErPXJbbV0ubGVuZ3RoO3ZhciBEPWkuYWxsb2NVbnNhZmUoYSksJD0wO2ZvcihtPTA7bTxyLmxlbmd0aDsrK20pe3ZhciBoPXJbbV07aWYoWnQoaCxVaW50OEFycmF5KSkkK2gubGVuZ3RoPkQubGVuZ3Ro''@;'; put 'put ''P2kuZnJvbShoKS5jb3B5KEQsJCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoRCxoLCQpO2Vsc2V7aWYoIWkuaXNCdWZmZXIoaCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2guY29weShELCQpfSQrPWgu''@;'; put 'put ''bGVuZ3RofXJldHVybiBEfSxpLmJ5dGVMZW5ndGg9YixpLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsaS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5sZW5ndGg7aWYociUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlw''@;'; put 'put ''bGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgYT0wO2E8cjthKz0yKVModGhpcyxhLGErMSk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBh''@;'; put 'put ''IG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIGE9MDthPHI7YSs9NClTKHRoaXMsYSxhKzMpLFModGhpcyxhKzEsYSsyKTtyZXR1cm4gdGhpc30saS5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5sZW5ndGg7aWYociU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9y''@;'; put 'put ''KCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgYT0wO2E8cjthKz04KVModGhpcyxhLGErNyksUyh0aGlzLGErMSxhKzYpLFModGhpcyxhKzIsYSs1KSxTKHRoaXMsYSszLGErNCk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnRvTG9jYWxlU3Ry''@;'; put 'put ''aW5nPWkucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1yPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP1godGhpcywwLHIpOk8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxpLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24ocil7aWYoIWku''@;'; put 'put ''aXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09cnx8MD09PWkuY29tcGFyZSh0aGlzLHIpfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIHI9IiIsYT1sLklOU1BFQ1RfTUFYX0JZVEVTO3Jl''@;'; put 'put ''dHVybiByPXRoaXMudG9TdHJpbmcoImhleCIsMCxhKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPmEmJihyKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3IrIj4ifSxzJiYoaS5wcm90b3R5cGVbc109aS5wcm90b3R5cGUuaW5zcGVjdCksaS5wcm90b3R5cGUuY29t''@;'; put 'put ''cGFyZT1mdW5jdGlvbihyLGEsbSxELCQpe2lmKFp0KHIsVWludDhBcnJheSkmJihyPWkuZnJvbShyLHIub2Zmc2V0LHIuYnl0ZUxlbmd0aCkpLCFpLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZl''@;'; put 'put ''ciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHIpO2lmKHZvaWQgMD09PWEmJihhPTApLHZvaWQgMD09PW0mJihtPXI/ci5sZW5ndGg6MCksdm9pZCAwPT09RCYmKEQ9MCksdm9pZCAwPT09JCYmKCQ9dGhpcy5sZW5ndGgpLGE8MHx8bT5yLmxlbmd0aHx8RDwwfHwkPnRo''@;'; put 'put ''aXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihEPj0kJiZhPj1tKXJldHVybiAwO2lmKEQ+PSQpcmV0dXJuLTE7aWYoYT49bSlyZXR1cm4gMTtpZih0aGlzPT09cilyZXR1cm4gMDtmb3IodmFyIGg9KCQ+Pj49MCktKEQ+Pj49MCksUD0obT4+''@;'; put 'put ''Pj0wKS0oYT4+Pj0wKSxJPU1hdGgubWluKGgsUCksVD10aGlzLnNsaWNlKEQsJCksQT1yLnNsaWNlKGEsbSksaz0wO2s8STsrK2spaWYoVFtrXSE9PUFba10pe2g9VFtrXSxQPUFba107YnJlYWt9cmV0dXJuIGg8UD8tMTpQPGg/MTowfSxpLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihy''@;'; put 'put ''LGEsbSl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YocixhLG0pfSxpLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gQyh0aGlzLHIsYSxtLCEwKX0saS5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24ocixhLG0pe3JldHVybiBDKHRoaXMscixhLG0sITEpfSxp''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihyLGEsbSxEKXtpZih2b2lkIDA9PT1hKUQ9InV0ZjgiLG09dGhpcy5sZW5ndGgsYT0wO2Vsc2UgaWYodm9pZCAwPT09bSYmInN0cmluZyI9PXR5cGVvZiBhKUQ9YSxtPXRoaXMubGVuZ3RoLGE9MDtlbHNle2lmKCFpc0Zpbml0ZShhKSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7YT4+Pj0wLGlzRmluaXRlKG0pPyhtPj4+PTAsdm9pZCAwPT09RCYmKEQ9InV0ZjgiKSk6KEQ9bSxtPXZvaWQgMCl9dmFyICQ9dGhpcy5sZW5n''@;'; put 'put ''dGgtYTtpZigodm9pZCAwPT09bXx8bT4kKSYmKG09JCksci5sZW5ndGg+MCYmKG08MHx8YTwwKXx8YT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtEfHwoRD0idXRmOCIpO2Zvcih2YXIgaD0hMTs7KXN3''@;'; put 'put ''aXRjaChEKXtjYXNlImhleCI6cmV0dXJuIFUodGhpcyxyLGEsbSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gWih0aGlzLHIsYSxtKTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB0dCh0aGlzLHIsYSxtKTtjYXNlImJhc2U2NCI6cmV0dXJuIF8o''@;'; put 'put ''dGhpcyxyLGEsbSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBudCh0aGlzLHIsYSxtKTtkZWZhdWx0OmlmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitEKTtEPSgiIitEKS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''LGg9ITB9fSxpLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBWPTQwOTY7ZnVuY3Rpb24gWShkLHIsYSl7dmFyIG09IiI7YT1NYXRoLm1pbihkLmxl''@;'; put 'put ''bmd0aCxhKTtmb3IodmFyIEQ9cjtEPGE7KytEKW0rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmRbRF0pO3JldHVybiBtfWZ1bmN0aW9uIGZ0KGQscixhKXt2YXIgbT0iIjthPU1hdGgubWluKGQubGVuZ3RoLGEpO2Zvcih2YXIgRD1yO0Q8YTsrK0QpbSs9U3RyaW5nLmZyb21DaGFyQ29kZShk''@;'; put 'put ''W0RdKTtyZXR1cm4gbX1mdW5jdGlvbiB2dChkLHIsYSl7dmFyIG09ZC5sZW5ndGg7KCFyfHxyPDApJiYocj0wKSwoIWF8fGE8MHx8YT5tKSYmKGE9bSk7Zm9yKHZhciBEPSIiLCQ9cjskPGE7KyskKUQrPWxuW2RbJF1dO3JldHVybiBEfWZ1bmN0aW9uIE10KGQscixhKXtmb3IodmFyIG09ZC5z''@;'; put 'put ''bGljZShyLGEpLEQ9IiIsJD0wOyQ8bS5sZW5ndGgtMTskKz0yKUQrPVN0cmluZy5mcm9tQ2hhckNvZGUobVskXSsyNTYqbVskKzFdKTtyZXR1cm4gRH1mdW5jdGlvbiBFdChkLHIsYSl7aWYoZCUxIT0wfHxkPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lm''@;'; put 'put ''KGQrcj5hKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gRnQoZCxyLGEsbSxELCQpe2lmKCFpLmlzQnVmZmVyKGQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZm''@;'; put 'put ''ZXIgaW5zdGFuY2UnKTtpZihyPkR8fHI8JCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoYSttPmQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBqdChkLHIsYSxtLEQs''@;'; put 'put ''JCl7aWYoYSttPmQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihhPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFh0KGQscixhLG0sRCl7cmV0dXJuIHI9K3IsYT4+Pj0wLER8fGp0KGQsMCxh''@;'; put 'put ''LDQpLGUud3JpdGUoZCxyLGEsbSwyMyw0KSxhKzR9ZnVuY3Rpb24gQnQoZCxyLGEsbSxEKXtyZXR1cm4gcj0rcixhPj4+PTAsRHx8anQoZCwwLGEsOCksZS53cml0ZShkLHIsYSxtLDUyLDgpLGErOH1pLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihyLGEpe3ZhciBtPXRoaXMubGVuZ3RoOyhy''@;'; put 'put ''PX5+cik8MD8ocis9bSk8MCYmKHI9MCk6cj5tJiYocj1tKSwoYT12b2lkIDA9PT1hP206fn5hKTwwPyhhKz1tKTwwJiYoYT0wKTphPm0mJihhPW0pLGE8ciYmKGE9cik7dmFyIEQ9dGhpcy5zdWJhcnJheShyLGEpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoRCxpLnByb3RvdHlwZSks''@;'; put 'put ''RH0saS5wcm90b3R5cGUucmVhZFVpbnRMRT1pLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHIsYSxtKXtyPj4+PTAsYT4+Pj0wLG18fEV0KHIsYSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBEPXRoaXNbcl0sJD0xLGg9MDsrK2g8YSYmKCQqPTI1Nik7KUQrPXRoaXNbcitoXSokO3JldHVy''@;'; put 'put ''biBEfSxpLnByb3RvdHlwZS5yZWFkVWludEJFPWkucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24ocixhLG0pe3I+Pj49MCxhPj4+PTAsbXx8RXQocixhLHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9dGhpc1tyKy0tYV0sJD0xO2E+MCYmKCQqPTI1Nik7KUQrPXRoaXNbcistLWFdKiQ7cmV0''@;'; put 'put ''dXJuIER9LGkucHJvdG90eXBlLnJlYWRVaW50OD1pLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fEV0KHIsMSx0aGlzLmxlbmd0aCksdGhpc1tyXX0saS5wcm90b3R5cGUucmVhZFVpbnQxNkxFPWkucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5j''@;'; put 'put ''dGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociwyLHRoaXMubGVuZ3RoKSx0aGlzW3JdfHRoaXNbcisxXTw8OH0saS5wcm90b3R5cGUucmVhZFVpbnQxNkJFPWkucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociwyLHRoaXMubGVu''@;'; put 'put ''Z3RoKSx0aGlzW3JdPDw4fHRoaXNbcisxXX0saS5wcm90b3R5cGUucmVhZFVpbnQzMkxFPWkucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociw0LHRoaXMubGVuZ3RoKSwodGhpc1tyXXx0aGlzW3IrMV08PDh8dGhpc1tyKzJdPDwxNikr''@;'; put 'put ''MTY3NzcyMTYqdGhpc1tyKzNdfSxpLnByb3RvdHlwZS5yZWFkVWludDMyQkU9aS5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxFdChyLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbcl0rKHRoaXNbcisxXTw8MTZ8dGhpc1tyKzJdPDw4''@;'; put 'put ''fHRoaXNbciszXSl9LGkucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihyLGEsbSl7cj4+Pj0wLGE+Pj49MCxtfHxFdChyLGEsdGhpcy5sZW5ndGgpO2Zvcih2YXIgRD10aGlzW3JdLCQ9MSxoPTA7KytoPGEmJigkKj0yNTYpOylEKz10aGlzW3IraF0qJDtyZXR1cm4gRD49KCQqPTEyOCkm''@;'; put 'put ''JihELT1NYXRoLnBvdygyLDgqYSkpLER9LGkucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihyLGEsbSl7cj4+Pj0wLGE+Pj49MCxtfHxFdChyLGEsdGhpcy5sZW5ndGgpO2Zvcih2YXIgRD1hLCQ9MSxoPXRoaXNbcistLURdO0Q+MCYmKCQqPTI1Nik7KWgrPXRoaXNbcistLURdKiQ7cmV0''@;'; put 'put ''dXJuIGg+PSgkKj0xMjgpJiYoaC09TWF0aC5wb3coMiw4KmEpKSxofSxpLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tyXT8tMSooMjU1LXRoaXNbcl0rMSk6dGhpc1tyXX0saS5wcm90b3R5cGUu''@;'; put 'put ''cmVhZEludDE2TEU9ZnVuY3Rpb24ocixhKXtyPj4+PTAsYXx8RXQociwyLHRoaXMubGVuZ3RoKTt2YXIgbT10aGlzW3JdfHRoaXNbcisxXTw8ODtyZXR1cm4gMzI3NjgmbT80Mjk0OTAxNzYwfG06bX0saS5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24ocixhKXtyPj4+PTAsYXx8RXQo''@;'; put 'put ''ciwyLHRoaXMubGVuZ3RoKTt2YXIgbT10aGlzW3IrMV18dGhpc1tyXTw8ODtyZXR1cm4gMzI3NjgmbT80Mjk0OTAxNzYwfG06bX0saS5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fEV0KHIsNCx0aGlzLmxlbmd0aCksdGhpc1tyXXx0aGlzW3Ir''@;'; put 'put ''MV08PDh8dGhpc1tyKzJdPDwxNnx0aGlzW3IrM108PDI0fSxpLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociw0LHRoaXMubGVuZ3RoKSx0aGlzW3JdPDwyNHx0aGlzW3IrMV08PDE2fHRoaXNbcisyXTw8OHx0aGlzW3IrM119LGkucHJv''@;'; put 'put ''dG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxFdChyLDQsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHIsITAsMjMsNCl9LGkucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxFdChyLDQsdGhpcy5sZW5n''@;'; put 'put ''dGgpLGUucmVhZCh0aGlzLHIsITEsMjMsNCl9LGkucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociw4LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyxyLCEwLDUyLDgpfSxpLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24ocixh''@;'; put 'put ''KXtyZXR1cm4gcj4+Pj0wLGF8fEV0KHIsOCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMSw1Miw4KX0saS5wcm90b3R5cGUud3JpdGVVaW50TEU9aS5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24ocixhLG0sRCl7cj0rcixhPj4+PTAsbT4+Pj0wLER8fEZ0KHRoaXMscixhLG0s''@;'; put 'put ''TWF0aC5wb3coMiw4Km0pLTEsMCk7dmFyIGg9MSxQPTA7Zm9yKHRoaXNbYV09MjU1JnI7KytQPG0mJihoKj0yNTYpOyl0aGlzW2ErUF09ci9oJjI1NTtyZXR1cm4gYSttfSxpLnByb3RvdHlwZS53cml0ZVVpbnRCRT1pLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihyLGEsbSxEKXty''@;'; put 'put ''PStyLGE+Pj49MCxtPj4+PTAsRHx8RnQodGhpcyxyLGEsbSxNYXRoLnBvdygyLDgqbSktMSwwKTt2YXIgaD1tLTEsUD0xO2Zvcih0aGlzW2EraF09MjU1JnI7LS1oPj0wJiYoUCo9MjU2KTspdGhpc1thK2hdPXIvUCYyNTU7cmV0dXJuIGErbX0saS5wcm90b3R5cGUud3JpdGVVaW50OD1pLnBy''@;'; put 'put ''b3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEsMSwyNTUsMCksdGhpc1thXT0yNTUmcixhKzF9LGkucHJvdG90eXBlLndyaXRlVWludDE2TEU9aS5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihyLGEsbSl7''@;'; put 'put ''cmV0dXJuIHI9K3IsYT4+Pj0wLG18fEZ0KHRoaXMscixhLDIsNjU1MzUsMCksdGhpc1thXT0yNTUmcix0aGlzW2ErMV09cj4+PjgsYSsyfSxpLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPWkucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49''@;'; put 'put ''MCxtfHxGdCh0aGlzLHIsYSwyLDY1NTM1LDApLHRoaXNbYV09cj4+PjgsdGhpc1thKzFdPTI1NSZyLGErMn0saS5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1pLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEs''@;'; put 'put ''NCw0Mjk0OTY3Mjk1LDApLHRoaXNbYSszXT1yPj4+MjQsdGhpc1thKzJdPXI+Pj4xNix0aGlzW2ErMV09cj4+PjgsdGhpc1thXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndyaXRlVWludDMyQkU9aS5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIHI9K3Is''@;'; put 'put ''YT4+Pj0wLG18fEZ0KHRoaXMscixhLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2FdPXI+Pj4yNCx0aGlzW2ErMV09cj4+PjE2LHRoaXNbYSsyXT1yPj4+OCx0aGlzW2ErM109MjU1JnIsYSs0fSxpLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHIsYSxtLEQpe2lmKHI9K3IsYT4+Pj0wLCFE''@;'; put 'put ''KXt2YXIgJD1NYXRoLnBvdygyLDgqbS0xKTtGdCh0aGlzLHIsYSxtLCQtMSwtJCl9dmFyIGg9MCxQPTEsST0wO2Zvcih0aGlzW2FdPTI1NSZyOysraDxtJiYoUCo9MjU2KTspcjwwJiYwPT09SSYmMCE9PXRoaXNbYStoLTFdJiYoST0xKSx0aGlzW2EraF09KHIvUD4+MCktSSYyNTU7cmV0dXJu''@;'; put 'put ''IGErbX0saS5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihyLGEsbSxEKXtpZihyPStyLGE+Pj49MCwhRCl7dmFyICQ9TWF0aC5wb3coMiw4Km0tMSk7RnQodGhpcyxyLGEsbSwkLTEsLSQpfXZhciBoPW0tMSxQPTEsST0wO2Zvcih0aGlzW2EraF09MjU1JnI7LS1oPj0wJiYoUCo9MjU2''@;'; put 'put ''KTspcjwwJiYwPT09SSYmMCE9PXRoaXNbYStoKzFdJiYoST0xKSx0aGlzW2EraF09KHIvUD4+MCktSSYyNTU7cmV0dXJuIGErbX0saS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEsMSwxMjcsLTEyOCkscjwwJiYo''@;'; put 'put ''cj0yNTUrcisxKSx0aGlzW2FdPTI1NSZyLGErMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEsMiwzMjc2NywtMzI3NjgpLHRoaXNbYV09MjU1JnIsdGhpc1thKzFdPXI+Pj44LGErMn0saS5wcm90b3R5''@;'; put 'put ''cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEsMiwzMjc2NywtMzI3NjgpLHRoaXNbYV09cj4+PjgsdGhpc1thKzFdPTI1NSZyLGErMn0saS5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4g''@;'; put 'put ''cj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2FdPTI1NSZyLHRoaXNbYSsxXT1yPj4+OCx0aGlzW2ErMl09cj4+PjE2LHRoaXNbYSszXT1yPj4+MjQsYSs0fSxpLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24ocixhLG0pe3Jl''@;'; put 'put ''dHVybiByPStyLGE+Pj49MCxtfHxGdCh0aGlzLHIsYSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHI8MCYmKHI9NDI5NDk2NzI5NStyKzEpLHRoaXNbYV09cj4+PjI0LHRoaXNbYSsxXT1yPj4+MTYsdGhpc1thKzJdPXI+Pj44LHRoaXNbYSszXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndy''@;'; put 'put ''aXRlRmxvYXRMRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIFh0KHRoaXMscixhLCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiBYdCh0aGlzLHIsYSwhMSxtKX0saS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihyLGEsbSl7cmV0''@;'; put 'put ''dXJuIEJ0KHRoaXMscixhLCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gQnQodGhpcyxyLGEsITEsbSl9LGkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocixhLG0sRCl7aWYoIWkuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''YXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYobXx8KG09MCksIUQmJjAhPT1EJiYoRD10aGlzLmxlbmd0aCksYT49ci5sZW5ndGgmJihhPXIubGVuZ3RoKSxhfHwoYT0wKSxEPjAmJkQ8bSYmKEQ9bSksRD09PW18fDA9PT1yLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAw''@;'; put 'put ''O2lmKGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG08MHx8bT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91''@;'; put 'put ''dCBvZiBib3VuZHMiKTtEPnRoaXMubGVuZ3RoJiYoRD10aGlzLmxlbmd0aCksci5sZW5ndGgtYTxELW0mJihEPXIubGVuZ3RoLWErbSk7dmFyICQ9RC1tO3JldHVybiB0aGlzPT09ciYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5''@;'; put 'put ''V2l0aGluKGEsbSxEKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChyLHRoaXMuc3ViYXJyYXkobSxEKSxhKSwkfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHIsYSxtLEQpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil7aWYoInN0cmluZyI9PXR5cGVvZiBhPyhEPWEsYT0wLG09dGhp''@;'; put 'put ''cy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbSYmKEQ9bSxtPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1EJiYic3RyaW5nIiE9dHlwZW9mIEQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgRCYmIWkuaXNFbmNvZGlu''@;'; put 'put ''ZyhEKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0QpO2lmKDE9PT1yLmxlbmd0aCl7dmFyICQ9ci5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1EJiYkPDEyOHx8ImxhdGluMSI9PT1EKSYmKHI9JCl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHI/ciY9MjU1OiJib29s''@;'; put 'put ''ZWFuIj09dHlwZW9mIHImJihyPU51bWJlcihyKSk7aWYoYTwwfHx0aGlzLmxlbmd0aDxhfHx0aGlzLmxlbmd0aDxtKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihtPD1hKXJldHVybiB0aGlzO3ZhciBoO2lmKGE+Pj49MCxtPXZvaWQgMD09PW0/dGhpcy5s''@;'; put 'put ''ZW5ndGg6bT4+PjAscnx8KHI9MCksIm51bWJlciI9PXR5cGVvZiByKWZvcihoPWE7aDxtOysraCl0aGlzW2hdPXI7ZWxzZXt2YXIgUD1pLmlzQnVmZmVyKHIpP3I6aS5mcm9tKHIsRCksST1QLmxlbmd0aDtpZigwPT09SSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrcisnIiBp''@;'; put 'put ''cyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKGg9MDtoPG0tYTsrK2gpdGhpc1toK2FdPVBbaCVJXX1yZXR1cm4gdGhpc307dmFyIFF0PS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gbm4oZCxyKXtyPXJ8fDEvMDtmb3IodmFyIGEsbT1kLmxlbmd0aCxEPW51bGwsJD1b''@;'; put 'put ''XSxoPTA7aDxtOysraCl7aWYoKGE9ZC5jaGFyQ29kZUF0KGgpKT41NTI5NSYmYTw1NzM0NCl7aWYoIUQpe2lmKGE+NTYzMTkpeyhyLT0zKT4tMSYmJC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihoKzE9PT1tKXsoci09Myk+LTEmJiQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9''@;'; put 'put ''RD1hO2NvbnRpbnVlfWlmKGE8NTYzMjApeyhyLT0zKT4tMSYmJC5wdXNoKDIzOSwxOTEsMTg5KSxEPWE7Y29udGludWV9YT02NTUzNisoRC01NTI5Njw8MTB8YS01NjMyMCl9ZWxzZSBEJiYoci09Myk+LTEmJiQucHVzaCgyMzksMTkxLDE4OSk7aWYoRD1udWxsLGE8MTI4KXtpZigoci09MSk8''@;'; put 'put ''MClicmVhazskLnB1c2goYSl9ZWxzZSBpZihhPDIwNDgpe2lmKChyLT0yKTwwKWJyZWFrOyQucHVzaChhPj42fDE5Miw2MyZhfDEyOCl9ZWxzZSBpZihhPDY1NTM2KXtpZigoci09Myk8MClicmVhazskLnB1c2goYT4+MTJ8MjI0LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX1lbHNle2lmKCEoYTwx''@;'; put 'put ''MTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChyLT00KTwwKWJyZWFrOyQucHVzaChhPj4xOHwyNDAsYT4+MTImNjN8MTI4LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX19cmV0dXJuICR9ZnVuY3Rpb24gb24oZCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVu''@;'; put 'put ''Y3Rpb24gcm4oZCl7aWYoKGQ9KGQ9ZC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShRdCwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZC5sZW5ndGglNCE9MDspZCs9Ij0iO3JldHVybiBkfShkKSl9ZnVuY3Rpb24gWXQoZCxyLGEsbSl7Zm9yKHZhciBEPTA7RDxtJiYhKEQrYT49''@;'; put 'put ''ci5sZW5ndGh8fEQ+PWQubGVuZ3RoKTsrK0QpcltEK2FdPWRbRF07cmV0dXJuIER9ZnVuY3Rpb24gWnQoZCxyKXtyZXR1cm4gZCBpbnN0YW5jZW9mIHJ8fG51bGwhPWQmJm51bGwhPWQuY29uc3RydWN0b3ImJm51bGwhPWQuY29uc3RydWN0b3IubmFtZSYmZC5jb25zdHJ1Y3Rvci5uYW1lPT09''@;'; put 'put ''ci5uYW1lfWZ1bmN0aW9uIGVuKGQpe3JldHVybiBkIT1kfXZhciBsbj1mdW5jdGlvbigpe2Zvcih2YXIgZD0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uZXcgQXJyYXkoMjU2KSxhPTA7YTwxNjsrK2EpZm9yKHZhciBtPTE2KmEsRD0wO0Q8MTY7KytEKXJbbStEXT1kW2FdK2RbRF07cmV0dXJuIHJ9''@;'; put 'put ''KCl9LDIyNjAxOihjLGwpPT57bC5yZWFkPWZ1bmN0aW9uKHQsbixlLHMsbyl7dmFyIHUsZixpPTgqby1zLTEscD0oMTw8aSktMSx5PXA+PjEsdj0tNyxnPWU/by0xOjAseD1lPy0xOjEsRT10W24rZ107Zm9yKGcrPXgsdT1FJigxPDwtdiktMSxFPj49LXYsdis9aTt2PjA7dT0yNTYqdSt0W24r''@;'; put 'put ''Z10sZys9eCx2LT04KTtmb3IoZj11JigxPDwtdiktMSx1Pj49LXYsdis9czt2PjA7Zj0yNTYqZit0W24rZ10sZys9eCx2LT04KTtpZigwPT09dSl1PTEteTtlbHNle2lmKHU9PT1wKXJldHVybiBmP05hTjoxLzAqKEU/LTE6MSk7Zis9TWF0aC5wb3coMixzKSx1LT15fXJldHVybihFPy0xOjEp''@;'; put 'put ''KmYqTWF0aC5wb3coMix1LXMpfSxsLndyaXRlPWZ1bmN0aW9uKHQsbixlLHMsbyx1KXt2YXIgZixpLHAseT04KnUtby0xLHY9KDE8PHkpLTEsZz12Pj4xLHg9MjM9PT1vP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxFPXM/MDp1LTEsaj1zPzE6LTEsdz1uPDB8fDA9PT1uJiYx''@;'; put 'put ''L248MD8xOjA7Zm9yKG49TWF0aC5hYnMobiksaXNOYU4obil8fG49PT0xLzA/KGk9aXNOYU4obik/MTowLGY9dik6KGY9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMiksbioocD1NYXRoLnBvdygyLC1mKSk8MSYmKGYtLSxwKj0yKSwobis9ZitnPj0xP3gvcDp4Kk1hdGgucG93KDIs''@;'; put 'put ''MS1nKSkqcD49MiYmKGYrKyxwLz0yKSxmK2c+PXY/KGk9MCxmPXYpOmYrZz49MT8oaT0obipwLTEpKk1hdGgucG93KDIsbyksZis9Zyk6KGk9bipNYXRoLnBvdygyLGctMSkqTWF0aC5wb3coMixvKSxmPTApKTtvPj04O3RbZStFXT0yNTUmaSxFKz1qLGkvPTI1NixvLT04KTtmb3IoZj1mPDxv''@;'; put 'put ''fGkseSs9bzt5PjA7dFtlK0VdPTI1NSZmLEUrPWosZi89MjU2LHktPTgpO3RbZStFLWpdfD0xMjgqd319LDQ4MzMyOigpPT57InVzZSBzdHJpY3QiOyFmdW5jdGlvbihoKXtjb25zdCBQPWgucGVyZm9ybWFuY2U7ZnVuY3Rpb24gSShJdCl7UCYmUC5tYXJrJiZQLm1hcmsoSXQpfWZ1bmN0aW9u''@;'; put 'put ''IFQoSXQsYXQpe1AmJlAubWVhc3VyZSYmUC5tZWFzdXJlKEl0LGF0KX1JKCJab25lIik7Y29uc3QgQT1oLl9fWm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIjtmdW5jdGlvbiBrKEl0KXtyZXR1cm4gQStJdH1jb25zdCBKPSEwPT09aFtrKCJmb3JjZUR1cGxpY2F0ZVpvbmVD''@;'; put 'put ''aGVjayIpXTtpZihoLlpvbmUpe2lmKEp8fCJmdW5jdGlvbiIhPXR5cGVvZiBoLlpvbmUuX19zeW1ib2xfXyl0aHJvdyBuZXcgRXJyb3IoIlpvbmUgYWxyZWFkeSBsb2FkZWQuIik7cmV0dXJuIGguWm9uZX1sZXQgej0oKCk9PntjbGFzcyBJdHtzdGF0aWMgYXNzZXJ0Wm9uZVBhdGNoZWQoKXtp''@;'; put 'put ''ZihoLlByb21pc2UhPT1fdC5ab25lQXdhcmVQcm9taXNlKXRocm93IG5ldyBFcnJvcigiWm9uZS5qcyBoYXMgZGV0ZWN0ZWQgdGhhdCBab25lQXdhcmVQcm9taXNlIGAod2luZG93fGdsb2JhbCkuUHJvbWlzZWAgaGFzIGJlZW4gb3ZlcndyaXR0ZW4uXG5Nb3N0IGxpa2VseSBjYXVzZSBpcyB0''@;'; put 'put ''aGF0IGEgUHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgYWZ0ZXIgWm9uZS5qcyAoUG9seWZpbGxpbmcgUHJvbWlzZSBhcGkgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHpvbmUuanMgaXMgbG9hZGVkLiBJZiB5b3UgbXVzdCBsb2FkIG9uZSwgZG8gc28gYmVmb3JlIGxvYWRpbmcgem9u''@;'; put 'put ''ZS5qcy4pIil9c3RhdGljIGdldCByb290KCl7bGV0IE09SXQuY3VycmVudDtmb3IoO00ucGFyZW50OylNPU0ucGFyZW50O3JldHVybiBNfXN0YXRpYyBnZXQgY3VycmVudCgpe3JldHVybiBMdC56b25lfXN0YXRpYyBnZXQgY3VycmVudFRhc2soKXtyZXR1cm4gcXR9c3RhdGljIF9fbG9hZF9w''@;'; put 'put ''YXRjaChNLE4saHQ9ITEpe2lmKF90Lmhhc093blByb3BlcnR5KE0pKXtpZighaHQmJkopdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK00pfWVsc2UgaWYoIWhbIl9fWm9uZV9kaXNhYmxlXyIrTV0pe2NvbnN0IG10PSJab25lOiIrTTtJKG10KSxfdFtNXT1OKGgsSXQsSHQp''@;'; put 'put ''LFQobXQsbXQpfX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfWNvbnN0cnVjdG9yKE0sTil7dGhpcy5fcGFyZW50PU0sdGhpcy5fbmFtZT1OP04ubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9TiYm''@;'; put 'put ''Ti5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IGN0KHRoaXMsdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSxOKX1nZXQoTSl7Y29uc3QgTj10aGlzLmdldFpvbmVXaXRoKE0pO2lmKE4pcmV0dXJuIE4uX3Byb3BlcnRpZXNbTV19Z2V0Wm9uZVdp''@;'; put 'put ''dGgoTSl7bGV0IE49dGhpcztmb3IoO047KXtpZihOLl9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KE0pKXJldHVybiBOO049Ti5fcGFyZW50fXJldHVybiBudWxsfWZvcmsoTSl7aWYoIU0pdGhyb3cgbmV3IEVycm9yKCJab25lU3BlYyByZXF1aXJlZCEiKTtyZXR1cm4gdGhpcy5fem9uZURl''@;'; put 'put ''bGVnYXRlLmZvcmsodGhpcyxNKX13cmFwKE0sTil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE0pdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK00pO2NvbnN0IGh0PXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxNLE4pLG10PXRoaXM7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIG10LnJ1bkd1YXJkZWQoaHQsdGhpcyxhcmd1bWVudHMsTil9fXJ1bihNLE4saHQsbXQpe0x0PXtwYXJlbnQ6THQsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxNLE4saHQsbXQpfWZpbmFsbHl7THQ9THQucGFyZW50''@;'; put 'put ''fX1ydW5HdWFyZGVkKE0sTj1udWxsLGh0LG10KXtMdD17cGFyZW50Okx0LHpvbmU6dGhpc307dHJ5e3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLE0sTixodCxtdCl9Y2F0Y2goV3Qpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLFd0KSl0''@;'; put 'put ''aHJvdyBXdH19ZmluYWxseXtMdD1MdC5wYXJlbnR9fXJ1blRhc2soTSxOLGh0KXtpZihNLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKE0uem9uZXx8R3QpLm5hbWUrIjsgRXhl''@;'; put 'put ''Y3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKE0uc3RhdGU9PT1EdCYmKE0udHlwZT09PXp0fHxNLnR5cGU9PT1kdCkpcmV0dXJuO2NvbnN0IG10PU0uc3RhdGUhPXJ0O210JiZNLl90cmFuc2l0aW9uVG8ocnQsd3QpLE0ucnVuQ291bnQrKztjb25zdCBXdD1xdDtxdD1NLEx0PXtwYXJlbnQ6''@;'; put 'put ''THQsem9uZTp0aGlzfTt0cnl7TS50eXBlPT1kdCYmTS5kYXRhJiYhTS5kYXRhLmlzUGVyaW9kaWMmJihNLmNhbmNlbEZuPXZvaWQgMCk7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlVGFzayh0aGlzLE0sTixodCl9Y2F0Y2goSCl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhh''@;'; put 'put ''bmRsZUVycm9yKHRoaXMsSCkpdGhyb3cgSH19ZmluYWxseXtNLnN0YXRlIT09RHQmJk0uc3RhdGUhPT1xJiYoTS50eXBlPT16dHx8TS5kYXRhJiZNLmRhdGEuaXNQZXJpb2RpYz9tdCYmTS5fdHJhbnNpdGlvblRvKHd0LHJ0KTooTS5ydW5Db3VudD0wLHRoaXMuX3VwZGF0ZVRhc2tDb3VudChN''@;'; put 'put ''LC0xKSxtdCYmTS5fdHJhbnNpdGlvblRvKER0LHJ0LER0KSkpLEx0PUx0LnBhcmVudCxxdD1XdH19c2NoZWR1bGVUYXNrKE0pe2lmKE0uem9uZSYmTS56b25lIT09dGhpcyl7bGV0IGh0PXRoaXM7Zm9yKDtodDspe2lmKGh0PT09TS56b25lKXRocm93IEVycm9yKGBjYW4gbm90IHJlc2NoZWR1''@;'; put 'put ''bGUgdGFzayB0byAke3RoaXMubmFtZX0gd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgJHtNLnpvbmUubmFtZX1gKTtodD1odC5wYXJlbnR9fU0uX3RyYW5zaXRpb25UbyhVdCxEdCk7Y29uc3QgTj1bXTtNLl96b25lRGVsZWdhdGVzPU4sTS5fem9uZT10aGlzO3Ry''@;'; put 'put ''eXtNPXRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcyxNKX1jYXRjaChodCl7dGhyb3cgTS5fdHJhbnNpdGlvblRvKHEsVXQsRHQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGh0KSxodH1yZXR1cm4gTS5fem9uZURlbGVnYXRlcz09PU4mJnRoaXMuX3Vw''@;'; put 'put ''ZGF0ZVRhc2tDb3VudChNLDEpLE0uc3RhdGU9PVV0JiZNLl90cmFuc2l0aW9uVG8od3QsVXQpLE19c2NoZWR1bGVNaWNyb1Rhc2soTSxOLGh0LG10KXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IGl0KFB0LE0sTixodCxtdCx2b2lkIDApKX1zY2hlZHVsZU1hY3JvVGFzayhNLE4saHQs''@;'; put 'put ''bXQsV3Qpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgaXQoZHQsTSxOLGh0LG10LFd0KSl9c2NoZWR1bGVFdmVudFRhc2soTSxOLGh0LG10LFd0KXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IGl0KHp0LE0sTixodCxtdCxXdCkpfWNhbmNlbFRhc2soTSl7aWYoTS56b25lIT10''@;'; put 'put ''aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhNLnpvbmV8fEd0KS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZihNLnN0YXRlPT09d3R8fE0uc3RhdGU9PT1y''@;'; put 'put ''dCl7TS5fdHJhbnNpdGlvblRvKEN0LHd0LHJ0KTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyxNKX1jYXRjaChOKXt0aHJvdyBNLl90cmFuc2l0aW9uVG8ocSxDdCksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsTiksTn1yZXR1cm4gdGhpcy5fdXBk''@;'; put 'put ''YXRlVGFza0NvdW50KE0sLTEpLE0uX3RyYW5zaXRpb25UbyhEdCxDdCksTS5ydW5Db3VudD0wLE19fV91cGRhdGVUYXNrQ291bnQoTSxOKXtjb25zdCBodD1NLl96b25lRGVsZWdhdGVzOy0xPT1OJiYoTS5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IobGV0IG10PTA7bXQ8aHQubGVuZ3RoO210''@;'; put 'put ''KyspaHRbbXRdLl91cGRhdGVUYXNrQ291bnQoTS50eXBlLE4pfX1yZXR1cm4gSXQuX19zeW1ib2xfXz1rLEl0fSkoKTtjb25zdCBvdD17bmFtZToiIixvbkhhc1Rhc2s6KEl0LGF0LE0sTik9Pkl0Lmhhc1Rhc2soTSxOKSxvblNjaGVkdWxlVGFzazooSXQsYXQsTSxOKT0+SXQuc2NoZWR1bGVU''@;'; put 'put ''YXNrKE0sTiksb25JbnZva2VUYXNrOihJdCxhdCxNLE4saHQsbXQpPT5JdC5pbnZva2VUYXNrKE0sTixodCxtdCksb25DYW5jZWxUYXNrOihJdCxhdCxNLE4pPT5JdC5jYW5jZWxUYXNrKE0sTil9O2NsYXNzIGN0e2NvbnN0cnVjdG9yKGF0LE0sTil7dGhpcy5fdGFza0NvdW50cz17bWljcm9U''@;'; put 'put ''YXNrOjAsbWFjcm9UYXNrOjAsZXZlbnRUYXNrOjB9LHRoaXMuem9uZT1hdCx0aGlzLl9wYXJlbnREZWxlZ2F0ZT1NLHRoaXMuX2ZvcmtaUz1OJiYoTiYmTi5vbkZvcms/TjpNLl9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PU4mJihOLm9uRm9yaz9NOk0uX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3Vy''@;'; put 'put ''clpvbmU9TiYmKE4ub25Gb3JrP3RoaXMuem9uZTpNLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPU4mJihOLm9uSW50ZXJjZXB0P046TS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9TiYmKE4ub25JbnRlcmNlcHQ/TTpNLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9p''@;'; put 'put ''bnRlcmNlcHRDdXJyWm9uZT1OJiYoTi5vbkludGVyY2VwdD90aGlzLnpvbmU6TS5faW50ZXJjZXB0Q3VyclpvbmUpLHRoaXMuX2ludm9rZVpTPU4mJihOLm9uSW52b2tlP046TS5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9TiYmKE4ub25JbnZva2U/TTpNLl9pbnZva2VEbGd0KSx0aGlz''@;'; put 'put ''Ll9pbnZva2VDdXJyWm9uZT1OJiYoTi5vbkludm9rZT90aGlzLnpvbmU6TS5faW52b2tlQ3VyclpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9TiYmKE4ub25IYW5kbGVFcnJvcj9OOk0uX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1OJiYoTi5vbkhhbmRsZUVycm9yP006''@;'; put 'put ''TS5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPU4mJihOLm9uSGFuZGxlRXJyb3I/dGhpcy56b25lOk0uX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPU4mJihOLm9uU2NoZWR1bGVUYXNrP046TS5fc2NoZWR1bGVUYXNrWlMpLHRo''@;'; put 'put ''aXMuX3NjaGVkdWxlVGFza0RsZ3Q9TiYmKE4ub25TY2hlZHVsZVRhc2s/TTpNLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1OJiYoTi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6TS5fc2NoZWR1bGVUYXNrQ3VyclpvbmUpLHRoaXMuX2ludm9rZVRhc2ta''@;'; put 'put ''Uz1OJiYoTi5vbkludm9rZVRhc2s/TjpNLl9pbnZva2VUYXNrWlMpLHRoaXMuX2ludm9rZVRhc2tEbGd0PU4mJihOLm9uSW52b2tlVGFzaz9NOk0uX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9TiYmKE4ub25JbnZva2VUYXNrP3RoaXMuem9uZTpNLl9pbnZva2VU''@;'; put 'put ''YXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1OJiYoTi5vbkNhbmNlbFRhc2s/TjpNLl9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PU4mJihOLm9uQ2FuY2VsVGFzaz9NOk0uX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9TiYmKE4ub25D''@;'; put 'put ''YW5jZWxUYXNrP3RoaXMuem9uZTpNLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO2NvbnN0IGh0PU4mJk4ub25IYXNUYXNr''@;'; put 'put ''OyhodHx8TSYmTS5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1odD9OOm90LHRoaXMuX2hhc1Rhc2tEbGd0PU0sdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1hdCxOLm9uU2NoZWR1bGVUYXNrfHwodGhpcy5fc2NoZWR1bGVUYXNrWlM9b3Qs''@;'; put 'put ''dGhpcy5fc2NoZWR1bGVUYXNrRGxndD1NLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuem9uZSksTi5vbkludm9rZVRhc2t8fCh0aGlzLl9pbnZva2VUYXNrWlM9b3QsdGhpcy5faW52b2tlVGFza0RsZ3Q9TSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxOLm9u''@;'; put 'put ''Q2FuY2VsVGFza3x8KHRoaXMuX2NhbmNlbFRhc2taUz1vdCx0aGlzLl9jYW5jZWxUYXNrRGxndD1NLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1mb3JrKGF0LE0pe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlz''@;'; put 'put ''LnpvbmUsYXQsTSk6bmV3IHooYXQsTSl9aW50ZXJjZXB0KGF0LE0sTil7cmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTP3RoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsdGhpcy5faW50ZXJjZXB0Q3VyclpvbmUsYXQsTSxOKTpNfWludm9rZShhdCxNLE4s''@;'; put 'put ''aHQsbXQpe3JldHVybiB0aGlzLl9pbnZva2VaUz90aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LHRoaXMuX2ludm9rZUN1cnJab25lLGF0LE0sTixodCxtdCk6TS5hcHBseShOLGh0KX1oYW5kbGVFcnJvcihhdCxNKXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8''@;'; put 'put ''dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLGF0LE0pfXNjaGVkdWxlVGFzayhhdCxNKXtsZXQgTj1NO2lmKHRoaXMuX3NjaGVkdWxlVGFza1pTKXRoaXMuX2hhc1Rhc2taUyYmTi5fem9uZURl''@;'; put 'put ''bGVnYXRlcy5wdXNoKHRoaXMuX2hhc1Rhc2tEbGd0T3duZXIpLE49dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxhdCxNKSxOfHwoTj1NKTtlbHNlIGlmKE0uc2NoZWR1bGVGbilNLnNj''@;'; put 'put ''aGVkdWxlRm4oTSk7ZWxzZXtpZihNLnR5cGUhPVB0KXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7eXQoTSl9cmV0dXJuIE59aW52b2tlVGFzayhhdCxNLE4saHQpe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52''@;'; put 'put ''b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsYXQsTSxOLGh0KTpNLmNhbGxiYWNrLmFwcGx5KE4saHQpfWNhbmNlbFRhc2soYXQsTSl7bGV0IE47aWYodGhpcy5fY2FuY2VsVGFza1pTKU49dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFz''@;'; put 'put ''ayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsYXQsTSk7ZWxzZXtpZighTS5jYW5jZWxGbil0aHJvdyBFcnJvcigiVGFzayBpcyBub3QgY2FuY2VsYWJsZSIpO049TS5jYW5jZWxGbihNKX1yZXR1cm4gTn1oYXNUYXNrKGF0LE0pe3RyeXt0aGlzLl9oYXNU''@;'; put 'put ''YXNrWlMmJnRoaXMuX2hhc1Rhc2taUy5vbkhhc1Rhc2sodGhpcy5faGFzVGFza0RsZ3QsdGhpcy5faGFzVGFza0N1cnJab25lLGF0LE0pfWNhdGNoKE4pe3RoaXMuaGFuZGxlRXJyb3IoYXQsTil9fV91cGRhdGVUYXNrQ291bnQoYXQsTSl7Y29uc3QgTj10aGlzLl90YXNrQ291bnRzLGh0PU5b''@;'; put 'put ''YXRdLG10PU5bYXRdPWh0K007aWYobXQ8MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC4iKTswIT1odCYmMCE9bXR8fHRoaXMuaGFzVGFzayh0aGlzLnpvbmUse21pY3JvVGFzazpOLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpOLm1hY3Jv''@;'; put 'put ''VGFzaz4wLGV2ZW50VGFzazpOLmV2ZW50VGFzaz4wLGNoYW5nZTphdH0pfX1jbGFzcyBpdHtjb25zdHJ1Y3RvcihhdCxNLE4saHQsbXQsV3Qpe2lmKHRoaXMuX3pvbmU9bnVsbCx0aGlzLnJ1bkNvdW50PTAsdGhpcy5fem9uZURlbGVnYXRlcz1udWxsLHRoaXMuX3N0YXRlPSJub3RTY2hlZHVs''@;'; put 'put ''ZWQiLHRoaXMudHlwZT1hdCx0aGlzLnNvdXJjZT1NLHRoaXMuZGF0YT1odCx0aGlzLnNjaGVkdWxlRm49bXQsdGhpcy5jYW5jZWxGbj1XdCwhTil0aHJvdyBuZXcgRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7dGhpcy5jYWxsYmFjaz1OO2NvbnN0IEg9dGhpczt0aGlzLmludm9r''@;'; put 'put ''ZT1hdD09PXp0JiZodCYmaHQudXNlRz9pdC5pbnZva2VUYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIGl0Lmludm9rZVRhc2suY2FsbChoLEgsdGhpcyxhcmd1bWVudHMpfX1zdGF0aWMgaW52b2tlVGFzayhhdCxNLE4pe2F0fHwoYXQ9dGhpcyksVnQrKzt0cnl7cmV0dXJuIGF0LnJ1bkNvdW50Kyss''@;'; put 'put ''YXQuem9uZS5ydW5UYXNrKGF0LE0sTil9ZmluYWxseXsxPT1WdCYmZXQoKSxWdC0tfX1nZXQgem9uZSgpe3JldHVybiB0aGlzLl96b25lfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZX1jYW5jZWxTY2hlZHVsZVJlcXVlc3QoKXt0aGlzLl90cmFuc2l0aW9uVG8oRHQsVXQpfV90cmFu''@;'; put 'put ''c2l0aW9uVG8oYXQsTSxOKXtpZih0aGlzLl9zdGF0ZSE9PU0mJnRoaXMuX3N0YXRlIT09Til0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy50eXBlfSAnJHt0aGlzLnNvdXJjZX0nOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyR7YXR9JywgZXhwZWN0aW5nIHN0YXRlICcke019JyR7Tj8iIG9yICci''@;'; put 'put ''K04rIiciOiIifSwgd2FzICcke3RoaXMuX3N0YXRlfScuYCk7dGhpcy5fc3RhdGU9YXQsYXQ9PUR0JiYodGhpcy5fem9uZURlbGVnYXRlcz1udWxsKX10b1N0cmluZygpe3JldHVybiB0aGlzLmRhdGEmJnR5cGVvZiB0aGlzLmRhdGEuaGFuZGxlSWQ8InUiP3RoaXMuZGF0YS5oYW5kbGVJZC50''@;'; put 'put ''b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX10b0pTT04oKXtyZXR1cm57dHlwZTp0aGlzLnR5cGUsc3RhdGU6dGhpcy5zdGF0ZSxzb3VyY2U6dGhpcy5zb3VyY2Usem9uZTp0aGlzLnpvbmUubmFtZSxydW5Db3VudDp0aGlzLnJ1bkNvdW50fX19Y29uc3Qg''@;'; put 'put ''QXQ9aygic2V0VGltZW91dCIpLFN0PWsoIlByb21pc2UiKSxPdD1rKCJ0aGVuIik7bGV0IEp0LGt0PVtdLFJ0PSExO2Z1bmN0aW9uICR0KEl0KXtpZihKdHx8aFtTdF0mJihKdD1oW1N0XS5yZXNvbHZlKDApKSxKdCl7bGV0IGF0PUp0W090XTthdHx8KGF0PUp0LnRoZW4pLGF0LmNhbGwoSnQs''@;'; put 'put ''SXQpfWVsc2UgaFtBdF0oSXQsMCl9ZnVuY3Rpb24geXQoSXQpezA9PT1WdCYmMD09PWt0Lmxlbmd0aCYmJHQoZXQpLEl0JiZrdC5wdXNoKEl0KX1mdW5jdGlvbiBldCgpe2lmKCFSdCl7Zm9yKFJ0PSEwO2t0Lmxlbmd0aDspe2NvbnN0IEl0PWt0O2t0PVtdO2ZvcihsZXQgYXQ9MDthdDxJdC5s''@;'; put 'put ''ZW5ndGg7YXQrKyl7Y29uc3QgTT1JdFthdF07dHJ5e00uem9uZS5ydW5UYXNrKE0sbnVsbCxudWxsKX1jYXRjaChOKXtIdC5vblVuaGFuZGxlZEVycm9yKE4pfX19SHQubWljcm90YXNrRHJhaW5Eb25lKCksUnQ9ITF9fWNvbnN0IEd0PXtuYW1lOiJOTyBaT05FIn0sRHQ9Im5vdFNjaGVkdWxl''@;'; put 'put ''ZCIsVXQ9InNjaGVkdWxpbmciLHd0PSJzY2hlZHVsZWQiLHJ0PSJydW5uaW5nIixDdD0iY2FuY2VsaW5nIixxPSJ1bmtub3duIixQdD0ibWljcm9UYXNrIixkdD0ibWFjcm9UYXNrIix6dD0iZXZlbnRUYXNrIixfdD17fSxIdD17c3ltYm9sOmssY3VycmVudFpvbmVGcmFtZTooKT0+THQsb25V''@;'; put 'put ''bmhhbmRsZWRFcnJvcjpLdCxtaWNyb3Rhc2tEcmFpbkRvbmU6S3Qsc2NoZWR1bGVNaWNyb1Rhc2s6eXQsc2hvd1VuY2F1Z2h0RXJyb3I6KCk9PiF6W2soImlnbm9yZUNvbnNvbGVFcnJvclVuY2F1Z2h0RXJyb3IiKV0scGF0Y2hFdmVudFRhcmdldDooKT0+W10scGF0Y2hPblByb3BlcnRpZXM6''@;'; put 'put ''S3QscGF0Y2hNZXRob2Q6KCk9Pkt0LGJpbmRBcmd1bWVudHM6KCk9PltdLHBhdGNoVGhlbjooKT0+S3QscGF0Y2hNYWNyb1Rhc2s6KCk9Pkt0LHBhdGNoRXZlbnRQcm90b3R5cGU6KCk9Pkt0LGlzSUVPckVkZ2U6KCk9PiExLGdldEdsb2JhbE9iamVjdHM6KCk9Pnt9LE9iamVjdERlZmluZVBy''@;'; put 'put ''b3BlcnR5OigpPT5LdCxPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6KCk9Pnt9LE9iamVjdENyZWF0ZTooKT0+e30sQXJyYXlTbGljZTooKT0+W10scGF0Y2hDbGFzczooKT0+S3Qsd3JhcFdpdGhDdXJyZW50Wm9uZTooKT0+S3QsZmlsdGVyUHJvcGVydGllczooKT0+W10sYXR0YWNo''@;'; put 'put ''T3JpZ2luVG9QYXRjaGVkOigpPT5LdCxfcmVkZWZpbmVQcm9wZXJ0eTooKT0+S3QscGF0Y2hDYWxsYmFja3M6KCk9Pkt0LG5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrOiR0fTtsZXQgTHQ9e3BhcmVudDpudWxsLHpvbmU6bmV3IHoobnVsbCxudWxsKX0scXQ9bnVsbCxWdD0wO2Z1bmN0aW9uIEt0''@;'; put 'put ''KCl7fVQoIlpvbmUiLCJab25lIiksaC5ab25lPXp9KHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8Z2xvYmFsKTtjb25zdCBjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsbD1PYmplY3QuZGVmaW5lUHJvcGVydHksdD1PYmplY3QuZ2V0''@;'; put 'put ''UHJvdG90eXBlT2Ysbj1PYmplY3QuY3JlYXRlLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLHM9ImFkZEV2ZW50TGlzdGVuZXIiLG89InJlbW92ZUV2ZW50TGlzdGVuZXIiLHU9Wm9uZS5fX3N5bWJvbF9fKHMpLGY9Wm9uZS5fX3N5bWJvbF9fKG8pLGk9InRydWUiLHA9ImZhbHNlIix5PVpvbmUu''@;'; put 'put ''X19zeW1ib2xfXygiIik7ZnVuY3Rpb24gdihoLFApe3JldHVybiBab25lLmN1cnJlbnQud3JhcChoLFApfWZ1bmN0aW9uIGcoaCxQLEksVCxBKXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKGgsUCxJLFQsQSl9Y29uc3QgeD1ab25lLl9fc3ltYm9sX18sRT10eXBlb2Yg''@;'; put 'put ''d2luZG93PCJ1IixqPUU/d2luZG93OnZvaWQgMCx3PUUmJmp8fCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsLFI9InJlbW92ZUF0dHJpYnV0ZSI7ZnVuY3Rpb24gRihoLFApe2ZvcihsZXQgST1oLmxlbmd0aC0xO0k+PTA7SS0tKSJmdW5jdGlvbiI9PXR5cGVvZiBoW0ldJiYo''@;'; put 'put ''aFtJXT12KGhbSV0sUCsiXyIrSSkpO3JldHVybiBofWZ1bmN0aW9uIGIoaCl7cmV0dXJuIWh8fCExIT09aC53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgaC5nZXQmJnR5cGVvZiBoLnNldD4idSIpfWNvbnN0IE89dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0''@;'; put 'put ''YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLFM9ISgibnciaW4gdykmJnR5cGVvZiB3LnByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHcucHJvY2VzcyksQz0hUyYmIU8mJiEoIUV8fCFqLkhUTUxFbGVtZW50KSxLPXR5cGVvZiB3LnByb2Nlc3M8InUi''@;'; put 'put ''JiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHcucHJvY2VzcykmJiFPJiYhKCFFfHwhai5IVE1MRWxlbWVudCksVT17fSxaPWZ1bmN0aW9uKGgpe2lmKCEoaD1ofHx3LmV2ZW50KSlyZXR1cm47bGV0IFA9VVtoLnR5cGVdO1B8fChQPVVbaC50eXBlXT14KCJPTl9QUk9Q''@;'; put 'put ''RVJUWSIraC50eXBlKSk7Y29uc3QgST10aGlzfHxoLnRhcmdldHx8dyxUPUlbUF07bGV0IEE7cmV0dXJuIEMmJkk9PT1qJiYiZXJyb3IiPT09aC50eXBlPyhBPVQmJlQuY2FsbCh0aGlzLGgubWVzc2FnZSxoLmZpbGVuYW1lLGgubGluZW5vLGguY29sbm8saC5lcnJvciksITA9PT1BJiZoLnBy''@;'; put 'put ''ZXZlbnREZWZhdWx0KCkpOihBPVQmJlQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG51bGwhPUEmJiFBJiZoLnByZXZlbnREZWZhdWx0KCkpLEF9O2Z1bmN0aW9uIHR0KGgsUCxJKXtsZXQgVD1jKGgsUCk7aWYoIVQmJkkmJmMoSSxQKSYmKFQ9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''fSksIVR8fCFULmNvbmZpZ3VyYWJsZSlyZXR1cm47Y29uc3QgQT14KCJvbiIrUCsicGF0Y2hlZCIpO2lmKGguaGFzT3duUHJvcGVydHkoQSkmJmhbQV0pcmV0dXJuO2RlbGV0ZSBULndyaXRhYmxlLGRlbGV0ZSBULnZhbHVlO2NvbnN0IGs9VC5nZXQsSj1ULnNldCx6PVAuc2xpY2UoMik7bGV0''@;'; put 'put ''IG90PVVbel07b3R8fChvdD1VW3pdPXgoIk9OX1BST1BFUlRZIit6KSksVC5zZXQ9ZnVuY3Rpb24oY3Qpe2xldCBpdD10aGlzOyFpdCYmaD09PXcmJihpdD13KSxpdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpdFtvdF0mJml0LnJlbW92ZUV2ZW50TGlzdGVuZXIoeixaKSxKJiZKLmNhbGwoaXQs''@;'; put 'put ''bnVsbCksaXRbb3RdPWN0LCJmdW5jdGlvbiI9PXR5cGVvZiBjdCYmaXQuYWRkRXZlbnRMaXN0ZW5lcih6LFosITEpKX0sVC5nZXQ9ZnVuY3Rpb24oKXtsZXQgY3Q9dGhpcztpZighY3QmJmg9PT13JiYoY3Q9dyksIWN0KXJldHVybiBudWxsO2NvbnN0IGl0PWN0W290XTtpZihpdClyZXR1cm4g''@;'; put 'put ''aXQ7aWYoayl7bGV0IEF0PWsuY2FsbCh0aGlzKTtpZihBdClyZXR1cm4gVC5zZXQuY2FsbCh0aGlzLEF0KSwiZnVuY3Rpb24iPT10eXBlb2YgY3RbUl0mJmN0LnJlbW92ZUF0dHJpYnV0ZShQKSxBdH1yZXR1cm4gbnVsbH0sbChoLFAsVCksaFtBXT0hMH1mdW5jdGlvbiBfKGgsUCxJKXtpZihQ''@;'; put 'put ''KWZvcihsZXQgVD0wO1Q8UC5sZW5ndGg7VCsrKXR0KGgsIm9uIitQW1RdLEkpO2Vsc2V7Y29uc3QgVD1bXTtmb3IoY29uc3QgQSBpbiBoKSJvbiI9PUEuc2xpY2UoMCwyKSYmVC5wdXNoKEEpO2ZvcihsZXQgQT0wO0E8VC5sZW5ndGg7QSsrKXR0KGgsVFtBXSxJKX19Y29uc3QgbnQ9eCgib3Jp''@;'; put 'put ''Z2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIHN0KGgpe2NvbnN0IFA9d1toXTtpZighUClyZXR1cm47d1t4KGgpXT1QLHdbaF09ZnVuY3Rpb24oKXtjb25zdCBBPUYoYXJndW1lbnRzLGgpO3N3aXRjaChBLmxlbmd0aCl7Y2FzZSAwOnRoaXNbbnRdPW5ldyBQO2JyZWFrO2Nhc2UgMTp0aGlzW250''@;'; put 'put ''XT1uZXcgUChBWzBdKTticmVhaztjYXNlIDI6dGhpc1tudF09bmV3IFAoQVswXSxBWzFdKTticmVhaztjYXNlIDM6dGhpc1tudF09bmV3IFAoQVswXSxBWzFdLEFbMl0pO2JyZWFrO2Nhc2UgNDp0aGlzW250XT1uZXcgUChBWzBdLEFbMV0sQVsyXSxBWzNdKTticmVhaztkZWZhdWx0OnRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiQXJnIGxpc3QgdG9vIGxvbmcuIil9fSxRKHdbaF0sUCk7Y29uc3QgST1uZXcgUChmdW5jdGlvbigpe30pO2xldCBUO2ZvcihUIGluIEkpIlhNTEh0dHBSZXF1ZXN0Ij09PWgmJiJyZXNwb25zZUJsb2IiPT09VHx8ZnVuY3Rpb24oQSl7ImZ1bmN0aW9uIj09dHlwZW9mIElb''@;'; put 'put ''QV0/d1toXS5wcm90b3R5cGVbQV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tudF1bQV0uYXBwbHkodGhpc1tudF0sYXJndW1lbnRzKX06bCh3W2hdLnByb3RvdHlwZSxBLHtzZXQ6ZnVuY3Rpb24oayl7ImZ1bmN0aW9uIj09dHlwZW9mIGs/KHRoaXNbbnRdW0FdPXYoayxoKyIuIitBKSxRKHRo''@;'; put 'put ''aXNbbnRdW0FdLGspKTp0aGlzW250XVtBXT1rfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tudF1bQV19fSl9KFQpO2ZvcihUIGluIFApInByb3RvdHlwZSIhPT1UJiZQLmhhc093blByb3BlcnR5KFQpJiYod1toXVtUXT1QW1RdKX1mdW5jdGlvbiBYKGgsUCxJKXtsZXQgVD1oO2Zvcig7''@;'; put 'put ''VCYmIVQuaGFzT3duUHJvcGVydHkoUCk7KVQ9dChUKTshVCYmaFtQXSYmKFQ9aCk7Y29uc3QgQT14KFApO2xldCBrPW51bGw7aWYoVCYmKCEoaz1UW0FdKXx8IVQuaGFzT3duUHJvcGVydHkoQSkpJiYoaz1UW0FdPVRbUF0sYihUJiZjKFQsUCkpKSl7Y29uc3Qgej1JKGssQSxQKTtUW1BdPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHoodGhpcyxhcmd1bWVudHMpfSxRKFRbUF0sayl9cmV0dXJuIGt9ZnVuY3Rpb24gVihoLFAsSSl7bGV0IFQ9bnVsbDtmdW5jdGlvbiBBKGspe2NvbnN0IEo9ay5kYXRhO3JldHVybiBKLmFyZ3NbSi5jYklkeF09ZnVuY3Rpb24oKXtrLmludm9rZS5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyl9LFQuYXBwbHkoSi50YXJnZXQsSi5hcmdzKSxrfVQ9WChoLFAsaz0+ZnVuY3Rpb24oSix6KXtjb25zdCBvdD1JKEoseik7cmV0dXJuIG90LmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2YgeltvdC5jYklkeF0/ZyhvdC5uYW1lLHpbb3QuY2JJZHhdLG90LEEpOmsuYXBw''@;'; put 'put ''bHkoSix6KX0pfWZ1bmN0aW9uIFEoaCxQKXtoW3goIk9yaWdpbmFsRGVsZWdhdGUiKV09UH1sZXQgWT0hMSxmdD0hMTtmdW5jdGlvbiBNdCgpe2lmKFkpcmV0dXJuIGZ0O1k9ITA7dHJ5e2NvbnN0IGg9ai5uYXZpZ2F0b3IudXNlckFnZW50OygtMSE9PWguaW5kZXhPZigiTVNJRSAiKXx8LTEh''@;'; put 'put ''PT1oLmluZGV4T2YoIlRyaWRlbnQvIil8fC0xIT09aC5pbmRleE9mKCJFZGdlLyIpKSYmKGZ0PSEwKX1jYXRjaHt9cmV0dXJuIGZ0fVpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIiwoaCxQLEkpPT57Y29uc3QgVD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEE9''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5LEo9SS5zeW1ib2wsej1bXSxvdD0hMD09PWhbSigiRElTQUJMRV9XUkFQUElOR19VTkNBVUdIVF9QUk9NSVNFX1JFSkVDVElPTiIpXSxjdD1KKCJQcm9taXNlIiksaXQ9SigidGhlbiIpLEF0PSJfX2NyZWF0aW9uVHJhY2VfXyI7SS5vblVuaGFuZGxlZEVy''@;'; put 'put ''cm9yPUg9PntpZihJLnNob3dVbmNhdWdodEVycm9yKCkpe2NvbnN0IFc9SCYmSC5yZWplY3Rpb247Vz9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246IixXIGluc3RhbmNlb2YgRXJyb3I/Vy5tZXNzYWdlOlcsIjsgWm9uZToiLEguem9uZS5uYW1lLCI7IFRhc2s6''@;'; put 'put ''IixILnRhc2smJkgudGFzay5zb3VyY2UsIjsgVmFsdWU6IixXLFcgaW5zdGFuY2VvZiBFcnJvcj9XLnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcihIKX19LEkubWljcm90YXNrRHJhaW5Eb25lPSgpPT57Zm9yKDt6Lmxlbmd0aDspe2NvbnN0IEg9ei5zaGlmdCgpO3RyeXtILnpvbmUucnVu''@;'; put 'put ''R3VhcmRlZCgoKT0+e3Rocm93IEgudGhyb3dPcmlnaW5hbD9ILnJlamVjdGlvbjpIfSl9Y2F0Y2goVyl7T3QoVyl9fX07Y29uc3QgU3Q9SigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKTtmdW5jdGlvbiBPdChIKXtJLm9uVW5oYW5kbGVkRXJyb3IoSCk7dHJ5e2NvbnN0IFc9''@;'; put 'put ''UFtTdF07ImZ1bmN0aW9uIj09dHlwZW9mIFcmJlcuY2FsbCh0aGlzLEgpfWNhdGNoe319ZnVuY3Rpb24ga3QoSCl7cmV0dXJuIEgmJkgudGhlbn1mdW5jdGlvbiBSdChIKXtyZXR1cm4gSH1mdW5jdGlvbiBKdChIKXtyZXR1cm4gTS5yZWplY3QoSCl9Y29uc3QgJHQ9Sigic3RhdGUiKSx5dD1K''@;'; put 'put ''KCJ2YWx1ZSIpLGV0PUooImZpbmFsbHkiKSxHdD1KKCJwYXJlbnRQcm9taXNlVmFsdWUiKSxEdD1KKCJwYXJlbnRQcm9taXNlU3RhdGUiKSxVdD0iUHJvbWlzZS50aGVuIix3dD1udWxsLHJ0PSEwLEN0PSExLHE9MDtmdW5jdGlvbiBQdChILFcpe3JldHVybiBMPT57dHJ5e0h0KEgsVyxMKX1j''@;'; put 'put ''YXRjaChHKXtIdChILCExLEcpfX19Y29uc3QgZHQ9ZnVuY3Rpb24oKXtsZXQgSD0hMTtyZXR1cm4gZnVuY3Rpb24oTCl7cmV0dXJuIGZ1bmN0aW9uKCl7SHx8KEg9ITAsTC5hcHBseShudWxsLGFyZ3VtZW50cykpfX19LHp0PSJQcm9taXNlIHJlc29sdmVkIHdpdGggaXRzZWxmIixfdD1KKCJj''@;'; put 'put ''dXJyZW50VGFza1RyYWNlIik7ZnVuY3Rpb24gSHQoSCxXLEwpe2NvbnN0IEc9ZHQoKTtpZihIPT09TCl0aHJvdyBuZXcgVHlwZUVycm9yKHp0KTtpZihIWyR0XT09PXd0KXtsZXQgbHQ9bnVsbDt0cnl7KCJvYmplY3QiPT10eXBlb2YgTHx8ImZ1bmN0aW9uIj09dHlwZW9mIEwpJiYobHQ9TCYm''@;'; put 'put ''TC50aGVuKX1jYXRjaChwdCl7cmV0dXJuIEcoKCk9PntIdChILCExLHB0KX0pKCksSH1pZihXIT09Q3QmJkwgaW5zdGFuY2VvZiBNJiZMLmhhc093blByb3BlcnR5KCR0KSYmTC5oYXNPd25Qcm9wZXJ0eSh5dCkmJkxbJHRdIT09d3QpcXQoTCksSHQoSCxMWyR0XSxMW3l0XSk7ZWxzZSBpZihX''@;'; put 'put ''IT09Q3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBsdCl0cnl7bHQuY2FsbChMLEcoUHQoSCxXKSksRyhQdChILCExKSkpfWNhdGNoKHB0KXtHKCgpPT57SHQoSCwhMSxwdCl9KSgpfWVsc2V7SFskdF09Vztjb25zdCBwdD1IW3l0XTtpZihIW3l0XT1MLEhbZXRdPT09ZXQmJlc9PT1ydCYmKEhbJHRd''@;'; put 'put ''PUhbRHRdLEhbeXRdPUhbR3RdKSxXPT09Q3QmJkwgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3QgdXQ9UC5jdXJyZW50VGFzayYmUC5jdXJyZW50VGFzay5kYXRhJiZQLmN1cnJlbnRUYXNrLmRhdGFbQXRdO3V0JiZBKEwsX3Qse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxl''@;'; put 'put ''OiEwLHZhbHVlOnV0fSl9Zm9yKGxldCB1dD0wO3V0PHB0Lmxlbmd0aDspVnQoSCxwdFt1dCsrXSxwdFt1dCsrXSxwdFt1dCsrXSxwdFt1dCsrXSk7aWYoMD09cHQubGVuZ3RoJiZXPT1DdCl7SFskdF09cTtsZXQgdXQ9TDt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlz''@;'; put 'put ''ZSk6ICIrZnVuY3Rpb24gayhIKXtyZXR1cm4gSCYmSC50b1N0cmluZz09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc/KEguY29uc3RydWN0b3ImJkguY29uc3RydWN0b3IubmFtZXx8IiIpKyI6ICIrSlNPTi5zdHJpbmdpZnkoSCk6SD9ILnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50''@;'; put 'put ''b1N0cmluZy5jYWxsKEgpfShMKSsoTCYmTC5zdGFjaz8iXG4iK0wuc3RhY2s6IiIpKX1jYXRjaChndCl7dXQ9Z3R9b3QmJih1dC50aHJvd09yaWdpbmFsPSEwKSx1dC5yZWplY3Rpb249TCx1dC5wcm9taXNlPUgsdXQuem9uZT1QLmN1cnJlbnQsdXQudGFzaz1QLmN1cnJlbnRUYXNrLHoucHVz''@;'; put 'put ''aCh1dCksSS5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIEh9Y29uc3QgTHQ9SigicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiBxdChIKXtpZihIWyR0XT09PXEpe3RyeXtjb25zdCBXPVBbTHRdO1cmJiJmdW5jdGlvbiI9PXR5cGVvZiBXJiZXLmNhbGwodGhpcyx7cmVq''@;'; put 'put ''ZWN0aW9uOkhbeXRdLHByb21pc2U6SH0pfWNhdGNoe31IWyR0XT1DdDtmb3IobGV0IFc9MDtXPHoubGVuZ3RoO1crKylIPT09eltXXS5wcm9taXNlJiZ6LnNwbGljZShXLDEpfX1mdW5jdGlvbiBWdChILFcsTCxHLGx0KXtxdChIKTtjb25zdCBwdD1IWyR0XSx1dD1wdD8iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgRz9HOlJ0OiJmdW5jdGlvbiI9PXR5cGVvZiBsdD9sdDpKdDtXLnNjaGVkdWxlTWljcm9UYXNrKFV0LCgpPT57dHJ5e2NvbnN0IGd0PUhbeXRdLHh0PSEhTCYmZXQ9PT1MW2V0XTt4dCYmKExbR3RdPWd0LExbRHRdPXB0KTtjb25zdCBUdD1XLnJ1bih1dCx2b2lkIDAseHQmJnV0IT09''@;'; put 'put ''SnQmJnV0IT09UnQ/W106W2d0XSk7SHQoTCwhMCxUdCl9Y2F0Y2goZ3Qpe0h0KEwsITEsZ3QpfX0sTCl9Y29uc3QgSXQ9ZnVuY3Rpb24oKXt9LGF0PWguQWdncmVnYXRlRXJyb3I7Y2xhc3MgTXtzdGF0aWMgdG9TdHJpbmcoKXtyZXR1cm4iZnVuY3Rpb24gWm9uZUF3YXJlUHJvbWlzZSgpIHsg''@;'; put 'put ''W25hdGl2ZSBjb2RlXSB9In1zdGF0aWMgcmVzb2x2ZShXKXtyZXR1cm4gSHQobmV3IHRoaXMobnVsbCkscnQsVyl9c3RhdGljIHJlamVjdChXKXtyZXR1cm4gSHQobmV3IHRoaXMobnVsbCksQ3QsVyl9c3RhdGljIGFueShXKXtpZighV3x8ImZ1bmN0aW9uIiE9dHlwZW9mIFdbU3ltYm9sLml0''@;'; put 'put ''ZXJhdG9yXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGF0KFtdLCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKTtjb25zdCBMPVtdO2xldCBHPTA7dHJ5e2ZvcihsZXQgdXQgb2YgVylHKyssTC5wdXNoKE0ucmVzb2x2ZSh1dCkpfWNhdGNoe3JldHVybiBQcm9taXNlLnJlamVjdChu''@;'; put 'put ''ZXcgYXQoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpfWlmKDA9PT1HKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgYXQoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO2xldCBsdD0hMTtjb25zdCBwdD1bXTtyZXR1cm4gbmV3IE0oKHV0LGd0KT0+e2ZvcihsZXQg''@;'; put 'put ''eHQ9MDt4dDxMLmxlbmd0aDt4dCsrKUxbeHRdLnRoZW4oVHQ9PntsdHx8KGx0PSEwLHV0KFR0KSl9LFR0PT57cHQucHVzaChUdCksRy0tLDA9PT1HJiYobHQ9ITAsZ3QobmV3IGF0KHB0LCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKSl9KX0pfXN0YXRpYyByYWNlKFcpe2xldCBMLEcs''@;'; put 'put ''bHQ9bmV3IHRoaXMoKGd0LHh0KT0+e0w9Z3QsRz14dH0pO2Z1bmN0aW9uIHB0KGd0KXtMKGd0KX1mdW5jdGlvbiB1dChndCl7RyhndCl9Zm9yKGxldCBndCBvZiBXKWt0KGd0KXx8KGd0PXRoaXMucmVzb2x2ZShndCkpLGd0LnRoZW4ocHQsdXQpO3JldHVybiBsdH1zdGF0aWMgYWxsKFcpe3Jl''@;'; put 'put ''dHVybiBNLmFsbFdpdGhDYWxsYmFjayhXKX1zdGF0aWMgYWxsU2V0dGxlZChXKXtyZXR1cm4odGhpcyYmdGhpcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBNP3RoaXM6TSkuYWxsV2l0aENhbGxiYWNrKFcse3RoZW5DYWxsYmFjazpHPT4oe3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTpHfSksZXJy''@;'; put 'put ''b3JDYWxsYmFjazpHPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpHfSl9KX1zdGF0aWMgYWxsV2l0aENhbGxiYWNrKFcsTCl7bGV0IEcsbHQscHQ9bmV3IHRoaXMoKFR0LGJ0KT0+e0c9VHQsbHQ9YnR9KSx1dD0yLGd0PTA7Y29uc3QgeHQ9W107Zm9yKGxldCBUdCBvZiBXKXtrdChUdCl8''@;'; put 'put ''fChUdD10aGlzLnJlc29sdmUoVHQpKTtjb25zdCBidD1ndDt0cnl7VHQudGhlbihOdD0+e3h0W2J0XT1MP0wudGhlbkNhbGxiYWNrKE50KTpOdCx1dC0tLDA9PT11dCYmRyh4dCl9LE50PT57TD8oeHRbYnRdPUwuZXJyb3JDYWxsYmFjayhOdCksdXQtLSwwPT09dXQmJkcoeHQpKTpsdChOdCl9''@;'; put 'put ''KX1jYXRjaChOdCl7bHQoTnQpfXV0KyssZ3QrK31yZXR1cm4gdXQtPTIsMD09PXV0JiZHKHh0KSxwdH1jb25zdHJ1Y3RvcihXKXtjb25zdCBMPXRoaXM7aWYoIShMIGluc3RhbmNlb2YgTSkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGJlIGFuIGluc3RhbmNlb2YgUHJvbWlzZS4iKTtMWyR0XT13''@;'; put 'put ''dCxMW3l0XT1bXTt0cnl7Y29uc3QgRz1kdCgpO1cmJlcoRyhQdChMLHJ0KSksRyhQdChMLEN0KSkpfWNhdGNoKEcpe0h0KEwsITEsRyl9fWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIlByb21pc2UifWdldFtTeW1ib2wuc3BlY2llc10oKXtyZXR1cm4gTX10aGVuKFcsTCl7bGV0''@;'; put 'put ''IEc9dGhpcy5jb25zdHJ1Y3Rvcj8uW1N5bWJvbC5zcGVjaWVzXTsoIUd8fCJmdW5jdGlvbiIhPXR5cGVvZiBHKSYmKEc9dGhpcy5jb25zdHJ1Y3Rvcnx8TSk7Y29uc3QgbHQ9bmV3IEcoSXQpLHB0PVAuY3VycmVudDtyZXR1cm4gdGhpc1skdF09PXd0P3RoaXNbeXRdLnB1c2gocHQsbHQsVyxM''@;'; put 'put ''KTpWdCh0aGlzLHB0LGx0LFcsTCksbHR9Y2F0Y2goVyl7cmV0dXJuIHRoaXMudGhlbihudWxsLFcpfWZpbmFsbHkoVyl7bGV0IEw9dGhpcy5jb25zdHJ1Y3Rvcj8uW1N5bWJvbC5zcGVjaWVzXTsoIUx8fCJmdW5jdGlvbiIhPXR5cGVvZiBMKSYmKEw9TSk7Y29uc3QgRz1uZXcgTChJdCk7R1tl''@;'; put 'put ''dF09ZXQ7Y29uc3QgbHQ9UC5jdXJyZW50O3JldHVybiB0aGlzWyR0XT09d3Q/dGhpc1t5dF0ucHVzaChsdCxHLFcsVyk6VnQodGhpcyxsdCxHLFcsVyksR319TS5yZXNvbHZlPU0ucmVzb2x2ZSxNLnJlamVjdD1NLnJlamVjdCxNLnJhY2U9TS5yYWNlLE0uYWxsPU0uYWxsO2NvbnN0IE49aFtj''@;'; put 'put ''dF09aC5Qcm9taXNlO2guUHJvbWlzZT1NO2NvbnN0IGh0PUooInRoZW5QYXRjaGVkIik7ZnVuY3Rpb24gbXQoSCl7Y29uc3QgVz1ILnByb3RvdHlwZSxMPVQoVywidGhlbiIpO2lmKEwmJighMT09PUwud3JpdGFibGV8fCFMLmNvbmZpZ3VyYWJsZSkpcmV0dXJuO2NvbnN0IEc9Vy50aGVuO1db''@;'; put 'put ''aXRdPUcsSC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihsdCxwdCl7cmV0dXJuIG5ldyBNKChndCx4dCk9PntHLmNhbGwodGhpcyxndCx4dCl9KS50aGVuKGx0LHB0KX0sSFtodF09ITB9cmV0dXJuIEkucGF0Y2hUaGVuPW10LE4mJihtdChOKSxYKGgsImZldGNoIixIPT5mdW5jdGlvbiBXdChI''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oVyxMKXtsZXQgRz1ILmFwcGx5KFcsTCk7aWYoRyBpbnN0YW5jZW9mIE0pcmV0dXJuIEc7bGV0IGx0PUcuY29uc3RydWN0b3I7cmV0dXJuIGx0W2h0XXx8bXQobHQpLEd9fShIKSkpLFByb21pc2VbUC5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMi''@;'; put 'put ''KV09eixNfSksWm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIixoPT57Y29uc3QgUD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsST14KCJPcmlnaW5hbERlbGVnYXRlIiksVD14KCJQcm9taXNlIiksQT14KCJFcnJvciIpLGs9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''dGhpcyl7Y29uc3QgY3Q9dGhpc1tJXTtpZihjdClyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY3Q/UC5jYWxsKGN0KTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY3QpO2lmKHRoaXM9PT1Qcm9taXNlKXtjb25zdCBpdD1oW1RdO2lmKGl0KXJldHVybiBQLmNhbGwoaXQpfWlmKHRo''@;'; put 'put ''aXM9PT1FcnJvcil7Y29uc3QgaXQ9aFtBXTtpZihpdClyZXR1cm4gUC5jYWxsKGl0KX19cmV0dXJuIFAuY2FsbCh0aGlzKX07a1tJXT1QLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1rO2NvbnN0IEo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2UmJnRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjpKLmNhbGwodGhpcyl9fSk7bGV0IEV0PSExO2lmKHR5cGVvZiB3aW5kb3c8InUiKXRyeXtjb25zdCBoPU9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe0V0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixoLGgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixoLGgpfWNhdGNoe0V0PSExfWNvbnN0IEZ0PXt1c2VHOiEwfSxqdD17fSxYdD17fSxC''@;'; put 'put ''dD1uZXcgUmVnRXhwKCJeIit5KyIoXFx3KykodHJ1ZXxmYWxzZSkkIiksUXQ9eCgicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gcm4oaCxQKXtjb25zdCBJPShQP1AoaCk6aCkrcCxUPShQP1AoaCk6aCkraSxBPXkrSSxrPXkrVDtqdFtoXT17fSxqdFtoXVtwXT1BLGp0W2hdW2ldPWt9''@;'; put 'put ''ZnVuY3Rpb24gbm4oaCxQLEksVCl7Y29uc3QgQT1UJiZULmFkZHx8cyxrPVQmJlQucm18fG8sSj1UJiZULmxpc3RlbmVyc3x8ImV2ZW50TGlzdGVuZXJzIix6PVQmJlQucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLG90PXgoQSksY3Q9Ii4iK0ErIjoiLGl0PSJwcmVwZW5kTGlzdGVuZXIi''@;'; put 'put ''LEF0PSIuIitpdCsiOiIsU3Q9ZnVuY3Rpb24oeXQsZXQsR3Qpe2lmKHl0LmlzUmVtb3ZlZClyZXR1cm47Y29uc3QgRHQ9eXQuY2FsbGJhY2s7bGV0IFV0OyJvYmplY3QiPT10eXBlb2YgRHQmJkR0LmhhbmRsZUV2ZW50JiYoeXQuY2FsbGJhY2s9cnQ9PkR0LmhhbmRsZUV2ZW50KHJ0KSx5dC5v''@;'; put 'put ''cmlnaW5hbERlbGVnYXRlPUR0KTt0cnl7eXQuaW52b2tlKHl0LGV0LFtHdF0pfWNhdGNoKHJ0KXtVdD1ydH1jb25zdCB3dD15dC5vcHRpb25zO3JldHVybiB3dCYmIm9iamVjdCI9PXR5cGVvZiB3dCYmd3Qub25jZSYmZXRba10uY2FsbChldCxHdC50eXBlLHl0Lm9yaWdpbmFsRGVsZWdhdGU/''@;'; put 'put ''eXQub3JpZ2luYWxEZWxlZ2F0ZTp5dC5jYWxsYmFjayx3dCksVXR9O2Z1bmN0aW9uIE90KHl0LGV0LEd0KXtpZighKGV0PWV0fHxoLmV2ZW50KSlyZXR1cm47Y29uc3QgRHQ9eXR8fGV0LnRhcmdldHx8aCxVdD1EdFtqdFtldC50eXBlXVtHdD9pOnBdXTtpZihVdCl7Y29uc3Qgd3Q9W107aWYo''@;'; put 'put ''MT09PVV0Lmxlbmd0aCl7Y29uc3QgcnQ9U3QoVXRbMF0sRHQsZXQpO3J0JiZ3dC5wdXNoKHJ0KX1lbHNle2NvbnN0IHJ0PVV0LnNsaWNlKCk7Zm9yKGxldCBDdD0wO0N0PHJ0Lmxlbmd0aCYmKCFldHx8ITAhPT1ldFtRdF0pO0N0Kyspe2NvbnN0IHE9U3QocnRbQ3RdLER0LGV0KTtxJiZ3dC5w''@;'; put 'put ''dXNoKHEpfX1pZigxPT09d3QubGVuZ3RoKXRocm93IHd0WzBdO2ZvcihsZXQgcnQ9MDtydDx3dC5sZW5ndGg7cnQrKyl7Y29uc3QgQ3Q9d3RbcnRdO1AubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soKCk9Pnt0aHJvdyBDdH0pfX19Y29uc3Qga3Q9ZnVuY3Rpb24oeXQpe3JldHVybiBPdCh0aGlz''@;'; put 'put ''LHl0LCExKX0sUnQ9ZnVuY3Rpb24oeXQpe3JldHVybiBPdCh0aGlzLHl0LCEwKX07ZnVuY3Rpb24gSnQoeXQsZXQpe2lmKCF5dClyZXR1cm4hMTtsZXQgR3Q9ITA7ZXQmJnZvaWQgMCE9PWV0LnVzZUcmJihHdD1ldC51c2VHKTtjb25zdCBEdD1ldCYmZXQudmg7bGV0IFV0PSEwO2V0JiZ2b2lk''@;'; put 'put ''IDAhPT1ldC5jaGtEdXAmJihVdD1ldC5jaGtEdXApO2xldCB3dD0hMTtldCYmdm9pZCAwIT09ZXQucnQmJih3dD1ldC5ydCk7bGV0IHJ0PXl0O2Zvcig7cnQmJiFydC5oYXNPd25Qcm9wZXJ0eShBKTspcnQ9dChydCk7aWYoIXJ0JiZ5dFtBXSYmKHJ0PXl0KSwhcnR8fHJ0W290XSlyZXR1cm4h''@;'; put 'put ''MTtjb25zdCBDdD1ldCYmZXQuZXZlbnROYW1lVG9TdHJpbmcscT17fSxQdD1ydFtvdF09cnRbQV0sZHQ9cnRbeChrKV09cnRba10senQ9cnRbeChKKV09cnRbSl0sX3Q9cnRbeCh6KV09cnRbel07bGV0IEh0O2V0JiZldC5wcmVwZW5kJiYoSHQ9cnRbeChldC5wcmVwZW5kKV09cnRbZXQucHJl''@;'; put 'put ''cGVuZF0pO2NvbnN0IE09R3Q/ZnVuY3Rpb24oTCl7aWYoIXEuaXNFeGlzdGluZylyZXR1cm4gUHQuY2FsbChxLnRhcmdldCxxLmV2ZW50TmFtZSxxLmNhcHR1cmU/UnQ6a3QscS5vcHRpb25zKX06ZnVuY3Rpb24oTCl7cmV0dXJuIFB0LmNhbGwocS50YXJnZXQscS5ldmVudE5hbWUsTC5pbnZv''@;'; put 'put ''a2UscS5vcHRpb25zKX0sTj1HdD9mdW5jdGlvbihMKXtpZighTC5pc1JlbW92ZWQpe2NvbnN0IEc9anRbTC5ldmVudE5hbWVdO2xldCBsdDtHJiYobHQ9R1tMLmNhcHR1cmU/aTpwXSk7Y29uc3QgcHQ9bHQmJkwudGFyZ2V0W2x0XTtpZihwdClmb3IobGV0IHV0PTA7dXQ8cHQubGVuZ3RoO3V0''@;'; put 'put ''KyspaWYocHRbdXRdPT09TCl7cHQuc3BsaWNlKHV0LDEpLEwuaXNSZW1vdmVkPSEwLDA9PT1wdC5sZW5ndGgmJihMLmFsbFJlbW92ZWQ9ITAsTC50YXJnZXRbbHRdPW51bGwpO2JyZWFrfX1pZihMLmFsbFJlbW92ZWQpcmV0dXJuIGR0LmNhbGwoTC50YXJnZXQsTC5ldmVudE5hbWUsTC5jYXB0''@;'; put 'put ''dXJlP1J0Omt0LEwub3B0aW9ucyl9OmZ1bmN0aW9uKEwpe3JldHVybiBkdC5jYWxsKEwudGFyZ2V0LEwuZXZlbnROYW1lLEwuaW52b2tlLEwub3B0aW9ucyl9LG10PWV0JiZldC5kaWZmP2V0LmRpZmY6ZnVuY3Rpb24oTCxHKXtjb25zdCBsdD10eXBlb2YgRztyZXR1cm4iZnVuY3Rpb24iPT09''@;'; put 'put ''bHQmJkwuY2FsbGJhY2s9PT1HfHwib2JqZWN0Ij09PWx0JiZMLm9yaWdpbmFsRGVsZWdhdGU9PT1HfSxXdD1ab25lW3goIlVOUEFUQ0hFRF9FVkVOVFMiKV0sSD1oW3goIlBBU1NJVkVfRVZFTlRTIildLFc9ZnVuY3Rpb24oTCxHLGx0LHB0LHV0PSExLGd0PSExKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''KXtjb25zdCB4dD10aGlzfHxoO2xldCBUdD1hcmd1bWVudHNbMF07ZXQmJmV0LnRyYW5zZmVyRXZlbnROYW1lJiYoVHQ9ZXQudHJhbnNmZXJFdmVudE5hbWUoVHQpKTtsZXQgYnQ9YXJndW1lbnRzWzFdO2lmKCFidClyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoUyYmInVuY2F1''@;'; put 'put ''Z2h0RXhjZXB0aW9uIj09PVR0KXJldHVybiBMLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtsZXQgTnQ9ITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGJ0KXtpZighYnQuaGFuZGxlRXZlbnQpcmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1bWVudHMpO050PSEwfWlmKER0JiYhRHQoTCxidCx4dCxhcmd1''@;'; put 'put ''bWVudHMpKXJldHVybjtjb25zdCBzbj1FdCYmISFIJiYtMSE9PUguaW5kZXhPZihUdCksdG49ZnVuY3Rpb24gTHQoTCxHKXtyZXR1cm4hRXQmJiJvYmplY3QiPT10eXBlb2YgTCYmTD8hIUwuY2FwdHVyZTpFdCYmRz8iYm9vbGVhbiI9PXR5cGVvZiBMP3tjYXB0dXJlOkwscGFzc2l2ZTohMH06''@;'; put 'put ''TD8ib2JqZWN0Ij09dHlwZW9mIEwmJiExIT09TC5wYXNzaXZlP3suLi5MLHBhc3NpdmU6ITB9Okw6e3Bhc3NpdmU6ITB9Okx9KGFyZ3VtZW50c1syXSxzbik7aWYoV3QpZm9yKGxldCBjbj0wO2NuPFd0Lmxlbmd0aDtjbisrKWlmKFR0PT09V3RbY25dKXJldHVybiBzbj9MLmNhbGwoeHQsVHQs''@;'; put 'put ''YnQsdG4pOkwuYXBwbHkodGhpcyxhcmd1bWVudHMpO2NvbnN0IHBuPSEhdG4mJigiYm9vbGVhbiI9PXR5cGVvZiB0bnx8dG4uY2FwdHVyZSksbW49ISghdG58fCJvYmplY3QiIT10eXBlb2YgdG4pJiZ0bi5vbmNlLE1uPVpvbmUuY3VycmVudDtsZXQgeW49anRbVHRdO3lufHwocm4oVHQsQ3Qp''@;'; put 'put ''LHluPWp0W1R0XSk7Y29uc3QgZ249eW5bcG4/aTpwXTtsZXQgdm4saG49eHRbZ25dLEVuPSExO2lmKGhuKXtpZihFbj0hMCxVdClmb3IobGV0IGNuPTA7Y248aG4ubGVuZ3RoO2NuKyspaWYobXQoaG5bY25dLGJ0KSlyZXR1cm59ZWxzZSBobj14dFtnbl09W107Y29uc3QgeG49eHQuY29uc3Ry''@;'; put 'put ''dWN0b3IubmFtZSxUbj1YdFt4bl07VG4mJih2bj1UbltUdF0pLHZufHwodm49eG4rRysoQ3Q/Q3QoVHQpOlR0KSkscS5vcHRpb25zPXRuLG1uJiYocS5vcHRpb25zLm9uY2U9ITEpLHEudGFyZ2V0PXh0LHEuY2FwdHVyZT1wbixxLmV2ZW50TmFtZT1UdCxxLmlzRXhpc3Rpbmc9RW47Y29uc3Qg''@;'; put 'put ''ZG49R3Q/RnQ6dm9pZCAwO2RuJiYoZG4udGFza0RhdGE9cSk7Y29uc3QgdW49TW4uc2NoZWR1bGVFdmVudFRhc2sodm4sYnQsZG4sbHQscHQpO3JldHVybiBxLnRhcmdldD1udWxsLGRuJiYoZG4udGFza0RhdGE9bnVsbCksbW4mJih0bi5vbmNlPSEwKSwhRXQmJiJib29sZWFuIj09dHlwZW9m''@;'; put 'put ''IHVuLm9wdGlvbnN8fCh1bi5vcHRpb25zPXRuKSx1bi50YXJnZXQ9eHQsdW4uY2FwdHVyZT1wbix1bi5ldmVudE5hbWU9VHQsTnQmJih1bi5vcmlnaW5hbERlbGVnYXRlPWJ0KSxndD9obi51bnNoaWZ0KHVuKTpobi5wdXNoKHVuKSx1dD94dDp2b2lkIDB9fTtyZXR1cm4gcnRbQV09VyhQdCxj''@;'; put 'put ''dCxNLE4sd3QpLEh0JiYocnRbaXRdPVcoSHQsQXQsZnVuY3Rpb24oTCl7cmV0dXJuIEh0LmNhbGwocS50YXJnZXQscS5ldmVudE5hbWUsTC5pbnZva2UscS5vcHRpb25zKX0sTix3dCwhMCkpLHJ0W2tdPWZ1bmN0aW9uKCl7Y29uc3QgTD10aGlzfHxoO2xldCBHPWFyZ3VtZW50c1swXTtldCYm''@;'; put 'put ''ZXQudHJhbnNmZXJFdmVudE5hbWUmJihHPWV0LnRyYW5zZmVyRXZlbnROYW1lKEcpKTtjb25zdCBsdD1hcmd1bWVudHNbMl0scHQ9ISFsdCYmKCJib29sZWFuIj09dHlwZW9mIGx0fHxsdC5jYXB0dXJlKSx1dD1hcmd1bWVudHNbMV07aWYoIXV0KXJldHVybiBkdC5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyk7aWYoRHQmJiFEdChkdCx1dCxMLGFyZ3VtZW50cykpcmV0dXJuO2NvbnN0IGd0PWp0W0ddO2xldCB4dDtndCYmKHh0PWd0W3B0P2k6cF0pO2NvbnN0IFR0PXh0JiZMW3h0XTtpZihUdClmb3IobGV0IGJ0PTA7YnQ8VHQubGVuZ3RoO2J0Kyspe2NvbnN0IE50PVR0W2J0XTtpZihtdChO''@;'; put 'put ''dCx1dCkpcmV0dXJuIFR0LnNwbGljZShidCwxKSxOdC5pc1JlbW92ZWQ9ITAsMD09PVR0Lmxlbmd0aCYmKE50LmFsbFJlbW92ZWQ9ITAsTFt4dF09bnVsbCwic3RyaW5nIj09dHlwZW9mIEcpJiYoTFt5KyJPTl9QUk9QRVJUWSIrR109bnVsbCksTnQuem9uZS5jYW5jZWxUYXNrKE50KSx3dD9M''@;'; put 'put ''OnZvaWQgMH1yZXR1cm4gZHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxydFtKXT1mdW5jdGlvbigpe2NvbnN0IEw9dGhpc3x8aDtsZXQgRz1hcmd1bWVudHNbMF07ZXQmJmV0LnRyYW5zZmVyRXZlbnROYW1lJiYoRz1ldC50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgbHQ9W10scHQ9YW4o''@;'; put 'put ''TCxDdD9DdChHKTpHKTtmb3IobGV0IHV0PTA7dXQ8cHQubGVuZ3RoO3V0Kyspe2NvbnN0IGd0PXB0W3V0XTtsdC5wdXNoKGd0Lm9yaWdpbmFsRGVsZWdhdGU/Z3Qub3JpZ2luYWxEZWxlZ2F0ZTpndC5jYWxsYmFjayl9cmV0dXJuIGx0fSxydFt6XT1mdW5jdGlvbigpe2NvbnN0IEw9dGhpc3x8''@;'; put 'put ''aDtsZXQgRz1hcmd1bWVudHNbMF07aWYoRyl7ZXQmJmV0LnRyYW5zZmVyRXZlbnROYW1lJiYoRz1ldC50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgbHQ9anRbR107aWYobHQpe2NvbnN0IGd0PUxbbHRbcF1dLHh0PUxbbHRbaV1dO2lmKGd0KXtjb25zdCBUdD1ndC5zbGljZSgpO2Zvcihs''@;'; put 'put ''ZXQgYnQ9MDtidDxUdC5sZW5ndGg7YnQrKyl7Y29uc3QgTnQ9VHRbYnRdO3RoaXNba10uY2FsbCh0aGlzLEcsTnQub3JpZ2luYWxEZWxlZ2F0ZT9OdC5vcmlnaW5hbERlbGVnYXRlOk50LmNhbGxiYWNrLE50Lm9wdGlvbnMpfX1pZih4dCl7Y29uc3QgVHQ9eHQuc2xpY2UoKTtmb3IobGV0IGJ0''@;'; put 'put ''PTA7YnQ8VHQubGVuZ3RoO2J0Kyspe2NvbnN0IE50PVR0W2J0XTt0aGlzW2tdLmNhbGwodGhpcyxHLE50Lm9yaWdpbmFsRGVsZWdhdGU/TnQub3JpZ2luYWxEZWxlZ2F0ZTpOdC5jYWxsYmFjayxOdC5vcHRpb25zKX19fX1lbHNle2NvbnN0IGx0PU9iamVjdC5rZXlzKEwpO2ZvcihsZXQgcHQ9''@;'; put 'put ''MDtwdDxsdC5sZW5ndGg7cHQrKyl7Y29uc3QgZ3Q9QnQuZXhlYyhsdFtwdF0pO2xldCB4dD1ndCYmZ3RbMV07eHQmJiJyZW1vdmVMaXN0ZW5lciIhPT14dCYmdGhpc1t6XS5jYWxsKHRoaXMseHQpfXRoaXNbel0uY2FsbCh0aGlzLCJyZW1vdmVMaXN0ZW5lciIpfWlmKHd0KXJldHVybiB0aGlz''@;'; put 'put ''fSxRKHJ0W0FdLFB0KSxRKHJ0W2tdLGR0KSxfdCYmUShydFt6XSxfdCksenQmJlEocnRbSl0senQpLCEwfWxldCAkdD1bXTtmb3IobGV0IHl0PTA7eXQ8SS5sZW5ndGg7eXQrKykkdFt5dF09SnQoSVt5dF0sVCk7cmV0dXJuICR0fWZ1bmN0aW9uIGFuKGgsUCl7aWYoIVApe2NvbnN0IGs9W107''@;'; put 'put ''Zm9yKGxldCBKIGluIGgpe2NvbnN0IHo9QnQuZXhlYyhKKTtsZXQgb3Q9eiYmelsxXTtpZihvdCYmKCFQfHxvdD09PVApKXtjb25zdCBjdD1oW0pdO2lmKGN0KWZvcihsZXQgaXQ9MDtpdDxjdC5sZW5ndGg7aXQrKylrLnB1c2goY3RbaXRdKX19cmV0dXJuIGt9bGV0IEk9anRbUF07SXx8KHJu''@;'; put 'put ''KFApLEk9anRbUF0pO2NvbnN0IFQ9aFtJW3BdXSxBPWhbSVtpXV07cmV0dXJuIFQ/QT9ULmNvbmNhdChBKTpULnNsaWNlKCk6QT9BLnNsaWNlKCk6W119ZnVuY3Rpb24gZm4oaCxQKXtjb25zdCBJPWguRXZlbnQ7SSYmSS5wcm90b3R5cGUmJlAucGF0Y2hNZXRob2QoSS5wcm90b3R5cGUsInN0''@;'; put 'put ''b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsVD0+ZnVuY3Rpb24oQSxrKXtBW1F0XT0hMCxUJiZULmFwcGx5KEEsayl9KX1mdW5jdGlvbiBvbihoLFAsSSxULEEpe2NvbnN0IGs9Wm9uZS5fX3N5bWJvbF9fKFQpO2lmKFBba10pcmV0dXJuO2NvbnN0IEo9UFtrXT1QW1RdO1BbVF09ZnVuY3Rpb24o''@;'; put 'put ''eixvdCxjdCl7cmV0dXJuIG90JiZvdC5wcm90b3R5cGUmJkEuZm9yRWFjaChmdW5jdGlvbihpdCl7Y29uc3QgQXQ9YCR7SX0uJHtUfTo6YCtpdCxTdD1vdC5wcm90b3R5cGU7dHJ5e2lmKFN0Lmhhc093blByb3BlcnR5KGl0KSl7Y29uc3QgT3Q9aC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2Ny''@;'; put 'put ''aXB0b3IoU3QsaXQpO090JiZPdC52YWx1ZT8oT3QudmFsdWU9aC53cmFwV2l0aEN1cnJlbnRab25lKE90LnZhbHVlLEF0KSxoLl9yZWRlZmluZVByb3BlcnR5KG90LnByb3RvdHlwZSxpdCxPdCkpOlN0W2l0XSYmKFN0W2l0XT1oLndyYXBXaXRoQ3VycmVudFpvbmUoU3RbaXRdLEF0KSl9ZWxz''@;'; put 'put ''ZSBTdFtpdF0mJihTdFtpdF09aC53cmFwV2l0aEN1cnJlbnRab25lKFN0W2l0XSxBdCkpfWNhdGNoe319KSxKLmNhbGwoUCx6LG90LGN0KX0saC5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQoUFtUXSxKKX1mdW5jdGlvbiBZdChoLFAsSSl7aWYoIUl8fDA9PT1JLmxlbmd0aClyZXR1cm4gUDtjb25z''@;'; put 'put ''dCBUPUkuZmlsdGVyKGs9PmsudGFyZ2V0PT09aCk7aWYoIVR8fDA9PT1ULmxlbmd0aClyZXR1cm4gUDtjb25zdCBBPVRbMF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gUC5maWx0ZXIoaz0+LTE9PT1BLmluZGV4T2YoaykpfWZ1bmN0aW9uIFp0KGgsUCxJLFQpe2gmJl8oaCxZdChoLFAsSSks''@;'; put 'put ''VCl9ZnVuY3Rpb24gZW4oaCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGgpLmZpbHRlcihQPT5QLnN0YXJ0c1dpdGgoIm9uIikmJlAubGVuZ3RoPjIpLm1hcChQPT5QLnN1YnN0cmluZygyKSl9Wm9uZS5fX2xvYWRfcGF0Y2goInV0aWwiLChoLFAsSSk9Pntjb25zdCBUPWVu''@;'; put 'put ''KGgpO0kucGF0Y2hPblByb3BlcnRpZXM9XyxJLnBhdGNoTWV0aG9kPVgsSS5iaW5kQXJndW1lbnRzPUYsSS5wYXRjaE1hY3JvVGFzaz1WO2NvbnN0IEE9UC5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIiksaz1QLl9fc3ltYm9sX18oIlVOUEFUQ0hFRF9FVkVOVFMiKTtoW2tdJiYo''@;'; put 'put ''aFtBXT1oW2tdKSxoW0FdJiYoUFtBXT1QW2tdPWhbQV0pLEkucGF0Y2hFdmVudFByb3RvdHlwZT1mbixJLnBhdGNoRXZlbnRUYXJnZXQ9bm4sSS5pc0lFT3JFZGdlPU10LEkuT2JqZWN0RGVmaW5lUHJvcGVydHk9bCxJLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcj1jLEkuT2JqZWN0''@;'; put 'put ''Q3JlYXRlPW4sSS5BcnJheVNsaWNlPWUsSS5wYXRjaENsYXNzPXN0LEkud3JhcFdpdGhDdXJyZW50Wm9uZT12LEkuZmlsdGVyUHJvcGVydGllcz1ZdCxJLmF0dGFjaE9yaWdpblRvUGF0Y2hlZD1RLEkuX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LEkucGF0Y2hDYWxs''@;'; put 'put ''YmFja3M9b24sSS5nZXRHbG9iYWxPYmplY3RzPSgpPT4oe2dsb2JhbFNvdXJjZXM6WHQsem9uZVN5bWJvbEV2ZW50TmFtZXM6anQsZXZlbnROYW1lczpULGlzQnJvd3NlcjpDLGlzTWl4OkssaXNOb2RlOlMsVFJVRV9TVFI6aSxGQUxTRV9TVFI6cCxaT05FX1NZTUJPTF9QUkVGSVg6eSxBRERf''@;'; put 'put ''RVZFTlRfTElTVEVORVJfU1RSOnMsUkVNT1ZFX0VWRU5UX0xJU1RFTkVSX1NUUjpvfSl9KTtjb25zdCByPXgoInpvbmVUYXNrIik7ZnVuY3Rpb24gYShoLFAsSSxUKXtsZXQgQT1udWxsLGs9bnVsbDtJKz1UO2NvbnN0IEo9e307ZnVuY3Rpb24geihjdCl7Y29uc3QgaXQ9Y3QuZGF0YTtyZXR1''@;'; put 'put ''cm4gaXQuYXJnc1swXT1mdW5jdGlvbigpe3JldHVybiBjdC5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxpdC5oYW5kbGVJZD1BLmFwcGx5KGgsaXQuYXJncyksY3R9ZnVuY3Rpb24gb3QoY3Qpe3JldHVybiBrLmNhbGwoaCxjdC5kYXRhLmhhbmRsZUlkKX1BPVgoaCxQKz1ULGN0PT5m''@;'; put 'put ''dW5jdGlvbihpdCxBdCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEF0WzBdKXtjb25zdCBTdD17aXNQZXJpb2RpYzoiSW50ZXJ2YWwiPT09VCxkZWxheToiVGltZW91dCI9PT1UfHwiSW50ZXJ2YWwiPT09VD9BdFsxXXx8MDp2b2lkIDAsYXJnczpBdH0sT3Q9QXRbMF07QXRbMF09ZnVuY3Rpb24o''@;'; put 'put ''KXt0cnl7cmV0dXJuIE90LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e1N0LmlzUGVyaW9kaWN8fCgibnVtYmVyIj09dHlwZW9mIFN0LmhhbmRsZUlkP2RlbGV0ZSBKW1N0LmhhbmRsZUlkXTpTdC5oYW5kbGVJZCYmKFN0LmhhbmRsZUlkW3JdPW51bGwpKX19O2NvbnN0IGt0PWcoUCxB''@;'; put 'put ''dFswXSxTdCx6LG90KTtpZigha3QpcmV0dXJuIGt0O2NvbnN0IFJ0PWt0LmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBSdD9KW1J0XT1rdDpSdCYmKFJ0W3JdPWt0KSxSdCYmUnQucmVmJiZSdC51bnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIFJ0LnJlZiYmImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFJ0LnVucmVmJiYoa3QucmVmPVJ0LnJlZi5iaW5kKFJ0KSxrdC51bnJlZj1SdC51bnJlZi5iaW5kKFJ0KSksIm51bWJlciI9PXR5cGVvZiBSdHx8UnQ/UnQ6a3R9cmV0dXJuIGN0LmFwcGx5KGgsQXQpfSksaz1YKGgsSSxjdD0+ZnVuY3Rpb24oaXQsQXQpe2NvbnN0IFN0PUF0''@;'; put 'put ''WzBdO2xldCBPdDsibnVtYmVyIj09dHlwZW9mIFN0P090PUpbU3RdOihPdD1TdCYmU3Rbcl0sT3R8fChPdD1TdCkpLE90JiYic3RyaW5nIj09dHlwZW9mIE90LnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1PdC5zdGF0ZSYmKE90LmNhbmNlbEZuJiZPdC5kYXRhLmlzUGVyaW9kaWN8fDA9PT1PdC5y''@;'; put 'put ''dW5Db3VudCkmJigibnVtYmVyIj09dHlwZW9mIFN0P2RlbGV0ZSBKW1N0XTpTdCYmKFN0W3JdPW51bGwpLE90LnpvbmUuY2FuY2VsVGFzayhPdCkpOmN0LmFwcGx5KGgsQXQpfSl9Wm9uZS5fX2xvYWRfcGF0Y2goImxlZ2FjeSIsaD0+e2NvbnN0IFA9aFtab25lLl9fc3ltYm9sX18oImxlZ2Fj''@;'; put 'put ''eVBhdGNoIildO1AmJlAoKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJ0aW1lcnMiLGg9Pntjb25zdCBQPSJzZXQiLEk9ImNsZWFyIjthKGgsUCxJLCJUaW1lb3V0IiksYShoLFAsSSwiSW50ZXJ2YWwiKSxhKGgsUCxJLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5p''@;'; put 'put ''bWF0aW9uRnJhbWUiLGg9PnthKGgsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLGEoaCwibW96UmVxdWVzdCIsIm1vekNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksYShoLCJ3ZWJraXRSZXF1ZXN0Iiwid2Via2l0Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKX0pLFpvbmUu''@;'; put 'put ''X19sb2FkX3BhdGNoKCJibG9ja2luZyIsKGgsUCk9Pntjb25zdCBJPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl07Zm9yKGxldCBUPTA7VDxJLmxlbmd0aDtUKyspWChoLElbVF0sKGssSix6KT0+ZnVuY3Rpb24ob3QsY3Qpe3JldHVybiBQLmN1cnJlbnQucnVuKGssaCxjdCx6KX0pfSks''@;'; put 'put ''Wm9uZS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0IiwoaCxQLEkpPT57KGZ1bmN0aW9uICQoaCxQKXtQLnBhdGNoRXZlbnRQcm90b3R5cGUoaCxQKX0pKGgsSSksZnVuY3Rpb24gRChoLFApe2lmKFpvbmVbUC5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV0pcmV0dXJuO2NvbnN0e2V2ZW50''@;'; put 'put ''TmFtZXM6SSx6b25lU3ltYm9sRXZlbnROYW1lczpULFRSVUVfU1RSOkEsRkFMU0VfU1RSOmssWk9ORV9TWU1CT0xfUFJFRklYOkp9PVAuZ2V0R2xvYmFsT2JqZWN0cygpO2ZvcihsZXQgb3Q9MDtvdDxJLmxlbmd0aDtvdCsrKXtjb25zdCBjdD1JW290XSxTdD1KKyhjdCtrKSxPdD1KKyhjdCtB''@;'; put 'put ''KTtUW2N0XT17fSxUW2N0XVtrXT1TdCxUW2N0XVtBXT1PdH1jb25zdCB6PWguRXZlbnRUYXJnZXQ7eiYmei5wcm90b3R5cGUmJlAucGF0Y2hFdmVudFRhcmdldChoLFAsW3omJnoucHJvdG90eXBlXSl9KGgsSSk7Y29uc3QgVD1oLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7VCYmVC5wcm90''@;'; put 'put ''b3R5cGUmJkkucGF0Y2hFdmVudFRhcmdldChoLEksW1QucHJvdG90eXBlXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiTXV0YXRpb25PYnNlcnZlciIsKGgsUCxJKT0+e3N0KCJNdXRhdGlvbk9ic2VydmVyIiksc3QoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNo''@;'; put 'put ''KCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsKGgsUCxJKT0+e3N0KCJJbnRlcnNlY3Rpb25PYnNlcnZlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIkZpbGVSZWFkZXIiLChoLFAsSSk9PntzdCgiRmlsZVJlYWRlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IiwoaCxQLEkpPT57''@;'; put 'put ''IWZ1bmN0aW9uIGxuKGgsUCl7aWYoUyYmIUt8fFpvbmVbaC5zeW1ib2woInBhdGNoRXZlbnRzIildKXJldHVybjtjb25zdCBJPVAuX19ab25lX2lnbm9yZV9vbl9wcm9wZXJ0aWVzO2xldCBUPVtdO2lmKEMpe2NvbnN0IEE9d2luZG93O1Q9VC5jb25jYXQoWyJEb2N1bWVudCIsIlNWR0VsZW1l''@;'; put 'put ''bnQiLCJFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJIVE1MQm9keUVsZW1lbnQiLCJIVE1MTWVkaWFFbGVtZW50IiwiSFRNTEZyYW1lU2V0RWxlbWVudCIsIkhUTUxGcmFtZUVsZW1lbnQiLCJIVE1MSUZyYW1lRWxlbWVudCIsIkhUTUxNYXJxdWVlRWxlbWVudCIsIldvcmtlciJdKTtjb25zdCBr''@;'; put 'put ''PWZ1bmN0aW9uIHZ0KCl7dHJ5e2NvbnN0IGg9ai5uYXZpZ2F0b3IudXNlckFnZW50O2lmKC0xIT09aC5pbmRleE9mKCJNU0lFICIpfHwtMSE9PWguaW5kZXhPZigiVHJpZGVudC8iKSlyZXR1cm4hMH1jYXRjaHt9cmV0dXJuITF9KCk/W3t0YXJnZXQ6QSxpZ25vcmVQcm9wZXJ0aWVzOlsiZXJy''@;'; put 'put ''b3IiXX1dOltdO1p0KEEsZW4oQSksSSYmSS5jb25jYXQoayksdChBKSl9VD1ULmNvbmNhdChbIlhNTEh0dHBSZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCIsIklEQkluZGV4IiwiSURCUmVxdWVzdCIsIklEQk9wZW5EQlJlcXVlc3QiLCJJREJEYXRhYmFzZSIsIklEQlRyYW5z''@;'; put 'put ''YWN0aW9uIiwiSURCQ3Vyc29yIiwiV2ViU29ja2V0Il0pO2ZvcihsZXQgQT0wO0E8VC5sZW5ndGg7QSsrKXtjb25zdCBrPVBbVFtBXV07ayYmay5wcm90b3R5cGUmJlp0KGsucHJvdG90eXBlLGVuKGsucHJvdG90eXBlKSxJKX19KEksaCl9KSxab25lLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxl''@;'; put 'put ''bWVudHMiLChoLFAsSSk9PnshZnVuY3Rpb24gbShoLFApe2NvbnN0e2lzQnJvd3NlcjpJLGlzTWl4OlR9PVAuZ2V0R2xvYmFsT2JqZWN0cygpOyhJfHxUKSYmaC5jdXN0b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIGgmJlAucGF0Y2hDYWxsYmFja3MoUCxoLmN1c3RvbUVsZW1lbnRz''@;'; put 'put ''LCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfShoLEkpfSksWm9uZS5fX2xvYWRfcGF0Y2goIlhIUiIsKGgsUCk9PnshZnVuY3Rp''@;'; put 'put ''b24gb3QoY3Qpe2NvbnN0IGl0PWN0LlhNTEh0dHBSZXF1ZXN0O2lmKCFpdClyZXR1cm47Y29uc3QgQXQ9aXQucHJvdG90eXBlO2xldCBPdD1BdFt1XSxrdD1BdFtmXTtpZighT3Qpe2NvbnN0IHE9Y3QuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpZihxKXtjb25zdCBQdD1xLnByb3RvdHlw''@;'; put 'put ''ZTtPdD1QdFt1XSxrdD1QdFtmXX19Y29uc3QgUnQ9InJlYWR5c3RhdGVjaGFuZ2UiLEp0PSJzY2hlZHVsZWQiO2Z1bmN0aW9uICR0KHEpe2NvbnN0IFB0PXEuZGF0YSxkdD1QdC50YXJnZXQ7ZHRba109ITEsZHRbel09ITE7Y29uc3QgenQ9ZHRbQV07T3R8fChPdD1kdFt1XSxrdD1kdFtmXSks''@;'; put 'put ''enQmJmt0LmNhbGwoZHQsUnQsenQpO2NvbnN0IF90PWR0W0FdPSgpPT57aWYoZHQucmVhZHlTdGF0ZT09PWR0LkRPTkUpaWYoIVB0LmFib3J0ZWQmJmR0W2tdJiZxLnN0YXRlPT09SnQpe2NvbnN0IEx0PWR0W1AuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2lmKDAhPT1kdC5zdGF0dXMmJkx0''@;'; put 'put ''JiZMdC5sZW5ndGg+MCl7Y29uc3QgcXQ9cS5pbnZva2U7cS5pbnZva2U9ZnVuY3Rpb24oKXtjb25zdCBWdD1kdFtQLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtmb3IobGV0IEt0PTA7S3Q8VnQubGVuZ3RoO0t0KyspVnRbS3RdPT09cSYmVnQuc3BsaWNlKEt0LDEpOyFQdC5hYm9ydGVkJiZx''@;'; put 'put ''LnN0YXRlPT09SnQmJnF0LmNhbGwocSl9LEx0LnB1c2gocSl9ZWxzZSBxLmludm9rZSgpfWVsc2UhUHQuYWJvcnRlZCYmITE9PT1kdFtrXSYmKGR0W3pdPSEwKX07cmV0dXJuIE90LmNhbGwoZHQsUnQsX3QpLGR0W0ldfHwoZHRbSV09cSkscnQuYXBwbHkoZHQsUHQuYXJncyksZHRba109ITAs''@;'; put 'put ''cX1mdW5jdGlvbiB5dCgpe31mdW5jdGlvbiBldChxKXtjb25zdCBQdD1xLmRhdGE7cmV0dXJuIFB0LmFib3J0ZWQ9ITAsQ3QuYXBwbHkoUHQudGFyZ2V0LFB0LmFyZ3MpfWNvbnN0IEd0PVgoQXQsIm9wZW4iLCgpPT5mdW5jdGlvbihxLFB0KXtyZXR1cm4gcVtUXT0wPT1QdFsyXSxxW0pdPVB0''@;'; put 'put ''WzFdLEd0LmFwcGx5KHEsUHQpfSksVXQ9eCgiZmV0Y2hUYXNrQWJvcnRpbmciKSx3dD14KCJmZXRjaFRhc2tTY2hlZHVsaW5nIikscnQ9WChBdCwic2VuZCIsKCk9PmZ1bmN0aW9uKHEsUHQpe2lmKCEwPT09UC5jdXJyZW50W3d0XXx8cVtUXSlyZXR1cm4gcnQuYXBwbHkocSxQdCk7e2NvbnN0''@;'; put 'put ''IGR0PXt0YXJnZXQ6cSx1cmw6cVtKXSxpc1BlcmlvZGljOiExLGFyZ3M6UHQsYWJvcnRlZDohMX0senQ9ZygiWE1MSHR0cFJlcXVlc3Quc2VuZCIseXQsZHQsJHQsZXQpO3EmJiEwPT09cVt6XSYmIWR0LmFib3J0ZWQmJnp0LnN0YXRlPT09SnQmJnp0Lmludm9rZSgpfX0pLEN0PVgoQXQsImFi''@;'; put 'put ''b3J0IiwoKT0+ZnVuY3Rpb24ocSxQdCl7Y29uc3QgZHQ9ZnVuY3Rpb24gU3QocSl7cmV0dXJuIHFbSV19KHEpO2lmKGR0JiYic3RyaW5nIj09dHlwZW9mIGR0LnR5cGUpe2lmKG51bGw9PWR0LmNhbmNlbEZufHxkdC5kYXRhJiZkdC5kYXRhLmFib3J0ZWQpcmV0dXJuO2R0LnpvbmUuY2FuY2Vs''@;'; put 'put ''VGFzayhkdCl9ZWxzZSBpZighMD09PVAuY3VycmVudFtVdF0pcmV0dXJuIEN0LmFwcGx5KHEsUHQpfSl9KGgpO2NvbnN0IEk9eCgieGhyVGFzayIpLFQ9eCgieGhyU3luYyIpLEE9eCgieGhyTGlzdGVuZXIiKSxrPXgoInhoclNjaGVkdWxlZCIpLEo9eCgieGhyVVJMIiksej14KCJ4aHJFcnJv''@;'; put 'put ''ckJlZm9yZVNjaGVkdWxlZCIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixoPT57aC5uYXZpZ2F0b3ImJmgubmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZmdW5jdGlvbiBCKGgsUCl7Y29uc3QgST1oLmNvbnN0cnVjdG9yLm5hbWU7Zm9yKGxldCBUPTA7VDxQLmxlbmd0aDtUKysp''@;'; put 'put ''e2NvbnN0IEE9UFtUXSxrPWhbQV07aWYoayl7aWYoIWIoYyhoLEEpKSljb250aW51ZTtoW0FdPSh6PT57Y29uc3Qgb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gei5hcHBseSh0aGlzLEYoYXJndW1lbnRzLEkrIi4iK0EpKX07cmV0dXJuIFEob3Qseiksb3R9KShrKX19fShoLm5hdmlnYXRvci5nZW9s''@;'; put 'put ''b2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwoaCxQKT0+e2Z1bmN0aW9uIEkoVCl7cmV0dXJuIGZ1bmN0aW9uKEEpe2FuKGgsVCkuZm9yRWFjaChKPT57Y29uc3Qgej1oLlBy''@;'; put 'put ''b21pc2VSZWplY3Rpb25FdmVudDtpZih6KXtjb25zdCBvdD1uZXcgeihULHtwcm9taXNlOkEucHJvbWlzZSxyZWFzb246QS5yZWplY3Rpb259KTtKLmludm9rZShvdCl9fSl9fWguUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYoUFt4KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIp''@;'; put 'put ''XT1JKCJ1bmhhbmRsZWRyZWplY3Rpb24iKSxQW3goInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPUkoInJlamVjdGlvbmhhbmRsZWQiKSl9KSxab25lLl9fbG9hZF9wYXRjaCgicXVldWVNaWNyb3Rhc2siLChoLFAsSSk9PnshZnVuY3Rpb24gZChoLFApe1AucGF0Y2hNZXRob2QoaCwicXVl''@;'; put 'put ''dWVNaWNyb3Rhc2siLEk9PmZ1bmN0aW9uKFQsQSl7Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJxdWV1ZU1pY3JvdGFzayIsQVswXSl9KX0oaCxJKX0pfSwzMDc1ODooYyxsLHQpPT57InVzZSBzdHJpY3QiO2NvbnN0IG49dCgxMjAzMCk7SW50bC5EYXRlVGltZUZvcm1hdC5wcm90''@;'; put 'put ''b3R5cGUuZm9ybWF0VG9QYXJ0cz1mdW5jdGlvbihiKXtsZXQgTz10aGlzLnJlc29sdmVkT3B0aW9ucygpLFM9ZnVuY3Rpb24gQihiKXt2YXIgWix0dCxfLG50LHN0LE89Yi5hdmFpbGFibGVGb3JtYXRzLFM9Yi50aW1lRm9ybWF0cyxDPWIuZGF0ZUZvcm1hdHMsSz1iLm1lZGl1bSxVPVtdLFg9''@;'; put 'put ''W10sVj1bXTtmdW5jdGlvbiBRKFksZnQpe3ZhciB2dD1uZXcgQXJyYXkoKFkubWF0Y2goL00vZyl8fFtdKS5sZW5ndGgrMSksTXQ9bmV3IEFycmF5KChZLm1hdGNoKC9FL2cpfHxbXSkubGVuZ3RoKzEpO3JldHVybiB2dC5sZW5ndGg+MiYmKGZ0PWZ0LnJlcGxhY2UoLyhNfEwpKy8sdnQuam9p''@;'; put 'put ''bigiJDEiKSkpLE10Lmxlbmd0aD4yJiYoZnQ9ZnQucmVwbGFjZSgvKFtFZWNdKSsvLE10LmpvaW4oIiQxIikpKSxmdH1mb3IoWiBpbiBPKU8uaGFzT3duUHJvcGVydHkoWikmJigoXz1GKHR0PVEoWixPW1pdKSkpJiYoVS5wdXNoKF8pLHcoXyk/Vi5wdXNoKHR0KTpSKF8pJiZYLnB1c2godHQp''@;'; put 'put ''KSk7Zm9yKG50PTA7bnQ8WC5sZW5ndGg7bnQrPTEpZm9yKHN0PTA7c3Q8Vi5sZW5ndGg7c3QrPTEpKF89Rih0dD1LLnJlcGxhY2UoInswfSIsWFtudF0pLnJlcGxhY2UoInsxfSIsVltzdF0pLnJlcGxhY2UoL15bLFxzXSt8Wyxcc10rJC9naSwiIikpKSYmVS5wdXNoKF8pO2ZvcihaIGluIFMp''@;'; put 'put ''Uy5oYXNPd25Qcm9wZXJ0eShaKSYmKChfPUYodHQ9UShaLFNbWl0pKSkmJlUucHVzaChfKSk7Zm9yKFogaW4gQylDLmhhc093blByb3BlcnR5KFopJiYoKF89Rih0dD1RKFosQ1taXSkpKSYmVS5wdXNoKF8pKTtyZXR1cm4gVX0obi5kYXRlLmZvcm1hdHMpLEM9e307Zm9yKHZhciBLIGluIGYp''@;'; put 'put ''cy5jYWxsKGYsSykmJihDWyJbWyIrSysiXV0iXT1PW0tdKTtsZXQgWj1mdW5jdGlvbiBpKGIsTyxTKXtmb3IodmFyIFgsc3Q9LTEvMCxWPTAsUT1PLmxlbmd0aDtWPFE7KXt2YXIgWT1PW1ZdLGZ0PTA7Zm9yKHZhciB2dCBpbiBmKWlmKHMuY2FsbChmLHZ0KSl7dmFyIE10PWJbIltbIit2dCsi''@;'; put 'put ''XV0iXSxFdD1zLmNhbGwoWSx2dCk/WVt2dF06dm9pZCAwO2lmKHZvaWQgMD09PU10JiZ2b2lkIDAhPT1FdClmdC09MjA7ZWxzZSBpZih2b2lkIDAhPT1NdCYmdm9pZCAwPT09RXQpZnQtPTEyMDtlbHNle3ZhciBGdD1bIjItZGlnaXQiLCJudW1lcmljIiwibmFycm93Iiwic2hvcnQiLCJsb25n''@;'; put 'put ''Il0sanQ9by5jYWxsKEZ0LE10KSxYdD1vLmNhbGwoRnQsRXQpLEJ0PU1hdGgubWF4KE1hdGgubWluKFh0LWp0LDIpLC0yKTtTJiYoKCJudW1lcmljIj09PU10fHwiMi1kaWdpdCI9PT1NdCkmJiJudW1lcmljIiE9PUV0JiYiMi1kaWdpdCIhPT1FdHx8Im51bWVyaWMiIT09TXQmJiIyLWRpZ2l0''@;'; put 'put ''IiE9PU10JiYoIjItZGlnaXQiPT09RXR8fCJudW1lcmljIj09PUV0KSkmJihmdC09OCksMj09PUJ0P2Z0LT02OjE9PT1CdD9mdC09MzotMT09PUJ0P2Z0LT02Oi0yPT09QnQmJihmdC09OCl9fWZ0PnN0JiYoc3Q9ZnQsWD1ZKSxWKyt9cmV0dXJuIFh9KEMsUyk7cmV0dXJuIGZ1bmN0aW9uIGUo''@;'; put 'put ''YixPKXtpZighaXNGaW5pdGUoTykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdmFsaWQgZGF0ZSBwYXNzZWQgdG8gZm9ybWF0VG9QYXJ0cyIpO2Zvcih2YXIgWCxTPSJlbi1VUyIsQz1iLnBhdHRlcm4sWj0obmV3IEludGwuTnVtYmVyRm9ybWF0KFtTXSx7dXNlR3JvdXBpbmc6ITF9''@;'; put 'put ''KSxuZXcgSW50bC5OdW1iZXJGb3JtYXQoW1NdLHttaW5pbXVtSW50ZWdlckRpZ2l0czoyLHVzZUdyb3VwaW5nOiExfSksZnVuY3Rpb24gcChiLE8sUyl7dmFyIEM9bmV3IERhdGUoYiksSz0iZ2V0IisoU3x8IiIpO3JldHVybnsiW1t3ZWVrZGF5XV0iOkNbSysiRGF5Il0oKSwiW1tlcmFdXSI6''@;'; put 'put ''KyhDW0srIkZ1bGxZZWFyIl0oKT49MCksIltbeWVhcl1dIjpDW0srIkZ1bGxZZWFyIl0oKSwiW1ttb250aF1dIjpDW0srIk1vbnRoIl0oKSwiW1tkYXldXSI6Q1tLKyJEYXRlIl0oKSwiW1tob3VyXV0iOkNbSysiSG91cnMiXSgpLCJbW21pbnV0ZV1dIjpDW0srIk1pbnV0ZXMiXSgpLCJbW3Nl''@;'; put 'put ''Y29uZF1dIjpDW0srIlNlY29uZHMiXSgpLCJbW2luRFNUXV0iOiExfX0oTykpLHR0PSJncmVnb3J5IixfPW4uZGF0ZS5jYWxlbmRhcnMsbnQ9W10sc3Q9L3soW159XSspfS9nLFY9MDtudWxsIT09KFg9c3QuZXhlYyhDKSk7KXtWPFguaW5kZXgmJm50LnB1c2goe3R5cGU6InNlcGFyYXRvciIs''@;'; put 'put ''dmFsdWU6Qy5zdWJzdHIoVixYLmluZGV4LVYpfSk7dmFyIFE9WFsxXSxZPW51bGw7aWYocy5jYWxsKGIsUSkpe3ZhciBmdCx2dD1iW1FdLE10PVpbIltbIitRKyJdXSJdO2lmKCJ5ZWFyIj09PVEmJk10PD0wP010PTEtTXQ6Im1vbnRoIj09PVE/TXQrKzoiaG91ciI9PT1RJiYhMD09PWJbIltb''@;'; put 'put ''aG91cjEyXV0iXSYmKGZ0PShNdCU9MTIpIT09WlsiW1siK1ErIl1dIl0sMD09PU10JiYhMD09PWJbIltbaG91ck5vMF1dIl0mJihNdD0xMikpLCJudW1lcmljIj09PXZ0KVk9TXQ7ZWxzZSBpZigiMi1kaWdpdCI9PT12dCkoWT1NdCkubGVuZ3RoPjImJihZPVkuc2xpY2UoLTIpKTtlbHNlIGlm''@;'; put 'put ''KHZ0IGluIHUpc3dpdGNoKFEpe2Nhc2UibW9udGgiOlk9eShfLHR0LCJtb250aHMiLHZ0LFpbIltbIitRKyJdXSJdKTticmVhaztjYXNlIndlZWtkYXkiOnRyeXtZPXkoXyx0dCwiZGF5cyIsdnQsWlsiW1siK1ErIl1dIl0pfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQg''@;'; put 'put ''d2Vla2RheSBkYXRhIGZvciBsb2NhbGUgIitTKX1icmVhaztjYXNlInRpbWVab25lTmFtZSI6WT0iIjticmVhaztkZWZhdWx0Olk9WlsiW1siK1ErIl1dIl19fWVsc2UiYW1wbSI9PT1RJiYoWT15KF8sdHQsImRheVBlcmlvZHMiLGZ0PyJwbSI6ImFtIikpO251bGwhPT1ZJiYobnQucHVzaCh7''@;'; put 'put ''dHlwZTpYWzFdLHZhbHVlOll9KSxWPVguaW5kZXgrWFswXS5sZW5ndGgpfXJldHVybiBWPEMubGVuZ3RoJiZudC5wdXNoKHt0eXBlOiJzZXBhcmF0b3IiLHZhbHVlOkMuc3Vic3RyKFYpfSksbnR9KFosYil9O3ZhciBzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1BcnJheS5w''@;'; put 'put ''cm90b3R5cGUuaW5kZXhPZix1PU9iamVjdC5jcmVhdGUobnVsbCx7bmFycm93Ont9LHNob3J0Ont9LGxvbmc6e319KSxmPXt3ZWVrZGF5OlsibmFycm93Iiwic2hvcnQiLCJsb25nIl0sZXJhOlsibmFycm93Iiwic2hvcnQiLCJsb25nIl0seWVhcjpbIjItZGlnaXQiLCJudW1lcmljIl0sbW9u''@;'; put 'put ''dGg6WyIyLWRpZ2l0IiwibnVtZXJpYyIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdLGRheTpbIjItZGlnaXQiLCJudW1lcmljIl0saG91cjpbIjItZGlnaXQiLCJudW1lcmljIl0sbWludXRlOlsiMi1kaWdpdCIsIm51bWVyaWMiXSxzZWNvbmQ6WyIyLWRpZ2l0IiwibnVtZXJpYyJdLHRpbWVa''@;'; put 'put ''b25lTmFtZTpbInNob3J0IiwibG9uZyJdfTtmdW5jdGlvbiB5KGIsTyxTLEMsSyl7dmFyIFU9YltPXSYmYltPXVtTXT9iW09dW1NdOmIuZ3JlZ29yeVtTXSxaPXtuYXJyb3c6WyJzaG9ydCIsImxvbmciXSxzaG9ydDpbImxvbmciLCJuYXJyb3ciXSxsb25nOlsic2hvcnQiLCJuYXJyb3ciXX0s''@;'; put 'put ''dHQ9cy5jYWxsKFUsQyk/VVtDXTpzLmNhbGwoVSxaW0NdWzBdKT9VW1pbQ11bMF1dOlVbWltDXVsxXV07cmV0dXJuIG51bGwhPUs/dHRbS106dHR9dmFyIHY9Lyg/OltFZWNdezEsNn18R3sxLDV9fCg/Olt5WXVdK3xVezEsNX0pfFtNTF17MSw1fXxkezEsMn18YXxbaGtIS117MSwyfXxtezEs''@;'; put 'put ''Mn18c3sxLDJ9fHp7MSw0fSkoPz0oW14nXSonW14nXSonKSpbXiddKiQpL2csZz0vW1F4WFZPdlpBU2pnRkR3V0lRcUhdLyx4PXttb250aDpbIm51bWVyaWMiLCIyLWRpZ2l0Iiwic2hvcnQiLCJsb25nIiwibmFycm93Il0sd2Vla2RheTpbInNob3J0Iiwic2hvcnQiLCJzaG9ydCIsImxvbmci''@;'; put 'put ''LCJuYXJyb3ciXSxlcmE6WyJzaG9ydCIsInNob3J0Iiwic2hvcnQiLCJsb25nIiwibmFycm93Il19LEU9WyJ3ZWVrZGF5IiwiZXJhIiwieWVhciIsIm1vbnRoIiwiZGF5Il0saj1bImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJ0aW1lWm9uZU5hbWUiXTtmdW5jdGlvbiB3KGIpe2Zvcih2YXIg''@;'; put 'put ''Tz0wO088ai5sZW5ndGg7Tys9MSlpZihiLmhhc093blByb3BlcnR5KGpbT10pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFIoYil7Zm9yKHZhciBPPTA7TzxFLmxlbmd0aDtPKz0xKWlmKGIuaGFzT3duUHJvcGVydHkoRVtPXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gRihiKXtp''@;'; put 'put ''ZighZy50ZXN0KGIpKXt2YXIgTz17fTtyZXR1cm4gTy5wYXR0ZXJuPWIucmVwbGFjZSh2LGZ1bmN0aW9uKFMpe3N3aXRjaChTLmNoYXJBdCgwKSl7Y2FzZSJFIjpjYXNlImUiOmNhc2UiYyI6cmV0dXJuIE8ud2Vla2RheT14LndlZWtkYXlbUy5sZW5ndGgtMV0sInt3ZWVrZGF5fSI7Y2FzZSJH''@;'; put 'put ''IjpyZXR1cm4gTy5lcmE9eC5lcmFbUy5sZW5ndGgtMV0sIntlcmF9IjtjYXNlInkiOmNhc2UiWSI6Y2FzZSJ1IjpjYXNlIlUiOnJldHVybiBPLnllYXI9Mj09PVMubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsInt5ZWFyfSI7Y2FzZSJNIjpjYXNlIkwiOnJldHVybiBPLm1vbnRoPXgubW9u''@;'; put 'put ''dGhbUy5sZW5ndGgtMV0sInttb250aH0iO2Nhc2UiZCI6cmV0dXJuIE8uZGF5PTI9PT1TLmxlbmd0aD8iMi1kaWdpdCI6Im51bWVyaWMiLCJ7ZGF5fSI7Y2FzZSJhIjpyZXR1cm4ie2FtcG19IjtjYXNlImgiOmNhc2UiSCI6Y2FzZSJrIjpjYXNlIksiOnJldHVybiBPLmhvdXI9Mj09PVMubGVu''@;'; put 'put ''Z3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntob3VyfSI7Y2FzZSJtIjpyZXR1cm4gTy5taW51dGU9Mj09PVMubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsInttaW51dGV9IjtjYXNlInMiOnJldHVybiBPLnNlY29uZD0yPT09Uy5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie3NlY29u''@;'; put 'put ''ZH0iO2Nhc2UieiI6cmV0dXJuIE8udGltZVpvbmVOYW1lPVMubGVuZ3RoPDQ/InNob3J0IjoibG9uZyIsInt0aW1lWm9uZU5hbWV9In19KSxPLnBhdHRlcm49Ty5wYXR0ZXJuLnJlcGxhY2UoLycoW14nXSopJy9nLGZ1bmN0aW9uKFMsQyl7cmV0dXJuIEN8fCInIn0pLE8ucGF0dGVybi5pbmRl''@;'; put 'put ''eE9mKCJ7YW1wbX0iKT4tMSYmKE8uaG91cjEyPSEwLE8ucGF0dGVybjEyPU8ucGF0dGVybixPLnBhdHRlcm49Ty5wYXR0ZXJuLnJlcGxhY2UoInthbXBtfSIsIiIpLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKSksT319fSw4MjY5MTooYyxsLHQpPT57''@;'; put 'put ''dCgzOTExNSksdCgyMDc3NCksdCgzMDUyMiksdCg1ODI5NSksdCg4Nzg0MiksdCg1MDExMCksdCgyMDA3NSksdCgyNDMzNiksdCgxOTM3MSksdCg5ODgzNyksdCgyNjc3MyksdCgxNTc0NSksdCgzMzA1NyksdCgzNzUwKSx0KDIzMzY5KSx0KDk5NTY0KSx0KDMyZTMpLHQoNDg5NzcpLHQoNTIz''@;'; put 'put ''MTApLHQoOTQ4OTkpLHQoMzE4NDIpLHQoNTY5OTcpLHQoMjU2NDUpfSw3Njc3OihjLGwsdCk9Pnt0KDgxODIyKSx0KDE5OTc3KSx0KDkxMDMxKSx0KDQ2MzMxKSx0KDQxNTYwKSxjLmV4cG9ydHM9RGF0ZX0sODg4MTM6KGMsbCx0KT0+e3QoMzk3MzApLHQoNjA1OSksdCg0ODM3NyksdCgyNTY0''@;'; put 'put ''NSl9LDE3ODc4OihjLGwsdCk9Pnt0KDk2MjUzKSx0KDM5MTE1KSx0KDkxMTgxKSx0KDg4NDE2KSx0KDI1NjQ1KX0sMTYzNDM6KGMsbCx0KT0+e3QoNzY1MDMpLHQoNjY3ODYpLHQoNTA5MzIpLHQoNTc1MjYpLHQoMjE1OTEpLHQoOTA3MyksdCg4MDM0NyksdCgzMDU3OSksdCg0NjY5KSx0KDY3''@;'; put 'put ''NzEwKSx0KDQ1Nzg5KSx0KDMzNTE0KSx0KDk5OTc4KSx0KDU4NDcyKSx0KDg2OTQ2KSx0KDM1MDY4KSx0KDQxMyksdCgyNTY0NSl9LDYyMzE0OihjLGwsdCk9Pnt0KDExMjQ2KSx0KDMwNzI2KSx0KDE5MDEpLHQoNzU5NzIpLHQoNTM0MDMpLHQoOTI1MTYpLHQoNDkzNzEpLHQoODY0NzkpLHQo''@;'; put 'put ''OTE3MzYpLHQoNTE4ODkpLHQoNjUxNzcpLHQoODEyNDYpLHQoMjU2NDUpfSw3NzY1NzooYyxsLHQpPT57dCg5NTc2NyksdCg2ODEzMiksdCg0ODM4OCksdCgzNzQ3MCksdCg5NDg4MiksdCg0MTUyMCksdCgyNzQ3NiksdCg3OTYyMiksdCg4OTM3NSksdCg0MzUzMyksdCg4NDY3MiksdCg2NDE1''@;'; put 'put ''NyksdCgzNTA5NSksdCg0OTg5MiksdCg3NTExNSksdCg5OTE3NiksdCg2ODgzOCksdCg5NjI1MyksdCgyNTY0NSl9LDUxNzcxOihjLGwsdCk9Pnt0KDY0Mjk5KSx0KDI1NjQ1KX0sNTMxMDooYyxsLHQpPT57dCg3MTA4NCksdCgyNTY0NSl9LDQzNDk5OihjLGwsdCk9Pnt0KDIxNTcyKSx0KDgy''@;'; put 'put ''MTM5KSx0KDEwNjg1KSx0KDg1NTM1KSx0KDE3MzQ3KSx0KDgzMDQ5KSx0KDk2NjMzKSx0KDY4OTg5KSx0KDc4MjcwKSx0KDY0NTEwKSx0KDczOTg0KSx0KDc1NzY5KSx0KDUwMDU1KSx0KDk2MDE0KSx0KDI1NjQ1KX0sMjkxMzI6KGMsbCx0KT0+e3QoODM5NDYpLHQoMTgyNjkpLHQoNjYxMDgp''@;'; put 'put ''LHQoNzY3NzQpLHQoMjE0NjYpLHQoNTkzNTcpLHQoNzYxNDIpLHQoNTE4NzYpLHQoMjU2NDUpfSw1MjI5ODooYyxsLHQpPT57dCg5NjI1MyksdCgzOTExNSksdCg5MTE4MSksdCg5ODE4NCksdCgyNTY0NSl9LDM3MDQyOihjLGwsdCk9Pnt0KDUwMTkxKSx0KDk4MzA2KSx0KDY0NTY0KSx0KDM5''@;'; put 'put ''MTE1KSx0KDI5NTM5KSx0KDk2NjIwKSx0KDYyODUwKSx0KDEwODIzKSx0KDE3NzMyKSx0KDQwODU2KSx0KDgwNzAzKSx0KDkxNTM5KSx0KDUyOTIpLHQoNDUxNzcpLHQoNzM2OTQpLHQoMzc2NDgpLHQoMjc3OTUpLHQoNDUzMSksdCgyMzYwNSksdCg2NzgwKSx0KDY5OTM3KSx0KDEwNTExKSx0''@;'; put 'put ''KDIxNDY2KSx0KDU5MzU3KSx0KDc2MTQyKSx0KDUxODc2KSx0KDI1NjQ1KX0sNDI0NDooYyxsLHQpPT57dCg5NTc2NyksdCg5NjI1MyksdCgyNTY0NSl9LDY3Nzk1OihjLGwsdCk9Pnt0KDUzMzY0KSx0KDUxNDMyKSx0KDI2NTYyKSx0KDg0NDE2KSx0KDk4NjgxKSx0KDMyMjEzKSx0KDYzNDcx''@;'; put 'put ''KSx0KDQzMjkpLHQoMjUxNTkpLHQoMjU2NDUpfSwyNDk2MzpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IFR5cGVFcnJvcihsKyIgaXMgbm90IGEgZnVuY3Rpb24hIik7cmV0dXJuIGx9fSw4MzM2NTooYyxsLHQpPT57dmFyIG49dCg5MjAz''@;'; put 'put ''Mik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYiTnVtYmVyIiE9bihlKSl0aHJvdyBUeXBlRXJyb3Iocyk7cmV0dXJuK2V9fSwxNzcyMjooYyxsLHQpPT57dmFyIG49dCg4NjMxNCkoInVuc2NvcGFibGVzIiksZT1BcnJheS5wcm90b3R5cGU7bnVsbD09''@;'; put 'put ''ZVtuXSYmdCg4NzcyOCkoZSxuLHt9KSxjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7ZVtuXVtzXT0hMH19LDc2NzkzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgyNDQ5NikoITApO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMsbyl7cmV0dXJuIHMrKG8/bihlLHMpLmxlbmd0aDoxKX19LDgz''@;'; put 'put ''MzI4OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24obCx0LG4sZSl7aWYoIShsIGluc3RhbmNlb2YgdCl8fHZvaWQgMCE9PWUmJmUgaW4gbCl0aHJvdyBUeXBlRXJyb3IobisiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiKTtyZXR1cm4gbH19LDI3MDA3OihjLGwsdCk9Pnt2YXIgbj10KDU1Mjg2KTtj''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0sNTIxNjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjA1MDgpLGU9dCg5MjMzNykscz10KDEwODc1KTtjLmV4cG9ydHM9W10uY29weVdp''@;'; put 'put ''dGhpbnx8ZnVuY3Rpb24odSxmKXt2YXIgaT1uKHRoaXMpLHA9cyhpLmxlbmd0aCkseT1lKHUscCksdj1lKGYscCksZz1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCx4PU1hdGgubWluKCh2b2lkIDA9PT1nP3A6ZShnLHApKS12LHAteSksRT0xO2Zvcih2PHkmJnk8dit4''@;'; put 'put ''JiYoRT0tMSx2Kz14LTEseSs9eC0xKTt4LS0gPjA7KXYgaW4gaT9pW3ldPWlbdl06ZGVsZXRlIGlbeV0seSs9RSx2Kz1FO3JldHVybiBpfX0sNDY4NTI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDIwNTA4KSxlPXQoOTIzMzcpLHM9dCgxMDg3NSk7Yy5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHUpe2Zvcih2YXIgZj1uKHRoaXMpLGk9cyhmLmxlbmd0aCkscD1hcmd1bWVudHMubGVuZ3RoLHk9ZShwPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxpKSx2PXA+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGc9dm9pZCAwPT09dj9pOmUodixpKTtnPnk7KWZbeSsrXT11O3JldHVybiBmfX0sOTQ5MDoo''@;'; put 'put ''YyxsLHQpPT57dmFyIG49dCgzNTMxKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXt2YXIgbz1bXTtyZXR1cm4gbihlLCExLG8ucHVzaCxvLHMpLG99fSw3OTMxNTooYyxsLHQpPT57dmFyIG49dCgyMjExMCksZT10KDEwODc1KSxzPXQoOTIzMzcpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24odSxmLGkpe3ZhciBnLHA9bih1KSx5PWUocC5sZW5ndGgpLHY9cyhpLHkpO2lmKG8mJmYhPWYpe2Zvcig7eT52OylpZigoZz1wW3YrK10pIT1nKXJldHVybiEwfWVsc2UgZm9yKDt5PnY7disrKWlmKChvfHx2IGluIHApJiZwW3ZdPT09ZilyZXR1cm4gb3x8dnx8MDtyZXR1''@;'; put 'put ''cm4hbyYmLTF9fX0sMTAwNTA6KGMsbCx0KT0+e3ZhciBuPXQoNzQxKSxlPXQoNDk3OTcpLHM9dCgyMDUwOCksbz10KDEwODc1KSx1PXQoMTY4ODYpO2MuZXhwb3J0cz1mdW5jdGlvbihmLGkpe3ZhciBwPTE9PWYseT0yPT1mLHY9Mz09ZixnPTQ9PWYseD02PT1mLEU9NT09Znx8eCxqPWl8fHU7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKHcsUixGKXtmb3IodmFyIFUsWixCPXModyksYj1lKEIpLE89bihSLEYsMyksUz1vKGIubGVuZ3RoKSxDPTAsSz1wP2oodyxTKTp5P2oodywwKTp2b2lkIDA7Uz5DO0MrKylpZigoRXx8QyBpbiBiKSYmKFo9TyhVPWJbQ10sQyxCKSxmKSlpZihwKUtbQ109WjtlbHNl''@;'; put 'put ''IGlmKFopc3dpdGNoKGYpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIFU7Y2FzZSA2OnJldHVybiBDO2Nhc2UgMjpLLnB1c2goVSl9ZWxzZSBpZihnKXJldHVybiExO3JldHVybiB4Py0xOnZ8fGc/ZzpLfX19LDM3NjI4OihjLGwsdCk9Pnt2YXIgbj10KDI0OTYzKSxlPXQoMjA1MDgp''@;'; put 'put ''LHM9dCg0OTc5Nyksbz10KDEwODc1KTtjLmV4cG9ydHM9ZnVuY3Rpb24odSxmLGkscCx5KXtuKGYpO3ZhciB2PWUodSksZz1zKHYpLHg9byh2Lmxlbmd0aCksRT15P3gtMTowLGo9eT8tMToxO2lmKGk8Milmb3IoOzspe2lmKEUgaW4gZyl7cD1nW0VdLEUrPWo7YnJlYWt9aWYoRSs9aix5P0U8''@;'; put 'put ''MDp4PD1FKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpfWZvcig7eT9FPj0wOng+RTtFKz1qKUUgaW4gZyYmKHA9ZihwLGdbRV0sRSx2KSk7cmV0dXJuIHB9fSw0MjczNjooYyxsLHQpPT57dmFyIG49dCg1NTI4NiksZT10KDQz''@;'; put 'put ''MDIpLHM9dCg4NjMxNCkoInNwZWNpZXMiKTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7dmFyIHU7cmV0dXJuIGUobykmJigiZnVuY3Rpb24iPT10eXBlb2YodT1vLmNvbnN0cnVjdG9yKSYmKHU9PT1BcnJheXx8ZSh1LnByb3RvdHlwZSkpJiYodT12b2lkIDApLG4odSkmJm51bGw9PT0odT11W3Nd''@;'; put 'put ''KSYmKHU9dm9pZCAwKSksdm9pZCAwPT09dT9BcnJheTp1fX0sMTY4ODY6KGMsbCx0KT0+e3ZhciBuPXQoNDI3MzYpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe3JldHVybiBuZXcobihlKSkocyl9fSwzNDM5ODooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjQ5NjMpLGU9dCg1NTI4''@;'; put 'put ''Nikscz10KDk3MjQyKSxvPVtdLnNsaWNlLHU9e307Yy5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uKHApe3ZhciB5PW4odGhpcyksdj1vLmNhbGwoYXJndW1lbnRzLDEpLGc9ZnVuY3Rpb24oKXt2YXIgeD12LmNvbmNhdChvLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5z''@;'; put 'put ''dGFuY2VvZiBnP2Z1bmN0aW9uKGkscCx5KXtpZighKHAgaW4gdSkpe2Zvcih2YXIgdj1bXSxnPTA7ZzxwO2crKyl2W2ddPSJhWyIrZysiXSI7dVtwXT1GdW5jdGlvbigiRixhIiwicmV0dXJuIG5ldyBGKCIrdi5qb2luKCIsIikrIikiKX1yZXR1cm4gdVtwXShpLHkpfSh5LHgubGVuZ3RoLHgp''@;'; put 'put ''OnMoeSx4LHApfTtyZXR1cm4gZSh5LnByb3RvdHlwZSkmJihnLnByb3RvdHlwZT15LnByb3RvdHlwZSksZ319LDQxNDg4OihjLGwsdCk9Pnt2YXIgbj10KDkyMDMyKSxlPXQoODYzMTQpKCJ0b1N0cmluZ1RhZyIpLHM9IkFyZ3VtZW50cyI9PW4oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRz''@;'; put 'put ''fSgpKTtjLmV4cG9ydHM9ZnVuY3Rpb24odSl7dmFyIGYsaSxwO3JldHVybiB2b2lkIDA9PT11PyJVbmRlZmluZWQiOm51bGw9PT11PyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKGk9ZnVuY3Rpb24odSxmKXt0cnl7cmV0dXJuIHVbZl19Y2F0Y2h7fX0oZj1PYmplY3QodSksZSkpP2k6cz9uKGYp''@;'; put 'put ''OiJPYmplY3QiPT0ocD1uKGYpKSYmImZ1bmN0aW9uIj09dHlwZW9mIGYuY2FsbGVlPyJBcmd1bWVudHMiOnB9fSw5MjAzMjpjPT57dmFyIGw9e30udG9TdHJpbmc7Yy5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwodCkuc2xpY2UoOCwtMSl9fSw5ODI0OihjLGwsdCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIG49dCg5OTI3NSkuZixlPXQoNDI1MDMpLHM9dCgyNDQwOCksbz10KDc0MSksdT10KDgzMzI4KSxmPXQoMzUzMSksaT10KDQyOTIzKSxwPXQoMTU0MzYpLHk9dCgyOTc0KSx2PXQoNjcwNTcpLGc9dCg4NDcyOCkuZmFzdEtleSx4PXQoMTYxNiksRT12PyJfcyI6InNpemUi''@;'; put 'put ''LGo9ZnVuY3Rpb24odyxSKXt2YXIgQixGPWcoUik7aWYoIkYiIT09RilyZXR1cm4gdy5faVtGXTtmb3IoQj13Ll9mO0I7Qj1CLm4paWYoQi5rPT1SKXJldHVybiBCfTtjLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHcsUixGLEIpe3ZhciBiPXcoZnVuY3Rpb24oTyxTKXt1KE8s''@;'; put 'put ''YixSLCJfaSIpLE8uX3Q9UixPLl9pPWUobnVsbCksTy5fZj12b2lkIDAsTy5fbD12b2lkIDAsT1tFXT0wLG51bGwhPVMmJmYoUyxGLE9bQl0sTyl9KTtyZXR1cm4gcyhiLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIFM9eCh0aGlzLFIpLEM9Uy5faSxLPVMuX2Y7SztLPUsu''@;'; put 'put ''bilLLnI9ITAsSy5wJiYoSy5wPUsucC5uPXZvaWQgMCksZGVsZXRlIENbSy5pXTtTLl9mPVMuX2w9dm9pZCAwLFNbRV09MH0sZGVsZXRlOmZ1bmN0aW9uKE8pe3ZhciBTPXgodGhpcyxSKSxDPWooUyxPKTtpZihDKXt2YXIgSz1DLm4sVT1DLnA7ZGVsZXRlIFMuX2lbQy5pXSxDLnI9ITAsVSYm''@;'; put 'put ''KFUubj1LKSxLJiYoSy5wPVUpLFMuX2Y9PUMmJihTLl9mPUspLFMuX2w9PUMmJihTLl9sPVUpLFNbRV0tLX1yZXR1cm4hIUN9LGZvckVhY2g6ZnVuY3Rpb24oUyl7eCh0aGlzLFIpO2Zvcih2YXIgSyxDPW8oUyxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtLPUs/''@;'; put 'put ''Sy5uOnRoaXMuX2Y7KWZvcihDKEsudixLLmssdGhpcyk7SyYmSy5yOylLPUsucH0saGFzOmZ1bmN0aW9uKFMpe3JldHVybiEhaih4KHRoaXMsUiksUyl9fSksdiYmbihiLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB4KHRoaXMsUilbRV19fSksYn0sZGVmOmZ1bmN0''@;'; put 'put ''aW9uKHcsUixGKXt2YXIgYixPLEI9aih3LFIpO3JldHVybiBCP0Iudj1GOih3Ll9sPUI9e2k6Tz1nKFIsITApLGs6Uix2OkYscDpiPXcuX2wsbjp2b2lkIDAscjohMX0sdy5fZnx8KHcuX2Y9QiksYiYmKGIubj1CKSx3W0VdKyssIkYiIT09TyYmKHcuX2lbT109QikpLHd9LGdldEVudHJ5Omos''@;'; put 'put ''c2V0U3Ryb25nOmZ1bmN0aW9uKHcsUixGKXtpKHcsUixmdW5jdGlvbihCLGIpe3RoaXMuX3Q9eChCLFIpLHRoaXMuX2s9Yix0aGlzLl9sPXZvaWQgMH0sZnVuY3Rpb24oKXtmb3IodmFyIEI9dGhpcyxiPUIuX2ssTz1CLl9sO08mJk8ucjspTz1PLnA7cmV0dXJuIEIuX3QmJihCLl9sPU89Tz9P''@;'; put 'put ''Lm46Qi5fdC5fZik/cCgwLCJrZXlzIj09Yj9PLms6InZhbHVlcyI9PWI/Ty52OltPLmssTy52XSk6KEIuX3Q9dm9pZCAwLHAoMSkpfSxGPyJlbnRyaWVzIjoidmFsdWVzIiwhRiwhMCkseShSKX19fSwyMzY1NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjQ0MDgpLGU9dCg4NDcy''@;'; put 'put ''OCkuZ2V0V2VhayxzPXQoMjcwMDcpLG89dCg1NTI4NiksdT10KDgzMzI4KSxmPXQoMzUzMSksaT10KDEwMDUwKSxwPXQoNzkxODEpLHk9dCgxNjE2KSx2PWkoNSksZz1pKDYpLHg9MCxFPWZ1bmN0aW9uKFIpe3JldHVybiBSLl9sfHwoUi5fbD1uZXcgail9LGo9ZnVuY3Rpb24oKXt0aGlzLmE9''@;'; put 'put ''W119LHc9ZnVuY3Rpb24oUixGKXtyZXR1cm4gdihSLmEsZnVuY3Rpb24oQil7cmV0dXJuIEJbMF09PT1GfSl9O2oucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oUil7dmFyIEY9dyh0aGlzLFIpO2lmKEYpcmV0dXJuIEZbMV19LGhhczpmdW5jdGlvbihSKXtyZXR1cm4hIXcodGhpcyxSKX0sc2V0''@;'; put 'put ''OmZ1bmN0aW9uKFIsRil7dmFyIEI9dyh0aGlzLFIpO0I/QlsxXT1GOnRoaXMuYS5wdXNoKFtSLEZdKX0sZGVsZXRlOmZ1bmN0aW9uKFIpe3ZhciBGPWcodGhpcy5hLGZ1bmN0aW9uKEIpe3JldHVybiBCWzBdPT09Un0pO3JldHVybn5GJiZ0aGlzLmEuc3BsaWNlKEYsMSksISF+Rn19LGMuZXhw''@;'; put 'put ''b3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oUixGLEIsYil7dmFyIE89UihmdW5jdGlvbihTLEMpe3UoUyxPLEYsIl9pIiksUy5fdD1GLFMuX2k9eCsrLFMuX2w9dm9pZCAwLG51bGwhPUMmJmYoQyxCLFNbYl0sUyl9KTtyZXR1cm4gbihPLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9u''@;'; put 'put ''KFMpe2lmKCFvKFMpKXJldHVybiExO3ZhciBDPWUoUyk7cmV0dXJuITA9PT1DP0UoeSh0aGlzLEYpKS5kZWxldGUoUyk6QyYmcChDLHRoaXMuX2kpJiZkZWxldGUgQ1t0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKEMpe2lmKCFvKEMpKXJldHVybiExO3ZhciBLPWUoQyk7cmV0dXJuITA9PT1LP0Uo''@;'; put 'put ''eSh0aGlzLEYpKS5oYXMoQyk6SyYmcChLLHRoaXMuX2kpfX0pLE99LGRlZjpmdW5jdGlvbihSLEYsQil7dmFyIGI9ZShzKEYpLCEwKTtyZXR1cm4hMD09PWI/RShSKS5zZXQoRixCKTpiW1IuX2ldPUIsUn0sdWZzdG9yZTpFfX0sNDU3OTU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10''@;'; put 'put ''KDM4MTYpLGU9dCg0Mjk4NSkscz10KDc3MjM0KSxvPXQoMjQ0MDgpLHU9dCg4NDcyOCksZj10KDM1MzEpLGk9dCg4MzMyOCkscD10KDU1Mjg2KSx5PXQoNzQyNTMpLHY9dCg3NDYyKSxnPXQoMjI5NDMpLHg9dCg0MDI2Nik7Yy5leHBvcnRzPWZ1bmN0aW9uKEUsaix3LFIsRixCKXt2YXIgYj1u''@;'; put 'put ''W0VdLE89YixTPUY/InNldCI6ImFkZCIsQz1PJiZPLnByb3RvdHlwZSxLPXt9LFU9ZnVuY3Rpb24oWCl7dmFyIFY9Q1tYXTtzKEMsWCwiZGVsZXRlIj09WD9mdW5jdGlvbihRKXtyZXR1cm4hKEImJiFwKFEpKSYmVi5jYWxsKHRoaXMsMD09PVE/MDpRKX06ImhhcyI9PVg/ZnVuY3Rpb24oWSl7''@;'; put 'put ''cmV0dXJuIShCJiYhcChZKSkmJlYuY2FsbCh0aGlzLDA9PT1ZPzA6WSl9OiJnZXQiPT1YP2Z1bmN0aW9uKFkpe3JldHVybiBCJiYhcChZKT92b2lkIDA6Vi5jYWxsKHRoaXMsMD09PVk/MDpZKX06ImFkZCI9PVg/ZnVuY3Rpb24oWSl7cmV0dXJuIFYuY2FsbCh0aGlzLDA9PT1ZPzA6WSksdGhp''@;'; put 'put ''c306ZnVuY3Rpb24oWSxmdCl7cmV0dXJuIFYuY2FsbCh0aGlzLDA9PT1ZPzA6WSxmdCksdGhpc30pfTtpZigiZnVuY3Rpb24iPT10eXBlb2YgTyYmKEJ8fEMuZm9yRWFjaCYmIXkoZnVuY3Rpb24oKXsobmV3IE8pLmVudHJpZXMoKS5uZXh0KCl9KSkpe3ZhciBaPW5ldyBPLHR0PVpbU10oQj97''@;'; put 'put ''fTotMCwxKSE9WixfPXkoZnVuY3Rpb24oKXtaLmhhcygxKX0pLG50PXYoZnVuY3Rpb24oWCl7bmV3IE8oWCl9KSxzdD0hQiYmeShmdW5jdGlvbigpe2Zvcih2YXIgWD1uZXcgTyxWPTU7Vi0tOylYW1NdKFYsVik7cmV0dXJuIVguaGFzKC0wKX0pO250fHwoKE89aihmdW5jdGlvbihYLFYpe2ko''@;'; put 'put ''WCxPLEUpO3ZhciBRPXgobmV3IGIsWCxPKTtyZXR1cm4gbnVsbCE9ViYmZihWLEYsUVtTXSxRKSxRfSkpLnByb3RvdHlwZT1DLEMuY29uc3RydWN0b3I9TyksKF98fHN0KSYmKFUoImRlbGV0ZSIpLFUoImhhcyIpLEYmJlUoImdldCIpKSwoc3R8fHR0KSYmVShTKSxCJiZDLmNsZWFyJiZkZWxl''@;'; put 'put ''dGUgQy5jbGVhcn1lbHNlIE89Ui5nZXRDb25zdHJ1Y3RvcihqLEUsRixTKSxvKE8ucHJvdG90eXBlLHcpLHUuTkVFRD0hMDtyZXR1cm4gZyhPLEUpLEtbRV09TyxlKGUuRytlLlcrZS5GKihPIT1iKSxLKSxCfHxSLnNldFN0cm9uZyhPLEUsRiksT319LDI1NjQ1OmM9Pnt2YXIgbD1jLmV4cG9y''@;'; put 'put ''dHM9e3ZlcnNpb246IjIuNi4xMiJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPWwpfSw5MjgxMTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTkyNzUpLGU9dCg5MDY4MSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsbyx1KXtvIGluIHM/bi5mKHMsbyxlKDAsdSkpOnNbb109dX19''@;'; put 'put ''LDc0MTooYyxsLHQpPT57dmFyIG49dCgyNDk2Myk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxvKXtpZihuKGUpLHZvaWQgMD09PXMpcmV0dXJuIGU7c3dpdGNoKG8pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGUuY2FsbChzLHUpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHUs''@;'; put 'put ''Zil7cmV0dXJuIGUuY2FsbChzLHUsZil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24odSxmLGkpe3JldHVybiBlLmNhbGwocyx1LGYsaSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHMsYXJndW1lbnRzKX19fSw1MzUzNzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQo''@;'; put 'put ''NzQyNTMpLGU9RGF0ZS5wcm90b3R5cGUuZ2V0VGltZSxzPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nLG89ZnVuY3Rpb24odSl7cmV0dXJuIHU+OT91OiIwIit1fTtjLmV4cG9ydHM9bihmdW5jdGlvbigpe3JldHVybiIwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVoiIT1zLmNhbGwobmV3IERh''@;'; put 'put ''dGUoLTUwMDAwMDAwMDAwMDAxKSl9KXx8IW4oZnVuY3Rpb24oKXtzLmNhbGwobmV3IERhdGUoTmFOKSl9KT9mdW5jdGlvbigpe2lmKCFpc0Zpbml0ZShlLmNhbGwodGhpcykpKXRocm93IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO3ZhciBmPXRoaXMsaT1mLmdldFVUQ0Z1bGxZ''@;'; put 'put ''ZWFyKCkscD1mLmdldFVUQ01pbGxpc2Vjb25kcygpLHk9aTwwPyItIjppPjk5OTk/IisiOiIiO3JldHVybiB5KygiMDAwMDAiK01hdGguYWJzKGkpKS5zbGljZSh5Py02Oi00KSsiLSIrbyhmLmdldFVUQ01vbnRoKCkrMSkrIi0iK28oZi5nZXRVVENEYXRlKCkpKyJUIitvKGYuZ2V0VVRDSG91''@;'; put 'put ''cnMoKSkrIjoiK28oZi5nZXRVVENNaW51dGVzKCkpKyI6IitvKGYuZ2V0VVRDU2Vjb25kcygpKSsiLiIrKHA+OTk/cDoiMCIrbyhwKSkrIloifTpzfSw4NzA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDI3MDA3KSxlPXQoMjE2ODkpLHM9Im51bWJlciI7Yy5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKG8pe2lmKCJzdHJpbmciIT09byYmbyE9PXMmJiJkZWZhdWx0IiE9PW8pdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaGludCIpO3JldHVybiBlKG4odGhpcyksbyE9cyl9fSw5MTM1NTpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwpe2lmKG51bGw9PWwpdGhyb3cgVHlwZUVycm9yKCJD''@;'; put 'put ''YW4ndCBjYWxsIG1ldGhvZCBvbiAgIitsKTtyZXR1cm4gbH19LDY3MDU3OihjLGwsdCk9PntjLmV4cG9ydHM9IXQoNzQyNTMpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sNjI0NTc6KGMs''@;'; put 'put ''bCx0KT0+e3ZhciBuPXQoNTUyODYpLGU9dCgzODE2KS5kb2N1bWVudCxzPW4oZSkmJm4oZS5jcmVhdGVFbGVtZW50KTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7cmV0dXJuIHM/ZS5jcmVhdGVFbGVtZW50KG8pOnt9fX0sNzQ0MzA6Yz0+e2MuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJv''@;'; put 'put ''cGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSw1NTQxOihjLGwsdCk9Pnt2YXIgbj10KDQ3MTg0KSxlPXQoNjQ1NDgpLHM9dCgxNDY4Mik7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3ZhciB1''@;'; put 'put ''PW4obyksZj1lLmY7aWYoZilmb3IodmFyIHYsaT1mKG8pLHA9cy5mLHk9MDtpLmxlbmd0aD55OylwLmNhbGwobyx2PWlbeSsrXSkmJnUucHVzaCh2KTtyZXR1cm4gdX19LDQyOTg1OihjLGwsdCk9Pnt2YXIgbj10KDM4MTYpLGU9dCgyNTY0NSkscz10KDg3NzI4KSxvPXQoNzcyMzQpLHU9dCg3''@;'; put 'put ''NDEpLGY9InByb3RvdHlwZSIsaT1mdW5jdGlvbihwLHksdil7dmFyIGIsTyxTLEMsZz1wJmkuRix4PXAmaS5HLGo9cCZpLlAsdz1wJmkuQixSPXg/bjpwJmkuUz9uW3ldfHwoblt5XT17fSk6KG5beV18fHt9KVtmXSxGPXg/ZTplW3ldfHwoZVt5XT17fSksQj1GW2ZdfHwoRltmXT17fSk7Zm9y''@;'; put 'put ''KGIgaW4geCYmKHY9eSksdilTPSgoTz0hZyYmUiYmdm9pZCAwIT09UltiXSk/Ujp2KVtiXSxDPXcmJk8/dShTLG4pOmomJiJmdW5jdGlvbiI9PXR5cGVvZiBTP3UoRnVuY3Rpb24uY2FsbCxTKTpTLFImJm8oUixiLFMscCZpLlUpLEZbYl0hPVMmJnMoRixiLEMpLGomJkJbYl0hPVMmJihCW2Jd''@;'; put 'put ''PVMpfTtuLmNvcmU9ZSxpLkY9MSxpLkc9MixpLlM9NCxpLlA9OCxpLkI9MTYsaS5XPTMyLGkuVT02NCxpLlI9MTI4LGMuZXhwb3J0cz1pfSw4ODUyOihjLGwsdCk9Pnt2YXIgbj10KDg2MzE0KSgibWF0Y2giKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHM9Ly4vO3RyeXsiLy4vIltlXShz''@;'; put 'put ''KX1jYXRjaHt0cnl7cmV0dXJuIHNbbl09ITEsISIvLi8iW2VdKHMpfWNhdGNoe319cmV0dXJuITB9fSw3NDI1MzpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwpe3RyeXtyZXR1cm4hIWwoKX1jYXRjaHtyZXR1cm4hMH19fSwyODA4MjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoMTgyNjkpO3Zh''@;'; put 'put ''ciBuPXQoNzcyMzQpLGU9dCg4NzcyOCkscz10KDc0MjUzKSxvPXQoOTEzNTUpLHU9dCg4NjMxNCksZj10KDIxMTY1KSxpPXUoInNwZWNpZXMiKSxwPSFzKGZ1bmN0aW9uKCl7dmFyIHY9Ly4vO3JldHVybiB2LmV4ZWM9ZnVuY3Rpb24oKXt2YXIgZz1bXTtyZXR1cm4gZy5ncm91cHM9e2E6Ijci''@;'; put 'put ''fSxnfSwiNyIhPT0iIi5yZXBsYWNlKHYsIiQ8YT4iKX0pLHk9ZnVuY3Rpb24oKXt2YXIgdj0vKD86KS8sZz12LmV4ZWM7di5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgeD0iYWIiLnNwbGl0KHYpO3JldHVybiAyPT09eC5sZW5ndGgmJiJhIj09''@;'; put 'put ''PXhbMF0mJiJiIj09PXhbMV19KCk7Yy5leHBvcnRzPWZ1bmN0aW9uKHYsZyx4KXt2YXIgRT11KHYpLGo9IXMoZnVuY3Rpb24oKXt2YXIgTz17fTtyZXR1cm4gT1tFXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT0iIlt2XShPKX0pLHc9aj8hcyhmdW5jdGlvbigpe3ZhciBPPSExLFM9L2EvO3Jl''@;'; put 'put ''dHVybiBTLmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gTz0hMCxudWxsfSwic3BsaXQiPT09diYmKFMuY29uc3RydWN0b3I9e30sUy5jb25zdHJ1Y3RvcltpXT1mdW5jdGlvbigpe3JldHVybiBTfSksU1tFXSgiIiksIU99KTp2b2lkIDA7aWYoIWp8fCF3fHwicmVwbGFjZSI9PT12JiYhcHx8InNw''@;'; put 'put ''bGl0Ij09PXYmJiF5KXt2YXIgUj0vLi9bRV0sRj14KG8sRSwiIlt2XSxmdW5jdGlvbihTLEMsSyxVLFope3JldHVybiBDLmV4ZWM9PT1mP2omJiFaP3tkb25lOiEwLHZhbHVlOlIuY2FsbChDLEssVSl9Ontkb25lOiEwLHZhbHVlOlMuY2FsbChLLEMsVSl9Ontkb25lOiExfX0pLGI9RlsxXTtu''@;'; put 'put ''KFN0cmluZy5wcm90b3R5cGUsdixGWzBdKSxlKFJlZ0V4cC5wcm90b3R5cGUsRSwyPT1nP2Z1bmN0aW9uKE8sUyl7cmV0dXJuIGIuY2FsbChPLHRoaXMsUyl9OmZ1bmN0aW9uKE8pe3JldHVybiBiLmNhbGwoTyx0aGlzKX0pfX19LDUzMjE4OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49''@;'; put 'put ''dCgyNzAwNyk7Yy5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9bih0aGlzKSxzPSIiO3JldHVybiBlLmdsb2JhbCYmKHMrPSJnIiksZS5pZ25vcmVDYXNlJiYocys9ImkiKSxlLm11bHRpbGluZSYmKHMrPSJtIiksZS51bmljb2RlJiYocys9InUiKSxlLnN0aWNreSYmKHMrPSJ5Iiksc319LDM1''@;'; put 'put ''MzE6KGMsbCx0KT0+e3ZhciBuPXQoNzQxKSxlPXQoMjg4NTEpLHM9dCg4NjU1NSksbz10KDI3MDA3KSx1PXQoMTA4NzUpLGY9dCg2OTAwMiksaT17fSxwPXt9LHk9Yy5leHBvcnRzPWZ1bmN0aW9uKHYsZyx4LEUsail7dmFyIEIsYixPLFMsdz1qP2Z1bmN0aW9uKCl7cmV0dXJuIHZ9OmYodiks''@;'; put 'put ''Uj1uKHgsRSxnPzI6MSksRj0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB3KXRocm93IFR5cGVFcnJvcih2KyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKHModykpe2ZvcihCPXUodi5sZW5ndGgpO0I+RjtGKyspaWYoKFM9Zz9SKG8oYj12W0ZdKVswXSxiWzFdKTpSKHZbRl0pKT09PWl8fFM9PT1w''@;'; put 'put ''KXJldHVybiBTfWVsc2UgZm9yKE89dy5jYWxsKHYpOyEoYj1PLm5leHQoKSkuZG9uZTspaWYoKFM9ZShPLFIsYi52YWx1ZSxnKSk9PT1pfHxTPT09cClyZXR1cm4gU307eS5CUkVBSz1pLHkuUkVUVVJOPXB9LDQwMDE4OihjLGwsdCk9PntjLmV4cG9ydHM9dCgzODI1KSgibmF0aXZlLWZ1bmN0''@;'; put 'put ''aW9uLXRvLXN0cmluZyIsRnVuY3Rpb24udG9TdHJpbmcpfSwzODE2OmM9Pnt2YXIgbD1jLmV4cG9ydHM9dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSImJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIp''@;'; put 'put ''KCk7Im51bWJlciI9PXR5cGVvZiBfX2cmJihfX2c9bCl9LDc5MTgxOmM9Pnt2YXIgbD17fS5oYXNPd25Qcm9wZXJ0eTtjLmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbC5jYWxsKHQsbil9fSw4NzcyODooYyxsLHQpPT57dmFyIG49dCg5OTI3NSksZT10KDkwNjgxKTtjLmV4cG9ydHM9''@;'; put 'put ''dCg2NzA1Nyk/ZnVuY3Rpb24ocyxvLHUpe3JldHVybiBuLmYocyxvLGUoMSx1KSl9OmZ1bmN0aW9uKHMsbyx1KXtyZXR1cm4gc1tvXT11LHN9fSw0MDYzOTooYyxsLHQpPT57dmFyIG49dCgzODE2KS5kb2N1bWVudDtjLmV4cG9ydHM9biYmbi5kb2N1bWVudEVsZW1lbnR9LDE3MzQ6KGMsbCx0''@;'; put 'put ''KT0+e2MuZXhwb3J0cz0hdCg2NzA1NykmJiF0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkodCg2MjQ1NykoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSw0MDI2NjooYyxsLHQpPT57dmFyIG49dCg1NTI4NiksZT10''@;'; put 'put ''KDI3Mzc1KS5zZXQ7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsbyx1KXt2YXIgaSxmPW8uY29uc3RydWN0b3I7cmV0dXJuIGYhPT11JiYiZnVuY3Rpb24iPT10eXBlb2YgZiYmKGk9Zi5wcm90b3R5cGUpIT09dS5wcm90b3R5cGUmJm4oaSkmJmUmJmUocyxpKSxzfX0sOTcyNDI6Yz0+e2MuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihsLHQsbil7dmFyIGU9dm9pZCAwPT09bjtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZT9sKCk6bC5jYWxsKG4pO2Nhc2UgMTpyZXR1cm4gZT9sKHRbMF0pOmwuY2FsbChuLHRbMF0pO2Nhc2UgMjpyZXR1cm4gZT9sKHRbMF0sdFsxXSk6bC5jYWxsKG4sdFswXSx0''@;'; put 'put ''WzFdKTtjYXNlIDM6cmV0dXJuIGU/bCh0WzBdLHRbMV0sdFsyXSk6bC5jYWxsKG4sdFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gZT9sKHRbMF0sdFsxXSx0WzJdLHRbM10pOmwuY2FsbChuLHRbMF0sdFsxXSx0WzJdLHRbM10pfXJldHVybiBsLmFwcGx5KG4sdCl9fSw0OTc5NzooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg5MjAzMik7Yy5leHBvcnRzPU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09bihlKT9lLnNwbGl0KCIiKTpPYmplY3QoZSl9fSw4NjU1NTooYyxsLHQpPT57dmFyIG49dCg4NzIzNCksZT10''@;'; put 'put ''KDg2MzE0KSgiaXRlcmF0b3IiKSxzPUFycmF5LnByb3RvdHlwZTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7cmV0dXJuIHZvaWQgMCE9PW8mJihuLkFycmF5PT09b3x8c1tlXT09PW8pfX0sNDMwMjooYyxsLHQpPT57dmFyIG49dCg5MjAzMik7Yy5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0''@;'; put 'put ''aW9uKHMpe3JldHVybiJBcnJheSI9PW4ocyl9fSwxODM2NzooYyxsLHQpPT57dmFyIG49dCg1NTI4NiksZT1NYXRoLmZsb29yO2MuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1cm4hbihvKSYmaXNGaW5pdGUobykmJmUobyk9PT1vfX0sNTUyODY6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsKXty''@;'; put 'put ''ZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGw/bnVsbCE9PWw6ImZ1bmN0aW9uIj09dHlwZW9mIGx9fSw1NTM2NDooYyxsLHQpPT57dmFyIG49dCg1NTI4NiksZT10KDkyMDMyKSxzPXQoODYzMTQpKCJtYXRjaCIpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXt2YXIgdTtyZXR1cm4gbihvKSYmKHZvaWQg''@;'; put 'put ''MCE9PSh1PW9bc10pPyEhdToiUmVnRXhwIj09ZShvKSl9fSwyODg1MTooYyxsLHQpPT57dmFyIG49dCgyNzAwNyk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxvLHUpe3RyeXtyZXR1cm4gdT9zKG4obylbMF0sb1sxXSk6cyhvKX1jYXRjaChpKXt2YXIgZj1lLnJldHVybjt0aHJvdyB2b2lkIDAh''@;'; put 'put ''PT1mJiZuKGYuY2FsbChlKSksaX19fSw0OTk4ODooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI1MDMpLGU9dCg5MDY4MSkscz10KDIyOTQzKSxvPXt9O3QoODc3MjgpKG8sdCg4NjMxNCkoIml0ZXJhdG9yIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGMuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbih1LGYsaSl7dS5wcm90b3R5cGU9bihvLHtuZXh0OmUoMSxpKX0pLHModSxmKyIgSXRlcmF0b3IiKX19LDQyOTIzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0NDYxKSxlPXQoNDI5ODUpLHM9dCg3NzIzNCksbz10KDg3NzI4KSx1PXQoODcyMzQpLGY9dCg0OTk4OCksaT10''@;'; put 'put ''KDIyOTQzKSxwPXQoNDY4KSx5PXQoODYzMTQpKCJpdGVyYXRvciIpLHY9IShbXS5rZXlzJiYibmV4dCJpbltdLmtleXMoKSkseD0ia2V5cyIsRT0idmFsdWVzIixqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2MuZXhwb3J0cz1mdW5jdGlvbih3LFIsRixCLGIsTyxTKXtmKEYsUixCKTt2YXIg''@;'; put 'put ''VixRLFksQz1mdW5jdGlvbihmdCl7aWYoIXYmJmZ0IGluIHR0KXJldHVybiB0dFtmdF07c3dpdGNoKGZ0KXtjYXNlIHg6Y2FzZSBFOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgRih0aGlzLGZ0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGKHRoaXMsZnQpfX0sSz1SKyIg''@;'; put 'put ''SXRlcmF0b3IiLFU9Yj09RSxaPSExLHR0PXcucHJvdG90eXBlLF89dHRbeV18fHR0WyJAQGl0ZXJhdG9yIl18fGImJnR0W2JdLG50PV98fEMoYiksc3Q9Yj9VP0MoImVudHJpZXMiKTpudDp2b2lkIDAsWD0iQXJyYXkiPT1SJiZ0dC5lbnRyaWVzfHxfO2lmKFgmJihZPXAoWC5jYWxsKG5ldyB3''@;'; put 'put ''KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmWS5uZXh0JiYoaShZLEssITApLCFuJiYiZnVuY3Rpb24iIT10eXBlb2YgWVt5XSYmbyhZLHksaikpLFUmJl8mJl8ubmFtZSE9PUUmJihaPSEwLG50PWZ1bmN0aW9uKCl7cmV0dXJuIF8uY2FsbCh0aGlzKX0pLCghbnx8UykmJih2fHxafHwhdHRbeV0p''@;'; put 'put ''JiZvKHR0LHksbnQpLHVbUl09bnQsdVtLXT1qLGIpaWYoVj17dmFsdWVzOlU/bnQ6QyhFKSxrZXlzOk8/bnQ6Qyh4KSxlbnRyaWVzOnN0fSxTKWZvcihRIGluIFYpUSBpbiB0dHx8cyh0dCxRLFZbUV0pO2Vsc2UgZShlLlArZS5GKih2fHxaKSxSLFYpO3JldHVybiBWfX0sNzQ2MjooYyxsLHQp''@;'; put 'put ''PT57dmFyIG49dCg4NjMxNCkoIml0ZXJhdG9yIiksZT0hMTt0cnl7dmFyIHM9WzddW25dKCk7cy5yZXR1cm49ZnVuY3Rpb24oKXtlPSEwfSxBcnJheS5mcm9tKHMsZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2h7fWMuZXhwb3J0cz1mdW5jdGlvbihvLHUpe2lmKCF1JiYhZSlyZXR1cm4hMTt2''@;'; put 'put ''YXIgZj0hMTt0cnl7dmFyIGk9WzddLHA9aVtuXSgpO3AubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOmY9ITB9fSxpW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHB9LG8oaSl9Y2F0Y2h7fXJldHVybiBmfX0sMTU0MzY6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsLHQpe3JldHVybnt2YWx1ZTp0''@;'; put 'put ''LGRvbmU6ISFsfX19LDg3MjM0OmM9PntjLmV4cG9ydHM9e319LDQ0NjE6Yz0+e2MuZXhwb3J0cz0hMX0sMTMwODY6Yz0+e3ZhciBsPU1hdGguZXhwbTE7Yy5leHBvcnRzPSFsfHxsKDEwKT4yMjAyNS40NjU3OTQ4MDY3MTh8fGwoMTApPDIyMDI1LjQ2NTc5NDgwNjcxOHx8LTJlLTE3IT1sKC0y''@;'; put 'put ''ZS0xNyk/ZnVuY3Rpb24obil7cmV0dXJuIDA9PShuPStuKT9uOm4+LTFlLTYmJm48MWUtNj9uK24qbi8yOk1hdGguZXhwKG4pLTF9Omx9LDM0OTM0OihjLGwsdCk9Pnt2YXIgbj10KDYxODAxKSxlPU1hdGgucG93LHM9ZSgyLC01Miksbz1lKDIsLTIzKSx1PWUoMiwxMjcpKigyLW8pLGY9ZSgy''@;'; put 'put ''LC0xMjYpO2MuZXhwb3J0cz1NYXRoLmZyb3VuZHx8ZnVuY3Rpb24oeSl7dmFyIHgsRSx2PU1hdGguYWJzKHkpLGc9bih5KTtyZXR1cm4gdjxmP2cqKHYvZi9vKzEvcy0xL3MpKmYqbzooRT0oeD0oMStvL3MpKnYpLSh4LXYpKT51fHxFIT1FP2cqKDEvMCk6ZypFfX0sNDYyMDY6Yz0+e2MuZXhw''@;'; put 'put ''b3J0cz1NYXRoLmxvZzFwfHxmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk+LTFlLTgmJnQ8MWUtOD90LXQqdC8yOk1hdGgubG9nKDErdCl9fSw2MTgwMTpjPT57Yy5leHBvcnRzPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KXx8dCE9dD90OnQ8MD8tMToxfX0sODQ3Mjg6''@;'; put 'put ''KGMsbCx0KT0+e3ZhciBuPXQoOTM5NTMpKCJtZXRhIiksZT10KDU1Mjg2KSxzPXQoNzkxODEpLG89dCg5OTI3NSkuZix1PTAsZj1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxpPSF0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybiBmKE9iamVjdC5wcmV2ZW50RXh0''@;'; put 'put ''ZW5zaW9ucyh7fSkpfSkscD1mdW5jdGlvbihFKXtvKEUsbix7dmFsdWU6e2k6Ik8iKyArK3Usdzp7fX19KX0seD1jLmV4cG9ydHM9e0tFWTpuLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbihFLGope2lmKCFlKEUpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgRT9FOigic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IEU/IlMiOiJQIikrRTtpZighcyhFLG4pKXtpZighZihFKSlyZXR1cm4iRiI7aWYoIWopcmV0dXJuIkUiO3AoRSl9cmV0dXJuIEVbbl0uaX0sZ2V0V2VhazpmdW5jdGlvbihFLGope2lmKCFzKEUsbikpe2lmKCFmKEUpKXJldHVybiEwO2lmKCFqKXJldHVybiExO3AoRSl9cmV0dXJuIEVbbl0u''@;'; put 'put ''d30sb25GcmVlemU6ZnVuY3Rpb24oRSl7cmV0dXJuIGkmJnguTkVFRCYmZihFKSYmIXMoRSxuKSYmcChFKSxFfX19LDUwMTMzOihjLGwsdCk9Pnt2YXIgbj10KDg4NDE2KSxlPXQoNDI5ODUpLHM9dCgzODI1KSgibWV0YWRhdGEiKSxvPXMuc3RvcmV8fChzLnN0b3JlPW5ldyh0KDMwMTQ3KSkp''@;'; put 'put ''LHU9ZnVuY3Rpb24oeCxFLGope3ZhciB3PW8uZ2V0KHgpO2lmKCF3KXtpZighailyZXR1cm47by5zZXQoeCx3PW5ldyBuKX12YXIgUj13LmdldChFKTtpZighUil7aWYoIWopcmV0dXJuO3cuc2V0KEUsUj1uZXcgbil9cmV0dXJuIFJ9O2MuZXhwb3J0cz17c3RvcmU6byxtYXA6dSxoYXM6ZnVu''@;'; put 'put ''Y3Rpb24oeCxFLGope3ZhciB3PXUoRSxqLCExKTtyZXR1cm4gdm9pZCAwIT09dyYmdy5oYXMoeCl9LGdldDpmdW5jdGlvbih4LEUsail7dmFyIHc9dShFLGosITEpO3JldHVybiB2b2lkIDA9PT13P3ZvaWQgMDp3LmdldCh4KX0sc2V0OmZ1bmN0aW9uKHgsRSxqLHcpe3Uoaix3LCEwKS5zZXQo''@;'; put 'put ''eCxFKX0sa2V5czpmdW5jdGlvbih4LEUpe3ZhciBqPXUoeCxFLCExKSx3PVtdO3JldHVybiBqJiZqLmZvckVhY2goZnVuY3Rpb24oUixGKXt3LnB1c2goRil9KSx3fSxrZXk6ZnVuY3Rpb24oeCl7cmV0dXJuIHZvaWQgMD09PXh8fCJzeW1ib2wiPT10eXBlb2YgeD94OlN0cmluZyh4KX0sZXhw''@;'; put 'put ''OmZ1bmN0aW9uKHgpe2UoZS5TLCJSZWZsZWN0Iix4KX19fSwzNTM0NTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjcwNTcpLGU9dCg0NzE4NCkscz10KDY0NTQ4KSxvPXQoMTQ2ODIpLHU9dCgyMDUwOCksZj10KDQ5Nzk3KSxpPU9iamVjdC5hc3NpZ247Yy5leHBvcnRzPSFpfHx0''@;'; put 'put ''KDc0MjUzKShmdW5jdGlvbigpe3ZhciBwPXt9LHk9e30sdj1TeW1ib2woKSxnPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIHBbdl09NyxnLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3lbeF09eH0pLDchPWkoe30scClbdl18fE9iamVjdC5rZXlzKGkoe30seSkpLmpvaW4o''@;'; put 'put ''IiIpIT1nfSk/ZnVuY3Rpb24oeSx2KXtmb3IodmFyIGc9dSh5KSx4PWFyZ3VtZW50cy5sZW5ndGgsRT0xLGo9cy5mLHc9by5mO3g+RTspZm9yKHZhciBPLFI9Zihhcmd1bWVudHNbRSsrXSksRj1qP2UoUikuY29uY2F0KGooUikpOmUoUiksQj1GLmxlbmd0aCxiPTA7Qj5iOylPPUZbYisrXSwo''@;'; put 'put ''IW58fHcuY2FsbChSLE8pKSYmKGdbT109UltPXSk7cmV0dXJuIGd9Oml9LDQyNTAzOihjLGwsdCk9Pnt2YXIgbj10KDI3MDA3KSxlPXQoMzU1ODgpLHM9dCg3NDQzMCksbz10KDY5MzM1KSgiSUVfUFJPVE8iKSx1PWZ1bmN0aW9uKCl7fSxmPSJwcm90b3R5cGUiLGk9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''eCxwPXQoNjI0NTcpKCJpZnJhbWUiKSx5PXMubGVuZ3RoO2ZvcihwLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQoNDA2MzkpLmFwcGVuZENoaWxkKHApLHAuc3JjPSJqYXZhc2NyaXB0OiIsKHg9cC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCkseC53cml0ZSgiPHNjcmlwdD5kb2N1bWVu''@;'; put 'put ''dC5GPU9iamVjdDxcL3NjcmlwdD4iKSx4LmNsb3NlKCksaT14LkY7eS0tOylkZWxldGUgaVtmXVtzW3ldXTtyZXR1cm4gaSgpfTtjLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oeSx2KXt2YXIgZztyZXR1cm4gbnVsbCE9PXk/KHVbZl09bih5KSxnPW5ldyB1LHVbZl09bnVsbCxn''@;'; put 'put ''W29dPXkpOmc9aSgpLHZvaWQgMD09PXY/ZzplKGcsdil9fSw5OTI3NTooYyxsLHQpPT57dmFyIG49dCgyNzAwNyksZT10KDE3MzQpLHM9dCgyMTY4OSksbz1PYmplY3QuZGVmaW5lUHJvcGVydHk7bC5mPXQoNjcwNTcpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihmLGkscCl7aWYo''@;'; put 'put ''bihmKSxpPXMoaSwhMCksbihwKSxlKXRyeXtyZXR1cm4gbyhmLGkscCl9Y2F0Y2h7fWlmKCJnZXQiaW4gcHx8InNldCJpbiBwKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIHAmJihmW2ldPXAudmFsdWUpLGZ9fSwzNTU4ODooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg5OTI3NSksZT10KDI3MDA3KSxzPXQoNDcxODQpO2MuZXhwb3J0cz10KDY3MDU3KT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih1LGYpe2UodSk7Zm9yKHZhciB2LGk9cyhmKSxwPWkubGVuZ3RoLHk9MDtwPnk7KW4uZih1LHY9aVt5KytdLGZbdl0pO3Jl''@;'; put 'put ''dHVybiB1fX0sMTg2OTM6KGMsbCx0KT0+e3ZhciBuPXQoMTQ2ODIpLGU9dCg5MDY4MSkscz10KDIyMTEwKSxvPXQoMjE2ODkpLHU9dCg3OTE4MSksZj10KDE3MzQpLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtsLmY9dCg2NzA1Nyk/aTpmdW5jdGlvbih5LHYpe2lmKHk9cyh5''@;'; put 'put ''KSx2PW8odiwhMCksZil0cnl7cmV0dXJuIGkoeSx2KX1jYXRjaHt9aWYodSh5LHYpKXJldHVybiBlKCFuLmYuY2FsbCh5LHYpLHlbdl0pfX0sMzkzMjc6KGMsbCx0KT0+e3ZhciBuPXQoMjIxMTApLGU9dCgyMDYxNikuZixzPXt9LnRvU3RyaW5nLG89Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cm''@;'; put 'put ''JndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtjLmV4cG9ydHMuZj1mdW5jdGlvbihpKXtyZXR1cm4gbyYmIltvYmplY3QgV2luZG93XSI9PXMuY2FsbChpKT9mdW5jdGlvbihmKXt0cnl7cmV0dXJuIGUoZil9''@;'; put 'put ''Y2F0Y2h7cmV0dXJuIG8uc2xpY2UoKX19KGkpOmUobihpKSl9fSwyMDYxNjooYyxsLHQpPT57dmFyIG49dCg2MDE4OSksZT10KDc0NDMwKS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO2wuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24obyl7cmV0dXJuIG4obyxl''@;'; put 'put ''KX19LDY0NTQ4OihjLGwpPT57bC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDQ2ODooYyxsLHQpPT57dmFyIG49dCg3OTE4MSksZT10KDIwNTA4KSxzPXQoNjkzMzUpKCJJRV9QUk9UTyIpLG89T2JqZWN0LnByb3RvdHlwZTtjLmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9m''@;'; put 'put ''fHxmdW5jdGlvbih1KXtyZXR1cm4gdT1lKHUpLG4odSxzKT91W3NdOiJmdW5jdGlvbiI9PXR5cGVvZiB1LmNvbnN0cnVjdG9yJiZ1IGluc3RhbmNlb2YgdS5jb25zdHJ1Y3Rvcj91LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp1IGluc3RhbmNlb2YgT2JqZWN0P286bnVsbH19LDYwMTg5OihjLGws''@;'; put 'put ''dCk9Pnt2YXIgbj10KDc5MTgxKSxlPXQoMjIxMTApLHM9dCg3OTMxNSkoITEpLG89dCg2OTMzNSkoIklFX1BST1RPIik7Yy5leHBvcnRzPWZ1bmN0aW9uKHUsZil7dmFyIHYsaT1lKHUpLHA9MCx5PVtdO2Zvcih2IGluIGkpdiE9byYmbihpLHYpJiZ5LnB1c2godik7Zm9yKDtmLmxlbmd0aD5w''@;'; put 'put ''OyluKGksdj1mW3ArK10pJiYofnMoeSx2KXx8eS5wdXNoKHYpKTtyZXR1cm4geX19LDQ3MTg0OihjLGwsdCk9Pnt2YXIgbj10KDYwMTg5KSxlPXQoNzQ0MzApO2MuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24obyl7cmV0dXJuIG4obyxlKX19LDE0NjgyOihjLGwpPT57bC5mPXt9LnBy''@;'; put 'put ''b3BlcnR5SXNFbnVtZXJhYmxlfSwzMzE2MDooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDI1NjQ1KSxzPXQoNzQyNTMpO2MuZXhwb3J0cz1mdW5jdGlvbihvLHUpe3ZhciBmPShlLk9iamVjdHx8e30pW29dfHxPYmplY3Rbb10saT17fTtpW29dPXUoZiksbihuLlMrbi5GKnMoZnVuY3Rp''@;'; put 'put ''b24oKXtmKDEpfSksIk9iamVjdCIsaSl9fSw1NzY0MzooYyxsLHQpPT57dmFyIG49dCgyMDYxNiksZT10KDY0NTQ4KSxzPXQoMjcwMDcpLG89dCgzODE2KS5SZWZsZWN0O2MuZXhwb3J0cz1vJiZvLm93bktleXN8fGZ1bmN0aW9uKGYpe3ZhciBpPW4uZihzKGYpKSxwPWUuZjtyZXR1cm4gcD9p''@;'; put 'put ''LmNvbmNhdChwKGYpKTppfX0sNDc3NDM6KGMsbCx0KT0+e3ZhciBuPXQoMzgxNikucGFyc2VGbG9hdCxlPXQoMjk1OTkpLnRyaW07Yy5leHBvcnRzPTEvbih0KDg0NjQ0KSsiLTAiKSE9LTEvMD9mdW5jdGlvbihvKXt2YXIgdT1lKFN0cmluZyhvKSwzKSxmPW4odSk7cmV0dXJuIDA9PT1mJiYi''@;'; put 'put ''LSI9PXUuY2hhckF0KDApPy0wOmZ9Om59LDU1OTYwOihjLGwsdCk9Pnt2YXIgbj10KDM4MTYpLnBhcnNlSW50LGU9dCgyOTU5OSkudHJpbSxzPXQoODQ2NDQpLG89L15bLStdPzBbeFhdLztjLmV4cG9ydHM9OCE9PW4ocysiMDgiKXx8MjIhPT1uKHMrIjB4MTYiKT9mdW5jdGlvbihmLGkpe3Zh''@;'; put 'put ''ciBwPWUoU3RyaW5nKGYpLDMpO3JldHVybiBuKHAsaT4+PjB8fChvLnRlc3QocCk/MTY6MTApKX06bn0sOTA2ODE6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZsKSxjb25maWd1cmFibGU6ISgyJmwpLHdyaXRhYmxlOiEoNCZsKSx2YWx1ZTp0fX19''@;'; put 'put ''LDI0NDA4OihjLGwsdCk9Pnt2YXIgbj10KDc3MjM0KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzLG8pe2Zvcih2YXIgdSBpbiBzKW4oZSx1LHNbdV0sbyk7cmV0dXJuIGV9fSw3NzIzNDooYyxsLHQpPT57dmFyIG49dCgzODE2KSxlPXQoODc3MjgpLHM9dCg3OTE4MSksbz10KDkzOTUzKSgic3Jj''@;'; put 'put ''IiksdT10KDQwMDE4KSxmPSJ0b1N0cmluZyIsaT0oIiIrdSkuc3BsaXQoZik7dCgyNTY0NSkuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihwKXtyZXR1cm4gdS5jYWxsKHApfSwoYy5leHBvcnRzPWZ1bmN0aW9uKHAseSx2LGcpe3ZhciB4PSJmdW5jdGlvbiI9PXR5cGVvZiB2O3gmJihzKHYsIm5h''@;'; put 'put ''bWUiKXx8ZSh2LCJuYW1lIix5KSkscFt5XSE9PXYmJih4JiYocyh2LG8pfHxlKHYsbyxwW3ldPyIiK3BbeV06aS5qb2luKFN0cmluZyh5KSkpKSxwPT09bj9wW3ldPXY6Zz9wW3ldP3BbeV09djplKHAseSx2KTooZGVsZXRlIHBbeV0sZShwLHksdikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxm''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbb118fHUuY2FsbCh0aGlzKX0pfSwyNzc4NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDE0ODgpLGU9UmVnRXhwLnByb3RvdHlwZS5leGVjO2MuZXhwb3J0cz1mdW5jdGlvbihzLG8pe3ZhciB1''@;'; put 'put ''PXMuZXhlYztpZigiZnVuY3Rpb24iPT10eXBlb2YgdSl7dmFyIGY9dS5jYWxsKHMsbyk7aWYoIm9iamVjdCIhPXR5cGVvZiBmKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCIpO3Jl''@;'; put 'put ''dHVybiBmfWlmKCJSZWdFeHAiIT09bihzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIik7cmV0dXJuIGUuY2FsbChzLG8pfX0sMjExNjU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeSx2LG49dCg1MzIxOCksZT1S''@;'; put 'put ''ZWdFeHAucHJvdG90eXBlLmV4ZWMscz1TdHJpbmcucHJvdG90eXBlLnJlcGxhY2Usbz1lLHU9Imxhc3RJbmRleCIsZj0odj0vYiovZyxlLmNhbGwoeT0vYS8sImEiKSxlLmNhbGwodiwiYSIpLDAhPT15W3VdfHwwIT09dlt1XSksaT12b2lkIDAhPT0vKCk/Py8uZXhlYygiIilbMV07KGZ8fGkp''@;'; put 'put ''JiYobz1mdW5jdGlvbih2KXt2YXIgeCxFLGosdyxnPXRoaXM7cmV0dXJuIGkmJihFPW5ldyBSZWdFeHAoIl4iK2cuc291cmNlKyIkKD8hXFxzKSIsbi5jYWxsKGcpKSksZiYmKHg9Z1t1XSksaj1lLmNhbGwoZyx2KSxmJiZqJiYoZ1t1XT1nLmdsb2JhbD9qLmluZGV4K2pbMF0ubGVuZ3RoOngp''@;'; put 'put ''LGkmJmomJmoubGVuZ3RoPjEmJnMuY2FsbChqWzBdLEUsZnVuY3Rpb24oKXtmb3Iodz0xO3c8YXJndW1lbnRzLmxlbmd0aC0yO3crKyl2b2lkIDA9PT1hcmd1bWVudHNbd10mJihqW3ddPXZvaWQgMCl9KSxqfSksYy5leHBvcnRzPW99LDI3MTk1OmM9PntjLmV4cG9ydHM9T2JqZWN0LmlzfHxm''@;'; put 'put ''dW5jdGlvbih0LG4pe3JldHVybiB0PT09bj8wIT09dHx8MS90PT0xL246dCE9dCYmbiE9bn19LDI3Mzc1OihjLGwsdCk9Pnt2YXIgbj10KDU1Mjg2KSxlPXQoMjcwMDcpLHM9ZnVuY3Rpb24obyx1KXtpZihlKG8pLCFuKHUpJiZudWxsIT09dSl0aHJvdyBUeXBlRXJyb3IodSsiOiBjYW4ndCBz''@;'; put 'put ''ZXQgYXMgcHJvdG90eXBlISIpfTtjLmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24obyx1LGYpe3RyeXsoZj10KDc0MSkoRnVuY3Rpb24uY2FsbCx0KDE4NjkzKS5mKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCwy''@;'; put 'put ''KSkobyxbXSksdT0hKG8gaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2h7dT0hMH1yZXR1cm4gZnVuY3Rpb24ocCx5KXtyZXR1cm4gcyhwLHkpLHU/cC5fX3Byb3RvX189eTpmKHAseSkscH19KHt9LCExKTp2b2lkIDApLGNoZWNrOnN9fSwyOTc0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49''@;'; put 'put ''dCgzODE2KSxlPXQoOTkyNzUpLHM9dCg2NzA1Nyksbz10KDg2MzE0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXt2YXIgZj1uW3VdO3MmJmYmJiFmW29dJiZlLmYoZixvLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwyMjk0MzooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg5OTI3NSkuZixlPXQoNzkxODEpLHM9dCg4NjMxNCkoInRvU3RyaW5nVGFnIik7Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSxmKXtvJiYhZShvPWY/bzpvLnByb3RvdHlwZSxzKSYmbihvLHMse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp1fSl9fSw2OTMzNTooYyxsLHQpPT57''@;'; put 'put ''dmFyIG49dCgzODI1KSgia2V5cyIpLGU9dCg5Mzk1Myk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBuW3NdfHwobltzXT1lKHMpKX19LDM4MjU6KGMsbCx0KT0+e3ZhciBuPXQoMjU2NDUpLGU9dCgzODE2KSxzPSJfX2NvcmUtanNfc2hhcmVkX18iLG89ZVtzXXx8KGVbc109e30pOyhj''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24odSxmKXtyZXR1cm4gb1t1XXx8KG9bdV09dm9pZCAwIT09Zj9mOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246bi52ZXJzaW9uLG1vZGU6dCg0NDYxKT8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiJceGE5IDIwMjAgRGVuaXMgUHVzaGthcmV2''@;'; put 'put ''ICh6bG9pcm9jay5ydSkifSl9LDU4MzY0OihjLGwsdCk9Pnt2YXIgbj10KDI3MDA3KSxlPXQoMjQ5NjMpLHM9dCg4NjMxNCkoInNwZWNpZXMiKTtjLmV4cG9ydHM9ZnVuY3Rpb24obyx1KXt2YXIgaSxmPW4obykuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWZ8fG51bGw9PShpPW4oZilb''@;'; put 'put ''c10pP3U6ZShpKX19LDc3NzE3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg3NDI1Myk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7cmV0dXJuISFlJiZuKGZ1bmN0aW9uKCl7cz9lLmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6ZS5jYWxsKG51bGwpfSl9fSwyNDQ5NjooYyxsLHQp''@;'; put 'put ''PT57dmFyIG49dCg4MTQ2NyksZT10KDkxMzU1KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7dmFyIHksdixmPVN0cmluZyhlKG8pKSxpPW4odSkscD1mLmxlbmd0aDtyZXR1cm4gaTwwfHxpPj1wP3M/IiI6dm9pZCAwOih5PWYuY2hhckNvZGVBdChpKSk8NTUy''@;'; put 'put ''OTZ8fHk+NTYzMTl8fGkrMT09PXB8fCh2PWYuY2hhckNvZGVBdChpKzEpKTw1NjMyMHx8dj41NzM0Mz9zP2YuY2hhckF0KGkpOnk6cz9mLnNsaWNlKGksaSsyKTp2LTU2MzIwKyh5LTU1Mjk2PDwxMCkrNjU1MzZ9fX0sNDIwOTQ6KGMsbCx0KT0+e3ZhciBuPXQoNTUzNjQpLGU9dCg5MTM1NSk7''@;'; put 'put ''Yy5leHBvcnRzPWZ1bmN0aW9uKHMsbyx1KXtpZihuKG8pKXRocm93IFR5cGVFcnJvcigiU3RyaW5nIyIrdSsiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4ISIpO3JldHVybiBTdHJpbmcoZShzKSl9fSwyOTM5NTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDc0MjUzKSxzPXQoOTEzNTUpLG89''@;'; put 'put ''LyIvZyx1PWZ1bmN0aW9uKGYsaSxwLHkpe3ZhciB2PVN0cmluZyhzKGYpKSxnPSI8IitpO3JldHVybiIiIT09cCYmKGcrPSIgIitwKyc9IicrU3RyaW5nKHkpLnJlcGxhY2UobywiJnF1b3Q7IikrJyInKSxnKyI+Iit2KyI8LyIraSsiPiJ9O2MuZXhwb3J0cz1mdW5jdGlvbihmLGkpe3ZhciBw''@;'; put 'put ''PXt9O3BbZl09aSh1KSxuKG4uUCtuLkYqZShmdW5jdGlvbigpe3ZhciB5PSIiW2ZdKCciJyk7cmV0dXJuIHkhPT15LnRvTG93ZXJDYXNlKCl8fHkuc3BsaXQoJyInKS5sZW5ndGg+M30pLCJTdHJpbmciLHApfX0sNjg1OTU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDgxNDY3KSxl''@;'; put 'put ''PXQoOTEzNTUpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXt2YXIgdT1TdHJpbmcoZSh0aGlzKSksZj0iIixpPW4obyk7aWYoaTwwfHxpPT0xLzApdGhyb3cgUmFuZ2VFcnJvcigiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUiKTtmb3IoO2k+MDsoaT4+Pj0xKSYmKHUrPXUpKTEmaSYmKGYrPXUpO3Jl''@;'; put 'put ''dHVybiBmfX0sMjk1OTk6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCg5MTM1NSkscz10KDc0MjUzKSxvPXQoODQ2NDQpLHU9IlsiK28rIl0iLGk9UmVnRXhwKCJeIit1K3UrIioiKSxwPVJlZ0V4cCh1K3UrIiokIikseT1mdW5jdGlvbihnLHgsRSl7dmFyIGo9e30sdz1zKGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuISFvW2ddKCl8fCJcdTIwMGJceDg1IiE9Ilx1MjAwYlx4ODUiW2ddKCl9KSxSPWpbZ109dz94KHYpOm9bZ107RSYmKGpbRV09UiksbihuLlArbi5GKncsIlN0cmluZyIsail9LHY9eS50cmltPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9U3RyaW5nKGUoZykpLDEmeCYmKGc9Zy5y''@;'; put 'put ''ZXBsYWNlKGksIiIpKSwyJngmJihnPWcucmVwbGFjZShwLCIiKSksZ307Yy5leHBvcnRzPXl9LDg0NjQ0OmM9PntjLmV4cG9ydHM9Ilx0XG5cdlxmXHIgXHhhMFx1MTY4MFx1MTgwZVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1''@;'; put 'put ''MjAwYVx1MjAyZlx1MjA1Zlx1MzAwMFx1MjAyOFx1MjAyOVx1ZmVmZiJ9LDkyMzM3OihjLGwsdCk9Pnt2YXIgbj10KDgxNDY3KSxlPU1hdGgubWF4LHM9TWF0aC5taW47Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSl7cmV0dXJuKG89bihvKSk8MD9lKG8rdSwwKTpzKG8sdSl9fSw4MTQ2NzpjPT57''@;'; put 'put ''dmFyIGw9TWF0aC5jZWlsLHQ9TWF0aC5mbG9vcjtjLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIGlzTmFOKG49K24pPzA6KG4+MD90OmwpKG4pfX0sMjIxMTA6KGMsbCx0KT0+e3ZhciBuPXQoNDk3OTcpLGU9dCg5MTM1NSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBuKGUocykp''@;'; put 'put ''fX0sMTA4NzU6KGMsbCx0KT0+e3ZhciBuPXQoODE0NjcpLGU9TWF0aC5taW47Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBzPjA/ZShuKHMpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSwyMDUwODooYyxsLHQpPT57dmFyIG49dCg5MTM1NSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVy''@;'; put 'put ''biBPYmplY3QobihlKSl9fSwyMTY4OTooYyxsLHQpPT57dmFyIG49dCg1NTI4Nik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7aWYoIW4oZSkpcmV0dXJuIGU7dmFyIG8sdTtpZihzJiYiZnVuY3Rpb24iPT10eXBlb2Yobz1lLnRvU3RyaW5nKSYmIW4odT1vLmNhbGwoZSkpfHwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2Yobz1lLnZhbHVlT2YpJiYhbih1PW8uY2FsbChlKSl8fCFzJiYiZnVuY3Rpb24iPT10eXBlb2Yobz1lLnRvU3RyaW5nKSYmIW4odT1vLmNhbGwoZSkpKXJldHVybiB1O3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw5''@;'; put 'put ''Mzk1MzpjPT57dmFyIGw9MCx0PU1hdGgucmFuZG9tKCk7Yy5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiJTeW1ib2woIi5jb25jYXQodm9pZCAwPT09bj8iIjpuLCIpXyIsKCsrbCt0KS50b1N0cmluZygzNikpfX0sMTYxNjooYyxsLHQpPT57dmFyIG49dCg1NTI4Nik7Yy5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKGUscyl7aWYoIW4oZSl8fGUuX3QhPT1zKXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3MrIiByZXF1aXJlZCEiKTtyZXR1cm4gZX19LDM2MDc0OihjLGwsdCk9Pnt2YXIgbj10KDM4MTYpLGU9dCgyNTY0NSkscz10KDQ0NjEpLG89dCgyODc4NyksdT10''@;'; put 'put ''KDk5Mjc1KS5mO2MuZXhwb3J0cz1mdW5jdGlvbihmKXt2YXIgaT1lLlN5bWJvbHx8KGUuU3ltYm9sPXM/e306bi5TeW1ib2x8fHt9KTsiXyIhPWYuY2hhckF0KDApJiYhKGYgaW4gaSkmJnUoaSxmLHt2YWx1ZTpvLmYoZil9KX19LDI4Nzg3OihjLGwsdCk9PntsLmY9dCg4NjMxNCl9LDg2MzE0''@;'; put 'put ''OihjLGwsdCk9Pnt2YXIgbj10KDM4MjUpKCJ3a3MiKSxlPXQoOTM5NTMpLHM9dCgzODE2KS5TeW1ib2wsbz0iZnVuY3Rpb24iPT10eXBlb2YgczsoYy5leHBvcnRzPWZ1bmN0aW9uKGYpe3JldHVybiBuW2ZdfHwobltmXT1vJiZzW2ZdfHwobz9zOmUpKCJTeW1ib2wuIitmKSl9KS5zdG9yZT1u''@;'; put 'put ''fSw2OTAwMjooYyxsLHQpPT57dmFyIG49dCg0MTQ4OCksZT10KDg2MzE0KSgiaXRlcmF0b3IiKSxzPXQoODcyMzQpO2MuZXhwb3J0cz10KDI1NjQ1KS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihvKXtpZihudWxsIT1vKXJldHVybiBvW2VdfHxvWyJAQGl0ZXJhdG9yIl18fHNbbihvKV19''@;'; put 'put ''fSwzMmUzOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUCwiQXJyYXkiLHtjb3B5V2l0aGluOnQoNTIxNil9KSx0KDE3NzIyKSgiY29weVdpdGhpbiIpfSwxNTc0NTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI5ODUpLGU9dCgxMDA1MCkoNCk7bihuLlArbi5GKiF0KDc3''@;'; put 'put ''NzE3KShbXS5ldmVyeSwhMCksIkFycmF5Iix7ZXZlcnk6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50c1sxXSl9fSl9LDQ4OTc3OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUCwiQXJyYXkiLHtmaWxsOnQoNDY4NTIpfSksdCgxNzcyMikoImZpbGwiKX0sOTg4Mzc6''@;'; put 'put ''KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMTAwNTApKDIpO24obi5QK24uRiohdCg3NzcxNykoW10uZmlsdGVyLCEwKSwiQXJyYXkiLHtmaWx0ZXI6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50c1sxXSl9fSl9LDk0ODk5OihjLGwsdCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIG49dCg0Mjk4NSksZT10KDEwMDUwKSg2KSxzPSJmaW5kSW5kZXgiLG89ITA7cyBpbltdJiZBcnJheSgxKVtzXShmdW5jdGlvbigpe289ITF9KSxuKG4uUCtuLkYqbywiQXJyYXkiLHtmaW5kSW5kZXg6ZnVuY3Rpb24oZil7cmV0dXJuIGUodGhpcyxmLGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSx0KDE3NzIyKShzKX0sNTIzMTA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMTAwNTApKDUpLHM9ImZpbmQiLG89ITA7cyBpbltdJiZBcnJheSgxKVtzXShmdW5jdGlvbigpe289ITF9KSxuKG4uUCtu''@;'; put 'put ''LkYqbywiQXJyYXkiLHtmaW5kOmZ1bmN0aW9uKGYpe3JldHVybiBlKHRoaXMsZixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksdCgxNzcyMikocyl9LDI0MzM2OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Mjk4NSksZT10KDEwMDUwKSgwKSxzPXQo''@;'; put 'put ''Nzc3MTcpKFtdLmZvckVhY2gsITApO24obi5QK24uRiohcywiQXJyYXkiLHtmb3JFYWNoOmZ1bmN0aW9uKHUpe3JldHVybiBlKHRoaXMsdSxhcmd1bWVudHNbMV0pfX0pfSwzMDUyMjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNzQxKSxlPXQoNDI5ODUpLHM9dCgyMDUwOCksbz10''@;'; put 'put ''KDI4ODUxKSx1PXQoODY1NTUpLGY9dCgxMDg3NSksaT10KDkyODExKSxwPXQoNjkwMDIpO2UoZS5TK2UuRiohdCg3NDYyKShmdW5jdGlvbih5KXtBcnJheS5mcm9tKHkpfSksIkFycmF5Iix7ZnJvbTpmdW5jdGlvbih2KXt2YXIgQixiLE8sUyxnPXModikseD0iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''dGhpcz90aGlzOkFycmF5LEU9YXJndW1lbnRzLmxlbmd0aCxqPUU+MT9hcmd1bWVudHNbMV06dm9pZCAwLHc9dm9pZCAwIT09aixSPTAsRj1wKGcpO2lmKHcmJihqPW4oaixFPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09Rnx8eD09QXJyYXkmJnUoRikpZm9yKGI9bmV3IHgoQj1m''@;'; put 'put ''KGcubGVuZ3RoKSk7Qj5SO1IrKylpKGIsUix3P2ooZ1tSXSxSKTpnW1JdKTtlbHNlIGZvcihTPUYuY2FsbChnKSxiPW5ldyB4OyEoTz1TLm5leHQoKSkuZG9uZTtSKyspaShiLFIsdz9vKFMsaixbTy52YWx1ZSxSXSwhMCk6Ty52YWx1ZSk7cmV0dXJuIGIubGVuZ3RoPVIsYn19KX0sMjMzNjk6''@;'; put 'put ''KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoNzkzMTUpKCExKSxzPVtdLmluZGV4T2Ysbz0hIXMmJjEvWzFdLmluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKG98fCF0KDc3NzE3KShzKSksIkFycmF5Iix7aW5kZXhPZjpmdW5jdGlvbihmKXtyZXR1cm4gbz9zLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKXx8MDplKHRoaXMsZixhcmd1bWVudHNbMV0pfX0pfSwyMDc3NDooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIkFycmF5Iix7aXNBcnJheTp0KDQzMDIpfSl9LDU2OTk3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgxNzcyMiksZT10KDE1''@;'; put 'put ''NDM2KSxzPXQoODcyMzQpLG89dCgyMjExMCk7Yy5leHBvcnRzPXQoNDI5MjMpKEFycmF5LCJBcnJheSIsZnVuY3Rpb24odSxmKXt0aGlzLl90PW8odSksdGhpcy5faT0wLHRoaXMuX2s9Zn0sZnVuY3Rpb24oKXt2YXIgdT10aGlzLl90LGY9dGhpcy5fayxpPXRoaXMuX2krKztyZXR1cm4hdXx8''@;'; put 'put ''aT49dS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLGUoMSkpOmUoMCwia2V5cyI9PWY/aToidmFsdWVzIj09Zj91W2ldOltpLHVbaV1dKX0sInZhbHVlcyIpLHMuQXJndW1lbnRzPXMuQXJyYXksbigia2V5cyIpLG4oInZhbHVlcyIpLG4oImVudHJpZXMiKX0sODc4NDI6KGMsbCx0KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMjIxMTApLHM9W10uam9pbjtuKG4uUCtuLkYqKHQoNDk3OTcpIT1PYmplY3R8fCF0KDc3NzE3KShzKSksIkFycmF5Iix7am9pbjpmdW5jdGlvbih1KXtyZXR1cm4gcy5jYWxsKGUodGhpcyksdm9pZCAwPT09dT8iLCI6dSl9fSl9LDk5NTY0Oihj''@;'; put 'put ''LGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Mjk4NSksZT10KDIyMTEwKSxzPXQoODE0NjcpLG89dCgxMDg3NSksdT1bXS5sYXN0SW5kZXhPZixmPSEhdSYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKGZ8fCF0KDc3NzE3KSh1KSksIkFycmF5Iix7bGFzdEluZGV4''@;'; put 'put ''T2Y6ZnVuY3Rpb24ocCl7aWYoZilyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIHk9ZSh0aGlzKSx2PW8oeS5sZW5ndGgpLGc9di0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihnPU1hdGgubWluKGcscyhhcmd1bWVudHNbMV0pKSksZzwwJiYoZz12K2cpO2c+PTA7Zy0t''@;'; put 'put ''KWlmKGcgaW4geSYmeVtnXT09PXApcmV0dXJuIGd8fDA7cmV0dXJuLTF9fSl9LDE5MzcxOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Mjk4NSksZT10KDEwMDUwKSgxKTtuKG4uUCtuLkYqIXQoNzc3MTcpKFtdLm1hcCwhMCksIkFycmF5Iix7bWFwOmZ1bmN0aW9uKG8pe3JldHVy''@;'; put 'put ''biBlKHRoaXMsbyxhcmd1bWVudHNbMV0pfX0pfSw1ODI5NTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI5ODUpLGU9dCg5MjgxMSk7bihuLlMrbi5GKnQoNzQyNTMpKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe31yZXR1cm4hKEFycmF5Lm9mLmNhbGwocylpbnN0YW5jZW9mIHMp''@;'; put 'put ''fSksIkFycmF5Iix7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIG89MCx1PWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSkodSk7dT5vOyllKGYsbyxhcmd1bWVudHNbbysrXSk7cmV0dXJuIGYubGVuZ3RoPXUsZn19KX0sMzc1MDooYyxsLHQp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI5ODUpLGU9dCgzNzYyOCk7bihuLlArbi5GKiF0KDc3NzE3KShbXS5yZWR1Y2VSaWdodCwhMCksIkFycmF5Iix7cmVkdWNlUmlnaHQ6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCEwKX19''@;'; put 'put ''KX0sMzMwNTc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMzc2MjgpO24obi5QK24uRiohdCg3NzcxNykoW10ucmVkdWNlLCEwKSwiQXJyYXkiLHtyZWR1Y2U6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFd''@;'; put 'put ''LCExKX19KX0sNTAxMTA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoNDA2MzkpLHM9dCg5MjAzMiksbz10KDkyMzM3KSx1PXQoMTA4NzUpLGY9W10uc2xpY2U7bihuLlArbi5GKnQoNzQyNTMpKGZ1bmN0aW9uKCl7ZSYmZi5jYWxsKGUpfSksIkFycmF5Iix7c2xp''@;'; put 'put ''Y2U6ZnVuY3Rpb24ocCx5KXt2YXIgdj11KHRoaXMubGVuZ3RoKSxnPXModGhpcyk7aWYoeT12b2lkIDA9PT15P3Y6eSwiQXJyYXkiPT1nKXJldHVybiBmLmNhbGwodGhpcyxwLHkpO2Zvcih2YXIgeD1vKHAsdiksRT1vKHksdiksaj11KEUteCksdz1uZXcgQXJyYXkoaiksUj0wO1I8ajtSKysp''@;'; put 'put ''d1tSXT0iU3RyaW5nIj09Zz90aGlzLmNoYXJBdCh4K1IpOnRoaXNbeCtSXTtyZXR1cm4gd319KX0sMjY3NzM6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMTAwNTApKDMpO24obi5QK24uRiohdCg3NzcxNykoW10uc29tZSwhMCksIkFycmF5Iix7c29tZTpmdW5j''@;'; put 'put ''dGlvbihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1lbnRzWzFdKX19KX0sMjAwNzU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMjQ5NjMpLHM9dCgyMDUwOCksbz10KDc0MjUzKSx1PVtdLnNvcnQsZj1bMSwyLDNdO24obi5QK24uRioobyhmdW5jdGlvbigpe2Yu''@;'; put 'put ''c29ydCh2b2lkIDApfSl8fCFvKGZ1bmN0aW9uKCl7Zi5zb3J0KG51bGwpfSl8fCF0KDc3NzE3KSh1KSksIkFycmF5Iix7c29ydDpmdW5jdGlvbihwKXtyZXR1cm4gdm9pZCAwPT09cD91LmNhbGwocyh0aGlzKSk6dS5jYWxsKHModGhpcyksZShwKSl9fSl9LDMxODQyOihjLGwsdCk9Pnt0KDI5''@;'; put 'put ''NzQpKCJBcnJheSIpfSw4MTgyMjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIkRhdGUiLHtub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KX0sOTEwMzE6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCg1MzUzNyk7bihuLlArbi5GKihEYXRlLnBy''@;'; put 'put ''b3RvdHlwZS50b0lTT1N0cmluZyE9PWUpLCJEYXRlIix7dG9JU09TdHJpbmc6ZX0pfSwxOTk3NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI5ODUpLGU9dCgyMDUwOCkscz10KDIxNjg5KTtuKG4uUCtuLkYqdCg3NDI1MykoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5ldyBE''@;'; put 'put ''YXRlKE5hTikudG9KU09OKCl8fDEhPT1EYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pLCJEYXRlIix7dG9KU09OOmZ1bmN0aW9uKHUpe3ZhciBmPWUodGhpcyksaT1zKGYpO3JldHVybiJudW1iZXIiIT10eXBlb2YgaXx8aXNG''@;'; put 'put ''aW5pdGUoaSk/Zi50b0lTT1N0cmluZygpOm51bGx9fSl9LDQxNTYwOihjLGwsdCk9Pnt2YXIgbj10KDg2MzE0KSgidG9QcmltaXRpdmUiKSxlPURhdGUucHJvdG90eXBlO24gaW4gZXx8dCg4NzcyOCkoZSxuLHQoODcwKSl9LDQ2MzMxOihjLGwsdCk9Pnt2YXIgbj1EYXRlLnByb3RvdHlwZSxl''@;'; put 'put ''PSJJbnZhbGlkIERhdGUiLHM9InRvU3RyaW5nIixvPW5bc10sdT1uLmdldFRpbWU7bmV3IERhdGUoTmFOKSsiIiE9ZSYmdCg3NzIzNCkobixzLGZ1bmN0aW9uKCl7dmFyIGk9dS5jYWxsKHRoaXMpO3JldHVybiBpPT1pP28uY2FsbCh0aGlzKTplfSl9LDM5NzMwOihjLGwsdCk9Pnt2YXIgbj10''@;'; put 'put ''KDQyOTg1KTtuKG4uUCwiRnVuY3Rpb24iLHtiaW5kOnQoMzQzOTgpfSl9LDQ4Mzc3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg1NTI4NiksZT10KDQ2OCkscz10KDg2MzE0KSgiaGFzSW5zdGFuY2UiKSxvPUZ1bmN0aW9uLnByb3RvdHlwZTtzIGluIG98fHQoOTkyNzUpLmYobyxz''@;'; put 'put ''LHt2YWx1ZTpmdW5jdGlvbih1KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGhpc3x8IW4odSkpcmV0dXJuITE7aWYoIW4odGhpcy5wcm90b3R5cGUpKXJldHVybiB1IGluc3RhbmNlb2YgdGhpcztmb3IoO3U9ZSh1KTspaWYodGhpcy5wcm90b3R5cGU9PT11KXJldHVybiEwO3JldHVybiExfX0p''@;'; put 'put ''fSw2MDU5OihjLGwsdCk9Pnt2YXIgbj10KDk5Mjc1KS5mLGU9RnVuY3Rpb24ucHJvdG90eXBlLHM9L15ccypmdW5jdGlvbiAoW14gKF0qKS8sbz0ibmFtZSI7byBpbiBlfHx0KDY3MDU3KSYmbihlLG8se2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuKCIiK3RoaXMp''@;'; put 'put ''Lm1hdGNoKHMpWzFdfWNhdGNoe3JldHVybiIifX19KX0sODg0MTY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDk4MjQpLGU9dCgxNjE2KSxzPSJNYXAiO2MuZXhwb3J0cz10KDQ1Nzk1KShzLGZ1bmN0aW9uKG8pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbih1KXt2YXIgZj1uLmdldEVudHJ5KGUodGhpcyxzKSx1KTtyZXR1cm4gZiYmZi52fSxzZXQ6ZnVuY3Rpb24odSxmKXtyZXR1cm4gbi5kZWYoZSh0aGlzLHMpLDA9PT11PzA6dSxmKX19LG4sITApfSw3NjUw''@;'; put 'put ''MzooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDQ2MjA2KSxzPU1hdGguc3FydCxvPU1hdGguYWNvc2g7bihuLlMrbi5GKiEobyYmNzEwPT1NYXRoLmZsb29yKG8oTnVtYmVyLk1BWF9WQUxVRSkpJiZvKDEvMCk9PTEvMCksIk1hdGgiLHthY29zaDpmdW5jdGlvbihmKXtyZXR1cm4oZj0r''@;'; put 'put ''Zik8MT9OYU46Zj45NDkwNjI2NS42MjQyNTE1Nj9NYXRoLmxvZyhmKStNYXRoLkxOMjplKGYtMStzKGYtMSkqcyhmKzEpKX19KX0sNjY3ODY6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9TWF0aC5hc2luaDtuKG4uUytuLkYqIShlJiYxL2UoMCk+MCksIk1hdGgiLHthc2luaDpmdW5jdGlv''@;'; put 'put ''biBzKG8pe3JldHVybiBpc0Zpbml0ZShvPStvKSYmMCE9bz9vPDA/LXMoLW8pOk1hdGgubG9nKG8rTWF0aC5zcXJ0KG8qbysxKSk6b319KX0sNTA5MzI6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9TWF0aC5hdGFuaDtuKG4uUytuLkYqIShlJiYxL2UoLTApPDApLCJNYXRoIix7YXRhbmg6''@;'; put 'put ''ZnVuY3Rpb24obyl7cmV0dXJuIDA9PShvPStvKT9vOk1hdGgubG9nKCgxK28pLygxLW8pKS8yfX0pfSw1NzUyNjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDYxODAxKTtuKG4uUywiTWF0aCIse2NicnQ6ZnVuY3Rpb24obyl7cmV0dXJuIGUobz0rbykqTWF0aC5wb3coTWF0aC5hYnMo''@;'; put 'put ''byksMS8zKX19KX0sMjE1OTE6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TLCJNYXRoIix7Y2x6MzI6ZnVuY3Rpb24ocyl7cmV0dXJuKHM+Pj49MCk/MzEtTWF0aC5mbG9vcihNYXRoLmxvZyhzKy41KSpNYXRoLkxPRzJFKTozMn19KX0sOTA3MzooYyxsLHQpPT57dmFyIG49dCg0Mjk4''@;'; put 'put ''NSksZT1NYXRoLmV4cDtuKG4uUywiTWF0aCIse2Nvc2g6ZnVuY3Rpb24obyl7cmV0dXJuKGUobz0rbykrZSgtbykpLzJ9fSl9LDgwMzQ3OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KSxlPXQoMTMwODYpO24obi5TK24uRiooZSE9TWF0aC5leHBtMSksIk1hdGgiLHtleHBtMTplfSl9LDMwNTc5''@;'; put 'put ''OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUywiTWF0aCIse2Zyb3VuZDp0KDM0OTM0KX0pfSw0NjY5OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KSxlPU1hdGguYWJzO24obi5TLCJNYXRoIix7aHlwb3Q6ZnVuY3Rpb24obyx1KXtmb3IodmFyIHYsZyxmPTAsaT0wLHA9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCx5PTA7aTxwOyl5PCh2PWUoYXJndW1lbnRzW2krK10pKT8oZj1mKihnPXkvdikqZysxLHk9dik6Zis9dj4wPyhnPXYveSkqZzp2O3JldHVybiB5PT09MS8wPzEvMDp5Kk1hdGguc3FydChmKX19KX0sNjc3MTA6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9TWF0aC5pbXVsO24o''@;'; put 'put ''bi5TK24uRip0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybi01IT1lKDQyOTQ5NjcyOTUsNSl8fDIhPWUubGVuZ3RofSksIk1hdGgiLHtpbXVsOmZ1bmN0aW9uKG8sdSl7dmFyIGY9NjU1MzUsaT0rbyxwPSt1LHk9ZiZpLHY9ZiZwO3JldHVybiAwfHkqdisoKGYmaT4+PjE2KSp2K3kqKGYmcD4+''@;'; put 'put ''PjE2KTw8MTY+Pj4wKX19KX0sNDU3ODk6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TLCJNYXRoIix7bG9nMTA6ZnVuY3Rpb24ocyl7cmV0dXJuIE1hdGgubG9nKHMpKk1hdGguTE9HMTBFfX0pfSwzMzUxNDooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk1hdGgiLHtsb2cx''@;'; put 'put ''cDp0KDQ2MjA2KX0pfSw5OTk3ODooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk1hdGgiLHtsb2cyOmZ1bmN0aW9uKHMpe3JldHVybiBNYXRoLmxvZyhzKS9NYXRoLkxOMn19KX0sNTg0NzI6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TLCJNYXRoIix7c2lnbjp0KDYxODAx''@;'; put 'put ''KX0pfSw4Njk0NjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDEzMDg2KSxzPU1hdGguZXhwO24obi5TK24uRip0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybi0yZS0xNyE9IU1hdGguc2luaCgtMmUtMTcpfSksIk1hdGgiLHtzaW5oOmZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmFicyh1''@;'; put 'put ''PSt1KTwxPyhlKHUpLWUoLXUpKS8yOihzKHUtMSktcygtdS0xKSkqKE1hdGguRS8yKX19KX0sMzUwNjg6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCgxMzA4Nikscz1NYXRoLmV4cDtuKG4uUywiTWF0aCIse3Rhbmg6ZnVuY3Rpb24odSl7dmFyIGY9ZSh1PSt1KSxpPWUoLXUpO3JldHVy''@;'; put 'put ''biBmPT0xLzA/MTppPT0xLzA/LTE6KGYtaSkvKHModSkrcygtdSkpfX0pfSw0MTM6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TLCJNYXRoIix7dHJ1bmM6ZnVuY3Rpb24ocyl7cmV0dXJuKHM+MD9NYXRoLmZsb29yOk1hdGguY2VpbCkocyl9fSl9LDExMjQ2OihjLGwsdCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIG49dCgzODE2KSxlPXQoNzkxODEpLHM9dCg5MjAzMiksbz10KDQwMjY2KSx1PXQoMjE2ODkpLGY9dCg3NDI1MyksaT10KDIwNjE2KS5mLHA9dCgxODY5MykuZix5PXQoOTkyNzUpLmYsdj10KDI5NTk5KS50cmltLGc9Ik51bWJlciIseD1uW2ddLEU9eCxqPXgucHJvdG90''@;'; put 'put ''eXBlLHc9cyh0KDQyNTAzKShqKSk9PWcsUj0idHJpbSJpbiBTdHJpbmcucHJvdG90eXBlLEY9ZnVuY3Rpb24oUyl7dmFyIEM9dShTLCExKTtpZigic3RyaW5nIj09dHlwZW9mIEMmJkMubGVuZ3RoPjIpe3ZhciBVLFosdHQsSz0oQz1SP0MudHJpbSgpOnYoQywzKSkuY2hhckNvZGVBdCgwKTtp''@;'; put 'put ''Zig0Mz09PUt8fDQ1PT09Syl7aWYoODg9PT0oVT1DLmNoYXJDb2RlQXQoMikpfHwxMjA9PT1VKXJldHVybiBOYU59ZWxzZSBpZig0OD09PUspe3N3aXRjaChDLmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpaPTIsdHQ9NDk7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTpaPTgsdHQ9NTU7''@;'; put 'put ''YnJlYWs7ZGVmYXVsdDpyZXR1cm4rQ31mb3IodmFyIFgsXz1DLnNsaWNlKDIpLG50PTAsc3Q9Xy5sZW5ndGg7bnQ8c3Q7bnQrKylpZigoWD1fLmNoYXJDb2RlQXQobnQpKTw0OHx8WD50dClyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChfLFopfX1yZXR1cm4rQ307aWYoIXgoIiAwbzEiKXx8''@;'; put 'put ''IXgoIjBiMSIpfHx4KCIrMHgxIikpe3g9ZnVuY3Rpb24oQyl7dmFyIEs9YXJndW1lbnRzLmxlbmd0aDwxPzA6QyxVPXRoaXM7cmV0dXJuIFUgaW5zdGFuY2VvZiB4JiYodz9mKGZ1bmN0aW9uKCl7ai52YWx1ZU9mLmNhbGwoVSl9KTpzKFUpIT1nKT9vKG5ldyBFKEYoSykpLFUseCk6RihLKX07''@;'; put 'put ''Zm9yKHZhciBPLEI9dCg2NzA1Nyk/aShFKToiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVH''@;'; put 'put ''RVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXIiLnNwbGl0KCIsIiksYj0wO0IubGVuZ3RoPmI7YisrKWUoRSxPPUJbYl0pJiYhZSh4LE8pJiZ5KHgsTyxwKEUsTykpO3gucHJvdG90eXBlPWosai5jb25zdHJ1Y3Rvcj14LHQoNzcyMzQpKG4sZyx4KX19LDc1OTcyOihjLGwsdCk9Pnt2''@;'; put 'put ''YXIgbj10KDQyOTg1KTtuKG4uUywiTnVtYmVyIix7RVBTSUxPTjpNYXRoLnBvdygyLC01Mil9KX0sNTM0MDM6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCgzODE2KS5pc0Zpbml0ZTtuKG4uUywiTnVtYmVyIix7aXNGaW5pdGU6ZnVuY3Rpb24obyl7cmV0dXJuIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBvJiZlKG8pfX0pfSw5MjUxNjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk51bWJlciIse2lzSW50ZWdlcjp0KDE4MzY3KX0pfSw0OTM3MTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk51bWJlciIse2lzTmFOOmZ1bmN0aW9uKHMpe3JldHVybiBzIT1zfX0pfSw4''@;'; put 'put ''NjQ3OTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDE4MzY3KSxzPU1hdGguYWJzO24obi5TLCJOdW1iZXIiLHtpc1NhZmVJbnRlZ2VyOmZ1bmN0aW9uKHUpe3JldHVybiBlKHUpJiZzKHUpPD05MDA3MTk5MjU0NzQwOTkxfX0pfSw5MTczNjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7''@;'; put 'put ''bihuLlMsIk51bWJlciIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSw1MTg4OTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk51bWJlciIse01JTl9TQUZFX0lOVEVHRVI6LTkwMDcxOTkyNTQ3NDA5OTF9KX0sNjUxNzc6KGMsbCx0KT0+e3ZhciBuPXQoNDI5''@;'; put 'put ''ODUpLGU9dCg0Nzc0Myk7bihuLlMrbi5GKihOdW1iZXIucGFyc2VGbG9hdCE9ZSksIk51bWJlciIse3BhcnNlRmxvYXQ6ZX0pfSw4MTI0NjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDU1OTYwKTtuKG4uUytuLkYqKE51bWJlci5wYXJzZUludCE9ZSksIk51bWJlciIse3BhcnNlSW50''@;'; put 'put ''OmV9KX0sMzA3MjY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoODE0NjcpLHM9dCg4MzM2NSksbz10KDY4NTk1KSx1PTEuLnRvRml4ZWQsZj1NYXRoLmZsb29yLGk9WzAsMCwwLDAsMCwwXSxwPSJOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24h''@;'; put 'put ''Iix5PSIwIix2PWZ1bmN0aW9uKHcsUil7Zm9yKHZhciBGPS0xLEI9UjsrK0Y8NjspaVtGXT0oQis9dyppW0ZdKSUxZTcsQj1mKEIvMWU3KX0sZz1mdW5jdGlvbih3KXtmb3IodmFyIFI9NixGPTA7LS1SPj0wOylpW1JdPWYoKEYrPWlbUl0pL3cpLEY9RiV3KjFlN30seD1mdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgdz02LFI9IiI7LS13Pj0wOylpZigiIiE9PVJ8fDA9PT13fHwwIT09aVt3XSl7dmFyIEY9U3RyaW5nKGlbd10pO1I9IiI9PT1SP0Y6UitvLmNhbGwoeSw3LUYubGVuZ3RoKStGfXJldHVybiBSfSxFPWZ1bmN0aW9uKHcsUixGKXtyZXR1cm4gMD09PVI/RjpSJTI9PTE/RSh3LFItMSxG''@;'; put 'put ''KncpOkUodyp3LFIvMixGKX07bihuLlArbi5GKighIXUmJigiMC4wMDAiIT09OGUtNS50b0ZpeGVkKDMpfHwiMSIhPT0uOS50b0ZpeGVkKDApfHwiMS4yNSIhPT0xLjI1NS50b0ZpeGVkKDIpfHwiMTAwMDAwMDAwMDAwMDAwMDEyOCIhPT0oMHhkZTBiNmIzYTc2NDAwODApLnRvRml4ZWQoMCkp''@;'; put 'put ''fHwhdCg3NDI1MykoZnVuY3Rpb24oKXt1LmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b0ZpeGVkOmZ1bmN0aW9uKFIpe3ZhciBTLEMsSyxVLEY9cyh0aGlzLHApLEI9ZShSKSxiPSIiLE89eTtpZihCPDB8fEI+MjApdGhyb3cgUmFuZ2VFcnJvcihwKTtpZihGIT1GKXJldHVybiJOYU4iO2lmKEY8''@;'; put 'put ''PS0xZTIxfHxGPj0xZTIxKXJldHVybiBTdHJpbmcoRik7aWYoRjwwJiYoYj0iLSIsRj0tRiksRj4xZS0yMSlpZihTPWZ1bmN0aW9uKHcpe2Zvcih2YXIgUj0wLEY9dztGPj00MDk2OylSKz0xMixGLz00MDk2O2Zvcig7Rj49MjspUis9MSxGLz0yO3JldHVybiBSfShGKkUoMiw2OSwxKSktNjks''@;'; put 'put ''Qz1TPDA/RipFKDIsLVMsMSk6Ri9FKDIsUywxKSxDKj00NTAzNTk5NjI3MzcwNDk2LChTPTUyLVMpPjApe2Zvcih2KDAsQyksSz1CO0s+PTc7KXYoMWU3LDApLEstPTc7Zm9yKHYoRSgxMCxLLDEpLDApLEs9Uy0xO0s+PTIzOylnKDE8PDIzKSxLLT0yMztnKDE8PEspLHYoMSwxKSxnKDIpLE89''@;'; put 'put ''eCgpfWVsc2UgdigwLEMpLHYoMTw8LVMsMCksTz14KCkrby5jYWxsKHksQik7cmV0dXJuIE89Qj4wP2IrKChVPU8ubGVuZ3RoKTw9Qj8iMC4iK28uY2FsbCh5LEItVSkrTzpPLnNsaWNlKDAsVS1CKSsiLiIrTy5zbGljZShVLUIpKTpiK099fSl9LDE5MDE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgbj10KDQyOTg1KSxlPXQoNzQyNTMpLHM9dCg4MzM2NSksbz0xLi50b1ByZWNpc2lvbjtuKG4uUCtuLkYqKGUoZnVuY3Rpb24oKXtyZXR1cm4iMSIhPT1vLmNhbGwoMSx2b2lkIDApfSl8fCFlKGZ1bmN0aW9uKCl7by5jYWxsKHt9KX0pKSwiTnVtYmVyIix7dG9QcmVjaXNpb246ZnVu''@;'; put 'put ''Y3Rpb24oZil7dmFyIGk9cyh0aGlzLCJOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiB2b2lkIDA9PT1mP28uY2FsbChpKTpvLmNhbGwoaSxmKX19KX0sNzUxMTU6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TK24uRiwiT2JqZWN0Iix7YXNz''@;'; put 'put ''aWduOnQoMzUzNDUpfSl9LDY4MTMyOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUywiT2JqZWN0Iix7Y3JlYXRlOnQoNDI1MDMpfSl9LDM3NDcwOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUytuLkYqIXQoNjcwNTcpLCJPYmplY3QiLHtkZWZpbmVQcm9wZXJ0aWVzOnQoMzU1''@;'; put 'put ''ODgpfSl9LDQ4Mzg4OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUytuLkYqIXQoNjcwNTcpLCJPYmplY3QiLHtkZWZpbmVQcm9wZXJ0eTp0KDk5Mjc1KS5mfSl9LDg5Mzc1OihjLGwsdCk9Pnt2YXIgbj10KDU1Mjg2KSxlPXQoODQ3MjgpLm9uRnJlZXplO3QoMzMxNjApKCJmcmVlemUi''@;'; put 'put ''LGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gcyYmbih1KT9zKGUodSkpOnV9fSl9LDk0ODgyOihjLGwsdCk9Pnt2YXIgbj10KDIyMTEwKSxlPXQoMTg2OTMpLmY7dCgzMzE2MCkoImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24obyx1KXtyZXR1cm4gZShuKG8pLHUpfX0pfSw3OTYyMjooYyxsLHQpPT57dCgzMzE2MCkoImdldE93blByb3BlcnR5TmFtZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHQoMzkzMjcpLmZ9KX0sNDE1MjA6KGMsbCx0KT0+e3ZhciBuPXQoMjA1MDgpLGU9dCg0NjgpO3QoMzMxNjApKCJnZXRQcm90''@;'; put 'put ''b3R5cGVPZiIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIGUobihvKSl9fSl9LDQ5ODkyOihjLGwsdCk9Pnt2YXIgbj10KDU1Mjg2KTt0KDMzMTYwKSgiaXNFeHRlbnNpYmxlIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuISFuKG8pJiYoIWV8fGUo''@;'; put 'put ''bykpfX0pfSw2NDE1NzooYyxsLHQpPT57dmFyIG49dCg1NTI4Nik7dCgzMzE2MCkoImlzRnJvemVuIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIW4obyl8fCEhZSYmZShvKX19KX0sMzUwOTU6KGMsbCx0KT0+e3ZhciBuPXQoNTUyODYpO3QoMzMxNjApKCJpc1NlYWxl''@;'; put 'put ''ZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiFuKG8pfHwhIWUmJmUobyl9fSl9LDk5MTc2OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUywiT2JqZWN0Iix7aXM6dCgyNzE5NSl9KX0sMjc0NzY6KGMsbCx0KT0+e3ZhciBuPXQoMjA1MDgpLGU9dCg0NzE4NCk7''@;'; put 'put ''dCgzMzE2MCkoImtleXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiBlKG4obykpfX0pfSw4NDY3MjooYyxsLHQpPT57dmFyIG49dCg1NTI4NiksZT10KDg0NzI4KS5vbkZyZWV6ZTt0KDMzMTYwKSgicHJldmVudEV4dGVuc2lvbnMiLGZ1bmN0aW9uKHMpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbih1KXtyZXR1cm4gcyYmbih1KT9zKGUodSkpOnV9fSl9LDQzNTMzOihjLGwsdCk9Pnt2YXIgbj10KDU1Mjg2KSxlPXQoODQ3MjgpLm9uRnJlZXplO3QoMzMxNjApKCJzZWFsIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHMmJm4odSk/cyhlKHUpKTp1fX0p''@;'; put 'put ''fSw2ODgzODooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk9iamVjdCIse3NldFByb3RvdHlwZU9mOnQoMjczNzUpLnNldH0pfSw5NjI1MzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDE0ODgpLGU9e307ZVt0KDg2MzE0KSgidG9TdHJpbmdUYWciKV09InoiLGUrIiIh''@;'; put 'put ''PSJbb2JqZWN0IHpdIiYmdCg3NzIzNCkoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIituKHRoaXMpKyJdIn0sITApfSw2NDI5OTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDQ3NzQzKTtuKG4uRytuLkYqKHBhcnNlRmxvYXQhPWUp''@;'; put 'put ''LHtwYXJzZUZsb2F0OmV9KX0sNzEwODQ6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCg1NTk2MCk7bihuLkcrbi5GKihwYXJzZUludCE9ZSkse3BhcnNlSW50OmV9KX0sMjE1NzI6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCgyNDk2Mykscz10KDI3MDA3KSxvPSh0KDM4MTYpLlJl''@;'; put 'put ''ZmxlY3R8fHt9KS5hcHBseSx1PUZ1bmN0aW9uLmFwcGx5O24obi5TK24uRiohdCg3NDI1MykoZnVuY3Rpb24oKXtvKGZ1bmN0aW9uKCl7fSl9KSwiUmVmbGVjdCIse2FwcGx5OmZ1bmN0aW9uKGkscCx5KXt2YXIgdj1lKGkpLGc9cyh5KTtyZXR1cm4gbz9vKHYscCxnKTp1LmNhbGwodixwLGcp''@;'; put 'put ''fX0pfSw4MjEzOTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDQyNTAzKSxzPXQoMjQ5NjMpLG89dCgyNzAwNyksdT10KDU1Mjg2KSxmPXQoNzQyNTMpLGk9dCgzNDM5OCkscD0odCgzODE2KS5SZWZsZWN0fHx7fSkuY29uc3RydWN0LHk9ZihmdW5jdGlvbigpe2Z1bmN0aW9uIGcoKXt9''@;'; put 'put ''cmV0dXJuIShwKGZ1bmN0aW9uKCl7fSxbXSxnKWluc3RhbmNlb2YgZyl9KSx2PSFmKGZ1bmN0aW9uKCl7cChmdW5jdGlvbigpe30pfSk7bihuLlMrbi5GKih5fHx2KSwiUmVmbGVjdCIse2NvbnN0cnVjdDpmdW5jdGlvbih4LEUpe3MoeCksbyhFKTt2YXIgaj1hcmd1bWVudHMubGVuZ3RoPDM/''@;'; put 'put ''eDpzKGFyZ3VtZW50c1syXSk7aWYodiYmIXkpcmV0dXJuIHAoeCxFLGopO2lmKHg9PWope3N3aXRjaChFLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgeDtjYXNlIDE6cmV0dXJuIG5ldyB4KEVbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IHgoRVswXSxFWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyB4''@;'; put 'put ''KEVbMF0sRVsxXSxFWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyB4KEVbMF0sRVsxXSxFWzJdLEVbM10pfXZhciB3PVtudWxsXTtyZXR1cm4gdy5wdXNoLmFwcGx5KHcsRSksbmV3KGkuYXBwbHkoeCx3KSl9dmFyIFI9ai5wcm90b3R5cGUsRj1lKHUoUik/UjpPYmplY3QucHJvdG90eXBlKSxCPUZ1''@;'; put 'put ''bmN0aW9uLmFwcGx5LmNhbGwoeCxGLEUpO3JldHVybiB1KEIpP0I6Rn19KX0sMTA2ODU6KGMsbCx0KT0+e3ZhciBuPXQoOTkyNzUpLGU9dCg0Mjk4NSkscz10KDI3MDA3KSxvPXQoMjE2ODkpO2UoZS5TK2UuRip0KDc0MjUzKShmdW5jdGlvbigpe1JlZmxlY3QuZGVmaW5lUHJvcGVydHkobi5m''@;'; put 'put ''KHt9LDEse3ZhbHVlOjF9KSwxLHt2YWx1ZToyfSl9KSwiUmVmbGVjdCIse2RlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGYsaSxwKXtzKGYpLGk9byhpLCEwKSxzKHApO3RyeXtyZXR1cm4gbi5mKGYsaSxwKSwhMH1jYXRjaHtyZXR1cm4hMX19fSl9LDg1NTM1OihjLGwsdCk9Pnt2YXIgbj10KDQy''@;'; put 'put ''OTg1KSxlPXQoMTg2OTMpLmYscz10KDI3MDA3KTtuKG4uUywiUmVmbGVjdCIse2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKHUsZil7dmFyIGk9ZShzKHUpLGYpO3JldHVybiEoaSYmIWkuY29uZmlndXJhYmxlKSYmZGVsZXRlIHVbZl19fSl9LDE3MzQ3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIG49dCg0Mjk4NSksZT10KDI3MDA3KSxzPWZ1bmN0aW9uKG8pe3RoaXMuX3Q9ZShvKSx0aGlzLl9pPTA7dmFyIGYsdT10aGlzLl9rPVtdO2ZvcihmIGluIG8pdS5wdXNoKGYpfTt0KDQ5OTg4KShzLCJPYmplY3QiLGZ1bmN0aW9uKCl7dmFyIGYsbz10aGlzLHU9by5faztkb3tpZihvLl9p''@;'; put 'put ''Pj11Lmxlbmd0aClyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXdoaWxlKCEoKGY9dVtvLl9pKytdKWluIG8uX3QpKTtyZXR1cm57dmFsdWU6Zixkb25lOiExfX0pLG4obi5TLCJSZWZsZWN0Iix7ZW51bWVyYXRlOmZ1bmN0aW9uKHUpe3JldHVybiBuZXcgcyh1KX19KX0sOTY2MzM6KGMs''@;'; put 'put ''bCx0KT0+e3ZhciBuPXQoMTg2OTMpLGU9dCg0Mjk4NSkscz10KDI3MDA3KTtlKGUuUywiUmVmbGVjdCIse2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih1LGYpe3JldHVybiBuLmYocyh1KSxmKX19KX0sNjg5ODk6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCg0NjgpLHM9''@;'; put 'put ''dCgyNzAwNyk7bihuLlMsIlJlZmxlY3QiLHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih1KXtyZXR1cm4gZShzKHUpKX19KX0sODMwNDk6KGMsbCx0KT0+e3ZhciBuPXQoMTg2OTMpLGU9dCg0NjgpLHM9dCg3OTE4MSksbz10KDQyOTg1KSx1PXQoNTUyODYpLGY9dCgyNzAwNyk7byhvLlMsIlJl''@;'; put 'put ''ZmxlY3QiLHtnZXQ6ZnVuY3Rpb24gaShwLHkpe3ZhciBnLHgsdj1hcmd1bWVudHMubGVuZ3RoPDM/cDphcmd1bWVudHNbMl07cmV0dXJuIGYocCk9PT12P3BbeV06KGc9bi5mKHAseSkpP3MoZywidmFsdWUiKT9nLnZhbHVlOnZvaWQgMCE9PWcuZ2V0P2cuZ2V0LmNhbGwodik6dm9pZCAwOnUo''@;'; put 'put ''eD1lKHApKT9pKHgseSx2KTp2b2lkIDB9fSl9LDc4MjcwOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUywiUmVmbGVjdCIse2hhczpmdW5jdGlvbihzLG8pe3JldHVybiBvIGluIHN9fSl9LDY0NTEwOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KSxlPXQoMjcwMDcpLHM9T2JqZWN0Lmlz''@;'; put 'put ''RXh0ZW5zaWJsZTtuKG4uUywiUmVmbGVjdCIse2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih1KXtyZXR1cm4gZSh1KSwhc3x8cyh1KX19KX0sNzM5ODQ6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TLCJSZWZsZWN0Iix7b3duS2V5czp0KDU3NjQzKX0pfSw3NTc2OTooYyxsLHQpPT57dmFy''@;'; put 'put ''IG49dCg0Mjk4NSksZT10KDI3MDA3KSxzPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztuKG4uUywiUmVmbGVjdCIse3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHUpe2UodSk7dHJ5e3JldHVybiBzJiZzKHUpLCEwfWNhdGNoe3JldHVybiExfX19KX0sOTYwMTQ6KGMsbCx0KT0+e3ZhciBu''@;'; put 'put ''PXQoNDI5ODUpLGU9dCgyNzM3NSk7ZSYmbihuLlMsIlJlZmxlY3QiLHtzZXRQcm90b3R5cGVPZjpmdW5jdGlvbihvLHUpe2UuY2hlY2sobyx1KTt0cnl7cmV0dXJuIGUuc2V0KG8sdSksITB9Y2F0Y2h7cmV0dXJuITF9fX0pfSw1MDA1NTooYyxsLHQpPT57dmFyIG49dCg5OTI3NSksZT10KDE4''@;'; put 'put ''NjkzKSxzPXQoNDY4KSxvPXQoNzkxODEpLHU9dCg0Mjk4NSksZj10KDkwNjgxKSxpPXQoMjcwMDcpLHA9dCg1NTI4Nik7dSh1LlMsIlJlZmxlY3QiLHtzZXQ6ZnVuY3Rpb24geSh2LGcseCl7dmFyIHcsUixFPWFyZ3VtZW50cy5sZW5ndGg8ND92OmFyZ3VtZW50c1szXSxqPWUuZihpKHYpLGcp''@;'; put 'put ''O2lmKCFqKXtpZihwKFI9cyh2KSkpcmV0dXJuIHkoUixnLHgsRSk7aj1mKDApfWlmKG8oaiwidmFsdWUiKSl7aWYoITE9PT1qLndyaXRhYmxlfHwhcChFKSlyZXR1cm4hMTtpZih3PWUuZihFLGcpKXtpZih3LmdldHx8dy5zZXR8fCExPT09dy53cml0YWJsZSlyZXR1cm4hMTt3LnZhbHVlPXgs''@;'; put 'put ''bi5mKEUsZyx3KX1lbHNlIG4uZihFLGcsZigwLHgpKTtyZXR1cm4hMH1yZXR1cm4gdm9pZCAwIT09ai5zZXQmJihqLnNldC5jYWxsKEUseCksITApfX0pfSw4Mzk0NjooYyxsLHQpPT57dmFyIG49dCgzODE2KSxlPXQoNDAyNjYpLHM9dCg5OTI3NSkuZixvPXQoMjA2MTYpLmYsdT10KDU1MzY0''@;'; put 'put ''KSxmPXQoNTMyMTgpLGk9bi5SZWdFeHAscD1pLHk9aS5wcm90b3R5cGUsdj0vYS9nLGc9L2EvZyx4PW5ldyBpKHYpIT09djtpZih0KDY3MDU3KSYmKCF4fHx0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybiBnW3QoODYzMTQpKCJtYXRjaCIpXT0hMSxpKHYpIT12fHxpKGcpPT1nfHwiL2EvaSIh''@;'; put 'put ''PWkodiwiaSIpfSkpKXtpPWZ1bmN0aW9uKEYsQil7dmFyIGI9dGhpcyBpbnN0YW5jZW9mIGksTz11KEYpLFM9dm9pZCAwPT09QjtyZXR1cm4hYiYmTyYmRi5jb25zdHJ1Y3Rvcj09PWkmJlM/RjplKHg/bmV3IHAoTyYmIVM/Ri5zb3VyY2U6RixCKTpwKChPPUYgaW5zdGFuY2VvZiBpKT9GLnNv''@;'; put 'put ''dXJjZTpGLE8mJlM/Zi5jYWxsKEYpOkIpLGI/dGhpczp5LGkpfTtmb3IodmFyIEU9ZnVuY3Rpb24oUil7UiBpbiBpfHxzKGksUix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwW1JdfSxzZXQ6ZnVuY3Rpb24oRil7cFtSXT1GfX0pfSxqPW8ocCksdz0wO2oubGVuZ3Ro''@;'; put 'put ''Pnc7KUUoalt3KytdKTt5LmNvbnN0cnVjdG9yPWksaS5wcm90b3R5cGU9eSx0KDc3MjM0KShuLCJSZWdFeHAiLGkpfXQoMjk3NCkoIlJlZ0V4cCIpfSwxODI2OTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjExNjUpO3QoNDI5ODUpKHt0YXJnZXQ6IlJlZ0V4cCIscHJvdG86ITAs''@;'; put 'put ''Zm9yY2VkOm4hPT0vLi8uZXhlY30se2V4ZWM6bn0pfSw3Njc3NDooYyxsLHQpPT57dCg2NzA1NykmJiJnIiE9Ly4vZy5mbGFncyYmdCg5OTI3NSkuZihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6dCg1MzIxOCl9KX0sMjE0NjY6KGMsbCx0KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgbj10KDI3MDA3KSxlPXQoMTA4NzUpLHM9dCg3Njc5Myksbz10KDI3Nzg3KTt0KDI4MDgyKSgibWF0Y2giLDEsZnVuY3Rpb24odSxmLGkscCl7cmV0dXJuW2Z1bmN0aW9uKHYpe3ZhciBnPXUodGhpcykseD12Py5bZl07cmV0dXJuIHZvaWQgMCE9PXg/eC5jYWxsKHYsZyk6''@;'; put 'put ''bmV3IFJlZ0V4cCh2KVtmXShTdHJpbmcoZykpfSxmdW5jdGlvbih5KXt2YXIgdj1wKGkseSx0aGlzKTtpZih2LmRvbmUpcmV0dXJuIHYudmFsdWU7dmFyIGc9bih5KSx4PVN0cmluZyh0aGlzKTtpZighZy5nbG9iYWwpcmV0dXJuIG8oZyx4KTt2YXIgRT1nLnVuaWNvZGU7Zy5sYXN0SW5kZXg9''@;'; put 'put ''MDtmb3IodmFyIFIsaj1bXSx3PTA7bnVsbCE9PShSPW8oZyx4KSk7KXt2YXIgRj1TdHJpbmcoUlswXSk7alt3XT1GLCIiPT09RiYmKGcubGFzdEluZGV4PXMoeCxlKGcubGFzdEluZGV4KSxFKSksdysrfXJldHVybiAwPT09dz9udWxsOmp9XX0pfSw1OTM1NzooYyxsLHQpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBuPXQoMjcwMDcpLGU9dCgyMDUwOCkscz10KDEwODc1KSxvPXQoODE0NjcpLHU9dCg3Njc5MyksZj10KDI3Nzg3KSxpPU1hdGgubWF4LHA9TWF0aC5taW4seT1NYXRoLmZsb29yLHY9L1wkKFskJmAnXXxcZFxkP3w8W14+XSo+KS9nLGc9L1wkKFskJmAnXXxcZFxkPykvZyx4PWZ1''@;'; put 'put ''bmN0aW9uKEUpe3JldHVybiB2b2lkIDA9PT1FP0U6U3RyaW5nKEUpfTt0KDI4MDgyKSgicmVwbGFjZSIsMixmdW5jdGlvbihFLGosdyxSKXtyZXR1cm5bZnVuY3Rpb24oYixPKXt2YXIgUz1FKHRoaXMpLEM9Yj8uW2pdO3JldHVybiB2b2lkIDAhPT1DP0MuY2FsbChiLFMsTyk6dy5jYWxsKFN0''@;'; put 'put ''cmluZyhTKSxiLE8pfSxmdW5jdGlvbihCLGIpe3ZhciBPPVIodyxCLHRoaXMsYik7aWYoTy5kb25lKXJldHVybiBPLnZhbHVlO3ZhciBTPW4oQiksQz1TdHJpbmcodGhpcyksSz0iZnVuY3Rpb24iPT10eXBlb2YgYjtLfHwoYj1TdHJpbmcoYikpO3ZhciBVPVMuZ2xvYmFsO2lmKFUpe3ZhciBa''@;'; put 'put ''PVMudW5pY29kZTtTLmxhc3RJbmRleD0wfWZvcih2YXIgdHQ9W107Oyl7dmFyIF89ZihTLEMpO2lmKG51bGw9PT1ffHwodHQucHVzaChfKSwhVSkpYnJlYWs7IiI9PT1TdHJpbmcoX1swXSkmJihTLmxhc3RJbmRleD11KEMscyhTLmxhc3RJbmRleCksWikpfWZvcih2YXIgc3Q9IiIsWD0wLFY9''@;'; put 'put ''MDtWPHR0Lmxlbmd0aDtWKyspe189dHRbVl07Zm9yKHZhciBRPVN0cmluZyhfWzBdKSxZPWkocChvKF8uaW5kZXgpLEMubGVuZ3RoKSwwKSxmdD1bXSx2dD0xO3Z0PF8ubGVuZ3RoO3Z0KyspZnQucHVzaCh4KF9bdnRdKSk7dmFyIE10PV8uZ3JvdXBzO2lmKEspe3ZhciBFdD1bUV0uY29uY2F0''@;'; put 'put ''KGZ0LFksQyk7dm9pZCAwIT09TXQmJkV0LnB1c2goTXQpO3ZhciBGdD1TdHJpbmcoYi5hcHBseSh2b2lkIDAsRXQpKX1lbHNlIEZ0PUYoUSxDLFksZnQsTXQsYik7WT49WCYmKHN0Kz1DLnNsaWNlKFgsWSkrRnQsWD1ZK1EubGVuZ3RoKX1yZXR1cm4gc3QrQy5zbGljZShYKX1dO2Z1bmN0aW9u''@;'; put 'put ''IEYoQixiLE8sUyxDLEspe3ZhciBVPU8rQi5sZW5ndGgsWj1TLmxlbmd0aCx0dD1nO3JldHVybiB2b2lkIDAhPT1DJiYoQz1lKEMpLHR0PXYpLHcuY2FsbChLLHR0LGZ1bmN0aW9uKF8sbnQpe3ZhciBzdDtzd2l0Y2gobnQuY2hhckF0KDApKXtjYXNlIiQiOnJldHVybiIkIjtjYXNlIiYiOnJl''@;'; put 'put ''dHVybiBCO2Nhc2UiYCI6cmV0dXJuIGIuc2xpY2UoMCxPKTtjYXNlIiciOnJldHVybiBiLnNsaWNlKFUpO2Nhc2UiPCI6c3Q9Q1tudC5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgWD0rbnQ7aWYoMD09PVgpcmV0dXJuIF87aWYoWD5aKXt2YXIgVj15KFgvMTApO3JldHVybiAwPT09''@;'; put 'put ''Vj9fOlY8PVo/dm9pZCAwPT09U1tWLTFdP250LmNoYXJBdCgxKTpTW1YtMV0rbnQuY2hhckF0KDEpOl99c3Q9U1tYLTFdfXJldHVybiB2b2lkIDA9PT1zdD8iIjpzdH0pfX0pfSw3NjE0MjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjcwMDcpLGU9dCgyNzE5NSkscz10KDI3Nzg3''@;'; put 'put ''KTt0KDI4MDgyKSgic2VhcmNoIiwxLGZ1bmN0aW9uKG8sdSxmLGkpe3JldHVybltmdW5jdGlvbih5KXt2YXIgdj1vKHRoaXMpLGc9eT8uW3VdO3JldHVybiB2b2lkIDAhPT1nP2cuY2FsbCh5LHYpOm5ldyBSZWdFeHAoeSlbdV0oU3RyaW5nKHYpKX0sZnVuY3Rpb24ocCl7dmFyIHk9aShmLHAs''@;'; put 'put ''dGhpcyk7aWYoeS5kb25lKXJldHVybiB5LnZhbHVlO3ZhciB2PW4ocCksZz1TdHJpbmcodGhpcykseD12Lmxhc3RJbmRleDtlKHgsMCl8fCh2Lmxhc3RJbmRleD0wKTt2YXIgRT1zKHYsZyk7cmV0dXJuIGUodi5sYXN0SW5kZXgseCl8fCh2Lmxhc3RJbmRleD14KSxudWxsPT09RT8tMTpFLmlu''@;'; put 'put ''ZGV4fV19KX0sNTE4NzY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDU1MzY0KSxlPXQoMjcwMDcpLHM9dCg1ODM2NCksbz10KDc2NzkzKSx1PXQoMTA4NzUpLGY9dCgyNzc4NyksaT10KDIxMTY1KSxwPXQoNzQyNTMpLHk9TWF0aC5taW4sdj1bXS5wdXNoLGc9InNwbGl0Iix4PSJs''@;'; put 'put ''ZW5ndGgiLEU9Imxhc3RJbmRleCIsaj00Mjk0OTY3Mjk1LHc9IXAoZnVuY3Rpb24oKXtSZWdFeHAoaiwieSIpfSk7dCgyODA4MikoInNwbGl0IiwyLGZ1bmN0aW9uKFIsRixCLGIpe3ZhciBPO3JldHVybiBPPSJjIj09ImFiYmMiW2ddKC8oYikqLylbMV18fDQhPSJ0ZXN0IltnXSgvKD86KS8s''@;'; put 'put ''LTEpW3hdfHwyIT0iYWIiW2ddKC8oPzphYikqLylbeF18fDQhPSIuIltnXSgvKC4/KSguPykvKVt4XXx8Ii4iW2ddKC8oKSgpLylbeF0+MXx8IiJbZ10oLy4/LylbeF0/ZnVuY3Rpb24oUyxDKXt2YXIgSz1TdHJpbmcodGhpcyk7aWYodm9pZCAwPT09UyYmMD09PUMpcmV0dXJuW107aWYoIW4o''@;'; put 'put ''UykpcmV0dXJuIEIuY2FsbChLLFMsQyk7Zm9yKHZhciBzdCxYLFYsVT1bXSx0dD0wLF89dm9pZCAwPT09Qz9qOkM+Pj4wLG50PW5ldyBSZWdFeHAoUy5zb3VyY2UsKFMuaWdub3JlQ2FzZT8iaSI6IiIpKyhTLm11bHRpbGluZT8ibSI6IiIpKyhTLnVuaWNvZGU/InUiOiIiKSsoUy5zdGlja3k/''@;'; put 'put ''InkiOiIiKSsiZyIpOyhzdD1pLmNhbGwobnQsSykpJiYhKChYPW50W0VdKT50dCYmKFUucHVzaChLLnNsaWNlKHR0LHN0LmluZGV4KSksc3RbeF0+MSYmc3QuaW5kZXg8S1t4XSYmdi5hcHBseShVLHN0LnNsaWNlKDEpKSxWPXN0WzBdW3hdLHR0PVgsVVt4XT49XykpOyludFtFXT09PXN0Lmlu''@;'; put 'put ''ZGV4JiZudFtFXSsrO3JldHVybiB0dD09PUtbeF0/KFZ8fCFudC50ZXN0KCIiKSkmJlUucHVzaCgiIik6VS5wdXNoKEsuc2xpY2UodHQpKSxVW3hdPl8/VS5zbGljZSgwLF8pOlV9OiIwIltnXSh2b2lkIDAsMClbeF0/ZnVuY3Rpb24oUyxDKXtyZXR1cm4gdm9pZCAwPT09UyYmMD09PUM/W106''@;'; put 'put ''Qi5jYWxsKHRoaXMsUyxDKX06QixbZnVuY3Rpb24oQyxLKXt2YXIgVT1SKHRoaXMpLFo9Qz8uW0ZdO3JldHVybiB2b2lkIDAhPT1aP1ouY2FsbChDLFUsSyk6Ty5jYWxsKFN0cmluZyhVKSxDLEspfSxmdW5jdGlvbihTLEMpe3ZhciBLPWIoTyxTLHRoaXMsQyxPIT09Qik7aWYoSy5kb25lKXJl''@;'; put 'put ''dHVybiBLLnZhbHVlO3ZhciBVPWUoUyksWj1TdHJpbmcodGhpcyksdHQ9cyhVLFJlZ0V4cCksXz1VLnVuaWNvZGUsc3Q9bmV3IHR0KHc/VToiXig/OiIrVS5zb3VyY2UrIikiLChVLmlnbm9yZUNhc2U/ImkiOiIiKSsoVS5tdWx0aWxpbmU/Im0iOiIiKSsoVS51bmljb2RlPyJ1IjoiIikrKHc/''@;'; put 'put ''InkiOiJnIikpLFg9dm9pZCAwPT09Qz9qOkM+Pj4wO2lmKDA9PT1YKXJldHVybltdO2lmKDA9PT1aLmxlbmd0aClyZXR1cm4gbnVsbD09PWYoc3QsWik/W1pdOltdO2Zvcih2YXIgVj0wLFE9MCxZPVtdO1E8Wi5sZW5ndGg7KXtzdC5sYXN0SW5kZXg9dz9ROjA7dmFyIHZ0LGZ0PWYoc3Qsdz9a''@;'; put 'put ''Olouc2xpY2UoUSkpO2lmKG51bGw9PT1mdHx8KHZ0PXkodShzdC5sYXN0SW5kZXgrKHc/MDpRKSksWi5sZW5ndGgpKT09PVYpUT1vKFosUSxfKTtlbHNle2lmKFkucHVzaChaLnNsaWNlKFYsUSkpLFkubGVuZ3RoPT09WClyZXR1cm4gWTtmb3IodmFyIE10PTE7TXQ8PWZ0Lmxlbmd0aC0xO010''@;'; put 'put ''KyspaWYoWS5wdXNoKGZ0W010XSksWS5sZW5ndGg9PT1YKXJldHVybiBZO1E9Vj12dH19cmV0dXJuIFkucHVzaChaLnNsaWNlKFYpKSxZfV19KX0sNjYxMDg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDc2Nzc0KTt2YXIgbj10KDI3MDA3KSxlPXQoNTMyMTgpLHM9dCg2NzA1Nyksbz0idG9T''@;'; put 'put ''dHJpbmciLHU9Ly4vW29dLGY9ZnVuY3Rpb24oaSl7dCg3NzIzNCkoUmVnRXhwLnByb3RvdHlwZSxvLGksITApfTt0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybiIvYS9iIiE9dS5jYWxsKHtzb3VyY2U6ImEiLGZsYWdzOiJiIn0pfSk/ZihmdW5jdGlvbigpe3ZhciBwPW4odGhpcyk7cmV0dXJu''@;'; put 'put ''Ii8iLmNvbmNhdChwLnNvdXJjZSwiLyIsImZsYWdzImluIHA/cC5mbGFnczohcyYmcCBpbnN0YW5jZW9mIFJlZ0V4cD9lLmNhbGwocCk6dm9pZCAwKX0pOnUubmFtZSE9byYmZihmdW5jdGlvbigpe3JldHVybiB1LmNhbGwodGhpcyl9KX0sOTgxODQ6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgbj10KDk4MjQpLGU9dCgxNjE2KTtjLmV4cG9ydHM9dCg0NTc5NSkoIlNldCIsZnVuY3Rpb24obyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKHUpe3JldHVybiBuLmRlZihl''@;'; put 'put ''KHRoaXMsIlNldCIpLHU9MD09PXU/MDp1LHUpfX0sbil9LDQwODU2OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgyOTM5NSkoImFuY2hvciIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRoaXMsImEiLCJuYW1lIixzKX19KX0sODA3MDM6KGMsbCx0KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt0KDI5Mzk1KSgiYmlnIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJiaWciLCIiLCIiKX19KX0sOTE1Mzk6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDI5Mzk1KSgiYmxpbmsiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBuKHRoaXMsImJsaW5rIiwiIiwiIil9fSl9LDUyOTI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDI5Mzk1KSgiYm9sZCIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywiYiIsIiIsIiIpfX0pfSwyOTUzOTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBu''@;'; put 'put ''PXQoNDI5ODUpLGU9dCgyNDQ5NikoITEpO24obi5QLCJTdHJpbmciLHtjb2RlUG9pbnRBdDpmdW5jdGlvbihvKXtyZXR1cm4gZSh0aGlzLG8pfX0pfSw5NjYyMDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI5ODUpLGU9dCgxMDg3NSkscz10KDQyMDk0KSxvPSJlbmRzV2l0aCIs''@;'; put 'put ''dT0iIltvXTtuKG4uUCtuLkYqdCg4ODUyKShvKSwiU3RyaW5nIix7ZW5kc1dpdGg6ZnVuY3Rpb24oaSl7dmFyIHA9cyh0aGlzLGksbykseT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx2PWUocC5sZW5ndGgpLGc9dm9pZCAwPT09eT92Ok1hdGgubWluKGUoeSksdiks''@;'; put 'put ''eD1TdHJpbmcoaSk7cmV0dXJuIHU/dS5jYWxsKHAseCxnKTpwLnNsaWNlKGcteC5sZW5ndGgsZyk9PT14fX0pfSw0NTE3NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoMjkzOTUpKCJmaXhlZCIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywidHQiLCIiLCIi''@;'; put 'put ''KX19KX0sNzM2OTQ6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDI5Mzk1KSgiZm9udGNvbG9yIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4odGhpcywiZm9udCIsImNvbG9yIixzKX19KX0sMzc2NDg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDI5Mzk1KSgiZm9u''@;'; put 'put ''dHNpemUiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJmb250Iiwic2l6ZSIscyl9fSl9LDUwMTkxOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KSxlPXQoOTIzMzcpLHM9U3RyaW5nLmZyb21DaGFyQ29kZSxvPVN0cmluZy5mcm9tQ29kZVBvaW50O24obi5T''@;'; put 'put ''K24uRiooISFvJiYxIT1vLmxlbmd0aCksIlN0cmluZyIse2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24oZil7Zm9yKHZhciB2LGk9W10scD1hcmd1bWVudHMubGVuZ3RoLHk9MDtwPnk7KXtpZih2PSthcmd1bWVudHNbeSsrXSxlKHYsMTExNDExMSkhPT12KXRocm93IFJhbmdlRXJyb3IodisiIGlz''@;'; put 'put ''IG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQiKTtpLnB1c2godjw2NTUzNj9zKHYpOnMoNTUyOTYrKCh2LT02NTUzNik+PjEwKSx2JTEwMjQrNTYzMjApKX1yZXR1cm4gaS5qb2luKCIiKX19KX0sNjI4NTA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoNDIwOTQpLHM9''@;'; put 'put ''ImluY2x1ZGVzIjtuKG4uUCtuLkYqdCg4ODUyKShzKSwiU3RyaW5nIix7aW5jbHVkZXM6ZnVuY3Rpb24odSl7cmV0dXJuISF+ZSh0aGlzLHUscykuaW5kZXhPZih1LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMjc3OTU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt0KDI5Mzk1KSgiaXRhbGljcyIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywiaSIsIiIsIiIpfX0pfSwzOTExNTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjQ0OTYpKCEwKTt0KDQyOTIzKShTdHJpbmcsIlN0cmluZyIsZnVuY3Rpb24oZSl7''@;'; put 'put ''dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciBvLGU9dGhpcy5fdCxzPXRoaXMuX2k7cmV0dXJuIHM+PWUubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KG89bihlLHMpLHRoaXMuX2krPW8ubGVuZ3RoLHt2YWx1ZTpvLGRvbmU6ITF9KX0pfSw0NTMxOihj''@;'; put 'put ''LGwsdCk9PnsidXNlIHN0cmljdCI7dCgyOTM5NSkoImxpbmsiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJhIiwiaHJlZiIscyl9fSl9LDk4MzA2OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KSxlPXQoMjIxMTApLHM9dCgxMDg3NSk7bihuLlMsIlN0cmlu''@;'; put 'put ''ZyIse3JhdzpmdW5jdGlvbih1KXtmb3IodmFyIGY9ZSh1LnJhdyksaT1zKGYubGVuZ3RoKSxwPWFyZ3VtZW50cy5sZW5ndGgseT1bXSx2PTA7aT52Oyl5LnB1c2goU3RyaW5nKGZbdisrXSkpLHY8cCYmeS5wdXNoKFN0cmluZyhhcmd1bWVudHNbdl0pKTtyZXR1cm4geS5qb2luKCIiKX19KX0s''@;'; put 'put ''MTA4MjM6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5QLCJTdHJpbmciLHtyZXBlYXQ6dCg2ODU5NSl9KX0sMjM2MDU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDI5Mzk1KSgic21hbGwiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInNtYWxsIiwi''@;'; put 'put ''IiwiIil9fSl9LDE3NzMyOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Mjk4NSksZT10KDEwODc1KSxzPXQoNDIwOTQpLG89InN0YXJ0c1dpdGgiLHU9IiJbb107bihuLlArbi5GKnQoODg1MikobyksIlN0cmluZyIse3N0YXJ0c1dpdGg6ZnVuY3Rpb24oaSl7dmFyIHA9cyh0aGlz''@;'; put 'put ''LGksbykseT1lKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHAubGVuZ3RoKSksdj1TdHJpbmcoaSk7cmV0dXJuIHU/dS5jYWxsKHAsdix5KTpwLnNsaWNlKHkseSt2Lmxlbmd0aCk9PT12fX0pfSw2NzgwOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgy''@;'; put 'put ''OTM5NSkoInN0cmlrZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywic3RyaWtlIiwiIiwiIil9fSl9LDY5OTM3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgyOTM5NSkoInN1YiIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhp''@;'; put 'put ''cywic3ViIiwiIiwiIil9fSl9LDEwNTExOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgyOTM5NSkoInN1cCIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywic3VwIiwiIiwiIil9fSl9LDY0NTY0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgyOTU5OSkoInRy''@;'; put 'put ''aW0iLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsMyl9fSl9LDk1NzY3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgzODE2KSxlPXQoNzkxODEpLHM9dCg2NzA1Nyksbz10KDQyOTg1KSx1PXQoNzcyMzQpLGY9dCg4NDcyOCkuS0VZLGk9dCg3NDI1''@;'; put 'put ''MykscD10KDM4MjUpLHk9dCgyMjk0Myksdj10KDkzOTUzKSxnPXQoODYzMTQpLHg9dCgyODc4NyksRT10KDM2MDc0KSxqPXQoNTU0MSksdz10KDQzMDIpLFI9dCgyNzAwNyksRj10KDU1Mjg2KSxCPXQoMjA1MDgpLGI9dCgyMjExMCksTz10KDIxNjg5KSxTPXQoOTA2ODEpLEM9dCg0MjUwMyks''@;'; put 'put ''Sz10KDM5MzI3KSxVPXQoMTg2OTMpLFo9dCg2NDU0OCksdHQ9dCg5OTI3NSksXz10KDQ3MTg0KSxudD1VLmYsc3Q9dHQuZixYPUsuZixWPW4uU3ltYm9sLFE9bi5KU09OLFk9USYmUS5zdHJpbmdpZnksZnQ9InByb3RvdHlwZSIsdnQ9ZygiX2hpZGRlbiIpLE10PWcoInRvUHJpbWl0aXZlIiks''@;'; put 'put ''RXQ9e30ucHJvcGVydHlJc0VudW1lcmFibGUsRnQ9cCgic3ltYm9sLXJlZ2lzdHJ5IiksanQ9cCgic3ltYm9scyIpLFh0PXAoIm9wLXN5bWJvbHMiKSxCdD1PYmplY3RbZnRdLFF0PSJmdW5jdGlvbiI9PXR5cGVvZiBWJiYhIVouZixybj1uLlFPYmplY3Qsbm49IXJufHwhcm5bZnRdfHwhcm5b''@;'; put 'put ''ZnRdLmZpbmRDaGlsZCxhbj1zJiZpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPUMoc3Qoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc3QodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24oSSxULEEpe3ZhciBrPW50KEJ0LFQpO2smJmRlbGV0ZSBCdFtUXSxzdChJLFQs''@;'; put 'put ''QSksayYmSSE9PUJ0JiZzdChCdCxULGspfTpzdCxmbj1mdW5jdGlvbihJKXt2YXIgVD1qdFtJXT1DKFZbZnRdKTtyZXR1cm4gVC5faz1JLFR9LG9uPVF0JiYic3ltYm9sIj09dHlwZW9mIFYuaXRlcmF0b3I/ZnVuY3Rpb24oSSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBJfTpmdW5jdGlvbihJ''@;'; put 'put ''KXtyZXR1cm4gSSBpbnN0YW5jZW9mIFZ9LFl0PWZ1bmN0aW9uKFQsQSxrKXtyZXR1cm4gVD09PUJ0JiZZdChYdCxBLGspLFIoVCksQT1PKEEsITApLFIoayksZShqdCxBKT8oay5lbnVtZXJhYmxlPyhlKFQsdnQpJiZUW3Z0XVtBXSYmKFRbdnRdW0FdPSExKSxrPUMoayx7ZW51bWVyYWJsZTpT''@;'; put 'put ''KDAsITEpfSkpOihlKFQsdnQpfHxzdChULHZ0LFMoMSx7fSkpLFRbdnRdW0FdPSEwKSxhbihULEEsaykpOnN0KFQsQSxrKX0sWnQ9ZnVuY3Rpb24oVCxBKXtSKFQpO2Zvcih2YXIgb3Qsaz1qKEE9YihBKSksSj0wLHo9ay5sZW5ndGg7ej5KOylZdChULG90PWtbSisrXSxBW290XSk7cmV0dXJu''@;'; put 'put ''IFR9LGxuPWZ1bmN0aW9uKFQpe3ZhciBBPUV0LmNhbGwodGhpcyxUPU8oVCwhMCkpO3JldHVybiEodGhpcz09PUJ0JiZlKGp0LFQpJiYhZShYdCxUKSkmJighKEF8fCFlKHRoaXMsVCl8fCFlKGp0LFQpfHxlKHRoaXMsdnQpJiZ0aGlzW3Z0XVtUXSl8fEEpfSxkPWZ1bmN0aW9uKFQsQSl7aWYo''@;'; put 'put ''VD1iKFQpLEE9TyhBLCEwKSxUIT09QnR8fCFlKGp0LEEpfHxlKFh0LEEpKXt2YXIgaz1udChULEEpO3JldHVybiBrJiZlKGp0LEEpJiYhKGUoVCx2dCkmJlRbdnRdW0FdKSYmKGsuZW51bWVyYWJsZT0hMCksa319LHI9ZnVuY3Rpb24oVCl7Zm9yKHZhciB6LEE9WChiKFQpKSxrPVtdLEo9MDtB''@;'; put 'put ''Lmxlbmd0aD5KOykhZShqdCx6PUFbSisrXSkmJnohPXZ0JiZ6IT1mJiZrLnB1c2goeik7cmV0dXJuIGt9LGE9ZnVuY3Rpb24oVCl7Zm9yKHZhciBvdCxBPVQ9PT1CdCxrPVgoQT9YdDpiKFQpKSxKPVtdLHo9MDtrLmxlbmd0aD56OyllKGp0LG90PWtbeisrXSkmJighQXx8ZShCdCxvdCkpJiZK''@;'; put 'put ''LnB1c2goanRbb3RdKTtyZXR1cm4gSn07UXR8fCh1KChWPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFYpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhIik7dmFyIFQ9dihhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksQT1m''@;'; put 'put ''dW5jdGlvbihrKXt0aGlzPT09QnQmJkEuY2FsbChYdCxrKSxlKHRoaXMsdnQpJiZlKHRoaXNbdnRdLFQpJiYodGhpc1t2dF1bVF09ITEpLGFuKHRoaXMsVCxTKDEsaykpfTtyZXR1cm4gcyYmbm4mJmFuKEJ0LFQse2NvbmZpZ3VyYWJsZTohMCxzZXQ6QX0pLGZuKFQpfSlbZnRdLCJ0b1N0cmlu''@;'; put 'put ''ZyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLFUuZj1kLHR0LmY9WXQsdCgyMDYxNikuZj1LLmY9cix0KDE0NjgyKS5mPWxuLFouZj1hLHMmJiF0KDQ0NjEpJiZ1KEJ0LCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsbG4sITApLHguZj1mdW5jdGlvbihJKXtyZXR1cm4gZm4oZyhJKSl9KSxv''@;'; put 'put ''KG8uRytvLlcrby5GKiFRdCx7U3ltYm9sOlZ9KTtmb3IodmFyIG09Imhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzIi5zcGxpdCgiLCIpLEQ9''@;'; put 'put ''MDttLmxlbmd0aD5EOylnKG1bRCsrXSk7Zm9yKHZhciAkPV8oZy5zdG9yZSksaD0wOyQubGVuZ3RoPmg7KUUoJFtoKytdKTtvKG8uUytvLkYqIVF0LCJTeW1ib2wiLHtmb3I6ZnVuY3Rpb24oSSl7cmV0dXJuIGUoRnQsSSs9IiIpP0Z0W0ldOkZ0W0ldPVYoSSl9LGtleUZvcjpmdW5jdGlvbihU''@;'; put 'put ''KXtpZighb24oVCkpdGhyb3cgVHlwZUVycm9yKFQrIiBpcyBub3QgYSBzeW1ib2whIik7Zm9yKHZhciBBIGluIEZ0KWlmKEZ0W0FdPT09VClyZXR1cm4gQX0sdXNlU2V0dGVyOmZ1bmN0aW9uKCl7bm49ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe25uPSExfX0pLG8oby5TK28uRiohUXQsIk9i''@;'; put 'put ''amVjdCIse2NyZWF0ZTpmdW5jdGlvbihULEEpe3JldHVybiB2b2lkIDA9PT1BP0MoVCk6WnQoQyhUKSxBKX0sZGVmaW5lUHJvcGVydHk6WXQsZGVmaW5lUHJvcGVydGllczpadCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZCxnZXRPd25Qcm9wZXJ0eU5hbWVzOnIsZ2V0T3duUHJvcGVydHlT''@;'; put 'put ''eW1ib2xzOmF9KTt2YXIgUD1pKGZ1bmN0aW9uKCl7Wi5mKDEpfSk7byhvLlMrby5GKlAsIk9iamVjdCIse2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbihUKXtyZXR1cm4gWi5mKEIoVCkpfX0pLFEmJm8oby5TK28uRiooIVF0fHxpKGZ1bmN0aW9uKCl7dmFyIEk9VigpO3JldHVybiJb''@;'; put 'put ''bnVsbF0iIT1ZKFtJXSl8fCJ7fSIhPVkoe2E6SX0pfHwie30iIT1ZKE9iamVjdChJKSl9KSksIkpTT04iLHtzdHJpbmdpZnk6ZnVuY3Rpb24oVCl7Zm9yKHZhciBKLHosQT1bVF0saz0xO2FyZ3VtZW50cy5sZW5ndGg+azspQS5wdXNoKGFyZ3VtZW50c1trKytdKTtpZih6PUo9QVsxXSwoRihK''@;'; put 'put ''KXx8dm9pZCAwIT09VCkmJiFvbihUKSlyZXR1cm4gdyhKKXx8KEo9ZnVuY3Rpb24ob3QsY3Qpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB6JiYoY3Q9ei5jYWxsKHRoaXMsb3QsY3QpKSwhb24oY3QpKXJldHVybiBjdH0pLEFbMV09SixZLmFwcGx5KFEsQSl9fSksVltmdF1bTXRdfHx0KDg3NzI4''@;'; put 'put ''KShWW2Z0XSxNdCxWW2Z0XS52YWx1ZU9mKSx5KFYsIlN5bWJvbCIpLHkoTWF0aCwiTWF0aCIsITApLHkobi5KU09OLCJKU09OIiwhMCl9LDMwMTQ3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIHcsbj10KDM4MTYpLGU9dCgxMDA1MCkoMCkscz10KDc3MjM0KSxvPXQoODQ3MjgpLHU9dCgz''@;'; put 'put ''NTM0NSksZj10KDIzNjU3KSxpPXQoNTUyODYpLHA9dCgxNjE2KSx5PXQoMTYxNiksdj0hbi5BY3RpdmVYT2JqZWN0JiYiQWN0aXZlWE9iamVjdCJpbiBuLGc9IldlYWtNYXAiLHg9by5nZXRXZWFrLEU9T2JqZWN0LmlzRXh0ZW5zaWJsZSxqPWYudWZzdG9yZSxSPWZ1bmN0aW9uKGIpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbigpe3JldHVybiBiKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sRj17Z2V0OmZ1bmN0aW9uKE8pe2lmKGkoTykpe3ZhciBTPXgoTyk7cmV0dXJuITA9PT1TP2oocCh0aGlzLGcpKS5nZXQoTyk6Uz9TW3RoaXMuX2ldOnZvaWQgMH19LHNl''@;'; put 'put ''dDpmdW5jdGlvbihPLFMpe3JldHVybiBmLmRlZihwKHRoaXMsZyksTyxTKX19LEI9Yy5leHBvcnRzPXQoNDU3OTUpKGcsUixGLGYsITAsITApO3kmJnYmJih1KCh3PWYuZ2V0Q29uc3RydWN0b3IoUixnKSkucHJvdG90eXBlLEYpLG8uTkVFRD0hMCxlKFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwi''@;'; put 'put ''c2V0Il0sZnVuY3Rpb24oYil7dmFyIE89Qi5wcm90b3R5cGUsUz1PW2JdO3MoTyxiLGZ1bmN0aW9uKEMsSyl7aWYoaShDKSYmIUUoQykpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyB3KTt2YXIgVT10aGlzLl9mW2JdKEMsSyk7cmV0dXJuInNldCI9PWI/dGhpczpVfXJldHVybiBTLmNhbGwodGhp''@;'; put 'put ''cyxDLEspfSl9KSl9LDUzMzY0OihjLGwsdCk9Pnt2YXIgbj10KDUwMTMzKSxlPXQoMjcwMDcpLHM9bi5rZXksbz1uLnNldDtuLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24oZixpLHAseSl7byhmLGksZShwKSxzKHkpKX19KX0sNTE0MzI6KGMsbCx0KT0+e3ZhciBuPXQoNTAxMzMpLGU9''@;'; put 'put ''dCgyNzAwNykscz1uLmtleSxvPW4ubWFwLHU9bi5zdG9yZTtuLmV4cCh7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24oaSxwKXt2YXIgeT1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnMoYXJndW1lbnRzWzJdKSx2PW8oZShwKSx5LCExKTtpZih2b2lkIDA9PT12fHwhdi5kZWxldGUoaSkpcmV0''@;'; put 'put ''dXJuITE7aWYodi5zaXplKXJldHVybiEwO3ZhciBnPXUuZ2V0KHApO3JldHVybiBnLmRlbGV0ZSh5KSwhIWcuc2l6ZXx8dS5kZWxldGUocCl9fSl9LDg0NDE2OihjLGwsdCk9Pnt2YXIgbj10KDk4MTg0KSxlPXQoOTQ5MCkscz10KDUwMTMzKSxvPXQoMjcwMDcpLHU9dCg0NjgpLGY9cy5rZXlz''@;'; put 'put ''LGk9cy5rZXkscD1mdW5jdGlvbih5LHYpe3ZhciBnPWYoeSx2KSx4PXUoeSk7aWYobnVsbD09PXgpcmV0dXJuIGc7dmFyIEU9cCh4LHYpO3JldHVybiBFLmxlbmd0aD9nLmxlbmd0aD9lKG5ldyBuKGcuY29uY2F0KEUpKSk6RTpnfTtzLmV4cCh7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHYp''@;'; put 'put ''e3JldHVybiBwKG8odiksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDppKGFyZ3VtZW50c1sxXSkpfX0pfSwyNjU2MjooYyxsLHQpPT57dmFyIG49dCg1MDEzMyksZT10KDI3MDA3KSxzPXQoNDY4KSxvPW4uaGFzLHU9bi5nZXQsZj1uLmtleSxpPWZ1bmN0aW9uKHAseSx2KXtpZihvKHAseSx2''@;'; put 'put ''KSlyZXR1cm4gdShwLHksdik7dmFyIHg9cyh5KTtyZXR1cm4gbnVsbCE9PXg/aShwLHgsdik6dm9pZCAwfTtuLmV4cCh7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24oeSx2KXtyZXR1cm4gaSh5LGUodiksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpmKGFyZ3VtZW50c1syXSkpfX0pfSwzMjIxMzoo''@;'; put 'put ''YyxsLHQpPT57dmFyIG49dCg1MDEzMyksZT10KDI3MDA3KSxzPW4ua2V5cyxvPW4ua2V5O24uZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24oZil7cmV0dXJuIHMoZShmKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOm8oYXJndW1lbnRzWzFdKSl9fSl9LDk4NjgxOihjLGwsdCk9''@;'; put 'put ''Pnt2YXIgbj10KDUwMTMzKSxlPXQoMjcwMDcpLHM9bi5nZXQsbz1uLmtleTtuLmV4cCh7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24oZixpKXtyZXR1cm4gcyhmLGUoaSksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpvKGFyZ3VtZW50c1syXSkpfX0pfSw2MzQ3MTooYyxsLHQpPT57dmFyIG49''@;'; put 'put ''dCg1MDEzMyksZT10KDI3MDA3KSxzPXQoNDY4KSxvPW4uaGFzLHU9bi5rZXksZj1mdW5jdGlvbihpLHAseSl7aWYobyhpLHAseSkpcmV0dXJuITA7dmFyIGc9cyhwKTtyZXR1cm4gbnVsbCE9PWcmJmYoaSxnLHkpfTtuLmV4cCh7aGFzTWV0YWRhdGE6ZnVuY3Rpb24ocCx5KXtyZXR1cm4gZihw''@;'; put 'put ''LGUoeSksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDp1KGFyZ3VtZW50c1syXSkpfX0pfSw0MzI5OihjLGwsdCk9Pnt2YXIgbj10KDUwMTMzKSxlPXQoMjcwMDcpLHM9bi5oYXMsbz1uLmtleTtuLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24oZixpKXtyZXR1cm4gcyhmLGUoaSksYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpvKGFyZ3VtZW50c1syXSkpfX0pfSwyNTE1OTooYyxsLHQpPT57dmFyIG49dCg1MDEzMyksZT10KDI3MDA3KSxzPXQoMjQ5NjMpLG89bi5rZXksdT1uLnNldDtuLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24oaSxwKXtyZXR1cm4gZnVuY3Rpb24odixnKXt1''@;'; put 'put ''KGkscCwodm9pZCAwIT09Zz9lOnMpKHYpLG8oZykpfX19KX0sOTExODE6KGMsbCx0KT0+e2Zvcih2YXIgbj10KDU2OTk3KSxlPXQoNDcxODQpLHM9dCg3NzIzNCksbz10KDM4MTYpLHU9dCg4NzcyOCksZj10KDg3MjM0KSxpPXQoODYzMTQpLHA9aSgiaXRlcmF0b3IiKSx5PWkoInRvU3RyaW5n''@;'; put 'put ''VGFnIiksdj1mLkFycmF5LGc9e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERhdGFUcmFuc2Zlckl0ZW1MaXN0OiExLEZp''@;'; put 'put ''bGVMaXN0OiExLEhUTUxBbGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxpc3Q6ITAsUGFpbnRSZXF1ZXN0TGlzdDoh''@;'; put 'put ''MSxQbHVnaW46ITEsUGx1Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVmZmVyTGlzdDohMSxTdHlsZVNoZWV0TGlz''@;'; put 'put ''dDohMCxUZXh0VHJhY2tDdWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSx4PWUoZyksRT0wO0U8eC5sZW5ndGg7RSsrKXt2YXIgQixqPXhbRV0sdz1nW2pdLFI9b1tqXSxGPVImJlIucHJvdG90eXBlO2lmKEYmJihGW3BdfHx1KEYscCx2KSxGW3ldfHx1KEYseSxqKSxm''@;'; put 'put ''W2pdPXYsdykpZm9yKEIgaW4gbilGW0JdfHxzKEYsQixuW0JdLCEwKX19LDEyMDMwOmM9PnsidXNlIHN0cmljdCI7Yy5leHBvcnRzPUpTT04ucGFyc2UoJ3sibG9jYWxlIjoiZW4iLCJkYXRlIjp7ImNhIjpbImdyZWdvcnkiLCJidWRkaGlzdCIsImNoaW5lc2UiLCJjb3B0aWMiLCJkYW5naSIs''@;'; put 'put ''ImV0aGlvYWEiLCJldGhpb3BpYyIsImdlbmVyaWMiLCJoZWJyZXciLCJpbmRpYW4iLCJpc2xhbWljIiwiaXNsYW1pY2MiLCJqYXBhbmVzZSIsInBlcnNpYW4iLCJyb2MiXSwiaG91ck5vMCI6dHJ1ZSwiaG91cjEyIjp0cnVlLCJmb3JtYXRzIjp7InNob3J0IjoiezF9LCB7MH0iLCJtZWRpdW0i''@;'; put 'put ''OiJ7MX0sIHswfSIsImZ1bGwiOiJ7MX0gXCdhdFwnIHswfSIsImxvbmciOiJ7MX0gXCdhdFwnIHswfSIsImF2YWlsYWJsZUZvcm1hdHMiOnsiZCI6ImQiLCJFIjoiY2NjIiwiRWQiOiJkIEUiLCJFaG0iOiJFIGg6bW0gYSIsIkVIbSI6IkUgSEg6bW0iLCJFaG1zIjoiRSBoOm1tOnNzIGEiLCJF''@;'; put 'put ''SG1zIjoiRSBISDptbTpzcyIsIkd5IjoieSBHIiwiR3lNTU0iOiJNTU0geSBHIiwiR3lNTU1kIjoiTU1NIGQsIHkgRyIsIkd5TU1NRWQiOiJFLCBNTU0gZCwgeSBHIiwiaCI6ImggYSIsIkgiOiJISCIsImhtIjoiaDptbSBhIiwiSG0iOiJISDptbSIsImhtcyI6Img6bW06c3MgYSIsIkhtcyI6''@;'; put 'put ''IkhIOm1tOnNzIiwiaG1zdiI6Img6bW06c3MgYSB2IiwiSG1zdiI6IkhIOm1tOnNzIHYiLCJobXYiOiJoOm1tIGEgdiIsIkhtdiI6IkhIOm1tIHYiLCJNIjoiTCIsIk1kIjoiTS9kIiwiTUVkIjoiRSwgTS9kIiwiTU1NIjoiTExMIiwiTU1NZCI6Ik1NTSBkIiwiTU1NRWQiOiJFLCBNTU0gZCIs''@;'; put 'put ''Ik1NTU1kIjoiTU1NTSBkIiwibXMiOiJtbTpzcyIsInkiOiJ5IiwieU0iOiJNL3kiLCJ5TWQiOiJNL2QveSIsInlNRWQiOiJFLCBNL2QveSIsInlNTU0iOiJNTU0geSIsInlNTU1kIjoiTU1NIGQsIHkiLCJ5TU1NRWQiOiJFLCBNTU0gZCwgeSIsInlNTU1NIjoiTU1NTSB5IiwieVFRUSI6IlFR''@;'; put 'put ''USB5IiwieVFRUVEiOiJRUVFRIHkifSwiZGF0ZUZvcm1hdHMiOnsieU1NTU1FRUVFZCI6IkVFRUUsIE1NTU0gZCwgeSIsInlNTU1NZCI6Ik1NTU0gZCwgeSIsInlNTU1kIjoiTU1NIGQsIHkiLCJ5TWQiOiJNL2QveXkifSwidGltZUZvcm1hdHMiOnsiaG1tc3N6enp6IjoiaDptbTpzcyBhIHp6''@;'; put 'put ''enoiLCJobXN6IjoiaDptbTpzcyBhIHoiLCJobXMiOiJoOm1tOnNzIGEiLCJobSI6Img6bW0gYSJ9fSwiY2FsZW5kYXJzIjp7ImJ1ZGRoaXN0Ijp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0IjpbIkph''@;'; put 'put ''biIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIi''@;'; put 'put ''LCJOb3ZlbWJlciIsIkRlY2VtYmVyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRu''@;'; put 'put ''ZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJCRSJdLCJzaG9ydCI6WyJCRSJdLCJsb25nIjpbIkJFIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJjaGluZXNlIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIs''@;'; put 'put ''IjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk1vMSIsIk1vMiIsIk1vMyIsIk1vNCIsIk1vNSIsIk1vNiIsIk1vNyIsIk1vOCIsIk1vOSIsIk1vMTAiLCJNbzExIiwiTW8xMiJdLCJsb25nIjpbIk1vbnRoMSIsIk1vbnRoMiIsIk1vbnRo''@;'; put 'put ''MyIsIk1vbnRoNCIsIk1vbnRoNSIsIk1vbnRoNiIsIk1vbnRoNyIsIk1vbnRoOCIsIk1vbnRoOSIsIk1vbnRoMTAiLCJNb250aDExIiwiTW9udGgxMiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJX''@;'; put 'put ''ZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiY29wdGljIjp7Im1vbnRocyI6eyJuYXJy''@;'; put 'put ''b3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiXSwic2hvcnQiOlsiVG91dCIsIkJhYmEiLCJIYXRvciIsIktpYWhrIiwiVG9iYSIsIkFtc2hpciIsIkJhcmFtaGF0IiwiQmFyYW1vdWRhIiwiQmFzaGFucyIsIlBhb25hIiwiRXBlcCIs''@;'; put 'put ''Ik1lc3JhIiwiTmFzaWUiXSwibG9uZyI6WyJUb3V0IiwiQmFiYSIsIkhhdG9yIiwiS2lhaGsiLCJUb2JhIiwiQW1zaGlyIiwiQmFyYW1oYXQiLCJCYXJhbW91ZGEiLCJCYXNoYW5zIiwiUGFvbmEiLCJFcGVwIiwiTWVzcmEiLCJOYXNpZSJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJU''@;'; put 'put ''IiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJy''@;'; put 'put ''b3ciOlsiRVJBMCIsIkVSQTEiXSwic2hvcnQiOlsiRVJBMCIsIkVSQTEiXSwibG9uZyI6WyJFUkEwIiwiRVJBMSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZGFuZ2kiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIs''@;'; put 'put ''IjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTW8xIiwiTW8yIiwiTW8zIiwiTW80IiwiTW81IiwiTW82IiwiTW83IiwiTW84IiwiTW85IiwiTW8xMCIsIk1vMTEiLCJNbzEyIl0sImxvbmciOlsiTW9udGgxIiwiTW9udGgyIiwiTW9udGgzIiwiTW9udGg0IiwiTW9udGg1IiwiTW9udGg2''@;'; put 'put ''IiwiTW9udGg3IiwiTW9udGg4IiwiTW9udGg5IiwiTW9udGgxMCIsIk1vbnRoMTEiLCJNb250aDEyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25n''@;'; put 'put ''IjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJldGhpb3BpYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1Iiwi''@;'; put 'put ''NiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIl0sInNob3J0IjpbIk1lc2tlcmVtIiwiVGVrZW10IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl0sImxv''@;'; put 'put ''bmciOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNhcyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIs''@;'; put 'put ''IlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkVSQTAiLCJF''@;'; put 'put ''UkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImV0aGlvYWEiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjEx''@;'; put 'put ''IiwiMTIiLCIxMyJdLCJzaG9ydCI6WyJNZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3NlIiwiUGFndW1lbiJdLCJsb25nIjpbIk1lc2tlcmVtIiwiVGVrZW10''@;'; put 'put ''IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1v''@;'; put 'put ''biIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJFUkEwIl0sInNob3J0IjpbIkVSQTAiXSwibG9uZyI6''@;'; put 'put ''WyJFUkEwIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJnZW5lcmljIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk0wMSIsIk0wMiIsIk0wMyIsIk0wNCIsIk0w''@;'; put 'put ''NSIsIk0wNiIsIk0wNyIsIk0wOCIsIk0wOSIsIk0xMCIsIk0xMSIsIk0xMiJdLCJsb25nIjpbIk0wMSIsIk0wMiIsIk0wMyIsIk0wNCIsIk0wNSIsIk0wNiIsIk0wNyIsIk0wOCIsIk0wOSIsIk0xMCIsIk0xMSIsIk0xMiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQi''@;'; put 'put ''LCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiRVJB''@;'; put 'put ''MCIsIkVSQTEiXSwic2hvcnQiOlsiRVJBMCIsIkVSQTEiXSwibG9uZyI6WyJFUkEwIiwiRVJBMSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZ3JlZ29yeSI6eyJtb250aHMiOnsibmFycm93IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8i''@;'; put 'put ''LCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3Qi''@;'; put 'put ''LCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJN''@;'; put 'put ''b25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQiIsIkEiLCJCQ0UiLCJDRSJdLCJzaG9ydCI6WyJCQyIsIkFEIiwiQkNFIiwiQ0UiXSwibG9uZyI6WyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21p''@;'; put 'put ''bmkiLCJCZWZvcmUgQ29tbW9uIEVyYSIsIkNvbW1vbiBFcmEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImhlYnJldyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiNyJd''@;'; put 'put ''LCJzaG9ydCI6WyJUaXNocmkiLCJIZXNodmFuIiwiS2lzbGV2IiwiVGV2ZXQiLCJTaGV2YXQiLCJBZGFyIEkiLCJBZGFyIiwiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW11eiIsIkF2IiwiRWx1bCIsIkFkYXIgSUkiXSwibG9uZyI6WyJUaXNocmkiLCJIZXNodmFuIiwiS2lzbGV2IiwiVGV2''@;'; put 'put ''ZXQiLCJTaGV2YXQiLCJBZGFyIEkiLCJBZGFyIiwiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW11eiIsIkF2IiwiRWx1bCIsIkFkYXIgSUkiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwi''@;'; put 'put ''VGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFNIl0sInNob3J0IjpbIkFNIl0sImxvbmciOlsiQU0iXX0sImRheVBlcmlvZHMi''@;'; put 'put ''OnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImluZGlhbiI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJDaGFpdHJhIiwiVmFpc2FraGEiLCJKeWFpc3RoYSIsIkFzYWRoYSIsIlNyYXZhbmEi''@;'; put 'put ''LCJCaGFkcmEiLCJBc3ZpbmEiLCJLYXJ0aWthIiwiQWdyYWhheWFuYSIsIlBhdXNhIiwiTWFnaGEiLCJQaGFsZ3VuYSJdLCJsb25nIjpbIkNoYWl0cmEiLCJWYWlzYWtoYSIsIkp5YWlzdGhhIiwiQXNhZGhhIiwiU3JhdmFuYSIsIkJoYWRyYSIsIkFzdmluYSIsIkthcnRpa2EiLCJBZ3JhaGF5''@;'; put 'put ''YW5hIiwiUGF1c2EiLCJNYWdoYSIsIlBoYWxndW5hIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNk''@;'; put 'put ''YXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJTYWthIl0sInNob3J0IjpbIlNha2EiXSwibG9uZyI6WyJTYWthIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJpc2xhbWljIjp7Im1vbnRocyI6''@;'; put 'put ''eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk11aC4iLCJTYWYuIiwiUmFiLiBJIiwiUmFiLiBJSSIsIkp1bS4gSSIsIkp1bS4gSUkiLCJSYWouIiwiU2hhLiIsIlJhbS4iLCJTaGF3LiIsIkRodVx1MDJiYmwt''@;'; put 'put ''US4iLCJEaHVcdTAyYmJsLUguIl0sImxvbmciOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmlcdTAyYmIgSSIsIlJhYmlcdTAyYmIgSUkiLCJKdW1hZGEgSSIsIkp1bWFkYSBJSSIsIlJhamFiIiwiU2hhXHUwMmJiYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHVcdTAyYmJsLVFpXHUwMmJi''@;'; put 'put ''ZGFoIiwiRGh1XHUwMmJibC1IaWpqYWgiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldl''@;'; put 'put ''ZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFIIl0sInNob3J0IjpbIkFIIl0sImxvbmciOlsiQUgiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImlzbGFtaWNjIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsi''@;'; put 'put ''MSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk11aC4iLCJTYWYuIiwiUmFiLiBJIiwiUmFiLiBJSSIsIkp1bS4gSSIsIkp1bS4gSUkiLCJSYWouIiwiU2hhLiIsIlJhbS4iLCJTaGF3LiIsIkRodVx1MDJiYmwtUS4iLCJEaHVcdTAy''@;'; put 'put ''YmJsLUguIl0sImxvbmciOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmlcdTAyYmIgSSIsIlJhYmlcdTAyYmIgSUkiLCJKdW1hZGEgSSIsIkp1bWFkYSBJSSIsIlJhamFiIiwiU2hhXHUwMmJiYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHVcdTAyYmJsLVFpXHUwMmJiZGFoIiwiRGh1XHUw''@;'; put 'put ''MmJibC1IaWpqYWgiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRo''@;'; put 'put ''dXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFIIl0sInNob3J0IjpbIkFIIl0sImxvbmciOlsiQUgiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImphcGFuZXNlIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwi''@;'; put 'put ''QSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0IjpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJN''@;'; put 'put ''YXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIs''@;'; put 'put ''IlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJUYWlrYSAoNjQ1XHUyMDEzNjUwKSIsIkhha3VjaGkgKDY1MFx1MjAxMzY3MSkiLCJIYWt1aFx1MDE0''@;'; put 'put ''ZCAoNjcyXHUyMDEzNjg2KSIsIlNodWNoXHUwMTRkICg2ODZcdTIwMTM3MDEpIiwiVGFpaFx1MDE0ZCAoNzAxXHUyMDEzNzA0KSIsIktlaXVuICg3MDRcdTIwMTM3MDgpIiwiV2FkXHUwMTRkICg3MDhcdTIwMTM3MTUpIiwiUmVpa2kgKDcxNVx1MjAxMzcxNykiLCJZXHUwMTRkclx1MDE0ZCAo''@;'; put 'put ''NzE3XHUyMDEzNzI0KSIsIkppbmtpICg3MjRcdTIwMTM3MjkpIiwiVGVucHlcdTAxNGQgKDcyOVx1MjAxMzc0OSkiLCJUZW5weVx1MDE0ZC1rYW1wXHUwMTRkICg3NDktNzQ5KSIsIlRlbnB5XHUwMTRkLXNoXHUwMTRkaFx1MDE0ZCAoNzQ5LTc1NykiLCJUZW5weVx1MDE0ZC1oXHUwMTRkamkg''@;'; put 'put ''KDc1Ny03NjUpIiwiVGVucHlcdTAxNGQtamluZ28gKDc2NS03NjcpIiwiSmluZ28ta2VpdW4gKDc2Ny03NzApIiwiSFx1MDE0ZGtpICg3NzBcdTIwMTM3ODApIiwiVGVuLVx1MDE0ZCAoNzgxLTc4MikiLCJFbnJ5YWt1ICg3ODJcdTIwMTM4MDYpIiwiRGFpZFx1MDE0ZCAoODA2XHUyMDEzODEw''@;'; put 'put ''KSIsIktcdTAxNGRuaW4gKDgxMFx1MjAxMzgyNCkiLCJUZW5jaFx1MDE0ZCAoODI0XHUyMDEzODM0KSIsIkpcdTAxNGR3YSAoODM0XHUyMDEzODQ4KSIsIkthalx1MDE0ZCAoODQ4XHUyMDEzODUxKSIsIk5pbmp1ICg4NTFcdTIwMTM4NTQpIiwiU2Fpa1x1MDE0ZCAoODU0XHUyMDEzODU3KSIs''@;'; put 'put ''IlRlbi1hbiAoODU3LTg1OSkiLCJKXHUwMTRkZ2FuICg4NTlcdTIwMTM4NzcpIiwiR2FuZ3lcdTAxNGQgKDg3N1x1MjAxMzg4NSkiLCJOaW5uYSAoODg1XHUyMDEzODg5KSIsIkthbnB5XHUwMTRkICg4ODlcdTIwMTM4OTgpIiwiU2hcdTAxNGR0YWkgKDg5OFx1MjAxMzkwMSkiLCJFbmdpICg5''@;'; put 'put ''MDFcdTIwMTM5MjMpIiwiRW5jaFx1MDE0ZCAoOTIzXHUyMDEzOTMxKSIsIkpcdTAxNGRoZWkgKDkzMVx1MjAxMzkzOCkiLCJUZW5neVx1MDE0ZCAoOTM4XHUyMDEzOTQ3KSIsIlRlbnJ5YWt1ICg5NDdcdTIwMTM5NTcpIiwiVGVudG9rdSAoOTU3XHUyMDEzOTYxKSIsIlx1MDE0Y3dhICg5NjFc''@;'; put 'put ''dTIwMTM5NjQpIiwiS1x1MDE0ZGhcdTAxNGQgKDk2NFx1MjAxMzk2OCkiLCJBbm5hICg5NjhcdTIwMTM5NzApIiwiVGVucm9rdSAoOTcwXHUyMDEzOTczKSIsIlRlblx1MjAxOWVuICg5NzNcdTIwMTM5NzYpIiwiSlx1MDE0ZGdlbiAoOTc2XHUyMDEzOTc4KSIsIlRlbmdlbiAoOTc4XHUyMDEz''@;'; put 'put ''OTgzKSIsIkVpa2FuICg5ODNcdTIwMTM5ODUpIiwiS2FubmEgKDk4NVx1MjAxMzk4NykiLCJFaWVuICg5ODdcdTIwMTM5ODkpIiwiRWlzbyAoOTg5XHUyMDEzOTkwKSIsIlNoXHUwMTRkcnlha3UgKDk5MFx1MjAxMzk5NSkiLCJDaFx1MDE0ZHRva3UgKDk5NVx1MjAxMzk5OSkiLCJDaFx1MDE0''@;'; put 'put ''ZGhcdTAxNGQgKDk5OVx1MjAxMzEwMDQpIiwiS2Fua1x1MDE0ZCAoMTAwNFx1MjAxMzEwMTIpIiwiQ2hcdTAxNGR3YSAoMTAxMlx1MjAxMzEwMTcpIiwiS2FubmluICgxMDE3XHUyMDEzMTAyMSkiLCJKaWFuICgxMDIxXHUyMDEzMTAyNCkiLCJNYW5qdSAoMTAyNFx1MjAxMzEwMjgpIiwiQ2hc''@;'; put 'put ''dTAxNGRnZW4gKDEwMjhcdTIwMTMxMDM3KSIsIkNoXHUwMTRkcnlha3UgKDEwMzdcdTIwMTMxMDQwKSIsIkNoXHUwMTRka3lcdTAxNmIgKDEwNDBcdTIwMTMxMDQ0KSIsIkthbnRva3UgKDEwNDRcdTIwMTMxMDQ2KSIsIkVpc2hcdTAxNGQgKDEwNDZcdTIwMTMxMDUzKSIsIlRlbmdpICgxMDUz''@;'; put 'put ''XHUyMDEzMTA1OCkiLCJLXHUwMTRkaGVpICgxMDU4XHUyMDEzMTA2NSkiLCJKaXJ5YWt1ICgxMDY1XHUyMDEzMTA2OSkiLCJFbmt5XHUwMTZiICgxMDY5XHUyMDEzMTA3NCkiLCJTaFx1MDE0ZGhvICgxMDc0XHUyMDEzMTA3NykiLCJTaFx1MDE0ZHJ5YWt1ICgxMDc3XHUyMDEzMTA4MSkiLCJF''@;'; put 'put ''aWhcdTAxNGQgKDEwODFcdTIwMTMxMDg0KSIsIlx1MDE0Y3Rva3UgKDEwODRcdTIwMTMxMDg3KSIsIkthbmppICgxMDg3XHUyMDEzMTA5NCkiLCJLYWhcdTAxNGQgKDEwOTRcdTIwMTMxMDk2KSIsIkVpY2hcdTAxNGQgKDEwOTZcdTIwMTMxMDk3KSIsIkpcdTAxNGR0b2t1ICgxMDk3XHUyMDEz''@;'; put 'put ''MTA5OSkiLCJLXHUwMTRkd2EgKDEwOTlcdTIwMTMxMTA0KSIsIkNoXHUwMTRkamkgKDExMDRcdTIwMTMxMTA2KSIsIkthc2hcdTAxNGQgKDExMDZcdTIwMTMxMTA4KSIsIlRlbm5pbiAoMTEwOFx1MjAxMzExMTApIiwiVGVuLWVpICgxMTEwLTExMTMpIiwiRWlreVx1MDE2YiAoMTExM1x1MjAx''@;'; put 'put ''MzExMTgpIiwiR2VuXHUyMDE5ZWkgKDExMThcdTIwMTMxMTIwKSIsIkhcdTAxNGRhbiAoMTEyMFx1MjAxMzExMjQpIiwiVGVuamkgKDExMjRcdTIwMTMxMTI2KSIsIkRhaWppICgxMTI2XHUyMDEzMTEzMSkiLCJUZW5zaFx1MDE0ZCAoMTEzMVx1MjAxMzExMzIpIiwiQ2hcdTAxNGRzaFx1MDE0''@;'; put 'put ''ZCAoMTEzMlx1MjAxMzExMzUpIiwiSFx1MDE0ZGVuICgxMTM1XHUyMDEzMTE0MSkiLCJFaWppICgxMTQxXHUyMDEzMTE0MikiLCJLXHUwMTRkamkgKDExNDJcdTIwMTMxMTQ0KSIsIlRlblx1MjAxOXlcdTAxNGQgKDExNDRcdTIwMTMxMTQ1KSIsIkt5XHUwMTZiYW4gKDExNDVcdTIwMTMxMTUx''@;'; put 'put ''KSIsIk5pbnBlaSAoMTE1MVx1MjAxMzExNTQpIiwiS3lcdTAxNmJqdSAoMTE1NFx1MjAxMzExNTYpIiwiSFx1MDE0ZGdlbiAoMTE1Nlx1MjAxMzExNTkpIiwiSGVpamkgKDExNTlcdTIwMTMxMTYwKSIsIkVpcnlha3UgKDExNjBcdTIwMTMxMTYxKSIsIlx1MDE0Y2hvICgxMTYxXHUyMDEzMTE2''@;'; put 'put ''MykiLCJDaFx1MDE0ZGthbiAoMTE2M1x1MjAxMzExNjUpIiwiRWltYW4gKDExNjVcdTIwMTMxMTY2KSIsIk5pblx1MjAxOWFuICgxMTY2XHUyMDEzMTE2OSkiLCJLYVx1MDE0ZCAoMTE2OVx1MjAxMzExNzEpIiwiU2hcdTAxNGRhbiAoMTE3MVx1MjAxMzExNzUpIiwiQW5nZW4gKDExNzVcdTIw''@;'; put 'put ''MTMxMTc3KSIsIkppc2hcdTAxNGQgKDExNzdcdTIwMTMxMTgxKSIsIllcdTAxNGR3YSAoMTE4MVx1MjAxMzExODIpIiwiSnVlaSAoMTE4Mlx1MjAxMzExODQpIiwiR2Vucnlha3UgKDExODRcdTIwMTMxMTg1KSIsIkJ1bmppICgxMTg1XHUyMDEzMTE5MCkiLCJLZW5reVx1MDE2YiAoMTE5MFx1''@;'; put 'put ''MjAxMzExOTkpIiwiU2hcdTAxNGRqaSAoMTE5OVx1MjAxMzEyMDEpIiwiS2VubmluICgxMjAxXHUyMDEzMTIwNCkiLCJHZW5reVx1MDE2YiAoMTIwNFx1MjAxMzEyMDYpIiwiS2VuXHUyMDE5ZWkgKDEyMDZcdTIwMTMxMjA3KSIsIkpcdTAxNGRnZW4gKDEyMDdcdTIwMTMxMjExKSIsIktlbnJ5''@;'; put 'put ''YWt1ICgxMjExXHUyMDEzMTIxMykiLCJLZW5wXHUwMTRkICgxMjEzXHUyMDEzMTIxOSkiLCJKXHUwMTRka3lcdTAxNmIgKDEyMTlcdTIwMTMxMjIyKSIsIkpcdTAxNGRcdTAxNGQgKDEyMjJcdTIwMTMxMjI0KSIsIkdlbm5pbiAoMTIyNFx1MjAxMzEyMjUpIiwiS2Fyb2t1ICgxMjI1XHUyMDEz''@;'; put 'put ''MTIyNykiLCJBbnRlaSAoMTIyN1x1MjAxMzEyMjkpIiwiS2Fua2kgKDEyMjlcdTIwMTMxMjMyKSIsIkpcdTAxNGRlaSAoMTIzMlx1MjAxMzEyMzMpIiwiVGVucHVrdSAoMTIzM1x1MjAxMzEyMzQpIiwiQnVucnlha3UgKDEyMzRcdTIwMTMxMjM1KSIsIkthdGVpICgxMjM1XHUyMDEzMTIzOCki''@;'; put 'put ''LCJSeWFrdW5pbiAoMTIzOFx1MjAxMzEyMzkpIiwiRW5cdTIwMTlcdTAxNGQgKDEyMzlcdTIwMTMxMjQwKSIsIk5pbmppICgxMjQwXHUyMDEzMTI0MykiLCJLYW5nZW4gKDEyNDNcdTIwMTMxMjQ3KSIsIkhcdTAxNGRqaSAoMTI0N1x1MjAxMzEyNDkpIiwiS2VuY2hcdTAxNGQgKDEyNDlcdTIw''@;'; put 'put ''MTMxMjU2KSIsIktcdTAxNGRnZW4gKDEyNTZcdTIwMTMxMjU3KSIsIlNoXHUwMTRka2EgKDEyNTdcdTIwMTMxMjU5KSIsIlNoXHUwMTRkZ2VuICgxMjU5XHUyMDEzMTI2MCkiLCJCdW5cdTIwMTlcdTAxNGQgKDEyNjBcdTIwMTMxMjYxKSIsIktcdTAxNGRjaFx1MDE0ZCAoMTI2MVx1MjAxMzEy''@;'; put 'put ''NjQpIiwiQnVuXHUyMDE5ZWkgKDEyNjRcdTIwMTMxMjc1KSIsIktlbmppICgxMjc1XHUyMDEzMTI3OCkiLCJLXHUwMTRkYW4gKDEyNzhcdTIwMTMxMjg4KSIsIlNoXHUwMTRkXHUwMTRkICgxMjg4XHUyMDEzMTI5MykiLCJFaW5pbiAoMTI5M1x1MjAxMzEyOTkpIiwiU2hcdTAxNGRhbiAoMTI5''@;'; put 'put ''OVx1MjAxMzEzMDIpIiwiS2VuZ2VuICgxMzAyXHUyMDEzMTMwMykiLCJLYWdlbiAoMTMwM1x1MjAxMzEzMDYpIiwiVG9rdWppICgxMzA2XHUyMDEzMTMwOCkiLCJFbmt5XHUwMTRkICgxMzA4XHUyMDEzMTMxMSkiLCJcdTAxNGNjaFx1MDE0ZCAoMTMxMVx1MjAxMzEzMTIpIiwiU2hcdTAxNGR3''@;'; put 'put ''YSAoMTMxMlx1MjAxMzEzMTcpIiwiQnVucFx1MDE0ZCAoMTMxN1x1MjAxMzEzMTkpIiwiR2VuXHUwMTRkICgxMzE5XHUyMDEzMTMyMSkiLCJHZW5rXHUwMTRkICgxMzIxXHUyMDEzMTMyNCkiLCJTaFx1MDE0ZGNoXHUwMTZiICgxMzI0XHUyMDEzMTMyNikiLCJLYXJ5YWt1ICgxMzI2XHUyMDEz''@;'; put 'put ''MTMyOSkiLCJHZW50b2t1ICgxMzI5XHUyMDEzMTMzMSkiLCJHZW5rXHUwMTRkICgxMzMxXHUyMDEzMTMzNCkiLCJLZW5tdSAoMTMzNFx1MjAxMzEzMzYpIiwiRW5nZW4gKDEzMzZcdTIwMTMxMzQwKSIsIktcdTAxNGRrb2t1ICgxMzQwXHUyMDEzMTM0NikiLCJTaFx1MDE0ZGhlaSAoMTM0Nlx1''@;'; put 'put ''MjAxMzEzNzApIiwiS2VudG9rdSAoMTM3MFx1MjAxMzEzNzIpIiwiQnVuY2hcdTAxNmIgKDEzNzJcdTIwMTMxMzc1KSIsIlRlbmp1ICgxMzc1XHUyMDEzMTM3OSkiLCJLXHUwMTRkcnlha3UgKDEzNzlcdTIwMTMxMzgxKSIsIktcdTAxNGR3YSAoMTM4MVx1MjAxMzEzODQpIiwiR2VuY2hcdTAx''@;'; put 'put ''NmIgKDEzODRcdTIwMTMxMzkyKSIsIk1laXRva3UgKDEzODRcdTIwMTMxMzg3KSIsIktha2VpICgxMzg3XHUyMDEzMTM4OSkiLCJLXHUwMTRkXHUwMTRkICgxMzg5XHUyMDEzMTM5MCkiLCJNZWl0b2t1ICgxMzkwXHUyMDEzMTM5NCkiLCJcdTAxNGNlaSAoMTM5NFx1MjAxMzE0MjgpIiwiU2hc''@;'; put 'put ''dTAxNGRjaFx1MDE0ZCAoMTQyOFx1MjAxMzE0MjkpIiwiRWlreVx1MDE0ZCAoMTQyOVx1MjAxMzE0NDEpIiwiS2FraXRzdSAoMTQ0MVx1MjAxMzE0NDQpIiwiQnVuXHUyMDE5YW4gKDE0NDRcdTIwMTMxNDQ5KSIsIkhcdTAxNGR0b2t1ICgxNDQ5XHUyMDEzMTQ1MikiLCJLeVx1MDE0ZHRva3Ug''@;'; put 'put ''KDE0NTJcdTIwMTMxNDU1KSIsIktcdTAxNGRzaFx1MDE0ZCAoMTQ1NVx1MjAxMzE0NTcpIiwiQ2hcdTAxNGRyb2t1ICgxNDU3XHUyMDEzMTQ2MCkiLCJLYW5zaFx1MDE0ZCAoMTQ2MFx1MjAxMzE0NjYpIiwiQnVuc2hcdTAxNGQgKDE0NjZcdTIwMTMxNDY3KSIsIlx1MDE0Y25pbiAoMTQ2N1x1''@;'; put 'put ''MjAxMzE0NjkpIiwiQnVubWVpICgxNDY5XHUyMDEzMTQ4NykiLCJDaFx1MDE0ZGt5XHUwMTRkICgxNDg3XHUyMDEzMTQ4OSkiLCJFbnRva3UgKDE0ODlcdTIwMTMxNDkyKSIsIk1laVx1MDE0ZCAoMTQ5Mlx1MjAxMzE1MDEpIiwiQnVua2kgKDE1MDFcdTIwMTMxNTA0KSIsIkVpc2hcdTAxNGQg''@;'; put 'put ''KDE1MDRcdTIwMTMxNTIxKSIsIlRhaWVpICgxNTIxXHUyMDEzMTUyOCkiLCJLeVx1MDE0ZHJva3UgKDE1MjhcdTIwMTMxNTMyKSIsIlRlbmJ1biAoMTUzMlx1MjAxMzE1NTUpIiwiS1x1MDE0ZGppICgxNTU1XHUyMDEzMTU1OCkiLCJFaXJva3UgKDE1NThcdTIwMTMxNTcwKSIsIkdlbmtpICgx''@;'; put 'put ''NTcwXHUyMDEzMTU3MykiLCJUZW5zaFx1MDE0ZCAoMTU3M1x1MjAxMzE1OTIpIiwiQnVucm9rdSAoMTU5Mlx1MjAxMzE1OTYpIiwiS2VpY2hcdTAxNGQgKDE1OTZcdTIwMTMxNjE1KSIsIkdlbm5hICgxNjE1XHUyMDEzMTYyNCkiLCJLYW5cdTIwMTllaSAoMTYyNFx1MjAxMzE2NDQpIiwiU2hc''@;'; put 'put ''dTAxNGRobyAoMTY0NFx1MjAxMzE2NDgpIiwiS2VpYW4gKDE2NDhcdTIwMTMxNjUyKSIsIkpcdTAxNGRcdTAxNGQgKDE2NTJcdTIwMTMxNjU1KSIsIk1laXJla2kgKDE2NTVcdTIwMTMxNjU4KSIsIk1hbmppICgxNjU4XHUyMDEzMTY2MSkiLCJLYW5idW4gKDE2NjFcdTIwMTMxNjczKSIsIkVu''@;'; put 'put ''cFx1MDE0ZCAoMTY3M1x1MjAxMzE2ODEpIiwiVGVubmEgKDE2ODFcdTIwMTMxNjg0KSIsIkpcdTAxNGRreVx1MDE0ZCAoMTY4NFx1MjAxMzE2ODgpIiwiR2Vucm9rdSAoMTY4OFx1MjAxMzE3MDQpIiwiSFx1MDE0ZGVpICgxNzA0XHUyMDEzMTcxMSkiLCJTaFx1MDE0ZHRva3UgKDE3MTFcdTIw''@;'; put 'put ''MTMxNzE2KSIsIkt5XHUwMTRkaFx1MDE0ZCAoMTcxNlx1MjAxMzE3MzYpIiwiR2VuYnVuICgxNzM2XHUyMDEzMTc0MSkiLCJLYW5wXHUwMTRkICgxNzQxXHUyMDEzMTc0NCkiLCJFbmt5XHUwMTRkICgxNzQ0XHUyMDEzMTc0OCkiLCJLYW5cdTIwMTllbiAoMTc0OFx1MjAxMzE3NTEpIiwiSFx1''@;'; put 'put ''MDE0ZHJla2kgKDE3NTFcdTIwMTMxNzY0KSIsIk1laXdhICgxNzY0XHUyMDEzMTc3MikiLCJBblx1MjAxOWVpICgxNzcyXHUyMDEzMTc4MSkiLCJUZW5tZWkgKDE3ODFcdTIwMTMxNzg5KSIsIkthbnNlaSAoMTc4OVx1MjAxMzE4MDEpIiwiS3lcdTAxNGR3YSAoMTgwMVx1MjAxMzE4MDQpIiwi''@;'; put 'put ''QnVua2EgKDE4MDRcdTIwMTMxODE4KSIsIkJ1bnNlaSAoMTgxOFx1MjAxMzE4MzApIiwiVGVucFx1MDE0ZCAoMTgzMFx1MjAxMzE4NDQpIiwiS1x1MDE0ZGthICgxODQ0XHUyMDEzMTg0OCkiLCJLYWVpICgxODQ4XHUyMDEzMTg1NCkiLCJBbnNlaSAoMTg1NFx1MjAxMzE4NjApIiwiTWFuXHUy''@;'; put 'put ''MDE5ZW4gKDE4NjBcdTIwMTMxODYxKSIsIkJ1bmt5XHUwMTZiICgxODYxXHUyMDEzMTg2NCkiLCJHZW5qaSAoMTg2NFx1MjAxMzE4NjUpIiwiS2VpXHUwMTRkICgxODY1XHUyMDEzMTg2OCkiLCJNIiwiVCIsIlMiLCJIIl0sInNob3J0IjpbIlRhaWthICg2NDVcdTIwMTM2NTApIiwiSGFrdWNo''@;'; put 'put ''aSAoNjUwXHUyMDEzNjcxKSIsIkhha3VoXHUwMTRkICg2NzJcdTIwMTM2ODYpIiwiU2h1Y2hcdTAxNGQgKDY4Nlx1MjAxMzcwMSkiLCJUYWloXHUwMTRkICg3MDFcdTIwMTM3MDQpIiwiS2VpdW4gKDcwNFx1MjAxMzcwOCkiLCJXYWRcdTAxNGQgKDcwOFx1MjAxMzcxNSkiLCJSZWlraSAoNzE1''@;'; put 'put ''XHUyMDEzNzE3KSIsIllcdTAxNGRyXHUwMTRkICg3MTdcdTIwMTM3MjQpIiwiSmlua2kgKDcyNFx1MjAxMzcyOSkiLCJUZW5weVx1MDE0ZCAoNzI5XHUyMDEzNzQ5KSIsIlRlbnB5XHUwMTRkLWthbXBcdTAxNGQgKDc0OS03NDkpIiwiVGVucHlcdTAxNGQtc2hcdTAxNGRoXHUwMTRkICg3NDkt''@;'; put 'put ''NzU3KSIsIlRlbnB5XHUwMTRkLWhcdTAxNGRqaSAoNzU3LTc2NSkiLCJUZW5weVx1MDE0ZC1qaW5nbyAoNzY1LTc2NykiLCJKaW5nby1rZWl1biAoNzY3LTc3MCkiLCJIXHUwMTRka2kgKDc3MFx1MjAxMzc4MCkiLCJUZW4tXHUwMTRkICg3ODEtNzgyKSIsIkVucnlha3UgKDc4Mlx1MjAxMzgw''@;'; put 'put ''NikiLCJEYWlkXHUwMTRkICg4MDZcdTIwMTM4MTApIiwiS1x1MDE0ZG5pbiAoODEwXHUyMDEzODI0KSIsIlRlbmNoXHUwMTRkICg4MjRcdTIwMTM4MzQpIiwiSlx1MDE0ZHdhICg4MzRcdTIwMTM4NDgpIiwiS2FqXHUwMTRkICg4NDhcdTIwMTM4NTEpIiwiTmluanUgKDg1MVx1MjAxMzg1NCki''@;'; put 'put ''LCJTYWlrXHUwMTRkICg4NTRcdTIwMTM4NTcpIiwiVGVuLWFuICg4NTctODU5KSIsIkpcdTAxNGRnYW4gKDg1OVx1MjAxMzg3NykiLCJHYW5neVx1MDE0ZCAoODc3XHUyMDEzODg1KSIsIk5pbm5hICg4ODVcdTIwMTM4ODkpIiwiS2FucHlcdTAxNGQgKDg4OVx1MjAxMzg5OCkiLCJTaFx1MDE0''@;'; put 'put ''ZHRhaSAoODk4XHUyMDEzOTAxKSIsIkVuZ2kgKDkwMVx1MjAxMzkyMykiLCJFbmNoXHUwMTRkICg5MjNcdTIwMTM5MzEpIiwiSlx1MDE0ZGhlaSAoOTMxXHUyMDEzOTM4KSIsIlRlbmd5XHUwMTRkICg5MzhcdTIwMTM5NDcpIiwiVGVucnlha3UgKDk0N1x1MjAxMzk1NykiLCJUZW50b2t1ICg5''@;'; put 'put ''NTdcdTIwMTM5NjEpIiwiXHUwMTRjd2EgKDk2MVx1MjAxMzk2NCkiLCJLXHUwMTRkaFx1MDE0ZCAoOTY0XHUyMDEzOTY4KSIsIkFubmEgKDk2OFx1MjAxMzk3MCkiLCJUZW5yb2t1ICg5NzBcdTIwMTM5NzMpIiwiVGVuXHUyMDE5ZW4gKDk3M1x1MjAxMzk3NikiLCJKXHUwMTRkZ2VuICg5NzZc''@;'; put 'put ''dTIwMTM5NzgpIiwiVGVuZ2VuICg5NzhcdTIwMTM5ODMpIiwiRWlrYW4gKDk4M1x1MjAxMzk4NSkiLCJLYW5uYSAoOTg1XHUyMDEzOTg3KSIsIkVpZW4gKDk4N1x1MjAxMzk4OSkiLCJFaXNvICg5ODlcdTIwMTM5OTApIiwiU2hcdTAxNGRyeWFrdSAoOTkwXHUyMDEzOTk1KSIsIkNoXHUwMTRk''@;'; put 'put ''dG9rdSAoOTk1XHUyMDEzOTk5KSIsIkNoXHUwMTRkaFx1MDE0ZCAoOTk5XHUyMDEzMTAwNCkiLCJLYW5rXHUwMTRkICgxMDA0XHUyMDEzMTAxMikiLCJDaFx1MDE0ZHdhICgxMDEyXHUyMDEzMTAxNykiLCJLYW5uaW4gKDEwMTdcdTIwMTMxMDIxKSIsIkppYW4gKDEwMjFcdTIwMTMxMDI0KSIs''@;'; put 'put ''Ik1hbmp1ICgxMDI0XHUyMDEzMTAyOCkiLCJDaFx1MDE0ZGdlbiAoMTAyOFx1MjAxMzEwMzcpIiwiQ2hcdTAxNGRyeWFrdSAoMTAzN1x1MjAxMzEwNDApIiwiQ2hcdTAxNGRreVx1MDE2YiAoMTA0MFx1MjAxMzEwNDQpIiwiS2FudG9rdSAoMTA0NFx1MjAxMzEwNDYpIiwiRWlzaFx1MDE0ZCAo''@;'; put 'put ''MTA0Nlx1MjAxMzEwNTMpIiwiVGVuZ2kgKDEwNTNcdTIwMTMxMDU4KSIsIktcdTAxNGRoZWkgKDEwNThcdTIwMTMxMDY1KSIsIkppcnlha3UgKDEwNjVcdTIwMTMxMDY5KSIsIkVua3lcdTAxNmIgKDEwNjlcdTIwMTMxMDc0KSIsIlNoXHUwMTRkaG8gKDEwNzRcdTIwMTMxMDc3KSIsIlNoXHUw''@;'; put 'put ''MTRkcnlha3UgKDEwNzdcdTIwMTMxMDgxKSIsIkVpaFx1MDE0ZCAoMTA4MVx1MjAxMzEwODQpIiwiXHUwMTRjdG9rdSAoMTA4NFx1MjAxMzEwODcpIiwiS2FuamkgKDEwODdcdTIwMTMxMDk0KSIsIkthaFx1MDE0ZCAoMTA5NFx1MjAxMzEwOTYpIiwiRWljaFx1MDE0ZCAoMTA5Nlx1MjAxMzEw''@;'; put 'put ''OTcpIiwiSlx1MDE0ZHRva3UgKDEwOTdcdTIwMTMxMDk5KSIsIktcdTAxNGR3YSAoMTA5OVx1MjAxMzExMDQpIiwiQ2hcdTAxNGRqaSAoMTEwNFx1MjAxMzExMDYpIiwiS2FzaFx1MDE0ZCAoMTEwNlx1MjAxMzExMDgpIiwiVGVubmluICgxMTA4XHUyMDEzMTExMCkiLCJUZW4tZWkgKDExMTAt''@;'; put 'put ''MTExMykiLCJFaWt5XHUwMTZiICgxMTEzXHUyMDEzMTExOCkiLCJHZW5cdTIwMTllaSAoMTExOFx1MjAxMzExMjApIiwiSFx1MDE0ZGFuICgxMTIwXHUyMDEzMTEyNCkiLCJUZW5qaSAoMTEyNFx1MjAxMzExMjYpIiwiRGFpamkgKDExMjZcdTIwMTMxMTMxKSIsIlRlbnNoXHUwMTRkICgxMTMx''@;'; put 'put ''XHUyMDEzMTEzMikiLCJDaFx1MDE0ZHNoXHUwMTRkICgxMTMyXHUyMDEzMTEzNSkiLCJIXHUwMTRkZW4gKDExMzVcdTIwMTMxMTQxKSIsIkVpamkgKDExNDFcdTIwMTMxMTQyKSIsIktcdTAxNGRqaSAoMTE0Mlx1MjAxMzExNDQpIiwiVGVuXHUyMDE5eVx1MDE0ZCAoMTE0NFx1MjAxMzExNDUp''@;'; put 'put ''IiwiS3lcdTAxNmJhbiAoMTE0NVx1MjAxMzExNTEpIiwiTmlucGVpICgxMTUxXHUyMDEzMTE1NCkiLCJLeVx1MDE2Ymp1ICgxMTU0XHUyMDEzMTE1NikiLCJIXHUwMTRkZ2VuICgxMTU2XHUyMDEzMTE1OSkiLCJIZWlqaSAoMTE1OVx1MjAxMzExNjApIiwiRWlyeWFrdSAoMTE2MFx1MjAxMzEx''@;'; put 'put ''NjEpIiwiXHUwMTRjaG8gKDExNjFcdTIwMTMxMTYzKSIsIkNoXHUwMTRka2FuICgxMTYzXHUyMDEzMTE2NSkiLCJFaW1hbiAoMTE2NVx1MjAxMzExNjYpIiwiTmluXHUyMDE5YW4gKDExNjZcdTIwMTMxMTY5KSIsIkthXHUwMTRkICgxMTY5XHUyMDEzMTE3MSkiLCJTaFx1MDE0ZGFuICgxMTcx''@;'; put 'put ''XHUyMDEzMTE3NSkiLCJBbmdlbiAoMTE3NVx1MjAxMzExNzcpIiwiSmlzaFx1MDE0ZCAoMTE3N1x1MjAxMzExODEpIiwiWVx1MDE0ZHdhICgxMTgxXHUyMDEzMTE4MikiLCJKdWVpICgxMTgyXHUyMDEzMTE4NCkiLCJHZW5yeWFrdSAoMTE4NFx1MjAxMzExODUpIiwiQnVuamkgKDExODVcdTIw''@;'; put 'put ''MTMxMTkwKSIsIktlbmt5XHUwMTZiICgxMTkwXHUyMDEzMTE5OSkiLCJTaFx1MDE0ZGppICgxMTk5XHUyMDEzMTIwMSkiLCJLZW5uaW4gKDEyMDFcdTIwMTMxMjA0KSIsIkdlbmt5XHUwMTZiICgxMjA0XHUyMDEzMTIwNikiLCJLZW5cdTIwMTllaSAoMTIwNlx1MjAxMzEyMDcpIiwiSlx1MDE0''@;'; put 'put ''ZGdlbiAoMTIwN1x1MjAxMzEyMTEpIiwiS2Vucnlha3UgKDEyMTFcdTIwMTMxMjEzKSIsIktlbnBcdTAxNGQgKDEyMTNcdTIwMTMxMjE5KSIsIkpcdTAxNGRreVx1MDE2YiAoMTIxOVx1MjAxMzEyMjIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTIyMlx1MjAxMzEyMjQpIiwiR2VubmluICgxMjI0XHUy''@;'; put 'put ''MDEzMTIyNSkiLCJLYXJva3UgKDEyMjVcdTIwMTMxMjI3KSIsIkFudGVpICgxMjI3XHUyMDEzMTIyOSkiLCJLYW5raSAoMTIyOVx1MjAxMzEyMzIpIiwiSlx1MDE0ZGVpICgxMjMyXHUyMDEzMTIzMykiLCJUZW5wdWt1ICgxMjMzXHUyMDEzMTIzNCkiLCJCdW5yeWFrdSAoMTIzNFx1MjAxMzEy''@;'; put 'put ''MzUpIiwiS2F0ZWkgKDEyMzVcdTIwMTMxMjM4KSIsIlJ5YWt1bmluICgxMjM4XHUyMDEzMTIzOSkiLCJFblx1MjAxOVx1MDE0ZCAoMTIzOVx1MjAxMzEyNDApIiwiTmluamkgKDEyNDBcdTIwMTMxMjQzKSIsIkthbmdlbiAoMTI0M1x1MjAxMzEyNDcpIiwiSFx1MDE0ZGppICgxMjQ3XHUyMDEz''@;'; put 'put ''MTI0OSkiLCJLZW5jaFx1MDE0ZCAoMTI0OVx1MjAxMzEyNTYpIiwiS1x1MDE0ZGdlbiAoMTI1Nlx1MjAxMzEyNTcpIiwiU2hcdTAxNGRrYSAoMTI1N1x1MjAxMzEyNTkpIiwiU2hcdTAxNGRnZW4gKDEyNTlcdTIwMTMxMjYwKSIsIkJ1blx1MjAxOVx1MDE0ZCAoMTI2MFx1MjAxMzEyNjEpIiwi''@;'; put 'put ''S1x1MDE0ZGNoXHUwMTRkICgxMjYxXHUyMDEzMTI2NCkiLCJCdW5cdTIwMTllaSAoMTI2NFx1MjAxMzEyNzUpIiwiS2VuamkgKDEyNzVcdTIwMTMxMjc4KSIsIktcdTAxNGRhbiAoMTI3OFx1MjAxMzEyODgpIiwiU2hcdTAxNGRcdTAxNGQgKDEyODhcdTIwMTMxMjkzKSIsIkVpbmluICgxMjkz''@;'; put 'put ''XHUyMDEzMTI5OSkiLCJTaFx1MDE0ZGFuICgxMjk5XHUyMDEzMTMwMikiLCJLZW5nZW4gKDEzMDJcdTIwMTMxMzAzKSIsIkthZ2VuICgxMzAzXHUyMDEzMTMwNikiLCJUb2t1amkgKDEzMDZcdTIwMTMxMzA4KSIsIkVua3lcdTAxNGQgKDEzMDhcdTIwMTMxMzExKSIsIlx1MDE0Y2NoXHUwMTRk''@;'; put 'put ''ICgxMzExXHUyMDEzMTMxMikiLCJTaFx1MDE0ZHdhICgxMzEyXHUyMDEzMTMxNykiLCJCdW5wXHUwMTRkICgxMzE3XHUyMDEzMTMxOSkiLCJHZW5cdTAxNGQgKDEzMTlcdTIwMTMxMzIxKSIsIkdlbmtcdTAxNGQgKDEzMjFcdTIwMTMxMzI0KSIsIlNoXHUwMTRkY2hcdTAxNmIgKDEzMjRcdTIw''@;'; put 'put ''MTMxMzI2KSIsIkthcnlha3UgKDEzMjZcdTIwMTMxMzI5KSIsIkdlbnRva3UgKDEzMjlcdTIwMTMxMzMxKSIsIkdlbmtcdTAxNGQgKDEzMzFcdTIwMTMxMzM0KSIsIktlbm11ICgxMzM0XHUyMDEzMTMzNikiLCJFbmdlbiAoMTMzNlx1MjAxMzEzNDApIiwiS1x1MDE0ZGtva3UgKDEzNDBcdTIw''@;'; put 'put ''MTMxMzQ2KSIsIlNoXHUwMTRkaGVpICgxMzQ2XHUyMDEzMTM3MCkiLCJLZW50b2t1ICgxMzcwXHUyMDEzMTM3MikiLCJCdW5jaFx1MDE2YiAoMTM3Mlx1MjAxMzEzNzUpIiwiVGVuanUgKDEzNzVcdTIwMTMxMzc5KSIsIktcdTAxNGRyeWFrdSAoMTM3OVx1MjAxMzEzODEpIiwiS1x1MDE0ZHdh''@;'; put 'put ''ICgxMzgxXHUyMDEzMTM4NCkiLCJHZW5jaFx1MDE2YiAoMTM4NFx1MjAxMzEzOTIpIiwiTWVpdG9rdSAoMTM4NFx1MjAxMzEzODcpIiwiS2FrZWkgKDEzODdcdTIwMTMxMzg5KSIsIktcdTAxNGRcdTAxNGQgKDEzODlcdTIwMTMxMzkwKSIsIk1laXRva3UgKDEzOTBcdTIwMTMxMzk0KSIsIlx1''@;'; put 'put ''MDE0Y2VpICgxMzk0XHUyMDEzMTQyOCkiLCJTaFx1MDE0ZGNoXHUwMTRkICgxNDI4XHUyMDEzMTQyOSkiLCJFaWt5XHUwMTRkICgxNDI5XHUyMDEzMTQ0MSkiLCJLYWtpdHN1ICgxNDQxXHUyMDEzMTQ0NCkiLCJCdW5cdTIwMTlhbiAoMTQ0NFx1MjAxMzE0NDkpIiwiSFx1MDE0ZHRva3UgKDE0''@;'; put 'put ''NDlcdTIwMTMxNDUyKSIsIkt5XHUwMTRkdG9rdSAoMTQ1Mlx1MjAxMzE0NTUpIiwiS1x1MDE0ZHNoXHUwMTRkICgxNDU1XHUyMDEzMTQ1NykiLCJDaFx1MDE0ZHJva3UgKDE0NTdcdTIwMTMxNDYwKSIsIkthbnNoXHUwMTRkICgxNDYwXHUyMDEzMTQ2NikiLCJCdW5zaFx1MDE0ZCAoMTQ2Nlx1''@;'; put 'put ''MjAxMzE0NjcpIiwiXHUwMTRjbmluICgxNDY3XHUyMDEzMTQ2OSkiLCJCdW5tZWkgKDE0NjlcdTIwMTMxNDg3KSIsIkNoXHUwMTRka3lcdTAxNGQgKDE0ODdcdTIwMTMxNDg5KSIsIkVudG9rdSAoMTQ4OVx1MjAxMzE0OTIpIiwiTWVpXHUwMTRkICgxNDkyXHUyMDEzMTUwMSkiLCJCdW5raSAo''@;'; put 'put ''MTUwMVx1MjAxMzE1MDQpIiwiRWlzaFx1MDE0ZCAoMTUwNFx1MjAxMzE1MjEpIiwiVGFpZWkgKDE1MjFcdTIwMTMxNTI4KSIsIkt5XHUwMTRkcm9rdSAoMTUyOFx1MjAxMzE1MzIpIiwiVGVuYnVuICgxNTMyXHUyMDEzMTU1NSkiLCJLXHUwMTRkamkgKDE1NTVcdTIwMTMxNTU4KSIsIkVpcm9r''@;'; put 'put ''dSAoMTU1OFx1MjAxMzE1NzApIiwiR2Vua2kgKDE1NzBcdTIwMTMxNTczKSIsIlRlbnNoXHUwMTRkICgxNTczXHUyMDEzMTU5MikiLCJCdW5yb2t1ICgxNTkyXHUyMDEzMTU5NikiLCJLZWljaFx1MDE0ZCAoMTU5Nlx1MjAxMzE2MTUpIiwiR2VubmEgKDE2MTVcdTIwMTMxNjI0KSIsIkthblx1''@;'; put 'put ''MjAxOWVpICgxNjI0XHUyMDEzMTY0NCkiLCJTaFx1MDE0ZGhvICgxNjQ0XHUyMDEzMTY0OCkiLCJLZWlhbiAoMTY0OFx1MjAxMzE2NTIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTY1Mlx1MjAxMzE2NTUpIiwiTWVpcmVraSAoMTY1NVx1MjAxMzE2NTgpIiwiTWFuamkgKDE2NThcdTIwMTMxNjYxKSIs''@;'; put 'put ''IkthbmJ1biAoMTY2MVx1MjAxMzE2NzMpIiwiRW5wXHUwMTRkICgxNjczXHUyMDEzMTY4MSkiLCJUZW5uYSAoMTY4MVx1MjAxMzE2ODQpIiwiSlx1MDE0ZGt5XHUwMTRkICgxNjg0XHUyMDEzMTY4OCkiLCJHZW5yb2t1ICgxNjg4XHUyMDEzMTcwNCkiLCJIXHUwMTRkZWkgKDE3MDRcdTIwMTMx''@;'; put 'put ''NzExKSIsIlNoXHUwMTRkdG9rdSAoMTcxMVx1MjAxMzE3MTYpIiwiS3lcdTAxNGRoXHUwMTRkICgxNzE2XHUyMDEzMTczNikiLCJHZW5idW4gKDE3MzZcdTIwMTMxNzQxKSIsIkthbnBcdTAxNGQgKDE3NDFcdTIwMTMxNzQ0KSIsIkVua3lcdTAxNGQgKDE3NDRcdTIwMTMxNzQ4KSIsIkthblx1''@;'; put 'put ''MjAxOWVuICgxNzQ4XHUyMDEzMTc1MSkiLCJIXHUwMTRkcmVraSAoMTc1MVx1MjAxMzE3NjQpIiwiTWVpd2EgKDE3NjRcdTIwMTMxNzcyKSIsIkFuXHUyMDE5ZWkgKDE3NzJcdTIwMTMxNzgxKSIsIlRlbm1laSAoMTc4MVx1MjAxMzE3ODkpIiwiS2Fuc2VpICgxNzg5XHUyMDEzMTgwMSkiLCJL''@;'; put 'put ''eVx1MDE0ZHdhICgxODAxXHUyMDEzMTgwNCkiLCJCdW5rYSAoMTgwNFx1MjAxMzE4MTgpIiwiQnVuc2VpICgxODE4XHUyMDEzMTgzMCkiLCJUZW5wXHUwMTRkICgxODMwXHUyMDEzMTg0NCkiLCJLXHUwMTRka2EgKDE4NDRcdTIwMTMxODQ4KSIsIkthZWkgKDE4NDhcdTIwMTMxODU0KSIsIkFu''@;'; put 'put ''c2VpICgxODU0XHUyMDEzMTg2MCkiLCJNYW5cdTIwMTllbiAoMTg2MFx1MjAxMzE4NjEpIiwiQnVua3lcdTAxNmIgKDE4NjFcdTIwMTMxODY0KSIsIkdlbmppICgxODY0XHUyMDEzMTg2NSkiLCJLZWlcdTAxNGQgKDE4NjVcdTIwMTMxODY4KSIsIk1laWppIiwiVGFpc2hcdTAxNGQiLCJTaFx1''@;'; put 'put ''MDE0ZHdhIiwiSGVpc2VpIl0sImxvbmciOlsiVGFpa2EgKDY0NVx1MjAxMzY1MCkiLCJIYWt1Y2hpICg2NTBcdTIwMTM2NzEpIiwiSGFrdWhcdTAxNGQgKDY3Mlx1MjAxMzY4NikiLCJTaHVjaFx1MDE0ZCAoNjg2XHUyMDEzNzAxKSIsIlRhaWhcdTAxNGQgKDcwMVx1MjAxMzcwNCkiLCJLZWl1''@;'; put 'put ''biAoNzA0XHUyMDEzNzA4KSIsIldhZFx1MDE0ZCAoNzA4XHUyMDEzNzE1KSIsIlJlaWtpICg3MTVcdTIwMTM3MTcpIiwiWVx1MDE0ZHJcdTAxNGQgKDcxN1x1MjAxMzcyNCkiLCJKaW5raSAoNzI0XHUyMDEzNzI5KSIsIlRlbnB5XHUwMTRkICg3MjlcdTIwMTM3NDkpIiwiVGVucHlcdTAxNGQt''@;'; put 'put ''a2FtcFx1MDE0ZCAoNzQ5LTc0OSkiLCJUZW5weVx1MDE0ZC1zaFx1MDE0ZGhcdTAxNGQgKDc0OS03NTcpIiwiVGVucHlcdTAxNGQtaFx1MDE0ZGppICg3NTctNzY1KSIsIlRlbnB5XHUwMTRkLWppbmdvICg3NjUtNzY3KSIsIkppbmdvLWtlaXVuICg3NjctNzcwKSIsIkhcdTAxNGRraSAoNzcw''@;'; put 'put ''XHUyMDEzNzgwKSIsIlRlbi1cdTAxNGQgKDc4MS03ODIpIiwiRW5yeWFrdSAoNzgyXHUyMDEzODA2KSIsIkRhaWRcdTAxNGQgKDgwNlx1MjAxMzgxMCkiLCJLXHUwMTRkbmluICg4MTBcdTIwMTM4MjQpIiwiVGVuY2hcdTAxNGQgKDgyNFx1MjAxMzgzNCkiLCJKXHUwMTRkd2EgKDgzNFx1MjAx''@;'; put 'put ''Mzg0OCkiLCJLYWpcdTAxNGQgKDg0OFx1MjAxMzg1MSkiLCJOaW5qdSAoODUxXHUyMDEzODU0KSIsIlNhaWtcdTAxNGQgKDg1NFx1MjAxMzg1NykiLCJUZW4tYW4gKDg1Ny04NTkpIiwiSlx1MDE0ZGdhbiAoODU5XHUyMDEzODc3KSIsIkdhbmd5XHUwMTRkICg4NzdcdTIwMTM4ODUpIiwiTmlu''@;'; put 'put ''bmEgKDg4NVx1MjAxMzg4OSkiLCJLYW5weVx1MDE0ZCAoODg5XHUyMDEzODk4KSIsIlNoXHUwMTRkdGFpICg4OThcdTIwMTM5MDEpIiwiRW5naSAoOTAxXHUyMDEzOTIzKSIsIkVuY2hcdTAxNGQgKDkyM1x1MjAxMzkzMSkiLCJKXHUwMTRkaGVpICg5MzFcdTIwMTM5MzgpIiwiVGVuZ3lcdTAx''@;'; put 'put ''NGQgKDkzOFx1MjAxMzk0NykiLCJUZW5yeWFrdSAoOTQ3XHUyMDEzOTU3KSIsIlRlbnRva3UgKDk1N1x1MjAxMzk2MSkiLCJcdTAxNGN3YSAoOTYxXHUyMDEzOTY0KSIsIktcdTAxNGRoXHUwMTRkICg5NjRcdTIwMTM5NjgpIiwiQW5uYSAoOTY4XHUyMDEzOTcwKSIsIlRlbnJva3UgKDk3MFx1''@;'; put 'put ''MjAxMzk3MykiLCJUZW5cdTIwMTllbiAoOTczXHUyMDEzOTc2KSIsIkpcdTAxNGRnZW4gKDk3Nlx1MjAxMzk3OCkiLCJUZW5nZW4gKDk3OFx1MjAxMzk4MykiLCJFaWthbiAoOTgzXHUyMDEzOTg1KSIsIkthbm5hICg5ODVcdTIwMTM5ODcpIiwiRWllbiAoOTg3XHUyMDEzOTg5KSIsIkVpc28g''@;'; put 'put ''KDk4OVx1MjAxMzk5MCkiLCJTaFx1MDE0ZHJ5YWt1ICg5OTBcdTIwMTM5OTUpIiwiQ2hcdTAxNGR0b2t1ICg5OTVcdTIwMTM5OTkpIiwiQ2hcdTAxNGRoXHUwMTRkICg5OTlcdTIwMTMxMDA0KSIsIkthbmtcdTAxNGQgKDEwMDRcdTIwMTMxMDEyKSIsIkNoXHUwMTRkd2EgKDEwMTJcdTIwMTMx''@;'; put 'put ''MDE3KSIsIkthbm5pbiAoMTAxN1x1MjAxMzEwMjEpIiwiSmlhbiAoMTAyMVx1MjAxMzEwMjQpIiwiTWFuanUgKDEwMjRcdTIwMTMxMDI4KSIsIkNoXHUwMTRkZ2VuICgxMDI4XHUyMDEzMTAzNykiLCJDaFx1MDE0ZHJ5YWt1ICgxMDM3XHUyMDEzMTA0MCkiLCJDaFx1MDE0ZGt5XHUwMTZiICgx''@;'; put 'put ''MDQwXHUyMDEzMTA0NCkiLCJLYW50b2t1ICgxMDQ0XHUyMDEzMTA0NikiLCJFaXNoXHUwMTRkICgxMDQ2XHUyMDEzMTA1MykiLCJUZW5naSAoMTA1M1x1MjAxMzEwNTgpIiwiS1x1MDE0ZGhlaSAoMTA1OFx1MjAxMzEwNjUpIiwiSmlyeWFrdSAoMTA2NVx1MjAxMzEwNjkpIiwiRW5reVx1MDE2''@;'; put 'put ''YiAoMTA2OVx1MjAxMzEwNzQpIiwiU2hcdTAxNGRobyAoMTA3NFx1MjAxMzEwNzcpIiwiU2hcdTAxNGRyeWFrdSAoMTA3N1x1MjAxMzEwODEpIiwiRWloXHUwMTRkICgxMDgxXHUyMDEzMTA4NCkiLCJcdTAxNGN0b2t1ICgxMDg0XHUyMDEzMTA4NykiLCJLYW5qaSAoMTA4N1x1MjAxMzEwOTQp''@;'; put 'put ''IiwiS2FoXHUwMTRkICgxMDk0XHUyMDEzMTA5NikiLCJFaWNoXHUwMTRkICgxMDk2XHUyMDEzMTA5NykiLCJKXHUwMTRkdG9rdSAoMTA5N1x1MjAxMzEwOTkpIiwiS1x1MDE0ZHdhICgxMDk5XHUyMDEzMTEwNCkiLCJDaFx1MDE0ZGppICgxMTA0XHUyMDEzMTEwNikiLCJLYXNoXHUwMTRkICgx''@;'; put 'put ''MTA2XHUyMDEzMTEwOCkiLCJUZW5uaW4gKDExMDhcdTIwMTMxMTEwKSIsIlRlbi1laSAoMTExMC0xMTEzKSIsIkVpa3lcdTAxNmIgKDExMTNcdTIwMTMxMTE4KSIsIkdlblx1MjAxOWVpICgxMTE4XHUyMDEzMTEyMCkiLCJIXHUwMTRkYW4gKDExMjBcdTIwMTMxMTI0KSIsIlRlbmppICgxMTI0''@;'; put 'put ''XHUyMDEzMTEyNikiLCJEYWlqaSAoMTEyNlx1MjAxMzExMzEpIiwiVGVuc2hcdTAxNGQgKDExMzFcdTIwMTMxMTMyKSIsIkNoXHUwMTRkc2hcdTAxNGQgKDExMzJcdTIwMTMxMTM1KSIsIkhcdTAxNGRlbiAoMTEzNVx1MjAxMzExNDEpIiwiRWlqaSAoMTE0MVx1MjAxMzExNDIpIiwiS1x1MDE0''@;'; put 'put ''ZGppICgxMTQyXHUyMDEzMTE0NCkiLCJUZW5cdTIwMTl5XHUwMTRkICgxMTQ0XHUyMDEzMTE0NSkiLCJLeVx1MDE2YmFuICgxMTQ1XHUyMDEzMTE1MSkiLCJOaW5wZWkgKDExNTFcdTIwMTMxMTU0KSIsIkt5XHUwMTZianUgKDExNTRcdTIwMTMxMTU2KSIsIkhcdTAxNGRnZW4gKDExNTZcdTIw''@;'; put 'put ''MTMxMTU5KSIsIkhlaWppICgxMTU5XHUyMDEzMTE2MCkiLCJFaXJ5YWt1ICgxMTYwXHUyMDEzMTE2MSkiLCJcdTAxNGNobyAoMTE2MVx1MjAxMzExNjMpIiwiQ2hcdTAxNGRrYW4gKDExNjNcdTIwMTMxMTY1KSIsIkVpbWFuICgxMTY1XHUyMDEzMTE2NikiLCJOaW5cdTIwMTlhbiAoMTE2Nlx1''@;'; put 'put ''MjAxMzExNjkpIiwiS2FcdTAxNGQgKDExNjlcdTIwMTMxMTcxKSIsIlNoXHUwMTRkYW4gKDExNzFcdTIwMTMxMTc1KSIsIkFuZ2VuICgxMTc1XHUyMDEzMTE3NykiLCJKaXNoXHUwMTRkICgxMTc3XHUyMDEzMTE4MSkiLCJZXHUwMTRkd2EgKDExODFcdTIwMTMxMTgyKSIsIkp1ZWkgKDExODJc''@;'; put 'put ''dTIwMTMxMTg0KSIsIkdlbnJ5YWt1ICgxMTg0XHUyMDEzMTE4NSkiLCJCdW5qaSAoMTE4NVx1MjAxMzExOTApIiwiS2Vua3lcdTAxNmIgKDExOTBcdTIwMTMxMTk5KSIsIlNoXHUwMTRkamkgKDExOTlcdTIwMTMxMjAxKSIsIktlbm5pbiAoMTIwMVx1MjAxMzEyMDQpIiwiR2Vua3lcdTAxNmIg''@;'; put 'put ''KDEyMDRcdTIwMTMxMjA2KSIsIktlblx1MjAxOWVpICgxMjA2XHUyMDEzMTIwNykiLCJKXHUwMTRkZ2VuICgxMjA3XHUyMDEzMTIxMSkiLCJLZW5yeWFrdSAoMTIxMVx1MjAxMzEyMTMpIiwiS2VucFx1MDE0ZCAoMTIxM1x1MjAxMzEyMTkpIiwiSlx1MDE0ZGt5XHUwMTZiICgxMjE5XHUyMDEz''@;'; put 'put ''MTIyMikiLCJKXHUwMTRkXHUwMTRkICgxMjIyXHUyMDEzMTIyNCkiLCJHZW5uaW4gKDEyMjRcdTIwMTMxMjI1KSIsIkthcm9rdSAoMTIyNVx1MjAxMzEyMjcpIiwiQW50ZWkgKDEyMjdcdTIwMTMxMjI5KSIsIkthbmtpICgxMjI5XHUyMDEzMTIzMikiLCJKXHUwMTRkZWkgKDEyMzJcdTIwMTMx''@;'; put 'put ''MjMzKSIsIlRlbnB1a3UgKDEyMzNcdTIwMTMxMjM0KSIsIkJ1bnJ5YWt1ICgxMjM0XHUyMDEzMTIzNSkiLCJLYXRlaSAoMTIzNVx1MjAxMzEyMzgpIiwiUnlha3VuaW4gKDEyMzhcdTIwMTMxMjM5KSIsIkVuXHUyMDE5XHUwMTRkICgxMjM5XHUyMDEzMTI0MCkiLCJOaW5qaSAoMTI0MFx1MjAx''@;'; put 'put ''MzEyNDMpIiwiS2FuZ2VuICgxMjQzXHUyMDEzMTI0NykiLCJIXHUwMTRkamkgKDEyNDdcdTIwMTMxMjQ5KSIsIktlbmNoXHUwMTRkICgxMjQ5XHUyMDEzMTI1NikiLCJLXHUwMTRkZ2VuICgxMjU2XHUyMDEzMTI1NykiLCJTaFx1MDE0ZGthICgxMjU3XHUyMDEzMTI1OSkiLCJTaFx1MDE0ZGdl''@;'; put 'put ''biAoMTI1OVx1MjAxMzEyNjApIiwiQnVuXHUyMDE5XHUwMTRkICgxMjYwXHUyMDEzMTI2MSkiLCJLXHUwMTRkY2hcdTAxNGQgKDEyNjFcdTIwMTMxMjY0KSIsIkJ1blx1MjAxOWVpICgxMjY0XHUyMDEzMTI3NSkiLCJLZW5qaSAoMTI3NVx1MjAxMzEyNzgpIiwiS1x1MDE0ZGFuICgxMjc4XHUy''@;'; put 'put ''MDEzMTI4OCkiLCJTaFx1MDE0ZFx1MDE0ZCAoMTI4OFx1MjAxMzEyOTMpIiwiRWluaW4gKDEyOTNcdTIwMTMxMjk5KSIsIlNoXHUwMTRkYW4gKDEyOTlcdTIwMTMxMzAyKSIsIktlbmdlbiAoMTMwMlx1MjAxMzEzMDMpIiwiS2FnZW4gKDEzMDNcdTIwMTMxMzA2KSIsIlRva3VqaSAoMTMwNlx1''@;'; put 'put ''MjAxMzEzMDgpIiwiRW5reVx1MDE0ZCAoMTMwOFx1MjAxMzEzMTEpIiwiXHUwMTRjY2hcdTAxNGQgKDEzMTFcdTIwMTMxMzEyKSIsIlNoXHUwMTRkd2EgKDEzMTJcdTIwMTMxMzE3KSIsIkJ1bnBcdTAxNGQgKDEzMTdcdTIwMTMxMzE5KSIsIkdlblx1MDE0ZCAoMTMxOVx1MjAxMzEzMjEpIiwi''@;'; put 'put ''R2Vua1x1MDE0ZCAoMTMyMVx1MjAxMzEzMjQpIiwiU2hcdTAxNGRjaFx1MDE2YiAoMTMyNFx1MjAxMzEzMjYpIiwiS2FyeWFrdSAoMTMyNlx1MjAxMzEzMjkpIiwiR2VudG9rdSAoMTMyOVx1MjAxMzEzMzEpIiwiR2Vua1x1MDE0ZCAoMTMzMVx1MjAxMzEzMzQpIiwiS2VubXUgKDEzMzRcdTIw''@;'; put 'put ''MTMxMzM2KSIsIkVuZ2VuICgxMzM2XHUyMDEzMTM0MCkiLCJLXHUwMTRka29rdSAoMTM0MFx1MjAxMzEzNDYpIiwiU2hcdTAxNGRoZWkgKDEzNDZcdTIwMTMxMzcwKSIsIktlbnRva3UgKDEzNzBcdTIwMTMxMzcyKSIsIkJ1bmNoXHUwMTZiICgxMzcyXHUyMDEzMTM3NSkiLCJUZW5qdSAoMTM3''@;'; put 'put ''NVx1MjAxMzEzNzkpIiwiS1x1MDE0ZHJ5YWt1ICgxMzc5XHUyMDEzMTM4MSkiLCJLXHUwMTRkd2EgKDEzODFcdTIwMTMxMzg0KSIsIkdlbmNoXHUwMTZiICgxMzg0XHUyMDEzMTM5MikiLCJNZWl0b2t1ICgxMzg0XHUyMDEzMTM4NykiLCJLYWtlaSAoMTM4N1x1MjAxMzEzODkpIiwiS1x1MDE0''@;'; put 'put ''ZFx1MDE0ZCAoMTM4OVx1MjAxMzEzOTApIiwiTWVpdG9rdSAoMTM5MFx1MjAxMzEzOTQpIiwiXHUwMTRjZWkgKDEzOTRcdTIwMTMxNDI4KSIsIlNoXHUwMTRkY2hcdTAxNGQgKDE0MjhcdTIwMTMxNDI5KSIsIkVpa3lcdTAxNGQgKDE0MjlcdTIwMTMxNDQxKSIsIktha2l0c3UgKDE0NDFcdTIw''@;'; put 'put ''MTMxNDQ0KSIsIkJ1blx1MjAxOWFuICgxNDQ0XHUyMDEzMTQ0OSkiLCJIXHUwMTRkdG9rdSAoMTQ0OVx1MjAxMzE0NTIpIiwiS3lcdTAxNGR0b2t1ICgxNDUyXHUyMDEzMTQ1NSkiLCJLXHUwMTRkc2hcdTAxNGQgKDE0NTVcdTIwMTMxNDU3KSIsIkNoXHUwMTRkcm9rdSAoMTQ1N1x1MjAxMzE0''@;'; put 'put ''NjApIiwiS2Fuc2hcdTAxNGQgKDE0NjBcdTIwMTMxNDY2KSIsIkJ1bnNoXHUwMTRkICgxNDY2XHUyMDEzMTQ2NykiLCJcdTAxNGNuaW4gKDE0NjdcdTIwMTMxNDY5KSIsIkJ1bm1laSAoMTQ2OVx1MjAxMzE0ODcpIiwiQ2hcdTAxNGRreVx1MDE0ZCAoMTQ4N1x1MjAxMzE0ODkpIiwiRW50b2t1''@;'; put 'put ''ICgxNDg5XHUyMDEzMTQ5MikiLCJNZWlcdTAxNGQgKDE0OTJcdTIwMTMxNTAxKSIsIkJ1bmtpICgxNTAxXHUyMDEzMTUwNCkiLCJFaXNoXHUwMTRkICgxNTA0XHUyMDEzMTUyMSkiLCJUYWllaSAoMTUyMVx1MjAxMzE1MjgpIiwiS3lcdTAxNGRyb2t1ICgxNTI4XHUyMDEzMTUzMikiLCJUZW5i''@;'; put 'put ''dW4gKDE1MzJcdTIwMTMxNTU1KSIsIktcdTAxNGRqaSAoMTU1NVx1MjAxMzE1NTgpIiwiRWlyb2t1ICgxNTU4XHUyMDEzMTU3MCkiLCJHZW5raSAoMTU3MFx1MjAxMzE1NzMpIiwiVGVuc2hcdTAxNGQgKDE1NzNcdTIwMTMxNTkyKSIsIkJ1bnJva3UgKDE1OTJcdTIwMTMxNTk2KSIsIktlaWNo''@;'; put 'put ''XHUwMTRkICgxNTk2XHUyMDEzMTYxNSkiLCJHZW5uYSAoMTYxNVx1MjAxMzE2MjQpIiwiS2FuXHUyMDE5ZWkgKDE2MjRcdTIwMTMxNjQ0KSIsIlNoXHUwMTRkaG8gKDE2NDRcdTIwMTMxNjQ4KSIsIktlaWFuICgxNjQ4XHUyMDEzMTY1MikiLCJKXHUwMTRkXHUwMTRkICgxNjUyXHUyMDEzMTY1''@;'; put 'put ''NSkiLCJNZWlyZWtpICgxNjU1XHUyMDEzMTY1OCkiLCJNYW5qaSAoMTY1OFx1MjAxMzE2NjEpIiwiS2FuYnVuICgxNjYxXHUyMDEzMTY3MykiLCJFbnBcdTAxNGQgKDE2NzNcdTIwMTMxNjgxKSIsIlRlbm5hICgxNjgxXHUyMDEzMTY4NCkiLCJKXHUwMTRka3lcdTAxNGQgKDE2ODRcdTIwMTMx''@;'; put 'put ''Njg4KSIsIkdlbnJva3UgKDE2ODhcdTIwMTMxNzA0KSIsIkhcdTAxNGRlaSAoMTcwNFx1MjAxMzE3MTEpIiwiU2hcdTAxNGR0b2t1ICgxNzExXHUyMDEzMTcxNikiLCJLeVx1MDE0ZGhcdTAxNGQgKDE3MTZcdTIwMTMxNzM2KSIsIkdlbmJ1biAoMTczNlx1MjAxMzE3NDEpIiwiS2FucFx1MDE0''@;'; put 'put ''ZCAoMTc0MVx1MjAxMzE3NDQpIiwiRW5reVx1MDE0ZCAoMTc0NFx1MjAxMzE3NDgpIiwiS2FuXHUyMDE5ZW4gKDE3NDhcdTIwMTMxNzUxKSIsIkhcdTAxNGRyZWtpICgxNzUxXHUyMDEzMTc2NCkiLCJNZWl3YSAoMTc2NFx1MjAxMzE3NzIpIiwiQW5cdTIwMTllaSAoMTc3Mlx1MjAxMzE3ODEp''@;'; put 'put ''IiwiVGVubWVpICgxNzgxXHUyMDEzMTc4OSkiLCJLYW5zZWkgKDE3ODlcdTIwMTMxODAxKSIsIkt5XHUwMTRkd2EgKDE4MDFcdTIwMTMxODA0KSIsIkJ1bmthICgxODA0XHUyMDEzMTgxOCkiLCJCdW5zZWkgKDE4MThcdTIwMTMxODMwKSIsIlRlbnBcdTAxNGQgKDE4MzBcdTIwMTMxODQ0KSIs''@;'; put 'put ''IktcdTAxNGRrYSAoMTg0NFx1MjAxMzE4NDgpIiwiS2FlaSAoMTg0OFx1MjAxMzE4NTQpIiwiQW5zZWkgKDE4NTRcdTIwMTMxODYwKSIsIk1hblx1MjAxOWVuICgxODYwXHUyMDEzMTg2MSkiLCJCdW5reVx1MDE2YiAoMTg2MVx1MjAxMzE4NjQpIiwiR2VuamkgKDE4NjRcdTIwMTMxODY1KSIs''@;'; put 'put ''IktlaVx1MDE0ZCAoMTg2NVx1MjAxMzE4NjgpIiwiTWVpamkiLCJUYWlzaFx1MDE0ZCIsIlNoXHUwMTRkd2EiLCJIZWlzZWkiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sInBlcnNpYW4iOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYi''@;'; put 'put ''LCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiRmFydmFyZGluIiwiT3JkaWJlaGVzaHQiLCJLaG9yZGFkIiwiVGlyIiwiTW9yZGFkIiwiU2hhaHJpdmFyIiwiTWVociIsIkFiYW4iLCJBemFyIiwiRGV5IiwiQmFobWFuIiwiRXNmYW5kIl0sImxvbmciOlsiRmFydmFyZGlu''@;'; put 'put ''IiwiT3JkaWJlaGVzaHQiLCJLaG9yZGFkIiwiVGlyIiwiTW9yZGFkIiwiU2hhaHJpdmFyIiwiTWVociIsIkFiYW4iLCJBemFyIiwiRGV5IiwiQmFobWFuIiwiRXNmYW5kIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1v''@;'; put 'put ''biIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBUCJdLCJzaG9ydCI6WyJBUCJdLCJsb25nIjpbIkFQ''@;'; put 'put ''Il19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJyb2MiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVs''@;'; put 'put ''IiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXX0sImRheXMiOnsibmFy''@;'; put 'put ''cm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXki''@;'; put 'put ''XX0sImVyYXMiOnsibmFycm93IjpbIkJlZm9yZSBSLk8uQy4iLCJNaW5ndW8iXSwic2hvcnQiOlsiQmVmb3JlIFIuTy5DLiIsIk1pbmd1byJdLCJsb25nIjpbIkJlZm9yZSBSLk8uQy4iLCJNaW5ndW8iXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX19fSwibnVtYmVyIjp7''@;'; put 'put ''Im51IjpbImxhdG4iXSwicGF0dGVybnMiOnsiZGVjaW1hbCI6eyJwb3NpdGl2ZVBhdHRlcm4iOiJ7bnVtYmVyfSIsIm5lZ2F0aXZlUGF0dGVybiI6InttaW51c1NpZ259e251bWJlcn0ifSwiY3VycmVuY3kiOnsicG9zaXRpdmVQYXR0ZXJuIjoie2N1cnJlbmN5fXtudW1iZXJ9IiwibmVnYXRp''@;'; put 'put ''dmVQYXR0ZXJuIjoie21pbnVzU2lnbn17Y3VycmVuY3l9e251bWJlcn0ifSwicGVyY2VudCI6eyJwb3NpdGl2ZVBhdHRlcm4iOiJ7bnVtYmVyfXtwZXJjZW50U2lnbn0iLCJuZWdhdGl2ZVBhdHRlcm4iOiJ7bWludXNTaWdufXtudW1iZXJ9e3BlcmNlbnRTaWdufSJ9fSwic3ltYm9scyI6eyJs''@;'; put 'put ''YXRuIjp7ImRlY2ltYWwiOiIuIiwiZ3JvdXAiOiIsIiwibmFuIjoiTmFOIiwicGx1c1NpZ24iOiIrIiwibWludXNTaWduIjoiLSIsInBlcmNlbnRTaWduIjoiJSIsImluZmluaXR5IjoiXHUyMjFlIn19LCJjdXJyZW5jaWVzIjp7IkFVRCI6IkEkIiwiQlJMIjoiUiQiLCJDQUQiOiJDQSQiLCJD''@;'; put 'put ''TlkiOiJDTlx4YTUiLCJFVVIiOiJcdTIwYWMiLCJHQlAiOiJceGEzIiwiSEtEIjoiSEskIiwiSUxTIjoiXHUyMGFhIiwiSU5SIjoiXHUyMGI5IiwiSlBZIjoiXHhhNSIsIktSVyI6Ilx1MjBhOSIsIk1YTiI6Ik1YJCIsIk5aRCI6Ik5aJCIsIlRXRCI6Ik5UJCIsIlVTRCI6IiQiLCJWTkQiOiJc''@;'; put 'put ''dTIwYWIiLCJYQUYiOiJGQ0ZBIiwiWENEIjoiRUMkIiwiWE9GIjoiQ0ZBIiwiWFBGIjoiQ0ZQRiJ9fX0nKX19LGM9Pnt2YXIgbD1uPT5jKGMucz1uKTtsKDU1MzIxKSxsKDQ4MzMyKX1dKTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=runtime.c316ac51d5966713-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHM9e30sdj17fTtmdW5jdGlvbiBhKGUpe3ZhciBuPXZbZV07aWYodm9pZCAwIT09bilyZXR1cm4gbi5leHBvcnRzO3ZhciByPXZbZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBzW2VdLmNhbGwoci5leHBvcnRzLHIsci5leHBv''@;'; put 'put ''cnRzLGEpLHIubG9hZGVkPSEwLHIuZXhwb3J0c31hLm09cyxlPVtdLGEuTz0obixyLG8sbCk9PntpZighcil7dmFyIHU9MS8wO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kyspe2Zvcih2YXJbcixvLGxdPWVbdF0sZD0hMCxmPTA7ZjxyLmxlbmd0aDtmKyspKCExJmx8fHU+PWwpJiZPYmplY3Qua2V5''@;'; put 'put ''cyhhLk8pLmV2ZXJ5KHA9PmEuT1twXShyW2ZdKSk/ci5zcGxpY2UoZi0tLDEpOihkPSExLGw8dSYmKHU9bCkpO2lmKGQpe2Uuc3BsaWNlKHQtLSwxKTt2YXIgYz1vKCk7dm9pZCAwIT09YyYmKG49Yyl9fXJldHVybiBufWw9bHx8MDtmb3IodmFyIHQ9ZS5sZW5ndGg7dD4wJiZlW3QtMV1bMl0+''@;'; put 'put ''bDt0LS0pZVt0XT1lW3QtMV07ZVt0XT1bcixvLGxdfSxhLm49ZT0+e3ZhciBuPWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiBhLmQobix7YTpufSksbn0sYS5kPShlLG4pPT57Zm9yKHZhciByIGluIG4pYS5vKG4scikmJiFhLm8oZSxyKSYmT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6bltyXX0pfSxhLm89KGUsbik9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pLGEucj1lPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs''@;'; put 'put ''U3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sYS5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLGUpLCgoKT0+e3ZhciBlPXs2NjY6MH07YS5PLmo9''@;'; put 'put ''bz0+MD09PWVbb107dmFyIG49KG8sbCk9Pnt2YXIgZixjLFt0LHUsZF09bCxpPTA7aWYodC5zb21lKF89PjAhPT1lW19dKSl7Zm9yKGYgaW4gdSlhLm8odSxmKSYmKGEubVtmXT11W2ZdKTtpZihkKXZhciBiPWQoYSl9Zm9yKG8mJm8obCk7aTx0Lmxlbmd0aDtpKyspYS5vKGUsYz10W2ldKSYm''@;'; put 'put ''ZVtjXSYmZVtjXVswXSgpLGVbY109MDtyZXR1cm4gYS5PKGIpfSxyPXNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W107ci5mb3JFYWNoKG4uYmluZChudWxsLDApKSxyLnB1c2g9bi5iaW5kKG51bGwsci5wdXNoLmJpbmQo''@;'; put 'put ''cikpfSkoKX0pKCk7'';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=scripts.89a8947a0266c47a-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KGZ1bmN0aW9uKGIsail7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1qKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxqKTtlbHNle3ZhciB6LE09aigpO2Zv''@;'; put 'put ''cih6IGluIE0pKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOmIpW3pdPU1bel19fSkodGhpcyxmdW5jdGlvbigpe3JldHVybiBqPXsiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMgKioqIQogICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihNLGwsdil7''@;'; put 'put ''InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLkNsYXJpdHlJY29uc0FwaT12b2lkIDA7dmFyIHA9digKLyohIC4vdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3No''@;'; put 'put ''YXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIiksYT17fTtmdW5jdGlvbiBrKCl7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBrLnNpbmdsZUluc3RhbmNlPWsuc2luZ2xlSW5zdGFuY2U/ay5zaW5nbGVJbnN0YW5jZTpuZXcga30sZW51''@;'; put 'put ''bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxrLnByb3RvdHlwZS52YWxpZGF0ZU5hbWU9ZnVuY3Rpb24oUyl7aWYoMD09PVMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyEiKTtpZigvXHMvLnRlc3QoUykp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3Qgbm90IGNvbnRhaW4gYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyEiKTtyZXR1cm4hMH0say5wcm90b3R5cGUubm9ybWFsaXplU2hhcGVOYW1lPWZ1bmN0aW9uKFMpe3JldHVybiBTLnRvTG93ZXJDYXNlKCl9LGsucHJv''@;'; put 'put ''dG90eXBlLnNldEljb25UZW1wbGF0ZT1mdW5jdGlvbihTLEQpe0Q9RC50cmltKCksdGhpcy52YWxpZGF0ZU5hbWUoUykmJihTPXRoaXMubm9ybWFsaXplU2hhcGVOYW1lKFMpLGFbU10mJmRlbGV0ZSBhW1NdLGFbU109RCxwLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5lbWl0Q2hh''@;'; put 'put ''bmdlcyhTLEQpKX0say5wcm90b3R5cGUuc2V0SWNvbkFsaWFzZXM9ZnVuY3Rpb24oUyxELHgpe2Zvcih2YXIgRz0wLFA9eDtHPFAubGVuZ3RoO0crKyl7dmFyIE89UFtHXTt0aGlzLnZhbGlkYXRlTmFtZShPKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsTyx7Z2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIFNbRF19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSxrLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oUyl7aWYoIm9iamVjdCIhPXR5cGVvZiBTKXRocm93IG5ldyBFcnJvcignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGluIHRoZSBm''@;'; put 'put ''b2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogInNoYXBlLXRlbXBsYXRlIiB9Jyk7Zm9yKHZhciBEIGluIFMpUy5oYXNPd25Qcm9wZXJ0eShEKSYmdGhpcy5zZXRJY29uVGVtcGxhdGUoRCxTW0RdKX0say5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKFMp''@;'; put 'put ''e3JldHVybiEhYVt0aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShTKV19LGsucHJvdG90eXBlLmdldD1mdW5jdGlvbihTKXtpZighUylyZXR1cm4gYTtpZigic3RyaW5nIiE9dHlwZW9mIFMpdGhyb3cgbmV3IFR5cGVFcnJvcigiT25seSBzdHJpbmcgYXJndW1lbnQgaXMgYWxsb3dlZCBpbiB0aGlz''@;'; put 'put ''IG1ldGhvZC4iKTtyZXR1cm4gYVt0aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShTKV19LGsucHJvdG90eXBlLmFsaWFzPWZ1bmN0aW9uKFMpe2lmKCJvYmplY3QiIT10eXBlb2YgUyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRlcmFsIHBhc3NlZCBp''@;'; put 'put ''biB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6IFsiYWxpYXMtbmFtZSIsIC4uLl0gfScpO2Zvcih2YXIgRCBpbiBTKWlmKFMuaGFzT3duUHJvcGVydHkoRCkpe2lmKCFhLmhhc093blByb3BlcnR5KEQpKXRocm93IG5ldyBFcnJvcignQW4g''@;'; put 'put ''aWNvbiAiJytEKyJcIiB5b3UgYXJlIHRyeWluZyB0byBzZXQgYWxpYXNlcyB0byBkb2Vzbid0IGV4aXN0IGluIHRoZSBDbGFyaXR5IEljb25zIHNldHMhIik7dGhpcy5zZXRJY29uQWxpYXNlcyhhLEQsU1tEXSl9fSxsLkNsYXJpdHlJY29uc0FwaT12PWt9LCIuL3Byb2plY3RzL2ljb25zL3Ny''@;'; put 'put ''Yy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihNLGwsSCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLkNsYXJpdHlJY29uRWxlbWVudD12b2lk''@;'; put 'put ''IDA7dmFyIHA9SCgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLGE9SCgKLyohIC4vdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9i''@;'; put 'put ''c2VydmVyLnRzIiksdj0wLGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2suY2xhc3NOYW1lPSJpcy1vZmYtc2NyZWVuIjt2YXIgUz1mdW5jdGlvbigpe3JldHVybiBIVE1MRWxlbWVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIEQoKXt2YXIgeD1TLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKTtyZXR1cm4geC5jbHJJY29uVW5pcUlkPSJfY2xyX2ljb25fIit2LHYrKyx4fSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmKFM9ZnVuY3Rpb24oKXtyZXR1cm4gUmVmbGVjdC5jb25zdHJ1Y3QoSFRNTEVsZW1lbnQsYXJndW1lbnRzLHRoaXMuY29uc3RydWN0b3IpfSks''@;'; put 'put ''KGwuQ2xhcml0eUljb25FbGVtZW50PUQpLm9ic2VydmVkQXR0cmlidXRlcz1bInNoYXBlIiwic2l6ZSIsInRpdGxlIl0sKChELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1''@;'; put 'put ''ZTpEfX0pKS5jb25zdHJ1Y3Rvcj1EKS5wcm90b3R5cGUuX2FwcGVuZEN1c3RvbVRpdGxlPWZ1bmN0aW9uKCl7dmFyIHg9ay5jbG9uZU5vZGUoITEpO3guaWQ9dGhpcy5jbHJJY29uVW5pcUlkLHgudGV4dENvbnRlbnQ9dGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsLHRoaXMuYXBwZW5kQ2hpbGQo''@;'; put 'put ''eCl9LEQucHJvdG90eXBlLl9zZXRJY29uU2l6ZT1mdW5jdGlvbih4KXshTnVtYmVyKHgpfHxOdW1iZXIoeCk8MD8odGhpcy5zdHlsZS53aWR0aD1udWxsLHRoaXMuc3R5bGUuaGVpZ2h0PW51bGwpOih0aGlzLnN0eWxlLndpZHRoPXgrInB4Iix0aGlzLnN0eWxlLmhlaWdodD14KyJweCIpfSxE''@;'; put 'put ''LnByb3RvdHlwZS5fbm9ybWFsaXplU2hhcGU9ZnVuY3Rpb24oeCl7cmV0dXJuIHguc3BsaXQoL1xzLylbMF0udG9Mb3dlckNhc2UoKX0sRC5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgeCxHPXRoaXM7aWYodGhpcy5nZXRBdHRyaWJ1dGUoInJvbGUiKXx8dGhp''@;'; put 'put ''cy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJub25lIiksdGhpcy5oYXNBdHRyaWJ1dGUoInNpemUiKSYmKHg9dGhpcy5nZXRBdHRyaWJ1dGUoInNpemUiKSx0aGlzLmN1cnJlbnRTaXplQXR0clZhbCE9PXgmJih0aGlzLmN1cnJlbnRTaXplQXR0clZhbD14LHRoaXMuX3NldEljb25TaXplKHgpKSks''@;'; put 'put ''dGhpcy5oYXNBdHRyaWJ1dGUoInNoYXBlIikpe3ZhciBQPXRoaXMuX25vcm1hbGl6ZVNoYXBlKHRoaXMuZ2V0QXR0cmlidXRlKCJzaGFwZSIpKTtpZih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uPWEuU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLnN1YnNjcmliZVRvKFAs''@;'; put 'put ''ZnVuY3Rpb24oTyl7Ry5faW5qZWN0VGVtcGxhdGUoTyl9KSx0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWw9UCwhcC5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2UuaGFzKHRoaXMuY3VycmVudFNoYXBlQXR0clZhbCkpcmV0dXJuIHZvaWQgdGhpcy5faW5qZWN0RXJyb3JUZW1wbGF0ZSgpO2lmKChQ''@;'; put 'put ''PXAuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKT09PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUpcmV0dXJuO3RoaXMuY3VycmVudFNoYXBlVGVtcGxhdGU9UH10aGlzLmhhc0F0dHJpYnV0ZSgidGl0bGUiKSYmKFA9dGhpcy5nZXRBdHRy''@;'; put 'put ''aWJ1dGUoInRpdGxlIiksdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsIT09UCYmKHRoaXMuY3VycmVudFRpdGxlQXR0clZhbD1QKSwhdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKXx8dGhpcy5faW5qZWN0VGVtcGxhdGUoKX0sRC5wcm90b3R5cGUuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrPWZ1''@;'; put 'put ''bmN0aW9uKHgsRyxQKXt2YXIgTz10aGlzO2lmKCJzaXplIj09PXgmJnRoaXMuX3NldEljb25TaXplKFApLCJzaGFwZSI9PT14KXtpZih0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWw9dGhpcy5fbm9ybWFsaXplU2hhcGUoUCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmKHRoaXMu''@;'; put 'put ''X3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24oKSx0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uPWEuU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLnN1YnNjcmliZVRvKHRoaXMuY3VycmVudFNoYXBlQXR0clZhbCxmdW5jdGlvbihUKXtPLl9pbmplY3RUZW1wbGF0ZShUKX0p''@;'; put 'put ''KSwhcC5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2UuaGFzKHRoaXMuY3VycmVudFNoYXBlQXR0clZhbCkpcmV0dXJuIHZvaWQgdGhpcy5faW5qZWN0RXJyb3JUZW1wbGF0ZSgpO3RoaXMuY3VycmVudFNoYXBlVGVtcGxhdGU9cC5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2UuZ2V0KHRoaXMuY3Vy''@;'; put 'put ''cmVudFNoYXBlQXR0clZhbCl9InRpdGxlIj09PXgmJih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWw9UCwhdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKXx8dGhpcy5faW5qZWN0VGVtcGxhdGUoKX0sRC5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9zaGFw''@;'; put 'put ''ZVRlbXBsYXRlU3Vic2NyaXB0aW9uJiZ0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCl9LEQucHJvdG90eXBlLl9zZXRBcmlhTGFiZWxsZWRCeT1mdW5jdGlvbigpe3ZhciB4PXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiKSxHPShHPXRoaXMucXVlcnlTZWxlY3Rv''@;'; put 'put ''cigic3ZnIikpfHx0aGlzO3g/eCYmeC5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmRy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIseCsiICIrdGhpcy5jbHJJY29uVW5pcUlkKTpHLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQp''@;'; put 'put ''fSxELnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oeCl7eCYmeCE9PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXgpLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVB''@;'; put 'put ''dHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0sRC5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXAuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgi''@;'; put 'put ''ZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1zZngudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNv''@;'; put 'put ''bnMtc2Z4LnRzICoqKiEKICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTSxsLEgpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksbC5DbGFyaXR5SWNvbnM9dm9pZCAwO3ZhciBwPUgoCi8qISAuL2luZGV4ICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJDbGFyaXR5SWNvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBwLkNsYXJpdHlJY29uc319KSxIPUgoCi8qISAuL3NoYXBlcy9hbGwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyIpLHAuQ2xhcml0eUljb25zLmFkZChILkFsbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyI6Ci8q''@;'; put 'put ''ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9m''@;'; put 'put ''dW5jdGlvbihNLGwsYSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLkNsYXJpdHlJY29ucz12b2lkIDA7dmFyIHY9YSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFw''@;'; put 'put ''aS50cyIpLHA9YSgKLyohIC4vY2xyLWljb25zLWVsZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIik7YT1hKAovKiEgLi9zaGFwZXMvY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpLChs''@;'; put 'put ''LkNsYXJpdHlJY29ucz12PXYuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlKS5hZGQoYS5Db3JlU2hhcGVzKSx0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIil8fCh3aW5kb3cuQ2xhcml0eUljb25zPXYpLGN1c3RvbUVsZW1lbnRzLmdldCgi''@;'; put 'put ''Y2xyLWljb24iKXx8Y3VzdG9tRWxlbWVudHMuZGVmaW5lKCJjbHItaWNvbiIscC5DbGFyaXR5SWNvbkVsZW1lbnQpKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzICoqKiEKICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxH''@;'; put 'put ''KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuQWxsU2hhcGVzPXZvaWQgMDt2YXIgcD1HKAovKiEgLi9jaGFydC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiKSxhPUco''@;'; put 'put ''Ci8qISAuL2NvbW1lcmNlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyIpLHY9RygKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpLGs9RygKLyohIC4vZXNzZW50''@;'; put 'put ''aWFsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2Vzc2VudGlhbC1zaGFwZXMudHMiKSxTPUcoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLEQ9RygKLyohIC4vc29jaWFsLXNoYXBlcyAq''@;'; put 'put ''LwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiKSx4PUcoCi8qISAuL3RlY2hub2xvZ3ktc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiKSxQPUcoCi8qISAuL3RleHQtZWRpdC1zaGFwZXMgKi8K''@;'; put 'put ''Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksTz0oRz1HKAovKiEgLi90cmF2ZWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyIpLFA9W3YuQ29yZVNoYXBlcyxhLkNvbW1lcmNlU2hhcGVzLGsu''@;'; put 'put ''RXNzZW50aWFsU2hhcGVzLFMuTWVkaWFTaGFwZXMsRC5Tb2NpYWxTaGFwZXMseC5UZWNobm9sb2d5U2hhcGVzLEcuVHJhdmVsU2hhcGVzLHAuQ2hhcnRTaGFwZXMsUC5UZXh0RWRpdFNoYXBlc10se30pO2wuQWxsU2hhcGVzPU87Zm9yKHZhciBUPTAsdDE9UDtUPHQxLmxlbmd0aDtUKyspe3Zh''@;'; put 'put ''ciBRLFk9dDFbVF07Zm9yKFEgaW4gWSlZLmhhc093blByb3BlcnR5KFEpJiYoT1tRXT1ZW1FdKX10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoTyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9z''@;'; put 'put ''aGFwZXMvY2hhcnQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxhKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuQ2hhcnRTaGFwZXM9bC5DbHJT''@;'; put 'put ''aGFwZUJlbGxDdXJ2ZT1sLkNsclNoYXBlVGlja0NoYXJ0PWwuQ2xyU2hhcGVTY2F0dGVyUGxvdD1sLkNsclNoYXBlUGllQ2hhcnQ9bC5DbHJTaGFwZUxpbmVDaGFydD1sLkNsclNoYXBlSGVhdE1hcD1sLkNsclNoYXBlR3JpZENoYXJ0PWwuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PWwuQ2xyU2hhcGVD''@;'; put 'put ''bG91ZENoYXJ0PWwuQ2xyU2hhcGVCdWJibGVDaGFydD1sLkNsclNoYXBlQm94UGxvdD1sLkNsclNoYXBlQmFyQ2hhcnQ9bC5DbHJTaGFwZUF4aXNDaGFydD12b2lkIDA7dmFyIHA9YSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGls''@;'; put 'put ''cy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpO2E9YSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLGwuQ2xyU2hhcGVBeGlzQ2hhcnQ9KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUg''@;'; put 'put ''MzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAy''@;'; put 'put ''NS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44''@;'; put 'put ''OTYgMzQgNyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2''@;'; put 'put ''LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQg''@;'; put 'put ''Ni42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEy''@;'; put 'put ''LjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4Ljkx''@;'; put 'put ''IDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIEwgNi4wMDcgMjYuNzMxIFoiLz5c''@;'; put 'put ''biAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAz''@;'; put 'put ''MC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0''@;'; put 'put ''LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAy''@;'; put 'put ''IDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVk''@;'; put 'put ''IiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEw''@;'; put 'put ''LjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEu''@;'; put 'put ''MDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4w''@;'; put 'put ''ODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAy''@;'; put 'put ''OSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5''@;'; put 'put ''LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAy''@;'; put 'put ''NC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBk''@;'; put 'put ''PSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5''@;'; put 'put ''MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLGwuQ2xyU2hhcGVCYXJDaGFydD0oMCxhLmNsckljb25TVkcpKCdcbiAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAg''@;'; put 'put ''TCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYg''@;'; put 'put ''TCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42''@;'; put 'put ''IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAz''@;'; put 'put ''MSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAy''@;'; put 'put ''MyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42''@;'; put 'put ''NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0''@;'; put 'put ''IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00LS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMS45Njkg''@;'; put 'put ''OS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI1IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2''@;'; put 'put ''IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwg''@;'; put 'put ''NCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxOSBMIDIxIDE5IEwgMjEgMjYgTCAxOS40IDI2IEwgMTkuNCAyMC42IEwgMTYuNiAyMC42IEwgMTYuNiAyNiBMIDE1IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgx''@;'; put 'put ''OCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0''@;'; put 'put ''Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEw''@;'; put 'put ''NSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcg''@;'; put 'put ''MTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAx''@;'; put 'put ''My4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkg''@;'; put 'put ''MjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxsLkNsclNoYXBlQm94UGxvdD0oMCxhLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUu''@;'; put 'put ''NCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIEwgMTkgMjQgWiBNIDIw''@;'; put 'put ''LjYgMTEuNiBMIDI3LjQgMTEuNiBMIDI3LjQgMTcuMiBMIDIwLjYgMTcuMiBMIDIwLjYgMTEuNiBaIE0gMjcuNCAyMi40IEwgMjAuNiAyMi40IEwgMjAuNiAxOC44IEwgMjcuNCAxOC44IEwgMjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMy''@;'; put 'put ''IDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0IFogTSAxOSAyNCBMIDI5IDI0IEwgMjkgMTAgTCAxOSAxMCBaIE0gMjEg''@;'; put 'put ''MTIgTCAyNyAxMiBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0''@;'; put 'put ''IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4x''@;'; put 'put ''MDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTgu''@;'; put 'put ''OCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik0gMTkgMTAgTCAyMy43MjggMTAgQyAyNC4xMDUgMTAuNTk2IDI0LjU2NCAxMS4xMzUgMjUuMDkgMTEuNiBMIDIwLjYgMTEuNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTIuOTg3IEMgMjcuOTA5IDEzLjE3NyAyOC40NDUgMTMuMzEzIDI5IDEzLjM4NyBMIDI5IDI0IEwgMTkg''@;'; put 'put ''MjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAu''@;'; put 'put ''MTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDE5IDEwIEwgMTkgMjQgTCAyOSAyNCBMIDI5IDEzLjQyNyBD''@;'; put 'put ''IDI5LjEwMyAxMy40NCAyOS4yMDYgMTMuNDUxIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAx''@;'; put 'put ''NyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDIxIDEyIEwgMjUuNDcyIDEyIEMgMjUuOTQgMTIuMzUyIDI2LjQ1MiAxMi42NSAyNyAxMi44ODUgTCAyNyAxNyBMIDIxIDE3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAz''@;'; put 'put ''NCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwv''@;'; put 'put ''cGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAx''@;'; put 'put ''NS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAyNCBMIDE5IDI0IEwgMTkgMTUuMzQ1IEMgMTkuMDIxIDE1LjM0OCAyMC42IDE1LjM2IDIwLjYgMTUuMzYgTCAyMC42''@;'; put 'put ''IDE3LjIgTCAyNy40IDE3LjIgTCAyNy40IDE1LjM2IEwgMjkgMTUuMzU3IEwgMjkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBMIDI3LjQgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4''@;'; put 'put ''IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAy''@;'; put 'put ''OS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg''@;'; put 'put ''MzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDE5IDEwIEwgMTkgMTAuMDQ4IEwgMTcuNjI1IDEyLjM5NSBDIDE2LjgwNyAxMy41ODMgMTcuNTcxIDE1LjE5NyAxOSAxNS4zNDUgTCAx''@;'; put 'put ''OSAyNCBMIDI5IDI0IEwgMjkgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0IFogTSAyNyAxNyBMIDIxIDE3IEwgMjEgMTUuMzU3IEwg''@;'; put 'put ''MjcgMTUuMzU3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAw''@;'; put 'put ''NCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgx''@;'; put 'put ''IDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksbC5DbHJTaGFwZUJ1YmJsZUNoYXJ0PSgwLGEuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBN''@;'; put 'put ''IDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAy''@;'; put 'put ''OSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDEx''@;'; put 'put ''Ljc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIw''@;'; put 'put ''IDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYg''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAy''@;'; put 'put ''Ljg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkg''@;'; put 'put ''MTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIw''@;'; put 'put ''IEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5''@;'; put 'put ''NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcg''@;'; put 'put ''MjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIy''@;'; put 'put ''NyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQg''@;'; put 'put ''QyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgcng9''@;'; put 'put ''IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcg''@;'; put 'put ''MjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIy''@;'; put 'put ''LjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIw''@;'; put 'put ''OSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUg''@;'; put 'put ''MjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBD''@;'; put 'put ''IDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5c''@;'; put 'put ''biAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3''@;'; put 'put ''LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE0IEMgMTUgMTYuMjA5IDEzLjIwOSAxOCAxMSAxOCBDIDguNzkxIDE4IDcgMTYuMjA5IDcgMTQgQyA3IDExLjc5MSA4Ljc5MSAxMCAxMSAxMCBDIDEzLjIwOSAxMCAxNSAxMS43OTEgMTUgMTQgWiBNIDExIDEx''@;'; put 'put ''LjYgQyA5LjY3NSAxMS42IDguNiAxMi42NzUgOC42IDE0IEMgOC42IDE1LjMyNSA5LjY3NSAxNi40IDExIDE2LjQgQyAxMi4zMjUgMTYuNCAxMy40IDE1LjMyNSAxMy40IDE0IEMgMTMuNCAxMi42NzUgMTIuMzI1IDExLjYgMTEgMTEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAy''@;'; put 'put ''MSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAy''@;'; put 'put ''Ni44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQu''@;'; put 'put ''ODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3''@;'; put 'put ''LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNC41NzkgMTUuMzU3IEMgMjMuNjM5IDE1Ljg2MyAyMyAxNi44NTcgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1''@;'; put 'put ''NyAyOSAxOCBDIDI5IDE2Ljg1NyAyOC4zNjEgMTUuODYzIDI3LjQyMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4y''@;'; put 'put ''MDkgMTAgMTEgMTAgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2''@;'; put 'put ''IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1''@;'; put 'put ''NCAxLjE0NCBaIj48L3BhdGg+JyksbC5DbHJTaGFwZUNsb3VkQ2hhcnQ9KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsMjlWN0gzMlYyOVoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMC45NzEgMTEuMjQzIEMgMjMuMzE0IDEzLjU4NiAyMi4zNjQgMTguMzM1IDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1''@;'; put 'put ''Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy44NzkgOS44NDkgMTguNjI4IDguOSAyMC45NzEgMTEuMjQzIFogTSAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4z''@;'; put 'put ''ODkgMTcuNTc2IDIwLjU3NyBDIDIwLjM4OCAxNy43NjUgMjEuMzM4IDE0LjE1NiAxOS42OTcgMTIuNTE2IEMgMTguMDU3IDEwLjg3NiAxNC40NDggMTEuODI1IDExLjYzNiAxNC42MzcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBh''@;'; put 'put ''dGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjcgMjAuNiAyMy42IDIxLjIyNyAy''@;'; put 'put ''My42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI3IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNyAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI3Ij48L3Bh''@;'; put 'put ''dGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUg''@;'; put 'put ''QyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSAxMC4zNjQgMTMuMzY0IEMgNi44NDkgMTYuODc4IDUuODk5IDIxLjYyNyA4LjI0MyAyMy45NyBDIDEwLjU4NiAyNi4zMTQgMTUuMzM0IDI1LjM2NCAxOC44NDkgMjEuODQ5IEMgMjIuMzY0IDE4LjMzNSAyMy4zMTQgMTMuNTg2IDIwLjk3MSAx''@;'; put 'put ''MS4yNDMgQyAxOC42MjggOC45IDEzLjg3OSA5Ljg0OSAxMC4zNjQgMTMuMzY0IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUg''@;'; put 'put ''MTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAy''@;'; put 'put ''Mi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4w''@;'; put 'put ''MjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44Nzgg''@;'; put 'put ''MTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4''@;'; put 'put ''IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAy''@;'; put 'put ''OCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMg''@;'; put 'put ''MjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0i''@;'; put 'put ''NyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAx''@;'; put 'put ''My4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAy''@;'; put 'put ''MS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcg''@;'; put 'put ''MjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xl''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUg''@;'; put 'put ''NSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEu''@;'; put 'put ''NjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuMDQ5IDEwLjY3OSAxNi40NTMgOS40OTIgMTguOTU2IDEwLjEyNCBMIDE4LjAwOCAxMS43NDEgQyAxNi4xOCAxMS41MTggMTMuNjk1IDEyLjU3OCAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUx''@;'; put 'put ''NSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDE5LjIyOCAxOC45MjUgMjAuMjM3IDE2Ljk5OCAyMC40NTYgMTUuMzU3IEwgMjIuMjIgMTUuMzU3IEMgMjIuMDA2IDE3LjQ3NyAyMC44MzggMTkuODYxIDE4Ljg0OSAyMS44NDkgWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAx''@;'; put 'put ''OSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMg''@;'; put 'put ''MjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUu''@;'; put 'put ''MzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTguOTU2IDEwLjEyNCBDIDE2''@;'; put 'put ''LjQ1MyA5LjQ5MiAxMy4wNDkgMTAuNjc5IDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMC44MzggMTkuODYxIDIyLjAwNiAxNy40NzcgMjIuMjIgMTUuMzU3''@;'; put 'put ''IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAw''@;'; put 'put ''NiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44''@;'; put 'put ''NTQgMS4xNDQgWiI+PC9wYXRoPicpLGwuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PSgwLGEuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMw''@;'; put 'put ''LjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4y''@;'; put 'put ''IDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQg''@;'; put 'put ''MTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEg''@;'; put 'put ''MjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5''@;'; put 'put ''IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1''@;'; put 'put ''LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3''@;'; put 'put ''LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkg''@;'; put 'put ''QyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDExLjggQyA2LjU1OCAxMS44IDYuMiAxMS40NDIg''@;'; put 'put ''Ni4yIDExIEMgNi4yIDEwLjU1OCA2LjU1OCAxMC4yIDcgMTAuMiBMIDEzIDEwLjIgQyAxNS40MDQgMTAuMiAxNi4zNjggMTEuOTA3IDE3LjY1MyAxNi40NzggQyAxNy42OTUgMTYuNjI4IDE3Ljc0NCAxNi44MDMgMTcuODM1IDE3LjEyOSBDIDE3LjkwOSAxNy4zOTIgMTcuOTY0IDE3LjU4OCAx''@;'; put 'put ''OC4wMTkgMTcuNzggQyAxOS4zMzIgMjIuMzc1IDIwLjU0OSAyNC4yIDIzIDI0LjIgTCAyOSAyNC4yIEMgMjkuNDQyIDI0LjIgMjkuOCAyNC41NTggMjkuOCAyNSBDIDI5LjggMjUuNDQyIDI5LjQ0MiAyNS44IDI5IDI1LjggTCAyMyAyNS44IEMgMTkuNTM1IDI1LjggMTcuOTgxIDIzLjQ2OSAx''@;'; put 'put ''Ni40ODEgMTguMjIgQyAxNi40MjUgMTguMDI1IDE2LjM2OSAxNy44MjYgMTYuMjk1IDE3LjU2IEMgMTYuMjAzIDE3LjIzNCAxNi4xNTQgMTcuMDYgMTYuMTEzIDE2LjkxMSBDIDE1LjA0MyAxMy4xMDUgMTQuMzA1IDExLjggMTMgMTEuOCBMIDcgMTEuOCBaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1''@;'; put 'put ''IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMg''@;'; put 'put ''MjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAx''@;'; put 'put ''OC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPGNpcmNs''@;'; put 'put ''ZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAx''@;'; put 'put ''NS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42''@;'; put 'put ''MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40''@;'; put 'put ''NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUu''@;'; put 'put ''MDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAw''@;'; put 'put ''NCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1''@;'; put 'put ''IEwgMTcuNjI1IDEyLjM5NSBDIDE3LjQ3NiAxMi42MTIgMTcuMzc5IDEyLjg0MyAxNy4zMyAxMy4wNzcgQyAxNy4yNjIgMTIuOTQ4IDE3LjE5MiAxMi44MiAxNy4xMTggMTIuNjkxIEMgMTYuMTMgMTAuOTYyIDE0Ljc5NSAxMCAxMyAxMCBMIDcgMTAgQyA2LjQ0OCAxMCA2IDEwLjQ0OCA2IDEx''@;'; put 'put ''IEMgNiAxMS41NTIgNi40NDggMTIgNyAxMiBMIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUy''@;'; put 'put ''IDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC42NCAxNi41OTggMTguMzg1IDE1Ljc0NCAxOC4xNDcgMTUuMDQ0IEMgMTguNDA3IDE1LjIxNSAxOC43MTcgMTUu''@;'; put 'put ''MzI2IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0i''@;'; put 'put ''TSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEg''@;'; put 'put ''MzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxsLkNsclNoYXBlR3JpZENoYXJ0PSgwLGEuY2xySWNvblNWRykoJ1xu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJN''@;'; put 'put ''MzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44''@;'; put 'put ''OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDMyIDYgQyAzMy4xMDUgNiAzNCA2Ljg5NSAzNCA4IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBDIDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5''@;'; put 'put ''LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNIDMyIDMwIEwgMjEgMzAgQyAxOS44OTUgMzAgMTkgMjkuMTA1IDE5IDI4IEwgMTkgMjEgQyAxOSAxOS44OTUgMTkuODk1IDE5IDIxIDE5IEwgMzIgMTkg''@;'; put 'put ''QyAzMy4xMDUgMTkgMzQgMTkuODk1IDM0IDIxIEwgMzQgMjggQyAzNCAyOS4xMDUgMzMuMTA1IDMwIDMyIDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS1hbGVydGVkIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhB''@;'; put 'put ''MiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAx''@;'; put 'put ''OS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkg''@;'; put 'put ''OCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtYWxlcnRlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0y''@;'; put 'put ''SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC1hbGVydGVkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0y''@;'; put 'put ''SDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAx''@;'; put 'put ''MS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDEx''@;'; put 'put ''LjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDE1''@;'; put 'put ''IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAyMC4wMTQgMTcgMTkuMTk1IDE2LjI4NyAxOS4wMyAxNS4zNDggQyAxOS4wNDEgMTUuMzQ5IDE5LjA1MyAxNS4zNSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUu''@;'; put 'put ''MzU5IDE5LjI3IDE1LjM1NyBMIDMzLjk2OCAxNS4zNTcgQyAzMy44IDE2LjI5MiAzMi45ODMgMTcgMzIgMTcgWiBNIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjEuMzcyIDYgTCAxOSAxMC4wNDggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAz''@;'; put 'put ''MCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAz''@;'; put 'put ''MiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAx''@;'; put 'put ''LjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEu''@;'; put 'put ''MTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJh''@;'; put 'put ''ZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYuMDU2IEMgMjIuNTkgNi43MjkgMjIuNjggNy4zODEgMjIuODQ4''@;'; put 'put ''IDggTCAyMSA4IEwgMjEgMTUgTCAzMiAxNSBMIDMyIDEzLjE3NSBDIDMyLjcxNyAxMi45NzIgMzMuMzg5IDEyLjY2NCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1''@;'; put 'put ''IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIyLjU5IDYgQyAyMi41OSA2LjAxOSAyMi41OSA2LjAzNyAyMi41OSA2LjA1NiBDIDIyLjU5IDEwLjE0MSAyNS45MDEgMTMuNDUyIDI5Ljk4NiAx''@;'; put 'put ''My40NTIgQyAzMS40NjYgMTMuNDUyIDMyLjg0NCAxMy4wMTggMzQgMTIuMjY5IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUgMzAgTCA0''@;'; put 'put ''IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBD''@;'; put 'put ''IDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksbC5DbHJTaGFwZUhlYXRNYXA9KDAsYS5jbHJJY29u''@;'; put 'put ''U1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkg''@;'; put 'put ''TCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDI4IDEwIEwgMjggMjYgTCA4IDI2IFogTSA5LjYgMjQgTCAxNC4xIDI0IEwgMTQuMSAxOC44IEwgOS42IDE4LjggWiBNIDE0''@;'; put 'put ''LjEgMTEuNiBMIDkuNiAxMS42IEwgOS42IDE3LjIgTCAxNC4xIDE3LjIgWiBNIDI2IDI0IEwgMjYgMTguOCBMIDIxLjkgMTguOCBMIDIxLjkgMjQgWiBNIDI2IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAyNiAxNy4yIFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3''@;'; put 'put ''LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAy''@;'; put 'put ''IDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAx''@;'; put 'put ''MC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjEuOSAxMS42IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDEyLjI4NyBDIDI2LjYxMSAxMi42NzkgMjcuMjg0IDEyLjk4MyAyOCAxMy4xODIgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4Ljgg''@;'; put 'put ''TCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxMS42IFogTSAxNS43IDI0IEwg''@;'; put 'put ''MjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMi0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAz''@;'; put 'put ''MSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDE5LjAyOCAxMCBM''@;'; put 'put ''IDE4LjA5MSAxMS42IEwgMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxNS4zNTcgTCAyMS45IDE1LjM1NyBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgTCAyNiAxNS4zNTcgTCAyOCAxNS4zNTcgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4x''@;'; put 'put ''IDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIx''@;'; put 'put ''LjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQu''@;'; put 'put ''ODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAz''@;'; put 'put ''NCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOCAyNiBMIDI4IDI2IEwgMjggMTAgTCA4IDEwIFogTSAxMCAx''@;'; put 'put ''OSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTIgTCAyNiAxMiBaIE0gMjAgMTIgTCAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgWiBN''@;'; put 'put ''IDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMg''@;'; put 'put ''Mi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjIuMzEyIDYuODE3IDIyLjczMiA4LjU2NiAyMy42MzMgMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTMuMjMyIEMgMjguNDIxIDEzLjM0NSAyOC44NTkgMTMuNDIyIDI5''@;'; put 'put ''LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkg''@;'; put 'put ''WiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI1LjU4NCAxMiBDIDI1LjcxOSAxMi4xIDI1Ljg1OCAxMi4xOTYgMjYgMTIuMjg3IFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMjItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxOS4wMjggMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTUuMzU3IEwgMzQgMTUu''@;'; put 'put ''MzU3IFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTUuMzU3IEwgMjYgMTUuMzU3IFogTSAyMCAxNyBMIDE2IDE3''@;'; put 'put ''IEwgMTYgMTIgTCAxNy44NTYgMTIgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjAgMTUuMzU3IFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAx''@;'; put 'put ''MCAxMiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3''@;'; put 'put ''IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAx''@;'; put 'put ''LjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGwuQ2xyU2hhcGVMaW5lQ2hhcnQ9KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUg''@;'; put 'put ''QyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4g''@;'; put 'put ''IDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcG9seWdvbj5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEg''@;'; put 'put ''QyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk2IDMzLjEwNSA1IDMyIDUgWiBNIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3''@;'; put 'put ''IEwgMjkuNjUgMTMgTCAzMS4zNSAxNC4yOCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42Njgg''@;'; put 'put ''MjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMg''@;'; put 'put ''MzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEz''@;'; put 'put ''LjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BvbHlnb24+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzAuMzIgMTMuNDggTCAzMS4zOCAxNC4yOCBMIDIyLjU2IDI1Ljk0IEwgMTUu''@;'; put 'put ''NDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuMzEgMTMuNDYgQyAyNS4wNSAxMy4xIDIxLjk2OSA5LjIzMyAyMi41NyA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIg''@;'; put 'put ''MjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgMTIuMzQgQyAzMi44OTUgMTMuMDM2IDMxLjYyNiAxMy40MjkgMzAuMzIgMTMuNDggWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUg''@;'; put 'put ''MzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik0gMTUuNjIgMTUuMjIyIEwgOS42MDIgMjMuOTY4IEwgNS41NSAyMC4zODQgTCA2LjYxIDE5LjE4NiBMIDkuMzA4IDIxLjU3MiBMIDE1LjYzNCAxMi4zOCBMIDIyLjM4NCAyMi4zOTUgTCAyNy43MTcgMTUuMzQ4IEwgMjkuNzI0IDE1LjM0OCBMIDIyLjMwOCAyNS4xNDUgWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEu''@;'; put 'put ''MTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44''@;'; put 'put ''MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0''@;'; put 'put ''ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2''@;'; put 'put ''NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjcuNDUyIDE1LjM1NyBMIDIyLjM4IDIyLjA2IEwgMTUuNjMgMTIgTCA5LjI4IDIxLjI4IEwgNi43NSAxOS4wNCBMIDUuNDIgMjAuNTMgTCA5LjY1IDI0LjI4IEwgMTUuNjEgMTUuNTYgTCAyMi4y''@;'; put 'put ''OCAyNS41IEwgMjkuOTU5IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3''@;'; put 'put ''OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDEx''@;'; put 'put ''LjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksbC5DbHJTaGFwZVBpZUNoYXJ0PSgwLGEuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcg''@;'; put 'put ''TCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40''@;'; put 'put ''IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgQyAzMiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAy''@;'; put 'put ''Ljg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcg''@;'; put 'put ''MTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42''@;'; put 'put ''NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0''@;'; put 'put ''IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3''@;'; put 'put ''IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEw''@;'; put 'put ''LjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAz''@;'; put 'put ''MSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAyNSAxOSBMIDE3IDE5IEwg''@;'; put 'put ''MTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAy''@;'; put 'put ''OSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0''@;'; put 'put ''aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAx''@;'; put 'put ''Mi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI3IDE3IEwgMTkgMTcgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDE5LjA0MyAxNS4zNDkgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNi44MzEgMTUuMzU3IEMgMjYu''@;'; put 'put ''OTQyIDE1Ljg4NyAyNyAxNi40MzcgMjcgMTcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEz''@;'; put 'put ''LjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIu''@;'; put 'put ''Mzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDE3IEwgMjcgMTcgQyAyNyAxNi40MzcgMjYuOTQyIDE1Ljg4NyAyNi44MzEgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBD''@;'; put 'put ''IDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIx''@;'; put 'put ''LjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQu''@;'; put 'put ''ODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGwuQ2xyU2hhcGVTY2F0dGVyUGxvdD0oMCxhLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUg''@;'; put 'put ''NSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQg''@;'; put 'put ''TCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4z''@;'; put 'put ''OTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEw''@;'; put 'put ''LjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1''@;'; put 'put ''Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIu''@;'; put 'put ''MTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDgg''@;'; put 'put ''QyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEg''@;'; put 'put ''MjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAy''@;'; put 'put ''NC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIg''@;'; put 'put ''MjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1''@;'; put 'put ''IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0''@;'; put 'put ''LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEy''@;'; put 'put ''LjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUu''@;'; put 'put ''OCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42''@;'; put 'put ''MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1''@;'; put 'put ''NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYg''@;'; put 'put ''WiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0''@;'; put 'put ''IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMg''@;'; put 'put ''QyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIu''@;'; put 'put ''NTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAx''@;'; put 'put ''Ni4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45Mjkg''@;'; put 'put ''MTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3''@;'; put 'put ''IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYu''@;'; put 'put ''MzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIw''@;'; put 'put ''LjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1''@;'; put 'put ''IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEz''@;'; put 'put ''IDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2''@;'; put 'put ''Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAz''@;'; put 'put ''IDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUg''@;'; put 'put ''MTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2''@;'; put 'put ''LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAx''@;'; put 'put ''Mi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcg''@;'; put 'put ''QyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTku''@;'; put 'put ''OTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYg''@;'; put 'put ''MjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2''@;'; put 'put ''NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3Ljcx''@;'; put 'put ''NiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1''@;'; put 'put ''Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAx''@;'; put 'put ''OS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwg''@;'; put 'put ''NCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAu''@;'; put 'put ''MjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAx''@;'; put 'put ''MS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4''@;'; put 'put ''IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcg''@;'; put 'put ''MTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBD''@;'; put 'put ''IDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQz''@;'; put 'put ''IEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMg''@;'; put 'put ''MjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0''@;'; put 'put ''LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0''@;'; put 'put ''IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAx''@;'; put 'put ''MS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1''@;'; put 'put ''IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2''@;'; put 'put ''LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAx''@;'; put 'put ''Mi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcg''@;'; put 'put ''QyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTku''@;'; put 'put ''OTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYg''@;'; put 'put ''MjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2''@;'; put 'put ''NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3Ljcx''@;'; put 'put ''NiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1''@;'; put 'put ''Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAx''@;'; put 'put ''OS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAy''@;'; put 'put ''MS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4''@;'; put 'put ''NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsLW9wYWNpdHk9IjAiLz4nKSxsLkNsclNoYXBlVGlja0NoYXJ0PSgwLGEuY2xySWNvblNWRykoJ1xuICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0''@;'; put 'put ''IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBM''@;'; put 'put ''IDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3Ljcy''@;'; put 'put ''MyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2''@;'; put 'put ''IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUg''@;'; put 'put ''MjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44''@;'; put 'put ''OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gNiAyNSBMIDggMjUgTCA4IDIyIEwgMTAgMjIgTCAxMCAyNSBMIDEzIDI1IEwgMTMgMjIgTCAxNSAyMiBMIDE1IDI1IEwgMTggMjUgTCAxOCAyMiBMIDIwIDIyIEwgMjAgMjUgTCAyMyAyNSBMIDIzIDIyIEwgMjUgMjIgTCAyNSAy''@;'; put 'put ''NSBMIDI3LjcyMyAyNSBDIDI4LjAyMyAyNS4wMiAyOC4yOTMgMjUuMTggMjguNDYzIDI1LjQzIEMgMjguOTAzIDI2LjA2IDI4LjQ4MyAyNi45MyAyNy43MjMgMjYuOTkgTCA2IDI2Ljk5MSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMx''@;'; put 'put ''IEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBN''@;'; put 'put ''IDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTgg''@;'; put 'put ''MjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA2''@;'; put 'put ''IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAy''@;'; put 'put ''NS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYu''@;'; put 'put ''ODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1''@;'; put 'put ''NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUu''@;'; put 'put ''MjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA2IDI2Ljk5MSBMIDI3LjcyMyAyNi45OSBDIDI4LjQ4MyAyNi45MyAyOC45MDMgMjYuMDYgMjguNDYzIDI1LjQzIEMgMjguMjkzIDI1LjE4IDI4LjAyMyAy''@;'; put 'put ''NS4wMiAyNy43MjMgMjUgTCAyNSAyNSBMIDI1IDIyIEwgMjMgMjIgTCAyMyAyNSBMIDIwIDI1IEwgMjAgMjIgTCAxOCAyMiBMIDE4IDI1IEwgMTUgMjUgTCAxNSAyMiBMIDEzIDIyIEwgMTMgMjUgTCAxMCAyNSBMIDEwIDIyIEwgOCAyMiBMIDggMjUgTCA2IDI1IFoiLz5cbiAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4''@;'; put 'put ''OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4y''@;'; put 'put ''OTkgMjYuODU0IDEuMTQ0IFoiLz4nKSxsLkNsclNoYXBlQmVsbEN1cnZlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyOUgzQTEsMSwwLDEsMSwzLDI3SDMzQTEsMSwwLDEsMSwzMywyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0zMywyNWgtLjYyYTguMTEsOC4xMSwwLDAsMS04LTYuNjdDMjMuNjIsMTQuNDQsMjEuODksNy45NCwxOCw3Ljk0cy01LjY5LDYuNTEtNi4zOCwxMC4zOWE4LjExLDguMTEsMCwwLDEtOCw2LjY1SDNhMSwxLDAsMSwxLDAtMmguNkE2LjExLDYuMTEsMCwwLDAsOS42LDE4YzEuNDEtNy44''@;'; put 'put ''OCw0LjMtMTIsOC4zNS0xMnM2LjkzLDQuMTYsOC4zMywxMmE2LjExLDYuMTEsMCwwLDAsNiw1SDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNoYXJ0U2hhcGVzPXsiYXhpcy1jaGFydCI6bC5DbHJTaGFwZUF4aXND''@;'; put 'put ''aGFydCwiYmFyLWNoYXJ0IjpsLkNsclNoYXBlQmFyQ2hhcnQsImJ1YmJsZS1jaGFydCI6bC5DbHJTaGFwZUJ1YmJsZUNoYXJ0LCJjbG91ZC1jaGFydCI6bC5DbHJTaGFwZUNsb3VkQ2hhcnQsImN1cnZlLWNoYXJ0IjpsLkNsclNoYXBlQ3VydmVDaGFydCwiZ3JpZC1jaGFydCI6bC5DbHJTaGFw''@;'; put 'put ''ZUdyaWRDaGFydCwibGluZS1jaGFydCI6bC5DbHJTaGFwZUxpbmVDaGFydCwicGllLWNoYXJ0IjpsLkNsclNoYXBlUGllQ2hhcnQsInRpY2stY2hhcnQiOmwuQ2xyU2hhcGVUaWNrQ2hhcnQsInNjYXR0ZXItcGxvdCI6bC5DbHJTaGFwZVNjYXR0ZXJQbG90LCJib3gtcGxvdCI6bC5DbHJTaGFw''@;'; put 'put ''ZUJveFBsb3QsImhlYXQtbWFwIjpsLkNsclNoYXBlSGVhdE1hcCwiYmVsbC1jdXJ2ZSI6bC5DbHJTaGFwZUJlbGxDdXJ2ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ2hhcnRTaGFwZXMsImFuYWx5dGljcyIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkNoYXJ0U2hhcGVzWyJsaW5lLWNo''@;'; put 'put ''YXJ0Il0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQobC5DaGFydFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIjoKLyohKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxhKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuQ29tbWVyY2VTaGFwZXM9bC5DbHJTaGFwZUZhY3Rvcnk9bC5DbHJTaGFw''@;'; put 'put ''ZUVtcGxveWVlPWwuQ2xyU2hhcGVFbXBsb3llZUdyb3VwPWwuQ2xyU2hhcGVSdWJsZT1sLkNsclNoYXBlUGVzbz1sLkNsclNoYXBlQ29pbkJhZz1sLkNsclNoYXBlQml0Y29pbj1sLkNsclNoYXBlWWVuPWwuQ2xyU2hhcGVXb249bC5DbHJTaGFwZVJ1cGVlPWwuQ2xyU2hhcGVQb3VuZD1sLkNs''@;'; put 'put ''clNoYXBlRUNoZWNrPWwuQ2xyU2hhcGVEb2xsYXJCaWxsPWwuQ2xyU2hhcGVCYW5rPWwuQ2xyU2hhcGVDcmVkaXRDYXJkPWwuQ2xyU2hhcGVEb2xsYXI9bC5DbHJTaGFwZUV1cm89bC5DbHJTaGFwZVN0b3JlPWwuQ2xyU2hhcGVXYWxsZXQ9bC5DbHJTaGFwZVNob3BwaW5nQ2FydD1sLkNsclNo''@;'; put 'put ''YXBlUGlnZ3lCYW5rPWwuQ2xyU2hhcGVTaG9wcGluZ0JhZz1sLkNsclNoYXBlQ2FsY3VsYXRvcj12b2lkIDA7dmFyIHA9YSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpO2E9YSgKLyoh''@;'; put 'put ''IC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLGwuQ2xyU2hhcGVDYWxjdWxhdG9yPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTgsMzJWNEgyOFYzMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJN''@;'; put 'put ''MTIsOEgyNS42N1Y2SDExYTEsMSwwLDAsMC0xLDF2NC42N2gyWiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHBvaW50cz0iMTIgMTYgMTAgMTYgMTAgMTggMTQgMTggMTQgMTQgMTIgMTQgMTIgMTYiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBwb2ludHM9IjI0IDE2IDIyIDE2IDIyIDE4IDI2IDE4IDI2IDE0IDI0IDE0IDI0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNSIgcG9pbnRzPSIxOCAxNiAxNiAxNiAxNiAxOCAyMCAxOCAyMCAxNCAxOCAxNCAxOCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHBvaW50cz0iMTIgMjIgMTAgMjIgMTAgMjQgMTQgMjQgMTQg''@;'; put 'put ''MjAgMTIgMjAgMTIgMjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiBwb2ludHM9IjI0IDIyIDIyIDIyIDIyIDI0IDI2IDI0IDI2IDIwIDI0IDIwIDI0IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgcG9pbnRzPSIxOCAyMiAxNiAyMiAxNiAyNCAyMCAyNCAyMCAyMCAxOCAyMCAxOCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHBvaW50cz0iMTIg''@;'; put 'put ''MjggMTAgMjggMTAgMzAgMTQgMzAgMTQgMjYgMTIgMjYgMTIgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgcG9pbnRzPSIyNCAyOCAyMiAyOCAyMiAzMCAyNiAzMCAyNiAyNiAyNCAyNiAyNCAyOCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiBwb2ludHM9IjE4IDI4IDE2IDI4IDE2IDMwIDIwIDMwIDIwIDI2IDE4IDI2IDE4IDI4Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTEyLDI4SDEwVjI2aDJabTAtNkgxMFYyMGgyWm0wLTZIMTBWMTRoMlptNywxMkgxN1YyNmgyWm0wLTZIMTdWMjBoMlptMC02SDE3VjE0aDJa''@;'; put 'put ''bTcsMTJIMjRWMjZoMlptMC02SDI0VjIwaDJabTAtNkgyNFYxNGgyWm0wLTdIMTBWNUgyNloiLz4nKSxsLkNsclNoYXBlU2hvcHBpbmdCYWc9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNSwxMlY5LjA1YTcs''@;'; put 'put ''NywwLDEsMC0xNCwwdjdhMSwxLDAsMCwwLDIsMFYxNGg4VjEySDEzVjkuMDVhNSw1LDAsMSwxLDEwLDBWMTZhMSwxLDAsMSwwLDIsMFYxNGg1VjMySDZWMTRIOVYxMkg0VjMyLjA5QTEuOTEsMS45MSwwLDAsMCw1LjkxLDM0SDMwLjA5QTEuOTEsMS45MSwwLDAsMCwzMiwzMi4wOVYxMloiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMyw5LjIyYTUsNSwwLDEsMSwxMCwwVjEyaDJWOS4yMmE3LDcsMCwxLDAtMTQsMFYxMmgyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgZD0iTTI1LDEydjMuMWExLDEsMCwxLDEtMiwwVjEySDEzdjMuMWExLDEsMCwwLDEtMiwwVjEySDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEyWiIvPicpLGwuQ2xyU2hhcGVQaWdneUJhbms9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS43MiwxMC40N2ExMS42NSwxMS42NSwwLDAsMC02LjMxLjUyQS44LjgsMCwxLDAsMTQsMTIuNDgsMTAuMTEsMTAuMTEsMCwwLDEsMTkuNDQsMTJhLjguOCwwLDEsMCwuMjgtMS41N1oiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyNS4zOCIgY3k9IjE2LjcxIiByPSIxLjM2Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM1LjUxLDE4LjYzYTEsMSwwLDAs''@;'; put 'put ''MC0uODQtLjQ0LDMuNDIsMy40MiwwLDAsMS0yLjA5LTEuMTIsMTcuMzUsMTcuMzUsMCwwLDEtMi42My0zLjc4bDIuODgtNC41QTEuODksMS44OSwwLDAsMCwzMyw3YTEuNzcsMS43NywwLDAsMC0xLjMzLTEsMTAuMTIsMTAuMTIsMCwwLDAtNS4zOS43NSwxMi43MiwxMi43MiwwLDAsMC0yLjcy''@;'; put 'put ''LDEuNjMsMTYuOTQsMTYuOTQsMCwwLDAtNS4xNi0xLjM5QzExLjMxLDYuMyw0LjgzLDEwLjksNCwxN0g0YTIuNTYsMi41NiwwLDAsMS0xLjM4LTEuNTMsMS44MSwxLjgxLDAsMCwxLC4xNC0xLjQsMS4xOSwxLjE5LDAsMCwxLC40My0uNDMsMS4wOCwxLjA4LDAsMCwwLTEuMTItMS44NUEzLjMx''@;'; put 'put ''LDMuMzEsMCwwLDAsLjkxLDEzYTQsNCwwLDAsMC0uMzMsMy4wOEE0Ljc2LDQuNzYsMCwwLDAsMywxOC45NWwuOTIuNDZhMTcuNTgsMTcuNTgsMCwwLDAsMS44Miw3bC4xNy4zOEEyMywyMywwLDAsMCw5LjIsMzEuODhhMSwxLDAsMCwwLC43NS4zNGg0LjUyYTEsMSwwLDAsMCwuOTItMS4zOEwx''@;'; put 'put ''NSwyOS45NGwxLjE4LjEzYTIwLjMzLDIwLjMzLDAsMCwwLDQsMGMuMzcuNi43NywxLjIsMS4yMSwxLjc5YTEsMSwwLDAsMCwuOC40MWg0LjM0YTEsMSwwLDAsMCwuOTItMS4zOWMtLjE3LS40LS4zNC0uODMtLjQ3LTEuMi0uMTgtLjUzLS4zMi0xLS40My0xLjQ1QTEzLjE4LDEzLjE4LDAsMCww''@;'; put 'put ''LDI5LjU2LDI2YTEyLjUsMTIuNSwwLDAsMCwzLDAsMSwxLDAsMCwwLC43OC0uNjJsMi4yNi01LjgxQTEsMSwwLDAsMCwzNS41MSwxOC42M1ptLTMuNzgsNS40NGExMS4zNywxMS4zNywwLDAsMS0yLjM1LS4xMWgwYTguMiw4LjIsMCwwLDEtMi41My0uODcsMSwxLDAsMCwwLS45MywxLjc3LDEx''@;'; put 'put ''LjcyLDExLjcyLDAsMCwwLDEuMjkuNTgsOCw4LDAsMCwxLTEuOCwxLjE2bC0xLjA2LjQ4cy40OSwyLjE5LjgyLDMuMTZIMjIuNzljLS4yNC0uMzQtMS40NS0yLjM2LTEuNDUtMi4zNmwtLjY3LjA5YTE4LjUzLDE4LjUzLDAsMCwxLTQuMjUuMTJjLS42Ni0uMDYtMS43Ni0uMi0yLjYyLS4zNWwt''@;'; put 'put ''MS41NS0uMjdzLjYzLDIuNDMuNzUsMi43NHYwSDEwLjQyQTIwLjU3LDIwLjU3LDAsMCwxLDcuNzYsMjZsLS4xOC0uMzlBMTQuNjIsMTQuNjIsMCwwLDEsNiwxNy40OGMuNTQtNS4xOSw2LjEyLTkuMTEsMTIuMTktOC41NGExNS40NywxNS40NywwLDAsMSw1LjA4LDEuNDhsLjYyLjI5LjUtLjQ3''@;'; put 'put ''QTEwLjI5LDEwLjI5LDAsMCwxLDI3LDguNTRhOC4yNSw4LjI1LDAsMCwxLDQtLjY1bC0zLjM4LDUuMjkuMjUuNWgwYTIxLjE2LDIxLjE2LDAsMCwwLDMuMzEsNC44NCw2LjQ5LDYuNDksMCwwLDAsMi4xNCwxLjM5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM1LDE4Ljg3QTUuODMsNS44MywwLDAsMSwzMywxNy42MWEyMS42MywyMS42MywwLDAsMS0zLjI5LTQuODRsMy4zOS01LjI5YS45LjksMCwwLDAtLjU0LTEuMzgsOS42Nyw5LjY3LDAsMCwwLTUuMTMuNzIsMTIsMTIsMCwwLDAtMy4xMywyQTE3LjM3LDE3''@;'; put 'put ''LjM3LDAsMCwwLDE4LjYsNy4xNUMxMS44LDYuNTIsNS4yNywxMC45LDQuNTQsMTdsLS4xNC0uMDdBMi43NiwyLjc2LDAsMCwxLDIuOSwxNS4yOWEyLDIsMCwwLDEsLjE1LTEuNTUsMS4zMiwxLjMyLDAsMCwxLC40Ny0uNDgsMS4wOCwxLjA4LDAsMSwwLTEuMTItMS44NSwzLjQ1LDMuNDUsMCww''@;'; put 'put ''LDAtMS4yMywxLjI1QTQuMTYsNC4xNiwwLDAsMCwuODQsMTUuOWE1LDUsMCwwLDAsMi41NywzbDEsLjU0YTE4LjYyLDE4LjYyLDAsMCwwLDIsNy4zLDIzLDIzLDAsMCwwLDMsNC43OSwxLDEsMCwwLDAsLjguMzhoMy42MWEuNTIuNTIsMCwwLDAsLjQtLjc1TDE0LDMwLjM4YTExLDExLDAsMCwx''@;'; put 'put ''LS4zMy0xLjE4Yy45MS4xNiwyLjA4LjMxLDIuODcuMzhhMjAuMDcsMjAuMDcsMCwwLDAsMy4xMiwwYy4zOS43Ljc5LDEuMzMsMS4xNSwxLjg1YS45My45MywwLDAsMCwuNzcuNDFoMy4xMWEuNjUuNjUsMCwwLDAsLjYxLS44NWMtLjIzLS43NC0uNTMtMS43NS0uNzEtMi4zN2ExNS45LDE1Ljks''@;'; put 'put ''MCwwLDAsMy43NS0xLjc2Yy4xNi0uMTEuMzItLjI2LjQ4LS4zOWExMy43NywxMy43NywwLDAsMS0yLjQyLTEsLjguOCwwLDAsMSwuNzQtMS40MiwxMS42NCwxMS42NCwwLDAsMCwzLjE4LDEuMSwxMy4zMSwxMy4zMSwwLDAsMCwyLjY4LjEyLDEsMSwwLDAsMCwuOS0uNjZsMS43My00LjQ0QTEs''@;'; put 'put ''MSwwLDAsMCwzNSwxOC44N1pNMTMuNzksMTEuNTlhLjg2Ljg2LDAsMCwxLS4zLjA1Ljg1Ljg1LDAsMCwxLS4zLTEuNjQsMTIuNDEsMTIuNDEsMCwwLDEsNi42OS0uNTUuODUuODUsMCwxLDEtLjMsMS42N0ExMC43NSwxMC43NSwwLDAsMCwxMy43OSwxMS41OVptMTIuNTIsNi4xMmExLjQ0LDEu''@;'; put 'put ''NDQsMCwxLDEsMS40NC0xLjQ0QTEuNDQsMS40NCwwLDAsMSwyNi4zMiwxNy43MloiLz4nKSxsLkNsclNoYXBlU2hvcHBpbmdDYXJ0PSgwLGEuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMDgsNS4zN0ExLDEsMCwwLDAsMzIuMzEsNUgxMS40''@;'; put 'put ''OWwuNjUsMkgzMUwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5''@;'; put 'put ''YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0uNzhsMy4xNy0xNEExLDEsMCwwLDAsMzMuMDgsNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjAuNzEgNyAyMS44NyA1IDExLjQ5IDUgMTIuMTQgNyAyMC43MSA3IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4xNSwxNS40LDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCww''@;'; put 'put ''LDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwxLjA5LTQuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41Nyw3YTcuNTIs''@;'; put 'put ''Ny41MiwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFIMTEuNDlsLjY1LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWwtLjQyLDBMMjguMzMsMTloLTE1''@;'; put 'put ''TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42''@;'; put 'put ''Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDEuNTctNi45MUE3LjUxLDcuNTEsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEsNi4zOUExLDEsMCwwLDAsMzIuMzEsNkg5''@;'; put 'put ''LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44''@;'; put 'put ''NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwzLjItMTNBMSwxLDAsMCwwLDMzLjEsNi4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0i''@;'; put 'put ''Mi41IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxl''@;'; put 'put ''cnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0u''@;'; put 'put ''MTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMS4xOS00Ljg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs''@;'; put 'put ''MS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3''@;'; put 'put ''LjUsMCwwLDEsMjIuNSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWEx''@;'; put 'put ''LDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEtLjc2bDEuNzEtN0E3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksbC5DbHJTaGFwZVdhbGxldD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDE1SDMxVjlhMSwxLDAsMCwwLTEtMUg2YTEsMSwwLDAsMS0xLS44MlY2LjgyQTEsMSwwLDAsMSw2LDZIMjkuNThhMSwxLDAsMCwwLDAtMkg2QTMsMywwLDAsMCwzLDdhMy4wOCwzLjA4LDAsMCwwLDAsLjM2VjI3LjkzQTQuMSw0LjEs''@;'; put 'put ''MCwwLDAsNy4xMywzMkgzMGExLDEsMCwwLDAsMS0xVjI1aDFhMSwxLDAsMCwwLDEtMVYxNkExLDEsMCwwLDAsMzIsMTVaTTI5LDMwSDcuMTNBMi4xMSwyLjExLDAsMCwxLDUsMjcuOTNWOS44OEEzLjExLDMuMTEsMCwwLDAsNiwxMEgyOXY1SDIyYTUsNSwwLDAsMCwwLDEwaDdabTItN0gyMmEz''@;'; put 'put ''LDMsMCwwLDEsMC02SDMxWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIzLjAxIiBjeT0iMjAiIHI9IjEuNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTMyLjk0LDE0SDMxVjlhMSwxLDAsMCwwLTEtMUg2QTEsMSwwLDAsMSw1LDdINVY3QTEsMSwwLDAsMSw2LDZIMjkuNmExLDEsMCwxLDAsMC0ySDZBMi45NCwyLjk0LDAsMCwwLDMsNi44OHYyMUE0LjEzLDQuMTMsMCwwLDAsNy4xNSwzMkgzMGExLDEsMCwwLDAsMS0xVjI2aDEu''@;'; put 'put ''OTRhLjkzLjkzLDAsMCwwLDEtLjkxdi0xMEExLjA4LDEuMDgsMCwwLDAsMzIuOTQsMTRaTTMyLDI0bC04LjU4LDBhMy44NywzLjg3LDAsMCwxLTMuNzMtNCwzLjg3LDMuODcsMCwwLDEsMy43My00TDMyLDE2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yIiBjeD0iMjQuMDQiIGN5PSIxOS45MiIgcj0iMS41Ii8+JyksbC5DbHJTaGFwZVN0b3JlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsMzBIMTZWMjJIMTR2OEg4VjIySDZ2OGEy''@;'; put 'put ''LDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4y''@;'; put 'put ''OSw1LjExTDIuMjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAsMCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAs''@;'; put 'put ''NC43Miw0LjcyLDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTMwLDE4LjEzQTIuNjgsMi42OCwwLDAsMSwyNy44MiwxN0wyNywxNS44OCwyNi4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDIxLDE1Ljg4LDIwLjE5LDE3''@;'; put 'put ''YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMTUsMTUuODgsMTQuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEw5LDE1Ljg4LDguMTgsMTdBMi42OCwyLjY4LDAsMCwxLDYsMTguMTNhMi42NCwyLjY0LDAsMCwxLTItLjg4VjE0LjE3TDguMDgsNkgyNy45MkwzMiwxNC4xNnYuNjdsMCwyLjM5''@;'; put 'put ''QTIuNjcsMi42NywwLDAsMSwzMCwxOC4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwu''@;'; put 'put ''NDYsMS4yOEE0LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCwwLDAsMy0xLjA3LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdB''@;'; put 'put ''MiwyLDAsMCwwLDMzLjc5LDEzLjI3Wk0xNSwxNC40djEuNTJMMTQuMTgsMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEw5LDE1Ljg4VjE0LjRMMTEuNTksNkgxNlptMTIsMS40OEwyNi4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDIxLDE1Ljg4bDAsMFYxNC40TDIwLDZoNC40NUwyNywx''@;'; put 'put ''NC40WiIvPicpLGwuQ2xyU2hhcGVFdXJvPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEuNDgsMjguNDlhMSwxLDAsMCwwLTEuMzgtLjMyQTEyLDEyLDAsMCwxLDEyLjQ1LDIySDI0LjE2YTEsMSwwLDAsMCww''@;'; put 'put ''LTJIMTEuOTNhMTEuMTYsMTEuMTYsMCwwLDEsMC00SDI0LjE2YTEsMSwwLDAsMCwwLTJIMTIuNDVBMTIsMTIsMCwwLDEsMzAuMDYsNy44YTEsMSwwLDAsMCwxLjA2LTEuN0ExNCwxNCwwLDAsMCwxMC4zNCwxNEgzLjU0YTEsMSwwLDEsMCwwLDJIOS45MWExNCwxNCwwLDAsMC0uMTYsMiwxNCwx''@;'; put 'put ''NCwwLDAsMCwuMTYsMkgzLjU0YTEsMSwwLDEsMCwwLDJoNi44YTE0LDE0LDAsMCwwLDIwLjgzLDcuODdBMSwxLDAsMCwwLDMxLjQ4LDI4LjQ5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAs''@;'; put 'put ''MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNy40MiwyNS4xNkExMC44OCwxMC44OCwwLDAsMSw5LjIzLDIxSDUuODRhMSwxLDAsMCwxLDAtMmgzYzAtLjM1LS4wNS0uNzEtLjA1LTEuMDdzMC0uNjMsMC0uOTNoLTNhMSwxLDAsMCwxLDAtMkg5LjE5QTEwLjg2LDEwLjg2LDAsMCwxLDI1LjM4LDgu''@;'; put 'put ''NjlhMS4yNSwxLjI1LDAsMCwxLTEuMzIsMi4xMkE4LjM2LDguMzYsMCwwLDAsMTEuODIsMTVoOS4zNmExLDEsMCwwLDEsMCwySDExLjMzYTcuNzIsNy43MiwwLDAsMCwwLDJoOS44MmExLDEsMCwwLDEsMCwySDExLjg3YTguMzYsOC4zNiwwLDAsMCwxMi4yMiw0LDEuMjUsMS4yNSwwLDEsMSwx''@;'; put 'put ''LjMzLDIuMTJaIi8+JyksbC5DbHJTaGFwZURvbGxhcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI2LDIxLjE1YTYuOTEsNi45MSwwLDAsMC00LjM4LTMuMzJBMjYsMjYsMCwwLDAsMTksMTcuMTlWOC4xMkEx''@;'; put 'put ''MC4wNSwxMC4wNSwwLDAsMSwyMy44NiwxMGExLDEsMCwwLDAsMS4zMy0xLjVBMTEuNzUsMTEuNzUsMCwwLDAsMTksNi4xVjNhMSwxLDAsMCwwLTIsMFY2Yy00LjQuMS02LjgzLDIuMjktNy41Nyw0LjE4QTUuNTYsNS41NiwwLDAsMCwxMS42NiwxNywxMy4yLDEzLjIsMCwwLDAsMTcsMTguODRW''@;'; put 'put ''MjhhMTIuMywxMi4zLDAsMCwxLTcuMTQtMi43NEExLDEsMCwxLDAsOC40OSwyNi43LDE0LjA5LDE0LjA5LDAsMCwwLDE3LDMwdjNhMSwxLDAsMCwwLDIsMFYzMGMyLjgyLS4xOSw2LjA3LTEuMDksNy4zLTQuNzZBNS4zMyw1LjMzLDAsMCwwLDI2LDIxLjE1Wk0xMi43OSwxNS4zMmEzLjU3LDMu''@;'; put 'put ''NTcsMCwwLDEtMS40OS00LjM5QzExLjQxLDEwLjYzLDEyLjUzLDguMTIsMTcsOHY4LjhBMTAuNywxMC43LDAsMCwxLDEyLjc5LDE1LjMyWk0yNC40LDI0LjU2Yy0uNzIsMi4xNC0yLjMyLDMuMTctNS40LDMuNFYxOS4yM2MuNjQuMTQsMS4zLjMsMiwuNTFhNSw1LDAsMCwxLDMuMTksMi4zMkEz''@;'; put 'put ''LjM0LDMuMzQsMCwwLDEsMjQuNCwyNC41NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNy42NSwyMS41OWMtMSwz''@;'; put 'put ''LTMuNjEsMy44NC01LjksNHYyYTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNy41OUExMS40NywxMS40NywwLDAsMSwxMSwyNWExLjI1LDEuMjUsMCwxLDEsMS43MS0xLjgzLDkuMTEsOS4xMSwwLDAsMCw0LjU1LDEuOTRWMTguODNhOS42Myw5LjYzLDAsMCwxLTMuNzMtMS40MSw0LjgsNC44LDAs''@;'; put 'put ''MCwxLTEuOTEtNS44NGMuNTktMS41MSwyLjQyLTMuMjMsNS42NC0zLjUxVjYuMjVhMS4yNSwxLjI1LDAsMCwxLDIuNSwwVjguMTFhOS42Nyw5LjY3LDAsMCwxLDQuOSwyQTEuMjUsMS4yNSwwLDAsMSwyMywxMS45NWE3LjE0LDcuMTQsMCwwLDAtMy4yNC0xLjMxdjYuMTNjLjYuMTMsMS4yNC4y''@;'; put 'put ''NywxLjkxLjQ4YTUuODUsNS44NSwwLDAsMSwzLjY5LDIuODJBNC42NCw0LjY0LDAsMCwxLDI1LjY1LDIzLjU5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTIwLjkyLDE5LjY0Yy0uNC0uMTItLjc5LS4yMi0xLjE3LS4z''@;'; put 'put ''djUuNzZjMi0uMiwzLjA3LS45LDMuNTMtMi4zYTIuMTUsMi4xNSwwLDAsMC0uMTUtMS41OEEzLjQ5LDMuNDksMCwwLDAsMjAuOTIsMTkuNjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTMuOTQsMTIuNDhhMi4zMSwy''@;'; put 'put ''LjMxLDAsMCwwLDEsMi44Nyw2LjUzLDYuNTMsMCwwLDAsMi4zMi45MlYxMC41NUMxNS4xNiwxMC44LDE0LjE5LDExLjg0LDEzLjk0LDEyLjQ4WiIvPicpLGwuQ2xyU2hhcGVDcmVkaXRDYXJkPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyLDAsMTJINEw0LDhaTTQsMjhWMjRIMzJ2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMyIgd2lkdGg9IjIyIiBo''@;'; put 'put ''ZWlnaHQ9IjMwIiByeD0iMC45NiIgcnk9IjAuOTYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2KSByb3RhdGUoOTApIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwxOEg0VjIwSDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4n''@;'; put 'put ''KSxsLkNsclNoYXBlQmFuaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMy41LDEzLjU2LDE4LDUuMjNsMTQuNSw4LjMzYTEsMSwwLDAsMCwxLTEuNzNMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUuMDIiIHk9IjE0IiB3aWR0aD0iMjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywyOUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAs''@;'; put 'put ''MCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMTUsMTEuNThoMy4yMUwxOC42NSw3LjcyYS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45LTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNS4wMiIgeT0iMTQiIHdpZHRoPSIyNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywyOUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjE1LDExLjU4aDMuMjFM''@;'; put 'put ''MTguNjUsNy43MmEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMuOS0yLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YzAtLjE2LDAtLjMyLDAtLjQ4TDE4''@;'; put 'put ''LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMMTgsNS4yMywyMi43Nyw4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45NCwx''@;'; put 'put ''My4yNGwuNTYuMzJhMSwxLDAsMCwwLDEuNDQtMS4xOUE3LjQ1LDcuNDUsMCwwLDEsMzEuOTQsMTMuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBW''@;'; put 'put ''MTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywyOUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSwxNUEzLjUxLDMuNTEsMCwwLDEsMjAsMTRINXYySDMxVjE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS40Niw5Ljc0bC42OC0xLjE3LTEuNDktLjg1YS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45LTIuMjQsMS4xLjYzQzE5LjM5LDkuODksMTkuNDIsOS44MSwxOS40Niw5Ljc0WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4wNSw1LjI1LDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMMTgsNS4yMywyMS4wNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu''@;'; put 'put ''ODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy41LDEzLjU2LDUsMTIuNjhWMTZIMzFWMTIuNzFsMS40OC44NWExLDEsMCwwLDAsMS0xLjczTDE4''@;'; put 'put ''LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNaTTE3Ljg1LDcuMTFhLjguOCwwLDAsMSwuOCwwTDI1LjM3LDExSDIyLjE1bC0zLjktMi4yNEwxNC4zNSwxMUgxMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMi44NSwyN0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1''@;'; put 'put ''LDEuMTUsMCwwLDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcu''@;'; put 'put ''NjNIOFYyNUg1LjE1QTEuMTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDcsNy40NywwLDAsMSwyNC4zOSwxMUgyMi4xNWwtMy45LTIuMjRMMTQuMzUsMTFIMTEuMTRsNi43Mi0zLjg2YS44LjgsMCwwLDEsLjgsMGw1LDIuODdBNy40NSw3LjQ1LDAsMCwxLDIyLjUsNmMwLS4xNiwwLS4zMiwwLS40OEwxOCwy''@;'; put 'put ''LjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDUsMTIuNjhWMTZIMzFWMTMuNDJBNy41Myw3LjUzLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjk0LDEz''@;'; put 'put ''LjI0bC41Ni4zMmExLDEsMCwwLDAsMS40NC0xLjE5QTcuNDUsNy40NSwwLDAsMSwzMS45NCwxMy4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3''@;'; put 'put ''LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDE1YTMuNTEsMy41MSwwLDAsMS0zLTUuMjZsLjE0LS4yNC0xLjM1LS43OEwxNC4zNSwxMUgxMS4xNGw2LjcyLTMuODZhLjguOCwwLDAsMSwuOCwwbDEuNzUsMSwxLjY1LTIuODZMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43''@;'; put 'put ''M0w1LDEyLjY4VjE2SDMxVjE1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPicpLGwuQ2xyU2hhcGVEb2xsYXJCaWxsPSgwLGEuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDZhNC4yNSw0LjI1LDAsMCwxLTMuOS00SDMyWm0wLDEuNjJ2''@;'; put 'put ''NC44M0E1Ljg3LDUuODcsMCwwLDAsMjYuNDksMjZoLTE3QTUuODcsNS44NywwLDAsMCw0LDIwLjQ0VjE1LjZBNS44Nyw1Ljg3LDAsMCwwLDkuNTEsMTBoMTdBNS44Nyw1Ljg3LDAsMCwwLDMyLDE1LjZaTTcuOSwxMEE0LjI1LDQuMjUsMCwwLDEsNCwxNFYxMFpNNCwyMi4wNkE0LjI1LDQuMjUs''@;'; put 'put ''MCwwLDEsNy45LDI2SDRaTTI4LjEsMjZBNC4yNSw0LjI1LDAsMCwxLDMyLDIyLjA2VjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwxMC44NWMtMy40NywwLTYuMywzLjIxLTYuMyw3LjE1czIuODMsNy4x''@;'; put 'put ''NSw2LjMsNy4xNSw2LjMtMy4yMSw2LjMtNy4xNVMyMS40NywxMC44NSwxOCwxMC44NVptMCwxMi42OWMtMi41OSwwLTQuNy0yLjQ5LTQuNy01LjU1czIuMTEtNS41NSw0LjctNS41NSw0LjcsMi40OSw0LjcsNS41NVMyMC41OSwyMy41NSwxOCwyMy41NVoiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhaTTQsMjZWMjEuMTVBNS4xOCw1LjE4LDAsMCwxLDguNzksMjZaTTQsMTQuODVWMTBI''@;'; put 'put ''OC43OUE1LjE4LDUuMTgsMCwwLDEsNCwxNC44NVpNMTgsMjUuMTVjLTMuNDcsMC02LjMtMy4yMS02LjMtNy4xNXMyLjgzLTcuMTUsNi4zLTcuMTUsNi4zLDMuMjEsNi4zLDcuMTVTMjEuNDcsMjUuMTUsMTgsMjUuMTVaTTMyLDI2SDI3LjI1QTUuMTgsNS4xOCwwLDAsMSwzMiwyMS4xNVptMC0x''@;'; put 'put ''MS4xNUE1LjE4LDUuMTgsMCwwLDEsMjcuMjUsMTBIMzJaIi8+XG4gICAgICAgICAgICA8ZWxsaXBzZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBjeD0iMTgiIGN5PSIxOCIgcng9IjQiIHJ5PSI0LjcyIi8+JyksbC5DbHJTaGFwZUVDaGVjaz0oMCxhLmNsckljb25T''@;'; put 'put ''VkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTYiIHk9IjE2IiB3aWR0aD0iMTUiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjIwIiB5PSIy''@;'; put 'put ''MSIgd2lkdGg9IjExIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzQsOEgxMi45M2E4LjM1LDguMzUsMCwwLDEsLjc5LDJIMzNWMjZIM1YxOS45YTcuODMsNy44MywwLDAsMS0yLTEuMzRWMjdh''@;'; put 'put ''MSwxLDAsMCwwLDEsMUgzNGExLDEsMCwwLDAsMS0xVjlBMSwxLDAsMCwwLDM0LDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTYuNTcsMTguNjhhNi4xNyw2LjE3LDAsMCwwLDQuMzItMS41OSwxLjIsMS4yLDAs''@;'; put 'put ''MCwwLC4zNi0uODQsMS4wOCwxLjA4LDAsMCwwLTEuMDktMS4xMSwxLDEsMCwwLDAtLjcxLjI1LDQuMzIsNC4zMiwwLDAsMS0yLjg0LDEsMy4zNSwzLjM1LDAsMCwxLTMuNDYtM2g3LjUzQTEuMjksMS4yOSwwLDAsMCwxMiwxMi4wNiw1LjY4LDUuNjgsMCwwLDAsNi4yNyw2LjE0LDYsNiwwLDAs''@;'; put 'put ''MCwuNCwxMi40djBBNiw2LDAsMCwwLDYuNTcsMTguNjhaTTYuMjUsOC4zOWMxLjgyLDAsMi44NywxLjM5LDMsMy4xNkgzLjEzQzMuMzgsOS42OSw0LjU2LDguMzksNi4yNSw4LjM5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTM0LDhIMTIuOTFhOC42MSw4LjYxLDAsMCwxLDEuMiw0LjM5LDgsOCwwLDAsMS03Ljc4LDguMjdBNy41MSw3LjUxLDAsMCwxLDEsMTguNDFWMjdhMSwxLDAsMCwwLDEsMUgzNGExLDEsMCwwLDAsMS0xVjlBMSwxLDAsMCwwLDM0LDhaTTMxLDIzSDIwVjIxSDMxWm0wLTVIMTZWMTZIMzFa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNNi41NywxOC42OEE2LDYsMCwwLDEsLjQsMTIuNDR2MEE2LDYsMCwwLDEsNi4yNyw2LjE0LDUuNjgsNS42OCwwLDAsMSwxMiwxMi4wNmExLjI5LDEuMjksMCwwLDEtMS4zLDEu''@;'; put 'put ''MzJIMy4xNWEzLjM1LDMuMzUsMCwwLDAsMy40NiwzLDQuMzIsNC4zMiwwLDAsMCwyLjg0LTEsMSwxLDAsMCwxLC43MS0uMjUsMS4wOCwxLjA4LDAsMCwxLDEuMDksMS4xMSwxLjIsMS4yLDAsMCwxLS4zNi44NEE2LjE3LDYuMTcsMCwwLDEsNi41NywxOC42OFpNOS4zLDExLjU1Yy0uMTgtMS43''@;'; put 'put ''Ny0xLjIzLTMuMTYtMy0zLjE2cy0yLjg3LDEuMy0zLjEyLDMuMTZaIi8+JyksbC5DbHJTaGFwZVBvdW5kPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuOSwzMEgxMy40QTguNDUsOC40NSwwLDAsMCwxNSwy''@;'; put 'put ''NC42NVYyMWg0LjMxYTEsMSwwLDAsMCwwLTJIMTVWMTEuMzFBNS4yNCw1LjI0LDAsMCwxLDIwLjIxLDYsNS4xOSw1LjE5LDAsMCwxLDI0LDcuNzNhMSwxLDAsMCwwLDEuNDgtMS4zNUE3LjE5LDcuMTksMCwwLDAsMTMsMTEuMzFWMTlIOC43MmExLDEsMCwxLDAsMCwySDEzdjMuNjVDMTMsMjku''@;'; put 'put ''MzgsMTAuMTIsMzAsMTAsMzBhMSwxLDAsMCwwLC4xNywySDI3LjlhMSwxLDAsMSwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuNSwy''@;'; put 'put ''NS45MkgxMS43NGExLjI1LDEuMjUsMCwwLDEtLjIyLTIuNDhjLjE1LDAsMS43Mi0uNDksMS43Mi0zLjU0VjE5aC0yLjVhMSwxLDAsMCwxLDAtMmgyLjVWMTEuODhhNS44NSw1Ljg1LDAsMCwxLDUuNzItNiw1LjYzLDUuNjMsMCwwLDEsNC4yMSwxLjk0QTEuMjUsMS4yNSwwLDEsMSwyMS4zLDku''@;'; put 'put ''NTEsMy4wOCwzLjA4LDAsMCwwLDE5LDguNDJhMy4zNSwzLjM1LDAsMCwwLTMuMjIsMy40NlYxN2gzYTEsMSwwLDAsMSwwLDJoLTN2Mi45QTcuNjUsNy42NSwwLDAsMSwxNSwyNS40MkgyNC41YTEuMjUsMS4yNSwwLDAsMSwwLDIuNVoiLz4nKSxsLkNsclNoYXBlUnVwZWU9KDAsYS5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCw4SDI0LjE0QTcuNTIsNy41MiwwLDAsMCwyMi42LDZIMjhhMSwxLDAsMCwwLDAtMkgxMGExLDEsMCwwLDAsMCwyaDcuNTVhNS40Miw1LjQyLDAsMCwxLDQuMiwySDEwYTEsMSwwLDAs''@;'; put 'put ''MCwwLDJIMjIuNzlBNS41NCw1LjU0LDAsMCwxLDIzLDExLjUxLDUuNDgsNS40OCwwLDAsMSwxNy41NSwxN0gxMS4xNGExLDEsMCwwLDAtLjc1LDEuNjZMMjIuMDYsMzJhMSwxLDAsMSwwLDEuNS0xLjMyTDEzLjM1LDE5aDQuMjFhNy41MSw3LjUxLDAsMCwwLDcuMy05SDI4YTEsMSwwLDAsMCww''@;'; put 'put ''LTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm01Ljg4LDlIMjZhMSwxLDAsMCwxLDAsMkgyNC4yNmMwLC4wNiwwLC4xMiwwLC4xOWE2LjA5LDYu''@;'; put 'put ''MDksMCwwLDEtNiw2LjJoLTJsNi44Miw4LjA2YTEuMjUsMS4yNSwwLDAsMS0xLjkxLDEuNjJMMTIuNjMsMTguOTRhMS4yNSwxLjI1LDAsMCwxLDEtMi4wNmg0LjcxYTMuNTksMy41OSwwLDAsMCwzLjQ4LTMuNjljMC0uMDcsMC0uMTMsMC0uMmgtOWExLDEsMCwwLDEsMC0yaDguMzJhMy40MSwz''@;'; put 'put ''LjQxLDAsMCwwLTIuNzgtMS41SDEyLjc1YTEuMjUsMS4yNSwwLDAsMSwwLTIuNUgyNmExLDEsMCwwLDEsMCwySDIyLjY4QTYuMjMsNi4yMywwLDAsMSwyMy44OCwxMVoiLz4nKSxsLkNsclNoYXBlV29uPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsMThIMjguNzVsLjUtMkgzM2ExLDEsMCwwLDAsMC0ySDI5Ljc0bDIuMTctOC43NkExLDEsMCwwLDAsMzAsNC43NkwyNy42OCwxNEgyMS4zMUwxOSw0Ljc2YTEsMSwwLDAsMC0xLjk0LDBMMTQuNzksMTRIOC40Mkw2LjEzLDQuNzZhMSwxLDAsMCwwLTEu''@;'; put 'put ''OTQuNDhMNi4zNiwxNEgzYTEsMSwwLDAsMCwwLDJINi44NWwuNSwySDNhMSwxLDAsMCwwLDAsMkg3Ljg0bDIuNzksMTEuMjRhMSwxLDAsMCwwLDEuOTQsMEwxNS4zNiwyMGg1LjM4bDIuNzksMTEuMjRhMSwxLDAsMCwwLDEuOTQsMEwyOC4yNSwyMEgzM2ExLDEsMCwwLDAsMC0yWm0tNS44Mi0y''@;'; put 'put ''LS41LDJIMjIuM2wtLjUtMlpNMTgsOS4xNiwxOS4yNSwxNGgtMi40Wk04LjkxLDE2aDUuMzhsLS41LDJIOS40MVpNMTEuNiwyNi44NCw5LjkxLDIwSDEzLjNaTTE1Ljg1LDE4bC41LTJoMy4zOWwuNSwyWm04LjY0LDguODRMMjIuOCwyMGgzLjM5WiIvPlxuICAgICAgICAgICAgPHBvbHlnb24g''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgcG9pbnRzPSIxNy43NCAxNiAxNy4yMiAxOCAxOC44NSAxOCAxOC4zMiAxNiAxNy43NCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgcG9pbnRzPSIx''@;'; put 'put ''MS45NCAxOCAxNC42MyAxOCAxNS4xNiAxNiAxMS40MSAxNiAxMS45NCAxOCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgcG9pbnRzPSIxMy4yOSAyMy4xIDE0LjEgMjAgMTIuNDcgMjAgMTMuMjkgMjMuMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgcG9pbnRzPSIyMS40NCAxOCAyNC4xMyAxOCAyNC42NiAxNiAyMC45MSAxNiAyMS40NCAxOCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtNSIgcG9pbnRzPSIyMi43OCAyMy4xIDIzLjYgMjAgMjEuOTcgMjAgMjIuNzggMjMuMSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjksMjBI''@;'; put 'put ''MjYuMTlMMjQsMjguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEwxOS4zOCwyMEgxNi42OWwtMi4xOSw4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMOS44OCwyMEg3YTEsMSwwLDAsMSwwLTJIOS4zNWwtLjUzLTJIN2ExLDEsMCwwLDEsMC0ySDguM2wtMS0zLjY4YTEuMjUsMS4yNSwwLDAs''@;'; put 'put ''MSwyLjQyLS42NEwxMC44OCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLDBMMjAuMzgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40Mi42NGwtMSwzLjY4SDI5YTEsMSwwLDAsMSwwLDJIMjcuMjRsLS41MywySDI5YTEsMSwwLDAsMSwwLDJaIi8+Jyks''@;'; put 'put ''bC5DbHJTaGFwZVllbj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LjM0LDQuNTVhMSwxLDAsMSwwLTEuNjctMS4xTDE4LDE4LjIzLDguMzMsMy40NWExLDEsMCwwLDAtMS42NywxLjFMMTcsMjAuMzVWMjIu''@;'; put 'put ''MkgxMmEuOC44LDAsMCwwLDAsMS42aDV2Mi40SDEyYS44LjgsMCwwLDAsMCwxLjZoNVYzMmExLDEsMCwwLDAsMiwwVjI3LjhoNWEuOC44LDAsMCwwLDAtMS42SDE5VjIzLjhoNWEuOC44LDAsMCwwLDAtMS42SDE5VjIwLjM1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptOC4wNyw3LjkxTDE5Ljc0LDIwSDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2MkgyMmExLDEsMCwwLDEsMCwySDE5LjI1djIuNzVhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI2''@;'; put 'put ''SDE0YTEsMSwwLDEsMSwwLTJoMi43NVYyMkgxNGExLDEsMCwxLDEsMC0yaDIuMjZMOS45Myw5LjkxYTEuMjUsMS4yNSwwLDEsMSwyLjEyLTEuMzNMMTgsMTguMDhsNS45NS05LjQ5YTEuMjUsMS4yNSwwLDEsMSwyLjEyLDEuMzNaIi8+JyksbC5DbHJTaGFwZUJpdGNvaW49KDAsYS5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggZD0iTTI0LjExLDE2Ljg4QTUuNDksNS40OSwwLDAsMCwyMSw3VjRhMSwxLDAsMCwwLTIsMFY3SDE2VjRhMSwxLDAsMCwwLTIsMFY3SDExYTEsMSwwLDAsMC0xLDFWMjhhMSwxLDAsMCwwLDEsMWgzdjNhMSwxLDAsMCwwLDIsMFYyOWgzdjNhMSwxLDAsMCwwLDIsMFYyOWgu''@;'; put 'put ''MDhBNi4wNyw2LjA3LDAsMCwwLDI3LDIyLjgxdi0uNjJBNi4yNSw2LjI1LDAsMCwwLDI0LjExLDE2Ljg4Wk0xMiw5aDguNjlhMy41OSwzLjU5LDAsMCwxLDMuNDMsMi4zNkEzLjUxLDMuNTEsMCwwLDEsMjAuNzksMTZIMTJaTTI1LDIyLjgxQTQuMDgsNC4wOCwwLDAsMSwyMS4wNiwyN0gxMlYx''@;'; put 'put ''OGg5LjA2QTQuMDgsNC4wOCwwLDAsMSwyNSwyMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjE4LDE4LjQ3SDE0LjV2Nmg2LjY4YTIuNywyLjcsMCwwLDAsMi42My0yLjc3di0uNDhBMi43MSwyLjcx''@;'; put 'put ''LDAsMCwwLDIxLjE4LDE4LjQ3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMywxMy43NWEyLjI0LDIuMjQsMCwwLDAtMi4yMy0yLjI1SDE0LjVWMTZoNi4zQTIuMjIsMi4yMiwwLDAsMCwyMywxMy43NVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjMxLDE5LjczQTUuMjIsNS4yMiwwLDAsMSwyMS4xOCwyN0gyMXYxLjlhMSwxLDAsMCwxLTIsMFYyN0gxN3Yx''@;'; put 'put ''LjlhMSwxLDAsMCwxLTIsMFYyN0gxMy4yNUExLjI1LDEuMjUsMCwwLDEsMTIsMjUuNzVWMTcuMjNoMHYtN0ExLjI1LDEuMjUsMCwwLDEsMTMuMjUsOUgxNVY3LjA3YTEsMSwwLDAsMSwyLDBWOWgyVjcuMDdhMSwxLDAsMCwxLDIsMFY5YTQuNzIsNC43MiwwLDAsMSwzLjIsOCw1LjMxLDUuMzEs''@;'; put 'put ''MCwwLDEsMi4xMSw0LjI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxsLkNsclNoYXBlQ29pbkJhZz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuNiwyOWExLDEsMCwwLDAtMS0xaC02YTEsMSwwLDAsMCwwLDJoNkExLDEsMCwwLDAsMjEuNiwy''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMi41NCwyNGgtNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMiwzMkgx''@;'; put 'put ''NmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi43LDMyaC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLjcsMjhoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuNzQsMjZhMjgsMjgsMCwwLDAtMi44Mi0xMC4xMkEyMC4yNCwyMC4yNCww''@;'; put 'put ''LDAsMCwyNC42LDguNzFMMjcsMy40MmExLDEsMCwwLDAtLjA3LTFBMSwxLDAsMCwwLDI2LjEzLDJIOS44YTEsMSwwLDAsMC0uOTEsMS40MmwyLjQ1LDUuMzFhMjAuMzMsMjAuMzMsMCwwLDAtNi4yOCw3LjE1Yy0yLjE1LDQtMi44Miw4Ljg5LTMsMTIuMjhhMy42LDMuNiwwLDAsMCwxLDIuNzFB''@;'; put 'put ''My43OSwzLjc5LDAsMCwwLDUuOCwzMS45NEgxMlYzMEg1LjcyYTEuNjgsMS42OCwwLDAsMS0xLjIxLS41MiwxLjYyLDEuNjIsMCwwLDEtLjQ1LTEuMjNjLjE0LTIuNjEuNjktNy41OCwyLjc2LTExLjQ1QTE4LDE4LDAsMCwxLDEzLjA4LDEwaDFhMzAuODEsMzAuODEsMCwwLDAtMS44NywyLjky''@;'; put 'put ''LDIyLjc4LDIyLjc4LDAsMCwwLTEuNDcsMy4zNGwxLjM3LjkyYTI0LDI0LDAsMCwxLDEuNDktMy40N0EyOS4xLDI5LjEsMCwwLDEsMTYuMDUsMTBoMWEyMS40NSwyMS40NSwwLDAsMSwxLjQxLDUsMjIuNTQsMjIuNTQsMCwwLDEsLjMyLDMuODZsMS41OC0xLjExYTI0LjE1LDI0LjE1LDAsMCww''@;'; put 'put ''LS4zMi0zQTI0LjgyLDI0LjgyLDAsMCwwLDE4Ljc2LDEwaC43OGwuOTEtMkgxMy4yMUwxMS4zNiw0SDI0LjU3bC0yLjUsNS40N2E5LjkzLDkuOTMsMCwwLDEsMS4yMy43OCwxOC42MywxOC42MywwLDAsMSw1Ljg2LDYuNTdBMjYuNTksMjYuNTksMCwwLDEsMzEuNzMsMjZaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICA8cGF0aCBkPSJNMjQuODksMjZoNy44NmMtLjY2LTguNzEtNC40MS0xNC4xMi05LjIyLTE3LjMyTDI1LjcyLDMuOWExLDEsMCwwLDAtLjkxLTEuNEgxMS4xYTEsMSwwLDAsMC0uOTEsMS40bDEuMiwyLjZIMjEuNTFsLS45''@;'; put 'put ''LDJIMTguNzZBMjQuOSwyNC45LDAsMCwxLDIwLDEzLjE5YTI0LjQ5LDI0LjQ5LDAsMCwxLC4zMiwzbC0xLjU4LDEuMTFhMjIuNTQsMjIuNTQsMCwwLDAtLjMyLTMuODZBMjEuNzQsMjEuNzQsMCwwLDAsMTcsOC41aC0xYTI4LjIyLDI4LjIyLDAsMCwwLTIuNDgsMy43LDIzLjkxLDIzLjkxLDAs''@;'; put 'put ''MCwwLTEuNDksMy40NmwtMS4zNy0uOTFhMjIuNzgsMjIuNzgsMCwwLDEsMS40Ny0zLjM0QTMwLjgxLDMwLjgxLDAsMCwxLDE0LjA1LDguNUgxMi4zbC4wOC4xN0M3LjA4LDEyLjIsMy4wNSwxOC40LDMuMDUsMjguNzVBMS42NSwxLjY1LDAsMCwwLDQuNjEsMzAuNWg4QTIuNjcsMi42NywwLDAs''@;'; put 'put ''MSwxNC4yMSwyNmEyLjY3LDIuNjcsMCwwLDEtLjM3LTEuMzQsMi43LDIuNywwLDAsMSwyLjctMi43aDZhMi43LDIuNywwLDAsMSwyLjcsMi43QTIuNjMsMi42MywwLDAsMSwyNC44OSwyNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLjYs''@;'; put 'put ''MjguNWExLDEsMCwwLDAtMS0xaC02YTEsMSwwLDAsMCwwLDJoNkExLDEsMCwwLDAsMjEuNiwyOC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIuNTQsMjMuNWgtNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDMxLjVIMTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi43LDMxLjVoLTdhMSwxLDAsMCwwLDAsMmg3''@;'; put 'put ''YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy43LDI3LjVoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLGwuQ2xyU2hh''@;'; put 'put ''cGVQZXNvPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMy4ySDI3Ljg5QTYuODEsNi44MSwwLDAsMCwyOCwxMmE3Ljg1LDcuODUsMCwwLDAtLjEtMS4xOWgyLjkzYS44LjgsMCwwLDAsMC0xLjZIMjcuNDZBOC40NCw4LjQ0LDAsMCwwLDE5LjU3LDRIMTFhMSwxLDAsMCwwLTEsMVY5''@;'; put 'put ''LjJIN2EuOC44LDAsMCwwLDAsMS42aDN2Mi40SDdhLjguOCwwLDAsMCwwLDEuNmgzVjMxYTEsMSwwLDAsMCwyLDBWMjBoNy41N2E4LjQ1LDguNDUsMCwwLDAsNy44OS01LjJIMzFhLjguOCwwLDAsMCwwLTEuNlpNMTIsNmg3LjU3YTYuNTEsNi41MSwwLDAsMSw1LjY4LDMuMkgxMlptMCw0LjhI''@;'; put 'put ''MjUuODdhNS42LDUuNiwwLDAsMSwwLDIuNEgxMlpNMTkuNTcsMThIMTJWMTQuOEgyNS4yNUE2LjUxLDYuNTEsMCwwLDEsMTkuNTcsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTQuMTgsMTMuOFYxNmg5LjQ1YTUuMjYsNS4yNiww''@;'; put 'put ''LDAsMCwuMDgtLjg5LDQuNzIsNC43MiwwLDAsMC0uMi0xLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTQuMTgsMTkuN2g1LjE5YTQuMjgsNC4yOCwwLDAsMCwzLjUtMS45SDE0LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTkuMzcsMTAuNTFIMTQuMThWMTJoOC4zN0E0LjIxLDQuMjEsMCwwLDAsMTkuMzcsMTAuNTFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy42NywyYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAs''@;'; put 'put ''MCwwLDE3LjY3LDJabTEwLjUsMTUuOEgyNS43YTYuODcsNi44NywwLDAsMS02LjMzLDQuNEgxNC4xOHY2LjU0YTEuMjUsMS4yNSwwLDEsMS0yLjUsMFYxNy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjEzLjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWOS4yNkExLjI1LDEuMjUs''@;'; put 'put ''MCwwLDEsMTIuOTMsOGg2LjQ0YTYuODQsNi44NCwwLDAsMSw2LjE1LDRoMi42NWEuOS45LDAsMCwxLDAsMS44SDI2LjA5YTYuOTEsNi45MSwwLDAsMSwuMTIsMS4zLDYuOCw2LjgsMCwwLDEtLjA2LjloMmEuOS45LDAsMCwxLDAsMS44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtNCIgLz4nKSxsLkNsclNoYXBlUnVibGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjU3LDIwQTguMjMsOC4yMywwLDAsMCwyOSwxMmE4LjIzLDguMjMsMCwwLDAtOC40My04SDEyYTEsMSwwLDAsMC0xLDFWMThIOWExLDEsMCwwLDAsMCwyaDJ2Mkg5YTEsMSwwLDAsMCww''@;'; put 'put ''LDJoMnY3YTEsMSwwLDAsMCwyLDBWMjRoOWExLDEsMCwwLDAsMC0ySDEzVjIwWk0xMyw2aDcuNTdBNi4yNCw2LjI0LDAsMCwxLDI3LDEyYTYuMjMsNi4yMywwLDAsMS02LjQzLDZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjAu''@;'; put 'put ''NzUsOS4yNUgxNXY4LjgxaDUuNzlhNC42Niw0LjY2LDAsMCwwLDQuODYtNC40QTQuNjUsNC42NSwwLDAsMCwyMC43NSw5LjI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwy''@;'; put 'put ''Wm0yLjc1LDE4LjU2SDE1VjIyaDguMjlhMSwxLDAsMCwxLDAsMkgxNXY1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNEgxMS4yNWExLDEsMCwwLDEsMC0yaDEuMjFWMjAuNTZIMTEuMjVhMS4yNSwxLjI1LDAsMCwxLDAtMi41aDEuMjFWOGExLjI1LDEuMjUsMCwwLDEsMS4yNS0xLjI1aDdhNy4x''@;'; put 'put ''NCw3LjE0LDAsMCwxLDcuMzYsNi45QTcuMTUsNy4xNSwwLDAsMSwyMC43NSwyMC41NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZUVtcGxveWVlR3JvdXA9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjQyLDE2LjMxYTUuNyw1''@;'; put 'put ''LjcsMCwxLDEsNS43Ni01LjdBNS43NCw1Ljc0LDAsMCwxLDE4LjQyLDE2LjMxWm0wLTkuNGEzLjcsMy43LDAsMSwwLDMuNzYsMy43QTMuNzQsMy43NCwwLDAsMCwxOC40Miw2LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4''@;'; put 'put ''LjQyLDE2LjMxYTUuNyw1LjcsMCwxLDEsNS43Ni01LjdBNS43NCw1Ljc0LDAsMCwxLDE4LjQyLDE2LjMxWm0wLTkuNGEzLjcsMy43LDAsMSwwLDMuNzYsMy43QTMuNzQsMy43NCwwLDAsMCwxOC40Miw2LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTIxLjkxLDE3LjY1YTIwLjYsMjAuNiwwLDAsMC0xMywyQTEuNzcsMS43NywwLDAsMCw4LDIxLjI1djMuNTZhMSwxLDAsMCwwLDIsMFYyMS4zOGExOC45MiwxOC45MiwwLDAsMSwxMi0xLjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''Lz5cbiAgPHBhdGggZD0iTTMzLDIySDI2LjNWMjAuNTJhMSwxLDAsMCwwLTIsMFYyMkgxN2ExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM0ExLDEsMCwwLDAsMzMsMjJaTTMyLDMySDE4VjI0aDYuM3YuNDFhMSwxLDAsMCwwLDIsMFYyNEgzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxyZWN0IHg9IjIxLjgxIiB5PSIyNy40MiIgd2lkdGg9IjUuOTYiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNMTAuODQsMTIu''@;'; put 'put ''MjRhMTgsMTgsMCwwLDAtNy45NSwyQTEuNjcsMS42NywwLDAsMCwyLDE1LjcxdjMuMWExLDEsMCwwLDAsMiwwdi0yLjlhMTYsMTYsMCwwLDEsNy41OC0xLjY3QTcuMjgsNy4yOCwwLDAsMSwxMC44NCwxMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik0zMy4xMSwxNC4yM2ExNy44LDE3LjgsMCwwLDAtNy4xMi0yLDcuNDYsNy40NiwwLDAsMS0uNzMsMkExNS44OSwxNS44OSwwLDAsMSwzMiwxNS45MXYyLjlhMSwxLDAsMSwwLDIsMHYtMy4xQTEuNjcsMS42NywwLDAsMCwzMy4xMSwxNC4yM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gIDxwYXRoIGQ9Ik0xMC42NiwxMC42MWMwLS4yMywwLS40NSwwLS42N2EzLjA3LDMuMDcsMCwwLDEsLjU0LTYuMTEsMy4xNSwzLjE1LDAsMCwxLDIuMi44OSw4LjE2LDguMTYsMCwwLDEsMS43LTEuMDgsNS4xMyw1LjEzLDAsMCwwLTks''@;'; put 'put ''My4yNyw1LjEsNS4xLDAsMCwwLDQuNyw1QTcuNDIsNy40MiwwLDAsMSwxMC42NiwxMC42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxwYXRoIGQ9Ik0yNC43NywxLjgzYTUuMTcsNS4xNywwLDAsMC0zLjY5LDEuNTUsNy44Nyw3Ljg3LDAsMCwx''@;'; put 'put ''LDEuOSwxLDMuMTQsMy4xNCwwLDAsMSw0LjkzLDIuNTIsMy4wOSwzLjA5LDAsMCwxLTEuNzksMi43Nyw3LjE0LDcuMTQsMCwwLDEsLjA2LjkzLDcuODgsNy44OCwwLDAsMS0uMSwxLjIsNS4xLDUuMSwwLDAsMCwzLjgzLTQuOUE1LjEyLDUuMTIsMCwwLDAsMjQuNzcsMS44M1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIFxuICA8ZWxsaXBzZSBjeD0iMTgiIGN5PSIxMS4yOCIgcng9IjQuNzYiIHJ5PSI0LjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEwLjc4LDExLjc1Yy4xNiwwLC4z''@;'; put 'put ''MiwwLC40OCwwLDAtLjE1LDAtLjI4LDAtLjQzYTYuNyw2LjcsMCwwLDEsMy43NS02LDQuNjIsNC42MiwwLDEsMC00LjIxLDYuNDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yNC43NiwxMS4yOGMwLC4xNSwwLC4yOCwwLC40My4xNiww''@;'; put 'put ''LC4zMiwwLC40OCwwQTQuNTgsNC41OCwwLDEsMCwyMSw1LjI5LDYuNyw2LjcsMCwwLDEsMjQuNzYsMTEuMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yMi4yOSwxNi40NWEyMS40NSwyMS40NSwwLDAsMSw1LjcxLDIsMi43MSwyLjcx''@;'; put 'put ''LDAsMCwxLC42OC41M0gzNFYxNS41NmEuNzIuNzIsMCwwLDAtLjM4LS42NCwxOCwxOCwwLDAsMC04LjQtMi4wNWwtLjY2LDBBNi42Niw2LjY2LDAsMCwxLDIyLjI5LDE2LjQ1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNNi41MywyMC45''@;'; put 'put ''MkEyLjc2LDIuNzYsMCwwLDEsOCwxOC40N2EyMS40NSwyMS40NSwwLDAsMSw1LjcxLTIsNi42Niw2LjY2LDAsMCwxLTIuMjctMy41NWwtLjY2LDBhMTgsMTgsMCwwLDAtOC40LDIuMDUuNzIuNzIsMCwwLDAtLjM4LjY0VjIySDYuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC01Ii8+XG4gIDxyZWN0IHg9IjIxLjQ2IiB5PSIyNi42OSIgd2lkdGg9IjUuOTYiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0zMi44MSwyMS4yNkgyNS45NHYtMWExLDEsMCwwLDAtMiwwdjFIMjJWMTguNDNB''@;'; put 'put ''MjAuMTcsMjAuMTcsMCwwLDAsMTgsMThhMTkuMjcsMTkuMjcsMCwwLDAtOS4wNiwyLjIyLjc2Ljc2LDAsMCwwLS40MS42OHY1LjYxaDcuMTF2Ni4wOWExLDEsMCwwLDAsMSwxSDMyLjgxYTEsMSwwLDAsMCwxLTFWMjIuMjZBMSwxLDAsMCwwLDMyLjgxLDIxLjI2Wm0tMSwxMC4zNkgxNy42NFYy''@;'; put 'put ''My4yNmg2LjN2LjkxYTEsMSwwLDAsMCwyLDB2LS45MWg1Ljg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNyIvPicpLGwuQ2xyU2hhcGVFbXBsb3llZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYuNDMsMTYuNjlhNyw3LDAsMSwxLDctN0E3LDcsMCwwLDEs''@;'; put 'put ''MTYuNDMsMTYuNjlabTAtMTEuOTJhNSw1LDAsMSwwLDUsNUE1LDUsMCwwLDAsMTYuNDMsNC43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMiwxNy45QTI1LjQxLDI1LjQxLDAsMCwwLDUuODgsMTkuNTdhNC4wNiw0LjA2LDAs''@;'; put 'put ''MCwwLTIuMzEsMy42OFYyOS4yYTEsMSwwLDEsMCwyLDBWMjMuMjVhMiwyLDAsMCwxLDEuMTYtMS44NiwyMi45MSwyMi45MSwwLDAsMSw5LjctMi4xMSwyMy41OCwyMy41OCwwLDAsMSw1LjU3LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJl''@;'; put 'put ''Y3QgeD0iMjIuMTQiIHk9IjI3LjQxIiB3aWR0aD0iNi4xNCIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMy4xNywyMS40N0gyOHYyaDQuMTd2OC4zN0gxOFYyMy40N2g2LjN2LjQyYTEsMSwwLDAsMCwyLDBW''@;'; put 'put ''MjBhMSwxLDAsMCwwLTIsMHYxLjQ3SDE3YTEsMSwwLDAsMC0xLDFWMzIuODRhMSwxLDAsMCwwLDEsMUgzMy4xN2ExLDEsMCwwLDAsMS0xVjIyLjQ3QTEsMSwwLDAsMCwzMy4xNywyMS40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIFxuICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIxNi44NiIgY3k9IjkuNzMiIHI9IjYuNDYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iMjEiIHk9IjI4IiB3aWR0aD0iNyIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAg''@;'; put 'put ''PHBhdGggZD0iTTE1LDMwdjNhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIzYTEsMSwwLDAsMC0xLTFIMjZWMjAuNTNhMSwxLDAsMCwwLTIsMFYyMkgyMlYxOC40MkEzMi4xMiwzMi4xMiwwLDAsMCwxNi44NiwxOGEyNiwyNiwwLDAsMC0xMSwyLjM5LDMuMjgsMy4yOCwwLDAsMC0x''@;'; put 'put ''Ljg4LDNWMzBabTE3LDJIMTdWMjRoN3YuNDJhMSwxLDAsMCwwLDIsMFYyNGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGwuQ2xyU2hhcGVGYWN0b3J5PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy40Nyw3LjM3YTEsMSwwLDAsMC0xLC4wNkwy''@;'; put 'put ''MywxMy43N1Y4LjI2YTEsMSwwLDAsMC0xLjY0LS43N0wxMy40OCwxNEgxMFY0LjYyYTEsMSwwLDAsMC0uNzgtMWwtNC0uOWExLDEsMCwwLDAtLjg1LjJBMSwxLDAsMCwwLDQsMy43M1YxNEgzYTEsMSwwLDAsMC0xLDFWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjguMjZBMSwx''@;'; put 'put ''LDAsMCwwLDMzLjQ3LDcuMzdaTTYsNWwyLC40NFYxNEg2Wk0zMiwzMEg0VjE2aDkuODNhMSwxLDAsMCwwLC42NC0uMjNMMjEsMTAuMzd2NS4yOGExLDEsMCwwLDAsMS41Ni44M0wzMiwxMC4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0''@;'; put 'put ''IHg9IjYiIHk9IjE3Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSI2IiB5PSIyMS45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMjUuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gIDxyZWN0IHg9IjIzIiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjE4Ljk5IiB3''@;'; put 'put ''aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIvPlxuICBcbiAg''@;'; put 'put ''PHBhdGggZD0iTTMyLjQ1LDguNDQsMjIsMTUuM1Y5LjUxYTEsMSwwLDAsMC0xLjYzLS43OEwxNC4wNywxNEgxMFY0LjA2TDQsMi43MVYxNEgyVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY5LjI3QTEsMSwwLDAsMCwzMi40NSw4LjQ0Wk0xNCwyOUg2VjI3aDhabTAtNEg2VjIz''@;'; put 'put ''aDhabTAtNEg2VjE5aDhabTgsOEgyMFYyNmgyWm0wLTZIMjBWMjBoMlptNCw2SDI0VjI2aDJabTAtNkgyNFYyMGgyWm00LDZIMjhWMjZoMlptMC02SDI4VjIwaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksbC5Db21tZXJjZVNoYXBlcz17Y2FsY3VsYXRv''@;'; put 'put ''cjpsLkNsclNoYXBlQ2FsY3VsYXRvciwicGlnZ3ktYmFuayI6bC5DbHJTaGFwZVBpZ2d5QmFuaywic2hvcHBpbmctYmFnIjpsLkNsclNoYXBlU2hvcHBpbmdCYWcsInNob3BwaW5nLWNhcnQiOmwuQ2xyU2hhcGVTaG9wcGluZ0NhcnQsd2FsbGV0OmwuQ2xyU2hhcGVXYWxsZXQsc3RvcmU6bC5D''@;'; put 'put ''bHJTaGFwZVN0b3JlLGV1cm86bC5DbHJTaGFwZUV1cm8sZG9sbGFyOmwuQ2xyU2hhcGVEb2xsYXIscGVzbzpsLkNsclNoYXBlUGVzbywiY3JlZGl0LWNhcmQiOmwuQ2xyU2hhcGVDcmVkaXRDYXJkLGJhbms6bC5DbHJTaGFwZUJhbmssImRvbGxhci1iaWxsIjpsLkNsclNoYXBlRG9sbGFyQmls''@;'; put 'put ''bCwiZS1jaGVjayI6bC5DbHJTaGFwZUVDaGVjayxwb3VuZDpsLkNsclNoYXBlUG91bmQscnVwZWU6bC5DbHJTaGFwZVJ1cGVlLHdvbjpsLkNsclNoYXBlV29uLHllbjpsLkNsclNoYXBlWWVuLGJpdGNvaW46bC5DbHJTaGFwZUJpdGNvaW4scnVibGU6bC5DbHJTaGFwZVJ1YmxlLCJjb2luLWJh''@;'; put 'put ''ZyI6bC5DbHJTaGFwZUNvaW5CYWcsImVtcGxveWVlLWdyb3VwIjpsLkNsclNoYXBlRW1wbG95ZWVHcm91cCxlbXBsb3llZTpsLkNsclNoYXBlRW1wbG95ZWUsZmFjdG9yeTpsLkNsclNoYXBlRmFjdG9yeX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29tbWVyY2VTaGFwZXMsInNhdmluZ3Mi''@;'; put 'put ''LCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db21tZXJjZVNoYXBlc1sicGlnZ3ktYmFuayJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKGwuQ29tbWVyY2VTaGFwZXMpfSwiLi9wcm9q''@;'; put 'put ''ZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICBcKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxhKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuQ29yZVNo''@;'; put 'put ''YXBlcz1sLkNsclNoYXBlQXJyb3c9bC5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1sLkNsclNoYXBlRXllSGlkZT1sLkNsclNoYXBlRXllPWwuQ2xyU2hhcGVFdmVudD1sLkNsclNoYXBlQ2FsZW5kYXI9bC5DbHJTaGFwZUFuZ2xlRG91YmxlPWwuQ2xyU2hhcGVWaWV3Q29sdW1ucz1sLkNsclNoYXBl''@;'; put 'put ''U2VhcmNoPWwuQ2xyU2hhcGVWbUJ1Zz1sLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1sLkNsclNoYXBlRmlsdGVyR3JpZD1sLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD1sLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPWwuQ2xyU2hhcGVDbG91ZD1sLkNsclNoYXBlSW1hZ2U9bC5DbHJT''@;'; put 'put ''aGFwZUJlbGw9bC5DbHJTaGFwZUZvbGRlck9wZW49bC5DbHJTaGFwZUZvbGRlcj1sLkNsclNoYXBlQW5nbGU9bC5DbHJTaGFwZVVzZXI9bC5DbHJTaGFwZUJhcnM9bC5DbHJTaGFwZUhlbHBJbmZvPWwuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9bC5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9bC5D''@;'; put 'put ''bHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1sLkNsclNoYXBlSW5mb1N0YW5kYXJkPWwuQ2xyU2hhcGVJbmZvQ2lyY2xlPWwuQ2xyU2hhcGVDaGVja0NpcmNsZT1sLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9bC5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9bC5DbHJTaGFwZVRpbWVzPWwu''@;'; put 'put ''Q2xyU2hhcGVDaGVjaz1sLkNsclNoYXBlQ29nPWwuQ2xyU2hhcGVIb21lPWwuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZvaWQgMDt2YXIgcD1hKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRz''@;'; put 'put ''Iik7YT1hKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIiksbC5DbHJTaGFwZVVua25vd25TdGF0dXM9KDAsYS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3LjU4IiBjeT0iMjYuMjMiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuNywxM2E1LjE4LDUuMTgsMCwwLDAtMi4xNi0zLjU2LDcuMjYsNy4y''@;'; put 'put ''NiwwLDAsMC01LjcxLTEuMDlBMTEuMzQsMTEuMzQsMCwwLDAsMTIsMTAuNDQsMSwxLDAsMSwwLDEzLjI2LDEyYTkuMzIsOS4zMiwwLDAsMSwzLjk0LTEuNzIsNS4yOSw1LjI5LDAsMCwxLDQuMTYuNzQsMy4yMSwzLjIxLDAsMCwxLDEuMzUsMi4xOWMuMzMsMi42OS0zLjE5LDMuNzUtNS4zMiw0''@;'; put 'put ''LjE0bC0uODIuMTV2NC4zNmExLDEsMCwwLDAsMiwwVjE5LjE3QzI0LjYxLDE3Ljc5LDI0Ljg4LDE0LjQxLDI0LjcsMTNaIi8+JyksbC5DbHJTaGFwZUhvbWU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy43''@;'; put 'put ''MSwxNy4yOWwtMTUtMTVhMSwxLDAsMCwwLTEuNDEsMGwtMTUsMTVhMSwxLDAsMCwwLDEuNDEsMS40MUwxOCw0LjQxLDMyLjI5LDE4LjcxYTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0yOCwzMmgtNVYyMkgxM1YzMkg4VjE4TDYsMjBWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2bC0yLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDE5''@;'; put 'put ''YTEsMSwwLDAsMS0uNzEtLjI5TDE4LDQuNDEsMy43MSwxOC43MWExLDEsMCwwLDEtMS40MS0xLjQxbDE1LTE1YTEsMSwwLDAsMSwxLjQxLDBsMTUsMTVBMSwxLDAsMCwxLDMzLDE5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xOCw3Ljc5LDYsMTkuODNWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2WiIvPicpLGwuQ2xyU2hhcGVDb2c9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''OC4xLDExYy0zLjksMC03LDMuMS03LDdzMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN1MyMiwxMSwxOC4xLDExeiBNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMyLjgsMCw1LDIuMiw1LDVTMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuNi0xLjVsMS40LTIuNmMwLjMtMC42LDAuMi0xLjQtMC4zLTEuOWwtMi40LTIuNGMtMC41LTAuNS0xLjMtMC42LTEuOS0wLjNsLTIuNiwxLjRsLTEuNS0wLjZsLTAuOS0yLjhDMjEs''@;'; put 'put ''Mi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYs''@;'; put 'put ''MS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjlj''@;'; put 'put ''MC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEu''@;'; put 'put ''MS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3ogTTMyLDE5LjRsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwt''@;'; put 'put ''MC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAu''@;'; put 'put ''Mi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuNCwwLjUsMi4xLDAuOWwwLjUsMC4zbDMuMy0xLjhsMiwybC0xLjgs''@;'; put 'put ''My4zbDAuMywwLjVjMC40LDAuNywwLjcsMS40LDAuOSwyLjFsMC4xLDAuNWwzLjYsMS4xVjE5LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMSwxOGMwLDMuOSwzLjEs''@;'; put 'put ''Nyw3LDdjMy45LDAsNy0zLjEsNy03cy0zLjEtNy03LTdDMTQuMiwxMSwxMS4xLDE0LjEsMTEuMSwxOHogTTIzLjEsMThjMCwyLjgtMi4yLDUtNSw1Yy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01QzIwLjksMTMsMjMuMSwxNS4yLDIzLjEsMTh6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuMS0wLjNjLTAuOCwwLTEuNi0wLjItMi40LTAuNGMwLjMsMC42LDAuNiwxLjMsMC44LDEuOWwwLjEsMC41bDMuNiwxLjF2Mi44bC0zLjYsMS4x''@;'; put 'put ''TDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0w''@;'; put 'put ''LjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40''@;'; put 'put ''LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjMsMC41LDEuOSwwLjhjLTAuMy0wLjgtMC40LTEuNi0wLjQtMi41bC0wLjQtMC4ybC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEu''@;'; put 'put ''MkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcs''@;'; put 'put ''MC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEu''@;'; put 'put ''NS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNS42LDMzLjUsMTQuOSwzMi44LDE0''@;'; put 'put ''Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjcsMTUuNGgtNS4zdjAuMWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAu''@;'; put 'put ''NywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTku''@;'; put 'put ''NHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjRsMS40LTIuM2wtMC42LTJDMjEsMi40LDIwLjQsMiwxOS43''@;'; put 'put ''LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIu''@;'; put 'put ''NSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4x''@;'; put 'put ''LDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYt''@;'; put 'put ''My40QzM0LDE2LDMzLjksMTUuNywzMy43LDE1LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzAuMiwwLDAu''@;'; put 'put ''NSwwLDAuNywwLjFjLTAuMi0wLjYtMC4zLTEuMy0wLjItMmgtMC41Yy0zLjksMC03LDMuMS03LDdjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN2MwLTAuOS0wLjItMS44LTAuNS0yLjZoLTIuMmMwLjUsMC44LDAuNywxLjYsMC43LDIuNUMyMy4xLDIwLjgsMjAuOSwyMywxOC4xLDIz''@;'; put 'put ''eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAu''@;'; put 'put ''OCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTExLjY1LDExLjY1LDAsMCwwLS45NS0yLjMzbDEuNjQtMy4wN2EuNjEuNjEsMCwwLDAtLjExLS43MkwyNy40MSw2LjJhLjYxLjYxLDAsMCwwLS43Mi0uMTFMMjMuNjQsNy43MmExMS42MiwxMS42MiwwLDAsMC0yLjM2LTFsLTEt''@;'; put 'put ''My4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCww''@;'; put 'put ''LTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWEx''@;'; put 'put ''MS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAs''@;'; put 'put ''LjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIuNTcsMTUuNzJsLTMuMzUtMWExMi4xMiwxMi4xMiwwLDAsMC0uNDctMS4zMiw3LjQ5LDcuNDksMCwwLDEtNi4xNC02LjE2LDExLjgyLDExLjgyLDAs''@;'; put 'put ''MCwwLTEuMzMtLjQ4bC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2Ex''@;'; put 'put ''MS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43''@;'; put 'put ''Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIu''@;'; put 'put ''MzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEs''@;'; put 'put ''MTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMyLjU3LDE1LjcyLDMxLjUsMTUuNEgyMi44NUE1LjUsNS41LDAsMSwxLDE4LDEyLjVhNS41Myw1LjUzLDAsMCwxLC42NSwwQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42Mi0uODYtMi44M0EuNjEu''@;'; put 'put ''NjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wt''@;'; put 'put ''My4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42''@;'; put 'put ''NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43Mmwt''@;'; put 'put ''MS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksbC5DbHJTaGFwZUNoZWNr''@;'; put 'put ''PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTMuNzIsMjcuNjksMy4yOSwxNy4yN2ExLDEsMCwwLDEsMS40MS0xLjQxbDksOUwzMS4yOSw3LjI5YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+JyksbC5DbHJTaGFw''@;'; put 'put ''ZVRpbWVzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDkuNzFMMTYuNTksMTgs''@;'; put 'put ''OC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPicpLGwuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTgsMjEuMzJhMS4zLDEuMywwLDAsMCwxLjMtMS4zVjE0YTEuMywxLjMsMCwxLDAtMi42LDB2NkExLjMsMS4zLDAsMCwwLDE4LDIxLjMyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4''@;'; put 'put ''PSIxNy45NSIgY3k9IjI0LjI3IiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEs''@;'; put 'put ''MzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDguNTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAsMSwyOC41NSwyNy40OFoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDks''@;'; put 'put ''MCwwLDEsMywwdjYuODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjYuMjVaIi8+JyksbC5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkExLjMsMS4zLDAsMCwxLDE4LDIwLjA3WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIGN4PSIxNy45NSIgY3k9IjIzLjAyIiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMS40OSw2YTEuNDks''@;'; put 'put ''MS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNS41YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI1LjVaIi8+JyksbC5DbHJTaGFwZUNoZWNrQ2lyY2xlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuMzQsMjMuNzRsLTUtNWExLDEsMCwwLDEsMS40MS0xLjQxbDMuNTksMy41OSw2Ljc4LTYuNzhhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiBkPSJNMzAsMThBMTIsMTIsMCwxLDEsMTgsNiwxMiwxMiwwLDAsMSwzMCwxOFptLTQuNzctMi4xNmExLjQsMS40LDAsMCwwLTItMmwtNi43Nyw2Ljc3TDEzLDE3LjE2YTEuNCwxLjQsMCwwLDAtMiwybDUuNDUsNS40NVoiLz4nKSxsLkNsclNoYXBlSW5mb0NpcmNsZT0oMCxhLmNsckljb25T''@;'; put 'put ''VkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAgY3g9IjE3LjkzIiBjeT0iMTEuOSIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiICBkPSJNMjEsMjNI''@;'; put 'put ''MTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiICBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiww''@;'; put 'put ''LDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0y''@;'; put 'put ''LDUuMTVhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsMTUuOSwxMS4xNVpNMjMsMjRhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwxLDEsMC0yaDJWMTdIMTZhMSwxLDAsMCwxLDAtMmg0djhoMkExLDEsMCwwLDEsMjMsMjRaIi8+JyksbC5DbHJTaGFwZUluZm9TdGFuZGFyZD0oMCxhLmNsckljb25T''@;'; put 'put ''VkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuOTciIGN5PSIxMC40NSIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMSwyNUgx''@;'; put 'put ''OVYxNC4xSDE2YTEsMSwwLDAsMCwwLDJoMVYyNUgxNWExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2''@;'; put 'put ''LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwy''@;'; put 'put ''LjFabS0uMSw1LjI4YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE3LjksNy4zOFptMy42LDIxLjI1aC03YTEuNCwxLjQsMCwxLDEsMC0yLjhoMi4xdi05LjJIMTVhMS40LDEuNCwwLDEsMSwwLTIuOGg0LjR2MTJoMi4xYTEuNCwxLjQsMCwxLDEsMCwyLjhaIi8+JyksbC5DbHJTaGFwZVN1Y2Nl''@;'; put 'put ''c3NTdGFuZGFyZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDEyLjFhMSwxLDAsMCwwLTEuNDEsMEwxNS40OSwyMy4xNWwtNi02QTEsMSwwLDAsMCw4LDE4LjUzTDE1LjQ5LDI2LDI4LDEzLjUyQTEsMSwwLDAsMCwyOCwx''@;'; put 'put ''Mi4xWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI4LjQ1LDEyLjYzLDE1LjMxLDI1Ljc2LDcuNTUsMThhMS40LDEuNCwwLDAsMSwyLTJs''@;'; put 'put ''NS43OCw1Ljc4TDI2LjQ3LDEwLjY1YTEuNCwxLjQsMCwxLDEsMiwyWiIvPicpLGwuQ2xyU2hhcGVFcnJvclN0YW5kYXJkPSgwLGEuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMz''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44''@;'; put 'put ''LDEuOCwwLDAsMSwxOCwyOC42WiIvPicpLGwuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9KDAsYS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTUuMDYyMDc4MiwxLjY4MTE5NiBDMTUuNjI5ODgxOSwwLjY0OTI2NjM1NSAxNi43MTA5MDkxLDAuMDEwMjIxOTM5NiAxNy44ODUsMC4wMTAyMjE5Mzk2IEMxOS4wNTkwOTA5LDAuMDEwMjIxOTM5NiAyMC4xNDAxMTgxLDAuNjQ5MjY2MzU1IDIw''@;'; put 'put ''LjcwODY0MzMsMS42ODI1MjEyOSBMMzQuNTk4NjQ0LDI3LjI0MjUyMjUgQzM1LjE0MDc3NDYsMjguMjQwMTM5NyAzNS4xMTc0MzQ1LDI5LjQ0OTUzNzMgMzQuNTM3MjE2MSwzMC40MjU0OTQzIEMzMy45NTY5OTc3LDMxLjQwMTQ1MTQgMzIuOTA1NjcxLDMxLjk5OTY5ODQgMzEuNzcsMzIgTDQu''@;'; put 'put ''MDIyMzkzMjMsMzEuOTk5NzQ5MiBDMi44NzQwOTAwOSwzMi4wMjU0Njk5IDEuNzk5MDI4NDMsMzEuNDM3NTc1MyAxLjIwMTA2MzM1LDMwLjQ1NjkxMjYgQzAuNjAzMDk4MjY1LDI5LjQ3NjI0OTkgMC41NzI3Nzc4OTksMjguMjUxMzE3OSAxLjEyMjA3ODE4LDI3LjI0MTE5NiBMMTUuMDYyMDc4''@;'; put 'put ''MiwxLjY4MTE5NiBaIE0yLjg3ODUwNzY3LDI4LjE5NzcyODIgQzIuNjcwNjA5NjYsMjguNTgwMDM3NiAyLjY4MjA5NzUsMjkuMDQ0MTQyMyAyLjkwODY1NTcsMjkuNDE1Njk3NyBDMy4xMzUyMTM5LDI5Ljc4NzI1MzIgMy41NDI1MzU0LDMwLjAwOTk5NTkgNCwzMCBMMzEuNzY5NzM0NCwzMCBD''@;'; put 'put ''MzIuMTk5OTE5MSwyOS45OTk4ODU4IDMyLjU5ODI0NzgsMjkuNzczMjIwOCAzMi44MTgwODIxLDI5LjQwMzQ0ODIgQzMzLjAzNzkxNjQsMjkuMDMzNjc1NyAzMy4wNDY3NTk1LDI4LjU3NTQ1NjcgMzIuODQxMzU2NywyOC4xOTc0Nzg3IEwxOC45NTM4NzM5LDIuNjQyMDgxOTUgQzE4LjczOTQy''@;'; put 'put ''MzYsMi4yNTIzNDQzNiAxOC4zMjk4NDE5LDIuMDEwMjIxOTQgMTcuODg1LDIuMDEwMjIxOTQgQzE3LjQ0MDY4ODksMi4wMTAyMjE5NCAxNy4wMzE1NTM4LDIuMjUxNzY2OTIgMTYuODE2ODk0NiwyLjY0MDY4NzUzIEwyLjg3ODUwNzY3LDI4LjE5NzcyODIgWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC42LDI5LjIxLDIwLjcxLDMuNjVhMy4yMiwzLjIyLDAsMCwwLTUuNjYsMEwxLjE3LDI5LjIxQTMuMjIsMy4yMiwwLDAsMCw0LDM0SDMxLjc3YTMuMjIsMy4yMiwwLDAsMCwyLjgzLTQuNzVaTTE2LjYs''@;'; put 'put ''MTBhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOS44NWExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOS44NVoiLz4nKSxsLkNsclNoYXBlSGVscEluZm89KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjM5LDI1LjQ1''@;'; put 'put ''YTEsMSwwLDAsMC0xLjM4LjI5Yy0xLjQxLDIuMTYtNCw0LjgxLTYuMzEsNS43cy00LjEyLjU3LTQuODQsMGMtLjMxLS4yNy0xLjEyLTEtLjQzLTMuNDkuNDYtMS42NiwzLjMyLTkuNDgsNC0xMS4zOGwtMi4xOC4yOGMtLjY5LDEuODYtMy4yOSw4Ljg0LTMuNzYsMTAuNTgtLjY4LDIuNDktLjM0''@;'; put 'put ''LDQuMywxLjA5LDUuNTZBNS41OSw1LjU5LDAsMCwwLDE1LDM0YTkuNTMsOS41MywwLDAsMCwzLjQ1LS43YzIuNzktMS4wOSw1LjcyLTQuMTIsNy4yNi02LjQ3QTEsMSwwLDAsMCwyNS4zOSwyNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE5LjMsMTFhNC41LDQuNSwwLDEsMC00LjUtNC41QTQuNSw0LjUsMCwwLDAsMTkuMywxMVptMC03YTIuNSwyLjUsMCwxLDEtMi41LDIuNUEyLjUsMi41LDAsMCwxLDE5LjMsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjgxLDE1Yy4wNiwwLDYuMjctLjgyLDcuNzMtMSwuNjUtLjEsMS4xNCwwLDEuMy4xNXMuMjEuOC0uMDcsMS42OGMtLjYxLDEuODYtMy42OSwxMS00LjU5LDEzLjcxYTgsOCwwLDAsMCwxLjI5LS4zOCw3LjMyLDcuMzIsMCwwLDAsMS4xNS0uNkMx''@;'; put 'put ''OS44NSwyNSwyMi4xNSwxOC4xLDIyLjY3LDE2LjUycy4zOS0yLjc4LS4zLTMuNmEzLjE2LDMuMTYsMCwwLDAtMy4wOC0uODNjLTEuNDMuMTUtNy40Ny45NC03LjczLDFhMSwxLDAsMCwwLC4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGN4PSIyMC43NSIgY3k9IjYiIHI9IjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuODQsMjYuMjNhMSwxLDAsMCwwLTEuNC4yOSwxNi42LDE2LjYsMCwwLDEtMy41MSwzLjc3Yy0uMzMu''@;'; put 'put ''MjUtMS41NiwxLjItMi4wOCwxLS4zNi0uMTEtLjE1LS44Mi0uMDgtMS4xMmwuNTMtMS41N2MuMjItLjY0LDQuMDUtMTIsNC40Ny0xMy4zLjYyLTEuOS4zNS0zLjc3LTIuNDgtMy4zMi0uNzcuMDgtOC41OCwxLjA5LTguNzIsMS4xYTEsMSwwLDAsMCwuMTMsMnMzLS4zOSwzLjMzLS40MmEuODgu''@;'; put 'put ''ODgsMCwwLDEsLjg1LjQ0LDIuNDcsMi40NywwLDAsMS0uMDcsMS43MWMtLjI2LDEtNC4zNywxMi41OC00LjUsMTMuMjVhMi43OCwyLjc4LDAsMCwwLDEuMTgsMyw1LDUsMCwwLDAsMy4wOC44M2gwYTguNTMsOC41MywwLDAsMCwzLjA5LS42MmMyLjQ5LTEsNS4wOS0zLjY2LDYuNDYtNS43NUEx''@;'; put 'put ''LDEsMCwwLDAsMjQuODQsMjYuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVCYXJzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMjlINGExLDEs''@;'; put 'put ''MCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMyLDlINEExLDEsMCwwLDEsNCw3SDMyYTEsMSwwLDAsMSwwLDJaIi8+JyksbC5DbHJTaGFwZVVzZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE3YTcsNywwLDEsMC03LTdBNyw3LDAsMCww''@;'; put 'put ''LDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1''@;'; put 'put ''Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIy''@;'; put 'put ''LDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwyMCwxNC42YTUsNSwwLDEsMSwxLjI0LTgu''@;'; put 'put ''NDJsMS0xLjc2QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUs''@;'; put 'put ''NUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYt''@;'; put 'put ''NkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxMCIgcj0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDMuMTYtNS40N0E3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUx''@;'; put 'put ''LDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVBbmdsZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+JyksbC5DbHJTaGFwZUZvbGRlcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wm0wLDIwSDZWMTNoNy4zMWEy''@;'; put 'put ''LDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVWMjlINlYxM2g3LjMxYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MWE3LjUsNy41LDAsMCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJB''@;'; put 'put ''Ny40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMwLDE1LjRWMjlINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTks''@;'; put 'put ''OS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwz''@;'; put 'put ''MCw5Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4x''@;'; put 'put ''MSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMy4xMyw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxsLkNsclNoYXBlRm9sZGVyT3Blbj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5''@;'; put 'put ''LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAs''@;'; put 'put ''MCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwu''@;'; put 'put ''ODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1''@;'; put 'put ''LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9''@;'; put 'put ''IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtLjNMMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0u''@;'; put 'put ''MjRoOS40MkEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEs''@;'; put 'put ''MTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAs''@;'; put 'put ''MCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz''@;'; put 'put ''My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCww''@;'; put 'put ''LDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdW''@;'; put 'put ''MjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQx''@;'; put 'put ''aDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAs''@;'; put 'put ''MCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjMxLTJIMTYuNDJM''@;'; put 'put ''MTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGwuQ2xyU2hhcGVCZWxsPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIx''@;'; put 'put ''LDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1pNNS4xMywyOC45NGExNi4x''@;'; put 'put ''NywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1YTguNzQsOC43NCwwLDEsMSwxNy40NywwdjQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzksNy40NCw3LjQ0LDAsMCwxLTIuMjQtLjg0LDguODksOC44OSwwLDAsMSwu''@;'; put 'put ''NCwyLjY0djQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM0g1LjEzYTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVBOC44LDguOCwwLDAsMSwxOCw2LjMxYTguNjEsOC42MSwwLDAs''@;'; put 'put ''MSw0Ljc2LDEuNDRBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41OCwxMC41OCwwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUu''@;'; put 'put ''ODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4z''@;'; put 'put ''NywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAs''@;'; put 'put ''MCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xNS4zMiwzMmEyLjY1LDIuNjUsMCwwLDAsNS4yNSwwWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAt''@;'; put 'put ''LjE2LTEuNzlBNy41LDcuNSwwLDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTcsMTAuNTcsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0''@;'; put 'put ''LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+''@;'; put 'put ''JyksbC5DbHJTaGFwZUltYWdlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAs''@;'; put 'put ''MCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42''@;'; put 'put ''LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIy''@;'; put 'put ''LjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMw''@;'; put 'put ''SDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCww''@;'; put 'put ''LDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02''@;'; put 'put ''LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1''@;'; put 'put ''LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGwuQ2xyU2hhcGVDbG91ZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDMzSDEwLjYyQzUuNjcsMzMsMSwyOC4xOSwxLDIzLjFh''@;'; put 'put ''MTAsMTAsMCwwLDEsOC05Ljc1LDEwLjE5LDEwLjE5LDAsMCwxLDIwLjMzLDEuMDZBMTAuMDcsMTAuMDcsMCwwLDEsMjksMTYuNjZhOC4yOSw4LjI5LDAsMCwxLDYsOEMzNSwyOS4xLDMxLjMzLDMzLDI3LjE0LDMzWk0xOS4wOSw2LjIzYTguMjQsOC4yNCwwLDAsMC04LjE5LDhsMCwuODctLjg2''@;'; put 'put ''LjFBNy45NCw3Ljk0LDAsMCwwLDMsMjMuMWMwLDQsMy43Nyw3LjksNy42Miw3LjlIMjcuMTRDMzAuMjEsMzEsMzMsMjgsMzMsMjQuNjVhNi4zMSw2LjMxLDAsMCwwLTUuMzctNi4yNmwtMS4xOC0uMTguMzktMS4xM0E4LjE4LDguMTgsMCwwLDAsMTkuMDksNi4yM1oiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NSw3LjQ1LDAsMCwxLTIuMS0uNTQsOCw4LDAsMCwxLS4zLDQu''@;'; put 'put ''MTZsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N2E4LjI0LDguMjQsMCwwLDEsOC4xOS04''@;'; put 'put ''QTguMTMsOC4xMywwLDAsMSwyMi41OCw3YTcuNTMsNy41MywwLDAsMS0uMDgtMSw3LjUxLDcuNTEsMCwwLDEsLjA5LTEuMTJBMTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42''@;'; put 'put ''Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE0LDEwLjE0LDAsMCwwLC4yLTEuM2gtMmE4LjI4LDguMjgsMCwwLDEtLjM3''@;'; put 'put ''LDEuNzJsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N0E4LjE2LDguMTYsMCwwLDEsMjEs''@;'; put 'put ''Ni40N2wxLTEuOEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwx''@;'; put 'put ''MCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDQsNy40NCwwLDAsMS02LjYtOC41OEExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAs''@;'; put 'put ''MSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE1LDEwLjE1LDAsMCwwLC4yLTEuMjZoLTdB''@;'; put 'put ''My42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy01LjIxQTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksbC5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbD0oMCxhLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksbC5DbHJTaGFwZUVsbGlwc2lzVmVy''@;'; put 'put ''dGljYWw9KDAsYS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIu''@;'; put 'put ''OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVGaWx0ZXJHcmlkPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUs''@;'; put 'put ''MjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEsMXYxYTEuNDYsMS40''@;'; put 'put ''NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAs''@;'; put 'put ''LjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksbC5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEs''@;'; put 'put ''MSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiww''@;'; put 'put ''LDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAs''@;'; put 'put ''MzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2''@;'; put 'put ''Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLGwuQ2xyU2hhcGVWbUJ1Zz0oMCxhLmNsckljb25TVkcpKCc8cmVjdCB3aWR0aD0i''@;'; put 'put ''MzYiIGhlaWdodD0iMzYiIHJ4PSIzIiBmaWxsPSIjZmZmZmZmIiBvcGFjaXR5PSIwLjE1IiBzdHlsZT0iaXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0aCBkPSJNMy43OSwxNC44M2ExLjA5LDEuMDksMCwwLDAtMS40Ny0uNTYsMS4wOSwxLjA5LDAsMCwwLS41NCwxLjQ5bDIuNDcsNS40Yy4zOS44''@;'; put 'put ''NS44LDEuMjksMS41NywxLjI5UzcsMjIsNy4zOSwyMS4xNmwyLjE3LTQuNzdhLjMzLjMzLDAsMCwxLC4zMS0uMi4zNS4zNSwwLDAsMSwuMzUuMzV2NC42MWExLjE1LDEuMTUsMCwwLDAsMS4xNCwxLjMsMS4xNywxLjE3LDAsMCwwLDEuMTctMS4zVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIy''@;'; put 'put ''LTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE3LDEuMTcsMCwxLDAsMi4zMiwwVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE2LDEuMTYsMCwxLDAsMi4zMSwwVjE2Ljg2YTIuNjksMi42OSwwLDAsMC0y''@;'; put 'put ''Ljc4LTIuNjksMy41NywzLjU3LDAsMCwwLTIuNDcsMS4wNSwyLjc1LDIuNzUsMCwwLDAtMi4zOC0xLjA1QTMuOTMsMy45MywwLDAsMCwxMiwxNS4yMmEyLjgyLDIuODIsMCwwLDAtMi4wOC0xLjA1QTIuNTUsMi41NSwwLDAsMCw3LjQsMTUuODlMNS44MiwxOS42M2wtMi00LjgiIGZpbGw9IiNm''@;'; put 'put ''ZmZmZmYiLz48cGF0aCBkPSJNMzMsMTQuMThBMS4xNCwxLjE0LDAsMCwwLDMxLjksMTVsLTEuMTksMy43M0wyOS41LDE1LjA1YTEuMTgsMS4xOCwwLDAsMC0xLjE1LS44N2gtLjFhMS4yLDEuMiwwLDAsMC0xLjE1Ljg3bC0xLjE5LDMuNzEtMS4xOC0zLjcxYTEuMTUsMS4xNSwwLDAsMC0xLjEx''@;'; put 'put ''LS44NywxLjA4LDEuMDgsMCwwLDAtMS4xMiwxLjA3LDEuNjgsMS42OCwwLDAsMCwuMS41NGwyLDUuN2ExLjI3LDEuMjcsMCwwLDAsMS4yNywxLDEuMjQsMS4yNCwwLDAsMCwxLjItLjkzbDEuMi0zLjY0LDEuMiwzLjY0YTEuMjUsMS4yNSwwLDAsMCwxLjI2LjkzQTEuMjcsMS4yNywwLDAsMCwz''@;'; put 'put ''MiwyMS41TDM0LDE1LjczYTEuNzcsMS43NywwLDAsMCwuMDgtLjQ4QTEuMDcsMS4wNywwLDAsMCwzMywxNC4xOFoiIGZpbGw9IiNmZmZmZmYiLz4nKSxsLkNsclNoYXBlU2VhcmNoPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNMTYuMzMsNS4wNUExMC45NSwxMC45NSwwLDEsMSw1LjM5LDE2LDExLDExLDAsMCwxLDE2LjMzLDUuMDVtMC0yLjA1YTEzLDEzLDAsMSwwLDEzLDEzLDEzLDEzLDAsMCwwLTEzLTEzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiBkPSJNMzUsMzMuMjlsLTcuMzctNy40Mi0xLjQyLDEuNDEsNy4zNyw3LjQyQTEsMSwwLDEsMCwzNSwzMy4yOVoiLz4nKSxsLkNsclNoYXBlVmlld0NvbHVtbnM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik0zMSw1SDVBMiwyLDAsMCwwLDMsN1YyOWEyLDIsMCwwLDAsMiwySDMxYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzEsNVpNMTMsMjlINVY3aDhabTEwLDBIMTVWN2g4WiIvPicpLGwuQ2xyU2hhcGVBbmdsZURvdWJsZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LDE5LjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDguODMsNy43MSwxOS4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDYsMjkuNzEsMTcuNzFBMSwxLDAsMCwxLDI5LDE5LjQxWiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksMzAuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsMTkuODMsNy43MSwzMC4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDE3LDI5LjcxLDI4LjcxQTEsMSwwLDAsMSwyOSwzMC40MVoiLz4n''@;'; put 'put ''KSxsLkNsclNoYXBlQ2FsZW5kYXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCww''@;'; put 'put ''LDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhl''@;'; put 'put ''aWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxNCIg''@;'; put 'put ''eT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xMiIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMTUiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiIHg9IjEzIiB5PSI2IiB3''@;'; put 'put ''aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEu''@;'; put 'put ''NzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiB4PSI4IiB5PSIxOSIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05''@;'; put 'put ''LS1iYWRnZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIgeD0iMjYi''@;'; put 'put ''IHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTQtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCww''@;'; put 'put ''LDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zLS1hbGVydGVkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVy''@;'; put 'put ''dGVkIiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWFsZXJ0ZWQiIHg9IjI2''@;'; put 'put ''IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAs''@;'; put 'put ''MCwwLDEwLDEwWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMSwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0''@;'; put 'put ''LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0''@;'; put 'put ''aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcu''@;'; put 'put ''NDUsMCwwLDEsMzAsMTMuNVpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAt''@;'; put 'put ''NUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEu''@;'; put 'put ''NzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptNiw1SDI2''@;'; put 'put ''VjI0aDJabTAtNUgyNlYxOWgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksbC5DbHJTaGFwZUV2ZW50PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMTcsMjUuODYsMTAuODEsMjAuNWExLDEs''@;'; put 'put ''MCwwLDEsMS40MS0xLjQxTDE2LjE3LDIzbDguNjQtOC42NGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgs''@;'; put 'put ''MS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYz''@;'; put 'put ''YTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5''@;'; put 'put ''VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLC4yMy0uNDFIMjMuOEwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0zIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwwLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUEx''@;'; put 'put ''Ljc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMjUuOTQsMTYuNThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5''@;'; put 'put ''QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCww''@;'; put 'put ''LDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45Mywx''@;'; put 'put ''LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxsLkNsclNoYXBlRXllPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwx''@;'; put 'put ''OGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOSwxMS4x''@;'; put 'put ''N0E2Ljg2LDYuODYsMCwxLDAsMjUsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjA5LDExLjE3Wm0wLDExLjcyQTQuODYsNC44NiwwLDEsMSwyMywxOCw0Ljg3LDQuODcsMCwwLDEsMTguMDksMjIuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYu''@;'; put 'put ''NDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4''@;'; put 'put ''PSIxOC4wOSIgY3k9IjE4LjAzIiByPSI2Ljg2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksbC5DbHJTaGFwZUV5ZUhpZGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjE5LDIwLjRBNi43OCw2Ljc4LDAsMCwwLDI1LjYyLDE4YTYuODYsNi44Niww''@;'; put 'put ''LDAsMC02Ljg2LTYuODYsNi43OSw2Ljc5LDAsMCwwLTIuMzcuNDNMMTgsMTMuMjNhNC43OCw0Ljc4LDAsMCwxLC43NC0uMDZBNC44Nyw0Ljg3LDAsMCwxLDIzLjYyLDE4YTQuNzksNC43OSwwLDAsMS0uMDYuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43''@;'; put 'put ''NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAt''@;'; put 'put ''Ni42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTkuNzUsOS43NSw2LjY1LDYuNjVhNC44MSw0LjgxLDAsMCwxLTIuNS43MkE0Ljg3LDQuODcsMCwwLDEsMTMuOSwx''@;'; put 'put ''OCw0LjgxLDQuODEsMCwwLDEsMTQuNjIsMTUuNTNabS0xLjQ1LTEuNDVhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjM3LDExLjE3QTYuNzksNi43OSwwLDAsMCwxNiwxMS42bDguOCw4LjhBNi43OCw2Ljc4LDAsMCwwLDI1LjIzLDE4LDYuODYsNi44NiwwLDAsMCwxOC4zNywxMS4xN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1''@;'; put 'put ''LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcs''@;'; put 'put ''NS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTguMyw4LjNhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41''@;'; put 'put ''NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksbC5DbHJTaGFwZVN0ZXBGb3J3YXJkMj0oMCxh''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNNy4wOCw2LjUyYTEuNjgsMS42OCwwLDAsMCwwLDIuNEwxNi41MSwxOCw3LjEyLDI3LjA4YTEuNywxLjcsMCwwLDAsMi4zNiwyLjQ0aDBMMjEuNCwxOCw5LjQ4LDYuNDdBMS42OSwxLjY5LDAsMCwwLDcuMDgsNi41MloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEuNywxLjcsMCwwLDAsMjYuNDksNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PicpLGwuQ2xyU2hhcGVBcnJvdz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1LDE3TDE3LDkuODFWMjguOTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLGwuQ29yZVNoYXBlcz17InVua25vd24tc3RhdHVzIjpsLkNsclNoYXBlVW5rbm93blN0YXR1cyxob21lOmwuQ2xyU2hhcGVIb21lLGNvZzpsLkNsclNoYXBlQ29nLGNoZWNrOmwuQ2xyU2hhcGVDaGVjayx0aW1lczpsLkNs''@;'; put 'put ''clNoYXBlVGltZXMsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIjpsLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZSwiZXhjbGFtYXRpb24tY2lyY2xlIjpsLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGUsImNoZWNrLWNpcmNsZSI6bC5DbHJTaGFwZUNoZWNrQ2lyY2xlLCJpbmZvLWNpcmNsZSI6''@;'; put 'put ''bC5DbHJTaGFwZUluZm9DaXJjbGUsImluZm8tc3RhbmRhcmQiOmwuQ2xyU2hhcGVJbmZvU3RhbmRhcmQsInN1Y2Nlc3Mtc3RhbmRhcmQiOmwuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQsImVycm9yLXN0YW5kYXJkIjpsLkNsclNoYXBlRXJyb3JTdGFuZGFyZCwid2FybmluZy1zdGFuZGFyZCI6''@;'; put 'put ''bC5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZCwiaGVscC1pbmZvIjpsLkNsclNoYXBlSGVscEluZm8sYmFyczpsLkNsclNoYXBlQmFycyx1c2VyOmwuQ2xyU2hhcGVVc2VyLGFuZ2xlOmwuQ2xyU2hhcGVBbmdsZSxmb2xkZXI6bC5DbHJTaGFwZUZvbGRlciwiZm9sZGVyLW9wZW4iOmwuQ2xyU2hh''@;'; put 'put ''cGVGb2xkZXJPcGVuLGJlbGw6bC5DbHJTaGFwZUJlbGwsaW1hZ2U6bC5DbHJTaGFwZUltYWdlLGNsb3VkOmwuQ2xyU2hhcGVDbG91ZCwiZWxsaXBzaXMtaG9yaXpvbnRhbCI6bC5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbCwiZWxsaXBzaXMtdmVydGljYWwiOmwuQ2xyU2hhcGVFbGxpcHNp''@;'; put 'put ''c1ZlcnRpY2FsLCJmaWx0ZXItZ3JpZCI6bC5DbHJTaGFwZUZpbHRlckdyaWQsImZpbHRlci1ncmlkLWNpcmNsZSI6bC5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGUsInZtLWJ1ZyI6bC5DbHJTaGFwZVZtQnVnLHNlYXJjaDpsLkNsclNoYXBlU2VhcmNoLCJ2aWV3LWNvbHVtbnMiOmwuQ2xyU2hh''@;'; put 'put ''cGVWaWV3Q29sdW1ucywiYW5nbGUtZG91YmxlIjpsLkNsclNoYXBlQW5nbGVEb3VibGUsY2FsZW5kYXI6bC5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50OmwuQ2xyU2hhcGVFdmVudCxleWU6bC5DbHJTaGFwZUV5ZSwiZXllLWhpZGUiOmwuQ2xyU2hhcGVFeWVIaWRlLCJzdGVwLWZvcndhcmQtMiI6''@;'; put 'put ''bC5DbHJTaGFwZVN0ZXBGb3J3YXJkMixhcnJvdzpsLkNsclNoYXBlQXJyb3d9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkNvcmVTaGFwZXMsImhvdXNlIiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuQ29yZVNoYXBlcy5ob21lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNoYXBl''@;'; put 'put ''cywic2V0dGluZ3MiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db3JlU2hhcGVzLmNvZykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkNvcmVTaGFwZXMsInN1Y2Nlc3MiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db3JlU2hhcGVzLmNoZWNrKSksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGwuQ29yZVNoYXBlcywiY2xvc2UiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db3JlU2hhcGVzLnRpbWVzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNoYXBlcywid2FybmluZyIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLXRyaWFu''@;'; put 'put ''Z2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Db3JlU2hhcGVzLCJlcnJvciIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNoYXBlcywiaW5mbyIsKDAscC5kZXNjcmlw''@;'; put 'put ''dG9yQ29uZmlnKShsLkNvcmVTaGFwZXNbImluZm8tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Db3JlU2hhcGVzLCJtZW51IiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuQ29yZVNoYXBlcy5iYXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNoYXBlcywiYXZh''@;'; put 'put ''dGFyIiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuQ29yZVNoYXBlcy51c2VyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNoYXBlcywiY2FyZXQiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db3JlU2hhcGVzLmFuZ2xlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNo''@;'; put 'put ''YXBlcywiZGlyZWN0b3J5IiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuQ29yZVNoYXBlcy5mb2xkZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Db3JlU2hhcGVzLCJub3RpZmljYXRpb24iLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db3JlU2hhcGVzLmJlbGwpKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkobC5Db3JlU2hhcGVzLCJjb2xsYXBzZSIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkNvcmVTaGFwZXNbImFuZ2xlLWRvdWJsZSJdKSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''LwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihNLGwsdil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLkNsclNoYXBlTG9nb3V0PWwuQ2xyU2hhcGVMb2dpbj1sLkNsclNoYXBlSGVscD1sLkNsclNo''@;'; put 'put ''YXBlQ29weT1sLkNsclNoYXBlQ2hpbGRBcnJvdz1sLkNsclNoYXBlQ2lyY2xlQXJyb3c9bC5DbHJTaGFwZUFsYXJtQ2xvY2s9bC5DbHJTaGFwZUNsb2NrPWwuQ2xyU2hhcGVIaXN0b3J5PWwuQ2xyU2hhcGVUYWdzPWwuQ2xyU2hhcGVUYWc9bC5DbHJTaGFwZVRyYXNoPWwuQ2xyU2hhcGVUaW1l''@;'; put 'put ''c0NpcmNsZT1sLkNsclNoYXBlQmFuPWwuQ2xyU2hhcGVQbHVzQ2lyY2xlPWwuQ2xyU2hhcGVNaW51c0NpcmNsZT1sLkNsclNoYXBlTWludXM9bC5DbHJTaGFwZVBsdXM9bC5DbHJTaGFwZUZpbGU9bC5DbHJTaGFwZVBpbj1sLkNsclNoYXBlRmlsdGVyPWwuQ2xyU2hhcGVQb3BPdXQ9bC5DbHJT''@;'; put 'put ''aGFwZVVzZXJzPWwuQ2xyU2hhcGVVbmxvY2s9bC5DbHJTaGFwZUxvY2s9bC5DbHJTaGFwZVVwbG9hZD1sLkNsclNoYXBlRG93bmxvYWQ9bC5DbHJTaGFwZUxpZ2h0YnVsYj1sLkNsclNoYXBlVmlld0NhcmRzPWwuQ2xyU2hhcGVWaWV3TGlzdD1sLkNsclNoYXBlU3luYz1sLkNsclNoYXBlUmVm''@;'; put 'put ''cmVzaD1sLkNsclNoYXBlTm90ZT1sLkNsclNoYXBlUGVuY2lsPWwuQ2xyU2hhcGVUaGVybW9tZXRlcj1sLkNsclNoYXBlQnVnPWwuQ2xyU2hhcGVTY2lzc29ycz1sLkNsclNoYXBlQXN0ZXJpc2s9bC5DbHJTaGFwZUJvb2s9bC5DbHJTaGFwZU9iamVjdHM9bC5DbHJTaGFwZVJlc2l6ZT1sLkNs''@;'; put 'put ''clNoYXBlQ3Vyc29ySGFuZENsaWNrPWwuQ2xyU2hhcGVDdXJzb3JIYW5kPWwuQ2xyU2hhcGVDdXJzb3JBcnJvdz1sLkNsclNoYXBlR3JpZFZpZXc9bC5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uPWwuQ2xyU2hhcGVOZXc9bC5DbHJTaGFwZUFsYXJtT2ZmPWwuQ2xyU2hhcGVQaW5ib2FyZD1s''@;'; put 'put ''LkNsclNoYXBlQWRkVGV4dD12b2lkIDAsbC5DbHJTaGFwZUNsb25lPWwuQ2xyU2hhcGVDdXJzb3JNb3ZlPWwuQ2xyU2hhcGVXYW5kPWwuQ2xyU2hhcGVTdW49bC5DbHJTaGFwZU1vb249bC5DbHJTaGFwZUZpbHRlcjI9bC5DbHJTaGFwZURyYWdIYW5kbGU9bC5DbHJTaGFwZUNvcHlUb0NsaXBi''@;'; put 'put ''b2FyZD1sLkNsclNoYXBlQ29sb3JQaWNrZXI9bC5DbHJTaGFwZUJyaWVmY2FzZT1sLkNsclNoYXBlRXhwYW5kQ2FyZD1sLkNsclNoYXBlQ29sbGFwc2VDYXJkPWwuQ2xyU2hhcGVTb3J0Qnk9bC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyPWwuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5MT1sLkNsclNo''@;'; put 'put ''YXBlU2hyaW5rPWwuQ2xyU2hhcGVQYXBlcmNsaXA9bC5DbHJTaGFwZUZpbGVHcm91cD1sLkNsclNoYXBlUmVwZWF0PWwuQ2xyU2hhcGVJZEJhZGdlPWwuQ2xyU2hhcGVCYWxhbmNlPWwuQ2xyU2hhcGVPcmdhbml6YXRpb249bC5DbHJTaGFwZU5vQWNjZXNzPWwuQ2xyU2hhcGVIb3VyZ2xhc3M9''@;'; put 'put ''bC5DbHJTaGFwZUZsYW1lPWwuQ2xyU2hhcGVUYXJnZXQ9bC5DbHJTaGFwZUJ1bGxzZXllPWwuQ2xyU2hhcGVXcmVuY2g9bC5DbHJTaGFwZUJvbHQ9bC5DbHJTaGFwZUxpYnJhcnk9bC5DbHJTaGFwZUtleT1sLkNsclNoYXBlWm9vbU91dD1sLkNsclNoYXBlWm9vbUluPWwuQ2xyU2hhcGVXaW5k''@;'; put 'put ''b3dSZXN0b3JlPWwuQ2xyU2hhcGVXaW5kb3dNaW49bC5DbHJTaGFwZVdpbmRvd01heD1sLkNsclNoYXBlV2luZG93Q2xvc2U9bC5DbHJTaGFwZVRvb2xzPWwuQ2xyU2hhcGVTd2l0Y2g9bC5DbHJTaGFwZVR3b1dheUFycm93cz1sLkNsclNoYXBlRmlsZVNldHRpbmdzPWwuQ2xyU2hhcGVTY3Jv''@;'; put 'put ''bGw9bC5DbHJTaGFwZVVuZG89bC5DbHJTaGFwZVJlZG89bC5DbHJTaGFwZUxpc3Q9bC5DbHJTaGFwZUZpcmV3YWxsPWwuQ2xyU2hhcGVDbGlwYm9hcmQ9bC5DbHJTaGFwZVNsaWRlcj1sLkNsclNoYXBlV29ybGQ9bC5DbHJTaGFwZVByaW50ZXI9dm9pZCAwLGwuRXNzZW50aWFsU2hhcGVzPWwu''@;'; put 'put ''Q2xyU2hhcGVDb2xvclBhbGV0dGU9bC5DbHJTaGFwZUZpcnN0QWlkPWwuQ2xyU2hhcGVCZXRhPWwuQ2xyU2hhcGVEb3RDaXJjbGU9bC5DbHJTaGFwZUNpcmNsZT1sLkNsclNoYXBlQ3Jvc3NoYWlycz1sLkNsclNoYXBlVm9sdW1lPWwuQ2xyU2hhcGVUYWJsZT1sLkNsclNoYXBlU25vd2ZsYWtl''@;'; put 'put ''PWwuQ2xyU2hhcGVGdWVsPWwuQ2xyU2hhcGVGb3JtPWwuQ2xyU2hhcGVGaXNoPWwuQ2xyU2hhcGVUcmVlPWwuQ2xyU2hhcGVSZWN5Y2xlPWwuQ2xyU2hhcGVGaWx0ZXJPZmY9bC5DbHJTaGFwZUZpbGVaaXA9bC5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPWwuQ2xyU2hhcGVDdXJzb3JIYW5kR3Jh''@;'; put 'put ''Yj1sLkNsclNoYXBlVHJlZVZpZXc9bC5DbHJTaGFwZVBvcnRyYWl0PWwuQ2xyU2hhcGVQYXN0ZT1sLkNsclNoYXBlTGFuZHNjYXBlPWwuQ2xyU2hhcGVFcmFzZXI9bC5DbHJTaGFwZURyYWdIYW5kbGVDb3JuZXI9bC5DbHJTaGFwZURldGFpbHM9dm9pZCAwO3ZhciBwPXYoCi8qISAuLi91dGls''@;'; put 'put ''cy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxhPXYoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt2''@;'; put 'put ''PXYoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKSxsLkNsclNoYXBlQWRkVGV4dD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDIx''@;'; put 'put ''SDEzYTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTIsMTZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDEzQTEsMSwwLDAsMCwxMiwxNloiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjcsMjdIMTNhMSwxLDAsMCwwLDAsMkgyN2ExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQiIGQ9Ik0xNS44OSw5YTEsMSwwLDAsMC0xLTFIMTBWMy4yMWExLDEsMCwwLDAtMiwwVjhIMi44OWExLDEsMCwwLDAsMCwySDh2NS4yMWExLDEsMCwwLDAsMiwwVjEwaDQuODlBMSwxLDAsMCwwLDE1Ljg5LDlaIi8+JyksbC5DbHJTaGFwZVBpbmJvYXJkPSgwLGEuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMy41Nyw5LjMzbC03LTdhMSwxLDAsMCwwLTEuNDEsMS40MWw3LDdhMSwxLDAsMSwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJN''@;'; put 'put ''MjIuMSwxMS4xOWwuNy41TDI2LjQ2LDgsMjUsNi41NiwyMi41MSw5LjEzYy0yLS44Ny00LjM1LjE0LTUuOTIsMS42OGwtLjcyLjcxLDMuNTQsMy41NC0zLjY3LDMuNjcsMS40MSwxLjQxLDMuNjctMy42N0wyNC4zNywyMGwuNzEtLjcyYzEuNTQtMS41NywyLjU1LTMuOTIsMS42OC01LjkzbDIu''@;'; put 'put ''NTQtMi41N0wyNy44OCw5LjM4LDI0LjIxLDEzLjFsLjQ5LjY5Yy43NiwxLC4yNSwyLjM3LS40MSwzLjMzTDE4Ljc3LDExLjZDMTkuODQsMTAuODYsMjEuMTUsMTAuNSwyMi4xLDExLjE5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTMwLDMwLDYsMzAsNiw2SDIyVjRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEgzMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy41Nyw5LjMzbC03LTdh''@;'; put 'put ''MSwxLDAsMCwwLTEuNDEsMS40MWwxLjM4LDEuMzgtNCw0Yy0yLS44Ny00LjM1LjE0LTUuOTIsMS42OGwtLjcyLjcxLDMuNTQsMy41NC0zLjY3LDMuNjcsMS40MSwxLjQxLDMuNjctMy42N0wyNC4zNywyMGwuNzEtLjcyYzEuNTQtMS41NywyLjU1LTMuOTEsMS42OC01LjkybDQtNCwxLjM4LDEu''@;'; put 'put ''MzhhMSwxLDAsMSwwLDEuNDEtMS40MVoiLz4nKSxsLkNsclNoYXBlQWxhcm1PZmY9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40NywzLjg0YTUuNzgsNS43OCwwLDAsMC03LjM3LS42MywxNi4wOCwxNi4w''@;'; put 'put ''OCwwLDAsMSw4LjIsNy42NUE1LjczLDUuNzMsMCwwLDAsMzEuNDcsMy44NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuMzMsMjEuNTRhLjkuOSwwLDAsMC0uNDEtMS4ybC0zLjItMS41NkwyNC44OSwyMkEu''@;'; put 'put ''ODkuODksMCwwLDAsMjUuMzMsMjEuNTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDguNmEuOS45LDAsMCwwLS45Ljl2NC42bDEuOCwxLjgxVjkuNUEuOS45LDAsMCwwLDE4LDguNloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuODEtLjgxTDguMyw1LjMyQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTE4LDRhMTMuOTEsMTMuOTEsMCwwLDAtOC4zLDIuNzVsMS40MiwxLjQzQTEyLDEyLDAsMCwxLDI3LjgyLDI0LjlsMS40MiwxLjQzQTE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNiIgZD0iTTEuNTYsNC4yMSwyLjczLDUuMzhhNS43LDUuNywwLDAsMCwuNjcsNi4xQTE1Ljc4LDE1Ljc4LDAsMCwxLDUuNDYsOC4xMkw2Ljg4LDkuNTVBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIu''@;'; put 'put ''NjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44LDBsNC4xNCw0LjE1TDMyLDMxLjksMywyLjhaTTI1LDI3LjcyQTExLjg5LDExLjg5LDAsMCwxLDE4LDMwLDEyLDEyLDAsMCwxLDYsMThhMTEuODksMTEuODksMCwwLDEsMi4yOS03WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTExLjQyLDMuNDNhNS44LDUuOCwwLDAsMC01Ljc3LS44Mkw4LjMzLDUuM0ExNiwxNiwwLDAsMSwxMS40MiwzLjQzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI0LjkyLDIx''@;'; put 'put ''Ljk0bDQuMzQsNC4zNkExNCwxNCwwLDAsMCw5Ljc1LDYuNzNMMTcsMTRWOS42OWExLDEsMCwwLDEsMiwwVjE2bDIuMzMsMi4zNEwyNSwyMC4xYTEsMSwwLDAsMSwuNDcsMS4zM0ExLDEsMCwwLDEsMjQuOTIsMjEuOTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC00IiBkPSJNMS42MSw0LjIxLDIuNzMsNS4zNGE1LjczLDUuNzMsMCwwLDAsLjY3LDYuMTVBMTUuODgsMTUuODgsMCwwLDEsNS40OCw4LjFMNi45MSw5LjUyQTEzLjk0LDEzLjk0LDAsMCwwLDguMTEsMjcuODhMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwy''@;'; put 'put ''LjY2LTIuNjZhMTMuODksMTMuODksMCwwLDAsMTYuODMsMGw0LjE2LDQuMTdMMzIsMzEuOSwzLDIuOFoiLz4nKSxsLkNsclNoYXBlTmV3PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuNTksMjNsLTQuMDgt''@;'; put 'put ''NSw0LTQuOWExLjgyLDEuODIsMCwwLDAsLjIzLTEuOTRBMS45MywxLjkzLDAsMCwwLDMyLjk0LDEwaC0zMUExLjkxLDEuOTEsMCwwLDAsMCwxMS44OFYyNC4xM0ExLjkxLDEuOTEsMCwwLDAsMS45NCwyNkgzMy4wNWExLjkzLDEuOTMsMCwwLDAsMS43Ny0xLjA5QTEuODIsMS44MiwwLDAsMCwz''@;'; put 'put ''NC41OSwyM1pNMiwyNFYxMkgzMi43OGwtNC44NCw1LjkzTDMyLjg1LDI0WiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBwb2ludHM9IjkuMzkgMTkuMzUgNi4xMyAxNSA1IDE1IDUgMjEuMTggNi4xMyAyMS4xOCA2''@;'; put 'put ''LjEzIDE2Ljg0IDkuMzkgMjEuMTggMTAuNTEgMjEuMTggMTAuNTEgMTUgOS4zOSAxNSA5LjM5IDE5LjM1Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHBvaW50cz0iMTIuMTggMjEuMTggMTYuODQgMjEuMTggMTYu''@;'; put 'put ''ODQgMjAuMTYgMTMuMzEgMjAuMTYgMTMuMzEgMTguNTUgMTYuNSAxOC41NSAxNi41IDE3LjUyIDEzLjMxIDE3LjUyIDEzLjMxIDE2LjAzIDE2Ljg0IDE2LjAzIDE2Ljg0IDE1IDEyLjE4IDE1IDEyLjE4IDIxLjE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHBvaW50cz0iMjQuNTIgMTkuNDMgMjMuMDYgMTUgMjEuODQgMTUgMjAuMzcgMTkuNDMgMTkuMDUgMTUgMTcuODIgMTUgMTkuNzggMjEuMTggMjAuODkgMjEuMTggMjIuNDUgMTYuNTkgMjQgMjEuMTggMjUuMTMgMjEuMTggMjcuMDggMTUgMjUuODUg''@;'; put 'put ''MTUgMjQuNTIgMTkuNDMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC4xMSwyNC40OWwtMy45Mi02LjYyLDMuODgtNi4zNUExLDEsMCwwLDAsMzMuMjIsMTBIMmEyLDIsMCwwLDAtMiwyVjI0YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzMuMjVBMSwxLDAsMCwwLDM0LjExLDI0LjQ5Wm0tMjMuNi0zLjMxSDkuMzlMNi4xMywxNi44NHY0LjM1SDVWMTVINi4xM2wzLjI3LDQuMzVWMTVoMS4xMlpNMTYuODQsMTZIMTMuMzF2MS40OWgzLjJ2MWgtMy4ydjEuNjFoMy41M3YxSDEyLjE4VjE1aDQuNjVabTguMjksNS4xNkgyNGwtMS41''@;'; put 'put ''NS00LjU5TDIwLjksMjEuMThIMTkuNzhsLTItNi4xOEgxOWwxLjMyLDQuNDNMMjEuODQsMTVoMS4yMmwxLjQ2LDQuNDNMMjUuODUsMTVoMS4yM1oiLz4nKSxsLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIu''@;'; put 'put ''NVpNMjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42''@;'; put 'put ''MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuNjNhMSwxLDAsMCwwLDEtMVY4LjQ4YTEsMSwwLDEsMC0yLDBWMTkuNjFBMSwxLDAsMCwwLDE4LDIwLjYzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE4IiBjeT0iMjQuMDQiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcu''@;'; put 'put ''MTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMTYuOTMsOS4xM2ExLjQxLDEuNDEsMCwxLDEsMi44MSwwVjE4LjlhMS40MSwxLjQxLDAs''@;'; put 'put ''MSwxLTIuODEsMFptMS40MSwxNy4zNWExLjg3LDEuODcsMCwxLDEsMS44Ny0xLjg3QTEuODcsMS44NywwLDAsMSwxOC4zNCwyNi40N1oiLz4nKSxsLkNsclNoYXBlR3JpZFZpZXc9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0xNCw0SDZBMiwyLDAsMCwwLDQsNnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDE0LDRaTTYsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDRI''@;'; put 'put ''MjJhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTIyLDE0VjZoOHY4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNCwyMEg2YTIsMiwwLDAs''@;'; put 'put ''MC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMTQsMjBaTTYsMzBWMjJoOHY4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMCwyMEgyMmEyLDIsMCwwLDAtMiwydjhh''@;'; put 'put ''MiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWMjJBMiwyLDAsMCwwLDMwLDIwWk0yMiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSI0IiB5PSI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIy''@;'; put 'put ''IiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjAiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zIiB4PSI0IiB5PSIyMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHg9IjIwIiB5PSIyMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0i''@;'; put 'put ''MiIgcnk9IjIiLz4nKSxsLkNsclNoYXBlQ3Vyc29yQXJyb3c9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNC41OCwzMi4zMWExLDEsMCwwLDEtLjk0LS42NUw0LDUuNjVBMSwxLDAsMCwxLDUuMjUsNC4zN2wy''@;'; put 'put ''Niw5LjY4YTEsMSwwLDAsMS0uMDUsMS44OWwtOC4zNiwyLjU3LDguMyw4LjNhMSwxLDAsMCwxLDAsMS40MWwtMy4yNiwzLjI2YTEsMSwwLDAsMS0uNzEuMjloMGExLDEsMCwwLDEtLjcxLS4yOWwtOC4zMy04LjMzLTIuNiw4LjQ1YTEsMSwwLDAsMS0uOTMuNzFabTMuMDktMTJhMSwxLDAsMCwx''@;'; put 'put ''LC43MS4yOWw4Ljc5LDguNzlMMjksMjcuNTFsLTguNzYtOC43NmExLDEsMCwwLDEsLjQxLTEuNjZsNy4xMy0yLjJMNi42LDdsNy44OSwyMS4yTDE2LjcxLDIxYTEsMSwwLDAsMSwuNzEtLjY4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTI5LDEyLjM2LDMuODgsM0ExLDEsMCwwLDAsMi41OSw0LjI4TDEyLDI5LjQ0YTEsMSwwLDAsMCwxLjg5LS4wNWwyLjY5LTguNzUsOS4xMiw4LjlhMSwxLDAsMCwwLDEuNDEsMGwyLjM1LTIuMzVhMSwxLDAsMCwwLDAtMS40MWwtOS4wOS04Ljg2TDI5LDE0LjI1QTEsMSwwLDAs''@;'; put 'put ''MCwyOSwxMi4zNloiLz4nKSxsLkNsclNoYXBlQ3Vyc29ySGFuZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjc0LDE1LjE5YTEzLjY2LDEzLjY2LDAsMCwwLTYuODctMy44M0EyNiwyNiwwLDAsMCwxOCwx''@;'; put 'put ''MC41OFY1LjI4QTMuNCwzLjQsMCwwLDAsMTQuNSwyLDMuNCwzLjQsMCwwLDAsMTEsNS4yOHYxMEw5LjQsMTMuN2EzLjc3LDMuNzcsMCwwLDAtNS4yOCwwQTMuNjcsMy42NywwLDAsMCwzLDE2LjMzYTMuNiwzLjYsMCwwLDAsMSwyLjU2bDQuNjYsNS41MmExMS41MywxMS41MywwLDAsMCwxLjQz''@;'; put 'put ''LDQsMTAuMTIsMTAuMTIsMCwwLDAsMiwyLjU0djEuOTJhMS4wNywxLjA3LDAsMCwwLDEsMS4wOEgyN2ExLjA3LDEuMDcsMCwwLDAsMS0xLjA4di0yLjdhMTIuODEsMTIuODEsMCwwLDAsMy04LjM2di02QTEsMSwwLDAsMCwzMC43NCwxNS4xOVpNMjksMjEuODZhMTAuNzIsMTAuNzIsMCwwLDEt''@;'; put 'put ''Mi42LDcuMjYsMS4xMSwxLjExLDAsMCwwLS40LjcyVjMySDE0LjE0VjMwLjUyYTEsMSwwLDAsMC0uNDQtLjgzLDcuMjYsNy4yNiwwLDAsMS0xLjgyLTIuMjMsOS4xNCw5LjE0LDAsMCwxLTEuMi0zLjUyLDEsMSwwLDAsMC0uMjMtLjU5TDUuNTMsMTcuNTNhMS43LDEuNywwLDAsMSwwLTIuNDIs''@;'; put 'put ''MS43NiwxLjc2LDAsMCwxLDIuNDcsMGwzLDN2My4xNGwyLTFWNS4yOEExLjQyLDEuNDIsMCwwLDEsMTQuNSw0LDEuNDIsMS40MiwwLDAsMSwxNiw1LjI4djExLjhsMiwuNDNWMTIuNTlhMjQuMjcsMjQuMjcsMCwwLDEsMi41MS4xOFYxOGwxLjYuMzVWMTNjLjQxLjA4LjgzLjE3LDEuMjYuMjhh''@;'; put 'put ''MTQuODgsMTQuODgsMCwwLDEsMS41My40OXY1LjE1bDEuNi4zNVYxNC41QTExLjA2LDExLjA2LDAsMCwxLDI5LDE2LjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LjY5LDE0LjMzdjQuODNsLTItLjQzVjEzLjI0''@;'; put 'put ''YTE2LjE5LDE2LjE5LDAsMCwwLTIuMzMtLjg0djUuODJsLTItLjQzVjEyYy0xLjEtLjE4LTIuMTgtLjMtMy4wOC0uMzZ2NS41MWwtMi0uNDNWMTEuNDhoMFY0LjM0YTIuNTMsMi41MywwLDAsMC0yLjYtMi40MywyLjUzLDIuNTMsMCwwLDAtMi42LDIuNDNWMTcuMjdoMHYyLjU5bC0yLDFWMTUu''@;'; put 'put ''Nkw3Ljc1LDEzLjIxYTIuODMsMi44MywwLDAsMC00LDAsMi45MywyLjkzLDAsMCwwLDAsNC4wOWw2LDcuMWExMC44MiwxMC44MiwwLDAsMCwxLjM5LDQuMjIsOC40Miw4LjQyLDAsMCwwLDIuMjEsMi43M3YyLjU2SDI3Ljc5VjMwLjYyYTEyLjU0LDEyLjU0LDAsMCwwLDMtOC41di02QTEwLDEw''@;'; put 'put ''LDAsMCwwLDI4LjY5LDE0LjMzWiIvPicpLGwuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC40LDE3LjZjLTEuOC0xLjktNC4yLTMuMi02LjctMy43Yy0xLjEtMC4z''@;'; put 'put ''LTIuMi0wLjUtMy4zLTAuNmMyLjgtMy4zLDIuMy04LjMtMS0xMS4xcy04LjMtMi4zLTExLjEsMXMtMi4zLDguMywxLDExLjFcbiAgICAgICAgICAgICAgICAgICAgYzAuNiwwLjUsMS4yLDAuOSwxLjgsMS4xdjIuMmwtMS42LTEuNWMtMS40LTEuNC0zLjctMS40LTUuMiwwYy0xLjQsMS40LTEu''@;'; put 'put ''NSwzLjYtMC4xLDVsNC42LDUuNGMwLjIsMS40LDAuNywyLjcsMS40LDMuOVxuICAgICAgICAgICAgICAgICAgICBjMC41LDAuOSwxLjIsMS44LDEuOSwyLjV2MS45YzAsMC42LDAuNCwxLDEsMWgxMy42YzAuNSwwLDEtMC41LDEtMXYtMi42YzEuOS0yLjMsMi45LTUuMiwyLjktOC4xdi01Ljhc''@;'; put 'put ''biAgICAgICAgICAgICAgICAgICAgQzMwLjcsMTcuOSwzMC42LDE3LjcsMzAuNCwxNy42eiBNOC40LDguMmMwLTMuMywyLjctNS45LDYtNS44YzMuMywwLDUuOSwyLjcsNS44LDZjMCwxLjgtMC44LDMuNC0yLjIsNC41VjcuOVxuICAgICAgICAgICAgICAgICAgICBjLTAuMS0xLjgtMS42LTMu''@;'; put 'put ''Mi0zLjQtMy4yYy0xLjgtMC4xLTMuNCwxLjQtMy40LDMuMnY1LjJDOS41LDEyLjEsOC41LDEwLjIsOC40LDguMkw4LjQsOC4yeiBNMjguNywyNGMwLjEsMi42LTAuOCw1LjEtMi41LDcuMVxuICAgICAgICAgICAgICAgICAgICBjLTAuMiwwLjItMC40LDAuNC0wLjQsMC43djIuMUgxNC4ydi0x''@;'; put 'put ''LjRjMC0wLjMtMC4yLTAuNi0wLjQtMC44Yy0wLjctMC42LTEuMy0xLjMtMS44LTIuMmMtMC42LTEtMS0yLjItMS4yLTMuNFxuICAgICAgICAgICAgICAgICAgICBjMC0wLjItMC4xLTAuNC0wLjItMC42bC00LjgtNS43Yy0wLjMtMC4zLTAuNS0wLjctMC41LTEuMmMwLTAuNCwwLjItMC45LDAu''@;'; put 'put ''NS0xLjJjMC43LTAuNiwxLjctMC42LDIuNCwwbDIuOSwyLjl2M2wxLjktMVY3LjlcbiAgICAgICAgICAgICAgICAgICAgYzAuMS0wLjcsMC43LTEuMywxLjUtMS4yYzAuNywwLDEuNCwwLjUsMS40LDEuMnYxMS41bDIsMC40di00LjZjMC4xLTAuMSwwLjItMC4xLDAuMy0wLjJjMC43LDAsMS40''@;'; put 'put ''LDAuMSwyLjEsMC4ydjUuMWwxLjYsMC4zdi01LjJcbiAgICAgICAgICAgICAgICAgICAgbDEuMiwwLjNjMC41LDAuMSwxLDAuMywxLjUsMC41djVsMS42LDAuM3YtNC42YzAuOSwwLjQsMS43LDEsMi40LDEuN0wyOC43LDI0eiIvPicpLGwuQ2xyU2hhcGVSZXNpemU9KDAsYS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOSw0YTEsMSwwLDAsMCwwLDJoOS41OWwtOS4yNSw5LjI1YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzAsNy40MVYxN2ExLDEsMCwwLDAsMiwwVjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTQsMTlhMSwxLDAsMCwxLDIsMHY5LjU5bDkuMjUtOS4yNWExLDEsMCwxLDEsMS40MSwxLjQxTDcuNDEsMzBIMTdhMSwxLDAsMCwxLDAsMkg0WiIvPicpLGwuQ2xyU2hhcGVPYmplY3RzPSgwLGEuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMDgsMTQuOWExMC40MSwxMC40MSwwLDAsMSwxLjg3LS43MWwtNC0xMC43N2EyLDIsMCwwLDAtMy43NSwwTDIsMjUuMjZBMiwyLDAsMCwwLDMuOTIsMjhoNi45NGExMCwxMCwwLDAsMS0uNTIt''@;'; put 'put ''MkgzLjkyTDEyLjA2LDQuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDlIMjJhMiwyLDAsMCwwLTIsMnYyLjg1Yy4yMywwLC40NiwwLC42OSwwQTEwLjUxLDEwLjUxLDAsMCwxLDIyLDEzLjlWMTFIMzJW''@;'; put 'put ''MjFIMzAuNjVhMTAuNDIsMTAuNDIsMCwwLDEsLjQ1LDJIMzJhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzIsOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjAuNjksMTUuODFhOC41LDguNSwwLDEsMCw4''@;'; put 'put ''LjUsOC41QTguNTEsOC41MSwwLDAsMCwyMC42OSwxNS44MVptMCwxNWE2LjUsNi41LDAsMSwxLDYuNS02LjVBNi41MSw2LjUxLDAsMCwxLDIwLjY5LDMwLjgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTEwLjY1LDI0''@;'; put 'put ''LjQ0YTkuNTEsOS41MSwwLDAsMSw3LjA2LTkuMTdMMTMsM2ExLDEsMCwwLDAtMS44NywwTDIuMDcsMjYuNTZBMSwxLDAsMCwwLDMsMjcuOTJoOC4zMkE5LjQ0LDkuNDQsMCwwLDEsMTAuNjUsMjQuNDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIiBkPSJNMzIsMTBIMjBhMSwxLDAsMCwwLTEsMXY0YTkuNDMsOS40MywwLDAsMSwxMC42Myw5SDMyYTEsMSwwLDAsMCwxLTFWMTFBMSwxLDAsMCwwLDMyLDEwWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBj''@;'; put 'put ''eD0iMjAuMTUiIGN5PSIyNC40NCIgcj0iNy41Ii8+JyksbC5DbHJTaGFwZUJvb2s9KDAsYS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjEwIiB5PSI1LjIiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxLjU1Ii8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMCwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEs''@;'; put 'put ''MSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFpNMjgsMzJIOS44NkEyLDIsMCwwLDEsOCwzMFY5LjU1QTMuNjMsMy42MywwLDAsMCw5Ljg2LDEwSDI4WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOSw4''@;'; put 'put ''SDkuODZBMS44OSwxLjg5LDAsMCwxLDgsNiwyLDIsMCwwLDEsOS44Niw0SDI5YTEsMSwwLDEsMCwwLTJIOS44NkE0LDQsMCwwLDAsNiw2YTQuMTQsNC4xNCwwLDAsMCwwLC40OSwxLDEsMCwwLDAsMCwuMjRWMzBhNCw0LDAsMCwwLDMuODYsNEgyOWExLDEsMCwwLDAsMS0xVjkuMjVzMC0uMDYs''@;'; put 'put ''MC0uMDksMC0uMDYsMC0uMDlBMS4wNywxLjA3LDAsMCwwLDI5LDhaIi8+JyksbC5DbHJTaGFwZUFzdGVyaXNrPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjguODksMjAuOTFsLTUtMi45MSw0Ljg3LTIuODZh''@;'; put 'put ''My4xMSwzLjExLDAsMCwwLDEuMTQtMS4wOCwzLDMsMCwwLDAtNC4wOS00LjE1TDIxLDEyLjc2VjdhMywzLDAsMCwwLTYsMHY1Ljc2TDEwLjE1LDkuOTFhMywzLDAsMSwwLTMsNS4xOGw1LDIuOTFMNy4yLDIwLjg2YTMuMTEsMy4xMSwwLDAsMC0xLjE0LDEuMDgsMywzLDAsMCwwLDQuMDksNC4x''@;'; put 'put ''NEwxNSwyMy4yNFYyOC45YTMsMywwLDAsMCwyLDIuOTRBMywzLDAsMCwwLDIxLDI5VjIzLjI0bDQuODUsMi44NWEzLDMsMCwxLDAsMy01LjE4Wk0yOC4yNCwyNGExLDEsMCwwLDEtMS4zNy4zNkwxOSwxOS43NVYyOWExLDEsMCwwLDEtMiwwVjE5Ljc1TDkuMTMsMjQuMzZhMSwxLDAsMCwxLTEt''@;'; put 'put ''MS43MkwxNiwxOGwtNy45LTQuNjRhMSwxLDAsMSwxLDEtMS43MkwxNywxNi4yNVY3YTEsMSwwLDAsMSwyLDB2OS4yNWw3Ljg3LTQuNjJhMSwxLDAsMCwxLDEsMS43MkwyMCwxOGw3LjksNC42NEExLDEsMCwwLDEsMjguMjQsMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguODksMjAuOTFsLTUtMi45MSw0Ljg3LTIuODZhMy4xMSwzLjExLDAsMCwwLDEuMTQtMS4wOCwzLDMsMCwwLDAtNC4wOS00LjE1TDIxLDEyLjc2VjdhMywzLDAsMCwwLTYsMHY1Ljc2TDEwLjE1LDkuOTFhMywzLDAsMSwwLTMsNS4xOGw1''@;'; put 'put ''LDIuOTFMNy4yLDIwLjg2YTMuMTEsMy4xMSwwLDAsMC0xLjE0LDEuMDgsMywzLDAsMCwwLDQuMDksNC4xNEwxNSwyMy4yNFYyOC45YTMsMywwLDAsMCwyLDIuOTRBMywzLDAsMCwwLDIxLDI5VjIzLjI0bDQuODUsMi44NWEzLDMsMCwxLDAsMy01LjE4WiIvPicpLGwuQ2xyU2hhcGVTY2lzc29y''@;'; put 'put ''cz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgIGQ9Ik0yNC4wNiwxOC4xOGw5LjYxLTguNzdhMSwxLDAsMCwwLS4wOS0xLjU1bC0yLjI0LTEuNmEzLjU3LDMuNTcsMCwwLDAtNC4yOC4xMkwxNS44''@;'; put 'put ''OCwxNS4zbC0zLjI2LTIuNTJhNS40NSw1LjQ1LDAsMSwwLTEsMS43N2wyLjYyLDJMMTAsMjBhNS40OCw1LjQ4LDAsMSwwLDEuNTksMS4yOUwyOC4zLDcuOTRhMS41NywxLjU3LDAsMCwxLDEuODgtLjA1bDEuMjMuODhMMjEuMSwxOC4xOWwxMC4zMSw5LjQtMS4yMy44OGExLjU3LDEuNTcsMCww''@;'; put 'put ''LDEtMS44OC0uMDVsLTkuODEtNy44NUwxNywyMS45M2wxMC4wNiw4YTMuNTcsMy41NywwLDAsMCw0LjI5LjEybDIuMjQtMS42YTEsMSwwLDAsMCwuMDktMS41NVpNNy40NSwxNC41NGEzLjQ2LDMuNDYsMCwxLDEsMy40NS0zLjQ2QTMuNDYsMy40NiwwLDAsMSw3LjQ1LDE0LjU0Wm0wLDEzLjcy''@;'; put 'put ''QTMuNDYsMy40NiwwLDEsMSwxMC45LDI0LjgsMy40NiwzLjQ2LDAsMCwxLDcuNDUsMjguMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuODEsOC4xMywzMS42Myw2LjQ4YTEuOTIsMS45MiwwLDAsMC0yLjM2LDBM''@;'; put 'put ''MTAsMjIuMDZhNS40Niw1LjQ2LDAsMSwwLDIsMS44MWwzLjktMy4xMkwyOS4yNywzMS41MmExLjkyLDEuOTIsMCwwLDAsMi4zNiwwbDIuMTgtMS42NEwyMC45NCwxOVpNNy40NSwyOS43NWEyLjg2LDIuODYsMCwxLDEsMi44Ni0yLjg2QTIuODcsMi44NywwLDAsMSw3LjQ1LDI5Ljc1WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE0LjMsMTUuMjQsMTIsMTMuMzhhNS40Niw1LjQ2LDAsMSwwLTIsMS44MUwxMi4xNiwxN1ptLTYuODUtMmEyLjg2LDIuODYsMCwxLDEsMi44Ni0yLjg2QTIuODYsMi44NiwwLDAsMSw3''@;'; put 'put ''LjQ1LDEzLjIzWiIvPicpLGwuQ2xyU2hhcGVCdWc9KDAsYS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjIzLjU2IiBjeT0iMTcuNzQiIHI9IjEuOTUiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMi40MiIgY3k9IjI1Ljg4IiByPSIxLjU4Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTIuODYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgY3g9IjEzLjk5IiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzAuODMs''@;'; put 'put ''MjBIMjlhMTkuMjksMTkuMjksMCwwLDAtMS4xOC01LjczbDEuNDYtLjc5YTEsMSwwLDAsMC0uOTUtMS43NmwtMywxLjY0QTE3LjY1LDE3LjY1LDAsMCwxLDI3LDIwLjcyQzI3LDI3LDIzLjgsMzEuMjMsMTguOCwzMS42MlYxNUgxNy4yVjMxLjYyQzEyLjIyLDMxLjIxLDksMjcsOSwyMC43MmEx''@;'; put 'put ''Ny43NCwxNy43NCwwLDAsMSwxLjczLTcuMzRMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEu''@;'; put 'put ''MTJsMS44NC0xLjI5QTEwLjM4LDEwLjM4LDAsMCwwLDE4LDMzLjY2YTEwLjM4LDEwLjM4LDAsMCwwLDguMTQtMy44MUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgZD0iTTExLjUxLDUuMzZhMS42NywxLjY3LDAsMCwwLDEuMDctLjUxQTMuMjEsMy4yMSwwLDAsMSwxMy43Niw2YTE2LjM4LDE2LjM4LDAsMCwwLTIuNjUsMi44OSwyLDIsMCwwLDAsMS42MSwzLjE5''@;'; put 'put ''SDIzLjMyQTIsMiwwLDAsMCwyNS4xLDExYTIsMiwwLDAsMC0uMTctMi4xQTE2LjM0LDE2LjM0LDAsMCwwLDIyLjI1LDZhMy4yMSwzLjIxLDAsMCwxLDEuMTctMS4xMUExLjY4LDEuNjgsMCwxLDAsMjMsMy4yNyw0Ljc3LDQuNzcsMCwwLDAsMjEsNWE1LjgxLDUuODEsMCwwLDAtMi45My0xLDUu''@;'; put 'put ''ODMsNS44MywwLDAsMC0zLDFBNC43Nyw0Ljc3LDAsMCwwLDEzLDMuMjdhMS42OCwxLjY4LDAsMSwwLTEuNDksMi4wOVpNMTgsNi4wN2MxLjQ1LDAsMy41MywxLjU3LDUuMzEsNGgwbC0xMC42LDBDMTQuNDksNy42MywxNi41Niw2LjA3LDE4LDYuMDdaIi8+XG4gICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuODMsMjBIMjlhMTkuMjksMTkuMjksMCwwLDAtMS4xOC01LjczbDEuNDYtLjc5YTEsMSwwLDAsMC0uOTUtMS43NmwtMywxLjI4SDEwLjc4TDcuNywxMS43MmExLDEsMCwwLDAtLjk1LDEuNzZsMS41LjhBMTkuMzgs''@;'; put 'put ''MTkuMzgsMCwwLDAsNy4wNywyMEg1LjE3YTEsMSwwLDAsMCwwLDJINy4xYTE0LjYyLDE0LjYyLDAsMCwwLDEuNjYsNi4xN0w2Ljg3LDI5LjQ5QTEsMSwwLDEsMCw4LDMxLjEybDEuODQtMS4yOUExMC4yOSwxMC4yOSwwLDAsMCwxNywzMy42VjE1aDJWMzMuNmExMC4yOSwxMC4yOSwwLDAsMCw3''@;'; put 'put ''LjE2LTMuNzVMMjgsMzEuMTJhMSwxLDAsMSwwLDEuMTUtMS42NGwtMS44Ni0xLjNBMTQuNjEsMTQuNjEsMCwwLDAsMjguOTQsMjJoMS44OWExLDEsMCwwLDAsMC0yWk0xMC45MSwxNy43NGExLjk1LDEuOTUsMCwxLDEsMS45NSwxLjk1QTEuOTUsMS45NSwwLDAsMSwxMC45MSwxNy43NFpNMTQs''@;'; put 'put ''MjcuNDZhMS41OCwxLjU4LDAsMSwxLDEuNTgtMS41OEExLjU4LDEuNTgsMCwwLDEsMTQsMjcuNDZabTguNDMsMEExLjU4LDEuNTgsMCwxLDEsMjQsMjUuODgsMS41OCwxLjU4LDAsMCwxLDIyLjQyLDI3LjQ2Wm0xLjEzLTcuNzdhMS45NSwxLjk1LDAsMSwxLDEuOTUtMS45NUExLjk1LDEuOTUs''@;'; put 'put ''MCwwLDEsMjMuNTYsMTkuNjlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuMjMsNS4yNmExLjY3LDEuNjcsMCwwLDAsLjU0LS4zMiw1LjksNS45LDAsMCwxLC44OS41OCw3LjQ0LDcuNDQsMCwwLDEsLjk1Ljk0QTE4''@;'; put 'put ''LjQ4LDE4LjQ4LDAsMCwwLDEwLjc5LDkuN2MtLjQuNTcuMDksMS4yOC44NiwxLjI4SDI0LjQ0Yy43NywwLDEuMjYtLjcxLjg2LTEuMjhhMTguMzgsMTguMzgsMCwwLDAtMi44OC0zLjI4LDcuMjgsNy4yOCwwLDAsMSwuOTEtLjksNS45LDUuOSwwLDAsMSwuODktLjU4LDEuNjksMS42OSwwLDEs''@;'; put 'put ''MC0uNTYtMS41MSw3LjQ5LDcuNDksMCwwLDAtMS4zMi44Myw5LjA2LDkuMDYsMCwwLDAtMS4xOSwxLjE4QTUuODUsNS44NSwwLDAsMCwxOCw0LjNhNS45MSw1LjkxLDAsMCwwLTMuMTcsMS4xOSw5LjIsOS4yLDAsMCwwLTEuMjItMS4yMSw3LjQ5LDcuNDksMCwwLDAtMS4zMi0uODMsMS42OCwx''@;'; put 'put ''LjY4LDAsMSwwLTEuMTEsMS44M1oiLz4nKSxsLkNsclNoYXBlVGhlcm1vbWV0ZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOSwyMy4xN1YxMS40NkgxN1YyMy4yYTMsMywwLDEsMCwyLDBaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LDE1YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTFIMjZhMSwxLDAsMCwwLDAtMkgyMy45MlY4YTYsNiwwLDAsMC0xMiwwVjIwLjgxYTgsOCwwLDEsMCwxMi0uMlYxOUgyNmExLDEsMCww''@;'; put 'put ''LDAsMC0ySDIzLjkyVjE1Wk0yNCwyNmE2LDYsMCwxLDEtMTAuMzYtNC4xMmwuMjctLjI5VjhhNCw0LDAsMCwxLDgsMFYyMS40NGwuMy4yOUE2LDYsMCwwLDEsMjQsMjZaIi8+JyksbC5DbHJTaGFwZVBlbmNpbD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjg3LDguMzIsMjgsMi40MmEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDQuMjcsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLjA5LDMyLDMzLjg3LDExLjI0QTIuMDcsMi4wNywwLDAs''@;'; put 'put ''MCwzMy44Nyw4LjMyWk0xMi4wOSwzMC4yLDQuMzIsMzEuODNsMS43Ny03LjYyTDIxLjY2LDguN2w2LDZaTTI5LDEzLjI1bC02LTYsMy40OC0zLjQ2LDUuOSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik00LjIy''@;'; put 'put ''LDIzLjJsLTEuOSw4LjJhMi4wNiwyLjA2LDAsMCwwLDIsMi41LDIuMTQsMi4xNCwwLDAsMCwuNDMsMEwxMywzMiwyOC44NCwxNi4yMiwyMCw3LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjgyLDguMzJs''@;'; put 'put ''LTUuOS01LjlhMi4wNywyLjA3LDAsMCwwLTIuOTIsMEwyMS43Miw1LjdsOC44Myw4LjgzLDMuMjgtMy4yOEEyLjA3LDIuMDcsMCwwLDAsMzMuODIsOC4zMloiLz4nKSxsLkNsclNoYXBlTm90ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsMzBINlY4SDE5LjIybDItMkg2QTIsMiww''@;'; put 'put ''LDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1bC0yLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41Myw1Ljg0LDMwLjE2LDIuNDdhMS42MSwxLjYxLDAsMCwwLTIuMjgs''@;'; put 'put ''MEwxNC4xNywxNi4yNmwtMS4xMSw0LjgxQTEuNjEsMS42MSwwLDAsMCwxNC42MywyMywxLjY5LDEuNjksMCwwLDAsMTUsMjNsNC44NS0xLjA3TDMzLjUzLDguMTJBMS42MSwxLjYxLDAsMCwwLDMzLjUzLDUuODRaTTE4LjgxLDIwLjA4bC0zLjY2LjgxTDE2LDE3LjI2LDI2LjMyLDYuODdsMi44''@;'; put 'put ''MiwyLjgyWk0zMC4yNyw4LjU2LDI3LjQ1LDUuNzQsMjksNC4xNiwzMS44NCw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNi40LDI5LjMsMi43YTEuNzEsMS43MSwwLDAsMC0yLjM2LDBMMjMuNjUsNkg2''@;'; put 'put ''QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjExLjc2bDMtM0ExLjY3LDEuNjcsMCwwLDAsMzMsNi40Wk0xOC44MywyMC4xM2wtNC4xOS45MywxLTQuMTUsOS41NS05LjU3LDMuMjMsMy4yM1pNMjkuNSw5LjQzLDI2LjI3LDYuMmwxLjg1LTEuODUsMy4y''@;'; put 'put ''MywzLjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlUmVmcmVzaD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIyLjQsMTEuNjVhMS4wOSwxLjA5LDAs''@;'; put 'put ''MCwwLDEuMDksMS4wOUgzNC40M1YxLjgxYTEuMDksMS4wOSwwLDEsMC0yLjE5LDBWOC45NWExNi40MSwxNi40MSwwLDEsMCwxLjQ3LDE1Ljg2LDEuMTIsMS4xMiwwLDAsMC0yLjA1LS45LDE0LjE4LDE0LjE4LDAsMSwxLTEuMDUtMTMuMzZIMjMuNUExLjA5LDEuMDksMCwwLDAsMjIuNCwxMS42''@;'; put 'put ''NVoiLz4nKSxsLkNsclNoYXBlU3luYz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjg0LDE1LjcyYTEsMSwwLDEsMC0yLC4yOUExMy4xNSwxMy4xNSwwLDAsMSwzMSwxNy45NCwxMywxMywwLDAsMSw4Ljcs''@;'; put 'put ''MjdoNS4zNmExLDEsMCwwLDAsMC0yaC05djlhMSwxLDAsMSwwLDIsMFYyOC4yQTE1LDE1LDAsMCwwLDMyLjg0LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuMDYsMUExLjA1LDEuMDUsMCww''@;'; put 'put ''LDAsMjksMlY3LjgzQTE0Ljk0LDE0Ljk0LDAsMCwwLDMsMTcuOTRhMTUuMTYsMTUuMTYsMCwwLDAsLjIsMi40OCwxLDEsMCwwLDAsMSwuODRoLjE2YTEsMSwwLDAsMCwuODItMS4xNUExMy4yMywxMy4yMywwLDAsMSw1LDE3Ljk0YTEzLDEzLDAsMCwxLDEzLTEzQTEyLjg3LDEyLjg3LDAsMCwx''@;'; put 'put ''LDI3LjQ0LDlIMjIuMDZhMSwxLDAsMCwwLDAsMkgzMVYyQTEsMSwwLDAsMCwzMC4wNiwxWiIvPicpLGwuQ2xyU2hhcGVWaWV3TGlzdD0oMCxhLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMiIgeT0iOCIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNywxMEgzMWExLDEsMCwwLDAsMC0ySDdhMSwxLDAsMCwwLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMxLDE0SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCww''@;'; put 'put ''LDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02IiBkPSJNMzEsMjBIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjIiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIGQ9Ik0zMSwyNkg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz4nKSxsLkNsclNoYXBlVmlld0NhcmRzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsMTdIMjFhMiwyLDAsMCwxLTItMlY4YTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwxN1pNMjEsOHY3SDMyVjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz4nKSxsLkNsclNoYXBlTGlnaHRidWxiPSgwLGEuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyLjI1YTExLDExLDAsMCwwLTExLDExLDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0aDJBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTgu''@;'; put 'put ''NDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yM2E5LDksMCwwLDEsMTguMDcsMEE4LjY0LDguNjQsMCwwLDEsMjYuMjEsMTdhMTUuNzksMTUuNzksMCwwLDEtMSwxLjU0QTE4LjQ2LDE4LjQ2LDAsMCwwLDIzLDIyLjQ0YTE4''@;'; put 'put ''LjE3LDE4LjE3LDAsMCwwLS43MSw0LjcxaDJhMTYuMTksMTYuMTksMCwwLDEsLjU5LTQsMTcsMTcsMCwwLDEsMi0zLjQ3QTE2LjMxLDE2LjMxLDAsMCwwLDI4LDE3Ljg2YTEwLjY4LDEwLjY4LDAsMCwwLDEtNC42M0ExMSwxMSwwLDAsMCwxOCwyLjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC42MywxNS41MWEuOC44LDAsMCwwLTEuMTMsMGwtMywzLDIuODYsMy4xM3Y1LjU0SDE5VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5QS44LjgsMCwwLDAsMTguNjMsMTUuNTFaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjIsMzIuMTVIMTRhLjguOCwwLDEsMCwwLDEuNkgyMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4zMiwxMC44OWwtMi43MywyLjczYS44LjgsMCww''@;'; put 'put ''LDAsMS4xMywxLjEzTDE4LjQ1LDEyYS44LjgsMCwxLDAtMS4xMy0xLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwyNy4xNVYyMWwtMi4yNC0yLjQ1LDEuODktMS44OWEuOC44LDAsMCwwLTEuMTMtMS4x''@;'; put 'put ''M2wtMywzLDIuODYsMy4xM3Y1LjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMzIuMTVIMTRhLjguOCwwLDEsMCwwLDEuNkgyMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNzIsMTQuNzUsMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTIuNzMsMi43M2EuOC44LDAsMCwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEyLjg4YzAsLjEyLDAsLjIzLDAsLjM1QTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTgu''@;'; put 'put ''MTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjMsMTAuNjMsMCwwLDAsMS00LjQzQTcuNDUsNy40NSwwLDAsMSwyNywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDI3LjE1QTE4LjE3LDE4LjE3LDAsMCwwLDEzLDIyLjQ0YTE4LjQ2LDE4LjQ2LDAsMCwwLTIuMjItMy45MiwxNS43OSwxNS43OSwwLDAsMS0xLTEuNTRBOC42NCw4LjY0LDAs''@;'; put 'put ''MCwxLDksMTMuMjMsOSw5LDAsMCwxLDIyLjUzLDUuNDdhNy40NSw3LjQ1LDAsMCwxLC40My0yLDExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwu''@;'; put 'put ''NTksNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjIsMzIuMTVIMTRhLjguOCwwLDEsMCwwLDEuNkgyMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYz''@;'; put 'put ''LDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoNS42OVYyMS42MWwtMi44Ni0zLjEzLDMtM2EuOC44LDAsMCwxLDEuMTMsMS4xM2wtMS44OSwxLjg5TDE5LDIxdjYuMTdIMjQuM2ExNi4xOSwxNi4xOSwwLDAsMSwu''@;'; put 'put ''NTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaTTE4LjQ1LDEybC0yLjczLDIuNzNhLjguOCwwLDEsMS0xLjEzLTEuMTNsMi43My0yLjczQS44LjgsMCwxLDEsMTguNDUs''@;'; put 'put ''MTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTIyLjUsNkE3LjQ3LDcuNDcsMCwwLDEsMjMsMy40NGExMSwxMSwwLDAsMC0xNiw5LjgsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoNS42OVYyMS42''@;'; put 'put ''MWwtMi44Ni0zLjEzLDMtM2EuOC44LDAsMCwxLDEuMTMsMS4xM2wtMS44OSwxLjg5TDE5LDIxdjYuMTdIMjQuM2ExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjMsMTAuNjMsMCwwLDAsMS00LjQzQTcuNSw3''@;'; put 'put ''LjUsMCwwLDEsMjIuNSw2Wm0tNCw2LTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksbC5DbHJTaGFwZURvd25sb2FkPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0x''@;'; put 'put ''LjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWEx''@;'; put 'put ''LDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwy''@;'; put 'put ''NS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEu''@;'; put 'put ''NDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLGwuQ2xyU2hhcGVVcGxvYWQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEs''@;'; put 'put ''MSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguODEsMTUsMTcsNi44M1YyNy40OGExLDEsMCwwLDAsMiwwVjYuODNMMjcuMTksMTVhMSwxLDAsMCwwLDEu''@;'; put 'put ''NDEtMS40MUwxOCwzLDcuMzksMTMuNjFBMSwxLDAsMSwwLDguODEsMTVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMSwzMUg1Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEs''@;'; put 'put ''MSwxaDI2YzAuNiwwLDEtMC40LDEtMVMzMS42LDMxLDMxLDMxeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNOC44LDE1TDE3LDYuOHYyMC42YzAsMC42LDAuNCwxLDEsMXMx''@;'; put 'put ''LTAuNCwxLTFWNi44TDIwLjEsOGwxLTEuOEwxOCwzTDcuNCwxMy42QzcsMTQsNi45LDE0LjYsNy4yLDE1czEsMC41LDEuNCwwLjFDOC43LDE1LjEsOC44LDE1LjEsOC44LDE1eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0w''@;'; put 'put ''LjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEs''@;'; put 'put ''MCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTguODEsMTUsMTcsNi44M1YyNy40OGExLDEsMCwwLDAsMiwwVjYuODNMMjcuMTksMTVhMSwxLDAsMCwwLDEuNDEt''@;'; put 'put ''MS40MUwxOCwzLDcuMzksMTMuNjFBMSwxLDAsMSwwLDguODEsMTVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxs''@;'; put 'put ''LkNsclNoYXBlTG9jaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjA5LDIwLjU5QTIuNDEsMi40MSwwLDAsMCwxNywyNS4xNFYyOGgyVjI1LjIzYTIuNDEsMi40MSwwLDAsMC0uOTEtNC42NFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LDE1VjEwLjcyYTguMiw4LjIsMCwwLDAtOC04LjM2LDguMiw4LjIsMCwwLDAtOCw4LjM2VjE1SDdWMzJhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjE1Wk0x''@;'; put 'put ''MiwxMC43MmE2LjIsNi4yLDAsMCwxLDYtNi4zNiw2LjIsNi4yLDAsMCwxLDYsNi4zNlYxNUgxMlpNOSwzMlYxN0gyN1YzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAs''@;'; put 'put ''MC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTE5LDI1LjIzVjI4SDE3VjI1LjE0YTIuNCwyLjQsMCwxLDEsMiwuMDlaTTI0LDE1SDEyVjEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEs''@;'; put 'put ''Niw2LjM2WiIvPicpLGwuQ2xyU2hhcGVVbmxvY2s9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMiwyNS4xNFYyOGgyVjI1LjIzYTIuNDIsMi40MiwwLDEsMC0yLS4wOVoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LDJhOC4yLDguMiwwLDAsMC04LDguMzZWMTVIMlYzMmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTVIMjBWMTAuMzZBNi4yLDYuMiwwLDAsMSwyNiw0YTYuMiw2LjIsMCwwLDEsNiw2''@;'; put 'put ''LjM2djYuODNhMSwxLDAsMCwwLDIsMFYxMC4zNkE4LjIsOC4yLDAsMCwwLDI2LDJaTTIyLDE3VjMySDRWMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2LDJhOC4yLDguMiwwLDAsMC04LDguMzZWMTVIMlYz''@;'; put 'put ''MmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTVIMjBWMTAuMzZBNi4yLDYuMiwwLDAsMSwyNiw0YTYuMiw2LjIsMCwwLDEsNiw2LjM2djYuODNhMSwxLDAsMCwwLDIsMFYxMC4zNkE4LjIsOC4yLDAsMCwwLDI2LDJaTTE0LDI1LjIzVjI4SDEyVjI1LjE0YTIuNCwyLjQsMCwxLDEs''@;'; put 'put ''MiwuMDlaIi8+JyksbC5DbHJTaGFwZVVzZXJzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcuOSwxNy4zYzIuNywwLDQuOC0yLjIsNC44LTQuOWMwLTIuNy0yLjItNC44LTQuOS00LjhjLTIuNywwLTQuOCwy''@;'; put 'put ''LjItNC44LDQuOEMxMywxNS4xLDE1LjIsMTcuMywxNy45LDE3LjN6IE0xNy44LDkuNkMxNy45LDkuNiwxNy45LDkuNiwxNy44LDkuNmMxLjYsMCwyLjksMS4zLDIuOSwyLjlzLTEuMywyLjgtMi45LDIuOGMtMS42LDAtMi44LTEuMy0yLjgtMi44QzE1LDEwLjksMTYuMyw5LjYsMTcuOCw5LjZ6''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi43LDE2LjdjLTEuOS0xLjctNC40LTIuNi03LTIuNWMtMC4zLDAtMC41LDAtMC44LDBjLTAuMiwwLjgtMC41LDEuNS0wLjksMi4xYzAuNi0wLjEsMS4xLTAu''@;'; put 'put ''MSwxLjctMC4xYzEuOS0wLjEsMy44LDAuNSw1LjMsMS42VjI1aDJ2LThMMzIuNywxNi43eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjMuNCw3LjhjMC41LTEuMiwxLjktMS44LDMuMi0xLjNjMS4yLDAu''@;'; put 'put ''NSwxLjgsMS45LDEuMywzLjJjLTAuNCwwLjktMS4zLDEuNS0yLjIsMS41Yy0wLjIsMC0wLjUsMC0wLjctMC4xYzAuMSwwLjUsMC4xLDEsMC4xLDEuNGMwLDAuMiwwLDAuNCwwLDAuNmMwLjIsMCwwLjQsMC4xLDAuNiwwLjFjMi41LDAsNC41LTIsNC41LTQuNGMwLTIuNS0yLTQuNS00LjQtNC41''@;'; put 'put ''Yy0xLjYsMC0zLDAuOC0zLjgsMi4yQzIyLjUsNi44LDIzLDcuMiwyMy40LDcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTEyLDE2LjRjLTAuNC0wLjYtMC43LTEuMy0wLjktMi4xYy0wLjMsMC0wLjUs''@;'; put 'put ''MC0wLjgsMGMtMi42LTAuMS01LjEsMC44LTcsMi40TDMsMTd2OGgydi03LjJjMS42LTEuMSwzLjQtMS43LDUuMy0xLjZDMTAuOSwxNi4yLDExLjUsMTYuMywxMiwxNi40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01''@;'; put 'put ''IiBkPSJNMTAuMywxMy4xYzAuMiwwLDAuNCwwLDAuNi0wLjFjMC0wLjIsMC0wLjQsMC0wLjZjMC0wLjUsMC0xLDAuMS0xLjRjLTAuMiwwLjEtMC41LDAuMS0wLjcsMC4xYy0xLjMsMC0yLjQtMS4xLTIuNC0yLjRjMC0xLjMsMS4xLTIuNCwyLjQtMi40YzEsMCwxLjksMC42LDIuMywxLjVjMC40''@;'; put 'put ''LTAuNSwxLTEsMS41LTEuNGMtMS4zLTIuMS00LTIuOC02LjEtMS41Yy0yLjEsMS4zLTIuOCw0LTEuNSw2LjFDNy4zLDEyLjMsOC43LDEzLjEsMTAuMywxMy4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJN''@;'; put 'put ''MjYuMSwyMi43bC0wLjItMC4zYy0yLTIuMi00LjgtMy41LTcuOC0zLjRjLTMtMC4xLTUuOSwxLjItNy45LDMuNEwxMCwyMi43djcuNmMwLDAuOSwwLjcsMS43LDEuNywxLjdjMCwwLDAsMCwwLDBoMTIuOGMwLjksMCwxLjctMC44LDEuNy0xLjdjMCwwLDAsMCwwLDBWMjIuN3ogTTI0LjEsMzBI''@;'; put 'put ''MTJ2LTYuNmMxLjYtMS42LDMuOC0yLjQsNi4xLTIuNGMyLjItMC4xLDQuNCwwLjgsNiwyLjRWMzB6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4wOSwxNC41N2MuMSww''@;'; put 'put ''LC4yLDAsLjMxLDBhNi40Myw2LjQzLDAsMCwxLC4wOS0yLDIuMDksMi4wOSwwLDEsMSwxLjQ3LTMsNi41OCw2LjU4LDAsMCwxLDEuNTUtMS4zMSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTMsMTguMTRhNi41Myw2LjUzLDAsMCwxLTEuMjgtMi4ybC0uNjMsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2N2gyVjE5LjUxYTcsNywwLDAsMSw0LjY3LTEuNkE4LjA5LDguMDksMCwwLDEsMTMsMTguMTRa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEu''@;'; put 'put ''MzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4x''@;'; put 'put ''LDE5LjczQTkuNjksOS42OSwwLDAsMCwxMSwyMi40N2wtLjI1LjI4djcuMzNhMS41NywxLjU3LDAsMCwwLDEuNjEsMS41NEgyMy44M2ExLjU3LDEuNTcsMCwwLDAsMS42MS0xLjU0VjIyLjczbC0uMjUtLjI4QTkuNTgsOS41OCwwLDAsMCwxOC4xLDE5LjczWm01LjMzLDkuODhIMTIuNzNWMjMu''@;'; put 'put ''NTVhOC4wOCw4LjA4LDAsMCwxLDUuMzctMS44Miw4LDgsMCwwLDEsNS4zMywxLjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0yMC4yOCwxNC4yN2EyLjQ2LDIuNDYsMCwx''@;'; put 'put ''LDEtMi40Mi0yLjg5LDIuNDQsMi40NCwwLDAsMSwxLC4yNCwzLjY3LDMuNjcsMCwwLDEsLjQzLTIsNC40MSw0LjQxLDAsMCwwLTEuNDgtLjI3QTQuNDcsNC40NywwLDEsMCwyMi4xNCwxNSwzLjY5LDMuNjksMCwwLDEsMjAuMjgsMTQuMjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNy4xOC44bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDM0YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4zOS44QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyNy4xOC44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAs''@;'; put 'put ''MSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTMsMTguMTRhNi41''@;'; put 'put ''Myw2LjUzLDAsMCwxLTEuMjgtMi4ybC0uNjMsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2N2gyVjE5LjUxYTcsNywwLDAsMSw0LjY3LTEuNkE4LjA5LDguMDksMCwwLDEsMTMsMTguMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzEuMzUsMTguNDJBOC41OSw4LjU5LDAsMCwwLDI1LDE1LjkxYy0uMzIsMC0uNiwwLS45LjA2YTYuNTMsNi41MywwLDAsMS0xLjM1LDIuMjVBNy45LDcuOSwwLDAsMSwyNSwxNy45MWE2Ljk0LDYuOTQsMCwwLDEsNC42''@;'; put 'put ''NCwxLjU4djYuMjdoMlYxOC43WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTE3Ljg2LDE4LjNhNC40Nyw0LjQ3LDAsMSwwLTQuNDctNC40N0E0LjQ3LDQuNDcsMCwwLDAsMTcu''@;'; put 'put ''ODYsMTguM1ptMC02LjkzYTIuNDcsMi40NywwLDEsMS0yLjQ3LDIuNDdBMi40NywyLjQ3LDAsMCwxLDE3Ljg2LDExLjM3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTE4LjEs''@;'; put 'put ''MTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41''@;'; put 'put ''NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIGQ9Ik0yNi4zNywxMmEyLDIsMCwwLDEtMi4wOS40Miw2''@;'; put 'put ''LjUzLDYuNTMsMCwwLDEsLjE1LDEuMzgsNi41OSw2LjU5LDAsMCwxLDAsLjY4LDQsNCwwLDAsMCwuNTcuMDYsNC4wOCw0LjA4LDAsMCwwLDMuMy0xLjdBNy40NSw3LjQ1LDAsMCwxLDI2LjM3LDEyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgZD0iTTIyLjk1LDYuOTNhNC4xNiw0LjE2LDAsMCwwLTEuNDcsMS40NEE2LjU5LDYuNTksMCwwLDEsMjMsOS43N2EyLjEsMi4xLDAsMCwxLC41OS0uODNBNy40NCw3LjQ0LDAsMCwxLDIyLjk1LDYuOTNaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMC4zMyIgY3k9IjUuNjciIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTIsMTYuMTRxLS40MywwLS44NywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY4LjI4SDguNTR2LTQuN2wuNTUtLjYyLjI1LS4yOWExMSwxMSwwLDAsMSw0LjcxLTIuODZBNi41OSw2LjU5LDAsMCwxLDEyLDE2LjE0WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMS4zNCwxOC42M2E4LjY3LDguNjcsMCwwLDAtNi40My0yLjUyLDEwLjQ3LDEwLjQ3LDAsMCwwLTEuMDkuMDYsNi41OSw2LjU5LDAsMCwxLTIsMi40NSwxMC45MSwxMC45MSwwLDAsMSw1LDNsLjI1LjI4''@;'; put 'put ''LjU0LjYydjQuNzFoMy45NFYxOC45MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMu''@;'; put 'put ''NDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5QTQuMDksNC4wOSwwLDEsMCwyMS40Nyw4LDYu''@;'; put 'put ''NTMsNi41MywwLDAsMSwyNC40MywxMy40NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIGN4PSIxNy44NyIgY3k9IjEzLjQ1IiByPSI0LjQ3Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgZD0iTTE4LjExLDIwLjNBOS42OSw5LjY5LDAsMCwwLDExLDIzbC0uMjUuMjh2Ni4zM2ExLjU3LDEuNTcsMCwwLDAsMS42LDEuNTRIMjMuODRhMS41NywxLjU3LDAsMCwwLDEuNi0xLjU0VjIzLjNMMjUuMiwyM0E5LjU4LDkuNTgsMCwwLDAsMTguMTEs''@;'; put 'put ''MjAuM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTIsMTYuMTRxLS40MywwLS44NywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY4LjI4SDguNTR2LTQuN2wu''@;'; put 'put ''NTUtLjYyLjI1LS4yOWExMSwxMSwwLDAsMSw0LjcxLTIuODZBNi41OSw2LjU5LDAsMCwxLDEyLDE2LjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMS4zNCwxOC42M2E4LjY3''@;'; put 'put ''LDguNjcsMCwwLDAtNi40My0yLjUyLDEwLjQ3LDEwLjQ3LDAsMCwwLTEuMDkuMDYsNi41OSw2LjU5LDAsMCwxLTIsMi40NSwxMC45MSwxMC45MSwwLDAsMSw1LDNsLjI1LjI4LjU0LjYydjQuNzFoMy45NFYxOC45MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTku''@;'; put 'put ''NTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0xNy44NywxNy45MmE0LjQ2LDQuNDYsMCwwLDAsNC0yLjU0QTMuNjcsMy42NywwLDAsMSwx''@;'; put 'put ''OSw5Ljg5bC4zNS0uNjFBNC40Miw0LjQyLDAsMCwwLDE3Ljg3LDlhNC40Nyw0LjQ3LDAsMSwwLDAsOC45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYu''@;'; put 'put ''ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU4LDYuNTgsMCwwLDEsMTIsMTYuMTRa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMS4zNCwxOC42M2E4LjY3LDguNjcsMCwwLDAtNi40My0yLjUyLDEwLjQ3LDEwLjQ3LDAsMCwwLTEuMDkuMDYsNi41OSw2LjU5LDAsMCwx''@;'; put 'put ''LTIsMi40NSwxMC45MSwxMC45MSwwLDAsMSw1LDNsLjI1LjI4LjU0LjYydjQuNzFoMy45NFYxOC45MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTTExLjEsMTQuMTljLjExLDAsLjIs''@;'; put 'put ''MCwuMzEsMGE2LjQ1LDYuNDUsMCwwLDEsMy4xMS02LjI5LDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUi''@;'; put 'put ''IHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCIgZD0iTTE4LjExLDIwLjNBOS42OSw5LjY5LDAsMCwwLDExLDIzbC0uMjUuMjh2Ni4zM2ExLjU3LDEuNTcsMCwwLDAsMS42LDEuNTRI''@;'; put 'put ''MjMuODRhMS41NywxLjU3LDAsMCwwLDEuNi0xLjU0VjIzLjNMMjUuMiwyM0E5LjU4LDkuNTgsMCwwLDAsMTguMTEsMjAuM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIgZD0iTTI0LjQzLDEz''@;'; put 'put ''LjQ0YTYuNTQsNi41NCwwLDAsMSwwLC42OSw0LjA5LDQuMDksMCwwLDAsLjU4LjA1aC4xOWE0LjA1LDQuMDUsMCwwLDAsMi41Mi0xLDcuNSw3LjUsMCwwLDEtNS4xNC02LjMyQTQuMTMsNC4xMywwLDAsMCwyMS40Nyw4LDYuNTMsNi41MywwLDAsMSwyNC40MywxMy40NFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksbC5DbHJTaGFwZVBvcE91dD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LDMzSDVhMiwyLDAsMCwxLTItMlY5QTIsMiwwLDAsMSw1LDdIMTVWOUg1VjMxSDI3VjIxaDJWMzFBMiwyLDAsMCwxLDI3LDMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiBkPSJNMTgsM2ExLDEsMCwwLDAsMCwySDI5LjU5TDE1Ljc0LDE4Ljg1YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzEsNi40MVYxOGExLDEsMCwwLDAsMiwwVjNaIi8+JyksbC5DbHJTaGFwZUZpbHRlcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDRIM0ExLDEsMCwwLDAsMiw1VjYuNjdhMS43OSwxLjc5LDAsMCwwLC41MywxLjI3TDE0LDE5LjU4djEwLjJsMiwuNzZWMTlhMSwxLDAsMCwwLS4yOS0uNzFMNCw2LjU5VjZIMzJ2LjYxTDIwLjMzLDE4LjI5QTEsMSwwLDAsMCwyMCwxOWww''@;'; put 'put ''LDEzLjIxTDIyLDMzVjE5LjVMMzMuNDcsOEExLjgxLDEuODEsMCwwLDAsMzQsNi43VjVBMSwxLDAsMCwwLDMzLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIyLDMzVjE5LjVMMzMuNDcsOEExLjgxLDEuODEs''@;'; put 'put ''MCwwLDAsMzQsNi43VjVhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMzMuNDgsNGgtMzFBLjUyLjUyLDAsMCwwLDIsNC41MlY2LjI0YTEuMzMsMS4z''@;'; put 'put ''MywwLDAsMCwuMzkuOTVsMTIsMTJ2MTBsNy4yNSwzLjYxVjE5LjE3bDEyLTEyQTEuMzUsMS4zNSwwLDAsMCwzNCw2LjI2VjQuNTJBLjUyLjUyLDAsMCwwLDMzLjQ4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVQaW49KDAsYS5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxNi41OWExLDEsMCwwLDEtLjcxLS4yOUwxOS43LDMuNzFhMSwxLDAsMCwxLDEuNDEtMS40MUwzMy43MSwxNC44OUExLDEsMCwwLDEsMzMsMTYuNTlaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOC41MiwxNS41NmwtMS40MS0xLjQxLTcuMiw3LjJhMSwxLDAsMCwwLS4yNSwxLDksOSwwLDAsMS0xLjUzLDguMDlMNS41OCwxNy44N2E5LDksMCwwLDEsOC4wOS0xLjUzLDEsMSwwLDAs''@;'; put 'put ''MCwxLS4yNWw3LjItNy4yTDIwLjQ0LDcuNDhsLTYuNzksNi43OUExMC45NCwxMC45NCwwLDAsMCwzLjQxLDE3LjExYTEsMSwwLDAsMCwwLDEuNDJsNi4zMyw2LjMzTDIuMjksMzIuMjlhMSwxLDAsMSwwLDEuNDEsMS40MWw3LjQ0LTcuNDQsNi4zMyw2LjMzYTEsMSwwLDAsMCwuNzEuMjloMGEx''@;'; put 'put ''LDEsMCwwLDAsLjcxLS4zLDExLDExLDAsMCwwLDIuODQtMTAuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDE2LjcxYTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy44MmExLDEsMCwwLDEsMS40MS0xLjQx''@;'; put 'put ''TDMzLjcxLDE1QTEsMSwwLDAsMSwzMywxNi43MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuNDQsNy41OWwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMjJhMSwxLDAsMCwwLDAsMS40''@;'; put 'put ''Mkw5LjczLDI1LDIuMjksMzIuNDFhMSwxLDAsMSwwLDEuNDEsMS40MWw3LjQ0LTcuNDQsNi4zMyw2LjMzYTEsMSwwLDAsMCwuNzEuMjloMGExLDEsMCwwLDAsLjcxLS4zLDExLDExLDAsMCwwLDIuODQtMTAuMjRsNi43OS02Ljc5WiIvPicpLGwuQ2xyU2hhcGVGaWxlPSgwLGEuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjExLjkyWm0tLjMs''@;'; put 'put ''Mi40OSw2LDUuOWgtNlpNOCwzMFY2SDIwdjhoOFYzMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yMS41OSwxMi4zOVY2LjQ5bDEuMDcsMWE3LjMxLDcuMzEsMCwwLDEsMC0y''@;'; put 'put ''LjgyTDIxLjg5LDRINy44M0ExLjg4LDEuODgsMCwwLDAsNiw1LjkxVjMwLjA5QTEuODgsMS44OCwwLDAsMCw3LjgzLDMySDI4LjE3QTEuODgsMS44OCwwLDAsMCwzMCwzMC4wOVYxMy41YTcuNDUsNy40NSwwLDAsMS0zLjkxLTEuMTFaTTI4LDMwSDhWNkgyMHY4aDhaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI4LDE1LjRWMzBIOFY2SDIwVjguMjVsMi4yNS0zLjlMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjE1LjRa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlB''@;'; put 'put ''MS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjExLjkyWk0yMSwxM1Y1Ljg0TDI4LjMsMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9''@;'; put 'put ''Ik0yNy4yNSwxM0gyMVY1Ljg0bDEuNjQsMS42YTcuMjUsNy4yNSwwLDAsMSwwLTIuNzRMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVBNy40Nyw3LjQ3LDAs''@;'; put 'put ''MCwxLDI3LjI1LDEzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMiwxNS40Yy0yLDAtMy43LTEuNi0zLjctMy42YzAtMC43LDAuMi0xLjMsMC41LTEuOWwzLjItNS41TDIxLjksNEg3LjhDNi44LDQsNiw0LjksNiw1Ljl2MjQuMmMwLDEsMC44LDEuOSwxLjgsMS45''@;'; put 'put ''aDIwLjNjMSwwLDEuOC0wLjksMS44LTEuOVYxNS40SDIyLjJ6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4y''@;'; put 'put ''LDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz4nKSxsLkNsclNoYXBlUGx1cz0o''@;'; put 'put ''MCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDE3SDE5VjZhMSwxLDAsMSwwLTIsMFYxN0g2YTEsMSwwLDAsMC0xLDEsLjkxLjkxLDAsMCwwLDEsLjk0SDE3VjMwYTEsMSwwLDEsMCwyLDBWMTlIMzBhMSwxLDAs''@;'; put 'put ''MCwwLDEtMUExLDEsMCwwLDAsMzAsMTdaIi8+JyksbC5DbHJTaGFwZU1pbnVzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNiwxN0gxMGExLDEsMCwwLDAsMCwySDI2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxs''@;'; put 'put ''LkNsclNoYXBlTWludXNDaXJjbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDE3SDEyYTEsMSwwLDAsMCwwLDJIMjRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs''@;'; put 'put ''MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNiwxNy41SDEyYTEuNSwxLjUsMCwwLDEsMC0zSDI0YTEuNSwxLjUsMCwwLDEsMCwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlUGx1c0NpcmNsZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMjYuMTcsMTdIMTlWOS44M2ExLDEsMCwwLDAtMiwwVjE3SDkuODNhMSwxLDAsMCwwLDAsMkgxN3Y3LjE3YTEsMSwwLDAsMCwyLDBWMTloNy4xN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDE4QTE2''@;'; put 'put ''LDE2LDAsMSwxLDE4LDIsMTYsMTYsMCwwLDEsMzQsMThabS04LjQxLTEuNUgxOS41VjEwLjQxYTEuNSwxLjUsMCwwLDAtMywwVjE2LjVIMTAuNDFhMS41LDEuNSwwLDAsMCwwLDNIMTYuNXY2LjA5YTEuNSwxLjUsMCwwLDAsMywwVjE5LjVoNi4wOWExLjUsMS41LDAsMCwwLDAtM1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxsLkNsclNoYXBlQmFuPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk00''@;'; put 'put ''LDE4QTEzLjkzLDEzLjkzLDAsMCwxLDcuNDMsOC44NUwyNy4xNSwyOC41N0ExNCwxNCwwLDAsMSw0LDE4Wm0yNC41Nyw5LjE1TDguODUsNy40M0ExNCwxNCwwLDAsMSwyOC41NywyNy4xNVoiLz4nKSxsLkNsclNoYXBlVGltZXNDaXJjbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS42MSwxOGw0Ljg2LTQuODZhMSwxLDAsMCwwLTEuNDEtMS40MUwxOC4yLDE2LjU0bC00Ljg5LTQuODlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi43OCwxOCwxMiwyMi43MmExLDEsMCwxLDAsMS40MSwxLjQxbDQuNzct''@;'; put 'put ''NC43Nyw0Ljc0LDQuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAs''@;'; put 'put ''MSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptOCwyMi4xYTEuNCwxLjQsMCwwLDEtMiwybC02''@;'; put 'put ''LTZMMTIsMjYuMTJhMS40LDEuNCwwLDEsMS0yLTJMMTYsMTguMDgsOS44MywxMS44NmExLjQsMS40LDAsMSwxLDItMkwxOCwxNi4xbDYuMTctNi4xN2ExLjQsMS40LDAsMSwxLDIsMkwyMCwxOC4wOFoiLz4nKSxsLkNsclNoYXBlVHJhc2g9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzNEg4Ljg2QTIuOTMsMi45MywwLDAsMSw2LDMxVjExLjIzSDhWMzFhLjkzLjkzLDAsMCwwLC44NiwxSDI3LjE0QS45My45MywwLDAsMCwyOCwzMVYxMS4yM2gyVjMxQTIuOTMsMi45MywwLDAsMSwyNy4xNCwz''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjc4LDlINUExLDEsMCwwLDEsNSw3SDMwLjc4YTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjIxIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMTUiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMjMsNS44NkgyMS4xVjRIMTQuOVY1Ljg2SDEzVjRhMiwyLDAsMCwxLDEuOS0yaDYuMkEyLDIsMCwwLDEsMjMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNiw5VjMxYTIuOTMsMi45MywwLDAsMCwyLjg2LDNIMjcuMDlBMi45MywyLjkzLDAsMCwwLDMwLDMxVjlabTksMjBIMTNWMTRoMlptOCwwSDIxVjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjczLDVIMjNWNEEyLDIsMCwwLDAsMjEsMmgtNi4yQTIsMiwwLDAsMCwxMyw0VjVINUExLDEsMCwxLDAsNSw3SDMwLjczYTEsMSwwLDAsMCwwLTJaIi8+JyksbC5DbHJTaGFwZVRhZz0oMCxhLmNsckljb25TVkcpKCc8Y2lyY2xl''@;'; put 'put ''IGN4PSIxMC41MiIgY3k9IjEwLjUyIiByPSIxLjQzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEy''@;'; put 'put ''LDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGN4PSIxMC41MiIgY3k9IjEwLjUyIiByPSIxLjQzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjJsLTMuOC0zLjhIMjUuMzFsNS4yMiw1''@;'; put 'put ''LjIyLTkuOSw5LjlMNiwxNS45MVY2aDkuOTJsMy40MSwzLjQxLDEtMS43OC0zLTNBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4y''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFM''@;'; put 'put ''MjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC41MiIgY3k9IjEwLjUyIiByPSIxLjQz''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwx''@;'; put 'put ''LjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTIwLjYyLDMwLjUyLDYsMTUuOTFWNmg5LjkybDE0LjYsMTQuNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCww''@;'; put 'put ''LDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDku''@;'; put 'put ''NjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNDYsMTUuNzNIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDEwLjIybDEuNDMtMi40N0wxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiww''@;'; put 'put ''LDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45YTIsMiwwLDAsMCwwLTIuODNaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjQ3bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjQ3QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjQ3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIs''@;'; put 'put ''MCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNi4zMyIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4n''@;'; put 'put ''KSxsLkNsclNoYXBlVGFncz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMs''@;'; put 'put ''MCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjcuODEiIGN5PSIxMS4xNCIgcj0iMS4zMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFB''@;'; put 'put ''MS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjcuODEiIGN5PSIxMS4xNCIgcj0iMS4z''@;'; put 'put ''MyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5''@;'; put 'put ''LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNMTcuMjYsMjkuNjksMy42OSwxNi4xNVY3aDkuMUwyNi4zNywyMC40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjE2LDE5LjEzLDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMzEuNzUsMjAuNDUsMjEuMjIsMzEuMDdhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5''@;'; put 'put ''LjIxLTkuMjFhMS45MywxLjkzLDAsMCwwLDAtMi43M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjcuODEiIGN5PSIxMS4xNCIgcj0iMS4zMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywyNCwxNS40SDIyLjIzQTMuNjUsMy42NSwwLDAsMSwyMSwxNS4xOWw1LjMzLDUuMjktOS4xMSw5LjIxTDMuNjksMTYuMTVWN2g5LjFsNiw1Ljk0YTMuNjgsMy42OCwwLDAsMSwuMS0yLjY5TDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIu''@;'; put 'put ''ODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIwLjgzLDYuOCwxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDE5Ljc5LDguNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEs''@;'; put 'put ''NUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3''@;'; put 'put ''LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTku''@;'; put 'put ''MTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAs''@;'; put 'put ''MCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43''@;'; put 'put ''MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjE2LDE5LjEzLDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4''@;'; put 'put ''LjIxLDVIMTYuMTJMMzEuNzUsMjAuNDUsMjEuMjIsMzEuMDdhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFhMS45MywxLjkzLDAsMCwwLDAtMi43M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVI''@;'; put 'put ''MTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjE2LDE5LjEzLDI5LjQzLDE1LjRIMjYuNjVsNS4xLDVMMjEuMjIsMzEuMDdhMS45MywxLjkzLDAsMCwwLDIu''@;'; put 'put ''NzMsMGw5LjIxLTkuMjFhMS45MywxLjkzLDAsMCwwLDAtMi43M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywyNCwxNS40SDIyLjIzYTMuNjcsMy42NywwLDAsMS0z''@;'; put 'put ''LjM2LTUuMTVMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwy''@;'; put 'put ''Ny43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEu''@;'; put 'put ''MTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1hbGVydCIvPicpLGwuQ2xyU2hhcGVIaXN0b3J5PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCw5LjgzYTEsMSwwLDAsMC0xLDF2OC43Mmw1LjksNEExLDEsMCwwLDAsMjQsMjEuODhsLTUtMy4zOVYxMC44M0ExLDEsMCwwLDAsMTgsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNi4wOSwxNi4wOSwwLDAsMCw0LDEwLjI2VjUuMmExLDEsMCwwLDAtMiwwVjE0aDguOGExLDEsMCwwLDAsMC0ySDUuMzVBMTQsMTQsMCwxLDEsOC41OCwyOC4zNWExLDEsMCwwLDAtMS4zNSwx''@;'; put 'put ''LjQ4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLGwuQ2xyU2hhcGVDbG9jaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0''@;'; put 'put ''LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxOC40VjEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE3Ljk0QTkuOTQsOS45NCwwLDAsMSwyMy40MSw5LjU5bC44NS0xLjM2YTExLjU1LDExLjU1LDAsMSwwLTguNTMsMjFMMTYsMjcuN0ExMCwxMCwwLDAsMSw4LDE3Ljk0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQ0LDcuNDQsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45''@;'; put 'put ''Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNi4zOGExMS41NiwxMS41NiwwLDAsMC0yLjI3LDIyLjg5TDE2LDI3LjdhMTAsMTAsMCwxLDEsNy4zOS0xOC4xaDBhNy40''@;'; put 'put ''NSw3LjQ1LDAsMCwxLS43OC0yLjIzQTExLjQ1LDExLjQ1LDAsMCwwLDE4LDYuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguOTIsMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZsLTUtMy4zOVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzloLTJBMTQsMTQsMCwxLDEsMjIuMDksNC42MWwxLTEuNzZBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMzMuNzcsMTUuMzlaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDhhOS44MSw5LjgxLDAsMCwxLDIsLjIzbC44NS0xLjQ2YTExLjU1LDExLjU1LDAsMSwwLTUuMTMsMjIuNTJMMTYsMjcuN0ExMCwxMCwwLDAs''@;'; put 'put ''MSwxOCw4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx''@;'; put 'put ''OCwxNiwxNiwwLDAsMCwxOCwyWm02LjIsMjEuMThhMSwxLDAsMCwxLTEuMzkuMjhsLTUuOS00VjEwLjc1YTEsMSwwLDAsMSwyLDBWMTguNGw1LDMuMzlBMSwxLDAsMCwxLDI0LjIsMjMuMThaTTIzLjg1LDguMjNhMTEuMzksMTEuMzksMCwxLDAtOC41NCwyMC44M0wxNSwzMC42M2ExMywxMyww''@;'; put 'put ''LDEsMSw5LjctMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFBNy40OCw3LjQ4LDAsMCwxLDIyLjY4LDcuNjMsMTEuMjQsMTEuMjQsMCwwLDAsMTgsNi42YTExLjM5LDExLjM5LDAsMCwwLTIu''@;'; put 'put ''NjksMjIuNDdMMTUsMzAuNjNBMTMsMTMsMCwwLDEsMTgsNWExMi44MSwxMi44MSwwLDAsMSw0LjUxLjgyLDcuNDYsNy40NiwwLDAsMSwuNjgtMi45NCwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaTTI0LjIsMjMuMThhMSwxLDAsMCwxLTEuMzkuMjhsLTUuOS00VjEwLjc1YTEsMSwwLDAs''@;'; put 'put ''MSwyLDBWMTguNGw1LDMuMzlBMSwxLDAsMCwxLDI0LjIsMjMuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjc3LDE1LjM5SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmMwLS4wOS0uMDktLjE4LS4xMy0uMjdWMTguNGw1LDMuMzlhMSwxLDAsMCwxLTEuMTEsMS42Nmwt''@;'; put 'put ''NS45LTRWMTAuNzVhMSwxLDAsMCwxLDEuOTEtLjQxQTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5TDIwLjc0LDdBMTEuMTksMTEuMTksMCwwLDAsMTgsNi42YTExLjM5LDExLjM5LDAsMCwwLTIuNjksMjIuNDdMMTUsMzAuNjNBMTMsMTMsMCwwLDEsMTgsNWExMi44LDEyLjgsMCwwLDEsMy41Ny41''@;'; put 'put ''MWwxLjUzLTIuNjZBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMzMuNzcsMTUuMzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksbC5D''@;'; put 'put ''bHJTaGFwZUFsYXJtQ2xvY2s9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40LDQuMDlBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxTDI4''@;'; put 'put ''LDI3Ljc4QTE0LDE0LDAsMCwwLDE2LjQsNC4wOVpNMTkuNTgsMjkuOUExMiwxMiwwLDEsMSwyOS45MiwxOS41NiwxMiwxMiwwLDAsMSwxOS41OCwyOS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC45Miwy''@;'; put 'put ''MC4zNGwtNi4wNi0zVjkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42''@;'; put 'put ''NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguODYsOS41YS45LjksMCww''@;'; put 'put ''LDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYybC02LjA2LTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDI3Ljc4QTEzLjg4LDEzLjg4LDAsMCwwLDMx''@;'; put 'put ''Ljc3LDE1LjRoLTJhMTIuMDcsMTIuMDcsMCwxLDEtOC42Ny05bDEtMS44YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx''@;'; put 'put ''LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQx''@;'; put 'put ''LDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDI3Ljc4QTEzLjg4LDEzLjg4LDAsMCww''@;'; put 'put ''LDMxLjc3LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2TDE5LDEzLjR2My43OEwyNSwyMC4xYTEsMSwwLDEsMS0uODcsMS44TDE3LDE4LjQ0VjkuNjlhMSwxLDAsMCwxLDIsMFYxMEwxOSw5Ljg5bDMtNS4yOGExNCwxNCwwLDAsMC0xNCwyMy4yN0w1LjU2LDMwLjQzQTEsMSww''@;'; put 'put ''LDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2''@;'; put 'put ''Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDI3Ljc4YTEzLjg5LDEzLjg5LDAsMCwwLDMuMjEtMTQuMzlBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMw''@;'; put 'put ''LjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWm0tMi41Mi02LjM1YTEsMSwwLDAsMS0xLjMzLjQ3TDE3LDE4LjQ0VjkuNjlhMSwxLDAsMCwxLDIsMHY3LjVMMjUsMjAuMUExLDEsMCww''@;'; put 'put ''LDEsMjUuNDksMjEuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDI3Ljc4YTEzLjg5LDEzLjg5LDAsMCwwLDMuMjEtMTQuMzksNyw3LDAsMCwxLTIuMTEuMDVBMTIsMTIsMCwxLDEsMjIuNTYsNi45LDcuNTQsNy41NCwwLDAsMSwyMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xMS0xLjIx''@;'; put 'put ''QTE0LDE0LDAsMCwwLDguMTEsMjcuODhMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40NywzLjg0''@;'; put 'put ''YTUuNzgsNS43OCwwLDAsMC03LjM3LS42MywxNi4wOCwxNi4wOCwwLDAsMSw4LjIsNy42NUE1LjczLDUuNzMsMCwwLDAsMzEuNDcsMy44NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43''@;'; put 'put ''NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDRBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1''@;'; put 'put ''LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxTDI4LDI3Ljc4QTE0LDE0LDAsMCwwLDE4LDRabTcuNDcsMTcuNDNhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWEx''@;'; put 'put ''LDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxsLkNsclNoYXBlQ2lyY2xlQXJyb3c9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgs''@;'; put 'put ''MTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMDgsOC4yNmwtNy42MSw3LjYxYTEsMSwwLDEsMCwxLjQx''@;'; put 'put ''LDEuNDFMMTcsMTIuMTh2MTVhMSwxLDAsMCwwLDIsMFYxMmw1LjI4LDUuMjhhMSwxLDAsMSwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiww''@;'; put 'put ''LDAsMCwxOCwyWm04LDE1LjU3YTEuNDMsMS40MywwLDAsMS0yLDBMMTkuNCwxM1YyNy4xNGExLjQsMS40LDAsMCwxLTIuOCwwdi0xNGwtNC40Myw0LjQzYTEuNCwxLjQsMCwwLDEtMi0yTDE4LjA4LDcuNywyNiwxNS41OUExLjQsMS40LDAsMCwxLDI2LDE3LjU3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGwuQ2xyU2hhcGVDaGlsZEFycm93PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC44MiwxNS44YTEsMSwwLDAsMC0xLjQxLDAsMSwxLDAsMCwwLDAsMS40MUwyNy4yLDIxSDlWMy43OGExLDEsMCwxLDAtMiwwVjIxYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjcuMTVsLTMuNzQsMy43NWExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzMSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVDb3B5PSgwLGEuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yOS41LDdoLTE5QTEuNSwxLjUsMCwwLDAsOSw4LjV2MjRBMS41LDEuNSwwLDAsMCwxMC41LDM0aDE5QTEuNSwxLjUsMCwwLDAsMzEsMzIuNVY4LjVBMS41LDEuNSwwLDAsMCwyOS41LDdaTTI5LDMySDExVjlIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMuNUExLjUsMS41LDAsMCwwLDI0LjUsMkg1LjVBMS41LDEuNSwwLDAsMCw0LDMuNXYyNEExLjUsMS41LDAsMCwwLDUuNSwyOUg2VjRIMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI3LDMuNTZBMS41NiwxLjU2LDAsMCwwLDI1LjQzLDJINS41N0ExLjU2LDEuNTYsMCwwLDAsNCwzLjU2VjI4LjQ0QTEuNTYsMS41NiwwLDAsMCw1LjU3LDMwaC41MlY0LjA3SDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iNiIgd2lkdGg9IjIzIiBoZWlnaHQ9IjI4IiByeD0iMS41IiByeT0iMS41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksbC5DbHJTaGFwZUhlbHA9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYs''@;'; put 'put ''MTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMjksOC45MmE3LjM4LDcuMzgs''@;'; put 'put ''MCwwLDAtNS43MiwyLjU3LDEsMSwwLDAsMC0uMzIuNzEuOTIuOTIsMCwwLDAsLjk1LjkyLDEuMDgsMS4wOCwwLDAsMCwuNzEtLjI5LDUuNyw1LjcsMCwwLDEsNC4zMy0yYzIuMzYsMCwzLjgzLDEuNTIsMy44MywzLjQxdi4wNWMwLDIuMjEtMS43NiwzLjQ0LTQuNTQsMy42NWEuOC44LDAsMCww''@;'; put 'put ''LS43Ni45MnMwLDIuMzIsMCwyLjc1YTEsMSwwLDAsMCwxLC45aC4xMWExLDEsMCwwLDAsLjktMVYxOS40NWMzLS40Miw1LjQzLTIsNS40My01LjI4di0uMDVDMjQuMTgsMTEuMTIsMjEuODQsOC45MiwxOC4yOSw4LjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE3Ljc4IiBjeT0iMjYuMiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xOCwxNC4xN3YtLjA1YzAtMy0yLjM0LTUuMi01Ljg4LTUuMmE3''@;'; put 'put ''LjM4LDcuMzgsMCwwLDAtNS43MiwyLjU3LDEsMSwwLDAsMC0uMzIuNzEuOTIuOTIsMCwwLDAsLjk1LjkyLDEuMDgsMS4wOCwwLDAsMCwuNzEtLjI5LDUuNyw1LjcsMCwwLDEsNC4zMy0yYzIuMzYsMCwzLjgzLDEuNTIsMy44MywzLjQxdi4wNWMwLDIuMjEtMS43NiwzLjQ0LTQuNTQsMy42NWEu''@;'; put 'put ''OC44LDAsMCwwLS43Ni45MnMwLDIuMzIsMCwyLjc1YTEsMSwwLDAsMCwxLC45aC4xMWExLDEsMCwwLDAsLjktMVYxOS40NUMyMS43NSwxOSwyNC4xOCwxNy40NSwyNC4xOCwxNC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQzLDcuNDMsMCwwLDEt''@;'; put 'put ''MS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40OSw3LjQ5LDAsMCwxLTkuOTMtOS45MywxNi4w''@;'; put 'put ''NiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNabS0xNS4zNCwxNWExLjY1LDEuNjUsMCwxLDEsMS42NS0xLjY1QTEuNjUsMS42NSwwLDAsMSwxNy43OCwyNy44NVptMS4zNy04LjA2djEuNzJhMS4zNywxLjM3LDAsMCwxLTEuMywxLjM2aC0uMTFhMS4zNCwxLjM0LDAsMCwxLTEuMzktMS4zYzAtLjQ0''@;'; put 'put ''LDAtMi43NiwwLTIuNzZhMS4xOSwxLjE5LDAsMCwxLDEuMTItMS4zMWMxLjU3LS4xMiw0LjE4LS43LDQuMTgtMy4yNSwwLTEuODMtMS40MS0zLjA3LTMuNDMtMy4wN2E1LjMxLDUuMzEsMCwwLDAtNCwxLjkyLDEuMzYsMS4zNiwwLDAsMS0yLjM1LS45LDEuNDMsMS40MywwLDAsMSwuNDMtMSw3''@;'; put 'put ''Ljc3LDcuNzcsMCwwLDEsNi0yLjY5YzMuNywwLDYuMjgsMi4zLDYuMjgsNS42QzI0LjU4LDE3LjE2LDIyLjYxLDE5LjIsMTkuMTUsMTkuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptLS4yMiwyNS44NWExLjY1''@;'; put 'put ''LDEuNjUsMCwxLDEsMS42NS0xLjY1QTEuNjUsMS42NSwwLDAsMSwxNy43OCwyNy44NVptMS4zNy04LjA2djEuNzJhMS4zNywxLjM3LDAsMCwxLTEuMywxLjM2aC0uMTFhMS4zNCwxLjM0LDAsMCwxLTEuMzktMS4zYzAtLjQ0LDAtMi43NiwwLTIuNzZhMS4xOSwxLjE5LDAsMCwxLDEuMTItMS4z''@;'; put 'put ''MWMxLjU3LS4xMiw0LjE4LS43LDQuMTgtMy4yNSwwLTEuODMtMS40MS0zLjA3LTMuNDMtMy4wN2E1LjMxLDUuMzEsMCwwLDAtNCwxLjkyLDEuMzYsMS4zNiwwLDAsMS0yLjM1LS45LDEuNDMsMS40MywwLDAsMSwuNDMtMSw3Ljc3LDcuNzcsMCwwLDEsNi0yLjY5YzMuNywwLDYuMjgsMi4zLDYu''@;'; put 'put ''MjgsNS42QzI0LjU4LDE3LjE2LDIyLjYxLDE5LjIsMTkuMTUsMTkuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksbC5DbHJTaGFwZUxvZ2luPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDEyYTIsMiwwLDAsMC0yLDJIMjhWMzBIMTJWMjAu''@;'; put 'put ''MkgxMFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjEyLDE4LjQ2YTEsMSwwLDEsMCwxLjQxLDEuNDFsNS43OS01''@;'; put 'put ''Ljc5TDE2LjU0LDguMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxOC41LDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxSDE4LjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw0SDEyYTIsMiwwLDAs''@;'; put 'put ''MC0yLDJ2N2g4LjVMMTUuMTIsOS43MWExLDEsMCwwLDEsMS40MS0xLjQxbDUuNzksNS43OS01Ljc5LDUuNzlhMSwxLDAsMCwxLTEuNDEtMS40MUwxOC41LDE1SDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMCwxM0g0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlTG9nb3V0PSgwLGEuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGQ9Ik03LDZIMjN2OS44aDJWNmEyLDIsMCwwLDAtMi0ySDdBMiwyLDAsMCwwLDUsNlYzMGEyLDIsMCwwLDAsMiwySDIzYTIsMiwwLDAsMCwyLTJIN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgu''@;'; put 'put ''MTYsMTcuMjhhMSwxLDAsMCwwLTEuNDEsMS40MUwzMC4xMywyMkgxNS42M2ExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFoMTQuNWwtMy4zOCwzLjQ2YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjMuMDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTIzLDRIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMlYyNEgxNS42M2ExLDEsMCwwLDEtMS0xLDEsMSwwLDAsMSwxLTFIMjVWNkEyLDIsMCwwLDAsMjMsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDI1djJoNS4xM2wtMy4zOCwzLjQ2YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjMuMDdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''Ii8+JyksbC5DbHJTaGFwZVByaW50ZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDlIMjdWNUg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDYuOTJWMjIuMDlINVYxM2EyLDIsMCwwLDEsMi0ySDI5YTIsMiwwLDAsMSwyLDJ2OUgyOS4wOFYyNEgzM1YxM0E0LDQsMCwwLDAsMjksOVpN''@;'; put 'put ''MjUsOUgxMVY3SDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxOEg4YTEsMSwwLDAsMCwwLDJIOVYzMkgyN1YyMGgxYTEsMSwwLDAsMCwwLTJaTTI1LDMwSDExVjIwSDI1WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMy4wNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxOEg4YTEs''@;'; put 'put ''MSwwLDAsMCwwLDJIOVYzMkgyN1YyMGgxYTEsMSwwLDAsMCwwLTJaTTI1LDMwSDExVjIwSDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzEgMTUuNCAzMSAyMi4w''@;'; put 'put ''OSAyOS4wOCAyMi4wOSAyOS4wOCAyNCAzMyAyNCAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNSwxM2EyLDIsMCwwLDEsMi0ySDE4LjY0QTMuNjUsMy42''@;'; put 'put ''NSwwLDAsMSwxOSw5Ljg5TDE5LjU0LDlIMTFWN2g5LjcxbDEuMTMtMkg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDYuOTJWMjIuMDlINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMy4wNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMTIuODhhNy40''@;'; put 'put ''NSw3LjQ1LDAsMCwxLTIsLjU1djguNjZIMjkuMDhWMjRIMzNWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwy''@;'; put 'put ''LTJIMjQuNDJhNy41LDcuNSwwLDAsMS0xLjI3LTJIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDlIMjdW''@;'; put 'put ''NUg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDl2OEgyN1YyNGg2VjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSwyNHY2SDExVjE5SDI1Wk0yNSw5SDExVjdIMjVabTQsNkgyN1YxM2gyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTUuNFpNMjUsMjR2NkgxMVYxOUgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjMsNy4zLDAsMCwxLTQsLjU1VjE1SDI3VjEzaC4zMmE3LjUyLDcuNTIsMCwwLDEtNC4xOC00SDExVjdIMjIuNTdhNy41Miw3''@;'; put 'put ''LjUyLDAsMCwxLS4wNy0xLDcuNTQsNy41NCwwLDAsMSwuMDctMUg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDl2OEgyN1YyNGg2VjEzQzMzLDEzLDMzLDEyLjkzLDMzLDEyLjg4Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxsLkNsclNoYXBlV29ybGQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTI2LjU0LDE4YTE5LjM4LDE5LjM4LDAsMCwwLS40My00aDMuNmExMi4zLDEyLjMsMCwwLDAtLjY3LTEuNkgyNS42OUExOS43MiwxOS43MiwwLDAsMCwyMi44LDYuNTNhMTIuMywxMi4zLDAsMCwwLTIuNTUtLjc2LDE3LjgzLDE3LjgzLDAsMCwxLDMuODksNi41OUgxOC43NVY1LjZjLS4y''@;'; put 'put ''NSwwLS41MSwwLS43Nywwcy0uNDksMC0uNzMsMHY2Ljc3SDExLjg2YTE3LjgzLDE3LjgzLDAsMCwxLDMuOS02LjYsMTIuMjgsMTIuMjgsMCwwLDAtMi41NC43NSwxOS43MiwxOS43MiwwLDAsMC0yLjkxLDUuODVINi45NEExMi4zLDEyLjMsMCwwLDAsNi4yNiwxNEg5Ljg5YTE5LjM4LDE5LjM4''@;'; put 'put ''LDAsMCwwLS40Myw0LDE5LjY3LDE5LjY3LDAsMCwwLC41LDQuMzdINi40MkExMi4zNCwxMi4zNCwwLDAsMCw3LjE2LDI0aDMuMjNhMTkuMzIsMTkuMzIsMCwwLDAsMi42OSw1LjM2LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjEuNzlBMTcuOTEsMTcuOTEsMCwwLDEsMTIsMjRoNS4yNnY2LjM0Yy4y''@;'; put 'put ''NCwwLC40OSwwLC43Mywwcy41MSwwLC43NywwVjI0SDI0YTE3LjksMTcuOSwwLDAsMS0zLjcsNi4xNSwxMi4yOCwxMi4yOCwwLDAsMCwyLjYyLS44MUExOS4zMiwxOS4zMiwwLDAsMCwyNS42MSwyNGgzLjJhMTIuMzQsMTIuMzQsMCwwLDAsLjc0LTEuNkgyNkExOS42NywxOS42NywwLDAsMCwy''@;'; put 'put ''Ni41NCwxOFptLTkuMjksNC4zN0gxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNabTcuMjQsMEgxOC43NVYxNGg1LjgzQTE4LjIxLDE4LjIxLDAsMCwxLDI1LDE4LDE4LjEyLDE4LjEyLDAsMCwxLDI0LjQ5LDIyLjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40Myw3LjQzLDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIwLjI1LDUuNzdhMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMs''@;'; put 'put ''MCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEy''@;'; put 'put ''LjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMu''@;'; put 'put ''Nyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2YTE5LjY3LDE5LjY3LDAsMCwwLC41LTQuMzcsMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42Yy0uMDYtLjE3LS4xMi0uMzMt''@;'; put 'put ''LjE5LS40OWE3LjQ1LDcuNDUsMCwwLDEtMy40Ny0xLjExaC0uMzZjMC0uMTEtLjA4LS4yMS0uMTEtLjMyYTcuNDgsNy40OCwwLDAsMS0zLjA2LTUuNjJBMTIuNDEsMTIuNDEsMCwwLDAsMjAuMjUsNS43N1ptLTMsMTYuNTlIMTEuNTFhMTcuNjksMTcuNjksMCwwLDEtLjA5LTguNGg1LjgzWk0y''@;'; put 'put ''NSwxOGExOC4xMiwxOC4xMiwwLDAsMS0uNTUsNC4zN0gxOC43NVYxNGg1LjgzQTE4LjIxLDE4LjIxLDAsMCwxLDI1LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9''@;'; put 'put ''IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUs''@;'; put 'put ''MjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguODUsMTMuNDV2OS40OGg2LjQ4QTIwLjQ2LDIwLjQ2LDAsMCwwLDI2LDE4YTIwLjU1LDIwLjU1LDAsMCwwLS41Mi00LjU1WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMzAuMjIsMjQuNzFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIw''@;'; put 'put ''LjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEz''@;'; put 'put ''Ljk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0u''@;'; put 'put ''ODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWEyMC4xMywyMC4xMywwLDAsMC00LjM5LTcuNDRBMTMuODksMTMuODksMCwwLDEsMjMuNDMsNWEyMi4yNiwyMi4yNiwwLDAsMSwzLjI3LDYuNTloMy43N2Ex''@;'; put 'put ''My44OSwxMy44OSwwLDAsMSwuNzYsMS44MUgyNy4xN0EyMS44OCwyMS44OCwwLDAsMSwyNy42NiwxOGEyMi4yLDIyLjIsMCwwLDEtLjU3LDQuOTNoNEExMy45NCwxMy45NCwwLDAsMSwzMC4yMiwyNC43MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xMC4wNSwxOGEyMC40NiwyMC40NiwwLDAsMCwuNjIsNC45M2g2LjQ4VjEzLjQ1SDEwLjU4QTIwLjU1LDIwLjU1LDAsMCwwLDEwLjA1LDE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOC44NSwyMi45NGg2LjQ4QTIwLjQ2LDIwLjQ2LDAsMCwwLDI2LDE4YTIwLjU1LDIwLjU1LDAsMCwwLS41Mi00LjU1SDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45LjU4djBIMzFhNi43Nyw2Ljc3LDAsMCwxLTIuMDcsMGgtMS44QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0YTEzLjk0LDEzLjk0LDAsMCwxLS44MywxLjgxSDI2LjZhMjEuOCwy''@;'; put 'put ''MS44LDAsMCwxLTMsNiwxMy44NiwxMy44NiwwLDAsMS0zLC45MiwyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LTYuOTRIMTguODZ2Ny4xNWMtLjI5LDAtLjU3LDAtLjg2LDBzLS41NSwwLS44MywwVjI0LjcxSDExLjIyYTIwLjIxLDIwLjIxLDAsMCwwLDQuMTgsNi45NSwxMy44NiwxMy44NiwwLDAs''@;'; put 'put ''MS0yLjk0LS45LDIxLjgsMjEuOCwwLDAsMS0zLTYuMDVINS43OGExMy45NCwxMy45NCwwLDAsMS0uODMtMS44MWg0QTIyLjIsMjIuMiwwLDAsMSw4LjM3LDE4YTIxLjg4LDIxLjg4LDAsMCwxLC40OC00LjU1SDQuNzZhMTMuODgsMTMuODgsMCwwLDEsLjc2LTEuODFIOS4zM0EyMi4yNiwyMi4y''@;'; put 'put ''NiwwLDAsMSwxMi42MSw1YTEzLjg2LDEzLjg2LDAsMCwxLDIuODctLjg0LDIwLjEzLDIwLjEzLDAsMCwwLTQuNCw3LjQ1aDYuMDlWNGMuMjgsMCwuNTUsMCwuODMsMHMuNTgsMCwuODYsMHY3LjY0aDYuMDlsMC0uMTNhNy40Nyw3LjQ3LDAsMCwxLTIuMzYtNC43NiwyMC4zNywyMC4zNywwLDAs''@;'; put 'put ''MC0yLTIuNTUsMTQuMjMsMTQuMjMsMCwwLDEsMi4wNi41Niw3LjQ0LDcuNDQsMCwwLDEsLjU3LTEuODYsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxsLkNsclNoYXBlU2xpZGVyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMiwxMi4zN0E0LDQsMCwwLDAsOSw4LjQ4''@;'; put 'put ''VjVBMSwxLDAsMSwwLDcsNVY4LjQ4YTQsNCwwLDAsMCwwLDcuNzhWMzFhMSwxLDAsMSwwLDIsMFYxNi4yNkE0LDQsMCwwLDAsMTIsMTIuMzdabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsOCwxNC40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxNS44M2E0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMHY2Ljk0YTQsNCwwLDAsMCwwLDcuNzhWMzFhMSwxLDAsMSwwLDIsMFYxOS43MkE0LDQsMCwwLDAsMzIsMTUuODNabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMjgsMTcu''@;'; put 'put ''ODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDI0LjVhNCw0LDAsMCwwLTMtMy44OVY1YTEsMSwwLDEsMC0yLDBWMjAuNjFhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjI4LjM5QTQsNCww''@;'; put 'put ''LDAsMCwyMiwyNC41Wm0tNCwyYTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDI2LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDkuMjlWNUExLDEsMCwxLDAsNyw1VjkuM2EzLjIyLDMuMjIsMCwwLDAs''@;'; put 'put ''MCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMTUuNDNBMy4yMiwzLjIyLDAsMCwwLDksOS4yOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwyMS40NVY1YTEsMSwwLDEsMC0yLDBWMjEuNDdhMy4yMiwzLjIyLDAsMCww''@;'; put 'put ''LDAsNi4xMVYzMWExLDEsMCwxLDAsMiwwVjI3LjZhMy4yMiwzLjIyLDAsMCwwLDAtNi4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwxMi43NVY1YTEsMSwwLDEsMC0yLDB2Ny43NmEzLjIyLDMuMjIsMCwwLDAs''@;'; put 'put ''MCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMTguODlhMy4yMiwzLjIyLDAsMCwwLDAtNi4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxsLkNsclNoYXBlQ2xpcGJvYXJkPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS4yOSw1SDI3VjdoMlYzMkg3''@;'; put 'put ''VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVY2LjY5QTEuNywxLjcsMCwwLDAsMjkuMjksNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI2LDcuMzNBMi4zNCwyLjM0LDAsMCwwLDIzLjY3LDVIMjEuODdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNlpNMjQsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQs''@;'; put 'put ''MFY3aDMuNjdhLjMzLjMzLDAsMCwxLC4zMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE0IiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTgiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjI2IiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTgiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjIiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRn''@;'; put 'put ''ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMTMsOUgxMlY3LjMzQS4z''@;'; put 'put ''My4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIz''@;'; put 'put ''LjEzLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCwwLDEtMS0uMDdWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFB''@;'; put 'put ''MS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMjksNUgyMi4xN2E0LjQ1LDQuNDUsMCwwLDAtNC4xMS0zQTQuNDYsNC40''@;'; put 'put ''NiwwLDAsMCwxNCw1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVY2LjY5QTEuNywxLjcsMCwwLDAsMjkuMjksNVptLTE4LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzFhMi4zMSwyLjMxLDAs''@;'; put 'put ''MSwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMXYySDExLjMxWk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBIMTEuMzFWOGExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMi4xOWE3LjU0LDcuNTQsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uNGE0LjQ1LDQuNDUsMCwwLDAtNC4xMS0z''@;'; put 'put ''QTQuNDYsNC40NiwwLDAsMCwxNCw1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVpNMjUsMjhIMTFWMjZIMjVabTAtNEgxMVYyMkgyNVpt''@;'; put 'put ''MC00SDExVjE4SDI1Wm0wLTRIMTFWMTRIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVGaXJld2FsbD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTQsOEgzMnY1''@;'; put 'put ''LjA4SDIzLjh2LTRIMjJ2NEgxNHYtNEgxMnY0SDRabTAsN0gzMnY2LjA4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRaTTIzLjgsMjhWMjQuMjdIMjIuMlYyOEgxNFYyNC4yN2gtMS42VjI4SDRWMjNIMzJ2NVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2NS42OEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0VjE1SDIwLjU4YTMuNTgsMy41OCwwLDAsMS0xLjc2''@;'; put 'put ''LTEuOTJIMTR2LTRIMTJ2NEg0VjhIMjAuMTRsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTIzLjgsMjhWMjQuMjdIMjIuMlYyOEgxNFYyNC4yN2gtMS42VjI4SDRWMjNIMzJ2NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTIuNDUtLjQySDIzLjhWMTAuMjJhNy41LDcu''@;'; put 'put ''NSwwLDAsMS0uNjMtMS4xNEgyMnY0SDE0di00SDEydjRINFY4SDIyLjc4YTcuNDksNy40OSwwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk00LDE1SDMydjYuMDhIMjguOTJW''@;'; put 'put ''MTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNabTAtOEg0VjEyaDhWOGgydjRoOFY4aDJ2NGg4WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEg0VjEyaDhWOGgydjRoNC41N0EzLjY3LDMuNjcsMCwwLDEsMTksOS44OUwyMS4yOSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwxMC40OVYxMmgxLjUxQTcuNTMsNy41MywwLDAsMSwyNCwxMC40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjE0SDRWMTJoOFY4aDJ2NGg4VjhoLjc4YTcuNDksNy40OSwwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMlpNMTQs''@;'; put 'put ''MjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''ICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxsLkNsclNoYXBlTGlzdD0oMCxhLmNsckljb25TVkcpKCc8cmVjdCB4PSIxNSIgeT0iOCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE2IiB3aWR0''@;'; put 'put ''aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyMCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgy''@;'; put 'put ''OGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJabTAsMzBIOFY0SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjEyIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyMCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI0IiB3aWR0aD0iOSIgaGVpZ2h0PSIy''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTYiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTUsOHYyaDguNjZhNy40NSw3LjQ1LDAsMCwxLS44OS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxMy4yMlYzMkg4VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LC44OC0ySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjgsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVabTAtNEgx''@;'; put 'put ''NVY4SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy42NiwxMEgxNVY4aDcuNzhhNy40Miw3LjQyLDAsMCwxLC44OS02SDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBaTTEzLDI2SDExVjI0aDJabTAtNEgxMVYyMGgyWm0wLTRIMTFWMTZoMlptMC00SDExVjEyaDJabTAtNEgxMVY4aDJaTTI1LDI2SDE1VjI0SDI1Wm0wLTRIMTVWMjBIMjVabTAtNEgxNVYxNkgyNVptMC00SDE1VjEySDI1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxs''@;'; put 'put ''LkNsclNoYXBlUmVkbz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQsNC4yMmExLDEsMCwwLDAtMS40MSwxLjQybDUuNTYsNS40OWgtMTNBMTEsMTEsMCwwLDAsMTAuMDcsMzIsMSwxLDAsMCwwLDExLDMwLjE4YTksOSwwLDAsMS01LTgsOS4wOCw5LjA4LDAsMCwxLDkuMTMtOWgxM2wt''@;'; put 'put ''NS41NCw1LjQ4QTEsMSwwLDAsMCwyNCwyMGw4LTcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlVW5kbz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuODcsMTEuMTRoLTEzbDUuNTYtNS40OUExLDEsMCwwLDAsMTIs''@;'; put 'put ''NC4yMkw0LDEyLjEzLDEyLDIwYTEsMSwwLDAsMCwxLjQxLTEuNDJMNy44NiwxMy4xNGgxM2E5LjA4LDkuMDgsMCwwLDEsOS4xMyw5LDksOSwwLDAsMS01LDhBMSwxLDAsMCwwLDI1LjkzLDMyYTExLDExLDAsMCwwLTUuMDYtMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlU2Nyb2xsPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwxMS4xMlY2LjU4YTQuNSw0LjUsMCwwLDAtNC41LTQuNWgtMTZBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUs''@;'; put 'put ''NC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0Wm0tNC41LTdBMi41LDIuNSwwLDAsMSwzMiw2''@;'; put 'put ''LjU4VjkuMTJIMThWNi41OGE0LjQ4LDQuNDgsMCwwLDAtLjc2LTIuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjA4LDE1LjRWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40''@;'; put 'put ''NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0aDIuNjFBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlsLjQ0LS43NkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41SDIyLjRsMS4xNS0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEs''@;'; put 'put ''MS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTEuOTItLjI2djE2LjNhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0''@;'; put 'put ''LjU0aDguNTRhNy41LDcuNSwwLDAsMS0xLjM1LTJIMThWNi41OGE0LjQ4LDQuNDgsMCwwLDAtLjc2LTIuNWg1LjUyYTcuNDQsNy40NCwwLDAsMSwuODYtMkgxMy41QTQuNSw0LjUsMCwwLDAsOSw2LjU4djIzYTIuNSwyLjUsMCwxLDEtNSwwVjI2SDcuMTlWMjRIMnY1LjVBNC41LDQuNSwwLDAs''@;'; put 'put ''MCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41di0xNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxMS4xMlY2LjU4YTQuNSw0LjUsMCwwLDAtNC41LTQuNWgtMTZBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2''@;'; put 'put ''LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjEzLjEzaC0yVjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWw0LjUxLTcuOEgx''@;'; put 'put ''My41QTQuNSw0LjUsMCwwLDAsOSw2LjU4VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTEuOTItLjI2djE2LjNhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUs''@;'; put 'put ''MHY0LjU0aDguNTRhNy40Niw3LjQ2LDAsMCwxLS45Mi05SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41di0xNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksbC5DbHJTaGFwZUZpbGVTZXR0aW5ncz0oMCxhLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43''@;'; put 'put ''NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGEx''@;'; put 'put ''LjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4x''@;'; put 'put ''NiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4y''@;'; put 'put ''OWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwx''@;'; put 'put ''LjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwx''@;'; put 'put ''LDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEy''@;'; put 'put ''QTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI0LjEyLDIwLjM1YTQsNCwwLDEsMCw0LjA4LDRBNC4wNiw0LjA2LDAsMCwwLDI0LjEyLDIwLjM1Wm0wLDYuNDZhMi40MywyLjQzLDAsMSwxLDIuNDgtMi40M0EyLjQ2LDIuNDYsMCwwLDEsMjQuMTIsMjYuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjZ2Ny44OWEzLjIsMy4yLDAsMCwxLDIsMS43MlY1YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTYuMjNsLTEuMS0xLjA4QTMuMTEsMy4xMSwwLDAsMSwxNC40OSwzMVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjEyLDIwLjM1YTQsNCwwLDEsMCw0LjA4LDRBNC4wNiw0LjA2LDAsMCwwLDI0LjEyLDIwLjM1Wm0wLDYuNDZhMi40MywyLjQzLDAsMSwxLDIuNDgtMi40M0EyLjQ2LDIuNDYs''@;'; put 'put ''MCwwLDEsMjQuMTIsMjYuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4''@;'; put 'put ''LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAs''@;'; put 'put ''MCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSww''@;'; put 'put ''LDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5''@;'; put 'put ''TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1''@;'; put 'put ''cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMu''@;'; put 'put ''NDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTgu''@;'; put 'put ''OSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwx''@;'; put 'put ''LjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNDksMzFINlY1SDIxLjg3TDIzLDNINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MTYuMjNsLTEuMS0xLjA4QTMuMTEsMy4xMSwwLDAsMSwxNC40OSwzMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZh''@;'; put 'put ''Ny44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4x''@;'; put 'put ''NiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYs''@;'; put 'put ''MCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjls''@;'; put 'put ''MS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4x''@;'; put 'put ''OWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwx''@;'; put 'put ''OC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2''@;'; put 'put ''LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTYuMjNsLTEuMS0xLjA4QTMuMTEsMy4xMSwwLDAsMSwxNC40''@;'; put 'put ''OSwzMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zM1YxMi43MWE3LDcsMCwwLDEtMi0xdjEuODhBMy4yLDMuMiwwLDAsMSwyOCwxNS4zM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjZ2OC43OGEyLjM3LDIuMzcsMCwwLDEsMiwxLjU3VjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNy4xNmwtMS0xQTIuMzgsMi4zOCwwLDAsMSwxNS41NSwzMVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwx''@;'; put 'put ''QTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3''@;'; put 'put ''LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCww''@;'; put 'put ''LDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCww''@;'; put 'put ''LC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjU0LDIzLjQ3bC0yLS42MWE3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjQxLDE3LjdhLjM3LjM3LDAsMCwwLS40NC0uMDdsLTEuODUsMUE3LDcsMCwwLDAsMjYuNjksMThs''@;'; put 'put ''LS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4zNy4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxbC0xLjgyLTFhLjM3LjM3LDAsMCwwLS40NC4wN2wtMS40NywxLjQ0YS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyYTcsNywwLDAsMC0uNjEsMS40NGwtMiwu''@;'; put 'put ''NjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFhNyw3LDAsMCwwLC42MSwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LDMyYS4zNy4zNywwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDYsNy4wNiwwLDAsMCwxLjM5LjU3bC42MSwyYS4zNy4z''@;'; put 'put ''NywwLDAsMCwuMzUuMjZoMmEuMzcuMzcsMCwwLDAsLjM1LS4yNmwuNjEtMmE3LDcsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zNy4zNywwLDAsMCwuNDQtLjA3bDEuNDUtMS40NWEuMzcuMzcsMCwwLDAsLjA3LS40NGwtMS0xLjg4YTcuMDYsNy4wNiwwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzcu''@;'; put 'put ''MzcsMCwwLDAsLjI2LS4zNVYyMy44M0EuMzcuMzcsMCwwLDAsMzMuNTQsMjMuNDdaTTI0LjcsMjguMTlBMy4zMywzLjMzLDAsMSwxLDI4LDI0Ljg2LDMuMzMsMy4zMywwLDAsMSwyNC43LDI4LjE5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl''@;'; put 'put ''cnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNy4xNmwtMS0xQTIuMzgsMi4zOCwwLDAsMSwxNS41NSwzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjU0LDIzLjQ3bC0yLS42MWE3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjQxLDE3LjdhLjM3LjM3LDAsMCwwLS40NC0uMDdsLTEuODUsMUE3LDcsMCwwLDAsMjYu''@;'; put 'put ''NjksMThsLS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4zNy4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxbC0xLjgyLTFhLjM3LjM3LDAsMCwwLS40NC4wN2wtMS40NywxLjQ0YS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyYTcsNywwLDAsMC0uNjEsMS40''@;'; put 'put ''NGwtMiwuNjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFhNyw3LDAsMCwwLC42MSwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LDMyYS4zNy4zNywwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDYsNy4wNiwwLDAsMCwxLjM5LjU3bC42MSwy''@;'; put 'put ''YS4zNy4zNywwLDAsMCwuMzUuMjZoMmEuMzcuMzcsMCwwLDAsLjM1LS4yNmwuNjEtMmE3LDcsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zNy4zNywwLDAsMCwuNDQtLjA3bDEuNDUtMS40NWEuMzcuMzcsMCwwLDAsLjA3LS40NGwtMS0xLjg4YTcuMDYsNy4wNiwwLDAsMCwuNTgtMS4zOWwyLS42''@;'; put 'put ''MWEuMzcuMzcsMCwwLDAsLjI2LS4zNVYyMy44M0EuMzcuMzcsMCwwLDAsMzMuNTQsMjMuNDdaTTI0LjcsMjguMTlBMy4zMywzLjMzLDAsMSwxLDI4LDI0Ljg2LDMuMzMsMy4zMywwLDAsMSwyNC43LDI4LjE5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNTUsMzFINlY1SDIzLjA4YTYuOTQsNi45NCwwLDAsMSwuNi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuMzZWMTIuNzFhNyw3LDAsMCwxLTItMXYyQTIuMzcsMi4zNywwLDAsMSwyOCwxNS4zNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''NC0tYmFkZ2VkIiAvPicpLGwuQ2xyU2hhcGVUd29XYXlBcnJvd3M9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjQzLDE2LjgzQTEsMSwwLDAsMCwyMiwxOC4yNEwyNS43MiwyMkg3LjgzYTEsMSwwLDAsMCwwLDJIMjUuNzJMMjIsMjcuN2ExLDEsMCwxLDAsMS40MiwxLjQxTDI5LjUz''@;'; put 'put ''LDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjQsMTguNDVhMSwxLDAsMCwwLC43MS0xLjcxTDEwLjI0LDEzSDI4LjEyYTEsMSwwLDAsMCwwLTJIMTAuMjRsMy43MS0zLjczYTEsMSwwLDAsMC0xLjQy''@;'; put 'put ''LTEuNDFMNi40MiwxMmw2LjExLDYuMTRBMSwxLDAsMCwwLDEzLjI0LDE4LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZVN3aXRjaD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS43MSwxNEgyMC45MlYxMkg1LjcxTDku''@;'; put 'put ''NDIsOC4yN0ExLDEsMCwxLDAsOCw2Ljg2TDEuODksMTMsOCwxOS4xNGExLDEsMCwxLDAsMS40Mi0xLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxMiIgd2lkdGg9IjMiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyOCIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI3LjkyLDE3Ljg2YTEsMSwwLDAsMC0xLjQyLDEuNDFMMzAuMjEsMjNIMTV2MkgzMC4yMUwyNi41LDI4Ljc0YTEsMSwwLDEsMCwxLjQyLDEuNEwzNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTAiIHk9''@;'; put 'put ''IjIzIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NiIgLz4nKSxsLkNsclNoYXBlVG9vbHM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLDE0SDE2YTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxNUExLDEsMCwwLDAsMjAsMTRabS0uNCw2LjZIMTYuNFYxNS40aDMuMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCww''@;'; put 'put ''LS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEzLjA4QTEsMSwwLDAsMCwzMy43MSwxMi4zOFpNMTQsNmg4VjhIMTRaTTMyLDE3SDIydjEuOTNIMzJWMjhINFYxOC45M0gxNFYxN0g0VjEzLjVMNy41LDEwaDIxTDMy''@;'; put 'put ''LDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2LjQiIHk9IjE1LjQiIHdpZHRoPSIzLjIiIGhlaWdodD0iNS4yIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTIxLDIxYTEsMSwwLDAsMS0xLDFIMTZhMSwxLDAsMCwxLTEtMVYxOUgydjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5SDIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''My43MSwxMi4zOCwyOS42Miw4LjI5QTEsMSwwLDAsMCwyOC45Miw4aC01VjYuMDVBMiwyLDAsMCwwLDIyLDRIMTMuODRBMS45MiwxLjkyLDAsMCwwLDEyLDYuMDVWOEg3LjA4YTEsMSwwLDAsMC0uNzEuMjlMMi4yOSwxMi4zOGExLDEsMCwwLDAtLjI5LjcxVjE3SDE1VjE1YTEsMSwwLDAsMSwx''@;'; put 'put ''LTFoNGExLDEsMCwwLDEsMSwxdjJIMzRWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0yMiw4SDE0VjZoOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksbC5DbHJTaGFwZVdpbmRvd0Nsb3NlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40''@;'; put 'put ''MSwxOGw3LjI5LTcuMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSwxMC43MSw5LjI5YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTYuNTksMTgsOS4yOSwyNS4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDcuMjksNy4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZVdpbmRvd01heD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuODksOWgtMjBhMiwyLDAsMCwwLTIsMlYyNWEyLDIsMCwwLDAsMiwyaDIwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDI3Ljg5''@;'; put 'put ''LDlabS0yMCwxNlYxMWgyMFYyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVXaW5kb3dNaW49KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LDI3SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZVdpbmRvd1Jlc3RvcmU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDhIMTRhMiwyLDAsMCwwLTIsMnYyaDJWMTBIMjhWMjBIMjZ2MmgyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDI4''@;'; put 'put ''LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwxNEg4YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgyMmEyLDIsMCwwLDAsMi0yVjE2QTIsMiwwLDAsMCwyMiwxNFpNOCwyNlYxNkgyMlYyNloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVab29tSW49KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LDRBMTIsMTIsMCwxLDAsMjgsMTYsMTIsMTIsMCwwLDAsMTYsNFptMCwyMS45MUExMCwxMCwwLDEsMSwyNiwxNiwxMCwx''@;'; put 'put ''MCwwLDAsMSwxNiwyNS45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjcxLDI5LjY5bC01LjE3LTUuMTdBMTMuNjgsMTMuNjgsMCwwLDEsMjUuMTUsMjZsNS4xNSw1LjE1YTEsMSwwLDAsMCwxLjQxLTEu''@;'; put 'put ''NDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSwxNUgxN1YxMWExLDEsMCwwLDAtMiwwdjRIMTFhMSwxLDAsMCwwLDAsMmg0djRhMSwxLDAsMCwwLDIsMFYxN2g0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxsLkNsclNoYXBlWm9vbU91dD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwx''@;'; put 'put ''LDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIwLDE1SDEyYTEsMSwwLDAsMCwwLDJoOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksbC5DbHJTaGFw''@;'; put 'put ''ZUtleT0oMCxhLmNsckljb25TVkcpKCc8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M0E1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQtLjRM''@;'; put 'put ''MTgsMjYuNDhoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBs''@;'; put 'put ''NS4yNiw1LjI2YTMsMywwLDAsMSwwLDQuMjRsLTIsMkwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0i''@;'; put 'put ''MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zNSwxNi44bC42My0uNjNhNSw1LDAsMCww''@;'; put 'put ''LC42My0uNzdIMjIuMjNsLS4yOSwwTDIwLjUyLDE2LjgsMzIsMjguMjhWMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTMtM0wxNCwyMy4zMWEzLDMsMCwwLDEtNC4yNCwwTDQuNSwxOGEzLDMsMCwwLDEsMC00LjI0bDguNTYtOC41NmEzLDMsMCwwLDEsNC4yNCwwTDIw''@;'; put 'put ''LjEsOC4wNmwxLTEuNzlMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0i''@;'; put 'put ''MSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M0E1LDUs''@;'; put 'put ''MCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQtLjRMMTgsMjYuNDhoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2''@;'; put 'put ''di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBsNS4yNiw1LjI2YTMsMywwLDAsMSwwLDQuMjRsLTIsMkwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEu''@;'; put 'put ''NjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMu''@;'; put 'put ''NDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNmE1LDUsMCwwLDAsLjYzLS43N0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEs''@;'; put 'put ''MTksOS44OWwyLjA5LTMuNjJMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcs''@;'; put 'put ''MTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIs''@;'; put 'put ''MjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzgsMTYuNzdsLjYtLjZBNSw1LDAsMCww''@;'; put 'put ''LDI0LDkuMUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEs''@;'; put 'put ''MCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''IC8+JyksbC5DbHJTaGFwZUxpYnJhcnk9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ4LDI5LjYzLDI2Ljc0LDExLjgyYTIsMiwwLDAsMC0yLjU4LTEuMTZMMjEsMTEuODVWOC45MkExLjkyLDEuOTIsMCwwLDAsMTkuMDgsN0gxNFY0LjkyQTEuOTIsMS45MiwwLDAsMCwxMi4wOCwz''@;'; put 'put ''SDVBMiwyLDAsMCwwLDMsNVYzMmExLDEsMCwwLDAsMSwxSDIwYTEsMSwwLDAsMCwxLTFWMTkuMjdsNSwxMy4yMWExLDEsMCwwLDAsMS4yOS41OGw1LjYxLTIuMTRhMSwxLDAsMCwwLC41OC0xLjI5Wk0xMiw4LjgzVjMxSDVWNWg3Wk0xOSwzMUgxNFY5aDVabTguNTEtLjI1TDIxLjEzLDEzLjky''@;'; put 'put ''bDMuNzQtMS40Miw2LjM5LDE2LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuNzUsM0g1LjI1QTEuMTUsMS4xNSwwLDAsMCw0LDRWMzNIMTRWNEExLjE1LDEuMTUsMCwwLDAsMTIuNzUsM1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMzEuMDlsLTYuOTQtMTguM2ExLDEsMCwwLDAtMS4yOS0uNThMMjIsMTMuNTlWOWExLDEsMCwwLDAtMS0xSDE2VjMzaDZWMTQuNjlMMjguOTMsMzNaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVCb2x0PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMC41MiwzNGgtM2ExLDEsMCwwLDEtLjg4LTEuNDRMMTIuNTUsMjFINmExLDEsMCwwLDEtLjg1LTEuNTRsMTAuNjgtMTdBMSwxLDAsMCwxLDE2LjY0LDJIMzAu''@;'; put 'put ''MDdhMSwxLDAsMCwxLC43NywxLjY5TDIxLjc4LDE0aDUuMzhhMSwxLDAsMCwxLC43MywxLjY2bC0xNi42MywxOEExLDEsMCwwLDEsMTAuNTIsMzRaTTkuMTgsMzJoLjkxTDI0Ljg2LDE2SDE5LjU5YTEsMSwwLDAsMS0uNzctMS42OUwyNy44OCw0SDE3LjE5TDcuNzcsMTlIMTQuMmExLDEsMCww''@;'; put 'put ''LDEsLjg4LDEuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC44LDIuMjlBLjQ5LjQ5LDAsMCwwLDMwLjM1LDJIMTYuNDJhLjUuNSwwLDAsMC0uNDIuMjNsLTEwLjcxLDE3QS40OS40OSwwLDAsMCw1Ljcs''@;'; put 'put ''MjBoNy42N0w2LjYsMzMuMjVhLjUyLjUyLDAsMCwwLC40Ni43NWgzYS41LjUsMCwwLDAsLjM3LS4xNkwyOCwxNC44NWEuNS41LDAsMCwwLS4zNy0uODVIMjAuODlMMzAuNzIsMi44MkEuNDkuNDksMCwwLDAsMzAuOCwyLjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz4nKSxsLkNsclNoYXBlV3JlbmNoPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xOCwyNi4xMSwyMC4zNSwxMy4yOEE5LjI4LDkuMjgsMCwwLDAsNy41NCwyLjc5bC0xLjM0LjU5LDUuMzgsNS4zOEw4Ljc2LDExLjU5LDMuMzgsNi4yMSwyLjc5LDcuNTRBOS4yNyw5LjI3LDAs''@;'; put 'put ''MCwwLDEzLjI4LDIwLjM1TDI2LjExLDMzLjE4YTIsMiwwLDAsMCwyLjgzLDBsNC4yNC00LjI0QTIsMiwwLDAsMCwzMy4xOCwyNi4xMVptLTUuNjYsNS42NkwxMy44OCwxOC4xMmwtLjU3LjE2YTcuMjcsNy4yNywwLDAsMS05LjMxLTcsNy4yLDcuMiwwLDAsMSwuMTUtMS40OGw0LjYxLDQuNjEs''@;'; put 'put ''NS42Ni01LjY2TDkuODEsNC4xNWE3LjI3LDcuMjcsMCwwLDEsOC40Nyw5LjE2bC0uMTYuNTdMMzEuNzcsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3LjEzIiBjeT0iMjcuMDkiIHI9IjEuMyIg''@;'; put 'put ''dHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTExLjIxIDI3LjEyKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzMsMjcuNzIsMTkuNjcsMTMuNjZhOC43OSw4Ljc5LDAsMCwwLTEyLTEwLjVM''@;'; put 'put ''MTMsOC41Myw4LjUzLDEzLDMuMTYsNy42N2E4Ljc5LDguNzksMCwwLDAsMTAuNSwxMkwyNy43MiwzMy43M2ExLjA3LDEuMDcsMCwwLDAsMS41LDBsNC41MS00LjUxQTEuMDcsMS4wNywwLDAsMCwzMy43MywyNy43MlpNMjksMjlhMS4zOCwxLjM4LDAsMSwxLDAtMkExLjM4LDEuMzgsMCwwLDEs''@;'; put 'put ''MjksMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVCdWxsc2V5ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMmExNS45MiwxNS45MiwwLDAsMC00LjI1LjU5bC43NywxLjg2YTE0LjA3LDE0LjA3LDAsMSwxLTEwLDEwbC0x''@;'; put 'put ''Ljg2LS43OEExNiwxNiwwLDEsMCwxOCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNy40NSwxNS43YTEwLjgxLDEwLjgxLDAsMSwwLDguMy04LjI2TDE2LjM3LDlBOS4yNCw5LjI0LDAsMSwxLDksMTYuMzJa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMi4wOWE0LjA4LDQuMDgsMCwwLDEtNC0zLjY4bC0xLjYzLS42OGMwLC4wOSwwLC4xOCwwLC4yN0E1LjY5LDUuNjksMCwxLDAsMTgsMTIuMzFoLS4yNEwxOC40''@;'; put 'put ''MywxNEE0LjA3LDQuMDcsMCwwLDEsMTgsMjIuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjIsMTMuMzRhLjUuNSwwLDAsMCwuMzUuMTVIMTIuMmw1LjM3LDUuMzdBMSwxLDAsMCwwLDE5LDE3LjQ0TDEz''@;'; put 'put ''LjUzLDEyVjguNTFhLjUuNSwwLDAsMC0uMTUtLjM1TDcuNzksMi41N2EuNS41LDAsMCwwLS44NS4zNXY0SDNhLjUuNSwwLDAsMC0uMzUuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxOC44NWExLDEs''@;'; put 'put ''MCwwLDEtMS40MSwwbC0zLTNBNCw0LDAsMCwwLDEzLjkxLDE4LDQuMDksNC4wOSwwLDEsMCwxOCwxMy45MWE0LDQsMCwwLDAtMiwuNTVsMywzQTEsMSwwLDAsMSwxOSwxOC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTgsMmExNS45MiwxNS45MiwwLDAsMC00LjI1LjU5bDEuNiwzLjg5QTExLjg5LDExLjg5LDAsMSwxLDYuNDksMTUuM0wyLjYxLDEzLjY4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTgsMTUuOTRBMTAuMTcsMTAuMTcsMCwxLDAsMTYsOGwxLjY5LDQuMTEuMzEsMEE1Ljg4LDUuODgsMCwxLDEsMTIuMTIsMThjMC0uMTIsMC0uMjMsMC0uMzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4z''@;'; put 'put ''NGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDIuMzUsMi4zNUE0LjA5LDQuMDksMCwwLDEsMTYsMTQuNDZMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTQiIC8+JyksbC5DbHJTaGFwZVRhcmdldD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNy4yQTEwLjgsMTAuOCwwLDEsMCwyOC44LDE4LDEwLjgxLDEwLjgxLDAsMCwwLDE4LDcuMlptMCwyMEE5LjIsOS4yLDAsMSwxLDI3LjIsMTgsOS4yMSw5LjIxLDAsMCwxLDE4LDI3LjJa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMi4zMUE1LjY5LDUuNjksMCwxLDAsMjMuNjksMTgsNS42OSw1LjY5LDAsMCwwLDE4LDEyLjMxWm0wLDkuNzdBNC4wOSw0LjA5LDAsMSwxLDIyLjA5LDE4LDQu''@;'; put 'put ''MDksNC4wOSwwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iNC4wOSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjgzQTEwLjE3LDEwLjE3LDAsMSwwLDI4LjE3LDE4LDEwLjE4LDEwLjE4LDAsMCwwLDE4LDcuODNabTAsMTZBNS44OCw1Ljg4LDAsMSwxLDIzLjg4LDE4LDUuODgsNS44OCwwLDAsMSwxOCwyMy44OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDI3LjgzQTExLjgzLDExLjgzLDAsMSwxLDI5LjgzLDE4LDExLjg1LDExLjg1LDAsMCwxLDE4LDI5LjgzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMyIgLz4nKSxsLkNsclNoYXBlRmxhbWU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjMsMTYuNjZjLTEuMTktMi4wOS03Ljk0LTE0LjE1LTcuOTQtMTQuMTVhMSwxLDAsMCwwLTEuNzUsMGwtNiwxMC42NC0zLTUuMjhhMSwxLDAsMCwwLTEuNzUsMFM1LjQsMTcu''@;'; put 'put ''NzgsNC40MiwxOS41QTkuMyw5LjMsMCwwLDAsMywyNC42MUMzLDI5LjcyLDUuODYsMzQsMTEuNjcsMzRIMjIuNDhDMjguMjgsMzQsMzMsMjksMzMsMjIuNzhBMTEuMTMsMTEuMTMsMCwwLDAsMzEuMywxNi42NlpNMjIuNDgsMzJIMTEuNzdDOC4xMywzMiw1LDI4LjY2LDUsMjQuNjFhNy40Myw3''@;'; put 'put ''LjQzLDAsMCwxLDEuMTYtNC4xM2MuNzMtMS4yOSw0LjA1LTcuMjEsNS42NS0xMC4wN2wzLDUuMjhhMSwxLDAsMCwwLC44Ny41MWgwYTEsMSwwLDAsMCwuODctLjUxTDIyLjQ5LDVjMS44NiwzLjMzLDYuMTUsMTEsNy4wNywxMi42QTkuMjQsOS4yNCwwLDAsMSwzMSwyMi43OEMzMSwyNy44Nywy''@;'; put 'put ''Ny4xOCwzMiwyMi40OCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1Ljc1LDIxLjczYy0uNjUtMS4xNi00LjM4LTcuODEtNC4zOC03LjgxYS44LjgsMCwwLDAtMS40LDBsLTQuMiw3LjQ4LTEuNTktMi40''@;'; put 'put ''OWEuOC44LDAsMCwwLTEuMzUsMEw5LjM3LDI0LjM1YTQuMzUsNC4zNSwwLDAsMC0uODIsMi42LDQuNDksNC40OSwwLDAsMCwuNSwySDExYTMsMywwLDAsMS0uODMtMiwyLjc4LDIuNzgsMCwwLDEsLjU2LTEuNzNsMi44LTQuMzgsMS42NiwyLjZhLjguOCwwLDAsMCwxLjQxLS4xMiw3LjgyLDcu''@;'; put 'put ''ODIsMCwwLDEsLjQtLjhMMjAuNjcsMTZsMy42OSw2LjU3YTQuODMsNC44MywwLDAsMSwuNzcsMi43MUE1LDUsMCwwLDEsMjMuNDYsMjloMi4xM2E2LjY4LDYuNjgsMCwwLDAsMS4xNC0zLjc0LDYuNDUsNi40NSwwLDAsMC0xLTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjMsMTYuMzJjLTEuMTktMi4wOS03Ljk0LTE0LjE1LTcuOTQtMTQuMTVhMSwxLDAsMCwwLTEuNzUsMGwtNiwxMC42NC0zLTUuMjhhMSwxLDAsMCwwLTEuNzUsMFM1LjQsMTcuNDMsNC40MiwxOS4xNUE5LjMsOS4zLDAsMCww''@;'; put 'put ''LDMsMjQuMjZjMCw1LjExLDMuODgsOS42NSw4LjY3LDkuNzRIMjIuNDhDMjguMjgsMzQsMzMsMjguNjIsMzMsMjIuNDRBMTEuMTMsMTEuMTMsMCwwLDAsMzEuMywxNi4zMlpNMjEuNDgsMzJIMTQuNTRBNC42OCw0LjY4LDAsMCwxLDEwLDI3LjQxYTMuOTEsMy45MSwwLDAsMSwuNzUtMi4zNGwz''@;'; put 'put ''LjM1LTUuMjFhLjUuNSwwLDAsMSwuODQsMGwxLjc4LDIuNzcsMC0uMDhjLjYzLTEuMTEsNC4yMy03LjQ4LDQuMjMtNy40OGEuNS41LDAsMCwxLC44NywwczMuNiw2LjM4LDQuMjMsNy40OEE1LjgzLDUuODMsMCwwLDEsMjcsMjUuNzZDMjcsMzIsMjIuMSwzMiwyMS40OCwzMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZUhvdXJnbGFzcz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIMjZWMjQuOTFhNi42Nyw2LjY3LDAsMCwwLTIuNjktNS4zM2wtMS4yOC0xQTYuMzYsNi4zNiwwLDAsMCwyMSwxOGgwYTYuMjksNi4y''@;'; put 'put ''OSwwLDAsMCwxLS42MmwxLjI4LTFBNi42Nyw2LjY3LDAsMCwwLDI2LDExLjA5VjRoM2ExLDEsMCwwLDAsMC0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYy''@;'; put 'put ''bC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWk0xMiwyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwx''@;'; put 'put ''LDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjR2Ny4wOWE0LjY2LDQuNjYsMCwwLDEtMS44OCwzLjcybC0xLjI4LDFoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRh''@;'; put 'put ''MSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksMzJIMjZWMjQuOTFh''@;'; put 'put ''Ni42Nyw2LjY3LDAsMCwwLTIuNjktNS4zM2wtMS4yOC0xQTYuMzYsNi4zNiwwLDAsMCwyMSwxOGgwYTYuMjksNi4yOSwwLDAsMCwxLS42MmwxLjI4LTFhNi42NCw2LjY0LDAsMCwwLDEuMDktMUgyMi4yM2EzLjY0LDMuNjQsMCwwLDEtLjc4LS4wOWwtLjYyLjQ2aDBhNC42Niw0LjY2LDAsMCwx''@;'; put 'put ''LTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEs''@;'; put 'put ''MS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNDVMMjMuNiwySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIu''@;'; put 'put ''NjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu''@;'; put 'put ''MTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksMzJIMjZWMjQuOTFhNi42Nyw2LjY3LDAsMCwwLTIuNjktNS4zM2wtMS4yOC0xQTYuMzYsNi4zNiww''@;'; put 'put ''LDAsMCwyMSwxOGgwYTYuMjksNi4yOSwwLDAsMCwxLS42MmwxLjI4LTFhNi42OCw2LjY4LDAsMCwwLDIuNTctNC4xNkE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDl2LjYxYTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAs''@;'; put 'put ''MC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJWMjQuOTFhNC42Niw0LjY2LDAsMCwxLDEuODgtMy43MmwxLjI4LTFhNC42Niw0LjY2LDAsMCwxLDEuMTgtLjYzLDEsMSwwLDAs''@;'; put 'put ''MCwuNjUtLjk0VjE3LjMzYTEsMSwwLDAsMC0uNjUtLjk0LDQuNjcsNC42NywwLDAsMS0xLjE5LS42M2wtMS4yOC0xQTQuNjYsNC42NiwwLDAsMSwxMiwxMS4wOVY0SDIyLjc4YTcuNDUsNy40NSwwLDAsMSwuODktMkg3QTEsMSwwLDAsMCw3LDRoM3Y3LjA5YTYuNjcsNi42NywwLDAsMCwyLjY5''@;'; put 'put ''LDUuMzNsMS4yOCwxQTYuMzYsNi4zNiwwLDAsMCwxNSwxOGgwYTYuMjcsNi4yNywwLDAsMC0xLC42MmwtMS4yOCwxQTYuNjcsNi42NywwLDAsMCwxMCwyNC45MVYzMkg3YTEsMSwwLDAsMCwwLDJIMjlhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik02LjY3LDRoMjJhMSwxLDAsMCwwLDAtMmgtMjJhMSwxLDAsMSwwLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTUsMTUuNjdBNi4wNyw2LjA3LDAsMCwwLDI1LDExLjEyVjZIMTAuMDZ2NS4xMmE2LjA3LDYuMDcsMCwwLDAsMi40NSw0LjU1LDExLjQ4LDExLjQ4LDAsMCwwLDIuOTEsMS43MnYxLjE2''@;'; put 'put ''YTExLjQ4LDExLjQ4LDAsMCwwLTIuOTEsMS43Miw2LjA3LDYuMDcsMCwwLDAtMi40NSw0LjU1djUuMTJIMjVWMjQuODJhNi4wNyw2LjA3LDAsMCwwLTIuNDUtNC41NSwxMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlBMTEuNDgsMTEuNDgsMCwwLDAsMjIuNTUsMTUuNjdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjY3LDMyaC0yMmExLDEsMCwwLDAsMCwyaDIyYTEsMSwwLDEsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi40NUwyMy42LDJINi42N2ExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi41MSwyMC4yN2E2LjA3''@;'; put 'put ''LDYuMDcsMCwwLDAtMi40NSw0LjU1djUuMTJIMjVWMjQuODJhNi4wNyw2LjA3LDAsMCwwLTIuNDUtNC41NSwxMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcybC4zLS4yN2gtLjYyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5''@;'; put 'put ''LDZIMTAuMDZ2NS4xMmE2LjA3LDYuMDcsMCwwLDAsMi40NSw0LjU1LDExLjQ4LDExLjQ4LDAsMCwwLDIuOTEsMS43MnYxLjE2QTExLjQ4LDExLjQ4LDAsMCwwLDEyLjUxLDIwLjI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjY3LDMyaC0yMmExLDEsMCwwLDAsMCwyaDIyYTEsMSwwLDEsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjY3LDRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0yaC0xN2ExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjIuNTUsMjAuMjdhMTEuNDgsMTEuNDgsMCwwLDAtMi45MS0xLjcyVjE3LjM5YTExLjQ4LDExLjQ4LDAsMCwwLDIuOTEtMS43MkE2LjI1LDYuMjUsMCwwLDAsMjUsMTEuNTUsNy40Nyw3LjQ3LDAsMCwxLDIyLjUsNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEu''@;'; put 'put ''NDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MkE2LjA3LDYuMDcsMCwwLDAsMjIuNTUsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVOb0FjY2Vzcz0oMCxhLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjcuMTUsMTVIOC44NUExLjg1LDEuODUsMCwwLDAsNywxNi44NXYyLjI5QTEuODUsMS44NSwwLDAsMCw4Ljg1LDIxSDI3LjE1QTEuODUsMS44NSwwLDAsMCwyOSwxOS4xNVYxNi44NUExLjg1LDEuODUsMCwwLDAsMjcuMTUsMTVabS4yNSw0LjE1YS4yNS4yNSwwLDAsMS0uMjUuMjVI''@;'; put 'put ''OC44NWEuMjUuMjUsMCwwLDEtLjI1LS4yNVYxNi44NWEuMjUuMjUsMCwwLDEsLjI1LS4yNUgyNy4xNWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs''@;'; put 'put ''MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOS4xNSwyMEg2Ljg1QS44NS44NSwwLDAsMSw2LDE5LjE1VjE2Ljg1QS44NS44NSwwLDAsMSw2Ljg1LDE2SDI5LjE1YS44NS44NSwwLDAsMSwuODUuODV2Mi4yOUEuODUuODUsMCwwLDEsMjkuMTUsMjBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVPcmdhbml6YXRpb249KDAsYS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI5LjggMTguOCAyNi4yIDE4LjggMjYuMiAyMS44OCAyNy44IDIxLjg4IDI3LjggMTcuMiAxOC44IDE3LjIgMTguOCAxNCAxNy4yIDE0IDE3LjIgMTcu''@;'; put 'put ''MiA4LjIgMTcuMiA4LjIgMjEuODggOS44IDIxLjg4IDkuOCAxOC44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyM0g0YTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDE0YTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MjVBMiwyLDAsMCwwLDE0LDIzWk00LDMxVjI1SDE0djZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyM0gyMmEyLDIsMCwwLDAtMiwydjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI1QTIs''@;'; put 'put ''MiwwLDAsMCwzMiwyM1pNMjIsMzFWMjVIMzJ2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLDEzSDIzYTIsMiwwLDAsMCwyLTJWNWEyLDIsMCwwLDAtMi0ySDEzYTIsMiwwLDAsMC0yLDJ2NkEyLDIsMCww''@;'; put 'put ''LDAsMTMsMTNabTAtOEgyM3Y2SDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44''@;'; put 'put ''IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIg''@;'; put 'put ''cnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMCIgeT0iMjMiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjMiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGwuQ2xyU2hhcGVCYWxhbmNlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwzM0gxMmEx''@;'; put 'put ''LDEsMCwwLDEsMC0ySDI0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyMi41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw3SDhBMSwxLDAsMCwxLDgsNUgyOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuOTMsMjQuNzlhNy4yMyw3''@;'; put 'put ''LjIzLDAsMCwxLTUuODEtMi44OWwtLjYtLjgsMS41OS0xLjIxLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSwyNi45MywyNC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMwLjUxLDE5LjI1YS44LjgsMCwwLDEtLjczLS40OEwyNi45MywxMi4ybC0yLjg1LDYuNTdhLjguOCwwLDAsMS0xLjQ3LS42NEwyNi4yLDkuODdhLjgzLjgzLDAsMCwxLDEuNDcsMGwzLjU4LDguMjZhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuNjgsMjQuNzlBNy4yMyw3LjIzLDAsMCwxLDMuODgsMjEuOWwtLjYtLjhMNC44NiwxOS45bC42LjhhNS4yOCw1LjI4LDAsMCwwLDguNDIsMGwuNi0uOCwxLjU5LDEuMjEtLjYuOEE3LjIz''@;'; put 'put ''LDcuMjMsMCwwLDEsOS42OCwyNC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjI2LDE5LjI1YS44LjgsMCwwLDEtLjczLS40OEw5LjY4LDEyLjIsNi44NCwxOC43N2EuOC44LDAsMCwxLTEuNDctLjY0''@;'; put 'put ''TDguOTUsOS44N2EuODMuODMsMCwwLDEsMS40NywwTDE0LDE4LjEzYS44LjgsMCwwLDEtLjczLDEuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxsLkNsclNoYXBlSWRCYWRnZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjJhNC4y''@;'; put 'put ''Myw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTIyLDRhMiwyLDAsMCwwLTItMkgxNmEyLDIsMCwwLDAtMiwydjdoOFpNMjAsOUgxNlY0aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMFYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYt''@;'; put 'put ''LjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsNkgyNFY4aDRWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDI4LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMGgxLjZWMjcuODdBOC4zMyw4LjMzLDAsMCwxLDE4LDI1LjI5YTguMzMsOC4zMywwLDAsMSw2''@;'; put 'put ''LjQsMi41OVYzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTE5LDkuODksMTkuNTYsOUgxNlY0aDRWOC4yNGwyLTMuNDZWNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g0LjY0QTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1h''@;'; put 'put ''bGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIu''@;'; put 'put ''NjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5''@;'; put 'put ''SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlh''@;'; put 'put ''OC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2Vk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjE4IiBjeT0iMTcuNzciIHI9IjQuMjMiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDIzVjhoNVYzMkg4VjhoNVY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwyMSw2LjVWNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTcuNzciIHI9IjQuMjMiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43''@;'; put 'put ''YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYz''@;'; put 'put ''Mkg4VjhoNVY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4x''@;'; put 'put ''MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTcuNzciIHI9IjQuMjMiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDRhMiwyLDAsMCwwLTItMkgxN2EyLDIs''@;'; put 'put ''MCwwLDAtMiwydjZoNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5''@;'; put 'put ''LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxMy4yMlYzMkg4VjhoNVY2SDhBMiwyLDAsMCwwLDYsOFYz''@;'; put 'put ''MmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjgsMTMuMjJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIg''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVSZXBlYXQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik02LDE0''@;'; put 'put ''LjE1QTMuMTcsMy4xNywwLDAsMSw5LjE3LDExSDI4LjRsLTQuMjgsNC41NGExLDEsMCwxLDAsMS40NiwxLjM3TDMyLjA5LDEwLDI1LjU4LDMuMDlhMSwxLDAsMSwwLTEuNDYsMS4zN0wyOC40LDlIOS4xN0E1LjE3LDUuMTcsMCwwLDAsNCwxNC4xNXY2LjFsMi0yLjEyWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMCwyMS44NUEzLjE3LDMuMTcsMCwwLDEsMjYuODMsMjVINy42bDQuMjgtNC41NGExLDEsMCwxLDAtMS40Ni0xLjM3TDMuOTEsMjZsNi41MSw2LjkxYTEsMSwwLDEsMCwxLjQ2LTEuMzdMNy42''@;'; put 'put ''LDI3SDI2LjgzQTUuMTcsNS4xNywwLDAsMCwzMiwyMS44NXYtNi4xbC0yLDIuMTJaIi8+JyksbC5DbHJTaGFwZUZpbGVHcm91cD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDM0SDEzYTEsMSwwLDAsMS0x''@;'; put 'put ''LTFWMTFhMSwxLDAsMCwxLDEtMUgzMWExLDEsMCwwLDEsMSwxVjMzQTEsMSwwLDAsMSwzMSwzNFpNMTQsMzJIMzBWMTJIMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMTYiIHk9IjE2IiB3aWR0aD0iMTIiIGhl''@;'; put 'put ''aWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjE2IiB5PSIyMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00IiB4PSIxNiIgeT0iMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAs''@;'; put 'put ''MCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTAsMjhWOEgyOFY3YTEsMSwwLDAsMC0xLTFIOUExLDEsMCwwLDAsOCw3VjI5YTEsMSwwLDAsMCwxLDFoMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMSwxMEgxM2ExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzEsMTBaTTI4LDI2SDE2VjI0SDI4Wm0wLTRIMTZWMjBIMjhabTAtNEgxNlYxNkgyOFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik02LDI0VjRIMjRWM2ExLDEsMCwwLDAtMS0xSDVBMSwxLDAsMCwwLDQsM1YyNWExLDEsMCwwLDAsMSwxSDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTAsMjhWOEgyOFY3YTEsMSwwLDAsMC0xLTFIOUExLDEsMCwwLDAsOCw3VjI5YTEsMSwwLDAsMCwxLDFoMVoiLz4nKSxsLkNsclNoYXBlUGFwZXJjbGlwPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiBkPSJNOC40MiwzMi42QTYuMyw2LjMsMCwwLDEsNCwzMC43OWwtLjEzLS4xM0E2LjIsNi4yLDAsMCwxLDIsMjYuMjIsNi43Nyw2Ljc3LDAsMCwxLDQsMjEuNEwxOS41LDYuMDdhOC42Nyw4LjY3LDAsMCwxLDEyLjE1LS4zNUE4LDgsMCwwLDEsMzQsMTEuNDRhOSw5LDAs''@;'; put 'put ''MCwxLTIuNyw2LjM2TDE3LjM3LDMxLjZBMSwxLDAsMSwxLDE2LDMwLjE4TDI5Ljg5LDE2LjM4QTcsNywwLDAsMCwzMiwxMS40NGE2LDYsMCwwLDAtMS43Ni00LjMsNi42Nyw2LjY3LDAsMCwwLTkuMzQuMzVMNS40NSwyMi44MkE0Ljc4LDQuNzgsMCwwLDAsNCwyNi4yMmE0LjIxLDQuMjEsMCww''@;'; put 'put ''LDAsMS4yNCwzbC4xMy4xM2E0LjY0LDQuNjQsMCwwLDAsNi41LS4yMUwyNS4yMiwxNS45NEEyLjcsMi43LDAsMCwwLDI2LDE0YTIuMzUsMi4zNSwwLDAsMC0uNjktMS42OCwyLjYxLDIuNjEsMCwwLDAtMy42Ni4xM2wtOS4yLDkuMTJhMSwxLDAsMSwxLTEuNDEtMS40MkwyMC4yOCwxMWE0LjYy''@;'; put 'put ''LDQuNjIsMCwwLDEsNi40OC0uMTNBNC4zMyw0LjMzLDAsMCwxLDI4LDE0YTQuNjgsNC42OCwwLDAsMS0xLjQxLDMuMzRMMTMuMjgsMzAuNThBNi45MSw2LjkxLDAsMCwxLDguNDIsMzIuNloiLz4nKSxsLkNsclNoYXBlU2hyaW5rPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMjIuNDFsOS4yNS05LjI1YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjEsMTMuNTlWNGExLDEsMCwwLDAtMiwwVjE3SDMyYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTQsMTlhMSwxLDAsMCwwLDAsMmg5LjU5TDQuMzMsMzAuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwxNSwyMi40MVYzMmExLDEsMCwwLDAsMiwwVjE5WiIvPicpLGwuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5MT0oMCxhLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMTQuNDQsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjMyLDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMUwxOSwzMC4zM0E3LjI5LDcuMjksMCwwLDEsMTQuNDQsMzEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNS4zNiwxLjY3YTQuMTIsNC4xMiwwLDEsMCw0LjExLDQuMTFBNC4xMiw0LjEyLDAsMCwwLDI1LjM2LDEuNjdabTAsNi4yM2EyLjEyLDIuMTIsMCwxLDEsMi4xMS0yLjEyQTIuMTIsMi4xMiwwLDAsMSwyNS4zNiw3LjlaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41NiwxOC4xOGgtNWExLDEsMCwwLDAtLjI0LjA1bDMuMDktMy41NWEyLjgzLDIuODMsMCwwLDAtLjY5LTQuMzNsLTgtNC42YTEsMSwwLDAsMC0xLjEyLjA4TDkuODMsOS41OEExLDEsMCwwLDAs''@;'; put 'put ''OS42NiwxMWExLDEsMCwwLDAsLjc5LjM4LDEsMSwwLDAsMCwuNjEtLjIxbDQuMjctMy4zNCwzLjExLDEuNzctNS4wOCw1Ljc4aDBhOS4yOCw5LjI4LDAsMCwwLTQuNTMsMS44M2wxLjQzLDEuNDNBNy4zLDcuMywwLDAsMSwyMC40MiwyOC44MWwxLjQyLDEuNDNhOS4yNyw5LjI3LDAsMCwwLC43''@;'; put 'put ''Ny0xMC4wNmgyLjgybC0uNzcsNi41MWExLDEsMCwwLDAsLjg4LDEuMTFoLjEyYTEsMSwwLDAsMCwxLS44OGwuOS03LjYyYTEsMSwwLDAsMC0uMjUtLjc4QTEsMSwwLDAsMCwyNi41NiwxOC4xOFptLTYuMzctNy41NiwyLjUyLDEuNDZhLjc5Ljc5LDAsMCwxLC40LjU5LjgxLjgxLDAsMCwxLS4y''@;'; put 'put ''LjY5TDE5Ljc1LDE3QTkuMTcsOS4xNywwLDAsMCwxNiwxNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0Ljc3LDMxLjk0YTcuMzEsNy4zMSwwLDAsMS01LjctMTEuODhMNy42NSwxOC42NGE5LjMsOS4z''@;'; put 'put ''LDAsMCwwLDEzLjEsMTMuMTFsLTEuNDItMS40MkE3LjI5LDcuMjksMCwwLDEsMTQuNzcsMzEuOTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjY1LDIuMWEzLjEyLDMuMTIsMCwxLDAsMy4xMSwzLjEyQTMuMTIs''@;'; put 'put ''My4xMiwwLDAsMCwyNi42NSwyLjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjgxLDE4LjE4SDIxLjQ3cS0uMzEtLjMzLS42Ni0uNjNsNC4zOC00Ljg2YTIuMTQsMi4xNCwwLDAsMC0uNTMtMy4yN0wyMC45LDcu''@;'; put 'put ''MjNsMCwwTDE3LjA1LDUuMDdhMSwxLDAsMCwwLTEuMTEuMDhMMTEuMTUsOC45YTEsMSwwLDAsMCwxLjIzLDEuNThsNC4yNy0zLjM0LDIuODcsMS42M0wxMy42LDE1LjM5YTkuMzMsOS4zMywwLDAsMC00LjQ0LDEuODJsMS40MiwxLjQzQTcuMyw3LjMsMCwwLDEsMjAuNzUsMjguODFsMS40Mywx''@;'; put 'put ''LjQzQTkuMjcsOS4yNywwLDAsMCwyMywyMC4xOGgyLjc0bC0uNzcsNi41MWExLDEsMCwwLDAsLjg3LDEuMTFoLjEyYTEsMSwwLDAsMCwxLS44OGwuOS03LjYyYTEsMSwwLDAsMC0uMjUtLjc4QTEsMSwwLDAsMCwyNi44MSwxOC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMiIC8+JyksbC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC4wNiwxMWgtMjRhMSwxLDAsMSwwLDAsMkgxNHY5LjY1czAsMCwwLDBsLTMuNzUsMTBhMSwxLDAsMCwwLC41OCwxLjI5LDEuMTMsMS4xMywwLDAsMCwuMzYuMDYsMSwxLDAs''@;'; put 'put ''MCwwLC45My0uNjVMMTUuNjIsMjRoNC43NmwzLjUyLDkuMzVhMSwxLDAsMCwwLC45My42NSwxLjEzLDEuMTMsMCwwLDAsLjM2LS4wNiwxLDEsMCwwLDAsLjU4LTEuMjlMMjIsMjIuNjhzMCwwLDAsMFYxM2g4LjA2YTEsMSwwLDEsMCwwLTJaTTIwLDIySDE2VjEzaDRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMGE0LDQsMCwxLDAtNC00QTQsNCwwLDAsMCwxOCwxMFptMC02YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE4LDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE3Ljk2IiBjeT0iNSIgcj0iMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEg2YTEsMSwwLDAsMCwwLDJoOHY4LjM2czAsMCwwLDBMMTAuMTEsMzMu''@;'; put 'put ''MTdhMSwxLDAsMCwwLC42NiwxLjI1LDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsMS0uNzFsMy4yOS0xMC44NGg1LjM4TDI0LDMzLjc1YTEsMSwwLDAsMCwxLC43MSwxLjU1LDEuNTUsMCwwLDAsLjI5LDAsMSwxLDAsMCwwLC42Ni0xLjI1TDIyLDIwLjRzMCwwLDAsMFYxMmg4YTEs''@;'; put 'put ''MSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVTb3J0Qnk9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LjU0LDEzSDcuNDZhMSwxLDAsMCwxLDAtMkgyOC41NGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTcsMTlINy40NmExLDEsMCwwLDEsMC0ySDIxLjE3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMy43NCwyNUg3LjQ2YTEsMSwwLDAsMSwwLTJoNi4yOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksbC5DbHJTaGFwZUNvbGxhcHNlQ2FyZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsMjFI''@;'; put 'put ''M2ExLDEsMCwwLDAtMSwxdjZhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIyQTEsMSwwLDAsMCwzMywyMVptLTEsNkg0VjIzSDMyWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjAuMjJsNS42''@;'; put 'put ''NS01LjY1YS44MS44MSwwLDAsMCwwLTEuMTQuOC44LDAsMCwwLTEuMTMsMEwxOCwxOGwtNC41Mi00LjUyYS44LjgsMCwwLDAtMS4xMywwLC44MS44MSwwLDAsMCwwLDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwxNC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDEyLDEzLjQ4LDcuNDNhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMiIgeT0iMjIiIHdpZHRoPSIzMiIgaGVpZ2h0PSI4IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjAuN2wtNS43OS01Ljc5YTEsMSwwLDAsMSwwLTEu''@;'; put 'put ''NDEsMSwxLDAsMCwxLDEuNDEsMEwxOCwxNy44N2w0LjM4LTQuMzdhMSwxLDAsMCwxLDEuNDEsMCwxLDEsMCwwLDEsMCwxLjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC41LDEyLjIxLDguNzFhMSwxLDAs''@;'; put 'put ''MCwxLDAtMS40MiwxLDEsMCwwLDEsMS40MSwwTDE4LDExLjY3bDQuMzgtNC4zOGExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVFeHBhbmRDYXJkPSgwLGEuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGQ9Ik0zMyw2SDNBMSwxLDAsMCwwLDIsN1YyOWExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsMzMsNlpNMzIsMjhINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xMy40OCwxNS44NiwxOCwxMS4zNGw0LjUyLDQuNTJhLjc3Ljc3LDAsMCwwLC41Ni4yNC44MS44MSwwLDAsMCwuNTctMS4zN0wxOCw5LjA4bC01LjY1LDUuNjVhLjguOCwwLDEsMCwxLjEzLDEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDIxLjg2LDE4LDE3LjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDE1LjA4bC01LjY1LDUuNjVhLjguOCwwLDEsMCwxLjEzLDEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0yMy43OSwyMS40MWExLDEsMCwwLDEtMS40MSwwTDE4LDE3bC00LjM4LDQuMzhhMSwxLDAsMCwx''@;'; put 'put ''LTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDE0LjIsMjMuNzksMjBBMSwxLDAsMCwxLDIzLjc5LDIxLjQxWm0wLTYuMmExLDEsMCwwLDEtMS40MSwwTDE4LDEwLjgzbC00LjM4LDQuMzhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDhsNS43OSw1Ljc5QTEsMSwwLDAs''@;'; put 'put ''MSwyMy43OSwxNS4yMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZUJyaWVmY2FzZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMjhhMCwwLDAsMCwxLDAsMEg0VjIxLjMyYTcuMSw3LjEsMCwwLDEtMi0xLjQzVjI4YTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS44OWE2Ljc0LDYuNzQsMCwwLDEtMiwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMjUsMjIuNGExLDEsMCwwLDAsMS0xVjE1Ljk0SDI0VjE4SDE0djJIMjR2MS40QTEsMSww''@;'; put 'put ''LDAsMCwyNSwyMi40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMsNkgyNFY0LjM4QTIuNDIsMi40MiwwLDAsMCwyMS41NSwyaC03LjFBMi40MiwyLjQyLDAsMCwwLDEyLDQuMzhWNkgzQTEsMSwwLDAsMCwyLDd2OGE1LDUsMCww''@;'; put 'put ''LDAsNSw1aDN2MS40YTEsMSwwLDAsMCwyLDBWMTUuOTRIMTBWMThIN2EzLDMsMCwwLDEtMy0zVjhIMzJ2N2EzLDMsMCwwLDEtMywzSDI4djJoMWE1LDUsMCwwLDAsNS01VjdBMSwxLDAsMCwwLDMzLDZaTTIyLDZIMTRWNC40M0EuNDUuNDUsMCwwLDEsMTQuNDUsNGg3LjExYS40My40MywwLDAs''@;'; put 'put ''MSwuNDQuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbjxwYXRoIGQ9Ik0zMCwxOEE0LjA2LDQuMDYsMCwwLDAsMzQsMTRWNkgyNFY0LjQzQTIuNDQsMi40NCwwLDAsMCwyMS41NSwyaC03LjFBMi40NCwyLjQ0LDAsMCwwLDEyLDQuNDNWNkgydjhB''@;'; put 'put ''NC4wNiw0LjA2LDAsMCwwLDYuMDUsMThoNFYxNS45MmgydjUuN2ExLDEsMCwxLDEtMiwwVjIwLjA2SDYuMDZBNi4wNiw2LjA2LDAsMCwxLDIsMTguNDl2OS40NWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTguNDlhNiw2LDAsMCwxLTQuMDYsMS41N0gyOFYxOFpNMTQsNC40M0Eu''@;'; put 'put ''NDUuNDUsMCwwLDEsMTQuNDUsNGg3LjFhLjQ1LjQ1LDAsMCwxLC40NS40M1Y2SDE0Wk0yNiwyMS42MmExLDEsMCwxLDEtMiwwVjIwLjA2SDE0VjE4SDI0VjE1LjkyaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVDb2xvclBpY2tlcj0o''@;'; put 'put ''MCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsMTAuMDVhNS4wNyw1LjA3LDAsMCwwLC4xLTcuMTdBNS4wNiw1LjA2LDAsMCwwLDI2LDNMMjAuNzgsOC4xNWEyLjEzLDIuMTMsMCwwLDEtMywwbC0uNjctLjY3TDE1LjcyLDguOTIsMjcuMDgsMjAuMjhsMS40Mi0xLjQyLS42Ny0uNjdhMi4x''@;'; put 'put ''MywyLjEzLDAsMCwxLDAtM1pNMjYuNDQsMTMuOGE0LjA3LDQuMDcsMCwwLDAtMS4wOCwxLjkybC01LjA4LTUuMDhBNC4wNyw0LjA3LDAsMCwwLDIyLjIsOS41Nmw1LjE2LTUuMTdhMy4wOSwzLjA5LDAsMCwxLDQuMzUtLjEsMy4wOSwzLjA5LDAsMCwxLS4xLDQuMzVaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik03LjMsMzEuNTFhMiwyLDAsMSwxLTIuODMtMi44M0wxOC41OCwxNC41N2wtMS40Mi0xLjQxTDMuMDUsMjcuMjdhNCw0LDAsMCwwLS42OCw0LjhMLjg5LDMzLjU1QTEsMSwwLDAsMCwuODksMzVhMSwxLDAsMCwwLDEu''@;'; put 'put ''NDIsMGwxLjQzLTEuNDRhMy45MywzLjkzLDAsMCwwLDIuMDkuNiw0LjA2LDQuMDYsMCwwLDAsMi44OC0xLjJMMjIuODIsMTguODEsMjEuNDEsMTcuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuPHBhdGggZD0iTTMzLjczLDIuMTFhNC4wOSw0LjA5''@;'; put 'put ''LDAsMCwwLTUuNzYuMUwyMi44MSw3LjM4YTMuMTMsMy4xMywwLDAsMS00LjMuMTFMMTcuMDksOC45MSwyNywxOC43OWwxLjQyLTEuNDJBMy4xOCwzLjE4LDAsMCwxLDI4LjQ2LDEzbDUuMTctNS4xN0E0LjA4LDQuMDgsMCwwLDAsMzMuNzMsMi4xMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMjIuMTgsMTYuNzksNy40NiwzMS41MWEyLDIsMCwxLDEtMi44Mi0yLjgzTDE5LjM1LDE0bC0xLjQxLTEuNDFMMy4yMiwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwxLjA2LDMzLjU1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLDEuNDEs''@;'; put 'put ''MGwxLjQ0LTEuNDRhMy45MywzLjkzLDAsMCwwLDIuMDkuNiw0LjA2LDQuMDYsMCwwLDAsMi44OC0xLjJMMjMuNiwxOC4yMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZD0oMCxhLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMjIuNiw0SDIxLjU1YTMuODksMy44OSwwLDAsMC03LjMxLDBIMTMuNEEyLjQxLDIuNDEsMCwwLDAsMTEsNi40VjEwSDI1VjYuNEEyLjQxLDIuNDEsMCwwLDAsMjIuNiw0Wk0yMyw4SDEzVjYuMjVBLjI1LjI1LDAsMCwxLDEzLjI1LDZoMi42OWwuMTItMS4xMUExLjI0LDEuMjQsMCww''@;'; put 'put ''LDEsMTYuNjEsNGEyLDIsMCwwLDEsMy4xNSwxLjE4bC4wOS44NGgyLjlhLjI1LjI1LDAsMCwxLC4yNS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjI1LDE4LjA2SDIxLjMzbDIuODQtMi44M2ExLDEsMCwxLDAtMS40Mi0x''@;'; put 'put ''LjQyTDE3LjUsMTkuMDZsNS4yNSw1LjI1YTEsMSwwLDAsMCwuNzEuMjksMSwxLDAsMCwwLC43MS0xLjdsLTIuODQtMi44NEgzMy4yNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjksMTZoMlY2LjY4QTEu''@;'; put 'put ''NjYsMS42NiwwLDAsMCwyOS4zNSw1SDI3LjA4VjdIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbjxwYXRoIGQ9Ik0yOSwzMUg3VjdIOVY1SDYuNjRBMS42NiwxLjY2LDAsMCwwLDUsNi42N1YzMS4zMkExLjY2LDEuNjYsMCwwLDAsNi42NSwzM0gy''@;'; put 'put ''OS4zNkExLjY2LDEuNjYsMCwwLDAsMzEsMzEuMzNWMjIuMDZIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxsLkNsclNoYXBlRHJhZ0hhbmRsZT0oMCxhLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxNSIgY3k9IjEyIiByPSIxLjUiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE1IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxMiIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjI0IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMTgiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxsLkNsclNoYXBlRmlsdGVyMj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsMTFIM2ExLDEsMCwwLDAsMCwy''@;'; put 'put ''SDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yOCwxN0g4YTEsMSwwLDAsMCwwLDJIMjhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu''@;'; put 'put ''PHBhdGggZD0iTTIzLDIzSDEzYTEsMSwwLDAsMCwwLDJIMjNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVNb29uPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwyNy4xOWExLDEsMCwwLDAtMS0u''@;'; put 'put ''NTZjLS4yOCwwLS41NiwwLS44NSwwQTExLDExLDAsMCwxLDI0LjkyLDUuNjFhMSwxLDAsMCwwLC42MS0xLDEsMSwwLDAsMC0uNjctLjkxLDE0LjcsMTQuNywwLDAsMC01LS44NywxNS4xMiwxNS4xMiwwLDAsMCwwLDMwLjI0LDE0Ljc4LDE0Ljc4LDAsMCwwLDExLTQuODFBMSwxLDAsMCwwLDMx''@;'; put 'put ''LDI3LjE5Wk0xOS44OSwzMS4xMmExMy4xMiwxMy4xMiwwLDAsMSwwLTI2LjI0LDExLjgxLDExLjgxLDAsMCwxLDIsLjE2LDEzLDEzLDAsMCwwLDUuNzIsMjMuNTNBMTIuNzUsMTIuNzUsMCwwLDEsMTkuODksMzEuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbjxwYXRoIGQ9Ik0yOS4yLDI2LjcyQTEyLjA3LDEyLjA3LDAsMCwxLDIyLjksNC40NCwxMy42OCwxMy42OCwwLDAsMCwxOS40OSw0YTE0LDE0LDAsMCwwLDAsMjgsMTMuODIsMTMuODIsMCwwLDAsMTAuOS01LjM0QTExLjcxLDExLjcxLDAsMCwxLDI5LjIsMjYuNzJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVTdW49KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDYuMzFhMSwxLDAsMCwwLDEtMVYxLjkxYTEsMSwwLDAsMC0yLDB2My40QTEsMSwwLDAsMCwxOCw2LjMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMTgsMjkuNjlhMSwxLDAsMCwwLTEsMXYzLjRhMSwxLDAsMCwwLDIsMHYtMy40QTEsMSwwLDAsMCwxOCwyOS42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuPHBhdGggZD0iTTguMzIs''@;'; put 'put ''OS43NEExLDEsMCwwLDAsOSwxMGExLDEsMCwwLDAsLjcxLS4yOSwxLDEsMCwwLDAsMC0xLjQyTDcuMzMsNS45MkExLDEsMCwwLDAsNS45Miw3LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI3LjY4LDI2LjI2YTEsMSwwLDEsMC0x''@;'; put 'put ''LjQyLDEuNDJsMi40MSwyLjRhMSwxLDAsMCwwLC43MS4zLDEsMSwwLDAsMCwuNy0uMywxLDEsMCwwLDAsMC0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTYuMzEsMThhMSwxLDAsMCwwLTEtMUgxLjkxYTEsMSwwLDAsMCwwLDJo''@;'; put 'put ''My40QTEsMSwwLDAsMCw2LjMxLDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTM0LjA5LDE3aC0zLjRhMSwxLDAsMSwwLDAsMmgzLjRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC02IiAvPjxwYXRoIGQ9Ik04LjMyLDI2LjI2bC0yLjQsMi40MWExLDEsMCwwLDAsLjcsMS43MSwxLDEsMCwwLDAsLjcxLS4zbDIuNDEtMi40YTEsMSwwLDEsMC0xLjQyLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMjcsMTBh''@;'; put 'put ''MSwxLDAsMCwwLC43MS0uMjlsMi40LTIuNDFhMSwxLDAsMCwwLDAtMS40MSwxLDEsMCwwLDAtMS40MSwwbC0yLjQxLDIuNGExLDEsMCwwLDAsMCwxLjQyQTEsMSwwLDAsMCwyNywxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0xOC4x''@;'; put 'put ''Myw3Ljc1YTEwLjEzLDEwLjEzLDAsMSwwLDEwLDEwLjEzQTEwLjA4LDEwLjA4LDAsMCwwLDE4LjEzLDcuNzVabTAsMTguMjVhOC4xMyw4LjEzLDAsMSwxLDgtOC4xMkE4LjA4LDguMDgsMCwwLDEsMTguMTMsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMTgsNi40MmExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMFY1LjQyQTEsMSwwLDAsMCwxOCw2LjQyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjkuNThhMSwxLDAsMCwwLTEsMXYzLjUxYTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWMzAuNThBMSwxLDAsMCwwLDE4LDI5LjU4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNOC40LDkuODFBMSwxLDAsMCwwLDkuODEsOC40TDcuMzMsNS45MkExLDEsMCwwLDAsNS45Miw3LjMzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNiwyNi4xOWExLDEsMCwwLDAtMS40MSwxLjQxbDIuNDgsMi40OGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNNi40MiwxOGExLDEsMCwwLDAtMS0x''@;'; put 'put ''SDEuOTFhMSwxLDAsMCwwLDAsMkg1LjQyQTEsMSwwLDAsMCw2LjQyLDE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdIMzAuNThhMSwxLDAsMCwwLDAsMmgzLjUxYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC02IiAvPjxwYXRoIGQ9Ik04LjQsMjYuMTksNS45MiwyOC42N2ExLDEsMCwwLDAsMS40MSwxLjQxTDkuODEsMjcuNkExLDEsMCwwLDAsOC40LDI2LjE5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNyIgLz48cGF0aCBkPSJNMjcuNiw5Ljgx''@;'; put 'put ''bDIuNDgtMi40OGExLDEsMCwwLDAtMS40MS0xLjQxTDI2LjE5LDguNEExLDEsMCwwLDAsMjcuNiw5LjgxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOCIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxMCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtOSIgLz4nKSxsLkNsclNoYXBlV2FuZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LjEsNCwzMS43MSwxLjZhMS44MywxLjgzLDAsMCwwLTEuMzEtLjU0aDBhMi4wNSwyLjA1LDAsMCwwLTEuNDUu''@;'; put 'put ''NjJMMS43NiwyOS4yM0EyLDIsMCwwLDAsMS42OCwzMmwyLjQsMi40M0ExLjgzLDEuODMsMCwwLDAsNS4zOSwzNWgwYTIuMDUsMi4wNSwwLDAsMCwxLjQ1LS42MkwzNCw2Ljc5QTIsMiwwLDAsMCwzNC4xLDRaTTUuNDIsMzIuOTMsMy4xNiwzMC42NWgwTDI0LjExLDkuNDNsMi4yNSwyLjI4Wk0z''@;'; put 'put ''Mi42MSw1LjM5bC01LjEyLDUuMThMMjUuMjQsOC4yOWw1LjEzLTUuMiwyLjI1LDIuMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjUzLDIwLjQ3bDIuMDktMi4wOWEuOC44LDAsMCwwLTEuMTMtMS4xM2wt''@;'; put 'put ''Mi4wOSwyLjA5LTIuMDktMi4wOWEuOC44LDAsMCwwLTEuMTMsMS4xM2wyLjA5LDIuMDktMi4wOSwyLjA5YS44LjgsMCwwLDAsMS4xMywxLjEzbDIuMDktMi4wOSwyLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLTEuMTNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0Ljc4LDYuNTFhLjguOCwwLDAsMCwxLjEzLDBMMTcuNCw1bDEuNDksMS40OUEuOC44LDAsMCwwLDIwLDUuMzhMMTguNTQsMy44OSwyMCwyLjRhLjguOCwwLDAsMC0xLjEzLTEuMTNMMTcuNCwyLjc2LDE1LjkxLDEuMjdBLjguOCwwLDEsMCwx''@;'; put 'put ''NC43OCwyLjRsMS40OSwxLjQ5TDE0Ljc4LDUuMzhBLjguOCwwLDAsMCwxNC43OCw2LjUxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik04LjMzLDE1LjI2YS44LjgsMCwwLDAsMS4xMywwbDEuMTYtMS4xNiwxLjE2''@;'; put 'put ''LDEuMTZhLjguOCwwLDEsMCwxLjEzLTEuMTNMMTEuNzYsMTNsMS4xNi0xLjE2YS44LjgsMCwxLDAtMS4xMy0xLjEzbC0xLjE2LDEuMTZMOS40NiwxMC42OGEuOC44LDAsMSwwLTEuMTMsMS4xM0w5LjQ5LDEzLDguMzMsMTQuMTNBLjguOCwwLDAsMCw4LjMzLDE1LjI2WiIvPicpLGwuQ2xyU2hh''@;'; put 'put ''cGVDdXJzb3JNb3ZlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC44NSwxMi44OWExLDEsMCwwLDAtMS40MiwwLDEsMSwwLDAsMCwwLDEuNDFMMzAuMTQsMTdIMTlWNS44NmwyLjY5LDIuN2ExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDJMMTgsMiwxMi44OSw3LjE1YTEs''@;'; put 'put ''MSwwLDAsMC0uMjkuNzEsMSwxLDAsMCwwLDEuNzEuN0wxNyw1Ljg2VjE3SDUuODZsMi43LTIuNjlhMSwxLDAsMCwwLDAtMS40MSwxLDEsMCwwLDAtMS40MiwwTDIsMThsNS4xNCw1LjExYTEsMSwwLDAsMCwuNzEuMjksMSwxLDAsMCwwLC43LTEuNzFMNS44NiwxOUgxN1YzMC4xNGwtMi42OS0y''@;'; put 'put ''LjdhMSwxLDAsMCwwLTEuNzEuNywxLDEsMCwwLDAsLjI5LjcxTDE4LDM0bDUuMTEtNS4xNGExLDEsMCwwLDAsMC0xLjQyLDEsMSwwLDAsMC0xLjQxLDBMMTksMzAuMTRWMTlIMzAuMTRsLTIuNywyLjY5YTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjI5TDM0LDE4WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZUNsb25lPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LDZIMjJ2NGgyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMmg0VjIySDZaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTJIMTRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRBMiwyLDAsMCwwLDMwLDEyWm0wLDE4SDE0VjE0SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+PHBvbHlnb24gcG9pbnRzPSIyMSAyOCAyMyAyOCAyMyAyMyAyOCAyMyAyOCAyMSAyMyAyMSAyMyAxNiAyMSAxNiAyMSAyMSAxNiAyMSAxNiAyMyAyMSAyMyAyMSAyOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTI0LDEwVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMmg0VjEyYTIsMiwwLDAsMSwyLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAs''@;'; put 'put ''MCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJaTTI4LDIzSDIzdjVIMjFWMjNIMTZWMjFoNVYxNmgydjVoNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZURldGFpbHM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIySDRWOEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDE0SDI3YTEsMSwwLDAsMCww''@;'; put 'put ''LTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTksMThIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0''@;'; put 'put ''aCBkPSJNOSwyMkgxOWExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCww''@;'; put 'put ''LDAsMzIsNlpNMTksMjJIOWExLDEsMCwwLDEsMC0ySDE5YTEsMSwwLDAsMSwwLDJabTgtNEg5YTEsMSwwLDAsMSwwLTJIMjdhMSwxLDAsMCwxLDAsMlptMC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''Lz4nKSxsLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj0oMCxhLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMiIgY3k9IjI0IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNiIgLz4nKSxsLkNsclNoYXBlRXJhc2VyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNS42MiwxMmEyLjgyLDIuODIsMCwwLDAtLjg0LTJMMjcuNDksMi42NWEyLjksMi45LDAsMCwwLTQsMEwyLjgzLDIzLjI4YTIuODQsMi44NCwwLDAsMCwwLDRMNy41MywzMkgz''@;'; put 'put ''YTEsMSwwLDAsMCwwLDJIMjhhMSwxLDAsMCwwLDAtMkgxNi43NGwxOC0xOEEyLjgyLDIuODIsMCwwLDAsMzUuNjIsMTJaTTEzLjkxLDMySDEwLjM2TDQuMjUsMjUuODlhLjg0Ljg0LDAsMCwxLDAtMS4xOWw1LjUxLTUuNTIsOC40OSw4LjQ4Wk0zMy4zNywxMi41NCwxOS42NiwyNi4yNWwtOC40''@;'; put 'put ''OC04LjQ5LDEzLjctMTMuN2EuODYuODYsMCwwLDEsMS4xOSwwbDcuMyw3LjI5YS44Ni44NiwwLDAsMSwuMjUuNkEuODIuODIsMCwwLDEsMzMuMzcsMTIuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMzJIMTUuMzNMMTksMjgu''@;'; put 'put ''MzdsLTkuOS05LjlMMy41NCwyNGExLjgzLDEuODMsMCwwLDAsMCwyLjZMOSwzMkgzYTEsMSwwLDAsMCwwLDJIMjhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjA4LDEwLjY1bC03LjMtNy4zYTEuODMsMS44Myww''@;'; put 'put ''LDAsMC0yLjYsMEwxMC40NywxNy4wNmw5LjksOS45TDM0LjA4LDEzLjI1QTEuODUsMS44NSwwLDAsMCwzNC4wOCwxMC42NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZUxhbmRzY2FwZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJN''@;'; put 'put ''MzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMjJhLjgyLjgyLDAsMCwwLC41NS0u''@;'; put 'put ''MjEuOC44LDAsMCwwLDAtMS4xM0w3LjgzLDE4LjhIMjguMTdsLTEuNzIsMS44NmEuOC44LDAsMCwwLDAsMS4xM0EuODIuODIsMCwwLDAsMjcsMjJhLjc4Ljc4LDAsMCwwLC41OC0uMjZMMzEuMDksMThsLTMuNDctMy43NGEuNzkuNzksMCwwLDAtMS4xMywwLC44LjgsMCwwLDAsMCwxLjEzbDEu''@;'; put 'put ''NzIsMS44Nkg3LjgzbDEuNzItMS44NmEuOC44LDAsMCwwLDAtMS4xMy43OS43OSwwLDAsMC0xLjEzLDBMNC45MSwxOGwzLjQ3LDMuNzRBLjc4Ljc4LDAsMCwwLDksMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIsNkg0QTIsMiww''@;'; put 'put ''LDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTI3Ljc3LDIxLjg4YTEsMSwwLDAsMS0uNzMuMzIsMSwxLDAsMCwxLS42OC0uMjcsMSwxLDAsMCwxLS4wNi0xLjQxTDI3LjcxLDE5SDguMjlMOS43LDIwLjUyYTEsMSwwLDAsMS0uMDYs''@;'; put 'put ''MS40MUExLDEsMCwwLDEsOSwyMi4yYTEsMSwwLDAsMS0uNzMtLjMyTDQuNjQsMThsMy41OS0zLjg4QTEsMSwwLDAsMSw5LjcsMTUuNDhMOC4yOSwxN0gyNy43MUwyNi4zLDE1LjQ4YTEsMSwwLDAsMSwxLjQ3LTEuMzZMMzEuMzYsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVQYXN0ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cmVjdCB4PSIzMCIgeT0iMTgiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwzMEgyOHYyaDJhMiwyLDAsMCwwLDItMlYyNkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNCwy''@;'; put 'put ''MlY2YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw2VjIyYTIsMiwwLDAsMCwyLDJIMjJBMiwyLDAsMCwwLDI0LDIyWk02LDZIMjJWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTE0LDI2SDEydjRhMiwyLDAsMCwwLDIsMmg0VjMwSDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTMwLDEySDI2djJoNHYy''@;'; put 'put ''aDJWMTRBMiwyLDAsMCwwLDMwLDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cmVjdCB4PSIzMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4''@;'; put 'put ''djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48''@;'; put 'put ''cmVjdCB4PSIyMCIgeT0iMzAiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+PHBhdGggZD0iTTE0LDI2SDEydjRhMiwyLDAsMCwwLDIsMmg0VjMwSDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIg''@;'; put 'put ''Lz4nKSxsLkNsclNoYXBlUG9ydHJhaXQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LjM0LDI2LjQ1YS44LjgsMCwwLDAtMS4xMywwLC43OS43OSwwLDAsMCwwLDEuMTNMMTgsMzEuMDlsMy43NC0zLjQ3YS43OS43OSwwLDAsMCwuMDUtMS4xMy44LjgsMCwwLDAtMS4xMywwTDE4Ljgs''@;'; put 'put ''MjguMTdWNy44M2wxLjg2LDEuNzJhLjguOCwwLDEsMCwxLjA4LTEuMTdMMTgsNC45MSwxNC4yNiw4LjM4YS43OS43OSwwLDAsMCwwLDEuMTMuOC44LDAsMCwwLDEuMTMsMEwxNy4yLDcuODNWMjguMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0''@;'; put 'put ''aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJabTAsMzBIOFY0SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAs''@;'; put 'put ''Niw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0yMC41MiwyNi4zYTEsMSwwLDAsMSwxLjM2LDEuNDdMMTgsMzEuMzZsLTMuODgtMy41OWExLDEsMCwwLDEsMS4zNi0xLjQ3TDE3LDI3LjcxVjguMjlMMTUuNDgsOS43YTEsMSwwLDAsMS0xLjM2''@;'; put 'put ''LTEuNDdMMTgsNC42NGwzLjg4LDMuNTlhMSwxLDAsMCwxLC4wNSwxLjQxLDEsMSwwLDAsMS0uNzMuMzIsMSwxLDAsMCwxLS42OC0uMjZMMTksOC4yOVYyNy43MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZVRyZWVWaWV3PSgwLGEuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwzMkgxMWExLDEsMCwwLDEtMS0xVjI3YTEsMSwwLDAsMSwxLTFoNGExLDEsMCwwLDEsMSwxdjRBMSwxLDAsMCwxLDE1LDMyWm0tMy0yaDJWMjhIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJN''@;'; put 'put ''MTUsMTZIMTFhMSwxLDAsMCwwLTEsMXYxLjJINS44VjEySDdhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCw3LDZIM0ExLDEsMCwwLDAsMiw3djRhMSwxLDAsMCwwLDEsMUg0LjJWMjkuOGg2LjM2YS44LjgsMCwwLDAsMC0xLjZINS44VjE5LjhIMTBWMjFhMSwxLDAsMCwwLDEsMWg0YTEsMSww''@;'; put 'put ''LDAsMCwxLTFWMTdBMSwxLDAsMCwwLDE1LDE2Wk00LDhINnYySDRaTTE0LDIwSDEyVjE4aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzQsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzNBMSwxLDAsMCwwLDM0LDlaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsMThIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxyZWN0IHg9IjEwIiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgcng9IjEiIHJ5PSIxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAt''@;'; put 'put ''MSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44SDExYS44LjgsMCwxLDAsMC0xLjZINS44VjE5LjhIMTBWMjFhMSwxLDAsMCwwLDEsMWg0YTEsMSwwLDAsMCwxLTFWMTdBMSwxLDAsMCww''@;'; put 'put ''LDE1LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOEgxMHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCww''@;'; put 'put ''LTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMywyOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPicpLGwuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYj0oMCxhLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMjguMDksOS43NGE0LDQsMCwwLDAtMS4xNi4xOWMtLjE5LTEuMjQtMS41NS0yLjE4LTMuMjctMi4xOEE0LDQsMCwwLDAsMjIuMTMsOCwzLjM3LDMuMzcsMCwwLDAsMTksNi4zYTMuNDUsMy40NSwwLDAsMC0yLjg3LDEuMzIsMy42NSwzLjY1LDAsMCwwLTEuODkt''@;'; put 'put ''LjUxQTMuMDUsMy4wNSwwLDAsMCwxMSw5Ljg5di45MWMtMS4wNi40LTQuMTEsMS44LTQuOTEsNC44NHMuMzQsOCwyLjY5LDExLjc4YTI1LjIxLDI1LjIxLDAsMCwwLDUuOSw2LjQxLjkuOSwwLDAsMCwuNTMuMTdIMjUuNTVhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAs''@;'; put 'put ''My43NS02LjEzQTI1LjgsMjUuOCwwLDAsMCwzMS40MSwxOHYtNS41QTMuMDgsMy4wOCwwLDAsMCwyOC4wOSw5Ljc0Wk0yOS42MSwxOGEyNCwyNCwwLDAsMS0xLjQ3LDkuMTVBMTIuNDYsMTIuNDYsMCwwLDEsMjUuMiwzMi4ySDE1LjQ3YTIzLjc1LDIzLjc1LDAsMCwxLTUuMi01LjcyYy0yLjM3''@;'; put 'put ''LTMuODYtMy04LjIzLTIuNDgtMTAuMzlBNS43LDUuNywwLDAsMSwxMSwxMi43NnY3LjY1YS45LjksMCwwLDAsMS44LDBWOS44OWMwLS40Ny41OS0xLDEuNDYtMXMxLjQ5LjUyLDEuNDksMXY1LjcyaDEuOFY4LjgxYzAtLjI4LjU4LS43MSwxLjQ2LS43MXMxLjUzLjQ4LDEuNTMuNzV2Ni44OWgx''@;'; put 'put ''LjhWMTBsLjE3LS4xMmEyLjEsMi4xLDAsMCwxLDEuMTgtLjMyYy45MywwLDEuNS40NCwxLjUuNjhsMCw2LjVIMjdWMTEuODdhMS45MSwxLjkxLDAsMCwxLDEuMTItLjMzYy44NiwwLDEuNTIuNTEsMS41Mi45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PicpLGwuQ2xyU2hhcGVDdXJzb3JIYW5kT3Blbj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDYsOC41N0EzLjExLDMuMTEsMCwwLDAsMjcsNS43NWEzLjE5LDMuMTksMCwwLDAtNC42Ni0yLjY0LDMuMjksMy4yOSwwLDAsMC02LjQyLS43NiwzLjIzLDMuMjMsMCwwLDAtMS42Ni0u''@;'; put 'put ''NDZBMy4yNywzLjI3LDAsMCwwLDExLDUuMThWMTcuODRjLTEuMjgtMS42LTIuNTMtMy4xOC0yLjcyLTMuNDVBMy4xOSwzLjE5LDAsMCwwLDUuNTYsMTIuOWEzLjM3LDMuMzcsMCwwLDAtMy40NywzLjQ4QzIuMTgsMTguMTgsNS42NiwyNC41NCw4LDI4YzMuNTQsNS4yNCw2LjkyLDYsNy4wNyw2''@;'; put 'put ''bC4xOCwwSDI1LjU5YS45Mi45MiwwLDAsMCwuNTUtLjE5LDEzLjEzLDEzLjEzLDAsMCwwLDMuNzUtNi4xM2MxLTMuMDksMS41My03LjUzLDEuNTgtMTMuNTZaTTI4LjE4LDI3LjEyYTEyLjQ2LDEyLjQ2LDAsMCwxLTIuOTQsNS4wOEgxNS4zM2MtLjQ3LS4xNC0zLjA3LTEuMS01Ljg3LTUuMjVT''@;'; put 'put ''My45NCwxNy4yNywzLjg5LDE2LjI5YTEuNSwxLjUsMCwwLDEsLjQ1LTEuMTMsMS41MiwxLjUyLDAsMCwxLDEuMTQtLjQ2LDEuNDMsMS40MywwLDAsMSwxLjMyLjcxYy4yOS40MywyLjM2LDMsMy41Nyw0LjUzTDEyLjgsMTguM1Y1LjE4YTEuNDgsMS40OCwwLDEsMSwyLjk1LDBWMTYuMzJoMS44''@;'; put 'put ''di0xM2ExLjUxLDEuNTEsMCwwLDEsMywwVjE2LjQ1aDEuOFY2YTEuNDMsMS40MywwLDEsMSwyLjg1LDBWMTcuNDRIMjdWOC41NGExLjMzLDEuMzMsMCwwLDEsMi42NSwwdjUuNTVDMjkuNjIsMjAsMjkuMTQsMjQuMjEsMjguMTgsMjcuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlRmlsZVppcD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsMzAuMlYxMmwtOC4xLTcuOUg3LjhDNi44LDQuMSw2LDQuOSw2LDZjMCwwLDAsMCwwLDB2MjQuMmMwLDEsMC43LDEuOCwxLjcsMS44YzAsMCwwLjEsMCwwLjEsMGgyMC4z''@;'; put 'put ''XG5cdFx0YzEsMCwxLjgtMC43LDEuOC0xLjdDMzAsMzAuMywzMCwzMC4yLDMwLDMwLjJ6IE0yMiw2LjZsNS42LDUuNEgyMlY2LjZ6IE0yOCwzMEg3LjlMOCw2aDEydjhoOFYzMHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNGMw''@;'; put 'put ''LDEuNywxLjMsMywzLDNzMy0xLjMsMy0zdi00aC02VjI0eiBNMTMuNCwyNHYtMi42aDMuMlYyNGMwLjEsMC45LTAuNiwxLjctMS41LDEuN2MtMC45LDAuMS0xLjctMC42LTEuNy0xLjVcblx0XHRDMTMuNCwyNC4yLDEzLjQsMjQuMSwxMy40LDI0eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LjIsOWMwLTAuNi0wLjQtMS0xLTFIMTV2MmgyLjJDMTcuOCwxMCwxOC4yLDkuNiwxOC4yLDl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTIuNywxMGMtMC42LDAtMSwwLjQt''@;'; put 'put ''MSwxczAuNCwxLDEsMUgxNXYtMkgxMi43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE3LjIsMTRjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUiIC8+PHBhdGggZD0iTTExLjcsMTVjMCwwLjYsMC40LDEsMSwxSDE1di0yaC0yLjNDMTIuMiwxNCwxMS43LDE0LjQsMTEuNywxNXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0xNy4yLDE4YzAuNiwwLDEtMC40LDEtMXMtMC40''@;'; put 'put ''LTEtMS0xSDE1djJIMTcuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0xNSwyNS42YzAuOSwwLDEuNi0wLjcsMS42LTEuNnYtMi42aC0zLjJWMjRDMTMuNCwyNC45LDE0LjEsMjUuNiwxNSwyNS42eiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjExLjlMMjEuOSw0eiBNMTgsMjRjMCwxLjctMS4zLDMtMywzXG5cdFx0cy0zLTEuMy0zLTN2''@;'; put 'put ''LTRoNlYyNHogTTE3LjIsMTJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MmgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2LTJoLTIuMmMtMC42LDAtMS0wLjQtMS0xXG5cdFx0czAuNC0xLDEtMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFzMC40LTEsMS0xSDE1''@;'; put 'put ''VjhoMi4yYzAuNiwwLDEsMC40LDEsMXMtMC40LDEtMSwxSDE1djJIMTcuMnogTTIxLjksMTJWNi41bDUuNyw1LjVIMjEuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZUZpbHRlck9mZj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJN''@;'; put 'put ''MzQsNi40QzM0LDUuNiwzMy4zLDUsMzIuNSw1SDEwLjNsMiwySDMydjAuNmwtOS42LDkuNmwxLjQsMS40TDMzLjQsOUMzMy44LDguNiwzNCw4LjEsMzQsNy42VjYuNUMzNCw2LjUsMzQsNi40LDM0LDYuNHoiXG5cdFx0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0yLjcsM2wyLDJoLTFDMi45LDQuOSwyLjEsNS41LDIsNi4zdjEuMWMwLDAuNSwwLjIsMSwwLjYsMS40TDE0LDIwLjJ2MTAuM2wxLjksMC44VjE5LjRMNCw3LjVWN2gyLjdMMjAsMjAuM3YxMi45bDIsMC44XG5cdFx0YzAsMCwwLDAsMC0wLjFWMjIuM2wxMC4xLDEwLjFs''@;'; put 'put ''MS40LTEuNEw0LjEsMS42TDIuNywzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIzLjksMTguNkwxMC4zLDUuMWgyMi4yQzMzLjMsNSwzNCw1LjYsMzQsNi40YzAsMCwwLDAsMCwwLjF2MS4xYzAsMC41LTAuMiwxLTAuNiwxLjRMMjMu''@;'; put 'put ''OSwxOC42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMuNSwzMUw0LjEsMS42TDIuNiwzbDIuMSwyLjFIMy41QzIuNyw1LDIsNS42LDIsNi40YzAsMCwwLDAsMCwwLjF2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuNXYxMC4xbDgs''@;'; put 'put ''My40VjIyLjRcblx0bDEwLjEsMTAuMUwzMy41LDMxeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlUmVjeWNsZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNi40LDE3LjRjMC4yLDAuMSwwLjMsMC4xLDAuNSwwLjFjMC4yLDAsMC40''@;'; put 'put ''LTAuMSwwLjUtMC4xbDctNC4xYzAuMy0wLjIsMC41LTAuNSwwLjUtMC45YzAtMC40LTAuMi0wLjctMC41LTAuOUwxMS45LDEwXG5cdFx0TDE0LDYuMmMwLjQtMC43LDEtMS4zLDEuNy0xLjdjMi0xLjEsNC41LTAuMyw1LjYsMS43YzAuMywwLjUsMC45LDAuNiwxLjQsMC4zYzAsMCwwLDAsMC4x''@;'; put 'put ''LDBjMC40LTAuMywwLjUtMC45LDAuMy0xLjNcblx0XHRjLTAuNi0xLTEuNC0xLjktMi40LTIuNGMtMy0xLjYtNi43LTAuNi04LjMsMi40TDkuNiw5LjljLTAuMywwLjUtMC4xLDEuMSwwLjMsMS40bDIsMS4ybC00LDIuNFY4LjJjMC0wLjYtMC40LTEtMS0xXG5cdFx0QzYuNCw3LjMsNiw3Ljcs''@;'; put 'put ''Niw4LjN2OC4zQzYsMTYuOSw2LjIsMTcuMiw2LjQsMTcuNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4xLDIxbC0zLjUtNi4yYy0wLjEtMC4yLTAuNC0wLjQtMC42LTAuNWMtMC4zLTAuMS0wLjUsMC0wLjgsMC4xbC0yLjIsMS4z''@;'; put 'put ''VjExbDUuNSwzLjNjMC4xLDAsMC4xLDAuMSwwLjIsMC4xXG5cdFx0YzAuNSwwLjIsMS4xLDAsMS4zLTAuNWMwLjItMC41LDAtMS4xLTAuNS0xLjNsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwQzIzLjEsOC41LDIzLDguOCwyMyw5LjJ2OC4zYzAsMC40LDAuMSwwLjgsMC40LDFcblx0XHRj''@;'; put 'put ''MC4zLDAuMiwwLjcsMC4yLDEsMGwyLjktMS43bDMsNS4zYzAuNywxLjMsMC43LDIuOCwwLDQuMWMtMC42LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC41LDAtMS4yLDAuNC0xLjIsMVxuXHRcdGMwLjEsMC42LDAuNiwxLDEuMiwxaDAuOWMyLjEsMCw0LTEuMSw1LTIuOUMzMy4yLDI1LjIs''@;'; put 'put ''MzMuMiwyMi45LDMyLjEsMjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIuNCwyOC4ybC03LTQuMmMtMC4zLTAuMi0wLjctMC4yLTEsMGMtMC4zLDAuMi0wLjQsMC41LTAuNCwwLjl2My4zSDkuMWMtMS41LTAuMS0yLjktMC45LTMu''@;'; put 'put ''Ni0yLjNcblx0XHRjLTAuOC0xLjQtMC44LTMuMiwwLTQuNmMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLjEtMS4xLDQuNiwwLjEsNi42QzQuOSwyOC44LDcsMzAsOS4yLDMwSDE1XG5cdFx0YzAuNiwwLDEtMC40LDEtMXYtMi40bDQsMi40''@;'; put 'put ''bC01LjYsMy4zYy0wLjMsMC4yLTAuNSwwLjUtMC41LDAuOWMwLDAuNiwwLjUsMSwxLDFjMC4yLDAsMC4zLTAuMSwwLjUtMC4ybDctNC4yXG5cdFx0YzAuMi0wLjEsMC4zLTAuMiwwLjQtMC40QzIzLjEsMjksMjIuOSwyOC40LDIyLjQsMjguMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMC44LDMuMWMtMy0xLjYtNi43LTAuNi04LjQsMi40bC0yLjIsMy44bC0yLTEuMUM4LjIsOCw4LDgsNy45LDhDNy40LDgsNyw4LjQsNyw4Ljl2Ny4yYzAsMC4zLDAuMSwwLjYsMC40LDAuOFxuXHRcdGMwLjEsMC4xLDAuMywwLjEsMC40LDAu''@;'; put 'put ''MWMwLjIsMCwwLjMsMCwwLjQtMC4xbDYuMy0zLjZjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44TDEyLDEwLjNsMi4yLTMuOFxuXHRcdGMwLjQtMC43LDEtMS4zLDEuNy0xLjdjMi0xLjEsNC41LTAuMyw1LjYsMS43YzAuMywwLjUsMC45LDAuNiwxLjQsMC40''@;'; put 'put ''YzAuNS0wLjMsMC42LTAuOSwwLjQtMS40QzIyLjYsNC41LDIxLjgsMy42LDIwLjgsMy4xeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIuMiwyMS4xbC0zLTUuM2wyLjMtMS4zYzAuMy0wLjIsMC40LTAuNCwwLjQtMC44YzAtMC4zLTAuMi0w''@;'; put 'put ''LjYtMC40LTAuOGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFcblx0XHRjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXY3LjJjMCwwLjMsMC4yLDAuNiwwLjQsMC44YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMy0wLjEsMC40LTAuMWwyLjItMS4zbDMsNS4zXG5cdFx0''@;'; put 'put ''YzAuNywxLjIsMC43LDIuOCwwLDRjLTAuNywxLjItMS45LDEuOS0zLjIsMS45aC0wLjljLTAuNiwwLTEsMC40LTEsMWMwLDAuNiwwLjQsMSwxLDFoMC45YzIuMSwwLDQtMS4xLDUtM1xuXHRcdEMzMy4yLDI1LjMsMzMuMiwyMywzMi4yLDIxLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMS43LDI4LjRsLTYuMi0zLjZjLTAuMS0wLjEtMC4zLTAuMS0wLjQtMC4xYy0wLjUsMC0wLjksMC40LTAuOSwwLjl2Mi42SDkuM2MtMS41LDAtMi45LTAuOC0zLjYtMi4xXG5cdFx0Yy0wLjgtMS40LTAuOC0zLjEsMC00LjVjMC4zLTAuNSwwLjEt''@;'; put 'put ''MS4xLTAuNC0xLjRjLTAuNS0wLjMtMS4xLTAuMS0xLjQsMC40Yy0xLjIsMi0xLjIsNC41LDAsNi41YzEuMSwxLjksMy4xLDMuMSw1LjQsMy4xaDQuOHYyLjZcblx0XHRjMCwwLjMsMC4yLDAuNiwwLjQsMC44YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMSwwLDAuMywwLDAuNC0wLjFsNi4z''@;'; put 'put ''LTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOFxuXHRcdEMyMi4xLDI4LjgsMjEuOSwyOC41LDIxLjcsMjguNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksbC5DbHJTaGFwZVRyZWU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjYsMTEuN0My''@;'; put 'put ''OS4yLDUuOCwyNCwxLjcsMTgsMS43Yy03LjIsMC0xMyw1LjgtMTMsMTNjMCw2LjgsNS4zLDEyLjQsMTIsMTIuOXY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTV2LTJWMjJcblx0YzAsMCwwLDAsMC0wLjF2LTMuNmw0LjctNC43YzAuNC0wLjQsMC40LTEsMC0xLjRjLTAuNC0wLjQtMS0w''@;'; put 'put ''LjQtMS40LDBMMTksMTUuNnYtM2wtMy4zLTMuM2MtMC40LTAuNC0xLTAuNC0xLjQsMFxuXHRjLTAuNCwwLjQtMC40LDEsMCwxLjRsMi43LDIuN3Y2LjJsLTMuOC0zLjhjLTAuNC0wLjQtMS0wLjQtMS40LDBjLTAuNCwwLjQtMC40LDEsMCwxLjRsNS4yLDUuMnYzLjJjLTUuNi0wLjUtMTAtNS4y''@;'; put 'put ''LTEwLTEwLjlcblx0YzAtNi4xLDQuOS0xMSwxMS0xMXMxMSw0LjksMTEsMTFjMCw0LjktMy4zLDkuMi04LDEwLjZ2Mi4xQzI4LDI1LjcsMzIuMywxOC43LDMwLjYsMTEuN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQzEwLjgs''@;'; put 'put ''MS43LDQuOCw3LjMsNC41LDE0LjVDNC4yLDIxLjcsOS44LDI3LjcsMTcsMjh2LTUuMmwtNS4yLTUuMmMtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwXG5cdGMwLDAsMCwwLDAsMGwzLjgsMy44di02LjJsLTIuNy0yLjdjLTAuNC0wLjQtMC40LTEsMC0xLjRjMC40LTAu''@;'; put 'put ''NCwxLTAuNCwxLjQsMGMwLDAsMCwwLDAsMGwzLjMsMy4zdjNsMy4zLTMuM2MwLjQtMC40LDEtMC40LDEuNCwwXG5cdGMwLDAsMCwwLDAsMGMwLjQsMC40LDAuNCwxLDAsMS40TDE5LDE4LjhWMjhjNy4yLTAuMywxMi44LTYuMywxMi41LTEzLjVTMjUuMiwxLjcsMTgsMnoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDI4Yy0wLjMsMC0wLjYsMC0xLDB2NWMwLDAuNiwwLjQsMSwxLDFzMS0wLjQsMS0xdi01QzE4LjcsMjgsMTguMywyOCwxOCwyOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5D''@;'; put 'put ''bHJTaGFwZUZpc2g9KDAsYS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTEuNDkiIGN5PSIxNy41IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy40OCw5LjI5YTEsMSwwLDAsMC0xLDBjLTMuMzcsMi01LjkxLDUuODEt''@;'; put 'put ''Ni45LDcuNDVMMjQuODUsMThzLTEsMS42Mi0xLDEuNjJjLTEuNzYsMi40OS01LjEsNi4zNi04Ljc5LDYuMzYtNC42NSwwLTguNzUtNi4xNS05Ljg0LTcuOTQsMS4wOS0xLjc5LDUuMTgtNy45NCw5Ljg0LTcuOTQsMy41NCwwLDYuNzcsMy41OCw4LjU4LDYuMDdsLjI4LS40OHMuMzYtLjUxLjkz''@;'; put 'put ''LTEuMjVDMjIuNzIsMTEuNjQsMTkuMTgsOC4wNiwxNSw4LjA2Yy02LjU5LDAtMTEuNjcsOS4wNy0xMS44OCw5LjQ2TDIuODksMThsLjI3LjQ4Yy4yMS4zOSw1LjI5LDkuNDYsMTEuODgsOS40Niw1LjA2LDAsOS4yMi01LjM0LDExLThDMjYsMjAsMjcuMTgsMTgsMjcuMTgsMThoMGwuMDctLjEx''@;'; put 'put ''YTE4LjA2LDE4LjA2LDAsMCwxLDEuODgtMi43NXMwLDAsMCwwYTIwLjMxLDIwLjMxLDAsMCwxLDIuODYtM1YyMy44OGEyMC45MywyMC45MywwLDAsMS0zLjYxLTRsLS4xNi4yNmgwbC0xLDEuNTlhMTguNzQsMTguNzQsMCwwLDAsNS4yMSw0Ljk1LDEsMSwwLDAsMCwuNS4xNCwxLjEzLDEuMTMs''@;'; put 'put ''MCwwLDAsLjUtLjEzLDEsMSwwLDAsMCwuNS0uODdWMTAuMTZBMSwxLDAsMCwwLDMzLjQ4LDkuMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlRm9ybT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEsMTJIN2ExLDEsMCww''@;'; put 'put ''LDEtMS0xVjdBMSwxLDAsMCwxLDcsNkgyMWExLDEsMCwwLDEsMSwxdjRBMSwxLDAsMCwxLDIxLDEyWk04LDEwSDIwVjcuOTRIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMSwxNC4wOEg3YTEsMSwwLDAsMC0xLDFWMTlhMSwxLDAs''@;'; put 'put ''MCwwLDEsMUgxOC4zNkwyMiwxNi4zVjE1LjA4QTEsMSwwLDAsMCwyMSwxNC4wOFpNMjAsMThIOFYxNkgyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMS4wNiwzMS41MXYtLjA2bC4zMi0xLjM5SDRWNGgyMFYxNC4yNUwyNiwxMi4z''@;'; put 'put ''NlYzYTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiwzVjMxYTEsMSwwLDAsMCwxLDFoOEEzLjQ0LDMuNDQsMCwwLDEsMTEuMDYsMzEuNTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjIsMTkuMTdsLS43OC43OUExLDEsMCwwLDAs''@;'; put 'put ''MjIsMTkuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNiwyNi45NGExLDEsMCwwLDAsMSwxaDQuODRsLjMtMS4zLjEzLS41NSwwLS4wNUg4VjI0aDYuMzRsMi0ySDdhMSwxLDAsMCwwLTEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy40OSwxNi42NywzMC4xMiwxMy4zYTEuNjEsMS42MSwwLDAsMC0yLjI4LDBoMEwxNC4xMywyNy4wOSwxMywzMS45YTEuNjEsMS42MSwwLDAsMCwxLjI2LDEuOSwxLjU1LDEuNTUsMCwwLDAsLjMxLDAsMS4xNSwxLjE1LDAsMCww''@;'; put 'put ''LC4zNywwbDQuODUtMS4wN0wzMy40OSwxOWExLjYsMS42LDAsMCwwLDAtMi4yN1pNMTguNzcsMzAuOTFsLTMuNjYuODFMMTYsMjguMDksMjYuMjgsMTcuN2wyLjgyLDIuODJaTTMwLjIzLDE5LjM5bC0yLjgyLTIuODJMMjksMTVsMi44NCwyLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTYiIC8+JyksbC5DbHJTaGFwZUZ1ZWw9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjEyLDM0SDUuOUEyLjgxLDIuODEsMCwwLDEsMywzMS4xOVY0Ljg2QTIuOSwyLjksMCwwLDEsNiwyLjA3SDIwLjIyQTIuNzIsMi43MiwwLDAsMSwyMyw0Ljg2VjMxLjE5''@;'; put 'put ''QTIuODIsMi44MiwwLDAsMSwyMC4xMiwzNFpNNS45LDRBLjg3Ljg3LDAsMCwwLDUsNC44NlYzMS4xOWEuODcuODcsMCwwLDAsLjg3Ljg3SDIwLjEyYS45NC45NCwwLDAsMCwuOTUtLjg3VjQuODZBLjk0Ljk0LDAsMCwwLDIwLjEyLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjkuNTMsMzRBMy41LDMuNSwwLDAsMSwyNiwzMC41VjIzYTIsMiwwLDAsMC0yLTJIMjIuNTdhMSwxLDAsMCwxLDAtMkgyNGE0LDQsMCwwLDEsNCw0VjMwLjVhMS41LDEuNSwwLDAsMCwzLDBWMTcuM2wtMy4xMy03QTIuMjksMi4yOSwwLDAsMCwyNS44''@;'; put 'put ''LDloLS43M2ExLDEsMCwxLDEsMC0yaC43M2E0LjMsNC4zLDAsMCwxLDMuOTMsMi41NWwzLjIxLDcuMTZhMSwxLDAsMCwxLC4wOS40MVYzMC41QTMuNSwzLjUsMCwwLDEsMjkuNTMsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgs''@;'; put 'put ''OUg4QTEsMSwwLDEsMSw4LDdIMThhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xOCwxM0g4QTEsMSwwLDEsMSw4LDExSDE4QTEsMSwwLDEsMSwxOCwxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNSwxMi4wOGExLDEsMCwwLDEtMS0xdi02YTEsMSwwLDAsMSwyLDB2NkExLDEsMCwwLDEsMjUsMTIuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz4nKSxsLkNsclNoYXBlU25vd2ZsYWtlPSgwLGEuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOC4wNSwzMy42MWExLDEsMCwwLDEtMS0xVjMuMzdhMSwxLDAsMSwxLDEuOTUsMFYzMi42M0ExLDEsMCwwLDEsMTguMDUsMzMuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTguMDYsMTAuMDcs''@;'; put 'put ''MTQuNTIsNi41NGExLDEsMCwwLDEsMC0xLjQxLDEsMSwwLDAsMSwxLjQxLDBsMi4xMywyLjEyLDIuMTItMi4xMmExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAuODUsMzEu''@;'; put 'put ''MTdhMSwxLDAsMCwxLS43LS4yOUwxOCwyOC43NiwxNS45LDMwLjg4YTEsMSwwLDAsMS0xLjQxLDAsMSwxLDAsMCwxLDAtMS40MkwxOCwyNS45M2wzLjU0LDMuNTNhMSwxLDAsMCwxLDAsMS40MkExLDEsMCwwLDEsMjAuODUsMzEuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuOTIsMjYuNWExLDEsMCwwLDEtLjUtLjEzbC0yNi0xNUExLDEsMCwwLDEsNC4wNywxMGExLDEsMCwwLDEsMS4zNy0uMzZsMjYsMTVhMSwxLDAsMCwxLS41LDEuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIg''@;'; put 'put ''Lz48cGF0aCBkPSJNNiwxNS4zN2ExLDEsMCwwLDEtLjI2LTJsMi45LS43OEw3Ljg0LDkuNzNhMSwxLDAsMSwxLDEuOTMtLjUyTDExLjA3LDE0LDYuMjQsMTUuMzNBLjgyLjgyLDAsMCwxLDYsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0''@;'; put 'put ''aCBkPSJNMjcuMDUsMjcuNTRhMSwxLDAsMCwxLTEtLjc1TDI0LjgsMjJsNC44Mi0xLjNhMSwxLDAsMSwxLC41MiwxLjkzbC0yLjkuNzguNzgsMi45YTEsMSwwLDAsMS0uNzEsMS4yMkEuNzUuNzUsMCwwLDEsMjcuMDUsMjcuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNiIgLz48cGF0aCBkPSJNNC45NCwyNi41YTEsMSwwLDAsMS0uNS0xLjg3bDI2LTE1YTEsMSwwLDAsMSwxLjM2LjM2LDEsMSwwLDAsMS0uMzYsMS4zN2wtMjYsMTVBMSwxLDAsMCwxLDQuOTQsMjYuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik04LjgxLDI3LjU0YS43NS43NSwwLDAsMS0uMjYsMCwxLDEsMCwwLDEtLjcxLTEuMjJsLjc4LTIuOS0yLjktLjc4QTEsMSwwLDAsMSw1LDIxLjM4YTEsMSwwLDAsMSwxLjIzLS43MUwxMS4wNywyMmwtMS4zLDQuODJBMSwxLDAsMCwxLDguODEsMjcuNTRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz48cGF0aCBkPSJNMjkuODgsMTUuMzdhLjgyLjgyLDAsMCwxLS4yNiwwTDI0LjgsMTRsMS4yOS00LjgzQTEsMSwwLDEsMSwyOCw5LjczbC0uNzgsMi44OSwyLjkuNzhhMSwxLDAsMCwxLS4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+JyksbC5DbHJTaGFwZVRhYmxlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LDM0YTEsMSwwLDAsMS0xLTFWMi45MmExLDEsMCwwLDEsMiwwVjMzQTEsMSwwLDAsMSw4LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE3LDMzLjkyYTEsMSwwLDAsMS0xLTFWOS4xYTEsMSwwLDEsMSwyLDBWMzIuOTJBMSwxLDAsMCwxLDE3LDMzLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LDM0YTEsMSwwLDAsMS0xLTFW''@;'; put 'put ''OWExLDEsMCwwLDEsMiwwVjMzQTEsMSwwLDAsMSwyNiwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMy4xMSwxOGgtMjVhMSwxLDAsMSwxLDAtMmgyNWExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLjEsMjYuOTRIOC4xQTEsMSwwLDEsMSw4LjEsMjVoMjVhMSwxLDAsMSwxLDAsMS45MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMyw4LjkySDNBMSwxLDAsMSwxLDMsN0gzM2Ex''@;'; put 'put ''LDEsMCwxLDEsMCwxLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksbC5DbHJTaGFwZVZvbHVtZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuODgsMzJIMTJhNCw0LDAsMCwxLTQtNFYxMS40NkwyLjMxLDUuNzdhMSwxLDAsMCwxLS4y''@;'; put 'put ''Mi0xLjA5QTEsMSwwLDAsMSwzLDQuMDZIMjguODZhMSwxLDAsMCwxLDEsMVYyOEE0LDQsMCwwLDEsMjUuODgsMzJaTTUuNDMsNmw0LjI4LDQuMzRhLjc1Ljc1LDAsMCwxLC4yMS42M3YxN0EyLjEzLDIuMTMsMCwwLDAsMTIsMzBIMjUuODhBMi4xLDIuMSwwLDAsMCwyOCwyOFY2WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDE2YTEsMSwwLDAsMS0xLTFWNkgyOC44NmEuOTIuOTIsMCwwLDEtMS0uOSwxLDEsMCwwLDEsMS0xSDMzYTEsMSwwLDAsMSwxLDFWMTVBMSwxLDAsMCwxLDMzLDE2WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDExSDE4YTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNCwxNUgyMWExLDEsMCwxLDEsMC0ySDI0YTEsMSww''@;'; put 'put ''LDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjQsMTlIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTI0''@;'; put 'put ''LDI3SDE4YTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yNCwyM0gyMUExLDEsMCwxLDEsMjEsMjFIMjRBMSwxLDAsMSwxLDI0LDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTciIC8+JyksbC5DbHJTaGFwZUNyb3NzaGFpcnM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI5QTExLDExLDAsMSwxLDI5LDE4LDExLDExLDAsMCwxLDE4LDI5Wk0xOCw5YTksOSwwLDEsMCw5LDlBOSw5LDAsMCwwLDE4LDlaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjNhNSw1LDAsMSwxLDUtNUE1LDUsMCwwLDEsMTgsMjNabTAtOGEzLDMsMCwxLDAsMywzQTMsMywwLDAsMCwxOCwxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xOCw5YTEsMSwwLDAsMS0xLTFWMi44YTEsMSwwLDAsMSwyLDBWOEExLDEsMCwwLDEsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCwwLDEtMS0xVjI4YTEsMSwwLDAsMSwyLDB2NUExLDEsMCwwLDEs''@;'; put 'put ''MTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNOCwxOUgzLjE3YTEsMSwwLDAsMSwwLTJIOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjEs''@;'; put 'put ''MTlIMjhhMSwxLDAsMCwxLDAtMmg1LjFhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGwuQ2xyU2hhcGVDaXJjbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAs''@;'; put 'put ''MCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVEb3RDaXJjbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDExYTcsNywwLDEsMS03LDcsNyw3LDAsMCwxLDctNyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlQmV0YT0oMCxhLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNNy4yMSwxNC4wN2gzYTEuNjEsMS42MSwwLDAsMSwxLjgxLDEuNSwxLjQ0LDEuNDQsMCwwLDEtLjg0LDEuMzQsMS42NywxLjY3LDAsMCwxLDEuMSwxLjUzLDEuNzUsMS43NSwwLDAsMS0yLDEuNjNINy4yMVptMi43MSwyLjQyYy40OCwwLC44Mi0uMjguODItLjY3cy0u''@;'; put 'put ''MzQtLjY1LS44Mi0uNjVIOC40OXYxLjMyWm0uMiwyLjQ4YS43NS43NSwwLDEsMCwwLTEuNDdIOC40OVYxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xNC41NSwxNS4yM3YxLjJoM3YxLjE2aC0zdjEuMzJoMy4zM3YxLjE2SDEz''@;'; put 'put ''LjI2di02aDQuNjJ2MS4xNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMC40MSwxNS4yM0gxOC41NFYxNC4wN2g1djEuMTZIMjEuN3Y0Ljg0SDIwLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiLz5cbiAgPHBhdGggZD0iTTI4LDE5LjEySDI1LjMybC0uMzguOTVIMjMuNWwyLjQ0LTZoMS40NGwyLjQ1LDZIMjguMzhaTTI3LjU1LDE4bC0uODktMi4xOUwyNS43NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik04LjA2''@;'; put 'put ''LDMwYS44NC44NCwwLDAsMS0uMzgtLjA4QTEsMSwwLDAsMSw3LjA2LDI5VjI1aC00YTEsMSwwLDAsMS0xLTFWMTBhMSwxLDAsMCwxLDEtMWgzMGExLDEsMCwwLDEsMSwxVjI0YTEsMSwwLDAsMS0xLDFIMTMuNDhMOC43NywyOS43MUExLDEsMCwwLDEsOC4wNiwzMFptLTQtN2g0YTEsMSwwLDAs''@;'; put 'put ''MSwxLDF2Mi41OWwzLjMtMy4zYTEsMSwwLDAsMSwuNy0uMjloMTlWMTFoLTI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cblxuICA8cG9seWdvbiBwb2ludHM9IjI1LjgsMTggMjcuNSwxOCAyNi43LDE1LjgiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiLz5cblx0PHBhdGggZD0iTTEwLjQsMTcuNWMtMC4xLDAtMC4yLDAtMC4zLDBIOC41VjE5bDEuNiwwYzAuNCwwLjEsMC44LTAuMiwwLjktMC42QzExLjEsMTgsMTAuOCwxNy42LDEwLjQsMTcuNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIi''@;'; put 'put ''Lz5cblx0PHBhdGggZD0iTTEwLjcsMTUuOGMwLTAuNC0wLjMtMC43LTAuOC0wLjdIOC41djEuM2gxLjRDMTAuNCwxNi41LDEwLjcsMTYuMiwxMC43LDE1Ljh6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG5cdDxwYXRoIGQ9Ik0zMy4xLDloLTMwYy0wLjYsMC0x''@;'; put 'put ''LDAuNC0xLDF2MTRjMCwwLjYsMC40LDEsMSwxaDR2NGMwLDAuNCwwLjIsMC44LDAuNiwwLjlDNy44LDMwLDcuOSwzMCw4LjEsMzBjMC4zLDAsMC41LTAuMSwwLjctMC4zXG5cdFx0bDQuNy00LjdoMTkuNmMwLjYsMCwxLTAuNCwxLTFWMTBDMzQuMSw5LjQsMzMuNiw5LDMzLjEsOXogTTEwLjQs''@;'; put 'put ''MjAuMWMtMC4xLDAtMC4xLDAtMC4yLDBINy4ydi02aDNjMC45LTAuMSwxLjcsMC41LDEuOCwxLjRcblx0XHRjMCwwLDAsMC4xLDAsMC4xYzAsMC42LTAuMywxLjEtMC44LDEuM2MwLjYsMC4yLDEuMSwwLjgsMS4xLDEuNUMxMi4yLDE5LjQsMTEuNCwyMC4xLDEwLjQsMjAuMXogTTE3LjksMTUu''@;'; put 'put ''MmgtMy4zdjEuMmgzdjEuMmgtM3YxLjNcblx0XHRoMy4zdjEuMmgtNC42di02aDQuNlYxNS4yeiBNMjEuNywyMC4xaC0xLjN2LTQuOGgtMS45di0xLjJoNXYxLjJoLTEuOFYyMC4xeiBNMjguNCwyMC4xbC0wLjQtMWgtMi43bC0wLjQsMWgtMS40bDIuNC02aDEuNGwyLjUsNlxuXHRcdEgyOC40''@;'; put 'put ''eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuJyksbC5DbHJTaGFwZUZpcnN0QWlkPSgwLGEuY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsNkgyMy45MVY0LjVBMi41LDIuNSwwLDAsMCwyMS40MSwyaC03YTIuNSwyLjUsMCwwLDAtMi41LDIuNVY2SDRB''@;'; put 'put ''MiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTMuOTEsNC41YS41LjUsMCwwLDEsLjUtLjVoN2EuNS41LDAsMCwxLC41LjVWNmgtOFpNNCwyOFY4SDMyVjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIwLjE1LDI1LjJIMTYuNzRhMS4zLDEuMywwLDAsMS0xLjMtMS4zVjIxLjJoLTIuN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMTYuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMi43VjEyLjVhMS4zLDEuMywwLDAsMSwxLjMtMS4zaDMuNDFhMS4zLDEu''@;'; put 'put ''MywwLDAsMSwxLjI5LDEuM3YyLjdoMi43MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjMuNGExLjMsMS4zLDAsMCwxLTEuMjksMS4zSDIxLjQ0djIuN0ExLjMsMS4zLDAsMCwxLDIwLjE1LDI1LjJaTTE3LDIzLjZoMi44MXYtNGg0VjE2LjhoLTR2LTRIMTd2NEgxM3YyLjhoNFptNy4xMS02Ljha''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwy''@;'; put 'put ''LDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk0yNC42NCwxOS45YS41LjUsMCwwLDEtLjUuNWgtMy41djMuNWEuNS41LDAsMCwxLS41LjVoLTMuNGEuNS41LDAsMCwxLS41LS41VjIwLjRoLTMuNWEu''@;'; put 'put ''NS41LDAsMCwxLS41LS41VjE2LjVhLjUuNSwwLDAsMSwuNS0uNWgzLjVWMTIuNWEuNS41LDAsMCwxLC41LS41aDMuNGEuNS41LDAsMCwxLC41LjVWMTZoMy41YS41LjUsMCwwLDEsLjUuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksbC5DbHJTaGFw''@;'; put 'put ''ZUNvbG9yUGFsZXR0ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuNTQsMjMuMDVhMy4yMiwzLjIyLDAsMCwxLTMtMS43N0EzLjA1LDMuMDUsMCwwLDEsMTguNSwxOWEzLjc0LDMuNzQsMCwwLDEsMS45NS0yLjA2QTMuNCwzLjQsMCwwLDEsMjUsMTguM2EzLDMsMCwwLDEsLjA4LDIu''@;'; put 'put ''MzIsMy42OSwzLjY5LDAsMCwxLTIsMi4wN0EzLjg1LDMuODUsMCwwLDEsMjEuNTQsMjMuMDVabS41NC00LjkxYTIuNDEsMi40MSwwLDAsMC0xLC4yMWgwQTIuMTMsMi4xMywwLDAsMCwyMCwxOS41MWExLjM3LDEuMzcsMCwwLDAsMCwxLjA5LDEuODEsMS44MSwwLDAsMCwyLjQ1LjYzLDIuMSwy''@;'; put 'put ''LjEsMCwwLDAsMS4xMi0xLjE1LDEuNCwxLjQsMCwwLDAsMC0xLjFBMS41OSwxLjU5LDAsMCwwLDIyLjA4LDE4LjE0Wm0tMS4yOS0uNTJoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xNi4xOSwzMy44N0ExMy43MiwxMy43Miww''@;'; put 'put ''LDAsMSw2LjQsMzAsMTMuODYsMTMuODYsMCwwLDEsMiwyMGMwLTQuNCwyLTguODQsNS42OC0xMi41YTE4LjIsMTguMiwwLDAsMSwxMy4xLTUuMzdoLjEyYzMuMzMsMCw2Ljg1LDEuNDksNy4yNCw0LjczLjIxLDEuNzctLjU5LDMuNDctMS4yOSw1LS41NSwxLjE3LTEuMTEsMi4zOS0uNzIsMi44''@;'; put 'put ''MXMxLC4xMiwyLjA5LS4yYTYuMjcsNi4yNywwLDAsMSwzLjM4LS4zNiwzLDMsMCwwLDEsMS44NywxLjU2Yy45NCwxLjgzLjQ3LDQuNjctLjIzLDYuNTRoMEExNy4zOCwxNy4zOCwwLDAsMSwyOSwyOC43NCwxOS40MywxOS40MywwLDAsMSwxNi4xOSwzMy44N1pNMjAuNzgsNC4xNkExNi4yMiwx''@;'; put 'put ''Ni4yMiwwLDAsMCw5LjA5LDlDNS43OSwxMi4yMyw0LDE2LjE2LDQsMjBBMTEuOTIsMTEuOTIsMCwwLDAsNy44LDI4LjZjNS4zOCw1LjI1LDE0LjYyLDMuNTUsMTkuODctMS4zM2ExNS41MiwxNS41MiwwLDAsMCwzLjctNS43NWgwYy43LTEuOS44NC0zLjkyLjMyLTQuOTJhMSwxLDAsMCwwLS42''@;'; put 'put ''MS0uNTUsNC44Niw0Ljg2LDAsMCwwLTIuMjkuMzVjLTEuMzEuMzktMywuODktNC4xMi0uMzUtMS4zMi0xLjQtLjQ2LTMuMjUuMzctNWE3LjkzLDcuOTMsMCwwLDAsMS4xMS0zLjljLS4yNC0yLTIuODEtMi45NS01LjI2LTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuODcsMjYuNjVBMi41OSwyLjU5LDAsMCwwLDIyLjM1LDI1TDIyLDI0LjlsLS40NiwxLjUzLjE2LDBhMSwxLDAsMCwxLC42LjYxYy4xNy42LS40MSwxLjMxLTEuMjYsMS41NXMtMS43MS0uMDctMS44OC0uNjZsLTEuNTQuNDNoMGEyLjgzLDIuODMsMCww''@;'; put 'put ''LDAsMi44NCwxLjkxLDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMjMuODcsMjYuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTUuMDcsMjUuNTloMGEyLjczLDIuNzMsMCwwLDAtMi4yNC0xLjg0bC0uMjcsMS41OGExLjEy''@;'; put 'put ''LDEuMTIsMCwwLDEsMSwuN2MuMTcuNTktLjQxLDEuMy0xLjI2LDEuNTRBMS45MiwxLjkyLDAsMCwxLDExLDI3LjUyYTEsMSwwLDAsMS0uNi0uNjFzMC0uMDksMC0uMTNsLTEuNTguMTZhMiwyLDAsMCwwLC4wNi40MUEyLjU5LDIuNTksMCwwLDAsMTAuMzcsMjlhMy4zNiwzLjM2LDAsMCwwLDEu''@;'; put 'put ''MzEuMjUsMy43LDMuNywwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTUuMDcsMjUuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTAuNzgsMTkuMTdhMi41OSwyLjU5LDAsMCwwLTEuNTItMS42NSwyLjkxLDIuOTEsMCwwLDAtLjUt''@;'; put 'put ''LjE2bC0uMzcsMS41NmExLjIxLDEuMjEsMCwwLDEsLjI1LjA4LDEsMSwwLDAsMSwuNi42Yy4xNy42LS40MSwxLjMxLTEuMjYsMS41NXMtMS43MS0uMDYtMS44OC0uNjZhLjg2Ljg2LDAsMCwxLDAtLjM5bC0xLjU2LS4zNGEyLjQsMi40LDAsMCwwLDAsMS4xNkEyLjgzLDIuODMsMCwwLDAsNy40''@;'; put 'put ''LDIyLjgzYTQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTAuNzgsMTkuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNMTMuNDUsMTEuNGEyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDEuMTcsMS4xNywwLDAsMC0uMi0uMDZs''@;'; put 'put ''LS41MiwxLjUxYS4zOC4zOCwwLDAsMSwuMSwwLDEsMSwwLDAsMSwuNi42Yy4xNy42LS40MSwxLjMxLTEuMjYsMS41NWEyLjA2LDIuMDYsMCwwLDEtMS4yOC0uMDUsMSwxLDAsMCwxLS42LS42MS44NS44NSwwLDAsMSwwLS4zMmwtMS41OC0uMTlhMi4zLDIuMywwLDAsMCwuMDYuOTRBMi41Niwy''@;'; put 'put ''LjU2LDAsMCwwLDguNzUsMTQuOGEzLjM3LDMuMzcsMCwwLDAsMS4zMS4yNiw0LDQsMCwwLDAsMS0uMTRBMywzLDAsMCwwLDEzLjQ1LDExLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMjEsNi43OGEyLjU2LDIuNTYsMCwwLDAt''@;'; put 'put ''MS41Mi0xLjY1bC0uMy0uMUwxOC43LDYuNTZsLjE1LDBhMSwxLDAsMCwxLC42LjYxYy4xNy42LS40MSwxLjMtMS4yNiwxLjU0cy0xLjcxLS4wNi0xLjg4LS42NWEuOS45LDAsMCwxLC4wNi0uNThMMTQuODksNi45YTIuNDcsMi40NywwLDAsMC0uMTIsMS42MywyLjg0LDIuODQsMCwwLDAsMi44''@;'; put 'put ''NCwxLjkxLDMuNTgsMy41OCwwLDAsMCwxLS4xNUEzLDMsMCwwLDAsMjEsNi43OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG5cbiAgPHBhdGggZD0iTTMyLjIzLDE0Ljg5Yy0yLjEtLjU2LTQuOTMsMS44LTYuMzQuMy0xLjcxLTEuODIsMi4yNy01LjUz''@;'; put 'put ''LDEuODYtOC45Mi0uMzMtMi43OC0zLjUxLTQuMDgtNi42Ni00LjFBMTguNSwxOC41LDAsMCwwLDcuNzQsNy41OWMtNi42NCw2LjU5LTguMDcsMTYtMS4zNywyMi40OCw2LjIxLDYsMTYuNjEsNC4yMywyMi42Ny0xLjRhMTcuNzMsMTcuNzMsMCwwLDAsNC4yMi02LjU0QzM0LjM0LDE5LjIzLDM0''@;'; put 'put ''LjQ0LDE1LjQ5LDMyLjIzLDE0Ljg5Wk05LjQsMTAuNTdhMi4yMywyLjIzLDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MSwyLjUzQTIuMjIsMi4yMiwwLDAsMSw3LjU5LDEzLjEsMi4yMywyLjIzLDAsMCwxLDkuNCwxMC41N1pNNS4wNywyMC44MmEyLjIyLDIuMjIsMCwwLDEs''@;'; put 'put ''MS44Mi0yLjUzQTIuMjIsMi4yMiwwLDAsMSw5Ljc1LDE5LjUsMi4yMywyLjIzLDAsMCwxLDcuOTQsMjIsMi4yNCwyLjI0LDAsMCwxLDUuMDcsMjAuODJabTcsOC4zM2EyLjIyLDIuMjIsMCwwLDEtMi44Ny0xLjIxQTIuMjMsMi4yMywwLDAsMSwxMSwyNS40MWEyLjIzLDIuMjMsMCwwLDEsMi44''@;'; put 'put ''NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwxMiwyOS4xNVpNMTUsOC4yNmEyLjIzLDIuMjMsMCwwLDEsMS44MS0yLjUzLDIuMjQsMi4yNCwwLDAsMSwyLjg3LDEuMjEsMi4yMiwyLjIyLDAsMCwxLTEuODIsMi41M0EyLjIxLDIuMjEsMCwwLDEsMTUsOC4yNlptNS44MiwyMi4xOWEyLjIyLDIuMjIs''@;'; put 'put ''MCwwLDEtMi44Ny0xLjIxLDIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMUEyLjIyLDIuMjIsMCwwLDEsMjAuNzgsMzAuNDVabTUtMTAuNDZhMy4yLDMuMiwwLDAsMS0xLjY5LDEuNzYsMy41MywzLjUzLDAsMCwxLTEuNC4zLDIuNzgsMi43OCwwLDAs''@;'; put 'put ''MS0yLjU2LTEuNSwyLjQ5LDIuNDksMCwwLDEtLjA3LTIsMy4yLDMuMiwwLDAsMSwxLjY5LTEuNzYsMywzLDAsMCwxLDQsMS4yQTIuNTQsMi41NCwwLDAsMSwyNS43OSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxsLkVzc2VudGlhbFNoYXBlcz17ImFk''@;'; put 'put ''ZC10ZXh0IjpsLkNsclNoYXBlQWRkVGV4dCwiYWxhcm0tb2ZmIjpsLkNsclNoYXBlQWxhcm1PZmYscGluYm9hcmQ6bC5DbHJTaGFwZVBpbmJvYXJkLG5ldzpsLkNsclNoYXBlTmV3LCJidWJibGUtZXhjbGFtYXRpb24iOmwuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbiwiZ3JpZC12aWV3Ijps''@;'; put 'put ''LkNsclNoYXBlR3JpZFZpZXcsImN1cnNvci1hcnJvdyI6bC5DbHJTaGFwZUN1cnNvckFycm93LCJjdXJzb3ItaGFuZCI6bC5DbHJTaGFwZUN1cnNvckhhbmQsImN1cnNvci1oYW5kLWNsaWNrIjpsLkNsclNoYXBlQ3Vyc29ySGFuZENsaWNrLCJjdXJzb3ItaGFuZC1ncmFiIjpsLkNsclNoYXBl''@;'; put 'put ''Q3Vyc29ySGFuZEdyYWIsImN1cnNvci1oYW5kLW9wZW4iOmwuQ2xyU2hhcGVDdXJzb3JIYW5kT3BlbiwiY3Vyc29yLW1vdmUiOmwuQ2xyU2hhcGVDdXJzb3JNb3ZlLCJmaXJzdC1haWQiOmwuQ2xyU2hhcGVGaXJzdEFpZCxyZXNpemU6bC5DbHJTaGFwZVJlc2l6ZSxvYmplY3RzOmwuQ2xyU2hh''@;'; put 'put ''cGVPYmplY3RzLGJvb2s6bC5DbHJTaGFwZUJvb2ssYXN0ZXJpc2s6bC5DbHJTaGFwZUFzdGVyaXNrLGJ1ZzpsLkNsclNoYXBlQnVnLHNjaXNzb3JzOmwuQ2xyU2hhcGVTY2lzc29ycyx0aGVybW9tZXRlcjpsLkNsclNoYXBlVGhlcm1vbWV0ZXIscGVuY2lsOmwuQ2xyU2hhcGVQZW5jaWwsbm90''@;'; put 'put ''ZTpsLkNsclNoYXBlTm90ZSxyZWZyZXNoOmwuQ2xyU2hhcGVSZWZyZXNoLHN5bmM6bC5DbHJTaGFwZVN5bmMsInZpZXctbGlzdCI6bC5DbHJTaGFwZVZpZXdMaXN0LCJ2aWV3LWNhcmRzIjpsLkNsclNoYXBlVmlld0NhcmRzLCJ0cmVlLXZpZXciOmwuQ2xyU2hhcGVUcmVlVmlldyxsaWdodGJ1''@;'; put 'put ''bGI6bC5DbHJTaGFwZUxpZ2h0YnVsYixkb3dubG9hZDpsLkNsclNoYXBlRG93bmxvYWQsdXBsb2FkOmwuQ2xyU2hhcGVVcGxvYWQsbG9jazpsLkNsclNoYXBlTG9jayx1bmxvY2s6bC5DbHJTaGFwZVVubG9jayx1c2VyczpsLkNsclNoYXBlVXNlcnMsInBvcC1vdXQiOmwuQ2xyU2hhcGVQb3BP''@;'; put 'put ''dXQsZmlsdGVyOmwuQ2xyU2hhcGVGaWx0ZXIscGluOmwuQ2xyU2hhcGVQaW4sZmlsZTpsLkNsclNoYXBlRmlsZSxwbHVzOmwuQ2xyU2hhcGVQbHVzLG1pbnVzOmwuQ2xyU2hhcGVNaW51cywibWludXMtY2lyY2xlIjpsLkNsclNoYXBlTWludXNDaXJjbGUsInBsdXMtY2lyY2xlIjpsLkNsclNo''@;'; put 'put ''YXBlUGx1c0NpcmNsZSxiYW46bC5DbHJTaGFwZUJhbiwidGltZXMtY2lyY2xlIjpsLkNsclNoYXBlVGltZXNDaXJjbGUsdHJhc2g6bC5DbHJTaGFwZVRyYXNoLGNpcmNsZTpsLkNsclNoYXBlQ2lyY2xlLHRhZzpsLkNsclNoYXBlVGFnLHRhZ3M6bC5DbHJTaGFwZVRhZ3MsaGlzdG9yeTpsLkNs''@;'; put 'put ''clNoYXBlSGlzdG9yeSxjbG9jazpsLkNsclNoYXBlQ2xvY2ssImFsYXJtLWNsb2NrIjpsLkNsclNoYXBlQWxhcm1DbG9jayxhcnJvdzp2LkNsclNoYXBlQXJyb3csImNpcmNsZS1hcnJvdyI6bC5DbHJTaGFwZUNpcmNsZUFycm93LCJjaGlsZC1hcnJvdyI6bC5DbHJTaGFwZUNoaWxkQXJyb3cs''@;'; put 'put ''Y29weTpsLkNsclNoYXBlQ29weSxoZWxwOmwuQ2xyU2hhcGVIZWxwLGxvZ2luOmwuQ2xyU2hhcGVMb2dpbixsb2dvdXQ6bC5DbHJTaGFwZUxvZ291dCxwcmludGVyOmwuQ2xyU2hhcGVQcmludGVyLHdvcmxkOmwuQ2xyU2hhcGVXb3JsZCxzbGlkZXI6bC5DbHJTaGFwZVNsaWRlcixjbGlwYm9h''@;'; put 'put ''cmQ6bC5DbHJTaGFwZUNsaXBib2FyZCxmaXJld2FsbDpsLkNsclNoYXBlRmlyZXdhbGwsbGlzdDpsLkNsclNoYXBlTGlzdCxyZWRvOmwuQ2xyU2hhcGVSZWRvLHVuZG86bC5DbHJTaGFwZVVuZG8sc2Nyb2xsOmwuQ2xyU2hhcGVTY3JvbGwsImZpbGUtc2V0dGluZ3MiOmwuQ2xyU2hhcGVGaWxl''@;'; put 'put ''U2V0dGluZ3MsInR3by13YXktYXJyb3dzIjpsLkNsclNoYXBlVHdvV2F5QXJyb3dzLHN3aXRjaDpsLkNsclNoYXBlU3dpdGNoLHRvb2xzOmwuQ2xyU2hhcGVUb29scywid2luZG93LWNsb3NlIjpsLkNsclNoYXBlV2luZG93Q2xvc2UsIndpbmRvdy1tYXgiOmwuQ2xyU2hhcGVXaW5kb3dNYXgs''@;'; put 'put ''IndpbmRvdy1taW4iOmwuQ2xyU2hhcGVXaW5kb3dNaW4sIndpbmRvdy1yZXN0b3JlIjpsLkNsclNoYXBlV2luZG93UmVzdG9yZSwiem9vbS1pbiI6bC5DbHJTaGFwZVpvb21Jbiwiem9vbS1vdXQiOmwuQ2xyU2hhcGVab29tT3V0LGtleTpsLkNsclNoYXBlS2V5LGxpYnJhcnk6bC5DbHJTaGFw''@;'; put 'put ''ZUxpYnJhcnksYm9sdDpsLkNsclNoYXBlQm9sdCx3cmVuY2g6bC5DbHJTaGFwZVdyZW5jaCxidWxsc2V5ZTpsLkNsclNoYXBlQnVsbHNleWUsdGFyZ2V0OmwuQ2xyU2hhcGVUYXJnZXQsZmxhbWU6bC5DbHJTaGFwZUZsYW1lLGhvdXJnbGFzczpsLkNsclNoYXBlSG91cmdsYXNzLCJuby1hY2Nl''@;'; put 'put ''c3MiOmwuQ2xyU2hhcGVOb0FjY2Vzcyxvcmdhbml6YXRpb246bC5DbHJTaGFwZU9yZ2FuaXphdGlvbixiYWxhbmNlOmwuQ2xyU2hhcGVCYWxhbmNlLCJpZC1iYWRnZSI6bC5DbHJTaGFwZUlkQmFkZ2UscmVwZWF0OmwuQ2xyU2hhcGVSZXBlYXQsImZpbGUtZ3JvdXAiOmwuQ2xyU2hhcGVGaWxl''@;'; put 'put ''R3JvdXAscGFwZXJjbGlwOmwuQ2xyU2hhcGVQYXBlcmNsaXAsc2hyaW5rOmwuQ2xyU2hhcGVTaHJpbmssImFjY2Vzc2liaWxpdHktMSI6bC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxLCJhY2Nlc3NpYmlsaXR5LTIiOmwuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Miwic29ydC1ieSI6bC5DbHJTaGFw''@;'; put 'put ''ZVNvcnRCeSwiY29sbGFwc2UtY2FyZCI6bC5DbHJTaGFwZUNvbGxhcHNlQ2FyZCwiZXhwYW5kLWNhcmQiOmwuQ2xyU2hhcGVFeHBhbmRDYXJkLGJyaWVmY2FzZTpsLkNsclNoYXBlQnJpZWZjYXNlLCJjb2xvci1waWNrZXIiOmwuQ2xyU2hhcGVDb2xvclBpY2tlciwiY29weS10by1jbGlwYm9h''@;'; put 'put ''cmQiOmwuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQsImZpbHRlci0yIjpsLkNsclNoYXBlRmlsdGVyMiwiZHJhZy1oYW5kbGUiOmwuQ2xyU2hhcGVEcmFnSGFuZGxlLG1vb246bC5DbHJTaGFwZU1vb24sc3VuOmwuQ2xyU2hhcGVTdW4sd2FuZDpsLkNsclNoYXBlV2FuZCxjbG9uZTpsLkNsclNo''@;'; put 'put ''YXBlQ2xvbmUsZGV0YWlsczpsLkNsclNoYXBlRGV0YWlscywiZHJhZy1oYW5kbGUtY29ybmVyIjpsLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcixlcmFzZXI6bC5DbHJTaGFwZUVyYXNlcixsYW5kc2NhcGU6bC5DbHJTaGFwZUxhbmRzY2FwZSxwYXN0ZTpsLkNsclNoYXBlUGFzdGUscG9ydHJh''@;'; put 'put ''aXQ6bC5DbHJTaGFwZVBvcnRyYWl0LCJmaWxlLXppcCI6bC5DbHJTaGFwZUZpbGVaaXAsImZpbHRlci1vZmYiOmwuQ2xyU2hhcGVGaWx0ZXJPZmYscmVjeWNsZTpsLkNsclNoYXBlUmVjeWNsZSx0cmVlOmwuQ2xyU2hhcGVUcmVlLGZpc2g6bC5DbHJTaGFwZUZpc2gsZm9ybTpsLkNsclNoYXBl''@;'; put 'put ''Rm9ybSxmdWVsOmwuQ2xyU2hhcGVGdWVsLHNub3dmbGFrZTpsLkNsclNoYXBlU25vd2ZsYWtlLHRhYmxlOmwuQ2xyU2hhcGVUYWJsZSwiZG90LWNpcmNsZSI6bC5DbHJTaGFwZURvdENpcmNsZSx2b2x1bWU6bC5DbHJTaGFwZVZvbHVtZSxjcm9zc2hhaXJzOmwuQ2xyU2hhcGVDcm9zc2hhaXJz''@;'; put 'put ''LGJldGE6bC5DbHJTaGFwZUJldGEsImNvbG9yLXBhbGV0dGUiOmwuQ2xyU2hhcGVDb2xvclBhbGV0dGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkVzc2VudGlhbFNoYXBlcywiZWRpdCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5wZW5jaWwpKSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsIm5vdGUtZWRpdCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5ub3RlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuRXNzZW50aWFsU2hhcGVzLCJncm91cCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShs''@;'; put 'put ''LkVzc2VudGlhbFNoYXBlcy51c2VycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkVzc2VudGlhbFNoYXBlcywiZG9jdW1lbnQiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Fc3NlbnRpYWxTaGFwZXMuZmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkVzc2VudGlhbFNoYXBlcywi''@;'; put 'put ''YWRkIiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuRXNzZW50aWFsU2hhcGVzLnBsdXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsImNhbmNlbCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5iYW4pKSxPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsInJlbW92ZSIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlc1sidGltZXMtY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsInNpZ24taW4iLCgwLHAuZGVzY3JpcHRvckNvbmZpZyko''@;'; put 'put ''bC5Fc3NlbnRpYWxTaGFwZXMubG9naW4pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsInNpZ24tb3V0IiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuRXNzZW50aWFsU2hhcGVzLmxvZ291dCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkVzc2VudGlhbFNoYXBl''@;'; put 'put ''cywibGlnaHRuaW5nIiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuRXNzZW50aWFsU2hhcGVzLmJvbHQpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsImZsb3ctY2hhcnQiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Fc3NlbnRpYWxTaGFwZXMub3JnYW5pemF0''@;'; put 'put ''aW9uKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuRXNzZW50aWFsU2hhcGVzLCJhbGVydCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlc1siYnViYmxlLWV4Y2xhbWF0aW9uIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsInBpbm5l''@;'; put 'put ''ZCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5waW5ib2FyZCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsImF0dGFjaG1lbnQiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Fc3NlbnRpYWxTaGFwZXMucGFwZXJjbGlwKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuRXNzZW50aWFsU2hhcGVzLCJyZXNpemUtZG93biIsKDAscC5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5zaHJpbmspKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS11cCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5yZXNpemUpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2lu''@;'; put 'put ''ZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQobC5Fc3NlbnRpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91''@;'; put 'put ''bmQgKi9mdW5jdGlvbihNLGwsSCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLk1lZGlhU2hhcGVzPWwuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZT1sLkNsclNoYXBlTWljcm9waG9uZT1sLkNsclNoYXBlVmlkZW9HYWxsZXJ5''@;'; put 'put ''PWwuQ2xyU2hhcGVSZXBsYXlPbmU9bC5DbHJTaGFwZVJlcGxheUFsbD1sLkNsclNoYXBlSW1hZ2VHYWxsZXJ5PWwuQ2xyU2hhcGVNdXNpY05vdGU9bC5DbHJTaGFwZUZpbG1TdHJpcD1sLkNsclNoYXBlSGVhZHBob25lcz1sLkNsclNoYXBlVm9sdW1lTXV0ZT1sLkNsclNoYXBlVm9sdW1lVXA9''@;'; put 'put ''bC5DbHJTaGFwZVZvbHVtZURvd249bC5DbHJTaGFwZVNodWZmbGU9bC5DbHJTaGFwZVZpZGVvQ2FtZXJhPWwuQ2xyU2hhcGVDYW1lcmE9bC5DbHJTaGFwZUZhc3RGb3J3YXJkPWwuQ2xyU2hhcGVSZXdpbmQ9bC5DbHJTaGFwZVBvd2VyPWwuQ2xyU2hhcGVTdG9wPWwuQ2xyU2hhcGVTdGVwRm9y''@;'; put 'put ''d2FyZD1sLkNsclNoYXBlUGF1c2U9bC5DbHJTaGFwZVBsYXk9dm9pZCAwLEg9SCgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLGwuQ2xyU2hhcGVQbGF5PSgwLEguY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwxLDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIuMDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIu''@;'; put 'put ''MDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wuMS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40''@;'; put 'put ''N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiwwLDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLGwuQ2xyU2hhcGVQYXVzZT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAsMCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEyLjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjku''@;'; put 'put ''OTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDci''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz4nKSxsLkNsclNoYXBlU3RlcEZvcndhcmQ9KDAsSC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIzLDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01''@;'; put 'put ''LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIsMCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgzYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMx''@;'; put 'put ''LDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJWNS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIzLjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEy''@;'; put 'put ''LDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjciIHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0iMiIgcnk9IjIiLz4nKSxsLkNsclNoYXBlU3RvcD0o''@;'; put 'put ''MCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRIMzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCwwLDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksbC5DbHJTaGFwZVBvd2VyPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBk''@;'; put 'put ''PSJNMTgsMzQuMTVhMTUsMTUsMCwwLDEtNy41Mi0yOCwxLDEsMCwwLDEsMSwxLjczLDEzLDEzLDAsMSwwLDEzLDAsMSwxLDAsMSwxLDEtMS43MywxNSwxNSwwLDAsMS03LjUyLDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTgsMjFhMSwxLDAsMCwwLDEtMVY0YTEsMSwwLDAsMC0yLDBWMjBBMSwxLDAsMCwwLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1h''@;'; put 'put ''bGVydGVkIiBkPSJNMzIuNTEsMTUuNEgzMC40NGExMywxMywwLDEsMS0xOS03LjUsMSwxLDAsMCwwLTEtMS43M0ExNSwxNSwwLDEsMCwzMywxOS4xNSwxNC45LDE0LjksMCwwLDAsMzIuNTEsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSwwLDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41bC0uMzEsMEExMywxMywwLDEsMSwxMS40OCw3LjlhMSwxLDAsMCwwLTEtMS43MywxNSwxNSwwLDEsMCwyMS4zMSw3LjFBNy40OSw3LjQ5LDAsMCwxLDMw''@;'; put 'put ''LDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0uMDYsMTcuNjhhMS4yOCwxLjI4LDAsMCwxLTEuMjktMS4yOFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBWMTguNEExLjI4LDEuMjgsMCwwLDEsMTguMDYsMTku''@;'; put 'put ''NjhaTTE4LDI3Ljc5QTkuODgsOS44OCwwLDAsMSwxMi4xNyw5Ljg1YTEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuNCwx''@;'; put 'put ''LjQsMCwwLDEsMS45NC0uMjlBOS44OCw5Ljg4LDAsMCwxLDE4LDI3Ljc5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC02QTkuNyw5LjcsMCwwLDEsMjgsMTcu''@;'; put 'put ''ODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wOCw3LjA4LDAsMCwwLS40NS0yLjQ5SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNHY0LjRhMS4yOSwxLjI5''@;'; put 'put ''LDAsMCwxLTIuNTgsMFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDB2LjcxbDMuNzYtNi41MUExNiwxNiwwLDEsMCwzNCwxOGExNiwxNiwwLDAsMC0uMjMtMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0zLjU3LS45QTkuODMsOS44MywwLDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0xNS44My04LDEuNCwxLjQsMCwwLDEsMS45NC4zMSwx''@;'; put 'put ''LjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuMzgsMS4zOCwwLDAsMSwxLjUyLS40OSw3LjQ1LDcuNDUsMCwwLDEtLjMtNi44MywxNi4wNiwxNi4wNiwwLDEsMCw5''@;'; put 'put ''LjkzLDkuOTNBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE2Ljc3LDguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40YTEuMjksMS4yOSwwLDAsMS0yLjU4LDBaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGwuQ2xyU2hhcGVSZXdpbmQ9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwy''@;'; put 'put ''LDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIu''@;'; put 'put ''MDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMwLjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIs''@;'; put 'put ''MiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicpLGwuQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiwwLDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwz''@;'; put 'put ''LjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFWNS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiwwLDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5Ljkz''@;'; put 'put ''bDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuNzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMx''@;'; put 'put ''LjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMwVjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45MywwLDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAs''@;'; put 'put ''MSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4nKSxsLkNsclNoYXBlQ2FtZXJhPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIs''@;'; put 'put ''MiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVptMTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''OS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAsMCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcs''@;'; put 'put ''MCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFsLjg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4y''@;'; put 'put ''OEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEs''@;'; put 'put ''MCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAsMCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEs''@;'; put 'put ''MSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLGwuQ2xyU2hhcGVWaWRlb0NhbWVyYT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSwwLDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcs''@;'; put 'put ''Mi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZaTTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEyLDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVhLjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAs''@;'; put 'put ''MSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAs''@;'; put 'put ''MCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEuMSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSxsLkNsclNoYXBlU2h1ZmZsZT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywzLjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAsMC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCwwLC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQsMjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0uNUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEsMTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMs''@;'; put 'put ''M2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFaIi8+JyksbC5DbHJTaGFwZVZvbHVtZURvd249KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0''@;'; put 'put ''LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyWk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4''@;'; put 'put ''TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUs''@;'; put 'put ''MSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNh''@;'; put 'put ''MSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLGwuQ2xyU2hhcGVWb2x1bWVVcD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEsMCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA2YTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjM5QTIsMiwwLDAsMSwyMCw2djI0YTIsMiww''@;'; put 'put ''LDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyLjA2Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjNMMTgsMzAuMDZWNkwxMC4zNSwxMy43YTEsMSwwLDAsMS0uNzEuM1pNMTgsNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEsMCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTguMzMsNCw5LjA3LDEyaC02YTEsMSwwLDAsMC0xLDF2OS45MmExLDEsMCwwLDAsMSwxSDguODhsOS40Niw4LjI0QTEsMSwwLDAsMCwyMCwzMS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIv''@;'; put 'put ''PicpLGwuQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDkuMTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMkg5LjE0bDcuNDEsNy40N0EyLDIs''@;'; put 'put ''MCwwLDAsMTgsMzJhMiwyLDAsMCwwLC43Ni0uMTVBMiwyLDAsMCwwLDIwLDMwVjIyLjc3bDUuODksNS44OWMtLjI1LjE1LS40OS4yOS0uNzUuNDJhMSwxLDAsMCwwLC45LDEuNzksMTQuNCwxNC40LDAsMCwwLDEuMzEtLjc1bDIuMjgsMi4yOEwzMSwzMSw1LDVaTTE4LDMwbC03LjczLTcuNzdB''@;'; put 'put ''MSwxLDAsMCwwLDkuNTYsMjJINFYxNEg5LjY0YTEsMSwwLDAsMCwuNzEtLjNsLjI2LS4yNkwxOCwyMC44MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuODksNi42OUExMi40MiwxMi40MiwwLDAsMSwyOSwy''@;'; put 'put ''Ni4xbDEuNDIsMS40MkExNC40MiwxNC40MiwwLDAsMCwyNS43Niw0Ljg4YTEsMSwwLDEsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwx''@;'; put 'put ''OGE2LjE3LDYuMTcsMCwwLDEtMS4yNCwzLjcxTDI2LDIzLjEzQTguMTUsOC4xNSwwLDAsMCwyNy44LDE4YTguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTQiIGQ9Ik0xOCw2djkuMTVsMiwyVjZhMiwyLDAsMCwwLTMuNDItMS40MUwxMiw5LjE3bDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNC44Nyw2LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI4Ljc1LDI2''@;'; put 'put ''LjNsMS40MiwxLjQyQTE0LjQzLDE0LjQzLDAsMCwwLDI1Ljc0LDQuODhhMSwxLDAsMCwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjcuMywyNy42N2gwbC0zLjg0LTMuODQtLjU3LS41N2gwTDQuNjMs''@;'; put 'put ''NSwzLjIxLDYuNDEsOC44LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIwLDMxLjU1VjIzLjJsNS41OSw1LjU5Yy0uMTcuMS0uMzQuMi0uNTEuMjlhMSwxLDAsMCwwLC45LDEuNzljLjM3LS4xOS43Mi0uNCwxLjA4LS42MmwyLjE0''@;'; put 'put ''LDIuMTRMMzAuNjEsMzFsLTMuMjUtMy4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS40MiwzLjkybDEuNDIsMS40MmE4''@;'; put 'put ''LjE2LDguMTYsMCwwLDAsMi01LjM0LDguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIwLDQuNjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUu''@;'; put 'put ''NkwyMCwxNy41NFoiLz4nKSxsLkNsclNoYXBlSGVhZHBob25lcz0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwxNy41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIs''@;'; put 'put ''MjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwyLjc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4y''@;'; put 'put ''NywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0uNjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwyNiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIyLjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUs''@;'; put 'put ''MTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1oiLz4nKSxsLkNsclNoYXBlRmlsbVN0cmlwPSgwLEguY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNC42LDIzLjA3YTEuMjksMS4yOSwwLDAsMCwxLjI0LjA5bDguNzMtNGExLjMsMS4zLDAsMCwwLDAtMi4zN2gwbC04LjczLTRBMS4zLDEuMywwLDAsMCwxNCwxNHY4QTEuMjksMS4yOSwwLDAsMCwxNC42LDIzLjA3Wm0x''@;'; put 'put ''LTguNkwyMy4zMSwxOCwxNS42LDIxLjUxWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjgiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIwIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjYiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSI4IiB5PSIyNiIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjE0IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTkiIHg9IjIwIiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjAsN2gydjNIMjBaTTE0LDdoMnYzSDE0Wk0xMCwyOUg4VjI2aDJa''@;'; put 'put ''bTAtMTlIOFY3aDJabTYsMTlIMTRWMjZoMlptNiwwSDIwVjI2aDJabTMuMTYtMTAuMTZMMTUuMzksMjMuMkExLDEsMCwwLDEsMTQsMjIuMjhWMTMuNTdhMSwxLDAsMCwxLDEuNDEtLjkxTDI1LjE2LDE3QTEsMSwwLDAsMSwyNS4xNiwxOC44NFpNMjgsMjlIMjZWMjZoMlptMC0xOUgyNlY3aDJa''@;'; put 'put ''Ii8+JyksbC5DbHJTaGFwZU11c2ljTm90ZT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMtMTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1''@;'; put 'put ''Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2''@;'; put 'put ''LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEsNi41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4zNiw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMzLDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMs''@;'; put 'put ''MS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEuNDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUyLDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwx''@;'; put 'put ''LDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwyNy45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZj''@;'; put 'put ''LTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEzLTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAsMi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYx''@;'; put 'put ''Ljg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjItNC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcsMCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEuOS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIs''@;'; put 'put ''MSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaIi8+JyksbC5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCww''@;'; put 'put ''LDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTguNTYsMTkuNDVhMywzLDAsMSww''@;'; put 'put ''LTMtM0EzLDMsMCwwLDAsOC41NiwxOS40NVptMC00LjZBMS42LDEuNiwwLDEsMSw3LDE2LjQ1LDEuNiwxLjYsMCwwLDEsOC41NiwxNC44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik03LjksMjhsNi02LDMuMTgsMy4xOEwxNC4yNiwy''@;'; put 'put ''OGgybDcuNDYtNy40NkwzMCwyNi43N3YtMkwyNC4yLDE5YS43MS43MSwwLDAsMC0xLDBsLTUuMTYsNS4xNkwxNC4zNywyMC41YS43MS43MSwwLDAsMC0xLDBMNS45MiwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBh''@;'; put 'put ''MSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0y''@;'; put 'put ''NmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCww''@;'; put 'put ''LDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNOC41NiwxMy40NWEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjU2LDEzLjQ1Wk0zMCwyOGgtMjRsNy40Ni03LjQ3YS43MS43MSwwLDAsMSwxLDBsMy42OCwzLjY4TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAs''@;'; put 'put ''MjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVSZXBsYXlBbGw9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwx''@;'; put 'put ''LjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYsMjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYtNS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43''@;'; put 'put ''OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlUmVwbGF5T25lPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFIMTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3''@;'; put 'put ''LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0u''@;'; put 'put ''MDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlVmlkZW9HYWxsZXJ5''@;'; put 'put ''PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMw''@;'; put 'put ''SDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh''@;'; put 'put ''dGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQsMCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwu''@;'; put 'put ''NjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQuNDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4yNS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwx''@;'; put 'put ''LC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0z''@;'; put 'put ''Mi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEz''@;'; put 'put ''LDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEExLDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVNaWNyb3Bo''@;'; put 'put ''b25lPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHogTTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4yLDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMt''@;'; put 'put ''NS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEs''@;'; put 'put ''MWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03''@;'; put 'put ''cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYuMyw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYs''@;'; put 'put ''MC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLEgu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCw0YzIuOCwwLDUsMi4yLDUsNXY4''@;'; put 'put ''YzAsMC40LTAuMSwwLjgtMC4yLDEuMmwxLjYsMS42YzAuNC0wLjksMC42LTEuOCwwLjYtMi44VjljMC0zLjktMy4yLTctNy4xLTYuOVxuXHRcdGMtMi45LDAtNS42LDEuOS02LjUsNC43TDEzLDguM0MxMy41LDUuOSwxNS42LDQuMiwxOCw0eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00''@;'; put 'put ''LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiBNMTMuOCwxOS43''@;'; put 'put ''QzEzLjMsMTguOSwxMywxOCwxMywxN3YtMi42bDcuMSw3LjFDMTcuOSwyMi41LDE1LjIsMjEuOCwxMy44LDE5Ljd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMs''@;'; put 'put ''MjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNSwxN1Y5YzAtMy45LTMuMi03LTcuMS02LjljLTIuOSwwLTUuNiwxLjktNi41LDQuN2wxMywxM0MyNC44LDE4LjksMjUsMTcuOSwyNSwxN3oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0''@;'; put 'put ''Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwy''@;'; put 'put ''Ni42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxsLk1lZGlhU2hhcGVzPXtwbGF5OmwuQ2xyU2hhcGVQbGF5LHBhdXNlOmwuQ2xyU2hhcGVQYXVzZSwic3RlcC1mb3J3YXJkIjpsLkNsclNoYXBlU3RlcEZvcndhcmQsc3RvcDpsLkNsclNoYXBlU3RvcCxw''@;'; put 'put ''b3dlcjpsLkNsclNoYXBlUG93ZXIscmV3aW5kOmwuQ2xyU2hhcGVSZXdpbmQsImZhc3QtZm9yd2FyZCI6bC5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTpsLkNsclNoYXBlQ2FtZXJhLCJ2aWRlby1jYW1lcmEiOmwuQ2xyU2hhcGVWaWRlb0NhbWVyYSxzaHVmZmxlOmwuQ2xyU2hhcGVTaHVm''@;'; put 'put ''ZmxlLCJ2b2x1bWUtdXAiOmwuQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1lLWRvd24iOmwuQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6bC5DbHJTaGFwZVZvbHVtZU11dGUsaGVhZHBob25lczpsLkNsclNoYXBlSGVhZHBob25lcywiZmlsbS1zdHJpcCI6bC5DbHJTaGFwZUZpbG1T''@;'; put 'put ''dHJpcCwibXVzaWMtbm90ZSI6bC5DbHJTaGFwZU11c2ljTm90ZSwiaW1hZ2UtZ2FsbGVyeSI6bC5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6bC5DbHJTaGFwZVJlcGxheUFsbCwicmVwbGF5LW9uZSI6bC5DbHJTaGFwZVJlcGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6bC5DbHJT''@;'; put 'put ''aGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOmwuQ2xyU2hhcGVNaWNyb3Bob25lLCJtaWNyb3Bob25lLW11dGUiOmwuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5''@;'; put 'put ''SWNvbnMuYWRkKGwuTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMv''@;'; put 'put ''c2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQogICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTSxsLHYpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbC5Tb2NpYWxTaGFwZXM9bC5DbHJTaGFwZUhhc2h0YWc9bC5DbHJTaGFwZUNyb3duPWwuQ2xyU2hhcGVUaHVtYnNEb3duPWwuQ2xyU2hhcGVUaHVtYnNVcD1sLkNsclNoYXBlU2FkRmFjZT1sLkNsclNoYXBlTmV1dHJhbEZhY2U9bC5D''@;'; put 'put ''bHJTaGFwZUhhcHB5RmFjZT1sLkNsclNoYXBlUGljdHVyZT1sLkNsclNoYXBlQ2hhdEJ1YmJsZT1sLkNsclNoYXBlVGFsa0J1YmJsZXM9bC5DbHJTaGFwZUhlYXJ0QnJva2VuPWwuQ2xyU2hhcGVIZWFydD1sLkNsclNoYXBlSW5ib3g9bC5DbHJTaGFwZUZsYWc9bC5DbHJTaGFwZVRhc2tzPWwu''@;'; put 'put ''Q2xyU2hhcGVFbnZlbG9wZT1sLkNsclNoYXBlQm9va21hcms9bC5DbHJTaGFwZUhhbGZTdGFyPWwuQ2xyU2hhcGVTdGFyPWwuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIHA9digKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9k''@;'; put 'put ''ZXNjcmlwdG9yLWNvbmZpZy50cyIpLGE9digKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO3Y9digKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBl''@;'; put 'put ''cy9jb3JlLXNoYXBlcy50cyIpLGwuQ2xyU2hhcGVTaGFyZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0y''@;'; put 'put ''LjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01Wm0wLTIwYTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDI3LjUzLDRaTTcsMjFhMywz''@;'; put 'put ''LDAsMSwxLDMtM0EzLDMsMCwwLDEsNywyMVpNMjcuNTMsMzJhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsMjcuNTMsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41''@;'; put 'put ''NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01WiIvPicpLGwuQ2xyU2hh''@;'; put 'put ''cGVTdGFyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTksMzRhMi4yMiwyLjIyLDAsMCwxLTEuMjQtLjM4bC03LjQ2LTVhLjIyLjIyLDAsMCwwLS4yNSwwbC03LjQ2LDVBMi4yMiwyLjIyLDAsMCwxLDcu''@;'; put 'put ''NCwzMS4yMWwyLjQ1LTguNjRhLjIzLjIzLDAsMCwwLS4wOC0uMjRMMi43MSwxNi43OGEyLjIyLDIuMjIsMCwwLDEsMS4yOS00bDktLjM0YS4yMy4yMywwLDAsMCwuMi0uMTVsMy4xLTguNDNhMi4yMiwyLjIyLDAsMCwxLDQuMTcsMGwzLjEsOC40M2EuMjMuMjMsMCwwLDAsLjIuMTVsOSwuMzRh''@;'; put 'put ''Mi4yMiwyLjIyLDAsMCwxLDEuMjksNEwyNywyMi4zM2EuMjIuMjIsMCwwLDAtLjA4LjI0bDIuNDUsOC42NEEyLjIzLDIuMjMsMCwwLDEsMjcuMTksMzRabS04LjgyLTcuNDJBMi4yMSwyLjIxLDAsMCwxLDE5LjYsMjdsNy40Niw1YS4yMi4yMiwwLDAsMCwuMzQtLjI1bC0yLjQ1LTguNjRhMi4y''@;'; put 'put ''MSwyLjIxLDAsMCwxLC43Ny0yLjM1bDcuMDYtNS41NWEuMjIuMjIsMCwwLDAtLjEzLS40bC05LS4zNGEyLjIyLDIuMjIsMCwwLDEtMi0xLjQ2bC0zLjEtOC40M2EuMjIuMjIsMCwwLDAtLjQyLDBMMTUuMDYsMTNhMi4yMiwyLjIyLDAsMCwxLTIsMS40NmwtOSwuMzRhLjIyLjIyLDAsMCwwLS4x''@;'; put 'put ''My40TDExLDIwLjc2YTIuMjIsMi4yMiwwLDAsMSwuNzcsMi4zNUw5LjMzLDMxLjc1YS4yMS4yMSwwLDAsMCwuMDguMjQuMi4yLDAsMCwwLC4yNiwwbDcuNDYtNUEyLjIyLDIuMjIsMCwwLDEsMTguMzYsMjYuNjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAs''@;'; put 'put ''MCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVhMi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40bC0yLjQ1LTguNjRh''@;'; put 'put ''LjIyLjIyLDAsMCwxLC4wOC0uMjRaIi8+JyksbC5DbHJTaGFwZUhhbGZTdGFyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAs''@;'; put 'put ''MCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjIuMjIsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFBMi4yMywyLjIzLDAsMCwwLDkuNDks''@;'; put 'put ''MzRhMi4yMiwyLjIyLDAsMCwwLDEuMjQtLjM4bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMjIsMi4yMiwwLDAsMCwzLjM4LTIuNDVsLTIuNDUtOC42NGEuMjMuMjMsMCwwLDEsLjA4LS4yNFpNMTguMzMsMjYuNjJoMGEyLjIxLDIuMjEsMCwwLDAtMS4yNC4zOEw5LjYyLDMy''@;'; put 'put ''YS4yMi4yMiwwLDAsMS0uMzQtLjI1bDIuNDUtOC42NEEyLjIxLDIuMjEsMCwwLDAsMTEsMjAuNzZMMy45LDE1LjIxYS4yMi4yMiwwLDAsMSwuMTMtLjRsOS0uMzRBMi4yMiwyLjIyLDAsMCwwLDE1LDEzbDMuMS04LjQzYS4yLjIsMCwwLDEsLjIxLS4xNWgwWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEt''@;'; put 'put ''LjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIs''@;'; put 'put ''MCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0Wk0yNC45LDIzLjExbDIuNDUsOC42NEEuMjIuMjIsMCwwLDEsMjcsMzJsLTcuNDYtNWEyLjIxLDIuMjEsMCwwLDAtMS4yNC0uMzhoMFY0LjQ0aDBhLjIuMiwwLDAsMSwuMjEuMTVMMjEuNjIsMTNhMi4yMiwyLjIy''@;'; put 'put ''LDAsMCwwLDIsMS40Nmw5LC4zNGEuMjIuMjIsMCwwLDEsLjEzLjRsLTcuMDYsNS41NUEyLjIxLDIuMjEsMCwwLDAsMjQuOSwyMy4xMVoiLz4nKSxsLkNsclNoYXBlQm9va21hcms9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0yNiwzNGEyLDIsMCwwLDEtMS40MS0uNThMMTgsMjYuODJsLTYuNTQsNi41MkEyLDIsMCwwLDEsOCwzMS45M1Y0YTIsMiwwLDAsMSwyLTJIMjZhMiwyLDAsMCwxLDIsMlYzMmEyLDIsMCwwLDEtMiwyWm0wLTJoMFY0SDEwVjMxLjkzTDE4LDI0WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwySDEwQTIsMiwwLDAsMCw4LDRWMzEuOTNhMiwyLDAsMCwwLDMuNDIsMS40MWw2LjU0LTYuNTIsNi42Myw2LjZBMiwyLDAsMCwwLDI4LDMyVjRBMiwyLDAsMCwwLDI2LDJaIi8+JyksbC5DbHJTaGFw''@;'; put 'put ''ZUVudmVsb3BlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLjQ2LDI4SDUu''@;'; put 'put ''NjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMEwzMiw5LjIxdjE3LjVsLTcuMzYtNy4zNi0xLjQxLDEuNDFaTTUuMzEsOEgzMC4zOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4wOFYyNi43MWwtNy4zNi03LjM2LTEuNDEsMS40MUwzMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBsOC44My04Ljc4''@;'; put 'put ''YTcuNDQsNy40NCwwLDAsMS0yLS44NWwtOC4yNiw4LjIxTDUuMzEsOEgyMi44MWE3LjQ5LDcuNDksMCwwLDEtLjMxLTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4yQTcuNDUsNy40NSwwLDAsMSwzMiwxMy4wOFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuMjZIMzJWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDYuNjYtNi42M0gyMy4wOGwt''@;'; put 'put ''NS4yNCw1LjIxTDUuMzEsOEgyMC4wNmwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMzLDZhMiwyLDAsMCwwLS40MSwwaC0yOGEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0z''@;'; put 'put ''My44MSw3LjM5LDE5LjI1LDIxLjg5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMy44MSw3LjM5Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSww''@;'; put 'put ''SDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI2LDEyLjM0QTcuNDksNy40OSwwLDAsMSwyMi41LDZIMy45MmEyLDIs''@;'; put 'put ''MCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjlsLTguNzEsOC42OGEyLDIsMCwwLDEtMi44''@;'; put 'put ''MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTIuMzlBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEs''@;'; put 'put ''Ny4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNS43N2wtNi41Miw2LjQ5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlYxNS4zOFpNNS4zLDI4SDMu''@;'; put 'put ''OTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIy''@;'; put 'put ''Ljk0LDE1LjRoLS43QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxsLkNsclNoYXBlVGFza3M9KDAsYS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4yOSwzNEg2LjcxQTEuNywxLjcsMCwwLDEsNSwzMi4zMVY2LjY5QTEuNzUsMS43NSwwLDAsMSw3LDVIOVY3SDdWMzJIMjlWN0gyN1Y1aDIuMjVBMS43LDEuNywwLDAsMSwzMSw2LjY5VjMy''@;'; put 'put ''LjMxQTEuNywxLjcsMCwwLDEsMjkuMjksMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi42NiwyNS43NiwxMS4zLDIwLjRBMSwxLDAsMCwxLDEyLjcyLDE5bDMuOTQsMy45NCw4LjY0LTguNjRhMSwx''@;'; put 'put ''LDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI2LDExSDEwVjcuMzNBMi4zNCwyLjM0LDAsMCwxLDEyLjMzLDVoMS43OWE0LDQsMCwwLDEsNy43NSwwaDEuNzlBMi4zNCwyLjM0''@;'; put 'put ''LDAsMCwxLDI2LDcuMzNaTTEyLDlIMjRWNy4zM0EuMzMuMzMsMCwwLDAsMjMuNjcsN0gyMFY2YTIsMiwwLDAsMC00LDBWN0gxMi4zM2EuMzMuMzMsMCwwLDAtLjMzLjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoLjcxbDEuMTYtMmE0LDQsMCwwLDAtNy43NCwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExaDguNjRBMy42NSwzLjY1''@;'; put 'put ''LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yNC4xOSwxNS40bC03LjUzLDcuNTNMMTIuNzIsMTlBMSwxLDAsMCwwLDExLjMsMjAuNGw1LjM2LDUu''@;'; put 'put ''MzZMMjYuNzEsMTUuNzFhMSwxLDAsMCwwLC4yLS4zMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTI5LDE1LjRWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYu''@;'; put 'put ''NjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMC0xLjQxLTEuNDFsLTguNjQsOC42NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQs''@;'; put 'put ''MCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0z''@;'; put 'put ''MCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0yOS4yOSw0Ljk1aC03LjJhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlY2LjY0QTEuNywxLjcsMCwwLDAsMjkuMjksNC45NVpt''@;'; put 'put ''LTE4LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMVY5LjhIMTEuMjVabTE0LjUyLDkuMjMtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwx''@;'; put 'put ''LDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yNS44OCwxNS40YTEuMzgsMS4zOCwwLDAsMS0uMTEsMS44MWwtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwx''@;'; put 'put ''LDItMmwzLjI2LDMuMjYsNy03SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDAtLjA5SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aC40MkwyMiw0Ljc2YTQuMyw0LjMsMCwwLDAtOC4wOS4xOUg3QTEuNzUsMS43NSwwLDAsMCw1''@;'; put 'put ''LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQi''@;'; put 'put ''IGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTYuNDYtMy43SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDIuMjZhNy41Myw3LjUzLDAsMCwxLS4wNy0xLDcuNTMsNy41''@;'; put 'put ''MywwLDAsMSwuMDgtMS4wNWgtLjVhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVptLTQuMjMs''@;'; put 'put ''My43MS05LjEyLDkuMTItNS4yNC01LjI0YTEuNCwxLjQsMCwwLDEsMi0ybDMuMjYsMy4yNiw3LjE0LTcuMTRhMS40LDEuNCwwLDEsMSwyLDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBj''@;'; put 'put ''bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGwuQ2xyU2hhcGVGbGFnPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNNiwzNGExLDEsMCwwLDEtMS0xVjNBMSwxLDAsMCwxLDcsM1YzM0ExLDEs''@;'; put 'put ''MCwwLDEsNiwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjU1LDMuODJhMSwxLDAsMCwwLTEsMCwxNC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwx''@;'; put 'put ''Mi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjUuMDhBOC44LDguOCwwLDAsMSwxMy4yNSw0YTExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NkExOC43NSwxOC43NSwwLDAsMCwyOSw2LjEyVjE4Ljk1YTE2LjE2''@;'; put 'put ''LDE2LjE2LDAsMCwxLTUuNTguOTMsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAsMCwwLTUtMS40NUExMC44NiwxMC44NiwwLDAsMCw5LDE3Ljc5VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0''@;'; put 'put ''LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNTUsMy44MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNS45MiwyYTEsMSww''@;'; put 'put ''LDAsMC0xLDFWMzNhMSwxLDAsMCwwLDIsMFYzQTEsMSwwLDAsMCw1LjkyLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYs''@;'; put 'put ''MTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5QTEyLjc4LDEyLjc4LDAsMCwwLDEzLjIsMiwxMC44NiwxMC44NiwwLDAsMCw5LDIuODVWMjBhOC44LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIsMTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2LDE2Ljc5LDE2''@;'; put 'put ''Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41LDMuODJaIi8+JyksbC5DbHJTaGFwZUluYm94PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAs''@;'; put 'put ''MC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjUs''@;'; put 'put ''NUgyMlY3aDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWNi41QTEuNSwxLjUsMCwwLDAsMjkuNSw1Wk0y''@;'; put 'put ''OSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAs''@;'; put 'put ''MCwwLTEuNDEtMS40MUwxOSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4yMywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMwLDEzLjVhNy41Miw3LjUyLDAsMCwxLTEtLjA3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwz''@;'; put 'put ''MSwzMS41VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksbC5DbHJTaGFwZUhlYXJ0PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMi40M2ExLDEsMCwwLDEtLjYxLS4y''@;'; put 'put ''MUMxMS44MywyNy45LDgsMjQuMTgsNS4zMiwyMC41MSwxLjksMTUuODIsMS4xMiwxMS40OSwzLDcuNjRjMS4zNC0yLjc1LDUuMTktNSw5LjY5LTMuNjlBOS44Nyw5Ljg3LDAsMCwxLDE4LDcuNzJhOS44Nyw5Ljg3LDAsMCwxLDUuMzEtMy43N2M0LjQ5LTEuMjksOC4zNS45NCw5LjY5LDMuNjks''@;'; put 'put ''MS44OCwzLjg1LDEuMSw4LjE4LTIuMzIsMTIuODdDMjgsMjQuMTgsMjQuMTcsMjcuOSwxOC42MSwzMi4yMkExLDEsMCwwLDEsMTgsMzIuNDNaTTEwLjEzLDUuNThBNS45LDUuOSwwLDAsMCw0LjgsOC41MWMtMS41NSwzLjE4LS44NSw2LjcyLDIuMTQsMTAuODFBNTcuMTMsNTcuMTMsMCwwLDAs''@;'; put 'put ''MTgsMzAuMTYsNTcuMTMsNTcuMTMsMCwwLDAsMjkuMDYsMTkuMzNjMy00LjEsMy42OS03LjY0LDIuMTQtMTAuODEtMS0yLTQtMy41OS03LjM0LTIuNjVhOCw4LDAsMCwwLTQuOTQsNC4yLDEsMSwwLDAsMS0xLjg1LDAsNy45Myw3LjkzLDAsMCwwLTQuOTQtNC4yQTcuMzEsNy4zMSwwLDAsMCwx''@;'; put 'put ''MC4xMyw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0zLjY5QTkuODcsOS44NywwLDAsMCwxOCw3LjcyYTkuODcsOS44NywwLDAsMC01LjMxLTMuNzdD''@;'; put 'put ''OC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGwuQ2xyU2hhcGVIZWFydEJyb2tlbj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMDktNS05LjY5LTMuNjlhOS44Nyw5Ljg3LDAsMCwwLTYsNC44NCwxOC45LDE4Ljks''@;'; put 'put ''MCwwLDAtMi4yMyw1LjMzbDUuMjgsMi4zNC00LjYsNC4zNywzLjQ5LDQuMSwxLjUyLTEuM0wxOC41NCwyMWw1LjQtNS4xM0wxNy41OCwxM0ExNi4yMywxNi4yMywwLDAsMSwxOS43NSw4LjlhNy42OCw3LjY4LDAsMCwxLDQuMTEtM2MzLjM0LS44OSw2LjM0LjYsNy4zNCwyLjY1LDEuNTUsMy4x''@;'; put 'put ''OC44NSw2LjcyLTIuMTQsMTAuODFBNTcuMTYsNTcuMTYsMCwwLDEsMTgsMzAuMTYsNTcuMTYsNTcuMTYsMCwwLDEsNi45NCwxOS4zM2MtMy00LjEtMy42OS03LjY0LTIuMTQtMTAuODFhNS45LDUuOSwwLDAsMSw1LjMzLTIuOTMsNy4zMSw3LjMxLDAsMCwxLDIsLjI5LDcuNyw3LjcsMCwwLDEs''@;'; put 'put ''My4zOCwybC4xNS0uM2ExMC42NiwxMC42NiwwLDAsMSwxLTEuNDEsOS42NCw5LjY0LDAsMCwwLTMuOTQtMi4yMkM4LjIsMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEu''@;'; put 'put ''MjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjkt''@;'; put 'put ''My42OUExMS41NSwxMS41NSwwLDAsMCwxOC4xOSw3LjVhMTYuODksMTYuODksMCwwLDAtMi40OCw0LjU2TDIyLjI3LDE1LDE2LjcsMjAuMjYsMTksMjNsLTEuNTcsMS4zNC0zLjYtNC4yMiw0Ljc0LTQuNTEtNS40NC0yLjQxYTE5LjQ5LDE5LjQ5LDAsMCwxLDIuMy01LjUsMTQuNzcsMTQuNzcs''@;'; put 'put ''MCwwLDEsMS4wNi0xLjU0bC4wNiwwYTkuNjYsOS42NiwwLDAsMC0zLjg5LTIuMThDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5''@;'; put 'put ''LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGwuQ2xyU2hhcGVUYWxrQnViYmxlcz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4''@;'; put 'put ''Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDRIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVY3QTMsMywwLDAsMCwzMSw0Wk0zMiwyMi45''@;'; put 'put ''NCwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDMxQTEuMSwxLjEsMCwwLDEsMzIsNy4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMjZh''@;'; put 'put ''MSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY5LjcyTDI4LjUsMjAuMjFhMSwxLDAsMCwwLS42MS0uMjFIMTRhMSwxLDAsMCwxLTEtMVY3YTEsMSwwLDAsMSwxLTFIMjIuNWE3''@;'; put 'put ''LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVYxMi4zN0E3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWN0EzLDMsMCwwLDAsMzEsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE5VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEzVjI1SDE0QTYsNiwwLDAsMSw4LDE5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjEx''@;'; put 'put ''LDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGwuQ2xyU2hhcGVDaGF0QnViYmxlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0u''@;'; put 'put ''NjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4''@;'; put 'put ''LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjVIMTFh''@;'; put 'put ''MSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNzUsMjAuNWgtNy41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4yOCwxMi41SDI0LjcyYTEsMSwwLDAsMCwwLTJIMTEuMjhhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMzLjM4LDEyLjY5YTcuNDMsNy40MywwLDAsMS0xLjg5LjY2QTEwLjM1LDEwLjM1LDAsMCwxLDMyLDE2LjVhMTEuMDgsMTEuMDgsMCwwLDEtMy43MSw4LjExLDEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAs''@;'; put 'put ''MSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyYTE2LDE2LDAsMCwxLDQuNTUuNjZBNy40NCw3LjQ0LDAsMCwxLDIzLDMuMjJhMTgsMTgsMCwwLDAtNS0uNzJjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhs''@;'; put 'put ''NS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QTEyLjMyLDEyLjMyLDAsMCwwLDMzLjM4LDEyLjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTExLDE1LjVhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI1LDIwLjVhMSwxLDAsMCwwLDAsMmg3LjVhMSwx''@;'; put 'put ''LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yOCwxMS41YTEsMSwwLDAsMCwxLDFIMjQuNzJhMSwxLDAsMCwwLC44My0uNDdBNy41Myw3LjUzLDAsMCwxLDI0''@;'; put 'put ''LDEwLjVIMTEuMjhBMSwxLDAsMCwwLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRs''@;'; put 'put ''MC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVabTgsMTRhMSwxLDAsMCwxLTEsMUgxMWExLDEsMCwwLDEsMC0ySDI1QTEsMSwwLDAsMSwyNiwxNi41Wm0tMy4yNSw1YTEsMSwwLDAsMS0xLDFoLTcuNWExLDEsMCwwLDEsMC0yaDcuNUExLDEsMCwwLDEs''@;'; put 'put ''MjIuNzUsMjEuNVptLTEyLjQ3LTEwYTEsMSwwLDAsMSwxLTFIMjQuNzJhMSwxLDAsMCwxLDAsMkgxMS4yOEExLDEsMCwwLDEsMTAuMjgsMTEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuMjVhNy40Niw3''@;'; put 'put ''LjQ2LDAsMCwxLTQuMzUtMS40LDEsMSwwLDAsMS0uOTMuNjVIMTEuMjhhMSwxLDAsMCwxLDAtMkgyNC4yQTcuNDYsNy40NiwwLDAsMSwyMywzLjJhMTgsMTgsMCwwLDAtNS0uN2MtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMu''@;'; put 'put ''NTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjcsMTIuMzQsMTIuMzQsMCwwLDAtLjY4LTRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjI1Wk0yMS43NSwyMi41aC03LjVhMSwxLDAsMCwxLDAtMmg3LjVhMSwxLDAsMCwxLDAsMlptMy4yNS01SDExYTEsMSwwLDAs''@;'; put 'put ''MSwwLTJIMjVhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI1Ljc1IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksbC5DbHJTaGFwZVBpY3R1cmU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJW''@;'; put 'put ''MzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQx''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1''@;'; put 'put ''LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0t''@;'; put 'put ''NC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBM''@;'; put 'put ''MTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIy''@;'; put 'put ''Ljc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5''@;'; put 'put ''LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksbC5DbHJTaGFwZUhhcHB5RmFjZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0w''@;'; put 'put ''LDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjg5IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4wNSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjEzLDI4LjIxYTguNjcsOC42NywwLDAsMCw4LjI2''@;'; put 'put ''LTZIOS44N0E4LjY3LDguNjcsMCwwLDAsMTguMTMsMjguMjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNOC44OSwxMy44OWEyLDIsMCwx''@;'; put 'put ''LDEsMiwyQTIsMiwwLDAsMSw4Ljg5LDEzLjg5Wm05LjI0LDE0LjMyYTguNjcsOC42NywwLDAsMS04LjI2LTZIMjYuMzhBOC42Nyw4LjY3LDAsMCwxLDE4LjEzLDI4LjIxWm02LjkzLTEyLjMyYTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDI1LjA1LDE1Ljg5WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGwuQ2xyU2hhcGVOZXV0cmFsRmFjZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMDUsMjIuMDZoLTEyYTEsMSwwLDAsMCwwLDJoMTJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjExLjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuMDUsMjEuMDZhMSwxLDAsMCwxLTEsMWgtMTJhMSwxLDAsMCwxLDAtMmgxMkExLDEsMCwwLDEsMjUuMDUsMjMuMDZaTTI3LDE0LjI4YTEuOCwx''@;'; put 'put ''LjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuOCwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuMTYsMTYuMDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksbC5DbHJTaGFwZVNhZEZhY2U9KDAs''@;'; put 'put ''YS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS40MSIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTYsMjBhOSw5LDAsMCwwLTcuMzMsMy43OCwxLDEsMCwxLDAsMS42MywxLjE2LDcsNywwLDAsMSwxMS4zMS0uMTMsMSwxLDAsMCwwLDEuNi0xLjJBOSw5LDAsMCwwLDE4LjE2LDIwWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTksMTIuMjhhMS44LDEuOCwwLDEsMS0xLjgtMS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS41NSwxLjhhMS44LDEuOCww''@;'; put 'put ''LDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuNDEsMTYuMDhabTE0LDcuNTNhMSwxLDAsMCwxLTEuNiwxLjIsNyw3LDAsMCwwLTExLjMxLjEzLDEsMSwwLDEsMS0xLjYzLTEuMTYsOSw5LDAsMCwxLDE0LjU0LS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''Lz4nKSxsLkNsclNoYXBlVGh1bWJzVXA9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDI2Yy0yLjkyLDEuODItNy4zLDQtOS4zNyw0aC02YTE2LjY4LDE2LjY4LDAsMCwxLTMuMzEtNi4wOEEyNi43MSwyNi43MSwwLDAsMSw0LDE2aDlWNmEyLjA1LDIuMDUsMCwwLDEsMS4yNi0xLjY5''@;'; put 'put ''Yy43NywyLDIuNjIsNi41Nyw0LjIzLDguNzJBMTEuMzksMTEuMzksMCwwLDAsMjQsMTYuOTFWMTQuNzhhOS4xMyw5LjEzLDAsMCwxLTMuOTEtM2MtMS44OC0yLjUxLTQuMjktOS4xMS00LjMxLTkuMTdBMSwxLDAsMCwwLDE0LjU5LDJDMTMuMjUsMi4zOCwxMSwzLjYsMTEsNnY4SDNhMSwxLDAs''@;'; put 'put ''MCwwLTEsMSwyOSwyOSwwLDAsMCwxLjQsOS42MmMxLjg5LDUuNCw0LjEsNy4xNCw0LjIsNy4yMmExLDEsMCwwLDAsLjYxLjIxaDYuNDJjMi40MywwLDYuNTUtMiw5LjM3LTMuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zNCwzMUgyN2ExLDEsMCwwLDEtMS0xVjE0YTEsMSwwLDAsMSwxLTFoN1ptLTYtMmg0VjE1SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjMsMTIuMTJDMTcuNTEsOS4yOCwxNC44OCwy''@;'; put 'put ''LDE0Ljg4LDJTMTIsMi44MywxMiw1LjI1VjE1SDIuMjNhMjkuNDYsMjkuNDYsMCwwLDAsMS40NCw5Ljc0QzUuNjEsMzAuMjcsNy44LDMyLDcuOCwzMmg2Ljg2QzE2LjksMzIsMjEsMzAuMDYsMjQsMjguMzFWMTUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTkuNjMsMTIuMTJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEzYTEsMSwwLDAsMC0xLDFWMzBhMSwxLDAsMCwwLDEsMWg3VjEzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlVGh1bWJzRG93bj0o''@;'; put 'put ''MCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIsMTBjMi45Mi0xLjgyLDcuMy00LDkuMzctNGg2YTE2LjY4LDE2LjY4LDAsMCwxLDMuMzEsNi4wOEEyNi43MSwyNi43MSwwLDAsMSwzMiwyMEgyM1YzMGEyLjA1LDIuMDUsMCwwLDEtMS4yNiwxLjY5Yy0uNzctMi0yLjYyLTYuNTctNC4yMy04''@;'; put 'put ''LjcyQTExLjM5LDExLjM5LDAsMCwwLDEyLDE5LjA5djIuMTNhOS4xMyw5LjEzLDAsMCwxLDMuOTEsM2MxLjg4LDIuNTEsNC4yOSw5LjExLDQuMzEsOS4xN2ExLDEsMCwwLDAsMS4xOS42M0MyMi43NSwzMy42MiwyNSwzMi40LDI1LDMwVjIyaDhhMSwxLDAsMCwwLDEtMSwyOSwyOSwwLDAsMC0x''@;'; put 'put ''LjQtOS42MmMtMS44OS01LjQtNC4xLTcuMTQtNC4yLTcuMjJBMSwxLDAsMCwwLDI3Ljc5LDRIMjEuMzdDMTguOTQsNCwxNC44Myw2LDEyLDcuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDVIOWExLDEs''@;'; put 'put ''MCwwLDEsMSwxVjIyYTEsMSwwLDAsMS0xLDFIMlpNOCw3SDRWMjFIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjM3LDIzLjg0YzIuMTIsMi44NCw0Ljc2LDEwLjA3LDQuNzYsMTAuMDdTMjQsMzMuMTMs''@;'; put 'put ''MjQsMzAuNzFWMjFoOS43N2EyOS40NiwyOS40NiwwLDAsMC0xLjQ0LTkuNzRDMzAuMzksNS42OCwyOC4yLDQsMjguMiw0SDIxLjM1QzE5LjEsNCwxNSw1LjksMTIsNy42NXYxMi44QTEwLjg0LDEwLjg0LDAsMCwxLDE2LjM3LDIzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDIzYTEsMSwwLDAsMCwxLTFWNkExLDEsMCwwLDAsOSw1SDJWMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVDcm93bj0oMCxhLmNsckljb25TVkcpKCdcbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTQsMTMuMzNBMS4zOSwxLjM5LDAsMSwwLDIuNiwxNC43MiwxLjM5LDEuMzksMCwwLDAsNCwxMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS44MSwxNS44NGEyMC4zNSwyMC4zNSwwLDAsMC00LjU4LDEuNDMsMjIu''@;'; put 'put ''NywyMi43LDAsMCwwLTMuNDgsMi4xQTE3LjY5LDE3LjY5LDAsMCwxLDIyLDE2LjU3YTQ3LjY1LDQ3LjY1LDAsMCwxLTIuOC03LjY5LDEsMSwwLDAsMC0xLS43NCwxLDEsMCwwLDAtMSwuNzQsNDYuNzEsNDYuNzEsMCwwLDEtMi44LDcuNjksMTcsMTcsMCwwLDEtMS43NiwyLjgsMjIuNywyMi43''@;'; put 'put ''LDAsMCwwLTMuNDgtMi4xLDIwLjY2LDIwLjY2LDAsMCwwLTQuNTgtMS40MywxLDEsMCwwLDAtMSwuMzksMSwxLDAsMCwwLS4wOSwxLjA1QTUwLjEzLDUwLjEzLDAsMCwxLDcuODIsMzEuMTdhMSwxLDAsMCwwLDEsLjgzSDI3LjYyYTEsMSwwLDAsMCwxLS44Myw1MC4xNSw1MC4xNSwwLDAsMSw0''@;'; put 'put ''LjI2LTEzLjg5LDEsMSwwLDAsMC0uMDktMS4wNUExLDEsMCwwLDAsMzEuODEsMTUuODRaTTI2Ljc5LDMwSDkuNjRhNTUuNjYsNTUuNjYsMCwwLDAtMy40LTExLjcxLDE1Ljc1LDE1Ljc1LDAsMCwxLDIuMDkuNzgsMjAsMjAsMCwwLDEsMy44NSwyLjQ1LDEsMSwwLDAsMCwxLjM5LS4wOSwxOS4y''@;'; put 'put ''OCwxOS4yOCwwLDAsMCwyLjY3LTQsNDMuNDYsNDMuNDYsMCwwLDAsMi00Ljg5LDQxLjc0LDQxLjc0LDAsMCwwLDIsNC44OSwxOS45MiwxOS45MiwwLDAsMCwyLjY2LDQsMSwxLDAsMCwwLDEuNC4wOSwxOS4yMSwxOS4yMSwwLDAsMSwzLjg1LTIuNDUsMTQuNzcsMTQuNzcsMCwwLDEsMi4wOS0u''@;'; put 'put ''NzhBNTUuMDcsNTUuMDcsMCwwLDAsMjYuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC4yMywyNi4zNGExLjExLDEu''@;'; put 'put ''MTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDE4LjIzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEyLjU4LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMTIuNTgsMjYuMzRa''@;'; put 'put ''Ii8+PHBhdGggZD0iTTIzLjg5LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMjMuODksMjYuMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuXG4gIDxwYXRoIGQ9Ik0yLjYsMTEuOTNBMS40LDEuNCwwLDEsMCw0LDEz''@;'; put 'put ''LjMzLDEuNCwxLjQsMCwwLDAsMi42LDExLjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik0xOC4yMiw2LjM5QTEuMzksMS4zOSwwLDEsMCwxNi44NCw1LDEuMzksMS4zOSwwLDAsMCwxOC4yMiw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuNjMsMTYuMUExOC42MSwxOC42MSwwLDAsMCwyOCwx''@;'; put 'put ''Ny4zNGEyMS41NywyMS41NywwLDAsMC00LDIuNDksMTkuMiwxOS4yLDAsMCwxLTIuMjYtMy40OSw0OC45Miw0OC45MiwwLDAsMS0yLjUyLTYuNTgsMSwxLDAsMCwwLTEtLjcxaDBhMSwxLDAsMCwwLTEsLjcxLDQ4LjQyLDQ4LjQyLDAsMCwxLTIuNTIsNi41OCwxOC42OSwxOC42OSwwLDAsMS0y''@;'; put 'put ''LjI2LDMuNDgsMjIuODEsMjIuODEsMCwwLDAtNC0yLjQ4QTE4LjgzLDE4LjgzLDAsMCwwLDQuOSwxNi4xYTEsMSwwLDAsMC0xLC4zMywxLDEsMCwwLDAtLjEzLDEuMDcsNTUuOSw1NS45LDAsMCwxLDQsMTMuNSwxLDEsMCwwLDAsMSwuODNoMTlhMSwxLDAsMCwwLDEtLjgzLDU1LjksNTUuOSww''@;'; put 'put ''LDAsMSw0LTEzLjUsMSwxLDAsMCwwLS4xMy0xLjA3QTEsMSwwLDAsMCwzMS42MywxNi4xWk0xMS4wOCwyOC41NWExLjExLDEuMTEsMCwxLDEsMS4xLTEuMTFBMS4xMSwxLjExLDAsMCwxLDExLjA4LDI4LjU1Wm03LjE1LDBhMS4xMSwxLjExLDAsMCwxLDAtMi4yMSwxLjExLDEuMTEsMCwwLDEs''@;'; put 'put ''MCwyLjIxWm03LjE2LDBhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwyNS4zOSwyOC41NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgJyksbC5DbHJTaGFwZUhhc2h0YWc9KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMiwxMkgyNS4zNGwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDIzLjMsMTJIMTUuMTFsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwxMy4wNywxMkg2YTEsMSwwLDAsMCwwLDJoNi42N2wtMS42LDhINGExLDEsMCwwLDAsMCwyaDYuNjZMOS4xMSwzMS43NGExLDEsMCwwLDAsLjc5LDEu''@;'; put 'put ''MTcuNjguNjgsMCwwLDAsLjIsMCwxLDEsMCwwLDAsMS0uOEwxMi43LDI0aDguMTlsLTEuNTUsNy43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjIuNjIsMCwwLDAsLjE5LDAsMSwxLDAsMCwwLDEtLjhMMjIuOTMsMjRIMzBhMSwxLDAsMCwwLDAtMkgyMy4zM2wxLjYxLThIMzJhMSwxLDAsMCwwLDAt''@;'; put 'put ''MlpNMjEuMjksMjJIMTMuMWwxLjYxLThIMjIuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG5cbiAgPHBhdGggZD0iTTMxLjg3LDEwSDI2LjMybDEtNC44M0ExLDEsMCwwLDAsMjYuMzUsNGgtMmExLDEsMCwwLDAtMSwuNzhMMjIuMzMsMTBoLTUuNGwx''@;'; put 'put ''LTQuODNBMSwxLDAsMCwwLDE3LDRIMTVhMSwxLDAsMCwwLTEsLjc4TDEzLDEwSDdhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMmg1LjU1TDEwLjUsMjJoLTZhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMkg5LjY4bC0xLDQuODNhMSwxLDAsMCwwLDEs''@;'; put 'put ''MS4xN2gyYTEsMSwwLDAsMCwuOTUtLjc4TDEzLjY3LDI2aDUuNGwtMSw0LjgzQTEsMSwwLDAsMCwxOSwzMmgyYTEsMSwwLDAsMCwxLS43OEwyMy4wNSwyNmg2YTEsMSwwLDAsMCwxLS44bC40LTJhMSwxLDAsMCwwLTEtMS4ySDIzLjg3bDEuNjMtOGg2YTEsMSwwLDAsMCwxLS44bC40MS0yQTEs''@;'; put 'put ''MSwwLDAsMCwzMS44NywxMFptLTEyLDEyaC01LjRsMS42NC04aDUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksbC5Tb2NpYWxTaGFwZXM9e2Nyb3duOmwuQ2xyU2hhcGVDcm93bixzaGFyZTpsLkNsclNoYXBlU2hhcmUsc3RhcjpsLkNsclNoYXBl''@;'; put 'put ''U3RhciwiaGFsZi1zdGFyIjpsLkNsclNoYXBlSGFsZlN0YXIsYm9va21hcms6bC5DbHJTaGFwZUJvb2ttYXJrLGVudmVsb3BlOmwuQ2xyU2hhcGVFbnZlbG9wZSxjYWxlbmRhcjp2LkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6di5DbHJTaGFwZUV2ZW50LHRhc2tzOmwuQ2xyU2hhcGVUYXNrcyxm''@;'; put 'put ''bGFnOmwuQ2xyU2hhcGVGbGFnLGluYm94OmwuQ2xyU2hhcGVJbmJveCxoYXNodGFnOmwuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OmwuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpsLkNsclNoYXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxlcyI6bC5DbHJTaGFwZVRhbGtCdWJibGVzLCJj''@;'; put 'put ''aGF0LWJ1YmJsZSI6bC5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpsLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6bC5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpsLkNsclNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNlIjpsLkNsclNoYXBlU2FkRmFjZSwidGh1bWJz''@;'; put 'put ''LXVwIjpsLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpsLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLlNvY2lhbFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGwuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLlNvY2lhbFNoYXBlcywiZGF0ZSIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLlNvY2lhbFNoYXBlcy5j''@;'; put 'put ''YWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChsLlNvY2lhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTSxsLGEpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbC5DbHJTaGFwZVZNV0FwcD1sLkNsclNoYXBlVk09bC5D''@;'; put 'put ''bHJTaGFwZVJvdXRlcj1sLkNsclNoYXBlTmV0d29ya1N3aXRjaD1sLkNsclNoYXBlTmV0d29ya1NldHRpbmdzPWwuQ2xyU2hhcGVOZXR3b3JrR2xvYmU9bC5DbHJTaGFwZVRhYmxldD1sLkNsclNoYXBlTW9iaWxlPWwuQ2xyU2hhcGVCYXR0ZXJ5PWwuQ2xyU2hhcGVBcHBsaWNhdGlvbj1sLkNs''@;'; put 'put ''clNoYXBlQ29kZT1sLkNsclNoYXBlVGVybWluYWw9bC5DbHJTaGFwZURpc3BsYXk9bC5DbHJTaGFwZUNvbXB1dGVyPWwuQ2xyU2hhcGVGbG9wcHk9bC5DbHJTaGFwZVBsdWdpbj1sLkNsclNoYXBlRG93bmxvYWRDbG91ZD1sLkNsclNoYXBlVXBsb2FkQ2xvdWQ9bC5DbHJTaGFwZUV4cG9ydD1s''@;'; put 'put ''LkNsclNoYXBlSW1wb3J0PWwuQ2xyU2hhcGVTaGllbGRYPWwuQ2xyU2hhcGVTaGllbGQ9bC5DbHJTaGFwZVNoaWVsZENoZWNrPWwuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9bC5DbHJTaGFwZURhdGFDbHVzdGVyPWwuQ2xyU2hhcGVNZW1vcnk9bC5DbHJTaGFwZUNQVT1sLkNsclNoYXBlQnVpbGRp''@;'; put 'put ''bmc9bC5DbHJTaGFwZUFwcGxpY2F0aW9ucz1sLkNsclNoYXBlQ2x1c3Rlcj1sLkNsclNoYXBlU3RvcmFnZT1sLkNsclNoYXBlSG9zdD1sLkNsclNoYXBlRGFzaGJvYXJkPWwuQ2xyU2hhcGVNb3VzZT1sLkNsclNoYXBlS2V5Ym9hcmQ9bC5DbHJTaGFwZURldmljZXM9bC5DbHJTaGFwZUJhY2t1''@;'; put 'put ''cD1sLkNsclNoYXBlQmFja3VwUmVzdG9yZT1sLkNsclNoYXBlSGFyZERpc2s9bC5DbHJTaGFwZVJhY2tTZXJ2ZXI9bC5DbHJTaGFwZVdpZmk9bC5DbHJTaGFwZUJ1bmRsZT1sLkNsclNoYXBlQmxvY2tzR3JvdXA9bC5DbHJTaGFwZUJsb2NrPWwuQ2xyU2hhcGVMYXllcnM9bC5DbHJTaGFwZVVu''@;'; put 'put ''aW5zdGFsbD1sLkNsclNoYXBlSW5zdGFsbD1sLkNsclNoYXBlTm9XaWZpPWwuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9bC5DbHJTaGFwZVJ1bGVyUGVuY2lsPXZvaWQgMCxsLlRlY2hub2xvZ3lTaGFwZXM9bC5DbHJTaGFwZUZpbGVTaGFyZTI9bC5DbHJTaGFwZUNpQ2Q9bC5DbHJTaGFwZUFuaW1h''@;'; put 'put ''dGlvbj1sLkNsclNoYXBlVGFwZURyaXZlPWwuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9bC5DbHJDb250cm9sTHVuPWwuQ2xyU2hhcGVQb2Q9bC5DbHJTaGFwZU5vZGU9bC5DbHJTaGFwZU5hbWVzcGFjZT1sLkNsclNoYXBlTm9kZXM9bC5DbHJTaGFwZU5vZGVHcm91cD1sLkNsclNoYXBlU3RvcmFn''@;'; put 'put ''ZUFkYXB0ZXI9bC5DbHJTaGFwZUhvc3RHcm91cD1sLkNsclNoYXBlU3F1aWQ9bC5DbHJTaGFwZUNhcGFjaXRvcj1sLkNsclNoYXBlUmVzaXN0b3I9bC5DbHJTaGFwZUluZHVjdG9yPWwuQ2xyU2hhcGVSYWRhcj1sLkNsclNoYXBlVXNiPWwuQ2xyU2hhcGVRckNvZGU9bC5DbHJTaGFwZUZpbGVT''@;'; put 'put ''aGFyZT1sLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPWwuQ2xyU2hhcGVDb250YWluZXI9bC5DbHJTaGFwZUNkRHZkPWwuQ2xyU2hhcGVCYXJDb2RlPWwuQ2xyU2hhcGVBdG9tPWwuQ2xyU2hhcGVBc3NpZ25Vc2VyPWwuQ2xyU2hhcGVQcm9jZXNzT25WTT1sLkNsclNoYXBlQmx1ZXRvb3RoT2Zm''@;'; put 'put ''PWwuQ2xyU2hhcGVCbHVldG9vdGg9bC5DbHJTaGFwZVNTRD1sLkNsclNoYXBlTlZNZT1sLkNsclNoYXBlSGFyZERyaXZlRGlza3M9bC5DbHJTaGFwZUhhcmREcml2ZT1sLkNsclNoYXBlQWRtaW5pc3RyYXRvcj1sLkNsclNoYXBlRmxhc2s9bC5DbHJTaGFwZUhlbGl4PWwuQ2xyU2hhcGVEZXBs''@;'; put 'put ''b3k9bC5DbHJTaGFwZUNsb3VkVHJhZmZpYz1sLkNsclNoYXBlQ2xvdWRTY2FsZT1sLkNsclNoYXBlQ2xvdWROZXR3b3JrPWwuQ2xyU2hhcGVVbmxpbms9bC5DbHJTaGFwZUxpbms9bC5DbHJTaGFwZURpc2Nvbm5lY3Q9bC5DbHJTaGFwZUNvbm5lY3Q9bC5DbHJTaGFwZVVuYXJjaGl2ZT1sLkNs''@;'; put 'put ''clNoYXBlQXJjaGl2ZT1sLkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciBwPWEoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKTthPWEoCi8qISAuLi91dGlscy9zdmctdGFnLWdl''@;'; put 'put ''bmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxsLkNsclNoYXBlUnVsZXJQZW5jaWw9KDAsYS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAx''@;'; put 'put ''Ny40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42''@;'; put 'put ''SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4wOEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgy''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4zN1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBI''@;'; put 'put ''NC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0xMCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicp''@;'; put 'put ''LGwuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwz''@;'; put 'put ''Mi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODdsNSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2''@;'; put 'put ''LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMuODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43''@;'; put 'put ''LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCww''@;'; put 'put ''LDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2''@;'; put 'put ''LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEzMy43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJM''@;'; put 'put ''MTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLGwuQ2xyU2hhcGVOb1dpZmk9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''OCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi4yMSwyMS44NWExLDEs''@;'; put 'put ''MCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwyNi4yMSwyMS44NVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAuNzJhMjAuODgsMjAuODgs''@;'; put 'put ''MCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEsNS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEsMzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2''@;'; put 'put ''YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAuNTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUxLDAsMCwwLS40Ny0yLjFB''@;'; put 'put ''MjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWExNy40MSwxNy40MSwwLDAsMSw3LjYsMi41MkExLjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwxMi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4xLDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQuNjksMjQuNjksMCwwLDEs''@;'; put 'put ''My42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCwwLDAtNi43OSwxLjkzLDEu''@;'; put 'put ''NSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4yLDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0xLjQxLTI2LTI2WiIvPlxuJyksbC5DbHJTaGFwZUluc3RhbGw9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAu''@;'; put 'put ''OTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1''@;'; put 'put ''bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAs''@;'; put 'put ''MC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjky''@;'; put 'put ''QTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAs''@;'; put 'put ''MC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1''@;'; put 'put ''LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0i''@;'; put 'put ''TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksbC5DbHJTaGFwZVVuaW5zdGFsbD0oMCxhLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4''@;'; put 'put ''bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAs''@;'; put 'put ''MCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4y''@;'; put 'put ''M2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYx''@;'; put 'put ''MEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmEx''@;'; put 'put ''LDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwzLjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEs''@;'; put 'put ''MSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMw''@;'; put 'put ''YTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksbC5DbHJTaGFwZUxheWVycz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2''@;'; put 'put ''bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYu''@;'; put 'put ''ODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEs''@;'; put 'put ''Ljg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFs''@;'; put 'put ''LTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''ZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEsMzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLGwuQ2xyU2hhcGVCbG9j''@;'; put 'put ''az0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIs''@;'; put 'put ''OS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhMNiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEtNS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0yLjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSww''@;'; put 'put ''LDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4xLTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4x''@;'; put 'put ''Miw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCww''@;'; put 'put ''LDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4''@;'; put 'put ''LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwzMS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAsMTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYxNi42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAsMCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBs''@;'; put 'put ''LTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhBMS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwx''@;'; put 'put ''LDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgLz4nKSxsLkNsclNoYXBlQmxvY2tzR3JvdXA9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42''@;'; put 'put ''OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43''@;'; put 'put ''NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSww''@;'; put 'put ''LDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4xMSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIuMzEtMi4yOCwxTDEzLDYu''@;'; put 'put ''NDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgt''@;'; put 'put ''My4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAs''@;'; put 'put ''MCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCww''@;'; put 'put ''LDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0yLjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02Ljks''@;'; put 'put ''My4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wk0xMC42''@;'; put 'put ''LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAuMTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgtMi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUxLTNWMjEuMjJMMjUuMTks''@;'; put 'put ''MjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwx''@;'; put 'put ''OC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpN''@;'; put 'put ''MjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5''@;'; put 'put ''LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFptMTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41Mywx''@;'; put 'put ''OC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2ExLDEsMCwwLDAtLjg0LDBs''@;'; put 'put ''LTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgt''@;'; put 'put ''LjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0y''@;'; put 'put ''NS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4y''@;'; put 'put ''NywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxwYXRoIGQ9Ik0zMy41Mywx''@;'; put 'put ''OC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJWNmE3LjU1LDcuNTUsMCww''@;'; put 'put ''LDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEs''@;'; put 'put ''MCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptOS45LTEy''@;'; put 'put ''LjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIyOS45OCIg''@;'; put 'put ''Y3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVCdW5kbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1''@;'; put 'put ''Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIuMTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCww''@;'; put 'put ''LC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSxsLkNsclNoYXBlV2lmaT0o''@;'; put 'put ''MCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEu''@;'; put 'put ''MS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwx''@;'; put 'put ''LDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEu''@;'; put 'put ''MTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQs''@;'; put 'put ''NCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0yOS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwx''@;'; put 'put ''LDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEu''@;'; put 'put ''NywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSwwLDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41''@;'; put 'put ''MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJyksbC5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0zMy42''@;'; put 'put ''OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwyOVYyM0gzMnY2WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMw''@;'; put 'put ''LDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxMCIgeT0iOSIgd2lkdGg9''@;'; put 'put ''IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0x''@;'; put 'put ''OSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRWMTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBIMTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gyNHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yMy4x''@;'; put 'put ''Myw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUyLDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0djJIMTBaTTYsMTdIOHYy''@;'; put 'put ''SDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbicpLGwuQ2xyU2hhcGVIYXJkRGlzaz0oMCxhLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwxLjQ5LDZWMjlINFYyMS40''@;'; put 'put ''NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0z''@;'; put 'put ''NCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4wNiw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIs''@;'; put 'put ''MCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIxLjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4LjkzTDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhl''@;'; put 'put ''aWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0z''@;'; put 'put ''Mi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMi4yOSwy''@;'; put 'put ''MEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSxsLkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxh''@;'; put 'put ''LmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcs''@;'; put 'put ''NlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEu''@;'; put 'put ''NTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0xLjI1LTMuNTJMMTgsMi4x''@;'; put 'put ''NiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAs''@;'; put 'put ''MSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIy''@;'; put 'put ''NiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2''@;'; put 'put ''LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwxNi45NCwzMS43MiwyMS42''@;'; put 'put ''NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQs''@;'; put 'put ''MTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMuNjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYs''@;'; put 'put ''MTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYu''@;'; put 'put ''ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwy''@;'; put 'put ''LjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43NywyMS40Mywz''@;'; put 'put ''My4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41''@;'; put 'put ''QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJyksbC5DbHJTaGFwZUJhY2t1cD0oMCxhLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMxLDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMsMCwwLDEtLjE0LTJINy4w''@;'; put 'put ''N2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4z''@;'; put 'put ''NUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMwLjg3''@;'; put 'put ''LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAsMCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0y''@;'; put 'put ''SDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0i''@;'; put 'put ''MiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45Mywx''@;'; put 'put ''MkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIu''@;'; put 'put ''MzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwx''@;'; put 'put ''LDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNi41OCwyMS4yNiwxMC4y''@;'; put 'put ''LDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxl''@;'; put 'put ''cnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2Mt''@;'; put 'put ''LjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNhMy42NCwzLjY0LDAsMCwx''@;'; put 'put ''LTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4x''@;'; put 'put ''NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMuMDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDE5Ljg0''@;'; put 'put ''bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOS40MSwyMS4yNmwtLjc0''@;'; put 'put ''Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE2LjU4LDIxLjI2''@;'; put 'put ''LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwy''@;'; put 'put ''NHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJyksbC5DbHJTaGFwZURldmljZXM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCww''@;'; put 'put ''LDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhWMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIy''@;'; put 'put ''SDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwyaDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJW''@;'; put 'put ''NkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLGwuQ2xyU2hhcGVLZXlib2FyZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIyMiIgd2lkdGg9IjEuOTQi''@;'; put 'put ''IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYySDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2MkgxMVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEuMTNWMjJIMjQuODhaTTI1''@;'; put 'put ''LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlptMC00SDI3VjEzaDJaIi8+XG4nKSxsLkNsclNoYXBlTW91c2U9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYyNGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAs''@;'; put 'put ''OCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMsMCwwLDEsMi42LDBaIi8+XG4nKSxsLkNsclNoYXBlRGFzaGJvYXJkPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDQu''@;'; put 'put ''MjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUs''@;'; put 'put ''MS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwxOC42OWEzLDMsMCwxLDAsNC44My44NWw1LjkyLTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIuMDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMSw3Ljg0SDYuNjZh''@;'; put 'put ''MTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDExLjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIyLjU4LDdhNy41Miw3LjUy''@;'; put 'put ''LDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMx''@;'; put 'put ''LjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJsNS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgsMy41NSwxOS45Wm00Ljg4''@;'; put 'put ''LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYzLDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMuNTNDMzIuNDcsMjAuMTgs''@;'; put 'put ''MzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwxNi40OSwwLDAsMCw1LjQs''@;'; put 'put ''MzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMuNUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04LjE2TDcsMTEuMjlBMTQu''@;'; put 'put ''NTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgyLTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwuNTUsMCwuODNTMzIuNDcs''@;'; put 'put ''MjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJyksbC5DbHJTaGFwZUhvc3Q9KDAsYS5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwyLjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEuMTJBMS4xMywxLjEzLDAs''@;'; put 'put ''MCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1QTEuMzUsMS4zNSwwLDAs''@;'; put 'put ''MCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAuOFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIgeT0iNy4yIiB3aWR0aD0i''@;'; put 'put ''MTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4y''@;'; put 'put ''LTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMTMiIHk9IjIxIiB3''@;'; put 'put ''aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMwLTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgxMi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01Ljct''@;'; put 'put ''OS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44''@;'; put 'put ''LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0i''@;'; put 'put ''TTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgxMi44YzAuMi0wLjcsMC41''@;'; put 'put ''LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIuNywyNiwxMi4zeiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYuNSwyeiBNMTgsMzAuNWMt''@;'; put 'put ''MS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAuNSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIgcj0iMS4yIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIsMTUuM2Mt''@;'; put 'put ''MiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJIMTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwx''@;'; put 'put ''LjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yaDEx''@;'; put 'put ''LjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0xLjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAuMSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFDMjYuNCwxMi42LDI1LDEx''@;'; put 'put ''LjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9''@;'; put 'put ''IjUuOSIgcj0iNSIvPlxuJyksbC5DbHJTaGFwZVN0b3JhZ2U9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4yOSwzLDYuNzhWMjkuMzdj''@;'; put 'put ''MCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2LjcsMzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAsMCwxOCwxOC43YzQsMCw5''@;'; put 'put ''LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2''@;'; put 'put ''LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDksMTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2guNjFBMy42NiwzLjY2LDAs''@;'; put 'put ''MCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4z''@;'; put 'put ''NHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44''@;'; put 'put ''Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwxLjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2MwLDMuNDksOS40Myw0LjQz''@;'; put 'put ''LDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAsMCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4xMy0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCwwLDAsMTgsMTguN2M0LDAs''@;'; put 'put ''OS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMyw0My4zMywwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdW''@;'; put 'put ''Ni44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAsMCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00''@;'; put 'put ''LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5''@;'; put 'put ''LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwyMy41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMsNi43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcu''@;'; put 'put ''OTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAs''@;'; put 'put ''MCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwzOS40LDAsMCwwLDExLjY2''@;'; put 'put ''LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQuMTctNy4yMmMtMS44NS0u''@;'; put 'put ''MTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYtMkEzOS40LDM5LjQsMCww''@;'; put 'put ''LDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYsMjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZhNy40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40''@;'; put 'put ''LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUuMjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQu''@;'; put 'put ''MDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1''@;'; put 'put ''LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4nKSxs''@;'; put 'put ''LkNsclNoYXBlQ2x1c3Rlcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwxLjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9IjEuNzkiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDgu''@;'; put 'put ''NVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODlsLjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwzMEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEuNjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAzMiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9''@;'; put 'put ''IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEEx''@;'; put 'put ''LjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M1YzMEgyNy41djJI''@;'; put 'put ''MzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42''@;'; put 'put ''OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIxNS40IiB3aWR0aD0iNS41''@;'; put 'put ''IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42OEExLjY4LDEuNjgsMCww''@;'; put 'put ''LDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYs''@;'; put 'put ''MS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUtLjQ0VjMySDMzVjEyLjg3''@;'; put 'put ''QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxhLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAyMSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgNCAzMCA4''@;'; put 'put ''IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9p''@;'; put 'put ''bnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0''@;'; put 'put ''IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMw''@;'; put 'put ''IDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4''@;'; put 'put ''IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAzMiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAg''@;'; put 'put ''MTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAz''@;'; put 'put ''MiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSI0''@;'; put 'put ''IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTgiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDkuODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04LS1hbGVydGVkIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlQnVpbGRpbmc9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAs''@;'; put 'put ''MCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIy''@;'; put 'put ''MyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIg''@;'; put 'put ''aGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMjMiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0bDItMy40MUEyLjEyLDIu''@;'; put 'put ''MTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdv''@;'; put 'put ''biBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMxLDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01''@;'; put 'put ''SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVpt''@;'; put 'put ''MC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1h''@;'; put 'put ''bGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUuNFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE3Ljg4LDNaTTksMjVI''@;'; put 'put ''N1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVIMTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUsNy41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1SDI0VjIzaDJabTAtNUgy''@;'; put 'put ''NFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhWMzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEy''@;'; put 'put ''IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9''@;'; put 'put ''IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYi''@;'; put 'put ''IHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUNQVT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEuNUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSww''@;'; put 'put ''LTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4x''@;'; put 'put ''LDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yOCwyNy45YS4xLjEs''@;'; put 'put ''MCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4xLjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1''@;'; put 'put ''Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZI''@;'; put 'put ''MzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCww''@;'; put 'put ''LDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAs''@;'; put 'put ''MS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1''@;'; put 'put ''SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEu''@;'; put 'put ''NiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYz''@;'; put 'put ''MGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTUuNGgtLjc3QTMu''@;'; put 'put ''NjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2''@;'; put 'put ''djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45''@;'; put 'put ''VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMu''@;'; put 'put ''NTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEuOTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRW''@;'; put 'put ''My44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEu''@;'; put 'put ''OC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMTgu''@;'; put 'put ''MTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEsMi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4x''@;'; put 'put ''QTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4y''@;'; put 'put ''YS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlTWVtb3J5PSgwLGEuY2xySWNvblNWRykoJzxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAsMCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMyYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIMTZ2OGg0''@;'; put 'put ''VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0iNC42IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgxOS41NmwxLjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJBNy40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJINEEyLDIsMCwwLDAsMiw5''@;'; put 'put ''djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUu''@;'; put 'put ''NTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4x''@;'; put 'put ''LDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAsMS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0xMiwyMEg4VjEyaDRabTgs''@;'; put 'put ''MEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhDMjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUt''@;'; put 'put ''MS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42''@;'; put 'put ''Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQu''@;'; put 'put ''MzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEy''@;'; put 'put ''Ljc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0x''@;'; put 'put ''LjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQs''@;'; put 'put ''NS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwxOC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3''@;'; put 'put ''LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4z''@;'; put 'put ''OHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSwwYTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUt''@;'; put 'put ''NC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcu''@;'; put 'put ''OTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIy''@;'; put 'put ''LjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwx''@;'; put 'put ''NC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEu''@;'; put 'put ''NDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41Miw3LjUyLDAsMCwxLC4x''@;'; put 'put ''NC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY1YzAsLjU0LTEu''@;'; put 'put ''NDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMw''@;'; put 'put ''IiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40OGM1LjMuMjYsOSwyLjYs''@;'; put 'put ''OSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMu''@;'; put 'put ''NzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2''@;'; put 'put ''LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45Mywx''@;'; put 'put ''MC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgs''@;'; put 'put ''MjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzktMi43bC0uNjYsMGMtNC45''@;'; put 'put ''MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3''@;'; put 'put ''LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4w''@;'; put 'put ''OCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1''@;'; put 'put ''LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2''@;'; put 'put ''Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUsMTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMzQTcuNDYsNy40NiwwLDAs''@;'; put 'put ''MSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuMDksNC42MmwxLTEuNzZB''@;'; put 'put ''MTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAsMCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5TDguMywyOC4wN0ExNCwx''@;'; put 'put ''NCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjIsMTMuNGExMy45''@;'; put 'put ''MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0LjhhNy40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04''@;'; put 'put ''LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1LjkxLDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywyOS42TDE3LjQ5LDE3WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTUsMTdhMTYsMTYsMCww''@;'; put 'put ''LDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44''@;'; put 'put ''NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAs''@;'; put 'put ''MS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTIt''@;'; put 'put ''LjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSwwLDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41''@;'; put 'put ''MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVNoaWVsZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVh''@;'; put 'put ''NDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0x''@;'; put 'put ''MiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItM2MxLC42''@;'; put 'put ''NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQu''@;'; put 'put ''MTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCwwLDQuNTEsMi40MmMwLS4x''@;'; put 'put ''LDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42''@;'; put 'put ''NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAs''@;'; put 'put ''MS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02''@;'; put 'put ''LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQu''@;'; put 'put ''MzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEz''@;'; put 'put ''LjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlU2hpZWxkWD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQz''@;'; put 'put ''Ljc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEy''@;'; put 'put ''LTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00LjgxLDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0Ljgx''@;'; put 'put ''LTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0u''@;'; put 'put ''NTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEu''@;'; put 'put ''NCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlSW1wb3J0PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAs''@;'; put 'put ''MjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGExLDEsMCwwLDAtMS40MSwx''@;'; put 'put ''LjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEuOTJMMTUuNyw2SDE2djZI''@;'; put 'put ''MTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40''@;'; put 'put ''MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEz''@;'; put 'put ''LjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFo''@;'; put 'put ''Ny42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgxNS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiwwLDAsMCwyLDJIMjhhMiwy''@;'; put 'put ''LDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJs''@;'; put 'put ''LTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUV4cG9ydD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgx''@;'; put 'put ''MC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0x''@;'; put 'put ''LjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSww''@;'; put 'put ''LDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwx''@;'; put 'put ''LjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42''@;'; put 'put ''OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYt''@;'; put 'put ''LjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1''@;'; put 'put ''LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4x''@;'; put 'put ''NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIyLjc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwxLDAsMCwxLDE3LDIyWk0x''@;'; put 'put ''MiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYs''@;'; put 'put ''Ni4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgsNy43NSw3Ljc1LDAsMCwx''@;'; put 'put ''LDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMuOTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4x''@;'; put 'put ''NGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIu''@;'; put 'put ''MjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgsMCwwLDAtMy4wNy0uNDUs''@;'; put 'put ''MTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIu''@;'; put 'put ''NTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUs''@;'; put 'put ''MCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQuNTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhB''@;'; put 'put ''Ny43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43''@;'; put 'put ''NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAu''@;'; put 'put ''MzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40Myww''@;'; put 'put ''LDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEuMjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywyNy43OGw1LDUsNS01YTEs''@;'; put 'put ''MSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDct''@;'; put 'put ''LjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwy''@;'; put 'put ''Ni44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0y''@;'; put 'put ''LDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS44Nyw0LjY5YTgu''@;'; put 'put ''NzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42''@;'; put 'put ''NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwu''@;'; put 'put ''MDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCwwLDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQtMTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVQbHVnaW49KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5''@;'; put 'put ''LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3''@;'; put 'put ''YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwx''@;'; put 'put ''NUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMs''@;'; put 'put ''MCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx''@;'; put 'put ''LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44MUEzLjEzLDMuMTMsMCww''@;'; put 'put ''LDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVINWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwzLjEzLDMuMTMsMCwwLDEs''@;'; put 'put ''MTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIz''@;'; put 'put ''SDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0''@;'; put 'put ''LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAs''@;'; put 'put ''MCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2LjU5QTUuMTIsNS4xMiww''@;'; put 'put ''LDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAs''@;'; put 'put ''NS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42''@;'; put 'put ''OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44''@;'; put 'put ''MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gy''@;'; put 'put ''djguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlRmxvcHB5PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCww''@;'; put 'put ''LDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2LjUxTDMwLDkuNTlaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTEuNjhsLS40''@;'; put 'put ''My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwzLjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3''@;'; put 'put ''LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjZBMiwyLDAsMCwx''@;'; put 'put ''LDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3LjQ1LDcuNDUsMCwwLDEt''@;'; put 'put ''Mi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0y''@;'; put 'put ''NiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+''@;'; put 'put ''XG4gICAgICAgICcpLGwuQ2xyU2hhcGVDb21wdXRlcj0oMCxhLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAyNC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAsMzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41''@;'; put 'put ''LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2''@;'; put 'put ''YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDdIMjAuNzFsMS4x''@;'; put 'put ''NS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjcuNiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwzLjYsMzFIMzIuMzRhMi42''@;'; put 'put ''LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAsMS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEuNSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEu''@;'; put 'put ''MjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgyOVYyNGgzVjcuNTdBMS41''@;'; put 'put ''NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0x''@;'; put 'put ''LjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjki''@;'; put 'put ''IHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEuNTQsMCwwLDAsNCw3LjU3''@;'; put 'put ''VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx''@;'; put 'put ''TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwx''@;'; put 'put ''LjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwx''@;'; put 'put ''My4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZURpc3BsYXk9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCww''@;'; put 'put ''LDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0IDcuMTYgNi4xIDcuMTYg''@;'; put 'put ''Ni4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3''@;'; put 'put ''LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYx''@;'; put 'put ''LDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAxOS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4xNiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIs''@;'; put 'put ''MCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQsNy40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwz''@;'; put 'put ''Wk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDku''@;'; put 'put ''OTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxdjYuNDNINVY3SDIw''@;'; put 'put ''LjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAs''@;'; put 'put ''MCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUtNEgzLjVBMS41LDEuNSww''@;'; put 'put ''LDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVRlcm1pbmFsPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwy''@;'; put 'put ''LDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhIMzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3''@;'; put 'put ''IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAx''@;'; put 'put ''My40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAuOEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjggMTMuNzkgMTguOCA3IDIx''@;'; put 'put ''LjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gyMi41N2E3LjUyLDcuNTIs''@;'; put 'put ''MCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDVINEEyLDIs''@;'; put 'put ''MCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYyLjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUNvZGU9KDAs''@;'; put 'put ''YS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEsMSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCww''@;'; put 'put ''LTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwz''@;'; put 'put ''LjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41''@;'; put 'put ''Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41Niwx''@;'; put 'put ''MS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAsMS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSww''@;'; put 'put ''LDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40''@;'; put 'put ''NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCwwLDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAsMCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxsLkNsclNo''@;'; put 'put ''YXBlQXBwbGljYXRpb249KDAsYS5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMydjQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVCYXR0ZXJ5PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwx''@;'; put 'put ''MS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjEy''@;'; put 'put ''LDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlY1Ljg4QTEu''@;'; put 'put ''ODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjks''@;'; put 'put ''MTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUExLjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCww''@;'; put 'put ''LDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMu''@;'; put 'put ''NTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwxLDIzLDMuMzgsMS41Nywx''@;'; put 'put ''LjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41LDcuNSwwLDAsMSwyNSwx''@;'; put 'put ''MS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCww''@;'; put 'put ''LDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDksMCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wx''@;'; put 'put ''Ni45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEsMjAuNTUsMTVsMi43Niw0''@;'; put 'put ''Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4''@;'; put 'put ''YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgyMlYyLjYyQS42LjYs''@;'; put 'put ''MCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEu''@;'; put 'put ''MDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZU1vYmlsZT0oMCxhLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxsLkNsclNoYXBlVGFibGV0PSgwLGEuY2xySWNvblNWRykoJzxyZWN0IHg9''@;'; put 'put ''IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAs''@;'; put 'put ''MCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0''@;'; put 'put ''QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxsLkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThh''@;'; put 'put ''MSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSww''@;'; put 'put ''LDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjky''@;'; put 'put ''LDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwxLTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzdabS00LTMu''@;'; put 'put ''NmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEu''@;'; put 'put ''OTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAs''@;'; put 'put ''MCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAs''@;'; put 'put ''MCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCwwLDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQuMjcsMTkuMTFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs''@;'; put 'put ''ZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwuNjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjItMi41MkgyMy44M2ExNy4y''@;'; put 'put ''OSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTguNTksMTguNTksMCwwLDAt''@;'; put 'put ''Ni4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0''@;'; put 'put ''LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2MwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2''@;'; put 'put ''LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQx''@;'; put 'put ''LjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTgu''@;'; put 'put ''NDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAsMCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEuOTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5LDE4LjU5LDAsMCwwLDIu''@;'; put 'put ''NzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNywwLDAsMSw4LjUzLS42Miw3''@;'; put 'put ''LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcsNWE3LjQ1LDcuNDUsMCww''@;'; put 'put ''LDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCww''@;'; put 'put ''LDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcu''@;'; put 'put ''NTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEy''@;'; put 'put ''LjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2''@;'; put 'put ''LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2LDAsMCwwLDQuOTMsNS4y''@;'; put 'put ''M2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAsMCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUs''@;'; put 'put ''MmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAs''@;'; put 'put ''MS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcu''@;'; put 'put ''NTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQz''@;'; put 'put ''LS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2MwLS4zMiwwLS42NSwwLTFo''@;'; put 'put ''MGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEtMy4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAs''@;'; put 'put ''MCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAs''@;'; put 'put ''MCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1''@;'; put 'put ''LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4''@;'; put 'put ''LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYsMTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAsMS0xLjU0aC0xLjZBMy42''@;'; put 'put ''OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUsMi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMuMjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIuNzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNI''@;'; put 'put ''MjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMsMTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMsMi4zMywwLDAsMSw0LjM3''@;'; put 'put ''LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCwwLDAtNSw0Ljc0YzAtLjIs''@;'; put 'put ''MC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwyLjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4xMi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdjLjEuNTkuMTQuOS4yMSwx''@;'; put 'put ''LjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYsMCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAsMCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgs''@;'; put 'put ''Mi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYtMi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUs''@;'; put 'put ''MjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEsMTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0y''@;'; put 'put ''Ljg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3LDAsMCwwLC4zNS0xLjJj''@;'; put 'put ''MC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEtMS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTksMCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAsMEEyLjc3LDIuNzcsMCww''@;'; put 'put ''LDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSww''@;'; put 'put ''LDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1''@;'; put 'put ''LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMuODcsMy44NywwLDAsMCwy''@;'; put 'put ''NSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGExLjE0LDEuMTQsMCwwLDAt''@;'; put 'put ''LjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0uMjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4xNCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQsMS4xNCwwLDAsMC0xLjA4''@;'; put 'put ''LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAsMC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0uMjguNjVMMTYuNTgsMjNh''@;'; put 'put ''MS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcuNDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWExLjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43MnEuMzEuMTQuNjMuMjZs''@;'; put 'put ''LjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMxbC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYyLS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAsLjIxLTEuMzVsLS43My0x''@;'; put 'put ''LjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUtMiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAsMSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0xLjEyLjQ2bC0uNDIuMTIt''@;'; put 'put ''LjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzctLjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4yMi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4xMi0uNDFhNS41Myw1LjUz''@;'; put 'put ''LDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTktMS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUuODYuODUtMSwxLjc3LjIx''@;'; put 'put ''LjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3''@;'; put 'put ''LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcsNywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFMMjAsMTcuOGEuMzcu''@;'; put 'put ''MzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAsMCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEuOWEuMzcuMzcsMCwwLDAs''@;'; put 'put ''LjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0''@;'; put 'put ''LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUsMjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41MywyNSwzLjMzLDMuMzMsMCww''@;'; put 'put ''LDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45NWEyLDIsMCwwLDEsLjA5''@;'; put 'put ''LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUsMGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgtNy4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTguNTIsMCwwLDAsNC42NSw1''@;'; put 'put ''LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNSwxLjk0LDEu''@;'; put 'put ''OTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEsMS4yNi42NGExMS45MywxMS45MywwLDAsMSwxLDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45NCwwLDAsMSwuMTItMS40''@;'; put 'put ''NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41''@;'; put 'put ''M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDks''@;'; put 'put ''MTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0zMiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0i''@;'; put 'put ''MyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4x''@;'; put 'put ''MiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9''@;'; put 'put ''IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40''@;'; put 'put ''MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5PSIyMiIgd2lkdGg9IjEu''@;'; put 'put ''OCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1LTUuMzJhNy40OSw3LjQ5''@;'; put 'put ''LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCww''@;'; put 'put ''LDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEsMTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAsMjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41Nyw3SDcuMTNBMiwyLDAs''@;'; put 'put ''MCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW''@;'; put 'put ''MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVSb3V0ZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDExVjMuMzNhMSwxLDAsMCww''@;'; put 'put ''LTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEs''@;'; put 'put ''MCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEs''@;'; put 'put ''MCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJINS44NWwyLjcxLTIuNjlh''@;'; put 'put ''MSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQx''@;'; put 'put ''TDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEs''@;'; put 'put ''MCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEs''@;'; put 'put ''OC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEs''@;'; put 'put ''MSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40Mkwz''@;'; put 'put ''MC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTlo''@;'; put 'put ''Ny42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjguOCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAuMzIsMjEuNzRhLjguOCww''@;'; put 'put ''LDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40''@;'; put 'put ''YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wt''@;'; put 'put ''Mi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCwwLDEsMS0xLjEyLTEuMTRs''@;'; put 'put ''Mi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMuNjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5QTMuNjUsMy42NSwwLDAs''@;'; put 'put ''MSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44MiwxNS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42''@;'; put 'put ''SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwx''@;'; put 'put ''LDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIyLDEyLjc2QTcuNDksNy40''@;'; put 'put ''OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwx''@;'; put 'put ''LDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44''@;'; put 'put ''LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4x''@;'; put 'put ''NUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVZNPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwy''@;'; put 'put ''LDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIgd2lkdGg9IjEuOTkiIGhl''@;'; put 'put ''aWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMu''@;'; put 'put ''NWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJo''@;'; put 'put ''NHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDE3LjE5''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywzSDExQTIsMiwwLDAsMCw5''@;'; put 'put ''LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMuNTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdhMiwyLDAsMCwwLTItMkg2''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlhMy42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEuNnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAg''@;'; put 'put ''ICAgICcpLGwuQ2xyU2hhcGVWTVdBcHA9KDAsYS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDggMjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAyMiA4IDIyIDYgMzAgNiAz''@;'; put 'put ''MCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9''@;'; put 'put ''IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHln''@;'; put 'put ''b24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9''@;'; put 'put ''IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40NSA0IDIwIDQgMjAgOCAy''@;'; put 'put ''MC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2''@;'; put 'put ''Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAz''@;'; put 'put ''MiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAy''@;'; put 'put ''OCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCwwLDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''NyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiww''@;'; put 'put ''LDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwy''@;'; put 'put ''Ny40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3''@;'; put 'put ''LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQu''@;'; put 'put ''MzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3djEuNkgxOS4wN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQs''@;'; put 'put ''MTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45''@;'; put 'put ''MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAu''@;'; put 'put ''NDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYxLjZIMjRWMTJabTAsNS42''@;'; put 'put ''SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2''@;'; put 'put ''LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEsMC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3QTYuMzQsNi4zNCwwLDAs''@;'; put 'put ''MCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu''@;'; put 'put ''NjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5''@;'; put 'put ''LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIu''@;'; put 'put ''MzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0QTguMzQsOC4zNCww''@;'; put 'put ''LDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxsLkNsclNoYXBlQXJjaGl2ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMy''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMsMCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEsMjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVWM2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAs''@;'; put 'put ''MSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEyczAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTQiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVVbmFyY2hpdmU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlW''@;'; put 'put ''MTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEz''@;'; put 'put ''LjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43''@;'; put 'put ''OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgy''@;'; put 'put ''MC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCww''@;'; put 'put ''LDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''IiAvPlxuICAgICAgICAnKSxsLkNsclNoYXBlQ29ubmVjdD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIy''@;'; put 'put ''LDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVEaXNj''@;'; put 'put ''b25uZWN0PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAsMCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwx''@;'; put 'put ''aDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1''@;'; put 'put ''LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICcpLGwuQ2xyU2hhcGVMaW5rPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwxLTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEu''@;'; put 'put ''NzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcu''@;'; put 'put ''NiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcuODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRh''@;'; put 'put ''NCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0xLjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42''@;'; put 'put ''OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVVubGluaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUu''@;'; put 'put ''OTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQu''@;'; put 'put ''NzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSxsLkNsclNoYXBlQ2xvdWROZXR3b3JrPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41''@;'; put 'put ''NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEs''@;'; put 'put ''MTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0y''@;'; put 'put ''LjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUNsb3VkU2NhbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEu''@;'; put 'put ''MTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwzLjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIu''@;'; put 'put ''MzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45''@;'; put 'put ''MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwyLjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42''@;'; put 'put ''NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4x''@;'; put 'put ''Niw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJIMTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwu''@;'; put 'put ''MTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIw''@;'; put 'put ''LjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEu''@;'; put 'put ''ODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4yNSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUt''@;'; put 'put ''Ljg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCww''@;'; put 'put ''LDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4y''@;'; put 'put ''NWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZURlcGxveT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAs''@;'; put 'put ''MS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwx''@;'; put 'put ''LDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdBMSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIx''@;'; put 'put ''LDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEs''@;'; put 'put ''MSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2''@;'; put 'put ''bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUhlbGl4PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwxMy4wN2EuOS45LDAsMCwx''@;'; put 'put ''LS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEsOC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUuMTFhLjkuOSwwLDAsMS0u''@;'; put 'put ''NDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2EuOS45LDAsMCwxLS40OS0x''@;'; put 'put ''LjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIsMzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45LjksMCwwLDEtLjQ5LTEu''@;'; put 'put ''NjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIsMjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41OSwzLjU5LDAsMCwxLC4x''@;'; put 'put ''NSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZsLTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwyMS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEtMy41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwuNDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0LDE1LjIyLDUuNTMsNS41''@;'; put 'put ''MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwxLTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAsMSwyLjE1LjcxLDMuNTcs''@;'; put 'put ''My41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcsNS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxOS42M0E1LjU1''@;'; put 'put ''LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcsMCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIsMS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4xMywwLDAsMCwuMjQuNTIs''@;'; put 'put ''Mi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAsMCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcuNjVsLTMuNDMsNi44N2E1''@;'; put 'put ''LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUuNTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhhLjkxLjkxLDAsMCwxLTEu''@;'; put 'put ''MjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSwwLDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVGbGFzaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAs''@;'; put 'put ''MCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwzNEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0y''@;'; put 'put ''LjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4wNUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRMNC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMx''@;'; put 'put ''LDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAsYS5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQuNzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQsMi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJhMTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0uMTFjLS40NywwLTEtLjA2''@;'; put 'put ''LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIsMCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxNi4yOWEuMzcuMzcs''@;'; put 'put ''MCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0xLjg2QS4zOC4zOCwwLDAs''@;'; put 'put ''MCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAsMCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYsMCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42bC0xLjgyLTFhLjM1LjM1''@;'; put 'put ''LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcsMCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwtMSwxLjkxYS4zNi4zNiww''@;'; put 'put ''LDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCwwLDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEuMzgtLjU3bDEuODksMWEu''@;'; put 'put ''MzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNywwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYsMCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMu''@;'; put 'put ''MzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVsLjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAsMCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4xNywyLjE3LDAsMCwxLC4z''@;'; put 'put ''NS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43LDIzLjQ2bC0y''@;'; put 'put ''LS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEuNDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4wN2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgyMy44NGEuMzguMzgsMCww''@;'; put 'put ''LDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCwwLS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1YS4z''@;'; put 'put ''Ni4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCwwLDAsMCwuMzYuMjZoMi4w''@;'; put 'put ''NWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIsMzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0uNjFhLjM5LjM5LDAsMCww''@;'; put 'put ''LC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAsMCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJyksbC5DbHJT''@;'; put 'put ''aGFwZUhhcmREcml2ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5''@;'; put 'put ''LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45MS4xM0wxNSwxNi4xNmEy''@;'; put 'put ''LjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwxMiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEuODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjctMkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCwwLDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCwwLS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAsMC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0uMjZBNy42Niw3LjY2LDAs''@;'; put 'put ''MCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSwwLDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMuNTksMy41OSwwLDEsMS0z''@;'; put 'put ''LjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQuMDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4zMSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjguMDZabTEwLjE2LS43M0E5''@;'; put 'put ''LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQsNy42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhBOS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcuNjYsNy42NiwwLDAsMC03''@;'; put 'put ''LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYsMTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEs''@;'; put 'put ''MzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxhLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEuNzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZBMS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMzIsMjhI''@;'; put 'put ''MTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyMy42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMuODdhMS4yNCwxLjI0LDAs''@;'; put 'put ''MSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1SDIzLjcxVjIyaDQuNDFh''@;'; put 'put ''LjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCwwLDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMsNC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNhNSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEsMCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2LjMyLDYuMzIsMCwwLDAs''@;'; put 'put ''MTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkExLjc0LDEuNzQsMCwwLDAs''@;'; put 'put ''My43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3''@;'; put 'put ''Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYyLDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRBMS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMuNzRBMS43NCwxLjc0LDAs''@;'; put 'put ''MCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4zNSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4xM2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1LjM2LDAsMCwwLS4xMSwx''@;'; put 'put ''LDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAsMC0xLjQxLjE2bC0uNDUt''@;'; put 'put ''MS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAsMCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVOVk1lPSgwLGEuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRIMjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''MTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEsMSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEsMSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCww''@;'; put 'put ''LDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVNTRD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0''@;'; put 'put ''QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMTAu''@;'; put 'put ''MjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEuMDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0y''@;'; put 'put ''LjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIuNDlTOC4yNiwxOC4yMiwx''@;'; put 'put ''MCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIwLjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUyUzE5Ljcz''@;'; put 'put ''LDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEuMTksMiwyLjg5LDIuNDRj''@;'; put 'put ''MS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0LTQuMTJoLTIuOXY4LjI0''@;'; put 'put ''aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwxLDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwy''@;'; put 'put ''LDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEsOEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEuMjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsNS4yMSwyOFpt''@;'; put 'put ''NS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0LjU4LDAsMCwxLDMuMTIs''@;'; put 'put ''MS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4wOGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2''@;'; put 'put ''LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4LDMuNjgsMCwwLDAtMi4z''@;'; put 'put ''Ny0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIuMjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMyOCwyMi4wOCwyNS4yNiwy''@;'; put 'put ''Mi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVCbHVldG9vdGg9KDAsYS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwx''@;'; put 'put ''LDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4y''@;'; put 'put ''My02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMu''@;'; put 'put ''NiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVWMTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwx''@;'; put 'put ''LjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIuMzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwy''@;'; put 'put ''Ni41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVCbHVldG9vdGhPZmY9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwx''@;'; put 'put ''Ni42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwx''@;'; put 'put ''OSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0EyLDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUu''@;'; put 'put ''NDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0zLjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIu''@;'; put 'put ''NzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcs''@;'; put 'put ''MS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlUHJvY2Vzc09uVk09KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQu''@;'; put 'put ''NDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40NiwxMi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCww''@;'; put 'put ''LDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwxLjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEs''@;'; put 'put ''MSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIsMTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNhMSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwx''@;'; put 'put ''LDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0x''@;'; put 'put ''LDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGwuQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh''@;'; put 'put ''dGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUzLDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2''@;'; put 'put ''LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMxLjg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTgu''@;'; put 'put ''NjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2LjgxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQu''@;'; put 'put ''ODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCwwLS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4''@;'; put 'put ''bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMuNzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGwuQ2xyU2hhcGVBdG9tPSgwLGEuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwyLjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIy''@;'; put 'put ''LDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43''@;'; put 'put ''OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQs''@;'; put 'put ''MCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAs''@;'; put 'put ''My42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02''@;'; put 'put ''LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1''@;'; put 'put ''LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2''@;'; put 'put ''YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCww''@;'; put 'put ''LDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwy''@;'; put 'put ''Mi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2LDIyLjg2LDAsMCwxLDMu''@;'; put 'put ''NDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwzLjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEuNDctMy44NSwxLjI4LTct''@;'; put 'put ''LjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMtLjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03LTEuMjgtOC43Ny41M0My''@;'; put 'put ''Ljg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwyNS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0LjEyLDEuNTEsMTMuMzQs''@;'; put 'put ''MTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSwwLDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiwwLDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgxLTEuODEsMi00LjkzLjUz''@;'; put 'put ''LTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjItLjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41NmMuNDMuNDMuODcuODUs''@;'; put 'put ''MS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCwwLDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAsMCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzItLjkyLDExLjQsMTEuNCww''@;'; put 'put ''LDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMzLDM2LjMzLDAsMCwxLDUt''@;'; put 'put ''NC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEyLjU3LDEyLjU3LDAsMCwx''@;'; put 'put ''LTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzguMjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIyLjg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjExKSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVCYXJDb2Rl''@;'; put 'put ''PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCww''@;'; put 'put ''LDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLGwuQ2xyU2hhcGVDZER2ZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0''@;'; put 'put ''LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIu''@;'; put 'put ''ODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkEx''@;'; put 'put ''MC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMw''@;'; put 'put ''LjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4xMmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTguMjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwx''@;'; put 'put ''NiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdBOC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4x''@;'; put 'put ''MywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCwwLTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43''@;'; put 'put ''NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlQ29udGFpbmVyPSgwLGEuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhWMjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCww''@;'; put 'put ''LDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjgu''@;'; put 'put ''OCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzksMCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEu''@;'; put 'put ''NzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEsLjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEt''@;'; put 'put ''Ljc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwu''@;'; put 'put ''Q2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQuMTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIuMTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIuNzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42LDAsMCwwLDguODksMWM0''@;'; put 'put ''LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJjMC0zLjE5LTguMTctNC0xMy00cy0xMywuODUtMTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMsMCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMiwxOEgx''@;'; put 'put ''OGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43''@;'; put 'put ''djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYyMi41MkEuNy43LDAsMCww''@;'; put 'put ''LDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48''@;'; put 'put ''cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRBLjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43Ljcs''@;'; put 'put ''MCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4VjguMTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5VjIyLjQ0bC4yNC4xQTI2''@;'; put 'put ''LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSwwLDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEyOSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIsMzAuMTIsMCwwLDAsMTYs''@;'; put 'put ''MTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4zMkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxsLkNsclNoYXBlRmlsZVNoYXJlPSgwLGEuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy''@;'; put 'put ''LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2''@;'; put 'put ''LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48''@;'; put 'put ''cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEt''@;'; put 'put ''Mi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwxLC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZVFyQ29kZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiwwLDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRIMjRabTItNmg0djRIMjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAsMCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAxNiA4IDE2IDYgMjAgNiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIgMTYgMTIgMTggMTAgMTgg''@;'; put 'put ''MTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEyIDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCAxNiAyMiAxNiAy''@;'; put 'put ''MiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAxOCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQgMzAgMTQgMzIgMjIgMzIg''@;'; put 'put ''MjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBwb2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4IDIyIDIwIDIyIDIwIDIw''@;'; put 'put ''IDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3QgeD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0iMjIiIHk9IjIwIiB3aWR0''@;'; put 'put ''aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAyOCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAxNiAzMCAxNCIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTgg''@;'; put 'put ''MjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSxsLkNsclNoYXBlVXNiPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIu''@;'; put 'put ''ODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAtMywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAsMCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEt''@;'; put 'put ''Mi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwzLjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43''@;'; put 'put ''OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42''@;'; put 'put ''OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMx''@;'; put 'put ''YS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIuMjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCww''@;'; put 'put ''LTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJoNC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAs''@;'; put 'put ''LjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVSYWRhcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIs''@;'; put 'put ''MThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTkuNCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNz''@;'; put 'put ''LTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2''@;'; put 'put ''LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRT''@;'; put 'put ''NCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03''@;'; put 'put ''LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywyLjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0''@;'; put 'put ''YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIu''@;'; put 'put ''NDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwx''@;'; put 'put ''Mi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcsMi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIu''@;'; put 'put ''ODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAsMCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcy''@;'; put 'put ''LDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0xLjg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45''@;'; put 'put ''M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwxNC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTEx''@;'; put 'put ''LjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVSZXNpc3Rvcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcsMCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSww''@;'; put 'put ''LDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEsMSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4''@;'; put 'put ''bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0x''@;'; put 'put ''LjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZUNhcGFjaXRvcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEs''@;'; put 'put ''MSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41''@;'; put 'put ''NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxsLkNsclNoYXBlU3F1aWQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBW''@;'; put 'put ''NkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCwwLDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSwwLTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEt''@;'; put 'put ''LjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAs''@;'; put 'put ''MywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCww''@;'; put 'put ''LDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEs''@;'; put 'put ''MCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxsLkNsclNoYXBlSG9zdEdyb3VwPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRBMS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJW''@;'; put 'put ''MzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCww''@;'; put 'put ''LDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIg''@;'; put 'put ''QzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwzMS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwx''@;'; put 'put ''MS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4x''@;'; put 'put ''LDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIz''@;'; put 'put ''LjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JyksbC5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwx''@;'; put 'put ''LDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCww''@;'; put 'put ''LTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2''@;'; put 'put ''IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC01Ii8+JyksbC5DbHJTaGFwZU5vZGVHcm91cD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1YxMy4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42''@;'; put 'put ''NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEs''@;'; put 'put ''MCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdM''@;'; put 'put ''MzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0xVjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcu''@;'; put 'put ''MzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEt''@;'; put 'put ''MVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGwuQ2xyU2hhcGVOb2Rlcz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQuOXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIi8+JyksbC5DbHJTaGFwZU5hbWVzcGFjZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwxLDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4y''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDkuNjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDku''@;'; put 'put ''NjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2''@;'; put 'put ''NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGwuQ2xyU2hhcGVOb2RlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4z''@;'; put 'put ''M1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksbC5DbHJTaGFwZVBvZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2''@;'; put 'put ''LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwy''@;'; put 'put ''MWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxsLkNsckNvbnRyb2xMdW49KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44MSwzNC44MSwwLDAsMSw4''@;'; put 'put ''LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4y''@;'; put 'put ''OCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYuODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1''@;'; put 'put ''LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgxNi42YTIsMiwwLDAsMCwy''@;'; put 'put ''LTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRIMzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEs''@;'; put 'put ''MUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2''@;'; put 'put ''LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFDMjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0i''@;'; put 'put ''TTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4z''@;'; put 'put ''LDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxu''@;'; put 'put ''ICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4w''@;'; put 'put ''OSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjda''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAuNzEsMTAuMTgsNi4zMSw4''@;'; put 'put ''LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEuOTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3''@;'; put 'put ''Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlYxNS40SDMw''@;'; put 'put ''Yy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0''@;'; put 'put ''aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAs''@;'; put 'put ''MSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgyVjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNGM1LDAsMTMuMjgtLjgz''@;'; put 'put ''LDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3LjgzSDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEy''@;'; put 'put ''NS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjks''@;'; put 'put ''Mi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjItLjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFBNDIuMTIsNDIuMTIsMCww''@;'; put 'put ''LDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcuMDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5LjdjMCwyLjE2LDMuNjQsMy4z''@;'; put 'put ''LDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAs''@;'; put 'put ''MS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTIu''@;'; put 'put ''NzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwuNDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4x''@;'; put 'put ''NiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwz''@;'; put 'put ''MmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEu''@;'; put 'put ''MjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcp''@;'; put 'put ''LGwuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZB''@;'; put 'put ''MiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44LjgsMCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cblxuICA8cmVjdCB4PSIy''@;'; put 'put ''MCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4''@;'; put 'put ''LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0YS44LjgsMCwxLDAsMS41''@;'; put 'put ''OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3LDAsMCwxLC4yOC0ySDZB''@;'; put 'put ''MiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDE1LjRWMzBINlY2SDIx''@;'; put 'put ''LjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMy''@;'; put 'put ''SDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0''@;'; put 'put ''VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcsNy4zNywwLDAsMSwuMjgt''@;'; put 'put ''Mkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJI''@;'; put 'put ''MTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41MUwyMi40NSw0SDZBMiwy''@;'; put 'put ''LDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRI''@;'; put 'put ''MTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5''@;'; put 'put ''LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiLz5cbiAgJyksbC5DbHJTaGFwZVRhcGVEcml2ZT0oMCxhLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUzLDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIsMi45MiwwLDAsMSwxMy4z''@;'; put 'put ''MywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQuNTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45MiwwLDEsMSwyLjkyLTIu''@;'; put 'put ''OTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4LjgxLDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAsMSwxLDIzLjYyLDE1LDIu''@;'; put 'put ''OTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4VjEySDI1LjUxYTcuNjYs''@;'; put 'put ''Ny42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQuNTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUsMi45MywyLjkzLDAsMCwx''@;'; put 'put ''LDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAsMCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgsMFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhB''@;'; put 'put ''MiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDEyLjIxLDE2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwxLDAsNS01QTUsNSwwLDAs''@;'; put 'put ''MCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgyMi4yM2EzLjcxLDMuNzEs''@;'; put 'put ''MCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMwVjI0SDZW''@;'; put 'put ''MTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLGwuQ2xyU2hhcGVBbmltYXRpb249KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0x''@;'; put 'put ''LjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSww''@;'; put 'put ''LDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIyLDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIuMTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAs''@;'; put 'put ''Myw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMs''@;'; put 'put ''OC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIsMTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSxsLkNsclNoYXBl''@;'; put 'put ''Q2lDZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwxLC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMu''@;'; put 'put ''NTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcuNDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4w''@;'; put 'put ''OWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwxLjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMyww''@;'; put 'put ''LDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCwwLDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQs''@;'; put 'put ''MTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwxLDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCww''@;'; put 'put ''LDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEs''@;'; put 'put ''MSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAsMS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4''@;'; put 'put ''LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCww''@;'; put 'put ''LDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJsLS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLGwuQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0Ex''@;'; put 'put ''Ljg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIu''@;'; put 'put ''NjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDks''@;'; put 'put ''Mi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwyLjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIu''@;'; put 'put ''MTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGwuVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6bC5DbHJTaGFwZVJ1bGVyUGVuY2ls''@;'; put 'put ''LCJwaG9uZS1oYW5kc2V0IjpsLkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjpsLkNsclNoYXBlTm9XaWZpLGluc3RhbGw6bC5DbHJTaGFwZUluc3RhbGwsdW5pbnN0YWxsOmwuQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOmwuQ2xyU2hhcGVMYXllcnMsYmxvY2s6bC5DbHJTaGFwZUJs''@;'; put 'put ''b2NrLCJibG9ja3MtZ3JvdXAiOmwuQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6bC5DbHJTaGFwZUJ1bmRsZSx3aWZpOmwuQ2xyU2hhcGVXaWZpLCJyYWNrLXNlcnZlciI6bC5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6bC5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9y''@;'; put 'put ''ZSI6bC5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOmwuQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczpsLkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDpsLkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6bC5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDpsLkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6bC5D''@;'; put 'put ''bHJTaGFwZUhvc3Qsc3RvcmFnZTpsLkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOmwuQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczpsLkNsclNoYXBlQXBwbGljYXRpb25zLGJ1aWxkaW5nOmwuQ2xyU2hhcGVCdWlsZGluZyxjcHU6bC5DbHJTaGFwZUNQVSxtZW1vcnk6bC5DbHJTaGFwZU1l''@;'; put 'put ''bW9yeSwiZGF0YS1jbHVzdGVyIjpsLkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOmwuQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxkOmwuQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6bC5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6bC5DbHJTaGFwZVNo''@;'; put 'put ''aWVsZFgsaW1wb3J0OmwuQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OmwuQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6bC5DbHJTaGFwZVVwbG9hZENsb3VkLCJkb3dubG9hZC1jbG91ZCI6bC5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOmwuQ2xyU2hhcGVQbHVnaW4sZmxvcHB5Omwu''@;'; put 'put ''Q2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6bC5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6bC5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6bC5DbHJTaGFwZVRlcm1pbmFsLGNvZGU6bC5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246bC5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6bC5DbHJT''@;'; put 'put ''aGFwZUJhdHRlcnksbW9iaWxlOmwuQ2xyU2hhcGVNb2JpbGUsdGFibGV0OmwuQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOmwuQ2xyU2hhcGVOZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOmwuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjpsLkNs''@;'; put 'put ''clNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6bC5DbHJTaGFwZVJvdXRlcix2bTpsLkNsclNoYXBlVk0sInZtdy1hcHAiOmwuQ2xyU2hhcGVWTVdBcHAsY2VydGlmaWNhdGU6bC5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6bC5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOmwuQ2xyU2hh''@;'; put 'put ''cGVVbmFyY2hpdmUsY29ubmVjdDpsLkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OmwuQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6bC5DbHJTaGFwZUxpbmssdW5saW5rOmwuQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOmwuQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxl''@;'; put 'put ''IjpsLkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6bC5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOmwuQ2xyQ29udHJvbEx1bixkZXBsb3k6bC5DbHJTaGFwZURlcGxveSxoZWxpeDpsLkNsclNoYXBlSGVsaXgsZmxhc2s6bC5DbHJTaGFwZUZsYXNrLGFkbWlu''@;'; put 'put ''aXN0cmF0b3I6bC5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOmwuQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOmwuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOmwuQ2xyU2hhcGVOVk1lLHNzZDpsLkNsclNoYXBlU1NELGJsdWV0b290aDpsLkNsclNo''@;'; put 'put ''YXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjpsLkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjpsLkNsclNoYXBlUHJvY2Vzc09uVk0sImFzc2lnbi11c2VyIjpsLkNsclNoYXBlQXNzaWduVXNlcixhdG9tOmwuQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6bC5DbHJTaGFw''@;'; put 'put ''ZUJhckNvZGUsImNkLWR2ZCI6bC5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjpsLkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjpsLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjpsLkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjpsLkNsclNoYXBlUXJD''@;'; put 'put ''b2RlLHVzYjpsLkNsclNoYXBlVXNiLHJhZGFyOmwuQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6bC5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDpsLkNsclNoYXBlU3F1aWQsaW5kdWN0b3I6bC5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOmwuQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6''@;'; put 'put ''bC5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjpsLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOmwuQ2xyU2hhcGVOb2RlR3JvdXAsbm9kZXM6bC5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTpsLkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6bC5DbHJTaGFwZU5v''@;'; put 'put ''ZGUscG9kOmwuQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOmwuQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOmwuQ2xyU2hhcGVUYXBlRHJpdmUsYW5pbWF0aW9uOmwuQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjpsLkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjpsLkNs''@;'; put 'put ''clNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuVGVjaG5vbG9neVNoYXBlcywiY29tbWFu''@;'; put 'put ''ZCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5UZWNobm9sb2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShsLlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5UZWNobm9sb2d5U2hhcGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCxw''@;'; put 'put ''LmRlc2NyaXB0b3JDb25maWcpKGwuVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuVGVjaG5vbG9neVNoYXBlcywicmVjZWl2ZXIiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkobC5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5UZWNobm9sb2d5U2hhcGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAscC5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKShsLlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5UZWNobm9sb2d5U2hhcGVzLCJmb2xkZXItc2hhcmUiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2lu''@;'; put 'put ''ZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQobC5UZWNobm9sb2d5U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxIKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuVGV4dEVkaXRTaGFwZXM9bC5DbHJTaGFwZVN1cGVyc2NyaXB0PWwuQ2xyU2hhcGVTdWJz''@;'; put 'put ''Y3JpcHQ9bC5DbHJTaGFwZVN0cmlrZXRocm91Z2g9bC5DbHJTaGFwZUluZGVudD1sLkNsclNoYXBlT3V0ZGVudD1sLkNsclNoYXBlSGlnaGxpZ2h0ZXI9bC5DbHJTaGFwZVRleHRDb2xvcj1sLkNsclNoYXBlTGFuZ3VhZ2U9bC5DbHJTaGFwZUFsaWduVG9wPWwuQ2xyU2hhcGVBbGlnbk1pZGRs''@;'; put 'put ''ZT1sLkNsclNoYXBlQWxpZ25Cb3R0b209bC5DbHJTaGFwZVVuZGVybGluZT1sLkNsclNoYXBlVGV4dD1sLkNsclNoYXBlQWxpZ25SaWdodFRleHQ9bC5DbHJTaGFwZUJsb2NrUXVvdGU9bC5DbHJTaGFwZVBhaW50Um9sbGVyPWwuQ2xyU2hhcGVOdW1iZXJMaXN0PWwuQ2xyU2hhcGVBbGlnbkxl''@;'; put 'put ''ZnRUZXh0PWwuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1sLkNsclNoYXBlSXRhbGljPWwuQ2xyU2hhcGVBbGlnblJpZ2h0PWwuQ2xyU2hhcGVBbGlnbkxlZnQ9bC5DbHJTaGFwZUFsaWduQ2VudGVyPWwuQ2xyU2hhcGVGb250U2l6ZT1sLkNsclNoYXBlQ2hlY2tib3hMaXN0PWwuQ2xyU2hhcGVDZW50''@;'; put 'put ''ZXJUZXh0PWwuQ2xyU2hhcGVCdWxsZXRMaXN0PWwuQ2xyU2hhcGVCb2xkPXZvaWQgMCxIPUgoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxsLkNsclNoYXBlQm9sZD0oMCxILmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMjIuNDMsMTcuNTRhNC42Nyw0LjY3LDAsMCwwLDIuOC00LjM3di0uMDZhNC40Myw0LjQzLDAsMCwwLTEuMzEtMy4yNSw3LjA5LDcuMDksMCwwLDAtNS4xMy0xLjczaC03QTEuNzEsMS43MSwwLDAsMCwxMCw5Ljg2VjI2YTEuNzIsMS43MiwwLDAsMCwxLjc0LDEu''@;'; put 'put ''NzRoNy4zM2M0LjM3LDAsNy4yNS0xLjg4LDcuMjUtNS4zOFYyMi4zQzI2LjMyLDE5LjY0LDI0LjczLDE4LjMyLDIyLjQzLDE3LjU0Wk0xMy42OCwxMS40aDQuNTRjMiwwLDMuMTUuODksMy4xNSwyLjMzdi4wNmMwLDEuNjgtMS4zNiwyLjQ5LTMuMzgsMi40OUgxMy42OFpNMjIuMzcsMjJjMCwx''@;'; put 'put ''LjU5LTEuMzEsMi40My0zLjQ2LDIuNDNIMTMuNjhWMTkuNjJoNWMyLjQ5LDAsMy42OS44OCwzLjY5LDIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlQnVsbGV0TGlzdD0oMCxILmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSI1''@;'; put 'put ''LjIxIiBjeT0iOS4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjE3LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSI1LjIxIiBj''@;'; put 'put ''eT0iMjUuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTYiIC8+JyksbC5DbHJTaGFwZUNlbnRlclRleHQ9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjg4LDhINS4xMmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjg4YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUuNSwxNi4yYTEuMSwxLjEsMCwxLDAsMC0yLjJoLTE1YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAuMjUsMjBINS43NWExLjEsMS4xLDAsMCwwLDAs''@;'; put 'put ''Mi4yaDI0LjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC44OCwyNkgxMS4xMmExLjEsMS4xLDAsMSwwLDAsMi4ySDI0Ljg4YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxsLkNsclNoYXBlQ2hlY2tib3hMaXN0PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40MywxNkgxMHYySDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48''@;'; put 'put ''cGF0aCBkPSJNMzEuNDMsMjRIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE1LjQ1LDEwaDE2YTEsMSwwLDAsMCwwLTJoLTE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjUsMy40MmExLjA5LDEuMDksMCwwLDAtMS41NSwwTDcuODksMTEuNDgsNC41MSw3Ljg0QTEuMSwxLjEsMCwxLDAsMi45LDkuMzRsNC45NCw1LjNMMTcuNSw1QTEuMSwxLjEsMCwwLDAsMTcuNSwzLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTQiIC8+JyksbC5DbHJTaGFwZUZvbnRTaXplPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSw5LjA4QTEuMTMsMS4xMywwLDAsMCwxOS44Niw4SDQuNjJhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTFWMjdhMS4wOSwxLjA5LDAsMCwwLDIuMTcsMFYxMC4xOWg2''@;'; put 'put ''LjY5QTEuMTQsMS4xNCwwLDAsMCwyMSw5LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjY3LDE1SDIxLjE1YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDI1VjI2LjVhMS4wOSwxLjA5LDAsMCwwLDIuMTcsMFYxNy4yM2gzLjU0YTEu''@;'; put 'put ''MSwxLjEsMCwxLDAsMC0yLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZUFsaWduQ2VudGVyPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwyMEgxOVYxNmg2YTEsMSwwLDAsMCwxLTFWN2ExLDEsMCwwLDAtMS0xSDE5''@;'; put 'put ''VjJhMSwxLDAsMCwwLTIsMFY2SDExYTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDZ2NEg1YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxSDE3djRhMSwxLDAsMCwwLDIsMFYzMEgzMWExLDEsMCwwLDAsMS0xVjIxQTEsMSwwLDAsMCwzMSwyMFpNMTIsMTRWOEgyNHY2Wk0zMCwy''@;'; put 'put ''OEg2VjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZUFsaWduTGVmdD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSwxQTEsMSwwLDAsMCw0LDJWMzRhMSwxLDAsMCwwLDIsMFYyQTEsMSwwLDAsMCw1LDFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEsMjBIOFYzMEgzMWExLDEsMCwwLDAsMS0xVjIxQTEsMSwwLDAsMCwzMSwyMFptLTEsOEgxMFYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0yNCwxNVY3YTEsMSwwLDAsMC0xLTFIOFYxNkgyM0ExLDEsMCwwLDAsMjQsMTVabS0yLTFIMTBWOEgyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVBbGlnblJpZ2h0PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0z''@;'; put 'put ''MSwxYTEsMSwwLDAsMC0xLDFWMzRhMSwxLDAsMCwwLDIsMFYyQTEsMSwwLDAsMCwzMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMjF2OGExLDEsMCwwLDAsMSwxSDI4VjIwSDVBMSwxLDAsMCwwLDQsMjFabTIsMUgyNnY2SDZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTIsN3Y4YTEsMSwwLDAsMCwxLDFIMjhWNkgxM0ExLDEsMCwwLDAsMTIsN1ptMiwxSDI2djZIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxs''@;'; put 'put ''LkNsclNoYXBlSXRhbGljPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC40Miw4SDE3LjFhMS4xLDEuMSwwLDEsMCwwLDIuMTloMi4xM0wxMy4xMSwyNS41NUgxMC40N2ExLjEsMS4xLDAsMSwwLDAsMi4xOUgxNy44YTEuMSwxLjEsMCwxLDAsMC0yLjE5SDE1LjUxbDYuMTMtMTUuMzZo''@;'; put 'put ''Mi43OGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVKdXN0aWZ5VGV4dD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMC4ySDMxLjc1YTEuMSwxLjEsMCwxLDAsMC0yLjJINmExLjEs''@;'; put 'put ''MS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjc1LDE0SDZhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMxLjEyLDIwSDYuNjJhMS4xLDEuMSwwLDEsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNDUsMjUuODNINi42YTEuMSwxLjEsMCww''@;'; put 'put ''LDAsMCwyLjJIMzAuNDVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGwuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC4yNSwyNkg2djIuMkgyMC4yNWExLjEsMS4x''@;'; put 'put ''LDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI4LDIwSDZ2Mi4ySDI4QTEuMSwxLjEsMCwwLDAsMjgsMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIu''@;'; put 'put ''NiwxNS4xQTEuMSwxLjEsMCwwLDAsMjEuNSwxNEg2djIuMkgyMS41QTEuMSwxLjEsMCwwLDAsMjIuNiwxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI5LjI1LDhINnYyLjJIMjkuMjVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGwuQ2xyU2hhcGVOdW1iZXJMaXN0PSgwLEguY2xySWNvblNWRykoJzxwb2x5Z29uIHBvaW50cz0iNS40NiA3LjQxIDUuNDYgMTEuNTYgNi42NSAxMS41NiA2LjY1IDYuMDUgNS43IDYuMDUgNC4wNSA3LjE2IDQu''@;'; put 'put ''NTIgOCA1LjQ2IDcuNDEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjU3LDE0LjgyYS43Ni43NiwwLDAsMSwuODMuNzNjMCwuMzgtLjIxLjc0LS44NywxLjI3bC0yLDEuNTd2MUg3LjY3VjE4LjI4SDUuMzNsMS0uNzdjMS0uNywxLjI4''@;'; put 'put ''LTEuMjcsMS4yOC0yYTEuODMsMS44MywwLDAsMC0yLTEuNzYsMi42MywyLjYzLDAsMCwwLTIuMTQsMS4wOGwuNzYuNzNBMS43NSwxLjc1LDAsMCwxLDUuNTcsMTQuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNi41NiwyNC42NGEx''@;'; put 'put ''LjMyLDEuMzIsMCwwLDAsMS0xLjI3YzAtLjg3LS43OC0xLjUxLTItMS41MWEyLjYxLDIuNjEsMCwwLDAtMi4xLDFsLjY5LjcyYTEuNzgsMS43OCwwLDAsMSwxLjMtLjY0Yy41NCwwLC45Mi4yNi45Mi42NnMtLjM2LjYyLTEsLjYySDQuNzl2MWguNjRjLjc0LDAsMS4wNy4yMSwxLjA3LjYzcy0u''@;'; put 'put ''MzUuNjgtMSwuNjhhMiwyLDAsMCwxLTEuNDYtLjY1bC0uNy43OGEyLjg1LDIuODUsMCwwLDAsMi4yMS45M2MxLjI5LDAsMi4xMy0uNjksMi4xMy0xLjY0QTEuMzMsMS4zMywwLDAsMCw2LjU2LDI0LjY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBh''@;'; put 'put ''dGggZD0iTTMyLjQyLDlhMSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxsLkNsclNoYXBlUGFpbnRSb2xsZXI9KDAsSC5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTMxLDEwVjRhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDR2NmEyLDIsMCwwLDAsMiwySDI5QTIsMiwwLDAsMCwzMSwxMFpNNiw0SDI5djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMyw2SDMydjYuMjlM''@;'; put 'put ''MTguNywxNi41NGExLDEsMCwwLDAtLjcsMVYxOUgxNlYzM2EyLDIsMCwwLDAsMiwyaDJhMiwyLDAsMCwwLDItMlYxOUgyMHYtLjczTDMzLjMsMTRhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMsNlpNMjAsMzNIMThWMjFoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPjxyZWN0IHg9IjQiIHk9IjIiIHdpZHRoPSIyNyIgaGVpZ2h0PSIxMCIgcng9IjEiIHJ5PSIxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMyw2SDMydjYuMjRMMTguNzEsMTYuNDVhMSwxLDAsMCwwLS43MSwxVjE5SDE2''@;'; put 'put ''VjM0YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE5SDIwdi0uODJMMzMuMjksMTRBMSwxLDAsMCwwLDM0LDEzVjdBMSwxLDAsMCwwLDMzLDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVCbG9ja1F1b3RlPSgwLEguY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0xMS44NiwxNi41NWE0LjMxLDQuMzEsMCwwLDAtMi4xMS41NiwxNC40NCwxNC40NCwwLDAsMSw0LjM2LTYsMS4xLDEuMSwwLDAsMC0xLjQtMS43Yy00LDMuMjUtNS43OCw3Ljc1LTUuNzgsMTAuNTRBNS4wOCw1LjA4LDAsMCwwLDEwLDI0LjU4YTQuNCw0LjQsMCww''@;'; put 'put ''LDAsMS44OC40NCw0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIzLDE2LjU1YTQuMjksNC4yOSwwLDAsMC0yLjExLjU2LDE0LjUsMTQuNSwwLDAsMSw0LjM1LTYsMS4xLDEuMSwwLDEsMC0xLjM5''@;'; put 'put ''LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0YTUuMDgsNS4wOCwwLDAsMCwzLDQuNjFBNC4zNyw0LjM3LDAsMCwwLDIzLDI1YTQuMjQsNC4yNCwwLDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlQWxp''@;'; put 'put ''Z25SaWdodFRleHQ9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY1LDI3LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjI2SDE1Ljc1QTEuMSwxLjEsMCwwLDAsMTQuNjUsMjcuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik02LjksMjEuMUExLjEsMS4xLDAsMCwwLDgsMjIuMkgzMFYyMEg4QTEuMSwxLjEsMCwwLDAsNi45LDIxLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMuNCwxNS4xYTEuMSwxLjEsMCwwLDAsMS4xLDEuMUgzMFYxNEgxNC41QTEu''@;'; put 'put ''MSwxLjEsMCwwLDAsMTMuNCwxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTYuNzUsOGExLjEsMS4xLDAsMSwwLDAsMi4ySDMwVjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxsLkNs''@;'; put 'put ''clNoYXBlVGV4dD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTksOC44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFoLS4xMmExLjQ2LDEuNDYsMCwwLDAtMS40MiwxTDEuMTQsMjYuNTZhMS4yOSwxLjI5LDAsMCwwLS4xNC41OSwxLDEsMCwwLDAsMSwxLDEuMTIsMS4xMiwwLDAsMCwx''@;'; put 'put ''LjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4LTEuMDgsMS42NCwxLjY0LDAsMCwwLS4xNC0uNTdaTTYuMDgsMjAuNzFsNC41OS0xMC4yMiw0LjYsMTAuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIuMjQsMTQuNzhBNi4zNSw2LjM1LDAsMCwwLDI3LjYsMTMuMmExMS4zNiwxMS4zNiwwLDAsMC00LjcsMSwxLDEsMCwwLDAtLjU4Ljg5LDEsMSwwLDAsMCwuOTQuOTIsMS4yMywxLjIzLDAsMCwwLC4zOS0uMDgsOC44Nyw4Ljg3LDAsMCwx''@;'; put 'put ''LDMuNzItLjgxYzIuNywwLDQuMjgsMS4zMyw0LjI4LDMuOTJ2LjVhMTUuMjksMTUuMjksMCwwLDAtNC40Mi0uNjFjLTMuNjQsMC02LjE0LDEuNjEtNi4xNCw0LjY0di4wNWMwLDIuOTUsMi43LDQuNDgsNS4zNyw0LjQ4YTYuMjksNi4yOSwwLDAsMCw1LjE5LTIuNDhWMjYuOWExLDEsMCwwLDAs''@;'; put 'put ''MSwxLDEsMSwwLDAsMCwxLTEuMDZWMTlBNS43MSw1LjcxLDAsMCwwLDMyLjI0LDE0Ljc4Wm0tLjU2LDcuN2MwLDIuMjgtMi4xNywzLjg5LTQuODEsMy44OS0xLjk0LDAtMy42MS0xLjA2LTMuNjEtMi44NnYtLjA2YzAtMS44LDEuNS0zLDQuMi0zYTE1LjIsMTUuMiwwLDAsMSw0LjIyLjYxWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZVVuZGVybGluZT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjguMTdjNS4wOCwwLDguNDgtMy4wOCw4LjQ4LTlWOC41NGExLjE1LDEuMTUsMCwxLDAtMi4zLDB2MTAuOGMwLDQu''@;'; put 'put ''NDQtMi4zOCw2LjcxLTYuMTMsNi43MXMtNi4yMS0yLjQ3LTYuMjEtNi44NVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44QzkuNTMsMjUuMDksMTMsMjguMTcsMTgsMjguMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEs''@;'; put 'put ''MzBINWExLjExLDEuMTEsMCwwLDAsMCwyLjIxSDMxQTEuMTEsMS4xMSwwLDAsMCwzMSwzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVBbGlnbkJvdHRvbT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMzBIMmExLDEs''@;'; put 'put ''MCwwLDAsMCwySDM0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTYsNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYyOEgxNlpNMTQsMjZIOFY2aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMTNhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCwwLDAtMSwxVjI4SDMwWk0yOCwyNkgyMlYxNGg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksbC5DbHJTaGFwZUFsaWduTWlkZGxlPSgwLEgu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwxN0gzMFYxMWExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDF2NkgxNlY1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjE3SDJhMSwxLDAsMCwwLDAsMkg2VjMxYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjE5aDR2NmEx''@;'; put 'put ''LDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0YTEsMSwwLDAsMCwwLTJaTTE0LDMwSDhWNmg2Wm0xNC02SDIyVjEyaDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlQWxpZ25Ub3A9KDAsSC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTM0LDRIMkExLDEsMCwwLDAsMiw2SDM0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDZaTTgsMTBoNlYzMEg4WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDIzYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhIMjBabTItMTNoNlYyMkgyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVMYW5n''@;'; put 'put ''dWFnZT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsM0gxNHY1aDJWNWgxNGMwLjYsMCwxLDAuNCwxLDF2MTFjMCwwLjYtMC40LDEtMSwxSDE3djdoLTUuM0w4LDI3LjlWMjVINWMtMC42LDAtMS0wLjQtMS0xVjEzYzAtMC42LDAuNC0xLDEtMWgxM3YtMkg1XG5cdFx0Yy0xLjcsMC0z''@;'; put 'put ''LDEuMy0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFIMTl2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZDMzMsNC4zLDMxLjcsMywzMCwzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYuMiwyMi45aDIuNGwwLjYtMS42''@;'; put 'put ''aDMuMWwwLjYsMS42aDIuNEwxMS45LDE0SDkuNUw2LjIsMjIuOXogTTEwLjcsMTYuNWwxLDMuMWgtMkwxMC43LDE2LjV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMTdjMS4xLDAsMi42LTAuMyw0LTFjMS40LDAuNywzLDEsNCwx''@;'; put 'put ''di0yYzAsMC0xLDAtMi4xLTAuNGMxLjItMS4yLDIuMS0zLDIuMS01LjZWOGgtM1Y2aC0ydjJoLTN2Mmg1Ljlcblx0XHRjLTAuMiwxLjgtMSwyLjktMS45LDMuNmMtMC42LTAuNS0xLjItMS4yLTEuNi0yLjFoLTIuMWMwLjQsMS4zLDEsMi4zLDEuOCwzLjFDMjEuMSwxNSwyMC4yLDE1LDIwLDE1''@;'; put 'put ''VjE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBvbHlnb24gcG9pbnRzPSIxMSwxNi41IDEwLDE5LjYgMTIsMTkuNiAxMSwxNi41IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4zLDNoLTE2''@;'; put 'put ''djVoNHYyaC0xM2MtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xaDYuN3YtN2gxMWMxLjcsMCwzLTEuMywzLTNWNlxuXHRcdEMzMy4zLDQuMywzMiwzLDMwLjMsM3ogTTEzLjEsMjIuOWwtMC41LTEuNkg5LjVsLTAuNiwxLjZINi41TDkuOCwxNGgyLjRs''@;'; put 'put ''My4zLDguOUwxMy4xLDIyLjl6IE0yOC4zLDE1djJjLTEuMywwLTIuNy0wLjQtMy45LTFcblx0XHRjLTEuMiwwLjYtMi42LDAuOS00LDFsLTAuMS0yYzAuNywwLDEuNC0wLjEsMi4xLTAuM2MtMC45LTAuOS0xLjUtMi0xLjgtMy4yaDIuMWMwLjMsMC45LDAuOSwxLjYsMS42LDIuMmMxLjEtMC45''@;'; put 'put ''LDEuOC0yLjIsMS45LTMuN1xuXHRcdGgtNlY4aDNWNmgydjJoMy4zbDAuMSwxYzAuMSwyLjEtMC43LDQuMi0yLjIsNS43QzI3LjEsMTQuOSwyNy43LDE1LDI4LjMsMTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVUZXh0Q29sb3I9KDAs''@;'; put 'put ''SC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQ3LDMuODRhMS40NSwxLjQ1LDAsMCwwLTEuNC0xSDE4YTEuNDUsMS40NSwwLDAsMC0xLjQyLDFMOC40MiwyMS41NmExLjM1LDEuMzUsMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMSwxLjExLDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42''@;'; put 'put ''NWgxMWwyLjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4wOCwxLjU5LDEuNTksMCwwLDAtLjE0LS41N1pNMTMuMzYsMTUuNzEsMTgsNS40OWw0LjYsMTAuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICA8cmVjdCB4PSI0LjA2IiB5PSIyNSIgd2lkdGg9IjI4IiBoZWlnaHQ9IjgiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxsLkNsclNoYXBlSGlnaGxpZ2h0ZXI9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1Ljgy''@;'; put 'put ''LDI2LjA2YTEsMSwwLDAsMS0uNzEtLjI5TDguNjcsMTkuMzNhMSwxLDAsMCwxLS4yOS0uNzEsMSwxLDAsMCwxLC4yOS0uNzFMMjMsMy41NGE1LjU1LDUuNTUsMCwxLDEsNy44NSw3Ljg2TDE2LjUzLDI1Ljc3QTEsMSwwLDAsMSwxNS44MiwyNi4wNlptLTUtNy40NCw1LDVMMjkuNDgsMTBhMy41''@;'; put 'put ''NCwzLjU0LDAsMCwwLDAtNSwzLjYzLDMuNjMsMCwwLDAtNSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEwLjM4LDI4LjI4QTEsMSwwLDAsMSw5LjY3LDI4TDYuNDUsMjQuNzdhMSwxLDAsMCwxLS4yMi0xLjA5bDIuMjItNS40''@;'; put 'put ''NGExLDEsMCwwLDEsMS42My0uMzNsNi40NSw2LjQ0QTEsMSwwLDAsMSwxNi4yLDI2bC01LjQ0LDIuMjJBMS4zMywxLjMzLDAsMCwxLDEwLjM4LDI4LjI4Wk04LjMzLDIzLjgybDIuMjksMi4yOCwzLjQzLTEuNEw5Ljc0LDIwLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTguOTQsMzBoLTVhMSwxLDAsMCwxLS44NC0xLjU1bDMuMjItNC45NGExLDEsMCwwLDEsMS41NS0uMTZsMy4yMSwzLjIyYTEsMSwwLDAsMSwuMDYsMS4zNUw5LjcsMjkuNjRBMSwxLDAsMCwxLDguOTQsMzBaTTUuNzgsMjhIOC40N0w5LDI3LjM0bC0x''@;'; put 'put ''LjctMS43WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHJlY3QgeD0iMy4wNiIgeT0iMzEiIHdpZHRoPSIzMCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPicpLGwuQ2xyU2hhcGVPdXRkZW50''@;'; put 'put ''PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwx''@;'; put 'put ''LDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAg''@;'; put 'put ''PHBhdGggZD0iTTMxLjA2LDI0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSwwLDAsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik05LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0uM0w0LjYxLDE4bDQuMjUtNC4yNGExLDEsMCwwLDEsMS40MSwxLjQxTDcuNDQsMThsMi44MywyLjgzYTEsMSwwLDAsMS0uNzEsMS43MVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksbC5DbHJTaGFwZUluZGVudD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwx''@;'; put 'put ''LDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNNS41NiwyMi41NGExLDEsMCwwLDEtLjctMS43MUw3LjY4LDE4LDQuODYsMTUuMTdhMSwxLDAsMCwx''@;'; put 'put ''LDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDEwLjUxLDE4LDYuMjcsMjIuMjRBMSwxLDAsMCwxLDUuNTYsMjIuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLGwuQ2xyU2hhcGVTdHJpa2V0aHJvdWdoPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zMi44OCwxOS45MmgtMzBhMSwxLDAsMSwxLDAtMmgzMGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTcuMjcsMTUuODZhMTIuOSwxMi45LDAsMCwxLDEuMjktLjUyQTUuNjksNS42OSwwLDAsMSwxMC4z''@;'; put 'put ''OSwxNWEzLjE4LDMuMTgsMCwwLDEsMi43NSwxLjExQTQuNDQsNC40NCwwLDAsMSwxNCwxOC44NXYuNDlhMTMuODMsMTMuODMsMCwwLDAtNC4yOS0uNzQsNi4xOSw2LjE5LDAsMCwwLTIuNTkuNTRBNSw1LDAsMCwwLDUuODEsMjBIMTUuODhWMTguODVhNS42Nyw1LjY3LDAsMCwwLTEuMzctNCw1''@;'; put 'put ''LjE2LDUuMTYsMCwwLDAtNC0xLjQ5LDEwLDEwLDAsMCwwLTMuOTEuODguODcuODcsMCwwLDAtLjQ0LDEuMThBLjg0Ljg0LDAsMCwwLDcuMjcsMTUuODZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEsMjBhNS45NCw1Ljk0LDAs''@;'; put 'put ''MCwxLC41NC0yLjMxLDQuMzUsNC4zNSwwLDAsMSwxLjU4LTEuODMsNC4yNyw0LjI3LDAsMCwxLDQuNTksMCw0LjQ3LDQuNDcsMCwwLDEsMS41NywxLjgzQTYuMTIsNi4xMiwwLDAsMSwyOS44NSwyMGgyYTcuNzMsNy43MywwLDAsMC0uNzgtMy4xOSw2LDYsMCwwLDAtMi4xOC0yLjQ1LDUuNzQs''@;'; put 'put ''NS43NCwwLDAsMC0zLjEtLjg4LDUuMzksNS4zOSwwLDAsMC0yLjguNzMsNS41NSw1LjU1LDAsMCwwLTIsMi4wNVYxMGEuODcuODcsMCwwLDAtLjg2LS44NkgyMGEuODcuODcsMCwwLDAtLjg2Ljg2VjIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAg''@;'; put 'put ''PHBhdGggZD0iTTI5LjY3LDIyYTUuNjEsNS42MSwwLDAsMS0uMzYsMS4wNyw0LjQ3LDQuNDcsMCwwLDEtMS41NywxLjg1LDQuMzIsNC4zMiwwLDAsMS00LjU5LDAsNC4zNSw0LjM1LDAsMCwxLTEuNTgtMS44NUE1LjY0LDUuNjQsMCwwLDEsMjEuMiwyMkgxOS4wOXY0LjEzQS44Ny44NywwLDAs''@;'; put 'put ''MCwyMCwyN2guMmEuODcuODcsMCwwLDAsLjg2LS44NlYyNC41MWE1LjU4LDUuNTgsMCwwLDAsMiwyLjA2LDUuNDgsNS40OCwwLDAsMCwyLjguNzIsNS42Niw1LjY2LDAsMCwwLDMuMS0uODhBNS44OCw1Ljg4LDAsMCwwLDMxLjA5LDI0LDcuMDksNy4wOSwwLDAsMCwzMS43MywyMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xNCwyMnYuNzZhMy4zNCwzLjM0LDAsMCwxLTEuNjIsMiw1LjM0LDUuMzQsMCwwLDEtMi42OS43MiwzLjc4LDMuNzgsMCwwLDEtMi4zNi0uNywyLjI0LDIuMjQsMCwwLDEtLjk0LTEuOSwyLjI5LDIu''@;'; put 'put ''MjksMCwwLDEsLjItLjkxSDQuNjJhNCw0LDAsMCwwLS4xMywxLDMuODMsMy44MywwLDAsMCwxLjM1LDMuMDZBNS4xNSw1LjE1LDAsMCwwLDkuMzEsMjcuMiw2LDYsMCwwLDAsMTIsMjYuNTdhNC42Miw0LjYyLDAsMCwwLDItMS43NFYyNmEuODYuODYsMCwwLDAsLjg2Ljg2SDE1YS44Ni44Niww''@;'; put 'put ''LDAsMCwuODYtLjg2VjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxsLkNsclNoYXBlU3Vic2NyaXB0PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC41NSwxOGw2LjgsOC42YTEuMTcsMS4xNywwLDAsMS0uOTIsMS45aDBhMS4xNywxLjE3''@;'; put 'put ''LDAsMCwxLS45Mi0uNDRMMTMsMTkuOTEsNi42LDI4YTEuMTcsMS4xNywwLDAsMS0uOTIuNDRoMGExLjE3LDEuMTcsMCwwLDEtLjkyLTEuOUwxMS41NSwxOGwtNi44LTguNmExLjE3LDEuMTcsMCwwLDEsLjkyLTEuOWgwQTEuMTcsMS4xNywwLDAsMSw2LjYzLDhsNi40NCw4LjEzTDE5LjUsOGEx''@;'; put 'put ''LjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIzLDMxLjgsMjcuNDksMjhhOS45LDkuOSwwLDAsMCwxLjg4LTIuMDVBMy40NCwzLjQ0LDAsMCww''@;'; put 'put ''LDMwLDI0YTIuMzUsMi4zNSwwLDAsMC0uMzUtMS4yNywyLjQ0LDIuNDQsMCwwLDAtMS0uODQsMi45LDIuOSwwLDAsMC0xLjI2LS4yOCwzLjM2LDMuMzYsMCwwLDAtMS44My41LDUuNjQsNS42NCwwLDAsMC0xLjQ4LDEuNDJsLTEtLjgxYTUuMTEsNS4xMSwwLDAsMSw0LjM2LTIuMzcsNC4zNSw0''@;'; put 'put ''LjM1LDAsMCwxLDIsLjQ1LDMuNDMsMy40MywwLDAsMSwyLDMuMTgsNC40NSw0LjQ1LDAsMCwxLS42OCwyLjM1LDEwLjksMTAuOSwwLDAsMS0yLjI0LDIuNDZsLTMuMjQsMi44MUgzMS41VjMzSDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxsLkNs''@;'; put 'put ''clNoYXBlU3VwZXJzY3JpcHQ9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjQzLDE4bDYuNzksOC42YTEuMTcsMS4xNywwLDAsMS0uOTIsMS45aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0uNDRsLTYuNDQtOC4xM0w2LjQ3LDI4YTEuMTcsMS4xNywwLDAsMS0uOTIuNDRoMGExLjE3LDEu''@;'; put 'put ''MTcsMCwwLDEtLjkyLTEuOUwxMS40MywxOGwtNi44LTguNmExLjE3LDEuMTcsMCwwLDEsLjkyLTEuOWgwQTEuMiwxLjIsMCwwLDEsNi41MSw4bDYuNDMsOC4xM0wxOS4zOCw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0aDBhMS4xNywxLjE3LDAsMCwxLC45MiwxLjlaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjIuODUsMTQuNDdsNC41MS0zLjg1YTkuMzcsOS4zNywwLDAsMCwxLjg4LTIsMy40MywzLjQzLDAsMCwwLC41OS0xLjg2LDIuMjcsMi4yNywwLDAsMC0uMzYtMS4yNywyLjM4LDIuMzgsMCwwLDAtLjk1LS44Mywy''@;'; put 'put ''Ljc3LDIuNzcsMCwwLDAtMS4yNi0uMjksMy4zOSwzLjM5LDAsMCwwLTEuODMuNSw1LjgzLDUuODMsMCwwLDAtMS40OSwxLjQybC0xLS44MWE1LjEyLDUuMTIsMCwwLDEsNC4zNi0yLjM3LDQuMzYsNC4zNiwwLDAsMSwyLC40NSwzLjQ3LDMuNDcsMCwwLDEsMiwzLjE4QTQuNDQsNC40NCwwLDAs''@;'; put 'put ''MSwzMC41OCw5YTExLjE0LDExLjE0LDAsMCwxLTIuMjQsMi40NkwyNS4xLDE0LjMxaDYuMjh2MS4zM0gyMi44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksbC5UZXh0RWRpdFNoYXBlcz17Ym9sZDpsLkNsclNoYXBlQm9sZCwiYnVsbGV0LWxpc3Qi''@;'; put 'put ''OmwuQ2xyU2hhcGVCdWxsZXRMaXN0LCJjaGVja2JveC1saXN0IjpsLkNsclNoYXBlQ2hlY2tib3hMaXN0LCJudW1iZXItbGlzdCI6bC5DbHJTaGFwZU51bWJlckxpc3QsImZvbnQtc2l6ZSI6bC5DbHJTaGFwZUZvbnRTaXplLGl0YWxpYzpsLkNsclNoYXBlSXRhbGljLCJqdXN0aWZ5LXRleHQi''@;'; put 'put ''OmwuQ2xyU2hhcGVKdXN0aWZ5VGV4dCwiY2VudGVyLXRleHQiOmwuQ2xyU2hhcGVDZW50ZXJUZXh0LCJhbGlnbi1sZWZ0LXRleHQiOmwuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0LCJhbGlnbi1yaWdodC10ZXh0IjpsLkNsclNoYXBlQWxpZ25SaWdodFRleHQsInBhaW50LXJvbGxlciI6bC5DbHJT''@;'; put 'put ''aGFwZVBhaW50Um9sbGVyLCJibG9jay1xdW90ZSI6bC5DbHJTaGFwZUJsb2NrUXVvdGUsdGV4dDpsLkNsclNoYXBlVGV4dCx1bmRlcmxpbmU6bC5DbHJTaGFwZVVuZGVybGluZSwiYWxpZ24tY2VudGVyIjpsLkNsclNoYXBlQWxpZ25DZW50ZXIsImFsaWduLWxlZnQiOmwuQ2xyU2hhcGVBbGln''@;'; put 'put ''bkxlZnQsImFsaWduLXJpZ2h0IjpsLkNsclNoYXBlQWxpZ25SaWdodCwiYWxpZ24tYm90dG9tIjpsLkNsclNoYXBlQWxpZ25Cb3R0b20sImFsaWduLW1pZGRsZSI6bC5DbHJTaGFwZUFsaWduTWlkZGxlLCJhbGlnbi10b3AiOmwuQ2xyU2hhcGVBbGlnblRvcCxsYW5ndWFnZTpsLkNsclNoYXBl''@;'; put 'put ''TGFuZ3VhZ2UsInRleHQtY29sb3IiOmwuQ2xyU2hhcGVUZXh0Q29sb3IsaGlnaGxpZ2h0ZXI6bC5DbHJTaGFwZUhpZ2hsaWdodGVyLGluZGVudDpsLkNsclNoYXBlSW5kZW50LG91dGRlbnQ6bC5DbHJTaGFwZU91dGRlbnQsc3RyaWtldGhyb3VnaDpsLkNsclNoYXBlU3RyaWtldGhyb3VnaCxz''@;'; put 'put ''dWJzY3JpcHQ6bC5DbHJTaGFwZVN1YnNjcmlwdCxzdXBlcnNjcmlwdDpsLkNsclNoYXBlU3VwZXJzY3JpcHR9LHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChsLlRleHRFZGl0U2hhcGVzKX0s''@;'; put 'put ''Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzICoq''@;'; put 'put ''KiEKICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxhKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLGwuVHJhdmVsU2hhcGVzPWwuQ2xyU2hhcGVPbkhvbGlkYXk9bC5DbHJTaGFwZVRyYWlsZXI9bC5DbHJTaGFwZUZlcnJ5PWwuQ2xyU2hhcGVDYXJhdmFuPWwuQ2xyU2hhcGVDYW1wZXJ2YW49bC5DbHJTaGFwZUJvYXQ9bC5DbHJTaGFwZUJpY3ljbGU9bC5DbHJTaGFwZU1hcE1hcmtl''@;'; put 'put ''cj1sLkNsclNoYXBlQ29tcGFzcz1sLkNsclNoYXBlTWFwPWwuQ2xyU2hhcGVDYXI9bC5DbHJTaGFwZUFpcnBsYW5lPWwuQ2xyU2hhcGVUcnVjaz12b2lkIDA7dmFyIHA9YSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNj''@;'; put 'put ''cmlwdG9yLWNvbmZpZy50cyIpO2E9YSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLGwuQ2xyU2hhcGVUcnVjaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwxLDAsMCwwLDEsMUg0VjhIMjRWMTkuN2E2LjQ1LDYuNDUsMCwwLDEsMS41Ni0uMmMuMTUsMCwuMjksMCwuNDQsMFYxNGg0YTIsMiwwLDAsMSwyLDJ2MUgy''@;'; put 'put ''OHYyaDR2NUgyOS42YTQuNTQsNC41NCwwLDAsMC04LjM0LDBIMTQuNDNhNC41LDQuNSwwLDAsMC00LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDksNC40OSwwLDAsMCw4LjkyLDBIMzNhMSwxLDAsMCwwLDEtMVYxNkE0LDQsMCwwLDAsMzAsMTJaTTEwLjI2LDI4YTIu''@;'; put 'put ''MzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcsMGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQzLDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTMwLDEySDI2VjdhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwxLDAsMCwwLDEsMUg0VjhIMjRWMjEuNDlBNC40NSw0LjQ1LDAsMCwwLDIxLjI1LDI0SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ4LDQu''@;'; put 'put ''NDgsMCwwLDAsOC45MSwwSDM0VjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4zOCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDIsMjhaTTMyLDE3SDI2VjE0''@;'; put 'put ''aDRhMiwyLDAsMCwxLDIsMloiLz4nKSxsLkNsclNoYXBlQWlycGxhbmU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS43Nyw4LjE2YTIuNDMsMi40MywwLDAsMC0xLjktMkwyOCw0Ljg3YTQuNSw0LjUsMCww''@;'; put 'put ''LDAtMy42NS43OUw3LDE4LjMsMi4xNCwxOC4xQTEuODYsMS44NiwwLDAsMCwuOTEsMjEuNDFsNSwzLjkzYy42LjczLDEsLjU5LDEwLjkzLTQuODJsLjkzLDkuNDJhMS4zNiwxLjM2LDAsMCwwLC44NSwxLjE4LDEuNDMsMS40MywwLDAsMCwuNTQuMSwxLjU0LDEuNTQsMCwwLDAsMS0uNDFsMi4z''@;'; put 'put ''OS0yLjE4YTEuNTIsMS41MiwwLDAsMCwuNDYtLjgzTDI1LjIsMTUuOWMzLjU3LTIsNi45NS0zLjg4LDkuMzYtNS4yNUEyLjQzLDIuNDMsMCwwLDAsMzUuNzcsOC4xNlptLTIuMi43NWMtMi41LDEuNDItNiwzLjQxLTkuNzYsNS40N2wtLjQxLjIzTDIxLjA3LDI3LjI4bC0xLjQ3LDEuMzRMMTgu''@;'; put 'put ''NSwxNy4zMiwxNy4xNywxOEMxMCwyMiw3LjYxLDIzLjE2LDYuNzksMjMuNTJsLTQuMy0zLjQxLDUuMDguMjIsMTgtMTMuMDZhMi41MSwyLjUxLDAsMCwxLDItLjQ1bDUuODUsMS4yNmEuNDMuNDMsMCwwLDEsLjM1LjM3QS40Mi40MiwwLDAsMSwzMy41Nyw4LjkxWiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEyLjU0bDMuNTYsMSwxLjY0LTEuMTktNC0xLjE2TDEwLDEwLjA5bDUuNDctLjE2LDIuMy0xLjY3TDEwLDguNWExLjI1LDEuMjUsMCwwLDAtLjcuMTdMNi42NywxMC4yQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCw3LDEyLjU0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTYuMjUsMTEuNSwxMiwxMy4xNmw2LjMyLTQuNTktOS4wNy4yNkEuNTIuNTIsMCwwLDAsOSw4LjkxTDYuMTMsMTAuNTZBLjUxLjUxLDAsMCwwLDYuMjUsMTEu''@;'; put 'put ''NVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zNC41Miw2LjM2LDI4LjIyLDVhMy43OCwzLjc4LDAsMCwwLTMuMDcuNjdMNi4xMiwxOS41bC00LjU3LS4yYTEuMjUsMS4yNSwwLDAsMC0uODMsMi4yMmw0LjQ1LDMuNTNh''@;'; put 'put ''LjU1LjU1LDAsMCwwLC41My4wOWMxLjI3LS40OSw2LTMsMTEuNTktNi4wN2wxLjEyLDExLjUxYS41NS41NSwwLDAsMCwuOS4zN2wyLjUtMi4wOGEuNzYuNzYsMCwwLDAsLjI2LS40NWwyLjM3LTEzLjI5YzQtMi4yMiw3LjgyLTQuMzcsMTAuNTEtNS44OUExLjU1LDEuNTUsMCwwLDAsMzQuNTIs''@;'; put 'put ''Ni4zNloiLz4nKSxsLkNsclNoYXBlQ2FyPSgwLGEuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIxNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LjQ1LDE0LjE3QTIyLjEsMjIuMSwwLDAsMCwxOS4zOCw3YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40Ny0uMTQuOTItLjIsMS4zNkE0LDQsMCwwLDAsMiwxOHY2LjEzYTIsMiwwLDAs''@;'; put 'put ''MCwyLDJWMjBINFYxOGEyLDIsMCwwLDEsMi0ySDI0LjczQTcuMjgsNy4yOCwwLDAsMSwzMiwyMy4yN1YyNGgtMmE0LjUzLDQuNTMsMCwxLDAsLjMzLDJIMzJhMiwyLDAsMCwwLDItMnYtLjczQTkuMjgsOS4yOCwwLDAsMCwyNi40NSwxNC4xN1pNMTEsMTRINi45M2MwLS4zMS4wOS0uNjMuMTUt''@;'; put 'put ''MUE2LjUyLDYuNTIsMCwwLDEsMTEsOGgwWm0yLDBWNy41OGE4LjE3LDguMTcsMCwwLDEsNS4zNiwxLjE2QTE5LDE5LDAsMCwxLDIzLjksMTRaTTI1LjgsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjUuOCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LjE3LDI0YTQuNTMsNC41MywwLDEsMCwuMzMsMmg1LjNjMC0uMDgsMC0uMTcsMC0uMjVBNiw2LDAsMCwxLDIwLDI0Wk0xMCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwx''@;'; put 'put ''MCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYuODcsMTQuMjhBMjIuMzYsMjIuMzYsMCwwLDAsMTkuNjUsNi45YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4w''@;'; put 'put ''OC40OS0uMTUsMS0uMjEsMS40aC0xQTIuNTksMi41OSwwLDAsMCwyLDE2LjU5djguNTVhLjg2Ljg2LDAsMCwwLC44Ni44Nkg0LjU5YzAtLjEzLDAtLjI2LDAtLjM5YTUuNzcsNS43NywwLDAsMSw3LjcxLTUuNDVsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMu''@;'; put 'put ''OTNBNC41LDQuNSwwLDEsMCwxNC44MiwyNmg1LjQ4YzAtLjEzLDAtLjI2LDAtLjM5QTUuNzcsNS43NywwLDAsMSwyOCwyMC4xNmwtMSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDMwLjUzLDI2aDIuNjFhLjg2Ljg2LDAsMCwwLC44''@;'; put 'put ''Ni0uODZWMjMuMzZBOS4zOSw5LjM5LDAsMCwwLDI2Ljg3LDE0LjI4Wk0xMiwxNEg4YzAtLjM1LjEtLjcxLjE2LTEuMDdhNi41Miw2LjUyLDAsMCwxLDMuODctNWgwWk0xMC4zNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMC4zNiwyOC4zNlpNMTksMTlIMTZW''@;'; put 'put ''MTdoM1ptLTYtNVY3LjQ3YTguMTYsOC4xNiwwLDAsMSw1LjQsMS4xNUExOS4xNSwxOS4xNSwwLDAsMSwyNCwxNFpNMjYuMDYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjYuMDYsMjguMzZaIi8+JyksbC5DbHJTaGFwZU1hcD0oMCxhLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU5LDYuMTlBMSwxLDAsMCwwLDMyLjcsNkwyMy4wOSw5LDEzLjQ2LDQuMTFhMSwxLDAsMCwwLS44NCwwTDIuNjIsOC4yQTEsMSwwLDAsMCwyLDkuMTNWMjkuNjFhMSwxLDAsMCwwLDEuMzguOTJM''@;'; put 'put ''MTMsMjYuNThsOS41OSw0LjkyYTEsMSwwLDAsMCwuNDYuMTEsMSwxLDAsMCwwLC4zLDBsMTAtMy4xMmExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMy41OSw2LjE5Wk0zMiwyNi43NWwtOC4zMiwyLjZWMjcuMDZoLTEuNnYybC04LjQtNC4zMVYyMy4wNmgtMS42djEuNzJMNCwyOC4xMVY5''@;'; put 'put ''Ljc5bDguMDgtMy4zM1Y4LjgxaDEuNlY2LjQ3bDguNCw0LjN2Mi4xaDEuNlYxMUwzMiw4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMi4wOCIgeT0iMTUuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0i''@;'; put 'put ''My44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyMi4wOCIgeT0iMjEuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi4wOCIgeT0iMTEuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMi4wOCIgeT0iMTcuMTMiIHdpZHRoPSIx''@;'; put 'put ''LjYiIGhlaWdodD0iMy43NSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy4zMSw3LjM1LDI1LDkuOTRWMTRIMjNWMTAuMjlMMTQsNS42OFY5SDEyVjUuMjdsLTkuNjcsNEEuNTMuNTMsMCwwLDAsMiw5Ljc1VjMw''@;'; put 'put ''LjQ1YS41My41MywwLDAsMCwuNzQuNDlMMTIsMjcuMTJWMjNoMnY0LjUzbDksNC42MVYyOGgydjMuNzlsOC42My0yLjdhLjUzLjUzLDAsMCwwLC4zNy0uNTFWNy44NkEuNTMuNTMsMCwwLDAsMzMuMzEsNy4zNVpNMTQsMjFIMTJWMTdoMlptMC02SDEyVjExaDJaTTI1LDI2SDIzVjIyaDJabTAt''@;'; put 'put ''NkgyM1YxNmgyWiIvPicpLGwuQ2xyU2hhcGVDb21wYXNzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44MiwxNS4zMWgwTDEwLjQ2LDljLS40Ni0uMjYtMS4xMS4zNy0uODYuODRsNi4xNSwxMC41NiwxMC41Niw2LjE1YS42Ni42NiwwLDAsMCwuODQtLjg2Wm0tNCw0LDMtMyw0LjU1''@;'; put 'put ''LDcuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTEsMjkuOTVWMjkuNTNIMTd2Mi40MkExNCwxNCwwLDAsMSw0LjA1LDE5SDYuNDdW''@;'; put 'put ''MTdINC4wNUExNCwxNCwwLDAsMSwxNyw0LjA1VjYuNDdoMlY0LjA1QTE0LDE0LDAsMCwxLDMxLjk1LDE3SDI5LjUzdjJoMi40MkExNCwxNCwwLDAsMSwxOSwzMS45NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNi40NywxOUg0LjA1YzAtLjMzLS4wNS0uNjYtLjA1LTFzMC0uNjcuMDUtMUg2LjQ3Wk0xNyw0LjA1Yy4zMywwLC42Ni0uMDUsMS0uMDVzLjY3LDAsMSwuMDVWNi40N0gxN1ptMiwyNy45Yy0uMzMsMC0uNjYuMDUtMSwu''@;'; put 'put ''MDVzLS42NywwLTEtLjA1VjI5LjUzaDJabTgtNS41OGEuNTkuNTksMCwwLDEtLjY5LjE2TDE1Ljc1LDIwLjM4LDkuNiw5LjgyYy0uMjUtLjQ3LjM5LTEuMS44Ni0uODRsMTAuMzcsNi4zM2gwbDYuMzMsMTAuMzdBLjU5LjU5LDAsMCwxLDI3LDI2LjM3Wk0yOS41MywxOVYxN2gyLjQyYzAsLjMz''@;'; put 'put ''LjA1LjY2LjA1LDFzMCwuNjctLjA1LDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNi43NyAxOS4zNSAyNC4zNSAyMy43NyAxOS44IDE2LjMzIDE2Ljc3IDE5LjM1IiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVNYXBNYXJrZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCww''@;'; put 'put ''LDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43MywwLDAsMSwxOCwxNi4xN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTEuNzksMTEuNzksMCwwLDAs''@;'; put 'put ''Ni4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwxMS43OSwwLDAs''@;'; put 'put ''MCwxOCwyWk0yMy41OSwyNGwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFhOS43OCw5Ljc4LDAsMSwxLDE5LjU2LDBDMjcuNzgsMTcuNzksMjUuMzYsMjEu''@;'; put 'put ''NCwyMy41OSwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40''@;'; put 'put ''NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43MywwLDAsMSwxOCwxNi4xN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40OWE3LjQ5LDcuNDks''@;'; put 'put ''MCwwLDEtMi0uMzNjMCwuMTksMCwuMzgsMCwuNTcsMCw0LjA2LTIuNDIsNy42Ny00LjE5LDEwLjMxbC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMtMS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMUE5Ljc3''@;'; put 'put ''LDkuNzcsMCwwLDEsMjIuNTYsNS4wOWE3LjQ1LDcuNDUsMCwwLDEsLjUyLTJBMTEuNzUsMTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCww''@;'; put 'put ''LDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDEx''@;'; put 'put ''LjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlptMCwxN2E2LjU2LDYuNTYsMCwxLDEsNi41Ni02''@;'; put 'put ''LjU2QTYuNTYsNi41NiwwLDAsMSwxOCwxOVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzgsMTFhNi41OCw2LjU4LDAsMSwxLTEuNjEtMyw3LjQyLDcuNDIsMCwwLDEsLjMxLTQuODRBMTEuNzUsMTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42''@;'; put 'put ''Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxsLkNsclNoYXBlQmljeWNsZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOC41LDI5LjY1QTYuNTEsNi41MSwwLDAsMSwyLDIzLjE1YTYuMzksNi4zOSwwLDAsMSw2LjUt''@;'; put 'put ''Ni4zNkE2LjM5LDYuMzksMCwwLDEsMTUsMjMuMTUsNi41MSw2LjUxLDAsMCwxLDguNSwyOS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDguNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0yNy41LDI5LjY1YTYuNTEsNi41MSwwLDAsMS02LjUtNi41LDYuNSw2LjUsMCwwLDEsMTMsMEE2LjUxLDYuNTEsMCwwLDEsMjcuNSwyOS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDI3LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjQuNjZIOGExLDEsMCwwLDEtLjg5LTEuNDVsNS0xMCwxLjc4LjlMOS42MiwyMi43M0gxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjEzIiB5PSIxMi42OCIgd2lkdGg9IjEx''@;'; put 'put ''IiBoZWlnaHQ9IjEuOTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yOCwyNC42NmExLDEsMCwwLDEtLjk0LS42NkwyMi4yOSwxMC42NkgyMGExLDEsMCwwLDEtMS0xLDEsMSwwLDAsMSwxLS45M2gzYS45NC45NCwwLDAsMSwuOTQuNmw1''@;'; put 'put ''LDE0YTEsMSwwLDAsMS0uNiwxLjI3QTEsMSwwLDAsMSwyOCwyNC42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0xMywxNC42NmExLDEsMCwwLDEtLjcxLS4yOWwtMS43LTEuNzFIOGExLDEsMCwwLDEtMS0xLC45NC45NCwwLDAsMSwx''@;'; put 'put ''LTFoM2ExLjA4LDEuMDgsMCwwLDEsLjc1LjI3bDIsMmExLDEsMCwwLDEsMCwxLjQxQTEsMSwwLDAsMSwxMywxNC42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0xNSwyMS45Yy0wLjItMi0xLjItMy44LTIuOS00LjlsLTIuNSw0LjlI''@;'; put 'put ''MTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik03LjIsMjMuNGMtMC4yLTAuMy0wLjItMC43LDAtMWwzLjItNi4zYy0wLjYtMC4yLTEuMi0wLjItMS44LTAuMkM1LDE1LjksMiwxOC44LDIsMjIuNGMwLDMuNiwyLjksNi41LDYuNSw2LjVcblx0''@;'; put 'put ''YzMsMCw1LjYtMi4xLDYuMy01SDhDNy43LDIzLjksNy4zLDIzLjcsNy4yLDIzLjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyMS45aC00YzAsMC4yLDAsMC4zLDAsMC41YzAsMC41LTAuMSwxLTAuMiwxLjVIMTlWMjEuOXoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI3LjUsMTUuOWMtMC4zLDAtMC42LDAtMC45LDAuMWwyLjQsNi42YzAuMiwwLjUtMC4xLDEuMS0wLjYsMS4zYy0wLjEsMC0wLjIsMC4xLTAuMywwLjFjLTAuNCwwLTAuOC0wLjMtMC45LTAuN2wtMi40LTYuN1xu''@;'; put 'put ''XHRjLTMuMiwxLjYtNC41LDUuNS0zLDguN2MxLjYsMy4yLDUuNSw0LjUsOC43LDNjMy4yLTEuNiw0LjUtNS41LDMtOC43QzMyLjIsMTcuMywzMCwxNS45LDI3LjUsMTUuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTI0LjcsMTYuN2MwLjYt''@;'; put 'put ''MC4zLDEuMy0wLjUsMS45LTAuNmwtMi43LTcuNEMyMy44LDguMiwyMy40LDgsMjMsNy45aC0zYy0wLjYsMC0xLDAuNS0xLDEuMWMwLDAuNSwwLjQsMC45LDEsMC45XG5cdGMwLDAsMCwwLDAsMGgyLjNsMC43LDJoLTkuNmwtMS43LTEuN0MxMS41LDEwLjEsMTEuMywxMCwxMSwxMEg4Yy0wLjYs''@;'; put 'put ''MC0xLDAuNC0xLDFzMC40LDEsMSwxaDIuNmwxLjIsMS4ybC0xLjUsM1xuXHRjMC42LDAuMiwxLjMsMC41LDEuOCwwLjhsMS42LTMuMmgxMEwyNC43LDE2Ljd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPicpLGwuQ2xyU2hhcGVCb2F0PSgwLGEuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGQ9Ik0yOS4xLDI3LjFDMjgsMjcsMjYuOSwyNy40LDI2LDI4LjJjLTEuMSwxLjEtMi45LDEuMS00LjEsMGMtMS0wLjctMi4xLTEuMS0zLjMtMS4xYy0xLjItMC4xLTIuNCwwLjMtMy4zLDEuMVxuXHRcdEMxNC43LDI4LjcsMTQsMjksMTMuMiwyOXMtMS41LTAuMy0yLjEtMC44''@;'; put 'put ''Yy0xLTAuOC0yLjItMS4yLTMuNC0xLjJzLTIuNCwwLjQtMy40LDEuMkMzLjcsMjguNywyLjgsMjksMiwyOXYyXG5cdFx0YzEuMywwLjEsMi42LTAuMywzLjYtMS4yQzYuMiwyOS4zLDcuMSwyOSw3LjksMjljMC43LDAsMS41LDAuMywyLjEsMC44YzEuOCwxLjYsNC42LDEuNiw2LjUsMGMwLjYt''@;'; put 'put ''MC41LDEuMy0wLjgsMi4xLTAuOFxuXHRcdGMwLjcsMCwxLjQsMC4zLDIsMC44YzEuOSwxLjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhjMC43LDAsMS40LDAuMywxLjksMC44YzAuOSwwLjcsMS45LDEuMSwzLDEuMnYtMlxuXHRcdGMtMSwwLTEuMi0wLjQtMS43LTAuOEMz''@;'; put 'put ''MS40LDI3LjUsMzAuMywyNy4xLDI5LjEsMjcuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDIzYzAtMC42LDAuNS0xLDEuMS0xSDMybC0zLjUsMy4xaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAu''@;'; put 'put ''Ny0wLjgsMC42LTIuMS0wLjItMi44XG5cdFx0QzMzLDIwLjIsMzIuNiwyMCwzMi4xLDIwaC0yNWMtMS43LDAtMywxLjMtMywzdjMuMmMwLjUtMC41LDEuMi0wLjgsMS45LTEuMVYyM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04Ljks''@;'; put 'put ''MTlIMTV2LTcuOGMwLTAuNi0wLjMtMS4yLTAuOC0xLjZDMTMuMyw4LjksMTIsOS4xLDExLjQsMTBsLTQuMSw1LjljLTAuNCwwLjYtMC40LDEuNC0wLjEsMi4xQzcuNSwxOC42LDguMiwxOSw4LjksMTlcblx0XHR6IE0xMy4xLDExLjJMMTMsMTdIOC45TDEzLjEsMTEuMnoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNiwxOGMwLjQtMC42LDAuNC0xLjQsMC0yTDE5LjcsNS42Yy0wLjQtMC42LTEtMS0xLjctMWMtMS4xLDAtMiwwLjktMiwyVjE5aDguM0MyNSwxOSwyNS43LDE4LjYsMjYsMTh6IE0xNy45LDYuNlxuXHRcdGw2LjQs''@;'; put 'put ''MTAuNWgtNi40VjYuNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zNCwzMWMtMS4xLTAuMS0yLjEtMC41LTMtMS4yYy0wLjUtMC41LTEuMi0wLjgtMi0wLjhjLTAuNywwLTEuNSwwLjMtMiwwLjhjLTAuOSwwLjgtMiwxLjEtMy4xLDEu''@;'; put 'put ''MWMtMS4yLDAtMi40LTAuNC0zLjMtMS4xXG5cdGMtMS4yLTEuMS0zLTEuMS00LjEsMGMtMC45LDAuOC0yLjEsMS4yLTMuNCwxLjJjLTEuMiwwLTIuMy0wLjQtMy4yLTEuMmMtMC42LTAuNS0xLjMtMC44LTItMC44Yy0wLjgsMC0xLjcsMC4zLTIuMywwLjhcblx0Yy0xLDAuOC0yLjMsMS4yLTMu''@;'; put 'put ''NSwxLjFWMjljMC44LDAsMS43LTAuMywyLjMtMC45YzEtMC44LDIuMi0xLjIsMy40LTEuMWMxLjIsMCwyLjQsMC40LDMuMywxLjJjMS4yLDEuMSwzLDEuMSw0LjIsMFxuXHRjMS45LTEuNiw0LjctMS42LDYuNSwwYzEuMiwxLjEsMywxLjEsNC4xLDBjMC45LTAuOCwyLjEtMS4yLDMuMy0xLjJj''@;'; put 'put ''MS4xLDAsMi4yLDAuNCwzLDEuMkMzMi44LDI4LjcsMzMsMjksMzQsMjlMMzQsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjEsMjYuMmMwLjYtMC41LDEuMi0wLjgsMS45LTFWMjNjMC0wLjYsMC40LTEuMSwxLTEuMWgyNUwyOC40LDI1''@;'; put 'put ''aDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yXG5cdGMwLjctMC45LDAuNS0yLjEtMC40LTIuOEMzMi45LDIwLjEsMzIuNCwyMCwzMiwyMEg3Yy0xLjcsMC0zLDEuMy0zLDNMNC4xLDI2LjJMNC4xLDI2LjJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45LDE4LjlIOC45Yy0xLjEsMC0yLTAuOS0yLTJjMC0wLjQsMC4xLTAuOCwwLjQtMS4ybDQuMS01LjhjMC42LTAuOSwxLjktMS4xLDIuOC0wLjVjMC41LDAuNCwwLjgsMSwwLjgsMS42VjE4Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC4zLDE4LjlIMTZWNi40YzAtMS4xLDAuOS0yLDItMmMwLjcsMCwxLjMsMC40LDEuNywxTDI2LDE1LjhjMC42LDEsMC4yLDIuMi0wLjcsMi43QzI1LDE4LjcsMjQuNiwxOC44LDI0LjMsMTguOVxuXHRMMjQuMywxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxsLkNsclNoYXBlQ2FtcGVydmFuPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik05LjUsMjRDOS41LDI0LDkuNSwyNCw5LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVjMCwwLDAsMCwwLDBDNiwyOS40LDcuNiwzMSw5LjUsMzFjMS45LDAsMy41''@;'; put 'put ''LTEuNiwzLjUtMy41XG5cdFx0UzExLjQsMjQsOS41LDI0eiBNOS41LDI5QzguNywyOSw4LDI4LjMsOCwyNy41UzguNywyNiw5LjUsMjZzMS41LDAuNywxLjUsMS41UzEwLjMsMjksOS41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0i''@;'; put 'put ''TTIzLjUsMjRDMjMuNSwyNCwyMy41LDI0LDIzLjUsMjRjLTEuOSwwLTMuNSwxLjYtMy41LDMuNWMwLDAsMCwwLDAsMGMwLDEuOSwxLjUsMy41LDMuNSwzLjVjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzI1LjQsMjQsMjMuNSwyNHogTTIzLjUsMjljLTAuOCwwLTEuNS0wLjctMS41LTEu''@;'; put 'put ''NXMwLjctMS41LDEuNS0xLjVzMS41LDAuNywxLjUsMS41UzI0LjMsMjksMjMuNSwyOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMywyMC4xVjIwaC0wLjFsLTMuNS01LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4zVjkuN0MzMiw3LjEs''@;'; put 'put ''MjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMsMS4zLTMsM1xuXHRcdHYxN2gyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIu''@;'; put 'put ''Ny0yLjcsMi43SDI0djloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwxaC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wzMywyMC4xeiBNMjYsMjB2LTVoMS41bDMuMSw1SDI2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHJlY3Qg''@;'; put 'put ''eD0iMTkiIHk9IjkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjIsMjIgMjIsMTMgMTUsMTMgMTUsMjggMTcsMjggMTcsMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik02LDIwaDd2LTdINlYyMHogTTgsMTVoM3YzSDhWMTV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41UzcuNiwzMSw5LjUs''@;'; put 'put ''MzFjMCwwLDAsMCwwLDBjMS45LDAsMy41LTEuNiwzLjUtMy41YzAsMCwwLTAuMSwwLTAuMUMxMywyNS41LDExLjQsMjQsOS41LDI0eiJcblx0XHQgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSIyMy41IiBjeT0iMjcuNSIgcj0iMy41IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOS41LDE0LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4yVjkuN2MwLDAsMCwwLDAtMC4xQzMyLDcsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMsMS4zLTMsM3YxN1xu''@;'; put 'put ''XHRcdGgyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI3aC0zdjloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwxaC0ydjJoMmMx''@;'; put 'put ''LjcsMCwzLTEuMywzLTN2LTMuM0wyOS41LDE0LjV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iNy45IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBvbHlnb24g''@;'; put 'put ''cG9pbnRzPSIyMCwyMiAyMS45LDIyIDIxLjksMTMgMTUsMTMgMTUsMjggMTYuOSwyOCAxNi45LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxyZWN0IHg9IjYiIHk9IjEzIiB3aWR0aD0iNi45IiBoZWlnaHQ9IjciIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksbC5DbHJTaGFwZUNhcmF2YW49KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjUsMjFDMTEsMjEsOSwyMyw5LDI1LjVzMiw0LjUsNC41LDQuNWMyLjUsMCw0LjUtMiw0LjUtNC41QzE4LDIzLDE2LDIxLDEzLjUsMjF6IE0xMy41LDI4''@;'; put 'put ''Yy0xLjQsMC0yLjUtMS4xLTIuNS0yLjVcblx0XHRzMS4xLTIuNSwyLjUtMi41czIuNSwxLjEsMi41LDIuNVMxNC45LDI4LDEzLjUsMjh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEtMS0wLjQt''@;'; put 'put ''MS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywyLDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRcdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSww''@;'; put 'put ''LjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRcdGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxMkg3djZoOVYxMnogTTE0LDE2SDl2''@;'; put 'put ''LTJoNVYxNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMy41LDMwQzExLDMwLDksMjgsOSwyNS41czItNC41LDQuNS00LjVzNC41LDIsNC41LDQuNUMxOCwyOCwxNiwzMCwxMy41LDMweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEtMS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywyLDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42''@;'; put 'put ''LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSwwLjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgzdjEwaC0zdjJoMTNcblx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMThIN3YtNmg5VjE4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxsLkNsclNoYXBlRmVycnk9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDI1LjFjLTEuMiwwLTIuMywwLjQtMy4zLDEuMWMwLDAs''@;'; put 'put ''MCwwLDAsMGMtMS4xLDEuMS0zLDEuMS00LjEsMGMtMC45LTAuOC0yLjEtMS4yLTMuMy0xLjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMlxuXHRcdGMtMS4yLDEuMS0zLDEuMS00LjIsMEMxMCwyNS40LDguOCwyNSw3LjYsMjVjLTEuMiwwLTIuNCwwLjQtMy40LDEuMUMzLjYsMjYuNywyLjgsMjcs''@;'; put 'put ''MiwyN3YyYzEuMywwLjEsMi41LTAuNCwzLjQtMS4yXG5cdFx0QzYuMSwyNy4zLDYuOSwyNyw3LjcsMjdjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4zLDIuMSwwLjhcblx0XHRjMS45LDEuNiw0''@;'; put 'put ''LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjUsMC4zLDIsMC44YzAuOSwwLjcsMiwxLjEsMy4xLDEuMnYtMS45Yy0wLjcsMC0xLjQtMC4zLTEuOS0wLjlcblx0XHRDMzEuMywyNS40LDMwLjEsMjUsMjksMjUuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjksMjMuMlYyMEgzMmwtMy41LDNoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC41LTAuNiwwLjUtMS40LDAuMi0yLjFjLTAuNC0wLjctMS0xLTEuOC0xaC00LjRcblx0XHRMMjIuNSwxMUgxN2MtMS43LDAt''@;'; put 'put ''MywxLjMtMywzaC0yVjguMUg2djYuMWMtMS4yLDAuNC0yLDEuNS0yLDIuOHYxLjFWMjB2NC4zbDAuMS0wLjFDNC42LDIzLjcsNS4yLDIzLjQsNS45LDIzLjJ6IE04LDEwaDJ2NEg4VjEwelxuXHRcdCBNNiwxN2MwLTAuNiwwLjQtMSwxLTFoOXYtMmMwLTAuNiwwLjQtMSwxLTFoNWwwLjYsMUgx''@;'; put 'put ''OHYyaDUuOGwxLjIsMi4xSDZWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguMiwyNWMtMS4yLDAtMi40LDAuNC0zLjMsMS4yYy0xLjIsMS4xLTMsMS4xLTQuMSwwYy0xLjktMS42LTQuNi0xLjYtNi41LDBjLTEuMiwxLjEtMi45''@;'; put 'put ''LDEuMS00LjEsMFxuXHRcdGMtMC45LTAuOC0yLTEuMi0zLjItMS4yYy0xLjIsMC0yLjMsMC40LTMuMiwxLjJDMy40LDI2LjcsMi43LDI3LDIsMjd2MmMxLjEtMC4xLDIuMi0wLjUsMy4xLTEuMkM1LjYsMjcuMyw2LjMsMjcsNywyN1xuXHRcdGMwLjcsMCwxLjUsMC4zLDIsMC44YzEuOSwxLjYs''@;'; put 'put ''NC43LDEuNiw2LjYsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4zLDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwXG5cdFx0YzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNiwwLjMsMi4xLDAuOGMwLjksMC44LDIuMiwxLjMsMy40LDEuMnYtMmMtMC44''@;'; put 'put ''LDAtMS42LTAuMy0yLjItMC44QzMwLjcsMjUuNCwyOS41LDI1LDI4LjIsMjV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjgsMjMuMnYtMy4zaDI2LjFMMjguNCwyM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4xLTAu''@;'; put 'put ''MmMwLjctMC45LDAuNS0yLjEtMC40LTIuOGMtMC4zLTAuMy0wLjgtMC40LTEuMi0wLjRcblx0XHRoLTQuMWwtNS40LTdoLTUuNWMtMS43LDAtMywxLjMtMywzaC0yVjhINnY2LjJjLTEuMiwwLjQtMi4xLDEuNS0yLjEsMi44bDAsNy4ybDAuMSwwQzQuNSwyMy43LDUuMSwyMy40LDUuOCwyMy4y''@;'; put 'put ''eiBNMTcuOSwxNGg0LjJcblx0XHRsMS40LDJoLTUuN1YxNHogTTcuOSwxMGgydjRoLTJWMTB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVUcmFpbGVyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01Ljgs''@;'; put 'put ''Mi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOFMxOC4yLDE5LjIsMTUsMTkuMnogTTE1LDI5LjJjLTIuMywwLTQuMi0xLjktNC4yLTQuMlxuXHRcdHMxLjktNC4yLDQuMi00LjJzNC4yLDEuOSw0LjIsNC4yUzE3LjMsMjkuMiwxNSwyOS4yeiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHJlY3QgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywy''@;'; put 'put ''Niw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAsMS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0XHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjExaDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiBNMjYsMTNINHYtMmgy''@;'; put 'put ''MlYxM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEu''@;'; put 'put ''OUgyM3YyaDEuMVxuXHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjExaDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44''@;'; put 'put ''czIuNiw1LjgsNS44LDUuOHM1LjgtMi42LDUuOC01LjhsMCwwQzIwLjgsMjEuOCwxOC4yLDE5LjIsMTUsMTkuMnogTTE2LDI2aC0ydi0yaDJWMjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVPbkhvbGlkYXk9KDAsYS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTE4LjA4LDIuMzRjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRBMTcuOTEsMTcuOTEsMCwwLDAsMjMsMjkuNjZsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zLDEsMSwwLDAsMCwuMTYtLjU0VjI1LjYxYTEzLDEzLDAsMCwwLDQtOS4yN0MzNC4wOCw4''@;'; put 'put ''LjYyLDI2LjksMi4zNCwxOC4wOCwyLjM0Wk0yOC4zNywyNC40NWExLDEsMCwwLDAtLjMyLjczdjUuMzRsLTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMSwxNiwxNiwwLDAsMS00Ljc2LjcyYy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMSwx''@;'; put 'put ''MS4xLDAsMCwxLDI4LjM3LDI0LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjEsMTUuODIsMzEsMTUuNjcsMjguNSwxMy40NGEzLjI1LDMuMjUsMCwwLDAtMi4zOS0uODRsLTUuMzguMzQtMy41OS0zYS44MS44MSwwLDAs''@;'; put 'put ''MC0uNTItLjE5SDEzLjU2YS43OC43OCwwLDAsMC0uNjkuNC43Ny43NywwLDAsMCwwLC43OWwxLjM2LDIuNDQtNC43MS4yOSwxLjMxLDEuNTIsMTUuMzktMWExLjY1LDEuNjUsMCwwLDEsMS4yMi40M2wyLjM2LDIuMTNhLjExLjExLDAsMCwxLDAsLjA3YzAsLjA2LS4wOS4wNS0uMS4wNkgyMS44''@;'; put 'put ''MmwtLjM1LjM3LTUuMTksNS41M0gxNC42NGwyLjczLTUuOUg4LjU0TDcuMTMsMTQuMTYsNi41MSwxM2EuOC44LDAsMCwwLTEtLjJBLjgxLjgxLDAsMCwwLDUuMiwxMy45bDIsMy45NGExLjIxLDEuMjEsMCwwLDAsMS4wOC42NWg2LjU3bC0xLjk0LDQuMThBMS4yLDEuMiwwLDAsMCwxMywyMy44''@;'; put 'put ''M2ExLjIyLDEuMjIsMCwwLDAsMSwuNTZoMi40M2ExLjE3LDEuMTcsMCwwLDAsLjg4LS4zOWw1LjE4LTUuNTFoNy4xNmExLjY1LDEuNjUsMCwwLDAsMS41Mi0uOTFBMS43NCwxLjc0LDAsMCwwLDMxLjEsMTUuODJaTTE0LjkyLDExLjMxaDEuNDFsMi4wOSwxLjc3TDE2LDEzLjIzWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTcuOTEsMTcuOTEsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zQTEsMSwwLDAsMCwz''@;'; put 'put ''MCwzMi41VjI1Ljc3YTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVaTTI5Ljg0LDE4SDIxLjUxYS40Mi40MiwwLDAsMC0uMy4xM2wtNS4zLDUuNjRhLjM5LjM5LDAsMCwxLS4yOS4xM0gxMy4xOWEuNDEuNDEsMCwwLDEtLjM3LS41OGwyLjQ3LTUuMzJINy40NmEu''@;'; put 'put ''NDIuNDIsMCwwLDEtLjM2LS4yMmwtMi43LTVINi4yNGEuNTMuNTMsMCwwLDEsLjM5LjE4bDEuNTYsMS42OWEuMzguMzgsMCwwLDAsLjMzLjE0bDYuMTgtLjM4LTItMy41NWgyLjg5YS40Ny40NywwLDAsMSwuMzEuMTFMMTkuNjMsMTRsNi42OS0uMzVhMi40NCwyLjQ0LDAsMCwxLDEuODEuNjNs''@;'; put 'put ''Mi40NywyLjIzQS45Mi45MiwwLDAsMSwyOS44NCwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksbC5UcmF2ZWxTaGFwZXM9e3RydWNrOmwuQ2xyU2hhcGVUcnVjayxhaXJwbGFuZTpsLkNsclNoYXBlQWlycGxhbmUsY2FyOmwuQ2xyU2hhcGVDYXIs''@;'; put 'put ''bWFwOmwuQ2xyU2hhcGVNYXAsY29tcGFzczpsLkNsclNoYXBlQ29tcGFzcywibWFwLW1hcmtlciI6bC5DbHJTaGFwZU1hcE1hcmtlcixiaWN5Y2xlOmwuQ2xyU2hhcGVCaWN5Y2xlLGJvYXQ6bC5DbHJTaGFwZUJvYXQsY2FtcGVydmFuOmwuQ2xyU2hhcGVDYW1wZXJ2YW4sY2FyYXZhbjpsLkNs''@;'; put 'put ''clNoYXBlQ2FyYXZhbixmZXJyeTpsLkNsclNoYXBlRmVycnksdHJhaWxlcjpsLkNsclNoYXBlVHJhaWxlciwib24taG9saWRheSI6bC5DbHJTaGFwZU9uSG9saWRheX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuVHJhdmVsU2hhcGVzLCJwbGFuZSIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShs''@;'; put 'put ''LlRyYXZlbFNoYXBlcy5haXJwbGFuZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLlRyYXZlbFNoYXBlcywiYXV0byIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLlRyYXZlbFNoYXBlcy5jYXIpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNv''@;'; put 'put ''bnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQobC5UcmF2ZWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAg''@;'; put 'put ''ICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMgKioqIQogICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTSxs''@;'; put 'put ''LEgpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbC5kZXNjcmlwdG9yQ29uZmlnPXZvaWQgMCxsLmRlc2NyaXB0b3JDb25maWc9ZnVuY3Rpb24ocCl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJh''@;'; put 'put ''YmxlOiEwLHZhbHVlOnB9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzICoqKiEKICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxIKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPWwuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsbC5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9O3ZhciBwPShPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoYSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5zaW5nbGVJbnN0YW5jZT1hLnNpbmdsZUluc3RhbmNlP2Euc2luZ2xlSW5zdGFuY2U6bmV3IGF9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksYS5wcm90b3R5cGUuc3Vic2NyaWJlVG89ZnVuY3Rp''@;'; put 'put ''b24odixrKXt2YXIgUz10aGlzO3JldHVybiB0aGlzLmNhbGxiYWNrc1t2XT8tMT09PXRoaXMuY2FsbGJhY2tzW3ZdLmluZGV4T2YoaykmJnRoaXMuY2FsbGJhY2tzW3ZdLnB1c2goayk6dGhpcy5jYWxsYmFja3Nbdl09W2tdLGZ1bmN0aW9uKCl7dmFyIEQ9Uy5jYWxsYmFja3Nbdl0uaW5kZXhP''@;'; put 'put ''ZihrKTtTLmNhbGxiYWNrc1t2XS5zcGxpY2UoRCwxKSwwPT09Uy5jYWxsYmFja3Nbdl0ubGVuZ3RoJiZkZWxldGUgUy5jYWxsYmFja3Nbdl19fSxhLnByb3RvdHlwZS5lbWl0Q2hhbmdlcz1mdW5jdGlvbih2LGspe3RoaXMuY2FsbGJhY2tzW3ZdJiZ0aGlzLmNhbGxiYWNrc1t2XS5tYXAoZnVu''@;'; put 'put ''Y3Rpb24oUyl7UyhrKX0pfSxhKTtmdW5jdGlvbiBhKCl7dGhpcy5jYWxsYmFja3M9bC5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzfWwuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPXB9LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyI6Ci8qISoqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihNLGwsSCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLmNsckljb25TVkc9dm9pZCAwLGwuY2xySWNvblNWRz1mdW5jdGlvbihwKXt2''@;'; put 'put ''YXIgYT0iIjtyZXR1cm4tMTxwLmluZGV4T2YoIi0tYmFkZ2VkIikmJihhKz0iY2FuLWJhZGdlICIpLC0xPHAuaW5kZXhPZigiLS1hbGVydGVkIikmJihhKz0iY2FuLWFsZXJ0ICIpLC0xPHAuaW5kZXhPZigiY2xyLWktc29saWQiKSYmKGErPSJoYXMtc29saWQgIiksKGE/JzxzdmcgdmVyc2lv''@;'; put 'put ''bj0iMS4xIiBjbGFzcz0iJythKyciIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1''@;'; put 'put ''c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3''@;'; put 'put ''dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStwKyI8L3N2Zz4ifX19LHo9e30sYi5tPWosYi5jPXosYi5kPWZ1bmN0aW9uKE0sbCxIKXtiLm8oTSxsKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KE0sbCx7ZW51bWVyYWJsZTohMCxnZXQ6SH0pfSxi''@;'; put 'put ''LnI9ZnVuY3Rpb24oTSl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KE0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0s''@;'; put 'put ''Yi50PWZ1bmN0aW9uKE0sbCl7aWYoMSZsJiYoTT1iKE0pKSw4Jmx8fDQmbCYmIm9iamVjdCI9PXR5cGVvZiBNJiZNJiZNLl9fZXNNb2R1bGUpcmV0dXJuIE07dmFyIEg9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihiLnIoSCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgsImRlZmF1bHQiLHtlbnVt''@;'; put 'put ''ZXJhYmxlOiEwLHZhbHVlOk19KSwyJmwmJiJzdHJpbmciIT10eXBlb2YgTSlmb3IodmFyIHAgaW4gTSliLmQoSCxwLGZ1bmN0aW9uKGEpe3JldHVybiBNW2FdfS5iaW5kKG51bGwscCkpO3JldHVybiBIfSxiLm49ZnVuY3Rpb24oTSl7dmFyIGw9TSYmTS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIE0uZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gTX07cmV0dXJuIGIuZChsLCJhIixsKSxsfSxiLm89ZnVuY3Rpb24oTSxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE0sbCl9LGIucD0iIixiKGIucz0iLi9wcm9qZWN0cy9pY29ucy9zcmMv''@;'; put 'put ''Y2xyLWljb25zLXNmeC50cyIpO2Z1bmN0aW9uIGIoTSl7aWYoeltNXSlyZXR1cm4geltNXS5leHBvcnRzO3ZhciBsPXpbTV09e2k6TSxsOiExLGV4cG9ydHM6e319O3JldHVybiBqW01dLmNhbGwobC5leHBvcnRzLGwsbC5leHBvcnRzLGIpLGwubD0hMCxsLmV4cG9ydHN9dmFyIGosen0pLGZ1''@;'; put 'put ''bmN0aW9uKGIsail7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZ0eXBlb2YgbW9kdWxlPCJ1Ij9qKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLGopOmooKGI9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6''@;'; put 'put ''Ynx8c2VsZikubWFya2VkPXt9KX0odGhpcyxmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaihuLHMpe2Zvcih2YXIgdD0wO3Q8cy5sZW5ndGg7dCsrKXt2YXIgZT1zW3RdO2UuZW51bWVyYWJsZT1lLmVudW1lcmFibGV8fCExLGUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBl''@;'; put 'put ''JiYoZS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInN5bWJvbCI9PXR5cGVvZihpPWZ1bmN0aW9uKHIsYyl7aWYoIm9iamVjdCIhPXR5cGVvZiByfHxudWxsPT09cilyZXR1cm4gcjt2YXIgaD1yW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwPT09aClyZXR1cm4g''@;'; put 'put ''U3RyaW5nKHIpO2lmKCJvYmplY3QiIT10eXBlb2YoaD1oLmNhbGwociwic3RyaW5nIikpKXJldHVybiBoO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9KGk9ZS5rZXkpKT9pOlN0cmluZyhpKSxlKX12YXIgaX1mdW5j''@;'; put 'put ''dGlvbiB6KCl7cmV0dXJuKHo9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihuKXtmb3IodmFyIHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXt2YXIgdCxlPWFyZ3VtZW50c1tzXTtmb3IodCBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku''@;'; put 'put ''Y2FsbChlLHQpJiYoblt0XT1lW3RdKX1yZXR1cm4gbn0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBNKG4scyl7KG51bGw9PXN8fHM+bi5sZW5ndGgpJiYocz1uLmxlbmd0aCk7Zm9yKHZhciB0PTAsZT1uZXcgQXJyYXkocyk7dDxzO3QrKyllW3RdPW5bdF07cmV0dXJuIGV9ZnVu''@;'; put 'put ''Y3Rpb24gbChuLHMpe3ZhciB0LGU9dHlwZW9mIFN5bWJvbDwidSImJm5bU3ltYm9sLml0ZXJhdG9yXXx8blsiQEBpdGVyYXRvciJdO2lmKGUpcmV0dXJuKGU9ZS5jYWxsKG4pKS5uZXh0LmJpbmQoZSk7aWYoQXJyYXkuaXNBcnJheShuKXx8KGU9ZnVuY3Rpb24oaSxyKXt2YXIgYztpZihpKXJl''@;'; put 'put ''dHVybiJzdHJpbmciPT10eXBlb2YgaT9NKGkscik6Ik1hcCI9PT0oYz0iT2JqZWN0Ij09PShjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5zbGljZSg4LC0xKSkmJmkuY29uc3RydWN0b3I/aS5jb25zdHJ1Y3Rvci5uYW1lOmMpfHwiU2V0Ij09PWM/QXJyYXkuZnJvbShpKToi''@;'; put 'put ''QXJndW1lbnRzIj09PWN8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGMpP00oaSxyKTp2b2lkIDB9KG4pKXx8cyYmbiYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aClyZXR1cm4gZSYmKG49ZSksdD0wLGZ1bmN0aW9uKCl7cmV0dXJuIHQ+PW4ubGVu''@;'; put 'put ''Z3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTpuW3QrK119fTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEg''@;'; put 'put ''W1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIEg9MDtmdW5jdGlvbiBwKG4pe3JldHVybiJfX3ByaXZhdGVfIitIKysrIl8iK259ZnVuY3Rpb24gYShuLHMpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHMpKXJldHVybiBuO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKX1mdW5jdGlvbiB2KCl7cmV0dXJue2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hs''@;'; put 'put ''aWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHho''@;'; put 'put ''dG1sOiExfX1mdW5jdGlvbiBrKG4pe2IuZGVmYXVsdHM9bn1mdW5jdGlvbiBTKG4pe3JldHVybiBPW25dfWIuZGVmYXVsdHM9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdo''@;'; put 'put ''dDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1s''@;'; put 'put ''OiExfTt2YXIgRD0vWyY8PiInXS8seD1uZXcgUmVnRXhwKEQuc291cmNlLCJnIiksRz0vWzw+IiddfCYoPyEoI1xkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFx3Kyk7KS8sUD1uZXcgUmVnRXhwKEcuc291cmNlLCJnIiksTz17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsi''@;'; put 'put ''LCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In07ZnVuY3Rpb24gVChuLHMpe2lmKHMpe2lmKEQudGVzdChuKSlyZXR1cm4gbi5yZXBsYWNlKHgsUyl9ZWxzZSBpZihHLnRlc3QobikpcmV0dXJuIG4ucmVwbGFjZShQLFMpO3JldHVybiBufXZhciB0MT0vJigjKD86XGQrKXwoPzojeFswLTlBLUZh''@;'; put 'put ''LWZdKyl8KD86XHcrKSk7Py9naTtmdW5jdGlvbiBRKG4pe3JldHVybiBuLnJlcGxhY2UodDEsZnVuY3Rpb24ocyx0KXtyZXR1cm4iY29sb24iPT09KHQ9dC50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09dC5jaGFyQXQoMCk/IngiPT09dC5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShw''@;'; put 'put ''YXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK3Quc3Vic3RyaW5nKDEpKToiIn0pfXZhciBZPS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9uIHcobixzKXtuPSJzdHJpbmciPT10eXBlb2Ygbj9uOm4uc291cmNlLHM9c3x8IiI7dmFyIHQ9e3JlcGxhY2U6ZnVu''@;'; put 'put ''Y3Rpb24oZSxpKXtyZXR1cm4gaT0oaT1pLnNvdXJjZXx8aSkucmVwbGFjZShZLCIkMSIpLG49bi5yZXBsYWNlKGUsaSksdH0sZ2V0UmVnZXg6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJlZ0V4cChuLHMpfX07cmV0dXJuIHR9dmFyIEgxPS9bXlx3Ol0vZyxBMT0vXiR8XlthLXpdW2EtejAtOSsu''@;'; put 'put ''LV0qOnxeWz8jXS9pO2Z1bmN0aW9uIG4xKG4scyx0KXtpZihuKXt0cnl7ZT1kZWNvZGVVUklDb21wb25lbnQoUSh0KSkucmVwbGFjZShIMSwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09ZS5pbmRleE9mKCJqYXZhc2NyaXB0OiIpfHwwPT09ZS5pbmRleE9mKCJ2''@;'; put 'put ''YnNjcmlwdDoiKXx8MD09PWUuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH12YXIgZTtzJiYhQTEudGVzdCh0KSYmKG49dCxlMVsiICIrKGU9cyldfHwoZTFbIiAiK2VdPVYxLnRlc3QoZSk/ZSsiLyI6YzEoZSwiLyIsITApKSxzPS0xPT09KGU9ZTFbIiAiK2VdKS5pbmRleE9mKCI6Iiks''@;'; put 'put ''dD0iLy8iPT09bi5zdWJzdHJpbmcoMCwyKT9zP246ZS5yZXBsYWNlKFoxLCIkMSIpK246Ii8iPT09bi5jaGFyQXQoMCk/cz9uOmUucmVwbGFjZShDMSwiJDEiKStuOmUrbik7dHJ5e3Q9ZW5jb2RlVVJJKHQpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIHR9''@;'; put 'put ''dmFyIGUxPXt9LFYxPS9eW146XSs6XC8qW14vXSokLyxaMT0vXihbXjpdKzopW1xzXFNdKiQvLEMxPS9eKFteOl0rOlwvKlteL10qKVtcc1xTXSokLyxLPXtleGVjOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gZDEobixzKXt2YXIgdD1uLnJlcGxhY2UoL1x8L2csZnVuY3Rpb24oaSxyLGMpe2Zv''@;'; put 'put ''cih2YXIgaD0hMSxWPXI7MDw9LS1WJiYiXFwiPT09Y1tWXTspaD0haDtyZXR1cm4gaD8ifCI6IiB8In0pLnNwbGl0KC8gXHwvKSxlPTA7aWYodFswXS50cmltKCl8fHQuc2hpZnQoKSwwPHQubGVuZ3RoJiYhdFt0Lmxlbmd0aC0xXS50cmltKCkmJnQucG9wKCksdC5sZW5ndGg+cyl0LnNwbGlj''@;'; put 'put ''ZShzKTtlbHNlIGZvcig7dC5sZW5ndGg8czspdC5wdXNoKCIiKTtmb3IoO2U8dC5sZW5ndGg7ZSsrKXRbZV09dFtlXS50cmltKCkucmVwbGFjZSgvXFxcfC9nLCJ8Iik7cmV0dXJuIHR9ZnVuY3Rpb24gYzEobixzLHQpe3ZhciBlPW4ubGVuZ3RoO2lmKDA9PT1lKXJldHVybiIiO2Zvcih2YXIg''@;'; put 'put ''aT0wO2k8ZTspe3ZhciByPW4uY2hhckF0KGUtaS0xKTtpZigociE9PXN8fHQpJiYocj09PXN8fCF0KSlicmVhaztpKyt9cmV0dXJuIG4uc2xpY2UoMCxlLWkpfWZ1bmN0aW9uIG8xKG4scix0LGUpe3ZhciBpPXIuaHJlZixjPShyPXIudGl0bGU/VChyLnRpdGxlKTpudWxsLG5bMV0ucmVwbGFj''@;'; put 'put ''ZSgvXFwoW1xbXF1dKS9nLCIkMSIpKTtyZXR1cm4iISIhPT1uWzBdLmNoYXJBdCgwKT8oZS5zdGF0ZS5pbkxpbms9ITAsbj17dHlwZToibGluayIscmF3OnQsaHJlZjppLHRpdGxlOnIsdGV4dDpjLHRva2VuczplLmlubGluZVRva2VucyhjKX0sZS5zdGF0ZS5pbkxpbms9ITEsbik6e3R5cGU6''@;'; put 'put ''ImltYWdlIixyYXc6dCxocmVmOmksdGl0bGU6cix0ZXh0OlQoYyl9fXZhciBKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0KXt0aGlzLm9wdGlvbnM9dHx8Yi5kZWZhdWx0c312YXIgcz1uLnByb3RvdHlwZTtyZXR1cm4gcy5zcGFjZT1mdW5jdGlvbih0KXtpZigodD10aGlzLnJ1bGVzLmJsb2Nr''@;'; put 'put ''Lm5ld2xpbmUuZXhlYyh0KSkmJjA8dFswXS5sZW5ndGgpcmV0dXJue3R5cGU6InNwYWNlIixyYXc6dFswXX19LHMuY29kZT1mdW5jdGlvbihpKXt2YXIgZTtpZihpPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGkpKXJldHVybiBlPWlbMF0ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIikse3R5''@;'; put 'put ''cGU6ImNvZGUiLHJhdzppWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/ZTpjMShlLCJcbiIpfX0scy5mZW5jZXM9ZnVuY3Rpb24oaCl7dmFyIGUsaSxyLGM7aWYoaD10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGgpKXJldHVybiBp''@;'; put 'put ''PWU9aFswXSxyPWhbM118fCIiLGk9bnVsbD09PShpPWUubWF0Y2goL14oXHMrKSg/OmBgYCkvKSk/cjooYz1pWzFdLHIuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKFYpe3ZhciBDPVYubWF0Y2goL15ccysvKTtyZXR1cm4gbnVsbCE9PUMmJkNbMF0ubGVuZ3RoPj1jLmxlbmd0aD9WLnNsaWNl''@;'; put 'put ''KGMubGVuZ3RoKTpWfSkuam9pbigiXG4iKSkse3R5cGU6ImNvZGUiLHJhdzplLGxhbmc6aFsyXSYmaFsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0ZXh0Oml9fSxzLmhlYWRpbmc9ZnVuY3Rpb24ocil7dmFyIGUsaTtpZihyPXRoaXMucnVsZXMu''@;'; put 'put ''YmxvY2suaGVhZGluZy5leGVjKHIpKXJldHVybiBlPXJbMl0udHJpbSgpLC8jJC8udGVzdChlKSYmKGk9YzEoZSwiIyIpLCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJmkmJiEvICQvLnRlc3QoaSl8fChlPWkudHJpbSgpKSkse3R5cGU6ImhlYWRpbmciLHJhdzpyWzBdLGRlcHRoOnJbMV0ubGVu''@;'; put 'put ''Z3RoLHRleHQ6ZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZSl9fSxzLmhyPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKHQpKXJldHVybnt0eXBlOiJociIscmF3OnRbMF19fSxzLmJsb2NrcXVvdGU9ZnVuY3Rpb24oYyl7dmFyIGUsaSxyO2lmKGM9dGhpcy5y''@;'; put 'put ''dWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMoYykpcmV0dXJuIGU9Y1swXS5yZXBsYWNlKC9eICo+WyBcdF0/L2dtLCIiKSxpPXRoaXMubGV4ZXIuc3RhdGUudG9wLHRoaXMubGV4ZXIuc3RhdGUudG9wPSEwLHI9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhlKSx0aGlzLmxleGVyLnN0YXRlLnRv''@;'; put 'put ''cD1pLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6Y1swXSx0b2tlbnM6cix0ZXh0OmV9fSxzLmxpc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWModCk7aWYoZSl7dmFyIGkscixjLGgsVixDLHUsZCxMLHksSSxaPTE8KGY9ZVsxXS50cmltKCkpLmxlbmd0aCxv''@;'; put 'put ''PXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpaLHN0YXJ0Olo/K2Yuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119LGY9Wj8iXFxkezEsOX1cXCIrZi5zbGljZSgtMSk6IlxcIitmO3RoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGY9Wj9mOiJbKistXSIpO2Zvcih2YXIgRT1uZXcg''@;'; put 'put ''UmVnRXhwKCJeKCB7MCwzfSIrZisiKSgoPzpbXHQgXVteXFxuXSopPyg/OlxcbnwkKSkiKTt0JiYoST0hMSxlPUUuZXhlYyh0KSkmJiF0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QodCk7KXtpZih0PXQuc3Vic3RyaW5nKChpPWVbMF0pLmxlbmd0aCksdT1lWzJdLnNwbGl0KCJcbiIsMSlbMF0u''@;'; put 'put ''cmVwbGFjZSgvXlx0Ky8sZnVuY3Rpb24oaTEpe3JldHVybiIgIi5yZXBlYXQoMyppMS5sZW5ndGgpfSksZD10LnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyhoPTIseT11LnRyaW1MZWZ0KCkpOihoPWVbMl0uc2VhcmNoKC9bXiBdLykseT11LnNsaWNlKGg9NDxoPzE6''@;'; put 'put ''aCksaCs9ZVsxXS5sZW5ndGgpLFY9ITEsIXUmJi9eICokLy50ZXN0KGQpJiYoaSs9ZCsiXG4iLHQ9dC5zdWJzdHJpbmcoZC5sZW5ndGgrMSksST0hMCksIUkpZm9yKHZhciBCPW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLGgtMSkrIn0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/Olsg''@;'; put 'put ''XHRdW15cXG5dKik/KD86XFxufCQpKSIpLG09bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMsaC0xKSsifSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkiKSxfPW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLGgtMSkrIn0oPzpgYGB8fn5+''@;'; put 'put ''KSIpLFI9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMsaC0xKSsifSMiKTt0JiYoZD1MPXQuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihkPWQucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSwhXy50ZXN0KGQpKSYmIVIudGVzdChk''@;'; put 'put ''KSYmIUIudGVzdChkKSYmIW0udGVzdCh0KTspe2lmKGQuc2VhcmNoKC9bXiBdLyk+PWh8fCFkLnRyaW0oKSl5Kz0iXG4iK2Quc2xpY2UoaCk7ZWxzZXtpZihWfHw0PD11LnNlYXJjaCgvW14gXS8pfHxfLnRlc3QodSl8fFIudGVzdCh1KXx8bS50ZXN0KHUpKWJyZWFrO3krPSJcbiIrZH1WfHxk''@;'; put 'put ''LnRyaW0oKXx8KFY9ITApLGkrPUwrIlxuIix0PXQuc3Vic3RyaW5nKEwubGVuZ3RoKzEpLHU9ZC5zbGljZShoKX1vLmxvb3NlfHwoQz9vLmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoaSkmJihDPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKHI9L15cW1sgeFhdXF0gLy5leGVjKHkpKSYmKGM9''@;'; put 'put ''IlsgXSAiIT09clswXSx5PXkucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpLG8uaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6aSx0YXNrOiEhcixjaGVja2VkOmMsbG9vc2U6ITEsdGV4dDp5fSksby5yYXcrPWl9by5pdGVtc1tvLml0ZW1zLmxlbmd0aC0xXS5yYXc9aS50cmlt''@;'; put 'put ''UmlnaHQoKSxvLml0ZW1zW28uaXRlbXMubGVuZ3RoLTFdLnRleHQ9eS50cmltUmlnaHQoKSxvLnJhdz1vLnJhdy50cmltUmlnaHQoKTtmb3IodmFyICQsdTE9by5pdGVtcy5sZW5ndGgsVT0wO1U8dTE7VSsrKXRoaXMubGV4ZXIuc3RhdGUudG9wPSExLG8uaXRlbXNbVV0udG9rZW5zPXRoaXMu''@;'; put 'put ''bGV4ZXIuYmxvY2tUb2tlbnMoby5pdGVtc1tVXS50ZXh0LFtdKSxvLmxvb3NlfHwoJD0wPCgkPW8uaXRlbXNbVV0udG9rZW5zLmZpbHRlcihmdW5jdGlvbihpMSl7cmV0dXJuInNwYWNlIj09PWkxLnR5cGV9KSkubGVuZ3RoJiYkLnNvbWUoZnVuY3Rpb24oaTEpe3JldHVybi9cbi4qXG4vLnRl''@;'; put 'put ''c3QoaTEucmF3KX0pLG8ubG9vc2U9JCk7aWYoby5sb29zZSlmb3IoVT0wO1U8dTE7VSsrKW8uaXRlbXNbVV0ubG9vc2U9ITA7cmV0dXJuIG99fSxzLmh0bWw9ZnVuY3Rpb24oaSl7dmFyIGU7aWYoaT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhpKSlyZXR1cm4gZT17dHlwZToiaHRtbCIs''@;'; put 'put ''YmxvY2s6ITAscmF3OmlbMF0scHJlOiF0aGlzLm9wdGlvbnMuc2FuaXRpemVyJiYoInByZSI9PT1pWzFdfHwic2NyaXB0Ij09PWlbMV18fCJzdHlsZSI9PT1pWzFdKSx0ZXh0OmlbMF19LHRoaXMub3B0aW9ucy5zYW5pdGl6ZSYmKGk9dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlv''@;'; put 'put ''bnMuc2FuaXRpemVyKGlbMF0pOlQoaVswXSksZS50eXBlPSJwYXJhZ3JhcGgiLGUudGV4dD1pLGUudG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGkpKSxlfSxzLmRlZj1mdW5jdGlvbihjKXt2YXIgZSxpLHI7aWYoYz10aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKGMpKXJldHVybiBlPWNbMV0u''@;'; put 'put ''dG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGk9Y1syXT9jWzJdLnJlcGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIiLHI9Y1szXSYmY1szXS5zdWJzdHJpbmcoMSxjWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRo''@;'; put 'put ''aXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHt0eXBlOiJkZWYiLHRhZzplLHJhdzpjWzBdLGhyZWY6aSx0aXRsZTpyfX0scy50YWJsZT1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyh0KSl7dmFyIGU9e3R5cGU6InRhYmxlIixoZWFkZXI6ZDEodFsx''@;'; put 'put ''XSkubWFwKGZ1bmN0aW9uKEMpe3JldHVybnt0ZXh0OkN9fSksYWxpZ246dFsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6dFszXSYmdFszXS50cmltKCk/dFszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxpdCgiXG4iKTpbXX07aWYoZS5oZWFk''@;'; put 'put ''ZXIubGVuZ3RoPT09ZS5hbGlnbi5sZW5ndGgpe2UucmF3PXRbMF07Zm9yKHZhciBpLHIsYyxoPWUuYWxpZ24ubGVuZ3RoLFY9MDtWPGg7VisrKWUuYWxpZ25bVl09L14gKi0rOiAqJC8udGVzdChlLmFsaWduW1ZdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KGUuYWxpZ25bVl0pPyJjZW50''@;'; put 'put ''ZXIiOi9eICo6LSsgKiQvLnRlc3QoZS5hbGlnbltWXSk/ImxlZnQiOm51bGw7Zm9yKGg9ZS5yb3dzLmxlbmd0aCxWPTA7VjxoO1YrKyllLnJvd3NbVl09ZDEoZS5yb3dzW1ZdLGUuaGVhZGVyLmxlbmd0aCkubWFwKGZ1bmN0aW9uKEMpe3JldHVybnt0ZXh0OkN9fSk7Zm9yKGg9ZS5oZWFkZXIu''@;'; put 'put ''bGVuZ3RoLGk9MDtpPGg7aSsrKWUuaGVhZGVyW2ldLnRva2Vucz10aGlzLmxleGVyLmlubGluZShlLmhlYWRlcltpXS50ZXh0KTtmb3IoaD1lLnJvd3MubGVuZ3RoLGk9MDtpPGg7aSsrKWZvcihjPWUucm93c1tpXSxyPTA7cjxjLmxlbmd0aDtyKyspY1tyXS50b2tlbnM9dGhpcy5sZXhlci5p''@;'; put 'put ''bmxpbmUoY1tyXS50ZXh0KTtyZXR1cm4gZX19fSxzLmxoZWFkaW5nPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKHQpKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6dFswXSxkZXB0aDoiPSI9PT10WzJdLmNoYXJBdCgwKT8xOjIsdGV4dDp0WzFdLHRv''@;'; put 'put ''a2Vuczp0aGlzLmxleGVyLmlubGluZSh0WzFdKX19LHMucGFyYWdyYXBoPWZ1bmN0aW9uKGkpe3ZhciBlO2lmKGk9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhpKSlyZXR1cm4gZT0iXG4iPT09aVsxXS5jaGFyQXQoaVsxXS5sZW5ndGgtMSk/aVsxXS5zbGljZSgwLC0xKTppWzFd''@;'; put 'put ''LHt0eXBlOiJwYXJhZ3JhcGgiLHJhdzppWzBdLHRleHQ6ZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZSl9fSxzLnRleHQ9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyh0KSlyZXR1cm57dHlwZToidGV4dCIscmF3OnRbMF0sdGV4dDp0WzBdLHRva2Vuczp0''@;'; put 'put ''aGlzLmxleGVyLmlubGluZSh0WzBdKX19LHMuZXNjYXBlPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUuZXNjYXBlLmV4ZWModCkpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OnRbMF0sdGV4dDpUKHRbMV0pfX0scy50YWc9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlu''@;'; put 'put ''bGluZS50YWcuZXhlYyh0KSlyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEgL2kudGVzdCh0WzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QodFswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGlu''@;'; put 'put ''az0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdCh0WzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0''@;'; put 'put ''KShcc3w+KS9pLnRlc3QodFswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8idGV4dCI6Imh0bWwiLHJhdzp0WzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUu''@;'; put 'put ''aW5SYXdCbG9jayxibG9jazohMSx0ZXh0OnRoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIodFswXSk6VCh0WzBdKTp0WzBdfX0scy5saW5rPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVj''@;'; put 'put ''KHQpKXt2YXIgZT10WzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZSkpe2lmKCEvPiQvLnRlc3QoZSkpcmV0dXJuO3ZhciByPWMxKGUuc2xpY2UoMCwtMSksIlxcIik7aWYoKGUubGVuZ3RoLXIubGVuZ3RoKSUyPT0wKXJldHVybn1lbHNlLTE8KHI9ZnVu''@;'; put 'put ''Y3Rpb24oaCxWKXtpZigtMSE9PWguaW5kZXhPZihWWzFdKSlmb3IodmFyIEM9aC5sZW5ndGgsdT0wLGQ9MDtkPEM7ZCsrKWlmKCJcXCI9PT1oW2RdKWQrKztlbHNlIGlmKGhbZF09PT1WWzBdKXUrKztlbHNlIGlmKGhbZF09PT1WWzFdJiYtLXU8MClyZXR1cm4gZDtyZXR1cm4tMX0odFsyXSwi''@;'; put 'put ''KCkiKSkmJihjPSgwPT09dFswXS5pbmRleE9mKCIhIik/NTo0KSt0WzFdLmxlbmd0aCtyLHRbMl09dFsyXS5zdWJzdHJpbmcoMCxyKSx0WzBdPXRbMF0uc3Vic3RyaW5nKDAsYykudHJpbSgpLHRbM109IiIpO3I9dFsyXTt2YXIgaSxjPSIiO3JldHVybiB0aGlzLm9wdGlvbnMucGVkYW50aWM/''@;'; put 'put ''KGk9L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLy5leGVjKHIpKSYmKHI9aVsxXSxjPWlbM10pOmM9dFszXT90WzNdLnNsaWNlKDEsLTEpOiIiLHI9ci50cmltKCksbzEodCx7aHJlZjoocj0vXjwvLnRlc3Qocik/dGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0KGUpP3Iu''@;'; put 'put ''c2xpY2UoMSk6ci5zbGljZSgxLC0xKTpyKSYmci5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOmMmJmMucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKX0sdFswXSx0aGlzLmxleGVyKX19LHMucmVmbGluaz1mdW5jdGlvbih0LGUp''@;'; put 'put ''e3ZhciBpO2lmKGk9KGk9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKHQpKXx8dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWModCkpcmV0dXJuKHQ9ZVsodD0oaVsyXXx8aVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSkudG9Mb3dlckNhc2UoKV0pP28xKGksdCxpWzBdLHRoaXMu''@;'; put 'put ''bGV4ZXIpOnt0eXBlOiJ0ZXh0IixyYXc6ZT1pWzBdLmNoYXJBdCgwKSx0ZXh0OmV9fSxzLmVtU3Ryb25nPWZ1bmN0aW9uKHQsZSxpKXt2b2lkIDA9PT1pJiYoaT0iIik7dmFyIHI9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWModCk7aWYociYmKCFyWzNdfHwhaS5tYXRj''@;'; put 'put ''aCgvKD86WzAtOUEtWmEtelx4QUFceEIyXHhCM1x4QjVceEI5XHhCQVx4QkMtXHhCRVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3Rlx1MDM4''@;'; put 'put ''Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MC1cdTA1ODhcdTA1RDAtXHUwNUVBXHUwNUVGLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NjAtXHUwNjY5XHUwNjZFXHUw''@;'; put 'put ''NjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDMC1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1''@;'; put 'put ''OFx1MDg2MC1cdTA4NkFcdTA4NzAtXHUwODg3XHUwODg5LVx1MDg4RVx1MDhBMC1cdTA4QzlcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUw''@;'; put 'put ''OUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RTYtXHUwOUYxXHUwOUY0LVx1MDlGOVx1MDlGQ1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEz''@;'; put 'put ''Nlx1MEEzOFx1MEEzOVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTZGXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQUU2''@;'; put 'put ''LVx1MEFFRlx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjY2LVx1MEI2Rlx1MEI3MS1cdTBCNzdcdTBCODNcdTBCODUtXHUwQjhB''@;'; put 'put ''XHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEJFNi1cdTBCRjJcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5''@;'; put 'put ''XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM1RFx1MEM2MFx1MEM2MVx1MEM2Ni1cdTBDNkZcdTBDNzgtXHUwQzdFXHUwQzgwXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDRERcdTBDREVcdTBDRTBcdTBDRTFc''@;'; put 'put ''dTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDA0LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDU0LVx1MEQ1Nlx1MEQ1OC1cdTBENjFcdTBENjYtXHUwRDc4XHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERC''@;'; put 'put ''Qlx1MERCRFx1MERDMC1cdTBEQzZcdTBERTYtXHUwREVGXHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFNTAtXHUwRTU5XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg2LVx1MEU4QVx1MEU4Qy1cdTBFQTNcdTBFQTVcdTBFQTctXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJE''@;'; put 'put ''XHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEMC1cdTBFRDlcdTBFREMtXHUwRURGXHUwRjAwXHUwRjIwLVx1MEYzM1x1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0YtXHUxMDQ5XHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEw''@;'; put 'put ''NjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTA5MC1cdTEwOTlcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUx''@;'; put 'put ''MjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzY5LVx1MTM3Q1x1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y1XHUxM0Y4''@;'; put 'put ''LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcxMVx1MTcxRi1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUxN0RDXHUx''@;'; put 'put ''N0UwLVx1MTdFOVx1MTdGMC1cdTE3RjlcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3OFx1MTg4MC1cdTE4ODRcdTE4ODctXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NDYtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxOUQw''@;'; put 'put ''LVx1MTlEQVx1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQTgwLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Q1x1MUI1MC1cdTFCNTlcdTFCODMtXHUxQkEwXHUxQkFFLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNDAtXHUxQzQ5XHUxQzRELVx1''@;'; put 'put ''MUM3RFx1MUM4MC1cdTFDODhcdTFDOTAtXHUxQ0JBXHUxQ0JELVx1MUNCRlx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YzXHUxQ0Y1XHUxQ0Y2XHUxQ0ZBXHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3''@;'; put 'put ''XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MFx1MjA3''@;'; put 'put ''MVx1MjA3NC1cdTIwNzlcdTIwN0YtXHUyMDg5XHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE1''@;'; put 'put ''MC1cdTIxODlcdTI0NjAtXHUyNDlCXHUyNEVBLVx1MjRGRlx1Mjc3Ni1cdTI3OTNcdTJDMDAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM1x1MkNGRFx1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZcdTJE''@;'; put 'put ''QTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZcdTMwOUQt''@;'; put 'put ''XHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJGXHUzMTMxLVx1MzE4RVx1MzE5Mi1cdTMxOTVcdTMxQTAtXHUzMUJGXHUzMUYwLVx1MzFGRlx1MzIyMC1cdTMyMjlcdTMyNDgtXHUzMjRGXHUzMjUxLVx1MzI1Rlx1MzI4MC1cdTMyODlcdTMyQjEtXHUzMkJGXHUz''@;'; put 'put ''NDAwLVx1NERCRlx1NEUwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3Q0FcdUE3RDBcdUE3RDFcdUE3RDNcdUE3RDUt''@;'; put 'put ''XHVBN0Q5XHVBN0YyLVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTgzMC1cdUE4MzVcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThEMC1cdUE4RDlcdUE4RjItXHVBOEY3XHVBOEZCXHVBOEZEXHVBOEZFXHVBOTAwLVx1QTkyNVx1QTkzMC1cdUE5''@;'; put 'put ''NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRi1cdUE5RDlcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlGRVx1QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1''@;'; put 'put ''QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY5XHVBQjcw''@;'; put 'put ''LVx1QUJFMlx1QUJGMC1cdUFCRjlcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVG''@;'; put 'put ''QjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYxMC1cdUZGMTlcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVc''@;'; put 'put ''dUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXXxcdUQ4MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURDMjZcdURDMjgtXHVEQzNBXHVEQzNDXHVEQzNEXHVEQzNGLVx1REM0RFx1REM1MC1cdURDNURcdURDODAtXHVEQ0ZBXHVERDA3LVx1REQzM1x1''@;'; put 'put ''REQ0MC1cdURENzhcdUREOEFcdUREOEJcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REVFMS1cdURFRkJcdURGMDAtXHVERjIzXHVERjJELVx1REY0QVx1REY1MC1cdURGNzVcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVE''@;'; put 'put ''QzAwLVx1REM5RFx1RENBMC1cdURDQTlcdURDQjAtXHVEQ0QzXHVEQ0Q4LVx1RENGQlx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERDcwLVx1REQ3QVx1REQ3Qy1cdUREOEFcdUREOEMtXHVERDkyXHVERDk0XHVERDk1XHVERDk3LVx1RERBMVx1RERBMy1cdUREQjFcdUREQjMtXHVEREI5''@;'; put 'put ''XHVEREJCXHVEREJDXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XHVERjgwLVx1REY4NVx1REY4Ny1cdURGQjBcdURGQjItXHVERkJBXXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVE''@;'; put 'put ''QzU4LVx1REM3Nlx1REM3OS1cdURDOUVcdURDQTctXHVEQ0FGXHVEQ0UwLVx1RENGMlx1RENGNFx1RENGNVx1RENGQi1cdUREMUJcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCQy1cdUREQ0ZcdURERDItXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTktXHVERTM1''@;'; put 'put ''XHVERTQwLVx1REU0OFx1REU2MC1cdURFN0VcdURFODAtXHVERTlGXHVERUMwLVx1REVDN1x1REVDOS1cdURFRTRcdURFRUItXHVERUVGXHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNTgtXHVERjcyXHVERjc4LVx1REY5MVx1REZBOS1cdURGQUZdfFx1RDgwM1tcdURDMDAtXHVEQzQ4''@;'; put 'put ''XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJcdURDRkEtXHVERDIzXHVERDMwLVx1REQzOVx1REU2MC1cdURFN0VcdURFODAtXHVERUE5XHVERUIwXHVERUIxXHVERjAwLVx1REYyN1x1REYzMC1cdURGNDVcdURGNTEtXHVERjU0XHVERjcwLVx1REY4MVx1REZCMC1cdURGQ0JcdURGRTAtXHVE''@;'; put 'put ''RkY2XXxcdUQ4MDRbXHVEQzAzLVx1REMzN1x1REM1Mi1cdURDNkZcdURDNzFcdURDNzJcdURDNzVcdURDODMtXHVEQ0FGXHVEQ0QwLVx1RENFOFx1RENGMC1cdURDRjlcdUREMDMtXHVERDI2XHVERDM2LVx1REQzRlx1REQ0NFx1REQ0N1x1REQ1MC1cdURENzJcdURENzZcdUREODMtXHVEREIy''@;'; put 'put ''XHVEREMxLVx1RERDNFx1REREMC1cdUREREFcdURERENcdURERTEtXHVEREY0XHVERTAwLVx1REUxMVx1REUxMy1cdURFMkJcdURFM0ZcdURFNDBcdURFODAtXHVERTg2XHVERTg4XHVERThBLVx1REU4RFx1REU4Ri1cdURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVERVx1REVGMC1cdURF''@;'; put 'put ''RjlcdURGMDUtXHVERjBDXHVERjBGXHVERjEwXHVERjEzLVx1REYyOFx1REYyQS1cdURGMzBcdURGMzJcdURGMzNcdURGMzUtXHVERjM5XHVERjNEXHVERjUwXHVERjVELVx1REY2MV18XHVEODA1W1x1REMwMC1cdURDMzRcdURDNDctXHVEQzRBXHVEQzUwLVx1REM1OVx1REM1Ri1cdURDNjFc''@;'; put 'put ''dURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVEQ0QwLVx1RENEOVx1REQ4MC1cdUREQUVcdURERDgtXHVERERCXHVERTAwLVx1REUyRlx1REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVERUFBXHVERUI4XHVERUMwLVx1REVDOVx1REYwMC1cdURGMUFcdURGMzAtXHVERjNCXHVERjQw''@;'; put 'put ''LVx1REY0Nl18XHVEODA2W1x1REMwMC1cdURDMkJcdURDQTAtXHVEQ0YyXHVEQ0ZGLVx1REQwNlx1REQwOVx1REQwQy1cdUREMTNcdUREMTVcdUREMTZcdUREMTgtXHVERDJGXHVERDNGXHVERDQxXHVERDUwLVx1REQ1OVx1RERBMC1cdUREQTdcdUREQUEtXHVEREQwXHVEREUxXHVEREUzXHVE''@;'; put 'put ''RTAwXHVERTBCLVx1REUzMlx1REUzQVx1REU1MFx1REU1Qy1cdURFODlcdURFOURcdURFQjAtXHVERUY4XXxcdUQ4MDdbXHVEQzAwLVx1REMwOFx1REMwQS1cdURDMkVcdURDNDBcdURDNTAtXHVEQzZDXHVEQzcyLVx1REM4Rlx1REQwMC1cdUREMDZcdUREMDhcdUREMDlcdUREMEItXHVERDMw''@;'; put 'put ''XHVERDQ2XHVERDUwLVx1REQ1OVx1REQ2MC1cdURENjVcdURENjdcdURENjhcdURENkEtXHVERDg5XHVERDk4XHVEREEwLVx1RERBOVx1REVFMC1cdURFRjJcdURGMDJcdURGMDQtXHVERjEwXHVERjEyLVx1REYzM1x1REY1MC1cdURGNTlcdURGQjBcdURGQzAtXHVERkQ0XXxcdUQ4MDhbXHVE''@;'; put 'put ''QzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxcdUQ4MEJbXHVERjkwLVx1REZGMF18W1x1RDgwQ1x1RDgxQy1cdUQ4MjBcdUQ4MjJcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q1x1RDg2Ri1cdUQ4NzJcdUQ4NzQtXHVEODc5XHVEODgwLVx1RDg4M1x1RDg4''@;'; put 'put ''NS1cdUQ4ODddW1x1REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJGXHVEQzQxLVx1REM0Nl18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFNzAtXHVERUJFXHVERUMwLVx1REVDOVx1REVEMC1cdURF''@;'; put 'put ''RURcdURGMDAtXHVERjJGXHVERjQwLVx1REY0M1x1REY1MC1cdURGNTlcdURGNUItXHVERjYxXHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltcdURFNDAtXHVERTk2XHVERjAwLVx1REY0QVx1REY1MFx1REY5My1cdURGOUZcdURGRTBcdURGRTFcdURGRTNdfFx1RDgyMVtcdURD''@;'; put 'put ''MDAtXHVERkY3XXxcdUQ4MjNbXHVEQzAwLVx1RENENVx1REQwMC1cdUREMDhdfFx1RDgyQltcdURGRjAtXHVERkYzXHVERkY1LVx1REZGQlx1REZGRFx1REZGRV18XHVEODJDW1x1REMwMC1cdUREMjJcdUREMzJcdURENTAtXHVERDUyXHVERDU1XHVERDY0LVx1REQ2N1x1REQ3MC1cdURFRkJd''@;'; put 'put ''fFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAtXHVEQzk5XXxcdUQ4MzRbXHVERUMwLVx1REVEM1x1REVFMC1cdURFRjNcdURGNjAtXHVERjc4XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZcdURDQTJcdURD''@;'; put 'put ''QTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1REQ1MFx1''@;'; put 'put ''REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQlx1REZDRS1cdURG''@;'; put 'put ''RkZdfFx1RDgzN1tcdURGMDAtXHVERjFFXHVERjI1LVx1REYyQV18XHVEODM4W1x1REMzMC1cdURDNkRcdUREMDAtXHVERDJDXHVERDM3LVx1REQzRFx1REQ0MC1cdURENDlcdURENEVcdURFOTAtXHVERUFEXHVERUMwLVx1REVFQlx1REVGMC1cdURFRjldfFx1RDgzOVtcdURDRDAtXHVEQ0VC''@;'; put 'put ''XHVEQ0YwLVx1RENGOVx1REZFMC1cdURGRTZcdURGRTgtXHVERkVCXHVERkVEXHVERkVFXHVERkYwLVx1REZGRV18XHVEODNBW1x1REMwMC1cdURDQzRcdURDQzctXHVEQ0NGXHVERDAwLVx1REQ0M1x1REQ0Qlx1REQ1MC1cdURENTldfFx1RDgzQltcdURDNzEtXHVEQ0FCXHVEQ0FELVx1RENB''@;'; put 'put ''Rlx1RENCMS1cdURDQjRcdUREMDEtXHVERDJEXHVERDJGLVx1REQzRFx1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQtXHVERTRG''@;'; put 'put ''XHVERTUxXHVERTUyXHVERTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1REVBM1x1''@;'; put 'put ''REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxcdUQ4M0NbXHVERDAwLVx1REQwQ118XHVEODNFW1x1REZGMC1cdURGRjldfFx1RDg2OVtcdURDMDAtXHVERURGXHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzlcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1REMy''@;'; put 'put ''MC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXHVERUIwLVx1REZGRl18XHVEODdBW1x1REMwMC1cdURGRTBdfFx1RDg3RVtcdURDMDAtXHVERTFEXXxcdUQ4ODRbXHVEQzAwLVx1REY0QVx1REY1MC1cdURGRkZdfFx1RDg4OFtcdURDMDAtXHVERkFGXSkvKSkmJighclsxXSYmIXJbMl18''@;'; put 'put ''fCFpfHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKGkpKSl7dmFyIGM9clswXS5sZW5ndGgtMSxoPWMsVj0wLEM9IioiPT09clswXVswXT90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltVW5kO2Zv''@;'; put 'put ''cihDLmxhc3RJbmRleD0wLGU9ZS5zbGljZSgtMSp0Lmxlbmd0aCtjKTtudWxsIT0ocj1DLmV4ZWMoZSkpOyl7dmFyIHUsZD1yWzFdfHxyWzJdfHxyWzNdfHxyWzRdfHxyWzVdfHxyWzZdO2lmKGQpaWYoZD1kLmxlbmd0aCxyWzNdfHxyWzRdKWgrPWQ7ZWxzZSBpZigocls1XXx8cls2XSkmJmMl''@;'; put 'put ''MyYmISgoYytkKSUzKSlWKz1kO2Vsc2UgaWYoISgwPChoLT1kKSkpcmV0dXJuIGQ9TWF0aC5taW4oZCxkK2grViksdT10LnNsaWNlKDAsYytyLmluZGV4K2QrMSksTWF0aC5taW4oYyxkKSUyPyhkPXUuc2xpY2UoMSwtMSkse3R5cGU6ImVtIixyYXc6dSx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4''@;'; put 'put ''ZXIuaW5saW5lVG9rZW5zKGQpfSk6KGQ9dS5zbGljZSgyLC0yKSx7dHlwZToic3Ryb25nIixyYXc6dSx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKGQpfSl9fX0scy5jb2Rlc3Bhbj1mdW5jdGlvbihjKXt2YXIgZSxpLHI7aWYoYz10aGlzLnJ1bGVzLmlubGluZS5jb2Rl''@;'; put 'put ''LmV4ZWMoYykpcmV0dXJuIHI9Y1syXS5yZXBsYWNlKC9cbi9nLCIgIiksZT0vW14gXS8udGVzdChyKSxpPS9eIC8udGVzdChyKSYmLyAkLy50ZXN0KHIpLHI9VChyPWUmJmk/ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKTpyLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzpjWzBdLHRleHQ6cn19''@;'; put 'put ''LHMuYnI9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKHQpKXJldHVybnt0eXBlOiJiciIscmF3OnRbMF19fSxzLmRlbD1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHQpKXJldHVybnt0eXBlOiJkZWwiLHJhdzp0WzBdLHRleHQ6''@;'; put 'put ''dFsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnModFsyXSl9fSxzLmF1dG9saW5rPWZ1bmN0aW9uKHIsZSl7dmFyIGk7aWYocj10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKHIpKXJldHVybiBlPSJAIj09PXJbMl0/Im1haWx0bzoiKyhpPVQodGhpcy5vcHRpb25zLm1h''@;'; put 'put ''bmdsZT9lKHJbMV0pOnJbMV0pKTppPVQoclsxXSkse3R5cGU6ImxpbmsiLHJhdzpyWzBdLHRleHQ6aSxocmVmOmUsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmksdGV4dDppfV19fSxzLnVybD1mdW5jdGlvbih0LGUpe3ZhciBpLHIsYyxoO2lmKGk9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4''@;'; put 'put ''ZWModCkpe2lmKCJAIj09PWlbMl0pYz0ibWFpbHRvOiIrKHI9VCh0aGlzLm9wdGlvbnMubWFuZ2xlP2UoaVswXSk6aVswXSkpO2Vsc2V7Zm9yKDtoPWlbMF0saVswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoaVswXSlbMF0saCE9PWlbMF07KTtyPVQoaVswXSksYz0id3d3''@;'; put 'put ''LiI9PT1pWzFdPyJodHRwOi8vIitpWzBdOmlbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzppWzBdLHRleHQ6cixocmVmOmMsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OnIsdGV4dDpyfV19fX0scy5pbmxpbmVUZXh0PWZ1bmN0aW9uKHQsZSl7aWYodD10aGlzLnJ1bGVzLmlubGluZS50ZXh0''@;'; put 'put ''LmV4ZWModCkpcmV0dXJuIGU9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIodFswXSk6VCh0WzBdKTp0WzBdOlQodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2UodFsw''@;'; put 'put ''XSk6dFswXSkse3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6ZX19LG59KCksZz17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9''@;'; put 'put ''KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2''@;'; put 'put ''fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVh''@;'; put 'put ''KVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwv''@;'; put 'put ''Pyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8''@;'; put 'put ''Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86''@;'; put 'put ''XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6SyxsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8''@;'; put 'put ''YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigp''@;'; put 'put ''XSpcKSkvfSxBPShnLmRlZj13KGcuZGVmKS5yZXBsYWNlKCJsYWJlbCIsZy5fbGFiZWwpLnJlcGxhY2UoInRpdGxlIixnLl90aXRsZSkuZ2V0UmVnZXgoKSxnLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxnLmxpc3RJdGVtU3RhcnQ9dygvXiggKikoYnVsbCkgKi8pLnJlcGxhY2Uo''@;'; put 'put ''ImJ1bGwiLGcuYnVsbGV0KS5nZXRSZWdleCgpLGcubGlzdD13KGcubGlzdCkucmVwbGFjZSgvYnVsbC9nLGcuYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJlcGxhY2UoImRlZiIs''@;'; put 'put ''IlxcbisoPz0iK2cuZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksZy5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRz''@;'; put 'put ''ZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0''@;'; put 'put ''aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixnLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLyxnLmh0bWw9dyhnLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50IixnLl9jb21tZW50KS5yZXBs''@;'; put 'put ''YWNlKCJ0YWciLGcuX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxnLmxoZWFkaW5nPXcoZy5saGVhZGluZykucmVwbGFjZSgvYnVsbC9n''@;'; put 'put ''LGcuYnVsbGV0KS5nZXRSZWdleCgpLGcucGFyYWdyYXBoPXcoZy5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZy5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1''@;'; put 'put ''b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8''@;'; put 'put ''PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsZy5fdGFnKS5nZXRSZWdleCgpLGcuYmxvY2txdW90ZT13KGcuYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixnLnBhcmFncmFwaCkuZ2V0UmVnZXgoKSxnLm5vcm1hbD16KHt9LGcpLGcuZ2Zt''@;'; put 'put ''PXooe30sZy5ub3JtYWwse3RhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLioo''@;'; put 'put ''PzpcXG58JCkpKilcXG4qfCQpIn0pLGcuZ2ZtLnRhYmxlPXcoZy5nZm0udGFibGUpLnJlcGxhY2UoImhyIixnLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5y''@;'; put 'put ''ZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0''@;'; put 'put ''eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGcuX3RhZykuZ2V0UmVnZXgoKSxnLmdmbS5wYXJhZ3JhcGg9dyhnLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixnLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJl''@;'; put 'put ''cGxhY2UoInRhYmxlIixnLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAi''@;'; put 'put ''KS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGcuX3RhZykuZ2V0UmVnZXgoKSxnLnBlZGFudGljPXooe30sZy5ub3JtYWwse2h0bWw6dygiXiAqKD86Y29tbWVudCAqKD86''@;'; put 'put ''XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcc1teJ1wiLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkpIikucmVwbGFjZSgiY29tbWVudCIsZy5fY29tbWVudCkucmVwbGFjZSgvdGFn''@;'; put 'put ''L2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxi''@;'; put 'put ''IikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6SyxsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpc''@;'; put 'put ''bit8JCkvLHBhcmFncmFwaDp3KGcubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixnLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLGcubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFj''@;'; put 'put ''ZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfSkse2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFp''@;'; put 'put ''bCk+Lyx1cmw6Syx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1c''@;'; put 'put ''XF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xbKHJlZilcXSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoicmVmbGlua3xub2xpbmsoPyFcXCgpIixlbVN0''@;'; put 'put ''cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15fKl0qP1wqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVwqKVtwdW5jdF0oXCorKSg/PVtcc118''@;'; put 'put ''JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8hXCopW3B1bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8W15wdW5jdFxzXShcKispKD89W15wdW5jdFxz''@;'; put 'put ''XSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8rKSg/IV8pKD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0XHNdKF8rKSg/PVtecHVuY3Rcc10pfFtcc10o''@;'; put 'put ''XyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXiggezIsfXxcXClcbig/IVxzKiQpLyxkZWw6Syx0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xz''@;'; put 'put ''XFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99KTtmdW5jdGlvbiBNMShuKXtyZXR1cm4gbi5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIiku''@;'; put 'put ''cmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9nLCJcdTIw''@;'; put 'put ''MjYiKX1mdW5jdGlvbiBwMShuKXtmb3IodmFyIHMsdD0iIixlPW4ubGVuZ3RoLGk9MDtpPGU7aSsrKXM9bi5jaGFyQ29kZUF0KGkpLHQrPSImIyIrKHM9LjU8TWF0aC5yYW5kb20oKT8ieCIrcy50b1N0cmluZygxNik6cykrIjsiO3JldHVybiB0fUEuX3B1bmN0dWF0aW9uPSJcXHB7UH0kKzw9''@;'; put 'put ''PmBefH4iLEEucHVuY3R1YXRpb249dyhBLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyxBLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxBLmFueVB1bmN0dWF0''@;'; put 'put ''aW9uPS9cXFtwdW5jdF0vZyxBLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLEEuX2NvbW1lbnQ9dyhnLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLEEuZW1TdHJvbmcubERlbGltPXcoQS5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBsYWNlKC9w''@;'; put 'put ''dW5jdC9nLEEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEEuZW1TdHJvbmcuckRlbGltQXN0PXcoQS5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBLmVtU3Ryb25nLnJEZWxpbVVuZD13KEEuZW1TdHJvbmcuckRl''@;'; put 'put ''bGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csQS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQS5hbnlQdW5jdHVhdGlvbj13KEEuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxBLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBLl9lc2NhcGVzPXcoQS5fZXNjYXBl''@;'; put 'put ''cywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLEEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEEuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sQS5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17''@;'; put 'put ''MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxBLmF1dG9saW5rPXcoQS5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixBLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixBLl9lbWFpbCkuZ2V0UmVn''@;'; put 'put ''ZXgoKSxBLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sQS50YWc9dyhBLnRhZykucmVwbGFjZSgiY29tbWVudCIsQS5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRlIixBLl9h''@;'; put 'put ''dHRyaWJ1dGUpLmdldFJlZ2V4KCksQS5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sQS5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLyxBLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpc''@;'; put 'put ''XCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLEEubGluaz13KEEubGluaykucmVwbGFjZSgibGFiZWwiLEEuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixBLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsQS5fdGl0bGUpLmdldFJlZ2V4KCksQS5yZWZsaW5rPXcoQS5yZWZsaW5rKS5y''@;'; put 'put ''ZXBsYWNlKCJsYWJlbCIsQS5fbGFiZWwpLnJlcGxhY2UoInJlZiIsZy5fbGFiZWwpLmdldFJlZ2V4KCksQS5ub2xpbms9dyhBLm5vbGluaykucmVwbGFjZSgicmVmIixnLl9sYWJlbCkuZ2V0UmVnZXgoKSxBLnJlZmxpbmtTZWFyY2g9dyhBLnJlZmxpbmtTZWFyY2gsImciKS5yZXBsYWNlKCJy''@;'; put 'put ''ZWZsaW5rIixBLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsQS5ub2xpbmspLmdldFJlZ2V4KCksQS5ub3JtYWw9eih7fSxBKSxBLnBlZGFudGljPXooe30sQS5ub3JtYWwse3N0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8Xlwq''@;'; put 'put ''XCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxlbmRBc3Q6''@;'; put 'put ''L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazp3KC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixBLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOncoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLEEuX2xh''@;'; put 'put ''YmVsKS5nZXRSZWdleCgpfSksQS5nZm09eih7fSxBLm5vcm1hbCx7ZXNjYXBlOncoQS5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEt''@;'; put 'put ''WjAtOV0pKyg/IVstX10pLyx1cmw6L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nIn4p''@;'; put 'put ''XSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxi''@;'; put 'put ''X3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99KSxBLmdmbS51cmw9dyhBLmdmbS51cmwsImkiKS5yZXBsYWNlKCJlbWFp''@;'; put 'put ''bCIsQS5nZm0uX2V4dGVuZGVkX2VtYWlsKS5nZXRSZWdleCgpLEEuYnJlYWtzPXooe30sQS5nZm0se2JyOncoQS5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6dyhBLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2UoL1x7Mixc''@;'; put 'put ''fS9nLCIqIikuZ2V0UmVnZXgoKX0pO3ZhciBOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihpKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1pfHxiLmRlZmF1bHRzLHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhpcy5vcHRp''@;'; put 'put ''b25zLnRva2VuaXplcnx8bmV3IEosdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucywodGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcykuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3''@;'; put 'put ''QmxvY2s6ITEsdG9wOiEwfSxpPXtibG9jazpnLm5vcm1hbCxpbmxpbmU6QS5ub3JtYWx9LHRoaXMub3B0aW9ucy5wZWRhbnRpYz8oaS5ibG9jaz1nLnBlZGFudGljLGkuaW5saW5lPUEucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihpLmJsb2NrPWcuZ2ZtLGkuaW5saW5lPXRoaXMub3B0''@;'; put 'put ''aW9ucy5icmVha3M/QS5icmVha3M6QS5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWl9bi5sZXg9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IG4ocikubGV4KGkpfSxuLmxleElubGluZT1mdW5jdGlvbihpLHIpe3JldHVybiBuZXcgbihyKS5pbmxpbmVUb2tlbnMoaSl9O3ZhciB0LGU9bi5w''@;'; put 'put ''cm90b3R5cGU7cmV0dXJuIGUubGV4PWZ1bmN0aW9uKGkpe3ZhciByO2ZvcihpPWkucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMoaSx0aGlzLnRva2Vucyk7cj10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKHIuc3JjLHIudG9rZW5z''@;'; put 'put ''KTtyZXR1cm4gdGhpcy50b2tlbnN9LGUuYmxvY2tUb2tlbnM9ZnVuY3Rpb24oaSxyKXt2YXIgYyxoLFYsQyx1PXRoaXM7Zm9yKHZvaWQgMD09PXImJihyPVtdKSxpPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9pLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIiKTppLnJl''@;'; put 'put ''cGxhY2UoL14oICopKFx0KykvZ20sZnVuY3Rpb24oTCx5LEkpe3JldHVybiB5KyIgICAgIi5yZXBlYXQoSS5sZW5ndGgpfSk7aTspe3ZhciBkPWZ1bmN0aW9uKCl7aWYodS5vcHRpb25zLmV4dGVuc2lvbnMmJnUub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZ1Lm9wdGlvbnMuZXh0ZW5zaW9u''@;'; put 'put ''cy5ibG9jay5zb21lKGZ1bmN0aW9uKG8pe3JldHVybiEhKGM9by5jYWxsKHtsZXhlcjp1fSxpLHIpKSYmKGk9aS5zdWJzdHJpbmcoYy5yYXcubGVuZ3RoKSxyLnB1c2goYyksITApfSkpcmV0dXJuImNvbnRpbnVlIjtpZihjPXUudG9rZW5pemVyLnNwYWNlKGkpKXJldHVybiBpPWkuc3Vic3Ry''@;'; put 'put ''aW5nKGMucmF3Lmxlbmd0aCksMT09PWMucmF3Lmxlbmd0aCYmMDxyLmxlbmd0aD9yW3IubGVuZ3RoLTFdLnJhdys9IlxuIjpyLnB1c2goYyksImNvbnRpbnVlIjtpZihjPXUudG9rZW5pemVyLmNvZGUoaSkpcmV0dXJuIGk9aS5zdWJzdHJpbmcoYy5yYXcubGVuZ3RoKSwhKGg9cltyLmxlbmd0''@;'; put 'put ''aC0xXSl8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/ci5wdXNoKGMpOihoLnJhdys9IlxuIitjLnJhdyxoLnRleHQrPSJcbiIrYy50ZXh0LHUuaW5saW5lUXVldWVbdS5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCksImNvbnRpbnVlIjtpZigoYz11LnRv''@;'; put 'put ''a2VuaXplci5mZW5jZXMoaSkpfHwoYz11LnRva2VuaXplci5oZWFkaW5nKGkpKXx8KGM9dS50b2tlbml6ZXIuaHIoaSkpfHwoYz11LnRva2VuaXplci5ibG9ja3F1b3RlKGkpKXx8KGM9dS50b2tlbml6ZXIubGlzdChpKSl8fChjPXUudG9rZW5pemVyLmh0bWwoaSkpKXJldHVybiBpPWkuc3Vi''@;'; put 'put ''c3RyaW5nKGMucmF3Lmxlbmd0aCksci5wdXNoKGMpLCJjb250aW51ZSI7aWYoYz11LnRva2VuaXplci5kZWYoaSkpcmV0dXJuIGk9aS5zdWJzdHJpbmcoYy5yYXcubGVuZ3RoKSwhKGg9cltyLmxlbmd0aC0xXSl8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/dS50b2tl''@;'; put 'put ''bnMubGlua3NbYy50YWddfHwodS50b2tlbnMubGlua3NbYy50YWddPXtocmVmOmMuaHJlZix0aXRsZTpjLnRpdGxlfSk6KGgucmF3Kz0iXG4iK2MucmF3LGgudGV4dCs9IlxuIitjLnJhdyx1LmlubGluZVF1ZXVlW3UuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpLCJjb250aW51''@;'; put 'put ''ZSI7aWYoKGM9dS50b2tlbml6ZXIudGFibGUoaSkpfHwoYz11LnRva2VuaXplci5saGVhZGluZyhpKSkpcmV0dXJuIGk9aS5zdWJzdHJpbmcoYy5yYXcubGVuZ3RoKSxyLnB1c2goYyksImNvbnRpbnVlIjt2YXIgTCx5LEk7aWYoVj1pLHUub3B0aW9ucy5leHRlbnNpb25zJiZ1Lm9wdGlvbnMu''@;'; put 'put ''ZXh0ZW5zaW9ucy5zdGFydEJsb2NrJiYoTD0xLzAseT1pLnNsaWNlKDEpLHUub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlvbihvKXsibnVtYmVyIj09dHlwZW9mKEk9by5jYWxsKHtsZXhlcjp0aGlzfSx5KSkmJjA8PUkmJihMPU1hdGgubWluKEwsSSkpfSks''@;'; put 'put ''TDwxLzApJiYwPD1MJiYoVj1pLnN1YnN0cmluZygwLEwrMSkpLHUuc3RhdGUudG9wJiYoYz11LnRva2VuaXplci5wYXJhZ3JhcGgoVikpKXJldHVybiBoPXJbci5sZW5ndGgtMV0sQyYmInBhcmFncmFwaCI9PT1oLnR5cGU/KGgucmF3Kz0iXG4iK2MucmF3LGgudGV4dCs9IlxuIitjLnRleHQs''@;'; put 'put ''dS5pbmxpbmVRdWV1ZS5wb3AoKSx1LmlubGluZVF1ZXVlW3UuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpOnIucHVzaChjKSxDPVYubGVuZ3RoIT09aS5sZW5ndGgsaT1pLnN1YnN0cmluZyhjLnJhdy5sZW5ndGgpLCJjb250aW51ZSI7aWYoYz11LnRva2VuaXplci50ZXh0KGkp''@;'; put 'put ''KXJldHVybiBpPWkuc3Vic3RyaW5nKGMucmF3Lmxlbmd0aCksKGg9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPSJcbiIrYy5yYXcsaC50ZXh0Kz0iXG4iK2MudGV4dCx1LmlubGluZVF1ZXVlLnBvcCgpLHUuaW5saW5lUXVldWVbdS5pbmxpbmVRdWV1ZS5sZW5ndGgt''@;'; put 'put ''MV0uc3JjPWgudGV4dCk6ci5wdXNoKGMpLCJjb250aW51ZSI7aWYoaSl7dmFyIFo9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitpLmNoYXJDb2RlQXQoMCk7aWYodS5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihaKSwiYnJlYWsiO3Rocm93IG5ldyBFcnJvcihaKX19KCk7''@;'; put 'put ''aWYoImNvbnRpbnVlIiE9PWQmJiJicmVhayI9PT1kKWJyZWFrfXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxyfSxlLmlubGluZT1mdW5jdGlvbihpLHIpe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzppLHRva2VuczpyPXZvaWQgMD09PXI/W106cn0pLHJ9LGUuaW5saW5lVG9r''@;'; put 'put ''ZW5zPWZ1bmN0aW9uKGkscil7dmFyIGMsaCxWLEMsdSxkLEw9dGhpcyx5PSh2b2lkIDA9PT1yJiYocj1bXSksaSk7aWYodGhpcy50b2tlbnMubGlua3Mpe3ZhciBJPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZigwPEkubGVuZ3RoKWZvcig7bnVsbCE9KEM9dGhpcy50b2tlbml6''@;'; put 'put ''ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyh5KSk7KUkuaW5jbHVkZXMoQ1swXS5zbGljZShDWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYoeT15LnNsaWNlKDAsQy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoQ1swXS5sZW5ndGgtMikrIl0iK3kuc2xpY2UodGhpcy50b2tl''@;'; put 'put ''bml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oQz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMoeSkpOyl5PXkuc2xpY2UoMCxDLmluZGV4KSsiWyIrImEiLnJlcGVhdChDWzBdLmxlbmd0aC0yKSsiXSIreS5z''@;'; put 'put ''bGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oQz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyh5KSk7KXk9eS5zbGljZSgwLEMuaW5kZXgpKyIrKyIreS5zbGljZSh0aGlzLnRva2Vu''@;'; put 'put ''aXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2k7KXt2YXIgWj1mdW5jdGlvbigpe2lmKHV8fChkPSIiKSx1PSExLEwub3B0aW9ucy5leHRlbnNpb25zJiZMLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJkwub3B0aW9ucy5leHRlbnNpb25zLmlubGlu''@;'; put 'put ''ZS5zb21lKGZ1bmN0aW9uKG0pe3JldHVybiEhKGM9bS5jYWxsKHtsZXhlcjpMfSxpLHIpKSYmKGk9aS5zdWJzdHJpbmcoYy5yYXcubGVuZ3RoKSxyLnB1c2goYyksITApfSkpcmV0dXJuImNvbnRpbnVlIjtpZihjPUwudG9rZW5pemVyLmVzY2FwZShpKSlyZXR1cm4gaT1pLnN1YnN0cmluZyhj''@;'; put 'put ''LnJhdy5sZW5ndGgpLHIucHVzaChjKSwiY29udGludWUiO2lmKGM9TC50b2tlbml6ZXIudGFnKGkpKXJldHVybiBpPWkuc3Vic3RyaW5nKGMucmF3Lmxlbmd0aCksKGg9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PWMudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9Yy5yYXcsaC50ZXh0''@;'; put 'put ''Kz1jLnRleHQpOnIucHVzaChjKSwiY29udGludWUiO2lmKGM9TC50b2tlbml6ZXIubGluayhpKSlyZXR1cm4gaT1pLnN1YnN0cmluZyhjLnJhdy5sZW5ndGgpLHIucHVzaChjKSwiY29udGludWUiO2lmKGM9TC50b2tlbml6ZXIucmVmbGluayhpLEwudG9rZW5zLmxpbmtzKSlyZXR1cm4gaT1p''@;'; put 'put ''LnN1YnN0cmluZyhjLnJhdy5sZW5ndGgpLChoPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1jLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWMucmF3LGgudGV4dCs9Yy50ZXh0KTpyLnB1c2goYyksImNvbnRpbnVlIjtpZigoYz1MLnRva2VuaXplci5lbVN0cm9uZyhpLHksZCkpfHwo''@;'; put 'put ''Yz1MLnRva2VuaXplci5jb2Rlc3BhbihpKSl8fChjPUwudG9rZW5pemVyLmJyKGkpKXx8KGM9TC50b2tlbml6ZXIuZGVsKGkpKXx8KGM9TC50b2tlbml6ZXIuYXV0b2xpbmsoaSxwMSkpfHwhTC5zdGF0ZS5pbkxpbmsmJihjPUwudG9rZW5pemVyLnVybChpLHAxKSkpcmV0dXJuIGk9aS5zdWJz''@;'; put 'put ''dHJpbmcoYy5yYXcubGVuZ3RoKSxyLnB1c2goYyksImNvbnRpbnVlIjt2YXIgbyxmLEU7aWYoVj1pLEwub3B0aW9ucy5leHRlbnNpb25zJiZMLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSYmKG89MS8wLGY9aS5zbGljZSgxKSxMLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGlu''@;'; put 'put ''ZS5mb3JFYWNoKGZ1bmN0aW9uKG0peyJudW1iZXIiPT10eXBlb2YoRT1tLmNhbGwoe2xleGVyOnRoaXN9LGYpKSYmMDw9RSYmKG89TWF0aC5taW4obyxFKSl9KSxvPDEvMCkmJjA8PW8mJihWPWkuc3Vic3RyaW5nKDAsbysxKSksYz1MLnRva2VuaXplci5pbmxpbmVUZXh0KFYsTTEpKXJldHVy''@;'; put 'put ''biBpPWkuc3Vic3RyaW5nKGMucmF3Lmxlbmd0aCksIl8iIT09Yy5yYXcuc2xpY2UoLTEpJiYoZD1jLnJhdy5zbGljZSgtMSkpLHU9ITAsKGg9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWMucmF3LGgudGV4dCs9Yy50ZXh0KTpyLnB1c2goYyksImNvbnRpbnVlIjtp''@;'; put 'put ''ZihpKXt2YXIgQj0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2kuY2hhckNvZGVBdCgwKTtpZihMLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKEIpLCJicmVhayI7dGhyb3cgbmV3IEVycm9yKEIpfX0oKTtpZigiY29udGludWUiIT09WiYmImJyZWFrIj09PVopYnJlYWt9''@;'; put 'put ''cmV0dXJuIHJ9LGU9biwodD1be2tleToicnVsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybntibG9jazpnLGlubGluZTpBfX19XSkmJmooZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxufSgpLGwxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0''@;'; put 'put ''KXt0aGlzLm9wdGlvbnM9dHx8Yi5kZWZhdWx0c312YXIgcz1uLnByb3RvdHlwZTtyZXR1cm4gcy5jb2RlPWZ1bmN0aW9uKHQsYyxpKXt2YXIgcjtyZXR1cm4gYz0oY3x8IiIpLm1hdGNoKC9cUyovKVswXSx0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0JiZudWxsIT0ocj10aGlzLm9wdGlvbnMuaGln''@;'; put 'put ''aGxpZ2h0KHQsYykpJiZyIT09dCYmKGk9ITAsdD1yKSx0PXQucmVwbGFjZSgvXG4kLywiIikrIlxuIixjPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K1QoYykrJyI+JysoaT90OlQodCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKGk/''@;'; put 'put ''dDpUKHQsITApKSsiPC9jb2RlPjwvcHJlPlxuIn0scy5ibG9ja3F1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiI8YmxvY2txdW90ZT5cbiIrdCsiPC9ibG9ja3F1b3RlPlxuIn0scy5odG1sPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9LHMuaGVhZGluZz1mdW5jdGlvbih0LGUsaSxyKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5vcHRpb25zLmhlYWRlcklkcz8iPGgiK2UrJyBpZD0iJysodGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtyLnNsdWcoaSkpKyciPicrdCsiPC9oIitlKyI+XG4iOiI8aCIrZSsiPiIrdCsiPC9oIitlKyI+XG4ifSxzLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRt''@;'; put 'put ''bD8iPGhyLz5cbiI6Ijxocj5cbiJ9LHMubGlzdD1mdW5jdGlvbih0LGUsaSl7dmFyIHI9ZT8ib2wiOiJ1bCI7cmV0dXJuIjwiK3IrKGUmJjEhPT1pPycgc3RhcnQ9IicraSsnIic6IiIpKyI+XG4iK3QrIjwvIityKyI+XG4ifSxzLmxpc3RpdGVtPWZ1bmN0aW9uKHQpe3JldHVybiI8bGk+Iit0''@;'; put 'put ''KyI8L2xpPlxuIn0scy5jaGVja2JveD1mdW5jdGlvbih0KXtyZXR1cm4iPGlucHV0ICIrKHQ/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifSxzLnBhcmFncmFwaD1mdW5jdGlvbih0KXtyZXR1''@;'; put 'put ''cm4iPHA+Iit0KyI8L3A+XG4ifSxzLnRhYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrdCsiPC90aGVhZD5cbiIrKGU9ZSYmIjx0Ym9keT4iK2UrIjwvdGJvZHk+IikrIjwvdGFibGU+XG4ifSxzLnRhYmxlcm93PWZ1bmN0aW9uKHQpe3JldHVybiI8dHI+XG4i''@;'; put 'put ''K3QrIjwvdHI+XG4ifSxzLnRhYmxlY2VsbD1mdW5jdGlvbih0LGUpe3ZhciBpPWUuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4oZS5hbGlnbj8iPCIraSsnIGFsaWduPSInK2UuYWxpZ24rJyI+JzoiPCIraSsiPiIpK3QrIjwvIitpKyI+XG4ifSxzLnN0cm9uZz1mdW5jdGlvbih0KXtyZXR1cm4i''@;'; put 'put ''PHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9LHMuZW09ZnVuY3Rpb24odCl7cmV0dXJuIjxlbT4iK3QrIjwvZW0+In0scy5jb2Rlc3Bhbj1mdW5jdGlvbih0KXtyZXR1cm4iPGNvZGU+Iit0KyI8L2NvZGU+In0scy5icj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxici8+''@;'; put 'put ''IjoiPGJyPiJ9LHMuZGVsPWZ1bmN0aW9uKHQpe3JldHVybiI8ZGVsPiIrdCsiPC9kZWw+In0scy5saW5rPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbnVsbD09PSh0PW4xKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/aToodD0nPGEgaHJlZj0iJyt0Kyci''@;'; put 'put ''JyxlJiYodCs9JyB0aXRsZT0iJytlKyciJyksdCsiPiIraSsiPC9hPiIpfSxzLmltYWdlPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbnVsbD09PSh0PW4xKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/aToodD0nPGltZyBzcmM9IicrdCsnIiBhbHQ9Iicr''@;'; put 'put ''aSsnIicsZSYmKHQrPScgdGl0bGU9IicrZSsnIicpLHQrKHRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IikpfSxzLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG59KCkscjE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7fXZhciBzPW4ucHJvdG90eXBlO3JldHVybiBzLnN0cm9uZz1mdW5j''@;'; put 'put ''dGlvbih0KXtyZXR1cm4gdH0scy5lbT1mdW5jdGlvbih0KXtyZXR1cm4gdH0scy5jb2Rlc3Bhbj1mdW5jdGlvbih0KXtyZXR1cm4gdH0scy5kZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHMuaHRtbD1mdW5jdGlvbih0KXtyZXR1cm4gdH0scy50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxz''@;'; put 'put ''Lmxpbms9ZnVuY3Rpb24odCxlLGkpe3JldHVybiIiK2l9LHMuaW1hZ2U9ZnVuY3Rpb24odCxlLGkpe3JldHVybiIiK2l9LHMuYnI9ZnVuY3Rpb24oKXtyZXR1cm4iIn0sbn0oKSxzMT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt0aGlzLnNlZW49e319dmFyIHM9bi5wcm90b3R5cGU7cmV0dXJu''@;'; put 'put ''IHMuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5yZXBs''@;'; put 'put ''YWNlKC9ccy9nLCItIil9LHMuZ2V0TmV4dFNhZmVTbHVnPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dCxyPTA7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGkpKWZvcihyPXRoaXMuc2Vlblt0XTtpPXQrIi0iKyArK3IsdGhpcy5zZWVuLmhhc093blByb3BlcnR5KGkpOyk7cmV0dXJuIGV8fCh0''@;'; put 'put ''aGlzLnNlZW5bdF09cix0aGlzLnNlZW5baV09MCksaX0scy5zbHVnPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0PXRoaXMuc2VyaWFsaXplKHQpLHRoaXMuZ2V0TmV4dFNhZmVTbHVnKHQsZS5kcnlydW4pfSxufSgpLHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQp''@;'; put 'put ''e3RoaXMub3B0aW9ucz10fHxiLmRlZmF1bHRzLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBsMSx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRl''@;'; put 'put ''cmVyPW5ldyByMSx0aGlzLnNsdWdnZXI9bmV3IHMxfW4ucGFyc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4oZSkucGFyc2UodCl9LG4ucGFyc2VJbmxpbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4oZSkucGFyc2VJbmxpbmUodCl9O3ZhciBzPW4ucHJvdG90eXBlO3JldHVybiBz''@;'; put 'put ''LnBhcnNlPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ITApO2Zvcih2YXIgaSxyLGMsaCxWLEMsdSxkLEwseSxJLFosbyxmLEUsQixtPSIiLF89dC5sZW5ndGgsUj0wO1I8XztSKyspaWYoZD10W1JdLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9u''@;'; put 'put ''cy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tkLnR5cGVdJiYoITEhPT0oQj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZC50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sZCkpfHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0''@;'; put 'put ''YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhkLnR5cGUpKSltKz1CfHwiIjtlbHNlIHN3aXRjaChkLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOm0rPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNl''@;'; put 'put ''ImhlYWRpbmciOm0rPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKGQudG9rZW5zKSxkLmRlcHRoLFEodGhpcy5wYXJzZUlubGluZShkLnRva2Vucyx0aGlzLnRleHRSZW5kZXJlcikpLHRoaXMuc2x1Z2dlcik7Y29udGludWU7Y2FzZSJjb2RlIjptKz10aGlzLnJlbmRl''@;'; put 'put ''cmVyLmNvZGUoZC50ZXh0LGQubGFuZyxkLmVzY2FwZWQpO2NvbnRpbnVlO2Nhc2UidGFibGUiOmZvcihDPUw9IiIsYz1kLmhlYWRlci5sZW5ndGgsaT0wO2k8YztpKyspQys9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShkLmhlYWRlcltpXS50b2tlbnMpLHtoZWFk''@;'; put 'put ''ZXI6ITAsYWxpZ246ZC5hbGlnbltpXX0pO2ZvcihMKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KEMpLHU9IiIsYz1kLnJvd3MubGVuZ3RoLGk9MDtpPGM7aSsrKXtmb3IoQz0iIixoPShWPWQucm93c1tpXSkubGVuZ3RoLHI9MDtyPGg7cisrKUMrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRo''@;'; put 'put ''aXMucGFyc2VJbmxpbmUoVltyXS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246ZC5hbGlnbltyXX0pO3UrPXRoaXMucmVuZGVyZXIudGFibGVyb3coQyl9bSs9dGhpcy5yZW5kZXJlci50YWJsZShMLHUpO2NvbnRpbnVlO2Nhc2UiYmxvY2txdW90ZSI6dT10aGlzLnBhcnNlKGQudG9rZW5zKSxt''@;'; put 'put ''Kz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUodSk7Y29udGludWU7Y2FzZSJsaXN0Ijpmb3IoTD1kLm9yZGVyZWQsJD1kLnN0YXJ0LHk9ZC5sb29zZSxjPWQuaXRlbXMubGVuZ3RoLHU9IiIsaT0wO2k8YztpKyspbz0oWj1kLml0ZW1zW2ldKS5jaGVja2VkLGY9Wi50YXNrLEk9IiIsWi50YXNr''@;'; put 'put ''JiYoRT10aGlzLnJlbmRlcmVyLmNoZWNrYm94KG8pLHk/MDxaLnRva2Vucy5sZW5ndGgmJiJwYXJhZ3JhcGgiPT09Wi50b2tlbnNbMF0udHlwZT8oWi50b2tlbnNbMF0udGV4dD1FKyIgIitaLnRva2Vuc1swXS50ZXh0LFoudG9rZW5zWzBdLnRva2VucyYmMDxaLnRva2Vuc1swXS50b2tlbnMu''@;'; put 'put ''bGVuZ3RoJiYidGV4dCI9PT1aLnRva2Vuc1swXS50b2tlbnNbMF0udHlwZSYmKFoudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PUUrIiAiK1oudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0KSk6Wi50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIsdGV4dDpFfSk6SSs9RSksSSs9dGhpcy5wYXJz''@;'; put 'put ''ZShaLnRva2Vucyx5KSx1Kz10aGlzLnJlbmRlcmVyLmxpc3RpdGVtKEksZixvKTttKz10aGlzLnJlbmRlcmVyLmxpc3QodSxMLCQpO2NvbnRpbnVlO2Nhc2UiaHRtbCI6bSs9dGhpcy5yZW5kZXJlci5odG1sKGQudGV4dCxkLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6bSs9dGhp''@;'; put 'put ''cy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShkLnRva2VucykpO2NvbnRpbnVlO2Nhc2UidGV4dCI6Zm9yKHU9ZC50b2tlbnM/dGhpcy5wYXJzZUlubGluZShkLnRva2Vucyk6ZC50ZXh0O1IrMTxfJiYidGV4dCI9PT10W1IrMV0udHlwZTspdSs9IlxuIisoKGQ9dFsrK1Jd''@;'; put 'put ''KS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShkLnRva2Vucyk6ZC50ZXh0KTttKz1lP3RoaXMucmVuZGVyZXIucGFyYWdyYXBoKHUpOnU7Y29udGludWU7ZGVmYXVsdDp2YXIgJD0nVG9rZW4gd2l0aCAiJytkLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNp''@;'; put 'put ''bGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCQpO3Rocm93IG5ldyBFcnJvcigkKX1yZXR1cm4gbX0scy5wYXJzZUlubGluZT1mdW5jdGlvbih0LGUpe2U9ZXx8dGhpcy5yZW5kZXJlcjtmb3IodmFyIGkscixjPSIiLGg9dC5sZW5ndGgsVj0wO1Y8aDtWKyspaWYoaT10W1ZdLHRoaXMu''@;'; put 'put ''b3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tpLnR5cGVdJiYoITEhPT0ocj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbaS50eXBlXS5jYWxsKHtwYXJzZXI6dGhp''@;'; put 'put ''c30saSkpfHwhWyJlc2NhcGUiLCJodG1sIiwibGluayIsImltYWdlIiwic3Ryb25nIiwiZW0iLCJjb2Rlc3BhbiIsImJyIiwiZGVsIiwidGV4dCJdLmluY2x1ZGVzKGkudHlwZSkpKWMrPXJ8fCIiO2Vsc2Ugc3dpdGNoKGkudHlwZSl7Y2FzZSJlc2NhcGUiOmNhc2UidGV4dCI6Yys9ZS50ZXh0''@;'; put 'put ''KGkudGV4dCk7YnJlYWs7Y2FzZSJodG1sIjpjKz1lLmh0bWwoaS50ZXh0KTticmVhaztjYXNlImxpbmsiOmMrPWUubGluayhpLmhyZWYsaS50aXRsZSx0aGlzLnBhcnNlSW5saW5lKGkudG9rZW5zLGUpKTticmVhaztjYXNlImltYWdlIjpjKz1lLmltYWdlKGkuaHJlZixpLnRpdGxlLGkudGV4''@;'; put 'put ''dCk7YnJlYWs7Y2FzZSJzdHJvbmciOmMrPWUuc3Ryb25nKHRoaXMucGFyc2VJbmxpbmUoaS50b2tlbnMsZSkpO2JyZWFrO2Nhc2UiZW0iOmMrPWUuZW0odGhpcy5wYXJzZUlubGluZShpLnRva2VucyxlKSk7YnJlYWs7Y2FzZSJjb2Rlc3BhbiI6Yys9ZS5jb2Rlc3BhbihpLnRleHQpO2JyZWFr''@;'; put 'put ''O2Nhc2UiYnIiOmMrPWUuYnIoKTticmVhaztjYXNlImRlbCI6Yys9ZS5kZWwodGhpcy5wYXJzZUlubGluZShpLnRva2VucyxlKSk7YnJlYWs7ZGVmYXVsdDp2YXIgQz0nVG9rZW4gd2l0aCAiJytpLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudCly''@;'; put 'put ''ZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKEMpO3Rocm93IG5ldyBFcnJvcihDKX1yZXR1cm4gY30sbn0oKSxYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0KXt0aGlzLm9wdGlvbnM9dHx8Yi5kZWZhdWx0c312YXIgcz1uLnByb3RvdHlwZTtyZXR1cm4gcy5wcmVwcm9jZXNzPWZ1bmN0aW9uKHQp''@;'; put 'put ''e3JldHVybiB0fSxzLnBvc3Rwcm9jZXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxufSgpLGExPShYLnBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKSxwKCJwYXJzZU1hcmtkb3duIikpLGgxPXAoIm9uRXJyb3IiKTtmdW5jdGlvbiBnMShuLHMp''@;'; put 'put ''e3ZhciB0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGUsaSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHI9aSxpPW51bGwpO3ZhciBjLGg9eih7fSxpKSxWPShpPXooe30sdC5kZWZhdWx0cyxoKSxhKHQsaDEpW2gxXShpLnNpbGVudCxpLmFzeW5jLHIpKTtpZihudWxsPT1lKXJldHVybiBWKG5l''@;'; put 'put ''dyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIFYobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n''@;'; put 'put ''LmNhbGwoZSkrIiwgc3RyaW5nIGV4cGVjdGVkIikpO2lmKGg9ciwoYz1pKSYmIWMuc2lsZW50JiYoaCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3Zl''@;'; put 'put ''ZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChjLnNhbml0aXplfHxjLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVw''@;'; put 'put ''cmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLCFjLmhpZ2hsaWdodCYm''@;'; put 'put ''Imxhbmd1YWdlLSI9PT1jLmxhbmdQcmVmaXh8fGNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdodCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGlu''@;'; put 'put ''IHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1oaWdobGlnaHQuIiksYy5tYW5nbGUmJmNvbnNvbGUud2FybigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgZGVwcmVjYXRl''@;'; put 'put ''ZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHttYW5nbGU6''@;'; put 'put ''IGZhbHNlfWAuIiksYy5iYXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNl''@;'; put 'put ''IGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxjLnNtYXJ0eXBhbnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlwYW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQg''@;'; put 'put ''YW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMuIiksYy54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2lu''@;'; put 'put ''Y2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLGMuaGVhZGVySWRzfHxjLmhlYWRlclByZWZpeCkmJmNvbnNv''@;'; put 'put ''bGUud2FybigibWFya2VkKCk6IGhlYWRlcklkcyBhbmQgaGVhZGVyUHJlZml4IHBhcmFtZXRlcnMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlz''@;'; put 'put ''IHdhcm5pbmcsIGluc3RhbGwgIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1nZm0taGVhZGluZy1pZCwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7aGVhZGVySWRzOiBmYWxzZX1gLiIpLGkuaG9va3MmJihpLmhvb2tzLm9wdGlvbnM9aSkscil7dmFyIEMsdT1pLmhpZ2hs''@;'; put 'put ''aWdodDt0cnl7aS5ob29rcyYmKGU9aS5ob29rcy5wcmVwcm9jZXNzKGUpKSxDPW4oZSxpKX1jYXRjaChaKXtyZXR1cm4gVihaKX12YXIgZCxMPWZ1bmN0aW9uKFope3ZhciBvO2lmKCFaKXRyeXtpLndhbGtUb2tlbnMmJnQud2Fsa1Rva2VucyhDLGkud2Fsa1Rva2Vucyksbz1zKEMsaSksaS5o''@;'; put 'put ''b29rcyYmKG89aS5ob29rcy5wb3N0cHJvY2VzcyhvKSl9Y2F0Y2goZil7Wj1mfXJldHVybiBpLmhpZ2hsaWdodD11LFo/VihaKTpyKG51bGwsbyl9O3JldHVybiF1fHx1Lmxlbmd0aDwzP0woKTooZGVsZXRlIGkuaGlnaGxpZ2h0LEMubGVuZ3RoPyhkPTAsdC53YWxrVG9rZW5zKEMsZnVuY3Rp''@;'; put 'put ''b24oWil7ImNvZGUiPT09Wi50eXBlJiYoZCsrLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt1KFoudGV4dCxaLmxhbmcsZnVuY3Rpb24obyxmKXtpZihvKXJldHVybiBMKG8pO251bGwhPWYmJmYhPT1aLnRleHQmJihaLnRleHQ9ZixaLmVzY2FwZWQ9ITApLDA9PS0tZCYmTCgpfSl9LDApKX0pLHZv''@;'; put 'put ''aWQoMD09PWQmJkwoKSkpOkwoKSl9aWYoaS5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkuaG9va3M/aS5ob29rcy5wcmVwcm9jZXNzKGUpOmUpLnRoZW4oZnVuY3Rpb24oWil7cmV0dXJuIG4oWixpKX0pLnRoZW4oZnVuY3Rpb24oWil7cmV0dXJuIGkud2Fsa1Rva2Vucz9Qcm9taXNl''@;'; put 'put ''LmFsbCh0LndhbGtUb2tlbnMoWixpLndhbGtUb2tlbnMpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIFp9KTpafSkudGhlbihmdW5jdGlvbihaKXtyZXR1cm4gcyhaLGkpfSkudGhlbihmdW5jdGlvbihaKXtyZXR1cm4gaS5ob29rcz9pLmhvb2tzLnBvc3Rwcm9jZXNzKFopOlp9KS5jYXRjaChW''@;'; put 'put ''KTt0cnl7aS5ob29rcyYmKGU9aS5ob29rcy5wcmVwcm9jZXNzKGUpKTt2YXIgeT1uKGUsaSksST0oaS53YWxrVG9rZW5zJiZ0LndhbGtUb2tlbnMoeSxpLndhbGtUb2tlbnMpLHMoeSxpKSk7cmV0dXJuIGkuaG9va3M/aS5ob29rcy5wb3N0cHJvY2VzcyhJKTpJfWNhdGNoKFope3JldHVybiBW''@;'; put 'put ''KFopfX19ZnVuY3Rpb24gTDEobixzLHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgaTtpZihlLm1lc3NhZ2UrPSJcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLiIsbilyZXR1cm4gaT0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxw''@;'; put 'put ''cmU+IitUKGUubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiIscz9Qcm9taXNlLnJlc29sdmUoaSk6dD92b2lkIHQobnVsbCxpKTppO2lmKHMpcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO2lmKCF0KXRocm93IGU7dChlKX19Sz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkodGhpcyxoMSx7dmFsdWU6TDF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxhMSx7dmFsdWU6ZzF9KSx0aGlzLmRlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoi''@;'; put 'put ''IixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6''@;'; put 'put ''bnVsbCx4aHRtbDohMX0sdGhpcy5vcHRpb25zPXRoaXMuc2V0T3B0aW9ucyx0aGlzLnBhcnNlPWEodGhpcyxhMSlbYTFdKE4ubGV4LHEucGFyc2UpLHRoaXMucGFyc2VJbmxpbmU9YSh0aGlzLGExKVthMV0oTi5sZXhJbmxpbmUscS5wYXJzZUlubGluZSksdGhpcy5QYXJzZXI9cSx0aGlzLnBh''@;'; put 'put ''cnNlcj1xLnBhcnNlLHRoaXMuUmVuZGVyZXI9bDEsdGhpcy5UZXh0UmVuZGVyZXI9cjEsdGhpcy5MZXhlcj1OLHRoaXMubGV4ZXI9Ti5sZXgsdGhpcy5Ub2tlbml6ZXI9Six0aGlzLlNsdWdnZXI9czEsdGhpcy5Ib29rcz1YLHRoaXMudXNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgcz1u''@;'; put 'put ''LnByb3RvdHlwZTtyZXR1cm4gcy53YWxrVG9rZW5zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpLHI9dGhpcyxjPVtdLGg9bCh0KTshKGk9aCgpKS5kb25lOykhZnVuY3Rpb24oKXt2YXIgVj1pLnZhbHVlO3N3aXRjaChjPWMuY29uY2F0KGUuY2FsbChyLFYpKSxWLnR5cGUpe2Nhc2UidGFibGUi''@;'; put 'put ''OmZvcih2YXIgQz1sKFYuaGVhZGVyKTshKHU9QygpKS5kb25lOyl7dmFyIHU9dS52YWx1ZTtjPWMuY29uY2F0KHIud2Fsa1Rva2Vucyh1LnRva2VucyxlKSl9Zm9yKHZhciBkLEw9bChWLnJvd3MpOyEoZD1MKCkpLmRvbmU7KWZvcih2YXIgeT1sKGQudmFsdWUpOyEoST15KCkpLmRvbmU7KXt2''@;'; put 'put ''YXIgST1JLnZhbHVlO2M9Yy5jb25jYXQoci53YWxrVG9rZW5zKEkudG9rZW5zLGUpKX1icmVhaztjYXNlImxpc3QiOmM9Yy5jb25jYXQoci53YWxrVG9rZW5zKFYuaXRlbXMsZSkpO2JyZWFrO2RlZmF1bHQ6ci5kZWZhdWx0cy5leHRlbnNpb25zJiZyLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hp''@;'; put 'put ''bGRUb2tlbnMmJnIuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tWLnR5cGVdP3IuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tWLnR5cGVdLmZvckVhY2goZnVuY3Rpb24oWil7Yz1jLmNvbmNhdChyLndhbGtUb2tlbnMoVltaXSxlKSl9KTpWLnRva2VucyYmKGM9Yy5j''@;'; put 'put ''b25jYXQoci53YWxrVG9rZW5zKFYudG9rZW5zLGUpKSl9fSgpO3JldHVybiBjfSxzLnVzZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fSxpPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJy''@;'; put 'put ''YXkoaSksYz0wO2M8aTtjKyspcltjXT1hcmd1bWVudHNbY107cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgVixDPXooe30saCk7aWYoQy5hc3luYz10LmRlZmF1bHRzLmFzeW5jfHxDLmFzeW5jfHwhMSxoLmV4dGVuc2lvbnMmJihoLmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihvKXtpZighby5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTt2YXIgZjtpZihvLnJlbmRlcmVyJiYoZS5yZW5kZXJlcnNbby5uYW1lXT0oZj1lLnJlbmRlcmVyc1tvLm5hbWVdKT9mdW5jdGlvbigpe2Zvcih2YXIgRT1hcmd1bWVudHMubGVuZ3RoLEI9''@;'; put 'put ''bmV3IEFycmF5KEUpLG09MDttPEU7bSsrKUJbbV09YXJndW1lbnRzW21dO3ZhciBfPW8ucmVuZGVyZXIuYXBwbHkodGhpcyxCKTtyZXR1cm4hMT09PV8/Zi5hcHBseSh0aGlzLEIpOl99Om8ucmVuZGVyZXIpLG8udG9rZW5pemVyKXtpZighby5sZXZlbHx8ImJsb2NrIiE9PW8ubGV2ZWwmJiJp''@;'; put 'put ''bmxpbmUiIT09by5sZXZlbCl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTtlW28ubGV2ZWxdP2Vbby5sZXZlbF0udW5zaGlmdChvLnRva2VuaXplcik6ZVtvLmxldmVsXT1bby50b2tlbml6ZXJdLG8uc3RhcnQmJigiYmxvY2si''@;'; put 'put ''PT09by5sZXZlbD9lLnN0YXJ0QmxvY2s/ZS5zdGFydEJsb2NrLnB1c2goby5zdGFydCk6ZS5zdGFydEJsb2NrPVtvLnN0YXJ0XToiaW5saW5lIj09PW8ubGV2ZWwmJihlLnN0YXJ0SW5saW5lP2Uuc3RhcnRJbmxpbmUucHVzaChvLnN0YXJ0KTplLnN0YXJ0SW5saW5lPVtvLnN0YXJ0XSkpfW8u''@;'; put 'put ''Y2hpbGRUb2tlbnMmJihlLmNoaWxkVG9rZW5zW28ubmFtZV09by5jaGlsZFRva2Vucyl9KSxDLmV4dGVuc2lvbnM9ZSksaC5yZW5kZXJlcil7dmFyIHUsZD10LmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgbDEodC5kZWZhdWx0cyk7Zm9yKHUgaW4gaC5yZW5kZXJlcikhZnVuY3Rpb24obyl7dmFy''@;'; put 'put ''IGY9ZFtvXTtkW29dPWZ1bmN0aW9uKCl7Zm9yKHZhciBFPWFyZ3VtZW50cy5sZW5ndGgsQj1uZXcgQXJyYXkoRSksbT0wO208RTttKyspQlttXT1hcmd1bWVudHNbbV07dmFyIF89aC5yZW5kZXJlcltvXS5hcHBseShkLEIpO3JldHVybiExPT09Xz9mLmFwcGx5KGQsQik6X319KHUpO0MucmVu''@;'; put 'put ''ZGVyZXI9ZH1pZihoLnRva2VuaXplcil7dmFyIEwseT10LmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IEoodC5kZWZhdWx0cyk7Zm9yKEwgaW4gaC50b2tlbml6ZXIpIWZ1bmN0aW9uKG8pe3ZhciBmPXlbb107eVtvXT1mdW5jdGlvbigpe2Zvcih2YXIgRT1hcmd1bWVudHMubGVuZ3RoLEI9bmV3''@;'; put 'put ''IEFycmF5KEUpLG09MDttPEU7bSsrKUJbbV09YXJndW1lbnRzW21dO3ZhciBfPWgudG9rZW5pemVyW29dLmFwcGx5KHksQik7cmV0dXJuITE9PT1fP2YuYXBwbHkoeSxCKTpffX0oTCk7Qy50b2tlbml6ZXI9eX1pZihoLmhvb2tzKXt2YXIgSSxaPXQuZGVmYXVsdHMuaG9va3N8fG5ldyBYO2Zv''@;'; put 'put ''cihJIGluIGguaG9va3MpIWZ1bmN0aW9uKG8pe3ZhciBmPVpbb107WltvXT1YLnBhc3NUaHJvdWdoSG9va3MuaGFzKG8pP2Z1bmN0aW9uKEUpe3JldHVybiB0LmRlZmF1bHRzLmFzeW5jP1Byb21pc2UucmVzb2x2ZShoLmhvb2tzW29dLmNhbGwoWixFKSkudGhlbihmdW5jdGlvbihCKXtyZXR1''@;'; put 'put ''cm4gZi5jYWxsKFosQil9KTooRT1oLmhvb2tzW29dLmNhbGwoWixFKSxmLmNhbGwoWixFKSl9OmZ1bmN0aW9uKCl7Zm9yKHZhciBFPWFyZ3VtZW50cy5sZW5ndGgsQj1uZXcgQXJyYXkoRSksbT0wO208RTttKyspQlttXT1hcmd1bWVudHNbbV07dmFyIF89aC5ob29rc1tvXS5hcHBseShaLEIp''@;'; put 'put ''O3JldHVybiExPT09Xz9mLmFwcGx5KFosQik6X319KEkpO0MuaG9va3M9Wn1oLndhbGtUb2tlbnMmJihWPXQuZGVmYXVsdHMud2Fsa1Rva2VucyxDLndhbGtUb2tlbnM9ZnVuY3Rpb24obyl7dmFyIGY9W107cmV0dXJuIGYucHVzaChoLndhbGtUb2tlbnMuY2FsbCh0aGlzLG8pKSxWP2YuY29u''@;'; put 'put ''Y2F0KFYuY2FsbCh0aGlzLG8pKTpmfSksdC5kZWZhdWx0cz16KHt9LHQuZGVmYXVsdHMsQyl9KSx0aGlzfSxzLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9eih7fSx0aGlzLmRlZmF1bHRzLHQpLHRoaXN9LG59KCk7dmFyIFc9bmV3IEsoYi5kZWZhdWx0cyk7''@;'; put 'put ''ZnVuY3Rpb24gRihuLHMsdCl7cmV0dXJuIFcucGFyc2UobixzLHQpfUYub3B0aW9ucz1GLnNldE9wdGlvbnM9ZnVuY3Rpb24obil7cmV0dXJuIFcuc2V0T3B0aW9ucyhuKSxrKEYuZGVmYXVsdHM9Vy5kZWZhdWx0cyksRn0sRi5nZXREZWZhdWx0cz12LEYuZGVmYXVsdHM9Yi5kZWZhdWx0cyxG''@;'; put 'put ''LnVzZT1mdW5jdGlvbigpe3JldHVybiBXLnVzZS5hcHBseShXLGFyZ3VtZW50cyksayhGLmRlZmF1bHRzPVcuZGVmYXVsdHMpLEZ9LEYud2Fsa1Rva2Vucz1mdW5jdGlvbihuLHMpe3JldHVybiBXLndhbGtUb2tlbnMobixzKX0sRi5wYXJzZUlubGluZT1XLnBhcnNlSW5saW5lLEYuUGFyc2Vy''@;'; put 'put ''PXEsRi5wYXJzZXI9cS5wYXJzZSxGLlJlbmRlcmVyPWwxLEYuVGV4dFJlbmRlcmVyPXIxLEYuTGV4ZXI9TixGLmxleGVyPU4ubGV4LEYuVG9rZW5pemVyPUosRi5TbHVnZ2VyPXMxLEYuSG9va3M9WDt2YXIgYjE9KEYucGFyc2U9Rikub3B0aW9ucyxTMT1GLnNldE9wdGlvbnMsdjE9Ri51c2Us''@;'; put 'put ''eTE9Ri53YWxrVG9rZW5zLG0xPUYucGFyc2VJbmxpbmUseDE9RixEMT1xLnBhcnNlLGYxPU4ubGV4O2IuSG9va3M9WCxiLkxleGVyPU4sYi5NYXJrZWQ9SyxiLlBhcnNlcj1xLGIuUmVuZGVyZXI9bDEsYi5TbHVnZ2VyPXMxLGIuVGV4dFJlbmRlcmVyPXIxLGIuVG9rZW5pemVyPUosYi5nZXRE''@;'; put 'put ''ZWZhdWx0cz12LGIubGV4ZXI9ZjEsYi5tYXJrZWQ9RixiLm9wdGlvbnM9YjEsYi5wYXJzZT14MSxiLnBhcnNlSW5saW5lPW0xLGIucGFyc2VyPUQxLGIuc2V0T3B0aW9ucz1TMSxiLnVzZT12MSxiLndhbGtUb2tlbnM9eTF9KTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=styles.59dc11947b83143c-css; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''LyohCiAqIENvcHlyaWdodCAoYykgSEFORFNPTkNPREUgc3AuIHogby4gby4KICoKICogSEFORFNPTlRBQkxFIGlzIGEgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgSEFORFNPTkNPREUgc3AuIHogby4gby4sIGEgUG9saXNoIGNvcnBvcmF0aW9uIGJhc2VkIGluCiAqIEdkeW5pYSwgUG9sYW5k''@;'; put 'put ''LCBhdCBBbGVqYSBad3ljaWVzdHdhIDk2LTk4LCByZWdpc3RlcmVkIGJ5IHRoZSBEaXN0cmljdCBDb3VydCBpbiBHZGFuc2sgdW5kZXIgbnVtYmVyCiAqIDUzODY1MSwgRVUgdGF4IElEIG51bWJlcjogUEw1ODYyMjk0MDAyLCBzaGFyZSBjYXBpdGFsOiBQTE4gNjIsODAwLjAwLgogKgogKiBU''@;'; put 'put ''aGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzLCBpbmNsdWRpbmcgaW50ZXJuYXRpb25hbCB0cmVhdGllcywgYW5kIGR1YWwtCiAqIGxpY2Vuc2VkIC0gZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9z''@;'; put 'put ''ZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yCiAqIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC4KICoKICogSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1''@;'; put 'put ''cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZwogKiB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsCiAqIHlvdSBhZ3JlZSB0byBiZSBi''@;'; put 'put ''b3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJoYW5kc29udGFibGUtbm9uLWNvbW1lcmNpYWwtbGljZW5zZS5wZGYiIGZpbGUuCiAqCiAqIFlvdXIgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgaW5j''@;'; put 'put ''bHVkZWQgaW4gYW4gYXBwbGljYWJsZQogKiBsaWNlbnNlIGFncmVlbWVudC4KICoKICogSW4gYW55IGNhc2UsIHlvdSBtdXN0IG5vdCBtYWtlIGFueSBzdWNoIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFzIHRvIGRldmVsb3Agc29mdHdhcmUgd2hpY2ggbWF5IGJlCiAqIGNvbnNpZGVyZWQgY29t''@;'; put 'put ''cGV0aXRpdmUgd2l0aCB0aGlzIHNvZnR3YXJlLgogKgogKiBVTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIEhBTkRTT05DT0RFIFBST1ZJREVTIFRISVMgU09GVFdBUkUgT04gQU4gIkFTIElTIgogKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg''@;'; put 'put ''QU5ZIEtJTkQsIEFORCBJTiBOTyBFVkVOVCBBTkQgVU5ERVIgTk8KICogTEVHQUwgVEhFT1JZLCBTSEFMTCBIQU5EU09OQ09ERSBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIERJUkVDVCwKICogSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENP''@;'; put 'put ''TlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIEFSSVNJTkcgRlJPTQogKiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLgogKgogKiBWZXJzaW9uOiAxMy4xLjAKICogUmVsZWFzZSBkYXRlOiAzMS8wOC8yMDIzIChidWlsdCBhdCAzMS8wOC8yMDIzIDA4''@;'; put 'put ''OjIzOjM5KQogKi8uaGFuZHNvbnRhYmxlIC50YWJsZSB0aCwuaGFuZHNvbnRhYmxlIC50YWJsZSB0ZHtib3JkZXItdG9wOm5vbmV9LmhhbmRzb250YWJsZSB0cntiYWNrZ3JvdW5kOiNmZmZ9LmhhbmRzb250YWJsZSB0ZHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9LmhhbmRzb250YWJsZSAu''@;'; put 'put ''dGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlIC50YWJsZSBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC5oYW5kc29udGFibGUgLnRhYmxlIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxl''@;'; put 'put ''IGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC5oYW5kc29udGFibGUgLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MXB4IHNv''@;'; put 'put ''bGlkICNDQ0NDQ0N9LmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWR7Ym9yZGVyOjA7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlfS5oYW5kc29udGFibGUgLnRhYmxlLWJvcmRlcmVkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlLWJvcmRlcmVkIHRke2JvcmRlci1sZWZ0Om5vbmV9LmhhbmRz''@;'; put 'put ''b250YWJsZSAudGFibGUtYm9yZGVyZWQgdGg6Zmlyc3QtY2hpbGQsLmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNDQ0NDQ0N9LmhhbmRzb250YWJsZSAudGFibGU+dGJvZHk+dHI+dGQsLmhhbmRzb250YWJsZSAudGFi''@;'; put 'put ''bGU+dGJvZHk+dHI+dGgsLmhhbmRzb250YWJsZSAudGFibGU+dGZvb3Q+dHI+dGQsLmhhbmRzb250YWJsZSAudGFibGU+dGZvb3Q+dHI+dGgsLmhhbmRzb250YWJsZSAudGFibGU+dGhlYWQ+dHI+dGQsLmhhbmRzb250YWJsZSAudGFibGU+dGhlYWQ+dHI+dGh7bGluZS1oZWlnaHQ6MjFweDtw''@;'; put 'put ''YWRkaW5nOjB9LmNvbC1sZy0xLmhhbmRzb250YWJsZSwuY29sLWxnLTEwLmhhbmRzb250YWJsZSwuY29sLWxnLTExLmhhbmRzb250YWJsZSwuY29sLWxnLTEyLmhhbmRzb250YWJsZSwuY29sLWxnLTIuaGFuZHNvbnRhYmxlLC5jb2wtbGctMy5oYW5kc29udGFibGUsLmNvbC1sZy00LmhhbmRz''@;'; put 'put ''b250YWJsZSwuY29sLWxnLTUuaGFuZHNvbnRhYmxlLC5jb2wtbGctNi5oYW5kc29udGFibGUsLmNvbC1sZy03LmhhbmRzb250YWJsZSwuY29sLWxnLTguaGFuZHNvbnRhYmxlLC5jb2wtbGctOS5oYW5kc29udGFibGUsLmNvbC1tZC0xLmhhbmRzb250YWJsZSwuY29sLW1kLTEwLmhhbmRzb250''@;'; put 'put ''YWJsZSwuY29sLW1kLTExLmhhbmRzb250YWJsZSwuY29sLW1kLTEyLmhhbmRzb250YWJsZSwuY29sLW1kLTIuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMy5oYW5kc29udGFibGUsLmNvbC1tZC00LmhhbmRzb250YWJsZSwuY29sLW1kLTUuaGFuZHNvbnRhYmxlLC5jb2wtbWQtNi5oYW5kc29udGFi''@;'; put 'put ''bGUsLmNvbC1tZC03LmhhbmRzb250YWJsZSwuY29sLW1kLTguaGFuZHNvbnRhYmxlLC5jb2wtbWQtOS5oYW5kc29udGFibGUgLmNvbC1zbS0xLmhhbmRzb250YWJsZSwuY29sLXNtLTEwLmhhbmRzb250YWJsZSwuY29sLXNtLTExLmhhbmRzb250YWJsZSwuY29sLXNtLTEyLmhhbmRzb250YWJs''@;'; put 'put ''ZSwuY29sLXNtLTIuaGFuZHNvbnRhYmxlLC5jb2wtc20tMy5oYW5kc29udGFibGUsLmNvbC1zbS00LmhhbmRzb250YWJsZSwuY29sLXNtLTUuaGFuZHNvbnRhYmxlLC5jb2wtc20tNi5oYW5kc29udGFibGUsLmNvbC1zbS03LmhhbmRzb250YWJsZSwuY29sLXNtLTguaGFuZHNvbnRhYmxlLC5j''@;'; put 'put ''b2wtc20tOS5oYW5kc29udGFibGUgLmNvbC14cy0xLmhhbmRzb250YWJsZSwuY29sLXhzLTEwLmhhbmRzb250YWJsZSwuY29sLXhzLTExLmhhbmRzb250YWJsZSwuY29sLXhzLTEyLmhhbmRzb250YWJsZSwuY29sLXhzLTIuaGFuZHNvbnRhYmxlLC5jb2wteHMtMy5oYW5kc29udGFibGUsLmNv''@;'; put 'put ''bC14cy00LmhhbmRzb250YWJsZSwuY29sLXhzLTUuaGFuZHNvbnRhYmxlLC5jb2wteHMtNi5oYW5kc29udGFibGUsLmNvbC14cy03LmhhbmRzb250YWJsZSwuY29sLXhzLTguaGFuZHNvbnRhYmxlLC5jb2wteHMtOS5oYW5kc29udGFibGV7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDow''@;'; put 'put ''fS5oYW5kc29udGFibGUgLnRhYmxlLXN0cmlwZWQ+dGJvZHk+dHI6bnRoLW9mLXR5cGUoMm4pe2JhY2tncm91bmQtY29sb3I6I2ZmZn0uaGFuZHNvbnRhYmxle3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmhpZGV7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLnJlbGF0aXZl''@;'; put 'put ''e3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLnd0SGlkZXJ7d2lkdGg6MH0uaGFuZHNvbnRhYmxlIC53dFNwcmVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjA7aGVpZ2h0OmF1dG99LmhhbmRzb250YWJsZSB0YWJsZSwuaGFuZHNvbnRhYmxlIHRib2R5LC5oYW5kc29udGFi''@;'; put 'put ''bGUgdGhlYWQsLmhhbmRzb250YWJsZSB0ZCwuaGFuZHNvbnRhYmxlIHRoLC5oYW5kc29udGFibGUgaW5wdXQsLmhhbmRzb250YWJsZSB0ZXh0YXJlYSwuaGFuZHNvbnRhYmxlIGRpdntib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJv''@;'; put 'put ''eC1zaXppbmc6Y29udGVudC1ib3h9LmhhbmRzb250YWJsZSBpbnB1dCwuaGFuZHNvbnRhYmxlIHRleHRhcmVhe21pbi1oZWlnaHQ6aW5pdGlhbH0uaGFuZHNvbnRhYmxlIHRhYmxlLmh0Q29yZXtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXNwYWNpbmc6MDttYXJnaW46MDtib3Jk''@;'; put 'put ''ZXItd2lkdGg6MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MDtvdXRsaW5lLXdpZHRoOjA7Y3Vyc29yOmRlZmF1bHQ7bWF4LXdpZHRoOm5vbmU7bWF4LWhlaWdodDpub25lfS5oYW5kc29udGFibGUgY29sLC5oYW5kc29udGFibGUgY29sLnJvd0hlYWRlcnt3aWR0aDo1MHB4fS5oYW5kc29u''@;'; put 'put ''dGFibGUgdGgsLmhhbmRzb250YWJsZSB0ZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYztoZWlnaHQ6MjJweDtlbXB0eS1jZWxsczpzaG93O2xpbmUtaGVpZ2h0OjIx''@;'; put 'put ''cHg7cGFkZGluZzowIDRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246dG9wO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lLXdpZHRoOjA7d2hpdGUtc3BhY2U6cHJlLXdyYXB9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aCxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRke2Jv''@;'; put 'put ''cmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgdGg6bGFzdC1jaGlsZHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfVtkaXI9cnRsXS5oYW5kc29u''@;'; put 'put ''dGFibGUgdGg6bGFzdC1jaGlsZHtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRoOmZpcnN0LWNoaWxkLC5oYW5kc29udGFibGUgdGg6bnRoLWNoaWxkKDIpLC5oYW5kc29udGFibGUgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItbGVm''@;'; put 'put ''dDoxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmZpcnN0LWNoaWxkLFtkaXI9cnRsXS5oYW5kc29udGFibGUgdGg6bnRoLWNoaWxkKDIpLFtkaXI9cnRsXS5oYW5kc29udGFibGUgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuaHRfY2xvbmVfdG9wIHRoOm50aC1jaGlsZCgyKXtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odF9jbG9uZV90b3AgdGg6bnRoLWNoaWxkKDIpe2JvcmRlci1yaWdodC13aWR0aDowO2Jv''@;'; put 'put ''cmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUuaHRSb3dIZWFkZXJzIHRoZWFkIHRyIHRoOm50aC1jaGlsZCgyKXtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmh0Um93SGVhZGVycyB0aGVhZCB0ciB0aDpudGgtY2hpbGQoMil7''@;'; put 'put ''Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjfS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVt''@;'; put 'put ''cHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZSB0Ym9keSB0ciB0aCwuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxke2JvcmRlci1yaWdo''@;'; put 'put ''dC13aWR0aDowO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfVtkaXI9cnRsXS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZSB0Ym9keSB0ciB0aCxbZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3Jk''@;'; put 'put ''ZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRl''@;'; put 'put ''clRvcCk6bm90KC5pbm5lckJvcmRlckJvdHRvbSkgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aCwuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pfi5oYW5kc29udGFibGUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aCwuaHRfbWFzdGVyOm5vdCguaW5u''@;'; put 'put ''ZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRyLmxhc3RDaGlsZCB0aCwuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pfi5oYW5kc29udGFibGUgdGhlYWQgdHIubGFzdENoaWxkIHRoe2JvcmRlci1ib3R0b20t''@;'; put 'put ''d2lkdGg6MH0uaGFuZHNvbnRhYmxlIHRoe2JhY2tncm91bmQtY29sb3I6I2YwZjBmMDtjb2xvcjojMjIyO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OjQwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmhhbmRzb250YWJsZSB0aGVhZCB0aHtwYWRkaW5nOjB9LmhhbmRzb250YWJsZSB0aC5h''@;'; put 'put ''Y3RpdmV7YmFja2dyb3VuZC1jb2xvcjojY2NjfS5oYW5kc29udGFibGUgdGhlYWQgdGggLnJlbGF0aXZle3BhZGRpbmc6MnB4IDRweH0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjEuMX0uaGFuZHNvbnRhYmxlIC53dEJvcmRl''@;'; put 'put ''cntwb3NpdGlvbjphYnNvbHV0ZTtmb250LXNpemU6MH0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5oaWRkZW57ZGlzcGxheTpub25lIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5jdXJyZW50e3otaW5kZXg6MTB9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuYXJlYXt6LWluZGV4''@;'; put 'put ''Ojh9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuZmlsbHt6LWluZGV4OjZ9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY29ybmVye2ZvbnQtc2l6ZTowO2N1cnNvcjpjcm9zc2hhaXJ9Lmh0X2Nsb25lX21hc3Rlcnt6LWluZGV4OjEwMH0uaHRfY2xvbmVfaW5saW5lX3N0YXJ0e3otaW5kZXg6MTIw''@;'; put 'put ''fS5odF9jbG9uZV9ib3R0b217ei1pbmRleDoxMzB9Lmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye3otaW5kZXg6MTUwfS5odF9jbG9uZV90b3B7ei1pbmRleDoxNjB9Lmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVye3otaW5kZXg6MTgwfS5oYW5kc29udGFibGUg''@;'; put 'put ''Y29sLmhpZGRlbnt3aWR0aDowIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiwuaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiB0ZCwuaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiB0aHtkaXNwbGF5Om5vbmV9Lmh0X21hc3RlciwuaHRfY2xvbmVfaW5saW5lX3N0YXJ0LC5odF9jbG9uZV90''@;'; put 'put ''b3AsLmh0X2Nsb25lX2JvdHRvbXtvdmVyZmxvdzpoaWRkZW59Lmh0X21hc3RlciAud3RIb2xkZXJ7b3ZlcmZsb3c6YXV0b30uaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGhlYWQsLmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRyIHRoLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2lubGluZV9z''@;'; put 'put ''dGFydCB0aGVhZHt2aXNpYmlsaXR5OmhpZGRlbn0uaHRfY2xvbmVfdG9wIC53dEhvbGRlciwuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC53dEhvbGRlciwuaHRfY2xvbmVfYm90dG9tIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZXt0b3VjaC1hY3Rpb246bWFuaXB1bGF0''@;'; put 'put ''aW9uO2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxPeHlnZW4sVWJ1bnR1LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiMzNzM3Mzd9LmhhbmRzb250''@;'; put 'put ''YWJsZSBhe2NvbG9yOiMxMDRhY2N9LmhhbmRzb250YWJsZS5odEF1dG9TaXple3Zpc2liaWxpdHk6aGlkZGVuO2xlZnQ6LTk5MDAwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOi05OTAwMHB4fS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlke2JhY2tncm91bmQtY29sb3I6I2ZmNGM0MiFpbXBv''@;'; put 'put ''cnRhbnR9LmhhbmRzb250YWJsZSB0ZC5odE5vV3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mb3tmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1''@;'; put 'put ''ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzczNzM3O3BhZGRpbmc6NXB4IDAgM3B4O3RleHQtYWxpZ246bGVmdH0uaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIGF7Y29sb3I6IzEwNGFjYztmb250LXNpemU6MTBweH0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5tYW51YWxDb2x1bW5SZXNpemVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2N1cnNvcjpjb2wtcmVzaXplO3otaW5kZXg6MjEwO3dpZHRoOjVweDtoZWlnaHQ6MjVweH0uaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtjdXJzb3I6''@;'; put 'put ''cm93LXJlc2l6ZTt6LWluZGV4OjIxMDtoZWlnaHQ6NXB4O3dpZHRoOjUwcHh9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplcjpob3ZlciwuaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyLmFjdGl2ZSwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyOmhvdmVy''@;'; put 'put ''LC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzM0YTlkYn0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGV7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6dW5zZXQ7dG9wOjA7YmFja2dyb3VuZC1jb2xvcjojMzRhOWRi''@;'; put 'put ''O2Rpc3BsYXk6bm9uZTt3aWR0aDowO2JvcmRlci1yaWdodDoxcHggZGFzaGVkICM3Nzc7Ym9yZGVyLWxlZnQ6bm9uZTttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJHdWlkZXtsZWZ0OnVuc2V0O2Jv''@;'; put 'put ''cmRlci1sZWZ0OjFweCBkYXNoZWQgIzc3Nztib3JkZXItcmlnaHQ6bm9uZTttYXJnaW4tcmlnaHQ6NXB4O21hcmdpbi1sZWZ0OnVuc2V0fS5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjojMzRhOWRiO2Rpc3BsYXk6bm9uZTtoZWlnaHQ6MDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgIzc3NzttYXJnaW4tdG9wOjVweH0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGUuYWN0aXZlLC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZS5hY3Rp''@;'; put 'put ''dmV7ZGlzcGxheTpibG9jazt6LWluZGV4OjIwOX0uaGFuZHNvbnRhYmxlIC5jb2x1bW5Tb3J0aW5ne3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbjpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5o''@;'; put 'put ''YW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpiZWZvcmV7dG9wOjUwJTttYXJnaW4tdG9wOi02cHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTlweDtsZWZ0OnVuc2V0O2NvbnRlbnQ6IiI7aGVpZ2h0OjEw''@;'; put 'put ''cHg7d2lkdGg6NXB4O2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmJlZm9yZXtwYWRkaW5nLXJpZ2h0''@;'; put 'put ''OjhweDtwYWRkaW5nLWxlZnQ6MDtsZWZ0Oi05cHg7cmlnaHQ6dW5zZXQ7YmFja2dyb3VuZC1wb3NpdGlvbi14OmxlZnR9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLmFzY2VuZGluZzpiZWZvcmV7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7''@;'; put 'put ''YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFvQ0FNQUFBREo3eXJwQUFBQUtsQk1WRVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUtFODZJQUFBQURYUlNUbE1BQkJFbVJHcHJsSlc3MmU3N3RUa1RLd0FBQUZOSlJF''@;'; put 'put ''RlVlQUh0emprU2dDQVVCTkhQZ3NveTk3K3VsR1hScUpFNUwreGt4b1l0MlVkc0xiNWJxRklOeithTHV1TG41ckl1MlJrTzNmWnBXRU5pbU5naXc2aUJZUlRQTUxKakdGeFFaMWh4eGIveEJJMXFDOGszOUNkS0FBQUFBRWxGVGtTdVFtQ0MpfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIu''@;'; put 'put ''Y29sdW1uU29ydGluZy5kZXNjZW5kaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQW9DQU1BQUFESjd5cnBBQUFBS2xCTVZFVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFBQUFBQUFBQUFBQUFBQUFBQUFBS0U4NklBQUFBRFhSU1RsTUFCQkVtUkdwcmxKVzcyZTc3dFRrVEt3QUFBRkpKUkVGVWVBSHR6amtTZ0NBUVJORm1RWVVaN245ZEtVdnJ1MFRtdlBBbjNicjBRZmdkWjV4eDZ4K3JRbjIzR3FUWW5xMUZEY251elpJTzJXbWVkVnFJUlZ4Z0dLRXlqTmdZUmpL''@;'; put 'put ''R2taMWhGSVozSTcwTHlNMFZ0VThBQUFBQVNVVk9SSzVDWUlJPSl9Lmh0R2hvc3RUYWJsZSAuaHRDb3JlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxlZCk6YWZ0ZXJ7Y29udGVudDoiKiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmU7cGFkZGluZy1yaWdodDoyMHB4fS5oYW5kc29udGFibGUgdGQuYXJlYSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMiwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMywuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNCwuaGFuZHNvbnRhYmxlIHRkLmFyZWEt''@;'; put 'put ''NSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNiwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtN3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWE6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS0xOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmUsLmhhbmRz''@;'; put 'put ''b250YWJsZSB0ZC5hcmVhLTM6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTY6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO2luc2V0OjA7Ym90dG9tOi0xMDAlIFwJO2JhY2tncm91bmQ6IzAwNWVmZn1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKXsuaGFuZHNvbnRhYmxlIHRkLmFyZWE6YmVmb3JlLC5oYW5kc29u''@;'; put 'put ''dGFibGUgdGQuYXJlYS0xOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5h''@;'; put 'put ''cmVhLTY6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtib3R0b206LTEwMCV9fS5oYW5kc29udGFibGUgdGQuYXJlYTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMTpiZWZvcmV7b3BhY2l0eTouMn0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpi''@;'; put 'put ''ZWZvcmV7b3BhY2l0eTouMjd9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZXtvcGFjaXR5Oi40MX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmV7b3BhY2l0eTouNDd9LmhhbmRzb250YWJsZSB0ZC5h''@;'; put 'put ''cmVhLTY6YmVmb3Jle29wYWNpdHk6LjU0fS5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtvcGFjaXR5Oi41OH0uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQsLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2RjZGNk''@;'; put 'put ''Y30uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHR7YmFja2dyb3VuZC1jb2xvcjojOGViMGU3O2NvbG9yOiMwMDB9LmhhbmRzb250YWJsZUlucHV0e2JvcmRlcjpub25lO291dGxpbmUt''@;'; put 'put ''d2lkdGg6MDttYXJnaW46MDtwYWRkaW5nOjFweCA1cHggMDtmb250LWZhbWlseTppbmhlcml0O2xpbmUtaGVpZ2h0OjIxcHg7Zm9udC1zaXplOmluaGVyaXQ7Ym94LXNoYWRvdzowIDAgMCAycHggIzUyOTJmNyBpbnNldDtyZXNpemU6bm9uZTtkaXNwbGF5OmJsb2NrO2NvbG9yOiMwMDA7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS5oYW5kc29udGFibGVJbnB1dEhvbGRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lmh0U2VsZWN0RWRpdG9yey13ZWJraXQtYXBwZWFyYW5jZTpt''@;'; put 'put ''ZW51bGlzdC1idXR0b24haW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmF1dG99Lmh0U2VsZWN0RWRpdG9yOmZvY3Vze291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxlIC5odERpbW1lZHtjb2xvcjojNzc3fS5oYW5kc29udGFibGUgLmh0U3VibWVudXtwb3NpdGlvbjpyZWxhdGl2''@;'; put 'put ''ZX0uaGFuZHNvbnRhYmxlIC5odFN1Ym1lbnUgOmFmdGVye2NvbnRlbnQ6IlwyNWI2Ijtjb2xvcjojNzc3O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDtmb250LXNpemU6OXB4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0U3VibWVudSA6YWZ0ZXJ7Y29udGVudDoiIn1bZGlyPXJ0bF0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIC5odFN1Ym1lbnUgOmJlZm9yZXtjb250ZW50OiJcMjVjMCI7Y29sb3I6Izc3Nztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjVweDtmb250LXNpemU6OXB4fS5oYW5kc29udGFibGUgLmh0TGVmdHt0ZXh0LWFsaWduOmxlZnR9LmhhbmRzb250YWJsZSAuaHRDZW50ZXJ7dGV4''@;'; put 'put ''dC1hbGlnbjpjZW50ZXJ9LmhhbmRzb250YWJsZSAuaHRSaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5oYW5kc29udGFibGUgLmh0SnVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnl9LmhhbmRzb250YWJsZSAuaHRUb3B7dmVydGljYWwtYWxpZ246dG9wfS5oYW5kc29udGFibGUgLmh0TWlkZGxle3Zl''@;'; put 'put ''cnRpY2FsLWFsaWduOm1pZGRsZX0uaGFuZHNvbnRhYmxlIC5odEJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmhhbmRzb250YWJsZSAuaHRQbGFjZWhvbGRlcntjb2xvcjojOTk5fS5oYW5kc29udGFibGUubGlzdGJveHttYXJnaW46MH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggLmh0X21h''@;'; put 'put ''c3RlciB0YWJsZXtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JhY2tncm91bmQ6d2hpdGV9LmhhbmRzb250YWJsZS5saXN0Ym94IHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0cjpmaXJzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHI6''@;'; put 'put ''bGFzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZS5saXN0Ym94IHRke2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5saXN0Ym94IHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0ZHt3''@;'; put 'put ''aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGQuaHREaW1tZWR7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6aW5oZXJpdDtmb250LXN0eWxlOmluaGVyaXR9LmhhbmRzb250YWJsZS5saXN0Ym94IC53dEJvcmRlcnt2aXNpYmlsaXR5''@;'; put 'put ''OmhpZGRlbn0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHIgdGQuY3VycmVudCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHI6aG92ZXIgdGR7YmFja2dyb3VuZDojZWVlfS5odF9lZGl0b3JfaGlkZGVue3otaW5kZXg6LTF9Lmh0X2VkaXRvcl92aXNpYmxle3otaW5kZXg6MjAwfS5oYW5kc29udGFi''@;'; put 'put ''bGUgdGQuaHRTZWFyY2hSZXN1bHR7YmFja2dyb3VuZDojZmNlZGQ5O2NvbG9yOiM1ODM3MDd9LmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3J7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtsZWZ0OnVuc2V0O3JpZ2h0OjVweDti''@;'; put 'put ''b3JkZXI6MXB4IHNvbGlkICNBNkE2QTY7bGluZS1oZWlnaHQ6OHB4O2NvbG9yOiMyMjI7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxMHB4O3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNoYWRvdzowIDAgMCA2cHggI2VlZTtiYWNrZ3JvdW5kOiNlZWU7''@;'; put 'put ''dGV4dC1hbGlnbjpjZW50ZXJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3J7cmlnaHQ6dW5zZXQ7bGVmdDo1cHh9LmhhbmRzb250YWJsZS5tb2JpbGUsLmhhbmRzb250YWJsZS5tb2JpbGUgLnd0SG9sZGVyey13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lOy13''@;'; put 'put ''ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5oYW5kc29udGFibGUubW9iaWxlIC5oYW5kc29udGFibGVJbnB1dDpmb2N1c3tib3gt''@;'; put 'put ''c2hhZG93OjAgMCAwIDJweCAjNTI5MmY3IGluc2V0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5oYW5kc29udGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZSwuaGFuZHNvbnRhYmxlIC50b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSwuaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5k''@;'; put 'put ''bGUsLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWF7bGVmdDotMTAwMDBweDtyaWdodDp1bnNldDt0b3A6LTEwMDAwcHg7ei1pbmRleDo5OTk5fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZSxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC50b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5kbGUsW2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWF7cmlnaHQ6LTEwMDAwcHg7bGVmdDp1bnNldH0uaGFuZHNvbnRh''@;'; put 'put ''YmxlLmhpZGUtdHdlZW57YW5pbWF0aW9uOm9wYWNpdHktaGlkZSAuM3M7YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkczstd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHN9LmhhbmRzb250YWJsZS5zaG93LXR3ZWVue2FuaW1hdGlvbjpvcGFjaXR5LXNob3cgLjNzO2FuaW1h''@;'; put 'put ''dGlvbi1maWxsLW1vZGU6Zm9yd2FyZHM7LXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfS8qIQogKiBQaWthZGF5CiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZGJ1c2hlbGwuY29tLwogKi8ucGlrYS1z''@;'; put 'put ''aW5nbGV7ei1pbmRleDo5OTk5O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6IzMzMztiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6I2JiYjtmb250LWZhbWlseTpIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJp''@;'; put 'put ''YWwsc2Fucy1zZXJpZn0ucGlrYS1zaW5nbGU6YmVmb3JlLC5waWthLXNpbmdsZTphZnRlcntjb250ZW50OiIgIjtkaXNwbGF5OnRhYmxlfS5waWthLXNpbmdsZTphZnRlcntjbGVhcjpib3RofS5waWthLXNpbmdsZS5pcy1oaWRkZW57ZGlzcGxheTpub25lfS5waWthLXNpbmdsZS5pcy1ib3Vu''@;'; put 'put ''ZHtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2hhZG93OjAgNXB4IDE1cHggLTVweCAjMDAwMDAwODB9LnBpa2EtbGVuZGFye2Zsb2F0OmxlZnQ7d2lkdGg6MjQwcHg7bWFyZ2luOjhweH0ucGlrYS10aXRsZXtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0ucGlrYS1sYWJlbHtk''@;'; put 'put ''aXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4Ojk5OTk7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbjowO3BhZGRpbmc6NXB4IDNweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnBp''@;'; put 'put ''a2EtdGl0bGUgc2VsZWN0e2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5ODttYXJnaW46MDtsZWZ0OjA7dG9wOjVweDtvcGFjaXR5OjB9LnBpa2EtcHJldiwucGlrYS1uZXh0e2Rpc3BsYXk6YmxvY2s7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7''@;'; put 'put ''b3V0bGluZTpub25lO2JvcmRlcjowO3BhZGRpbmc6MDt3aWR0aDoyMHB4O2hlaWdodDozMHB4O3RleHQtaW5kZW50OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNl''@;'; put 'put ''bnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjc1JSA3NSU7b3BhY2l0eTouNX0ucGlrYS1wcmV2OmhvdmVyLC5waWthLW5leHQ6aG92ZXJ7b3BhY2l0eToxfS5waWthLXByZXYsLmlzLXJ0bCAucGlrYS1uZXh0e2Zsb2F0OmxlZnQ7YmFja2dyb3VuZC1p''@;'; put 'put ''bWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFlQ0FZQUFBQXNFajVyQUFBQVVrbEVRVlI0MnUzVk1Rb0FJQkFEUWY4UGdqK09EOWhHMkN0T05KQjJ5bVFrS2UwSGJ3QVAweHVjRGlRV0FSSVRJREVCRW5NZ01ROFM4K0FxQklsNmtL''@;'; put 'put ''Z0hpWHFRcUFlSmVwQm8vejM4Si9VMHVBSGxhQmtCbDlJNEd3QUFBQUJKUlU1RXJrSmdnZz09KX0ucGlrYS1uZXh0LC5pcy1ydGwgLnBpa2EtcHJldntmbG9hdDpyaWdodDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FB''@;'; put 'put ''QUJRQUFBQWVDQVlBQUFBc0VqNXJBQUFBVTBsRVFWUjQydTNWT3dvQU1BZ0UwZHdmQW5OalUyNmJZa0JDRkd3ZmlMOVZWV29PK0JKNEdmM2d0c0VLS29GQk5UQ29DQVlWd2FBaUdOUUdNVUhNa2pHYmdqazJtSU9OdVhvMG5DOFhuQ2YxSlhnQXJWSVpBUWg1VEtZQUFBQUFTVVZPUks1Q1lJST0p''@;'; put 'put ''fS5waWthLXByZXYuaXMtZGlzYWJsZWQsLnBpa2EtbmV4dC5pcy1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi4yfS5waWthLXNlbGVjdHtkaXNwbGF5OmlubGluZS1ibG9ja30ucGlrYS10YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3Bh''@;'; put 'put ''Y2luZzowO2JvcmRlcjowfS5waWthLXRhYmxlIHRoLC5waWthLXRhYmxlIHRke3dpZHRoOjE0LjI4NTcxNDI4NTclO3BhZGRpbmc6MH0ucGlrYS10YWJsZSB0aHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjI1cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246Y2Vu''@;'; put 'put ''dGVyfS5waWthLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7Ym9yZGVyOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTtwYWRkaW5nOjVweDtjb2xvcjojNjY2O2ZvbnQt''@;'; put 'put ''c2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE1cHg7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kOiNmNWY1ZjU7aGVpZ2h0OmluaXRpYWx9LnBpa2Etd2Vla3tmb250LXNpemU6MTFweDtjb2xvcjojOTk5fS5pcy10b2RheSAucGlrYS1idXR0b257Y29sb3I6IzNhZjtmb250LXdlaWdodDo3MDB9''@;'; put 'put ''LmlzLXNlbGVjdGVkIC5waWthLWJ1dHRvbiwuaGFzLWV2ZW50IC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OjcwMDtiYWNrZ3JvdW5kOiMzM2FhZmY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzE3OGZlNTtib3JkZXItcmFkaXVzOjNweH0uaGFzLWV2ZW50IC5waWth''@;'; put 'put ''LWJ1dHRvbntiYWNrZ3JvdW5kOiMwMDVkYTk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzAwNzZjOX0uaXMtZGlzYWJsZWQgLnBpa2EtYnV0dG9uLC5pcy1pbnJhbmdlIC5waWthLWJ1dHRvbntiYWNrZ3JvdW5kOiNENUU5Rjd9LmlzLXN0YXJ0cmFuZ2UgLnBpa2EtYnV0dG9ue2NvbG9y''@;'; put 'put ''OiNmZmY7YmFja2dyb3VuZDojNkNCMzFEO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZW5kcmFuZ2UgLnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojMzNhYWZmO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZGlzYWJsZWQgLnBp''@;'; put 'put ''a2EtYnV0dG9ue3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6Izk5OTtvcGFjaXR5Oi4zfS5pcy1vdXRzaWRlLWN1cnJlbnQtbW9udGggLnBpa2EtYnV0dG9ue2NvbG9yOiM5OTk7b3BhY2l0eTouM30uaXMtc2VsZWN0aW9uLWRpc2FibGVke3BvaW50ZXItZXZlbnRz''@;'; put 'put ''Om5vbmU7Y3Vyc29yOmRlZmF1bHR9LnBpa2EtYnV0dG9uOmhvdmVyLC5waWthLXJvdy5waWNrLXdob2xlLXdlZWs6aG92ZXIgLnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZmY4MDAwO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0ucGlrYS10YWJsZSBhYmJy''@;'; put 'put ''e2JvcmRlci1ib3R0b206bm9uZTtjdXJzb3I6aGVscH0uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiNlZWU7Y3Vyc29yOmRlZmF1bHQ7d2lkdGg6MTZweDt0ZXh0LWFsaWduOmNlbnRlcn1bZGlyPXJ0bF0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2Zsb2F0OmxlZnR9LmhhbmRzb250YWJsZSB0ZCAuaHRBdXRvY29tcGxldGVBcnJvdzpob3Zlcntjb2xvcjojNzc3fS5oYW5kc29udGFibGUgdGQuYXJlYSAuaHRBdXRvY29tcGxldGVBcnJvd3tjb2xvcjojZDNkM2QzfS5oYW5kc29udGFibGUg''@;'; put 'put ''Lmh0Q2hlY2tib3hSZW5kZXJlcklucHV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0Lm5vVmFsdWV7b3BhY2l0eTouNX0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJMYWJlbHtmb250LXNpemU6aW5oZXJpdDt2ZXJ0''@;'; put 'put ''aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVyTGFiZWwuZnVsbFdpZHRoe3dpZHRoOjEwMCV9LmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbHtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlIC5odENvbW1lbnRDZWxsOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtsZWZ0OnVuc2V0O2JvcmRlci1sZWZ0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOjZweCBzb2xpZCBibGFja31b''@;'; put 'put ''ZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odENvbW1lbnRDZWxsOmFmdGVye2xlZnQ6MDtyaWdodDp1bnNldDtib3JkZXItcmlnaHQ6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0Om5vbmV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudHN7ZGlzcGxheTpub25lO3otaW5k''@;'; put 'put ''ZXg6MTA1OTtwb3NpdGlvbjphYnNvbHV0ZX0uaHRDb21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWF7Ym94LXNoYWRvdzojMDAwMDAwMWUgMCAxcHggM3B4LCMwMDAwMDAzZCAwIDFweCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OjNw''@;'; put 'put ''eCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjt3aWR0aDoyMTVweDtoZWlnaHQ6OTBweDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweDtvdXRsaW5lOjBweCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9W2Rpcj1ydGxdLmh0Q29t''@;'; put 'put ''bWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhe2JvcmRlci1yaWdodDozcHggc29saWQgI2NjYztib3JkZXItbGVmdDpub25lfS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRUZXh0QXJlYTpmb2N1c3tib3gtc2hhZG93OiMwMDAwMDAxZSAwIDFweCAzcHgsIzAwMDAwMDNk''@;'; put 'put ''IDAgMXB4IDJweCxpbnNldCAwIDAgMCAxcHggIzUyOTJmNztib3JkZXItbGVmdDozcHggc29saWQgIzUyOTJmNztib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0uaHRDb21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWE6Zm9jdXN7Ym9yZGVyLXJpZ2h0OjNweCBzb2xpZCAjNTI5''@;'; put 'put ''MmY3O2JvcmRlci1sZWZ0Om5vbmV9LyohCiAqIEhhbmRzb250YWJsZSBDb250ZXh0TWVudQogKi8uaHRDb250ZXh0TWVudTpub3QoLmh0R2hvc3RUYWJsZSl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTA2MH0uaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfdG9wLC5o''@;'; put 'put ''dENvbnRleHRNZW51IC5odF9jbG9uZV9ib3R0b20sLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIsLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29y''@;'; put 'put ''bmVye2Rpc3BsYXk6bm9uZX0uaHRDb250ZXh0TWVudSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZXtib3JkZXItY29sb3I6I2NjYztib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS13aWR0aDoycHg7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4O2JvcmRl''@;'; put 'put ''ci1yaWdodC13aWR0aDoycHh9W2Rpcj1ydGxdLmh0Q29udGV4dE1lbnUgLmh0X21hc3RlciB0YWJsZS5odENvcmV7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItbGVmdC13aWR0aDoycHh9Lmh0Q29udGV4dE1lbnUgLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5odENvbnRleHRN''@;'; put 'put ''ZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odENvbnRleHRNZW51IHRhYmxl''@;'; put 'put ''IHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3Jk''@;'; put 'put ''ZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuY3VycmVudCwuaHRDb250ZXh0TWVu''@;'; put 'put ''dSB0YWJsZSB0Ym9keSB0ciB0ZC56ZXJvY2xpcGJvYXJkLWlzLWhvdmVye2JhY2tncm91bmQ6I2YzZjNmM30uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MDtjdXJzb3I6ZGVm''@;'; put 'put ''YXVsdH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVke2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVs''@;'; put 'put ''dH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ci5odEhpZGRlbntkaXNwbGF5Om5vbmV9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6NnB4fVtkaXI9cnRsXS5odENvbnRleHRNZW51IHRhYmxl''@;'; put 'put ''IHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1yaWdodDoxMHB4O21hcmdpbi1sZWZ0OjZweH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHg7cmlnaHQ6MH1b''@;'; put 'put ''ZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHtyaWdodDo0cHg7bGVmdDowfS5odENvbnRleHRNZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn10ZXh0YXJlYS5IYW5kc29udGFibGVDb3B5UGFzdGV7cG9zaXRp''@;'; put 'put ''b246Zml4ZWQhaW1wb3J0YW50O3RvcDowIWltcG9ydGFudDtyaWdodDoxMDAlIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW47b3BhY2l0eTowO291dGxpbmU6MCBub25lIWltcG9ydGFudH0vKiEKICogSGFuZHNvbnRhYmxlIERyb3Bkb3duTWVudQogKi8uaGFuZHNvbnRhYmxlIC5jaGFuZ2VU''@;'; put 'put ''eXBle2JhY2tncm91bmQ6I2VlZTtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNiYmI7Y29sb3I6I2JiYjtmb250LXNpemU6OXB4O2xpbmUtaGVpZ2h0OjlweDtwYWRkaW5nOjJweDttYXJnaW46M3B4IDFweCAwIDVweDtmbG9hdDpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5jaGFuZ2VUeXBle2Zsb2F0OmxlZnR9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpiZWZvcmV7Y29udGVudDoiXDI1YmMgICJ9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpob3Zlcntib3JkZXI6MXB4IHNvbGlkICM3Nzc7Y29sb3I6Izc3NztjdXJzb3I6cG9pbnRlcn0uaHREcm9w''@;'; put 'put ''ZG93bk1lbnU6bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNjB9Lmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3AsLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9ib3R0b20sLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9pbmxp''@;'; put 'put ''bmVfc3RhcnQsLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye2Rpc3BsYXk6bm9uZX0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1jb2xv''@;'; put 'put ''cjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjJweH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1yaWdo''@;'; put 'put ''dC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5odERyb3Bkb3duTWVudSAud3RCb3JkZXJ7dmlzaWJpbGl0eTpoaWRkZW59Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJv''@;'; put 'put ''dHRvbS13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjB9W2Rpcj1ydGxdLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0''@;'; put 'put ''RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmN1cnJlbnQsLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLnplcm9jbGlwYm9hcmQtaXMtaG92ZXJ7YmFja2dyb3VuZDojZTllOWU5fS5odERyb3Bk''@;'; put 'put ''b3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MDtjdXJzb3I6ZGVmYXVsdH0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZHtjb2xvcjojOTk5fS5odERyb3Bk''@;'; put 'put ''b3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5odERyb3Bkb3duTWVudTpub3QoLmh0R2hvc3RUYWJsZSkgdGFibGUgdGJvZHkgdHIuaHRIaWRkZW57ZGlzcGxheTpub25lfS5odERyb3Bk''@;'; put 'put ''b3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tbGVmdDoxMHB4O21hcmdpbi1yaWdodDoxMHB4fVtkaXI9cnRsXS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tcmlnaHQ6MTBweDttYXJnaW4tbGVmdDox''@;'; put 'put ''MHB4fS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHg7cmlnaHQ6MH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0''@;'; put 'put ''ZWR7cmlnaHQ6NHB4O2xlZnQ6MH0uaHREcm9wZG93bk1lbnUgLmh0X21hc3RlciAud3RIb2xkZXJ7b3ZlcmZsb3c6aGlkZGVufS8qIQogKiBIYW5kc29udGFibGUgRmlsdGVycwogKi8uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnU6bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNzB9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV90b3AsLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV9ib3R0b20sLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmh0RmlsdGVy''@;'; put 'put ''c0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye2Rpc3BsYXk6bm9uZX0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUuaHRDb3Jle2Jv''@;'; put 'put ''cmRlcjoxcHggc29saWQgI2JiYjtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItcmlnaHQtd2lkdGg6MnB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAud3RCb3JkZXJ7dmlzaWJpbGl0eTpoaWRkZW59Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRke2Jh''@;'; put 'put ''Y2tncm91bmQ6d2hpdGU7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpm''@;'; put 'put ''aXJzdC1jaGlsZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjB9W2Rpcj1ydGxdLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci1s''@;'; put 'put ''ZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmN1cnJl''@;'; put 'put ''bnQsLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLnplcm9jbGlwYm9hcmQtaXMtaG92ZXJ7YmFja2dyb3VuZDojZTllOWU5fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAj''@;'; put 'put ''ZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZHtjb2xvcjojOTk5fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6I2Zm''@;'; put 'put ''Zjtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tbGVmdDoxMHB4O21hcmdpbi1yaWdodDoxMHB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBk''@;'; put 'put ''aXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHh9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odE1lbnVGaWx0ZXJpbmd7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bToxcHggZG90dGVkICNjY2M7aGVpZ2h0OjEzNXB4O292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUgdGQuaHRDdXN0b21NZW51UmVuZGVyZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2N1cnNvcjphdXRvfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVM''@;'; put 'put ''YWJlbHtmb250LXNpemU6Ljc1ZW19LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUFjdGlvbkJhcnt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nLXRvcDoxMHB4O3BhZGRpbmctYm90dG9tOjNweH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uLmJvcmRlcntib3JkZXIt''@;'; put 'put ''Ym90dG9tOjFweCBkb3R0ZWQgI2NjYyFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiAuaHRVSUlucHV0e3BhZGRpbmc6MCAwIDVweH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51VmFsdWV7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2MhaW1w''@;'; put 'put ''b3J0YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVWYWx1ZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoe3BhZGRpbmc6MH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uIC5odFVJSW5wdXQgaW5wdXQsLmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVl''@;'; put 'put ''IC5odFVJTXVsdGlwbGVTZWxlY3RTZWFyY2ggaW5wdXR7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6Ljc1ZW07cGFkZGluZzo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lmh0VUlNdWx0aXBsZVNlbGVjdCAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdy15''@;'; put 'put ''OnNjcm9sbH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNBY3RpdmUgLmNoYW5nZVR5cGV7Ym9yZGVyOjFweCBzb2xpZCAjNTA5MjcyO2NvbG9yOiMxODgwNGU7YmFja2dyb3VuZC1jb2xvcjojZDJlMGQ5fS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7bWFyZ2luLWxlZnQ6MDttYXJnaW4t''@;'; put 'put ''cmlnaHQ6MTBweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0QWxse21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsLC5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRz''@;'; put 'put ''b250YWJsZSAuaHRVSUNsZWFyQWxsIGEsLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbCBhe2ZvbnQtc2l6ZTouNzVlbX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0aW9uQ29udHJvbHN7dGV4dC1hbGlnbjpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0aW9uQ29u''@;'; put 'put ''dHJvbHN7dGV4dC1hbGlnbjpsZWZ0fS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0e21hcmdpbjowIDVweCAwIDA7dmVydGljYWwtYWxpZ246bWlkZGxlO2hlaWdodDoxZW19W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXR7bWFyZ2lu''@;'; put 'put ''LWxlZnQ6NXB4O21hcmdpbi1yaWdodDowfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dHtwYWRkaW5nOjNweCAwIDdweDtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQgaW5wdXR7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBz''@;'; put 'put ''b2xpZCAjZDJkMWQxfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dCBpbnB1dDpmb2N1c3tvdXRsaW5lOjB9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0SWNvbntwb3NpdGlvbjphYnNvbHV0ZX0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbiBpbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Y29sb3I6IzAwMDtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTouNzVlbTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OjE5''@;'; put 'put ''cHg7bWluLXdpZHRoOjY0cHh9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b24gaW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNiOWI5Yjl9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PS3ttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoxMHB4fVtkaXI9cnRs''@;'; put 'put ''XS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0t7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTBweH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9LIGlucHV0e2JhY2tncm91bmQtY29sb3I6IzBmOWQ1ODtib3JkZXItY29sb3I6IzE4ODA0ZTtjb2xv''@;'; put 'put ''cjojZmZmfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0sgaW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMxYTZmNDZ9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdHtjdXJzb3I6cG9pbnRlcjttYXJnaW4tYm90dG9tOjdweDtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5odFVJU2VsZWN0Q2FwdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMWQxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOi43NWVtO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjNweCAyMHB4IDNweCAx''@;'; put 'put ''MHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0Q2FwdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7Ym9yZGVyOjFweCBzb2xpZCAjYjliOWI5fS5oYW5kc29udGFibGUg''@;'; put 'put ''Lmh0VUlTZWxlY3REcm9wZG93bjphZnRlcntjb250ZW50OiJcMjViMiI7Zm9udC1zaXplOjdweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4O3RvcDowfS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3REcm9wZG93bjpiZWZvcmV7Y29udGVudDoiXDI1YmMiO2ZvbnQtc2l6ZTo3cHg7cG9z''@;'; put 'put ''aXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6OHB4fS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdCAuaGFuZHNvbnRhYmxlIC5odENvcmV7Ym9yZGVyOm5vbmV9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5oYW5kc29udGFibGUgLmh0Q29yZSB0ZDpob3Zl''@;'; put 'put ''cntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIGlucHV0e2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2QyZDFkMTtwYWRkaW5nOjNweH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW97ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NXB4O2hlaWdodDoxMDAlfVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlSYWRpb3ttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDo1cHh9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0''@;'; put 'put ''OjB9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9de21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0Oi41ZXh9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9de21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0Oi41ZXh9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuaHRVSVJhZGlvIGxhYmVse3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51T3BlcmF0b3Jze3BhZGRpbmctYm90dG9tOjVweH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRlciwuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZXtjb2xvcjojYmJiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7Zm9udC1zaXplOjVwdDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVye3JpZ2h0OjFweDtjb250ZW50OiJcMjVjMCJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXJ7''@;'; put 'put ''cmlnaHQ6aW5pdGlhbDtsZWZ0OjFweDtjb250ZW50OiJcMjViNiJ9LmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmV7bGVmdDoxcHg7Y29udGVudDoiXDI1YjYifVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle3JpZ2h0OjFw''@;'; put 'put ''eDtsZWZ0OmluaXRpYWw7Y29udGVudDoiXDI1YzAifS8qIQogKiBIYW5kc29udGFibGUgSGlkZGVuUm93cwogKi8uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlblJvdzpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvdzphZnRlcntjb2xvcjojYmJiO2ZvbnQtc2l6ZTo2''@;'; put 'put ''cHQ7bGluZS1oZWlnaHQ6NnB0O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MnB4fS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93LC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3d7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3c6YmVm''@;'; put 'put ''b3Jle2NvbnRlbnQ6IlwyNWIyIjtib3R0b206MnB4fS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3c6YWZ0ZXJ7Y29udGVudDoiXDI1YmMiO3RvcDoycHh9LmhhbmRzb250YWJsZS5odF9fc2VsZWN0aW9uLS1yb3dzIHRib2R5IHRoLmJlZm9yZUhpZGRlblJvdy5odF9faGlnaGxpZ2h0''@;'; put 'put ''OmJlZm9yZSwuaGFuZHNvbnRhYmxlLmh0X19zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGguYWZ0ZXJIaWRkZW5Sb3cuaHRfX2hpZ2hsaWdodDphZnRlcntjb2xvcjojZWVlfS5oYW5kc29udGFibGUgdGQuYWZ0ZXJIaWRkZW5Sb3cuZmlyc3RWaXNpYmxlUm93LC5oYW5kc29udGFibGUgdGguYWZ0''@;'; put 'put ''ZXJIaWRkZW5Sb3cuZmlyc3RWaXNpYmxlUm93e2JvcmRlci10b3A6MXB4IHNvbGlkICNDQ0N9Lmh0Um93SGVhZGVycyAuaHRfbWFzdGVyLmlubmVyQm9yZGVySW5saW5lU3RhcnR+Lmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIHRoOm50aC1jaGlsZCgyKSwuaHRSb3dIZWFkZXJz''@;'; put 'put ''IC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaHRfY2xvbmVfaW5saW5lX3N0YXJ0IHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLWxlZnQ6MCBub25lfS5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUuYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIHRoZWFkIHRoLmh0''@;'; put 'put ''X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJ9LmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMsLmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgdGhlYWQgdGguaHRfX2hpZ2hsaWdo''@;'; put 'put ''dHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgLm1hbnVhbENvbHVtblJlc2l6ZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUs''@;'; put 'put ''LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodHtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MTAwJTtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZXtiYWNrZ3JvdW5kOiM3NTc1NzU7d2lkdGg6MnB4''@;'; put 'put ''O3RvcDowO21hcmdpbi1pbmxpbmUtc3RhcnQ6LTFweDttYXJnaW4taW5saW5lLWVuZDowO3otaW5kZXg6MjA1fS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7YmFja2dyb3VuZDojMzQzNDM0O2JhY2tncm91bmQ6cmdiYSg1Miw1Miw1MiwuMjUpO2Rpc3Bs''@;'; put 'put ''YXk6bm9uZTt6LWluZGV4OjIwNTtwb2ludGVyLWV2ZW50czpub25lfS5oYW5kc29udGFibGUub24tbW92aW5nLS1jb2x1bW5zLnNob3ctdWkgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLWNvbHVtbnMgLmh0X19tYW51YWxDb2x1bW5N''@;'; put 'put ''b3ZlLS1iYWNrbGlnaHR7ZGlzcGxheTpibG9ja30uaGFuZHNvbnRhYmxlIC53dEhpZGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUuYWZ0ZXItc2VsZWN0aW9uLS1yb3dzIHRib2R5IHRoLmh0X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29y''@;'; put 'put ''OmdyYWJ9LmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MsLmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRzb250YWJs''@;'; put 'put ''ZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgLm1hbnVhbFJvd1Jlc2l6ZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtwb3NpdGlvbjph''@;'; put 'put ''YnNvbHV0ZTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5le2JhY2tncm91bmQ6Izc1NzU3NTtoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW4tdG9wOi0xcHg7ei1pbmRleDoyMDV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVh''@;'; put 'put ''bFJvd01vdmUtLWJhY2tsaWdodHtiYWNrZ3JvdW5kOiMzNDM0MzQ7YmFja2dyb3VuZDpyZ2JhKDUyLDUyLDUyLC4yNSk7ZGlzcGxheTpub25lO3otaW5kZXg6MjA1O3BvaW50ZXItZXZlbnRzOm5vbmV9LmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLXJvd3Muc2hvdy11aSAuaHRfX21hbnVhbFJv''@;'; put 'put ''d01vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tcm93cyAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtkaXNwbGF5OmJsb2NrfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdOm5vdChbY2xhc3Mq''@;'; put 'put ''PWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsXSk6YmVmb3Jle29wYWNpdHk6MH0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtbXVsdGlwbGVdOmJlZm9yZXtvcGFjaXR5Oi4x''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC0wXTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFz''@;'; put 'put ''cyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMV06YmVmb3Jle29wYWNpdHk6LjJ9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTJdOmJl''@;'; put 'put ''Zm9yZXtvcGFjaXR5Oi4yN30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtM106YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1b''@;'; put 'put ''Y2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC00XTpiZWZvcmV7b3BhY2l0eTouNDF9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0''@;'; put 'put ''ZWRNZXJnZWRDZWxsLTVdOmJlZm9yZXtvcGFjaXR5Oi40N30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtNl06YmVmb3Jle29wYWNpdHk6LjU0fS5oYW5kc29udGFibGUg''@;'; put 'put ''dGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC03XTpiZWZvcmV7b3BhY2l0eTouNTh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmFmdGVye3RvcDo1MCU7bWFyZ2lu''@;'; put 'put ''LXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xNXB4O2xlZnQ6dW5zZXQ7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OnVuc2V0O2ZvbnQtc2l6ZTo4cHg7aGVpZ2h0OjhweDtsaW5lLWhlaWdodDoxLjE7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1bZGlyPXJ0bF0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YWZ0ZXJ7bGVmdDotMTVweDtyaWdodDp1bnNldDtwYWRkaW5nLXJpZ2h0OjVweDtwYWRkaW5nLWxlZnQ6dW5zZXR9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmFmdGVye3RleHQtZGVj''@;'; put 'put ''b3JhdGlvbjpub25lfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZ1tjbGFzc149c29ydC1dOmFmdGVyLC5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZ1tjbGFzcyo9IiBzb3J0LSJdOmFmdGVye2NvbnRlbnQ6IisifS5oYW5kc29udGFi''@;'; put 'put ''bGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTE6YWZ0ZXJ7Y29udGVudDoiMSJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtMjphZnRlcntjb250ZW50OiIyIn0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRp''@;'; put 'put ''bmcuc29ydC0zOmFmdGVye2NvbnRlbnQ6IjMifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTQ6YWZ0ZXJ7Y29udGVudDoiNCJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNTphZnRlcntjb250ZW50OiI1In0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC02OmFmdGVye2NvbnRlbnQ6IjYifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTc6YWZ0ZXJ7Y29udGVudDoiNyJ9Lmh0R2hvc3RUYWJsZSB0aCBkaXYgYnV0dG9uLmNo''@;'; put 'put ''YW5nZVR5cGUrc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKXtwYWRkaW5nLXJpZ2h0OjVweH0uaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmhpZGRlbkhlYWRlcjpub3QoOmZpcnN0LW9mLXR5cGUpe2Rpc3BsYXk6bm9uZX1AY2hhcnNldCAiVVRGLTgi''@;'; put 'put ''Oy5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVsc3t0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjdweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmh0X25lc3RpbmdMZXZlbHN7dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLXJpZ2h0OjdweH0uaGFuZHNvbnRhYmxlIHRoIGRp''@;'; put 'put ''di5odF9uZXN0aW5nTGV2ZWxze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTFweDtyaWdodDp1bnNldH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxze3JpZ2h0OjExcHg7bGVmdDp1bnNldH0uaGFuZHNvbnRhYmxlLmlu''@;'; put 'put ''bmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHMsLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHN7cmlnaHQ6MTBweDtsZWZ0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUu''@;'; put 'put ''aW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0xldmVscyxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0xldmVsc3tsZWZ0OjEwcHg7cmlnaHQ6dW5zZXR9LmhhbmRzb250YWJs''@;'; put 'put ''ZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbHtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIHRoIHNwYW4uaHRfbmVzdGluZ0xldmVsX2VtcHR5e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjFweDtmbG9hdDpsZWZ0fVtkaXI9cnRsXS5oYW5kc29udGFi''@;'; put 'put ''bGUgdGggc3Bhbi5odF9uZXN0aW5nTGV2ZWxfZW1wdHl7ZmxvYXQ6cmlnaHR9LmhhbmRzb250YWJsZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbDphZnRlcntjb250ZW50OiJcMjUxMCI7Zm9udC1zaXplOjlweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtib3R0b206''@;'; put 'put ''M3B4fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTJweDtsZWZ0OnVuc2V0O2N1cnNvcjpwb2ludGVyfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257''@;'; put 'put ''bGVmdDotMnB4O3JpZ2h0OnVuc2V0fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0V4cGFuZDphZnRlcntjb250ZW50OiIrIn0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdDb2xsYXBzZTphZnRlcntjb250ZW50''@;'; put 'put ''OiItIn0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24sLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257cmlnaHQ6MDtsZWZ0OnVuc2V0fVtkaXI9''@;'; put 'put ''cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbixbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntsZWZ0OjA7cmlnaHQ6dW5z''@;'; put 'put ''ZXR9OnJvb3R7LS1jZHMtZ2xvYmFsLWJhc2U6MjB9aHRtbHtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xpbmUtaGVpZ2h0OjEuMTU7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJX1ib2R5e21hcmdpbjowfWFydGljbGUsYXNpZGUsZGV0YWls''@;'; put 'put ''cyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLG1haW4sbWVudSxuYXYsc2VjdGlvbixzdW1tYXJ5e2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHByb2dyZXNzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfWF1ZGlvOm5vdChbY29udHJvbHNdKXtkaXNwbGF5Om5vbmU7aGVp''@;'; put 'put ''Z2h0OjB9cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9dGVtcGxhdGUsW2hpZGRlbl17ZGlzcGxheTpub25lfWF7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwOm9iamVjdHN9YTphY3RpdmUsYTpob3ZlcntvdXRsaW5lLXdp''@;'; put 'put ''ZHRoOjB9YWJiclt0aXRsZV17Ym9yZGVyLWJvdHRvbTpub25lO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH1iLHN0cm9uZ3tmb250LXdlaWdodDppbmhlcml0''@;'; put 'put ''fWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OmJvbGRlcn1kZm57Zm9udC1zdHlsZTppdGFsaWN9aDF7Zm9udC1zaXplOjJlbTttYXJnaW46LjY3ZW0gMH1tYXJre2JhY2tncm91bmQtY29sb3I6I2ZmMDtjb2xvcjojMDAwfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xp''@;'; put 'put ''bmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vie2JvdHRvbTotLjI1ZW19c3Vwe3RvcDotLjVlbX1pbWd7Ym9yZGVyLXN0eWxlOm5vbmV9c3ZnOm5vdCg6cm9vdCl7b3ZlcmZsb3c6aGlkZGVufWNvZGUsa2JkLHByZSxzYW1we2ZvbnQtZmFt''@;'; put 'put ''aWx5Om1vbm9zcGFjZTtmb250LXNpemU6MWVtfWZpZ3VyZXttYXJnaW46MWVtIDQwcHh9aHJ7Ym94LXNpemluZzpjb250ZW50LWJveDtoZWlnaHQ6MDtvdmVyZmxvdzp2aXNpYmxlfWJ1dHRvbixpbnB1dCxvcHRncm91cCxzZWxlY3QsdGV4dGFyZWF7Zm9udDppbmhlcml0O21hcmdpbjowfXRl''@;'; put 'put ''eHRhcmVhe2xpbmUtaGVpZ2h0OjEuMTV9b3B0Z3JvdXB7Zm9udC13ZWlnaHQ6NzAwfWJ1dHRvbixpbnB1dHtvdmVyZmxvdzp2aXNpYmxlfWJ1dHRvbixzZWxlY3R7dGV4dC10cmFuc2Zvcm06bm9uZX1idXR0b24saHRtbCBbdHlwZT1idXR0b25dLFt0eXBlPXJlc2V0XSxbdHlwZT1zdWJtaXRd''@;'; put 'put ''ey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFt0eXBlPWJ1dHRvbl06Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9cmVzZXRdOjotbW96LWZvY3VzLWlubmVyLFt0eXBlPXN1Ym1pdF06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7''@;'; put 'put ''cGFkZGluZzowfWJ1dHRvbjotbW96LWZvY3VzcmluZyxbdHlwZT1idXR0b25dOi1tb3otZm9jdXNyaW5nLFt0eXBlPXJlc2V0XTotbW96LWZvY3VzcmluZyxbdHlwZT1zdWJtaXRdOi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fWZpZWxkc2V0e2JvcmRlcjox''@;'; put 'put ''cHggc29saWQgc2lsdmVyO21hcmdpbjowIDJweDtwYWRkaW5nOi4zNWVtIC42MjVlbSAuNzVlbX1sZWdlbmR7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7ZGlzcGxheTp0YWJsZTttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOjA7d2hpdGUtc3BhY2U6bm9ybWFsfXRleHRhcmVh''@;'; put 'put ''e292ZXJmbG93OmF1dG99W3R5cGU9Y2hlY2tib3hdLFt0eXBlPXJhZGlvXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowfVt0eXBlPW51bWJlcl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sW3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6''@;'; put 'put ''YXV0b31bdHlwZT1zZWFyY2hdey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH1bdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBl''@;'; put 'put ''YXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06cm9vdHstLWNsci1jb2xvci1uZXV0cmFsLTA6d2hpdGU7LS1jbHItY29sb3ItbmV1dHJhbC01MDojZmFmYWZhOy0tY2xyLWNvbG9yLW5ldXRyYWwt''@;'; put 'put ''MTAwOiNmMmYyZjI7LS1jbHItY29sb3ItbmV1dHJhbC0yMDA6I2U4ZThlODstLWNsci1jb2xvci1uZXV0cmFsLTMwMDojZGVkZWRlOy0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwOiNjY2NjY2M7LS1jbHItY29sb3ItbmV1dHJhbC01MDA6I2IzYjNiMzstLWNsci1jb2xvci1uZXV0cmFsLTYwMDoj''@;'; put 'put ''OGM4YzhjOy0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwOiM2NjY2NjY7LS1jbHItY29sb3ItbmV1dHJhbC04MDA6IzQ1NDU0NTstLWNsci1jb2xvci1uZXV0cmFsLTkwMDojMzMzMzMzOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTA6YmxhY2s7''@;'; put 'put ''LS1jbHItY29sb3Itb24tbmV1dHJhbC01MDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTIwMDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTMwMDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTQwMDpibGFjazst''@;'; put 'put ''LWNsci1jb2xvci1vbi1uZXV0cmFsLTUwMDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTYwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTcwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTgwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTkwMDp3aGl0ZTst''@;'; put 'put ''LWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDA6d2hpdGU7LS1jbHItY29sb3ItYWN0aW9uLTUwOiNlM2Y1ZmM7LS1jbHItY29sb3ItYWN0aW9uLTEwMDojYzhlYWY5Oy0tY2xyLWNvbG9yLWFjdGlvbi0yMDA6IzliZDhmMzstLWNsci1jb2xvci1hY3Rpb24tMzAwOiM3OWM2ZTY7LS1jbHItY29s''@;'; put 'put ''b3ItYWN0aW9uLTQwMDojNDlhZWRhOy0tY2xyLWNvbG9yLWFjdGlvbi01MDA6IzE3OWJkMzstLWNsci1jb2xvci1hY3Rpb24tNjAwOiMwMDcyYTM7LS1jbHItY29sb3ItYWN0aW9uLTcwMDojMDA2NDhmOy0tY2xyLWNvbG9yLWFjdGlvbi04MDA6IzAwNTY3YTstLWNsci1jb2xvci1hY3Rpb24t''@;'; put 'put ''OTAwOiMwMDRiNmI7LS1jbHItY29sb3ItYWN0aW9uLTEwMDA6IzAwMzY0ZDstLWNsci1jb2xvci1vbi1hY3Rpb24tNTA6YmxhY2s7LS1jbHItY29sb3Itb24tYWN0aW9uLTEwMDpibGFjazstLWNsci1jb2xvci1vbi1hY3Rpb24tMjAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0zMDA6''@;'; put 'put ''YmxhY2s7LS1jbHItY29sb3Itb24tYWN0aW9uLTQwMDpibGFjazstLWNsci1jb2xvci1vbi1hY3Rpb24tNTAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi02MDA6d2hpdGU7LS1jbHItY29sb3Itb24tYWN0aW9uLTcwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1hY3Rpb24tODAwOndoaXRl''@;'; put 'put ''Oy0tY2xyLWNvbG9yLW9uLWFjdGlvbi05MDA6d2hpdGU7LS1jbHItY29sb3Itb24tYWN0aW9uLTEwMDA6d2hpdGU7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi01MDojZjdlNmZmOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tMTAwOiNlNmNhZjE7LS1jbHItY29sb3Itc2Vjb25k''@;'; put 'put ''YXJ5LWFjdGlvbi0yMDA6I2QyYWFlNDstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTMwMDojYzA5MGQ1Oy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNDAwOiNhZjczYzk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi01MDA6IzllNTdiYzstLWNsci1jb2xvci1zZWNvbmRh''@;'; put 'put ''cnktYWN0aW9uLTYwMDojOGEzOWFjOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNzAwOiM3ODFkOWY7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi04MDA6IzY4MDA5NDstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTkwMDojNGYwMDcwOy0tY2xyLWNvbG9yLXNlY29uZGFy''@;'; put 'put ''eS1hY3Rpb24tMTAwMDojMzIwMDQ3Oy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNTA6YmxhY2s7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0xMDA6YmxhY2s7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0yMDA6YmxhY2s7LS1jbHItY29sb3Itb24tc2Vj''@;'; put 'put ''b25kYXJ5LWFjdGlvbi0zMDA6YmxhY2s7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi00MDA6YmxhY2s7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi01MDA6d2hpdGU7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi02MDA6d2hpdGU7LS1jbHItY29sb3Itb24t''@;'; put 'put ''c2Vjb25kYXJ5LWFjdGlvbi03MDA6d2hpdGU7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi04MDA6d2hpdGU7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi05MDA6d2hpdGU7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0xMDAwOndoaXRlOy0tY2xyLWNvbG9y''@;'; put 'put ''LWRhbmdlci01MDojZmZmMmYwOy0tY2xyLWNvbG9yLWRhbmdlci0xMDA6I2ZlZGRkNzstLWNsci1jb2xvci1kYW5nZXItMjAwOiNmY2M1YmI7LS1jbHItY29sb3ItZGFuZ2VyLTMwMDojZjU5ZThmOy0tY2xyLWNvbG9yLWRhbmdlci00MDA6I2YyNzk2MzstLWNsci1jb2xvci1kYW5nZXItNTAw''@;'; put 'put ''OiNmMzVlNDQ7LS1jbHItY29sb3ItZGFuZ2VyLTYwMDojZjUyZDBhOy0tY2xyLWNvbG9yLWRhbmdlci03MDA6I2RiMjEwMDstLWNsci1jb2xvci1kYW5nZXItODAwOiNjMjFkMDA7LS1jbHItY29sb3ItZGFuZ2VyLTkwMDojOTkxNzAwOy0tY2xyLWNvbG9yLWRhbmdlci0xMDAwOiM2NjBmMDA7''@;'; put 'put ''LS1jbHItY29sb3Itb24tZGFuZ2VyLTUwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDA6YmxhY2s7LS1jbHItY29sb3Itb24tZGFuZ2VyLTIwMDpibGFjazstLWNsci1jb2xvci1vbi1kYW5nZXItMzAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLWRhbmdlci00MDA6YmxhY2s7LS1jbHIt''@;'; put 'put ''Y29sb3Itb24tZGFuZ2VyLTUwMDpibGFjazstLWNsci1jb2xvci1vbi1kYW5nZXItNjAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLWRhbmdlci03MDA6d2hpdGU7LS1jbHItY29sb3Itb24tZGFuZ2VyLTgwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1kYW5nZXItOTAwOndoaXRlOy0tY2xyLWNvbG9y''@;'; put 'put ''LW9uLWRhbmdlci0xMDAwOndoaXRlOy0tY2xyLWNvbG9yLXdhcm5pbmctNTA6I2ZmZmFlNjstLWNsci1jb2xvci13YXJuaW5nLTEwMDojZmZmNGM3Oy0tY2xyLWNvbG9yLXdhcm5pbmctMjAwOiNmZmVlYTg7LS1jbHItY29sb3Itd2FybmluZy0zMDA6I2ZlZTI3MjstLWNsci1jb2xvci13YXJu''@;'; put 'put ''aW5nLTQwMDojZjhjZjJhOy0tY2xyLWNvbG9yLXdhcm5pbmctNTAwOiNlZmMwMDY7LS1jbHItY29sb3Itd2FybmluZy02MDA6I2U2YjAwMDstLWNsci1jb2xvci13YXJuaW5nLTcwMDojZDY5YTAwOy0tY2xyLWNvbG9yLXdhcm5pbmctODAwOiNhZDc2MDA7LS1jbHItY29sb3Itd2FybmluZy05''@;'; put 'put ''MDA6IzhmNWEwMDstLWNsci1jb2xvci13YXJuaW5nLTEwMDA6IzYxMzIwMDstLWNsci1jb2xvci1vbi13YXJuaW5nLTUwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMTAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMjAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmct''@;'; put 'put ''MzAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNDAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNTAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNjAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNzAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmct''@;'; put 'put ''ODAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctOTAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMTAwMDp3aGl0ZTstLWNsci1jb2xvci1zdWNjZXNzLTUwOiNkZmYwZDA7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDA6I2JjZTQ5YTstLWNsci1jb2xvci1zdWNjZXNzLTIwMDoj''@;'; put 'put ''NzNkYzFlOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtMzAwOiM2OGM3MWE7LS1jbHItY29sb3Itc3VjY2Vzcy00MDA6IzVlYjcxNTstLWNsci1jb2xvci1zdWNjZXNzLTUwMDojNWFhMjIwOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNjAwOiM0Yjk3MGM7LS1jbHItY29sb3Itc3VjY2Vzcy03MDA6IzNjODUw''@;'; put 'put ''MDstLWNsci1jb2xvci1zdWNjZXNzLTgwMDojMzA2YjAwOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtOTAwOiMyNTUyMDA7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDAwOiMxZTQyMDA7LS1jbHItY29sb3Itb24tc3VjY2Vzcy01MDpibGFjazstLWNsci1jb2xvci1vbi1zdWNjZXNzLTEwMDpibGFjazst''@;'; put 'put ''LWNsci1jb2xvci1vbi1zdWNjZXNzLTIwMDpibGFjazstLWNsci1jb2xvci1vbi1zdWNjZXNzLTMwMDpibGFjazstLWNsci1jb2xvci1vbi1zdWNjZXNzLTQwMDpibGFjazstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwMDpibGFjazstLWNsci1jb2xvci1vbi1zdWNjZXNzLTYwMDpibGFjazst''@;'; put 'put ''LWNsci1jb2xvci1vbi1zdWNjZXNzLTcwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTgwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTkwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTEwMDA6d2hpdGV9OnJvb3R7LS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1czou''@;'; put 'put ''MTVyZW07LS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoOi4wNXJlbTstLWNsci1nbG9iYWwtYXBwLWJhY2tncm91bmQ6I2ZhZmFmYTstLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yOiNkOGUzZTk7LS1jbHItZ2xvYmFsLW9uLXNlbGVjdGlvbi1jb2xvcjpibGFjazstLWNsci1nbG9iYWwtaG92''@;'; put 'put ''ZXItY29sb3I6I2U4ZThlODstLWNsci1nbG9iYWwtY29udGVudC1oZWFkZXItZm9udC1jb2xvcjpibGFjazstLWNsci1nbG9iYWwtZm9udC1jb2xvcjojNjY2NjY2Oy0tY2xyLWdsb2JhbC1zdWNjZXNzLWNvbG9yOiM1YWEyMjA7LS1jbHItZ2xvYmFsLWVycm9yLWNvbG9yOiNjMjFkMDA7LS1j''@;'; put 'put ''bHItY2xvc2UtY29sb3ItLW5vcm1hbDojOGM4YzhjOy0tY2xyLWNsb3NlLWNvbG9yLS1ub3JtYWwtb3BhY2l0eTouMjstLWNsci1jbG9zZS1jb2xvci0taG92ZXI6YmxhY2s7LS1jbHItY2xvc2UtY29sb3ItLWhvdmVyLW9wYWNpdHk6LjU7LS1jbHItcG9wb3Zlci1ib3gtc2hhZG93LWNvbG9y''@;'; put 'put ''OnJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KX06cm9vdHstLWNsci1mb250Ok1ldHJvcG9saXMsIEF2ZW5pciBOZXh0LCBIZWx2ZXRpY2EgTmV1ZSwgQXJpYWwsIHNhbnMtc2VyaWY7LS1jbHItZGlzcGxheS1mb250OnZhcigtLWNsci1mb250KTstLWNsci1mb250LXdlaWdodC1saWdodDoyMDA7''@;'; put 'put ''LS1jbHItZm9udC13ZWlnaHQtcmVndWxhcjo0MDA7LS1jbHItZm9udC13ZWlnaHQtc2VtaWJvbGQ6NTAwOy0tY2xyLWZvbnQtd2VpZ2h0LWJvbGQ6NjAwOy0tY2xyLWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jbHItaDEtY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1jb250ZW50LWhlYWRl''@;'; put 'put ''ci1mb250LWNvbG9yKTstLWNsci1oMS1mb250LXdlaWdodDp2YXIoLS1jbHItZm9udC13ZWlnaHQtbGlnaHQpOy0tY2xyLWgxLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgyLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtY29udGVudC1oZWFkZXItZm9udC1jb2xv''@;'; put 'put ''cik7LS1jbHItaDItZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LWxpZ2h0KTstLWNsci1oMi1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oMy1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLWNvbnRlbnQtaGVhZGVyLWZvbnQtY29sb3IpOy0tY2xyLWgz''@;'; put 'put ''LWZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1saWdodCk7LS1jbHItaDMtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDQtY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1jb250ZW50LWhlYWRlci1mb250LWNvbG9yKTstLWNsci1oNC1mb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItZm9udC13ZWlnaHQtbGlnaHQpOy0tY2xyLWg0LWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg1LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItaDUtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJl''@;'; put 'put ''Z3VsYXIpOy0tY2xyLWg1LWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg2LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTkwMCk7LS1jbHItaDYtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1oNi1mb250LWZh''@;'; put 'put ''bWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1wMC1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLWZvbnQtY29sb3IpOy0tY2xyLXAwLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1saWdodCk7LS1jbHItcDEtY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1mb250LWNvbG9y''@;'; put 'put ''KTstLWNsci1wMS1mb250LXdlaWdodDp2YXIoLS1jbHItZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItcDItY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1mb250LWNvbG9yKTstLWNsci1wMi1mb250LXdlaWdodDp2YXIoLS1jbHItZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXAzLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItcDMtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpOy0tY2xyLXA0LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItcDQtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2Vp''@;'; put 'put ''Z2h0LWJvbGQpOy0tY2xyLXA1LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItcDUtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpOy0tY2xyLXA2LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItcDYtZm9udC13''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LWJvbGQpOy0tY2xyLXA3LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItcDctZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpOy0tY2xyLXA4LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9u''@;'; put 'put ''dC1jb2xvcik7LS1jbHItcDgtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpfS5jbHItYWxpZ24tYmFzZWxpbmV7dmVydGljYWwtYWxpZ246YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tdG9we3ZlcnRpY2FsLWFsaWduOnRvcCFpbXBvcnRhbnR9LmNsci1h''@;'; put 'put ''bGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlIWltcG9ydGFudH0uY2xyLWFsaWduLWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjpib3R0b20haW1wb3J0YW50fS5jbHItYWxpZ24tdGV4dC1ib3R0b217dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b20haW1wb3J0YW50fS5jbHItYWxpZ24t''@;'; put 'put ''dGV4dC10b3B7dmVydGljYWwtYWxpZ246dGV4dC10b3AhaW1wb3J0YW50fS5jbHItY2xlYXJmaXg6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlO2NsZWFyOmJvdGh9LmNsci1kaXNwbGF5LWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jbHItZGlzcGxheS1pbmxpbmUtYmxv''@;'; put 'put ''Y2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5jbHItZGlzcGxheS1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5jbHItZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1mbGV4LXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLWZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LWdyb3ctMHtmbGV4''@;'; put 'put ''LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1z''@;'; put 'put ''dGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5j''@;'; put 'put ''bHItanVzdGlmeS1jb250ZW50LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXN0YXJ0e2FsaWduLWl0''@;'; put 'put ''ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtYmFzZWxpbmV7YWxpZ24taXRl''@;'; put 'put ''bXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtZW5ke2FsaWdu''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250''@;'; put 'put ''ZW50LWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24t''@;'; put 'put ''c2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWJhc2Vs''@;'; put 'put ''aW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZs''@;'; put 'put ''ZXgtc20tY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtc20tY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2Uh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItZmxleC1zbS13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtc20tbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC1zbS13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1m''@;'; put 'put ''bGV4LXNtLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxleC1zbS1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVu''@;'; put 'put ''ZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNtLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250''@;'; put 'put ''ZW50LXNtLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXNtLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWFsaWduLWl0ZW1zLXNtLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNo''@;'; put 'put ''IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1jZW50ZXJ7YWxp''@;'; put 'put ''Z24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1hbGlnbi1jb250ZW50LXNtLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zbS1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItYWxpZ24tc2VsZi1zbS1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItYWxpZ24tc2VsZi1zbS1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpj''@;'; put 'put ''b2x1bW4haW1wb3J0YW50fS5jbHItZmxleC1tZC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtd3JhcHtm''@;'; put 'put ''bGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1tZC1maWxse2ZsZXg6MSAxIGF1dG8haW1w''@;'; put 'put ''b3J0YW50fS5jbHItZmxleC1tZC1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC1tZC1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxleC1tZC1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtc2hyaW5rLTF7ZmxleC1z''@;'; put 'put ''aHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250''@;'; put 'put ''ZW50LW1kLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1hcm91bmR7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1jZW50ZXJ7''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50''@;'; put 'put ''LW1kLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0u''@;'; put 'put ''Y2xyLWFsaWduLWNvbnRlbnQtbWQtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1zdHJldGNoe2Fs''@;'; put 'put ''aWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtZW5ke2FsaWdu''@;'; put 'put ''LXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtc3RyZXRjaHth''@;'; put 'put ''bGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1sZy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtbGct''@;'; put 'put ''cm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1sZy1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''ZmxleC1sZy1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZ3Jvdy0we2Zs''@;'; put 'put ''ZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtbGctc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlm''@;'; put 'put ''eS1jb250ZW50LWxnLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXJ7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24taXRlbXMtbGctc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbGctY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9''@;'; put 'put ''LmNsci1hbGlnbi1pdGVtcy1sZy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1zdGFydHthbGlnbi1jb250ZW50OmZsZXgt''@;'; put 'put ''c3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWJldHdlZW57''@;'; put 'put ''YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50''@;'; put 'put ''fS5jbHItYWxpZ24tc2VsZi1sZy1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xy''@;'; put 'put ''LWFsaWduLXNlbGYtbGctY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19''@;'; put 'put ''QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWZsZXgteGwtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5jbHItZmxleC14bC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpy''@;'; put 'put ''b3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgteGwtd3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLW5vd3JhcHtmbGV4LXdyYXA6bm93''@;'; put 'put ''cmFwIWltcG9ydGFudH0uY2xyLWZsZXgteGwtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC14bC1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5jbHItZmxleC14bC1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxl''@;'; put 'put ''eC14bC1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxleC14bC1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgteGwtc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnR7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3Rp''@;'; put 'put ''ZnktY29udGVudC14bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC14bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy14bC1zdGFydHthbGlnbi1p''@;'; put 'put ''dGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy14bC1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWJhc2VsaW5l''@;'; put 'put ''e2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1j''@;'; put 'put ''b250ZW50LXhsLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4h''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWF1dG97YWxp''@;'; put 'put ''Z24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1jZW50ZXJ7YWxpZ24t''@;'; put 'put ''c2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX0uY2xyLWZsZXgteHMtZmlyc3R7b3JkZXI6LTF9''@;'; put 'put ''LmNsci1mbGV4LXhzLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgteHMtdW5vcmRlcmVke29yZGVyOjB9LmNsci1mbGV4LWl0ZW1zLXhzLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy14cy1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14''@;'; put 'put ''cy1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9LmNsci1mbGV4LXhzLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXhzLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgteHMtYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhz''@;'; put 'put ''LWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhzLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14cy1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhzLWFyb3VuZHtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy14cy1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtc20tZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LXNtLWxhc3R7b3JkZXI6MX0uY2xyLWZs''@;'; put 'put ''ZXgtc20tdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtaXRlbXMtc20tdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXNtLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXNtLWJvdHRv''@;'; put 'put ''bXthbGlnbi1pdGVtczpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS10b3B7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxleC1zbS1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LXNtLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5k''@;'; put 'put ''fX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LWl0ZW1zLXNtLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXNtLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1zbS1yaWdodHtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXNtLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy1zbS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LW1kLWZp''@;'; put 'put ''cnN0e29yZGVyOi0xfS5jbHItZmxleC1tZC1sYXN0e29yZGVyOjF9LmNsci1mbGV4LW1kLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LWl0ZW1zLW1kLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1tZC1taWRk''@;'; put 'put ''bGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1tZC1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtbWQtbWlkZGxle2FsaWduLXNlbGY6''@;'; put 'put ''Y2VudGVyfS5jbHItZmxleC1tZC1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1pdGVtcy1tZC1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1tZC1jZW50ZXJ7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtbWQtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy1tZC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMtbWQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0''@;'; put 'put ''d2Vlbn19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1sZy1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgtbGctbGFzdHtvcmRlcjoxfS5jbHItZmxleC1sZy11bm9yZGVyZWR7b3JkZXI6MH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1pdGVtcy1sZy10b3B7''@;'; put 'put ''YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtbGctbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtbGctYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLXRvcHthbGlnbi1z''@;'; put 'put ''ZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LWxnLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgtbGctYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtaXRlbXMtbGctbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1z''@;'; put 'put ''dGFydH0uY2xyLWZsZXgtaXRlbXMtbGctY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLWxnLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMtbGctYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1m''@;'; put 'put ''bGV4LWl0ZW1zLWxnLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC14bC1sYXN0e29yZGVyOjF9LmNsci1mbGV4LXhsLXVub3JkZXJlZHtvcmRlcjowfX1A''@;'; put 'put ''bWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC1pdGVtcy14bC10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteGwtbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMteGwtYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1A''@;'; put 'put ''bWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC14bC10b3B7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxleC14bC1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LXhsLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAw''@;'; put 'put ''cHgpey5jbHItZmxleC1pdGVtcy14bC1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy14bC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMteGwtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1p''@;'; put 'put ''dGVtcy14bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMteGwtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19LmNsci1mbG9hdC14cy1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQteHMtcmlnaHR7Zmxv''@;'; put 'put ''YXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQteHMtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbG9hdC1zbS1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtc20tcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxvYXQtc20tbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxvYXQtbWQtbGVmdHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LW1kLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0LW1kLW5v''@;'; put 'put ''bmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsb2F0LWxnLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1sZy1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1sZy1ub25le2Zsb2F0Om5vbmUhaW1w''@;'; put 'put ''b3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxvYXQteGwtbGVmdHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LXhsLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0LXhsLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fS5jbHItaW52''@;'; put 'put ''aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudH0uY2xyLWhpZGRlbi14cy11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOjU3NS45OHB4KXsuY2xyLWhpZGRlbi14cy1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRo''@;'; put 'put ''OjU3NnB4KXsuY2xyLWhpZGRlbi1zbS11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo3NjcuOThweCl7LmNsci1oaWRkZW4tc20tZG93bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1oaWRkZW4tbWQtdXB7''@;'; put 'put ''ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6OTkxLjk4cHgpey5jbHItaGlkZGVuLW1kLWRvd257ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItaGlkZGVuLWxnLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBt''@;'; put 'put ''ZWRpYSAobWF4LXdpZHRoOjExOTkuOThweCl7LmNsci1oaWRkZW4tbGctZG93bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItaGlkZGVuLXhsLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS5jbHItaGlkZGVuLXhsLWRvd24sLmNsci12''@;'; put 'put ''aXNpYmxlLXByaW50LWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH19LmNsci12aXNpYmxlLXByaW50LWlubGluZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmlu''@;'; put 'put ''dHsuY2xyLXZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19LmNsci12aXNpYmxlLXByaW50LWlubGluZS1ibG9ja3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsuY2xyLXZpc2libGUtcHJpbnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWJsb2NrIWltcG9ydGFudH19QG1lZGlhIHByaW50ey5jbHItaGlkZGVuLXByaW50e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS5jbHItcm93e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tcmlnaHQ6LS42cmVtO21hcmdpbi1sZWZ0Oi0uNnJlbX0uY2xyLW5vLWd1dHRl''@;'; put 'put ''cnN7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0uY2xyLW5vLWd1dHRlcnM+LmNsci1jb2wsLmNsci1uby1ndXR0ZXJzPltjbGFzcyo9Y2xyLWNvbC1de3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MH0uY2xyLWNvbC14bCwuY2xyLWNvbC14bC1hdXRvLC5jbHItY29sLXhsLTEy''@;'; put 'put ''LC5jbHItY29sLXhsLTExLC5jbHItY29sLXhsLTEwLC5jbHItY29sLXhsLTksLmNsci1jb2wteGwtOCwuY2xyLWNvbC14bC03LC5jbHItY29sLXhsLTYsLmNsci1jb2wteGwtNSwuY2xyLWNvbC14bC00LC5jbHItY29sLXhsLTMsLmNsci1jb2wteGwtMiwuY2xyLWNvbC14bC0xLC5jbHItY29s''@;'; put 'put ''LWxnLC5jbHItY29sLWxnLWF1dG8sLmNsci1jb2wtbGctMTIsLmNsci1jb2wtbGctMTEsLmNsci1jb2wtbGctMTAsLmNsci1jb2wtbGctOSwuY2xyLWNvbC1sZy04LC5jbHItY29sLWxnLTcsLmNsci1jb2wtbGctNiwuY2xyLWNvbC1sZy01LC5jbHItY29sLWxnLTQsLmNsci1jb2wtbGctMywu''@;'; put 'put ''Y2xyLWNvbC1sZy0yLC5jbHItY29sLWxnLTEsLmNsci1jb2wtbWQsLmNsci1jb2wtbWQtYXV0bywuY2xyLWNvbC1tZC0xMiwuY2xyLWNvbC1tZC0xMSwuY2xyLWNvbC1tZC0xMCwuY2xyLWNvbC1tZC05LC5jbHItY29sLW1kLTgsLmNsci1jb2wtbWQtNywuY2xyLWNvbC1tZC02LC5jbHItY29s''@;'; put 'put ''LW1kLTUsLmNsci1jb2wtbWQtNCwuY2xyLWNvbC1tZC0zLC5jbHItY29sLW1kLTIsLmNsci1jb2wtbWQtMSwuY2xyLWNvbC1zbSwuY2xyLWNvbC1zbS1hdXRvLC5jbHItY29sLXNtLTEyLC5jbHItY29sLXNtLTExLC5jbHItY29sLXNtLTEwLC5jbHItY29sLXNtLTksLmNsci1jb2wtc20tOCwu''@;'; put 'put ''Y2xyLWNvbC1zbS03LC5jbHItY29sLXNtLTYsLmNsci1jb2wtc20tNSwuY2xyLWNvbC1zbS00LC5jbHItY29sLXNtLTMsLmNsci1jb2wtc20tMiwuY2xyLWNvbC1zbS0xLC5jbHItY29sLC5jbHItY29sLWF1dG8sLmNsci1jb2wtMTIsLmNsci1jb2wtMTEsLmNsci1jb2wtMTAsLmNsci1jb2wt''@;'; put 'put ''OSwuY2xyLWNvbC04LC5jbHItY29sLTcsLmNsci1jb2wtNiwuY2xyLWNvbC01LC5jbHItY29sLTQsLmNsci1jb2wtMywuY2xyLWNvbC0yLC5jbHItY29sLTF7d2lkdGg6MTAwJTttaW4taGVpZ2h0Oi4wNXJlbTtwYWRkaW5nLXJpZ2h0Oi42cmVtO3BhZGRpbmctbGVmdDouNnJlbX0uY2xyLWNv''@;'; put 'put ''bHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLTJ7''@;'; put 'put ''ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtNXtmbGV4OjAg''@;'; put 'put ''MCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC04e2ZsZXg6MCAwIDY2LjY2''@;'; put 'put ''NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC0xMXtmbGV4OjAgMCA5MS42NjY2NjY2''@;'; put 'put ''NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLTB7b3JkZXI6MH0uY2xyLW9yZGVyLTF7b3JkZXI6MX0u''@;'; put 'put ''Y2xyLW9yZGVyLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLTN7b3JkZXI6M30uY2xyLW9yZGVyLTR7b3JkZXI6NH0uY2xyLW9yZGVyLTV7b3JkZXI6NX0uY2xyLW9yZGVyLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLTd7b3JkZXI6N30uY2xyLW9yZGVyLTh7b3JkZXI6OH0uY2xyLW9yZGVyLTl7b3JkZXI6''@;'; put 'put ''OX0uY2xyLW9yZGVyLTEwe29yZGVyOjEwfS5jbHItb3JkZXItMTF7b3JkZXI6MTF9LmNsci1vcmRlci0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC0z''@;'; put 'put ''e21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMz''@;'; put 'put ''MzMzJX0uY2xyLW9mZnNldC04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY2NjclfUBtZWRp''@;'; put 'put ''YSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWNvbC1zbXtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtc20tYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtc20tMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMl''@;'; put 'put ''O21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLXNtLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtc20tNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMz''@;'; put 'put ''JTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtc20tNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC1zbS03e2ZsZXg6MCAwIDU4LjMzMzMzMzMz''@;'; put 'put ''MzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLXNtLTEwe2ZsZXg6MCAwIDgzLjMzMzMz''@;'; put 'put ''MzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLXNtLWZpcnN0e29yZGVy''@;'; put 'put ''Oi0xfS5jbHItb3JkZXItc20tbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLXNtLTB7b3JkZXI6MH0uY2xyLW9yZGVyLXNtLTF7b3JkZXI6MX0uY2xyLW9yZGVyLXNtLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLXNtLTN7b3JkZXI6M30uY2xyLW9yZGVyLXNtLTR7b3JkZXI6NH0uY2xyLW9yZGVyLXNt''@;'; put 'put ''LTV7b3JkZXI6NX0uY2xyLW9yZGVyLXNtLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLXNtLTd7b3JkZXI6N30uY2xyLW9yZGVyLXNtLTh7b3JkZXI6OH0uY2xyLW9yZGVyLXNtLTl7b3JkZXI6OX0uY2xyLW9yZGVyLXNtLTEwe29yZGVyOjEwfS5jbHItb3JkZXItc20tMTF7b3JkZXI6MTF9LmNsci1v''@;'; put 'put ''cmRlci1zbS0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC1zbS0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQtc20tMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtc20tM3ttYXJnaW4tbGVm''@;'; put 'put ''dDoyNSV9LmNsci1vZmZzZXQtc20tNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXNtLTZ7bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LXNtLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMz''@;'; put 'put ''MzMzMyV9LmNsci1vZmZzZXQtc20tOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1zbS05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC1zbS0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS0xMXttYXJnaW4tbGVmdDo5MS42NjY2''@;'; put 'put ''NjY2NjY3JX19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItY29sLW1ke2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1tZC1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC1tZC0xe2ZsZXg6MCAw''@;'; put 'put ''IDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbWQtM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC1tZC00e2ZsZXg6MCAw''@;'; put 'put ''IDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLW1kLTd7ZmxleDow''@;'; put 'put ''IDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTh7ZmxleDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtbWQtMTB7Zmxl''@;'; put 'put ''eDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTExe2ZsZXg6MCAwIDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXIt''@;'; put 'put ''bWQtZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1tZC1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItbWQtMHtvcmRlcjowfS5jbHItb3JkZXItbWQtMXtvcmRlcjoxfS5jbHItb3JkZXItbWQtMntvcmRlcjoyfS5jbHItb3JkZXItbWQtM3tvcmRlcjozfS5jbHItb3JkZXItbWQtNHtvcmRlcjo0''@;'; put 'put ''fS5jbHItb3JkZXItbWQtNXtvcmRlcjo1fS5jbHItb3JkZXItbWQtNntvcmRlcjo2fS5jbHItb3JkZXItbWQtN3tvcmRlcjo3fS5jbHItb3JkZXItbWQtOHtvcmRlcjo4fS5jbHItb3JkZXItbWQtOXtvcmRlcjo5fS5jbHItb3JkZXItbWQtMTB7b3JkZXI6MTB9LmNsci1vcmRlci1tZC0xMXtv''@;'; put 'put ''cmRlcjoxMX0uY2xyLW9yZGVyLW1kLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LW1kLTB7bWFyZ2luLWxlZnQ6MH0uY2xyLW9mZnNldC1tZC0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1t''@;'; put 'put ''ZC0ze21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC1tZC00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbWQtNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtbWQtN3ttYXJnaW4t''@;'; put 'put ''bGVmdDo1OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1tZC04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LW1kLTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LW1kLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTExe21hcmdp''@;'; put 'put ''bi1sZWZ0OjkxLjY2NjY2NjY2NjclfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1jb2wtbGd7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLWxnLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29s''@;'; put 'put ''LWxnLTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC1sZy0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29s''@;'; put 'put ''LWxnLTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLWxnLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1j''@;'; put 'put ''b2wtbGctN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xy''@;'; put 'put ''LWNvbC1sZy0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEw''@;'; put 'put ''MCV9LmNsci1vcmRlci1sZy1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLWxnLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci1sZy0we29yZGVyOjB9LmNsci1vcmRlci1sZy0xe29yZGVyOjF9LmNsci1vcmRlci1sZy0ye29yZGVyOjJ9LmNsci1vcmRlci1sZy0ze29yZGVyOjN9LmNsci1vcmRl''@;'; put 'put ''ci1sZy00e29yZGVyOjR9LmNsci1vcmRlci1sZy01e29yZGVyOjV9LmNsci1vcmRlci1sZy02e29yZGVyOjZ9LmNsci1vcmRlci1sZy03e29yZGVyOjd9LmNsci1vcmRlci1sZy04e29yZGVyOjh9LmNsci1vcmRlci1sZy05e29yZGVyOjl9LmNsci1vcmRlci1sZy0xMHtvcmRlcjoxMH0uY2xy''@;'; put 'put ''LW9yZGVyLWxnLTExe29yZGVyOjExfS5jbHItb3JkZXItbGctMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtbGctMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LWxnLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2Njcl''@;'; put 'put ''fS5jbHItb2Zmc2V0LWxnLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LWxnLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbGctNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1sZy02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNl''@;'; put 'put ''dC1sZy03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbGctOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtbGctMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZz''@;'; put 'put ''ZXQtbGctMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1jb2wteGx7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLXhsLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0''@;'; put 'put ''aDpub25lfS5jbHItY29sLXhsLTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC14bC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lk''@;'; put 'put ''dGg6MjUlfS5jbHItY29sLXhsLTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLXhsLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTZ7ZmxleDowIDAgNTAlO21heC13''@;'; put 'put ''aWR0aDo1MCV9LmNsci1jb2wteGwtN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtOXtmbGV4OjAgMCA3NSU7bWF4''@;'; put 'put ''LXdpZHRoOjc1JX0uY2xyLWNvbC14bC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTEye2ZsZXg6MCAwIDEw''@;'; put 'put ''MCU7bWF4LXdpZHRoOjEwMCV9LmNsci1vcmRlci14bC1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLXhsLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci14bC0we29yZGVyOjB9LmNsci1vcmRlci14bC0xe29yZGVyOjF9LmNsci1vcmRlci14bC0ye29yZGVyOjJ9LmNsci1vcmRlci14bC0ze29y''@;'; put 'put ''ZGVyOjN9LmNsci1vcmRlci14bC00e29yZGVyOjR9LmNsci1vcmRlci14bC01e29yZGVyOjV9LmNsci1vcmRlci14bC02e29yZGVyOjZ9LmNsci1vcmRlci14bC03e29yZGVyOjd9LmNsci1vcmRlci14bC04e29yZGVyOjh9LmNsci1vcmRlci14bC05e29yZGVyOjl9LmNsci1vcmRlci14bC0x''@;'; put 'put ''MHtvcmRlcjoxMH0uY2xyLW9yZGVyLXhsLTExe29yZGVyOjExfS5jbHItb3JkZXIteGwtMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQteGwtMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LXhsLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC0ye21hcmdpbi1sZWZ0''@;'; put 'put ''OjE2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXhsLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LXhsLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQteGwtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC14bC02e21hcmdpbi1sZWZ0''@;'; put 'put ''OjUwJX0uY2xyLW9mZnNldC14bC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXhsLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQteGwtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQteGwtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMz''@;'; put 'put ''MzMzMyV9LmNsci1vZmZzZXQteGwtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fS5jbHItYnJlYWstcm93e3dpZHRoOjEwMCV9Kiw6YmVmb3JlLDphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9cHJle21hcmdpbjouNnJlbSAwfXByZXtib3JkZXItY29sb3I6I2NjYztib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwLCAjY2NjY2NjKTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFk''@;'; put 'put ''aXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pfXByZSBjb2Rle3doaXRlLXNwYWNlOnByZX1jb2RlLmNsci1jb2Rle2NvbG9yOiNjMjFkMDA7Y29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci04MDAsICNjMjFkMDApO3BhZGRpbmc6MDtiYWNrZ3JvdW5kOjAgMH11''@;'; put 'put ''bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKXtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGUtcG9zaXRpb246b3V0c2lkZX11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKSBsaTo6bWFya2Vye2NvbG9yOnRyYW5zcGFyZW50fXVsOm5vdChbY2RzLWxp''@;'; put 'put ''c3RdKSxvbDpub3QoW2Nkcy1saXN0XSl7bGlzdC1zdHlsZS1wb3NpdGlvbjppbnNpZGU7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctbGVmdDowfXVsLmxpc3Q6bm90KFtjZHMtbGlzdF0pLG9sLmxpc3Q6bm90KFtjZHMtbGlzdF0pe2xpc3Qtc3R5''@;'; put 'put ''bGUtcG9zaXRpb246b3V0c2lkZTttYXJnaW4tbGVmdDoxLjFlbX11bC5saXN0Om5vdChbY2RzLWxpc3RdKS5jb21wYWN0LG9sLmxpc3Q6bm90KFtjZHMtbGlzdF0pLmNvbXBhY3R7bGluZS1oZWlnaHQ6LjlyZW19dWwubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saSxvbC5saXN0Om5v''@;'; put 'put ''dChbY2RzLWxpc3RdKS5jb21wYWN0Pmxpe21hcmdpbi1ib3R0b206LjNyZW19dWwubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saTpsYXN0LWNoaWxkLG9sLmxpc3Q6bm90KFtjZHMtbGlzdF0pLmNvbXBhY3Q+bGk6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9dWw6bm90KC5saXN0''@;'; put 'put ''LXVuc3R5bGVkKTpub3QoW2Nkcy1saXN0XSk+bGk+dWwubGlzdC11bnN0eWxlZCxvbDpub3QoW2Nkcy1saXN0XSk+bGk+dWwubGlzdC11bnN0eWxlZHttYXJnaW4tbGVmdDoxLjFlbX1saT51bDpub3QoW2Nkcy1saXN0XSl7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjEuMWVtfXVsLmxpc3Qt''@;'; put 'put ''Z3JvdXA6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MH11bDpub3QoW2Nkcy1saXN0XSkubGlzdC1zcGFjZXIsb2w6bm90KFtjZHMtbGlzdF0pLmxpc3Qtc3BhY2Vye21hcmdpbi10b3A6MS4ycmVtfWgxOm5vdChbY2RzLXRleHRdKXtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1oMS1j''@;'; put 'put ''b2xvciwgYmxhY2spO2ZvbnQtd2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItaDEtZm9udC13ZWlnaHQsIDIwMCk7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcyxBdmVuaXIgTmV4dCxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oMS1m''@;'; put 'put ''b250LWZhbWlseSwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZToxLjZyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjIuNHJlbTttYXJnaW4tdG9wOjEuMnJlbTttYXJnaW4tYm90dG9t''@;'; put 'put ''OjB9aDI6bm90KFtjZHMtdGV4dF0pe2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xyLWgyLWNvbG9yLCBibGFjayk7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMi1mb250LXdlaWdodCwgMjAwKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5pciBOZXh0LEhlbHZl''@;'; put 'put ''dGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWgyLWZvbnQtZmFtaWx5LCBNZXRyb3BvbGlzLCAiQXZlbmlyIE5leHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgc2Fucy1zZXJpZik7Zm9udC1zaXplOjEuNHJlbTtsZXR0ZXItc3BhY2luZzpub3Jt''@;'; put 'put ''YWw7bGluZS1oZWlnaHQ6Mi40cmVtO21hcmdpbi10b3A6MS4ycmVtO21hcmdpbi1ib3R0b206MH1oMzpub3QoW2Nkcy10ZXh0XSl7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItaDMtY29sb3IsIGJsYWNrKTtmb250LXdlaWdodDoyMDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgzLWZvbnQt''@;'; put 'put ''d2VpZ2h0LCAyMDApO2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXMsQXZlbmlyIE5leHQsSGVsdmV0aWNhIE5ldWUsQXJpYWwsc2Fucy1zZXJpZjtmb250LWZhbWlseTp2YXIoLS1jbHItaDMtZm9udC1mYW1pbHksIE1ldHJvcG9saXMsICJBdmVuaXIgTmV4dCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEFy''@;'; put 'put ''aWFsLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS4xcmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWg0Om5vdChbY2RzLXRleHRdKXtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1oNC1jb2xvciwg''@;'; put 'put ''YmxhY2spO2ZvbnQtd2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItaDQtZm9udC13ZWlnaHQsIDIwMCk7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcyxBdmVuaXIgTmV4dCxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oNC1mb250LWZh''@;'; put 'put ''bWlseSwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZTouOXJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS4ycmVtO21hcmdpbi10b3A6MS4ycmVtO21hcmdpbi1ib3R0b206MH1oNTpu''@;'; put 'put ''b3QoW2Nkcy10ZXh0XSl7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItaDUtY29sb3IsICM2NjY2NjYpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItaDUtZm9udC13ZWlnaHQsIDQwMCk7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcyxBdmVuaXIgTmV4dCxIZWx2ZXRpY2Eg''@;'; put 'put ''TmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oNS1mb250LWZhbWlseSwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZTouOHJlbTtsZXR0ZXItc3BhY2luZzouMDFlbTtsaW5l''@;'; put 'put ''LWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWg2Om5vdChbY2RzLXRleHRdKXtjb2xvcjojMzMzO2NvbG9yOnZhcigtLWNsci1oNi1jb2xvciwgIzMzMzMzMyk7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNi1mb250LXdlaWdo''@;'; put 'put ''dCwgNTAwKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5pciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWg2LWZvbnQtZmFtaWx5LCBNZXRyb3BvbGlzLCAiQXZlbmlyIE5leHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwg''@;'; put 'put ''c2Fucy1zZXJpZik7Zm9udC1zaXplOi43cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHk6bm90KFtjZHMtdGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXAxLWNvbG9yLCAjNjY2''@;'; put 'put ''NjY2KTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXAxLWZvbnQtd2VpZ2h0LCA0MDApO2ZvbnQtc2l6ZTouN3JlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS4ycmVtO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5p''@;'; put 'put ''ciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQsIE1ldHJvcG9saXMsICJBdmVuaXIgTmV4dCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmKTttYXJnaW4tdG9wOjAhaW1wb3J0YW50fWJvZHkgcDpub3Qo''@;'; put 'put ''W2Nkcy10ZXh0XSl7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3IsICM2NjY2NjYpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQsIDQwMCk7Zm9udC1zaXplOi43cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdo''@;'; put 'put ''dDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHkgLnAwOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDA6bm90KFtjZHMtdGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXAwLWNvbG9yLCAjNjY2NjY2KTtmb250LXdlaWdodDoyMDA7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLXAwLWZvbnQtd2VpZ2h0LCAyMDApO2ZvbnQtc2l6ZToxcmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHkgLnAyOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDI6bm90KFtj''@;'; put 'put ''ZHMtdGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXAyLWNvbG9yLCAjNjY2NjY2KTtmb250LXdlaWdodDo1MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXAyLWZvbnQtd2VpZ2h0LCA1MDApO2ZvbnQtc2l6ZTouNjVyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0''@;'; put 'put ''OjEuMnJlbTttYXJnaW4tdG9wOjEuMnJlbTttYXJnaW4tYm90dG9tOjB9Ym9keSAucDM6bm90KFtjZHMtdGV4dF0pLGJvZHkgcC5wMzpub3QoW2Nkcy10ZXh0XSl7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItcDMtY29sb3IsICM2NjY2NjYpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItcDMtZm9udC13ZWlnaHQsIDQwMCk7Zm9udC1zaXplOi42NXJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS4ycmVtO21hcmdpbi10b3A6MS4ycmVtO21hcmdpbi1ib3R0b206MH1ib2R5IC5wNDpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnA0Om5vdChb''@;'; put 'put ''Y2RzLXRleHRdKXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1wNC1jb2xvciwgIzY2NjY2Nik7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNC1mb250LXdlaWdodCwgNjAwKTtmb250LXNpemU6LjZyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0''@;'; put 'put ''OjEuMnJlbTttYXJnaW4tdG9wOjEuMnJlbTttYXJnaW4tYm90dG9tOjB9Ym9keSAucDU6bm90KFtjZHMtdGV4dF0pLGJvZHkgcC5wNTpub3QoW2Nkcy10ZXh0XSl7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItcDUtY29sb3IsICM2NjY2NjYpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItcDUtZm9udC13ZWlnaHQsIDQwMCk7Zm9udC1zaXplOi42cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHkgLnA2Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDY6bm90KFtj''@;'; put 'put ''ZHMtdGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXA2LWNvbG9yLCAjNjY2NjY2KTtmb250LXdlaWdodDo2MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXA2LWZvbnQtd2VpZ2h0LCA2MDApO2ZvbnQtc2l6ZTouNTVyZW07bGV0dGVyLXNwYWNpbmc6LjAzZW07bGluZS1oZWlnaHQ6''@;'; put 'put ''LjZyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHkgLnA3Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDc6bm90KFtjZHMtdGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXA3LWNvbG9yLCAjNjY2NjY2KTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2xyLXA3LWZvbnQtd2VpZ2h0LCA0MDApO2ZvbnQtc2l6ZTouNTVyZW07bGV0dGVyLXNwYWNpbmc6LjAzZW07bGluZS1oZWlnaHQ6LjZyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHkgLnA4Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDg6bm90KFtjZHMt''@;'; put 'put ''dGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXA4LWNvbG9yLCAjNjY2NjY2KTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXA4LWZvbnQtd2VpZ2h0LCA0MDApO2ZvbnQtc2l6ZTouNXJlbTtsZXR0ZXItc3BhY2luZzouMDNlbTtsaW5lLWhlaWdodDouNnJl''@;'; put 'put ''bTttYXJnaW4tdG9wOjEuMnJlbTttYXJnaW4tYm90dG9tOjB9LnRleHQtbGlnaHR7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1saWdodCwgMjAwKX0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udGV4dC1jZW50ZXJ7dGV4''@;'; put 'put ''dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0udGV4dC1qdXN0aWZ5e3RleHQtYWxpZ246anVzdGlmeSFpbXBvcnRhbnR9aHRtbDpub3QoW2Nkcy10ZXh0XSl7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItZ2xvYmFsLWZvbnQt''@;'; put 'put ''Y29sb3IsICM2NjY2NjYpO2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXMsQXZlbmlyIE5leHQsSGVsdmV0aWNhIE5ldWUsQXJpYWwsc2Fucy1zZXJpZjtmb250LWZhbWlseTp2YXIoLS1jbHItZm9udCwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNh''@;'; put 'put ''bnMtc2VyaWYpO2ZvbnQtc2l6ZToxMjUlfTpyb290ey0tY2xyLWxpbmstYWN0aXZlLWNvbG9yOnZhcigtLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTUwMCk7LS1jbHItbGluay1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItbGluay1ob3Zlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItbGluay12aXNpdGVkLWNvbG9yOmhzbCgyMzgsIDQxJSwgNTMlKTstLWNsci1jdXN0b20tbGlua3MtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwKX1odG1se2JveC1zaXppbmc6Ym9yZGVyLWJveH0qLDpiZWZvcmUs''@;'; put 'put ''OmFmdGVye2JveC1zaXppbmc6aW5oZXJpdH1odG1sey1tcy1vdmVyZmxvdy1zdHlsZTpzY3JvbGxiYXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWltZ3t2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9W3JvbGU9YnV0dG9uXXtjdXJzb3I6cG9pbnRlcn1hLGFyZWEsYnV0''@;'; put 'put ''dG9uLFtyb2xlPWJ1dHRvbl0saW5wdXQsbGFiZWwsc2VsZWN0LHN1bW1hcnksdGV4dGFyZWF7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbn1idXR0b246Zm9jdXN7b3V0bGluZToycHggc29saWQgLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OjFweH1idXR0b246LW1v''@;'; put 'put ''ei1mb2N1c3JpbmcsW3R5cGU9YnV0dG9uXTotbW96LWZvY3VzcmluZyxbdHlwZT1yZXNldF06LW1vei1mb2N1c3JpbmcsW3R5cGU9c3VibWl0XTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjJweCBzb2xpZCBIaWdobGlnaHQ7b3V0bGluZS1vZmZzZXQ6MXB4fWlucHV0LGJ1dHRvbixzZWxlY3Qs''@;'; put 'put ''dGV4dGFyZWF7Ym9yZGVyLXJhZGl1czowfWlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkLGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1pbnB1dFt0eXBlPWRhdGVdLGlucHV0W3R5cGU9dGltZV0saW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0saW5w''@;'; put 'put ''dXRbdHlwZT1tb250aF17LXdlYmtpdC1hcHBlYXJhbmNlOmxpc3Rib3h9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWZpZWxkc2V0e21pbi13aWR0aDowO3BhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MH1sZWdlbmR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmc6MDtsaW5lLWhl''@;'; put 'put ''aWdodDppbmhlcml0fWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRse21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjFyZW19dGFibGV7Ym9yZGVyLXNwYWNpbmc6MH1hOmxpbmt7Y29sb3I6IzAwNzJh''@;'; put 'put ''Mztjb2xvcjp2YXIoLS1jbHItbGluay1jb2xvciwgIzAwNzJhMyl9YTp2aXNpdGVke2NvbG9yOiM1NjU5Yjg7Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvciwgIzU2NTliOCl9YTp2aXNpdGVkOmhvdmVye2NvbG9yOiM1NjU5Yjg7Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRl''@;'; put 'put ''ZC1jb2xvci1ob3ZlciwgIzU2NTliOCl9YTpob3Zlcntjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yLCAjMDA3MmEzKX1hOmFjdGl2ZXtjb2xvcjojOWU1N2JjO2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvciwgIzllNTdiYyl9LmNsci1zci1v''@;'; put 'put ''bmx5e3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uYWxlcnQt''@;'; put 'put ''aWNvbiwuY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxlfS5hbGVydC1pY29uLmNsci1pY29u''@;'; put 'put ''LXdhcm5pbmcsLmFsZXJ0LWljb24uaWNvbi13YXJuaW5nLC5jbHItaWNvbi5jbHItaWNvbi13YXJuaW5nLC5jbHItaWNvbi5pY29uLXdhcm5pbmd7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2ZXJzaW9uJTNEJTIyMS4xJTIy''@;'; put 'put ''JTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAyNiUyMiUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUyMG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJG''@;'; put 'put ''JTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUyMHR5cGUlM0QlMjJ0ZXh0JTJGY3NzJTIyJTNFJTBBJTA5LmNsci1pLW91dGxpbmUlN0JmaWxsLXJ1bGUlM0FldmVub2RkJTNCY2xpcC1ydWxlJTNBZXZlbm9kZCUzQmZpbGwlM0ElMjM3NDc0NzQl''@;'; put 'put ''M0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0N0aXRsZSUzRWV4Y2xhbWF0aW9uLXRyaWFuZ2xlLWxpbmUlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMSUyMiUyMGQlM0QlMjJNMTglMkMyMS4zMmExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxLjMtMS4zVjE0YTEuMyUyQzEuMyUyQzAlMkMxJTJDMC0yLjYlMkMw''@;'; put 'put ''djZBMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMTglMkMyMS4zMlolMjIlM0UlM0MlMkZwYXRoJTNFJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTIlMjIlMjBjeCUzRCUyMjE3Ljk1JTIyJTIwY3klM0QlMjIyNC4yNyUyMiUyMHIlM0Ql''@;'; put 'put ''MjIxLjUlMjIlM0UlM0MlMkZjaXJjbGUlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTMlMjIlMjBkJTNEJTIyTTMwLjMzJTJDMjUuNTQlMkMyMC41OSUyQzcuNmEzJTJDMyUyQzAlMkMwJTJDMC01LjI3JTJDMEw1LjU3JTJDMjUuNTRB''@;'; put 'put ''MyUyQzMlMkMwJTJDMCUyQzAlMkM4LjIxJTJDMzBIMjcuNjlhMyUyQzMlMkMwJTJDMCUyQzAlMkMyLjY0LTQuNDNabS0xLjc4JTJDMS45NGExJTJDMSUyQzAlMkMwJTJDMS0uODYuNDlIOC4yMWExJTJDMSUyQzAlMkMwJTJDMS0uODgtMS40OEwxNy4wNyUyQzguNTVhMSUyQzElMkMwJTJDMCUy''@;'; put 'put ''QzElMkMxLjc2JTJDMGw5Ljc0JTJDMTcuOTRBMSUyQzElMkMwJTJDMCUyQzElMkMyOC41NSUyQzI3LjQ4WiUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZzdmclM0UpfS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmctd2hp''@;'; put 'put ''dGUsLmNsci1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAyNiUyMiUyMHByZXNlcnZlQXNw''@;'; put 'put ''ZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUyMG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUzQ2RlZnMlM0UlM0Nz''@;'; put 'put ''dHlsZSUyMHR5cGUlM0QlMjJ0ZXh0JTJGY3NzJTIyJTNFJTBBJTA5LmNsci1pLW91dGxpbmUlN0JmaWxsLXJ1bGUlM0FldmVub2RkJTNCY2xpcC1ydWxlJTNBZXZlbm9kZCUzQmZpbGwlM0F3aGl0ZSUzQiU3RCUzQyUyRnN0eWxlJTNFJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFZXhjbGFtYXRpb24tdHJpYW5nbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGlu''@;'; put 'put ''ZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzIxLjMyYTEuMyUyQzEuMyUyQzAlMkMwJTJDMCUyQzEuMy0xLjNWMTRhMS4zJTJDMS4zJTJDMCUyQzElMkMwLTIuNiUyQzB2NkExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxOCUyQzIxLjMyWiUyMiUzRSUzQyUyRnBh''@;'; put 'put ''dGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMiUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUzRCUyMjI0LjI3JTIyJTIwciUzRCUyMjEuNSUyMiUzRSUzQyUyRmNpcmNsZSUzRSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1p''@;'; put 'put ''LW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGQlM0QlMjJNMzAuMzMlMkMyNS41NCUyQzIwLjU5JTJDNy42YTMlMkMzJTJDMCUyQzAlMkMwLTUuMjclMkMwTDUuNTclMkMyNS41NEEzJTJDMyUyQzAlMkMwJTJDMCUyQzguMjElMkMzMEgyNy42OWEzJTJDMyUyQzAlMkMwJTJD''@;'; put 'put ''MCUyQzIuNjQtNC40M1ptLTEuNzglMkMxLjk0YTElMkMxJTJDMCUyQzAlMkMxLS44Ni40OUg4LjIxYTElMkMxJTJDMCUyQzAlMkMxLS44OC0xLjQ4TDE3LjA3JTJDOC41NWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNzYlMkMwbDkuNzQlMkMxNy45NEExJTJDMSUyQzAlMkMwJTJDMSUyQzI4LjU1''@;'; put 'put ''JTJDMjcuNDhaJTIyJTNFJTNDJTJGcGF0aCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSl9LmFsZXJ0LWljb24uY2xyLXZtdy1sb2dvLC5jbHItaWNvbi5jbHItdm13LWxvZ297YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3Zn''@;'; put 'put ''K3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJG''@;'; put 'put ''JTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFdm0lMjBidWclM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIySGVhZGVycyUyMiUyMHN0''@;'; put 'put ''cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyQ0wtSGVhZGVycy1TcGVjcyUyMiUyMHRyYW5zZm9y''@;'; put 'put ''bSUzRCUyMnRyYW5zbGF0ZSgtMjYyLjAwMDAwMCUyQyUyMC0xNzUuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMjAxJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlKDIzOC4wMDAwMDAlMkMlMjAxNjMuMDAwMDAw''@;'; put 'put ''KSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMnZtLWJ1ZyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgyNC43MDMxMjUlMkMlMjAxMi4wMDAwMDApJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGlkJTNEJTIyUmVjdGFuZ2xlLTQyJTIyJTIwZmlsbC1vcGFjaXR5JTNEJTIyMC4yNSUyMiUyMGZpbGwlM0QlMjIlMjNEREREREQlMjIlMjBvcGFjaXR5JTNEJTIyMC42JTIyJTIweCUzRCUyMjAlMjIlMjB5''@;'; put 'put ''JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMzYlMjIlMjBoZWlnaHQlM0QlMjIzNiUyMiUyMHJ4JTNEJTIyMyUyMiUzRSUzQyUyRnJlY3QlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk03LjYz''@;'; put 'put ''OTQ4Mzc2JTJDMTMuODc2MjQwMiUyMEM3LjMyMjY1MzI0JTJDMTMuMjA5NzA4MiUyMDYuNTM5NzgxNTIlMkMxMi45MDg1MTM5JTIwNS44MDkyMzA0MiUyQzEzLjIxOTkzNCUyMEM1LjA3NzcxMDQzJTJDMTMuNTMyMjgzNyUyMDQuODA5MzI0OTUlMkMxNC4zMTAzNjkxJTIwNS4xMzk3MjAwNyUy''@;'; put 'put ''QzE0Ljk3NjkwMTElMjBMOC4yMDcyNTk1NCUyQzIxLjM3NDQ5MjMlMjBDOC42ODk3NzIwNyUyQzIyLjM3ODQ3MzUlMjA5LjE5ODQ0NDkxJTJDMjIuOTAzNzA0NCUyMDEwLjE1MjgxMjElMkMyMi45MDM3MDQ0JTIwQzExLjE3MjA5NTUlMkMyMi45MDM3MDQ0JTIwMTEuNjE2ODIwOSUyQzIyLjMz''@;'; put 'put ''MTA2MzMlMjAxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMEMxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMDE0Ljc3NDQ2ODIlMkMxNS43ODQ3MzQxJTIwMTQuODAxNTk3NCUyQzE1LjcyNjE2ODUlMjBDMTQuODI4NzI2NiUyQzE1LjY2NjY3MzMlMjAxNC45MTQ5NTg4JTJDMTUuNDg2MzI4NiUy''@;'; put 'put ''MDE1LjE4NzIxOTklMkMxNS40ODcyNTgyJTIwQzE1LjQxNzgxODIlMkMxNS40OTAwNDclMjAxNS42MTA2Mjk0JTJDMTUuNjY1NzQzNyUyMDE1LjYxMDYyOTQlMkMxNS45MDE4NjUyJTIwTDE1LjYxMDYyOTQlMkMyMS4zNjk4NDQzJTIwQzE1LjYxMDYyOTQlMkMyMi4yMTIwNzMlMjAxNi4wOTc5''@;'; put 'put ''ODY1JTJDMjIuOTAzNzA0NCUyMDE3LjAzNDkxMzQlMkMyMi45MDM3MDQ0JTIwQzE3Ljk3MTg0MDMlMkMyMi45MDM3MDQ0JTIwMTguNDc4NTc1NCUyQzIyLjIxMjA3MyUyMDE4LjQ3ODU3NTQlMkMyMS4zNjk4NDQzJTIwTDE4LjQ3ODU3NTQlMkMxNi44OTY1NTAzJTIwQzE4LjQ3ODU3NTQlMkMx''@;'; put 'put ''Ni4wMzM4NzAyJTIwMTkuMTIxOTI1NCUyQzE1LjQ3NDI0MzYlMjAyMC4wMDA3MTgzJTJDMTUuNDc0MjQzNiUyMEMyMC44Nzg1NDIzJTJDMTUuNDc0MjQzNiUyMDIxLjQ2Mzc1ODMlMkMxNi4wNTI0NjI0JTIwMjEuNDYzNzU4MyUyQzE2Ljg5NjU1MDMlMjBMMjEuNDYzNzU4MyUyQzIxLjM2OTg0''@;'; put 'put ''NDMlMjBDMjEuNDYzNzU4MyUyQzIyLjIxMjA3MyUyMDIxLjk1MjA4NDIlMkMyMi45MDM3MDQ0JTIwMjIuODg4MDQyMyUyQzIyLjkwMzcwNDQlMjBDMjMuODI0MDAwMyUyQzIyLjkwMzcwNDQlMjAyNC4zMzI2NzMxJTJDMjIuMjEyMDczJTIwMjQuMzMyNjczMSUyQzIxLjM2OTg0NDMlMjBMMjQu''@;'; put 'put ''MzMyNjczMSUyQzE2Ljg5NjU1MDMlMjBDMjQuMzMyNjczMSUyQzE2LjAzMzg3MDIlMjAyNC45NzUwNTQzJTJDMTUuNDc0MjQzNiUyMDI1Ljg1Mzg0NzIlMkMxNS40NzQyNDM2JTIwQzI2LjczMDcwMjMlMkMxNS40NzQyNDM2JTIwMjcuMzE2ODg3MSUyQzE2LjA1MjQ2MjQlMjAyNy4zMTY4ODcx''@;'; put 'put ''JTJDMTYuODk2NTUwMyUyMEwyNy4zMTY4ODcxJTJDMjEuMzY5ODQ0MyUyMEMyNy4zMTY4ODcxJTJDMjIuMjEyMDczJTIwMjcuODA1MjEzMSUyQzIyLjkwMzcwNDQlMjAyOC43NDIxNCUyQzIyLjkwMzcwNDQlMjBDMjkuNjc3MTI5MSUyQzIyLjkwMzcwNDQlMjAzMC4xODQ4MzMxJTJDMjIuMjEy''@;'; put 'put ''MDczJTIwMzAuMTg0ODMzMSUyQzIxLjM2OTg0NDMlMjBMMzAuMTg0ODMzMSUyQzE2LjI3ODM1ODIlMjBDMzAuMTg0ODMzMSUyQzE0LjQwNzA0ODglMjAyOC42MTgxMjA3JTJDMTMuMDk2Mjk1NiUyMDI2LjczMDcwMjMlMkMxMy4wOTYyOTU2JTIwQzI0Ljg0NTIyMTYlMkMxMy4wOTYyOTU2JTIw''@;'; put 'put ''MjMuNjY1MTAwNiUyQzE0LjM0NzU1MzYlMjAyMy42NjUxMDA2JTJDMTQuMzQ3NTUzNiUyMEMyMy4wMzcyNTMlMkMxMy41NjY2NzkzJTIwMjIuMTcyMDI0NyUyQzEzLjA5NzIyNTIlMjAyMC43MDg5ODQ3JTJDMTMuMDk3MjI1MiUyMEMxOS4xNjQ1NTclMkMxMy4wOTcyMjUyJTIwMTcuODEyOTQw''@;'; put 'put ''NiUyQzE0LjM0NzU1MzYlMjAxNy44MTI5NDA2JTJDMTQuMzQ3NTUzNiUyMEMxNy4xODQxMjQxJTJDMTMuNTY2Njc5MyUyMDE2LjExNTQyNjclMkMxMy4wOTcyMjUyJTIwMTUuMjMwODIwNCUyQzEzLjA5NzIyNTIlMjBDMTMuODYxNzYzOCUyQzEzLjA5NzIyNTIlMjAxMi43NzQ2NTcyJTJDMTMu''@;'; put 'put ''Njc1NDQ0JTIwMTIuMTExOTI5MiUyQzE1LjEzMDI4NzElMjBMMTAuMTUyODEyMSUyQzE5LjU2MDgxODklMjBMNy42Mzk0ODM3NiUyQzEzLjg3NjI0MDIlMjIlMjBpZCUzRCUyMkZpbGwtNCUyMiUyMGZpbGwlM0QlMjIlMjNGRkZGRkYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUzQyUy''@;'; put 'put ''RnN2ZyUzRSIpfS5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDotY29udmVydEJhc2VsaW5lVG9CYXNlMjAoMSkhaW1wb3J0''@;'; put 'put ''YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAtY29udmVydEJhc2VsaW5lVG9CYXNlMjAoMSkgMCFpbXBvcnRhbnR9LmNsci1wb3BvdmVyLWNvbnRlbnR7cG9zaXRpb246Zml4ZWQ7''@;'; put 'put ''ei1pbmRleDoxMDUwfTpyb290ey0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW46LjNyZW07LS1jbHItYnRuLWhvcml6b250YWwtbWFyZ2luOi42cmVtOy0tY2xyLWJ0bi1ob3Jpem9udGFsLXBhZGRpbmc6LjZyZW07LS1jbHItYnRuLXZlcnRpY2FsLXBhZGRpbmc6MDstLWNsci1idG4tcGFkZGlu''@;'; put 'put ''Zzp2YXIoLS1jbHItYnRuLXZlcnRpY2FsLXBhZGRpbmcpIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1wYWRkaW5nKTstLWNsci1idG4taGVpZ2h0OjEuOHJlbTstLWNsci1idG4taGVpZ2h0LXNtOjEuMnJlbTstLWNsci1idG4tZm9udC13ZWlnaHQ6NTAwOy0tY2xyLWJ0bi1ib3JkZXItcmFk''@;'; put 'put ''aXVzOi4xNXJlbTstLWNsci1idG4tYm9yZGVyLXdpZHRoOi4wNXJlbTstLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcjp0cmFuc3BhcmVudDstLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1saW5lLWhlaWdodDoxLjE1cmVtOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWZvbnQt''@;'; put 'put ''c2l6ZTouNTVyZW07LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtZm9udC13ZWlnaHQ6NTAwOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodDoxLjJyZW07LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZzowIC42cmVtOy0tY2xyLWJ0bi1hcHBlYXJh''@;'; put 'put ''bmNlLXN0YW5kYXJkLWljb24tc2l6ZTouNnJlbTstLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLWxpbmUtaGVpZ2h0OjEuOHJlbTstLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLWxldHRlci1zcGFjaW5nOi4xMmVtOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tZm9udC1zaXplOi42cmVtOy0t''@;'; put 'put ''Y2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tZm9udC13ZWlnaHQ6NTAwOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0taGVpZ2h0OjEuOHJlbTstLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLXBhZGRpbmc6MCAuNnJlbTstLWNsci1idG4tZGVmYXVsdC1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0''@;'; put 'put ''aW9uLTYwMCk7LS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01''@;'; put 'put ''MCk7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi04MDApOy0tY2xyLWJ0bi1kZWZhdWx0LWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MDApOy0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci1i''@;'; put 'put ''dG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFj''@;'; put 'put ''dGlvbi02MDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTUwKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tODAwKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJveC1zaGFkb3ctY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1v''@;'; put 'put ''dXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJ0bi1wcmltYXJ5LWJnLWNvbG9yOnZhcigtLWNsci1j''@;'; put 'put ''b2xvci1hY3Rpb24tNjAwKTstLWNsci1idG4tcHJpbWFyeS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDApOy0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tODAwKTstLWNsci1idG4tcHJpbWFyeS1ob3Zlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTUwKTstLWNsci1idG4tcHJpbWFyeS1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNTAwKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLWJ0bi1w''@;'; put 'put ''cmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1idG4tc3VjY2Vzcy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItY29sb3Itc3VjY2Vzcy03MDApOy0tY2xyLWJ0bi1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1zdWNjZXNzLTgwMCk7LS1jbHItYnRuLXN1Y2Nlc3Mt''@;'; put 'put ''aG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNsci1jb2xvci1zdWNjZXNzLTkwMCk7LS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAw''@;'; put 'put ''KTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtYmct''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcjp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy03MDAp''@;'; put 'put ''Oy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy03MDApOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92''@;'; put 'put ''ZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTApOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtOTAwKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9y''@;'; put 'put ''LXN1Y2Nlc3MtNDAwKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1iZy1jb2xv''@;'; put 'put ''cik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYm9yZGVyLWNvbG9y''@;'; put 'put ''KTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItYnRuLWRhbmdlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5n''@;'; put 'put ''ZXItNzAwKTstLWNsci1idG4tZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItYnRuLWRhbmdlci1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItOTAwKTstLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYnRuLWRhbmdlci1kaXNh''@;'; put 'put ''YmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5n''@;'; put 'put ''ZXItODAwKTstLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTcwMCk7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItMTAwKTstLWNs''@;'; put 'put ''ci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci05MDApOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItMjAwKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWNv''@;'; put 'put ''bG9yLW5ldXRyYWwtMCk7LS1jbHItYnRuLXdhcm5pbmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItYnRuLXdhcm5pbmctYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci03MDApOy0tY2xyLWJ0bi13YXJuaW5nLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWRhbmdlci1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci04MDApOy0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKTstLWNsci1idG4td2FybmluZy1ib3gtc2hhZG93''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItOTAwKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1j''@;'; put 'put ''bHItYnRuLXdhcm5pbmctZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTcwMCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi13YXJu''@;'; put 'put ''aW5nLW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItODAwKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItMTAwKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1jb2xvci1kYW5nZXItOTAwKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci0yMDApOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTst''@;'; put 'put ''LWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJs''@;'; put 'put ''ZWQtY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJ0bi1saW5rLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwKTstLWNsci1idG4tbGluay1iZy1jb2xvcjp0cmFuc3BhcmVudDstLWNsci1idG4tbGluay1ib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItYnRuLWxpbmst''@;'; put 'put ''aG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi04MDApOy0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItYnRuLWxpbmstZGlzYWJs''@;'; put 'put ''ZWQtYm9yZGVyLWNvbG9yOnRyYW5zcGFyZW50Oy0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTgwMCk7LS1jbHItYnRuLWludmVyc2UtY29sb3I6dmFyKC0tY2xyLWNv''@;'; put 'put ''bG9yLW5ldXRyYWwtMCk7LS1jbHItYnRuLWludmVyc2UtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJ0bi1pbnZlcnNlLWJnLWNvbG9yOnRyYW5zcGFyZW50Oy0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWJnLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwg''@;'; put 'put ''LjE1KTstLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1idG4taW52ZXJzZS1ib3gtc2hhZG93LWNvbG9yOnJnYmEoMCwgMCwgMCwgLjI1KTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItY29sb3It''@;'; put 'put ''bmV1dHJhbC0wKTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYmctY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1idG4taW52ZXJzZS1j''@;'; put 'put ''aGVja2VkLWJnLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KTstLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJ0bi1pY29uLWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xv''@;'; put 'put ''ciwgIzY2NjY2Nik7LS1jbHItYnRuLWdyb3VwLWZvY3VzLW91dGxpbmU6IzUxY2JlZX0uYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigt''@;'; put 'put ''LWNsci1idG4tYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItYnRuLWJvcmRlci13aWR0aCwgLjA1cmVtKTtib3JkZXItc3R5bGU6c29saWQ7bWluLXdpZHRoOjMuNnJlbTttYXgtd2lkdGg6MThyZW07d2hpdGUtc3BhY2U6''@;'; put 'put ''bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWNvbG9yOiMwMDcyYTM7Ym9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGVmYXVsdC1ib3JkZXItY29sb3IsICMwMDcyYTMpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYmctY29sb3IsIHRyYW5zcGFyZW50KTtjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1jb2xvciwgIzAwNzJhMyk7bGluZS1oZWlnaHQ6MS44cmVtO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLWxpbmUtaGVpZ2h0LCAxLjhyZW0pO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZvbnQtc2l6ZTouNnJlbTtmb250LXNpemU6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tZm9udC1zaXplLCAuNnJlbSk7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLWZvbnQtd2VpZ2h0LCA1MDApO2hlaWdodDoxLjhyZW07aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1m''@;'; put 'put ''b3JtLWhlaWdodCwgMS44cmVtKTtwYWRkaW5nOjAgLjZyZW07cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1wYWRkaW5nLCAwIC42cmVtKX0uYnRuOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5idG4gY2RzLWljb24sLmJ0biBjbHItaWNvbntjb2xvcjojMDA3MmEz''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvciwgIzAwNzJhMyl9LmJ0bjp2aXNpdGVke2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yLCAjMDA3MmEzKX0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2UzZjVmYztiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1iZy1jb2xvciwgI2UzZjVmYyk7Y29sb3I6IzAwNTY3YTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IsICMwMDU2N2EpfS5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMXJlbSAjMTc5YmQzIGluc2V0O2JveC1z''@;'; put 'put ''aGFkb3c6MCAuMXJlbSAwIDAgdmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJveC1zaGFkb3ctY29sb3IsICMxNzliZDMpIGluc2V0fS5idG4uZGlzYWJsZWQsLmJ0bjpkaXNhYmxlZHtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvciwgIzY2NjY2Nik7''@;'; put 'put ''Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2JvcmRlci1jb2xvcjojOGM4YzhjO2JvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCAjOGM4YzhjKTtib3gtc2hhZG93Om5vbmV9LmJ0bi1ncm91cD4uYnRuIGNsci1pY29uLC5idG4gY2xyLWljb257dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLS4xcmVtLDApfS5idG4tZ3JvdXA+LmJ0biBjZHMtaWNv''@;'; put 'put ''biwuYnRuIGNkcy1pY29ue21hcmdpbi10b3A6LS4xNHJlbX0uYnRuLmJ0bi1zZWNvbmRhcnksLmJ0bi5idG4taW5mbywuYnRuLmJ0bi1vdXRsaW5lLC5idG4uYnRuLXByaW1hcnktb3V0bGluZSwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnksLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS1zZWNvbmRhcnksLmJ0bi5idG4taW5mby1vdXRsaW5lLC5idG4tc2Vjb25kYXJ5IC5idG4sLmJ0bi1pbmZvIC5idG4sLmJ0bi1vdXRsaW5lIC5idG4sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXByaW1hcnkgLmJ0biwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUtaW5mbyAuYnRue2JvcmRlci1jb2xvcjojMDA3MmEzO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yLCAjMDA3MmEz''@;'; put 'put ''KTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Y29sb3I6IzAwNzJhMztjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IsICMwMDcyYTMpfS5idG4uYnRuLXNlY29u''@;'; put 'put ''ZGFyeSBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkgY2xyLWljb24sLmJ0bi5idG4taW5mbyBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSBjbHItaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXByaW1hcnkgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2xyLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZSBjbHItaWNvbiwuYnRuLXNlY29uZGFy''@;'; put 'put ''eSAuYnRuIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG4gY2xyLWljb24sLmJ0bi1pbmZvIC5idG4gY2RzLWljb24sLmJ0bi1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUgLmJ0biBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LW91dGxpbmUtcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4gY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuIGNsci1p''@;'; put 'put ''Y29uLC5idG4tb3V0bGluZS1pbmZvIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjbHItaWNvbntjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvciwgIzAwNzJhMyl9LmJ0bi5idG4tc2Vjb25kYXJ5OnZpc2l0ZWQsLmJ0bi5idG4taW5m''@;'; put 'put ''bzp2aXNpdGVkLC5idG4uYnRuLW91dGxpbmU6dmlzaXRlZCwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6dmlzaXRlZCwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTp2aXNpdGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTp2aXNpdGVkLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OnZp''@;'; put 'put ''c2l0ZWQsLmJ0bi5idG4taW5mby1vdXRsaW5lOnZpc2l0ZWQsLmJ0bi1zZWNvbmRhcnkgLmJ0bjp2aXNpdGVkLC5idG4taW5mbyAuYnRuOnZpc2l0ZWQsLmJ0bi1vdXRsaW5lIC5idG46dmlzaXRlZCwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOnZpc2l0ZWQsLmJ0bi1zZWNvbmRhcnktb3V0''@;'; put 'put ''bGluZSAuYnRuOnZpc2l0ZWQsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjp2aXNpdGVkLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjp2aXNpdGVkLC5idG4taW5mby1vdXRsaW5lIC5idG46dmlzaXRlZCwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOnZpc2l0ZWR7Y29sb3I6IzAwNzJhMztj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IsICMwMDcyYTMpfS5idG4uYnRuLXNlY29uZGFyeTpob3ZlciwuYnRuLmJ0bi1pbmZvOmhvdmVyLC5idG4uYnRuLW91dGxpbmU6aG92ZXIsLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLXNlY29uZGFyeS1vdXRs''@;'; put 'put ''aW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIsLmJ0bi1zZWNvbmRhcnkgLmJ0bjpob3ZlciwuYnRuLWluZm8gLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUgLmJ0''@;'; put 'put ''bjpob3ZlciwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpob3ZlciwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhv''@;'; put 'put ''dmVyLC5idG4tb3V0bGluZS1pbmZvIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTNmNWZjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWJnLWNvbG9yLCAjZTNmNWZjKTtjb2xvcjojMDA1NjdhO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1o''@;'; put 'put ''b3Zlci1jb2xvciwgIzAwNTY3YSl9LmJ0bi5idG4tc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lOmFjdGl2ZSwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmFjdGl2ZSwuYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6YWN0aXZlLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZlLC5idG4taW5mbyAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0''@;'; put 'put ''bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46YWN0aXZlLC5idG4taW5mby1vdXRsaW5lIC5idG46YWN0aXZlLC5i''@;'; put 'put ''dG4tb3V0bGluZS1pbmZvIC5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMXJlbSAjMTc5YmQzIGluc2V0O2JveC1zaGFkb3c6MCAuMXJlbSAwIDAgdmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJveC1zaGFkb3ctY29sb3IsICMxNzliZDMpIGluc2V0fS5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxl''@;'; put 'put ''ZCwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi5idG4taW5mby5kaXNhYmxlZCwuYnRuLmJ0bi1pbmZvOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQsLmJ0''@;'; put 'put ''bi5idG4tcHJpbWFyeS1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlz''@;'; put 'put ''YWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCwuYnRuLXNlY29uZGFyeSAuYnRuLmRpc2Fi''@;'; put 'put ''bGVkLC5idG4tc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bi5kaXNh''@;'; put 'put ''YmxlZCwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtcHJp''@;'; put 'put ''bWFyeSAuYnRuOmRpc2FibGVkLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4tb3V0''@;'; put 'put ''bGluZS1pbmZvIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpkaXNhYmxlZHtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvciwgIzY2NjY2Nik7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjQ7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2JvcmRlci1jb2xvcjojOGM4YzhjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCAj''@;'; put 'put ''OGM4YzhjKTtib3gtc2hhZG93Om5vbmV9LmJ0bi5idG4tcHJpbWFyeSwuYnRuLXByaW1hcnkgLmJ0bntib3JkZXItY29sb3I6IzAwNzJhMztib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWJvcmRlci1jb2xvciwgIzAwNzJhMyk7YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWJnLWNvbG9yLCAjMDA3MmEzKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXByaW1hcnkgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbiwuYnRu''@;'; put 'put ''LXByaW1hcnkgLmJ0biBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXByaW1hcnk6dmlzaXRlZCwuYnRuLXByaW1hcnkgLmJ0bjp2aXNpdGVke2NvbG9yOiNmZmY7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yLCB3aGl0ZSl9LmJ0bi5idG4tcHJpbWFyeTpob3ZlciwuYnRuLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDU2N2E7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktaG92ZXItYmctY29s''@;'; put 'put ''b3IsICMwMDU2N2EpO2NvbG9yOiNlM2Y1ZmM7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yLCAjZTNmNWZjKX0uYnRuLmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkgLmJ0bjphY3RpdmV7Ym94LXNoYWRvdzowIC4xcmVtICMxNzliZDMgaW5zZXQ7Ym94LXNo''@;'; put 'put ''YWRvdzowIC4xcmVtIDAgMCB2YXIoLS1jbHItYnRuLXByaW1hcnktYm94LXNoYWRvdy1jb2xvciwgIzE3OWJkMykgaW5zZXR9LmJ0bi5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tcHJpbWFyeSAu''@;'; put 'put ''YnRuOmRpc2FibGVke2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWNvbG9yLCAjNjY2NjY2KTtjdXJzb3I6bm90LWFsbG93ZWQ7b3BhY2l0eTouNDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1h''@;'; put 'put ''cnktZGlzYWJsZWQtYmctY29sb3IsICNjY2NjY2MpO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3gtc2hhZG93Om5vbmV9LmJ0bi5idG4tc3VjY2VzcywuYnRuLXN1Y2Nlc3MgLmJ0''@;'; put 'put ''bntib3JkZXItY29sb3I6IzNjODUwMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWJvcmRlci1jb2xvciwgIzNjODUwMCk7YmFja2dyb3VuZC1jb2xvcjojM2M4NTAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWJnLWNvbG9yLCAjM2M4NTAwKTtj''@;'; put 'put ''b2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXN1Y2Nlc3MgY2RzLWljb24sLmJ0bi5idG4tc3VjY2VzcyBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbntjb2xvcjoj''@;'; put 'put ''ZmZmO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXN1Y2Nlc3M6dmlzaXRlZCwuYnRuLXN1Y2Nlc3MgLmJ0bjp2aXNpdGVke2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yLCB3aGl0ZSl9LmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''czpob3ZlciwuYnRuLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItYmctY29sb3IsICMzMDZiMDApO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVy''@;'; put 'put ''LWNvbG9yLCB3aGl0ZSl9LmJ0bi5idG4tc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMXJlbSAjMjU1MjAwIGluc2V0O2JveC1zaGFkb3c6MCAuMXJlbSAwIDAgdmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWJveC1zaGFkb3ctY29sb3IsICMyNTUy''@;'; put 'put ''MDApIGluc2V0fS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5idG4tc3VjY2VzczpkaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZHtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1j''@;'; put 'put ''b2xvciwgIzY2NjY2Nik7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjQ7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym94LXNoYWRvdzpub25lfS5idG4uYnRuLXdhcm5pbmcsLmJ0bi13YXJuaW5nIC5idG57Ym9yZGVyLWNvbG9yOiNkYjIxMDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ib3Jk''@;'; put 'put ''ZXItY29sb3IsICNkYjIxMDApO2JhY2tncm91bmQtY29sb3I6I2RiMjEwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvciwgI2RiMjEwMCk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IsIHdoaXRlKX0uYnRuLmJ0bi13''@;'; put 'put ''YXJuaW5nIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmcgY2xyLWljb24sLmJ0bi13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG4gY2xyLWljb257Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IsIHdoaXRlKX0uYnRuLmJ0bi13YXJuaW5n''@;'; put 'put ''OnZpc2l0ZWQsLmJ0bi13YXJuaW5nIC5idG46dmlzaXRlZHtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXdhcm5pbmc6aG92ZXIsLmJ0bi13YXJuaW5nIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWJnLWNvbG9yLCAjYzIxZDAwKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ob3Zlci1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZyAuYnRuOmFjdGl2''@;'; put 'put ''ZXtib3gtc2hhZG93OjAgLjFyZW0gIzk5MTcwMCBpbnNldDtib3gtc2hhZG93OjAgLjFyZW0gMCAwIHZhcigtLWNsci1idG4td2FybmluZy1ib3gtc2hhZG93LWNvbG9yLCAjOTkxNzAwKSBpbnNldH0uYnRuLmJ0bi13YXJuaW5nLmRpc2FibGVkLC5idG4uYnRuLXdhcm5pbmc6ZGlzYWJsZWQs''@;'; put 'put ''LmJ0bi13YXJuaW5nIC5idG4uZGlzYWJsZWQsLmJ0bi13YXJuaW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3IsICM2NjY2NjYpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40O2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1iZy1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLWNvbG9yOiM2NjY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29sb3IsICM2NjY2NjYpO2JveC1zaGFk''@;'; put 'put ''b3c6bm9uZX0uYnRuLmJ0bi1kYW5nZXIsLmJ0bi1kYW5nZXIgLmJ0bntib3JkZXItY29sb3I6I2RiMjEwMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYm9yZGVyLWNvbG9yLCAjZGIyMTAwKTtiYWNrZ3JvdW5kLWNvbG9yOiNkYjIxMDA7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRhbmdlci1iZy1jb2xvciwgI2RiMjEwMCk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jb2xvciwgd2hpdGUpfS5idG4uYnRuLWRhbmdlciBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXIgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLWRhbmdlciAuYnRuIGNsci1pY29ue2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IsIHdoaXRlKX0uYnRuLmJ0bi1kYW5nZXI6dmlzaXRlZCwuYnRuLWRhbmdlciAuYnRuOnZpc2l0ZWR7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1j''@;'; put 'put ''b2xvciwgd2hpdGUpfS5idG4uYnRuLWRhbmdlcjpob3ZlciwuYnRuLWRhbmdlciAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWJnLWNvbG9yLCAjYzIxZDAwKTtjb2xvcjojZmZmO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9yLCB3aGl0ZSl9LmJ0bi5idG4tZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjFyZW0gIzk5MTcwMCBpbnNldDtib3gtc2hhZG93OjAgLjFyZW0gMCAwIHZhcigtLWNsci1idG4tZGFuZ2VyLWJv''@;'; put 'put ''eC1zaGFkb3ctY29sb3IsICM5OTE3MDApIGluc2V0fS5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''YW5nZXItZGlzYWJsZWQtY29sb3IsICM2NjY2NjYpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40O2JhY2tncm91bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItY29sb3I6IzY2''@;'; put 'put ''Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCAjNjY2NjY2KTtib3gtc2hhZG93Om5vbmV9LmJ0bi5idG4tb3V0bGluZSwuYnRuLmJ0bi1vdXRsaW5lIC5idG4sLmJ0bi5idG4taW5mby1vdXRsaW5lLC5idG4taW5mby1vdXRsaW5lIC5i''@;'; put 'put ''dG4sLmJ0bi5idG4tb3V0bGluZS1pbmZvLC5idG4tb3V0bGluZSAuYnRue2JvcmRlci1jb2xvcjojMDA3MmEzO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ib3JkZXItY29sb3IsICMwMDcyYTMpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3IsICMwMDcyYTMpfS5idG4uYnRuLW91dGxpbmUgY2RzLWljb24sLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZSBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbyBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm8gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2xyLWljb257Y29sb3I6IzAw''@;'; put 'put ''NzJhMztjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvciwgIzAwNzJhMyl9LmJ0bi5idG4tb3V0bGluZTp2aXNpdGVkLC5idG4uYnRuLW91dGxpbmUgLmJ0bjp2aXNpdGVkLC5idG4uYnRuLWluZm8tb3V0bGluZTp2aXNpdGVkLC5idG4taW5mby1vdXRsaW5lIC5idG46''@;'; put 'put ''dmlzaXRlZCwuYnRuLmJ0bi1vdXRsaW5lLWluZm86dmlzaXRlZCwuYnRuLW91dGxpbmUgLmJ0bjp2aXNpdGVke2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3IsICMwMDcyYTMpfS5idG4uYnRuLW91dGxpbmU6aG92ZXIsLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZSAuYnRuOmhvdmVyLC5idG4uYnRuLWluZm8tb3V0bGluZTpob3ZlciwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtaW5mbzpob3ZlciwuYnRuLW91dGxpbmUgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlM2Y1ZmM7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1iZy1jb2xvciwgI2UzZjVmYyk7Y29sb3I6IzAwNTY3YTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1jb2xvciwgIzAwNTY3YSl9LmJ0bi5idG4tb3V0bGluZTphY3RpdmUsLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6YWN0aXZlLC5idG4taW5mby1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtaW5mbzphY3RpdmUsLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMXJlbSAjMTc5YmQzIGluc2V0O2Jv''@;'; put 'put ''eC1zaGFkb3c6MCAuMXJlbSAwIDAgdmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm94LXNoYWRvdy1jb2xvciwgIzE3OWJkMykgaW5zZXR9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCwuYnRuLWluZm8tb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4taW5mby1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1pbmZvLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZHtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVk''@;'; put 'put ''LWNvbG9yLCAjNjY2NjY2KTtjdXJzb3I6bm90LWFsbG93ZWQ7b3BhY2l0eTouNDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItY29s''@;'; put 'put ''b3I6IzhjOGM4Yztib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCAjOGM4YzhjKTtib3gtc2hhZG93Om5vbmV9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcywuYnRuLXN1Y2Nlc3Mt''@;'; put 'put ''b3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG57Ym9yZGVyLWNvbG9yOiMzYzg1MDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJvcmRlci1jb2xvciwgIzNjODUwMCk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Y29sb3I6IzNjODUwMDtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvciwgIzNjODUwMCl9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGNkcy1pY29uLC5idG4u''@;'; put 'put ''YnRuLXN1Y2Nlc3Mtb3V0bGluZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjbHItaWNv''@;'; put 'put ''biwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4gY2xyLWljb257Y29sb3I6IzNjODUwMDtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvciwgIzNjODUwMCl9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOnZp''@;'; put 'put ''c2l0ZWQsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOnZpc2l0ZWQsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjp2aXNpdGVkLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46dmlzaXRlZHtjb2xvcjojM2M4NTAwO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yLCAj''@;'; put 'put ''M2M4NTAwKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDA7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1iZy1jb2xvciwgI2RmZjBkMCk7Y29sb3I6IzI1NTIwMDtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1jb2xvciwgIzI1NTIwMCl9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFj''@;'; put 'put ''dGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMXJlbSAjNWViNzE1IGluc2V0O2JveC1zaGFkb3c6MCAuMXJlbSAwIDAgdmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYm94LXNoYWRvdy1jb2xvciwgIzVlYjcxNSkgaW5zZXR9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJs''@;'; put 'put ''ZWR7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1jb2xvciwgIzY2NjY2Nik7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''c3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Ym9yZGVyLWNvbG9yOiM4YzhjOGM7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvciwgIzhjOGM4Yyk7Ym94LXNoYWRvdzpub25lfS5idG4u''@;'; put 'put ''YnRuLXdhcm5pbmctb3V0bGluZSwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcsLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRue2JvcmRlci1jb2xvcjojYzIxZDAwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ib3Jk''@;'; put 'put ''ZXItY29sb3IsICNjMjFkMDApO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2NvbG9yOiNkYjIxMDA7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxp''@;'; put 'put ''bmUtY29sb3IsICNkYjIxMDApfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZyBjbHItaWNvbiwuYnRuLXdhcm5p''@;'; put 'put ''bmctb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOiNkYjIxMDA7Y29sb3I6dmFyKC0tY2xyLWJ0bi13''@;'; put 'put ''YXJuaW5nLW91dGxpbmUtY29sb3IsICNkYjIxMDApfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTp2aXNpdGVkLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzp2aXNpdGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46dmlzaXRlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOnZpc2l0ZWR7''@;'; put 'put ''Y29sb3I6I2RiMjEwMDtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvciwgI2RiMjEwMCl9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmhvdmVyLC5idG4t''@;'; put 'put ''b3V0bGluZS13YXJuaW5nIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmVkZGQ3O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItYmctY29sb3IsICNmZWRkZDcpO2NvbG9yOiM5OTE3MDA7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5n''@;'; put 'put ''LW91dGxpbmUtaG92ZXItY29sb3IsICM5OTE3MDApfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmFjdGl2ZXtib3gt''@;'; put 'put ''c2hhZG93OjAgLjFyZW0gI2ZjYzViYiBpbnNldDtib3gtc2hhZG93OjAgLjFyZW0gMCAwIHZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJveC1zaGFkb3ctY29sb3IsICNmY2M1YmIpIGluc2V0fS5idG4uYnRuLXdhcm5pbmctb3V0bGluZS5kaXNhYmxlZCwuYnRuLmJ0bi13YXJuaW5n''@;'; put 'put ''LW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZCwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3IsICM2NjY2NjYpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40O2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2JvcmRlci1jb2xvcjojNjY2O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGlu''@;'; put 'put ''ZS1kaXNhYmxlZC1ib3JkZXItY29sb3IsICM2NjY2NjYpO2JveC1zaGFkb3c6bm9uZX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRue2JvcmRlci1jb2xvcjojYzIx''@;'; put 'put ''ZDAwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJvcmRlci1jb2xvciwgI2MyMWQwMCk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IsIHRyYW5zcGFyZW50''@;'; put 'put ''KTtjb2xvcjojZGIyMTAwO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IsICNkYjIxMDApfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGNkcy1pY29u''@;'; put 'put ''LC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGNsci1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0biBjbHIt''@;'; put 'put ''aWNvbntjb2xvcjojZGIyMTAwO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IsICNkYjIxMDApfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOnZpc2l0ZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6dmlzaXRlZCwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46dmlzaXRl''@;'; put 'put ''ZCwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46dmlzaXRlZHtjb2xvcjojZGIyMTAwO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IsICNkYjIxMDApfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmhvdmVyLC5idG4t''@;'; put 'put ''ZGFuZ2VyLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmVkZGQ3O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1iZy1jb2xvciwgI2ZlZGRkNyk7Y29sb3I6Izk5MTcw''@;'; put 'put ''MDtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWNvbG9yLCAjOTkxNzAwKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZTphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5l''@;'; put 'put ''LWRhbmdlciAuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjFyZW0gI2ZjYzViYiBpbnNldDtib3gtc2hhZG93OjAgLjFyZW0gMCAwIHZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYm94LXNoYWRvdy1jb2xvciwgI2ZjYzViYikgaW5zZXR9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlz''@;'; put 'put ''YWJsZWQsLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpk''@;'; put 'put ''aXNhYmxlZCwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1jb2xvciwgIzY2NjY2Nik7Y3Vyc29yOm5vdC1hbGxvd2Vk''@;'; put 'put ''O29wYWNpdHk6LjQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''YW5nZXItb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3IsICM2NjY2NjYpO2JveC1zaGFkb3c6bm9uZX0uYnRuLmJ0bi1saW5rLC5idG4tbGluayAuYnRue2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJvcmRlci1jb2xvciwgdHJh''@;'; put 'put ''bnNwYXJlbnQpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYmctY29sb3IsIHRyYW5zcGFyZW50KTtjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jb2xvciwgIzAwNzJhMyl9LmJ0bi5idG4tbGlu''@;'; put 'put ''ayBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rIGNsci1pY29uLC5idG4tbGluayAuYnRuIGNkcy1pY29uLC5idG4tbGluayAuYnRuIGNsci1pY29ue2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yLCAjMDA3MmEzKX0uYnRuLmJ0bi1saW5rOnZpc2l0ZWQsLmJ0bi1s''@;'; put 'put ''aW5rIC5idG46dmlzaXRlZHtjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jb2xvciwgIzAwNzJhMyl9LmJ0bi5idG4tbGluazpob3ZlciwuYnRuLWxpbmsgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLWhvdmVyLWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Y29sb3I6IzAwNTY3YTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IsICMwMDU2N2EpfS5idG4uYnRuLWxpbms6YWN0aXZlLC5idG4tbGluayAuYnRuOmFjdGl2ZXtib3gtc2hhZG93Om5vbmV9LmJ0''@;'; put 'put ''bi5idG4tbGluay5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rOmRpc2FibGVkLC5idG4tbGluayAuYnRuLmRpc2FibGVkLC5idG4tbGluayAuYnRuOmRpc2FibGVke2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yLCAjNjY2NjY2KTtjdXJzb3I6bm90LWFs''@;'; put 'put ''bG93ZWQ7b3BhY2l0eTouNDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWxpbmstZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCB0cmFuc3BhcmVudCk7Ym94LXNoYWRvdzpub25lfS5idG4uYnRuLWludmVyc2UsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5idG4taW52ZXJzZSAuYnRue2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWludmVyc2UtYm9yZGVyLWNvbG9yLCB3aGl0ZSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNl''@;'; put 'put ''LWNvbG9yLCB3aGl0ZSl9LmJ0bi5idG4taW52ZXJzZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmJ0bi1pbnZlcnNl''@;'; put 'put ''IC5idG4gY2RzLWljb24sLmJ0bi1pbnZlcnNlIC5idG4gY2xyLWljb257Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IsIHdoaXRlKX0uYnRuLmJ0bi1pbnZlcnNlOnZpc2l0ZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOnZpc2l0ZWQsLmJ0''@;'; put 'put ''bi1pbnZlcnNlIC5idG46dmlzaXRlZHtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvciwgd2hpdGUpfS5idG4uYnRuLWludmVyc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4taW52ZXJzZSAuYnRuOmhvdmVye2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6I2ZmZmZmZjI2O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWJnLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWNvbG9yLCB3aGl0ZSl9''@;'; put 'put ''LmJ0bi5idG4taW52ZXJzZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLWludmVyc2UgLmJ0bjphY3RpdmV7Ym94LXNoYWRvdzowIC4xcmVtICMwMDAwMDA0MCBpbnNldDtib3gtc2hhZG93OjAgLjFyZW0gMCAwIHZhcigtLWNsci1idG4taW52''@;'; put 'put ''ZXJzZS1ib3gtc2hhZG93LWNvbG9yLCByZ2JhKDAsIDAsIDAsIC4yNSkpIGluc2V0fS5idG4uYnRuLWludmVyc2UuZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLWludmVyc2U6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuOmRpc2FibGVkLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVke2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWNvbG9yLCB3aGl0ZSk7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6''@;'; put 'put ''LjQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQt''@;'; put 'put ''Ym9yZGVyLWNvbG9yLCB3aGl0ZSk7Ym94LXNoYWRvdzpub25lfS5idG4uYnRuLXNtLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLXNtIC5idG57bGluZS1oZWlnaHQ6MS4xNXJlbTtsaW5lLWhlaWdodDp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtbGlu''@;'; put 'put ''ZS1oZWlnaHQsIDEuMTVyZW0pO2xldHRlci1zcGFjaW5nOi4wNzNlbTtmb250LXNpemU6LjU1cmVtO2ZvbnQtc2l6ZTp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtZm9udC1zaXplLCAuNTVyZW0pO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXdlaWdodDp2YXIoLS1jbHItYnRuLWFw''@;'; put 'put ''cGVhcmFuY2Utc3RhbmRhcmQtZm9udC13ZWlnaHQsIDUwMCk7aGVpZ2h0OjEuMnJlbTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCwgMS4ycmVtKTtwYWRkaW5nOjAgLjZyZW07cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQt''@;'; put 'put ''cGFkZGluZywgMCAuNnJlbSl9LmJ0bi1ibG9ja3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmJ0bnttYXJnaW4tdG9wOi4zcmVtO21hcmdpbi10b3A6dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4sIC4zcmVtKTttYXJnaW4tYm90dG9tOi4zcmVtO21hcmdp''@;'; put 'put ''bi1ib3R0b206dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4sIC4zcmVtKTttYXJnaW4tcmlnaHQ6LjZyZW07bWFyZ2luLXJpZ2h0OnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4sIC42cmVtKTttYXJnaW4tbGVmdDowfS5idG4uYnRuLWxpbmt7bWFyZ2luLXJpZ2h0OjB9LmJ0''@;'; put 'put ''bi5idG4tbGluay5idG4taW52ZXJzZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4uYnRuLWxpbmt7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tc206bm90KC5idG4tbGluaykgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRu''@;'; put 'put ''LWxpbmspIGNsci1pY29ue3dpZHRoOi42cmVtO3dpZHRoOnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUsIC42cmVtKTtoZWlnaHQ6LjZyZW07aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUsIC42cmVtKTt0cmFuc2Zv''@;'; put 'put ''cm06dHJhbnNsYXRlM2QoMCwtLjA1cmVtLDApfS5idG4tc206bm90KC5idG4tbGluaykgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRuLWxpbmspIGNkcy1pY29ue3dpZHRoOi42cmVtO3dpZHRoOnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFu''@;'; put 'put ''ZGFyZC1pY29uLXNpemUsIC42cmVtKTtoZWlnaHQ6LjZyZW07aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUsIC42cmVtKTttYXJnaW4tdG9wOi0uMXJlbX0uYnRuLWljb257bWluLXdpZHRoOjB9LmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmRp''@;'; put 'put ''c2FibGVkIGNsci1pY29uLC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjojY2NjO2NvbG9yOnZhcigtLWNsci1idG4taWNvbi1kaXNhYmxlZC1jb2xvciwgI2NjY2NjYyl9LmJ0bi1ncm91cC5idG4tcHJpbWFyeSAuZHJvcGRvd24tdG9nZ2xlLC5i''@;'; put 'put ''dG4tZ3JvdXAuYnRuLXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZSwuYnRuLWdyb3VwLmJ0bi13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUsLmJ0bi1ncm91cC5idG4tZGFuZ2VyIC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLWNvbG9yOiMwMDcyYTM7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''cHJpbWFyeS1ib3JkZXItY29sb3IsICMwMDcyYTMpO2JhY2tncm91bmQtY29sb3I6IzAwNzJhMztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1iZy1jb2xvciwgIzAwNzJhMyk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IsIHdoaXRl''@;'; put 'put ''KX0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC5kcm9wZG93bi10b2dnbGUgY2RzLWljb24sLmJ0bi1ncm91cC5idG4tcHJpbWFyeSAuZHJvcGRvd24tdG9nZ2xlIGNsci1pY29uLC5idG4tZ3JvdXAuYnRuLXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1z''@;'; put 'put ''dWNjZXNzIC5kcm9wZG93bi10b2dnbGUgY2xyLWljb24sLmJ0bi1ncm91cC5idG4td2FybmluZyAuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbiwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLmRyb3Bkb3duLXRv''@;'; put 'put ''Z2dsZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jb2xvciwgd2hpdGUpfS5idG4tZ3JvdXAuYnRuLXByaW1hcnkgLmRyb3Bkb3duLXRvZ2dsZTp2aXNpdGVkLC5i''@;'; put 'put ''dG4tZ3JvdXAuYnRuLXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTp2aXNpdGVkLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZTp2aXNpdGVkLC5idG4tZ3JvdXAuYnRuLWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlOnZpc2l0ZWR7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLXByaW1hcnktY29sb3IsIHdoaXRlKX0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC5kcm9wZG93bi10b2dnbGU6aG92ZXIsLmJ0bi1ncm91cC5idG4tc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZTpob3Zl''@;'; put 'put ''ciwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDU2N2E7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktaG92ZXItYmctY29sb3IsICMwMDU2N2EpO2NvbG9yOiNlM2Y1ZmM7Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yLCAjZTNmNWZjKX0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5idG4tZ3JvdXAuYnRuLXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsLmJ0bi1ncm91cC5idG4td2FybmluZyAuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xlOmFjdGl2ZSwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Ym94LXNoYWRvdzowIC4xcmVtICMxNzliZDMgaW5zZXQ7Ym94LXNoYWRvdzowIC4xcmVtIDAgMCB2YXIoLS1jbHItYnRuLXByaW1hcnktYm94LXNoYWRvdy1jb2xvciwgIzE3OWJkMykgaW5z''@;'; put 'put ''ZXR9LmJ0bi1ncm91cC5idG4tcHJpbWFyeSAuZHJvcGRvd24tdG9nZ2xlLmRpc2FibGVkLC5idG4tZ3JvdXAuYnRuLXByaW1hcnkgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuZGlzYWJsZWQsLmJ0bi1ncm91cC5idG4t''@;'; put 'put ''c3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCwuYnRuLWdyb3VwLmJ0bi13YXJuaW5nIC5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWQsLmJ0bi1ncm91cC5idG4tZGFuZ2VyIC5kcm9wZG93bi10''@;'; put 'put ''b2dnbGUuZGlzYWJsZWQsLmJ0bi1ncm91cC5idG4tZGFuZ2VyIC5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWR7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29sb3IsICM2NjY2NjYpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40O2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29sb3IsICNjY2NjY2Mp''@;'; put 'put ''O2JveC1zaGFkb3c6bm9uZX0uYnRuLWdyb3VwLmJ0bi1kYW5nZXIgOmRpc2FibGVke2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS0tLWNsci1jb2xvci1uZXV0cmFsLTQwMCwgI2NjY2NjYyl9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci1j''@;'; put 'put ''b2xvcjp0cmFuc3BhcmVudDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJvcmRlci1jb2xvciwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYmctY29sb3IsIHRyYW5zcGFyZW50KTtj''@;'; put 'put ''b2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jb2xvciwgIzAwNzJhMyl9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbntjb2xvcjojMDA3MmEzO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tbGluay1jb2xvciwgIzAwNzJhMyl9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOnZpc2l0ZWR7Y29sb3I6IzAwNzJhMztjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IsICMwMDcyYTMpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWhvdmVyLWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Y29sb3I6IzAwNTY3YTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IsICMwMDU2''@;'; put 'put ''N2EpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Ym94LXNoYWRvdzpub25lfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWR7Y29sb3I6IzY2''@;'; put 'put ''Njtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IsICM2NjY2NjYpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3Is''@;'; put 'put ''IHRyYW5zcGFyZW50KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3gtc2hhZG93Om5vbmV9LmJ0bi1ncm91cC5idG4tc20gLmJ0bi1ncm91cC1vdmVyZmxvdz4uZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1ncm91cC5idG4gLmJ0bi1ncm91cC1vdmVyZmxvdz4uZHJvcGRvd24tdG9nZ2xle2xpbmUtaGVpZ2h0OjEuMTVyZW07bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWxpbmUt''@;'; put 'put ''aGVpZ2h0LCAxLjE1cmVtKTtsZXR0ZXItc3BhY2luZzouMDczZW07Zm9udC1zaXplOi41NXJlbTtmb250LXNpemU6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWZvbnQtc2l6ZSwgLjU1cmVtKTtmb250LXdlaWdodDo1MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBl''@;'; put 'put ''YXJhbmNlLXN0YW5kYXJkLWZvbnQtd2VpZ2h0LCA1MDApO2hlaWdodDoxLjJyZW07aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1oZWlnaHQsIDEuMnJlbSk7cGFkZGluZzowIC42cmVtO3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLXBh''@;'; put 'put ''ZGRpbmcsIDAgLjZyZW0pfS5jaGVja2JveC5idG4sLmNoZWNrYm94LWlubGluZS5idG4sLnJhZGlvLmJ0biwucmFkaW8taW5saW5lLmJ0bntwYWRkaW5nOjB9LmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwucmFkaW8uYnRuIGxhYmVsLC5yYWRpby1pbmxp''@;'; put 'put ''bmUuYnRuIGxhYmVse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6aW5oZXJpdDtwYWRkaW5nOjAgLjZyZW07Y3Vyc29yOnBvaW50ZXJ9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDpiZWZvcmUsLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJl''@;'; put 'put ''bDphZnRlciwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDpiZWZvcmUsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXJ7Y29udGVudDpub25lfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb10rbGFiZWw6''@;'; put 'put ''YmVmb3JlLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb10rbGFiZWw6YWZ0ZXIsLnJhZGlvLWlubGluZS5idG4gaW5wdXRbdHlwZT1yYWRpb10rbGFiZWw6YmVmb3JlLC5yYWRpby1pbmxpbmUuYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmFmdGVye2NvbnRlbnQ6bm9uZX0uY2hlY2ti''@;'; put 'put ''b3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2ti''@;'; put 'put ''b3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jZHMtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOiMwMDcyYTM7Y29sb3I6I2ZmZn0uY2hlY2tib3guYnRuIGxhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVse3dpZHRoOjEwMCV9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFi''@;'; put 'put ''ZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5l''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNo''@;'; put 'put ''ZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0''@;'; put 'put ''bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8g''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5j''@;'; put 'put ''aGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxp''@;'; put 'put ''bmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94''@;'; put 'put ''LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94''@;'; put 'put ''LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1p''@;'; put 'put ''bmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1p''@;'; put 'put ''bmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlu''@;'; put 'put ''bGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2NvbG9yOiNmZmZ9LmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2Jv''@;'; put 'put ''eC5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2NvbG9yOiNmZmZ9LmNoZWNrYm94LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjojMzA2YjAwO2NvbG9yOiNmZmZ9LmNoZWNrYm94LmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gu''@;'; put 'put ''YnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4td2FybmluZyBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2NvbG9yOiNmZmZ9LmNoZWNrYm94LmJ0''@;'; put 'put ''bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2NvbG9yOiNmZmZ9LmNoZWNrYm94LmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsLC5jaGVja2JveC5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWxp''@;'; put 'put ''bmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMDA1NjdhfS5jaGVja2JveC5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5i''@;'; put 'put ''dG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2O2NvbG9yOiNmZmZ9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRu''@;'; put 'put ''IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2NvbG9yOiNmZmZ9LnJhZGlvLmJ0biBsYWJlbHt3aWR0aDoxMDAlfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5i''@;'; put 'put ''dG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5j''@;'; put 'put ''bHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5''@;'; put 'put ''cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNk''@;'; put 'put ''cy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBp''@;'; put 'put ''bnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1p''@;'; put 'put ''Y29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6IzAwNzJhMztjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwu''@;'; put 'put ''cmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6IzAwNzJhMztjb2xvcjojZmZmfS5y''@;'; put 'put ''YWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6IzMwNmIwMDtjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtjb2xvcjojZmZmfS5yYWRpby5i''@;'; put 'put ''dG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1p''@;'; put 'put ''Y29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6IzNjODUwMDtjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUtd2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtd2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtd2FybmluZyBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUgaW5wdXRb''@;'; put 'put ''dHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFi''@;'; put 'put ''ZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6I2My''@;'; put 'put ''MWQwMDtjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPXJhZGlv''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6IzAwNTY3YX0ucmFkaW8uYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNsci1pY29uLC5yYWRpby5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNmZmZmZmYyNjtjb2xvcjojZmZmfS5idG4tZ3JvdXB7ZGlzcGxheTppbmxpbmUtZmxleDttYXJnaW4tcmlnaHQ6LjZyZW19LmJ0bi1ncm91cCBjbHItZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cCBjbHItZHJvcGRvd246bGFzdC1j''@;'; put 'put ''aGlsZCAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOi4xNXJlbTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czouMTVyZW19LmJ0bi1ncm91cCAuYnRue21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOnRvcDtvdmVyZmxvdzpoaWRkZW59LmJ0bi1ncm91cCAuYnRuIGxh''@;'; put 'put ''YmVse2hlaWdodDoxMDAlfS5idG4tZ3JvdXAgLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1cywuYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXN7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO29wYWNpdHk6MTt0b3A6MDtoZWlnaHQ6MTAw''@;'; put 'put ''JTt3aWR0aDoxMDAlO2JveC1zaGFkb3c6MCAwIC4yNXJlbSAjNTFjYmVlO2JveC1zaGFkb3c6MCAwIC4yNXJlbSB2YXIoLS1jbHItYnRuLWdyb3VwLWZvY3VzLW91dGxpbmUsICM1MWNiZWUpO3BhZGRpbmc6LjE1cmVtIDAgLjE1cmVtIC4xNXJlbTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRl''@;'; put 'put ''ci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6IzUxY2JlZTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1ncm91cC1mb2N1cy1vdXRsaW5lLCAjNTFjYmVlKX0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRpb106Zm9jdXM6Oi1tcy1jaGVjaywuYnRuLWdyb3VwIC5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Zm9jdXM6Oi1tcy1jaGVja3tkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmJ0bi1ncm91cCAuYnRuOm5vdCg6bGFzdC1jaGlsZCl7''@;'; put 'put ''Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpmaXJzdC1jaGlsZCkgLmJ0bntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLnRv''@;'; put 'put ''b2x0aXA6bm90KDpsYXN0LWNoaWxkKSAuYnRue2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCkgLmJ0biwuYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC5idG46''@;'; put 'put ''bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCkgLmJ0biwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzIC5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKSAu''@;'; put 'put ''YnRuLC5idG4tZ3JvdXAuYnRuLWRhbmdlciAuYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4td2FybmluZyAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpIC5idG4sLmJ0bi1ncm91cC5idG4td2FybmluZyAuYnRuOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luOjA7bWFyZ2luLXJp''@;'; put 'put ''Z2h0Oi4wNXJlbTttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgsIC4wNXJlbSl9LmJ0bi1ncm91cC5idG4tcHJpbWFyeSAuZHJvcGRvd24tbWVudSAuYnRuLC5idG4tZ3JvdXAuYnRuLXN1Y2Nlc3MgLmRyb3Bkb3duLW1lbnUgLmJ0biwuYnRuLWdyb3VwLmJ0bi1kYW5n''@;'; put 'put ''ZXIgLmRyb3Bkb3duLW1lbnUgLmJ0biwuYnRuLWdyb3VwLmJ0bi13YXJuaW5nIC5kcm9wZG93bi1tZW51IC5idG57bWFyZ2luOjB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93e3Bvc2l0aW9uOnJlbGF0aXZlfS5idG4tZ3JvdXA+LmJ0bi1ncm91cC1vdmVyZmxvdzpsYXN0LWNoaWxk''@;'; put 'put ''Om5vdCg6Zmlyc3QtY2hpbGQpPi5idG46Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItYnRuLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uYnRu''@;'; put 'put ''LWdyb3VwPi5idG4tZ3JvdXAtb3ZlcmZsb3c6bGFzdC1jaGlsZDpmaXJzdC1jaGlsZD4uYnRuOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzLCAuMTVyZW0pfS5idG4tZ3JvdXAgLmJ0bisuYnRue2JvcmRl''@;'; put 'put ''ci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAudG9vbHRpcDpub3QoOmZpcnN0LWNoaWxkKSAuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAuYnRuKy5idG4tZ3JvdXAtb3ZlcmZsb3cgLmJ0bntib3JkZXItbGVmdDpub25lfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZSwuYnRuLWdyb3VwLmJ0bi1pY29uLWxpbmsuYnRuLWxpbmsgLmJ0biwuYnRuLWdyb3VwLmJ0bi1pY29uIC5idG57bWluLXdpZHRoOjB9LmJ0bi1ncm91cCAuY2xyLWljb24tdGl0bGV7ZGlzcGxheTpub25lO3RleHQtdHJhbnNmb3JtOm5vbmV9LmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''e2Rpc3BsYXk6YmxvY2t9LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSBjZHMtaWNvbiwuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGNsci1pY29ue2Rpc3BsYXk6bm9uZX0uYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IC5jbHItaWNvbi10aXRsZXtkaXNwbGF5OmlubGluZX0uY2hlY2tib3gs''@;'; put 'put ''LnJhZGlve3Bvc2l0aW9uOnJlbGF0aXZlfS5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSwuY2hlY2tib3ggaW5wdXRbdHlwZT1yYWRpb10sLnJhZGlvIGlucHV0W3R5cGU9Y2hlY2tib3hdLC5yYWRpbyBpbnB1dFt0eXBlPXJhZGlvXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0''@;'; put 'put ''OjA7aGVpZ2h0OjA7d2lkdGg6MDtvcGFjaXR5OjB9LmNhcmQtZm9vdGVyIC5jaGVja2JveC5idG4gbGFiZWwsLmNhcmQtZm9vdGVyIC5yYWRpby5idG4gbGFiZWx7bGluZS1oZWlnaHQ6MS4xNXJlbX0uZHJvcGRvd24tbWVudS5jbHItYnV0dG9uLWdyb3VwLW1lbnV7dmlzaWJpbGl0eTp2aXNp''@;'; put 'put ''YmxlfWJ1dHRvbi5jbG9zZXtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToxLjhyZW07dHJhbnNpdGlvbjpjb2xvciBsaW5lYXIgLjJzO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OjIwMDt0ZXh0LXNoYWRvdzpub25lO2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3ItLW5vcm1hbCwgIzhjOGM4Yyl9LmNsb3NlIGNkcy1pY29uLC5jbG9zZSBjbHItaWNvbntmaWxsOiM4YzhjOGM7ZmlsbDp2YXIoLS1jbHItY2xv''@;'; put 'put ''c2UtY29sb3ItLW5vcm1hbCwgIzhjOGM4Yyl9LmNsb3NlOmZvY3VzLC5jbG9zZTpob3ZlciwuY2xvc2U6YWN0aXZle29wYWNpdHk6MTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1jbG9zZS1jb2xvci0taG92ZXIsIGJsYWNrKX0uY2xvc2U6Zm9jdXMgY2RzLWljb24sLmNsb3NlOmZvY3Vz''@;'; put 'put ''IGNsci1pY29uLC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuY2xvc2U6aG92ZXIgY2xyLWljb24sLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6IzAwMDtmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci0taG92ZXIsIGJsYWNrKX0uY2xvc2U6Zm9jdXN7''@;'; put 'put ''b3V0bGluZTpIaWdobGlnaHQgc29saWQgLjFyZW07b3V0bGluZTotd2Via2l0LWZvY3VzLXJpbmctY29sb3Igc29saWQgLjFyZW07b3V0bGluZS1vZmZzZXQ6LjA1cmVtfTpyb290ey0tY2xyLWFsZXJ0LWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLWFs''@;'; put 'put ''ZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tOTAwKTstLWNsci1hbGVydC1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tY29sb3IpOy0tY2xyLWFsZXJ0LWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LWNsb3NlLWljb24tb3BhY2l0eToxOy0tY2xyLWFsZXJ0LWNsb3NlLWljb24taG92ZXItb3BhY2l0eToxOy0tY2xyLWFwcC1sZXZlbC1hbGVydC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWxldmVsLWFsZXJ0LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1vcGFjaXR5Oi44Oy0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHk6MTstLWNsci1hbGVydC1ib3JkZXJyYWRpdXM6dmFy''@;'; put 'put ''KC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMpOy0tY2xyLWFsZXJ0LWluZm8tYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MCk7LS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi04MDApOy0tY2xyLWFsZXJ0LWluZm8taWNvbi1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTgwMCk7LS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1h''@;'; put 'put ''Y3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24tY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1vcGFjaXR5OnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1jbG9zZS1pY29uLW9wYWNpdHkpOy0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHk6dmFyKC0tY2xyLWFs''@;'; put 'put ''ZXJ0LWNsb3NlLWljb24taG92ZXItb3BhY2l0eSk7LS1jbHItYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy01MCk7LS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYWxlcnQtc3VjY2Vz''@;'; put 'put ''cy1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwKTstLWNsci1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwKTstLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWNvbG9y''@;'; put 'put ''KTstLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHItYWxlcnQtc3Vj''@;'; put 'put ''Y2Vzcy1jbG9zZS1pY29uLW9wYWNpdHk6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24tb3BhY2l0eSk7LS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNs''@;'; put 'put ''b3NlLWljb24taG92ZXItb3BhY2l0eTp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5KTstLWNsci1hbGVydC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci13YXJuaW5nLTEwMCk7LS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNsci1j''@;'; put 'put ''b2xvci1uZXV0cmFsLTkwMCk7LS1jbHItYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLXdhcm5pbmctODAwKTstLWNsci1hbGVydC13YXJuaW5nLWljb24tY29sb3I6dmFyKC0tY2xyLWNvbG9yLXdhcm5pbmctODAwKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlv''@;'; put 'put ''bi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxl''@;'; put 'put ''cnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLW9wYWNpdHk6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24tb3BhY2l0eSk7LS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29u''@;'; put 'put ''LWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItb3BhY2l0eTp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5KTstLWNsci1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci0xMDApOy0tY2xyLWFs''@;'; put 'put ''ZXJ0LWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYWxlcnQtZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTkwMCk7LS1jbHItYWxlcnQtZGFuZ2VyLWljb24tY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci05''@;'; put 'put ''MDApOy0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1jb2xvcik7LS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1jbG9z''@;'; put 'put ''ZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1vcGFjaXR5OnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLW9wYWNpdHkpOy0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5OnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHkpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWJnLWNvbG9yOnZhcigtLWNsci1j''@;'; put 'put ''b2xvci1hY3Rpb24tNjAwKTstLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1jbG9zZS1pY29uLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZv''@;'; put 'put ''bnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLW9wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLW9wYWNpdHkp''@;'; put 'put ''Oy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWhvdmVy''@;'; put 'put ''LW9wYWNpdHkpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWJnLWNvbG9yOmhzbCgyNiwgMTAwJSwgMzglKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2Ut''@;'; put 'put ''aWNvbi1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jbHItYXBwLWxldmVsLWFsZXJ0LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtd2FybmluZy1jbG9zZS1pY29uLW9wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLW9wYWNpdHkpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWNvbG9yKTstLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHkpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci04MDApOy0tY2xyLWFwcC1hbGVydC1k''@;'; put 'put ''YW5nZXItYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3IpOy0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tb3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tb3BhY2l0eSk7LS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHkpOy0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1zdWNjZXNzLTcwMCk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWNsb3NlLWlj''@;'; put 'put ''b24tY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2xyLWFwcC1sZXZlbC1hbGVydC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tY29sb3IpOy0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1vcGFjaXR5OnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1vcGFjaXR5KTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5OnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5KTstLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wLCB3aGl0ZSk7LS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LWluZm8tcGFnZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi04MDAsICMwMDU2N2EpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci13YXJuaW5nLTkwMCwgIzhmNWEwMCk7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdl''@;'; put 'put ''ci1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTkwMCwgIzk5MTcwMCl9LmFsZXJ0LWljb257aGVpZ2h0OjEuMnJlbTt3aWR0aDoxLjJyZW07bWFyZ2luLWxlZnQ6LS4xNXJlbTttYXJnaW4tdG9wOi0uMnJlbX0uYWxlcnQtaWNvbi13cmFwcGVye2ZsZXg6MCAwIDEuMjVyZW07YWxp''@;'; put 'put ''Z24tc2VsZjpzdGFydDtwYWRkaW5nLXRvcDouMDVyZW07aGVpZ2h0Oi45cmVtfS5hbGVydC1pdGVte2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7bWluLWhlaWdodDouOXJlbTttYXJnaW4tYm90dG9tOi4zcmVtfS5hbGVydC1pdGVtOmxhc3QtY2hpbGR7bWFy''@;'; put 'put ''Z2luLWJvdHRvbTowfS5hbGVydC1pdGVtc3tmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmc6LjVyZW0gLjU1cmVtO2Rpc3BsYXk6ZmxleH0uYWxlcnQtaXRlbT5zcGFuLC5hbGVydC10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO2ZsZXgt''@;'; put 'put ''c2hyaW5rOjE7ZmxleC1iYXNpczo5OCU7bWF4LXdpZHRoOjk4JTttYXJnaW4tcmlnaHQ6LjZyZW07dGV4dC1hbGlnbjpsZWZ0fS5hbGVydHtmb250LXNpemU6LjY1cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDouOXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5n''@;'; put 'put ''OmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzt3aWR0aDphdXRvO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWFsZXJ0LWJvcmRlcnJhZGl1cywgLjE1cmVtKTttYXJnaW4tdG9wOi4zcmVtO2JhY2tncm91bmQ6I2UzZjVmYzti''@;'; put 'put ''YWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1pbmZvLWJnLWNvbG9yLCAjZTNmNWZjKTtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IsICM2NjY2NjYpO2JvcmRlcjouMDVyZW0gc29saWQ7Ym9yZGVyLWNvbG9yOiMwMDU2N2E7Ym9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1hbGVydC1pbmZvLWJvcmRlci1jb2xvciwgIzAwNTY3YSl9LmFsZXJ0IC5hbGVydC1pY29ue2NvbG9yOiMwMDU2N2E7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8taWNvbi1jb2xvciwgIzAwNTY3YSl9LmFsZXJ0IC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCAjNjY2NjY2KTtib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiwu''@;'; put 'put ''YWxlcnQgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46Zm9jdXMsLmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUu''@;'; put 'put ''YnRuOmZvY3VzLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JvcmRlci1jb2xvcjojNGYwMDcwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYwMDcwKX0u''@;'; put 'put ''YWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Ym94LXNoYWRvdzowIC4wNXJlbSAjNGYwMDcwIGluc2V0O2JveC1zaGFkb3c6MCAuMDVyZW0gMCAwIHZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3Is''@;'; put 'put ''ICM0ZjAwNzApIGluc2V0fS5hbGVydCAuYWxlcnQtYWN0aW9uOmZvY3VzLC5hbGVydCAuYWxlcnQtYWN0aW9uOmhvdmVyLC5hbGVydCAuYWxlcnQtYWN0aW9uOmFjdGl2ZSwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cywuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvciwgIzRmMDA3MCk7Y29sb3I6IzRmMDA3MH0uYWxlcnQgLmNsb3Nle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvciwg''@;'; put 'put ''IzY2NjY2Nik7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1vcGFjaXR5LCAxKX0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257ZmlsbDojNjY2O2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1j''@;'; put 'put ''b2xvciwgIzY2NjY2Nil9LmFsZXJ0IC5jbG9zZTpmb2N1cywuYWxlcnQgLmNsb3NlOmhvdmVyLC5hbGVydCAuY2xvc2U6YWN0aXZle2NvbG9yOiM0ZjAwNzA7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvciwgIzRmMDA3MCk7b3BhY2l0eToxO29wYWNp''@;'; put 'put ''dHk6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5LCAxKX0uYWxlcnQuYWxlcnQtaW5mb3tiYWNrZ3JvdW5kOiNlM2Y1ZmM7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtaW5mby1iZy1jb2xvciwgI2UzZjVmYyk7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtaW5mby1mb250LWNvbG9yLCAjNjY2NjY2KTtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojMDA1NjdhO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3IsICMwMDU2N2EpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2Nv''@;'; put 'put ''bG9yOiMwMDU2N2E7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8taWNvbi1jb2xvciwgIzAwNTY3YSl9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24t''@;'; put 'put ''Y29sb3IsICM2NjY2NjYpO2JvcmRlci1jb2xvcjojNjY2O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IsICM2NjY2NjYpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjoj''@;'; put 'put ''NjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOiM2NjY7Ym9yZGVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46Zm9jdXMsLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46aG92ZXIsLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZl''@;'; put 'put ''LC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmZvY3VzLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmhvdmVyLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3JkZXItY29sb3I6IzRmMDA3MDtib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvciwgIzRmMDA3MCl9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVt''@;'; put 'put ''ICM0ZjAwNzAgaW5zZXQ7Ym94LXNoYWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvciwgIzRmMDA3MCkgaW5zZXR9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbjpmb2N1cywuYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9u''@;'; put 'put ''OmhvdmVyLC5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb246YWN0aXZlLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGU6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlOmFj''@;'; put 'put ''dGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYwMDcwKTtjb2xvcjojNGYwMDcwfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IsICM2NjY2NjYp''@;'; put 'put ''O29wYWNpdHk6MTtvcGFjaXR5OnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24tb3BhY2l0eSwgMSl9LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZSBjbHItaWNvbntmaWxsOiM2NjY7ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5m''@;'; put 'put ''by1jbG9zZS1pY29uLWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmV7Y29sb3I6IzRmMDA3MDtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1j''@;'; put 'put ''bG9zZS1pY29uLWhvdmVyLWNvbG9yLCAjNGYwMDcwKTtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHksIDEpfS5hbGVydC5hbGVydC1zdWNjZXNze2JhY2tncm91bmQ6I2RmZjBkMDtiYWNrZ3JvdW5kOnZhcigtLWNsci1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWJnLWNvbG9yLCAjZGZmMGQwKTtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IsICM2NjY2NjYpO2JvcmRlcjouMDVyZW0gc29saWQ7Ym9yZGVyLWNvbG9yOiMzMDZiMDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNj''@;'; put 'put ''ZXNzLWJvcmRlci1jb2xvciwgIzMwNmIwMCl9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6IzMwNmIwMDtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1pY29uLWNvbG9yLCAjMzA2YjAwKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9ucyAuZHJv''@;'; put 'put ''cGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvciwgIzY2NjY2Nik7Ym9yZGVyLWNvbG9yOiM2NjY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9''@;'; put 'put ''LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQt''@;'; put 'put ''YWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9u''@;'; put 'put ''LmJ0bjpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjpob3ZlciwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46Zm9jdXMsLmFsZXJ0LmFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46aG92ZXIsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JvcmRlci1jb2xvcjojNGYwMDcwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYw''@;'; put 'put ''MDcwKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gIzRmMDA3MCBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYwMDcwKSBpbnNldH0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uOmZvY3VzLC5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb246aG92ZXIsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFj''@;'; put 'put ''dGlvbjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5hbGVydC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGU6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3IsICM0ZjAwNzApO2NvbG9yOiM0ZjAwNzB9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3Nle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvciwgIzY2NjY2Nik7b3BhY2l0eToxO29wYWNp''@;'; put 'put ''dHk6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1vcGFjaXR5LCAxKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNsci1pY29ue2ZpbGw6IzY2NjtmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNs''@;'; put 'put ''b3NlLWljb24tY29sb3IsICM2NjY2NjYpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZXtjb2xvcjojNGYwMDcwO2NvbG9yOnZhcigtLWNsci1hbGVydC1z''@;'; put 'put ''dWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3IsICM0ZjAwNzApO29wYWNpdHk6MTtvcGFjaXR5OnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItb3BhY2l0eSwgMSl9LmFsZXJ0LmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDojZmZmNGM3O2JhY2tncm91bmQ6dmFy''@;'; put 'put ''KC0tY2xyLWFsZXJ0LXdhcm5pbmctYmctY29sb3IsICNmZmY0YzcpO2NvbG9yOiMzMzM7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvciwgIzMzMzMzMyk7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6I2FkNzYwMDtib3JkZXItY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yLCAjYWQ3NjAwKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaWNvbntjb2xvcjojNDU0NTQ1O2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWljb24tY29sb3IsICM0NTQ1NDUpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1h''@;'; put 'put ''Y3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yLCAjNjY2NjY2KTtib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9y''@;'; put 'put ''LCAjNjY2NjY2KX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IsICM2NjY2NjYpfS5hbGVydC5hbGVydC13YXJu''@;'; put 'put ''aW5nIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjojNjY2O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IsICM2NjY2NjYpfS5hbGVydC5hbGVydC13YXJuaW5nIC5h''@;'; put 'put ''bGVydC1hY3Rpb24uYnRuOmZvY3VzLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpmb2N1cywuYWxl''@;'; put 'put ''cnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Ym9yZGVyLWNvbG9yOiM0ZjAwNzA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUt''@;'; put 'put ''Y29sb3IsICM0ZjAwNzApfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Ym94LXNoYWRvdzowIC4wNXJlbSAjNGYwMDcwIGluc2V0O2JveC1zaGFkb3c6MCAuMDVyZW0g''@;'; put 'put ''MCAwIHZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IsICM0ZjAwNzApIGluc2V0fS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb246Zm9jdXMsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbjpob3ZlciwuYWxlcnQuYWxlcnQtd2Fybmlu''@;'; put 'put ''ZyAuYWxlcnQtYWN0aW9uOmFjdGl2ZSwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGU6aG92ZXIsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWFjdGl2ZS1jb2xvciwgIzRmMDA3MCk7Y29sb3I6IzRmMDA3MH0uYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2V7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yLCAjNjY2NjY2KTtvcGFj''@;'; put 'put ''aXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLW9wYWNpdHksIDEpfS5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDojNjY2O2ZpbGw6dmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZle2NvbG9yOiM0ZjAwNzA7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvciwgIzRmMDA3MCk7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5LCAxKX0uYWxlcnQuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6I2ZlZGRkNztiYWNr''@;'; put 'put ''Z3JvdW5kOnZhcigtLWNsci1hbGVydC1kYW5nZXItYmctY29sb3IsICNmZWRkZDcpO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yLCAjNjY2NjY2KTtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojOTkxNzAwO2JvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJvcmRlci1jb2xvciwgIzk5MTcwMCl9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaWNvbntjb2xvcjojOTkxNzAwO2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvciwgIzk5MTcwMCl9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxl''@;'; put 'put ''cnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yLCAjNjY2NjY2KTtib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29s''@;'; put 'put ''b3IsICM2NjY2NjYpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LWRhbmdl''@;'; put 'put ''ciAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjojNjY2O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQt''@;'; put 'put ''YWN0aW9uLmJ0bjpmb2N1cywuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46Zm9jdXMsLmFsZXJ0LmFsZXJ0''@;'; put 'put ''LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3JkZXItY29sb3I6IzRmMDA3MDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYw''@;'; put 'put ''MDcwKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICM0ZjAwNzAgaW5zZXQ7Ym94LXNoYWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYwMDcwKSBpbnNldH0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb246Zm9jdXMsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uOmhvdmVyLC5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbjph''@;'; put 'put ''Y3RpdmUsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGU6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXIt''@;'; put 'put ''YWN0aW9uLWFjdGl2ZS1jb2xvciwgIzRmMDA3MCk7Y29sb3I6IzRmMDA3MH0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvciwgIzY2NjY2Nik7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLW9wYWNpdHksIDEpfS5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlIGNsci1pY29ue2ZpbGw6IzY2NjtmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvciwg''@;'; put 'put ''IzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZle2NvbG9yOiM0ZjAwNzA7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhv''@;'; put 'put ''dmVyLWNvbG9yLCAjNGYwMDcwKTtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItb3BhY2l0eSwgMSl9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbntoZWlnaHQ6LjlyZW07d2lkdGg6LjlyZW07bWFyZ2luLXJpZ2h0Oi4zcmVtfS5h''@;'; put 'put ''bGVydCAuYWxlcnQtaXRlbSAuY2xyLWljb24rLmFsZXJ0LXRleHR7cGFkZGluZy1sZWZ0OjB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbisuYWxlcnQtdGV4dDpiZWZvcmV7Y29udGVudDpub25lfS5hbGVydCAuYWxlcnQtYWN0aW9uc3tmbGV4OjAgMCBhdXRvO3doaXRlLXNwYWNlOm5v''@;'; put 'put ''d3JhcH0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0Oi0uMXJlbX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duLWl0ZW17Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tdGV4dC1jb2xvciwgIzY2NjY2Nik7Zm9u''@;'; put 'put ''dC1zaXplOi43cmVtO2xpbmUtaGVpZ2h0OjEuMnJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWx9LmFsZXJ0IC5hbGVydC1hY3Rpb246bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6LjZyZW19LmFsZXJ0IC5hbGVydC1hY3Rpb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGV7dGV4dC1kZWNv''@;'; put 'put ''cmF0aW9uOnVuZGVybGluZX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiBidXR0b24uZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKXtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0IC5jbG9zZXt3aWR0aDoxLjJyZW07ZGlzcGxheTpibG9jaztoZWlnaHQ6MS44cmVtO2ZsZXg6MCAwIDEuNHJlbTtvcmRlcjoxMDA7cGFkZGluZy1yaWdo''@;'; put 'put ''dDouMnJlbX0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257bWFyZ2luLXRvcDotLjE1cmVtO2hlaWdodDoxLjE1cmVtO3dpZHRoOjEuMTVyZW19LmFsZXJ0IC5jbG9zZX4uYWxlcnQtaXRlbT4uYWxlcnQtYWN0aW9uc3twYWRkaW5nLXJpZ2h0Oi42cmVtfS5h''@;'; put 'put ''bGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnM+LmFsZXJ0LWFjdGlvbjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDouNnJlbX0uYWxlcnQtYXBwLWxldmVse21hcmdpbjowO2JvcmRlci1yYWRpdXM6MDtvdmVyZmxvdy15OmF1dG87YmFja2dyb3VuZDojMDA3MmEzO2JhY2tn''@;'; put 'put ''cm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJnLWNvbG9yLCAjMDA3MmEzKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yLCB3aGl0ZSk7Ym9yZGVyOjB9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaWNvbntjb2xvcjojZmZmO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IsIHdoaXRl''@;'; put 'put ''KTtib3JkZXItY29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2ZmZjtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWluZm8tYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0bjpmb2N1cywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG46Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3JkZXItY29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3IsIHdoaXRlKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICNmZmYgaW5zZXQ7Ym94LXNoYWRv''@;'; put 'put ''dzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3IsIHdoaXRlKSBpbnNldH0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb246Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWFjdGlvbjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGU6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3aGl0ZSk7Y29sb3I6I2ZmZn0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yLCB3aGl0ZSk7b3BhY2l0eTouODtvcGFjaXR5OnZhcigtLWNs''@;'; put 'put ''ci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLW9wYWNpdHksIC44KX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZSBjbHItaWNvbntmaWxsOiNmZmY7ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvciwg''@;'; put 'put ''d2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmFjdGl2ZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yLCB3''@;'; put 'put ''aGl0ZSk7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItb3BhY2l0eSwgMSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZve2JhY2tncm91bmQ6IzAwNzJhMztiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1iZy1j''@;'; put 'put ''b2xvciwgIzAwNzJhMyk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvciwgd2hpdGUpO2JvcmRlcjowfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5m''@;'; put 'put ''by1pY29uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgd2hpdGUpO2JvcmRlci1jb2xv''@;'; put 'put ''cjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2ZmZjtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6I2ZmZjti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46aG92ZXIsLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmhvdmVyLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gI2ZmZiBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9u''@;'; put 'put ''LWFjdGl2ZS1jb2xvciwgd2hpdGUpIGluc2V0fS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9u''@;'; put 'put ''OmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3IsIHdoaXRlKTtjb2xvcjojZmZmfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2V7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvciwgd2hp''@;'; put 'put ''dGUpO29wYWNpdHk6Ljg7b3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1vcGFjaXR5LCAuOCl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6''@;'; put 'put ''I2ZmZjtmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''aW5mbyAuY2xvc2U6YWN0aXZle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IsIHdoaXRlKTtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5LCAxKX0u''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOiNjMjFkMDA7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1iZy1jb2xvciwgI2MyMWQwMCk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yLCB3aGl0''@;'; put 'put ''ZSk7Ym9yZGVyOjB9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWljb257Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbnMgLmRy''@;'; put 'put ''b3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IsIHdoaXRlKTtib3JkZXItY29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yLCB3aGl0''@;'; put 'put ''ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvciwg''@;'; put 'put ''d2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFj''@;'; put 'put ''dGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''LmJ0bjphY3RpdmV7Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3IsIHdoaXRlKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gI2ZmZiBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3aGl0ZSkgaW5zZXR9LmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbjpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb246YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGU6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3aGl0ZSk7Y29sb3I6I2ZmZn0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yLCB3aGl0ZSk7b3BhY2l0eTou''@;'; put 'put ''ODtvcGFjaXR5OnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tb3BhY2l0eSwgLjgpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2UgY2xyLWljb257ZmlsbDojZmZmO2Zp''@;'; put 'put ''bGw6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1k''@;'; put 'put ''YW5nZXIgLmNsb3NlOmFjdGl2ZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItY29sb3IsIHdoaXRlKTtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHks''@;'; put 'put ''IDEpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOiNjMjU0MDA7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYmctY29sb3IsICNjMjU0MDApO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29s''@;'; put 'put ''b3IsIHdoaXRlKTtib3JkZXI6MH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWljb257Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctaWNvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQt''@;'; put 'put ''YWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IsIHdoaXRlKTtib3JkZXItY29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlv''@;'; put 'put ''bi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xv''@;'; put 'put ''ciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2Fy''@;'; put 'put ''bmluZy1hY3Rpb24tY29sb3IsIHdoaXRlKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2Fybmlu''@;'; put 'put ''ZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWFjdGl2ZS1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0''@;'; put 'put ''aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICNmZmYgaW5zZXQ7Ym94LXNoYWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1h''@;'; put 'put ''Y3RpdmUtY29sb3IsIHdoaXRlKSBpbnNldH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbjpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbjpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0''@;'; put 'put ''LWFjdGlvbjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGU6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10''@;'; put 'put ''b2dnbGU6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3aGl0ZSk7Y29sb3I6I2ZmZn0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJu''@;'; put 'put ''aW5nLWNsb3NlLWljb24tY29sb3IsIHdoaXRlKTtvcGFjaXR5Oi44O29wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tb3BhY2l0eSwgLjgpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC13YXJuaW5nIC5jbG9zZSBjbHItaWNvbntmaWxsOiNmZmY7ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13''@;'; put 'put ''YXJuaW5nIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yLCB3aGl0ZSk7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItb3BhY2l0eSwgMSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNze2JhY2tncm91bmQ6IzNjODUwMDtiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1iZy1jb2xvciwgIzNjODUwMCk7Y29sb3I6''@;'; put 'put ''I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvciwgd2hpdGUpO2JvcmRlcjowfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1pY29uLWNvbG9y''@;'; put 'put ''LCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvciwgd2hpdGUpO2JvcmRlci1jb2xvcjojZmZm''@;'; put 'put ''O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2Zm''@;'; put 'put ''Zjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXIt''@;'; put 'put ''Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0''@;'; put 'put ''LWFjdGlvbi5idG46aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5k''@;'; put 'put ''cm9wZG93bi10b2dnbGUuYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3''@;'; put 'put ''aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gI2ZmZiBpbnNldDtib3gtc2hhZG93OjAg''@;'; put 'put ''LjA1cmVtIDAgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvciwgd2hpdGUpIGluc2V0fS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0''@;'; put 'put ''aW9uOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTpo''@;'; put 'put ''b3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3IsIHdoaXRlKTtjb2xvcjojZmZmfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAu''@;'; put 'put ''Y2xvc2V7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvciwgd2hpdGUpO29wYWNpdHk6Ljg7b3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1vcGFjaXR5LCAuOCl9LmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC1zdWNjZXNzIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNsci1pY29ue2ZpbGw6I2ZmZjtmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWlj''@;'; put 'put ''b24taG92ZXItY29sb3IsIHdoaXRlKTtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5LCAxKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtc3twYWRkaW5nLXRvcDouM3JlbTtwYWRkaW5nLWJvdHRvbTouM3Jl''@;'; put 'put ''bX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVte2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6MS4ycmVtfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46MH0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtPnNw''@;'; put 'put ''YW4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtdGV4dHtmbGV4OjAgMSAxMDAlfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWljb24td3JhcHBlcnttYXJnaW4tdG9wOi4xNXJlbX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZXtoZWlnaHQ6MS44cmVtO292ZXJmbG93OmhpZGRlbn0uYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZSBjbHItaWNvbnttYXJnaW4tdG9wOi0uMjVyZW19LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZXt0ZXh0LWRlY29yYXRpb246bm9uZX0uYWxl''@;'; put 'put ''cnQtc217Zm9udC1zaXplOi41NXJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6LjhyZW19LmFsZXJ0LXNtIC5hbGVydC1pdGVtc3twYWRkaW5nOi4xNXJlbSAuMjVyZW19LmFsZXJ0LXNtIC5hbGVydC1pdGVte3BhZGRpbmctdG9wOi4wNXJlbTttYXJnaW4tYm90dG9tOi4y''@;'; put 'put ''cmVtfS5hbGVydC1zbSAuYWxlcnQtaXRlbTpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0uYWxlcnQtc20gLmFsZXJ0LWljb24td3JhcHBlcntwYWRkaW5nLXRvcDowO2hlaWdodDouOHJlbX0uYWxlcnQtc20gLmFsZXJ0LWljb257bWFyZ2luLWxlZnQ6LS4ycmVtO21hcmdpbi10b3A6LS4y''@;'; put 'put ''cmVtfS5hbGVydC1zbSAuYWxlcnQtaXRlbT5zcGFuLC5hbGVydC1zbSAuYWxlcnQtdGV4dHttYXJnaW4tcmlnaHQ6LjNyZW19LmFsZXJ0LXNtIC5jbG9zZXtwYWRkaW5nLXJpZ2h0OjA7ZmxleDowIDAgMS4ycmVtO2hlaWdodDoxLjJyZW07bGluZS1oZWlnaHQ6MS4ycmVtfS5hbGVydC1zbSAu''@;'; put 'put ''Y2xvc2UgY2RzLWljb24sLmFsZXJ0LXNtIC5jbG9zZSBjbHItaWNvbnttYXJnaW4tdG9wOi0uMjVyZW07bWFyZ2luLXJpZ2h0Oi0uMDVyZW07aGVpZ2h0OjFyZW07d2lkdGg6MXJlbTtsaW5lLWhlaWdodDoxLjA1cmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpey5hbGVy''@;'; put 'put ''dCAuYWxlcnQtaXRlbXtmbGV4LXdyYXA6d3JhcH0uYWxlcnQgLmFsZXJ0LXRleHR7bWFyZ2luLXJpZ2h0OjA7bWF4LXdpZHRoOjkwJTt3aWR0aDo5MCU7ZmxleC1iYXNpczo5MCV9LmFsZXJ0IC5hbGVydC1hY3Rpb25ze2ZsZXg6MSAwIDEwMCU7cGFkZGluZy10b3A6LjE1cmVtO3BhZGRpbmct''@;'; put 'put ''bGVmdDoxLjJyZW19LmFsZXJ0cy1wYWdlcnttYXJnaW4tdG9wOi4xNXJlbX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb25ze21hcmdpbi1sZWZ0OjIuMjVyZW19fS5hbGVydC1oaWRkZW57ZGlzcGxheTpub25lfS5jYXJkIC5hbGVydHttYXJnaW46LjNyZW0gMH0ubW9kYWwgLmFsZXJ0''@;'; put 'put ''Ky5tb2RhbC1oZWFkZXIsLm1vZGFsIC5hbGVydCsubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle21hcmdpbi10b3A6LjZyZW19LmFsZXJ0cy5hbGVydC1pbmZve2JhY2tncm91bmQ6IzAwNTY3YTtiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1iZy1jb2xvciwgIzAw''@;'; put 'put ''NTY3YSl9LmFsZXJ0cy5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDojOTkxNzAwO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItYmctY29sb3IsICM5OTE3MDApfS5hbGVydHMuYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOiM4ZjVhMDA7YmFja2dyb3VuZDp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3IsICM4ZjVhMDApfS5hbGVydHMuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOiMyNTUyMDA7YmFja2dyb3VuZDp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy05MDAsICMyNTUyMDApfS5hbGVydHMtcGFnZXJ7Y29sb3I6I2ZmZjtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXRleHQtY29sb3IsIHdoaXRlKTtmb250LXNpemU6LjY1cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtmbG9hdDpsZWZ0O21pbi1oZWlnaHQ6MS44cmVtO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjcuMnJlbX0uYWxlcnQtaW5mbyAuYWxl''@;'; put 'put ''cnRzLXBhZ2Vye2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWZvbnQtY29sb3IsIHdoaXRlKX0uYWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2Vye2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29s''@;'; put 'put ''b3IsIHdoaXRlKX0uYWxlcnQtZGFuZ2VyIC5hbGVydHMtcGFnZXJ7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlcntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1mb250LWNvbG9yLCB3aGl0ZSl9LmFsZXJ0cy1wYWdlci1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzow''@;'; put 'put ''O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXRleHQtY29sb3IsIHdoaXRlKTtjdXJzb3I6cG9pbnRlcn1idXR0b24uYWxlcnRzLXBhZ2VyLWJ1dHRvbntjdXJz''@;'; put 'put ''b3I6cG9pbnRlcn0uYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvciwgd2hpdGUpfS5hbGVydC1pbmZvIC5hbGVydHMtcGFnZXItYnV0dG9u''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydC1pbmZvIC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWZvbnQtY29sb3IsIHdoaXRlKX0uYWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWRhbmdlciAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''ZGFuZ2VyIC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvciwgd2hpdGUpfS5hbGVydC1zdWNjZXNzIC5hbGVydHMtcGFnZXItYnV0dG9uIGNkcy1pY29uLC5hbGVydC1zdWNjZXNz''@;'; put 'put ''IC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLXBhZ2VyLWZvbnQtY29sb3IsIHdoaXRlKX0uYWxlcnRzLXBhZ2VyLWNvbnRyb2x7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6LjNyZW07d2hpdGUtc3BhY2U6''@;'; put 'put ''bm93cmFwfS5hbGVydHMtcGFnZS1kb3due21hcmdpbi1sZWZ0OjEuMnJlbTt3aWR0aDozMy4zMyV9LmFsZXJ0cy1wYWdlLXVwe21hcmdpbi1yaWdodDoxLjJyZW07d2lkdGg6MzMuMzMlfS5hbGVydHMtcGFnZXItdGV4dHt3aWR0aDozMy4zMyV9OnJvb3R7LS1jbHItY2FyZC1iZy1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1jYXJkLWRpdmlkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMzAwKTstLWNsci1jYXJkLXRpdGxlLWNvbG9yOnZhcigtLWNsci1oNC1jb2xvcik7LS1jbHItY2FyZC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jbHItaDQt''@;'; put 'put ''Zm9udC13ZWlnaHQpOy0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgpOy0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cyk7LS1jbHItY2FyZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5l''@;'; put 'put ''dXRyYWwtMzAwKTstLWNsci1jYXJkLWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yKTstLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MDApOy0tY2xyLWNhcmQtY2xpY2thYmxlLWJveC1zaGFkb3ctY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNhcmQtY2xpY2thYmxlLWJvcmRlci1jb2xvcil9LmNhcmR7Ym94LXNoYWRvdzowIC4xNXJlbSAjZGVkZWRlO2JveC1zaGFkb3c6MCAuMTVyZW0gMCAwIHZhcigtLWNsci1jYXJkLWJveC1zaGFkb3ctY29sb3IpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRp''@;'; put 'put ''dXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojZGVkZWRlO2JvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY2FyZC1ib3JkZXItY29sb3IsICNkZWRlZGUpfS5jYXJkLmNsaWNrYWJsZTpob3Zlcntib3gtc2hhZG93OjAgLjE1cmVtICMxNzliZDM7Ym94LXNoYWRvdzowIC4xNXJlbSAwIDAgdmFyKC0tY2xyLWNhcmQtY2xpY2thYmxlLWJveC1zaGFkb3ctY29sb3IpO2JvcmRlci13aWR0''@;'; put 'put ''aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1jYXJkLWJvcmRlci13aWR0aCwgLjA1cmVtKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiMxNzliZDM7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3IsICMxNzliZDMpO2N1cnNv''@;'; put 'put ''cjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uMXJlbSk7dHJhbnNpdGlvbjpib3JkZXIgLjJzIGVhc2UsdHJhbnNmb3JtIC4ycyBlYXNlfS5jYXJkLWJsb2NrIC5jYXJkLWRpdmlkZXIsLmNhcmQgLmNhcmQtdGl0bGUsLmNhcmQgLmNhcmQtdGV4''@;'; put 'put ''dCwuY2FyZCAuY2FyZC1tZWRpYS1ibG9jaywuY2FyZCAubGlzdCwuY2FyZCAubGlzdC11bnN0eWxlZHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTouNnJlbX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyOmxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtdGl0bGU6bGFzdC1jaGlsZCwuY2FyZCAu''@;'; put 'put ''Y2FyZC10ZXh0Omxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2s6bGFzdC1jaGlsZCwuY2FyZCAubGlzdDpsYXN0LWNoaWxkLC5jYXJkIC5saXN0LXVuc3R5bGVkOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmly''@;'; put 'put ''c3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWcsLmNhcmQtaW1nPmltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDphdXRvO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmNhcmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvciwgd2hpdGUpO3dpZHRoOjEwMCU7bWFyZ2luLXRvcDoxLjJyZW19LmNhcmQgLmJ0bi1saW5re21pbi13aWR0aDowO3BhZGRpbmc6MH0uY2FyZC5jbGlja2FibGV7Y29sb3I6aW5oZXJpdH0uY2FyZD4ubGlzdCwuY2FyZD4ubGlzdC11bnN0eWxlZHtw''@;'; put 'put ''YWRkaW5nOi42cmVtIC45cmVtfS5jYXJkIC5saXN0LWdyb3Vwe3BhZGRpbmctbGVmdDowO21hcmdpbi1ib3R0b206MDtsaXN0LXN0eWxlOm5vbmV9LmNhcmQgLmxpc3QtZ3JvdXAtaXRlbXtwYWRkaW5nOi42cmVtIC45cmVtO2ZvbnQtc2l6ZTouN3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci1ib3R0b20td2lkdGg6LjA1cmVtO2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoLCAuMDVyZW0pO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1jb2xvcjojZGVkZWRlO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yLCAjZGVkZWRlKX1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmNhcmQgLmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUt''@;'; put 'put ''YmxvY2s7bWFyZ2luLXRvcDotLjZyZW19fS5jYXJkLWhlYWRlciwuY2FyZC1ibG9jaywuY2FyZC1mb290ZXJ7cGFkZGluZzouNnJlbSAuOXJlbX0uY2FyZC1oZWFkZXIsLmNhcmQtdGl0bGV7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItY2FyZC10aXRsZS1jb2xvciwgYmxhY2spO2ZvbnQt''@;'; put 'put ''d2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItY2FyZC10aXRsZS1mb250LXdlaWdodCwgMjAwKTtmb250LXNpemU6LjlyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsfWgxLmNhcmQtaGVhZGVyLGgxLmNhcmQtdGl0bGUsaDIuY2FyZC1oZWFkZXIsaDIuY2FyZC10aXRsZSxoMy5jYXJk''@;'; put 'put ''LWhlYWRlcixoMy5jYXJkLXRpdGxlLGg0LmNhcmQtaGVhZGVyLGg0LmNhcmQtdGl0bGUsaDUuY2FyZC1oZWFkZXIsaDUuY2FyZC10aXRsZSxoNi5jYXJkLWhlYWRlcixoNi5jYXJkLXRpdGxle21hcmdpbi10b3A6MH0uY2FyZC10ZXh0e2ZvbnQtc2l6ZTouN3JlbX0uY2FyZC1pbWc6Zmlyc3Qt''@;'; put 'put ''Y2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOi4xNXJlbTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6LjE1cmVtO2JvcmRlci10b3AtcmlnaHQt''@;'; put 'put ''cmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSl9LmNhcmQtaW1nOmxhc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOi4xNXJlbTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRl''@;'; put 'put ''ci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSl9LmNhcmQuY2FyZC1pbWc+aW1nLC5jYXJkPi5jYXJkLWltZzpmaXJzdC1jaGlsZDps''@;'; put 'put ''YXN0LWNoaWxkPmltZ3tib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSl9LmNhcmQtYmxvY2sgLmJ0biwuY2FyZC1ibG9jayAuYnRuLmJ0bi1saW5rLC5jYXJkLWJsb2NrIC5jYXJkLWxpbmssLmNhcmQtZm9vdGVy''@;'; put 'put ''IC5idG4sLmNhcmQtZm9vdGVyIC5idG4uYnRuLWxpbmssLmNhcmQtZm9vdGVyIC5jYXJkLWxpbmt7bWFyZ2luOjAgLjZyZW0gMCAwfS5jYXJkLWJsb2NrIC5idG4tZ3JvdXAgLmJ0biwuY2FyZC1mb290ZXIgLmJ0bi1ncm91cCAuYnRue21hcmdpbjowfS5jYXJkLWhlYWRlciwuY2FyZC1ibG9j''@;'; put 'put ''a3tib3JkZXItYm90dG9tLXdpZHRoOi4wNXJlbTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci1jYXJkLWJvcmRlci13aWR0aCwgLjA1cmVtKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6I2RlZGVkZTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1jYXJkLWJvcmRlci1jb2xvciwgI2RlZGVkZSl9LmNhcmQtaGVhZGVyOmxhc3QtY2hpbGQsLmNhcmQtYmxvY2s6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmNhcmQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO2JvcmRlci1ib3R0b20td2lkdGg6LjA1cmVtO2JvcmRlci1ib3R0''@;'; put 'put ''b20td2lkdGg6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoLCAuMDVyZW0pO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZGVkZWRlO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWNhcmQtZGl2aWRlci1jb2xvciwgI2RlZGVkZSl9LmNhcmQt''@;'; put 'put ''YmxvY2sgLmNhcmQtZGl2aWRlcnttYXJnaW4tbGVmdDotLjlyZW07bWFyZ2luLXJpZ2h0Oi0uOXJlbTt3aWR0aDphdXRvfS5jYXJkLWhlYWRlcisuY2FyZC1kaXZpZGVyLC5jYXJkLWJsb2NrKy5jYXJkLWRpdmlkZXJ7ZGlzcGxheTpub25lfS5jYXJkLW1lZGlhLWJsb2Nre2Rpc3BsYXk6Zmxl''@;'; put 'put ''eH0uY2FyZC1tZWRpYS1ibG9jayAuY2FyZC1tZWRpYS1pbWFnZXtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjAgMCBhdXRvO2hlaWdodDozcmVtO3dpZHRoOjNyZW07bWF4LWhlaWdodDozcmVtO21heC13aWR0aDozcmVtfS5jYXJkLW1lZGlhLWJsb2NrIC5jYXJkLW1lZGlhLWRlc2NyaXB0''@;'; put 'put ''aW9ue2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luOjAgMCAwIC42cmVtfS5jYXJkLW1lZGlhLWJsb2NrIC5jYXJkLW1lZGlhLXRpdGxlLC5jYXJkLW1lZGlhLWJsb2NrIHNwYW4sLmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtdGV4dHtkaXNwbGF5OmlubGlu''@;'; put 'put ''ZS1ibG9ja30uY2FyZC1tZWRpYS1ibG9jay53cmFwe2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2FyZC1tZWRpYS1ibG9jay53cmFwIC5jYXJkLW1lZGlhLWRlc2NyaXB0aW9ue21hcmdpbjouM3JlbSAwIDB9LmNhcmQtYmxvY2s+Lmxpc3QsLmNhcmQtYmxvY2s+Lmxpc3QtdW5zdHlsZWR7cGFk''@;'; put 'put ''ZGluZzowfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NTc2cHgpey5jYXJkLWNvbHVtbnN7Y29sdW1uLWNvdW50OjM7Y29sdW1uLWdhcDouNnJlbTticmVhay1pbnNpZGU6YXZvaWQ7Y29sdW1uLWZpbGw6YmFsYW5jZTstd2Via2l0LXBlcnNwZWN0aXZlOjF9LmNhcmQtY29sdW1ucy5j''@;'; put 'put ''YXJkLWNvbHVtbnMtMntjb2x1bW4tY291bnQ6Mn0uY2FyZC1jb2x1bW5zLmNhcmQtY29sdW1ucy00e2NvbHVtbi1jb3VudDo0fS5jYXJkLWNvbHVtbnMgLmNhcmR7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOi4zcmVtfS5jYXJkLWNvbHVtbnMgLmNsaWNrYWJsZXstd2Via2l0LWJhY2tm''@;'; put 'put ''YWNlLXZpc2liaWxpdHk6aGlkZGVuO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufX1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmNhcmQgLmNoZWNrYm94LmJ0biBsYWJlbCwuY2FyZCAuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwuY2FyZCAucmFkaW8uYnRuIGxhYmVsLC5j''@;'; put 'put ''YXJkIC5yYWRpby1pbmxpbmUuYnRuIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfX06cm9vdHstLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1kcm9wZG93bi1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJh''@;'; put 'put ''bC0wKTstLWNsci1kcm9wZG93bi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKTstLWNsci1kcm9wZG93bi1kaXZpZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTIwMCk7LS1jbHItZHJvcGRvd24tZGl2aWRlci1ib3JkZXItd2lkdGg6dmFyKC0tY2xy''@;'; put 'put ''LWdsb2JhbC1ib3JkZXJ3aWR0aCk7LS1jbHItZHJvcGRvd24tY2hpbGQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTUwMCk7LS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1ob3Zlci1jb2xvcik7LS1jbHItZHJvcGRvd24tc2VsZWN0''@;'; put 'put ''aW9uLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yKTstLWNsci1kcm9wZG93bi1ib3gtc2hhZG93OnZhcigtLWNsci1wb3BvdmVyLWJveC1zaGFkb3ctY29sb3IpOy0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3I6dmFyKC0tY2xyLXAxLWNvbG9yKTstLWNsci1kcm9wZG93''@;'; put 'put ''bi1oZWFkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtOTAwKTstLWNsci1kcm9wZG93bi1oZWFkZXItZm9udC13ZWlnaHQ6NjAwOy0tY2xyLWRyb3Bkb3duLWl0ZW0tY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1kcm9wZG93bi1pdGVtLWZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1wMS1mb250LXdlaWdodCl9LmRyb3Bkb3duLW1lbnUgLmJ0biwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8sLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzcywuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLWRhbmdlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzcywuZHJvcGRvd24tbWVudSAuYnRuLWxpbmssLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0sLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmRyb3Bkb3duLWhlYWRlcntvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0ZXh0LWFsaWduOmxlZnR9LmRyb3Bkb3due3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWZs''@;'; put 'put ''ZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjA7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNsci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3du''@;'; put 'put ''IC5kcm9wZG93bi10b2dnbGUgY2xyLWljb25bc2hhcGVePWFuZ2xlXXtwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjppbmhlcml0O2hlaWdodDouNXJlbTt3aWR0aDouNXJlbTttaW4taGVpZ2h0Oi41cmVtO21pbi13aWR0aDouNXJlbX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNv''@;'; put 'put ''bltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29uW3NoYXBlXj1hbmdsZV17bWFyZ2luLXRvcDp1bnNldDtwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjppbmhlcml0O2hlaWdodDouNXJlbTt3aWR0aDouNXJlbTstLWNkcy1nbG9iYWwtc3BhY2UtNzouNXJl''@;'; put 'put ''bX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5idG57cGFkZGluZy1yaWdodDoxLjJyZW07dGV4dC1vdmVyZmxvdzp1bnNldH0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257dHJhbnNmb3JtOm5vbmV9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1p''@;'; put 'put ''Y29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29u''@;'; put 'put ''W3NoYXBlXj1hbmdsZV17cmlnaHQ6LjZyZW19LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pe3BhZGRpbmc6MCAuNnJlbSAwIDA7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYWN0aXZlLXRleHQtY29sb3IsIGJsYWNrKX0uZHJvcGRvd24gLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZTpub3QoLmJ0bikgY2RzLWljb25bc2hhcGVePWNhcmV0XSwuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bikgY2xyLWljb25bc2hhcGVePWNhcmV0XSwuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bikgY2RzLWljb25bc2hhcGVePWFuZ2xlXSwuZHJv''@;'; put 'put ''cGRvd24gLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bikgY2xyLWljb25bc2hhcGVePWFuZ2xlXXtyaWdodDowfS5kcm9wZG93biBidXR0b24uZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKXtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtjb2xvcjojMDAwO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvciwgYmxhY2spfS5kcm9wZG93bi1tZW51Pip7ZGlzcGxheTpibG9jazt3aGl0ZS1zcGFjZTpub3dyYXB9LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6''@;'; put 'put ''MTAwJTtsZWZ0OjA7bWluLXdpZHRoOjZyZW07bWF4LXdpZHRoOjE4cmVtO2JhY2tncm91bmQ6I2ZmZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lk''@;'; put 'put ''dGgsIC4wNXJlbSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFk''@;'; put 'put ''aXVzLCAuMTVyZW0pO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtICM4YzhjOGM0MDtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSB2YXIoLS1jbHItZHJvcGRvd24tYm94LXNoYWRvdywgcmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpKTttYXJnaW4tdG9wOi4xcmVtO3BhZGRpbmc6LjZyZW0g''@;'; put 'put ''MDt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwNTB9LmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWhlYWRlcntjb2xvcjojMzMzO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1oZWFkZXItY29sb3IsICMzMzMzMzMpO2ZvbnQtc2l6ZTouNnJlbTtmb250LXdlaWdodDo2MDA7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWhlYWRlci1mb250LXdlaWdodCwgNjAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7cGFkZGluZzowIC42cmVtO2xpbmUtaGVpZ2h0Oi45cmVtO21hcmdpbjowfS5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnksLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1pbmZvLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZywuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLXN1Y2Nlc3MsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVte2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tY29sb3IsICM2NjY2NjYpO2ZvbnQtc2l6ZTouN3JlbTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6aW5oZXJpdDttYXJnaW46MDt3aWR0''@;'; put 'put ''aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRyb3Bkb3duLW1lbnUgLmJ0bjpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmhvdmVyLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzczpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzczpo''@;'; put 'put ''b3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJnLWhvdmVyLWNvbG9yLCAjZThlOGU4KTtjb2xvcjoj''@;'; put 'put ''NjY2O2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yLCAjNjY2NjY2KTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmFjdGl2''@;'; put 'put ''ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3Rp''@;'; put 'put ''dmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuYWN0aXZlLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4td2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmFjdGl2ZXtiYWNrZ3JvdW5kOiNkOGUzZTk7YmFja2dyb3VuZDp2YXIo''@;'; put 'put ''LS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9yLCAjZDhlM2U5KTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvciwgYmxhY2spfS5kcm9wZG93bi1tZW51IC5idG46YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmFjdGl2''@;'; put 'put ''ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6YWN0aXZlLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6YWN0aXZlLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tcHJpbWFyeTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluazphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06YWN0aXZle2Jv''@;'; put 'put ''eC1zaGFkb3c6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4taW5mbzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''b3V0bGluZS1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmZvY3VzLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tbGluazpmb2N1cywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpmb2N1c3t6LWluZGV4OmluaGVyaXR9LmRyb3Bkb3duLW1lbnUgLmJ0bi5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmRp''@;'; put 'put ''c2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmRpc2FibGVkLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdl''@;'; put 'put ''ci5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''ZGFuZ2VyLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmRpc2FibGVkLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4td2FybmluZzpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWxp''@;'; put 'put ''bms6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtvcGFjaXR5Oi40Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNh''@;'; put 'put ''YmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5''@;'; put 'put ''OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''c3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5k''@;'; put 'put ''cm9wZG93bi1pdGVtOmRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG46ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmRpc2FibGVkOmFjdGl2ZSwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDphY3Rp''@;'; put 'put ''dmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LW91dGxpbmUtd2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1''@;'; put 'put ''Y2Nlc3MuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpkaXNhYmxlZDph''@;'; put 'put ''Y3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2Fi''@;'; put 'put ''bGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtc3VjY2Vzcy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNz''@;'; put 'put ''LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZXttYXJnaW4tcmlnaHQ6MS4ycmVtO3BhZGRpbmctcmlnaHQ6LjZyZW19LmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmJlZm9y''@;'; put 'put ''ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5leHBhbmRhYmxlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4cGFuZGFibGU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS1wcmltYXJ5LmV4cGFuZGFibGU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5kYWJsZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5l''@;'; put 'put ''LWRhbmdlci5leHBhbmRhYmxlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZXhwYW5kYWJsZTpi''@;'; put 'put ''ZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmV4cGFuZGFibGU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhwYW5kYWJsZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3du''@;'; put 'put ''LWl0ZW0uZXhwYW5kYWJsZTpiZWZvcmV7Y29udGVudDoiIjtmbG9hdDpyaWdodDtoZWlnaHQ6LjZyZW07d2lkdGg6LjZyZW07dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMl''@;'; put 'put ''M0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMiUyMDEyJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3N0eWxlJTNFLmNscy0xJTdCZmlsbCUzQSUyMzlh''@;'; put 'put ''OWE5YSUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFQ2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0''@;'; put 'put ''LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250''@;'; put 'put ''YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tdG9wOi4zcmVtfS5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17cGFkZGluZzouMTVyZW0gMS4ycmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17cGFkZGluZzouM3JlbSAxLjJyZW19fS5kcm9wZG93bi1tZW51IGEuZHJvcGRvd24taXRlbXt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuZHJvcGRvd24tZGl2aWRlcntmb250LXNpemU6LjZyZW07Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS13aWR0aDouMDVyZW07Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItZHJvcGRvd24tZGl2aWRlci1ib3JkZXItd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOiNlOGU4ZTg7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZHJvcGRvd24tZGl2aWRlci1jb2xvciwgI2U4ZThlOCk7bWFyZ2luOi4zcmVtIDB9LmJ0bi1ncm91cC1vdmVyZmxvdy5vcGVuPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJz''@;'; put 'put ''LW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3du''@;'; put 'put ''LW1lbnV7dmlzaWJpbGl0eTp2aXNpYmxlfS5idG4tZ3JvdXAtb3ZlcmZsb3cuYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cuYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLnRh''@;'; put 'put ''YnMtb3ZlcmZsb3cuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24uYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51e3RvcDoxMDAlO2JvdHRvbTphdXRvO21hcmdpbjouMXJlbSAwIDB9LmJ0bi1ncm91cC1v''@;'; put 'put ''dmVyZmxvdy5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnV7bGVmdDowO3JpZ2h0OmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnV7cmlnaHQ6MDtsZWZ0OmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy50b3AtbGVmdD4uZHJvcGRvd24tbWVudSwuYnRuLWdy''@;'; put 'put ''b3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtbGVmdD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3At''@;'; put 'put ''cmlnaHQ+LmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjEwMCU7bWFyZ2luOjAgMCAuMXJlbX0uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3AtbGVmdD4uZHJv''@;'; put 'put ''cGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0''@;'; put 'put ''b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUsLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtyaWdodDoxMDAlO2xlZnQ6YXV0bzttYXJnaW46MCAuMXJlbSAwIDB9LmJ0bi1ncm91cC1vdmVyZmxvdy5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVu''@;'; put 'put ''dSwudGFicy1vdmVyZmxvdy5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnV7dG9wOjA7Ym90dG9tOmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5sZWZ0LXRv''@;'; put 'put ''cD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnV7Ym90dG9tOjA7dG9wOmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdy5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRh''@;'; put 'put ''YnMtb3ZlcmZsb3cucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnV7bGVmdDoxMDAlO3Jp''@;'; put 'put ''Z2h0OmF1dG87bWFyZ2luOjAgMCAwIC4xcmVtfS5idG4tZ3JvdXAtb3ZlcmZsb3cucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51e3RvcDowO2Jv''@;'; put 'put ''dHRvbTphdXRvfS5idG4tZ3JvdXAtb3ZlcmZsb3cucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51e2JvdHRvbTowO3RvcDphdXRvfS5idG4tZ3JvdXAtb3ZlcmZs''@;'; put 'put ''b3cgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51e2JvcmRlci1jb2xvcjojYjNiM2IzO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tY2hpbGQtYm9y''@;'; put 'put ''ZGVyLWNvbG9yLCAjYjNiM2IzKTtwb3NpdGlvbjphYnNvbHV0ZX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1t''@;'; put 'put ''ZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1t''@;'; put 'put ''ZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXtpbnNldDowIDEwMCUgYXV0byBhdXRvO21hcmdpbi10b3A6LS45NXJlbTttYXJnaW4tcmlnaHQ6LS4ycmVtfS5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJp''@;'; put 'put ''Z2h0LXRvcD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93''@;'; put 'put ''IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93''@;'; put 'put ''bi1tZW51e2luc2V0OjAgYXV0byBhdXRvIDEwMCU7bWFyZ2luLXRvcDotLjk1cmVtO21hcmdpbi1sZWZ0Oi0uMnJlbX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRv''@;'; put 'put ''bT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVu''@;'; put 'put ''dSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXtpbnNldDphdXRvIDEwMCUgMCBhdXRvO21hcmdpbi1ib3R0b206LS45NXJlbTtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6LS4ycmVtfS5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1v''@;'; put 'put ''dmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24t''@;'; put 'put ''bWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51e2luc2V0OmF1dG8gYXV0byAwIDEwMCU7bWFyZ2luLWJvdHRvbTotLjk1cmVtO21hcmdpbi1sZWZ0Oi0uMnJlbX06cm9vdHstLWNsci1iYWRnZS1iYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTYwMCk7LS1jbHItYmFkZ2UtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNjAwKTstLWNsci1iYWRnZS1pbmZvLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tODAwKTstLWNsci1iYWRnZS1pbmZvLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwKTstLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJhZGdlLXdhcm5pbmctYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNvbG9yLXdhcm5pbmctMTAwMCk7LS1jbHItYmFkZ2Utd2FybmluZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci05MDApOy0tY2xyLWJhZGdlLWRhbmdlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1iYWRnZS1ncmF5LWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTYwMCk7LS1jbHItYmFkZ2UtZ3JheS1jb2xvcjp2YXIoLS1jbHItYmFkZ2UtZm9udC1jb2xvci1saWdodCk7LS1jbHItYmFkZ2UtcHVycGxlLWJnLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTUwMCk7LS1jbHItYmFkZ2UtcHVycGxlLWNvbG9yOnZhcigtLWNsci1iYWRnZS1mb250LWNvbG9yLWxpZ2h0KTstLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tODAwKTstLWNsci1iYWRn''@;'; put 'put ''ZS1ibHVlLWNvbG9yOnZhcigtLWNsci1iYWRnZS1mb250LWNvbG9yLWxpZ2h0KTstLWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLXdhcm5pbmctMTAwMCk7LS1jbHItYmFkZ2Utb3JhbmdlLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJh''@;'; put 'put ''ZGdlLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MDApOy0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7dmVydGljYWwtYWxpZ246bWlkZGxlO2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi13aWR0aDouNzVyZW07YmFja2dyb3VuZDojOGM4YzhjO2hlaWdodDouNzVyZW07bGluZS1oZWlnaHQ6bm9ybWFsO2JvcmRlci1yYWRpdXM6LjVyZW07Zm9udC1zaXplOi41cmVtO3BhZGRpbmc6MCAuMnJlbTttYXJnaW4tcmln''@;'; put 'put ''aHQ6LjNyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWZvbnQtY29sb3ItbGlnaHQsIHdoaXRlKX0uYmFkZ2U6dmlzaXRlZHtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1iYWRnZS1mb250LWNvbG9yLWxp''@;'; put 'put ''Z2h0LCB3aGl0ZSl9LmJhZGdlLmJhZGdlLWdyYXksLmJhZGdlLmJhZGdlLTF7YmFja2dyb3VuZDojOGM4YzhjO2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IsICM4YzhjOGMpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IsIHdoaXRl''@;'; put 'put ''KX0uYmFkZ2UuYmFkZ2UtcHVycGxlLC5iYWRnZS5iYWRnZS0ye2JhY2tncm91bmQ6IzllNTdiYztiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3IsICM5ZTU3YmMpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvciwgd2hpdGUpfS5i''@;'; put 'put ''YWRnZS5iYWRnZS1ibHVlLC5iYWRnZS5iYWRnZS0ze2JhY2tncm91bmQ6IzAwNTY3YTtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yLCAjMDA1NjdhKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ibHVlLWNvbG9yLCB3aGl0ZSl9LmJhZGdlLmJhZGdl''@;'; put 'put ''LW9yYW5nZSwuYmFkZ2UuYmFkZ2UtNHtiYWNrZ3JvdW5kOiM2MTMyMDA7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWJnLWNvbG9yLCAjNjEzMjAwKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtY29sb3IsIHdoaXRlKX0uYmFkZ2UuYmFkZ2UtbGln''@;'; put 'put ''aHQtYmx1ZSwuYmFkZ2UuYmFkZ2UtNXtiYWNrZ3JvdW5kOiMxNzliZDM7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1iZy1jb2xvciwgIzE3OWJkMyk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvciwgd2hpdGUpfS5iYWRnZS5i''@;'; put 'put ''YWRnZS1pbmZve2JhY2tncm91bmQ6IzAwNTY3YTtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1pbmZvLWJnLWNvbG9yLCAjMDA1NjdhKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1iYWRnZS1pbmZvLWNvbG9yLCB3aGl0ZSl9LmJhZGdlLmJhZGdlLXN1Y2Nlc3N7YmFja2dyb3VuZDoj''@;'; put 'put ''MzA2YjAwO2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IsICMzMDZiMDApO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtY29sb3IsIHdoaXRlKX0uYmFkZ2UuYmFkZ2UtZGFuZ2Vye2JhY2tncm91bmQ6Izk5MTcwMDtiYWNrZ3JvdW5k''@;'; put 'put ''OnZhcigtLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3IsICM5OTE3MDApO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvciwgd2hpdGUpfS5iYWRnZS5iYWRnZS13YXJuaW5ne2JhY2tncm91bmQ6IzYxMzIwMDtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS13''@;'; put 'put ''YXJuaW5nLWJnLWNvbG9yLCAjNjEzMjAwKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1iYWRnZS13YXJuaW5nLWNvbG9yLCB3aGl0ZSl9XzotbXMtaW5wdXQtcGxhY2Vob2xkZXIgLmJhZGdlLDpyb290IC5iYWRnZXtwYWRkaW5nOi4xcmVtIC4xNXJlbSAwfUBzdXBwb3J0cyAoLW1zLWlt''@;'; put 'put ''ZS1hbGlnbjphdXRvKXsuYmFkZ2V7cGFkZGluZzouMXJlbSAuMTVyZW0gMH19OnJvb3R7LS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodDp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1sYWJlbC1mb250LWNvbG9yLWRhcms6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAw''@;'; put 'put ''MCk7LS1jbHItbGFiZWwtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci1sYWJlbC1mb250LXNpemU6LjU1cmVtOy0tY2xyLWxhYmVsLWZvbnQtd2VpZ2h0OjQwMDstLWNsci1sYWJlbC1sZXR0ZXItc3BhY2luZzouMDNlbTstLWNsci1sYWJl''@;'; put 'put ''bC1ib3JkZXItcmFkaXVzOi42cmVtOy0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTIwMCk7LS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLWxhYmVsLWdyYXktY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWxhYmVsLWZvbnQtY29sb3ItbGlnaHQpOy0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi01MDApOy0tY2xyLWxhYmVsLXB1cnBsZS1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodCk7LS1jbHItbGFiZWwtYmx1''@;'; put 'put ''ZS1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTgwMCk7LS1jbHItbGFiZWwtYmx1ZS1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodCk7LS1jbHItbGFiZWwtb3JhbmdlLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci13YXJuaW5nLTEwMDApOy0tY2xyLWxhYmVs''@;'; put 'put ''LW9yYW5nZS1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1kYXJrKTstLWNsci1sYWJlbC1saWdodC1ibHVlLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNTAwKTstLWNsci1sYWJlbC1saWdodC1ibHVlLWNvbG9yOnZhcigtLWNsci1sYWJlbC1mb250LWNvbG9yLWRh''@;'; put 'put ''cmspOy0tY2xyLWxhYmVsLWluZm8tYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MCk7LS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tODAwKTstLWNsci1sYWJlbC1pbmZvLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9u''@;'; put 'put ''LTgwMCk7LS1jbHItbGFiZWwtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy01MCk7LS1jbHItbGFiZWwtc3VjY2Vzcy1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1zdWNjZXNzLTgwMCk7LS1jbHItbGFiZWwtc3VjY2Vzcy1ib3JkZXItY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWNvbG9yLXN1Y2Nlc3MtODAwKTstLWNsci1sYWJlbC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci13YXJuaW5nLTEwMCk7LS1jbHItbGFiZWwtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTkwMCk7LS1jbHItbGFiZWwtd2FybmluZy1ib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWNvbG9yLXdhcm5pbmctODAwKTstLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci0xMDApOy0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItOTAwKTstLWNsci1sYWJlbC1kYW5n''@;'; put 'put ''ZXItYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItOTAwKX0ubGFiZWwsYS5sYWJlbHtmb250LXNpemU6LjU1cmVtO2ZvbnQtc2l6ZTp2YXIoLS1jbHItbGFiZWwtZm9udC1zaXplLCAuNTVyZW0pO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItbGFiZWwt''@;'; put 'put ''Zm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6LjAzZW07bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWxhYmVsLWxldHRlci1zcGFjaW5nLCAuMDNlbSk7bGluZS1oZWlnaHQ6LjZyZW07ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1z''@;'; put 'put ''OmNlbnRlcjtwYWRkaW5nOjAgLjZyZW07Ym9yZGVyLXJhZGl1czouNnJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1sYWJlbC1ib3JkZXItcmFkaXVzLCAuNnJlbSk7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzhjOGM4Yztib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVs''@;'; put 'put ''LWRlZmF1bHQtYm9yZGVyLWNvbG9yLCAjOGM4YzhjKTtoZWlnaHQ6MS4wNXJlbTttYXJnaW46MCAuM3JlbSAuMDVyZW0gMDt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodCwgYmxhY2spfS5sYWJlbDp2aXNpdGVkLGEu''@;'; put 'put ''bGFiZWw6dmlzaXRlZHtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1sYWJlbC1mb250LWNvbG9yLWxpZ2h0LCBibGFjayl9LmxhYmVsOmZvY3VzLC5sYWJlbDpob3ZlciwubGFiZWw6YWN0aXZlLGEubGFiZWw6Zm9jdXMsYS5sYWJlbDpob3ZlcixhLmxhYmVsOmFjdGl2ZXt0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246bm9uZX0ubGFiZWwuY2xpY2thYmxlOmhvdmVyLC5sYWJlbC5jbGlja2FibGU6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlOmhvdmVyLGEubGFiZWwuY2xpY2thYmxlOmFjdGl2ZXtiYWNrZ3JvdW5kOiNlOGU4ZTg7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtYmctaG92ZXItY29s''@;'; put 'put ''b3IsICNlOGU4ZTgpfS5sYWJlbC5jbGlja2FibGU6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICM4YzhjOGMgaW5zZXQ7Ym94LXNoYWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWxhYmVsLWdyYXktYmctY29sb3IsICM4YzhjOGMpIGluc2V0''@;'; put 'put ''O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC41cHgpfS5sYWJlbC5sYWJlbC1ncmF5LC5sYWJlbC5sYWJlbC0xLGEubGFiZWwubGFiZWwtZ3JheSxhLmxhYmVsLmxhYmVsLTF7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzhjOGM4Yztib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVs''@;'; put 'put ''LWdyYXktYmctY29sb3IsICM4YzhjOGMpfS5sYWJlbC5jbGlja2FibGUubGFiZWwtZ3JheTpob3ZlciwubGFiZWwuY2xpY2thYmxlLmxhYmVsLWdyYXk6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWdyYXk6aG92ZXIsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtZ3JheTphY3RpdmV7''@;'; put 'put ''dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yLCAjZThlOGU4KX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLWdyYXk6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWdyYXk6YWN0aXZle2Jv''@;'; put 'put ''eC1zaGFkb3c6MCAuMDVyZW0gIzhjOGM4YyBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvciwgIzhjOGM4YykgaW5zZXQ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLjVweCl9LmxhYmVsLmxhYmVsLWdyYXk+LmJhZGdlLGEubGFiZWwubGFi''@;'; put 'put ''ZWwtZ3JheT4uYmFkZ2V7YmFja2dyb3VuZDojOGM4YzhjO2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IsICM4YzhjOGMpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IsIHdoaXRlKX0ubGFiZWwubGFiZWwtcHVycGxlLC5sYWJlbC5s''@;'; put 'put ''YWJlbC0yLGEubGFiZWwubGFiZWwtcHVycGxlLGEubGFiZWwubGFiZWwtMntib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojOWU1N2JjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItbGFiZWwtcHVycGxlLWJnLWNvbG9yLCAjOWU1N2JjKX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLXB1''@;'; put 'put ''cnBsZTpob3ZlciwubGFiZWwuY2xpY2thYmxlLmxhYmVsLXB1cnBsZTphY3RpdmUsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtcHVycGxlOmhvdmVyLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLXB1cnBsZTphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDojZThlOGU4O2Jh''@;'; put 'put ''Y2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yLCAjZThlOGU4KX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLXB1cnBsZTphY3RpdmUsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtcHVycGxlOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICM5ZTU3YmMgaW5zZXQ7Ym94LXNo''@;'; put 'put ''YWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvciwgIzllNTdiYykgaW5zZXQ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLjVweCl9LmxhYmVsLmxhYmVsLXB1cnBsZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1wdXJwbGU+LmJhZGdle2JhY2tncm91bmQ6IzllNTdi''@;'; put 'put ''YztiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3IsICM5ZTU3YmMpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvciwgd2hpdGUpfS5sYWJlbC5sYWJlbC1ibHVlLC5sYWJlbC5sYWJlbC0zLGEubGFiZWwubGFiZWwtYmx1ZSxhLmxh''@;'; put 'put ''YmVsLmxhYmVsLTN7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzAwNTY3YTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLWJsdWUtYmctY29sb3IsICMwMDU2N2EpfS5sYWJlbC5jbGlja2FibGUubGFiZWwtYmx1ZTpob3ZlciwubGFiZWwuY2xpY2thYmxlLmxhYmVsLWJs''@;'; put 'put ''dWU6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWJsdWU6aG92ZXIsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtYmx1ZTphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yLCAj''@;'; put 'put ''ZThlOGU4KX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLWJsdWU6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWJsdWU6YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gIzAwNTY3YSBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1jbHItbGFiZWwtYmx1ZS1iZy1jb2xv''@;'; put 'put ''ciwgIzAwNTY3YSkgaW5zZXQ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLjVweCl9LmxhYmVsLmxhYmVsLWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDojMDA1NjdhO2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWJsdWUtYmctY29sb3IsICMwMDU2N2Ep''@;'; put 'put ''O2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWJsdWUtY29sb3IsIHdoaXRlKX0ubGFiZWwubGFiZWwtb3JhbmdlLC5sYWJlbC5sYWJlbC00LGEubGFiZWwubGFiZWwtb3JhbmdlLGEubGFiZWwubGFiZWwtNHtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojNjEzMjAw''@;'; put 'put ''O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItbGFiZWwtb3JhbmdlLWJnLWNvbG9yLCAjNjEzMjAwKX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLW9yYW5nZTpob3ZlciwubGFiZWwuY2xpY2thYmxlLmxhYmVsLW9yYW5nZTphY3RpdmUsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtb3JhbmdlOmhvdmVy''@;'; put 'put ''LGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLW9yYW5nZTphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yLCAjZThlOGU4KX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLW9yYW5nZTphY3Rp''@;'; put 'put ''dmUsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtb3JhbmdlOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICM2MTMyMDAgaW5zZXQ7Ym94LXNoYWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWxhYmVsLW9yYW5nZS1iZy1jb2xvciwgIzYxMzIwMCkgaW5zZXQ7dHJhbnNmb3JtOnRyYW5zbGF0''@;'; put 'put ''ZVkoLjVweCl9LmxhYmVsLmxhYmVsLW9yYW5nZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1vcmFuZ2U+LmJhZGdle2JhY2tncm91bmQ6IzYxMzIwMDtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3IsICM2MTMyMDApO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJh''@;'; put 'put ''ZGdlLW9yYW5nZS1jb2xvciwgd2hpdGUpfS5sYWJlbC5sYWJlbC1saWdodC1ibHVlLC5sYWJlbC5sYWJlbC01LGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZSxhLmxhYmVsLmxhYmVsLTV7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzE3OWJkMztib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWxhYmVsLWxpZ2h0LWJsdWUtYmctY29sb3IsICMxNzliZDMpfS5sYWJlbC5jbGlja2FibGUubGFiZWwtbGlnaHQtYmx1ZTpob3ZlciwubGFiZWwuY2xpY2thYmxlLmxhYmVsLWxpZ2h0LWJsdWU6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWxpZ2h0LWJsdWU6aG92ZXIsYS5s''@;'; put 'put ''YWJlbC5jbGlja2FibGUubGFiZWwtbGlnaHQtYmx1ZTphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yLCAjZThlOGU4KX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLWxpZ2h0LWJsdWU6''@;'; put 'put ''YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWxpZ2h0LWJsdWU6YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gIzE3OWJkMyBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1jbHItbGFiZWwtbGlnaHQtYmx1ZS1iZy1jb2xvciwgIzE3OWJkMykgaW5zZXQ7dHJhbnNm''@;'; put 'put ''b3JtOnRyYW5zbGF0ZVkoLjVweCl9LmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDojMTc5YmQzO2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtYmctY29sb3IsICMxNzliZDMpO2NvbG9y''@;'; put 'put ''OiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtY29sb3IsIHdoaXRlKX0ubGFiZWwubGFiZWwtaW5mbyxhLmxhYmVsLmxhYmVsLWluZm97YmFja2dyb3VuZDojZTNmNWZjO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWluZm8tYmctY29sb3IsICNlM2Y1ZmMpO2NvbG9y''@;'; put 'put ''OiMwMDU2N2E7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWluZm8tZm9udC1jb2xvciwgIzAwNTY3YSk7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzAwNTY3YTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLWluZm8tYm9yZGVyLWNvbG9yLCAjMDA1NjdhKX0ubGFiZWwubGFi''@;'; put 'put ''ZWwtc3VjY2VzcyxhLmxhYmVsLmxhYmVsLXN1Y2Nlc3N7YmFja2dyb3VuZDojZGZmMGQwO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtYmctY29sb3IsICNkZmYwZDApO2NvbG9yOiMzMDZiMDA7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtZm9udC1jb2xvciwgIzMw''@;'; put 'put ''NmIwMCk7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzMwNmIwMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yLCAjMzA2YjAwKX0ubGFiZWwubGFiZWwtd2FybmluZyxhLmxhYmVsLmxhYmVsLXdhcm5pbmd7YmFja2dyb3VuZDojZmZm''@;'; put 'put ''NGM3O2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctYmctY29sb3IsICNmZmY0YzcpO2NvbG9yOiMzMzM7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctZm9udC1jb2xvciwgIzMzMzMzMyk7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6I2FkNzYwMDtib3Jk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctYm9yZGVyLWNvbG9yLCAjYWQ3NjAwKX0ubGFiZWwubGFiZWwtZGFuZ2VyLGEubGFiZWwubGFiZWwtZGFuZ2Vye2JhY2tncm91bmQ6I2ZlZGRkNztiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3IsICNmZWRk''@;'; put 'put ''ZDcpO2NvbG9yOiM5OTE3MDA7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yLCAjOTkxNzAwKTtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojOTkxNzAwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRlci1jb2xvciwgIzk5MTcw''@;'; put 'put ''MCl9LmxhYmVsPi5iYWRnZSxhLmxhYmVsPi5iYWRnZXttYXJnaW46MCAtLjQ1cmVtIDAgLjNyZW19QC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpey5sYWJlbCxhLmxhYmVse3ZlcnRpY2FsLWFsaWduOmJvdHRvbX19OnJvb3R7LS1jbHItbG9naW4tdGl0bGUtY29sb3I6dmFyKC0tY2xyLWgx''@;'; put 'put ''LWNvbG9yKTstLWNsci1sb2dpbi10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jbHItaDEtZm9udC13ZWlnaHQpOy0tY2xyLWxvZ2luLXRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1oMS1mb250LWZhbWlseSk7LS1jbHItbG9naW4tdHJhZGVtYXJrLWNvbG9yOnZhcigtLWNsci1oMi1jb2xv''@;'; put 'put ''cik7LS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMi1mb250LXdlaWdodCk7LS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtZmFtaWx5OnZhcigtLWNsci1oMi1mb250LWZhbWlseSk7LS1jbHItbG9naW4tc3VidGl0bGUtY29sb3I6dmFyKC0tY2xyLWgzLWNv''@;'; put 'put ''bG9yKTstLWNsci1sb2dpbi1zdWJ0aXRsZS1mb250LXdlaWdodDp2YXIoLS1jbHItaDMtZm9udC13ZWlnaHQpOy0tY2xyLWxvZ2luLXN1YnRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1oMy1mb250LWZhbWlseSk7LS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZ2xv''@;'; put 'put ''YmFsLWFwcC1iYWNrZ3JvdW5kKTstLWNsci1sb2dpbi1iYWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQyUzRnhtbCUyMHZlcnNpb24lM0QlMjIxLjAlMjIlMjBlbmNvZGluZyUzRCUyMnV0Zi04JTIyJTNGJTNFJTBEJTBBJTNDJTIxRE9DVFlQRSUyMHN2''@;'; put 'put ''ZyUyMFBVQkxJQyUyMCUyMi0lMkYlMkZXM0MlMkYlMkZEVEQlMjBTVkclMjAxLjElMkYlMkZFTiUyMiUyMCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGR3JhcGhpY3MlMkZTVkclMkYxLjElMkZEVEQlMkZzdmcxMS5kdGQlMjIlM0UlMEQlMEElM0NzdmclMEQlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwaWQlM0QlMjJuby1hc3BlY3QtcmF0aW8lMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHhtbG5z''@;'; put 'put ''JTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHglM0QlMjIwcHglMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB5JTNEJTIyMHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwaGVpZ2h0JTNEJTIyMjA1NS41NXB4''@;'; put 'put ''JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwd2lkdGglM0QlMjIxNDQwcHglMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyMDU1LjU1JTIwMTQ0MCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWluWU1pbiUyMHNsaWNl''@;'; put 'put ''JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZGVzYyUzRUxvZ2luJTIwSW1hZ2UlM0MlMkZkZXNjJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMHN0cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0Ql''@;'; put 'put ''MjIxJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MC4wMDAwMDAlMkMlMjAtNC4wMDAwMDAlMjklMjIlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTNFJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzRkFGQUZBJTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyNCUyMiUzRSUzQyUyRnJlY3Ql''@;'; put 'put ''M0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBw''@;'; put 'put ''b2ludHMlM0QlMjIxMTA4LjQzJTIwMTQ0My42MyUyMDExMDkuMDglMjAxNDQzLjYzJTIwNDQzLjQ0JTIwNzc3Ljc0JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIy''@;'; put 'put ''JTIzOTNEOENBJTIyJTIwb3BhY2l0eSUzRCUyMjAuNiUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBvdmVybGF5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDMzNC45MiUyMDQ0My40NCUyMDc3Ny43NCUyMDAuNzklMjAzMzQuNDklMjIlM0UlM0MlMkZwb2x5Z29uJTNF''@;'; put 'put ''JTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIwLjc5JTIwMjExLjg4JTIwMC43OSUyMDMyOS42JTIwNTkuNjIlMjAyNzAuNzclMjIlM0UlM0MlMkZwb2x5''@;'; put 'put ''Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxNjAuNjUlMjAxNjkuNzQlMjAwLjc5JTIwOS43MyUyMDAuNzklMjAyMTEuODglMjA5MC4yNyUy''@;'; put 'put ''MDMwMS40NiUyMDU5LjYyJTIwMjcwLjc3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyNTAzLjc3JTIwMTQ0My42''@;'; put 'put ''MyUyMDY5Ny40NyUyMDE0NDMuNjMlMjA4MDMuNzQlMjAxMzM3LjM2JTIwNzA2LjkzJTIwMTI0MC40MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NERTNF''@;'; put 'put ''RSUyMiUyMHBvaW50cyUzRCUyMjE1OC4zMyUyMDY5MS4xNSUyMDAuNzklMjA4NDguNzIlMjAwLjc5JTIwMTQyNy40MyUyMDQ0Ny41MiUyMDk4MC43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzQ0VEREUwJTIyJTIwcG9pbnRzJTNEJTIyMjU3LjcxJTIwNTkxLjc1JTIwMC43OSUyMDMzNC40OSUyMDAuNzklMjA1MzMuNDIlMjAxNTguMzMlMjA2OTEuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBOUM5RDUlMjIlMjBwb2ludHMlM0QlMjIwLjc5JTIwNTMzLjQyJTIwMC43OSUyMDg0OC43MiUyMDE1OC4zMyUyMDY5MS4xNSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDRFNyUyMiUyMHBvaW50cyUzRCUyMjgwNi40NiUyMDExNDAuODklMjA1NDYuOTQlMjA4ODEuMjglMjA0NDcuNTIlMjA5ODAuNyUyMDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5''@;'; put 'put ''Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RkM0REYlMjIlMjBwb2ludHMlM0QlMjI0NDcuNTIlMjA5ODAuNyUyMDAuNzklMjAxNDI3LjQzJTIwMC43OSUyMDE0NDMuNjMlMjA1MDMu''@;'; put 'put ''NzclMjAxNDQzLjYzJTIwNzA2LjkzJTIwMTI0MC40MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzcwQzBEQyUyMiUyMHBvaW50cyUzRCUyMjYwOC4yMyUy''@;'; put 'put ''MDgxOS45OSUyMDU0Ni45NCUyMDg4MS4yOCUyMDgwNi40NiUyMDExNDAuODklMjA4NjcuNjQlMjAxMDc5LjclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5''@;'; put 'put ''NkM3REYlMjIlMjBwb2ludHMlM0QlMjI0MjAuMDUlMjA0MjkuMzklMjAzMTkuMDElMjA1MzAuNDUlMjA2MDguMjMlMjA4MTkuOTklMjA3MDkuMyUyMDcxOC45MSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY5QUZENCUyMiUyMHBvaW50cyUzRCUyMjcwOS4zJTIwNzE4LjkxJTIwNjA4LjIzJTIwODE5Ljk5JTIwODY3LjY0JTIwMTA3OS43JTIwOTY4Ljc0JTIwOTc4LjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RUI1QkMlMjIlMjBwb2ludHMlM0QlMjI2MTkuNTklMjAyMjkuODIlMjAzOTMuNDIlMjAzLjEyJTIwMzI3LjI3JTIwMy4xMiUyMDE2MC42NSUyMDE2OS43NCUyMDQyMC4wNSUyMDQyOS4zOSUy''@;'; put 'put ''MiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzhFQjVCQyUyMiUyMHBvaW50cyUzRCUyMjMxOS4wMSUyMDUzMC40NSUyMDMxOS4wMSUyMDUzMC40NSUyMDkwLjI3''@;'; put 'put ''JTIwMzAxLjQ2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzN0NCMEM3JTIyJTIwcG9pbnRzJTNEJTIyMTYwLjY1JTIwMTY5Ljc0JTIwNTkuNjIlMjAyNzAu''@;'; put 'put ''NzclMjA5MC4yNyUyMDMwMS40NiUyMDMxOS4wMSUyMDUzMC40NSUyMDQyMC4wNSUyMDQyOS4zOSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzg0QzREMiUy''@;'; put 'put ''MiUyMHBvaW50cyUzRCUyMjU5LjYyJTIwMjcwLjc3JTIwMC43OSUyMDMyOS42JTIwMC43OSUyMDMzNC40OSUyMDI1Ny43MSUyMDU5MS43NSUyMDMxOS4wMSUyMDUzMC40NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdDQjBDNyUyMiUyMHBvaW50cyUzRCUyMjUzNy41NSUyMDMuMTIlMjAzOTMuNDIlMjAzLjEyJTIwNjE5LjU5JTIwMjI5LjgyJTIwNjkxLjc0JTIwMTU3LjY2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzODdEMURCJTIyJTIwcG9pbnRzJTNEJTIyODQ2LjI1JTIwMy4xMiUyMDUzNy41NSUyMDMuMTIlMjA2OTEuNzQlMjAxNTcuNjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMlM0QlMjI5MDkuODclMjAxNDQzLjYzJTIwODUwLjE5JTIwMTM4My44NyUyMDc5MC40MyUyMDE0NDMuNjMlMjIlM0UlM0MlMkZwb2x5Z29u''@;'; put 'put ''JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIzMTkuMDElMjA1MzAuNDUlMjAyNTcuNzElMjA1OTEuNzUlMjA0NDMuNDQlMjA3NzcuNzQlMjA1NDYu''@;'; put 'put ''OTQlMjA4ODEuMjglMjA2MDguMjMlMjA4MTkuOTklMjA4NjcuNjQlMjAxMDc5LjclMjA4NjcuNjQlMjAxMDc5LjclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIl''@;'; put 'put ''MjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjI4NjcuNjQlMjAxMDc5LjclMjA4MDYuNDYlMjAxMTQwLjg5JTIwOTAzLjMxJTIwMTIzNy43OCUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMDY1LjU3JTIwMTA3NS41MiUyMDk2OC43NCUyMDk3OC42JTIwODY3LjY0JTIwMTA3OS43JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjk2NC40NiUyMDExNzYuNjMlMjA4NjcuNjQlMjAxMDc5LjclMjA4NjcuNjQlMjAxMDc5LjclMjA5NjQuNDYlMjAxMTc2LjYzJTIy''@;'; put 'put ''JTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMjMxLjE2JTIwMTQ0My42MyUyMDEw''@;'; put 'put ''MTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTI0MC4wOCUyMDcwNy4yMiUyMDExNjcu''@;'; put 'put ''OSUyMDc3OS40JTIwMTI2NC42OCUyMDg3Ni40JTIwMTMzNi44NyUyMDgwNC4yMiUyMDEyNDAuMDglMjA3MDcuMjElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIl''@;'; put 'put ''MjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI5ODAuODMlMjA0NDcuMzklMjA2OTEuNzQlMjAxNTcuNjYlMjA2MTkuNTklMjAyMjkuODIlMjA5MDguNjYlMjA1MTkuNTYlMjA5ODAuODMlMjA0NDcuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjI3MDkuMyUyMDcxOC45MSUyMDk2OC43NCUyMDk3OC42JTIwMTE2Ny45MSUyMDc3OS40JTIwOTA4LjY2JTIwNTE5LjU1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUw''@;'; put 'put ''RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjlBRkQ0JTIyJTIwcG9pbnRzJTNEJTIyOTgwLjgzJTIwNDQ3LjM5JTIwOTA4LjY2JTIwNTE5LjU1JTIwMTE2Ny45MSUyMDc3OS40JTIwMTI0MC4wOCUy''@;'; put 'put ''MDcwNy4yMSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjEwMzQuNTklMjAzLjEyJTIwODQ2LjI1JTIwMy4xMiUy''@;'; put 'put ''MDY5MS43NCUyMDE1Ny42NiUyMDk4MC44MyUyMDQ0Ny4zOSUyMDEyMjkuNzUlMjAxOTguNDclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIl''@;'; put 'put ''MjBwb2ludHMlM0QlMjIxMjQwLjA4JTIwNzA3LjIxJTIwMTMzNi44NyUyMDgwNC4yMiUyMDE1ODYuMDElMjA1NTUuMDglMjAxNDg5LjE0JTIwNDU4LjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUz''@;'; put 'put ''Q3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzBDMERDJTIyJTIwcG9pbnRzJTNEJTIyMTIyOS43NSUyMDE5OC40NyUyMDk4MC44MyUyMDQ0Ny4zOSUyMDEyNDAuMDglMjA3MDcuMjElMjAxNDg5LjE0JTIwNDU4LjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTI5Mi4yMiUyMDEzMDIuMzglMjAxNDMzLjMyJTIwMTQ0My42MyUyMDE4MzAuNjElMjAxNDQzLjYzJTIwMTQ5MS4xOCUyMDExMDMuNDIlMjIlM0Ul''@;'; put 'put ''M0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMDEwLjkyJTIwMTIyMy4xMyUyMDk0OS43OCUyMDEyODQuMjclMjAxMTA5LjA4''@;'; put 'put ''JTIwMTQ0My42MyUyMDExNTAuOTglMjAxNDQzLjYzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3NUI4QzUlMjIlMjBw''@;'; put 'put ''b2ludHMlM0QlMjIxMTUwLjk4JTIwMTQ0My42MyUyMDEyMzEuMTYlMjAxNDQzLjYzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0Ql''@;'; put 'put ''MjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMjkyLjIyJTIwMTMwMi4zOCUyMDExMTIuMDMlMjAxMTIyLjAyJTIwMTAxMC45MiUyMDEyMjMuMTMlMjAxMTkxLjA5JTIwMTQwMy41MSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzZFQTRCQyUyMiUyMHBvaW50cyUzRCUyMjExOTEuMDklMjAxNDAzLjUxJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxNDMzLjMyJTIwMTQ0My42MyUyMDEyOTIuMjIlMjAxMzAyLjM4JTIyJTNFJTNDJTJGcG9seWdvbiUz''@;'; put 'put ''RSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBv''@;'; put 'put ''aW50cyUzRCUyMjEzODMuMyUyMDg1MC43NSUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxNDkxLjE4JTIwMTEwMy40MiUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTQ5MS4xOCUyMDExMDMuNDIlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2RUE0QkMlMjIlMjBwb2ludHMlM0QlMjIxNDkxLjE4JTIwMTEwMy40MiUyMDE4MzAuNjElMjAxNDQzLjYzJTIwMTk3NC44NiUyMDE0NDMuNjMlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjE4MTIuNjUlMjA3ODEuOTUlMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTM4My4z''@;'; put 'put ''JTIwODUwLjc1JTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNCN0NFRDIlMjIlMjBwb2ludHMlM0QlMjIxNTYzLjM3JTIw''@;'; put 'put ''MTAzMS4yMyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDE0NDMuNjMlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDE4MTIuNjUlMjA3ODEuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3OENBRDQlMjIlMjBwb2ludHMlM0QlMjIxNTYzLjM3JTIwMTAzMS4yMyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDE0NDMuNjMlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDE4MTIuNjUlMjA3ODEuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNF''@;'; put 'put ''JTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjBwb2ludHMlM0QlMjI4MDMuNzQlMjAxMzM3LjM2JTIwODUwLjE5JTIwMTM4My44NyUyMDk0OS43OCUyMDEyODQuMjclMjA5MDMu''@;'; put 'put ''MzElMjAxMjM3Ljc4JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyMTA2NS41NyUyMDEwNzUuNTIlMjAxMTEyLjAz''@;'; put 'put ''JTIwMTEyMi4wMiUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxMjY0LjY5JTIwODc2LjQlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3N0I4RDklMjIlMjBwb2lu''@;'; put 'put ''dHMlM0QlMjI2OTcuNDclMjAxNDQzLjYzJTIwNzkwLjQzJTIwMTQ0My42MyUyMDg1MC4xOSUyMDEzODMuODclMjA4MDMuNzQlMjAxMzM3LjM2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHln''@;'; put 'put ''b24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NDkuNzglMjAxMjg0LjI3JTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1REI1RDYlMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwOTAzLjMxJTIwMTIzNy43OCUyMDk0OS43OCUyMDEyODQuMjclMjAxMDEwLjkyJTIwMTIyMy4xMyUyMiUzRSUzQyUyRnBv''@;'; put 'put ''bHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODEwMzguMjQ3Mjk3JTJDJTIwMTE0OS4yNzU0MjklMjklMjByb3RhdGUl''@;'; put 'put ''MjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTEwMzguMjQ3Mjk3JTJDJTIwLTExNDkuMjc1NDI5JTI5JTIwJTIyJTIweCUzRCUyMjk2Ni43NTIyOTclMjIlMjB5JTNEJTIyMTExNi40MTA0MyUyMiUyMHdpZHRoJTNEJTIyMTQyLjk5JTIyJTIwaGVpZ2h0JTNEJTIyNjUuNzMlMjIlM0Ul''@;'; put 'put ''M0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM1N0E4RDAlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMDM4LjI0NzI5NyUyQyUyMDExNDkuMjc1NDI5JTI5JTIwcm90''@;'; put 'put ''YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMDM4LjI0NzI5NyUyQyUyMC0xMTQ5LjI3NTQyOSUyOSUyMCUyMiUyMHglM0QlMjI5NjYuNzUyMjk3JTIyJTIweSUzRCUyMjExMTYuNDEwNDMlMjIlMjB3aWR0aCUzRCUyMjE0Mi45OSUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIy''@;'; put 'put ''JTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMDk2NC40''@;'; put 'put ''NiUyMDExNzYuNjMlMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDAwMDAwJTIyJTIwb3BhY2l0eSUzRCUyMjAuNDIlMjIl''@;'; put 'put ''MjBwb2ludHMlM0QlMjIxMDEwLjkyJTIwMTIyMy4xMyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIwOTY0LjQ2JTIwMTE3Ni42MyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDdDQkIlMjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEyNjQuNjklMjA4NzYuNCUyMDEzMTEuMTIl''@;'; put 'put ''MjA5MjIuOTQlMjAxMzgzLjMlMjA4NTAuNzUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1N0E4RDAlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0''@;'; put 'put ''LjIyJTIwMTI2NC42OSUyMDg3Ni40JTIwMTMxMS4xMiUyMDkyMi45NCUyMDEzODMuMyUyMDg1MC43NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkzRDhD''@;'; put 'put ''QSUyMiUyMG9wYWNpdHklM0QlMjIwLjYlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwb3ZlcmxheSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMzgzLjMlMjA4NTAuNzUlMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzVEQjVENiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMzgzLjMlMjA4NTAuNzUlMjAxNjMyLjQ2''@;'; put 'put ''JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDNFNiUyMiUyMHBvaW50cyUzRCUyMjIwNTYlMjAwLjEy''@;'; put 'put ''JTIwMTY0NS40OSUyMDAuMTIlMjAxNjQ4LjQ5JTIwMy4xMiUyMDE5NDQuMDclMjAzLjEyJTIwMTc5Ni4yMiUyMDE1MC45OSUyMDE4OTMuMTIlMjAyNDcuOTclMjAyMDU0LjQ1JTIwODYuNjQlMjAyMDU0LjQ1JTIwMTc5LjYlMjAxOTM5LjU4JTIwMjk0LjQ3JTIwMjA1NiUyMDQxMSUyMiUzRSUz''@;'; put 'put ''QyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdBQjlEOSUyMiUyMHBvaW50cyUzRCUyMjE2NDguNDklMjAzLjEyJTIwMTc5Ni4yMiUyMDE1MC45OSUyMDE5NDQuMDclMjAz''@;'; put 'put ''LjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjZBRUQ0JTIyJTIwcG9pbnRzJTNEJTIyMjA1NC40NSUyMDg2LjY0JTIwMTg5My4xMiUyMDI0Ny45NyUy''@;'; put 'put ''MDE5MzkuNTglMjAyOTQuNDclMjAyMDU0LjQ1JTIwMTc5LjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNCN0NFRDIlMjIlMjBwb2ludHMlM0QlMjIxODg0''@;'; put 'put ''LjgyJTIwNzA5Ljc4JTIwMjA1NC40NSUyMDg3OS41NyUyMDIwNTQuNDUlMjA1NDAuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBw''@;'; put 'put ''b2ludHMlM0QlMjIxNDg5LjE0JTIwNDU4LjEyJTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMDEzNzEuMTMlMjAzMzkuOTklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIl''@;'; put 'put ''MjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjIxNzk2LjIyJTIwMTUwLjk5JTIwMTY0OC40OSUyMDMuMTIlMjAxNDI1LjElMjAzLjEyJTIwMTMwMS45MSUyMDEyNi4zMSUyMDE1NjEuMyUyMDM4NS45NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE3OTguOTU0MDY2JTJDJTIwMzg4Ljc5ODc4MSUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTc5OC45NTQw''@;'; put 'put ''NjYlMkMlMjAtMzg4Ljc5ODc4MSUyOSUyMCUyMiUyMHglM0QlMjIxNjMyLjgyNDA3JTIyJTIweSUzRCUyMjM1NS45MzM3ODElMjIlMjB3aWR0aCUzRCUyMjMzMi4yNiUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyMTU4Ni4wMSUyMDU1NS4wOCUyMDE2MzIuNDYlMjA2MDEuNTklMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUzRSUzQyUyRnBvbHln''@;'; put 'put ''b24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE1NzMuNzExNTc3JTJDJTIwNDcwLjYyMDI2MyUyOSUyMHJvdGF0ZSUyOC00''@;'; put 'put ''NS4wMDAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTU3My43MTE1NzclMkMlMjAtNDcwLjYyMDI2MyUyOSUyMCUyMiUyMHglM0QlMjIxNTIyLjY4MTU4JTIyJTIweSUzRCUyMjQwMi4wODUyNjMlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjEzNy4wNyUyMiUzRSUzQyUy''@;'; put 'put ''RnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE3NTguNjc2NzU4JTJDJTIwNjU1Ljc2NzEyMCUyOSUyMHJvdGF0ZSUy''@;'; put 'put ''OC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTc1OC42NzY3NTglMkMlMjAtNjU1Ljc2NzEyMCUyOSUyMCUyMiUyMHglM0QlMjIxNzA3LjY0Njc2JTIyJTIweSUzRCUyMjUyOC4yOTIxMiUyMiUyMHdpZHRoJTNEJTIyMTAyLjA2JTIyJTIwaGVpZ2h0JTNEJTIyMjU0Ljk1JTIyJTNFJTND''@;'; put 'put ''JTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjNFQUVFJTIyJTIwcG9pbnRzJTNEJTIyMTMwMS45MSUyMDEyNi4zMSUyMDExNzguODQlMjAzLjEyJTIwMTAzNC41OSUyMDMuMTIl''@;'; put 'put ''MjAxMjI5Ljc1JTIwMTk4LjQ3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzODNDMEM4JTIyJTIwcG9pbnRzJTNEJTIyMTgxMi42NSUyMDc4MS45NSUyMDIw''@;'; put 'put ''NTQuNDUlMjAxMDIzLjk5JTIwMjA1NC40NSUyMDg3OS41NyUyMDE4ODQuODIlMjA3MDkuNzglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM3REM2REMlMjIlMjB0''@;'; put 'put ''cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMzk1LjUxNjkwMSUyQyUyMDI5Mi4yMDY1MTklMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTEzOTUuNTE2OTAxJTJDJTIwLTI5Mi4yMDY1MTklMjklMjAlMjIlMjB4JTNEJTIyMTM0NC40OTE5JTIyJTIweSUzRCUy''@;'; put 'put ''MjEwOC43MDE1MTklMjIlMjB3aWR0aCUzRCUyMjEwMi4wNSUyMiUyMGhlaWdodCUzRCUyMjM2Ny4wMSUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzY4QjhENSUyMiUy''@;'; put 'put ''MHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE2NDUuMzEzNjE5JTJDJTIwNTQyLjI0OTc2MCUyOSUyMHJvdGF0ZSUyOC00NS4wMDAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTY0NS4zMTM2MTklMkMlMjAtNTQyLjI0OTc2MCUyOSUyMCUyMiUyMHglM0QlMjIxNTk0LjI4MzYyJTIyJTIweSUz''@;'; put 'put ''RCUyMjUwOS4zODQ3NiUyMiUyMHdpZHRoJTNEJTIyMTAyLjA2JTIyJTIwaGVpZ2h0JTNEJTIyNjUuNzMlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQ2clMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgwLjAwMDAwMCUyQyUyMDMuMDAwMDAwJTI5JTIyJTIwc3Ryb2tlJTNEJTIyJTIzMDAwMDAwJTIyJTIwb3BhY2l0eSUzRCUyMjAuMTUlMjIlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0wLjk1JTJDMC4xMiUyMEwwLjk1JTJDODQwLjEyJTIyJTIwaWQlM0QlMjJTaGFwZSUyMiUzRSUzQyUyRnBhdGglM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElM0MlMkZzdmclM0UpOy0tY2xyLWxvZ2luLWVycm9yLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci04MDApOy0tY2xyLWxvZ2luLWVycm9yLWJvcmRlci1yYWRpdXM6''@;'; put 'put ''dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMpOy0tY2xyLWxvZ2luLXBhbmVsLWxpbmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItbG9naW4tcGFuZWwtbGluZS1vcGFjaXR5Oi4xfS5sb2dpbi13cmFwcGVye2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTti''@;'; put 'put ''YWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQyUzRnhtbCUyMHZlcnNpb24lM0QlMjIxLjAlMjIlMjBlbmNvZGluZyUzRCUyMnV0Zi04JTIyJTNGJTNFJTBEJTBBJTNDJTIxRE9DVFlQRSUyMHN2ZyUyMFBVQkxJQyUyMCUyMi0lMkYlMkZXM0MlMkYlMkZE''@;'; put 'put ''VEQlMjBTVkclMjAxLjElMkYlMkZFTiUyMiUyMCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGR3JhcGhpY3MlMkZTVkclMkYxLjElMkZEVEQlMkZzdmcxMS5kdGQlMjIlM0UlMEQlMEElM0NzdmclMEQlMEElMjAlMjAlMjAlMjAlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwaWQlM0QlMjJuby1hc3BlY3QtcmF0aW8lMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3Lncz''@;'; put 'put ''Lm9yZyUyRjE5OTklMkZ4bGluayUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHglM0QlMjIwcHglMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB5JTNEJTIyMHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwaGVpZ2h0JTNEJTIyMjA1NS41NXB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwd2lkdGglM0Ql''@;'; put 'put ''MjIxNDQwcHglMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyMDU1LjU1JTIwMTQ0MCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWluWU1pbiUyMHNsaWNlJTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDZGVzYyUzRUxvZ2luJTIwSW1hZ2UlM0MlMkZkZXNjJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMHN0cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBmaWxs''@;'; put 'put ''LXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MC4wMDAwMDAlMkMlMjAtNC4wMDAwMDAlMjklMjIlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''ZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzRkFGQUZBJTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyNCUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBwb2ludHMlM0QlMjIxMTA4LjQzJTIwMTQ0My42MyUyMDEx''@;'; put 'put ''MDkuMDglMjAxNDQzLjYzJTIwNDQzLjQ0JTIwNzc3Ljc0JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTNEOENBJTIyJTIwb3BhY2l0eSUzRCUyMjAuNiUy''@;'; put 'put ''MiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBvdmVybGF5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDMzNC45MiUyMDQ0My40NCUyMDc3Ny43NCUyMDAuNzklMjAzMzQuNDklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIwLjc5JTIwMjExLjg4JTIwMC43OSUyMDMyOS42JTIwNTkuNjIlMjAyNzAuNzclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxNjAuNjUlMjAxNjkuNzQlMjAwLjc5JTIwOS43MyUyMDAuNzklMjAyMTEuODglMjA5MC4yNyUyMDMwMS40NiUyMDU5LjYyJTIwMjcwLjc3JTIyJTNFJTND''@;'; put 'put ''JTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyNTAzLjc3JTIwMTQ0My42MyUyMDY5Ny40NyUyMDE0NDMuNjMlMjA4MDMuNzQlMjAx''@;'; put 'put ''MzM3LjM2JTIwNzA2LjkzJTIwMTI0MC40MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NERTNFRSUyMiUyMHBvaW50cyUzRCUyMjE1OC4zMyUyMDY5MS4x''@;'; put 'put ''NSUyMDAuNzklMjA4NDguNzIlMjAwLjc5JTIwMTQyNy40MyUyMDQ0Ny41MiUyMDk4MC43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQ0VEREUwJTIyJTIw''@;'; put 'put ''cG9pbnRzJTNEJTIyMjU3LjcxJTIwNTkxLjc1JTIwMC43OSUyMDMzNC40OSUyMDAuNzklMjA1MzMuNDIlMjAxNTguMzMlMjA2OTEuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUy''@;'; put 'put ''MGZpbGwlM0QlMjIlMjNBOUM5RDUlMjIlMjBwb2ludHMlM0QlMjIwLjc5JTIwNTMzLjQyJTIwMC43OSUyMDg0OC43MiUyMDE1OC4zMyUyMDY5MS4xNSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nw''@;'; put 'put ''b2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDRFNyUyMiUyMHBvaW50cyUzRCUyMjgwNi40NiUyMDExNDAuODklMjA1NDYuOTQlMjA4ODEuMjglMjA0NDcuNTIlMjA5ODAuNyUyMDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RkM0REYlMjIlMjBwb2ludHMlM0QlMjI0NDcuNTIlMjA5ODAuNyUyMDAuNzklMjAxNDI3LjQzJTIwMC43OSUyMDE0NDMuNjMlMjA1MDMuNzclMjAxNDQzLjYzJTIwNzA2LjkzJTIwMTI0MC40MyUy''@;'; put 'put ''MiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzcwQzBEQyUyMiUyMHBvaW50cyUzRCUyMjYwOC4yMyUyMDgxOS45OSUyMDU0Ni45NCUyMDg4MS4yOCUyMDgwNi40''@;'; put 'put ''NiUyMDExNDAuODklMjA4NjcuNjQlMjAxMDc5LjclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI0MjAuMDUlMjA0''@;'; put 'put ''MjkuMzklMjAzMTkuMDElMjA1MzAuNDUlMjA2MDguMjMlMjA4MTkuOTklMjA3MDkuMyUyMDcxOC45MSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY5QUZE''@;'; put 'put ''NCUyMiUyMHBvaW50cyUzRCUyMjcwOS4zJTIwNzE4LjkxJTIwNjA4LjIzJTIwODE5Ljk5JTIwODY3LjY0JTIwMTA3OS43JTIwOTY4Ljc0JTIwOTc4LjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RUI1QkMlMjIlMjBwb2ludHMlM0QlMjI2MTkuNTklMjAyMjkuODIlMjAzOTMuNDIlMjAzLjEyJTIwMzI3LjI3JTIwMy4xMiUyMDE2MC42NSUyMDE2OS43NCUyMDQyMC4wNSUyMDQyOS4zOSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzhFQjVCQyUyMiUyMHBvaW50cyUzRCUyMjMxOS4wMSUyMDUzMC40NSUyMDMxOS4wMSUyMDUzMC40NSUyMDkwLjI3JTIwMzAxLjQ2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUw''@;'; put 'put ''RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzN0NCMEM3JTIyJTIwcG9pbnRzJTNEJTIyMTYwLjY1JTIwMTY5Ljc0JTIwNTkuNjIlMjAyNzAuNzclMjA5MC4yNyUyMDMwMS40NiUyMDMxOS4wMSUyMDUz''@;'; put 'put ''MC40NSUyMDQyMC4wNSUyMDQyOS4zOSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzg0QzREMiUyMiUyMHBvaW50cyUzRCUyMjU5LjYyJTIwMjcwLjc3JTIw''@;'; put 'put ''MC43OSUyMDMyOS42JTIwMC43OSUyMDMzNC40OSUyMDI1Ny43MSUyMDU5MS43NSUyMDMxOS4wMSUyMDUzMC40NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUy''@;'; put 'put ''MzdDQjBDNyUyMiUyMHBvaW50cyUzRCUyMjUzNy41NSUyMDMuMTIlMjAzOTMuNDIlMjAzLjEyJTIwNjE5LjU5JTIwMjI5LjgyJTIwNjkxLjc0JTIwMTU3LjY2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzODdEMURCJTIyJTIwcG9pbnRzJTNEJTIyODQ2LjI1JTIwMy4xMiUyMDUzNy41NSUyMDMuMTIlMjA2OTEuNzQlMjAxNTcuNjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMlM0QlMjI5MDkuODclMjAxNDQzLjYzJTIwODUwLjE5JTIwMTM4My44NyUyMDc5MC40MyUyMDE0NDMuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIzMTkuMDElMjA1MzAuNDUlMjAyNTcuNzElMjA1OTEuNzUlMjA0NDMuNDQlMjA3NzcuNzQlMjA1NDYuOTQlMjA4ODEuMjglMjA2MDguMjMlMjA4MTkuOTklMjA4''@;'; put 'put ''NjcuNjQlMjAxMDc5LjclMjA4NjcuNjQlMjAxMDc5LjclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjI4NjcuNjQl''@;'; put 'put ''MjAxMDc5LjclMjA4MDYuNDYlMjAxMTQwLjg5JTIwOTAzLjMxJTIwMTIzNy43OCUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIl''@;'; put 'put ''MjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMDY1LjU3JTIwMTA3NS41MiUyMDk2OC43NCUyMDk3OC42JTIwODY3LjY0JTIwMTA3OS43JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjk2NC40NiUyMDExNzYuNjMlMjA4NjcuNjQlMjAxMDc5LjclMjA4NjcuNjQlMjAxMDc5LjclMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMjMxLjE2JTIwMTQ0My42MyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdv''@;'; put 'put ''biUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTI0MC4wOCUyMDcwNy4yMiUyMDExNjcuOSUyMDc3OS40JTIwMTI2NC42OCUyMDg3Ni40JTIwMTMz''@;'; put 'put ''Ni44NyUyMDgwNC4yMiUyMDEyNDAuMDglMjA3MDcuMjElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI5ODAuODMl''@;'; put 'put ''MjA0NDcuMzklMjA2OTEuNzQlMjAxNTcuNjYlMjA2MTkuNTklMjAyMjkuODIlMjA5MDguNjYlMjA1MTkuNTYlMjA5ODAuODMlMjA0NDcuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdv''@;'; put 'put ''biUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjI3MDkuMyUyMDcxOC45MSUyMDk2OC43NCUyMDk3OC42JTIwMTE2Ny45MSUyMDc3OS40JTIwOTA4LjY2JTIwNTE5LjU1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjlBRkQ0JTIyJTIwcG9pbnRzJTNEJTIyOTgwLjgzJTIwNDQ3LjM5JTIwOTA4LjY2JTIwNTE5LjU1JTIwMTE2Ny45MSUyMDc3OS40JTIwMTI0MC4wOCUyMDcwNy4yMSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQl''@;'; put 'put ''MEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjEwMzQuNTklMjAzLjEyJTIwODQ2LjI1JTIwMy4xMiUyMDY5MS43NCUyMDE1Ny42NiUyMDk4MC44MyUyMDQ0Ny4z''@;'; put 'put ''OSUyMDEyMjkuNzUlMjAxOTguNDclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMjQwLjA4JTIwNzA3LjIxJTIw''@;'; put 'put ''MTMzNi44NyUyMDgwNC4yMiUyMDE1ODYuMDElMjA1NTUuMDglMjAxNDg5LjE0JTIwNDU4LjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzBDMERDJTIy''@;'; put 'put ''JTIwcG9pbnRzJTNEJTIyMTIyOS43NSUyMDE5OC40NyUyMDk4MC44MyUyMDQ0Ny4zOSUyMDEyNDAuMDglMjA3MDcuMjElMjAxNDg5LjE0JTIwNDU4LjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUz''@;'; put 'put ''Q3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTI5Mi4yMiUyMDEzMDIuMzglMjAxNDMzLjMyJTIwMTQ0My42MyUyMDE4MzAuNjElMjAxNDQzLjYzJTIwMTQ5MS4xOCUyMDExMDMuNDIlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMDEwLjkyJTIwMTIyMy4xMyUyMDk0OS43OCUyMDEyODQuMjclMjAxMTA5LjA4JTIwMTQ0My42MyUyMDExNTAuOTglMjAxNDQzLjYzJTIw''@;'; put 'put ''MTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3NUI4QzUlMjIlMjBwb2ludHMlM0QlMjIxMTUwLjk4JTIwMTQ0My42MyUyMDEy''@;'; put 'put ''MzEuMTYlMjAxNDQzLjYzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMjky''@;'; put 'put ''LjIyJTIwMTMwMi4zOCUyMDExMTIuMDMlMjAxMTIyLjAyJTIwMTAxMC45MiUyMDEyMjMuMTMlMjAxMTkxLjA5JTIwMTQwMy41MSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmls''@;'; put 'put ''bCUzRCUyMiUyMzZFQTRCQyUyMiUyMHBvaW50cyUzRCUyMjExOTEuMDklMjAxNDAzLjUxJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxNDMzLjMyJTIwMTQ0My42MyUyMDEyOTIuMjIlMjAxMzAyLjM4JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzODMuMyUyMDg1MC43NSUyMDEzMTEu''@;'; put 'put ''MTIlMjA5MjIuOTQlMjAxNDkxLjE4JTIwMTEwMy40MiUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIw''@;'; put 'put ''cG9pbnRzJTNEJTIyMTQ5MS4xOCUyMDExMDMuNDIlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2RUE0QkMlMjIlMjBwb2ludHMlM0QlMjIxNDkxLjE4JTIwMTEwMy40MiUyMDE4MzAuNjElMjAxNDQzLjYzJTIwMTk3NC44NiUyMDE0NDMuNjMlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjE4MTIuNjUlMjA3ODEuOTUlMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTM4My4zJTIwODUwLjc1JTIwMTU2My4zNyUyMDEwMzEuMjMlMjIl''@;'; put 'put ''M0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNCN0NFRDIlMjIlMjBwb2ludHMlM0QlMjIxNTYzLjM3JTIwMTAzMS4yMyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMjA1''@;'; put 'put ''NC40NSUyMDE0NDMuNjMlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDE4MTIuNjUlMjA3ODEuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3OENBRDQlMjIl''@;'; put 'put ''MjBwb2ludHMlM0QlMjIxNTYzLjM3JTIwMTAzMS4yMyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDE0NDMuNjMlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDE4MTIuNjUlMjA3ODEuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjBwb2ludHMlM0QlMjI4MDMuNzQlMjAxMzM3LjM2JTIwODUwLjE5JTIwMTM4My44NyUyMDk0OS43OCUyMDEyODQuMjclMjA5MDMuMzElMjAxMjM3Ljc4JTIyJTNFJTNDJTJGcG9seWdvbiUz''@;'; put 'put ''RSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyMTA2NS41NyUyMDEwNzUuNTIlMjAxMTEyLjAzJTIwMTEyMi4wMiUyMDEzMTEuMTIlMjA5MjIuOTQlMjAx''@;'; put 'put ''MjY0LjY5JTIwODc2LjQlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3N0I4RDklMjIlMjBwb2ludHMlM0QlMjI2OTcuNDclMjAxNDQzLjYzJTIwNzkwLjQz''@;'; put 'put ''JTIwMTQ0My42MyUyMDg1MC4xOSUyMDEzODMuODclMjA4MDMuNzQlMjAxMzM3LjM2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9p''@;'; put 'put ''bnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NDkuNzglMjAxMjg0LjI3JTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9s''@;'; put 'put ''eWdvbiUyMGZpbGwlM0QlMjIlMjM1REI1RDYlMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwOTAzLjMxJTIwMTIzNy43OCUyMDk0OS43OCUyMDEyODQuMjclMjAxMDEwLjkyJTIwMTIyMy4xMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODEwMzguMjQ3Mjk3JTJDJTIwMTE0OS4yNzU0MjklMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTEw''@;'; put 'put ''MzguMjQ3Mjk3JTJDJTIwLTExNDkuMjc1NDI5JTI5JTIwJTIyJTIweCUzRCUyMjk2Ni43NTIyOTclMjIlMjB5JTNEJTIyMTExNi40MTA0MyUyMiUyMHdpZHRoJTNEJTIyMTQyLjk5JTIyJTIwaGVpZ2h0JTNEJTIyNjUuNzMlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM1N0E4RDAlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMDM4LjI0NzI5NyUyQyUyMDExNDkuMjc1NDI5JTI5JTIwcm90YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRyYW5zbGF0ZSUy''@;'; put 'put ''OC0xMDM4LjI0NzI5NyUyQyUyMC0xMTQ5LjI3NTQyOSUyOSUyMCUyMiUyMHglM0QlMjI5NjYuNzUyMjk3JTIyJTIweSUzRCUyMjExMTYuNDEwNDMlMjIlMjB3aWR0aCUzRCUyMjE0Mi45OSUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMDk2NC40NiUyMDExNzYuNjMlMjA5NjQuNDYlMjAxMTc2LjYzJTIy''@;'; put 'put ''JTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDAwMDAwJTIyJTIwb3BhY2l0eSUzRCUyMjAuNDIlMjIlMjBwb2ludHMlM0QlMjIxMDEwLjkyJTIwMTIyMy4xMyUy''@;'; put 'put ''MDEwMTAuOTIlMjAxMjIzLjEzJTIwOTY0LjQ2JTIwMTE3Ni42MyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDdDQkIl''@;'; put 'put ''MjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEyNjQuNjklMjA4NzYuNCUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxMzgzLjMlMjA4NTAuNzUlMjIlM0Ul''@;'; put 'put ''M0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1N0E4RDAlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTI2NC42OSUyMDg3Ni40JTIwMTMxMS4xMiUy''@;'; put 'put ''MDkyMi45NCUyMDEzODMuMyUyMDg1MC43NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkzRDhDQSUyMiUyMG9wYWNpdHklM0QlMjIwLjYlMjIlMjBzdHls''@;'; put 'put ''ZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwb3ZlcmxheSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMzgzLjMlMjA4NTAuNzUlMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzVEQjVENiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMzgzLjMlMjA4NTAuNzUlMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDNFNiUyMiUyMHBvaW50cyUzRCUyMjIwNTYlMjAwLjEyJTIwMTY0NS40OSUyMDAuMTIlMjAxNjQ4LjQ5JTIwMy4x''@;'; put 'put ''MiUyMDE5NDQuMDclMjAzLjEyJTIwMTc5Ni4yMiUyMDE1MC45OSUyMDE4OTMuMTIlMjAyNDcuOTclMjAyMDU0LjQ1JTIwODYuNjQlMjAyMDU0LjQ1JTIwMTc5LjYlMjAxOTM5LjU4JTIwMjk0LjQ3JTIwMjA1NiUyMDQxMSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdBQjlEOSUyMiUyMHBvaW50cyUzRCUyMjE2NDguNDklMjAzLjEyJTIwMTc5Ni4yMiUyMDE1MC45OSUyMDE5NDQuMDclMjAzLjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjZBRUQ0JTIyJTIwcG9pbnRzJTNEJTIyMjA1NC40NSUyMDg2LjY0JTIwMTg5My4xMiUyMDI0Ny45NyUyMDE5MzkuNTglMjAyOTQuNDclMjAyMDU0LjQ1JTIwMTc5''@;'; put 'put ''LjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNCN0NFRDIlMjIlMjBwb2ludHMlM0QlMjIxODg0LjgyJTIwNzA5Ljc4JTIwMjA1NC40NSUyMDg3OS41NyUy''@;'; put 'put ''MDIwNTQuNDUlMjA1NDAuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjIxNDg5LjE0JTIwNDU4LjEyJTIwMTQ4''@;'; put 'put ''OS4xNCUyMDQ1OC4xMiUyMDEzNzEuMTMlMjAzMzkuOTklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjIxNzk2LjIy''@;'; put 'put ''JTIwMTUwLjk5JTIwMTY0OC40OSUyMDMuMTIlMjAxNDI1LjElMjAzLjEyJTIwMTMwMS45MSUyMDEyNi4zMSUyMDE1NjEuMyUyMDM4NS45NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIw''@;'; put 'put ''ZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE3OTguOTU0MDY2JTJDJTIwMzg4Ljc5ODc4MSUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTc5OC45NTQwNjYlMkMlMjAtMzg4Ljc5ODc4MSUyOSUyMCUyMiUyMHgl''@;'; put 'put ''M0QlMjIxNjMyLjgyNDA3JTIyJTIweSUzRCUyMjM1NS45MzM3ODElMjIlMjB3aWR0aCUzRCUyMjMzMi4yNiUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHln''@;'; put 'put ''b24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyMTU4Ni4wMSUyMDU1NS4wOCUyMDE2MzIuNDYlMjA2MDEuNTklMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE1NzMuNzExNTc3JTJDJTIwNDcwLjYyMDI2MyUyOSUyMHJvdGF0ZSUyOC00NS4wMDAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTU3My43''@;'; put 'put ''MTE1NzclMkMlMjAtNDcwLjYyMDI2MyUyOSUyMCUyMiUyMHglM0QlMjIxNTIyLjY4MTU4JTIyJTIweSUzRCUyMjQwMi4wODUyNjMlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjEzNy4wNyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE3NTguNjc2NzU4JTJDJTIwNjU1Ljc2NzEyMCUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTc1''@;'; put 'put ''OC42NzY3NTglMkMlMjAtNjU1Ljc2NzEyMCUyOSUyMCUyMiUyMHglM0QlMjIxNzA3LjY0Njc2JTIyJTIweSUzRCUyMjUyOC4yOTIxMiUyMiUyMHdpZHRoJTNEJTIyMTAyLjA2JTIyJTIwaGVpZ2h0JTNEJTIyMjU0Ljk1JTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjNFQUVFJTIyJTIwcG9pbnRzJTNEJTIyMTMwMS45MSUyMDEyNi4zMSUyMDExNzguODQlMjAzLjEyJTIwMTAzNC41OSUyMDMuMTIlMjAxMjI5Ljc1JTIwMTk4LjQ3JTIyJTNFJTNDJTJGcG9s''@;'; put 'put ''eWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzODNDMEM4JTIyJTIwcG9pbnRzJTNEJTIyMTgxMi42NSUyMDc4MS45NSUyMDIwNTQuNDUlMjAxMDIzLjk5JTIwMjA1NC40NSUyMDg3OS41''@;'; put 'put ''NyUyMDE4ODQuODIlMjA3MDkuNzglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM3REM2REMlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMzk1LjUx''@;'; put 'put ''NjkwMSUyQyUyMDI5Mi4yMDY1MTklMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTEzOTUuNTE2OTAxJTJDJTIwLTI5Mi4yMDY1MTklMjklMjAlMjIlMjB4JTNEJTIyMTM0NC40OTE5JTIyJTIweSUzRCUyMjEwOC43MDE1MTklMjIlMjB3aWR0aCUzRCUyMjEwMi4w''@;'; put 'put ''NSUyMiUyMGhlaWdodCUzRCUyMjM2Ny4wMSUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzY4QjhENSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE2NDUu''@;'; put 'put ''MzEzNjE5JTJDJTIwNTQyLjI0OTc2MCUyOSUyMHJvdGF0ZSUyOC00NS4wMDAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTY0NS4zMTM2MTklMkMlMjAtNTQyLjI0OTc2MCUyOSUyMCUyMiUyMHglM0QlMjIxNTk0LjI4MzYyJTIyJTIweSUzRCUyMjUwOS4zODQ3NiUyMiUyMHdpZHRoJTNEJTIyMTAy''@;'; put 'put ''LjA2JTIyJTIwaGVpZ2h0JTNEJTIyNjUuNzMlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjB0cmFuc2Zvcm0lM0QlMjJ0cmFu''@;'; put 'put ''c2xhdGUlMjgwLjAwMDAwMCUyQyUyMDMuMDAwMDAwJTI5JTIyJTIwc3Ryb2tlJTNEJTIyJTIzMDAwMDAwJTIyJTIwb3BhY2l0eSUzRCUyMjAuMTUlMjIlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0wLjk1''@;'; put 'put ''JTJDMC4xMiUyMEwwLjk1JTJDODQwLjEyJTIyJTIwaWQlM0QlMjJTaGFwZSUyMiUzRSUzQyUyRnBhdGglM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQyUyRmclM0UlMEQlMEElM0MlMkZzdmclM0UpO2JhY2tncm91bmQtc2l6ZToxMDAlO2JhY2tncm91bmQtcG9zaXRpb246MjUuMnJlbSAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0ubG9naW4td3JhcHBlciAubG9naW57YmFja2dyb3VuZDojZmFmYWZhO2JhY2tncm91''@;'; put 'put ''bmQ6dmFyKC0tY2xyLWxvZ2luLWJhY2tncm91bmQtY29sb3IsICNmYWZhZmEpO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjEuMnJlbSAzcmVtO2hlaWdodDphdXRvO21pbi1oZWlnaHQ6''@;'; put 'put ''MTAwdmg7d2lkdGg6MjUuMnJlbX0ubG9naW4td3JhcHBlciAubG9naW4gLnRpdGxle2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xyLWxvZ2luLXRpdGxlLWNvbG9yLCBibGFjayk7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1sb2dpbi10aXRsZS1mb250LXdlaWdodCwg''@;'; put 'put ''MjAwKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5pciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWxvZ2luLXRpdGxlLWZvbnQtZmFtaWx5LCBNZXRyb3BvbGlzLCAiQXZlbmlyIE5leHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBB''@;'; put 'put ''cmlhbCwgc2Fucy1zZXJpZik7Zm9udC1zaXplOjEuNnJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS44cmVtfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGUgLndlbGNvbWV7bGluZS1oZWlnaHQ6MS44cmVtfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGUgLmhp''@;'; put 'put ''bnR7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItbG9naW4tdGl0bGUtY29sb3IsIGJsYWNrKTttYXJnaW4tdG9wOjEuNXJlbTtmb250LXNpemU6LjdyZW19LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50cmFkZW1hcmt7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJr''@;'; put 'put ''LWNvbG9yLCBibGFjayk7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1sb2dpbi10cmFkZW1hcmstZm9udC13ZWlnaHQsIDIwMCk7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcyxBdmVuaXIgTmV4dCxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtZmFtaWx5''@;'; put 'put ''OnZhcigtLWNsci1sb2dpbi10cmFkZW1hcmstZm9udC1mYW1pbHksIE1ldHJvcG9saXMsICJBdmVuaXIgTmV4dCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubG9naW4td3JhcHBlciAubG9naW4g''@;'; put 'put ''LnN1YnRpdGxle2ZvbnQtd2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItbG9naW4tc3VidGl0bGUtZm9udC13ZWlnaHQsIDIwMCk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItbG9naW4tc3VidGl0bGUtY29sb3IsIGJsYWNrKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5p''@;'; put 'put ''ciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWxvZ2luLXN1YnRpdGxlLWZvbnQtZmFtaWx5LCBNZXRyb3BvbGlzLCAiQXZlbmlyIE5leHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgc2Fucy1zZXJpZik7Zm9udC1zaXplOjEu''@;'; put 'put ''MXJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS44cmVtfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjIuNHJlbSAwIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1n''@;'; put 'put ''cm91cCAuYXV0aC1zb3VyY2UsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAudXNlcm5hbWUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAucGFzc3dvcmQsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2hlY2tib3gsLmxvZ2luLXdyYXBw''@;'; put 'put ''ZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWZvcm0tY29udHJvbCwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY2hlY2tib3gtd3JhcHBlcnttYXJnaW46LjNyZW0gMCAuOXJlbX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY29udHJv''@;'; put 'put ''bC1jb250YWluZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNv''@;'; put 'put ''bnRhaW5lciAuY2xyLXNlbGVjdHt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dHt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAg''@;'; put 'put ''LmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7d2lkdGg6MTAwJX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyPi5jbHItaW5wdXQtZ3JvdXB7bWF4LXdpZHRoOjEwMCU7d2lk''@;'; put 'put ''dGg6MTAwJTtwYWRkaW5nLXJpZ2h0Oi40OHJlbX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyPi5jbHItaW5wdXQtZ3JvdXA+LmNsci1pbnB1dHt3aWR0aDpjYWxjKDEwMCUgLSAxLjJyZW0pfS5sb2dp''@;'; put 'put ''bi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbnttYXJnaW4tdG9wOi4zcmVtfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbiAudXNlcm5hbWUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91''@;'; put 'put ''cCAudG9vbHRpcC12YWxpZGF0aW9uIC5wYXNzd29yZHt3aWR0aDoxMDAlO21hcmdpbi10b3A6MH0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvcntkaXNwbGF5Om5vbmU7bWFyZ2luOi4zcmVtIDAgMDtwYWRkaW5nOi40NXJlbSAuNnJlbTtiYWNrZ3JvdW5kOiNjMjFk''@;'; put 'put ''MDA7YmFja2dyb3VuZDp2YXIoLS1jbHItbG9naW4tZXJyb3ItYmFja2dyb3VuZC1jb2xvciwgI2MyMWQwMCk7Y29sb3I6I2ZhZmFmYTtjb2xvcjp2YXIoLS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvciwgI2ZhZmFmYSk7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIo''@;'; put 'put ''LS1jbHItbG9naW4tZXJyb3ItYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtsaW5lLWhlaWdodDouOXJlbX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvcjpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnVybChkYXRhOmltYWdl''@;'; put 'put ''L3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5v''@;'; put 'put ''cmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTNFLmNsci1pLW91dGxpbmUlN0JmaWxsJTNBJTIzZmFmYWZhJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZk''@;'; put 'put ''ZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi1jaXJjbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUy''@;'; put 'put ''MGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzZBMTIlMkMxMiUyQzAlMkMxJTJDMCUyQzMwJTJDMTglMkMxMiUyQzEyJTJDMCUyQzAlMkMwJTJDMTglMkM2Wm0wJTJDMjJBMTAlMkMxMCUyQzAlMkMxJTJDMSUyQzI4JTJD''@;'; put 'put ''MTglMkMxMCUyQzEwJTJDMCUyQzAlMkMxJTJDMTglMkMyOFolMjIlM0UlM0MlMkZwYXRoJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwZCUzRCUyMk0xOCUyQzIwLjA3YTEuMyUyQzEuMyUyQzAlMkMwJTJDMS0xLjMtMS4z''@;'; put 'put ''di02YTEuMyUyQzEuMyUyQzAlMkMxJTJDMSUyQzIuNiUyQzB2NkExLjMlMkMxLjMlMkMwJTJDMCUyQzElMkMxOCUyQzIwLjA3WiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGN4JTNEJTIy''@;'; put 'put ''MTcuOTUlMjIlMjBjeSUzRCUyMjIzLjAyJTIyJTIwciUzRCUyMjEuNSUyMiUzRSUzQyUyRmNpcmNsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSk7bWFyZ2luOi4wNXJlbSAuM3JlbSAwIDA7aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtfS5s''@;'; put 'put ''b2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yLmFjdGl2ZXtkaXNwbGF5OmZsZXh9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuZXJyb3IuYWN0aXZlOmJlZm9yZXtmbGV4OjAgMCAuOHJlbX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3Vw''@;'; put 'put ''IC5idG57bWFyZ2luOjMuNnJlbSAwIDA7bWF4LXdpZHRoOm5vbmV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuZXJyb3IrLmJ0bnttYXJnaW46MS4ycmVtIDAgMH0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5zaWdudXB7bWFyZ2luLXRvcDouNnJlbTtm''@;'; put 'put ''b250LXNpemU6LjdyZW07dGV4dC1hbGlnbjpjZW50ZXJ9LmxvZ2luLXdyYXBwZXIgLmxvZ2luOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jazt3aWR0aDouMDVyZW07aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojMDAwO2JhY2tncm91bmQ6dmFyKC0tY2xy''@;'; put 'put ''LWxvZ2luLXBhbmVsLWxpbmUtY29sb3IsIGJsYWNrKTtvcGFjaXR5Oi4xO29wYWNpdHk6dmFyKC0tY2xyLWxvZ2luLXBhbmVsLWxpbmUtb3BhY2l0eSwgLjEpO3RvcDowO3JpZ2h0Oi0uMXJlbX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsubG9naW4td3JhcHBlcntqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6I2ZhZmFmYTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sb2dpbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmFmYWZhKX0ubG9naW4td3JhcHBlciAubG9naW57d2lkdGg6MTAwJTttYXJnaW4tbGVmdDowO3BhZGRpbmc6MS4ycmVtIDIwJX0ubG9naW4t''@;'; put 'put ''d3JhcHBlciAubG9naW46YWZ0ZXJ7Y29udGVudDpub25lfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubG9naW4td3JhcHBlciAubG9naW57cGFkZGluZzoxLjJyZW0gMTUlfX0ubWFpbi1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjto''@;'; put 'put ''ZWlnaHQ6MTAwdmg7YmFja2dyb3VuZDojZmFmYWZhO2JhY2tncm91bmQ6dmFyKC0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZCwgI2ZhZmFmYSl9Lm1haW4tY29udGFpbmVyIC5hbGVydC5hbGVydC1hcHAtbGV2ZWx7ZmxleDowIDAgYXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubWFpbi1jb250''@;'; put 'put ''YWluZXIgaGVhZGVyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVye2ZsZXg6MCAwIDNyZW19Lm1haW4tY29udGFpbmVyIC5zdWItbmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2e2ZsZXg6MCAwIDEuOHJlbX0ubWFpbi1jb250YWluZXIgLnUtbWFpbi1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjEgMSBhdXRvO292ZXJmbG93OmhpZGRlbn0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO21pbi1oZWlnaHQ6LjA1cmVtfS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIg''@;'; put 'put ''LmNvbnRlbnQtYXJlYXtmbGV4OjEgMSBhdXRvO292ZXJmbG93LXk6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtwYWRkaW5nOjEuMnJlbX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWE+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6''@;'; put 'put ''MH0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5zaWRlbmF2e2ZsZXg6MCAwIGF1dG87b3JkZXI6LTE7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXZ7ZmxleDowIDAgYXV0bztvcmRlcjotMX1AbWVk''@;'; put 'put ''aWEgcHJpbnR7Lm1haW4tY29udGFpbmVye2hlaWdodDphdXRvfX1ib2R5Lm5vLXNjcm9sbGluZyxib2R5W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXSxib2R5Lm5vLXNjcm9sbGluZyAubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEsYm9keVtjZHMtbGF5''@;'; put 'put ''b3V0PW5vLXNjcm9sbGluZ10gLm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhe292ZXJmbG93OmhpZGRlbn06cm9vdHstLWNsci1tb2RhbC1jbG9zZS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLW1vZGFsLWJnLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLW1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy1jb2xvcjpyZ2JhKCAwLCAwLCAwLCAuMiApOy0tY2xyLW1vZGFsLWJhY2tkcm9wLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTkwMCk7LS1jbHItbW9kYWwtYmFja2Ryb3Atb3BhY2l0''@;'; put 'put ''eTouODU7LS1jbHItbW9kYWwtYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cyk7LS1jbHItbW9kYWwtdGl0bGUtY29sb3I6dmFyKC0tY2xyLWgzLWNvbG9yKTstLWNsci1tb2RhbC10aXRsZS1mb250LWZhbWlseTp2YXIoLS1jbHItaDMtZm9udC1mYW1pbHkpOy0t''@;'; put 'put ''Y2xyLW1vZGFsLXRpdGxlLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMy1mb250LXdlaWdodCl9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxMDUwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVt''@;'; put 'put ''czpjZW50ZXI7cGFkZGluZzoyLjRyZW19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFse3BhZGRpbmc6LjZyZW19fS5tb2RhbC1kaWFsb2d7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxMDUwO3dpZHRoOjI4LjhyZW07bWF4LXdpZHRoOjEwMCV9Lm1vZGFsLWRp''@;'; put 'put ''YWxvZy5tb2RhbC1zbXt3aWR0aDoxNC40cmVtfS5tb2RhbC1kaWFsb2cubW9kYWwtbGd7d2lkdGg6NDMuMnJlbX0ubW9kYWwtZGlhbG9nLm1vZGFsLXhse3dpZHRoOjU3LjZyZW19Lm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudHtwYWRkaW5nOjEuMnJlbTtiYWNrZ3JvdW5kLWNvbG9yOiNm''@;'; put 'put ''ZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmctY29sb3IsIHdoaXRlKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1tb2RhbC1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2JveC1zaGFkb3c6MCAuMDVyZW0gLjFyZW0gLjFyZW0gIzAwMDM7''@;'; put 'put ''Ym94LXNoYWRvdzowIC4wNXJlbSAuMXJlbSAuMXJlbSB2YXIoLS1jbHItbW9kYWwtY29udGVudC1ib3gtc2hhZG93LWNvbG9yKX0ubW9kYWwtaGVhZGVyLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7Ym9yZGVyLWJvdHRvbTpub25lO3BhZGRpbmc6MCAwIDEuMnJlbX0ubW9kYWwtaGVhZGVy''@;'; put 'put ''LS1hY2Nlc3NpYmxle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5tb2RhbC1oZWFkZXIgLm1vZGFsLXRpdGxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLm1vZGFsLXRpdGxle2NvbG9yOiMwMDA7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLW1vZGFsLXRpdGxlLWNvbG9yLCBibGFjayk7bWFyZ2luOjA7cGFkZGluZzowIC4xNXJlbX0ubW9kYWwtaGVhZGVyIC5tb2RhbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAubW9kYWwtdGl0bGU6bm90KFtjZHMtdGV4dF0pe2ZvbnQtc2l6''@;'; put 'put ''ZToxLjFyZW07Zm9udC1mYW1pbHk6TWV0cm9wb2xpcyxBdmVuaXIgTmV4dCxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1tb2RhbC10aXRsZS1mb250LWZhbWlseSwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVl''@;'; put 'put ''IiwgQXJpYWwsIHNhbnMtc2VyaWYpO2ZvbnQtd2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItbW9kYWwtdGl0bGUtZm9udC13ZWlnaHQsIDIwMCk7bGluZS1oZWlnaHQ6MS4ycmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubW9kYWwtaGVhZGVyIC5jbG9zZSwubW9kYWwtaGVhZGVy''@;'; put 'put ''LS1hY2Nlc3NpYmxlIC5jbG9zZXttYXJnaW4tdG9wOi0uMDVyZW07bWFyZ2luLXJpZ2h0Oi0uMjVyZW07Zm9udC1zaXplOjEuM3JlbTtsaW5lLWhlaWdodDoxLjJyZW19Lm1vZGFsLWhlYWRlciAuY2xvc2UgY2RzLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UgY2RzLWlj''@;'; put 'put ''b24sLm1vZGFsLWhlYWRlciAuY2xvc2UgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UgY2xyLWljb257ZmlsbDojOGM4YzhjO2ZpbGw6dmFyKC0tY2xyLW1vZGFsLWNsb3NlLWNvbG9yLCAjOGM4YzhjKTtoZWlnaHQ6MS4ycmVtO3dpZHRoOjEuMnJlbX0ubW9kYWwt''@;'; put 'put ''dGl0bGUtd3JhcHBlcntmbGV4OjF9Lm1vZGFsLXRpdGxlLXdyYXBwZXIgLm1vZGFsLXRpdGxlPmgze21hcmdpbi10b3A6MH0ubW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NzB2aDtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW47cGFkZGluZzowIC4xNXJlbX0ubW9kYWwt''@;'; put 'put ''Ym9keS13cmFwcGVyPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBlcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MS4ycmVtIDAgMH0ubW9kYWwt''@;'; put 'put ''Zm9vdGVyIC5idG57bWFyZ2luOjAgMCAwIC42cmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKXsubW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NTV2aH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZw''@;'; put 'put ''eCl7Lm1vZGFsLWNvbnRlbnR7cGFkZGluZzouNnJlbSAwIC42cmVtIDEuMnJlbX0ubW9kYWwtaGVhZGVyLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7cGFkZGluZzowIDEuMnJlbSAuNnJlbSAwfS5tb2RhbC1ib2R5LXdyYXBwZXJ7bWF4LWhlaWdodDo1NXZofS5tb2RhbC1mb290ZXJ7cGFk''@;'; put 'put ''ZGluZzouNnJlbSAxLjJyZW0gMCAwfX0ubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kLWNvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmFja2Ryb3AtY29sb3IsICMzMzMzMzMpO29wYWNpdHk6Ljg1O29wYWNpdHk6dmFy''@;'; put 'put ''KC0tY2xyLW1vZGFsLWJhY2tkcm9wLW9wYWNpdHksIC44NSk7ei1pbmRleDoxMDQwfS5tb2RhbCAubW9kYWwtbmF2e2Rpc3BsYXk6bm9uZX06cm9vdHstLWNsci1oZWFkZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtOTAwKTstLWNsci1oZWFkZXItZGl2aWRlci1vcGFjaXR5''@;'; put 'put ''Oi4xNTstLWNsci1oZWFkZXItbmF2LW9wYWNpdHk6LjY1Oy0tY2xyLWhlYWRlci1uYXYtaG92ZXItb3BhY2l0eToxOy0tY2xyLWhlYWRlci0yLWJnLWNvbG9yOiM0ODVhNmE7LS1jbHItaGVhZGVyLTMtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tMTAwMCk7LS1j''@;'; put 'put ''bHItaGVhZGVyLTQtYmctY29sb3I6IzI0N2JhZTstLWNsci1oZWFkZXItNS1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTgwMCk7LS1jbHItaGVhZGVyLTYtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi0xMDAwKTstLWNsci1oZWFkZXItNy1iZy1jb2xvcjojMzA0MjUw''@;'; put 'put ''Oy0tY2xyLWhlYWRlci04LWJnLWNvbG9yOiMwZjE3MWM7LS1jbHItaGVhZGVyLWZvbnQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTApOy0tY2xyLWhlYWRlci10aXRsZS1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpOy0tY2xyLWhlYWRlci10aXRsZS1mb250LXdl''@;'; put 'put ''aWdodDp2YXIoLS1jbHItaDUtZm9udC13ZWlnaHQpOy0tY2xyLWhlYWRlci10aXRsZS1mb250LWZhbWlseTp2YXIoLS1jbHItaDUtZm9udC1mYW1pbHkpfWhlYWRlciwuaGVhZGVye2Rpc3BsYXk6ZmxleDtjb2xvcjojZmFmYWZhO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvciwg''@;'; put 'put ''I2ZhZmFmYSk7YmFja2dyb3VuZC1jb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvciwgIzMzMzMzMyk7aGVpZ2h0OjNyZW07d2hpdGUtc3BhY2U6bm93cmFwfWhlYWRlci5oZWFkZXItMSwuaGVhZGVyLmhlYWRlci0xe2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''IzMzMztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItYmctY29sb3IsICMzMzMzMzMpfWhlYWRlci5oZWFkZXItMiwuaGVhZGVyLmhlYWRlci0ye2JhY2tncm91bmQtY29sb3I6IzQ4NWE2YTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMi1iZy1jb2xvciwgIzQ4''@;'; put 'put ''NWE2YSl9aGVhZGVyLmhlYWRlci0zLC5oZWFkZXIuaGVhZGVyLTN7YmFja2dyb3VuZC1jb2xvcjojMzIwMDQ3O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci0zLWJnLWNvbG9yLCAjMzIwMDQ3KX1oZWFkZXIuaGVhZGVyLTQsLmhlYWRlci5oZWFkZXItNHtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOiMyNDdiYWU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTQtYmctY29sb3IsICMyNDdiYWUpfWhlYWRlci5oZWFkZXItNSwuaGVhZGVyLmhlYWRlci01e2JhY2tncm91bmQtY29sb3I6IzAwNTY3YTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItNS1iZy1j''@;'; put 'put ''b2xvciwgIzAwNTY3YSl9aGVhZGVyLmhlYWRlci02LC5oZWFkZXIuaGVhZGVyLTZ7YmFja2dyb3VuZC1jb2xvcjojMDAzNjRkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci02LWJnLWNvbG9yLCAjMDAzNjRkKX1oZWFkZXIuaGVhZGVyLTcsLmhlYWRlci5oZWFkZXItN3tiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiMzMDQyNTA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTctYmctY29sb3IsICMzMDQyNTApfWhlYWRlci5oZWFkZXItOCwuaGVhZGVyLmhlYWRlci04e2JhY2tncm91bmQtY29sb3I6IzBmMTcxYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFk''@;'; put 'put ''ZXItOC1iZy1jb2xvciwgIzBmMTcxYyl9aGVhZGVyIC5icmFuZGluZywuaGVhZGVyIC5icmFuZGluZ3tkaXNwbGF5OmZsZXg7ZmxleDowIDAgYXV0bzttaW4td2lkdGg6MTAuMnJlbTtwYWRkaW5nOjAgMS4ycmVtO2hlaWdodDozcmVtfWhlYWRlciAuYnJhbmRpbmc+YSxoZWFkZXIgLmJyYW5k''@;'; put 'put ''aW5nPi5uYXYtbGluaywuaGVhZGVyIC5icmFuZGluZz5hLC5oZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGlua3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6M3JlbTt0ZXh0LWRlY29yYXRpb246bm9uZX1oZWFkZXIgLmJyYW5kaW5nPmE6Zm9jdXMsaGVhZGVy''@;'; put 'put ''IC5icmFuZGluZz4ubmF2LWxpbms6Zm9jdXMsLmhlYWRlciAuYnJhbmRpbmc+YTpmb2N1cywuaGVhZGVyIC5icmFuZGluZz4ubmF2LWxpbms6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6LS4yNXJlbX1oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbixoZWFkZXIgLmJyYW5kaW5nIGNkcy1pY29uLGhl''@;'; put 'put ''YWRlciAuYnJhbmRpbmcgY2xyLWljb24sLmhlYWRlciAuYnJhbmRpbmcgLmNsci1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIGNkcy1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIGNsci1pY29ue2ZsZXgtZ3JvdzowO2ZsZXgtc2hyaW5rOjA7aGVpZ2h0OjEuOHJlbTt3aWR0aDoxLjhyZW07bWFyZ2lu''@;'; put 'put ''LXJpZ2h0Oi40NXJlbX1oZWFkZXIgLmJyYW5kaW5nIC50aXRsZSwuaGVhZGVyIC5icmFuZGluZyAudGl0bGV7Y29sb3I6I2ZhZmFmYTtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLXRpdGxlLWNvbG9yLCAjZmFmYWZhKTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWhlYWRl''@;'; put 'put ''ci10aXRsZS1mb250LXdlaWdodCwgNDAwKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5pciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWhlYWRlci10aXRsZS1mb250LWZhbWlseSwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0''@;'; put 'put ''IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZTouOHJlbTtsZXR0ZXItc3BhY2luZzouMDFlbTtsaW5lLWhlaWdodDozcmVtO3RleHQtZGVjb3JhdGlvbjpub25lfWhlYWRlciAuc2V0dGluZ3MsaGVhZGVyIC5oZWFkZXItbmF2LGhlYWRlciAuaGVhZGVy''@;'; put 'put ''LWFjdGlvbnMsLmhlYWRlciAuc2V0dGluZ3MsLmhlYWRlciAuaGVhZGVyLW5hdiwuaGVhZGVyIC5oZWFkZXItYWN0aW9uc3toZWlnaHQ6M3JlbX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5h''@;'; put 'put ''di10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LXRleHR7Zm9udC13ZWlnaHQ6NTAwfWhlYWRlciAuc2V0dGluZ3MgY2xyLWljb24saGVhZGVyIC5oZWFkZXItbmF2IGNsci1p''@;'; put 'put ''Y29uLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgY2xyLWljb24sLmhlYWRlciAuc2V0dGluZ3MgY2xyLWljb24sLmhlYWRlciAuaGVhZGVyLW5hdiBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyBjbHItaWNvbntjb2xvcjojZmFmYWZhO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9u''@;'; put 'put ''dC1jb2xvciwgI2ZhZmFmYSl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWljb24sLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWljb24s''@;'; put 'put ''LmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1pY29ue2hlaWdodDozcmVtO3dpZHRoOjNyZW19aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluaywuaGVhZGVyIC5zZXR0aW5ncyAu''@;'; put 'put ''bmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5re3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6LjlyZW0gMS4ycmVtO3RleHQtZGVjb3JhdGlv''@;'; put 'put ''bjpub25lO2NvbG9yOiNmYWZhZmE7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yLCAjZmFmYWZhKTtvcGFjaXR5Oi42NTtvcGFjaXR5OnZhcigtLWNsci1oZWFkZXItbmF2LW9wYWNpdHksIC42NSl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZW5hYmxlZDpob3ZlcixoZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmVuYWJsZWQ6aG92ZXIsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6ZW5hYmxlZDpob3ZlciwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZW5hYmxlZDpob3ZlciwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazplbmFibGVk''@;'; put 'put ''OmhvdmVyLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazplbmFibGVkOmhvdmVye29wYWNpdHk6MTtvcGFjaXR5OnZhcigtLWNsci1oZWFkZXItbmF2LWhvdmVyLW9wYWNpdHksIDEpfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rOmRpc2FibGVkLGhlYWRlciAuaGVhZGVyLW5h''@;'; put 'put ''diAubmF2LWxpbms6ZGlzYWJsZWQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rOmRpc2FibGVkLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmRpc2FibGVkLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5u''@;'; put 'put ''YXYtbGluazpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLmZhLGhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIC5uYXYtaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIC5mYSxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5r''@;'; put 'put ''IC5uYXYtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAuZmEsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgLm5hdi1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayAuZmEsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIC5uYXYtaWNvbiwuaGVh''@;'; put 'put ''ZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayAuZmEsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgLm5hdi1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAuZmEsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIC5uYXYtaWNvbntmb250LXNpemU6MS4x''@;'; put 'put ''cmVtfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNkcy1pY29uLGhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNsci1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgY2RzLWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjbHItaWNvbixoZWFkZXIgLmhlYWRl''@;'; put 'put ''ci1hY3Rpb25zIC5uYXYtbGluayBjZHMtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgY2RzLWljb24sLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYg''@;'; put 'put ''Lm5hdi1saW5rIGNkcy1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayBjZHMtaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2xyLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9w''@;'; put 'put ''OjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7aGVpZ2h0OjEuMnJlbTt3aWR0aDoxLjJyZW19aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbixoZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNs''@;'; put 'put ''ci1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNv''@;'; put 'put ''bixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNkcy1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbiwuaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6YXV0bztsZWZ0OmF1dG87dHJhbnNmb3JtOm5vbmU7bWFyZ2luLWxlZnQ6MS4ycmVtfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgLm5h''@;'; put 'put ''di10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCAubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgLm5hdi10''@;'; put 'put ''ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IC5uYXYtdGV4dHttYXJnaW4tbGVmdDowO3BhZGRpbmctbGVmdDouM3JlbX1oZWFkZXIgLnNldHRpbmdz''@;'; put 'put ''IC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayAubmF2''@;'; put 'put ''LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHR7ZGlzcGxheTpub25lfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLmFjdGl2''@;'; put 'put ''ZSxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5hY3RpdmUsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLmFjdGl2ZSwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5hY3RpdmUsLmhlYWRlciAuaGVhZGVy''@;'; put 'put ''LWFjdGlvbnMgLm5hdi1saW5rLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjE1KTtvcGFjaXR5OjF9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6Zm9jdXMsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmb2N1cyxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYt''@;'; put 'put ''bGluazpmb2N1cywuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6Zm9jdXMsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6Zm9jdXMsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmZvY3Vze291dGxpbmUtb2Zmc2V0Oi0uMjVyZW19aGVhZGVyIC5oZWFkZXItbmF2LC5o''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1uYXZ7ZGlzcGxheTpmbGV4O2ZsZXg6MCAwIGF1dG99aGVhZGVyIC5oZWFkZXItbmF2Omxhc3QtY2hpbGQ+Lm5hdi1saW5rOmxhc3QtY2hpbGQ6YWZ0ZXIsLmhlYWRlciAuaGVhZGVyLW5hdjpsYXN0LWNoaWxkPi5uYXYtbGluazpsYXN0LWNoaWxkOmFmdGVye2NvbnRl''@;'; put 'put ''bnQ6bm9uZX1oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGUsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpsYXN0LW9mLXR5cGUsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6Zmlyc3Qtb2YtdHlwZSwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGlu''@;'; put 'put ''azpsYXN0LW9mLXR5cGV7cG9zaXRpb246cmVsYXRpdmV9aGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmaXJzdC1vZi10eXBlOmJlZm9yZSxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmxhc3Qtb2YtdHlwZTphZnRlciwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmaXJz''@;'; put 'put ''dC1vZi10eXBlOmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpsYXN0LW9mLXR5cGU6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtiYWNrZ3JvdW5kOiNmYWZhZmE7YmFja2dyb3VuZDp2YXIoLS1jbHItaGVhZGVyLWZv''@;'; put 'put ''bnQtY29sb3IsICNmYWZhZmEpO29wYWNpdHk6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLW9wYWNpdHksIC4xNSk7b3BhY2l0eTouMTU7aGVpZ2h0OjJyZW07d2lkdGg6LjA1cmVtO3dpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7dG9wOi41cmVtO2xlZnQ6YXV0''@;'; put 'put ''b31oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGU6YmVmb3JlLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGU6YmVmb3Jle2xlZnQ6MH1oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmxhc3Qtb2YtdHlwZTphZnRlciwuaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItbmF2IC5uYXYtbGluazpsYXN0LW9mLXR5cGU6YWZ0ZXJ7cmlnaHQ6MH1oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZTpmaXJzdC1vZi10eXBlOmJlZm9yZSxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZTpsYXN0LW9mLXR5cGU6YWZ0ZXIsLmhl''@;'; put 'put ''YWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsuYWN0aXZlOmZpcnN0LW9mLXR5cGU6YmVmb3JlLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZTpsYXN0LW9mLXR5cGU6YWZ0ZXJ7Y29udGVudDpub25lfWhlYWRlciAuc2V0dGluZ3MsaGVhZGVyIC5oZWFkZXItYWN0aW9ucywu''@;'; put 'put ''aGVhZGVyIC5zZXR0aW5ncywuaGVhZGVyIC5oZWFkZXItYWN0aW9uc3tmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9w''@;'; put 'put ''ZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xle3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0OjNyZW07aGVpZ2h0OjNyZW07''@;'; put 'put ''b3V0bGluZS1vZmZzZXQ6LS4yNXJlbTtjb2xvcjojZmFmYWZhO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvciwgI2ZhZmFmYSk7b3BhY2l0eTouNjU7b3BhY2l0eTp2YXIoLS1jbHItaGVhZGVyLW5hdi1vcGFjaXR5LCAuNjUpfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5k''@;'; put 'put ''cm9wZG93bi10b2dnbGU6ZW5hYmxlZDpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmVuYWJsZWQ6aG92ZXIsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6ZW5hYmxlZDpob3ZlciwuaGVhZGVyIC5oZWFk''@;'; put 'put ''ZXItYWN0aW9ucz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTplbmFibGVkOmhvdmVye29wYWNpdHk6MTtvcGFjaXR5OnZhcigtLWNsci1oZWFkZXItbmF2LWhvdmVyLW9wYWNpdHksIDEpfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWQsaGVh''@;'; put 'put ''ZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNh''@;'; put 'put ''YmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjZHMtaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLGhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWlj''@;'; put 'put ''b246bm90KFtzaGFwZV49YW5nbGVdKSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYt''@;'; put 'put ''aWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2''@;'; put 'put ''LWljb24gY2xyLWljb246bm90KFtzaGFwZV49YW5nbGVdKSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjZHMtaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSl7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtoZWlnaHQ6MS4xcmVtO3dpZHRoOjEuMXJlbTtyaWdodDoxLjJyZW19aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRv''@;'; put 'put ''d24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjZHMtaWNvbltzaGFwZV49YW5nbGVdLGhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWljb25bc2hhcGVePWFuZ2xlXSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0saGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbltzaGFwZV49YW5nbGVdLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWljb25bc2hhcGVePWFuZ2xlXSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZS5uYXYtaWNvbiBjZHMtaWNvbltzaGFwZV49YW5nbGVdLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uW3NoYXBlXj1hbmdsZV17cmlnaHQ6LjZyZW07dG9wOjQ0JX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAu''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRy''@;'; put 'put ''b3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LXRleHR7cGFkZGluZzowIDEuOHJlbSAwIDEuMnJlbX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi10ZXh0IGNkcy1pY29uW3NoYXBlXj1hbmdsZV0saGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRy''@;'; put 'put ''b3Bkb3duLXRvZ2dsZS5uYXYtdGV4dCBjbHItaWNvbltzaGFwZV49YW5nbGVdLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LXRleHQgY2RzLWljb25bc2hhcGVePWFuZ2xlXSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlLm5hdi10ZXh0IGNsci1pY29uW3NoYXBlXj1hbmdsZV0sLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LXRleHQgY2RzLWljb25bc2hhcGVePWFuZ2xlXSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZS5uYXYtdGV4dCBjbHItaWNvbltzaGFwZV49YW5nbGVdLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi10ZXh0IGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGUubmF2LXRleHQgY2xyLWljb25bc2hhcGVePWFuZ2xlXXtyaWdodDoxLjJyZW19aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uLC5oZWFk''@;'; put 'put ''ZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29ue3dpZHRoOjNyZW07cGFkZGluZy1yaWdodDowfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duLmJv''@;'; put 'put ''dHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSxoZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bi5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bi5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4u''@;'; put 'put ''ZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmhlYWRlciAuaGVhZGVyLWFj''@;'; put 'put ''dGlvbnM+LmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnV7dG9wOjg1JX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bjpsYXN0LWNoaWxkLmJvdHRvbS1yaWdodD4u''@;'; put 'put ''ZHJvcGRvd24tbWVudSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bjpsYXN0LWNoaWxkLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd246bGFzdC1jaGlsZC5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmhlYWRlciAuaGVh''@;'; put 'put ''ZGVyLWFjdGlvbnM+LmRyb3Bkb3duOmxhc3QtY2hpbGQuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51e3JpZ2h0Oi4xNXJlbX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tbWVudSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tbWVudSwu''@;'; put 'put ''aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51e21hcmdpbi10b3A6LS4ycmVtO2xlZnQ6YXV0bztyaWdodDowfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIDpsYXN0LWNoaWxk''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUsaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gOmxhc3QtY2hpbGQuZHJvcGRvd24tbWVudSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gOmxhc3QtY2hpbGQuZHJvcGRvd24tbWVudSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gOmxh''@;'; put 'put ''c3QtY2hpbGQuZHJvcGRvd24tbWVudXttYXJnaW4tcmlnaHQ6LjRyZW19aGVhZGVyIC5zZWFyY2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhlYWRlciAuc2VhcmNoe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDowIDAgYXV0bzttYXgtd2lk''@;'; put 'put ''dGg6MTQuNHJlbTtwYWRkaW5nOjA7aGVpZ2h0OjNyZW07Y29sb3I6I2ZhZmFmYTtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IsICNmYWZhZmEpO29wYWNpdHk6LjY1O29wYWNpdHk6dmFyKC0tY2xyLWhlYWRlci1uYXYtb3BhY2l0eSwgLjY1KX1oZWFkZXIgLnNlYXJjaC1ib3g6''@;'; put 'put ''ZW5hYmxlZDpob3ZlcixoZWFkZXIgLnNlYXJjaDplbmFibGVkOmhvdmVyLC5oZWFkZXIgLnNlYXJjaC1ib3g6ZW5hYmxlZDpob3ZlciwuaGVhZGVyIC5zZWFyY2g6ZW5hYmxlZDpob3ZlcntvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItaGVhZGVyLW5hdi1ob3Zlci1vcGFjaXR5LCAxKX1o''@;'; put 'put ''ZWFkZXIgLnNlYXJjaC1ib3g6ZGlzYWJsZWQsaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWQsLmhlYWRlciAuc2VhcmNoLWJveDpkaXNhYmxlZCwuaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfWhlYWRlciAuc2VhcmNoLWJveD4ubmF2LWljb24saGVhZGVyIC5zZWFy''@;'; put 'put ''Y2g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaC1ib3g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaD4ubmF2LWljb257bWFyZ2luOjAgLjNyZW0gLjE1cmVtIDEuMnJlbX1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsaGVhZGVyIC5zZWFyY2ggbGFiZWwsLmhlYWRlciAuc2VhcmNoLWJveCBs''@;'; put 'put ''YWJlbCwuaGVhZGVyIC5zZWFyY2ggbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjNyZW07bGluZS1oZWlnaHQ6M3JlbTtwYWRkaW5nLWxlZnQ6MS4ycmVtO3RleHQtYWxpZ246Y2VudGVyfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbDpiZWZvcmUsaGVhZGVyIC5zZWFyY2ggbGFi''@;'; put 'put ''ZWw6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWw6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaCBsYWJlbDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUy''@;'; put 'put ''MHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUzRS5jbHMtMSU3QmZpbGwlM0ElMjNmZmZmZmYlM0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMl''@;'; put 'put ''M0UlM0N0aXRsZSUzRVNlYXJjaCUzQyUyRnRpdGxlJTNFJTNDZyUyMGlkJTNEJTIyaWNvbnMlMjIlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGQlM0QlMjJNMTUlMkM0LjA1QTEwLjk1JTJDMTAuOTUlMkMwJTJDMSUyQzElMkM0LjA1JTJDMTUlMkMxMSUyQzExJTJDMCUyQzAl''@;'; put 'put ''MkMxJTJDMTUlMkM0LjA1TTE1JTJDMkExMyUyQzEzJTJDMCUyQzElMkMwJTJDMjglMkMxNSUyQzEzJTJDMTMlMkMwJTJDMCUyQzAlMkMxNSUyQzJaJTIyJTJGJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjAlMjBkJTNEJTIyTTMzLjcxJTJDMzIuMjlsLTcuMzctNy40Mi0xLjQy''@;'; put 'put ''JTJDMS40MSUyQzcuMzclMkM3LjQyYTElMkMxJTJDMCUyQzElMkMwJTJDMS40Mi0xLjQxWiUyMiUyRiUzRSUzQyUyRmclM0UlM0MlMkZzdmclM0UpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MXJlbTt3''@;'; put 'put ''aWR0aDoxcmVtO21hcmdpbjoxcmVtIDAgMDt2ZXJ0aWNhbC1hbGlnbjp0b3B9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsIGlucHV0LGhlYWRlciAuc2VhcmNoIGxhYmVsIGlucHV0LC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwgaW5wdXQsLmhlYWRlciAuc2VhcmNoIGxhYmVsIGlucHV0e2xp''@;'; put 'put ''bmUtaGVpZ2h0OjEuMnJlbTttYXJnaW46LjlyZW0gMH1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XSxoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XSwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10''@;'; put 'put ''ZXh0XXtib3JkZXI6MDtiYWNrZ3JvdW5kOjAgMDtjb2xvcjojZmFmYWZhO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvciwgI2ZhZmFmYSk7cGFkZGluZzowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cyxoZWFk''@;'; put 'put ''ZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cyxoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmFjdGl2ZSwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsLmhlYWRl''@;'; put 'put ''ciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmFjdGl2ZSwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cywuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmV7YmFja2dyb3VuZDowIDB9aGVhZGVyIC5icmFuZGluZysuc2VhcmNoLGhlYWRlciAu''@;'; put 'put ''YnJhbmRpbmcrLnNlYXJjaC1ib3gsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaCwuaGVhZGVyIC5icmFuZGluZysuc2VhcmNoLWJveHtwb3NpdGlvbjpyZWxhdGl2ZX1oZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2g6YWZ0ZXIsaGVhZGVyIC5icmFuZGluZysuc2VhcmNoLWJveDphZnRlciwuaGVh''@;'; put 'put ''ZGVyIC5icmFuZGluZysuc2VhcmNoOmFmdGVyLC5oZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gtYm94OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7YmFja2dyb3VuZDojZmFmYWZhO2JhY2tncm91bmQ6dmFyKC0tY2xyLWhlYWRlci1mb250''@;'; put 'put ''LWNvbG9yLCAjZmFmYWZhKTtvcGFjaXR5OnZhcigtLWNsci1oZWFkZXItZGl2aWRlci1vcGFjaXR5LCAuMTUpO29wYWNpdHk6LjE1O2hlaWdodDoycmVtO3dpZHRoOi4wNXJlbTt3aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO3RvcDouNXJlbTtsZWZ0OjB9QG1l''@;'; put 'put ''ZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7aGVhZGVyIC5zZWFyY2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhlYWRlciAuc2VhcmNoe2ZsZXg6MSAwIGF1dG87anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21heC13aWR0aDpub25lfWhlYWRlciAu''@;'; put 'put ''c2VhcmNoLWJveCBsYWJlbCxoZWFkZXIgLnNlYXJjaCBsYWJlbCwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLC5oZWFkZXIgLnNlYXJjaCBsYWJlbHtwYWRkaW5nOjA7d2lkdGg6M3JlbX1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWw6YmVmb3JlLGhlYWRlciAuc2VhcmNoIGxhYmVsOmJlZm9y''@;'; put 'put ''ZSwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2ggbGFiZWw6YmVmb3Jle2xlZnQ6MXJlbX1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwgaW5wdXQsaGVhZGVyIC5zZWFyY2ggbGFiZWwgaW5wdXQsLmhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCBpbnB1dCwu''@;'; put 'put ''aGVhZGVyIC5zZWFyY2ggbGFiZWwgaW5wdXR7ZGlzcGxheTpub25lfWhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaDphZnRlcixoZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gtYm94OmFmdGVyLC5oZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2g6YWZ0ZXIsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaC1i''@;'; put 'put ''b3g6YWZ0ZXJ7Y29udGVudDpub25lfWhlYWRlciAuc2VhcmNoLWJveCsuc2V0dGluZ3MsaGVhZGVyIC5zZWFyY2gtYm94Ky5oZWFkZXItYWN0aW9ucyxoZWFkZXIgLnNlYXJjaCsuc2V0dGluZ3MsaGVhZGVyIC5zZWFyY2grLmhlYWRlci1hY3Rpb25zLC5oZWFkZXIgLnNlYXJjaC1ib3grLnNl''@;'; put 'put ''dHRpbmdzLC5oZWFkZXIgLnNlYXJjaC1ib3grLmhlYWRlci1hY3Rpb25zLC5oZWFkZXIgLnNlYXJjaCsuc2V0dGluZ3MsLmhlYWRlciAuc2VhcmNoKy5oZWFkZXItYWN0aW9uc3twb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjAgMCBhdXRvfWhlYWRlciAuc2VhcmNoLWJveCsuc2V0dGluZ3M6YWZ0''@;'; put 'put ''ZXIsaGVhZGVyIC5zZWFyY2gtYm94Ky5oZWFkZXItYWN0aW9uczphZnRlcixoZWFkZXIgLnNlYXJjaCsuc2V0dGluZ3M6YWZ0ZXIsaGVhZGVyIC5zZWFyY2grLmhlYWRlci1hY3Rpb25zOmFmdGVyLC5oZWFkZXIgLnNlYXJjaC1ib3grLnNldHRpbmdzOmFmdGVyLC5oZWFkZXIgLnNlYXJjaC1i''@;'; put 'put ''b3grLmhlYWRlci1hY3Rpb25zOmFmdGVyLC5oZWFkZXIgLnNlYXJjaCsuc2V0dGluZ3M6YWZ0ZXIsLmhlYWRlciAuc2VhcmNoKy5oZWFkZXItYWN0aW9uczphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQ6I2ZhZmFmYTti''@;'; put 'put ''YWNrZ3JvdW5kOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvciwgI2ZhZmFmYSk7b3BhY2l0eTp2YXIoLS1jbHItaGVhZGVyLWRpdmlkZXItb3BhY2l0eSwgLjE1KTtvcGFjaXR5Oi4xNTtoZWlnaHQ6MnJlbTt3aWR0aDouMDVyZW07d2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0''@;'; put 'put ''aCwgLjA1cmVtKTt0b3A6LjVyZW07bGVmdDowfX1hLmxpbmstbm9ybWFsOmxpbmt7Y29sb3I6IzAwNzJhMztjb2xvcjp2YXIoLS1jbHItbGluay1jb2xvciwgIzAwNzJhMyl9YS5saW5rLWhvdmVyZWQ6bGlua3tjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9y''@;'; put 'put ''LCAjMDA3MmEzKX1hLmxpbmstY2xpY2tlZDpsaW5re2NvbG9yOiM5ZTU3YmM7Y29sb3I6dmFyKC0tY2xyLWxpbmstYWN0aXZlLWNvbG9yLCAjOWU1N2JjKX1hLmxpbmstdmlzaXRlZDpsaW5re2NvbG9yOiM1NjU5Yjg7Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvciwgIzU2NTli''@;'; put 'put ''OCl9Lm5hdntkaXNwbGF5OmZsZXg7aGVpZ2h0OjEuOHJlbTtsaXN0LXN0eWxlLXR5cGU6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luOjA7d2lkdGg6MTAwJTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym94LXNoYWRvdzowIC0uMDVyZW0gI2NjYyBpbnNldDtib3gtc2hhZG93OjAgLS4wNXJl''@;'; put 'put ''bSAwIHZhcigtLWNsci1uYXYtYm94LXNoYWRvdy1jb2xvciwgI2NjY2NjYykgaW5zZXR9Lm5hdiAubmF2LWl0ZW17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEuMnJlbX0ubmF2IC5uYXYtaXRlbS5hY3RpdmU+Lm5hdi1saW5re2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LW5hdi1saW5rLWFjdGl2ZS1jb2xvciwgYmxhY2spO2JveC1zaGFkb3c6MCAtLjA1cmVtICNjY2MgaW5zZXQ7Ym94LXNoYWRvdzowIC0uMDVyZW0gMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IsICNjY2NjY2MpIGluc2V0fS5uYXYgLm5hdi1saW5re2NvbG9yOiM2NjY7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yLCAjNjY2NjY2KTtmb250LXNpemU6LjdyZW07Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1uYXYtbGluay1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS44cmVtO2Rpc3BsYXk6''@;'; put 'put ''aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAuMTVyZW07Ym94LXNoYWRvdzpub25lfS5uYXYgLm5hdi1saW5rLmJ0bnt0ZXh0LXRyYW5zZm9ybTpub25lO21hcmdpbjowO21hcmdpbi1ib3R0b206LS4wNXJlbTtib3JkZXItcmFkaXVzOjB9Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5hdiAubmF2LWxp''@;'; put 'put ''bms6Zm9jdXMsLm5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOmluaGVyaXR9Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5hdiAubmF2LWxpbmsuYWN0aXZle2JveC1zaGFkb3c6MCAtLjE1cmVtICMwMDcyYTMgaW5zZXQ7Ym94LXNoYWRvdzowIC0uMTVyZW0gMCB2YXIoLS1jbHItbmF2LWFjdGl2''@;'; put 'put ''ZS1ib3gtc2hhZG93LWNvbG9yLCAjMDA3MmEzKSBpbnNldDt0cmFuc2l0aW9uOmJveC1zaGFkb3cgLjJzIGVhc2UtaW59Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5hdiAubmF2LWxpbms6Zm9jdXMsLm5hdiAubmF2LWxpbms6YWN0aXZlLC5uYXYgLm5hdi1saW5rLmFjdGl2ZXt0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246bm9uZX0ubmF2IC5uYXYtbGluay5hY3RpdmV7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yLCBibGFjayk7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1uYXYtbGluay1hY3RpdmUtZm9udC13ZWlnaHQsIDQwMCl9Lm5h''@;'; put 'put ''diAubmF2LWxpbmsubmF2LWl0ZW17bWFyZ2luLXJpZ2h0OjEuMnJlbX06cm9vdHstLWNsci1zdWJuYXYtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKX0uc3ViLW5hdiwuc3Vi''@;'; put 'put ''bmF2e2Rpc3BsYXk6ZmxleDtib3gtc2hhZG93OjAgLS4wNXJlbSAjY2NjIGluc2V0O2JveC1zaGFkb3c6MCAtLjA1cmVtIDAgdmFyKC0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yLCAjY2NjY2NjKSBpbnNldDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50''@;'; put 'put ''ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN1Ym5hdi1iZy1jb2xvciwgd2hpdGUpO2hlaWdodDoxLjhyZW19LnN1Yi1uYXYgLm5hdiwuc3VibmF2IC5uYXZ7ZmxleDoxIDEgYXV0bztwYWRkaW5nLWxlZnQ6MS4ycmVtfS5zdWItbmF2IC5uYXYt''@;'; put 'put ''aXRlbSwuc3ViLW5hdiAubmF2LWl0ZW0gYSwuc3VibmF2IC5uYXYtaXRlbSwuc3VibmF2IC5uYXYtaXRlbSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5zdWItbmF2IGFzaWRlLC5zdWJuYXYgYXNpZGV7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdo''@;'; put 'put ''dDoxLjhyZW07cGFkZGluZzowIDEuMnJlbX0uc3ViLW5hdiBhc2lkZT46bGFzdC1jaGlsZCwuc3VibmF2IGFzaWRlPjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowO3BhZGRpbmctcmlnaHQ6MH06cm9vdHstLWNsci1zaWRlbmF2LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJh''@;'; put 'put ''bC00MDApOy0tY2xyLXNpZGVuYXYtYm9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgpOy0tY2xyLXNpZGVuYXYtbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApOy0tY2xyLXNpZGVuYXYtbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItc2lkZW5hdi1saW5rLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItc2lkZW5hdi1saW5rLWFjdGl2ZS1ib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzKTstLWNs''@;'; put 'put ''ci1zaWRlbmF2LWhlYWRlci1jb2xvcjp2YXIoLS1jbHItaDYtY29sb3IpOy0tY2xyLXNpZGVuYXYtaGVhZGVyLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNi1mb250LXdlaWdodCk7LS1jbHItc2lkZW5hdi1oZWFkZXItZm9udC1mYW1pbHk6dmFyKC0tY2xyLWg2LWZvbnQtZmFtaWx5KTstLWNs''@;'; put 'put ''ci1zaWRlbmF2LWNvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7LS1jbHItc2lkZW5hdi1mb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpfS5zaWRlbmF2e2xpbmUtaGVpZ2h0OjEuMnJlbTttYXgtd2lkdGg6MTUuNnJlbTttaW4td2lkdGg6MTAuOHJlbTt3aWR0aDoxOCU7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0Oi4wNXJlbSBzb2xpZCAjY2NjO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZGVuYXYgLnNpZGVuYXYtY29udGVudHtmbGV4OjEgMSBhdXRvO292ZXJmbG93LXg6aGlkZGVuO3BhZGRpbmctYm90dG9tOjEuMnJlbX0uc2lkZW5hdiAuc2lkZW5hdi1jb250''@;'; put 'put ''ZW50IC5uYXYtbGlua3tib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItc2lkZW5hdi1saW5rLWFjdGl2ZS1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6LjE1''@;'; put 'put ''cmVtO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXNpZGVuYXYtbGluay1hY3RpdmUtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3dpZHRoOjEwMCV9''@;'; put 'put ''LnNpZGVuYXYgLnNpZGVuYXYtY29udGVudD4ubmF2LWxpbmt7bWFyZ2luOjEuMnJlbSAwIDAgMS41cmVtO3BhZGRpbmctbGVmdDouNnJlbTtjb2xvcjojMzMzO2NvbG9yOnZhcigtLWNsci1zaWRlbmF2LWhlYWRlci1jb2xvciwgIzMzMzMzMyk7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1zaWRlbmF2LWhlYWRlci1mb250LXdlaWdodCwgNTAwKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5pciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLXNpZGVuYXYtaGVhZGVyLWZvbnQtZmFtaWx5LCBNZXRy''@;'; put 'put ''b3BvbGlzLCAiQXZlbmlyIE5leHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgc2Fucy1zZXJpZik7Zm9udC1zaXplOi43cmVtO2xpbmUtaGVpZ2h0OjEuMnJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWx9LnNpZGVuYXYgLnNpZGVuYXYtY29udGVudD4ubmF2LWxpbms6aG92ZXJ7YmFja2dy''@;'; put 'put ''b3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLXNpZGVuYXYtbGluay1ob3Zlci1jb2xvciwgI2U4ZThlOCl9LnNpZGVuYXYgLnNpZGVuYXYtY29udGVudD4ubmF2LWxpbmsuYWN0aXZle2JhY2tncm91bmQ6I2Q4ZTNlOTtiYWNrZ3JvdW5kOnZhcigtLWNsci1zaWRlbmF2LWxpbmst''@;'; put 'put ''YWN0aXZlLWJnLWNvbG9yLCAjZDhlM2U5KTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1zaWRlbmF2LWxpbmstYWN0aXZlLWNvbG9yLCBibGFjayl9LnNpZGVuYXYgLm5hdi1ncm91cHtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1zaWRlbmF2LWNvbG9yLCAjNjY2NjY2KTtmb250LXdl''@;'; put 'put ''aWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXNpZGVuYXYtZm9udC13ZWlnaHQsIDQwMCk7Zm9udC1zaXplOi43cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW4tdG9wOjEuMnJlbTt3aWR0aDoxMDAlfS5zaWRlbmF2IC5uYXYtZ3JvdXAgLm5hdi1saXN0LC5zaWRlbmF2IC5u''@;'; put 'put ''YXYtZ3JvdXAgbGFiZWx7cGFkZGluZzowIDAgMCAxLjhyZW07Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTttYXJnaW46MCAuM3JlbX0uc2lkZW5hdiAubmF2LWdyb3VwIC5uYXYtbGlzdHtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luLXRvcDowfS5zaWRlbmF2''@;'; put 'put ''IC5uYXYtZ3JvdXAgLm5hdi1saXN0IC5uYXYtbGlua3tsaW5lLWhlaWdodDouOHJlbTtwYWRkaW5nOi4ycmVtIDAgLjJyZW0gLjZyZW19LnNpZGVuYXYgLm5hdi1ncm91cCAubmF2LWxpc3QgLm5hdi1saW5rOmhvdmVye2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci1z''@;'; put 'put ''aWRlbmF2LWxpbmstaG92ZXItY29sb3IsICNlOGU4ZTgpfS5zaWRlbmF2IC5uYXYtZ3JvdXAgLm5hdi1saXN0IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZDojZDhlM2U5O2JhY2tncm91bmQ6dmFyKC0tY2xyLXNpZGVuYXYtbGluay1hY3RpdmUtYmctY29sb3IsICNkOGUzZTkpO2NvbG9y''@;'; put 'put ''OiMwMDA7Y29sb3I6dmFyKC0tY2xyLXNpZGVuYXYtbGluay1hY3RpdmUtY29sb3IsIGJsYWNrKX0uc2lkZW5hdiAubmF2LWdyb3VwIGxhYmVse2NvbG9yOiMzMzM7Y29sb3I6dmFyKC0tY2xyLXNpZGVuYXYtaGVhZGVyLWNvbG9yLCAjMzMzMzMzKTtmb250LXdlaWdodDo1MDA7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLXNpZGVuYXYtaGVhZGVyLWZvbnQtd2VpZ2h0LCA1MDApO2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXMsQXZlbmlyIE5leHQsSGVsdmV0aWNhIE5ldWUsQXJpYWwsc2Fucy1zZXJpZjtmb250LWZhbWlseTp2YXIoLS1jbHItc2lkZW5hdi1oZWFkZXItZm9udC1mYW1pbHksIE1l''@;'; put 'put ''dHJvcG9saXMsICJBdmVuaXIgTmV4dCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmKTtmb250LXNpemU6LjdyZW07bGluZS1oZWlnaHQ6MS4ycmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbH0uc2lkZW5hdiAubmF2LWdyb3VwIGlucHV0W3R5cGU9Y2hlY2tib3hde3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uc2lkZW5hdiAubmF2LWdy''@;'; put 'put ''b3VwIGlucHV0W3R5cGU9Y2hlY2tib3hdOmZvY3VzK2xhYmVse291dGxpbmU6IzNiOTlmYyBhdXRvIC4yNXJlbX0uc2lkZW5hdiAuY29sbGFwc2libGUgbGFiZWx7cGFkZGluZzowIDAgMCAxLjNyZW19LnNpZGVuYXYgLmNvbGxhcHNpYmxlIGxhYmVsOmFmdGVye2NvbnRlbnQ6IiI7ZmxvYXQ6''@;'; put 'put ''bGVmdDtoZWlnaHQ6LjVyZW07d2lkdGg6LjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSgtLjRyZW0pIHRyYW5zbGF0ZVkoLjM1cmVtKTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3''@;'; put 'put ''dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTIlMjAxMiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRS5jbHMtMSU3QmZpbGwlM0ElMjM5YTlhOWElM0IlN0QlM0MlMkZzdHls''@;'; put 'put ''ZSUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlM0N0aXRsZSUzRUNhcmV0JTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGQlM0QlMjJNNiUyQzlMMS4yJTJDNC4yYTAuNjglMkMwLjY4JTJDMCUy''@;'; put 'put ''QzAlMkMxJTJDMS0xTDYlMkM3LjA4JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMwJTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjpt''@;'; put 'put ''aWRkbGU7bWFyZ2luOjB9LnNpZGVuYXYgLmNvbGxhcHNpYmxlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWR+Lm5hdi1saXN0LC5zaWRlbmF2IC5jb2xsYXBzaWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkfnVse2hlaWdodDowO2Rpc3BsYXk6bm9uZX0uc2lkZW5hdiAuY29s''@;'; put 'put ''bGFwc2libGUgaW5wdXRbdHlwZT1jaGVja2JveF1+Lm5hdi1saXN0LC5zaWRlbmF2IC5jb2xsYXBzaWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XX51bHtoZWlnaHQ6YXV0b30uc2lkZW5hdiAuY29sbGFwc2libGUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbDphZnRlcnt0cmFu''@;'; put 'put ''c2Zvcm06cm90YXRlKC05MGRlZykgdHJhbnNsYXRlKC0uMzVyZW0pIHRyYW5zbGF0ZVkoLS40cmVtKX06cm9vdHstLWNsci12ZXJ0aWNhbC1uYXYtZGl2aWRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwKTstLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00''@;'; put 'put ''MDApOy0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoKTstLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2xyLXA0LWZvbnQtd2VpZ2h0KX0uY2xyLXZlcnRpY2FsLW5hdntkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246Y29sdW1uO3BhZGRpbmctdG9wOi45cmVtO3dpZHRoOjEycmVtO21pbi13aWR0aDoyLjRyZW07YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvciwgI2U4ZThlOCk7d2lsbC1jaGFuZ2U6d2lkdGg7dHJh''@;'; put 'put ''bnNpdGlvbjp3aWR0aCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1kaXZpZGVye2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JvcmRlci1zdHls''@;'; put 'put ''ZTpzb2xpZDtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgsIC4wNXJlbSk7bWFyZ2luOi42cmVtIDB9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW59LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cHtkaXNwbGF5OmJsb2NrO2ZsZXg6MCAwIGF1dG87aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxLjhyZW19LmNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYgLm5hdi1ncm91cC1jb250ZW50e2Rpc3BsYXk6ZmxleDtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1jb2xvciwgIzY2NjY2Nil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZXtjb2xvcjojNjY2O2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IsICM2NjY2NjYpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yLCB3aGl0ZSk7cG9zaXRpb246cmVsYXRpdmV9LmNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6LjE1cmVtO2JhY2tncm91bmQ6dmFyKC0tY2xyLW5hdi1hY3RpdmUtYm94LXNoYWRvdy1jb2xvcil9LmNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZSAubmF2LWljb257ZmlsbDojMDA3MmEzO2ZpbGw6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvciwgIzAwNzJhMyl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmhvdmVye2NvbG9yOiM2NjY7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvciwgIzY2NjY2Nik7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvciwgI2NjY2NjYyk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNs''@;'; put 'put ''ci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGlua3tmbGV4OjEgMSBhdXRvO3BhZGRpbmctbGVmdDowO21pbi13aWR0aDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257bWFyZ2luLWxlZnQ6MS4ycmVtfS5jbHItdmVydGljYWwt''@;'; put 'put ''bmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LXRleHR7cGFkZGluZy1sZWZ0OjEuMnJlbX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1pY29uKy5uYXYtdGV4dHtwYWRkaW5nLWxlZnQ6MH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5h''@;'; put 'put ''di1saW5rKy5uYXYtZ3JvdXAtdGV4dHtkaXNwbGF5Om5vbmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jaGlsZHJlbntvdmVyZmxvdy15OmhpZGRlbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmlnZ2Vye2ZsZXg6''@;'; put 'put ''MCAwIDEuOHJlbTtib3JkZXI6MDtoZWlnaHQ6MS44cmVtO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2N1cnNvcjpwb2ludGVyO291dGxpbmUtb2Zmc2V0Oi0uMjVyZW19LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlLWRv''@;'; put 'put ''dWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmln''@;'; put 'put ''Z2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV17Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yLCBibGFjayl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2Vye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7aGVpZ2h0OjEuOHJlbTttYXJnaW4tdG9wOi0uOXJlbX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Y29sb3I6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpsZWZ0''@;'; put 'put ''fS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRyaWdnZXItaWNvbntmbGV4LXNocmluazowO3dpZHRoOi44cmVtO2FsaWduLXNlbGY6Y2VudGVyO21hcmdpbi1yaWdodDouNXJlbTt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYgLm5hdi10cmlnZ2VyLWljb257bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6LjVyZW07dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcC1jb2xvcjojY2NjO2JvcmRl''@;'; put 'put ''ci10b3AtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6LjA1cmVtO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmln''@;'; put 'put ''Z2VyLWRpdmlkZXItYm9yZGVyLXdpZHRoLCAuMDVyZW0pO3BhZGRpbmctdG9wOi42cmVtfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmt7aGVpZ2h0OjEuOHJlbTtwYWRkaW5nOjAgLjZyZW0gMCAxLjJyZW07bGluZS1oZWlnaHQ6''@;'; put 'put ''MS44cmVtO291dGxpbmUtb2Zmc2V0Oi0uMjVyZW19LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10ZXh0LC5jbHItdmVydGljYWwtbmF2IC5uYXYtdGV4dHtmbGV4OjEgMSBhdXRvO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30u''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmt7ZGlzcGxheTpmbGV4O3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yLCAjNjY2NjY2KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZle2NvbG9yOiM2''@;'; put 'put ''NjY7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvciwgIzY2NjY2Nik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IsIHdoaXRlKTtwb3NpdGlvbjpyZWxhdGl2ZX0u''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDouMTVyZW07YmFja2dyb3VuZDp2YXIoLS1jbHItbmF2LWFjdGl2ZS1ib3gtc2hhZG93LWNvbG9yKX0uY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOiMwMDcyYTM7ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yLCAjMDA3MmEzKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yLCAjNjY2NjY2KTtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yLCAjY2NjY2NjKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''diAubmF2LWhlYWRlcntwYWRkaW5nOjAgLjZyZW0gMCAxLjJyZW07Zm9udC1zaXplOi42cmVtO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXdlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhlYWRlci1mb250LXdlaWdodCwgNjAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6''@;'; put 'put ''MS44cmVtfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaWNvbntmbGV4OjAgMCAuOHJlbTthbGlnbi1zZWxmOmNlbnRlcjtoZWlnaHQ6LjhyZW07d2lkdGg6LjhyZW07bWluLWhlaWdodDouOHJlbTttaW4td2lkdGg6LjhyZW07bWFyZ2luLXJpZ2h0Oi4zcmVtO3ZlcnRpY2FsLWFsaWduOm1pZGRs''@;'; put 'put ''ZX0uY2xyLXZlcnRpY2FsLW5hdiBjbHItdmVydGljYWwtbmF2LWdyb3VwLWNoaWxkcmVue2Rpc3BsYXk6YmxvY2t9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1idG57ZmxleDoxIDEgYXV0bztwYWRkaW5nOjA7bWFyZ2luOjA7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7''@;'; put 'put ''b3V0bGluZS1vZmZzZXQ6LS4yNXJlbX0uY2xyLXZlcnRpY2FsLW5hdj4ubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1jb250ZW50Pi5uYXYtbGlua3tmbGV4OjAgMCAxLjhyZW19LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rKy5uYXYtZ3JvdXAtdHJpZ2dlcntmbGV4OjAgMCAx''@;'; put 'put ''LjhyZW19LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rKy5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRleHR7ZGlzcGxheTpub25lfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaWNvbisubmF2LWdyb3VwLXRleHR7cGFkZGluZy1sZWZ0OjB9LmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5h''@;'; put 'put ''di1ncm91cHMgLm5hdi1saW5rLC5jbHItdmVydGljYWwtbmF2Lmhhcy1uYXYtZ3JvdXBzIC5uYXYtZ3JvdXAgLm5hdi1ncm91cC10ZXh0LC5jbHItdmVydGljYWwtbmF2Lmhhcy1uYXYtZ3JvdXBzIC5uYXYtZ3JvdXAgLm5hdi1ncm91cC10cmlnZ2Vye2ZvbnQtd2VpZ2h0OjYwMH0uY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi5oYXMtbmF2LWdyb3VwcyAubmF2LWdyb3VwLWNoaWxkcmVuIC5uYXYtbGlua3tmb250LXdlaWdodDo0MDB9LmNsci12ZXJ0aWNhbC1uYXYuaGFzLWljb25zIC5uYXYtZ3JvdXAtY2hpbGRyZW4gLm5hdi1saW5re3BhZGRpbmctbGVmdDoyLjNyZW19LmNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYgLm5hdi1ncm91cC5hY3RpdmU6bm90KC5pcy1leHBhbmRlZCkgLm5hdi1ncm91cC1jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yLCB3aGl0ZSk7Ym9yZGVyLWxlZnQ6LjE1cmVtIHNv''@;'; put 'put ''bGlkIHZhcigtLWNsci1uYXYtYWN0aXZlLWJveC1zaGFkb3ctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257ZmlsbDojMDA3MmEzO2ZpbGw6dmFyKC0tY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''di1pY29uLWFjdGl2ZS1jb2xvciwgIzAwNzJhMyl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGluay5hY3RpdmV+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYt''@;'; put 'put ''YWN0aXZlLWJnLWNvbG9yLCB3aGl0ZSl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGluazpob3Zlcn4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1i''@;'; put 'put ''Zy1jb2xvciwgI2NjY2NjYyl9LmNsci12ZXJ0aWNhbC1uYXY6bm90KC5pcy1jb2xsYXBzZWQpIC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFz''@;'; put 'put ''cyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZHt3aWR0aDoyLjRyZW07bWluLXdpZHRoOjIuNHJlbTtjdXJzb3I6cG9pbnRlcn0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Bl''@;'; put 'put ''bi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LXRyaWdnZXJ7bWFyZ2luLXJpZ2h0Oi4xNXJlbX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0p''@;'; put 'put ''IC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWljb257bWFyZ2luOjA7bWFyZ2luLWxlZnQ6LjhyZW19Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGlua3tmbGV4OjAgMCAyLjRyZW19Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5p''@;'; put 'put ''cy1jb2xsYXBzZWQgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGlua34ubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgLjhyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSgtLjhyZW0pO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ct''@;'; put 'put ''bWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkg''@;'; put 'put ''LmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlcntwYWRkaW5nOjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1j''@;'; put 'put ''b2xsYXBzZWQgLm5hdi1ncm91cC10cmlnZ2Vye3BhZGRpbmctbGVmdDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3Jv''@;'; put 'put ''dXAtdHJpZ2dlciBjbHItaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue2hlaWdodDoxLjhyZW07d2lkdGg6LjVyZW07bWFyZ2luLWxlZnQ6LjE1cmVtO21hcmdpbi1yaWdodDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue3dpZHRoOi41cmVtfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpu''@;'; put 'put ''b3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAsLm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1saW5re2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMt''@;'; put 'put ''aWNvbnMgLm5hdi1ncm91cHtkaXNwbGF5OmJsb2NrfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkLmhhcy1pY29ucyAubmF2LWxpbmt7''@;'; put 'put ''ZGlzcGxheTpmbGV4fS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkLmhhcy1pY29ucyAubmF2LWdyb3VwLXRleHQsLm1haW4tY29udGFp''@;'; put 'put ''bmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4''@;'; put 'put ''KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjB9LmNsci12ZXJ0aWNhbC1uYXYubmF2LXRyaWdnZXItLWJvdHRvbSAubmF2LXRyaWdnZXJ7b3Jk''@;'; put 'put ''ZXI6MjttYXJnaW4tdG9wOjB9LmNsci12ZXJ0aWNhbC1uYXYubmF2LXRyaWdnZXItLWJvdHRvbSAubmF2LXRyaWdnZXIrLm5hdi1jb250ZW50e2JvcmRlci1ib3R0b20tY29sb3I6I2NjYztib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVy''@;'; put 'put ''LWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOi4wNXJlbTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci13aWR0aCwgLjA1cmVtKTtib3JkZXIt''@;'; put 'put ''dG9wOm5vbmU7cGFkZGluZy10b3A6MH06cm9vdHstLWNsci1zbGlkaW5nLXBhbmVsLXRleHQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1uYXYtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2''@;'; put 'put ''LWhvdmVyLWJnOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1ib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9y''@;'; put 'put ''ZGVycmFkaXVzKTstLWNsci1yZXNwb25zaXZlLW5hdi1oYW1idXJnZXItYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1ib3JkZXItcmFkaXVzKTstLWNsci1yZXNwb25zaXZlLW5hdi1vdmVyZmxvdy1ib3JkZXItcmFkaXVzOi4ycmVtOy0tY2xyLXJlc3Bv''@;'; put 'put ''bnNpdmUtbmF2LWhlYWRlci1iYWNrZHJvcC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1yZXNwb25zaXZlLW5hdi1oZWFkZXItYmFja2Ryb3Atb3BhY2l0eTouODV9LmNsci1uYXYtY2xvc2V7bWFyZ2luOi43NXJlbTstLWNvbG9yOnZhcigtLWNsci1jb2xv''@;'; put 'put ''ci1uZXV0cmFsLTUwMCl9LmNsci1uYXYtY2xvc2U6aG92ZXIsLmNsci1uYXYtY2xvc2U6Zm9jdXN7LS1jb2xvcjp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvcil9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlciwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJ7ZGlzcGxh''@;'; put 'put ''eTpub25lfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbiwuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW46YmVmb3JlLC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjphZnRlciwuY2xyLW5hdi1jbG9zZT5zcGFuLC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3JlLC5jbHIt''@;'; put 'put ''bmF2LWNsb3NlPnNwYW46YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0Oi4xcmVtO3dpZHRoOjEuMnJlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci1yYWRpdXM6LjE1cmVt''@;'; put 'put ''O2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXJlc3BvbnNpdmUtbmF2LWhhbWJ1cmdlci1ib3JkZXItcmFkaXVzLCAuMTVyZW0pfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbiwuY2xyLW5hdi1jbG9zZT5zcGFue3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0u''@;'; put 'put ''aGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW46YmVmb3JlLC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjphZnRlciwuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwuY2xyLW5hdi1jbG9zZT5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5o''@;'; put 'put ''ZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmV7dG9wOi0uMzVyZW19LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVyLC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7Ym90dG9tOi0uMzVyZW19LmhlYWRlci1oYW1i''@;'; put 'put ''dXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbiwuY2xyLW5hdi1jbG9zZS5hY3RpdmU+c3BhbntiYWNrZ3JvdW5kOjAgMH0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZSwuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVyLC5jbHItbmF2''@;'; put 'put ''LWNsb3NlLmFjdGl2ZT5zcGFuOmJlZm9yZSwuY2xyLW5hdi1jbG9zZS5hY3RpdmU+c3BhbjphZnRlcntsZWZ0Oi4xNXJlbTt0cmFuc2Zvcm0tb3JpZ2luOjklO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW46YmVmb3Jl''@;'; put 'put ''LC5jbHItbmF2LWNsb3NlLmFjdGl2ZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVyLC5jbHItbmF2LWNsb3NlLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uaGVh''@;'; put 'put ''ZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbiwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXIsLmNsci1uYXYtY2xvc2U+c3BhbiwuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwuY2xyLW5hdi1jbG9zZT5zcGFu''@;'; put 'put ''OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDouMnJlbTt3aWR0aDouMnJlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci1yYWRpdXM6LjJyZW07Ym9yZGVyLXJhZGl1czp2''@;'; put 'put ''YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtb3ZlcmZsb3ctYm9yZGVyLXJhZGl1cywgLjJyZW0pfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuLC5jbHItbmF2LWNsb3NlPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oZWFkZXItb3ZlcmZsb3ctdHJp''@;'; put 'put ''Z2dlcj5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlciwuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwuY2xyLW5hdi1jbG9zZT5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dl''@;'; put 'put ''cj5zcGFuOmJlZm9yZSwuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0b3A6LS40cmVtfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmFmdGVyLC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7Ym90dG9tOi0uNHJlbX0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIuYWN0aXZlPnNwYW4s''@;'; put 'put ''LmNsci1uYXYtY2xvc2UuYWN0aXZlPnNwYW57YmFja2dyb3VuZDowIDB9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIuYWN0aXZlPnNwYW46YWZ0ZXIsLmNsci1uYXYtY2xvc2UuYWN0aXZlPnNwYW46YmVmb3JlLC5j''@;'; put 'put ''bHItbmF2LWNsb3NlLmFjdGl2ZT5zcGFuOmFmdGVye2hlaWdodDouMXJlbTt3aWR0aDoxLjJyZW07bGVmdDotLjNyZW07dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZSwu''@;'; put 'put ''Y2xyLW5hdi1jbG9zZS5hY3RpdmU+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVyLC5jbHItbmF2LWNsb3NlLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1AbWVkaWEg''@;'; put 'put ''c2NyZWVuIGFuZCAobWF4LXdpZHRoOjk5MnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpw''@;'; put 'put ''b2ludGVyO2ZvbnQtc2l6ZToxLjJyZW07aGVpZ2h0OjNyZW07d2lkdGg6M3JlbTtwYWRkaW5nOjAgMCAuMnJlbTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6I2ZhZmFmYTtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IsICNmYWZhZmEpO29wYWNp''@;'; put 'put ''dHk6LjY1O29wYWNpdHk6dmFyKC0tY2xyLWhlYWRlci1uYXYtb3BhY2l0eSwgLjY1KX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcjpmb2N1cywubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyOmZvY3Vze291dGxpbmUtb2Zmc2V0Oi0uMjVy''@;'; put 'put ''ZW19Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6ZW5hYmxlZDpob3ZlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyOmVuYWJsZWQ6aG92ZXJ7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tY2xyLWhlYWRlci1uYXYtaG92ZXItb3BhY2l0''@;'; put 'put ''eSwgMSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6ZGlzYWJsZWQsLm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTF7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDtpbnNldDowIGF1dG8gMCAwO2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci1uYXYtYmFja2dyb3VuZC1jb2xvciwgI2U4ZThlOCk7ei1pbmRleDoxMDM5O2hl''@;'; put 'put ''aWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xOHJlbSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpm''@;'; put 'put ''aXhlZDtpbnNldDowIDAgMCBhdXRvO2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci1uYXYtYmFja2dyb3VuZC1jb2xvciwgI2U4ZThlOCk7ei1pbmRleDoxMDM5O2hlaWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKDE4cmVtKTt0cmFuc2l0aW9uOnRyYW5zZm9y''@;'; put 'put ''bSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0ye292ZXJmbG93OmluaGVyaXR9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaH0ubWFpbi1jb250YWluZXIg''@;'; put 'put ''LnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBh''@;'; put 'put ''c2lkZXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdntwYWRkaW5nLWxlZnQ6MH0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MSAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtaXRlbXtoZWlnaHQ6MS44cmVtO21hcmdpbi1yaWdodDowfS5tYWluLWNv''@;'; put 'put ''bnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluaywubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluaywubWFpbi1j''@;'; put 'put ''b250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5re3BhZGRpbmc6MCAuNnJlbSAwIDEuMnJlbTt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9w''@;'; put 'put ''LWxlZnQtcmFkaXVzOi4xNXJlbTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJy''@;'; put 'put ''YWRpdXMsIC4xNXJlbSk7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IsICM2NjY2NjYpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xv''@;'; put 'put ''cjojNjY2O2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IsICM2NjY2NjYpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yLCB3aGl0ZSk7cG9zaXRpb246cmVsYXRp''@;'; put 'put ''dmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6''@;'; put 'put ''MDt3aWR0aDouMTVyZW07YmFja2dyb3VuZDp2YXIoLS1jbHItbmF2LWFjdGl2ZS1ib3gtc2hhZG93LWNvbG9yKX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xy''@;'; put 'put ''LW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmUgLm5hdi1pY29ue2ZpbGw6IzAwNzJhMztmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IsICMwMDcyYTMpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250''@;'; put 'put ''YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1s''@;'; put 'put ''aW5rOmhvdmVye2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvciwgIzY2NjY2Nik7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvciwgI2NjY2NjYyk7''@;'; put 'put ''dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWIt''@;'; put 'put ''bmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXIs''@;'; put 'put ''Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIg''@;'; put 'put ''Lm5hdiAubmF2LWxpbmsuYWN0aXZle2JveC1zaGFkb3c6bm9uZX0ubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZle2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDojZmZmO2JhY2tncm91bmQ6dmFyKC0tY2xyLXJlc3BvbnNpdmUt''@;'; put 'put ''bmF2LWhvdmVyLWJnLCB3aGl0ZSl9Lm1haW4tY29udGFpbmVyIC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMntib3JkZXItcmlnaHQ6bm9uZX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI6YWZ0ZXJ7ZGlz''@;'; put 'put ''cGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtiYWNrZ3JvdW5kOiNmYWZhZmE7YmFja2dyb3VuZDp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IsICNmYWZhZmEpO29wYWNpdHk6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLW9wYWNpdHksIC4xNSk7b3Bh''@;'; put 'put ''Y2l0eTouMTU7aGVpZ2h0OjJyZW07d2lkdGg6LjA1cmVtO3dpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7dG9wOi41cmVtO2xlZnQ6MH0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRpbmd7bWF4LXdpZHRoOjEycmVtO21pbi13aWR0aDowO292ZXJmbG93''@;'; put 'put ''OmhpZGRlbn0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyKy5icmFuZGluZ3twYWRkaW5nLWxlZnQ6MH0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyKy5icmFuZGluZyAuY2xyLWljb24sLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgLmxvZ28sLm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgY2RzLWljb24sLm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXIt''@;'; put 'put ''dHJpZ2dlcisuYnJhbmRpbmcgY2xyLWljb257ZGlzcGxheTpub25lfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5icmFuZGluZysuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIsLm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1uYXYrLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye21hcmdp''@;'; put 'put ''bi1sZWZ0OmF1dG99Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLWJhY2tkcm9wLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLWJhY2tkcm9we3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3Vu''@;'; put 'put ''ZDojMDAwO2JhY2tncm91bmQ6dmFyKC0tY2xyLXJlc3BvbnNpdmUtbmF2LWhlYWRlci1iYWNrZHJvcC1iZy1jb2xvciwgYmxhY2spO29wYWNpdHk6Ljg1O29wYWNpdHk6dmFyKC0tY2xyLXJlc3BvbnNpdmUtbmF2LWhlYWRlci1iYWNrZHJvcC1vcGFjaXR5LCAuODUpO2N1cnNvcjpwb2ludGVy''@;'; put 'put ''O3otaW5kZXg6MTAzOH0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmssLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTIgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIg''@;'; put 'put ''Lm5hdi1saW5re2ZsZXg6MCAwIGF1dG87b3BhY2l0eToxO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yLCAjNjY2NjY2KX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MSAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5j''@;'; put 'put ''bHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLmZhLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAu''@;'; put 'put ''aGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVu''@;'; put 'put ''dSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5mYXtkaXNwbGF5Om5vbmV9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtdGV4dCwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsg''@;'; put 'put ''Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtdGV4dCwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0yIC5uYXYtbGluayAubmF2LXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItc2xpZGluZy1wYW5lbC10ZXh0LWNvbG9yLCAjNjY2NjY2KTtsaW5lLWhlaWdodDoxLjJyZW07cGFkZGluZzouM3JlbSAwIC4zcmVtIDEuMnJlbTt3aGl0ZS1z''@;'; put 'put ''cGFjZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51''@;'; put 'put ''IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRl''@;'; put 'put ''eHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVh''@;'; put 'put ''ZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZs''@;'; put 'put ''b3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjojNjY2O2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IsICM2NjY2NjYpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yLCB3aGl0ZSk7cG9zaXRpb246cmVsYXRpdmV9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1s''@;'; put 'put ''aW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOi4xNXJlbTtiYWNrZ3JvdW5kOnZhcigtLWNsci1uYXYtYWN0aXZlLWJveC1zaGFkb3ctY29sb3IpfS5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOiMwMDcyYTM7ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yLCAjMDA3MmEzKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVh''@;'; put 'put ''ZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93''@;'; put 'put ''LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVye2NvbG9yOiM2NjY7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvciwgIzY2NjY2Nik7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvciwgI2NjY2NjYyk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5h''@;'; put 'put ''di1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlPi5uYXYtdGV4dCwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIg''@;'; put 'put ''LmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0e2NvbG9yOmluaGVyaXR9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93''@;'; put 'put ''LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2Vye2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZ3twb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjE4cmVtO21heC13''@;'; put 'put ''aWR0aDoxOHJlbTt6LWluZGV4OjEwNDA7cGFkZGluZy1sZWZ0OjEuMnJlbX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZz4ubmF2LWxpbmt7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFk''@;'; put 'put ''ZXIgLmJyYW5kaW5nIC5jbHItaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyAubG9nbywubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbiwubWFpbi1jb250YWluZXIub3Bl''@;'; put 'put ''bi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbltzaGFwZT12bS1idWddLC5tYWluLWNvbnRhaW5lci5vcGVuLWhh''@;'; put 'put ''bWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIGNsci1pY29uW3NoYXBlPXZtLWJ1Z10sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLmNsci12bXctbG9nb3tiYWNrZ3JvdW5kLWNvbG9yOiM4YzhjOGM7Ym9yZGVyLXJhZGl1czouMTVy''@;'; put 'put ''ZW19Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLnRpdGxle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXNsaWRpbmctcGFuZWwtdGV4dC1jb2xvciwgIzY2NjY2Nik7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW59''@;'; put 'put ''Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6YXV0bztsZWZ0OjA7ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFuc2xhdGUoMTguNnJlbSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW57YmFja2dyb3VuZDowIDB9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVy''@;'; put 'put ''Z2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcntsZWZ0Oi4xNXJlbTt0cmFuc2Zvcm0tb3JpZ2luOjklO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5tYWlu''@;'; put 'put ''LWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVk''@;'; put 'put ''ZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAu''@;'; put 'put ''c3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMXtwYWRkaW5nLXRv''@;'; put 'put ''cDo0LjJyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLnNpZGVuYXYtY29udGVudCwubWFpbi1jb250YWluZXIub3Blbi1o''@;'; put 'put ''YW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAuc2lkZW5hdi1jb250ZW50LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAuc2lkZW5hdi1jb250ZW50LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1t''@;'; put 'put ''ZW51IC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMSAuc2lkZW5hdi1jb250ZW50LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSAuc2lkZW5hdi1jb250ZW50e3BhZGRpbmctYm90dG9tOjEuMnJlbX0ubWFpbi1jb250''@;'; put 'put ''YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7dHJhbnNp''@;'; put 'put ''dGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Bl''@;'; put 'put ''bi1vdmVyZmxvdy1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMntwYWRkaW5nLXRvcDoxLjJyZW19Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJh''@;'; put 'put ''bnNmb3JtOnRyYW5zbGF0ZSgtMTguNnJlbSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZTphZnRlcntjb250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xy''@;'; put 'put ''LW5hdi1jbG9zZT5zcGFue2JhY2tncm91bmQ6MCAwfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmFmdGVye2hlaWdodDouMXJl''@;'; put 'put ''bTt3aWR0aDoxLjJyZW07bGVmdDotLjNyZW07dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0u''@;'; put 'put ''bWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIu''@;'; put 'put ''b3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0x''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMXtvdmVyZmxvdzppbmhlcml0O3dpZHRoOjE4cmVtO21heC13aWR0aDoxOHJlbX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1l''@;'; put 'put ''bnUgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye3dpZHRoOjE4cmVtO21heC13aWR0aDoxOHJlbX19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyIC5oZWFkZXIgLmJyYW5kaW5ne21heC13aWR0aDo3LjJyZW07bWluLXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe3RyYW5zZm9ybTp0cmFuc2xhdGUoLTE0LjRyZW0pfS5tYWluLWNv''@;'; put 'put ''bnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyIC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1j''@;'; put 'put ''b250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye3RyYW5zZm9ybTp0cmFuc2xhdGUoMTQuNHJlbSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmd7d2lkdGg6MTQuNHJlbTttYXgtd2lkdGg6MTQuNHJlbX0ubWFpbi1j''@;'; put 'put ''b250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Yi1uYXYuY2xy''@;'; put 'put ''LW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTF7b3ZlcmZsb3c6aW5oZXJpdDt3aWR0''@;'; put 'put ''aDoxNC40cmVtO21heC13aWR0aDoxNC40cmVtfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OmF1dG87bGVmdDowO3otaW5kZXg6MTAzOTt0cmFuc2Zvcm06dHJhbnNsYXRlKDE1cmVtKTt0cmFuc2l0''@;'; put 'put ''aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZTphZnRlcntjb250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zaWRlbmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMnt3aWR0aDoxNC40cmVtO21heC13aWR0aDoxNC40cmVtfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246''@;'; put 'put ''Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtsZWZ0OmF1dG87ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTE1cmVtKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6''@;'; put 'put ''bm9uZX19OnJvb3R7LS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTE6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtNDAwKTstLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMjp2YXIoLS1jbHItY29s''@;'; put 'put ''b3ItZGFuZ2VyLTgwMCk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTM6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKTstLWNsci1wcm9ncmVzcy1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApfS5wcm9ncmVzcywucHJvZ3Jlc3Mtc3RhdGlje2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDoyZW07bWFyZ2luOjA7bWF4LWhlaWdodDouN3JlbTttaW4taGVpZ2h0Oi4ycmVtO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LnByb2dyZXNzPnByb2dyZXNz''@;'; put 'put ''ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IsICMwMDcyYTMpO2Rpc3BsYXk6YmxvY2s7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjojZThlOGU4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWJnLWNvbG9yLCAjZThlOGU4KTtib3JkZXI6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5wcm9ncmVzcz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOiMwMDcyYTM7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvciwgIzAwNzJhMyl9LnByb2dyZXNzPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDcyYTM7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJv''@;'; put 'put ''Z3Jlc3MtZGVmYXVsdC1jb2xvciwgIzAwNzJhMyl9LnByb2dyZXNzPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi1tb3otcHJvZ3Jlc3MtYmFyey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO2Nv''@;'; put 'put ''bG9yOiNlOGU4ZTg7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWJnLWNvbG9yLCAjZThlOGU4KTttaW4td2lkdGg6Mi40cmVtO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lfS5wcm9ncmVzcz5wcm9ncmVzc1t2YWx1ZT0iMCJdOjotd2Via2l0LXBy''@;'; put 'put ''b2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFye2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJv''@;'; put 'put ''Z3Jlc3MtYmctY29sb3IsICNlOGU4ZTgpfS5wcm9ncmVzcz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy1pbm5lci1lbGVtZW50ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lfS5wcm9n''@;'; put 'put ''cmVzcz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXstd2Via2l0LXRyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluO3RyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluO2JvcmRlci1yYWRpdXM6MH0ucHJvZ3Jlc3Muc3VjY2Vzcz5wcm9ncmVzc3tjb2xvcjojNWViNzE1O2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSwgIzVlYjcxNSl9LnByb2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjojNWViNzE1O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xv''@;'; put 'put ''ci0xLCAjNWViNzE1KX0ucHJvZ3Jlc3Muc3VjY2Vzcz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojNWViNzE1O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xLCAjNWViNzE1KX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9n''@;'; put 'put ''cmVzc3tjb2xvcjojYzIxZDAwO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMywgI2MyMWQwMCl9LnByb2dyZXNzLndhcm5pbmc+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXByb2dyZXNzLWFsdC1jb2xvci0zLCAjYzIxZDAwKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zLCAjYzIxZDAwKX0u''@;'; put 'put ''cHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNze2NvbG9yOiNjMjFkMDA7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yLCAjYzIxZDAwKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMiwgI2MyMWQwMCl9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1j''@;'; put 'put ''b2xvci0yLCAjYzIxZDAwKX0ucHJvZ3Jlc3MubGFiZWxlZCwucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWR7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1yaWdodDozZW19LnByb2dyZXNzLmxhYmVsZWQ+c3BhbiwucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+c3BhbntkaXNwbGF5OmJsb2NrO2Zv''@;'; put 'put ''bnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDowO2xpbmUtaGVpZ2h0OjFlbTttYXJnaW4tdG9wOi0uMzc1ZW19QGtleWZyYW1lcyBjbHItcHJvZ3Jlc3MtZmFkZXswJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowfX0ucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZT5wcm9n''@;'; put 'put ''cmVzc1t2YWx1ZT0iMTAwIl0sLnByb2dyZXNzLnByb2dyZXNzLWZhZGU+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdK3NwYW57YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1mYWRlIC4zcyBsaW5lYXIgLjVzIGZvcndhcmRzfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3MsLnByb2dyZXNzLmZs''@;'; put 'put ''YXNoPnByb2dyZXNze3RyYW5zaXRpb246Y29sb3IgLjFzIGVhc2Utb3V0IDFzfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWUsLnByb2dyZXNzLmZsYXNoPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNp''@;'; put 'put ''dGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1vdXQgLjNzO3RyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zc30ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIwIl06''@;'; put 'put ''Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWUsLnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOm5vbmU7dHJhbnNpdGlvbjpub25lfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3M6Oi1tb3otcHJv''@;'; put 'put ''Z3Jlc3MtYmFyLC5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7LW1vei10cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3M7dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1j''@;'; put 'put ''b2xvciAuMXMgZWFzZS1vdXQgLjNzfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl17Y29sb3I6IzVlYjcxNTtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEsICM1ZWI3MTUpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi13ZWJr''@;'; put 'put ''aXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjojNWViNzE1O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xLCAjNWViNzE1KX0ucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOiM1ZWI3MTU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEsICM1ZWI3MTUpfS5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXSwucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZS5mbGFzaD5wcm9ncmVz''@;'; put 'put ''c1t2YWx1ZT0iMTAwIl0rc3BhbnthbmltYXRpb246Y2xyLXByb2dyZXNzLWZhZGUgLjZzIGxpbmVhciAxcyBmb3J3YXJkc30ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXXtjb2xvcjojYzIxZDAwO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3It''@;'; put 'put ''MiwgI2MyMWQwMCl9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yLCAjYzIxZDAwKX0u''@;'; put 'put ''cHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yLCAjYzIxZDAwKX1Aa2V5ZnJhbWVzIGNsci1wcm9n''@;'; put 'put ''cmVzcy1sb29wZXJ7MCV7bGVmdDotMTAwJX10b3tsZWZ0OjEwMCV9fS5wcm9ncmVzcy5sb29we3Bvc2l0aW9uOnJlbGF0aXZlfS5wcm9ncmVzcy5sb29wPnByb2dyZXNze292ZXJmbG93OmhpZGRlbjtjb2xvcjp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCwg''@;'; put 'put ''dHJhbnNwYXJlbnQpfS5wcm9ncmVzcy5sb29wPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCwgdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy5sb29wPnBy''@;'; put 'put ''b2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsIHRyYW5zcGFyZW50KX0ucHJvZ3Jlc3MubG9vcD5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp0cmFuc3BhcmVudH0ucHJvZ3Jlc3MubG9vcDphZnRlcnthbmltYXRpb246Y2xyLXByb2dyZXNzLWxvb3BlciAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtjb250ZW50OiIgIjt0b3A6MDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiMwMDcyYTM7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvciwgIzAwNzJhMyk7d2lkdGg6NzUlfS5wcm9ncmVzcy5sb29wLmRhbmdlcjphZnRlciwucHJvZ3Jlc3MubG9vcC53YXJuaW5nOmFmdGVye2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''I2MyMWQwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMiwgI2MyMWQwMCl9LnByb2dyZXNzLmxvb3Auc3VjY2VzczphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM1ZWI3MTU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9y''@;'; put 'put ''LTEsICM1ZWI3MTUpfS5uYXYtaXRlbSAucHJvZ3Jlc3M6YWZ0ZXJ7dG9wOjB9LnByb2dyZXNzLXN0YXRpY3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MDt3aWR0aDoxMDAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvciwgI2U4ZThlOCk7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDcyYTM7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvciwgIzAwNzJhMyk7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MCU7Y29udGVudDoiICJ9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1''@;'; put 'put ''ZT0iMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMiXTpiZWZvcmV7d2lkdGg6MiV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0''@;'; put 'put ''ZXJbZGF0YS12YWx1ZT0iNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3Mt''@;'; put 'put ''bWV0ZXJbZGF0YS12YWx1ZT0iNyJdOmJlZm9yZXt3aWR0aDo1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRp''@;'; put 'put ''Yz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTIiXTpiZWZvcmV7d2lkdGg6MTAl''@;'; put 'put ''fS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE1Il06''@;'; put 'put ''YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE3Il06YmVmb3Jle3dpZHRoOjE1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltk''@;'; put 'put ''YXRhLXZhbHVlPSIxOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxOSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyMCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1t''@;'; put 'put ''ZXRlcltkYXRhLXZhbHVlPSIyMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyMiJdOmJlZm9yZXt3aWR0aDoyMCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjMiXTpiZWZvcmUsLnByb2dyZXNzLXN0''@;'; put 'put ''YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjYiXTpiZWZvcmUsLnByb2dy''@;'; put 'put ''ZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjciXTpiZWZvcmV7d2lkdGg6MjUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI5''@;'; put 'put ''Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFs''@;'; put 'put ''dWU9IjMyIl06YmVmb3Jle3dpZHRoOjMwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVz''@;'; put 'put ''cy1tZXRlcltkYXRhLXZhbHVlPSIzNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNyJdOmJlZm9yZXt3aWR0aDozNSV9LnByb2dyZXNz''@;'; put 'put ''LXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDAiXTpiZWZvcmUsLnBy''@;'; put 'put ''b2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDIiXTpiZWZvcmV7d2lkdGg6NDAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9''@;'; put 'put ''IjQzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEt''@;'; put 'put ''dmFsdWU9IjQ2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ3Il06YmVmb3Jle3dpZHRoOjQ1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9n''@;'; put 'put ''cmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGlj''@;'; put 'put ''Pi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MiJdOmJlZm9yZXt3aWR0aDo1MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTQiXTpiZWZvcmUs''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTciXTpi''@;'; put 'put ''ZWZvcmV7d2lkdGg6NTUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2Rh''@;'; put 'put ''dGEtdmFsdWU9IjYwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYyIl06YmVmb3Jle3dpZHRoOjYwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5w''@;'; put 'put ''cm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NyJdOmJlZm9yZXt3aWR0aDo2NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjgiXTpiZWZv''@;'; put 'put ''cmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzEi''@;'; put 'put ''XTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzIiXTpiZWZvcmV7d2lkdGg6NzAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjczIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''W2RhdGEtdmFsdWU9Ijc0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyW2RhdGEtdmFsdWU9Ijc3Il06YmVmb3Jle3dpZHRoOjc1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3OSJdOmJlZm9yZSwucHJvZ3Jlc3Mt''@;'; put 'put ''c3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MiJdOmJlZm9yZXt3aWR0''@;'; put 'put ''aDo4MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''ODUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODciXTpiZWZvcmV7d2lkdGg6ODUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9Ijg4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dy''@;'; put 'put ''ZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkyIl06YmVmb3Jle3dpZHRoOjkwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MyJdOmJlZm9yZSwucHJvZ3Jl''@;'; put 'put ''c3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NiJdOmJlZm9yZXt3''@;'; put 'put ''aWR0aDo5NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTciXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1''@;'; put 'put ''ZT0iOTkiXTpiZWZvcmV7d2lkdGg6OTglfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEwMCJdOmJlZm9yZXt3aWR0aDoxMDAlfS5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZD4ucHJvZ3Jlc3MtbWV0ZXJ7cmlnaHQ6M2VtfS5wcm9ncmVzcy1zdGF0aWMuc3Vj''@;'; put 'put ''Y2Vzcz4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzVlYjcxNTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSwgIzVlYjcxNSl9LnByb2dyZXNzLXN0YXRpYy53YXJuaW5nPi5wcm9ncmVzcy1tZXRlcjpiZWZvcmV7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zLCAjYzIxZDAwKX0ucHJvZ3Jlc3Mtc3RhdGljLmRhbmdlcj4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMiwgI2MyMWQwMCl9LmNhcmQtYmxvY2sgLnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWMsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcywuY2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpY3ttYXJnaW46MDttYXJnaW4tdG9w''@;'; put 'put ''Oi0uNnJlbTtoZWlnaHQ6LjE4NzVyZW07cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcz5wcm9ncmVzcywuY2FyZC1ibG9jayAucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlciwuY2FyZC1mb290ZXIgLnByb2dyZXNzPnByb2dyZXNzLC5jYXJkLWZv''@;'; put 'put ''b3RlciAucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcntoZWlnaHQ6LjE4NzVyZW07cG9zaXRpb246YWJzb2x1dGV9LmNhcmQtYmxvY2sgLnByb2dyZXNzLnRvcCwuY2FyZC1ibG9jayAucHJvZ3Jlc3Mtc3RhdGljLnRvcCwuY2FyZC1mb290ZXIgLnByb2dyZXNzLnRvcCwuY2FyZC1m''@;'; put 'put ''b290ZXIgLnByb2dyZXNzLXN0YXRpYy50b3B7bWFyZ2luLXRvcDowO3RvcDowfS5uYXYtaXRlbSAucHJvZ3Jlc3MsLm5hdi1pdGVtIC5wcm9ncmVzcy1zdGF0aWN7bWFyZ2luOjA7aGVpZ2h0Oi4yNHJlbTttaW4taGVpZ2h0Oi4yNHJlbTttYXgtaGVpZ2h0Oi4yNHJlbTtsZWZ0OjB9Lm5hdi1p''@;'; put 'put ''dGVtIC5wcm9ncmVzcz5wcm9ncmVzcywubmF2LWl0ZW0gLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJ7aGVpZ2h0Oi4yNHJlbTttaW4taGVpZ2h0Oi4yNHJlbTttYXgtaGVpZ2h0Oi4yNHJlbTtwb3NpdGlvbjphYnNvbHV0ZX0ucHJvZ3Jlc3MtYmxvY2t7ZGlzcGxheTpmbGV4O3dp''@;'; put 'put ''ZHRoOjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnByb2dyZXNzLWJsb2NrPip7ZmxleDowIDAgYXV0bztwYWRkaW5nLXJpZ2h0Oi42cmVtfS5wcm9ncmVzcy1ibG9jaz46Zmlyc3QtY2hpbGR7cGFkZGluZy1yaWdodDouOXJlbX0ucHJvZ3Jlc3MtYmxv''@;'; put 'put ''Y2s+Omxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowfS5wcm9ncmVzcy1ibG9jaz5sYWJlbHtmb250LXdlaWdodDo2MDB9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcywucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLXN0YXRpY3tmbGV4OjAgMSBhdXRvfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jl''@;'; put 'put ''c3MtZ3JvdXB7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDphdXRvO2ZsZXg6MCAxIGF1dG87ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCV9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1ncm91cCAuY2xyLXJvd3ttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5wcm9ncmVzcy1ibG9j''@;'; put 'put ''az4ucHJvZ3Jlc3MtZ3JvdXAgLmNsci1yb3c+W2NsYXNzKj1jbHItY29sLV17cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9ja3ttYXJnaW4tYm90dG9tOi42cmVtO3BhZGRpbmc6MH0uY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2s6bGFz''@;'; put 'put ''dC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrPmxhYmVse21heC13aWR0aDozMyU7bGluZS1oZWlnaHQ6LjlyZW19LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcywuY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2sgLnByb2dyZXNz''@;'; put 'put ''LXN0YXRpY3twb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6LjYzOTVyZW07bWFyZ2luLXRvcDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcz4ucHJvZ3Jlc3MtbWV0ZXIsLmNhcmQtYmxv''@;'; put 'put ''Y2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDouNjM5NXJlbX1fOi1tcy1pbnB1dC1wbGFjZWhvbGRlciAucHJvZ3Jlc3MtYmxvY2s+bGFi''@;'; put 'put ''ZWwsOnJvb3QgLnByb2dyZXNzLWJsb2NrPmxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDozLjZyZW07d2lkdGg6My42cmVtO21pbi1oZWlnaHQ6My42cmVtO21pbi13aWR0aDozLjZyZW07YW5p''@;'; put 'put ''bWF0aW9uOnNwaW4gMXMgbGluZWFyIGluZmluaXRlO21hcmdpbjowO3BhZGRpbmc6MDtiYWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMGlkJTNEJTIyTGF5ZXJfMiUyMiUyMGRhdGEtbmFtZSUzRCUyMkxheWVyJTIwMiUyMiUyMHhtbG5zJTNE''@;'; put 'put ''JTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwNzIlMjA3MiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMiUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZpbGwlM0ElMjBub25lJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW1pdGVybGltaXQlM0ElMjAxMCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cm9rZS13aWR0aCUzQSUyMDVweCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cm9rZSUzQSUyMGJsYWNrJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW9wYWNpdHklM0ElMjAwLjE1JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLmNscy0yJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlJTNBJTIwJTIzMDA3MmEzJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDdGl0bGUlM0VQcmVsb2FkZXJfNzJ4MiUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGN4JTNEJTIyMzYlMjIlMjBjeSUzRCUyMjM2JTIyJTIwciUzRCUyMjMzJTIyJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cGF0aCUyMGNsYXNzJTNEJTIyY2xzLTIlMjIlMjBkJTNEJTIyTTE0LjMlMkM2MC45QTMzJTJDMzMlMkMwJTJDMCUyQzElMkMzNiUyQzMlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZwYXRoJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTt0ZXh0LWluZGVudDoxMDAlO292ZXJmbG93OmhpZGRlbjt3''@;'; put 'put ''aGl0ZS1zcGFjZTpub3dyYXB9LnNwaW5uZXIuc3Bpbm5lci1tZHtoZWlnaHQ6MS44cmVtO3dpZHRoOjEuOHJlbTttaW4taGVpZ2h0OjEuOHJlbTttaW4td2lkdGg6MS44cmVtfS5zcGlubmVyLnNwaW5uZXItaW5saW5lLC5zcGlubmVyLnNwaW5uZXItc217aGVpZ2h0Oi45cmVtO3dpZHRoOi45''@;'; put 'put ''cmVtO21pbi1oZWlnaHQ6LjlyZW07bWluLXdpZHRoOi45cmVtfS5zcGlubmVyLnNwaW5uZXItaW5saW5le3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfS5zcGlubmVyLnNwaW5uZXItaW52ZXJzZXtiYWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2''@;'; put 'put ''ZyUyMGlkJTNEJTIyTGF5ZXJfMiUyMiUyMGRhdGEtbmFtZSUzRCUyMkxheWVyJTIwMiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwNzIlMjA3MiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMl''@;'; put 'put ''M0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMiUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZpbGwlM0ElMjBub25lJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW1pdGVybGltaXQlM0ElMjAxMCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMHN0cm9rZS13aWR0aCUzQSUyMDVweCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMHN0cm9rZSUzQSUyMHdoaXRlJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW9wYWNpdHklM0ElMjAwLjE1JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLmNscy0yJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlJTNBJTIwJTIzNzRjMWUyJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VQcmVsb2FkZXJfNzJ4MiUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGN4JTNE''@;'; put 'put ''JTIyMzYlMjIlMjBjeSUzRCUyMjM2JTIyJTIwciUzRCUyMjMzJTIyJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTIlMjIlMjBkJTNEJTIyTTE0LjMlMkM2MC45QTMzJTJDMzMlMkMwJTJDMCUyQzElMkMzNiUyQzMlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Ml''@;'; put 'put ''MkZwYXRoJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKX0uc3Bpbm5lci5zcGlubmVyLW5ldXRyYWwtMHtiYWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMGlkJTNEJTIyTGF5ZXJfMiUyMiUyMGRhdGEtbmFtZSUzRCUyMkxheWVyJTIwMiUyMiUyMHht''@;'; put 'put ''bG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwNzIlMjA3MiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMiUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZpbGwlM0ElMjBub25lJTNCJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW1pdGVybGltaXQlM0ElMjAxMCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cm9rZS13aWR0aCUzQSUyMDVweCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cm9rZSUzQSUyMHRyYW5zcGFyZW50JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW9wYWNpdHklM0ElMjAxJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLmNscy0yJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlJTNBJTIwJTIzZmZmZmZmJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZz''@;'; put 'put ''JTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VQcmVsb2FkZXJfNzJ4MiUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGN4JTNEJTIyMzYlMjIlMjBjeSUzRCUyMjM2JTIyJTIwciUzRCUyMjMzJTIyJTJGJTNFJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTIlMjIlMjBkJTNEJTIyTTE0LjMlMkM2MC45QTMzJTJDMzMlMkMwJTJDMCUyQzElMkMzNiUyQzMlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZwYXRoJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKX0uc3Bpbm5lci5zcGlubmVyLWNoZWNre2Fu''@;'; put 'put ''aW1hdGlvbjpub25lO2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0''@;'; put 'put ''JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMjBmb2N1c2FibGUlM0QlMjJmYWxzZSUyMiUyMGFyaWEtaGlkZGVuJTNEJTIy''@;'; put 'put ''dHJ1ZSUyMiUyMHJvbGUlM0QlMjJpbWclMjIlM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzAwNzJhMyUyMiUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xMy43MiUyQzI3LjY5JTJDMy4yOSUyQzE3LjI3YTElMkMxJTJDMCUy''@;'; put 'put ''QzAlMkMxJTJDMS40MS0xLjQxbDklMkM5TDMxLjI5JTJDNy4yOWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNDElMkMxLjQxWiUyMiUzRSUzQyUyRnBhdGglM0UlM0MlMkZzdmclM0UpfS5idG4tc20gLnNwaW5uZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIC5zcGlubmVye2hl''@;'; put 'put ''aWdodDouNjVyZW07d2lkdGg6LjY1cmVtO21pbi1oZWlnaHQ6LjY1cmVtO21pbi13aWR0aDouNjVyZW19LmJ0bi1pY29uOm5vdCguYnRuLXNtKSAuc3Bpbm5lcntoZWlnaHQ6LjhyZW07d2lkdGg6LjhyZW07bWluLWhlaWdodDouOHJlbTttaW4td2lkdGg6LjhyZW19OnJvb3R7LS1jbHItdGFi''@;'; put 'put ''bGUtYmdjb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci10aGVhZC1iZ2NvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTUwKTstLWNsci10YWJsZS1oZWFkZXItYm9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLXRhYmxl''@;'; put 'put ''LWZvb3Rlci1ib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItdGFibGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItdGFibGVyb3ctYm9yZGVyY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwKTst''@;'; put 'put ''LWNsci10YWJsZS1ib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzKTstLWNsci10YWJsZS1ib3JkZXJ3aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoKTstLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzOi4xcmVtOy0tY2xyLXRhYmxlLWZvbnQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci10aGVhZC1jb2xvcjojNjY2NjY2fS50YWJsZXtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3''@;'; put 'put ''aWR0aCwgLjA1cmVtKTtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdGFibGUtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvciwgd2hpdGUpO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvbnQtY29sb3IsICM2NjY2NjYpO21hcmdpbjowO21hcmdpbi10b3A6MS4ycmVtO21heC13aWR0aDoxMDAlO3dpZHRo''@;'; put 'put ''OjEwMCV9LnRhYmxlIHRoLC50YWJsZSB0ZHtmb250LXNpemU6LjY1cmVtO2xpbmUtaGVpZ2h0Oi43cmVtO2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDouMDVyZW07Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9y''@;'; put 'put ''ZGVyLXRvcC1jb2xvcjojZThlOGU4O2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlcm93LWJvcmRlcmNvbG9yLCAjZThlOGU4KTtwYWRkaW5nOi41NXJlbSAuNnJlbTt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnRhYmxlIHRoLmxlZnQsLnRhYmxlIHRkLmxl''@;'; put 'put ''ZnR7dGV4dC1hbGlnbjpsZWZ0fS50YWJsZSB0aC5sZWZ0OmZpcnN0LWNoaWxkLC50YWJsZSB0ZC5sZWZ0OmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDouM3JlbX0udGFibGUgdGh7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItdGhlYWQtY29sb3IsICM2NjY2NjYpO2ZvbnQtc2l6ZTouNTVy''@;'; put 'put ''ZW07Zm9udC13ZWlnaHQ6NjAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yLCAjZmFmYWZhKTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDti''@;'; put 'put ''b3JkZXItYm90dG9tLXdpZHRoOi4wNXJlbTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItYm90dG9tLWNvbG9yOiNjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yLCAjY2NjY2Nj''@;'; put 'put ''KTtib3JkZXItdG9wOjAgbm9uZX0udGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowIG5vbmV9LnRhYmxlIHRib2R5K3Rib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDouMDVyZW07Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFi''@;'; put 'put ''bGUtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLXRvcC1jb2xvcjojY2NjO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvciwgI2NjY2NjYyl9LnRhYmxlIHRoZWFkIHRoOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFk''@;'; put 'put ''aXVzOi4xcmVtO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMsIC4xcmVtKX0udGFibGUgdGhlYWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6LjFyZW07Ym9yZGVyLXRvcC1yaWdodC1y''@;'; put 'put ''YWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMsIC4xcmVtKX0udGFibGUgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOi4xcmVtO2JvcmRlci1ib3R0b20tbGVm''@;'; put 'put ''dC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMsIC4xcmVtKX0udGFibGUgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOi4xcmVtO2JvcmRlci1ib3R0b20t''@;'; put 'put ''cmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzLCAuMXJlbSl9LnRhYmxlLWNvbXBhY3QgdGgsLnRhYmxlLWNvbXBhY3QgdGR7cGFkZGluZy10b3A6LjNyZW07cGFkZGluZy1ib3R0b206LjI1cmVtfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aGVhZCB0aHtib3Jk''@;'; put 'put ''ZXI6MDtib3JkZXItcmFkaXVzOjA7ZGlzcGxheTpub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOi4wNXJlbTtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0''@;'; put 'put ''aCwgLjA1cmVtKTtib3JkZXItdG9wLWNvbG9yOiNjY2M7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHt0ZXh0LWFs''@;'; put 'put ''aWduOmxlZnQ7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0ZDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0''@;'; put 'put ''LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC13aWR0aDouMDVyZW07Ym9yZGVyLXJpZ2h0LXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItcmlnaHQtY29sb3I6I2NjYztib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xv''@;'; put 'put ''ciwgI2NjY2NjYyk7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IsICNmYWZhZmEpO2ZvbnQtd2VpZ2h0OjYwMH0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0aCwu''@;'; put 'put ''dGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjAgbm9uZX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVy''@;'; put 'put ''dGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czouMXJlbTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzLCAuMXJlbSl9''@;'; put 'put ''LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5OmZpcnN0LW9mLXR5cGUgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXIt''@;'; put 'put ''dG9wLXJpZ2h0LXJhZGl1czouMXJlbTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cywgLjFyZW0pfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLnRh''@;'; put 'put ''YmxlLXZlcnRpY2FsIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czouMXJlbTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVz''@;'; put 'put ''LCAuMXJlbSl9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1yaWdodC1yYWRpdXM6LjFyZW07Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMsIC4xcmVtKX0udGFibGUudGFibGUtbm9ib3JkZXJ7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnRyYW5zcGFyZW50O2JvcmRlcjowfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20tY29sb3I6I2NjYztib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JvcmRl''@;'; put 'put ''ci10b3A6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItdG9wOjAgbm9uZTtwYWRkaW5nLXRvcDouNnJlbX0udGFibGUudGFibGUtbm9ib3JkZXIgdGQ6Zmlyc3QtY2hp''@;'; put 'put ''bGR7Ym9yZGVyLXJpZ2h0OjAgbm9uZX0udGFibGUudGFibGUtbm9ib3JkZXIgdGhlYWQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoZWFkIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aCwudGFibGUudGFibGUtbm9i''@;'; put 'put ''b3JkZXIgdGR7Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudH0udGFibGUudGFibGUtbm9ib3JkZXIgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRkOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDowfS50YWJsZS50YWJsZS1jb21wYWN0IHRoLC50YWJsZS50YWJsZS1jb21w''@;'; put 'put ''YWN0IHRke3BhZGRpbmctdG9wOi4zcmVtO3BhZGRpbmctYm90dG9tOi4yNXJlbX0udGFibGUudGFibGUtY29tcGFjdC50YWJsZS1ub2JvcmRlciB0aCwudGFibGUudGFibGUtY29tcGFjdC50YWJsZS1ub2JvcmRlciB0ZHtwYWRkaW5nLXRvcDouMzVyZW07cGFkZGluZy1ib3R0b206LjNyZW19''@;'; put 'put ''OnJvb3R7LS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cyk7LS1jbHItdG9vbHRpcC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1''@;'; put 'put ''dHJhbC0wKTstLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMy1mb250LXdlaWdodCl9LnRvb2x0aXB7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0O292ZXJmbG93OnZpc2libGV9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVu''@;'; put 'put ''dHt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXI7d2hpdGUtc3BhY2U6bm9ybWFsO3otaW5kZXg6MTA1MH0udG9vbHRpcD4udG9vbHRpcC1jb250ZW50OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2luc2V0Oi0yMHB4O2NvbnRlbnQ6IiJ9''@;'; put 'put ''LnRvb2x0aXA6aG92ZXI+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcDpmb2N1cz4udG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjF9LnRvb2x0aXA6aG92ZXI+LnRvb2x0aXAtY29udGVudDplbXB0eSwudG9vbHRpcDpmb2N1cz4udG9vbHRpcC1jb250ZW50OmVt''@;'; put 'put ''cHR5e3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MH0udG9vbHRpcDpmb2N1c3tvdXRsaW5lOjB9LnRvb2x0aXA6Zm9jdXM+OmZpcnN0LWNoaWxke291dGxpbmUtb2Zmc2V0Oi4wNXJlbTtvdXRsaW5lLXdpZHRoOi4wNXJlbTtvdXRsaW5lLWNvbG9yOiMzYjk5ZmM7b3V0bGluZS1zdHlsZTpz''@;'; put 'put ''b2xpZH0udG9vbHRpcD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodHtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yLCB3aGl0''@;'; put 'put ''ZSk7Zm9udC1zaXplOi42NXJlbTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJh''@;'; put 'put ''Y2tncm91bmQtY29sb3IsIGJsYWNrKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7bGluZS1oZWlnaHQ6LjlyZW07bWFyZ2luOjA7cGFkZGluZzouNDVyZW0gLjZyZW07d2lkdGg6MTJyZW07cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgNTAlO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOi44cmVtfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQ6YmVm''@;'; put 'put ''b3JlLC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHQ6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotLjQycmVtO2xlZnQ6MDt0b3A6YXV0bztyaWdodDphdXRvO2NvbnRlbnQ6IiI7Ym9yZGVyLWxlZnQ6LjNyZW0gc29saWQgIzAwMDtib3JkZXItbGVm''@;'; put 'put ''dC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItdG9wOi4yNXJlbSBzb2xpZCAjMDAwO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJpZ2h0Oi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2Jv''@;'; put 'put ''cmRlci1ib3R0b206LjI1cmVtIHNvbGlkIHRyYW5zcGFyZW50O3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtbGVmdHtjb2xvcjojZmZmO2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci10b29sdGlwLWNvbG9yLCB3aGl0ZSk7Zm9udC1zaXplOi42NXJlbTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IsIGJsYWNrKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7bGluZS1oZWlnaHQ6LjlyZW07bWFyZ2luOjA7cGFkZGluZzouNDVyZW0g''@;'; put 'put ''LjZyZW07d2lkdGg6MTJyZW07cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byA1MCUgMTAwJSBhdXRvO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7bWFyZ2luLWJvdHRvbTouOHJlbX0udG9vbHRpcC50b29sdGlwLXRvcC1sZWZ0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29s''@;'; put 'put ''dGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtbGVmdDpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOi0uNDJyZW07cmlnaHQ6MDt0b3A6YXV0bztsZWZ0OmF1dG87Y29udGVudDoiIjtib3JkZXItcmlnaHQ6LjNyZW0gc29saWQgIzAwMDtib3JkZXItcmlnaHQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDouMjVyZW0gc29saWQgIzAwMDtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1sZWZ0Oi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0''@;'; put 'put ''b206LjI1cmVtIHNvbGlkIHRyYW5zcGFyZW50O3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLXJpZ2h0e2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRvb2x0aXAtY29sb3IsIHdoaXRlKTtmb250LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvciwgYmxhY2spO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtsaW5lLWhlaWdodDouOXJlbTttYXJnaW46MDtwYWRkaW5nOi40NXJlbSAu''@;'; put 'put ''NnJlbTt3aWR0aDoxMnJlbTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDoxMDAlIGF1dG8gYXV0byA1MCU7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi10b3A6LjhyZW19LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAg''@;'; put 'put ''LnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1yaWdodDpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0uNDJyZW07bGVmdDowO2JvdHRvbTphdXRvO3JpZ2h0OmF1dG87Y29udGVudDoiIjtib3JkZXItbGVmdDouM3JlbSBzb2xpZCAjMDAwO2JvcmRlci1sZWZ0LWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206LjI1cmVtIHNvbGlkICMwMDA7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmlnaHQ6LjNyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVy''@;'; put 'put ''LXRvcDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7cG9pbnRlci1ldmVudHM6bm9uZX0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0e2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRvb2x0aXAtY29sb3IsIHdoaXRlKTtmb250LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvciwgYmxhY2spO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtsaW5lLWhlaWdodDouOXJlbTttYXJnaW46MDtwYWRkaW5nOi40NXJlbSAu''@;'; put 'put ''NnJlbTt3aWR0aDoxMnJlbTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDoxMDAlIDUwJSBhdXRvIGF1dG87Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDttYXJnaW4tdG9wOi44cmVtfS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAg''@;'; put 'put ''LnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LS40MnJlbTtyaWdodDowO2JvdHRvbTphdXRvO2xlZnQ6YXV0bztjb250ZW50OiIiO2JvcmRlci1yaWdodDouM3JlbSBzb2xpZCAjMDAwO2JvcmRlci1yaWdodC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOi4yNXJlbSBzb2xpZCAjMDAwO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWxlZnQ6LjNyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVy''@;'; put 'put ''LXRvcDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7cG9pbnRlci1ldmVudHM6bm9uZX0udG9vbHRpcC50b29sdGlwLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXJpZ2h0e3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjUwJSBhdXRvIGF1''@;'; put 'put ''dG8gMTAwJTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yLCB3aGl0ZSk7Zm9udC1zaXplOi42NXJlbTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IsIGJsYWNrKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7bGluZS1oZWlnaHQ6''@;'; put 'put ''LjlyZW07bWFyZ2luOjA7cGFkZGluZzouNDVyZW0gLjZyZW07d2lkdGg6MTJyZW07Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi1sZWZ0Oi44cmVtfS50b29sdGlwLnRvb2x0aXAtcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50''@;'; put 'put ''b29sdGlwLXJpZ2h0OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0Oi0uNDVyZW07Ym90dG9tOmF1dG87cmlnaHQ6YXV0bztjb250ZW50OiIiO2JvcmRlci10b3A6LjNyZW0gc29saWQgIzAwMDtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQt''@;'; put 'put ''Y29sb3IpO2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgIzAwMDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTouM3JlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDouMjVyZW0gc29saWQgdHJhbnNwYXJl''@;'; put 'put ''bnQ7cG9pbnRlci1ldmVudHM6bm9uZX0udG9vbHRpcC50b29sdGlwLWxlZnQ+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtbGVmdHtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDo1MCUgMTAwJSBhdXRvIGF1dG87Y29sb3I6I2ZmZjtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdG9vbHRpcC1jb2xvciwgd2hpdGUpO2ZvbnQtc2l6ZTouNjVyZW07Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOm5vcm1hbDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yLCBibGFjayk7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2xpbmUtaGVpZ2h0Oi45cmVtO21hcmdpbjowO3BhZGRpbmc6LjQ1cmVt''@;'; put 'put ''IC42cmVtO3dpZHRoOjEycmVtO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7bWFyZ2luLXJpZ2h0Oi44cmVtfS50b29sdGlwLnRvb2x0aXAtbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtbGVmdDpiZWZvcmV7cG9zaXRpb246''@;'; put 'put ''YWJzb2x1dGU7dG9wOjA7cmlnaHQ6LS40NXJlbTtib3R0b206YXV0bztsZWZ0OmF1dG87Y29udGVudDoiIjtib3JkZXItdG9wOi4zcmVtIHNvbGlkICMwMDA7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItbGVmdDouMjVyZW0gc29s''@;'; put 'put ''aWQgIzAwMDtib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7cG9pbnRlci1ldmVudHM6bm9uZX0udG9vbHRp''@;'; put 'put ''cC50b29sdGlwLXhzPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXhze3dpZHRoOjMuNnJlbX0udG9vbHRpcC50b29sdGlwLXNtPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXNte3dpZHRoOjZyZW19''@;'; put 'put ''LnRvb2x0aXAudG9vbHRpcC1tZD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1tZHt3aWR0aDoxMnJlbX0udG9vbHRpcC50b29sdGlwLWxnPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxne3dpZHRo''@;'; put 'put ''OjE4cmVtfS50b29sdGlwPi5idG4rLnRvb2x0aXAtY29udGVudCwudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4uYnRuKy50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLWJvdHRvbTouNXJlbX0udG9vbHRpcC50''@;'; put 'put ''b29sdGlwLWJvdHRvbS1yaWdodD4uYnRuKy50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLXRvcDouNXJlbX0udG9vbHRpcC50b29sdGlwLXJpZ2h0Pi5idG4rLnRvb2x0aXAtY29udGVudHttYXJnaW4tbGVm''@;'; put 'put ''dDouMnJlbX0udG9vbHRpcD4uY2xyLWljb257bWFyZ2luLXJpZ2h0OjB9LnRvb2x0aXA+c3Zne3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAtdHJpZ2dlcjpmb2N1cysudG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZX06cm9vdHstLWNsci1mb3JtLWRpc2FibGVkLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKTstLWNsci1mb3Jtcy1sYWJlbC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC04MDApOy0tY2xyLWZvcm1zLXRleHQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItZm9ybXMtaW52YWxp''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItZm9ybXMtdmFsaWQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtNzAwKTstLWNsci1mb3Jtcy12YWxpZC10ZXh0LWNvbG9yOnZhcigtLWNsci1jb2xvci1zdWNjZXNzLTkwMCk7LS1jbHItZm9ybXMtc3VidGV4''@;'; put 'put ''dC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yOiM2YTdhODE7LS1jbHItZm9ybXMtZm9jdXNlZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItZm9ybXMtc3VidGV4dC1kaXNhYmxlZC1jb2xvcjojOGM4YzhjOy0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xvcjojYjNiM2IzOy0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3I6I2IzYjNiMzstLWNsci1mb3Jt''@;'; put 'put ''cy1sYWJlbC1kaXNhYmxlZC1jb2xvcjojOGM4YzhjOy0tY2xyLWZvcm1zLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1ib2xkKTstLWNsci1mb3Jtcy1ibG9jay1sYWJlbC1mb250LXdlaWdodDo0MDA7LS1jbHItZm9ybXMtdGV4dC1mb250LXdlaWdodDo0MDA7LS1j''@;'; put 'put ''bHItZm9ybXMtdGV4dGFyZWEtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1mb3Jtcy10ZXh0YXJlYS1mb2N1c2VkLW91dGxpbmU6MCAwIC4xcmVtIC4xcmVtICM2OWMwZTI7LS1jbHItZm9ybXMtdGV4dGFyZWEtaW52YWxpZC1mb2N1c2VkLW91dGxp''@;'; put 'put ''bmU6MCAwIC4xcmVtIC4xcmVtICNmZjc0NWM7LS1jbHItZm9ybXMtc2VsZWN0LWhvdmVyLWJhY2tncm91bmQ6cmdiYSggMjIyLCAyMjIsIDIyMiwgLjUgKTstLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci1mb3Jt''@;'; put 'put ''cy1zZWxlY3QtY2FyZXQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTAwKTstLWNsci1mb3Jtcy1zZWxlY3Qtb3B0aW9uLWNvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWNvbG9yKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtdGV4dGFyZWEtYmFja2dyb3VuZC1jb2xvcik7LS1jbHItZm9ybXMtc2VsZWN0LW11bHRpcGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1vcHRpb24tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQt''@;'; put 'put ''Y29sb3IpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1lcnJvci1mb2N1cy1jb2xvcjojZmY3NDVjOy0tY2xyLWZvcm1zLWNoZWNrYm94LWxhYmVsLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1jb2xvcik7LS1jbHItZm9ybXMtY2hlY2tib3gtYmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItZm9ybXMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDApOy0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHIt''@;'; put 'put ''Zm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1tYXJrLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLWZvcm1z''@;'; put 'put ''LWNoZWNrYm94LWJvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWNoZWNrZWQtc2hhZG93Omluc2V0IDAgMCAwIC4zcmVtIHZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1mb3Jtcy1y''@;'; put 'put ''YWRpby1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtbGFiZWwtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1tYXJrLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1tYXJrLWNvbG9yKTstLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3c6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWNoZWNrZWQtc2hhZG93KTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1zaGFkb3c6aW5zZXQgMCAw''@;'; put 'put ''IDAgLjZyZW0gI2U4ZThlODstLWNsci1mb3Jtcy1yYWRpby1mb2N1c2VkLXNoYWRvdzowIDAgLjFyZW0gLjFyZW0gIzY5YzBlMjstLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwKTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApfS5jbHItZGF0ZS1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDotbW96LWZpdC1jb250ZW50O21heC13aWR0aDpmaXQtY29udGVudH0uY2xyLWZvcm0tY29udHJvbHttYXJnaW4tdG9wOjEuMnJlbTtkaXNwbGF5''@;'; put 'put ''OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mb3JtLWNvbnRyb2wgaW5wdXQ6Oi1tcy1yZXZlYWwsLmNsci1mb3JtLWNvbnRyb2wgaW5wdXQ6Oi1tcy1jbGVhcntkaXNwbGF5Om5vbmV9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWR7Y29s''@;'; put 'put ''b3I6I2IzYjNiMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgbGFiZWwsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jb250cm9sLWxhYmVse2NvbG9yOiM4YzhjOGM7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yLCAjOGM4YzhjKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWlucHV0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItdGV4dGFyZWEsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3R7Y29s''@;'; put 'put ''b3I6I2IzYjNiMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYjNiM2IzO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyl9LmNsci1m''@;'; put 'put ''b3JtLWNvbnRyb2wtZGlzYWJsZWQgaW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2IzYjNiMztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3IsICNiM2IzYjMpfS5jbHItZm9ybS1jb250''@;'; put 'put ''cm9sLWRpc2FibGVkIC5jbHItc3VidGV4dHtjb2xvcjojOGM4YzhjO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zdWJ0ZXh0LWRpc2FibGVkLWNvbG9yLCAjOGM4YzhjKX0uY2xyLWZvcm0tY29udHJvbC1tdWx0aXtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXB9LmNsci1mb3JtLWNv''@;'; put 'put ''bnRyb2wtbXVsdGkgLmNsci1jb250cm9sLWxhYmVse3dpZHRoOjEwMCV9LmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6YmxvY2s7Y29sb3I6IzQ1NDU0NTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IsICM0NTQ1NDUpO2ZvbnQtc2l6ZTouNjVyZW07Zm9udC13ZWlnaHQ6NjAw''@;'; put 'put ''O2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb3Jtcy1sYWJlbC1mb250LXdlaWdodCwgNjAwKTtsaW5lLWhlaWdodDouOXJlbX0uY2xyLWNvbnRyb2wtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItY29udHJvbC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2Fs''@;'; put 'put ''aWduLWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6LjZyZW07d2lkdGg6YXV0b30uY2xyLXN1YnRleHR7ZGlzcGxheTpibG9jaztmb250LXNpemU6LjU1cmVtO2xpbmUtaGVp''@;'; put 'put ''Z2h0Oi42cmVtO2NvbG9yOiM4YzhjOGM7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3IsICM4YzhjOGMpO21hcmdpbi10b3A6LjNyZW19LmNsci1zdWJ0ZXh0LXdyYXBwZXJ7ZmxleC1iYXNpczoxMDAlO2Rpc3BsYXk6ZmxleH0uY2xyLXZhbGlkYXRlLWljb257aGVpZ2h0OjEu''@;'; put 'put ''MnJlbTt3aWR0aDoxLjJyZW07bWluLWhlaWdodDoxLjJyZW07bWluLXdpZHRoOjEuMnJlbTtjb2xvcjojYzIxZDAwO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjYzIxZDAwKTtmaWxsOiNjMjFkMDA7ZmlsbDp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2My''@;'; put 'put ''MWQwMCk7ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0Oi0xLjJyZW19LmNsci1zdWNjZXNzIC5jbHItaW5wdXR7Ym9yZGVyLWJvdHRvbS1jb2xvcjojM2M4NTAwO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yLCAjM2M4NTAwKX0uY2xyLXN1Y2Nlc3MgLmNs''@;'; put 'put ''ci12YWxpZGF0ZS1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiMzYzg1MDA7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yLCAjM2M4NTAwKTtmaWxsOiMzYzg1MDA7ZmlsbDp2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IsICMzYzg1MDApO21hcmdpbi1sZWZ0Oi0u''@;'; put 'put ''MnJlbX0uY2xyLXN1Y2Nlc3MgLmNsci1zdWJ0ZXh0e2NvbG9yOiMyNTUyMDA7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLXRleHQtY29sb3IsICMyNTUyMDApfS5jbHItZXJyb3IgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0Oi0uMnJlbTtkaXNwbGF5OmlubGluZS1ibG9ja30u''@;'; put 'put ''Y2xyLWVycm9yIC5jbHItc3VidGV4dHtjb2xvcjojYzIxZDAwO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjYzIxZDAwKX0uY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZvcm0tY29udHJvbD4uY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1mb3JtLWhvcml6b250YWwgLmNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2w+LmNsci1mb3JtLWNvbnRyb2wuY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6OS42cmVtO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXRvcDouMTVyZW19LmNsci1mb3JtLWhvcml6b250YWwuY2xyLXJvdyAuY2xyLWNvbnRyb2wtbGFi''@;'; put 'put ''ZWx7d2lkdGg6YXV0b30uY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZvcm0tY29udHJvbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sPi5jbHItY29udHJvbC1sYWJlbHt3aWR0aDo5LjZyZW07bWluLXdpZHRoOjku''@;'; put 'put ''NnJlbX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbC5jbHItcm93Pi5jbHItY29udHJvbC1sYWJlbHt3aWR0aDphdXRvO21pbi13aWR0aDphdXRvfS5jbHItZm9ybS1jb21wYWN0IC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOi4xNXJlbX0uY2xyLWZvcm0tY29tcGFj''@;'; put 'put ''dCAuY2xyLWZvcm0tY29udHJvbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi10b3A6LjZyZW19LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmZsZXh9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWJsb2NrO21hcmdpbi10b3A6LjNyZW07bWFyZ2luLWxlZnQ6MS4ycmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZXJyb3IgLmNsci1zdWJ0ZXh0LC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHQsLmNsci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xy''@;'; put 'put ''LXZhbGlkYXRlLWljb24sLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dC13cmFwcGVye2ZsZXgtYmFzaXM6YXV0bztkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm0s''@;'; put 'put ''LmNsci1mb3JtLWdyb3Vwe3BhZGRpbmc6LjNyZW19LmNsci1yZXF1aXJlZC1tYXJrOmFmdGVye2NvbnRlbnQ6IioiO2NvbG9yOiNjMjFkMDA7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IsICNjMjFkMDApO2ZpbGw6I2MyMWQwMDtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZh''@;'; put 'put ''bGlkLWNvbG9yLCAjYzIxZDAwKTtmb250LXNpemU6LjY1cmVtO21hcmdpbi1sZWZ0Oi4zcmVtfS5jbHItY2hlY2tib3gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXh9LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7''@;'; put 'put ''ZGlzcGxheTpibG9ja30uY2xyLWNoZWNrYm94LXdyYXBwZXJ+LmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OjB9LmNsci1jaGVja2JveC13cmFwcGVyfi5jbHItc3VidGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWNoZWNrYm94LXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVs''@;'; put 'put ''e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWluLWhlaWdodDoxLjJyZW07cGFkZGluZy1sZWZ0OjEuMXJlbTttYXJnaW4tdG9wOjA7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6MS4ycmVtO2NvbG9yOiM0NTQ1NDU7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWxh''@;'; put 'put ''YmVsLWNvbG9yLCAjNDU0NTQ1KX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RvcDouMjVyZW07bGVmdDowO2hlaWdodDouOHJlbTt3aWR0aDouOHJlbX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjJyZW07bGVmdDowO2NvbnRlbnQ6IiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtO2JvcmRlcjouMDVyZW0gc29saWQ7Ym9yZGVyLWNvbG9yOiM2''@;'; put 'put ''YTdhODE7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IsICM2YTdhODEpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXMsIC4xNXJlbSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmZvY3VzKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmV7b3V0bGluZTpIaWdobGlnaHQgc29saWQgLjFyZW07b3V0bGluZTotd2Via2l0LWZvY3VzLXJpbmctY29sb3Igc29saWQgLjFyZW07b3V0bGluZS1vZmZzZXQ6LjA1cmVtfS5jbHItY2hlY2tib3gtd3Jh''@;'; put 'put ''cHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtkaXNwbGF5Om5vbmU7aGVpZ2h0Oi4yNXJlbTt3aWR0aDouNHJlbTtib3JkZXItbGVmdDouMXJlbSBzb2xpZDtib3JkZXItYm90dG9tOi4xcmVtIHNv''@;'; put 'put ''bGlkO2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtbWFyay1jb2xvciwgd2hpdGUpO3RvcDouMnJlbTtsZWZ0Oi4ycmVtO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC4ycmVtKSByb3RhdGUoLTQ1ZGVnKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle2JhY2tncm91bmQ6IzAwNzJhMztiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yLCAjMDA3MmEzKTtib3JkZXI6MH0uY2xyLWNoZWNrYm94LXdyYXBw''@;'; put 'put ''ZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmUs''@;'; put 'put ''LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGUrLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZXtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojMDA3MmEzO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtaW5k''@;'; put 'put ''ZXRlcm1pbmF0ZS1ib3JkZXItY29sb3IsICMwMDcyYTMpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZSsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXIsLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmlu''@;'; put 'put ''ZGV0ZXJtaW5hdGUrLmNsci1jb250cm9sLWxhYmVsOmFmdGVye2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDA3MmEzO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yLCAjMDA3MmEzKTtk''@;'; put 'put ''aXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06dHJhbnNsYXRlWSguMnJlbSl9LmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWNoZWNrYm94LXdyYXBwZXIu''@;'; put 'put ''Y2xyLWNoZWNrYm94LWlubGluZSAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0Oi42cmVtO3dpZHRoOmF1dG99LmNsci1lcnJvciAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmJl''@;'; put 'put ''Zm9yZXtib3JkZXItY29sb3I6I2MyMWQwMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IsICNjMjFkMDApfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2Vk''@;'; put 'put ''O2NvbG9yOiM4YzhjOGM7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yLCAjOGM4YzhjKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZSwu''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2Jv''@;'; put 'put ''eC1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yLCAjY2NjY2NjKTtib3JkZXI6MH0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXJ7Ym9yZGVyLWxlZnQ6LjFy''@;'; put 'put ''ZW0gc29saWQ7Ym9yZGVyLWJvdHRvbTouMXJlbSBzb2xpZDtib3JkZXItbGVmdC1jb2xvcjojMDAwO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1tYXJrLWNvbG9yLCBibGFjayk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDAwO2JvcmRlci1ib3R0''@;'; put 'put ''b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLW1hcmstY29sb3IsIGJsYWNrKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZC5jbHItaW5kZXRlcm1pbmF0ZSsuY2xyLWNv''@;'; put 'put ''bnRyb2wtbGFiZWw6YWZ0ZXIsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aW5kZXRlcm1pbmF0ZSsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXJ7Ym9yZGVyLWxlZnQ6bm9uZX0uY2xyLWZvcm0tY29t''@;'; put 'put ''cGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydDtoZWlnaHQ6MS4ycmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItY2hlY2tib3gtd3JhcHBlcn4uY2xyLXN1YnRleHR7bWFy''@;'; put 'put ''Z2luLWxlZnQ6LjNyZW19LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6LjZyZW07d2lkdGg6YXV0b30uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXIg''@;'; put 'put ''LmNsci1jb250cm9sLWxhYmVse21hcmdpbi10b3A6MH0uY2xyLWZpbGUtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOi4zcmVtfS5jbHItZmlsZS13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpibG9ja30uY2xyLWZpbGUtd3Jh''@;'; put 'put ''cHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1maWxlLXdyYXBwZXIgLmJ0bnttYXJnaW46MH0uY2xyLWZpbGV7aGVpZ2h0OjA7d2lkdGg6MDtvcGFjaXR5OjA7b3ZlcmZs''@;'; put 'put ''b3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTF9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4tbGVmdDou''@;'; put 'put ''M3JlbX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bGluZS1oZWlnaHQ6MS4ycmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4dHtsaW5lLWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDowfS5jbHIt''@;'; put 'put ''Zm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjA7bGluZS1oZWlnaHQ6MS4wOHJlbX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtd3JhcHBlciAuYnRue2hlaWdodDoxLjJyZW19LmNsci1pbnB1dC13cmFwcGVye3doaXRlLXNw''@;'; put 'put ''YWNlOm5vd3JhcDttYXgtaGVpZ2h0OjEuMnJlbX0uY2xyLWlucHV0ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVz''@;'; put 'put ''OjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDoxLjJyZW07Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvciwgYmxhY2spO2JvcmRlci1ib3R0b206LjA1cmVtIHNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6IzZhN2E4MTtib3JkZXItYm90''@;'; put 'put ''dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IsICM2YTdhODEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAuM3JlbTttYXgtaGVpZ2h0OjEuMnJlbTtmb250LXNpemU6LjY1cmVtfS5jbHItaW5wdXQ6Zm9jdXN7b3V0bGluZTowfS5jbHItaW5wdXRbcmVhZG9u''@;'; put 'put ''bHlde2JvcmRlcjowfS5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IsICMwMDcyYTMpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTow''@;'; put 'put ''IDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3Vze2JvcmRlci1ib3R0b20tY29sb3I6IzAwNzJhMztib3JkZXItYm90dG9tLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yLCAjMDA3MmEzKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItaW5wdXQ6ZGlzYWJsZWR7Y29sb3I6I2IzYjNiMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyk7Y3Vyc29yOm5vdC1hbGxvd2Vk''@;'; put 'put ''fS5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSl7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYzIxZDAwO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IsICNjMjFkMDApO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0''@;'; put 'put ''cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IsICNjMjFkMDApIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1lcnJvciAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHld''@;'; put 'put ''KTpmb2N1cywuY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1c3tib3JkZXItYm90dG9tLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCk7YmFja2dyb3VuZC1zaXplOjEwMCUg''@;'; put 'put ''MTAwJX0uY2xyLWZvcm0tY29udHJvbC5yb3cgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpjYWxjKDEwMCUgLSAxLjJyZW0pfS5jbHItZm9ybS1jb21wYWN0IC5jbHItaW5wdXR7bWF4LXdpZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1pbnB1dH4uY2xyLXN1YnRleHR7bWFy''@;'; put 'put ''Z2luLWxlZnQ6LjNyZW19LmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dHtib3JkZXI6MH0uY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWlucHV0e21heC13aWR0aDpjYWxjKDEwMCUgKyAxLjJyZW0pfTo6cGxhY2Vob2xkZXJ7Y29sb3I6IzRmNjE2OTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtcGxhY2Vob2xkZXItY29sb3IsICM0ZjYxNjkpfS5jbHItaW5wdXQtZ3JvdXB7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvciwgYmxhY2spO2JvcmRlci1ib3R0b206LjA1cmVtIHNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6IzZhN2E4MTti''@;'; put 'put ''b3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IsICM2YTdhODEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IsICMw''@;'; put 'put ''MDcyYTMpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2U7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OjEuMnJlbX0uY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3Vze2JvcmRl''@;'; put 'put ''ci1ib3R0b20tY29sb3I6IzAwNzJhMztib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yLCAjMDA3MmEzKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3Vze3dpZHRoOmF1dG99LmNsci1pbnB1dC1ncm91cCAu''@;'; put 'put ''Y2xyLWlucHV0e2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO21hcmdpbi1yaWdodDowO21heC13aWR0aDoxMDAlfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXN7YmFja2dyb3VuZC1zaXplOjA7Ym9yZGVyOjB9LmNsci1pbnB1dC1ncm91cCBzZWxlY3Qs''@;'; put 'put ''LmNsci1pbnB1dC1ncm91cCAuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCwuY2xyLWlucHV0LWdyb3VwIC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3R7Ym9yZGVyOjB9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWFkZG9ue2NvbG9yOiM4YzhjOGM7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3IsICM4YzhjOGMpfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZHtwYWRkaW5nOjAgMCAwIC40NXJlbX0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZHtwYWRk''@;'; put 'put ''aW5nOjAgLjQ1cmVtIDAgMH0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzow''@;'; put 'put ''O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6IzAwNzJhMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvciwgIzAwNzJhMyk7cGFkZGluZzowIC40NXJlbX1idXR0b24uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5w''@;'; put 'put ''dXQtZ3JvdXAtaWNvbi1hY3Rpb257Y3Vyc29yOnBvaW50ZXJ9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIGNkcy1pY29uLC5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6LjlyZW07d2lkdGg6''@;'; put 'put ''LjlyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSgtLjA1cmVtLC0uMDVyZW0pfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb257Y29sb3I6I2IzYjNiMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyk7''@;'; put 'put ''Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91cHtib3JkZXItYm90dG9tLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8g''@;'; put 'put ''Ym90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCkgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLWVycm9yIC5jbHItaW5wdXQtZ3JvdXA6''@;'; put 'put ''Zm9jdXMsLmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwLmNsci1mb2N1c3tib3JkZXItYm90dG9tLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCk7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLWZv''@;'; put 'put ''cm0taG9yaXpvbnRhbCAuY2xyLWlucHV0LWdyb3Vwe21heC13aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2xpbmUtaGVpZ2h0OjEuMnJlbX0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxh''@;'; put 'put ''YmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItcmFkaW8td3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXXtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7dG9wOi4yNXJlbTtsZWZ0OjA7aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtfS5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazttaW4taGVpZ2h0OjEu''@;'; put 'put ''MnJlbTtwYWRkaW5nLWxlZnQ6MS4xcmVtO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDoxLjJyZW07Y29sb3I6IzQ1NDU0NTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtY29sb3IsICM0NTQ1NDUpfS5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRy''@;'; put 'put ''b2wtbGFiZWw6ZW1wdHl7cGFkZGluZy1sZWZ0OjB9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOi4ycmVtO2xlZnQ6MDtjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdo''@;'; put 'put ''dDouOHJlbTt3aWR0aDouOHJlbTtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojNmE3YTgxO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yLCAjNmE3YTgxKTtib3JkZXItcmFkaXVzOjUwJX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgLjNyZW0gIzAwNzJhMztib3gtc2hhZG93OnZhcigtLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3csIGluc2V0IDAgMCAwIC4zcmVtICMwMDcyYTMpO2JvcmRlcjowfS5jbHIt''@;'; put 'put ''cmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1cysuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle291dGxpbmU6SGlnaGxpZ2h0IHNvbGlkIC4xcmVtO291dGxpbmU6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yIHNvbGlkIC4xcmVtO291dGxpbmUtb2Zmc2V0Oi4wNXJlbX0uY2xy''@;'; put 'put ''LXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Zm9jdXM6Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle291dGxpbmU6SGlnaGxpZ2h0IHNvbGlkIC4xcmVtO291dGxpbmU6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yIHNvbGlkIC4xcmVtO291dGxpbmUtb2Zmc2V0Oi4w''@;'; put 'put ''NXJlbX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106ZGlzYWJsZWQrLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZXtib3JkZXI6MDtib3gtc2hhZG93Omluc2V0IDAgMCAwIC42cmVtICNlOGU4ZTg7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tZGlzYWJsZWQt''@;'; put 'put ''c2hhZG93LCBpbnNldCAwIDAgMCAuNnJlbSAjZThlOGU4KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpkaXNhYmxlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzY2NjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1m''@;'; put 'put ''b3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yLCAjNjY2NjY2KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIC4zcmVtICNlOGU4ZTg7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tY2hlY2tlZC1kaXNhYmxlZC1zaGFkb3csIGluc2V0IDAgMCAwIC4zcmVtICNlOGU4''@;'; put 'put ''ZTgpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItZXJyb3IgLmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmV7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjYzIxZDAwKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dHttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItcmFkaW8td3JhcHBlcntt''@;'; put 'put ''YXgtd2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0O2hlaWdodDoxLjJyZW19LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4tbGVmdDouM3JlbX0uY2xyLWZvcm0tY29tcGFj''@;'; put 'put ''dCAuY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDouNnJlbTt3aWR0aDphdXRvfS5jbHItZm9ybS1jb21wYWN0IC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDowfS5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXIsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO3doaXRlLXNwYWNlOm5vd3JhcH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3ot''@;'; put 'put ''YXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDoxLjJyZW07Y29sb3I6IzAwMDtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtdGV4dC1jb2xvciwgYmxhY2spO2JvcmRlci1ib3R0b206LjA1cmVtIHNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6IzZhN2E4MTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IsICM2YTdhODEpO2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''O3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MCAxLjFyZW0gMCAuM3JlbTtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6LjY1cmVtO3otaW5kZXg6Mn0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmZvY3Vze291dGxpbmU6''@;'; put 'put ''MH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSksLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtZm9j''@;'; put 'put ''dXNlZC1jb2xvciwgIzAwNzJhMykgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zZWxlY3Qtd3JhcHBlciBz''@;'; put 'put ''ZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKS5jbHItZm9jdXN7Ym9yZGVyLWJvdHRvbS1jb2xvcjoj''@;'; put 'put ''MDA3MmEzO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IsICMwMDcyYTMpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3RbbXVsdGlwbGVdOmZvY3VzLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxl''@;'; put 'put ''Y3RbbXVsdGlwbGVdOmZvY3Vze291dGxpbmU6SGlnaGxpZ2h0IGF1dG8gLjFyZW07b3V0bGluZTotd2Via2l0LWZvY3VzLXJpbmctY29sb3IgYXV0byAuMXJlbX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmUsLmNsci1t''@;'; put 'put ''dWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6I2RlZGVkZTgwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWhvdmVyLWJhY2tncm91bmQsIHJnYmEoMjIyLCAyMjIsIDIy''@;'; put 'put ''MiwgLjUpKTtiYWNrZ3JvdW5kOnJnYmEoMjIyLDIyMiwyMjIsLjUpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kLCByZ2JhKDIyMiwgMjIyLCAyMjIsIC41KSl9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9uLC5jbHIt''@;'; put 'put ''bXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9ue2NvbG9yOiNiM2IzYjM7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3IsICNiM2IzYjMpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb24sLmNs''@;'; put 'put ''ci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb257Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LW9wdGlvbi1jb2xvciwgYmxhY2spfS5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0OjotbXMtZXhwYW5kLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxl''@;'; put 'put ''Y3Q6Oi1tcy1leHBhbmR7ZGlzcGxheTpub25lfS5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDoxLjJyZW07ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2hlaWdodDouNXJlbTt3aWR0aDouNXJl''@;'; put 'put ''bTt0b3A6LjM1cmVtO3JpZ2h0Oi4zcmVtO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMiUy''@;'; put 'put ''MDEyJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3N0eWxlJTNFLmNscy0xJTdCZmlsbCUzQSUyM2IzYjNiMyUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3Rp''@;'; put 'put ''dGxlJTNFQ2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAl''@;'; put 'put ''MkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46MH0uY2xyLXNlbGVjdC13cmFwcGVyOmhvdmVyOmFmdGVye2JhY2tn''@;'; put 'put ''cm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMiUyMDEyJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVm''@;'; put 'put ''cyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3N0eWxlJTNFLmNscy0xJTdCZmlsbCUzQSUyMzhjOGM4YyUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFQ2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUz''@;'; put 'put ''QyUyRnN2ZyUzRSUwQSl9LmNsci1lcnJvciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVyLC5jbHItc3VjY2VzcyAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3JpZ2h0OjEuNXJlbX0uY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5jbHItbXVsdGlzZWxlY3Qtd3JhcHBl''@;'; put 'put ''ciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH1zZWxlY3RbbXVsdGlwbGVdLHNlbGVjdFtzaXplXXtwYWRkaW5nOjA7YmFja2dyb3VuZDojZmZmO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yLCB3aGl0ZSk7Ym9yZGVy''@;'; put 'put ''Oi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMs''@;'; put 'put ''IC4xNXJlbSk7aGVpZ2h0OmF1dG87bWluLXdpZHRoOjZyZW19c2VsZWN0W211bHRpcGxlXTpob3ZlcixzZWxlY3RbbXVsdGlwbGVdOmFjdGl2ZSxzZWxlY3Rbc2l6ZV06aG92ZXIsc2VsZWN0W3NpemVdOmFjdGl2ZXtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''c2VsZWN0LW11bHRpcGxlLWJhY2tncm91bmQtY29sb3IsIHdoaXRlKTtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpfXNlbGVjdFttdWx0aXBsZV0gb3B0aW9uLHNlbGVjdFtzaXplXSBv''@;'; put 'put ''cHRpb257cGFkZGluZzouMTVyZW0gLjNyZW07Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LW11bHRpcGxlLW9wdGlvbi1jb2xvciwgYmxhY2spfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOiNjMjFkMDA7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCl9LmNsci1lcnJvciBzZWxlY3RbbXVsdGlwbGVde2JvcmRlci1jb2xvcjojYzIxZDAwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCl9LmNsci1mb3Jt''@;'; put 'put ''LWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWR7Y29sb3I6I2IzYjNiMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyk7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0LmRp''@;'; put 'put ''c2FibGVkOmhvdmVyOmFmdGVye2NvbG9yOiNiM2IzYjM7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvciwgI2IzYjNiMyl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVk''@;'; put 'put ''IC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZHtjb2xvcjojYjNiM2IzO2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yLCAjYjNiM2IzKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2Vs''@;'; put 'put ''ZWN0OmhvdmVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6IzZhN2E4MTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvciwgIzZhN2E4MSl9LmNsci1m''@;'; put 'put ''b3JtLWNvbXBhY3QgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVye21hcmdpbi10b3A6MH0uY2xyLXRleHRhcmVhLXdyYXBwZXJ7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOi4zcmVtfS5jbHItdGV4dGFyZWEtd3JhcHBlciAuY2xyLXZhbGlkYXRlLWljb257bWFy''@;'; put 'put ''Z2luLWxlZnQ6MH0uY2xyLXRleHRhcmVhe21heC13aWR0aDpjYWxjKDEwMCUgLSAuM3JlbSk7aGVpZ2h0OmF1dG87cmVzaXplOnZlcnRpY2FsO2JhY2tncm91bmQ6I2ZmZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yLCB3aGl0ZSk7Ym9yZGVy''@;'; put 'put ''Oi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzZhN2E4MTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvciwgIzZhN2E4MSk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvciwgYmxhY2spO2JvcmRlci1yYWRpdXM6LjE1cmVtO3BhZGRp''@;'; put 'put ''bmc6LjRyZW0gLjZyZW07Zm9udC1zaXplOi42NXJlbX0uY2xyLXRleHRhcmVhOmZvY3Vze291dGxpbmU6SGlnaGxpZ2h0IGF1dG8gLjFyZW07b3V0bGluZTotd2Via2l0LWZvY3VzLXJpbmctY29sb3IgYXV0byAuMXJlbX0uY2xyLXRleHRhcmVhOmRpc2FibGVke2NvbG9yOiNiM2IzYjM7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3IsICNiM2IzYjMpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWVycm9yIC5jbHItdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjYzIxZDAw''@;'; put 'put ''KX0uY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbnRyb2wucm93IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXgtd2lkdGg6Y2FsYygxMDAlIC0gLjNyZW0pfS5jbHItZm9ybS1jb21wYWN0IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4t''@;'; put 'put ''dG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF7bWF4LXdpZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0Oi4zcmVtfTpyb290''@;'; put 'put ''ey0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vZmY6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci10b2dnbGUtYmctY29sb3Itb246dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTAwKTstLWNsci10b2dnbGUtaGFuZGxlLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTUw''@;'; put 'put ''KTstLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKTstLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1oYW5kbGUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItdG9nZ2xlLWRpc2FibGVk''@;'; put 'put ''LW9mZi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtaGFuZGxlLWNvbG9yKTstLWNsci10b2dnbGUtZGlz''@;'; put 'put ''YWJsZWQtb2ZmLWhhbmRsZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTst''@;'; put 'put ''LWNsci10b2dnbGUtZGlzYWJsZWQtb24tYmctY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRs''@;'; put 'put ''ZS1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0uY2xyLXRvZ2dsZS13cmFwcGVye2hlaWdodDoxLjJy''@;'; put 'put ''ZW07dmVydGljYWwtYWxpZ246bWlkZGxlO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXJpZ2h0Oi42cmVtfS5jbHItdG9nZ2xlLXdyYXBwZXIgbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjEu''@;'; put 'put ''MnJlbTttYXJnaW4tbGVmdDoyLjFyZW07bWFyZ2luLXJpZ2h0OjB9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjNyZW07cmlnaHQ6LjNyZW07aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtO29wYWNpdHk6MH0uY2xyLXRvZ2ds''@;'; put 'put ''ZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2hlaWdodDouOXJlbTt3aWR0aDoxLjY1cmVtO2JvcmRlcjouMXJlbSBzb2xpZDtib3JkZXItcmFkaXVzOi40NXJlbTtib3Jk''@;'; put 'put ''ZXItY29sb3I6IzhjOGM4Yztib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vZmYsICM4YzhjOGMpO2JhY2tncm91bmQtY29sb3I6IzhjOGM4YztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb2ZmLCAjOGM4YzhjKTt0b3A6LjE1cmVtO3Jp''@;'; put 'put ''Z2h0OjA7bGVmdDotMi4xcmVtO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpmb2N1cytsYWJlbDpiZWZvcmV7b3V0bGluZTpIaWdobGlnaHQgc29saWQgLjFyZW07b3V0bGluZTotd2Via2l0LWZvY3VzLXJpbmctY29sb3Igc29saWQgLjFyZW07b3V0bGluZS1vZmZzZXQ6LjA1cmVtfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiM1YWEyMjA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb24sICM1YWEyMjApO2JhY2tncm91bmQtY29sb3I6IzVhYTIyMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb24sICM1''@;'; put 'put ''YWEyMjApO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDph''@;'; put 'put ''ZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2hlaWdodDouN3JlbTt3aWR0aDouN3JlbTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci1jb2xvcjojZmFmYWZhO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWhhbmRsZS1iZy1jb2xv''@;'; put 'put ''ciwgI2ZhZmFmYSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJnLWNvbG9yLCAjZmFmYWZhKTt0b3A6LjI1cmVtO3JpZ2h0OjA7bGVmdDotMnJlbTt0''@;'; put 'put ''cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnR9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmFmdGVye3JpZ2h0Oi0ycmVtO2xl''@;'; put 'put ''ZnQ6LTEuMjVyZW07dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpyaWdodCxsZWZ0fS5jbHItdG9nZ2xlLXdyYXBwZXIuZGlzYWJsZWQgbGFiZWx7b3BhY2l0eTouNDtjdXJzb3I6bm90LWFsbG93''@;'; put 'put ''ZWR9LmNsci10b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmJlZm9yZXtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb24tYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRv''@;'; put 'put ''Z2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci1jb2xvcjojY2NjO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1ib3JkZXItY29sb3IsICNjY2NjY2MpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQrbGFiZWw6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3IsIHdoaXRlKTtib3JkZXItd2lkdGg6LjFyZW07Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1oYW5kbGUtYm9yZGVyLWNvbG9yLCAj''@;'; put 'put ''Y2NjY2NjKTtoZWlnaHQ6LjlyZW07d2lkdGg6LjlyZW07dG9wOi4xNXJlbX0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6ZGlzYWJsZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRp''@;'; put 'put ''c2FibGVkLW9uLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvciwgI2NjY2NjYyl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmRpc2FibGVkK2xhYmVsOmFmdGVye2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3IsIHdoaXRlKTtoZWlnaHQ6LjdyZW07d2lkdGg6LjdyZW07dG9wOi4yNXJlbTtsZWZ0Oi0xLjI1cmVtfS5j''@;'; put 'put ''bHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQrbGFiZWw6YWZ0ZXJ7bGVmdDotMi4xcmVtfS5jbHItdG9nZ2xlLXdyYXBwZXIucmlnaHQtbGFiZWwgbGFiZWx7bWFyZ2luLWxlZnQ6Mi4xcmVtO21hcmdpbi1yaWdodDowfS5jbHItdG9nZ2xlLXdyYXBwZXIu''@;'; put 'put ''cmlnaHQtbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3Jle3JpZ2h0OjA7bGVmdDotMi4xcmVtfS5jbHItdG9nZ2xlLXdyYXBwZXIucmlnaHQtbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXJ7cmlnaHQ6MDtsZWZ0Oi0ycmVtO3RyYW5zaXRpb24tcHJv''@;'; put 'put ''cGVydHk6bGVmdH0uY2xyLXRvZ2dsZS13cmFwcGVyLnJpZ2h0LWxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YWZ0ZXJ7bGVmdDotMS4yNXJlbTt0cmFuc2l0aW9uLXByb3BlcnR5OmxlZnR9LmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlz''@;'; put 'put ''cGxheTpibG9jaztmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4ycmVtfS5jbHItY29udHJvbC1pbmxpbmUgLmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0Oi42cmVtfS5jbHItdG9nZ2xlLXJpZ2h0IGxh''@;'; put 'put ''YmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoyLjFyZW07bWFyZ2luLWxlZnQ6MH0uY2xyLXRvZ2dsZS1yaWdodCBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDpiZWZvcmV7bGVmdDp1bnNldDtyaWdodDotMi4xcmVtfS5jbHItdG9nZ2xlLXJpZ2h0IGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdK2xhYmVsOmFmdGVye2xlZnQ6dW5zZXQ7cmlnaHQ6LTEuMjVyZW07dHJhbnNpdGlvbi1wcm9wZXJ0eTpyaWdodH0uY2xyLXRvZ2dsZS1yaWdodCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmFmdGVye2xlZnQ6dW5zZXQ7cmlnaHQ6LTJyZW07dHJhbnNpdGlv''@;'; put 'put ''bi1wcm9wZXJ0eTpyaWdodH0uY2xyLXRvZ2dsZS1yaWdodCBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZCtsYWJlbDphZnRlcntsZWZ0OnVuc2V0O3JpZ2h0Oi0xLjNyZW19LmNsci10b2dnbGUtcmlnaHQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpkaXNhYmxlZCtsYWJlbDph''@;'; put 'put ''ZnRlcntsZWZ0OnVuc2V0O3JpZ2h0Oi0ycmVtfS5jbHItdG9nZ2xlLXJpZ2h0IC5jbHItY29udHJvbC1pbmxpbmUgLmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXJpZ2h0OjIuN3JlbX0uY2xyLXJhbmdlLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlz''@;'; put 'put ''cGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDouN3JlbTt3aGl0ZS1zcGFjZTpub3dyYXB9LmNsci1yYW5nZS13cmFwcGVyIC5maWxsLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtkaXNwbGF5OmlubGluZS1ibG9j''@;'; put 'put ''aztoZWlnaHQ6LjJyZW07cG9pbnRlci1ldmVudHM6bm9uZTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjEwO2JhY2tncm91bmQtY29sb3I6IzAwNzJhMztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLCAjMDA3MmEzKX0uY2xyLXJhbmdl''@;'; put 'put ''e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDouN3JlbX0uY2xyLXJhbmdlOmRpc2FibGVkLC5jbHItcmFuZ2U6ZGlzYWJsZWQrLmZpbGwtaW5wdXR7cG9pbnRlci1ldmVudHM6YXV0bztjdXJzb3I6bm90LWFsbG93ZWR9aW5w''@;'; put 'put ''dXRbdHlwZT1yYW5nZV17cGFkZGluZzowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6LjJyZW07YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yLCAjZThlOGU4KX1pbnB1dFt0eXBl''@;'; put 'put ''PXJhbmdlXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0Oi4ycmVtO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1jb2xvciwgI2U4ZThlOCl9aW5wdXRbdHlwZT1y''@;'; put 'put ''YW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbi10b3A6LS4yNXJlbTtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6LjdyZW07d2lkdGg6LjdyZW07YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IsICMwMDcyYTMpfWlucHV0W3R5cGU9cmFuZ2VdOjotbW96LXJhbmdlLXRyYWNre2hlaWdodDouMnJlbTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''cmFuZ2UtdHJhY2stY29sb3IsICNlOGU4ZTgpfWlucHV0W3R5cGU9cmFuZ2VdOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjowO21hcmdpbi10b3A6LS4yNXJlbTtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6LjdyZW07d2lkdGg6LjdyZW07YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IsICMwMDcyYTMpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXR7ZGlzcGxheTpub25lfS5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVz''@;'; put 'put ''cy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlcntoZWlnaHQ6LjJyZW07YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IsICMwMDcyYTMpfWlucHV0W3R5cGU9cmFuZ2Vd''@;'; put 'put ''e2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6LjdyZW19aW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFja3ttYXJnaW46MDtib3JkZXI6MDtoZWlnaHQ6LjJyZW07Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yLCAjZThlOGU4KX1pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO21hcmdpbi10b3A6MDtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6LjdyZW07d2lkdGg6LjdyZW07YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjojMDA3MmEzO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IsICMwMDcyYTMpfX1fOi1tcy1mdWxsc2NyZWVuIC5jbHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dCw6cm9vdCAuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5w''@;'; put 'put ''dXR7ZGlzcGxheTpub25lfV86LW1zLWZ1bGxzY3JlZW4gLmNsci1yYW5nZS13cmFwcGVyLnByb2dyZXNzLWZpbGwgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy1maWxsLWxvd2VyLDpyb290IC5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmls''@;'; put 'put ''bC1sb3dlcntoZWlnaHQ6LjJyZW07YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IsICMwMDcyYTMpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10b29sdGlwLDpy''@;'; put 'put ''b290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdG9vbHRpcHt2aXNpYmlsaXR5OmhpZGRlbn1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdLDpyb290IGlucHV0W3R5cGU9cmFuZ2Vde2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWln''@;'; put 'put ''aHQ6LjdyZW19XzotbXMtZnVsbHNjcmVlbiBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRyYWNrLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2t7Ym9yZGVyOjA7bWFyZ2luOjA7aGVpZ2h0Oi4ycmVtO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1jb2xvciwgI2U4ZThlOCl9XzotbXMtZnVsbHNjcmVlbiBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1iLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdGh1bWJ7Ym9yZGVyOjA7bWFyZ2luLXRvcDowO2JvcmRl''@;'; put 'put ''ci1yYWRpdXM6NTAlO2hlaWdodDouN3JlbTt3aWR0aDouN3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDcyYTM7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvciwgIzAwNzJhMyl9aW5wdXRbY2xyRGF0YWxpc3RdOjotd2Via2l0LWNhbGVu''@;'; put 'put ''ZGFyLXBpY2tlci1pbmRpY2F0b3J7ZGlzcGxheTpub25lfWNsci1kYXRhbGlzdC1jb250YWluZXIgLmNsci1pbnB1dC1ncm91cHtwYWRkaW5nLXJpZ2h0OjB9OnJvb3R7LS1jbHItY2FsZW5kYXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1jYWxl''@;'; put 'put ''bmRhci1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKTstLWNsci1kYXRlcGlja2VyLXRyaWdnZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDApOy0tY2xyLWRhdGVwaWNrZXItdHJpZ2dlci1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9u''@;'; put 'put ''LTgwMCk7LS1jbHItY2FsZW5kYXItYnRuLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1ob3Zlci1jb2xvcik7LS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNpemU6Ljly''@;'; put 'put ''ZW07LS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXdlaWdodDoyMDA7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1mb250LXdlaWdodDo2MDA7LS1jbHIt''@;'; put 'put ''Y2FsZW5kYXItYWN0aXZlLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItY2Fs''@;'; put 'put ''ZW5kYXItYWN0aXZlLWNlbGwtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItZGF5LWZvbnQtc2l6ZTouNnJlbX0uZGF0ZS1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRlcGlja2Vy''@;'; put 'put ''LXRyaWdnZXJ7aGVpZ2h0OjEuOHJlbTttaW4td2lkdGg6MS44cmVtO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0p''@;'; put 'put ''O2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2xpbmUtaGVpZ2h0OjEuOHJlbX0uZGF0ZXBpY2tlci10cmlnZ2VyIC5kYXRlcGlja2VyLXRyaWdnZXItaWNvbntmaWxsOiMwMDcyYTM7ZmlsbDp2YXIoLS1jbHItZGF0ZXBpY2tlci10cmlnZ2VyLWNvbG9yLCAjMDA3MmEzKX0uZGF0ZXBp''@;'; put 'put ''Y2tlci10cmlnZ2VyIC5kYXRlcGlja2VyLXRyaWdnZXItaWNvbjpob3ZlcntmaWxsOiMwMDU2N2E7ZmlsbDp2YXIoLS1jbHItZGF0ZXBpY2tlci10cmlnZ2VyLWhvdmVyLWNvbG9yLCAjMDA1NjdhKX0uZGF0ZXBpY2tlci10cmlnZ2VyOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uY2xy''@;'; put 'put ''LWZvcm0tY29udHJvbCAuZGF0ZXBpY2tlci10cmlnZ2Vye2xpbmUtaGVpZ2h0OjEuMXJlbTtoZWlnaHQ6MS4xcmVtfS5kYXRlLWlucHV0e2ZsZXg6MSAxIGF1dG99LmRhdGVwaWNrZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOi42cmVtO21hcmdpbi10b3A6''@;'; put 'put ''LjNyZW07d2lkdGg6MTMuOXJlbTtoZWlnaHQ6MTUuN3JlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYmFja2dyb3VuZC1jb2xvciwgd2hpdGUpO2JvcmRlcjouMDVyZW0gc29saWQ7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1jYWxlbmRhci1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMsIC4xNXJlbSk7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gIzhjOGM4YzQwO2JveC1zaGFkb3c6MCAuMDVyZW0g''@;'; put 'put ''LjE1cmVtIHZhcigtLWNsci1wb3BvdmVyLWJveC1zaGFkb3ctY29sb3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MTA1MH0uY2FsZW5kYXItaGVhZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1p''@;'; put 'put ''dGVtczpjZW50ZXJ9LmNhbGVuZGFyLXN3aXRjaGVycywueWVhci1zd2l0Y2hlcnN7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS4xcmVtKTtkaXNwbGF5OmZsZXh9LnllYXItc3dpdGNoZXJze2ZsZXg6MCAwIGF1dG87d2lkdGg6NS40cmVtO2FsaWduLXNlbGY6Y2VudGVyfS5jYWxlbmRhci10YWJs''@;'; put 'put ''ZXtmbGV4OjEgMSBhdXRvO3dpZHRoOjEwMCV9LmNhbGVuZGFyLWNlbGwsLmNhbGVuZGFyLXRhYmxlIC5jYWxlbmRhci1jZWxse2hlaWdodDoxLjhyZW07d2lkdGg6MS44cmVtO21pbi1oZWlnaHQ6MS44cmVtO21pbi13aWR0aDoxLjhyZW07cGFkZGluZzowO3RleHQtYWxpZ246Y2VudGVyfS5k''@;'; put 'put ''YXl7ZGlzcGxheTppbmxpbmUtYmxvY2t9LndlZWtkYXlze2ZsZXg6MCAwIDEuOHJlbX0ud2Vla2RheXtmb250LXNpemU6LjZyZW07Zm9udC1zaXplOnZhcigtLWNsci1kYXktZm9udC1zaXplLCAuNnJlbSk7Zm9udC13ZWlnaHQ6NjAwfS5jYWxlbmRhci1idG57aGVpZ2h0OjEuOHJlbTttaW4t''@;'; put 'put ''d2lkdGg6MS44cmVtO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2lu''@;'; put 'put ''dGVyO2xpbmUtaGVpZ2h0OjEuOHJlbTtmb250LXNpemU6LjlyZW07Zm9udC1zaXplOnZhcigtLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtc2l6ZSwgLjlyZW0pO2ZvbnQtd2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXdlaWdo''@;'; put 'put ''dCwgMjAwKX0uY2FsZW5kYXItYnRuOmhvdmVyLC5jYWxlbmRhci1idG46Zm9jdXN7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvciwgI2U4ZThlOCl9LmNhbGVuZGFyLWJ0bjpmb2N1c3tvdXRsaW5lOjB9LmRheS1i''@;'; put 'put ''dG57aGVpZ2h0OjEuOHJlbTttaW4td2lkdGg6MS44cmVtO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtiYWNrZ3JvdW5kOjAgMDtjdXJz''@;'; put 'put ''b3I6cG9pbnRlcjtsaW5lLWhlaWdodDoxLjhyZW07d2lkdGg6MTAwJTtjb2xvcjppbmhlcml0fS5kYXktYnRuOmhvdmVyLC5kYXktYnRuOmZvY3Vze2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3IsICNlOGU4ZTgp''@;'; put 'put ''fS5kYXktYnRuOmZvY3Vze291dGxpbmU6MH0uZGF5LWJ0bi5pcy10b2RheXtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtY29sb3IsIGJsYWNrKTtmb250LXdlaWdodDo2MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRh''@;'; put 'put ''dGUtY2VsbC1mb250LXdlaWdodCwgNjAwKX0uZGF5LWJ0bi5pcy1leGNsdWRlZHtvcGFjaXR5Oi40fS5kYXktYnRuLmlzLWV4Y2x1ZGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kYXktYnRuLmlzLXNlbGVjdGVke2JhY2tncm91bmQ6I2Q4ZTNlOTtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxl''@;'; put 'put ''bmRhci1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yLCAjZDhlM2U5KTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvciwgYmxhY2spfS5kYXktYnRuLmlzLXNlbGVjdGVkOmZvY3Vze2JhY2tncm91bmQ6I2Q4ZTNlOTtiYWNrZ3JvdW5kOnZh''@;'; put 'put ''cigtLWNsci1jYWxlbmRhci1hY3RpdmUtZm9jdXMtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yLCAjZDhlM2U5KX0uZGF5LWJ0bi5pcy1kaXNhYmxlZHtvcGFjaXR5Oi40O3BvaW50ZXItZXZlbnRzOm5vbmV9LmRheS1idG4uaXMtZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmNhbGVuZGFy''@;'; put 'put ''LXBpY2tlcnN7ZGlzcGxheTpmbGV4fS5zd2l0Y2hlcntjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tY29sb3IsICMwMDcyYTMpfS5zd2l0Y2hlciBjZHMtaWNvbiwuc3dpdGNoZXIgY2xyLWljb257aGVpZ2h0Oi45cmVtO3dpZHRoOi45cmVtfS5tb250aHBpY2tl''@;'; put 'put ''ci10cmlnZ2VyLC55ZWFycGlja2VyLXRyaWdnZXJ7bWluLXdpZHRoOjIuNHJlbTttYXgtd2lkdGg6M3JlbTtjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tY29sb3IsICMwMDcyYTMpO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxv''@;'; put 'put ''dzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ubW9udGhwaWNrZXIsLnllYXJwaWNrZXJ7bWluLWhlaWdodDoxNC40cmVtfS5tb250aHBpY2tlciwueWVhcnBpY2tlciwueWVhcnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvdmVyZmxvdzpoaWRkZW59Lm1vbnRo''@;'; put 'put ''cGlja2VyLC55ZWFyc3tmbGV4LXdyYXA6d3JhcH0ubW9udGgsLnllYXJ7aGVpZ2h0OjIuNHJlbTttaW4td2lkdGg6Mi40cmVtO3BhZGRpbmc6MCAuNnJlbTttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVz''@;'; put 'put ''OnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2xpbmUtaGVpZ2h0OjEuOHJlbTt3aWR0aDo2LjNyZW07Zm9udC1zaXplOi45cmVtO2ZvbnQtd2VpZ2h0OjIwMDtvdXRsaW5lLW9mZnNldDotLjI1cmVtfS5tb250aDpo''@;'; put 'put ''b3ZlciwubW9udGg6Zm9jdXMsLnllYXI6aG92ZXIsLnllYXI6Zm9jdXN7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvciwgI2U4ZThlOCl9Lm1vbnRoOmZvY3VzLC55ZWFyOmZvY3Vze291dGxpbmU6MH0ubW9udGgu''@;'; put 'put ''aXMtZGlzYWJsZWQsLnllYXIuaXMtZGlzYWJsZWR7b3BhY2l0eTouNDtwb2ludGVyLWV2ZW50czpub25lfS5tb250aC5pcy1kaXNhYmxlZDpob3ZlciwueWVhci5pcy1kaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0ubW9udGguaXMtc2VsZWN0ZWQsLnllYXIuaXMtc2VsZWN0ZWR7YmFj''@;'; put 'put ''a2dyb3VuZDojZDhlM2U5O2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJhY2tncm91bmQtY29sb3IsICNkOGUzZTkpO2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWNvbG9yLCBibGFjayl9Lm1vbnRoLmlzLXNlbGVjdGVk''@;'; put 'put ''OmZvY3VzLC55ZWFyLmlzLXNlbGVjdGVkOmZvY3Vze2JhY2tncm91bmQ6I2Q4ZTNlOTtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtZm9jdXMtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yLCAjZDhlM2U5KX0ubW9udGh7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93''@;'; put 'put ''cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS55ZWFye3RleHQtYWxpZ246Y2VudGVyfTpyb290ey0tY2xyLWNvbWJvYm94LXRyaWdnZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTAwKTstLWNsci1jb21ib2JveC1mb250LXNpemU6LjY1cmVtOy0t''@;'; put 'put ''Y2xyLWNvbWJvYm94LWJvcmRlci1jb2xvcjojZThlOGU4Oy0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXM6LjE1cmVtOy0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3I6I2YyZjJmMjstLWNsci1jb21ib2JveC1waWxsLWJhY2tncm91bmQtY29sb3I6d2hpdGU7LS1jbHIt''@;'; put 'put ''Y29tYm9ib3gtcGlsbC1ib3JkZXItY29sb3I6IzY2NjY2NjstLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1yYWRpdXM6LjE1cmVtOy0tY2xyLWNvbWJvYm94LXBpbGwtZm9udC1jb2xvcjojNDU0NTQ1Oy0tY2xyLWNvbWJvYm94LWZpbHRlci1oaWdobGlnaHQ6IzQ1NDU0NX0uY2xyLWNvbWJv''@;'; put 'put ''Ym94LWZvcm0tY29udHJvbHthbGlnbi1pdGVtczpzdHJldGNofS5jbHItY29tYm9ib3gtZm9ybS1jb250cm9sIC5jbHItZXJyb3IgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OjB9LmNsci1mb2N1cy1pbmRpY2F0b3J7YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IsICMwMDcyYTMpO2hlaWdodDouMXJlbTt3aWR0aDowO3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2U7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOi0uMDVyZW07bGVmdDowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6LjE1cmVt''@;'; put 'put ''O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzLCAu''@;'; put 'put ''MTVyZW0pfS5jbHItZm9jdXN7d2lkdGg6MTAwJX0uY2xyLWVycm9yIC5jbHItZm9jdXMtaW5kaWNhdG9ye2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjYzIxZDAwKX0uY2xyLWNvbWJvYm94LXdyYXBwZXJ7''@;'; put 'put ''cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIDEuMnJlbSAwIC4zcmVtO21pbi1oZWlnaHQ6MS4ycmVtO21pbi13aWR0aDo4LjRyZW07Zm9udC1zaXplOi42NXJlbTtmb250LXNpemU6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtc2l6ZSwgLjY1cmVtKTtjb2xvcjojMDAwO2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy10ZXh0LWNvbG9yLCBibGFjayk7Ym9yZGVyLWJvdHRvbTouMDVyZW0gc29saWQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3IsICNm''@;'; put 'put ''MmYyZjIpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojZThlOGU4O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLWNvbG9yLCAjZThlOGU4KTtib3JkZXItYm90dG9tLXdpZHRoOi4wNXJlbTtib3JkZXItYm90dG9tLXN0''@;'; put 'put ''eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6IzZhN2E4MTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IsICM2YTdhODEpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMs''@;'; put 'put ''IC4xNXJlbSl9LmNsci1jb21ib2JveC13cmFwcGVyLm11bHRpe21pbi13aWR0aDptaW4oMThyZW0sMTAwJSk7cGFkZGluZy1ib3R0b206LjE1cmVtfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWlucHV0LmNsci1jb21ib2JveC1pbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOjAgMH0uY2xyLWNv''@;'; put 'put ''bWJvYm94LXdyYXBwZXIuaW52YWxpZHtib3JkZXItYm90dG9tLWNvbG9yOiNjMjFkMDB9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItY29tYm9ib3gtaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyLWJvdHRvbTpub25lfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LXJl''@;'; put 'put ''bW92ZS1idG57YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzouMTVyZW07Y29sb3I6IzQ1NDU0NX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGx7bWFyZ2luOi4xNXJlbSAuM3JlbSAwIDA7YmFja2dyb3VuZC1jb2xvcjojZmZm''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtYmFja2dyb3VuZC1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXN0eWxlOnNvbGlkO2FsaWduLWl0ZW1zOmJhc2VsaW5lO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLWNvbG9yLCAjNjY2NjY2KTtwYWRkaW5nOjAgLjFyZW0gMCAuMnJlbX0uY2xyLWNvbWJvYm94LXdyYXBw''@;'; put 'put ''ZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgLmNsci1jb21ib2JveC1waWxsLWNvbnRlbnR7Y29sb3I6IzQ1NDU0NTtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1mb250LWNvbG9yLCAjNDU0NTQ1KTtmb250LXNpemU6LjU1cmVtO2ZvbnQtd2VpZ2h0OjQwMDtwYWRkaW5nOjAgLjRyZW0g''@;'; put 'put ''MCAuMnJlbX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2RzLWljb25bc2hhcGU9d2luZG93LWNsb3NlXSwuY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2xyLWljb25bc2hhcGU9d2luZG93LWNsb3NlXXtjb2xvcjojNDU0NTQ1''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3IsICM0NTQ1NDUpfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LWlucHV0LXdyYXBwZXJ7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC10cmlnZ2Vye3dpZHRoOjEuMnJlbTttYXJn''@;'; put 'put ''aW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOmN1cnJlbnRDb2xvcjtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9LmNsci1jb21ib2JveC10cmlnZ2VyOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tbGluay1kaXNhYmxlZC1jb2xvciwgIzY2Nik7b3BhY2l0eTouNH0uY2xyLWNvbWJvYm94LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGVdLC5jbHItY29tYm9ib3gtdHJpZ2dlciBjbHItaWNvbltzaGFwZT1hbmdsZV17Y29sb3I6IzQ1NDU0NTtjb2xvcjp2YXIoLS1jbHItY29tYm9i''@;'; put 'put ''b3gtcGlsbC1mb250LWNvbG9yLCAjNDU0NTQ1KX0uY2xyLWNvbWJvYm94LW9wdGlvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjA7bWluLXdpZHRoOjZyZW07bWF4LXdpZHRoOjE4cmVtO2JhY2tncm91bmQ6I2Zm''@;'; put 'put ''ZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtICM4YzhjOGM0MDtib3gtc2hh''@;'; put 'put ''ZG93OjAgLjA1cmVtIC4xNXJlbSB2YXIoLS1jbHItZHJvcGRvd24tYm94LXNoYWRvdywgcmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpKTttYXJnaW4tdG9wOi4xcmVtO3BhZGRpbmc6LjZyZW0gMDt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwNTA7cG9zaXRpb246c3RhdGljO21heC1oZWln''@;'; put 'put ''aHQ6MTJyZW07b3ZlcmZsb3cteTpzY3JvbGw7dmlzaWJpbGl0eTp2aXNpYmxlfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZ3twYWRkaW5nOi4xNXJlbSAxLjJyZW19LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ucy1s''@;'; put 'put ''b2FkaW5nIC5jbHItY29tYm9ib3gtb3B0aW9ucy1sb2FkaW5nLXRleHR7cGFkZGluZy1sZWZ0Oi4zcmVtfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtZW1wdHktdGV4dHtwYWRkaW5nLWxlZnQ6LjZyZW19LmNsci1jb21ib2JveC1vcHRpb257Y29sb3I6IzY2''@;'; put 'put ''Njtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvciwgIzY2NjY2Nik7Zm9udC1zaXplOi43cmVtO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7YmFja2dyb3Vu''@;'; put 'put ''ZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6YXV0bztsaW5lLWhlaWdodDppbmhlcml0O21hcmdpbjowO3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06bm9uZX0uY2xyLWNvbWJvYm94LW9wdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4''@;'; put 'put ''ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3IsICNlOGU4ZTgpO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tY29sb3IsICM2NjY2NjYpO3RleHQtZGVjb3JhdGlvbjpub25lfS5jbHItY29tYm9ib3gtb3B0aW9uLmFj''@;'; put 'put ''dGl2ZXtiYWNrZ3JvdW5kOiNkOGUzZTk7YmFja2dyb3VuZDp2YXIoLS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9yLCAjZDhlM2U5KTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvciwgYmxhY2spfS5jbHItY29tYm9ib3gtb3B0aW9uOmFj''@;'; put 'put ''dGl2ZXtib3gtc2hhZG93Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb246Zm9jdXN7ei1pbmRleDppbmhlcml0fS5jbHItY29tYm9ib3gtb3B0aW9uLmRpc2FibGVkLC5jbHItY29tYm9ib3gtb3B0aW9uOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTouNDstd2Via2l0LXVz''@;'; put 'put ''ZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uY2xyLWNvbWJvYm94LW9wdGlvbi5kaXNhYmxlZDpob3ZlciwuY2xyLWNvbWJvYm94LW9wdGlvbjpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0uY2xyLWNvbWJvYm94LW9wdGlvbi5kaXNhYmxlZDphY3RpdmUsLmNsci1jb21i''@;'; put 'put ''b2JveC1vcHRpb246ZGlzYWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uY2xyLWNvbWJvYm94LW9wdGlvbi5jbHItZm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJnLWhvdmVyLWNvbG9y''@;'; put 'put ''LCAjZThlOGU4KX0uY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb257cGFkZGluZzouMTVyZW0gMS4ycmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbntwYWRkaW5nOi4z''@;'; put 'put ''cmVtIDEuMnJlbX19LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9uOmhvdmVyLC5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbi5hY3RpdmV7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvciwgIzY2NjY2''@;'; put 'put ''Nil9LmNsci1jb21ib2JveC1kaXNhYmxlZHtjb2xvcjojYjNiM2IzO2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yLCAjYjNiM2IzKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1jb21ib2JveC1kaXNhYmxlZCAuY2xyLWNvbWJvYm94LWlucHV0LC5jbHItY29tYm9i''@;'; put 'put ''b3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC1yZW1vdmUtYnRuLC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC10cmlnZ2Vye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWZpbHRlci1oaWdobGlnaHQgYntmb250LXdlaWdodDo1MDA7Y29sb3I6IzQ1NDU0NTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItY29tYm9ib3gtZmlsdGVyLWhpZ2hsaWdodCwgIzQ1NDU0NSl9OnJvb3R7LS1jbHItc3RhY2stdmlldy1ib3JkZXItcmFkaXVzOi4xNXJlbTstLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLXN0YWNrLXZpZXctYmct''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTApOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stYm9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0zMDApOy0tY2xyLXN0YWNrLXZpZXctY29sb3I6IzY2NjY2NjstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2Nr''@;'; put 'put ''LWxhYmVsLXRleHQtY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1mb250LWNvbG9yKTstLWNsci1zdGFjay12aWV3LWJvcmRlci1ib3gtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMzAwKTstLWNsci1zdGFjay1ibG9jay1jaGFuZ2VkLWJvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLWNv''@;'; put 'put ''bG9yLWFjdGlvbi02MDApOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtYW5kLWNvbnRlbnQtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTApOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stY2hpbGRyZW4tc3RhY2stYmxvY2stYm9yZGVyLWJvdHRvbS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stY2hpbGRyZW4tc3RhY2stYmxvY2stbGFiZWwtYW5kLWNvbnRlbnQtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTIwMCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jb250ZW50LXRleHQtY29sb3I6''@;'; put 'put ''aW5oZXJpdDstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLWZvbnQtY29sb3IpfS5zdGFjay1o''@;'; put 'put ''ZWFkZXJ7Zm9udC13ZWlnaHQ6NDAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZH0uc3RhY2staGVhZGVyIC5zdGFjay10aXRsZXtkaXNwbGF5OmJsb2NrO2ZsZXg6MSAxIGF1dG87cGFkZGluZzouM3JlbSAwfS5zdGFjay1oZWFkZXIgLnN0YWNrLWFjdGlvbnN7ZGlzcGxheTpi''@;'; put 'put ''bG9jaztmbGV4OjAgMCBhdXRvfS5zdGFjay1oZWFkZXIgLnN0YWNrLWFjdGlvbnMgLnN0YWNrLWFjdGlvbnttYXJnaW46MCAwIC4zcmVtIC42cmVtfS5zdGFjay1oZWFkZXIgLnN0YWNrLWFjdGlvbnMgLnN0YWNrLWFjdGlvbi5idG57bWluLXdpZHRoOjA7cGFkZGluZzowIC42cmVtfS5zdGFj''@;'; put 'put ''ay1oZWFkZXIgLnN0YWNrLWFjdGlvbnMgLnN0YWNrLWFjdGlvbi5idG4tbGlua3ttYXJnaW4tcmlnaHQ6LS42cmVtfS5zdGFjay12aWV3e2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctY29sb3IsICM2NjY2NjYpO2ZvbnQtc2l6ZTouNjVyZW07Zm9udC13ZWlnaHQ6NDAw''@;'; put 'put ''O2xpbmUtaGVpZ2h0OjEuMnJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luLXRvcDowO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItY29sb3IsICNjY2Nj''@;'; put 'put ''Y2MpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtvdmVyZmxvdy15OmF1dG87YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctYmct''@;'; put 'put ''Y29sb3IsICNmYWZhZmEpO3dvcmQtd3JhcDpicmVhay13b3JkfS5zdGFjay12aWV3IGRkLC5zdGFjay12aWV3IGR0e21hcmdpbi1pbmxpbmUtc3RhcnQ6MDttYXJnaW4tbGVmdDowfS5zdGFjay12aWV3IC5zdGFjay1ibG9ja3tkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2JvcmRl''@;'; put 'put ''ci1ib3R0b20td2lkdGg6LjA1cmVtO2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6I2RlZGVkZTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1z''@;'; put 'put ''dGFjay12aWV3LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20sICNkZWRlZGUpO292ZXJmbG93LXk6aGlkZGVufS5zdGFjay12aWV3Pi5zdGFjay1ibG9jazpsYXN0LWNoaWxkLC5zdGFjay12aWV3PjpsYXN0LWNoaWxkIC5zdGFjay1ibG9jazpsYXN0LW9mLXR5cGV7Ym9yZGVyLWJvdHRvbTpu''@;'; put 'put ''b25lO2JveC1zaGFkb3c6MCAuMDVyZW0gI2RlZGVkZTtib3gtc2hhZG93OjAgLjA1cmVtIDAgdmFyKC0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLWJveC1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNoYW5nZWQ+LnN0YWNrLWJsb2NrLWxhYmVse21hcmdpbi1sZWZ0Oi0uNDVyZW19''@;'; put 'put ''LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNoYW5nZWQ6YmVmb3Jle2NvbnRlbnQ6IiAiO3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDowO3dpZHRoOjA7Ym9yZGVyLXRvcDouNDVyZW0gc29saWQ7Ym9yZGVyLXRvcC1jb2xvcjojMDA3MmEzO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXN0''@;'; put 'put ''YWNrLWJsb2NrLWNoYW5nZWQtYm9yZGVyLXRvcC1jb2xvciwgIzAwNzJhMyk7Ym9yZGVyLXJpZ2h0Oi40NXJlbSBzb2xpZCB0cmFuc3BhcmVudH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWx7cGFkZGluZzouM3JlbSAuNnJlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvciwgI2ZhZmFmYSl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1j''@;'; put 'put ''YXJldHthbGlnbi1zZWxmOmNlbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWx7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC10ZXh0LWNvbG9yLCAjNjY2NjY2KTtmb250LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjUwMDts''@;'; put 'put ''aW5lLWhlaWdodDoxLjJyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4fS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjtmbG9hdDpsZWZ0O2hlaWdodDouN3JlbTt3aWR0''@;'; put 'put ''aDouN3JlbTttYXJnaW46LjM1cmVtIC4yNHJlbSAwIDA7dGV4dC1hbGlnbjpjZW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWxhYmVsOmZvY3Vze291dGxpbmU6LjA1cmVtIGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0uMDVyZW19LnN0YWNrLXZp''@;'; put 'put ''ZXcgLnN0YWNrLXZpZXcta2V5e2ZsZXg6MCAwIDQwJTttYXgtd2lkdGg6NDAlfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jYXJldHtoZWlnaHQ6LjdyZW07d2lkdGg6LjdyZW07bWFyZ2luLXJpZ2h0Oi4yNHJlbTtmaWxsOiM2NjY7ZmlsbDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1i''@;'; put 'put ''bG9jay1jYXJldC1jb2xvciwgIzY2NjY2Nil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnR7Y29sb3I6aW5oZXJpdDtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jb250ZW50LXRleHQtY29sb3IsIGluaGVyaXQpO2ZsZXg6MSAxIGF1dG87d2lkdGg6NjAl''@;'; put 'put ''O21hcmdpbi1ib3R0b206MDtmb250LXdlaWdodDo0MDB9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stY29udGVudD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnN0YWNrLXZpZXcg''@;'; put 'put ''LnN0YWNrLWNoaWxkcmVue2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2Nre2JvcmRlci1ib3R0b20tY29sb3I6I2U4ZThlODtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWNoaWxkcmVu''@;'; put 'put ''LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20tY29sb3IsICNlOGU4ZTgpfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbj4uc3RhY2stYmxvY2s6bGFzdC1jaGlsZCwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4+Omxhc3QtY2hpbGQgLnN0YWNrLWJsb2NrOmxhc3Qtb2YtdHlwZXtib3Jk''@;'; put 'put ''ZXItYm90dG9tOm5vbmU7Ym94LXNoYWRvdzowIC4wNXJlbSAjZGVkZWRlO2JveC1zaGFkb3c6MCAuMDVyZW0gMCB2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItYm94LWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsLC5zdGFjay12aWV3IC5z''@;'; put 'put ''dGFjay1jaGlsZHJlbiAuc3RhY2stYmxvY2stY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvciwgd2hpdGUpfS5zdGFjay12''@;'; put 'put ''aWV3IC5zdGFjay1jaGlsZHJlbiAuc3RhY2stYmxvY2stbGFiZWx7cGFkZGluZy1sZWZ0OjEuMnJlbX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWx7Y3Vyc29yOnBvaW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+''@;'; put 'put ''LnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTIl''@;'; put 'put ''MjAxMiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRS5jbHMtMSU3QmZpbGwlM0ElMjM2NjY2NjYlM0IlN0QlM0MlMkZzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlM0N0''@;'; put 'put ''aXRsZSUzRUNhcmV0JTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGQlM0QlMjJNNiUyQzlMMS4yJTJDNC4yYTAuNjglMkMwLjY4JTJDMCUyQzAlMkMxJTJDMS0xTDYlMkM3LjA4JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMw''@;'; put 'put ''JTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO2hlaWdodDouNnJlbTt3aWR0aDou''@;'; put 'put ''NnJlbX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWwsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnR7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dCxjb2xv''@;'; put 'put ''ciAuMnMgZWFzZS1pbi1vdXR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU6aG92ZXI6bm90KC5zdGFjay1ibG9jay1leHBhbmRlZCk+LnN0YWNrLWJsb2NrLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12''@;'; put 'put ''aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIsICNlOGU4ZTgpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoMCl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1i''@;'; put 'put ''bG9jay1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNkOGUzZTk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC1iZy1jb2xvciwgI2Q4ZTNlOSk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1l''@;'; put 'put ''eHBhbmRlZC10ZXh0LWNvbG9yLCBibGFjayl9LnN0YWNrLXZpZXcgaW5wdXRbdHlwZT10ZXh0XSwuc3RhY2stdmlldyBpbnB1dFt0eXBlPXBhc3N3b3JkXSwuc3RhY2stdmlldyBpbnB1dFt0eXBlPW51bWJlcl0sLnN0YWNrLXZpZXcgaW5wdXRbdHlwZT1lbWFpbF0sLnN0YWNrLXZpZXcgaW5w''@;'; put 'put ''dXRbdHlwZT11cmxdLC5zdGFjay12aWV3IGlucHV0W3R5cGU9dGVsXSwuc3RhY2stdmlldyBpbnB1dFt0eXBlPWRhdGVdLC5zdGFjay12aWV3IGlucHV0W3R5cGU9dGltZV0sLnN0YWNrLXZpZXcgaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0sLnN0YWNrLXZpZXcgLnNlbGVjdHtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7bWFyZ2luLXJpZ2h0Oi42cmVtO21hcmdpbi1ib3R0b206LS45NXJlbX0uc3RhY2stdmlldyBpbnB1dFt0eXBlPXRleHRdLC5zdGFjay12aWV3IGlucHV0W3R5cGU9cGFzc3dvcmRdLC5zdGFjay12aWV3IGlucHV0W3R5cGU9bnVtYmVy''@;'; put 'put ''XSwuc3RhY2stdmlldyBpbnB1dFt0eXBlPWVtYWlsXSwuc3RhY2stdmlldyBpbnB1dFt0eXBlPXVybF0sLnN0YWNrLXZpZXcgaW5wdXRbdHlwZT10ZWxdLC5zdGFjay12aWV3IGlucHV0W3R5cGU9ZGF0ZV0sLnN0YWNrLXZpZXcgaW5wdXRbdHlwZT10aW1lXSwuc3RhY2stdmlldyBpbnB1dFt0''@;'; put 'put ''eXBlPWRhdGV0aW1lLWxvY2FsXSwuc3RhY2stdmlldyAuc2VsZWN0IHNlbGVjdHtoZWlnaHQ6MS4ycmVtfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dGV4dF0sLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFu''@;'; put 'put ''ZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT1wYXNzd29yZF0sLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT1udW1iZXJdLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFj''@;'; put 'put ''ay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9ZW1haWxdLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dXJsXSwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stY29udGVudCBp''@;'; put 'put ''bnB1dFt0eXBlPXRlbF0sLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT1kYXRlXSwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPXRpbWVdLC5z''@;'; put 'put ''dGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxde3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlLGJvcmRlci1ib3R0b20tY29sb3IgLjJzIGVhc2UtaW4tb3V0fS5zdGFjay12aWV3''@;'; put 'put ''IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1ibG9jay1jb250ZW50IC5zZWxlY3Qgc2VsZWN0e3RyYW5zaXRpb246Ym9yZGVyLWJvdHRvbS1jb2xvciAuMnMgZWFzZS1pbi1vdXR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnQg''@;'; put 'put ''LnNlbGVjdDphZnRlcnt0cmFuc2l0aW9uOmNvbG9yIC4ycyBlYXNlLWluLW91dH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT10ZXh0XSwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2Nr''@;'; put 'put ''LWNvbnRlbnQgaW5wdXRbdHlwZT1wYXNzd29yZF0sLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9bnVtYmVyXSwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRb''@;'; put 'put ''dHlwZT1lbWFpbF0sLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dXJsXSwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT10ZWxdLC5zdGFjay12aWV3''@;'; put 'put ''IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPWRhdGVdLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPXRpbWVdLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRl''@;'; put 'put ''ZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXXtib3JkZXItYm90dG9tLWNvbG9yOiM4YzhjOGM7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDAsICM4YzhjOGMpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRv''@;'; put 'put ''IGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsICMwMDcyYTMpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFu''@;'; put 'put ''ZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dGV4dF0uY2xyLWZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4u''@;'; put 'put ''c3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPXBhc3N3b3JkXTpmb2N1cywuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT1wYXNzd29yZF0uY2xyLWZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRl''@;'; put 'put ''ZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPW51bWJlcl06Zm9jdXMsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9bnVtYmVyXS5jbHItZm9jdXMsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVk''@;'; put 'put ''Pi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9ZW1haWxdOmZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPWVtYWlsXS5jbHItZm9jdXMsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5z''@;'; put 'put ''dGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dXJsXTpmb2N1cywuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT11cmxdLmNsci1mb2N1cywuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJs''@;'; put 'put ''b2NrLWNvbnRlbnQgaW5wdXRbdHlwZT10ZWxdOmZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPXRlbF0uY2xyLWZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29u''@;'; put 'put ''dGVudCBpbnB1dFt0eXBlPWRhdGVdOmZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPWRhdGVdLmNsci1mb2N1cywuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQg''@;'; put 'put ''aW5wdXRbdHlwZT10aW1lXTpmb2N1cywuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT10aW1lXS5jbHItZm9jdXMsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0''@;'; put 'put ''W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOmZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXS5jbHItZm9jdXN7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDA3MmEzO2JvcmRlci1ib3R0b20tY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsICMwMDcyYTMpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IC5zZWxlY3Qgc2VsZWN0e2JvcmRlci1ib3R0b20tY29sb3I6IzhjOGM4Yzti''@;'; put 'put ''b3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTYwMCwgIzhjOGM4Yyl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IC5zZWxlY3Q6YWZ0ZXJ7Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1''@;'; put 'put ''dHJhbC02MDAsICM4YzhjOGMpfS5tb2RhbCAuc3RhY2stdmlld3toZWlnaHQ6NTV2aDttYXJnaW4tYm90dG9tOjB9LnN0YWNrLXZpZXcgY2xyLXN0YWNrLWJsb2NrLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUgLnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZXtjb250ZW50Om5vbmV9LnN0YWNrLXZp''@;'; put 'put ''ZXcgLnN0YWNrLWNoaWxkcmVuIGNsci1zdGFjay1ibG9jayAuc3RhY2stYmxvY2stbGFiZWwsLnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbHtwYWRkaW5nLWxlZnQ6MS44cmVtfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiBjbHItc3RhY2stYmxvY2sg''@;'; put 'put ''LnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZSwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZXtkaXNwbGF5Om5vbmV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIGNsci1zdGFjay1ibG9jayAuc3RhY2stYmxvY2stY29udGVudCwuc3RhY2st''@;'; put 'put ''dmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWNvbnRlbnR7cGFkZGluZy1sZWZ0Oi4zNnJlbX06cm9vdHstLWNsci10cmVlLWJvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMpOy0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLXRyZWUtbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY3VzdG9tLWxpbmtzLWhvdmVyLWNvbG9yKTstLWNsci10cmVlLWxpbmstc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yKTstLWNsci10''@;'; put 'put ''cmVlLWxpbmstdGV4dC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLXRyZWUtbm9kZS1jYXJldC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC01MDApfS5jbHItdHJlZS1ub2Rle2Rpc3BsYXk6YmxvY2t9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWlu''@;'; put 'put ''ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXRyZWVub2RlLWNvbnRlbnR7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOi4xNXJlbTtib3JkZXItdG9wLWxlZnQt''@;'; put 'put ''cmFkaXVzOnZhcigtLWNsci10cmVlLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2xpbmUtaGVpZ2h0OjEuNjJyZW19LmNs''@;'; put 'put ''ci10cmVlbm9kZS1jb250ZW50OmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDoxLjYycmVtfS5jbHItdHJlZW5vZGUtY29udGVudCBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb257aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtO21hcmdpbi1yaWdodDouM3JlbTt2ZXJ0aWNh''@;'; put 'put ''bC1hbGlnbjptaWRkbGV9LmNsci10cmVlbm9kZS1jYXJldHtmbGV4OjAgMCAxLjYycmVtO3BhZGRpbmc6MDttYXJnaW46MDtoZWlnaHQ6MS42MnJlbTt3aWR0aDoxLjYycmVtO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOiNiM2IzYjM7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1j''@;'; put 'put ''YXJldC1jb2xvciwgI2IzYjNiMyk7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZS1vZmZzZXQ6LS4yNXJlbX0uY2xyLXRyZWVub2RlLWNhcmV0OmhvdmVye2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWhvdmVyLWNvbG9yLCBibGFjayl9LmNsci10cmVlLW5v''@;'; put 'put ''ZGUtY2FyZXQtaWNvbntoZWlnaHQ6LjhyZW07d2lkdGg6LjhyZW07dmVydGljYWwtYWxpZ246bWlkZGxlfS5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXJ7aGVpZ2h0OjEuNjJyZW07d2lkdGg6MS42MnJlbTtwYWRkaW5nOi40MXJlbX0uY2xyLXRyZWVub2RlLXNwaW5uZXJ7aGVpZ2h0''@;'; put 'put ''Oi44cmVtO3dpZHRoOi44cmVtO21pbi1oZWlnaHQ6LjhyZW07bWluLXdpZHRoOi44cmVtfS5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWFyZ2luLWxlZnQ6MS4xN3JlbTt3aWxsLWNoYW5nZTpoZWlnaHQ7b3ZlcmZsb3cteTpoaWRkZW59LmNsci10cmVlbm9kZS1saW5re2Rpc3BsYXk6aW5saW5l''@;'; put 'put ''LWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7bWFyZ2luOjA7cGFkZGluZzowIDAgMCAuM3JlbTtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci10cmVlLWxpbmstdGV4dC1jb2xvciwgIzY2NjY2Nik7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWln''@;'; put 'put ''aHQ6aW5oZXJpdDt0ZXh0LWFsaWduOmxlZnR9LmNsci10cmVlbm9kZS1saW5rOmxpbmssLmNsci10cmVlbm9kZS1saW5rOnZpc2l0ZWQsLmNsci10cmVlbm9kZS1saW5rOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWxpbms6aG92ZXJ7Y29sb3I6aW5oZXJpdH0uY2xyLXRyZWVub2RlLWxpbms6aG92''@;'; put 'put ''ZXIsLmNsci10cmVlbm9kZS1saW5rOmZvY3Vze2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci10cmVlLWxpbmstaG92ZXItY29sb3IsICNlOGU4ZTgpO3RleHQtZGVjb3JhdGlvbjpub25lfS5jbHItdHJlZW5vZGUtbGluay5hY3RpdmV7YmFja2dyb3VuZDojZDhlM2U5''@;'; put 'put ''O2JhY2tncm91bmQ6dmFyKC0tY2xyLXRyZWUtbGluay1zZWxlY3Rpb24tY29sb3IsICNkOGUzZTkpO2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWhvdmVyLWNvbG9yLCBibGFjayl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci1j''@;'; put 'put ''aGVja2JveC13cmFwcGVye3BhZGRpbmctdG9wOi4yMXJlbTtwYWRkaW5nLWxlZnQ6LjQxcmVtfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItY2hlY2tib3gtd3JhcHBlcjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxLjYycmVtfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQt''@;'; put 'put ''Y29udGFpbmVyPi5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Zm9udC1zaXplOi43cmVtfS5jbHItdHJlZW5vZGUtY29udGVudCAubGFiZWx7bWFyZ2luLWxlZnQ6LjNyZW19QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jbHItdHJlZW5vZGUtY29udGVu''@;'; put 'put ''dCAubGFiZWx7bWFyZ2luLWxlZnQ6LjE1cmVtfX1fOi1tcy1pbnB1dC1wbGFjZWhvbGRlciAuY2xyLXRyZWVub2RlLWNvbnRlbnQgLmxhYmVsLDpyb290IC5jbHItdHJlZW5vZGUtY29udGVudCAubGFiZWx7bWFyZ2luLWxlZnQ6LjE1cmVtfTpyb290ey0tY2xyLWRhdGFncmlkLWZvbnQtY29s''@;'; put 'put ''b3I6I2FjYmFjMzstLWNsci1kYXRhZ3JpZC1kZWZhdWx0LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLWRhdGFncmlkLWljb24tY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci1kYXRhZ3JpZC1yb3ctaG92ZXI6dmFyKC0tY2xy''@;'; put 'put ''LWNvbG9yLW5ldXRyYWwtMjAwKTstLWNsci1kYXRhZ3JpZC1yb3ctaG92ZXItZm9udC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItZGF0YWdyaWQtcGFnaW5h''@;'; put 'put ''dGlvbi1idG4tY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1kYXRhZ3JpZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1pbnB1dC1ib3JkZXItZm9jdXMtY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi00MDApOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9y''@;'; put 'put ''LW5ldXRyYWwtMCk7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1hY3Rpb24tcG9wb3Zlci1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApOy0tY2xy''@;'; put 'put ''LWRhdGFncmlkLXJvdy1zZWxlY3RlZDp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQ6cmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7LS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdy1jb2xvcjpyZ2JhKDE0MCwgMTQw''@;'; put 'put ''LCAxNDAsIC4yNSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC01MDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02''@;'; put 'put ''MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4taWNvbi1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1kYXRh''@;'; put 'put ''Z3JpZC1wbGFjZWhvbGRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWZvbnQtc2l6ZTouOHJlbTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1kaXNhYmxlZC1vcGFjaXR5Oi41NjstLWNsci1kYXRhZ3JpZC1jb2x1''@;'; put 'put ''bW4tdG9nZ2xlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC01MCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5l''@;'; put 'put ''dXRyYWwtMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCl9LmRhdGFncmlke2JvcmRl''@;'; put 'put ''ci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNv''@;'; put 'put ''bG9yLCAjY2NjY2NjKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10YWJsZS1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1iZ2NvbG9yLCB3aGl0ZSk7Y29sb3I6''@;'; put 'put ''IzY2Njtjb2xvcjp2YXIoLS1jbHItdGFibGUtZm9udC1jb2xvciwgIzY2NjY2Nik7bWFyZ2luOjA7bWFyZ2luLXRvcDoxLjJyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQgLmRhdGFncmlkLWNlbGx7Zm9udC1zaXplOi42''@;'; put 'put ''NXJlbTtsaW5lLWhlaWdodDouN3JlbTtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6LjA1cmVtO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci10b3AtY29sb3I6I2U4ZThlODtib3JkZXItdG9wLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvciwgI2U4ZThlOCk7cGFkZGluZzouNTVyZW0gLjZyZW07dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnR7dGV4''@;'; put 'put ''dC1hbGlnbjpsZWZ0fS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQ6Zmlyc3QtY2hpbGQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0Oi4zcmVtfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1ue2NvbG9yOiM2NjY7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXRoZWFkLWNvbG9yLCAjNjY2NjY2KTtmb250LXNpemU6LjU1cmVtO2ZvbnQtd2VpZ2h0OjYwMDtsZXR0ZXItc3BhY2luZzouMDNlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvciwgI2ZhZmFmYSk7dmVydGlj''@;'; put 'put ''YWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS13aWR0aDouMDVyZW07Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojY2NjO2JvcmRlci1ib3R0b20t''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5IC5kYXRhZ3JpZC1yb3c6Zmlyc3QtY2hpbGQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3Jp''@;'; put 'put ''ZC1ib2R5Ky5kYXRhZ3JpZC1ib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDouMDVyZW07Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLXRvcC1jb2xvcjojY2NjO2JvcmRlci10b3AtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvciwgI2NjY2NjYyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czouMXJlbTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigt''@;'; put 'put ''LWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzLCAuMXJlbSl9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czouMXJlbTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIo''@;'; put 'put ''LS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cywgLjFyZW0pfS5kYXRhZ3JpZCAuZGF0YWdyaWQtYm9keTpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1yb3c6bGFzdC1jaGlsZCAuZGF0YWdyaWQtY2VsbDpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1''@;'; put 'put ''czouMXJlbTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzLCAuMXJlbSl9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Omxhc3QtY2hpbGQgLmRhdGFncmlkLXJvdzpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1jZWxsOmxhc3QtY2hpbGR7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOi4xcmVtO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzLCAuMXJlbSl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQtY29tcGFj''@;'; put 'put ''dCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDouM3JlbTtwYWRkaW5nLWJvdHRvbTouMjVyZW19LmRhdGFncmlkLWhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbXMtb3ZlcmZsb3ctc3R5bGU6LW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO292ZXJmbG93OmF1dG87ZmxleDoxIDEgYXV0bzttYXJnaW4tdG9wOi42cmVtfS5kYXRhZ3JpZC1jb250YWluZXJ7d2lkdGg6YXV0bztmb250LXNpemU6LjY1cmVt''@;'; put 'put ''O3BhZGRpbmc6LjU1cmVtIC42cmVtfS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3BhZGRpbmc6LjFyZW0gLjJyZW0gLjE1cmVtO3RleHQtYWxpZ246Y2VudGVyfS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbnstd2Via2l0LWFw''@;'; put 'put ''cGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjto''@;'; put 'put ''ZWlnaHQ6MS41cmVtO3dpZHRoOjEuNXJlbX1idXR0b24uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNv''@;'; put 'put ''bntjb2xvcjojOGM4YzhjO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yLCAjOGM4YzhjKTttYXJnaW4tdG9wOi4xNXJlbX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIHN2Z3t0cmFuc2l0aW9uOnRyYW5zZm9ybSAu''@;'; put 'put ''MnMgZWFzZS1pbi1vdXR9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLnNwaW5uZXJ7bWFyZ2luLXRvcDouM3JlbX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZzouNTVyZW0gLjZyZW19LmRhdGFncmlkLWhlYWRlciwuZGF0YWdyaWQtYm9keSwu''@;'; put 'put ''ZGF0YWdyaWQtcm93LC5kYXRhZ3JpZC1jb2x1bW4sLmRhdGFncmlkLWNlbGwsLmRhdGFncmlkLWZpeGVkLWNvbHVtbntkaXNwbGF5OmJsb2NrfS5kYXRhZ3JpZC1yb3d7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOi4wNXJlbTtib3JkZXItdG9wLXdpZHRoOnZhcigt''@;'; put 'put ''LWNsci10YWJsZS1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItdG9wLWNvbG9yOiNjY2M7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uZGF0YWdyaWQtcm93OmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXRvcDpub25lfS5kYXRhZ3JpZC1y''@;'; put 'put ''b3c6aG92ZXIsLmRhdGFncmlkLXJvdzpob3ZlciAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLCAjZThlOGU4KX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkLC5k''@;'; put 'put ''YXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQgLmRhdGFncmlkLXJvdy1zdGlja3l7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLCBibGFjayk7YmFja2dyb3VuZC1jb2xvcjojZDhlM2U5O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWdsb2Jh''@;'; put 'put ''bC1zZWxlY3Rpb24tY29sb3IsICNkOGUzZTkpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOi0uM3JlbTtib3JkZXIt''@;'; put 'put ''dG9wOi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206LjNyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOi4zcmVtO2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6I2NjYztib3JkZXItcmlnaHQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3c6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9w''@;'; put 'put ''Oi0uMjVyZW07Ym9yZGVyLXRvcDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOi4yNXJlbTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7Ym9yZGVy''@;'; put 'put ''LXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yLCB3aGl0ZSl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2ZmZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wb3Bv''@;'; put 'put ''dmVyLWJnLWNvbG9yLCB3aGl0ZSk7cGFkZGluZzouM3JlbTttYXJnaW4tbGVmdDouM3JlbTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItY29sb3I6I2NjYztib3Jk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSAjOGM4YzhjNDA7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gdmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3ctY29s''@;'; put 'put ''b3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtmb250LXdlaWdodDo0MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFj''@;'; put 'put ''dGlvbi1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7d2lkdGg6MDtoZWlnaHQ6MDttYXJnaW4tdG9wOi0uM3JlbTtib3JkZXItdG9wOi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206LjNyZW0gc29saWQg''@;'; put 'put ''dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOi4zcmVtO2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6I2NjYztib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uZGF0YWdyaWQt''@;'; put 'put ''cm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3c6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7d2lkdGg6MDtoZWlnaHQ6MDttYXJnaW4tdG9wOi0uMjVyZW07Ym9yZGVyLXRvcDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJv''@;'; put 'put ''dHRvbTouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOi4yNXJlbTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yLCB3aGl0''@;'; put 'put ''ZSl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3ZlciwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tcG9wb3Zlci1ob3Zlci1jb2xvciwgI2U4ZThlOCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5hY3RpdmV7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6''@;'; put 'put ''dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1ob3ZlciwgI2U4ZThlOCk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwLCBibGFjayl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2Zm''@;'; put 'put ''ZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yLCB3aGl0ZSk7cGFkZGluZzouM3JlbTttYXJnaW4tbGVmdDouM3JlbTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRl''@;'; put 'put ''ci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSAjOGM4YzhjNDA7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gdmFyKC0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3ctY29sb3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7Ym9yZGVyLWNvbG9yOi4xNXJlbTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMsIC4xNXJlbSk7Zm9udC13ZWlnaHQ6NDAwO3doaXRlLXNwYWNl''@;'; put 'put ''Om5vd3JhcH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3c6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxMDAlO3dpZHRoOjA7aGVpZ2h0OjA7bWFyZ2luLXRvcDotLjNyZW07Ym9yZGVyLXJpZ2h0Oi4zcmVtIHNvbGlkO2Jv''@;'; put 'put ''cmRlci1yaWdodC1jb2xvcjojY2NjO2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JvcmRlci10b3A6LjNyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTouM3JlbSBzb2xpZCB0cmFuc3BhcmVudH0u''@;'; put 'put ''ZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3c6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7d2lkdGg6MDtoZWlnaHQ6MDttYXJnaW4tdG9wOi0uMjVyZW07Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjZmZmO2JvcmRl''@;'; put 'put ''ci10b3A6LjI1cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206LjI1cmVtIHNvbGlkIHRyYW5zcGFyZW50fS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW17Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tdGV4dC1j''@;'; put 'put ''b2xvciwgIzY2NjY2Nik7Zm9udC1zaXplOi43cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjEuMTVyZW07bWFyZ2luOjA7cGFkZGluZzouMDVyZW0gMS4ycmVtIDA7dGV4dC1h''@;'; put 'put ''bGlnbjpsZWZ0O3dpZHRoOjEwMCV9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3ZlciwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tcG9wb3Zlci1ob3Zlci1jb2xvciwgI2U4ZThlOCl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5hY3RpdmV7YmFja2dyb3VuZDoj''@;'; put 'put ''ZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1ob3ZlciwgI2U4ZThlOCk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWZvbnQtY29sb3IsIGJsYWNrKX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFj''@;'; put 'put ''dGlvbi1pdGVtOmZvY3Vze291dGxpbmU6MH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtLmRpc2FibGVkLC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxv''@;'; put 'put ''d2VkO29wYWNpdHk6LjQ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZDpob3ZlciwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cg''@;'; put 'put ''LmFjdGlvbi1pdGVtOmRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0u''@;'; put 'put ''ZGlzYWJsZWQ6Zm9jdXMsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZDphY3RpdmUsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZDpmb2N1c3tiYWNrZ3JvdW5kOjAg''@;'; put 'put ''MDtib3gtc2hhZG93Om5vbmV9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbSBjZHMtaWNvbiwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtIGNsci1pY29ue3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt0''@;'; put 'put ''cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtLjA1cmVtLDApfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwtd3JhcHBlcntmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlse3dpZHRoOmF1dG99LmRhdGFncmlkLXJvdyAu''@;'; put 'put ''ZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowO2JvcmRlcjowfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdHttaW4td2lkdGg6LjRyZW07YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdCAuY2xyLWNoZWNr''@;'; put 'put ''Ym94LXdyYXBwZXJ7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOi0uM3JlbX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3QsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0IGlucHV0e2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdC5jbHItZm9y''@;'; put 'put ''bS1jb250cm9sLWRpc2FibGVkLC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIGlucHV0e2N1cnNvcjpub3QtYWxsb3dlZH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdHttYXJnaW46LS4zNnJl''@;'; put 'put ''bSAwO2hlaWdodDoxLjIzNnJlbX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJpZ2dlcntoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjJyZW19LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LXN0aWNreXt6LWluZGV4''@;'; put 'put ''OjUwMH0uZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvciwgd2hpdGUpO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO3Bvc2l0aW9uOnN0aWNreTtsZWZ0OjA7ei1pbmRleDo1MDJ9LmRh''@;'; put 'put ''dGFncmlkLXJvdy1zdGlja3kgLmRhdGFncmlkLWNlbGw6bGFzdC1jaGlsZDphZnRlcntjb250ZW50OiIiO3dpZHRoOi4wNXJlbTtoZWlnaHQ6Y2FsYygxMDAlIC0gLjVyZW0pO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOi4yNXJlbTtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uZGF0YWdyaWQtcm93LXNjcm9sbGFibGV7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXB9LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlLmlzLXJlcGxhY2Vke2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOnJvd30uZGF0YWdyaWQtcm93LXNjcm9sbGFibGUuaXMtcmVwbGFjZWQgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxsc3tmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSAuZGF0YWdyaWQtY29sdW1uOmxhc3QtY2hpbGQgLmRhdGFncmlkLWNvbHVtbi1z''@;'; put 'put ''ZXBhcmF0b3J7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctZmxleHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZGF0YWdyaWQtcm93LWZsZXggLmRhdGFncmlkLXJvdy1kZXRhaWx7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5k''@;'; put 'put ''YXRhZ3JpZC1yb3ctZmxleCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowfS5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMsLmRhdGFncmlkLXNjcm9sbGluZy1kZXRhaWxze2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpyb3cgbm93''@;'; put 'put ''cmFwfS5kYXRhZ3JpZC1hY3Rpb24tYmFye21hcmdpbi10b3A6MS4ycmVtfS5kYXRhZ3JpZC1hY3Rpb24tYmFyfi5kYXRhZ3JpZC1zcGlubmVye2hlaWdodDpjYWxjKDEwMCUgLSAxLjJyZW0pO3RvcDoxLjJyZW19LmRhdGFncmlkLWhlYWRlcntwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRl''@;'; put 'put ''eDo1MDE7d2lkdGg6YXV0b30uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWJvdHRvbTpub25lfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvd3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xv''@;'; put 'put ''ciwgI2ZhZmFmYSk7Ym9yZGVyLXRvcDpub25lO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS13aWR0aDouMDVyZW07Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1ib3R0b20tY29sb3I6I2NjYzti''@;'; put 'put ''b3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LXN0aWNreSwuZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3c6aG92ZXIsLmRhdGFncmlkLWhlYWRlciAu''@;'; put 'put ''ZGF0YWdyaWQtcm93OmhvdmVyIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yLCAjZmFmYWZhKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZXtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpyb3d9LmRhdGFncmlkLXRhYmxlLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXg6MSAxIGF1dG87YWxpZ24tY29udGVudDpmbGV4LXN0''@;'; put 'put ''YXJ0fS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtYm9keXt3aWR0aDphdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1ue3RleHQtYWxpZ246bGVmdDttaW4td2lkdGg6NC44cmVtO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXI6''@;'; put 'put ''MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbjpmb2N1c3tvdXRsaW5lOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvciBzb2xpZCAuMXJlbTtvdXRsaW5lLW9mZnNldDotLjFyZW19LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLWZpbHRlciwuZGF0YWdyaWQt''@;'; put 'put ''dGFibGUgLmRhdGFncmlkLWNvbHVtbiBjbHItZGctc3RyaW5nLWZpbHRlciwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBjbHItZGctbnVtZXJpYy1maWx0ZXJ7ZGlzcGxheTpmbGV4O29yZGVyOjk5O21hcmdpbi1sZWZ0OmF1dG87YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3Jp''@;'; put 'put ''ZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItaW5wdXQtc3BhY2Vye3dpZHRoOi42cmVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dHt3aWR0aDozLjlyZW19''@;'; put 'put ''LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGV7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRl''@;'; put 'put ''cjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7ZmxvYXQ6cmlnaHQ7dmVydGljYWwtYWxpZ246bWlkZGxlO2hlaWdodDouN3JlbTt3aWR0aDouN3JlbTttYXJnaW4tbGVmdDouM3JlbTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1y''@;'; put 'put ''ZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW59YnV0dG9uLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGUg''@;'; put 'put ''Y2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGUgY2xyLWljb257Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDAsICM4YzhjOGMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''IC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNsci1pY29ue2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsICMwMDcy''@;'; put 'put ''YTMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1v''@;'; put 'put ''cGVuIGNsci1pY29ue2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsICMwMDcyYTMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlcmVkIGNkcy1pY29uLC5kYXRhZ3JpZC10''@;'; put 'put ''YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlcmVkIGNsci1pY29ue2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsICMwMDcyYTMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5k''@;'; put 'put ''YXRhZ3JpZC1maWx0ZXJ7dG9wOjEwMCU7cmlnaHQ6MDttYXJnaW4tdG9wOi4yNHJlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvciwgd2hpdGUpO3BhZGRpbmc6LjlyZW07Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0''@;'; put 'put ''aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVy''@;'; put 'put ''ZW0gIzhjOGM4YzQwO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtIHZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93LWNvbG9yLCByZ2JhKDE0MCwgMTQwLCAxNDAsIC4yNSkpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1i''@;'; put 'put ''b3JkZXJyYWRpdXMsIC4xNXJlbSk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXJ7dG9wOjEwMCU7cmlnaHQ6MDttYXJnaW4tdG9wOi4yNHJlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdy''@;'; put 'put ''aWQtcG9wb3Zlci1iZy1jb2xvciwgd2hpdGUpO3BhZGRpbmc6LjlyZW07Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBv''@;'; put 'put ''cG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItc3R5bGU6c29saWQ7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gIzhjOGM4YzQwO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtIHZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93LWNvbG9yLCByZ2JhKDE0''@;'; put 'put ''MCwgMTQwLCAxNDAsIC4yNSkpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMsIC4xNXJlbSk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFn''@;'; put 'put ''cmlkLWZpbHRlci1jbG9zZS13cmFwcGVye3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIgLmNsb3Nle2Zsb2F0Om5vbmV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3Jp''@;'; put 'put ''ZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWFwcGx5e21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4tZmxleHtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNl''@;'; put 'put ''Om5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvbnQtY29sb3IsICM2NjY2NjYpO3RleHQtYWxpZ246''@;'; put 'put ''bGVmdDtmbGV4OjEgMSBhdXRvO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOmNlbnRlcjtkaXNwbGF5OmZsZXh9YnV0dG9uLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRh''@;'; put 'put ''dGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxlIC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uLmJ0bntoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0fS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUgLmNsci1j''@;'; put 'put ''aGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOi0uNDhyZW19LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGJ1dHRvbi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUgLnNvcnQtaWNvbntjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwLCAjMDA3MmEzKTttYXJnaW4tbGVmdDphdXRvO2hlaWdodDouN3JlbTt3aWR0aDou''@;'; put 'put ''N3JlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3J7cG9zaXRpb246cmVsYXRpdmU7bGVmdDouNnJlbTtmbGV4OjAgMCBhdXRvO3dpZHRoOi4wNXJlbTt3aWR0aDp2YXIoLS1jbHItZ2xvYmFs''@;'; put 'put ''LWJvcmRlcndpZHRoLCAuMDVyZW0pO29yZGVyOjEwMDttYXJnaW4tbGVmdDphdXRvO2hlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OmNh''@;'; put 'put ''bGMoMTAwJSArIC42cmVtIC0gLjA1cmVtKTt3aWR0aDouMDVyZW07dG9wOi0uMjVyZW07bGVmdDowO2JhY2tncm91bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6''@;'; put 'put ''MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOi42NXJlbTtyaWdodDotLjNyZW07dG9wOi0uM3JlbTtjdXJzb3I6Y29sLXJlc2l6ZTtoZWlnaHQ6Y2FsYygxMDAlICsgLjZyZW0gLSAuMDVyZW0pO3otaW5kZXg6''@;'; put 'put ''NTAxfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJh''@;'; put 'put ''dG9yIC5kYXRhZ3JpZC1jb2x1bW4tcmVzaXplLXRyYWNrZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0uNnJlbTtkaXNwbGF5Om5vbmU7d2lkdGg6LjA1cmVtO2hlaWdodDowO2JvcmRlci1yaWdodC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiM3OWM2ZTY7Ym9yZGVyLXJpZ2h0''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tMzAwLCAjNzljNmU2KTtib3JkZXItcmlnaHQtd2lkdGg6LjA1cmVtO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7Y3Vyc29yOmNvbC1yZXNp''@;'; put 'put ''emV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlci5vbi1hcnJvdy1rZXktcmVzaXple3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLW91dH0uZGF0YWdyaWQtdGFibGUg''@;'; put 'put ''LmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZXhjZWVkZWQtbWF4e2JvcmRlci1yaWdodDouMDVyZW0gZG90dGVkIHJnYmEoMjE5LDMzLDAsLjMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5z''@;'; put 'put ''aWducG9zdHttYXJnaW46LS4zNnJlbSAwO2hlaWdodDoxLjIzNnJlbX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6MS4ycmVtfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uLmRhdGFncmlkLXNlbGVjdCwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uLmRhdGFncmlkLXJvdy1hY3Rpb25ze21heC13''@;'; put 'put ''aWR0aDoxLjlyZW07bWluLXdpZHRoOjEuOXJlbX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGx7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmxlZnQ7bWluLXdpZHRoOjQuOHJlbTtib3JkZXI6MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtZml4ZWQtd2lk''@;'; put 'put ''dGh7ZmxleDowIDAgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtZml4ZWQtY29sdW1ue2ZsZXg6MCAwIDEuOXJlbTttYXgtd2lkdGg6MS45cmVtO21pbi13aWR0aDoxLjlyZW19LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLXJvdy1h''@;'; put 'put ''Y3Rpb25ze2JhY2tncm91bmQ6MCAwfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3BhZGRpbmc6LjFyZW0gLjJyZW0gLjE1cmVtO3RleHQtYWxpZ246Y2VudGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbDpmb2N1c3tvdXRs''@;'; put 'put ''aW5lOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvciBzb2xpZCAuMXJlbTtvdXRsaW5lLW9mZnNldDotLjFyZW19LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1t''@;'; put 'put ''cy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9u''@;'; put 'put ''LXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGUgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlIGNsci1pY29ue2NvbG9yOiM4YzhjOGM7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWljb24tY29sb3IsICM4YzhjOGMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZTphY3RpdmUgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24t''@;'; put 'put ''dG9nZ2xlOmFjdGl2ZSBjbHItaWNvbntjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlLCAjNjY2NjY2KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmNsci10b2dnbGUtd3JhcHBlcnttYXJnaW4tdG9wOi0uNjZyZW07cGFkZGluZy10b3A6''@;'; put 'put ''LjQycmVtfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVye2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLWNvbG9yOiNjY2M7Ym9yZGVyLXRvcC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItdG9wLXdpZHRoOi4wNXJlbTtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlcntiYWNrZ3Jv''@;'; put 'put ''dW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItdGFibGUtYmdjb2xvciwgd2hpdGUpO2Rpc3BsYXk6bm9uZTt3aWR0aDoxMDAlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcGxhY2Vob2xkZXIuZGF0YWdyaWQtZW1wdHl7Ym9yZGVyLXRvcDowO3BhZGRpbmc6LjZyZW07ZGlzcGxheTpm''@;'; put 'put ''bGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtmb250LXNpemU6LjhyZW07Zm9udC1zaXplOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXNpemUsIC44cmVtKTtjb2xvcjojYjNiM2IzO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb2xvciwgI2IzYjNiMyl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlciAuZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2V7aGVpZ2h0OjNyZW07d2lkdGg6M3JlbTttYXJnaW4tYm90dG9tOi42cmVtO2JhY2tn''@;'; put 'put ''cm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2MCUyMDcy''@;'; put 'put ''JTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVm''@;'; put 'put ''cyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2VsbGlwc2UlMjBpZCUzRCUyMnBhdGgtMSUyMiUyMGN4JTNEJTIyMzAlMjIlMjBjeSUzRCUyMjYxLjc2NjY2NjclMjIlMjByeCUzRCUyMjE1LjQ1MTI5MDQlMjIlMjByeSUzRCUyMjQuNzMzMzMzMzMlMjIlM0UlM0MlMkZlbGxpcHNl''@;'; put 'put ''JTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbWFzayUyMGlkJTNEJTIybWFzay0yJTIyJTIwbWFza0NvbnRlbnRVbml0cyUzRCUyMnVzZXJTcGFjZU9uVXNlJTIyJTIwbWFza1VuaXRzJTNEJTIyb2JqZWN0Qm91bmRpbmdCb3glMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIy''@;'; put 'put ''JTIwd2lkdGglM0QlMjIzMC45MDI1ODA4JTIyJTIwaGVpZ2h0JTNEJTIyOS40NjY2NjY2NyUyMiUyMGZpbGwlM0QlMjJ3aGl0ZSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCUyMiUyM3BhdGgtMSUyMiUzRSUzQyUy''@;'; put 'put ''RnVzZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm1hc2slM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyUGFnZS0xJTIyJTIwc3Ryb2tlJTNEJTIybm9uZSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjElMjIlMjBm''@;'; put 'put ''aWxsJTNEJTIybm9uZSUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwaWQlM0QlMjJBcnRib2FyZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMGlkJTNEJTIyT3ZhbC0x''@;'; put 'put ''MCUyMiUyMHN0cm9rZSUzRCUyMiUyM0MxREZFRiUyMiUyMG1hc2slM0QlMjJ1cmwoJTIzbWFzay0yKSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIuOCUyMiUyMHN0cm9rZS1saW5lY2FwJTNEJTIyc3F1YXJlJTIyJTIwc3Ryb2tlLWRhc2hhcnJheSUzRCUyMjMlMkM2JTJDMyUyQzUlMjIlMjB4''@;'; put 'put ''bGluayUzQWhyZWYlM0QlMjIlMjNwYXRoLTElMjIlM0UlM0MlMkZ1c2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zOC40NjEzNjQ3JTJDMTguMTY0MjQ1NiUyMEwzMC45ODkwMTM3JTJDMzQuOTE0MTg0NiUyMEwzMSUyQzQ3JTIw''@;'; put 'put ''TDMyLjU5Nzc3ODMlMkM0Ni41MTY3MjM2JTIwTDMyLjU5Nzc3ODMlMkMzNC45MTQxODQ2JTIwTDUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwQzUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwNDguNjI5NTE2NiUyQzE2LjY1NDI5NjklMjA0NC45NjI4OTA2JTJDMTcuMzM5MjMzNCUyMEM0MS4y''@;'; put 'put ''OTYyNjQ2JTJDMTguMDI0MTY5OSUyMDM4LjQ2MTM2NDclMkMxOC4xNjQyNDU2JTIwMzguNDYxMzY0NyUyQzE4LjE2NDI0NTYlMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NSUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNNC43NDYzOTIyNiUyQzEyLjU2NjE4NTUlMjBMNC42MjA2NTcyNiUyQzEyLjE2MDUzNDglMjBMNS4zNTE1NDE0JTJDMTEuMTYyNTA0NCUyMEw1Ljc3NjIyMzg1JTJDMTEuMTU5OTM5JTIwTDYuMjA5MzYzMDklMkMxMi41NTczNDgxJTIw''@;'; put 'put ''TDQuNzQ2MzkyMjYlMkMxMi41NjYxODU1JTIwWiUyME02LjIwOTM2MzA5JTJDMTIuNTU3MzQ4MSUyMEw2LjMyNTQyNjMyJTJDMTIuOTMxNzk1NCUyMEwyOC40OTYzODU1JTJDMzQuODc5NjcxOCUyMEwyOC40OTYzODU1JTJDNDcuODA5NjY5MSUyMEwzMi42JTJDNDYuNDgzNjUxMyUyMEwzMi42''@;'; put 'put ''JTJDMzQuODk5MjM2NSUyMEw1My45NzM0OTQlMkMxMi43MDM1ODEzJTIwTDUzLjk3MzQ5NCUyQzEyLjI2ODgyMDElMjBMNi4yMDkzNjMwOSUyQzEyLjU1NzM0ODElMjBaJTIwTTU1LjM3MzQ5NCUyQzEwLjg2MDMzNzYlMjBMNTUuMzczNDk0JTJDMTMuMjY4MDY2NCUyMEwzNCUyQzM1LjQ2Mzcy''@;'; put 'put ''MTYlMjBMMzQlMkM0Ny41MDI1NDAxJTIwTDI3LjA5NjM4NTUlMkM0OS43MzMzMzMzJTIwTDI3LjA5NjM4NTUlMkMzNS40NjM3MjE5JTIwTDUuMDkxNzk2ODglMkMxMy42ODA1NDIlMjBMNC4zMTMyNTMwMSUyQzExLjE2ODc3NjQlMjBMNTUuMzczNDk0JTJDMTAuODYwMzM3NiUyMFolMjIlMjBp''@;'; put 'put ''ZCUzRCUyMlBhdGgtMTQ5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NlbGxpcHNlJTIwaWQlM0QlMjJPdmFsLTklMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwY3glM0QlMjIz''@;'; put 'put ''MCUyMiUyMGN5JTNEJTIyMTEuNzg1NjU0JTIyJTIwcnglM0QlMjIyNiUyMiUyMHJ5JTNEJTIyNi43ODU2NTQwMSUyMiUzRSUzQyUyRmVsbGlwc2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zMCUyQzE3LjE3MTMwOCUyMEMzNi44''@;'; put 'put ''NzcyMTc3JTJDMTcuMTcxMzA4JTIwNDMuMzExMjI4MiUyQzE2LjQ2MTA3MDElMjA0OC4wMzEyMzcxJTJDMTUuMjI5MjEwNiUyMEM1MC4yNzc3NjExJTJDMTQuNjQyODk3NyUyMDUyLjA1MDc2MTklMkMxMy45NTc5Njc3JTIwNTMuMjIxNjIzMSUyQzEzLjIzNTQ5NzMlMjBDNTQuMTkzODU2NSUy''@;'; put 'put ''QzEyLjYzNTU4ODYlMjA1NC42JTJDMTIuMTE3NTg5MSUyMDU0LjYlMkMxMS43ODU2NTQlMjBDNTQuNiUyQzExLjQ1MzcxODklMjA1NC4xOTM4NTY1JTJDMTAuOTM1NzE5NCUyMDUzLjIyMTYyMzElMkMxMC4zMzU4MTA3JTIwQzUyLjA1MDc2MTklMkM5LjYxMzM0MDMyJTIwNTAuMjc3NzYxMSUy''@;'; put 'put ''QzguOTI4NDEwMzQlMjA0OC4wMzEyMzcxJTJDOC4zNDIwOTc0NiUyMEM0My4zMTEyMjgyJTJDNy4xMTAyMzc5NSUyMDM2Ljg3NzIxNzclMkM2LjQlMjAzMCUyQzYuNCUyMEMyMy4xMjI3ODIzJTJDNi40JTIwMTYuNjg4NzcxOCUyQzcuMTEwMjM3OTUlMjAxMS45Njg3NjI5JTJDOC4zNDIwOTc0''@;'; put 'put ''NiUyMEM5LjcyMjIzODg2JTJDOC45Mjg0MTAzNCUyMDcuOTQ5MjM4MTQlMkM5LjYxMzM0MDMyJTIwNi43NzgzNzY4OSUyQzEwLjMzNTgxMDclMjBDNS44MDYxNDM1JTJDMTAuOTM1NzE5NCUyMDUuNCUyQzExLjQ1MzcxODklMjA1LjQlMkMxMS43ODU2NTQlMjBDNS40JTJDMTIuMTE3NTg5MSUy''@;'; put 'put ''MDUuODA2MTQzNSUyQzEyLjYzNTU4ODYlMjA2Ljc3ODM3Njg5JTJDMTMuMjM1NDk3MyUyMEM3Ljk0OTIzODE0JTJDMTMuOTU3OTY3NyUyMDkuNzIyMjM4ODYlMkMxNC42NDI4OTc3JTIwMTEuOTY4NzYyOSUyQzE1LjIyOTIxMDYlMjBDMTYuNjg4NzcxOCUyQzE2LjQ2MTA3MDElMjAyMy4xMjI3''@;'; put 'put ''ODIzJTJDMTcuMTcxMzA4JTIwMzAlMkMxNy4xNzEzMDglMjBaJTIwTTMwJTJDMTguNTcxMzA4JTIwQzE1LjY0MDU5NjUlMkMxOC41NzEzMDglMjA0JTJDMTUuNTMzMjY3MiUyMDQlMkMxMS43ODU2NTQlMjBDNCUyQzguMDM4MDQwNzglMjAxNS42NDA1OTY1JTJDNSUyMDMwJTJDNSUyMEM0NC4z''@;'; put 'put ''NTk0MDM1JTJDNSUyMDU2JTJDOC4wMzgwNDA3OCUyMDU2JTJDMTEuNzg1NjU0JTIwQzU2JTJDMTUuNTMzMjY3MiUyMDQ0LjM1OTQwMzUlMkMxOC41NzEzMDglMjAzMCUyQzE4LjU3MTMwOCUyMFolMjIlMjBpZCUzRCUyMk92YWwtOS1Db3B5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUz''@;'; put 'put ''RSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0xOC4yNjA4NjQzJTJDNy4xNDU2Mjk4OCUyMEwyMi43MjczNTYlMkMxNi45MDQ3MjQxJTIwQzIyLjcyNzM1NiUyQzE2LjkwNDcyNDElMjAxNS4zMDA2NTkyJTJDMTYu''@;'; put 'put ''MzkxMTc0MyUyMDEwLjI3NjAwMSUyQzE0Ljc1MTE1OTclMjBDNS4yNTEzNDI3NyUyQzEzLjExMTE0NSUyMDUuMzgwMzEwMDYlMkMxMS44Mjg0MzAyJTIwNS4zODAzMTAwNiUyQzExLjY4ODI5MzUlMjBDNS4zODAzMTAwNiUyQzEwLjQ4MzI4MzElMjA4LjE2NjMzMTUyJTJDOS40MTg3NzcxNiUy''@;'; put 'put ''MDExLjExNDU2MyUyQzguNTczMjQyMTklMjBDMTQuNTQ5MzE5JTJDNy41ODgxNzQ5MiUyMDE4LjI2MDg2NDMlMkM3LjE0NTYyOTg4JTIwMTguMjYwODY0MyUyQzcuMTQ1NjI5ODglMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NiUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZw''@;'; put 'put ''YXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElM0MlMkZzdmclM0UiKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4uZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdy''@;'; put 'put ''aWQtaGlkZGVuLWNvbHVtbi5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMgLmRhdGFncmlkLWNlbGw6bm90KC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0KTpub3QoLmRhdGFncmlkLXJvdy1hY3Rpb25z''@;'; put 'put ''KTpub3QoLmRhdGFncmlkLXNlbGVjdCl7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7ZGlzcGxheTpibG9jaztwYWRkaW5nLXRvcDouNTVyZW19LmRhdGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93''@;'; put 'put ''LWRldGFpbCAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1ue2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1yb3ctZGV0YWlsIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3BhZGRpbmctdG9wOi4xcmVtfS5kYXRhZ3JpZC1yb3ctcmVw''@;'; put 'put ''bGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwuZGF0YWdyaWQtY29udGFpbmVye2JvcmRlci10b3A6LjA1cmVtIHNvbGlkICNjY2N9LmRhdGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbC5kYXRhZ3JpZC1jb250YWluZXIgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcDpu''@;'; put 'put ''b25lfS5kYXRhZ3JpZC1mb290ZXJ7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyBub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6c3RyZXRjaDtwYWRkaW5nOjAgLjZyZW07bGluZS1oZWlnaHQ6MS42NXJlbTtmb250LXNpemU6''@;'; put 'put ''LjU1cmVtO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yLCAjZmFmYWZhKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZS1mb290ZXItYm9yZGVyLXRv''@;'; put 'put ''cC1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOi4xNXJlbTtib3JkZXItYm90''@;'; put 'put ''dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOi4xNXJlbTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pfS5kYXRhZ3JpZC1m''@;'; put 'put ''b290ZXIgLnBhZ2luYXRpb257ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bGluZS1oZWlnaHQ6MS44cmVtfS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tc2l6ZXtkaXNwbGF5OmJsb2NrO2ZsZXg6MSAx''@;'; put 'put ''IGF1dG87d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1zaXplIC5jbHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXJ7dG9wOi42cmVtfS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tc2l6ZSAuY2xyLXBhZ2Utc2l6ZS1zZWxl''@;'; put 'put ''Y3R7Zm9udC1zaXplOjEwMCU7bWFyZ2luLWxlZnQ6LjZyZW07aGVpZ2h0OjEuMnJlbTtsaW5lLWhlaWdodDoxLjJyZW07dmVydGljYWwtYWxpZ246bWlkZGxlfS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tc2l6ZSsucGFnaW5hdGlvbi1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDoxLjJy''@;'; put 'put ''ZW19LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1kZXNjcmlwdGlvbnt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1saXN0e21hcmdpbi1sZWZ0OjEuMnJlbTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1mb290ZXIg''@;'; put 'put ''LmNvbHVtbi1zd2l0Y2gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb257bWluLXdpZHRoOi45cmVt''@;'; put 'put ''O3BhZGRpbmctbGVmdDouM3JlbTtwYWRkaW5nLXJpZ2h0Oi4zcmVtO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7Ym9yZGVyLWNvbG9yOiM4YzhjOGM7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1jb2xvciwgIzhjOGM4Yyk7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjojZmFmYWZhO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvciwgI2ZhZmFmYSk7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWNvbG9yLCAjNjY2NjY2KX0uZGF0YWdy''@;'; put 'put ''aWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpob3Zlcntib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWhvdmVyLWNvbG9yLCAjNjY2NjY2KTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yLCB3aGl0ZSk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yLCBibGFjayl9LmRh''@;'; put 'put ''dGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb246YWN0aXZlLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmZvY3Vze2JveC1zaGFkb3c6bm9uZTtib3JkZXItY29sb3I6''@;'; put 'put ''IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWFjdGl2ZS1jb2xvciwgIzY2NjY2Nik7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1hY3Rp''@;'; put 'put ''dmUtY29sb3IsICNmMmYyZjIpO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtdGV4dC1hY3RpdmUtY29sb3IsICM2NjY2NjYpfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXN3aXRjaHtib3JkZXItcmFkaXVz''@;'; put 'put ''Oi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yLCB3aGl0ZSk7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSAjOGM4Yzhj''@;'; put 'put ''NDA7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gdmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3ctY29sb3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7cGFkZGluZzouOXJlbTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXRvcDpub25lO3dpZHRoOjEyLjVyZW07''@;'; put 'put ''ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjEwNTB9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtY29udGVudHttYXgtaGVpZ2h0OjE1cmVtO292ZXJmbG93LXk6YXV0bzttaW4taGVpZ2h0OjIu''@;'; put 'put ''NHJlbX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi1zd2l0Y2h7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1k''@;'; put 'put ''YXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtICM4YzhjOGM0MDtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSB2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdy1jb2xv''@;'; put 'put ''ciwgcmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpKTtwYWRkaW5nOi45cmVtO3dpZHRoOjEyLjVyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjEwNTB9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tc3dpdGNoIC5zd2l0''@;'; put 'put ''Y2gtaGVhZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOi44cmVtO3BhZGRpbmctYm90dG9tOi42cmVtO2xpbmUtaGVpZ2h0OjEuMnJlbX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIg''@;'; put 'put ''LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9ue21pbi13aWR0aDouOXJlbTttYXJnaW46MDtwYWRkaW5nOjB9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbntjb2xvcjoj''@;'; put 'put ''YjNiM2IzO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWNvbG9yLCAjYjNiM2IzKX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9uIGNkcy1pY29uOmhvdmVy''@;'; put 'put ''e2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtaG92ZXItY29sb3IsICMwMDcyYTMpfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXN3aXRjaCAuc3dpdGNoLWNvbnRlbnR7bWF4LWhl''@;'; put 'put ''aWdodDoxNXJlbTtvdmVyZmxvdy15OmF1dG87bWluLWhlaWdodDoxLjI1cmVtfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXN3aXRjaCAuc3dpdGNoLWNvbnRlbnQgbGl7bGluZS1oZWlnaHQ6MS4ycmVtO3BhZGRpbmctbGVmdDouMXJlbX0uZGF0YWdy''@;'; put 'put ''aWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1mb290ZXIgLmJ0bnttYXJnaW46MDtwYWRkaW5nOjB9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5hY3Rpb24t''@;'; put 'put ''cmlnaHR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMCV9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmRhdGFn''@;'; put 'put ''cmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtjdXJzb3I6ZGVmYXVsdDttYXJnaW4tcmlnaHQ6LjQ1cmVtfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1j''@;'; put 'put ''aGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzhjOGM4YztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTYwMCwgIzhjOGM4Yyl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQg''@;'; put 'put ''LmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDphZnRlcntib3JkZXItbGVmdC1jb2xvcjojZmZmO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTAsIHdoaXRlKTtib3Jk''@;'; put 'put ''ZXItYm90dG9tLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wLCB3aGl0ZSl9LmRhdGFncmlkLXNwaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''O3dpZHRoOjEwMCU7dG9wOi42cmVtO2hlaWdodDpjYWxjKDEwMCUgLSAuNnJlbSk7YmFja2dyb3VuZC1jb2xvcjojZmZmOTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpKTt6LWluZGV4OjU5MH0u''@;'; put 'put ''ZGF0YWdyaWQtc2VsZWN0IC5jbHItY29udHJvbC1sYWJlbHttaW4taGVpZ2h0Oi42cmVtO21hcmdpbi10b3A6LS4yNHJlbTtwYWRkaW5nLWxlZnQ6LjdyZW19LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWhlYWRlcnttaW4taGVpZ2h0OjEuMnJlbX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yOmFmdGVye2hlaWdodDpjYWxjKDEwMCUgKyAuMjVyZW0pO3RvcDpjYWxjKC0uMjUqLjZyZW0gKyAuMDVyZW0pfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jZWxsIGNsci1pY29ue21hcmdpbi10b3A6LS4ycmVtO21h''@;'; put 'put ''cmdpbi1ib3R0b206LS4xNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjA1cmVtKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCBjZHMtaWNvbnttYXJnaW4tdG9wOi0uMnJlbTttYXJnaW4tYm90dG9tOi0uMTVyZW19LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWNlbGwg''@;'; put 'put ''LmJhZGdle21hcmdpbi10b3A6LS4xNXJlbTttYXJnaW4tYm90dG9tOi0uMDVyZW19LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLnNwaW5uZXJ7''@;'; put 'put ''bWFyZ2luLXRvcDouMTVyZW19LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8t''@;'; put 'put ''YXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDoxLjJyZW07d2lkdGg6MS4ycmVtO291dGxpbmUtb2Zmc2V0Oi0uMnJlbX1idXR0b24uZGF0YWdyaWQtY29tcGFjdCAu''@;'; put 'put ''ZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbnttYXJnaW46MH0uZGF0''@;'; put 'put ''YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jZWxse3BhZGRpbmc6MH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZy10b3A6LjNyZW07cGFkZGluZy1ib3R0b206LjI1cmVt''@;'; put 'put ''fS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJpZ2dlciBjZHMtaWNvbjpub3QoW3NoYXBlPWluZm8tY2lyY2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tdHJpYW5nbGVdLFtzaGFwZT1leGNsYW1hdGlvbi1jaXJjbGVdLFtz''@;'; put 'put ''aGFwZT1jaGVjay1jaXJjbGVdLFtzaGFwZT1pbmZvXSxbc2hhcGU9ZXJyb3JdKSwuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXIgY2xyLWljb246bm90KFtzaGFwZT1pbmZvLWNpcmNsZV0sW3NoYXBlPWV4Y2xh''@;'; put 'put ''bWF0aW9uLXRyaWFuZ2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tY2lyY2xlXSxbc2hhcGU9Y2hlY2stY2lyY2xlXSxbc2hhcGU9aW5mb10sW3NoYXBlPWVycm9yXSl7aGVpZ2h0OjEuMDVyZW07d2lkdGg6MS4wNXJlbX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVye3BhZGRpbmc6''@;'; put 'put ''MCAuNnJlbTtsaW5lLWhlaWdodDoxLjE1cmVtfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb257bGluZS1oZWlnaHQ6MS4ycmVtfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2ds''@;'; put 'put ''ZS0tYWN0aW9ue21hcmdpbjowO291dGxpbmUtb2Zmc2V0Oi0uMnJlbX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQrbGFiZWx7dG9wOjB9LmRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbntmbGV4OjEgMSBhdXRvO2ZsZXgtd3JhcDpub3dyYXA7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpyaWdodDttYXJnaW46YXV0byAwfS5wYWdpbmF0aW9uLWxpc3R7''@;'; put 'put ''bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50e2JhY2tncm91bmQ6MCAwO2JhY2tncm91bmQtY29sb3I6I2Zm''@;'; put 'put ''ZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yLCB3aGl0ZSk7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVy''@;'; put 'put ''LXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtsaW5lLWhl''@;'; put 'put ''aWdodDoxLjJyZW07Zm9udC1zaXplOi41NXJlbTttaW4td2lkdGg6MS4ycmVtO3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50OmZvY3VzLC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tY3Vy''@;'; put 'put ''cmVudC5jbHItZm9jdXN7YmFja2dyb3VuZDowIDA7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzQ5YWVkYTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWZvY3VzLWNvbG9yLCAjNDlhZWRhKTtib3gtc2hhZG93OjAgMCAu''@;'; put 'put ''MDVyZW0gIzQ5YWVkYTtib3gtc2hhZG93OjAgMCB2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pIHZhcigtLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1mb2N1cy1jb2xvciwgIzQ5YWVkYSl9LnBhZ2luYXRpb24tbGlzdD4qe3BhZGRpbmc6MCAuMTJy''@;'; put 'put ''ZW19LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWxhc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1wcmV2aW91cywucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW59LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdDpkaXNhYmxlZCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWxhc3Q6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlz''@;'; put 'put ''dCAucGFnaW5hdGlvbi1wcmV2aW91czpkaXNhYmxlZCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHQ6ZGlzYWJsZWR7Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1idG4tZGlzYWJsZWQtY29sb3IsICM4YzhjOGMpO29wYWNpdHk6LjU2''@;'; put 'put ''O29wYWNpdHk6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24tYnRuLWRpc2FibGVkLW9wYWNpdHksIC41Nil9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLXByZXZpb3Vze21hcmdpbi1yaWdodDouNnJlbX0ucGFnaW5h''@;'; put 'put ''dGlvbi1saXN0IC5wYWdpbmF0aW9uLWxhc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1uZXh0e21hcmdpbi1sZWZ0Oi42cmVtfS5wYWdpbmF0aW9uLWxpc3QgYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5v''@;'; put 'put ''bmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24tYnRuLWNvbG9yLCAjNjY2NjY2KTtj''@;'; put 'put ''dXJzb3I6cG9pbnRlcn1idXR0b24ucGFnaW5hdGlvbi1saXN0IGJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtY2VsbC13aWR0aC16ZXJve2JvcmRlcjowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O3dpZHRoOjA7ZmxleDowIDAgYXV0byFpbXBvcnRhbnQ7bWluLXdpZHRo''@;'; put 'put ''OjAhaW1wb3J0YW50O2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kYXRhZ3JpZC1vdXRlci13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b30uZGF0YWdyaWQtaW5uZXItd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO292ZXJmbG93OmF1dG87bWluLXdpZHRoOjEycmVtfS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBkaXYuZGF0YWdyaWQtdGFibGV7bWF4LXdpZHRoOjEwMCU7b3ZlcmZs''@;'; put 'put ''b3c6aGlkZGVufS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBjbHItZGctY2VsbHt3aWR0aDoxMDAlIWltcG9ydGFudH0uZGF0YWdyaWQtZGV0YWlsLW9wZW4+LmRhdGFncmlkLW91dGVyLXdyYXBwZXI+LmRhdGFn''@;'; put 'put ''cmlkLWlubmVyLXdyYXBwZXIgY2xyLWRnLWNvbHVtbjpmaXJzdC1jaGlsZHt3aWR0aDphdXRvIWltcG9ydGFudH0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlke2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLXJpZ2h0Om5vbmV9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5k''@;'; put 'put ''YXRhZ3JpZC1pbm5lci13cmFwcGVye3dpZHRoOjM0JX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciwuZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLXJvd3tib3JkZXItcmlnaHQ6LjA1cmVtIHNvbGlkICNjY2N9LmRhdGFncmlkLWRl''@;'; put 'put ''dGFpbC1vcGVuIC5kYXRhZ3JpZC1mb290ZXJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLnBhZ2luYXRpb257d2lkdGg6MTAwJX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLnBhZ2luYXRpb24tZGVzY3JpcHRpb24tY29tcGFjdHt0ZXh0LWFsaWdu''@;'; put 'put ''OmxlZnQ7ZmxleDoxfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWxpc3R7bWFyZ2luLXJpZ2h0OjB9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3Blbntwb3NpdGlvbjpyZWxhdGl2ZX0uZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuOmJlZm9yZXtjb250''@;'; put 'put ''ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjouNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNjY2M7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3Jk''@;'; put 'put ''ZXItY29sb3IsICNjY2NjY2MpO3RvcDouNXJlbTtyaWdodDowfS5kYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW46YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6LjQ1cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1j''@;'; put 'put ''b2xvcjojZmZmO2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvciwgd2hpdGUpO3RvcDouNTVyZW07cmlnaHQ6LS4wNXJlbX0uZGF0YWdyaWQtZGV0YWlsLXBhbmV7bWFyZ2luLXRvcDouNnJlbTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13''@;'; put 'put ''aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRlZmF1bHQtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItbGVmdDpub25lO2JvcmRl''@;'; put 'put ''ci10b3AtcmlnaHQtcmFkaXVzOi4xNXJlbTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czouMTVyZW07Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWdsb2Jh''@;'; put 'put ''bC1ib3JkZXJyYWRpdXMsIC4xNXJlbSk7YmFja2dyb3VuZDojZmZmO2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IsIHdoaXRlKTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jaztmbGV4LWdyb3c6Mjt3aWR0aDo2NiV9LmRhdGFncmlkLWRldGFpbC1w''@;'; put 'put ''YW5lLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvdmVyZmxvdzphdXRvO2hlaWdodDoxMDAlfS5kYXRhZ3JpZC1kZXRhaWwtYm9keXtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MCAxLjJyZW19LmRhdGFncmlkLWRldGFpbC1oZWFkZXJ7ZmxleDowIDAgYXV0bztm''@;'; put 'put ''b250LXNpemU6LjlyZW07bGluZS1oZWlnaHQ6MS42OHJlbTtwYWRkaW5nLWxlZnQ6MS4ycmVtO21hcmdpbi10b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyLXRpdGxle2ZsZXg6MSAxIGF1''@;'; put 'put ''dG87cGFkZGluZy10b3A6LjhyZW19LmRhdGFncmlkLWRldGFpbC1oZWFkZXIgLmRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3Nle2ZsZXg6MSAxIDEuOHJlbTtwYWRkaW5nOjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZGF0YWdyaWQtZGV0YWlsLWhlYWRlciAuZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UgLmJ0bi5idG4tbGlua3ttYXJnaW4tdG9wOi44cmVtO21hcmdpbi1ib3R0b206MDtwYWRkaW5nLXJpZ2h0OjB9LmRhdGFncmlkLWRldGFpbC1oZWFkZXIgLmRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlIC5idG4uYnRuLWxpbmsgY2RzLWljb257Y29s''@;'; put 'put ''b3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItbW9kYWwtY2xvc2UtY29sb3IsICM4YzhjOGMpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXR7cGFkZGluZzowO3RleHQtYWxpZ246Y2VudGVyfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOi4zcmVtIC40NXJlbX0u''@;'; put 'put ''ZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDti''@;'; put 'put ''b3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6LjFyZW0gLjJyZW0gLjE1cmVtfWJ1dHRvbi5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRh''@;'; put 'put ''dGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbi5pcy1vcGVue2JhY2tncm91bmQtY29sb3I6IzAwNzJhMztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbi1vcGVuLWJnLWNvbG9yLCAjMDA3MmEzKTtib3Jk''@;'; put 'put ''ZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24uaXMtb3BlbiAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb257Y29sb3I6''@;'; put 'put ''I2ZmZjtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1pY29uLWNvbG9yLCB3aGl0ZSl9LmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb257Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtaWNv''@;'; put 'put ''bi1jb2xvciwgIzhjOGM4Yyk7bWFyZ2luLXRvcDouMXJlbX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6LjNyZW19LmRhdGFncmlkLWRldGFpbC1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZzouNTVyZW0gLjZyZW19LmRhdGFncmlkLWRldGFpbC1vdmVy''@;'; put 'put ''bGF5LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVye2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtZGV0YWlsLW92ZXJsYXkgLmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRlci1sZWZ0Oi4wNXJlbSBzb2xpZCAjY2NjO2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6LjE1cmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRl''@;'; put 'put ''ci1sZWZ0Oi4wNXJlbSBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6LjE1cmVtfX0uY29sdW1uLXN3aXRjaHtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO3BhZGRpbmc6LjlyZW07YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjojZmZmO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IsIHdoaXRlKTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXIt''@;'; put 'put ''Y29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSAjOGM4YzhjNDA7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gdmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJz''@;'; put 'put ''LWJveC1zaGFkb3ctY29sb3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7d2lkdGg6MTIuNXJlbTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3otaW5kZXg6MTA1MH0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OnNwYWNlLWJldHdlZW47Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTouOHJlbTtwYWRkaW5nLWJvdHRvbTouNnJlbTtsaW5lLWhlaWdodDoxLjJyZW19LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDEsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDIsLmNvbHVtbi1zd2l0''@;'; put 'put ''Y2ggLnN3aXRjaC1oZWFkZXIgaDMsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDQsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDUsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDZ7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3IsICM2NjY2NjYp''@;'; put 'put ''O2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6LjhyZW07bGluZS1oZWlnaHQ6MS4ycmVtO21hcmdpbjowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbnttaW4td2lkdGg6LjlyZW07bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1''@;'; put 'put ''dHRvbiBjZHMtaWNvbntjb2xvcjojYjNiM2IzO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWNvbG9yLCAjYjNiM2IzKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b24gY2RzLWljb246aG92ZXJ7Y29sb3I6IzAwNzJhMztjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1ob3Zlci1jb2xvciwgIzAwNzJhMyl9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1jb250ZW50e21heC1oZWlnaHQ6MTVyZW07b3ZlcmZsb3cteTphdXRvO21pbi1oZWlnaHQ6MS4yNXJlbX0uY29sdW1uLXN3aXRj''@;'; put 'put ''aCAuc3dpdGNoLWNvbnRlbnQgbGl7bGluZS1oZWlnaHQ6MS4ycmVtO3BhZGRpbmctbGVmdDouMXJlbX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWZvb3RlciAuYnRue21hcmdpbjowO3BhZGRpbmc6MH0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWZvb3RlciAuYWN0aW9uLXJpZ2h0e2Rpc3BsYXk6''@;'; put 'put ''ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmRhdGFncmlkLWZpbHRlcnttYXJnaW4tdG9wOi4yNHJlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdp''@;'; put 'put ''ZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3IsICNjY2NjY2MpO3BhZGRpbmc6LjlyZW07Ym94LXNoYWRv''@;'; put 'put ''dzowIC4wNXJlbSAuMTVyZW0gIzhjOGM4YzQwO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtIHZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93LWNvbG9yLCByZ2JhKDE0MCwgMTQwLCAxNDAsIC4yNSkpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMsIC4xNXJlbSk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1jbG9zZS13cmFwcGVye3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIg''@;'; put 'put ''LmNsb3Nle2Zsb2F0Om5vbmV9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWFwcGx5e21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2ZmZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1w''@;'; put 'put ''b3BvdmVyLWJnLWNvbG9yLCB3aGl0ZSk7cGFkZGluZzouM3JlbTttYXJnaW4tbGVmdDouM3JlbTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I2NjYzti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSAjOGM4YzhjNDA7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gdmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3ct''@;'; put 'put ''Y29sb3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtmb250LXdlaWdodDo0MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZs''@;'; put 'put ''b3c6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxMDAlO3dpZHRoOjA7aGVpZ2h0OjA7bWFyZ2luLXRvcDotLjNyZW07Ym9yZGVyOi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OjAgbm9uZTtib3JkZXItcmlnaHQtY29sb3I6I2Nj''@;'; put 'put ''Yztib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxMDAlO3dpZHRoOjA7aGVpZ2h0''@;'; put 'put ''OjA7bWFyZ2luLXRvcDotLjI1cmVtO2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgI2ZmZjtib3JkZXItdG9wOi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRl''@;'; put 'put ''bXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yLCAjNjY2NjY2KTtmb250LXNpemU6LjdyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MS4x''@;'; put 'put ''NXJlbTttYXJnaW46MDtwYWRkaW5nOi4wNXJlbSAxLjJyZW0gMDt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTAwJX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3ZlciwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpmb2N1c3t0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLXBvcG92ZXItaG92ZXItY29sb3IsICNlOGU4ZTgpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtLmFjdGl2ZXtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLCAjZThlOGU4KTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctaG92ZXItZm9udC1jb2xvciwgYmxhY2spfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFj''@;'; put 'put ''dGlvbi1pdGVtOmZvY3Vze291dGxpbmU6MH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZCwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7b3BhY2l0eTouNDstd2Via2l0LXVzZXIt''@;'; put 'put ''c2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZDpob3ZlciwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0uZGF0YWdyaWQtYWN0''@;'; put 'put ''aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6Zm9jdXMsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1hY3Rp''@;'; put 'put ''b24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmRpc2FibGVkOmZvY3Vze2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbSBjZHMtaWNvbiwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbSBjbHItaWNv''@;'; put 'put ''bnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTFweCwwKX0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZXtkaXNwbGF5OmJsb2NrfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZCwuZGF0YWdy''@;'; put 'put ''aWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtZm9vdGVyLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1yb3ctbWFzdGVyLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1yb3ctY2xp''@;'; put 'put ''Y2thYmxle2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGV7ZGlzcGxheTp0YWJsZTt0YWJsZS1sYXlvdXQ6YXV0b30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdy''@;'; put 'put ''aWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlcntkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLWNhbGN1bGF0aW9u''@;'; put 'put ''LWhlYWRlciAuZGF0YWdyaWQtY29sdW1ue2Rpc3BsYXk6dGFibGUtY2VsbDttaW4td2lkdGg6NC44cmVtfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIC5kYXRhZ3Jp''@;'; put 'put ''ZC1jb2x1bW57Ym9yZGVyLWNvbG9yOiNlOGU4ZTg7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvciwgI2U4ZThlOCk7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1zdHls''@;'; put 'put ''ZTpzb2xpZDtwYWRkaW5nOi41NXJlbSAuNnJlbTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItcDYtY29sb3IsICM2NjY2NjYpO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXdlaWdodDp2YXIoLS1jbHItZm9udC13ZWlnaHQtYm9sZCwgNjAwKTtmb250LXNpemU6''@;'; put 'put ''LjU1cmVtO2xldHRlci1zcGFjaW5nOi4wM2VtO2xpbmUtaGVpZ2h0Oi42cmVtO21hcmdpbi10b3A6MS4ycmVtO21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLXJvd3tkaXNw''@;'; put 'put ''bGF5OnRhYmxlLXJvd30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGw7bWluLXdpZHRoOjQuOHJlbTtmb250LXNpemU6LjY1cmVtO2xp''@;'; put 'put ''bmUtaGVpZ2h0Oi43cmVtO3BhZGRpbmc6LjU1cmVtIC42cmVtO3ZlcnRpY2FsLWFsaWduOnRvcH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0''@;'; put 'put ''YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVyLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1maXhlZC1jb2x1bW57ZGlzcGxheTpub25lfS5mYWRle29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdl''@;'; put 'put ''Om9wYWNpdHl9LmZhZGUuaW57b3BhY2l0eToxfS5mYWRlRG93bntvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1JSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dCx0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdlOm9wYWNpdHksdHJhbnNmb3Jt''@;'; put 'put ''fS5mYWRlRG93bi5pbntvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX0ub2Zmc2NyZWVuLWZvY3VzLXJlYm91bmRlcntwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O2hlaWdodDoxcHghaW1wb3J0YW50O3dpZHRoOjFweCFpbXBvcnRhbnQ7bGVmdDow''@;'; put 'put ''IWltcG9ydGFudDt0b3A6LWNvbnZlcnRCYXNlbGluZVRvQmFzZTIwKDEpIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O21hcmdpbjowIDAgLWNvbnZlcnRCYXNlbGluZVRvQmFzZTIwKDEp''@;'; put 'put ''IDAhaW1wb3J0YW50O3Zpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnR9OnJvb3R7LS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKTstLWNsci1uYXYtYWN0aXZlLWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAp''@;'; put 'put ''Oy0tY2xyLW5hdi1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1zZWxlY3Rpb24tY29sb3IpOy0tY2xyLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItc2lkZW5hdi1saW5rLWhvdmVyLWNvbG9yKTstLWNsci1uYXYtbGluay1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJh''@;'; put 'put ''bC03MDApOy0tY2xyLW5hdi1saW5rLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1uYXYtbGluay1mb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpOy0tY2xyLW5hdi1saW5rLWFjdGl2ZS1mb250LXdlaWdodDp2YXIoLS1jbHItbmF2''@;'; put 'put ''LWxpbmstZm9udC13ZWlnaHQpfUBtZWRpYSBzY3JlZW57c2VjdGlvblthcmlhLWhpZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9fVtkYXRhLWhpZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9YnV0dG9uLm5hdi1saW5re2JvcmRlci1yYWRpdXM6MDt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplO21p''@;'; put 'put ''bi13aWR0aDowfS50YWJzLW92ZXJmbG93e3Bvc2l0aW9uOnJlbGF0aXZlfS50YWJzLW92ZXJmbG93IC5uYXYtaXRlbXttYXJnaW4tcmlnaHQ6MH0udGFiLWNvbnRlbnR7ZGlzcGxheTppbmxpbmV9XzotbXMtZnVsbHNjcmVlbiAudGFiLWNvbnRlbnQsOnJvb3QgLnRhYi1jb250ZW50e2Rpc3Bs''@;'; put 'put ''YXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCV9LnRhYnMtdmVydGljYWx7ZGlzcGxheTpmbGV4fS50YWJzLXZlcnRpY2FsPi5uYXZ7aGVpZ2h0OmF1dG87Ym94LXNoYWRvdzpub25lO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpzdHJldGNoO21hcmdpbi1yaWdodDoxLjJyZW07''@;'; put 'put ''b3ZlcmZsb3c6YXV0bztmbGV4LXNocmluazowO3BhZGRpbmc6LjJyZW07d2lkdGg6MTJyZW07bWluLXdpZHRoOjIuNHJlbX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGlua3t0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzowIC42cmVtO2JvcmRlcjowO21hcmdpbi1ib3R0b206LjA1cmVtO2Zs''@;'; put 'put ''ZXgtc2hyaW5rOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7d2lkdGg6MTAwJX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5uYXYtaXRlbXttYXJnaW4tcmlnaHQ6MH0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5hY3RpdmUsLnRhYnMtdmVydGljYWw+Lm5hdiAubmF2''@;'; put 'put ''LWxpbms6aG92ZXJ7Ym94LXNoYWRvdzppbnNldCAuMTVyZW0gMCAjMDA3MmEzO2JveC1zaGFkb3c6aW5zZXQgLjE1cmVtIDAgMCB2YXIoLS1jbHItbmF2LWFjdGl2ZS1ib3gtc2hhZG93LWNvbG9yKX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjojZDhlM2U5O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW5hdi1hY3RpdmUtYmctY29sb3IsICNkOGUzZTkpfS50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5rOm5vdCguYWN0aXZlKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItbmF2LWhvdmVyLWJnLWNvbG9yLCAjZThlOGU4KX06cm9vdHstLWNsci13aXphcmQtbWFpbi1iZ2NvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLXdpemFyZC1zaWRlbmF2LWJnY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTApOy0tY2xyLXdpemFyZC1tYWlu''@;'; put 'put ''LXRleHRDb2xvcjp2YXIoLS1jbHItY29sb3Itb24tbmV1dHJhbC0wKTstLWNsci13aXphcmQtc2lkZW5hdi10ZXh0OnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTkwMCk7LS1jbHItd2l6YXJkLXNpZGVuYXYtdGV4dC0tYWN0aXZlOnZhcigtLWNsci1nbG9iYWwtb24tc2VsZWN0aW9uLWNvbG9y''@;'; put 'put ''KTstLWNsci13aXphcmQtdGl0bGUtdGV4dDp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItc2l6ZTouMnJlbTstLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwKTstLWNsci13''@;'; put 'put ''aXphcmQtc3RlcG5hdi1ib3JkZXItY29sb3ItLWFjdGl2ZTp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy00MDApOy0tY2xyLXdpemFyZC1zdGVwbmF2LWFjdGl2ZS1iZ2NvbG9yOnZhcigtLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yKTstLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uLWNvbG9yLS1ob3ZlcmVkOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzKTstLWNs''@;'; put 'put ''ci13aXphcmQtc3RlcG5hdi1hY3RpdmUtYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpOy0tY2xyLXdpemFyZC1zdGVwLW5hdi1ib3JkZXItY29sb3I6aHNsKDAsIDAlLCA4OSUpOy0tY2xyLXdpemFyZC1ib3gtc2hhZG93LWNvbG9yOnJnYmEoMCwgMCwgMCwg''@;'; put 'put ''LjIpfS5jbHItd2l6YXJkIC5tb2RhbC1kaWFsb2d7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNoYWRvdzowIC4wNXJlbSAuMXJlbSAuMXJlbSAjMDAwMztib3gtc2hhZG93OjAgLjA1cmVtIC4xcmVtIC4xcmVtIHZhcigtLWNsci13''@;'; put 'put ''aXphcmQtYm94LXNoYWRvdy1jb2xvcik7aGVpZ2h0OjUwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOi4xNXJlbTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItd2l6YXJk''@;'; put 'put ''LWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtib3gtc2hhZG93Om5vbmU7cGFkZGluZzowO2ZsZXg6MiAyIGF1dG87''@;'; put 'put ''d2lkdGg6NjYlO2hlaWdodDppbml0aWFsO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci13aXphcmQgLm1vZGFsLWhlYWRlciwuY2xyLXdpemFyZCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2Zs''@;'; put 'put ''ZXg6MCAwIGF1dG87d2lkdGg6MTAwJTtwYWRkaW5nOjEuMnJlbSAuOTVyZW0gLjNyZW0gMS4ycmVtfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZXtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci13aXphcmQtdGl0bGUtdGV4dCwgYmxhY2spO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpy''@;'; put 'put ''b3c7d2lkdGg6MTAwJTtsaW5lLWhlaWdodDoxLjM1NnJlbTttYXJnaW4tdG9wOi0uMTU2cmVtfS5jbHItd2l6YXJkIC5tb2RhbC1ib2R5e2ZsZXg6MSAxIGF1dG87Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLW1haW4tdGV4dENvbG9yLCBibGFjayk7d2lkdGg6MTAwJX0uY2xy''@;'; put 'put ''LXdpemFyZCAubW9kYWwtZm9vdGVye3BhZGRpbmc6MDtkaXNwbGF5OmJsb2NrO3BhZGRpbmctdG9wOjEuMnJlbTtoZWlnaHQ6NC4ycmVtO21pbi1oZWlnaHQ6NC4ycmVtO21heC1oZWlnaHQ6NC4ycmVtO3dpZHRoOjEwMCU7ZmxleDowIDAgNC4ycmVtfS5jbHItd2l6YXJkIC5jbHItd2l6YXJk''@;'; put 'put ''LWJ0bnttYXJnaW46MDttYXgtd2lkdGg6MTAwJTtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZS10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXg6MCAxIGF1dG87d2lkdGg6MTAwJTtvdXRsaW5lOjB9LmNsci13aXphcmQgLm1vZGFsLXRpdGxlLXdyYXBwZXJ7d2lk''@;'; put 'put ''dGg6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtaGVhZGVyLWFjdGlvbnMtd3JhcHBlcntmbGV4OjEgMCBhdXRvO3BhZGRpbmctbGVmdDouNnJlbTtwYWRkaW5nLXJpZ2h0Oi4ycmVtfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb257aGVpZ2h0OjEuMnJlbTt3aWR0aDoxLjJy''@;'; put 'put ''ZW07cGFkZGluZzowO21hcmdpbjowO21pbi13aWR0aDoxLjJyZW07bGluZS1oZWlnaHQ6MS4ycmVtO2ZvbnQtc2l6ZToxLjNyZW07Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IsICM4YzhjOGMpO3RyYW5zaXRpb246Y29sb3IgbGluZWFy''@;'; put 'put ''IC4yc30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uIGF7Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IsICM4YzhjOGMpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb246aG92ZXIsLmNsci13aXph''@;'; put 'put ''cmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjphY3RpdmUsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjpmb2N1c3tjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvci0taG92ZXJlZCwgYmxhY2spfS5jbHItd2l6YXJkIC5j''@;'; put 'put ''bHItd2l6YXJkLWhlYWRlci1hY3Rpb24gY2RzLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6MS4xcmVtO3dpZHRoOjEuMXJlbX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7ZmxleDoxIDEgYXV0bzt3aWR0''@;'; put 'put ''aDozNCU7bWF4LXdpZHRoOjM0JTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO29yZGVyOi0xO292ZXJmbG93OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87cGFkZGluZy1ib3R0b206MS4ycmVtO2xpbmUtaGVpZ2h0OjEuMnJlbTtib3JkZXItcmlnaHQtd2lkdGg6LjA1cmVtO2Jv''@;'; put 'put ''cmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6I2UzZTNlMztib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwLW5hdi1ib3JkZXItY29sb3Is''@;'; put 'put ''ICNlM2UzZTMpO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc2lkZW5hdi1iZ2NvbG9yLCAjZmFmYWZhKTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLXRvcC1s''@;'; put 'put ''ZWZ0LXJhZGl1czp2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSl9LmNsci13aXphcmQgLmNs''@;'; put 'put ''ci13aXphcmQtc3RlcG5hdntwYWRkaW5nLWxlZnQ6MS4ycmVtO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOi43cmVtO2NvbG9yOiMzMzM7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zaWRlbmF2LXRleHQsICMzMzMzMzMpO3dpZHRoOjEwMCU7ZmxleDoxIDEgYXV0b30uY2xyLXdpemFyZCAuY2xy''@;'; put 'put ''LXdpemFyZC1zdGVwbmF2LWxpc3R7ZGlzcGxheTpibG9jaztib3gtc2hhZG93Om5vbmU7Y291bnRlci1yZXNldDphO3doaXRlLXNwYWNlOm5vd3JhcDtoZWlnaHQ6YXV0bztsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MDt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0''@;'; put 'put ''ZXBuYXYtaXRlbXtkaXNwbGF5OmJsb2NrO2JveC1zaGFkb3c6LjJyZW0gMCAjZThlOGU4IGluc2V0O2JveC1zaGFkb3c6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1zaXplKSAwIDAgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcikgaW5zZXQ7bWFyZ2luOjAg''@;'; put 'put ''MCAtLjA1cmVtO3BhZGRpbmc6LjNyZW0gMCAuM3JlbSAuNHJlbTtjb2xvcjojMzMzO2NvbG9yOnZhcigtLWNsci13aXphcmQtc2lkZW5hdi10ZXh0LCAjMzMzMzMzKTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXIsIDQwMCl9LmNsci13''@;'; put 'put ''aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmFjdGl2ZXtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci13aXphcmQtc2lkZW5hdi10ZXh0LS1hY3RpdmUsIGJsYWNrKTtmb250LXdlaWdodDo1MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXNlbWlib2xkLCA1MDAp''@;'; put 'put ''fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5hY3RpdmUgLmNsci13aXphcmQtc3RlcG5hdi1saW5re2JhY2tncm91bmQtY29sb3I6I2Q4ZTNlOTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1hY3RpdmUtYmdjb2xvciwgI2Q4ZTNlOSk7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6LjE1cmVtO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6''@;'; put 'put ''dmFyKC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzLCAuMTVyZW0pfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5jb21wbGV0ZXtib3gtc2hhZG93Oi4ycmVtIDAgIzVlYjcxNSBpbnNldDtib3gtc2hhZG93OnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItc2l6''@;'; put 'put ''ZSkgMCAwIHZhcigtLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItY29sb3ItLWFjdGl2ZSkgaW5zZXQ7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4ycyBlYXNlLWlufS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5lcnJvcntib3gtc2hhZG93Oi4ycmVtIDAgI2MyMWQwMCBp''@;'; put 'put ''bnNldDt0cmFuc2l0aW9uOmJveC1zaGFkb3cgLjJzIGVhc2UtaW59LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLm5vLWNsaWNrIGJ1dHRvbntwb2ludGVyLWV2ZW50czpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlua3t3aWR0aDoxMDAlO2Rpc3Bs''@;'; put 'put ''YXk6ZmxleDtjb2xvcjppbmhlcml0O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgLjE1cmVtIDAgLjVyZW07Zm9udC1zaXplOi43cmVtO2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3RleHQtYWxpZ246bGVmdDt0ZXh0LXRyYW5zZm9ybTpub25lO21hcmdp''@;'; put 'put ''bjowfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluayAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstc3VmZml4e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi13aWR0aDoxLjJyZW07cGFkZGluZy1yaWdodDouMzVyZW19LmNsci13aXphcmQgLmNsci13''@;'; put 'put ''aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1zdWZmaXggLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLWVycm9yLWljb257dHJhbnNmb3JtOm5vbmU7ZmlsbDojYzIxZDAwfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXRpdGxle2NvbG9yOiMwMDA7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXdpemFyZC10aXRsZS10ZXh0LCBibGFjayk7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMS1mb250LXdlaWdodCwgMjAwKTttYXJnaW4tdG9wOjA7cGFkZGluZzoxLjJyZW0gLjZyZW0gMS4ycmVtIDEuMnJlbTtmbGV4OjAgMCBhdXRvO2ZvbnQtc2l6ZTox''@;'; put 'put ''LjFyZW07bGluZS1oZWlnaHQ6MS4ycmVtfS5jbHItd2l6YXJkIC5tb2RhbC1jb250ZW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4OjEgMSAxMDAlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jbHItd2l6YXJkIC5tb2RhbC1j''@;'; put 'put ''b250ZW50LXdyYXBwZXIgLm1vZGFsLW5hdntoZWlnaHQ6YXV0b30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1mb290ZXItYnV0dG9uc3t0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6MS4ycmVtO21hcmdpbjowfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWZvb3Rlci1idXR0b25zLXdy''@;'; put 'put ''YXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1idG4td3JhcHBlcntmbGV4OjAgMSBhdXRvO21pbi13aWR0aDo0LjJyZW07cGFkZGluZy1sZWZ0Oi42cmVt''@;'; put 'put ''fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi13cmFwcGVyW2FyaWEtaGlkZGVuPXRydWVde2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1idG4uYnRuLWxpbmt7cGFkZGluZzowfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xy''@;'; put 'put ''LXdpemFyZCAuY2xyLXdpemFyZC1wYWdlOm5vdChbYXJpYS1oaWRkZW49dHJ1ZV0pe3BhZGRpbmc6LjlyZW0gMS4ycmVtIDEuMnJlbTtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5tb2RhbC1kaWFsb2d7aGVpZ2h0Ojc1dmh9LmNsci13aXphcmQgLm1vZGFsLWJvZHktd3JhcHBlcnttYXgt''@;'; put 'put ''aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO3dpZHRoOjEwMCV9LmNsci13aXphcmQud2l6YXJkLW1kIC5tb2RhbC1kaWFsb2d7bWluLWhlaWdodDoyMXJlbTttYXgtaGVpZ2h0OjI1LjJyZW19LmNsci13aXphcmQud2l6YXJkLW1kIC5tb2RhbC1jb250ZW50LC5jbHItd2l6''@;'; put 'put ''YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWF4LWhlaWdodDoyNS4ycmVtfS5jbHItd2l6YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOjEwLjhyZW07bWF4LXdpZHRoOjEycmVtfS5jbHItd2l6YXJkLndpemFyZC1s''@;'; put 'put ''ZyAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6MjFyZW07bWF4LWhlaWdodDozNnJlbX0uY2xyLXdpemFyZC53aXphcmQtbGcgLm1vZGFsLWNvbnRlbnQsLmNsci13aXphcmQud2l6YXJkLWxnIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcnttYXgtaGVpZ2h0OjM2cmVtfS5jbHItd2l6YXJk''@;'; put 'put ''LndpemFyZC1sZyAubmF2LXBhbmVsLC5jbHItd2l6YXJkLndpemFyZC1sZyAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOjEycmVtO21heC13aWR0aDoxNC40cmVtfS5jbHItd2l6YXJkLndpemFyZC14bCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZoO21heC1oZWlnaHQ6''@;'; put 'put ''bm9uZX0uY2xyLXdpemFyZC53aXphcmQteGwgLm5hdi1wYW5lbCwuY2xyLXdpemFyZC53aXphcmQteGwgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21pbi13aWR0aDoxMnJlbTttYXgtd2lkdGg6MTUuNnJlbX0uY2xyLXdpemFyZCAuc3Bpbm5lcjpub3QoLnNwaW5uZXItaW5saW5lKTpu''@;'; put 'put ''b3QoLmNsci10cmVlbm9kZS1zcGlubmVyKXtsZWZ0OmNhbGMoNTAlICsgNS43NXJlbSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjQwJX0uY2xyLXdpemFyZC1wYWdlPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmNsci13aXphcmQtcGFnZT46Zmlyc3QtY2hpbGQ+OmZpcnN0LWNoaWxke21h''@;'; put 'put ''cmdpbi10b3A6MH0uY2xyLXdpemFyZC1wYWdlPmZvcm06Zmlyc3QtY2hpbGR7cGFkZGluZy10b3A6MH0uY2xyLXdpemFyZC1wYWdlPmZvcm06Zmlyc3QtY2hpbGQ+LmZvcm0tYmxvY2s6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5jbHItd2l6YXJkLS1pbmxpbmV7ZGlzcGxheTpibG9jazt3''@;'; put 'put ''aWR0aDoxMDAlfS5jbHItd2l6YXJkLS1pbmxpbmU+Y2xyLW1vZGFsPi5tb2RhbDpmb2N1c3tvdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1jb2xvcjp0cmFuc3BhcmVudH0uY2xyLXdpemFyZC0taW5saW5lIGNsci1tb2RhbHtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2t9''@;'; put 'put ''LmNsci13aXphcmQtLWlubGluZSAubW9kYWx7cGFkZGluZzowO3Bvc2l0aW9uOnN0YXRpYztoZWlnaHQ6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwgLmNvbnRlbnQtY29udGFpbmVye2hlaWdodDoxMDAlfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFs''@;'; put 'put ''IC5jb250ZW50LWNvbnRhaW5lciAubmF2LXBhbmVse2hlaWdodDo5OSU7d2lkdGg6OTklfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5tb2RhbC1jb250ZW50e2JveC1zaGFkb3c6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6MTAw''@;'; put 'put ''JTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3otaW5kZXg6YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwtaGVhZGVyIC5jbG9zZSwuY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1oZWFkZXIt''@;'; put 'put ''LWFjY2Vzc2libGUgLmNsb3Nle2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5uYXYubmF2TGlzdHtwYWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudCAubW9kYWwtYm9keSAuY29udGVudC1hcmVhe292ZXJmbG93LXk6''@;'; put 'put ''YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1iYWNrZHJvcHtoZWlnaHQ6MDt3aWR0aDowO2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1jb250ZW50LXdyYXBwZXJ7YWxpZ24taXRlbXM6c3RyZXRjaDtoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5l''@;'; put 'put ''IC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciwuY2xyLXdpemFyZC0taW5saW5lLmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7bWluLWhlaWdodDoxMDAlO2hlaWdodDphdXRvO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBl''@;'; put 'put ''ciAuY2xyLXdpemFyZC1zdGVwbmF2LC5jbHItd2l6YXJkLS1pbmxpbmUuY2xyLXdpemFyZCAubW9kYWwtY29udGVudCAuY2xyLXdpemFyZC1zdGVwbmF2e2hlaWdodDoxMDAlfS5jbHItd2l6YXJkLS1uby1zaGFkb3cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciwuY2xyLXdpemFyZC0tbm8tc2hh''@;'; put 'put ''ZG93IC5tb2RhbC1kaWFsb2d7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1uby10aXRsZSAuY2xyLXdpemFyZC10aXRsZXtkaXNwbGF5Om5vbmV9LmNsci13aXphcmQtLW5vLXRpdGxlIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZy10b3A6MS4ycmVtfUBtZWRpYSBzY3JlZW57LmNs''@;'; put 'put ''ci13aXphcmQtcGFnZVthcmlhLWhpZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9ue21hcmdpbi10b3A6LS4xNXJlbX19OnJvb3R7LS1jbHItc2lnbnBvc3QtY29udGVudC1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1zaWducG9zdC1jb250ZW50LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC01MDApOy0tY2xyLXNpZ25wb3N0LWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLXNp''@;'; put 'put ''Z25wb3N0LWFjdGlvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTcwMCk7LS1jbHItc2lnbnBvc3QtYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cyk7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBv''@;'; put 'put ''aW50ZXItYm9yZGVyKTstLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9yZGVyOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLXBz''@;'; put 'put ''dWVkby1ib3JkZXIpfS5zaWducG9zdHtkaXNwbGF5OmlubGluZS1ibG9ja30uc2lnbnBvc3Q6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb257bWluLXdpZHRoOjEuMnJlbTttYXJnaW46MDtwYWRkaW5nOjA7Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItc2lnbnBvc3QtYWN0aW9uLWNvbG9yLCAjOGM4YzhjKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbiBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6MS4ycmVtO3dpZHRoOjEuMnJlbX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpob3Zl''@;'; put 'put ''ciwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbi5hY3RpdmV7Y29sb3I6IzAwNjQ4Zjtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9yLCAjMDA2NDhmKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbiwuc2lnbnBvc3Qg''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjbHItaWNvbntoZWlnaHQ6LjhyZW07d2lkdGg6LjhyZW19LnNpZ25wb3N0LXRyaWdnZXJ7bWFyZ2luOjA7cGFkZGluZzowO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zaWducG9zdC1jb250ZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNw''@;'; put 'put ''YXJlbnQ7bWluLXdpZHRoOjEwLjhyZW07bWF4LXdpZHRoOjE4cmVtO21pbi1oZWlnaHQ6Mi40cmVtO21heC1oZWlnaHQ6MjUuMnJlbTtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwNTB9LnNpZ25wb3N0LWNvbnRlbnQ6aG92ZXJ7Y3Vyc29yOmRlZmF1''@;'; put 'put ''bHR9LnNpZ25wb3N0LWNvbnRlbnQgLnBvcG92ZXItcG9pbnRlcntoZWlnaHQ6MDt3aWR0aDowO3Bvc2l0aW9uOmFic29sdXRlfS5zaWducG9zdC1jb250ZW50IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uc2ln''@;'; put 'put ''bnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcntib3JkZXItdG9wOi42cmVtIHNvbGlkICNiM2IzYjM7Ym9y''@;'; put 'put ''ZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIsIC42cmVtIHNvbGlkICNiM2IzYjMpO2JvdHRvbTotLjZyZW19LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQudG9wLW1pZGRsZSAucG9wb3Zl''@;'; put 'put ''ci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDouNnJlbSBzb2xpZCAjZmZmO2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlciwgLjZyZW0gc29saWQgd2hp''@;'; put 'put ''dGUpO2JvdHRvbTouMXJlbX0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1sZWZ0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWxlZnQ6LjZyZW0gc29saWQgdHJhbnNwYXJl''@;'; put 'put ''bnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO3JpZ2h0Oi0uMDVyZW19LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6LjZy''@;'; put 'put ''ZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO3JpZ2h0Oi4wNXJlbX0uc2lnbnBvc3QtY29udGVudC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0Oi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBzb2xpZCB0cmFuc3BhcmVudCk7bGVmdDo1MCV9LnNpZ25wb3N0LWNvbnRlbnQudG9wLW1pZGRsZSAucG9wb3Zlci1w''@;'; put 'put ''b2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTtsZWZ0Oi4wNXJlbX0uc2lnbnBvc3QtY29udGVudC50''@;'; put 'put ''b3AtcmlnaHQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1yaWdodCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0''@;'; put 'put ''LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO2xlZnQ6LS4wNXJlbX0uc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBzb2xpZCB0cmFuc3BhcmVudCk7bGVmdDouMDVyZW19LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5w''@;'; put 'put ''b3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTouNnJlbSBzb2xpZCAjYjNiM2IzO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItYm9yZGVyLCAuNnJlbSBzb2xpZCAjYjNiM2Iz''@;'; put 'put ''KTt0b3A6LS41NXJlbX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAucG9wb3Zlci1w''@;'; put 'put ''b2ludGVyOmJlZm9yZXtib3JkZXItYm90dG9tOi42cmVtIHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9yZGVyLCAuNnJlbSBzb2xpZCB3aGl0ZSk7dG9wOi4xcmVtfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1sZWZ0IC5zaWdu''@;'; put 'put ''cG9zdC13cmFwe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlcntib3JkZXItbGVmdDouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2li''@;'; put 'put ''bGUtYm9yZGVyLCAuNnJlbSBzb2xpZCB0cmFuc3BhcmVudCk7cmlnaHQ6LS4wNXJlbX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItbGVmdDouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jbHItc2ln''@;'; put 'put ''bnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBzb2xpZCB0cmFuc3BhcmVudCk7cmlnaHQ6LjA1cmVtfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcntib3JkZXItcmlnaHQ6LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTtyaWdodDo1MCV9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6LjZyZW0gc29saWQg''@;'; put 'put ''dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTtyaWdodDotLjY1cmVtfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9w''@;'; put 'put ''LWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0Oi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBz''@;'; put 'put ''b2xpZCB0cmFuc3BhcmVudCk7bGVmdDotLjA1cmVtfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWlu''@;'; put 'put ''dmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTtsZWZ0Oi4wNXJlbX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQubGVm''@;'; put 'put ''dC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItbGVmdDouNnJlbSBzb2xpZCAjYjNiM2IzO2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlciwgLjZyZW0gc29saWQgI2IzYjNiMyk7cmlnaHQ6LS42cmVtfS5zaWducG9zdC1jb250ZW50LmxlZnQtdG9w''@;'; put 'put ''IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmxlZnQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1sZWZ0Oi42cmVtIHNvbGlkICNmZmY7Ym9y''@;'; put 'put ''ZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlciwgLjZyZW0gc29saWQgd2hpdGUpfS5zaWducG9zdC1jb250ZW50LmxlZnQtdG9wIC5zaWducG9zdC13cmFwe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10''@;'; put 'put ''b3AgLnBvcG92ZXItcG9pbnRlcntib3JkZXItdG9wOi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO2JvdHRvbTotLjA1cmVtfS5zaWducG9zdC1jb250''@;'; put 'put ''ZW50LmxlZnQtdG9wIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci10b3A6LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBzb2xpZCB0cmFuc3BhcmVudCk7dG9wOi0uNjVyZW07''@;'; put 'put ''cmlnaHQ6LjFyZW19LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcntib3JkZXItYm90dG9tOi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29s''@;'; put 'put ''aWQgdHJhbnNwYXJlbnQpO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOnZhcigtLWNs''@;'; put 'put ''ci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTt0b3A6LjA1cmVtO2xlZnQ6LS43cmVtfS5zaWducG9zdC1jb250ZW50LmxlZnQtYm90dG9tIC5zaWducG9zdC13cmFwe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9LnNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItYm90dG9tOi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO3RvcDot''@;'; put 'put ''LjA1cmVtfS5zaWducG9zdC1jb250ZW50LmxlZnQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1ib3R0b206LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBz''@;'; put 'put ''b2xpZCB0cmFuc3BhcmVudCk7dG9wOi4wNXJlbTtsZWZ0Oi0uN3JlbX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5yaWdodC1taWRkbGUgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5yaWdodC1ib3R0b20g''@;'; put 'put ''LnBvcG92ZXItcG9pbnRlcntib3JkZXItcmlnaHQ6LjZyZW0gc29saWQgI2IzYjNiMztib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItYm9yZGVyLCAuNnJlbSBzb2xpZCAjYjNiM2IzKTtsZWZ0Oi0uNnJlbX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92''@;'; put 'put ''ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6LjZyZW0gc29saWQgI2ZmZjtib3JkZXIt''@;'; put 'put ''cmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlciwgLjZyZW0gc29saWQgd2hpdGUpO2xlZnQ6LjFyZW19LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5zaWducG9zdC13cmFwe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcntib3JkZXItdG9wOi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO2JvdHRvbTotLjA1cmVtfS5zaWdu''@;'; put 'put ''cG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItdG9wOi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO3Rv''@;'; put 'put ''cDotLjY1cmVtfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBzb2xp''@;'; put 'put ''ZCB0cmFuc3BhcmVudCk7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOnZhcigtLWNs''@;'; put 'put ''ci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTt0b3A6LjA1cmVtfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQucmln''@;'; put 'put ''aHQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTt0b3A6LS4wNXJlbX0uc2ln''@;'; put 'put ''bnBvc3QtY29udGVudC5yaWdodC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5z''@;'; put 'put ''cGFyZW50KTt0b3A6LjA1cmVtfS5zaWducG9zdC1jb250ZW50LWhlYWRlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O3RvcDowfS5zaWducG9zdC13cmFwe2JvcmRlci1y''@;'; put 'put ''YWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVy''@;'; put 'put ''LWNvbG9yOiNiM2IzYjM7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJvcmRlci1jb2xvciwgI2IzYjNiMyk7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYmctY29sb3IsIHdoaXRlKTt6LWlu''@;'; put 'put ''ZGV4OjEwNTA7cG9zaXRpb246cmVsYXRpdmV9LnNpZ25wb3N0LWNvbnRlbnQtYm9keXtwYWRkaW5nOjEuMnJlbTttYXgtaGVpZ2h0OjI0cmVtO292ZXJmbG93LXk6YXV0b30uZHJhZy1oYW5kbGV7Y3Vyc29yOmdyYWJ9LmluLWRyYWd7Y3Vyc29yOmdyYWJiaW5nOy13ZWJraXQtdXNlci1zZWxl''@;'; put 'put ''Y3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5pbi1kcmFnICp7cG9pbnRlci1ldmVudHM6bm9uZX0uaW4tZHJhZyAuZHJhZ2dhYmxlLmJlaW5nLWRyYWdnZWR7b3BhY2l0eTouNn0uZHJhZ2dhYmxlLWdob3N0e3Bvc2l0aW9uOmZpeGVkO2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTpoaWRkZW47''@;'; put 'put ''ei1pbmRleDoyMTQ3NDgzNjQ3O3BvaW50ZXItZXZlbnRzOm5vbmU7d2lsbC1jaGFuZ2U6bGVmdCx0b3B9LmRyYWdnYWJsZS1naG9zdD4uZHJhZ2dhYmxle21hcmdpbjowO29wYWNpdHk6MX0uZHJhZ2dhYmxlLWdob3N0LmRyb3BwZWR7b3BhY2l0eTowfS5kcm9wcGFibGUuZHJhZ2dhYmxlLW1h''@;'; put 'put ''dGNoe2JvcmRlcjouMDVyZW0gZGFzaGVkICNjMDkwZDV9LmRyb3BwYWJsZS5kcmFnZ2FibGUtb3Zlcntib3JkZXI6LjA1cmVtIGRhc2hlZCAjNjgwMDk0fTpyb290ey0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItYWNjb3JkaW9u''@;'; put 'put ''LXBhbmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTUwMCk7LS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yKTstLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC01MCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFs''@;'; put 'put ''LTIwMCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1mb250LXNpemU6LjhyZW07LS1jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24tZm9udC1zaXplOi42cmVtOy0tY2xyLWFjY29yZGlvbi10aXRsZS1mb250LXdlaWdodDo1MDA7LS1jbHItYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZTouNjVy''@;'; put 'put ''ZW07LS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZXJyb3ItY29sb3IpOy0tY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNv''@;'; put 'put ''bG9yLW5ldXRyYWwtNDAwKTstLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cyk7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yOiNlOGU4ZTg7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LXdpZHRoOi4zcmVtOy0tY2xy''@;'; put 'put ''LWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZTp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yKTstLWNsci1hY2NvcmRpb24tYm9yZGVyLWxlZnQtY29sb3ItZXJyb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1lcnJvci1jb2xvcik7LS1jbHItYWNjb3JkaW9uLWhl''@;'; put 'put ''YWRlci1sZWZ0LWluZGljYXRvcjppbnNldCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LXdpZHRoKSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWNvbXBsZXRlLWluZGljYXRvcjppbnNldCB2YXIo''@;'; put 'put ''LS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LXdpZHRoKSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZSk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWVycm9yLWluZGljYXRvcjppbnNldCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1s''@;'; put 'put ''ZWZ0LXdpZHRoKSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcil9LmNsci1hY2NvcmRpb257ZGlzcGxheTpibG9jaztjb3VudGVyLXJlc2V0OmFjY29yZGlvbjttYXJnaW4tYm90dG9tOjEuMnJlbX0uY2xyLWFjY29yZGlvbi1wYW5lbHtkaXNwbGF5OmJs''@;'; put 'put ''b2NrfS5jbHItYWNjb3JkaW9uLWhlYWRlcntjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvciwgIzY2NjY2Nik7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29s''@;'; put 'put ''b3IsICNjY2NjY2MpO2JveC1zaGFkb3c6aW5zZXQgLjNyZW0gMCAjZThlOGU4O2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1pbmRpY2F0b3IsIGluc2V0IC4zcmVtIDAgMCAjZThlOGU4KTtiYWNrZ3JvdW5kOiNmYWZhZmE7YmFja2dyb3VuZDp2YXIoLS1jbHIt''@;'; put 'put ''YWNjb3JkaW9uLWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yLCAjZmFmYWZhKTt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7Ym9yZGVyLWJvdHRvbTowO3dpZHRoOjEwMCU7Zm9udC1zaXplOi44cmVtO2ZvbnQtc2l6ZTp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1mb250LXNpemUs''@;'; put 'put ''IC44cmVtKTt0ZXh0LWFsaWduOmxlZnR9LmNsci1hY2NvcmRpb24taGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWhvdmVyLWJhY2tncm91bmQtY29sb3IsICNlOGU4ZTgpfS5jbHItYWNjb3Jk''@;'; put 'put ''aW9uLXBhbmVsOmxhc3QtY2hpbGQgLmNsci1hY2NvcmRpb24tY29udGVudCwuY2xyLWFjY29yZGlvbi1wYW5lbDpsYXN0LWNoaWxkIC5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20td2lkdGg6LjA1cmVtO2JvcmRlci1ib3R0b20t''@;'; put 'put ''d2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItYm90dG9tLWNvbG9yOiNjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvciwgI2NjY2NjYyl9LmNsci1hY2NvcmRpb24tbnVtYmVye3BhZGRpbmc6MCAu''@;'; put 'put ''OXJlbTtkaXNwbGF5Om5vbmV9LmNsci1hY2NvcmRpb24tbnVtYmVyOmJlZm9yZXtjb250ZW50OmNvdW50ZXIoYWNjb3JkaW9uKSAiLiI7Y291bnRlci1pbmNyZW1lbnQ6YWNjb3JkaW9ufS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3Jh''@;'; put 'put ''cDtmbGV4OjEgMSAwJTt3aWR0aDoxMDAlO2JvcmRlcjowO3BhZGRpbmc6LjlyZW07YmFja2dyb3VuZDowIDA7dGV4dC1hbGlnbjpsZWZ0O2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLCAjNjY2NjY2KX1AbWVkaWEgKG1pbi13''@;'; put 'put ''aWR0aDo1NzZweCl7LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbntmbGV4LWZsb3c6cm93fX0uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uOmRpc2FibGVkIC5jbHItYWNjb3JkaW9u''@;'; put 'put ''LXRpdGxle2NvbG9yOiNiM2IzYjM7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyl9LmNsci1hY2NvcmRpb24tc3RhdHVze3dpZHRoOjEuOHJlbTtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmNsci1hY2NvcmRp''@;'; put 'put ''b24tdGl0bGV7ZGlzcGxheTppbmxpbmUtYmxvY2t9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe2Nsci1zdGVwLXRpdGxlLmNsci1hY2NvcmRpb24tdGl0bGV7bWluLXdpZHRoOjguNjRyZW19fS5jbHItYWNjb3JkaW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24gLmNsci1hY2NvcmRpb24tdGl0''@;'; put 'put ''bGV7bWF4LXdpZHRoOjEzLjJyZW19LmNsci1hY2NvcmRpb24tZGVzY3JpcHRpb257ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjMyLjVyZW19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OjEuOHJlbX19LmNsci1h''@;'; put 'put ''Y2NvcmRpb24tY29udGVudHtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtYmFja2dyb3VuZC1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJl''@;'; put 'put ''bSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLWJvdHRvbTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi45cmVtO2Rpc3BsYXk6bm9uZX0uY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1jb250ZW50IC5jbHItZm9ybSwuY2xyLWFjY29yZGlvbi1jb250ZW50Lm5nLXRyaWdnZXJ7cGFkZGluZzowfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1jb250ZW50e3BhZGRpbmc6LjlyZW0gMi43cmVtfX0uY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50''@;'; put 'put ''e3BhZGRpbmc6LjlyZW19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWlubmVyLWNvbnRlbnR7cGFkZGluZzouOXJlbSAyLjdyZW19fS5jbHItYWNjb3JkaW9uLWFuZ2xle3RyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2Zvcm06cm90YXRlKDkwKX0u''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1lcnJvci1pY29uLC5jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWljb257aGVpZ2h0OjEuMnJlbTt3aWR0aDoxLjJyZW07ZGlzcGxheTpub25lO3BhZGRpbmc6MDttYXJnaW46MCAuNnJlbX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWNvbnRl''@;'; put 'put ''bnQtcmVnaW9uIC5jbHItYWNjb3JkaW9uLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kOiNkOGUzZTk7YmFja2dyb3VuZDp2YXIoLS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yLCAjZDhlM2U5KX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlciAuY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmlsaXR5OnZpc2libGU7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBsZXRlIC5jbHItYWNj''@;'; put 'put ''b3JkaW9uLWNvbXBsZXRlLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6IzVhYTIyMDtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yLCAjNWFhMjIwKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZSAuY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmls''@;'; put 'put ''aXR5OnZpc2libGV9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGUgLmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgLjNyZW0gMCAjNWFhMjIwO2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1jb21wbGV0ZS1pbmRpY2F0b3IsIGluc2V0''@;'; put 'put ''IC4zcmVtIDAgMCAjNWFhMjIwKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZSAubmctdHJpZ2dlci5jbHItYWNjb3JkaW9uLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvciAuY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbTouMDVy''@;'; put 'put ''ZW0gc29saWQ7Ym9yZGVyLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWxlZnQtY29sb3ItZXJyb3IsICNjMjFkMDApO2JveC1zaGFkb3c6aW5zZXQgLjNyZW0gMCAjYzIxZDAwO2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFk''@;'; put 'put ''ZXItbGVmdC1lcnJvci1pbmRpY2F0b3IsIGluc2V0IC4zcmVtIDAgMCAjYzIxZDAwKTtiYWNrZ3JvdW5kLWNvbG9yOiNkOGUzZTk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yLCAjZDhlM2U5KX0uY2xyLWFjY29yZGlvbi1wYW5l''@;'; put 'put ''bC1lcnJvciAuY2xyLWFjY29yZGlvbi1lcnJvci1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiNjMjFkMDA7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1lcnJvci1jb2xvciwgI2MyMWQwMCl9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3IgLmNsci1hY2NvcmRpb24tbnVtYmVy''@;'; put 'put ''LC5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBsZXRlIC5jbHItYWNjb3JkaW9uLW51bWJlcntwb3NpdGlvbjphYnNvbHV0ZTtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZs''@;'; put 'put ''b3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjB9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6bm9uZX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1wYW5lbDpmaXJzdC1jaGlsZCAuY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLXRvcC1yaWdodC1yYWRp''@;'; put 'put ''dXM6LjE1cmVtO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cywgLjE1cmVtKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbDpsYXN0LWNoaWxkIC5jbHItYWNjb3JkaW9uLWNv''@;'; put 'put ''bnRlbnQsLmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWw6bGFzdC1jaGlsZCAuY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1j''@;'; put 'put ''bHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cywgLjE1cmVtKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1z''@;'; put 'put ''dGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi10aXRsZXtmb250LXdlaWdodDo1MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWFjY29yZGlvbi10aXRsZS1mb250LXdlaWdodCwgNTAwKTtmb250LXNpemU6LjY1cmVtO2ZvbnQtc2l6ZTp2YXIoLS1jbHItYWNjb3JkaW9uLXRpdGxlLWZvbnQt''@;'; put 'put ''c2l6ZSwgLjY1cmVtKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2ZvbnQtc2l6ZTouNnJlbTtmb250LXNpemU6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uLWZvbnQtc2l6ZSwgLjZyZW0pO3BhZGRp''@;'; put 'put ''bmc6LjNyZW0gLjZyZW19LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tY29udGVudHtwYWRkaW5nOjB9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOi4z''@;'; put 'put ''cmVtIDEuNzVyZW19LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVze3dpZHRoOi45NnJlbX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1zdGF0dXMgY2RzLWljb24sLmNsci1hY2Nv''@;'; put 'put ''cmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVzIGNsci1pY29ue2hlaWdodDouN3JlbTt3aWR0aDouN3JlbX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjAhaW1w''@;'; put 'put ''b3J0YW50O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjAhaW1wb3J0YW50O2JvcmRlci1ib3R0b206MCFpbXBvcnRhbnR9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItYWNjb3JkaW9uLXBhbmVsLWluYWN0aXZlIC5jbHItYWNjb3JkaW9uLWFuZ2xle3Zpc2liaWxpdHk6aGlkZGVufS5jbHIt''@;'; put 'put ''c3RlcHBlci1mb3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlciAuY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmlsaXR5OnZpc2libGV9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItYWNjb3JkaW9uLXN0YXR1c3ttaW4td2lkdGg6My42cmVtfS5jbHIt''@;'; put 'put ''c3RlcHBlci1mb3JtcyAuY2xyLWFjY29yZGlvbi1udW1iZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1zdGVwLWJ1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MS4ycmVtfTpyb290ey0tY2xyLXRpbWVsaW5lLWxpbmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTAw''@;'; put 'put ''KTstLWNsci10aW1lbGluZS1zdGVwLWhlYWRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItdGltZWxpbmUtaW5jb21wbGV0ZS1zdGVwLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTYwMCk7LS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwKTstLWNsci10aW1l''@;'; put 'put ''bGluZS1zdWNjZXNzLXN0ZXAtY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtNDAwKTstLWNsci10aW1lbGluZS1lcnJvci1zdGVwLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItODAwKTstLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMi1m''@;'; put 'put ''b250LXdlaWdodCl9LmNsci10aW1lbGluZXtkaXNwbGF5OmZsZXg7cGFkZGluZzouNnJlbX0uY2xyLXRpbWVsaW5lLXN0ZXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO21pbi13aWR0aDo4Ljc1cmVtO21hcmdpbi1sZWZ0Oi42cmVtfS5jbHItdGltZWxp''@;'; put 'put ''bmUtc3RlcCBjZHMtaWNvbiwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLWljb257aGVpZ2h0OjEuOHJlbTt3aWR0aDoxLjhyZW07bWluLWhlaWdodDoxLjhyZW07bWluLXdpZHRoOjEuOHJlbX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb25bc2hhcGU9Y2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0''@;'; put 'put ''ZXAgY2xyLWljb25bc2hhcGU9Y2lyY2xlXXtjb2xvcjojOGM4YzhjO2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1pbmNvbXBsZXRlLXN0ZXAtY29sb3IsICM4YzhjOGMpfS5jbHItdGltZWxpbmUtc3RlcCBjZHMtaWNvbltzaGFwZT1kb3QtY2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xy''@;'; put 'put ''LWljb25bc2hhcGU9ZG90LWNpcmNsZV17Y29sb3I6IzAwNzJhMztjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yLCAjMDA3MmEzKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNs''@;'; put 'put ''ci1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3RhbmRhcmRde2NvbG9yOiM1ZWI3MTU7Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN1Y2Nlc3Mtc3RlcC1jb2xvciwgIzVlYjcxNSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0''@;'; put 'put ''ZXAgY2xyLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRde2NvbG9yOiNjMjFkMDA7Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLWVycm9yLXN0ZXAtY29sb3IsICNjMjFkMDApfS5jbHItdGltZWxpbmUtc3RlcDpub3QoOmxhc3Qtb2YtdHlwZSkgLmNsci10aW1lbGluZS1zdGVwLWJvZHk6YmVm''@;'; put 'put ''b3Jle2NvbnRlbnQ6IiI7YmFja2dyb3VuZDojYjNiM2IzO2JhY2tncm91bmQ6dmFyKC0tY2xyLXRpbWVsaW5lLWxpbmUtY29sb3IsICNiM2IzYjMpO2hlaWdodDouMXJlbTt3aWR0aDpjYWxjKDEwMCUgLSAxcmVtKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDEuN3JlbSwtLjk1cmVtKX0uY2xyLXRp''@;'; put 'put ''bWVsaW5lLXN0ZXAtaGVhZGVye2NvbG9yOiM4YzhjOGM7Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaGVhZGVyLWNvbG9yLCAjOGM4YzhjKTtmb250LXNpemU6LjY1cmVtO2xpbmUtaGVpZ2h0Oi45cmVtO3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tYm90dG9tOi40cmVtfS5jbHIt''@;'; put 'put ''dGltZWxpbmUtc3RlcC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb24sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb257aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtO21pbi13aWR0aDppbml0aWFsO21p''@;'; put 'put ''bi1oZWlnaHQ6aW5pdGlhbH0uY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjZHMtaWNvbltzaGFwZT1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPWRvdC1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3Rh''@;'; put 'put ''bmRhcmRdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjbHItaWNvbltzaGFwZT1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3NoYXBlPWRvdC1jaXJjbGVdLC5jbHIt''@;'; put 'put ''dGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3RhbmRhcmRdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXXtjb2xvcjppbmhlcml0fS5jbHItdGltZWxpbmUtc3RlcC10aXRsZXtjb2xvcjojNjY2O2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yLCAjNjY2NjY2KTtmb250LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXdlaWdodDp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC10aXRsZS1mb250LXdlaWdodCwgNTAwKTtsaW5lLWhlaWdodDouOXJlbTttYXJnaW4tdG9w''@;'; put 'put ''Oi40cmVtO21hcmdpbi1ib3R0b206LjNyZW19LmNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9ue2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24tY29sb3IsICM2NjY2NjYpO2ZvbnQtc2l6ZTouNTVyZW07bGluZS1oZWlnaHQ6LjhyZW19LmNs''@;'; put 'put ''ci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uIGJ1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6LjRyZW19LmNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uIGltZ3t3aWR0aDoxMDAlO21hcmdpbi10b3A6LjRyZW19LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWx7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxNnJlbX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXB7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi1sZWZ0OjA7cG9zaXRpb246cmVsYXRpdmV9LmNsci10aW1lbGluZS5jbHItdGlt''@;'; put 'put ''ZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwOm5vdCg6bGFzdC1vZi10eXBlKXttYXJnaW4tYm90dG9tOjEuOHJlbX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXA6bm90KDpsYXN0LW9mLXR5cGUpIC5jbHItdGltZWxpbmUtc3Rl''@;'; put 'put ''cC1ib2R5OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDouMXJlbTtoZWlnaHQ6Y2FsYygxMDAlICsgLjJyZW0pO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEuNTVyZW0sMS40cmVtKX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXAtaGVh''@;'; put 'put ''ZGVye3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstd29yZDt3aWR0aDozcmVtO21pbi13aWR0aDozcmVtO21hcmdpbi1yaWdodDouNnJlbTttYXJnaW4tdG9wOi4zcmVtO21hcmdpbi1ib3R0b206MH0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGlu''@;'; put 'put ''ZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGV7bWFyZ2luLXRvcDowfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2FsIC5jbHItdGltZWxpbmUtc3RlcC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjguOXJlbTttYXJn''@;'; put 'put ''aW4tbGVmdDouNnJlbTttYXJnaW4tdG9wOi4zcmVtfUBrZXlmcmFtZXMgc3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdv''@;'; put 'put ''ZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUZRZ0FCTUFBQUFBbThBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmTkg1NWtkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY2FBQUFPZGp5K2VqbEhV''@;'; put 'put ''MVZDQUFBSk1BQUFBQ0FBQUFBZ1JIWk1kVTlUTHpJQUFBbFFBQUFBVFFBQUFHQm9QcXpyWTIxaGNBQUFDYUFBQUFKc0FBQURubmRERDdGamRuUWdBQUFNREFBQUFEQUFBQUE4RVk0QmpHWndaMjBBQUF3OEFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FBQUVuZ0FBQUFJQUFBQUNBQUFBQkJuYkhsbUFB''@;'; put 'put ''QVNnQUFBTm5NQUFHZ1V4RklnTjJobFlXUUFBRWowQUFBQU5nQUFBRFlMWVlnVWFHaGxZUUFBU1N3QUFBQWhBQUFBSkFkMkJESm9iWFI0QUFCSlVBQUFBb2dBQUFUdXVQSS9GR3h2WTJFQUFFdllBQUFDY2dBQUFucUphbkJ3YldGNGNBQUFUa3dBQUFBZ0FBQUFJQUtFQWVsdVlXMWxBQUJPYkFB''@;'; put 'put ''QUFZSUFBQU5XTGRDRTlYQnZjM1FBQUUvd0FBQURvUUFBQmlHWEZqMktjSEpsY0FBQVU1UUFBQUNCQUFBQWpSbFFBaEIzWldKbUFBQlVHQUFBQUFZQUFBQUc5bmhZbUFBQUFBRUFBQUFBMUZHMWFnQUFBQURUd1oyR0FBQUFBTlMrcHZWNDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZW''@;'; put 'put ''L3ovQUlnUkMwVFFDTFI2Y2RGUmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY0JiRmJWRmY3T3VmZSt2LzBMV0VvTENCMERVaGt4VFdXRVNVVkdpV01Gc1ZQRG1FRUhabHVjWTYxUTdCalppREZLSFpxbDZZekREcEUwcUF5TU5zQlFz''@;'; put 'put ''U0t5cHF2T09VZGtZNlloWUZ3SHlEWW0wN25GQ1BMMnZmTis2RjlvdC9HRmo4TzU5OTE3enpuZjdibUZBTWhpTWhaQzV0WFdMVVlCUEQySVl6aitJMUM0aG04M3JVVHBpbTgyTmFCOFJjT0tCczRHL2Nsb09pTmh4Kyt5R0kwSm1HSWVod3JVdVk1ME5GcGxxMHJVaW9nZnlmRFYvR0tjK1FKS0ww''@;'; put 'put ''QlFHN2VTQTJhakJaOGlsbkZRSG9QelpLd2NRUkdHOFdSL2o3dmo3WEZ2ZkJSRC9Jay9HSExrdDRONis3aDMvditQeHo4ZGNvWDNoaHdaK2p4L2pQY09NYkk5N292M0piakkzOHUvdjBrdzJCNXhLN09rbU1oTVQyRzJQa2NvcWdpSHF3aVA2VVRBRjRnSU00a01yaUVLTUlzb1pHNW5zMUpyQ01I''@;'; put 'put ''OStCRm5Qa2dFWnJ5Ri9oY0l3WXVFNENWQ2NaRHcrQVBoY1pRSStETVI0VGdSNFQwaXdta2lndytJRE00UWhhemVwMXd0SnJKU0xNVW9sQklwSVpkS0tYa2NLNXZsMnRPb2tncCtjeVVoZHU3MHhHb25kblppYnljT21FY1VvSllveEFJaWkwVkVFUnJ4ZmE2UVJCSlpKSkZGRXZBVFBNcjViVVFo''@;'; put 'put ''Zm9aTm5QOEVmczc1MjRraTdDUXkyRVVVNEJkRUJydUpBanhIWlBBOFVZQTlSQ0U2aVVMc0o3TG9JckxvSnJMb0liSjRsUkQ4bWhETFRvUjNpQ0w4aVVqem9wWVh0Yng0eTB1d3ZBVExpN2U4ZU11TGx6RXlodm02WEM0bkp6a0tYTFdLR1pyQ0dsZXh0dE5aMDVuTXpDeG1wQkdyY0RlYThEMnNa''@;'; put 'put ''aTN2eHpvMDR3Rm00VUZHdjVNUlBjZEt2c2dLSG1UbGpySml4MW1wMHp6SkdidFp4ZHkzTkxsZmVxL2R3OWVraVhFUHA3cjJVWGV0OGI4R1VhdU5ESFlITG95Y1NqRElsNmVIdkJ1bnppdWU5L3BvM0J3M1h6eVMzcnA0Yzd4NTBKRy8yRGVLY3RPRW1DWVVYeU1jYmlVOGJpTUNsaElSRmZFbzV5''@;'; put 'put ''UnFFRk9EbWhvVUhVU0VIVVJrbFJhcnRGaWx4U290VmxmRk1jTGhCT0Z3a25BNFN3U2NJeUlaS1NOWjExRXlpbHdtWmVTa29tSVZGUmt2NDdtK29oS1hFVVVZU1F3enBZc3BYVTNwTHFmMCtVUyswcjNGRStYRmt6R2x1NXpTK3pYdUxTcHZVV1VzcXZOS1R6V2VxbnN2TWJTdWsyaTlhVlp6RVNi''@;'; put 'put ''S2RSWm54dlRyVEwrYWl6bFJzZVlpVDdTc2VmSG5LOXBaRmpJeVRhN2g3c2xQcjFwR3VJajF1cFZ4TFdVa2JZeGtJeDVqTkUvZ1NUeUZyWXhvT3lQWndkdll5ZE4yOFpROVBOMHgxdUFrVDNhT0p4akYzY1p3bC9GY2NZTHBXVEhDT2txSnFhT0V1OVRRRXJOcjJJbU9SQlBJZmN4L3Q2eVhGbmxF''@;'; put 'put ''TmtxN2JKVm5aSmZza1gzU0xhL0xBVGtraCtWZE9TR241RVA1V002cDE2d1c2Mmd0MThrNlZhdDBoczdTdVZxcmRicElsK2p0ZW9mVzZ5cGRvL2ZvT24xSVczV0RidEl0dWswN2RMZDI2bjd0MFRmMExYMWJqMmlmbnRUMzlTUDl4TUZGYnBncmNXUGRCRmZocm5UVDNOVnV0cnZPTFhBM3VzWHVO''@;'; put 'put ''dmNOZDZlN3l6VzVIN2g3M1FQdXgrNWgxK1kydXlmZDAyNkhlOTd0ZFYzdU5mZW0rNzNyZGUrNFkrNnY3aC91Mys2c1YxL2dSL2hTUDg1UDlGTjhwWi91cS8wY1A4OHY5RGY3Vy94Uy95Mi8zSy8wcS8xYWY1OWY3MXY4STM2amIvZGIvVE4rbDkvajkvbHUvN28vNEEvNXcvNWRmOEtmOGgvNmov''@;'; put 'put ''MjU0RU0yRklmUm9UeE1EbE5EVlpnUlpvVzVvVGJVaFVWaFNiZzkzQkhxdzZxd0p0d1Qxb1dIUW12WUVEYUZMV0ZiNkFpN1EyZllIM3JDRytHdDhIWTRFdnJDeWZCKytDaDhFaUdLb21HOEhVMjZrOXhzUE4rNHhuaER3bWcwYmpQUDJuNS9qbTh3cmpTKzFuaGx3bHBtOXZYR2M0d3JsRDlUNVFy''@;'; put 'put ''anE0eXJFMGE5Y2J1K1RHNHdmNlh4YlBQM0dwOHh6MFRqeDQwbkdVZkdDMXc5K1NuanBzRlpmNVVYWTQzNUwyRjgyWGlMY1dNL3k3STBkclB2TW43VmVNT2xuR2JBN0V2NWV1TUs3ZnBmck04T3lGWFhZSXk1eG84YjEvY3pzOWRsMmZ2dm5PYXphMUNlbE1kTmVXY2VZT2ZWdE5uOFY1Zy8zNTV2''@;'; put 'put ''T1d3eGUxbGU1dE1vQnRnMm1xb2kzNTltdFRxMWJVNnFtYlE2YWRTcFBuTjJ6cC9NYVRPNzNhMDVyOTZjeGc2YTNaUFl1WnFtR1Z1YlUzSzR5SitlSWMzYkFiUFhXbzBPSmZOZHFzQWJiSzllbTJNM0l0WHRBSCtsMldkeU5kcDVRZFg1L3ZRR1hadW5tYlFpK2ZaV3M3K2UrbTIrM1FzdE03L3BJ''@;'; put 'put ''YWUwU1huMkhPUElQRVBaZnpQN2JvdXUxdXczemM1ZnVTYitKYmtxM245UnBmSjNyTTdkN3E3L2d3Zk9WSHpXM3FYZ3Uyc3FzNUs4VGoyN2RpVzdZUExDanZCNXZzUXltSUZxOXJDa2M0OWczLzRpZTNyU3VVZmFHN1hFT3Zjby9sNjFrSDJvamlqRFRleHpvOW5wYnVIdlBrdUljdXZsbjJIWFc4''@;'; put 'put ''YXUxY2kzMjBSN3ZjMWtSMi9uZWx2WStiNWl2ZStyN0g0dnMwTytnZ1A0RGw5MHAvRkRlMVZ1eEQ4bDRERjI0dkhvc0o3YXlmT0tYR2EvbTBXUWVMMnA4RDdjU1Y3UGJsZUVzZHlyZ2hGTnc5VTg5WFU4NVkxWXpORVhUTHUvTXo1c2JIZUdHdTNuZzhiTGpiY1o5eG1mTlM3Q2w3alBjbnhYTWxJ''@;'; put 'put ''Z2haS1ZJaGt1SXk0OTBYOEF0bEtYV0FBQUFBRUFBQUFLQUJ3QUhnQUJSRVpNVkFBSUFBUUFBQUFBLy84QUFBQUFBQUI0Mm1OZ1pySmduTURBeXNEQzFNVVV3Y0RBNEEyaEdlTVlSQmpOZ0h5Z0ZCeXdNeUNCVU85d1B3WUhCZ1hWUDh6Uy80MFpHSmlQTXFvcU1EQk1Cc2t4c1RLdEIxSUtERXdB''@;'; put 'put ''eGxjS05nQUFBSGphdFpOWlVJNVJITVovLzdkOUVTb1U5ZmIyYWROR29oUkY5cVhJdnBTczJiS3YyUnJyRUVORlVzaWVKS01aRTFOVHRodnV1RFZqakw3UGxWdnVEQjNIVjB3enpMaHladDV6M25QT25PZWNlWjdmSDNDaDZ3dEJkSTlVNnBrNDU2NVNyTWNsak1PTmdaUndpenJ1MGtnVHpiVFFK''@;'; put 'put ''aDRTSUlNa1RBWkxuQ1JKcXFSTHBreVZITW1UUWltU0VpUFZlR1c4ZDRreWo1dXQ1aFB6aStWdUJWckJWcWhsczZLc1lWYTZkZC9tSC9sTktYMkh4WTBlMm85cDQ1bjRTbjh4eFNheGtpZ3BraVlaa2lYWmtpc0Zza0UyYSsyWHhsdXRmY2hzTWR2Tno1WmhCVmhCVm9oVGU2aVY5a3RiZlZRdjFI''@;'; put 'put ''UDFWTFdyVnZWSU5hdUhxa2sxcWdaVnIrclVOVldyYWxTMXFsS1Zxa0tWcVRPcVZKM29mTk9aMVpuMC9aT2ozRkhneUhmRTJBZmEvZXcrZGkrN205M28rTnJ4dWVQd2g1QjN5VjFlL2FmbWJuZzdrK0NQV3dTais4LzRoMGJYU1JkY2RYYnVlT0NKRjk3NDRFc3YvT2hOSC9yaVR3Q0I5S00vQXdn''@;'; put 'put ''aVdHYzhTS2NlaWttWVRpUWNHNE9KSUpJb29vbGhDTEhFRVU4Q2lReGxHRWtNSjVrUmpDU0ZWRWFSUmpxakdVTUdtWXpWekdReG5nbE1aQktUbWNKVXBqR2RHV1NUdzB4bWtjdHM1akNYZWN4bkFRdFp4R0pOV2g3NUxLV0FaU3huaFg3L0RuYXltMklPY1p6VGxGTkdCZWM1UnlWVlZIT1JHaTV4''@;'; put 'put ''aGN2VWNwWHIzTlFVL1dUME5nMmFwWHVhcHA5dEZhdTFIZEZzNEd5M04rdFpvL3RkblBqdFZ1RmZITHhBUFp0WjJXTmxMWnNrUm85YjJNNHg3RGdrWFBNWktWRzZBaUs0bzNjZW9HbVdCRjBQOGQxbmlweGh4TEtOdld4bEgzczR3RUZkUy9zNXdsRzlkWmhTVG5HUzE3cWFlckZPdk1SYmZOZ29m''@;'; put 'put ''cHAvengrUXphcm9lTnBqWU1BQ0hJSFFrc0dTYVQwREE5TnVKbFlHaHY4aHpOTC9qWmwyLy8vQ2RJQko4UCtYLzM0Z1BnRElQUTBpZU5xdFZtbDMwMFlVbGJ4bEl4dFphRkZMeDB5Y3B0SElwQlNDQVFOQml1MUN1amhiSzBGcHBUaEo5d1c2MFgxZjhLOTVjdHB6NkRkK1d1OGIyU2FCaEo3MjFC''@;'; put 'put ''LzA3c3k3TTIrYmVXTXlsQ0JqM2E4RVFpemROWWFXbHlpM2VzMm5VeGJOQk9HMmFLNzdsQ3BFZi9VYXZVYWpJVGVzZko2TWdBeFBMcllNMC9CQzF5RlRrUWkzSFVvcHNTbm9YcDB5MDlkYU0yYS9WMmxVS0ZmeDg1UXVCQ3ZYL2J6TVcwMWZVTDJPcVlYQUVsUmlWQW9DRVNmc2FKTm1NTlVlQ1pw''@;'; put 'put ''ai9Sd3o3OVY5QVcrYWthRCt1aDlpUnJDdW45RThvL25RQ29NZ3NNaTBnMENTVWZlM2dzQ2h0QkxZSjFPSTRGbldxL3VVbFM3bHBJczRBakpEaHpKS3dpK3hHV2MzWE1FYTl0aEtQT0F2U0pVR3BXZnpVSHFpS1pvd0VNOWxDd2h5MlEvclZyUVMrRExJQjRJV1ZuM29MQTZ0YmQraHJLSWV6MjRa''@;'; put 'put ''cVNSVE9ReWxLNUZ4NlVhVTJ0Z21zd0VEbEoxMXFFY0pkblhBYTl6TkdCdUNkNkNGTUdCS3VLaGQ3Vld0bmdIRHE3aXorVzd1KzlUZVd2UW51NWcyWFBBUWR5Z3FUUmx4WFhTK0RJdHpTc0tDa3gwdlVSMFpMU1ltQmc1WVRsTllaVmozUTl1OTZKRFNBYlVHK3RNb3RpWHp3V3plb1VFVnAxSVYy''@;'; put 'put ''b3dXSFJwU0lBcEJoN3lydkJ4QXVnRU44bWdGbzBHTUhCckdOaU02SlFJWmFNQXVEWG1oYUlhQ2hwQTBoMGJVMHBvZlp6WVhneWthM0pLM0hScFZTOHYrMG1veWFlVXhQNmJuRDZ2WUdQYlcvWGg0R0FXTVhCcTIrY3ppSkx2eElmNE00a1BtSkNxUkx0VDltSk9IYU4wbTZzdG1aL01TeXpyWVN2''@;'; put 'put ''UzhCRmVCWndKRVVvUC9OY3p1TGRVQkJZd05ZMHdpV3g0WkYxdW1hZXBhalNrak5sS1ZOWitHcFNzcU5JREQxdy9Eb1N0Q21QOXpkTlEwaGd6WGJZYng0WnhOZDJ6ck9OSTBqdGpHYkljbVZHeXluRVNlV1I1UmNacmxZeXJPc0h4Y3hWbVdSMVdjWTJtcHVJZmxFeXJ1WmZta2l2dFlQcU5rSisr''@;'; put 'put ''VUM1RmhLWXBrM3VBTDR0RHNMdVZrVjNrelVkcTdsTk5kNWExRWVVd1pOR2ovaC9pZVFuekg0SmRBZkN6emlJL2xjY1RIVWlJK2xsT0lqMlVCOGJHY1Jud3NuMFo4TEdjUUgwdWxSRmtmVTBmQjdHZ29QSGJCMDZYRTFWTjhWb3VLSEpzYzNNSVR1QUExY1VBVlpWU1MzQkVmeWJBNCtybHVhYzFK''@;'; put 'put ''T2pFYlo4MkppbzlHeGdFK3V6c3pENnRQS25GYSsvc2NlR2JsWVNPNG5mc2E1M2xqOGcrRGY0c1haU2srYVU1d2NLZVFBSGk4djhPNEZWSEpvZE9xZUtUczBQdy9VWEdDRzZDZlFVMk15WUlvaWhyZmZPVHlTck5aa3pXMENoOVBCRG9yMnNHOGFVNk1JNlVsdEtoSkdnRXRnNjVaMERUcTgreXRa''@;'; put 'put ''bEVLVVc1aXY3TjdLYUtZN0VVWnpJQXBLT1Ntc2JEczc2UkVXbGc3cWVuMDBjRGxSdHFMbml3MVcxWnhoYjBINzJQSXpTeDVOMUpldUNrcDdVV2JVS2U4eUFJT3VaRTl1Q2FDVzJqdnNvcGlTbGlvSWo0SWJRWDc3V05FSmkwemd5NkJJbVJ4c3JJUDdZb2RPYUtDZGdMZmV0SXE3OXRDN2M5MThp''@;'; put 'put ''QXdtNTF1NTBHV2thTHpYUlgxYW4xVjF0Z29WNi9jVFI4SDA4NndzZVlYUlJsUExudmZuaFRzVjZjRXVRSkdWM2EvN2tueDlqdlc3VXBKUHRzWGRubmlkVW9WOGwrQUIwUHVsUGNpR2tXUnMxaWxFYyt2VzNneVJUa294a1Z6SEJmMDBoN3RpbFhmbzEzWWQrMmpWbHhXVkxJZlpkQlZkTlp1d2pj''@;'; put 'put ''K1h3anFRQ29LV3FRaVZuZzZaRDZiblpyd3NaUzRMRVhjczJUWFJmUWRQQ0VkNHI4NHhMWC82OXh5Rk55aXloSmRhTmNKeVFkdEh5dm9yU1c3azRjcVJtZnR2R3hub2gxSk4rZ2FncDVJTGpqK1h1QXVqeFhwRk83ejh3Zk1YOEYyNXZnWW5RYStxdWdNeEJMbnJZSUVpeXJlMGs2bVhsQjhoR2tK''@;'; put 'put ''OEVYVlFyTUNlQW5BWlBDeWFwbDZwZzZnWjVhWlV3RllZUTZEVmVZd1dHTU9nM1cxZzY1M0dlZ1ZJRk9qVjlXT21jejVRTWxjd0R5VDBUWG1hWFNkZVJxOXhqeU5ickJORCtCMXRzbmdEYmJKSUdTYkRDTG1WQUUybU1PZ3dSd0dtOHhoc0tYOWNvRzJ0VitNM3RSK01YcEwrOFhvYmUwWG8zZTBY''@;'; put 'put ''NHplMVg0eGVrLzd4ZWg5NVBoY3Q0QWY2QkZkQlB3d2daY0FQK0trNjlFQ1JqZnhqTFk1dHhMSW5JODF4Mnh6UHNIaTg5MWRQOVVqdmVLekJQS0t6eFBJOU52WXAwMzRJb0ZNK0RLQlRQZ0szSEozdjYvMVNOTy9TU0RUdjAwZzA3L0R5amJoK3dReTRZY0VNdUZIY0M5MDkvdEpqelQ5NXdReS9a''@;'; put 'put ''Y0VNdjFYckd3VGZrc2dFMzVQSUJQdXFKMitUS3J6WjlXMXFYZUwwbFAxMjUxMzJQa2JaVE82TEFBQUFBRUFBZi8vQUE5NDJyVjlDWGhiVjVub09lZEt1cElsMmI1YUxjdWJyTlhXYW11enZNalhTN3d2Y2J6RlNSeG5jNXkwS1YzU2xpNGhwTFFORkFxVUFXWllocjR1MEtGTVM1SzJkS0h0RkNo''@;'; put 'put ''UTJxSExERytBZWNNSDVRMHpMRy9ZQmpvd2JYMDkvem4zWGxtMjdLYndmUysxSlB2cXJQLzU5K1VVbGFIRnRTVCtGT2RHSEtwQWR1UkNYdFNFMGlpSHV0QVFjb21PM254bmV6YVRiQTc2NnF1ckhFS2xRVU5RV1NLczlRZ2UzcDYwZSszSnREZWRUUFBzazRkZjFhZjBHZjJrMzhDVHRQcTcwb1ox''@;'; put 'put ''eUNiVCtGUFNzN2pyUDN0NjcrdnR2ZSsrM2thUHA3ZTM5MGl2NTliN2pqUjZqbmp1dSs4K3o1RWp0dzRNM0hkMG9PRkY3bWQ5SHI4SGZtNDYxamd3NERzSXZ3MTRPbnNiajl6UTVvenZ2UExLQjYrOGNtZDh4UlAzd0E5Q0JFMnYvUjZkSStmWTN2eGlJOElZTFNLRXlrY1JJZHlTQm5PY2t4dlRh''@;'; put 'put ''RFFWbW5LL1VLbmxuV0Zya3ZNNkF1bFVKdG5xc050MDN2M0Q1b1RHN2JaWnE2dXQ1SnhrZWRGdHM3amRGcHNib2JVMU5JZ2Z4V1BrazVXTnFBeWhTZzdlSDBGMDNpQzhYUWZ6dWxFOXVtSDB2SGZuYmpGVW9TTkl5eEZNRUY0MllvT2hmTFM4MHN6eHZIN1JWRWIwZW1GVWd3bXBJR051TVVBZnND''@;'; put 'put ''K1JuajlhMms5cHVDRFdJVlJmVjFzRDA3aXJYVlZPV0xCVktQemphOE9ZVC9KZTNwdGxyMnlTdlpJOGUvSDBTL3liekkzbUcyTnRzYnZnZGEzNTJzdzd6ZGNwZjkxZ2Z2aXV6RjM0YTk5TlB3Yi8wdDlOUHc3LzB0OEZTTWJXSGlVUjhnZmtRU0VVUjUxaUx1YjMxZFZXdTV3MnM2bk1ZT2FJRGlP''@;'; put 'put ''T2pDRENrWnNSUnZnV0NtYTBCSEJ4b3JHbXBxWjRVOXhoRnl4YTNoSDJsV1BBa1hRTUI3TU9weERENlZRZVp3RlpIRTRlbmdsMTJJNGN6blE1ZkdUU3FVQlFJSkhVa1IxaXo4bG9hT2Z4b3dkYTkrYkVLeFpEdnBubzVlK1E5b3M3T2thd2VXWjA2dWE1Tk5mZHkyY2pyVHNyY1dYMXJxSGtiRnJY''@;'; put 'put ''MldXY2JmVkdlT2xOOSs1SlhKTzIvWjRmYnBXeUk2bVdEb2YwSnF4TmkrSnIvMFgrbFh3Sk1NVUtweFpISGVpRjBmTlZjSEpoSTlhV1lhelQ0aFdrUTNxRFRuOE1hVFJvaVdDS1NXWTRFbTdKeEJPT3ErREczS1BuZzlBbC9wWmRFRFJsL2ZnbEUrWjVKdzlubnR5aUJ5SFFsblpEVy9kYVdCQURp''@;'; put 'put ''VVJEZzgyR1VLSWowWjVKTmNRYllxR0FyZDVXVjExbHRRaVZzSm55UURsdkQxdGs0Q1piQWFhMmN1ekZTZXkxVUtCNkczVjJteU9KTm4yZngrdmYvZlZBTURRWWlRN0NleFIvcUZOcTdyd20xeDZKdExXSDhkUkFLRGdZbGIrS3RkR0h1UWhlakU3RVczWkdvNU9KbG9rbzNyVTZoVDg0a000TURt''@;'; put 'put ''VFRBOUx4NkVSTFlpSVduWXkzVEVZVEE1bjBJUDBLOXNlaHByWGZreFBrTVlCOUdQaFBYdXlJUi8xMU5XNlgwNERMT0ZMUGtJcGlQbDRDTW5hTWFvdXdLaEpwYUlpa0k2bUdjRU56dUZFSG1LVU42cnlOZEUvWjRvM0JOODVNMXFuam5ZanV6Q252MHBJTkJPSFBPcHdraWFWOUp6dVA1Tzd4MUVY''@;'; put 'put ''R0U1SGg4TnhjNXNwSVV5YVJ2RnI2ZEZkdC9VUmZyamswZmpwL3RubW9tVCt3M0xLUXUya2dPdWlMaklUREk4MzVVWi80VHZGQTFmSGhhOGp4OWxoTlY2Z2hHMjd1V2owM2Q4dFkxLzZRNkFWaUFINkJQa0UraVV3b09ucmVBWWhpcEN5Sm5TOEdKS2hFOU05NStCTXZVdElaWDNqRTdpT3dIV3VC''@;'; put 'put ''STFWZzcyeDVsU0E0eS9rZy9vOUQzc29xcCtBOWxJSFcrYlU1SENOUHdkaTZoMDFhbkFnek5wWjFBdm5ZblB6bkw3bmtzSGR1NFp4MzE0OXZ1T0hIdS8yN3YzN1ZEeTRFWUNLZzV6bGNwL2JUUVQ4bkk3YXNETERZdVlVNTcySG9mTXVGSDF6MWRlakh1dE4rSGZnbTRIMWZRck5JRkx2OEdKUEpI''@;'; put 'put ''ZDJ4UnBkTnEwZDRGOVlpYm9URFdJT1JGcU1WSGRacXlSSkZhTzBZN0c0V3pRd1BaZEpOd2RvYU4wK3hFMWJhalhuZ0JuQnFRZmdqbStuR3dZRDhXN0xWNmFqSHdTSUlaTExBSnRoenV3MDZWV0NIMDhGK1o3M2hQeWRqM1Y4MkczVGVpb1p5cmNiTWE4cWMwWEFrWmkvVDhHYXR4dExzMHhuTXdL''@;'; put 'put ''ejB1c3BLTG1UVGFzMDhWeWFFZFJHbkkrd280M2l6VHVNSU9ZdzZ2ZG1BYnpMcmExcWFhOHhWUEdmU2E0eThXUkFzRmlOdjFPaE5YRmxqVFhOTGpkNXMxanRhNDZaeXJzSEltWFJhRTE4bUVHZ2ltSGlUVm1maXloc3MrbmlyUTIrbUI0djYwSEZTVGxMSWlBS0FFeG9PYTJZQmw0RXpZQTR0QTdu''@;'; put 'put ''VG85ZmdjY2JESzNWOGRSaDdxZlJNVXltYUpPWGZ6RC8zWFA2Yk9QNU4rZ3NkYjNMdE5Ib003VVRseUNrQzZhSkJGYVdBTUh3V2lqMkE4NDNySW8yZkRKcXRJTkdjTmZXaDQ5RUVGVzMrdWxxeGxZN1ZobjZMTzNBTXFMRkt0RE5rbkYxSFJxR1NvYUxIN21uRG5MU0tZMTFzUDhNZ1l6OEg4eHVw''@;'; put 'put ''dGtDZkFKZkQySW5wUVJ0Um1ZK0RBeTZXcUVjVWFXb3FTRks4OXB1MVIvSEh5VTloWGtFc3A0T0M1TUJYeXhOU1ZvVW5CNlM3QjhoUDMzd1pNZm5hQWJ6aUdIa1MyRnM5aW9oTmdGaHN4ekpYd0NEWTJRSXFnWjRxNnl2cnFoeU1EK3BnSVpyTmZJNmtVekhzYmFSRUFnd0E0M2NQRHI1N2F1cjA0''@;'; put 'put ''T0RwcWZ6QlRPWmdQbjhva3ptVU4rMjlaMlhsN3IxNzcxNVp1V2R2NTlqWnVkbjNqbzZlblpzN084WmdVQTN2YjRDODF5RzNXQVZIeVFHOFJtU3VqUUUveHdRckF4MGZ6Q1lGNzVPMzFENllFc21CMlphVHExT0k5VytCVGVsaFB5N1VMQWFOWmJBZHdBWkNSaGc0R2J1akNzc2lZakpHY1BxQ0dy''@;'; put 'put ''NHFuUFZUL2tWWHp3Y0xISzRDdy9tMHdLbjBOdTFvdW1KbkxIcjljT2VoM05qTXQvQkpxYW50WC9LWHBwcDZBNWY3eGY3VVlxN3YxTkNEOGhtR0FKNWFtRCtNdXNWT2R6WE01UU9DaGhYQU1rQ1NRd3NDY29uak5FdUFvTEFZa0pkTGxLYWRqSnpEcU5ubjkvajlQTytDazZhY0k5bktXR3NZcDUy''@;'; put 'put ''dEdYbU5PajZZVWJtd0F2eFhUa1dpdnFQNXhGajQwTnlPZ2JGOXpjT1J6RUpUZVBIOStTUHRBMjJkVTUyWDlKcDYycHVUV1g5UFU3NjNFL2QzK3ZPK2RDcDBLakdYN3RvbGxNLzJaZmVtR0Q2RTRDMEY4QzlEWmhRVm0wMFlVSEJFcDRWOVlBVDY2bEVBSVJPbEZab3hvOUZvTmdJTkM1Wkt1bDYv''@;'; put 'put ''SjRpVEF0Vll2V2tCNDl1a3p4dnd6UGlsbDRyU3p4OXN3eTlJdVk0SGY0WnZrTTdLNTlRR2NITENQQTFVNzNFQWV4TXFPYUpCR0U0SzNwR0dBWWtzeXBKN0k1QWFVSDJqWUEyVUFFaytQMHBWZkthQWxqOStWNlM1ZWFVOVBoR0pUQ1FtUjFzTitJUFNRM3pmWE9keVovNUVyNms5R1k4bHcyUFJ5''@;'; put 'put ''RkFvVzRXWHVsNXZTUi9JOTZ5ME0xaDB3aHI5Y0padTBPTjd4VzRnSW80RXFvaFdRMFowd0dJMFdrNnpnZ3BpbEljRnF0eWlwZ2FobXFhYWtLOFJPbGQ3L1FFOUtNUklXUkxsSUJUTG5IeUFra3N0aGo4czZnYm9rU2J4ZTQ1MmRaM29QWDFtOE5UWU8yWjlvM081L1pucXkzcjlFNUhZUkx6L3NM''@;'; put 'put ''bHkzeEIrTUhPd08zK3M2OGs3Vi83bXdLN1c0YW5iNTJ6cGJ1bE1mTHc1UHR3MDNyVjdXWVp6QjJ6RXdPaXBYcXdCR1lJWk5WRStoSm51RHRvdmFEY2NMQTk3MGg0N01JaW5wSGZqbDZUdkRKT3J1bHBXMzBQMWlSVEFvWWJCSVF6ajlZczlOaDBCYmp2Q0Z3RkI0UnA2QUFLR3MySmNJeEtoY0lo''@;'; put 'put ''MFJOcFRyVFhobW1ZWkdoRURaV09VZTJRMnFSUUtmQXF3a0ZtSlUvazdXRTRZWi9uSjVUMnp2WjNEM2NjNk9vOTFqN1gzenZaYzBkYzBFbytNUkVCN2lJK0VXbllsVXRPUnlLNTBZbGVMcVdVKzI3WGY3cGpMcHFaanNabFVidGJtMk4rWm5XL0J0M3R5Zmw5SFkyT0hMNUJySU5JRlh6NFE2dlpp''@;'; put 'put ''N08wT0JmSSt0Tlg1MTFYQzBSdjBZRDhRMkxvV0NGbExWb0FVT05ndnh6bEdpNlNGZXY2TkRYVEhBYStmbmI5RFBuNVEwU25DZG1INmh3SUJDNFhGT3ZQODNLYVQ3Mkw0c0lPZGZBdkRBdkxreHBPWHNVRTZRMDlleGdGNUQweW00TmRCZnNDeVJzOUhRVk55VXFiT1ZpckkxcHRXdHQ3Y1ZGREJk''@;'; put 'put ''OENrVm9xZkw0Z1drd2toazlQa3NGUXlRYVJUTkExVkVKRXRoSkpOK2NSMzFsaXBkTExXU0hPcW5BSjdqOGxhL0RyWWV4V3dEaDRKeUlTL2dBd1hNSDRjZitGOE1reHhONHNXc1VTbUFYZDFEK3NJNkZQV3ROOXV4dllzZms2NkFaL0ZYWmxYODA4L25XZjc3RU5mSmVYNFh3QmJlZFFvMWxNY3Ay''@;'; put 'put ''WWUyRTRjbVZWWVB1R29MbEJKT1Q3bEV2Uy9QdnozVXBxOS9pVi9aeDdtSEVPTHhLck95Y0djMlNoT2ErM2FNWHdXNW54T3luMGFabncxOHlxZDA3MzJlL3d0d0k4cTVFTlpNZVV3R1NtTHhKVE5jekR4NlNLWlF4bStGbXMwVHMyWXkrWHl1YnorS2w5UVJ4ZWl5czExcnM1TXVXSTUvMHo3M3FT''@;'; put 'put ''dnB5azc3dy92Tzl1K21FcnViZTh4cStDOVdodnM4RFoyK3BMeDVwTXRNOG5JenB6eFBVV21OVjFuWk8xMmJnZTVGM1dqQ1ZqTCtUckFBYUhSUS9SY2c0Vm85SjBkWUdkeUkrNzFad2IxMllMY09HUTBFQTNJQVIzbHlyb3kwQzM1dzBoaGRzQkU5SHB1Q1RZbzZLbk5WZy90bzJCY2E3QmhIcjNk''@;'; put 'put ''VGszVU5nU1k2UTJjZnVXaW5iV0FxUzFVSm5CSXU3SjlMNTdYelNPZGpsOWkzU2NYd01hckVrV0V4QWx4ZkdnQWdKRVBCSm9DdmtEQXhMdEx0Sm5HUUxDSU9sc2R6cXlUWnlaYzYwYm1sR3hsZG9HWHF0SE16cU9QSFVuY2YvN1lWVis1NHNpRFI1TlRzV2ludm02MkpUN2MzSE84dlhYUVltNHZp''@;'; put 'put ''NFRxNjlvRGk1L1p1L3pGbGYxMzdjc2Z6bHJhMzlFZjNHTWc3ZW40emtSUDZ1cWpEeDY1L0N0WEh2enMwc1JsR2JCREU1R0paUC9KdnBpM1Y5djZUKzZHUUhpaGQvWmo4eXZubHZkK1pySEc0L1kzdkxZOGFpdEw1ek1McWJZQmR1WU44UFoxNFBzOFNQS3dHREpnQU13SVlDQ2dwQWFrT0JXcllG''@;'; put 'put ''UlFqVXF2MTVmcHkyUVZ1UXFrT005TTJxQVJrNngwN2VBQWp0T2Z3L2ZmZjg4OTVOenExS3Y0akhRR2dMNGZ4ajhHNDFlQ3B0V0l1c1IyNFB3d2d3Nm9EdVNqZGhuT1ZuRVE4VmpXeE9sYzdtcUw0S212Ym5RM1Zqa0VsOFVWYWRBelJYaWpBUEJncXVxQXptTzNLcjhJKzNGcmRpNlJqTGYzcFJZ''@;'; put 'put ''N3BLL2hVTWZvZU5kUGZ0TTNOOWYzRzNJdU10R1NIbmRXTDdabDVoTDQxcjUwcXUvWDBxUGpIUjFqMG04cEg2SHk2d05BcDdVb0pvYXJYY1l5aWlRaktydDJiSEJod1lOYVZCUHdCNmdMUzdOKy9uenBtZVBzdlFjTzNMczRjS1lsRXJva04zN0x4TVF0NDdsTFFwR1dNd01tT0xtbGV3OW1XeU5O''@;'; put 'put ''aWFuM1RrNitieXJSSEcxcGczT2hjSHVFNlZkMlpyVVV3TVFNY2dWTUpxUE5ZclNiN0lFRzZ0dXhxbGdaeGxrRi9TaEVmbjdKZll1TDkxM3k4NS9QM3pZK2Z0djgvZVRjN3I4K2ZQZ3p1enVHMzdOcjEwM0RxODh4K1Q4Sjg4VmdQaU9LaXhHVksxSmRTck1Jb3F1OFdCdG1Wb1pSOW5pQmFtV2wv''@;'; put 'put ''RkdRWDNmZzY2VDM0VHNsRC80UnVlcTF2Q1Ixa1hOZGhmSFRNTDRCTllrQmRYeks2ZGlvcW9vQlh4aVFnWTdNZUI0YjJjdkdQU1hkMG9QL25RMzZWWFZNZWw1M3dubDVVRnBzQmEwTGNmV0VhTFJNaWRkcUVFTXVaZ003cUNiS1dDeG9HNkFSQnJ5eW1lY1JOaEx2cHNOTGUvRUhzTFhsanVGRmRv''@;'; put 'put ''RERkOEFCWHQ4bEgyRDZSTk4zOEdIcHYrTTUrUWpiRWxIMUNQMmU4Nml3NTZzWVRJT2lUMUZYbDBGSHB2dWxmcWtLdEJtV21PNFdYa2w0SjFlSjBxSW80bnNwT2VGdXVtM3BKZHdxajRzK3pIeXNWdXJBV0xkNVpITVJESjVKVWFTOXFKMEVzdWNaYUN0UUxHTG1CY05vcGl5VEpRNlF5Y25BTHFC''@;'; put 'put ''S20xOEQzWXMwWlZnR0piTUhUelpFblh0Ynd2MEJFYXd6VTNjeUhzMUZkcmJpZjVSaWZaZDB3aHo3WUtncjJENGJ4RnFEWGt1WWRNUE04OGJKbmxPcnhTTEwwNlNBa3dhZ0NSQmQrMFI4NmF6MEtrNU5TNys3R3RZcm5RU2Qrem5wL1hqazFFc01mdjB3TG9GeHRWUW5aWXVtb3pFNmtFR25SVnBC''@;'; put 'put ''b0l2MkE1NGtCVUtrWHJFTFVHNzFRNncvcGFGZnJLK0wzMkpkTmtGZGx3R01FcTlnZ0JQWUwySWQxb21pOUxyME9sMldEZi9INmhRSnNzOS9Wc2Y5UzRiTGRhS2JKNlJrVkV0aFZBekw4c3BqUGc0akR0RmplWUlNd25pRHEwOVEva3R4K0hmL1AreHFtZW5zdi92QWdidjNqOTg4TVhIenVJeTRD''@;'; put 'put ''c3M1ZU8vUzBtY1BkazY5YjNMeXZWTXkzako1UUhIMklPek5CSHdITEdOWUJaQXFoNm1iWk4yUkQxc3NOOXNzWm51NVhRZzA2S2dUMzFQZ1BYYXZ5cGFGU1Z3OWNHVlB6NVVELzBmRUZmTW5Uc3kvVE02MUhjNkRISk53eDh6ZzRLejBmREVNYkdCVjVzUU05YXRyaVE3TVBPYUI1RENIaDlmTnAy''@;'; put 'put ''TGZ0dDF1RDltRHNVQ1FNbUdRNUU1K2d6U0dGWkZzTU92Y0pJcko3eUpOWTAwNzQxZDJMYW93V3B1NHB1bTZCbDhCU0xqcTJrUnZZa2NnWEFDVzlQMzhjdUpZOEZDcUdGeEY4Q3FIOVlEOEpOUUJwNXFteTZDS0tPeE5JWGVmenlNSVZzcDdZTFZXYnhCc1lJRkJUcHRVWUVZT1hqYi82TWpEejRr''@;'; put 'put ''TWRGTHNaUVkyZk12VjVSTDhZK0Q3TklXYzdFZDhqVVRJVXloSTVaWERUdTFpUXJWS0ZWVFV5VnNrcjRJbzRJdjRLS2dvalNzcVNpQ29RbXVkK3ptY0NrNzk4djNwMEpGYjB4Tk5lNDllZlZuSFNzOHRKMExoNDluWVVOT2VvMWRlbVRzeFlzeWxXbzk0TzcyWnJpcjM5SGgyVC9KUWEzUGMyK1Zy''@;'; put 'put ''YVhPNWQrL01MaVJsUGhnRkdBMHpIVVAyMVJUTVN0bTVvcWphMkF0MnBSZW94ZjByVXZNckVjektMb1dPNXdBL3prSi9PL0tJZFlwREgrUGlyZG1SemVhenFhS1k4cTJOTEF6WG5oa1Vzd3p6eE1FelU2YVJXMmJ3SjZXVnZ1TWRIY2Y3Nkc4enQ0eklhMVgxSVIyZFM4dnNZT0NhQ3NPVXVRNm8v''@;'; put 'put ''RExYb1h3TStBYjV1dlFQQS9DRFRkaEV1UzY4N2lJSFlDdy9tRWthUmtzd1ZobmwrOEFvYUZpSmlYRzJlZUFVbGtvdGxhSkpONlkvbk5lSXZmNmhiend6K0pXdkQvMjg1eHZmN0lIaG5pTDk3RFZGZHE5K1hsNG55RkJ5TStOdHdCc05PaGdhanA2eW4vSlJMT09heFdJUktGeGhsVENrZ1kyT1Qy''@;'; put 'put ''SGQ1STkrTklsNTZiOG5mL1RxSko2WDdzYys2UWQ0SHUrR2Q1ODh0Z1hHUGdOajYxR3RXSzNqZ0FnTERFN3hCRmdFNmdsUXhvUWpDMG0vMlBuVG4wOUkvNjhQVitHL2tqNFBveDJYZmtiSGFvZXhSRlh1VTNpdXU5a0t2b1dDbTgwaXNCVm5aUmNEQ1A5Mi9JQzBGNzhoVGVNTHE2OG5TWGRYY3ZX''@;'; put 'put ''cnN1eWZXdnNnYmlNL2ZKdFdYQklRQzE1VFB6MTM3cWZraDYyclZ1cDdYWHRqN1ZGODF6WStVQTUwVyswQVhwSmRvQmkxd0h4VmhmbGsvOXd5b21vWjlkZlMrZEQ2ZkU1ZyttbDR0Y0IwUCswaHYyeDk4eHdkUG9NL2d4K1VjZXVDN2tpLzZBRHV6cnlXTURQMTRGNnRlRmd1NkZDL05RbnNnZmQr''@;'; put 'put ''TDNOWCswMDM1MEFLL2VyVlYrbWFwYlYza2wxcjUyRzZCamJHTmo1ak9nUVBBQ1JrWnZXQm5UbjVYTHVKaU40a0wwTmZKK3RyZ3A1RDhNM1ZGaERIOHF4WnA3ZTc5OFlzK1VyRmgyWCsxZ3I2d3krSWdLb0I0M2FLNDFXWTB6aEJJQWlneGRmVmFqbWRWa1BOV0syT2FHVnZKZFhpWFl4V1J2Vllw''@;'; put 'put ''MU9WTGplWW1PNkEyKytwaDVGY1ByL1hhZ0E0SVljZEFGWHM2bUsyRWJWd0xhQitxZUV3ZlBwRTNuMGl1K3VTekdMN3hOTEF6b0ZwMS80RjF5WGxzNU05dXljNmlIRE5RZWtidXlLdGUwZGFKeUwxOXI1OXNXU3I1TTYzVFZmM3RDYTc1SmcweVlOOHNZQUYwaTEyVnBRUnJZYnh5Y3JSZ2x2R3hY''@;'; put 'put ''U29EYzQ1cXhVaGE2UFY0M1pCVDJEYm01eHpRWXBUUXJGUFRoVzlIenVSejUvbzdUNWNuOC9YSCs0T3pTUVNNOG4wZEN3Mm5TYkM0STFqWTZjR085UEw1RW5wMzlLZFVrM2JvYzdPZzIzVTdYMHdDMmVVQUhqL0J1Qzl0UTNpMnQ0R2NieWxEZkxiR3dZSGJ4aEtMdnJEN3FGZ2RsODZ2UzhiR25h''@;'; put 'put ''SC9mdFRwcUYzall5Y0dncjVtbXNiY2djN09nN2xQSFhOL2laNjlobUFtMmNkYmdMSDRFYWh4UURIVkd2bHJIbm16MU1VN0dLNFdRSmVnY0lOS3dlOXZrcUJiSmJMSGdxdVhoVjROekdJSlJuMHlKT3JPNWJUbllPbnhzWnVCT0JoOStwVldRcXhUTnZCenM1RDFGNEN1QkVmd00ySjZxaVZDVHlH''@;'; put 'put ''STB3UUUwNURsZ3ZMYzQzcWl2U0hxaXFFcXVxcWF0M1Y4SmNEREFPNlVwOE1zV0l0d2xOSGtrVEhlMkN4K01nQmQ3RGgrdmIrNndaM1hMTmo3QjBkMHFnMk01dWF1TFFNWDZzN01CbjExVFo3bzBPbnhrWnZIQnkrZFNFOTM0TC9kbm5uMUJGR2Z5QVA4QlI1QmFUVkhyR3NBdXUwbFJqcHlJanNE''@;'; put 'put ''S2xCT3AxMkNUU0dLbVp3bzBYUWZtVEhHOHRRcUFabFZ3ZDB0bEw2NVlKWTV2V3kyQlhQdTJWZTU2WDhoem1HbVBOWVozL3MxbHZ6TXpQOXFWU2t3UkdvOWhGdFRrcmhiK2NHMjBjOE1VZXpSNmIxK05vTXFRRVkwbGo4a0xpanJwTG90SW9mRTJnWkdKNk9yRkQ2aG9sQnNhRnVHVmZCbVdsRll3''@;'; put 'put ''MGdPK1Z3T0l4UUgvRDdmWlRHc2FDUUM3TXFNaHU4bVlBRjZSSXNxT20rY3FqelNsOU53MkxMd3JHNkZiSDMwcTZ1UzN0N2p0YmRPcHRJekthVDAvSDRkSkpvcGRiZWxmWkFmV3V0Wisvay9uUzdlTVhBaml2RVhQcVF0Q2N4bHdYN3ZtVXVEZEJuY0IrSHR6OEFIdHRwcE1JaSs3WVpEb095eHJ4''@;'; put 'put ''dHJpSnpERlFKd2VhMVVmdVQwanFBVW5IWENBcTU0OHNXV3ZJVCtlaElPSiszTDdZUm9YVlBUbm9FOS9kTUIzcUQwbU5BMTYrRk13eWUzZkQrY2ZJVmtORVYxQUlzdUZPcjZNRUpvNm8xWFZGdU5qRjNxWGFUdTVRSEViTGI1YkpZNEFXOGhGemlzZ2pWMVlMRnRiejZCb3kvOXRUYUJQb0lHOTlO''@;'; put 'put ''Y2I0QytISTUxc0JwYVl0bTRqaUdKeHJnY2hxTld6UEdYTFJ1VTdYVFlSWFlySHlKazFZNUtxWTg2Ynd6eWdyZUVhMG9NL3NGdHpmZm4xcGZ5cHMvTWZCcExkOVVUektyTDdRTk0zZ0RTd0RxZXhKRzk0b05CZzNRRzZleVc3b2FWVDhSckV6YVl5cm9HQzhGMkZiL1lPTEx5L2s4YnByQ1ZkTFBm''@;'; put 'put ''blgwZlFET1doeVY1UmM5bnZmRHVLcmRXMWxpOTQ0QmxJQlZ5RzI1SU9DeUY2WEVsb1pxMmU3VmFnVkdYTG9sTUFaMU90ZW9oc2I5NUhQM29rYXZZUFZhdlRZRFVGSFIwZXMyL0pLMHkzZ0w3K1MrNlZoK3FFMmN5Zy9TdDd4MUt0MCtaNi9jMzFtRUVoUDU5VStpSFd1S2Q2WkFKQlZ3VXRpRWs4''@;'; put 'put ''S2ZnWlAydDRHVDJsbUdrZ3FmSElSNU45bWJyb3ZhbTQ2M3RqZGZPelU4ZkdwdzhNYmg0UnNITTR2WjdHSW1TOSt6cHBGM0RRMmRvaElHNUV5dS9YQXVkNmk5L1ZDdS9WQzd2SjVwNERsNVdFK0piQmFLWmZPNldLWUFzdUtMeW1ZVk1IK1diSlorVFM0c2w4aG1LZzluUUI0S1c4aERvVWdlcm92''@;'; put 'put ''Q1Vaa3ZiaWNQaFl0eHdyZVFoOXJWU1N5c0M4UmxLYlJCSG1JMERmaTFBR3MxMFN3OE9UcXI0dGU2SmdIQ1E3REpPcmNsazdRWE1PcHZUZ3kwNzAwQ0diN1NrNHRQcDZVZkVlMGwxSTREM2VScEdET3dwYjNwMm14dkJwRGZGeTYyTnpQRjVxWkRrVXpVMmlUczJMNTlWZFN6YnlFOTJEZXdmekkr''@;'; put 'put ''MVJvLzBGeS9jNlNscjJ0bmRqRGNNcHN5TmZsaXZTMytZTlR1N3NzMDkvcnIzWW1XcUsreHFWcnc1Y0xoL29ETUkveXd4aW55VVpEbmNUSGl4RHEyYjhMZFRGa2lXYVRPVTRDQlRxZHFBRXh1V2h1cDRQVExlcWlnNUgwQVI2SnUvRXdXVDlsYXExUDlNelA1OTd6SFYyMnBOOW9yaFpGMlBKUDcw''@;'; put 'put ''SWR5MGdPZVpsTVo0MDB3NzM4UnJVelBITTB1R2RFQ2Q2R3pVZjBJVWVKQ2FwS0dIZG05TmkvemNSYnBSWlRkeWxhNWdQK0xrbkdiU3RSdzNHOEFCUU5SNHpIcEtVYlVlRmplTCtqVnhFYTBhaDZFYXFtcHVvRmdZUmFGVlRZdDNUc2VmMnpIcTFrUW5pUDRVU3BETUxBOXhGbWhmNm1OS3J5MWpl''@;'; put 'put ''cnR2ZTB2TWg5NWYrK0QrUTkrS0E4alR1Q0g2R3YxRFh5L05GK3dwZkVmWVd5V2QxUEdhN0NHc2pscTZjRFlIQ2x5Z0lLdFN2SEVBeGFQTlpoMFpwTzhGWis3OTk3aGIzMWwrTk9mSG43bXVlOS9IK3RYWDN4eFZmb2pIYmR1Yll5NFlGeUJ3dHFvSjdCa2pNRUFWb1l1b0tHYlV6eWJGcHVYb2FH''@;'; put 'put ''TWhkMllZN3NveC94aGYyV3R0N2FwdlA1Zis1LzVVdCt2cXNheWp3alpDcWVyajVpbEx2enM2cE9kV1N6dkJkZ25mZ25tM01hT0ZkN2FqczNnUHVsWmZJZjBGQjZRanJYZ1QzYTBTQ3NkYk56dzJoNjhsendCSEFWZzVHSnlvQkxqb1VhV1ZRUU41aFdDeFdoU2NGQXhwNG5oTGd6c1AwMTFLWnE5''@;'; put 'put ''NlN3bmRxY2NGT0ZwR0p6SHBsbC9JdHNXOTgrT2FEdnlMdXp6Qjd6WWxlL1EzaG5xVDM4d0ZXMkpwVzdQOUFmMWNYMU5vdm1PZU5aa3ppUStIRTdVNk9Nd3kyVnJqNks3dDdHSnFZUzlMSlZTa29Lby8ya1Azcy9XSGhMOWVtYkxDbUJSTm1JOHVKNVd0MFJCTlVtelpRbHZDenRCYkFUbGdINld4''@;'; put 'put ''dXF6ZGFRV0E5YmJHM1h3Q1NjU1l5c09CSHhzeFNPei9uaGJOZ0U3ZVNjc052emhlTlpzeXNidmFLYUwxUWY3TTdlbllpM1IxQWZUL1NIOTJocnF3YzM0TlA2Q3dHUHptaVQ5RWhrdUlQeTQ5RXNXSmFheVp0ZmFIUG9pRVZSOWpLMk9DanpYcUpwRFlpVWwraGpUaWVSa0x0QU9raDlWNHFtK1lY''@;'; put 'put ''T0NDR3I4ZEhVSC9wVXFYeDhGKzIwYzFRQmxBWmRzcUs5eFZ6bHRWck8yVEZhQzFCUmRXWGxtUEVpb2x0R0Zoc3U5NlJoUmMzTHBXZEtrWEhyR1ByQ1hnRHZqbDJaall2NUlMbmNrTDhhbUc4TlYrVVp2ZDFWWXVtbStyMisrSWNSMTl4ckhydXJ0dldyVUtIWnhRVTl6ZFQwbnpXc2FxcHV2UGlu''@;'; put 'put ''Z3U0V1RjdTVVRmhZYVlYR3VQbEdFbzZWSkdvaW51WjQ4SHRaaUFreVRKOHpseTVSOG1xM0I4MFZ1OTFwVUs5ajhQdERmcUtya3QzdlNXWll0dDlIOHJNVTB4NGRFSkdOSExnY3lkTWRKVjd4eUlRZWMrc1VYdTdycTYxN00zZDUvb2xOTVJXTnQwYW5rN2JrWE4vaWVITlFUYk1QSWdNSDJRRHpM''@;'; put 'put ''TmppcXd3VFVGQTNobHN0WVdyYWNYK1N3V3kxcUNuYWxrU1poczNSNHU1ckVCeTlHOFBpMmgxNTU1WlUrZUQzMFIrcXR3djI1UGJucnJvTTNmQ2wxV2JIejZ5ZDc4Qng1Z09WQnRESXZTWkFtQ2dJeU04ZmxrcGFqd01LVFcyUTZVQWRLc1NMZFd2VDd2cW9xb2RKVkpaeFRQc2tlK3VtcXBML0xu''@;'; put 'put ''NEMvWVpUR1g4Wi9WOW1JdzFwVXllRXdlbEx4Mjh6aWE4alp0K1B6b2ZrSzNUZ2p2VURPdHJ4ZG40K1Q5ejdSZHpaTFhxNDRJL082NE5wTGdNUG40TFJCZjBkVWZDSnltb3JPOTFBeHh0eDJ6RzBiWUZJQkt6cE1CMVZwcVAvVzJMK1NhenZjOWR2MGpXa2NidG1keSsxdVdhMG5YMXpkSmVkaS9n''@;'; put 'put ''UjlDbmNBME9wRWR4R1hJSlI5VEJZbE1HYUtvTGRZWGMxTWtKKzRyUFRENmxMOFdXc2llbzFtUWFKcjJkNHFuVGJBWmFzQnhKZWU4bWV3ckUxZ1dUZUFPZzN5V0hNRnpiWUFycjJ5emxnUDBHRjJ1a1VQYXdLWWRYcTdOZ3NpelNWMUlaZlY1L05Sd1UxQng2TFJ6TFpWdEJ2cXV3TGhsVW0rRkd3''@;'; put 'put ''TFZjVXFMYlUrUjUzZGFpdXY5Q1NxTlBxb3Y4WVhxekFIS1JKWWpjSkVEck9haGhTYys3UHMzQ004UGZjSWVsckp4eGpCLzh6NGxRKzFpOW5HS3FkSlErVHdBa0YwclF3aFpRWUcwdWNBVWtTZXordDIyYTBGdkVURkxFeEpqcUp1SVoycWZRS3p3U0dGcjNtMnlDRlo1M1BTbVMyeVNOZ2VtTitj''@;'; put 'put ''dTc2eUVkWks4M1Q2MEVmUkY1RCtBc0huNVRTZExkb2N4ODV0MnB4VTIyQWVmWEdiTml1Rk5tWjB4elp0NWdwekhVV2ZrOXVRelcyK1VSakhpTDY5c1kyY0g4RTl4R2pCZ2diRmZvSHlJaWIxOVFnREY5TERPZWcxeXdaZ2tMcEYwQ3NWZjdaVzFweVlHV1dwdEVEdkNvVkJHWUZqWWpWaW5xWkpG''@;'; put 'put ''S0FoZ0NWaFV5UG4wbXY3Ui9EdFJDZDVmcWFFMEdsQ1JaZjBEdndSNlhLa3hMMUZscWVRUWErTDdrdzZHTkR3T2pkZ2FqVU5tYmtxQUkvTE1lRzBDdnBIYUN5S3cxZkFHOUs4US9VeU9VWVI4SFRGcEFMcGR3RFc3U1kweWNaR00zTm9INFExcDk5dUoxcHZFOXZRaVR0MXNWNWllSE1IbWcxRmpt''@;'; put 'put ''elJENDNSdEJ4andOOE0xR2NGQTZvR3BHVUZWdm5EWmdxVVplaFdybEN5ZUcxUHVVWmZ1NWs4cStZL1ByOVZqa1k4eTNueFJxcHQweC81eko2U3BBMktUeXlIZ3VGM1NLR0I5ek44d2tWNHVibk5jZlR3Tm0xT3FtMkFCbTdjcHMxY1laeWo2Q3E1elRwK3IxRXQ3Y05zcm9pOG5yVTd0aG9IVnhh''@;'; put 'put ''MU9ZNXNtOXVzL1FMR2VZMnRKeUt2WisxdlM5cjhPN1Q1STF1UFBNN1J0WHMycmdkb3FSbmVYbUN4MGxxYXpidFIwMWpVWXhvb05SU3BHaFVWOEZGYlVjTktyZXpRelF3eXAyemQwR2ZHVTFKUWpYeWdxeVFQNWl0K1RrNTRHUmxSVTE2K2cvK3hrUGFDdS9PNGRmVjJPZm5sRDNsV2lnUndZREY5''@;'; put 'put ''eGxOYUZKN3lpUkpZc1RnMWcxV3JjcjZQbGZDZHpXMk80OXcyYlU2cWJlQjhYOW1telVxaGpSazl0RTJidWNKY1I5RnptL2dYUnJ2UVgrS3ZFUjBJQTkzRGVwb2JDVXBsRUVna21IVm1uVGh6ZStSMitlZURZVHloL25iNzdXR2s1dlAranVYSSsxQ2MxZ2RGd3JVMUxvZkpvR2MrR3BhMm83ZzlI''@;'; put 'put ''SEw0UkZjVVB2SDcvWEYvTEdnTldsa0d0cHJWR2dBYkwxdVVMNWZra2NPSkZUSkZja2dhVSsvSE02a0RkKzl2dnpTV0hwNkxaNEEyMjA5RTA4T3pxLzhXOHVOVC92a1kwQ2crY2ZORXlDZmRBbitSbW5mdldQcnN3WUMzNjFETG1SMUFuZlEzNlRzcklmeHdUVDBRcWZUOXFmZE5abzgyU2VNMTlR''@;'; put 'put ''eDJMS2JNenFsTk9jc25TczU3YzV2ajZQOXUwK2FrMmdiTzhndmJ0SmtyakhNVTNiMlpWbVc5bDgzVnFjejE5TVp4TnVVYXhCajNoSFBRTHV1d0V1VW9GSzJCNUtsdzJDcWNsVTRoNEtuazVRaG9zaWhEdzEvSTBPajU1NUlNalZNc1JhUHRwbWRtQmdkbnBCZGttVFBEY25HZUJScHVFV05HVU1L''@;'; put 'put ''WkdnSUNoMXRSRXk2Wld4c3Y2dVIwUWF2UDQvZEV2Q3drVVpLN0hjYnA5WUlGbFhGVC8rcE1lbDh1dHkvVkdtbnJTZTNKN2hrSTd3ak45ZTNvNkJpZmJHK2ZGSWs1T1oxSVRDZFRNMVh1L2RuMGZFdUhyenZZTWRveGttNGJIYyt0U2dCSE9WNzVNc0N4SDJRdlFYMlh5L1M5OFRrSDhQMUUwZlBu''@;'; put 'put ''MWZhWVAxRGMvdW5DYzNOdjhmTUhDdU1mblM5Nnpya0w3WTFVT3dNYWd1ZmNYYUREUlVITDYwSEh4T1VhZ0ozSERVcUNIZXRKRHV2S0RLQjQ4am90RGFPVzZValpDdElqSGEvWExac05STTBHZG8yV0cwMGNGWWJVdHdPMGxVN0hZZ2lsZTlKaVozc3NGVXUySkdDQ2lOWG45Zmw5L2dvQXVSckVr''@;'; put 'put ''dE5UUzZLcnNnTjdVMmdMMFZ4ek5lWktYcFhqWEgzWGV1dXVHZHA3YVhIb2RmQ0F3M3Q1VDBuc1M3cGxJa3BEc3BQOWNoUnNvS05qWUdGc1BTYmJsYzNraTJOaTBreDROQnFvN21sTmRjbzRsbGdUV2V3emd5Nkk3a1RjMDZEUmF1eFlwMDJCV3E4cnFQV3FYdVBuNFN1Q2RWZWc0aFQ3UWxDS25x''@;'; put 'put ''TWJxYnBKZ0RYVzZrQnBmc3ZXb3JlMEliVUUwSkZDZXcydEFnWEpCTXZNeUFxSm5xOE9hLzVFUllRVzBXV1MrSENKSXRKemFkZFdrZHJHdVVSNWlRR1IwNDllczZNa2VOc1kwalJpaXBOeVRKVGkvSkJNQ3pmSXVMcnhPYVdGZTR1ZVA2KzJ4L3lseGUwZktJeHo5QkI3dmtaWncyMXNuSmZrOFQ4''@;'; put 'put ''Z3R4OEZnQm1MbmgrdmtOdi9HM3o4aG8zL2tqeitmZkx6SDhQSDc5ajRjdnVqbjFtdnEyZ2xmdy9hUWhUdEVhMlZ6S3RhQytvQWFBTTJxNlVNRDhsNTV3N1ZCUzFzeUE1eml6YWFwc0Zoc2xMOEdDeTV1cnE2YUYwazRBdjRhZDZzS3BrS2lWQUJLaURwU2RKczdzMWVlZnhQaStLVnc4Tlg5WFNk''@;'; put 'put ''NkQvV0Z6NTh5bm13UHRzVkRCOXlqbFRNeG1PemJablplR0l1UXl4Zk9MRHo5RUR2dGFQREozdG1adWF6cVhDMXI3ckdHMGw1Vmw5STdtdHYyNU5LN3NtMTcwMEJ2T1JZRU9VMVV6S3ZHVm1IK3lDRDR5NTJUbjNvdlZzK1A0N09GejEvWG5rTzhMMnVlSnluQzgvTmU0cWZQNkErUjBjdmwzbFdI''@;'; put 'put ''enBOeWtrZDg1TzUwU0c1d0xxR1ZpdFExd3ZTOEZpcjBSN1dxVUZHRnkya2JVUklwNWFFcU8yMFdzMDhrSTEyaVhXWVhCQWR6Q0J5VjFhRGNGS2RiSHBxb1JZSFBjRXVLaTVxd0E3Rk12MHBMYi80amxyTzhEWFZKSjNOWDFpdll1QUs4UzBuV0c3TnJBWUpMUHRRc05ybE5PcTBHajNHV2s0SmhL''@;'; put 'put ''d25NR3pXWER3ZVQ3T255VzhKV2pab0xzV0tDOU5ibkZpT3dta1VyUVc0WmtOdytNYkI2ZjZHNFc1dmFQalU0SzdCaG1GUk90bUNUYWw4ZGpHTDhXTFc1WlJlUytieHgvZW5odDQxMHVJZkRoeElEWjBhYVEyTVNtL21jWHVnL1ZEdXUrMkhjNEdCR3VrNVA1eVJIRmVnWjcxYnBqR0ZKamMrcHpq''@;'; put 'put ''d3NhTG56NnZ0TWIrdnVQMERoWEdPVHN2UFpWODZIV2VmTXM3SGkrSnlGOHVaK2JQaWNzS2ZINWZqVnJaSW1pbmF4d1BLUG1CL002akl4azhVL0FESEZMMitXSStXWmZyWmdrdy9ObExjZDIvQlAyQlE5TGJTdmhjS2N0OHdMZk91aHJWcHpncTZtaE5WVS9pNXNJN1RZNEtkSUZHNEVaQXhpQm8v''@;'; put 'put ''UjVrT3pTNlhHRlcxS0N0TlM2bXFycXIyQ1lMZzhGRFpvbFc4TjltZ1hIUWhTK2pXckpGd1ZtOUx2TU11OUJjcU1Hb2FQYlVOMWgvY2YvOGR0Ym1FczhuMEtWYU4wZWl1YmJEakhhd21nK1owVFpNYzBFZ3ppTEJGY1EvVlNOeVlLaVE4aVVVTm5KN1hZNjIrbVNaQlU2V0UxeE8rVUlucW91dXNB''@;'; put 'put ''Q3ROcjFkam5Fb3dEZFlkRG9jejRYVEFad1UxSk9RcEF5TzlzUEwwTm1xSVhWQTNFeWhLK0NJNXVpMjNveVRwNi9BSmVYOC9WNU8vNkM3ZFVXUGZ4dXd2bWhER3R2eVJRaGFZYWk5OWdPbllBVVhIL2tPSnJpN25YMUY2R0ZEbzRaTkZmVStxZmJFZVBiTk4zK2VWdmdUckQ2N2Jsbyt3dmtHbDc4''@;'; put 'put ''MGxlRVJ6cmI1R25vUTJnNnhOQldqeEZtU0FObzl6RnRvSTJpajJNMkRvdTVHYW4zVUlhTFFhdmhrUSt5d2FZdERUYWtzdFRaeldvbVU0bXNwQ0JaWEM1NmpqblBFOUp4bHp1OTNON3FZZ2pZQUd2SXJyM0Z1U3A2VVd3cVBONGVsRFBSdmkwK2ZQNTN2V1VIR1FlblQxUzBWSlczOGI2KzFkZldS''@;'; put 'put ''RG1Mcmd4MGdVL0JqSFlObGJ3QlgwajdNRi9lUFlMTnJLQjRMTDBQZTI2YXZxTGh5MFVlcGRnQVpvdlVzTjllcFZnb3dRTUszWFZUTkpLWUx6aTRqbkZZY2VaWGNWbzB5WUFRRllXWDF4RGFvUmJGNmEwUzFRWEZmcllMd3FSanRsNU04V0ZjWk15dWhiUTlHN1JucTJVQ1hEa0RVTXVCeXFZY1V0''@;'; put 'put ''Tkk1MG1PV3owUnRmem9oV3Z3LzRiemtHeFJRMEdoNEVyd2EwWUErdHVVTTZFTFE2elRLTjBhZ0hyVno5d0JJUUdKbGFxWWoycTAwWkFQRGhyWHJRYkxKS2RtVk16T1cxQnZ4ZUx3M3hhRFp1U0ZlU0hDZHJ0THlhSTNkOVlaTUdXOW1tVExrV3NDdHNZdUJ2RktPaHNsYlp1Y05HaXRQbXdJSndl''@;'; put 'put ''TXZ3OTFqeTNCWStNZjBXUHJITitxdGVrWldzVG9qeDhXYUZqejliMGxmT2ZhTjhmRVRtNHl0S1grblh0TVpJN2d2NFUwR01URWRpN1RucWxJcWhQRG9zSG9qV0V6MWY1YVNHT0syRFIwTkc2aHptOUpvVmc2b29sUVAxNlhRQ2RXc3lOSkxqamt0eTNERWVwKzZ1ZUQ3ZWxVMVh4Q3BpNFNhdnA2''@;'; put 'put ''YmFicVZ1cnlxVHFpVFJxMVJrdmNqNUorYlZZYmVyeGxzWE1BaE9wK1dYYnl2RmJxK251cm90NmdpSDZPVW5jMjgzM3c3MCtmOE4rRlhHYUZyMkJSNWIrM2lKdi9CbGFLTmxOQzNyL01mdVVISUcxcWJSRDRFdXJUVE9UaVdtVlk2enEyWG9GR1NxdlBHQmZHVHAxcXFVQWQxQ0piNGZVdXlydG9z''@;'; put 'put ''eXdWRXhVUjB4a2JzVlVjaGs5Tm9iTU5jVExOYm5vVGVxMkcxRXczbXdYTFpmT0RKVldhd29FQWtMRWpmVWdSWGlxREJ2bVVKblZSZmtwT1UvNnBJV3FOVldWVlU1U1pmbWRWdnk5ZkxpMUZpZ1VMWHFnSFhXdCtoNS9NZlZONVNGQWc3U1NzMi9XdmV0QWcvak4vbUdXTTRkMkdMYVFtNmNVSkli''@;'; put 'put ''TjVyUDB6d1NHRzhmNFBRVklFY2FBWGNaVHVOdnlYWWJQT2NZcms4b3oyOWp6MWtkRnBPYmNVVnVscFhRRDRBRWwzTzNRcHRKcFkwRlBTcTNlVlJ0STlkelBhbU9BK05meFdRY0xwSnhkSnd3YXpPcHRMbHVZeHM1ajVaMEFZNllhUWFieVZobUFNMmUweE8xc20xVGtaZ1ptZTJGSWpFK1RaRWth''@;'; put 'put ''K2NGMGlYMTd0a2pmdVFqWFYyNExpYkc4SlQweXFnNEtrbW9rS3VMV1E1amcxaHJMT04xVktqcWxlcTVTcVVZeE00dWU4RThhTFhLd0JoUDVjZkg4MVA0UUxQMEFuYUd4QkErSWozWlhPeGp2bDcxTVFPTWZsVUNSOWtXZkZteEJhbitjWmZjRjg3bUw5bVp0U2huODN1NXZmUnJta2VvdG9mbjl4''@;'; put 'put ''WE5kYkxnejliRGFXdzkxL01GdTFOL0RCWDVsUk1Gdi9JeDlPVVNmVVcyczg0V2JNZGpoOUJXL205Y2p2NnhKTzYyMFg0bHVQeTByRE9uZ0xFK0MrZHFBWXUvWGN3V3FsRDFwRkNHYXFEbGRtcWVEVE0yYXEwMURodExySk1Gc1dzOXZLYXlReHBoVzFkYi9MSW9YdjJIL2ZjY09IRFBmaEtYUER2''@;'; put 'put ''bGdJOGlqSGQvZXYvUzNmdTdWbDhnMllsYkp5ZmVQYVRZbGR3YkxKODBpZHJSbERqaHhIb2RkZDB4clFFNHZWYXZXVFlaaUU0blYxVzZSbzE4R1VkMWVzVmxsMHI1d0lwSXRhZHkyWXd2Nld1Tk5OT1VVNnN2NFBPYllkRWJIWGJyZkx4SXlEWnM0dWhJbHJaY2greXBHN3FoMGZ1dWtVR1doem44''@;'; put 'put ''THEvbnVxR0N6SldPRldWazRqTWJjdFhIZTNzbTVCek44VzV4VEJhK3hXbWFhdjY2SW9NUHNyTk5LL2o3VEFsZXlIbUg5R3huWmQvUG1LS3JBZjRlWlBpYlZ2RDBDYms5NE84Q3c5OVo1Ym14YUs2VDZseUF2Ky9kY3E3OURIOW5aZnkxeVhPeHVqaTJ6b3l5enJ0S2NGL09aYVRybkpQWHFjUldZ''@;'; put 'put ''MnNpcTZrVDBSdWlNOW5hVUsvUjZkMDA2bDVkQ2FLZHBsaHJGUDlqZEdOY0ZmVEZKUkRzRHRrZzB1S3RBNnV4VFlIVmkvZWkzc3Y0NWtEcHhickpRZDh0UXF0YmRKUmpxeVpmeEVkVEc2d1dBNWdCUHRrOXVVMTBGVis4ZXBCRTBrZDJWR3dWYUIyOFByRjlUZUhOODZtU2VHdE8yeFovaXlwRGxw''@;'; put 'put ''Y3FzcnpVUEp4WlRXdExmWjFHeTIrTWhXdEczS0R4RG04WkVPZDUzUktpeWVCbzNaZHgwWUQ0UlR0dEdSQy9TSzl0QStLbC9aU0F1QzhjZW5zQmNYeXhCRno4OUtHUkxRUGppYVhBdGxtNW83dTBqU1duRmF6ZlBrMjNtRDVQcXZRSnRIMXNHL3A4WHFWUHJNOHF0YVJBbjdTVzFJTWVGdTFWY0xU''@;'; put 'put ''SWFRYUpZS0tYWjQxNHNFWTk1Q2FFYUlycEZTeEVSVTVSUjVXYW9NRjBPVUx3QVpEa2Jxd2VWalB0b0VIYzZiZlJRd3h1YWt3TEFnaytzcWtQaXhUUTRuNUdXUFNNMkkxVFc1NFF0YnRwK1N1ZXRXNXhDalZsdENZMnRnbldmVVUxc242Z0FacjNIRWZQaWE0bXJPZWE3Y1NnajlvSU1aUkVUaUpJ''@;'; put 'put ''cTlIZVhJWnBiWS9oQ2hCZUFGNWEyY054bWtXZFhOOVRFa0NKcnZmUkc4anBpM1VDY0c3WlhnbW1GSFhqS0pBczBDMk80aXdiMnduQW9xNkliU0lxdURSRDI4a3dId2RLY0RlU1hjL2FibWp3VjJ3UlFCbE1GbWR5eDZwMGZqa25pOVVzTXh6TktqajZ6aEljcGJubVAyQzY2cnlzcTVLbUVuMVdq''@;'; put 'put ''djBtQ3JIZlkraGpwYm96ODgyZUxmaG1qdzJnb3JqeE53cXhaU1A2VmtuY21QVmxjVWZaMzJ1OEFXMFZ1d1k5N1BOYjlRV0x2K0JieHVWTFNLbTNubWIxMW43VUliWTVnQ1dWdzhtQzZNUGNpSEo3aFhwSEtuUDdyaHRGME1QdnEvTDZmZkpkRnJMWGZKTTNaRk45TmprN2VHYktyS3NxZUF5cURs''@;'; put 'put ''eXRWR3FUYzZ3dUcxc2FGQmVCdjlyeHlSUEZkZHNzNzM2YTdBQzdoNjNWQUxhaUhtczVQNmEzRWluSi90UmZXVWkvTDNaWCttaE5UY2hESTlRYi9aUWJjL0hYYlVxeVEzWkxGcWZtNTljTlRIZlVPTEE1U2I5Z3hqRjhvZlhnREtmYTVWd0JQRldDQzNJK1B1VjdlNWcreEtQdkZlVUhuRlR6QStE''@;'; put 'put ''NXJTVjlaUi80ODZvUEhQT0xxS2p2WENHMzRDZzZWWUlMckU2YjRVdVhvak05VkRLK25BTlA4V1ZSMXBrVVhKUDd6cWw5d1Q3OTdqWjlIMUQ2VWovY25VVjlUeGI2NnRFTjIvUjlYcDBYNjNzWm5yTDZ0MXZoN0N1b3I0Qm01ZEs2QmVZckVOYXZOM0V6eEt4QTVWWjJ2WWx1VTNXYnZxaXE3YUhO''@;'; put 'put ''cFd4eS9pd2VJYysvelpwdEo2M1ovbHpYc2ZUVXpqUjUvcmJGeGEzSEtOUnBFSFF6ME03VlNwV0dNa1kyeVh1NzB6dW4wc2U2eVBPTGk3Y3BZNHpqdytRQ3ZXMlJqZEZJOHdZMDFORlZta0pyUmlZL1YwaElWdmJMekl2N3grcENqbXh0YmRZUnFoMXJJdU4xZFNHNzAya1AxZGJMYyt4QmR6Qi9T''@;'; put 'put ''SUROOFpiNXVadXpuZWNWNzhhNk4wT3VnWVIxbXprM3k2ZHVZNlBTWWo2YVVieWl4UnpHM0h5aDhJeDdXMW5WeGZjazM5alpHUTdEcTlybnEzYjUvUzR5THY4ZDdtenl1K1NIY3A3d05GcEZOaVNnZHJhQ3VNclBhS1VrQXlHdGNnRDVQcys0R1VlL21aUXJSM3dPalpKWnJkenRXK1RjdmFIRDYy''@;'; put 'put ''NHBPSFFmWko0Ym0rTEpsZStkSlYzNERIa2FkdDdMNXMzYUFJWjY1cyt5WWp3RVFwRFZlQkNNVnRqTkJmTnFjVGZoSnBtUzV3QlJxRlVRQTFITlRiMTRsT3JZZEJIMGFndHp2VXR3bUVPbVpqNFJ0TFBmZzJiNk8rbXpXQ3ZLaC9oc3Avb3BuMGMzZnB6bGcvT29tcTJxUWd2WU9FU3QxS3V0bGtJ''@;'; put 'put ''ZXVaUDMrcFhFY0p6dFBac2hMMWZjOUdHV0lJN1g1cVJmcnoyOGRqOHFSejQyZ3F0OGkyb1ZYMkVzZnVObHVGK1FmWkEyVjQzM0RkbTN5UHlNQmY1NHZjb2ZVUi9PYk1NZlgxYjVJK3BEVHhYeDF2Vyt4L0dYTDlyM09CYUwrczRWK2g3RlF5WDhVZTc3UUtIdlVlcTNaUGNUTHRBNFFuRU00czAx''@;'; put 'put ''V1FkNGMwM1JBUkpydTZrdlgvWkxzemJmZkZPU1l6dHZTa29iMmIrOVVoakhETHh1YS8vMjB3WC90bmtjYlprNzFyZUZqckV4emt0UTN3bmxmbFgwbjhTQW94ZS9mL2dmcERpT2RxaDl1UGEzMFljamIwcHFuMkg4YlhTQjNBazQwL293b012UXBzdTRYWnN1NDVhcmhoWWVrYkhJcWpxOVpTRjln''@;'; put 'put ''VjZuWEcybjF5bVRXK2w5eWhhM2ZKOHloU1ArRm5xTWZBcWdVSUdvTEdBMVFHU2tVQU1FNjhBbjJUcHFVZnNqdGVWRVhZcVpGZGF6KytMWllxd2J5ajQ0eHY0V0h2VlYrU3pzUnBHTkszSnV1OEIvM1dhdHJ0SjE0K3ZJcHlxRDhyclorcjhLNjdjVTFrOVJTdDBJdlhQcmNkeU5QLzJuMVZIOHI3''@;'; put 'put ''NitlTHkzTi82NC9CSHZrL0ZuR1BBcWhIWUNiZ2lBRzE1NC95ckRjUUhmREExNGVrKy9abmZSUGYzZGFCUm0rdy81cnY2V0Nxd3RsNi9SMTJPZENaY1pkV1hGVis5YnpSYk9hT1NXQkVNbHJ5bStzVDk5a1k3czluMjVOMDk3YzhxOS9ia3QrMjF4YzM5Slh6QTBNbU5qb3FqZTREODJQemEzYTZj''@;'; put 'put ''NEtvNE05Q2U2RS9tMnpKYTMrZHYrak52OEd6Yjk3U3RxMjVENWsyLzZ4OE9Ed2NJZjBoUHF2ZjkzNS83VS93SEFsdjh6Z1BYL0tRQzlWeWlOMXZEZjBkc21IdFppbkFoM1l5ZkFMbkJ2NWhPZnlMeitkZE5qVDVpVk81M1NvR1FyN1RqV0xwaDE4dEZQZkNMOTJjLzJQdkdZNmV2ZllMTGlaOHFk''@;'; put 'put ''aW5FMEtZN1Z1SWxHQitMUGlPbk51Qm9xQ2pYY3NnR1RNb3lOTkErOGtQbHZ3a2FqNnVsZ3RtRXNFbTV1RWl4K3NQa0VxOTlNZlZTRmV6cUNZQkJTMHdJKzhxU1FiS2VqbVVRQVpDZDgwUGpYaS9LVmkyTzNMVHYyVFhLNlhZZGNSMjRaVmhMK1p6N2t4Y1BTWjNrTlhwTE8xMzkwVDRKZHc5aDdj''@;'; put 'put ''aWpuZEhycWMzMlhkckpzL3dNVHVWcHZ0UzAzZTBLVzd6aE95dkZsd0FkMUQ0TkNsMkJjVDc0cDlqSjZSeXhUZEVEVjRZQXJld1FQNFZaWDZZdnhvU1RBcFU2cEpkZC95V1UxYTBsaWkwdFNTb3ZDNjk2cUtQeU41VzFyd29ITzVUbEJCdUNFRWx0NGdORy8vUHlDOG53OTlpay9mNzd3bkwrNitQ''@;'; put 'put ''a0Q2bk4wOU5MaTUrdmo5NEZhdGY3OGJLSDlzZjFJZ2NFMHVReGdRR01GK2k4MWVhMFlZRkJpaXFtUVdMZkRBcHRoY3Bsc2x4VURSckhML3JNSVBvcU5ObGNFSXNVOCs0c05XUW5yYTZaMnRid1hzTDMvb21ndlR4ZGdZcDZUNVNoTisva0l1NXRDeFlXazRKMVdycU9nMzYvTndQZmEwdSsxcTVQ''@;'; put 'put ''b2Z3QVBmbng1QUFBQkFBQUFBUUFBdENjQXdsOFBQUFVBSHdQb0FBQUFBTlBCbllZQUFBQUExTDZtOWY5Vy91OEVXQVBGQUFBQUNBQUNBQUFBQUFBQWVOcGpZR1JnWUQ3Njd6WURBMHZILzdEL2sxa2lHSUFpeUlEUkdnQ2xoZ2F2QUFBQWVOcU5sRTFvRTFFVWhjKzdrNVVMd1Q4VUJTbHFFbHVi''@;'; put 'put ''cEsyaERhWTBsQlJiYlVyU2puWVJha1doQ3hkYVlyVzZGdEc2RXhFWFhma0RVdmN1QmJIdVJNZ211TktLK0VNVVdseGtJUzA0bnZ1YXFYWFNnb0hETnpPNWI5Njc1NTE1cG9ZejRNOE1VUWNvQTlmY1I3ODhSRlRPSSs3c1FFSWVvQmtmMFcvRzBFUEZ6UXpTTW95c0FmSm1DaWtzNG9TNTYvMlVK''@;'; put 'put ''MGliSXZiS1NiUkxEdzdMQkZWQVNzNmhXMDV6VEFGSnZiYjFITXU2TG4wUG1UTTE3SE5LYUpVdmFKSkhHSmM1MXRiSUNkWVZxU3J2WHlHUEJWN3Y0aHczTVNhSDBPY01zSVoxVHBULzMwRGU4aFpydUhhWlJremVZMVRmR1dwR1dKNGhJdmV3WGE3am1MbUFZYTU1aFd3M245RXBCZSszU1NNalhl''@;'; put 'put ''aVFLM0JsTjlySVRuSFJ4cDdETWtrZnNoaENCUm04OVY3SU5nemlIWExPRkhMNlhLN1plbGZIbUt2MGNCRXhNOGx4V2Y2ZllHOUpISlE5N0cwQSswVlljd2RIekZaY0pPUG1KWHJwKzRpZHMwaFB1RVl6aXo2enhKcm55TmgxalNPS0QvUTh5ZnNsSk9uWHFsY2J5UGxPcW4vcTNUcGh3U3VyZitR''@;'; put 'put ''UDZwdXpCUzIrZDBISlRveFlxbi9ycGY3UlorbkFLZXZWQm5MS3BQYmkvaXRVdkRmMGI1RDhTbjJTUzh5RjcxMVFtZ3RsMXZyN1YrcWYrcXpVZm5YT0lMVjNuZCtuNW9qN1l2dTl6VDFWUDNSTm0xR3pwdnRkSjcycWNMM3FYUk81UWg3WFBtd0dtUVBOb1daaGpXY1JOaEh1dmM2ci9RVm9mV1Z2''@;'; put 'put ''YTF4R010VENlWmxielU0RG1XWE5Vd09uNnhuenFmdWpIbTFDL1Fac0RuVVAxYi82dDZCNURGSXp6bXhtckI0ejgyVXlSM1ZUcjVuRFgzd0diOVIvWjVBTm50Ym5aRzdoVkZmUEd5eFRUd0hwUmNxNWpCVFBCSHN1bUhseW5weWx2eVZlODF3S3pTQmhXaEdoWWpMblZXMCtISTR0NGVoL2labUIr''@;'; put 'put ''d2ViUC9VTWVOcE53bDFJR2dFQUFHRHp2MU5QTy9XNjgrNjZYKzl1ZXVlZGR4RVJFVEpFUWlRa1lrajBFTkZEUkVRUFEwSmt4QWpwSVh5SWlCZ2pJbVNFaEl3WUlTTjZrQmdSd3dlSkhpUWlJaVFpZWhnU01tVHNaUS9qK3d3R3cvSS9lNFp5RDlLemJvd2JUNHdQSm9NSk4xVk5kMmFybVRLL05V''@;'; put 'put ''K2JEOHcxaTlFeVo5bXhQRnFUMWlYcm95MXAyN0VkMnM1czk3YU9QZFdiNk0zMi9nUWdJQW5rZ0JMUWRsQ09JY2VDWTl2eHpYSG50RG9ubkJ2T2xvdHpyYnAyWFhWWEcyVEFOSmdGRDhCenNBbDIzUVB1VWZjN2Q5VURlcVk4WlUrM0w5Vlg3V3RESExRQ2ZZYU92VWJ2bUxmZ3ZmRnB2aGxmeGZm''@;'; put 'put ''azUvMEovM3YvdnI4SlcrRUplQjQrZ2svaGwvNVlmN0cvampnUkJCbEMwc2dIcElUYVVSKzZpT2JSSXJxUEhxUG42SFdBQ2p3SC9tQWVqTUVHc1FTV3dSYXhQSGFKM1dBdnVBR0hjQTRmd3Fmd0duNkZ0L0FPQVJBNE1VMVVpTy9FRDZKQjNCSlB4T3ZBSmpsSXhzZ1VtU0hueVJVeVQyNlEyNVNk''@;'; put 'put ''OGxFVUpWSERWSnhLVXhVYXBoazZRby9RQ1hxU0x0TW45QVY5UmJmb1gweU1PV1hxVEpONVpqb3N3T0lzeHhiWVhiYkVuckExRHVJK2NVZGNsYnZrcnJuNzRFcndZN0FZUE9jUlBzVEgrQlNmNFJmNVBGL2s5L2tHM3hWQUlTRHdnaWJFaGJRd0p5d0xhOEttMEJSbnhHVXhKeGJFTGJFa2ZoVnJZ''@;'; put 'put ''djNOWVdndHRCWGFDNGZDamZCRCtGV3lTejZKbHpRcExxV2xMMUpYQnVXQUxNbkRjbEtla1Jma25GeVFkK1dTZkMxM0lvRklLcEtOVkNOdFpVeVpWVGFWUGFXc25Db1hTbE5wS1IwVlVIRlZWRWZVeEg5bTFaeGFVYytpUUpTSmprY3owWXcyb2MxcFdlMUJhK3RHZlZRZjE2ZjBXWDFKWDlYWDlZ''@;'; put 'put ''Witxei9wdndlQnYwdEF2U29BQUFBQkFBQUJQQUJZQUFvQVB3QUVBQUlBS0FBNUFJc0FBQUNEQVJZQUF3QUJlTnFGa3MxT3drQVVoYzhVSklER0tERXVHaGQ5QWZsVEllcFN3MFpRSXdvN0VoQUVJbEF0eFlUWDhDbjBUZng1QWQyNGR1M2FoWWZodHFEQmtFazczOHk1OTl5NTB3S0k0UU1CcUdB''@;'; put 'put ''RXdDR2ZNU3RZWEkzWndETHF3Z0ZrNEFnSGtjU0Q4QUpNdkFtSG1Qc2xIRVpheFlRak1KWG51WWh0VlJGZVFrbmRDNjlnVFgwS3J5S3F2b1dmc0c2RWhKK1JORGFFWHhBMjhzS3ZpQnJuWTM0UHdEUXFPSUNOR3d4NTRqYWFhTUhseVI3NXBIbnlGRHV4VUtOcU1hNmxZL3JrSXVjdXMvck03U0dP''@;'; put 'put ''QWhyTWM3U1RqWTVFNVgzSE0rcE5ES2hVR1pWaVJsS1BmVnpnQ0dVY2syWjViRTU1ekt0aC9hbFM0c3BoVEZ1ZjBacXFPcTlTaVhUSjJXYk1xUE1UNWpjNGovTHExS3JrVStwRFhkL2wzdjkzTS9KenVkcERndVB1bDdPdGZidSthNXlhemJXWDA1ZXNKbFdYdXdOK0NTOG13ZG1yMmRWZFRtb21a''@;'; put 'put ''blk0YTIvU2M1bHFEVmM2My9WdnF5QjNsOU9xeFpIUldwWW5TMkdYN3kzcytQOUtGdGVNYTJoL1IrNDk1enNXY2NzTzJsUWN4blIrQUdpaWd2Y0FBSGphYlpOWGJCeFZGSWEvMzdGMzNUWk83NzFYeDE3M3hDa3VhOGV4WXljdWNlekVTY2E3WTJmeGVoZkd1M0ZzdWdRQ0hrRHd3alBsQ1JDOUNp''@;'; put 'put ''UjRRS0pYMFhzSDBYbWtCKy9jQ1Y0azdzTjgveG1kODU4ejk5NGhDM2VkRzJBZS83TlVtMzZReFF5eXljR0huMXp5eUtlQVFnTE1wSWhaekdZT2M2ZnE1N09BaFN4aU1VdFl5aktXczRLVnJHSTFhMWpMT3RhemdZMXNZak5iMk1vMnRsUE1Ea29vSlVnWjVWUlFTUlhWMUxDVFhkU3ltejNzWlI5''@;'; put 'put ''MTFOTkFJeUdhYUdZL0xSeWdsVFlPMGs0SGh6aE1KMTEwMDhNUmVqbEtILzBjNHpnRG5PQWtwN0M0bmF1NG1wdTVnVHQ0bit1NWxxZjVtRHU1amJ0NW5tZTVoMEhDM0VpRUY3RjVqaGQ0bFpkNG1WZjRsaUhlNERWZTUxNkcrWVdiZUpzM2VZdlRmTStQWE1jRlJCbGhsQmh4YmlIQlJWeUl3eGdw''@;'; put 'put ''a3B4aG5PODR5eVFUWE15bFhNSmozTXJsWE1ZVlhNa1AvTVRqeXRJTVpTdEhQdm41aTc4NUo1U3JQT1ZMS2xDaEFwcXBJczNTYk0zaFYzN1RYTTNUZkMzUVFpM2lkOTdSWWkzUlVpM1RjcTNnYzc3UVNxM1NhcTNSV3EzVGVtM1FSbTNpUHU3WFptM1JWbTNUZGhWcmgwcjRnei81a3E5VXFxREtW''@;'; put 'put ''SzRLVmFwSzFhclJUdTFTclhacmovWnFIMCtvVHZWcVVDTmY4NDFDdk10bmZNQ0hmTVNudk1jbmFsS3o5cXRGQjlTcU5oMVV1enAwU0lmVnFTNTFxMGRIMU1zRFBNZ2pQTXBEUE13MTNLV2pQTU9UUEtVK2ZsYS9qdW00Qm5SQ0ozVktsZ1lWVmtTMmh2eDFvMWJZU2NUOWxxR3ZidEN4ejlnK3k0''@;'; put 'put ''Vy9MakdjaU5zamZzdlExeGkyMGtrUmc4YXBDaXZwRDNrV3RtRitLSkpJV3VHd0hVL20yLzlLZjhpenNqMnJrUEd3WFJRMmh4T2pvNVpKTFJ6T0NQd3RubnZVWTR2bkV6VXNiTTJzSE1rSWZHMVdPSlcwZlRHRE50TXZadEJ1WHNaZEZMWm5lc1F6UGRwTmV0eUZ2OE9iSVdFWTZEaWRpZzliVG1v''@;'; put 'put ''MFpxV1NnVVJtNU9zMEhSelRvVE96ZzVQWm9kTjBjQXk2VE5XWUMzOHFIaTBwclF4NkxQTjFtNlNrbWFiSG15WmxtTlBqUk9QRE9hbjBNOUR6bjhsU21aRy94OXZCbEdGQmJ6anFoRk9qUXpIN2JNRjRodTdMMEJQVDJ0ZHZacHgwa2Q4L2ZkcVQwNmVkbmpoWVZ1V3lMRmpwNngxMnJLbHJOVzdR''@;'; put 'put ''YXh6R1hlVDFScUsyWTQ5RngvTEd6NnQwWFdtb3Z0cGpqY2NHajQyK1BtTTA0U0w5TmxoU0V2Ulk1ckhjWTRYSFNzTmdVM1lvNVNUY29LS3BJY2NxdG1MSmZNdWR4VWozN3FkbGtUWDkyZWs0WUowZjBDUzYzZE95d1B0OWpEYjdtdFo1VnZvMFRISXlHb3U0eWJuVzJOUWVSV3duTDJKNzZoKzNa''@;'; put 'put ''YmNoQUFBQWVOcGo4TjdCY0NJb1lpTWpZMS9rQnNhZEhBd2NETWtGR3huWW5UWkpNakpvZ1JpYmVUZ1lPU0FzTVRZd2k4TnBGN01EQXlNREo1RE42YlNMQWNwbVpuRFpxTUxZRVJpeHdhRWpZaU56aXN0R05SQnZGMGNEQXlPTFEwZHlTQVJJU1NRUWJPYmpZT1RSMnNINHYzVURTKzlHSmdhWHph''@;'; put 'put ''d3BiQXd1TGdEK0hDVmdBQUFBQUFGWW1QWjNBQUE9KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDoyMDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODti''@;'; put 'put ''YXNlNjQsZDA5R1JnQUJBQUFBQUZVa0FCTUFBQUFBcFFnQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmTkg1NWtkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY1hBQUFPZGo1OGZFeEhVMVZDQUFBSkxBQUFBQ0FBQUFB''@;'; put 'put ''Z1JIWk1kVTlUTHpJQUFBbE1BQUFBVFFBQUFHQm9RS3p6WTIxaGNBQUFDWndBQUFKc0FBQURubmRERDdGamRuUWdBQUFNQ0FBQUFEQUFBQUE4RWF3QnBHWndaMjBBQUF3NEFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FBQUVuUUFBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNmQUFBTjR3QUFIRzQvN0hH''@;'; put 'put ''REdobFlXUUFBRW9JQUFBQU5nQUFBRFlMWllnU2FHaGxZUUFBU2tBQUFBQWhBQUFBSkFkNkJDQm9iWFI0QUFCS1pBQUFBb1lBQUFUYXExTStWV3h2WTJFQUFFenNBQUFDY3dBQUFucE43akxtYldGNGNBQUFUMkFBQUFBZ0FBQUFJQUtFQXBGdVlXMWxBQUJQZ0FBQUFYRUFBQU1RSSt4NFlYQnZj''@;'; put 'put ''M1FBQUZEMEFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZKZ0FBQUNCQUFBQWpSbFFBaEIzWldKbUFBQlZIQUFBQUFZQUFBQUc5bmRZbUFBQUFBRUFBQUFBMUZHMWFnQUFBQURUd1oyR0FBQUFBTlMrcHZWNDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUlnUkMwVFFDTFI2Y2RG''@;'; put 'put ''UmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY05iSmJWRlg3T3VmZSszOWV2Z0tXVUg2RWdJVmdiMHhSR21BaXlhUmhVUnlxU2ppa2FadmJqbklQeDEyRXpGdWY0Y1dnV1VoZUhEQWxwRVBreDJnQ2lZa1hHdW9ZeHh6WUN5Z3hoWUZ3''@;'; put 'put ''SHlCWW0wK2xDUkhuM3ZPZjlzQy9RYnVNSkQ0ZHo3M3Z2UGVjOHQrY1dBcUNBRVpnS21WeFhQd041ZUhvUXgzRDhSNkJ3Yzc3ZE9BOFZjNy9ST0FlVmMrZk1uY1Bab0Q4WlRXY2s3UGhkQVFNd0RGWG1jUmlKZXRlYWprWUxiRldKbWhIeEkrbTlpRjhNTmw5QXhXY1ExTVhONUlDSldJbFBFY3Rn''@;'; put 'put ''S0kvQmVUSklqcUVVdlhpeWY4UWQ4WmI0U0h3Y1BmeUozKzl4NVBmZGVqdTVkL2IvSitPZjk3akN1ejJPOUh5ZVA4VzdlaGpaRW5mR3V4TmM1ai9Ddjc5TDBOMGVjVE96cEJqT1RGY3hXOWNSaWxyQ1lSVGhNWVlJK0R3UllSeVJ3M2dpandsRUNYTTdrWlZxSWdSTDhSUE9mSlFJelBoSytsOG1C''@;'; put 'put ''SzhRZ2xjSnhTSEM0MDNDNHpnUjhGY2l3a2tpd3J0RWhMTkVEdThUT1p3blNsaTlUN2xhVEJTa1RNcFFJdVZTVHE2UUN2SmdWcmJBdFVkVEpTUDV6ZldFMkxuVEU2dWQyTm1KdlowNFlES1JSeDFSZ3R1SUFocUlVc3pIZzF3aGlTU3lTQ0tMSk9CeFBNbjVxNGtTL0FKck9mOXBiT0w4TFVRcHRo''@;'; put 'put ''RTViQ2Z5ZUlISVlRZVJ4NHRFRGk4UmVld2tTdEJHbEdBUFVVQTdVVUFIVWNCZW9vRGZFSUxmRW1MWmlmQTJVWXEvRUdsZTFQS2lsaGR2ZVFtV2wyQjU4WllYYjNueE1sQUdNbDlYeTlYa0pFZUJxOVl5UTFXc2NTMXJPNFkxSGNmTVRHQkc1bU1CRnFJUjM4Y2kxbklwbG1FNUhtRVdIbVgwMnhq''@;'; put 'put ''Umk2emtLNnpnSVZidU9DdDJrcFU2eTVPY3Q1dFZ4bjBya3Z1bEQ5czkzQ2VOakxzMzFiV2J1bXVPUCtwR3JUYlMzUjM0Yk9STWdtNitQTnZqM1RoelVmRzgxOGZqNWZIeXkwZlNXeGV2aTlkMU8vSTMrMFpSYVpvUTA0VGlxNFREM1lUSFBVVEFMQ0tpSXA3a25FUU5ZbXBRVTRPaWxZaXdsWWlz''@;'; put 'put ''MG1LVkZxdTBXS1hGNnFvNFFUaWNJaHhPRXc2ZkVBRVhpRWo2U2wvV3RaLzBJL2VYL3VTa29tSVZGUmtpUTdpK29nWlhFYVhvUy9ReXBZc3BYVTNwcnFqMFc0bXMwcjNGRTJYaXlablNYVkhwWFJyM0ZwVzNxSElXMVVXbHB4cFAxYjJMNkZuWFNiVGVOS3ZGQ0JQbE9vc3paL3AxcGw4dHhweW9X''@;'; put 'put ''SXVSSjFyV1RQeFpSVHZMUWs1R3kzanVudnowcW1PRURhelgzWXhyRmlOWnpValc0Q2xHOHpRMjRCbHNaRVJiR01sVzNzWTJucmFkcDl6TDA1MWdEVTd6WkJkNGduN2NiU0IzR2NJVmg1bWVGWDJzbzVTYk9zcTV5ODIweE95YjJZbU9SY1BJbmN4L2g2eVFsZktFckpFVzJTalB5WGJaS2J1bFEx''@;'; put 'put ''NlhBM0pZanNvN2Nrck95QWR5VGk2bzE0S1c2UUN0MUJGYXJiVTZWaWZvTFZxbjlkcWdNL1ZldlU5bjZ3SnQwb2QwbVQ2bXpicEsxK3A2M2F5dHVrUGJkSS91MWYxNlVOL1NZOXFwcC9VOS9WQS9kbkNSNitYSzNTQTN6STEwMTd2UjdnWTMwVTF5dDdscGJvYTd4MzNkM2UrKzV4cmREOXpEN2hI''@;'; put 'put ''M1UvY3p0OXF0Y3h2Y3MyNnJlOG50Y3UxdW4vdURlOE1kY1crN0UrN3Y3cC91Mys0VHJ6N3YrL2dLUDlnUDkxVyt4by94Ti9vditzbCtxcC91Ny9Tei9EZjlBMzZlWCtSLzZKZjRGWDZsZjhLdjhTMStvMy9PYi9jNy9XN2Y0Vi8zQi94aGY5Uy80MC81TS80RGY4NWZDRDRVUWxrWUVDckRpRkFk''@;'; put 'put ''YXNQWU1DSGNFdXBDZldnSU04Tzk0YjR3T3l3SVRlR2hzQ3c4RnByRHFyQTJyQStiUTJ2WUVkckNuckEzN0E4SHcxdmhXT2dNcDhONzRjUHdjWVFvaW5yeGRpeldiZVFseG5VWlhwVXdtb3hiekxPMHkxL2thY1kxeGpjWlA1aXdEalY3dXZFazQydVZQMU9sMm5pVThaU0VzZEI0azc1R2JqVC9l''@;'; put 'put ''T09KNXU4MFBtK2U2NHczR0ZjWjU0MGIzR3p5ODhhTHUyZDlNeHVqK2E5Z1RETisxcmlwaStXdU5IYXo1eG52TTE1MUphY1pNUHRLbm01OHJiYi9MOWFObCtTcXZUdkdsNDJmTVY3WXhjeGV1Mlh2djNPYXovWnV1U3JEaXpObnZzVE8xSFNKK2F2Tm43WFRyRDV1OWwyWnpJL3FHcjFvMjJpcWlx''@;'; put 'put ''dy96ZXFVMUxZNXFXYlM2cVJScC9vczJrVi9NcWZGN0UydTZhSjZpeHA3dyt6OWlWMnNhWnF4Vk51cDlyTCs5QXhwM2c2YS9TT3IwWjlONStkc2ZxcWNUcHRqTnlMVjdTWCtHclBQcDdiTlNWV2Q5YWMzNkthTVp0S0taTzBYelA1VzZyZjVkaTkwcVBrM21EOVZXbFhHbm1TY04wOVA5a2ZwZmJI''@;'; put 'put ''bzdqRDdzTm5abGV2aVh5WFZpZmRjVnFuc2psT0t0N3Y5LytCTFp5cXVzWGNwK082cVpsYVMxNmxuMTY1aEYweGUyQkUreDVkWURtTnhJM3RZMHJuN3NHOS9nVDA5NmR4OTdZMWFicDI3SDMrdm1zbytWRS8weHgzc2N3UFk2ZTdrN3o0emlVcnI1VVBaOWI3R3JqV2ZiN2ZoOW5vYng0N2V3dlhX''@;'; put 'put ''cy9QZGJyM3ZLK3grcjdGRC9oSUg4QjIrNk01aXNiMHExK0JmRXZBVU8vRVF0RnBQYmVONVJhNnkzODBpU1B4alUrRVMzRTlld1c1WGlrSGNheVFqR28wYmVPcEpQT1Uwek9Eb3IwMjdmelErYW14M0J2c3lmTWg0cnZGbTQxUlZPYk5MOFNYdTh3QytLem5KUzRrVXBGUjZTNThyVC9RZjZqNmJL''@;'; put 'put ''UUFBQVFBQUFBb0FIQUFlQUFGRVJreFVBQWdBQkFBQUFBRC8vd0FBQUFBQUFIamFZMkJtY21DY3dNREt3TUxVeFJUQndNRGdEYUVaNHhoRUdNMkFmS0FVSExBeklJRlE3M0EvQmdjR0JkVS96TkwvalJrWW1JOHlxaXN3TUV3R3lUR3hNcTBIVWdvTVRBREpaUXBBQUFBQWVOcTFrMWxRamxFY3hu''@;'; put 'put ''Ly90MzBSS2hUMTl2WnAwMGFpRkVYMnBjaStsS3pac3EvWkd1c1FRMFZTeUo0a294a1RVMU8yRys2NE5XT012cytWVys0TUhjZFhURFBNdUhKbTNuUGVjODZjNTV4NW50OGZjS0hyQzBGMGoxVHFtVGpucmxLc3h5V013NDJCbEhDTE91N1NTQlBOdE5BbUhoSWdneVJNQmt1Y0pFbXFwRXVtVEpV''@;'; put 'put ''Y3laTkNLWklTSTlWNFpieDNpVEtQbTYzbUUvT0w1VzRGV3NGV3FHV3pvcXhoVnJwMTMrWWYrVTBwZllmRmpSN2FqMm5qbWZoS2Z6SEZKckdTS0NtU0pobVNKZG1TS3dXeVFUWnI3WmZHVzYxOXlHd3gyODNQbG1FRldFRldpRk43cUpYMlMxdDlWQy9VYy9WVXRhdFc5VWcxcTRlcVNUV3FCbFd2''@;'; put 'put ''NnRRMVZhdHFWTFdxVXBXcVFwV3BNNnBVbmVoODA1blZtZlQ5azZQY1VlRElkOFRZQjlyOTdENTJMN3ViM2VqNDJ2RzU0L0NIa0hmSlhWNzlwK1p1ZUR1VDRJOWJCS1A3ei9pSFJ0ZEpGMXgxZHU1NDRJa1gzdmpnU3kvODZFMGYrdUpQQUlIMG96OERDQ0pZWnp4SXB4NktTWmhPSkJ3Ymc0a2dr''@;'; put 'put ''aWlpaVdFSXNjUVJUd0tKREdVWVNRd25tUkdNSklWVVJwRkdPcU1aUXdhWmpOWE1aREdlQ1V4a0VwT1p3bFNtTVowWlpKUERUR2FSeTJ6bU1KZDV6R2NCQzFuRVlrMWFIdmtzcFlCbExHZUZmdjhPZHJLYllnNXhuTk9VVTBZRjV6bEhKVlZVYzVFYUxuR0Z5OVJ5bGV2YzFCVDlaUFEyRFpxbGU1''@;'; put 'put ''cW1uMjBWcTdVZDBXemdiTGMzNjFtaisxMmMrTzFXNFY4Y3ZFQTltMW5aWTJVdG15UkdqMXZZempIc09DUmM4eGtwVWJvQ0lyaWpkeDZnYVpZRVhRL3gzV2VLbkdIRXNvMjliR1VmZXpqQVFWMUwrem5DVWIxMW1GSk9jWkxYdXBwNnNVNjh4RnQ4MkNoK21uL1BINUROcXVoNDJtTmd3QUw4Z2RD''@;'; put 'put ''WndabHBQUU1EMDI0bVZnYUcveUhNMHYrTm1YYi8vOEowakVudy81Zi9maUErQU05UERWaDQycTFXYVhmVFJoU1Z2R1VqRzFsb1VVdkhUSnltMGNpa0ZJSUJBMEdLN1VLNk9Gc3JRV21sT0VuM0JiclJmVi93cjNseTJuUG9OMzVhN3h2WkpvR0VudmJVSC9UdXpMc3piNXQ1WXpLVUlHUGRyd1JD''@;'; put 'put ''TE4wMWhwYVhLTGQ2emFkVEZzMEU0YlpvcnZ1VUtrUi85UnE5UnFNaE42eDhub3lBREU4dXRnelQ4RUxYSVZPUkNMY2RTaW14S2VoZW5UTFQxMW96WnI5WGFWUW9WL0h6bEM0RUs5Zjl2TXhiVFY5UXZZNnBoY0FTVkdKVUNnSVJKK3hvazJZdzFSNEptbVA5SERQdjFYMEJiNXFSb1A2NkgySkdz''@;'; put 'put ''SzZmMFR5aitkQUtneUN3eUxTRFFKSlI5N2VDd0tHMEV0Z25VNGpnV2Rhcis1U1ZMdVdraXpnQ01rT0hNa3JDTDdFWlp6ZGN3UnIyMkVvODRDOUlsUWFsWi9OUWVxSXBtakFRejJVTENITFpEK3RXdEJMNE1zZ0hnaFpXZmVnc0RxMXQzNkdzb2g3UGJobXBKRk01REtVcmtYSHBScFRhMkNhekFR''@;'; put 'put ''T1VuWFdvUndsMmRjQnIzTTBZRzRKM29JVXdZRXE0cUYzdFZhMmVBY09ydUxQNWJ1NzcxTjVhOUNlN21EWmM4QkIzS0NwTkdYRmRkTDRNaTNOS3dvS1RIUzlSSFJrdEppWUdEbGhPVTFobFdQZEQyNzNva05JQnRRYjYweWkySmZQQmJONmhRUlduVWhYYWpCWWRHbElnQ2tHSHZLdThIRUM2QVEz''@;'; put 'put ''eWFBV2pRWXdjR3NZMkl6b2xBaGxvd0M0TmVhRm9ob0tHa0RTSFJ0VFNtaDluTmhlREtScmNrcmNkR2xWTHkvN1NhakpwNVRFL3B1Y1BxOWdZOXRiOWVIZ1lCWXhjR3JiNXpPSWt1L0VoL2d6aVErWWtLcEV1MVAyWWs0ZG8zU2JxeTJabjh4TExPdGhLOUx3RVY0Rm5Ba1JTZy84MXpPNHQxUUVG''@;'; put 'put ''akExalRDSmJIaGtYVzZacDZscU5LU00yVXBVMW40YWxLeW8wZ01QWEQ4T2hLMEtZLzNOMDFEU0dETmR0aHZIaG5FMTNiT3M0MGpTTzJNWnNoeVpVYkxLY1JKNVpIbEZ4bXVWaktzNndmRnpGV1paSFZaeGphYW00aCtVVEt1NWwrYVNLKzFnK28yUW43NVFMa1dFcGltVGU0QXZpME93dTVXUlhl''@;'; put 'put ''VE5SMnJ1VTAxM2xyVVI1VEJrMGFQK0grSjVDZk1mZ2wwQjhMUE9JaitWeHhNZFNJajZXVTRpUFpRSHhzWnhHZkN5ZlJud3NaeEFmUzZWRVdSOVRSOEhzYUNnOGRzSFRwY1RWVTN4V2k0b2NteHpjd2hPNEFEVnhRQlZsVkpMY0VSL0pzRGo2dVc1cHpVazZNUnRuelltS2owYkdBVDY3T3pNUHEw''@;'; put 'put ''OHFjVnI3K3h4NFp1VmhJN2lkK3hybmVXUHlENE4vaXhkbEtUNXBUbkJ3cDVBQWVMeS93N2dWVWNtaDA2cDRwT3pRL0Q5UmNZSWJvSjlCVFl6SmdpaUtHdDk4NVBKS3MxbVROYlFLSDA4RU9pdmF3YnhwVG93anBTVzBxRWthQVMyRHJsblFOT3J6N0sxbVVRcFJibUsvczNzcG9wanNSUm5NZ0Nr''@;'; put 'put ''bzVLYXhzT3p2cEVSYVdEdXA2ZlRSd09WRzJvdWVMRFZiVm5HRnZRZnZZOGpOTEhrM1VsNjRLU250Ulp0UXA3eklBZzY1a1QyNEpvSmJhTyt5aW1KS1dLZ2lQZ2h0QmZ2dFkwUW1MVE9ETG9FaVpIR3lzZy90aWgwNW9vSjJBdDk2MGlydjIwTHR6M1h5SURDYm5XN25RWmFSb3ZOZEZmVnFmVlhX''@;'; put 'put ''MkNoWHI5eE5Id2ZUenJDeDVoZEZHVTh1ZTkrZUZPeFhwd1M1QWtaWGRyL3VTZkgyTzlidFNraysyeGQyZWVKMVNoWHlYNEFIUSs2VTl5SWFSWkd6V0tVUno2OWJlREpGT1NqR1JYTWNGL1RTSHUyS1ZkK2pYZGgzN2FOV1hGWlVzaDlsMEZWMDFtN0NOejVmQ09wQUtncGFwQ0pXZURwa1BwdWRt''@;'; put 'put ''dkN4bExnc1JkeXpaTmRGOUIwOElSM2l2empFdGYvcjNISVUzS0xLRWwxbzF3bkpCMjBmSytpdEpidVRoeXBHWisyOGJHZWlIVWszNkJxQ25rZ3VPUDVlNEM2UEZla1U3dlB6Qjh4ZndYYm0rQmlkQnI2cTZBekVFdWV0Z2dTTEt0N1NUcVplVUh5RWFRbndSZFZDc3dKNENjQms4TEpxbVhxbURx''@;'; put 'put ''Qm5scGxUQVZoaERvTlY1akJZWXc2RGRiV0RybmNaNkJVZ1U2TlgxWTZaelBsQXlWekFQSlBSTmVacGRKMTVHcjNHUEkxdXNFMFA0SFcyeWVBTnRza2daSnNNSXVaVUFUYVl3NkRCSEFhYnpHR3dwZjF5Z2JhMVg0emUxSDR4ZWt2N3hlaHQ3UmVqZDdSZmpON1ZmakY2VC92RjZIM2srRnkzZ0Iv''@;'; put 'put ''b0VWMEUvRENCbHdBLzRxVHIwUUpHTi9HTXRqbTNFc2ljanpYSGJITSt3ZUx6M1YwLzFTTzk0ck1FOG9yUEU4ajAyOWluVGZnaWdVejRNb0ZNK0FyY2NuZS9yL1ZJMDc5SklOTy9UU0RUdjhQS051SDdCRExoaHdReTRVZHdMM1QzKzBtUE5QM25CREw5bHdReS9WZXNiQk4rU3lBVGZrOGdFKzZv''@;'; put 'put ''bmI1TXF2Tm4xYldwZDR2U1UvWGJuWGZZK1J0bE03b3NBQUFBQVFBQi8vOEFEM2phdFgwSmVHUFZlZWc1NTBxNmtqZnRrbVY1MFM3YnNpVGIycnhidHJ4S3R1eXh4K1BaUEo1aHh1TVpHQWlUR1FqTERFc0lKU1NrU1VOQzJnUkNDRHhhYUZrbXdMQk1GZ2hmU2lZTEpDOXRtclJaMnJRcDlBWFN0''@;'; put 'put ''RWxMK3NEeSs4ODU5MHF5SmM4TStiNEhZOG0rT3V0Ly9uMDVRaFZvYVQyQ1B5dllrWUMweUl4c3lJMWFVQXgxbzM0MGdXeEp5L0JBWDA4aUhtbjFlNXJxYWkxNm5VWkJVRVY3UU9uVU8wVnp4T3cyUjJMdVdDUW1zbmNSZnBXZjBtZjBuWDRDVDJMeTcxSWIxaUVSaWVIUDVsN0cvZjg1TlB6dzhQ''@;'; put 'put ''REREdys3bk03aDRlRkR3ODdiSHo3a2NoNXlQdnp3dzg1RGgyNGZHM3Y0OEpqanU4SWJLYWZYQ2Y5dVBlSWFHL01jZ04vR25IM0Rya00zZEZuRHM4ZVBQM2I4K0d4NDFSbDJ3aitFQ0pwZi94MzZHbm1DN2MyYmRDR00wUkpDcUNhRENCR1dGVmdRck1LVVFxSFFLbXE4ZXAxU3RBYU1FY0Z0OGNX''@;'; put 'put ''aThVaW54V3hTdVpmMm1tS0N3MkcxTkRWWnlCTTV3M2NkVnJQRFliWTZFRnBmUitQNE1ieElIdFM1VUFWQ09nRmVuMFowWGorODNBRHoybEVUdWlIelpPZnN6bVN6VmtXUVVpQ1lJTHhTaVRXYW1reU5ybG9RUmZWU1ZRVlJxL1VaQlNaRVM2YnNTUjk5d0Q1RWF2RndhVCtwNGE1a0kwSk5qUTMx''@;'; put 'put ''TUkyOXpsWnJoUVViOWZuL3hJWUFGaU9pVzNRbjJFOGl3bjRpSXZzUjZZZjR2NkxYYXE4TkRnZnZnWi9qMnVQUjkydFBTSDlkbzMzdW51ZzkrS3V2OWo4Ri8vVy8ydjgwL05mL0trQXl0SDZXaE1uYnFCRjVVUnRxVHdiYkFpNm52YTdXYWpaVVZxakZHa1NVQUdhU0JqQ1EyeEJHK0VNQUVpdWFh''@;'; put 'put ''dExyQlFDd1J3Vm9FZlA1RXhackxJUmowUUdjQVBTd1dFV2YzOXlJelFnZTE4QmJQQmFGQnlSOC9FajJwcjBkMDNzdjI5KzVzeXQ3MWE3MmlabkwzNWM3M05VYlNXSXltUnEvL0VveE9hemIzVCt0WDdQTlp6dTJ4OFgrL3BxNS90R2EzOVR0bk1mMmR2MVBOVU90dVpHUlVEQm1lZ3NXb2tUaDlm''@;'; put 'put ''OG1iNUpuQUNPTWNEcGgxSXUrbFhteUZrNG9VSW1WRlJpcmxIZ1ZxWkJhbzFJZlFRb0ZXaWFZWWt3MWdGNVlyaEtKSUdpRktYdm1TVDkwQ1Yrd0M0S21ySis0WElWRjBTckMyVWJLOUNBRTJ0SnVxSHl2WGJ1U3Z2WjJoOE5rUXFpOXQ3MG5IbldFSGFGbW42bkoxRmhYYXpUb2RiQ1pHbCtOYUE0''@;'; put 'put ''WU9FZ2puUUJLVXcxMjR3aDJHeWdzM1M2VjJXU0pvRTJmRCtEQ1oxK1liRzZaRElYWUsvN29jSzUxK05wNG9yVTEzdFdDWnlkYjhoOEYyTU5FSzE0S1pVTWRNNkhRVExoOUpvam4xcmJodTFPZGtaRlV0RE9WT3hpY2FRL1R6NkJGTUo2S2RJN1FqMkIvQW1wWi94MDVTWjVGRGhRQVBqT1E3QTBI''@;'; put 'put ''dlUwTjlYVzFGYmhDSUE2TUJKS21HSTZYZ1Z3dEdTVVFLWU1Nb0ZCYm05UFpGbXVMT2dQTzFqYVhTclFFbEg2VjIwWDNGRThVN3d3K3NzWVRWcFZvUmJBMUs5K2xJZUh6QTJyQlRrbHc5OUkxL1FlN3BtY2I2NE96bmNGMFlQdjIvdjN0alVNZG9mZm5QdGNWbitqdjhEVk5uaHp1R1p6dkYvZnNE''@;'; put 'put ''Ky9zVFIxMHQwejRncE9Cd0dSZ2NObzV2akkrMzNEbDBFbXlPeEtJajliSFc1cmpheTlucjV1MVo4SzlZNER6d0JmUWcrUkJWSU9DbVNkYkFGRXFLZXRoNTRzQkNYU0kvcmtJZitJbFNpSFR1NTYyZUFsc3h4RExzeDdSSkxwMzZ1MUdvMTB2dHVFZmtlT3RScnZkMkhxY0JLREh3UG9PbkNCZlJ0''@;'; put 'put ''Vkk5VlMxRXJjSEdNdEtXTm4yck9Lang0NnROQzlzMzc3UXZQQ3pXMjc5NlVMcnpoYytjTzI1eFFDZEVPaDNCL2JMZlVYb3k4SGpUM0RBaFZpL0ZSamg1c1Z6MTM3Z2haMnRDeis5OVphZkxiQyt2Zmc2dkVTK0Nqc1pUZzR1VG8wbi9QVldVUTJjS2QyUFVUVWMyaVMwQXVRbk55RWlZQ0tjb2l5''@;'; put 'put ''V0g2UXdCU01zbzMxenMrMGhsME1wbWdJR3R1WjRRaVhDLzI2WHp3OS9KK0tEMk05L28yZHB0Y0QvUGo4N1lNNlFvUzN0US8raS9FNVVhYkdWL3diWTdLSmQvUllyMjRuNzYxbzFGaFRWdGMxV3BWSlZwVkJVMWdjRGdXQjlwVUpScFZJcHJNMjExUW9CcTdVVkZmbDJDdFdGMnVIcnFqWFdpRXJi''@;'; put 'put ''cURHNUdPTldWcXQwT3IxZXAxTlZLOVdpS0ZTN1RKcEdyU3BpMVZSZmVrc0cxeFE2U21wSUZGVWlYOUtOWURyRkF1QTlBQklMYUFWWUEwVVRCWjVtZkYybkV1c0MyRTBsYW94SzFnaXBlVEh6SXZ6RExTKyttSDdwSlRyZTlQcU42Q1cwSC9EUG1nUXlSK015K2dFUmVRd1UwNEE4WEFVeEo4NDBW''@;'; put 'put ''MWxBeXRVN0hjR2pvVEFWZDBGMzQyQVhIYXNML1FyMzRpaFFibTNTekJCM29ZQzRlaDBkek9nME83dXdrRnZEMFVtMm4wbVF1OC9BL0pWVWc2QlBnQ05pYk1VVUJ5cFJoVWNBVmxVc1pZOUtFcllxTDEzeCttL1d6K0tIeU9zd3J6NVpRd2NGWVlKUDhna3BXOE16QzdrSEZzanI3NzZHbU16dEJi''@;'; put 'put ''NXlMVGtIckxBSnRTVmJnS3V5SFhNT2drSFlzd1hvZ1BaMFRickdXZ3ZqbVNDTUFvck5QSkhFb2lGQUprcE1qVENUNm9PVGt4K2NuNFBYVytmNzlrV2orL3I2OXNWaSsvcXE5bnh4ZGZXQlBYc2VXRjM5NHA2SnlWdm41bTZkbUtDdkhBWjFsQlJBQjFBaGU3SVdqbElBZUtVNWg4ZFlpNmYwUmdZ''@;'; put 'put ''NjBaK0k2TjFQWCtkNlpEQkxack05SjlhMklkYS9BelpWQ2Z1eG9kYWt2Nm9TdGdQWVFFaWFnWk94UnFyRUxDRW1qL1JXajE4aDFnWUdNU1ZtdW5xVjZJOUx6RkNMNFh3NjNwa1lhaDcyZHUveUpaWSszWGVvTjdQNE5GN0srWVorT0xBYWJlNTNkRVdDSCtyYzJ6ZDZZK2JlTkorL0dlQ3BoL2xi''@;'; put 'put ''MEdDeXoxWUxjN2t3a0RTc0F3dFV1QU9WNHhXWVhiRU1DQXFMQWRtNnJNSktwVlZKVDdrRk5YczhUbzlYRkcxdzBwUzVSRHFwSEFyZ21OVWlDYVRDQ2tVSjlOKy90VG51UHRRL3NYUGYvR1I2ZlBmaVVIeUhQN3JuRTBPcnZabWUvc1crSzhlcWhtS1JVSFNpdDI5Z0F1T2g3dmhZWnpoOGZYZ2hQ''@;'; put 'put ''akNucjlrKzByMDd3bkdoR1Y0R0FQWVZ3T1dDeWRZcTRFazRyVkxDSGpBQy9mVXdnSStKWEsxaXFyS3lzcnF5R3VqS29LTnI5VHI5T0tLbkdxdzdwc2Y0enR3akZYaGg5K3BxTnZmN1B4L0NyK1FHeC8vODEvaGc3ajRPb3k2QVVTUE0wNGo2a3QwbWpCWGFHb0VvNE56VENGNlJBb1M4SUpBbEx1''@;'; put 'put ''RTNBcWdSTmJqMFJxOUhCcEFsMGlrSlk5RlA2VW1NNXhIeVo5Y0hJenN2RDZkYjlrN01qWGRYNEh0eVo4V1JtY0hWL3NIM2pWWDFSTHIzTjQ4Rmh1ZGk5ZmhBK3ZWUTVNQndhclVMWU5BSGE0dkErVFdnVnNxdERYbzRPMzhkVVNwSVdnVnNSYUVVRktzb0wyWkZXSmpNSVJwQnIyeHNiV3p4dXFG''@;'; put 'put ''enZkZnJVNFBlaHFURlVLNUJpUVhFRENlU0JrQzVpRUZXSkVSS01YY2RIUmk0YXV6Mlc5STNUL2Z0YXdsNEprTHgzVEhIU3I4bjA3eHZmR2lwV3JjNGloK0RoUTRlNmZ2S3ZTdC9jYUMxdWQvdG5ibGptNll6a2Z0SWNNSS9DdHVjTzBEbERaeGpGYU9ocG1TOUFnaUlVUkRsUFpqcDhLQUZnL1pE''@;'; put 'put ''MVVyc2pEbk53QlNleU4yRnY1LzcwVzZ5a3U1ZHU0dnFHMUdBUXl2QXdRNXc2RUVqeVNHVGlnQ0hUWXRGUUpBNGhScUFnT0dNR0tjSUJPcnJFUXIwQkxvakhmV3Q5UzBlRnd4UjE2YWhyS3VjeGlIQng1QW5RTW85ck5LZi9ockNtTWtiN3g5ZVNBMU1ERjNSUDNERlVLWjNlR0g0eEpobkl0d3lI''@;'; put 'put ''aGphMVQ3dUJwVXBQdXZ6emNaQnFhcHFYK3dlMkd1dTNkYWRtRzhMemlkNlp5Mld2ZjNkaSszNEU0MXhyeXZlTkJMeHhSdEk3bmxIdDlmZjU4VFkyZWYzZGpzWS9tODZlNGNCanIxQ0F6WUVnVzByZ1hDVlpCWFFYNEM5Q29JbFV5UWQ1TE9IM2NMWis3eGVkdllXNmVnNUhRL2dma3ovbFBadm9K''@;'; put 'put ''RGc3TklTd1UrVm5Qb2d3NFlVTy9ZT2lnSGszT1pUNTdpUSt3ZzlkbmIrc0FjbVEvQTZ5QXNyNWVlVWY3TkY2cm54cHVUR1cxVVZRbFhXS290Qnh3UUw1ZWVHSXNGQ3lnZ1pxL1NPNzVhbFRlNkEvQnZZZEV4MjRuV3c2YlF3bVlqMFFNYjNJODBaakovRDl6OFpDVkM2VDZDZE9FY1dBUzlWVDZr''@;'; put 'put ''STZGREdtTmRjamMwSjRCQzM0ZE80cC9jWFk4OC9QODdPSW9YT2tScjhUNENKSW5JbG15aitVbE1PRkNTQkxFZ3NuQWhVdHVzb0I2ZTBULzlQNFcvbll1em5uOUtmVE1PY1UyZ25NY3B6Q2pCbklvaGpTck55Q3ArR09WL0pkZC8vL1BOanYrajlCWjNUdnY0Ny9CcWNmeTN5b0VReWFxbXFwR3dQ''@;'; put 'put ''VTdZdHdNUTNGY2tReXNDVldLR3dLcVpzTnB2SDV2YldldndxdWhCWkRoYjRkQTBHMjYxWWJqL1hzeWZpSEdpT3pua2plLzlvWUg4MHNxZG5SaStEOTVUUzArVm9Tamc3ZzVFVDdkc2piYk85VmJjVW1jOTBuVzNyZHdtam9DY1BvaXgrSnZOa0JXaktCcWVEcUlYaEpvT2dVUGYxRWtEUU5CaGJW''@;'; put 'put ''UnMrMFJSOVl0cWlUN25tdTNidDRwTTBWMnFJQW1TQ2luSm9WUVVHcmZJZ2toZ2dNQmExV2xnR3dPalZVOUxVUVRDOEZWaXppQzYxaytrOVR0TDBoMHhDRFlzQUhLaGFJNmhYTDlwWkNZWkhCeFZDQWxLdWJ0MUxGRldBWXlweG1YV2YyVVgvUzlZbWt3Z2xzOG5waVRFNHF3R2ZyOVhyOGZtcVJI''@;'; put 'put ''dUo4dVNpTmxhUmtBQWpySU5abDUweVg1VFVxazVtcm9BQm11RGFnTVErUnA0ODh2NFhyejcwMk9Ib1hDalVyMjZjNzVoY1NoM3I2UncxVktmMEhrOWpZN2QzNmI0OUs0K3Y3dnZDM29HRENVUFBWU1BOTzlVNEhndG13LzJSazRjZk8vUytGNDhmZUdnNWUyVTgxT3dQNzU4ZU9aRUtlb2FWQzJl''@;'; put 'put ''dFRlNld4ZUdGVHkydVByR3k1NzZsZXFmZDYxaTdiRXJVUm5xaU96cGlReFFmQVMzSkQwRGVpS0E1QkpMTkdneHdTUU4xQUxrb1FHdWdZbHpBVEh0VHE5VVY2Z3F1anRlQzFpQXlVOXRmaVVsMzd0YlJCUnltLzFidS84Szk5NUluMXJiOUt6NmErd3pBZkIrTWZ4ekcxNEZXNTBMOXlSNlFPRENE''@;'; put 'put ''Q2pnQ3lHVWxWYWNrQjVXSXVkWlA1N0xYR2ZUT3BqcVgzVlZyMGRzTXRqYUhtaW5kR3dXUEUwc0tsdGtvLzdJUDl5WjJ0SGQwOUExRmwzcHp6Mk4vOStSazk0OS9tZHkyTGZsTDhrUmJ0aU02MXRDNHB5dStveDNmTmREZVB2Q1QzTG54cnE3eEhOTnRxTno4S0pNaG9XU2d6bFpaUVhFa0xZc0t5''@;'; put 'put ''d1lYR2p4ZzBzSkhYV2g1bE1pckNNVUhqaE1QN3QvLzROTFlMUjB4MzBwaThuUW1jM295c2VLTGRkd3lWZ1hudHZ6Z2dVUm52Q1UwZlZ0bTZvUFpVRXU4ZytveUZHNHZNSDNPekN5a1BKaVlvMEFDVTFXbHlWQnByakw3d0xvRThNZ29HY0FKQ2ZjQ1dML3ZqV09QTEM4L2N1eU5OeFp1ejJSdVgv''@;'; put 'put ''Z3NlV0xudlFjUDNyZHpmT3pVek15Tlkycy9aM3VmZ2ZuNllMNUtGRTYyeVJ5YjZtNktKUkNiTmNXYU43Tm9Lcm5IRFZRNW8xbmkzM3FuK2ZQNG10eEg4ZWR6UnZ3V1dmbEYrdC9UNUFsSnQ1YkgxNkNXcEU4ZW4zSmhOcXFzMnNBSEdxU2hJek4rekVaMXkrUE84RUZ6ci9CQitYbmREK2ZsUkxG''@;'; put 'put ''a0o1aEpTR2dpUktGa0JvTlNnUmh5a1dVWTJVSTFYOGIrUWNzeHdxRzV1VW5wMUJjSjlkTERpN254WGRqWWZ2ZkVFanZBaVUrRlk5N3J1dmtCdHEvNnZvRXZ6LzIydlpzZllYZDczTi9PajlEZDhGQmh6N2N3bVBxVEhrazlYZ0dkbk82WCtzdTBhRE1zTWQwdC9FVGdsZHlTelYyUnplSlBVM0xD''@;'; put 'put ''M1hUYnViL0JiWHhjZEIvejhScXBZNlZnWDNIVEZJeXJtV3lXOXFJMkdjakZ2MmIwQjFqRVRCbUcwVXc1SjhzQ0lKT1ZnVjJIdEVhdkFyb1hUQmRZQmFXeUp6L1ExRzFhRFBkbnM0bURnMVhKenE1QTE5NUovRnF1WStSWUg5L24zdncrSGNrR2pWcEptT1RGekNNb2NNK3QwV0Rnc2o2aXh4RU4w''@;'; put 'put ''QVNJMWIxWnZIYzE5M01jWGNtOWN3eldtL3NRUHBYN2E4Q2Y1UHRmWmVPT3dMZ2FHRmRKZFdHMmFEb2FKUTBKZEVxazFPdnBvcjJBSnhFOTBlUjZzMm5BdWJYUHNmNlVobjVmV0pkWVpsMG12Ynd1RFJoQmJuMGxuTUMrTEZwSDY5bnMranBkbEJQL2ZHMGJFZG43LzZEOHVBOHhYRzVNMmtWQ1Nr''@;'; put 'put ''WTE1RWZGc0N3M0d4TS9tczNtZHRCaitUNEp3NGpodGU5VC9rdHgrTGYvUDJ4NHpuVDJQYkIvL3dQN0prK24wNmNuT2VKS0xPZkFnOHZMRHgyWXlINXdLblBiTk1kYnBwOVFuRDBJZTZzQ3ZnTldPS3dDU0ZYQTFDVlRDQ1RBRm11cVRZWnFjNDFaNzNPb2FCREJtZWM5WnJmTWx2VXoyRHAyTXBV''@;'; put 'put ''Nk9YWStpelVMcTZzTDU4Z1RYU3VEZ3l0ZGIrT2g3TWhJTnZlVFloaVlhQndtMlVrZCswcWlBck5TSU5RMVdqRFpGRVdlVWJQWjNHSnVEdnY4bEFHREVMZUsvbUppcG83MWVNS2ZzRzRTd3VTM3pkN3B6dG53OGY0bEdVQzVWN2U3citpOHFxNGhEeU5jZjNVNDFUUG1EK1JobGZ1WHB2cWxubVhQ''@;'; put 'put ''WXFnWVhFWHdxb0UxZ2Z3RWdhSEFzaW04QXBxSXhONGtjdmQ0bkhxOWtmSWV1bUszSDJ4dVBZT2NVdllWa0lOSDVyKzA2L0d6V1FhNlhNODVCalo4MndsRDd1MjNHZlErU1FFbitUWC9pNFRKbHdGcUlLOXFyUVFrTnNGRjRLTE81eUo1MVlLYXZVRVBCWmRGdG1xb0Z6UkVTdGdmOXljQ09POTdY''@;'; put 'put ''MGY0cXBISWhIZnhzc3lCV04vUm9jbHJJdTF0aDJJdEk3NGRCNjg2a2JocXV2TEsvbkRVbVhCRUUxWkRXNlk3dmpzYUNmZTNocHlKcG81SWJkMnU3VjI3bzJ5dFFZRFRKTk16dUc4b2I5SnlaNDVrQ21BMzJMUnVvQmpUNjZUKzlTeVl0R21KbG5jQWpud0srcHVSTTlrb0JSc3dMdDZlR1psTUhw''@;'; put 'put ''TXNqaW56a3ZZbzhUSHN1bTB5RzEvdTYxdU9aeWR2bTYrYXVtTUgvbVR1cXFIVm5wN1ZJZnJiamp1bU9IM0xPcEdLenFWa05qaHdUb2xwY3M0REpnbm5QSlNYQWU4Z1A4aDlmd0grWVJCcGxQUEN6eGt5QTJONUVWS1lHRDNCV0JXVTl3T3pvS0V0SnNyWjVvRmJHSFJLS2tramRrei9DZTVLN1Bi''@;'; put 'put ''dS9Pclp4Yk5mM2ZtcjZhKzlPQTNEL1ExcFl6L2J5T1RhczN5ZElFZkozWXkvQVgvVXFHQm9PSDdLZ21veW1PT2J3V0RRVTdqQ0ttRklEUnNkWkpxNC8rLytiaG1MdWY5aDd6dHpmNEZ0dWRmeEl2ejJPcmJ4c1EwdzlzZGdiRFZxU05hcEJLRERQSk9UdkJBR0Z0eVN4b1FqOCtkK2RlQ25QOStY''@;'; put 'put ''ZTNNTzErTFA1SjdDMDdtanVUZm9XRDB3MXJncyt5azhDMjY5dkY4ajc5WXo2Tm1LRTl5OUFRcEFEK2dUUnduSkhjQVBydjEyZ1BqVEEycy81dkovMi9ySGNELzUyU1ZhbVJGQUxQalo5dWFqajc1SmZ0YTk1dXlHSHV2dnJKL0ZUMnpoY3hWQXYxVXU0R1h1Y3NXb0ErWnJ5TThuK3dPcGFrYjl3''@;'; put 'put ''M1ErVkpqUENvdy9CajhkTU4yYlBlVG4zZTgrUVllUDQvdncweHkzenFnT2pTUXR3T0dabHhSbXBoN2prNUozNTR3S2pSZ2pScmRmZFArbzk0R2htMjVPZ2l6NjlULzhBMTF6YnYzOVpHNzlHWmpPd2NiWXdrZE5oeEFCZ0lSc1gvdXJUSXFmNnlCSllwRjhEL3BhV2Q4cTZEa0JuNXcwZ0VqbXN5''@;'; put 'put ''YXM3c0daNjN2SVZ3MmY0RHl1RTNTSTN4QTlzaU0vK2tIU1pNT0NvaGFFZ2g0MCthWkdwYUJTS3RMY3lIUkFZNldLVUdNTGJHeXEwTnN5YXF4U29XVUpIeVhqMGxPbUhTVXQxbGpXMHlTYjh1SmpYdHB3MUtnelUvOVd2Yi9lNTNKUXo1Ykg2elpxNEtpUXhReG5WV1RFV1F2ZVdnT29nWEs0RU45''@;'; put 'put ''K1JjYStFcCsvUExHVXlPNU9UcmtuQTQySGRsZ08xa3pOOXM1UGRoSDlOUWR5MzlqVzFyRTcwemtUYURBT0x0b3MvWjA1YjNka3h0d1hDaWVRRko4bkV5RHJER0FOUFhkV1cwR1VJQzg0OUJvQWFYV1p2SlBLSm5rbzZUYXRlZEE1TnplaXF0OEdYNllFdDR1TWRna0RVWWlaakVhRWpDNmowMjZE''@;'; put 'put ''SllQczJ1UVo5Vk9pMHN2dTBHTDk0NzRyQndhdVRQVWZhTXhrR2cvMGUyYmEybVk2TzJmYjJtWTdpWDcweG16MjFHaDM5QUE1bC91M2FIZk9COFphNzk1b2RHOXY3MUtVNDJrNzROemJnSFBsYlRIYjFyYVk1WUsyMkgrZG1wdzhOUjVkOWticlJueVJ4UWo4ODQzWm85NERzYXIwNlltSlUrbG1U''@;'; put 'put ''NlRla2RnWFR5eDFPUnNqM2xaNlpuRTRzMEQrelBSQzhabFIyREV3TWtPakdNb0ZkSGR1YnNTUVUyU3UxdzI0ZnBIUkxtR2cwak16K054NmVtWllRdkVDZVBSa3MyNFVvRWVWa2cvdUZEdXRUblp5NU56YTZJRm85K2lwYlBaR09EaHNYVHUxK2N3SVBUUGlnVE16bzNwcTZRT1BGd2hUaG9pZ0lD''@;'; put 'put ''djVaZG95cWlJOXptSUJiYmZlWXJmVlVnbHU4REgzcTRlZlZtR3haaWRkbjBwMHduTHh3YVhha1BNRFhhUFhUWTVlTTNyeTF0d3U5VXBtOGxBRjNxdmVrVTU0NmpvOGJXT25wek9ueHI1NDUvUmwrRE43MHVrOUhLZEFGdVB0d1Bzc2FIZXlRb3RWU2gxR0twTG0yU3IxU0tWU0xvUEdWc3NjSG1o''@;'; put 'put ''SmdTWFBLOHRRcVFOalF3VmNaclgwdzEzSkNvK2J4U2xGMGM3bGpKdnlmdVkwNUVpb01yOTA4ODJaYmR2R0UvRldyNlplYjNVU1pTbzNnTCtlR3U5Sk94T2FLbTg5MDRPM2t4YUFIODNSK0hheXFsRkhWRXFObXZtd0pmNEtEQTFram9xc1VzMXlXVlFRaVhBWk1JMEYvcHB2UjVraHJKTzJScVZ0''@;'; put 'put ''VFpjMDVxVU54L2lyQTFRbm5xa0JtMmp5ZWIwZXlsK3h2dGlYSHQvZ1NnYzhqSlhnWWN2UWlYVC8xUjVuNDg3MlhZY0FKVWVQOWZjZkc5Mk1rc3BjNS9CcWo2K3B0OEd4ZldwN2Uyenc2dkh4cXdkaTdidHloMExib3BGdG9kQzJTSFJiaUovOU5DQ29BbWpZVEtOakJoNVhZYlFFQ2p2ekJ0dUtU''@;'; put 'put ''SEpBUkwzSmJhSStDTXJxNERnbGY1MWU0bmI0aGwwZG1ZbnV3R1JiSm1OZGloTjlaRTlQN2xrOE9EanJHWERubmdXMjluWnJqTkhFSUx4K2tmdzE2R2hhNmdYSSsvUnJLZkxvTTdKSFJWdFRYY1hjK2NwTjdud1JWSWk5RFExbVUwT0R5WmZKa0lPTkp2cXJxWEhmMmpzdy92b3I2MWxwZkR1bE9T''@;'; put 'put ''M0k1UnBRUVVsYVdUU1RJREJjVmV4WHdVYnRDaDVDc0ZmVldTMUdQWnRWTEFraUZEc0JWUGtWWEJYVVZsVjV0YmFtekhpaXNKUjNmNlVSQjVRcVR3T0pySDIzaCt0bXdKcFlMTFVTdVpNT2pRTG9YV0NtaVk2dlJ0WlA5VWFtN1dHcTZEQlJBckJ0L3NtK3A1WXlHV3pmajJ0emIveHk3NTBBempi''@;'; put 'put ''Y3lNK1JIczluWUZ6Wjk2RXI4WDFNQVpTQVcvRzJRZ1RveVkzKzlLeWpqcmsrT0IxWktCRXJsOVdpU2xBcTlSa0ZqVFFYMkRXUU9qeWtUVlRRaEtoVXR1SVdwZ3YwdjFCWFNoOTB3VzdrY3V1TmJxUGJwQUZ1VVlSZXFnMi9STXljT09DVlBMazluRWxGQjdMOEpXT2FpZlRzTk92MjloYWhYYWJv''@;'; put 'put ''blNpbldzSzlrYzYrQXQ1VG52emhaemphY3hBWW1mV2twTlN1bHpGZjJyK1Y0MHNKWVVpYkw5dHp5MDUwMjlVWEl5bnpKWkNVY2g0b2lzdVljZGpQSm4rSjdhTCtFc3VGL1NWY01SaS9jWEx5eHZGT3FoZDBjdTFBVWd2U3B5WW1UcWRUWFV1SitMNEVWdytRcE05dEIzMU9YMTZmbzNKYUJXSVFD''@;'; put 'put ''TDJnV0ZFZ0dYR3hQcWN2VmRNMk5qUmRmTFJMR09pUzlEbjVPUDRnZlM3M1czTG1RRGw5anVwUTIwR0gwcGZWb1FvN3N4VXBNNWtOSW8ycFB2cE5xdEhtaHFhTGozWUpBMTFRaDlKZlRIWmRRSWRTcnMzZzZvSVNkU0RYV2FyM3pzUExZWUJURmJyK0daN0V3WUdrWjZKV3dKTHVTM1VTRGhpelRI''@;'; put 'put ''Z0Z4WmgvYUNyZmE0c09zT216ZWhPM3ZRM3hpRGxQbXM5Y1B0NnpKd0xzK0cvNlU3Q0ozTTlwMEFhaklPam5MOEk2ZmFnakdUTERRaTFnYkNOUzhOYlpOcnVmZk1qckNYRDNFMC8raUxNMEFUblR6U3I2NUF5Q1JrSmwwSGVPaC95N2RrUUdYWkhnY3Zid1RIaC9xMmQ2SXRSWEYrMUtqSVN1bUt0''@;'; put 'put ''cTlpYUcycngxYmxPMWZTZ3hPdDlrNytsbzlvQW1hZEE3dWtOak82aStCMnZjVHU0R2ZTK2NiTE5nRlpQNVJMaU5pa2F5UkFNcEFBZXdKUGR6VFpUcGNFWW5WZUs4TkRzdnBwZlN6VUF3MFhCZVBJRzN0OFlUNDl1MlpXNisyV25WMTJ2TXpuUVBUcWYrK0k5VHViUDEzaW9ObFRuQW53QzVHYjhW''@;'; put 'put ''YUVLYnpHK0JZVW9DZjdONVlKVS9vc284a3JJSEMwWkIyWjViZGlyd1c3UGI1R1pobENMTm4wcHpIcGpVRTRHeTJTNlo2UUp5dmdNY0ZwZ3Vuc3k5eEpndW5vVDkySUY0YTRsU3p1bVN2VUN5N3FzM01HK0ZrYnV0N052LzZwSHRQNTRBeld3ZVAwYjFFd3ppRGdrTzZGL3EvOUpmMlAvbG5yMzFZ''@;'; put 'put ''ME1mdTNYMjhmRTdQem9PSXk3akIralAyanY0dnR6QmdwOU9oTEZaRG1HRnFNQUtLdCtvRndYR0ZraFJnTVZnTUZERWMvcEZ0OUVmc1NZaW9oRS84Ymw3ZDM3enhaMmZ1bnZuMTE1NTlWV3NYbnY1NWJYYzcrbTRqZXRUeEFYajZxbXVXS2tHdklZaEFibWxvU2xlNzZkcnR6TzgxaU9kd2VTVzNL''@;'; put 'put ''b1VUUWF4d0haUmc4VmpYa09kdTg2bGJmeW4rV2YrY3R1YmRWT0pwL1hKYWxOZGtvaTVPZno0Mmt2SmJzejNFb2VYVjJIT0xYeGsrZ3Y3eU9LNEkvZTMrQk81VjNFMGQ2UVgzemJlbXpzOXpzWU5yTy9HZThuendIVUJSamFtQU9nd25uQ3hERWxvc0NneEFveG05QmFxUWlsQ3VCK0RiSTVSUloz''@;'; put 'put ''bXFsdHJpTm5LZzY0aXBVNFJheGE5d1ZnczZGMmNWdlgzV3JEWDUvTmlhMitmNnZQTkk3R1BkYllsZ3AxM3hWUE42cGltcnEzbEU2RkVkVTBpOVBIV29FMFRnMW11WEQrTEh0bkMzMGExdHl2NytxUUVSK3JmM28yWDJkcWJrMTQxODVQcE1ZSzE0L0ZDT3ZFeUJkVU1yUVlnb2lsZ0JiSHU1NGxL''@;'; put 'put ''Q2NwZEVvMmtBUVBLbTEwcWVJY1RDZlgxV3ZtS0xiMzlxdW44VG81cmJNSFdqNGNTTmRXSjBDZGEydW8wTVhWektuNVhaekRSMXZteDJFaXplbjBkRGVCV2ZETitWQy9pNnZXMTNGdEljd2JoNTNKdnNRd1pLdVBtMW5lZ3J4SzlyT3V6MVZHRnhKYVJjK0tNcEVUWFovbzJUMHdGclREeWVTbVhK''@;'; put 'put ''TGpYRkNONk9YZGtiUlQvV3JheHorSzN5VFNxUTA2S0tZME5kVGFyeFdUVVZTdEpGWS90d2F3TFV0a0hxSDkxTE9lU2x5QndUejh0UHFESENMSWVyR3lQeFFvaXpZeC9PQmZLOWgzczdqN1lsdzNPT3FOdEE0T2hhTzdEMmQ3ZXJLdFpPWmlxbmo0K09IaDh1bXFvWCtsdmluUm9jbGRXZGtaT1hX''@;'; put 'put ''bkVkeGl2VFBIOElFVDZRUyt2UjZsa0VvNlRKcHdoa2VhMWkzaFNpUWt3WDVHd01CSXpIV25tbVNpeWlCSW4wbnBVVDNNRHdSNmdhckhYN0l3bFdMWnZzU3NIanBDbUtaTCt0Zjg3TkRDUU9EZzRlbTF0ZC9XT1JILzJXOTlLcDMyZWM2azdSbzcxU1JIS08xTG5pdjNZRnRTZGpKc3cwdUMwR2hh''@;'; put 'put ''R0tTYzdyTUlFMUViUVpGY3FXSmtKejQrMG1JMEd1YVJFVjBtTFNsaDVqMWxPUUlZZlJ1RDRzNCsvOXRwcmMvRHorTytvNXh0UHBtWlRKMDdBQ3o1TTNkL2MvaU1MZUE4NXczSzZPcG5IMVUrVG5BRjVXUkJrV1NsUVFPR1pNbGxkMUJsYmJKUjFGdjIrMjA3ejVPM0d4NlIzc21BM0d1cnJEZlIz''@;'; put 'put ''L2c3NDJvYWkrSWY0UlowTEIxUklKK0FBK283a0E1N0QxNUE3TDhWL1RIT3pCbkU4OXkxeVorSlMvY2RXMGYzY3pCLzNrTzhaYnVLOHpiLytLbDZITTlCU1d4QWhwaWpjUk1YdkI2bmdZaUVBRmdMeU1TbUFKZldxbDJwYk5CWlVNM3FrcCt2Z1lHN2dtZ0hjMHJHenUzdFg1MW9UK2ZPMVhUeEcv''@;'; put 'put ''RlAwbDNnRWdOYVl0QmR4QlVMWnhVeFI4blc4Q0hxWE5UWmF6STJONXA4Mldpd05EUmFMWkZzT3JpZlIvOUFNYm5RdDI1dk9hZ0k4TnRJc1FqWGx4Mmt1cngxZzRJQmdWMXhOTTh1QVM2OFdHT2wrT3N3c0tKbXNDV0RXVFZ1MTRWTGFobXhHajhkRHBUUUZIYy9pZCtYVkk1WWFDOElxSHZuZi9x''@;'; put 'put ''NVdXMWhuYkFBTngyUTAxZWljMFZxRkdQUTJlSUs2cWxhcldhODFWdXF6VkpqQXVVZmgzSC9HenIxTnBPZmVocjRyNVo2bDhUOHkvdVJCUGNtRXE5WmFwU0E4WEVrUVhTdERTTTZ3UU5yc1I1S0k4N2p0TnJNeGo1ZW9tR1ZKV1o3VXZhcVNGV1BnTUxoVDRtUE5aZkxsQ253dGQxMlpqRG0yQnhh''@;'; put 'put ''REUyN1F1V0N0TkNjeGhmNEVQWXJVWndoKzhsSEdjTXUwT1lycnQyaHpRbTZEUmZUVUZtMVc4MjJxMFdlMmFMTW5QOWRoOUZlOERkbmM1aHY1Y1NyUkR6YTI0ZmxXd25sR0N3WTBsa3pwS1h1a2NGY2pERXhJRGNlZ1ZxeG9nRGVxbGtBMWxVSmpTcTRvTWF2V29ETkFaNjNFbnlxQldXSTVBU2RH''@;'; put 'put ''YzdKQUlRRHJLaUFuNHVSK3YzczN2b3MwNUl3LzVSazVORDBybmJzVjM1eTdsZWZRSkZuT1V4eTlrNnlQeC93K2hhaXFFd0FyYkZyQTN4b01MMms3SVA4a3gzMmFmZ0lNNjJwNFFZcXJaSmVwSllPQW1VdTJKb2k2L2JCcWU5NElDZEkrQ0N0dXV0Uk9idWdVMnRCSk9IV3hYc25BNWc0MDdaTWNL''@;'; put 'put ''dE9QVzNpVlBtOHJrSjRSREx0NmtJOWFMRE9IemVSWEpqNHVJVHhaK3NCUWpVSnMzRXlidFRzK3VhTmN3bGM0b1hEaGpTVGJyVGwwNzY2U0REREFKWll2eFhDN1djTC8yeGt1NFNLYzNOem1LSHAyaXpZbjVEYUEvN2RzMFdaUGZwekQ2SHJlcG9EYjYxUnkzTWZtYXVQcldmOVl1WEd3bzZqTlVl''@;'; put 'put ''QnZtOXFzL3p1TXM4N1cwOGJYcy81a1NSc2FORmF3OWZCeERxOC9zbkU5UUVjME1QTnRsbmZSUUNzUk5tb1lTMnBNa3k0MFJTcUdWZ3R2RGRwNlZqWnFobTdWSUc4cUNyNFBaaVZGOUxMZkE0Z3FJb0xReHkvejVMblJVVGw5N2x2NGZENkZEbmVuY2R2YW4vSkV1bCttL3hOZ3dIS0RHQy9wa0hq''@;'; put 'put ''Si9TVndZdmt1REU2ZDB0aytWc0p2TnJjNWloTmJ0RGtodDRHemZYV0xOcXY1TnRYb1MxdTAyWk9mNnpCNlpSUGZ3bWdPZlJKL200QXBoVlJQcVduK04yaVFmcUFPZjhLYXNPS1JPMkozZkRqMllmb3ZpbWZZRy9zamh1UjZoTit5dWg0M0NtSlJNb2d0V0VFQ3JRMzF0aXFWVXFIQlNKbFBlNllm''@;'; put 'put ''Q1VVZllXVSs3N2xzcjdJZDhwblB0Y3pWUTlNaUxCbFZtWWlxZytjZlN2NGdDNCtEcWtvRHFsdVBjL0VoS01PcEFXNFQ5TFQ1akg0anF4RXFsQmlJN2tUQm93VGlIbG1zbUR0SEVVL1J3WllJZVRHeS80RjlYWmNISXdzN1F4SGdMdDJYdDhHdmE3L3hPUEFWNDR2QVpQRHUwMm1QSTNmUCtDS3hu''@;'; put 'put ''UjVaZnVpQXg5V3owbkY2RkxnTC9TMzM5L3Q5K1A0NDhKamN2MlEvT0JYWjc4c2RpQ04yL2l5M2h1RmFsNFNQVDVmZzdPWTJSOUcvYnRIbWhOd0c4UEdKTGRyc3lZOXpHUDNGWmw3RGRYWTJWNTgwMTBzYng5bVVkeFZpekYrcHdNb1ZGWmFpamZuQ1loQ2JXb3RKYTlWWjlUNm5UdVNaSUpHaWJE''@;'; put 'put ''VnZQbHR0OXBXU2JMWHJlYnJhVGQrVXM5VW9MV3lIdVhYa1pkUkNmVjhWWUVBd0ZZcm1xNjNLdWVjc3ZJT1hWRHgxMnVoMWVwd0JOd3NQNW4zUW9yeUVXTDVPTEY4UVJVTUEyMW11VXV3eWxzcThtS0lwekttRXQ5YzEyZDA5bVNVMTBmbFFhRDU2cEp0bk00L1RMT1p4WjhJUlM0M0cxOWI1dWZL''@;'; put 'put ''OGplOEJIRWRBY1NBb2RhamNjd0hnZTAvUjgvTnlleXd1RjdmL1N2NTVkYXI0K1puOCtJZDNGajBYN1BuMmxUY2p4Z2ZndWZCbm9IKzJvUWhLb2lQSmxRYUFuYXNlTkJ3enJsQjNZVldGQnBSbVVhV2tWUnNWS2xLeGl0UklKYXBWSzlVYUlsZHQyREkxbFZVQ2xlVVMrVVdqd1NCQzBXUjBzTGM3''@;'; put 'put ''R0FsMnRvZGhnb0FCcU0zcjhXb0I1SEl3ZVVPZWZsR0tCNCt5Ykl3eEkxcnhJK2Q5a0IveGdQUFFTWS96NU1pK294dlNQMGFYclo3TCt6ZEZvWE4zVHJiUnBKRDBFSTlIRDNiRmh4YXpSVmtoaVk2T1JDRThuVHZTTXRMc00vZUYydU04OXlISmNoL2lXSkdzYnc4N0hRcWxJZ3FtaUpnM1JSUnBN''@;'; put 'put ''MWJKT2xrUVRHa1ZuTmJWTEVaN2xXeGkyMmljVnJVTUNoQUxBREF2cHozUHpVS3NrMHFrZGN1WDFvdHFaZUdOdmZDcGkzVkx0cFgwb0lZUU9sU21veW9mSTR1anVKbXJaOVFab0hpUGFsa05wc29jUGxLaWxpV1BEWlJML25BdHRtdExiS2x1emZRMXd5WDVJSzRXd2MxdExKN3JRR2xvZ3RQV1Zh''@;'; put 'put ''ak1jMHBiWHloNmZsNXVqOFdqeGUzUDVNYzVmQmw3dnY0S3ZOM0R4bm1Wai85aDNqNEQwTE1YUFQ5cTR1My9EN3o5WHpiK3Ezejh2K1RQLzVtK3NmRjUrOE1Qb1h5OVhJSjhCN1NuSU5xZE5PcVlxN3FobnQxcVlUSWFLdkJFNXNrNkd1cVUvZm42RGRtMzlxU0pwcitCTkZ3dGZneFdiV05qWTdD''@;'; put 'put ''eHplZnhlV2xOZ2l6a1pQbG05VkdsZ2QyRmtiQ0ttNE1uK0I4WGt5Y20weWVIK2k1UEhSeHAyWGVEZlUvY1B0WGlPR2dmdDgyMEJXWmpuYk50d1cwUlV2V0Y1Ym1iSjFMWFppYmVuOXcyT3hjZmFHNDJORFhaMndZY2F6OXEzNUdJTG5TR0YyS0p4UTVhMjhiaW41UjNiZU84YTdFQTkzRUd4emtP''@;'; put 'put ''M3h2TFBhZm45MWpSOC9OeWV5eGVXOXorSy9ubjFidUxuNS9KajMvNGZad0hwdEMxcEliNG1JL1FqaTdqOTNEUTVBL21oa0lLRVNzVnlvTXFPWGh2bzZFOUYwSXE1ckJhTGJSVEtoV0xRRVBLWmRaaFpsZlN3cXhEdTY0T2hKM3NZRlJUYTcwNG1RQ014T0ppTm15VXJQVFhhZG5kOStReXRoZGs4''@;'; put 'put ''M3c4L1ZTaGVrM0l4MTZ0WU1XMjVQVTRFMmhrZmwrZHpWb0p1cGQ2Z3g0SEh3bEZIeFhyY2VWNmxlMVFSbyt6YmFuSEZjZjFMcTdIMmNycGNSY2NndWx4VHFlenhkbnNOZmdORy9TNFlqV09hbkVLcTVFcmNSYUs1WDRCNUlqTE8zbmorT3hJdzhLd3l3ZWNhR2FzY1NHVnU2bmxuWTQ0c0tKL1g0''@;'; put 'put ''ejQzd2tuOENmM1JpWk9wME91YWM5eUJCaFEySjE5SjQ1OUx1QkIzK2xhU2d4MzUvN2VDZmpGNDB3VVQzZHkvRDNNOFc3amM0cS9mMXIwL0x6Y0hvc0hpdHVmeVk5eldNSmZIZ09oNCt5Vnh2bE1VYnliNThJTkp2dWtnSGY1WE1PaTJQT2xoSjMxZjNqWVdWZ3RtMGVZMzhjWmFSK3d2MTJveUZj''@;'; put 'put ''VHlmdHpqa2gyV3JGZHhQV2JPL1A2elpGTWNkL0w4bjRlamFURGx2WjlMcThEYWJaenZ1dFlueGRjekI5dG8vQ3J4U3BCcE5GVHJDUkNXc1FxUkEzWnc4eWVZSmNlWldTTjBvaW1yRmFyeldyejZQVjZzMU10MWdXVTNBdVg4UE5hUEs2c2RDWXFpZUJ5ZDNUMDFZL2s2L0pzemlaN28vN2Y3di9D''@;'; put 'put ''SnhxNk81dnJQOHRLOUJ3MmU2TVJqN0pDUFNuUGQ1NE1BbjBIVUFKZnpvbXVucXBvOVpocWFDSUpoelNDV2dTeVZBZEErMURKWkY2MmpiTFF4blRSY1M0OFJKNER0TUFhUlRVUlYrVTdHR3hnNHF2VjNHZHBaYUhjalhsd3dkSU9BRTZ0MUF1VmRqSzl0MW5lNHdTVWUramIydG9TYlhHZnh3ajZh''@;'; put 'put ''Yk96UXF5WGp6R2VpRzJsbjVyMTh0bjZpdEtSeVNBOVpZdStOQ1Y1OVFwKzRMK1NVNVBwc1Z0YnE4WTI1U2JUZkdXR0JaOHU1Q2hML29DUE12dkxKOWxmLzFGaXgvSDhYTW9meGlUKzhHZEZmVS9JZmJFYXZiQkYzL05TWDRMVlhPZmhOWStzcjEvcWUwc0pYZEZjM0IrUmM5Qm1uTFhSQ2w2aEdt''@;'; put 'put ''bWd6WE5DTlcwRWJTVGZFRkRzelVqTzN6MEdQS3NPUHZuN3N3WUYwYWpsc0x5UGlrK01CQ1ZhZ1lQUzVjdU5iUmthRWVLWHVHanp5VHF0VzdabWtvSjJZWkxEbXZkOVh1cjQ3MlZvaWtZR3U5M2VhbS94MDR3Rm4xc0tVN2xMVW56bEMzUFE1aXlWWTBNYjBsUWVmVFF6bFB0OWNhN0s1TnF6UmZt''@;'; put 'put ''Ky82c3ptVno3OGdidW12Y2JSdkord3lQb1dMbXpCdjMyenJ4K2UyUUJsZk01NGdyMDR5MzZ5cnF4QUcyK3p1c3FnVS9SV3RKNk5KNGMwWUhLb01mMGpnKzVBb1FTbjdpRVJGSHlubE9ScE0wd1pRbUkwNmlVdzQwbU42M0cwbE1TbEd0WTNUS2RXU1hXV2xUVU9zTnB5a0dKcmk3M2dsemh5dWlu''@;'; put 'put ''QStqTDI4RHJVbW1NOWlETGc2YTN4ZDJTTkxwZElDTnJNRkdxUUdNV1FkbWc1UkpPV2k2UFZLRElxUlFyTkJaYXNJYjRPV2ZrR3d0WWRwZFhic29BZ0ErVzYwRXprWFUrbjYvTkY2aDFHWHhldDV0WlR4czNwTnFjVk0waU42S2NXbjA2djBXMVdyc2h3VG9FTm5CTDlrSEp3TlhXU2JzMkdYRWgy''@;'; put 'put ''UnBzM1RZci9pN0x1QzdqZTFhWDhUMXZ0b3ZVa2wzRWFudVpqRzJWWk96TFpmeW9ORitheXRnMGw3RW5wYjY1dDJoZE1POExlS01sQnNrUENlMEZLNnBCSVNBSU1ha1BOaEcxV0d1bERpTjZWdzZhNEV3aFVFa0RNWUphc2FxUjlmQWFHajVRTGxlb2lGTEp3L25MUEp3dmNZWnd1UzRWV0tYUzg0''@;'; put 'put ''Nm90SnZwdmM3MG5pZWhqTUlSRGxQWGQzZ2czSitJYVVQYVVLREY3YXl2TXh1cEM3eTJTallRS0E1d204RDZIcE8xc2FQZTduTzROY1k2dS9FL0xpbHZlNGV2MFJadHR6Yjc3VWFEZmR1bEpuR0RMVXVMbi9TTTMvQzR3SkgxZTB0aUJ6K0VObFdNMzNCNzk4aG5rSlFITTQvZUJKNWhwRmtUYXRD''@;'; put 'put ''NGpEeS9ScjVXaDZkWGNUbnQwVnVjcklSTEZzeWdtOHFNNFUxS0d5WmRsak1ESmxlYnE4akRramJGOUNoWXhUeDZrY1g4blNpWjdEZWJpRUp3WW40TlVlR1VKVk5EbXlkZ2xoemlhQVFMM0tLdExwdVdiWlFYWktWbHhmS1M5a2s1QUROMGFVMFdhOGJMRjFmSUNWaXp3enJyMnpVaS9wKzFkNlNG''@;'; put 'put ''QXAzUXVQMURoVGdMOEZmTkpqOHJ5K05HOXhCbFB0OWFYNUp2bmNsa2FQSVlqTGNYNk80V2tMc3VvQzlHZC9pSDNHY0J6L1dNSHJQUzgwK3o1NnkrbStrWllVblAwSmJRT0lBRU53aC9CRzFtcERZV2RKYTNPU3UzNFhYaTUrUnhZUHk3bUU2QWkzUUNPczRJYXpNanRmbVRqVzE0ZlFqcEJ4eXBw''@;'; put 'put ''cG5GVlpVVkdqQkNCVFdSSytZM0ZaOVhvMnB6dnZoY2pGRWtTWmhGTStuUDljN1Baei95a1hRYW13T1pBSjdKL1hnOE0vNWJxZjZraHVYRU81SU5sUldpaWtwOHRWU1JyNU9LUzgzc3Nqb3Nna1VrRFlwcjVqSlRVNWs1ZkZscjdwdFk3OC80OFhMdW02MEZuZWtoQnNNT0NUNy9XUUpEN2dQNW51''@;'; put 'put ''UURvYnJhbzd3dm5NdEQ3THc2SkQ1SmVIdDRyaUI2dVQzQTZvV2l1VTdrWTF0cWRHNkx1YzduL1MzcUU2Z294aFRKeDVpT1NIb2gyU1FMeGhudGNwL0prY3RRdVZnWXJrSG5TMkx2bS93NXVPWmFidE9BR1NoOEg4N1VnQnBvemtQK1pnczF5Vjl0b2FFbC9ISnVIVE5VRzR6MUZoUEwrK1VLZ3Ew''@;'; put 'put ''UVk1ZFpJUTJ6RjlTcENGY1IxbDdlOThYOSs3KzREM0RBT0R0NU9wTStuZVpLd3VLZjdWdis0djcwMmorVHB1bGJNNW5yVWtqeXB3aEFHY0FsT2xBWDJwYk1XckZhUlYzZ1RKc0JWcTlVSzFhcU5FU2xrdjBWbFdLRlVPU3g2T3gwdVJEcTdPcE14S0t1RGxkN2F6T001VEI0ZkI1dk5TeDZvK083''@;'; put 'put ''d01NTHd0K3hpWmtqcmdZSWJYS0ZsZHQ3L2VnNFM0MGZ2YzdyT2praUtRTzVxNHRTNVBIMUcydXYrbnJIZWRMOFdFL3ZLRlVMaXJQbTgvVllrbjV3a0oxclRNTGRyNVhnQk0rSHB1ZTZ3UDJkODFKZndOR0RESGRqRW82K3lOdm4zcUw1MDFKNytyeXBhSzRUOGx5QXV4OHVPOWNWREhjWE9PN1c4''@;'; put 'put ''N2xZblQxYloxeGE1MzBsZU0vem9lazZkL0IxSGtOU0RtT1MxZWdQMC95S1dMU3BVYUVVN1RUcnBrNEhhb2VXNVZmVWI1bGZJWXJNTlc3SmV3RXVKYi9pb3AzSzVsZGNwTmVXK1JXbC9hVDhDbSt3bWVaWEdGaCtCZmZKbDArdzhGM0tiUVFrSEZtWjBKWkx0dmpvWlJlOG8rQ1Bkc1lGOSthc2k4''@;'; put 'put ''b0RGNzYxZ0o5ZGNEM0pjdHdIVVM3WjFJRkZWV2RUbzZBVU42YkhLQytRSGlQQnh2YUhISi90RHpvKzJ4OTRmTGFTNC9NRW1pOHRQUVpmTkprZnYzaGdxbXllVEhpZmIrc1UvK3lDc2lSYlJ1bHZ1a0RTZjRGV1Q4aTBDblIrZUF0YVBTL1RLbGJIOHVmTjdxaHdvaGVTT2xyaGpxelZJQm1xNkNX''@;'; put 'put ''Z1V1NGZERUF6eTY5bTBWNXlpdm81cFVRdGpab3daWTRRdkIvRXVSM0xSOVZHdXlpUWNOTWw5VW0yYkdwTzd4a2crRkJKTHdXOUpGc1A2M1lpS3FSb0dxR1JtckxzR3MyeUowWGRBL1IyRGJ4Z0xITVk5ZFgweW8zUUpvaW44bGR3c0hxS0pLdW5DS05Ya3JZV3JCWmF6VVNqRHBvSTBlUWprOHEw''@;'; put 'put ''VEFsS2hmSzJDa3pyVnpWWGd6QURNTlA2VVVGUUxLbDRGV2xKZERGWTZLUFdrSnN1MWluWldyNjlGR0VzNmlaUVdGRWJNSXpDck1yREN0Q2lMcE10UW91NHRQVER5a2dBdDVYaWNIZWhIc1JiNzlXVlJoTEY4V2h4a1VqQ292YnlHQ0s3RTRYaGFrTEMxV3RLY0pYV3NQeWE2YTJMWEc4bHZTVzZM''@;'; put 'put ''YytwaU9SektvNmd6NVhxMGN6UGYyZmV6MzlrdWpqMzR4djVuSTFLOUZwSlBnYnJ5K0w1TEtZQWJXNHRseE1DZXRtalpmc0dDbkVLWExNWFNmZTV6TFA3WER5b045bGxCdDVVRFNjTC9CUUxhZW1HTFBsK2VCWkNLQmhJME1QanFYVjdQUHkrTEpaQnNjbHBzK242Ri9LcHlkdm10ZWE4WjhOeTJR''@;'; put 'put ''ZWtlMkRJRSt6V0YxMkQ1TXh3TmxqdWZWL3hwVEJTelNtc2RRNXNJQzk2bXpzSWFqUmdQS294RnJ5NDZMWkc2YW15OE5SVXB1M21abm52ZHIxVWtFUnJlYlp5YUR1a050VEhuQy82S2VQRHZ2QllGeCtHU29BS0R5M1liR2IxVUJ0ZDFCc0xpUXEyTVpuakR1bml1cUpNa2FIY1dqV3h1Y0lvYjQ0''@;'; put 'put ''eVhLZDM1VEI2Nk9INVEzaXhCSTk1UFJIbDNic1pMb3JvSjBVNVF5ZmtuQ0Y0L3BHU3Zqd1dkRjZPQldGeFB5cnF1eWVmYjNRWTNWYUN4K3dPRzRici9aSU8rRlRKK0x5R2grTDZFdGNCcjBkRmZmZklmY0hPL3RzdCtwNlIrbEpmNStlSytwN0k5MVdqVTF2MFBTL1BpOVhEREc5WmJUaTEzYlhV''@;'; put 'put ''NTBHckRHamRGZk41c0NJbXNwOGFGWFpHVkZwVVUrNzZONVZiS0tyNC90TG1NbStwSG1DR25ML0UrMnlzOUQ2YkI4Y085OHhrdThuNU8zZnNLRDlHdnM2TXdFa1FjbEtxTXBQR1NFUkU5MkIzZHFibjhCZzV2MlBIbmRJWTAvZ2dlUTZzY3FuS29vTFFPb3MwbUZQVXoxRmFGMUNOcXJ4Q3ZzcEMy''@;'; put 'put ''alN6bHg2WmFneWJZblYxTVZPNFlhcUZURGZDbnhZTC9OSEU1bGxBbjJPK0hSK2I1NEkxQjVzck9IYVhWR3RJTlNMVHVGcXdzeHFSTGpacWtENEhEVzFWaVFWZ0hZdjU0bWJoa2lwRmlyL2o0c2ErdmtBQWZtcmQ3bHI2UTZiNTM0RytOdjZnMXMxckgrWXhKWDA5Nm1FckNOZkFaclFVWTlKS1Z1''@;'; put 'put ''SEJLclVBcG91TUd3djBreGxlL2VheEtLUnFFZWs3R1lxYzZEZjJOVm42ODQ3eng1Z1h5aWk1ek5tNURaRisvRUh5RmRqNU1KczNBYklBYTVodnpvVHhoQm9MckU0TnpuS1YzZXkwS0YvOFFvUVpwcTFhUUpRckplUkE5SXNUQ2xsZCtib0VYTjFrMDF1cVRiV3FrRzdXWFBRN0dUUVl0VFVPai9n''@;'; put 'put ''QitaMmZ4eUIramRXNGlLaU9yVXFyQkl5Y29GYjNTYU1oWHh0akZkMWVxZGdGRC9HS2w1cy9iampOYUc5YjdxMzFwOVlmUnpYSXcwYXcxWlNwdVBQa3h4STNmam5CNDl5ZldsdHY5NzNML2FUTVo1cm5rVGZJUEJLbGNIUUxIdms5bVVlaUZIcXVpTDhXK2g0Rm0vbGlmWS9pMGFLK2UvSjlEK1Ba''@;'; put 'put ''RWg3Sis1N0o5ejBNZkk3WjN1dmJhYnltT05iejdqclhZZDVkbDNTWWRwQ3hIbWEzVDBodHZ2NXVqc2YxM3MxSmJYZzhZVFUvVGpVNnRFVTg0U3Y1ZUVMMU5DcWJVNXBDSDk5Q1Bud3ZueXVRV3BIdXZFZHZFZzJPWFB6N0lMNmZDK1BJdU54SDZMbUVQZ0o1TnlmM0djZGZSdWZJQTRBem5VOEJ1''@;'; put 'put ''a3hrbnJRVWY1R0tiZE1YcWZES3gxMVBjeXd5eWc1OExxaWZwMTl2MFZSTHY5NkMzRTYvMzhMczROOXZRWDEwK0t2b0pmSWdRRUVMVUVueE9rYVN5dGN4d2pyd2JXd2REYWpuNllZYUlpK2xtbDErdzc3cmh5M0d1S0dVVFdEc2I5ZFpUNjNId0c1YzI3Z2k2NVlMZkd1THRkYVhyaHZmU1I3VStm''@;'; put 'put ''bTYyZnEvQ2VzMzVOZFBVVXJlQ0FZcy9CS2V4QSs4dDlxd0I4YkhPenJHeGpxK3hOODZ4am4rVEFKZWphTDlnQnRnYytuYzhQcE5odU42VEM5SkUrbDNMQ2tPRkgzSDBpREt3R3h2OHZ5dURpMVcxdkN2UUZKalZSV3VxRlJWRkg5dGtySGFJRlJXQ3N0NmpVNVVGSC9iVXV3aUhkazNKL0hlSXUw''@;'; put 'put ''dFNOKzUxRjIyWDVsdlhTcnBDNHBmZkdvcW1aUy9mV2xxY1dySDNHd3lrMHlQamJRUHRnOTB4Y3QrRTVQcEQvZ21Kc2VtdnoxRmJSM3g5L3d0VFhpaTZJL2NXZms3bSs1L3oxL2VWUGFMbkFwZjZFVHZYWXppQ3VDZFNxUjZDclRyOXNBZ3RnTHNmQStrN3I0NzljNDNkRTgvcTVmdXZJeGl2ZHhP''@;'; put 'put ''WU8zOENhc1loRllQUERENjdOTzZiN3pDWk1VYjByM1RZVFNUbktxM0V3Vzl2YUlTMDI4dVVJQUFKQXBoUllOSkJjYVZ0TDRsWDlCVWhTc3JaWmNOczIxRGJZSFdGcjNCQ3phcjN1aXRCdnUyY0krV0h3eGFhaHZCMndBcFZOVFNqRUQ2ZlZGTzVnN0czK2JYVW1jK3ZHSmR5aExsdGtOMUIyK2Jr''@;'; put 'put ''T3FZcGova3dvbmNHWldBNTNJdk9qNHkxOGV1cWs0ZUgwL1ZhZTJPMVBDUlhsYkV0RGlXcW04eW0xTFp5L2ozL09BV1VvTlBBQjlVUFFWS1hUdmpldnltL3hPc1dKa3FPcURxQ01DVm5Yb25FZGJXNkE4cTNMdkc3d3hSUDJNelZpdEplNWw3ek43akhSenZITmp5Q2c0cHY0VFpxN2hkaXBXY3pl''@;'; put 'put ''ZWRCR2lzbVQwdnhKcjU4L1A1NStMTnhjL1B5TS9SNGV1S254ZkdUNkVQRlQyL005Lyt5Qlh5dlNuejVBYUFBWTE5cUo5cGNSc3h3S0RFSEpNaFViREZmSnRoY2dPM3pZb0JJOWxtLzEwRUg4bE8yMUVFSXNsRXU2YzB0NDZ0bWZvRitGNXdKYnEvYUM5ZnljT2srbUQrYmhQMGVYWjNrNHdMRWIx''@;'; put 'put ''N1hycXVpWDYrdmgwK1Y1WitybHliUWY4UDJ6K2Mwd0FCQUFBQUFRQUEzNXZtaGw4UFBQVUFId1BvQUFBQUFOUEJuWVlBQUFBQTFMNm05ZjlSL3UwRVlRUEZBQUFBQ0FBQ0FBQUFBQUFBZU5wallHUmdZRDc2N3lZREE4dkUvNEgvVzFnU0dZQWl5SURSRUFDbElBYWhBQUFBZU5wMWxEOU1VMUVV''@;'; put 'put ''eHI5elhnZWlnOEhCUVNzYURWUXRmNldCS21odEpLTFNwaTNQb0RGYXc4QmswQWdKTGtZUzQ4UkFRdUtpQXlRZERIRXpjWEZ3Y3REQlJDWUhuUWhMYllpU3lBVFI1M2N1TFdKYjJuejV0ZS9kKys0NTMvM2VsWFhjQmorU3BvNVJqZkJsSG9OYVFFVEgwTzZGMGFIek9Ja1NCbVVNNTZsMmVZNCt6''@;'; put 'put ''ZUdpTkNBdGs0ampONjdJUXJDbXI5RW5vemlvYVhUcFZaelErOVIxeE1sK3ZjRTVlY1RzdHh2UHVSelRhODhoVTdLSlE5NER0T292SE5WWHlPc2l4MjZRazhqb0tQV2QvejhqZzFYK0RuT05aN2lsVVF4NEk4aDdTa1Y0L3lreWpqTWN3enAxQ20xYXdvZzlNM1FHemZvV0xicUEvVHFOczNJUE9k''@;'; put 'put ''YThTWFpKQ1QyYURmN0lKU1QwSEU3clkvamFoRTZ5UjMxMHloM09mY1RuWnBIR01oSllEajdvRVF4aEJTbHZHaW03cmcvZGVOL215Qk42dUlZMm1lQzhMTzkzczdja2ptdUV2ZVhRcE1veE00aktBWXlUN2ZLT3ZqWmkySzE1bDU2d1JubkJXdmFnVmQ0ZzRlb2FSd1EvTUNCeGR6MUd2N2E4cXFN''@;'; put 'put ''UVNQUFB2TnNockFhZnpEL3lKMVgwOXVKVXhidHE2V0VNTzVwL08yWCswV2U5Z0d2T3F6cnlQcExXaS8rL3pEZjZOMFNXcUJYVzFML3RYYlVzRjhhczgvZWZ6RC96MldqOTJwclZ0TjV0L1FvdFI5d1g2MWZudUtmbWg5VzBHeTFydHQ5bDBxdHZyUGNMdll1U0FYblorbkFaWkE0c2g1YUZiVEl2''@;'; put 'put ''MG8xbTg5YjZxNkg1eXQ0cUREVWdGZ3B6WGViV3NsTkRlK2VZcHhwT2xUTldvZTJQZWJRTDdSMXdPYlE5TlAvSzc0TGxzWnEyVnpMTDdKa0t6UHhYTWtVbHFQZEk2ajVlUTVDclBMT2FOWjZXMTVSMXdDdHVuVGZZb0Y0Q21rVGNtMENjWjhLZ08xT1d5Q1d5Z0pzNnk3T0M1MUpvRGgzU2l4YXFU''@;'; put 'put ''UmVEb3N1SHg3bmMxenBmSC81ZjdSendwQUFBZU5wTndsOUlHbkVBQUdBei81U2VwNlhwZWQ2ZHQvTThyN3ZUenArLzAyTU0yVU5FaU1Ud29jZUlJUkU5UkE4aEVURmloRWhFUkE4UkVqNkVqQkVTTVlhSVJJeUlpT0ZEaE1RSWtSRXloZ3pwUVNTa2g3M3NZWHlmUnFOWi9xZWdPUm5BQnRhMHF2''@;'; put 'put ''WkUrNkI5SG5RT1hnNjJkVGFkb0V2cTBycVNycVpIOUV2Nmd2NlBZY2F3WW1nYms4YWNNVzg4TTlhTjdhSDRjSGE0YkVKTUtkTzJxV3BxbWFGNTNwd3hmemJYelYyRVJxYVFYZVRHd2xuU2xxcmxBYldoVVRTTjdxTVZ0R1UxV0FscjNEcHYvV0E5dE1WdGR5UFlTR25rWlRRNTJyZEg3UXYyTC9h''@;'; put 'put ''bXZldklPSnBqM0ZqVk9lTThkblpkSWRlQnEreHFZVFlzZ1dXd0M2enVKdHlTZTg1OTR1N2hVWHdWMzhRTGVBWC81VUU4SzU0Tno1Mm41ZWtSUXdST1NFU2N5SklwTWsxbXlCeVpKMHZrQlhsTFBsSWg2aTJWb3RKVWhzcFJlYXJpelhuejNwTDN3bnZyZmFScGVwWGVwSGZvUTdwSW45SG5yOTR4''@;'; put 'put ''REJOaVhqTlRUSXFaWTVhWURQT1I2Zm0wUHRTSCt6Z2Y4TVY5Uit4N2RwbGRaN1BzUGx0Z2UzNnQzK0duL2NBZjkrOXdlOXd4ZDhwOTQycGNrM3ZpbmdQRlFEbHdHYWdIZnZJeS81Vy81dS80RnYvRXY0dzN4anZqZlVFV3RvUURvU1JVaEN2aFh2Z3Q5RVZFZkNNdWlHdmlscmduSG9tbllsV3Np''@;'; put 'put ''VC9FdHRpVEpxVXI2VjU2bERwU1A0Z0VzYUFRaklZY29jNkVaZ0taT0pJbjVWbDVVVjZYcy9LaFhKVEw4bVVZQzlmQ3pYQTcvQUtHQUE0a29JSUVtQVdMWUJWOEFqZWdIYUVpMDVIdHlEVzBRUURuNEFyY2dMc3dEMHV3QXIvREJ1ekF2b0lvMkgrQWtsUTJsVDJsb1hTamVGU0lDakU2Qm1QVHNY''@;'; put 'put ''THNPbFpYVVJWWE9SV29jVFdoenFwRjlVdzlWMnRxNHk5TU04bWdBQUFCQUFBQlBBQmdBQW9BUUFBRUFBSUFLQUE1QUlzQUFBQ0RBYlVBQXdBQmVOcU5rczFPd2xBUWhjOXQwWUFhNDhLNFlHRzZNTzZFZ2dRaUxqVnNGRFFTd1MwSUFwRmFMY1hFclUvaTF2Y3d4cDhYMEkyUDRETjRlanRVSlkw''@;'; put 'put ''eE4rVitkODZabWQ0cEFKYndDQk1xa1FLd3l5ZGtoV1dlUWphd2lCTmhFMldjQ1Nld2hqdmhHYVR4SUR6TCtJZHdFbmxsQ0tlUVZnWGhlUlJVVFhnQkRYVXIvSVFWOVNiOERGdDlDcjhnYWF3S3YyTE9XQS81M1VUYXNMRURGNWU0Z1ljQmV1akRoNFY3UG5uWXlLRklhbE8xNk90cno0aGM1KzR3''@;'; put 'put ''YThUY0MyUlFSWmQ1bnE3a1lxaGRSNHoxTU9hcFJTVkhsNjNYTm82eGh5WnFwTGk4amFuTU9JODE1V253NURFKzBPOWovZWoybnc0TlJrL3Bjc25CVFE5WW84czl5TzFRYTVFUHFRZmFQdmZPSDdNSTV1ZnpWRWFXNi9wWFpWZlhkYUtxR1dvdXo1T2NrV1QxcVBxTWpqbjVpU2ZMZmRMVDBUZjk3''@;'; put 'put ''cG1OdldXVHNUYi9iNEhEajJaU2xRbFZ0R3B4RmJWV1l1OGN0dmk3aVVMMDlVczRwNitycTNveTNVcFVzWTRydnVPQWlrZlA4QXZjdlhoekFBQUFlTnB0azFkc0hGVVVoci9mc1hmZE5rN3Z2VmZIWHZmRUtTNXJ4N0ZqSnk1eDdNUkp4cnRqWi9GNkY4YTdjV3k2QkFJZVFQRENNK1VKRUwwS0pI''@;'; put 'put ''aEFvbGZSZXdmUmVhUUg3OXdKWGlUdXczei9HWjN6bnpQMzNpRUxkNTBiWUI3L3MxU2JmcERGRExMSndZZWZYUExJcDRCQ0FzeWtpRm5NWmc1enArcm5zNENGTEdJeFMxaktNcGF6Z3BXc1lqVnJXTXM2MXJPQmpXeGlNMXZZeWphMlU4d09TaWdsU0JubFZGQkpGZFhVc0pOZDFMS2JQZXhsSDNY''@;'; put 'put ''VTAwQWpJWnBvWmo4dEhLQ1ZOZzdTVGdlSE9Fd25YWFRUd3hGNk9Vb2YvUnpqT0FPYzRDU25zTGlkcTdpYW03bUJPM2lmNjdtV3AvbVlPN21OdTNtZVo3bUhRY0xjU0lRWHNYbU9GM2lWbDNpWlYvaVdJZDdnTlY3blhvYjVoWnQ0bXpkNWk5Tjh6NDljeHdWRUdXR1VHSEZ1SWNGRlhJakRHQ21T''@;'; put 'put ''bkdHYzd6akxKQk5jektWY3dtUGN5dVZjeGhWY3lRLzh4T1BLMGd4bEswYysrZm1MdnprbmxLczg1VXNxVUtFQ21xa2l6ZEpzemVGWGZ0TmN6ZE44TGRCQ0xlSjMzdEZpTGRGU0xkTnlyZUJ6dnRCS3JkSnFyZEZhcmRONmJkQkdiZUkrN3RkbWJkRldiZE4yRld1SFN2aURQL21TcjFTcW9NcFVy''@;'; put 'put ''Z3BWcWtyVnF0Rk83Vkt0ZG11UDltb2ZUNmhPOVdwUUkxL3pqVUs4eTJkOHdJZDh4S2U4eHlkcVVyUDJxMFVIMUtvMkhWUzdPblJJaDlXcExuV3JSMGZVeXdNOHlDTTh5a004ekRYY3BhTTh3NU04cFQ1K1ZyK082YmdHZEVJbmRVcVdCaFZXUkxhRy9IV2pWdGhKeFAyV29hOXUwTEhQMkQ3TGhi''@;'; put 'put ''OHVNWnlJMnlOK3k5RFhHTGJTU1JHRHhxa0tLK2tQZVJhMllYNG9ra2hhNGJBZFQrYmIvMHAveUxPeVBhdVE4YkJkRkRhSEU2T2psa2t0SE00SS9DMmVlOVJqaStjVE5TeHN6YXdjeVFoOGJWWTRsYlI5TVlNMjB5OW0wRzVleGwwVXRtZDZ4RE05MmsxNjNJVy93NXNoWVJqb09KMktEMXRPYWpS''@;'; put 'put ''bXBaS0JSR2JrNnpRZEhOT2hNN09EazltaDAzUndETHBNMVpnTGZ5b2VMU210REhvczgzV2JwS1NacHNlYkptV1kwK05FNDhNNXFmUXowUE9meVZLWmtiL0gyOEdVWVVGdk9PcUVVNk5ETWZ0c3dYaUc3c3ZRRTlQYTEyOW1uSFNSM3o5OTJwUFRwNTJlT0ZoVzViSXNXT25ySFhhc3FXczFidEJy''@;'; put 'put ''SE1aZDVQVkdvclpqajBYSDhzYlBxM1JkYWFpKzJtT054d2FQamI0K1l6VGhJdjAyV0ZJUzlGam1zZHhqaGNkS3cyQlRkaWpsSk55Z29xa2h4eXEyWXNsOHk1M0ZTUGZ1cDJXUk5mM1o2VGhnblIvUUpMcmQwN0xBKzMyTU52dWExbmxXK2pSTWNqSWFpN2pKdWRiWTFCNUZiQ2N2WW52cUg3ZGx0''@;'; put 'put ''eUVBQUFCNDJtUHczc0Z3SWloaUl5TmpYK1FHeHAwY0RCd015UVViR2RpZE5ra3lNbWlCR0p0NU9CZzVJQ3d4TmpDTHcya1hzd01ESXdNbmtNM3B0SXNCeW1abWNObW93dGdSR0xIQm9TTmlJM09LeTBZMUVHOFhSd01ESTR0RFIzSklCRWhKSkJCczV1Tmc1Tkhhd2ZpL2RRTkw3MFltQnBmTnJD''@;'; put 'put ''bHNEQzR1QVA0Y0pXQUFBQUFBQVZpWTluWUFBQT09KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODti''@;'; put 'put ''YXNlNjQsZDA5R1JnQUJBQUFBQUZYd0FCTUFBQUFBb09BQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmS1RiTEVkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY2ZBQUFPZGoraGZYUkhVMVZDQUFBSk5BQUFBQ0FBQUFB''@;'; put 'put ''Z1JIWk1kVTlUTHpJQUFBbFVBQUFBVGdBQUFHQm9xYTMrWTIxaGNBQUFDYVFBQUFKc0FBQURubmRERDdGamRuUWdBQUFNRUFBQUFEQUFBQUE4RWQ4QnkyWndaMjBBQUF4QUFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FBQUVud0FBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNoQUFBT0RrQUFHMDhzTkd5''@;'; put 'put ''TldobFlXUUFBRXJBQUFBQU5nQUFBRFlMYTRZSGFHaGxZUUFBU3ZnQUFBQWhBQUFBSkFlRUJDQm9iWFI0QUFCTEhBQUFBb3NBQUFUYXNuZzVQbXh2WTJFQUFFMm9BQUFDYndBQUFucHlWVmZhYldGNGNBQUFVQmdBQUFBZ0FBQUFJQUtSQWg1dVlXMWxBQUJRT0FBQUFZVUFBQU5rTCthR1NuQnZj''@;'; put 'put ''M1FBQUZIQUFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZXUUFBQUNCQUFBQWpSbFFBaEIzWldKbUFBQlY2QUFBQUFZQUFBQUc5RzFZbUFBQUFBRUFBQUFBMUNTWXVnQUFBQURUd1oyR0FBQUFBTlMrcE90NDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUlnUkMwVFFDTFI2Y2RG''@;'; put 'put ''UmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY0xiRlZWRmwzN2ZPNXIzd01zcFh5RVVna2hVQWhXaGpDaUNLTnhtbHBJUnhtc0JBMFlOWTRma005VVpLYkd5R2NVelVqcXhKR0taRUxRTXRwZ0JVVEZxa2hlQ1A2SUlmZ0pFaXdFSzJM''@;'; put 'put ''OUFTb2FJOHAxM1gwZmNFdjdadXhLVjNmM09mZmNzL2RlNSszeklBRFNHSW9wa01xcW1sb1V3TkdETUlUbEg0R0JuZk9YdW5rb21YdGozUnlVenAwemR3NW5nLzVvTko0UnNlVnphZlJER1lhcngySVlhbXhMUEJvczBGVWxhRURBaDZUblFqNHhVSDBlSmFjaHFBb2J5QjRUc1FLL0lKU0JNTndH''@;'; put 'put ''NThrQWFVTUdQYml6STJFMmJBNzNodnVSNXlmOEp1L0k3bTY5bjJCQXAvOC9DLytkZDRXT3ZDTnRlVWYyaHRrOEk4M2h3WEJyaExPZjRPL09DRjEyaXZEenNJRlpNaGpDVEE5bnRrWVFCaFdFeFFXRXcxakM0L2RFZ1BGRUNoY1RCWmhBRkRLM0UxbXBSWVJnS2U3bnpBY0l6NHl2b1A5RlF2QVNJ''@;'; put 'put ''WGlaTUhpWGNIaWZjTmhQZUh4Q0JQaVVDUEFaRWVBb2tjSTNSQW9uaUVKVzd4ZXVGaEpwS1pJaUZFcXhGSk5McElROGtKVk5jKzB4Vk1rd1BqT0tFTjEzdkdPak83YTZZNmM3OXFna0NsQkZGS0thU0dNYWtjRjgzTVVWb2tnQ2pTVFFTRHdleGtyT2J5UUs4UmhXYy80VCtDL25QMDFrc0pGSVlS''@;'; put 'put ''TlJnT2VJRkRZVEJYaWVTT0VGb2dCYmlFSzBFb1hZUnFTUkpkTFlUcVN4ZzBqamRVTHdKaUdhblFBSGlBdytKdUs4R00yTDBidzR6WXZYdkhqTmk5TzhPTTJMay83U24vazZWODRsUnpueVhMV0NHUnJPR2xld3RtTlowL0hNekFSbVpENFc0SytvdzUxWXlGb3V4VEw4QS9jeEN3OHcrbzJNNkhs''@;'; put 'put ''VzhpVlc4RjFXYmo4cjlpa3JkWlE3T2FFbnE0anZMWW5PbDdsWHorRWJVc2U0ZTFKZlc2bTdodkQ3YnRTcUk5SDV5RHZ5SlhHc215ZVA1VDBiWCtiKzdndS9EZytFRDRVUG5UMlNPNUZOWWRQcC83NUlqSHl1enhpVXFpWkVOV0Z3RFdGeExlRndIZUV4a3dpb2lKV2NFNmxCVkExRzFXRFFRZ1RZ''@;'; put 'put ''UUFSYWFkRktpMVphdE5LaWRUVTRSRmdjSml3NkNJdWZDWStUUkNDOXBUZnIya2Y2a1B0S1gzSlVVZEdLaWd5U1FWemZZRFRPSVRMb1RmUlFwWXNxM2FqU2JVN3BWeEJKcFR1TkowakVrMUtsMjV6U3oyamNhVlJPbzBwcFZLZVVIbXM4VnZjclJINWRSOUU2MWF6SlJSZ3AxMnFjS2RXdlZmMmFY''@;'; put 'put ''TXlSaWswdThrakxKaEYvVXRGV3M1Q1NNWEl4M3g1OWVsVXh3bW1zMTdXTWF5WWphV1FrcS9BNG8za0NUNklKNnhqUjA0eGtBMDlqSzNlYjVTNTNjSGVIV0lNTzd1d2tkOUNIYit2UHR3emlpbVdxWjROZTJsR0t3NlcwaTluZkxxVWxhbC9LVHRRV2xKSGJtZi90c2x4V3lDT3lTdGJJT2xrdm0y''@;'; put 'put ''U0xiSlh0OHBic2tnOWtueHlVdy9LVmZDcy95a25qVE5vVW1YNm0xQXcxNWFiQ2pETVR6R1dteXRTWWFXYUd1ZDdjYkdhYkJXYVJ1Y2NzTXcrYUJ2T29XVzNXbXFkTWk5bHNXczAyczhQc05Mdk5IdE5tMmsySE9XS09tNThzYkdCNzJHSTd3SmJaWVhhVUhXTXZ0QlB0NWJiYVhtbHI3WFgyQm51''@;'; put 'put ''THZjUFcyYi9iZSsxOTlwLzJYN2JSL3NjK2FadnRCdnVDZmNWbTdSdjJIZnVlM1dzUDJFUDJDM3ZNL21CL2RzWVZ1RjZ1eEExMFE5eHdOOXFOZFJlNVA3aEtOOFZOZGRQZFRIZVR1ODNOY3d2ZDNXNkpXKzVXdUVmY0tyZkdyWFByM1NhM3hXMTEyOTFiYnBmN3dPMXpCOTFoOTVYNzF2M29UbnJu''@;'; put 'put ''MDc3STkvT2xmcWd2OXhWK25KL2dML05WdnNaUDh6UDg5ZjVtUDlzdjhJdjhQWDZaZjlBMytFZjlhci9XUCtWYi9HYmY2cmY1SFg2bjMrMzMrRGJmN2p2OEVYL2MveFFnQ0lJZVBCMzFaaU41aVhLbGNyVnlZOFJZck55c25tWEtLeE04VmJsQ2VaTHkzeUkyZzlXdVZhNVNIbUg0bVNybHloWEtr''@;'; put 'put ''eU5HdmZLejV0VlR0bHlpUEVuOTdjb24xRE5LdVVsNXBISkcrYzkyTnZrWjVmcnVtVlUvRTJPMStyc3dwaXR2Vmw1OGhtVldITHZhODVUZlZGN1psZU1NcU4yVmE1VkhtT3ovWTJvM21hdHNkNHlweWkzSzlXZVkyY3RxOXY0M3gvbk1kc3NqRTF5ZjJITW5PMUhUSmVvdlYzL1NydFFjUHFiMnJF''@;'; put 'put ''VG00eWc2MlRrVitiUDhqV3BQam0yZEUyc21yazRjZGF6UG5KM3pSM09hMVg3V0xqcWwzcHpHUGxUNy9jak8xVFRPV0t6dFdIdEpmMXpaT0cvdnFiMVlhL1NSNnZ4cm5UOVYzOVd1Yy9SRXhMcnQ1SzlRKzBTdWdodFBxenJwajAvUXBJUm00b29rN2VmVXZqWDI2M3c5RjJhdytwdlVIeXR0Wk1L''@;'; put 'put ''dVVzNm9KNTk5WE8yN05icXIxTjZqZG5MbDZuQUwrWHpsWktXU2I1eWNPOTNaMzhDZFp4cWNwL2RTOE41VnpxeEV0MVBIcmoyYVhUQzZZUWY0SFc5aUtZekRSZXhoVWVmdXhiNDlpVDA5NnR5OTlZNWFySjI3RC92T0ZQYWhHcUl2cm1LZjY4ZE9ONTNmZldZUXBkckxCN1ByeldMWG1zKzcyeEM5''@;'; put 'put ''dlkxblIxL0Q5ZGF5OC8xSmU5L1Y3SDZ2c2tPK2hsMjRsVGU2bzZqWFcrVXFmQ2NlajdNVEQwS0w5dFJXN2xma0hQMXVGa0RDV0lWTGNBdDVPYnRkaHQ5MXloamJLTjY5TCtTdUwrY3VyMFF0Ujk5VzdlNVZQcWlzWndhN0U2eVZ3RjNLNjVVLzFxejFWVHVEUC9JOXQrRjJTVW1CRkVwYU10SlRl''@;'; put 'put ''blhkMGE5OWw1OTBBQUFCQUFBQUNnQWNBQjRBQVVSR1RGUUFDQUFFQUFBQUFQLy9BQUFBQUFBQWVOcGpZR1p5Wi96Q3dNckF3dFRGRk1IQXdPQU5vUm5qR0VRWXpZQjhCallHT0dCblFBS2gzdUYrREE0TUNxcC9tS1gvR3pNd01KOWsxRkZnWUpnTWttTmlaVm9QcEJRWW1BRHdiUXExQUFCNDJy''@;'; put 'put ''V1RXVkNPVVJ6R2YvKzNmUkVxRlBYMjltblRScUlVUmZhbHlMNlVyTm15cjlrYTZ4QkRSVkxJbmlTakdSTlRVN1liN3JnMVk0eSt6NVZiN2d3ZHgxZE1NOHk0Y21iZWM5NXp6cHpubkhtZTN4OXdvZXNMUVhTUFZPcVpPT2V1VXF6SEpZekRqWUdVY0lzNjd0SklFODIwMENZZUVpQ0RKRXdHUzV3''@;'; put 'put ''a1NhcWtTNlpNbFJ6SmswSXBraElqMVhobHZIZUpNbyticmVZVDg0dmxiZ1Zhd1Zhb1piT2lyR0ZXdW5YZjVoLzVUU2w5aDhXTkh0cVBhZU9aK0VwL01jVW1zWklvS1pJbUdaSWwyWklyQmJKQk5tdnRsOFpiclgzSWJESGJ6YytXWVFWWVFWYUlVM3VvbGZaTFczMVVMOVJ6OVZTMXExYjFTRFdy''@;'; put 'put ''aDZwSk5hb0dWYS9xMURWVnEycFV0YXBTbGFwQ2xha3pxbFNkNkh6VG1kV1o5UDJUbzl4UjRNaDN4TmdIMnYzc1BuWXZ1NXZkNlBqYThibmo4SWVRZDhsZFh2Mm41bTU0TzVQZ2oxc0VvL3ZQK0lkRzEwa1hYSFYyN25qZ2lSZmUrT0JMTC96b1RSLzY0azhBZ2ZTalB3TUlJbGhuUEVpbkhvcEpt''@;'; put 'put ''RTRrSEJ1RGlTQ1NLS0tKWVFpeHhCRlBBb2tNWlJoSkRDZVpFWXdraFZSR2tVWTZveGxEQnBtTTFjeGtNWjRKVEdRU2s1bkNWS1l4blJsa2s4Tk1acEhMYk9Zd2wzbk1ad0VMV2NSaVRWb2UrU3lsZ0dVc1o0VisvdzUyc3B0aURuR2MwNVJUUmdYbk9VY2xWVlJ6a1JvdWNZWEwxSEtWNjl6VUZQ''@;'; put 'put ''MWs5RFlObXFWN21xYWZiUldydFIzUmJPQnN0emZyV2FQN1haejQ3VmJoWHh5OFFEMmJXZGxqWlMyYkpFYVBXOWpPTWV3NEpGenpHU2xSdWdJaXVLTjNIcUJwbGdSZEQvSGRaNHFjWWNTeWpiMXNaUjk3T01CQlhVdjdPY0pSdlhXWVVrNXhrdGU2bW5xeFRyekVXM3pZS0g2YWY4OGZrTTJxNkhq''@;'; put 'put ''YVkyREFBcEtCTUl3aGpHazlBd1BUYmlaV0JvYi9JY3pTLzQyWmR2Ly93blNKU2ZEL2wvOStJRDRBMnM4TnNuamFyVlpwZDlOR0ZKVzhaU01iV1doUlM4ZE1uS2JSeUtRVWdnRURRWXJ0UXJvNFd5dEJhYVU0U2ZjRnV0RjlYL0N2ZVhMYWMrZzNmbHJ2RzlrbWdZU2U5dFFmOU83TXV6TnZtM2xq''@;'; put 'put ''TXBRZ1k5MnZCRUlzM1RXR2xwY290M3JOcDFNV3pRVGh0bWl1KzVRcVJILzFHcjFHb3lFM3JIeWVqSUFNVHk2MkROUHdRdGNoVTVFSXR4MUtLYkVwNkY2ZE10UFhXak5tdjFkcFZDaFg4Zk9VTGdRcjEvMjh6RnROWDFDOWpxbUZ3QkpVWWxRS0FoRW43R2lUWmpEVkhnbWFZLzBjTSsvVmZRRnZt''@;'; put 'put ''cEdnL3JvZllrYXdycC9SUEtQNTBBcURJTERJdElOQWtsSDN0NExBb2JRUzJDZFRpT0JaMXF2N2xKVXU1YVNMT0FJeVE0Y3lTc0l2c1Jsbk4xekJHdmJZU2p6Z0wwaVZCcVZuODFCNm9pbWFNQkRQWlFzSWN0a1A2MWEwRXZneXlBZUNGbFo5NkN3T3JXM2ZvYXlpSHM5dUdha2tVemtNcFN1UmNl''@;'; put 'put ''bEdsTnJZSnJNQkE1U2RkYWhIQ1haMXdHdmN6UmdiZ25lZ2hUQmdTcmlvWGUxVnJaNEJ3NnU0cy9sdTd2dlUzbHIwSjd1WU5sendFSGNvS2swWmNWMTB2Z3lMYzByQ2dwTWRMMUVkR1MwbUpnWU9XRTVUV0dWWTkwUGJ2ZWlRMGdHMUJ2clRLTFlsODhGczNxRkJGYWRTRmRxTUZoMGFVaUFLUVll''@;'; put 'put ''OHE3d2NRTG9CRGZKb0JhTkJqQndheGpZak9pVUNHV2pBTGcxNW9XaUdnb2FRTklkRzFOS2FIMmMyRjRNcEd0eVN0eDBhVlV2TC90SnFNbW5sTVQrbTV3K3IyQmoyMXYxNGVCZ0ZqRndhdHZuTTRpUzc4U0grRE9KRDVpUXFrUzdVL1ppVGgyamRKdXJMWm1mekVzczYyRXIwdkFSWGdXY0NSRktE''@;'; put 'put ''L3pYTTdpM1ZBUVdNRFdOTUlsc2VHUmRicG1ucVdvMHBJelpTbFRXZmhxVXJLalNBdzljUHc2RXJRcGovYzNUVU5JWU0xMjJHOGVHY1RYZHM2empTTkk3WXhteUhKbFJzc3B4RW5sa2VVWEdhNVdNcXpyQjhYTVZabGtkVm5HTnBxYmlINVJNcTdtWDVwSXI3V0Q2alpDZnZsQXVSWVNtS1pON2dD''@;'; put 'put ''K0xRN0M3bFpGZDVNMUhhdTVUVFhlV3RSSGxNR1RSby80ZjRua0o4eCtDWFFId3M4NGlQNVhIRXgxSWlQcFpUaUk5bEFmR3huRVo4TEo5R2ZDeG5FQjlMcFVSWkgxTkh3ZXhvS0R4MndkT2x4TlZUZkZhTGloeWJITnpDRTdnQU5YRkFGV1ZVa3R3Ukg4bXdPUHE1Ym1uTlNUb3hHMmZOaVlxUFJz''@;'; put 'put ''WUJQcnM3TXcrclR5cHhXdnY3SEhobTVXRWp1SjM3R3VkNVkvSVBnMytMRjJVcFBtbE9jSENua0FCNHZML0R1QlZSeWFIVHFuaWs3TkQ4UDFGeGdodWduMEZOak1tQ0tJb2EzM3prOGtxeldaTTF0QW9mVHdRNks5ckJ2R2xPakNPbEpiU29TUm9CTFlPdVdkQTA2dlBzcldaUkNsRnVZcit6ZXlt''@;'; put 'put ''aW1PeEZHY3lBS1Nqa3ByR3c3TytrUkZwWU82bnA5TkhBNVViYWk1NHNOVnRXY1lXOUIrOWp5TTBzZVRkU1hyZ3BLZTFGbTFDbnZNZ0NEcm1SUGJnbWdsdG83N0tLWWtwWXFDSStDRzBGKysxalJDWXRNNE11Z1NKa2NiS3lEKzJLSFRtaWduWUMzM3JTS3UvYlF1M1BkZklnTUp1ZGJ1ZEJscEdp''@;'; put 'put ''ODEwVjlXcDlWZGJZS0ZldjNFMGZCOVBPc0xIbUYwVVpUeTU3MzU0VTdGZW5CTGtDUmxkMnYrNUo4Zlk3MXUxS1NUN2JGM1o1NG5WS0ZmSmZnQWREN3BUM0locEZrYk5ZcFJIUHIxdDRNa1U1S01aRmN4d1g5TkllN1lwVjM2TmQySGZ0bzFaY1ZsU3lIMlhRVlhUV2JzSTNQbDhJNmtBcUNscWtJ''@;'; put 'put ''bFo0T21RK201MmE4TEdVdUN4RjNMTmsxMFgwSFR3aEhlSy9PTVMxLyt2Y2NoVGNvc29TWFdqWENja0hiUjhyNkswbHU1T0hLa1puN2J4c1o2SWRTVGZvR29LZVNDNDQvbDdnTG84VjZSVHU4L01IekYvQmR1YjRHSjBHdnFyb0RNUVM1NjJDQklzcTN0Sk9wbDVRZklScENmQkYxVUt6QW5nSndH''@;'; put 'put ''VHdzbXFaZXFZT29HZVdtVk1CV0dFT2cxWG1NRmhqRG9OMXRZT3VkeG5vRlNCVG8xZlZqcG5NK1VESlhNQThrOUUxNW1sMG5Ya2F2Y1k4alc2d1RRL2dkYmJKNEEyMnlTQmttd3dpNWxRQk5wakRvTUVjQnB2TVliQ2wvWEtCdHJWZmpON1VmakY2Uy92RjZHM3RGNk4zdEYrTTN0VitNWHBQKzhY''@;'; put 'put ''b2ZlVDRYTGVBSCtnUlhRVDhNSUdYQUQvaXBPdlJBa1kzOFl5Mk9iY1N5SnlQTmNkc2N6N0I0dlBkWFQvVkk3M2lzd1R5aXM4VHlQVGIyS2ROK0NLQlRQZ3lnVXo0Q3R4eWQ3K3Y5VWpUdjBrZzA3OU5JTk8vdzhvMjRmc0VNdUdIQkRMaFIzQXZkUGY3U1k4MC9lY0VNdjJYQkRMOVY2eHNFMzVM''@;'; put 'put ''SUJOK1R5QVQ3cWlkdmt5cTgyZlZ0YWwzaTlKVDlkdWRkOWo1RzJVenVpd0FBQUFCQUFILy93QVBlTnExZlFsNFpGV1o2RG5uVnRXdExhblVucVN5MVo2bGt0cFNxZXlwN0V0bDZYUm43ZTRrdlNYcHBxRnA2SVZGUUJBYkJrVlJuSEVieFVFUUIxa2FCRnFVWlJ4R0JaNDlMaU1PT283b20zRkdI''@;'; put 'put ''YmZuRzBaMEpEZnZQK2ZjVzNXek5UamY5NkNUVk83OXovYWZmei8vZjRLTWFHRTlpVDh1ZUpDQUxNaUpTcEFmMWFBVWFrRWRhQWlWWkZ3OW5lMnQ2YVprYlRoUVdWcnNzaFlaTkFRWlkzVmFyOVVyT3BOT3Z6T1o4cWVTS1pIOUZPR2o4cFErb3ovcEczaVNVajdMTUt4Qk9wbkNINWYrRG5mODMr''@;'; put 'put ''NmVCM3A2SG5pZ3grZjE5dlQwSE9ueG5udmdpTTk3eFB2QUF3OTRqeHc1TnpEd3dNcEExZDhMUCt2MUJyM3c3NWFqdm9HQndFSDROT0J0Ny9FZHViN1pIZDExMVZXUFhIWFZydWlxTitxRmZ3Z1JOTHIrT3ZvV09jL1dGc3o0RU1ab0FTRlVtRVdFQ0VzYUxBaHVZVlNqMFZnMGhVRnJrVlowMTlt''@;'; put 'put ''VGd0OFZTalUySlJNdXAwUG5uemxUMHFjTmg4czhvWkNIbkpkOFA2d3VLdzJIUzh1cUVWcGZSMzM0WG53RGViREloNHdJRlFudy9TVkV4dzNBdHh0aFhBK3FSTU9aQVl1T0lLMUFNRUY0MllRTmhzSnNZVkdCSUlyNkJiT1I2UFhXckFZVFlpR2pDRlZXbEpkQkswOXBTYkVieHJkYmMvK0o1WFZZ''@;'; put 'put ''VElwKzBaOW1YK2trKzBxSzdFdWtML0dic1N2dEp5SzdJdStOVEVRdXR4K1BYV0cvQWo2OUY1NmNzUDNOZTJQdnhSZWV6ejRDLzJXZnp6NEsvMldmUjRDWjBQb0Ywa2JlUUJVb2lDS29QbE1icWZONVBhWEZicWZOWk5TTGhZaG9BVzFrQkphRkNUNEk2M09qMFVxclZRQnNCWFN3eDZsUU9PMXlw''@;'; put 'put ''eHB3cXJFVHAyR3ZYVzR4RkhaV1lDZUN4NFhZYVd0S05jSUQwbmJtc3FsM0hlakk3ajF5SkxtdmRlckt4ZGIrOFJOWFNaZEhFM1ZOdjg2MFpLNDRLV1o2aXZabGgydy9LcDNlbFp4cEZqczZ6YnRITzYzLzZKbWJ3dTRhNnd1R0ZyODAzMVpkM1dEOUpzeERpeUxydnlOcjVDbllYVHRnT29yYTBQ''@;'; put 'put ''L0tQbGE4YXk1VFo4SmFJOFk2TFY1Rk9xUTM2UFJIa1VhRGxnaW11MThBZXlBc21VVWlDQlpoMUpOOUxBeE5vcGRzZ2dDVXRST1h6RmdVM2VLb0o1UGNwZ1VoQUV1Ym9lMWJ6YzluUXJGWVZaWERnVkNzTGRiYTFGZ1ZyV3FvRGprcUhSV2x4WGFidFFnV1V4Z3FGSjExTm83UlpBSXc2U2pFZnB6''@;'; put 'put ''RWZvWkt2MC9uZExpU2FOUDdUcHgvOTZtUm10cVJXQXkrWjZQNHZidWs4TVRwUkRJVWppZERlTzlJTFR6a3I2cmo5R0VpalBjMWpFZmp1eG9hSm1MeGlYbzh0VGFKLzdJakd1M3NpRFYwU3Z2cUorSlIrZzRnNnJ2cDQ4NkdhQ2VpdEJOY2Y1M2NRTDZBdktnZU5hSE9URnM4R3E2cUtQZVVtSWhS''@;'; put 'put ''SUY2TUJESkNhUnN2QWV1NXNscGdPSVlab0tDR0JwK3ZvYWtoNWF2M1JTSituZWlxMDRiQ09yK1BMcW9wclY0YXZITTNwZDA2MFkzbzJ0eDhuYlkwZ05PbGtxQXZzZTkwMTNKTGRxSzhOTHFuTVRaUlB6RTkxRmRYT1JHTm5aVCtNbGxjMnROVTczY01YTkd4T3BvMitocm5ZblB0dlFmOE5mMmho''@;'; put 'put ''bXdra3Exdkh3M3NHZWlhREN6M25TSWowWEJwMmxzYUR3Y1NhNjkxWHoyY21tektJSVFwbjZNbnlZUElqT3laSWlwRjJQYmlVV2VBd01SdGVYa2grcWV0WHJmYmE3WEU4SDhzZTkwK245dTdQSXhvSDYzck03aVBQSXNLa082SkFpMk8xVEV4azNZRGc4Q2l4QWV2dkhLMWNXclg1SjdHMlIvZDhx''@;'; put 'put ''N1g5alJOUDNYcTFGTlRhZGEyRnRvMkttMUZhTXVSRUU1ei9OVHVtWVIycTlERHFlbW5yajcxNUV6VG50ZmVkY3VQOXJDMktYd0NIeURQbzRPb09aUGFPekhVVkYzaDF1bGhFU01DeGhxTXRCaXQ2ckJXUzVhQWVGMWFFRUlBZW1EUDdzNzJXSVBQV3lkU1NvU1pwcHZTT2hIKzkvdkMvRGZnOVFZ''@;'; put 'put ''Y0R2SGZrZ20zQy81bnYzRlVBQ3hBTlBGWDdOZENEQnRaZ2ZsdnRKc3d0SGU1bVpoOTNtclVFYnVqMnFyVFdRMGFjM0dEd1cwMnV3ME54V2FOc1VpanQxWTc3RVJudEpvTEtKelJaZ2c1R1dBQkE3U1dhcUtPQWdib0RCbHNSZ3BaZ0U5WVRLVUpuN25BN2pNS0Z0RmdFUXN0R3IxV3E5ZFlDdlVX''@;'; put 'put ''dlZpa01mcnNCV1pmb3RSazRaQmlrZWd6QXlpOFphQ2lBVnZOSE5Uc2c1Y2NsdUcwR3kwVEIybEdKaFRLK0pGR3dKcHBvRzJRRkZoQXk4RCtlQUVCYXNlWTRDN1NpYVYxMkU4MVlJcHF3aVJ4UEx2L21XZjJQNHU5eno0Ny8venp0TCtCOVd2UXQ5RjFxQkM1TThES2FGQ2hNV0NVZ0kzU0dIQ0FU''@;'; put 'put ''MFZtdTJvTFBLRndtVGNjamgyTHhFRTloVk8xL3VFMDdhc1IvUVMzNDA3Z3p1S01FOUdPcHVtY1lVWUlabFJFTzdON25kNUdySmQranp2M3N2WDBncDU4RWNZM1VZMVBuNERVdzlpTktUR1lrREVnQUJHb3RlSmxza1kwNTdRaFh2L1YrZ1Y4Z2Z3VXhyVm1DbW1udDhMWXAvbUFWSFRoa2N1bCt5''@;'; put 'put ''NG5QMzJUaW01UUprMGdPMjRoejRDNHEwU1JUQTBRSDFzeGx4SVlsRE9iUUZFUktOYktvb3BpRjVPTG9HL3FOSnZsSGtrMU5tQy9qekpTQll3azNwYk4zalk5ZlM2YlBUZWRub25GWnRMcDJYaDhObTNlOStuVjFYdjM3YnQzZGZYVCt4WjZyeDBkdmFhMzk1clIwV3Q3R1E1ZzNiZ2NkTFlPZVRM''@;'; put 'put ''RnNKVUM0R3VFUzNHTUxYalVhbWVvRThQcHBOWC9oV3RxbjlxOVF0S2p3KzlZbTBTc2ZSUVdWUXpyS1VhMW1iREpDTXNCYWlCa2hLR1RpVDlxZEN3Z3BuT3M3a0JJSXhiWGRXRkZhb3ZoSmxuY1dUQnNUL1ROdnJiUnBxYVpVTitCajJlT2RZek0zWXVISmZlZWI3VXNScHU2R3hQdDV4cVhPdnF2''@;'; put 'put ''SGZxelJUYTJIM0JaQVdQWG9LNU1lMGt4ak9QRG1NRG9NQVdtdUJIQnl6Q3laZ21JRXlZQ3VuT0o4cnlic1hzTnFnNEV2SUdnS0piQUxsT2hra3hRUFFPV21qdlJ0SGw2b296MmZ6aFgyeDA0MU5xemEybzhtKzJkM05XZW5BcDFMWHk0LzNqN1NHdkhUT2RWdytaTXFyY3VrV2xNcGZGZTNKeU1k''@;'; put 'put ''VWJyTzYrTFRUZTE3N1lWN3VsdDNaZmtkT0NIYjFuQXV4R2tHMWdmWmpBeThJaE9DMnZBQ0d6TkZVQWRVNmtXemFqSlpDb3dGUUJQMllyb1hJUGVNRTVhcWJYcFQxa0ZmS3Ywa0FtUFhYdjQ4UEp2NzVuRVg1YUc1dTk1QS9kTHo4RHE0NENmR2hpakRMVm5XbXdnOWdyTUJHdkFuaGxCOEIxcFFJ''@;'; put 'put ''RUxBbG5nMm5zamNzQWM4MW50QVQ5RERoZzZTUmtqWXBoeWtkaVVJOE8vT05JMXQ5S3paMC92Wk0rZ0VYOVcrcUt1WjZ6emFFZjNxUkh6NVVQN3h0dmFoaE5WZUhYeFlpUjVxS2Z2V0V1T0I3cGczenlvR3ZXRDdRTnJ0d0xSQkl1SlZpT002RUNhYUxTQ1poWGxOS2dJODFJRVExa1p6SzY2TE96''@;'; put 'put ''M1F2dlNRRENrQjRzTXliT2h3b0x5aUZ2a3JBSENPR25MMFJwbGs0OGU2OHhjUFhqSDdkbHplNjZjYnd6MFJ4cW5FcmpxVUl1N056alQzVEpWV0RqZWpUL2ZlTENuKzdMMjV6NngrdGtERStOZWIvOTEyYnFZOU5IcWJuL0hTRWRpYkpiU0hnZ2Q0bVo4VTVrcEEzMkNHZGRRZVlPWm5RMTJMVmcx''@;'; put 'put ''MUZyRTNwVFhDWUxncjZTUDRCOUxQenBOSmhkSDF6NUo3WWdvNENIRjhCQUczNk12MCszUUVaQ3FJNklLQTdKMDBBTUdNT3dQa3c3VjFSUUoxYW5xeG1oOVdiZ3M1S3VpcUlnWXFMamF6cENRa2FPeW90ejBNK2loUWtKdGlaK2Y3WnZzYnUvcnZiS3IrOHFld1pidVhmMW5oMUp6ayszdHUyWlR2''@;'; put 'put ''WHRqd3dIL2NIeHZyemsyMjlxeHoxVzhxN2w1S2xJL2xXN2Q1WEx2YTIrZGkrS1B0c2ZxTzlvYjRtMkM5Sld1aEsrcEF1T0tKbCtpaSs1MUd0YVl5ZTkxUlJIc3NRRzRWRSsxQnF4VUN6eXFKYXRBNlFJc1R4QmNXWlVTVVBhYUx6QVlDTEs5ZHZHdDVod0wycGIrSWkvWVJwZk9aYUlyaWIrNFpa''@;'; put 'put ''Y3piUGU3MkRiWDB4MG56MnpjWmI3ejBrZm9OclA5cG10Z2VvTG9RQ2U0cWN5bU1wck4wTW9kS2kxM3FNeG1oTXh1czh0V3hKU0hUcllnRk9WQnRsRWtaZkpQZkl1aVVhUlR5aWZ3czVoK0pEcndzMEQvV2tWa0JlbjhQbVI0SE9Pbjhmc2VTOVp4T3B3aGhNd0RIZXFlMEJHd2tleXBvTE1BTzlQ''@;'; put 'put ''NDY5TDc4Q2tjSC92QnpFTVB6VEsrNjBaUEVBZitCVkNlaUh5WlNrcXYxRGRENEJDUWFWbE1FNEhxN3lJcXBTbW4wLys3OFhla2V2YjFpL25iNW1ITUVSalRxWXdwd0pqcGVwelNPclVqK0JTTStYVXA5Y2hERDgzOFlPd0hkRXozK3V2NE83RC9UckNXMDVsR3UwRlB4UnVtNGxtQWdXOVM2UWtx''@;'; put 'put ''cUxWWW8zRnJSbDB1bDlkVkZTejJCM1YwSWpJSDU2UXhNTFp6ZzcvNnhPNmpmYzB6QTUyTHQzY2Rhb3JQcFE4NEZNemVxdXVPMUhWTmRWNFZuMm1NVExhYVQvd2c3OHJTK1VYVzd4VDZ5WDJBbXduMG80eTV5a2FNaHM0T0lvS1F6RDdtQndjcEJZYU9RZEFZYmpKam94WWJaNUVXSkxXb3hVZVJh''@;'; put 'put ''TUo2VVg4WTZYU0szMFA5SzFpRzFVQzlxeHBvbkZRYXcySU5Sc0d3K3BhZDZNRERhc20xUWtnbklOM3F6cTMxZW5FV2dVdTl4THFaQUQrcnBLY0hvWjZKbnZIaFFWaFVKaFFLMjBPQlVLaEFMTnRpUXZoQ1lSWHZKRnp1dEZ2a0VpRkJNYTZ5TGhMTVl2Y3JvbFRtcjk3SFZxLys4c25sUjViVE05''@;'; put 'put ''Rm9oN0ZpVnpRMld0ZHpXV3U4ejI2ZUx0SzREZDd5OHJSLzN5ZjJMeis2c25EUFlzZHl5dDV5c3RmZUYwekVhZ2RybTZPblZ4NWV2dkxMVngyNGIzSGl5blFrSEtxUDdHcnNQZFZYNSsvU1RialB0SmdxcW1xbXU2WS9PTFA2NlBMK1Qrd3ZyeW9MZUxFeHRpY1JiWXhPMU1mYjJmNlZ3cmZ2Z1J3''@;'; put 'put ''V1FaUFdaYW9OV0VQd0NGQVJrSlVHdENoVmJXRHdVMHRHcjljYjlVWnVtaGFERmhXWmF4azJZUktSUHQ1K0VvZnB2OE4zd24vay9OcmtUL0dBOUNYQSs2d2MweWhDSmNpSE9qS3RJSWxoQkIxd2psWkR0TlM4a0lNckl1WVdNQjNMVTJxemVpdExmUjVmc2N0YVlpdUpWT21aQWJwUklIc3gwNnAx''@;'; put 'put ''MkdsWFBzemlnWmI1UkR6ZTBkMTBvRU42Qk5jMzl2UTB2dlJxNi9CdzY2dmtmR1E4M2pqc3FkamIwalFkd3g5TTE5VTFmMVY2cVN1UjZQb1haZy9GUU5iZURieFdqaG95ZGFVbEpxT0dHaFdLUEhWdENQL0FnM0pVRmdxR2FQaEhreWNCY2V1dTQ2YjdEeDI2ZjJubzFzUmdZTEd4OTB4Ly81bmV4''@;'; put 'put ''c1hBWU9MV0lmUEIrNWVXN2p2WWt1d0xSNGF1SFJpNGJpZ1M3a3Uyd0w1UXZIMloyVGRPNWkzazBNUWNZeGxOWnBQRFpuS2FuYUVxTFVXUFFwaDFPQzBUWUIyMnp2N3F4Q01IRHo1eTRsZi9PWEY5Zi84N3h0OVB6czk5NHZEaFQ4N3R6NXdhSHI0Nkl4blkyc0dBSVgwd25nbEZNeEZGc2xGN1Jy''@;'; put 'put ''TUF1cVZRYllVeTY5N0V3MHRnM3RpZHNweXplcDJQNDh1bFA4Y2Zra1Q4QnpMNWxjVnZMNUx6aTJoRC93WlVrd2twL1ZOcHhYcFZWRDY4TUNBRDdabkpMZGFyWCtsM2hYYjYwcUwwWGQ0cDM2LzdZYis4S0pWSmdNdUFoRXBDTkZwbVBHczFpQkVYOTArcEpjakVKR2gvTzJ5YW43dFhYdXRHL3Qy''@;'; put 'put ''MGVTay8vak5jRnZ1TDRhWFBIRHIwbWFXUlA0OE4razgwOWRFTjdJdnM4eitOcjVaK0hXL2pXOWlhNkF2Vjh5MnM4SHdnditZN0dVN0RtWUJzTWk2RGpVclhTK05ERnJRWmw1aXVGcjZTOEozY3VTemRzYnlNcjZIc2hLUFN0OGw1NlRYc2cxNW9xOGRaZkpMR0ZWUytCbmZUd05FWVhWNm1yUURX''@;'; put 'put ''Q2Zyakc0ei9nSXFZYWM4b21obXNaRWtBWW5JenRCY2hpejJvZ2VaNVV4NW1RYm5zc2V1OWcvWmRkYzJEeXkzTDNlWk1vcjg2dWFjYnRGUzg3L0oydnM0WjZPcERiSjFWbVhLRFhrdVloc0lzQWlid0dLWGRadU02TVduRlNRUDJnMnZvbjFuR2ZiZEkvNDdyMy9sZlIyQzYwc2Z4aXZSMTZUYmNl''@;'; put 'put ''UHhsM2k4SVl2Q1h6eU10dFJIWnBHbHZpRzQrUjUwV2FhMVdPdWtnMEVuU1NoeFN3OG9pME56YWVkWWVlQWdJSURjdmNadDVPYXpLdkR6Z0ZQaXRKdGlCMmVYZi9uYVpmc0djdXZEZkF2Si9UbjlLYnJsUDhqQ2o0NHFNUnlSa1M0KzJYSThZcHVSbi9lSDNMaTlMWitpV3ZFRU1hNVB3OVFhVnZa''@;'; put 'put ''UitmLy8vdzVmbEFnZW84dUI5UzcybisvdFA5M0twSTRzYmVMcDAvOEdGb2VzR0JxNGQ0alRMZEFHbDErT3dOalBJSFBCR1lSYkFwZ0ttb1lsOEFCeVdXRmpnc0JVNEM1M1dVSldPQnIrOU9ibmo5Q3NpMlpyRjNpRVk5L1RRczh2WW50MjNML3NvT2QreW1zbXN0dndHancyMHR3OUliNnB4NEtB''@;'; put 'put ''MmZDWkJBOWhFSzFCSFJxQmh3THdQbzFGRkFaMU9aOWdacWcrRnFmQkZNQWR4Z3lLbU1lUjBPTzF1Mm9BVjh2dVFmN2gxTEhwVis1S0NIdWxYUFlkYWwrdHorTUVWVnpSMDlmV0dhbko0a3Y2UW1PNmI2NTlRSVNxUHAwS1lDK2hNUWdOaWlrdTRqTFJhV2FUSkxBNU9zdFZxcC9LR3p0UWZCci9U''@;'; put 'put ''eWpDbVRjcTRJc2NQVHB3Ly9kZjNMRE9VU2YyUE1uVGhXMDQ1Ly9DYjN6Q3N2WXNpak5GMGFQMi9TQnQ1RnJ3QjBGRXVKL1ZIQ1ZhaGlRWllWVHFxR29XREVUOUZVOTRMRFRlUWJRU2VXNmFsajUzcVdMNnhiM1JpWWZ4d2M4Y1ZmYVBYcDFvank0M0JkbDlvc092VW1kYXJKa3duc2djNklnMXhw''@;'; put 'put ''NjFodEsxbGZ5b1JIYTJPbE1jOGxkVWVpMmR1cG0xL2lzNnpCbkEweWV3S0hoZkp1WFk4a0NHYnlOZ1B2cDBmdU1UNHYwbjF2eXlEYTdjbzgrNHVvSXQ3b0QzWXZaa0tPWmlPc1hwcFR1UndCQnlLK3FYQ2l2c3ppdHpDdnR1enkvSDU1dWE1K01yb2JkUG1zVHRtOGZ1bDB4MEhtc0Ewd0hkS1Y4''@;'; put 'put ''L2VNY2JsakdJRDZlaFlXdWFMZ3FTVWhTU1hOR0NxYzBsam9CRjFEeWJmazc1L0V2N1IvUUdHUHIvMkhWTFArZ0t2UUZQQ2VBajZNbEpaRHdLQ251RXcxYzBXRHhMQ1ZxU2xtcE1LSGZnbitFM1lYM255d1lkUFB2emd5WDlaZnVvTFZGSzhUc3pzYTVMNDEzNklsTDdKcDVnOEEzbG8wRUhYaEla''@;'; put 'put ''anFZMkdPYTNaYkRZcnhTdk1Fcm8wc043eEo3RHdqcTk5N1Rvc1NHdlhmKzNGNi9DYzlOZFlsUDZBWitIVEg3REkreTZBdmo4R2ZldFJlYVpVUjNrdko5aGtiOXpHem03a1BtSExxcVJmWGYvMzN6b2ovZVlvTHNDZmxwN0hQZEtpOUorMHJ5Ym9hN2VpNnlrKzh5R3RuSCtmQzJuWnJHekdhZTdt''@;'; put 'put ''ZzhKdnd1K1Qza0dLcEZQNGcydi9Oa0hJNHNTYXhQWDkrUHE3Y1QvNTd0djB2cEpBV1BBMS9zWm5Qdk1HK2U3QVdoc3dFRjcvL2ZvRi9MYzd4QnNGc0dmMWwrTUZIbTdFS0FyamhYUGpLZkV3YW9yUjJDZ2REK1hIYzRPd1Q4Rlg5SUVIZnYvN0p2TFZnVGZQMCs0VCtKUDRDNXkySHRjZDZjdTRR''@;'; put 'put ''S3F6Q0NHTVRLT2xwK1VveCtNNjFHZFAydjFoMGYvdDRVK09uemt6QnRybjE5LzhKcDJ6dEg0bDJiMytOQXhYeGZyWUlUNUx1eEFCZ1lSTXJUMDhOTXozdFl0a3NKdThBbTNkckswWldsSnBmOW9HUGlBZk5lMzJkeDI0ZG9oODJmSG4zS2VyQjV2aEQ4UUtmQkZDTjJZY3hWalF1RUVSV01GeXJ5''@;'; put 'put ''alhDanF0Qm53N0I3aG5WUUNzMVJIdEt2TTlxUUZma3RWajZvcko5T2dCdTJjckNPVXFCcWVZWlBNWnA4ZURrQ2ZrQ1hvcllkaVNRTkJ2TndCU2tjc0pXRlVIcG5LT3JBM3NNK1hjQ3Q5KzljR3lwZmpVOGZSU3k4anV6c0hPcWNEUi9iWjVjL2RvYXFRN1FheG5EMGt2RG9ZamU3T0ppYnF5b3Bh''@;'; put 'put ''eHV1RkdLWjZzNzNjMDFkVEUrWnJIUU41TWd4NnlnWmZ5N0FXTEVUUVFsbGRaRHNSVmxNMUZXRXJrY0JwZEl1Z2k4RlM5QU9UZERFUk5zZzJCTjltbDlTcUhmVHNEQW96cXRXTHViNENaQjAvVlliY2paUGZadlo0U21EYm9tRTJodkRCbEFLc1N3VlBiQjUrN29yUHppdDYycFlwRGh5b1gyOXdq''@;'; put 'put ''TlRVajBZYmhtcHJoQm1JRkYySDhodjVVZkM5NVJ2cHRMQ1cxUktkVHFhbG9kQ3FWbW81eW1vb0FmVWhBSCtXb01STTNBaDVLVERESlVtQnlJZWN0bGV6c0xia3U2UzI5ZnROSTlzYmhwa09oWG5kM29HRWlHcDJJQm5xS2U4T0htODBqTnc0TjNUQlNHK29zclVoTXh4UFRpVXBQUnpqQzk0L2FF''@;'; put 'put ''YzI1L2JNSzZ2MmppR1I3dzV3QjlmNVo4dnUzR1lnUnFjakNocHhJbGYyamdJV1hCR1Q3SjcrbDBNeDQyZ2l6ZGY5c0liK1Y3aCtXQ1Q2UEpDdlp0SCtrK1ZERlVsc3YzOFRGeXF2WnprWFpMcEpuMXZyM3hsUDlONHlQdjZNL0ZjT1d0YnMyN3grTjJieE93ckIvTHRpVVRLYUQwSTFqaDY1Z3d4''@;'; put 'put ''QkJRNVp6TTVYbkx4T2RHeXhnZDdtN3JMUUVtanJCajZMekRmQnRVeHRmWGpwSG5laUZLZU9GYVhlbjc1cm1vZXVIK3M4T2pwOXNrNDRaNTN1NjVzMjR5VENhR2EwcXpnUWlBemVNajc1aklQdWUvVDI3OFJYWnJxNHNwVEV2ZkZzazM0Smg5MmFNUlZpbnRXS2tvekVsdWxsbFNLZlRMb0dsVmN5''@;'; put 'put ''Q0UyaEJnK1ZvSWlncVQ2WVVIQU1kU0ozVnJTL25NOGFnbjUydmlhS0g2d2cvbGRzOEZNYnBVZWY4MXZYWEh4d2ZIMjB2YTNJRzlPVkZya3FpblpJbThPTlRuWjBURG11UDN1VDNVRHhHMTZkSUkrQ3hFdFdoYXpPV2lpS2kwK1pqczdLSUJEa0hha05IVnFsaHVDUnFpTXp6REtsMkppSnpJRlE4''@;'; put 'put ''d2t3cElOb0VCaUt5cWdxaHFycXEybEFBUnF3TUJZTUJLaUt4VmVaMjdyVjE0STNFa3lLcXMzL1MySHZOYU5lcFVMaHNOcnBucVhLeHRmZDRSOGZ4M3RhbENxREgvdjY1dVg2aWxSSTlxNjJoeWhGUHhXaHZ0ajdlZFhKdzhHUm5NckpIdW1idndNRDgvTUFBUC91amhyQ1Z4U1ZQUG1WakpoUGZH''@;'; put 'put ''amRpYkFRbU1ZdEZsaWhXc013OWJ1N3NiMzBOYi9JUFdiUkRmZ09NVXNDdFBhdkQ3NkJoQVNyaFlOZmtRSnBWRm5MNDl2bjR3ZDdHVUUvNDBLSGllZGlXNUw1VzZRdTR1WFhZMit5Vi9nYWsyVnExTE9zNzRQdVQ1Qi9BanJLZ0FUNXRWeTRvWFV3cHhTcmJxWjZNQSt3NVRBMk5WZFhqZVdvNldB''@;'; put 'put ''b0x6Q3hTcmQwVXFSYkJDampnOTVjVSsvM0ZpY09IeWI1QWNiRS80QzRPekt6OWtZNi8vdEw2dUR4K0tUcVNNVnBBdHhaaURjbFJ0MVkxRjBGZ3BLczVvQVBNZURTTXVoRUFDSWlkUG0xOENUS0ZSZEZMelNVdXB4eEhGN2ZFMFdWSGdKckp1dHhFVDhhTENrcjh4UldIeHpyeUUzN3pQNDM2TWFQ''@;'; put 'put ''ZlF3SnJyM2J1WXZzK0NBdWdaNFltdFBRRkEzUFNsSjIzY2cxSTU0UTM3TG1WYXp6MUM5aHRjSFlYMks4YjNzelBYN0JaN2N3aXhOUVlZaW9NWE9tdTc1Nzk5SjVEaDlhdXhSN3AzNzQvZFE2MnN3ZnJPUjJpejhGOEJOVE9wMkdpd1F3NUlDSlB3S1NLa1hqWWIwb0FiWDcreVh6UVpPalFJU28r''@;'; put 'put ''a2JKT29ROTQyMC9sVHluRzJpcU1XRXliTXJXTENoYnRrbDdVQ1ZxdE5hdWhwN1pzV1NCNTRIZjZWZ2R2aVU1WGtuczV6MEkxZnVUelcrMSt1OTloQVBtam9tVGRoZzlKSitkZStFNytaanAyc0NQZVBNQytIVDdzR0lzM3o3cHQrOW9VQ205dEdlcE5TYzhwUDRsMktGemZISXMxSXhXZldzRy9I''@;'; put 'put ''cnRnTlJQT3FIUU5kdVpPYWFrOHNxcTVrTkhVRnY3a1RPaEFkcGo4WmliVWljcU1aUjVzMnEwN2ZMaDRUczJEblEzUzQwU2JEY2NVL1RNS2M5b1U5eWg1eTdpSDY5SnhqOWR2eklMcE1IVGpDQmdLekhKb2lPNkt3ai9aY0JpNVlRamV6WURkRUo5T2NBTkNzZjJtd1Bhek10dmg2R2JiajJweUhi''@;'; put 'put ''Z3Z3UHg1QTR4aXlNNDFQWk1LbTIxREZjemJzTk1VOVAyUDdEVHB2OG5qODl2WmFkUW1tZ0tiU0ZuWFJwc292NjRTbFdHU1ZYUVNzM0tzbTJ5bURUQ1hzRitzbTFYUW4yQy9hTmNtc0M1dndNeEwvVnZ0VDNEYjhVbFlsd24xWEREcHFLY3VyOHJLRkNiWU10ejhaTWFBVTZIb3ZGbEs3WUFMSUdX''@;'; put 'put ''WW1MRTFKWjBLQ2IrODNMUHJtSGo0TVA3SHRwbkpQdW1maVBZd2o3bThqbCtFOFlMVTNuVmdncDNnSGNPd0lQeHlrWmVTelpHWElBb0VhZ1BNM2cycFFpOVlzVFM0VHFaeEYwTEY4c3RuR3FLemM1R201bzZsUGNmMnhBL1hSY1lHcXBQdWhrVHpZUHpFakxrNk9OZ1ZyS2lxc3BiMmRBeE1WNVVO''@;'; put 'put ''eDd4bGptS0h4VnJaSGh1YW8vWVN6SEdSZkFqc3BXZ200c1k2R3VZRnMrNVdxa3ZJQWowMEFDU0FaM2FBbTNMTUJyTDdxQkVVNU82VlZjNHpBb2xMRDdDYTBualIyVlRXUGpvK2Z2RDY2eXRkUmVYNkVxdGpvaFBIcHQ3Ly9pbnBWWS9mcE9jNVNLOERQclZNdnRoaFFKS1RMeUJhWkkycGNnZmR5''@;'; put 'put ''bE5aOE9jOVFDNWZRTVg3V2V4ZlpRWlRSY1ZtWkNVV0tsYWFGU0VEeFBKSEVDa2daUEN3OUJJVk1uaEN6c2toZFVTcjVPUW9rUXpGQnJUYW1NZHQ1NkVYMS9GNzd6bitUd3RnK0p6QWQxTUZqY0VxUmtJMXROOGF3N0ZlT29aVHZuek56Vk0zbjExK2ROOE5OKzZESHQrSmI2RmZhMy9FTjBzMzUy''@;'; put 'put ''Tk5OdWliNVlBWlJRM05KNkdkWXd4OUMwUjFLR0N6MlNqMWVNT2kzeDVPdXROSjBZN3ZlOS83VDN6MXVaUHZQbmZpMmE4Ky96eldyMzMrODI5S2I5QitTOVpIU1QzMGE2WFpNQ1k5Z1NsVEk0SElYVlBpUEVEbjdtSEVhVVZGTm9jNkxOaUZCYmFLUWl3ZXIzV1YrMHA4NXRMWExudmdrNnMvOGV4''@;'; put 'put ''dWVkSTFXbVJ6cFlsZU9vby91bmF4TDRQNVdrQjg0dS9CbUR2RWVheVhqdk1rc0UvNkNiNUhlZzBIcEwwaitORDhpSFRQUE91M2VuMHZQa0srQ0ZLck9oTXNZY1lsYUdrODVQTVNtdU1HSUxNeVAyTTBZWFZSL1UxRGdHbFFSaWxnc3pCTktIWVhFcWViSHhXS2xNdEViTjVmamVzYlV4RmN2VENo''@;'; put 'put ''YjJ0MTRsQW9ITVN1bGpiOVBUVURUYmZGNjNycTR1ZlNBOVg2Ym9PN3R2bzlEZW1Dd25UREhkVzF4WVp1R09leTlRdm9DUlkzMmprL0RteUl5NGFIbFZ3MW1uKzVGNit5ZFFCKzlDenVRMCtwaG53WUQ3SXVadVhUZTRRbmFPNDJFUjExYnRCcFlaNkJrcVlaSm1rUUR5S1FQOGdvV0E5c1QyMWJp''@;'; put 'put ''d3VtSGdwaFoydWJmaGRkRkJXdTFmdDNMUnVLYTZ2dmFFZ1hGcVFiM2xOZDZ6WjA2NnNIMHVmWXdtNUw5OWZvYWU1NUM2N0d0K0ZIclNJdVdGK1hmb2tNanlQOHRQUkxsZzNCYzk5bjBMZVliTFd3VXlzNlFhcVFtVkhPY3AzczlMeG9vL0hMREV1ZWFBaTJUZkpCT1htZzVVd0ptRkJLdnNCYVAz''@;'; put 'put ''NU44VDh2WUltTUFTOTRLV1lxeWt0TDNDNkh2YWhBUzh6OGZBcEduWmJUN2tIY2w3SWNPcDQxem1QWE5GK2NiaXJvVG5BL0ErQWpnMnJCUDV5S1RuVWNibTA1MGpIVnNOdmJHMmh0Qy9WS2QvYzBOdllFYTdXWlB2UFlWVjFkVjQ0VjlIUnFxNzJkdFNicEwweVJqcHNQMlBHQzdXQWJ6NEZFWkF4''@;'; put 'put ''c3lUTFVtOG5BVHRGa0lpVFNYR1FSRDJzeEFhRXFFblljd3Z3em1sVWtpdHk1Unp6cHE4eHFEd1pBczFEakx1ajBwdElzZTFNZDdOQ1ZZNXA2UnNiV2ZqcVV5YlNzWkFhdTh3d1dUTVNiaDU1N2JtNnVvZmFod1hOOWw3ZkxwMnkzREQ2a2pzMjZVRXVteVlHUkFZK0FpeWt5dDJSRmh3bVlUV0RH''@;'; put 'put ''TFJ0WmpRRFBlWE01N1RhbEJxRElSS3NBV0htRlUwa29oUy9HOFBqUmU3N3lsYThjaGE5N1dEUVhEdzVtQjArY2dHLzRLQTNwc3YzcUlwUDRhdkljeTk5SnNDaGltQ2F0QXYyeXdQNlNWcUNJd2hQYlpQRFFBS1BhKzBpb1BpOVdWcnBkVlpYdXg5alBLaGVacEQrOVR2cU0vd1I2clVGSi9IL3cz''@;'; put 'put ''eFg1Y0owV0ZRbTREcjBxeHpYSDhTM2tycmNURTZWNU9GMjRSM3FlM05YOWRtT2lidEYvNGVBSGhzZ3JEbGx1QjlhL0FYN1BvN0RUL2d6NDRhRHBFTG1KcXRWM1VTM0d3dHJzV0NQRXRBSld6Qjk2bUV2UE53b0hMbXR0WHM3ZzhyR3pZemdRbjI5dDNadFlxeUlmWFRzS2ZYZWlWOUNYUUhXWjZK''@;'; put 'put ''bWlTakFRS2pJbVZNbTBUU3JzSFFvRVNrdmg2eFg0NGZmRFJ6bmV1OTZKMXFGQk1UckQxbVlCZTBWak41QjhWTUpNb3hKZzNJT3ExcHlrU1VRZ3RGZnpVdlVBTzMwQkM1Q0JBR0hkdEJNTTE5bkZ5RzBQQkFKVVoxUE1zUVFORm81UTVUelNXcE5YcTFzakpUR3JzOXp2OEFCdFdteFY3Y1g2U0tn''@;'; put 'put ''ODJGQlVFSFU3TElVMm8yMHN6ZXBqWXJEbnYyTjdIdEhSUFkrZzd6RTZESytQNEg5bHNzbUxXalBwU3FmRHJDSDg2STBnT2xGR2pGeFlnZVk1Z0dSMTU2MHFkdG10T1pwRWFuSEZVM0VTYWJkT01WbEJ0dUNrTE1GaW0vT2k4dUpNdW1welpoU2JPenRMRW00cTh0RnFIcXVJZXRHZm9jOGgvZU1F''@;'; put 'put ''UC9ZNUptUzNnVG1HSFR2QW5GVmdzSWdlM0FIbThoeE1BZnJvRGpDcnViRlcwTDBjaG15R2VUblhqd2w5Y3lNTXp4TVNYZ01aWkFGVGZ6RFRaNlh5aDJsNmNNSkI4dENzTkwxbTJRQUNVYmNBZHFaOHhxUGwxaEp6NVd4Rk5taHRrWVdTQ1NRa1ZqSkhValNaQ0t3Q2NGR3lTZ2FKdExibkRMNlRO''@;'; put 'put ''RXZpdDNrcXlWMTNrZk9MMG9meE1la2pMUGVqaytYcXBEREpsTmJXQ0VRajZpcUFOTXV4QnBmWmdHNnRtQWhhbWR6cjZkR3NnRS9DTjZRNW9RUVBaZmt0TzJ1ZzNRN0FuRDJFUmcyb0FkdEFHeUdzdWVsdHQ2cWs5VUFiV2drM3ZHV3pUR1J6QzVyWFI0NXMxNURIL1drY0lZVWFnN1hBZGw0blZU''@;'; put 'put ''VThCbXZCc21qWXpIM2JudmNtOGN1TGdjR0c2M29LOVpXYldkTTljL2ZNNW95bHlVaTRMOXFzOFc3azJHYmprVS9NYmN4Z1FveW1XTDRQby9GcW1RL2V5V2dLcTJoek04d3g5UGdPTUdjVkdPQ0RhM2VBV2MzMXM0Sk9jcGc4amE5ZnBEa3piS3dJbjgvNis3YjBBNklDSjFRd3g1Qm5NOHo2cndI''@;'; put 'put ''R3h1WVQ0Zk5aUDc4RjV0OEJwb1ROaC9lenN2N1pqZk1CZnFxRmI5OW5PUVRsTkx0OG8zV3hvR2RuREFhVmVXR3h3STl5U3htcjhYTkNzd0xRTmNaOEhJRTVURW1yRWtNQTNrcUtvUER4MTNueTE4REFyNlo1K3RleitKbGNDaGh1V01UK3RVZDRJdGlMaS84QU9HRDVMVXlteEdXWmN1OFdQTEdj''@;'; put 'put ''RFlhbmhMeTNuOWtpZHpiREhNT3hIV0RPS2pDd3QxL2RBZWJ5SEV3QmVuSUhtTlhjV0N2b3VVM3lpK1pNM1lGZkpRNVFBcm9uZEFqSDZvSmg0SXh3bXVac3V2R0h6NzA3Yys2Mjd0dk9kYjc3M0IzbjN0M0pQbWZlZlE2eGVqVWxSNFZXdWRhamM3Si82OElhVWxkYlhsWmkxdEdVYktRVlJqenNx''@;'; put 'put ''YUI2aXVIcFBHOVF6SUlwOUxqZWxkVnRPRUVFZzBKOXBPVGlSNEk2OVhGZnBoQ1l2VDRRQ2RuRGRsWnhvV1J4aDhBOVRLc3lVSk1pY3JreEQ0MGpYdTZGWFVueTFlVEIrNWJTcTVHR0kvTU5qY0RhVFVjajlVZm1KRlJaaGtlN3NzRGhPSE82djZKTWVpS1RKY1UzOUMzZGY5QlhtVnFKMzlnSHZP''@;'; put 'put ''MnRiRnlSZmp6dHd6ZFREcGYrTUhUZFFNTzBYN3E1bnVLZTVXbXdmVzZXYWVIUkxmU3lHZVlZK3ZFT01HY1ZHS0NGeis0QXM1cnJad1Y5YWpPZmMxdVpqZFV1ai9YY3huNDI1ZTgwWk9xQU9yUWFyRjNXWWZuNEsxZUVDWnJMNG5KWTNFVnVhOGhiSlBLc2dxUXEyeW1ZeTNaYWVXWkx0dE9abHRW''@;'; put 'put ''TTkwckw5ZDhiYUcvdmw5WnlzU3ZpSlY4RFNUWC9sQkhzZGhvdXFRZnFxQUFkQUVwTW9NZEUrWFJUdktERGN0aTZURTVxWE0wQnFsN1BaNHoyZ0RmZ3JmT3pZNjFjakZSVXBwcFNjbzFTaWw2Z2NlYXhsaU9aek9IbWcrMDBXM1ozZTh2d2NFdDdKTm5iMDVqc1hTYm1wdWxvZExycFdMcGlYM1BU''@;'; put 'put ''ZEd5ZTVzbk9kRWFpN1oxeG1qTUt1T1o1QXE4QXJ2dEF2eFBVdTRpMmVTN0FIbnhBOWZ5aUFvL0ZXVFg4QzdubkJRUHE1OC9sK2wrWlVEMFhLblB3cGhzNW44Sno0VU5nSDBaUUVtVndONi9wTFNzRExIczlZSTA0c1ZIZmpIVkdBeUdpam5wMnVoRzVpSGRIR0JPRnliODJiUE42ZnA2UEV3SENv''@;'; put 'put ''bFdHcTBpUGRLSmV0MXhnSUVwR2ZrbTIwR1FXcUJiUEp3M1FjWnN1MmNhTWN5MnloZGhrVWdtTXpPYUdLTitNRmc2L1pSZGdSbFExTnRiWEk5U1lhZXhxYTZsUDFpZGlVY0JjblQzZ0R3UURRVXZPckZEUzNMZGtZUER6aVUwSHZpQnpPbkR1dlBGbGZ2cWJPUm4wWHRtN2RFS1ZuakhYdlZBU1dH''@;'; put 'put ''M2JmQ0lzZmFBM1RMTTJlbHI0MlhCTEl0RXlONVpQMjRqWFJ4S3FrMkxwRG4rYlArQm9xcW1Oc2J5RVRwYVhrRUlQWmNxRFdLdHBEQkdkTmxWS2tLNEVDNmk0RURhNEFMeG1uV3dXQm1oNUFBRmpRUWNjcFdPc3gwcmRlTkxGQVpEQ0hxellkVUVLQzNBM1hSbzQ0OXNDeHdyZ2orVEF0UlQzeGhD''@;'; put 'put ''ejNoaTNCblIvb3VGR0V5WHdEK2JpbHEyR1czSDM4YTd0c2ljQ2Rac050eGJEMk9tZUxka1VuTDk0ZmdEbDN5SE8xOHZiUGFkOC9SSFY4NHNLUEJZWDFmRFA1ZnBabVdIUDE3L0d6dXhvUDkvZy9kL080V2xRTEtKNmZzeko0WDhHejgycy8yL3cvaC9rejM4TXorMnNmdzYvY2krUEw5R2FxVTd5''@;'; put 'put ''VFZRR1Z0YmVqTDJJMVFiS2xwUERialBpb2V4anBmUVlUd25lV3pka2w5SkRYd3lhQUpOVjlXTndkOHZMeTJ2TGF3SytVSkRtMnlzcVdORys3aEExS1VMY3BpQnk4cW1PMjlvL24rNDVreDA5Mjl0MnJPZEFiM2pmbWZMSnFvYWwvZ01WUFFWejFjT3hnWGw2OUdINTFOS2VXNFo3ejQ0T1hkVTFQ''@;'; put 'put ''anJSMkJzb3JneW42M3JMMTM2MmxJMk8xaThPeDhjakZFLzhUSS9LeTBrdUwvZm04VDNLOExlYjQvWDBkcy9wdmoyZ2VuNVJnY2ZpRldyNEYzTFBDL2FybnorWDYzOWxtY3ZkYm5SRXJtdTJnTVhjbGdIdHJGUE96QkVMVFNFTmtQOHNrTDkyU1FTKzFFNHdqOUJUVkFyYVZZa2s2cWxycmo1R0I4''@;'; put 'put ''ZFFYYU9FcmNHZ3B5UVFLUGtGcmFYNmx2d0wvbEtvdENRWUxDa05kYzAvcjN5RU9TbG5qRzVVaFdweU5wc0RiTFl3UUxsTllKM3BGWnNObmdxcXA5dmFiQ1hiMld6cUE3THRiRGF2MTF2anJRN2F3cllOTnB2YVpLTVdtOFp0NXdhYml4cHNZUUVFWnpnNGN1UFFaRS9aL2g1ZkNCaDZvcjlzZnk4''@;'; put 'put ''SXU1L1V4S0s3b3Y4OEVmWENKL3pCL1ltaEcwY2lWV09oaFNTd2NyMTMvTGR4YlBJQU4zOFIyTGs5S3IzaFlmdkd6MmpvL3M5eHVqaUl0bmxPNmVKRHF1Y1hGWGdzN2xYRFA1ZnJaMlUzZjg3UEhtZy8rK1YrN2xhZHEvS2NyQS9uejFXM1RaZmJlcmE2UTdyY3RvZXcyNytXTStmb0llemJQSVcx''@;'; put 'put ''L3M5UFlZWFZyZWx5T2R3OEorTUdjRGFKVkRHWGxseGM1aWo2MkJhL2h0cy9kK1hzbjZPRGFMdVlEamFnKzNab203T2RzR0dTeThiUzlUMkNGMnhmTi9UU2tXa3R3VUI5V0lmSmlCNU1idGhxc3NMS2ZlaTlNMERQU2xtZEhZMFdGeGVYRnBjR2FPekc0YVZCQnkyUG9hWDlZVjRLeGxWK0ltMGln''@;'; put 'put ''dGVmaUhlNEM5cHpkV0hGRmVVbFpSYnB6anZ2cW1oTkJNdDRpVmlGdTloanhaMnNVRXpPTzkxRGVvQm42VTFDVDNNR0xQT0E2VldLaWVDQXFkVkg5SUplRkRIVzE4Q1VtV1cyM1d1dC9Gcm00UnJvV2RRVGNWV3BaQzhCeDFxdjU1RkN0M3FKbmt6OVZsaFEzQmE1QWRvRVA1K3gxdGJXcG1vYlF3''@;'; put 'put ''RTdHRTFocjFFc3k2RWx0WVBONUxRcWlBcXBNbGhKRDBWWnlaWWsxcFdyT2VwK3F5U3pVZ1NHeS9vM0pyUFMvRmFHelkvbGsxcGx2L2h1NWd1RlpGL281MXQ4S3A3TFNYbDNRT2JkRDZyYW5sWGFZajE2YkllMkYrVzJCT3ZuT0gyeTJqWFdOaXkzUGIydHovNWI4Z3pBRERJWWk5QUJKcmtCWUo0''@;'; put 'put ''V01BVUNHRGxHQXBUL3pseU81N1VnVDByaHpXc1hiQnBpMEN1bnpTR3FWakFTdEdnWk5nZ2tpMTR2NTlEUlV4RitNUVZQQ0tMU3AzWkhhQ2JGYVJNbTFkMUVFVU1iV3hSZXNzVUc0RHljVGlmbjhhcUJhVHpQNXZGNGFqMDFZWG9pSC9MTHh6WCtMV21neWtVZ2FITTJ4YldaRGVrVTk5OS9LQ1A5''@;'; put 'put ''VXAxVDBiLzJqQ29uOUdPdDdlMXJYOStRVlpHTG9iWGtZbWhINGY5dDlodnN1YnR5OXR6UmNiUmQvQTBiMFhkMmFLdllnZ0xBZkpIWHlBSFA5N0U3RmdZemZVV2dpSzJBTzM2R1RMUDdLZU9KQzBnVTVZQXlGZktXTERNa2dESHRXdVhZemVHblZUWld5b0JLUGFKZjRUTzN6SkdxQXNWaHpsVVZU''@;'; put 'put ''RTVKVHlqVmlveUhtcG1JNGpXRzlLeHloZVhLaGxBOWVtZkdScjJLRUNaYXNCMklBV3dCbWdsZkJ2UlJEZWErUnF2VExOTmdyYkxqOHUwNExHT0dTUSttcllJS0tGcy9QcnhkQzVxb1doUU9oK3ZERVpmUEhtcjBCMW1ZVjl5MEl0Mld0RnZxR3lBNTlmYkgyY0xjSW5XNmdvMHB1TlhnbVVtL2ti''@;'; put 'put ''MnVVbmVoc25LYkZhdnljY0VIdzJkNFN1NDJzVmo5TnJIWXpiNkFYdllGV0swbW81RmFXV2Q5ZVV0Ym5rOUxhV1NFNjZ4VGNsdnBaN1RPazdjRjJyR1FVc1R2ZndCNHdZOEtVUU5xUmZka0hQV1ZSQzhxNVFvQ3ZRNEVEWEg1VUdlaVJ4U0NYck5xd1BsNlhsSFVMb0VicmRYeTArMGxmcnJ0b1pk''@;'; put 'put ''NmJZVTJZcDNPeXR1Z1RTM0FtWTVHYVlRMjJocHRTU1V0RFphR3VocS90NnpVYWFlUjJtS3pZdHJTKzZpNE5lditFOUoyY1dWVlZkZ2ZNRGdycTF6Ly9aWVp2Sk4xdnJLMmhwSmdUYVhMVlRYNnR0SjV3WmQ2RFlpeGl2RS9qMWtmWGYvVWxyajI5d0NtbFBFLzk3ZU9mb3pIdE9McmU5RHJ3TU1P''@;'; put 'put ''bnVkQXNJUG5nU2hYZWZBY0lLNHpBMTZYbDVYTHlDZHdhVm9rcVhEcTY1UlVMZVpsSFdkUHF1c2NnUUx5a0d3cjBOelpkUmpyQlhZVzdhVzU2MDRIMFFoZUpqSjBxbzJWVFhOTGpxTlkwa0pWUldteDIyVXAyRFl2MXE1TXlLMmUwU0g1akhxWXpxekNiVDhjNTFQTG4xV3ZWY0VzeTJNbUhYNTk3''@;'; put 'put ''WS95TklGbWFmbk5VL2t6QUpCM3hrMXhTSlpqQ242d05sZkhhOTFTeHp0NCtEQk5jb0wrWm9BSFBnUzYwQWUwem5nQS95djNtZUY1QmVPTmNmbjVwOWx6Vmp2TGRIOVUxdjNXTGZ3R0hJcnJoZmNBeklRTTQwSVhPTXdGQlliWDRENmo5QVA5UDh6ME5GYnBhZHJQWVFZekljT2Mzd2pEOC9sSkw5''@;'; put 'put ''QklBYzM0Tkp1TUJuQzFCRDFScXBFM0ZmWVdvQUpucnJCWFRGRWlTVHRGSittVkduYnRXcm4xMXNWRnNBRVhhdkNJOVBQZWhkNGZ5dlVDWHBhWG5NMFVtSXlpam1wZ2ZUNHYzUVFmaStSNnZseGFjTDdFejhOK1V3NWI1dWVmZExMN3N6RE5DNVRIeDk3SlEyTmpoeWJ4d1JycEphd0xMNFR4blBT''@;'; put 'put ''RG10eVp5VTNLbVFuZzhSZmI0UnA4OWxka241M2FXZmR6V3duMjcyRzJyM0ZadHZIWTZoQTh0eEtyQWc4NGZTRm5XejNNWkhCY2xzR2YzMkdzaTduNGdQNDRVcDJUdE9UT1NZNmlwN2JZWmR4dnZpdm40eDlkUU51ZDUrREN6V2NzY3R1cGZQd0JGMTRtNTZHQ3NINFY5dDZHeXVtNWZlNTJBVDNK''@;'; put 'put ''WFM5Z29LWFVTcTRZODlUSzdXVXVCOHNyNVlxOUpIOWNuRXV1Y0dKcjNnenE0NnA5N2ZrRDl4ODhkUDhTNlpIRVlYcDBlYnFQSy9lNWp5OHUzYnUwS0pueGZ3MmNIUmk0a3Q5RkNITVcvaDMwTzExWEM1cktUTHF4WG1jZ3RBQ1poUWVBaGpSYXZXYlpiQ0E2blJJS01JbEdRUlVNU0NiOWZvU1NM''@;'; put 'put ''Y25tcHBRLzRZL1gxVUIzWG5zZ0ZBZ1d3THczaGxIek1sNmx0aldiYkRwWmhRdGxQSDdhZXpvWVBOTXp6TktiZTA0SEF5ZTdGVFV1WGFQS2M4YlhicWlyNld4S2RmSE01NDdHVkR2VDUwU2QvSXl2cEpwZDF1dkgyZDZtWlByOTRoYTY0RG0zZEcrbmVXd3VLOXQrUUtmSEdmMm1aRHE5eU9HbG45''@;'; put 'put ''RWNYUm1lUG8vbWJJampqSDVUTXYzZXZPMVlaeGo5VG5QNnRmR3hXTzB6bTJlVFBNK1BiS0Y5bnF0TDV6bkQ1M2tFeVhYVG5heHV1Z3Y5ZDhZVmo1V1hhWFQ2RXF6QnhZVkUwQlNBdWFEWlBsY0F6TThsMFBrdTd2ZHA4ZFpUZjlzMnVRSnYzV3JiWElHM2FyWmpyc0EyRFhtdWdEa1k4ZFAwSEsv''@;'; put 'put ''VkFGN0ZKVUxOb2JkUkhrN2FycjFpbTZDeiszMnJseW9aUDM1U3R6bjJiRHgweVJKeWViOVl6blVIV2dmakNvdTZXQVhSaXVYQWs2VzA0RkM5YzZLOGM1R05PeWVLdWlWRUt6QlFQaUswSmNtamZ0UEd2V1dqeWkyN0RidndGcTNZRWVOMjI3YTFIZDgxVTZDMm1tMmFIdnlaUzUwUDRMZktMTWN2''@;'; put 'put ''SGh6ZkxzRWp2aFRlTWQxODE0eDJjNWFITmx5NWMvNjVpamZQS3J3SmZMMjRBMjllVkhnVDYrczRiOVlBYjlLN0FxclFGek1XTnhhUXl3ekt3RVR2SXBTM0ZnQTE3S1NHbm55U0cyaVFUMDR6TXVnSnMvTzJITmhFYUJNTlBZaDVPMjB5Tlp2QTVXT2JMYTAwTkpZSUpoNU10b282N0hTYnFOZnBG''@;'; put 'put ''WGZZSStySTB6c084RDc3MW4zd09PbTlCNXV5NEhweTF5Q3d2UDVPbHRmZmdMNldLYTdCZXFIV1NReDZCeWFHWEZLZk5rZi9XbzMyVmlPR2lXTERTVkJjZ0dGYVV5Z0ltZ1Vkcnl6a3VYdklneFFzMWVmYjZBM2twcmRxbEtuZEhwNmxCcUlqcW1ZQ3hST1YydzJvbmhVYnVBRlROTEtoMllHU3R4''@;'; put 'put ''WWd1Q25oNC9nVzJrMjA1MnNTQW1YVlJadXpDSnYxbzJsMW1VS2YyeGhnOU1mdXBHQTBtcFpwOUlvdE5Pb0ZHMFpndHV3c3QyWEp4Qlo3bCtjaHRPVHlFSTV1bzRkNHJQeXVYS3o4NkFoUzVUQzhuTXR6TUtHLzM1TER3TnF5ODIwV2x3ZVltN2ZMb3dBYjdCUGJ0bTNQeC9weDRXNGszNmV4aDky''@;'; put 'put ''bkVhRG5NMDRRUndXd3JZVkE0c3hObHROUDhuSDF2Tk1FTFFLQlluL1F3ZThuWXRrRW04SVFtNjdmSVBlTTNqYXR0K1ZpRDQ0ajE4bjNjSkR6N05ZTlM2a2NiUEI1M1BlY1ZGL0t3ZWM2QUhPZEE3L0lqMjdpVXRwU3JJZE5FVEVXL0ZpSDZabE5FWHZpWjVGcjRGRThMQWQ3eStSS0YxcFpzazE4''@;'; put 'put ''dDBwK1RXTzZ1ZXFUalNGZFk0Q1d1SVc5b2lyRXZiVVNKWm1MNHBJNUZrUlMxNlVjenJ1dndiTE5CU3FLa3doN3hlNEtZZlRZeW5OZThOZ1dPdUsxS0ZSbTdtVzBJS0x2cVBKY3ppcDVMdkQ4M1Z2YThyT0hpOHJaQXhibmthcnRhaTVIWmdYZHNJV08yQjBlak5ZNlpGdHJTNTZiWFA5QmFXMkIy''@;'; put 'put ''MXJ5ZVNOdnU2cTBCZC8zMnp1MGZVNXVTK09CSDFhMVBadHJxMGRuZDJoN1VSa1g2OXNZM2JDNld1cFBGOUk0Qk0xSXB6VTdMQTdCQ21ESUFXcTlleGhSRjZJQ2UwQzU3a3BWRG12SWw4Ritma3Z0SzgwYlAwd3V2czI3UE56MExvL1B6SzcyajQvMWtZdDM3dDY5ZlIrNStpU0NiZ1dlT3kxWEo4''@;'; put 'put ''bDlwSk9pdjZ0dmJMeC9kWlpjM0wzN1RybVBFWHdGZVE3MlVjN0dOeEthano5aUFCVTV0RjMrZUFFeUI0VmNOcjRjY21KT3ljUGpsWTJPVkdscHl0RllNVkZMUnFvcVVnNlh5NUdxcUdMalRLS0hXS3dseE1hNVpHNzY1a3gvSmJzL0h5bVJhd2xHc0VPb1pMVUV6YXhYZW04T3phWmYxV0lCT0h3''@;'; put 'put ''MlZ3UXF2SzJLQXZYOTlUZDFkVVVpblowUmVvRTYvU0lqL1BkSVY0SS9jUHQ0anZ3ZVFMb2JXVkVybTBHMEVCWmpvZFF5b21XVkFPeFdHTURwTEpPRUFuMHp3YXVtQWk2TlhGVWczOE91Q2pMZjBGSGg3czhGbGg5aFVTRzNIRkxtZDdtVGRudzdlUUZHN21IanBwM1FzNEZWYVRrd0h0SmpZWkFl''@;'; put 'put ''bUpOWnFrNkJmbGVWS3pTSU1NR01ReGZvVUsxTUhJaWFmTW9WeS9TR2RLNHkvYmpBVjJ4MW0reHViYnBvMnNrKzI5eTZ0R1dHZE5xc0JRVVZYc003K0UvOURYdy91dkIvc0ZvSUVaWHlpZ0V0SUdlSXVyYW43YlpjRFlWYjlBZmxvZ2ljUGZDQlFmS0s0NVlQT2Q3SitLNVgrdG42ayt0ZkFxWUtz''@;'; put 'put ''QjVLK0Yza0crdTBBcm0reEkyWGtsL2dnVTFQVlZWNG5RY3RXUUF6Sng5dlV1UWo2c1YxTzhqSFZ4VDVpSHJSNHdodDAvWVlmdm90Mng3RFhhcTJxN20ySzdoL2kzemtiWi9MdFYxQlgrZis3Zm9nUGM5UW40VzgrVHR1UDd6NU85bCtpQUJNbVBuR1F6TE0wd3lHcUdCNHJQM3lYRDhGUUEzYng5''@;'; put 'put ''cGZ5TVhhQzhiUXRqbVF2ZWk5TytpR1YzTG4wcjBIdU81dFJQOUdUTGpqcmUrQmYxV3F3UjF6U2h1aC9XMjBFZlJ2L2w1cDA0MC9neTZTendMTmxERjZHZHBjRU1mcHhhN0V5M2xzOW9YOEJmYms5ZzAzMkRQYkIzOFdmWnM4Q0N1MkFBWml2TGFOeEhLMWJUQW0vbXMyWmptOTBhbThFT2g4UXlH''@;'; put 'put ''VHdJUmFvRGhnWXpkSWJSeGJ1K05Vc0c2SGFWV3BQdlA1NFVmSWcwVmhQajgyejMrR2VkcHk4NlJrb2t5WVl2Rmh2QXZXWk5tcExvald4Yk82b0UxMThZKzMrbnp3cjRYK2V4ZytlZW52WHZqQThkUUxkUE5PZEIzc1BUZ3lSWDc0L3MrTWhxM0FJd2prUUdUOWQ1b3pxcitQMGdYVU9JdCt5Zk1j''@;'; put 'put ''NHhhc0xlUi92a1NQZFdac05PbU02ajk1WWkrd0NTYVRzR1ExRklrYTlWOUtTYjFGUS9aWFQzaHJrYllXNUwrWDBySnR1MjMrWXNxV3R1Q0JOSTJPWmpMS1gwNFpuUjJkMmIwcms4Mk1EUFRGdW1LZHpVM2IvaFVWeC8vZ3I2aFViZm85b0lLdGF2cVQvOElLSHNrcXY0eEVwZlBLMzF2NUsvb2g4''@;'; put 'put ''YWY4NFpYODU0bUczQjloeWY4eEZneldmUktYNEwrak4rWThBUVp6cks0THV3RjNnZnQyMzMzMzdqZGZ0RDl4d2NGcldRR3VRb0VUR0Z3NDdSWnJQL2pCM1ovKzlPQ0ZKK3d2dnN4MHdTL2tPM1NqYUNJeld1WWhHbnJIZ0lsWjZScFFjT0JiTHhzd01XSnNvclVPdVJvWE0wdE81UkVRK0I1RkRa''@;'; put 'put ''RzYyaHFyTFFqT29OVWVMS0RCcTl4RlEySHdGRm5tU1NyWlNmS1ZsVFJoREpEczlyS1FLaXR2U2R3Nk5QYWVGZmZNSU5FTTd5OVp2bTFFTG1rWnVOYUxLNldYWUNHdDB2Y3Jic3BPc210M3U2OGU3Qzh1QUNYZWUxazdLMmdaNitvdks3SGIrZ2RtWlpubEpRNThQY2c1M1JPRTFoRFljN2Q3WDAv''@;'; put 'put ''djlXYUdESmd5QWtoZHI5VkxoTFUxK3BYTFhXaVI3MkxRUDFWaUw5Q1MyRFozUFcyOUs2SGw4Q1h1U3ZqajNoMnZTcEJqOWkxVXh1T1lmT2J3K1Z3c3Y0WHFMdlpjZGM3S25sL01QUmV2UTl2Qm81V3IxTS96L2ZmS2ZpcC9mbGNPL3VneDVUNktQZVJkZ0FNdmlnTU9xbjAyRERqWTdHTXBpTWg3''@;'; put 'put ''V0lITktIa1g4N2pVYUpFOXJuV2tRZzkzdjlRSWtsMnZlemZuUHJENVVuK2Jyd1A4N1UrcDF2RkNEaDhGUjNNNS9PZzh1M05Hb1lPazFUK20zQjZEYWQ0YnZOZHVmYTlkbTBEL0Q1RDhFaUlBQUFBQUFRQUFBQUVBQUE4Q0creGZEenoxQUI4RDZBQUFBQURUd1oyR0FBQUFBTlMrcE92L1EvN29C''@;'; put 'put ''SFVEeVFBQUFBZ0FBZ0FBQUFBQUFIamFZMkJrWUdBKytlOEtBd1BMb3YvTy95dFlTaG1BSXNpQTBSQUFwZklHcXdBQUFIamFkWlEvYUpOUkZNWFB2VjhHUlJ5c1dGRnNhekhXSmtTYTF0aHF3Y1kweFZTVFNGdHJnMElYY1ZBUnNhQ3A0dUpTc1E0dTR1UmtFRjBzNnVSVy93emk0SzZUT0VsVVdt''@;'; put 'put ''Z29XQXIxODl4bklqR0pDWWNmZWZuZWUvZWVkNzRueTVnRVA1S2xXcWtkeU1ockRHa0JRYjJJRGkrTWlEN0VicXhnU0M2aG53ckxmZXpYY1NTa0NVZGtDakZaajZRODh4ZjBKWG9sajJiKzE2V2oyS1hUMUNTNk5ZOWVQWVUrUGN2eFBQcmM4NXlyR1k1eEhmS1lyR0tyTjhXOVN0aXV6NUhUT1VS''@;'; put 'put ''MWxieUd0SjZuaXZ6OUVXbXNJYU90Mk1LYUpuUWZCcjNUeUhrZUZlTC9zMGc3M3VQenJGMnZJNlFMR0xFMUF3ZlFwdlBVRTJ6VVc2enpDbzZ6NWhXeVM3NmhSMGY4WHpLQnVCN0dYcDFCVm5leWxobXVOWWFJbkVPNzNtVHRPUXhqQ1lldzVML1hUcVJRd3JCM0J5a2JaNTBSTjQ5elpCWlpLYUZE''@;'; put 'put ''Ym5CZWpuMG0wT3dOb1VVajdHMGMyM1FkZXVRdU9xVUZGOGl3dk1KQjg5M3RPWTJZMVNndldFc2JRanlMdUt2ck5vTDRpUUVaY09OUityWEhlZFZBZ1NiUy9EUHZxb1ExLzRQNVJ5NVNYNzNOQ0ZlOHE1VUdrWEUwLzZwbC90Rm5ubG5XZWRWQTNqeHB2WXo5Sy9yMmp2Nmx5Q0wxUmEveS9DdmUx''@;'; put 'put ''Y3B5WVRUL3FtWCttYzlHNjlmMnJLWDFidnRYYURuaXVWaS8rcURzeTVqYnB6RXRhM2JlWmRLcno2ejNFNzNySm4zeXFQWGhNc2djV0E0dEMzOTVCdTB5aUhiejF2cXJZOGpWRUtrd3NBSFJ3Q2J1eTl4YWR1cklMRnVlNnNoOHU0eFZhT2RqSHYySDlnNjRITm9abW4vbGQ4SHlXRXZMdUJTWVBk''@;'; put 'put ''TlR4UEdkUEVFbHFEZm8xekRINENjcmE5YXl6dFB5bnJJTWVNVS85dzFXcWNlQXhoSHpMdk1lYVNyZktZdmtJdmtJSi9VdDd3cmVTNEVDMzhNa2dsUlk1L3dmTGg4ZTUvSmNHM3l6eVA0R2o1Znd0QUI0MmtYQ1hVZ2FjUUFBY0x1dU03OHVNenZQMjNtZmVwOTVudi96N2tFaVFpSkNJcUluaWVI''@;'; put 'put ''RGlCZ3hZc1NJaUlneHhoNUdSRVFQRVNJUnNZYzlEQW1KRVNFajloQWpJa1JpakpBaEVoSWlNVWFJak5qTFlQeCtOcHR0OForODdXT1hyU3NMVWRBMlZJVEswSDMzWHZkWmR3T0c0REE4REwrRkQrRmF6MmpQVWs4SllaQVVVclJqOWhuN25IM1ZucmNYZStIZXVzUHZXSEFVSEEwbjdrdzV0NTBs''@;'; put 'put ''WjhXRnVJQnJ4clhtT25EZHVjUHVkZmVweCt2UlBmT2VEYytKcDRHaWFCSjlpaTZoTytneFdrRmJmYy83SHIwVDNtcS8zdi9HWi9ObGZYbmZuNEd4Z1pjREZUL2xuL2VYQjBjR2x3ZlBNUmlid2hheEhIWWVnQUphWUNXd0hiZ0pOSEVLWDhDUDhZZGdJamdhekFaWGdoK0NGNFJHSklrTklrOFVp''@;'; put 'put ''RE9pUXR3UzdTZWpwSmZreUFRNVRtYklCWEtOM0NUM3lTYjVHUEtHdUZBaU5CN0toSllwbU1Jb2lVcFNrMVNXeXRFUWpkSUVMZENBSHFIVFRKcHBNUjBXWVgwc3hTcXN4YWJZS2JiRWZtT3YyUnJiWWpzY3drMXoxMXlOYTNFZEh1RjkvQTYvengveEpmNkt2d2tyNFhLNEhyNlBRQkUwd2tSQUpC''@;'; put 'put ''bHBSRG9DSXVCQ1dIZ2xkRVMzaUl1S2FJa3BzU0YySkVRYWxyYWtBK216OUZXNmttclNieG1SY1hsQ2ZpZnZ5b2R5UVQ2VkwrVWZjbE51SzA0RlUrYVVXNld0d3FwWEpWVk5UYXFUYW1aSWovWkdpYWdRTFdxejJndHRYZHZTY3RvbjdVUzcwTDdIdE5oQnJCajdFaXZIcXJGN0hkSlJuZEdIOUJF''@;'; put 'put ''OXJhL3FPYjJrLzRxVDhXeDhMMTRIQ0FCZ0RFeURaMkFSdkFZYklBOEs0QXhjZ3ArZytaK0JHSXlSTm1hTlBlUElxQm90bzVXb0o5cW0yMXcxMzV1N1p0bXNtbmZtZ3dWWnFFVlk4OWFTdFc1dFd2bS9hbXpBVFFBQUFRQUFBVHdBWWdBS0FEOEFCQUFDQUNnQU9RQ0xBQUFBa0FGQkFBTUFBWGph''@;'; put 'put ''aFpMTlRzSkFGSVZQQ3hxSWhLQXhMcnBxWExpVHZ5Z1lYR3JjQ0dva2xwMEpTQVZpc2RBV0UxL0ZOekR4UWZ4NUFqYytnMHVYbmc2M0NBWWxrMmErbVh2dXVUTzNBMkFOSDRoQml5Y0JIUEliczRaTnJzYXNJNDFyNFJqMkVBakhVY1NUOEJLTWljOHljNytFRXlocWhuQVNobFlWWHNHT0ZubW1Z''@;'; put 'put ''R2tQd2htc2E1L0NxMGpwY2VGbmJPZ1o0UmZrOVMzaFZ5UjBTL2dOYWYxeXpPOHhHTHFEQTdnWTRCNGVldWlneTVPYmVPUlhSQjRGbEVndFJrM3F1a3Jqayt1Yys4enltWHVMTEdxd21lY3BKeGVPcU1MZE5ubEU3VG01UTNMUXBLN0FuTHdhKzdqQU1SbzRJYzF6Mlo1eFdWekgvRlhKNHNxanFx''@;'; put 'put ''ZE9hazVWWGx6TjRueEZqVXRWMklGVE90aFQ5WnJrTThiRFdKVnorNThlaFgwTnVLb2d4M0UzNCt3cTMvN0VOY3VZeTNXVTQwdFdoOUdBdXlQK2tVaVQ0eHpWN0t0Ny90VE16YjNqWDN2UnJSdmtGdDl5NkJCTU9sYVQvaDJwcU1sUlVyRXl6MVpndklKZHZwam8xWlJ4UTUzTkNnUHB2MDF2bjlt''@;'; put 'put ''UmF4MUQ3dlFZOHhoenZnSEZmWVZqQUFBQWVOcHRrMWRzSEZVVWhyL2ZzWGZkTms3dnZWZkhYdmZFS1M1cng3RmpKeTV4N01SSnhydGpaL0Y2RjhhN2NXeTZCQUllUVBEQ00rVUpFTDBLSkhoQW9sZlJld2ZSZWFRSDc5d0pYaVR1dzN6L0daM3puelAzM2lFTGQ1MGJZQjcvczFTYmZwREZETExK''@;'; put 'put ''d1llZlhQTElwNEJDQXN5a2lGbk1aZzV6cCtybnM0Q0ZMR0l4UzFqS01wYXpncFdzWWpWcldNczYxck9Cald4aU0xdll5amEyVTh3T1NpZ2xTQm5sVkZCSkZkWFVzSk5kMUxLYlBleGxIM1hVMDBBaklacG9aajh0SEtDVk5nN1NUZ2VIT0V3blhYVFR3eEY2T1VvZi9SempPQU9jNENTbnNMaWRx''@;'; put 'put ''N2lhbTdtQk8zaWY2N21XcC9tWU83bU51M21lWjdtSFFjTGNTSVFYc1htT0YzaVZsM2laVi9pV0lkN2dOVjduWG9iNWhadDRtemQ1aTlOOHo0OWN4d1ZFR1dHVUdIRnVJY0ZGWElqREdDbVNuR0djN3pqTEpCTmN6S1Zjd21QY3l1VmN4aFZjeVEvOHhPUEswZ3hsSzBjKytmbUx2emtubEtzODVV''@;'; put 'put ''c3FVS0VDbXFraXpkSnN6ZUZYZnROY3pkTjhMZEJDTGVKMzN0RmlMZEZTTGROeXJlQnp2dEJLcmRKcXJkRmFyZE42YmRCR2JlSSs3dGRtYmRGV2JkTjJGV3VIU3ZpRFAvbVNyMVNxb01wVXJncFZxa3JWcXRGTzdWS3RkbXVQOW1vZlQ2aE85V3BRSTEvempVSzh5MmQ4d0lkOHhLZTh4eWRxVXJQ''@;'; put 'put ''MnEwVUgxS28ySFZTN09uUkloOVdwTG5XclIwZlV5d004eUNNOHlrTTh6RFhjcGFNOHc1TThwVDUrVnIrTzZiZ0dkRUluZFVxV0JoVldSTGFHL0hXalZ0aEp4UDJXb2E5dTBMSFAyRDdMaGI4dU1aeUkyeU4reTlEWEdMYlNTUkdEeHFrS0sra1BlUmEyWVg0b2traGE0YkFkVCtiYi8wcC95TE95''@;'; put 'put ''UGF1UThiQmRGRGFIRTZPamxra3RITTRJL0MyZWU5UmppK2NUTlN4c3phd2N5UWg4YlZZNGxiUjlNWU0yMHk5bTBHNWV4bDBVdG1kNnhETTkyazE2M0lXL3c1c2hZUmpvT0oyS0QxdE9halJtcFpLQlJHYms2elFkSE5PaE03T0RrOW1oMDNSd0RMcE0xWmdMZnlvZUxTbXRESG9zODNXYnBLU1pw''@;'; put 'put ''c2ViSm1XWTArTkU0OE01cWZRejBQT2Z5Vktaa2IvSDI4R1VZVUZ2T09xRVU2TkRNZnRzd1hpRzdzdlFFOVBhMTI5bW5IU1Izejk5MnBQVHA1MmVPRmhXNWJJc1dPbnJIWGFzcVdzMWJ0QnJITVpkNVBWR29yWmpqMFhIOHNiUHEzUmRhYWkrMm1PTnh3YVBqYjQrWXpUaEl2MDJXRklTOUZqbXNk''@;'; put 'put ''eGpoY2RLdzJCVGRpamxKTnlnb3FraHh5cTJZc2w4eTUzRlNQZnVwMldSTmYzWjZUaGduUi9RSkxyZDA3TEErMzJNTnZ1YTFubFcralJNY2pJYWk3akp1ZGJZMUI1RmJDY3ZZbnZxSDdkbHR5RUFBQUI0Mm1QdzNzRndJaWhpSXlOalgrUUd4cDBjREJ3TXlRVWJHZGlkTmtreU1taUJHSnQ1T0Jn''@;'; put 'put ''NUlDd3hOakNMdzJrWHN3TURJd01ua00zcHRJc0J5bVptY05tb3d0Z1JHTEhCb1NOaUkzT0t5MFkxRUc4WFJ3TURJNHREUjNKSUJFaEpKQkJzNXVOZzVOSGF3ZmkvZFFOTDcwWW1CcGZOckNsc0RDNHVBUDRjSldBQUFBQUFBVmlZOUd3QUFBPT0pIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OjUwMDtmb250LXN0eWxlOm5vcm1hbH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXM7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHUmdBQkFBQUFBRmFFQUJNQUFBQUFvdUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFBQUFBQkdSbFJOQUFBQnFBQUFBQndBQUFBY2ZOSDU1a2RFUlVZQUFBSEVBQUFBVFFBQUFHSUgxUWY4UjFCUFV3QUFBaFFBQUFjWUFBQU9ka0RDZnBaSFUxVkNBQUFKTEFBQUFDQUFBQUFnUkhaTWRVOVRMeklBQUFsTUFBQUFUUUFBQUdCcEVxOEpZMjFoY0FBQUNad0FBQUpzQUFBRG5uZERE''@;'; put 'put ''N0ZqZG5RZ0FBQU1DQUFBQURBQUFBQThFaEVCOFdad1oyMEFBQXc0QUFBR09nQUFEUloyWkgxMloyRnpjQUFBRW5RQUFBQUlBQUFBQ0FBQUFCQm5iSGxtQUFBU2ZBQUFPTXdBQUc4a0hkN1lsMmhsWVdRQUFFdElBQUFBTmdBQUFEWUxjNGdSYUdobFlRQUFTNEFBQUFBaEFBQUFKQWVSQkNCb2JY''@;'; put 'put ''UjRBQUJMcEFBQUFvd0FBQVRhdVk0MEoyeHZZMkVBQUU0d0FBQUNkQUFBQW5yVSs3bjJiV0Y0Y0FBQVVLUUFBQUFnQUFBQUlBS1VBMUJ1WVcxbEFBQlF4QUFBQVk0QUFBTjZNZ2lJV25CdmMzUUFBRkpVQUFBRG9RQUFCaUdYRmoyS2NISmxjQUFBVmZnQUFBQ0JBQUFBalJsUUFoQjNaV0ptQUFC''@;'; put 'put ''V2ZBQUFBQVlBQUFBRzluaFltQUFBQUFFQUFBQUExRkcxYWdBQUFBRFR3WjJHQUFBQUFOUytwdlY0MmcyTVFRcUVRQkRFRWtmME1MUG9mN3lwTC9Eb2ZYZlYvei9BSWdSQzBUUUNMUjZjZEZSa2pWc283SHpUdjFENEI3bTQwNDhET2xvcE5sdjY0NVNlWFhMVDUxc1h6U2ErVzNBRjNBQUFBSGph''@;'; put 'put ''alZjTmJKYlZGWDdPdWZlK1gvc1ZhaW5sUitnWUlZUWhhVG9nVEpRZ0drWTYweFJVeGx3MWFMYnBuSU1oakRIQ051Y0tjMkFXQXBzL1hTVUxRKzEwa2dxc0NuYldrWVl3UnR4Q1pCTERvREFHRmFweE1vUXRCcFYzejN2ZUQvdld0dE0rNmRQVGMrOTczM3ZPZWU1MzdnY0JrTWM0MUVMbTFOUXRR''@;'; put 'put ''QkU4UFloak9QNFJLTnppYnk2L0R4Vkx2cjU4TVNxWExGNnltTE5CZnpLYXpralk4Yms4aG1NTUpwakhZVHpxWEVzNkdpMnpWU1hhZ0lnUHllQVZmR0tVK1FJcVBvS2dKdDVBRHBpSjlmZ1FzWXlDY2h1Y0p5T2xFeVVZeEoyZGpUdmlaK1BEOFRFTThCT2ZHM0RrVUwvZUxsVDIrdit0K0pFQlYz''@;'; put 'put ''aHp3SkdqQTQvRSt3WVllVFkrSHJjbitKai9NSC8va3FEdjIrUFg0bzN4UnVaMUxETTlnZG42SEtHb0podytUM2hNSlFLK1FFU1lUdVJ3TFZHRUdVUXhjenVUbFZwSkNGYmpaNXk1amdqTStIcjZkeEtDRnduQkh3akZRY0xqTmNMakdCRndpb2p3QmhIaERCSGhMSkhET1NLSDk0bGlWdTlEcmhZ''@;'; put 'put ''VGVTbVRNaFJMdVpTVEs2U0NQSXFWelhQdHlWVEplRDR6aVJEYmQ3cGp0UjA3MjdHM0hRZk1JWXBRUXhUalJpS1ArVVFKbHVMN1hDR0pKTEpJSW9za1lDTWU0L3hHb2hpL3dpYk9md0svNWZ4bmlCSnNKM0xZUVJUaDkwUU9yVVFSbmlkeWVJRW93aTZpR0cxRU1YWVRlWFFRZWV3aDh0aEw1UEVu''@;'; put 'put ''UXZCblFpdzdFWTRUSmZnbmtlWkZMUzlxZWZHV2wyQjVDWllYYjNueGxoY3ZJMlFFODNXbFhFbE9jaFM0YWpVek5JRTFybVp0cDdLbTA1bVpHY3pJVWl6RGQ3RWMzOE1LMW5JMTF1Q25lSkJaV01mb3R6T2k1MW5KRjFuQmc2emNNVmJzRFZicUxIZnl2cDJzTXI2M0lqbGYrb0NkdzMyeW5IRVBw''@;'; put 'put ''cjdhcWJ1TjhYLzZVYXVOOE8rWkFVZmVKQzcwOCtUNVR6cFBjV2Y4ci9nZjhTTTlKeTk3MHVJejhkWjQ2MGYvZFdlZnQyZVVKempSaEpnbUZGOGhIRzRqUEc0bkFoWVNFUlh4R09ja2FoQlRnNW9hRkMxRWhHMUVaSlVXcTdSWXBjVXFMVlpYUlJmaGNKcHc2Q1ljUGlBQ0xoR1JESkVock90UUdV''@;'; put 'put ''b2VKc1BJU1VYRktpb3lXa1p6ZlVVVnJpQktNSVFZWkVvWFU3cWEwbDFCNlY4aXNrcjNGaytVaVNkblNuY0ZwZmRvM0Z0VTNxTEtXVlNYbFo1cVBGWDNTOFRBdWs2aTlhWlpMVVNZS05kWm5EblRyelA5YWlIbVJNVmFpRHpSc21iaXp5cmFXUlp5TWxtdTVkdVRUNjhhUmppZjlicU5jUzFrSkky''@;'; put 'put ''TXBBbVBNNW9uOENTZVFqTWplb2FSYk9OcGJPTnVPN2pMdmR4ZEYydlF6WjFkNGc2RzhtMGorSmJSWEhHTTZWbFJhaDJsUFA0SjdYTE13L1cweE96cjJZazZvekhrazh6L0hsa3I2K1ZoYVpMTjBpeGJaWWZza3BkbGoreVhBM0pJanNnSk9TMXZ5N3Z5bmx4U3Iza3QwK0ZhcWVOMG9sYnJOSjJo''@;'; put 'put ''TjJpTjF1bDhyZGM3OVc1ZHBNdDBwZDZ2YS9RaDNhQ1A2aWJkb2s5cmk3WnFtKzdXdmZxS3ZxcXZhNmVlMUc1OVJ5L29SUWNYdVVHdTNJMTBZOXg0TjhsTmRsZTdtVzYydTlITmN3dmM3ZTVyN2g3M0hiZmNyWElQdUFmZHo5MHZYS1A3dFh2Uy9jNXRjeSs0bDF5SDIrZis2djdtRHJ2anJzdTk1''@;'; put 'put ''Zjd0L3VzKzhPcUxmS212OEtQOFdEL0JWL21wL2hvL3k4L3h0ZjVtZjZ0ZjZML2g3L1gzK1JYK2g3N0JyL1hyL2NPK3lXLzJ6WDZyMytGMytaZjlIci9mSC9DSC9CRi93cC8yYi90My9YditVdkFoSDhyQzhGQVp4b1dKb1RwTUN6UENEYUVtMUlYNW9UN2NHZTRPaThLeXNETGNIOWFFaDhLRzhH''@;'; put 'put ''allGTGFFcDBOTGFBMXRZWGZZRzE0SnI0YlhRMmM0R2JyRE8rRkN1QmdoaXFKQlBCMnJkRHU1d1hpMmNhMXhVOEpZWjl4cW5qWEdqUm0reFhpSzhTeGpXNDExU3V6NnpHcVRsSitwY3BWeHRmSGNoTEhhZUtlMmt4dk1mMTBQNDVUeHhjeFR6Y1pWeHFYR3Q3aEY1QmJqVmYyem5zdkVXR3YrUG93''@;'; put 'put ''N2pOdU4xL1d3M0pYR2J2WVM0LzNHalgwNXpjQUFPNmszbnFRZG44VDZ5MTY1NnVpUDhWWGpuY2FyZTVoNSt6VDhmMVptYm50NFZXYlB2ZXhNVFJ2TWY1WDVzL1pzeStGdnpMNHJrL24wTGIxc0cwM3JtL1UzbVQwM3RXMU9xcG0wT21uVXFUNExkc0dmekdrMWU2ZGJlVm05QlkxMW1uMDBzUXMx''@;'; put 'put ''VFhPU2Fqdk5UTmJmbUxFUG1kMWdOVHBxT2ovVm8wQnF0ZVB5aVVCZi94U3pMNmEyelVsVm5mV25KMmhXUmpQVm1jeW45ZzZ6RjJXcVlIblRTdk0zbXo5VldsWEdUck5hbXNsOFgvdTgyVCt5Nkc0eSsrOW1aMWV1amJjbEs4ZlBmYXhTMlRmT0xaenVqay9CdldjcVBtdjNVdkRlTlpGWlNXNm5u''@;'; put 'put ''bDI3aWwwd3VXRkhtTUtiV0E3VGNBMTdXTks1UzltM3IyTlBUenIzRUx1amxsdm5Ic3J2VmJYc1EzWEVNTnpFUGplY25lNVdmdmVwSnlxdGwzK0dYZThPZHEybHZMdU50ZHZiZEhiMHpWeHZDenZmWE90OVgyYjNhMmVIL0NNTzRGdTgwWjNGRCt4VzJZVHpFdkE0Ty9Gb3RGaFBiZU4rUmE2dzcy''@;'; put 'put ''WVJKRjVoS216QVBlUzE3SFlsR01sM2pXZEVrM0UxZHoyYnU1eUhCUnc5YU5ydE1qNXRiR2NHUnpKODFQakh4czhabjdDc2pUTzdCRi9rZSs3RnR5VW5SVklzZVNtUndWTGFkMGYvQTNJRm9iY0FBUUFBQUFvQUhBQWVBQUZFUmt4VUFBZ0FCQUFBQUFELy93QUFBQUFBQUhqYVkyQm04bVdLWUdC''@;'; put 'put ''bFlHSHFBdElNRE40UW1qR09RWVRSRE1obllHZUFBeVFtQTBPb2Q3Z2Znd09EZ3VvZlp1bi94Z3dNek9jWURSVVlHQ2FENUpoWW1kWURLUVVHSmdDOGlRb3JBQUFBZU5xMWsxbFFqbEVjeG4vL3QzMFJLaFQxOXZacDAwYWlGRVgycGNpK2xLelpzcS9aR3VzUVEwVlN5SjRrb3hrVFUxTzJHKzY0''@;'; put 'put ''TldPTXZzK1ZXKzRNSGNkWFREUE11SEptM25QZWM4NmM1NXg1bnQ4ZmNLSHJDMEYwajFUcW1Uam5ybEtzeHlXTXc0MkJsSENMT3U3U1NCUE50TkFtSGhJZ2d5Uk1Ca3VjSkVtcXBFdW1USlVjeVpOQ0taSVNJOVY0WmJ4M2lUS1BtNjNtRS9PTDVXNEZXc0ZXcUdXem9xeGhWcnAxMytZZitVMHBm''@;'; put 'put ''WWZGalI3YWoybmptZmhLZnpIRkpyR1NLQ21TSmhtU0pkbVNLd1d5UVRacjdaZkdXNjE5eUd3eDI4M1BsbUVGV0VGV2lGTjdxSlgyUzF0OVZDL1VjL1ZVdGF0VzlVZzFxNGVxU1RXcUJsV3Y2dFExVmF0cVZMV3FVcFdxUXBXcE02cFVuZWg4MDVuVm1mVDlrNlBjVWVESWQ4VFlCOXI5N0Q1Mkw3''@;'; put 'put ''dWIzZWo0MnZHNTQvQ0hrSGZKWFY3OXArWnVlRHVUNEk5YkJLUDd6L2lIUnRkSkYxeDFkdTU0NElrWDN2amdTeS84NkUwZit1SlBBSUgwb3o4RENDSllaenhJcHg2S1NaaE9KQndiZzRrZ2tpaWlpV0VJc2NRUlR3S0pER1VZU1F3bm1SR01KSVZVUnBGR09xTVpRd2Faak5YTVpER2VDVXhrRXBP''@;'; put 'put ''WndsU21NWjBaWkpQRFRHYVJ5MnptTUpkNXpHY0JDMW5FWWsxYUh2a3NwWUJsTEdlRmZ2OE9kcktiWWc1eG5OT1VVMFlGNXpsSEpWVlVjNUVhTG5HRnk5UnlsZXZjMUJUOVpQUTJEWnFsZTVxbW4yMFZxN1VkMFd6Z2JMYzM2MW1qKzEyYytPMVc0VjhjdkVBOW0xblpZMlV0bXlSR2oxdll6akhz''@;'; put 'put ''T0NSYzh4a3BVYm9DSXJpamR4NmdhWllFWFEveDNXZUtuR0hFc28yOWJHVWZlempBUVYxTCt6bkNVYjExbUZKT2NaTFh1cHA2c1U2OHhGdDgyQ2grbW4vUEg1RE5xdWg0Mm1OZ3dBTEtnVENESVlOcFBRTUQwMjRtVmdhRy95SE0wditObVhiLy84SjBqMG53LzVmL2ZpQStBT1lMRGdwNDJxMVdh''@;'; put 'put ''WGZUUmhTVnZHVWpHMWxvVVV2SFRKeW0wY2lrRklJQkEwR0s3VUs2T0ZzclFXbWxPRW4zQmJyUmZWL3dyM2x5Mm5Qb04zNWE3eHZaSm9HRW52YlVIL1R1ekxzemI1dDVZektVSUdQZHJ3UkNMTjAxaHBhWEtMZDZ6YWRURnMwRTRiWm9ydnVVS2tSLzlScTlScU1oTjZ4OG5veUFERTh1dGd6VDhF''@;'; put 'put ''TFhJVk9SQ0xjZFNpbXhLZWhlblRMVDExb3pacjlYYVZRb1YvSHpsQzRFSzlmOXZNeGJUVjlRdlk2cGhjQVNWR0pVQ2dJUkoreG9rMll3MVI0Sm1tUDlIRFB2MVgwQmI1cVJvUDY2SDJKR3NLNmYwVHlqK2RBS2d5Q3d5TFNEUUpKUjk3ZUN3S0cwRXRnblU0amdXZGFyKzVTVkx1V2tpemdDTWtP''@;'; put 'put ''SE1rckNMN0VaWnpkY3dScjIyRW84NEM5SWxRYWxaL05RZXFJcG1qQVF6MlVMQ0hMWkQrdFd0Qkw0TXNnSGdoWldmZWdzRHExdDM2R3NvaDdQYmhtcEpGTTVES1Vya1hIcFJwVGEyQ2F6QVFPVW5YV29Sd2wyZGNCcjNNMFlHNEozb0lVd1lFcTRxRjN0VmEyZUFjT3J1TFA1YnU3NzFONWE5Q2U3''@;'; put 'put ''bURaYzhCQjNLQ3BOR1hGZGRMNE1pM05Ld29LVEhTOVJIUmt0SmlZR0RsaE9VMWhsV1BkRDI3M29rTklCdFFiNjB5aTJKZlBCYk42aFFSV25VaFhhakJZZEdsSWdDa0dIdkt1OEhFQzZBUTN5YUFXalFZd2NHc1kySXpvbEFobG93QzROZWFGb2hvS0drRFNIUnRUU21oOW5OaGVES1JyY2tyY2RH''@;'; put 'put ''bFZMeS83U2FqSnA1VEUvcHVjUHE5Z1k5dGI5ZUhnWUJZeGNHcmI1ek9Ja3UvRWgvZ3ppUStZa0twRXUxUDJZazRkbzNTYnF5MlpuOHhMTE90aEs5THdFVjRGbkFrUlNnLzgxek80dDFRRUZqQTFqVENKYkhoa1hXNlpwNmxxTktTTTJVcFUxbjRhbEt5bzBnTVBYRDhPaEswS1kvM04wMURTR0RO''@;'; put 'put ''ZHRodkhobkUxM2JPczQwalNPMk1ac2h5WlViTEtjUko1WkhsRnhtdVZqS3M2d2ZGekZXWlpIVlp4amFhbTRoK1VUS3U1bCthU0srMWcrbzJRbjc1UUxrV0VwaW1UZTRBdmkwT3d1NVdSWGVUTlIycnVVMDEzbHJVUjVUQmswYVArSCtKNUNmTWZnbDBCOExQT0lqK1Z4eE1kU0lqNldVNGlQWlFI''@;'; put 'put ''eHNaeEdmQ3lmUm53c1p4QWZTNlZFV1I5VFI4SHNhQ2c4ZHNIVHBjVFZVM3hXaTRvY214emN3aE80QURWeFFCVmxWSkxjRVIvSnNEajZ1VzVwelVrNk1SdG56WW1LajBiR0FUNjdPek1QcTA4cWNWcjcreHg0WnVWaEk3aWQreHJuZVdQeUQ0Ti9peGRsS1Q1cFRuQndwNUFBZUx5L3c3Z1ZVY21o''@;'; put 'put ''MDZwNHBPelEvRDlSY1lJYm9KOUJUWXpKZ2lpS0d0OTg1UEpLczFtVE5iUUtIMDhFT2l2YXdieHBUb3dqcFNXMHFFa2FBUzJEcmxuUU5Pcno3SzFtVVFwUmJtSy9zM3Nwb3Bqc1JSbk1nQ2tvNUtheHNPenZwRVJhV0R1cDZmVFJ3T1ZHMm91ZUxEVmJWbkdGdlFmdlk4ak5MSGszVWw2NEtTbnRS''@;'; put 'put ''WnRRcDd6SUFnNjVrVDI0Sm9KYmFPK3lpbUpLV0tnaVBnaHRCZnZ0WTBRbUxUT0RMb0VpWkhHeXNnL3RpaDA1b29KMkF0OTYwaXJ2MjBMdHozWHlJRENiblc3blFaYVJvdk5kRmZWcWZWWFcyQ2hYcjl4Tkh3ZlR6ckN4NWhkRkdVOHVlOStlRk94WHB3UzVBa1pYZHIvdVNmSDJPOWJ0U2trKzJ4''@;'; put 'put ''ZDJlZUoxU2hYeVg0QUhRKzZVOXlJYVJaR3pXS1VSejY5YmVESkZPU2pHUlhNY0YvVFNIdTJLVmQralhkaDM3YU5XWEZaVXNoOWwwRlYwMW03Q056NWZDT3BBS2dwYXBDSldlRHBrUHB1ZG12Q3hsTGdzUmR5elpOZEY5QjA4SVIzaXZ6akV0Zi9yM0hJVTNLTEtFbDFvMXduSkIyMGZLK2l0SmJ1''@;'; put 'put ''VGh5cEdaKzI4YkdlaUhVazM2QnFDbmtndU9QNWU0QzZQRmVrVTd2UHpCOHhmd1hibStCaWRCcjZxNkF6RUV1ZXRnZ1NMS3Q3U1RxWmVVSHlFYVFud1JkVkNzd0o0Q2NCazhMSnFtWHFtRHFCbmxwbFRBVmhoRG9OVjVqQllZdzZEZGJXRHJuY1o2QlVnVTZOWDFZNlp6UGxBeVZ6QVBKUFJOZVpw''@;'; put 'put ''ZEoxNUdyM0dQSTF1c0UwUDRIVzJ5ZUFOdHNrZ1pKc01JdVpVQVRhWXc2REJIQWFiekdHd3BmMXlnYmExWDR6ZTFINHhla3Y3eGVodDdSZWpkN1Jmak43VmZqRjZUL3ZGNkgzaytGeTNnQi9vRVYwRS9EQ0Jsd0EvNHFUcjBRSkdOL0dNdGptM0VzaWNqelhIYkhNK3dlTHozVjAvMVNPOTRyTUU4''@;'; put 'put ''b3JQRThqMDI5aW5UZmdpZ1V6NE1vRk0rQXJjY25lL3IvVkkwNzlKSU5PL1RTRFR2OFBLTnVIN0JETGhod1F5NFVkd0wzVDMrMG1QTlAzbkJETDlsd1F5L1Zlc2JCTitTeUFUZms4Z0UrNm9uYjVNcXZObjFiV3BkNHZTVS9YYm5YZlkrUnRsTTdvc0FBQUFBUUFCLy84QUQzamF0WDBKZEZ6RmxX''@;'; put 'put ''aFZ2ZTczZWxPcjk1YlUybHE5U2QydDF0SnF0ZlorV216dHEyMWsyUmF5c0MzSjJHQmJack94TWVDUUJRSWhKTTVrZzRTUVl6SWhZSlpBSUNReldTWWh6b0ovZnVZUEp3bVRTZUNmSkgreVRENGhrOG1BbnY2dHF2ZGFyYzA0ODgvWVVxdjd2VnYxcXU1K2I5MnFSaVkwdlp6RUh4ZDhTRUQ1eUkw''@;'; put 'put ''S1VRQlZvUlJxUnUyb0R4WEtucTZPdHBaMFl6SWFDWllWRlhqc05xT09JRk50VE8rMyt5VjMwaDF3SjFPQlZESWxzYjhTdk5XdTBtdjBMNzBEVjFMYWV4V0dOVWduVS9qanlqZHgreHVkWGVlN3VzNmY3NnJ3Kzd1NnV2WjMrZTg2djcvQ3Y5OS8vdng1Ly83OWQyM2RlbjV1YS9rUGhGOTMrME4r''@;'; put 'put ''K0xsam9XTHIxdUFzdk52cWIrdXEySCt5eVZzemR1elk0OGVPamRYTSsydjg4SU1RUVZ1WDMwU3Zrd3RzYmlHNUFtR01waEZDMWtGRWlEQ2p3NExnRllaME9sMit6aHF5Mi9TU04rWk1DZ0ZQT05YUW1LejN1RjFpWVBTK2t1MkdSS0tpTEZGZFRpNG85YityOFpjbEVtWCtHb1NXbDFFblBvY2ZK''@;'; put 'put ''aGRzRmNpRWtFMkExMWNSZlc0RnZOd096L1doTXRRdmI4MFhDZElMQkJPRUQ1aXgwV2dkdE5yeUJFa3lURnRNeEdDd0Qrb3dJZmxrQ0tHeTBwSmlhT1VyS2l6d3d2T2Q5dXcvcVNTR3BhUVVrQUpwOXB0T3N0K2t4SDRsZXBPUStFSHZRblE2ZWlaNmRYUy9aMzk4empNUDc4N0FsWG5QdDg3RXor''@;'; put 'put ''REhIOThGQ0QyLzYvRmRuNE4vdXg1SGdKbXk1ZWRJTC9rektrRkJGRU1KT1JhTCtzdUxDcjBlbDkxc01raFdSUENBSGlQY0QvUENCTS9DQkwxb3FOUnVGd0JkUVJHSW5BcEgwaDV2S29FQmJXbWd0Y2NyaFNQdVV1eEdjTldLM1k3R1ZBTmNJTDBuRHUxKzk3NitnY241K2NVOXUyKzR1cWRuNE5o''@;'; put 'put ''eDVWZzRHb3kvMmxqVGRHUlJrcnR0dTZlNm5kLzA3WmdZWHpTM2Qxakc5N1RhdmxLMDh5cnNET2FmTjlhVUtrZnJLL3dSMjlOSWo2cVcvMTJ3a21lQnNrN0FjZzFxUmQ4ZGZMSmdiS2NjTTJPOUNXTlJqK2VSaUF4RzBiQ0FkRG8wUXpDbGZCN2dYNWl4U0VRUThvVWgzK0NURVdoU2M5a21DRUJa''@;'; put 'put ''TzJuR2dpWEpLdzM1NU9RR0xRZ0JXTm9NYmR4cWFrb08xOWFXbDd0Y0NOVzIxclkwTnBUWGxDY3F3NjR5VjJsUmdkTmh0OEZrckdHcjVJNDVLREk3Y0xJZXNPaXk0Z0JPNGdCRFk2QkNkTHM4U2JUbWZnZGV1ZmVwb1doMHVMWnVPQm9icXNQdjM2T0U5aXdtRW9GZ2RTS0E1NFppY0xGdWlONEtK''@;'; put 'put ''bW9DQVhweEtqRmFXemVXU0l6QmF6VythbWtjZnpZZGl6ZWxxMk5wWlNJeFdsYzdWbFBESUFiVDhWZ1R2WVVvMy9pWC8wamVSYjZFeWxFY05hSU91YlUyRVM0cktTNHFNQmtGVWc2OExwQUJ5dGQ0QnNUT002Z0hZV09ZQWVhcHJ2YjdxeHVyVS82NFB4YXZFQ1ZQVEI4UkF4V2NnWEpuQnJlOGpX''@;'; put 'put ''bXZLSGtSblpxWFQ5T1JEa2VBcldDcXBIaGthckZ6dnFWdnRMaWdicktoWVh2TjBMYjZ2cXFTNmJyRTljb25FcDdDdHBwb21Ta3oyUk9MOWRUbGpZL1ZUclYzVHdjck84T0prVVQxY0UzellMaDFxSDBndms4K1RscmlnY0xhMG9KNG9LSjY2UytwM1dNRnpjRzZGb1F3bFhIMExaQmxDM0xLTnFw''@;'; put 'put ''QkdIbnhrRHRJWU9DT0ZWMGhCYTV5UjN5K0NQQTdmdlZ3MEZkWjZRc2U3a1cwajhibHEvQVkrUXJLUStJemVYcGNHMk1xSnUxbHMvQktuMXRjUEpnWkh4NGV6K3o2K2Rtei96TGV0ZTNDa1NOUGJPdG1iY1BRVnRiYVN0Q1dZeUdTNWdnS1R3d1BUMlFPUWcvejI1NDRjdVRDdHE0eDZPUG5ZNnh0''@;'; put 'put ''QXUvSCs4amZvWG1VbGh0bWhucWFxZ0NYTUljQkFXTWRSaURXOHlMVzY4a004SzVIRC9vSElPZW1KdVdPdXBxQVB5WlJSb1NCcGh2VG9nVC9BeFhoQ1AvWUNCVGc3eW1sdkI1dktmYXl6eG9xUktrUmJxWHBSeSs3WU1VU0pTYUZkTHZnVTZBQ09ramdDTDhnQmw1MG1VV1NWeEJ3NlkxR20wNXZM''@;'; put 'put ''WWlXVzYybDFWNnJYbWMzaUFadmhXUTNFOUhzeXJPNlRGZ1U3QzRoNE9DZ0JzbGVyUzl3dXdwcVhaSWhCMW9Rc1FsRVk3L0Q0a3VVNWhzOWZyUE9hRFNZSElhOFBKTW9tdktzQm9kWk1waDAxbkxSWnNndlRmZ3NEb2ZGVmFzcmRPYzVoRElUQlRZYThuV21mQ0lhamFMTm9yTWFEQ1lOM2wyb3Ez''@;'; put 'put ''VlpIQlRISFdpV0ZKSTJaRVpoT1lCMEF0YnRBRjRIellFRmRBRFVBWjVHZ090aHBzUnRvbFFVd3dGcURWUFVLaVpKNFpldSt4TDg0S0lYWGxqNDhwZHBmNW5sUmZRTDlFRmtSVjRaeG85Nk5aNER3UWs2S00rQlNGVGs0SG84WVNtclRwU0hFOVhKYXhPMU5lWGxpZmJheXUyTnRLODY5TSs0QS9l''@;'; put 'put ''QnRCYklia1E3MmtINUFrYUVZRVEyMnBuVDcvYlg0VHpsajdqdkVPT1pkckNaUDRIbm02bjFwMWRBQzJMc3haUTd6TWdVRklBcmNpM2tJZFU2V3JLV0VTLy9adms1L0IzeUszaXVYYmJTVHMvQ3MyL2dENlNxREc4NXE1dy9TMzcxOWlYRTdHWGQ4cHZrSHZJaXFMOHlGSmVyZ0J2WmpMbld3R0Nv''@;'; put 'put ''MlFCc05qQ3laYmJTQWcvVGsyQjZZcnExZXBDa0doTEFYRlN3U3VGSmhydUhoKytlbkh6ZjBORDdKdXRINC9IUit2cXhlSHlzM3JMN00vUHpEKy9lL2ZEOC9HZDJMM1pjdjNYcjllM3Q5TFdENFlBU05nMHlMeUtmWEFDa0ZBQmZBMXlyWTV5UGgreE9oam9wa2s3YUF5L2VsUHo2L2xPa2JIRG4y''@;'; put 'put ''YVZ4eE5ySFlWSmhtRThCaXNvUnN3bW1BOXhBeUFCREoxT0gxQUdaUnN3RzJiM0JzRTRxaUdXd3BzV2xTS09xLy9JeGtLZDZTVzdjVXB2Y1Zqays5MkRQZFpuK3lmdHhXcEhtdnB2Y0hxdHBxYXNkZkhmak5SMWJidTYrWVpFOXV4UndHWVZuVjZHTTNGWllBTStwd0pqQTAyRUlBOVNHZzBFL0FF''@;'; put 'put ''L1d6UUJ6d2tBUTBzOVFKZUJsOGwrRktvTkJmekFrU1lWQVphcGtrdlhNN2tpcHBLZHg3ZkFrRmUzL2VIZDhLTFEzM2Q0MzJEODgzTkhYMTFRM0hoclkrOG0rNjl2N1d0cTN5emNNV1RLcGlhcEVVM1dpQmgvR2RmRm9LbDQxZEtKMlIyUGJoTjI2dmJOMWR3UG5nMUo0MlFsNE40RzJxNWFqRnZB''@;'; put 'put ''MzhJQ29oemxnQkg3bkhLQ09tZGg4M1pEWmJNNHo1NEZNT1d4MHJDRi9CQ2Z0MVBNTUZHSUJuMVlldCtDdDUyWm1UdjNrM0N4K1FSay9kQTVJR0ZGK3pPa1RBeHcxd0hPS0tZNGNvQXZ6TEVTQXpyRWVBWTUwQUtFRHV5NElaSm9iOWRVNEFnK3R3dTRNQmhpT3dQVlJNVlFoUmFnd1NZMVpicnov''@;'; put 'put ''d01EVTNvN0JvZmFSamgwbS9MenlWUkhlTGJSMzNUSml1WFpxY2t0RFNxNE40dXNXbjRvbXIrbmVlbTBMeDBFdGpHMEE2T2RERWRRbmI3RUJEdXpBUEFWWUo0U3dYcWNiRUVHeDZQU0NiaDVsamFzRVk5TjBSSEV4akRCU0hBNzRvWXVpWUNoc0FEOE5xU09pZW9PcGJJbExpUVFmSEZtMjh5VHhJ''@;'; put 'put ''d2M3dW03c3YvZmU0WHQySHQvVkh1aU8xUTRsZE9WWE54ZzcvS010ZFlQNUJUZmlMelhzNitvKzFQYVZUeDU4ZEdaNHBxeXNlYUU3VktVOFd0RmNudTVNeGo5TThadUVpUVNZL0pUSnhXQm9NSk1lcW5jdzg3M0Ixd1Z2aHpxUTJKL3l1MEVoUEtBOGpQK2cvTzk3U2Z2aTFVc1hxSDhSQlR4MHFu''@;'; put 'put ''aElvUjY1MHlVUzBLNERVczcwVlMxaGdPbGpJQkRURXBXVkZBT1ZxY3FHbW1xS2g0cHlpb2U0a2FxdGpUd01GVE01M3BXWHZnZmJaQ1hVeC9qWGsxdUhNODJkV3hhN3VvLzNkRFhKUTcwbkIrdEcraHNiKzBacTI4ZGpYUkN3eE1iYkxUVlRyVzFUM29MUnB1YnQ4ZXJ0VGMyajNnSzRzck1HUDlR''@;'; put 'put ''WXJVdzNWc1VhQk9WU1U3eTBwb2lRb3BwUzZrUVJWQTl6SEZxaGRTblFGK2l0TjRMQUdnQnJPcGlzSHNSVlQrYUI2UVdZb1NCNEJuUHNnVVpyZnhtZFl5Z1lZclQyY0ZKejRRVXJURCtvYzNhQTVlYmFFV2o5OSt1b0xEUHFOMU15VjFLQ2t4ZFhVNWxUWG5rRXlNeklUZWZBN0FXeGdHM3dVdDFO''@;'; put 'put ''ZFRVYlhpRVBzdlE4eUxKWUVMSjRMUjZIalJrUlVYVXROQ05DTmpBb0ZlcGZmRVN6TE1wZDJqdUl2WmlkSkJhSXZmSVJza3ZJRG9pNkZSbWZ3dmg1Zk91VHlSamx3elRhVGtTeUcvaFFmRVlrNERzNVV5RjNIbmFuOFNYbGIvQkJISm45MGR5REQ4NHp1ZXRBajVGQy9DZmdQQWwxREQ1WkJtR0JB''@;'; put 'put ''MUV2VnBqVjRrWTdCcysvZ0hJeWplUVFoQkJraDZySWlUQTg5UnkxOEZTVFV6VkEvM2ZnbnlvaDl2dW5oWk1MTUo0K0dJOVhHNDhBNDBsWDQ1VGVyZS9EQjJFOGw1UzZGeDk4Y081SHN6K2k0M0V1djRsZkFkNXdJejlxbDFzMG5uQUMrd3RVbWdRZEVnN0F5TGp6UnJWaVZrZDVQQjYvcHp6a0RR''@;'; put 'put ''YVpiblNxQWk1RlZyamV2U3JLZldKb2IwZjljR2QvOVEyOW5mdlQ4K1BIdkJydTc5WTFWNFliK3dhU3JmVTdHN3V2Yyt6NVB5c0JNRUh4NWZjTFc4Z2pTRVlqNkpMczlwZVhDUWFoR3hzTkRxd3p0cmNSRVZpWVIxalZFUGZxc0hFUzFEaEVUVlM3aWlicUV1NURxdVlDdldBd0NET2dkTzBHR3Ba''@;'; put 'put ''VjBVZ09pR0V3Q29iNWQyeXNCOExVVVRVdElQMzg1cTBrU1p4RW9pak5zT2FqRUpBVmRBSVRkNDUwRHZkdGhWbGt3dUZZS0JnT1d5VGZPdGVpZ2dZZFdRWHE4ZEt3aEF0U1BjVnZqdGRSenp4NzBDZ1ozTEFpYlowWDVoYS9kblQrQy91YmQ5WFZ0bHVLUnhLRDA1MEhXMnE2blpaNWE1N1pXdTRy''@;'; put 'put ''YnFpWStzVDAzQmZtOWp3NDAzWWc1V28rMXUzdkYzRWlGcEhERGRFYkRueGg3c2pYanUxOWVIcjhXRk1zRW83dEcrcyszbDNsYnpQMGRUU08yb3JMS3JlMzcvakE5cmtuRHV6NXhKNlM4cEtnSDNzbk1yWllmYXkzcXJxUjJ4WW52THdLZWxrQ0N4dVRLNDFZeDRKN0hYQzBEcXdydFhVUUdWQVB4''@;'; put 'put ''OENjWGU2eUZvQjFsVmdJR2pGalVxcDhzZUVlWEFZL2Q4K2VPSEhxRkxtd05QNXI3RmYrQmRBT1VRZDVIL1NmRDU0UDQxclFYL0FFRWVSRnJ5TjY2bmFvQ1JnSmM4K1lQcXVvMEc0ckx5MzBGL205Ymx1QnZTQldibUNPS2NPOHBwLzltRm5aR0hZN3RUZGplTHgxVDhOc1cxZlQvb3p5R1p4TXRM''@;'; put 'put ''WW12blF4MmRtWnZFZ3V4RWZyOWplVTdHNXEzRkdMUDFJWEN0YzlydnhUT2haTC93UFZDOVdnZHo4R3NsV0NHdVE2Q09OUm9SbHNhUkdZV1JBdFZYOTVWaVdKNEVJSktnNkh3alJKbEdVTmoyWkhjK21PRzgvdjIzZCs3OEM3azFQbFUzVWRoMlg1Y0VmZGxIOW4vWHNHTExPZm5abDVaTGExWVZz''@;'; put 'put ''bzFuVkU3anpTRlExUHBGb1piU2p1dnNWOEh6ZUxKTEtvWWtHMGlpcUwyZVV3dXkzdWNMbWVva2hqemhnT3FVd1l3L2F4TjQ0K3VXL2ZrMGZmUU10OVJ6T1pvMzEza2dzN1A3bHYzNE03ajdVZTdPNWVhRldTRkFjUW1ZTHR1UURxdUVhT2F6cU5LaERkTk9nU2E2Nkh5angvTTA5RFVYM2lWdldi''@;'; put 'put ''M2UvK0I3eFBlUkMvZCtrdG9pZnQ1eGVmV1NRWEZybVBwZlZ2UkZWeVdPc2ZlRTNIZXRYY0FMaGhSRWJhTStVejFyTTlvUFY3bW5iNnhLTHlPdStVMCsxdmdXNSsxQ28zMllCY2R2RE55N0FPbUF3NnBscFJyME9NelZhMEluT1J3Qzl3QXZFQ1BBRHoyM05NNG5vaXBnTDRYVGhVZDI1dzl0Rjkr''@;'; put 'put ''eDZkSGZwdzNWVDVnV1RtT2xtK0xoTVpLMzhNbjFUK05kbk9TZG1XekpLeXlIdGFtL2RIR1Y0amNsRDFKUStBRDB2blRQTkorV2d0UGpHZE1md200WlY4OUxUeXQ2ZFA0MGtxVmppay9KUmNVSDZOQzZDWGZtajFMWmJMcEhtSW5GaUVoM0VRaVBSellRUllPOWlPZndKWUcrVWs1dnJqQWU1N3dl''@;'; put 'put ''Qm1CR0FvTDBPOURlVTdRenBvdnVMcXd5aW91RDE1dW1LN295K1M3RHpWdXRCbGtlc25nalg5TGZnbHBhN25jQnVuN3loMGRaN05zMXd1TVJyMEJCeDBQSUJaeGt6ZytVeW53OEh0WWRLT2swWWNnTkF4TUhvYVYzOU0rUjJPZlB6MTZkTXd1U2Z4bVBKRDVYWmN1ZjhmZUwvVXFTaUZmdlhVZDJT''@;'; put 'put ''RHByMmhxNUdHT2ozUzIrMTAwQ0hnbGFRZEZGTGcxQ0x3M2RJM1dYdVFJOEc2TWk1cGczRzU3TnE0ZkJBMEJPeG1vTURZNmRkZVAzWHE5ZGZvbUtieEk0RDg3OUcvU2tydGszeVI4WEtwN0pNSVdkZWpJOXNqaGlFRldILzQwS2xUeWpuYVh3bCtIZnA3WFNtaGNrNTVXUG52aUhXNTJ0bDcvcHBy''@;'; put 'put ''enUvdE9KVEpIT3JndWtkVk9yT1B6TXg4ZG5heDYwaW5mS1NMY3l6VE81UmZqN1A4bHB0R3F6QUtFRlVCMDlURlNySWNwbWpOY3pueTNGYTNQVnd1MGtTNVA2dDczSUdzYnU3RnNmNGJ1N3R2N0gvaU5DN3BIQjN0L0RTNTBMTFExYlhROGl1OHE3MmhvZjAxbElzREYvWHQ1WHFhN0NaNmdlaDFv''@;'; put 'put ''UFFFQ0pPemdZMHVKMnZvZHJzajduQjFPRUpWTU5oeXJ4VEpGV01ZalM0ZFNYc2JWMkdGS01HS0xWMEROVWZiOW1yb1VYN1dNdFcxSjVERkR5NjdOdDQyTEFjcnMzaDZvMnBrZUt5MWV6MmVUZ0NlckRDV3BGeWJSK1dheG9yVWRCNEFSMFNORlVXQk1MR0VJYnZ0UURwazlWTXA5OGI4RVloTjdY''@;'; put 'put ''N1YvL0txY1hVTTQ5OTg1cTdUREcyN2hyNmdESDZhWWUxWHYySjRHMTRzZUpQampjdEcyZktmU0MvNUNxcEVkWExDQzVGaEFWZ3NSSEl4UmozREhLTlZpU0toNmlERkdCVnhIcXBDYUpNZ3EzUWZpM3BVdHZyOXVaYSsrVnZiZS95ZDdXTnpyWmxqdlNPM04vWlVIMGdtTy90MjNueEwrNDFqNXVi''@;'; put 'put ''R3FlbUdTSEdnME9xc0h1NW9uV21zcTlrVGlhWkNsVlV1MzlSa3gweUtqVFdveHZLU21rUEpobjg4NmFHNnlqZ0E4VjhBSkFhOVNocGVQUVhoMzZJcXgvM0FJNDlDZS9CLzVWSTFFWTl4N3R6Y3lPVUt1alNEVEJVWEQzZzBIWWI5ZDQrY1Rvd25HOFlUcDRidjNta1p1V2NudmxzNTJiU3J2bjVY''@;'; put 'put ''RTM2M2N0UE9lMFk0WGwwdzFuOW04U284UzgvaVZkQ2Fxc0xrV2dkY2RxNTFqRFFiNzhQa241VmYzS1A4NHU2Zi9JVHFYUGo5TXpHeXZnb1IwcFV5ZVlLK1RGVHZnN0tnYXovTWxMUEpnN1p3MlBUVWtsSUZCRDlDd0l3RGhlLzcwQ1B2L2N5SDN2ZmowMTk0SEJTNTRzSy9wYitnT1JTRjhIRkM3''@;'; put 'put ''RUUrejNRYjZFYWpDRjBUbXN1bGZJZTVhWEU0SEhhS1Z4aGxCSHcySWVsTkovRmphUG5Eeno3M0liUzhmTzdaNXg3QU81WFB2ZmttbnNRNzMzd1QralNvZXR5QVN1UWlrY3BmVnJtcGticURMZlVZMlVoQnMrRUM1UThmK3VyWDdsUCs3eG5nd01lVml6aXRiRk1VTGU2ZjFtdyt4ZU5LMmlzYisy''@;'; put 'put ''ZlRYZzQ3RzJtYXB3REE4Q2Z4cmNyN1FaMi9HNTlaK3FjWi9MUEZHYVdDMi8yQjVWdnhDUGsrajh3OEcwUm10aXVQek1ET3V2MERXUGZ3dzhyYjVQdmJsblpzWTdoZC92Zmw1L0NQTnNsWkN1RDdtczdpWFR4bFNmMlFXM0hkNnZIUWxBVWJEOU1ENm5pMGJCdDE1bWptbFk0SDVZN0hDOFlpQlg1''@;'; put 'put ''VTljTVBZNTN5ZGoxNWJOdmJGeml0YS9DRCtNdWNKNThTOS9mSUhyQU1MQXNKSTZNWjJSdlVETXBUSXVweEpwMlUzQmNuUDc3NzBLRmR3RHUvLytZMzZaeVU1VU5rWXZsRmVHZzU2Mk9USEREdFFnSUNFTEo5NlF0Ynh2anpNeVNEdytRVmFPdGxiUzJZeHE4STNlREFZSXpZVTlQZVFHYnh4aDNr''@;'; put 'put ''NjU2UDh2Z2lBakpMaUozbE0yNlh2WVZZMEJXQU1YRkFGRkJXU2tROXNJU29oNGpRQlNnckIzaTlTR2k0SnVobWFEeFFPR2pBb29obVZGYjJnZnUwSG9RS0pJUFQvTG9wMmEybFFYaXFKeGdPT0kyQVcrUnhBM0p6VFlSWERZTWJhUjRrcGEyWDRidHZ1Ymw0S3BIZVdkKzh0Nld2djcycll5UjYv''@;'; put 'put ''VjdycUtsbFMwSnVqaFA3emZ1VWl4MkJTTlZnWGYxSXZOaGEzeFBaMGFpMEpTSXRycHBnTUs2dU01TlpzR2NPVklwK3hLZG55c2M2d1lTUm5nejR0QStBaG9FcGZydUVNc2xnTnF0VHFLYnc2TlRCMVBrNFYvblhBbEdQYjFXeVR3MlUvZHJhNCthQUFKTnpXNHNvVnNGTVFUenNja0tNNkN4MWxo''@;'; put 'put ''UjZZVFoydTNOTitqQkM1Y2ZPTWtrcks0NzQrY1B0N1lkN212ZVVuVHhadHFlNWZQdjJUbmxpUWliMkxiZU9qSnphVWxjOVFWNVUvcU82VGhtOHVyOS9lcnEvLzJyZ3IwckFtUjU0NVhJeFdPSG1NWmpuc2pIWUg4OE1EZDArMEh3Z1BPSHVLSS8yUmVISG4vRk1ST2JhTEFPbisvcE9EVlJIK2dx''@;'; put 'put ''S3E0ZmoxY1BWSllXOVZRbk92M0VZMDFhVmpsK1RUWGFJandWR1FwVm9GSHVNSUN5OHlDVmEvZ3JSMWdJeGpwVllpcEp6ckVZMENtaTlMQ0FqbW5xWFFqTmR0eHBtUGRFYzRZQ2RFZzJ2NFg2UDEwNXlpRWEyQXEyYWVoamxtdmFVVFFEQk9vRnc1TVdsTFdQeDJpMm5Sa1p1M1ZJYngrTFN3MW1p''@;'; put 'put ''WldVOEJuVHpBREZrdVoxUWdtSG10ZWxBNytySWdlem8xREdyM09YMXdwOFNiM0ZSSVRSMVF6Ukd4eGprNU1wMTR2elVheE1sUHhBVjd4enlEUHR2YVI2NHRYL3JMZjJqaTIzS1NmTnd1bUU0RDl2TTNhbTlwWjZ4UVBYV1V5TkR0MjRkdW5lbXNSdHZhVXNtMjZqdUFrY2JMNUQvQVk4OUk1dHNX''@;'; put 'put ''TlJEbkNoU0tsSUNGU05SMU0rQXgxYkFraDFvV2dmMHM2dkd6c2RyQ0xJd25vMWc1Q0lJUWtSUVRmUHJid0k1VEtFQVcreVRKQjlZZU9yZDJPbHlIOHUyYWY3V3Y5eDQ0ODJEZ3hOeVNhc25ZUFRsZTBxSS9vQ3lGMy82UUdQbmRvOXp4R2lxS0FKY1I1ZTNrdzdBZFJtS29ZOXdIblNVWXIxZ3cw''@;'; put 'put ''UmNTUkw3MkVYZDZvdXFuaWtIVlFrbVNDVHpNQmxoUmdLRzV1cUJrY1hKdEd3V2hHcFltQWNGUkd2QVFNdVdseU5VSGl1UGhvTXduckp3S0JTa1doYmJWY1hBNDhkMnZKcmxVcXRZcmdNVVF1ZU5sZFcrcXhKRHU4cDJwN3NPdGJVZDZrcGZYVHcyTnRiUlBqYmFRZlJLZmRkOFM3aHNxckNrcDdV''@;'; put 'put ''N21zZ2M3ZTA5MmxGYk5heThiNnlqWTNTMG8yTU02QXNlT1NsaDhjUFJaKzEwS1ZzbHJSY3gwWU1yTTNwbUxVaFdOS3ZVMjlhTmJzT2RsWXNzODZMZUFXcm1BUUpjeUdsM0JsdzBSVUZWSVJDVXo0a0c3VzZZS0Q0M1dYZFRlMjNEd01tVEJWY2xpVDI1dTBYNUVxNUxkWGNsbEpkQW9zTFZYSFpv''@;'; put 'put ''cHVmYjVHZmd2K1dqclh6SW5tekN2SUJ5a0YzMWozMHkrS1J3Q3p5SStaekxVOVExeWJmbVdWZ1dYYjhtaXk2Qk43Ry9xcXFrdUtxcXVPUGtTYkl0V2t6ZkZrZEhsdDZpejEvK3p2S0krbndmMmsrdEVoR3NvT095a3FIUEdZc2dNSmJXN1JVQkt6NGQ0M29FQUFKaVMyT3JiNElPWWhsK242WEk2''@;'; put 'put ''M0hhMmVpa2RUbiszQnlEbUIzcFlxTTkzK1MzZWtwT2J1dGFHZkxiYjVrTjB6cXhvb2k0bDE3cjJiR1NHNGdCM2MxbzVrdEdGaXhxbExkelUwbkhoVmZSM001TlkrNE5vRFlFM2RQczQ2bzdVMVBQT2V4TzVwVmk2bEF4V3dmKzgxVXYzL2RBLzhtVFA3OGZseXF2dlR4OEIxaXpIWCtpNDZFVkds''@;'; put 'put ''OGwxTDlxNDhNd1UxOVVUY3lvQXpEbjVHcDg3Sk9Xekp1YSt1Sks4cVliNkFXcWw4OFQrRnZZQVhJZlFGYzlWMTVFc0I2ckZzaERGWTUreGlDSmdsNXZIOVRSbFdVMkpkQkk4Sm5lRmVFdUVjWEM3TTBwbGk0S29Jb0E4REJ3c1JIVTBsb3VYczNPOWJUU0prbCtNRmwzYzFPOFBuTnpVM1dkZlBL''@;'; put 'put ''a2E2aTJjYkxBdWF0RjQrOVVzck85UnZtbTlwZm90NGJqRFlucUZKOURONU5STzhqT09MV2tXTENBWHRJc3FaT0ZjbnFxamV5NVVzajRhcDE4WGxZSXBUVkNXTnNyVWltc3o1SENwcWp5QXRGdkNURmZqZm9kRXpDdU5mbVh3bmZNdjNndW4zK2hMc2VaZ1FIMkd1Mkx4Y0RwNkkvRitxT3F3ekZ3''@;'; put 'put ''cXEvdjlNQUMrQnZ4NFdydWVIQ2RzQlYwL0N5TWgvb2NoNW1uU0V5NVBnZnpBRVNCK3RVNTNockZrcE43Q0V3N3JIVWtjMkN1MEtsei83Vk9uVUtlbWxqbDAxSC9hVHY0VDN3dVoxUS9tRHRSbVB2QjhFRVFWdnZCMmVrVjV2ZzFnNXB4WWs2U2ZZM0x0UXJteXQyZjFKVzRQL3FsMGJkWDNKOHha''@;'; put 'put ''WExGKzhGb0s3eWNJRlM5ZFQ1clpzVUpmQloyWmluQkRlSWVLL01SM0JvenIzaXkxRDE0RGhRTTB6Q094cVJiazdrZnoyYTJ6WjA4aWY5WDI4S3VBZVV0b3QvUFphaDgrVTM4QTNoZUpmV1JQZkJBTDBUbjRDV3pKVUExNVZPNFVjb252aWJsRTk0ZzQxT0t2YVdFS3VadjM1SkliOXNWU3RTbE04''@;'; put 'put ''UHh1cW5taHJsNE1qaGM0WSs1b3ZHbWdlVFIzWmFxMEk2MmtnS2ZMOThXYkk3WERsVDVTNmE4QllWdW05dVdsMStScVIrWW9qNFhqSFdCZkFoOHJobzU3c1VpVFRtRGEzaVcyaFF5VFJjeEFCc1EzdTNsN2lCemtad1YxRWNLOFhVMXUxb1RCY3hJRjlVYTAzakIwMW9pVHd3TzNuempqU1dlZkor''@;'; put 'put ''eHhPblozb205Qis2Nzc0RHlIMFVWSmlPekNTRFBQcUxuZXNhWjlVWlZQUU1xUnJXZU9YR2xWN3VxR29DVlVKTHJHVmZBRldEckVUazhSRzBXRzVXZCtLaDZhZEtVRFhETVc2QmFRTm5nZnVVU1ZUYTRWNjBoQXQ5TnI5VVFhVmtWelUrME8xajA3dVRwSDhjZEgvblFuVDg5RHU3UGUvRXQxRml6''@;'; put 'put ''WEk5UUMrM1g1NUhzbDg4akZadzhmSHp1aGtNbm56aHk1UG9qME9PbjhDejlYWG9MWDZNOHRKTHZBbytUMTZ5WkpCM1cwWlFYelNwQTN3TEpXYVJ3T0J4NmxyeVVBczRJVFNaSlR2eVIyODdjOVkwWDNuM1RUWGU5OEkzSEg4ZUdwWWNmZmx2NU0rdDNlWWcwUWI4MldyMWpOdEFoVTJZbGF0ZVVV''@;'; put 'put ''ZmZTc2ZzRWRmWEI0Y3hsMUF3VzJDeEU2UVB0M3FKQVdjTGwrZWtkZjNQZmJUOXR2dVdMMXJ5ZHpvb0VNU3EzNFR1WFhybVA4UHBHZUhrZG5yZEp2c20rYWI1Sm92bW1CSFlvYitMSHNmSTc3RkVHcDNEbm9Tbmw3dyt4M09YeUxueVl2SUQ4cUZJT0ZiQjhJRmhxM09jdnAzbGdtc3VjVkFVYm8x''@;'; put 'put ''RzdoOXB3bW9KTWczWkpnYmhGUU5JZ3JpRnVMMXUrbEtpb1NUaC9Ob3FyRzFKeEhOdTd6ZFRjNU1iRGtUQjJOeldiUGhYdGF6cFRFeDJPMXQ3VzNGZHBHRFo0SStHN0pvdXM2ZXAzaGFzOGhtRk9zN25sNTlEZnNmelU1clY4NEVmTTdkeXAxZFZoaU5WMjRldlpQQUEvQnBZL3N1VVQxT2ZIakVj''@;'; put 'put ''eG1sUXIwaEFlcFNYblJITEZ2R0RYSWcyTjZUQk1KNEhCWlNNd0FRL1RWVjR3RjFLRURqMFVHYUpETjI2YmplRjRRd1BNYVhiYmxNRlRGWDVYZGRwYU5IbFhPT0tGZVZUMk5kOVdDL09xT2RQVUY1V1dsMUVLUi9COStHbTdoUE1RVVg2RGpFOGgvTHp5RzFhdFFXMWh6L0pWNkJkTXYrYXoxVE02''@;'; put 'put ''T0dxUW1WUE9FbXRPdW02MTJnRm16aVV2aUFUL0p2bU1XcnJRZTEvSmRtTFhxaFdXdHVDWCtUTXFsNThqZWpLTUNsRTV4VXBKY1dHQngrMTA1RnQwMk1MWHllQ3BPOVRFSWtiRFJhem1Na2pyM0xrT3BTWHVsS0RoaUIyaTF5Q0UxZUFCNEsvdjI5VitvS1ZsZjhldTJ1M2xFeFcxOVlFSjVaUHBl''@;'; put 'put ''RHhOTEhKUDN2RFJUT2JJY0Y1WGh4aXQ2QXVibEJmTmtkNTNiWGZpbEhON2t0VnAwcnpwaTZnWWRjc3kwSklXT2lHSjFrOUx1RjhQY1IzR0VtRkxNaXd5b3hWUGtzU1RBWWhYcEJYYm5hRWdtQmJxM0lYYy9sU2FWWml1MHZnbG1KYkhrZW1sZnh6dDdtNWQ2TjV5VzhtT3ZQNVlmZGVUVDg3TnBl''@;'; put 'put ''bytNWGkyNTNDYnV0SjM2K0FuVUU1dTJJT2E1VVlYUmtZOEFOR2x4TUtTT1JFVGNKbkF1Qjh3c1QwTnZDNlA0bExiczJBejAxMExiRHVJV3l0NmhWOG01UGpySDNqaGhSZk9QUC84OC9mOWttYVRjYy9nbHNHREIrRUZINklwWlVhckRCbkM3eU1YV1cxUlBjdENSbWhoTGZBdFcxQ1kwUXNVVVho''@;'; put 'put ''MGcrb2ltcURNalQ3cWM5N3ZDd2FMQ2tQQm9tZUNJZmFYRE5HLzRZS2lrUFlYZURXQzZva1JmOXRXZ1dNNlpCTndETDJtNWtVSDhMM2szSlhrVkdrZFVBYVBLRStUYzROWG1sUDFTb0V2TGo2d2c3eml1WlBMc0gvNVpkSk9uZ0JLQjJTSXdObUN6MjNVbk41SkxSZExxN1BsbERDekJGanpkK2lD''@;'; put 'put ''TWwxWHNmWWVhbTJlNjhSdGUyN2VnOHZxZDdXMDdxbGZLaWQzTDkwRWZUZWo3Nkh2NE4yQXRGTFpsNk1RQ0ZVVm96a0Z2NDI1Mkl0R1MwdWkwWkx2UlV0TG8vUlh6UmN2dDRNWk1ZUGR1cEhOTGQrRmljNXBKRHdoSVlCQnR0SjhCRGoyQXNHNm80aXVYUWhrZmtXYjdtVXJyZUR5TVJCZ3JOczJn''@;'; put 'put ''K0YydWdCNW5jRmdrTnBwaWpsZVIxNFJYbFdRU2ZmRy9MU3FOVkZVYnlzbzhUc0w3WFpIbnF1OHUwQWZENWVFRTdhOEJxOGpQODltY2cybDJYNmVPTkRjeW1nZTExT2F4OUhyZkQvUDhnRCtKZE5MZnRRcGQ1UUI1N3RnWUc3cXpRNGdQU0lDTGRHam1CTTFiY1hLYXlFeVJzaGZYdWgxMmxXTlJZ''@;'; put 'put ''TmlsS3V4MUJLaWxUUVkzVUtERzFRbDFyeTJNR3RGb3luWHJpM05RbXdPck1aSHVNTldRVmZnN0JMRVliZWp6eVBEVXdRLytYbW1hRGVBT1FqNmVHT1lFeG9NbHRCRG04QWN5OExrb1k5dUFuTTgrNnc1OUdFT1E5YkN2Snp0eHd4OHVRb0dhQUEraS9CSFZsdmtRRnZsYmp0VmpSVGxCb1JCQVJt''@;'; put 'put ''UWpoaDBCNHlnRjhWcGNEUFZwU1k5ZDVSWU5PZXdPYUJ4dnFxYnpLQW9zVmJJa3FMMVRYNDN0Z3Zra0ZiUXNvd0dQNERmVDdZdHZmVXRYdGx5NTUza3dxTHlHTjZoUE1aclVkcFpEVkVLRzJWL0ZSYjFVVUlnTEFmMVdJSjF1TmdCSEd6SFJCQUhTdW5tS2M3OTFiUWFSTUJINFFYcHJsL0pNVEox''@;'; put 'put ''cnNac1lPajJ3dGg5TEJmcGdFWUoyZ2hoM1cxWDNLcVVibWxhMVVvNDlZN041UGphRmlCOUF0bS9VVU8rVmtEVENpblVFSXFDRlByZDFQTHdkRzQrVmpYRldtRmNFNE5vaFFzdlRmbDNKazcyV1BWbGF5WFZPL25BanJXbFZIUFI4RVJkaTg2L1dvQ2JUQWMrdm5OMWFSWHdGYXRCWW54ZXFjckND''@;'; put 'put ''Y1pYT0ljLzE4SWNSSTl0QW5OQ2d3RlpPTG9KelBGc1AzUHduOEdzOFBueTkyZ05EM3RXbkk5bitmM3IrZ0dteGwwNU1BZkJ1cStCV2Y0dHdBVFplT0o4UE11UHI0TUJhNFhqYkR5OG43bmxSMWFQQjJTcUNsNSt5V29hU2xDYjNMemEwNWcyc1BVSlk0NnJrWjhQZjByeWk5bitSRGMweXdPN1kx''@;'; put 'put ''ckpKYkNBS1dubkplVzBHTTJkbE1ENDR4L3hnclMrdmpkMjhJcTBMK0RIc2xWcE9MQ0lpNWErd1d2VC9uYnhhY0FCcTdkaGVxVk8xU3VmV1ljblZrUEM4RlN2MHZhVDYzVFBXcGlEdUdvVG1CTWFETkQySzV2QUhNdkM1S0huTm9FNW5uM1dISHA2alE2anRXRzNRN3hTQXBaQWZFWkV1RFlXaW9C''@;'; put 'put ''WVJOTGV0RmZ5NG8vY2VlZkFuV2VIejk0eGNNZWR0NS9OdmorTDJPS3lWalBqQlJzVVJYZXA4YTBMNjBobHhGZmtOWXQ2SFJoYXZURGdZMWVGbktzWXJxcjVsZ0tXU2FFbEE1NUJjZFdTSXpnWHVjdFJIcjZHS09hdUQ4cldpb3FLYUVWVjJCRnhzQjBpMlZKektaQ3RxcWN4SXZKNE1hOTgxVkZP''@;'; put 'put ''aUdCUGtud3ZlYzM1dmRmdXJqeStNNUVFbVQ1STN5bjVSUVc0cGlrRGtvMHJEMlhxbEI4Mlo0ajMxcDZaejg2MjFzelhuZXFoRWwwenIveDZ1QXhmRXdDeGZxUHJTT2RFcC9KUWdOczZWaVBDNk51azhzQ2o2K1ZwRGN4QjlPTk5ZRTVvTUZsYnR4N21lTFlmelk3bHlEZjNsOW16MnRSbnZiQzZu''@;'; put 'put ''NXg2SzFwSGxKQmp3QlY2SGRZZkVMRzZmSmJkUEFwbUs5L2p5dmZhdlBhdzN5YXg2akozTXFmcUtwU3R1anAxWWFYcVNoNWpWVmZIV2hjNnV4WmFidnAxUjBORCsrdHFYV0tTZkJka2Z1cFpNL2p0TkhmbEI0NG9CYVV2UU1BeHJ4VlRlL2p5c0lqVmxIV3hXbFk1bndYTXVUMGxtNXhCZjlBZkQ3''@;'; put 'put ''RFZyblg3S21JNHBSVTZwVFJMUUpOZXZhM1hkbmNmYkUwbVdQWHVjS3ErczdNK1ZWSGQxbEpUMDNxS0dKdDIxdFh0YkdvWUwrUVZ2SWRwNWU1Y1k3aXFvVEd1T0RudGVhM0JLNERySGpEdUJIVlBiWFJkQUJyY2szUDlrZ2FQcGJGYytKZXkxL01HY3E5ZnpQWS90elhudWhETXdwdFBjL21FNjhK''@;'; put 'put ''OTRDTldvd1lrazBPRFQ1cm9pa3BGTVJEVkIzNkFHNXRJRXhaTjhHRFJLQkFraVFOZ3FjMEFVN1l4RERaTDRFeVlKUXBtdVlLdWJGZldWZWxhTU1NR1lDc1F4bzBocHVnL1BzVVlNb25FTkdtQW1GQ1VpSGdnejBpbzk4c1QrRmF6UmFCT3cwcGRBNTF4Nm5KTkxEamJZTkNLemViY3hwYS8vbm0y''@;'; put 'put ''LzUvblVXUTFnc3pTNXZNZzNhSmt1T0xXc3J5MklWcHBSdmVGdjJNWERNbHllU3FWU0lDakphY3lyYzJKaGtTeXJoWjRMRTVEbjFBd2xKLzF1dFpzVVBEbWJQbGd5emxyMXRaUll6dk81c0pmNU92c0hZZkQ1WWU3OWg1ZnFZTnB1cnEyZlhkUmFIL0wyc1YzNWZPRHREeW1wWTZ2d3RkWHg1TlRR''@;'; put 'put ''OW55bU9LaWVGVmxkYzZpdlBJNU9lRjMxUVJEM0E1V2d1OU1hejhhMEdOeVNSRHJkY2tRRWZVTmhVQ2ZBZ3pCY1I1SUdNVEdSRlNqUm9nS1JHRDBvMGdFRFNReVZjWGlLMTdKc2hjc2xROXI5QXBSV0lDNzdmTEFjc1U2T0hhK3dmNHN1SjZ0NVllWmU4dnkxTHEvMHJHbHRTajRLd2Z5MS91MUJa''@;'; put 'put ''M1haVGFxVDhHbXRXNnRjZmlHcm5YbEtsazlGR042cm8vcnYybTB3WFdxL3o2UWMvMlNCbytsN2Jud0Y3UDl6SEg5dC93dHRyWkorM21aOS85dUR0OE5CR3pMdVg3UXcrRi9DZGRMV2Y4djgvNGY1ZGRmaGV0aDFqK0huM3VRNStIcVdhM04vMlMxWXJ0a3A0MHRwMlFQdm5DWWNCOHZ4ZkJvQ3gz''@;'; put 'put ''MlZkWEFkSUVjZzhYRVpENzM4cFNjVjF6TWE4SENJYnBIUW5OUnN1NUplTVhseWwwUHdtOXM3N2xsZVBoa1Q4dEMxNTdPOE9TUnN0NkJZNTNUNWEwbDQrT2Q4dmhFSjdFL2RQWDJzd1BkTnczMUhzc01EZmJYOVpjbmF4cWkvYjZsdit6b2txL2ExdGw5bFlZZlVzTHN5VGkzSnlwZCtMb2p4ZHNF''@;'; put 'put ''eCtmaGphNVRlajJVYy8yU0JvK2xmYm53TDJXdnIrNy9ZcmIvdVNsdWx6clFObEpJK2xsTzFVZjNUUURmYTNVRmlLWHZrQTVZZnBKdElKTkFGdldqTEZ6MjJZckErOUF5clFhYXQ4Z3ROWUNvT1hjSEdjNlB4a3FMbzFVbGY2RDczWDZvZnNCZnBuK2p4YVd4cG9XWHRMY3dKbTBOMWt0enNGbGYx''@;'; put 'put ''dXNpT2hJSkZ4WHE5RHF6Z2FpK0xMMHFyRnpkMEpjdDNNaVh6VjAxM01pWDlmdjlWZjdLMER2NXNqcXZ1bVhTdzF4WkNkUmxQRHgwWm1CNFM5Rys3b29JdkJ2WldyU3ZSemxYL0hLd010b2YrMDVmelBjRGZ4Ui9jRTk5MyttQmFPbElhRG9KRWh3ckcvMWwvTjg4SU1PUGdoRFh4WDd2cHVmSHNM''@;'; put 'put ''VXJTdnVkcTJSNDlmVVZHZWJYTDJud1dSbm0xeTltKzFGbFdGMlBvZjNzVWZ1NU4yZk5tZGU1ZlR5M1ZIR1R1c1AxNjg2YjFCMXV1RUM5OFcyMUJKRXVVUDkzbFIwcXd2eWFzc01zVGk2cU9BRmM5ZVhtelRMWlBOVUNlbUJkak1kOXduTlpuM0NoSjdmdDRXeit5b2dlM0tUdE43SitvM0ZVM1pP''@;'; put 'put ''M3ZFMm9nSGlnQUtTelhXNHB3cEt1QUl1WURCZ2dEQUVTa3ptMkhVdlA5aFd3RlZTMUpLdXdzTkJYNkF2NjdYYTd5MCt6TDNxZVZFd0hJbnk3WHBLanFUNk53ZCt2Q05mWHRidkxHcks3OTdDbjJGZFFZRk4rYytMRWZXVnQ5VUVmM3ozazgzZ0tiRGpOTnZTcDlYN2JTQy9JYWd5bDBRdGM4SHds''@;'; put 'put ''V0tjdmhoakNndzFDVFlJWURVYU1qVEVzWWZCRU43OEw1bHlWM0tpMlJaTXBIYkM0aFlOMERRSFBpSVRQVWswMHNSS0F4SHBnRm55d0preSt2YmtOcG1SSFBCNVB4eHZEUVdjZ0dBNjQvSFFWSW91YlRRcUNRWXZaTlhTRmM0cURTUy9EbTNsOWdmRGNMUnlCZjlFS2hUa1cxeFlLMCtKaGh0TlBh''@;'; put 'put ''Z1hEYXE3Z1l5eE9ES3R4NGkvV3hadThQcGJLN2xaVmR1L081aGsreG1KVjFoWWIwUGxOMmw1UzJ4SnNHT1Y4eXZZWXNyWVJ0ZTNDT2o2TlF4eGpKaThDVEMrRHlSZDJrRDhoSThBOFQvNUVnUUJHelJ1QkJKekoxczIrQy9SSkVZenBOZG5rQU1McmdPYmFLbnlZbWhXTUJEMDZBUHhyeSs3MDFh''@;'; put 'put ''aE9zRll3UmJWUGRGTm90SnJxUkZORHExdFlMOXRpRmZBS25DaXFCZEc1d05UOWR2aDh2ckF2RktMVkN1R0F1cVFWV0Y5Ym9oWXZvTndTazNkMXJLb3hlZWloa3gzS3YydUZKcDFMZjU5VFovditycWFtcFIvbjZpbWVUOHhrODRrTGFQODZPblBmN1Z6V2QxdFFkZG1hWENRMm9SOXMwbGJ6K3dT''@;'; put 'put ''QWVZcm5xRURlaDluWkdLQ05pckVCczExT2VsSEg5MVdxSjJMUStudUpTU0VnVVJNOXBvdTRObHFST0xwTFZQc2YwRVNNRERPeFVoNGpldVVXbm5IdjRlTEVwWWhjV0tRcGR5WTRUQWN0c0pyakVJcWpNN0tEUmd3aFRQUUdjQUJCdHlDNnlid0krS0FTWEhrZGpQUUF6VlJybEZXUE4yTGxRc3lQ''@;'; put 'put ''WkZZcHBJR3lPZU45RzdVZ3RIUXVIQTdId3pGUGhUTWNESVJZamx0UzUrRFZWTXJhNm1YcTl5TzFndm0xclJZNnEySTZYWjF0ZFNGekVLSXU1UzlxUUZYc3RUcGhzaG1ZdnNXUlU5UU00UldlWlhYTkcrU2hEUnZrb2RmNitRYlZSMkI3WjVtTmlxbzI2cXZyMnZKNlkycWpCcmlOV2xUYktxL1Rm''@;'; put 'put ''YmU4TGZCS1B2RWpma1lId0FzMXlJb1NxQVg5bVV1N3R4cEwraktzTTBBb3AvTmlJdWpvRVM2b3o4ZnVpQnZjVWExQ3pFeVhjUVNEYnQ2SVZ6WmhTNUorQnNKb3F2YTFmYjFPa25OdzIvb21KaXlLZHQ0UXJXMG1WeU5rcE9lODRQbHMwOHZBMC9pN3BvYW12V3RhYXBwVHlmeEVmaUpXRmZBWEY3''@;'; put 'put ''bWROUDFkWU5IOFlub2NBSGVGOVg5RlJUUXVEUVdyUWlGallTQlVpSVYzckk0ZXFndVhkY2FMQTVWMC9icjNDa3FsSWY3Nk9UQjRndWtSdmc2d3NQend1cldDbndCTUpkTWpQRVpiK0FSZjAyMWEzb1lVMEFVdXVqT1VybmpTNDFjSTdzK2U0OElMcXpUcDkvalpuaVpOTHVoT1dFM2dGU2J2dWxP''@;'; put 'put ''VzFWS3UraHZVaGlCNDFyZlpXcjhmSFpMTmJ1cjIrMEhRcVJFSjBKVmpNWWNwVk84K1B5dXNqTGFsTExSWktWQmVBekJGdDJtVmx4WkJoSm1mdDJHSnNsTmRsazE3YzhjK3I1WUxiS0Z6S1BIbW4yemprMWdwRzFnS3czeEthdlAwK04rVzNsSm5wSzdsb0crdHJNR0Fqald0eVFkck5jVDY3TDV1''@;'; put 'put ''KzdwOTNiUTBXTC8wRnZRM0NuSjRucDAzbWVCeWlIL1AvWCs0SG1QeU9hSmVmNEpmcDN1cG1aOVJvL29aem5VeXorSjU0VjZBR1ZWaFBPZzVEdk9jQnNQM1pMK285UVA5ZjUvNUJEakhKNkQ5M01sZ1JqZUc0ZnN5U0Ivd1V4NnR2TFdZVFVaUkR4Skl0TjNwYXpaNjU2RTh0N2JST3lXbDByUVky''@;'; put 'put ''eTI1U1o4U0FQLysxS25GeGJjaVJ5SjRpL0tmbWFNZDM5SDJmVFN3K3ZCQk9jOXNra1JxNlEwSWExWGlabmhyVS9kMFpzdXpWN1o1K3RnbmJiRnJhdXFMYmxiN2d5VXc5K3J6Y2NQNHlhR2hrK040YjVWeThUL0RSOEo0UXZsdEZjcXVXZDJoclZrQkhsL2ZDTmVraFBsMDQ2dGkvVEdnM3hjWlhl''@;'; put 'put ''dFUvV3JsOEhDOWhOZzFlTURwUmJUeXJCUFo5VEVEK3R3bXo3cVV6VU1ZOXFHY2RhcE1kcDFxQVQyNXpnZms4Zm01YkM1aFlSSnR0SjZHcld2WHVOUzIrMWJ5SE5pcTdoc0N4U3ZRUGJZT29GS0xuTTZlT0dFZzJTTW5qSFJydlZhdnh5TENFbWV4eDhXS2VxbHJZYUlGTHBvemtTMTBjV1A3eW5i''@;'; put 'put ''dkhlcnkvUXV6ZEIvOExPbGRlcXNyYzBqT0hNN3dSZnlwVDF3OTgrbXJGNVVVL2w3bXNDelBOek03Qm1NV2ZnNytCWjFYTTlvdWozc3hqVVQwT3BwZTF3c0R3RU02dlVGM3dHSWtvcWlsSE15U1NjaEpPaVNUZ1FCQ3llWmtVMk1xVUIrb2kxVkJkMzVuTUJ3TTVjRzRWeWRwVjh4Qmp0K2dXM09P''@;'; put 'put ''ak9wRENIazhPOXQ1SkJ3NUt2TUM4OHpSU1BDNmpPWklLTGZsMUp2alcxYnRqMnFzcTAzekN2VEdtdG9VY3lsMHVVWG91Sjg2RjZwdmNZTFJOcVh5NzlQcitJTFhQMVBhN3VDNVB6WCs3UVUrUGNINE42WHk2U3NjWG5tZDFrdXI4UFI2UjlZL1BjSDRONlh5NzgwYlB1dDJ4cjg3T1A4YStiUFlI''@;'; put 'put ''bmcyemtaMW5BK3M0MzFlTjAzSGVSVWY1MjV0LzN3NzJ6L2ZnZDZXUytyQUdha3ZLUmIwVWhIZGZZaDF1TUFLTGtrZUs5cmdlZWY0Nm5vTlNSSm53UFAxREtLVk5NYTZjbzNxTmVVYTc5aW9kRjJOaDNEcW5WcXhkY09OaWpYV3QrTzFHdVpRZFlTV2FkZ05VbkVzS0c2YXliNkNRd0pJNzZuck44''@;'; put 'put ''aHBleDg0ZUpsekE2NWZGQ3ZXcExZdHM1YzdSa0N0ZjI5bjllOHlYU2VvdzZLK3ZwVG94SklpZ25UZ0xpR2dGeEh5VnE4VDZOZzZnYlpTcWRhdWJMSk9vS05uYU4xMmVXQzZUckFHVGwwbjBNQkZ2dWN2WGduNFphdWdsMEV2TGFoOXA0cDgvSU85b3h2aE4zbE4rSEpsK3RzbXBUV0xCMmt4VW5i''@;'; put 'put ''WnV2MGNlVHFoeVJQSTR1UW04blJKa3lkc0tPZnlGQVI1b21jOGxLTVg1SHd2VU1SakFZcVk2WG1US2tWaUdrVW82c2dwbWdCVTY3T01Cc0w4czNXRWlXY1JmaVZ0NUtvMTRDcDUxclhTVVRMWllkamxxSndHODFRYVRDQU1mbWtUV3RFZ254NFhnR2VkNjZuaEs2WG5WYXlwSXV6TUhsL0I5a08w''@;'; put 'put ''cy8wUUNmUnR1YUFLRzRTb214Z05Ma3lNMmFKSWZWYk42SFg2c3lZTUE4WEdvMkJzQU1OME42WWc2S1pGdmllVDF6NGlYM1pac25xbGpjRklibnVuUm5KMFkzaFdXb24yNXpRVEtKN29lUVlKVk0wMmFYZ0JVelRyb2R1RW85ZHYzUEJTQWNDcGRSeWNrbGYyY2dSOGNkdmFLc3kwYWF3NWQzdkhS''@;'; put 'put ''SUVseFBpUG5TWENlRFN0OHVqNlhFZ0orQjBGelArYzVQNG51V2Fkajhwck9ETFpHbzZGRFd3SHo2V2Z5K2JTdFp3S2IvdHl0a1pFcTFITXJmOWdiVmx0QU12YkE4d2RHOVdnZ045MDM0WnRoMWZXQXJDMUQ2bm5vR3hqNTZBRTZOcU5DN1ErTFJyT28vc3FCdFJUcGJRengxbk9YUXQyMkphL1FM''@;'; put 'put ''QWdFSFR4TTZab1VMb21jN0htMUJUeTZQRGRrN1pzdXNJeGYwbzlQWVZjWUdlbFdMMXFnc0pmNUgzNFdPNVJLbndmempZeUMzRk1DTjNHdzNrcm1GUUJZbTFkQ0FON0RmaFdYU0RaVlp3U3ZiYkRhK1AwcjUvZjV5bGZiVVZuVGNiWEhQUTdBNjZBeTArdDI3cFU3OHJXbmFROW14TW5zeXdpemMv''@;'; put 'put ''ZHluTVM1MGFuYXpmMWFKRWQwSXFkOGNMNHNZWFhDK0d1ZFh6RTkrOVFuYm1MOFlLRXZwdFRJM1JDcXhHQzY3ZXRhOHZYS0M1cGF4Ullta0E1Ylk5bjY0dm0wQTNyK0lpZHdjSjRyWDNUZWthK2I0YnkyalQzajQ2Z25MYkh0YlliNWcxNTI0dHFXNW8zL0dCTzJ4UFp0aHZscG5qYlM5cHpzYUdC''@;'; put 'put ''bjcxQzl5WFRHRGlmN3NpZ0ZmMTBueE1aUU9xbUliS1hldHcreHRUNXlMclJrV1ZpSUQ5bkcvSFRHK3dkcHJYM041TkxWM2llaXBlZXAzSis0ZURZOE5Bb3VYVC82T2pHZldUM2RSRjBGdGp5Qm5WWGw5cEhPaWtGTXFORHcyTUhGOGlsa1pINzFUNTZvWTl2UUhTcjdtZ3dFYnFuWVlDR0duMGIx''@;'; put 'put ''ZURuSVV0SXlPNW9VQ2ZOZ29rbngvd3Ryb2Fpb2daWFMvbDRqUFQ2eTF0Y1hpOTg4TFBuREtFWFdUNGx6SjV6MmZyK3Ric2x0QjBTS3lrT2RUOUdMd2I5eHZaak5MRmU2U1pXdWlOaEhxUVVZMkV5dTRsV3VLSmRHYm5mVzNCN1oyZDFRcFlUM3ZKeXI4ZnY5NURlemdUOW5PaHM4bnY0UmI3UFlC''@;'; put 'put ''dldnMDJ6b3hZMmdob3JUQ2FmY2d6OW1vbys5ZVFld09razA0WUN2VU9uYWtlMm9FZW43c3hRejkrdldGR0lwOXBMdk1OYy9FSDdQYzdTT1Q0bThKa3lScmNrYWNQdkp5K0JYSGV4NTZicGZrd2oyOTNteHJqUGdJVmVkaWpSSkRXcHdNUHoydEVsUkJqbHV4V0NJYmJaalQ0ZjBjUHYyVkhhM0FO''@;'; put 'put ''VWFTb0dzQ1ZRNkhDYkhCNTl4cENzY1dzZjVQemRwTjF1czVoOXBVYTZROGhpTGk0MTNhN1NKRVBYaWRpNXRVVjg1NFVldUxLUGhxVTNPQjNadlNoZUtSQlNONWZnSGNmNERwTy84ZHpCNUs5UmVYMzV1ZVZ2SXlzS3NoNEsrYm56cS9lNUJiTjlDYXNQb1A4S3oxK1doSUpWeWpMUFRiSThKZGNw''@;'; put 'put ''WEZmZW9lbEsxSTByTnRHVnIyaTZFblVEeEVadEQrSW4zN0h0UWR5UzAvWjR0dTBjYmxxbkszbmJpOW0yYytoclBENWRicUZuVithdW43ejllKzVMdlAxNzFaZUlMRGZUTlFtZVoyY3dGOTcrSFY4bmUvdDNLZ3pQMXgvTDlwT0hydDBrWC85U05sK2ZONEkyckNYdFJ1L1p4RTY4a2wzTDdsYmoz''@;'; put 'put ''RHIwTTJMQnZlOTg3ajg5bTdqM29OWkdhTCtDTm9MbDdUZTFOaTM0QStoVjhnVHdUVEhqbWI2MW13bzV6emkxMURoUHJuNTM1UXNMeU4ycnZyR0F6aW1ENzBlL0lCZGd4dmswNjhqM0NKTFM3QjVCZUNiK1BudG1DYXFReTBxc3dPdXJOb1VKVExrRkM0SU9kdUxYNm1mck54MEtMdDlrV01HYzkz''@;'; put 'put ''eDgrSWZBR3hFK1BqYk9QOEE0SGRseE1wZXpWTXZ2anFIemVCSS9EbENiN0xHaTV3dXdQVlpyemhkNHFqMFliQThFMk0vNVlGdVF2NE5MSEUvdHdEZGZSaDhFMmtOUVl3dkE2eDhZRDl2eHp3RkFvdCtQbzdzNzUvdHhNbWdRbnZ4YlhsUlZsNC8xVnY3MU5RWXNXckRKTEpweXYvTEdtZWNRekda''@;'; put 'put ''aHhtNjBTYnJjYjhwSnZVTkQ5cTAzdkxWRVd3dnE5K1UwYjlodWcyL01XZGNXb3BIR29TRloxcjQ1WjJoeTZLcUpNWGxRSHRqYVU1dXA3V2hxM1BCYmRGei9oVy9SS1Yvek9aZ0RXOTc0VjMvRERoNWtmK2lINFZybGM5cjM3WHdLM2dCczhNcS9lRWQ5UDFhVCt5VThLMS9HZzhIVHI4Y1IvRzE2''@;'; put 'put ''S3RFemVveHJZeG5zQmR3RkhwbTkvLzdacFl1ZXA1LzE4djNBQUJmVDRBUUdGMGw3cFFoQVBmSkkvN05QZXk1K2o5bUQzNm5uSTllZ0hmS0VENmhXakhVaW9XVWtHSm5wcWZRNk1IY1FiUjh3WW1MQzJFeDNqR1MzQ1ZsWURTdFBQY0ZyRFVyRVk5RXF1eU1FNGFIZEdjcURVSExsMktjSXhJN2NX''@;'; put 'put ''VTkya0pWY0NDMHZBMVI3L1N3eHluWUkxYjluWU9UZWVlOVlGeEc2ZHhUT3YzZEkzUldVdWE0TWk4clA5UVFIbERkS0Y3dm4ySkhLbmNmN2VqM21Razl2eitGMnRpZW91Nm0zMEdQMjlIWU0wZTlzd1VXa0VOOEp1azU4aHRCOUdNN3NhZTEzMG5QYW1WTURibzBBbXRkdjl4TmhhWW4rNXB3Unhz''@;'; put 'put ''KzRNRHpyZGVicFNlMS8vYkNKdDhZMlBHeUMxMkhBYzBDMzQxcDFyZUFKclQ0RHJuOUR2YjZ5UnN1dlg4cGVsNDduWHIrb1hVZHpCM092djVLOTNuMHE5L3E1N1BXRmVlMXN0RzNrSHBZalQ4QzhJd0VuaG5sdlhGWURzMC9tVk5QazRPRWVGblJaYzVGeGtqdGRmMUp4d21PdlhLeW9jZGRqYTNG''@;'; put 'put ''RDQyeU9HNGl6UDUwejlwZXlPTWk3anR0RFdyci9OWFpPajBidnBEMndWVHR4QjlONk9MaXZYMzlmdnpTSy9oL2lFeno2QUFFQUFBQUJBQUJWRXJUK1h3ODg5UUFmQStnQUFBQUEwOEdkaGdBQUFBRFV2cWIxL3piKzR3U0tBODRBQUFBSUFBSUFBQUFBQUFCNDJtTmdaR0JnUHZmdlBBTUR5K2Iv''@;'; put 'put ''WnY5eldMb1lnQ0xJZ05FUUFLY05CcmdBQUFCNDJuV1V6V3NUVVJURno3MHpGRUVJMkVSUVFvekdZRXhNcWttMTBXb3RhV3BpQld2c1JxeFlGMUlYTGxTNlVFUUZrYTVFUlYyNGMxWHAwb1ZLZDNhaENBWDlDMFJRdXRDQ0NoVktvUzZNNXo0ekVwT2FjRGp6OGQ2OGUzL3Z6TWdTVG9NL09VcEZx''@;'; put 'put ''UlFxTW8rU1RpR2hFNGg3UmFUMUNiWklCMHB5QlQzVU5ubUFMajJCZ3h6Zkx4ZVJsL1hvazluNlYzM0o0OXZvMUZQSTh2NG12VW1keFE2OWpsMDZpbTQ5and5UEMyNDg1K293aXZZYyttRlpRZGk3eEhtTENPc01hdm9NT1YyaDMwQ1ZkVlQxQzg4L29pb2hER2tjNi9RcGp1a0JsTHd6cUhrK2xl''@;'; put 'put ''SDllNmc2Zit6bXhMbFdrczhiMGgrSStFVnMxTmZZd0hscjlDNjY1UnFPc09abGVrNFdzRk5yOVY4eXpwcktTT2tkVkRTQjdmU3NqaUFsRTRqcEpHc2Z3NEFJOW92VTU3UkFIb0t5OXdnRHZGN1dxMjU4eGViSWZUSmN3bWFaNUx3eHNxeWgwNnR5N1R3aTdEZWlJWFRKUXlRbGlYUDBsTHpDSG5J''@;'; put 'put ''ZmRHdmVRdDVxbERuV3NwdjMzcEd4MVRYRlBRRDJTZGxkejVKWGduMkZuUmIvbFova0dzYlAyRFZKUXZXM3hvLytqWnIzb2tnSDdGcWxtUVpMNDljczQwZk9lcEl5VnF2SWUwRzNYc2l1V2VUMnhwalJQMU1mOURJS2Y5bTF5bkpoYnZ5YVpmeU1zN24xYTJ1MnV2VnU2d2R1T2VLK1dML01jdGJ4''@;'; put 'put ''c0pxYS9YalR1V1hOOXJ2aFpQV0o5YjRudTcyc0g0NGgrM0FaWkE0c2grNDg4SEhFWkFReFkydjl0Ymx4WlcrQit5SGsvQTdXeWR4YWR0cWNXYlk4dFRuejdUSVd1TzJQTWZxUDJ6dmdjbWg3YVB3YTc0TGxzZFV0NHpMRDdEV0VuL1JSYXBDYTVaaER2SVo2VC9ETVZtOWoybGlUZGNOYitQTzk0''@;'; put 'put ''VE9CYVVEN2tQY3U4TnNSUmEvN0xxeEZMOVV2MCtTMTdMNFY4SjhqTGNQWVNuRi82OTlkUGp6TzViNnU4cStnOGhzcFk5Zk9lTnBGd2wxSTRuQUFBUEMxbHQrdU1wdE85M0grTjZlYk83ZTVOVUY2a2lQaUNCL2lpQWlKSG82SU9PUTRJcUtISXlUaWtCNE9rWkNJT0VJaUl1S0lFTG1Ia09naFlr''@;'; put 'put ''UVBJUkVSUi9RZ0l0SkR5Q0VSOTNKdy9INFFCR1grMlliMnU2Q3VORXpBMytFaitBcHVkZi9vUHU5dUlSWkVRSkpJRHRsSDZqMGpQY3M5NXliQk5HWTZNYjh4cDgwWjg2cTViRFlzbEtWdDVhekwxalByaTAyMFRkajJiTmUyaHAyd2o5cm43SGw3eFFFNUVvNkNvK1lVbldQT3JIUFBXVU1obEVQ''@;'; put 'put ''SDBWVjBFelhRVnEramwrdmQ2UnZ1Vyt2MzlzLzNYN3FtWEdWWGUyQmlZSHZnd2kyNmw5elZRVzV3WS9BU1k3RVo3QUF6c0k2SDgweDdjcDVyVDh1cmUwZThTOTVUSE1WVCtEcGV4TXY0RmY3cVkzMXJ2cnl2N3V2NEhYN0tML3VUL2cvK0xTSkRyQkI1b2tTVWlYUGlsbWdTcitSN01rMW15QlV5''@;'; put 'put ''VDViSU1ubE5UVk9mcVN4Vm9IYXBDdlZNcCtrNWVvRmVvZGZwSWwwS0pBSjNnWHJnR1VEQUFieUFCVElZQm52Z0dGU0JBVzdBSTNoaUVzd0pjOEhVbUFlbXhYVFlKWGFWM1dCMzJHTzJHdXdML2dvYXdadGdJOWptTEp5UEE1ekIzWE1ON2lWa0NZMkhhcUY2NkRsc0NydkNWUGlKaDNtVWY4Y2Y4''@;'; put 'put ''bFcreGovd0xRRVNYQUlyNk1Lc1VCTEt3cWx3S2R3S1RlRlB4QmJCSXVHSUZzbUtpSWlKUUl5S0NYRk1uQlRueGNXM3FTZ1VkVVdwNklFMExuMlVGcVZ2VWtIYWxZNmtNK2xLWnVWTitVQ3V5QmR5VGE3TEhjV2tlQlZXMFpXa3NxQnNLQldsR2NOaWs3RkM3TGNLcTdLYVZGUHFqUHBKL2FybTFD''@;'; put 'put ''MzFVSzJxaG5xdk52N1RFSTNTUnJWSnJhajkxTzYwcHRZY2VoaHE2elo5V2MvcFJkM1FiL1JIL1VsL2lWdmk3dmhVZkRiK0paNk41LzhDREJETXlBQUJBQUFCUEFCb0FBb0FRUUFFQUFJQUtBQTVBSXNBQUFDVEFtc0FBd0FCZU5xTmtzdE93a0FVaHY4V05LREdLREhHc09yS0dCTzVxZUJ0WWRT''@;'; put 'put ''d1VkUkloSzBnRlJyQllpbEdYZm8yYmx6NkRGNmV3STJQNERQNGR6aXROMkxJcEoxdjV2em5Qek9uQlJERE8wTFF3bEVBTzN4NnJHR09xeDdyR0VkVE9JUU4zQXFIc1lKSDRTSEU4U0U4akZrdEloeEJSa3NJUnhIWFRvUkhzYVQ1UG1Nb2FRL0NFNWpTdzhLVGlPa3p3aytZMXVlRm41SFNONFZm''@;'; put 'put ''RU5IYndxOFkwYTk3L0JaQ1hML0RObXkwY1FNSEZ1cG93SVdCZXo0WnBKQkdsbFJsMUtDdW9UUWRjcEZ6aTFrZDVsNGdnUUpNNWpuS3lXWWZmSlZKbFVYYVVyczFISEduamk2NVFuV2FtU2sxMW5HTVhaU3hUK3JudFJCNCtVNkRWalIrMVN4eDVWQnJxWk1iMzg0d1dOMFMrWlE2bTBxdkt3ZDBN''@;'; put 'put ''VGw3MlRYR0t1UkR4cjNZSHVmYVAzM3pldTF5dFlZa3g5VVBaMXY1dGdMWEJHTTIxMzVPUjdMcWpMcmM3ZklyK1pva1o3OW1TOTMxcTJheTd6Mzc3ZjN0WlprN1Zad3BIemZvWFVFNm1WZFJneU9yWWptZU1JMVZ2aGV4SFB4UE9aeFRaNm82am55RmZPQll4Q1Z2WWpIaVVOUDhCTGhaaDVjQUFI''@;'; put 'put ''amFiWk5YYkJ4VkZJYS8zN0YzM1RaTzc3MVh4MTczeENrdWE4ZXhZeWN1Y2V6RVNjYTdZMmZ4ZWhmR3UzRnN1Z1FDSGtEd3dqUGxDUkM5Q2lSNFFLSlgwWHNIMFhta0IrL2NDVjRrN3NOOC94bWQ4NTh6OTk0aEMzZWRHMkFlLzdOVW0zNlF4UXl5eWNHSG4xenl5S2VBUWdMTXBJaFp6R1lPYzZm''@;'; put 'put ''cTU3T0FoU3hpTVV0WXlqS1dzNEtWckdJMWExakxPdGF6Z1kxc1lqTmIyTW8ydGxQTURrb29KVWdaNVZSUVNSWFYxTENUWGRTeW16M3NaUjkxMU5OQUl5R2FhR1kvTFJ5Z2xUWU8wazRIaHpoTUoxMTAwOE1SZWpsS0gvMGM0emdEbk9Ba3A3QzRuYXU0bXB1NWdUdDRuK3U1bHFmNW1EdTVqYnQ1''@;'; put 'put ''bm1lNWgwSEMzRWlFRjdGNWpoZDRsWmQ0bVZmNGxpSGU0RFZlNTE2RytZV2JlSnMzZVl2VGZNK1BYTWNGUkJsaGxCaHhiaUhCUlZ5SXd4Z3BrcHhobk84NHl5UVRYTXlsWE1KajNNcmxYTVlWWE1rUC9NVGp5dElNWlN0SFB2bjVpNzg1SjVTclBPVkxLbENoQXBxcElzM1NiTTNoVjM3VFhNM1Rm''@;'; put 'put ''QzNRUWkzaWQ5N1JZaTNSVWkzVGNxM2djNzdRU3EzU2FxM1JXcTNUZW0zUVJtM2lQdTdYWm0zUlZtM1RkaFZyaDByNGd6LzVrcTlVcXFES1ZLNEtWYXBLMWFyUlR1MVNyWFpyai9acUgwK29UdlZxVUNOZjg0MUN2TXRuZk1DSGZNU252TWNuYWxLejlxdEZCOVNxTmgxVXV6cDBTSWZWcVM1MXEw''@;'; put 'put ''ZEgxTXNEUE1nalBNcERQTXcxM0tXalBNT1RQS1UrZmxhL2p1bTRCblJDSjNWS2xnWVZWa1MyaHZ4MW8xYllTY1Q5bHFHdmJ0Q3h6OWcreTRXL0xqR2NpTnNqZnN2UTF4aTIwa2tSZzhhcENpdnBEM2tXdG1GK0tKSklXdUd3SFUvbTIvOUtmOGl6c2oycmtQR3dYUlEyaHhPam81WkpMUnpPQ1B3''@;'; put 'put ''dG5udlVZNHZuRXpVc2JNMnNITWtJZkcxV09KVzBmVEdETnRNdlp0QnVYc1pkRkxabmVzUXpQZHBOZXR5RnY4T2JJV0VZNkRpZGlnOWJUbW8wWnFXU2dVUm01T3MwSFJ6VG9UT3pnNVBab2ROMGNBeTZUTldZQzM4cUhpMHByUXg2TFBOMW02U2ttYWJIbXlabG1OUGpST1BET2FuME05RHpuOGxT''@;'; put 'put ''bVpHL3g5dkJsR0ZCYnpqcWhGT2pRekg3Yk1GNGh1N0wwQlBUMnRkdlpweDBrZDgvZmRxVDA2ZWRuamhZVnVXeUxGanA2eDEycktsck5XN1FheHpHWGVUMVJxSzJZNDlGeC9MR3o2dDBYV21vdnRwampjY0dqNDIrUG1NMDRTTDlObGhTRXZSWTVySGNZNFhIU3NOZ1UzWW81U1Rjb0tLcEljY3F0''@;'; put 'put ''bUxKZk11ZHhVajM3cWRsa1RYOTJlazRZSjBmMENTNjNkT3l3UHQ5akRiN210WjVWdm8wVEhJeUdvdTR5Ym5XMk5RZVJXd25MMko3NmgrM1piY2hBQUFBZU5wajhON0JjQ0lvWWlNalkxL2tCc2FkSEF3Y0RNa0ZHeG5ZblRaSk1qSm9nUmliZVRnWU9TQXNNVFl3aThOcEY3TURBeU1ESjVETjZi''@;'; put 'put ''U0xBY3BtWm5EWnFNTFlFUml4d2FFallpTnppc3RHTlJCdkYwY0RBeU9MUTBkeVNBUklTU1FRYk9iallPVFIyc0g0djNVRFMrOUdKZ2FYemF3cGJBd3VMZ0QrSENWZ0FBQUFBQUZZbVBaM0FBQT0pIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXN0eWxlOm5vcm1hbH1jbHIt''@;'; put 'put ''aWNvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MDtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmaWxsOmN1cnJlbnRDb2xvcn1jbHItaWNvbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOmN1cnJlbnRDb2xvcn1jbHItaWNvbi5pcy1n''@;'; put 'put ''cmVlbixjbHItaWNvbi5pcy1zdWNjZXNze2ZpbGw6IzJlODUwMH1jbHItaWNvbi5pcy1ncmVlbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtc3VjY2VzcyAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMyZTg1MDB9Y2xyLWljb24uaXMtcmVkLGNsci1pY29u''@;'; put 'put ''LmlzLWRhbmdlcixjbHItaWNvbi5pcy1lcnJvcntmaWxsOiNlMDIyMDB9Y2xyLWljb24uaXMtcmVkIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1kYW5nZXIgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLWVycm9yIC50cmFuc3BhcmVudC1maWxsLXN0''@;'; put 'put ''cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbi5pcy13YXJuaW5ne2ZpbGw6I2MyN2IwMH1jbHItaWNvbi5pcy13YXJuaW5nIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2MyN2IwMH1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWluZm97ZmlsbDojMDA3N2I4fWNsci1p''@;'; put 'put ''Y29uLmlzLWJsdWUgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLWluZm8gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uLmlzLXdoaXRlLGNsci1pY29uLmlzLWludmVyc2V7ZmlsbDojZmZmfWNsci1pY29uLmlzLXdoaXRlIC50cmFu''@;'; put 'put ''c3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1pbnZlcnNlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2ZmZn1jbHItaWNvbi5pcy1oaWdobGlnaHR7ZmlsbDojMDA3N2I4fWNsci1pY29uLmlzLWhpZ2hsaWdodCAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tl''@;'; put 'put ''OiMwMDc3Yjh9Y2xyLWljb25bc2hhcGUkPSIgdXAiXSBzdmcsY2xyLWljb25bZGlyPXVwXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgwKX1jbHItaWNvbltzaGFwZSQ9IiBkb3duIl0gc3ZnLGNsci1pY29uW2Rpcj1kb3duXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfWNsci1pY29uW3No''@;'; put 'put ''YXBlJD0iIHJpZ2h0Il0gc3ZnLGNsci1pY29uW2Rpcj1yaWdodF0gc3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfWNsci1pY29uW3NoYXBlJD0iIGxlZnQiXSBzdmcsY2xyLWljb25bZGlyPWxlZnRdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9Y2xyLWljb25bZmxpcD1ob3Jpem9u''@;'; put 'put ''dGFsXSBzdmd7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9Y2xyLWljb25bZmxpcD12ZXJ0aWNhbF0gc3Zne3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfWNsci1pY29uIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24gLmNsci1pLWJhZGdl''@;'; put 'put ''IC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbj4qe2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpibG9jaztwb2ludGVyLWV2ZW50czpub25lfWNsci1pY29uPnN2Z3t0cmFuc2l0aW9uOmluaGVyaXR9Y2xyLWljb24+c3ZnIHRpdGxle2Rpc3Bs''@;'; put 'put ''YXk6bm9uZX1jbHItaWNvbiAuY2xyLWktc29saWQsY2xyLWljb24gLmNsci1pLXNvbGlkLS1iYWRnZWQsY2xyLWljb24gLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6bm9uZX1jbHItaWNvbiAuY2xyLWktb3V0bGluZS0tYWxlcnRlZDpub3QoLmNsci1pLW91dGxpbmUpLGNsci1pY29u''@;'; put 'put ''IC5jbHItaS1vdXRsaW5lLS1iYWRnZWQ6bm90KC5jbHItaS1vdXRsaW5lKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydCAuY2xyLWktb3V0bGluZS0tYWxlcnRlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4t''@;'; put 'put ''YWxlcnQgLmNsci1pLW91dGxpbmU6bm90KC5jbHItaS1vdXRsaW5lLS1hbGVydGVkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZS0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0g''@;'; put 'put ''LmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZTpub3QoLmNsci1pLW91dGxpbmUtLWJhZGdlZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWQgLmhhcy1zb2xpZCAuY2xyLWktb3V0bGlu''@;'; put 'put ''ZSxjbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLS1iYWRnZWR7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVkOm5vdCguY2xyLWktc29saWQpLGNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQg''@;'; put 'put ''LmNsci1pLXNvbGlkLS1iYWRnZWQ6bm90KC5jbHItaS1zb2xpZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWRbY2xh''@;'; put 'put ''c3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWJhZGdlZCxjbHItaWNvbi5pcy1zb2xpZFtjbGFzcyo9aGFzLWJhZGdl''@;'; put 'put ''XSAuY2FuLWJhZGdlLmhhcy1zb2xpZCAuY2xyLWktc29saWQ6bm90KC5jbHItaS1zb2xpZC0tYmFkZ2VkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6Ymxv''@;'; put 'put ''Y2t9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWFsZXJ0ZWQsY2xyLWljb24u''@;'; put 'put ''aXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLXNvbGlkOm5vdCguY2xyLWktc29saWQtLWFsZXJ0ZWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5oYXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdle2ZpbGw6IzJlODUwMH1jbHItaWNvbi5o''@;'; put 'put ''YXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzJlODUwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLWVycm9yIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24uaGFzLWJhZGdlLS1lcnJvciAuY2xyLWktYmFkZ2UgLnRy''@;'; put 'put ''YW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojZTAyMjAwfWNsci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2V7ZmlsbDojMDA3N2I4fWNsci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2UgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4''@;'; put 'put ''fWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnR7ZmlsbDojYzI3YjAwfWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnQgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojYzI3YjAwfWNsci1pY29uIC5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFu''@;'; put 'put ''dDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDotMXB4IWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAtMXB4IWltcG9y''@;'; put 'put ''dGFudH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OnRleHQtc2VjdXJpdHktZGlzYztzcmM6dXJsKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9ub3BwYS90ZXh0LXNlY3VyaXR5L21hc3Rlci9kaXN0L3RleHQtc2VjdXJpdHktZGlzYy53b2ZmKX1ib2R5LGh0bWx7Zm9udC13ZWln''@;'; put 'put ''aHQ6NDAwIWltcG9ydGFudDtwYWRkaW5nOjA7bWFyZ2luOjB9Ym9keS5zaG91bGQtbG9naW4gY2xyLW1vZGFsLGh0bWwuc2hvdWxkLWxvZ2luIGNsci1tb2RhbHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWJ1dHRvbjpmb2N1c3tvdXRsaW5lOm5vbmV9LnNsaWRlcntwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTt3aWR0aDozMjBweDttYXJnaW4tbGVmdDo3NXB4O21hcmdpbi10b3A6NzBweDtoZWlnaHQ6NXB4O292ZXJmbG93LXg6aGlkZGVufS5saW5le3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6LjQ7YmFja2dyb3VuZDojNzNkNTQ0O3dpZHRoOjE1MCU7aGVpZ2h0OjVweH0uc3VibGluZXtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiM3M2Q1NDQ7aGVpZ2h0OjVweH0uaW5je2FuaW1hdGlvbjppbmNyZWFzZSAycyBpbmZpbml0ZX0uZGVje2FuaW1hdGlvbjpkZWNyZWFzZSAycyAuNXMgaW5maW5pdGV9QGtleWZyYW1lcyBpbmNyZWFzZXswJXtsZWZ0Oi01JTt3aWR0aDo1JX10b3ts''@;'; put 'put ''ZWZ0OjEzMCU7d2lkdGg6MTAwJX19QGtleWZyYW1lcyBkZWNyZWFzZXswJXtsZWZ0Oi04MCU7d2lkdGg6ODAlfXRve2xlZnQ6MTEwJTt3aWR0aDoxMCV9fS5hcHAtbG9hZGluZ3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEw''@;'; put 'put ''MHZoO2JhY2tncm91bmQ6IzMxNDM1MTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoyMDAwO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjB9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5oLWF1dG97aGVpZ2h0OmF1dG99LmgtdW5zZXQt''@;'; put 'put ''aXtoZWlnaHQ6dW5zZXQhaW1wb3J0YW50fS5taW4taC01MHZoe21pbi1oZWlnaHQ6NTB2aH0uaC0yNHZoLC5oLTI1dmh7aGVpZ2h0OjI1dmh9LmgtNzB2aHtoZWlnaHQ6NzB2aH0uaC04MHZoe2hlaWdodDo4MHZofS5oLTEwMHtoZWlnaHQ6MTAwJX0udy01MHZ3e3dpZHRoOjUwdnd9LnctMTAw''@;'; put 'put ''e3dpZHRoOjEwMCV9LnctNDB7d2lkdGg6NDAlfS5taW4tdy0we21pbi13aWR0aDowcHh9Lm14LTV7bWFyZ2luOjAgNXB4fS5teS01e21hcmdpbjo1cHggMH0ubXktMTV7bWFyZ2luOjE1cHggMH0ubXktMTAtbXgtYXV0b3ttYXJnaW46MTBweCBhdXRvfS5tLTB7bWFyZ2luOjAhaW1wb3J0YW50''@;'; put 'put ''fS5tLTEwe21hcmdpbjoxMHB4fS5tdC0we21hcmdpbi10b3A6MH0ubXQtMC1pe21hcmdpbi10b3A6MCFpbXBvcnRhbnR9Lm10LTMtbmVnYXRpdmV7bWFyZ2luLXRvcDotM3B4fS5tdC01e21hcmdpbi10b3A6NXB4fS5tdC01LWl7bWFyZ2luLXRvcDo1cHghaW1wb3J0YW50fS5tdC0ye21hcmdp''@;'; put 'put ''bi10b3A6MnB4fS5tdC0yLWl7bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fS5tdC0xMHttYXJnaW4tdG9wOjEwcHh9Lm10LTE1e21hcmdpbi10b3A6MTVweH0ubXQtMTd7bWFyZ2luLXRvcDoxN3B4fS5tdC0yMHttYXJnaW4tdG9wOjIwcHh9Lm1sLTB7bWFyZ2luLWxlZnQ6MH0ubWwtM3ttYXJn''@;'; put 'put ''aW4tbGVmdDozcHh9Lm1sLTV7bWFyZ2luLWxlZnQ6NXB4fS5tbC0xMHttYXJnaW4tbGVmdDoxMHB4fS5tbC0xNXttYXJnaW4tbGVmdDoxNXB4fS5tbC0yMHttYXJnaW4tbGVmdDoyMHB4fS5tbC0yMC1pe21hcmdpbi1sZWZ0OjIwcHghaW1wb3J0YW50fS5tci0we21hcmdpbi1yaWdodDowfS5t''@;'; put 'put ''ci01e21hcmdpbi1yaWdodDo1cHh9Lm1yLTEwe21hcmdpbi1yaWdodDoxMHB4fS5tci0xMnttYXJnaW4tcmlnaHQ6MTJweH0ubXItMjB7bWFyZ2luLXJpZ2h0OjIwcHh9Lm1iLTB7bWFyZ2luLWJvdHRvbTowfS5tYi0waXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS5tYi01e21hcmdpbi1i''@;'; put 'put ''b3R0b206NXB4fS5tYi0xMHttYXJnaW4tYm90dG9tOjEwcHh9Lm1iLTEwLWl7bWFyZ2luLWJvdHRvbToxMHB4IWltcG9ydGFudH0ubWItMjB7bWFyZ2luLWJvdHRvbToyMHB4fS5tYi0zMHttYXJnaW4tYm90dG9tOjMwcHh9LnAtMHtwYWRkaW5nOjB9LnAtMTB7cGFkZGluZzoxMHB4fS5wYi0w''@;'; put 'put ''e3BhZGRpbmctYm90dG9tOjB9LnBiLTEwe3BhZGRpbmctYm90dG9tOjEwcHh9LnB5LTV7cGFkZGluZzo1cHggMH0ucHktMTB7cGFkZGluZzoxMHB4IDB9LmJhY2tncm91bmQtdHJhbnNwYXJlbnR7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uYmFja2dyb3VuZC10cmFuc3BhcmVudC1pe2JhY2tn''@;'; put 'put ''cm91bmQ6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5jb2xvci1ncmF5e2NvbG9yOiM1YTVhNWF9LmNvbG9yLWRhcmstZ3JheXtjb2xvcjojNDk1OTY3fS5jb2xvci1kYXJrZXItZ3JheXtjb2xvcjojMzE0MzUxfS5jb2xvci13aGl0ZXtjb2xvcjojZmZmfS5jb2xvci13aGl0ZS1pe2NvbG9yOiNm''@;'; put 'put ''ZmYhaW1wb3J0YW50fS5jb2xvci1ncmVlbntjb2xvcjojNGI5ZTRifS5jb2xvci1kYy1ncmVlbntjb2xvcjojODFiNDQwfS5jb2xvci1yZWR7Y29sb3I6I2U0NTQ1NH0uY29sb3Itb3Jhbmdle2NvbG9yOiNlNjdlMjJ9LmNvbG9yLWJsdWV7Y29sb3I6IzNmOGNjM30uY29sb3IteWVsbG93e2Nv''@;'; put 'put ''bG9yOiNmMWM0MGZ9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5jdXJzb3ItZGVmdWFsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLWRlZmF1bHQtaXtjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LmJhY2tncm91bmQtdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3Bh''@;'; put 'put ''cmVudH0ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0uZm9udC1zaXplLTE1e2ZvbnQtc2l6ZToxNXB4fS5mb250LXNpemUtMTh7Zm9udC1zaXplOjE4cHh9LmZvbnQtYm9sZHtmb250LXdlaWdodDo3MDB9LmZv''@;'; put 'put ''bnQtYm9sZC1pe2ZvbnQtd2VpZ2h0OjcwMCFpbXBvcnRhbnR9LmZvbnQtd2VpZ2h0LTMwMHtmb250LXdlaWdodDozMDB9LmZvbnQtd2VpZ2h0LTcwMHtmb250LXdlaWdodDo3MDB9LndvcmQtYnJlYWt7d29yZC1icmVhazpicmVhay13b3JkfS53b3JkLWJyZWFrLWFsbHt3b3JkLWJyZWFrOmJy''@;'; put 'put ''ZWFrLWFsbH0ucG9zaXRpb24tcmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnBvc2l0aW9uLWFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5kLW5vbmV7ZGlzcGxheTpub25lfS5kLWJsb2Nre2Rpc3BsYXk6YmxvY2t9LmQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5k''@;'; put 'put ''LWZsZXh7ZGlzcGxheTpmbGV4fS5kLWNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXgtdW5zZXR7ZmxleDp1bnNldH0uYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZH0uYWxpZ24tc2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmFsaWduLWl0ZW1zLWNlbnRl''@;'; put 'put ''cnthbGlnbi1pdGVtczpjZW50ZXJ9Lmp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1jb250ZW50LWNlbnRlci1pe2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc3RhcnR7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OmZsZXgtc3RhcnR9Lmp1c3RpZnktY29udGVudC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uanVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5k''@;'; put 'put ''fS5mbGV4LWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1nYXAtNXtnYXA6NXB4fS5jbHItZ2FwLTB7Z2FwOjB9Lm92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0b30uei1pbmRleC1oaWdoZXN0e3otaW5kZXg6MTAwMDAwMDB9LnZlcnRpY2FsLWFsaWduLW1pZGRsZXt2ZXJ0aWNh''@;'; put 'put ''bC1hbGlnbjptaWRkbGV9Lmljb24tZGMtZmlsbHtmaWxsOiM4MWI0NDB9LmRhdGFncmlkLWN1c3RvbS1mb290ZXIgLmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7d2lkdGg6MTAwJX0ucHJvZ3Jlc1N0YXRpY3ttYXJnaW4tdG9wOi02cHghaW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9y''@;'; put 'put ''dGFudDt6LWluZGV4OjEwMDAwIWltcG9ydGFudH0ucHJvZ3Jlc3MsLnByb2dyZXNzLXN0YXRpY3tiYWNrZ3JvdW5kLWNvbG9yOiNmNWY2ZmU7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDo2cHg7bWFyZ2luOjA7bWF4LWhlaWdodDouNTgzMzMzcmVtO21pbi1oZWln''@;'; put 'put ''aHQ6LjE2NjY2N3JlbTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jazt3aWR0aDpjYWxjKDEwMCUgLSA2M3B4KX0ucHJvZ3Jlc3MubG9vcDphZnRlcnthbmltYXRpb246Y2xyLXByb2dyZXNzLWxvb3BlciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO2NvbnRlbnQ6IiAiO3RvcDouMTY2''@;'; put 'put ''NjY3cmVtO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6IzYwYjUxNTt3aWR0aDo3NSV9LmJhZGdlLXdhcm5pbmd7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEgLmNhcmQt''@;'; put 'put ''aGVhZGVyIGgze21hcmdpbi10b3A6MTBweH0ubW9kYWwtaGVhZGVyIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5Om5vbmV9LnNob3ctY2xvc2UgLm1vZGFsLWhlYWRlciAuY2xvc2UgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xOHB4O3JpZ2h0''@;'; put 'put ''Oi0xMHB4fS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6I2Q5NGIyZTtjb2xvcjojZmZmO2JvcmRlcjpub25lfS5jYXJkLWhlYWRlcntmb250LXdlaWdodDozMDB9LnNlbGVjdCBzZWxlY3Q6Zm9jdXN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzQ5NTk2NztiYWNr''@;'; put 'put ''Z3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsdHJhbnNwYXJlbnQgOTUlLCM0OTVhNjcgMCkgbm8tcmVwZWF0fS5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWFyZ2luLWxlZnQ6LjJyZW0haW1wb3J0YW50fS50YWJsZS1hY3RpdmV7YmFja2dyb3VuZDojZDhlM2U5IWltcG9ydGFudDtjb2xv''@;'; put 'put ''cjojMDAwIWltcG9ydGFudH0udGFibGUtYWN0aXZlOmZvY3Vze2JhY2tncm91bmQ6I2Q4ZTNlOX1jbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLWNvbnRyb2wtY29udGFpbmVyLGNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3JhcHBlcixj''@;'; put 'put ''bHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3R7d2lkdGg6MTAwJX10Ym9keXtmb250LXdlaWdodDo0MDB9aDMsaDR7Y29sb3I6IzU4NTg1ODtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjFyZW07bWFyZ2luLXRvcDoxcmVtO21hcmdpbi1ib3R0b206''@;'; put 'put ''MH1oMSxoMntjb2xvcjojNTg1ODU4O2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MnJlbTttYXJnaW4tdG9wOjFyZW07bWFyZ2luLWJvdHRvbTowfWNsci1pY29uLmlzLWluZm97ZmlsbDojODBiNDQxfS5kYXRhZ3JpZC1ob3N0LC5kYXRhZ3JpZC1v''@;'; put 'put ''dmVybGF5LXdyYXBwZXJ7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5Oi13ZWJraXQtYm94IWltcG9ydGFudH0uYnRuLmJ0bi1kYW5nZXIsLmJ0bi5idG4td2FybmluZ3tib3JkZXItY29sb3I6I2VmNGYyZTtiYWNrZ3JvdW5kLWNvbG9yOiNkOTRiMmU7Y29sb3I6I2ZmZn0uZC1ub25le2Rp''@;'; put 'put ''c3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNsci1mbGV4LTF7ZmxleDoxfS5jbHItZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5ib3JkZXItMHtib3JkZXI6MH0u''@;'; put 'put ''Ym94LXNoYWRvdy1ub25le2JveC1zaGFkb3c6bm9uZX0uYm94LXNoYWRvdy1ub25lLWl7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiM4MjgyODJ9LmhhbmRzb250YWJsZS5saXN0Ym94e3BhZGRpbmc6NXB4IDAgNXB4''@;'; put 'put ''IDVweDtib3gtc2hhZG93OjAgNHB4IDIwcHggIzAwMDAwMDcwfS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlke2JhY2tncm91bmQ6cmdiYSgyMzAsMzksMCwuNjc4NDMxMzcyNSkhaW1wb3J0YW50O2JvcmRlcjoxcHggc29saWQgcmVkIWltcG9ydGFudDtjb2xvcjojZmZmIWltcG9ydGFudH0u''@;'; put 'put ''bWFyZ2luLXRvcC0yMHttYXJnaW4tdG9wOjIwcHh9LmhpZGRlbntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51bnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59QG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KXsuZC1zbS1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtc20taW5saW5le2Rp''@;'; put 'put ''c3BsYXk6aW5saW5lIWltcG9ydGFudH0uZC1zbS1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLXNtLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLXNtLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLXNtLXRhYmxlLWNlbGx7ZGlz''@;'; put 'put ''cGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH0uZC1zbS1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmQtc20taW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1mbGV4LXNtLXJv''@;'; put 'put ''d3tmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1nYXAtc20tNXtnYXA6NXB4fS5jbHItZ2FwLXNtLTB7Z2FwOjB9fUBtZWRpYSAobWluLXdpZHRoOiA3NjhweCl7LmQtbWQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLW1kLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQt''@;'; put 'put ''bWQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1tZC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1tZC10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0uZC1tZC10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9''@;'; put 'put ''LmQtbWQtZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLW1kLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHItZmxleC1tZC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1tZC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jbHIt''@;'; put 'put ''Z2FwLW1kLTV7Z2FwOjVweH0uY2xyLWdhcC1tZC0we2dhcDowfX1AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpey5kLWxnLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1sZy1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5kLWxnLWlubGluZS1ibG9ja3tkaXNwbGF5Omlu''@;'; put 'put ''bGluZS1ibG9jayFpbXBvcnRhbnR9LmQtbGctYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtbGctdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtbGctdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fS5kLWxnLWZsZXh7ZGlzcGxheTpmbGV4IWlt''@;'; put 'put ''cG9ydGFudH0uZC1sZy1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgtbGctY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZsZXgtbGctcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uY2xyLWdhcC1sZy01e2dhcDo1cHh9LmNsci1nYXAt''@;'; put 'put ''bGctMHtnYXA6MH19LmRhdGFncmlkLWJvZHl7cGFkZGluZy1ib3R0b206MnJlbSFpbXBvcnRhbnR9LmFib3J0TXNne3doaXRlLXNwYWNlOnByZS13cmFwO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX0jZ3JhcGggc3Zne2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Lm5vLXRhYmxlLXNlbGVjdGVke2Rp''@;'; put 'put ''c3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp3aGl0ZTt6LWluZGV4OjEwO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjB9LmNvcHlSaWdodHtiYWNr''@;'; put 'put ''Z3JvdW5kOiM0OTU5NjchaW1wb3J0YW50O2NvbG9yOiNmZmY7ZGlzcGxheTpmbGV4IWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAwIDRweDt6LWluZGV4OjEwMH0ubmF2LXRyZWU+Y2xyLXRyZWUtbm9kZS5jbHItZXhwYW5k''@;'; put 'put ''ZWR7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fWNsci10cmVlLW5vZGV7b3ZlcmZsb3cteTp2aXNpYmxlfWNsci10cmVlLW5vZGU6Zm9jdXN7b3V0bGluZTpub25lIWltcG9ydGFudH1jbHItdHJlZS1ub2RlIC5jbHItdHJlZW5vZGUtY2FyZXR7d2lkdGg6YXV0byFpbXBvcnRhbnQ7''@;'; put 'put ''aGVpZ2h0OmF1dG8haW1wb3J0YW50fWNsci10cmVlLW5vZGUgLmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lcntwYWRkaW5nOjAgOHB4O3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1jbHItdHJlZS1ub2RlIC5jbHItdHJlZS1ub2Rl''@;'; put 'put ''LWNvbnRlbnQtY29udGFpbmVyOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmNsci10cmVlbm9kZS1jb250ZW50IHB7d2hpdGUtc3BhY2U6bm93cmFwfS5zZWFyY2gtbm9kZXttYXJnaW4tYm90dG9tOjVweH0udHJlZS1zZWFyY2gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNw''@;'; put 'put ''bGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS50cmVlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7bWFyZ2luOjB9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtib3R0b206MDttYXJnaW46NXB4IDAgMDtiYWNrZ3Jv''@;'; put 'put ''dW5kOndoaXRlO2N1cnNvcjpwb2ludGVyfS5jbHItdHJlZS1ub2Rle292ZXJmbG93OnZpc2libGUhaW1wb3J0YW50fS5jb250ZW50LWNvbnRhaW5lcnt3aWR0aDoxMDAlfUAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKXsud3RIb2xkZXJ7d2lkdGg6MTAwJSFpbXBvcnRhbnR9fWlucHV0Ojot''@;'; put 'put ''bXMtY2xlYXJ7ZGlzcGxheTpub25lfUBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2Nsci10cmVlLW5vZGUuY2xyLWV4cGFuZGVke3BhZGRpbmctYm90dG9tOjIwcHg7bWluLWhlaWdodDphdXRvfS5jbHItdHJlZS1u''@;'; put 'put ''b2Rle21pbi1oZWlnaHQ6MjRweH0uY2xyLXRyZWVub2RlLWNoaWxkcmVue292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnR9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItaWNvbiwuY2xyLXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb257bWluLXdpZHRoOjE2cHg7bWluLWhlaWdodDoxNnB4fS50''@;'; put 'put ''cmVlLXNlYXJjaC13cmFwcGVyIGNsci1pY29ue2JvdHRvbToycHh9LmNvbnRlbnQtY29udGFpbmVye2hlaWdodDoxMDAlfS5jb250ZW50LWFyZWE+LmNhcmR7bWFyZ2luLWJvdHRvbToyMHB4fS5yZWNvcmQtZWRpdC1tb2RhbCB0ZXh0YXJlYXttaW4taGVpZ2h0OjQycHh9fS5ib3JkZXItYm90''@;'; put 'put ''dG9tLWRpdmlkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2QzZDNkM30ubG9hZGluZ1NwaW5uZXJ7aGVpZ2h0Ojcwdmg7ZmxleDoxO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9LmRpc2FibGUt''@;'; put 'put ''cGFzc3dvcmQtbWFuYWdlcnstd2Via2l0LXRleHQtc2VjdXJpdHk6ZGlzYzstbW96LXRleHQtc2VjdXJpdHk6ZGlzYzt0ZXh0LXNlY3VyaXR5OmRpc2M7Zm9udC1mYW1pbHk6dGV4dC1zZWN1cml0eS1kaXNjfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX1oci5saWdodHtib3JkZXI6MDti''@;'; put 'put ''b3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGVkZWRlfS5zcGlubmVye2JhY2tncm91bmQ6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc3Bpbm5lci4xNmY3NjNjZWJjNmI2NGRmLXN2ZykhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXI6YWZ0ZXJ7YmFja2dyb3VuZDp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9jYXJldC42NWYxZmMwYWNiZTRjN2ZmLXN2ZykhaW1wb3J0YW50fS50YWJsZS1zZWFyY2gtd3JhcHBlcntiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiNmZmZ9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO21pbi13aWR0aDoxNzBweH0udGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgY2xyLWljb24sLnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13''@;'; put 'put ''cmFwcGVyIC5zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE5cHg7dG9wOjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIGNsci1pY29ue2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6d2hpdGV9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250''@;'; put 'put ''YWluZXJ7bWFyZ2luLXRvcDotNXB4O21hcmdpbi1yaWdodDowfS50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVyIGxhYmVse2Rpc3BsYXk6bm9uZX0udGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWNoZWNrYm94LWNvbnRhaW5lcnttYXJnaW4tdG9wOjB9LnRhYmxlLXNl''@;'; put 'put ''YXJjaC13cmFwcGVyIGlucHV0e2JvcmRlci1ib3R0b206bm9uZTtib3JkZXI6MXB4IHNvbGlkICM5OTl9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLC50YWJsZS1zZWFyY2gtd3JhcHBlciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1''@;'; put 'put ''dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0udGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXRbdHlwZT1udW1iZXJdey1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmRjLWxvY2tlZC1jb250cm9se29wYWNpdHk6LjQ7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH0u''@;'; put 'put ''bGluay1pdHtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfQo='';'; put 'run;'; put '%sasjsout(CSS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9/images; %let service=caret-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret.65f1fc0acbe4c7ff-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=datacontroller-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iMTY5MCIgaGVpZ2h0PSIyNDAiIHZpZXdCb3g9IjAgMCAxNjkwIDI0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwNV83KSI+CjxwYXRoIGQ9Ik0xMjQuOSA1NS4yMDAxQzEyOC4y''@;'; put 'put ''IDU1LjYwMDEgMTMxLjQgNTUuOTAwMSAxMzQuNyA1Ni4zMDAxQzE0Mi42IDU3LjQwMDEgMTUwLjMgNTguOTAwMSAxNTcuNSA2Mi42MDAxQzE1OS42IDYzLjcwMDEgMTYxLjYgNjQuOTAwMSAxNjMuMSA2Ni44MDAxQzE2NS41IDY5LjYwMDEgMTY1LjQgNzIuNjAwMSAxNjMgNzUuNDAwMUMxNjAu''@;'; put 'put ''NSA3OC4yMDAxIDE1Ny4zIDc5LjgwMDEgMTUzLjkgODEuMTAwMUMxNDYgODQuMjAwMSAxMzcuNyA4NS42MDAxIDEyOS4zIDg2LjMwMDFDMTE1LjYgODcuNDAwMSAxMDIuMSA4Ni45MDAxIDg4LjcgODMuNzAwMUM4NC4zIDgyLjcwMDEgODAgODEuMzAwMSA3Ni4xIDc5LjEwMDFDNzQuNiA3OC4z''@;'; put 'put ''MDAxIDczLjIgNzcuMzAwMSA3MS45IDc2LjEwMDFDNjguMyA3Mi42MDAxIDY4LjMgNjguOTAwMSA3MiA2NS42MDAxQzc2IDYyLjAwMDEgODAuOSA2MC4zMDAxIDg1LjkgNTguOTAwMUM5Mi45IDU2LjkwMDEgMTAwIDU1LjkwMDEgMTA3LjIgNTUuNDAwMUMxMDcuOCA1NS40MDAxIDEwOC41IDU1''@;'; put 'put ''LjYwMDEgMTA5IDU1LjEwMDFDMTE0LjIgNTUuMjAwMSAxMTkuNiA1NS4yMDAxIDEyNC45IDU1LjIwMDFaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik02OS4yMDAxIDEzNy4zQzc1LjYwMDEgMTQ1LjUgODQuNzAwMSAxNDguNSA5NC4xMDAxIDE1MC41QzExMi43IDE1NC41IDEzMS4zIDE1''@;'; put 'put ''NCAxNDkuNCAxNDcuNkMxNTUgMTQ1LjYgMTYwLjIgMTQyLjkgMTYzLjkgMTM3LjlDMTY0LjUgMTM3LjEgMTY0LjggMTM3LjUgMTY1LjEgMTM4LjFDMTY1LjcgMTM5LjQgMTY2IDE0MC43IDE2NiAxNDIuMUMxNjYgMTQ3IDE2NiAxNTIgMTY2IDE1Ni45QzE2NiAxNjAuMSAxNjQuNSAxNjIuNiAx''@;'; put 'put ''NjIuMyAxNjQuOEMxNTcuNyAxNjkuNCAxNTEuOSAxNzEuOSAxNDUuOCAxNzMuOEMxMzMuNSAxNzcuNiAxMjAuOSAxNzguNCAxMDguMiAxNzcuNUM5OC43MDAxIDE3Ni44IDg5LjUgMTc1IDgwLjggMTcxLjFDNzcuMSAxNjkuNCA3My43MDAxIDE2Ny40IDcxLjAwMDEgMTY0LjNDNjguOTAwMSAx''@;'; put 'put ''NjEuOSA2Ny44IDE1OS4yIDY3LjggMTU2QzY3LjkgMTUxLjUgNjcuOCAxNDcgNjcuOCAxNDIuNUM2Ny44IDE0MC43IDY4LjEwMDEgMTM5IDY5LjIwMDEgMTM3LjNaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik02OS4yOTk5IDEwNi40Qzc0LjU5OTkgMTEzLjUgODEuOTk5OSAxMTYuNSA4''@;'; put 'put ''OS44OTk5IDExOC42QzEwOC44IDEyMy42IDEyNy43IDEyMy41IDE0Ni40IDExNy45QzE1Mi42IDExNi4xIDE1OC40IDExMy40IDE2Mi45IDEwOC41QzE2My41IDEwNy45IDE2My45IDEwNi41IDE2NC42IDEwNi43QzE2NS42IDEwNyAxNjUuNiAxMDguNCAxNjUuOSAxMDkuNUMxNjYuMyAxMTEu''@;'; put 'put ''MiAxNjYuMSAxMTIuOSAxNjYuMSAxMTQuNkMxNjYuMSAxMTggMTY2IDEyMS4zIDE2Ni4xIDEyNC43QzE2Ni4zIDEyOC45IDE2NC42IDEzMi4yIDE2MS41IDEzNC45QzE1Ni44IDEzOS4xIDE1MS4xIDE0MS42IDE0NSAxNDMuMkMxMjQuNSAxNDguNyAxMDQuMSAxNDguNiA4My45OTk5IDE0MS42''@;'; put 'put ''Qzc5LjA5OTkgMTM5LjkgNzQuNTk5OSAxMzcuNSA3MC45OTk5IDEzMy42QzY4Ljc5OTkgMTMxLjIgNjcuNyAxMjguNCA2Ny43IDEyNS4xQzY3LjggMTIwLjcgNjcuNyAxMTYuMiA2Ny43IDExMS44QzY3LjggMTEwIDY4LjA5OTkgMTA4LjIgNjkuMjk5OSAxMDYuNFoiIGZpbGw9IiNFMEUwRTAi''@;'; put 'put ''Lz4KPHBhdGggZD0iTTY5LjEgNzYuN0M3MC42IDgxLjEgNzQuMiA4My4wOTk5IDc4IDg0Ljg5OTlDODQuOCA4OC4wOTk5IDkyLjEgODkuNiA5OS40IDkwLjVDMTEzLjkgOTIuMyAxMjguNCA5Mi4xIDE0Mi43IDg5LjFDMTQ4LjUgODcuOSAxNTQuMSA4Ni4zIDE1OS4yIDgzLjFDMTYyLjEgODEu''@;'; put 'put ''MyAxNjMuNiA3OS42IDE2NC42IDc2LjhDMTY1LjYgNzguMiAxNjUuOSA3OS43IDE2NS45IDgxLjJDMTY1LjkgODYuMiAxNjYgOTEuMSAxNjUuOSA5Ni4xQzE2NS44IDEwMC4zIDE2My40IDEwMy4zIDE2MC4zIDEwNS44QzE1NC41IDExMC40IDE0Ny43IDExMi44IDE0MC42IDExNC40QzEyMS44''@;'; put 'put ''IDExOC41IDEwMy4yIDExOC4yIDg0LjkgMTEyQzgwLjEgMTEwLjQgNzUuNSAxMDguMSA3MS44IDEwNC41QzY5IDEwMS44IDY3LjUgOTguNyA2Ny42IDk0LjdDNjcuNyA5MC40IDY3LjYgODYuMSA2Ny42IDgxLjhDNjcuOCA3OS45IDY4LjEgNzguMyA2OS4xIDc2LjdaIiBmaWxsPSIjOEVDNjNG''@;'; put 'put ''Ii8+CjxwYXRoIGQ9Ik0xODMuOSAyMTAuOUMyMDAuMiAyMTEuOCAyMDguOSAxOTEuOCAxOTcuMSAxODAuNUMxODQuNyAxNjguNiAxNjQuMyAxNzkuNyAxNjcuNSAxOTYuNUM5My44IDI0My41IC0wLjk5OTk4MSAxNzMuMiAyNiA4Ny44MDAxTDcuODAwMDIgNzUuNjAwMUMtMzMuMSAxODQuMyA5''@;'; put 'put ''Mi44IDI3Ni4yIDE4My45IDIxMC45Wk0xNzguNyAxODcuNEMxODYuMyAxNzkuNSAxOTguNCAxOTAuNSAxOTEuMyAxOTguOEMxODMuOCAyMDcuNSAxNzAuNiAxOTUuOCAxNzguNyAxODcuNFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTM1LjIgNTAuNzAwMUM0Ni45IDYxLjkwMDEgNjYu''@;'; put 'put ''MiA1Mi43MDAxIDY1LjEgMzYuNzAwMUMxMzguNyAtMTAuNyAyMzQgNTkuNTAwMSAyMDcgMTQ1LjJMMjI1LjIgMTU3LjRDMjY0LjkgNTEuODAwMSAxNDQuNCAtNDMuMjk5OSA1MS4yIDIwLjYwMDFDMzMuNyAxNy4wMDAxIDIyLjQgMzguNDAwMSAzNS4yIDUwLjcwMDFaTTUzLjYgNDMuODAwMUM0''@;'; put 'put ''NS44IDUxLjkwMDEgMzMuNSA0MC4xMDAxIDQxLjMgMzIuMDAwMUM0OS4xIDIzLjkwMDEgNjEuNCAzNS43MDAxIDUzLjYgNDMuODAwMVoiIGZpbGw9IiM4RUM2M0YiLz4KPHBhdGggZD0iTTMyMy41NzUgNDcuODg3NEMzMjMuNTc1IDQ2Ljc5MDEgMzIzLjkxNyA0NS44OTg1IDMyNC42MDMgNDUu''@;'; put 'put ''MjEyN0MzMjUuNDI2IDQ0LjM4OTcgMzI2LjM4NiA0My45NzgyIDMyNy40ODQgNDMuOTc4MkgzNjkuMDQ0QzM3OC45MiA0My45NzgyIDM4OC4wNDEgNDUuNzYxMyAzOTYuNDA4IDQ5LjMyNzZDNDA0LjkxMyA1Mi44OTM4IDQxMi4yNTEgNTcuOTAwMyA0MTguNDIzIDY0LjM0N0M0MjQuNTk2IDcw''@;'; put 'put ''LjY1NjUgNDI5LjQ2NSA3OC4yMDA1IDQzMy4wMzEgODYuOTc5QzQzNi41OTcgOTUuNzU3NSA0MzguMzggMTA1LjQyOCA0MzguMzggMTE1Ljk4OUM0MzguMzggMTI2LjU1MSA0MzYuNTk3IDEzNi4yMjEgNDMzLjAzMSAxNDQuOTk5QzQyOS40NjUgMTUzLjc3OCA0MjQuNTk2IDE2MS4zOSA0MTgu''@;'; put 'put ''NDIzIDE2Ny44MzdDNDEyLjI1MSAxNzQuMTQ2IDQwNC45MTMgMTc5LjA4NCAzOTYuNDA4IDE4Mi42NTFDMzg4LjA0MSAxODYuMjE3IDM3OC45MiAxODggMzY5LjA0NCAxODhIMzI3LjQ4NEMzMjYuMzg2IDE4OCAzMjUuNDI2IDE4Ny42NTcgMzI0LjYwMyAxODYuOTcxQzMyMy45MTcgMTg2LjE0''@;'; put 'put ''OCAzMjMuNTc1IDE4NS4xODggMzIzLjU3NSAxODQuMDkxVjQ3Ljg4NzRaTTM0OS4yOTMgNjkuMjg0OVYxNjIuNjkzSDM2OS42NjJDMzc1LjgzNCAxNjIuNjkzIDM4MS40NTggMTYxLjUyNyAzODYuNTMzIDE1OS4xOTZDMzkxLjYwOCAxNTYuODY0IDM5NS45MjggMTUzLjY0MSAzOTkuNDk1IDE0''@;'; put 'put ''OS41MjZDNDAzLjE5OCAxNDUuNDExIDQwNi4wMSAxNDAuNTQxIDQwNy45MyAxMzQuOTE4QzQwOS45ODggMTI5LjE1NyA0MTEuMDE2IDEyMi44NDcgNDExLjAxNiAxMTUuOTg5QzQxMS4wMTYgMTA5LjI2OCA0MDkuOTg4IDEwMy4wMjcgNDA3LjkzIDk3LjI2NjNDNDA2LjAxIDkxLjUwNTQgNDAz''@;'; put 'put ''LjE5OCA4Ni41Njc1IDM5OS40OTUgODIuNDUyNkMzOTUuOTI4IDc4LjMzNzcgMzkxLjYwOCA3NS4xMTQzIDM4Ni41MzMgNzIuNzgyNkMzODEuNDU4IDcwLjQ1MDggMzc1LjgzNCA2OS4yODQ5IDM2OS42NjIgNjkuMjg0OUgzNDkuMjkzWk01MzEuMDkzIDE3Ny45MThDNTI3LjM4OSAxODAuNjYy''@;'; put 'put ''IDUyMy4xMzcgMTgzLjEzMSA1MTguMzM3IDE4NS4zMjVDNTEzLjUzNiAxODcuMzgzIDUwOC43MzUgMTg4LjQxMSA1MDMuOTM1IDE4OC40MTFDNDk2LjgwMiAxODguNDExIDQ5MC4yMTggMTg3LjEwOCA0ODQuMTgzIDE4NC41MDJDNDc4LjE0OCAxODEuODk2IDQ3Mi45MzYgMTc4LjI2MSA0Njgu''@;'; put 'put ''NTQ2IDE3My41OThDNDY0LjI5NCAxNjguOTM0IDQ2MC45MzQgMTYzLjQ0OCA0NTguNDY1IDE1Ny4xMzhDNDU1Ljk5NiAxNTAuODI5IDQ1NC43NjEgMTQzLjk3IDQ1NC43NjEgMTM2LjU2NEM0NTQuNzYxIDEyOS40MzEgNDU2LjA2NCAxMjIuNzc5IDQ1OC42NzEgMTE2LjYwNkM0NjEuMjc3IDEx''@;'; put 'put ''MC4yOTcgNDY0Ljg0MyAxMDQuODEgNDY5LjM2OSAxMDAuMTQ3QzQ3My44OTYgOTUuMzQ2IDQ3OS4xMDggOTEuNTc0IDQ4NS4wMDYgODguODMwN0M0OTEuMDQxIDg2LjA4NzQgNDk3LjQ4OCA4NC43MTU4IDUwNC4zNDYgODQuNzE1OEM1MDkuMTQ3IDg0LjcxNTggNTEzLjg3OSA4NS44MTMxIDUx''@;'; put 'put ''OC41NDIgODguMDA3N0M1MjMuMjA2IDkwLjA2NTIgNTI3LjM4OSA5Mi40NjU1IDUzMS4wOTMgOTUuMjA4OFY4OS4wMzY1QzUzMS4wOTMgODcuOTM5MSA1MzEuNDM2IDg3LjA0NzYgNTMyLjEyMiA4Ni4zNjE4QzUzMi45NDUgODUuNTM4OCA1MzMuOTA1IDg1LjEyNzMgNTM1LjAwMiA4NS4xMjcz''@;'; put 'put ''SDU1MS4wNUM1NTMuNjU2IDg1LjEyNzMgNTU0Ljk1OSA4Ni40MzAzIDU1NC45NTkgODkuMDM2NVYxODQuMDkxQzU1NC45NTkgMTg2LjY5NyA1NTMuNjU2IDE4OCA1NTEuMDUgMTg4SDUzNS4wMDJDNTMzLjkwNSAxODggNTMyLjk0NSAxODcuNjU3IDUzMi4xMjIgMTg2Ljk3MUM1MzEuNDM2IDE4''@;'; put 'put ''Ni4xNDggNTMxLjA5MyAxODUuMTg4IDUzMS4wOTMgMTg0LjA5MVYxNzcuOTE4Wk00NzkuNjU3IDEzNi41NjRDNDc5LjY1NyAxNDAuMjY3IDQ4MC4zNDIgMTQzLjc2NSA0ODEuNzE0IDE0Ny4wNTdDNDgzLjA4NiAxNTAuMjExIDQ4NC45MzcgMTUzLjAyMyA0ODcuMjY5IDE1NS40OTJDNDg5LjYw''@;'; put 'put ''MSAxNTcuOTYxIDQ5Mi4yNzYgMTU5Ljk1IDQ5NS4yOTMgMTYxLjQ1OUM0OTguNDQ4IDE2Mi44MyA1MDEuNzQgMTYzLjUxNiA1MDUuMTY5IDE2My41MTZDNTA4Ljg3MiAxNjMuNTE2IDUxMi4yMzMgMTYyLjgzIDUxNS4yNTEgMTYxLjQ1OUM1MTguMjY4IDE1OS45NSA1MjAuODc0IDE1Ny45NjEg''@;'; put 'put ''NTIzLjA2OSAxNTUuNDkyQzUyNS40MDEgMTUzLjAyMyA1MjcuMTg0IDE1MC4yMTEgNTI4LjQxOCAxNDcuMDU3QzUyOS42NTMgMTQzLjc2NSA1MzAuMjcgMTQwLjI2NyA1MzAuMjcgMTM2LjU2NEM1MzAuMjcgMTMyLjg2IDUyOS42NTMgMTI5LjQzMSA1MjguNDE4IDEyNi4yNzZDNTI3LjE4NCAx''@;'; put 'put ''MjIuOTg0IDUyNS40MDEgMTIwLjEwNCA1MjMuMDY5IDExNy42MzVDNTIwLjg3NCAxMTUuMTY2IDUxOC4yNjggMTEzLjI0NiA1MTUuMjUxIDExMS44NzRDNTEyLjIzMyAxMTAuMzY1IDUwOC44NzIgMTA5LjYxMSA1MDUuMTY5IDEwOS42MTFDNTAxLjc0IDEwOS42MTEgNDk4LjQ0OCAxMTAuMzY1''@;'; put 'put ''IDQ5NS4yOTMgMTExLjg3NEM0OTIuMjc2IDExMy4yNDYgNDg5LjYwMSAxMTUuMTY2IDQ4Ny4yNjkgMTE3LjYzNUM0ODQuOTM3IDEyMC4xMDQgNDgzLjA4NiAxMjIuOTg0IDQ4MS43MTQgMTI2LjI3NkM0ODAuMzQyIDEyOS40MzEgNDc5LjY1NyAxMzIuODYgNDc5LjY1NyAxMzYuNTY0Wk01NzQu''@;'; put 'put ''NDA3IDg5LjAzNjVDNTc0LjQwNyA4Ny45MzkxIDU3NC43NSA4Ny4wNDc2IDU3NS40MzYgODYuMzYxOEM1NzYuMTIyIDg1LjUzODggNTc3LjAxMyA4NS4xMjczIDU3OC4xMTEgODUuMTI3M0g1OTMuMzM2VjU4LjE3NDZDNTkzLjMzNiA1Ny4wNzczIDU5My42NzkgNTYuMTg1OCA1OTQuMzY0IDU1''@;'; put 'put ''LjQ5OTlDNTk1LjE4NyA1NC42NzcgNTk2LjE0OCA1NC4yNjU1IDU5Ny4yNDUgNTQuMjY1NUg2MTMuMjkzQzYxNS44OTkgNTQuMjY1NSA2MTcuMjAyIDU1LjU2ODUgNjE3LjIwMiA1OC4xNzQ2Vjg1LjEyNzNINjM1LjMwOEM2MzYuNDA1IDg1LjEyNzMgNjM3LjI5NyA4NS41Mzg4IDYzNy45ODIg''@;'; put 'put ''ODYuMzYxOEM2MzguNjY4IDg3LjA0NzYgNjM5LjAxMSA4Ny45MzkxIDYzOS4wMTEgODkuMDM2NVYxMDQuMjYyQzYzOS4wMTEgMTA1LjM1OSA2MzguNjY4IDEwNi4yNSA2MzcuOTgyIDEwNi45MzZDNjM3LjI5NyAxMDcuNjIyIDYzNi40MDUgMTA3Ljk2NSA2MzUuMzA4IDEwNy45NjVINjE3LjIw''@;'; put 'put ''MlYxODQuMDkxQzYxNy4yMDIgMTg2LjY5NyA2MTUuODk5IDE4OCA2MTMuMjkzIDE4OEg1OTcuMjQ1QzU5Ni4xNDggMTg4IDU5NS4xODcgMTg3LjY1NyA1OTQuMzY0IDE4Ni45NzFDNTkzLjY3OSAxODYuMTQ4IDU5My4zMzYgMTg1LjE4OCA1OTMuMzM2IDE4NC4wOTFWMTA3Ljk2NUg1NzguMTEx''@;'; put 'put ''QzU3Ny4wMTMgMTA3Ljk2NSA1NzYuMTIyIDEwNy42MjIgNTc1LjQzNiAxMDYuOTM2QzU3NC43NSAxMDYuMjUgNTc0LjQwNyAxMDUuMzU5IDU3NC40MDcgMTA0LjI2MlY4OS4wMzY1Wk03MjkuNjkzIDE3Ny45MThDNzI1Ljk5IDE4MC42NjIgNzIxLjczOCAxODMuMTMxIDcxNi45MzcgMTg1LjMy''@;'; put 'put ''NUM3MTIuMTM3IDE4Ny4zODMgNzA3LjMzNiAxODguNDExIDcwMi41MzUgMTg4LjQxMUM2OTUuNDAzIDE4OC40MTEgNjg4LjgxOSAxODcuMTA4IDY4Mi43ODQgMTg0LjUwMkM2NzYuNzQ4IDE4MS44OTYgNjcxLjUzNiAxNzguMjYxIDY2Ny4xNDcgMTczLjU5OEM2NjIuODk1IDE2OC45MzQgNjU5''@;'; put 'put ''LjUzNCAxNjMuNDQ4IDY1Ny4wNjUgMTU3LjEzOEM2NTQuNTk2IDE1MC44MjkgNjUzLjM2MiAxNDMuOTcgNjUzLjM2MiAxMzYuNTY0QzY1My4zNjIgMTI5LjQzMSA2NTQuNjY1IDEyMi43NzkgNjU3LjI3MSAxMTYuNjA2QzY1OS44NzcgMTEwLjI5NyA2NjMuNDQzIDEwNC44MSA2NjcuOTcgMTAw''@;'; put 'put ''LjE0N0M2NzIuNDk2IDk1LjM0NiA2NzcuNzA4IDkxLjU3NCA2ODMuNjA3IDg4LjgzMDdDNjg5LjY0MiA4Ni4wODc0IDY5Ni4wODggODQuNzE1OCA3MDIuOTQ3IDg0LjcxNThDNzA3Ljc0NyA4NC43MTU4IDcxMi40NzkgODUuODEzMSA3MTcuMTQzIDg4LjAwNzdDNzIxLjgwNyA5MC4wNjUyIDcy''@;'; put 'put ''NS45OSA5Mi40NjU1IDcyOS42OTMgOTUuMjA4OFY4OS4wMzY1QzcyOS42OTMgODcuOTM5MSA3MzAuMDM2IDg3LjA0NzYgNzMwLjcyMiA4Ni4zNjE4QzczMS41NDUgODUuNTM4OCA3MzIuNTA1IDg1LjEyNzMgNzMzLjYwMyA4NS4xMjczSDc0OS42NTFDNzUyLjI1NyA4NS4xMjczIDc1My41NiA4''@;'; put 'put ''Ni40MzAzIDc1My41NiA4OS4wMzY1VjE4NC4wOTFDNzUzLjU2IDE4Ni42OTcgNzUyLjI1NyAxODggNzQ5LjY1MSAxODhINzMzLjYwM0M3MzIuNTA1IDE4OCA3MzEuNTQ1IDE4Ny42NTcgNzMwLjcyMiAxODYuOTcxQzczMC4wMzYgMTg2LjE0OCA3MjkuNjkzIDE4NS4xODggNzI5LjY5MyAxODQu''@;'; put 'put ''MDkxVjE3Ny45MThaTTY3OC4yNTcgMTM2LjU2NEM2NzguMjU3IDE0MC4yNjcgNjc4Ljk0MyAxNDMuNzY1IDY4MC4zMTUgMTQ3LjA1N0M2ODEuNjg2IDE1MC4yMTEgNjgzLjUzOCAxNTMuMDIzIDY4NS44NyAxNTUuNDkyQzY4OC4yMDEgMTU3Ljk2MSA2OTAuODc2IDE1OS45NSA2OTMuODk0IDE2''@;'; put 'put ''MS40NTlDNjk3LjA0OSAxNjIuODMgNzAwLjM0IDE2My41MTYgNzAzLjc3IDE2My41MTZDNzA3LjQ3MyAxNjMuNTE2IDcxMC44MzMgMTYyLjgzIDcxMy44NTEgMTYxLjQ1OUM3MTYuODY5IDE1OS45NSA3MTkuNDc1IDE1Ny45NjEgNzIxLjY2OSAxNTUuNDkyQzcyNC4wMDEgMTUzLjAyMyA3MjUu''@;'; put 'put ''Nzg0IDE1MC4yMTEgNzI3LjAxOSAxNDcuMDU3QzcyOC4yNTMgMTQzLjc2NSA3MjguODcgMTQwLjI2NyA3MjguODcgMTM2LjU2NEM3MjguODcgMTMyLjg2IDcyOC4yNTMgMTI5LjQzMSA3MjcuMDE5IDEyNi4yNzZDNzI1Ljc4NCAxMjIuOTg0IDcyNC4wMDEgMTIwLjEwNCA3MjEuNjY5IDExNy42''@;'; put 'put ''MzVDNzE5LjQ3NSAxMTUuMTY2IDcxNi44NjkgMTEzLjI0NiA3MTMuODUxIDExMS44NzRDNzEwLjgzMyAxMTAuMzY1IDcwNy40NzMgMTA5LjYxMSA3MDMuNzcgMTA5LjYxMUM3MDAuMzQgMTA5LjYxMSA2OTcuMDQ5IDExMC4zNjUgNjkzLjg5NCAxMTEuODc0QzY5MC44NzYgMTEzLjI0NiA2ODgu''@;'; put 'put ''MjAxIDExNS4xNjYgNjg1Ljg3IDExNy42MzVDNjgzLjUzOCAxMjAuMTA0IDY4MS42ODYgMTIyLjk4NCA2ODAuMzE1IDEyNi4yNzZDNjc4Ljk0MyAxMjkuNDMxIDY3OC4yNTcgMTMyLjg2IDY3OC4yNTcgMTM2LjU2NFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTg3My4yMDYgNzQuMjIy''@;'; put 'put ''OEM4NzIuNjU3IDc1LjA0NTggODcxLjkwMyA3NS41MjU4IDg3MC45NDMgNzUuNjYzQzg2OS45ODIgNzUuODAwMiA4NjkuMDIyIDc1LjU5NDQgODY4LjA2MiA3NS4wNDU4Qzg2NC45MDcgNzMuMTI1NSA4NjEuMTM1IDcxLjQ3OTUgODU2Ljc0NiA3MC4xMDc5Qzg1Mi4zNTcgNjguNzM2MiA4NDcu''@;'; put 'put ''ODk5IDY4LjExOSA4NDMuMzczIDY4LjI1NjJDODM3LjQ3NSA2OC4yNTYyIDgzMS45ODggNjkuNTU5MiA4MjYuOTEzIDcyLjE2NTNDODIxLjk3NSA3NC42MzQzIDgxNy42NTQgNzguMDYzNCA4MTMuOTUxIDgyLjQ1MjZDODEwLjI0OCA4Ni43MDQ3IDgwNy4zNjcgOTEuNzExMSA4MDUuMzEgOTcu''@;'; put 'put ''NDcyQzgwMy4yNTIgMTAzLjIzMyA4MDIuMjkyIDEwOS40MDUgODAyLjQyOSAxMTUuOTg5QzgwMi41NjYgMTIyLjg0NyA4MDMuNTk1IDEyOS4yMjUgODA1LjUxNSAxMzUuMTIzQzgwNy41NzMgMTQwLjg4NCA4MTAuMzg1IDE0NS44OTEgODEzLjk1MSAxNTAuMTQzQzgxNy41MTcgMTU0LjM5NSA4''@;'; put 'put ''MjEuODM4IDE1Ny43NTUgODI2LjkxMyAxNjAuMjI0QzgzMS45ODggMTYyLjU1NiA4MzcuNjggMTYzLjcyMiA4NDMuOTkgMTYzLjcyMkM4NTAuMDI1IDE2My41ODUgODU1LjUxMiAxNjIuNTU2IDg2MC40NSAxNjAuNjM2Qzg2NS41MjUgMTU4LjcxNiA4NzAuNTMxIDE1NS45NzIgODc1LjQ2OSAx''@;'; put 'put ''NTIuNDA2Qzg3Ni40MjkgMTUxLjcyIDg3Ny40NTggMTUxLjUxNCA4NzguNTU1IDE1MS43ODlDODc5LjY1MiAxNTEuOTI2IDg4MC41NDQgMTUyLjQ3NSA4ODEuMjMgMTUzLjQzNUw4OTEuMTA2IDE2OC4yNDhDODkyLjM0IDE3MC4xNjkgODkxLjk5NyAxNzEuODgzIDg5MC4wNzcgMTczLjM5MkM4''@;'; put 'put ''ODIuNTMzIDE3OS4xNTMgODc1LjE5NSAxODMuMzM2IDg2OC4wNjIgMTg1Ljk0M0M4NjAuOTMgMTg4LjU0OSA4NTIuOTc0IDE4OS44NTIgODQ0LjE5NiAxODkuODUyQzgzMy42MzQgMTg5Ljk4OSA4MjQuMTAxIDE4OC4zNDMgODE1LjU5NyAxODQuOTE0QzgwNy4yMyAxODEuMzQ4IDgwMC4wMjkg''@;'; put 'put ''MTc2LjM0MSA3OTMuOTk0IDE2OS44OTRDNzg4LjA5NiAxNjMuMzExIDc4My41MDEgMTU1LjQ5MiA3ODAuMjA5IDE0Ni40MzlDNzc3LjA1NCAxMzcuMzg3IDc3NS40MDggMTI3LjM3NCA3NzUuMjcxIDExNi40MDFDNzc1LjEzNCAxMDcuMDczIDc3Ni41NzQgOTguMDIwNyA3NzkuNTkyIDg5LjI0''@;'; put 'put ''MjJDNzgyLjc0NiA4MC4zMjY2IDc4Ny4yMDQgNzIuMzcxMSA3OTIuOTY1IDY1LjM3NTdDNzk4LjcyNiA1OC4zODA0IDgwNS43MjEgNTIuNzU2NyA4MTMuOTUxIDQ4LjUwNDZDODIyLjE4MSA0NC4yNTI1IDgzMS40MzkgNDIuMTI2NSA4NDEuNzI3IDQyLjEyNjVDODQ4LjcyMiA0MS45ODkzIDg1''@;'; put 'put ''NS41OCA0Mi44MTIzIDg2Mi4zMDEgNDQuNTk1NEM4NjkuMTU5IDQ2LjM3ODYgODc1Ljg4IDQ5LjY3MDUgODgyLjQ2NCA1NC40NzEyQzg4My40MjQgNTUuMTU3IDg4My45NzMgNTYuMDQ4NiA4ODQuMTEgNTcuMTQ1OUM4ODQuMjQ3IDU4LjEwNjEgODgzLjk3MyA1OS4wNjYyIDg4My4yODcgNjAu''@;'; put 'put ''MDI2M0w4NzMuMjA2IDc0LjIyMjhaTTkwNi4yMTIgMTM2LjU2NEM5MDYuMjEyIDEyOS4yOTQgOTA3LjUxNSAxMjIuNTA0IDkxMC4xMjEgMTE2LjE5NUM5MTIuNzI3IDEwOS44ODUgOTE2LjIyNSAxMDQuMzk5IDkyMC42MTQgOTkuNzM1MkM5MjUuMTQgOTUuMDcxNyA5MzAuNDIxIDkxLjQzNjgg''@;'; put 'put ''OTM2LjQ1NiA4OC44MzA3Qzk0Mi40OTIgODYuMDg3NCA5NDkuMDA3IDg0LjcxNTggOTU2LjAwMiA4NC43MTU4Qzk2Mi45OTggODQuNzE1OCA5NjkuNDQ0IDg2LjA4NzQgOTc1LjM0MiA4OC44MzA3Qzk4MS4zNzcgOTEuNDM2OCA5ODYuNTkgOTUuMDcxNyA5OTAuOTc5IDk5LjczNTJDOTk1LjUw''@;'; put 'put ''NSAxMDQuMzk5IDk5OS4wMDMgMTA5Ljg4NSAxMDAxLjQ3IDExNi4xOTVDMTAwNC4wOCAxMjIuNTA0IDEwMDUuMzggMTI5LjI5NCAxMDA1LjM4IDEzNi41NjRDMTAwNS4zOCAxNDMuODMzIDEwMDQuMDggMTUwLjYyMyAxMDAxLjQ3IDE1Ni45MzJDOTk5LjAwMyAxNjMuMjQyIDk5NS41MDUgMTY4''@;'; put 'put ''LjcyOSA5OTAuOTc5IDE3My4zOTJDOTg2LjU5IDE3OC4wNTYgOTgxLjM3NyAxODEuNzU5IDk3NS4zNDIgMTg0LjUwMkM5NjkuMzA3IDE4Ny4xMDggOTYyLjc5MiAxODguNDExIDk1NS43OTYgMTg4LjQxMUM5NDguODAxIDE4OC40MTEgOTQyLjI4NiAxODcuMTA4IDkzNi4yNTEgMTg0LjUwMkM5''@;'; put 'put ''MzAuMjE1IDE4MS43NTkgOTI0LjkzNSAxNzguMDU2IDkyMC40MDggMTczLjM5MkM5MTYuMDE5IDE2OC43MjkgOTEyLjUyMSAxNjMuMjQyIDkwOS45MTUgMTU2LjkzMkM5MDcuNDQ2IDE1MC42MjMgOTA2LjIxMiAxNDMuODMzIDkwNi4yMTIgMTM2LjU2NFpNOTMxLjEwNyAxMzYuNTY0QzkzMS4x''@;'; put 'put ''MDcgMTQwLjQwNCA5MzEuNzI0IDE0NC4wMzkgOTMyLjk1OSAxNDcuNDY4QzkzNC4xOTMgMTUwLjc2IDkzNS45MDggMTUzLjY0MSA5MzguMTAyIDE1Ni4xMDlDOTQwLjI5NyAxNTguNTc4IDk0Mi45MDMgMTYwLjU2NyA5NDUuOTIxIDE2Mi4wNzZDOTQ4LjkzOCAxNjMuNDQ4IDk1Mi4yMyAxNjQu''@;'; put 'put ''MTM0IDk1NS43OTYgMTY0LjEzNEM5NTkuMzYzIDE2NC4xMzQgOTYyLjY1NSAxNjMuNDQ4IDk2NS42NzIgMTYyLjA3NkM5NjguODI3IDE2MC41NjcgOTcxLjUwMiAxNTguNTc4IDk3My42OTYgMTU2LjEwOUM5NzUuODkxIDE1My42NDEgOTc3LjYwNSAxNTAuNzYgOTc4Ljg0IDE0Ny40NjhDOTgw''@;'; put 'put ''LjA3NCAxNDQuMDM5IDk4MC42OTIgMTQwLjQwNCA5ODAuNjkyIDEzNi41NjRDOTgwLjY5MiAxMzIuNzIzIDk4MC4wNzQgMTI5LjE1NyA5NzguODQgMTI1Ljg2NUM5NzcuNjA1IDEyMi40MzYgOTc1Ljg5MSAxMTkuNDg3IDk3My42OTYgMTE3LjAxOEM5NzEuNTAyIDExNC41NDkgOTY4LjgyNyAx''@;'; put 'put ''MTIuNjI5IDk2NS42NzIgMTExLjI1N0M5NjIuNjU1IDEwOS43NDggOTU5LjM2MyAxMDguOTk0IDk1NS43OTYgMTA4Ljk5NEM5NTIuMjMgMTA4Ljk5NCA5NDguOTM4IDEwOS43NDggOTQ1LjkyMSAxMTEuMjU3Qzk0Mi45MDMgMTEyLjYyOSA5NDAuMjk3IDExNC41NDkgOTM4LjEwMiAxMTcuMDE4''@;'; put 'put ''QzkzNS45MDggMTE5LjQ4NyA5MzQuMTkzIDEyMi40MzYgOTMyLjk1OSAxMjUuODY1QzkzMS43MjQgMTI5LjE1NyA5MzEuMTA3IDEzMi43MjMgOTMxLjEwNyAxMzYuNTY0Wk0xMDUwLjkgMTg0LjA5MUMxMDUwLjkgMTg2LjY5NyAxMDQ5LjU5IDE4OCAxMDQ2Ljk5IDE4OEgxMDMwLjk0QzEwMjku''@;'; put 'put ''ODQgMTg4IDEwMjguODggMTg3LjY1NyAxMDI4LjA2IDE4Ni45NzFDMTAyNy4zNyAxODYuMTQ4IDEwMjcuMDMgMTg1LjE4OCAxMDI3LjAzIDE4NC4wOTFWODkuMDM2NUMxMDI3LjAzIDg3LjkzOTEgMTAyNy4zNyA4Ny4wNDc2IDEwMjguMDYgODYuMzYxOEMxMDI4Ljg4IDg1LjUzODggMTAyOS44''@;'; put 'put ''NCA4NS4xMjczIDEwMzAuOTQgODUuMTI3M0gxMDQ2Ljk5QzEwNDkuNTkgODUuMTI3MyAxMDUwLjkgODYuNDMwMyAxMDUwLjkgODkuMDM2NVY5Ni42NDlDMTA1NC44OCA5My4zNTcxIDEwNTkuNDcgOTAuNTQ1MyAxMDY0LjY4IDg4LjIxMzVDMTA2OS44OSA4NS44ODE3IDEwNzUuMDQgODQuNzE1''@;'; put 'put ''OCAxMDgwLjExIDg0LjcxNThDMTA4NC45MSA4NC43MTU4IDEwODkuMzcgODUuNjA3NCAxMDkzLjQ5IDg3LjM5MDVDMTA5Ny42IDg5LjAzNjUgMTEwMS4xIDkxLjQzNjggMTEwMy45OCA5NC41OTE2QzExMDcgOTcuNjA5MiAxMTA5LjMzIDEwMS4xNzUgMTExMC45OCAxMDUuMjlDMTExMi42MiAx''@;'; put 'put ''MDkuNDA1IDExMTMuNDQgMTEzLjkzMiAxMTEzLjQ0IDExOC44N1YxODQuMDkxQzExMTMuNDQgMTg2LjY5NyAxMTEyLjE0IDE4OCAxMTA5LjUzIDE4OEgxMDkzLjQ5QzEwOTIuMzkgMTg4IDEwOTEuNDMgMTg3LjY1NyAxMDkwLjYxIDE4Ni45NzFDMTA4OS45MiAxODYuMTQ4IDEwODkuNTggMTg1''@;'; put 'put ''LjE4OCAxMDg5LjU4IDE4NC4wOTFWMTI2LjY4OEMxMDg5LjU4IDEyMS4wNjQgMTA4OC4yNyAxMTYuNzQ0IDEwODUuNjcgMTEzLjcyNkMxMDgzLjA2IDExMC41NzEgMTA3OS4zNiAxMDguOTk0IDEwNzQuNTYgMTA4Ljk5NEMxMDcxLjU0IDEwOC45OTQgMTA2OC41OSAxMDkuNjExIDEwNjUuNzEg''@;'; put 'put ''MTEwLjg0NUMxMDYyLjk3IDExMS45NDMgMTA2MC41IDExMy41MiAxMDU4LjMgMTE1LjU3OEMxMDU2LjI1IDExNy40OTggMTA1NC41MyAxMTkuODMgMTA1My4xNiAxMjIuNTczQzEwNTEuOTMgMTI1LjMxNiAxMDUxLjMxIDEyOC4xOTcgMTA1MS4zMSAxMzEuMjE0TDEwNTAuOSAxODQuMDkxWk0x''@;'; put 'put ''MTI3Ljg3IDg5LjAzNjVDMTEyNy44NyA4Ny45MzkxIDExMjguMjEgODcuMDQ3NiAxMTI4LjkgODYuMzYxOEMxMTI5LjU4IDg1LjUzODggMTEzMC40OCA4NS4xMjczIDExMzEuNTcgODUuMTI3M0gxMTQ2LjhWNTguMTc0NkMxMTQ2LjggNTcuMDc3MyAxMTQ3LjE0IDU2LjE4NTggMTE0Ny44MyA1''@;'; put 'put ''NS40OTk5QzExNDguNjUgNTQuNjc3IDExNDkuNjEgNTQuMjY1NSAxMTUwLjcxIDU0LjI2NTVIMTE2Ni43NkMxMTY5LjM2IDU0LjI2NTUgMTE3MC42NyA1NS41Njg1IDExNzAuNjcgNTguMTc0NlY4NS4xMjczSDExODguNzdDMTE4OS44NyA4NS4xMjczIDExOTAuNzYgODUuNTM4OCAxMTkxLjQ1''@;'; put 'put ''IDg2LjM2MThDMTE5Mi4xMyA4Ny4wNDc2IDExOTIuNDcgODcuOTM5MSAxMTkyLjQ3IDg5LjAzNjVWMTA0LjI2MkMxMTkyLjQ3IDEwNS4zNTkgMTE5Mi4xMyAxMDYuMjUgMTE5MS40NSAxMDYuOTM2QzExOTAuNzYgMTA3LjYyMiAxMTg5Ljg3IDEwNy45NjUgMTE4OC43NyAxMDcuOTY1SDExNzAu''@;'; put 'put ''NjdWMTg0LjA5MUMxMTcwLjY3IDE4Ni42OTcgMTE2OS4zNiAxODggMTE2Ni43NiAxODhIMTE1MC43MUMxMTQ5LjYxIDE4OCAxMTQ4LjY1IDE4Ny42NTcgMTE0Ny44MyAxODYuOTcxQzExNDcuMTQgMTg2LjE0OCAxMTQ2LjggMTg1LjE4OCAxMTQ2LjggMTg0LjA5MVYxMDcuOTY1SDExMzEuNTdD''@;'; put 'put ''MTEzMC40OCAxMDcuOTY1IDExMjkuNTggMTA3LjYyMiAxMTI4LjkgMTA2LjkzNkMxMTI4LjIxIDEwNi4yNSAxMTI3Ljg3IDEwNS4zNTkgMTEyNy44NyAxMDQuMjYyVjg5LjAzNjVaTTEyNzMuMjggMTA4LjE3MUMxMjcyLjg3IDEwOS4yNjggMTI3Mi4xOCAxMTAuMDIyIDEyNzEuMjIgMTEwLjQz''@;'; put 'put ''NEMxMjcwLjI2IDExMC44NDUgMTI2OS4yMyAxMTAuNzc3IDEyNjguMTQgMTEwLjIyOEMxMjY3LjA0IDEwOS42OCAxMjY1LjY3IDEwOS4yIDEyNjQuMDIgMTA4Ljc4OEMxMjYyLjUxIDEwOC4zNzcgMTI2MC44NyAxMDguMTcxIDEyNTkuMDggMTA4LjE3MUMxMjU2LjA3IDEwOC4xNzEgMTI1My4x''@;'; put 'put ''OSAxMDguNzg4IDEyNTAuNDQgMTEwLjAyMkMxMjQ3LjcgMTExLjI1NyAxMjQ1LjIzIDExMi45NzIgMTI0My4wNCAxMTUuMTY2QzEyNDAuOTggMTE3LjIyNCAxMjM5LjMzIDExOS42OTMgMTIzOC4xIDEyMi41NzNDMTIzNi44NiAxMjUuMzE2IDEyMzYuMjUgMTI4LjE5NyAxMjM2LjI1IDEzMS4y''@;'; put 'put ''MTRMMTIzNS44NCAxODQuMDkxQzEyMzUuODQgMTg1LjE4OCAxMjM1LjQ5IDE4Ni4xNDggMTIzNC44MSAxODYuOTcxQzEyMzQuMTIgMTg3LjY1NyAxMjMzLjIzIDE4OCAxMjMyLjEzIDE4OEgxMjE1Ljg4QzEyMTQuNzggMTg4IDEyMTMuODIgMTg3LjY1NyAxMjEzIDE4Ni45NzFDMTIxMi4zMSAx''@;'; put 'put ''ODYuMTQ4IDEyMTEuOTcgMTg1LjE4OCAxMjExLjk3IDE4NC4wOTFWODkuMDM2NUMxMjExLjk3IDg3LjkzOTEgMTIxMi4zMSA4Ny4wNDc2IDEyMTMgODYuMzYxOEMxMjEzLjgyIDg1LjUzODggMTIxNC43OCA4NS4xMjczIDEyMTUuODggODUuMTI3M0gxMjMyLjEzQzEyMzMuMjMgODUuMTI3MyAx''@;'; put 'put ''MjM0LjEyIDg1LjUzODggMTIzNC44MSA4Ni4zNjE4QzEyMzUuNDkgODcuMDQ3NiAxMjM1Ljg0IDg3LjkzOTEgMTIzNS44NCA4OS4wMzY1Vjk0LjU5MTZDMTIzOS44MSA5MS43MTExIDEyNDQuMDcgODkuMzc5NCAxMjQ4LjU5IDg3LjU5NjJDMTI1My4xMiA4NS42NzU5IDEyNTcuOTkgODQuNzE1''@;'; put 'put ''OCAxMjYzLjIgODQuNzE1OEMxMjY4LjU1IDg0LjcxNTggMTI3My4yMSA4NS43NDQ1IDEyNzcuMTkgODcuODAyQzEyNzkuMTEgODkuMDM2NSAxMjc5LjczIDkwLjYxMzggMTI3OS4wNCA5Mi41MzQxTDEyNzMuMjggMTA4LjE3MVpNMTI4NS4zMyAxMzYuNTY0QzEyODUuMzMgMTI5LjI5NCAxMjg2''@;'; put 'put ''LjYzIDEyMi41MDQgMTI4OS4yNCAxMTYuMTk1QzEyOTEuODUgMTA5Ljg4NSAxMjk1LjM0IDEwNC4zOTkgMTI5OS43MyA5OS43MzUyQzEzMDQuMjYgOTUuMDcxNyAxMzA5LjU0IDkxLjQzNjggMTMxNS41NyA4OC44MzA3QzEzMjEuNjEgODYuMDg3NCAxMzI4LjEyIDg0LjcxNTggMTMzNS4xMiA4''@;'; put 'put ''NC43MTU4QzEzNDIuMTIgODQuNzE1OCAxMzQ4LjU2IDg2LjA4NzQgMTM1NC40NiA4OC44MzA3QzEzNjAuNSA5MS40MzY4IDEzNjUuNzEgOTUuMDcxNyAxMzcwLjEgOTkuNzM1MkMxMzc0LjYyIDEwNC4zOTkgMTM3OC4xMiAxMDkuODg1IDEzODAuNTkgMTE2LjE5NUMxMzgzLjIgMTIyLjUwNCAx''@;'; put 'put ''Mzg0LjUgMTI5LjI5NCAxMzg0LjUgMTM2LjU2NEMxMzg0LjUgMTQzLjgzMyAxMzgzLjIgMTUwLjYyMyAxMzgwLjU5IDE1Ni45MzJDMTM3OC4xMiAxNjMuMjQyIDEzNzQuNjIgMTY4LjcyOSAxMzcwLjEgMTczLjM5MkMxMzY1LjcxIDE3OC4wNTYgMTM2MC41IDE4MS43NTkgMTM1NC40NiAxODQu''@;'; put 'put ''NTAyQzEzNDguNDMgMTg3LjEwOCAxMzQxLjkxIDE4OC40MTEgMTMzNC45MSAxODguNDExQzEzMjcuOTIgMTg4LjQxMSAxMzIxLjQgMTg3LjEwOCAxMzE1LjM3IDE4NC41MDJDMTMwOS4zMyAxODEuNzU5IDEzMDQuMDUgMTc4LjA1NiAxMjk5LjUzIDE3My4zOTJDMTI5NS4xNCAxNjguNzI5IDEy''@;'; put 'put ''OTEuNjQgMTYzLjI0MiAxMjg5LjAzIDE1Ni45MzJDMTI4Ni41NiAxNTAuNjIzIDEyODUuMzMgMTQzLjgzMyAxMjg1LjMzIDEzNi41NjRaTTEzMTAuMjMgMTM2LjU2NEMxMzEwLjIzIDE0MC40MDQgMTMxMC44NCAxNDQuMDM5IDEzMTIuMDggMTQ3LjQ2OEMxMzEzLjMxIDE1MC43NiAxMzE1LjAz''@;'; put 'put ''IDE1My42NDEgMTMxNy4yMiAxNTYuMTA5QzEzMTkuNDIgMTU4LjU3OCAxMzIyLjAyIDE2MC41NjcgMTMyNS4wNCAxNjIuMDc2QzEzMjguMDYgMTYzLjQ0OCAxMzMxLjM1IDE2NC4xMzQgMTMzNC45MSAxNjQuMTM0QzEzMzguNDggMTY0LjEzNCAxMzQxLjc3IDE2My40NDggMTM0NC43OSAxNjIu''@;'; put 'put ''MDc2QzEzNDcuOTUgMTYwLjU2NyAxMzUwLjYyIDE1OC41NzggMTM1Mi44MSAxNTYuMTA5QzEzNTUuMDEgMTUzLjY0MSAxMzU2LjcyIDE1MC43NiAxMzU3Ljk2IDE0Ny40NjhDMTM1OS4xOSAxNDQuMDM5IDEzNTkuODEgMTQwLjQwNCAxMzU5LjgxIDEzNi41NjRDMTM1OS44MSAxMzIuNzIzIDEz''@;'; put 'put ''NTkuMTkgMTI5LjE1NyAxMzU3Ljk2IDEyNS44NjVDMTM1Ni43MiAxMjIuNDM2IDEzNTUuMDEgMTE5LjQ4NyAxMzUyLjgxIDExNy4wMThDMTM1MC42MiAxMTQuNTQ5IDEzNDcuOTUgMTEyLjYyOSAxMzQ0Ljc5IDExMS4yNTdDMTM0MS43NyAxMDkuNzQ4IDEzMzguNDggMTA4Ljk5NCAxMzM0Ljkx''@;'; put 'put ''IDEwOC45OTRDMTMzMS4zNSAxMDguOTk0IDEzMjguMDYgMTA5Ljc0OCAxMzI1LjA0IDExMS4yNTdDMTMyMi4wMiAxMTIuNjI5IDEzMTkuNDIgMTE0LjU0OSAxMzE3LjIyIDExNy4wMThDMTMxNS4wMyAxMTkuNDg3IDEzMTMuMzEgMTIyLjQzNiAxMzEyLjA4IDEyNS44NjVDMTMxMC44NCAxMjku''@;'; put 'put ''MTU3IDEzMTAuMjMgMTMyLjcyMyAxMzEwLjIzIDEzNi41NjRaTTE0MDguMjEgMzcuMzk0NEMxNDA4LjIxIDM2LjI5NyAxNDA4LjU1IDM1LjQwNTUgMTQwOS4yNCAzNC43MTk3QzE0MTAuMDYgMzQuMDMzOCAxNDExLjAyIDMzLjY5MDkgMTQxMi4xMiAzMy42OTA5SDE0MjguMTZDMTQyOS4yNiAz''@;'; put 'put ''My42OTA5IDE0MzAuMTUgMzQuMDMzOCAxNDMwLjg0IDM0LjcxOTdDMTQzMS42NiAzNS40MDU1IDE0MzIuMDcgMzYuMjk3IDE0MzIuMDcgMzcuMzk0NFYxODQuMDkxQzE0MzIuMDcgMTg2LjY5NyAxNDMwLjc3IDE4OCAxNDI4LjE2IDE4OEgxNDEyLjEyQzE0MTEuMDIgMTg4IDE0MTAuMDYgMTg3''@;'; put 'put ''LjY1NyAxNDA5LjI0IDE4Ni45NzFDMTQwOC41NSAxODYuMTQ4IDE0MDguMjEgMTg1LjE4OCAxNDA4LjIxIDE4NC4wOTFWMzcuMzk0NFpNMTQ2MyAzNy4zOTQ0QzE0NjMgMzYuMjk3IDE0NjMuMzUgMzUuNDA1NSAxNDY0LjAzIDM0LjcxOTdDMTQ2NC44NSAzNC4wMzM4IDE0NjUuODEgMzMuNjkw''@;'; put 'put ''OSAxNDY2LjkxIDMzLjY5MDlIMTQ4Mi45NkMxNDg0LjA2IDMzLjY5MDkgMTQ4NC45NSAzNC4wMzM4IDE0ODUuNjMgMzQuNzE5N0MxNDg2LjQ2IDM1LjQwNTUgMTQ4Ni44NyAzNi4yOTcgMTQ4Ni44NyAzNy4zOTQ0VjE4NC4wOTFDMTQ4Ni44NyAxODYuNjk3IDE0ODUuNTcgMTg4IDE0ODIuOTYg''@;'; put 'put ''MTg4SDE0NjYuOTFDMTQ2NS44MSAxODggMTQ2NC44NSAxODcuNjU3IDE0NjQuMDMgMTg2Ljk3MUMxNDYzLjM1IDE4Ni4xNDggMTQ2MyAxODUuMTg4IDE0NjMgMTg0LjA5MVYzNy4zOTQ0Wk0xNTM3Ljc2IDE0OC4wODVDMTUzOS42OCAxNTIuODg2IDE1NDIuNTYgMTU2Ljc5NSAxNTQ2LjQgMTU5''@;'; put 'put ''LjgxM0MxNTUwLjM3IDE2Mi44MyAxNTU0LjkgMTY0LjMzOSAxNTU5Ljk4IDE2NC4zMzlDMTU2My42OCAxNjQuMzM5IDE1NjcuMjUgMTYzLjcyMiAxNTcwLjY3IDE2Mi40ODhDMTU3NC4xIDE2MS4yNTMgMTU3Ni45OCAxNTkuNTM5IDE1NzkuMzIgMTU3LjM0NEMxNTgwLjE0IDE1Ni42NTggMTU4''@;'; put 'put ''MS4wMyAxNTYuMzg0IDE1ODEuOTkgMTU2LjUyMUMxNTgzLjA5IDE1Ni41MjEgMTU4My45OCAxNTYuODY0IDE1ODQuNjcgMTU3LjU1TDE1OTYuMzkgMTY4LjY2QzE1OTcuMDggMTY5LjM0NiAxNTk3LjQyIDE3MC4yMzcgMTU5Ny40MiAxNzEuMzM1QzE1OTcuNDIgMTcyLjI5NSAxNTk3LjA4IDE3''@;'; put 'put ''My4xMTggMTU5Ni4zOSAxNzMuODA0QzE1OTEuODcgMTc4LjYwNCAxNTg2LjUyIDE4Mi4yMzkgMTU4MC4zNCAxODQuNzA4QzE1NzQuMTcgMTg3LjE3NyAxNTY3LjM4IDE4OC40MTEgMTU1OS45OCAxODguNDExQzE1NTMuMTIgMTg4LjQxMSAxNTQ2Ljc0IDE4Ny4xNzcgMTU0MC44NCAxODQuNzA4''@;'; put 'put ''QzE1MzUuMDggMTgyLjIzOSAxNTMwLjAxIDE3OC43NDEgMTUyNS42MiAxNzQuMjE1QzE1MjAuODIgMTY5LjQxNCAxNTE3LjExIDE2My43MjIgMTUxNC41MSAxNTcuMTM4QzE1MTEuOSAxNTAuNTU0IDE1MTAuNiAxNDMuNTU5IDE1MTAuNiAxMzYuMTUyQzE1MTAuNiAxMjkuMDIgMTUxMS45IDEy''@;'; put 'put ''Mi4zNjcgMTUxNC41MSAxMTYuMTk1QzE1MTcuMTEgMTA5Ljg4NSAxNTIwLjYxIDEwNC4zOTkgMTUyNSA5OS43MzUyQzE1MjkuNTMgOTUuMDcxNyAxNTM0LjgxIDkxLjQzNjggMTU0MC44NCA4OC44MzA3QzE1NDYuODggODYuMDg3NCAxNTUzLjMyIDg0LjcxNTggMTU2MC4xOCA4NC43MTU4QzE1''@;'; put 'put ''NjYuNDkgODQuNzE1OCAxNTcyLjMyIDg1Ljg4MTcgMTU3Ny42NyA4OC4yMTM1QzE1ODMuMTYgOTAuNTQ1MyAxNTg3Ljk2IDkzLjc2ODYgMTU5Mi4wNyA5Ny44ODM1QzE1OTMuODYgOTkuNTI5NSAxNTk1LjU3IDEwMS40NSAxNTk3LjIyIDEwMy42NDRDMTU5OC44NiAxMDUuODM5IDE2MDAuMyAx''@;'; put 'put ''MDguMzc3IDE2MDEuNTQgMTExLjI1N0MxNjAyLjc3IDExNC4xMzcgMTYwMy43MyAxMTcuNDk4IDE2MDQuNDIgMTIxLjMzOEMxNjA1LjI0IDEyNS4wNDIgMTYwNS42NSAxMjkuMjk0IDE2MDUuNjUgMTM0LjA5NUMxNjA1LjY1IDEzNy4zODcgMTYwNS40NSAxNDAuOTUzIDE2MDUuMDMgMTQ0Ljc5''@;'; put 'put ''M0MxNjA0Ljc2IDE0Ni45ODggMTYwMy41MyAxNDguMDg1IDE2MDEuMzMgMTQ4LjA4NUgxNTM3Ljc2Wk0xNTU5LjU2IDEwOC43ODhDMTU1My44IDEwOC43ODggMTU0OS4wNyAxMTAuMzY1IDE1NDUuMzcgMTEzLjUyQzE1NDEuNjYgMTE2LjY3NSAxNTM5LjA2IDEyMC41ODQgMTUzNy41NSAxMjUu''@;'; put 'put ''MjQ4SDE1ODAuNzZDMTU3OS4yNSAxMjAuODU4IDE1NzYuNzEgMTE3LjAxOCAxNTczLjE0IDExMy43MjZDMTU2OS43MSAxMTAuNDM0IDE1NjUuMTkgMTA4Ljc4OCAxNTU5LjU2IDEwOC43ODhaTTE2ODguNTEgMTA4LjE3MUMxNjg4LjEgMTA5LjI2OCAxNjg3LjQxIDExMC4wMjIgMTY4Ni40NSAx''@;'; put 'put ''MTAuNDM0QzE2ODUuNDkgMTEwLjg0NSAxNjg0LjQ2IDExMC43NzcgMTY4My4zNyAxMTAuMjI4QzE2ODIuMjcgMTA5LjY4IDE2ODAuOSAxMDkuMiAxNjc5LjI1IDEwOC43ODhDMTY3Ny43NCAxMDguMzc3IDE2NzYuMSAxMDguMTcxIDE2NzQuMzEgMTA4LjE3MUMxNjcxLjI5IDEwOC4xNzEgMTY2''@;'; put 'put ''OC40MSAxMDguNzg4IDE2NjUuNjcgMTEwLjAyMkMxNjYyLjkzIDExMS4yNTcgMTY2MC40NiAxMTIuOTcyIDE2NTguMjYgMTE1LjE2NkMxNjU2LjIxIDExNy4yMjQgMTY1NC41NiAxMTkuNjkzIDE2NTMuMzMgMTIyLjU3M0MxNjUyLjA5IDEyNS4zMTYgMTY1MS40NyAxMjguMTk3IDE2NTEuNDcg''@;'; put 'put ''MTMxLjIxNEwxNjUxLjA2IDE4NC4wOTFDMTY1MS4wNiAxODUuMTg4IDE2NTAuNzIgMTg2LjE0OCAxNjUwLjAzIDE4Ni45NzFDMTY0OS4zNSAxODcuNjU3IDE2NDguNDYgMTg4IDE2NDcuMzYgMTg4SDE2MzEuMTFDMTYzMC4wMSAxODggMTYyOS4wNSAxODcuNjU3IDE2MjguMjMgMTg2Ljk3MUMx''@;'; put 'put ''NjI3LjU0IDE4Ni4xNDggMTYyNy4yIDE4NS4xODggMTYyNy4yIDE4NC4wOTFWODkuMDM2NUMxNjI3LjIgODcuOTM5MSAxNjI3LjU0IDg3LjA0NzYgMTYyOC4yMyA4Ni4zNjE4QzE2MjkuMDUgODUuNTM4OCAxNjMwLjAxIDg1LjEyNzMgMTYzMS4xMSA4NS4xMjczSDE2NDcuMzZDMTY0OC40NiA4''@;'; put 'put ''NS4xMjczIDE2NDkuMzUgODUuNTM4OCAxNjUwLjAzIDg2LjM2MThDMTY1MC43MiA4Ny4wNDc2IDE2NTEuMDYgODcuOTM5MSAxNjUxLjA2IDg5LjAzNjVWOTQuNTkxNkMxNjU1LjA0IDkxLjcxMTEgMTY1OS4yOSA4OS4zNzk0IDE2NjMuODIgODcuNTk2MkMxNjY4LjM1IDg1LjY3NTkgMTY3My4y''@;'; put 'put ''MiA4NC43MTU4IDE2NzguNDMgODQuNzE1OEMxNjgzLjc4IDg0LjcxNTggMTY4OC40NCA4NS43NDQ1IDE2OTIuNDIgODcuODAyQzE2OTQuMzQgODkuMDM2NSAxNjk0Ljk2IDkwLjYxMzggMTY5NC4yNyA5Mi41MzQxTDE2ODguNTEgMTA4LjE3MVoiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVm''@;'; put 'put ''cz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDVfNyI+CjxyZWN0IHdpZHRoPSIxNjg5IiBoZWlnaHQ9IjI0MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dc-logo-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHZpZXdCb3g9IjAgMCA3MCA3MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwMV84KSI+CjxwYXRoIGQ9Ik0zNy41OTkzIDE2LjYyMTJDMzguNTkxNiAx''@;'; put 'put ''Ni43NDE1IDM5LjU1MzggMTYuODMxNyA0MC41NDYxIDE2Ljk1MTlDNDIuOTIxNiAxNy4yODI3IDQ1LjIzNyAxNy43MzM3IDQ3LjQwMiAxOC44NDYzQzQ4LjAzMzQgMTkuMTc3MSA0OC42MzQ4IDE5LjUzNzkgNDkuMDg1OSAyMC4xMDkyQzQ5LjgwNzUgMjAuOTUxMiA0OS43Nzc0IDIxLjg1MzMg''@;'; put 'put ''NDkuMDU1OCAyMi42OTUyQzQ4LjMwNCAyMy41MzcxIDQ3LjM0MTggMjQuMDE4MyA0Ni4zMTk1IDI0LjQwOTJDNDMuOTQ0IDI1LjM0MTMgNDEuNDQ4MiAyNS43NjIzIDM4LjkyMjQgMjUuOTcyOEMzNC44MDI5IDI2LjMwMzUgMzAuNzQzNSAyNi4xNTMyIDI2LjcxNDIgMjUuMTkxQzI1LjM5MTEg''@;'; put 'put ''MjQuODkwMyAyNC4wOTgxIDI0LjQ2OTMgMjIuOTI1NCAyMy44MDc4QzIyLjQ3NDQgMjMuNTY3MiAyMi4wNTM0IDIzLjI2NjUgMjEuNjYyNSAyMi45MDU3QzIwLjU4IDIxLjg1MzMgMjAuNTggMjAuNzQwNyAyMS42OTI2IDE5Ljc0ODRDMjIuODk1NCAxOC42NjU5IDI0LjM2ODggMTguMTU0NyAy''@;'; put 'put ''NS44NzIyIDE3LjczMzdDMjcuOTc3MSAxNy4xMzI0IDMwLjExMiAxNi44MzE3IDMyLjI3NyAxNi42ODEzQzMyLjQ1NzUgMTYuNjgxMyAzMi42Njc5IDE2Ljc0MTUgMzIuODE4MyAxNi41OTExQzM0LjM4MTkgMTYuNjIxMiAzNi4wMDU2IDE2LjYyMTIgMzcuNTk5MyAxNi42MjEyWiIgZmlsbD0i''@;'; put 'put ''I0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODUwNyA0MS4zMDgyQzIyLjc3NTEgNDMuNzczOCAyNS41MTE1IDQ0LjY3NTkgMjguMzM4IDQ1LjI3NzNDMzMuOTMwOSA0Ni40ODAxIDM5LjUyMzggNDYuMzI5NyA0NC45NjYzIDQ0LjQwNTNDNDYuNjUwMiA0My44MDM5IDQ4LjIxMzggNDIuOTkyIDQ5''@;'; put 'put ''LjMyNjQgNDEuNDg4NkM0OS41MDY4IDQxLjI0OCA0OS41OTcgNDEuMzY4MyA0OS42ODcyIDQxLjU0ODdDNDkuODY3NyA0MS45Mzk2IDQ5Ljk1NzkgNDIuMzMwNSA0OS45NTc5IDQyLjc1MTVDNDkuOTU3OSA0NC4yMjQ5IDQ5Ljk1NzkgNDUuNzI4NCA0OS45NTc5IDQ3LjIwMThDNDkuOTU3OSA0''@;'; put 'put ''OC4xNjQgNDkuNTA2OCA0OC45MTU3IDQ4Ljg0NTMgNDkuNTc3MkM0Ny40NjIxIDUwLjk2MDQgNDUuNzE4MSA1MS43MTIyIDQzLjg4MzggNTIuMjgzNUM0MC4xODUzIDUzLjQyNjEgMzYuMzk2NiA1My42NjY3IDMyLjU3NzcgNTMuMzk2MUMyOS43MjEyIDUzLjE4NTYgMjYuOTU0OCA1Mi42NDQz''@;'; put 'put ''IDI0LjMzODcgNTEuNDcxNkMyMy4yMjYxIDUwLjk2MDQgMjIuMjAzOCA1MC4zNTkxIDIxLjM5MTkgNDkuNDI2OUMyMC43NjA1IDQ4LjcwNTIgMjAuNDI5NyA0Ny44OTM0IDIwLjQyOTcgNDYuOTMxMUMyMC40NTk4IDQ1LjU3OCAyMC40Mjk3IDQ0LjIyNDkgMjAuNDI5NyA0Mi44NzE4QzIwLjQy''@;'; put 'put ''OTcgNDIuMzMwNSAyMC41MTk5IDQxLjgxOTMgMjAuODUwNyA0MS4zMDgyWiIgZmlsbD0iIzhFQzYzRiIvPgo8cGF0aCBkPSJNMjAuODgwNyAzMi4wMTY3QzIyLjQ3NDQgMzQuMTUxNiAyNC42OTk2IDM1LjA1MzcgMjcuMDc1IDM1LjY4NTJDMzIuNzU4MiAzNy4xODg2IDM4LjQ0MTMgMzcuMTU4''@;'; put 'put ''NiA0NC4wNjQzIDM1LjQ3NDdDNDUuOTI4NiAzNC45MzM0IDQ3LjY3MjYgMzQuMTIxNiA0OS4wMjU4IDMyLjY0ODJDNDkuMjA2MiAzMi40Njc3IDQ5LjMyNjUgMzIuMDQ2OCA0OS41MzY5IDMyLjEwNjlDNDkuODM3NiAzMi4xOTcxIDQ5LjgzNzYgMzIuNjE4MSA0OS45Mjc4IDMyLjk0ODhDNTAu''@;'; put 'put ''MDQ4MSAzMy40NiA0OS45ODggMzMuOTcxMiA0OS45ODggMzQuNDgyNEM0OS45ODggMzUuNTA0NyA0OS45NTc5IDM2LjQ5NyA0OS45ODggMzcuNTE5NEM1MC4wNDgxIDM4Ljc4MjMgNDkuNTM2OSAzOS43NzQ2IDQ4LjYwNDggNDAuNTg2NUM0Ny4xOTE1IDQxLjg0OTQgNDUuNDc3NiA0Mi42MDEx''@;'; put 'put ''IDQzLjY0MzMgNDMuMDgyMkMzNy40NzkxIDQ0LjczNjEgMzEuMzQ0OSA0NC43MDYgMjUuMzAwOSA0Mi42MDExQzIzLjgyNzUgNDIuMDkgMjIuNDc0NCA0MS4zNjgzIDIxLjM5MTkgNDAuMTk1NkMyMC43MzA0IDM5LjQ3MzkgMjAuMzk5NyAzOC42MzIgMjAuMzk5NyAzNy42Mzk3QzIwLjQyOTcg''@;'; put 'put ''MzYuMzE2NiAyMC4zOTk3IDM0Ljk2MzUgMjAuMzk5NyAzMy42NDA0QzIwLjQyOTcgMzMuMDk5MiAyMC41MTk5IDMyLjU1NzkgMjAuODgwNyAzMi4wMTY3WiIgZmlsbD0iI0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODIwNyAyMy4wODYxQzIxLjI3MTcgMjQuNDA5MSAyMi4zNTQyIDI1LjAxMDUg''@;'; put 'put ''MjMuNDk2OSAyNS41NTE3QzI1LjU0MTYgMjYuNTE0IDI3LjczNjYgMjYuOTY1IDI5LjkzMTcgMjcuMjM1N0MzNC4yOTE4IDI3Ljc3NjkgMzguNjUxOSAyNy43MTY4IDQyLjk1MTggMjYuODE0N0M0NC42OTU4IDI2LjQ1MzkgNDYuMzc5NyAyNS45NzI3IDQ3LjkxMzIgMjUuMDEwNUM0OC43ODUz''@;'; put 'put ''IDI0LjQ2OTMgNDkuMjM2MyAyMy45NTgxIDQ5LjUzNyAyMy4xMTYxQzQ5LjgzNzcgMjMuNTM3MSA0OS45Mjc5IDIzLjk4ODIgNDkuOTI3OSAyNC40MzkyQzQ5LjkyNzkgMjUuOTQyNyA0OS45NTggMjcuNDE2MSA0OS45Mjc5IDI4LjkxOTVDNDkuODk3OCAzMC4xODI1IDQ5LjE3NjIgMzEuMDg0''@;'; put 'put ''NSA0OC4yNDQgMzEuODM2M0M0Ni41IDMzLjIxOTUgNDQuNDU1MyAzMy45NDExIDQyLjMyMDMgMzQuNDIyM0MzNi42NjczIDM1LjY1NTEgMzEuMDc0NCAzNS41NjQ5IDI1LjU3MTcgMzMuNzAwNkMyNC4xMjgzIDMzLjIxOTUgMjIuNzQ1MSAzMi41Mjc5IDIxLjYzMjYgMzEuNDQ1NEMyMC43OTA2''@;'; put 'put ''IDMwLjYzMzUgMjAuMzM5NiAyOS43MDE0IDIwLjM2OTYgMjguNDk4NkMyMC4zOTk3IDI3LjIwNTYgMjAuMzY5NiAyNS45MTI2IDIwLjM2OTYgMjQuNjE5NkMyMC40Mjk4IDI0LjA0ODMgMjAuNTIgMjMuNTY3MiAyMC44MjA3IDIzLjA4NjFaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik01''@;'; put 'put ''NS4zNDAzIDYzLjQzOTNDNjAuMjQxNyA2My43MDk5IDYyLjg1NzcgNTcuNjk2IDU5LjMwOTUgNTQuMjk4MUM1NS41ODA5IDUwLjcxOTkgNDkuNDQ2NyA1NC4wNTc2IDUwLjQwOSA1OS4xMDkzQzI4LjI0NzggNzMuMjQxOSAtMC4yNTgwMzQgNTIuMTAzMSA3Ljg2MDcxIDI2LjQyMzhMMi4zODgw''@;'; put 'put ''OCAyMi43NTUzQy05LjkxMDMzIDU1LjQ0MDggMjcuOTQ3MSA4My4wNzQ2IDU1LjM0MDMgNjMuNDM5M1pNNTMuNzc2NyA1Ni4zNzI5QzU2LjA2MiA1My45OTc0IDU5LjcwMDQgNTcuMzA1MSA1Ny41NjU1IDU5LjgwMDlDNTUuMzEwMyA2Mi40MTY5IDUxLjM0MTEgNTguODk4OCA1My43NzY3IDU2''@;'; put 'put ''LjM3MjlaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik0xMC42MjcyIDE1LjI2ODFDMTQuMTQ1MyAxOC42MzU4IDE5Ljk0ODcgMTUuODY5NCAxOS42MTc5IDExLjA1ODNDNDEuNzQ5IC0zLjE5NDYxIDcwLjQwNTIgMTcuOTE0MiA2Mi4yODY1IDQzLjY4MzZMNjcuNzU5MSA0Ny4zNTIxQzc5''@;'; put 'put ''LjY5NjcgMTUuNTk4OCA0My40NjMgLTEyLjk5NzIgMTUuNDM4MyA2LjIxNzE1QzEwLjE3NjEgNS4xMzQ2NSA2Ljc3ODI3IDExLjU2OTUgMTAuNjI3MiAxNS4yNjgxWk0xNi4xNTk5IDEzLjE5MzNDMTMuODE0NSAxNS42Mjg5IDEwLjExNiAxMi4wODA3IDEyLjQ2MTQgOS42NDUwN0MxNC44MDY4''@;'; put 'put ''IDcuMjA5NDQgMTguNTA1NCAxMC43NTc2IDE2LjE1OTkgMTMuMTkzM1oiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDFfOCI+CjxyZWN0IHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8''@;'; put 'put ''L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=favicon-ico; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP''@;'; put 'put ''AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/''@;'; put 'put ''P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1''@;'; put 'put ''wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h''@;'; put 'put ''zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS''@;'; put 'put ''O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ''@;'; put 'put ''CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD''@;'; put 'put ''mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy''@;'; put 'put ''n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY''@;'; put 'put ''SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR''@;'; put 'put ''PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01''@;'; put 'put ''6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10''@;'; put 'put ''3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi''@;'; put 'put ''p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4''@;'; put 'put ''nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy''@;'; put 'put ''Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj''@;'; put 'put ''Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0''@;'; put 'put ''N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv''@;'; put 'put ''Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA''@;'; put 'put ''n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y''@;'; put 'put ''Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp''@;'; put 'put ''b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB''@;'; put 'put ''VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ''@;'; put 'put ''eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ''@;'; put 'put ''AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB''@;'; put 'put ''TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z''@;'; put 'put ''UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg''@;'; put 'put ''ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p''@;'; put 'put ''qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe''@;'; put 'put ''EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN''@;'; put 'put ''TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS''@;'; put 'put ''Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu''@;'; put 'put ''9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN''@;'; put 'put ''VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p''@;'; put 'put ''G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs''@;'; put 'put ''InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg''@;'; put 'put ''DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa''@;'; put 'put ''K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH''@;'; put 'put ''cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM''@;'; put 'put ''RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W''@;'; put 'put ''jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH''@;'; put 'put ''NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy''@;'; put 'put ''F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB''@;'; put 'put ''QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD''@;'; put 'put ''bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S''@;'; put 'put ''AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A''@;'; put 'put ''3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc''@;'; put 'put ''uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN''@;'; put 'put ''Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B''@;'; put 'put ''CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm''@;'; put 'put ''7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG''@;'; put 'put ''bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh''@;'; put 'put ''3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV''@;'; put 'put ''ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL''@;'; put 'put ''LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg''@;'; put 'put ''a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp''@;'; put 'put ''P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp''@;'; put 'put ''QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5''@;'; put 'put ''RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh''@;'; put 'put ''KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu''@;'; put 'put ''9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3''@;'; put 'put ''t4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ''@;'; put 'put ''APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s''@;'; put 'put ''fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY''@;'; put 'put ''FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH''@;'; put 'put ''UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB''@;'; put 'put ''GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4''@;'; put 'put ''ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+''@;'; put 'put ''Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp''@;'; put 'put ''PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM''@;'; put 'put ''sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ''@;'; put 'put ''QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s''@;'; put 'put ''Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al''@;'; put 'put ''ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ''@;'; put 'put ''RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP''@;'; put 'put ''qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW''@;'; put 'put ''xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d''@;'; put 'put ''k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b''@;'; put 'put ''M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL''@;'; put 'put ''bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW''@;'; put 'put ''/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm''@;'; put 'put ''LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl''@;'; put 'put ''YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v''@;'; put 'put ''iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf''@;'; put 'put ''az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1''@;'; put 'put ''MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30''@;'; put 'put ''tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN''@;'; put 'put ''YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl''@;'; put 'put ''91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD''@;'; put 'put ''20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk''@;'; put 'put ''QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K''@;'; put 'put ''LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5''@;'; put 'put ''kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt''@;'; put 'put ''gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9''@;'; put 'put ''bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX''@;'; put 'put ''C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7''@;'; put 'put ''BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw''@;'; put 'put ''cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM''@;'; put 'put ''xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN''@;'; put 'put ''P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s''@;'; put 'put ''3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt''@;'; put 'put ''zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX''@;'; put 'put ''sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t''@;'; put 'put ''SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr''@;'; put 'put ''1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895''@;'; put 'put ''TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn''@;'; put 'put ''vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz''@;'; put 'put ''vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx''@;'; put 'put ''hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy''@;'; put 'put ''OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb''@;'; put 'put ''1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0''@;'; put 'put ''wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ''@;'; put 'put ''jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2''@;'; put 'put ''I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH''@;'; put 'put ''2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5''@;'; put 'put ''JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt''@;'; put 'put ''urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ''@;'; put 'put ''Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ''@;'; put 'put ''yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w''@;'; put 'put ''JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ''@;'; put 'put ''oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537''@;'; put 'put ''XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q''@;'; put 'put ''XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6''@;'; put 'put ''13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK''@;'; put 'put ''RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H''@;'; put 'put ''KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV''@;'; put 'put ''HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA''@;'; put 'put ''i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj''@;'; put 'put ''BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2''@;'; put 'put ''PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr''@;'; put 'put ''DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp''@;'; put 'put ''xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8''@;'; put 'put ''EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye''@;'; put 'put ''BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ''@;'; put 'put ''2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk''@;'; put 'put ''T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA''@;'; put 'put ''Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK''@;'; put 'put ''7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa''@;'; put 'put ''Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT''@;'; put 'put ''DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7''@;'; put 'put ''9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv''@;'; put 'put ''wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ''@;'; put 'put ''AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG''@;'; put 'put ''x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6''@;'; put 'put ''VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj''@;'; put 'put ''O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI''@;'; put 'put ''fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca''@;'; put 'put ''+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G''@;'; put 'put ''WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq''@;'; put 'put ''McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD''@;'; put 'put ''CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje''@;'; put 'put ''pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L''@;'; put 'put ''/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re''@;'; put 'put ''qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm''@;'; put 'put ''y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583''@;'; put 'put ''P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p''@;'; put 'put ''QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE''@;'; put 'put ''ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh''@;'; put 'put ''3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr''@;'; put 'put ''P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU''@;'; put 'put ''HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d''@;'; put 'put ''B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK''@;'; put 'put ''oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe''@;'; put 'put ''+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu''@;'; put 'put ''9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5''@;'; put 'put ''tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd''@;'; put 'put ''LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG''@;'; put 'put ''7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP''@;'; put 'put ''6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw''@;'; put 'put ''LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a''@;'; put 'put ''NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54''@;'; put 'put ''FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u''@;'; put 'put ''b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY''@;'; put 'put ''A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha''@;'; put 'put ''U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl''@;'; put 'put ''uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM''@;'; put 'put ''GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA''@;'; put 'put ''GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi''@;'; put 'put ''0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+''@;'; put 'put ''1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl''@;'; put 'put ''+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN''@;'; put 'put ''alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp''@;'; put 'put ''JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL''@;'; put 'put ''kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy''@;'; put 'put ''uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm''@;'; put 'put ''UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw''@;'; put 'put ''9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz''@;'; put 'put ''vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p''@;'; put 'put ''JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U''@;'; put 'put ''70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95''@;'; put 'put ''EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24''@;'; put 'put ''7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX''@;'; put 'put ''H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o''@;'; put 'put ''Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ''@;'; put 'put ''JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ''@;'; put 'put ''FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A''@;'; put 'put ''jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o''@;'; put 'put ''+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf''@;'; put 'put ''8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA''@;'; put 'put ''QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX''@;'; put 'put ''09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC''@;'; put 'put ''3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn''@;'; put 'put ''/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS''@;'; put 'put ''RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt''@;'; put 'put ''5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy''@;'; put 'put ''o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV''@;'; put 'put ''8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E''@;'; put 'put ''8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8''@;'; put 'put ''8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0''@;'; put 'put ''VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK''@;'; put 'put ''1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw''@;'; put 'put ''Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU''@;'; put 'put ''Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz''@;'; put 'put ''HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3''@;'; put 'put ''uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW''@;'; put 'put ''hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N''@;'; put 'put ''eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl''@;'; put 'put ''4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0''@;'; put 'put ''xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP''@;'; put 'put ''+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh''@;'; put 'put ''Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6''@;'; put 'put ''Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7''@;'; put 'put ''7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw''@;'; put 'put ''PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze''@;'; put 'put ''hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK''@;'; put 'put ''qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz''@;'; put 'put ''0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i''@;'; put 'put ''zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ''@;'; put 'put ''mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo''@;'; put 'put ''ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH''@;'; put 'put ''v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S''@;'; put 'put ''BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp''@;'; put 'put ''Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte''@;'; put 'put ''/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku''@;'; put 'put ''5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus''@;'; put 'put ''k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt''@;'; put 'put ''PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V''@;'; put 'put ''J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN''@;'; put 'put ''undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v''@;'; put 'put ''YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m''@;'; put 'put ''AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO''@;'; put 'put ''Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v''@;'; put 'put ''yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4''@;'; put 'put ''QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b''@;'; put 'put ''1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl''@;'; put 'put ''43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe''@;'; put 'put ''nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4''@;'; put 'put ''Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML''@;'; put 'put ''YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k''@;'; put 'put ''MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//''@;'; put 'put ''/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO''@;'; put 'put ''4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce''@;'; put 'put ''rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr''@;'; put 'put ''kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7''@;'; put 'put ''Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg''@;'; put 'put ''4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp''@;'; put 'put ''mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f''@;'; put 'put ''8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY''@;'; put 'put ''9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo''@;'; put 'put ''soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx''@;'; put 'put ''0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB''@;'; put 'put ''R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO''@;'; put 'put ''/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn''@;'; put 'put ''RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i''@;'; put 'put ''wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y''@;'; put 'put ''FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR''@;'; put 'put ''G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm''@;'; put 'put ''k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj''@;'; put 'put ''HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW''@;'; put 'put ''cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm''@;'; put 'put ''/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r''@;'; put 'put ''SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU''@;'; put 'put ''PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL''@;'; put 'put ''hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu''@;'; put 'put ''1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV''@;'; put 'put ''0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7''@;'; put 'put ''9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ''@;'; put 'put ''P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm''@;'; put 'put ''SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3''@;'; put 'put ''z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL''@;'; put 'put ''bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV''@;'; put 'put ''jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV''@;'; put 'put ''WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI''@;'; put 'put ''G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH''@;'; put 'put ''i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e''@;'; put 'put ''v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt''@;'; put 'put ''AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum''@;'; put 'put ''wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1''@;'; put 'put ''2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v''@;'; put 'put ''a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L''@;'; put 'put ''A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV''@;'; put 'put ''Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0''@;'; put 'put ''9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T''@;'; put 'put ''Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO''@;'; put 'put ''bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw''@;'; put 'put ''+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57''@;'; put 'put ''Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n''@;'; put 'put ''a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq''@;'; put 'put ''sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu''@;'; put 'put ''HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk''@;'; put 'put ''H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw''@;'; put 'put ''rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq''@;'; put 'put ''N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/''@;'; put 'put ''kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O''@;'; put 'put ''Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM''@;'; put 'put ''8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ''@;'; put 'put ''wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM''@;'; put 'put ''1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL''@;'; put 'put ''Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR''@;'; put 'put ''R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim''@;'; put 'put ''txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk''@;'; put 'put ''7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj''@;'; put 'put ''6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA''@;'; put 'put ''o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17''@;'; put 'put ''9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm''@;'; put 'put ''UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8''@;'; put 'put ''/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6''@;'; put 'put ''WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E''@;'; put 'put ''hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC''@;'; put 'put ''LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA''@;'; put 'put ''EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6''@;'; put 'put ''0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy''@;'; put 'put ''oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC''@;'; put 'put ''GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/''@;'; put 'put ''Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz''@;'; put 'put ''jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w''@;'; put 'put ''763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6''@;'; put 'put ''Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX''@;'; put 'put ''3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb''@;'; put 'put ''YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ''@;'; put 'put ''vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7''@;'; put 'put ''yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz''@;'; put 'put ''4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O''@;'; put 'put ''d1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL''@;'; put 'put ''AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc''@;'; put 'put ''PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g''@;'; put 'put ''IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI''@;'; put 'put ''aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9''@;'; put 'put ''8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on''@;'; put 'put ''CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto''@;'; put 'put ''59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx''@;'; put 'put ''P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb''@;'; put 'put ''nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP''@;'; put 'put ''M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K''@;'; put 'put ''72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ''@;'; put 'put ''8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE''@;'; put 'put ''gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n''@;'; put 'put ''M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d''@;'; put 'put ''eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF''@;'; put 'put ''IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ''@;'; put 'put ''TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn''@;'; put 'put ''aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X''@;'; put 'put ''iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L''@;'; put 'put ''1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/''@;'; put 'put ''UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE''@;'; put 'put ''aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy''@;'; put 'put ''dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA''@;'; put 'put ''SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl''@;'; put 'put ''wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf''@;'; put 'put ''r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW''@;'; put 'put ''clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU''@;'; put 'put ''3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd''@;'; put 'put ''nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2''@;'; put 'put ''EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v''@;'; put 'put ''ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul''@;'; put 'put ''JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm''@;'; put 'put ''0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3''@;'; put 'put ''ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA''@;'; put 'put ''EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI''@;'; put 'put ''9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T''@;'; put 'put ''JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ''@;'; put 'put ''M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn''@;'; put 'put ''LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb''@;'; put 'put ''fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H''@;'; put 'put ''DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH''@;'; put 'put ''VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m''@;'; put 'put ''qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b''@;'; put 'put ''hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X''@;'; put 'put ''/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+''@;'; put 'put ''/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu''@;'; put 'put ''PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS''@;'; put 'put ''qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN''@;'; put 'put ''V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p''@;'; put 'put ''pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt''@;'; put 'put ''D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y''@;'; put 'put ''dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU''@;'; put 'put ''aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a''@;'; put 'put ''ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd''@;'; put 'put ''undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk''@;'; put 'put ''WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd''@;'; put 'put ''RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw''@;'; put 'put ''a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz''@;'; put 'put ''/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx''@;'; put 'put ''DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/''@;'; put 'put ''v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL''@;'; put 'put ''qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O''@;'; put 'put ''BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX''@;'; put 'put ''jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf''@;'; put 'put ''v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY''@;'; put 'put ''vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn''@;'; put 'put ''pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk''@;'; put 'put ''gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830''@;'; put 'put ''8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2''@;'; put 'put ''STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs''@;'; put 'put ''qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL''@;'; put 'put ''vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV''@;'; put 'put ''AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3''@;'; put 'put ''Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84''@;'; put 'put ''rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li''@;'; put 'put ''lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT''@;'; put 'put ''9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ''@;'; put 'put ''m+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le''@;'; put 'put ''p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl''@;'; put 'put ''OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0''@;'; put 'put ''GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi''@;'; put 'put ''Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh''@;'; put 'put ''RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef''@;'; put 'put ''HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w''@;'; put 'put ''6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1''@;'; put 'put ''NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz''@;'; put 'put ''zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh''@;'; put 'put ''iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII''@;'; put 'put ''A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM''@;'; put 'put ''DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV''@;'; put 'put ''DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9''@;'; put 'put ''NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI''@;'; put 'put ''MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj''@;'; put 'put ''KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky''@;'; put 'put ''raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x''@;'; put 'put ''ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ''@;'; put 'put ''ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N''@;'; put 'put ''sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU''@;'; put 'put ''XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS''@;'; put 'put ''wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ''@;'; put 'put ''AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs''@;'; put 'put ''wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF''@;'; put 'put ''prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner.16f763cebc6b64df-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; options notes; data _null_; format url $256.; rc=METADATA_GETURI("Stored Process Web App",url); url=coalescec(url,"localhost/SASStoredProcess"); urlEscaped = tranwrd(trim(url)," ","%20"); putlog "NOTE: SASjs Streaming App Created! Check it out here:" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; putlog "NOTE- " urlEscaped +(-1) "?_program=&appLoc/services/clickme" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; run;